@linzumi/cli 1.0.141 → 1.0.142
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/README.md +1 -1
- package/dist/impl-res/index.js +80 -80
- package/dist/impl-res/mcp-server.mjs +1 -1
- package/dist/impl-ts/index.js +51 -48
- package/dist/impl-ts/mcp-server.mjs +1 -1
- package/dist/mcp-server.mjs +1 -1
- package/package.json +1 -1
package/dist/impl-ts/index.js
CHANGED
|
@@ -19,13 +19,13 @@ Atomics.notify(status, 0);
|
|
|
19
19
|
if (parentPort) parentPort.postMessage(result);
|
|
20
20
|
`});var R$={};yo(R$,{defaultLocalProjectSourceRootsForTest:()=>Xre,discoverCurrentGitProject:()=>Qre});import{spawnSync as Jre}from"node:child_process";import{homedir as Kre}from"node:os";import{existsSync as v$,readdirSync as S$,readFileSync as Vre,statSync as Wre}from"node:fs";import{basename as k$,dirname as Pv,join as Wu}from"node:path";function Zre(){let e=process.env.LINZUMI_ONBOARDING_PROJECT_SCAN_BUDGET_MS?.trim();if(e===void 0||e==="")return w$;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:w$}function Qre(e){let n=e.nowMs??Date.now(),t=e.placeResponsiveness,r=new Map,o=[],i=Ev(e.selectedScanRoots??[]),s=new Set(i),a=e.sourceRoots??I$({cwd:e.cwd,homeDir:e.homeDir,selectedScanRoots:i}),d=coe(e.sourceRootMaxDepth),u=Date.now()+loe(e.sourceRootScanBudgetMs),c=()=>({deadlineMs:u,maxDirectoryVisits:poe(e.sourceRootMaxDirectoryVisits),maxProjectEnrichments:foe(e.sourceRootMaxProjectEnrichments),directoryVisits:0,projectEnrichments:0,exhausted:!1}),l=c(),p=0,m=Zre();for(let x of a){if(Date.now()-n>=m){o.push({place:x,source:"git",duration_ms:0,result_count:0,skipped_scan_budget_exceeded:!0}),p+=1;continue}let b=Date.now(),S=s.has(x),v=S?c():l;if(Iv(v)){o.push({place:x,source:"git",duration_ms:Date.now()-b,result_count:0,scan_budget_exhausted:!0}),p+=1;continue}if(!yg(x,t)){o.push({place:x,source:"git",duration_ms:Date.now()-b,result_count:0,skipped_unresponsive:!0}),p+=1;continue}if(!Rv(x)){S&&(o.push({place:x,source:"git",duration_ms:Date.now()-b,result_count:0,missing_directory:!0}),p+=1);continue}let R=roe(x,d,t,v),P=eoe(r,R,v);o.push({place:x,source:"git",duration_ms:Date.now()-b,result_count:P,scan_budget_exhausted:v.exhausted?!0:void 0}),p+=1,v.exhausted}if(e.includeRuntimeCwdHint!==!1){let x=yg(e.cwd,t),b=Date.now(),S=x?Za(e.cwd,["rev-parse","--show-toplevel"]):void 0,v=Date.now()-b;S!==void 0&&Yre(r,C$(S,"runtime_cwd_hint",S)),o.push({place:e.cwd,source:"git",duration_ms:v,result_count:S===void 0?0:1,skipped_unresponsive:x?void 0:!0}),p+=1}let f=Array.from(r.values()).sort(toe),y=f.reduce((x,b)=>{let S=b.metadata.worktree_count;return typeof S=="number"?x+S:x},0);return y>0&&(o.push({place:"git worktree list --porcelain",source:"git",duration_ms:0,result_count:y}),p+=1),{candidates:f,placesSearched:p,durationMs:Math.max(0,Date.now()-n),searchStats:o}}function Xre(e){return I$(e)}function C$(e,n,t){let r=Za(e,["rev-parse","--show-toplevel"]);if(r===void 0)return;let o=moe(r),i=o[0]??r,s=Za(r,["config","--get","remote.origin.url"]),a=Za(r,["branch","--show-current"]),d=Za(r,["rev-parse","HEAD"]),u=Za(r,["log","-1","--format=%cI"]),c=hoe(i),l=c??k$(i),p=s??i,m=t===void 0||t===i||!o.includes(t)?void 0:t;return{importKey:p,path:i,displayName:l,activityAt:u,metadata:goe({branch:a,remote_origin:s,head_sha:d,discovery_method:n,canonical_path:i,current_worktree_path:m,worktree_count:o.length===0?void 0:o.length,worktree_paths:o.length===0?void 0:o.slice(0,g$),worktree_paths_truncated:o.length>g$?!0:void 0,last_commit_at:u,readme_name:c})}}function T$(e,n){if(n===void 0)return;let t=e.get(n.importKey);if(t===void 0||noe(t,n)){e.set(n.importKey,n);return}let r=n.metadata.current_worktree_path;t.metadata.current_worktree_path===void 0&&typeof r=="string"&&e.set(n.importKey,{...t,metadata:{...t.metadata,current_worktree_path:r}})}function Yre(e,n){if(n===void 0)return;let t=e.get(n.importKey);if(t!==void 0&&t.metadata.discovery_method==="local_source_root"&&t.path!==n.path){e.set(n.importKey,{...n,metadata:{...n.metadata,discovery_method:"local_source_root"}});return}T$(e,n)}function eoe(e,n,t){return n.reduce((r,o)=>{if(!ioe(t))return r;let i=C$(o,"local_source_root");return i===void 0?r:(T$(e,i),r+1)},0)}function noe(e,n){let t=e.metadata.discovery_method,r=n.metadata.discovery_method;if(t==="runtime_cwd_hint")return r!=="runtime_cwd_hint";if(r==="runtime_cwd_hint")return!1;let o=Date.parse(e.activityAt??""),i=Date.parse(n.activityAt??"");return Number.isNaN(o)?!Number.isNaN(i):Number.isNaN(i)?!1:i>o}function toe(e,n){let t=Date.parse(e.activityAt??""),r=Date.parse(n.activityAt??"");return!Number.isNaN(t)&&!Number.isNaN(r)?r-t:Number.isNaN(t)?Number.isNaN(r)?e.displayName.localeCompare(n.displayName):1:-1}function roe(e,n,t,r){return Rv(e)?Ev(P$(e,n,t,r)).sort():[]}function P$(e,n,t,r){if(!ooe(r))return[];if(n<0)return[];if(soe(e))return[e];if(n===0)return[];let o;try{o=S$(e,{withFileTypes:!0})}catch{return[]}return o.flatMap(i=>{if(!i.isDirectory())return[];if(Gre.has(i.name))return[];let s=Wu(e,i.name);return Iv(r)?[]:yg(s,t)?P$(s,n-1,t,r):[]})}function ooe(e){return Iv(e)?!1:(e.directoryVisits+=1,!0)}function ioe(e){return Date.now()>=e.deadlineMs||e.projectEnrichments>=e.maxProjectEnrichments?(e.exhausted=!0,!1):(e.projectEnrichments+=1,!0)}function Iv(e){return e.exhausted?!0:Date.now()>=e.deadlineMs||e.directoryVisits>=e.maxDirectoryVisits||e.projectEnrichments>=e.maxProjectEnrichments?(e.exhausted=!0,!0):!1}function soe(e){return v$(Wu(e,".git"))}function I$(e){return e.cwd===Pv(e.cwd)?[]:Ev([...doe(e.homeDir),...e.selectedScanRoots??[],...aoe(e.cwd),...uoe()])}function aoe(e){let n=new Set(["code","src","projects","Developer","workspace","work"]),t=[],r=e;for(;r!==Pv(r);)n.has(k$(r))&&t.push(r),r=Pv(r);return t}function doe(e){let n=e??Kre();return["code","src","projects","Developer","workspace","work","Documents","Desktop"].map(t=>Wu(n,t))}function uoe(){let e="/Volumes";if(!Rv(e))return[];try{return S$(e,{withFileTypes:!0}).flatMap(n=>{if(!n.isDirectory())return[];let t=Wu(e,n.name);return["code","src","projects"].map(r=>Wu(t,r))})}catch{return[]}}function Rv(e){try{return Wre(e).isDirectory()}catch{return!1}}function coe(e){return e===void 0||!Number.isFinite(e)||e<0?y$:Math.floor(e)}function loe(e){return e===void 0||!Number.isFinite(e)||e<=0?x$:Math.floor(e)}function poe(e){return e===void 0||!Number.isFinite(e)||e<=0?_$:Math.floor(e)}function foe(e){return e===void 0||!Number.isFinite(e)||e<=0?b$:Math.floor(e)}function Ev(e){return Array.from(new Set(e))}function Za(e,n){let t=Jre("git",n,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:Hre,killSignal:"SIGKILL"});if(t.error!==void 0||t.status!==0)return;let r=t.stdout.trim();return r===""?void 0:r}function moe(e){let n=Za(e,["worktree","list","--porcelain"]);return n===void 0?[]:n.split(`
|
|
21
21
|
`).flatMap(t=>t.startsWith("worktree ")?[t.slice(9)]:[])}function hoe(e){let n=["README.md","README.markdown","readme.md"].map(t=>Wu(e,t)).find(t=>v$(t));if(n!==void 0)try{let r=Vre(n,"utf8").split(`
|
|
22
|
-
`).map(o=>o.trim()).find(o=>o.startsWith("# "))?.replace(/^#+\s+/u,"").trim();return r===void 0||r===""?void 0:r}catch{return}}function goe(e){return Object.fromEntries(Object.entries(e).filter(n=>{let t=n[1];return t!==void 0&&t!==""}))}var g$,Hre,y$,x$,_$,b$,Gre,w$,E$=F(()=>{"use strict";h$();g$=25,Hre=4e3,y$=4,x$=2e4,_$=5e3,b$=100,Gre=new Set([".cache",".git",".next",".pnpm-store",".turbo","build","dist","Library","node_modules","target"]),w$=2e4});function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function D$(e){let n=[["threadId",e.threadId],["turnId",e.turnId],["itemId",e.itemId],["processId",e.processId],["requestId",e.requestId]].filter(t=>t[1]!==void 0);return Object.fromEntries(n)}var $n=F(()=>{"use strict"});function A(e){return e!==void 0&&Z(e)?e:void 0}function
|
|
22
|
+
`).map(o=>o.trim()).find(o=>o.startsWith("# "))?.replace(/^#+\s+/u,"").trim();return r===void 0||r===""?void 0:r}catch{return}}function goe(e){return Object.fromEntries(Object.entries(e).filter(n=>{let t=n[1];return t!==void 0&&t!==""}))}var g$,Hre,y$,x$,_$,b$,Gre,w$,E$=F(()=>{"use strict";h$();g$=25,Hre=4e3,y$=4,x$=2e4,_$=5e3,b$=100,Gre=new Set([".cache",".git",".next",".pnpm-store",".turbo","build","dist","Library","node_modules","target"]),w$=2e4});function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function D$(e){let n=[["threadId",e.threadId],["turnId",e.turnId],["itemId",e.itemId],["processId",e.processId],["requestId",e.requestId]].filter(t=>t[1]!==void 0);return Object.fromEntries(n)}var $n=F(()=>{"use strict"});function A(e){return e!==void 0&&Z(e)?e:void 0}function qe(e){return Array.isArray(e)?e:void 0}function h(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function Y(e){return typeof e=="number"&&Number.isInteger(e)?e:void 0}function Pp(e){return Array.isArray(e)?e.flatMap(n=>{let t=h(n);return t===void 0?[]:[t]}):[]}function Qa(e){try{let n=JSON.parse(e);return Z(n)?n:void 0}catch{return}}var Hn=F(()=>{"use strict";$n()});var G$={};yo(G$,{cleanConversationTitleForTest:()=>qoe,discoverLocalConversations:()=>Dv,readLocalConversationImportMessages:()=>Mv});import{closeSync as yoe,existsSync as j$,openSync as xoe,readdirSync as _oe,readFileSync as boe,readSync as M$,statSync as F$}from"node:fs";import{basename as z$,join as Ip}from"node:path";import{homedir as woe}from"node:os";function Dv(e={}){let n=e.nowMs??Date.now(),t=e.homeDir??woe(),r=e.env??process.env,o=Ip(r.CODEX_HOME??Ip(t,".codex"),"sessions"),i=Ip(r.CLAUDE_CONFIG_DIR??Ip(t,".claude"),"projects"),s=Date.now(),a=L$(o),d=Date.now()-s,u=Date.now(),c=L$(i),l=Date.now()-u,p=c.filter(x=>!x.replaceAll("\\","/").includes("/subagents/")),m=voe(e.candidateLimit);return{candidates:[...O$("codex",a),...O$("claude_code",p)].sort(Soe).slice(0,m).flatMap(x=>{let b=koe(x);return b===void 0?[]:[b]}),codexCount:a.length,claudeCodeCount:p.length,claudeCodeSubagentCount:c.length-p.length,placesSearched:Coe([o,i]),durationMs:Math.max(0,Date.now()-n),searchStats:[{place:o,source:"codex",duration_ms:d,result_count:a.length},{place:i,source:"claude_code",duration_ms:l,result_count:p.length,subagent_result_count:c.length-p.length}]}}function Mv(e){let n=Ioe(e.path);switch(e.source){case"codex":return Roe(n);case"claude_code":return Eoe(n)}}function voe(e){return e===void 0?$$:Number.isFinite(e)&&e>0?Math.floor(e):$$}function O$(e,n){return n.flatMap(t=>{try{return[{source:e,path:t,mtimeMs:F$(t).mtimeMs}]}catch{return[]}})}function Soe(e,n){return n.mtimeMs-e.mtimeMs||e.path.localeCompare(n.path)}function koe(e){switch(e.source){case"codex":return Toe(e.path,new Date(e.mtimeMs).toISOString());case"claude_code":return Poe(e.path,new Date(e.mtimeMs).toISOString())}}function L$(e){if(!j$(e))return[];let n=t=>{let r;try{r=_oe(t,{withFileTypes:!0})}catch{return[]}return r.flatMap(o=>{let i=Ip(t,o.name);return o.isDirectory()?n(i):o.isFile()&&o.name.endsWith(".jsonl")?[i]:[]})};return n(e)}function Coe(e){return e.filter(n=>j$(n)).length}function Toe(e,n){let t=q$(e),r=A(t.find(d=>d.type==="session_meta")?.payload),o=h(r?.id)??Boe(e),i=h(r?.cwd),s=joe(t);if(s===void 0&&Foe(t))return;let a=Bs(s);if(a!==void 0)return{source:"codex",importKey:o??e,path:e,displayName:a,activityAt:n,metadata:H$({session_id:o,project_path:i,title:a,first_user_message:Bs(s),discovery_method:"local_filesystem"})}}function Poe(e,n){let t=q$(e),r=t.map(d=>h(d.sessionId)).find(Boolean)??z$(e,".jsonl"),o=t.map(d=>h(d.cwd)).find(Boolean),i=t.map(d=>h(d.aiTitle)).find(Boolean),s=zoe(t),a=Bs(i)??Bs(s);if(a!==void 0)return{source:"claude_code",importKey:r,path:e,displayName:a,activityAt:n,metadata:H$({session_id:r,project_path:o,title:a,first_user_message:Bs(s),discovery_method:"local_filesystem"})}}function q$(e){return Loe(e).flatMap(n=>{try{let t=JSON.parse(n);return Z(t)?[t]:[]}catch{return[]}})}function Ioe(e){try{return boe(e,"utf8").split(`
|
|
23
23
|
`).filter(n=>n.trim()!=="").flatMap(n=>{try{let t=JSON.parse(n);return Z(t)?[t]:[]}catch{return[]}})}catch{return[]}}function Roe(e){return e.flatMap((n,t)=>{if(n.type!=="response_item")return[];let r=A(n.payload),o=U$(h(r?.role)),i=r?.content,s=B$(Rp(i),o),a=K$(i),d=N$(n,r);return s===void 0&&a.length===0?[]:[{itemKey:`codex:${t}`,role:o,body:s??J$(o,a.length),attachments:a,activityAt:d}]})}function Eoe(e){return e.flatMap((n,t)=>{let r=A(n.message),o=U$(h(r?.role)??h(n.type)),i=r?.content??n.content,s=B$(Rp(i),o),a=K$(i),d=N$(n,r);return s===void 0&&a.length===0?[]:[{itemKey:`claude:${t}`,role:o,body:s??J$(o,a.length),attachments:a,activityAt:d}]})}function N$(e,n){return[h(e.timestamp),h(n?.timestamp),h(e.created_at),h(n?.created_at),h(e.createdAt),h(n?.createdAt),h(e.updated_at),h(n?.updated_at)].find(t=>t!==void 0&&!Number.isNaN(Date.parse(t)))}function U$(e){switch(e){case"assistant":return"assistant";case"system":return"system";case"tool":case"tool_result":case"function_call_output":return"tool";default:return"user"}}function B$(e,n){let t=e.map(r=>r.trim()).filter(r=>!Doe(r)).filter(r=>r!=="").join(`
|
|
24
24
|
|
|
25
|
-
`).trim();if(t!=="")return t}function Doe(e){let n=e.replace(/\s+/gu," ").trim();return n.startsWith("<turn_aborted>")||n.startsWith("<subagent_notification>")||n.startsWith("<environment_context>")||n.startsWith("# AGENTS.md instructions")||n.startsWith("# Context from my IDE setup")||n.startsWith("# Context from my editor")}function J$(e,n){return`${Moe(e)} sent ${n} attachment${n===1?"":"s"}`}function Moe(e){switch(e){case"assistant":return"Assistant";case"system":return"System";case"tool":return"Tool";case"user":return"User"}}function K$(e){return
|
|
25
|
+
`).trim();if(t!=="")return t}function Doe(e){let n=e.replace(/\s+/gu," ").trim();return n.startsWith("<turn_aborted>")||n.startsWith("<subagent_notification>")||n.startsWith("<environment_context>")||n.startsWith("# AGENTS.md instructions")||n.startsWith("# Context from my IDE setup")||n.startsWith("# Context from my editor")}function J$(e,n){return`${Moe(e)} sent ${n} attachment${n===1?"":"s"}`}function Moe(e){switch(e){case"assistant":return"Assistant";case"system":return"System";case"tool":return"Tool";case"user":return"User"}}function K$(e){return qe(e)?.flatMap((n,t)=>{let r=A(n);return r===void 0?[]:Aoe(r,t)})??[]}function Aoe(e,n){let t=h(e.path)??h(e.file_path)??h(e.filePath),r=h(e.name)??h(e.file_name)??h(e.filename),o=h(e.mime_type)??h(e.media_type)??h(e.content_type);if(t!==void 0)return[{kind:"path",path:t,fileName:r,contentType:o}];let i=A(e.source),s=h(e.data)??h(i?.data)??$oe(e),a=h(i?.media_type)??h(e.media_type)??h(e.mime_type)??h(e.content_type);return s!==void 0&&a!==void 0?[{kind:"bytes",dataBase64:s,fileName:r??`conversation-attachment-${n+1}${Ooe(a)}`,contentType:a}]:[]}function $oe(e){let n=h(e.image_url)??h(e.url);return n===void 0?void 0:n.match(/^data:[^;,]+;base64,(.+)$/u)?.[1]}function Ooe(e){switch(e){case"image/jpeg":return".jpg";case"image/png":return".png";case"image/gif":return".gif";case"image/webp":return".webp";default:return""}}function Loe(e){let n;try{let t=F$(e);n=xoe(e,"r");let r=Buffer.alloc(Math.min(xg,t.size)),o=M$(n,r,0,r.length,0),i=r.subarray(0,o).toString("utf8");if(t.size<=xg)return i.split(`
|
|
26
26
|
`).filter(c=>c.trim()!=="");let s=Buffer.alloc(xg),a=Math.max(0,t.size-xg),d=M$(n,s,0,s.length,a),u=s.subarray(0,d).toString("utf8");return`${i}
|
|
27
27
|
${u}`.split(`
|
|
28
|
-
`).filter(c=>c.trim()!=="")}catch{return[]}finally{n!==void 0&&yoe(n)}}function joe(e){return e.filter(n=>n.type==="response_item").map(n=>A(n.payload)).filter(n=>n!==void 0).filter(n=>n.role==="user").flatMap(n=>Rp(n.content)).filter(n=>!V$(n)).map(Bs).find(n=>n!==void 0)}function Foe(e){return e.filter(n=>n.type==="response_item").map(n=>A(n.payload)).filter(n=>n!==void 0).filter(n=>n.role==="user").flatMap(n=>Rp(n.content)).some(V$)}function zoe(e){return e.filter(n=>n.type==="user").map(n=>A(n.message)).flatMap(n=>Rp(n?.content)).map(Bs).find(n=>n!==void 0)}function Rp(e){let n=h(e);return n!==void 0?[n]:
|
|
28
|
+
`).filter(c=>c.trim()!=="")}catch{return[]}finally{n!==void 0&&yoe(n)}}function joe(e){return e.filter(n=>n.type==="response_item").map(n=>A(n.payload)).filter(n=>n!==void 0).filter(n=>n.role==="user").flatMap(n=>Rp(n.content)).filter(n=>!V$(n)).map(Bs).find(n=>n!==void 0)}function Foe(e){return e.filter(n=>n.type==="response_item").map(n=>A(n.payload)).filter(n=>n!==void 0).filter(n=>n.role==="user").flatMap(n=>Rp(n.content)).some(V$)}function zoe(e){return e.filter(n=>n.type==="user").map(n=>A(n.message)).flatMap(n=>Rp(n?.content)).map(Bs).find(n=>n!==void 0)}function Rp(e){let n=h(e);return n!==void 0?[n]:qe(e)?.flatMap(t=>{let r=A(t),o=h(r?.text);return o===void 0?[]:[o]})??[]}function Bs(e){if(e===void 0)return;let t=e.replace(/^Kandan message seq=\d+ from [^\n]+:\n\n/u,"").replace(/\n\nWhen you create files that should be attached back to Linzumi,[\s\S]*$/u,""),r=Uoe(t),o=t.replace(/\s+/gu," ").trim();if(o!=="")return Noe(o)?r:W$(o)}function qoe(e){return Bs(e)}function V$(e){let n=e.replace(/\s+/gu," ").trim();return n.startsWith("You are Linzumi onboarding discovery running on the user computer.")||n.startsWith("You are Linzumi onboarding conversation discovery running on the user computer.")}function Noe(e){return e.startsWith("<environment_context>")||e.startsWith("# Context from my IDE setup")||e.startsWith("# Context from my editor")||e.startsWith("# AGENTS.md instructions")||e.includes("<INSTRUCTIONS>")||e.startsWith("You are Linzumi onboarding discovery running on the user computer.")||e.startsWith("You are Linzumi onboarding conversation discovery running on the user computer.")||e.startsWith("We need answer user?")}function Uoe(e){let t=e.match(/(?:^|\n)Task:\s*\n+([^\n]+)/u)?.[1]?.replace(/\s+/gu," ").trim();return t===void 0||t===""?void 0:W$(t)}function W$(e){return e.length>A$?`${e.slice(0,A$-3)}...`:e}function Boe(e){let n=z$(e,".jsonl");return n===""?void 0:n}function H$(e){return Object.fromEntries(Object.entries(e).filter(n=>{let t=n[1];return t!==void 0&&t!==""}))}var xg,A$,$$,Av=F(()=>{"use strict";$n();Hn();xg=64*1024,A$=140,$$=100});import{spawn as Joe}from"node:child_process";async function Z$(e,n){return X$("projects",e,n,{candidates:[],placesSearched:0,durationMs:0,searchStats:[]})}async function Q$(e){return X$("conversations",{},e,{candidates:[],codexCount:0,claudeCodeCount:0,claudeCodeSubagentCount:0,placesSearched:0,durationMs:0,searchStats:[]})}async function X$(e,n,t,r){let o=t.entryPath??process.argv[1],i=t.execPath??process.execPath,s=t.timeoutMs??Koe;return o===void 0||o===""?(t.log("onboarding.discovery_child_entry_missing",{kind:e}),r):await new Promise(a=>{let d=!1,u=m=>{d||(d=!0,a(m))},c;try{c=Joe(i,[o],{env:{...process.env,[$v]:e},stdio:["pipe","pipe","ignore"]})}catch(m){t.log("onboarding.discovery_child_spawn_failed",{kind:e,message:m instanceof Error?m.message:String(m)}),u(r);return}let l=setTimeout(()=>{t.log("onboarding.discovery_child_timeout",{kind:e,timeoutMs:s}),c.kill("SIGKILL"),u(r)},s);l.unref?.();let p=[];c.stdout?.on("data",m=>p.push(m)),c.on("error",m=>{clearTimeout(l),t.log("onboarding.discovery_child_spawn_failed",{kind:e,message:m instanceof Error?m.message:String(m)}),u(r)}),c.on("close",m=>{if(clearTimeout(l),m!==0){t.log("onboarding.discovery_child_failed",{kind:e,code:m}),u(r);return}try{let f=JSON.parse(Buffer.concat(p).toString("utf8"));u(f)}catch(f){t.log("onboarding.discovery_child_invalid_output",{kind:e,message:f instanceof Error?f.message:String(f)}),u(r)}}),c.stdin?.end(JSON.stringify(n))})}async function Y$(e,n,t){let r=[];for await(let i of n)r.push(Buffer.from(i));let o;try{let i=Buffer.concat(r).toString("utf8");o=i.trim()===""?{}:JSON.parse(i)}catch{return 1}if(e==="projects"){let{discoverCurrentGitProject:i}=await Promise.resolve().then(()=>(E$(),R$)),s=typeof o.cwd=="string"?o.cwd:process.cwd(),a=typeof o.homeDir=="string"?o.homeDir:void 0,d=Array.isArray(o.sourceRoots)?o.sourceRoots.filter(p=>typeof p=="string"):void 0,u=Array.isArray(o.selectedScanRoots)?o.selectedScanRoots.filter(p=>typeof p=="string"):void 0,c=typeof o.sourceRootMaxDepth=="number"?o.sourceRootMaxDepth:void 0,l=typeof o.includeRuntimeCwdHint=="boolean"?o.includeRuntimeCwdHint:void 0;return t.write(JSON.stringify(i({cwd:s,homeDir:a,sourceRoots:d,selectedScanRoots:u,includeRuntimeCwdHint:l,sourceRootMaxDepth:c}))),0}if(e==="conversations"){let{discoverLocalConversations:i}=await Promise.resolve().then(()=>(Av(),G$));return t.write(JSON.stringify(i())),0}return 1}var $v,Koe,Ov=F(()=>{"use strict";$v="LINZUMI_ONBOARDING_DISCOVERY_ROLE",Koe=12e4});import{createWriteStream as Voe,mkdirSync as tO,writeFileSync as Woe}from"node:fs";import{basename as Hoe,dirname as Goe,join as Lv,resolve as Zoe}from"node:path";function rO(e){let n=Zoe(e.dir),t=Lv(n,sie(e.runId));tO(t,{recursive:!0}),Woe(Lv(t,"manifest.json"),`${JSON.stringify({createdAt:new Date().toISOString(),runId:e.runId,contentMode:e.contentMode,...nO(e.manifest,e.contentMode)},null,2)}
|
|
29
29
|
`,"utf8");let r=new Map,o=0,i={runDir:t,contentMode:e.contentMode,record:(s,a,d={})=>{let u=nie(r,t,s);o+=1,u.write(`${JSON.stringify({ts:new Date().toISOString(),mono_ms:iie(),seq:o,event:a,...nO(d,e.contentMode)})}
|
|
30
30
|
`,"utf8")},close:async()=>{await Promise.all(Array.from(r.values(),aie))}};return i.record("commander","debug_trace.started",{run_dir:t,content_mode:e.contentMode}),i}function oO(e){switch(e){case void 0:case"":case"summary":return"summary";case"full":return"full"}throw new Error(`invalid --debug-trace-content: expected summary or full, got ${e}`)}function nO(e,n){return aO(e,n,0)}function iO(e){let n=t=>dO(t.replace(/-/g,"_"));return e.map((t,r)=>{let o=t.indexOf("=");if(t.startsWith("-")&&o>0){let s=t.slice(0,o);return n(s)?`${s}=${Hu}`:t}let i=r>0?e[r-1]:void 0;return i!==void 0&&i.startsWith("-")&&!i.includes("=")&&n(i)?Hu:t})}function nie(e,n,t){let r=e.get(t);if(r!==void 0)return r;let o=Lv(n,`${t}.ndjson`);tO(Goe(o),{recursive:!0});let i=Voe(o,{flags:"a"});return e.set(t,i),i}function sO(e,n,t,r){if(dO(r))return Hu;if(t>Yoe)return"<MAX_DEPTH>";switch(typeof e){case"string":return rie(e,n);case"number":case"boolean":return e;case"bigint":return e.toString();case"undefined":return null;case"symbol":case"function":return`[${typeof e}]`;case"object":return e===null?null:Array.isArray(e)?tie(e,n,t+1):aO(e,n,t+1)}}function aO(e,n,t){let r=Object.entries(e),o=n==="full"?r:r.slice(0,Xoe),i=Object.fromEntries(o.map(([s,a])=>[s,sO(a,n,t,s)]));return n==="summary"&&r.length>o.length?{...i,__truncated_object_entries:r.length-o.length}:i}function tie(e,n,t){let r=n==="full"?e:e.slice(0,Qoe),o=r.map(i=>sO(i,n,t,void 0));return n==="summary"&&e.length>r.length?{items:o,truncated_items:e.length-r.length}:o}function rie(e,n){let t=oie(e);return n==="full"||t.length<=eO?t:{preview:t.slice(0,eO),chars:t.length,truncated:!0}}function oie(e){return e.replace(/\bBearer\s+[A-Za-z0-9._~+/=-]+/gi,`Bearer ${Hu}`).replace(/([?&](?:access_token|refresh_token|token|code)=)[^&#\s]+/gi,`$1${Hu}`).replace(/\b(login_url|authorization|cookie|set-cookie|token|secret|password)=\S+/gi,`$1=${Hu}`)}function dO(e){if(e===void 0)return!1;let n=e.toLowerCase();return eie.some(t=>n.includes(t))}function iie(){return Number(process.hrtime.bigint()/1000000n)}function sie(e){let n=Hoe(e).replace(/[^A-Za-z0-9._-]/g,"_");return n===""?"debug-trace":n}function aie(e){return e.closed||e.destroyed?Promise.resolve():new Promise((n,t)=>{e.once("error",t),e.end(n)})}var Hu,eO,Qoe,Xoe,Yoe,eie,jv=F(()=>{"use strict";Hu="<SENSITIVE_DATA>",eO=240,Qoe=20,Xoe=40,Yoe=6,eie=["access_token","anthropic_custom_headers","api_key","authorization","cookie","kandan_preview_ticket","login_url","oauth","password","refresh_token","secret","set-cookie","token"]});import{spawnSync as die}from"node:child_process";import{mkdirSync as uie,readFileSync as cie,readdirSync as lie,rmSync as cO,writeFileSync as pie}from"node:fs";import{homedir as fie}from"node:os";import{dirname as uO,join as Fv}from"node:path";function zv(){return Fv(fie(),".linzumi","protected-dev-listeners")}function hie(){return cs.mirrorPathOverride??Fv(zv(),`${process.pid}.json`)}function _g(e,n,t=Date.now()){let r=n.filter(o=>Number.isInteger(o.pid)&&o.pid>1);r.length===0?cs.listenersBySource.delete(e):cs.listenersBySource.set(e,{listeners:r,updatedAtMs:t}),yie(t)}function gie(e=Date.now()){let n=new Set;for(let t of cs.listenersBySource.values())if(!(e-t.updatedAtMs>Ep))for(let r of t.listeners)n.add(r.pid);return n}function yie(e){let n=[...cs.listenersBySource.values()].filter(i=>e-i.updatedAtMs<=Ep).flatMap(i=>i.listeners).sort((i,s)=>i.pid-s.pid||i.port-s.port),t=JSON.stringify({pids:n.map(i=>i.pid),ports:n.map(i=>i.port)}),r=JSON.stringify({updatedAtMs:e,pids:n.map(i=>i.pid),ports:n.map(i=>i.port)});if(!(cs.lastMirrorPayloadJson===t&&e-cs.lastMirrorWriteMs<mie))try{let i=hie();n.length===0?cO(i,{force:!0}):(uie(uO(i),{recursive:!0}),pie(i,r)),cs.lastMirrorPayloadJson=t,cs.lastMirrorWriteMs=e,xie(uO(i),i,e)}catch{}}function xie(e,n,t){let r;try{r=lie(e)}catch{return}for(let o of r){let i=Fv(e,o);if(!(i===n||!o.endsWith(".json")))try{let s=JSON.parse(cie(i,"utf8")),a=s!==null&&typeof s=="object"?s.updatedAtMs:void 0;typeof a=="number"&&t-a>Ep&&cO(i,{force:!0})}catch{}}}function _ie(e){return e.split(`
|
|
31
31
|
`).map(n=>n.trim().match(/^(\d+)\s+(\d+)$/)).filter(n=>n!==null).map(n=>({pid:Number(n[1]),pgid:Number(n[2])}))}function bie(e){try{let n=die("ps",["-axo","pid=,pgid="],{encoding:"utf8",timeout:5e3,killSignal:"SIGKILL"});return n.error!==void 0||n.status!==0?void 0:_ie(n.stdout).filter(t=>t.pgid===e).map(t=>t.pid)}catch{return}}function bg(e,n,t=process.kill,r=bie,o=gie()){if(o.size>0){let i=r(e);if(i!==void 0){let s=i.filter(a=>o.has(a));if(s.length>0){let a=[],d=new Set(i.filter(u=>!o.has(u)));d.add(e);for(let u of d)try{t(u,n)}catch(c){wie(c)!=="ESRCH"&&a.push({pid:u,error:c})}return{mode:"individual",sparedPids:s,failures:a}}}}return t(-e,n),{mode:"group",sparedPids:[],failures:[]}}function wie(e){if(e!==null&&typeof e=="object"&&"code"in e){let n=e.code;return typeof n=="string"?n:void 0}}var Ep,mie,cs,Gu=F(()=>{"use strict";Ep=5*6e4,mie=6e4,cs={listenersBySource:new Map,lastMirrorPayloadJson:void 0,lastMirrorWriteMs:0,mirrorPathOverride:void 0}});var vi,lO=F(()=>{vi={_generated:"GENERATED by scripts/naming_dual_emit_codegen.mjs from scripts/naming_canonical_key_map.json (N2.2 dual-emit, D46) - DO NOT EDIT; run: node scripts/naming_dual_emit_codegen.mjs --write",events:[["codex.agent_turn_narration_only_no_reply","harness.agent_turn_narration_only_no_reply"],["codex.cost_cap_402_seen","harness.cost_cap_402_seen"],["codex.edge_blocked_captured","harness.edge_blocked_captured"],["codex.empty_turn_auto_retry_suppressed_cost_cap","harness.empty_turn_auto_retry_suppressed_cost_cap"],["codex.empty_turn_loop_guard_tripped","harness.empty_turn_loop_guard_tripped"],["codex.error_without_http_status_captured","harness.error_without_http_status_captured"],["codex.mid_stream_stall_auto_resume_flagged","harness.mid_stream_stall_auto_resume_flagged"],["codex.mid_stream_stall_resume_suppressed_rate_limit","harness.mid_stream_stall_resume_suppressed_rate_limit"],["codex.mid_stream_stall_second_stall_after_resume","harness.mid_stream_stall_second_stall_after_resume"],["codex.pre_first_byte_stall_auto_retry_flagged","harness.pre_first_byte_stall_auto_retry_flagged"],["codex.pre_first_byte_stall_retry_suppressed_cost_cap","harness.pre_first_byte_stall_retry_suppressed_cost_cap"],["codex.provider_outage_flagged_captured","harness.provider_outage_flagged_captured"],["codex.reasoning_loop_breaker_tripped","harness.reasoning_loop_breaker_tripped"],["codex.tool_fatal_captured","harness.tool_fatal_captured"],["codex.turn_completed","job.turn_completed"],["codex.turn_completed_with_protocol_failure","job.turn_completed_with_protocol_failure"],["codex.turn_completed_with_unsupported_tool_call_ignored","job.turn_completed_with_unsupported_tool_call_ignored"],["codex.turn_completed_without_assistant_output","job.turn_completed_without_assistant_output"],["codex.turn_forward_failed","job.turn_forward_failed"],["codex.upstream_error_captured","harness.upstream_error_captured"],["codex.upstream_rejection_captured","harness.upstream_rejection_captured"],["codex.upstream_turn_error_captured","harness.upstream_turn_error_captured"],["kandan.chat_event","linzumi.chat_event"],["kandan.chat_event_abandoned","linzumi.chat_event_abandoned"],["kandan.chat_event_failed","linzumi.chat_event_failed"],["kandan.chat_event_failure_cleared","linzumi.chat_event_failure_cleared"],["kandan.claude_code_interrupt_state_push_failed","linzumi.claude_code_interrupt_state_push_failed"],["kandan.claude_code_stop_state_push_failed","linzumi.claude_code_stop_state_push_failed"],["kandan.claude_code_typing_heartbeat_failed","linzumi.claude_code_typing_heartbeat_failed"],["kandan.claude_code_typing_start_wait_timeout","linzumi.claude_code_typing_start_wait_timeout"],["kandan.claude_code_typing_stop_failed","linzumi.claude_code_typing_stop_failed"],["kandan.claude_code_user_input_abort_publish_failed","linzumi.claude_code_user_input_abort_publish_failed"],["kandan.claude_code_user_question_completed_publish_failed","linzumi.claude_code_user_question_completed_publish_failed"],["kandan.codex_command_output_forwarded","linzumi.codex_command_output_forwarded"],["kandan.codex_delta_forwarded","linzumi.codex_delta_forwarded"],["kandan.codex_file_change_forwarded","linzumi.codex_file_change_forwarded"],["kandan.codex_notification_push_failed","linzumi.codex_notification_push_failed"],["kandan.codex_output_forwarded","linzumi.codex_output_forwarded"],["kandan.codex_reasoning_delta_forwarded","linzumi.codex_reasoning_delta_forwarded"],["kandan.codex_web_search_progress_forwarded","linzumi.codex_web_search_progress_forwarded"],["kandan.connection_force_reconnect","linzumi.connection_force_reconnect"],["kandan.connection_force_reconnect_dispatched","linzumi.connection_force_reconnect_dispatched"],["kandan.connection_hard_reset","linzumi.connection_hard_reset"],["kandan.connection_hard_reset_exhausted","linzumi.connection_hard_reset_exhausted"],["kandan.connection_recovered","linzumi.connection_recovered"],["kandan.connection_stale","linzumi.connection_stale"],["kandan.connection_unrecoverable","linzumi.connection_unrecoverable"],["kandan.control","linzumi.control"],["kandan.control_ack_withheld_on_failure","linzumi.control_ack_withheld_on_failure"],["kandan.control_epoch_changed","linzumi.control_epoch_changed"],["kandan.control_handler_threw","linzumi.control_handler_threw"],["kandan.control_ignored","linzumi.control_ignored"],["kandan.control_response_push_failed","linzumi.control_response_push_failed"],["kandan.failed_seq_overflow","linzumi.failed_seq_overflow"],["kandan.forward_port_revoked_push_failed","linzumi.forward_port_revoked_push_failed"],["kandan.forward_response","linzumi.forward_response"],["kandan.forward_response_push_failed","linzumi.forward_response_push_failed"],["kandan.forward_tunnel_error","linzumi.forward_tunnel_error"],["kandan.forward_tunnel_open_failed","linzumi.forward_tunnel_open_failed"],["kandan.heartbeat_push_failed","linzumi.heartbeat_push_failed"],["kandan.local_editor_initial_status_failed","linzumi.local_editor_initial_status_failed"],["kandan.local_editor_status_push_failed","linzumi.local_editor_status_push_failed"],["kandan.message_duplicate_ignored","linzumi.message_duplicate_ignored"],["kandan.message_ignored","linzumi.message_ignored"],["kandan.message_queued","linzumi.message_queued"],["kandan.message_spawn_on_miss","linzumi.message_spawn_on_miss"],["kandan.message_spawn_on_miss_failed","linzumi.message_spawn_on_miss_failed"],["kandan.message_state_refresh_failed","linzumi.message_state_refresh_failed"],["kandan.optional_push_failed","linzumi.optional_push_failed"],["kandan.post_stop_queue_drain_failed","linzumi.post_stop_queue_drain_failed"],["kandan.queue_drain_blocked","linzumi.queue_drain_blocked"],["kandan.queue_drain_dead_worker_fail_publish_failed","linzumi.queue_drain_dead_worker_fail_publish_failed"],["kandan.queue_drain_dead_worker_rebuild","linzumi.queue_drain_dead_worker_rebuild"],["kandan.queue_drain_dead_worker_rebuild_exhausted","linzumi.queue_drain_dead_worker_rebuild_exhausted"],["kandan.queue_drain_dead_worker_rebuild_failed","linzumi.queue_drain_dead_worker_rebuild_failed"],["kandan.reconnect_handling_failed","linzumi.reconnect_handling_failed"],["kandan.reconnect_thread_context_fetch_failed","linzumi.reconnect_thread_context_fetch_failed"],["kandan.reconnect_thread_cwd_failed_state_push_failed","linzumi.reconnect_thread_cwd_failed_state_push_failed"],["kandan.reconnect_thread_failed","linzumi.reconnect_thread_failed"],["kandan.reconnect_thread_processing_state_push_failed","linzumi.reconnect_thread_processing_state_push_failed"],["kandan.reconnect_thread_queue_closed_state_push_failed","linzumi.reconnect_thread_queue_closed_state_push_failed"],["kandan.reconnect_thread_queue_failed_state_push_failed","linzumi.reconnect_thread_queue_failed_state_push_failed"],["kandan.reconnect_thread_queue_state_push_failed","linzumi.reconnect_thread_queue_state_push_failed"],["kandan.reconnect_thread_rehydrate_forced","linzumi.reconnect_thread_rehydrate_forced"],["kandan.reconnect_thread_rehydrated","linzumi.reconnect_thread_rehydrated"],["kandan.reconnect_thread_rehydrated_state_push_failed","linzumi.reconnect_thread_rehydrated_state_push_failed"],["kandan.reconnect_thread_rehydration_failed","linzumi.reconnect_thread_rehydration_failed"],["kandan.reconnect_thread_rehydration_ir_emitted","linzumi.reconnect_thread_rehydration_ir_emitted"],["kandan.reconnect_thread_rehydration_items_failed","linzumi.reconnect_thread_rehydration_items_failed"],["kandan.reconnect_thread_resume_failed","linzumi.reconnect_thread_resume_failed"],["kandan.reconnect_thread_seq_already_applied","linzumi.reconnect_thread_seq_already_applied"],["kandan.reconnect_thread_transcript_fetch_failed","linzumi.reconnect_thread_transcript_fetch_failed"],["kandan.reconnect_thread_unarchive_failed","linzumi.reconnect_thread_unarchive_failed"],["kandan.reconnect_thread_unarchive_resumed","linzumi.reconnect_thread_unarchive_resumed"],["kandan.reconnect_thread_unarchive_started","linzumi.reconnect_thread_unarchive_started"],["kandan.reconnect_thread_unavailable_state_push_failed","linzumi.reconnect_thread_unavailable_state_push_failed"],["kandan.reconnected","linzumi.reconnected"],["kandan.roster_seeded","linzumi.roster_seeded"],["kandan.session_app_server_lost_push_failed","linzumi.session_app_server_lost_push_failed"],["kandan.session_settings_publish_failed","linzumi.session_settings_publish_failed"],["kandan.start_instance_claude_code_attachment_failed_state_push_failed","linzumi.start_instance_claude_code_attachment_failed_state_push_failed"],["kandan.start_instance_codex_app_server_unavailable","linzumi.start_instance_codex_app_server_unavailable"],["kandan.start_instance_cwd_failed_state_push_failed","linzumi.start_instance_cwd_failed_state_push_failed"],["kandan.start_instance_cwd_rejected","linzumi.start_instance_cwd_rejected"],["kandan.start_instance_failed","linzumi.start_instance_failed"],["kandan.start_instance_processing_state_push_failed","linzumi.start_instance_processing_state_push_failed"],["kandan.start_instance_skipped_known_session","linzumi.start_instance_skipped_known_session"],["kandan.start_instance_stale_skipped","linzumi.start_instance_stale_skipped"],["kandan.start_instance_unavailable_state_push_failed","linzumi.start_instance_unavailable_state_push_failed"],["kandan.start_instance_wafer_state_push_failed","linzumi.start_instance_wafer_state_push_failed"],["kandan.start_turn_replay_skipped","linzumi.start_turn_replay_skipped"],["kandan.steer_duplicate_ignored","linzumi.steer_duplicate_ignored"],["kandan.steer_parked_as_own_turn","linzumi.steer_parked_as_own_turn"],["kandan.thread_bind_from_historical_reply_failed","linzumi.thread_bind_from_historical_reply_failed"],["kandan.thread_bound_from_historical_reply","linzumi.thread_bound_from_historical_reply"],["kandan.thread_sessions_reannounce_failed","linzumi.thread_sessions_reannounce_failed"],["kandan.thread_sessions_reannounced","linzumi.thread_sessions_reannounced"],["kandan.tui_input_mirrored","linzumi.tui_input_mirrored"],["kandan.typing_heartbeat_failed","linzumi.typing_heartbeat_failed"],["kandan.typing_stop_after_completion_failed","linzumi.typing_stop_after_completion_failed"]],keys:[["codexThreadId","harness_session_id"],["codex_thread_id","harness_session_id"],["kandanThreadId","thread_id"],["kandan_preview_ticket","linzumi_preview_ticket"],["kandan_thread_id","thread_id"],["linzumiThreadId","thread_id"],["linzumi_thread_id","thread_id"],["local_codex_runner","commander"],["runnerId","commander_id"],["runner_config","commander_config"],["runner_id","commander_id"]],keyPrimaryLegacy:[["commander","local_codex_runner"],["commander_config","runner_config"],["commander_id","runner_id"],["harness_session_id","codex_thread_id"],["linzumi_preview_ticket","kandan_preview_ticket"],["thread_id","kandan_thread_id"]],values:[["engine_boot_reconnect","harness_boot_reconnect"],["engine_for_runner_event_type","harness_for_commander_event_type"],["engine_rejected_steer","harness_rejected_steer"],["engine_unavailable","harness_unavailable"],["join_engine","join_harness"],["kandan-local-codex-runner","linzumi-commander"],["local_codex_runner","commander"],["original_engine","original_harness"],["resume_engine","resume_harness"]],topic:{legacyPrefix:"local_codex_runner:",canonicalPrefix:"commander:"},originator:{legacy:"kandan-local-codex-runner",canonical:"linzumi-commander"}}});function hO(e=process.env){let n=e.LINZUMI_NAMING_DUAL_EMIT?.trim().toLowerCase();return n!=="0"&&n!=="false"}function gO(e,n=process.env){if(!hO(n))return{};let t=pO.get(e);if(t!==void 0)return{event_canonical:t};let r=Uv.get(e);return r===void 0?{}:{event_legacy:r}}function Cie(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function qv(e,n){if(n>=kie)return e;if(Array.isArray(e))return e.map(o=>qv(o,n+1));if(!Cie(e))return e;let t={},r=Object.keys(e);for(let o of r)t[o]=qv(e[o],n+1);for(let o of r){if(Sie.test(o))continue;let i=wg.get(o);if(i!==void 0)t[i]=t[o];else{let a=Bv.get(o);a!==void 0&&!(a in t)&&(t[a]=t[o])}let s=t[o];if(typeof s=="string"){let a=fO.get(s);if(a!==void 0)`${o}_canonical`in t||(t[`${o}_canonical`]=a);else{let d=mO.get(s);d!==void 0&&!(`${o}_legacy`in t)&&(t[`${o}_legacy`]=d)}}}return t}function vg(e,n=process.env){return hO(n)?qv(e,0):e}function yO(e){let n=new Set(e);for(let t of e){let r=wg.get(t);r!==void 0&&n.add(r);let o=Bv.get(t);o!==void 0&&n.add(o)}return n}function Jv(e){return Uv.get(e)??e}function Mt(e,n){if(e===void 0)return;let t=wg.get(n)??n;for(let r of[...Nv.get(t)??[],t]){let o=e[r];if(o!=null)return o}}var pO,Uv,wg,Bv,fO,mO,_Je,Sie,kie,Nv,Sg=F(()=>{"use strict";lO();pO=new Map(vi.events),Uv=new Map(vi.events.map(([e,n])=>[n,e])),wg=new Map(vi.keys),Bv=new Map(vi.keyPrimaryLegacy),fO=new Map(vi.values),mO=new Map(vi.values.map(([e,n])=>[n,e])),_Je={eventCanonicalByLegacy:pO,eventLegacyByCanonical:Uv,keyCanonicalByLegacy:wg,keyPrimaryLegacyByCanonical:Bv,valueCanonicalByLegacy:fO,valueLegacyByCanonical:mO,originator:vi.originator,topic:vi.topic};Sie=/_(canonical|legacy)$/,kie=32;Nv=new Map;for(let[e,n]of vi.keys){let t=Nv.get(n)??[];t.push(e),Nv.set(n,t)}});import{appendFileSync as Tie,openSync as Pie}from"node:fs";import{createWriteStream as Iie}from"node:fs";import{homedir as Kv}from"node:os";import{dirname as xO,join as Vv,resolve as Rie,sep as Eie}from"node:path";import{mkdirSync as _O}from"node:fs";function wO(e){if(process.env.VITEST===void 0)return;let n=Vv(Kv(),".linzumi"),t=Rie(e);if(t===n||t.startsWith(`${n}${Eie}`))throw new Error(`test-mode log isolation violated: refusing to open ${e} inside the real ~/.linzumi (point the logger at a temp path; the harness defaults LINZUMI_RUNNER_LOG_FILE / LINZUMI_CLI_AUDIT_LOG for exactly this - see plans/2026-07-10-cli-test-hygiene-spec.md item 2)`)}function vO(e,n,t){wO(e),_O(xO(e),{recursive:!0});let r,o=0,i=!1,s=l=>{r!==void 0||i||(r=Date.now(),process.stderr.write(`linzumi runner log stream failed (${l}); logging to ${e} paused, reopening on the next log write
|
|
@@ -43,8 +43,8 @@ ${u}`.split(`
|
|
|
43
43
|
`)}try{i(process.kill,c)}catch{}try{n(1)}catch(x){let b=Ig(x);d("runner.crash_exit_handler_error",{message:b.message,stack:b.stack??null,primary_message:p.message},`linzumi runner crash exit-handler error (primary already logged above): ${b.stack??b.message}
|
|
44
44
|
`),n(1)}}};return{onUncaughtException:c=>u("uncaught_exception",c),onUnhandledRejection:c=>u("unhandled_rejection",c),isCrashing:()=>a}}function OO(e={}){if(Fr.installed)return!0;let n=process.listenerCount("uncaughtException")===0,t=process.listenerCount("unhandledRejection")===0;if(!n||!t)return!1;Fr.installed=!0;let r=Zie(e);return process.on("uncaughtException",r.onUncaughtException),process.on("unhandledRejection",r.onUnhandledRejection),Fr.removeInstalledHandlers=()=>{process.off("uncaughtException",r.onUncaughtException),process.off("unhandledRejection",r.onUnhandledRejection)},!0}var Fr,Eg=F(()=>{"use strict";Mp();Lt();Zu();Fr={installed:!1,runnerLogFile:void 0,removeInstalledHandlers:void 0,teardowns:[],tuiGoneTtyDegrade:void 0,tuiGoneTtyDegradeUsed:!1}});import{spawnSync as Qie}from"node:child_process";import{hostname as LO}from"node:os";function jO(e,n,t){let r=e.channelSession;return["Codex is ready.","","| Stat | Value |","| --- | --- |",`| Host | ${Js(LO())} |`,`| Directory | ${Js(e.cwd)} |`,`| Codex thread | ${Js(t)} |`,`| Codex | ${Js(n??"unknown")} |`,`| Model | ${Js(r?.model??"default")} |`,`| Reasoning effort | ${Js(r?.reasoningEffort??"default")} |`,`| Fast mode | ${e.fast?"yes":"no"} |`,`| Sandbox | ${Js(r?.sandbox??"default")} |`,`| Approval policy | ${Js(r?.approvalPolicy??"default")} |`,"","Reply in this thread to send a message to the local Codex session."].join(`
|
|
45
45
|
`)}function Js(e){return e.replaceAll("\\","\\\\").replaceAll("|","\\|").replaceAll(`
|
|
46
|
-
`," ")}function Dg(e){if(!Z(e))return;let n=A(e.payload)??{},t=A(e.actor),r=Y(e.seq),o=h(e.type);if(!(r===void 0||o===void 0))return{seq:r,type:o,actorKind:h(t?.kind),actorSlug:h(t?.slug),actorUserId:Y(e.actor_user_id),threadId:h(n.thread_id),threadTitle:Xie(e,n),replyToSeq:Y(n.reply_to_seq),localRunnerEventType:Yie(n),body:h(e.body)??h(e.text)??h(n.body)??h(n.text)??"",attachments:Qo(
|
|
47
|
-
`)}function WO(e){return e.flatMap(n=>n.isImage?[{type:"localImage",path:n.path}]:[])}async function aS(e,n){let t=await iS(e,n),r=sS(n.body,t,{uploadInstructionMode:"footer"}),o=t.flatMap(i=>{let s=mse(i.contentType);return s!==void 0?[{type:"image",source:{type:"base64",media_type:s,data:i.dataBase64}}]:[]});return o.length===0?r:[{type:"text",text:r},...o]}async function dse(e,n,t){if(h(t.kind)!=="codex_assistant_message")return[];let r=await $g(e.cwd),o=await XO(r),i=await hse(n,r);if(i.length===0)return[];let s=await Promise.all(i.map(async u=>{QO(o,u);let c=await JO(u);if(!c.isFile())throw new Error(`Kandan attachment path is not a file: ${u}`);return{path:u,fileName:tS(u),contentType:YO(u),sizeBytes:c.size}})),a=await vse(e.kandan,e.topic,"session:prepare_message_uploads",{workspace:e.workspace,channel:e.channel,files:s.map(u=>({file_name:u.fileName,content_type:u.contentType,size_bytes:u.sizeBytes}))}),d=
|
|
46
|
+
`," ")}function Dg(e){if(!Z(e))return;let n=A(e.payload)??{},t=A(e.actor),r=Y(e.seq),o=h(e.type);if(!(r===void 0||o===void 0))return{seq:r,type:o,actorKind:h(t?.kind),actorSlug:h(t?.slug),actorUserId:Y(e.actor_user_id),threadId:h(n.thread_id),threadTitle:Xie(e,n),replyToSeq:Y(n.reply_to_seq),localRunnerEventType:Yie(n),body:h(e.body)??h(e.text)??h(n.body)??h(n.text)??"",attachments:Qo(qe(n.attachments)??qe(e.attachments)??[]),traceparent:h(e.traceparent)??h(n.traceparent)}}function Xie(e,n){let t=A(n.thread),r=A(e.thread);return h(n.thread_title)??h(n.threadTitle)??h(n.title)??h(t?.thread_title)??h(t?.threadTitle)??h(t?.title)??h(e.thread_title)??h(e.threadTitle)??h(e.title)??h(r?.thread_title)??h(r?.threadTitle)??h(r?.title)}function Qo(e){return e.flatMap(n=>{let t=A(n);return t===void 0?[]:[{id:h(t.id),kind:h(t.kind),fileName:h(t.file_name)??h(t.fileName)??h(t.name),contentType:h(t.content_type)??h(t.contentType)??h(t.mime_type)??h(t.mimeType),sizeBytes:Y(t.size_bytes)??Y(t.sizeBytes)??Y(t.size),url:h(t.url)}]})}function Mg(e){return e.map(n=>({...n.id===void 0?{}:{id:n.id},...n.kind===void 0?{}:{kind:n.kind},...n.fileName===void 0?{}:{file_name:n.fileName},...n.contentType===void 0?{}:{content_type:n.contentType},...n.sizeBytes===void 0?{}:{size_bytes:n.sizeBytes},...n.url===void 0?{}:{url:n.url}}))}function Qu(e){return{seq:e.seq,type:e.type,...e.actorKind===void 0?{}:{actor_kind:e.actorKind},...e.actorSlug===void 0?{}:{actor_slug:e.actorSlug},...e.actorUserId===void 0?{}:{actor_user_id:e.actorUserId},...e.threadId===void 0?{}:{thread_id:e.threadId},...e.threadTitle===void 0?{}:{thread_title:e.threadTitle},...e.replyToSeq===void 0?{}:{reply_to_seq:e.replyToSeq},...e.localRunnerEventType===void 0?{}:{local_runner_event_type:e.localRunnerEventType},...e.traceparent===void 0?{}:{traceparent:e.traceparent},body:e.body,attachments:Mg(e.attachments)}}function Zv(e){let n=A(e);if(n===void 0)return;let t=Y(n.seq),r=h(n.type);if(!(t===void 0||r===void 0))return{seq:t,type:r,actorKind:h(n.actor_kind),actorSlug:h(n.actor_slug),actorUserId:Y(n.actor_user_id),threadId:h(n.thread_id),threadTitle:h(n.thread_title),replyToSeq:Y(n.reply_to_seq),localRunnerEventType:h(n.local_runner_event_type),body:h(n.body)??"",attachments:Qo(qe(n.attachments)??[]),traceparent:h(n.traceparent)}}function FO(e){return e.localRunnerEventType!==void 0||e.actorKind==="service"&&e.actorSlug==="codex"?!0:e.actorSlug==="codex"}function zO(e,n){return e===!0&&n.actorKind==="service"&&n.actorSlug==="linzumi"}function Qv(e,n,t){let r=e.trim().toLocaleLowerCase();return r==="all"||n.actorSlug!==void 0&&n.actorSlug.toLocaleLowerCase()===r?!0:t.actorUsername?.toLocaleLowerCase()===r&&t.actorUserId!==void 0&&n.actorUserId===t.actorUserId}function _o(e){let n=Yv(e);return n===void 0?{actorUserId:void 0,actorUsername:void 0}:{actorUserId:Y(n.actor_id)??Y(n.sub),actorUsername:h(n.actor_username)}}function qO(e){let n=Yv(e),t=(qe(n?.workspace_scope)??[]).flatMap(r=>{let o=h(r)?.trim();return o===void 0||o===""?[]:[o]});return t.length===1?t[0]:void 0}function Xv(e){let n=Yv(e),t=Y(n?.exp);return t===void 0||t<=0?void 0:new Date(t*1e3).toISOString()}function Yv(e){let[,n]=e.split(".");if(n!==void 0)try{let t=JSON.parse(Buffer.from(ese(n),"base64").toString("utf8"));return Z(t)?t:void 0}catch{return}}function NO(e,n){let t=Qie(e,["--version"],{cwd:n,encoding:"utf8",timeout:1e3});if(t.error!==void 0||t.status!==0)return;let o=(h(t.stdout)??h(t.stderr))?.trim();return o===""?void 0:o}function td(e,n,t,r,o,i,s,a){let d=a??{modelProvider:e.channelSession?.modelProvider,model:e.channelSession?.model,reasoningEffort:e.channelSession?.reasoningEffort,sandbox:e.channelSession?.sandbox,approvalPolicy:e.channelSession?.approvalPolicy,fast:e.fast,allowPortForwardingByDefault:e.channelSession?.allowPortForwardingByDefault};return{metadata:{local_codex_runner:{runner_id:e.runnerId,instance_id:n,event_type:t,codex_thread_id:r,hostname:LO(),cwd:e.cwd,codex_version:o.codexVersion??null,model_provider:d.modelProvider??null,model:d.model??null,reasoning_effort:d.reasoningEffort??null,fast:d.fast??!1,sandbox:d.sandbox??null,approval_policy:d.approvalPolicy??null,allow_port_forwarding_by_default:d.allowPortForwardingByDefault??null,user_id:o.runnerIdentity.actorUserId??null,...s??{},...i===void 0?{}:{source_message_seq:i}}}}}function Yie(e){let n=A(e.metadata),t=A(n?.local_codex_runner);return h(t?.event_type)}function ese(e){let n=e.replaceAll("-","+").replaceAll("_","/");switch(n.length%4){case 0:return n;case 2:return`${n}==`;case 3:return`${n}=`;default:return n}}var Xu=F(()=>{"use strict";Hn();$n()});function tse(e){if(typeof e!="string")return;let n=nse.exec(e);if(n===null)return;let[,t,r]=n;if(!(t===void 0||r===void 0)&&!(/^0+$/.test(t)||/^0+$/.test(r)))return e.toLowerCase()}function UO(e,n){if(typeof e!="string"||e==="")return;let t=tse(n);if(t!==void 0)for(Yu.delete(e),Yu.set(e,t);Yu.size>rse;){let r=Yu.keys().next().value;if(r===void 0)break;Yu.delete(r)}}function Ag(e){if(typeof e=="string")return Yu.get(e)}var nse,rse,Yu,eS=F(()=>{"use strict";nse=/^00-([0-9a-f]{32})-([0-9a-f]{16})-[0-9a-f]{2}$/i;rse=512,Yu=new Map});import{readFile as ose,realpath as $g,stat as JO,writeFile as ise,mkdir as sse}from"node:fs/promises";import{homedir as ase}from"node:os";import{basename as tS,extname as rS,isAbsolute as KO,join as BO,relative as VO,resolve as nS}from"node:path";async function iS(e,n){if(n.attachments.length===0)return[];if(n.seq===void 0)throw new Error("Kandan attachment input missing source message seq");let t=BO(e.cwd,".kandan",e.attachmentDirectoryName,`message-${n.seq}`);await sse(t,{recursive:!0});let r=[];for(let[o,i]of n.attachments.entries()){let s=i.url;if(s===void 0)throw new Error(`attachment ${o+1} for message ${n.seq} is missing a URL`);let a=pse(i.fileName??i.id??`attachment-${o+1}`,o),d=BO(t,a),u=HO(e.kandanUrl,s),c=await(e.fetch??globalThis.fetch)(u,{headers:use(e,u)});if(!c.ok)throw new Error(`attachment ${a} download failed: ${c.status} ${c.statusText}`);let l=Buffer.from(await c.arrayBuffer());await ise(d,l),r.push({fileName:a,contentType:i.contentType,sizeBytes:i.sizeBytes??l.byteLength,path:d,isImage:fse(i.contentType,i.kind),dataBase64:l.toString("base64")})}return r}function sS(e,n,t={}){if(e.trimStart().startsWith("!"))return e;let r=n.length===0?[]:["","Linzumi attachments downloaded for this message:",...n.map(i=>{let s=[i.contentType,i.sizeBytes===void 0?void 0:`${i.sizeBytes} bytes`].flatMap(d=>d===void 0?[]:[d]),a=s.length===0?"":` (${s.join(", ")})`;return`- ${i.fileName}${a}: ${i.path}`})],o=t.uploadInstructionMode==="footer"?["If you create files that should be attached back to Kandan, end your assistant response with:","Kandan attachments:","- relative/or/absolute/path/to/file","Only attach non-hidden files with common document, image, text, patch, archive, or video extensions."]:["When you create files that should be attached back to Linzumi, use the linzumi_upload_files MCP tool silently.","Do not mention that you are using the upload tool. Do not print an upload manifest or upload footer in the message.","The MCP upload tool is the only supported path for attaching generated files to Linzumi messages."];return[e,...r,"",...o].join(`
|
|
47
|
+
`)}function WO(e){return e.flatMap(n=>n.isImage?[{type:"localImage",path:n.path}]:[])}async function aS(e,n){let t=await iS(e,n),r=sS(n.body,t,{uploadInstructionMode:"footer"}),o=t.flatMap(i=>{let s=mse(i.contentType);return s!==void 0?[{type:"image",source:{type:"base64",media_type:s,data:i.dataBase64}}]:[]});return o.length===0?r:[{type:"text",text:r},...o]}async function dse(e,n,t){if(h(t.kind)!=="codex_assistant_message")return[];let r=await $g(e.cwd),o=await XO(r),i=await hse(n,r);if(i.length===0)return[];let s=await Promise.all(i.map(async u=>{QO(o,u);let c=await JO(u);if(!c.isFile())throw new Error(`Kandan attachment path is not a file: ${u}`);return{path:u,fileName:tS(u),contentType:YO(u),sizeBytes:c.size}})),a=await vse(e.kandan,e.topic,"session:prepare_message_uploads",{workspace:e.workspace,channel:e.channel,files:s.map(u=>({file_name:u.fileName,content_type:u.contentType,size_bytes:u.sizeBytes}))}),d=qe(a.uploads)??[];if(d.length!==s.length)throw new Error("Kandan attachment prepare response count mismatch");return await Promise.all(s.map(async(u,c)=>{let l=A(d[c]),p=h(l?.upload_url),m=h(l?.upload_method)??"PUT";if(p===void 0)throw new Error("Kandan attachment prepare response missing upload_url");let f=await ose(u.path),y=f.buffer.slice(f.byteOffset,f.byteOffset+f.byteLength),x=await(e.fetch??globalThis.fetch)(HO(e.kandanUrl,p),{method:m,headers:{"content-type":u.contentType},body:y});if(!x.ok)throw new Error(`Kandan attachment upload failed for ${u.fileName}: ${x.status} ${x.statusText}`)})),d.map(u=>{let c=h(A(u)?.file_id);if(c===void 0)throw new Error("Kandan attachment prepare response missing file_id");return c})}async function dS(e,n){let t=await $g(e),r=await XO(t),o=await ZO(t,n);QO(r,o);let i=await JO(o);if(!i.isFile())throw new Error(`Linzumi upload path is not a file: ${o}`);return{path:o,fileName:tS(o),contentType:YO(o),sizeBytes:i.size}}function HO(e,n){let t=lse(n);if(t!==void 0)return t;if(e===void 0)throw new Error(`relative attachment URL cannot be resolved without Kandan URL: ${n}`);let r=e.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://");return new URL(n,r).toString()}function use(e,n){return cse(e.kandanUrl,n)?{authorization:`Bearer ${e.token}`}:{}}function cse(e,n){if(e===void 0)return!1;try{let t=new URL(e.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://")).origin;return new URL(n).origin===t}catch{return!1}}function lse(e){try{return new URL(e).toString()}catch{return}}function pse(e,n){let t=tS(e).replaceAll(/[^\w.\- ]/g,"_").trim(),r=t===""||t==="."||t===".."?`attachment-${n+1}`:t;return`${n+1}-${r}`}function fse(e,n){return e!==void 0&&e.toLowerCase().startsWith("image/")?!0:n?.toLowerCase()==="image"}function mse(e){switch(e?.split(";")[0]?.trim().toLowerCase()){case"image/png":return"image/png";case"image/jpeg":return"image/jpeg";case"image/gif":return"image/gif";case"image/webp":return"image/webp";default:return}}async function hse(e,n){let t=e.split(/\r?\n/),r=t.findIndex(s=>s.trim().toLowerCase()==="kandan attachments:");if(r===-1)return[];let o=new Set,i=[];for(let s of t.slice(r+1)){let a=s.trim(),d=GO(a);if(d==="")continue;if(d===void 0)break;if(eL(d))continue;if(!wse(d))break;let u=await ZO(n,d);o.has(u)||(o.add(u),i.push(u))}return i}function GO(e){if(e==="")return"";let n=e.startsWith("- ")?e.slice(2).trim():e;if(n!=="")return n.replace(/^`|`$/g,"")}async function ZO(e,n){if(n==="")throw new Error("Kandan attachment path must not be empty");let t=KO(n)?nS(n):nS(e,n);return await $g(t)}function QO(e,n){let t=e.find(s=>gse(s.path,n));if(t===void 0){let s=e.map(a=>a.label).join(", ");throw new Error(`Kandan attachment path must resolve inside an allowed upload root (${s}): ${n}`)}if(VO(t.path,n).split(/[\\/]+/).find(s=>s.startsWith("."))!==void 0)throw new Error(`Kandan attachment upload path must not include hidden path segments: ${n}`);let i=rS(n).toLowerCase();if(!oS.has(i))throw new Error(`Kandan attachment upload path extension is not allowed: ${n}`)}async function XO(e){let n=[{path:e,label:"runner cwd"}],t=process.env.HOME?.trim(),r=nS(t===void 0||t===""?ase():t,"Downloads");try{let o=await $g(r);n.some(i=>i.path===o)||n.push({path:o,label:"~/Downloads"})}catch{return n}return n}function gse(e,n){let t=VO(e,n);return t===""||!t.startsWith("..")&&!KO(t)}function YO(e){let n=e.toLowerCase();return n.endsWith(".png")?"image/png":n.endsWith(".jpg")||n.endsWith(".jpeg")?"image/jpeg":n.endsWith(".gif")?"image/gif":n.endsWith(".webp")?"image/webp":n.endsWith(".csv")?"text/csv":n.endsWith(".json")?"application/json":n.endsWith(".md")||n.endsWith(".txt")||n.endsWith(".log")?"text/plain":"application/octet-stream"}function yse(e){let n=e.split(/\r?\n/),t=n.findIndex(s=>s.trim().toLowerCase()==="kandan attachments:");if(t===-1)return e;let r=[],o=!1;for(let s of n.slice(t+1)){if(s.trim()===""){switch(o){case!0:r.push(s);break;case!1:break}continue}bse(s)||(r.push(s),o=!0)}let i=[...n.slice(0,t),...r];for(;i.length>0&&i[i.length-1]?.trim()==="";)i.pop();return i.join(`
|
|
48
48
|
`)}function xse(e,n){let t=yse(e);switch(t.trim()===""&&n.length>0){case!0:return"Attached file.";case!1:return t}}function _se(e,n){return h(e.kind)==="codex_assistant_message"?{...e,content:n}:e}function bse(e){let n=GO(e.trim());return n===""?!0:n===void 0?!1:!eL(n)&&oS.has(rS(n).toLowerCase())}function wse(e){return oS.has(rS(e).toLowerCase())}function eL(e){return e.split(/[\\/]+/).some(n=>n.startsWith("."))}async function vse(e,n,t,r){let o=await e.push(n,t,r);if(Z(o)&&o.status==="ok"&&Z(o.response))return o.response;throw new Error(`kandan push failed: ${t}: ${JSON.stringify(o).slice(0,500)}`)}async function Og(e,n,t){switch(n){case"session:post_thread_message":case"session:stream_thread_message":case"session:edit_thread_message":break;default:return t}let r=n==="session:edit_thread_message",o=r?A(t.structured):A(A(t.payload)?.structured),i=typeof t.body=="string"?t.body:void 0;if(o===void 0||i===void 0||h(o.stream_state)!=="completed")return t;let s;try{s=await dse(e,i,o)}catch(c){return e.log?.("pipeline.attachment_prepare_degraded",{event:n,message:c instanceof Error?c.message:String(c)}),t}let a=xse(i,s),d=_se(o,a);if(a===i&&s.length===0)return t;let u={...t,body:a,...s.length===0?{}:{uploaded_file_ids:s}};return r?{...u,structured:d}:{...u,payload:{...A(t.payload)??{},structured:d}}}var oS,Lg=F(()=>{"use strict";Hn();$n();oS=new Set([".csv",".diff",".gif",".htm",".html",".jpeg",".jpg",".json",".jsonl",".log",".md",".mp4",".patch",".pdf",".png",".svg",".txt",".webm",".webp",".xml",".zip"])});function qg(e,n){switch(e){case"warning":case"error":return{diagnostic_summary:lS(e,n)??`${e}: seen (no details)`,diagnostic_payload:cS(n,0),diagnostic_payload_keys:Object.keys(n).sort()};default:return{}}}function rL(e,n=12e3){let t=[],r=n,o=!1,i=a=>{if(!o){if(a.length<=r){t.push(a),r-=a.length;return}t.push(a.slice(0,r)),r=0,o=!0}},s=(a,d)=>{if(o)return;if(a===void 0){i("null");return}if(typeof a=="string"){let c=a.length<=Fg?a:`${a.slice(0,Fg)}...`;i(JSON.stringify(zg(c)));return}if(a===null||typeof a=="boolean"){i(JSON.stringify(a));return}if(typeof a=="number"){i(JSON.stringify(a)??"null");return}if(d>=tL){i(JSON.stringify("[max-depth]"));return}if(!Z(a)){i("[");for(let c=0;c<a.length;c+=1){if(o)return;c>0&&i(","),s(a[c],d+1)}i("]");return}i("{");let u=!0;for(let c in a){if(o)return;Object.prototype.hasOwnProperty.call(a,c)&&(u?u=!1:i(","),i(JSON.stringify(c)),i(":"),oL(c)?i(JSON.stringify(jg)):s(a[c],d+1))}i("}")};return s(e,0),o?`${t.join("")}...`:t.join("")}function lS(e,n){let t=nL(n.error),r=nL(n.item),o=ki(n.code)??uS(n.code)??ki(t?.code)??uS(t?.code)??ki(n.status)??uS(n.status),i=ki(n.message)??ki(n.detail)??ki(n.reason)??ki(t?.message)??ki(t?.detail)??ki(t?.reason),s=ki(r?.type),a=o===void 0?void 0:zg(o),d=a===void 0?e:`${e} ${a}`,u=i===void 0?s===void 0?void 0:`item.type=${s}`:zg(i);return u===void 0?void 0:`${d}: ${u}`}function cS(e,n){if(e===void 0)return null;if(typeof e=="string"){let t=zg(e);return t.length<=Fg?t:`${t.slice(0,Fg)}...`}return e===null||typeof e=="boolean"||typeof e=="number"?e:n>=tL?"[max-depth]":Array.isArray(e)?e.map(t=>cS(t,n+1)):Object.fromEntries(Object.entries(e).map(([t,r])=>[t,oL(t)?jg:cS(r,n+1)]))}function oL(e){let n=e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toLowerCase();switch(n){case"authorization":case"cookie":case"cookies":case"credential":case"credentials":case"password":case"secret":case"token":case"access_key":case"api_key":case"auth_token":case"bearer_token":case"client_secret":case"id_token":case"private_key":case"proxy_authorization":case"refresh_token":case"secret_key":case"session_token":case"set_cookie":case"sig":case"signature":case"signing_key":case"x_amz_signature":case"x_api_key":return!0;default:return n.endsWith("_api_key")||n.endsWith("_access_key")||n.endsWith("_private_key")||n.endsWith("_secret_key")||n.endsWith("_authorization")||n.endsWith("_cookie")||n.endsWith("_cookies")||n.endsWith("_token")||n.endsWith("_secret")||n.endsWith("_password")||n.endsWith("_signature")||n.endsWith("_sig")||n.endsWith("_credential")||n.endsWith("_credentials")}}function zg(e){return e.replace(/https?:\/\/\S*(?:token|secret|signature|sig|x-amz-signature|api[_-]?key|access[_-]?key|private[_-]?key|refresh)\S*/gi,Sse).replace(/(^|[^A-Za-z0-9_-])(["']?)(set-cookie|cookie)\2\s*(:|=)\s*(["']?)[^\r\n"']*\5/gi,(n,t,r,o,i,s)=>`${t}${r}${o}${r}${i}${i===":"&&s===""?" ":""}${s}${jg}${s}`).replace(new RegExp(`(^|[^A-Za-z0-9_-])(["']?)(${kse})\\2\\s*(:|=)\\s*(["']?)(?:(?:Bearer|Basic|Digest|Token|ApiKey|OAuth|Negotiate)\\s+)?[^"'\\s,;}&]+\\5`,"gi"),(n,t,r,o,i,s)=>`${t}${r}${o}${r}${i}${i===":"&&s===""?" ":""}${s}${jg}${s}`).replace(/\bBearer\s+[^\s,;]+/gi,"Bearer [redacted]")}function nL(e){return Z(e)?e:void 0}function ki(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function uS(e){return typeof e=="number"&&Number.isFinite(e)?e.toString():void 0}var jg,Sse,tL,Fg,kse,Ng=F(()=>{"use strict";$n();jg="[redacted]",Sse="[redacted-url]",tL=12,Fg=8e3,kse="(?:(?:[A-Za-z0-9]+[_-]+)*(?:proxy-authorization|authorization|set-cookie|cookie|x-api-key|api[_-]?key|access[_-]?key|access[_-]?token|private[_-]?key|refresh(?:[_-]?token)?|auth[_-]?token|id[_-]?token|client[_-]?secret|bearer[_-]?token|session[_-]?token|secret[_-]?key|signing[_-]?key|credential|credentials|token|secret|password|signature|sig))"});function $p(e){let n=e.channelSession;return{...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{reasoningEffort:n.reasoningEffort},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Ug(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandbox:n.sandbox}}}function iL(e){let n=e.channelSession;return{cwd:e.cwd,...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{effort:n.reasoningEffort},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Ug(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandboxPolicy:Cse(n.sandbox,e.cwd)}}}function ec(e,n,t){if(!(e===void 0||e==="default"))return Op(e,n,t)}function Op(e,n,t){let r=t?.sandboxedNeverDefault===!0&&n==="workspace-write";switch(e){case void 0:case"default":return r?"never":"on-request";case"never":return n==="danger-full-access"||r?"never":"on-request";case"on-request":case"on-failure":return e;default:throw new Error(`unsupported Codex approval policy: ${e}`)}}function Ug(e,n,t){let r=Op(e,n,t);return r==="on-failure"?"on-request":r}function Cse(e,n){switch(e){case"danger-full-access":return{type:"dangerFullAccess"};case"read-only":return{type:"readOnly",access:{type:"fullAccess"},networkAccess:!1};case"workspace-write":return{type:"workspaceWrite",writableRoots:[n],readOnlyAccess:{type:"fullAccess"},networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1};default:throw new Error(`unsupported Codex sandbox mode: ${e}`)}}var pS=F(()=>{"use strict"});var Bg,sL,fS=F(()=>{"use strict";Bg=`<linzumi_markdown_media_guidance>
|
|
49
49
|
Some Linzumi users have opted into rich Markdown media rendering. When you are
|
|
50
50
|
writing a visible Linzumi message, channel message, or thread reply, you may use
|
|
@@ -525,21 +525,21 @@ the concrete artifact, command, result, and any exact blocker. Do not emit
|
|
|
525
525
|
machine-only JSON unless the user or tool explicitly requests it.
|
|
526
526
|
</output_format>`}var mS=F(()=>{"use strict";fS();nc()});import{Buffer as Tse}from"node:buffer";import{fileURLToPath as Pse}from"node:url";function rc(e,n){let t=h(e.type),r=h(e.id)??`item-${n}`,o=(i,s)=>({kind:i,item_id:r,transcript_unit_id:`${i}:${r}`,stream_state:"completed",...s});switch(t){case"reasoning":{let i=Pp(e.content).join(`
|
|
527
527
|
`),s=Pp(e.summary),a=i.trim()!==""?i:s.join(`
|
|
528
|
-
`);return[{itemKey:r,body:a,structured:o("codex_reasoning",{content:i,summary_parts:s})}]}case"agentMessage":return uL(e,r,o);case"message":return h(e.role)==="assistant"?uL(e,r,o):[];case"commandExecution":{let i=h(e.command)??"command",s=en(e.aggregatedOutput)??"",a=Fp(i,s);return[{itemKey:r,body:a.body,structured:o("codex_command_execution",{command:a.command,tool_name:h(e.toolName)??null,cwd:h(e.cwd)??"",status:h(e.status)??"",process_id:h(e.processId)??"",duration_ms:Y(e.durationMs)??null,exit_code:Y(e.exitCode)??null,output:a.output,...kL(a)})}]}case"terminalInput":{let i=en(e.inputText)??en(e.input)??en(e.text)??"";return[{itemKey:r,body:i,structured:o("codex_terminal_input",{process_id:h(e.processId)??"",input_text:i})}]}case"fileChange":{let i=PL(
|
|
528
|
+
`);return[{itemKey:r,body:a,structured:o("codex_reasoning",{content:i,summary_parts:s})}]}case"agentMessage":return uL(e,r,o);case"message":return h(e.role)==="assistant"?uL(e,r,o):[];case"commandExecution":{let i=h(e.command)??"command",s=en(e.aggregatedOutput)??"",a=Fp(i,s);return[{itemKey:r,body:a.body,structured:o("codex_command_execution",{command:a.command,tool_name:h(e.toolName)??null,cwd:h(e.cwd)??"",status:h(e.status)??"",process_id:h(e.processId)??"",duration_ms:Y(e.durationMs)??null,exit_code:Y(e.exitCode)??null,output:a.output,...kL(a)})}]}case"terminalInput":{let i=en(e.inputText)??en(e.input)??en(e.text)??"";return[{itemKey:r,body:i,structured:o("codex_terminal_input",{process_id:h(e.processId)??"",input_text:i})}]}case"fileChange":{let i=PL(qe(e.changes)??[]),s=en(e.patchText)??en(e.patch)??"",a=s.trim()!==""?s:i.map(d=>d.path).join(`
|
|
529
529
|
`);return[{itemKey:r,body:a,structured:o("codex_file_change",{status:h(e.status)??"",patch_text:s,changes:i})}]}case"agentStatus":{let i=en(e.title)??"Agent status",s=tc(en(e.body)),a={title:i,body:s,severity:bS(e.severity),provider:en(e.provider),occurredAtMs:Y(e.occurredAtMs),rawProviderMetadata:dL(e)};return[{itemKey:r,body:jp(i,s),structured:yS(r,a,"completed")}]}case"agentTaskUpdate":{let i=en(e.title)??"Agent task",s=tc(en(e.body)),a=en(e.progressLabel),d={title:i,body:s,state:wS(e.state),progressLabel:a,provider:en(e.provider),occurredAtMs:Y(e.occurredAtMs),rawProviderMetadata:dL(e)};return[{itemKey:r,body:jp(i,s??a),structured:xS(r,d,"completed")}]}default:return[]}}function yS(e,n,t){return{kind:"agent_status_event",item_id:e,transcript_unit_id:`agent_status_event:${e}`,stream_state:t,event_kind:"status",title:n.title,body:n.body??null,severity:n.severity,agent_provider:n.provider??null,occurred_at_ms:n.occurredAtMs??null,raw_provider_metadata:n.rawProviderMetadata??{}}}function xS(e,n,t){return{kind:"agent_task_update_event",item_id:e,transcript_unit_id:`agent_task_update_event:${e}`,stream_state:t,event_kind:"task_update",title:n.title,body:n.body??null,state:n.state,progress_label:n.progressLabel??null,agent_provider:n.provider??null,occurred_at_ms:n.occurredAtMs??null,raw_provider_metadata:n.rawProviderMetadata??{}}}function _S(e){let n=new Set;return e.flatMap((t,r)=>{switch(h(t.type)){case"function_call":{let i=cL(e,"function_call_output",h(t.call_id)),s=gS(i);return s!==void 0&&n.add(s),Use(t,i,r)}case"custom_tool_call":{let i=cL(e,"custom_tool_call_output",h(t.call_id)),s=gS(i);return s!==void 0&&n.add(s),Bse(t,i,r)}case"function_call_output":case"custom_tool_call_output":{let i=gS(t);return i!==void 0&&n.has(i)?[]:Jse(t,r)}default:return rc(t,r)}})}function jp(e,n){let t=n===void 0?e:`${e}
|
|
530
530
|
|
|
531
531
|
${n}`;return pL(Vg(t))}function tc(e){return e===void 0?void 0:pL(Vg(e))}function pL(e){if(e.length<=hS)return e;let n=`
|
|
532
532
|
|
|
533
533
|
[Linzumi truncated agent timeline body: body was too large to persist fully. Owners should search runner logs for agent_timeline_body_truncated failure_class=${Dse}.]
|
|
534
534
|
|
|
535
|
-
`,t=Math.max(0,hS-n.length),r=Math.min(2e3,Math.floor(t/3)),o=t-r;return`${e.slice(0,r)}${n}${e.slice(-o)}`.slice(0,hS)}function bS(e){switch(h(e)){case"warning":return"warning";case"error":return"error";default:return"info"}}function wS(e){switch(h(e)){case"queued":return"queued";case"running":case"in_progress":return"running";case"blocked":return"blocked";case"succeeded":case"success":case"completed":return"succeeded";case"failed":case"failure":case"error":return"failed";case"cancelled":case"canceled":return"cancelled";default:return"unknown"}}function dL(e){return A(e.rawProviderMetadata)??A(e.raw_provider_metadata)}function gS(e){if(e===void 0)return;let n=h(e.id);if(n!==void 0)return`id:${n}`;let t=h(e.call_id);return t===void 0?void 0:`call_id:${t}`}function fL(e){let n=Fse(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"assistant-message",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),delta:n}}function mL(e){let n=A(e.item)??e;return Mse(n,0)[0]}function hL(e,n,t){return{kind:"codex_assistant_message",item_id:e,transcript_unit_id:`codex_assistant_message:${e}`,stream_state:t,content:n,phase:"final_answer"}}function gL(e){let n=Zg(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"reasoning",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),delta:n}}function yL(e,n,t){return{kind:"codex_reasoning",item_id:e,transcript_unit_id:`codex_reasoning:${e}`,stream_state:t,content:n,summary_parts:[]}}function xL(e){let n=en(e.deltaBase64)===void 0?Zg(e):Tse.from(String(e.deltaBase64),"base64").toString("utf8");if(n===void 0||n==="")return;let t=h(e.processId)??h(e.process_id),r=A(e.item),o=en(e.command)??en(e.cmd)??en(r?.command)??en(r?.cmd);return{itemKey:h(e.itemId)??h(e.item_id)??h(r?.id)??t??"command-output",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),processId:t,command:o,stream:h(e.stream)??"stdout",delta:n}}function Hg(e,n,t){let r=Fp(n.command,n.output);return _L(e,n,t,r)}function _L(e,n,t,r){return{kind:"codex_command_execution",item_id:e,transcript_unit_id:`codex_command_execution:${e}`,stream_state:t,command:r.command,cwd:n.cwd??"",status:n.status??t,process_id:n.processId??"",duration_ms:n.durationMs??null,exit_code:n.exitCode??null,stream:n.stream??"",output:r.output,...kL(r)}}function bL(e){let n=Zg(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"file-change",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),patchText:n}}function Gg(e){let n=A(e.item)??A(e.payload)??e,t=h(n.status),r=h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id)??h(n.turnId)??h(n.turn_id)??h(A(n.turn)?.id);if(Hse(n)&&(t===void 0||t==="completed")){let i=PL(
|
|
536
|
-
`)}function Mse(e,n){let t=h(e.type),r=h(e.role);if(!(t==="userMessage"||t==="user_message"||t==="message"&&r==="user"))return[];let i=h(e.id)??`item-${n}`,a=(
|
|
535
|
+
`,t=Math.max(0,hS-n.length),r=Math.min(2e3,Math.floor(t/3)),o=t-r;return`${e.slice(0,r)}${n}${e.slice(-o)}`.slice(0,hS)}function bS(e){switch(h(e)){case"warning":return"warning";case"error":return"error";default:return"info"}}function wS(e){switch(h(e)){case"queued":return"queued";case"running":case"in_progress":return"running";case"blocked":return"blocked";case"succeeded":case"success":case"completed":return"succeeded";case"failed":case"failure":case"error":return"failed";case"cancelled":case"canceled":return"cancelled";default:return"unknown"}}function dL(e){return A(e.rawProviderMetadata)??A(e.raw_provider_metadata)}function gS(e){if(e===void 0)return;let n=h(e.id);if(n!==void 0)return`id:${n}`;let t=h(e.call_id);return t===void 0?void 0:`call_id:${t}`}function fL(e){let n=Fse(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"assistant-message",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),delta:n}}function mL(e){let n=A(e.item)??e;return Mse(n,0)[0]}function hL(e,n,t){return{kind:"codex_assistant_message",item_id:e,transcript_unit_id:`codex_assistant_message:${e}`,stream_state:t,content:n,phase:"final_answer"}}function gL(e){let n=Zg(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"reasoning",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),delta:n}}function yL(e,n,t){return{kind:"codex_reasoning",item_id:e,transcript_unit_id:`codex_reasoning:${e}`,stream_state:t,content:n,summary_parts:[]}}function xL(e){let n=en(e.deltaBase64)===void 0?Zg(e):Tse.from(String(e.deltaBase64),"base64").toString("utf8");if(n===void 0||n==="")return;let t=h(e.processId)??h(e.process_id),r=A(e.item),o=en(e.command)??en(e.cmd)??en(r?.command)??en(r?.cmd);return{itemKey:h(e.itemId)??h(e.item_id)??h(r?.id)??t??"command-output",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),processId:t,command:o,stream:h(e.stream)??"stdout",delta:n}}function Hg(e,n,t){let r=Fp(n.command,n.output);return _L(e,n,t,r)}function _L(e,n,t,r){return{kind:"codex_command_execution",item_id:e,transcript_unit_id:`codex_command_execution:${e}`,stream_state:t,command:r.command,cwd:n.cwd??"",status:n.status??t,process_id:n.processId??"",duration_ms:n.durationMs??null,exit_code:n.exitCode??null,stream:n.stream??"",output:r.output,...kL(r)}}function bL(e){let n=Zg(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??"file-change",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),patchText:n}}function Gg(e){let n=A(e.item)??A(e.payload)??e,t=h(n.status),r=h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id)??h(n.turnId)??h(n.turn_id)??h(A(n.turn)?.id);if(Hse(n)&&(t===void 0||t==="completed")){let i=PL(qe(n.changes)??[]),s=en(n.patchText)??en(n.patch)??Kse(i);return s===void 0?void 0:{itemKey:h(n.id)??"file-change",turnId:r,patchText:s}}if(h(n.type)!=="custom_tool_call"||h(n.name)!=="apply_patch"||t!==void 0&&t!=="completed")return;let o=Wg(n.input)??Wg(n.arguments);if(o!==void 0)return{itemKey:h(n.call_id)??h(n.id)??"file-change",turnId:r,patchText:o}}function wL(e,n,t,r){return{kind:"codex_file_change",item_id:e,transcript_unit_id:`codex_file_change:${e}`,stream_state:t,status:r,patch_text:n,changes:TL(n)}}function vL(e){let n=en(e.stdin)??en(e.inputText)??en(e.input)??en(e.text);if(n===void 0)return;let t=h(e.processId)??h(e.process_id);return{itemKey:h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)??`terminal-input:${t??"process"}`,turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),processId:t,inputText:n}}function vS(e){let n=A(e.item)??e,t=h(n.type);if(t!=="web_search_call"&&t!=="webSearchCall"&&t!=="webSearch")return;let r=Gse(n);if(r.length!==0)return{itemKey:h(n.id)??h(e.itemId)??h(e.item_id)??"web-search",turnId:h(e.turnId)??h(e.turn_id)??h(A(e.turn)?.id),queries:r}}function SL(e,n,t){let r=SS(n);return{kind:"codex_reasoning",item_id:e,transcript_unit_id:`codex_reasoning:${e}`,stream_state:t,content:r,summary_parts:[]}}function SS(e){let n=Zse(e),t=CS(e).length-n.length;return["Searches",...n.map(o=>`- ${o}`),...t>0?[`- +${t} more`]:[]].join(`
|
|
536
|
+
`)}function Mse(e,n){let t=h(e.type),r=h(e.role);if(!(t==="userMessage"||t==="user_message"||t==="message"&&r==="user"))return[];let i=h(e.id)??`item-${n}`,a=(qe(e.content)??[]).filter(Z).filter(u=>{let c=h(u.type);return c==="text"||c==="input_text"}).map(u=>en(u.text)??"").filter(u=>u.trim()!==""),d=a.length>0?a.join(`
|
|
537
537
|
|
|
538
|
-
`):en(e.text)??en(e.message)??"";return[{itemKey:i,body:d}]}function uL(e,n,t){let r=Ase(e),o=Lse(e),i=Ose(r,o);return[{itemKey:n,body:i,structured:t("codex_assistant_message",{content:r,phase:h(e.phase)??"final_answer"})}]}function Ase(e){let n=$se(e);if(n!=="")return n;let t=h(e.reply)??h(e.summary)??h(e.content)??h(e.text)??"",r=Qa(t);return r===void 0?t:h(r.reply)??h(r.summary)??h(r.content)??h(r.message)??h(r.output_text)??t}function $se(e){return(
|
|
538
|
+
`):en(e.text)??en(e.message)??"";return[{itemKey:i,body:d}]}function uL(e,n,t){let r=Ase(e),o=Lse(e),i=Ose(r,o);return[{itemKey:n,body:i,structured:t("codex_assistant_message",{content:r,phase:h(e.phase)??"final_answer"})}]}function Ase(e){let n=$se(e);if(n!=="")return n;let t=h(e.reply)??h(e.summary)??h(e.content)??h(e.text)??"",r=Qa(t);return r===void 0?t:h(r.reply)??h(r.summary)??h(r.content)??h(r.message)??h(r.output_text)??t}function $se(e){return(qe(e.content)??[]).filter(Z).flatMap(n=>{let t=h(n.type);if(t!=="text"&&t!=="output_text"&&t!=="input_text")return[];let r=en(n.text)??en(n.content)??en(n.output_text);return r===void 0?[]:[r]}).join(`
|
|
539
539
|
|
|
540
540
|
`)}function Ose(e,n){let t=[...new Set(n)];if(t.length===0)return e;let r=["Kandan attachments:",...t.map(i=>`- ${i}`)].join(`
|
|
541
541
|
`);return e.trim()===""?r:[e,"",r].join(`
|
|
542
|
-
`)}function Lse(e){return(
|
|
542
|
+
`)}function Lse(e){return(qe(e.content)??[]).filter(Z).flatMap(n=>{let t=h(n.type)?.toLowerCase();if(t!=="image"&&t!=="output_image"&&t!=="input_image")return[];let r=h(n.path)??h(n.file_path)??h(n.filePath)??h(n.image_url)??h(n.imageUrl)??h(n.url),o=r===void 0?void 0:jse(r);return o===void 0?[]:[o]})}function jse(e){if(!(/^https?:\/\//i.test(e)||/^data:/i.test(e))){if(/^file:\/\//i.test(e))try{return Pse(e)}catch{return}return e}}function Fse(e){return Zg(e)}function Fp(e,n){let t=Nse(Vg(e),Rse,"command label"),r=qse(Vg(n)),o=zse(t.text,r.text);return{command:t.text,output:r.text,body:o,truncated:t.truncated||r.truncated,originalLength:n.length,maxOutputChars:Kg,truncationReason:Ese}}function kL(e){return e.truncated?{output_truncated:!0,output_original_length:e.originalLength,output_max_chars:e.maxOutputChars,output_truncation_reason:e.truncationReason}:{}}function zse(e,n){return[`$ ${e}`,n].filter(t=>t.trim()!=="").join(`
|
|
543
543
|
|
|
544
544
|
`)}function qse(e){if(e.length<=Kg)return{text:e,truncated:!1};let n=`
|
|
545
545
|
|
|
@@ -556,35 +556,38 @@ ${n}
|
|
|
556
556
|
`,"utf8")}function Sae(){let e=process.env.LINZUMI_AGENT_REPLAY_RECORD_FILE?.trim();return e===void 0||e===""?void 0:e}function kae(e){return Np!==void 0&&Np.path===e||(_ae(wae(e),{recursive:!0}),Np={path:e,startedAtMs:Date.now(),nextOrdinal:0}),Np}function Cae(e){if(process.env.LINZUMI_AGENT_REPLAY_EXACT_RAW==="1")return{rawText:e.rawText,rawValue:e.rawValue,transforms:[]};let n=[],t=e.rawValue===void 0?void 0:Up(e.rawValue,"$.rawValue",n);return{rawText:Tae(e.rawText,n),rawValue:t,transforms:n}}function Tae(e,n){if(e!==void 0)try{let t=JSON.parse(e);return JSON.stringify(Up(t,"$.rawText",n))}catch{return e}}function Up(e,n="$",t=[]){if(Array.isArray(e))return e.map((o,i)=>Up(o,`${n}[${i}]`,t));if(!Z(e))return e;let r=Object.entries(e).map(([o,i])=>{let s=`${n}.${o}`;return vae.test(o)?(t.push({type:"credential_redaction",path:s}),[o,"[REDACTED]"]):[o,i===void 0?void 0:Up(i,s,t)]});return Object.fromEntries(r)}var Np,vae,Qg=F(()=>{"use strict";IS();$n();vae=/(^|[_-])(token|secret|api[_-]?key|authorization|cookie|private[_-]?key|login[_-]?url)([_-]|$)/iu});import{Buffer as Pae}from"node:buffer";function NL(e){return e instanceof Ci||e instanceof Error&&e.name===qL&&"phase"in e&&"reason"in e}function UL(e){return NL(e)?e.phase==="wait_for_connection"?!0:e.reason!=="timeout":!1}function BL(e){return NL(e)&&e.phase==="wait_for_connection"}function $ae(e){let n;try{n=JSON.stringify(Z(e)?Si(e):e)??"undefined"}catch{return"<unserializable payload>"}return n.length<=LL?n:`${n.slice(0,LL)}\u2026`}function Oae(e){let n=new URL(e);switch(n.protocol){case"http:":n.protocol="ws:";break;case"https:":n.protocol="wss:";break}return n.pathname=n.pathname.replace(/\/$/,"")+"/socket/websocket",n.searchParams.set("vsn","2.0.0"),n.toString()}function Lae(e){return[`${Aae}${Pae.from(e,"utf8").toString("base64url")}`,"phoenix"]}async function Yg(e,n,t=(o,i)=>new WebSocket(o,i===void 0?void 0:[...i]),r={}){let o=typeof n=="string"?n:void 0,i=()=>{if(typeof n=="string")return n;try{let N=n();if(typeof N=="string"&&N.trim()!=="")return o=N,N}catch{}if(o!==void 0)return o;throw new Error("phoenix token provider returned no usable token")},s=r.onOperatorNotice??(N=>{console.error(N)}),a=new Map,d=new Map,u=new Map,c=new Map,l=new Map,p=new Map,m=new Map,f=new Map,y=new Set,x=1,b=new Set,S=new Set,v=new Set,w=new Set,k={nextRef:1,websocket:void 0,closed:!1,connected:!1,hasEverConnected:!1,connectionGeneration:0,ready:Promise.resolve(),resolveReady:void 0,rejectReady:void 0,reconnectTimer:void 0,reconnectAttempts:0,backoffResetTimer:void 0,heartbeatTimer:void 0,connectedAt:void 0},R=r.pushTimeoutMs??Iae,P=r.controlCursorStore,O=r.controlEpochStore,E=N=>{a.forEach(ne=>{clearTimeout(ne.timer),ne.reject(N)}),a.clear()},j=()=>{k.resolveReady===void 0&&(k.ready=new Promise((N,ne)=>{k.resolveReady=N,k.rejectReady=ne}),k.ready.catch(()=>{}))},z=()=>{k.resolveReady?.(),k.resolveReady=void 0,k.rejectReady=void 0},M=N=>{k.rejectReady?.(N),k.resolveReady=void 0,k.rejectReady=void 0},J=N=>{k.closed=!0,k.reconnectTimer!==void 0&&(clearTimeout(k.reconnectTimer),k.reconnectTimer=void 0),Ge(),Je(),k.websocket?.close(),M(N),E(Xo.clientClosed("reply"))},K=(N,ne)=>{let oe=zL(ne);if(oe===void 0)return!0;let le=c.get(N);if(le!==void 0&&oe<=le)return!1;let ve=l.get(N);return ve!==void 0&&ve.has(oe)?!1:(G(N,oe),!0)},G=(N,ne)=>{let oe=c.get(N);if(oe===void 0){c.set(N,ne);return}if(ne===oe+1){oe+=1;let ve=l.get(N);if(ve!==void 0)for(;ve.has(oe+1);)oe+=1,ve.delete(oe);c.set(N,oe);return}let le=l.get(N);le===void 0&&(le=new Set,l.set(N,le)),le.add(ne)},W=N=>c.get(N),te=(N,ne)=>{if(!N.startsWith("local_runner:"))return;let oe=ne.control_high_water;if(typeof oe!="number"||!Number.isInteger(oe))return;let le=c.get(N);if(!(le===void 0||oe>=le)&&(ge(N),P?.reset!==void 0))try{P.reset(N,0)}catch{}},me=N=>f.get(N)??0,ge=N=>{c.delete(N),l.delete(N),p.delete(N),m.delete(N),f.set(N,me(N)+1)},ce=(N,ne)=>{if(O===void 0||!N.startsWith("local_runner:"))return!1;let oe=ne.control_epoch;if(typeof oe!="string"||oe==="")return!1;let le=!1;try{le=O.adopt(N,oe)}catch{return!1}return le&&ge(N),le},Ie=(N,ne)=>{if(P!==void 0)try{P.onAdvance(N,ne)}catch{}},Re=(N,ne,oe)=>{if(oe!==me(N))return;let le=p.get(N);le?.delete(ne);let ve=m.get(N);(ve===void 0||ne>ve)&&m.set(N,ne);let De=le===void 0||le.size===0?m.get(N):Math.min(...le)-1;if(De===void 0)return;let dn=W(N),zn=dn===void 0?De:Math.min(De,dn);Ie(N,zn)},I=N=>{let ne=c.get(N);if(ne!==void 0)return ne;if(P===void 0)return;let oe=Vae(P,N);return oe===void 0?0:(c.set(N,oe),oe)},L=new Set,U=(N,ne,oe,le)=>{try{ie(N,ne,oe,le)}catch(ve){let De=ve instanceof Error?ve.message:String(ve);try{he("phoenix.pushed_frame_dispatch_failed",{topic:N,frame:ne,message:De,stack:ve instanceof Error?ve.stack??null:null,payloadSnippet:$ae(le),dropped:!0})}catch{}if(!L.has(ne)){L.add(ne);try{s(`linzumi: dropped a pushed "${ne}" frame on ${N} whose dispatch failed (${De}); see the CLI audit log for the payload snippet.`)}catch{}}}},ie=(N,ne,oe,le)=>{if(N.startsWith("local_runner:")&&ne==="control"&&Kae(le)){if(!K(N,le))return;let ve=zL(le);if(ve!==void 0){let zn=p.get(N);zn===void 0&&(zn=new Set,p.set(N,zn)),zn.add(ve)}let De=me(N),dn=ve===void 0?()=>{}:()=>Re(N,ve,De);b.forEach(zn=>zn(le,dn))}oe===null&&ne!=="phx_reply"&&ne!=="phx_error"&&S.forEach(ve=>ve(N,ne,le))},se=(N,ne)=>{let oe=c.get(N),le=oe===void 0?ne:Math.max(oe,ne),ve=l.get(N);if(ve!==void 0){for(let De of ve)De<=le&&ve.delete(De);for(;ve.has(le+1);)le+=1,ve.delete(le)}c.set(N,le)},Q=N=>{let ne=W(N);if(ne===void 0)return;let oe=p.get(N),le=oe!==void 0&&oe.size>0?Math.min(...oe)-1:void 0;Ie(N,le===void 0?ne:Math.min(le,ne))},_e=(N,ne)=>{if(N.startsWith("chat:")){let oe=ne.events;if(oe==null)return;if(!Array.isArray(oe))throw new Error(`phoenix rejoin returned invalid events for ${N}`);oe.forEach(le=>{S.forEach(ve=>ve(N,"event",le))});return}if(N.startsWith("local_runner:")){let oe=ne.controls;if(oe==null)return;if(!Array.isArray(oe))throw new Error(`phoenix rejoin returned invalid controls for ${N}`);oe.forEach(De=>{if(!Gae(De))return;let dn={...De.payload,replayed:!0,...De.control_seq===void 0?{}:{control_seq:De.control_seq}};U(N,De.event,null,dn)});let le=ne.controls_advance_to,ve=ne.control_high_water;typeof le=="number"&&Number.isInteger(le)&&(typeof ve!="number"||le<=ve)&&se(N,le),Q(N)}},Te=N=>{let ne=jae(String(N.data)),[,oe,le,ve,De]=ne;if(oe!==null&&(ve==="phx_reply"||ve==="phx_error")){let dn=a.get(oe);if(dn!==void 0)if(a.delete(oe),clearTimeout(dn.timer),ve==="phx_error")dn.reject(new Error("phoenix push failed"));else if(Jae(De)&&dn.event!=="phx_join")dn.reject(new Error(`phoenix push failed: ${JL(De)}`));else{if(dn.event==="phx_join"&&d.has(le)&&Xg(De)){let zn=ce(le,De.response);te(le,De.response);try{zn||_e(le,De.response)}catch(On){dn.reject(On instanceof Error?On:new Error(String(On)));return}le.startsWith("local_runner:")&&(De.response.controls_truncated===!0||zn)&&Ke(le)}dn.resolve(De)}}U(le,ve,oe,De)},ae=(N,ne,oe,le=R,ve)=>{let De=k.websocket;if(De===void 0||De.readyState!==WebSocket.OPEN)return Promise.reject(Xo.socketNotOpen());let dn=String(k.nextRef);k.nextRef+=1,ne==="phx_join"&&u.set(N,dn);let zn=ne==="phx_join"?dn:u.get(N)??null,On=vg(oe),Vo=[zn,dn,N,ne,On],yt=Math.max(0,Math.ceil(le));return new Promise((Zt,to)=>{let Na=setTimeout(()=>{a.delete(dn)&&to(Xo.replyTimeout(yt,ne))},yt);a.set(dn,{event:ne,timer:Na,resolve:Zt,reject:to}),ls({provider:Hae(On),captureKind:"commander-push",rawText:JSON.stringify(Vo),rawValue:{topic:N,event:ne,payload:On}}),De.send(JSON.stringify(Vo)),ve?.()})},Ee=(N,ne)=>{let oe={};for(let le of ne)for(let[ve,De]of Object.entries(le)){if(De===void 0)continue;let dn=oe[ve];ve==="last_seq"&&typeof De=="number"&&typeof dn=="number"?oe[ve]=Math.min(dn,De):dn===void 0&&(oe[ve]=De)}if(N.startsWith("local_runner:")){let le=I(N);le!==void 0&&(oe.last_control_seq=le);let ve=Wae(O,N);ve!==void 0&&(oe.last_control_epoch=ve)}return oe},dt=async N=>{let ne=0,oe=0;for(;;){let le=d.get(N);if(le===void 0)return;let ve=I(N),De=await ae(N,"phx_join",Ee(N,[...le.values()].map(Zt=>Zt.payload())));if(ne+=1,!Xg(De))return;let dn=Array.isArray(De.response.controls)?De.response.controls.length:0;oe+=dn;let zn=De.response.controls_truncated===!0,On=I(N),Vo=De.response.control_high_water,yt=zn?typeof Vo=="number"&&Number.isInteger(Vo)&&On!==void 0?Math.max(0,Vo-On):null:0;if(he("phoenix.control_backlog_fetch_progress",{topic:N,fetches:ne,fetched:oe,remaining_estimate:yt,truncated:zn}),!zn)return;if(On===ve){s(`phoenix.control_backlog_fetch_stalled topic=${N} fetches=${ne} fetched=${oe} cursor=${String(On)}; a truncated reply made no cursor progress - stopping this fetch loop (a server paging bug; the next reconnect resumes from the watermark)`);return}ne%Mae===0&&s(`phoenix.control_backlog_cap_exceeded topic=${N} fetches=${ne} fetched=${oe} remaining_estimate=${yt??"unknown"}; continuing the paginated backlog fetch (a healthy connection never reconnects, so nothing is deferred)`),await new Promise(Zt=>{setImmediate(Zt)})}},Ke=N=>{y.has(N)||(y.add(N),dt(N).catch(()=>{}).finally(()=>y.delete(N)))},Dt=new Map,X=async()=>{Dt.clear();for(let[N,ne]of d){let oe=await ae(N,"phx_join",Ee(N,[...ne.values()].map(le=>le.payload())));if(!Xg(oe))throw new Error(`phoenix rejoin failed for ${N}`);Z(oe.response)&&Dt.set(N,oe.response)}},pe=()=>{if(k.closed||k.reconnectTimer!==void 0)return;j();let N=Math.min(Eae,Rae*2**k.reconnectAttempts);k.reconnectAttempts+=1,k.reconnectTimer=setTimeout(()=>{k.reconnectTimer=void 0,$r()},Math.random()*N)},$e=(N,ne)=>{let oe=k.connected,le=k.connectedAt;k.connectedAt=void 0,k.connected=!1;let ve=k.websocket;if(k.websocket=void 0,Ge(),Je(),ve!==void 0&&(ve.readyState===WebSocket.CONNECTING||ve.readyState===WebSocket.OPEN))try{ve.close()}catch{}if(E(N),pe(),oe){let De={closeCode:ne?.code,closeReason:typeof ne?.reason=="string"&&ne.reason!==""?ne.reason:void 0,previousSessionDurationMs:le===void 0?void 0:Math.max(0,Date.now()-le),reconnectCount:k.reconnectAttempts};w.forEach(dn=>{try{dn(De)}catch{}})}},_n=3e4,Ge=()=>{k.heartbeatTimer!==void 0&&(clearInterval(k.heartbeatTimer),k.heartbeatTimer=void 0)},Je=()=>{k.backoffResetTimer!==void 0&&(clearTimeout(k.backoffResetTimer),k.backoffResetTimer=void 0)},In=()=>{Je(),k.backoffResetTimer=setTimeout(()=>{k.backoffResetTimer=void 0,k.connected&&(k.reconnectAttempts=0)},Dae),k.backoffResetTimer?.unref?.()},wt=()=>{Ge(),k.heartbeatTimer=setInterval(()=>{let N=k.websocket;if(N===void 0||N.readyState!==WebSocket.OPEN)return;let ne=String(k.nextRef);k.nextRef+=1;try{N.send(JSON.stringify([null,ne,"phoenix","heartbeat",{}]))}catch{}},_n)},$r=async()=>{if(k.closed)return;let N;try{N=t(Oae(e),Lae(i()));let ne=N;if(k.websocket=N,N.addEventListener("message",oe=>{k.websocket===ne&&Te(oe)}),N.addEventListener("close",oe=>{k.websocket===N&&$e(Xo.socketClosed(),{code:typeof oe.code=="number"?oe.code:void 0,reason:typeof oe.reason=="string"?oe.reason:void 0})},{once:!0}),N.addEventListener("error",()=>{k.websocket===N&&$e(Xo.socketClosed())},{once:!0}),await Zae(N,R),k.closed||k.websocket!==N||(k.connectionGeneration+=1,await X(),k.closed||k.websocket!==N))return;if(k.connected=!0,k.connectedAt=Date.now(),k.hasEverConnected=!0,In(),wt(),z(),k.connectionGeneration>1){let oe=new Map(Dt);v.forEach(le=>{Promise.resolve(le(oe)).catch(()=>{})})}}catch(ne){if(k.closed||N!==void 0&&k.websocket!==void 0&&k.websocket!==N)return;if(!k.hasEverConnected){J(ne instanceof Error?ne:new Error(String(ne)));return}$e(Xo.reconnectFailed())}};j(),$r(),await k.ready;let qa=(N,ne)=>new Promise((oe,le)=>{let ve=setTimeout(()=>{le(Xo.connectionWaitTimeout(R,N))},Math.max(0,ne-Date.now()));k.ready.then(()=>{clearTimeout(ve),oe()},De=>{clearTimeout(ve),le(De instanceof Error?De:new Error(String(De)))})}),xi=async(N,ne,oe,le)=>{let ve=Date.now()+R;return await qa(ne,ve),ae(N,ne,oe,ve-Date.now(),le)};return{join:async(N,ne,oe)=>{let le=oe?.registrationId??`join-registration-${x++}`,ve=[...d.get(N)?.values()??[]].map(dn=>dn.payload()),De=await xi(N,"phx_join",Ee(N,[...ve,ne]));if(Xg(De)){let dn=d.get(N)??new Map,zn=dn.size===0;if(dn.set(le,{payload:oe?.rejoinPayload??(()=>ne)}),d.set(N,dn),zn&&N.startsWith("local_runner:")){let On=ce(N,De.response);te(N,De.response),On||_e(N,De.response),(De.response.controls_truncated===!0||On)&&Ke(N)}return De.response}throw new Error(`phoenix join failed: ${Bae(De)}`)},unregisterJoin:(N,ne)=>{let oe=d.get(N);oe!==void 0&&(oe.delete(ne),oe.size===0&&(d.delete(N),u.delete(N)))},push:xi,pushIfConnected:async(N,ne,oe)=>{if(!k.connected)throw Xo.notConnected();return await ae(N,ne,oe)},onControl:N=>{b.add(N)},onEvent:N=>{S.add(N)},onReconnect:N=>{v.add(N)},onDisconnect:N=>{w.add(N)},forceReconnect:N=>k.closed||!k.connected?!1:($e(Xo.socketClosed(),{reason:N??"forced_stale_reconnect"}),!0),hardReset:N=>k.closed?!1:($e(Xo.socketClosed(),{reason:N??"hard_reset"}),k.reconnectTimer!==void 0&&(clearTimeout(k.reconnectTimer),k.reconnectTimer=void 0),$r(),!0),close:()=>{J(Xo.clientClosed("wait_for_connection"))}}}function jae(e){let n=JSON.parse(e);if(Array.isArray(n)&&n.length===5&&(n[0]===null||typeof n[0]=="string")&&(n[1]===null||typeof n[1]=="string")&&typeof n[2]=="string"&&typeof n[3]=="string")return n;throw new Error("invalid Phoenix frame")}function Xg(e){return Z(e)&&e.status==="ok"&&Z(e.response)}function Nae(e){return typeof e=="string"&&e.length<=100&&zae.test(e)?e:Fae}function Uae(e){return typeof e=="string"&&e.length<=64&&qae.test(e)?`@linzumi/cli ${e} or newer`:"a newer @linzumi/cli"}function Bae(e){if(Z(e)){let n=e.response;if(Z(n)&&n.error==="commander_version_too_old"){let t=Uae(n.min_version),r=Nae(n.upgrade_command);return`commander_version_too_old: this Linzumi server requires ${t}. Update with: ${r}`}}return JL(e)}function JL(e){if(!Z(e))return"invalid reply";let n=e.response;return Z(n)&&typeof n.error=="string"?n.error:Z(n)&&typeof n.reason=="string"?n.reason:Z(n)&&typeof n.message=="string"?n.message:typeof e.error=="string"?e.error:"unknown"}function Jae(e){return Z(e)&&e.status!=="ok"}function Kae(e){return Z(e)&&typeof e.type=="string"}function Vae(e,n){try{let t=e.initial(n);return typeof t=="number"&&Number.isInteger(t)&&t>=0?t:void 0}catch{return}}function Wae(e,n){if(e!==void 0)try{let t=e.current(n);return typeof t=="string"&&t!==""?t:void 0}catch{return}}function Hae(e){if(FL(e,"agent_provider")==="claude-code")return"claude-code-sdk";let t=jL(e,"metadata"),r=jL(t,"local_codex_runner");return FL(r,"agent_provider")==="claude-code"?"claude-code-sdk":"codex-app-server"}function jL(e,n){let t=e?.[n];return Z(t)?t:void 0}function FL(e,n){let t=e?.[n];return typeof t=="string"?t:void 0}function zL(e){if(!Z(e))return;let n=e.control_seq;return typeof n=="number"&&Number.isInteger(n)?n:void 0}function Gae(e){return Z(e)&&typeof e.event=="string"&&Z(e.payload)&&(e.control_seq===void 0||typeof e.control_seq=="number"&&Number.isInteger(e.control_seq))}function Zae(e,n){return new Promise((t,r)=>{let o,i=s=>{o!==void 0&&(clearTimeout(o),o=void 0),s()};e.addEventListener("open",()=>i(t),{once:!0}),e.addEventListener("error",()=>i(()=>r(new Error("websocket open failed"))),{once:!0}),e.addEventListener("close",()=>i(()=>r(new Error("websocket closed before open"))),{once:!0}),n!==void 0&&(o=setTimeout(()=>{o=void 0,i(()=>r(new Error(`websocket open timed out after ${n}ms`)))},n))})}var qL,Ci,Xo,Iae,Rae,Eae,Dae,Mae,Aae,LL,Fae,zae,qae,ey=F(()=>{"use strict";Qg();Sg();Lt();$n();qL="PhoenixPushError",Ci=class extends Error{phase;reason;constructor(n,t,r){super(r),this.name=qL,this.phase=n,this.reason=t}},Xo={socketClosed:()=>new Ci("reply","socket_closed","phoenix websocket closed"),reconnectFailed:()=>new Ci("reply","socket_closed","phoenix websocket reconnect failed"),socketNotOpen:()=>new Ci("wait_for_connection","socket_not_open","phoenix websocket is not open"),clientClosed:e=>new Ci(e,"client_closed","phoenix client closed"),notConnected:()=>new Ci("wait_for_connection","not_connected","phoenix client is not connected"),connectionWaitTimeout:(e,n)=>new Ci("wait_for_connection","timeout",`phoenix push timed out after ${e}ms waiting for connection: ${n}`),replyTimeout:(e,n)=>new Ci("reply","timeout",`phoenix push timed out after ${e}ms: ${n}`)};Iae=3e4,Rae=250,Eae=1e4,Dae=3e4,Mae=20,Aae="base64url.bearer.phx.",LL=400;Fae="npm install -g @linzumi/cli@latest",zae=/^npm install -g @linzumi\/cli(@[0-9A-Za-z^~.-]{1,32})?$/,qae=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]{1,32})?$/});function KL(e){let n=e.itemId??`index:${e.itemIndex}`;return`${e.turnId}:${e.streamKind}:${n}`}var At,RS=F(()=>{"use strict";At={postStreamedRow:"pipeline.post_streamed_row",streamSnapshot:"pipeline.stream_snapshot",finalizeRow:"pipeline.finalize_row",postCompletedRow:"pipeline.post_completed_row",messageState:"pipeline.message_state"}});import{mkdirSync as VL,readFileSync as Qae}from"node:fs";import{appendFile as WL,rename as HL,writeFile as Xae}from"node:fs/promises";import{createHash as Yae}from"node:crypto";import{dirname as GL,join as ede}from"node:path";function ac(e,n){let t=n.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),r=Yae("sha256").update(n).digest("hex").slice(0,8);return ede(e,`${t===""?"thread":t}.${r}.outbox.jsonl`)}function ny(e,n){let t={pendingEntries:[],kv:new Map,counters:{totalEnqueued:0,totalAcked:0,totalDroppedBestEffort:0,totalPermanentFailures:0,totalExpiredOnRecovery:0,lastEntrySeq:0}},r;try{r=Qae(e,"utf8")}catch(a){return XL(a,"ENOENT")||n("outbox_journal_read_failed",{path:e,error:DS(a)}),t}let o=new Map,i=r.split(`
|
|
557
557
|
`),s=-1;for(let a=0;a<i.length;a+=1){let d=i[a];d!==void 0&&d.trim()!==""&&(s=a)}for(let a=0;a<=s;a+=1){let d=i[a];if(d===void 0||d.trim()==="")continue;let u=ide(d);if(u===void 0){n("outbox_journal_line_discarded",{path:e,line:a+1,trailing:a===s});continue}rde(u,o,t,n,e)}return t.pendingEntries=[...o.values()],t}function QL(e){let{log:n}=e,t=e.path,r=e.compactionThreshold??nde,o=e.degradedThreshold??tde;VL(GL(t),{recursive:!0});let i=[],s=Promise.resolve(),a=!1,d=0,u=!1,c=0,l=0,p=!1,m=v=>{if(l+=1,c+=1,n("outbox_journal_write_failed",{path:t,error:DS(v)}),!p&&c>=o&&(p=!0,n("outbox_journal_degraded",{level:"error",path:t,consecutiveWriteFailures:c,totalWriteFailures:l})),p&&i.length>0){let w=i.reduce((k,R)=>k+R.split(`
|
|
558
558
|
`).length-1,0);i=[],n("outbox_journal_buffered_records_dropped",{level:"error",path:t,droppedRecords:w,consecutiveWriteFailures:c,totalWriteFailures:l})}},f=()=>{c=0,p&&(p=!1,n("outbox_journal_recovered",{level:"warn",path:t,totalWriteFailures:l}))},y=async()=>{if(a=!1,i.length>0){let v=i.join("");i=[];try{await WL(t,v,"utf8")}catch(w){throw i.unshift(v),w}}d>=r&&await x()},x=async()=>{d=0;let v=e.snapshot(),w=i;i=[];let k=[Ti({t:"counters",enqueued:v.counters.totalEnqueued,acked:v.counters.totalAcked,dropped:v.counters.totalDroppedBestEffort,failed:v.counters.totalPermanentFailures,expired:v.counters.totalExpiredOnRecovery,lastSeq:v.counters.lastEntrySeq}),Ti({t:"context",kv:Object.fromEntries(v.kv)}),...v.pendingEntries.map(P=>ZL("pending",P))],R=`${t}.tmp`;try{await Xae(R,k.join(""),"utf8"),await HL(R,t)}catch(P){throw i=[...w,...i],d=r,P}n("outbox_journal_compacted",{path:t,pendingEntries:v.pendingEntries.length})},b=()=>{a||(a=!0,s=s.then(()=>y().then(f,v=>{m(v)}),v=>{m(v)}))},S=(v,w)=>{if(u){n("outbox_journal_append_after_close",{path:t});return}i.push(v),w&&(d+=1),b()};return{appendEnqueue:v=>{S(ZL("enqueue",v),!1)},appendCoalesce:(v,w)=>{S(Ti({t:"coalesce",seq:v,data:w}),!1)},appendAck:v=>{S(Ti({t:"ack",seq:v}),!0)},appendSkip:(v,w)=>{S(Ti({t:"skip",seq:v,reason:w}),!0)},appendDrop:v=>{S(Ti({t:"drop",seq:v}),!0)},appendFail:v=>{S(Ti({t:"fail",seq:v}),!0)},appendExpired:v=>{S(Ti({t:"expired",seq:v}),!0)},appendKv:(v,w)=>{S(Ti({t:"kv",key:v,value:w}),!1)},settled:()=>s.then(()=>{}),status:()=>({totalWriteFailures:l,degraded:p}),rekey:v=>{if(u){n("outbox_journal_rekey_after_close",{path:v});return}s=s.then(async()=>{if(v===t)return;let w=t;try{VL(GL(v),{recursive:!0}),await HL(w,v)}catch(k){if(!XL(k,"ENOENT")){n("outbox_journal_rekey_failed",{level:"error",from:w,to:v,error:DS(k)});return}}t=v,n("outbox_journal_rekeyed",{from:w,to:v})})},close:async()=>{if(u=!0,await s.then(()=>{}),i.length>0){let v=i.join("");try{await WL(t,v,"utf8"),i=[],f()}catch(w){m(w)}}}}}function rde(e,n,t,r,o){let i=t.counters,s=a=>{a>i.lastEntrySeq&&(i.lastEntrySeq=a)};switch(e.t){case"enqueue":case"pending":{let a=ode(e);if(a===void 0){r("outbox_journal_line_discarded",{path:o,recordType:e.t});return}n.set(a.entrySeq,a),s(a.entrySeq),e.t==="enqueue"&&(i.totalEnqueued+=1);return}case"coalesce":{let a=Y(e.seq),d=A(e.data);if(i.totalEnqueued+=1,a===void 0||d===void 0)return;let u=n.get(a);u!==void 0&&(u.data=d),s(a);return}case"ack":case"skip":case"drop":case"fail":case"expired":{let a=Y(e.seq);if(a===void 0)return;n.delete(a),s(a),e.t==="ack"?i.totalAcked+=1:e.t==="drop"?i.totalDroppedBestEffort+=1:e.t==="fail"?i.totalPermanentFailures+=1:e.t==="expired"&&(i.totalExpiredOnRecovery+=1);return}case"item_seq":return;case"kv":{let a=ES(e.key);a!==void 0&&e.value!==void 0&&t.kv.set(a,e.value);return}case"context":{t.kv=new Map;let a=A(e.kv);for(let[d,u]of Object.entries(a??{}))u!==void 0&&t.kv.set(d,u);return}case"counters":{i.totalEnqueued=Y(e.enqueued)??0,i.totalAcked=Y(e.acked)??0,i.totalDroppedBestEffort=Y(e.dropped)??0,i.totalPermanentFailures=Y(e.failed)??0,i.totalExpiredOnRecovery=Y(e.expired)??0,s(Y(e.lastSeq)??0);return}default:{r("outbox_journal_unknown_record",{path:o,recordType:e.t??null});return}}}function ode(e){let n=Y(e.seq),t=ES(e.kind),r=A(e.data),o=e.resolution==="must_ack"||e.resolution==="best_effort"?e.resolution:void 0,i=ES(e.coalesceKey),s=typeof e.atMs=="number"&&Number.isFinite(e.atMs)?e.atMs:0;if(!(n===void 0||t===void 0||r===void 0||o===void 0))return{entrySeq:n,kind:t,data:r,...i===void 0?{}:{coalesceKey:i},resolution:o,attempts:0,enqueuedAtMs:s}}function ZL(e,n){return Ti({t:e,seq:n.entrySeq,kind:n.kind,data:n.data,...n.coalesceKey===void 0?{}:{coalesceKey:n.coalesceKey},resolution:n.resolution,atMs:n.enqueuedAtMs})}function Ti(e){return`${JSON.stringify(e)}
|
|
559
|
-
`}function ide(e){try{let n=JSON.parse(e);return Z(n)?n:void 0}catch{return}}function ES(e){return typeof e=="string"?e:void 0}function XL(e,n){return typeof e=="object"&&e!==null&&e.code===n}function DS(e){return e instanceof Error?e.message:String(e)}var nde,tde,MS=F(()=>{"use strict";$n();Hn();nde=256,tde=3});function tj(e){let{builders:n,log:t,onPermanentFailure:r}=e,o=e.threadKey,i=e.now??(()=>Date.now()),s=e.retryDelaysMs??[...AS],a=[],d=0,u=new Map,c=new Map,l=[],p=1,m=0,f=0,y=0,x=0,b=0,S=0,v=[],w=0,k=!1,R=!0,P=!1,O,E,j=Math.max(1,Math.floor(e.maxInFlightPushes??1)),z=0,M=[],J=Promise.resolve(),K=()=>a[d],G=()=>a.length-d,W=()=>({totalEnqueued:m,totalAcked:f,totalDroppedBestEffort:x,totalPermanentFailures:b,totalExpiredOnRecovery:S,lastEntrySeq:p-1});if(e.persistDir!==void 0){let X=ac(e.persistDir,o),pe=ny(X,t),$e=e.journalRecoveryMaxAgeMs??sde,_n=i(),Ge=[];for(let Je of pe.pendingEntries){if(_n-Je.enqueuedAtMs>$e){Ge.push(Je);continue}let In={entry:Je,state:"queued"};a.push(In),Je.coalesceKey!==void 0&&u.set(ty(Je.kind,Je.coalesceKey),In)}if(c=pe.kv,m=pe.counters.totalEnqueued,f=pe.counters.totalAcked,x=pe.counters.totalDroppedBestEffort,b=pe.counters.totalPermanentFailures,S=pe.counters.totalExpiredOnRecovery+Ge.length,p=pe.counters.lastEntrySeq+1,E=QL({path:X,log:t,compactionThreshold:e.journalCompactionThreshold,snapshot:()=>({pendingEntries:a.slice(d).map(Je=>Je.entry),kv:c,counters:W()})}),Ge.length>0){for(let In of Ge)E.appendExpired(In.entrySeq);let Je=Ge.map(In=>Math.max(0,_n-In.enqueuedAtMs));t("outbox_recovery_expired",{level:"warn",threadKey:o,expiredEntries:Ge.length,survivingEntries:G(),maxAgeMs:$e,oldestAgeMs:Math.max(...Je),newestAgeMs:Math.min(...Je),kinds:[...new Set(Ge.map(In=>In.kind))]})}G()>0&&t("outbox_recovered",{threadKey:o,pendingEntries:G(),nextEntrySeq:p})}let te={remember:(X,pe)=>{c.set(X,pe),E?.appendKv(X,pe)},recall:X=>c.get(X)},me=()=>{d+=1,d>=64&&d*2>=a.length&&(a=a.slice(d),d=0)},ge=()=>{let X=K();for(let pe=l.length-1;pe>=0;pe-=1){let $e=l[pe];$e!==void 0&&(X===void 0||X.entry.entrySeq>$e.upToSeq)&&(l.splice(pe,1),$e.timer!==void 0&&clearTimeout($e.timer),$e.resolve())}},ce=X=>{if(X.entry.coalesceKey===void 0)return;let pe=ty(X.entry.kind,X.entry.coalesceKey);u.get(pe)===X&&u.delete(pe)},Ie=(X,pe)=>{let $e=X.entry;switch(pe.kind){case"ack":{let _n=n[$e.kind];try{_n?.onReply?.($e.data,pe.reply,te)}catch(Ge){t("outbox_on_reply_failed",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,error:Bp(Ge)})}E?.appendAck($e.entrySeq);break}case"skip":{t("outbox_entry_skipped",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,reason:pe.reason}),E?.appendSkip($e.entrySeq,pe.reason);break}case"fail":{if($e.resolution==="must_ack"){E?.appendFail($e.entrySeq);try{r($e,pe.failure)}catch(_n){t("outbox_permanent_failure_callback_failed",{threadKey:o,entrySeq:$e.entrySeq,error:Bp(_n)})}}else E?.appendDrop($e.entrySeq);break}}ce(X),me(),ge()},Re=()=>{for(;;){let X=K();if(X===void 0||X.outcome===void 0)return;Ie(X,X.outcome)}},I=(X,pe)=>{let $e=X.entry;pe.kind==="fail"&&($e.resolution==="must_ack"?(b+=1,t("outbox_permanent_failure",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,attempts:$e.attempts,error:pe.failure.message})):(x+=1,t("outbox_dropped_best_effort",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,attempts:$e.attempts,error:pe.failure.message}))),X.outcome=pe,X.state="queued"},L=X=>{v.length<YL?v.push(X):v[w]=X,w=(w+1)%YL},U=X=>{X.retryTimer!==void 0&&(clearTimeout(X.retryTimer),X.retryTimer=void 0)},ie=()=>{if(z>0)return;let X=M;M=[];for(let pe of X)pe()},se=()=>{let X=K();return X!==void 0&&X.outcome===void 0&&X.state==="queued"&&X.retryTimer!==void 0},Q=(X,pe)=>{U(X),X.retryTimer=setTimeout(()=>{X.retryTimer=void 0,!(P||k||X.outcome!==void 0)&&ae()},pe),X.retryTimer?.unref?.()},_e=async X=>{let pe=X.entry,$e=J,_n=()=>{};J=new Promise(In=>{_n=In});let Ge=!1,Je=()=>{Ge||(Ge=!0,_n())};X.state="pushing",z+=1;try{if(await $e,P||k||X.outcome!==void 0){X.state="queued",Je();return}let In=n[pe.kind];if(In===void 0){Je(),I(X,{kind:"fail",failure:new Error(`no outbox builder registered for kind ${pe.kind}`)});return}let wt;try{wt=In.build(pe.data,te)}catch($r){Je(),I(X,{kind:"fail",failure:nj($r)});return}if("skip"in wt){Je(),I(X,{kind:"skip",reason:wt.reason});return}pe.attempts+=1,await Te(X,wt,Je)}finally{z-=1}},Te=async(X,pe,$e)=>{let _n=X.entry,Ge=i();try{let Je=await e.push(pe.event,pe.payload,pe.timeoutMs,$e);$e(),L(Math.max(0,i()-Ge)),f+=1,I(X,{kind:"ack",reply:Je})}catch(Je){$e(),X.state="queued";let In=nj(Je);if(e.isRetryBudgetExempt?.(In)===!0)_n.attempts-=1,y+=1,t("outbox_push_connection_wait",{threadKey:o,entrySeq:_n.entrySeq,kind:_n.kind,error:In.message}),!P&&!k&&Q(X,ude);else{let wt=s[_n.attempts-1];wt===void 0?I(X,{kind:"fail",failure:In}):(y+=1,t("outbox_push_retry",{threadKey:o,entrySeq:_n.entrySeq,kind:_n.kind,attempt:_n.attempts,delayMs:wt,error:In.message}),!P&&!k&&Q(X,wt))}}},ae=()=>{if(Re(),P||k){ie();return}if(se()){ie();return}for(let X=d;X<a.length&&z<j;X+=1){let pe=a[X];pe===void 0||pe.outcome!==void 0||pe.state==="pushing"||pe.retryTimer!==void 0||_e(pe).then(()=>ae(),$e=>{t("outbox_drain_loop_error",{threadKey:o,error:Bp($e)}),ae()})}ie()},Ee=()=>{k||P||K()!==void 0&&Promise.resolve().then(()=>{!P&&!k&&ae()})},dt=X=>{let pe=p-1,$e=K();return $e===void 0||$e.entry.entrySeq>pe?Promise.resolve():new Promise((_n,Ge)=>{let Je={upToSeq:pe,resolve:_n,reject:Ge,timer:void 0};X!==void 0&&(Je.timer=setTimeout(()=>{let In=l.indexOf(Je);In!==-1&&l.splice(In,1),Ge(new Error(`outbox flush for ${o} timed out after ${X}ms with ${G()} entries pending`))},X)),l.push(Je)})},Ke=async X=>{R=!1;try{await dt(X)}catch(pe){t("outbox_close_flush_timeout",{threadKey:o,depth:G(),error:Bp(pe)})}P=!0;for(let pe=d;pe<a.length;pe+=1)U(a[pe]);z>0&&await Promise.race([new Promise(pe=>{M.push(pe)}),pde(dde)]);for(let pe of l.splice(0))pe.timer!==void 0&&clearTimeout(pe.timer),pe.reject(new Error(`outbox for ${o} closed`));await E?.close()},Dt={enqueue:X=>{if(!R)throw new Error(`outbox for ${o} is closed`);if(m+=1,X.coalesceKey!==void 0){let Ge=ty(X.kind,X.coalesceKey),Je=u.get(Ge);if(Je!==void 0&&Je.state==="queued"&&Je.outcome===void 0)return Je.entry.data=cde(n[X.kind],Je.entry,X.data,o,t),E?.appendCoalesce(Je.entry.entrySeq,Je.entry.data),Je.entry.entrySeq}let pe=p;p+=1;let $e={entrySeq:pe,kind:X.kind,data:X.data,...X.coalesceKey===void 0?{}:{coalesceKey:X.coalesceKey},resolution:X.resolution,attempts:0,enqueuedAtMs:i()},_n={entry:$e,state:"queued"};return a.push(_n),X.coalesceKey!==void 0&&u.set(ty(X.kind,X.coalesceKey),_n),E?.appendEnqueue($e),Ee(),pe},flush:dt,pause:()=>{k=!0},resume:()=>{if(k){k=!1;for(let X=d;X<a.length;X+=1){let pe=a[X];pe!==void 0&&(pe.entry.attempts=0,U(pe))}Ee()}},metrics:()=>{let X=K(),pe=E?.status();return{depth:G(),oldestEntryAgeMs:X===void 0?void 0:Math.max(0,i()-X.entry.enqueuedAtMs),totalEnqueued:m,totalAcked:f,totalRetried:y,totalDroppedBestEffort:x,totalPermanentFailures:b,totalExpiredOnRecovery:S,totalJournalWriteFailures:pe?.totalWriteFailures??0,journalDegraded:pe?.degraded??!1,paused:k,pushLatency:lde(v)}},close:X=>(O===void 0&&(O=Ke(X??ade)),O),journalSettled:()=>E===void 0?Promise.resolve():E.settled(),rekeyJournal:X=>{X!==o&&(o=X,e.persistDir!==void 0&&E?.rekey(ac(e.persistDir,X)))}};return Ee(),Dt}function cde(e,n,t,r,o){if(e?.coalesce===void 0)return t;try{return e.coalesce(n.data,t)}catch(i){return o("outbox_coalesce_failed",{threadKey:r,entrySeq:n.entrySeq,kind:n.kind,error:Bp(i)}),t}}function ty(e,n){return`${e}\0${n}`}function lde(e){if(e.length===0)return;let n=[...e].sort((t,r)=>t-r);return{p50Ms:ej(n,.5),p95Ms:ej(n,.95),maxMs:n[n.length-1]??0,ackedInWindow:n.length}}function ej(e,n){let t=Math.max(1,Math.ceil(n*e.length));return e[t-1]??0}function pde(e){return new Promise(n=>{setTimeout(n,e)})}function nj(e){return e instanceof Error?e:new Error(String(e))}function Bp(e){return e instanceof Error?e.message:String(e)}var AS,sde,ade,dde,ude,YL,$S=F(()=>{"use strict";MS();AS=[500,1e3,2500,5e3,1e4,3e4],sde=1440*60*1e3,ade=3e4,dde=1e3,ude=1e3,YL=256});function rj(e){let n=e.now??(()=>Date.now()),t=e.intervalMs??fde,r=e.turnStalledThresholdMs??mde,o=gde,i=new Set,s=new Set,a=!1,d=()=>{if(a)return;let l,p,m;try{l=e.outboxMetrics(),p=e.loopMetrics(),m=e.turnWaitStates?.()??[]}catch(x){e.log("pipeline.stats_sample_failed",{thread_key:e.threadKey,message:x instanceof Error?x.message:String(x)});return}let f=n();if(u(yde(p),l,m,f),!_de(l,p,o))return;let y=bde(p.activeTurns);e.log("pipeline.stats",{thread_key:e.threadKey,outbox_depth:l.depth,oldest_entry_age_ms:l.oldestEntryAgeMs??null,total_enqueued:l.totalEnqueued,total_acked:l.totalAcked,total_retried:l.totalRetried,total_dropped_best_effort:l.totalDroppedBestEffort,total_permanent_failures:l.totalPermanentFailures,total_expired_on_recovery:l.totalExpiredOnRecovery,total_journal_write_failures:l.totalJournalWriteFailures,journal_degraded:l.journalDegraded,push_latency_p50_ms:l.pushLatency?.p50Ms??null,push_latency_p95_ms:l.pushLatency?.p95Ms??null,push_latency_max_ms:l.pushLatency?.maxMs??null,push_latency_window_acked:l.pushLatency?.ackedInWindow??0,paused:l.paused,loop_queue_depth:p.queueDepth,loop_phase:p.phase,active_turn_count:p.activeTurns.length,buffered_turn_count:p.bufferedTurns.length,active_turn_id:y?.turnId??null,active_turn_source_seq:y?.sourceSeq??null,active_turn_age_ms:y===void 0?null:Math.max(0,f-y.startedAtMs)}),o={totalEnqueued:l.totalEnqueued,totalAcked:l.totalAcked,totalRetried:l.totalRetried,totalDroppedBestEffort:l.totalDroppedBestEffort,totalPermanentFailures:l.totalPermanentFailures,totalExpiredOnRecovery:l.totalExpiredOnRecovery,totalJournalWriteFailures:l.totalJournalWriteFailures,journalDegraded:l.journalDegraded}},u=(l,p,m,f)=>{let y=new Set(l.map(x=>x.turnId));for(let x of[...i])y.has(x)||i.delete(x);for(let x of[...s])y.has(x)||s.delete(x);for(let x of l){let b=Math.max(0,f-x.sinceMs),S=Math.max(x.sinceMs,x.lastActivityAtMs??x.sinceMs),v=Math.max(0,f-S),w=[...new Set(m.filter(P=>P.turnId===x.turnId).map(P=>P.kind))].sort();if(w.length===0)s.delete(x.turnId);else{v>=r&&!s.has(x.turnId)&&(s.add(x.turnId),e.log("pipeline.turn_waiting_on_user",{thread_key:e.threadKey,turn_id:x.turnId,source_seq:x.sourceSeq??null,buffered:x.buffered,turn_age_ms:b,quiet_ms:v,last_activity_kind:x.lastActivityKind??null,last_activity_age_ms:x.lastActivityAtMs===void 0?null:Math.max(0,f-x.lastActivityAtMs),threshold_ms:r,wait_kinds:w,open_item_count:x.openItems.length,open_item_kinds:[...new Set(x.openItems.map(P=>P.kind))].sort()}));continue}let k=x.openItems.length>0?r*hde:r;if(v<k||i.has(x.turnId))continue;let R=xde(x.openItems);i.add(x.turnId),e.log("pipeline.turn_stalled",{level:"warn",thread_key:e.threadKey,turn_id:x.turnId,source_seq:x.sourceSeq??null,buffered:x.buffered,turn_age_ms:b,quiet_ms:v,last_activity_kind:x.lastActivityKind??null,last_activity_age_ms:x.lastActivityAtMs===void 0?null:Math.max(0,f-x.lastActivityAtMs),threshold_ms:r,effective_threshold_ms:k,open_item_count:x.openItems.length,open_item_kinds:[...new Set(x.openItems.map(P=>P.kind))].sort(),open_item_oldest_age_ms:R===void 0?null:Math.max(0,f-R),outbox_depth:p.depth,oldest_entry_age_ms:p.oldestEntryAgeMs??null,paused:p.paused})}},c=t>0?setInterval(d,t):void 0;return c?.unref?.(),{sample:d,stop:()=>{a=!0,c!==void 0&&clearInterval(c)}}}function yde(e){return[...e.activeTurns.map(n=>({turnId:n.turnId,sourceSeq:n.sourceSeq,sinceMs:n.startedAtMs,buffered:!1,lastActivityAtMs:n.lastActivityAtMs,lastActivityKind:n.lastActivityKind,openItems:n.openItems??[]})),...e.bufferedTurns.map(n=>({turnId:n.turnId,sourceSeq:void 0,sinceMs:n.firstBufferedAtMs,buffered:!0,lastActivityAtMs:n.lastActivityAtMs,lastActivityKind:n.lastActivityKind,openItems:n.openItems??[]}))]}function xde(e){let n;for(let t of e)(n===void 0||t.startedAtMs<n)&&(n=t.startedAtMs);return n}function _de(e,n,t){return e.depth>0||e.paused||n.queueDepth>0||n.activeTurns.length>0||n.bufferedTurns.length>0||e.totalEnqueued!==t.totalEnqueued||e.totalAcked!==t.totalAcked||e.totalRetried!==t.totalRetried||e.totalDroppedBestEffort!==t.totalDroppedBestEffort||e.totalPermanentFailures!==t.totalPermanentFailures||e.totalExpiredOnRecovery!==t.totalExpiredOnRecovery||e.totalJournalWriteFailures!==t.totalJournalWriteFailures||e.journalDegraded!==t.journalDegraded}function bde(e){let n;for(let t of e)(n===void 0||t.startedAtMs<n.startedAtMs)&&(n=t);return n}var fde,mde,hde,gde,oj=F(()=>{"use strict";fde=3e4,mde=10*6e4,hde=2,gde={totalEnqueued:0,totalAcked:0,totalRetried:0,totalDroppedBestEffort:0,totalPermanentFailures:0,totalExpiredOnRecovery:0,totalJournalWriteFailures:0,journalDegraded:!1}});import{createHash as ij}from"node:crypto";function od(e=""){return e===""?{parts:[],cached:"",joinedCount:0}:{parts:[e],cached:e,joinedCount:1}}function sj(e,n){return n!==""&&e.parts.push(n),e}function OS(e){if(e.joinedCount===e.parts.length)return e.cached;let n=e.cached;for(let t=e.joinedCount;t<e.parts.length;t+=1)n+=e.parts[t];return e.cached=n,e.joinedCount=e.parts.length,n}function ry(e){return h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)}function aj(e,n){let t=ry(n);switch(e){case"item/agentMessage/delta":{let r=fL(n);return r===void 0?void 0:{streamKind:"assistant",itemId:t,text:r.delta}}case"item/reasoning/textDelta":{let r=gL(n);return r===void 0?void 0:{streamKind:"reasoning",itemId:t,text:r.delta}}case"item/commandExecution/outputDelta":case"command/exec/outputDelta":{let r=xL(n);return r===void 0?void 0:{streamKind:"commandOutput",itemId:t,processId:r.processId,command:r.command,stream:r.stream,text:r.delta}}case"item/fileChange/outputDelta":{let r=bL(n);return r===void 0?void 0:{streamKind:"fileChange",itemId:t,patchText:r.patchText}}case"item/commandExecution/terminalInteraction":{let r=vL(n);return r===void 0?void 0:{streamKind:"terminalInput",itemId:t,processId:r.processId,inputText:r.inputText}}case"item/started":{let r=vS(n);return r===void 0?void 0:{streamKind:"webSearch",itemId:t,queries:r.queries}}default:return}}function dj(e){switch(e){case"assistant":return{streamKind:"assistant",text:od()};case"reasoning":return{streamKind:"reasoning",text:od()};case"commandOutput":return{streamKind:"commandOutput",command:"",processId:void 0,chunks:[]};case"fileChange":return{streamKind:"fileChange",patchText:od(),status:"started"};case"terminalInput":return{streamKind:"terminalInput",processId:void 0,inputText:""};case"webSearch":return{streamKind:"webSearch",queries:[]};case"agentStatus":return{streamKind:"agentStatus",title:"Agent status",severity:"info"};case"agentTaskUpdate":return{streamKind:"agentTaskUpdate",title:"Agent task",state:"unknown"}}}function uj(e,n){if(e.streamKind!==n.streamKind)return e;switch(n.streamKind){case"assistant":case"reasoning":return e.streamKind===n.streamKind&&sj(e.text,n.text),e;case"commandOutput":return e.streamKind==="commandOutput"?{streamKind:"commandOutput",command:n.command!==void 0&&n.command.trim()!==""?n.command:e.command,processId:n.processId??e.processId,chunks:[...e.chunks,{stream:n.stream,text:n.text}]}:e;case"fileChange":return e.streamKind==="fileChange"&&sj(e.patchText,n.patchText),e;case"terminalInput":return e.streamKind==="terminalInput"?{streamKind:"terminalInput",processId:n.processId??e.processId,inputText:n.inputText}:e;case"webSearch":return e.streamKind==="webSearch"?{streamKind:"webSearch",queries:wde(e.queries,n.queries)}:e}}function wde(e,n){return n.reduce((t,r)=>t.includes(r)?t:[...t,r],[...e])}function vde(e){return e.map(n=>n.text).join("")}function cj(e){let n=vS(e);if(n!==void 0)return{streamKind:"webSearch",itemId:ry(e),content:{streamKind:"webSearch",queries:n.queries}};let t=A(e.item)??e,r=Gg(e);if(r!==void 0)return{streamKind:"fileChange",itemId:h(t.call_id)??h(t.id),content:{streamKind:"fileChange",patchText:od(r.patchText),status:"completed"}};let o=lj(t);if(o===void 0)return;let i=rc(t,0)[0];if(i===void 0)return;let s=h(t.id);switch(o){case"assistant":return{streamKind:o,itemId:s,content:{streamKind:"assistant",text:od(h(i.structured.content)??i.body)}};case"reasoning":return{streamKind:o,itemId:s,content:{streamKind:"reasoning",text:od(h(i.structured.content)??i.body)}};case"commandOutput":return{streamKind:o,itemId:s,content:{streamKind:"commandOutput",command:h(i.structured.command)??"",processId:h(i.structured.process_id),chunks:[{stream:"",text:typeof i.structured.output=="string"?i.structured.output:""}]}};case"terminalInput":return{streamKind:o,itemId:s,content:{streamKind:"terminalInput",processId:h(i.structured.process_id),inputText:h(i.structured.input_text)??i.body}};case"fileChange":return{streamKind:o,itemId:s,content:{streamKind:"fileChange",patchText:od(h(i.structured.patch_text)??i.body),status:"completed"}};case"webSearch":return;case"agentStatus":return{streamKind:o,itemId:s,content:{streamKind:"agentStatus",title:h(i.structured.title)??i.body,body:h(i.structured.body),severity:bS(i.structured.severity),provider:h(i.structured.agent_provider),occurredAtMs:Y(i.structured.occurred_at_ms),rawProviderMetadata:A(i.structured.raw_provider_metadata)}};case"agentTaskUpdate":return{streamKind:o,itemId:s,content:{streamKind:"agentTaskUpdate",title:h(i.structured.title)??i.body,body:h(i.structured.body),state:wS(i.structured.state),progressLabel:h(i.structured.progress_label),provider:h(i.structured.agent_provider),occurredAtMs:Y(i.structured.occurred_at_ms),rawProviderMetadata:A(i.structured.raw_provider_metadata)}}}}function dc(e,n,t){switch(n.streamKind){case"assistant":{let r=OS(n.text);return{body:r,structured:hL(e,r,t)}}case"reasoning":{let r=OS(n.text);return{body:r,structured:yL(e,r,t)}}case"commandOutput":{let r=n.chunks[n.chunks.length-1],o=Hg(e,{command:n.command,output:vde(n.chunks),processId:n.processId,stream:r?.stream??""},t);return{body:Sde(o),structured:o}}case"fileChange":{let r=OS(n.patchText);return{body:r,structured:wL(e,r,t,t==="completed"?"completed":n.status)}}case"terminalInput":return{body:n.inputText,structured:{kind:"codex_terminal_input",item_id:e,transcript_unit_id:`codex_terminal_input:${e}`,stream_state:t,process_id:n.processId??"",input_text:n.inputText}};case"webSearch":return{body:SS(n.queries),structured:SL(e,n.queries,t)};case"agentStatus":{let r=yS(e,{...n,body:tc(n.body)},t);return{body:jp(n.title,tc(n.body)),structured:r}}case"agentTaskUpdate":{let r=tc(n.body),o=xS(e,{...n,body:r},t);return{body:jp(n.title,r??n.progressLabel),structured:o}}}}function Sde(e){let n=h(e.command)??"",t=typeof e.output=="string"?e.output:"";return[`$ ${n}`,t].filter(r=>r.trim()!=="").join(`
|
|
559
|
+
`}function ide(e){try{let n=JSON.parse(e);return Z(n)?n:void 0}catch{return}}function ES(e){return typeof e=="string"?e:void 0}function XL(e,n){return typeof e=="object"&&e!==null&&e.code===n}function DS(e){return e instanceof Error?e.message:String(e)}var nde,tde,MS=F(()=>{"use strict";$n();Hn();nde=256,tde=3});function tj(e){let{builders:n,log:t,onPermanentFailure:r}=e,o=e.threadKey,i=e.now??(()=>Date.now()),s=e.retryDelaysMs??[...AS],a=[],d=0,u=new Map,c=new Map,l=[],p=1,m=0,f=0,y=0,x=0,b=0,S=0,v=[],w=0,k=!1,R=!0,P=!1,O,E,j=Math.max(1,Math.floor(e.maxInFlightPushes??1)),z=0,M=[],J=Promise.resolve(),K=()=>a[d],G=()=>a.length-d,W=()=>({totalEnqueued:m,totalAcked:f,totalDroppedBestEffort:x,totalPermanentFailures:b,totalExpiredOnRecovery:S,lastEntrySeq:p-1});if(e.persistDir!==void 0){let X=ac(e.persistDir,o),pe=ny(X,t),$e=e.journalRecoveryMaxAgeMs??sde,_n=i(),Ge=[];for(let Je of pe.pendingEntries){if(_n-Je.enqueuedAtMs>$e){Ge.push(Je);continue}let In={entry:Je,state:"queued"};a.push(In),Je.coalesceKey!==void 0&&u.set(ty(Je.kind,Je.coalesceKey),In)}if(c=pe.kv,m=pe.counters.totalEnqueued,f=pe.counters.totalAcked,x=pe.counters.totalDroppedBestEffort,b=pe.counters.totalPermanentFailures,S=pe.counters.totalExpiredOnRecovery+Ge.length,p=pe.counters.lastEntrySeq+1,E=QL({path:X,log:t,compactionThreshold:e.journalCompactionThreshold,snapshot:()=>({pendingEntries:a.slice(d).map(Je=>Je.entry),kv:c,counters:W()})}),Ge.length>0){for(let In of Ge)E.appendExpired(In.entrySeq);let Je=Ge.map(In=>Math.max(0,_n-In.enqueuedAtMs));t("outbox_recovery_expired",{level:"warn",threadKey:o,expiredEntries:Ge.length,survivingEntries:G(),maxAgeMs:$e,oldestAgeMs:Math.max(...Je),newestAgeMs:Math.min(...Je),kinds:[...new Set(Ge.map(In=>In.kind))]})}G()>0&&t("outbox_recovered",{threadKey:o,pendingEntries:G(),nextEntrySeq:p})}let te={remember:(X,pe)=>{c.set(X,pe),E?.appendKv(X,pe)},recall:X=>c.get(X)},me=()=>{d+=1,d>=64&&d*2>=a.length&&(a=a.slice(d),d=0)},ge=()=>{let X=K();for(let pe=l.length-1;pe>=0;pe-=1){let $e=l[pe];$e!==void 0&&(X===void 0||X.entry.entrySeq>$e.upToSeq)&&(l.splice(pe,1),$e.timer!==void 0&&clearTimeout($e.timer),$e.resolve())}},ce=X=>{if(X.entry.coalesceKey===void 0)return;let pe=ty(X.entry.kind,X.entry.coalesceKey);u.get(pe)===X&&u.delete(pe)},Ie=(X,pe)=>{let $e=X.entry;switch(pe.kind){case"ack":{let _n=n[$e.kind];try{_n?.onReply?.($e.data,pe.reply,te)}catch(Ge){t("outbox_on_reply_failed",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,error:Bp(Ge)})}E?.appendAck($e.entrySeq);break}case"skip":{t("outbox_entry_skipped",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,reason:pe.reason}),E?.appendSkip($e.entrySeq,pe.reason);break}case"fail":{if($e.resolution==="must_ack"){E?.appendFail($e.entrySeq);try{r($e,pe.failure)}catch(_n){t("outbox_permanent_failure_callback_failed",{threadKey:o,entrySeq:$e.entrySeq,error:Bp(_n)})}}else E?.appendDrop($e.entrySeq);break}}ce(X),me(),ge()},Re=()=>{for(;;){let X=K();if(X===void 0||X.outcome===void 0)return;Ie(X,X.outcome)}},I=(X,pe)=>{let $e=X.entry;pe.kind==="fail"&&($e.resolution==="must_ack"?(b+=1,t("outbox_permanent_failure",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,attempts:$e.attempts,error:pe.failure.message})):(x+=1,t("outbox_dropped_best_effort",{threadKey:o,entrySeq:$e.entrySeq,kind:$e.kind,attempts:$e.attempts,error:pe.failure.message}))),X.outcome=pe,X.state="queued"},L=X=>{v.length<YL?v.push(X):v[w]=X,w=(w+1)%YL},U=X=>{X.retryTimer!==void 0&&(clearTimeout(X.retryTimer),X.retryTimer=void 0)},ie=()=>{if(z>0)return;let X=M;M=[];for(let pe of X)pe()},se=()=>{let X=K();return X!==void 0&&X.outcome===void 0&&X.state==="queued"&&X.retryTimer!==void 0},Q=(X,pe)=>{U(X),X.retryTimer=setTimeout(()=>{X.retryTimer=void 0,!(P||k||X.outcome!==void 0)&&ae()},pe),X.retryTimer?.unref?.()},_e=async X=>{let pe=X.entry,$e=J,_n=()=>{};J=new Promise(In=>{_n=In});let Ge=!1,Je=()=>{Ge||(Ge=!0,_n())};X.state="pushing",z+=1;try{if(await $e,P||k||X.outcome!==void 0){X.state="queued",Je();return}let In=n[pe.kind];if(In===void 0){Je(),I(X,{kind:"fail",failure:new Error(`no outbox builder registered for kind ${pe.kind}`)});return}let wt;try{wt=In.build(pe.data,te)}catch($r){Je(),I(X,{kind:"fail",failure:nj($r)});return}if("skip"in wt){Je(),I(X,{kind:"skip",reason:wt.reason});return}pe.attempts+=1,await Te(X,wt,Je)}finally{z-=1}},Te=async(X,pe,$e)=>{let _n=X.entry,Ge=i();try{let Je=await e.push(pe.event,pe.payload,pe.timeoutMs,$e);$e(),L(Math.max(0,i()-Ge)),f+=1,I(X,{kind:"ack",reply:Je})}catch(Je){$e(),X.state="queued";let In=nj(Je);if(e.isRetryBudgetExempt?.(In)===!0)_n.attempts-=1,y+=1,t("outbox_push_connection_wait",{threadKey:o,entrySeq:_n.entrySeq,kind:_n.kind,error:In.message}),!P&&!k&&Q(X,ude);else{let wt=s[_n.attempts-1];wt===void 0?I(X,{kind:"fail",failure:In}):(y+=1,t("outbox_push_retry",{threadKey:o,entrySeq:_n.entrySeq,kind:_n.kind,attempt:_n.attempts,delayMs:wt,error:In.message}),!P&&!k&&Q(X,wt))}}},ae=()=>{if(Re(),P||k){ie();return}if(se()){ie();return}for(let X=d;X<a.length&&z<j;X+=1){let pe=a[X];pe===void 0||pe.outcome!==void 0||pe.state==="pushing"||pe.retryTimer!==void 0||_e(pe).then(()=>ae(),$e=>{t("outbox_drain_loop_error",{threadKey:o,error:Bp($e)}),ae()})}ie()},Ee=()=>{k||P||K()!==void 0&&Promise.resolve().then(()=>{!P&&!k&&ae()})},dt=X=>{let pe=p-1,$e=K();return $e===void 0||$e.entry.entrySeq>pe?Promise.resolve():new Promise((_n,Ge)=>{let Je={upToSeq:pe,resolve:_n,reject:Ge,timer:void 0};X!==void 0&&(Je.timer=setTimeout(()=>{let In=l.indexOf(Je);In!==-1&&l.splice(In,1),Ge(new Error(`outbox flush for ${o} timed out after ${X}ms with ${G()} entries pending`))},X)),l.push(Je)})},Ke=async X=>{R=!1;try{await dt(X)}catch(pe){t("outbox_close_flush_timeout",{threadKey:o,depth:G(),error:Bp(pe)})}P=!0;for(let pe=d;pe<a.length;pe+=1)U(a[pe]);z>0&&await Promise.race([new Promise(pe=>{M.push(pe)}),pde(dde)]);for(let pe of l.splice(0))pe.timer!==void 0&&clearTimeout(pe.timer),pe.reject(new Error(`outbox for ${o} closed`));await E?.close()},Dt={enqueue:X=>{if(!R)throw new Error(`outbox for ${o} is closed`);if(m+=1,X.coalesceKey!==void 0){let Ge=ty(X.kind,X.coalesceKey),Je=u.get(Ge);if(Je!==void 0&&Je.state==="queued"&&Je.outcome===void 0)return Je.entry.data=cde(n[X.kind],Je.entry,X.data,o,t),E?.appendCoalesce(Je.entry.entrySeq,Je.entry.data),Je.entry.entrySeq}let pe=p;p+=1;let $e={entrySeq:pe,kind:X.kind,data:X.data,...X.coalesceKey===void 0?{}:{coalesceKey:X.coalesceKey},resolution:X.resolution,attempts:0,enqueuedAtMs:i()},_n={entry:$e,state:"queued"};return a.push(_n),X.coalesceKey!==void 0&&u.set(ty(X.kind,X.coalesceKey),_n),E?.appendEnqueue($e),Ee(),pe},flush:dt,pause:()=>{k=!0},resume:()=>{if(k){k=!1;for(let X=d;X<a.length;X+=1){let pe=a[X];pe!==void 0&&(pe.entry.attempts=0,U(pe))}Ee()}},metrics:()=>{let X=K(),pe=E?.status();return{depth:G(),oldestEntryAgeMs:X===void 0?void 0:Math.max(0,i()-X.entry.enqueuedAtMs),totalEnqueued:m,totalAcked:f,totalRetried:y,totalDroppedBestEffort:x,totalPermanentFailures:b,totalExpiredOnRecovery:S,totalJournalWriteFailures:pe?.totalWriteFailures??0,journalDegraded:pe?.degraded??!1,paused:k,pushLatency:lde(v)}},close:X=>(O===void 0&&(O=Ke(X??ade)),O),journalSettled:()=>E===void 0?Promise.resolve():E.settled(),rekeyJournal:X=>{X!==o&&(o=X,e.persistDir!==void 0&&E?.rekey(ac(e.persistDir,X)))}};return Ee(),Dt}function cde(e,n,t,r,o){if(e?.coalesce===void 0)return t;try{return e.coalesce(n.data,t)}catch(i){return o("outbox_coalesce_failed",{threadKey:r,entrySeq:n.entrySeq,kind:n.kind,error:Bp(i)}),t}}function ty(e,n){return`${e}\0${n}`}function lde(e){if(e.length===0)return;let n=[...e].sort((t,r)=>t-r);return{p50Ms:ej(n,.5),p95Ms:ej(n,.95),maxMs:n[n.length-1]??0,ackedInWindow:n.length}}function ej(e,n){let t=Math.max(1,Math.ceil(n*e.length));return e[t-1]??0}function pde(e){return new Promise(n=>{setTimeout(n,e)})}function nj(e){return e instanceof Error?e:new Error(String(e))}function Bp(e){return e instanceof Error?e.message:String(e)}var AS,sde,ade,dde,ude,YL,$S=F(()=>{"use strict";MS();AS=[500,1e3,2500,5e3,1e4,3e4],sde=1440*60*1e3,ade=3e4,dde=1e3,ude=1e3,YL=256});function rj(e){let n=e.now??(()=>Date.now()),t=e.intervalMs??fde,r=e.turnStalledThresholdMs??mde,o=gde,i=new Set,s=new Set,a=!1,d=()=>{if(a)return;let l,p,m;try{l=e.outboxMetrics(),p=e.loopMetrics(),m=e.turnWaitStates?.()??[]}catch(x){e.log("pipeline.stats_sample_failed",{thread_key:e.threadKey,message:x instanceof Error?x.message:String(x)});return}let f=n();if(u(yde(p),l,m,f),!_de(l,p,o))return;let y=bde(p.activeTurns);e.log("pipeline.stats",{thread_key:e.threadKey,outbox_depth:l.depth,oldest_entry_age_ms:l.oldestEntryAgeMs??null,total_enqueued:l.totalEnqueued,total_acked:l.totalAcked,total_retried:l.totalRetried,total_dropped_best_effort:l.totalDroppedBestEffort,total_permanent_failures:l.totalPermanentFailures,total_expired_on_recovery:l.totalExpiredOnRecovery,total_journal_write_failures:l.totalJournalWriteFailures,journal_degraded:l.journalDegraded,push_latency_p50_ms:l.pushLatency?.p50Ms??null,push_latency_p95_ms:l.pushLatency?.p95Ms??null,push_latency_max_ms:l.pushLatency?.maxMs??null,push_latency_window_acked:l.pushLatency?.ackedInWindow??0,paused:l.paused,loop_queue_depth:p.queueDepth,loop_phase:p.phase,active_turn_count:p.activeTurns.length,buffered_turn_count:p.bufferedTurns.length,active_turn_id:y?.turnId??null,active_turn_source_seq:y?.sourceSeq??null,active_turn_age_ms:y===void 0?null:Math.max(0,f-y.startedAtMs)}),o={totalEnqueued:l.totalEnqueued,totalAcked:l.totalAcked,totalRetried:l.totalRetried,totalDroppedBestEffort:l.totalDroppedBestEffort,totalPermanentFailures:l.totalPermanentFailures,totalExpiredOnRecovery:l.totalExpiredOnRecovery,totalJournalWriteFailures:l.totalJournalWriteFailures,journalDegraded:l.journalDegraded}},u=(l,p,m,f)=>{let y=new Set(l.map(x=>x.turnId));for(let x of[...i])y.has(x)||i.delete(x);for(let x of[...s])y.has(x)||s.delete(x);for(let x of l){let b=Math.max(0,f-x.sinceMs),S=Math.max(x.sinceMs,x.lastActivityAtMs??x.sinceMs),v=Math.max(0,f-S),w=[...new Set(m.filter(P=>P.turnId===x.turnId).map(P=>P.kind))].sort();if(w.length===0)s.delete(x.turnId);else{v>=r&&!s.has(x.turnId)&&(s.add(x.turnId),e.log("pipeline.turn_waiting_on_user",{thread_key:e.threadKey,turn_id:x.turnId,source_seq:x.sourceSeq??null,buffered:x.buffered,turn_age_ms:b,quiet_ms:v,last_activity_kind:x.lastActivityKind??null,last_activity_age_ms:x.lastActivityAtMs===void 0?null:Math.max(0,f-x.lastActivityAtMs),threshold_ms:r,wait_kinds:w,open_item_count:x.openItems.length,open_item_kinds:[...new Set(x.openItems.map(P=>P.kind))].sort()}));continue}let k=x.openItems.length>0?r*hde:r;if(v<k||i.has(x.turnId))continue;let R=xde(x.openItems);i.add(x.turnId),e.log("pipeline.turn_stalled",{level:"warn",thread_key:e.threadKey,turn_id:x.turnId,source_seq:x.sourceSeq??null,buffered:x.buffered,turn_age_ms:b,quiet_ms:v,last_activity_kind:x.lastActivityKind??null,last_activity_age_ms:x.lastActivityAtMs===void 0?null:Math.max(0,f-x.lastActivityAtMs),threshold_ms:r,effective_threshold_ms:k,open_item_count:x.openItems.length,open_item_kinds:[...new Set(x.openItems.map(P=>P.kind))].sort(),open_item_oldest_age_ms:R===void 0?null:Math.max(0,f-R),outbox_depth:p.depth,oldest_entry_age_ms:p.oldestEntryAgeMs??null,paused:p.paused})}},c=t>0?setInterval(d,t):void 0;return c?.unref?.(),{sample:d,stop:()=>{a=!0,c!==void 0&&clearInterval(c)}}}function yde(e){return[...e.activeTurns.map(n=>({turnId:n.turnId,sourceSeq:n.sourceSeq,sinceMs:n.startedAtMs,buffered:!1,lastActivityAtMs:n.lastActivityAtMs,lastActivityKind:n.lastActivityKind,openItems:n.openItems??[]})),...e.bufferedTurns.map(n=>({turnId:n.turnId,sourceSeq:void 0,sinceMs:n.firstBufferedAtMs,buffered:!0,lastActivityAtMs:n.lastActivityAtMs,lastActivityKind:n.lastActivityKind,openItems:n.openItems??[]}))]}function xde(e){let n;for(let t of e)(n===void 0||t.startedAtMs<n)&&(n=t.startedAtMs);return n}function _de(e,n,t){return e.depth>0||e.paused||n.queueDepth>0||n.activeTurns.length>0||n.bufferedTurns.length>0||e.totalEnqueued!==t.totalEnqueued||e.totalAcked!==t.totalAcked||e.totalRetried!==t.totalRetried||e.totalDroppedBestEffort!==t.totalDroppedBestEffort||e.totalPermanentFailures!==t.totalPermanentFailures||e.totalExpiredOnRecovery!==t.totalExpiredOnRecovery||e.totalJournalWriteFailures!==t.totalJournalWriteFailures||e.journalDegraded!==t.journalDegraded}function bde(e){let n;for(let t of e)(n===void 0||t.startedAtMs<n.startedAtMs)&&(n=t);return n}var fde,mde,hde,gde,oj=F(()=>{"use strict";fde=3e4,mde=10*6e4,hde=2,gde={totalEnqueued:0,totalAcked:0,totalRetried:0,totalDroppedBestEffort:0,totalPermanentFailures:0,totalExpiredOnRecovery:0,totalJournalWriteFailures:0,journalDegraded:!1}});import{createHash as ij}from"node:crypto";function od(e=""){return e===""?{parts:[],cached:"",joinedCount:0}:{parts:[e],cached:e,joinedCount:1}}function sj(e,n){return n!==""&&e.parts.push(n),e}function OS(e){if(e.joinedCount===e.parts.length)return e.cached;let n=e.cached;for(let t=e.joinedCount;t<e.parts.length;t+=1)n+=e.parts[t];return e.cached=n,e.joinedCount=e.parts.length,n}function ry(e){return h(e.itemId)??h(e.item_id)??h(A(e.item)?.id)}function aj(e,n){let t=ry(n);switch(e){case"turn/plan/updated":{let r=h(n.turnId),o=qe(n.plan),i=n.explanation,s=i==null||typeof i=="string"&&i.trim()===""?null:h(i);if(r===void 0||o===void 0||s===void 0)return;let a=o.reduce((d,u)=>{if(d===void 0)return;let c=A(u),l=h(c?.step)?.trim(),p=wde[h(c?.status)??""];if(!(l===void 0||l===""||p===void 0))return[...d,{title:l,status:p}]},[]);return a===void 0?void 0:{streamKind:"agentPlan",itemId:`plan:${r}`,provider:"codex",providerTurnId:r,explanation:s,steps:a}}case"item/agentMessage/delta":{let r=fL(n);return r===void 0?void 0:{streamKind:"assistant",itemId:t,text:r.delta}}case"item/reasoning/textDelta":{let r=gL(n);return r===void 0?void 0:{streamKind:"reasoning",itemId:t,text:r.delta}}case"item/commandExecution/outputDelta":case"command/exec/outputDelta":{let r=xL(n);return r===void 0?void 0:{streamKind:"commandOutput",itemId:t,processId:r.processId,command:r.command,stream:r.stream,text:r.delta}}case"item/fileChange/outputDelta":{let r=bL(n);return r===void 0?void 0:{streamKind:"fileChange",itemId:t,patchText:r.patchText}}case"item/commandExecution/terminalInteraction":{let r=vL(n);return r===void 0?void 0:{streamKind:"terminalInput",itemId:t,processId:r.processId,inputText:r.inputText}}case"item/started":{let r=vS(n);return r===void 0?void 0:{streamKind:"webSearch",itemId:t,queries:r.queries}}default:return}}function dj(e){switch(e){case"assistant":return{streamKind:"assistant",text:od()};case"reasoning":return{streamKind:"reasoning",text:od()};case"agentPlan":return{streamKind:"agentPlan",provider:"codex",providerTurnId:"",explanation:null,steps:[]};case"commandOutput":return{streamKind:"commandOutput",command:"",processId:void 0,chunks:[]};case"fileChange":return{streamKind:"fileChange",patchText:od(),status:"started"};case"terminalInput":return{streamKind:"terminalInput",processId:void 0,inputText:""};case"webSearch":return{streamKind:"webSearch",queries:[]};case"agentStatus":return{streamKind:"agentStatus",title:"Agent status",severity:"info"};case"agentTaskUpdate":return{streamKind:"agentTaskUpdate",title:"Agent task",state:"unknown"}}}function uj(e,n){if(e.streamKind!==n.streamKind)return e;switch(n.streamKind){case"assistant":case"reasoning":return e.streamKind===n.streamKind&&sj(e.text,n.text),e;case"agentPlan":return e.streamKind==="agentPlan"?{streamKind:"agentPlan",provider:n.provider,providerTurnId:n.providerTurnId,explanation:n.explanation,steps:n.steps}:e;case"commandOutput":return e.streamKind==="commandOutput"?{streamKind:"commandOutput",command:n.command!==void 0&&n.command.trim()!==""?n.command:e.command,processId:n.processId??e.processId,chunks:[...e.chunks,{stream:n.stream,text:n.text}]}:e;case"fileChange":return e.streamKind==="fileChange"&&sj(e.patchText,n.patchText),e;case"terminalInput":return e.streamKind==="terminalInput"?{streamKind:"terminalInput",processId:n.processId??e.processId,inputText:n.inputText}:e;case"webSearch":return e.streamKind==="webSearch"?{streamKind:"webSearch",queries:vde(e.queries,n.queries)}:e}}function vde(e,n){return n.reduce((t,r)=>t.includes(r)?t:[...t,r],[...e])}function Sde(e){return e.map(n=>n.text).join("")}function cj(e){let n=vS(e);if(n!==void 0)return{streamKind:"webSearch",itemId:ry(e),content:{streamKind:"webSearch",queries:n.queries}};let t=A(e.item)??e,r=Gg(e);if(r!==void 0)return{streamKind:"fileChange",itemId:h(t.call_id)??h(t.id),content:{streamKind:"fileChange",patchText:od(r.patchText),status:"completed"}};let o=lj(t);if(o===void 0)return;let i=rc(t,0)[0];if(i===void 0)return;let s=h(t.id);switch(o){case"assistant":return{streamKind:o,itemId:s,content:{streamKind:"assistant",text:od(h(i.structured.content)??i.body)}};case"reasoning":return{streamKind:o,itemId:s,content:{streamKind:"reasoning",text:od(h(i.structured.content)??i.body)}};case"agentPlan":return;case"commandOutput":return{streamKind:o,itemId:s,content:{streamKind:"commandOutput",command:h(i.structured.command)??"",processId:h(i.structured.process_id),chunks:[{stream:"",text:typeof i.structured.output=="string"?i.structured.output:""}]}};case"terminalInput":return{streamKind:o,itemId:s,content:{streamKind:"terminalInput",processId:h(i.structured.process_id),inputText:h(i.structured.input_text)??i.body}};case"fileChange":return{streamKind:o,itemId:s,content:{streamKind:"fileChange",patchText:od(h(i.structured.patch_text)??i.body),status:"completed"}};case"webSearch":return;case"agentStatus":return{streamKind:o,itemId:s,content:{streamKind:"agentStatus",title:h(i.structured.title)??i.body,body:h(i.structured.body),severity:bS(i.structured.severity),provider:h(i.structured.agent_provider),occurredAtMs:Y(i.structured.occurred_at_ms),rawProviderMetadata:A(i.structured.raw_provider_metadata)}};case"agentTaskUpdate":return{streamKind:o,itemId:s,content:{streamKind:"agentTaskUpdate",title:h(i.structured.title)??i.body,body:h(i.structured.body),state:wS(i.structured.state),progressLabel:h(i.structured.progress_label),provider:h(i.structured.agent_provider),occurredAtMs:Y(i.structured.occurred_at_ms),rawProviderMetadata:A(i.structured.raw_provider_metadata)}}}}function dc(e,n,t){switch(n.streamKind){case"assistant":{let r=OS(n.text);return{body:r,structured:hL(e,r,t)}}case"reasoning":{let r=OS(n.text);return{body:r,structured:yL(e,r,t)}}case"agentPlan":{let r=n.explanation?.trim()??"",o=n.steps.map(s=>s.title).join(`
|
|
560
|
+
`),i=[r,o].filter(s=>s!=="").join(`
|
|
560
561
|
|
|
561
|
-
`)}function lj(e){switch(h(e.type)){case"reasoning":return"reasoning";case"agentMessage":return"assistant";case"message":return h(e.role)==="assistant"?"assistant":void 0;case"commandExecution":return"commandOutput";case"terminalInput":return"terminalInput";case"fileChange":case"file_change":return"fileChange";case"web_search_call":case"webSearchCall":case"webSearch":return"webSearch";case"agentStatus":return"agentStatus";case"agentTaskUpdate":return"agentTaskUpdate";default:return}}function pj(e){return e.flatMap((n,t)=>{if(!Z(n))return[];let r=lj(n);return r===void 0||r==="webSearch"?[]:rc(n,t).filter(o=>o.body.trim()!=="").map(o=>({snapshotIndex:t,itemId:h(n.id),streamKind:r,body:o.body,structured:o.structured}))})}function LS(e,n){let t=h(e.kind)??"codex_output";return{...e,item_id:n,transcript_unit_id:`${t}:${n}`}}function jS(e,n,t,r){if(t==="webSearch")return`local-codex-search-${ij("sha256").update(`${e}:${n}:web-search`).digest("hex").slice(0,32)}`;let o={assistant:"",reasoning:"reasoning:",commandOutput:"command:",fileChange:"file-change:",terminalInput:"terminal:",agentStatus:"agent-status:",agentTaskUpdate:"agent-task:"};return`local-codex-stream-${ij("sha256").update(`${e}:${n}:${o[t]}${r}`).digest("hex").slice(0,32)}`}function Jp(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}var FS=F(()=>{"use strict";zp();Hn();$n()});function bj(e){return e!==void 0&&kde.has(e)}function Rde(e){if(e===void 0)return;let n=h(e.type);if(n!=="mcpToolCall"&&n!=="dynamicToolCall"&&n!=="collabAgentToolCall"||h(e.status)!=="completed"||e.error!==void 0&&e.error!==null||e.success===!1)return;let t=h(e.tool)??"";return(t.split("__").pop()??t)===Tde?"reply":"action"}function wj(e,n){let t=Rde(n);t==="reply"?e.agentReplyToolCallSeen=!0:t==="action"&&(e.agentActionToolCallSeen=!0)}function Dde(e){return`The model appears stuck in a loop - stopped after ${e} reasoning steps with no output or tool call (retry to try again).`}function Mde(e){return e!=="reasoning"}function Ade(e){return e!==void 0&&e.startsWith(vj)}function $de(e){for(let n of e){let t=Sj(A(n));if(t!==void 0)return t}}function Sj(e){if(e===void 0)return;let n=h(e.codex_protocol_failure_reason)??h(e.protocolFailureReason);if(n!==void 0)return n;let t=h(e.type);if(t!=="function_call_output"&&t!=="custom_tool_call_output")return;let r=h(e.output)??h(e.result)??h(e.text)??h(e.content),o=Ode(r);return o===void 0?void 0:`${vj}: ${o}`}function Ode(e){let n="unsupported call:";if(e===void 0)return;let t=e.trim();if(!t.toLowerCase().startsWith(n))return;let r=t.slice(n.length).trim();return r===""?"unknown":r}function kj(){return{phase:"running",turns:new Map,terminalTurnIds:new Set,bufferedTurns:new Map,consecutiveEmptyTurns:0,lastEmptyTurnCause:void 0,lastUpstreamErrorSummary:void 0,consecutiveIsolatedRejections:0,costCap402Seen:!1}}function Cj(e,n,t){let r=[];return e.phase==="running"&&nue(e,t,r),Tj(e,n,t,r),r}function Tj(e,n,t,r){if(n.source==="lifecycle"){Nde(e,n.kind,n.reason,t,r);return}if(e.phase==="dead"){r.push(yn("pipeline.loop.event_after_death",{source:n.source}));return}if(e.phase==="closing"){r.push(yn("pipeline.loop.event_after_close",{source:n.source}));return}if(n.source==="snapshot"){let o=e.bufferedTurns.get(n.turnId);if(o!==void 0){o.push(n);return}Yde(e,n.turnId,n.snapshot,t,r);return}qde(e,n,t,r)}function zde(e){return Fde.has(e)}function qde(e,n,t,r){let o=n.notification.method,i=n.notification.params??{};if(o===Vp)return;if(o===lc){Zde(e,i,t,r);return}if(!jde.has(o))return;let a=Jp(i)??ay(e);if(a===void 0){r.push(yn("pipeline.loop.notification_without_turn",{method:o}));return}if(e.terminalTurnIds.has(a)){r.push(yn("pipeline.loop.notification_for_terminal_turn",{method:o,turn_id:a}));return}let d=e.turns.get(a);if(d===void 0){let l=t.sourceSeqForTurn(a);if(l===void 0){eue(e,a,n,r);return}d=Ude(e,a,l)}if(d.notificationCount+=1,zde(o)&&(d.modelInteractionSeen=!0),o==="turn/started")return;if(o==="turn/completed"){Bde(d,r);return}let u=Lde.get(o);if(u!==void 0){let l=Gde(o,i,d,{costCap402Seen:e.costCap402Seen,midStreamResumeAttemptAtMs:t.midStreamResumeAttemptAtMsForSeq?.(d.sourceSeq)});l.autoResumeMidStreamStall?r.push(yn("codex.mid_stream_stall_auto_resume_flagged",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i)})):l.midStreamResumeRateLimitSuppressed?r.push(yn("codex.mid_stream_stall_resume_suppressed_rate_limit",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i)})):l.midStreamResumeAttemptBurnedAtMs!==void 0&&r.push(yn("codex.mid_stream_stall_second_stall_after_resume",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,resume_attempt_at_ms:l.midStreamResumeAttemptBurnedAtMs,reason:uc(i)})),l.autoRetryPreFirstByteStall?r.push(yn("codex.pre_first_byte_stall_auto_retry_flagged",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i),evidence_class:zS(d)})):l.costCapAutoRetrySuppressed&&r.push(yn("codex.pre_first_byte_stall_retry_suppressed_cost_cap",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i),flavor:i.midStreamResumableStall===!0?"mid_stream_resume":"pre_first_byte_retry"})),oy(e,d,u,uc(i),r,t,u,l);return}if(o==="error"){d.errorNotificationCount+=1;let l=Tue(i);l!==void 0&&(d.toolFatalSeen=!0,d.toolFatalDetail===void 0&&l!==""&&(d.toolFatalDetail=l),r.push(yn("codex.tool_fatal_captured",{turn_id:d.turnId,detail:l===""?null:l})));let p=mue(i);p!==void 0&&(d.upstreamRejectedSeen=!0,d.upstreamRejectedDetail===void 0&&p!==""&&(d.upstreamRejectedDetail=p),r.push(yn("codex.upstream_rejection_captured",{turn_id:d.turnId,detail:p===""?null:p})));let m=_ue(i);m!==void 0&&(d.providerOutageFlaggedSeen=!0,d.providerOutageDetail===void 0&&m!==""&&(d.providerOutageDetail=m),r.push(yn("codex.provider_outage_flagged_captured",{turn_id:d.turnId,detail:m===""?null:m})));let f=dy(i),y=rue(i);y!==void 0&&(d.edgeBlockEvidence=y),f!==void 0&&(d.lastUpstreamErrorHttpStatus===void 0||f>d.lastUpstreamErrorHttpStatus)&&(d.lastUpstreamErrorHttpStatus=f),f===402&&!e.costCap402Seen&&(e.costCap402Seen=!0,r.push(yn("codex.cost_cap_402_seen",{turn_id:d.turnId})));let x=tue(i),b=!1;if(x!==void 0)d.lastUpstreamErrorReason=x,r.push(yn("codex.upstream_error_captured",{turn_id:d.turnId,reason:x}));else{let v=Wp(i);v!==void 0&&(d.lastErrorDiagnosticText=v,b=!0,r.push(yn("codex.error_without_http_status_captured",{turn_id:d.turnId,diagnostic_text:v})))}l===void 0&&p===void 0&&m===void 0&&f===void 0&&x===void 0&&!b&&(d.unattributedErrorNotificationCount+=1);let S=pue(i);S!==void 0&&(d.lastUpstreamErrorSummary=S,e.lastUpstreamErrorSummary=S,r.push(yn("codex.upstream_turn_error_captured",{turn_id:d.turnId,upstream_error:S})));return}if(o==="item/completed"||o==="response_item"){Qde(d,i,t,r);return}let c=aj(o,i);if(c!==void 0){if(d.phase==="active"){if(Mde(c.streamKind))d.reasoningStepsWithoutProgress=0;else if(d.reasoningStepsWithoutProgress+=1,d.reasoningStepsWithoutProgress>gj){let l=Dde(d.reasoningStepsWithoutProgress);r.push(yn("codex.reasoning_loop_breaker_tripped",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reasoning_steps_without_progress:d.reasoningStepsWithoutProgress,max_reasoning_steps_without_progress:gj})),oy(e,d,"failed",l,r,t,"interrupted");return}}Dj(d,c,t,r)}}function Nde(e,n,t,r,o){if(n==="codexDied"){if(e.phase==="dead")return;for(let i of[...e.turns.values()])oy(e,i,"failed",t,o,r,"interrupted");for(let[i,s]of e.bufferedTurns)o.push(yn("pipeline.loop.buffered_turn_dropped",{turn_id:i,buffered_event_count:s.length,reason:t})),o.push({type:"turnTerminal",turnId:i,outcome:"failed",reason:t}),sy(e,i);e.bufferedTurns.clear(),e.phase="dead",o.push(yn("pipeline.loop.codex_died",{reason:t}));return}e.phase==="running"&&(e.phase="closing",o.push(yn("pipeline.loop.closing",{kind:n,reason:t})))}function Ude(e,n,t){let r={turnId:n,sourceSeq:t,phase:"active",protocolFailureReason:void 0,lastUpstreamErrorReason:void 0,edgeBlockEvidence:void 0,lastErrorDiagnosticText:void 0,toolFatalSeen:!1,toolFatalDetail:void 0,upstreamRejectedSeen:!1,upstreamRejectedDetail:void 0,providerOutageFlaggedSeen:!1,providerOutageDetail:void 0,lastUpstreamErrorHttpStatus:void 0,lastUpstreamErrorSummary:void 0,errorNotificationCount:0,unattributedErrorNotificationCount:0,notificationCount:0,modelInteractionSeen:!1,reasoningStepsWithoutProgress:0,agentReplyToolCallSeen:!1,agentActionToolCallSeen:!1,items:[]};return e.turns.set(n,r),r}function Bde(e,n){if(e.phase==="completing"){n.push(yn("pipeline.loop.duplicate_turn_completed",{turn_id:e.turnId}));return}e.phase="completing",n.push({type:"requestSnapshot",turnId:e.turnId})}function Pj(e){return e===429||e>=500&&e<=599?"transient":"deterministic"}function Kde(e){let n=Ij.exec(e);return n!==null?Pj(Number(n[1])):Jde.test(e)?"transient":"deterministic"}function zS(e){let n=!1,t=e.upstreamRejectedSeen||e.providerOutageFlaggedSeen||e.toolFatalSeen||e.modelInteractionSeen||e.unattributedErrorNotificationCount>0,r=0;e.lastUpstreamErrorHttpStatus!==void 0&&(r+=1,Pj(e.lastUpstreamErrorHttpStatus)==="transient"?n=!0:t=!0);for(let o of[e.lastUpstreamErrorReason,e.lastErrorDiagnosticText])o!==void 0&&(r+=1,Kde(o)==="transient"?n=!0:t=!0);return e.errorNotificationCount>r+e.unattributedErrorNotificationCount&&!e.upstreamRejectedSeen&&!e.providerOutageFlaggedSeen&&!e.toolFatalSeen&&(t=!0),t?"deterministic":n?"transient":"none"}function yj(e){if(e.lastUpstreamErrorHttpStatus===429)return!0;for(let n of[e.lastUpstreamErrorReason,e.lastErrorDiagnosticText]){if(n===void 0)continue;let t=Ij.exec(n);if(t!==null&&Number(t[1])===429)return!0}return!1}function Wde(e){return` (An automatic resume was attempted at ${new Date(e).toISOString()} and the stream stalled again, so it will not be retried automatically.)`}function Hde(e){return` (An automatic resume was attempted at ${new Date(e).toISOString()} after the stream stalled; it did not complete.)`}function Gde(e,n,t,r={costCap402Seen:!1}){let o=e==="turn/failed"&&h(A(n.error)?.code)==="idle_stream_timeout",i=e==="turn/failed"&&n.retryable===!0,s=e==="turn/failed"&&bo(n.fate)?n.fate:void 0;if(!o)return{autoRetryPreFirstByteStall:!1,messageStateRetryable:i,costCapAutoRetrySuppressed:!1,messageStateFate:s,autoResumeMidStreamStall:!1,midStreamResumeRateLimitSuppressed:!1};let a=r.midStreamResumeAttemptAtMs,d=a!==void 0,u=zS(t)!=="deterministic",c=n.preFirstByteStall===!0&&u,l=n.midStreamResumableStall===!0,p=l&&yj(t),m=zS({...t,modelInteractionSeen:!1})!=="deterministic",f=l&&!d&&!p&&m,y=(c&&!d||f)&&r.costCap402Seen,x=c&&!d&&!y,b=f&&!y,S=l&&!d&&p;return{autoRetryPreFirstByteStall:x,messageStateRetryable:c||i,costCapAutoRetrySuppressed:y,messageStateFate:s??(yj(t)?"rate_limited":"transient_upstream"),autoResumeMidStreamStall:b,midStreamResumeRateLimitSuppressed:S,...d?{midStreamResumeAttemptBurnedAtMs:a}:{}}}function Ej(e){return e>0?` (${e} automatic ${e===1?"retry":"retries"} did not help.)`:""}function oy(e,n,t,r,o,i,s=t,a={autoRetryPreFirstByteStall:!1,messageStateRetryable:!1,costCapAutoRetrySuppressed:!1,messageStateFate:void 0,autoResumeMidStreamStall:!1,midStreamResumeRateLimitSuppressed:!1}){let d=a.autoRetryPreFirstByteStall||a.costCapAutoRetrySuppressed?`${r}${Ej(i.autoRetryAttemptsForSeq?.(n.sourceSeq)??0)}${a.costCapAutoRetrySuppressed?Rj:""}`:r;if(a.midStreamResumeRateLimitSuppressed&&(d+=Vde),t==="failed")if(a.midStreamResumeAttemptBurnedAtMs!==void 0)d+=Wde(a.midStreamResumeAttemptBurnedAtMs);else{let u=i.midStreamResumeAttemptAtMsForSeq?.(n.sourceSeq);u!==void 0&&(d+=Hde(u))}for(let u of n.items){if(!u.posted||bj(u.emittedStreamState))continue;let c=dc(u.wireItemKey,u.content,s);o.push({type:"enqueue",kind:At.finalizeRow,data:{...iy(i,n,u,c),stream_snapshot_index:Kp(u),terminal_outcome:t,reason:r},resolution:"must_ack"}),u.emittedStreamState=s,u.lastEmittedBody=c.body}o.push({type:"enqueue",kind:At.messageState,data:{thread_key:i.threadKey,turn_id:n.turnId,seq:n.sourceSeq,status:"failed",reason:d,...a.messageStateRetryable?{retryable:!0}:{},...a.messageStateFate===void 0?{}:{fate:a.messageStateFate},...(()=>{let u=a.messageStateFate===void 0?void 0:i.ladderHistoryForSeq?.(n.sourceSeq,a.messageStateFate);return u===void 0?{}:{ladder:u}})(),...(()=>{let u=n.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary;return u===void 0?{}:{upstream_error:u}})()},resolution:"must_ack"}),o.push({type:"turnTerminal",turnId:n.turnId,outcome:t,reason:d,...a.autoRetryPreFirstByteStall?{retryableEmptyTurn:!0}:{},...a.autoResumeMidStreamStall?{autoResumeMidStreamStall:!0}:{},...a.messageStateFate===void 0?{}:{fate:a.messageStateFate}}),e.turns.delete(n.turnId),sy(e,n.turnId)}function Zde(e,n,t,r){let o=h(n.turnId),i=h(n.reason)??"turn source-seq mapping failed";if(o===void 0||e.terminalTurnIds.has(o))return;let s=e.turns.get(o);if(s!==void 0){oy(e,s,"failed",i,r,t);return}let a=e.bufferedTurns.get(o);e.bufferedTurns.delete(o),r.push(yn("pipeline.loop.buffered_turn_failed",{level:"warn",turn_id:o,buffered_event_count:a?.length??0,reason:i})),r.push({type:"turnTerminal",turnId:o,outcome:"failed",reason:i}),sy(e,o)}function Dj(e,n,t,r){if(e.phase!=="active"){r.push(yn("pipeline.loop.delta_for_completing_turn",{turn_id:e.turnId,stream_kind:n.streamKind}));return}let o=Aj(e,n.streamKind,n.itemId,t);if(o.completed){r.push(yn("pipeline.loop.delta_for_completed_item",{turn_id:e.turnId,item_key:o.itemKey}));return}o.content=uj(o.content,n);let i=o.nextDeltaIndex;o.nextDeltaIndex+=1;let s=n.streamKind==="terminalInput"?"completed":"streaming";Mj(e,o,i,s,t,r)}function Qde(e,n,t,r){let o=A(n.item);o!==void 0&&(e.protocolFailureReason??=Sj(o)),wj(e,o??n);let i=cj(n);if(i===void 0)return;if(i.streamKind==="webSearch"){Dj(e,{streamKind:"webSearch",itemId:i.itemId,queries:i.content.streamKind==="webSearch"?i.content.queries:[]},t,r);return}if(e.phase!=="active"){r.push(yn("pipeline.loop.item_completed_for_completing_turn",{turn_id:e.turnId,stream_kind:i.streamKind}));return}let s=Aj(e,i.streamKind,i.itemId,t,{adoptOpenIdLess:!0});if(s.completed&&!Xde(s,i))return;s.content=i.content,s.completed=!0;let a=dc(s.wireItemKey,s.content,"streaming");s.posted&&a.body===s.lastEmittedBody||Mj(e,s,Math.max(s.nextDeltaIndex-1,0),"streaming",t,r)}function Xde(e,n){return e.identity.streamKind!==n.streamKind?!1:n.streamKind==="agentStatus"||n.streamKind==="agentTaskUpdate"}function Mj(e,n,t,r,o,i){let s=dc(n.wireItemKey,n.content,r);if(!n.posted){if(s.body.trim()==="")return;i.push({type:"enqueue",kind:At.postStreamedRow,data:{...iy(o,e,n,s),delta_index:t,stream_snapshot_index:Kp(n)},resolution:"must_ack"}),n.posted=!0,n.emittedStreamState=r,n.lastEmittedBody=s.body,r==="completed"&&(n.completed=!0);return}i.push({type:"enqueue",kind:At.streamSnapshot,data:{...iy(o,e,n,s),delta_index:t,stream_snapshot_index:Kp(n)},coalesceKey:n.itemKey,resolution:"must_ack"}),n.emittedStreamState=r,n.lastEmittedBody=s.body}function Aj(e,n,t,r,o={adoptOpenIdLess:!1}){if(n==="webSearch")return e.items.find(s=>s.identity.streamKind==="webSearch")??xj(e,"webSearch",`web-search:${e.turnId}`,r);if(t!==void 0){let s=e.items.find(a=>a.identity.streamKind===n&&a.identity.itemId===t);if(s!==void 0)return s}let i=e.items.find(s=>s.identity.streamKind===n&&s.identity.itemId===void 0&&!s.completed);return t===void 0&&i!==void 0||t!==void 0&&o.adoptOpenIdLess&&i!==void 0?i:xj(e,n,t,r)}function xj(e,n,t,r){let o={turnId:e.turnId,itemId:t,itemIndex:e.items.length,streamKind:n},i=KL(o),s=t??i,a={identity:o,itemKey:i,wireItemKey:s,clientMessageId:jS(r.instanceId,e.turnId,n,s),content:dj(n),posted:!1,completed:!1,emittedStreamState:void 0,lastEmittedBody:void 0,nextDeltaIndex:0,nextStreamSnapshotIndex:1};return e.items.push(a),a}function Yde(e,n,t,r,o){if(e.terminalTurnIds.has(n)){o.push(yn("pipeline.loop.duplicate_snapshot",{turn_id:n}));return}let i=e.turns.get(n);if(i===void 0){o.push(yn("pipeline.loop.snapshot_for_unknown_turn",{turn_id:n}));return}if(i.phase!=="completing"){o.push(yn("pipeline.loop.snapshot_for_active_turn",{turn_id:n}));return}let s=Array.isArray(t.items)?t.items:[];i.protocolFailureReason??=$de(s);for(let Q of s)wj(i,A(Q));let a=pj(s),d=new Set,u=new Map;a.forEach((Q,_e)=>{if(Q.itemId===void 0)return;let Te=i.items.find(ae=>ae.posted&&!d.has(ae.itemKey)&&ae.identity.streamKind===Q.streamKind&&ae.identity.itemId===Q.itemId);Te!==void 0&&(d.add(Te.itemKey),u.set(_e,Te))});let c=new Map;for(let Q of i.items)Q.posted&&!d.has(Q.itemKey)&&Q.identity.itemId===void 0&&c.set(Q.identity.streamKind,(c.get(Q.identity.streamKind)??0)+1);let l=new Map;a.forEach((Q,_e)=>{u.has(_e)||l.set(Q.streamKind,(l.get(Q.streamKind)??0)+1)});let p=(Q,_e)=>{let Te=dc(Q.wireItemKey,Q.content,"completed").body.trim(),ae=_e.body.trim();return ae.startsWith(Te)||Te.startsWith(ae)};a.forEach((Q,_e)=>{if(u.has(_e))return;let Te=l.get(Q.streamKind)===c.get(Q.streamKind);if(Q.itemId!==void 0&&!Te)return;let ae=i.items.find(Ee=>Ee.posted&&!d.has(Ee.itemKey)&&Ee.identity.streamKind===Q.streamKind&&Ee.identity.itemId===void 0);ae!==void 0&&(Q.itemId!==void 0&&!p(ae,Q)||(d.add(ae.itemKey),u.set(_e,ae)))});for(let Q of i.items){let _e=[...u.entries()].find(([,ae])=>ae.itemKey===Q.itemKey);if(_e!==void 0){let ae=a[_e[0]];if(ae===void 0)continue;o.push({type:"enqueue",kind:At.finalizeRow,data:{thread_key:r.threadKey,turn_id:i.turnId,item_key:Q.itemKey,item_id:Q.wireItemKey,stream_kind:Q.identity.streamKind,item_index:Q.identity.itemIndex,source_seq:i.sourceSeq,client_message_id:Q.clientMessageId,body:ae.body,structured:LS(ae.structured,Q.wireItemKey),stream_snapshot_index:Kp(Q),terminal_outcome:"completed"},resolution:"must_ack"}),Q.emittedStreamState="completed",Q.lastEmittedBody=ae.body;continue}if(!Q.posted||bj(Q.emittedStreamState))continue;let Te=dc(Q.wireItemKey,Q.content,"completed");o.push({type:"enqueue",kind:At.finalizeRow,data:{...iy(r,i,Q,Te),stream_snapshot_index:Kp(Q),terminal_outcome:"completed"},resolution:"must_ack"}),Q.emittedStreamState="completed",Q.lastEmittedBody=Te.body}a.forEach((Q,_e)=>{if(u.has(_e))return;let Te=Q.itemId??`${i.turnId}:${Q.streamKind}:snapshot:${Q.snapshotIndex}`;o.push({type:"enqueue",kind:At.postCompletedRow,data:{thread_key:r.threadKey,turn_id:i.turnId,item_key:`${i.turnId}:${Q.streamKind}:${Q.itemId??`snapshot:${Q.snapshotIndex}`}`,item_id:Te,stream_kind:Q.streamKind,snapshot_index:Q.snapshotIndex,source_seq:i.sourceSeq,client_message_id:jS(r.instanceId,i.turnId,Q.streamKind,Te),body:Q.body,structured:LS(Q.structured,Te),stream_snapshot_index:1},resolution:"must_ack"})});let m=i.items.some(Q=>Q.identity.streamKind==="assistant"&&Q.posted)||a.some(Q=>Q.streamKind==="assistant"),f=i.agentActionToolCallSeen||i.items.some(Q=>Q.posted&&mj.has(Q.identity.streamKind))||a.some(Q=>mj.has(Q.streamKind)),y=r.linzumiAgentSession===!0&&m&&!i.agentReplyToolCallSeen&&!f,x=m&&!y,b=i.protocolFailureReason,S=b!==void 0&&Ade(b)&&x,v=S?void 0:b,w=!x&&b===void 0&&i.lastUpstreamErrorReason===void 0?y?{cause:Ide}:Pue(i,a.length,i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary):void 0,k=!x&&v===void 0&&i.upstreamRejectedSeen,R=!x&&v===void 0&&i.providerOutageFlaggedSeen,P=iue(i.lastUpstreamErrorHttpStatus),O=!x&&v===void 0&&i.edgeBlockEvidence!==void 0,E=k&&!R&&!P,j=R||E?vue({providerOutageFlagged:R,priorConsecutiveIsolatedRejections:e.consecutiveIsolatedRejections,stormDetail:i.providerOutageDetail,rejectionDetail:i.upstreamRejectedDetail}):void 0,z=j?.kind==="isolated_retry";E?e.consecutiveIsolatedRejections+=1:e.consecutiveIsolatedRejections=0;let M=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&i.lastErrorDiagnosticText===void 0&&!k&&oue(i.lastUpstreamErrorHttpStatus),J=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&P,K=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&!k&&!M&&!J&&i.toolFatalSeen,G=j!==void 0?j.reason:J?sue(i.lastUpstreamErrorHttpStatus,i.upstreamRejectedDetail??i.lastErrorDiagnosticText):M?aue(i.lastUpstreamErrorHttpStatus):K?due(i.toolFatalDetail):i.lastUpstreamErrorReason??(y?Pde:w===void 0?fj:`${fj} [${w.cause}]`),W=w!==void 0&&v===void 0&&i.modelInteractionSeen&&i.lastErrorDiagnosticText===void 0&&!k&&!M&&!J&&!K;W?(e.consecutiveEmptyTurns+=1,e.lastEmptyTurnCause=w?.cause):(e.consecutiveEmptyTurns=0,e.lastEmptyTurnCause=void 0);let te=W&&e.consecutiveEmptyTurns>hj,me=W&&!te||z,ge=r.autoRetryAttemptsForSeq?.(i.sourceSeq)??0,ce=me&&e.costCap402Seen&&ge<wo,Ie=me&&!ce;O&&o.push(yn("codex.edge_blocked_captured",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,http_status:i.edgeBlockEvidence?.status,signature:i.edgeBlockEvidence?.signature}));let Re=te?`${Ede} (${e.consecutiveEmptyTurns} in a row${w===void 0?"":`: ${w.cause}`}).`:void 0,I=v??(x?void 0:Re??G),U=I===void 0?void 0:`${I}${Ej(W&&!te?ge:0)}${ce?Rj:""}`,ie=w!==void 0&&!te&&!k&&!M&&!J&&!K||z||O,se=ie||R?"transient_upstream":M?i.lastUpstreamErrorHttpStatus===void 0?"transient_upstream":AL(i.lastUpstreamErrorHttpStatus):"deterministic";ce&&o.push(yn("codex.empty_turn_auto_retry_suppressed_cost_cap",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:I??null,isolated_rejection_retry_suppressed:z})),te&&o.push(yn("codex.empty_turn_loop_guard_tripped",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,consecutive_empty_turns:e.consecutiveEmptyTurns,max_consecutive_empty_turns:hj,cause:w?.cause??null,last_upstream_error:i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary??null})),S?o.push(yn("codex.turn_completed_with_unsupported_tool_call_ignored",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:b})):b!==void 0&&o.push(yn("codex.turn_completed_with_protocol_failure",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:b})),y&&o.push(yn("codex.agent_turn_narration_only_no_reply",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,streamed_item_count:i.items.length,snapshot_item_count:a.length,agent_reply_tool_call_seen:i.agentReplyToolCallSeen,agent_action_tool_call_seen:i.agentActionToolCallSeen,retryable_empty_turn:ie,empty_turn_loop_guard_tripped:te})),m||o.push(yn("codex.turn_completed_without_assistant_output",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,streamed_item_count:i.items.length,snapshot_item_count:a.length,notification_count:i.notificationCount,error_notification_count:i.errorNotificationCount,model_interaction_seen:i.modelInteractionSeen,last_error_diagnostic_text:i.lastErrorDiagnosticText??null,last_upstream_error_reason:i.lastUpstreamErrorReason??null,last_upstream_error_summary:i.lastUpstreamErrorSummary??null,empty_turn_cause:w?.cause??null,tool_fatal_seen:K,tool_fatal_detail:i.toolFatalDetail??null,upstream_rejected_seen:k,upstream_rejected_detail:i.upstreamRejectedDetail??null,upstream_terminal_4xx:J,last_upstream_error_http_status:i.lastUpstreamErrorHttpStatus??null,provider_outage_flagged:R,isolated_rejection_retry_granted:z,rejection_disposition:j?.kind??null,consecutive_isolated_rejections:e.consecutiveIsolatedRejections,retryable_empty_turn:ie,empty_turn_loop_guard_tripped:te,cost_cap_auto_retry_suppressed:ce})),o.push({type:"enqueue",kind:At.messageState,data:{thread_key:r.threadKey,turn_id:i.turnId,seq:i.sourceSeq,...U===void 0?{status:"processed"}:{status:"failed",reason:U,...ie?{retryable:!0}:{},fate:se,...(()=>{let Q=r.ladderHistoryForSeq?.(i.sourceSeq,se);return Q===void 0?{}:{ladder:Q}})(),...O?{failure_class:"edge_blocked"}:{},...(()=>{let Q=i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary;return Q===void 0?{}:{upstream_error:Q}})()}},resolution:"must_ack"}),U===void 0&&(e.lastUpstreamErrorSummary=void 0),o.push(U===void 0?{type:"turnTerminal",turnId:i.turnId,outcome:"completed"}:{type:"turnTerminal",turnId:i.turnId,outcome:"failed",reason:U,...Ie?{retryableEmptyTurn:!0}:{},fate:se}),e.turns.delete(i.turnId),sy(e,i.turnId)}function eue(e,n,t,r){let o=e.bufferedTurns.get(n);if(o===void 0){e.bufferedTurns.set(n,[t]),r.push(yn("pipeline.loop.turn_events_buffered",{turn_id:n}));return}o.push(t)}function nue(e,n,t){for(let r of[...e.bufferedTurns.keys()]){if(n.sourceSeqForTurn(r)===void 0)continue;let o=e.bufferedTurns.get(r)??[];e.bufferedTurns.delete(r),t.push(yn("pipeline.loop.buffered_turn_drained",{turn_id:r,buffered_event_count:o.length}));for(let i of o)Tj(e,i,n,t)}}function sy(e,n){for(e.terminalTurnIds.delete(n),e.terminalTurnIds.add(n);e.terminalTurnIds.size>Cde;){let t=e.terminalTurnIds.values().next().value;if(t===void 0)return;e.terminalTurnIds.delete(t)}}function ay(e){let n=[...e.turns.values()].filter(t=>t.phase==="active");return n.length===1?n[0]?.turnId:void 0}function iy(e,n,t,r){return{thread_key:e.threadKey,turn_id:n.turnId,item_key:t.itemKey,item_id:t.wireItemKey,stream_kind:t.identity.streamKind,item_index:t.identity.itemIndex,source_seq:n.sourceSeq,client_message_id:t.clientMessageId,body:r.body,structured:r.structured}}function Kp(e){let n=e.nextStreamSnapshotIndex;return e.nextStreamSnapshotIndex+=1,n}function uc(e){return h(e.reason)??h(e.message)??h(A(e.error)?.message)??h(e.error)??"codex_turn_aborted"}function tue(e){let n=h(e.diagnostic_summary)??h(A(A(e.diagnostic_payload)?.error)?.message);if(n===void 0)return;let t=n.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);if(t.length===0)return;let r=dy(e);return r===void 0?`Model gateway error: ${t}`:`Model gateway error (HTTP ${r}): ${t}`}function dy(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.codexErrorInfo),o=[A(t?.responseStreamDisconnected)?.httpStatusCode,t?.httpStatusCode,t?.statusCode,t?.status,n?.httpStatusCode,n?.statusCode,n?.status];for(let i of o)if(typeof i=="number"&&Number.isFinite(i))return i}function rue(e){let n=dy(e);if(n!==401&&n!==403)return;let t=A(A(e.diagnostic_payload)?.error),r=[h(e.diagnostic_summary),h(t?.message),h(e.message)].find(i=>i!==void 0&&/(?:<!doctype\s+html|<html(?:\s|>))/i.test(i)&&/cloudflare|cf-ray|\bblocked\b|access denied|\bchallenge\b|attention required/i.test(i));if(r===void 0)return;let o=/cloudflare|cf-ray/i.test(r)?"cloudflare":/\bblocked\b|access denied/i.test(r)?"blocked":/attention required/i.test(r)?"attention_required":"challenge";return{status:n,signature:o}}function oue(e){return e===void 0?!1:e===402||e===408||e===425||e===429||e>=500&&e<=599}function iue(e){return e===void 0||e<400||e>499?!1:e!==402&&e!==408&&e!==425&&e!==429}function sue(e,n){let t="the model provider rejected this request as invalid (a retry sends the same request and fails the same way, so it was not retried; check the selected model / request and send again).",r=e===void 0?`Model provider rejected this request: ${t}`:`Model provider rejected this request (HTTP ${e}): ${t}`,o=typeof n=="string"?n.trim():"";return o===""?r:`${r} Upstream said: ${o}`}function aue(e){let n="the model provider returned no usable response this turn (retrying will not help until it recovers).";return e===void 0?`Model upstream unavailable: ${n}`:`Model upstream unavailable (HTTP ${e}): ${n}`}function due(e){let n="The agent run was cut off by a tool failure and produced no response (retrying will hit the same failure until the underlying tool call is fixed).",t=typeof e=="string"?e.trim():"";return t===""?`Tool execution failed: ${n}`:`Tool execution failed (${t}): ${n}`}function Wp(e){let n=A(A(e.diagnostic_payload)?.error),t=h(e.message)??h(e.reason)??h(A(e.error)?.message)??h(e.error)??h(e.diagnostic)??h(n?.message)??h(A(n?.error)?.message);if(t===void 0)return;let r=t.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);return r.length===0?void 0:r}function cc(e){if(e===void 0)return;let n=e.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);return n.length===0?void 0:n}function pue(e){let n=A(e.error),t=A(A(e.diagnostic_payload)?.error),r=A(t?.error),o=dy(e),i=h(n?.type)??h(n?.code)??h(t?.type)??h(t?.code)??h(r?.type)??h(r?.code)??_j(n?.codexErrorInfo)??_j(t?.codexErrorInfo),s=cc(h(n?.message))??cc(h(r?.message))??cc(h(t?.message))??Wp(e);if(o===void 0&&i===void 0){let u=Vs(h(n?.message))??Vs(h(r?.message))??Vs(h(t?.message))??Vs(h(e.message))??Vs(h(e.reason))??Vs(h(e.error))??Vs(h(e.diagnostic))??Vs(h(e.diagnostic_summary));u!==void 0&&(o=u.status,i=u.errorType,s=cc(u.message)??s)}let a=[o===void 0?void 0:String(o),i?.trim()===""?void 0:i?.trim()].filter(u=>u!==void 0).join(" "),d=a===""?s:s===void 0?a:`${a}: ${s}`;if(!(d===void 0||d===""))return d.slice(0,lue)}function _j(e){if(typeof e=="string"&&e.trim()!=="")return e;let n=A(e);if(n===void 0)return;let t=Object.keys(n);return t.length===1?t[0]:void 0}function Vs(e){if(e===void 0)return;let n=e.indexOf("{");if(n===-1)return;let t=Qa(e.slice(n))??Qa(e.slice(n,e.lastIndexOf("}")+1));if(t===void 0||h(t.type)!=="error")return;let r=A(t.error);if(r===void 0)return;let o=t.status;return{status:typeof o=="number"&&Number.isFinite(o)?o:void 0,errorType:h(r.type)??h(r.code),message:h(r.message)}}function fue(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.error),r=A(e.error),o=[{code:h(n?.code),message:h(n?.message)},{code:h(n?.type),message:h(n?.message)},{code:h(t?.code),message:h(t?.message)},{code:h(t?.type),message:h(t?.message)},{code:h(r?.code),message:h(r?.message)},{code:h(r?.type),message:h(r?.message)},{code:h(e.code),message:h(e.message)},{code:h(e.type),message:h(e.message)}];for(let i of o){let s=i.code?.trim();if(s!==void 0&&s!==""&&uue.test(s))return{codeOrType:s,message:i.message}}}function mue(e){let n=fue(e),t=Wp(e),r=t!==void 0&&cue.test(t);return n===void 0&&!r?void 0:cc(n?.message)??t??""}function hue(e){let n="the model provider rejected this request and produced no response (retrying will hit the same rejection until the request is changed).",t=typeof e=="string"?e.trim():"";return t===""?`The model request was rejected: ${n}`:`The model request was rejected (${t}): ${n}`}function _ue(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.error),r=A(e.error),o=[h(n?.code),h(n?.type),h(t?.code),h(t?.type),h(r?.code),h(r?.type),h(e.code),h(e.type)],i=[h(n?.message),h(t?.message),h(r?.message),h(e.message),h(e.reason)];if(o.some(a=>{let d=a?.trim();return d!==void 0&&d!==""&&yue.test(d)})){for(let a of i){let d=cc(a);if(d!==void 0&&xue.test(d))return d}return Wp(e)??""}}function bue(e){let n=typeof e=="string"?e.trim():"";return n===""?"The model provider is currently rejecting requests / experiencing an outage. Your message was NOT processed. Please retry later, or switch to a different model.":n}function wue(e){let n="the model provider rejected this request and produced no response (a one-off retry did not help).",t=typeof e=="string"?e.trim():"";return t===""?`The model request was rejected: ${n}`:`The model request was rejected (${t}): ${n}`}function vue(e){return e.providerOutageFlagged?{kind:"storm",retryable:!1,reason:bue(e.stormDetail)}:e.priorConsecutiveIsolatedRejections<gue?{kind:"isolated_retry",retryable:!0,reason:hue(e.rejectionDetail)}:{kind:"isolated_terminal",retryable:!1,reason:wue(e.rejectionDetail)}}function Cue(e){return Sue.test(e)||kue.test(e)}function Tue(e){let n=h(e.kind)??h(e.type)??h(A(e.error)?.kind)??h(A(e.error)?.type),t=typeof n=="string"&&/(tool.*fatal|fatal.*tool|response[._]failed|tool_failure)/i.test(n),r=Wp(e),o=r!==void 0&&Cue(r);if(!(!t&&!o))return r??""}function Pue(e,n,t){let r=t===void 0?"":` (last upstream error: ${t})`;return e.lastErrorDiagnosticText!==void 0?{cause:`codex error without HTTP status: ${e.lastErrorDiagnosticText}`}:e.modelInteractionSeen?{cause:`model returned no assistant output: ${e.items.length} streamed items, ${n} snapshot items${r}`}:{cause:`codex never called the model: 0 model interactions, ${e.notificationCount} notifications, ${e.errorNotificationCount} errors${r}`}}function yn(e,n){return{type:"log",event:e,fields:n}}var kde,Vp,lc,Cde,wo,fj,Tde,Pde,Ide,mj,hj,Ede,gj,vj,Lde,jde,Fde,Jde,Ij,Vde,Rj,uue,cue,lue,gue,yue,xue,Sue,kue,uy=F(()=>{"use strict";Hn();ic();RS();FS();kde=new Set(["completed","failed","interrupted"]);Vp="pipeline/turnMappingReady",lc="pipeline/turnMappingFailed",Cde=512,wo=2,fj="Codex completed without producing a response.",Tde="linzumi_agent_reply",Pde="The agent ended its turn after narrating an intent without posting a reply or taking any action.",Ide="agent narrated intent but posted no reply and took no action",mj=new Set(["commandOutput","fileChange","terminalInput","agentStatus","agentTaskUpdate"]);hj=3,Ede="Stopped after repeated empty responses in a row",gj=64;vj="Codex emitted unsupported tool call";Lde=new Map([["turn/failed","failed"],["turn/aborted","interrupted"],["turn/canceled","interrupted"],["turn/cancelled","interrupted"]]),jde=new Set(["turn/started","turn/completed","turn/failed","turn/aborted","turn/canceled","turn/cancelled","error","item/agentMessage/delta","item/reasoning/textDelta","item/commandExecution/outputDelta","command/exec/outputDelta","item/fileChange/outputDelta","item/commandExecution/terminalInteraction","item/started","item/completed","response_item"]),Fde=new Set(["item/agentMessage/delta","item/reasoning/textDelta","item/commandExecution/outputDelta","command/exec/outputDelta","item/fileChange/outputDelta","item/commandExecution/terminalInteraction","item/started","item/completed","response_item"]);Jde=/upstream model stream stalled/i,Ij=/\(HTTP (\d{3})\)/;Vde=" (An automatic resume was not attempted: the upstream reported a rate limit (HTTP 429) during this turn, and an automatic resume would burn straight into it. Retry once the rate limit clears.)";Rj=" (Automatic retries are paused: this session hit your Linzumi cost cap (HTTP 402), and an automatic retry must never spend past it. Retry manually when your budget allows.)";uue=/^(?:model_request_rejected|invalid_request_error|invalid_request|request_rejected|content_policy_violation|content_filter|input_validation_error)$/i,cue=/\bmodel request was rejected\b|\bmodel_request_rejected\b/i;lue=300;gue=1,yue=/^provider_outage$/i,xue=/rejecting requests|experiencing an outage|provider outage/i;Sue=/\bapply_patch\b[^]*\bincompatible\b|\bin-flight tool future\b[^]*\bfail/i,kue=/\btools::router\b[^]*\bfatal\b|\bresponse\.failed\b/i});function $j(e){return e===void 0?[]:[...e.values()].map(n=>({...n}))}function Oj(e){let n=kj(),t={threadKey:e.threadKey,instanceId:e.instanceId,sourceSeqForTurn:e.sourceSeqForTurn,autoRetryAttemptsForSeq:e.autoRetryAttemptsForSeq,midStreamResumeAttemptAtMsForSeq:e.midStreamResumeAttemptAtMsForSeq,ladderHistoryForSeq:e.ladderHistoryForSeq,linzumiAgentSession:e.linzumiAgentSession===!0},r=[],o=e.now??(()=>Date.now()),i=new Map,s=new Map,a=new Map,d=new Map,u=new Set,c=e.bufferedTurnMaxAgeMs??Iue,l=e.bufferedTurnMaxEvents??Rue,p=e.bufferedTurnSweepIntervalMs??Eue,m=!1,f=!0,y,x=(E,j)=>{try{e.log(E,j)}catch{}},b=E=>{switch(E.type){case"enqueue":e.outbox.enqueue({kind:E.kind,data:E.data,...E.coalesceKey===void 0?{}:{coalesceKey:E.coalesceKey},resolution:E.resolution});return;case"requestSnapshot":e.requestSnapshot(E.turnId);return;case"turnTerminal":e.onTurnTerminal(E.turnId,E.outcome,E.reason,E.retryableEmptyTurn,E.autoResumeMidStreamStall,E.fate);return;case"log":x(E.event,E.fields);return}},S=()=>{for(let E of n.turns.keys())i.has(E)||i.set(E,o());for(let E of[...i.keys()])n.turns.has(E)||i.delete(E);for(let E of n.bufferedTurns.keys())s.has(E)||s.set(E,o());for(let E of[...s.keys()])n.bufferedTurns.has(E)||(s.delete(E),u.delete(E));for(let E of[...a.keys()])!n.turns.has(E)&&!n.bufferedTurns.has(E)&&a.delete(E);for(let E of[...d.keys()])!n.turns.has(E)&&!n.bufferedTurns.has(E)&&d.delete(E)},v=(E,j)=>{!n.turns.has(E)&&!n.bufferedTurns.has(E)||a.set(E,{atMs:o(),kind:j})},w=E=>{if(E.source!=="codex")return;let j=E.notification.method;if(j===Vp||j===lc)return;let z=Jp(E.notification.params??{})??ay(n);z!==void 0&&v(z,j)},k=E=>{if(E.source!=="codex")return;let j=E.notification.method;if(j!=="item/started"&&j!=="item/completed"&&j!=="response_item")return;let z=E.notification.params??{},M=Jp(z)??ay(n);if(M===void 0||!n.turns.has(M)&&!n.bufferedTurns.has(M))return;let J=ry(z);if(J===void 0||J==="")return;if(j!=="item/started"){d.get(M)?.delete(J);return}let K=h(A(z.item)?.type);if(K===void 0||!Due.has(K))return;let G=d.get(M);G===void 0&&(G=new Map,d.set(M,G)),G.set(J,{kind:K,startedAtMs:o()})},R=()=>{if(!f||n.phase!=="running")return!1;let E=o(),j=!1;for(let[z,M]of n.bufferedTurns){if(u.has(z))continue;let J=E-(s.get(z)??E),K=J>c,G=M.length>l;!K&&!G||(u.add(z),x("pipeline.loop.buffered_turn_overdue",{level:"warn",thread_key:e.threadKey,turn_id:z,buffered_event_count:M.length,age_ms:J,max_age_ms:c,max_events:l}),r.push({source:"codex",notification:{method:lc,params:{turnId:z,reason:G?`turn source mapping never arrived (${M.length} buffered events exceeded the ${l} cap)`:`turn source mapping never arrived within ${c}ms`}}}),j=!0)}return j},P=()=>{if(!m){m=!0;try{for(;r.length>0;){let E=r.shift();if(E===void 0)continue;let j;try{j=Cj(n,E,t)}catch(z){x("pipeline.loop.event_processing_failed",{thread_key:e.threadKey,source:E.source,message:z instanceof Error?z.message:String(z)});continue}S(),w(E),k(E);for(let z of j)try{b(z)}catch(M){x("pipeline.loop.effect_failed",{thread_key:e.threadKey,effect:z.type,message:M instanceof Error?M.message:String(M)})}R()}}finally{m=!1}}},O=p>0?setInterval(()=>{R()&&P()},p):void 0;return O?.unref?.(),{submit:E=>{try{if(!f){x("pipeline.loop.event_after_drain",{thread_key:e.threadKey,source:E.source});return}r.push(E),P()}catch(j){x("pipeline.loop.submit_failed",{thread_key:e.threadKey,message:j instanceof Error?j.message:String(j)})}},metrics:()=>({queueDepth:r.length,phase:n.phase,activeTurns:[...n.turns.values()].map(E=>({turnId:E.turnId,sourceSeq:E.sourceSeq,startedAtMs:i.get(E.turnId)??o(),lastActivityAtMs:a.get(E.turnId)?.atMs,lastActivityKind:a.get(E.turnId)?.kind,openItems:$j(d.get(E.turnId))})),bufferedTurns:[...n.bufferedTurns.entries()].map(([E,j])=>({turnId:E,bufferedEventCount:j.length,firstBufferedAtMs:s.get(E)??o(),lastActivityAtMs:a.get(E)?.atMs,lastActivityKind:a.get(E)?.kind,openItems:$j(d.get(E))}))}),noteTurnActivity:(E,j)=>{try{v(E,j)}catch(z){x("pipeline.loop.note_activity_failed",{thread_key:e.threadKey,message:z instanceof Error?z.message:String(z)})}},drainAndClose:E=>(y===void 0&&(y=(async()=>{f=!1,O!==void 0&&clearInterval(O),await Promise.resolve(),P();try{await e.outbox.flush(E)}catch(j){x("pipeline.loop.drain_flush_failed",{thread_key:e.threadKey,message:j instanceof Error?j.message:String(j)})}})()),y)}}var Iue,Rue,Eue,Due,Lj=F(()=>{"use strict";Hn();FS();uy();Iue=10*6e4,Rue=1e4,Eue=3e4,Due=new Set(["commandExecution","terminalInput","mcpToolCall","dynamicToolCall","collabAgentToolCall"])});function ly(e){let n=Fue(e),t=tj({threadKey:e.threadKey,push:e.push,builders:n,...e.persistDir===void 0?{}:{persistDir:e.persistDir},...e.outboxRetryDelaysMs===void 0?{}:{retryDelaysMs:[...e.outboxRetryDelaysMs]},maxInFlightPushes:e.outboxMaxInFlightPushes??Aue,...e.journalRecoveryMaxAgeMs===void 0?{}:{journalRecoveryMaxAgeMs:e.journalRecoveryMaxAgeMs},isRetryBudgetExempt:NS,onPermanentFailure:(d,u)=>{e.log("pipeline.outbox_entry_failed",{thread_key:e.threadKey,entry_seq:d.entrySeq,kind:d.kind,attempts:d.attempts,item_key:h(d.data.item_key)??null,turn_id:h(d.data.turn_id)??null,message:u.message})},log:e.log}),r,o={...t,enqueue:d=>{if(d.kind===At.messageState){let u=h(d.data.turn_id);if(u!==void 0&&e.isRecoveredTurn?.(u)===!0)return t.enqueue({...d,data:{...d.data,suppress_terminal_for_recovered_turn:!0}})}if(jue(d.kind)){let u=Y(d.data.source_seq),c=A(d.data.local_runner_runtime_metadata)??e.runtimeMetadataForSourceSeq?.(u);if(c!==void 0)return t.enqueue({...d,data:{...d.data,local_runner_runtime_metadata:c}})}return t.enqueue(d)}},i=async d=>{let u=e.snapshotRetryDelaysMs??Mue;for(let c=0;;c+=1)try{let l=await e.resolveSnapshot(d);r.submit({source:"snapshot",turnId:d,snapshot:{items:[...l.items]}});return}catch(l){let p=l instanceof Error?l.message:String(l),m=u[c];if(e.log("pipeline.snapshot_resolution_failed",{thread_key:e.threadKey,turn_id:d,attempt:c+1,retry_in_ms:m??null,message:p}),m===void 0){r.submit({source:"codex",notification:{method:"turn/failed",params:{turnId:d,reason:`completion snapshot resolution failed: ${p}`}}});return}await Bue(m)}};r=Oj({threadKey:e.threadKey,outbox:o,sourceSeqForTurn:e.sourceSeqForTurn,autoRetryAttemptsForSeq:e.autoRetryAttemptsForSeq,midStreamResumeAttemptAtMsForSeq:e.midStreamResumeAttemptAtMsForSeq,ladderHistoryForSeq:e.ladderHistoryForSeq,onTurnTerminal:e.onTurnTerminal,requestSnapshot:d=>{i(d).catch(u=>{e.log("pipeline.snapshot_request_failed",{thread_key:e.threadKey,turn_id:d,message:u instanceof Error?u.message:String(u)})})},instanceId:e.instanceId,log:e.log,linzumiAgentSession:e.linzumiAgentSession===!0});let s=rj({threadKey:e.threadKey,outboxMetrics:()=>t.metrics(),loopMetrics:()=>r.metrics(),log:e.log,intervalMs:e.statsIntervalMs,turnStalledThresholdMs:e.turnStalledThresholdMs,turnWaitStates:e.turnWaitStates}),a;return{submitNotification:(d,u)=>{r.submit({source:"codex",notification:{method:d,params:u}})},notifyTurnMappingReady:d=>{r.submit({source:"codex",notification:{method:Vp,params:{turnId:d}}})},notifyTurnMappingFailed:(d,u)=>{r.submit({source:"codex",notification:{method:lc,params:{turnId:d,reason:u}}})},noteTurnActivity:(d,u)=>{r.noteTurnActivity(d,u)},submitLifecycle:(d,u)=>{r.submit({source:"lifecycle",kind:d,reason:u})},pause:()=>{t.pause()},resume:()=>{t.resume()},rebindThreadKey:d=>{t.rekeyJournal(d)},flushOutbox:d=>t.flush(d),metrics:()=>t.metrics(),close:d=>(a===void 0&&(a=(async()=>{s.stop(),r.submit({source:"lifecycle",kind:"shutdown",reason:"session closed"}),await r.drainAndClose(d),await t.close(d)})()),a)}}function jj(e){let n=Ag(e);return n===void 0?{}:{traceparent:n}}function $ue(e){return{...h(e.turn_id)===void 0?{}:{turn_id:h(e.turn_id)},...h(e.item_key)===void 0?{}:{item_key:h(e.item_key)},...Y(e.delta_index)===void 0?{}:{delta_index:Y(e.delta_index)},...Y(e.stream_snapshot_index)===void 0?{}:{stream_snapshot_index:Y(e.stream_snapshot_index)}}}function Oue(e){return typeof e.body=="string"?e.body:""}function Lue(e){return A(e.structured)??{}}function jue(e){return e===At.postStreamedRow||e===At.streamSnapshot||e===At.finalizeRow||e===At.postCompletedRow}function Fue(e){let n={build:r=>{let o=e.wire();if(o.kandanThreadId===void 0||o.codexThreadId===void 0)return{skip:!0,reason:"session_thread_unbound"};let i=h(r.client_message_id);if(i===void 0)return{skip:!0,reason:"missing_client_message_id"};let s=h(r.turn_id),a=Y(r.source_seq),d={...s===void 0?{}:{turn_id:s},stream_key:i},u={...d,...A(r.local_runner_runtime_metadata)??{}};return{event:"session:stream_thread_message",payload:{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:o.kandanThreadId,stream_key:i,...o.leaseEpoch===void 0?{}:{lease_epoch:o.leaseEpoch},body:Oue(r),payload:{...e.runnerPayload("codex_output",o.codexThreadId,a,u),...o.rootSeq===void 0?{}:{reply_to_seq:o.rootSeq},...a===void 0?{}:{source_message_seq:a},...d,structured:{...Lue(r),stream_key:i}},client_message_id:i,...$ue(r),...jj(o.kandanThreadId)}}}},t={build:r=>{let o=e.wire();if(o.kandanThreadId===void 0)return{skip:!0,reason:"session_thread_unbound"};let i=Y(r.seq),s=h(r.status);if(i===void 0||s===void 0)return{skip:!0,reason:"malformed_message_state_entry"};let a=h(r.turn_id);return r.suppress_terminal_for_recovered_turn===!0||a!==void 0&&e.isRecoveredTurn?.(a)===!0?{skip:!0,reason:"terminal_for_recovered_turn"}:{event:"message_state",payload:{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:o.kandanThreadId,instance_id:e.instanceId,...o.codexThreadId===void 0?{}:{codex_thread_id:o.codexThreadId},seq:i,status:s,...h(r.reason)===void 0?{}:{reason:h(r.reason)},...r.retryable===!0?{retryable:!0}:{},...bo(r.fate)?{fate:r.fate}:{},...A(r.ladder)===void 0?{}:{ladder:A(r.ladder)},...r.failure_class==="edge_blocked"?{failure_class:"edge_blocked"}:{},...h(r.upstream_error)===void 0?{}:{upstream_error:h(r.upstream_error)},...h(r.turn_id)===void 0?{}:{turn_id:h(r.turn_id)},...o.leaseEpoch===void 0?{}:{lease_epoch:o.leaseEpoch},...jj(o.kandanThreadId)}}}};return{[At.postStreamedRow]:n,[At.streamSnapshot]:n,[At.finalizeRow]:n,[At.postCompletedRow]:n,[At.messageState]:t}}function qj(e,n){if("error"in e)return[];let t=A(A(e.result)?.thread),o=(Ne(t?.turns)??[]).filter(Z).find(i=>i.id===n);return(Ne(o?.items)??[]).filter(Z)}function qS(e){if(!e.some(t=>zue.has(h(t.type)??"")))return[...e];let n=new Set;return e.forEach(t=>{let r=cy.get(h(t.type)??"");if(r===void 0)return;let o=h(t.call_id);if(o===void 0)return;let i=e.findIndex((s,a)=>!n.has(a)&&h(s.type)===r&&h(s.call_id)===o);i>=0&&n.add(i)}),e.flatMap((t,r)=>{let o=h(t.type)??"",i=cy.get(o);if(i!==void 0){let s=h(t.call_id),a=s===void 0?void 0:e.find(d=>h(d.type)===i&&h(d.call_id)===s);return _S(a===void 0?[t]:[t,a]).flatMap(d=>{let u=Fj(d);return u===void 0?[]:[u]})}return o==="function_call_output"||o==="custom_tool_call_output"?n.has(r)?[]:_S([t]).flatMap(s=>{let a=Fj(s);return a===void 0?[]:[a]}):[t]})}function Fj(e){let n=e.structured,t=/^item-\d+$/.test(e.itemKey)?void 0:e.itemKey,r=t===void 0?{}:{id:t},o=typeof n.output=="string"?n.output:"";switch(h(n.kind)){case"codex_command_execution":{let i=que(o);return{type:"commandExecution",...r,...i===void 0?{}:{codex_protocol_failure_reason:i},command:h(n.command)??"command",...h(n.tool_name)===void 0?{}:{toolName:h(n.tool_name)},cwd:h(n.cwd)??"",status:h(n.status)??"",...h(n.process_id)===void 0||h(n.process_id)===""?{}:{processId:h(n.process_id)},aggregatedOutput:o}}case"codex_file_change":return{type:"fileChange",...r,status:h(n.status)??"",patchText:h(n.patch_text)??e.body,changes:Ne(n.changes)??[]};default:return}}function que(e){let n="unsupported call:",t=e.trim();if(!t.toLowerCase().startsWith(n))return;let r=t.slice(n.length).trim();return`Codex emitted unsupported tool call: ${r===""?"unknown":r}`}function Nj(e,n){if(n.length===0)return[...e];let t=zj(e),r=zj(n),o=new Set,i=r.map(d=>{let u=d.exactKey===void 0?-1:t.findIndex((l,p)=>!o.has(p)&&l.exactKey===d.exactKey);if(u>=0)return o.add(u),{kind:"read",readIndex:u};let c=d.semanticKey===void 0?-1:t.findIndex((l,p)=>!o.has(p)&&l.semanticKey===d.semanticKey);return c>=0?(o.add(c),{kind:"read",readIndex:c}):{kind:"session",raw:d.raw}}),s=[],a=0;for(let d of i)switch(d.kind){case"read":{for(;a<d.readIndex;){if(!o.has(a)){let c=t[a];c!==void 0&&s.push(c.raw)}a+=1}let u=t[d.readIndex];u!==void 0&&s.push(u.raw),a=Math.max(a,d.readIndex+1);break}case"session":s.push(d.raw);break}for(;a<t.length;){if(!o.has(a)){let d=t[a];d!==void 0&&s.push(d.raw)}a+=1}return s}function zj(e){return e.map((n,t)=>{let r=rc(n,t).find(o=>o.body.trim()!=="");return r===void 0?{raw:n,exactKey:void 0,semanticKey:void 0}:{raw:n,exactKey:Nue(r),semanticKey:Uue(r)}})}function Nue(e){return`${h(e.structured.kind)??""}:${e.itemKey}`}function Uue(e){let n=h(e.structured.kind)??"";switch(n){case"codex_command_execution":return JSON.stringify([n,h(e.structured.command)??"",h(e.structured.cwd)??"",h(e.structured.output)??e.body]);case"codex_file_change":return JSON.stringify([n,h(e.structured.patch_text)??e.body]);case"codex_reasoning":return JSON.stringify([n,h(e.structured.content)??e.body]);case"codex_terminal_input":return JSON.stringify([n,h(e.structured.input_text)??e.body]);default:return JSON.stringify([n,e.body])}}function py(e){return UL(e)}function NS(e){return BL(e)}function Bue(e){return new Promise(n=>{setTimeout(n,e)})}var Mue,Aue,cy,zue,US=F(()=>{"use strict";zp();Hn();ic();eS();ey();$n();RS();$S();oj();Lj();uy();Mue=[1e3,5e3],Aue=16;cy=new Map([["function_call","function_call_output"],["custom_tool_call","custom_tool_call_output"]]),zue=new Set([...cy.keys(),...cy.values()])});import{execFile as Jue}from"node:child_process";import{copyFileSync as Bj,existsSync as BS,mkdirSync as Gp,readFileSync as Jj,readdirSync as Zp,rmSync as Uj,statSync as Kj,writeFileSync as Vj}from"node:fs";import{homedir as Kue}from"node:os";import{dirname as JS,join as vo,resolve as KS}from"node:path";import{promisify as Vue}from"node:util";function Que(e=process.env){let n=e[Wue];if(n===void 0)return!0;let t=n.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function Qp(e=process.env){let n=e.LINZUMI_GIT_SAFETY_SNAPSHOTS_DIR;return n!==void 0&&n.trim()!==""?KS(n):KS(Kue(),".linzumi","safety-snapshots")}async function id(e,n){try{let{stdout:t,stderr:r}=await Wj("git",[...n],{cwd:e,encoding:"utf8",timeout:Hj,maxBuffer:67108864});return{ok:!0,stdout:t,stderr:r}}catch(t){let r=t;return{ok:!1,stdout:typeof r.stdout=="string"?r.stdout:"",stderr:typeof r.stderr=="string"?r.stderr:t instanceof Error?t.message:String(t)}}}function Xue(e){let n=e.split("\0"),t=[];for(let r=0;r<n.length;r+=1){let o=n[r];if(o===void 0||o.length<4)continue;let i=o.slice(0,2),s=o.slice(3);t.push({status:i,path:s}),(i.includes("R")||i.includes("C"))&&(r+=1)}return t}function fy(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return n===""?"x":n}function Yue(e){let n=new Date(e.nowMs).toISOString().replace(/-|:|\..*$/g,"").replace("T","-"),t=fy(e.threadId).slice(-12),r=fy(e.turnRef).slice(-12);return`${n}-${t}-${r}`}function ece(e){return`refs/linzumi/safety/${e}`}async function nce(e){let n=e.env??process.env;if(!Que(n))return{kind:"disabled"};let t=Date.now(),r=()=>Date.now()-t,o=await id(e.cwd,["status","--porcelain=v1","-z","--untracked-files=all"]);if(!o.ok)return o.stderr.toLowerCase().includes("not a git repository")?{kind:"not_git",durationMs:r()}:{kind:"error",message:`git status failed: ${o.stderr.trim()}`,durationMs:r()};let i=Xue(o.stdout);if(i.length===0)return{kind:"clean",durationMs:r()};try{let s=e.nowMs??t,a=Yue({threadId:e.threadId,turnRef:e.turnRef,nowMs:s}),d=e.snapshotsRoot??Qp(n),u=vo(d,fy(e.threadId),`${fy(e.turnRef)}-${s}`),c=e.maxTotalBytes??Hue,l=i.filter(z=>z.status==="??").map(z=>z.path),p=i.filter(z=>z.status!=="??"&&z.status!=="!!").map(z=>z.path),m=await id(e.cwd,["rev-parse","--show-toplevel"]),f=m.ok?m.stdout.trim():e.cwd,y=await id(e.cwd,["branch","--show-current"]),x=y.ok&&y.stdout.trim()!==""?y.stdout.trim():void 0,b=await id(e.cwd,["rev-parse","HEAD"]),S=b.ok?b.stdout.trim():void 0,v,w;if(p.length>0){let z=await id(e.cwd,["stash","create",`linzumi safety snapshot ${a}`]),M=z.ok?z.stdout.trim():"";if(M!==""){v=M;let J=ece(a);w=(await id(e.cwd,["update-ref",J,M])).ok?J:void 0}}Gp(u,{recursive:!0});let k=[],R=0,P=(z,M)=>{let J=vo(f,z),K=0;try{let G=Kj(J);if(!G.isFile())return!1;if(K=G.size,R+K>c)return k.push({path:z,bytes:K,reason:"size_cap"}),!1;let W=vo(u,M,z);return Gp(JS(W),{recursive:!0}),Bj(J,W),R+=K,!0}catch{return k.push({path:z,bytes:K,reason:"copy_error"}),!1}},O=l.filter(z=>P(z,"untracked")),E=v===void 0&&p.length>0?p.filter(z=>P(z,"tracked")):[],j={version:1,id:a,createdAtMs:s,threadId:e.threadId,turnRef:e.turnRef,cwd:e.cwd,repoRoot:f,branch:x,headCommit:S,stashCommit:v,safetyRef:w,trackedPaths:p,untrackedPaths:O,trackedFallbackPaths:E,skippedFiles:k,copiedBytes:R,durationMs:r()};return Vj(vo(u,"manifest.json"),`${JSON.stringify(j,null,2)}
|
|
562
|
-
`),{kind:"snapshot",manifest:j,snapshotDir:u}}catch(s){return{kind:"error",message:s instanceof Error?s.message:String(s),durationMs:r()}}}function my(e){let n=[],t;try{t=Zp(e)}catch{return[]}for(let r of t){let o=vo(e,r),i;try{i=Zp(o)}catch{continue}for(let s of i){let a=vo(o,s);try{let d=JSON.parse(Jj(vo(a,"manifest.json"),"utf8"));d.version===1&&typeof d.id=="string"&&n.push({manifest:d,snapshotDir:a})}catch{}}}return n.sort((r,o)=>o.manifest.createdAtMs-r.manifest.createdAtMs)}async function Gj(e){let{manifest:n,snapshotDir:t}=e.snapshot,r=KS(e.toDir);if(BS(r)&&Zp(r).length>0)throw new Error(`refusing to restore into non-empty directory: ${r} (recovery never clobbers existing state)`);Gp(r,{recursive:!0});let o=[];for(let a of n.untrackedPaths){let d=vo(t,"untracked",a);if(!BS(d))continue;let u=vo(r,a);Gp(JS(u),{recursive:!0}),Bj(d,u),o.push(a)}let i=[],s=[];for(let a of n.trackedPaths){let d;if(n.stashCommit!==void 0)try{let{stdout:c}=await Wj("git",["show",`${n.stashCommit}:${a}`],{cwd:n.repoRoot,encoding:"buffer",timeout:Hj,maxBuffer:536870912});d=c}catch{d=void 0}if(d===void 0){let c=vo(t,"tracked",a);BS(c)&&(d=Jj(c))}if(d===void 0){s.push(a);continue}let u=vo(r,a);Gp(JS(u),{recursive:!0}),Vj(u,d),i.push(a)}return{restoredDir:r,restoredTracked:i,restoredUntracked:o,missingTracked:s,stashCommit:n.stashCommit,safetyRef:n.safetyRef}}async function Zj(e){let n=e.nowMs??Date.now(),t=e.maxAgeMs??Gue,r=e.maxCount??Zue,o=my(e.snapshotsRoot),i=o.filter(l=>n-l.manifest.createdAtMs>t),a=o.filter(l=>n-l.manifest.createdAtMs<=t).slice(r),d=[...i,...a],u=[],c=[];for(let l of d){let{manifest:p,snapshotDir:m}=l;p.safetyRef!==void 0&&p.stashCommit!==void 0&&(await id(p.repoRoot,["update-ref","-d",p.safetyRef,p.stashCommit])).ok&&c.push(p.safetyRef);try{Uj(m,{recursive:!0,force:!0}),u.push(m)}catch{}}try{for(let l of Zp(e.snapshotsRoot)){let p=vo(e.snapshotsRoot,l);try{Kj(p).isDirectory()&&Zp(p).length===0&&Uj(p,{recursive:!0,force:!0})}catch{}}}catch{}return{removedSnapshotDirs:u,removedRefs:c}}function rce(e){return tce.some(n=>n.test(e))}function ice(e,n){if(Pi.delete(e),Pi.size>=oce){let t=Pi.keys().next().value;t!==void 0&&Pi.delete(t)}Pi.set(e,n)}async function Xp(e){try{let n=await nce({cwd:e.cwd,threadId:e.threadKey,turnRef:e.turnRef,snapshotsRoot:e.snapshotsRoot,env:e.env});switch(n.kind){case"snapshot":{ice(e.threadKey,{manifest:n.manifest,destructiveCommand:void 0}),e.log("git_safety.snapshot_captured",{thread_key:e.threadKey,turn_ref:e.turnRef,snapshot_id:n.manifest.id,stash_commit:n.manifest.stashCommit??null,safety_ref:n.manifest.safetyRef??null,tracked_paths:n.manifest.trackedPaths.length,untracked_paths:n.manifest.untrackedPaths.length,copied_bytes:n.manifest.copiedBytes,skipped_files:n.manifest.skippedFiles.length,duration_ms:n.manifest.durationMs});for(let t of n.manifest.skippedFiles)e.log("git_safety.snapshot_file_skipped",{thread_key:e.threadKey,snapshot_id:n.manifest.id,path:t.path,bytes:t.bytes,reason:t.reason});break}case"error":Pi.delete(e.threadKey),e.log("git_safety.snapshot_failed",{thread_key:e.threadKey,turn_ref:e.turnRef,cwd:e.cwd,message:n.message,duration_ms:n.durationMs});break;case"clean":case"not_git":case"disabled":Pi.delete(e.threadKey);break}return n}catch(n){e.log("git_safety.snapshot_failed",{thread_key:e.threadKey,turn_ref:e.turnRef,cwd:e.cwd,message:n instanceof Error?n.message:String(n)});return}}function hy(e,n){let t=Pi.get(e);t!==void 0&&t.destructiveCommand===void 0&&rce(n)&&(t.destructiveCommand=n)}function sce(e){let n=e.stashCommit===void 0?"":` Tracked changes are also directly recoverable with \`git stash apply ${e.stashCommit}\`.`;return`This turn ran destructive git commands on a working tree that had uncommitted changes. Linzumi saved a safety snapshot of those changes on this computer before the turn started: \`${e.id}\`. Restore a copy (into a fresh directory, never overwriting current files) with \`linzumi safety-snapshots restore ${e.id}\` (or \`npx -y @linzumi/cli safety-snapshots restore ${e.id}\` if linzumi is not on PATH).${n}`}function ace(e){let n=Pi.get(e);if(!(n===void 0||n.destructiveCommand===void 0))return Pi.delete(e),{body:sce(n.manifest),clientMessageId:`git-safety-snapshot-${n.manifest.id}`,snapshotId:n.manifest.id}}async function gy(e){let n=ace(e.threadKey);if(n!==void 0)try{await e.push("session:post_thread_message",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,body:n.body,client_message_id:n.clientMessageId,payload:{metadata:{local_codex_runner:{event_type:"git_safety_snapshot_notice"}}}}),e.log("git_safety.snapshot_notice_posted",{thread_id:e.threadId,snapshot_id:n.snapshotId})}catch(t){e.log("git_safety.snapshot_notice_post_failed",{thread_id:e.threadId,snapshot_id:n.snapshotId,message:t instanceof Error?t.message:String(t)})}}var Wj,Wue,Hue,Gue,Zue,Hj,Hp,tce,Pi,oce,yy=F(()=>{"use strict";Wj=Vue(Jue),Wue="LINZUMI_GIT_SAFETY_SNAPSHOTS",Hue=200*1024*1024,Gue=4320*60*1e3,Zue=50,Hj=3e4;Hp=String.raw`\bgit\s+(?:-[Cc]\s+\S+\s+|-\S+\s+)*`,tce=[new RegExp(`${Hp}restore\\b`),new RegExp(`${Hp}checkout\\b[^\\n;|&]*(\\s--(\\s|$)|\\s-f\\b|\\s\\.(\\s|$))`),new RegExp(`${Hp}reset\\b[^\\n;|&]*--(hard|merge|keep)\\b`),new RegExp(`${Hp}clean\\b`),new RegExp(`${Hp}stash\\s+(drop|clear|pop)\\b`),/\brm\s+(-[A-Za-z]*f[A-Za-z]*)\b/];Pi=new Map,oce=500});function xy(e){return Array.isArray(e)?e:typeof e=="string"&&e.trim()!==""?[{type:"text",text:e.trim()}]:[]}function _y(e){if(typeof e=="string"){let t=e.trim();return t===""?void 0:t}if(!Array.isArray(e))return;let n=e.flatMap(t=>{if(typeof t!="object"||t===null||Array.isArray(t))return[];let r=t,o=typeof r.text=="string"?r.text:typeof r.content=="string"?r.content:void 0;return o===void 0?[]:[o]}).join(`
|
|
562
|
+
`);return{body:i===""?"Plan":i,structured:{kind:"agent_plan",item_id:e,transcript_unit_id:`agent_plan:${e}`,stream_state:t,provider:n.provider,provider_turn_id:n.providerTurnId,explanation:n.explanation,steps:n.steps}}}case"commandOutput":{let r=n.chunks[n.chunks.length-1],o=Hg(e,{command:n.command,output:Sde(n.chunks),processId:n.processId,stream:r?.stream??""},t);return{body:kde(o),structured:o}}case"fileChange":{let r=OS(n.patchText);return{body:r,structured:wL(e,r,t,t==="completed"?"completed":n.status)}}case"terminalInput":return{body:n.inputText,structured:{kind:"codex_terminal_input",item_id:e,transcript_unit_id:`codex_terminal_input:${e}`,stream_state:t,process_id:n.processId??"",input_text:n.inputText}};case"webSearch":return{body:SS(n.queries),structured:SL(e,n.queries,t)};case"agentStatus":{let r=yS(e,{...n,body:tc(n.body)},t);return{body:jp(n.title,tc(n.body)),structured:r}}case"agentTaskUpdate":{let r=tc(n.body),o=xS(e,{...n,body:r},t);return{body:jp(n.title,r??n.progressLabel),structured:o}}}}function kde(e){let n=h(e.command)??"",t=typeof e.output=="string"?e.output:"";return[`$ ${n}`,t].filter(r=>r.trim()!=="").join(`
|
|
563
563
|
|
|
564
|
-
`).trim();return n===""?void 0:n}function sd(e){return e.fusedSeqs===void 0||e.fusedSeqs.length===0?[e.seq]:e.fusedSeqs}function dce(e){let n=e.actorSlug===void 0||e.actorSlug.trim()===""?"unknown":e.actorSlug.trim(),t=e.actorUserId===void 0?"unknown":e.actorUserId.toString();return[`Kandan message seq=${e.seq} from ${n} (user_id=${t}):`,"",e.body].join(`
|
|
565
|
-
`)}function
|
|
564
|
+
`)}function lj(e){switch(h(e.type)){case"reasoning":return"reasoning";case"agentMessage":return"assistant";case"message":return h(e.role)==="assistant"?"assistant":void 0;case"commandExecution":return"commandOutput";case"terminalInput":return"terminalInput";case"fileChange":case"file_change":return"fileChange";case"web_search_call":case"webSearchCall":case"webSearch":return"webSearch";case"agentStatus":return"agentStatus";case"agentTaskUpdate":return"agentTaskUpdate";default:return}}function pj(e){return e.flatMap((n,t)=>{if(!Z(n))return[];let r=lj(n);return r===void 0||r==="webSearch"?[]:rc(n,t).filter(o=>o.body.trim()!=="").map(o=>({snapshotIndex:t,itemId:h(n.id),streamKind:r,body:o.body,structured:o.structured}))})}function LS(e,n){let t=h(e.kind)??"codex_output";return{...e,item_id:n,transcript_unit_id:`${t}:${n}`}}function jS(e,n,t,r){if(t==="webSearch")return`local-codex-search-${ij("sha256").update(`${e}:${n}:web-search`).digest("hex").slice(0,32)}`;let o={assistant:"",reasoning:"reasoning:",agentPlan:"agent-plan:",commandOutput:"command:",fileChange:"file-change:",terminalInput:"terminal:",agentStatus:"agent-status:",agentTaskUpdate:"agent-task:"};return`local-codex-stream-${ij("sha256").update(`${e}:${n}:${o[t]}${r}`).digest("hex").slice(0,32)}`}function Jp(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}var wde,FS=F(()=>{"use strict";zp();Hn();$n();wde={pending:"PENDING",inProgress:"IN_PROGRESS",completed:"COMPLETED"}});function bj(e){return e!==void 0&&Cde.has(e)}function Ede(e){if(e===void 0)return;let n=h(e.type);if(n!=="mcpToolCall"&&n!=="dynamicToolCall"&&n!=="collabAgentToolCall"||h(e.status)!=="completed"||e.error!==void 0&&e.error!==null||e.success===!1)return;let t=h(e.tool)??"";return(t.split("__").pop()??t)===Pde?"reply":"action"}function wj(e,n){let t=Ede(n);t==="reply"?e.agentReplyToolCallSeen=!0:t==="action"&&(e.agentActionToolCallSeen=!0)}function Mde(e){return`The model appears stuck in a loop - stopped after ${e} reasoning steps with no output or tool call (retry to try again).`}function Ade(e){return e!=="reasoning"}function $de(e){return e!==void 0&&e.startsWith(vj)}function Ode(e){for(let n of e){let t=Sj(A(n));if(t!==void 0)return t}}function Sj(e){if(e===void 0)return;let n=h(e.codex_protocol_failure_reason)??h(e.protocolFailureReason);if(n!==void 0)return n;let t=h(e.type);if(t!=="function_call_output"&&t!=="custom_tool_call_output")return;let r=h(e.output)??h(e.result)??h(e.text)??h(e.content),o=Lde(r);return o===void 0?void 0:`${vj}: ${o}`}function Lde(e){let n="unsupported call:";if(e===void 0)return;let t=e.trim();if(!t.toLowerCase().startsWith(n))return;let r=t.slice(n.length).trim();return r===""?"unknown":r}function kj(){return{phase:"running",turns:new Map,terminalTurnIds:new Set,bufferedTurns:new Map,consecutiveEmptyTurns:0,lastEmptyTurnCause:void 0,lastUpstreamErrorSummary:void 0,consecutiveIsolatedRejections:0,costCap402Seen:!1}}function Cj(e,n,t){let r=[];return e.phase==="running"&&tue(e,t,r),Tj(e,n,t,r),r}function Tj(e,n,t,r){if(n.source==="lifecycle"){Ude(e,n.kind,n.reason,t,r);return}if(e.phase==="dead"){r.push(gn("pipeline.loop.event_after_death",{source:n.source}));return}if(e.phase==="closing"){r.push(gn("pipeline.loop.event_after_close",{source:n.source}));return}if(n.source==="snapshot"){let o=e.bufferedTurns.get(n.turnId);if(o!==void 0){o.push(n);return}eue(e,n.turnId,n.snapshot,t,r);return}Nde(e,n,t,r)}function qde(e){return zde.has(e)}function Nde(e,n,t,r){let o=n.notification.method,i=n.notification.params??{};if(o===Vp)return;if(o===lc){Qde(e,i,t,r);return}if(!Fde.has(o))return;let a=Jp(i)??ay(e);if(a===void 0){r.push(gn("pipeline.loop.notification_without_turn",{method:o}));return}if(e.terminalTurnIds.has(a)){r.push(gn("pipeline.loop.notification_for_terminal_turn",{method:o,turn_id:a}));return}let d=e.turns.get(a);if(d===void 0){let l=t.sourceSeqForTurn(a);if(l===void 0){nue(e,a,n,r);return}d=Bde(e,a,l)}if(d.notificationCount+=1,qde(o)&&(d.modelInteractionSeen=!0),o==="turn/started")return;if(o==="turn/completed"){Jde(d,r);return}let u=jde.get(o);if(u!==void 0){let l=Zde(o,i,d,{costCap402Seen:e.costCap402Seen,midStreamResumeAttemptAtMs:t.midStreamResumeAttemptAtMsForSeq?.(d.sourceSeq)});l.autoResumeMidStreamStall?r.push(gn("codex.mid_stream_stall_auto_resume_flagged",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i)})):l.midStreamResumeRateLimitSuppressed?r.push(gn("codex.mid_stream_stall_resume_suppressed_rate_limit",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i)})):l.midStreamResumeAttemptBurnedAtMs!==void 0&&r.push(gn("codex.mid_stream_stall_second_stall_after_resume",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,resume_attempt_at_ms:l.midStreamResumeAttemptBurnedAtMs,reason:uc(i)})),l.autoRetryPreFirstByteStall?r.push(gn("codex.pre_first_byte_stall_auto_retry_flagged",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i),evidence_class:zS(d)})):l.costCapAutoRetrySuppressed&&r.push(gn("codex.pre_first_byte_stall_retry_suppressed_cost_cap",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reason:uc(i),flavor:i.midStreamResumableStall===!0?"mid_stream_resume":"pre_first_byte_retry"})),oy(e,d,u,uc(i),r,t,u,l);return}if(o==="error"){d.errorNotificationCount+=1;let l=Pue(i);l!==void 0&&(d.toolFatalSeen=!0,d.toolFatalDetail===void 0&&l!==""&&(d.toolFatalDetail=l),r.push(gn("codex.tool_fatal_captured",{turn_id:d.turnId,detail:l===""?null:l})));let p=hue(i);p!==void 0&&(d.upstreamRejectedSeen=!0,d.upstreamRejectedDetail===void 0&&p!==""&&(d.upstreamRejectedDetail=p),r.push(gn("codex.upstream_rejection_captured",{turn_id:d.turnId,detail:p===""?null:p})));let m=bue(i);m!==void 0&&(d.providerOutageFlaggedSeen=!0,d.providerOutageDetail===void 0&&m!==""&&(d.providerOutageDetail=m),r.push(gn("codex.provider_outage_flagged_captured",{turn_id:d.turnId,detail:m===""?null:m})));let f=dy(i),y=oue(i);y!==void 0&&(d.edgeBlockEvidence=y),f!==void 0&&(d.lastUpstreamErrorHttpStatus===void 0||f>d.lastUpstreamErrorHttpStatus)&&(d.lastUpstreamErrorHttpStatus=f),f===402&&!e.costCap402Seen&&(e.costCap402Seen=!0,r.push(gn("codex.cost_cap_402_seen",{turn_id:d.turnId})));let x=rue(i),b=!1;if(x!==void 0)d.lastUpstreamErrorReason=x,r.push(gn("codex.upstream_error_captured",{turn_id:d.turnId,reason:x}));else{let v=Wp(i);v!==void 0&&(d.lastErrorDiagnosticText=v,b=!0,r.push(gn("codex.error_without_http_status_captured",{turn_id:d.turnId,diagnostic_text:v})))}l===void 0&&p===void 0&&m===void 0&&f===void 0&&x===void 0&&!b&&(d.unattributedErrorNotificationCount+=1);let S=fue(i);S!==void 0&&(d.lastUpstreamErrorSummary=S,e.lastUpstreamErrorSummary=S,r.push(gn("codex.upstream_turn_error_captured",{turn_id:d.turnId,upstream_error:S})));return}if(o==="item/completed"||o==="response_item"){Xde(d,i,t,r);return}let c=aj(o,i);if(c===void 0){if(o==="turn/plan/updated"){let l=h(i.threadId);r.push(gn("harness.plan_snapshot_rejected",{turn_id:a,...l===void 0?{}:{thread_id:l}}))}return}if(d.phase==="active"){if(Ade(c.streamKind))d.reasoningStepsWithoutProgress=0;else if(d.reasoningStepsWithoutProgress+=1,d.reasoningStepsWithoutProgress>gj){let l=Mde(d.reasoningStepsWithoutProgress);r.push(gn("codex.reasoning_loop_breaker_tripped",{thread_key:t.threadKey,turn_id:d.turnId,source_seq:d.sourceSeq,reasoning_steps_without_progress:d.reasoningStepsWithoutProgress,max_reasoning_steps_without_progress:gj})),oy(e,d,"failed",l,r,t,"interrupted");return}}Dj(d,c,t,r)}function Ude(e,n,t,r,o){if(n==="codexDied"){if(e.phase==="dead")return;for(let i of[...e.turns.values()])oy(e,i,"failed",t,o,r,"interrupted");for(let[i,s]of e.bufferedTurns)o.push(gn("pipeline.loop.buffered_turn_dropped",{turn_id:i,buffered_event_count:s.length,reason:t})),o.push({type:"turnTerminal",turnId:i,outcome:"failed",reason:t}),sy(e,i);e.bufferedTurns.clear(),e.phase="dead",o.push(gn("pipeline.loop.codex_died",{reason:t}));return}e.phase==="running"&&(e.phase="closing",o.push(gn("pipeline.loop.closing",{kind:n,reason:t})))}function Bde(e,n,t){let r={turnId:n,sourceSeq:t,phase:"active",protocolFailureReason:void 0,lastUpstreamErrorReason:void 0,edgeBlockEvidence:void 0,lastErrorDiagnosticText:void 0,toolFatalSeen:!1,toolFatalDetail:void 0,upstreamRejectedSeen:!1,upstreamRejectedDetail:void 0,providerOutageFlaggedSeen:!1,providerOutageDetail:void 0,lastUpstreamErrorHttpStatus:void 0,lastUpstreamErrorSummary:void 0,errorNotificationCount:0,unattributedErrorNotificationCount:0,notificationCount:0,modelInteractionSeen:!1,reasoningStepsWithoutProgress:0,agentReplyToolCallSeen:!1,agentActionToolCallSeen:!1,items:[]};return e.turns.set(n,r),r}function Jde(e,n){if(e.phase==="completing"){n.push(gn("pipeline.loop.duplicate_turn_completed",{turn_id:e.turnId}));return}e.phase="completing",n.push({type:"requestSnapshot",turnId:e.turnId})}function Pj(e){return e===429||e>=500&&e<=599?"transient":"deterministic"}function Vde(e){let n=Ij.exec(e);return n!==null?Pj(Number(n[1])):Kde.test(e)?"transient":"deterministic"}function zS(e){let n=!1,t=e.upstreamRejectedSeen||e.providerOutageFlaggedSeen||e.toolFatalSeen||e.modelInteractionSeen||e.unattributedErrorNotificationCount>0,r=0;e.lastUpstreamErrorHttpStatus!==void 0&&(r+=1,Pj(e.lastUpstreamErrorHttpStatus)==="transient"?n=!0:t=!0);for(let o of[e.lastUpstreamErrorReason,e.lastErrorDiagnosticText])o!==void 0&&(r+=1,Vde(o)==="transient"?n=!0:t=!0);return e.errorNotificationCount>r+e.unattributedErrorNotificationCount&&!e.upstreamRejectedSeen&&!e.providerOutageFlaggedSeen&&!e.toolFatalSeen&&(t=!0),t?"deterministic":n?"transient":"none"}function yj(e){if(e.lastUpstreamErrorHttpStatus===429)return!0;for(let n of[e.lastUpstreamErrorReason,e.lastErrorDiagnosticText]){if(n===void 0)continue;let t=Ij.exec(n);if(t!==null&&Number(t[1])===429)return!0}return!1}function Hde(e){return` (An automatic resume was attempted at ${new Date(e).toISOString()} and the stream stalled again, so it will not be retried automatically.)`}function Gde(e){return` (An automatic resume was attempted at ${new Date(e).toISOString()} after the stream stalled; it did not complete.)`}function Zde(e,n,t,r={costCap402Seen:!1}){let o=e==="turn/failed"&&h(A(n.error)?.code)==="idle_stream_timeout",i=e==="turn/failed"&&n.retryable===!0,s=e==="turn/failed"&&bo(n.fate)?n.fate:void 0;if(!o)return{autoRetryPreFirstByteStall:!1,messageStateRetryable:i,costCapAutoRetrySuppressed:!1,messageStateFate:s,autoResumeMidStreamStall:!1,midStreamResumeRateLimitSuppressed:!1};let a=r.midStreamResumeAttemptAtMs,d=a!==void 0,u=zS(t)!=="deterministic",c=n.preFirstByteStall===!0&&u,l=n.midStreamResumableStall===!0,p=l&&yj(t),m=zS({...t,modelInteractionSeen:!1})!=="deterministic",f=l&&!d&&!p&&m,y=(c&&!d||f)&&r.costCap402Seen,x=c&&!d&&!y,b=f&&!y,S=l&&!d&&p;return{autoRetryPreFirstByteStall:x,messageStateRetryable:c||i,costCapAutoRetrySuppressed:y,messageStateFate:s??(yj(t)?"rate_limited":"transient_upstream"),autoResumeMidStreamStall:b,midStreamResumeRateLimitSuppressed:S,...d?{midStreamResumeAttemptBurnedAtMs:a}:{}}}function Ej(e){return e>0?` (${e} automatic ${e===1?"retry":"retries"} did not help.)`:""}function oy(e,n,t,r,o,i,s=t,a={autoRetryPreFirstByteStall:!1,messageStateRetryable:!1,costCapAutoRetrySuppressed:!1,messageStateFate:void 0,autoResumeMidStreamStall:!1,midStreamResumeRateLimitSuppressed:!1}){let d=a.autoRetryPreFirstByteStall||a.costCapAutoRetrySuppressed?`${r}${Ej(i.autoRetryAttemptsForSeq?.(n.sourceSeq)??0)}${a.costCapAutoRetrySuppressed?Rj:""}`:r;if(a.midStreamResumeRateLimitSuppressed&&(d+=Wde),t==="failed")if(a.midStreamResumeAttemptBurnedAtMs!==void 0)d+=Hde(a.midStreamResumeAttemptBurnedAtMs);else{let u=i.midStreamResumeAttemptAtMsForSeq?.(n.sourceSeq);u!==void 0&&(d+=Gde(u))}for(let u of n.items){if(!u.posted||bj(u.emittedStreamState))continue;let c=dc(u.wireItemKey,u.content,s);o.push({type:"enqueue",kind:At.finalizeRow,data:{...iy(i,n,u,c),stream_snapshot_index:Kp(u),terminal_outcome:t,reason:r},resolution:"must_ack"}),u.emittedStreamState=s,u.lastEmittedBody=c.body}o.push({type:"enqueue",kind:At.messageState,data:{thread_key:i.threadKey,turn_id:n.turnId,seq:n.sourceSeq,status:"failed",reason:d,...a.messageStateRetryable?{retryable:!0}:{},...a.messageStateFate===void 0?{}:{fate:a.messageStateFate},...(()=>{let u=a.messageStateFate===void 0?void 0:i.ladderHistoryForSeq?.(n.sourceSeq,a.messageStateFate);return u===void 0?{}:{ladder:u}})(),...(()=>{let u=n.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary;return u===void 0?{}:{upstream_error:u}})()},resolution:"must_ack"}),o.push({type:"turnTerminal",turnId:n.turnId,outcome:t,reason:d,...a.autoRetryPreFirstByteStall?{retryableEmptyTurn:!0}:{},...a.autoResumeMidStreamStall?{autoResumeMidStreamStall:!0}:{},...a.messageStateFate===void 0?{}:{fate:a.messageStateFate}}),e.turns.delete(n.turnId),sy(e,n.turnId)}function Qde(e,n,t,r){let o=h(n.turnId),i=h(n.reason)??"turn source-seq mapping failed";if(o===void 0||e.terminalTurnIds.has(o))return;let s=e.turns.get(o);if(s!==void 0){oy(e,s,"failed",i,r,t);return}let a=e.bufferedTurns.get(o);e.bufferedTurns.delete(o),r.push(gn("pipeline.loop.buffered_turn_failed",{level:"warn",turn_id:o,buffered_event_count:a?.length??0,reason:i})),r.push({type:"turnTerminal",turnId:o,outcome:"failed",reason:i}),sy(e,o)}function Dj(e,n,t,r){if(e.phase!=="active"){r.push(gn("pipeline.loop.delta_for_completing_turn",{turn_id:e.turnId,stream_kind:n.streamKind}));return}let o=Aj(e,n.streamKind,n.itemId,t);if(o.completed){r.push(gn("pipeline.loop.delta_for_completed_item",{turn_id:e.turnId,item_key:o.itemKey}));return}o.content=uj(o.content,n);let i=o.nextDeltaIndex;o.nextDeltaIndex+=1;let s=n.streamKind==="terminalInput"?"completed":"streaming";Mj(e,o,i,s,t,r)}function Xde(e,n,t,r){let o=A(n.item);o!==void 0&&(e.protocolFailureReason??=Sj(o)),wj(e,o??n);let i=cj(n);if(i===void 0)return;if(i.streamKind==="webSearch"){Dj(e,{streamKind:"webSearch",itemId:i.itemId,queries:i.content.streamKind==="webSearch"?i.content.queries:[]},t,r);return}if(e.phase!=="active"){r.push(gn("pipeline.loop.item_completed_for_completing_turn",{turn_id:e.turnId,stream_kind:i.streamKind}));return}let s=Aj(e,i.streamKind,i.itemId,t,{adoptOpenIdLess:!0});if(s.completed&&!Yde(s,i))return;s.content=i.content,s.completed=!0;let a=dc(s.wireItemKey,s.content,"streaming");s.posted&&a.body===s.lastEmittedBody||Mj(e,s,Math.max(s.nextDeltaIndex-1,0),"streaming",t,r)}function Yde(e,n){return e.identity.streamKind!==n.streamKind?!1:n.streamKind==="agentStatus"||n.streamKind==="agentTaskUpdate"}function Mj(e,n,t,r,o,i){let s=dc(n.wireItemKey,n.content,r);if(!n.posted){if(s.body.trim()==="")return;i.push({type:"enqueue",kind:At.postStreamedRow,data:{...iy(o,e,n,s),delta_index:t,stream_snapshot_index:Kp(n)},resolution:"must_ack"}),n.posted=!0,n.emittedStreamState=r,n.lastEmittedBody=s.body,r==="completed"&&(n.completed=!0);return}i.push({type:"enqueue",kind:At.streamSnapshot,data:{...iy(o,e,n,s),delta_index:t,stream_snapshot_index:Kp(n)},coalesceKey:n.itemKey,resolution:"must_ack"}),n.emittedStreamState=r,n.lastEmittedBody=s.body}function Aj(e,n,t,r,o={adoptOpenIdLess:!1}){if(n==="webSearch")return e.items.find(s=>s.identity.streamKind==="webSearch")??xj(e,"webSearch",`web-search:${e.turnId}`,r);if(t!==void 0){let s=e.items.find(a=>a.identity.streamKind===n&&a.identity.itemId===t);if(s!==void 0)return s}let i=e.items.find(s=>s.identity.streamKind===n&&s.identity.itemId===void 0&&!s.completed);return t===void 0&&i!==void 0||t!==void 0&&o.adoptOpenIdLess&&i!==void 0?i:xj(e,n,t,r)}function xj(e,n,t,r){let o={turnId:e.turnId,itemId:t,itemIndex:e.items.length,streamKind:n},i=KL(o),s=t??i,a={identity:o,itemKey:i,wireItemKey:s,clientMessageId:jS(r.instanceId,e.turnId,n,s),content:dj(n),posted:!1,completed:!1,emittedStreamState:void 0,lastEmittedBody:void 0,nextDeltaIndex:0,nextStreamSnapshotIndex:1};return e.items.push(a),a}function eue(e,n,t,r,o){if(e.terminalTurnIds.has(n)){o.push(gn("pipeline.loop.duplicate_snapshot",{turn_id:n}));return}let i=e.turns.get(n);if(i===void 0){o.push(gn("pipeline.loop.snapshot_for_unknown_turn",{turn_id:n}));return}if(i.phase!=="completing"){o.push(gn("pipeline.loop.snapshot_for_active_turn",{turn_id:n}));return}let s=Array.isArray(t.items)?t.items:[];i.protocolFailureReason??=Ode(s);for(let Q of s)wj(i,A(Q));let a=pj(s),d=new Set,u=new Map;a.forEach((Q,_e)=>{if(Q.itemId===void 0)return;let Te=i.items.find(ae=>ae.posted&&!d.has(ae.itemKey)&&ae.identity.streamKind===Q.streamKind&&ae.identity.itemId===Q.itemId);Te!==void 0&&(d.add(Te.itemKey),u.set(_e,Te))});let c=new Map;for(let Q of i.items)Q.posted&&!d.has(Q.itemKey)&&Q.identity.itemId===void 0&&c.set(Q.identity.streamKind,(c.get(Q.identity.streamKind)??0)+1);let l=new Map;a.forEach((Q,_e)=>{u.has(_e)||l.set(Q.streamKind,(l.get(Q.streamKind)??0)+1)});let p=(Q,_e)=>{let Te=dc(Q.wireItemKey,Q.content,"completed").body.trim(),ae=_e.body.trim();return ae.startsWith(Te)||Te.startsWith(ae)};a.forEach((Q,_e)=>{if(u.has(_e))return;let Te=l.get(Q.streamKind)===c.get(Q.streamKind);if(Q.itemId!==void 0&&!Te)return;let ae=i.items.find(Ee=>Ee.posted&&!d.has(Ee.itemKey)&&Ee.identity.streamKind===Q.streamKind&&Ee.identity.itemId===void 0);ae!==void 0&&(Q.itemId!==void 0&&!p(ae,Q)||(d.add(ae.itemKey),u.set(_e,ae)))});for(let Q of i.items){let _e=[...u.entries()].find(([,ae])=>ae.itemKey===Q.itemKey);if(_e!==void 0){let ae=a[_e[0]];if(ae===void 0)continue;o.push({type:"enqueue",kind:At.finalizeRow,data:{thread_key:r.threadKey,turn_id:i.turnId,item_key:Q.itemKey,item_id:Q.wireItemKey,stream_kind:Q.identity.streamKind,item_index:Q.identity.itemIndex,source_seq:i.sourceSeq,client_message_id:Q.clientMessageId,body:ae.body,structured:LS(ae.structured,Q.wireItemKey),stream_snapshot_index:Kp(Q),terminal_outcome:"completed"},resolution:"must_ack"}),Q.emittedStreamState="completed",Q.lastEmittedBody=ae.body;continue}if(!Q.posted||bj(Q.emittedStreamState))continue;let Te=dc(Q.wireItemKey,Q.content,"completed");o.push({type:"enqueue",kind:At.finalizeRow,data:{...iy(r,i,Q,Te),stream_snapshot_index:Kp(Q),terminal_outcome:"completed"},resolution:"must_ack"}),Q.emittedStreamState="completed",Q.lastEmittedBody=Te.body}a.forEach((Q,_e)=>{if(u.has(_e))return;let Te=Q.itemId??`${i.turnId}:${Q.streamKind}:snapshot:${Q.snapshotIndex}`;o.push({type:"enqueue",kind:At.postCompletedRow,data:{thread_key:r.threadKey,turn_id:i.turnId,item_key:`${i.turnId}:${Q.streamKind}:${Q.itemId??`snapshot:${Q.snapshotIndex}`}`,item_id:Te,stream_kind:Q.streamKind,snapshot_index:Q.snapshotIndex,source_seq:i.sourceSeq,client_message_id:jS(r.instanceId,i.turnId,Q.streamKind,Te),body:Q.body,structured:LS(Q.structured,Te),stream_snapshot_index:1},resolution:"must_ack"})});let m=i.items.some(Q=>Q.identity.streamKind==="assistant"&&Q.posted)||a.some(Q=>Q.streamKind==="assistant"),f=i.agentActionToolCallSeen||i.items.some(Q=>Q.posted&&mj.has(Q.identity.streamKind))||a.some(Q=>mj.has(Q.streamKind)),y=r.linzumiAgentSession===!0&&m&&!i.agentReplyToolCallSeen&&!f,x=m&&!y,b=i.protocolFailureReason,S=b!==void 0&&$de(b)&&x,v=S?void 0:b,w=!x&&b===void 0&&i.lastUpstreamErrorReason===void 0?y?{cause:Rde}:Iue(i,a.length,i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary):void 0,k=!x&&v===void 0&&i.upstreamRejectedSeen,R=!x&&v===void 0&&i.providerOutageFlaggedSeen,P=sue(i.lastUpstreamErrorHttpStatus),O=!x&&v===void 0&&i.edgeBlockEvidence!==void 0,E=k&&!R&&!P,j=R||E?Sue({providerOutageFlagged:R,priorConsecutiveIsolatedRejections:e.consecutiveIsolatedRejections,stormDetail:i.providerOutageDetail,rejectionDetail:i.upstreamRejectedDetail}):void 0,z=j?.kind==="isolated_retry";E?e.consecutiveIsolatedRejections+=1:e.consecutiveIsolatedRejections=0;let M=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&i.lastErrorDiagnosticText===void 0&&!k&&iue(i.lastUpstreamErrorHttpStatus),J=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&P,K=!x&&v===void 0&&i.lastUpstreamErrorReason===void 0&&!k&&!M&&!J&&i.toolFatalSeen,G=j!==void 0?j.reason:J?aue(i.lastUpstreamErrorHttpStatus,i.upstreamRejectedDetail??i.lastErrorDiagnosticText):M?due(i.lastUpstreamErrorHttpStatus):K?uue(i.toolFatalDetail):i.lastUpstreamErrorReason??(y?Ide:w===void 0?fj:`${fj} [${w.cause}]`),W=w!==void 0&&v===void 0&&i.modelInteractionSeen&&i.lastErrorDiagnosticText===void 0&&!k&&!M&&!J&&!K;W?(e.consecutiveEmptyTurns+=1,e.lastEmptyTurnCause=w?.cause):(e.consecutiveEmptyTurns=0,e.lastEmptyTurnCause=void 0);let te=W&&e.consecutiveEmptyTurns>hj,me=W&&!te||z,ge=r.autoRetryAttemptsForSeq?.(i.sourceSeq)??0,ce=me&&e.costCap402Seen&&ge<wo,Ie=me&&!ce;O&&o.push(gn("codex.edge_blocked_captured",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,http_status:i.edgeBlockEvidence?.status,signature:i.edgeBlockEvidence?.signature}));let Re=te?`${Dde} (${e.consecutiveEmptyTurns} in a row${w===void 0?"":`: ${w.cause}`}).`:void 0,I=v??(x?void 0:Re??G),U=I===void 0?void 0:`${I}${Ej(W&&!te?ge:0)}${ce?Rj:""}`,ie=w!==void 0&&!te&&!k&&!M&&!J&&!K||z||O,se=ie||R?"transient_upstream":M?i.lastUpstreamErrorHttpStatus===void 0?"transient_upstream":AL(i.lastUpstreamErrorHttpStatus):"deterministic";ce&&o.push(gn("codex.empty_turn_auto_retry_suppressed_cost_cap",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:I??null,isolated_rejection_retry_suppressed:z})),te&&o.push(gn("codex.empty_turn_loop_guard_tripped",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,consecutive_empty_turns:e.consecutiveEmptyTurns,max_consecutive_empty_turns:hj,cause:w?.cause??null,last_upstream_error:i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary??null})),S?o.push(gn("codex.turn_completed_with_unsupported_tool_call_ignored",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:b})):b!==void 0&&o.push(gn("codex.turn_completed_with_protocol_failure",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,reason:b})),y&&o.push(gn("codex.agent_turn_narration_only_no_reply",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,streamed_item_count:i.items.length,snapshot_item_count:a.length,agent_reply_tool_call_seen:i.agentReplyToolCallSeen,agent_action_tool_call_seen:i.agentActionToolCallSeen,retryable_empty_turn:ie,empty_turn_loop_guard_tripped:te})),m||o.push(gn("codex.turn_completed_without_assistant_output",{thread_key:r.threadKey,turn_id:i.turnId,source_seq:i.sourceSeq,streamed_item_count:i.items.length,snapshot_item_count:a.length,notification_count:i.notificationCount,error_notification_count:i.errorNotificationCount,model_interaction_seen:i.modelInteractionSeen,last_error_diagnostic_text:i.lastErrorDiagnosticText??null,last_upstream_error_reason:i.lastUpstreamErrorReason??null,last_upstream_error_summary:i.lastUpstreamErrorSummary??null,empty_turn_cause:w?.cause??null,tool_fatal_seen:K,tool_fatal_detail:i.toolFatalDetail??null,upstream_rejected_seen:k,upstream_rejected_detail:i.upstreamRejectedDetail??null,upstream_terminal_4xx:J,last_upstream_error_http_status:i.lastUpstreamErrorHttpStatus??null,provider_outage_flagged:R,isolated_rejection_retry_granted:z,rejection_disposition:j?.kind??null,consecutive_isolated_rejections:e.consecutiveIsolatedRejections,retryable_empty_turn:ie,empty_turn_loop_guard_tripped:te,cost_cap_auto_retry_suppressed:ce})),o.push({type:"enqueue",kind:At.messageState,data:{thread_key:r.threadKey,turn_id:i.turnId,seq:i.sourceSeq,...U===void 0?{status:"processed"}:{status:"failed",reason:U,...ie?{retryable:!0}:{},fate:se,...(()=>{let Q=r.ladderHistoryForSeq?.(i.sourceSeq,se);return Q===void 0?{}:{ladder:Q}})(),...O?{failure_class:"edge_blocked"}:{},...(()=>{let Q=i.lastUpstreamErrorSummary??e.lastUpstreamErrorSummary;return Q===void 0?{}:{upstream_error:Q}})()}},resolution:"must_ack"}),U===void 0&&(e.lastUpstreamErrorSummary=void 0),o.push(U===void 0?{type:"turnTerminal",turnId:i.turnId,outcome:"completed"}:{type:"turnTerminal",turnId:i.turnId,outcome:"failed",reason:U,...Ie?{retryableEmptyTurn:!0}:{},fate:se}),e.turns.delete(i.turnId),sy(e,i.turnId)}function nue(e,n,t,r){let o=e.bufferedTurns.get(n);if(o===void 0){e.bufferedTurns.set(n,[t]),r.push(gn("pipeline.loop.turn_events_buffered",{turn_id:n}));return}o.push(t)}function tue(e,n,t){for(let r of[...e.bufferedTurns.keys()]){if(n.sourceSeqForTurn(r)===void 0)continue;let o=e.bufferedTurns.get(r)??[];e.bufferedTurns.delete(r),t.push(gn("pipeline.loop.buffered_turn_drained",{turn_id:r,buffered_event_count:o.length}));for(let i of o)Tj(e,i,n,t)}}function sy(e,n){for(e.terminalTurnIds.delete(n),e.terminalTurnIds.add(n);e.terminalTurnIds.size>Tde;){let t=e.terminalTurnIds.values().next().value;if(t===void 0)return;e.terminalTurnIds.delete(t)}}function ay(e){let n=[...e.turns.values()].filter(t=>t.phase==="active");return n.length===1?n[0]?.turnId:void 0}function iy(e,n,t,r){return{thread_key:e.threadKey,turn_id:n.turnId,item_key:t.itemKey,item_id:t.wireItemKey,stream_kind:t.identity.streamKind,item_index:t.identity.itemIndex,source_seq:n.sourceSeq,client_message_id:t.clientMessageId,body:r.body,structured:r.structured}}function Kp(e){let n=e.nextStreamSnapshotIndex;return e.nextStreamSnapshotIndex+=1,n}function uc(e){return h(e.reason)??h(e.message)??h(A(e.error)?.message)??h(e.error)??"codex_turn_aborted"}function rue(e){let n=h(e.diagnostic_summary)??h(A(A(e.diagnostic_payload)?.error)?.message);if(n===void 0)return;let t=n.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);if(t.length===0)return;let r=dy(e);return r===void 0?`Model gateway error: ${t}`:`Model gateway error (HTTP ${r}): ${t}`}function dy(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.codexErrorInfo),o=[A(t?.responseStreamDisconnected)?.httpStatusCode,t?.httpStatusCode,t?.statusCode,t?.status,n?.httpStatusCode,n?.statusCode,n?.status];for(let i of o)if(typeof i=="number"&&Number.isFinite(i))return i}function oue(e){let n=dy(e);if(n!==401&&n!==403)return;let t=A(A(e.diagnostic_payload)?.error),r=[h(e.diagnostic_summary),h(t?.message),h(e.message)].find(i=>i!==void 0&&/(?:<!doctype\s+html|<html(?:\s|>))/i.test(i)&&/cloudflare|cf-ray|\bblocked\b|access denied|\bchallenge\b|attention required/i.test(i));if(r===void 0)return;let o=/cloudflare|cf-ray/i.test(r)?"cloudflare":/\bblocked\b|access denied/i.test(r)?"blocked":/attention required/i.test(r)?"attention_required":"challenge";return{status:n,signature:o}}function iue(e){return e===void 0?!1:e===402||e===408||e===425||e===429||e>=500&&e<=599}function sue(e){return e===void 0||e<400||e>499?!1:e!==402&&e!==408&&e!==425&&e!==429}function aue(e,n){let t="the model provider rejected this request as invalid (a retry sends the same request and fails the same way, so it was not retried; check the selected model / request and send again).",r=e===void 0?`Model provider rejected this request: ${t}`:`Model provider rejected this request (HTTP ${e}): ${t}`,o=typeof n=="string"?n.trim():"";return o===""?r:`${r} Upstream said: ${o}`}function due(e){let n="the model provider returned no usable response this turn (retrying will not help until it recovers).";return e===void 0?`Model upstream unavailable: ${n}`:`Model upstream unavailable (HTTP ${e}): ${n}`}function uue(e){let n="The agent run was cut off by a tool failure and produced no response (retrying will hit the same failure until the underlying tool call is fixed).",t=typeof e=="string"?e.trim():"";return t===""?`Tool execution failed: ${n}`:`Tool execution failed (${t}): ${n}`}function Wp(e){let n=A(A(e.diagnostic_payload)?.error),t=h(e.message)??h(e.reason)??h(A(e.error)?.message)??h(e.error)??h(e.diagnostic)??h(n?.message)??h(A(n?.error)?.message);if(t===void 0)return;let r=t.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);return r.length===0?void 0:r}function cc(e){if(e===void 0)return;let n=e.replace(/<[^>]*>/g," ").replace(/data:[^"' )]+/g,"").replace(/\s+/g," ").trim().slice(0,180);return n.length===0?void 0:n}function fue(e){let n=A(e.error),t=A(A(e.diagnostic_payload)?.error),r=A(t?.error),o=dy(e),i=h(n?.type)??h(n?.code)??h(t?.type)??h(t?.code)??h(r?.type)??h(r?.code)??_j(n?.codexErrorInfo)??_j(t?.codexErrorInfo),s=cc(h(n?.message))??cc(h(r?.message))??cc(h(t?.message))??Wp(e);if(o===void 0&&i===void 0){let u=Vs(h(n?.message))??Vs(h(r?.message))??Vs(h(t?.message))??Vs(h(e.message))??Vs(h(e.reason))??Vs(h(e.error))??Vs(h(e.diagnostic))??Vs(h(e.diagnostic_summary));u!==void 0&&(o=u.status,i=u.errorType,s=cc(u.message)??s)}let a=[o===void 0?void 0:String(o),i?.trim()===""?void 0:i?.trim()].filter(u=>u!==void 0).join(" "),d=a===""?s:s===void 0?a:`${a}: ${s}`;if(!(d===void 0||d===""))return d.slice(0,pue)}function _j(e){if(typeof e=="string"&&e.trim()!=="")return e;let n=A(e);if(n===void 0)return;let t=Object.keys(n);return t.length===1?t[0]:void 0}function Vs(e){if(e===void 0)return;let n=e.indexOf("{");if(n===-1)return;let t=Qa(e.slice(n))??Qa(e.slice(n,e.lastIndexOf("}")+1));if(t===void 0||h(t.type)!=="error")return;let r=A(t.error);if(r===void 0)return;let o=t.status;return{status:typeof o=="number"&&Number.isFinite(o)?o:void 0,errorType:h(r.type)??h(r.code),message:h(r.message)}}function mue(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.error),r=A(e.error),o=[{code:h(n?.code),message:h(n?.message)},{code:h(n?.type),message:h(n?.message)},{code:h(t?.code),message:h(t?.message)},{code:h(t?.type),message:h(t?.message)},{code:h(r?.code),message:h(r?.message)},{code:h(r?.type),message:h(r?.message)},{code:h(e.code),message:h(e.message)},{code:h(e.type),message:h(e.message)}];for(let i of o){let s=i.code?.trim();if(s!==void 0&&s!==""&&cue.test(s))return{codeOrType:s,message:i.message}}}function hue(e){let n=mue(e),t=Wp(e),r=t!==void 0&&lue.test(t);return n===void 0&&!r?void 0:cc(n?.message)??t??""}function gue(e){let n="the model provider rejected this request and produced no response (retrying will hit the same rejection until the request is changed).",t=typeof e=="string"?e.trim():"";return t===""?`The model request was rejected: ${n}`:`The model request was rejected (${t}): ${n}`}function bue(e){let n=A(A(e.diagnostic_payload)?.error),t=A(n?.error),r=A(e.error),o=[h(n?.code),h(n?.type),h(t?.code),h(t?.type),h(r?.code),h(r?.type),h(e.code),h(e.type)],i=[h(n?.message),h(t?.message),h(r?.message),h(e.message),h(e.reason)];if(o.some(a=>{let d=a?.trim();return d!==void 0&&d!==""&&xue.test(d)})){for(let a of i){let d=cc(a);if(d!==void 0&&_ue.test(d))return d}return Wp(e)??""}}function wue(e){let n=typeof e=="string"?e.trim():"";return n===""?"The model provider is currently rejecting requests / experiencing an outage. Your message was NOT processed. Please retry later, or switch to a different model.":n}function vue(e){let n="the model provider rejected this request and produced no response (a one-off retry did not help).",t=typeof e=="string"?e.trim():"";return t===""?`The model request was rejected: ${n}`:`The model request was rejected (${t}): ${n}`}function Sue(e){return e.providerOutageFlagged?{kind:"storm",retryable:!1,reason:wue(e.stormDetail)}:e.priorConsecutiveIsolatedRejections<yue?{kind:"isolated_retry",retryable:!0,reason:gue(e.rejectionDetail)}:{kind:"isolated_terminal",retryable:!1,reason:vue(e.rejectionDetail)}}function Tue(e){return kue.test(e)||Cue.test(e)}function Pue(e){let n=h(e.kind)??h(e.type)??h(A(e.error)?.kind)??h(A(e.error)?.type),t=typeof n=="string"&&/(tool.*fatal|fatal.*tool|response[._]failed|tool_failure)/i.test(n),r=Wp(e),o=r!==void 0&&Tue(r);if(!(!t&&!o))return r??""}function Iue(e,n,t){let r=t===void 0?"":` (last upstream error: ${t})`;return e.lastErrorDiagnosticText!==void 0?{cause:`codex error without HTTP status: ${e.lastErrorDiagnosticText}`}:e.modelInteractionSeen?{cause:`model returned no assistant output: ${e.items.length} streamed items, ${n} snapshot items${r}`}:{cause:`codex never called the model: 0 model interactions, ${e.notificationCount} notifications, ${e.errorNotificationCount} errors${r}`}}function gn(e,n){return{type:"log",event:e,fields:n}}var Cde,Vp,lc,Tde,wo,fj,Pde,Ide,Rde,mj,hj,Dde,gj,vj,jde,Fde,zde,Kde,Ij,Wde,Rj,cue,lue,pue,yue,xue,_ue,kue,Cue,uy=F(()=>{"use strict";Hn();ic();RS();FS();Cde=new Set(["completed","failed","interrupted"]);Vp="pipeline/turnMappingReady",lc="pipeline/turnMappingFailed",Tde=512,wo=2,fj="Codex completed without producing a response.",Pde="linzumi_agent_reply",Ide="The agent ended its turn after narrating an intent without posting a reply or taking any action.",Rde="agent narrated intent but posted no reply and took no action",mj=new Set(["commandOutput","fileChange","terminalInput","agentStatus","agentTaskUpdate"]);hj=3,Dde="Stopped after repeated empty responses in a row",gj=64;vj="Codex emitted unsupported tool call";jde=new Map([["turn/failed","failed"],["turn/aborted","interrupted"],["turn/canceled","interrupted"],["turn/cancelled","interrupted"]]),Fde=new Set(["turn/started","turn/completed","turn/failed","turn/aborted","turn/canceled","turn/cancelled","error","turn/plan/updated","item/agentMessage/delta","item/reasoning/textDelta","item/commandExecution/outputDelta","command/exec/outputDelta","item/fileChange/outputDelta","item/commandExecution/terminalInteraction","item/started","item/completed","response_item"]),zde=new Set(["turn/plan/updated","item/agentMessage/delta","item/reasoning/textDelta","item/commandExecution/outputDelta","command/exec/outputDelta","item/fileChange/outputDelta","item/commandExecution/terminalInteraction","item/started","item/completed","response_item"]);Kde=/upstream model stream stalled/i,Ij=/\(HTTP (\d{3})\)/;Wde=" (An automatic resume was not attempted: the upstream reported a rate limit (HTTP 429) during this turn, and an automatic resume would burn straight into it. Retry once the rate limit clears.)";Rj=" (Automatic retries are paused: this session hit your Linzumi cost cap (HTTP 402), and an automatic retry must never spend past it. Retry manually when your budget allows.)";cue=/^(?:model_request_rejected|invalid_request_error|invalid_request|request_rejected|content_policy_violation|content_filter|input_validation_error)$/i,lue=/\bmodel request was rejected\b|\bmodel_request_rejected\b/i;pue=300;yue=1,xue=/^provider_outage$/i,_ue=/rejecting requests|experiencing an outage|provider outage/i;kue=/\bapply_patch\b[^]*\bincompatible\b|\bin-flight tool future\b[^]*\bfail/i,Cue=/\btools::router\b[^]*\bfatal\b|\bresponse\.failed\b/i});function $j(e){return e===void 0?[]:[...e.values()].map(n=>({...n}))}function Oj(e){let n=kj(),t={threadKey:e.threadKey,instanceId:e.instanceId,sourceSeqForTurn:e.sourceSeqForTurn,autoRetryAttemptsForSeq:e.autoRetryAttemptsForSeq,midStreamResumeAttemptAtMsForSeq:e.midStreamResumeAttemptAtMsForSeq,ladderHistoryForSeq:e.ladderHistoryForSeq,linzumiAgentSession:e.linzumiAgentSession===!0},r=[],o=e.now??(()=>Date.now()),i=new Map,s=new Map,a=new Map,d=new Map,u=new Set,c=e.bufferedTurnMaxAgeMs??Rue,l=e.bufferedTurnMaxEvents??Eue,p=e.bufferedTurnSweepIntervalMs??Due,m=!1,f=!0,y,x=(E,j)=>{try{e.log(E,j)}catch{}},b=E=>{switch(E.type){case"enqueue":e.outbox.enqueue({kind:E.kind,data:E.data,...E.coalesceKey===void 0?{}:{coalesceKey:E.coalesceKey},resolution:E.resolution});return;case"requestSnapshot":e.requestSnapshot(E.turnId);return;case"turnTerminal":e.onTurnTerminal(E.turnId,E.outcome,E.reason,E.retryableEmptyTurn,E.autoResumeMidStreamStall,E.fate);return;case"log":x(E.event,E.fields);return}},S=()=>{for(let E of n.turns.keys())i.has(E)||i.set(E,o());for(let E of[...i.keys()])n.turns.has(E)||i.delete(E);for(let E of n.bufferedTurns.keys())s.has(E)||s.set(E,o());for(let E of[...s.keys()])n.bufferedTurns.has(E)||(s.delete(E),u.delete(E));for(let E of[...a.keys()])!n.turns.has(E)&&!n.bufferedTurns.has(E)&&a.delete(E);for(let E of[...d.keys()])!n.turns.has(E)&&!n.bufferedTurns.has(E)&&d.delete(E)},v=(E,j)=>{!n.turns.has(E)&&!n.bufferedTurns.has(E)||a.set(E,{atMs:o(),kind:j})},w=E=>{if(E.source!=="codex")return;let j=E.notification.method;if(j===Vp||j===lc)return;let z=Jp(E.notification.params??{})??ay(n);z!==void 0&&v(z,j)},k=E=>{if(E.source!=="codex")return;let j=E.notification.method;if(j!=="item/started"&&j!=="item/completed"&&j!=="response_item")return;let z=E.notification.params??{},M=Jp(z)??ay(n);if(M===void 0||!n.turns.has(M)&&!n.bufferedTurns.has(M))return;let J=ry(z);if(J===void 0||J==="")return;if(j!=="item/started"){d.get(M)?.delete(J);return}let K=h(A(z.item)?.type);if(K===void 0||!Mue.has(K))return;let G=d.get(M);G===void 0&&(G=new Map,d.set(M,G)),G.set(J,{kind:K,startedAtMs:o()})},R=()=>{if(!f||n.phase!=="running")return!1;let E=o(),j=!1;for(let[z,M]of n.bufferedTurns){if(u.has(z))continue;let J=E-(s.get(z)??E),K=J>c,G=M.length>l;!K&&!G||(u.add(z),x("pipeline.loop.buffered_turn_overdue",{level:"warn",thread_key:e.threadKey,turn_id:z,buffered_event_count:M.length,age_ms:J,max_age_ms:c,max_events:l}),r.push({source:"codex",notification:{method:lc,params:{turnId:z,reason:G?`turn source mapping never arrived (${M.length} buffered events exceeded the ${l} cap)`:`turn source mapping never arrived within ${c}ms`}}}),j=!0)}return j},P=()=>{if(!m){m=!0;try{for(;r.length>0;){let E=r.shift();if(E===void 0)continue;let j;try{j=Cj(n,E,t)}catch(z){x("pipeline.loop.event_processing_failed",{thread_key:e.threadKey,source:E.source,message:z instanceof Error?z.message:String(z)});continue}S(),w(E),k(E);for(let z of j)try{b(z)}catch(M){x("pipeline.loop.effect_failed",{thread_key:e.threadKey,effect:z.type,message:M instanceof Error?M.message:String(M)})}R()}}finally{m=!1}}},O=p>0?setInterval(()=>{R()&&P()},p):void 0;return O?.unref?.(),{submit:E=>{try{if(!f){x("pipeline.loop.event_after_drain",{thread_key:e.threadKey,source:E.source});return}r.push(E),P()}catch(j){x("pipeline.loop.submit_failed",{thread_key:e.threadKey,message:j instanceof Error?j.message:String(j)})}},metrics:()=>({queueDepth:r.length,phase:n.phase,activeTurns:[...n.turns.values()].map(E=>({turnId:E.turnId,sourceSeq:E.sourceSeq,startedAtMs:i.get(E.turnId)??o(),lastActivityAtMs:a.get(E.turnId)?.atMs,lastActivityKind:a.get(E.turnId)?.kind,openItems:$j(d.get(E.turnId))})),bufferedTurns:[...n.bufferedTurns.entries()].map(([E,j])=>({turnId:E,bufferedEventCount:j.length,firstBufferedAtMs:s.get(E)??o(),lastActivityAtMs:a.get(E)?.atMs,lastActivityKind:a.get(E)?.kind,openItems:$j(d.get(E))}))}),noteTurnActivity:(E,j)=>{try{v(E,j)}catch(z){x("pipeline.loop.note_activity_failed",{thread_key:e.threadKey,message:z instanceof Error?z.message:String(z)})}},drainAndClose:E=>(y===void 0&&(y=(async()=>{f=!1,O!==void 0&&clearInterval(O),await Promise.resolve(),P();try{await e.outbox.flush(E)}catch(j){x("pipeline.loop.drain_flush_failed",{thread_key:e.threadKey,message:j instanceof Error?j.message:String(j)})}})()),y)}}var Rue,Eue,Due,Mue,Lj=F(()=>{"use strict";Hn();FS();uy();Rue=10*6e4,Eue=1e4,Due=3e4,Mue=new Set(["commandExecution","terminalInput","mcpToolCall","dynamicToolCall","collabAgentToolCall"])});function ly(e){let n=zue(e),t=tj({threadKey:e.threadKey,push:e.push,builders:n,...e.persistDir===void 0?{}:{persistDir:e.persistDir},...e.outboxRetryDelaysMs===void 0?{}:{retryDelaysMs:[...e.outboxRetryDelaysMs]},maxInFlightPushes:e.outboxMaxInFlightPushes??$ue,...e.journalRecoveryMaxAgeMs===void 0?{}:{journalRecoveryMaxAgeMs:e.journalRecoveryMaxAgeMs},isRetryBudgetExempt:NS,onPermanentFailure:(d,u)=>{e.log("pipeline.outbox_entry_failed",{thread_key:e.threadKey,entry_seq:d.entrySeq,kind:d.kind,attempts:d.attempts,item_key:h(d.data.item_key)??null,turn_id:h(d.data.turn_id)??null,message:u.message})},log:e.log}),r,o={...t,enqueue:d=>{if(d.kind===At.messageState){let u=h(d.data.turn_id);if(u!==void 0&&e.isRecoveredTurn?.(u)===!0)return t.enqueue({...d,data:{...d.data,suppress_terminal_for_recovered_turn:!0}})}if(Fue(d.kind)){let u=Y(d.data.source_seq),c=A(d.data.local_runner_runtime_metadata)??e.runtimeMetadataForSourceSeq?.(u);if(c!==void 0)return t.enqueue({...d,data:{...d.data,local_runner_runtime_metadata:c}})}return t.enqueue(d)}},i=async d=>{let u=e.snapshotRetryDelaysMs??Aue;for(let c=0;;c+=1)try{let l=await e.resolveSnapshot(d);r.submit({source:"snapshot",turnId:d,snapshot:{items:[...l.items]}});return}catch(l){let p=l instanceof Error?l.message:String(l),m=u[c];if(e.log("pipeline.snapshot_resolution_failed",{thread_key:e.threadKey,turn_id:d,attempt:c+1,retry_in_ms:m??null,message:p}),m===void 0){r.submit({source:"codex",notification:{method:"turn/failed",params:{turnId:d,reason:`completion snapshot resolution failed: ${p}`}}});return}await Jue(m)}};r=Oj({threadKey:e.threadKey,outbox:o,sourceSeqForTurn:e.sourceSeqForTurn,autoRetryAttemptsForSeq:e.autoRetryAttemptsForSeq,midStreamResumeAttemptAtMsForSeq:e.midStreamResumeAttemptAtMsForSeq,ladderHistoryForSeq:e.ladderHistoryForSeq,onTurnTerminal:e.onTurnTerminal,requestSnapshot:d=>{i(d).catch(u=>{e.log("pipeline.snapshot_request_failed",{thread_key:e.threadKey,turn_id:d,message:u instanceof Error?u.message:String(u)})})},instanceId:e.instanceId,log:e.log,linzumiAgentSession:e.linzumiAgentSession===!0});let s=rj({threadKey:e.threadKey,outboxMetrics:()=>t.metrics(),loopMetrics:()=>r.metrics(),log:e.log,intervalMs:e.statsIntervalMs,turnStalledThresholdMs:e.turnStalledThresholdMs,turnWaitStates:e.turnWaitStates}),a;return{submitNotification:(d,u)=>{r.submit({source:"codex",notification:{method:d,params:u}})},notifyTurnMappingReady:d=>{r.submit({source:"codex",notification:{method:Vp,params:{turnId:d}}})},notifyTurnMappingFailed:(d,u)=>{r.submit({source:"codex",notification:{method:lc,params:{turnId:d,reason:u}}})},noteTurnActivity:(d,u)=>{r.noteTurnActivity(d,u)},submitLifecycle:(d,u)=>{r.submit({source:"lifecycle",kind:d,reason:u})},pause:()=>{t.pause()},resume:()=>{t.resume()},rebindThreadKey:d=>{t.rekeyJournal(d)},flushOutbox:d=>t.flush(d),metrics:()=>t.metrics(),close:d=>(a===void 0&&(a=(async()=>{s.stop(),r.submit({source:"lifecycle",kind:"shutdown",reason:"session closed"}),await r.drainAndClose(d),await t.close(d)})()),a)}}function jj(e){let n=Ag(e);return n===void 0?{}:{traceparent:n}}function Oue(e){return{...h(e.turn_id)===void 0?{}:{turn_id:h(e.turn_id)},...h(e.item_key)===void 0?{}:{item_key:h(e.item_key)},...Y(e.delta_index)===void 0?{}:{delta_index:Y(e.delta_index)},...Y(e.stream_snapshot_index)===void 0?{}:{stream_snapshot_index:Y(e.stream_snapshot_index)}}}function Lue(e){return typeof e.body=="string"?e.body:""}function jue(e){return A(e.structured)??{}}function Fue(e){return e===At.postStreamedRow||e===At.streamSnapshot||e===At.finalizeRow||e===At.postCompletedRow}function zue(e){let n={build:r=>{let o=e.wire();if(o.kandanThreadId===void 0||o.codexThreadId===void 0)return{skip:!0,reason:"session_thread_unbound"};let i=h(r.client_message_id);if(i===void 0)return{skip:!0,reason:"missing_client_message_id"};let s=h(r.turn_id),a=Y(r.source_seq),d={...s===void 0?{}:{turn_id:s},stream_key:i},u={...d,...A(r.local_runner_runtime_metadata)??{}};return{event:"session:stream_thread_message",payload:{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:o.kandanThreadId,stream_key:i,...o.leaseEpoch===void 0?{}:{lease_epoch:o.leaseEpoch},body:Lue(r),payload:{...e.runnerPayload("codex_output",o.codexThreadId,a,u),...o.rootSeq===void 0?{}:{reply_to_seq:o.rootSeq},...a===void 0?{}:{source_message_seq:a},...d,structured:{...jue(r),stream_key:i}},client_message_id:i,...Oue(r),...jj(o.kandanThreadId)}}}},t={build:r=>{let o=e.wire();if(o.kandanThreadId===void 0)return{skip:!0,reason:"session_thread_unbound"};let i=Y(r.seq),s=h(r.status);if(i===void 0||s===void 0)return{skip:!0,reason:"malformed_message_state_entry"};let a=h(r.turn_id);return r.suppress_terminal_for_recovered_turn===!0||a!==void 0&&e.isRecoveredTurn?.(a)===!0?{skip:!0,reason:"terminal_for_recovered_turn"}:{event:"message_state",payload:{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:o.kandanThreadId,instance_id:e.instanceId,...o.codexThreadId===void 0?{}:{codex_thread_id:o.codexThreadId},seq:i,status:s,...h(r.reason)===void 0?{}:{reason:h(r.reason)},...r.retryable===!0?{retryable:!0}:{},...bo(r.fate)?{fate:r.fate}:{},...A(r.ladder)===void 0?{}:{ladder:A(r.ladder)},...r.failure_class==="edge_blocked"?{failure_class:"edge_blocked"}:{},...h(r.upstream_error)===void 0?{}:{upstream_error:h(r.upstream_error)},...h(r.turn_id)===void 0?{}:{turn_id:h(r.turn_id)},...o.leaseEpoch===void 0?{}:{lease_epoch:o.leaseEpoch},...jj(o.kandanThreadId)}}}};return{[At.postStreamedRow]:n,[At.streamSnapshot]:n,[At.finalizeRow]:n,[At.postCompletedRow]:n,[At.messageState]:t}}function qj(e,n){if("error"in e)return[];let t=A(A(e.result)?.thread),o=(qe(t?.turns)??[]).filter(Z).find(i=>i.id===n);return(qe(o?.items)??[]).filter(Z)}function qS(e){if(!e.some(t=>que.has(h(t.type)??"")))return[...e];let n=new Set;return e.forEach(t=>{let r=cy.get(h(t.type)??"");if(r===void 0)return;let o=h(t.call_id);if(o===void 0)return;let i=e.findIndex((s,a)=>!n.has(a)&&h(s.type)===r&&h(s.call_id)===o);i>=0&&n.add(i)}),e.flatMap((t,r)=>{let o=h(t.type)??"",i=cy.get(o);if(i!==void 0){let s=h(t.call_id),a=s===void 0?void 0:e.find(d=>h(d.type)===i&&h(d.call_id)===s);return _S(a===void 0?[t]:[t,a]).flatMap(d=>{let u=Fj(d);return u===void 0?[]:[u]})}return o==="function_call_output"||o==="custom_tool_call_output"?n.has(r)?[]:_S([t]).flatMap(s=>{let a=Fj(s);return a===void 0?[]:[a]}):[t]})}function Fj(e){let n=e.structured,t=/^item-\d+$/.test(e.itemKey)?void 0:e.itemKey,r=t===void 0?{}:{id:t},o=typeof n.output=="string"?n.output:"";switch(h(n.kind)){case"codex_command_execution":{let i=Nue(o);return{type:"commandExecution",...r,...i===void 0?{}:{codex_protocol_failure_reason:i},command:h(n.command)??"command",...h(n.tool_name)===void 0?{}:{toolName:h(n.tool_name)},cwd:h(n.cwd)??"",status:h(n.status)??"",...h(n.process_id)===void 0||h(n.process_id)===""?{}:{processId:h(n.process_id)},aggregatedOutput:o}}case"codex_file_change":return{type:"fileChange",...r,status:h(n.status)??"",patchText:h(n.patch_text)??e.body,changes:qe(n.changes)??[]};default:return}}function Nue(e){let n="unsupported call:",t=e.trim();if(!t.toLowerCase().startsWith(n))return;let r=t.slice(n.length).trim();return`Codex emitted unsupported tool call: ${r===""?"unknown":r}`}function Nj(e,n){if(n.length===0)return[...e];let t=zj(e),r=zj(n),o=new Set,i=r.map(d=>{let u=d.exactKey===void 0?-1:t.findIndex((l,p)=>!o.has(p)&&l.exactKey===d.exactKey);if(u>=0)return o.add(u),{kind:"read",readIndex:u};let c=d.semanticKey===void 0?-1:t.findIndex((l,p)=>!o.has(p)&&l.semanticKey===d.semanticKey);return c>=0?(o.add(c),{kind:"read",readIndex:c}):{kind:"session",raw:d.raw}}),s=[],a=0;for(let d of i)switch(d.kind){case"read":{for(;a<d.readIndex;){if(!o.has(a)){let c=t[a];c!==void 0&&s.push(c.raw)}a+=1}let u=t[d.readIndex];u!==void 0&&s.push(u.raw),a=Math.max(a,d.readIndex+1);break}case"session":s.push(d.raw);break}for(;a<t.length;){if(!o.has(a)){let d=t[a];d!==void 0&&s.push(d.raw)}a+=1}return s}function zj(e){return e.map((n,t)=>{let r=rc(n,t).find(o=>o.body.trim()!=="");return r===void 0?{raw:n,exactKey:void 0,semanticKey:void 0}:{raw:n,exactKey:Uue(r),semanticKey:Bue(r)}})}function Uue(e){return`${h(e.structured.kind)??""}:${e.itemKey}`}function Bue(e){let n=h(e.structured.kind)??"";switch(n){case"codex_command_execution":return JSON.stringify([n,h(e.structured.command)??"",h(e.structured.cwd)??"",h(e.structured.output)??e.body]);case"codex_file_change":return JSON.stringify([n,h(e.structured.patch_text)??e.body]);case"codex_reasoning":return JSON.stringify([n,h(e.structured.content)??e.body]);case"codex_terminal_input":return JSON.stringify([n,h(e.structured.input_text)??e.body]);default:return JSON.stringify([n,e.body])}}function py(e){return UL(e)}function NS(e){return BL(e)}function Jue(e){return new Promise(n=>{setTimeout(n,e)})}var Aue,$ue,cy,que,US=F(()=>{"use strict";zp();Hn();ic();eS();ey();$n();RS();$S();oj();Lj();uy();Aue=[1e3,5e3],$ue=16;cy=new Map([["function_call","function_call_output"],["custom_tool_call","custom_tool_call_output"]]),que=new Set([...cy.keys(),...cy.values()])});import{execFile as Kue}from"node:child_process";import{copyFileSync as Bj,existsSync as BS,mkdirSync as Gp,readFileSync as Jj,readdirSync as Zp,rmSync as Uj,statSync as Kj,writeFileSync as Vj}from"node:fs";import{homedir as Vue}from"node:os";import{dirname as JS,join as vo,resolve as KS}from"node:path";import{promisify as Wue}from"node:util";function Xue(e=process.env){let n=e[Hue];if(n===void 0)return!0;let t=n.trim().toLowerCase();return!(t==="0"||t==="false"||t==="off")}function Qp(e=process.env){let n=e.LINZUMI_GIT_SAFETY_SNAPSHOTS_DIR;return n!==void 0&&n.trim()!==""?KS(n):KS(Vue(),".linzumi","safety-snapshots")}async function id(e,n){try{let{stdout:t,stderr:r}=await Wj("git",[...n],{cwd:e,encoding:"utf8",timeout:Hj,maxBuffer:67108864});return{ok:!0,stdout:t,stderr:r}}catch(t){let r=t;return{ok:!1,stdout:typeof r.stdout=="string"?r.stdout:"",stderr:typeof r.stderr=="string"?r.stderr:t instanceof Error?t.message:String(t)}}}function Yue(e){let n=e.split("\0"),t=[];for(let r=0;r<n.length;r+=1){let o=n[r];if(o===void 0||o.length<4)continue;let i=o.slice(0,2),s=o.slice(3);t.push({status:i,path:s}),(i.includes("R")||i.includes("C"))&&(r+=1)}return t}function fy(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[.-]+|[.-]+$/g,"");return n===""?"x":n}function ece(e){let n=new Date(e.nowMs).toISOString().replace(/-|:|\..*$/g,"").replace("T","-"),t=fy(e.threadId).slice(-12),r=fy(e.turnRef).slice(-12);return`${n}-${t}-${r}`}function nce(e){return`refs/linzumi/safety/${e}`}async function tce(e){let n=e.env??process.env;if(!Xue(n))return{kind:"disabled"};let t=Date.now(),r=()=>Date.now()-t,o=await id(e.cwd,["status","--porcelain=v1","-z","--untracked-files=all"]);if(!o.ok)return o.stderr.toLowerCase().includes("not a git repository")?{kind:"not_git",durationMs:r()}:{kind:"error",message:`git status failed: ${o.stderr.trim()}`,durationMs:r()};let i=Yue(o.stdout);if(i.length===0)return{kind:"clean",durationMs:r()};try{let s=e.nowMs??t,a=ece({threadId:e.threadId,turnRef:e.turnRef,nowMs:s}),d=e.snapshotsRoot??Qp(n),u=vo(d,fy(e.threadId),`${fy(e.turnRef)}-${s}`),c=e.maxTotalBytes??Gue,l=i.filter(z=>z.status==="??").map(z=>z.path),p=i.filter(z=>z.status!=="??"&&z.status!=="!!").map(z=>z.path),m=await id(e.cwd,["rev-parse","--show-toplevel"]),f=m.ok?m.stdout.trim():e.cwd,y=await id(e.cwd,["branch","--show-current"]),x=y.ok&&y.stdout.trim()!==""?y.stdout.trim():void 0,b=await id(e.cwd,["rev-parse","HEAD"]),S=b.ok?b.stdout.trim():void 0,v,w;if(p.length>0){let z=await id(e.cwd,["stash","create",`linzumi safety snapshot ${a}`]),M=z.ok?z.stdout.trim():"";if(M!==""){v=M;let J=nce(a);w=(await id(e.cwd,["update-ref",J,M])).ok?J:void 0}}Gp(u,{recursive:!0});let k=[],R=0,P=(z,M)=>{let J=vo(f,z),K=0;try{let G=Kj(J);if(!G.isFile())return!1;if(K=G.size,R+K>c)return k.push({path:z,bytes:K,reason:"size_cap"}),!1;let W=vo(u,M,z);return Gp(JS(W),{recursive:!0}),Bj(J,W),R+=K,!0}catch{return k.push({path:z,bytes:K,reason:"copy_error"}),!1}},O=l.filter(z=>P(z,"untracked")),E=v===void 0&&p.length>0?p.filter(z=>P(z,"tracked")):[],j={version:1,id:a,createdAtMs:s,threadId:e.threadId,turnRef:e.turnRef,cwd:e.cwd,repoRoot:f,branch:x,headCommit:S,stashCommit:v,safetyRef:w,trackedPaths:p,untrackedPaths:O,trackedFallbackPaths:E,skippedFiles:k,copiedBytes:R,durationMs:r()};return Vj(vo(u,"manifest.json"),`${JSON.stringify(j,null,2)}
|
|
565
|
+
`),{kind:"snapshot",manifest:j,snapshotDir:u}}catch(s){return{kind:"error",message:s instanceof Error?s.message:String(s),durationMs:r()}}}function my(e){let n=[],t;try{t=Zp(e)}catch{return[]}for(let r of t){let o=vo(e,r),i;try{i=Zp(o)}catch{continue}for(let s of i){let a=vo(o,s);try{let d=JSON.parse(Jj(vo(a,"manifest.json"),"utf8"));d.version===1&&typeof d.id=="string"&&n.push({manifest:d,snapshotDir:a})}catch{}}}return n.sort((r,o)=>o.manifest.createdAtMs-r.manifest.createdAtMs)}async function Gj(e){let{manifest:n,snapshotDir:t}=e.snapshot,r=KS(e.toDir);if(BS(r)&&Zp(r).length>0)throw new Error(`refusing to restore into non-empty directory: ${r} (recovery never clobbers existing state)`);Gp(r,{recursive:!0});let o=[];for(let a of n.untrackedPaths){let d=vo(t,"untracked",a);if(!BS(d))continue;let u=vo(r,a);Gp(JS(u),{recursive:!0}),Bj(d,u),o.push(a)}let i=[],s=[];for(let a of n.trackedPaths){let d;if(n.stashCommit!==void 0)try{let{stdout:c}=await Wj("git",["show",`${n.stashCommit}:${a}`],{cwd:n.repoRoot,encoding:"buffer",timeout:Hj,maxBuffer:536870912});d=c}catch{d=void 0}if(d===void 0){let c=vo(t,"tracked",a);BS(c)&&(d=Jj(c))}if(d===void 0){s.push(a);continue}let u=vo(r,a);Gp(JS(u),{recursive:!0}),Vj(u,d),i.push(a)}return{restoredDir:r,restoredTracked:i,restoredUntracked:o,missingTracked:s,stashCommit:n.stashCommit,safetyRef:n.safetyRef}}async function Zj(e){let n=e.nowMs??Date.now(),t=e.maxAgeMs??Zue,r=e.maxCount??Que,o=my(e.snapshotsRoot),i=o.filter(l=>n-l.manifest.createdAtMs>t),a=o.filter(l=>n-l.manifest.createdAtMs<=t).slice(r),d=[...i,...a],u=[],c=[];for(let l of d){let{manifest:p,snapshotDir:m}=l;p.safetyRef!==void 0&&p.stashCommit!==void 0&&(await id(p.repoRoot,["update-ref","-d",p.safetyRef,p.stashCommit])).ok&&c.push(p.safetyRef);try{Uj(m,{recursive:!0,force:!0}),u.push(m)}catch{}}try{for(let l of Zp(e.snapshotsRoot)){let p=vo(e.snapshotsRoot,l);try{Kj(p).isDirectory()&&Zp(p).length===0&&Uj(p,{recursive:!0,force:!0})}catch{}}}catch{}return{removedSnapshotDirs:u,removedRefs:c}}function oce(e){return rce.some(n=>n.test(e))}function sce(e,n){if(Pi.delete(e),Pi.size>=ice){let t=Pi.keys().next().value;t!==void 0&&Pi.delete(t)}Pi.set(e,n)}async function Xp(e){try{let n=await tce({cwd:e.cwd,threadId:e.threadKey,turnRef:e.turnRef,snapshotsRoot:e.snapshotsRoot,env:e.env});switch(n.kind){case"snapshot":{sce(e.threadKey,{manifest:n.manifest,destructiveCommand:void 0}),e.log("git_safety.snapshot_captured",{thread_key:e.threadKey,turn_ref:e.turnRef,snapshot_id:n.manifest.id,stash_commit:n.manifest.stashCommit??null,safety_ref:n.manifest.safetyRef??null,tracked_paths:n.manifest.trackedPaths.length,untracked_paths:n.manifest.untrackedPaths.length,copied_bytes:n.manifest.copiedBytes,skipped_files:n.manifest.skippedFiles.length,duration_ms:n.manifest.durationMs});for(let t of n.manifest.skippedFiles)e.log("git_safety.snapshot_file_skipped",{thread_key:e.threadKey,snapshot_id:n.manifest.id,path:t.path,bytes:t.bytes,reason:t.reason});break}case"error":Pi.delete(e.threadKey),e.log("git_safety.snapshot_failed",{thread_key:e.threadKey,turn_ref:e.turnRef,cwd:e.cwd,message:n.message,duration_ms:n.durationMs});break;case"clean":case"not_git":case"disabled":Pi.delete(e.threadKey);break}return n}catch(n){e.log("git_safety.snapshot_failed",{thread_key:e.threadKey,turn_ref:e.turnRef,cwd:e.cwd,message:n instanceof Error?n.message:String(n)});return}}function hy(e,n){let t=Pi.get(e);t!==void 0&&t.destructiveCommand===void 0&&oce(n)&&(t.destructiveCommand=n)}function ace(e){let n=e.stashCommit===void 0?"":` Tracked changes are also directly recoverable with \`git stash apply ${e.stashCommit}\`.`;return`This turn ran destructive git commands on a working tree that had uncommitted changes. Linzumi saved a safety snapshot of those changes on this computer before the turn started: \`${e.id}\`. Restore a copy (into a fresh directory, never overwriting current files) with \`linzumi safety-snapshots restore ${e.id}\` (or \`npx -y @linzumi/cli safety-snapshots restore ${e.id}\` if linzumi is not on PATH).${n}`}function dce(e){let n=Pi.get(e);if(!(n===void 0||n.destructiveCommand===void 0))return Pi.delete(e),{body:ace(n.manifest),clientMessageId:`git-safety-snapshot-${n.manifest.id}`,snapshotId:n.manifest.id}}async function gy(e){let n=dce(e.threadKey);if(n!==void 0)try{await e.push("session:post_thread_message",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,body:n.body,client_message_id:n.clientMessageId,payload:{metadata:{local_codex_runner:{event_type:"git_safety_snapshot_notice"}}}}),e.log("git_safety.snapshot_notice_posted",{thread_id:e.threadId,snapshot_id:n.snapshotId})}catch(t){e.log("git_safety.snapshot_notice_post_failed",{thread_id:e.threadId,snapshot_id:n.snapshotId,message:t instanceof Error?t.message:String(t)})}}var Wj,Hue,Gue,Zue,Que,Hj,Hp,rce,Pi,ice,yy=F(()=>{"use strict";Wj=Wue(Kue),Hue="LINZUMI_GIT_SAFETY_SNAPSHOTS",Gue=200*1024*1024,Zue=4320*60*1e3,Que=50,Hj=3e4;Hp=String.raw`\bgit\s+(?:-[Cc]\s+\S+\s+|-\S+\s+)*`,rce=[new RegExp(`${Hp}restore\\b`),new RegExp(`${Hp}checkout\\b[^\\n;|&]*(\\s--(\\s|$)|\\s-f\\b|\\s\\.(\\s|$))`),new RegExp(`${Hp}reset\\b[^\\n;|&]*--(hard|merge|keep)\\b`),new RegExp(`${Hp}clean\\b`),new RegExp(`${Hp}stash\\s+(drop|clear|pop)\\b`),/\brm\s+(-[A-Za-z]*f[A-Za-z]*)\b/];Pi=new Map,ice=500});function xy(e){return Array.isArray(e)?e:typeof e=="string"&&e.trim()!==""?[{type:"text",text:e.trim()}]:[]}function _y(e){if(typeof e=="string"){let t=e.trim();return t===""?void 0:t}if(!Array.isArray(e))return;let n=e.flatMap(t=>{if(typeof t!="object"||t===null||Array.isArray(t))return[];let r=t,o=typeof r.text=="string"?r.text:typeof r.content=="string"?r.content:void 0;return o===void 0?[]:[o]}).join(`
|
|
566
|
+
|
|
567
|
+
`).trim();return n===""?void 0:n}function sd(e){return e.fusedSeqs===void 0||e.fusedSeqs.length===0?[e.seq]:e.fusedSeqs}function uce(e){let n=e.actorSlug===void 0||e.actorSlug.trim()===""?"unknown":e.actorSlug.trim(),t=e.actorUserId===void 0?"unknown":e.actorUserId.toString();return[`Kandan message seq=${e.seq} from ${n} (user_id=${t}):`,"",e.body].join(`
|
|
568
|
+
`)}function VS(e){let n=e.body.trimStart();return n.startsWith("!")?n:uce(e)}function Qj(e,n){let t=n===void 0?Array.from(e):e.filter(i=>i.seq<=n),r=n===void 0?[]:e.filter(i=>i.seq>n);if(t.length===0)return{ok:!1,reason:"queue_empty"};let o=cce(t);return o===void 0?{ok:!1,reason:"queue_empty"}:{ok:!0,queue:[o,...r],selectedCount:t.length,selectedSeqs:t.flatMap(i=>sd(i)),remainingCount:r.length}}function cce(e){let n=e[e.length-1],t=e.reduce((r,o)=>o.receivedAtMs===void 0?r:r===void 0?o.receivedAtMs:Math.min(r,o.receivedAtMs),void 0);if(n!==void 0)return{seq:n.seq,actorSlug:"kandan",actorUserId:void 0,body:e.map(VS).join(`
|
|
566
569
|
|
|
567
570
|
---
|
|
568
571
|
|
|
569
|
-
`),attachments:e.flatMap(r=>r.attachments),receivedAtMs:t,fusedSeqs:e.flatMap(r=>sd(r))}}var by=F(()=>{"use strict"});function wy(e){return Array.isArray(e)?e.flatMap(
|
|
572
|
+
`),attachments:e.flatMap(r=>r.attachments),receivedAtMs:t,fusedSeqs:e.flatMap(r=>sd(r))}}var by=F(()=>{"use strict"});function wy(e){return Array.isArray(e)?e.flatMap(yce):[]}function eF(e){return e.filter(n=>{if(n.body.trim()===""||n.actorKind==="system")return!1;let r=xce(n.payload);return!(r!==void 0&&r!=="codex_output"||_ce(n))})}async function nF(e,n=WS(),t){let r=eF(e);if(r.length===0)throw new Error("durable Linzumi thread history did not include user-visible context");let o=r.slice(0,Math.max(0,r.length-Xj)),i=r.slice(-Xj),s=o.length===0?void 0:await mce(o,n);return{type:"text",text:["Reconnected Linzumi thread context","","The local Codex app-server thread was restarted, so this durable Linzumi thread history is being injected before retrying the latest user message.","",...t===void 0?[]:[rd(t),""],...s===void 0?[]:["Summary of earlier messages:",s,""],"Last five user-visible messages verbatim:",i.map(HS).join(`
|
|
570
573
|
|
|
571
574
|
---
|
|
572
575
|
|
|
573
576
|
`)].join(`
|
|
574
577
|
`)}}function Yj(e,n){return e.length<=n?e:`[...truncated...]
|
|
575
|
-
${e.slice(e.length-n)}`}function tF(e){let n=eF(e.messages),t=n.slice(-
|
|
576
|
-
`);if(t.length===0)return i;let s=r>0?`Prior transcript (last ${t.length} user-visible messages verbatim; ${r} earlier messages omitted):`:`Prior transcript (${t.length} user-visible messages verbatim):`,a=Math.max(1e3,
|
|
578
|
+
${e.slice(e.length-n)}`}function tF(e){let n=eF(e.messages),t=n.slice(-pce),r=n.length-t.length,o=Yj(e.resumeFailure.trim(),400),i=["Rebuilt Linzumi coding session","","This session was rebuilt after an interrupted durable engine session: the previous engine session for this Linzumi thread could not be resumed"+(o===""?".":` (${o}).`),"You are continuing the SAME task in the SAME Linzumi thread. The durable server-side transcript "+(t.length===0?"could not be fetched, so no prior transcript is included - ask the user for any missing context instead of guessing.":"follows to restore your working context. Re-derive any local state (files, branches, running processes) from the workspace itself; do not assume in-memory state survived."),"",...e.linzumiContext===void 0?[]:[rd(e.linzumiContext),""]].join(`
|
|
579
|
+
`);if(t.length===0)return i;let s=r>0?`Prior transcript (last ${t.length} user-visible messages verbatim; ${r} earlier messages omitted):`:`Prior transcript (${t.length} user-visible messages verbatim):`,a=Math.max(1e3,fce-i.length-s.length),d=Yj(t.map(HS).join(`
|
|
577
580
|
|
|
578
581
|
---
|
|
579
582
|
|
|
580
583
|
`),a);return[i,s,d].join(`
|
|
581
|
-
`)}function WS(e=globalThis.fetch){return{summarize:n=>
|
|
584
|
+
`)}function WS(e=globalThis.fetch){return{summarize:n=>hce(e,n)}}async function mce(e,n){let t=(await n.summarize(e)).trim();if(t==="")throw new Error("reconnect context summarizer returned an empty summary");return t}async function hce(e,n){let t=gce();if(t===void 0)throw new Error("Reconnect context summarization requires LINZUMI_RECONNECT_CONTEXT_API_KEY, GROQ_API_KEY, or OPENROUTER_API_KEY");let r=Ws("LINZUMI_RECONNECT_CONTEXT_MODEL")??Ws("KANDAN_AGENT_PROGRESS_SUMMARY_MODEL")??lce,o=await e(`${t.baseUrl.replace(/\/$/,"")}/chat/completions`,{method:"POST",headers:{authorization:`Bearer ${t.apiKey}`,"content-type":"application/json"},body:JSON.stringify({model:r,temperature:0,messages:[{role:"system",content:"Summarize durable Linzumi thread history for a restarted local Codex coding agent. Preserve concrete user requests, constraints, file/module names, and decisions. Do not mention local runner availability, reconnect status, or port-forward noise."},{role:"user",content:n.map(HS).join(`
|
|
582
585
|
|
|
583
586
|
---
|
|
584
587
|
|
|
585
|
-
`)}]})});if(!o.ok)throw new Error(`reconnect context summarization failed: ${o.status} ${o.statusText}`);let i=await o.json();if(!Z(i))throw new Error("reconnect context summarizer returned non-object JSON");let s=i.choices;if(!Array.isArray(s))throw new Error("reconnect context summarizer response did not include choices");let a=s.find(Z),d=A(a?.message),u=h(d?.content)?.trim();if(u===void 0||u==="")throw new Error("reconnect context summarizer response did not include message content");return u}function
|
|
586
|
-
`)}function yce(e){let n=A(e.metadata),t=A(n?.local_codex_runner),r=h(t?.event_type);return r===void 0||r.trim()===""?void 0:r.trim()}function xce(e){let n=e.body.trim();return n.startsWith("Codex reconnected.")||n.startsWith("[codex reconnected")||n.startsWith("Codex is ready.")||/^Runner port \d+ is open in (Kandan|Linzumi):/.test(n)||/^.+ on port \d+ is ready in Linzumi\. \[Open\]\(/.test(n)}function Ws(e){let n=process.env[e];return n===void 0||n.trim()===""?void 0:n.trim()}var Xj,cce,lce,pce,GS=F(()=>{"use strict";Hn();nc();$n();Xj=5,cce="openai/gpt-oss-120b";lce=12,pce=24e3});function pc(e){let n=Math.max(0,Math.floor(e)-1);return n===0?`${rF} on your runner`:`${rF} and ${n} earlier queued message${n===1?"":"s"} on your runner`}function iF(e){let n=Math.max(1,Math.floor(e));return`${_ce} ${n} earlier queued message${n===1?"":"s"} on your runner`}function bce(e,n=1){let t=Math.floor(n)>1?"will run when its turn comes":"will run after the current turn finishes";return e==="attachments_require_own_turn"?`${t} (attachments can't join a running turn)`:e.startsWith("turn_not_steerable_")?`${t} (it couldn't be steered into the running turn)`:e==="engine_rejected_steer"?`${t} (the running turn couldn't accept it as steering input)`:t}function QS(e,n){return`${pc(e)} - `+bce(n,e)}function sF(e){let n=A(e.params)??{},t=h(n.command)??h(n.cmd),r=h(n.path)??h(n.filePath)??h(n.file),o=t??r??h(n.reason)??h(n.summary)??e.method;return{requestId:String(e.id),kind:e.method,summary:o}}function vy(e,n){return`${n}:${e}`}function Sy(e,n){if(e==="item/agentMessage/delta"||e==="item/reasoning/textDelta")return"streaming response";if(e.startsWith("item/commandExecution/")||e==="command/exec/outputDelta")return"running terminal command";let t=A(n.item)??n;switch(h(t.type)){case"commandExecution":case"terminalInput":return"running terminal command";case"agentMessage":case"reasoning":case"fileChange":case"web_search_call":case"webSearchCall":case"webSearch":return"streaming response";default:return}}function ky(e){return e.reason==="awaiting approval"?{status:"processing",reason:e.reason,approval:e.approval}:{status:"processing",reason:e.reason}}var ZS,oF,_ce,Yp,rF,Cy=F(()=>{"use strict";Hn();ZS="model stream stalled - resuming automatically from the last streamed checkpoint",oF="upstream outage detected - recovery paused, resuming automatically",_ce="queued behind",Yp="steered into the running turn on your runner",rF="queued behind the running turn"});function vce(e){return e==="closed"||e==="open"||e==="half_open"?e:void 0}function XS(e){let n=A(e);if(n===void 0)return;let t=vce(n.state),r=h(n.fate),o=Y(n.version);if(t===void 0||r===void 0||!bo(r)||o===void 0)return;let i=h(n.openedAt),s=i===void 0?void 0:Date.parse(i),a=Y(n.probeIntervalSeconds);return{state:t,fate:r,openedAtMs:s===void 0||Number.isNaN(s)?void 0:s,probeIntervalMs:a===void 0||a<=0?wce:a*1e3,detectionRule:h(n.detectionRule),version:o}}function YS(e){let n=ef.snapshots.get(e.fate);return n!==void 0&&e.version<n.version?"stale":(ef.snapshots.set(e.fate,e),"applied")}function aF(e){let n=XS(e);return n===void 0?{outcome:"invalid"}:{outcome:YS(n),snapshot:n}}function ek(e,n=Date.now()){let t=ef.snapshots.get(e);if(t===void 0||t.state==="closed")return{action:"proceed"};if(t.state==="open")return{action:"hold",reason:"fleet_breaker_open"};let r=ef.lastCanaryAtMs.get(e);return r===void 0||n-r>=t.probeIntervalMs?(ef.lastCanaryAtMs.set(e,n),{action:"canary"}):{action:"hold",reason:"fleet_breaker_half_open_awaiting_probe"}}var wce,ef,nk=F(()=>{"use strict";Hn();ic();wce=3e5,ef={snapshots:new Map,lastCanaryAtMs:new Map}});function ad(e){switch(e.status){case"active":case"completing":return e.turnId;case"idle":case"starting":return}}function fc(e,n){switch(e.status){case"active":case"completing":return e.turnId===n?e.queuedSeq:void 0;case"idle":case"starting":return}}function tk(e){switch(e.status){case"active":case"starting":return e.queuedSeq;case"idle":case"completing":return}}function dF(e){switch(e.status){case"starting":return{status:"starting",queuedSeq:e.queuedSeq,interruptAfterStart:!0};case"idle":case"active":case"completing":return e}}function uF(e,n){switch(e.status){case"active":return e.turnId===n?e.queuedSeq:void 0;case"idle":case"starting":case"completing":return}}function cF(e,n){switch(e.status){case"starting":return!0;case"active":case"completing":return e.turnId===n;case"idle":return!1}}var lF=F(()=>{"use strict"});function fF(){return{items:[],head:0}}function Yo(e){return e.items.length-e.head}function rk(e,n){e.items.push(n)}function nf(e,n){for(let t=e.head;t<e.items.length;t+=1){let r=e.items[t];if(r!==void 0&&sd(r).includes(n))return!0}return!1}function ok(e){return yF(e).slice()}function mF(e){let n=e.items[e.head];if(n===void 0){pF(e);return}return e.head=e.head+1,pF(e),n}function hF(e){let n=[];for(let t=e.head;t<e.items.length;t+=1){let r=e.items[t];r!==void 0&&n.push(r)}return e.items=[],e.head=0,n}function mc(e,n){if(e.head>0){e.head=e.head-1,e.items[e.head]=n;return}e.items.unshift(n)}function gF(e,n){let t=Qj(yF(e),n);return t.ok&&Sce(e,t.queue),t}function Sce(e,n){e.items=n,e.head=0}function yF(e){return e.head===0?e.items:e.items.slice(e.head)}function pF(e){if(e.head!==0){if(e.head>=e.items.length){e.items=[],e.head=0;return}e.head>e.items.length/2&&(e.items=e.items.slice(e.head),e.head=0)}}var xF=F(()=>{"use strict";by()});function tf(e=process.env){let n=e.LINZUMI_CROSS_HARNESS_FAILOVER?.trim().toLowerCase();return n==="1"||n==="true"||n==="on"}function ak(e){return`failover ${e.sourceHarness}->${e.targetHarness} model=${e.model??"unspecified"}`+(e.transpiledItemCount===void 0?"":` items=${e.transpiledItemCount}`)+(e.redactedReasoningCount===void 0?"":` redacted=${e.redactedReasoningCount}`)}function sk(e,n){let t=e?.trim();if(t===void 0||t==="")return n;let r=Number(t);return Number.isFinite(r)&&r>0?Math.floor(r):n}function Ty(e=process.env){return{maxRecoveryRungs:sk(e.LINZUMI_FATE_LADDER_MAX_RECOVERY_RUNGS,ik.maxRecoveryRungs),maxLadderMs:sk(e.LINZUMI_FATE_LADDER_BUDGET_MS,ik.maxLadderMs),maxRateLimitHoldMs:sk(e.LINZUMI_FATE_LADDER_MAX_HOLD_MS,ik.maxRateLimitHoldMs)}}function Tce(e,n){return{fate:e,startedAtMs:n,rungCursor:0,cursorAttempts:0,recoveryRungsAttempted:0,holdCommitted:!1,holdDispatched:!1,entries:[],historyTruncated:!1}}function fr(e,n){return e.entries.length>=bF?e.historyTruncated?e:{...e,historyTruncated:!0}:{...e,entries:[...e.entries,n]}}function Pce(e,n){switch(n){case"in_place_resume":return e.inPlaceResume;case"redispatch":return e.redispatch;case"worker_rebuild":return e.workerRebuild;case"cross_harness_failover":return e.crossHarnessFailover===!0}}function dk(e){let{fate:n,nowMs:t,budgets:r,breaker:o,grants:i}=e;if(n===void 0)return{kind:"stand",cause:"no_fate"};let s=_F[n],a=e.run??Tce(n,t);switch(s.kind){case"never_ladders":return{kind:"stand",cause:"never_ladders"};case"red_immediately":return{kind:"red",cause:"deterministic_by_design",run:fr(a,{rung:"classification",outcome:"no_rungs_by_design",atMs:t,detail:"classification: deterministic, no rungs attempted by design"})};case"hold_until_reset":{if(a.holdCommitted)return{kind:"red",cause:"hold_already_committed",run:fr(a,{rung:"hold",outcome:"rungs_exhausted",atMs:t,detail:"the one hold-and-dispatch was already spent"})};let d=e.rateLimitResetAtMs;if(d===void 0||!(d>t)){if(i.inPlaceResume){let c=o(n,t);return c.action==="hold"?{kind:"breaker_hold",reason:c.reason,run:fr(a,{rung:"in_place_resume",outcome:"breaker_held",atMs:t,detail:c.reason})}:a.recoveryRungsAttempted>=r.maxRecoveryRungs?{kind:"red",cause:"budget_rungs_exhausted",run:fr(a,{rung:"classification",outcome:"budget_rungs_exhausted",atMs:t,detail:`${a.recoveryRungsAttempted} recovery rungs attempted (budget ${r.maxRecoveryRungs})`})}:{kind:"execute_rung",rung:"in_place_resume",run:fr({...a,recoveryRungsAttempted:a.recoveryRungsAttempted+1},{rung:"in_place_resume",outcome:"attempted",atMs:t,detail:"reducer-granted bounded retry (transient-evidence carve-out; no known reset to hold for)"})}}return{kind:"red",cause:"hold_unavailable_no_reset",run:fr(a,{rung:"hold",outcome:"hold_unavailable_no_reset",atMs:t,detail:"no known rate-limit reset timestamp"})}}if(d-t>r.maxRateLimitHoldMs)return{kind:"red",cause:"hold_unavailable_reset_beyond_bound",run:fr(a,{rung:"hold",outcome:"hold_unavailable_reset_beyond_bound",atMs:t,resetAtMs:d,detail:`reset is ${Math.round((d-t)/1e3)}s away, beyond the ${Math.round(r.maxRateLimitHoldMs/1e3)}s hold budget`})};let u=o(n,t);return u.action==="hold"?{kind:"breaker_hold",reason:u.reason,run:fr(a,{rung:"hold",outcome:"breaker_held",atMs:t,detail:u.reason})}:{kind:"hold_until_reset",resetAtMs:d,run:fr({...a,holdCommitted:!0},{rung:"hold",outcome:"held",atMs:t,resetAtMs:d})}}case"recover":{let d=n==="transient_local"&&e.failover!==void 0?[...s.rungs,kce]:s.rungs;if(a.recoveryRungsAttempted>=r.maxRecoveryRungs)return{kind:"red",cause:"budget_rungs_exhausted",run:fr(a,{rung:"classification",outcome:"budget_rungs_exhausted",atMs:t,detail:`${a.recoveryRungsAttempted} recovery rungs attempted (budget ${r.maxRecoveryRungs})`})};if(t-a.startedAtMs>r.maxLadderMs)return{kind:"red",cause:"budget_wall_clock_exhausted",run:fr(a,{rung:"classification",outcome:"budget_wall_clock_exhausted",atMs:t,detail:`ladder open ${Math.round((t-a.startedAtMs)/1e3)}s (budget ${Math.round(r.maxLadderMs/1e3)}s)`})};let u=a.rungCursor,c=a.cursorAttempts,l=!1,p=d[u];for(;p!==void 0&&c>=p.maxAttempts;)u+=1,c=0,p=d[u];for(;p!==void 0&&!Pce(i,p.rung);)l=!0,u+=1,c=0,p=d[u];if(p===void 0)return{kind:"red",cause:l?"grant_unavailable":"rungs_exhausted",run:fr(a,{rung:"classification",outcome:l?"grant_unavailable":"rungs_exhausted",atMs:t,detail:l?"no executable recovery rung in this session context":"every recovery rung for this fate was already attempted"})};let m=p.rung,f=o(n,t);return f.action==="hold"?{kind:"breaker_hold",reason:f.reason,run:fr(a,{rung:m,outcome:"breaker_held",atMs:t,detail:f.reason})}:{kind:"execute_rung",rung:m,run:fr({...a,rungCursor:u,cursorAttempts:c+1,recoveryRungsAttempted:a.recoveryRungsAttempted+1},m==="cross_harness_failover"&&e.failover!==void 0?{rung:m,outcome:"attempted",atMs:t,detail:ak(e.failover),failover:e.failover}:{rung:m,outcome:"attempted",atMs:t})}}}}function uk(e,n){return fr(e,{rung:"cross_harness_failover",outcome:n.outcome,atMs:n.atMs,detail:n.detail===void 0?ak(n.failover):`${ak(n.failover)} - ${n.detail}`,failover:n.failover})}function wF(e,n){return fr({...e,holdDispatched:!0},{rung:"hold",outcome:"hold_dispatched",atMs:n})}function SF(e){return`holding until ${new Date(e).toISOString()} - the model provider reported a rate limit; your message will be sent automatically when the limit resets`}function hc(e,n,t=Ty()){let r=_F[n],o=e===void 0?[]:e.entries.slice(0,bF).map(i=>({rung:i.rung,outcome:i.outcome,at_ms:i.atMs,...i.detail===void 0?{}:{detail:i.detail.slice(0,200)},...i.resetAtMs===void 0?{}:{reset_at_ms:i.resetAtMs},...i.failover===void 0?{}:{source_harness:i.failover.sourceHarness,target_harness:i.failover.targetHarness,...i.failover.model===void 0?{}:{model:i.failover.model},...i.failover.transpiledItemCount===void 0?{}:{transpiled_item_count:i.failover.transpiledItemCount},...i.failover.redactedReasoningCount===void 0?{}:{redacted_reasoning_count:i.failover.redactedReasoningCount}}}));return{fate:n,policy:r.kind,recovery_rungs_attempted:e?.recoveryRungsAttempted??0,budget:{max_recovery_rungs:t.maxRecoveryRungs,max_ladder_ms:t.maxLadderMs,max_rate_limit_hold_ms:t.maxRateLimitHoldMs},...e?.historyTruncated===!0?{history_truncated:!0}:{},...n==="deterministic"&&o.length===0?{entries:[{rung:"classification",outcome:"no_rungs_by_design",at_ms:0,detail:"classification: deterministic, no rungs attempted by design"}]}:{entries:o}}}function kF(e){let n=e.rateLimits;if(typeof n!="object"||n===null)return;let t=n,r;for(let o of["primary","secondary"]){let i=t[o];if(typeof i!="object"||i===null)continue;let s=i,a=s.usedPercent,d=s.resetsAt;if(typeof a=="number"&&a>=100&&typeof d=="number"&&Number.isFinite(d)&&d>0){let u=Math.floor(d*1e3);r=r===void 0?u:Math.min(r,u)}}return r}var kce,Cce,_F,ik,bF,ck,lk,vF,pk=F(()=>{"use strict";kce={rung:"cross_harness_failover",maxAttempts:1};Cce=2,_F={deterministic:{kind:"red_immediately"},transient_upstream:{kind:"recover",rungs:[{rung:"in_place_resume",maxAttempts:Cce}]},transient_local:{kind:"recover",rungs:[{rung:"redispatch",maxAttempts:1},{rung:"worker_rebuild",maxAttempts:1}]},rate_limited:{kind:"hold_until_reset"},needs_approval:{kind:"never_ladders"},needs_decision:{kind:"never_ladders"}},ik={maxRecoveryRungs:4,maxLadderMs:15*6e4,maxRateLimitHoldMs:30*6e4};bF=16;ck="retrying automatically after a local runner failure",lk="rebuilding the runner worker and retrying automatically",vF="resuming this job on another harness after the current harness backend died"});function rf(e){if(!Number.isInteger(e)||e<=0)throw new Error(`invalid bounded cache limit: ${e}`);return{limit:e,values:new Map}}function gc(e,n){return e.values.get(n)}function of(e,n,t){for(e.values.set(n,t);e.values.size>e.limit;){let r=e.values.keys().next().value;r!==void 0&&e.values.delete(r)}}function CF(e,n){e.values.delete(n)}var TF=F(()=>{"use strict"});import{closeSync as RF,fstatSync as Ice,mkdirSync as Py,openSync as EF,readdirSync as Rce,readFileSync as DF,readSync as Ece,renameSync as Dce,rmSync as fk,statSync as Mce,writeFileSync as MF}from"node:fs";import{spawn as Ace,execFile as $ce}from"node:child_process";import{createHash as Oce}from"node:crypto";import{createConnection as Lce}from"node:net";import{homedir as jce}from"node:os";import{dirname as mk,join as dd}from"node:path";function uf(){let e=process.env.LINZUMI_DEV_SERVICES_DIR?.trim();return e!==void 0&&e!==""?e:dd(jce(),".linzumi","dev-services")}function ud(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=Oce("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return dd(uf(),`${r}.${t}`)}function Ry(e){let n=e.trim().toLowerCase();return/^[a-z0-9][a-z0-9._-]{0,63}$/.test(n)&&!n.includes("..")?n:void 0}function hk(e,n){return dd(e,"services",`${n}.json`)}function gk(e,n){return dd(e,"exits",`${n}.json`)}function $F(e,n){return dd(e,"logs",`${n}.log`)}function sf(e){return typeof e=="string"&&e!==""?e:void 0}function af(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Fce(e){return Array.isArray(e)?e.filter(n=>typeof n=="number"&&Number.isInteger(n)&&n>0&&n<=65535):[]}function zce(e){if(!Z(e)||e.version!==AF)return;let n=sf(e.name),t=n===void 0?void 0:Ry(n),r=sf(e.command),o=sf(e.cwd),i=e.desiredState==="running"||e.desiredState==="stopped"?e.desiredState:void 0,s=af(e.updatedAtMs),a=sf(e.logPath);if(!(t===void 0||t!==n||r===void 0||o===void 0||i===void 0||s===void 0||a===void 0))return{name:t,command:r,cwd:o,ports:Fce(e.ports),restartOnBranchChange:e.restartOnBranchChange===!0,desiredState:i,pid:af(e.pid),ownerPid:af(e.ownerPid),startedAtMs:af(e.startedAtMs),updatedAtMs:s,lastBranch:sf(e.lastBranch),logPath:a}}function qce(e){return{version:AF,name:e.name,command:e.command,cwd:e.cwd,ports:[...e.ports],restartOnBranchChange:e.restartOnBranchChange,desiredState:e.desiredState,pid:e.pid??null,ownerPid:e.ownerPid??null,startedAtMs:e.startedAtMs??null,updatedAtMs:e.updatedAtMs,lastBranch:e.lastBranch??null,logPath:e.logPath}}function Iy(e,n,t){let r=hk(e,n.name);try{Py(mk(r),{recursive:!0});let o=`${r}.tmp`;MF(o,`${JSON.stringify(qce(n))}
|
|
587
|
-
`,"utf8"),
|
|
588
|
+
`)}]})});if(!o.ok)throw new Error(`reconnect context summarization failed: ${o.status} ${o.statusText}`);let i=await o.json();if(!Z(i))throw new Error("reconnect context summarizer returned non-object JSON");let s=i.choices;if(!Array.isArray(s))throw new Error("reconnect context summarizer response did not include choices");let a=s.find(Z),d=A(a?.message),u=h(d?.content)?.trim();if(u===void 0||u==="")throw new Error("reconnect context summarizer response did not include message content");return u}function gce(){let e=Ws("LINZUMI_RECONNECT_CONTEXT_API_KEY");if(e!==void 0)return{apiKey:e,baseUrl:Ws("LINZUMI_RECONNECT_CONTEXT_BASE_URL")??"https://api.groq.com/openai/v1"};let n=Ws("GROQ_API_KEY");if(n!==void 0)return{apiKey:n,baseUrl:Ws("GROQ_BASE_URL")??"https://api.groq.com/openai/v1"};let t=Ws("OPENROUTER_API_KEY");if(t!==void 0)return{apiKey:t,baseUrl:Ws("OPENROUTER_BASE_URL")??"https://openrouter.ai/api/v1"}}function yce(e){if(!Z(e))return[];let n=Y(e.seq),t=A(e.payload)??{},r=h(e.body)??h(t.body)??h(t.text),o=h(e.type)??"thread.message";if(n===void 0||r===void 0)return[];let i=A(e.actor)??{};return[{seq:n,type:o,actorKind:h(i.kind)??"unknown",actorSlug:h(i.slug),actorUserId:Y(e.actor_user_id),body:r,payload:t}]}function HS(e){let n=e.actorSlug?.trim()===""||e.actorSlug===void 0?e.actorKind:e.actorSlug,t=e.actorUserId===void 0?"unknown":e.actorUserId.toString();return[`Linzumi durable message seq=${e.seq} from ${n} (kind=${e.actorKind}, user_id=${t}):`,"",e.body].join(`
|
|
589
|
+
`)}function xce(e){let n=A(e.metadata),t=A(n?.local_codex_runner),r=h(t?.event_type);return r===void 0||r.trim()===""?void 0:r.trim()}function _ce(e){let n=e.body.trim();return n.startsWith("Codex reconnected.")||n.startsWith("[codex reconnected")||n.startsWith("Codex is ready.")||/^Runner port \d+ is open in (Kandan|Linzumi):/.test(n)||/^.+ on port \d+ is ready in Linzumi\. \[Open\]\(/.test(n)}function Ws(e){let n=process.env[e];return n===void 0||n.trim()===""?void 0:n.trim()}var Xj,lce,pce,fce,GS=F(()=>{"use strict";Hn();nc();$n();Xj=5,lce="openai/gpt-oss-120b";pce=12,fce=24e3});function pc(e){let n=Math.max(0,Math.floor(e)-1);return n===0?`${rF} on your runner`:`${rF} and ${n} earlier queued message${n===1?"":"s"} on your runner`}function iF(e){let n=Math.max(1,Math.floor(e));return`${bce} ${n} earlier queued message${n===1?"":"s"} on your runner`}function wce(e,n=1){let t=Math.floor(n)>1?"will run when its turn comes":"will run after the current turn finishes";return e==="attachments_require_own_turn"?`${t} (attachments can't join a running turn)`:e.startsWith("turn_not_steerable_")?`${t} (it couldn't be steered into the running turn)`:e==="engine_rejected_steer"?`${t} (the running turn couldn't accept it as steering input)`:t}function QS(e,n){return`${pc(e)} - `+wce(n,e)}function sF(e){let n=A(e.params)??{},t=h(n.command)??h(n.cmd),r=h(n.path)??h(n.filePath)??h(n.file),o=t??r??h(n.reason)??h(n.summary)??e.method;return{requestId:String(e.id),kind:e.method,summary:o}}function vy(e,n){return`${n}:${e}`}function Sy(e,n){if(e==="item/agentMessage/delta"||e==="item/reasoning/textDelta")return"streaming response";if(e.startsWith("item/commandExecution/")||e==="command/exec/outputDelta")return"running terminal command";let t=A(n.item)??n;switch(h(t.type)){case"commandExecution":case"terminalInput":return"running terminal command";case"agentMessage":case"reasoning":case"fileChange":case"web_search_call":case"webSearchCall":case"webSearch":return"streaming response";default:return}}function ky(e){return e.reason==="awaiting approval"?{status:"processing",reason:e.reason,approval:e.approval}:{status:"processing",reason:e.reason}}var ZS,oF,bce,Yp,rF,Cy=F(()=>{"use strict";Hn();ZS="model stream stalled - resuming automatically from the last streamed checkpoint",oF="upstream outage detected - recovery paused, resuming automatically",bce="queued behind",Yp="steered into the running turn on your runner",rF="queued behind the running turn"});function Sce(e){return e==="closed"||e==="open"||e==="half_open"?e:void 0}function XS(e){let n=A(e);if(n===void 0)return;let t=Sce(n.state),r=h(n.fate),o=Y(n.version);if(t===void 0||r===void 0||!bo(r)||o===void 0)return;let i=h(n.openedAt),s=i===void 0?void 0:Date.parse(i),a=Y(n.probeIntervalSeconds);return{state:t,fate:r,openedAtMs:s===void 0||Number.isNaN(s)?void 0:s,probeIntervalMs:a===void 0||a<=0?vce:a*1e3,detectionRule:h(n.detectionRule),version:o}}function YS(e){let n=ef.snapshots.get(e.fate);return n!==void 0&&e.version<n.version?"stale":(ef.snapshots.set(e.fate,e),"applied")}function aF(e){let n=XS(e);return n===void 0?{outcome:"invalid"}:{outcome:YS(n),snapshot:n}}function ek(e,n=Date.now()){let t=ef.snapshots.get(e);if(t===void 0||t.state==="closed")return{action:"proceed"};if(t.state==="open")return{action:"hold",reason:"fleet_breaker_open"};let r=ef.lastCanaryAtMs.get(e);return r===void 0||n-r>=t.probeIntervalMs?(ef.lastCanaryAtMs.set(e,n),{action:"canary"}):{action:"hold",reason:"fleet_breaker_half_open_awaiting_probe"}}var vce,ef,nk=F(()=>{"use strict";Hn();ic();vce=3e5,ef={snapshots:new Map,lastCanaryAtMs:new Map}});function ad(e){switch(e.status){case"active":case"completing":return e.turnId;case"idle":case"starting":return}}function fc(e,n){switch(e.status){case"active":case"completing":return e.turnId===n?e.queuedSeq:void 0;case"idle":case"starting":return}}function tk(e){switch(e.status){case"active":case"starting":return e.queuedSeq;case"idle":case"completing":return}}function dF(e){switch(e.status){case"starting":return{status:"starting",queuedSeq:e.queuedSeq,interruptAfterStart:!0};case"idle":case"active":case"completing":return e}}function uF(e,n){switch(e.status){case"active":return e.turnId===n?e.queuedSeq:void 0;case"idle":case"starting":case"completing":return}}function cF(e,n){switch(e.status){case"starting":return!0;case"active":case"completing":return e.turnId===n;case"idle":return!1}}var lF=F(()=>{"use strict"});function fF(){return{items:[],head:0}}function Yo(e){return e.items.length-e.head}function rk(e,n){e.items.push(n)}function nf(e,n){for(let t=e.head;t<e.items.length;t+=1){let r=e.items[t];if(r!==void 0&&sd(r).includes(n))return!0}return!1}function ok(e){return yF(e).slice()}function mF(e){let n=e.items[e.head];if(n===void 0){pF(e);return}return e.head=e.head+1,pF(e),n}function hF(e){let n=[];for(let t=e.head;t<e.items.length;t+=1){let r=e.items[t];r!==void 0&&n.push(r)}return e.items=[],e.head=0,n}function mc(e,n){if(e.head>0){e.head=e.head-1,e.items[e.head]=n;return}e.items.unshift(n)}function gF(e,n){let t=Qj(yF(e),n);return t.ok&&kce(e,t.queue),t}function kce(e,n){e.items=n,e.head=0}function yF(e){return e.head===0?e.items:e.items.slice(e.head)}function pF(e){if(e.head!==0){if(e.head>=e.items.length){e.items=[],e.head=0;return}e.head>e.items.length/2&&(e.items=e.items.slice(e.head),e.head=0)}}var xF=F(()=>{"use strict";by()});function tf(e=process.env){let n=e.LINZUMI_CROSS_HARNESS_FAILOVER?.trim().toLowerCase();return n==="1"||n==="true"||n==="on"}function ak(e){return`failover ${e.sourceHarness}->${e.targetHarness} model=${e.model??"unspecified"}`+(e.transpiledItemCount===void 0?"":` items=${e.transpiledItemCount}`)+(e.redactedReasoningCount===void 0?"":` redacted=${e.redactedReasoningCount}`)}function sk(e,n){let t=e?.trim();if(t===void 0||t==="")return n;let r=Number(t);return Number.isFinite(r)&&r>0?Math.floor(r):n}function Ty(e=process.env){return{maxRecoveryRungs:sk(e.LINZUMI_FATE_LADDER_MAX_RECOVERY_RUNGS,ik.maxRecoveryRungs),maxLadderMs:sk(e.LINZUMI_FATE_LADDER_BUDGET_MS,ik.maxLadderMs),maxRateLimitHoldMs:sk(e.LINZUMI_FATE_LADDER_MAX_HOLD_MS,ik.maxRateLimitHoldMs)}}function Pce(e,n){return{fate:e,startedAtMs:n,rungCursor:0,cursorAttempts:0,recoveryRungsAttempted:0,holdCommitted:!1,holdDispatched:!1,entries:[],historyTruncated:!1}}function fr(e,n){return e.entries.length>=bF?e.historyTruncated?e:{...e,historyTruncated:!0}:{...e,entries:[...e.entries,n]}}function Ice(e,n){switch(n){case"in_place_resume":return e.inPlaceResume;case"redispatch":return e.redispatch;case"worker_rebuild":return e.workerRebuild;case"cross_harness_failover":return e.crossHarnessFailover===!0}}function dk(e){let{fate:n,nowMs:t,budgets:r,breaker:o,grants:i}=e;if(n===void 0)return{kind:"stand",cause:"no_fate"};let s=_F[n],a=e.run??Pce(n,t);switch(s.kind){case"never_ladders":return{kind:"stand",cause:"never_ladders"};case"red_immediately":return{kind:"red",cause:"deterministic_by_design",run:fr(a,{rung:"classification",outcome:"no_rungs_by_design",atMs:t,detail:"classification: deterministic, no rungs attempted by design"})};case"hold_until_reset":{if(a.holdCommitted)return{kind:"red",cause:"hold_already_committed",run:fr(a,{rung:"hold",outcome:"rungs_exhausted",atMs:t,detail:"the one hold-and-dispatch was already spent"})};let d=e.rateLimitResetAtMs;if(d===void 0||!(d>t)){if(i.inPlaceResume){let c=o(n,t);return c.action==="hold"?{kind:"breaker_hold",reason:c.reason,run:fr(a,{rung:"in_place_resume",outcome:"breaker_held",atMs:t,detail:c.reason})}:a.recoveryRungsAttempted>=r.maxRecoveryRungs?{kind:"red",cause:"budget_rungs_exhausted",run:fr(a,{rung:"classification",outcome:"budget_rungs_exhausted",atMs:t,detail:`${a.recoveryRungsAttempted} recovery rungs attempted (budget ${r.maxRecoveryRungs})`})}:{kind:"execute_rung",rung:"in_place_resume",run:fr({...a,recoveryRungsAttempted:a.recoveryRungsAttempted+1},{rung:"in_place_resume",outcome:"attempted",atMs:t,detail:"reducer-granted bounded retry (transient-evidence carve-out; no known reset to hold for)"})}}return{kind:"red",cause:"hold_unavailable_no_reset",run:fr(a,{rung:"hold",outcome:"hold_unavailable_no_reset",atMs:t,detail:"no known rate-limit reset timestamp"})}}if(d-t>r.maxRateLimitHoldMs)return{kind:"red",cause:"hold_unavailable_reset_beyond_bound",run:fr(a,{rung:"hold",outcome:"hold_unavailable_reset_beyond_bound",atMs:t,resetAtMs:d,detail:`reset is ${Math.round((d-t)/1e3)}s away, beyond the ${Math.round(r.maxRateLimitHoldMs/1e3)}s hold budget`})};let u=o(n,t);return u.action==="hold"?{kind:"breaker_hold",reason:u.reason,run:fr(a,{rung:"hold",outcome:"breaker_held",atMs:t,detail:u.reason})}:{kind:"hold_until_reset",resetAtMs:d,run:fr({...a,holdCommitted:!0},{rung:"hold",outcome:"held",atMs:t,resetAtMs:d})}}case"recover":{let d=n==="transient_local"&&e.failover!==void 0?[...s.rungs,Cce]:s.rungs;if(a.recoveryRungsAttempted>=r.maxRecoveryRungs)return{kind:"red",cause:"budget_rungs_exhausted",run:fr(a,{rung:"classification",outcome:"budget_rungs_exhausted",atMs:t,detail:`${a.recoveryRungsAttempted} recovery rungs attempted (budget ${r.maxRecoveryRungs})`})};if(t-a.startedAtMs>r.maxLadderMs)return{kind:"red",cause:"budget_wall_clock_exhausted",run:fr(a,{rung:"classification",outcome:"budget_wall_clock_exhausted",atMs:t,detail:`ladder open ${Math.round((t-a.startedAtMs)/1e3)}s (budget ${Math.round(r.maxLadderMs/1e3)}s)`})};let u=a.rungCursor,c=a.cursorAttempts,l=!1,p=d[u];for(;p!==void 0&&c>=p.maxAttempts;)u+=1,c=0,p=d[u];for(;p!==void 0&&!Ice(i,p.rung);)l=!0,u+=1,c=0,p=d[u];if(p===void 0)return{kind:"red",cause:l?"grant_unavailable":"rungs_exhausted",run:fr(a,{rung:"classification",outcome:l?"grant_unavailable":"rungs_exhausted",atMs:t,detail:l?"no executable recovery rung in this session context":"every recovery rung for this fate was already attempted"})};let m=p.rung,f=o(n,t);return f.action==="hold"?{kind:"breaker_hold",reason:f.reason,run:fr(a,{rung:m,outcome:"breaker_held",atMs:t,detail:f.reason})}:{kind:"execute_rung",rung:m,run:fr({...a,rungCursor:u,cursorAttempts:c+1,recoveryRungsAttempted:a.recoveryRungsAttempted+1},m==="cross_harness_failover"&&e.failover!==void 0?{rung:m,outcome:"attempted",atMs:t,detail:ak(e.failover),failover:e.failover}:{rung:m,outcome:"attempted",atMs:t})}}}}function uk(e,n){return fr(e,{rung:"cross_harness_failover",outcome:n.outcome,atMs:n.atMs,detail:n.detail===void 0?ak(n.failover):`${ak(n.failover)} - ${n.detail}`,failover:n.failover})}function wF(e,n){return fr({...e,holdDispatched:!0},{rung:"hold",outcome:"hold_dispatched",atMs:n})}function SF(e){return`holding until ${new Date(e).toISOString()} - the model provider reported a rate limit; your message will be sent automatically when the limit resets`}function hc(e,n,t=Ty()){let r=_F[n],o=e===void 0?[]:e.entries.slice(0,bF).map(i=>({rung:i.rung,outcome:i.outcome,at_ms:i.atMs,...i.detail===void 0?{}:{detail:i.detail.slice(0,200)},...i.resetAtMs===void 0?{}:{reset_at_ms:i.resetAtMs},...i.failover===void 0?{}:{source_harness:i.failover.sourceHarness,target_harness:i.failover.targetHarness,...i.failover.model===void 0?{}:{model:i.failover.model},...i.failover.transpiledItemCount===void 0?{}:{transpiled_item_count:i.failover.transpiledItemCount},...i.failover.redactedReasoningCount===void 0?{}:{redacted_reasoning_count:i.failover.redactedReasoningCount}}}));return{fate:n,policy:r.kind,recovery_rungs_attempted:e?.recoveryRungsAttempted??0,budget:{max_recovery_rungs:t.maxRecoveryRungs,max_ladder_ms:t.maxLadderMs,max_rate_limit_hold_ms:t.maxRateLimitHoldMs},...e?.historyTruncated===!0?{history_truncated:!0}:{},...n==="deterministic"&&o.length===0?{entries:[{rung:"classification",outcome:"no_rungs_by_design",at_ms:0,detail:"classification: deterministic, no rungs attempted by design"}]}:{entries:o}}}function kF(e){let n=e.rateLimits;if(typeof n!="object"||n===null)return;let t=n,r;for(let o of["primary","secondary"]){let i=t[o];if(typeof i!="object"||i===null)continue;let s=i,a=s.usedPercent,d=s.resetsAt;if(typeof a=="number"&&a>=100&&typeof d=="number"&&Number.isFinite(d)&&d>0){let u=Math.floor(d*1e3);r=r===void 0?u:Math.min(r,u)}}return r}var Cce,Tce,_F,ik,bF,ck,lk,vF,pk=F(()=>{"use strict";Cce={rung:"cross_harness_failover",maxAttempts:1};Tce=2,_F={deterministic:{kind:"red_immediately"},transient_upstream:{kind:"recover",rungs:[{rung:"in_place_resume",maxAttempts:Tce}]},transient_local:{kind:"recover",rungs:[{rung:"redispatch",maxAttempts:1},{rung:"worker_rebuild",maxAttempts:1}]},rate_limited:{kind:"hold_until_reset"},needs_approval:{kind:"never_ladders"},needs_decision:{kind:"never_ladders"}},ik={maxRecoveryRungs:4,maxLadderMs:15*6e4,maxRateLimitHoldMs:30*6e4};bF=16;ck="retrying automatically after a local runner failure",lk="rebuilding the runner worker and retrying automatically",vF="resuming this job on another harness after the current harness backend died"});function rf(e){if(!Number.isInteger(e)||e<=0)throw new Error(`invalid bounded cache limit: ${e}`);return{limit:e,values:new Map}}function gc(e,n){return e.values.get(n)}function of(e,n,t){for(e.values.set(n,t);e.values.size>e.limit;){let r=e.values.keys().next().value;r!==void 0&&e.values.delete(r)}}function CF(e,n){e.values.delete(n)}var TF=F(()=>{"use strict"});import{closeSync as RF,fstatSync as Rce,mkdirSync as Py,openSync as EF,readdirSync as Ece,readFileSync as DF,readSync as Dce,renameSync as Mce,rmSync as fk,statSync as Ace,writeFileSync as MF}from"node:fs";import{spawn as $ce,execFile as Oce}from"node:child_process";import{createHash as Lce}from"node:crypto";import{createConnection as jce}from"node:net";import{homedir as Fce}from"node:os";import{dirname as mk,join as dd}from"node:path";function uf(){let e=process.env.LINZUMI_DEV_SERVICES_DIR?.trim();return e!==void 0&&e!==""?e:dd(Fce(),".linzumi","dev-services")}function ud(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=Lce("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return dd(uf(),`${r}.${t}`)}function Ry(e){let n=e.trim().toLowerCase();return/^[a-z0-9][a-z0-9._-]{0,63}$/.test(n)&&!n.includes("..")?n:void 0}function hk(e,n){return dd(e,"services",`${n}.json`)}function gk(e,n){return dd(e,"exits",`${n}.json`)}function $F(e,n){return dd(e,"logs",`${n}.log`)}function sf(e){return typeof e=="string"&&e!==""?e:void 0}function af(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function zce(e){return Array.isArray(e)?e.filter(n=>typeof n=="number"&&Number.isInteger(n)&&n>0&&n<=65535):[]}function qce(e){if(!Z(e)||e.version!==AF)return;let n=sf(e.name),t=n===void 0?void 0:Ry(n),r=sf(e.command),o=sf(e.cwd),i=e.desiredState==="running"||e.desiredState==="stopped"?e.desiredState:void 0,s=af(e.updatedAtMs),a=sf(e.logPath);if(!(t===void 0||t!==n||r===void 0||o===void 0||i===void 0||s===void 0||a===void 0))return{name:t,command:r,cwd:o,ports:zce(e.ports),restartOnBranchChange:e.restartOnBranchChange===!0,desiredState:i,pid:af(e.pid),ownerPid:af(e.ownerPid),startedAtMs:af(e.startedAtMs),updatedAtMs:s,lastBranch:sf(e.lastBranch),logPath:a}}function Nce(e){return{version:AF,name:e.name,command:e.command,cwd:e.cwd,ports:[...e.ports],restartOnBranchChange:e.restartOnBranchChange,desiredState:e.desiredState,pid:e.pid??null,ownerPid:e.ownerPid??null,startedAtMs:e.startedAtMs??null,updatedAtMs:e.updatedAtMs,lastBranch:e.lastBranch??null,logPath:e.logPath}}function Iy(e,n,t){let r=hk(e,n.name);try{Py(mk(r),{recursive:!0});let o=`${r}.tmp`;MF(o,`${JSON.stringify(Nce(n))}
|
|
590
|
+
`,"utf8"),Mce(o,r)}catch(o){t("dev_services.record_write_failed",{path:r,message:o instanceof Error?o.message:String(o)})}}function yk(e,n){let t=Ry(n);if(t===void 0)return;let r;try{r=DF(hk(e,t),"utf8")}catch{return}try{return qce(JSON.parse(r))}catch{return}}function cf(e){let n;try{n=Ece(dd(e,"services"))}catch{return[]}let t=[];for(let r of n){if(!r.endsWith(".json"))continue;let o=yk(e,r.slice(0,-5));o!==void 0&&t.push(o)}return t.sort((r,o)=>r.name.localeCompare(o.name))}function xk(e,n){let t;try{t=DF(gk(e,n),"utf8")}catch{return}try{let r=JSON.parse(t);if(!Z(r))return;let o=af(r.atMs);return o===void 0?void 0:{code:typeof r.code=="number"?r.code:null,signal:typeof r.signal=="string"?r.signal:null,atMs:o}}catch{return}}function Uce(e){return JSON.stringify(e)}function Bce(){return`
|
|
588
591
|
const { spawn } = require('node:child_process');
|
|
589
592
|
const fs = require('node:fs');
|
|
590
593
|
const config = JSON.parse(process.argv[process.argv.length - 1]);
|
|
@@ -640,18 +643,18 @@ const watchdog = setInterval(() => {
|
|
|
640
643
|
}
|
|
641
644
|
}
|
|
642
645
|
}, config.pollIntervalMs);
|
|
643
|
-
`.trim()}function
|
|
646
|
+
`.trim()}function Jce(e,n){return{command:e,args:["-e",Bce(),Uce(n)]}}function OF(e,n=t=>process.kill(t,0)){if(e===void 0||e<=1)return!1;try{return n(-e),!0}catch(t){return t?.code==="EPERM"}}function lf(e,n){if(n.pid===void 0||n.pid<=1)return!1;let t=xk(e,n.name);return t!==void 0&&n.startedAtMs!==void 0&&t.atMs>=n.startedAtMs?!1:OF(n.pid)}async function _k(e,n=750,t="127.0.0.1"){return await new Promise(r=>{let o=jce({port:e,host:t}),i=s=>{o.removeAllListeners(),o.destroy(),r(s)};o.setTimeout(n),o.once("connect",()=>i(!0)),o.once("timeout",()=>i(!1)),o.once("error",()=>i(!1))})}async function Kce(e,n){let t=lf(e,n),r=[];for(let i of n.ports)r.push({port:i,listening:t?await _k(i):!1});let o=n.desiredState==="stopped"?"stopped":t?r.every(i=>i.listening)?"running":"unhealthy":"exited";return{record:n,liveness:o,portProbes:r,lastExit:xk(e,n.name)}}async function pf(e){let n=[];for(let t of cf(e))n.push(await Kce(e,t));return n}function Vce(e=process.env){let n=e.SHELL?.trim();return n!==void 0&&n!==""?n:"/bin/sh"}async function Ey(e){let n=e.log??df,t=Ry(e.definition.name);if(t===void 0)return{ok:!1,error:"invalid service name: use 1-64 lowercase letters, digits, ., _ or -"};let r=e.definition.command.trim();if(r==="")return{ok:!1,error:"service command must not be empty"};try{if(!Ace(e.definition.cwd).isDirectory())return{ok:!1,error:`cwd is not a directory: ${e.definition.cwd}`}}catch{return{ok:!1,error:`cwd does not exist: ${e.definition.cwd}`}}let o=yk(e.scopeDir,t);o!==void 0&&lf(e.scopeDir,o)&&await LF(o.pid,n,t);let i=e.nowMs??Date.now(),s=$F(e.scopeDir,t),a=gk(e.scopeDir,t),d;try{Py(mk(s),{recursive:!0}),Py(dd(e.scopeDir,"services"),{recursive:!0}),Py(mk(a),{recursive:!0}),d=EF(s,"a")}catch(m){return{ok:!1,error:`cannot open service log: ${m instanceof Error?m.message:String(m)}`}}try{fk(a,{force:!0})}catch{}let u=e.shellPath??Vce(),c=Jce(e.nodeExecPath??process.execPath,{command:u,args:["-lc",r],cwd:e.definition.cwd,ownerPid:e.ownerPid,pollIntervalMs:e.watchdogPollIntervalMs??500,exitStatusPath:a});try{MF(d,`
|
|
644
647
|
--- linzumi dev-service "${t}" starting at ${new Date(i).toISOString()} (owner pid ${e.ownerPid}) ---
|
|
645
648
|
$ ${r}
|
|
646
|
-
`)}catch{}let l;try{let m
|
|
649
|
+
`)}catch{}let l;try{let m=$ce(c.command,[...c.args],{cwd:e.definition.cwd,detached:!0,stdio:["ignore",d,d],env:{...process.env,ELECTRON_RUN_AS_NODE:"1"}});m.unref(),l=m.pid}catch(m){return{ok:!1,error:`spawn failed: ${m instanceof Error?m.message:String(m)}`}}finally{try{RF(d)}catch{}}if(l===void 0)return{ok:!1,error:"spawn failed: no pid"};let p={name:t,command:r,cwd:e.definition.cwd,ports:[...new Set(e.definition.ports)].sort((m,f)=>m-f),restartOnBranchChange:e.definition.restartOnBranchChange===!0,desiredState:"running",pid:l,ownerPid:e.ownerPid,startedAtMs:i,updatedAtMs:i,lastBranch:void 0,logPath:s};return Iy(e.scopeDir,p,n),n("dev_services.started",{name:t,pid:l,owner_pid:e.ownerPid,cwd:e.definition.cwd,ports:[...p.ports]}),{ok:!0,record:p}}async function LF(e,n,t,r=3e3){if(e===void 0||e<=1)return;try{process.kill(-e,"SIGTERM")}catch{return}let o=Date.now()+r;for(;Date.now()<o;){if(!OF(e))return;await new Promise(i=>setTimeout(i,100))}try{process.kill(-e,"SIGKILL"),n("dev_services.stop_escalated",{name:t,pgid:e})}catch{}}async function ff(e){let n=e.log??df,t=yk(e.scopeDir,e.name);if(t===void 0)return{ok:!1,error:`unknown service: ${e.name}`};lf(e.scopeDir,t)&&await LF(t.pid,n,t.name);let r={...t,desiredState:"stopped",pid:void 0,ownerPid:void 0,updatedAtMs:e.nowMs??Date.now()};return Iy(e.scopeDir,r,n),n("dev_services.stopped",{name:t.name}),{ok:!0,record:r}}async function Dy(e){let n=await ff(e);if(!n.ok)return n;try{fk(hk(e.scopeDir,n.record.name),{force:!0}),fk(gk(e.scopeDir,n.record.name),{force:!0})}catch{}return n}function My(e,n,t=16384){let r=Ry(n);if(r===void 0)return;let o=$F(e,r),i;try{i=EF(o,"r");let s=Rce(i).size,a=Math.min(s,t),d=Buffer.alloc(a);return Dce(i,d,0,a,s-a),d.toString("utf8")}catch{return}finally{if(i!==void 0)try{RF(i)}catch{}}}function Wce(e,n=(t,r)=>process.kill(t,r)){let t=[],r=[];for(let o of cf(e)){let i=o.pid;if(i===void 0||i<=1)continue;let s=xk(e,o.name);if(s!==void 0&&o.startedAtMs!==void 0&&s.atMs>=o.startedAtMs)continue;let a=!0;try{n(-i,0)}catch(d){a=d?.code==="EPERM"}if(a)try{n(-i,"SIGKILL"),t.push(i)}catch(d){r.push({pgid:i,message:d instanceof Error?d.message:String(d)})}}return{reaped:t,failures:r}}async function jF(e){let n=e.log??df,t=[],r=[],o=[],i=[];for(let s of cf(e.scopeDir)){if(s.desiredState!=="running"){i.push(s.name);continue}let a=lf(e.scopeDir,s),d=await Ey({scopeDir:e.scopeDir,definition:{name:s.name,command:s.command,cwd:s.cwd,ports:s.ports,restartOnBranchChange:s.restartOnBranchChange},ownerPid:e.ownerPid,log:n,...e.shellPath===void 0?{}:{shellPath:e.shellPath},...e.nodeExecPath===void 0?{}:{nodeExecPath:e.nodeExecPath}});d.ok?(a?r:t).push(s.name):o.push({name:s.name,error:d.error})}return n("dev_services.reconciled",{restarted:[...t],replaced:[...r],failed:o.map(s=>s.name),stopped_records:[...i]}),{restarted:t,alreadyRunningReplaced:r,failed:o,stopped:i}}function Ay(e,n=3e3,t=Date.now){let r;return()=>{let o=t();return(r===void 0||o-r.readAtMs>n)&&(r={readAtMs:o,ports:Hce(e)}),r.ports}}function Hce(e){let n=new Set;for(let t of cf(e))if(t.desiredState==="running")for(let r of t.ports)n.add(r);return[...n].sort((t,r)=>t-r)}function Gce(e){return new Promise(n=>{Oce("git",["-C",e,"branch","--show-current"],{timeout:5e3},(t,r)=>{if(t!==null){n(void 0);return}let o=r.trim();n(o===""?void 0:o)})})}function FF(e){let n=e.log??df,t=new Map,r=!1,o=async(a,d)=>{let u=Date.now(),c=(t.get(a.name)??[]).filter(p=>u-p<=PF);if(c.length>=Zce){n("dev_services.restart_budget_exhausted",{name:a.name,reason:d,window_ms:PF});return}c.push(u),t.set(a.name,c);let l=await Ey({scopeDir:e.scopeDir,definition:{name:a.name,command:a.command,cwd:a.cwd,ports:a.ports,restartOnBranchChange:a.restartOnBranchChange},ownerPid:e.ownerPid,log:n,...e.shellPath===void 0?{}:{shellPath:e.shellPath},...e.nodeExecPath===void 0?{}:{nodeExecPath:e.nodeExecPath}});n(l.ok?"dev_services.auto_restarted":"dev_services.restart_failed",{name:a.name,reason:d,...l.ok?{}:{error:l.error}})},i=async()=>{if(!r){r=!0;try{for(let a of cf(e.scopeDir))if(a.desiredState==="running"){if(!lf(e.scopeDir,a)){await o(a,"exited");continue}if(a.restartOnBranchChange){let d=await Gce(a.cwd);if(d===void 0)continue;a.lastBranch===void 0?Iy(e.scopeDir,{...a,lastBranch:d,updatedAtMs:Date.now()},n):a.lastBranch!==d&&(n("dev_services.branch_change_detected",{name:a.name,from:a.lastBranch,to:d}),Iy(e.scopeDir,{...a,lastBranch:d,updatedAtMs:Date.now()},n),await o(a,"branch_change"))}}}finally{r=!1}}},s=setInterval(()=>{i()},e.intervalMs??1e4);return s.unref(),{stop:()=>{clearInterval(s)}}}function zF(e,n=df){IF===void 0&&(IF=e,process.on("exit",()=>{let t=Wce(e);if(t.reaped.length>0||t.failures.length>0)try{n("dev_services.reaped_on_exit",{reaped:[...t.reaped],failures:t.failures.map(r=>r.pgid)})}catch{}}))}var df,AF,Zce,PF,IF,mf=F(()=>{"use strict";$n();df=()=>{},AF=1;Zce=5,PF=10*6e4});import{spawn as Qce}from"node:child_process";import{readlink as Xce}from"node:fs/promises";function bk(e={}){let n=e.intervalMs??Yce,t=[n,...e.backoffIntervalsMs??ele],r=e.scanBudgetMs??nle,o=sle(),i={scanProcesses:e.probes?.scanProcesses??o.scanProcesses,scanListenSockets:e.probes?.scanListenSockets??o.scanListenSockets,scanProcessCwds:e.probes?.scanProcessCwds??o.scanProcessCwds},s=e.nowMs??Date.now,a=new Set,d,u=!1,c=!1,l=!1,p=0,m=0,f=n,y,x=()=>t[Math.min(m,t.length-1)]??n,b=P=>{u&&(d!==void 0&&clearTimeout(d),d=setTimeout(R,P))},S=P=>{let O=x();if(O===f)return;f=O;let E={consecutiveFailures:m,intervalMs:O,error:P};for(let j of a)if(!j.closed)try{j.subscriber.onBackoff?.(E)}catch{}},v=P=>{f=n;for(let O of a)if(!O.closed)try{O.subscriber.onRecovered?.({failedScans:P})}catch{}},w=(P,O)=>{P.closed||P.delivering||(P.delivering=!0,Promise.resolve().then(()=>P.closed?void 0:P.subscriber.deliver(O)).catch(E=>{try{P.subscriber.onError?.($y(E))}catch{}}).finally(()=>{P.delivering=!1}))},k=async P=>{let[O,E]=await Promise.all([i.scanProcesses(),i.scanListenSockets()]);if(P!==p||!u)return;let j=new Set;for(let W of a)if(!W.closed)try{for(let te of W.subscriber.candidatePids(O,E))Number.isInteger(te)&&te>0&&j.add(te)}catch{}let z=[...j].sort((W,te)=>W-te),M=z.join(","),J=s(),K;if(y!==void 0&&y.key===M&&J-y.cachedAtMs<tle?K=y.value:(K=await i.scanProcessCwds(z),y={key:M,value:K,cachedAtMs:J}),P!==p||!u)return;let G={processRows:O,listenSockets:E,processCwds:K,scannedAtMs:s()};for(let W of[...a])w(W,G)},R=()=>{if(d=void 0,!u||c)return;c=!0;let P=++p;dle(()=>k(P),r).then(()=>{if(m>0){let O=m;m=0,v(O)}}).catch(O=>{m+=1,y=void 0,S($y(O))}).finally(()=>{c=!1;let O=l&&m===0?0:x();l=!1,b(O)})};return{subscribe:P=>{let O={subscriber:P,delivering:!1,closed:!1};return a.add(O),u?m===0&&(c?l=!0:b(0)):(u=!0,R()),{unsubscribe:()=>{O.closed||(O.closed=!0,a.delete(O),a.size===0&&(u=!1,p+=1,m=0,f=n,l=!1,y=void 0,d!==void 0&&(clearTimeout(d),d=void 0)))}}},subscriberCount:()=>a.size,isRunning:()=>u}}function UF(){return qF??=bk(),qF}function NF(e){let n=e.timeoutMs??rle,t=e.seams?.spawn??((o,i)=>Qce(o,i,{stdio:["ignore","pipe","pipe"],detached:!0})),r=e.seams?.killPid??((o,i)=>process.kill(o,i));return new Promise((o,i)=>{let s;try{s=t(e.command,e.args)}catch(m){i($y(m));return}let a="",d="",u=!1,c=()=>{let m=s.pid;if(!(m===void 0||!Number.isInteger(m)||m<=0)){try{r(-m,"SIGKILL")}catch{try{s.kill("SIGKILL")}catch{}}s.unref?.()}},l=m=>{if(!u){if(u=!0,clearTimeout(p),m.error!==void 0){i(m.error);return}o({stdout:a,stderr:d,status:m.status??null})}},p=setTimeout(()=>{c(),l({error:ile(e.label,n)})},n);s.stdout?.on("data",m=>{a+=String(m)}),s.stderr?.on("data",m=>{d+=String(m)}),s.once("error",m=>l({error:$y(m)})),s.once("close",m=>l({status:typeof m=="number"?m:null}))})}function ile(e,n){let t=new Error(`${e} timed out after ${n}ms; process group killed`);return t.code="ETIMEDOUT",t}function sle(e){let n=e?.platform??process.platform,t=e?.readCwdLink??(i=>Xce(`/proc/${i}/cwd`)),r=async i=>NF({command:"/bin/sh",args:["-c",`ulimit -n ${ole} 2>/dev/null; exec lsof ${i.join(" ")}`],label:"lsof",seams:e}),o=(i,s)=>{if(i.status===0)return i.stdout;if(!(i.status===1&&i.stdout.trim()===""))throw new Error(`${s} failed with status ${i.status}: ${i.stderr}`)};return{scanProcesses:async()=>{let i=await NF({command:"ps",args:["-axo","pid=,ppid=,command="],label:"ps",seams:e});if(i.status!==0)throw new Error(`ps failed with status ${i.status}: ${i.stderr}`);return BF(i.stdout)},scanListenSockets:async()=>{let i=await r(["-nP","-iTCP","-sTCP:LISTEN","-FpPcn"]),s=o(i,"lsof");return s===void 0?[]:JF(s)},scanProcessCwds:async i=>{let s=[...new Set(i)].filter(u=>Number.isInteger(u)&&u>0);if(s.length===0)return new Map;if(n==="linux"){let u=await Promise.all(s.map(async c=>{try{let l=(await t(c)).trim();return l===""?void 0:[c,l]}catch{return}}));return new Map(u.filter(c=>c!==void 0))}let a=await r(["-a","-p",s.join(","),"-d","cwd","-Fn"]),d=o(a,"lsof cwd");return d===void 0?new Map:KF(d)}}}function BF(e){return e.split(`
|
|
647
650
|
`).map(n=>n.trim()).filter(n=>n!=="").map(n=>{let t=n.match(/^(\d+)\s+(\d+)\s+(.*)$/);if(t!==null)return{pid:Number(t[1]),ppid:Number(t[2]),command:t[3]??""}}).filter(n=>n!==void 0)}function JF(e){let n=[],t,r;for(let o of e.split(`
|
|
648
|
-
`)){let i=o.trim();if(i.startsWith("p")){t=Number(i.slice(1)),r=void 0;continue}if(i.startsWith("c")){r=i.slice(1);continue}if(!i.startsWith("n")||t===void 0)continue;let s=
|
|
649
|
-
`)){let o=r.trim();if(o.startsWith("p")){t=Number(o.slice(1));continue}if(o.startsWith("n")&&t!==void 0){let i=o.slice(1).trim();i!==""&&n.set(t,i)}}return n}function sle(e){let n=e.match(/:(\d+)(?:\s|\(|$)/);if(n===null)return;let t=Number(n[1]);return Number.isInteger(t)?t:void 0}function $y(e){return e instanceof Error?e:new Error(String(e))}async function ale(e,n){let t,r=e();r.catch(()=>{});try{return await Promise.race([r,new Promise((o,i)=>{t=setTimeout(()=>i(new Error(`port scan exceeded its ${n}ms budget (probe never settled)`)),n)})])}finally{t!==void 0&&clearTimeout(t)}}var Xce,Yce,ele,nle,qF,tle,rle,wk=F(()=>{"use strict";Xce=1e3,Yce=[5e3,3e4],ele=2e4,nle=3e4;tle=5e3,rle=1024});import{basename as dle}from"node:path";function yc(e){if(e.rootPid===void 0)throw new Error("port_forward_watcher_root_pid_missing");if(!Number.isInteger(e.rootPid)||e.rootPid<=0)throw new Error("port_forward_watcher_root_pid_invalid");let n=e.rootPid,t=e.debounceMs??ule,r=e.lostDebounceMs??(e.intervalMs??1e3)*2+t,o=e.nowMs??Date.now,i=hle(e.commanderBoundPids??[]),s=vk(e.commanderBoundPorts??[]),a=vk(e.watchPorts??[]),d=()=>{let w;try{w=e.extraWatchPorts?.()}catch{w=void 0}return w===void 0||w.length===0?a:new Set([...a,...vk(w)])},u,c=w=>(u?.processRows!==w&&(u={processRows:w,value:d()}),u.value),l=new Map,p=new Map,m=new Map,f,y=w=>(f?.processRows!==w&&(f={processRows:w,value:new Set([...fle(w,n),...i])}),f.value),x=(w,k)=>{let R=y(w),P=c(w);return k.filter(O=>R.has(O.pid)||s.has(O.port)||P.has(O.port)).map(O=>O.pid)},b=async w=>{let k=w.listenSockets,R=y(w.processRows),P=mle(k,R,w.processCwds,i,s,c(w.processRows)),O=new Set(P.map(K=>K.port)),E=new Set(k.map(K=>`${K.pid}:${K.port}`)),j=Array.from(p.values()).filter(K=>!O.has(K.port)&&E.has(`${K.pid}:${K.port}`)),z=o(),M=ple(l,[...P,...j],z,t),J=lle(p,m,M.stableCandidates,z,r);l.clear(),p.clear(),m.clear();for(let[K,G]of M.nextObservedByPort)l.set(K,G);for(let[K,G]of J.nextObservedByPort)p.set(K,G);for(let[K,G]of J.nextMissingByPort)m.set(K,G);e.onListenersObserved?.(Array.from(p.values()).filter(K=>E.has(`${K.pid}:${K.port}`)));for(let K of J.lostCandidates)await e.onCandidateLost?.(K);for(let K of J.changedCandidates)await e.onCandidate(K)},v=(e.scheduler??cle(e)).subscribe({candidatePids:x,deliver:b,onError:w=>{e.onError?.(w)},onBackoff:w=>{e.onError?.(new Error(`port_scan_backoff: ${w.consecutiveFailures} consecutive scan failures, interval now ${w.intervalMs}ms (port detection degraded, best-effort; runner unaffected): ${w.error.message}`))},onRecovered:w=>{e.onError?.(new Error(`port_scan_recovered: scanning healthy again after ${w.failedScans} failed scans; normal interval restored`))}});return{close:()=>v.unsubscribe()}}function cle(e){if(!(e.scanProcesses!==void 0||e.scanListenSockets!==void 0||e.scanProcessCwds!==void 0||e.intervalMs!==void 0||e.nowMs!==void 0))return UF();let t=e.scanProcesses,r=e.scanListenSockets,o=e.scanProcessCwds;return bk({...e.intervalMs===void 0?{}:{intervalMs:e.intervalMs},...e.nowMs===void 0?{}:{nowMs:e.nowMs},probes:{...t===void 0?{}:{scanProcesses:()=>t()},...r===void 0?{}:{scanListenSockets:()=>r()},...o===void 0?{}:{scanProcessCwds:i=>o(i)}}})}function lle(e,n,t,r,o){let i=new Map,s=new Map,a=[],d=[];for(let u of t){i.set(u.port,u);let c=e.get(u.port);(c===void 0||!zr(c,u))&&a.push(u)}for(let u of e.values()){if(i.has(u.port))continue;let c=n.get(u.port),l=c!==void 0&&zr(c.candidate,u)?c.firstMissingAtMs:r;if(o<=0||r-l>=o){d.push(u);continue}i.set(u.port,u),s.set(u.port,{candidate:u,firstMissingAtMs:l})}return{nextObservedByPort:i,nextMissingByPort:s,changedCandidates:a,lostCandidates:d}}function ple(e,n,t,r){let o=new Map,i=[];for(let s of n){let a=e.get(s.port),d=a!==void 0&&zr(a.candidate,s)?a.firstSeenAtMs:t,u={candidate:s,firstSeenAtMs:d};o.set(s.port,u),(r<=0||t-d>=r)&&i.push(s)}return{nextObservedByPort:o,stableCandidates:i}}function zr(e,n){return e.port===n.port&&e.pid===n.pid&&VF(e.portKind)===VF(n.portKind)}function fle(e,n){let t=new Map;for(let i of e){let s=t.get(i.ppid);s===void 0?t.set(i.ppid,[i.pid]):s.push(i.pid)}let r=new Set,o=[...t.get(n)??[]];for(;o.length>0;){let i=o.shift();i===void 0||r.has(i)||(r.add(i),o.push(...t.get(i)??[]))}return r}function mle(e,n,t=new Map,r=new Set,o=new Set,i=new Set){return e.filter(s=>n.has(s.pid)||o.has(s.port)||i.has(s.port)).filter(s=>s.port>0&&s.port<65536).sort((s,a)=>s.port-a.port).map(s=>{let a=t.get(s.pid),d=r.size===0&&o.size===0?void 0:r.has(s.pid)||o.has(s.port)?"commander_bound":"descendant";return{port:s.port,pid:s.pid,command:s.command,...d===void 0?{}:{portKind:d},...a===void 0?{}:{cwd:a}}})}function hle(e){return new Set(e.filter(n=>Number.isInteger(n)&&n>0))}function vk(e){return new Set(e.filter(n=>Number.isInteger(n)&&n>0&&n<65536))}function VF(e){return e??"descendant"}function WF(e){let n=e.trim();return n===""?"unknown":dle(n.split(/\s+/)[0]??n)}var ule,Oy=F(()=>{"use strict";wk();wk();ule=750});function hf(e){if(!e.threadBound)return{type:"skip",reason:"thread_not_bound"};if(e.approvedPorts.has(e.candidate.port)){let t=e.approvedTargets.get(e.candidate.port);return t===void 0?{type:"remember_approved_target",target:e.candidate}:zr(t,e.candidate)?{type:"skip",reason:"already_approved"}:{type:"revoke_and_prompt",revoked:t,candidate:e.candidate,reason:"listener_changed"}}let n=e.pendingRequests.find(t=>t.port===e.candidate.port);return n!==void 0?zr(mr(n),e.candidate)?{type:"skip",reason:"already_pending"}:{type:"replace_pending",expired:n,candidate:e.candidate,reason:"listener_changed"}:{type:"prompt",candidate:e.candidate}}function xc(e){return{requestId:e.requestId,port:e.candidate.port,pid:e.candidate.pid,command:e.candidate.command,...e.candidate.portKind===void 0?{}:{portKind:e.candidate.portKind},...e.candidate.cwd===void 0?{}:{cwd:e.candidate.cwd},sourceSeq:e.sourceSeq}}function mr(e){return{port:e.port,pid:e.pid,command:e.command,...e.portKind===void 0?{}:{portKind:e.portKind},...e.cwd===void 0?{}:{cwd:e.cwd}}}function gf(e){return WF(e.command)}function Ly(e){return[`Port ${e.port}`,`PID ${e.pid}`,`command: ${e.command}`,...e.cwd===void 0?[]:[`cwd: ${e.cwd}`],"preview protocols: HTTP, HTTPS, WebSocket"].join(" / ")}function Hs(e,n){let r=(Array.isArray(e?.allowedPorts)?e.allowedPorts.filter(o=>typeof o=="number"&&Number.isInteger(o)&&o>=1&&o<=65535):[]).filter(o=>o!==n);return{...e??{},portForwarding:r.length>0,allowedPorts:r,revokedPorts:[n]}}var Sk=F(()=>{"use strict";Oy()});function yle(e){let n=GF(e);if(n===void 0)return;let t=xle(n);if(t!==void 0)return t;let r=_le(e);if(r!==void 0)return r}function Ii(e){let n=ble(e),t=jy(n);if(t!==void 0)return yle(t)}function xle(e){let n=Ck(e),t=Fy.get(n);if(t!==void 0)return{...t,executableName:e,matchedName:n}}function _le(e){let t=Ck(e).split("/").map(r=>kk(r)).filter(r=>r.length>0);for(let r of t.reverse()){let o=Fy.get(r);if(o!==void 0)return{...o,executableName:GF(e)??e,matchedName:r}}}function jy(e){let[n,...t]=e;switch(n){case void 0:return;case"env":case"/usr/bin/env":return jy(t.filter(r=>!HF(r)));case"sudo":case"command":case"exec":case"nohup":return jy(t.filter(r=>!r.startsWith("-")));default:switch(HF(n)){case!0:return jy(t);case!1:return n}}}function GF(e){let n=e.trim();if(n.length===0)return;let t=n.replaceAll("\\","/"),[r]=t.split("/").filter(o=>o.length>0).slice(-1);if(r!==void 0)return kk(r)}function kk(e){let n=e.toLowerCase();switch(!0){case n.endsWith(".app"):return e.slice(0,-4);case n.endsWith(".exe"):return e.slice(0,-4);case n.endsWith(".cmd"):case n.endsWith(".bat"):return e.slice(0,-4);default:return e}}function Ck(e){return kk(e.trim().replaceAll("\\","/").toLowerCase())}function HF(e){return/^[A-Za-z_][A-Za-z0-9_]*=/.test(e)}function ble(e){let n=[],t="",r,o=!1;for(let i of e.trim())switch(!0){case o:t=`${t}${i}`,o=!1;break;case i==="\\":o=!0;break;case(r===void 0&&(i==='"'||i==="'")):r=i;break;case r===i:r=void 0;break;case(r===void 0&&/\s/.test(i)):t.length>0&&(n.push(t),t="");break;default:t=`${t}${i}`;break}return t.length>0&&n.push(t),n}var gle,Fy,iWe,Tk=F(()=>{"use strict";gle=[{appName:"Bun",iconKey:"bun",names:["bun","bunx"]},{appName:"Node.js",iconKey:"nodejs",names:["node","nodejs","node.exe"]},{appName:"npm",iconKey:"npm",names:["npm","npm-cli.js","npx"]},{appName:"pnpm",iconKey:"pnpm",names:["pnpm","pnpx"]},{appName:"Yarn",iconKey:"yarn",names:["yarn","yarnpkg","yarn.js"]},{appName:"Corepack",iconKey:"corepack",names:["corepack"]},{appName:"Deno",iconKey:"deno",names:["deno"]},{appName:"Vite",iconKey:"vite",names:["vite","vite-node"]},{appName:"Vitest",iconKey:"vitest",names:["vitest"]},{appName:"Next.js",iconKey:"nextjs",names:["next","next-server"]},{appName:"Nuxt",iconKey:"nuxt",names:["nuxt","nuxi"]},{appName:"Astro",iconKey:"astro",names:["astro"]},{appName:"SvelteKit",iconKey:"svelte",names:["svelte-kit","sveltekit"]},{appName:"Remix",iconKey:"remix",names:["remix"]},{appName:"Expo",iconKey:"expo",names:["expo","expo-cli"]},{appName:"React Native",iconKey:"react",names:["react-native"]},{appName:"Metro",iconKey:"metro",names:["metro","metro-inspector-proxy"]},{appName:"Webpack",iconKey:"webpack",names:["webpack","webpack-dev-server","webpack-cli"]},{appName:"Parcel",iconKey:"parcel",names:["parcel"]},{appName:"Rollup",iconKey:"rollup",names:["rollup"]},{appName:"esbuild",iconKey:"esbuild",names:["esbuild"]},{appName:"SWC",iconKey:"swc",names:["swc"]},{appName:"TypeScript",iconKey:"typescript",names:["tsc","tsserver","tsx","ts-node","typescript-language-server"]},{appName:"ESLint",iconKey:"eslint",names:["eslint","eslint_d"]},{appName:"Prettier",iconKey:"prettier",names:["prettier"]},{appName:"Biome",iconKey:"biome",names:["biome"]},{appName:"Storybook",iconKey:"storybook",names:["storybook","start-storybook"]},{appName:"Playwright",iconKey:"playwright",names:["playwright"]},{appName:"Cypress",iconKey:"cypress",names:["cypress"]},{appName:"Jest",iconKey:"jest",names:["jest"]},{appName:"Python",iconKey:"python",names:["python","python2","python3","python3.9","python3.10","python3.11","python3.12","python3.13","pypy","pypy3"]},{appName:"pip",iconKey:"python",names:["pip","pip2","pip3"]},{appName:"pipx",iconKey:"python",names:["pipx"]},{appName:"uv",iconKey:"python",names:["uv","uvx"]},{appName:"Poetry",iconKey:"poetry",names:["poetry"]},{appName:"Pipenv",iconKey:"python",names:["pipenv"]},{appName:"Conda",iconKey:"conda",names:["conda","mamba","micromamba"]},{appName:"Django",iconKey:"django",names:["django-admin","django-admin.py","manage.py"]},{appName:"Flask",iconKey:"flask",names:["flask"]},{appName:"Uvicorn",iconKey:"uvicorn",names:["uvicorn"]},{appName:"Gunicorn",iconKey:"gunicorn",names:["gunicorn"]},{appName:"Hypercorn",iconKey:"python",names:["hypercorn"]},{appName:"Celery",iconKey:"celery",names:["celery"]},{appName:"Jupyter",iconKey:"jupyter",names:["jupyter","jupyter-lab","jupyter-notebook","ipython"]},{appName:"Ruby",iconKey:"ruby",names:["ruby","erb","irb"]},{appName:"Bundler",iconKey:"ruby",names:["bundle","bundler"]},{appName:"Rails",iconKey:"rails",names:["rails","bin/rails"]},{appName:"Rack",iconKey:"ruby",names:["rackup"]},{appName:"Puma",iconKey:"puma",names:["puma"]},{appName:"Sidekiq",iconKey:"sidekiq",names:["sidekiq"]},{appName:"RSpec",iconKey:"ruby",names:["rspec"]},{appName:"Go",iconKey:"go",names:["go","gofmt","gopls","air"]},{appName:"Delve",iconKey:"go",names:["dlv"]},{appName:"Rust",iconKey:"rust",names:["rustc","rustup","cargo","rust-analyzer"]},{appName:"Java",iconKey:"java",names:["java","javac","jar","jshell","jwebserver"]},{appName:"Gradle",iconKey:"gradle",names:["gradle","gradlew"]},{appName:"Maven",iconKey:"maven",names:["mvn","mvnw"]},{appName:"Spring Boot",iconKey:"spring",names:["spring","spring-boot"]},{appName:"Kotlin",iconKey:"kotlin",names:["kotlin","kotlinc","kotlin-language-server"]},{appName:"Scala",iconKey:"scala",names:["scala","scalac","sbt","metals"]},{appName:"Clojure",iconKey:"clojure",names:["clojure","clj","lein","boot"]},{appName:"PHP",iconKey:"php",names:["php","php-fpm","php-cgi","composer"]},{appName:"Laravel",iconKey:"laravel",names:["artisan","laravel"]},{appName:"Symfony",iconKey:"symfony",names:["symfony"]},{appName:"Elixir",iconKey:"elixir",names:["elixir","iex","mix"]},{appName:"Erlang",iconKey:"erlang",names:["erl","beam.smp","beam","epmd","rebar3"]},{appName:"Phoenix",iconKey:"phoenix",names:["phx.server","phoenix"]},{appName:"PostgreSQL",iconKey:"postgresql",names:["postgres","postmaster","pg_ctl","psql","pg_isready"]},{appName:"Redis",iconKey:"redis",names:["redis-server","redis-cli","redis-sentinel"]},{appName:"MySQL",iconKey:"mysql",names:["mysql","mysqld","mysqladmin"]},{appName:"MariaDB",iconKey:"mariadb",names:["mariadb","mariadbd","mariadb-admin"]},{appName:"SQLite",iconKey:"sqlite",names:["sqlite3","sqlite"]},{appName:"MongoDB",iconKey:"mongodb",names:["mongod","mongosh","mongo"]},{appName:"Elasticsearch",iconKey:"elasticsearch",names:["elasticsearch"]},{appName:"OpenSearch",iconKey:"opensearch",names:["opensearch"]},{appName:"Solr",iconKey:"solr",names:["solr"]},{appName:"Kafka",iconKey:"kafka",names:["kafka-server-start","kafka-console-consumer","kafka-console-producer"]},{appName:"ZooKeeper",iconKey:"zookeeper",names:["zookeeper-server-start","zkserver"]},{appName:"RabbitMQ",iconKey:"rabbitmq",names:["rabbitmq-server","rabbitmqctl"]},{appName:"NATS",iconKey:"nats",names:["nats-server","nats"]},{appName:"Docker",iconKey:"docker",names:["docker","dockerd","docker-compose","docker-proxy","com.docker.backend"]},{appName:"Podman",iconKey:"podman",names:["podman","podman-compose"]},{appName:"Kubernetes",iconKey:"kubernetes",names:["kubectl","kube-apiserver","kubelet","minikube","kind"]},{appName:"Helm",iconKey:"helm",names:["helm"]},{appName:"Tilt",iconKey:"tilt",names:["tilt"]},{appName:"nginx",iconKey:"nginx",names:["nginx"]},{appName:"Caddy",iconKey:"caddy",names:["caddy"]},{appName:"Apache HTTP Server",iconKey:"apache",names:["httpd","apache2","apachectl"]},{appName:"HAProxy",iconKey:"haproxy",names:["haproxy"]},{appName:"Traefik",iconKey:"traefik",names:["traefik"]},{appName:"Envoy",iconKey:"envoy",names:["envoy"]},{appName:"Tailscale",iconKey:"tailscale",names:["tailscale","tailscaled"]},{appName:"Cloudflare Tunnel",iconKey:"cloudflare",names:["cloudflared"]},{appName:"ngrok",iconKey:"ngrok",names:["ngrok"]},{appName:"localtunnel",iconKey:"terminal",names:["lt","localtunnel"]},{appName:"SSH",iconKey:"ssh",names:["ssh","sshd","scp","sftp"]},{appName:"Git",iconKey:"git",names:["git","git-lfs","git-upload-pack","git-receive-pack"]},{appName:"GitHub CLI",iconKey:"github",names:["gh"]},{appName:"GitLab CLI",iconKey:"gitlab",names:["glab"]},{appName:"Subversion",iconKey:"subversion",names:["svn"]},{appName:"Mercurial",iconKey:"mercurial",names:["hg"]},{appName:"AWS CLI",iconKey:"aws",names:["aws","aws-vault","sam"]},{appName:"Azure CLI",iconKey:"azure",names:["az"]},{appName:"Google Cloud CLI",iconKey:"google-cloud",names:["gcloud","gsutil","bq"]},{appName:"Terraform",iconKey:"terraform",names:["terraform"]},{appName:"OpenTofu",iconKey:"opentofu",names:["tofu"]},{appName:"Ansible",iconKey:"ansible",names:["ansible","ansible-playbook"]},{appName:"Pulumi",iconKey:"pulumi",names:["pulumi"]},{appName:"Nomad",iconKey:"nomad",names:["nomad"]},{appName:"Vault",iconKey:"vault",names:["vault"]},{appName:"Consul",iconKey:"consul",names:["consul"]},{appName:"Make",iconKey:"make",names:["make","gmake"]},{appName:"CMake",iconKey:"cmake",names:["cmake","ctest","cpack"]},{appName:"Ninja",iconKey:"ninja",names:["ninja"]},{appName:"Bazel",iconKey:"bazel",names:["bazel","bazelisk"]},{appName:"Buck",iconKey:"buck",names:["buck","buck2"]},{appName:"Clang",iconKey:"clang",names:["clang","clang++","clangd"]},{appName:"GCC",iconKey:"gcc",names:["gcc","g++","cc","c++"]},{appName:"LLDB",iconKey:"terminal",names:["lldb"]},{appName:"GDB",iconKey:"terminal",names:["gdb"]},{appName:"Swift",iconKey:"swift",names:["swift","swiftc","sourcekit-lsp"]},{appName:"Xcode",iconKey:"xcode",names:["xcodebuild","xcrun","simctl"]},{appName:"Zig",iconKey:"zig",names:["zig"]},{appName:"Lua",iconKey:"lua",names:["lua","luajit","lua-language-server"]},{appName:"Perl",iconKey:"perl",names:["perl"]},{appName:"R",iconKey:"r",names:["r","rscript","rserver","rsession"]},{appName:"Julia",iconKey:"julia",names:["julia"]},{appName:"Haskell",iconKey:"haskell",names:["ghc","ghci","cabal","stack","haskell-language-server-wrapper"]},{appName:"OCaml",iconKey:"ocaml",names:["ocaml","ocamlc","dune","opam"]},{appName:"F#",iconKey:"fsharp",names:["fsharpi","fsautocomplete"]},{appName:".NET",iconKey:"dotnet",names:["dotnet","csharp-ls","omnisharp"]},{appName:"PowerShell",iconKey:"powershell",names:["pwsh","powershell"]},{appName:"Bash",iconKey:"terminal",names:["bash"]},{appName:"Zsh",iconKey:"terminal",names:["zsh"]},{appName:"fish",iconKey:"terminal",names:["fish"]},{appName:"tmux",iconKey:"terminal",names:["tmux"]},{appName:"GNU Screen",iconKey:"terminal",names:["screen"]},{appName:"direnv",iconKey:"terminal",names:["direnv"]},{appName:"Nix",iconKey:"nix",names:["nix","nix-shell","nix-daemon","nix-build","nix develop"]},{appName:"Homebrew",iconKey:"homebrew",names:["brew"]},{appName:"mise",iconKey:"terminal",names:["mise"]},{appName:"asdf",iconKey:"terminal",names:["asdf"]},{appName:"Volta",iconKey:"volta",names:["volta"]},{appName:"fnm",iconKey:"nodejs",names:["fnm"]},{appName:"nvm",iconKey:"nodejs",names:["nvm"]},{appName:"curl",iconKey:"terminal",names:["curl"]},{appName:"HTTPie",iconKey:"httpie",names:["http","https","httpie"]},{appName:"wget",iconKey:"terminal",names:["wget"]},{appName:"jq",iconKey:"terminal",names:["jq"]},{appName:"ripgrep",iconKey:"terminal",names:["rg","ripgrep"]},{appName:"fd",iconKey:"terminal",names:["fd"]},{appName:"fzf",iconKey:"terminal",names:["fzf"]},{appName:"bat",iconKey:"terminal",names:["bat"]},{appName:"eza",iconKey:"terminal",names:["eza","exa"]},{appName:"htop",iconKey:"terminal",names:["htop","top","btop"]},{appName:"Vim",iconKey:"vim",names:["vim","view","vimdiff"]},{appName:"Neovim",iconKey:"neovim",names:["nvim","nvim-qt"]},{appName:"Emacs",iconKey:"emacs",names:["emacs","emacsclient"]},{appName:"Visual Studio Code",iconKey:"vscode",names:["code","code-insiders","vscode","visual studio code","visual studio code - insiders"]},{appName:"code-server",iconKey:"vscode",names:["code-server"]},{appName:"Cursor",iconKey:"cursor",names:["cursor"]},{appName:"Zed",iconKey:"zed",names:["zed"]},{appName:"Sublime Text",iconKey:"sublime-text",names:["subl","sublime_text","sublime text"]},{appName:"Atom",iconKey:"atom",names:["atom"]},{appName:"IntelliJ IDEA",iconKey:"intellij-idea",names:["idea","idea.sh","intellij idea","idea64.exe"]},{appName:"WebStorm",iconKey:"webstorm",names:["webstorm","webstorm.sh"]},{appName:"PyCharm",iconKey:"pycharm",names:["pycharm","pycharm.sh"]},{appName:"RubyMine",iconKey:"rubymine",names:["rubymine","rubymine.sh"]},{appName:"GoLand",iconKey:"goland",names:["goland","goland.sh"]},{appName:"CLion",iconKey:"clion",names:["clion","clion.sh"]},{appName:"DataGrip",iconKey:"datagrip",names:["datagrip","datagrip.sh"]},{appName:"Rider",iconKey:"rider",names:["rider","rider.sh"]},{appName:"Android Studio",iconKey:"android-studio",names:["studio","studio.sh","android studio"]},{appName:"Xcode",iconKey:"xcode",names:["xcode","xcode.app"]},{appName:"Postman",iconKey:"postman",names:["postman"]},{appName:"Insomnia",iconKey:"insomnia",names:["insomnia"]},{appName:"Hoppscotch",iconKey:"hoppscotch",names:["hoppscotch"]},{appName:"TablePlus",iconKey:"tableplus",names:["tableplus"]},{appName:"DBeaver",iconKey:"dbeaver",names:["dbeaver"]},{appName:"RedisInsight",iconKey:"redis",names:["redisinsight"]},{appName:"Prisma",iconKey:"prisma",names:["prisma"]},{appName:"Drizzle Kit",iconKey:"drizzle",names:["drizzle-kit"]},{appName:"Supabase",iconKey:"supabase",names:["supabase"]},{appName:"Firebase",iconKey:"firebase",names:["firebase"]},{appName:"Vercel",iconKey:"vercel",names:["vercel"]},{appName:"Netlify",iconKey:"netlify",names:["netlify","ntl"]},{appName:"Fly.io",iconKey:"fly",names:["fly","flyctl"]},{appName:"Heroku",iconKey:"heroku",names:["heroku"]},{appName:"Stripe CLI",iconKey:"stripe",names:["stripe"]},{appName:"Twilio CLI",iconKey:"twilio",names:["twilio"]},{appName:"Mailpit",iconKey:"mail",names:["mailpit"]},{appName:"MailHog",iconKey:"mail",names:["mailhog"]},{appName:"OpenSSL",iconKey:"openssl",names:["openssl"]},{appName:"mkcert",iconKey:"certificate",names:["mkcert"]},{appName:"mkdocs",iconKey:"markdown",names:["mkdocs"]},{appName:"Hugo",iconKey:"hugo",names:["hugo"]},{appName:"Jekyll",iconKey:"jekyll",names:["jekyll"]},{appName:"Eleventy",iconKey:"eleventy",names:["eleventy","11ty"]},{appName:"Docusaurus",iconKey:"docusaurus",names:["docusaurus"]},{appName:"Trunk",iconKey:"rust",names:["trunk"]},{appName:"wasm-pack",iconKey:"webassembly",names:["wasm-pack"]},{appName:"wasmtime",iconKey:"webassembly",names:["wasmtime"]},{appName:"Language Server",iconKey:"language-server",names:["lua-language-server","yaml-language-server","vscode-json-language-server","docker-langserver","bash-language-server","marksman","taplo"]}],Fy=new Map;for(let e of gle)for(let n of e.names)Fy.set(Ck(n),{appName:e.appName,iconKey:e.iconKey});iWe=Fy.size});function cd(e,n={}){let t=ZF(QF(e));return n.includeSupportLine===!0?`${t}
|
|
651
|
+
`)){let i=o.trim();if(i.startsWith("p")){t=Number(i.slice(1)),r=void 0;continue}if(i.startsWith("c")){r=i.slice(1);continue}if(!i.startsWith("n")||t===void 0)continue;let s=ale(i.slice(1));s!==void 0&&n.push({pid:t,port:s,command:r??"unknown"})}return n}function KF(e){let n=new Map,t;for(let r of e.split(`
|
|
652
|
+
`)){let o=r.trim();if(o.startsWith("p")){t=Number(o.slice(1));continue}if(o.startsWith("n")&&t!==void 0){let i=o.slice(1).trim();i!==""&&n.set(t,i)}}return n}function ale(e){let n=e.match(/:(\d+)(?:\s|\(|$)/);if(n===null)return;let t=Number(n[1]);return Number.isInteger(t)?t:void 0}function $y(e){return e instanceof Error?e:new Error(String(e))}async function dle(e,n){let t,r=e();r.catch(()=>{});try{return await Promise.race([r,new Promise((o,i)=>{t=setTimeout(()=>i(new Error(`port scan exceeded its ${n}ms budget (probe never settled)`)),n)})])}finally{t!==void 0&&clearTimeout(t)}}var Yce,ele,nle,tle,qF,rle,ole,wk=F(()=>{"use strict";Yce=1e3,ele=[5e3,3e4],nle=2e4,tle=3e4;rle=5e3,ole=1024});import{basename as ule}from"node:path";function yc(e){if(e.rootPid===void 0)throw new Error("port_forward_watcher_root_pid_missing");if(!Number.isInteger(e.rootPid)||e.rootPid<=0)throw new Error("port_forward_watcher_root_pid_invalid");let n=e.rootPid,t=e.debounceMs??cle,r=e.lostDebounceMs??(e.intervalMs??1e3)*2+t,o=e.nowMs??Date.now,i=gle(e.commanderBoundPids??[]),s=vk(e.commanderBoundPorts??[]),a=vk(e.watchPorts??[]),d=()=>{let w;try{w=e.extraWatchPorts?.()}catch{w=void 0}return w===void 0||w.length===0?a:new Set([...a,...vk(w)])},u,c=w=>(u?.processRows!==w&&(u={processRows:w,value:d()}),u.value),l=new Map,p=new Map,m=new Map,f,y=w=>(f?.processRows!==w&&(f={processRows:w,value:new Set([...mle(w,n),...i])}),f.value),x=(w,k)=>{let R=y(w),P=c(w);return k.filter(O=>R.has(O.pid)||s.has(O.port)||P.has(O.port)).map(O=>O.pid)},b=async w=>{let k=w.listenSockets,R=y(w.processRows),P=hle(k,R,w.processCwds,i,s,c(w.processRows)),O=new Set(P.map(K=>K.port)),E=new Set(k.map(K=>`${K.pid}:${K.port}`)),j=Array.from(p.values()).filter(K=>!O.has(K.port)&&E.has(`${K.pid}:${K.port}`)),z=o(),M=fle(l,[...P,...j],z,t),J=ple(p,m,M.stableCandidates,z,r);l.clear(),p.clear(),m.clear();for(let[K,G]of M.nextObservedByPort)l.set(K,G);for(let[K,G]of J.nextObservedByPort)p.set(K,G);for(let[K,G]of J.nextMissingByPort)m.set(K,G);e.onListenersObserved?.(Array.from(p.values()).filter(K=>E.has(`${K.pid}:${K.port}`)));for(let K of J.lostCandidates)await e.onCandidateLost?.(K);for(let K of J.changedCandidates)await e.onCandidate(K)},v=(e.scheduler??lle(e)).subscribe({candidatePids:x,deliver:b,onError:w=>{e.onError?.(w)},onBackoff:w=>{e.onError?.(new Error(`port_scan_backoff: ${w.consecutiveFailures} consecutive scan failures, interval now ${w.intervalMs}ms (port detection degraded, best-effort; runner unaffected): ${w.error.message}`))},onRecovered:w=>{e.onError?.(new Error(`port_scan_recovered: scanning healthy again after ${w.failedScans} failed scans; normal interval restored`))}});return{close:()=>v.unsubscribe()}}function lle(e){if(!(e.scanProcesses!==void 0||e.scanListenSockets!==void 0||e.scanProcessCwds!==void 0||e.intervalMs!==void 0||e.nowMs!==void 0))return UF();let t=e.scanProcesses,r=e.scanListenSockets,o=e.scanProcessCwds;return bk({...e.intervalMs===void 0?{}:{intervalMs:e.intervalMs},...e.nowMs===void 0?{}:{nowMs:e.nowMs},probes:{...t===void 0?{}:{scanProcesses:()=>t()},...r===void 0?{}:{scanListenSockets:()=>r()},...o===void 0?{}:{scanProcessCwds:i=>o(i)}}})}function ple(e,n,t,r,o){let i=new Map,s=new Map,a=[],d=[];for(let u of t){i.set(u.port,u);let c=e.get(u.port);(c===void 0||!zr(c,u))&&a.push(u)}for(let u of e.values()){if(i.has(u.port))continue;let c=n.get(u.port),l=c!==void 0&&zr(c.candidate,u)?c.firstMissingAtMs:r;if(o<=0||r-l>=o){d.push(u);continue}i.set(u.port,u),s.set(u.port,{candidate:u,firstMissingAtMs:l})}return{nextObservedByPort:i,nextMissingByPort:s,changedCandidates:a,lostCandidates:d}}function fle(e,n,t,r){let o=new Map,i=[];for(let s of n){let a=e.get(s.port),d=a!==void 0&&zr(a.candidate,s)?a.firstSeenAtMs:t,u={candidate:s,firstSeenAtMs:d};o.set(s.port,u),(r<=0||t-d>=r)&&i.push(s)}return{nextObservedByPort:o,stableCandidates:i}}function zr(e,n){return e.port===n.port&&e.pid===n.pid&&VF(e.portKind)===VF(n.portKind)}function mle(e,n){let t=new Map;for(let i of e){let s=t.get(i.ppid);s===void 0?t.set(i.ppid,[i.pid]):s.push(i.pid)}let r=new Set,o=[...t.get(n)??[]];for(;o.length>0;){let i=o.shift();i===void 0||r.has(i)||(r.add(i),o.push(...t.get(i)??[]))}return r}function hle(e,n,t=new Map,r=new Set,o=new Set,i=new Set){return e.filter(s=>n.has(s.pid)||o.has(s.port)||i.has(s.port)).filter(s=>s.port>0&&s.port<65536).sort((s,a)=>s.port-a.port).map(s=>{let a=t.get(s.pid),d=r.size===0&&o.size===0?void 0:r.has(s.pid)||o.has(s.port)?"commander_bound":"descendant";return{port:s.port,pid:s.pid,command:s.command,...d===void 0?{}:{portKind:d},...a===void 0?{}:{cwd:a}}})}function gle(e){return new Set(e.filter(n=>Number.isInteger(n)&&n>0))}function vk(e){return new Set(e.filter(n=>Number.isInteger(n)&&n>0&&n<65536))}function VF(e){return e??"descendant"}function WF(e){let n=e.trim();return n===""?"unknown":ule(n.split(/\s+/)[0]??n)}var cle,Oy=F(()=>{"use strict";wk();wk();cle=750});function hf(e){if(!e.threadBound)return{type:"skip",reason:"thread_not_bound"};if(e.approvedPorts.has(e.candidate.port)){let t=e.approvedTargets.get(e.candidate.port);return t===void 0?{type:"remember_approved_target",target:e.candidate}:zr(t,e.candidate)?{type:"skip",reason:"already_approved"}:{type:"revoke_and_prompt",revoked:t,candidate:e.candidate,reason:"listener_changed"}}let n=e.pendingRequests.find(t=>t.port===e.candidate.port);return n!==void 0?zr(mr(n),e.candidate)?{type:"skip",reason:"already_pending"}:{type:"replace_pending",expired:n,candidate:e.candidate,reason:"listener_changed"}:{type:"prompt",candidate:e.candidate}}function xc(e){return{requestId:e.requestId,port:e.candidate.port,pid:e.candidate.pid,command:e.candidate.command,...e.candidate.portKind===void 0?{}:{portKind:e.candidate.portKind},...e.candidate.cwd===void 0?{}:{cwd:e.candidate.cwd},sourceSeq:e.sourceSeq}}function mr(e){return{port:e.port,pid:e.pid,command:e.command,...e.portKind===void 0?{}:{portKind:e.portKind},...e.cwd===void 0?{}:{cwd:e.cwd}}}function gf(e){return WF(e.command)}function Ly(e){return[`Port ${e.port}`,`PID ${e.pid}`,`command: ${e.command}`,...e.cwd===void 0?[]:[`cwd: ${e.cwd}`],"preview protocols: HTTP, HTTPS, WebSocket"].join(" / ")}function Hs(e,n){let r=(Array.isArray(e?.allowedPorts)?e.allowedPorts.filter(o=>typeof o=="number"&&Number.isInteger(o)&&o>=1&&o<=65535):[]).filter(o=>o!==n);return{...e??{},portForwarding:r.length>0,allowedPorts:r,revokedPorts:[n]}}var Sk=F(()=>{"use strict";Oy()});function xle(e){let n=GF(e);if(n===void 0)return;let t=_le(n);if(t!==void 0)return t;let r=ble(e);if(r!==void 0)return r}function Ii(e){let n=wle(e),t=jy(n);if(t!==void 0)return xle(t)}function _le(e){let n=Ck(e),t=Fy.get(n);if(t!==void 0)return{...t,executableName:e,matchedName:n}}function ble(e){let t=Ck(e).split("/").map(r=>kk(r)).filter(r=>r.length>0);for(let r of t.reverse()){let o=Fy.get(r);if(o!==void 0)return{...o,executableName:GF(e)??e,matchedName:r}}}function jy(e){let[n,...t]=e;switch(n){case void 0:return;case"env":case"/usr/bin/env":return jy(t.filter(r=>!HF(r)));case"sudo":case"command":case"exec":case"nohup":return jy(t.filter(r=>!r.startsWith("-")));default:switch(HF(n)){case!0:return jy(t);case!1:return n}}}function GF(e){let n=e.trim();if(n.length===0)return;let t=n.replaceAll("\\","/"),[r]=t.split("/").filter(o=>o.length>0).slice(-1);if(r!==void 0)return kk(r)}function kk(e){let n=e.toLowerCase();switch(!0){case n.endsWith(".app"):return e.slice(0,-4);case n.endsWith(".exe"):return e.slice(0,-4);case n.endsWith(".cmd"):case n.endsWith(".bat"):return e.slice(0,-4);default:return e}}function Ck(e){return kk(e.trim().replaceAll("\\","/").toLowerCase())}function HF(e){return/^[A-Za-z_][A-Za-z0-9_]*=/.test(e)}function wle(e){let n=[],t="",r,o=!1;for(let i of e.trim())switch(!0){case o:t=`${t}${i}`,o=!1;break;case i==="\\":o=!0;break;case(r===void 0&&(i==='"'||i==="'")):r=i;break;case r===i:r=void 0;break;case(r===void 0&&/\s/.test(i)):t.length>0&&(n.push(t),t="");break;default:t=`${t}${i}`;break}return t.length>0&&n.push(t),n}var yle,Fy,iWe,Tk=F(()=>{"use strict";yle=[{appName:"Bun",iconKey:"bun",names:["bun","bunx"]},{appName:"Node.js",iconKey:"nodejs",names:["node","nodejs","node.exe"]},{appName:"npm",iconKey:"npm",names:["npm","npm-cli.js","npx"]},{appName:"pnpm",iconKey:"pnpm",names:["pnpm","pnpx"]},{appName:"Yarn",iconKey:"yarn",names:["yarn","yarnpkg","yarn.js"]},{appName:"Corepack",iconKey:"corepack",names:["corepack"]},{appName:"Deno",iconKey:"deno",names:["deno"]},{appName:"Vite",iconKey:"vite",names:["vite","vite-node"]},{appName:"Vitest",iconKey:"vitest",names:["vitest"]},{appName:"Next.js",iconKey:"nextjs",names:["next","next-server"]},{appName:"Nuxt",iconKey:"nuxt",names:["nuxt","nuxi"]},{appName:"Astro",iconKey:"astro",names:["astro"]},{appName:"SvelteKit",iconKey:"svelte",names:["svelte-kit","sveltekit"]},{appName:"Remix",iconKey:"remix",names:["remix"]},{appName:"Expo",iconKey:"expo",names:["expo","expo-cli"]},{appName:"React Native",iconKey:"react",names:["react-native"]},{appName:"Metro",iconKey:"metro",names:["metro","metro-inspector-proxy"]},{appName:"Webpack",iconKey:"webpack",names:["webpack","webpack-dev-server","webpack-cli"]},{appName:"Parcel",iconKey:"parcel",names:["parcel"]},{appName:"Rollup",iconKey:"rollup",names:["rollup"]},{appName:"esbuild",iconKey:"esbuild",names:["esbuild"]},{appName:"SWC",iconKey:"swc",names:["swc"]},{appName:"TypeScript",iconKey:"typescript",names:["tsc","tsserver","tsx","ts-node","typescript-language-server"]},{appName:"ESLint",iconKey:"eslint",names:["eslint","eslint_d"]},{appName:"Prettier",iconKey:"prettier",names:["prettier"]},{appName:"Biome",iconKey:"biome",names:["biome"]},{appName:"Storybook",iconKey:"storybook",names:["storybook","start-storybook"]},{appName:"Playwright",iconKey:"playwright",names:["playwright"]},{appName:"Cypress",iconKey:"cypress",names:["cypress"]},{appName:"Jest",iconKey:"jest",names:["jest"]},{appName:"Python",iconKey:"python",names:["python","python2","python3","python3.9","python3.10","python3.11","python3.12","python3.13","pypy","pypy3"]},{appName:"pip",iconKey:"python",names:["pip","pip2","pip3"]},{appName:"pipx",iconKey:"python",names:["pipx"]},{appName:"uv",iconKey:"python",names:["uv","uvx"]},{appName:"Poetry",iconKey:"poetry",names:["poetry"]},{appName:"Pipenv",iconKey:"python",names:["pipenv"]},{appName:"Conda",iconKey:"conda",names:["conda","mamba","micromamba"]},{appName:"Django",iconKey:"django",names:["django-admin","django-admin.py","manage.py"]},{appName:"Flask",iconKey:"flask",names:["flask"]},{appName:"Uvicorn",iconKey:"uvicorn",names:["uvicorn"]},{appName:"Gunicorn",iconKey:"gunicorn",names:["gunicorn"]},{appName:"Hypercorn",iconKey:"python",names:["hypercorn"]},{appName:"Celery",iconKey:"celery",names:["celery"]},{appName:"Jupyter",iconKey:"jupyter",names:["jupyter","jupyter-lab","jupyter-notebook","ipython"]},{appName:"Ruby",iconKey:"ruby",names:["ruby","erb","irb"]},{appName:"Bundler",iconKey:"ruby",names:["bundle","bundler"]},{appName:"Rails",iconKey:"rails",names:["rails","bin/rails"]},{appName:"Rack",iconKey:"ruby",names:["rackup"]},{appName:"Puma",iconKey:"puma",names:["puma"]},{appName:"Sidekiq",iconKey:"sidekiq",names:["sidekiq"]},{appName:"RSpec",iconKey:"ruby",names:["rspec"]},{appName:"Go",iconKey:"go",names:["go","gofmt","gopls","air"]},{appName:"Delve",iconKey:"go",names:["dlv"]},{appName:"Rust",iconKey:"rust",names:["rustc","rustup","cargo","rust-analyzer"]},{appName:"Java",iconKey:"java",names:["java","javac","jar","jshell","jwebserver"]},{appName:"Gradle",iconKey:"gradle",names:["gradle","gradlew"]},{appName:"Maven",iconKey:"maven",names:["mvn","mvnw"]},{appName:"Spring Boot",iconKey:"spring",names:["spring","spring-boot"]},{appName:"Kotlin",iconKey:"kotlin",names:["kotlin","kotlinc","kotlin-language-server"]},{appName:"Scala",iconKey:"scala",names:["scala","scalac","sbt","metals"]},{appName:"Clojure",iconKey:"clojure",names:["clojure","clj","lein","boot"]},{appName:"PHP",iconKey:"php",names:["php","php-fpm","php-cgi","composer"]},{appName:"Laravel",iconKey:"laravel",names:["artisan","laravel"]},{appName:"Symfony",iconKey:"symfony",names:["symfony"]},{appName:"Elixir",iconKey:"elixir",names:["elixir","iex","mix"]},{appName:"Erlang",iconKey:"erlang",names:["erl","beam.smp","beam","epmd","rebar3"]},{appName:"Phoenix",iconKey:"phoenix",names:["phx.server","phoenix"]},{appName:"PostgreSQL",iconKey:"postgresql",names:["postgres","postmaster","pg_ctl","psql","pg_isready"]},{appName:"Redis",iconKey:"redis",names:["redis-server","redis-cli","redis-sentinel"]},{appName:"MySQL",iconKey:"mysql",names:["mysql","mysqld","mysqladmin"]},{appName:"MariaDB",iconKey:"mariadb",names:["mariadb","mariadbd","mariadb-admin"]},{appName:"SQLite",iconKey:"sqlite",names:["sqlite3","sqlite"]},{appName:"MongoDB",iconKey:"mongodb",names:["mongod","mongosh","mongo"]},{appName:"Elasticsearch",iconKey:"elasticsearch",names:["elasticsearch"]},{appName:"OpenSearch",iconKey:"opensearch",names:["opensearch"]},{appName:"Solr",iconKey:"solr",names:["solr"]},{appName:"Kafka",iconKey:"kafka",names:["kafka-server-start","kafka-console-consumer","kafka-console-producer"]},{appName:"ZooKeeper",iconKey:"zookeeper",names:["zookeeper-server-start","zkserver"]},{appName:"RabbitMQ",iconKey:"rabbitmq",names:["rabbitmq-server","rabbitmqctl"]},{appName:"NATS",iconKey:"nats",names:["nats-server","nats"]},{appName:"Docker",iconKey:"docker",names:["docker","dockerd","docker-compose","docker-proxy","com.docker.backend"]},{appName:"Podman",iconKey:"podman",names:["podman","podman-compose"]},{appName:"Kubernetes",iconKey:"kubernetes",names:["kubectl","kube-apiserver","kubelet","minikube","kind"]},{appName:"Helm",iconKey:"helm",names:["helm"]},{appName:"Tilt",iconKey:"tilt",names:["tilt"]},{appName:"nginx",iconKey:"nginx",names:["nginx"]},{appName:"Caddy",iconKey:"caddy",names:["caddy"]},{appName:"Apache HTTP Server",iconKey:"apache",names:["httpd","apache2","apachectl"]},{appName:"HAProxy",iconKey:"haproxy",names:["haproxy"]},{appName:"Traefik",iconKey:"traefik",names:["traefik"]},{appName:"Envoy",iconKey:"envoy",names:["envoy"]},{appName:"Tailscale",iconKey:"tailscale",names:["tailscale","tailscaled"]},{appName:"Cloudflare Tunnel",iconKey:"cloudflare",names:["cloudflared"]},{appName:"ngrok",iconKey:"ngrok",names:["ngrok"]},{appName:"localtunnel",iconKey:"terminal",names:["lt","localtunnel"]},{appName:"SSH",iconKey:"ssh",names:["ssh","sshd","scp","sftp"]},{appName:"Git",iconKey:"git",names:["git","git-lfs","git-upload-pack","git-receive-pack"]},{appName:"GitHub CLI",iconKey:"github",names:["gh"]},{appName:"GitLab CLI",iconKey:"gitlab",names:["glab"]},{appName:"Subversion",iconKey:"subversion",names:["svn"]},{appName:"Mercurial",iconKey:"mercurial",names:["hg"]},{appName:"AWS CLI",iconKey:"aws",names:["aws","aws-vault","sam"]},{appName:"Azure CLI",iconKey:"azure",names:["az"]},{appName:"Google Cloud CLI",iconKey:"google-cloud",names:["gcloud","gsutil","bq"]},{appName:"Terraform",iconKey:"terraform",names:["terraform"]},{appName:"OpenTofu",iconKey:"opentofu",names:["tofu"]},{appName:"Ansible",iconKey:"ansible",names:["ansible","ansible-playbook"]},{appName:"Pulumi",iconKey:"pulumi",names:["pulumi"]},{appName:"Nomad",iconKey:"nomad",names:["nomad"]},{appName:"Vault",iconKey:"vault",names:["vault"]},{appName:"Consul",iconKey:"consul",names:["consul"]},{appName:"Make",iconKey:"make",names:["make","gmake"]},{appName:"CMake",iconKey:"cmake",names:["cmake","ctest","cpack"]},{appName:"Ninja",iconKey:"ninja",names:["ninja"]},{appName:"Bazel",iconKey:"bazel",names:["bazel","bazelisk"]},{appName:"Buck",iconKey:"buck",names:["buck","buck2"]},{appName:"Clang",iconKey:"clang",names:["clang","clang++","clangd"]},{appName:"GCC",iconKey:"gcc",names:["gcc","g++","cc","c++"]},{appName:"LLDB",iconKey:"terminal",names:["lldb"]},{appName:"GDB",iconKey:"terminal",names:["gdb"]},{appName:"Swift",iconKey:"swift",names:["swift","swiftc","sourcekit-lsp"]},{appName:"Xcode",iconKey:"xcode",names:["xcodebuild","xcrun","simctl"]},{appName:"Zig",iconKey:"zig",names:["zig"]},{appName:"Lua",iconKey:"lua",names:["lua","luajit","lua-language-server"]},{appName:"Perl",iconKey:"perl",names:["perl"]},{appName:"R",iconKey:"r",names:["r","rscript","rserver","rsession"]},{appName:"Julia",iconKey:"julia",names:["julia"]},{appName:"Haskell",iconKey:"haskell",names:["ghc","ghci","cabal","stack","haskell-language-server-wrapper"]},{appName:"OCaml",iconKey:"ocaml",names:["ocaml","ocamlc","dune","opam"]},{appName:"F#",iconKey:"fsharp",names:["fsharpi","fsautocomplete"]},{appName:".NET",iconKey:"dotnet",names:["dotnet","csharp-ls","omnisharp"]},{appName:"PowerShell",iconKey:"powershell",names:["pwsh","powershell"]},{appName:"Bash",iconKey:"terminal",names:["bash"]},{appName:"Zsh",iconKey:"terminal",names:["zsh"]},{appName:"fish",iconKey:"terminal",names:["fish"]},{appName:"tmux",iconKey:"terminal",names:["tmux"]},{appName:"GNU Screen",iconKey:"terminal",names:["screen"]},{appName:"direnv",iconKey:"terminal",names:["direnv"]},{appName:"Nix",iconKey:"nix",names:["nix","nix-shell","nix-daemon","nix-build","nix develop"]},{appName:"Homebrew",iconKey:"homebrew",names:["brew"]},{appName:"mise",iconKey:"terminal",names:["mise"]},{appName:"asdf",iconKey:"terminal",names:["asdf"]},{appName:"Volta",iconKey:"volta",names:["volta"]},{appName:"fnm",iconKey:"nodejs",names:["fnm"]},{appName:"nvm",iconKey:"nodejs",names:["nvm"]},{appName:"curl",iconKey:"terminal",names:["curl"]},{appName:"HTTPie",iconKey:"httpie",names:["http","https","httpie"]},{appName:"wget",iconKey:"terminal",names:["wget"]},{appName:"jq",iconKey:"terminal",names:["jq"]},{appName:"ripgrep",iconKey:"terminal",names:["rg","ripgrep"]},{appName:"fd",iconKey:"terminal",names:["fd"]},{appName:"fzf",iconKey:"terminal",names:["fzf"]},{appName:"bat",iconKey:"terminal",names:["bat"]},{appName:"eza",iconKey:"terminal",names:["eza","exa"]},{appName:"htop",iconKey:"terminal",names:["htop","top","btop"]},{appName:"Vim",iconKey:"vim",names:["vim","view","vimdiff"]},{appName:"Neovim",iconKey:"neovim",names:["nvim","nvim-qt"]},{appName:"Emacs",iconKey:"emacs",names:["emacs","emacsclient"]},{appName:"Visual Studio Code",iconKey:"vscode",names:["code","code-insiders","vscode","visual studio code","visual studio code - insiders"]},{appName:"code-server",iconKey:"vscode",names:["code-server"]},{appName:"Cursor",iconKey:"cursor",names:["cursor"]},{appName:"Zed",iconKey:"zed",names:["zed"]},{appName:"Sublime Text",iconKey:"sublime-text",names:["subl","sublime_text","sublime text"]},{appName:"Atom",iconKey:"atom",names:["atom"]},{appName:"IntelliJ IDEA",iconKey:"intellij-idea",names:["idea","idea.sh","intellij idea","idea64.exe"]},{appName:"WebStorm",iconKey:"webstorm",names:["webstorm","webstorm.sh"]},{appName:"PyCharm",iconKey:"pycharm",names:["pycharm","pycharm.sh"]},{appName:"RubyMine",iconKey:"rubymine",names:["rubymine","rubymine.sh"]},{appName:"GoLand",iconKey:"goland",names:["goland","goland.sh"]},{appName:"CLion",iconKey:"clion",names:["clion","clion.sh"]},{appName:"DataGrip",iconKey:"datagrip",names:["datagrip","datagrip.sh"]},{appName:"Rider",iconKey:"rider",names:["rider","rider.sh"]},{appName:"Android Studio",iconKey:"android-studio",names:["studio","studio.sh","android studio"]},{appName:"Xcode",iconKey:"xcode",names:["xcode","xcode.app"]},{appName:"Postman",iconKey:"postman",names:["postman"]},{appName:"Insomnia",iconKey:"insomnia",names:["insomnia"]},{appName:"Hoppscotch",iconKey:"hoppscotch",names:["hoppscotch"]},{appName:"TablePlus",iconKey:"tableplus",names:["tableplus"]},{appName:"DBeaver",iconKey:"dbeaver",names:["dbeaver"]},{appName:"RedisInsight",iconKey:"redis",names:["redisinsight"]},{appName:"Prisma",iconKey:"prisma",names:["prisma"]},{appName:"Drizzle Kit",iconKey:"drizzle",names:["drizzle-kit"]},{appName:"Supabase",iconKey:"supabase",names:["supabase"]},{appName:"Firebase",iconKey:"firebase",names:["firebase"]},{appName:"Vercel",iconKey:"vercel",names:["vercel"]},{appName:"Netlify",iconKey:"netlify",names:["netlify","ntl"]},{appName:"Fly.io",iconKey:"fly",names:["fly","flyctl"]},{appName:"Heroku",iconKey:"heroku",names:["heroku"]},{appName:"Stripe CLI",iconKey:"stripe",names:["stripe"]},{appName:"Twilio CLI",iconKey:"twilio",names:["twilio"]},{appName:"Mailpit",iconKey:"mail",names:["mailpit"]},{appName:"MailHog",iconKey:"mail",names:["mailhog"]},{appName:"OpenSSL",iconKey:"openssl",names:["openssl"]},{appName:"mkcert",iconKey:"certificate",names:["mkcert"]},{appName:"mkdocs",iconKey:"markdown",names:["mkdocs"]},{appName:"Hugo",iconKey:"hugo",names:["hugo"]},{appName:"Jekyll",iconKey:"jekyll",names:["jekyll"]},{appName:"Eleventy",iconKey:"eleventy",names:["eleventy","11ty"]},{appName:"Docusaurus",iconKey:"docusaurus",names:["docusaurus"]},{appName:"Trunk",iconKey:"rust",names:["trunk"]},{appName:"wasm-pack",iconKey:"webassembly",names:["wasm-pack"]},{appName:"wasmtime",iconKey:"webassembly",names:["wasmtime"]},{appName:"Language Server",iconKey:"language-server",names:["lua-language-server","yaml-language-server","vscode-json-language-server","docker-langserver","bash-language-server","marksman","taplo"]}],Fy=new Map;for(let e of yle)for(let n of e.names)Fy.set(Ck(n),{appName:e.appName,iconKey:e.iconKey});iWe=Fy.size});function cd(e,n={}){let t=ZF(QF(e));return n.includeSupportLine===!0?`${t}
|
|
650
653
|
|
|
651
|
-
${wle}`:t}function yf(e){let n=QF(e);return vle(n)?"Linzumi could not complete that runner action. Reconnect this computer if it keeps happening.":ZF(n)}function ZF(e){if(e.includes("daily_token_limit_exceeded")||e.includes("free Linzumi tokens"))return"You've used all of your free Linzumi tokens for today. Your free allowance resets at midnight UTC - check back then, or email support@linzumi.com if you need more.";if(e.includes("daily_cost_limit_exceeded")||e.includes("reached today's usage limit")||e.includes("daily capacity is reached"))return"You've reached your daily usage limit for model usage. It resets at midnight UTC - check back then, or email support@linzumi.com if you need more.";if(e==="phoenix join failed: workspace_not_found")return"Linzumi could not find this workspace. The command may be stale or copied from a different signup session. Return to setup and copy the latest command.";if(e==="phoenix join failed: unauthorized"||e==="phoenix join failed: forbidden")return"This connection command is no longer authorized. Return to setup and copy a fresh command.";if(e.includes("commander_version_too_old")){let n=e.replace(/^phoenix join failed:\s*/,"").replace(/^commander_version_too_old:?\s*/,"");return`This computer's Linzumi CLI is too old for this server. ${n===""?"Update with: npm install -g @linzumi/cli@latest":n}`}return e.startsWith("phoenix join failed:")?"Linzumi could not connect this computer. Return to setup and try again.":e.startsWith("phoenix push timed out after ")?"Linzumi did not receive a response from the server in time. Check your connection and retry.":e.startsWith("phoenix push failed:")||e==="phoenix push failed"?"Linzumi could not save the latest runner update. The connection may be stale; reconnect this computer if it does not recover.":e==="phoenix websocket closed"?"The connection to Linzumi was interrupted. Reconnecting...":e==="phoenix websocket is not open"||e==="phoenix client is not connected"?"This computer is not connected to Linzumi yet. Wait a moment, then retry.":e==="phoenix websocket reconnect failed"?"Linzumi could not reconnect this computer. Check your connection and run the connect command again.":e==="invalid Phoenix frame"?"Linzumi received an unexpected server message. Please reconnect this computer.":e.startsWith("phoenix rejoin failed for ")?"Linzumi could not restore this computer's session after reconnecting. Run the connect command again.":e.startsWith("phoenix rejoin returned invalid events for ")?"Linzumi could not restore recent messages after reconnecting. Run the connect command again.":e==="websocket open failed"?"Linzumi could not open a connection to the server. Check the URL and your network connection.":e==="Linzumi signup response was not valid JSON"?"Linzumi received an unexpected signup response. Try again in a moment.":e.startsWith("Linzumi signup request failed with HTTP ")?"Linzumi signup failed. Try again, or refresh the setup page and copy a fresh command.":e.startsWith("thread/start failed:")?"Codex could not start a new work session. Try again, or reconnect this computer.":e.startsWith("turn/start failed:")?"Codex could not start working on that message. Try again from the thread.":/^[a-z][a-z0-9_/-]* failed:/.test(e)?"Codex could not complete the requested action. Try again, or start a new task thread.":e}function vle(e){return e.startsWith("phoenix ")||e==="invalid Phoenix frame"||e==="websocket open failed"}function QF(e){return e instanceof Error?e.message:String(e)}var wle,_c=F(()=>{"use strict";wle="If this continues happening, email support@linzumi.com and we'll try to get you through it."});import{createHash as bz,randomUUID as Vy}from"node:crypto";function kle(){let e=process.env.LINZUMI_TYPING_HEARTBEAT_MS?.trim();if(e===void 0||e==="")return XF;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:XF}function Cle(){let e=process.env.LINZUMI_IDLE_STREAM_THRESHOLD_MS?.trim();if(e===void 0||e==="")return YF;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:YF}function Tle(){let e=process.env.LINZUMI_IDLE_STREAM_MODEL_WAIT_CAP_MS?.trim();if(e===void 0||e==="")return ez;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:ez}function wz(){let e=process.env.LINZUMI_IDLE_STREAM_KILL_GRACE_MS?.trim();if(e===void 0||e==="")return nz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:nz}function Ple(e,n){let r=`The model stream stalled - no data for ${Math.round(e/1e3)}s (the connection appears wedged).`;return n.resumable?`${r} Please retry to resume from the last streamed checkpoint.`:`${r} No response was produced; please retry.`}function Ile(){let e=process.env.LINZUMI_IDLE_STREAM_QUEUED_YIELD_CAP_MS?.trim();if(e===void 0||e==="")return tz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:tz}function Rle(e,n,t){let r=Math.round(e/1e3),o=n===1?"1 queued follow-up was waiting":`${n} queued follow-ups were waiting`,i=`The turn produced no stream output for ${r}s while ${o}, so it was interrupted to let the queued message(s) run.`;return t.resumable?`${i} Please retry to resume this turn from the last streamed checkpoint.`:`${i} No response was produced; please retry.`}function Ele(){let e=process.env.LINZUMI_STOP_HALT_CONFIRM_MS?.trim();if(e===void 0||e==="")return rz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:rz}async function Ale(e){let{currentTick:n,capMs:t,pollIntervalMs:r=Dle,quietWindowMs:o=Mle,sleep:i=Zs,now:s=Date.now}=e;if(t<=0)return!0;let a=Math.max(1,Math.min(o,t)),d=s(),u=d+t,c=n(),l=d;for(;;){let p=s();if(p-l>=a)return!0;if(p>=u)return!1;let m=Math.max(1,Math.min(r,a,u-p));await i(m);let f=n();f!==c&&(c=f,l=s())}}function iz(){let e=process.env.LINZUMI_STOP_STARTING_ACK_WAIT_MS?.trim();if(e===void 0||e==="")return oz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:oz}async function Ole(e){let{stillStarting:n,capMs:t,pollIntervalMs:r=$le,sleep:o=Zs,now:i=Date.now}=e,s=i()+t;for(;;){if(!n())return!0;let a=s-i();if(a<=0)return!1;await o(Math.max(1,Math.min(r,a)))}}function Wy(){let e=process.env.LINZUMI_CODEX_START_REQUEST_TIMEOUT_MS?.trim();if(e===void 0||e==="")return sz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:sz}function Lle(){let e=process.env.LINZUMI_OUTBOX_MAX_INFLIGHT_PUSHES?.trim();if(e===void 0||e==="")return;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:void 0}function jle(){return Wy()}function Fle(e){return e instanceof Ny}function zle(e){return e instanceof Uy}function Mi(e,n,t=Wy()){return vz(e,n,t,(r,o)=>new Ny(r,o))}function qle(e,n,t=jle()){return vz(e,n,t,(r,o)=>new Uy(r,o))}function vz(e,n,t,r){return t>0?new Promise((o,i)=>{let s=setTimeout(()=>{i(r(e,t))},t);s.unref?.(),n.then(a=>{clearTimeout(s),o(a)},a=>{clearTimeout(s),i(a)})}):n}function Kle(e,n=Sz,t=Math.random){let r=Math.max(1,Math.floor(e))-1;if(r<n.length)return n[r]??xf.baseDelayMs;let o=n.length>0?n[n.length-1]??xf.baseDelayMs:xf.baseDelayMs,i=Math.max(o,xf.baseDelayMs),s=r-n.length,a=Math.min(xf.maxDelayMs,i*2**s),d=t(),u=Number.isFinite(d)?Math.min(Math.max(d,0),1):0;return Math.round(a*u)}async function kf(e){let n=e.options.channelSession,t=`chat:${n.workspaceSlug}:${n.channelSlug}`,r=ape(0,n.rootSeq,n.kandanThreadId,n.codexThreadId,e.options),o=["channel-session",e.instanceId,az].join("-");az+=1;let i=await e.kandan.join(t,dz(e.options.runnerId,r,0),{registrationId:o,rejoinPayload:()=>{let l=$pe(r);return r.seenSeq=l,dz(e.options.runnerId,r,l)}}),s=Y(i.cursor)??0,a=_o(e.options.token),d=NO(e.options.codexBin,e.options.cwd);r.minSeq=s,r.seenSeq=s;let u={runnerIdentity:a,codexVersion:d},c={ready:!1,pending:[]};return e.codex.onRequest?.(l=>Vpe(e,r,u,l)),e.kandan.onDisconnect?.(()=>{r.closed||r.pipeline?.pause()}),e.kandan.onEvent((l,p,m)=>{if(r.closed||l!==t||p!=="event")return;let f=Dg(m);if(f!==void 0){if(!c.ready){c.pending.push(f);return}zz(e,r,a,f,u)}}),await cpe(e,r,u),r.pipeline=epe(e,r,u),e.codex.onClose?.(l=>{r.pipeline?.submitLifecycle("codexDied",l.message)}),await Ape(e,r,a,u,c),Tz(e,r,u),await Tr(e,r,u),{handleCodexNotification:(l,p)=>{if(l==="account/rateLimits/updated"){let x=kF(p);x!==r.rateLimitResetAtMs&&e.log("codex.rate_limit_reset_captured",{reset_at_ms:x??null,previous_reset_at_ms:r.rateLimitResetAtMs??null}),r.rateLimitResetAtMs=x}let m=Vz(p),f=Wz(p),y=m??sfe(l,r,p,f);if(Hz(r,f,y)){if(r.streamEventTick+=1,Xle(e,r,l,p,y))return;Gle(r,l,p,y),Zle(e,r,y);let x=y??ad(r.turn);x!==void 0&&r.pipeline?.noteTurnActivity(x,l);let b=Sy(l,p);y!==void 0&&b!==void 0&&(r.turn.status==="starting"?Rfe(r,y,b):Xz(e,r,y,b).catch(S=>{e.log("kandan.message_state_refresh_failed",{turn_id:y,reason:b,message:S instanceof Error?S.message:String(S)})})),ipe(e,r,u,l,p,f,m,y)}},handleControl:l=>ppe(e,r,u,l),startThreadMessageTurn:l=>Fz(e,r,u,l),currentRuntimeSettings:()=>r.runtimeSettings,currentCodexThreadId:()=>r.codexThreadId,currentKandanThreadId:()=>r.kandanThreadId,pendingApprovalTurnIds:()=>[...new Set([...r.pendingApprovalRequests.values()].map(l=>l.turnId))],handleKandanReconnect:()=>kz(e,r,u),close:async()=>{r.closed=!0,e.kandan.unregisterJoin?.(t,o),r.portForwardWatcher?.close(),r.portForwardWatcher=void 0,Cz(r),Hy(r),wf(r);for(let l of r.rateLimitHoldTimers.values())clearTimeout(l);r.rateLimitHoldTimers.clear(),Zpe(r,new Error("runner closed")),r.pipeline!==void 0&&await r.pipeline.close(Yle),await Di(e,r),jz(r)}}}async function kz(e,n,t,r="reconnect"){if(Cz(n),!n.closed){r==="reconnect"&&(n.reconnectRetryAttempts=0);try{await Wle(e,n,t),n.reconnectRetryAttempts=0}catch(o){n.reconnectRetryAttempts+=1;let i=Kle(n.reconnectRetryAttempts,e.options.reconnectHandlingRetryDelaysMs??Sz);e.log("kandan.reconnect_handling_failed",{attempt:n.reconnectRetryAttempts,retry_in_ms:i,message:o instanceof Error?o.message:String(o)}),n.reconnectRetryTimer=setTimeout(()=>{n.reconnectRetryTimer=void 0,kz(e,n,t,"retry")},i),n.reconnectRetryTimer.unref?.()}}}async function Wle(e,n,t){e.log("kandan.reconnected",{kandan_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,min_seq:n.minSeq}),n.pipeline?.resume(),await wc(e,n),n.kandanThreadId!==void 0&&n.turn.status!=="idle"&&(n.codexTypingActive&&Wk(e,n,n.kandanThreadId),await Yz(e,n)),await Tr(e,n,t)}function Cz(e){e.reconnectRetryTimer!==void 0&&(clearTimeout(e.reconnectRetryTimer),e.reconnectRetryTimer=void 0)}function Hy(e){e.idleStreamTimer!==void 0&&(clearTimeout(e.idleStreamTimer),e.idleStreamTimer=void 0),e.idleStreamGuardTurnId=void 0,e.idleStreamEventSeen=!1,e.idleStreamOpenLocalExecItemIds.clear(),e.idleStreamDeferralLogged=!1,e.idleStreamQuietSinceMs=void 0,e.idleStreamModelWaitDeferralLogged=!1}function wf(e,n){let t=e.idleStreamKillGrace;t===void 0||n!==void 0&&t.turnId!==n||(clearTimeout(t.timer),e.idleStreamKillGrace=void 0)}function Gle(e,n,t,r){let o=e.idleStreamGuardTurnId;if(o===void 0||n!=="item/started"&&n!=="item/completed"||r!==void 0&&r!==o)return;let i=A(t.item),s=i===void 0?void 0:h(i.id);if(s===void 0||s==="")return;if(n==="item/completed"){e.idleStreamOpenLocalExecItemIds.delete(s);return}if(r!==o)return;let a=h(i?.type);a!==void 0&&Hle.has(a)&&e.idleStreamOpenLocalExecItemIds.add(s)}function Fk(e,n,t){let r=Cle();if(!(r>0)||t===""){Hy(n);return}n.idleStreamGuardTurnId!==t&&(n.idleStreamGuardTurnId=t,n.idleStreamEventSeen=!1,n.idleStreamOpenLocalExecItemIds.clear(),n.idleStreamDeferralLogged=!1,n.idleStreamQuietSinceMs=Date.now(),n.idleStreamModelWaitDeferralLogged=!1),n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer),n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},r),n.idleStreamTimer.unref?.()}function Zle(e,n,t){let r=n.idleStreamGuardTurnId;r!==void 0&&(t!==void 0&&t!==r||(n.idleStreamEventSeen=!0,n.idleStreamDeferralLogged=!1,n.idleStreamQuietSinceMs=Date.now(),n.idleStreamModelWaitDeferralLogged=!1,Fk(e,n,r)))}function Mk(e,n,t,r){if(n.closed||n.idleStreamGuardTurnId!==t)return;let o=n.idleStreamOpenLocalExecItemIds.size>0,i=[...n.pendingApprovalRequests.values()].some(R=>R.turnId===t),s=Date.now(),a=n.idleStreamQuietSinceMs??s,d=Math.max(0,s-a),u=Yo(n.queue),c=Ile(),l=c<=0?0:Math.max(c,r),p=o&&!i&&u>0&&l>0&&d>=l;if((o||i)&&!p){if(n.idleStreamDeferralLogged||(n.idleStreamDeferralLogged=!0,e.log("codex.idle_stream_watchdog_deferred",{turn_id:t,idle_threshold_ms:r,waiting_on_local_exec:o,waiting_on_approval:i,open_local_exec_items:n.idleStreamOpenLocalExecItemIds.size,queued_follow_ups:u,quiet_ms:d})),o&&!i&&u>0&&l>0){n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer);let P=Math.max(1,Math.min(r,l-d));n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},P),n.idleStreamTimer.unref?.();return}Fk(e,n,t);return}let m=Tle(),f=m<=0||!n.idleStreamEventSeen?0:Math.max(m,r);if(!p&&d<f){n.idleStreamModelWaitDeferralLogged||(n.idleStreamModelWaitDeferralLogged=!0,e.log("codex.idle_stream_model_wait_deferred",{turn_id:t,idle_threshold_ms:r,quiet_ms:d,model_wait_cap_ms:f})),n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer);let R=Math.max(1,Math.min(r,f-d));n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},R),n.idleStreamTimer.unref?.();return}let y=n.idleStreamEventSeen,x=p?Rle(d,u,{resumable:y}):Ple(Math.max(d,r),{resumable:y}),b=!y&&!p,S=y&&!p,v=n.codexThreadId,w=wz();if(Hy(n),e.log("codex.idle_stream_timeout",{turn_id:t,idle_threshold_ms:r,quiet_ms:d,model_wait_cap_ms:f,kill_grace_ms:w,resumable:y,reason:x,queued_yield:p,queued_follow_ups:u}),v!==void 0&&Nk(e,v,t),w<=0){Jy(n,t,x,y,b,S);return}let k=setTimeout(()=>{Qle(e,n,t)},w);k.unref?.(),n.idleStreamKillGrace={turnId:t,timer:k,reason:x,resumable:y,preFirstByteStall:b,midStreamResumableStall:S}}function Jy(e,n,t,r,o,i){e.pipeline?.submitNotification("turn/failed",{turnId:n,reason:t,error:{message:t,code:"idle_stream_timeout"},...r?{retryable:!0}:{},...o?{preFirstByteStall:!0}:{},...i?{midStreamResumableStall:!0}:{}})}function Qle(e,n,t){let r=n.idleStreamKillGrace;n.closed||r===void 0||r.turnId!==t||(n.idleStreamKillGrace=void 0,e.log("codex.idle_stream_kill_grace_expired",{turn_id:t,kill_grace_ms:wz()}),Jy(n,t,r.reason,r.resumable,r.preFirstByteStall,r.midStreamResumableStall))}function Xle(e,n,t,r,o){let i=n.idleStreamKillGrace;if(i===void 0||o===void 0||o!==i.turnId)return!1;if(t==="turn/completed"){let s=h(A(r.turn)?.status);return s==="completed"?(wf(n,i.turnId),e.log("codex.idle_stream_kill_reconciled_completed",{turn_id:i.turnId,status:s}),!1):(wf(n,i.turnId),e.log("codex.idle_stream_kill_interrupt_ack",{turn_id:i.turnId,method:t,status:s??null}),Jy(n,i.turnId,i.reason,i.resumable,i.preFirstByteStall,i.midStreamResumableStall),!0)}return t==="turn/failed"||t==="turn/aborted"||t==="turn/canceled"||t==="turn/cancelled"?(wf(n,i.turnId),e.log("codex.idle_stream_kill_interrupt_ack",{turn_id:i.turnId,method:t,status:null}),Jy(n,i.turnId,i.reason,i.resumable,i.preFirstByteStall,i.midStreamResumableStall),!0):!1}function Cf(e,n,t){return[e.workspaceSlug,e.channelSlug,n??`instance:${t}`].join(":")}function zk(e,n){n.kandanThreadId!==void 0&&n.pipeline?.rebindThreadKey(Cf(e.options.channelSession,n.kandanThreadId,e.instanceId))}function epe(e,n,t){let r=e.options.channelSession,o=Cf(r,n.kandanThreadId,e.instanceId);return ly({instanceId:e.instanceId,threadKey:o,persistDir:e.options.pipelinePersistDir,push:(i,s,a,d)=>npe(e,n,i,s,d),wire:()=>({workspaceSlug:r.workspaceSlug,channelSlug:r.channelSlug,kandanThreadId:n.kandanThreadId,codexThreadId:n.codexThreadId,rootSeq:n.rootSeq,leaseEpoch:n.kandanThreadId===void 0?void 0:e.leaseEpochFor?.(n.kandanThreadId)}),runnerPayload:(i,s,a,d)=>td(e.options,e.instanceId,i,s,t,a,d,pfe(n,a)),runtimeMetadataForSourceSeq:i=>{let s=ffe(n,i);return s===void 0?void 0:mfe(s)},sourceSeqForTurn:i=>lfe(n,i),autoRetryAttemptsForSeq:i=>n.emptyTurnRetry.get(i)?.attempts??0,midStreamResumeAttemptAtMsForSeq:i=>n.midStreamResumeAttempts.get(i),ladderHistoryForSeq:(i,s)=>bo(s)?hc(n.fateLadderRuns.get(i),s):void 0,linzumiAgentSession:r.linzumiAgentSession===!0,isRecoveredTurn:i=>n.recoveredTurnIds.has(i),resolveSnapshot:i=>rpe(e,n,i),onTurnTerminal:(i,s,a,d,u,c)=>Ak(e,n,t,i,s,a,d,void 0,u,c),log:(i,s)=>{e.log(i,s)},outboxRetryDelaysMs:e.options.pipelineOutboxRetryDelaysMs,outboxMaxInFlightPushes:Lle(),snapshotRetryDelaysMs:e.options.pipelineSnapshotRetryDelaysMs,statsIntervalMs:e.options.pipelineStatsIntervalMs,turnStalledThresholdMs:e.options.pipelineTurnStalledThresholdMs,turnWaitStates:()=>[...n.pendingApprovalRequests.values()].map(i=>({turnId:i.turnId,kind:"approval"}))})}async function npe(e,n,t,r,o){let i=await tpe(e,t,r);try{return await so(e.kandan,e.topic,t,i,o)}catch(s){throw py(s)&&n.pipeline?.pause(),s}}async function tpe(e,n,t){let r=e.options.channelSession;return Og({kandan:e.kandan,topic:e.topic,workspace:r.workspaceSlug,channel:r.channelSlug,cwd:e.options.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,log:(o,i)=>e.log(o,i)},n,t)}async function rpe(e,n,t){let r=n.codexThreadId;if(r===void 0)throw new Error("cannot resolve a completion snapshot without a bound Codex thread");let o;try{o=await qle("thread/read",e.codex.request("thread/read",{threadId:r,includeTurns:!0}))}catch(d){if(zle(d)&&n.recoveredTurnIds.has(t))return e.log("pipeline.snapshot_skipped_for_recovered_turn",{codex_thread_id:r,turn_id:t,message:d instanceof Error?d.message:String(d)}),{items:[]};throw d}if("error"in o)throw new Error(`thread/read failed: ${o.error.message}`);let i=qS(qj(o,t)),s=[];try{s=qS(RL({codexThreadId:r,turnId:t}))}catch(d){e.log("codex.session_log_read_failed",{codex_thread_id:r,turn_id:t,message:d instanceof Error?d.message:String(d)})}let a=Nj(i,s);return e.log("pipeline.snapshot_resolved",{turn_id:t,item_count:a.length,thread_read_item_count:i.length,session_log_item_count:s.length}),{items:[...a]}}function ope(e,n,t,r){if(!tf())return;let o=e.harnessActivity,i=c=>typeof c=="number"&&Number.isFinite(c)?c:void 0;if(n==="turn/started"){let c=t.turn,l=Z(c)?h(c.id):void 0;l!==void 0&&o.turns.push({turnId:l,items:[]});return}if(n!=="item/completed")return;let s=t.item;if(!Z(s))return;let a=h(t.turnId)??r,d=o.turns.at(-1),u=d!==void 0&&(a===void 0||d.turnId===a)?d:o.turns.find(c=>c.turnId===a);if(u===void 0){if(a===void 0)return;o.turns.push({turnId:a,items:[{item:s,completedAtMs:i(t.completedAtMs)}]})}else u.items.push({item:s,completedAtMs:i(t.completedAtMs)});for(o.itemCount+=1;o.itemCount>Sle&&o.turns.length>1;){let c=o.turns.shift();o.itemCount-=c?.items.length??0,o.truncated=!0}}function ipe(e,n,t,r,o,i,s,a){let d=n.pipeline;if(d!==void 0)switch(ope(n,r,o,a),r){case"turn/started":i!==void 0&&s!==void 0&&afe(e,n,i,s),d.submitNotification(r,o);return;case"turn/completed":{s!==void 0&&gz(n,i,s);let u=s??rfe(e,n,i);switch(n.turn.status){case"starting":kfe(n,u);break;case"idle":case"active":case"completing":Zz(e,n,t,u);break}d.submitNotification(r,s===void 0&&u!==void 0?{...o,turnId:u}:o);return}case"turn/aborted":case"turn/canceled":case"turn/cancelled":case"turn/failed":s!==void 0&&gz(n,i,s),d.submitNotification(r,o);return;case"item/completed":{if(d.submitNotification(r,Pk(o,s,a)),a!==void 0){let u=Xpe(e,n,a,o,t);ufe(n,a,u),u.catch(c=>{e.log("codex.tui_input_mirror_failed",{turn_id:a,message:c instanceof Error?c.message:String(c)})}).finally(()=>cfe(n,a))}return}case"error":{let u=lS(r,o);d.submitNotification(r,Pk(u===void 0?o:{...o,...qg(r,o)},s,a));return}case"item/agentMessage/delta":case"item/reasoning/textDelta":case"item/commandExecution/outputDelta":case"command/exec/outputDelta":case"item/fileChange/outputDelta":case"item/commandExecution/terminalInteraction":case"item/started":case"response_item":if(r==="item/started"){let u=h(A(o.item)?.command);u!==void 0&&hy(qk(e,n),u)}d.submitNotification(r,Pk(o,s,a));return;default:return}}function qk(e,n){return n.kandanThreadId??e.topic}function Pk(e,n,t){return n!==void 0||t===void 0?e:{...e,turnId:t}}function Ak(e,n,t,r,o,i,s,a,d,u){n.idleStreamGuardTurnId===r&&Hy(n),wf(n,r);let c=fc(n.turn,r)??uF(n.turn,r),l=Xy(n,r);c!==void 0&&(n.turn={status:"completing",turnId:r,queuedSeq:c});let p=c!==void 0?n.emptyTurnRetry.get(c)?.attempts??0:0,m=bo(u)?u:s===!0||d===!0?"transient_upstream":void 0,f=c!==void 0&&hz(n,c),y=o==="failed"&&c!==void 0&&f&&(s===!0||d===!0&&!n.midStreamResumeAttempts.has(c)),x=Ky(e),b=o==="failed"&&c!==void 0&&f,S=b&&!x,v=b&&x&&e.options.rebuildOnDeadCodexWorker!==void 0,w=e.options.crossHarnessFailover,k=c!==void 0?n.emptyTurnRetry.get(c)?.message:void 0,R=tf()&&w!==void 0&&o==="failed"&&c!==void 0&&x&&k!==void 0&&n.kandanThreadId!==void 0,P=R?{sourceHarness:"codex",targetHarness:w.targetHarness,model:n.runtimeSettings.model??e.options.channelSession.model}:void 0,O=o==="failed"&&c!==void 0&&m!==void 0?dk({fate:m,run:n.fateLadderRuns.get(c),nowMs:Date.now(),budgets:Ty(),breaker:e.options.fleetBreakerRecoveryGate??ek,grants:{inPlaceResume:y,redispatch:S,workerRebuild:v,crossHarnessFailover:R},rateLimitResetAtMs:n.rateLimitResetAtMs,failover:P}):void 0;if(O!==void 0&&O.kind!=="stand"&&c!==void 0&&(n.fateLadderRuns.set(c,O.run),ps(n.fateLadderRuns,_f),e.log("codex.fate_ladder_step",{turn_id:r,queued_seq:c,fate:m??null,decision:O.kind,...O.kind==="execute_rung"?{rung:O.rung}:{},...O.kind==="red"?{cause:O.cause}:{},...O.kind==="hold_until_reset"?{reset_at_ms:O.resetAtMs}:{},...O.kind==="breaker_hold"?{hold_reason:O.reason}:{},recovery_rungs_attempted:O.run.recoveryRungsAttempted,history_truncated:O.run.historyTruncated,reason:i??null})),o==="completed"&&c!==void 0){n.fateLadderRuns.delete(c);let W=n.rateLimitHoldTimers.get(c);W!==void 0&&(clearTimeout(W),n.rateLimitHoldTimers.delete(c))}let E=O?.kind==="execute_rung"?O.rung:void 0,j=O?.kind==="breaker_hold";j&&c!==void 0&&e.log("codex.fleet_breaker_recovery_hold",{turn_id:r,queued_seq:c,hold_reason:O?.kind==="breaker_hold"?O.reason:null,recovery:s===!0?"empty_turn_retry":d===!0?"mid_stream_resume":m==="transient_local"?"local_redispatch":"rate_limit_hold_dispatch",attempts_burned:p,max_attempts:wo,reason:i??null});let z=E==="in_place_resume"&&s===!0&&c!==void 0?zy(n,c):void 0,M=E==="in_place_resume"&&d===!0&&z===void 0&&c!==void 0&&!n.midStreamResumeAttempts.has(c)?zy(n,c):void 0,J=(E==="redispatch"||E==="worker_rebuild")&&c!==void 0?zy(n,c):void 0,K=E==="cross_harness_failover"&&c!==void 0?k:void 0;K!==void 0&&c!==void 0&&n.emptyTurnRetry.delete(c),M!==void 0&&c!==void 0?(n.midStreamResumeAttempts.set(c,Date.now()),ps(n.midStreamResumeAttempts,_f)):!j&&o==="failed"&&d===!0&&c!==void 0&&e.log("codex.mid_stream_stall_resume_refused",{turn_id:r,queued_seq:c,cause:n.midStreamResumeAttempts.has(c)?"already_attempted":p>=wo?"shared_budget_exhausted":"no_retained_candidate",attempts_burned:p,max_attempts:wo,reason:i??null}),!j&&z===void 0&&M===void 0&&J===void 0&&K===void 0&&O?.kind!=="hold_until_reset"&&c!==void 0&&n.emptyTurnRetry.delete(c);let G=o==="failed"&&s===!0&&z===void 0&&c!==void 0;!j&&G&&p>0&&e.log("codex.auto_retry_budget_exhausted_terminal",{turn_id:r,queued_seq:c??null,attempts_burned:p,max_attempts:wo,reason:i??null}),(async()=>{try{await n.pipeline?.flushOutbox()}catch(te){e.log("pipeline.turn_terminal_flush_failed",{turn_id:r,message:te instanceof Error?te.message:String(te)})}if(j&&c!==void 0){let te=e.options.fleetBreakerHoldPollMs??5e3,me=e.options.fleetBreakerMaxHoldMs??30*6e4,ge=Date.now(),ce=m??"transient_upstream",Ie=e.options.fleetBreakerRecoveryGate??ek;n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:oF},void 0,void 0,n.codexThreadId);let Re="exhausted",I="proceed";for(;Date.now()-ge<me;){if(await Zs(te),n.turn.status!=="completing"||n.turn.turnId!==r){Re="superseded";break}let L=Ie(ce);if(L.action!=="hold"){I=L.action,Re="released";break}}if(Re==="superseded"){e.log("codex.fleet_breaker_hold_superseded",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge});return}if(Re==="released"){let L=hz(n,c),U=Ky(e),ie=!1,se=(Te,ae)=>ie?Ie(Te,ae):(ie=!0,{action:I}),Q=dk({fate:ce,run:n.fateLadderRuns.get(c),nowMs:Date.now(),budgets:Ty(),breaker:se,grants:{inPlaceResume:L&&(s===!0||d===!0&&!n.midStreamResumeAttempts.has(c)),redispatch:L&&!U,workerRebuild:L&&U&&e.options.rebuildOnDeadCodexWorker!==void 0},rateLimitResetAtMs:n.rateLimitResetAtMs});Q.kind!=="stand"&&(n.fateLadderRuns.set(c,Q.run),ps(n.fateLadderRuns,_f));let _e=Q.kind==="execute_rung"?zy(n,c):void 0;if(Q.kind==="execute_rung"&&_e!==void 0){let Te=Q.rung,ae=Te==="in_place_resume"?s===!0?"empty_turn_retry":"mid_stream_resume":Te;ae==="mid_stream_resume"&&(n.midStreamResumeAttempts.set(c,Date.now()),ps(n.midStreamResumeAttempts,_f)),e.log("codex.fleet_breaker_recovery_resumed",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge,recovery:ae,attempt:_e.attempts,max_attempts:wo,reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:ae==="mid_stream_resume"?ZS:Te==="worker_rebuild"?lk:Te==="redispatch"?ck:"retrying empty turn"},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),mc(n.queue,_e.message),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),await Tr(e,n,t);return}}e.log("codex.fleet_breaker_hold_exhausted",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge,outcome:Re,reason:i??null}),n.emptyTurnRetry.delete(c),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"failed",reason:`${i??"codex_turn_failed"} [recovery was held ${Math.round((Date.now()-ge)/6e4)}m during a fleet-wide upstream outage; retry budget preserved]`,retryable:!0,fate:ce,ladder:hc(n.fateLadderRuns.get(c),ce)},void 0,void 0,n.codexThreadId)}if(O?.kind==="hold_until_reset"&&c!==void 0){e.log("codex.fate_ladder_rate_limit_hold",{turn_id:r,queued_seq:c,reset_at_ms:O.resetAtMs,hold_ms:Math.max(0,O.resetAtMs-Date.now()),reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:SF(O.resetAtMs)},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),spe(e,n,t,c,O.resetAtMs);return}if(E==="cross_harness_failover"&&c!==void 0&&K!==void 0&&P!==void 0&&w!==void 0&&n.kandanThreadId!==void 0){let te=n.kandanThreadId;e.log("codex.fate_ladder_cross_harness_failover",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,journal_turns:n.harnessActivity.turns.length,journal_items:n.harnessActivity.itemCount,journal_truncated:n.harnessActivity.truncated,reason:i??null}),await Gn(e,te,c,{status:"processing",reason:vF},void 0,void 0,n.codexThreadId);let me;try{me=await w.execute({kandanThreadId:te,codexThreadId:n.codexThreadId,queuedSeq:c,message:K,model:P.model,activity:n.harnessActivity,failureReason:i})}catch(ce){me={ok:!1,failure:ce instanceof Error?ce.message:String(ce)}}let ge=n.fateLadderRuns.get(c);if(me.ok){ge!==void 0&&n.fateLadderRuns.set(c,uk(ge,{outcome:"failover_dispatched",atMs:Date.now(),failover:{...P,transpiledItemCount:me.transpiledItemCount,redactedReasoningCount:me.redactedReasoningCount},detail:n.harnessActivity.truncated?"journal truncated: only the retained tail crossed":void 0})),e.log("codex.fate_ladder_cross_harness_failover_dispatched",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,target_session_id:me.targetSessionId,transpiled_item_count:me.transpiledItemCount,redacted_reasoning_count:me.redactedReasoningCount}),pd(n,r),Ei(n,r),Ri(n,r),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"});return}ge!==void 0&&n.fateLadderRuns.set(c,uk(ge,{outcome:"failover_failed",atMs:Date.now(),failover:P,detail:me.failure})),e.log("codex.fate_ladder_cross_harness_failover_failed",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,failure:me.failure,reason:i??null}),await Gn(e,te,c,{status:"failed",reason:`${i??"codex_turn_failed"} [cross-harness failover to ${P.targetHarness} failed: ${me.failure}]`,retryable:!0,fate:"transient_local",ladder:hc(n.fateLadderRuns.get(c),"transient_local")},void 0,void 0,n.codexThreadId)}z===void 0&&M===void 0&&J===void 0&&n.kandanThreadId!==void 0&&await gy({threadKey:qk(e,n),workspace:e.options.channelSession.workspaceSlug,channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,push:(te,me)=>e.kandan.push(e.topic,te,me),log:(te,me)=>e.log(te,me)});let W=z??M??J;if(W!==void 0&&c!==void 0){M!==void 0?e.log("codex.mid_stream_stall_auto_resume",{turn_id:r,queued_seq:c,attempt_at_ms:n.midStreamResumeAttempts.get(c)??null,shared_budget_attempt:M.attempts,max_attempts:wo,reason:i??null}):J!==void 0?e.log("codex.fate_ladder_local_redispatch",{turn_id:r,queued_seq:c,rung:E??null,shared_budget_attempt:J.attempts,max_attempts:wo,reason:i??null}):e.log("codex.empty_turn_auto_retry",{turn_id:r,queued_seq:c,attempt:W.attempts,max_attempts:wo,reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:M!==void 0?ZS:E==="worker_rebuild"?lk:E==="redispatch"?ck:"retrying empty turn"},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),mc(n.queue,W.message),lz>0&&await Zs(lz),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),await Tr(e,n,t);return}if(c!==void 0&&n.kandanThreadId!==void 0){let te=o==="completed"?{status:"processed"}:{status:"failed",reason:i??"codex_turn_failed",...G?{retryable:!0,fate:"transient_upstream"}:{},...m!==void 0?{fate:m,ladder:hc(n.fateLadderRuns.get(c),m)}:{}};if(a===!0){for(let[ge,ce]of[...n.undeliveredCloudTerminals].sort((Ie,Re)=>Ie[0]-Re[0]))await xz(e,n.kandanThreadId,ge,ce,n.codexThreadId)&&(n.undeliveredCloudTerminals.delete(ge),e.log("codex.cloud_terminal_state_gap_redelivered",{turn_id:r,source_seq:ge,status:ce.status}));for(let ge of ld(n,c))await xz(e,n.kandanThreadId,ge,te,n.codexThreadId)?n.undeliveredCloudTerminals.delete(ge):(n.undeliveredCloudTerminals.set(ge,te),e.log("codex.cloud_terminal_state_unacked_watermark_held",{turn_id:r,queued_seq:c,source_seq:ge,status:te.status,outcome:o,gap_floor:Math.min(...n.undeliveredCloudTerminals.keys())}))}let me=n.undeliveredCloudTerminals.size===0?void 0:Math.min(...n.undeliveredCloudTerminals.keys());if(o==="completed"){let ge=new Set(ld(n,c));ge.add(c);for(let ce of ge){if(me!==void 0&&ce>=me){e.log("codex.cloud_source_seq_commit_held_below_gap",{turn_id:r,source_seq:ce,gap_floor:me});continue}e.options.onLiveSourceSeqAccepted?.({channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,sourceSeq:ce})}}{let ge=new Set(ld(n,c));ge.add(c);for(let ce of ge)e.options.onLiveSourceSeqSettled?.({channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,sourceSeq:ce})}if(a!==!0)for(let ge of ld(n,c))ge!==c&&await Gn(e,n.kandanThreadId,ge,te,void 0,void 0,n.codexThreadId);n.fusedQueuedSeqs.delete(c),fd(n,c)}Ei(n,r),Ri(n,r),(c!==void 0||l)&&(await Tfe(n,r),await Di(e,n)),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),e.log("pipeline.turn_terminal",{turn_id:r,outcome:o,reason:i??null,queued_seq:c??null}),await Tr(e,n,t)})().catch(W=>{e.log("pipeline.turn_terminal_handling_failed",{turn_id:r,message:W instanceof Error?W.message:String(W)})})}function spe(e,n,t,r,o){if(n.rateLimitHoldTimers.has(r))return;let i=Math.max(0,o-Date.now()),s=setTimeout(()=>{n.rateLimitHoldTimers.delete(r),(async()=>{if(n.closed)return;let a=n.fateLadderRuns.get(r);if(a!==void 0){if(a.holdDispatched)return;n.fateLadderRuns.set(r,wF(a,Date.now()))}let d=n.emptyTurnRetry.get(r);if(d===void 0){e.log("codex.fate_ladder_hold_dispatch_candidate_missing",{queued_seq:r,reset_at_ms:o}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,r,{status:"failed",reason:"The rate-limit hold ended, but the held message was no longer available to send automatically. Please resend your last message.",fate:"rate_limited",ladder:hc(n.fateLadderRuns.get(r),"rate_limited")},void 0,void 0,n.codexThreadId);return}e.log("codex.fate_ladder_hold_dispatch",{queued_seq:r,reset_at_ms:o}),n.emptyTurnRetry.delete(r),mc(n.queue,d.message),await Tr(e,n,t)})().catch(a=>{e.log("codex.fate_ladder_hold_dispatch_failed",{queued_seq:r,message:a instanceof Error?a.message:String(a)})})},i);s.unref?.(),n.rateLimitHoldTimers.set(r,s)}function dz(e,n,t){let r={last_seq:t};return n.kandanThreadId===void 0?r:{...r,runner_id:e,thread_id:n.kandanThreadId}}async function wc(e,n){if(n.codexThreadId===void 0)return;let t=e.options.channelSession;await so(e.kandan,e.topic,"session:bind",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId,instance_id:e.instanceId})}function ape(e,n,t,r,o){return{pipeline:void 0,rootSeq:n,kandanThreadId:t,kandanThreadTitle:void 0,codexThreadId:r,turn:{status:"idle"},closed:!1,minSeq:e,seenSeq:e,failedSeqs:new Map,drainInFlight:!1,drainRequested:!1,deadWorkerRebuildAttempts:0,emptyTurnRetry:new Map,midStreamResumeAttempts:new Map,fateLadderRuns:new Map,harnessActivity:{turns:[],itemCount:0,truncated:!1},rateLimitHoldTimers:new Map,rateLimitResetAtMs:void 0,threadRebindAttempts:new Map,boundStartTimeout:!1,undeliveredCloudTerminals:new Map,fusedQueuedSeqs:new Map,reconnectRetryTimer:void 0,reconnectRetryAttempts:0,queue:fF(),forwardedTurnIds:new Set,recoveredTurnIds:new Set,stopAbortedStartingSeqs:new Set,pendingInterruptedThreadOnlyCompletions:[],claimedKandanMessageKeys:new Set,steeredKandanMessageSeqs:new Set,localTuiTurnIds:new Set,pendingStartingCompletionTurnIds:new Set,mirroredTuiInputProjections:rf(So),pendingTuiInputMirrors:new Map,turnReplyTargets:rf(So),turnRuntimeSettingsBySourceSeq:rf(So),localTuiTurnRuntimeSettingsByTurnId:rf(So),pendingApprovalRequests:new Map,approvalPromptChain:Promise.resolve(),approvedThreadInteractionRequesters:new Set,pendingPortForwardRequests:new Map,portForwardPreviousProcessingStates:new Map,queuedPortForwardCandidates:new Map,approvedForwardPorts:new Set,approvedForwardTargets:new Map,dismissedForwardTargets:new Map,portForwardWatcher:void 0,activeProcessingState:void 0,pendingStartingProcessingReasons:[],pendingReconnectContextInjection:void 0,linzumiContext:Ks(o.channelSession.linzumiContext),typingHeartbeat:void 0,typingHeartbeatInFlight:!1,codexTypingActive:!1,pendingCompletionTypingStops:new Map,runtimeSettings:Dfe(o),pendingRuntimeSettingsResume:!1,runtimeSettingsGeneration:0,runtimeSettingsResumeChain:Promise.resolve(),streamEventTick:0,idleStreamTimer:void 0,idleStreamGuardTurnId:void 0,idleStreamEventSeen:!1,idleStreamOpenLocalExecItemIds:new Set,idleStreamDeferralLogged:!1,idleStreamQuietSinceMs:void 0,idleStreamModelWaitDeferralLogged:!1,idleStreamKillGrace:void 0}}async function dpe(e,n,t,r){upe(e,n,r),await kpe(e,n,t,r),await Spe(e,n,r)}function upe(e,n,t){let r=n.queuedPortForwardCandidates.get(t.port);r===void 0||!zr(r,t)||(n.queuedPortForwardCandidates.delete(t.port),e.log("port_forward.queued_request_dropped",{port:t.port,pid:t.pid,reason:"listener_exited"}))}function Tz(e,n,t){if(e.options.enablePortForwardWatch!==!0||n.portForwardWatcher!==void 0||n.kandanThreadId===void 0||n.codexThreadId===void 0)return;let{start:r,...o}=e.options.portForwardWatcher??{};if(r===void 0&&o.rootPid===void 0){e.log("port_forward.watch_skipped",{reason:"worker_pid_missing"});return}let i=r??yc;for(let s of e.options.initialForwardPorts??[])n.approvedForwardPorts.add(s);n.portForwardWatcher=i({...o,watchPorts:[...o.watchPorts??[],...e.options.initialForwardPorts??[]],extraWatchPorts:o.extraWatchPorts??Ay(ud(e.options.runnerId)),onCandidate:s=>Bk(e,n,t,s),onCandidateLost:s=>dpe(e,n,t,s),onListenersObserved:s=>_g(`channel-session:${n.kandanThreadId??e.instanceId}`,s.filter(a=>a.portKind!=="commander_bound")),onError:s=>e.log("port_forward.watch_failed",{message:s.message})})}async function cpe(e,n,t){let r=e.options.channelSession,o=t.codexVersion;if(n.kandanThreadId===void 0){n.codexThreadId=await jk(e.codex,e.options);let i=await so(e.kandan,e.topic,"session:announce",{workspace:r.workspaceSlug,channel:r.channelSlug,body:jO(e.options,o,n.codexThreadId),payload:td(e.options,e.instanceId,"availability",n.codexThreadId,t),client_message_id:`local-codex-root-${e.instanceId}`});n.rootSeq=Y(i.seq),n.rootSeq!==void 0&&(n.minSeq=Math.max(n.minSeq,n.rootSeq))}else if(r.startCodexThread===!0)n.codexThreadId=await jk(e.codex,e.options),await cz(e,n),await wc(e,n);else if(n.codexThreadId!==void 0)await cz(e,n),await wc(e,n);else{let i=await so(e.kandan,e.topic,"session:resolve_thread_session",{workspace:r.workspaceSlug,channel:r.channelSlug,thread_id:n.kandanThreadId});if(n.rootSeq=Y(i.seq),n.codexThreadId=h(i.codex_thread_id),Gy(n,Oz(i.message)),n.codexThreadId===void 0)throw new Error("Kandan thread root metadata did not include a Codex thread id");await wc(e,n)}}async function lpe(e,n,t){if(n.turn.status!=="completing")return;let{turnId:r,queuedSeq:o}=n.turn;n.turn={status:"idle"},fd(n,o),Ei(n,r),Yy(n,r),Ri(n,r),await Di(e,n),n.kandanThreadId!==void 0&&await Tf(e,n,n.kandanThreadId,o,{status:"processed"}),e.log("codex.completing_turn_recovered",{turn_id:r,queued_seq:o,reason:t})}async function Pz(e,n,t,r,o){Nk(e,t,r),n.turn={status:"idle"},fd(n,o),Ei(n,r),Yy(n,r),n.pendingInterruptedThreadOnlyCompletions.push({threadId:t,interruptedTurnId:r,interruptedQueuedSeq:o}),vfe(n.pendingInterruptedThreadOnlyCompletions,So),Ri(n,r),pd(n,r),Qy(n,r,new Error("Codex turn interrupted")),n.kandanThreadId!==void 0&&await Tf(e,n,n.kandanThreadId,o,{status:"processed"},void 0,void 0,n.codexThreadId),await Di(e,n)}function Nk(e,n,t){e.codex.request("turn/interrupt",{threadId:n,turnId:t}).catch(r=>{e.log("codex.turn_interrupt_failed",{thread_id:n,turn_id:t,message:r instanceof Error?r.message:String(r)})})}async function ppe(e,n,t,r){if(r.type==="update_session_settings")return ype(e,n,t,r);if(r.type==="resolve_codex_approval_request")return bpe(e,n,r);if(r.type==="resolve_port_forward_request")return Ez(e,n,t,r);if(r.type==="update_thread_interaction_access")return hpe(e,n,r);if(r.type==="stop_turn")return mpe(e,n,t,r);if(r.type==="steer_turn")return fpe(e,n,t,r);if(r.type!=="interrupt_queued_messages"||n.codexThreadId!==r.threadId)return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let o=gF(n.queue,r.throughSeq),i=tk(n.turn),s=n.turn.status==="completing"?n.turn.queuedSeq:void 0,a=Ik(r.throughSeq,i)||Ik(r.throughSeq,s);if(!o.ok&&!a)return{instanceId:e.instanceId,ok:!1,error:"queue_empty"};switch(n.turn.status){case"active":await Pz(e,n,n.codexThreadId,n.turn.turnId,n.turn.queuedSeq);break;case"starting":n.turn=dF(n.turn);break;case"completing":Ik(r.throughSeq,n.turn.queuedSeq)&&await lpe(e,n,"interrupt requested");break;case"idle":break}if(e.log("codex.queued_messages_interrupted",{through_seq:r.throughSeq??null,selected_count:o.ok?o.selectedCount:0,remaining_count:o.ok?o.remainingCount:Yo(n.queue)}),o.ok)for(let d of o.selectedSeqs)await Gn(e,n.kandanThreadId,d,{status:"processing",reason:"interrupt requested"},void 0,void 0,n.codexThreadId);return await Tr(e,n,t),{instanceId:e.instanceId,ok:!0,interruptedQueuedMessages:o.ok?o.selectedCount:0}}async function fpe(e,n,t,r){if(r.agentProvider==="claude-code"||!(n.kandanThreadId!==void 0&&n.kandanThreadId===r.threadId||r.providerSessionKey!==void 0&&n.codexThreadId===r.providerSessionKey||n.codexThreadId!==void 0&&n.codexThreadId===r.threadId))return;let i=Y(r.sourceSeq);if(i===void 0)return;if(n.kandanThreadId===void 0||n.codexThreadId===void 0)return{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",ok:!1,error:"thread_not_bound"};let s=n.kandanThreadId,a=nf(n.queue,i);if(!(!a&&Zy(e,n,s,i)))return n.steeredKandanMessageSeqs.has(i)&&await Gn(e,s,i,{status:"processed",reason:Yp},void 0,void 0,n.codexThreadId),e.log("kandan.steer_duplicate_ignored",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,reason:a?"seq_already_pending_in_queue":"duplicate_message_claim",previously_steered:n.steeredKandanMessageSeqs.has(i)}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,duplicate:!0};let u=Qo(r.attachments??[]),c=r.workDescription??_y(r.input),l=async x=>{let b=c??"";return b.trim()===""&&u.length===0?(Dpe(e,n,s,i),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,ok:!1,error:"steer_missing_message_body"}):(e.log("kandan.steer_parked_as_own_turn",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId??null,reason:x,turn_status:n.turn.status}),await Fz(e,n,t,{seq:i,body:b,attachments:u,parkReason:x}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,steered:"queued_fallback",reason:x})};if(u.length>0)return l("attachments_require_own_turn");let p=n.turn.status==="active"?n.turn.turnId:void 0;if(p===void 0)return l(`turn_not_steerable_${n.turn.status}`);let m=xy(r.input);if(m.length===0)return l("steer_input_empty");let f,y=Symbol("codex_steer_timeout");try{let x=await Promise.race([e.codex.request("turn/steer",{threadId:n.codexThreadId,expectedTurnId:p,input:m}),new Promise(b=>{f=setTimeout(()=>b(y),uz),f.unref?.()})]);if(x===y)return e.log("codex.steer_unconfirmed",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,timeout_ms:uz}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,ok:!1,error:"codex_steer_unconfirmed",message:"The engine did not confirm the steering message in time. It was not re-queued to avoid a duplicate; Linzumi will drive it to a visible outcome."};if("error"in x)return e.log("codex.steer_rejected",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,message:x.error.message}),l("engine_rejected_steer")}catch(x){return e.log("codex.steer_rejected",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,message:x instanceof Error?x.message:String(x)}),l("engine_rejected_steer")}finally{f!==void 0&&clearTimeout(f)}if(n.steeredKandanMessageSeqs.add(i),n.steeredKandanMessageSeqs.size>By){let x=n.steeredKandanMessageSeqs.size-By;for(let b of Array.from(n.steeredKandanMessageSeqs).slice(0,x))n.steeredKandanMessageSeqs.delete(b)}return await Gn(e,s,i,{status:"processed",reason:Yp},void 0,void 0,n.codexThreadId),e.log("codex.steer_applied",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,steered:"steered_live"}}async function mpe(e,n,t,r){if(!(n.kandanThreadId!==void 0&&n.kandanThreadId===r.threadId||r.providerSessionKey!==void 0&&n.codexThreadId===r.providerSessionKey||n.codexThreadId!==void 0&&n.codexThreadId===r.threadId))return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let i=n.codexThreadId,s=n.kandanThreadId,a;if(n.turn.status==="starting"){let w=n.turn.queuedSeq;await Ole({stillStarting:()=>n.turn.status==="starting"&&n.turn.queuedSeq===w,capMs:iz()})||(a=w,bfe(n,w))}let d=a===void 0?[]:ld(n,a),u=n.turn,c=ad(u)??r.turnId,l=tk(u)??(u.status==="completing"?u.queuedSeq:void 0),p=u.status!=="idle"||Yo(n.queue)>0;c!==void 0&&Qy(n,c,new Error("stopped by user"));let m=!1;if(a!==void 0)e.log("codex.stop_turn_start_abort",{harness_session_id:i,kandan_thread_id:s,queued_seq:a,start_ack_wait_ms:iz()});else try{await e.codex.request("turn/interrupt",{threadId:i,turnId:c??null}),m=!0}catch(w){e.log("codex.stop_turn_interrupt_failed",{harness_session_id:i,turn_id:c??null,message:w instanceof Error?w.message:String(w)})}let f=Ele(),y=!p||f<=0||await Ale({currentTick:()=>n.streamEventTick,capMs:f}),x=!1;if((!y||a!==void 0)&&e.escalateEngineHalt!==void 0)try{await e.escalateEngineHalt(a!==void 0?"stopped by user (engine never acked turn start)":"stopped by user (engine unresponsive)"),x=!0}catch(w){e.log("codex.stop_turn_escalation_failed",{harness_session_id:i,message:w instanceof Error?w.message:String(w)})}let b=ok(n.queue),S=a!==void 0?"stopped by user (before the turn started)":x?"interrupted (engine killed after unresponsive stop)":"stopped by user",v=y||x;if(v&&(l!==void 0&&(await Tf(e,n,s,l,{status:"interrupted",reason:S},void 0,void 0,i),fd(n,l)),a!==void 0))for(let w of d)e.options.onLiveSourceSeqSettled?.({channel:e.options.channelSession.channelSlug,threadId:s,sourceSeq:w});c!==void 0&&(Ei(n,c),Yy(n,c),Ri(n,c),pd(n,c)),n.turn={status:"idle"},jz(n);for(let w of b)for(let k of sd(w))Zy(e,n,s,k);return await Di(e,n),e.log("codex.turn_stopped",{harness_session_id:i,kandan_thread_id:s,turn_id:c??null,had_live_activity:p,interrupt_acked:m,stream_events_ceased:y,escalated_kill:x,confirmed_halt:v,aborted_starting_seq:a??null,preserved_queued_messages:b.length}),v&&b.length>0&&Tr(e,n,t).catch(w=>{e.log("kandan.post_stop_queue_drain_failed",{kandan_thread_id:s,codex_thread_id:i,queue_depth:Yo(n.queue),message:w instanceof Error?w.message:String(w)})}),{instanceId:e.instanceId,controlType:r.type,ok:!0,agentProvider:"codex",threadId:s,stopped:v,streamEventsCeased:y,escalatedKill:x,confirmedHalt:v,abortedWedgedStart:a!==void 0,preservedQueuedMessages:b.length,...v?{}:{error:"stop_halt_unconfirmed"}}}function Ik(e,n){return e===void 0||n===void 0?!1:n<=e}async function hpe(e,n,t){let r=Iz(t);if(n.kandanThreadId!==t.threadId)return e.log("thread_interaction.access_update_ignored",{thread_id:t.threadId,expected_thread_id:n.kandanThreadId??null,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,reason:"different_thread"}),{instanceId:e.instanceId,ok:!1,error:"different_thread"};if(r.length===0)return e.log("thread_interaction.access_update_ignored",{thread_id:t.threadId,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,reason:"missing_requester"}),{instanceId:e.instanceId,ok:!1,error:"missing_requester"};for(let o of r)t.grant?n.approvedThreadInteractionRequesters.add(o):n.approvedThreadInteractionRequesters.delete(o);return e.log("thread_interaction.access_updated",{thread_id:t.threadId,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,grant:t.grant}),{instanceId:e.instanceId,ok:!0,grant:t.grant}}function Iz(e){if(e.threadId===void 0)return[];let n=[];return e.requesterUserId!==void 0&&n.push(`${e.threadId}:user:${e.requesterUserId}`),e.requesterSlug!==void 0&&e.requesterSlug.trim()!==""&&n.push(`${e.threadId}:slug:${e.requesterSlug}`),n}function gpe(e,n){return Iz({threadId:n.threadId,requesterUserId:n.actorUserId,requesterSlug:n.actorSlug}).some(t=>e.approvedThreadInteractionRequesters.has(t))}async function ype(e,n,t,r){if(n.codexThreadId===r.threadId)return n.codexThreadId===void 0?{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"}:(n.runtimeSettings=Mfe(n.runtimeSettings,r),n.pendingRuntimeSettingsResume=!0,n.runtimeSettingsGeneration+=1,await Qpe(e,n),$fe(e,n).catch(o=>{e.log("kandan.session_settings_publish_failed",{message:o instanceof Error?o.message:String(o)})}),e.log("codex.session_settings_updated",{model:n.runtimeSettings.model??null,reasoning_effort:n.runtimeSettings.reasoningEffort??null,approval_policy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allow_port_forwarding_by_default:n.runtimeSettings.allowPortForwardingByDefault??null}),await vpe(e,n,t),await Rz(e,n),{instanceId:e.instanceId,ok:!0,model:n.runtimeSettings.model??null,reasoningEffort:n.runtimeSettings.reasoningEffort??null,approvalPolicy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allowPortForwardingByDefault:n.runtimeSettings.allowPortForwardingByDefault??null})}async function xpe(e,n){let t=n.runtimeSettingsGeneration,o=n.runtimeSettingsResumeChain.catch(()=>{}).then(()=>_pe(e,n,t));return n.runtimeSettingsResumeChain=o.then(()=>{},()=>{}),await o}async function _pe(e,n,t){if(n.pendingRuntimeSettingsResume!==!0||n.closed||n.turn.status!=="idle"||Gz(n))return!0;let r=n.codexThreadId;if(r===void 0)return!0;if(n.runtimeSettingsGeneration!==t)return!1;let o=t,i=n.runtimeSettings,s=eq(e.options,i),a={threadId:r,...$p(s)};e.log("codex.session_settings_resume_requested",{codex_thread_id:r,model:i.model??null,reasoning_effort:i.reasoningEffort??null,approval_policy:i.approvalPolicy??null,sandbox:i.sandbox??null,fast:i.fast??null,generation:o});let d=await e.codex.request("thread/resume",a);if("error"in d)throw new Error(`failed to resume Codex thread with updated settings: ${d.error.message}`);return n.pendingRuntimeSettingsResume===!0&&n.runtimeSettingsGeneration===o&&(n.pendingRuntimeSettingsResume=!1),e.log("codex.session_settings_resume_completed",{codex_thread_id:r,generation:o,current_generation:n.runtimeSettingsGeneration,pending:n.pendingRuntimeSettingsResume}),n.pendingRuntimeSettingsResume!==!0}async function Rz(e,n){try{return await xpe(e,n)}catch(t){return e.log("codex.session_settings_resume_failed",{message:t instanceof Error?t.message:String(t)}),!1}}async function bpe(e,n,t){if(n.codexThreadId!==t.threadId)return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let r=n.pendingApprovalRequests.get(vy(t.requestId,t.sourceSeq));if(r===void 0)return{instanceId:e.instanceId,ok:!1,error:"approval_request_not_found"};n.pendingApprovalRequests.delete(vy(t.requestId,t.sourceSeq));let o=t.decision==="approve"?"accept":"decline";return r.resolve({decision:o}),n.activeProcessingState={seq:r.sourceSeq,reason:"streaming response"},await Gn(e,n.kandanThreadId,r.sourceSeq,{status:"processing",reason:"streaming response"},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_resolved",{request_id:t.requestId,source_seq:t.sourceSeq,decision:t.decision,codex_decision:o}),{instanceId:e.instanceId,ok:!0}}async function $k(e,n,t){if(n.pendingPortForwardRequests.size>0||n.queuedPortForwardCandidates.size===0)return;let r=Array.from(n.queuedPortForwardCandidates.values()).sort((o,i)=>o.port-i.port)[0];r!==void 0&&(n.queuedPortForwardCandidates.delete(r.port),await Bk(e,n,t,r))}async function Ez(e,n,t,r){let o=n.pendingPortForwardRequests.get(r.requestId);if(o!==void 0&&!(r.threadId!==void 0&&n.codexThreadId!==r.threadId))return wpe(e,t,r)?(n.pendingPortForwardRequests.delete(r.requestId),r.decision==="deny"?(n.dismissedForwardTargets.set(o.port,mr(o)),await Jk(e,n,o,{decision:"deny"}),await Kk(e,n,o,"failed"),e.log("port_forward.request_denied",{request_id:r.requestId,port:o.port,pid:o.pid}),await $k(e,n,t),{instanceId:e.instanceId,ok:!0}):(await Uk(e,n,o,{publishMessageState:!0,logEvent:"port_forward.request_approved"}),await $k(e,n,t),{instanceId:e.instanceId,ok:!0,port:o.port})):(e.log("port_forward.request_resolution_ignored",{request_id:r.requestId,actor_slug:r.actorSlug??null,actor_user_id:r.actorUserId??null,reason:"sender_not_allowed"}),{instanceId:e.instanceId,ok:!1,error:"sender_not_allowed"})}async function Dz(e,n,t,r){let o=r==="listener_exited"?"port_forward_listener_exited":"port_forward_listener_changed";n.pendingPortForwardRequests.delete(t.requestId),await Jk(e,n,t,{decision:"expired",reason:r}),await Kk(e,n,t,"failed",o),e.log("port_forward.pending_request_expired",{request_id:t.requestId,port:t.port,pid:t.pid,reason:r})}async function Uk(e,n,t,r){n.approvedForwardPorts.add(t.port),n.approvedForwardTargets.set(t.port,mr(t));let o=Ii(t.command),i=e.options.onForwardPortApproved?.(t.port,{kandanThreadId:n.kandanThreadId??null,codexThreadId:n.codexThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,processName:o?.appName??null,processIconKey:o?.iconKey??null,linzumiCliManaged:t.portKind==="commander_bound"});await Jk(e,n,t,{decision:"approve",capabilities:i}),r.publishMessageState&&await Kk(e,n,t,"processed"),e.log(r.logEvent,{request_id:t.requestId,port:t.port,pid:t.pid})}function wpe(e,n,t){return t.actorSlug===void 0&&t.actorUserId===void 0?!1:Qv(e.options.channelSession.listenUser,{actorSlug:t.actorSlug,actorUserId:t.actorUserId},n.runnerIdentity)}async function Bk(e,n,t,r){if(n.kandanThreadId===void 0||n.codexThreadId===void 0){e.log("port_forward.prompt_skipped",{port:r.port,pid:r.pid,reason:"thread_not_bound"});return}let o=hf({candidate:r,threadBound:!0,suppressedPorts:new Set(e.options.suppressedForwardPorts?.()??[]),approvedPorts:n.approvedForwardPorts,approvedTargets:n.approvedForwardTargets,dismissedTargets:n.dismissedForwardTargets,pendingRequests:Array.from(n.pendingPortForwardRequests.values())}),i=!0;switch(o.type){case"skip":return;case"remember_approved_target":n.approvedForwardTargets.set(o.target.port,o.target);return;case"revoke_and_prompt":if(n.pendingPortForwardRequests.size>0&&!i){n.queuedPortForwardCandidates.set(r.port,r),e.log("port_forward.request_queued",{port:r.port,pid:r.pid,pending_count:n.pendingPortForwardRequests.size});return}if(await $z(e,n,o.revoked,o.reason),i){await Rk(e,n,t,r);return}break;case"replace_pending":if(await Dz(e,n,o.expired,o.reason),i){await Rk(e,n,t,o.candidate);return}if(n.pendingPortForwardRequests.size>0){n.queuedPortForwardCandidates.set(o.candidate.port,o.candidate),e.log("port_forward.request_queued",{port:o.candidate.port,pid:o.candidate.pid,pending_count:n.pendingPortForwardRequests.size});return}break;case"prompt":if(i){await Rk(e,n,t,r);return}if(n.pendingPortForwardRequests.size>0){n.queuedPortForwardCandidates.set(r.port,r),e.log("port_forward.request_queued",{port:r.port,pid:r.pid,pending_count:n.pendingPortForwardRequests.size});return}break}let s=`port-forward-${Vy()}`,a=gf(r),d=Az(n);if(d===void 0){e.log("port_forward.prompt_skipped",{port:r.port,pid:r.pid,reason:"source_seq_missing"});return}let u=xc({requestId:s,sourceSeq:d,candidate:r});n.pendingPortForwardRequests.set(s,u),n.activeProcessingState!==void 0&&n.portForwardPreviousProcessingStates.set(s,n.activeProcessingState);let c=Ii(r.command),l=c?.iconKey===void 0?void 0:`/web/process-icons/${c.iconKey}.png`,p=c?.appName??a;n.activeProcessingState={seq:d,reason:"awaiting approval",approval:{requestId:s,kind:"local_runner_port_forward",summary:`Make ${p} on port ${r.port} accessible on Linzumi?`,reason:Ly(r),port:r.port,pid:r.pid,command:r.command,...r.cwd===void 0?{}:{cwd:r.cwd},...c?.appName===void 0?{}:{processName:p},...c?.iconKey===void 0?{}:{processIconKey:c.iconKey},...l===void 0?{}:{processIconPath:l},choices:[{decision:"approve",label:"Enable",description:`Allow Linzumi to proxy HTTP, HTTPS, and WebSocket traffic for runner port ${r.port}.`},{decision:"deny",label:"Deny",description:`Keep runner port ${r.port} private for this runner session.`}],allowedActorSlug:e.options.channelSession.listenUser,allowedActorUserId:e.options.channelSession.listenUser.toLowerCase()===(t.runnerIdentity.actorUsername??"").toLowerCase()?t.runnerIdentity.actorUserId:void 0}},await Gn(e,n.kandanThreadId,d,{status:"processing",reason:"awaiting approval",approval:n.activeProcessingState.approval},void 0,void 0,n.codexThreadId),await Cpe(e,n,u,c),e.log("port_forward.request_pending",{request_id:s,port:r.port,pid:r.pid})}async function Rk(e,n,t,r){let o=Az(n);if(o===void 0){e.log("port_forward.auto_approval_skipped",{port:r.port,pid:r.pid,reason:"source_seq_missing"});return}let i=xc({requestId:`port-forward-auto-${Vy()}`,sourceSeq:o,candidate:r});await Uk(e,n,i,{publishMessageState:!1,logEvent:"port_forward.request_auto_approved"})}async function vpe(e,n,t){for(let r of Array.from(n.pendingPortForwardRequests.values()))n.pendingPortForwardRequests.delete(r.requestId),await Uk(e,n,r,{publishMessageState:!0,logEvent:"port_forward.request_auto_approved"});await Mz(e,n,t)}async function Mz(e,n,t){let r=Array.from(n.queuedPortForwardCandidates.values()).sort((o,i)=>o.port-i.port)[0];r!==void 0&&(n.queuedPortForwardCandidates.delete(r.port),await Bk(e,n,t,r),await Mz(e,n,t))}function Az(e){return e.activeProcessingState?.seq??e.rootSeq}async function $z(e,n,t,r){n.approvedForwardPorts.delete(t.port),n.approvedForwardTargets.delete(t.port);let o=e.options.onForwardPortRevoked?.(t.port);await vc(e.kandan,e.topic,"forward_port_revoked",{instanceId:e.instanceId,port:t.port,pid:t.pid,command:t.command,...t.cwd===void 0?{}:{cwd:t.cwd},reason:r,capabilities:Hs(o,t.port)},e.log),e.log("port_forward.approved_port_revoked",{port:t.port,pid:t.pid,reason:r})}async function Spe(e,n,t){n.approvedForwardPorts.has(t.port)&&await $z(e,n,n.approvedForwardTargets.get(t.port)??t,"listener_exited")}async function kpe(e,n,t,r){let o=Array.from(n.pendingPortForwardRequests.values()).find(i=>zr(mr(i),r));o!==void 0&&(await Dz(e,n,o,"listener_exited"),await $k(e,n,t))}async function Cpe(e,n,t,r){await vc(e.kandan,e.topic,"forward_port_requested",{instanceId:e.instanceId,requestId:t.requestId,sourceSeq:t.sourceSeq,port:t.port,pid:t.pid,command:t.command,codexThreadId:n.codexThreadId??null,kandanThreadId:n.kandanThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,...r?.appName===void 0?{}:{processName:r.appName},...r?.iconKey===void 0?{}:{processIconKey:r.iconKey},...t.cwd===void 0?{}:{cwd:t.cwd}},e.log)}async function Jk(e,n,t,r){await vc(e.kandan,e.topic,"forward_port_resolved",{instanceId:e.instanceId,requestId:t.requestId,port:t.port,pid:t.pid,command:t.command,codexThreadId:n.codexThreadId??null,kandanThreadId:n.kandanThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,...t.cwd===void 0?{}:{cwd:t.cwd},sourceSeq:t.sourceSeq,decision:r.decision,...r.reason===void 0?{}:{reason:r.reason},...r.capabilities===void 0?{}:{capabilities:r.capabilities}},e.log)}async function Kk(e,n,t,r,o="port_forward_denied"){if(n.kandanThreadId===void 0)return;let i=n.portForwardPreviousProcessingStates.get(t.requestId);n.portForwardPreviousProcessingStates.delete(t.requestId);let s=n.activeProcessingState;if(s!==void 0&&s.seq===t.sourceSeq){let a=s.reason==="awaiting approval"&&s.approval.requestId===t.requestId;if(a){if(n.activeProcessingState=void 0,i!==void 0&&i.seq===t.sourceSeq){n.activeProcessingState=i,await Gn(e,n.kandanThreadId,t.sourceSeq,ky(i),void 0,void 0,n.codexThreadId);return}switch(n.turn.status){case"active":case"completing":if(n.turn.queuedSeq===t.sourceSeq){n.activeProcessingState={seq:t.sourceSeq,reason:"running terminal command"},await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"processing",reason:"running terminal command"},void 0,void 0,n.codexThreadId);return}break;case"idle":case"starting":break}}if(!a){await Gn(e,n.kandanThreadId,t.sourceSeq,ky(s),void 0,void 0,n.codexThreadId);return}}switch(r){case"processed":await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"processed"},void 0,void 0,n.codexThreadId);break;case"failed":await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"failed",reason:o},void 0,void 0,n.codexThreadId);break}}function Tpe(e){let n=e.trim().match(/^\/kandan\s+(approve|deny)-port-forward\s+(\S+)$/i);if(n!==null)return{decision:n[1]?.toLocaleLowerCase()==="approve"?"approve":"deny",requestId:n[2]??""}}function vf(e){let n=e.replace(/\s+/g," ").trim();return n.length<=50?n:`${n.slice(0,47)}...`}function Gy(e,n){n!==void 0&&(e.kandanThreadTitle=n)}function Oz(e){return e===void 0?void 0:Dg(e)?.threadTitle}function Ppe(e){if(Array.isArray(e))for(let n of e){let t=Dg(n)?.threadTitle;if(t!==void 0)return t}}async function cz(e,n){if(n.kandanThreadId===void 0||n.kandanThreadTitle!==void 0)return;let t=e.options.channelSession,r=await so(e.kandan,e.topic,"session:thread_context",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId});Gy(n,Ppe(r.messages))}async function Ipe(e,n,t,r,o){let i=e.options.channelSession;if(o.type!=="thread.message"){Ek(e,o,"non_thread_message_event");return}if(o.threadId===void 0){Ek(e,o,"missing_thread_id");return}if(o.body.trim()===""&&o.attachments.length===0){Ek(e,o,"empty_thread_message");return}if(FO(o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"codex_authored"});return}let s=n.kandanThreadId!==void 0?o.threadId===n.kandanThreadId:n.rootSeq!==void 0&&o.replyToSeq===n.rootSeq;if(!Qv(i.listenUser,o,t)&&!gpe(n,o)&&!zO(i.linzumiAgentSession,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"sender_not_allowed",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,message_state_published:s}),s&&await Gs(e,o,{status:"ignored",reason:"sender_not_allowed"});return}if(o.body.trimStart().startsWith("&")){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"human_only",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,message_state_published:s}),s&&await Gs(e,o,{status:"ignored",reason:"human_only"});return}let a=Tpe(o.body);if(a!==void 0){let u=await Ez(e,n,r,{type:"resolve_port_forward_request",instanceId:e.instanceId,requestId:a.requestId,decision:a.decision,actorUserId:o.actorUserId,actorSlug:o.actorSlug});u===void 0?await Gs(e,o,{status:"failed",reason:"port_forward_decision_missing"}):u.ok===!0?await Gs(e,o,{status:"processed"}):await Gs(e,o,{status:"failed",reason:h(u.error)??"port_forward_decision_failed"});return}if(n.kandanThreadId===void 0)if(n.rootSeq===void 0||o.replyToSeq!==n.rootSeq){if(!await Mpe(e,n,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"not_root_reply"}),await Gs(e,o,{status:"ignored",reason:"not_root_reply"});return}}else n.kandanThreadId=o.threadId,zk(e,n);if(Tz(e,n,r),o.threadId!==n.kandanThreadId){if(e.options.onUnroutedThreadMessage!==void 0)try{let u=await e.options.onUnroutedThreadMessage(o);if(u==="spawned"){e.log("kandan.message_spawn_on_miss",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,body_preview:vf(o.body)});return}if(u==="spawned_deduped")return}catch(u){e.log("kandan.message_spawn_on_miss_failed",{seq:o.seq,thread_id:o.threadId??null,message:u instanceof Error?u.message:String(u)})}e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"different_thread",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,body_preview:vf(o.body)});return}if(Gy(n,o.threadTitle),!Epe(e,n,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"duplicate_message_claim"});return}let d=Date.now();rk(n.queue,{seq:o.seq,actorSlug:o.actorSlug,actorUserId:o.actorUserId,body:o.body,attachments:o.attachments,receivedAtMs:d}),e.log("kandan.message_queued",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:d,...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Gs(e,o,Lz(n),"sent"),await Tr(e,n,r)}function Lz(e,n){let t=Yo(e.queue);return e.turn.status!=="idle"?{status:"queued",reason:n===void 0?pc(t):QS(t,n)}:t>1?{status:"queued",reason:iF(t-1)}:{status:"queued"}}async function Rpe(e,n){let t=ok(n.queue);await Promise.all(t.map((r,o)=>Sf(e,n,r,{status:"queued",reason:r.parkReason===void 0?pc(o+1):QS(o+1,r.parkReason)},"sent")))}function Ek(e,n,t){e.log("kandan.message_ignored",{seq:n.seq,type:n.type,thread_id:n.threadId??null,actor_slug:n.actorSlug??null,actor_user_id:n.actorUserId??null,body_length:n.body.length,attachment_count:n.attachments.length,local_runner_event_type:n.localRunnerEventType??null,reason:t})}function Vk(e,n,t){let r=e.options.channelSession;return[e.options.runnerId,e.instanceId,r.workspaceSlug,r.channelSlug,n,String(t)].join(":")}function Epe(e,n,t){return Zy(e,n,t.threadId,t.seq)}function Zy(e,n,t,r){if(t===void 0)return!0;let o=Vk(e,t,r);if(bc.has(o))return!1;if(bc.add(o),n.claimedKandanMessageKeys.add(o),n.claimedKandanMessageKeys.size>By){let i=n.claimedKandanMessageKeys.size-By,s=Array.from(n.claimedKandanMessageKeys).slice(0,i);for(let a of s)n.claimedKandanMessageKeys.delete(a),bc.delete(a)}return!0}function jz(e){for(let n of e.claimedKandanMessageKeys)bc.delete(n);e.claimedKandanMessageKeys.clear()}function Dpe(e,n,t,r){let o=Vk(e,t,r);bc.delete(o),n.claimedKandanMessageKeys.delete(o)}async function Fz(e,n,t,r){if(n.kandanThreadId===void 0||n.codexThreadId===void 0)throw new Error("cannot start a local Codex turn before thread binding");if(r.dedupBySeq===!0){if(nf(n.queue,r.seq))return e.log("kandan.message_duplicate_ignored",{seq:r.seq,linzumi_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,reason:"seq_already_pending_in_queue"}),"duplicate";if(!Zy(e,n,n.kandanThreadId,r.seq))return e.log("kandan.message_duplicate_ignored",{seq:r.seq,linzumi_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,reason:"duplicate_message_claim"}),"duplicate"}r.boundStartTimeout===!0&&(n.boundStartTimeout=!0);let o={seq:r.seq,actorSlug:r.actorSlug,actorUserId:r.actorUserId,body:r.body,attachments:r.attachments??[],receivedAtMs:Date.now(),parkReason:r.parkReason};return rk(n.queue,o),e.log("kandan.message_queued",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:o.receivedAtMs??Date.now(),...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Sf(e,n,o,Lz(n,o.parkReason),"sent"),await Tr(e,n,t),"queued"}async function Mpe(e,n,t){if(t.threadId===void 0||t.replyToSeq===void 0)return!1;let r=e.options.channelSession;try{let o=await so(e.kandan,e.topic,"session:resolve_thread_session",{workspace:r.workspaceSlug,channel:r.channelSlug,thread_id:t.threadId}),i=Y(o.seq),s=h(o.codex_thread_id),a=Oz(o.message);return i!==t.replyToSeq||s===void 0?!1:(n.rootSeq=i,n.kandanThreadId=t.threadId,zk(e,n),Gy(n,t.threadTitle??a),n.codexThreadId=s,await wc(e,n),e.log("kandan.thread_bound_from_historical_reply",{seq:t.seq,kandan_thread_id:t.threadId,root_seq:i,codex_thread_id:s}),!0)}catch(o){return e.log("kandan.thread_bind_from_historical_reply_failed",{seq:t.seq,kandan_thread_id:t.threadId,message:o instanceof Error?o.message:String(o)}),!1}}async function Ape(e,n,t,r,o){for(;o.pending.length>0;){let i=o.pending.splice(0).sort((s,a)=>s.seq-a.seq);for(let s of i)await zz(e,n,t,s,r)}o.ready=!0}async function zz(e,n,t,r,o){if(!(r.seq<=n.seenSeq)){UO(r.threadId,r.traceparent),n.seenSeq=r.seq,e.log("kandan.chat_event",{seq:r.seq,type:r.type,actor_slug:r.actorSlug??null,actor_user_id:r.actorUserId??null,thread_id:r.threadId??null,reply_to_seq:r.replyToSeq??null,local_runner_event_type:r.localRunnerEventType??null});try{await Ipe(e,n,t,o,r),n.minSeq=Math.max(n.minSeq,r.seq),n.failedSeqs.delete(r.seq)&&e.log("kandan.chat_event_failure_cleared",{seq:r.seq})}catch(i){let s=i instanceof Error?i.message:String(i),a=Lpe(e,n,r.seq);e.log("kandan.chat_event_failed",{seq:r.seq,attempts:a,message:s}),a>=Ule&&await jpe(e,n,r,s,a),Fpe(e,n,r),Tr(e,n,o)}}}function $pe(e){let n=Ope(e);return n===void 0?e.minSeq:Math.min(e.minSeq,n-1)}function Ope(e){let n;for(let t of e.failedSeqs.keys())(n===void 0||t<n)&&(n=t);return n}function Lpe(e,n,t){let r=(n.failedSeqs.get(t)??0)+1;if(n.failedSeqs.set(t,r),n.failedSeqs.size>Nle){let o=t;for(let i of n.failedSeqs.keys())i>o&&(o=i);n.failedSeqs.delete(o),e.log("kandan.failed_seq_overflow",{evicted_seq:o,tracked:n.failedSeqs.size})}return r}async function jpe(e,n,t,r,o){n.failedSeqs.delete(t.seq),n.minSeq=Math.max(n.minSeq,t.seq),e.log("kandan.chat_event_abandoned",{seq:t.seq,attempts:o,message:r}),!(nf(n.queue,t.seq)||qz(n,t.seq))&&await Gs(e,t,{status:"failed",reason:"chat_event_abandoned"})}function Fpe(e,n,t){if(t.threadId===void 0||nf(n.queue,t.seq)||qz(n,t.seq))return;let r=Vk(e,t.threadId,t.seq);n.claimedKandanMessageKeys.delete(r)&&bc.delete(r)}function qz(e,n){let t=e.turn;switch(t.status){case"starting":case"active":case"completing":return ld(e,t.queuedSeq).includes(n);case"idle":return!1}}async function Tr(e,n,t){if(n.drainInFlight){n.drainRequested=!0;return}n.drainInFlight=!0;try{do n.drainRequested=!1,await zpe(e,n,t);while(n.drainRequested)}finally{n.drainInFlight=!1}}async function zpe(e,n,t){if(await fz(e,n)||mz(e,n))return;if(!await Rz(e,n)){bf(e,n,"runtime_settings_resume_pending");return}if(mz(e,n))return;let o=mF(n.queue);if(o!==void 0){Bpe(n,o),Jpe(n,o),n.turn={status:"starting",queuedSeq:o.seq,interruptAfterStart:!1},n.pendingStartingProcessingReasons=[],n.activeProcessingState={seq:o.seq,reason:"starting turn"},e.log("codex.turn_starting",{queued_seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:o.receivedAtMs??Date.now(),...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Sf(e,n,o,{status:"processing",reason:"starting turn"},"sent"),await Rpe(e,n),await Xp({cwd:e.options.cwd,threadKey:qk(e,n),turnRef:`seq-${o.seq}`,log:(i,s)=>e.log(i,s)});try{let i=n.codexThreadId;if(i===void 0)throw new Error("Codex thread is not bound");n.kandanThreadId!==void 0&&Wk(e,n,n.kandanThreadId);let s=n.runtimeSettings;if(e.options.cloudAgentTurn!==void 0){let p=await _z(e,o,n.pendingReconnectContextInjection);n.pendingReconnectContextInjection=void 0;let m=`cloud-${Vy()}`;n.turn={status:"active",turnId:m,queuedSeq:o.seq},Lk(n,o.seq,s),Ok(n,m,o.seq),n.threadRebindAttempts.delete(o.seq),e.log("codex.cloud_turn_started",{turn_id:m,queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null});try{await e.options.cloudAgentTurn({input:p,runtimeSettings:s,kandanThreadId:n.kandanThreadId,codexThreadId:i,sourceSeq:o.seq}),Ak(e,n,t,m,"completed",void 0,void 0,!0)}catch(f){e.log("codex.cloud_turn_failed",{turn_id:m,queued_seq:o.seq,message:f instanceof Error?f.message:String(f)}),Ak(e,n,t,m,"failed",f instanceof Error?f.message:String(f),void 0,!0)}return}let a=n.boundStartTimeout;n.boundStartTimeout=!1;let d=e.codex.request("turn/start",{threadId:i,input:await _z(e,o,n.pendingReconnectContextInjection),...iL(eq(e.options,s))}),u=a?await Mi("turn/start",d):await d,c=Lfe(u);if(yz(n,o.seq)){Nk(e,i,c),Ei(n,c),Yy(n,c),Ri(n,c),pd(n,c),e.log("codex.turn_start_ack_after_stop_abort",{turn_id:c,queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null});return}n.pendingReconnectContextInjection=void 0;let l=n.turn.status==="starting"&&n.turn.interruptAfterStart;n.turn={status:"active",turnId:c,queuedSeq:o.seq},Fk(e,n,c),Cfe(e,n,t,c),Lk(n,o.seq,s),Ok(n,c,o.seq),n.threadRebindAttempts.delete(o.seq),e.log("codex.turn_started",{turn_id:c}),Efe(e,n,c),l&&(await Pz(e,n,i,c,o.seq),await Tr(e,n,t))}catch(i){if(yz(n,o.seq)){e.log("codex.turn_start_failed_after_stop_abort",{queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,message:i instanceof Error?i.message:String(i)});return}if(Ky(e)){await Di(e,n),mc(n.queue,o),n.turn={status:"idle"},fd(n,o.seq),await fz(e,n);return}let s=xfe(i)&&n.kandanThreadId!==void 0,a=s?Upe(n,o.seq):void 0,d=s&&a===void 0;if(d&&e.log("codex.thread_rebind_exhausted",{kandan_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId??null,queued_seq:o.seq,max_attempts:qy,message:i instanceof Error?i.message:String(i)}),a!==void 0&&n.kandanThreadId!==void 0){let u=n.codexThreadId,c=n.kandanThreadId;try{await Di(e,n);let l=await jk(e.codex,e.options);n.codexThreadId=l,await wc(e,n),await jfe(e,u),e.options.onCodexThreadRebound?.({kandanThreadId:c,oldCodexThreadId:u,newCodexThreadId:l}),e.log("codex.thread_rebound",{linzumi_thread_id:n.kandanThreadId,old_codex_thread_id:u??null,new_codex_thread_id:l,rebind_attempt:a,max_attempts:qy}),await yfe(e,n,t,u,l);try{n.pendingReconnectContextInjection=await Kpe(e,n)}catch(p){n.pendingReconnectContextInjection=void 0,e.log("codex.thread_reconnect_context_failed",{kandan_thread_id:n.kandanThreadId,codex_thread_id:l,message:p instanceof Error?p.message:String(p)})}mc(n.queue,o),pz>0&&await Zs(pz),n.turn={status:"idle"},await Tr(e,n,t);return}catch(l){e.log("codex.thread_rebind_failed",{kandan_thread_id:n.kandanThreadId,old_codex_thread_id:u??null,message:l instanceof Error?l.message:String(l)})}}if(n.turn={status:"idle"},fd(n,o.seq),n.threadRebindAttempts.delete(o.seq),await Di(e,n),await Sf(e,n,o,{status:"failed",reason:d?`Codex could not recover this conversation's upstream thread after ${qy} restart attempts (${cd(i)}). Send the message again to retry.`:cd(i)}),e.log("codex.turn_start_failed",{queued_seq:o.seq,message:i instanceof Error?i.message:String(i)}),Fle(i))throw i;Yo(n.queue)>0&&(n.drainRequested=!0)}}}function Ky(e){return e.codex.isClosed?.()===!0}function Upe(e,n){let t=e.threadRebindAttempts.get(n)??0;if(!(t>=qy))return e.threadRebindAttempts.delete(n),e.threadRebindAttempts.set(n,t+1),ps(e.threadRebindAttempts,Npe),t+1}async function fz(e,n){if(!Ky(e))return!1;let t=hF(n.queue);if(t.length===0)return!1;let{codexThreadId:r,kandanThreadId:o}=n,i=e.options.rebuildOnDeadCodexWorker;e.log("kandan.queue_drain_dead_worker_rebuild",{codex_thread_id:r??null,kandan_thread_id:o??null,pending_count:t.length,attempt:n.deadWorkerRebuildAttempts+1,rebuild_available:i!==void 0});let s=async d=>{for(let u of t)try{await Sf(e,n,u,{status:"failed",reason:d})}catch(c){e.log("kandan.queue_drain_dead_worker_fail_publish_failed",{codex_thread_id:r??null,seq:u.seq,message:c instanceof Error?c.message:String(c)})}};if(i===void 0||r===void 0||o===void 0)return await s("Codex worker for this thread exited and could not be respawned to resume the conversation."),!0;if(n.deadWorkerRebuildAttempts>=qpe)return e.log("kandan.queue_drain_dead_worker_rebuild_exhausted",{codex_thread_id:r,kandan_thread_id:o,attempts:n.deadWorkerRebuildAttempts}),await s("Codex worker for this thread kept exiting on resume; giving up after several respawn attempts."),!0;n.deadWorkerRebuildAttempts+=1,n.closed=!0;let a=!1;try{a=await i({codexThreadId:r,kandanThreadId:o,pendingMessages:t})}catch(d){e.log("kandan.queue_drain_dead_worker_rebuild_failed",{codex_thread_id:r,kandan_thread_id:o,message:d instanceof Error?d.message:String(d)}),a=!1}return a||await s("Codex worker for this thread exited and could not be respawned to resume the conversation."),!0}function mz(e,n){return n.closed?(bf(e,n,"session_closed"),!0):n.turn.status!=="idle"?(bf(e,n,"turn_not_idle"),!0):n.pendingCompletionTypingStops.size>0?(bf(e,n,"completion_typing_stop_pending"),!0):Gz(n)?(bf(e,n,"local_tui_turn_active"),!0):!1}function Bpe(e,n){let t=sd(n);t.length<=1||(e.fusedQueuedSeqs.set(n.seq,t),ps(e.fusedQueuedSeqs,So))}function Jpe(e,n){let t=e.emptyTurnRetry.get(n.seq);e.emptyTurnRetry.set(n.seq,{message:n,attempts:t?.attempts??0}),ps(e.emptyTurnRetry,_f)}function hz(e,n){let t=e.emptyTurnRetry.get(n);return t!==void 0&&t.attempts<wo}function zy(e,n){let t=e.emptyTurnRetry.get(n);if(t===void 0)return;if(t.attempts>=wo){e.emptyTurnRetry.delete(n);return}let r=t.attempts+1;return e.emptyTurnRetry.set(n,{message:t.message,attempts:r}),{message:t.message,attempts:r}}function ld(e,n){let t=e.fusedQueuedSeqs.get(n);return t===void 0||t.length===0?[n]:t}async function Tf(e,n,t,r,o,i,s,a){for(let d of ld(n,r))await Gn(e,t,d,o,i,s,a);n.fusedQueuedSeqs.delete(r)}function bf(e,n,t){let r=Yo(n.queue);r!==0&&e.log("kandan.queue_drain_blocked",{reason:t,queue_depth:r,turn_status:n.turn.status,active_turn_id:ad(n.turn)??null,active_queued_seq:n.turn.status==="active"||n.turn.status==="completing"||n.turn.status==="starting"?n.turn.queuedSeq:null,codex_thread_id:n.codexThreadId??null,kandan_thread_id:n.kandanThreadId??null,local_tui_turn_count:n.localTuiTurnIds.size,pending_completion_typing_stop_count:n.pendingCompletionTypingStops.size})}async function Kpe(e,n){if(n.kandanThreadId===void 0)throw new Error("cannot fetch reconnect context without a Linzumi thread id");let t=e.options.channelSession,r=await so(e.kandan,e.topic,"session:thread_context",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId}),o=wy(r.messages),i=e.options.reconnectContextSummarizer??WS(),s=await nF(o,i,n.linzumiContext);return e.log("codex.thread_reconnect_context_prepared",{codex_thread_id:n.codexThreadId??null,kandan_thread_id:n.kandanThreadId,context_message_count:o.length}),s}async function Vpe(e,n,t,r){let o=A(r.params)??{},i=Vz(o),s=Wz(o);if(n.closed||!Hz(n,s,i))return;if(Nz(n.runtimeSettings,r.method))return e.log("codex.server_request_auto_accepted",{method:r.method,turn_id:i??null}),{decision:"accept"};if(r.method==="mcpServer/elicitation/request"){let d=Hpe(o);return e.log(d==="accept"?"codex.mcp_elicitation_auto_accepted":"codex.mcp_elicitation_auto_declined",{method:r.method,server_name:Uz(o)??null,tool_name:Bz(o)??null,turn_id:i??null}),{action:d}}if(Wpe(r.method)){if(i===void 0)throw new Error(`Codex approval request missing turn id: ${r.method}`);return Gpe(e,n,r,i,t)}let a=`unhandled Codex app-server request: ${r.method}`;throw e.log("codex.server_request_unhandled",{method:r.method,turn_id:i??null}),i!==void 0&&await Qz(e,n,i,a,t),new Error(a)}function Nz(e,n){return e.approvalPolicy==="never"&&e.sandbox==="danger-full-access"&&(n==="item/commandExecution/requestApproval"||n==="item/fileChange/requestApproval")}function Wpe(e){return e==="item/commandExecution/requestApproval"||e==="item/fileChange/requestApproval"}function Uz(e){return h(e.server_name)??h(e.serverName)??h(e.server)}function Bz(e){return h(e.tool_name)??h(e.toolName)??h(e.tool)}function Hpe(e){let n=Uz(e);if(n!==void 0)return n==="linzumi"?"accept":"decline";let t=Bz(e);return t!==void 0&&(t.startsWith("linzumi_")||t.startsWith("mcp__linzumi__"))?"accept":"decline"}async function Gpe(e,n,t,r,o){let i=n.approvalPromptChain.then(async()=>{if(Nz(n.runtimeSettings,t.method))return e.log("codex.approval_request_auto_approved",{request_id:String(t.id),source_seq:fc(n.turn,r)??null,turn_id:r,method:t.method,reason:"full_access_enabled_while_queued"}),{decision:"accept"};let s=fc(n.turn,r);if(s===void 0||n.kandanThreadId===void 0){let u=`Codex approval request has no active Kandan source message: ${t.method}`;throw await Qz(e,n,r,u,o),new Error(u)}let a=sF(t);n.activeProcessingState={seq:s,reason:"awaiting approval",approval:a};let d=new Promise((u,c)=>{let l={requestId:a.requestId,sourceSeq:s,turnId:r,resolve:u,reject:c};n.pendingApprovalRequests.set(vy(l.requestId,l.sourceSeq),l)});return await Gn(e,n.kandanThreadId,s,{status:"processing",reason:"awaiting approval",approval:a},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_pending",{request_id:a.requestId,source_seq:s,turn_id:r,method:t.method}),d});return n.approvalPromptChain=i.then(()=>{},()=>{}),i}function Zpe(e,n){let t=[...e.pendingApprovalRequests.values()];e.pendingApprovalRequests.clear(),t.forEach(r=>r.reject(n))}function Qy(e,n,t){for(let[r,o]of e.pendingApprovalRequests)o.turnId===n&&(e.pendingApprovalRequests.delete(r),o.reject(t))}async function Qpe(e,n){if(n.runtimeSettings.approvalPolicy!=="never"||n.runtimeSettings.sandbox!=="danger-full-access"||n.pendingApprovalRequests.size===0)return;let t=[...n.pendingApprovalRequests.values()];n.pendingApprovalRequests.clear();let r;for(let o of t)o.resolve({decision:"accept"}),(r===void 0||o.sourceSeq>r)&&(r=o.sourceSeq);r!==void 0&&(n.activeProcessingState={seq:r,reason:"streaming response"});for(let o of t)n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,o.sourceSeq,{status:"processing",reason:"streaming response"},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_auto_approved",{request_id:o.requestId,source_seq:o.sourceSeq,reason:"full_access_enabled"})}async function Xpe(e,n,t,r,o){if(!Xy(n,t))return;let i=mL(r);if(i===void 0)return;let s=e.options.tuiInputMirrorRetryDelaysMs??Vle;for(let a=0;;a+=1)try{await Ype(e,n,t,i,o);return}catch(d){let u=d instanceof Error?d.message:String(d),c=s[a];if(e.log("codex.tui_input_mirror_retry",{turn_id:t,item_key:i.itemKey,attempt:a+1,retry_in_ms:c??null,message:u}),c===void 0)throw n.pipeline?.notifyTurnMappingFailed(t,`local TUI input mirror failed: ${u}`),d;if(await Zs(c),n.closed)return}}function Zs(e){return new Promise(n=>{setTimeout(n,e)})}async function Ype(e,n,t,r,o){let i=nfe(t,r.body);if(Jz(n,i)!==void 0){tfe(n,i,r.itemKey);return}dfe(e,n);let s=n.kandanThreadId,a=n.codexThreadId;if(s===void 0||a===void 0)return;let d=e.options.channelSession,u=gfe(n,t)??n.runtimeSettings,c=await so(e.kandan,e.topic,"session:post_thread_user_message",{workspace:d.workspaceSlug,channel:d.channelSlug,thread_id:s,body:r.body,payload:{...td(e.options,e.instanceId,"tui_input",a,o,void 0,void 0,u),...n.rootSeq===void 0?{}:{reply_to_seq:n.rootSeq}},client_message_id:efe(e.instanceId,t,r.itemKey)}),l=Y(c.seq);if(l===void 0)throw new Error("session:post_thread_user_message reply carried no seq for the TUI input mirror");Lk(n,l,u),Ok(n,t,l),Kz(n,{logicalKey:i,turnId:t,seq:l,itemKeys:[r.itemKey]}),e.log("kandan.tui_input_mirrored",{turn_id:t,item_key:r.itemKey,actor_user_id:o.runnerIdentity.actorUserId??null,actor_slug:o.runnerIdentity.actorUsername??null})}function efe(e,n,t){return`local-codex-tui-${bz("sha256").update(`${e}:${n}:${t}`).digest("hex").slice(0,32)}`}function nfe(e,n){return`local-codex-tui-input:${bz("sha256").update(`${e}:${n.trim()}`).digest("hex").slice(0,32)}`}function Jz(e,n){return gc(e.mirroredTuiInputProjections,n)}function Kz(e,n){of(e.mirroredTuiInputProjections,n.logicalKey,n)}function tfe(e,n,t){let r=Jz(e,n);r===void 0||r.itemKeys.includes(t)||Kz(e,{...r,itemKeys:[...r.itemKeys,t]})}function Vz(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}function Wz(e){let n=A(e.thread),t=A(e.turn);return h(e.threadId)??h(e.thread_id)??h(n?.id)??h(t?.threadId)??h(t?.thread_id)}function Hz(e,n,t){return n!==void 0?e.codexThreadId===n:t===void 0?!1:ad(e.turn)===t||Xy(e,t)}function rfe(e,n,t){if(t===void 0||n.codexThreadId!==t)return;switch(n.turn.status){case"active":case"completing":return ife(n,t,n.turn.queuedSeq),Qy(n,n.turn.turnId,new Error("Codex turn completed with thread-only notification")),e.log("codex.turn_completion_inferred",{thread_id:t,turn_id:n.turn.turnId,queued_seq:n.turn.queuedSeq,turn_status:n.turn.status}),n.turn.turnId;case"idle":case"starting":break}let r=ofe(n,t);if(r!==void 0){e.log("codex.thread_only_completion_after_interrupt_ignored",{thread_id:t,interrupted_turn_id:r.interruptedTurnId,interrupted_queued_seq:r.interruptedQueuedSeq,turn_status:n.turn.status});return}switch(n.turn.status){case"idle":case"starting":e.log("codex.turn_completion_without_turn_id",{thread_id:t,turn_status:n.turn.status,queued_seq:n.turn.status==="starting"?n.turn.queuedSeq:null});return}}function ofe(e,n){let t=e.pendingInterruptedThreadOnlyCompletions.findIndex(o=>o.threadId===n);if(t<0)return;let[r]=e.pendingInterruptedThreadOnlyCompletions.splice(t,1);return r}function gz(e,n,t){e.pendingInterruptedThreadOnlyCompletions=e.pendingInterruptedThreadOnlyCompletions.filter(r=>n!==void 0&&r.threadId!==n?!0:r.interruptedTurnId!==t)}function ife(e,n,t){e.pendingInterruptedThreadOnlyCompletions=e.pendingInterruptedThreadOnlyCompletions.filter(r=>r.threadId!==n||r.interruptedQueuedSeq>=t)}function sfe(e,n,t,r){if(!(r===void 0||n.codexThreadId!==r))switch(e){case"response_item":return Gg(t)===void 0?void 0:ad(n.turn);case"item/agentMessage/delta":case"item/completed":case"warning":case"error":return ad(n.turn);default:return}}function afe(e,n,t,r){e.options.launchTui!==!0||n.codexThreadId!==t||n.turn.status!=="idle"||(ex(n.localTuiTurnIds,r,So),hfe(n,r),n.kandanThreadId!==void 0&&Wk(e,n,n.kandanThreadId),e.log("codex.tui_turn_started",{turn_id:r,codex_thread_id:t}))}function Xy(e,n){return e.localTuiTurnIds.has(n)}function Gz(e){return e.localTuiTurnIds.size>0}function dfe(e,n){n.kandanThreadId!==void 0||n.rootSeq===void 0||(n.kandanThreadId=Vy(),zk(e,n))}function Ri(e,n){e.localTuiTurnIds.delete(n)}function ufe(e,n,t){e.pendingTuiInputMirrors.delete(n),e.pendingTuiInputMirrors.set(n,t),ps(e.pendingTuiInputMirrors,So)}function cfe(e,n){e.pendingTuiInputMirrors.delete(n)}function Ok(e,n,t){of(e.turnReplyTargets,n,{turnId:n,replyToSeq:t}),e.pipeline?.notifyTurnMappingReady(n)}function pd(e,n){CF(e.turnReplyTargets,n)}function lfe(e,n){return gc(e.turnReplyTargets,n)?.replyToSeq}function Lk(e,n,t){of(e.turnRuntimeSettingsBySourceSeq,n.toString(),t)}function pfe(e,n){return n===void 0?e.runtimeSettings:gc(e.turnRuntimeSettingsBySourceSeq,n.toString())??{}}function ffe(e,n){if(n!==void 0)return gc(e.turnRuntimeSettingsBySourceSeq,n.toString())}function mfe(e){return{model_provider:e.modelProvider??null,model:e.model??null,reasoning_effort:e.reasoningEffort??null,sandbox:e.sandbox??null,approval_policy:e.approvalPolicy??null,fast:e.fast??!1,allow_port_forwarding_by_default:e.allowPortForwardingByDefault??null}}function hfe(e,n){of(e.localTuiTurnRuntimeSettingsByTurnId,n,e.runtimeSettings)}function gfe(e,n){return gc(e.localTuiTurnRuntimeSettingsByTurnId,n)}async function yfe(e,n,t,r,o){if(n.kandanThreadId===void 0)return;let i=e.options.channelSession;await so(e.kandan,e.topic,"session:post_thread_message",{workspace:i.workspaceSlug,channel:i.channelSlug,thread_id:n.kandanThreadId,body:"[codex reconnected to new thread]",payload:td(e.options,e.instanceId,"availability",o,t),client_message_id:`local-codex-rebound-${e.instanceId}-${o}`})}function xfe(e){return e instanceof Error?e.message.includes("turn/start failed: thread not found")||e.message.includes("turn/start failed: invalid thread id"):!1}function Ei(e,n){e.forwardedTurnIds.has(n)||ex(e.forwardedTurnIds,n,So)}function Yy(e,n){e.recoveredTurnIds.has(n)||ex(e.recoveredTurnIds,n,So)}function bfe(e,n){for(e.stopAbortedStartingSeqs.delete(n),e.stopAbortedStartingSeqs.add(n);e.stopAbortedStartingSeqs.size>_fe;){let t=e.stopAbortedStartingSeqs.values().next().value;if(t===void 0)return;e.stopAbortedStartingSeqs.delete(t)}}function yz(e,n){return e.stopAbortedStartingSeqs.delete(n)}function ex(e,n,t){e.delete(n),e.add(n),wfe(e,t)}function wfe(e,n){for(;e.size>n;){let t=e.values().next().value;if(t===void 0)return;e.delete(t)}}function ps(e,n){for(;e.size>n;){let t=e.keys().next().value;if(t===void 0)return;e.delete(t)}}function vfe(e,n){for(;e.length>n;)e.shift()}async function Di(e,n){if(Pfe(n),!n.codexTypingActive||(n.codexTypingActive=!1,n.kandanThreadId===void 0))return;let t=e.options.channelSession;await vc(e.kandan,e.topic,"session:typing_stop",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId,instance_id:e.instanceId,codex_thread_id:n.codexThreadId??null},e.log)}function Wk(e,n,t){n.codexTypingActive=!0;let r=()=>{if(n.typingHeartbeatInFlight)return;let o=e.options.channelSession;n.typingHeartbeatInFlight=!0,vc(e.kandan,e.topic,"session:typing_start",{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:t,instance_id:e.instanceId,codex_thread_id:n.codexThreadId??null},e.log).then(()=>Yz(e,n)).catch(i=>{e.log("kandan.typing_heartbeat_failed",{message:i instanceof Error?i.message:String(i)})}).finally(()=>{n.typingHeartbeatInFlight=!1})};r(),n.typingHeartbeat===void 0&&(n.typingHeartbeat=setInterval(r,kle()))}function Zz(e,n,t,r){if(r===void 0||!Sfe(n,r)||n.pendingCompletionTypingStops.has(r))return;let o=Di(e,n).catch(i=>{e.log("kandan.typing_stop_after_completion_failed",{turn_id:r,message:i instanceof Error?i.message:String(i)})});n.pendingCompletionTypingStops.set(r,o),ps(n.pendingCompletionTypingStops,So),o.finally(()=>{n.pendingCompletionTypingStops.get(r)===o&&n.pendingCompletionTypingStops.delete(r),Tr(e,n,t)})}function Sfe(e,n){if(e.forwardedTurnIds.has(n))return!1;if(Xy(e,n))return!0;switch(e.turn.status){case"active":case"completing":return e.turn.turnId===n;case"idle":case"starting":return!1}}function kfe(e,n){n===void 0||e.forwardedTurnIds.has(n)||ex(e.pendingStartingCompletionTurnIds,n,So)}function Cfe(e,n,t,r){n.pendingStartingCompletionTurnIds.delete(r)&&Zz(e,n,t,r)}async function Tfe(e,n){let t=e.pendingCompletionTypingStops.get(n);if(t!==void 0)try{await t}finally{e.pendingCompletionTypingStops.get(n)===t&&e.pendingCompletionTypingStops.delete(n)}}function Pfe(e){e.typingHeartbeat!==void 0&&(clearInterval(e.typingHeartbeat),e.typingHeartbeat=void 0)}async function Gs(e,n,t,r="acked"){n.threadId!==void 0&&await Gn(e,n.threadId,n.seq,t,n.actorSlug,n.actorUserId,void 0,r)}async function Sf(e,n,t,r,o="acked"){if(n.kandanThreadId!==void 0){if(r.status==="processed"||r.status==="failed"){await Tf(e,n,n.kandanThreadId,t.seq,r,t.actorSlug,t.actorUserId,n.codexThreadId);return}await Gn(e,n.kandanThreadId,t.seq,r,t.actorSlug,t.actorUserId,n.codexThreadId,o)}}async function xz(e,n,t,r,o){let i=e.options.cloudTerminalStatePushRetryDelaysMs??AS,s=i[0]??Ble,a=e.options.cloudTerminalConnectionWaitBudgetMs??Jle,d=0,u=0,c;for(;;)try{return await Gn(e,n,t,r,void 0,void 0,o,"must_ack"),!0}catch(l){if(NS(l)){u+=1;let m=Date.now();c??=m;let f=m-c;if(f>=a)return e.log("codex.cloud_terminal_state_connection_wait_exhausted",{seq:t,status:r.status,connection_wait_attempts:u,elapsed_ms:f,budget_ms:a}),!1;e.log("codex.cloud_terminal_state_connection_wait",{seq:t,status:r.status,connection_wait_attempts:u,elapsed_ms:f}),s>0&&await Zs(s);continue}let p=i[d];if(e.log("codex.cloud_terminal_state_push_failed",{seq:t,status:r.status,attempt:d+1,attempts_remaining:i.length-d,message:l instanceof Error?l.message:String(l)}),d+=1,p===void 0)return!1;p>0&&await Zs(p)}}async function Gn(e,n,t,r,o,i,s,a="acked"){let d=e.options.channelSession,u={workspace:d.workspaceSlug,channel:d.channelSlug,thread_id:n,instance_id:e.instanceId,...s===void 0?{}:{codex_thread_id:s},seq:t,status:r.status,..."reason"in r?{reason:r.reason}:{},...r.status==="failed"&&r.retryable===!0?{retryable:!0}:{},...r.status==="failed"&&bo(r.fate)?{fate:r.fate}:{},...r.status==="failed"&&r.ladder!==void 0?{ladder:r.ladder}:{},...r.status==="processing"&&r.approval!==void 0?{approval_request_id:r.approval.requestId,approval_kind:r.approval.kind,approval_summary:r.approval.summary,...r.approval.port===void 0?{}:{approval_port:r.approval.port},...r.approval.pid===void 0?{}:{approval_pid:r.approval.pid},...r.approval.command===void 0?{}:{approval_command:r.approval.command},...r.approval.cwd===void 0?{}:{approval_cwd:r.approval.cwd},...r.approval.processName===void 0?{}:{approval_process_name:r.approval.processName},...r.approval.processIconKey===void 0?{}:{approval_process_icon_key:r.approval.processIconKey},...r.approval.processIconPath===void 0?{}:{approval_process_icon_path:r.approval.processIconPath},...r.approval.reason===void 0?{}:{approval_reason:r.approval.reason},...r.approval.choices===void 0?{}:{approval_choices:r.approval.choices},...r.approval.allowedActorSlug===void 0?{}:{approval_allowed_actor_slug:r.approval.allowedActorSlug},...r.approval.allowedActorUserId===void 0?{}:{approval_allowed_actor_user_id:r.approval.allowedActorUserId}}:{},...o===void 0?{}:{actor_slug:o},...i===void 0?{}:{actor_user_id:i},...Ife(n)};if(a==="must_ack"){await so(e.kandan,e.topic,"message_state",u);return}await vc(e.kandan,e.topic,"message_state",u,e.log,a)}function Ife(e){let n=Ag(e);return n===void 0?{}:{traceparent:n}}async function Qz(e,n,t,r,o){Qy(n,t,new Error(r));let i=fc(n.turn,t);i!==void 0&&n.kandanThreadId!==void 0&&(await Tf(e,n,n.kandanThreadId,i,{status:"failed",reason:r},void 0,void 0,n.codexThreadId),fd(n,i)),Ri(n,t),Ei(n,t),cF(n.turn,t)&&(n.turn={status:"idle"}),await Di(e,n),await Tr(e,n,o)}function Rfe(e,n,t){let r=e.pendingStartingProcessingReasons.at(-1);r!==void 0&&r.turnId===n&&r.reason===t||e.pendingStartingProcessingReasons.push({turnId:n,reason:t})}function Efe(e,n,t){let r=n.pendingStartingProcessingReasons;if(r.length!==0){n.pendingStartingProcessingReasons=[];for(let o of r)o.turnId===t&&Xz(e,n,t,o.reason).catch(i=>{e.log("kandan.message_state_refresh_failed",{turn_id:t,reason:o.reason,message:i instanceof Error?i.message:String(i)})})}}async function Xz(e,n,t,r){let o=fc(n.turn,t);o===void 0||n.kandanThreadId===void 0||n.activeProcessingState?.seq===o&&n.activeProcessingState.reason===r||n.activeProcessingState?.seq===o&&n.activeProcessingState.reason==="awaiting approval"||(n.activeProcessingState={seq:o,reason:r},await Gn(e,n.kandanThreadId,o,{status:"processing",reason:r},void 0,void 0,n.codexThreadId))}async function Yz(e,n){let t=n.activeProcessingState;t===void 0||n.kandanThreadId===void 0||t.reason==="awaiting approval"&&t.approval.kind==="local_runner_port_forward"||await Gn(e,n.kandanThreadId,t.seq,ky(t),void 0,void 0,n.codexThreadId)}function fd(e,n){e.activeProcessingState?.seq===n&&(e.activeProcessingState=void 0)}async function _z(e,n,t=void 0){let r=await iS({cwd:e.options.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,attachmentDirectoryName:"local-codex-attachments"},n),o=sS(VS(n),r),i=WO(r);return[...t===void 0?[]:[t],{type:"text",text:o},...i]}function Dfe(e){return{modelProvider:e.channelSession.modelProvider,model:e.channelSession.model,reasoningEffort:e.channelSession.reasoningEffort,approvalPolicy:ec(e.channelSession.approvalPolicy,e.channelSession.sandbox),sandbox:e.channelSession.sandbox,fast:e.fast,allowPortForwardingByDefault:e.channelSession.allowPortForwardingByDefault}}function Mfe(e,n){let t=Dk(e.sandbox,n,"sandbox");return{modelProvider:e.modelProvider,model:Dk(e.model,n,"model"),reasoningEffort:Dk(e.reasoningEffort,n,"reasoningEffort"),approvalPolicy:Afe(e.approvalPolicy,n,t),sandbox:t,fast:n.fast??e.fast,allowPortForwardingByDefault:!0}}function Afe(e,n,t){return Object.prototype.hasOwnProperty.call(n,"approvalPolicy")?ec(n.approvalPolicy??void 0,t):ec(e,t)}function Dk(e,n,t){return Object.prototype.hasOwnProperty.call(n,t)?n[t]??void 0:e}function eq(e,n){return{...e,fast:n.fast,channelSession:{...e.channelSession,modelProvider:n.modelProvider,model:n.model,reasoningEffort:n.reasoningEffort,approvalPolicy:n.approvalPolicy,sandbox:n.sandbox,allowPortForwardingByDefault:n.allowPortForwardingByDefault}}}async function $fe(e,n){let t=e.options.channelSession;if(n.kandanThreadId===void 0||n.codexThreadId===void 0)throw new Error("cannot publish local Codex settings before thread binding");await so(e.kandan,e.topic,"session:settings",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,modelProvider:n.runtimeSettings.modelProvider??null,model:n.runtimeSettings.model??null,reasoningEffort:n.runtimeSettings.reasoningEffort??null,approvalPolicy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allowPortForwardingByDefault:n.runtimeSettings.allowPortForwardingByDefault??null,updated_at:new Date().toISOString()})}function Ofe(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);let n=h(A(A(e.result)?.thread)?.id);if(n===void 0)throw new Error("thread/start response did not include thread.id");return n}function Lfe(e){if("error"in e)throw new Error(`turn/start failed: ${e.error.message}`);let n=h(A(A(e.result)?.turn)?.id);if(n===void 0)throw new Error("turn/start response did not include turn.id");return n}async function jfe(e,n){if(n!==void 0)try{let t=await e.codex.request("thread/archive",{threadId:n});if("error"in t)throw new Error(`thread/archive failed: ${t.error.message}`);e.log("codex.thread_archived",{codex_thread_id:n})}catch(t){e.log("codex.thread_archive_failed",{codex_thread_id:n,message:t instanceof Error?t.message:String(t)})}}async function jk(e,n){let t=await e.request("thread/start",{cwd:n.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",...Ffe(n),...$p(n)});return Ofe(t)}function Ffe(e){let n=e.channelSession.developerPrompt;return n===void 0?{}:{developerInstructions:Lp({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:e.mcpAvailable!==!1,devServicesAvailable:e.devServicesAvailable===!0,developerPrompt:n,linzumiContext:Ks(e.channelSession.linzumiContext)})}}async function so(e,n,t,r,o){let i=await e.push(n,t,r,o);if(Z(i)&&i.status==="ok"&&Z(i.response))return i.response;throw new Error(`kandan push failed: ${t}: ${JSON.stringify(i).slice(0,500)}`)}async function vc(e,n,t,r,o,i="acked"){if(i==="acked"){try{await so(e,n,t,r)}catch(u){o("kandan.optional_push_failed",{event:t,message:u instanceof Error?u.message:String(u)})}return}let s=()=>{},a=new Promise(u=>{s=u}),d=(async()=>{try{await so(e,n,t,r,()=>s())}catch(u){o("kandan.optional_push_failed",{event:t,message:u instanceof Error?u.message:String(u)})}finally{s()}})();await a}var Sle,XF,YF,ez,nz,tz,rz,Dle,Mle,oz,$le,sz,Ny,Uy,Nle,Ule,So,By,Ble,Jle,bc,az,Sz,xf,Vle,Hle,Yle,uz,qpe,lz,_f,qy,pz,Npe,_fe,Hk=F(()=>{"use strict";Xu();eS();Lg();Ng();pS();mS();zp();DL();US();$S();uy();Hn();yy();by();nc();GS();Cy();nk();lF();xF();ic();pk();$n();TF();Gu();mf();Oy();Sk();Tk();_c();Sle=2e3,XF=5e3;YF=3e4;ez=15e4;nz=1e4;tz=3e5;rz=5e3;Dle=250,Mle=750;oz=2e3,$le=50;sz=12e4;Ny=class extends Error{constructor(n,t){super(`Codex ${n} did not reply within ${t}ms (start request timed out)`),this.name="CodexStartRequestTimeoutError"}};Uy=class extends Error{constructor(n,t){super(`Codex ${n} did not reply within ${t}ms (completion snapshot request timed out)`),this.name="CodexCompletionSnapshotRequestTimeoutError"}};Nle=256,Ule=5,So=64,By=1024,Ble=1e3,Jle=12e4,bc=new Set,az=1,Sz=[1e3,5e3,15e3],xf={baseDelayMs:15e3,maxDelayMs:6e4};Vle=[1e3,5e3,15e3];Hle=new Set(["commandExecution","terminalInput","mcpToolCall"]);Yle=1e4;uz=15e3;qpe=3,lz=1500,_f=64,qy=3,pz=1500,Npe=64;_fe=64});import{existsSync as zfe,readFileSync as qfe}from"node:fs";import{Agent as Nfe}from"undici";import Ufe from"ws";function ei(){return Bfe(process.env.KANDAN_TLS_CA_FILE)}function Bfe(e){if(e===void 0||e.trim()==="")return;let n=e.trim();if(!zfe(n))throw new Error(`KANDAN_TLS_CA_FILE does not exist: ${n}`);let t=qfe(n,"utf8");return{caFile:n,ca:t,dispatcher:new Nfe({connect:{ca:t}})}}function Sc(e){return e===void 0?fetch:((n,t)=>{let r={...t??{},dispatcher:e.dispatcher};return fetch(n,r)})}function kc(e,n=Ufe){if(e!==void 0)return(t,r)=>{let o={ca:e.ca};return r===void 0?new n(t,o):new n(t,r,o)}}var nx=F(()=>{"use strict"});function tx(e,n,t,r){let o=e===void 0?Number.NaN:Number.parseInt(e,10);return Number.isFinite(o)?Math.min(r,Math.max(t,o)):n}function nq(e){return{maxConcurrent:tx(e.LINZUMI_CLAUDE_RESUME_MAX_CONCURRENT_STARTS,2,1,64),spacingMs:tx(e.LINZUMI_CLAUDE_RESUME_START_SPACING_MS,2e3,0,6e4),maxWaitMs:tx(e.LINZUMI_CLAUDE_RESUME_START_MAX_WAIT_MS,6e4,1e3,6e5),defaultRateLimitBackoffMs:tx(e.LINZUMI_CLAUDE_RESUME_429_BACKOFF_MS,5e3,1e3,6e4)}}function tq(e,n=Jfe){let t=0,r,o=[],i,s=(u,c)=>{if(u.settled)return;u.settled=!0,u.timeoutHandle!==void 0&&(n.clearTimeout(u.timeoutHandle),u.timeoutHandle=void 0);let l=o.indexOf(u);l!==-1&&o.splice(l,1),u.resolve(c)},a=u=>{i===void 0&&(i=n.setTimeout(()=>{i=void 0,d()},Math.max(0,u)))},d=()=>{let u=n.now();if(r!==void 0&&u<r){o.length>0&&a(r-u);return}for(r=void 0;o.length>0&&t<e.maxConcurrent;){let c=o.shift();c===void 0||c.settled||(t+=1,n.setTimeout(()=>{t-=1,d()},e.spacingMs),s(c,{waitedMs:u-c.enqueuedAtMs,timedOut:!1}))}};return{acquire:()=>new Promise(u=>{let c={enqueuedAtMs:n.now(),resolve:u,timeoutHandle:void 0,settled:!1};c.timeoutHandle=n.setTimeout(()=>{s(c,{waitedMs:e.maxWaitMs,timedOut:!0})},e.maxWaitMs),o.push(c),d()}),notifyRateLimited:u=>{let c=Math.min(6e4,Math.max(1e3,u.retryAfterMs??e.defaultRateLimitBackoffMs)),l=n.now()+c;(r===void 0||l>r)&&(r=l),o.length>0&&a(c)},pendingCount:()=>o.filter(u=>!u.settled).length,pausedUntilMs:()=>r}}function rq(e,n){let t=Array.isArray(e)?e[0]:e;if(t===void 0||t.trim()==="")return;let r=Number.parseInt(t.trim(),10);if(Number.isFinite(r)&&`${r}`===t.trim())return r<0?void 0:r*1e3;let o=Date.parse(t);if(!Number.isNaN(o))return Math.max(0,o-n)}var Jfe,Gk=F(()=>{"use strict";Jfe={now:()=>Date.now(),setTimeout:(e,n)=>{let t=setTimeout(e,n);return t.unref?.(),t},clearTimeout:e=>{clearTimeout(e)}}});import{createServer as Kfe}from"node:http";import{randomBytes as oq}from"node:crypto";import{request as Vfe}from"undici";function aq(e,n){for(let t of n){let r=e[t];if(Array.isArray(r))return r.join(", ");if(typeof r=="string")return r}return null}async function dq(e){let n=e.now??Date.now,t=e.upstreamBaseUrl.replace(/\/+$/,""),o=`/llm-proxy-session/${oq(16).toString("hex")}`,i=e.initialToken,s=n(),d=Kfe((p,m)=>{(async()=>{let f=p.url??"";if(!f.startsWith(`${o}/`)&&f!==o){m.writeHead(404,{"content-type":"application/json"}),m.end(JSON.stringify({error:"not_found"}));return}let y=f===o?"/":f.slice(o.length),x=`${t}${y}`,b=oq(8).toString("hex"),S=n();e.debugTrace?.record("llm-proxy-relay","relay.request_start",{request_id:b,debug_trace_id:e.debugTraceId??null,method:p.method??null,path:y});let v={};for(let[R,P]of Object.entries(p.headers)){if(P===void 0)continue;let O=R.toLowerCase();Zfe.has(O)||O!==iq&&O!==sq&&(v[O]=Array.isArray(P)?P.join(", "):P)}e.debugTraceId!==void 0&&(v[sq]=e.debugTraceId),v[iq]=i;let w=(p.method??"GET").toUpperCase(),k=w!=="GET"&&w!=="HEAD";try{let R=await Vfe(x,{method:w,headers:v,...k?{body:p}:{},...e.dispatcher===void 0?{}:{dispatcher:e.dispatcher},headersTimeout:0,bodyTimeout:0}),P=n()-S;e.debugTrace?.record("llm-proxy-relay","relay.upstream_headers",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,status:R.statusCode,ttfb_ms:P,upstream_request_id:aq(R.headers,["x-request-id","request-id","x-amzn-requestid","cf-ray","openai-request-id"]),retry_after:aq(R.headers,["retry-after"])});let O={};for(let[J,K]of Object.entries(R.headers))K!==void 0&&(Qfe.has(J.toLowerCase())||(O[J]=K));if(R.statusCode===429){let J=R.headers["retry-after"],K=rq(Array.isArray(J)?J[0]:J,n());e.log("llm_proxy_relay.upstream_rate_limited",{target_path:y,retry_after_ms:K??null});try{e.onUpstreamRateLimited?.({retryAfterMs:K})}catch{}}m.writeHead(R.statusCode,O);let E=R.body,j=0,z=!1,M=(J,K)=>{z||(z=!0,e.debugTrace?.record("llm-proxy-relay","relay.response_finished",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,status:R.statusCode,outcome:J,detail:K??null,ttfb_ms:P,total_ms:n()-S,response_bytes:j}))};E.on("data",J=>{j+=Buffer.byteLength(J)}),E.on("error",J=>{M("upstream_body_error",J instanceof Error?J.message:String(J)),m.destroy()}),m.on("finish",()=>{M("completed")}),m.on("close",()=>{m.writableEnded||M("client_closed"),E.destroy()}),E.pipe(m)}catch(R){let P=R instanceof Error?R.message:String(R);e.debugTrace?.record("llm-proxy-relay","relay.upstream_error",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,total_ms:n()-S,message:P}),e.log("llm_proxy_relay.upstream_error",{target_path:y,message:P}),m.headersSent||m.writeHead(502,{"content-type":"application/json"}),m.end(JSON.stringify({error:"llm_proxy_relay_upstream_error",message:P}))}})().catch(()=>{m.headersSent||m.writeHead(502),m.end()})}),u=new Set;d.on("connection",p=>{u.add(p),p.on("close",()=>u.delete(p))}),await new Promise((p,m)=>{d.once("error",m),d.listen(0,"127.0.0.1",()=>{d.removeListener("error",m),p()})});let c=d.address();if(c===null||typeof c!="object")throw d.close(),new Error("llm proxy credential relay failed to bind a loopback port");return{baseUrl:`http://127.0.0.1:${c.port}${o}`,setToken:p=>{i=p,s=n()},currentToken:()=>i,tokenAgeMs:()=>n()-s,close:()=>new Promise(p=>{d.close(()=>p());for(let m of u)m.destroy()})}}function uq(e){let n=e.refreshAgeMs??Hfe,t=e.checkIntervalMs??Gfe,r=!1,o,i=async()=>{if(!r&&!(e.relay.tokenAgeMs()<n))return o!==void 0||(o=(async()=>{try{let a=e.relay.tokenAgeMs(),d=await e.mint();d!==void 0&&typeof d.token=="string"&&d.token!==""?(e.relay.setToken(d.token),typeof d.maxAgeMs=="number"&&Number.isFinite(d.maxAgeMs)&&d.maxAgeMs>0&&(n=Math.floor(d.maxAgeMs*3/4)),e.log("llm_proxy_relay.token_refreshed",{previous_token_age_ms:a,next_refresh_age_ms:n})):e.log("llm_proxy_relay.token_refresh_failed",{token_age_ms:a,message:"mint returned no token"})}catch(a){e.log("llm_proxy_relay.token_refresh_failed",{token_age_ms:e.relay.tokenAgeMs(),message:a instanceof Error?a.message:String(a)})}finally{o=void 0}})()),o},s=setInterval(()=>{i()},t);return s.unref?.(),{stop:()=>{r=!0,clearInterval(s)},tick:i,refreshAgeMs:()=>n}}var Wfe,Hfe,Gfe,iq,sq,Zfe,Qfe,cq=F(()=>{"use strict";Gk();Wfe=28800*1e3,Hfe=Math.floor(Wfe*3/4),Gfe=300*1e3,iq="x-linzumi-llm-proxy-token",sq="x-linzumi-debug-trace-id",Zfe=new Set(["host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","content-length"]),Qfe=new Set(["connection","keep-alive","transfer-encoding","trailer","upgrade","content-length"])});function Yfe(e){let n=e[Xfe]?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="no"||n==="off")}function eme(e){return lq(e.ANTHROPIC_API_KEY)||lq(e.ANTHROPIC_AUTH_TOKEN)?"user_api_key":"subscription_oauth"}function pq(e){let n=eme(e.env);return e.llmProxyBindingPresent?e.hostedLinzumiAgentContext?{lane:"llm_proxy",credentialClass:n,reason:"hosted_linzumi_agent_context"}:n==="user_api_key"?{lane:"llm_proxy",credentialClass:n,reason:"user_api_key"}:e.routedNonAnthropicModel?{lane:"llm_proxy",credentialClass:n,reason:"non_anthropic_routed_model"}:Yfe(e.env)?{lane:"direct_anthropic",credentialClass:n,reason:"subscription_oauth"}:{lane:"llm_proxy",credentialClass:n,reason:"direct_connection_disabled"}:{lane:"direct_anthropic",credentialClass:n,reason:"no_llm_proxy_binding"}}function lq(e){return e!==void 0&&e.trim()!==""}var Xfe,fq=F(()=>{"use strict";Xfe="LINZUMI_CLAUDE_DIRECT_CONNECTION"});import{randomUUID as nme}from"node:crypto";function gq(e){let n=e.lane==="direct_anthropic",t=e.mintUsageId??(()=>nme()),r,o=mq(),i=hq(),s,a=0,d=(l,p)=>{l!==r&&(r=l,o=mq());let m={inputTokens:p.inputTokens??o.inputTokens,outputTokens:p.outputTokens??o.outputTokens,cacheReadInputTokens:p.cacheReadInputTokens??o.cacheReadInputTokens,cacheCreationInputTokens:p.cacheCreationInputTokens??o.cacheCreationInputTokens,totalCostUsd:p.totalCostUsd??o.totalCostUsd};i={inputTokens:i.inputTokens+rx(m.inputTokens-o.inputTokens),outputTokens:i.outputTokens+rx(m.outputTokens-o.outputTokens),cacheReadInputTokens:i.cacheReadInputTokens+rx(m.cacheReadInputTokens-o.cacheReadInputTokens),cacheCreationInputTokens:i.cacheCreationInputTokens+rx(m.cacheCreationInputTokens-o.cacheCreationInputTokens),totalCostUsd:m.totalCostUsd===void 0?i.totalCostUsd:(i.totalCostUsd??0)+Math.max(0,m.totalCostUsd-(o.totalCostUsd??0))},o=m},u=(l,p)=>{let m=i,f=a,y=s??t(),x=m.inputTokens+m.outputTokens+m.cacheReadInputTokens+m.cacheCreationInputTokens>0||(m.totalCostUsd??0)>0;s=void 0,a=0;let b=l==="completed"?x||f>=rme:x;if(i=hq(),!b)return;let S=p??r,v={workspace:e.workspace,channel:e.channel,thread_id:e.threadId,usage_id:y,model:e.model??"default",provider:"anthropic",agent_provider:"claude-code",model_transport_lane:e.lane,turn_outcome:l,usage:{input_tokens:m.inputTokens,output_tokens:m.outputTokens,cache_read_input_tokens:m.cacheReadInputTokens,cache_creation_input_tokens:m.cacheCreationInputTokens,...m.totalCostUsd===void 0||m.totalCostUsd<=0?{}:{total_cost_usd:m.totalCostUsd}},stream_event_count:f,...S===void 0?{}:{claude_session_id:S}};Promise.resolve().then(()=>e.push(tme,v)).then(()=>{e.log("claude_code.token_usage_reported",{linzumi_thread_id:e.threadId,usage_id:y,turn_outcome:l,input_tokens:m.inputTokens,output_tokens:m.outputTokens,cache_read_input_tokens:m.cacheReadInputTokens,cache_creation_input_tokens:m.cacheCreationInputTokens})}).catch(w=>{e.log("claude_code.token_usage_report_failed",{linzumi_thread_id:e.threadId,usage_id:y,turn_outcome:l,message:w instanceof Error?w.message:String(w)})})};return{observeTranscriptEvent:l=>{if(n)try{switch(s===void 0&&(s=t()),a+=1,l.type){case"usage":d(l.sessionId,l.usage);break;case"turn_completed":case"session_completed":l.usage!==void 0&&d(l.sessionId,l.usage),u("completed",l.sessionId);break;case"turn_interrupted":u("interrupted",l.sessionId);break;case"session_failed":u("failed",l.sessionId);break;default:break}}catch(p){e.log("claude_code.token_usage_emitter_failed",{linzumi_thread_id:e.threadId,event_type:l.type,message:p instanceof Error?p.message:String(p)})}}}}function mq(){return{inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0,totalCostUsd:void 0}}function hq(){return{inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0,totalCostUsd:void 0}}function rx(e){return e>0?e:0}var tme,rme,yq=F(()=>{"use strict";tme="token_usage",rme=10});function xq(e,n){return e.find(t=>t.codexThreadId===n.codexThreadId&&t.kandanThreadId!==n.kandanThreadId)}function _q(e){let n=new Map;for(let o of e){let i=n.get(o.codexThreadId);(i===void 0||o.updatedAtMs>i.updatedAtMs)&&n.set(o.codexThreadId,o)}let t=[],r=[];for(let o of e)n.get(o.codexThreadId)===o?t.push(o):r.push(o);return{kept:t,dropped:r}}var md,ome,ox,Zk=F(()=>{"use strict";md=class extends Error{codexThreadId;ownerKandanThreadId;requestingKandanThreadId;constructor(n){super(`codex session ${n.codexThreadId} is exclusively owned by Kandan thread ${n.ownerKandanThreadId}; refusing to bind it to thread ${n.requestingKandanThreadId} (one Kandan thread owns a codex session exclusively - fork or start a fresh session for the second thread)`),this.name="CodexSessionOwnershipConflictError",this.codexThreadId=n.codexThreadId,this.ownerKandanThreadId=n.ownerKandanThreadId,this.requestingKandanThreadId=n.requestingKandanThreadId}},ome="start_instance first turn requires a session-owned dispatch (bound Kandan thread session + sourceSeq); the sessionless degraded turn/start fallback was removed (type-2 fallback audit)",ox=class extends Error{codexThreadId;kandanThreadId;hasThreadSession;sourceSeq;constructor(n){super(ome),this.name="StartInstanceFirstTurnOwnershipError",this.codexThreadId=n.codexThreadId,this.kandanThreadId=n.kandanThreadId,this.hasThreadSession=n.hasThreadSession,this.sourceSeq=n.sourceSeq}}});import{mkdirSync as ime,readFileSync as sme,renameSync as ame,writeFileSync as dme}from"node:fs";import{createHash as ume}from"node:crypto";import{dirname as cme,join as bq}from"node:path";import{homedir as lme}from"node:os";function pme(){let e=process.env.LINZUMI_SESSION_REGISTRY_DIR?.trim();return e!==void 0&&e!==""?e:bq(lme(),".linzumi","session-registry")}function vq(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=ume("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return bq(pme(),`${r}.${t}.json`)}function Pf(e){return typeof e=="string"&&e!==""?e:void 0}function fme(e){return e==="codex"||e==="claude-code"?e:void 0}function mme(e){if(!Z(e))return;let n=Pf(e.workspace),t=Pf(e.channel),r=Pf(e.kandanThreadId),o=Pf(e.codexThreadId),i=Pf(e.cwd),s=fme(e.agentProvider),a=Z(e.control)?e.control:void 0,d=typeof e.updatedAtMs=="number"&&Number.isFinite(e.updatedAtMs)?e.updatedAtMs:void 0;if(!(n===void 0||t===void 0||r===void 0||o===void 0||i===void 0||s===void 0||a===void 0||d===void 0))return{workspace:n,channel:t,kandanThreadId:r,codexThreadId:o,cwd:i,agentProvider:s,control:a,updatedAtMs:d}}function hme(e,n){let t=new Map,r;try{r=sme(e,"utf8")}catch(i){return i?.code==="ENOENT"||n("session_registry.read_failed",{path:e,message:i instanceof Error?i.message:String(i)}),t}let o;try{o=JSON.parse(r)}catch(i){return n("session_registry.parse_failed",{path:e,message:i instanceof Error?i.message:String(i)}),t}if(!Z(o)||o.version!==wq||!Z(o.sessions))return t;for(let[i,s]of Object.entries(o.sessions)){let a=mme(s);a!==void 0&&a.kandanThreadId===i&&t.set(i,a)}return t}function Sq(e,n){let t=hme(e,n),r=_q([...t.values()]);if(r.dropped.length>0)for(let s of r.dropped)t.delete(s.kandanThreadId),n("session_registry.duplicate_codex_session_dropped",{path:e,thread_id:s.kandanThreadId,codex_thread_id:s.codexThreadId,kept_thread_id:r.kept.find(a=>a.codexThreadId===s.codexThreadId)?.kandanThreadId??null});let o=()=>{let s={};for(let[a,d]of t)s[a]={workspace:d.workspace,channel:d.channel,kandanThreadId:d.kandanThreadId,codexThreadId:d.codexThreadId,cwd:d.cwd,agentProvider:d.agentProvider,control:d.control,updatedAtMs:d.updatedAtMs};try{ime(cme(e),{recursive:!0});let a=`${e}.tmp`;dme(a,`${JSON.stringify({version:wq,sessions:s})}
|
|
652
|
-
`,"utf8"),ame(a,e)}catch(a){n("session_registry.write_failed",{path:e,message:a instanceof Error?a.message:String(a)})}},i=s=>xq([...t.values()],s);return{list:()=>[...t.values()],upsert:s=>{let a=i(s);return a!==void 0?(n("session_registry.codex_session_ownership_conflict",{path:e,codex_thread_id:s.codexThreadId,owner_thread_id:a.kandanThreadId,requesting_thread_id:s.kandanThreadId}),{outcome:"ownership_conflict",owner:a}):(t.set(s.kandanThreadId,s),o(),{outcome:"stored"})},remove:s=>{t.delete(s)&&o()},rebindCodexThread:(s,a,d)=>{let u=t.get(s);if(u===void 0)return{outcome:"no_record"};let c=i({codexThreadId:a,kandanThreadId:s});return c!==void 0?(n("session_registry.codex_session_ownership_conflict",{path:e,codex_thread_id:a,owner_thread_id:c.kandanThreadId,requesting_thread_id:s}),{outcome:"ownership_conflict",owner:c}):(t.set(s,{...u,codexThreadId:a,control:{...u.control,codexThreadId:a},updatedAtMs:d??Date.now()}),o(),{outcome:"stored"})}}}async function kq(e){let n=0,t=0,r=0,o=0,i=0,s=0;for(let a of e.records){let d=e.nowMs-a.updatedAtMs;if(d>e.maxAgeMs){e.retire(a),r+=1,e.log("session_registry.retired_stale",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,age_ms:d});continue}let u=e.pendingDurableRowCount(a);if(u<=0){let l=!1;if(e.hasUnfinishedWork!==void 0)try{l=e.hasUnfinishedWork(a)}catch(p){l=!0,e.log("session_registry.unfinished_probe_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:p instanceof Error?p.message:String(p)})}if(l){i+=1,e.log("session_registry.kept_unfinished",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId});continue}e.retire(a),t+=1,e.log("session_registry.retired_drained",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId});continue}e.log("session_registry.outbox_replay_started",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,codex_thread_id:a.codexThreadId,pending_rows:u});let c;try{c=await e.attach(a)}catch(l){e.log("session_registry.outbox_replay_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:l instanceof Error?l.message:String(l)}),s+=1;continue}c==="attached"?(n+=1,e.log("session_registry.boot_rehydrated",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,codex_thread_id:a.codexThreadId,pending_rows:u})):c==="retire"?(e.retire(a),o+=1,e.log("session_registry.retired_unattachable",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId})):(s+=1,e.log("session_registry.outbox_replay_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:"attach_failed"}))}return{rehydrated:n,retiredDrained:t,retiredStale:r,retiredUnattachable:o,keptUnfinished:i,failed:s}}function Cq(e,n,t=Qk,r=gme){return e.filter(o=>n-o.updatedAtMs<=t).sort((o,i)=>i.updatedAtMs-o.updatedAtMs).slice(0,Math.max(0,r)).map(o=>({workspace:o.workspace,channel:o.channel,thread_id:o.kandanThreadId,codex_thread_id:o.codexThreadId,provider_session_key:o.codexThreadId,agent_provider:o.agentProvider,cwd:o.cwd}))}var wq,Qk,gme,Tq=F(()=>{"use strict";$n();Zk();wq=1;Qk=1440*60*1e3,gme=200});import{readdirSync as Pq,statSync as yme}from"node:fs";import{join as ix}from"node:path";function Dq(e=Date.now){let n=new Map,t=(r,o)=>{if(n.delete(r),n.set(r,o),n.size>xme){let i=n.keys().next().value;i!==void 0&&n.delete(i)}};return{note:(r,o,i)=>{t(r,{stage:o,detail:i,atMs:e(),failure:void 0})},fail:(r,o)=>{let i=n.get(r);t(r,{stage:i?.stage??"unknown",detail:i?.detail,atMs:e(),failure:o})},clear:r=>{n.delete(r)},snapshot:r=>n.get(r)}}function _me(){let e=process.env.LINZUMI_CODEX_ATTACH_HARD_CAP_MS?.trim();if(e===void 0||e==="")return Iq;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:Iq}function Rq(e,n){if(e===void 0)return"no attach pipeline activity observed for this codex session";let t=Math.max(0,n-e.atMs),r=e.detail===void 0?"":` (${e.detail})`;return`stage ${e.stage}${r}, ${t}ms since last progress`}function Eq(e){return e===void 0?"rollout file not found locally":`rollout ${e} bytes (${(e/(1024*1024)).toFixed(1)}MB)`}function Mq(e,n){let t=o=>{let i;try{i=Pq(o,{withFileTypes:!0})}catch{return}let s=i.filter(a=>a.isFile()).map(a=>a.name).filter(a=>a.endsWith(`-${n}.jsonl`)).sort().at(-1);if(s!==void 0)try{return yme(ix(o,s)).size}catch{return}},r=o=>{let i;try{i=Pq(o,{withFileTypes:!0})}catch{return[]}return i.filter(s=>s.isDirectory()).map(s=>ix(o,s.name)).sort().reverse()};for(let o of r(ix(e,"sessions")))for(let i of r(o))for(let s of r(i)){let a=t(s);if(a!==void 0)return a}return t(ix(e,"archived_sessions"))}function Aq(e){let n=e.now??Date.now,t=e.hardCapMs??_me(),r=e.heartbeatMs??bme,o=Math.max(1,e.pollMs??1e3),i=n(),s=(()=>{let a=!1,d;return()=>{if(!a){a=!0;try{d=e.rolloutBytes?.()}catch{d=void 0}}return d}})();return new Promise((a,d)=>{let u=!1,c=i,l=m=>{u||(u=!0,clearInterval(p),m())},p=setInterval(()=>{let m=n(),f=e.tracker.snapshot(e.codexThreadId);if(f?.failure!==void 0){l(()=>d(new Xk(e.method,e.codexThreadId,f.failure??"unknown failure")));return}let y=Math.max(i,f?.atMs??i);if(m-i>=t){l(()=>d(new eC({method:e.method,codexThreadId:e.codexThreadId,hardCapMs:t,blocker:Rq(f,m),rollout:Eq(s())})));return}if(m-y>=e.noProgressTimeoutMs){l(()=>d(new Yk({method:e.method,codexThreadId:e.codexThreadId,timeoutMs:e.noProgressTimeoutMs,waitedMs:m-i,blocker:Rq(f,m),rollout:Eq(s())})));return}m-c>=r&&(c=m,e.log("runner.attach_waiting",{method:e.method,codex_thread_id:e.codexThreadId,kandan_thread_id:e.kandanThreadId??null,waited_ms:m-i,stage:f?.stage??null,stage_detail:f?.detail??null,stage_age_ms:f===void 0?null:Math.max(0,m-f.atMs),rollout_bytes:s()??null,no_progress_timeout_ms:e.noProgressTimeoutMs,hard_cap_ms:t}))},o);p.unref?.(),e.wait.then(m=>l(()=>a(m)),m=>l(()=>d(m)))})}var xme,Iq,bme,Xk,Yk,eC,$q=F(()=>{"use strict";xme=512;Iq=6e5;bme=3e4;Xk=class extends Error{constructor(n,t,r){super(`Codex ${n} wait for session ${t} failed: the spawn/attach it was waiting on failed (${r}); retryable - a new spawn attempt starts a fresh attach`),this.name="CodexSessionAttachFailedError"}},Yk=class extends Error{constructor(n){super(`Codex ${n.method} made no attach progress within ${n.timeoutMs}ms (waited ${n.waitedMs}ms total) for session ${n.codexThreadId}; blocked on: ${n.blocker}; ${n.rollout}; retryable - the attach pipeline is not advancing`),this.name="CodexAttachWaitNoProgressError"}},eC=class extends Error{constructor(n){super(`Codex ${n.method} exceeded the absolute attach wait cap of ${n.hardCapMs}ms for session ${n.codexThreadId}; last progress: ${n.blocker}; ${n.rollout}; retryable - if this recurs the session's rollout may be too large to attach on this machine`),this.name="CodexAttachWaitHardCapError"}}});import{randomUUID as wme}from"node:crypto";function nC(e){return e==="EnterPlanMode"||e==="ExitPlanMode"}function Lq(e){if(e.toolName==="ExitPlanMode")return{itemKey:`status:${e.itemKey}`,title:hr.planReadyForReview,body:Ic(e.input,["plan","message","summary"]),severity:"info",rawProviderMetadata:qq(e,{workflow_event:"plan_mode_exit_requested"})}}function jq(e){if(!nC(e.toolName))return;let n=e.toolName==="EnterPlanMode";return e.isError?{announcePlanMode:void 0,failureStatus:{itemKey:`status:${e.itemKey}`,title:n?hr.planModeEnterFailed:hr.planModeExitFailed,body:Cc(e.content),severity:"error",rawProviderMetadata:qq(e,{transcript_event_type:"tool_result",workflow_event:n?"plan_mode_enter_failed":"plan_mode_exit_failed",is_error:!0})}}:{announcePlanMode:n,failureStatus:void 0}}function Fq(e){return{itemKey:e.itemKey,title:e.entered?hr.planModeEntered:hr.planModeExited,body:void 0,severity:"info",rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:"workflow",workflow_event:e.entered?"plan_mode_entered":"plan_mode_exited",plan_mode_signal:e.signal,...e.permissionMode===void 0?{}:{permission_mode:e.permissionMode}}}}function zq(e,n){let t=h(e?.subtype),r=t===void 0?"system:<missing-subtype>":`system:${t}`;switch(t){case"status":{let o=h(e?.permissionMode);return o!==void 0?{kind:"permission_mode_signal",tag:r,permissionMode:o,uuid:h(e?.uuid)}:{kind:"debug_only",tag:r,reason:"Claude status frame without a permissionMode does not change the visible workflow state."}}case"init":case"commands_changed":case"local_command_output":return{kind:"debug_only",tag:r,reason:"Claude system message is projected by a dedicated parser branch, not the workflow classifier."};case"thinking_tokens":case"compact_boundary":case"session_state_changed":case"notification":case"tool_use_summary":case"memory_recall":case"files_persisted":case"plugin_install":case"elicitation_complete":case"prompt_suggestion":case"auth_status":return{kind:"debug_only",tag:r,reason:"Claude system lifecycle metadata is recorded in replay diagnostics and does not change the visible workflow state."};case"api_retry":return{kind:"visible_status",tag:r,status:vme(e,n,r)};case"permission_denied":return{kind:"visible_status",tag:r,status:Sme(e,n,r)};case"task_started":case"task_updated":case"task_progress":case"task_notification":return t==="task_progress"?{kind:"debug_only",tag:r,reason:"Claude task progress frames are high-frequency; the task row already shows the running state."}:Rme(e?.skip_transcript)===!0?{kind:"debug_only",tag:r,reason:"Claude marked this task skip_transcript (ambient/housekeeping); the SDK asks consumers to hide it from the inline transcript."}:{kind:"visible_task_update",tag:r,taskUpdate:Pme(e,n,r,t)};case"hook_started":case"hook_progress":return{kind:"debug_only",tag:r,reason:"Routine Claude hook lifecycle chatter is debug-only unless the hook response blocks or fails."};case"hook_response":{let o=If(e?.exit_code),i=h(e?.outcome);return o===2?{kind:"visible_status",tag:r,status:Oq(e,n,r,{blocked:!0,exitCode:o,outcome:i})}:i==="error"?{kind:"visible_status",tag:r,status:Oq(e,n,r,{blocked:!1,exitCode:o,outcome:i})}:{kind:"debug_only",tag:r,reason:"Completed Claude hook did not block or fail (success or cancelled outcome)."}}case"model_refusal_fallback":return{kind:"visible_status",tag:r,status:{itemKey:Pc(e,"refusal-fallback"),title:hr.refusalFallback,body:Ic(e,["api_refusal_explanation","explanation","message","reason"]),severity:"warning",rawProviderMetadata:Tc(e,n,r,{workflow_event:"model_refusal_fallback"})}};case"mirror_error":return{kind:"visible_status",tag:r,status:{itemKey:Pc(e,"mirror-error"),title:hr.mirrorError,body:Ic(e,["message","error","reason"]),severity:"warning",rawProviderMetadata:Tc(e,n,r,{workflow_event:"mirror_error"})}};default:return{kind:"unclassified",tag:r,reason:"Claude system subtype is not classified for workflow visibility"}}}function vme(e,n,t){let r=If(e?.attempt),o=If(e?.max_retries),i=If(e?.retry_delay_ms),s=If(e?.error_status),a=h(e?.error),d=r===void 0?void 0:o===void 0?`Attempt ${r}`:`Attempt ${r}/${o}`,u=[s===void 0?void 0:String(s),a].filter(p=>p!==void 0).join(" "),c=Tme(i),l=[[d,u===""?void 0:`after ${u}`].filter(p=>p!==void 0).join(" "),c===void 0?void 0:`Retrying in ${c}.`].filter(p=>p!==void 0&&p!=="").join(". ");return{itemKey:Cme(e,n),title:hr.apiRetrying,body:l===""?void 0:l,severity:"warning",rawProviderMetadata:Tc(e,n,t,{workflow_event:"api_retry",...r===void 0?{}:{attempt:r},...o===void 0?{}:{max_retries:o},...i===void 0?{}:{retry_delay_ms:i},...s===void 0?{}:{error_status:s},...a===void 0?{}:{error:a}})}}function Sme(e,n,t){let r=h(e?.tool_name),o=h(e?.tool_use_id),i=h(e?.decision_reason_type),s=h(e?.decision_reason),a=A(e?.tool_input),d=h(a?.command);return{itemKey:Pc(e,"permission-denied"),title:d!==void 0?`Claude was denied permission to run ${d}`:r!==void 0?`Claude was denied permission to use ${r}`:"Claude was denied permission to continue",body:s??Cc(h(e?.message))??kme(i),severity:"error",rawProviderMetadata:Tc(e,n,t,{workflow_event:"permission_denied",...r===void 0?{}:{tool_name:r},...o===void 0?{}:{tool_use_id:o},...d===void 0?{}:{command:d},...i===void 0?{}:{decision_reason_type:i}})}}function kme(e){switch(e){case"rule":return"Denied by a permission rule.";case"mode":return"Denied by the current permission mode.";case"classifier":return"Denied by the automatic permission classifier.";default:return"Denied without an interactive prompt."}}function Cme(e,n){return n!==void 0?`system:claude-api-status:${n}`:Pc(e,"claude-api-status")}function Tme(e){if(!(e===void 0||e<0))return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function Pme(e,n,t,r){let o=A(e?.patch),i=h(o?.status)??h(e?.status)??(r==="task_started"?"running":void 0),s=h(e?.task_id)??h(o?.task_id),a=Ic(e,["description","summary"])??Ic(o,["description","error"]),d=h(e?.output_file),u=a===void 0?d===void 0?void 0:`Output: ${d}`:d===void 0?a:`${a}
|
|
653
|
-
Output: ${d}`;return{itemKey:s===void 0?Pc(e,`task-${r}`):`task:${s}`,title:s===void 0?"Task":`Task ${s}`,body:u,state:Ime(i),progressLabel:i,rawProviderMetadata:Tc(e,n,t,{workflow_event:r,...s===void 0?{}:{task_id:s},...i===void 0?{}:{status:i}})}}function Oq(e,n,t,r){let o=h(e?.hook_name),i=h(e?.hook_event);return{itemKey:Pc(e,r.blocked?"hook-blocked":"hook-failed"),title:r.blocked?hr.hookBlocked:hr.hookFailed,body:Ic(e,["stderr","output","stdout"]),severity:r.blocked?"error":"warning",rawProviderMetadata:Tc(e,n,t,{workflow_event:r.blocked?"hook_blocked":"hook_failed",...o===void 0?{}:{hook_name:o},...i===void 0?{}:{hook_event:i},...r.exitCode===void 0?{}:{exit_code:r.exitCode},...r.outcome===void 0?{}:{outcome:r.outcome}})}}function qq(e,n){return{provider:"claude-code-sdk",transcript_event_type:"tool_call",tool_name:e.toolName,tool_use_id:e.itemKey,input:e.input,...n}}function Tc(e,n,t,r){let o=h(e?.subtype),i=h(e?.uuid);return{provider:"claude-code-sdk",transcript_event_type:"system",system_tag:t,...o===void 0?{}:{system_subtype:o},...n===void 0?{}:{session_id:n},...i===void 0?{}:{uuid:i},...r}}function Pc(e,n){let t=Cc(h(e?.uuid));if(t!==void 0)return`system:${t}`;let r=Cc(h(e?.tool_use_id));if(r!==void 0)return`system:${n}:${r}`;let o=Cc(h(e?.task_id));return o!==void 0?`system:${n}:${o}`:`system:${n}:${wme()}`}function Ime(e){switch(e){case"pending":case"queued":return"queued";case"in_progress":case"running":case"started":return"running";case"blocked":case"paused":return"blocked";case"completed":case"complete":case"succeeded":case"success":return"succeeded";case"failed":case"error":return"failed";case"cancelled":case"canceled":case"killed":case"stopped":return"cancelled";default:return"unknown"}}function Ic(e,n){for(let t of n){let r=Cc(h(e?.[t]));if(r!==void 0)return r}}function Cc(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function Rme(e){return typeof e=="boolean"?e:void 0}function If(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}var hr,tC=F(()=>{"use strict";Hn();hr={planModeEntered:"Claude entered plan mode",planModeExited:"Claude exited plan mode",planReadyForReview:"Claude says the plan is ready for review",planModeEnterFailed:"Claude could not enter plan mode",planModeExitFailed:"Claude could not exit plan mode",hookBlocked:"A Claude hook blocked this action",hookFailed:"A Claude hook failed",hookRowsSuppressed:"Further hook failures suppressed for this session",refusalFallback:"Claude declined and switched approach",mirrorError:"Claude hit an internal stream error",questionExpired:"Claude cannot continue: the pending question expired",apiWaiting:"Claude is waiting for the API",apiResponded:"Claude API responded",apiWaitEnded:"Claude stopped waiting for the API",apiRetrying:"Claude API request failed; retrying"}});import{existsSync as Eme}from"node:fs";import{isAbsolute as Dme,resolve as Mme}from"node:path";function Nq(e,n){if(n!=="assistant_aggregate")return;let t=e.trim().replace(/\s+/g," ").toLowerCase();return t===""?void 0:[/\blet me\b.*\bbefore\b.*\b(writing|implementing|editing|patching|making|changing|coding|updating)\b/u,/\blet me\b.*\b(check|inspect|confirm|look|verify|investigate|find|review)\b/u,/\bi(?:'|\u2019)ll\b.*\b(check|inspect|confirm|look|verify|investigate|find|review|write|implement|update|edit|patch|run)\b/u,/\bi will\b.*\b(check|inspect|confirm|look|verify|investigate|find|review|write|implement|update|edit|patch|run)\b/u,/\bnext\b.*\b(i(?:'|\u2019)ll|i will|let me)\b/u].some(o=>o.test(t))?Ame:void 0}function Gq(e){let n=new Map,t=new Map,r=[],o=new Set,i=[],s,a=!1,d=0,u,c,l,p=!1,m=async(I,L,U,ie)=>{let se=e.preparePush===void 0?L:await e.preparePush(I,L);e.debugTrace?.record("outbox","push.start",{event:I,threadKey:e.threadKey,payload:se,timeoutMs:U??null});try{let Q=await e.push(I,se,U,()=>{e.debugTrace?.record("outbox","push.sent",{event:I,threadKey:e.threadKey}),ie?.()});return e.debugTrace?.record("outbox","push.ack",{event:I,threadKey:e.threadKey,reply:Q}),Q}catch(Q){throw e.debugTrace?.record("outbox","push.failed",{event:I,threadKey:e.threadKey,message:Q instanceof Error?Q.message:String(Q)}),py(Q)&&(p=!0,l.pause()),Q}};l=ly({instanceId:e.instanceId,threadKey:e.threadKey,persistDir:e.persistDir,push:m,wire:e.wire,runnerPayload:(I,L,U,ie)=>e.runnerPayload(I,L,U,{...ie??{},agent_provider:"claude-code",claude_session_id:L}),sourceSeqForTurn:I=>n.get(I),resolveSnapshot:I=>{let L=t.get(I);return L===void 0?Promise.reject(new Error(`no retained claude snapshot for turn ${I}`)):Promise.resolve({items:[...L]})},onTurnTerminal:(I,L,U,ie)=>{if(o.delete(I),o.size===0)for(let se of i.splice(0))se();e.onTurnTerminal(I,L,U,ie,n.get(I))},log:e.log,outboxRetryDelaysMs:e.outboxRetryDelaysMs,snapshotRetryDelaysMs:e.snapshotRetryDelaysMs,statsIntervalMs:e.statsIntervalMs,turnStalledThresholdMs:e.turnStalledThresholdMs});let f,y,x=e.processingStateHeartbeatMs??Ome,b=(I,L)=>{if(p)return;let U=e.wire();if(U.kandanThreadId===void 0)return;let ie={workspace:U.workspaceSlug,channel:U.channelSlug,thread_id:U.kandanThreadId,instance_id:e.instanceId,...U.codexThreadId===void 0?{}:{codex_thread_id:U.codexThreadId},seq:I,status:"processing",reason:L,agent_provider:"claude-code",...U.leaseEpoch===void 0?{}:{lease_epoch:U.leaseEpoch}};Promise.resolve().then(()=>e.push("message_state",ie)).catch(se=>{e.log("claude_pipeline.processing_state_push_failed",{thread_key:e.threadKey,seq:I,reason:L,message:se instanceof Error?se.message:String(se)})})},S=()=>{y!==void 0&&(clearInterval(y),y=void 0)},v=()=>{f=void 0,S()},w=()=>{y!==void 0||x<=0||(y=setInterval(()=>{let I=f;I===void 0||e.suppressProcessingState?.()===!0||b(I.seq,I.reason)},x),y.unref?.())},k=(I,L)=>{let U=n.get(I);U===void 0||e.suppressProcessingState?.()===!0||f?.seq===U&&f.reason===L||(f={seq:U,reason:L},b(U,L))},R=(I,L)=>{if(l.submitNotification(I,L),s!==void 0){let U=Sy(I,L);U!==void 0&&k(s.turnId,U)}},P=()=>{if(s!==void 0)return s;a=!1,d+=1;let I=`claude:${e.instanceId}:turn:${d}`,L=e.currentSourceSeq()??u??e.wire().rootSeq;return L===void 0?e.log("claude_pipeline.turn_without_source_seq",{thread_key:e.threadKey,turn_id:I}):(u=L,n.set(I,L)),s={turnId:I,sourceSeq:L??0,itemOrder:[],itemsByKey:new Map,pendingTools:new Map},o.add(I),R("turn/started",{turnId:I}),l.notifyTurnMappingReady(I),k(I,"starting turn"),w(),s},O=(I,L)=>{let U=h(L.id)??`item:${I.itemOrder.length}`;I.itemsByKey.has(U)||I.itemOrder.push(U),I.itemsByKey.set(U,L)},E=(I,L,U,ie)=>{let se=I.itemsByKey.get(L),Q=se===void 0?"":Uq(se,U);O(I,sx(U,L,`${Q}${ie}`))},j=(I,L,U,ie)=>{O(I,sx(U,L,ie))},z=I=>I.itemOrder.flatMap(L=>{let U=I.itemsByKey.get(L);return U===void 0?[]:[U]}),M=(I,L)=>{for(!I.itemOrder.some(ie=>{let se=I.itemsByKey.get(ie);return se!==void 0&&h(se.type)==="agentMessage"&&Uq(se,"agentMessage").trim()===L.trim()})&&L.trim()!==""&&j(I,`result:${I.turnId}`,"agentMessage",L),t.set(I.turnId,z(I)),r.push(I.turnId);r.length>$me;){let ie=r.shift();ie!==void 0&&t.delete(ie)}R("turn/completed",{turnId:I.turnId}),s=void 0,v()},J=(I,L)=>{R("turn/failed",{turnId:I.turnId,reason:L}),s=void 0,v()},K,G=0,W=20,te=0,me=()=>s??(e.currentSourceSeq()===void 0?void 0:P()),ge=(I,L)=>{let U={type:"agentStatus",id:L.itemKey,provider:"claude-code",severity:L.severity,title:L.title,...L.body===void 0?{}:{body:L.body},rawProviderMetadata:L.rawProviderMetadata};O(I,U),R("item/completed",{turnId:I.turnId,item:U})},ce=I=>{if(K===I.wantPlan)return;let L=K===void 0&&!I.wantPlan;if(K=I.wantPlan,L)return;let U=me();if(U===void 0){e.log("claude_pipeline.plan_mode_transition_without_turn",{thread_key:e.threadKey,entered:I.wantPlan,signal:I.signal});return}G+=1,ge(U,Fq({itemKey:I.uuid===void 0?`status:plan-mode:${U.turnId}:${G}`:`status:plan-mode:${I.uuid}`,entered:I.wantPlan,signal:I.signal,permissionMode:I.permissionMode}))},Ie=(I,L)=>{let U=I.pendingTools.get(L.itemKey);I.pendingTools.delete(L.itemKey);let ie=U?.toolName??L.toolName??"tool",se=U?.input??{},Q=`tool:${L.itemKey}`;if(sC(ie)){let ae=Vq(ie,se,{targetExistedAtCall:U?.targetExistedAtCall});if(ae!==void 0){let Ee={type:"fileChange",id:Q,status:L.isError?"failed":"completed",patchText:ae};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee});return}}if(Jq(ie)){let ae=h(se.query)??h(se.url)??ie,Ee={type:"web_search_call",id:`web:${L.itemKey}`,query:ae,status:"completed"};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee});return}let _e=jq({itemKey:L.itemKey,toolName:ie,input:se,content:L.content,isError:L.isError});if(_e!==void 0){_e.failureStatus!==void 0&&ge(I,_e.failureStatus),_e.announcePlanMode!==void 0&&ce({wantPlan:_e.announcePlanMode,signal:"tool_result"});return}if(L.isError&&rC(ie)){let ae=zme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(rC(ie))return;if(Kq(ie)){if(L.isError&&Zq(ie)){let ae=Jme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(L.isError){let ae=Kme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(!L.isError){e.onTodoWriteCompleted?.(se);let ae=Zme(Q,se);if(ae!==void 0){let Ee={...ae,id:Q};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee})}}return}let Te={type:"commandExecution",id:Q,toolName:ie,command:oC(ie,se),aggregatedOutput:L.content,status:L.isError?"failed":"completed"};O(I,Te),R("item/completed",{turnId:I.turnId,item:Te})};return{handleTranscriptEvent:I=>{if(a&&s===void 0&&Lme.has(I.type)){e.log("claude_pipeline.post_interrupt_trailing_event_dropped",{thread_key:e.threadKey,event_type:I.type});return}switch(I.type){case"session_started":return;case"assistant_delta":{let L=P(),U=iC(I.itemKey);E(L,U,"agentMessage",I.delta),R("item/agentMessage/delta",{turnId:L.turnId,itemId:U,delta:I.delta});return}case"reasoning_delta":{let L=P(),U=Bq(I.itemKey);E(L,U,"reasoning",I.delta),R("item/reasoning/textDelta",{turnId:L.turnId,itemId:U,delta:I.delta});return}case"assistant_message":{let L=P(),U=iC(I.itemKey);j(L,U,"agentMessage",I.content),R("item/completed",{turnId:L.turnId,item:sx("agentMessage",U,I.content)});return}case"reasoning_message":{let L=P(),U=Bq(I.itemKey);j(L,U,"reasoning",I.content),R("item/completed",{turnId:L.turnId,item:sx("reasoning",U,I.content)});return}case"tool_call":{let L=P(),U=Wme(I.toolName,I.input,e.cwd);L.pendingTools.set(I.itemKey,{toolName:I.toolName,input:I.input,targetExistedAtCall:U});let ie=jme(I);if(ie!==void 0&&(O(L,ie),R("item/completed",{turnId:L.turnId,item:ie})),rC(I.toolName))return;if(Jq(I.toolName)){let Q=h(I.input.query)??h(I.input.url)??I.toolName;R("item/started",{turnId:L.turnId,item:{type:"web_search_call",id:`web:${I.itemKey}`,query:Q}});return}if(Kq(I.toolName))return;let se=`tool:${I.itemKey}`;if(sC(I.toolName)){let Q=Vq(I.toolName,I.input,{targetExistedAtCall:U});Q!==void 0&&Q.trim()!==""&&R("item/fileChange/outputDelta",{turnId:L.turnId,itemId:se,delta:Q});return}R("item/commandExecution/outputDelta",{turnId:L.turnId,itemId:se,command:oC(I.toolName,I.input),stream:"stdout",delta:`
|
|
654
|
-
`});return}case"tool_result":{Ie(P(),I);return}case"command_output_delta":{let L=s,U=L?.pendingTools.get(I.itemKey);if(L===void 0||U===void 0)return;R("item/commandExecution/outputDelta",{turnId:L.turnId,itemId:`tool:${I.itemKey}`,command:oC(U.toolName,U.input),stream:"stdout",delta:I.delta});return}case"command_output":{let L=P(),U={type:"commandExecution",id:`local:${I.itemKey}`,command:"Claude Code local command",aggregatedOutput:I.content,status:"completed"};O(L,U),R("item/completed",{turnId:L.turnId,item:U});return}case"usage":c=I.usage;return;case"rate_limit":return;case"permission_mode_changed":ce({wantPlan:I.permissionMode==="plan",signal:"permission_mode",permissionMode:I.permissionMode,uuid:I.uuid});return;case"agent_status":{let L=me();if(L===void 0){e.log("claude_pipeline.agent_status_without_turn",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,raw_provider_metadata:I.rawProviderMetadata});return}let U=h(I.rawProviderMetadata.workflow_event);if(U==="hook_blocked"||U==="hook_failed"){if(te+=1,te===W+1){ge(L,{itemKey:`status:hook-suppression:${L.turnId}`,title:hr.hookRowsSuppressed,body:void 0,severity:"warning",rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:"workflow",workflow_event:"hook_rows_suppressed",suppressed_after:W}});return}if(te>W){e.log("claude_pipeline.hook_stop_row_suppressed",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,visible_hook_stop_rows:te});return}}ge(L,{itemKey:I.itemKey,title:I.title,body:I.body,severity:I.severity,rawProviderMetadata:I.rawProviderMetadata});return}case"agent_task_update":{let L=me();if(L===void 0){e.log("claude_pipeline.agent_task_update_without_turn",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,raw_provider_metadata:I.rawProviderMetadata});return}let U={type:"agentTaskUpdate",id:I.itemKey,provider:"claude-code",state:I.state,title:I.title,...I.body===void 0?{}:{body:I.body},...I.progressLabel===void 0?{}:{progressLabel:I.progressLabel},rawProviderMetadata:I.rawProviderMetadata};O(L,U),R("item/completed",{turnId:L.turnId,item:U});return}case"unknown":e.log("claude_pipeline.unknown_event",{thread_key:e.threadKey,item_key:I.itemKey,summary:I.summary,raw_provider_metadata:I.rawProviderMetadata});{let L=s??(e.currentSourceSeq()===void 0?void 0:P());if(L===void 0)return;let U=
|
|
654
|
+
${vle}`:t}function yf(e){let n=QF(e);return Sle(n)?"Linzumi could not complete that runner action. Reconnect this computer if it keeps happening.":ZF(n)}function ZF(e){if(e.includes("daily_token_limit_exceeded")||e.includes("free Linzumi tokens"))return"You've used all of your free Linzumi tokens for today. Your free allowance resets at midnight UTC - check back then, or email support@linzumi.com if you need more.";if(e.includes("daily_cost_limit_exceeded")||e.includes("reached today's usage limit")||e.includes("daily capacity is reached"))return"You've reached your daily usage limit for model usage. It resets at midnight UTC - check back then, or email support@linzumi.com if you need more.";if(e==="phoenix join failed: workspace_not_found")return"Linzumi could not find this workspace. The command may be stale or copied from a different signup session. Return to setup and copy the latest command.";if(e==="phoenix join failed: unauthorized"||e==="phoenix join failed: forbidden")return"This connection command is no longer authorized. Return to setup and copy a fresh command.";if(e.includes("commander_version_too_old")){let n=e.replace(/^phoenix join failed:\s*/,"").replace(/^commander_version_too_old:?\s*/,"");return`This computer's Linzumi CLI is too old for this server. ${n===""?"Update with: npm install -g @linzumi/cli@latest":n}`}return e.startsWith("phoenix join failed:")?"Linzumi could not connect this computer. Return to setup and try again.":e.startsWith("phoenix push timed out after ")?"Linzumi did not receive a response from the server in time. Check your connection and retry.":e.startsWith("phoenix push failed:")||e==="phoenix push failed"?"Linzumi could not save the latest runner update. The connection may be stale; reconnect this computer if it does not recover.":e==="phoenix websocket closed"?"The connection to Linzumi was interrupted. Reconnecting...":e==="phoenix websocket is not open"||e==="phoenix client is not connected"?"This computer is not connected to Linzumi yet. Wait a moment, then retry.":e==="phoenix websocket reconnect failed"?"Linzumi could not reconnect this computer. Check your connection and run the connect command again.":e==="invalid Phoenix frame"?"Linzumi received an unexpected server message. Please reconnect this computer.":e.startsWith("phoenix rejoin failed for ")?"Linzumi could not restore this computer's session after reconnecting. Run the connect command again.":e.startsWith("phoenix rejoin returned invalid events for ")?"Linzumi could not restore recent messages after reconnecting. Run the connect command again.":e==="websocket open failed"?"Linzumi could not open a connection to the server. Check the URL and your network connection.":e==="Linzumi signup response was not valid JSON"?"Linzumi received an unexpected signup response. Try again in a moment.":e.startsWith("Linzumi signup request failed with HTTP ")?"Linzumi signup failed. Try again, or refresh the setup page and copy a fresh command.":e.startsWith("thread/start failed:")?"Codex could not start a new work session. Try again, or reconnect this computer.":e.startsWith("turn/start failed:")?"Codex could not start working on that message. Try again from the thread.":/^[a-z][a-z0-9_/-]* failed:/.test(e)?"Codex could not complete the requested action. Try again, or start a new task thread.":e}function Sle(e){return e.startsWith("phoenix ")||e==="invalid Phoenix frame"||e==="websocket open failed"}function QF(e){return e instanceof Error?e.message:String(e)}var vle,_c=F(()=>{"use strict";vle="If this continues happening, email support@linzumi.com and we'll try to get you through it."});import{createHash as bz,randomUUID as Vy}from"node:crypto";function Cle(){let e=process.env.LINZUMI_TYPING_HEARTBEAT_MS?.trim();if(e===void 0||e==="")return XF;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:XF}function Tle(){let e=process.env.LINZUMI_IDLE_STREAM_THRESHOLD_MS?.trim();if(e===void 0||e==="")return YF;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:YF}function Ple(){let e=process.env.LINZUMI_IDLE_STREAM_MODEL_WAIT_CAP_MS?.trim();if(e===void 0||e==="")return ez;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:ez}function wz(){let e=process.env.LINZUMI_IDLE_STREAM_KILL_GRACE_MS?.trim();if(e===void 0||e==="")return nz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:nz}function Ile(e,n){let r=`The model stream stalled - no data for ${Math.round(e/1e3)}s (the connection appears wedged).`;return n.resumable?`${r} Please retry to resume from the last streamed checkpoint.`:`${r} No response was produced; please retry.`}function Rle(){let e=process.env.LINZUMI_IDLE_STREAM_QUEUED_YIELD_CAP_MS?.trim();if(e===void 0||e==="")return tz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:tz}function Ele(e,n,t){let r=Math.round(e/1e3),o=n===1?"1 queued follow-up was waiting":`${n} queued follow-ups were waiting`,i=`The turn produced no stream output for ${r}s while ${o}, so it was interrupted to let the queued message(s) run.`;return t.resumable?`${i} Please retry to resume this turn from the last streamed checkpoint.`:`${i} No response was produced; please retry.`}function Dle(){let e=process.env.LINZUMI_STOP_HALT_CONFIRM_MS?.trim();if(e===void 0||e==="")return rz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>=0?n:rz}async function $le(e){let{currentTick:n,capMs:t,pollIntervalMs:r=Mle,quietWindowMs:o=Ale,sleep:i=Zs,now:s=Date.now}=e;if(t<=0)return!0;let a=Math.max(1,Math.min(o,t)),d=s(),u=d+t,c=n(),l=d;for(;;){let p=s();if(p-l>=a)return!0;if(p>=u)return!1;let m=Math.max(1,Math.min(r,a,u-p));await i(m);let f=n();f!==c&&(c=f,l=s())}}function iz(){let e=process.env.LINZUMI_STOP_STARTING_ACK_WAIT_MS?.trim();if(e===void 0||e==="")return oz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:oz}async function Lle(e){let{stillStarting:n,capMs:t,pollIntervalMs:r=Ole,sleep:o=Zs,now:i=Date.now}=e,s=i()+t;for(;;){if(!n())return!0;let a=s-i();if(a<=0)return!1;await o(Math.max(1,Math.min(r,a)))}}function Wy(){let e=process.env.LINZUMI_CODEX_START_REQUEST_TIMEOUT_MS?.trim();if(e===void 0||e==="")return sz;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:sz}function jle(){let e=process.env.LINZUMI_OUTBOX_MAX_INFLIGHT_PUSHES?.trim();if(e===void 0||e==="")return;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:void 0}function Fle(){return Wy()}function zle(e){return e instanceof Ny}function qle(e){return e instanceof Uy}function Mi(e,n,t=Wy()){return vz(e,n,t,(r,o)=>new Ny(r,o))}function Nle(e,n,t=Fle()){return vz(e,n,t,(r,o)=>new Uy(r,o))}function vz(e,n,t,r){return t>0?new Promise((o,i)=>{let s=setTimeout(()=>{i(r(e,t))},t);s.unref?.(),n.then(a=>{clearTimeout(s),o(a)},a=>{clearTimeout(s),i(a)})}):n}function Vle(e,n=Sz,t=Math.random){let r=Math.max(1,Math.floor(e))-1;if(r<n.length)return n[r]??xf.baseDelayMs;let o=n.length>0?n[n.length-1]??xf.baseDelayMs:xf.baseDelayMs,i=Math.max(o,xf.baseDelayMs),s=r-n.length,a=Math.min(xf.maxDelayMs,i*2**s),d=t(),u=Number.isFinite(d)?Math.min(Math.max(d,0),1):0;return Math.round(a*u)}async function kf(e){let n=e.options.channelSession,t=`chat:${n.workspaceSlug}:${n.channelSlug}`,r=dpe(0,n.rootSeq,n.kandanThreadId,n.codexThreadId,e.options),o=["channel-session",e.instanceId,az].join("-");az+=1;let i=await e.kandan.join(t,dz(e.options.runnerId,r,0),{registrationId:o,rejoinPayload:()=>{let l=Ope(r);return r.seenSeq=l,dz(e.options.runnerId,r,l)}}),s=Y(i.cursor)??0,a=_o(e.options.token),d=NO(e.options.codexBin,e.options.cwd);r.minSeq=s,r.seenSeq=s;let u={runnerIdentity:a,codexVersion:d},c={ready:!1,pending:[]};return e.codex.onRequest?.(l=>Wpe(e,r,u,l)),e.kandan.onDisconnect?.(()=>{r.closed||r.pipeline?.pause()}),e.kandan.onEvent((l,p,m)=>{if(r.closed||l!==t||p!=="event")return;let f=Dg(m);if(f!==void 0){if(!c.ready){c.pending.push(f);return}zz(e,r,a,f,u)}}),await lpe(e,r,u),r.pipeline=npe(e,r,u),e.codex.onClose?.(l=>{r.pipeline?.submitLifecycle("codexDied",l.message)}),await $pe(e,r,a,u,c),Tz(e,r,u),await Tr(e,r,u),{handleCodexNotification:(l,p)=>{if(l==="account/rateLimits/updated"){let x=kF(p);x!==r.rateLimitResetAtMs&&e.log("codex.rate_limit_reset_captured",{reset_at_ms:x??null,previous_reset_at_ms:r.rateLimitResetAtMs??null}),r.rateLimitResetAtMs=x}let m=Vz(p),f=Wz(p),y=m??afe(l,r,p,f);if(Hz(r,f,y)){if(r.streamEventTick+=1,Yle(e,r,l,p,y))return;Zle(r,l,p,y),Qle(e,r,y);let x=y??ad(r.turn);x!==void 0&&r.pipeline?.noteTurnActivity(x,l);let b=Sy(l,p);y!==void 0&&b!==void 0&&(r.turn.status==="starting"?Efe(r,y,b):Xz(e,r,y,b).catch(S=>{e.log("kandan.message_state_refresh_failed",{turn_id:y,reason:b,message:S instanceof Error?S.message:String(S)})})),spe(e,r,u,l,p,f,m,y)}},handleControl:l=>fpe(e,r,u,l),startThreadMessageTurn:l=>Fz(e,r,u,l),currentRuntimeSettings:()=>r.runtimeSettings,currentCodexThreadId:()=>r.codexThreadId,currentKandanThreadId:()=>r.kandanThreadId,pendingApprovalTurnIds:()=>[...new Set([...r.pendingApprovalRequests.values()].map(l=>l.turnId))],handleKandanReconnect:()=>kz(e,r,u),close:async()=>{r.closed=!0,e.kandan.unregisterJoin?.(t,o),r.portForwardWatcher?.close(),r.portForwardWatcher=void 0,Cz(r),Hy(r),wf(r);for(let l of r.rateLimitHoldTimers.values())clearTimeout(l);r.rateLimitHoldTimers.clear(),Qpe(r,new Error("runner closed")),r.pipeline!==void 0&&await r.pipeline.close(epe),await Di(e,r),jz(r)}}}async function kz(e,n,t,r="reconnect"){if(Cz(n),!n.closed){r==="reconnect"&&(n.reconnectRetryAttempts=0);try{await Hle(e,n,t),n.reconnectRetryAttempts=0}catch(o){n.reconnectRetryAttempts+=1;let i=Vle(n.reconnectRetryAttempts,e.options.reconnectHandlingRetryDelaysMs??Sz);e.log("kandan.reconnect_handling_failed",{attempt:n.reconnectRetryAttempts,retry_in_ms:i,message:o instanceof Error?o.message:String(o)}),n.reconnectRetryTimer=setTimeout(()=>{n.reconnectRetryTimer=void 0,kz(e,n,t,"retry")},i),n.reconnectRetryTimer.unref?.()}}}async function Hle(e,n,t){e.log("kandan.reconnected",{kandan_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,min_seq:n.minSeq}),n.pipeline?.resume(),await wc(e,n),n.kandanThreadId!==void 0&&n.turn.status!=="idle"&&(n.codexTypingActive&&Wk(e,n,n.kandanThreadId),await Yz(e,n)),await Tr(e,n,t)}function Cz(e){e.reconnectRetryTimer!==void 0&&(clearTimeout(e.reconnectRetryTimer),e.reconnectRetryTimer=void 0)}function Hy(e){e.idleStreamTimer!==void 0&&(clearTimeout(e.idleStreamTimer),e.idleStreamTimer=void 0),e.idleStreamGuardTurnId=void 0,e.idleStreamEventSeen=!1,e.idleStreamOpenLocalExecItemIds.clear(),e.idleStreamDeferralLogged=!1,e.idleStreamQuietSinceMs=void 0,e.idleStreamModelWaitDeferralLogged=!1}function wf(e,n){let t=e.idleStreamKillGrace;t===void 0||n!==void 0&&t.turnId!==n||(clearTimeout(t.timer),e.idleStreamKillGrace=void 0)}function Zle(e,n,t,r){let o=e.idleStreamGuardTurnId;if(o===void 0||n!=="item/started"&&n!=="item/completed"||r!==void 0&&r!==o)return;let i=A(t.item),s=i===void 0?void 0:h(i.id);if(s===void 0||s==="")return;if(n==="item/completed"){e.idleStreamOpenLocalExecItemIds.delete(s);return}if(r!==o)return;let a=h(i?.type);a!==void 0&&Gle.has(a)&&e.idleStreamOpenLocalExecItemIds.add(s)}function Fk(e,n,t){let r=Tle();if(!(r>0)||t===""){Hy(n);return}n.idleStreamGuardTurnId!==t&&(n.idleStreamGuardTurnId=t,n.idleStreamEventSeen=!1,n.idleStreamOpenLocalExecItemIds.clear(),n.idleStreamDeferralLogged=!1,n.idleStreamQuietSinceMs=Date.now(),n.idleStreamModelWaitDeferralLogged=!1),n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer),n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},r),n.idleStreamTimer.unref?.()}function Qle(e,n,t){let r=n.idleStreamGuardTurnId;r!==void 0&&(t!==void 0&&t!==r||(n.idleStreamEventSeen=!0,n.idleStreamDeferralLogged=!1,n.idleStreamQuietSinceMs=Date.now(),n.idleStreamModelWaitDeferralLogged=!1,Fk(e,n,r)))}function Mk(e,n,t,r){if(n.closed||n.idleStreamGuardTurnId!==t)return;let o=n.idleStreamOpenLocalExecItemIds.size>0,i=[...n.pendingApprovalRequests.values()].some(R=>R.turnId===t),s=Date.now(),a=n.idleStreamQuietSinceMs??s,d=Math.max(0,s-a),u=Yo(n.queue),c=Rle(),l=c<=0?0:Math.max(c,r),p=o&&!i&&u>0&&l>0&&d>=l;if((o||i)&&!p){if(n.idleStreamDeferralLogged||(n.idleStreamDeferralLogged=!0,e.log("codex.idle_stream_watchdog_deferred",{turn_id:t,idle_threshold_ms:r,waiting_on_local_exec:o,waiting_on_approval:i,open_local_exec_items:n.idleStreamOpenLocalExecItemIds.size,queued_follow_ups:u,quiet_ms:d})),o&&!i&&u>0&&l>0){n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer);let P=Math.max(1,Math.min(r,l-d));n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},P),n.idleStreamTimer.unref?.();return}Fk(e,n,t);return}let m=Ple(),f=m<=0||!n.idleStreamEventSeen?0:Math.max(m,r);if(!p&&d<f){n.idleStreamModelWaitDeferralLogged||(n.idleStreamModelWaitDeferralLogged=!0,e.log("codex.idle_stream_model_wait_deferred",{turn_id:t,idle_threshold_ms:r,quiet_ms:d,model_wait_cap_ms:f})),n.idleStreamTimer!==void 0&&clearTimeout(n.idleStreamTimer);let R=Math.max(1,Math.min(r,f-d));n.idleStreamTimer=setTimeout(()=>{Mk(e,n,t,r)},R),n.idleStreamTimer.unref?.();return}let y=n.idleStreamEventSeen,x=p?Ele(d,u,{resumable:y}):Ile(Math.max(d,r),{resumable:y}),b=!y&&!p,S=y&&!p,v=n.codexThreadId,w=wz();if(Hy(n),e.log("codex.idle_stream_timeout",{turn_id:t,idle_threshold_ms:r,quiet_ms:d,model_wait_cap_ms:f,kill_grace_ms:w,resumable:y,reason:x,queued_yield:p,queued_follow_ups:u}),v!==void 0&&Nk(e,v,t),w<=0){Jy(n,t,x,y,b,S);return}let k=setTimeout(()=>{Xle(e,n,t)},w);k.unref?.(),n.idleStreamKillGrace={turnId:t,timer:k,reason:x,resumable:y,preFirstByteStall:b,midStreamResumableStall:S}}function Jy(e,n,t,r,o,i){e.pipeline?.submitNotification("turn/failed",{turnId:n,reason:t,error:{message:t,code:"idle_stream_timeout"},...r?{retryable:!0}:{},...o?{preFirstByteStall:!0}:{},...i?{midStreamResumableStall:!0}:{}})}function Xle(e,n,t){let r=n.idleStreamKillGrace;n.closed||r===void 0||r.turnId!==t||(n.idleStreamKillGrace=void 0,e.log("codex.idle_stream_kill_grace_expired",{turn_id:t,kill_grace_ms:wz()}),Jy(n,t,r.reason,r.resumable,r.preFirstByteStall,r.midStreamResumableStall))}function Yle(e,n,t,r,o){let i=n.idleStreamKillGrace;if(i===void 0||o===void 0||o!==i.turnId)return!1;if(t==="turn/completed"){let s=h(A(r.turn)?.status);return s==="completed"?(wf(n,i.turnId),e.log("codex.idle_stream_kill_reconciled_completed",{turn_id:i.turnId,status:s}),!1):(wf(n,i.turnId),e.log("codex.idle_stream_kill_interrupt_ack",{turn_id:i.turnId,method:t,status:s??null}),Jy(n,i.turnId,i.reason,i.resumable,i.preFirstByteStall,i.midStreamResumableStall),!0)}return t==="turn/failed"||t==="turn/aborted"||t==="turn/canceled"||t==="turn/cancelled"?(wf(n,i.turnId),e.log("codex.idle_stream_kill_interrupt_ack",{turn_id:i.turnId,method:t,status:null}),Jy(n,i.turnId,i.reason,i.resumable,i.preFirstByteStall,i.midStreamResumableStall),!0):!1}function Cf(e,n,t){return[e.workspaceSlug,e.channelSlug,n??`instance:${t}`].join(":")}function zk(e,n){n.kandanThreadId!==void 0&&n.pipeline?.rebindThreadKey(Cf(e.options.channelSession,n.kandanThreadId,e.instanceId))}function npe(e,n,t){let r=e.options.channelSession,o=Cf(r,n.kandanThreadId,e.instanceId);return ly({instanceId:e.instanceId,threadKey:o,persistDir:e.options.pipelinePersistDir,push:(i,s,a,d)=>tpe(e,n,i,s,d),wire:()=>({workspaceSlug:r.workspaceSlug,channelSlug:r.channelSlug,kandanThreadId:n.kandanThreadId,codexThreadId:n.codexThreadId,rootSeq:n.rootSeq,leaseEpoch:n.kandanThreadId===void 0?void 0:e.leaseEpochFor?.(n.kandanThreadId)}),runnerPayload:(i,s,a,d)=>td(e.options,e.instanceId,i,s,t,a,d,ffe(n,a)),runtimeMetadataForSourceSeq:i=>{let s=mfe(n,i);return s===void 0?void 0:hfe(s)},sourceSeqForTurn:i=>pfe(n,i),autoRetryAttemptsForSeq:i=>n.emptyTurnRetry.get(i)?.attempts??0,midStreamResumeAttemptAtMsForSeq:i=>n.midStreamResumeAttempts.get(i),ladderHistoryForSeq:(i,s)=>bo(s)?hc(n.fateLadderRuns.get(i),s):void 0,linzumiAgentSession:r.linzumiAgentSession===!0,isRecoveredTurn:i=>n.recoveredTurnIds.has(i),resolveSnapshot:i=>ope(e,n,i),onTurnTerminal:(i,s,a,d,u,c)=>Ak(e,n,t,i,s,a,d,void 0,u,c),log:(i,s)=>{e.log(i,s)},outboxRetryDelaysMs:e.options.pipelineOutboxRetryDelaysMs,outboxMaxInFlightPushes:jle(),snapshotRetryDelaysMs:e.options.pipelineSnapshotRetryDelaysMs,statsIntervalMs:e.options.pipelineStatsIntervalMs,turnStalledThresholdMs:e.options.pipelineTurnStalledThresholdMs,turnWaitStates:()=>[...n.pendingApprovalRequests.values()].map(i=>({turnId:i.turnId,kind:"approval"}))})}async function tpe(e,n,t,r,o){let i=await rpe(e,t,r);try{return await so(e.kandan,e.topic,t,i,o)}catch(s){throw py(s)&&n.pipeline?.pause(),s}}async function rpe(e,n,t){let r=e.options.channelSession;return Og({kandan:e.kandan,topic:e.topic,workspace:r.workspaceSlug,channel:r.channelSlug,cwd:e.options.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,log:(o,i)=>e.log(o,i)},n,t)}async function ope(e,n,t){let r=n.codexThreadId;if(r===void 0)throw new Error("cannot resolve a completion snapshot without a bound Codex thread");let o;try{o=await Nle("thread/read",e.codex.request("thread/read",{threadId:r,includeTurns:!0}))}catch(d){if(qle(d)&&n.recoveredTurnIds.has(t))return e.log("pipeline.snapshot_skipped_for_recovered_turn",{codex_thread_id:r,turn_id:t,message:d instanceof Error?d.message:String(d)}),{items:[]};throw d}if("error"in o)throw new Error(`thread/read failed: ${o.error.message}`);let i=qS(qj(o,t)),s=[];try{s=qS(RL({codexThreadId:r,turnId:t}))}catch(d){e.log("codex.session_log_read_failed",{codex_thread_id:r,turn_id:t,message:d instanceof Error?d.message:String(d)})}let a=Nj(i,s);return e.log("pipeline.snapshot_resolved",{turn_id:t,item_count:a.length,thread_read_item_count:i.length,session_log_item_count:s.length}),{items:[...a]}}function ipe(e,n,t,r){if(!tf())return;let o=e.harnessActivity,i=c=>typeof c=="number"&&Number.isFinite(c)?c:void 0;if(n==="turn/started"){let c=t.turn,l=Z(c)?h(c.id):void 0;l!==void 0&&o.turns.push({turnId:l,items:[]});return}if(n!=="item/completed")return;let s=t.item;if(!Z(s))return;let a=h(t.turnId)??r,d=o.turns.at(-1),u=d!==void 0&&(a===void 0||d.turnId===a)?d:o.turns.find(c=>c.turnId===a);if(u===void 0){if(a===void 0)return;o.turns.push({turnId:a,items:[{item:s,completedAtMs:i(t.completedAtMs)}]})}else u.items.push({item:s,completedAtMs:i(t.completedAtMs)});for(o.itemCount+=1;o.itemCount>kle&&o.turns.length>1;){let c=o.turns.shift();o.itemCount-=c?.items.length??0,o.truncated=!0}}function spe(e,n,t,r,o,i,s,a){let d=n.pipeline;if(d!==void 0)switch(ipe(n,r,o,a),r){case"turn/started":i!==void 0&&s!==void 0&&dfe(e,n,i,s),d.submitNotification(r,o);return;case"turn/completed":{s!==void 0&&gz(n,i,s);let u=s??ofe(e,n,i);switch(n.turn.status){case"starting":Cfe(n,u);break;case"idle":case"active":case"completing":Zz(e,n,t,u);break}d.submitNotification(r,s===void 0&&u!==void 0?{...o,turnId:u}:o);return}case"turn/aborted":case"turn/canceled":case"turn/cancelled":case"turn/failed":s!==void 0&&gz(n,i,s),d.submitNotification(r,o);return;case"turn/plan/updated":d.submitNotification(r,o);return;case"item/completed":{if(d.submitNotification(r,Pk(o,s,a)),a!==void 0){let u=Ype(e,n,a,o,t);cfe(n,a,u),u.catch(c=>{e.log("codex.tui_input_mirror_failed",{turn_id:a,message:c instanceof Error?c.message:String(c)})}).finally(()=>lfe(n,a))}return}case"error":{let u=lS(r,o);d.submitNotification(r,Pk(u===void 0?o:{...o,...qg(r,o)},s,a));return}case"item/agentMessage/delta":case"item/reasoning/textDelta":case"item/commandExecution/outputDelta":case"command/exec/outputDelta":case"item/fileChange/outputDelta":case"item/commandExecution/terminalInteraction":case"item/started":case"response_item":if(r==="item/started"){let u=h(A(o.item)?.command);u!==void 0&&hy(qk(e,n),u)}d.submitNotification(r,Pk(o,s,a));return;default:return}}function qk(e,n){return n.kandanThreadId??e.topic}function Pk(e,n,t){return n!==void 0||t===void 0?e:{...e,turnId:t}}function Ak(e,n,t,r,o,i,s,a,d,u){n.idleStreamGuardTurnId===r&&Hy(n),wf(n,r);let c=fc(n.turn,r)??uF(n.turn,r),l=Xy(n,r);c!==void 0&&(n.turn={status:"completing",turnId:r,queuedSeq:c});let p=c!==void 0?n.emptyTurnRetry.get(c)?.attempts??0:0,m=bo(u)?u:s===!0||d===!0?"transient_upstream":void 0,f=c!==void 0&&hz(n,c),y=o==="failed"&&c!==void 0&&f&&(s===!0||d===!0&&!n.midStreamResumeAttempts.has(c)),x=Ky(e),b=o==="failed"&&c!==void 0&&f,S=b&&!x,v=b&&x&&e.options.rebuildOnDeadCodexWorker!==void 0,w=e.options.crossHarnessFailover,k=c!==void 0?n.emptyTurnRetry.get(c)?.message:void 0,R=tf()&&w!==void 0&&o==="failed"&&c!==void 0&&x&&k!==void 0&&n.kandanThreadId!==void 0,P=R?{sourceHarness:"codex",targetHarness:w.targetHarness,model:n.runtimeSettings.model??e.options.channelSession.model}:void 0,O=o==="failed"&&c!==void 0&&m!==void 0?dk({fate:m,run:n.fateLadderRuns.get(c),nowMs:Date.now(),budgets:Ty(),breaker:e.options.fleetBreakerRecoveryGate??ek,grants:{inPlaceResume:y,redispatch:S,workerRebuild:v,crossHarnessFailover:R},rateLimitResetAtMs:n.rateLimitResetAtMs,failover:P}):void 0;if(O!==void 0&&O.kind!=="stand"&&c!==void 0&&(n.fateLadderRuns.set(c,O.run),ps(n.fateLadderRuns,_f),e.log("codex.fate_ladder_step",{turn_id:r,queued_seq:c,fate:m??null,decision:O.kind,...O.kind==="execute_rung"?{rung:O.rung}:{},...O.kind==="red"?{cause:O.cause}:{},...O.kind==="hold_until_reset"?{reset_at_ms:O.resetAtMs}:{},...O.kind==="breaker_hold"?{hold_reason:O.reason}:{},recovery_rungs_attempted:O.run.recoveryRungsAttempted,history_truncated:O.run.historyTruncated,reason:i??null})),o==="completed"&&c!==void 0){n.fateLadderRuns.delete(c);let W=n.rateLimitHoldTimers.get(c);W!==void 0&&(clearTimeout(W),n.rateLimitHoldTimers.delete(c))}let E=O?.kind==="execute_rung"?O.rung:void 0,j=O?.kind==="breaker_hold";j&&c!==void 0&&e.log("codex.fleet_breaker_recovery_hold",{turn_id:r,queued_seq:c,hold_reason:O?.kind==="breaker_hold"?O.reason:null,recovery:s===!0?"empty_turn_retry":d===!0?"mid_stream_resume":m==="transient_local"?"local_redispatch":"rate_limit_hold_dispatch",attempts_burned:p,max_attempts:wo,reason:i??null});let z=E==="in_place_resume"&&s===!0&&c!==void 0?zy(n,c):void 0,M=E==="in_place_resume"&&d===!0&&z===void 0&&c!==void 0&&!n.midStreamResumeAttempts.has(c)?zy(n,c):void 0,J=(E==="redispatch"||E==="worker_rebuild")&&c!==void 0?zy(n,c):void 0,K=E==="cross_harness_failover"&&c!==void 0?k:void 0;K!==void 0&&c!==void 0&&n.emptyTurnRetry.delete(c),M!==void 0&&c!==void 0?(n.midStreamResumeAttempts.set(c,Date.now()),ps(n.midStreamResumeAttempts,_f)):!j&&o==="failed"&&d===!0&&c!==void 0&&e.log("codex.mid_stream_stall_resume_refused",{turn_id:r,queued_seq:c,cause:n.midStreamResumeAttempts.has(c)?"already_attempted":p>=wo?"shared_budget_exhausted":"no_retained_candidate",attempts_burned:p,max_attempts:wo,reason:i??null}),!j&&z===void 0&&M===void 0&&J===void 0&&K===void 0&&O?.kind!=="hold_until_reset"&&c!==void 0&&n.emptyTurnRetry.delete(c);let G=o==="failed"&&s===!0&&z===void 0&&c!==void 0;!j&&G&&p>0&&e.log("codex.auto_retry_budget_exhausted_terminal",{turn_id:r,queued_seq:c??null,attempts_burned:p,max_attempts:wo,reason:i??null}),(async()=>{try{await n.pipeline?.flushOutbox()}catch(te){e.log("pipeline.turn_terminal_flush_failed",{turn_id:r,message:te instanceof Error?te.message:String(te)})}if(j&&c!==void 0){let te=e.options.fleetBreakerHoldPollMs??5e3,me=e.options.fleetBreakerMaxHoldMs??30*6e4,ge=Date.now(),ce=m??"transient_upstream",Ie=e.options.fleetBreakerRecoveryGate??ek;n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:oF},void 0,void 0,n.codexThreadId);let Re="exhausted",I="proceed";for(;Date.now()-ge<me;){if(await Zs(te),n.turn.status!=="completing"||n.turn.turnId!==r){Re="superseded";break}let L=Ie(ce);if(L.action!=="hold"){I=L.action,Re="released";break}}if(Re==="superseded"){e.log("codex.fleet_breaker_hold_superseded",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge});return}if(Re==="released"){let L=hz(n,c),U=Ky(e),ie=!1,se=(Te,ae)=>ie?Ie(Te,ae):(ie=!0,{action:I}),Q=dk({fate:ce,run:n.fateLadderRuns.get(c),nowMs:Date.now(),budgets:Ty(),breaker:se,grants:{inPlaceResume:L&&(s===!0||d===!0&&!n.midStreamResumeAttempts.has(c)),redispatch:L&&!U,workerRebuild:L&&U&&e.options.rebuildOnDeadCodexWorker!==void 0},rateLimitResetAtMs:n.rateLimitResetAtMs});Q.kind!=="stand"&&(n.fateLadderRuns.set(c,Q.run),ps(n.fateLadderRuns,_f));let _e=Q.kind==="execute_rung"?zy(n,c):void 0;if(Q.kind==="execute_rung"&&_e!==void 0){let Te=Q.rung,ae=Te==="in_place_resume"?s===!0?"empty_turn_retry":"mid_stream_resume":Te;ae==="mid_stream_resume"&&(n.midStreamResumeAttempts.set(c,Date.now()),ps(n.midStreamResumeAttempts,_f)),e.log("codex.fleet_breaker_recovery_resumed",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge,recovery:ae,attempt:_e.attempts,max_attempts:wo,reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:ae==="mid_stream_resume"?ZS:Te==="worker_rebuild"?lk:Te==="redispatch"?ck:"retrying empty turn"},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),mc(n.queue,_e.message),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),await Tr(e,n,t);return}}e.log("codex.fleet_breaker_hold_exhausted",{turn_id:r,queued_seq:c,held_ms:Date.now()-ge,outcome:Re,reason:i??null}),n.emptyTurnRetry.delete(c),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"failed",reason:`${i??"codex_turn_failed"} [recovery was held ${Math.round((Date.now()-ge)/6e4)}m during a fleet-wide upstream outage; retry budget preserved]`,retryable:!0,fate:ce,ladder:hc(n.fateLadderRuns.get(c),ce)},void 0,void 0,n.codexThreadId)}if(O?.kind==="hold_until_reset"&&c!==void 0){e.log("codex.fate_ladder_rate_limit_hold",{turn_id:r,queued_seq:c,reset_at_ms:O.resetAtMs,hold_ms:Math.max(0,O.resetAtMs-Date.now()),reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:SF(O.resetAtMs)},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),ape(e,n,t,c,O.resetAtMs);return}if(E==="cross_harness_failover"&&c!==void 0&&K!==void 0&&P!==void 0&&w!==void 0&&n.kandanThreadId!==void 0){let te=n.kandanThreadId;e.log("codex.fate_ladder_cross_harness_failover",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,journal_turns:n.harnessActivity.turns.length,journal_items:n.harnessActivity.itemCount,journal_truncated:n.harnessActivity.truncated,reason:i??null}),await Gn(e,te,c,{status:"processing",reason:vF},void 0,void 0,n.codexThreadId);let me;try{me=await w.execute({kandanThreadId:te,codexThreadId:n.codexThreadId,queuedSeq:c,message:K,model:P.model,activity:n.harnessActivity,failureReason:i})}catch(ce){me={ok:!1,failure:ce instanceof Error?ce.message:String(ce)}}let ge=n.fateLadderRuns.get(c);if(me.ok){ge!==void 0&&n.fateLadderRuns.set(c,uk(ge,{outcome:"failover_dispatched",atMs:Date.now(),failover:{...P,transpiledItemCount:me.transpiledItemCount,redactedReasoningCount:me.redactedReasoningCount},detail:n.harnessActivity.truncated?"journal truncated: only the retained tail crossed":void 0})),e.log("codex.fate_ladder_cross_harness_failover_dispatched",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,target_session_id:me.targetSessionId,transpiled_item_count:me.transpiledItemCount,redacted_reasoning_count:me.redactedReasoningCount}),pd(n,r),Ei(n,r),Ri(n,r),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"});return}ge!==void 0&&n.fateLadderRuns.set(c,uk(ge,{outcome:"failover_failed",atMs:Date.now(),failover:P,detail:me.failure})),e.log("codex.fate_ladder_cross_harness_failover_failed",{turn_id:r,queued_seq:c,source_harness:P.sourceHarness,target_harness:P.targetHarness,model:P.model??null,failure:me.failure,reason:i??null}),await Gn(e,te,c,{status:"failed",reason:`${i??"codex_turn_failed"} [cross-harness failover to ${P.targetHarness} failed: ${me.failure}]`,retryable:!0,fate:"transient_local",ladder:hc(n.fateLadderRuns.get(c),"transient_local")},void 0,void 0,n.codexThreadId)}z===void 0&&M===void 0&&J===void 0&&n.kandanThreadId!==void 0&&await gy({threadKey:qk(e,n),workspace:e.options.channelSession.workspaceSlug,channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,push:(te,me)=>e.kandan.push(e.topic,te,me),log:(te,me)=>e.log(te,me)});let W=z??M??J;if(W!==void 0&&c!==void 0){M!==void 0?e.log("codex.mid_stream_stall_auto_resume",{turn_id:r,queued_seq:c,attempt_at_ms:n.midStreamResumeAttempts.get(c)??null,shared_budget_attempt:M.attempts,max_attempts:wo,reason:i??null}):J!==void 0?e.log("codex.fate_ladder_local_redispatch",{turn_id:r,queued_seq:c,rung:E??null,shared_budget_attempt:J.attempts,max_attempts:wo,reason:i??null}):e.log("codex.empty_turn_auto_retry",{turn_id:r,queued_seq:c,attempt:W.attempts,max_attempts:wo,reason:i??null}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,c,{status:"processing",reason:M!==void 0?ZS:E==="worker_rebuild"?lk:E==="redispatch"?ck:"retrying empty turn"},void 0,void 0,n.codexThreadId),pd(n,r),Ei(n,r),Ri(n,r),mc(n.queue,W.message),lz>0&&await Zs(lz),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),await Tr(e,n,t);return}if(c!==void 0&&n.kandanThreadId!==void 0){let te=o==="completed"?{status:"processed"}:{status:"failed",reason:i??"codex_turn_failed",...G?{retryable:!0,fate:"transient_upstream"}:{},...m!==void 0?{fate:m,ladder:hc(n.fateLadderRuns.get(c),m)}:{}};if(a===!0){for(let[ge,ce]of[...n.undeliveredCloudTerminals].sort((Ie,Re)=>Ie[0]-Re[0]))await xz(e,n.kandanThreadId,ge,ce,n.codexThreadId)&&(n.undeliveredCloudTerminals.delete(ge),e.log("codex.cloud_terminal_state_gap_redelivered",{turn_id:r,source_seq:ge,status:ce.status}));for(let ge of ld(n,c))await xz(e,n.kandanThreadId,ge,te,n.codexThreadId)?n.undeliveredCloudTerminals.delete(ge):(n.undeliveredCloudTerminals.set(ge,te),e.log("codex.cloud_terminal_state_unacked_watermark_held",{turn_id:r,queued_seq:c,source_seq:ge,status:te.status,outcome:o,gap_floor:Math.min(...n.undeliveredCloudTerminals.keys())}))}let me=n.undeliveredCloudTerminals.size===0?void 0:Math.min(...n.undeliveredCloudTerminals.keys());if(o==="completed"){let ge=new Set(ld(n,c));ge.add(c);for(let ce of ge){if(me!==void 0&&ce>=me){e.log("codex.cloud_source_seq_commit_held_below_gap",{turn_id:r,source_seq:ce,gap_floor:me});continue}e.options.onLiveSourceSeqAccepted?.({channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,sourceSeq:ce})}}{let ge=new Set(ld(n,c));ge.add(c);for(let ce of ge)e.options.onLiveSourceSeqSettled?.({channel:e.options.channelSession.channelSlug,threadId:n.kandanThreadId,sourceSeq:ce})}if(a!==!0)for(let ge of ld(n,c))ge!==c&&await Gn(e,n.kandanThreadId,ge,te,void 0,void 0,n.codexThreadId);n.fusedQueuedSeqs.delete(c),fd(n,c)}Ei(n,r),Ri(n,r),(c!==void 0||l)&&(await Pfe(n,r),await Di(e,n)),(n.turn.status==="completing"||n.turn.status==="active")&&n.turn.turnId===r&&(n.turn={status:"idle"}),e.log("pipeline.turn_terminal",{turn_id:r,outcome:o,reason:i??null,queued_seq:c??null}),await Tr(e,n,t)})().catch(W=>{e.log("pipeline.turn_terminal_handling_failed",{turn_id:r,message:W instanceof Error?W.message:String(W)})})}function ape(e,n,t,r,o){if(n.rateLimitHoldTimers.has(r))return;let i=Math.max(0,o-Date.now()),s=setTimeout(()=>{n.rateLimitHoldTimers.delete(r),(async()=>{if(n.closed)return;let a=n.fateLadderRuns.get(r);if(a!==void 0){if(a.holdDispatched)return;n.fateLadderRuns.set(r,wF(a,Date.now()))}let d=n.emptyTurnRetry.get(r);if(d===void 0){e.log("codex.fate_ladder_hold_dispatch_candidate_missing",{queued_seq:r,reset_at_ms:o}),n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,r,{status:"failed",reason:"The rate-limit hold ended, but the held message was no longer available to send automatically. Please resend your last message.",fate:"rate_limited",ladder:hc(n.fateLadderRuns.get(r),"rate_limited")},void 0,void 0,n.codexThreadId);return}e.log("codex.fate_ladder_hold_dispatch",{queued_seq:r,reset_at_ms:o}),n.emptyTurnRetry.delete(r),mc(n.queue,d.message),await Tr(e,n,t)})().catch(a=>{e.log("codex.fate_ladder_hold_dispatch_failed",{queued_seq:r,message:a instanceof Error?a.message:String(a)})})},i);s.unref?.(),n.rateLimitHoldTimers.set(r,s)}function dz(e,n,t){let r={last_seq:t};return n.kandanThreadId===void 0?r:{...r,runner_id:e,thread_id:n.kandanThreadId}}async function wc(e,n){if(n.codexThreadId===void 0)return;let t=e.options.channelSession;await so(e.kandan,e.topic,"session:bind",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId,instance_id:e.instanceId})}function dpe(e,n,t,r,o){return{pipeline:void 0,rootSeq:n,kandanThreadId:t,kandanThreadTitle:void 0,codexThreadId:r,turn:{status:"idle"},closed:!1,minSeq:e,seenSeq:e,failedSeqs:new Map,drainInFlight:!1,drainRequested:!1,deadWorkerRebuildAttempts:0,emptyTurnRetry:new Map,midStreamResumeAttempts:new Map,fateLadderRuns:new Map,harnessActivity:{turns:[],itemCount:0,truncated:!1},rateLimitHoldTimers:new Map,rateLimitResetAtMs:void 0,threadRebindAttempts:new Map,boundStartTimeout:!1,undeliveredCloudTerminals:new Map,fusedQueuedSeqs:new Map,reconnectRetryTimer:void 0,reconnectRetryAttempts:0,queue:fF(),forwardedTurnIds:new Set,recoveredTurnIds:new Set,stopAbortedStartingSeqs:new Set,pendingInterruptedThreadOnlyCompletions:[],claimedKandanMessageKeys:new Set,steeredKandanMessageSeqs:new Set,localTuiTurnIds:new Set,pendingStartingCompletionTurnIds:new Set,mirroredTuiInputProjections:rf(So),pendingTuiInputMirrors:new Map,turnReplyTargets:rf(So),turnRuntimeSettingsBySourceSeq:rf(So),localTuiTurnRuntimeSettingsByTurnId:rf(So),pendingApprovalRequests:new Map,approvalPromptChain:Promise.resolve(),approvedThreadInteractionRequesters:new Set,pendingPortForwardRequests:new Map,portForwardPreviousProcessingStates:new Map,queuedPortForwardCandidates:new Map,approvedForwardPorts:new Set,approvedForwardTargets:new Map,dismissedForwardTargets:new Map,portForwardWatcher:void 0,activeProcessingState:void 0,pendingStartingProcessingReasons:[],pendingReconnectContextInjection:void 0,linzumiContext:Ks(o.channelSession.linzumiContext),typingHeartbeat:void 0,typingHeartbeatInFlight:!1,codexTypingActive:!1,pendingCompletionTypingStops:new Map,runtimeSettings:Mfe(o),pendingRuntimeSettingsResume:!1,runtimeSettingsGeneration:0,runtimeSettingsResumeChain:Promise.resolve(),streamEventTick:0,idleStreamTimer:void 0,idleStreamGuardTurnId:void 0,idleStreamEventSeen:!1,idleStreamOpenLocalExecItemIds:new Set,idleStreamDeferralLogged:!1,idleStreamQuietSinceMs:void 0,idleStreamModelWaitDeferralLogged:!1,idleStreamKillGrace:void 0}}async function upe(e,n,t,r){cpe(e,n,r),await Cpe(e,n,t,r),await kpe(e,n,r)}function cpe(e,n,t){let r=n.queuedPortForwardCandidates.get(t.port);r===void 0||!zr(r,t)||(n.queuedPortForwardCandidates.delete(t.port),e.log("port_forward.queued_request_dropped",{port:t.port,pid:t.pid,reason:"listener_exited"}))}function Tz(e,n,t){if(e.options.enablePortForwardWatch!==!0||n.portForwardWatcher!==void 0||n.kandanThreadId===void 0||n.codexThreadId===void 0)return;let{start:r,...o}=e.options.portForwardWatcher??{};if(r===void 0&&o.rootPid===void 0){e.log("port_forward.watch_skipped",{reason:"worker_pid_missing"});return}let i=r??yc;for(let s of e.options.initialForwardPorts??[])n.approvedForwardPorts.add(s);n.portForwardWatcher=i({...o,watchPorts:[...o.watchPorts??[],...e.options.initialForwardPorts??[]],extraWatchPorts:o.extraWatchPorts??Ay(ud(e.options.runnerId)),onCandidate:s=>Bk(e,n,t,s),onCandidateLost:s=>upe(e,n,t,s),onListenersObserved:s=>_g(`channel-session:${n.kandanThreadId??e.instanceId}`,s.filter(a=>a.portKind!=="commander_bound")),onError:s=>e.log("port_forward.watch_failed",{message:s.message})})}async function lpe(e,n,t){let r=e.options.channelSession,o=t.codexVersion;if(n.kandanThreadId===void 0){n.codexThreadId=await jk(e.codex,e.options);let i=await so(e.kandan,e.topic,"session:announce",{workspace:r.workspaceSlug,channel:r.channelSlug,body:jO(e.options,o,n.codexThreadId),payload:td(e.options,e.instanceId,"availability",n.codexThreadId,t),client_message_id:`local-codex-root-${e.instanceId}`});n.rootSeq=Y(i.seq),n.rootSeq!==void 0&&(n.minSeq=Math.max(n.minSeq,n.rootSeq))}else if(r.startCodexThread===!0)n.codexThreadId=await jk(e.codex,e.options),await cz(e,n),await wc(e,n);else if(n.codexThreadId!==void 0)await cz(e,n),await wc(e,n);else{let i=await so(e.kandan,e.topic,"session:resolve_thread_session",{workspace:r.workspaceSlug,channel:r.channelSlug,thread_id:n.kandanThreadId});if(n.rootSeq=Y(i.seq),n.codexThreadId=h(i.codex_thread_id),Gy(n,Oz(i.message)),n.codexThreadId===void 0)throw new Error("Kandan thread root metadata did not include a Codex thread id");await wc(e,n)}}async function ppe(e,n,t){if(n.turn.status!=="completing")return;let{turnId:r,queuedSeq:o}=n.turn;n.turn={status:"idle"},fd(n,o),Ei(n,r),Yy(n,r),Ri(n,r),await Di(e,n),n.kandanThreadId!==void 0&&await Tf(e,n,n.kandanThreadId,o,{status:"processed"}),e.log("codex.completing_turn_recovered",{turn_id:r,queued_seq:o,reason:t})}async function Pz(e,n,t,r,o){Nk(e,t,r),n.turn={status:"idle"},fd(n,o),Ei(n,r),Yy(n,r),n.pendingInterruptedThreadOnlyCompletions.push({threadId:t,interruptedTurnId:r,interruptedQueuedSeq:o}),Sfe(n.pendingInterruptedThreadOnlyCompletions,So),Ri(n,r),pd(n,r),Qy(n,r,new Error("Codex turn interrupted")),n.kandanThreadId!==void 0&&await Tf(e,n,n.kandanThreadId,o,{status:"processed"},void 0,void 0,n.codexThreadId),await Di(e,n)}function Nk(e,n,t){e.codex.request("turn/interrupt",{threadId:n,turnId:t}).catch(r=>{e.log("codex.turn_interrupt_failed",{thread_id:n,turn_id:t,message:r instanceof Error?r.message:String(r)})})}async function fpe(e,n,t,r){if(r.type==="update_session_settings")return xpe(e,n,t,r);if(r.type==="resolve_codex_approval_request")return wpe(e,n,r);if(r.type==="resolve_port_forward_request")return Ez(e,n,t,r);if(r.type==="update_thread_interaction_access")return gpe(e,n,r);if(r.type==="stop_turn")return hpe(e,n,t,r);if(r.type==="steer_turn")return mpe(e,n,t,r);if(r.type!=="interrupt_queued_messages"||n.codexThreadId!==r.threadId)return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let o=gF(n.queue,r.throughSeq),i=tk(n.turn),s=n.turn.status==="completing"?n.turn.queuedSeq:void 0,a=Ik(r.throughSeq,i)||Ik(r.throughSeq,s);if(!o.ok&&!a)return{instanceId:e.instanceId,ok:!1,error:"queue_empty"};switch(n.turn.status){case"active":await Pz(e,n,n.codexThreadId,n.turn.turnId,n.turn.queuedSeq);break;case"starting":n.turn=dF(n.turn);break;case"completing":Ik(r.throughSeq,n.turn.queuedSeq)&&await ppe(e,n,"interrupt requested");break;case"idle":break}if(e.log("codex.queued_messages_interrupted",{through_seq:r.throughSeq??null,selected_count:o.ok?o.selectedCount:0,remaining_count:o.ok?o.remainingCount:Yo(n.queue)}),o.ok)for(let d of o.selectedSeqs)await Gn(e,n.kandanThreadId,d,{status:"processing",reason:"interrupt requested"},void 0,void 0,n.codexThreadId);return await Tr(e,n,t),{instanceId:e.instanceId,ok:!0,interruptedQueuedMessages:o.ok?o.selectedCount:0}}async function mpe(e,n,t,r){if(r.agentProvider==="claude-code"||!(n.kandanThreadId!==void 0&&n.kandanThreadId===r.threadId||r.providerSessionKey!==void 0&&n.codexThreadId===r.providerSessionKey||n.codexThreadId!==void 0&&n.codexThreadId===r.threadId))return;let i=Y(r.sourceSeq);if(i===void 0)return;if(n.kandanThreadId===void 0||n.codexThreadId===void 0)return{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",ok:!1,error:"thread_not_bound"};let s=n.kandanThreadId,a=nf(n.queue,i);if(!(!a&&Zy(e,n,s,i)))return n.steeredKandanMessageSeqs.has(i)&&await Gn(e,s,i,{status:"processed",reason:Yp},void 0,void 0,n.codexThreadId),e.log("kandan.steer_duplicate_ignored",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,reason:a?"seq_already_pending_in_queue":"duplicate_message_claim",previously_steered:n.steeredKandanMessageSeqs.has(i)}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,duplicate:!0};let u=Qo(r.attachments??[]),c=r.workDescription??_y(r.input),l=async x=>{let b=c??"";return b.trim()===""&&u.length===0?(Mpe(e,n,s,i),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,ok:!1,error:"steer_missing_message_body"}):(e.log("kandan.steer_parked_as_own_turn",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId??null,reason:x,turn_status:n.turn.status}),await Fz(e,n,t,{seq:i,body:b,attachments:u,parkReason:x}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,steered:"queued_fallback",reason:x})};if(u.length>0)return l("attachments_require_own_turn");let p=n.turn.status==="active"?n.turn.turnId:void 0;if(p===void 0)return l(`turn_not_steerable_${n.turn.status}`);let m=xy(r.input);if(m.length===0)return l("steer_input_empty");let f,y=Symbol("codex_steer_timeout");try{let x=await Promise.race([e.codex.request("turn/steer",{threadId:n.codexThreadId,expectedTurnId:p,input:m}),new Promise(b=>{f=setTimeout(()=>b(y),uz),f.unref?.()})]);if(x===y)return e.log("codex.steer_unconfirmed",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,timeout_ms:uz}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,ok:!1,error:"codex_steer_unconfirmed",message:"The engine did not confirm the steering message in time. It was not re-queued to avoid a duplicate; Linzumi will drive it to a visible outcome."};if("error"in x)return e.log("codex.steer_rejected",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,message:x.error.message}),l("engine_rejected_steer")}catch(x){return e.log("codex.steer_rejected",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p,message:x instanceof Error?x.message:String(x)}),l("engine_rejected_steer")}finally{f!==void 0&&clearTimeout(f)}if(n.steeredKandanMessageSeqs.add(i),n.steeredKandanMessageSeqs.size>By){let x=n.steeredKandanMessageSeqs.size-By;for(let b of Array.from(n.steeredKandanMessageSeqs).slice(0,x))n.steeredKandanMessageSeqs.delete(b)}return await Gn(e,s,i,{status:"processed",reason:Yp},void 0,void 0,n.codexThreadId),e.log("codex.steer_applied",{seq:i,linzumi_thread_id:s,codex_thread_id:n.codexThreadId,turn_id:p}),{instanceId:e.instanceId,controlType:r.type,agentProvider:"codex",threadId:r.threadId,steered:"steered_live"}}async function hpe(e,n,t,r){if(!(n.kandanThreadId!==void 0&&n.kandanThreadId===r.threadId||r.providerSessionKey!==void 0&&n.codexThreadId===r.providerSessionKey||n.codexThreadId!==void 0&&n.codexThreadId===r.threadId))return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let i=n.codexThreadId,s=n.kandanThreadId,a;if(n.turn.status==="starting"){let w=n.turn.queuedSeq;await Lle({stillStarting:()=>n.turn.status==="starting"&&n.turn.queuedSeq===w,capMs:iz()})||(a=w,wfe(n,w))}let d=a===void 0?[]:ld(n,a),u=n.turn,c=ad(u)??r.turnId,l=tk(u)??(u.status==="completing"?u.queuedSeq:void 0),p=u.status!=="idle"||Yo(n.queue)>0;c!==void 0&&Qy(n,c,new Error("stopped by user"));let m=!1;if(a!==void 0)e.log("codex.stop_turn_start_abort",{harness_session_id:i,kandan_thread_id:s,queued_seq:a,start_ack_wait_ms:iz()});else try{await e.codex.request("turn/interrupt",{threadId:i,turnId:c??null}),m=!0}catch(w){e.log("codex.stop_turn_interrupt_failed",{harness_session_id:i,turn_id:c??null,message:w instanceof Error?w.message:String(w)})}let f=Dle(),y=!p||f<=0||await $le({currentTick:()=>n.streamEventTick,capMs:f}),x=!1;if((!y||a!==void 0)&&e.escalateEngineHalt!==void 0)try{await e.escalateEngineHalt(a!==void 0?"stopped by user (engine never acked turn start)":"stopped by user (engine unresponsive)"),x=!0}catch(w){e.log("codex.stop_turn_escalation_failed",{harness_session_id:i,message:w instanceof Error?w.message:String(w)})}let b=ok(n.queue),S=a!==void 0?"stopped by user (before the turn started)":x?"interrupted (engine killed after unresponsive stop)":"stopped by user",v=y||x;if(v&&(l!==void 0&&(await Tf(e,n,s,l,{status:"interrupted",reason:S},void 0,void 0,i),fd(n,l)),a!==void 0))for(let w of d)e.options.onLiveSourceSeqSettled?.({channel:e.options.channelSession.channelSlug,threadId:s,sourceSeq:w});c!==void 0&&(Ei(n,c),Yy(n,c),Ri(n,c),pd(n,c)),n.turn={status:"idle"},jz(n);for(let w of b)for(let k of sd(w))Zy(e,n,s,k);return await Di(e,n),e.log("codex.turn_stopped",{harness_session_id:i,kandan_thread_id:s,turn_id:c??null,had_live_activity:p,interrupt_acked:m,stream_events_ceased:y,escalated_kill:x,confirmed_halt:v,aborted_starting_seq:a??null,preserved_queued_messages:b.length}),v&&b.length>0&&Tr(e,n,t).catch(w=>{e.log("kandan.post_stop_queue_drain_failed",{kandan_thread_id:s,codex_thread_id:i,queue_depth:Yo(n.queue),message:w instanceof Error?w.message:String(w)})}),{instanceId:e.instanceId,controlType:r.type,ok:!0,agentProvider:"codex",threadId:s,stopped:v,streamEventsCeased:y,escalatedKill:x,confirmedHalt:v,abortedWedgedStart:a!==void 0,preservedQueuedMessages:b.length,...v?{}:{error:"stop_halt_unconfirmed"}}}function Ik(e,n){return e===void 0||n===void 0?!1:n<=e}async function gpe(e,n,t){let r=Iz(t);if(n.kandanThreadId!==t.threadId)return e.log("thread_interaction.access_update_ignored",{thread_id:t.threadId,expected_thread_id:n.kandanThreadId??null,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,reason:"different_thread"}),{instanceId:e.instanceId,ok:!1,error:"different_thread"};if(r.length===0)return e.log("thread_interaction.access_update_ignored",{thread_id:t.threadId,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,reason:"missing_requester"}),{instanceId:e.instanceId,ok:!1,error:"missing_requester"};for(let o of r)t.grant?n.approvedThreadInteractionRequesters.add(o):n.approvedThreadInteractionRequesters.delete(o);return e.log("thread_interaction.access_updated",{thread_id:t.threadId,requester_slug:t.requesterSlug??null,requester_user_id:t.requesterUserId??null,grant:t.grant}),{instanceId:e.instanceId,ok:!0,grant:t.grant}}function Iz(e){if(e.threadId===void 0)return[];let n=[];return e.requesterUserId!==void 0&&n.push(`${e.threadId}:user:${e.requesterUserId}`),e.requesterSlug!==void 0&&e.requesterSlug.trim()!==""&&n.push(`${e.threadId}:slug:${e.requesterSlug}`),n}function ype(e,n){return Iz({threadId:n.threadId,requesterUserId:n.actorUserId,requesterSlug:n.actorSlug}).some(t=>e.approvedThreadInteractionRequesters.has(t))}async function xpe(e,n,t,r){if(n.codexThreadId===r.threadId)return n.codexThreadId===void 0?{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"}:(n.runtimeSettings=Afe(n.runtimeSettings,r),n.pendingRuntimeSettingsResume=!0,n.runtimeSettingsGeneration+=1,await Xpe(e,n),Ofe(e,n).catch(o=>{e.log("kandan.session_settings_publish_failed",{message:o instanceof Error?o.message:String(o)})}),e.log("codex.session_settings_updated",{model:n.runtimeSettings.model??null,reasoning_effort:n.runtimeSettings.reasoningEffort??null,approval_policy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allow_port_forwarding_by_default:n.runtimeSettings.allowPortForwardingByDefault??null}),await Spe(e,n,t),await Rz(e,n),{instanceId:e.instanceId,ok:!0,model:n.runtimeSettings.model??null,reasoningEffort:n.runtimeSettings.reasoningEffort??null,approvalPolicy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allowPortForwardingByDefault:n.runtimeSettings.allowPortForwardingByDefault??null})}async function _pe(e,n){let t=n.runtimeSettingsGeneration,o=n.runtimeSettingsResumeChain.catch(()=>{}).then(()=>bpe(e,n,t));return n.runtimeSettingsResumeChain=o.then(()=>{},()=>{}),await o}async function bpe(e,n,t){if(n.pendingRuntimeSettingsResume!==!0||n.closed||n.turn.status!=="idle"||Gz(n))return!0;let r=n.codexThreadId;if(r===void 0)return!0;if(n.runtimeSettingsGeneration!==t)return!1;let o=t,i=n.runtimeSettings,s=eq(e.options,i),a={threadId:r,...$p(s)};e.log("codex.session_settings_resume_requested",{codex_thread_id:r,model:i.model??null,reasoning_effort:i.reasoningEffort??null,approval_policy:i.approvalPolicy??null,sandbox:i.sandbox??null,fast:i.fast??null,generation:o});let d=await e.codex.request("thread/resume",a);if("error"in d)throw new Error(`failed to resume Codex thread with updated settings: ${d.error.message}`);return n.pendingRuntimeSettingsResume===!0&&n.runtimeSettingsGeneration===o&&(n.pendingRuntimeSettingsResume=!1),e.log("codex.session_settings_resume_completed",{codex_thread_id:r,generation:o,current_generation:n.runtimeSettingsGeneration,pending:n.pendingRuntimeSettingsResume}),n.pendingRuntimeSettingsResume!==!0}async function Rz(e,n){try{return await _pe(e,n)}catch(t){return e.log("codex.session_settings_resume_failed",{message:t instanceof Error?t.message:String(t)}),!1}}async function wpe(e,n,t){if(n.codexThreadId!==t.threadId)return;if(n.codexThreadId===void 0||n.kandanThreadId===void 0)return{instanceId:e.instanceId,ok:!1,error:"thread_not_bound"};let r=n.pendingApprovalRequests.get(vy(t.requestId,t.sourceSeq));if(r===void 0)return{instanceId:e.instanceId,ok:!1,error:"approval_request_not_found"};n.pendingApprovalRequests.delete(vy(t.requestId,t.sourceSeq));let o=t.decision==="approve"?"accept":"decline";return r.resolve({decision:o}),n.activeProcessingState={seq:r.sourceSeq,reason:"streaming response"},await Gn(e,n.kandanThreadId,r.sourceSeq,{status:"processing",reason:"streaming response"},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_resolved",{request_id:t.requestId,source_seq:t.sourceSeq,decision:t.decision,codex_decision:o}),{instanceId:e.instanceId,ok:!0}}async function $k(e,n,t){if(n.pendingPortForwardRequests.size>0||n.queuedPortForwardCandidates.size===0)return;let r=Array.from(n.queuedPortForwardCandidates.values()).sort((o,i)=>o.port-i.port)[0];r!==void 0&&(n.queuedPortForwardCandidates.delete(r.port),await Bk(e,n,t,r))}async function Ez(e,n,t,r){let o=n.pendingPortForwardRequests.get(r.requestId);if(o!==void 0&&!(r.threadId!==void 0&&n.codexThreadId!==r.threadId))return vpe(e,t,r)?(n.pendingPortForwardRequests.delete(r.requestId),r.decision==="deny"?(n.dismissedForwardTargets.set(o.port,mr(o)),await Jk(e,n,o,{decision:"deny"}),await Kk(e,n,o,"failed"),e.log("port_forward.request_denied",{request_id:r.requestId,port:o.port,pid:o.pid}),await $k(e,n,t),{instanceId:e.instanceId,ok:!0}):(await Uk(e,n,o,{publishMessageState:!0,logEvent:"port_forward.request_approved"}),await $k(e,n,t),{instanceId:e.instanceId,ok:!0,port:o.port})):(e.log("port_forward.request_resolution_ignored",{request_id:r.requestId,actor_slug:r.actorSlug??null,actor_user_id:r.actorUserId??null,reason:"sender_not_allowed"}),{instanceId:e.instanceId,ok:!1,error:"sender_not_allowed"})}async function Dz(e,n,t,r){let o=r==="listener_exited"?"port_forward_listener_exited":"port_forward_listener_changed";n.pendingPortForwardRequests.delete(t.requestId),await Jk(e,n,t,{decision:"expired",reason:r}),await Kk(e,n,t,"failed",o),e.log("port_forward.pending_request_expired",{request_id:t.requestId,port:t.port,pid:t.pid,reason:r})}async function Uk(e,n,t,r){n.approvedForwardPorts.add(t.port),n.approvedForwardTargets.set(t.port,mr(t));let o=Ii(t.command),i=e.options.onForwardPortApproved?.(t.port,{kandanThreadId:n.kandanThreadId??null,codexThreadId:n.codexThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,processName:o?.appName??null,processIconKey:o?.iconKey??null,linzumiCliManaged:t.portKind==="commander_bound"});await Jk(e,n,t,{decision:"approve",capabilities:i}),r.publishMessageState&&await Kk(e,n,t,"processed"),e.log(r.logEvent,{request_id:t.requestId,port:t.port,pid:t.pid})}function vpe(e,n,t){return t.actorSlug===void 0&&t.actorUserId===void 0?!1:Qv(e.options.channelSession.listenUser,{actorSlug:t.actorSlug,actorUserId:t.actorUserId},n.runnerIdentity)}async function Bk(e,n,t,r){if(n.kandanThreadId===void 0||n.codexThreadId===void 0){e.log("port_forward.prompt_skipped",{port:r.port,pid:r.pid,reason:"thread_not_bound"});return}let o=hf({candidate:r,threadBound:!0,suppressedPorts:new Set(e.options.suppressedForwardPorts?.()??[]),approvedPorts:n.approvedForwardPorts,approvedTargets:n.approvedForwardTargets,dismissedTargets:n.dismissedForwardTargets,pendingRequests:Array.from(n.pendingPortForwardRequests.values())}),i=!0;switch(o.type){case"skip":return;case"remember_approved_target":n.approvedForwardTargets.set(o.target.port,o.target);return;case"revoke_and_prompt":if(n.pendingPortForwardRequests.size>0&&!i){n.queuedPortForwardCandidates.set(r.port,r),e.log("port_forward.request_queued",{port:r.port,pid:r.pid,pending_count:n.pendingPortForwardRequests.size});return}if(await $z(e,n,o.revoked,o.reason),i){await Rk(e,n,t,r);return}break;case"replace_pending":if(await Dz(e,n,o.expired,o.reason),i){await Rk(e,n,t,o.candidate);return}if(n.pendingPortForwardRequests.size>0){n.queuedPortForwardCandidates.set(o.candidate.port,o.candidate),e.log("port_forward.request_queued",{port:o.candidate.port,pid:o.candidate.pid,pending_count:n.pendingPortForwardRequests.size});return}break;case"prompt":if(i){await Rk(e,n,t,r);return}if(n.pendingPortForwardRequests.size>0){n.queuedPortForwardCandidates.set(r.port,r),e.log("port_forward.request_queued",{port:r.port,pid:r.pid,pending_count:n.pendingPortForwardRequests.size});return}break}let s=`port-forward-${Vy()}`,a=gf(r),d=Az(n);if(d===void 0){e.log("port_forward.prompt_skipped",{port:r.port,pid:r.pid,reason:"source_seq_missing"});return}let u=xc({requestId:s,sourceSeq:d,candidate:r});n.pendingPortForwardRequests.set(s,u),n.activeProcessingState!==void 0&&n.portForwardPreviousProcessingStates.set(s,n.activeProcessingState);let c=Ii(r.command),l=c?.iconKey===void 0?void 0:`/web/process-icons/${c.iconKey}.png`,p=c?.appName??a;n.activeProcessingState={seq:d,reason:"awaiting approval",approval:{requestId:s,kind:"local_runner_port_forward",summary:`Make ${p} on port ${r.port} accessible on Linzumi?`,reason:Ly(r),port:r.port,pid:r.pid,command:r.command,...r.cwd===void 0?{}:{cwd:r.cwd},...c?.appName===void 0?{}:{processName:p},...c?.iconKey===void 0?{}:{processIconKey:c.iconKey},...l===void 0?{}:{processIconPath:l},choices:[{decision:"approve",label:"Enable",description:`Allow Linzumi to proxy HTTP, HTTPS, and WebSocket traffic for runner port ${r.port}.`},{decision:"deny",label:"Deny",description:`Keep runner port ${r.port} private for this runner session.`}],allowedActorSlug:e.options.channelSession.listenUser,allowedActorUserId:e.options.channelSession.listenUser.toLowerCase()===(t.runnerIdentity.actorUsername??"").toLowerCase()?t.runnerIdentity.actorUserId:void 0}},await Gn(e,n.kandanThreadId,d,{status:"processing",reason:"awaiting approval",approval:n.activeProcessingState.approval},void 0,void 0,n.codexThreadId),await Tpe(e,n,u,c),e.log("port_forward.request_pending",{request_id:s,port:r.port,pid:r.pid})}async function Rk(e,n,t,r){let o=Az(n);if(o===void 0){e.log("port_forward.auto_approval_skipped",{port:r.port,pid:r.pid,reason:"source_seq_missing"});return}let i=xc({requestId:`port-forward-auto-${Vy()}`,sourceSeq:o,candidate:r});await Uk(e,n,i,{publishMessageState:!1,logEvent:"port_forward.request_auto_approved"})}async function Spe(e,n,t){for(let r of Array.from(n.pendingPortForwardRequests.values()))n.pendingPortForwardRequests.delete(r.requestId),await Uk(e,n,r,{publishMessageState:!0,logEvent:"port_forward.request_auto_approved"});await Mz(e,n,t)}async function Mz(e,n,t){let r=Array.from(n.queuedPortForwardCandidates.values()).sort((o,i)=>o.port-i.port)[0];r!==void 0&&(n.queuedPortForwardCandidates.delete(r.port),await Bk(e,n,t,r),await Mz(e,n,t))}function Az(e){return e.activeProcessingState?.seq??e.rootSeq}async function $z(e,n,t,r){n.approvedForwardPorts.delete(t.port),n.approvedForwardTargets.delete(t.port);let o=e.options.onForwardPortRevoked?.(t.port);await vc(e.kandan,e.topic,"forward_port_revoked",{instanceId:e.instanceId,port:t.port,pid:t.pid,command:t.command,...t.cwd===void 0?{}:{cwd:t.cwd},reason:r,capabilities:Hs(o,t.port)},e.log),e.log("port_forward.approved_port_revoked",{port:t.port,pid:t.pid,reason:r})}async function kpe(e,n,t){n.approvedForwardPorts.has(t.port)&&await $z(e,n,n.approvedForwardTargets.get(t.port)??t,"listener_exited")}async function Cpe(e,n,t,r){let o=Array.from(n.pendingPortForwardRequests.values()).find(i=>zr(mr(i),r));o!==void 0&&(await Dz(e,n,o,"listener_exited"),await $k(e,n,t))}async function Tpe(e,n,t,r){await vc(e.kandan,e.topic,"forward_port_requested",{instanceId:e.instanceId,requestId:t.requestId,sourceSeq:t.sourceSeq,port:t.port,pid:t.pid,command:t.command,codexThreadId:n.codexThreadId??null,kandanThreadId:n.kandanThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,...r?.appName===void 0?{}:{processName:r.appName},...r?.iconKey===void 0?{}:{processIconKey:r.iconKey},...t.cwd===void 0?{}:{cwd:t.cwd}},e.log)}async function Jk(e,n,t,r){await vc(e.kandan,e.topic,"forward_port_resolved",{instanceId:e.instanceId,requestId:t.requestId,port:t.port,pid:t.pid,command:t.command,codexThreadId:n.codexThreadId??null,kandanThreadId:n.kandanThreadId??null,channelSlug:e.options.channelSession.channelSlug??null,...t.cwd===void 0?{}:{cwd:t.cwd},sourceSeq:t.sourceSeq,decision:r.decision,...r.reason===void 0?{}:{reason:r.reason},...r.capabilities===void 0?{}:{capabilities:r.capabilities}},e.log)}async function Kk(e,n,t,r,o="port_forward_denied"){if(n.kandanThreadId===void 0)return;let i=n.portForwardPreviousProcessingStates.get(t.requestId);n.portForwardPreviousProcessingStates.delete(t.requestId);let s=n.activeProcessingState;if(s!==void 0&&s.seq===t.sourceSeq){let a=s.reason==="awaiting approval"&&s.approval.requestId===t.requestId;if(a){if(n.activeProcessingState=void 0,i!==void 0&&i.seq===t.sourceSeq){n.activeProcessingState=i,await Gn(e,n.kandanThreadId,t.sourceSeq,ky(i),void 0,void 0,n.codexThreadId);return}switch(n.turn.status){case"active":case"completing":if(n.turn.queuedSeq===t.sourceSeq){n.activeProcessingState={seq:t.sourceSeq,reason:"running terminal command"},await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"processing",reason:"running terminal command"},void 0,void 0,n.codexThreadId);return}break;case"idle":case"starting":break}}if(!a){await Gn(e,n.kandanThreadId,t.sourceSeq,ky(s),void 0,void 0,n.codexThreadId);return}}switch(r){case"processed":await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"processed"},void 0,void 0,n.codexThreadId);break;case"failed":await Gn(e,n.kandanThreadId,t.sourceSeq,{status:"failed",reason:o},void 0,void 0,n.codexThreadId);break}}function Ppe(e){let n=e.trim().match(/^\/kandan\s+(approve|deny)-port-forward\s+(\S+)$/i);if(n!==null)return{decision:n[1]?.toLocaleLowerCase()==="approve"?"approve":"deny",requestId:n[2]??""}}function vf(e){let n=e.replace(/\s+/g," ").trim();return n.length<=50?n:`${n.slice(0,47)}...`}function Gy(e,n){n!==void 0&&(e.kandanThreadTitle=n)}function Oz(e){return e===void 0?void 0:Dg(e)?.threadTitle}function Ipe(e){if(Array.isArray(e))for(let n of e){let t=Dg(n)?.threadTitle;if(t!==void 0)return t}}async function cz(e,n){if(n.kandanThreadId===void 0||n.kandanThreadTitle!==void 0)return;let t=e.options.channelSession,r=await so(e.kandan,e.topic,"session:thread_context",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId});Gy(n,Ipe(r.messages))}async function Rpe(e,n,t,r,o){let i=e.options.channelSession;if(o.type!=="thread.message"){Ek(e,o,"non_thread_message_event");return}if(o.threadId===void 0){Ek(e,o,"missing_thread_id");return}if(o.body.trim()===""&&o.attachments.length===0){Ek(e,o,"empty_thread_message");return}if(FO(o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"codex_authored"});return}let s=n.kandanThreadId!==void 0?o.threadId===n.kandanThreadId:n.rootSeq!==void 0&&o.replyToSeq===n.rootSeq;if(!Qv(i.listenUser,o,t)&&!ype(n,o)&&!zO(i.linzumiAgentSession,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"sender_not_allowed",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,message_state_published:s}),s&&await Gs(e,o,{status:"ignored",reason:"sender_not_allowed"});return}if(o.body.trimStart().startsWith("&")){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"human_only",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,message_state_published:s}),s&&await Gs(e,o,{status:"ignored",reason:"human_only"});return}let a=Ppe(o.body);if(a!==void 0){let u=await Ez(e,n,r,{type:"resolve_port_forward_request",instanceId:e.instanceId,requestId:a.requestId,decision:a.decision,actorUserId:o.actorUserId,actorSlug:o.actorSlug});u===void 0?await Gs(e,o,{status:"failed",reason:"port_forward_decision_missing"}):u.ok===!0?await Gs(e,o,{status:"processed"}):await Gs(e,o,{status:"failed",reason:h(u.error)??"port_forward_decision_failed"});return}if(n.kandanThreadId===void 0)if(n.rootSeq===void 0||o.replyToSeq!==n.rootSeq){if(!await Ape(e,n,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"not_root_reply"}),await Gs(e,o,{status:"ignored",reason:"not_root_reply"});return}}else n.kandanThreadId=o.threadId,zk(e,n);if(Tz(e,n,r),o.threadId!==n.kandanThreadId){if(e.options.onUnroutedThreadMessage!==void 0)try{let u=await e.options.onUnroutedThreadMessage(o);if(u==="spawned"){e.log("kandan.message_spawn_on_miss",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,body_preview:vf(o.body)});return}if(u==="spawned_deduped")return}catch(u){e.log("kandan.message_spawn_on_miss_failed",{seq:o.seq,thread_id:o.threadId??null,message:u instanceof Error?u.message:String(u)})}e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"different_thread",thread_id:o.threadId??null,bound_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,body_preview:vf(o.body)});return}if(Gy(n,o.threadTitle),!Dpe(e,n,o)){e.log("kandan.message_ignored",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,reason:"duplicate_message_claim"});return}let d=Date.now();rk(n.queue,{seq:o.seq,actorSlug:o.actorSlug,actorUserId:o.actorUserId,body:o.body,attachments:o.attachments,receivedAtMs:d}),e.log("kandan.message_queued",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:d,...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Gs(e,o,Lz(n),"sent"),await Tr(e,n,r)}function Lz(e,n){let t=Yo(e.queue);return e.turn.status!=="idle"?{status:"queued",reason:n===void 0?pc(t):QS(t,n)}:t>1?{status:"queued",reason:iF(t-1)}:{status:"queued"}}async function Epe(e,n){let t=ok(n.queue);await Promise.all(t.map((r,o)=>Sf(e,n,r,{status:"queued",reason:r.parkReason===void 0?pc(o+1):QS(o+1,r.parkReason)},"sent")))}function Ek(e,n,t){e.log("kandan.message_ignored",{seq:n.seq,type:n.type,thread_id:n.threadId??null,actor_slug:n.actorSlug??null,actor_user_id:n.actorUserId??null,body_length:n.body.length,attachment_count:n.attachments.length,local_runner_event_type:n.localRunnerEventType??null,reason:t})}function Vk(e,n,t){let r=e.options.channelSession;return[e.options.runnerId,e.instanceId,r.workspaceSlug,r.channelSlug,n,String(t)].join(":")}function Dpe(e,n,t){return Zy(e,n,t.threadId,t.seq)}function Zy(e,n,t,r){if(t===void 0)return!0;let o=Vk(e,t,r);if(bc.has(o))return!1;if(bc.add(o),n.claimedKandanMessageKeys.add(o),n.claimedKandanMessageKeys.size>By){let i=n.claimedKandanMessageKeys.size-By,s=Array.from(n.claimedKandanMessageKeys).slice(0,i);for(let a of s)n.claimedKandanMessageKeys.delete(a),bc.delete(a)}return!0}function jz(e){for(let n of e.claimedKandanMessageKeys)bc.delete(n);e.claimedKandanMessageKeys.clear()}function Mpe(e,n,t,r){let o=Vk(e,t,r);bc.delete(o),n.claimedKandanMessageKeys.delete(o)}async function Fz(e,n,t,r){if(n.kandanThreadId===void 0||n.codexThreadId===void 0)throw new Error("cannot start a local Codex turn before thread binding");if(r.dedupBySeq===!0){if(nf(n.queue,r.seq))return e.log("kandan.message_duplicate_ignored",{seq:r.seq,linzumi_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,reason:"seq_already_pending_in_queue"}),"duplicate";if(!Zy(e,n,n.kandanThreadId,r.seq))return e.log("kandan.message_duplicate_ignored",{seq:r.seq,linzumi_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,reason:"duplicate_message_claim"}),"duplicate"}r.boundStartTimeout===!0&&(n.boundStartTimeout=!0);let o={seq:r.seq,actorSlug:r.actorSlug,actorUserId:r.actorUserId,body:r.body,attachments:r.attachments??[],receivedAtMs:Date.now(),parkReason:r.parkReason};return rk(n.queue,o),e.log("kandan.message_queued",{seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:o.receivedAtMs??Date.now(),...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Sf(e,n,o,Lz(n,o.parkReason),"sent"),await Tr(e,n,t),"queued"}async function Ape(e,n,t){if(t.threadId===void 0||t.replyToSeq===void 0)return!1;let r=e.options.channelSession;try{let o=await so(e.kandan,e.topic,"session:resolve_thread_session",{workspace:r.workspaceSlug,channel:r.channelSlug,thread_id:t.threadId}),i=Y(o.seq),s=h(o.codex_thread_id),a=Oz(o.message);return i!==t.replyToSeq||s===void 0?!1:(n.rootSeq=i,n.kandanThreadId=t.threadId,zk(e,n),Gy(n,t.threadTitle??a),n.codexThreadId=s,await wc(e,n),e.log("kandan.thread_bound_from_historical_reply",{seq:t.seq,kandan_thread_id:t.threadId,root_seq:i,codex_thread_id:s}),!0)}catch(o){return e.log("kandan.thread_bind_from_historical_reply_failed",{seq:t.seq,kandan_thread_id:t.threadId,message:o instanceof Error?o.message:String(o)}),!1}}async function $pe(e,n,t,r,o){for(;o.pending.length>0;){let i=o.pending.splice(0).sort((s,a)=>s.seq-a.seq);for(let s of i)await zz(e,n,t,s,r)}o.ready=!0}async function zz(e,n,t,r,o){if(!(r.seq<=n.seenSeq)){UO(r.threadId,r.traceparent),n.seenSeq=r.seq,e.log("kandan.chat_event",{seq:r.seq,type:r.type,actor_slug:r.actorSlug??null,actor_user_id:r.actorUserId??null,thread_id:r.threadId??null,reply_to_seq:r.replyToSeq??null,local_runner_event_type:r.localRunnerEventType??null});try{await Rpe(e,n,t,o,r),n.minSeq=Math.max(n.minSeq,r.seq),n.failedSeqs.delete(r.seq)&&e.log("kandan.chat_event_failure_cleared",{seq:r.seq})}catch(i){let s=i instanceof Error?i.message:String(i),a=jpe(e,n,r.seq);e.log("kandan.chat_event_failed",{seq:r.seq,attempts:a,message:s}),a>=Ble&&await Fpe(e,n,r,s,a),zpe(e,n,r),Tr(e,n,o)}}}function Ope(e){let n=Lpe(e);return n===void 0?e.minSeq:Math.min(e.minSeq,n-1)}function Lpe(e){let n;for(let t of e.failedSeqs.keys())(n===void 0||t<n)&&(n=t);return n}function jpe(e,n,t){let r=(n.failedSeqs.get(t)??0)+1;if(n.failedSeqs.set(t,r),n.failedSeqs.size>Ule){let o=t;for(let i of n.failedSeqs.keys())i>o&&(o=i);n.failedSeqs.delete(o),e.log("kandan.failed_seq_overflow",{evicted_seq:o,tracked:n.failedSeqs.size})}return r}async function Fpe(e,n,t,r,o){n.failedSeqs.delete(t.seq),n.minSeq=Math.max(n.minSeq,t.seq),e.log("kandan.chat_event_abandoned",{seq:t.seq,attempts:o,message:r}),!(nf(n.queue,t.seq)||qz(n,t.seq))&&await Gs(e,t,{status:"failed",reason:"chat_event_abandoned"})}function zpe(e,n,t){if(t.threadId===void 0||nf(n.queue,t.seq)||qz(n,t.seq))return;let r=Vk(e,t.threadId,t.seq);n.claimedKandanMessageKeys.delete(r)&&bc.delete(r)}function qz(e,n){let t=e.turn;switch(t.status){case"starting":case"active":case"completing":return ld(e,t.queuedSeq).includes(n);case"idle":return!1}}async function Tr(e,n,t){if(n.drainInFlight){n.drainRequested=!0;return}n.drainInFlight=!0;try{do n.drainRequested=!1,await qpe(e,n,t);while(n.drainRequested)}finally{n.drainInFlight=!1}}async function qpe(e,n,t){if(await fz(e,n)||mz(e,n))return;if(!await Rz(e,n)){bf(e,n,"runtime_settings_resume_pending");return}if(mz(e,n))return;let o=mF(n.queue);if(o!==void 0){Jpe(n,o),Kpe(n,o),n.turn={status:"starting",queuedSeq:o.seq,interruptAfterStart:!1},n.pendingStartingProcessingReasons=[],n.activeProcessingState={seq:o.seq,reason:"starting turn"},e.log("codex.turn_starting",{queued_seq:o.seq,actor_slug:o.actorSlug??null,actor_user_id:o.actorUserId??null,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,runner_console:{body_preview:vf(o.body),message_received_at_ms:o.receivedAtMs??Date.now(),...n.kandanThreadTitle===void 0?{}:{linzumi_thread_title:n.kandanThreadTitle}},queue_depth:Yo(n.queue)}),await Sf(e,n,o,{status:"processing",reason:"starting turn"},"sent"),await Epe(e,n),await Xp({cwd:e.options.cwd,threadKey:qk(e,n),turnRef:`seq-${o.seq}`,log:(i,s)=>e.log(i,s)});try{let i=n.codexThreadId;if(i===void 0)throw new Error("Codex thread is not bound");n.kandanThreadId!==void 0&&Wk(e,n,n.kandanThreadId);let s=n.runtimeSettings;if(e.options.cloudAgentTurn!==void 0){let p=await _z(e,o,n.pendingReconnectContextInjection);n.pendingReconnectContextInjection=void 0;let m=`cloud-${Vy()}`;n.turn={status:"active",turnId:m,queuedSeq:o.seq},Lk(n,o.seq,s),Ok(n,m,o.seq),n.threadRebindAttempts.delete(o.seq),e.log("codex.cloud_turn_started",{turn_id:m,queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null});try{await e.options.cloudAgentTurn({input:p,runtimeSettings:s,kandanThreadId:n.kandanThreadId,codexThreadId:i,sourceSeq:o.seq}),Ak(e,n,t,m,"completed",void 0,void 0,!0)}catch(f){e.log("codex.cloud_turn_failed",{turn_id:m,queued_seq:o.seq,message:f instanceof Error?f.message:String(f)}),Ak(e,n,t,m,"failed",f instanceof Error?f.message:String(f),void 0,!0)}return}let a=n.boundStartTimeout;n.boundStartTimeout=!1;let d=e.codex.request("turn/start",{threadId:i,input:await _z(e,o,n.pendingReconnectContextInjection),...iL(eq(e.options,s))}),u=a?await Mi("turn/start",d):await d,c=jfe(u);if(yz(n,o.seq)){Nk(e,i,c),Ei(n,c),Yy(n,c),Ri(n,c),pd(n,c),e.log("codex.turn_start_ack_after_stop_abort",{turn_id:c,queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null});return}n.pendingReconnectContextInjection=void 0;let l=n.turn.status==="starting"&&n.turn.interruptAfterStart;n.turn={status:"active",turnId:c,queuedSeq:o.seq},Fk(e,n,c),Tfe(e,n,t,c),Lk(n,o.seq,s),Ok(n,c,o.seq),n.threadRebindAttempts.delete(o.seq),e.log("codex.turn_started",{turn_id:c}),Dfe(e,n,c),l&&(await Pz(e,n,i,c,o.seq),await Tr(e,n,t))}catch(i){if(yz(n,o.seq)){e.log("codex.turn_start_failed_after_stop_abort",{queued_seq:o.seq,linzumi_thread_id:n.kandanThreadId??null,codex_thread_id:n.codexThreadId??null,message:i instanceof Error?i.message:String(i)});return}if(Ky(e)){await Di(e,n),mc(n.queue,o),n.turn={status:"idle"},fd(n,o.seq),await fz(e,n);return}let s=_fe(i)&&n.kandanThreadId!==void 0,a=s?Bpe(n,o.seq):void 0,d=s&&a===void 0;if(d&&e.log("codex.thread_rebind_exhausted",{kandan_thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId??null,queued_seq:o.seq,max_attempts:qy,message:i instanceof Error?i.message:String(i)}),a!==void 0&&n.kandanThreadId!==void 0){let u=n.codexThreadId,c=n.kandanThreadId;try{await Di(e,n);let l=await jk(e.codex,e.options);n.codexThreadId=l,await wc(e,n),await Ffe(e,u),e.options.onCodexThreadRebound?.({kandanThreadId:c,oldCodexThreadId:u,newCodexThreadId:l}),e.log("codex.thread_rebound",{linzumi_thread_id:n.kandanThreadId,old_codex_thread_id:u??null,new_codex_thread_id:l,rebind_attempt:a,max_attempts:qy}),await xfe(e,n,t,u,l);try{n.pendingReconnectContextInjection=await Vpe(e,n)}catch(p){n.pendingReconnectContextInjection=void 0,e.log("codex.thread_reconnect_context_failed",{kandan_thread_id:n.kandanThreadId,codex_thread_id:l,message:p instanceof Error?p.message:String(p)})}mc(n.queue,o),pz>0&&await Zs(pz),n.turn={status:"idle"},await Tr(e,n,t);return}catch(l){e.log("codex.thread_rebind_failed",{kandan_thread_id:n.kandanThreadId,old_codex_thread_id:u??null,message:l instanceof Error?l.message:String(l)})}}if(n.turn={status:"idle"},fd(n,o.seq),n.threadRebindAttempts.delete(o.seq),await Di(e,n),await Sf(e,n,o,{status:"failed",reason:d?`Codex could not recover this conversation's upstream thread after ${qy} restart attempts (${cd(i)}). Send the message again to retry.`:cd(i)}),e.log("codex.turn_start_failed",{queued_seq:o.seq,message:i instanceof Error?i.message:String(i)}),zle(i))throw i;Yo(n.queue)>0&&(n.drainRequested=!0)}}}function Ky(e){return e.codex.isClosed?.()===!0}function Bpe(e,n){let t=e.threadRebindAttempts.get(n)??0;if(!(t>=qy))return e.threadRebindAttempts.delete(n),e.threadRebindAttempts.set(n,t+1),ps(e.threadRebindAttempts,Upe),t+1}async function fz(e,n){if(!Ky(e))return!1;let t=hF(n.queue);if(t.length===0)return!1;let{codexThreadId:r,kandanThreadId:o}=n,i=e.options.rebuildOnDeadCodexWorker;e.log("kandan.queue_drain_dead_worker_rebuild",{codex_thread_id:r??null,kandan_thread_id:o??null,pending_count:t.length,attempt:n.deadWorkerRebuildAttempts+1,rebuild_available:i!==void 0});let s=async d=>{for(let u of t)try{await Sf(e,n,u,{status:"failed",reason:d})}catch(c){e.log("kandan.queue_drain_dead_worker_fail_publish_failed",{codex_thread_id:r??null,seq:u.seq,message:c instanceof Error?c.message:String(c)})}};if(i===void 0||r===void 0||o===void 0)return await s("Codex worker for this thread exited and could not be respawned to resume the conversation."),!0;if(n.deadWorkerRebuildAttempts>=Npe)return e.log("kandan.queue_drain_dead_worker_rebuild_exhausted",{codex_thread_id:r,kandan_thread_id:o,attempts:n.deadWorkerRebuildAttempts}),await s("Codex worker for this thread kept exiting on resume; giving up after several respawn attempts."),!0;n.deadWorkerRebuildAttempts+=1,n.closed=!0;let a=!1;try{a=await i({codexThreadId:r,kandanThreadId:o,pendingMessages:t})}catch(d){e.log("kandan.queue_drain_dead_worker_rebuild_failed",{codex_thread_id:r,kandan_thread_id:o,message:d instanceof Error?d.message:String(d)}),a=!1}return a||await s("Codex worker for this thread exited and could not be respawned to resume the conversation."),!0}function mz(e,n){return n.closed?(bf(e,n,"session_closed"),!0):n.turn.status!=="idle"?(bf(e,n,"turn_not_idle"),!0):n.pendingCompletionTypingStops.size>0?(bf(e,n,"completion_typing_stop_pending"),!0):Gz(n)?(bf(e,n,"local_tui_turn_active"),!0):!1}function Jpe(e,n){let t=sd(n);t.length<=1||(e.fusedQueuedSeqs.set(n.seq,t),ps(e.fusedQueuedSeqs,So))}function Kpe(e,n){let t=e.emptyTurnRetry.get(n.seq);e.emptyTurnRetry.set(n.seq,{message:n,attempts:t?.attempts??0}),ps(e.emptyTurnRetry,_f)}function hz(e,n){let t=e.emptyTurnRetry.get(n);return t!==void 0&&t.attempts<wo}function zy(e,n){let t=e.emptyTurnRetry.get(n);if(t===void 0)return;if(t.attempts>=wo){e.emptyTurnRetry.delete(n);return}let r=t.attempts+1;return e.emptyTurnRetry.set(n,{message:t.message,attempts:r}),{message:t.message,attempts:r}}function ld(e,n){let t=e.fusedQueuedSeqs.get(n);return t===void 0||t.length===0?[n]:t}async function Tf(e,n,t,r,o,i,s,a){for(let d of ld(n,r))await Gn(e,t,d,o,i,s,a);n.fusedQueuedSeqs.delete(r)}function bf(e,n,t){let r=Yo(n.queue);r!==0&&e.log("kandan.queue_drain_blocked",{reason:t,queue_depth:r,turn_status:n.turn.status,active_turn_id:ad(n.turn)??null,active_queued_seq:n.turn.status==="active"||n.turn.status==="completing"||n.turn.status==="starting"?n.turn.queuedSeq:null,codex_thread_id:n.codexThreadId??null,kandan_thread_id:n.kandanThreadId??null,local_tui_turn_count:n.localTuiTurnIds.size,pending_completion_typing_stop_count:n.pendingCompletionTypingStops.size})}async function Vpe(e,n){if(n.kandanThreadId===void 0)throw new Error("cannot fetch reconnect context without a Linzumi thread id");let t=e.options.channelSession,r=await so(e.kandan,e.topic,"session:thread_context",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId}),o=wy(r.messages),i=e.options.reconnectContextSummarizer??WS(),s=await nF(o,i,n.linzumiContext);return e.log("codex.thread_reconnect_context_prepared",{codex_thread_id:n.codexThreadId??null,kandan_thread_id:n.kandanThreadId,context_message_count:o.length}),s}async function Wpe(e,n,t,r){let o=A(r.params)??{},i=Vz(o),s=Wz(o);if(n.closed||!Hz(n,s,i))return;if(Nz(n.runtimeSettings,r.method))return e.log("codex.server_request_auto_accepted",{method:r.method,turn_id:i??null}),{decision:"accept"};if(r.method==="mcpServer/elicitation/request"){let d=Gpe(o);return e.log(d==="accept"?"codex.mcp_elicitation_auto_accepted":"codex.mcp_elicitation_auto_declined",{method:r.method,server_name:Uz(o)??null,tool_name:Bz(o)??null,turn_id:i??null}),{action:d}}if(Hpe(r.method)){if(i===void 0)throw new Error(`Codex approval request missing turn id: ${r.method}`);return Zpe(e,n,r,i,t)}let a=`unhandled Codex app-server request: ${r.method}`;throw e.log("codex.server_request_unhandled",{method:r.method,turn_id:i??null}),i!==void 0&&await Qz(e,n,i,a,t),new Error(a)}function Nz(e,n){return e.approvalPolicy==="never"&&e.sandbox==="danger-full-access"&&(n==="item/commandExecution/requestApproval"||n==="item/fileChange/requestApproval")}function Hpe(e){return e==="item/commandExecution/requestApproval"||e==="item/fileChange/requestApproval"}function Uz(e){return h(e.server_name)??h(e.serverName)??h(e.server)}function Bz(e){return h(e.tool_name)??h(e.toolName)??h(e.tool)}function Gpe(e){let n=Uz(e);if(n!==void 0)return n==="linzumi"?"accept":"decline";let t=Bz(e);return t!==void 0&&(t.startsWith("linzumi_")||t.startsWith("mcp__linzumi__"))?"accept":"decline"}async function Zpe(e,n,t,r,o){let i=n.approvalPromptChain.then(async()=>{if(Nz(n.runtimeSettings,t.method))return e.log("codex.approval_request_auto_approved",{request_id:String(t.id),source_seq:fc(n.turn,r)??null,turn_id:r,method:t.method,reason:"full_access_enabled_while_queued"}),{decision:"accept"};let s=fc(n.turn,r);if(s===void 0||n.kandanThreadId===void 0){let u=`Codex approval request has no active Kandan source message: ${t.method}`;throw await Qz(e,n,r,u,o),new Error(u)}let a=sF(t);n.activeProcessingState={seq:s,reason:"awaiting approval",approval:a};let d=new Promise((u,c)=>{let l={requestId:a.requestId,sourceSeq:s,turnId:r,resolve:u,reject:c};n.pendingApprovalRequests.set(vy(l.requestId,l.sourceSeq),l)});return await Gn(e,n.kandanThreadId,s,{status:"processing",reason:"awaiting approval",approval:a},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_pending",{request_id:a.requestId,source_seq:s,turn_id:r,method:t.method}),d});return n.approvalPromptChain=i.then(()=>{},()=>{}),i}function Qpe(e,n){let t=[...e.pendingApprovalRequests.values()];e.pendingApprovalRequests.clear(),t.forEach(r=>r.reject(n))}function Qy(e,n,t){for(let[r,o]of e.pendingApprovalRequests)o.turnId===n&&(e.pendingApprovalRequests.delete(r),o.reject(t))}async function Xpe(e,n){if(n.runtimeSettings.approvalPolicy!=="never"||n.runtimeSettings.sandbox!=="danger-full-access"||n.pendingApprovalRequests.size===0)return;let t=[...n.pendingApprovalRequests.values()];n.pendingApprovalRequests.clear();let r;for(let o of t)o.resolve({decision:"accept"}),(r===void 0||o.sourceSeq>r)&&(r=o.sourceSeq);r!==void 0&&(n.activeProcessingState={seq:r,reason:"streaming response"});for(let o of t)n.kandanThreadId!==void 0&&await Gn(e,n.kandanThreadId,o.sourceSeq,{status:"processing",reason:"streaming response"},void 0,void 0,n.codexThreadId),e.log("codex.approval_request_auto_approved",{request_id:o.requestId,source_seq:o.sourceSeq,reason:"full_access_enabled"})}async function Ype(e,n,t,r,o){if(!Xy(n,t))return;let i=mL(r);if(i===void 0)return;let s=e.options.tuiInputMirrorRetryDelaysMs??Wle;for(let a=0;;a+=1)try{await efe(e,n,t,i,o);return}catch(d){let u=d instanceof Error?d.message:String(d),c=s[a];if(e.log("codex.tui_input_mirror_retry",{turn_id:t,item_key:i.itemKey,attempt:a+1,retry_in_ms:c??null,message:u}),c===void 0)throw n.pipeline?.notifyTurnMappingFailed(t,`local TUI input mirror failed: ${u}`),d;if(await Zs(c),n.closed)return}}function Zs(e){return new Promise(n=>{setTimeout(n,e)})}async function efe(e,n,t,r,o){let i=tfe(t,r.body);if(Jz(n,i)!==void 0){rfe(n,i,r.itemKey);return}ufe(e,n);let s=n.kandanThreadId,a=n.codexThreadId;if(s===void 0||a===void 0)return;let d=e.options.channelSession,u=yfe(n,t)??n.runtimeSettings,c=await so(e.kandan,e.topic,"session:post_thread_user_message",{workspace:d.workspaceSlug,channel:d.channelSlug,thread_id:s,body:r.body,payload:{...td(e.options,e.instanceId,"tui_input",a,o,void 0,void 0,u),...n.rootSeq===void 0?{}:{reply_to_seq:n.rootSeq}},client_message_id:nfe(e.instanceId,t,r.itemKey)}),l=Y(c.seq);if(l===void 0)throw new Error("session:post_thread_user_message reply carried no seq for the TUI input mirror");Lk(n,l,u),Ok(n,t,l),Kz(n,{logicalKey:i,turnId:t,seq:l,itemKeys:[r.itemKey]}),e.log("kandan.tui_input_mirrored",{turn_id:t,item_key:r.itemKey,actor_user_id:o.runnerIdentity.actorUserId??null,actor_slug:o.runnerIdentity.actorUsername??null})}function nfe(e,n,t){return`local-codex-tui-${bz("sha256").update(`${e}:${n}:${t}`).digest("hex").slice(0,32)}`}function tfe(e,n){return`local-codex-tui-input:${bz("sha256").update(`${e}:${n.trim()}`).digest("hex").slice(0,32)}`}function Jz(e,n){return gc(e.mirroredTuiInputProjections,n)}function Kz(e,n){of(e.mirroredTuiInputProjections,n.logicalKey,n)}function rfe(e,n,t){let r=Jz(e,n);r===void 0||r.itemKeys.includes(t)||Kz(e,{...r,itemKeys:[...r.itemKeys,t]})}function Vz(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}function Wz(e){let n=A(e.thread),t=A(e.turn);return h(e.threadId)??h(e.thread_id)??h(n?.id)??h(t?.threadId)??h(t?.thread_id)}function Hz(e,n,t){return n!==void 0?e.codexThreadId===n:t===void 0?!1:ad(e.turn)===t||Xy(e,t)}function ofe(e,n,t){if(t===void 0||n.codexThreadId!==t)return;switch(n.turn.status){case"active":case"completing":return sfe(n,t,n.turn.queuedSeq),Qy(n,n.turn.turnId,new Error("Codex turn completed with thread-only notification")),e.log("codex.turn_completion_inferred",{thread_id:t,turn_id:n.turn.turnId,queued_seq:n.turn.queuedSeq,turn_status:n.turn.status}),n.turn.turnId;case"idle":case"starting":break}let r=ife(n,t);if(r!==void 0){e.log("codex.thread_only_completion_after_interrupt_ignored",{thread_id:t,interrupted_turn_id:r.interruptedTurnId,interrupted_queued_seq:r.interruptedQueuedSeq,turn_status:n.turn.status});return}switch(n.turn.status){case"idle":case"starting":e.log("codex.turn_completion_without_turn_id",{thread_id:t,turn_status:n.turn.status,queued_seq:n.turn.status==="starting"?n.turn.queuedSeq:null});return}}function ife(e,n){let t=e.pendingInterruptedThreadOnlyCompletions.findIndex(o=>o.threadId===n);if(t<0)return;let[r]=e.pendingInterruptedThreadOnlyCompletions.splice(t,1);return r}function gz(e,n,t){e.pendingInterruptedThreadOnlyCompletions=e.pendingInterruptedThreadOnlyCompletions.filter(r=>n!==void 0&&r.threadId!==n?!0:r.interruptedTurnId!==t)}function sfe(e,n,t){e.pendingInterruptedThreadOnlyCompletions=e.pendingInterruptedThreadOnlyCompletions.filter(r=>r.threadId!==n||r.interruptedQueuedSeq>=t)}function afe(e,n,t,r){if(!(r===void 0||n.codexThreadId!==r))switch(e){case"response_item":return Gg(t)===void 0?void 0:ad(n.turn);case"item/agentMessage/delta":case"item/completed":case"warning":case"error":return ad(n.turn);default:return}}function dfe(e,n,t,r){e.options.launchTui!==!0||n.codexThreadId!==t||n.turn.status!=="idle"||(ex(n.localTuiTurnIds,r,So),gfe(n,r),n.kandanThreadId!==void 0&&Wk(e,n,n.kandanThreadId),e.log("codex.tui_turn_started",{turn_id:r,codex_thread_id:t}))}function Xy(e,n){return e.localTuiTurnIds.has(n)}function Gz(e){return e.localTuiTurnIds.size>0}function ufe(e,n){n.kandanThreadId!==void 0||n.rootSeq===void 0||(n.kandanThreadId=Vy(),zk(e,n))}function Ri(e,n){e.localTuiTurnIds.delete(n)}function cfe(e,n,t){e.pendingTuiInputMirrors.delete(n),e.pendingTuiInputMirrors.set(n,t),ps(e.pendingTuiInputMirrors,So)}function lfe(e,n){e.pendingTuiInputMirrors.delete(n)}function Ok(e,n,t){of(e.turnReplyTargets,n,{turnId:n,replyToSeq:t}),e.pipeline?.notifyTurnMappingReady(n)}function pd(e,n){CF(e.turnReplyTargets,n)}function pfe(e,n){return gc(e.turnReplyTargets,n)?.replyToSeq}function Lk(e,n,t){of(e.turnRuntimeSettingsBySourceSeq,n.toString(),t)}function ffe(e,n){return n===void 0?e.runtimeSettings:gc(e.turnRuntimeSettingsBySourceSeq,n.toString())??{}}function mfe(e,n){if(n!==void 0)return gc(e.turnRuntimeSettingsBySourceSeq,n.toString())}function hfe(e){return{model_provider:e.modelProvider??null,model:e.model??null,reasoning_effort:e.reasoningEffort??null,sandbox:e.sandbox??null,approval_policy:e.approvalPolicy??null,fast:e.fast??!1,allow_port_forwarding_by_default:e.allowPortForwardingByDefault??null}}function gfe(e,n){of(e.localTuiTurnRuntimeSettingsByTurnId,n,e.runtimeSettings)}function yfe(e,n){return gc(e.localTuiTurnRuntimeSettingsByTurnId,n)}async function xfe(e,n,t,r,o){if(n.kandanThreadId===void 0)return;let i=e.options.channelSession;await so(e.kandan,e.topic,"session:post_thread_message",{workspace:i.workspaceSlug,channel:i.channelSlug,thread_id:n.kandanThreadId,body:"[codex reconnected to new thread]",payload:td(e.options,e.instanceId,"availability",o,t),client_message_id:`local-codex-rebound-${e.instanceId}-${o}`})}function _fe(e){return e instanceof Error?e.message.includes("turn/start failed: thread not found")||e.message.includes("turn/start failed: invalid thread id"):!1}function Ei(e,n){e.forwardedTurnIds.has(n)||ex(e.forwardedTurnIds,n,So)}function Yy(e,n){e.recoveredTurnIds.has(n)||ex(e.recoveredTurnIds,n,So)}function wfe(e,n){for(e.stopAbortedStartingSeqs.delete(n),e.stopAbortedStartingSeqs.add(n);e.stopAbortedStartingSeqs.size>bfe;){let t=e.stopAbortedStartingSeqs.values().next().value;if(t===void 0)return;e.stopAbortedStartingSeqs.delete(t)}}function yz(e,n){return e.stopAbortedStartingSeqs.delete(n)}function ex(e,n,t){e.delete(n),e.add(n),vfe(e,t)}function vfe(e,n){for(;e.size>n;){let t=e.values().next().value;if(t===void 0)return;e.delete(t)}}function ps(e,n){for(;e.size>n;){let t=e.keys().next().value;if(t===void 0)return;e.delete(t)}}function Sfe(e,n){for(;e.length>n;)e.shift()}async function Di(e,n){if(Ife(n),!n.codexTypingActive||(n.codexTypingActive=!1,n.kandanThreadId===void 0))return;let t=e.options.channelSession;await vc(e.kandan,e.topic,"session:typing_stop",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId,instance_id:e.instanceId,codex_thread_id:n.codexThreadId??null},e.log)}function Wk(e,n,t){n.codexTypingActive=!0;let r=()=>{if(n.typingHeartbeatInFlight)return;let o=e.options.channelSession;n.typingHeartbeatInFlight=!0,vc(e.kandan,e.topic,"session:typing_start",{workspace:o.workspaceSlug,channel:o.channelSlug,thread_id:t,instance_id:e.instanceId,codex_thread_id:n.codexThreadId??null},e.log).then(()=>Yz(e,n)).catch(i=>{e.log("kandan.typing_heartbeat_failed",{message:i instanceof Error?i.message:String(i)})}).finally(()=>{n.typingHeartbeatInFlight=!1})};r(),n.typingHeartbeat===void 0&&(n.typingHeartbeat=setInterval(r,Cle()))}function Zz(e,n,t,r){if(r===void 0||!kfe(n,r)||n.pendingCompletionTypingStops.has(r))return;let o=Di(e,n).catch(i=>{e.log("kandan.typing_stop_after_completion_failed",{turn_id:r,message:i instanceof Error?i.message:String(i)})});n.pendingCompletionTypingStops.set(r,o),ps(n.pendingCompletionTypingStops,So),o.finally(()=>{n.pendingCompletionTypingStops.get(r)===o&&n.pendingCompletionTypingStops.delete(r),Tr(e,n,t)})}function kfe(e,n){if(e.forwardedTurnIds.has(n))return!1;if(Xy(e,n))return!0;switch(e.turn.status){case"active":case"completing":return e.turn.turnId===n;case"idle":case"starting":return!1}}function Cfe(e,n){n===void 0||e.forwardedTurnIds.has(n)||ex(e.pendingStartingCompletionTurnIds,n,So)}function Tfe(e,n,t,r){n.pendingStartingCompletionTurnIds.delete(r)&&Zz(e,n,t,r)}async function Pfe(e,n){let t=e.pendingCompletionTypingStops.get(n);if(t!==void 0)try{await t}finally{e.pendingCompletionTypingStops.get(n)===t&&e.pendingCompletionTypingStops.delete(n)}}function Ife(e){e.typingHeartbeat!==void 0&&(clearInterval(e.typingHeartbeat),e.typingHeartbeat=void 0)}async function Gs(e,n,t,r="acked"){n.threadId!==void 0&&await Gn(e,n.threadId,n.seq,t,n.actorSlug,n.actorUserId,void 0,r)}async function Sf(e,n,t,r,o="acked"){if(n.kandanThreadId!==void 0){if(r.status==="processed"||r.status==="failed"){await Tf(e,n,n.kandanThreadId,t.seq,r,t.actorSlug,t.actorUserId,n.codexThreadId);return}await Gn(e,n.kandanThreadId,t.seq,r,t.actorSlug,t.actorUserId,n.codexThreadId,o)}}async function xz(e,n,t,r,o){let i=e.options.cloudTerminalStatePushRetryDelaysMs??AS,s=i[0]??Jle,a=e.options.cloudTerminalConnectionWaitBudgetMs??Kle,d=0,u=0,c;for(;;)try{return await Gn(e,n,t,r,void 0,void 0,o,"must_ack"),!0}catch(l){if(NS(l)){u+=1;let m=Date.now();c??=m;let f=m-c;if(f>=a)return e.log("codex.cloud_terminal_state_connection_wait_exhausted",{seq:t,status:r.status,connection_wait_attempts:u,elapsed_ms:f,budget_ms:a}),!1;e.log("codex.cloud_terminal_state_connection_wait",{seq:t,status:r.status,connection_wait_attempts:u,elapsed_ms:f}),s>0&&await Zs(s);continue}let p=i[d];if(e.log("codex.cloud_terminal_state_push_failed",{seq:t,status:r.status,attempt:d+1,attempts_remaining:i.length-d,message:l instanceof Error?l.message:String(l)}),d+=1,p===void 0)return!1;p>0&&await Zs(p)}}async function Gn(e,n,t,r,o,i,s,a="acked"){let d=e.options.channelSession,u={workspace:d.workspaceSlug,channel:d.channelSlug,thread_id:n,instance_id:e.instanceId,...s===void 0?{}:{codex_thread_id:s},seq:t,status:r.status,..."reason"in r?{reason:r.reason}:{},...r.status==="failed"&&r.retryable===!0?{retryable:!0}:{},...r.status==="failed"&&bo(r.fate)?{fate:r.fate}:{},...r.status==="failed"&&r.ladder!==void 0?{ladder:r.ladder}:{},...r.status==="processing"&&r.approval!==void 0?{approval_request_id:r.approval.requestId,approval_kind:r.approval.kind,approval_summary:r.approval.summary,...r.approval.port===void 0?{}:{approval_port:r.approval.port},...r.approval.pid===void 0?{}:{approval_pid:r.approval.pid},...r.approval.command===void 0?{}:{approval_command:r.approval.command},...r.approval.cwd===void 0?{}:{approval_cwd:r.approval.cwd},...r.approval.processName===void 0?{}:{approval_process_name:r.approval.processName},...r.approval.processIconKey===void 0?{}:{approval_process_icon_key:r.approval.processIconKey},...r.approval.processIconPath===void 0?{}:{approval_process_icon_path:r.approval.processIconPath},...r.approval.reason===void 0?{}:{approval_reason:r.approval.reason},...r.approval.choices===void 0?{}:{approval_choices:r.approval.choices},...r.approval.allowedActorSlug===void 0?{}:{approval_allowed_actor_slug:r.approval.allowedActorSlug},...r.approval.allowedActorUserId===void 0?{}:{approval_allowed_actor_user_id:r.approval.allowedActorUserId}}:{},...o===void 0?{}:{actor_slug:o},...i===void 0?{}:{actor_user_id:i},...Rfe(n)};if(a==="must_ack"){await so(e.kandan,e.topic,"message_state",u);return}await vc(e.kandan,e.topic,"message_state",u,e.log,a)}function Rfe(e){let n=Ag(e);return n===void 0?{}:{traceparent:n}}async function Qz(e,n,t,r,o){Qy(n,t,new Error(r));let i=fc(n.turn,t);i!==void 0&&n.kandanThreadId!==void 0&&(await Tf(e,n,n.kandanThreadId,i,{status:"failed",reason:r},void 0,void 0,n.codexThreadId),fd(n,i)),Ri(n,t),Ei(n,t),cF(n.turn,t)&&(n.turn={status:"idle"}),await Di(e,n),await Tr(e,n,o)}function Efe(e,n,t){let r=e.pendingStartingProcessingReasons.at(-1);r!==void 0&&r.turnId===n&&r.reason===t||e.pendingStartingProcessingReasons.push({turnId:n,reason:t})}function Dfe(e,n,t){let r=n.pendingStartingProcessingReasons;if(r.length!==0){n.pendingStartingProcessingReasons=[];for(let o of r)o.turnId===t&&Xz(e,n,t,o.reason).catch(i=>{e.log("kandan.message_state_refresh_failed",{turn_id:t,reason:o.reason,message:i instanceof Error?i.message:String(i)})})}}async function Xz(e,n,t,r){let o=fc(n.turn,t);o===void 0||n.kandanThreadId===void 0||n.activeProcessingState?.seq===o&&n.activeProcessingState.reason===r||n.activeProcessingState?.seq===o&&n.activeProcessingState.reason==="awaiting approval"||(n.activeProcessingState={seq:o,reason:r},await Gn(e,n.kandanThreadId,o,{status:"processing",reason:r},void 0,void 0,n.codexThreadId))}async function Yz(e,n){let t=n.activeProcessingState;t===void 0||n.kandanThreadId===void 0||t.reason==="awaiting approval"&&t.approval.kind==="local_runner_port_forward"||await Gn(e,n.kandanThreadId,t.seq,ky(t),void 0,void 0,n.codexThreadId)}function fd(e,n){e.activeProcessingState?.seq===n&&(e.activeProcessingState=void 0)}async function _z(e,n,t=void 0){let r=await iS({cwd:e.options.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,attachmentDirectoryName:"local-codex-attachments"},n),o=sS(VS(n),r),i=WO(r);return[...t===void 0?[]:[t],{type:"text",text:o},...i]}function Mfe(e){return{modelProvider:e.channelSession.modelProvider,model:e.channelSession.model,reasoningEffort:e.channelSession.reasoningEffort,approvalPolicy:ec(e.channelSession.approvalPolicy,e.channelSession.sandbox),sandbox:e.channelSession.sandbox,fast:e.fast,allowPortForwardingByDefault:e.channelSession.allowPortForwardingByDefault}}function Afe(e,n){let t=Dk(e.sandbox,n,"sandbox");return{modelProvider:e.modelProvider,model:Dk(e.model,n,"model"),reasoningEffort:Dk(e.reasoningEffort,n,"reasoningEffort"),approvalPolicy:$fe(e.approvalPolicy,n,t),sandbox:t,fast:n.fast??e.fast,allowPortForwardingByDefault:!0}}function $fe(e,n,t){return Object.prototype.hasOwnProperty.call(n,"approvalPolicy")?ec(n.approvalPolicy??void 0,t):ec(e,t)}function Dk(e,n,t){return Object.prototype.hasOwnProperty.call(n,t)?n[t]??void 0:e}function eq(e,n){return{...e,fast:n.fast,channelSession:{...e.channelSession,modelProvider:n.modelProvider,model:n.model,reasoningEffort:n.reasoningEffort,approvalPolicy:n.approvalPolicy,sandbox:n.sandbox,allowPortForwardingByDefault:n.allowPortForwardingByDefault}}}async function Ofe(e,n){let t=e.options.channelSession;if(n.kandanThreadId===void 0||n.codexThreadId===void 0)throw new Error("cannot publish local Codex settings before thread binding");await so(e.kandan,e.topic,"session:settings",{workspace:t.workspaceSlug,channel:t.channelSlug,thread_id:n.kandanThreadId,codex_thread_id:n.codexThreadId,modelProvider:n.runtimeSettings.modelProvider??null,model:n.runtimeSettings.model??null,reasoningEffort:n.runtimeSettings.reasoningEffort??null,approvalPolicy:n.runtimeSettings.approvalPolicy??null,sandbox:n.runtimeSettings.sandbox??null,fast:n.runtimeSettings.fast??null,allowPortForwardingByDefault:n.runtimeSettings.allowPortForwardingByDefault??null,updated_at:new Date().toISOString()})}function Lfe(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);let n=h(A(A(e.result)?.thread)?.id);if(n===void 0)throw new Error("thread/start response did not include thread.id");return n}function jfe(e){if("error"in e)throw new Error(`turn/start failed: ${e.error.message}`);let n=h(A(A(e.result)?.turn)?.id);if(n===void 0)throw new Error("turn/start response did not include turn.id");return n}async function Ffe(e,n){if(n!==void 0)try{let t=await e.codex.request("thread/archive",{threadId:n});if("error"in t)throw new Error(`thread/archive failed: ${t.error.message}`);e.log("codex.thread_archived",{codex_thread_id:n})}catch(t){e.log("codex.thread_archive_failed",{codex_thread_id:n,message:t instanceof Error?t.message:String(t)})}}async function jk(e,n){let t=await e.request("thread/start",{cwd:n.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",...zfe(n),...$p(n)});return Lfe(t)}function zfe(e){let n=e.channelSession.developerPrompt;return n===void 0?{}:{developerInstructions:Lp({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:e.mcpAvailable!==!1,devServicesAvailable:e.devServicesAvailable===!0,developerPrompt:n,linzumiContext:Ks(e.channelSession.linzumiContext)})}}async function so(e,n,t,r,o){let i=await e.push(n,t,r,o);if(Z(i)&&i.status==="ok"&&Z(i.response))return i.response;throw new Error(`kandan push failed: ${t}: ${JSON.stringify(i).slice(0,500)}`)}async function vc(e,n,t,r,o,i="acked"){if(i==="acked"){try{await so(e,n,t,r)}catch(u){o("kandan.optional_push_failed",{event:t,message:u instanceof Error?u.message:String(u)})}return}let s=()=>{},a=new Promise(u=>{s=u}),d=(async()=>{try{await so(e,n,t,r,()=>s())}catch(u){o("kandan.optional_push_failed",{event:t,message:u instanceof Error?u.message:String(u)})}finally{s()}})();await a}var kle,XF,YF,ez,nz,tz,rz,Mle,Ale,oz,Ole,sz,Ny,Uy,Ule,Ble,So,By,Jle,Kle,bc,az,Sz,xf,Wle,Gle,epe,uz,Npe,lz,_f,qy,pz,Upe,bfe,Hk=F(()=>{"use strict";Xu();eS();Lg();Ng();pS();mS();zp();DL();US();$S();uy();Hn();yy();by();nc();GS();Cy();nk();lF();xF();ic();pk();$n();TF();Gu();mf();Oy();Sk();Tk();_c();kle=2e3,XF=5e3;YF=3e4;ez=15e4;nz=1e4;tz=3e5;rz=5e3;Mle=250,Ale=750;oz=2e3,Ole=50;sz=12e4;Ny=class extends Error{constructor(n,t){super(`Codex ${n} did not reply within ${t}ms (start request timed out)`),this.name="CodexStartRequestTimeoutError"}};Uy=class extends Error{constructor(n,t){super(`Codex ${n} did not reply within ${t}ms (completion snapshot request timed out)`),this.name="CodexCompletionSnapshotRequestTimeoutError"}};Ule=256,Ble=5,So=64,By=1024,Jle=1e3,Kle=12e4,bc=new Set,az=1,Sz=[1e3,5e3,15e3],xf={baseDelayMs:15e3,maxDelayMs:6e4};Wle=[1e3,5e3,15e3];Gle=new Set(["commandExecution","terminalInput","mcpToolCall"]);epe=1e4;uz=15e3;Npe=3,lz=1500,_f=64,qy=3,pz=1500,Upe=64;bfe=64});import{existsSync as qfe,readFileSync as Nfe}from"node:fs";import{Agent as Ufe}from"undici";import Bfe from"ws";function ei(){return Jfe(process.env.KANDAN_TLS_CA_FILE)}function Jfe(e){if(e===void 0||e.trim()==="")return;let n=e.trim();if(!qfe(n))throw new Error(`KANDAN_TLS_CA_FILE does not exist: ${n}`);let t=Nfe(n,"utf8");return{caFile:n,ca:t,dispatcher:new Ufe({connect:{ca:t}})}}function Sc(e){return e===void 0?fetch:((n,t)=>{let r={...t??{},dispatcher:e.dispatcher};return fetch(n,r)})}function kc(e,n=Bfe){if(e!==void 0)return(t,r)=>{let o={ca:e.ca};return r===void 0?new n(t,o):new n(t,r,o)}}var nx=F(()=>{"use strict"});function tx(e,n,t,r){let o=e===void 0?Number.NaN:Number.parseInt(e,10);return Number.isFinite(o)?Math.min(r,Math.max(t,o)):n}function nq(e){return{maxConcurrent:tx(e.LINZUMI_CLAUDE_RESUME_MAX_CONCURRENT_STARTS,2,1,64),spacingMs:tx(e.LINZUMI_CLAUDE_RESUME_START_SPACING_MS,2e3,0,6e4),maxWaitMs:tx(e.LINZUMI_CLAUDE_RESUME_START_MAX_WAIT_MS,6e4,1e3,6e5),defaultRateLimitBackoffMs:tx(e.LINZUMI_CLAUDE_RESUME_429_BACKOFF_MS,5e3,1e3,6e4)}}function tq(e,n=Kfe){let t=0,r,o=[],i,s=(u,c)=>{if(u.settled)return;u.settled=!0,u.timeoutHandle!==void 0&&(n.clearTimeout(u.timeoutHandle),u.timeoutHandle=void 0);let l=o.indexOf(u);l!==-1&&o.splice(l,1),u.resolve(c)},a=u=>{i===void 0&&(i=n.setTimeout(()=>{i=void 0,d()},Math.max(0,u)))},d=()=>{let u=n.now();if(r!==void 0&&u<r){o.length>0&&a(r-u);return}for(r=void 0;o.length>0&&t<e.maxConcurrent;){let c=o.shift();c===void 0||c.settled||(t+=1,n.setTimeout(()=>{t-=1,d()},e.spacingMs),s(c,{waitedMs:u-c.enqueuedAtMs,timedOut:!1}))}};return{acquire:()=>new Promise(u=>{let c={enqueuedAtMs:n.now(),resolve:u,timeoutHandle:void 0,settled:!1};c.timeoutHandle=n.setTimeout(()=>{s(c,{waitedMs:e.maxWaitMs,timedOut:!0})},e.maxWaitMs),o.push(c),d()}),notifyRateLimited:u=>{let c=Math.min(6e4,Math.max(1e3,u.retryAfterMs??e.defaultRateLimitBackoffMs)),l=n.now()+c;(r===void 0||l>r)&&(r=l),o.length>0&&a(c)},pendingCount:()=>o.filter(u=>!u.settled).length,pausedUntilMs:()=>r}}function rq(e,n){let t=Array.isArray(e)?e[0]:e;if(t===void 0||t.trim()==="")return;let r=Number.parseInt(t.trim(),10);if(Number.isFinite(r)&&`${r}`===t.trim())return r<0?void 0:r*1e3;let o=Date.parse(t);if(!Number.isNaN(o))return Math.max(0,o-n)}var Kfe,Gk=F(()=>{"use strict";Kfe={now:()=>Date.now(),setTimeout:(e,n)=>{let t=setTimeout(e,n);return t.unref?.(),t},clearTimeout:e=>{clearTimeout(e)}}});import{createServer as Vfe}from"node:http";import{randomBytes as oq}from"node:crypto";import{request as Wfe}from"undici";function aq(e,n){for(let t of n){let r=e[t];if(Array.isArray(r))return r.join(", ");if(typeof r=="string")return r}return null}async function dq(e){let n=e.now??Date.now,t=e.upstreamBaseUrl.replace(/\/+$/,""),o=`/llm-proxy-session/${oq(16).toString("hex")}`,i=e.initialToken,s=n(),d=Vfe((p,m)=>{(async()=>{let f=p.url??"";if(!f.startsWith(`${o}/`)&&f!==o){m.writeHead(404,{"content-type":"application/json"}),m.end(JSON.stringify({error:"not_found"}));return}let y=f===o?"/":f.slice(o.length),x=`${t}${y}`,b=oq(8).toString("hex"),S=n();e.debugTrace?.record("llm-proxy-relay","relay.request_start",{request_id:b,debug_trace_id:e.debugTraceId??null,method:p.method??null,path:y});let v={};for(let[R,P]of Object.entries(p.headers)){if(P===void 0)continue;let O=R.toLowerCase();Qfe.has(O)||O!==iq&&O!==sq&&(v[O]=Array.isArray(P)?P.join(", "):P)}e.debugTraceId!==void 0&&(v[sq]=e.debugTraceId),v[iq]=i;let w=(p.method??"GET").toUpperCase(),k=w!=="GET"&&w!=="HEAD";try{let R=await Wfe(x,{method:w,headers:v,...k?{body:p}:{},...e.dispatcher===void 0?{}:{dispatcher:e.dispatcher},headersTimeout:0,bodyTimeout:0}),P=n()-S;e.debugTrace?.record("llm-proxy-relay","relay.upstream_headers",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,status:R.statusCode,ttfb_ms:P,upstream_request_id:aq(R.headers,["x-request-id","request-id","x-amzn-requestid","cf-ray","openai-request-id"]),retry_after:aq(R.headers,["retry-after"])});let O={};for(let[J,K]of Object.entries(R.headers))K!==void 0&&(Xfe.has(J.toLowerCase())||(O[J]=K));if(R.statusCode===429){let J=R.headers["retry-after"],K=rq(Array.isArray(J)?J[0]:J,n());e.log("llm_proxy_relay.upstream_rate_limited",{target_path:y,retry_after_ms:K??null});try{e.onUpstreamRateLimited?.({retryAfterMs:K})}catch{}}m.writeHead(R.statusCode,O);let E=R.body,j=0,z=!1,M=(J,K)=>{z||(z=!0,e.debugTrace?.record("llm-proxy-relay","relay.response_finished",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,status:R.statusCode,outcome:J,detail:K??null,ttfb_ms:P,total_ms:n()-S,response_bytes:j}))};E.on("data",J=>{j+=Buffer.byteLength(J)}),E.on("error",J=>{M("upstream_body_error",J instanceof Error?J.message:String(J)),m.destroy()}),m.on("finish",()=>{M("completed")}),m.on("close",()=>{m.writableEnded||M("client_closed"),E.destroy()}),E.pipe(m)}catch(R){let P=R instanceof Error?R.message:String(R);e.debugTrace?.record("llm-proxy-relay","relay.upstream_error",{request_id:b,debug_trace_id:e.debugTraceId??null,path:y,total_ms:n()-S,message:P}),e.log("llm_proxy_relay.upstream_error",{target_path:y,message:P}),m.headersSent||m.writeHead(502,{"content-type":"application/json"}),m.end(JSON.stringify({error:"llm_proxy_relay_upstream_error",message:P}))}})().catch(()=>{m.headersSent||m.writeHead(502),m.end()})}),u=new Set;d.on("connection",p=>{u.add(p),p.on("close",()=>u.delete(p))}),await new Promise((p,m)=>{d.once("error",m),d.listen(0,"127.0.0.1",()=>{d.removeListener("error",m),p()})});let c=d.address();if(c===null||typeof c!="object")throw d.close(),new Error("llm proxy credential relay failed to bind a loopback port");return{baseUrl:`http://127.0.0.1:${c.port}${o}`,setToken:p=>{i=p,s=n()},currentToken:()=>i,tokenAgeMs:()=>n()-s,close:()=>new Promise(p=>{d.close(()=>p());for(let m of u)m.destroy()})}}function uq(e){let n=e.refreshAgeMs??Gfe,t=e.checkIntervalMs??Zfe,r=!1,o,i=async()=>{if(!r&&!(e.relay.tokenAgeMs()<n))return o!==void 0||(o=(async()=>{try{let a=e.relay.tokenAgeMs(),d=await e.mint();d!==void 0&&typeof d.token=="string"&&d.token!==""?(e.relay.setToken(d.token),typeof d.maxAgeMs=="number"&&Number.isFinite(d.maxAgeMs)&&d.maxAgeMs>0&&(n=Math.floor(d.maxAgeMs*3/4)),e.log("llm_proxy_relay.token_refreshed",{previous_token_age_ms:a,next_refresh_age_ms:n})):e.log("llm_proxy_relay.token_refresh_failed",{token_age_ms:a,message:"mint returned no token"})}catch(a){e.log("llm_proxy_relay.token_refresh_failed",{token_age_ms:e.relay.tokenAgeMs(),message:a instanceof Error?a.message:String(a)})}finally{o=void 0}})()),o},s=setInterval(()=>{i()},t);return s.unref?.(),{stop:()=>{r=!0,clearInterval(s)},tick:i,refreshAgeMs:()=>n}}var Hfe,Gfe,Zfe,iq,sq,Qfe,Xfe,cq=F(()=>{"use strict";Gk();Hfe=28800*1e3,Gfe=Math.floor(Hfe*3/4),Zfe=300*1e3,iq="x-linzumi-llm-proxy-token",sq="x-linzumi-debug-trace-id",Qfe=new Set(["host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","content-length"]),Xfe=new Set(["connection","keep-alive","transfer-encoding","trailer","upgrade","content-length"])});function eme(e){let n=e[Yfe]?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="no"||n==="off")}function nme(e){return lq(e.ANTHROPIC_API_KEY)||lq(e.ANTHROPIC_AUTH_TOKEN)?"user_api_key":"subscription_oauth"}function pq(e){let n=nme(e.env);return e.llmProxyBindingPresent?e.hostedLinzumiAgentContext?{lane:"llm_proxy",credentialClass:n,reason:"hosted_linzumi_agent_context"}:n==="user_api_key"?{lane:"llm_proxy",credentialClass:n,reason:"user_api_key"}:e.routedNonAnthropicModel?{lane:"llm_proxy",credentialClass:n,reason:"non_anthropic_routed_model"}:eme(e.env)?{lane:"direct_anthropic",credentialClass:n,reason:"subscription_oauth"}:{lane:"llm_proxy",credentialClass:n,reason:"direct_connection_disabled"}:{lane:"direct_anthropic",credentialClass:n,reason:"no_llm_proxy_binding"}}function lq(e){return e!==void 0&&e.trim()!==""}var Yfe,fq=F(()=>{"use strict";Yfe="LINZUMI_CLAUDE_DIRECT_CONNECTION"});import{randomUUID as tme}from"node:crypto";function gq(e){let n=e.lane==="direct_anthropic",t=e.mintUsageId??(()=>tme()),r,o=mq(),i=hq(),s,a=0,d=(l,p)=>{l!==r&&(r=l,o=mq());let m={inputTokens:p.inputTokens??o.inputTokens,outputTokens:p.outputTokens??o.outputTokens,cacheReadInputTokens:p.cacheReadInputTokens??o.cacheReadInputTokens,cacheCreationInputTokens:p.cacheCreationInputTokens??o.cacheCreationInputTokens,totalCostUsd:p.totalCostUsd??o.totalCostUsd};i={inputTokens:i.inputTokens+rx(m.inputTokens-o.inputTokens),outputTokens:i.outputTokens+rx(m.outputTokens-o.outputTokens),cacheReadInputTokens:i.cacheReadInputTokens+rx(m.cacheReadInputTokens-o.cacheReadInputTokens),cacheCreationInputTokens:i.cacheCreationInputTokens+rx(m.cacheCreationInputTokens-o.cacheCreationInputTokens),totalCostUsd:m.totalCostUsd===void 0?i.totalCostUsd:(i.totalCostUsd??0)+Math.max(0,m.totalCostUsd-(o.totalCostUsd??0))},o=m},u=(l,p)=>{let m=i,f=a,y=s??t(),x=m.inputTokens+m.outputTokens+m.cacheReadInputTokens+m.cacheCreationInputTokens>0||(m.totalCostUsd??0)>0;s=void 0,a=0;let b=l==="completed"?x||f>=ome:x;if(i=hq(),!b)return;let S=p??r,v={workspace:e.workspace,channel:e.channel,thread_id:e.threadId,usage_id:y,model:e.model??"default",provider:"anthropic",agent_provider:"claude-code",model_transport_lane:e.lane,turn_outcome:l,usage:{input_tokens:m.inputTokens,output_tokens:m.outputTokens,cache_read_input_tokens:m.cacheReadInputTokens,cache_creation_input_tokens:m.cacheCreationInputTokens,...m.totalCostUsd===void 0||m.totalCostUsd<=0?{}:{total_cost_usd:m.totalCostUsd}},stream_event_count:f,...S===void 0?{}:{claude_session_id:S}};Promise.resolve().then(()=>e.push(rme,v)).then(()=>{e.log("claude_code.token_usage_reported",{linzumi_thread_id:e.threadId,usage_id:y,turn_outcome:l,input_tokens:m.inputTokens,output_tokens:m.outputTokens,cache_read_input_tokens:m.cacheReadInputTokens,cache_creation_input_tokens:m.cacheCreationInputTokens})}).catch(w=>{e.log("claude_code.token_usage_report_failed",{linzumi_thread_id:e.threadId,usage_id:y,turn_outcome:l,message:w instanceof Error?w.message:String(w)})})};return{observeTranscriptEvent:l=>{if(n)try{switch(s===void 0&&(s=t()),a+=1,l.type){case"usage":d(l.sessionId,l.usage);break;case"turn_completed":case"session_completed":l.usage!==void 0&&d(l.sessionId,l.usage),u("completed",l.sessionId);break;case"turn_interrupted":u("interrupted",l.sessionId);break;case"session_failed":u("failed",l.sessionId);break;default:break}}catch(p){e.log("claude_code.token_usage_emitter_failed",{linzumi_thread_id:e.threadId,event_type:l.type,message:p instanceof Error?p.message:String(p)})}}}}function mq(){return{inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0,totalCostUsd:void 0}}function hq(){return{inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0,totalCostUsd:void 0}}function rx(e){return e>0?e:0}var rme,ome,yq=F(()=>{"use strict";rme="token_usage",ome=10});function xq(e,n){return e.find(t=>t.codexThreadId===n.codexThreadId&&t.kandanThreadId!==n.kandanThreadId)}function _q(e){let n=new Map;for(let o of e){let i=n.get(o.codexThreadId);(i===void 0||o.updatedAtMs>i.updatedAtMs)&&n.set(o.codexThreadId,o)}let t=[],r=[];for(let o of e)n.get(o.codexThreadId)===o?t.push(o):r.push(o);return{kept:t,dropped:r}}var md,ime,ox,Zk=F(()=>{"use strict";md=class extends Error{codexThreadId;ownerKandanThreadId;requestingKandanThreadId;constructor(n){super(`codex session ${n.codexThreadId} is exclusively owned by Kandan thread ${n.ownerKandanThreadId}; refusing to bind it to thread ${n.requestingKandanThreadId} (one Kandan thread owns a codex session exclusively - fork or start a fresh session for the second thread)`),this.name="CodexSessionOwnershipConflictError",this.codexThreadId=n.codexThreadId,this.ownerKandanThreadId=n.ownerKandanThreadId,this.requestingKandanThreadId=n.requestingKandanThreadId}},ime="start_instance first turn requires a session-owned dispatch (bound Kandan thread session + sourceSeq); the sessionless degraded turn/start fallback was removed (type-2 fallback audit)",ox=class extends Error{codexThreadId;kandanThreadId;hasThreadSession;sourceSeq;constructor(n){super(ime),this.name="StartInstanceFirstTurnOwnershipError",this.codexThreadId=n.codexThreadId,this.kandanThreadId=n.kandanThreadId,this.hasThreadSession=n.hasThreadSession,this.sourceSeq=n.sourceSeq}}});import{mkdirSync as sme,readFileSync as ame,renameSync as dme,writeFileSync as ume}from"node:fs";import{createHash as cme}from"node:crypto";import{dirname as lme,join as bq}from"node:path";import{homedir as pme}from"node:os";function fme(){let e=process.env.LINZUMI_SESSION_REGISTRY_DIR?.trim();return e!==void 0&&e!==""?e:bq(pme(),".linzumi","session-registry")}function vq(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=cme("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return bq(fme(),`${r}.${t}.json`)}function Pf(e){return typeof e=="string"&&e!==""?e:void 0}function mme(e){return e==="codex"||e==="claude-code"?e:void 0}function hme(e){if(!Z(e))return;let n=Pf(e.workspace),t=Pf(e.channel),r=Pf(e.kandanThreadId),o=Pf(e.codexThreadId),i=Pf(e.cwd),s=mme(e.agentProvider),a=Z(e.control)?e.control:void 0,d=typeof e.updatedAtMs=="number"&&Number.isFinite(e.updatedAtMs)?e.updatedAtMs:void 0;if(!(n===void 0||t===void 0||r===void 0||o===void 0||i===void 0||s===void 0||a===void 0||d===void 0))return{workspace:n,channel:t,kandanThreadId:r,codexThreadId:o,cwd:i,agentProvider:s,control:a,updatedAtMs:d}}function gme(e,n){let t=new Map,r;try{r=ame(e,"utf8")}catch(i){return i?.code==="ENOENT"||n("session_registry.read_failed",{path:e,message:i instanceof Error?i.message:String(i)}),t}let o;try{o=JSON.parse(r)}catch(i){return n("session_registry.parse_failed",{path:e,message:i instanceof Error?i.message:String(i)}),t}if(!Z(o)||o.version!==wq||!Z(o.sessions))return t;for(let[i,s]of Object.entries(o.sessions)){let a=hme(s);a!==void 0&&a.kandanThreadId===i&&t.set(i,a)}return t}function Sq(e,n){let t=gme(e,n),r=_q([...t.values()]);if(r.dropped.length>0)for(let s of r.dropped)t.delete(s.kandanThreadId),n("session_registry.duplicate_codex_session_dropped",{path:e,thread_id:s.kandanThreadId,codex_thread_id:s.codexThreadId,kept_thread_id:r.kept.find(a=>a.codexThreadId===s.codexThreadId)?.kandanThreadId??null});let o=()=>{let s={};for(let[a,d]of t)s[a]={workspace:d.workspace,channel:d.channel,kandanThreadId:d.kandanThreadId,codexThreadId:d.codexThreadId,cwd:d.cwd,agentProvider:d.agentProvider,control:d.control,updatedAtMs:d.updatedAtMs};try{sme(lme(e),{recursive:!0});let a=`${e}.tmp`;ume(a,`${JSON.stringify({version:wq,sessions:s})}
|
|
655
|
+
`,"utf8"),dme(a,e)}catch(a){n("session_registry.write_failed",{path:e,message:a instanceof Error?a.message:String(a)})}},i=s=>xq([...t.values()],s);return{list:()=>[...t.values()],upsert:s=>{let a=i(s);return a!==void 0?(n("session_registry.codex_session_ownership_conflict",{path:e,codex_thread_id:s.codexThreadId,owner_thread_id:a.kandanThreadId,requesting_thread_id:s.kandanThreadId}),{outcome:"ownership_conflict",owner:a}):(t.set(s.kandanThreadId,s),o(),{outcome:"stored"})},remove:s=>{t.delete(s)&&o()},rebindCodexThread:(s,a,d)=>{let u=t.get(s);if(u===void 0)return{outcome:"no_record"};let c=i({codexThreadId:a,kandanThreadId:s});return c!==void 0?(n("session_registry.codex_session_ownership_conflict",{path:e,codex_thread_id:a,owner_thread_id:c.kandanThreadId,requesting_thread_id:s}),{outcome:"ownership_conflict",owner:c}):(t.set(s,{...u,codexThreadId:a,control:{...u.control,codexThreadId:a},updatedAtMs:d??Date.now()}),o(),{outcome:"stored"})}}}async function kq(e){let n=0,t=0,r=0,o=0,i=0,s=0;for(let a of e.records){let d=e.nowMs-a.updatedAtMs;if(d>e.maxAgeMs){e.retire(a),r+=1,e.log("session_registry.retired_stale",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,age_ms:d});continue}let u=e.pendingDurableRowCount(a);if(u<=0){let l=!1;if(e.hasUnfinishedWork!==void 0)try{l=e.hasUnfinishedWork(a)}catch(p){l=!0,e.log("session_registry.unfinished_probe_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:p instanceof Error?p.message:String(p)})}if(l){i+=1,e.log("session_registry.kept_unfinished",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId});continue}e.retire(a),t+=1,e.log("session_registry.retired_drained",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId});continue}e.log("session_registry.outbox_replay_started",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,codex_thread_id:a.codexThreadId,pending_rows:u});let c;try{c=await e.attach(a)}catch(l){e.log("session_registry.outbox_replay_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:l instanceof Error?l.message:String(l)}),s+=1;continue}c==="attached"?(n+=1,e.log("session_registry.boot_rehydrated",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,codex_thread_id:a.codexThreadId,pending_rows:u})):c==="retire"?(e.retire(a),o+=1,e.log("session_registry.retired_unattachable",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId})):(s+=1,e.log("session_registry.outbox_replay_failed",{workspace:a.workspace,channel:a.channel,thread_id:a.kandanThreadId,message:"attach_failed"}))}return{rehydrated:n,retiredDrained:t,retiredStale:r,retiredUnattachable:o,keptUnfinished:i,failed:s}}function Cq(e,n,t=Qk,r=yme){return e.filter(o=>n-o.updatedAtMs<=t).sort((o,i)=>i.updatedAtMs-o.updatedAtMs).slice(0,Math.max(0,r)).map(o=>({workspace:o.workspace,channel:o.channel,thread_id:o.kandanThreadId,codex_thread_id:o.codexThreadId,provider_session_key:o.codexThreadId,agent_provider:o.agentProvider,cwd:o.cwd}))}var wq,Qk,yme,Tq=F(()=>{"use strict";$n();Zk();wq=1;Qk=1440*60*1e3,yme=200});import{readdirSync as Pq,statSync as xme}from"node:fs";import{join as ix}from"node:path";function Dq(e=Date.now){let n=new Map,t=(r,o)=>{if(n.delete(r),n.set(r,o),n.size>_me){let i=n.keys().next().value;i!==void 0&&n.delete(i)}};return{note:(r,o,i)=>{t(r,{stage:o,detail:i,atMs:e(),failure:void 0})},fail:(r,o)=>{let i=n.get(r);t(r,{stage:i?.stage??"unknown",detail:i?.detail,atMs:e(),failure:o})},clear:r=>{n.delete(r)},snapshot:r=>n.get(r)}}function bme(){let e=process.env.LINZUMI_CODEX_ATTACH_HARD_CAP_MS?.trim();if(e===void 0||e==="")return Iq;let n=Number.parseInt(e,10);return Number.isFinite(n)&&n>0?n:Iq}function Rq(e,n){if(e===void 0)return"no attach pipeline activity observed for this codex session";let t=Math.max(0,n-e.atMs),r=e.detail===void 0?"":` (${e.detail})`;return`stage ${e.stage}${r}, ${t}ms since last progress`}function Eq(e){return e===void 0?"rollout file not found locally":`rollout ${e} bytes (${(e/(1024*1024)).toFixed(1)}MB)`}function Mq(e,n){let t=o=>{let i;try{i=Pq(o,{withFileTypes:!0})}catch{return}let s=i.filter(a=>a.isFile()).map(a=>a.name).filter(a=>a.endsWith(`-${n}.jsonl`)).sort().at(-1);if(s!==void 0)try{return xme(ix(o,s)).size}catch{return}},r=o=>{let i;try{i=Pq(o,{withFileTypes:!0})}catch{return[]}return i.filter(s=>s.isDirectory()).map(s=>ix(o,s.name)).sort().reverse()};for(let o of r(ix(e,"sessions")))for(let i of r(o))for(let s of r(i)){let a=t(s);if(a!==void 0)return a}return t(ix(e,"archived_sessions"))}function Aq(e){let n=e.now??Date.now,t=e.hardCapMs??bme(),r=e.heartbeatMs??wme,o=Math.max(1,e.pollMs??1e3),i=n(),s=(()=>{let a=!1,d;return()=>{if(!a){a=!0;try{d=e.rolloutBytes?.()}catch{d=void 0}}return d}})();return new Promise((a,d)=>{let u=!1,c=i,l=m=>{u||(u=!0,clearInterval(p),m())},p=setInterval(()=>{let m=n(),f=e.tracker.snapshot(e.codexThreadId);if(f?.failure!==void 0){l(()=>d(new Xk(e.method,e.codexThreadId,f.failure??"unknown failure")));return}let y=Math.max(i,f?.atMs??i);if(m-i>=t){l(()=>d(new eC({method:e.method,codexThreadId:e.codexThreadId,hardCapMs:t,blocker:Rq(f,m),rollout:Eq(s())})));return}if(m-y>=e.noProgressTimeoutMs){l(()=>d(new Yk({method:e.method,codexThreadId:e.codexThreadId,timeoutMs:e.noProgressTimeoutMs,waitedMs:m-i,blocker:Rq(f,m),rollout:Eq(s())})));return}m-c>=r&&(c=m,e.log("runner.attach_waiting",{method:e.method,codex_thread_id:e.codexThreadId,kandan_thread_id:e.kandanThreadId??null,waited_ms:m-i,stage:f?.stage??null,stage_detail:f?.detail??null,stage_age_ms:f===void 0?null:Math.max(0,m-f.atMs),rollout_bytes:s()??null,no_progress_timeout_ms:e.noProgressTimeoutMs,hard_cap_ms:t}))},o);p.unref?.(),e.wait.then(m=>l(()=>a(m)),m=>l(()=>d(m)))})}var _me,Iq,wme,Xk,Yk,eC,$q=F(()=>{"use strict";_me=512;Iq=6e5;wme=3e4;Xk=class extends Error{constructor(n,t,r){super(`Codex ${n} wait for session ${t} failed: the spawn/attach it was waiting on failed (${r}); retryable - a new spawn attempt starts a fresh attach`),this.name="CodexSessionAttachFailedError"}},Yk=class extends Error{constructor(n){super(`Codex ${n.method} made no attach progress within ${n.timeoutMs}ms (waited ${n.waitedMs}ms total) for session ${n.codexThreadId}; blocked on: ${n.blocker}; ${n.rollout}; retryable - the attach pipeline is not advancing`),this.name="CodexAttachWaitNoProgressError"}},eC=class extends Error{constructor(n){super(`Codex ${n.method} exceeded the absolute attach wait cap of ${n.hardCapMs}ms for session ${n.codexThreadId}; last progress: ${n.blocker}; ${n.rollout}; retryable - if this recurs the session's rollout may be too large to attach on this machine`),this.name="CodexAttachWaitHardCapError"}}});import{randomUUID as vme}from"node:crypto";function nC(e){return e==="EnterPlanMode"||e==="ExitPlanMode"}function Lq(e){if(e.toolName==="ExitPlanMode")return{itemKey:`status:${e.itemKey}`,title:hr.planReadyForReview,body:Ic(e.input,["plan","message","summary"]),severity:"info",rawProviderMetadata:qq(e,{workflow_event:"plan_mode_exit_requested"})}}function jq(e){if(!nC(e.toolName))return;let n=e.toolName==="EnterPlanMode";return e.isError?{announcePlanMode:void 0,failureStatus:{itemKey:`status:${e.itemKey}`,title:n?hr.planModeEnterFailed:hr.planModeExitFailed,body:Cc(e.content),severity:"error",rawProviderMetadata:qq(e,{transcript_event_type:"tool_result",workflow_event:n?"plan_mode_enter_failed":"plan_mode_exit_failed",is_error:!0})}}:{announcePlanMode:n,failureStatus:void 0}}function Fq(e){return{itemKey:e.itemKey,title:e.entered?hr.planModeEntered:hr.planModeExited,body:void 0,severity:"info",rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:"workflow",workflow_event:e.entered?"plan_mode_entered":"plan_mode_exited",plan_mode_signal:e.signal,...e.permissionMode===void 0?{}:{permission_mode:e.permissionMode}}}}function zq(e,n){let t=h(e?.subtype),r=t===void 0?"system:<missing-subtype>":`system:${t}`;switch(t){case"status":{let o=h(e?.permissionMode);return o!==void 0?{kind:"permission_mode_signal",tag:r,permissionMode:o,uuid:h(e?.uuid)}:{kind:"debug_only",tag:r,reason:"Claude status frame without a permissionMode does not change the visible workflow state."}}case"init":case"commands_changed":case"local_command_output":return{kind:"debug_only",tag:r,reason:"Claude system message is projected by a dedicated parser branch, not the workflow classifier."};case"thinking_tokens":case"compact_boundary":case"session_state_changed":case"notification":case"tool_use_summary":case"memory_recall":case"files_persisted":case"plugin_install":case"elicitation_complete":case"prompt_suggestion":case"auth_status":return{kind:"debug_only",tag:r,reason:"Claude system lifecycle metadata is recorded in replay diagnostics and does not change the visible workflow state."};case"api_retry":return{kind:"visible_status",tag:r,status:Sme(e,n,r)};case"permission_denied":return{kind:"visible_status",tag:r,status:kme(e,n,r)};case"task_started":case"task_updated":case"task_progress":case"task_notification":return t==="task_progress"?{kind:"debug_only",tag:r,reason:"Claude task progress frames are high-frequency; the task row already shows the running state."}:Eme(e?.skip_transcript)===!0?{kind:"debug_only",tag:r,reason:"Claude marked this task skip_transcript (ambient/housekeeping); the SDK asks consumers to hide it from the inline transcript."}:{kind:"visible_task_update",tag:r,taskUpdate:Ime(e,n,r,t)};case"hook_started":case"hook_progress":return{kind:"debug_only",tag:r,reason:"Routine Claude hook lifecycle chatter is debug-only unless the hook response blocks or fails."};case"hook_response":{let o=If(e?.exit_code),i=h(e?.outcome);return o===2?{kind:"visible_status",tag:r,status:Oq(e,n,r,{blocked:!0,exitCode:o,outcome:i})}:i==="error"?{kind:"visible_status",tag:r,status:Oq(e,n,r,{blocked:!1,exitCode:o,outcome:i})}:{kind:"debug_only",tag:r,reason:"Completed Claude hook did not block or fail (success or cancelled outcome)."}}case"model_refusal_fallback":return{kind:"visible_status",tag:r,status:{itemKey:Pc(e,"refusal-fallback"),title:hr.refusalFallback,body:Ic(e,["api_refusal_explanation","explanation","message","reason"]),severity:"warning",rawProviderMetadata:Tc(e,n,r,{workflow_event:"model_refusal_fallback"})}};case"mirror_error":return{kind:"visible_status",tag:r,status:{itemKey:Pc(e,"mirror-error"),title:hr.mirrorError,body:Ic(e,["message","error","reason"]),severity:"warning",rawProviderMetadata:Tc(e,n,r,{workflow_event:"mirror_error"})}};default:return{kind:"unclassified",tag:r,reason:"Claude system subtype is not classified for workflow visibility"}}}function Sme(e,n,t){let r=If(e?.attempt),o=If(e?.max_retries),i=If(e?.retry_delay_ms),s=If(e?.error_status),a=h(e?.error),d=r===void 0?void 0:o===void 0?`Attempt ${r}`:`Attempt ${r}/${o}`,u=[s===void 0?void 0:String(s),a].filter(p=>p!==void 0).join(" "),c=Pme(i),l=[[d,u===""?void 0:`after ${u}`].filter(p=>p!==void 0).join(" "),c===void 0?void 0:`Retrying in ${c}.`].filter(p=>p!==void 0&&p!=="").join(". ");return{itemKey:Tme(e,n),title:hr.apiRetrying,body:l===""?void 0:l,severity:"warning",rawProviderMetadata:Tc(e,n,t,{workflow_event:"api_retry",...r===void 0?{}:{attempt:r},...o===void 0?{}:{max_retries:o},...i===void 0?{}:{retry_delay_ms:i},...s===void 0?{}:{error_status:s},...a===void 0?{}:{error:a}})}}function kme(e,n,t){let r=h(e?.tool_name),o=h(e?.tool_use_id),i=h(e?.decision_reason_type),s=h(e?.decision_reason),a=A(e?.tool_input),d=h(a?.command);return{itemKey:Pc(e,"permission-denied"),title:d!==void 0?`Claude was denied permission to run ${d}`:r!==void 0?`Claude was denied permission to use ${r}`:"Claude was denied permission to continue",body:s??Cc(h(e?.message))??Cme(i),severity:"error",rawProviderMetadata:Tc(e,n,t,{workflow_event:"permission_denied",...r===void 0?{}:{tool_name:r},...o===void 0?{}:{tool_use_id:o},...d===void 0?{}:{command:d},...i===void 0?{}:{decision_reason_type:i}})}}function Cme(e){switch(e){case"rule":return"Denied by a permission rule.";case"mode":return"Denied by the current permission mode.";case"classifier":return"Denied by the automatic permission classifier.";default:return"Denied without an interactive prompt."}}function Tme(e,n){return n!==void 0?`system:claude-api-status:${n}`:Pc(e,"claude-api-status")}function Pme(e){if(!(e===void 0||e<0))return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function Ime(e,n,t,r){let o=A(e?.patch),i=h(o?.status)??h(e?.status)??(r==="task_started"?"running":void 0),s=h(e?.task_id)??h(o?.task_id),a=Ic(e,["description","summary"])??Ic(o,["description","error"]),d=h(e?.output_file),u=a===void 0?d===void 0?void 0:`Output: ${d}`:d===void 0?a:`${a}
|
|
656
|
+
Output: ${d}`;return{itemKey:s===void 0?Pc(e,`task-${r}`):`task:${s}`,title:s===void 0?"Task":`Task ${s}`,body:u,state:Rme(i),progressLabel:i,rawProviderMetadata:Tc(e,n,t,{workflow_event:r,...s===void 0?{}:{task_id:s},...i===void 0?{}:{status:i}})}}function Oq(e,n,t,r){let o=h(e?.hook_name),i=h(e?.hook_event);return{itemKey:Pc(e,r.blocked?"hook-blocked":"hook-failed"),title:r.blocked?hr.hookBlocked:hr.hookFailed,body:Ic(e,["stderr","output","stdout"]),severity:r.blocked?"error":"warning",rawProviderMetadata:Tc(e,n,t,{workflow_event:r.blocked?"hook_blocked":"hook_failed",...o===void 0?{}:{hook_name:o},...i===void 0?{}:{hook_event:i},...r.exitCode===void 0?{}:{exit_code:r.exitCode},...r.outcome===void 0?{}:{outcome:r.outcome}})}}function qq(e,n){return{provider:"claude-code-sdk",transcript_event_type:"tool_call",tool_name:e.toolName,tool_use_id:e.itemKey,input:e.input,...n}}function Tc(e,n,t,r){let o=h(e?.subtype),i=h(e?.uuid);return{provider:"claude-code-sdk",transcript_event_type:"system",system_tag:t,...o===void 0?{}:{system_subtype:o},...n===void 0?{}:{session_id:n},...i===void 0?{}:{uuid:i},...r}}function Pc(e,n){let t=Cc(h(e?.uuid));if(t!==void 0)return`system:${t}`;let r=Cc(h(e?.tool_use_id));if(r!==void 0)return`system:${n}:${r}`;let o=Cc(h(e?.task_id));return o!==void 0?`system:${n}:${o}`:`system:${n}:${vme()}`}function Rme(e){switch(e){case"pending":case"queued":return"queued";case"in_progress":case"running":case"started":return"running";case"blocked":case"paused":return"blocked";case"completed":case"complete":case"succeeded":case"success":return"succeeded";case"failed":case"error":return"failed";case"cancelled":case"canceled":case"killed":case"stopped":return"cancelled";default:return"unknown"}}function Ic(e,n){for(let t of n){let r=Cc(h(e?.[t]));if(r!==void 0)return r}}function Cc(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function Eme(e){return typeof e=="boolean"?e:void 0}function If(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}var hr,tC=F(()=>{"use strict";Hn();hr={planModeEntered:"Claude entered plan mode",planModeExited:"Claude exited plan mode",planReadyForReview:"Claude says the plan is ready for review",planModeEnterFailed:"Claude could not enter plan mode",planModeExitFailed:"Claude could not exit plan mode",hookBlocked:"A Claude hook blocked this action",hookFailed:"A Claude hook failed",hookRowsSuppressed:"Further hook failures suppressed for this session",refusalFallback:"Claude declined and switched approach",mirrorError:"Claude hit an internal stream error",questionExpired:"Claude cannot continue: the pending question expired",apiWaiting:"Claude is waiting for the API",apiResponded:"Claude API responded",apiWaitEnded:"Claude stopped waiting for the API",apiRetrying:"Claude API request failed; retrying"}});import{existsSync as Dme}from"node:fs";import{isAbsolute as Mme,resolve as Ame}from"node:path";function Nq(e,n){if(n!=="assistant_aggregate")return;let t=e.trim().replace(/\s+/g," ").toLowerCase();return t===""?void 0:[/\blet me\b.*\bbefore\b.*\b(writing|implementing|editing|patching|making|changing|coding|updating)\b/u,/\blet me\b.*\b(check|inspect|confirm|look|verify|investigate|find|review)\b/u,/\bi(?:'|\u2019)ll\b.*\b(check|inspect|confirm|look|verify|investigate|find|review|write|implement|update|edit|patch|run)\b/u,/\bi will\b.*\b(check|inspect|confirm|look|verify|investigate|find|review|write|implement|update|edit|patch|run)\b/u,/\bnext\b.*\b(i(?:'|\u2019)ll|i will|let me)\b/u].some(o=>o.test(t))?$me:void 0}function Gq(e){let n=new Map,t=new Map,r=[],o=new Set,i=[],s,a=!1,d=0,u,c,l,p=!1,m=async(I,L,U,ie)=>{let se=e.preparePush===void 0?L:await e.preparePush(I,L);e.debugTrace?.record("outbox","push.start",{event:I,threadKey:e.threadKey,payload:se,timeoutMs:U??null});try{let Q=await e.push(I,se,U,()=>{e.debugTrace?.record("outbox","push.sent",{event:I,threadKey:e.threadKey}),ie?.()});return e.debugTrace?.record("outbox","push.ack",{event:I,threadKey:e.threadKey,reply:Q}),Q}catch(Q){throw e.debugTrace?.record("outbox","push.failed",{event:I,threadKey:e.threadKey,message:Q instanceof Error?Q.message:String(Q)}),py(Q)&&(p=!0,l.pause()),Q}};l=ly({instanceId:e.instanceId,threadKey:e.threadKey,persistDir:e.persistDir,push:m,wire:e.wire,runnerPayload:(I,L,U,ie)=>e.runnerPayload(I,L,U,{...ie??{},agent_provider:"claude-code",claude_session_id:L}),sourceSeqForTurn:I=>n.get(I),resolveSnapshot:I=>{let L=t.get(I);return L===void 0?Promise.reject(new Error(`no retained claude snapshot for turn ${I}`)):Promise.resolve({items:[...L]})},onTurnTerminal:(I,L,U,ie)=>{if(o.delete(I),o.size===0)for(let se of i.splice(0))se();e.onTurnTerminal(I,L,U,ie,n.get(I))},log:e.log,outboxRetryDelaysMs:e.outboxRetryDelaysMs,snapshotRetryDelaysMs:e.snapshotRetryDelaysMs,statsIntervalMs:e.statsIntervalMs,turnStalledThresholdMs:e.turnStalledThresholdMs});let f,y,x=e.processingStateHeartbeatMs??Lme,b=(I,L)=>{if(p)return;let U=e.wire();if(U.kandanThreadId===void 0)return;let ie={workspace:U.workspaceSlug,channel:U.channelSlug,thread_id:U.kandanThreadId,instance_id:e.instanceId,...U.codexThreadId===void 0?{}:{codex_thread_id:U.codexThreadId},seq:I,status:"processing",reason:L,agent_provider:"claude-code",...U.leaseEpoch===void 0?{}:{lease_epoch:U.leaseEpoch}};Promise.resolve().then(()=>e.push("message_state",ie)).catch(se=>{e.log("claude_pipeline.processing_state_push_failed",{thread_key:e.threadKey,seq:I,reason:L,message:se instanceof Error?se.message:String(se)})})},S=()=>{y!==void 0&&(clearInterval(y),y=void 0)},v=()=>{f=void 0,S()},w=()=>{y!==void 0||x<=0||(y=setInterval(()=>{let I=f;I===void 0||e.suppressProcessingState?.()===!0||b(I.seq,I.reason)},x),y.unref?.())},k=(I,L)=>{let U=n.get(I);U===void 0||e.suppressProcessingState?.()===!0||f?.seq===U&&f.reason===L||(f={seq:U,reason:L},b(U,L))},R=(I,L)=>{if(l.submitNotification(I,L),s!==void 0){let U=Sy(I,L);U!==void 0&&k(s.turnId,U)}},P=()=>{if(s!==void 0)return s;a=!1,d+=1;let I=`claude:${e.instanceId}:turn:${d}`,L=e.currentSourceSeq()??u??e.wire().rootSeq;return L===void 0?e.log("claude_pipeline.turn_without_source_seq",{thread_key:e.threadKey,turn_id:I}):(u=L,n.set(I,L)),s={turnId:I,sourceSeq:L??0,itemOrder:[],itemsByKey:new Map,pendingTools:new Map},o.add(I),R("turn/started",{turnId:I}),l.notifyTurnMappingReady(I),k(I,"starting turn"),w(),s},O=(I,L)=>{let U=h(L.id)??`item:${I.itemOrder.length}`;I.itemsByKey.has(U)||I.itemOrder.push(U),I.itemsByKey.set(U,L)},E=(I,L,U,ie)=>{let se=I.itemsByKey.get(L),Q=se===void 0?"":Uq(se,U);O(I,sx(U,L,`${Q}${ie}`))},j=(I,L,U,ie)=>{O(I,sx(U,L,ie))},z=I=>I.itemOrder.flatMap(L=>{let U=I.itemsByKey.get(L);return U===void 0?[]:[U]}),M=(I,L)=>{for(!I.itemOrder.some(ie=>{let se=I.itemsByKey.get(ie);return se!==void 0&&h(se.type)==="agentMessage"&&Uq(se,"agentMessage").trim()===L.trim()})&&L.trim()!==""&&j(I,`result:${I.turnId}`,"agentMessage",L),t.set(I.turnId,z(I)),r.push(I.turnId);r.length>Ome;){let ie=r.shift();ie!==void 0&&t.delete(ie)}R("turn/completed",{turnId:I.turnId}),s=void 0,v()},J=(I,L)=>{R("turn/failed",{turnId:I.turnId,reason:L}),s=void 0,v()},K,G=0,W=20,te=0,me=()=>s??(e.currentSourceSeq()===void 0?void 0:P()),ge=(I,L)=>{let U={type:"agentStatus",id:L.itemKey,provider:"claude-code",severity:L.severity,title:L.title,...L.body===void 0?{}:{body:L.body},rawProviderMetadata:L.rawProviderMetadata};O(I,U),R("item/completed",{turnId:I.turnId,item:U})},ce=I=>{if(K===I.wantPlan)return;let L=K===void 0&&!I.wantPlan;if(K=I.wantPlan,L)return;let U=me();if(U===void 0){e.log("claude_pipeline.plan_mode_transition_without_turn",{thread_key:e.threadKey,entered:I.wantPlan,signal:I.signal});return}G+=1,ge(U,Fq({itemKey:I.uuid===void 0?`status:plan-mode:${U.turnId}:${G}`:`status:plan-mode:${I.uuid}`,entered:I.wantPlan,signal:I.signal,permissionMode:I.permissionMode}))},Ie=(I,L)=>{let U=I.pendingTools.get(L.itemKey);I.pendingTools.delete(L.itemKey);let ie=U?.toolName??L.toolName??"tool",se=U?.input??{},Q=`tool:${L.itemKey}`;if(sC(ie)){let ae=Vq(ie,se,{targetExistedAtCall:U?.targetExistedAtCall});if(ae!==void 0){let Ee={type:"fileChange",id:Q,status:L.isError?"failed":"completed",patchText:ae};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee});return}}if(Jq(ie)){let ae=h(se.query)??h(se.url)??ie,Ee={type:"web_search_call",id:`web:${L.itemKey}`,query:ae,status:"completed"};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee});return}let _e=jq({itemKey:L.itemKey,toolName:ie,input:se,content:L.content,isError:L.isError});if(_e!==void 0){_e.failureStatus!==void 0&&ge(I,_e.failureStatus),_e.announcePlanMode!==void 0&&ce({wantPlan:_e.announcePlanMode,signal:"tool_result"});return}if(L.isError&&rC(ie)){let ae=qme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(rC(ie))return;if(Kq(ie)){if(L.isError&&Zq(ie)){let ae=Kme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(L.isError){let ae=Vme(L,se,ie);O(I,ae),R("item/completed",{turnId:I.turnId,item:ae});return}if(!L.isError){e.onTodoWriteCompleted?.(se);let ae=Zme(Q,se);if(ae!==void 0){let Ee={...ae,id:Q};O(I,Ee),R("item/completed",{turnId:I.turnId,item:Ee})}}return}let Te={type:"commandExecution",id:Q,toolName:ie,command:oC(ie,se),aggregatedOutput:L.content,status:L.isError?"failed":"completed"};O(I,Te),R("item/completed",{turnId:I.turnId,item:Te})};return{handleTranscriptEvent:I=>{if(a&&s===void 0&&jme.has(I.type)){e.log("claude_pipeline.post_interrupt_trailing_event_dropped",{thread_key:e.threadKey,event_type:I.type});return}switch(I.type){case"session_started":return;case"assistant_delta":{let L=P(),U=iC(I.itemKey);E(L,U,"agentMessage",I.delta),R("item/agentMessage/delta",{turnId:L.turnId,itemId:U,delta:I.delta});return}case"reasoning_delta":{let L=P(),U=Bq(I.itemKey);E(L,U,"reasoning",I.delta),R("item/reasoning/textDelta",{turnId:L.turnId,itemId:U,delta:I.delta});return}case"assistant_message":{let L=P(),U=iC(I.itemKey);j(L,U,"agentMessage",I.content),R("item/completed",{turnId:L.turnId,item:sx("agentMessage",U,I.content)});return}case"reasoning_message":{let L=P(),U=Bq(I.itemKey);j(L,U,"reasoning",I.content),R("item/completed",{turnId:L.turnId,item:sx("reasoning",U,I.content)});return}case"tool_call":{let L=P(),U=Hme(I.toolName,I.input,e.cwd);L.pendingTools.set(I.itemKey,{toolName:I.toolName,input:I.input,targetExistedAtCall:U});let ie=Fme(I);if(ie!==void 0&&(O(L,ie),R("item/completed",{turnId:L.turnId,item:ie})),rC(I.toolName))return;if(Jq(I.toolName)){let Q=h(I.input.query)??h(I.input.url)??I.toolName;R("item/started",{turnId:L.turnId,item:{type:"web_search_call",id:`web:${I.itemKey}`,query:Q}});return}if(Kq(I.toolName))return;let se=`tool:${I.itemKey}`;if(sC(I.toolName)){let Q=Vq(I.toolName,I.input,{targetExistedAtCall:U});Q!==void 0&&Q.trim()!==""&&R("item/fileChange/outputDelta",{turnId:L.turnId,itemId:se,delta:Q});return}R("item/commandExecution/outputDelta",{turnId:L.turnId,itemId:se,command:oC(I.toolName,I.input),stream:"stdout",delta:`
|
|
657
|
+
`});return}case"tool_result":{Ie(P(),I);return}case"command_output_delta":{let L=s,U=L?.pendingTools.get(I.itemKey);if(L===void 0||U===void 0)return;R("item/commandExecution/outputDelta",{turnId:L.turnId,itemId:`tool:${I.itemKey}`,command:oC(U.toolName,U.input),stream:"stdout",delta:I.delta});return}case"command_output":{let L=P(),U={type:"commandExecution",id:`local:${I.itemKey}`,command:"Claude Code local command",aggregatedOutput:I.content,status:"completed"};O(L,U),R("item/completed",{turnId:L.turnId,item:U});return}case"usage":c=I.usage;return;case"rate_limit":return;case"permission_mode_changed":ce({wantPlan:I.permissionMode==="plan",signal:"permission_mode",permissionMode:I.permissionMode,uuid:I.uuid});return;case"agent_status":{let L=me();if(L===void 0){e.log("claude_pipeline.agent_status_without_turn",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,raw_provider_metadata:I.rawProviderMetadata});return}let U=h(I.rawProviderMetadata.workflow_event);if(U==="hook_blocked"||U==="hook_failed"){if(te+=1,te===W+1){ge(L,{itemKey:`status:hook-suppression:${L.turnId}`,title:hr.hookRowsSuppressed,body:void 0,severity:"warning",rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:"workflow",workflow_event:"hook_rows_suppressed",suppressed_after:W}});return}if(te>W){e.log("claude_pipeline.hook_stop_row_suppressed",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,visible_hook_stop_rows:te});return}}ge(L,{itemKey:I.itemKey,title:I.title,body:I.body,severity:I.severity,rawProviderMetadata:I.rawProviderMetadata});return}case"agent_task_update":{let L=me();if(L===void 0){e.log("claude_pipeline.agent_task_update_without_turn",{thread_key:e.threadKey,item_key:I.itemKey,title:I.title,raw_provider_metadata:I.rawProviderMetadata});return}let U={type:"agentTaskUpdate",id:I.itemKey,provider:"claude-code",state:I.state,title:I.title,...I.body===void 0?{}:{body:I.body},...I.progressLabel===void 0?{}:{progressLabel:I.progressLabel},rawProviderMetadata:I.rawProviderMetadata};O(L,U),R("item/completed",{turnId:L.turnId,item:U});return}case"unknown":e.log("claude_pipeline.unknown_event",{thread_key:e.threadKey,item_key:I.itemKey,summary:I.summary,raw_provider_metadata:I.rawProviderMetadata});{let L=s??(e.currentSourceSeq()===void 0?void 0:P());if(L===void 0)return;let U=Ume(I);O(L,U),R("item/completed",{turnId:L.turnId,item:U})}return;case"turn_interrupted":{a=!1,s!==void 0&&(R("turn/aborted",{turnId:s.turnId,reason:I.reason??"Claude Code turn interrupted"}),s=void 0,v());return}case"turn_completed":{if(s===void 0&&a){a=!1,e.log("claude_pipeline.turn_completed_after_interrupt",{thread_key:e.threadKey});return}let L=P();c=I.usage??c;let U=Nq(I.body,I.bodySource);if(U!==void 0){e.log("claude_pipeline.incomplete_progress_completion",{thread_key:e.threadKey,turn_id:L.turnId,body_source:I.bodySource??"unspecified"}),J(L,U);return}M(L,I.body);return}case"session_completed":{if(s===void 0){a=!1;return}c=I.usage??c;let L=Nq(I.body,I.bodySource);if(L!==void 0){e.log("claude_pipeline.incomplete_progress_completion",{thread_key:e.threadKey,turn_id:s.turnId,body_source:I.bodySource??"unspecified"}),J(s,L);return}M(s,I.body);return}case"session_failed":{if(s===void 0){a=!1,e.log("claude_pipeline.session_failed_without_turn",{thread_key:e.threadKey,reason:I.reason});return}ge(s,Nme(s.turnId,I)),J(s,I.reason);return}}},interruptActiveTurn:I=>s===void 0?!1:(R("turn/aborted",{turnId:s.turnId,reason:I}),s=void 0,v(),a=!0,!0),submitLifecycle:(I,L)=>{v(),l.submitLifecycle(I,L)},awaitTurnsSettled:(I=3e4)=>o.size===0?Promise.resolve():new Promise(L=>{let U=setTimeout(()=>{e.log("claude_pipeline.turn_settlement_timeout",{thread_key:e.threadKey,open_turn_ids:[...o]}),L()},I);i.push(()=>{clearTimeout(U),L()})}),activeTurnId:()=>s?.turnId,lastUsage:()=>c,flush:I=>l.flushOutbox(I),metrics:()=>l.metrics(),close:I=>(v(),l.close(I)),pauseOutbox:()=>{p=!0,l.pause()},resumeOutbox:()=>{p=!1,l.resume();let I=f;I!==void 0&&e.suppressProcessingState?.()!==!0&&b(I.seq,I.reason)}}}function sx(e,n,t){return e==="agentMessage"?{type:e,id:n,content:[{type:"text",text:t}]}:{type:e,id:n,content:[t],summary:[]}}function Uq(e,n){let t=Array.isArray(e.content)?e.content:[];return n==="reasoning"?t.filter(r=>typeof r=="string").join(""):t.flatMap(r=>{let o=h(A(r)?.text);return o===void 0?[]:[o]}).join("")}function iC(e){let n=e.match(/^assistant-stream-(\d+)$/)?.[1];return n===void 0?e:`content-block-${n}`}function Bq(e){return`reasoning-${iC(e)}`}function Fme(e){switch(e.toolName){case"Skill":return zme(e);case"ExitPlanMode":{let n=Lq({itemKey:e.itemKey,toolName:e.toolName,input:e.input});return n===void 0?void 0:{type:"agentStatus",id:n.itemKey,provider:"claude-code",severity:n.severity,title:n.title,...n.body===void 0?{}:{body:n.body},rawProviderMetadata:n.rawProviderMetadata}}case"TaskCreate":return Bme(e);case"TaskUpdate":return Jme(e);default:return}}function zme(e){let n=h(e.input.skill)??"Skill",t=h(e.input.args);return{type:"agentStatus",id:`status:${e.itemKey}`,provider:"claude-code",severity:"info",title:`Skill: ${n}`,...t===void 0?{}:{body:t},rawProviderMetadata:aC(e)}}function qme(e,n,t){let r=h(n.skill)??"Skill";return{type:"agentStatus",id:`status:${e.itemKey}`,provider:"claude-code",severity:"error",title:`Skill: ${r}`,body:e.content,rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:e.type,tool_name:t,tool_use_id:e.itemKey,input:n,is_error:!0}}}function Nme(e,n){return{itemKey:`status:session-failed:${e}`,title:"Claude Code stopped after API failures",body:n.reason,severity:"error",rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:"session_failed",workflow_event:"session_failed",...n.sessionId===void 0?{}:{session_id:n.sessionId},reason:n.reason}}}function Ume(e){let n=h(e.rawProviderMetadata.sdk_message_type)??"unknown";return{type:"agentStatus",id:`unsupported:${e.itemKey}`,provider:"claude-code",severity:"warning",title:`Unsupported Claude SDK event: ${n}`,body:e.summary,rawProviderMetadata:{...e.rawProviderMetadata,diagnostic_kind:"unsupported_claude_sdk_event"}}}function Bme(e){let n=h(e.input.subject)??h(e.input.title)??"Task created",t=h(e.input.description);return{type:"agentTaskUpdate",id:`task:${e.itemKey}`,provider:"claude-code",state:"running",title:n,progressLabel:"created",...t===void 0?{}:{body:t},rawProviderMetadata:aC(e)}}function Jme(e){let n=h(e.input.taskId)??h(e.input.task_id),t=h(e.input.status),r=h(e.input.description)??h(e.input.activeForm);return{type:"agentTaskUpdate",id:`task:${e.itemKey}`,provider:"claude-code",state:Wme(t),title:n===void 0?"Task updated":`Task ${n}`,...r===void 0?{}:{body:r},...t===void 0?{}:{progressLabel:t},rawProviderMetadata:aC(e)}}function Kme(e,n,t){let r=h(n.taskId)??h(n.task_id),o=h(n.subject)??h(n.title)??(r===void 0?`${t} failed`:`Task ${r}`);return{type:"agentTaskUpdate",id:`task:${e.itemKey}`,provider:"claude-code",state:"failed",title:o,progressLabel:"failed",...e.content===""?{}:{body:e.content},rawProviderMetadata:{tool_name:t,tool_use_id:e.itemKey,input:n,is_error:!0}}}function Vme(e,n,t){return{type:"agentStatus",id:`status:${e.itemKey}`,provider:"claude-code",severity:"error",title:`${t} failed`,...e.content===""?{}:{body:e.content},rawProviderMetadata:{provider:"claude-code-sdk",transcript_event_type:e.type,tool_name:t,tool_use_id:e.itemKey,input:n,is_error:!0}}}function Wme(e){switch(e){case"pending":return"queued";case"in_progress":return"running";case"blocked":return"blocked";case"completed":return"succeeded";case"failed":case"error":return"failed";case"cancelled":case"canceled":return"cancelled";default:return"unknown"}}function aC(e){return{provider:"claude-code-sdk",transcript_event_type:e.type,tool_name:e.toolName,tool_use_id:e.itemKey,input:e.input}}function sC(e){switch(e){case"Edit":case"MultiEdit":case"Write":case"NotebookEdit":return!0;default:return!1}}function Jq(e){return e==="WebSearch"||e==="WebFetch"}function rC(e){return e==="Skill"||nC(e)}function Kq(e){return e==="TodoWrite"||Zq(e)}function Zq(e){return e==="TaskCreate"||e==="TaskUpdate"}function Hme(e,n,t){if(!sC(e))return;let r=h(n.file_path)??h(n.filePath)??h(n.notebook_path);if(!(r===void 0||r.trim()===""))try{return Dme(Mme(r)?r:Ame(t,r))}catch{return}}function Vq(e,n,t={}){let r=h(n.file_path)??h(n.filePath)??h(n.notebook_path);if(!(r===void 0||r.trim()===""))switch(e){case"Write":{let o=t.targetExistedAtCall===!1?`*** Add File: ${r}`:`*** Update File: ${r}`,i=h(n.content)??"";return ax(o,dx(i,"+"))}case"Edit":{let o=h(n.old_string)??"",i=h(n.new_string)??"";return ax(`*** Update File: ${r}`,Wq(o,i))}case"MultiEdit":{let i=(Array.isArray(n.edits)?n.edits:[]).flatMap(s=>{let a=A(s);return a===void 0?[]:[Wq(h(a.old_string)??"",h(a.new_string)??"")]});return i.length===0?void 0:ax(`*** Update File: ${r}`,i.join(`
|
|
655
658
|
@@
|
|
656
659
|
`))}case"NotebookEdit":{let o=h(n.new_source)??"";return ax(`*** Update File: ${r}`,dx(o,"+"))}default:return}}function Wq(e,n){let t=e===""?[]:[dx(e,"-")],r=n===""?[]:[dx(n,"+")];return[...t,...r].join(`
|
|
657
660
|
`)}function dx(e,n){return e.split(`
|
|
@@ -660,14 +663,14 @@ Output: ${d}`;return{itemKey:s===void 0?Pc(e,`task-${r}`):`task:${s}`,title:s===
|
|
|
660
663
|
${e}
|
|
661
664
|
${n}
|
|
662
665
|
*** End Patch
|
|
663
|
-
`}function Gme(e){return Array.isArray(e.todos)?e.todos:Array.isArray(e.tasks)?e.tasks:[]}function Zme(e,n){let r=Gme(n).flatMap(
|
|
664
|
-
`)],summary:
|
|
666
|
+
`}function Gme(e){return Array.isArray(e.todos)?e.todos:Array.isArray(e.tasks)?e.tasks:[]}function Zme(e,n){let r=Gme(n).flatMap(i=>{let s=A(i);if(s===void 0)return[];let a=h(s.content)??h(s.subject)??h(s.activeForm);if(a===void 0||a.trim()==="")return[];switch(h(s.status)){case"completed":return[`- [x] ${a}`];case"in_progress":return[`- [ ] **${a}** \u2014 in progress`];default:return[`- [ ] ${a}`]}});if(r.length===0)return;let o=["### Plan","",...r];return{type:"reasoning",id:`plan:${e}`,content:[o.join(`
|
|
667
|
+
`)],summary:o}}function oC(e,n){let t=e.match(/^mcp__([^_]+(?:_[^_]+)*?)__(.+)$/);if(t!=null){let o=Hq(n),i=`mcp: ${t[1]}.${t[2]}`;return o===void 0?i:`${i} ${o}`}if(e==="Bash")return h(n.command)??"Bash";let r=Hq(n);return r===void 0?e:`${e} ${r}`}function Hq(e){let t=(h(e.command)??h(e.file_path)??h(e.notebook_path)??h(e.path)??h(e.pattern)??h(e.query)??h(e.url)??h(e.description)??h(e.prompt))?.trim();if(t!==void 0&&t!=="")return t.length>200?`${t.slice(0,200)}\u2026`:t;try{let r=JSON.stringify(e);return r==="{}"?void 0:r.slice(0,200)}catch{return}}var $me,Ome,Lme,jme,Qq=F(()=>{"use strict";tC();Hn();Cy();US();$me="Claude Code ended after an incomplete progress response instead of a final answer";Ome=8,Lme=15e3,jme=new Set(["assistant_delta","reasoning_delta","assistant_message","reasoning_message","tool_call","tool_result","command_output_delta","command_output","permission_mode_changed","agent_status","agent_task_update","unknown"])});function Yq(e,n){return e.length<=n?e:e.slice(0,n)}function Rf(e){return typeof e=="string"?e:void 0}function ehe(e){return Z(e)?e:void 0}function nhe(e){let t=(Array.isArray(e.todos)?e.todos:Array.isArray(e.tasks)?e.tasks:[]).flatMap(r=>{let o=ehe(r);if(o===void 0)return[];let i=Yq((Rf(o.content)??Rf(o.subject)??Rf(o.activeForm)??"").trim(),Xme);if(i==="")return[];let s=(Rf(o.activeForm)??"").trim(),a=Yq(s===""?i:s,Yme),d=Qme[Rf(o.status)??"pending"]??"pending";return d==="completed"?[{title:i,description:a,status:d,completed_debrief:a}]:[{title:i,description:a,status:d}]});if(t.length!==0)return t.length<=Xq?t:t.slice(0,Xq)}function eN(e){let n,t,r=Promise.resolve(),o=!1,i=async()=>{for(;n!==void 0;){let s=n;n=void 0;let a=JSON.stringify(s);if(a!==t)try{await e.replacePlanSteps({thread_id:e.threadId,goal:e.goal,steps:s}),t=a}catch(d){e.log("claude_code.plan_mirror_push_failed",{thread_id:e.threadId,message:d instanceof Error?d.message:String(d)})}}};return{handleTodoWrite:s=>{let a=nhe(s);a!==void 0&&(n=a,o||(o=!0,r=i().finally(()=>{o=!1})))},settle:()=>r}}async function nN(e){let n=e.goal.trim().slice(0,2e3);if(n==="")return!1;try{return await e.upsertCodingJobPlan({thread_id:e.threadId,goal:n},{signal:e.signal}),e.log("claude_code.goal_seeded",{thread_id:e.threadId,goal_length:n.length}),!0}catch(t){return e.log("claude_code.goal_seed_failed",{thread_id:e.threadId,message:t instanceof Error?t.message:String(t)}),!1}}var Qme,Xme,Yme,Xq,tN=F(()=>{"use strict";$n();Qme={pending:"pending",in_progress:"active",completed:"completed"},Xme=255,Yme=1e4,Xq=50});function rN(e,n){let t=n?.sigintGraceMs??5e3,r=n?.sigkillWaitMs??5e3;return new Promise(o=>{if(e.exitCode!==null||e.signalCode!==null){o("already_exited");return}let i=!1,s=!1,a,d,u=p=>{s||(s=!0,a!==void 0&&clearTimeout(a),d!==void 0&&clearTimeout(d),e.off("exit",c),o(p))},c=()=>{u(i?"exited_after_sigkill":"exited_after_sigint")};e.once("exit",c);let l=p=>{try{e.kill(p)}catch{}};a=setTimeout(()=>{i=!0,l("SIGKILL"),d=setTimeout(()=>{u("abandoned")},r),d.unref?.()},t),a.unref?.(),l("SIGINT")})}var oN=F(()=>{"use strict"});import{createHash as the}from"node:crypto";import{appendFileSync as rhe,mkdirSync as iN,readFileSync as ohe,renameSync as ihe,statSync as she,writeFileSync as ahe}from"node:fs";import{dirname as sN,join as aN}from"node:path";function Rc(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=the("sha256").update(e).digest("hex").slice(0,8);return`${n===""?"runner":n}.${t}`}function dN(e,n){return aN(e,`${Rc(n)}.withheld-acks.json`)}function uN(e,n){return aN(e,`${Rc(n)}.quarantined-controls.jsonl`)}function cN(e,n){return{load:()=>{try{let t=JSON.parse(ohe(e,"utf8"));return typeof t.controlSeq=="number"&&typeof t.count=="number"&&Number.isFinite(t.controlSeq)&&Number.isFinite(t.count)?{controlSeq:t.controlSeq,count:t.count,lastWithheldAt:typeof t.lastWithheldAt=="string"?t.lastWithheldAt:"",epoch:typeof t.epoch=="string"?t.epoch:void 0}:void 0}catch{return}},save:t=>{try{iN(sN(e),{recursive:!0}),ahe(e,`${JSON.stringify(t,null,2)}
|
|
665
668
|
`)}catch(r){n?.(r instanceof Error?r.message:String(r))}}}}function che(e){try{if(she(e).size<=uhe)return}catch{return}try{ihe(e,`${e}.1`)}catch{}}function lN(e){let n=e.limit??dhe,t=e.now??(()=>new Date),r;return{onControlRejected:(o,i)=>{let s=o.control_seq;if(typeof s!="number")return"withhold";let a=i instanceof Error?i.message:String(i),d=e.currentEpoch?.(),u=e.store.load(),c=u!==void 0&&u.controlSeq===s&&u.epoch===d?u.count:0,l=r!==void 0&&r.controlSeq===s&&r.epoch===d?r.count:0,p=Math.max(c,l)+1;if(r={controlSeq:s,count:p,epoch:d},e.store.save({controlSeq:s,count:p,lastWithheldAt:t().toISOString(),...d===void 0?{}:{epoch:d}}),p<n)return"withhold";let m=t().toISOString();try{iN(sN(e.quarantineFilePath),{recursive:!0}),che(e.quarantineFilePath),rhe(e.quarantineFilePath,`${JSON.stringify(Si({quarantinedAt:m,controlType:o.type,controlSeq:s,withheldAcks:p,message:a,control:o}))}
|
|
666
669
|
`,"utf8")}catch(f){e.log("runner.control_quarantine_write_failed",{quarantineFile:e.quarantineFilePath,message:f instanceof Error?f.message:String(f)})}e.log("runner.control_quarantined",{controlType:o.type,controlSeq:s,withheldAcks:p,message:a,quarantineFile:e.quarantineFilePath});try{e.emitRunnerEvent({controlType:o.type,controlSeq:s,withheldAcks:p,message:a,quarantineFile:e.quarantineFilePath})}catch(f){e.log("runner.control_quarantined_event_emit_failed",{message:f instanceof Error?f.message:String(f)})}return"quarantine"}}}var dhe,uhe,dC=F(()=>{"use strict";Lt();dhe=3;uhe=1024*1024});import{existsSync as lC,mkdirSync as lhe,mkdtempSync as pN,readdirSync as phe,realpathSync as cC,rmSync as fN,statSync as fhe}from"node:fs";import{delimiter as mhe,isAbsolute as hhe,join as hd,parse as ghe,resolve as yhe,sep as mN}from"node:path";import{homedir as xhe,tmpdir as _he}from"node:os";function Qs(e){let n=hhe(e)?e:yhe(e);return n.length>1&&n.endsWith(mN)?n.slice(0,-1):n}function She(e){return ghe(e).root===e}function hN(e){if(!lC(e))return!0;let n;try{return n=pN(hd(e,".linzumi-cwd-probe-")),!0}catch{return!1}finally{if(n!==void 0)try{fN(n,{recursive:!0,force:!0})}catch{}}}function uC(e,n){return e===n?!0:e.startsWith(`${n}${mN}`)}function khe(e=process.env){return(e.PATH??e.Path??"").split(mhe).map(t=>t.trim()).filter(t=>t!=="").map(t=>Qs(t))}function Che(e){return vhe.map(n=>Qs(hd(e,n)))}function The(e){let n;try{n=phe(e)}catch{return!1}let t=new Set(bhe);for(let r of n){let o=r.toLowerCase(),i=o.replace(/\.(exe|cmd|bat|ps1)$/u,"");if(t.has(i))try{let s=fhe(hd(e,r)),a=(s.mode&73)!==0;if(s.isFile()&&(a||i!==o))return!0}catch{return!0}}return!1}function ux(e,n={}){let t=n.env??process.env,r=Qs(n.home??gN(t)),o=Qs(e);if(She(o))return{dangerous:!0,reason:"filesystem_root"};for(let i of whe)if(uC(o,Qs(i)))return{dangerous:!0,reason:"system_bin"};for(let i of Che(r))if(uC(o,i))return{dangerous:!0,reason:"toolchain_dir"};for(let i of khe(t))if(uC(o,i))return{dangerous:!0,reason:"path_entry"};return The(o)?{dangerous:!0,reason:"contains_critical_executable"}:hN(o)?{dangerous:!1}:{dangerous:!0,reason:"not_writable"}}function gN(e){let n=e.HOME;return n===void 0||n.trim()===""?xhe():n}function cx(e,n={}){let t=o=>{let i=pN(hd(_he(),"linzumi-onboarding-"));return{cwd:i,usedThrowaway:!0,reason:o,cleanup:()=>{try{fN(i,{recursive:!0,force:!0})}catch{}}}};if(e===void 0||e.trim()==="")return t("missing");if(!lC(e))return t("not_found");let r=e;try{r=cC(e)}catch{}for(let o of new Set([e,r])){let i=ux(o,n);if(i.dangerous)return t(i.reason)}return{cwd:e,usedThrowaway:!1,cleanup:()=>{}}}function Ef(e,n={}){let t=n.env??process.env,r=n.home??gN(t),o=d=>{let u=hd(r,Phe);try{lhe(u,{recursive:!0})}catch(c){let l=c instanceof Error?c.message:String(c);throw new Error(`Linzumi could not create a working directory at ${u} (${l}). Set a writable HOME, or pass an explicit project folder to the connect command.`)}if(!hN(u))throw new Error(`Linzumi could not write to ${u} (the directory exists but is not writable). Make it writable, or pass an explicit project folder to the connect command.`);return{cwd:u,usedFallback:!0,reason:d}};if(e===void 0||e.trim()==="")return o("missing");if(!lC(e))return o("not_found");let i=e;try{i=cC(e)}catch{}let s=r;try{s=cC(r)}catch{}let a=new Set([Qs(r),Qs(s)]);for(let d of new Set([e,i])){if(a.has(Qs(d)))return o("home_root");let u=ux(d,n);if(u.dangerous)return o(u.reason)}return{cwd:e,usedFallback:!1}}var bhe,whe,vhe,Phe,Df=F(()=>{"use strict";bhe=["node","npm","npx","bun","git","codex","linzumi"],whe=["/bin","/sbin","/usr/bin","/usr/sbin","/usr/local/bin","/usr/local/sbin","/opt/homebrew/bin","/opt/homebrew/sbin"],vhe=[".volta",".nvm",".npm",".asdf",".fnm",".bun",hd(".cargo","bin"),hd(".local","bin")];Phe="Linzumi"});import{realpathSync as pC}from"node:fs";import{homedir as Ihe}from"node:os";import{isAbsolute as Rhe,relative as Ehe,resolve as gd}from"node:path";function Mf(e){return e===void 0?[]:e.split(",").map(n=>n.trim()).filter(n=>n!=="")}function Af(e){if(e===void 0)return[];let n=new Set;for(let t of e.split(",")){let r=t.trim();if(r==="")continue;let o=Number(r);if(!Number.isInteger(o)||o<1||o>65535)throw new Error(`invalid --forward-port: ${r} is not a TCP port`);n.add(o)}return[...n].sort((t,r)=>t-r)}function fC(e){let n=[],t=[];for(let r of e){let o=gd($t(r));try{let i=pC(o);n.push(...i===o?[i]:[i,o])}catch(i){if(mC(i)){t.push(r);continue}n.push(o)}}return{allowed:Array.from(new Set(n)),missing:Array.from(new Set(t))}}function mC(e){return typeof e=="object"&&e!==null&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR"||e.code==="ELOOP")}function Ec(e,n){let t=fC(e);if(n!==void 0)for(let r of t.missing)n(r);return t.allowed}function fs(e){try{let n=gd($t(e)),t=pC(n);return Array.from(new Set(t===n?[t]:[t,n]))}catch{throw new Error(`invalid requested cwd: ${e} does not exist`)}}function $t(e){return e==="~"?yd():e.startsWith("~/")?gd(yd(),e.slice(2)):e}function yd(){let e=process.env.HOME;return e===void 0||e.trim()===""?Ihe():e}function hC(e,n={}){let t=gd(n.home??yd()),r=s=>s==="~"?t:s.startsWith("~/")?gd(t,s.slice(2)):s,o=[],i=[];for(let s of e){let a=s.trim();if(a==="")continue;let d=gd(r(a));if(yN(a)||yN(d)){i.push({root:s,reason:"filesystem_root"});continue}if(d===t){i.push({root:s,reason:"home_root"});continue}o.push(s)}return{advertisable:o,rejected:i}}function yN(e){return e==="/"||/^[A-Za-z]:[\\/]?$/.test(e)||e==="\\"||e==="\\\\"}function qr(e,n){if(e===void 0||e.trim()==="")return{ok:!1,reason:"missing_cwd"};if(n.length===0)return{ok:!1,reason:"no_allowed_cwd"};let t;try{t=pC(gd(e))}catch{return{ok:!1,reason:"cwd_not_found"}}let r=n.find(o=>Dhe(t,o));return r===void 0?{ok:!1,reason:"cwd_not_allowed"}:ux(t).dangerous?{ok:!1,reason:"cwd_dangerous"}:{ok:!0,cwd:t,matchedRoot:r}}function Dhe(e,n){return Mhe(Ehe(n,e))}function Mhe(e){return e===""||!Ahe(e)&&e!==".."&&!e.startsWith("../")&&!e.startsWith("..\\")&&!e.includes("/../")&&!e.includes("\\..\\")}function Ahe(e){return Rhe(e)||/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\")}var lx,ms=F(()=>{"use strict";Df();lx=["wafer"]});import{mkdirSync as $he,readFileSync as Ohe,realpathSync as Lhe,statSync as gC,writeFileSync as jhe}from"node:fs";import{homedir as Fhe}from"node:os";import{dirname as _N,join as zhe,resolve as qhe}from"node:path";function wN(e,n=process.env){let t=n.LINZUMI_CWD_STILLBIRTH_STATE_FILE?.trim();return t!==void 0&&t!==""?t:zhe(Fhe(),".linzumi","cwd-stillbirths",`${Rc(e)}.json`)}function vN(e,n,t){return{load:()=>{let r;try{r=Ohe(e,"utf8")}catch(a){return typeof a=="object"&&a!==null&&"code"in a&&a.code==="ENOENT"||t?.(a instanceof Error?a.message:String(a)),{}}let o;try{o=JSON.parse(r)}catch(a){return t?.(a instanceof Error?a.message:String(a)),{}}if(typeof o!="object"||o===null)return t?.("state file is not a JSON object"),{};let i={},s=0;for(let[a,d]of Object.entries(o)){let u=d;typeof u?.count=="number"&&Number.isFinite(u.count)&&u.count>=1&&typeof u.lastError=="string"&&typeof u.lastAt=="string"?i[a]={count:u.count,lastError:u.lastError,lastAt:u.lastAt}:s+=1}return s>0&&t?.(`dropped ${s} malformed stillbirth ${s===1?"entry":"entries"}`),i},save:r=>{try{$he(_N(e),{recursive:!0}),jhe(e,`${JSON.stringify(r,null,2)}
|
|
667
670
|
`)}catch(o){n?.(o instanceof Error?o.message:String(o))}}}}function Uhe(e,n){let t=e.trim();if(t.length<=n)return t;let r="... ";return`${r}${t.slice(t.length-(n-r.length))}`}function Bhe(e){let n=Object.entries(e);return n.length<=xN?e:(n.sort(([,t],[,r])=>Date.parse(t.lastAt)-Date.parse(r.lastAt)),Object.fromEntries(n.slice(-xN)))}function SN(e,n,t,r,o=bN){let i=e.load(),s=(i[n]?.count??0)+1,a=t instanceof Error?t.message:String(t??"");return e.save(Bhe({...i,[n]:{count:s,lastError:Uhe(a===""?"the engine worker never started":a,Nhe),lastAt:new Date(r).toISOString()}})),{count:s,tripped:s>=o}}function kN(e,n){let t=e.load();if(t[n]===void 0)return!1;let{[n]:r,...o}=t;return e.save(o),!0}function CN(e,n,t=bN){let r=e.load()[n];return r!==void 0&&r.count>=t?r:void 0}function yC(e,n=gC){let t=TN.find(r=>e!==r&&e.startsWith(`${r}/`));if(t===void 0)return!1;try{return n(e).dev===n(t).dev}catch{return!1}}function PN(e,n=gC){let t=TN.find(i=>e!==i&&e.startsWith(`${i}/`));if(t===void 0)return!1;let r;try{r=n(t).dev}catch{return!1}let o=e;for(;o!==t;)try{return n(o).dev===r}catch(i){let s=typeof i=="object"&&i!==null&&"code"in i?i.code:void 0;if(s!=="ENOENT"&&s!=="ENOTDIR")return!1;let a=_N(o);if(a===o)break;o=a}return!0}function xC(e,n={}){let t=n.realpathFn??Lhe,r;try{r=t(qhe($t(e)))}catch{return!1}return!yC(r,n.statFn??gC)}function IN(e,n=xC){let t=e.load(),r=[],o={};for(let[i,s]of Object.entries(t)){let a=!1;try{a=n(i)}catch{a=!1}a?r.push(i):o[i]=s}return r.length>0&&e.save(o),r}function _C(e){return(e instanceof Error?e.message:String(e??"")).startsWith(RN)}function EN(e,n){return`${RN}${e} on this computer: the last ${n.count} attempts there died during startup (most recent error: ${n.lastError}). Check that the folder exists and its disk/volume is mounted. The pause clears after one successful session, or on runner restart (\`linzumi connect\`) once the folder is present again.`}var bN,Nhe,xN,TN,RN,DN=F(()=>{"use strict";dC();ms();bN=3,Nhe=480,xN=50;TN=["/Volumes"];RN="coding sessions are paused for "});import{mkdirSync as Jhe,rmSync as MN,writeFileSync as Khe,promises as AN}from"node:fs";import{join as Vhe}from"node:path";import{StringDecoder as Whe}from"node:string_decoder";function Hhe(e){return`'${e.replaceAll("'","'\\''")}'`}function Ghe(e,n){return`__lz_live_out=${Hhe(n)}; if ! : >> "$__lz_live_out" 2>/dev/null; then __lz_live_out=/dev/null; fi; { ${e}${px}`}function Zhe(e){return $N.test(e)&&e.endsWith(px)}function ON(e){let n=e.match($N)?.[0];return n===void 0||!e.endsWith(px)?e:e.slice(n.length,e.length-px.length)}function LN(e){let n=e.LINZUMI_CLAUDE_LIVE_BASH?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}function jN(e){let n=e.pollIntervalMs??Qhe,t=e.maxEmittedBytesPerTool??Xhe,r=new Map,o=!1,i=c=>{let l=r.get(c);if(l!==void 0){r.delete(c),l.timer!==void 0&&(clearInterval(l.timer),l.timer=void 0);try{MN(l.file,{force:!0})}catch{}}},s=async(c,l)=>{if(!l.reading){l.reading=!0;try{let p=await AN.stat(l.file);if(p.size<=l.offset)return;let m=Math.min(p.size-l.offset,Yhe,t-l.emittedBytes);if(m<=0){i(c);return}let f=await AN.open(l.file,"r");try{let y=Buffer.alloc(m),{bytesRead:x}=await f.read(y,0,m,l.offset);if(x<=0)return;l.offset+=x,l.emittedBytes+=x;let b=l.decoder.write(y.subarray(0,x));b!==""&&r.get(c)===l&&e.onOutputDelta(c,b),l.emittedBytes>=t&&(e.log?.("claude_live_bash.output_budget_exhausted",{tool_use_id:c,emitted_bytes:l.emittedBytes}),i(c))}finally{await f.close()}}catch(p){r.get(c)===l&&(e.log?.("claude_live_bash.tail_read_failed",{tool_use_id:c,message:p instanceof Error?p.message:String(p)}),i(c))}finally{l.reading=!1}}},a=(c,l)=>{i(c);let p={file:l,decoder:new Whe("utf8"),offset:0,emittedBytes:0,reading:!1,timer:void 0};r.set(c,p);let m=setInterval(()=>{s(c,p)},n);m.unref?.(),p.timer=m},d=(c,l)=>{if(o)return;let p=l.command;if(typeof p!="string"||p.trim()===""||l.run_in_background===!0||Zhe(p))return;let m=Vhe(e.captureDir,`${c.replaceAll(/[^\w-]/g,"_")}.out`);try{Jhe(e.captureDir,{recursive:!0}),Khe(m,"")}catch(f){e.log?.("claude_live_bash.capture_file_failed",{tool_use_id:c,message:f instanceof Error?f.message:String(f)});return}return a(c,m),{...l,command:Ghe(p,m)}};return{hookMatchers:[{matcher:"Bash",hooks:[async c=>{let l={continue:!0};if(typeof c!="object"||c===null)return l;let p=c;if(p.hook_event_name!=="PreToolUse"||p.tool_name!=="Bash"||typeof p.tool_use_id!="string"||p.tool_use_id===""||typeof p.tool_input!="object"||p.tool_input===null||p.permission_mode!=="bypassPermissions")return l;let m=d(p.tool_use_id,p.tool_input);return m===void 0?l:{continue:!0,hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:m}}}]}],wrapApprovedTool:d,settleTool:i,settleAll:()=>{for(let c of[...r.keys()])i(c)},close:()=>{o=!0;for(let c of[...r.keys()])i(c);try{MN(e.captureDir,{recursive:!0,force:!0})}catch{}}}}var $N,px,Qhe,Xhe,Yhe,bC=F(()=>{"use strict";$N=/^__lz_live_out='(?:[^']|'\\'')*'; if ! : >> "\$__lz_live_out" 2>\/dev\/null; then __lz_live_out=\/dev\/null; fi; \{ /,px=`
|
|
668
671
|
} > >(tee -a -- "$__lz_live_out") 2> >(tee -a -- "$__lz_live_out" >&2)`;Qhe=200,Xhe=262144,Yhe=65536});import{spawnSync as ege}from"node:child_process";import{existsSync as nge}from"node:fs";import{homedir as tge}from"node:os";import{basename as rge,posix as NN,win32 as oge}from"node:path";function SC(e){return e==="win32"?oge:NN}function ige(e,n){let t=rge(e).includes("fish")?`printf '%s%s%s' '${fx}' (string join ':' $PATH) '${vC}'`:`printf '%s%s%s' '${fx}' "$PATH" '${vC}'`;switch(n){case"interactive_login":return["-l","-i","-c",t];case"interactive":return["-i","-c",t];case"login":return["-l","-c",t]}}function sge(e,n){let t=ege(e,[...n],{encoding:"utf8",timeout:5e3,killSignal:"SIGKILL",stdio:["ignore","pipe","ignore"]});return{stdout:typeof t.stdout=="string"?t.stdout:void 0,error:t.error}}function $f(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e?.homeDir??tge(),fileExists:e?.fileExists??nge,runLoginShell:e?.runLoginShell}}function age(e){if(e===void 0)return;let n=e.lastIndexOf(fx),t=e.lastIndexOf(vC);if(n===-1||t===-1||t<=n)return;let r=e.slice(n+fx.length,t).trim();return r===""?void 0:r}function dge(e){let n=$f(e);if(n.platform==="win32")return;let t=e===void 0;if(e!==void 0&&e.runLoginShell===void 0||t&&process.env.VITEST!==void 0)return;if(t&&zN)return FN;let r=n.env.SHELL?.trim(),o=n.runLoginShell??sge,i=[];if(r!==void 0&&r!=="")for(let a of["interactive_login","interactive","login"]){let d=o(r,ige(r,a)),u=age(d.stdout);if(u!==void 0)for(let c of u.split(":"))c!==""&&i.push(c)}let s=i.length===0?void 0:kC(i).join(":");return t&&(FN=s,zN=!0),s}function uge(e){let n=$f(e);if(n.platform==="win32")return[];let t=n.homeDir,r=NN.join,o=n.env.VOLTA_HOME?.trim(),i=n.env.BUN_INSTALL?.trim(),s=n.env.npm_config_prefix?.trim(),a=n.env.N_PREFIX?.trim();return kC([r(t,".local","bin"),r(t,".volta","bin"),o===void 0||o===""?void 0:r(o,"bin"),r(t,".bun","bin"),i===void 0||i===""?void 0:r(i,"bin"),r(t,".npm-global","bin"),s===void 0||s===""?void 0:r(s,"bin"),a===void 0||a===""?void 0:r(a,"bin"),r(t,".claude","local"),"/opt/homebrew/bin","/usr/local/bin"].filter(d=>d!==void 0))}function qN(e,n){return e===void 0?[]:e.split(SC(n).delimiter).filter(t=>t!=="")}function kC(e){return Array.from(new Set(e))}function UN(e){let n=$f(e);return kC([...qN(n.env.PATH,n.platform),...qN(dge(e),n.platform),...uge(e)])}function mx(e){let n=e===void 0;if(n&&process.env.VITEST!==void 0)return process.env.PATH??"";if(n&&wC!==void 0)return wC;let t=$f(e),r=UN(e).join(SC(t.platform).delimiter);return r!==""&&(t.env.PATH=r),n&&(wC=r),r}function hx(e,n){let t=$f(n);if(e.includes("/")||e.includes("\\"))return t.fileExists(e)?e:void 0;let r=t.platform==="win32"?[`${e}.exe`,`${e}.cmd`,e]:[e],o=SC(t.platform).join;for(let i of UN(n))for(let s of r){let a=o(i,s);if(t.fileExists(a))return a}}function BN(e,n){return[`\`${e}\` was not found on this runner's PATH, the login-shell PATH, or the common install locations (~/.local/bin, ~/.volta/bin, ~/.bun/bin, npm-global, Homebrew).`,`If \`${e}\` works in your terminal, the runner process does not see your shell's PATH (common when the runner is launched from an app or service instead of a terminal).`,`Fix: pass ${n} "$(command -v ${e})" when starting the runner, or make sure ${e}'s directory is on your login-shell PATH.`].join(`
|
|
669
672
|
`)}var fx,vC,FN,zN,wC,CC=F(()=>{"use strict";fx="__LINZUMI_LOGIN_PATH_BEGIN__",vC="__LINZUMI_LOGIN_PATH_END__";zN=!1});import{closeSync as cge,openSync as lge,readSync as pge,statSync as fge}from"node:fs";function xd(e){return typeof e!="string"||e===""?e:mge.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function JN(e,n){if(typeof e!="string"||e==="")return;if(Buffer.byteLength(e,"utf8")<=n)return e;let t=Buffer.from(e,"utf8"),r=t.length-n;for(;r<t.length&&((t[r]??0)&192)===128;)r+=1;return t.subarray(r).toString("utf8")}function bge(e,n){let t;try{let{size:r}=fge(e),o=r>n?r-n:0,i=r-o;if(i<=0)return"";let s=Buffer.allocUnsafe(i);t=lge(e,"r");let a=pge(t,s,0,i,o);return s.subarray(0,a).toString("utf8")}catch{return""}finally{if(t!==void 0)try{cge(t)}catch{}}}function KN(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??bge,i=Math.max(gge,e.intervalMs??hge),s=Math.max(1,e.maxTailBytes??yge),a=Math.max(1,e.maxLifecycleEvents??xge),d=[],u=!1,c,l=v=>{try{for(d.push(v);d.length>a;)d.shift()}catch{}},p=()=>{try{let v=e.backendStderrSnapshot?.();if(typeof v!="string"||v==="")return;let w=v.length>s?v.slice(v.length-s):v;return xd(w)}catch{return}},m=()=>{let v=xd(o(e.runnerLogFile,s)),w=p(),k={kind:"runner_diagnostic_log",captured_at:new Date(n()).toISOString(),lifecycle:d.map(R=>({event:R.event,at:R.atIso,...R.closeCode===void 0?{}:{close_code:R.closeCode},...R.closeReason===void 0?{}:{close_reason:xd(R.closeReason)},...R.previousSessionDurationMs===void 0?{}:{previous_session_duration_ms:R.previousSessionDurationMs},...R.reconnectCount===void 0?{}:{reconnect_count:R.reconnectCount}})),runner_log_tail:v,...w===void 0?{}:{backend_stderr:w}};return{bundle_name:"runner-diagnostics",exported_at:new Date(n()).toISOString(),diagnostics:k,telemetry_ndjson:d.map(R=>JSON.stringify(R)).join(`
|
|
670
|
-
`)}},f=Math.max(256,e.spoolTailBytes??_ge),y=(v,w)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=JN(k.runner_log_tail,f),P=JN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=w instanceof Error?w.message:String(w),{...v,diagnostics:k}},x=async()=>{let v=d.length,w=m();try{await Promise.resolve(e.upload(w)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(w,k))}catch{R=!1}R&&d.splice(0,v);try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,spooled:R,error:k instanceof Error?k.message:String(k)})}catch{}}},b=()=>{u||c!==void 0||(c=t(()=>{x()},i),c.unref?.())},S=()=>{u=!0,c!==void 0&&(r(c),c=void 0)};try{e.log?.("runner_diagnostics.enabled",{destination:"linzumi",runner_log_file:e.runnerLogFile,interval_ms:i,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return b(),{recordLifecycle:l,flushNow:x,stop:S}}var mge,hge,gge,yge,xge,_ge,gx=F(()=>{"use strict";mge=[/(--token[=\s]+)\S+/gi,/(bearer\s+)[^\s,;"'\]\}]+/gi,/((?:access[_-]?token|api[_-]?key|auth[_-]?token|authorization|secret|password|refresh[_-]?token|session[_-]?token|jwt|token)["']?\s*[:=]\s*["']?)[^\s,;"'\]\}]+/gi,/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g];hge=45e3,gge=5e3,yge=64*1024,xge=200,_ge=16*1024});import wge from"blessed";function vge(e){if(e.indexOf("%;")===-1)return e;let n=0,t="",r=0;for(;r<e.length;){let o=e[r],i=e[r+1];if(o==="%"&&i==="%"){t+="%%",r+=2;continue}if(o==="%"&&i==="?"){n+=1,t+="%?",r+=2;continue}if(o==="%"&&i===";"){n>0&&(n-=1,t+="%;"),r+=2;continue}t+=o,r+=1}return t}function WN(e=wge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[VN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?vge(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,VN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var VN,HN=F(()=>{"use strict";VN="__linzumiSetulcShimInstalled"});function GN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function ZN(e){if(e===void 0)return;let n=e.tput,t=e.program?.tput;if(n===void 0&&t===void 0){console.warn("[blessedAcsCharsetShim] screen has no tput; ACS charset fix was NOT applied - dynamic cells may render garbled");return}GN(n),t!==void 0&&t!==n&&GN(t)}var QN=F(()=>{"use strict"});var XN,Sge,Of,kge,YN,e4=F(()=>{"use strict";XN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),Sge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},kge=(e,n)=>{let t=e.instances.indexOf(n);t===-1||(e.instances.splice(t,1),e.total-=1),e.global=e.instances[0]??null,e.total===0&&(Of("uncaughtException",e._exceptionHandler),Of("SIGTERM",e._sigtermHandler),Of("SIGINT",e._sigintHandler),Of("SIGQUIT",e._sigquitHandler),Of("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),n.destroyed=!0},YN=(e,n={})=>{let t=e.prototype;switch(t[XN]){case!0:return;case void 0:break}let r=t.destroy;t[XN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??Sge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),kge(e,this);break;default:r.call(this);break}}}});function n4(e){if(typeof e!="function")return;let n=e;if(!(!Array.isArray(n.instances)||typeof n.total!="number"))return n}function Lf(e,n){if(typeof n=="function")try{process.removeListener(e,n)}catch{}}function Cge(e,n){try{let t=e.instances.indexOf(n);return t===-1?!1:(e.instances.splice(t,1),e.total-=1,e.global=e.instances[0],e.total===0&&(e.global=null,Lf("uncaughtException",e._exceptionHandler),Lf("SIGTERM",e._sigtermHandler),Lf("SIGINT",e._sigintHandler),Lf("SIGQUIT",e._sigquitHandler),Lf("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),!0)}catch{return!1}}function Tge(e,n,t,r){let o=0;for(let i of e.instances.slice()){if(n.has(i))continue;let s=i.program===void 0,a;if(!s&&typeof i.destroy=="function")try{i.destroy()}catch(d){a=d}Cge(e,i),o+=1,xo(t,"runner.tui_stranded_screen_swept",{partial_construction:s,destroy_error:a===void 0?null:a instanceof Error?a.message:String(a),...r})}return o}function t4(e,n,t={}){let r=t.sinks??{},o=t.context??{},i=new Set(e?.instances??[]);try{return n()}catch(s){let a=e===void 0?0:Tge(e,i,r,o);throw xo(r,"runner.tui_screen_construction_failed",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack??null:null,swept_screens:a,...o}),s}}var r4=F(()=>{"use strict";Zu()});var jt,TC,Xs=F(()=>{"use strict";jt="1.0.
|
|
673
|
+
`)}},f=Math.max(256,e.spoolTailBytes??_ge),y=(v,w)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=JN(k.runner_log_tail,f),P=JN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=w instanceof Error?w.message:String(w),{...v,diagnostics:k}},x=async()=>{let v=d.length,w=m();try{await Promise.resolve(e.upload(w)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(w,k))}catch{R=!1}R&&d.splice(0,v);try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,spooled:R,error:k instanceof Error?k.message:String(k)})}catch{}}},b=()=>{u||c!==void 0||(c=t(()=>{x()},i),c.unref?.())},S=()=>{u=!0,c!==void 0&&(r(c),c=void 0)};try{e.log?.("runner_diagnostics.enabled",{destination:"linzumi",runner_log_file:e.runnerLogFile,interval_ms:i,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return b(),{recordLifecycle:l,flushNow:x,stop:S}}var mge,hge,gge,yge,xge,_ge,gx=F(()=>{"use strict";mge=[/(--token[=\s]+)\S+/gi,/(bearer\s+)[^\s,;"'\]\}]+/gi,/((?:access[_-]?token|api[_-]?key|auth[_-]?token|authorization|secret|password|refresh[_-]?token|session[_-]?token|jwt|token)["']?\s*[:=]\s*["']?)[^\s,;"'\]\}]+/gi,/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g];hge=45e3,gge=5e3,yge=64*1024,xge=200,_ge=16*1024});import wge from"blessed";function vge(e){if(e.indexOf("%;")===-1)return e;let n=0,t="",r=0;for(;r<e.length;){let o=e[r],i=e[r+1];if(o==="%"&&i==="%"){t+="%%",r+=2;continue}if(o==="%"&&i==="?"){n+=1,t+="%?",r+=2;continue}if(o==="%"&&i===";"){n>0&&(n-=1,t+="%;"),r+=2;continue}t+=o,r+=1}return t}function WN(e=wge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[VN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?vge(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,VN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var VN,HN=F(()=>{"use strict";VN="__linzumiSetulcShimInstalled"});function GN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function ZN(e){if(e===void 0)return;let n=e.tput,t=e.program?.tput;if(n===void 0&&t===void 0){console.warn("[blessedAcsCharsetShim] screen has no tput; ACS charset fix was NOT applied - dynamic cells may render garbled");return}GN(n),t!==void 0&&t!==n&&GN(t)}var QN=F(()=>{"use strict"});var XN,Sge,Of,kge,YN,e4=F(()=>{"use strict";XN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),Sge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},kge=(e,n)=>{let t=e.instances.indexOf(n);t===-1||(e.instances.splice(t,1),e.total-=1),e.global=e.instances[0]??null,e.total===0&&(Of("uncaughtException",e._exceptionHandler),Of("SIGTERM",e._sigtermHandler),Of("SIGINT",e._sigintHandler),Of("SIGQUIT",e._sigquitHandler),Of("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),n.destroyed=!0},YN=(e,n={})=>{let t=e.prototype;switch(t[XN]){case!0:return;case void 0:break}let r=t.destroy;t[XN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??Sge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),kge(e,this);break;default:r.call(this);break}}}});function n4(e){if(typeof e!="function")return;let n=e;if(!(!Array.isArray(n.instances)||typeof n.total!="number"))return n}function Lf(e,n){if(typeof n=="function")try{process.removeListener(e,n)}catch{}}function Cge(e,n){try{let t=e.instances.indexOf(n);return t===-1?!1:(e.instances.splice(t,1),e.total-=1,e.global=e.instances[0],e.total===0&&(e.global=null,Lf("uncaughtException",e._exceptionHandler),Lf("SIGTERM",e._sigtermHandler),Lf("SIGINT",e._sigintHandler),Lf("SIGQUIT",e._sigquitHandler),Lf("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),!0)}catch{return!1}}function Tge(e,n,t,r){let o=0;for(let i of e.instances.slice()){if(n.has(i))continue;let s=i.program===void 0,a;if(!s&&typeof i.destroy=="function")try{i.destroy()}catch(d){a=d}Cge(e,i),o+=1,xo(t,"runner.tui_stranded_screen_swept",{partial_construction:s,destroy_error:a===void 0?null:a instanceof Error?a.message:String(a),...r})}return o}function t4(e,n,t={}){let r=t.sinks??{},o=t.context??{},i=new Set(e?.instances??[]);try{return n()}catch(s){let a=e===void 0?0:Tge(e,i,r,o);throw xo(r,"runner.tui_screen_construction_failed",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack??null:null,swept_screens:a,...o}),s}}var r4=F(()=>{"use strict";Zu()});var jt,TC,Xs=F(()=>{"use strict";jt="1.0.142",TC=`linzumi ${jt}`});import ea from"blessed";function p4(e){return e.includes(xx)?e.replace($ge,"").replace(Oge,"").includes(xx):!1}function Lge(e){return typeof e=="object"&&e!==null&&e.name==="escape"}function PC(e){return e.mode.type==="table"?!1:(e.mode={type:"table"},!0)}function zge(e){return jge.test(e)}function f4(e){if(!e.includes(xx))return[];let n=[];for(let t of e.matchAll(Fge))n.push(t[1]==="A"?"up":"down");return n}function qge(e){return zge(e)?f4(e):[]}function wx(e,n={}){let t=vt.dashboard,r={trigger:e.trigger,had_tui:t!==void 0,stdin_was_tty_at_start:vt.stdinWasTtyAtStart,stdout_was_tty_at_start:vt.stdoutWasTtyAtStart};if(t===void 0)return xo(n,"runner.tui_teardown_ok",r),{hadTui:!1,ok:!0,swallowedErrorCode:void 0};vt.dashboard=void 0,vt.stop?.(),vt.stop=void 0;try{return t.destroy(),xo(n,"runner.tui_teardown_ok",r),{hadTui:!0,ok:!0,swallowedErrorCode:void 0}}catch(o){let i=Ap(o);return xo(n,"runner.tui_teardown_tty_error",{...r,stage:"screen_destroy",code:i??null,message:o instanceof Error?o.message:String(o),swallowed:!0}),{hadTui:!0,ok:!1,swallowedErrorCode:i}}}function Kge(){wx({trigger:"crash"},{log:Rg})}function m4(e,n={log:Rg}){if(vt.degradedToHeadless)return;vt.degradedToHeadless=!0;let t=wx({trigger:"tty_write_error"},n);xo(n,"runner.tui_degraded_headless",{code:e.code??null,stage:e.stage,had_tui:t.hadTui,teardown_ok:t.ok,note:"terminal detached mid-run; console disabled, runner continues headless"});try{process.stderr.write(`linzumi runner: terminal lost (write ${e.code??"error"}); Commander TUI disabled, runner continues headless
|
|
671
674
|
`)}catch(r){nd(r)===void 0&&xo(n,"runner.tui_degrade_farewell_write_failed",{message:r instanceof Error?r.message:String(r),stage:e.stage,swallowed:!0})}}function vx(e,n){if(h4()){let r=Sye(jf);if(Vge(jf,e,n,Date.now()),r!==void 0){r.render(Date.now());return}bye(jf),wye(jf);let o=FC(jf,Date.now());if(o!==void 0){jC(o);return}}let t=S4(e,n);if(t!==void 0)try{process.stdout.write(`${t}
|
|
672
675
|
`)}catch(r){if(nd(r)===void 0)throw r}}function h4(){if(vt.degradedToHeadless)return!1;switch(process.env.LINZUMI_RUNNER_CONSOLE){case"dashboard":return!0;case"lines":return!1;default:return process.stdout.isTTY===!0}}function Sx(){return h4()}function Vge(e,n,t,r){let o=Jv(n);e.lastUpdateAtMs=r;let i=l4(e)?.key;switch(o){case"onboarding.discovery_agents_started":e.browserUrl=xe(t.kandanUrl),e.workspace=xe(t.workspace),e.runnerId=xe(Mt(t,"runnerId"));break;case"kandan.connection_stale":e.connectionStale=!0;break;case"kandan.connection_recovered":e.connectionStale=!1;break;case"runner.notice":{let s=xe(t.message);if(s===void 0)break;let a=xe(t.key)??s,d=e.notices.get(a),u=xe(t.severity)??"warning",c=Un(t.count)??(d?.count??0)+1;if(d===void 0){e.notices.set(a,{key:a,severity:u,message:s,count:c,updatedAtMs:r});for(let l of e.notices.keys()){if(e.notices.size<=Ige)break;e.notices.delete(l)}}else d.severity=u,d.message=s,d.count=c,d.updatedAtMs=r;break}case"onboarding.discovery_status":{let s=xe(t.phase),a=xe(t.status),d=yx(t.metadata),u=xe(d?.worker_id);if(s!==void 0&&a!==void 0){let c=s==="conversations",l=c?s:u??s,p=e.discovery.get(l),m=c?Zge(p?.metadata,d):d;e.discovery.set(l,{key:l,phase:s,status:c?Qge(p,a,d):a,placesSearched:Math.max(p?.placesSearched??0,Un(t.places_searched)??0),message:xe(t.message)??(c?p?.message:void 0),currentPlace:xe(t.current_place)??(c?p?.currentPlace:void 0),currentSource:xe(t.current_source)??(c?p?.currentSource:void 0),lastError:xe(t.last_error),metadata:m,updatedAtMs:r})}break}case"kandan.roster_seeded":{let s=Jye(t.threads)??[];for(let a of s){let d=yx(a),u=xe(Mt(d,"kandan_thread_id"));if(u===void 0)continue;let c=`linzumi:${u}`;if((e.jobs.get(c)??Array.from(e.jobs.values()).find(m=>m.linzumiThreadId===u))!==void 0)continue;let p=Un(d?.last_activity_at_ms);e.jobs.set(c,{key:c,createdAtMs:p??0,createdOrdinal:UC(e),agentProvider:void 0,linzumiThreadId:u,linzumiThreadTitle:xe(d?.title),codexThreadId:void 0,tokenUsage:void 0,lastIncomingPreview:void 0,lastIncomingAtMs:void 0,lastAssistantPreview:void 0,lastAssistantAtMs:void 0,latestCodexEventId:void 0,eventType:"idle (server roster)",creditExhaustion:void 0,queueDepth:void 0,turnId:void 0,updatedAtMs:p??0})}e.rosterTruncated=Kye(t.truncated)??e.rosterTruncated;break}case"kandan.message_queued":case"codex.turn_starting":{let s=OC(e,t,r);s.linzumiThreadId=xe(Mt(t,"linzumi_thread_id"))??s.linzumiThreadId,s.linzumiThreadTitle=I4(t)??s.linzumiThreadTitle,s.codexThreadId=xe(Mt(t,"codex_thread_id"))??s.codexThreadId,s.lastIncomingPreview=xe(t.body_preview)??s.lastIncomingPreview,s.lastIncomingAtMs=Un(t.message_received_at_ms)??s.lastIncomingAtMs,s.queueDepth=Un(t.queue_depth)??s.queueDepth,s.eventType=jye(o),s.updatedAtMs=r;break}case"codex.notification":{let s=xe(t.token_usage_summary),a=xe(t.rate_limit_summary),d=xe(t.credit_exhaustion_summary);s!==void 0&&(e.tokenUsage=s),a!==void 0&&(e.rateLimit=a4(e.rateLimit,a)),d!==void 0&&(e.creditExhaustion=d);let u=xe(t.method),c=yx(t.metadata);if(!(xe(c?.threadId)!==void 0||xe(c?.turnId)!==void 0||xe(c?.itemId)!==void 0))break;let p=xe(c?.threadId),m=p===void 0?l4(e):$ye(e,`codex:${p}`,r);m!==void 0&&(m.codexThreadId=p??m.codexThreadId,m.tokenUsage=s??m.tokenUsage,m.creditExhaustion=d??m.creditExhaustion,m.latestCodexEventId=C4(t),m.eventType=t.credit_exhaustion_detected===!0?"credit_exhausted":u??o,m.turnId=xe(c?.turnId)??m.turnId,m.updatedAtMs=r);break}case"kandan.codex_output_forwarded":case"kandan.codex_delta_forwarded":case"kandan.codex_reasoning_delta_forwarded":case"kandan.codex_command_output_forwarded":case"kandan.codex_file_change_forwarded":case"kandan.codex_web_search_progress_forwarded":{let s=OC(e,t,r);s.latestCodexEventId=xe(t.item_key)??s.latestCodexEventId,s.eventType=Lye(o,t),s.turnId=xe(t.turn_id)??s.turnId,xe(t.structured_kind)==="codex_assistant_message"&&(s.lastAssistantPreview=xe(t.body_preview)??s.lastAssistantPreview,s.lastAssistantAtMs=r),s.updatedAtMs=r;break}case"claude_code.turn_starting":case"claude_code.message_queued":{let s=Dc(e,t,r);s.lastIncomingPreview=xe(t.body_preview)??s.lastIncomingPreview,s.lastIncomingAtMs=Un(t.message_received_at_ms)??s.lastIncomingAtMs,s.eventType=o==="claude_code.message_queued"?"message_queued":"turn_starting",s.updatedAtMs=r;break}case"claude_code.session_started":{let s=Dc(e,t,r);s.eventType="session_started",s.updatedAtMs=r;break}case"claude_code.turn_completed":{let s=Dc(e,t,r);s.lastAssistantPreview=xe(t.body_preview)??s.lastAssistantPreview,s.lastAssistantAtMs=r,s.eventType="turn_completed",s.updatedAtMs=r;break}case"claude_code.turn_terminal":{let s=Dc(e,t,r);s.turnId=xe(t.turn_id)??s.turnId,s.eventType=`turn_${xe(t.outcome)??"terminal"}`,s.updatedAtMs=r;break}case"claude_code.rate_limit":{let s=xe(t.rate_limit_summary);s!==void 0&&(e.rateLimit=a4(e.rateLimit,s));let a=Dc(e,t,r);a.eventType="rate_limit",a.updatedAtMs=r;break}case"claude_code.token_usage":{let s=xe(t.token_usage_summary),a=Dc(e,t,r);s!==void 0&&(e.tokenUsage=s,a.tokenUsage=s),a.eventType="token_usage",a.updatedAtMs=r;break}default:break}fye(e,o,t,i)}function FC(e,n){if(e.jobs.size===0&&e.discovery.size===0&&e.notices.size===0&&e.tokenUsage===void 0&&e.rateLimit===void 0&&e.creditExhaustion===void 0)return;let t=_d(e);switch(e.mode.type){case"table":return e.jobs.size===0&&e.discovery.size>0?Wge(e,n):Yge(e,t,n);case"raw_all":return RC(e,"Raw Stream",void 0,"esc/q: table",e.rawLines,n,"No raw events yet.");case"raw_job":{let r=e.mode.jobKey,o=e.jobs.get(r),i=`Raw Stream: ${BC(o?.linzumiThreadId)} / ${JC(o?.codexThreadId,o?.agentProvider)}`;return RC(e,i,o?.tokenUsage,"esc/q: table",e.rawLines.filter(s=>s.jobKey===r),n,"No raw events yet.")}case"audit_log":return RC(e,"Commander Audit Log",void 0,"esc/q: table",_4(e).map(r=>({jobKey:void 0,line:r})),n,"No audit events yet.")}}function Wge(e,n){let t=Array.from(e.discovery.values()).sort((s,a)=>_x(s.phase).localeCompare(_x(a.phase))),r=t.reduce((s,a)=>s+a.placesSearched,0),o=t.some(s=>["starting","running"].includes(s.status)),i=t.length===0?["Discovery starting 0 places Waiting for discovery agents"]:t.map(s=>[kx(s.phase).padEnd(14),Cx(s.status).padEnd(10),`${String(s.placesSearched)} places`.padEnd(10),zC(s)].join(" "));return[NC(),"","Linzumi setup","New computer connected","",`Continue in the browser: ${e.browserUrl??"open the Linzumi setup page"}`,"",Hge(t),`Workspace: ${e.workspace??"?"}`,`Runner: ${e.runnerId??"?"}`,`Status: ${o?"searching":"finished"} Places searched: ${r}`,`Last update: ${Ai(e.lastUpdateAtMs,n)}${Ac(e)}`,"","Phase Status Places Detail","------------- ---------- --------- ------------------------------",...i,""].join(`
|
|
673
676
|
`)}function _x(e){switch(e){case"projects":return"1-projects";case"conversations":return"2-conversations";default:return`3-${e}`}}function kx(e){switch(e){case"projects":return"Projects";case"conversations":return"Conversations";default:return"Discovery"}}function Cx(e){switch(e){case"starting":return"starting";case"running":return"searching";case"completed":return"done";case"failed":return"failed";default:return e}}function Hge(e){return e.length===0?"I'm waiting for the discovery agents to start.":e.some(t=>["starting","running"].includes(t.status))?"I'm scouting existing projects and coding-agent conversations.":"Discovery is finished and idle. Select a project in the browser or move on."}function zC(e){if(e.lastError!==void 0)return e.lastError;let n=qC(e);if(n!==void 0)return n;let t=Xge(e.currentSource);return e.currentPlace!==void 0?t===void 0?e.currentPlace:`${t}: ${e.currentPlace}`:e.message??g4(e.phase)}function qC(e){if(e.phase!=="conversations"||!DC(e.metadata))return;let n=Un(e.metadata?.total_count)??(Un(e.metadata?.codex_count)??0)+(Un(e.metadata?.claude_code_count)??0),t=Un(e.metadata?.imported_count)??Un(e.metadata?.reported_count);return t===void 0||n<=0?void 0:`${e.status==="completed"?"Imported":"Importing"} [${Gge(t,n)}] ${t} / ${n} Codex/Claude Code conversations`}function DC(e){return xe(e?.worker_id)==="conversations-local-import"||Un(e?.imported_count)!==void 0||Un(e?.failed_import_count)!==void 0||Un(e?.total_count)!==void 0}function Gge(e,n){let r=Math.min(10,Math.max(0,Math.floor(e/n*10)));return`${"#".repeat(r)}${"-".repeat(10-r)}`}function Zge(e,n){return e===void 0?n:n===void 0?e:{...e,...n,...Ff(e,n,"codex_count"),...Ff(e,n,"claude_code_count"),...Ff(e,n,"reported_count"),...Ff(e,n,"imported_count"),...Ff(e,n,"total_count")}}function Ff(e,n,t){let r=Un(e[t]),o=Un(n[t]);return r===void 0&&o===void 0?{}:{[t]:Math.max(r??0,o??0)}}function Qge(e,n,t){return e?.status==="running"&&DC(e.metadata)&&!DC(t)?e.status:n}function Xge(e){switch(e){case"git":return"Git";case"codex":return"Codex";case"claude_code":return"Claude Code";case void 0:return;default:return e}}function g4(e){switch(e){case"projects":return"Checking common project folders and Git worktrees.";case"conversations":return"Checking Codex and Claude Code sessions.";default:return"Checking local context."}}function Yge(e,n,t){let r=b4(e,n,t);return[NC(),"","Linzumi Commander","",`Jobs: ${n.length}${e.rosterTruncated?" (first 200 of this node's roster)":""} Last update: ${Ai(e.lastUpdateAtMs,t)}${Ac(e)}`,...y4(e.creditExhaustion),`Overall Token Usage: ${e.tokenUsage??"?"}`,`Account rate limits: ${e.rateLimit??"?"}`,"Controls: up/down select | enter raw job | r raw stream | a audit log | esc table",...MC(e),"",Fye(r.rows),""].join(`
|
|
@@ -690,8 +693,8 @@ Claude Code sessions stay disabled for this runner (Codex is unaffected).${u} ${
|
|
|
690
693
|
|
|
691
694
|
`)}function Nxe(e){let n=e.match(/^assistant-stream-(\d+)$/)?.[1];return n!==void 0?`content-block-${n}`:e}async function t5(e){switch((await(e.validator??Bxe)({cwd:e.cwd,sessionId:e.sessionId})).type){case"valid":return;case"missing":throw new Error(`Claude Code session ${e.sessionId} was not found for ${e.cwd}`)}}async function r5(e){let n=J4(e.limit,20,1,50),t=J4(e.messagesPerSession,4,0,12);return(e.provider??Jxe)({cwd:e.cwd,limit:n,messagesPerSession:t})}async function Nf(e,n,t,r){throw await e.onTranscriptEvent?.({type:"session_failed",sessionId:n,reason:t,...r===void 0?{}:{apiErrorProvenance:r}}),new Error(t)}async function*Uxe(e){let n=await import("@anthropic-ai/claude-agent-sdk"),t=e.streamingInput?.messages??e.prompt,r=[...e.preToolUseHookMatchers??[],...e.canUseTool===void 0?Pxe().PreToolUse??[]:[]],o=r.length===0?void 0:{PreToolUse:r},i=bxe();Q4(),e.debugTrace?.record("claude-sdk.raw","sdk.query_start",{cwd:e.cwd,hasStreamingInput:e.streamingInput!==void 0,promptKind:e.streamingInput===void 0?"static":"streaming",resumeSessionId:e.resumeSessionId??null,model:e.model??null,permissionMode:e.permissionMode??null,includeHookEvents:e.includeHookEvents??null,forwardSubagentText:e.forwardSubagentText??null,mcpServerNames:e.mcpServers===void 0?[]:Object.keys(e.mcpServers),allowedTools:e.allowedTools??[],envKeys:e.env===void 0?[]:Object.keys(e.env),claudeCodeDebugFile:e.claudeCodeDebugFile??null});let s=Vxe(e.allowedTools,e.canUseTool!==void 0),a=n.query({prompt:t,options:{cwd:e.cwd,persistSession:!0,...eT(i),...e.abortController===void 0?{}:{abortController:e.abortController},...e.resumeSessionId===void 0?{}:{resume:e.resumeSessionId},tools:{type:"preset",preset:"claude_code"},includePartialMessages:!0,...e.includeHookEvents===void 0?{}:{includeHookEvents:e.includeHookEvents},...e.forwardSubagentText===void 0?{}:{forwardSubagentText:e.forwardSubagentText},settingSources:G4(),systemPrompt:{type:"preset",preset:"claude_code",...e.developerInstructions===void 0?{}:{append:e.developerInstructions}},...e.mcpServers===void 0?{}:{mcpServers:e.mcpServers},...s.sdkAllowedTools===void 0?{}:{allowedTools:[...s.sdkAllowedTools]},...e.env===void 0?{}:{env:e.env},...e.claudeCodeDebugFile===void 0?{}:{debugFile:e.claudeCodeDebugFile},...o===void 0?{}:{hooks:o},...e.canUseTool===void 0?{}:{canUseTool:Hxe(e.canUseTool,e.wrapApprovedToolInput,s.autoAllowedTools)},...e.model===void 0?{}:{model:e.model},...e.effort===void 0?{}:{effort:e.effort},...e.permissionMode===void 0?{}:{permissionMode:e.permissionMode,...e.permissionMode==="bypassPermissions"?{allowDangerouslySkipPermissions:!0}:{}}}}),d=a;e.onSessionControls?.({interrupt:async()=>{await d.interrupt?.call(a)},setModel:async u=>{await d.setModel?.call(a,u)},setPermissionMode:async u=>{await d.setPermissionMode?.call(a,u)},setEffort:async u=>{await d.applyFlagSettings?.call(a,{effortLevel:u})},supportedCommands:async()=>{let u=await d.supportedCommands?.call(a);return u===void 0?void 0:H4(u)}});try{let u=a[Symbol.asyncIterator]();for(;;){e.debugTrace?.record("claude-sdk.raw","sdk.next_wait_start",{});let c=await u.next();if(e.debugTrace?.record("claude-sdk.raw","sdk.next_wait_end",{done:c.done===!0}),c.done===!0)break;e.debugTrace?.record("claude-sdk.raw","sdk.message_yielded",{message:c.value}),yield c.value}}finally{e.debugTrace?.record("claude-sdk.raw","sdk.query_closing",{}),a.close?.call(a),e.debugTrace?.record("claude-sdk.raw","sdk.query_closed",{})}}async function Bxe(e){return await(await import("@anthropic-ai/claude-agent-sdk")).getSessionInfo(e.sessionId,{dir:e.cwd})===void 0?{type:"missing"}:{type:"valid"}}async function Jxe(e){let n=await import("@anthropic-ai/claude-agent-sdk"),t=await n.listSessions({dir:e.cwd,limit:e.limit});return(await Promise.allSettled(t.slice(0,e.limit).map(async o=>{let i=e.messagesPerSession===0?[]:await n.getSessionMessages(o.sessionId,{dir:e.cwd,limit:e.messagesPerSession});return{sessionId:o.sessionId,summary:o.summary,lastModified:o.lastModified,cwd:o.cwd,fileSize:o.fileSize,firstPrompt:o.firstPrompt,gitBranch:o.gitBranch,messagePreview:i.map(s=>({type:s.type,text:Kxe(s.message)}))}}))).flatMap(o=>o.status==="fulfilled"?[o.value]:[])}function Kxe(e){let n=A(e),r=(Array.isArray(n?.content)?n.content:[]).map(o=>{let i=A(o);return h(i?.type)==="text"?h(i?.text):void 0}).filter(o=>o!==void 0).join(`
|
|
692
695
|
|
|
693
|
-
`).trim();return Pr(r)??Pr(h(n?.text))??Pr(h(n?.content))}function J4(e,n,t,r){return e===void 0||!Number.isInteger(e)?n:e<t?t:e>r?r:e}function Vxe(e,n){if(e===void 0||!n)return{sdkAllowedTools:e,autoAllowedTools:[]};let t=e.filter(o=>o.length>0&&!o.includes("(")),r=e.filter(o=>!(o.length>0&&!o.includes("(")));return{sdkAllowedTools:r.length===0?void 0:r,autoAllowedTools:t}}function Wxe(e,n){return n.some(t=>t.endsWith("*")?e.startsWith(t.slice(0,-1)):e===t)}function Hxe(e,n,t=[]){return async(r,o,i)=>{if(Wxe(r,t))return{behavior:"allow",toolUseID:i.toolUseID,updatedInput:o};let s=await e({requestId:i.toolUseID,toolName:r,title:i.title,displayName:i.displayName,description:i.description,decisionReason:i.decisionReason,blockedPath:i.blockedPath,suggestions:i.suggestions,input:Gxe(r,o)},i.signal);switch(s.type){case"allow":return{behavior:"allow",toolUseID:i.toolUseID,...s.updatedPermissions===void 0?{}:{updatedPermissions:[...s.updatedPermissions]},updatedInput:n?.(i.toolUseID,r,o)??o};case"deny":return{behavior:"deny",message:s.message,toolUseID:i.toolUseID};case"answer_question":return{behavior:"allow",toolUseID:i.toolUseID,updatedInput:s.updatedInput}}}}function Gxe(e,n){if(e!=="Bash")return n;let t=h(n.command);if(t===void 0)return n;let r=ON(t);return r===t?n:{...n,command:r}}function K4(e){let n=A(e),t=h(n?.session_id)??h(n?.sessionId);if(t!==void 0)return t;let r=A(n?.message);return h(r?.session_id)??h(r?.sessionId)}function Zxe(e){let n=A(e);if(h(n?.type)!=="result")return{type:"none"};let t=h(n?.subtype),r=n?.is_error===!0;return t==="interrupt"||t==="error_interrupted"||n?.is_interrupt===!0?{type:"interrupted"}:r||t==="error_max_turns"||t==="error_during_execution"?{type:"error",reason:Qxe(n??{},t)}:{type:"success",text:Pr(h(n?.result)??h(n?.text)??h(n?.summary))}}function Qxe(e,n){let t=
|
|
694
|
-
`).trim();return r===""?JSON.stringify(n??{}):r}function tT(e){let n=A(e),t=A(n?.usage);if(t!==void 0)return{inputTokens:Y(t.input_tokens),outputTokens:Y(t.output_tokens),cacheCreationInputTokens:Y(t.cache_creation_input_tokens),cacheReadInputTokens:Y(t.cache_read_input_tokens),totalCostUsd:Ix(n?.total_cost_usd)}}function Ix(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function V4(e){return e===void 0||e===""?void 0:e}function Pr(e){if(e===void 0)return;let n=e.trim();return n.length===0?void 0:n}var hxe,YC,N4,wxe,Sxe,Txe,Oxe,sT=F(()=>{"use strict";CC();Hn();bC();Ng();gx();VC();Qg();WC();z4();tC();hxe={five_hour:"5h window",seven_day:"7d window",seven_day_opus:"7d Opus window",seven_day_sonnet:"7d Sonnet window",overage:"overage"};wxe="claude_code.probe_executable_fallback";Sxe=600;Txe=6e4;Oxe=new Set(["assistant_delta","assistant_message","reasoning_delta","reasoning_message","tool_call","tool_result","command_output","command_output_delta"])});function o5(e){if(!l_e(e.toolName))return{type:"not_question"};let n=Ne(e.input.questions),t=n===void 0?[e.input]:n;if(t.length>4)return{type:"invalid",message:"Claude Code AskUserQuestion contained more than four questions"};let r=[],o=new Set,i=new Set;for(let[d,u]of t.entries()){let c=x_e(u,e,d);if(c.type==="invalid")return c;if(o.has(c.question.question))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate question text"};if(i.has(c.question.questionId))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate question ids"};o.add(c.question.question),i.add(c.question.questionId),r.push(c.question)}if(r.length===0)return{type:"invalid",message:"Claude Code AskUserQuestion contained no questions"};let s=r[0]?.header??"Claude Code needs input",a=St(e.description)??St(e.decisionReason)??void 0;return{type:"question",request:{requestId:e.requestId,toolName:e.toolName,requestSource:p_e(e.toolName),title:s,body:a,questions:r,rawProviderMetadata:{tool_name:e.toolName,display_name:e.displayName,blocked_path:e.blockedPath,input:e.input}}}}function i5(e){let n=m_e(e),t=y_e(e),r=u5(e),o=f_e(e.toolName),i=St(e.title)??(o==="claude_code_plan_review"?"Review Claude Code plan":`Allow Claude Code to use ${t}?`),s=St(e.description)??St(e.decisionReason)??(r===void 0?`Claude Code requested ${e.toolName}.`:`Claude Code requested ${e.toolName} with input: ${r}.`);return{request:{requestId:e.requestId,toolName:e.toolName,requestSource:o,title:i,body:s,questions:[{questionId:`${e.requestId}:decision`,header:St(e.displayName)??(o==="claude_code_plan_review"?"Plan review":e.toolName),question:i,options:n.map(a=>({label:a.label,description:a.description})),multiSelect:!1}],rawProviderMetadata:{tool_name:e.toolName,display_name:e.displayName,blocked_path:e.blockedPath,decision_reason:e.decisionReason,input:e.input,approval_command:t,approval_tool_input:r,approval_choices:n.map(a=>({decision:a.decision,label:a.label,description:a.description}))}},choices:n}}function s5(e,n,t){let r=new Map(n.questions.map(i=>[i.questionId,i])),o={};for(let i of t){let s=r.get(i.questionId);s!==void 0&&(o[s.question]=u_e(s,i))}return{...e,answers:o}}function u_e(e,n){let t=St(n.freeText),r=n.selectedLabels.map(o=>t!==void 0&&c_e(o)?t:o);return e.multiSelect?r:r[0]??t??""}function c_e(e){let n=e.trim().toLowerCase();return n==="other"||n==="something else"||n==="something else..."||n.includes("other")||n.includes("something else")}function a5(e){return{kind:"agent_user_input_request",item_id:e.request.requestId,transcript_unit_id:`agent_user_input_request:${e.request.requestId}`,stream_state:e.streamState,request_id:e.request.requestId,session_id:e.sessionId,source_message_seq:e.sourceSeq,agent_provider:"claude-code",request_source:e.request.requestSource,title:e.request.title,body:e.request.body,questions:e.request.questions.map(n=>({questionId:n.questionId,header:n.header,question:n.question,multiSelect:n.multiSelect,options:n.options.map(t=>({label:t.label,description:t.description}))})),answerState:e.answerState,raw_provider_metadata:e.request.rawProviderMetadata}}function d5(e){return`claude-user-question:${e}`}function l_e(e){return e==="AskUserQuestion"||e.startsWith("mcp__")&&e.endsWith("__AskUserQuestion")}function p_e(e){return e==="AskUserQuestion"?"claude_code_ask_user_question":"claude_code_mcp_ask_user_question"}function f_e(e){return e==="ExitPlanMode"?"claude_code_plan_review":"claude_code_tool_approval"}function m_e(e){let n={decision:"deny",label:"Deny",description:"Deny this Claude Code request.",permissionDecision:{type:"deny",message:"Denied by Linzumi"}},t={decision:"approve",label:"Allow",description:"Allow Claude Code to continue once.",permissionDecision:{type:"allow"}},r=e.suggestions??[];switch(r.length===0){case!0:return[t,n];case!1:return[t,h_e(r),n]}}function h_e(e){return{decision:"approve_always",label:"Allow and don't ask again",description:g_e(e),permissionDecision:{type:"allow",updatedPermissions:[...e]}}}function g_e(e){let n=new Set(e.map(t=>t.destination));switch(n.size===1&&n.has("session")){case!0:return"Allow Claude Code to continue and remember it for this session.";case!1:return"Allow Claude Code to continue and apply Claude Code's suggested permission update."}}function y_e(e){let n=u5(e);return n===void 0?e.toolName:`${e.toolName}: ${n}`}function u5(e){let n=h(e.input.command)??h(e.input.file_path)??h(e.input.path);return c5(n)??b_e(e.input)}function x_e(e,n,t){let r=A(e);if(r===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion question was not an object"};let o=St(r.question)??St(r.prompt)??St(r.body)??St(n.description);if(o===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion question text was missing"};let i=St(r.header)??St(n.title);if(i===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion header was missing"};let s=__e(r.options??r.choices);if(s.length<2)return{type:"invalid",message:"Claude Code AskUserQuestion had fewer than two options"};if(s.length>4)return{type:"invalid",message:"Claude Code AskUserQuestion had more than four options"};let a=new Set;for(let d of s){if(a.has(d.label))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate option labels"};a.add(d.label)}return{type:"question",question:{questionId:St(r.questionId)??St(r.id)??`${n.requestId}:${t}`,header:i,question:o,options:s,multiSelect:aT(r.multiSelect)??aT(r.multiselect)??aT(r.multiple)??!1}}}function __e(e){return(Ne(e)??[]).map(t=>{let r=St(t)??St(A(t)?.label)??St(A(t)?.value)??St(A(t)?.text);if(r!==void 0)return{label:r,description:St(A(t)?.description)??St(A(t)?.detail)}}).filter(t=>t!==void 0)}function c5(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function b_e(e){try{return c5(JSON.stringify(e))?.slice(0,500)}catch{return}}function St(e){let n=h(e)?.trim();return n===void 0||n===""?void 0:n}function aT(e){return typeof e=="boolean"?e:void 0}var l5=F(()=>{"use strict";Hn()});function p5(e){let n=[],t=[],r=[],o=S_e(e.fixture.records),i=e.fixture.records.filter(d=>d.provider==="codex-app-server"&&d.captureKind==="response").map(d=>({record:d,response:k_e(d,o)})).filter(d=>d.response!==void 0),s=new Map,a=w_e(e.fixture.records);return{requests:t,errors:r,request:async(d,u)=>{t.push({jsonrpc:"2.0",id:t.length+1,method:d,...u===void 0?{}:{params:u}});let c=i.find(({record:l,response:p})=>(s.get(l.ordinal)??0)===0&&p.method===d);return c===void 0?d==="thread/read"&&a!==void 0?{jsonrpc:"2.0",id:t.length,result:a}:(r.push({type:"missing_response",method:d}),{jsonrpc:"2.0",id:t.length,error:{code:-32e3,message:`recorded fixture missing response for ${d}`}}):(s.set(c.record.ordinal,1),await e.clock.waitUntil(c.record.offsetMs),c.response.message)},notify:()=>{},onNotification:d=>{n.push(d)},play:async()=>{for(let d of e.fixture.records){if(d.provider!=="codex-app-server"||d.captureKind!=="notification")continue;let u=v_e(d);if(u===void 0){r.push({type:"malformed_record",ordinal:d.ordinal,message:"codex notification record is malformed"});continue}await e.clock.waitUntil(d.offsetMs);for(let c of n)c(u)}},close:()=>{}}}function f5(e){return async function*(){for(let t of e.fixture.records)t.provider!=="claude-code-sdk"||t.captureKind!=="sdk-message"||(await e.clock.waitUntil(t.offsetMs),yield t.rawValue)}}function w_e(e){let n=new Map,t=new Map;for(let d of e){if(d.provider!=="codex-app-server"||d.captureKind!=="notification")continue;let u=A(d.rawValue),c=A(u?.message)??u,l=h(c?.method),p=A(c?.params);switch(l){case"thread/started":{let m=A(p?.thread),f=h(m?.id);m!==void 0&&f!==void 0&&n.set(f,m);break}case"item/completed":{let m=h(p?.threadId),f=h(p?.turnId),y=A(p?.item);if(m===void 0||f===void 0||y===void 0)break;let x=t.get(m)??new Map,b=x.get(f)??[];b.push(y),x.set(f,b),t.set(m,x);break}default:break}}let r=Array.from(n.entries())[0];if(r===void 0)return;let[o,i]=r,s=t.get(o);if(s===void 0||s.size===0)return;let a=Array.from(s.entries()).map(([d,u])=>({id:d,items:u}));return{thread:{...i,turns:a}}}function v_e(e){let n=A(e.rawValue),t=A(n?.message)??n,r=h(t?.method);if(r===void 0)return;let o=A(t?.params);return{jsonrpc:"2.0",method:r,...o===void 0?{}:{params:o}}}function S_e(e){let n=new Map;for(let t of e){if(t.provider!=="codex-app-server"||t.captureKind!=="request")continue;let r=A(t.rawValue),o=A(r?.message)??r,i=m5(o?.id),s=h(o?.method);i!==void 0&&s!==void 0&&n.set(i,s)}return n}function m5(e){switch(typeof e){case"number":return Number.isFinite(e)?String(e):void 0;case"string":return e;default:return}}function k_e(e,n){let t=A(e.rawValue),r=A(t?.message)??t,o=h(t?.requestMethod)??n.get(m5(r?.id)??"");if(!(o===void 0||r===void 0)){if("error"in r){let i=A(r.error),s=typeof i?.code=="number"?i.code:-32e3,a=h(i?.message)??"recorded Codex error";return{method:o,message:{jsonrpc:"2.0",id:r.id===void 0?1:r.id,error:{code:s,message:a}}}}return{method:o,message:{jsonrpc:"2.0",id:r.id===void 0?1:r.id,result:r.result}}}}var h5=F(()=>{"use strict";Hn()});function g5(e){let n=0,t=[];return{mode:e,waitUntil:async o=>{let i=Math.max(0,o-n);switch(n=Math.max(n,o),e.type){case"immediate":return;case"realtime":return dT(i);case"speedMultiplier":return dT(Math.round(i/Math.max(.001,e.multiplier)));case"fixedDelayMs":return dT(e.delayMs);case"step":return new Promise(s=>{t.push(s)})}},step:()=>{t.shift()?.()}}}function dT(e){return e<=0?Promise.resolve():new Promise(n=>setTimeout(n,e))}var y5=F(()=>{"use strict"});function x5(e){if(e===void 0||e===""||e==="immediate")return{type:"immediate"};if(e==="realtime")return{type:"realtime"};let n=e.match(/^([0-9]+(?:\.[0-9]+)?)x$/u);if(n!==null){let r=Number(n[1]);if(Number.isFinite(r)&&r>0)return{type:"speedMultiplier",multiplier:r}}let t=e.match(/^([0-9]+)ms$/u);if(t!==null){let r=Number(t[1]);if(Number.isSafeInteger(r)&&r>=0)return{type:"fixedDelayMs",delayMs:r}}throw new Error("invalid --agent-replay-speed. Use immediate, realtime, <number>x, or <number>ms")}function _5(e){switch(e){case void 0:case"":case"auto":return"auto";case"codex":return"codex";case"claude-code":return"claude-code";default:throw new Error("invalid --agent-replay-provider. Use auto, codex, or claude-code")}}async function b5(e){let n=await $L(e.fixturePath);if(n.type==="error")return{type:"error",message:`failed to load replay fixture: ${T_e(n.error)}`};let t=C_e(n.fixture,e.provider);if(t.type==="error")return t;let r=g5(e.clockMode);switch(t.provider){case"codex":{let o=p5({fixture:n.fixture,clock:r}),i=!1;return{type:"ok",runtime:{fixture:n.fixture,provider:"codex",codex:o,claudeCodeRunner:void 0,playCodex:()=>{i||(i=!0,o.play().catch(s=>{if(e.onPlaybackError===void 0)throw s;e.onPlaybackError(s)}))}}}}case"claude-code":return{type:"ok",runtime:{fixture:n.fixture,provider:"claude-code",codex:void 0,claudeCodeRunner:f5({fixture:n.fixture,clock:r}),playCodex:()=>{}}}}}function C_e(e,n){if(n!=="auto")return{type:"ok",provider:n};let t=e.records.some(o=>o.provider==="codex-app-server"),r=e.records.some(o=>o.provider==="claude-code-sdk");switch(!0){case(t&&!r):return{type:"ok",provider:"codex"};case(r&&!t):return{type:"ok",provider:"claude-code"};case(t&&r):return{type:"error",message:"replay fixture contains both Codex and Claude records; pass --agent-replay-provider"};default:return{type:"error",message:"replay fixture contains no provider records"}}}function w5(e){return!0===e instanceof Error?e.message:String(e)}function T_e(e){switch(e.type){case"invalid_json":case"invalid_record":return`${e.path}:${e.line??"?"} ${e.message??e.type}`;case"credential_not_redacted":return`${e.path}:${e.line??"?"} contains credential-like field ${e.keyPath??"<unknown>"}`;case"file_read_failed":return`${e.path}: ${e.message??"read failed"}`;default:return`${e.path}: ${e.type}`}}var uT=F(()=>{"use strict";h5();y5();IS()});function Uf(e){let n=e.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS?.trim();if(n===void 0||n==="")return v5;let t=Number(n);return Number.isFinite(t)&&t>0?t:v5}function Ex(e){if(!(e.windowMs>0))throw new Error("Claude dispatch liveness window must be > 0");let n=e.now??(()=>Date.now()),t=e.setTimer??((m,f)=>{let y=setTimeout(m,f);return y.unref?.(),y}),r=e.clearTimer??(m=>clearTimeout(m)),o=n(),i=e.lastSdkActivityMs(),s,a=!1,d=!1,u=()=>{s!==void 0&&(r(s),s=void 0)},c=m=>{d=!0,u(),e.onWedged({waitedMs:n()-o,cause:m})},l=()=>{if(s=void 0,a||d)return;if(e.isDelivered()){a=!0;return}if(e.isSessionClosed()){c("session_closed");return}let m=e.lastSdkActivityMs();if(m>i||e.hasPendingBlockingRequest()){i=m,p();return}c("silent")};function p(){a||d||(u(),s=t(l,e.windowMs))}return p(),{stop:()=>{a=!0,u()}}}var v5,na,S5=F(()=>{"use strict";v5=9e4;na=class extends Error{waitedMs;constructor(n){super(`Claude Code produced no output within ${Math.round(n/1e3)}s of starting; the runner killed the wedged session`),this.name="ClaudeCodeDispatchLivenessTimeoutError",this.waitedMs=n}}});function hs(e){return{name:"linzumi",command:e.command??"linzumi",args:[...e.argsPrefix??[],"mcp","server","--api-url",e.kandanUrl,...e.authFilePath===void 0?[]:["--auth-file",e.authFilePath],...e.delegationAuthFilePath===void 0?[]:["--delegation-auth-file",e.delegationAuthFilePath],...e.ownerUsername===void 0?[]:["--owner-username",e.ownerUsername],...e.cwd===void 0?[]:["--cwd",e.cwd],...e.threadId===void 0?[]:["--thread-id",e.threadId],"--mode",e.operatingMode??"text",...e.toolScope===void 0||e.toolScope==="all"?[]:["--tool-scope",e.toolScope],...e.agentSession===!0?["--agent-session"]:[]],env:{...e.accessToken===void 0?{}:{LINZUMI_MCP_ACCESS_TOKEN:e.accessToken},...e.devServices===void 0?{}:{LINZUMI_DEV_SERVICES_SCOPE:e.devServices.scope,LINZUMI_DEV_SERVICES_OWNER_PID:String(e.devServices.ownerPid)},ELECTRON_RUN_AS_NODE:"1"}}}function Dx(e){return["-c",`mcp_servers.${e.name}.command=${JSON.stringify(e.command)}`,"-c",`mcp_servers.${e.name}.args=${P5(e.args)}`,...Object.entries(e.env).flatMap(([n,t])=>["-c",`mcp_servers.${e.name}.env.${n}=${JSON.stringify(t)}`])]}function Mx(e,n,t=[]){let r=n?.trim()??"";switch(r===""){case!0:return{command:"linzumi",argsPrefix:[]};case!1:switch(r.endsWith(".ts")||r.endsWith(".js")){case!0:return{command:e,argsPrefix:[...Bf(t),r]};case!1:return{command:r,argsPrefix:[]}}}}function Bf(e,n=0){let t=e[n];if(t===void 0)return[];if(P_e(t)){let r=e[n+1];return r===void 0?Bf(e,n+1):[t,r,...Bf(e,n+2)]}return I_e(t)?[t,...Bf(e,n+1)]:Bf(e,n+1)}function P_e(e){return["--require","-r","--import","--loader","--experimental-loader"].includes(e)}function I_e(e){return["--require=","-r=","--import=","--loader=","--experimental-loader="].some(n=>e.startsWith(n))}function k5(e){return{[e.name]:{type:"stdio",command:e.command,args:[...e.args],env:{...e.env}}}}function C5(e){return`${JSON.stringify({mcpServers:{[e.name]:{command:e.command,args:e.args,env:e.env}}},null,2)}
|
|
696
|
+
`).trim();return Pr(r)??Pr(h(n?.text))??Pr(h(n?.content))}function J4(e,n,t,r){return e===void 0||!Number.isInteger(e)?n:e<t?t:e>r?r:e}function Vxe(e,n){if(e===void 0||!n)return{sdkAllowedTools:e,autoAllowedTools:[]};let t=e.filter(o=>o.length>0&&!o.includes("(")),r=e.filter(o=>!(o.length>0&&!o.includes("(")));return{sdkAllowedTools:r.length===0?void 0:r,autoAllowedTools:t}}function Wxe(e,n){return n.some(t=>t.endsWith("*")?e.startsWith(t.slice(0,-1)):e===t)}function Hxe(e,n,t=[]){return async(r,o,i)=>{if(Wxe(r,t))return{behavior:"allow",toolUseID:i.toolUseID,updatedInput:o};let s=await e({requestId:i.toolUseID,toolName:r,title:i.title,displayName:i.displayName,description:i.description,decisionReason:i.decisionReason,blockedPath:i.blockedPath,suggestions:i.suggestions,input:Gxe(r,o)},i.signal);switch(s.type){case"allow":return{behavior:"allow",toolUseID:i.toolUseID,...s.updatedPermissions===void 0?{}:{updatedPermissions:[...s.updatedPermissions]},updatedInput:n?.(i.toolUseID,r,o)??o};case"deny":return{behavior:"deny",message:s.message,toolUseID:i.toolUseID};case"answer_question":return{behavior:"allow",toolUseID:i.toolUseID,updatedInput:s.updatedInput}}}}function Gxe(e,n){if(e!=="Bash")return n;let t=h(n.command);if(t===void 0)return n;let r=ON(t);return r===t?n:{...n,command:r}}function K4(e){let n=A(e),t=h(n?.session_id)??h(n?.sessionId);if(t!==void 0)return t;let r=A(n?.message);return h(r?.session_id)??h(r?.sessionId)}function Zxe(e){let n=A(e);if(h(n?.type)!=="result")return{type:"none"};let t=h(n?.subtype),r=n?.is_error===!0;return t==="interrupt"||t==="error_interrupted"||n?.is_interrupt===!0?{type:"interrupted"}:r||t==="error_max_turns"||t==="error_during_execution"?{type:"error",reason:Qxe(n??{},t)}:{type:"success",text:Pr(h(n?.result)??h(n?.text)??h(n?.summary))}}function Qxe(e,n){let t=qe(e.errors)?.map(r=>h(r)).filter(r=>Pr(r)!==void 0).join("; ");return Pr(t)??Pr(h(e.result))??Pr(h(e.error))??n??"error"}function Xxe(e,n,t,r){let o=A(e);switch(h(o?.type)){case"stream_event":return Yxe(o,n,t,r);case"assistant":return n_e(o,n,r);case"user":return t_e(o,n);case"system":return r_e(o,n);case"result":{let i=tT(e);return n!==void 0&&i!==void 0?[{type:"usage",sessionId:n,usage:i}]:[]}case"rate_limit_event":return i_e(o,n);default:return iT(o,n)}}function Yxe(e,n,t,r){if(n===void 0)return[];let o=A(e?.event),i=t?.observeStreamEvent(o),s=r.observeStreamEvent(o);return[...i===void 0?[]:[{type:"usage",sessionId:n,usage:i}],...e_e(o,e,n,s)]}function e_e(e,n,t,r){switch(h(e?.type)){case"content_block_delta":{let o=A(e?.delta);if(h(o?.type)==="thinking_delta"){let s=typeof o?.thinking=="string"?V4(o.thinking):void 0;return s===void 0?[]:[{type:"reasoning_delta",sessionId:t,itemKey:GC(e,r),delta:s}]}let i=typeof o?.text=="string"?V4(o.text):void 0;return i===void 0?[]:[{type:"assistant_delta",sessionId:t,itemKey:GC(e,r),delta:i}]}case"content_block_start":{let o=A(e?.content_block);return h(o?.type)==="tool_use"?[]:Px(o,t,GC(e,r))}default:return[]}}function n_e(e,n,t){if(n===void 0)return[];let r=A(e?.message),o=qe(r?.content)??[],i=t.messageIdForAssistantFrame(h(r?.id)),a=t.consumeCompletedContentBlocksForMessage(i).filter(b=>b.content.trim()!==""),d=new Map;for(let b of a){let S=d.get(b.kind)??[];S.push(b.index),d.set(b.kind,S)}let u=new Map;o.forEach((b,S)=>{let v=h(A(b)?.type);switch(v){case"text":case"thinking":{let w=u.get(v)??[];w.push(S),u.set(v,w);break}}});let c=new Set(a.map(b=>b.index)),l=(b,S)=>{let v=u.get(b)??[],w=v.indexOf(S);w>=0&&v.splice(w,1);let k=d.get(b)??[],R=k[0];if(R!==void 0&&S<R)return k.shift(),!0;let P=k.indexOf(S);if(P>=0)return k.splice(P,1),!0;let O=k.findIndex(E=>!v.includes(E));return O>=0?(k.splice(O,1),!0):!1},p=b=>{if(!c.has(b))return c.add(b),b;let S=b+1;for(;c.has(S);)S+=1;return c.add(S),S},m=[...a.flatMap(b=>{let S=o_e(b,n,Rx(i,b.index));return S.length===0?[]:[{index:b.index,events:S}]}),...o.flatMap((b,S)=>{let v=A(b);switch(h(v?.type)){case"text":return l("text",S)?[]:[{index:S,events:Px(v,n,ZC(b,p(S),i))}];case"thinking":return l("thinking",S)?[]:[{index:S,events:Px(v,n,ZC(b,p(S),i))}];default:return[{index:S,events:Px(v,n,ZC(b,S,i))}]}})],f=o.some(b=>h(A(b)?.type)==="text"),y=a.some(b=>b.kind==="text"),x=f||y?void 0:Pr(h(e?.text));return x!==void 0&&m.push({index:o.length,events:[{type:"assistant_message",sessionId:n,itemKey:Rx(i,p(o.length)),content:x,streamState:"completed"}]}),m.sort((b,S)=>b.index-S.index).flatMap(b=>b.events)}function t_e(e,n){if(n===void 0)return[];let t=A(e?.message);return(qe(t?.content)??[]).flatMap((o,i)=>{let s=A(o);return h(s?.type)!=="tool_result"?[]:[{type:"tool_result",sessionId:n,itemKey:h(s?.tool_use_id)??h(s?.id)??`content-block-${i}`,toolName:void 0,content:d_e(s),isError:s?.is_error===!0}]})}function r_e(e,n){if(n===void 0)return[];switch(h(e?.subtype)){case"init":{let t=uxe([...qe(e?.slash_commands)??[],...qe(e?.skills)??[]]),r=h(e?.permissionMode),o=r===void 0?[]:[{type:"permission_mode_changed",sessionId:n,permissionMode:r,uuid:h(e?.uuid)}];return[...t.length===0?[]:[{type:"slash_command_catalog",sessionId:n,source:"init",commands:t}],...o]}case"commands_changed":{let t=H4((qe(e?.commands)??[]).map(r=>A(r)).filter(r=>r!==void 0).map(r=>({name:h(r.name)??"",description:h(r.description)??"",argumentHint:h(r.argumentHint)??"",aliases:(qe(r.aliases)??[]).flatMap(o=>{let i=h(o);return i===void 0?[]:[i]})})));return[{type:"slash_command_catalog",sessionId:n,source:"commands_changed",commands:t}]}case"local_command_output":return[{type:"command_output",sessionId:n,itemKey:h(e?.uuid)??"local-command-output",content:h(e?.content)??""}];default:{let t=zq(e,n);switch(t.kind){case"visible_status":return[{type:"agent_status",sessionId:n,itemKey:t.status.itemKey,title:t.status.title,body:t.status.body,severity:t.status.severity,rawProviderMetadata:t.status.rawProviderMetadata}];case"visible_task_update":return[{type:"agent_task_update",sessionId:n,itemKey:t.taskUpdate.itemKey,title:t.taskUpdate.title,body:t.taskUpdate.body,state:t.taskUpdate.state,progressLabel:t.taskUpdate.progressLabel,rawProviderMetadata:t.taskUpdate.rawProviderMetadata}];case"permission_mode_signal":return[{type:"permission_mode_changed",sessionId:n,permissionMode:t.permissionMode,uuid:t.uuid}];case"debug_only":return[];case"unclassified":return iT(e,n)}}}}function o_e(e,n,t){if(e.content.trim()==="")return[];let r=e.content;switch(e.kind){case"text":return[{type:"assistant_message",sessionId:n,itemKey:t,content:r,streamState:"completed"}];case"thinking":return[{type:"reasoning_message",sessionId:n,itemKey:t,content:r}]}}function Px(e,n,t){switch(h(e?.type)){case"text":{let r=Pr(h(e?.text));return r===void 0?[]:[{type:"assistant_message",sessionId:n,itemKey:t,content:r,streamState:"completed"}]}case"thinking":{let r=Pr(h(e?.thinking));return r===void 0?[]:[{type:"reasoning_message",sessionId:n,itemKey:t,content:r}]}case"tool_use":{let r=h(e?.name)??"tool",o=A(e?.input)??{};return[{type:"tool_call",sessionId:n,itemKey:t,toolName:r,input:o}]}default:return[]}}function i_e(e,n){let t=pxe(A(e?.rate_limit_info)??A(e?.rate_limit)??e);return t===void 0?iT(e,n):[{type:"rate_limit",sessionId:n,rateLimit:t}]}function iT(e,n){let t=h(e?.type);if(t===void 0||t==="keep_alive")return[];let r=s_e(e,t),o=h(e?.subtype),i=t==="system"&&o!==void 0?`system:${o}`:t;return[{type:"unknown",sessionId:n,itemKey:h(e?.uuid)??a_e(t,r),summary:`Claude Code emitted ${i}`,rawProviderMetadata:r}]}function s_e(e,n){let t=h(e?.subtype);return{provider:"claude-code-sdk",transcript_event_type:"unknown",sdk_message_type:n,...t===void 0?{}:{sdk_message_subtype:t},raw_message_keys:e===void 0?[]:Object.keys(e).sort().slice(0,64),raw_message_preview:rL(e)}}function a_e(e,n){let t=sxe("sha256").update(JSON.stringify(n)).digest("hex").slice(0,16);return`unknown:${e}:${t}`}function GC(e,n){let t=Y(e?.index);if(t===void 0)throw new Error("Claude Code stream content is missing content block index");return Rx(n,t)}function ZC(e,n,t){let r=A(e);switch(h(r?.type)){case"tool_use":return h(r?.id)??h(r?.tool_use_id)??`content-block-${n}`;case"text":case"thinking":return Rx(t,n);default:return`content-block-${n}`}}function Rx(e,n){if(e===void 0)throw new Error("Claude Code assistant content is missing message id");return`claude-message:${e}:content-block:${n}`}function d_e(e){let n=e?.content;if(typeof n=="string")return n;let r=(qe(n)??[]).flatMap(o=>{let i=A(o),s=h(i?.text)??h(i?.content);return s===void 0?[]:[s]}).join(`
|
|
697
|
+
`).trim();return r===""?JSON.stringify(n??{}):r}function tT(e){let n=A(e),t=A(n?.usage);if(t!==void 0)return{inputTokens:Y(t.input_tokens),outputTokens:Y(t.output_tokens),cacheCreationInputTokens:Y(t.cache_creation_input_tokens),cacheReadInputTokens:Y(t.cache_read_input_tokens),totalCostUsd:Ix(n?.total_cost_usd)}}function Ix(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function V4(e){return e===void 0||e===""?void 0:e}function Pr(e){if(e===void 0)return;let n=e.trim();return n.length===0?void 0:n}var hxe,YC,N4,wxe,Sxe,Txe,Oxe,sT=F(()=>{"use strict";CC();Hn();bC();Ng();gx();VC();Qg();WC();z4();tC();hxe={five_hour:"5h window",seven_day:"7d window",seven_day_opus:"7d Opus window",seven_day_sonnet:"7d Sonnet window",overage:"overage"};wxe="claude_code.probe_executable_fallback";Sxe=600;Txe=6e4;Oxe=new Set(["assistant_delta","assistant_message","reasoning_delta","reasoning_message","tool_call","tool_result","command_output","command_output_delta"])});function o5(e){if(!l_e(e.toolName))return{type:"not_question"};let n=qe(e.input.questions),t=n===void 0?[e.input]:n;if(t.length>4)return{type:"invalid",message:"Claude Code AskUserQuestion contained more than four questions"};let r=[],o=new Set,i=new Set;for(let[d,u]of t.entries()){let c=x_e(u,e,d);if(c.type==="invalid")return c;if(o.has(c.question.question))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate question text"};if(i.has(c.question.questionId))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate question ids"};o.add(c.question.question),i.add(c.question.questionId),r.push(c.question)}if(r.length===0)return{type:"invalid",message:"Claude Code AskUserQuestion contained no questions"};let s=r[0]?.header??"Claude Code needs input",a=St(e.description)??St(e.decisionReason)??void 0;return{type:"question",request:{requestId:e.requestId,toolName:e.toolName,requestSource:p_e(e.toolName),title:s,body:a,questions:r,rawProviderMetadata:{tool_name:e.toolName,display_name:e.displayName,blocked_path:e.blockedPath,input:e.input}}}}function i5(e){let n=m_e(e),t=y_e(e),r=u5(e),o=f_e(e.toolName),i=St(e.title)??(o==="claude_code_plan_review"?"Review Claude Code plan":`Allow Claude Code to use ${t}?`),s=St(e.description)??St(e.decisionReason)??(r===void 0?`Claude Code requested ${e.toolName}.`:`Claude Code requested ${e.toolName} with input: ${r}.`);return{request:{requestId:e.requestId,toolName:e.toolName,requestSource:o,title:i,body:s,questions:[{questionId:`${e.requestId}:decision`,header:St(e.displayName)??(o==="claude_code_plan_review"?"Plan review":e.toolName),question:i,options:n.map(a=>({label:a.label,description:a.description})),multiSelect:!1}],rawProviderMetadata:{tool_name:e.toolName,display_name:e.displayName,blocked_path:e.blockedPath,decision_reason:e.decisionReason,input:e.input,approval_command:t,approval_tool_input:r,approval_choices:n.map(a=>({decision:a.decision,label:a.label,description:a.description}))}},choices:n}}function s5(e,n,t){let r=new Map(n.questions.map(i=>[i.questionId,i])),o={};for(let i of t){let s=r.get(i.questionId);s!==void 0&&(o[s.question]=u_e(s,i))}return{...e,answers:o}}function u_e(e,n){let t=St(n.freeText),r=n.selectedLabels.map(o=>t!==void 0&&c_e(o)?t:o);return e.multiSelect?r:r[0]??t??""}function c_e(e){let n=e.trim().toLowerCase();return n==="other"||n==="something else"||n==="something else..."||n.includes("other")||n.includes("something else")}function a5(e){return{kind:"agent_user_input_request",item_id:e.request.requestId,transcript_unit_id:`agent_user_input_request:${e.request.requestId}`,stream_state:e.streamState,request_id:e.request.requestId,session_id:e.sessionId,source_message_seq:e.sourceSeq,agent_provider:"claude-code",request_source:e.request.requestSource,title:e.request.title,body:e.request.body,questions:e.request.questions.map(n=>({questionId:n.questionId,header:n.header,question:n.question,multiSelect:n.multiSelect,options:n.options.map(t=>({label:t.label,description:t.description}))})),answerState:e.answerState,raw_provider_metadata:e.request.rawProviderMetadata}}function d5(e){return`claude-user-question:${e}`}function l_e(e){return e==="AskUserQuestion"||e.startsWith("mcp__")&&e.endsWith("__AskUserQuestion")}function p_e(e){return e==="AskUserQuestion"?"claude_code_ask_user_question":"claude_code_mcp_ask_user_question"}function f_e(e){return e==="ExitPlanMode"?"claude_code_plan_review":"claude_code_tool_approval"}function m_e(e){let n={decision:"deny",label:"Deny",description:"Deny this Claude Code request.",permissionDecision:{type:"deny",message:"Denied by Linzumi"}},t={decision:"approve",label:"Allow",description:"Allow Claude Code to continue once.",permissionDecision:{type:"allow"}},r=e.suggestions??[];switch(r.length===0){case!0:return[t,n];case!1:return[t,h_e(r),n]}}function h_e(e){return{decision:"approve_always",label:"Allow and don't ask again",description:g_e(e),permissionDecision:{type:"allow",updatedPermissions:[...e]}}}function g_e(e){let n=new Set(e.map(t=>t.destination));switch(n.size===1&&n.has("session")){case!0:return"Allow Claude Code to continue and remember it for this session.";case!1:return"Allow Claude Code to continue and apply Claude Code's suggested permission update."}}function y_e(e){let n=u5(e);return n===void 0?e.toolName:`${e.toolName}: ${n}`}function u5(e){let n=h(e.input.command)??h(e.input.file_path)??h(e.input.path);return c5(n)??b_e(e.input)}function x_e(e,n,t){let r=A(e);if(r===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion question was not an object"};let o=St(r.question)??St(r.prompt)??St(r.body)??St(n.description);if(o===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion question text was missing"};let i=St(r.header)??St(n.title);if(i===void 0)return{type:"invalid",message:"Claude Code AskUserQuestion header was missing"};let s=__e(r.options??r.choices);if(s.length<2)return{type:"invalid",message:"Claude Code AskUserQuestion had fewer than two options"};if(s.length>4)return{type:"invalid",message:"Claude Code AskUserQuestion had more than four options"};let a=new Set;for(let d of s){if(a.has(d.label))return{type:"invalid",message:"Claude Code AskUserQuestion contained duplicate option labels"};a.add(d.label)}return{type:"question",question:{questionId:St(r.questionId)??St(r.id)??`${n.requestId}:${t}`,header:i,question:o,options:s,multiSelect:aT(r.multiSelect)??aT(r.multiselect)??aT(r.multiple)??!1}}}function __e(e){return(qe(e)??[]).map(t=>{let r=St(t)??St(A(t)?.label)??St(A(t)?.value)??St(A(t)?.text);if(r!==void 0)return{label:r,description:St(A(t)?.description)??St(A(t)?.detail)}}).filter(t=>t!==void 0)}function c5(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function b_e(e){try{return c5(JSON.stringify(e))?.slice(0,500)}catch{return}}function St(e){let n=h(e)?.trim();return n===void 0||n===""?void 0:n}function aT(e){return typeof e=="boolean"?e:void 0}var l5=F(()=>{"use strict";Hn()});function p5(e){let n=[],t=[],r=[],o=S_e(e.fixture.records),i=e.fixture.records.filter(d=>d.provider==="codex-app-server"&&d.captureKind==="response").map(d=>({record:d,response:k_e(d,o)})).filter(d=>d.response!==void 0),s=new Map,a=w_e(e.fixture.records);return{requests:t,errors:r,request:async(d,u)=>{t.push({jsonrpc:"2.0",id:t.length+1,method:d,...u===void 0?{}:{params:u}});let c=i.find(({record:l,response:p})=>(s.get(l.ordinal)??0)===0&&p.method===d);return c===void 0?d==="thread/read"&&a!==void 0?{jsonrpc:"2.0",id:t.length,result:a}:(r.push({type:"missing_response",method:d}),{jsonrpc:"2.0",id:t.length,error:{code:-32e3,message:`recorded fixture missing response for ${d}`}}):(s.set(c.record.ordinal,1),await e.clock.waitUntil(c.record.offsetMs),c.response.message)},notify:()=>{},onNotification:d=>{n.push(d)},play:async()=>{for(let d of e.fixture.records){if(d.provider!=="codex-app-server"||d.captureKind!=="notification")continue;let u=v_e(d);if(u===void 0){r.push({type:"malformed_record",ordinal:d.ordinal,message:"codex notification record is malformed"});continue}await e.clock.waitUntil(d.offsetMs);for(let c of n)c(u)}},close:()=>{}}}function f5(e){return async function*(){for(let t of e.fixture.records)t.provider!=="claude-code-sdk"||t.captureKind!=="sdk-message"||(await e.clock.waitUntil(t.offsetMs),yield t.rawValue)}}function w_e(e){let n=new Map,t=new Map;for(let d of e){if(d.provider!=="codex-app-server"||d.captureKind!=="notification")continue;let u=A(d.rawValue),c=A(u?.message)??u,l=h(c?.method),p=A(c?.params);switch(l){case"thread/started":{let m=A(p?.thread),f=h(m?.id);m!==void 0&&f!==void 0&&n.set(f,m);break}case"item/completed":{let m=h(p?.threadId),f=h(p?.turnId),y=A(p?.item);if(m===void 0||f===void 0||y===void 0)break;let x=t.get(m)??new Map,b=x.get(f)??[];b.push(y),x.set(f,b),t.set(m,x);break}default:break}}let r=Array.from(n.entries())[0];if(r===void 0)return;let[o,i]=r,s=t.get(o);if(s===void 0||s.size===0)return;let a=Array.from(s.entries()).map(([d,u])=>({id:d,items:u}));return{thread:{...i,turns:a}}}function v_e(e){let n=A(e.rawValue),t=A(n?.message)??n,r=h(t?.method);if(r===void 0)return;let o=A(t?.params);return{jsonrpc:"2.0",method:r,...o===void 0?{}:{params:o}}}function S_e(e){let n=new Map;for(let t of e){if(t.provider!=="codex-app-server"||t.captureKind!=="request")continue;let r=A(t.rawValue),o=A(r?.message)??r,i=m5(o?.id),s=h(o?.method);i!==void 0&&s!==void 0&&n.set(i,s)}return n}function m5(e){switch(typeof e){case"number":return Number.isFinite(e)?String(e):void 0;case"string":return e;default:return}}function k_e(e,n){let t=A(e.rawValue),r=A(t?.message)??t,o=h(t?.requestMethod)??n.get(m5(r?.id)??"");if(!(o===void 0||r===void 0)){if("error"in r){let i=A(r.error),s=typeof i?.code=="number"?i.code:-32e3,a=h(i?.message)??"recorded Codex error";return{method:o,message:{jsonrpc:"2.0",id:r.id===void 0?1:r.id,error:{code:s,message:a}}}}return{method:o,message:{jsonrpc:"2.0",id:r.id===void 0?1:r.id,result:r.result}}}}var h5=F(()=>{"use strict";Hn()});function g5(e){let n=0,t=[];return{mode:e,waitUntil:async o=>{let i=Math.max(0,o-n);switch(n=Math.max(n,o),e.type){case"immediate":return;case"realtime":return dT(i);case"speedMultiplier":return dT(Math.round(i/Math.max(.001,e.multiplier)));case"fixedDelayMs":return dT(e.delayMs);case"step":return new Promise(s=>{t.push(s)})}},step:()=>{t.shift()?.()}}}function dT(e){return e<=0?Promise.resolve():new Promise(n=>setTimeout(n,e))}var y5=F(()=>{"use strict"});function x5(e){if(e===void 0||e===""||e==="immediate")return{type:"immediate"};if(e==="realtime")return{type:"realtime"};let n=e.match(/^([0-9]+(?:\.[0-9]+)?)x$/u);if(n!==null){let r=Number(n[1]);if(Number.isFinite(r)&&r>0)return{type:"speedMultiplier",multiplier:r}}let t=e.match(/^([0-9]+)ms$/u);if(t!==null){let r=Number(t[1]);if(Number.isSafeInteger(r)&&r>=0)return{type:"fixedDelayMs",delayMs:r}}throw new Error("invalid --agent-replay-speed. Use immediate, realtime, <number>x, or <number>ms")}function _5(e){switch(e){case void 0:case"":case"auto":return"auto";case"codex":return"codex";case"claude-code":return"claude-code";default:throw new Error("invalid --agent-replay-provider. Use auto, codex, or claude-code")}}async function b5(e){let n=await $L(e.fixturePath);if(n.type==="error")return{type:"error",message:`failed to load replay fixture: ${T_e(n.error)}`};let t=C_e(n.fixture,e.provider);if(t.type==="error")return t;let r=g5(e.clockMode);switch(t.provider){case"codex":{let o=p5({fixture:n.fixture,clock:r}),i=!1;return{type:"ok",runtime:{fixture:n.fixture,provider:"codex",codex:o,claudeCodeRunner:void 0,playCodex:()=>{i||(i=!0,o.play().catch(s=>{if(e.onPlaybackError===void 0)throw s;e.onPlaybackError(s)}))}}}}case"claude-code":return{type:"ok",runtime:{fixture:n.fixture,provider:"claude-code",codex:void 0,claudeCodeRunner:f5({fixture:n.fixture,clock:r}),playCodex:()=>{}}}}}function C_e(e,n){if(n!=="auto")return{type:"ok",provider:n};let t=e.records.some(o=>o.provider==="codex-app-server"),r=e.records.some(o=>o.provider==="claude-code-sdk");switch(!0){case(t&&!r):return{type:"ok",provider:"codex"};case(r&&!t):return{type:"ok",provider:"claude-code"};case(t&&r):return{type:"error",message:"replay fixture contains both Codex and Claude records; pass --agent-replay-provider"};default:return{type:"error",message:"replay fixture contains no provider records"}}}function w5(e){return!0===e instanceof Error?e.message:String(e)}function T_e(e){switch(e.type){case"invalid_json":case"invalid_record":return`${e.path}:${e.line??"?"} ${e.message??e.type}`;case"credential_not_redacted":return`${e.path}:${e.line??"?"} contains credential-like field ${e.keyPath??"<unknown>"}`;case"file_read_failed":return`${e.path}: ${e.message??"read failed"}`;default:return`${e.path}: ${e.type}`}}var uT=F(()=>{"use strict";h5();y5();IS()});function Uf(e){let n=e.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS?.trim();if(n===void 0||n==="")return v5;let t=Number(n);return Number.isFinite(t)&&t>0?t:v5}function Ex(e){if(!(e.windowMs>0))throw new Error("Claude dispatch liveness window must be > 0");let n=e.now??(()=>Date.now()),t=e.setTimer??((m,f)=>{let y=setTimeout(m,f);return y.unref?.(),y}),r=e.clearTimer??(m=>clearTimeout(m)),o=n(),i=e.lastSdkActivityMs(),s,a=!1,d=!1,u=()=>{s!==void 0&&(r(s),s=void 0)},c=m=>{d=!0,u(),e.onWedged({waitedMs:n()-o,cause:m})},l=()=>{if(s=void 0,a||d)return;if(e.isDelivered()){a=!0;return}if(e.isSessionClosed()){c("session_closed");return}let m=e.lastSdkActivityMs();if(m>i||e.hasPendingBlockingRequest()){i=m,p();return}c("silent")};function p(){a||d||(u(),s=t(l,e.windowMs))}return p(),{stop:()=>{a=!0,u()}}}var v5,na,S5=F(()=>{"use strict";v5=9e4;na=class extends Error{waitedMs;constructor(n){super(`Claude Code produced no output within ${Math.round(n/1e3)}s of starting; the runner killed the wedged session`),this.name="ClaudeCodeDispatchLivenessTimeoutError",this.waitedMs=n}}});function hs(e){return{name:"linzumi",command:e.command??"linzumi",args:[...e.argsPrefix??[],"mcp","server","--api-url",e.kandanUrl,...e.authFilePath===void 0?[]:["--auth-file",e.authFilePath],...e.delegationAuthFilePath===void 0?[]:["--delegation-auth-file",e.delegationAuthFilePath],...e.ownerUsername===void 0?[]:["--owner-username",e.ownerUsername],...e.cwd===void 0?[]:["--cwd",e.cwd],...e.threadId===void 0?[]:["--thread-id",e.threadId],"--mode",e.operatingMode??"text",...e.toolScope===void 0||e.toolScope==="all"?[]:["--tool-scope",e.toolScope],...e.agentSession===!0?["--agent-session"]:[]],env:{...e.accessToken===void 0?{}:{LINZUMI_MCP_ACCESS_TOKEN:e.accessToken},...e.devServices===void 0?{}:{LINZUMI_DEV_SERVICES_SCOPE:e.devServices.scope,LINZUMI_DEV_SERVICES_OWNER_PID:String(e.devServices.ownerPid)},ELECTRON_RUN_AS_NODE:"1"}}}function Dx(e){return["-c",`mcp_servers.${e.name}.command=${JSON.stringify(e.command)}`,"-c",`mcp_servers.${e.name}.args=${P5(e.args)}`,...Object.entries(e.env).flatMap(([n,t])=>["-c",`mcp_servers.${e.name}.env.${n}=${JSON.stringify(t)}`])]}function Mx(e,n,t=[]){let r=n?.trim()??"";switch(r===""){case!0:return{command:"linzumi",argsPrefix:[]};case!1:switch(r.endsWith(".ts")||r.endsWith(".js")){case!0:return{command:e,argsPrefix:[...Bf(t),r]};case!1:return{command:r,argsPrefix:[]}}}}function Bf(e,n=0){let t=e[n];if(t===void 0)return[];if(P_e(t)){let r=e[n+1];return r===void 0?Bf(e,n+1):[t,r,...Bf(e,n+2)]}return I_e(t)?[t,...Bf(e,n+1)]:Bf(e,n+1)}function P_e(e){return["--require","-r","--import","--loader","--experimental-loader"].includes(e)}function I_e(e){return["--require=","-r=","--import=","--loader=","--experimental-loader="].some(n=>e.startsWith(n))}function k5(e){return{[e.name]:{type:"stdio",command:e.command,args:[...e.args],env:{...e.env}}}}function C5(e){return`${JSON.stringify({mcpServers:{[e.name]:{command:e.command,args:e.args,env:e.env}}},null,2)}
|
|
695
698
|
`}function T5(e){return`[mcp_servers.${e.name}]
|
|
696
699
|
command = ${JSON.stringify(e.command)}
|
|
697
700
|
args = ${P5(e.args)}
|
|
@@ -1016,8 +1019,8 @@ query VmGoldenSelectByProject($projectId: ID!, $computeKey: String, $publicId: I
|
|
|
1016
1019
|
`)}function IP(e){return[`linzumi vm: could not auto-install e2fsprogs (${e}).`,"The packed-golden (Model B) concurrency path pre-formats ext4 storage/overlay","disks with mkfs.ext4; on macOS e2fsprogs is keg-only. Forkable-golden execution","still works without it; to enable packed-golden, install with:",""," brew install e2fsprogs","",`then ensure ${Hf} is on PATH and re-run \`linzumi vm setup\`.`].join(`
|
|
1017
1020
|
`)}async function AP(){try{return await Yc("brew",["--version"],{timeout:3e4}),!0}catch{return!1}}async function x_(e){try{return await Yc("brew",["list","--formula",e],{timeout:6e4}),!0}catch{return!1}}async function B9(e={}){let n=e.platform??process.platform,t=e.brewAvailable??AP,r=e.brewInstalled??x_;if(n!=="darwin")return{ok:!0,applies:!1,homebrewAvailable:!1,formulae:[],missing:[]};if(!await t())return{ok:!1,applies:!0,homebrewAvailable:!1,formulae:RP.map(a=>({name:a,installed:!1})),missing:[...RP]};let i=[];for(let a of RP)i.push({name:a,installed:await r(a)});let s=i.filter(a=>!a.installed).map(a=>a.name);return{ok:s.length===0,applies:!0,homebrewAvailable:!0,formulae:i,missing:s}}function y_(e){return[`linzumi vm: could not auto-install the smolvm native dependencies (${e}).`,"smolmachines 1.3.x on macOS needs libepoxy + virglrenderer (libkrun virtio-gpu),",'or Machine.create fails with a dlopen "Library not loaded". Install them with:',""," brew install libepoxy",` brew tap ${Pd}`,` brew install ${Pd}/virglrenderer`,"","then re-run `linzumi vm setup`."].join(`
|
|
1018
1021
|
`)}function DP(e){return e instanceof Error?e.message:String(e)}var Yc,rSe,EP,Pd,j9,oSe,RP,$P=F(()=>{"use strict";ao();Nc();Yc=tSe(Xve),rSe=6e5,EP=6e5,Pd="slp/krun",j9=[{formula:"libepoxy"},{formula:"virglrenderer",tap:Pd}];oSe=Gf;RP=["libepoxy","virglrenderer","molten-vk"]});import{existsSync as J9}from"node:fs";import{execFileSync as sSe}from"node:child_process";function aSe(e){if(e===null)return!1;let n=/^(\d+)\.(\d+)\./.exec(e);if(n===null)return!1;let t=Number(n[1]),r=Number(n[2]);return t>1?!0:t===1&&r>=3}function dSe(e,n){return e==="darwin"?`macOS (${n})`:e==="linux"?`Linux (${n})`:`${e} (${n})`}function uSe(e=process.platform){if(e==="darwin")try{let n=sSe("sysctl",["-n","kern.hv_support"],{timeout:5e3,encoding:"utf8"}).trim();return n==="1"?{capable:!0,reason:"Apple Hypervisor (kern.hv_support=1)"}:{capable:!1,reason:`Apple Hypervisor not available (kern.hv_support=${n||"unknown"})`}}catch(n){return{capable:!1,reason:`could not read kern.hv_support (${cSe(n)})`}}return e==="linux"?J9("/dev/kvm")?{capable:!0,reason:"KVM available (/dev/kvm present)"}:{capable:!1,reason:"KVM not available (/dev/kvm missing)"}:{capable:!1,reason:`hardware virtualization unsupported on ${e}`}}async function K9(e={}){let n=e.platform??process.platform,t=e.arch??process.arch,r=e.runtimeDir??zt(),o=e.fileExists??J9,i=e.mkfsExt4Present??Gf,s=e.installedRuntimeVersion??el,a=e.vmCapability??(()=>uSe(n)),d=e.macNativeDeps??(()=>B9({platform:n})),u=e.workspaceLocalVmExecutionFlag??null,c=MT(n,t)!==null,l=AT(r,n,t),{capable:p,reason:m}=a(),f=s(r),y=f===void 0?null:f,x=y!==null,b=aSe(y),S=l!==null&&o(l.smolVmmBin),v=l!==null&&o(l.agentRootfsTar),w=i(),k=ra({runtimeDir:r,platform:n,arch:t,fileExists:o,hasMkfsExt4:i}),R=k.ok,P=k.ok?[]:k.blockers,O=await d(),E=[];c||E.push(`host platform ${n}/${t} is not supported (smol-vmm ships darwin-arm64, linux-arm64, linux-x64 only)`),p||E.push(`hardware virtualization unavailable: ${m}`),O.applies&&!O.ok&&(O.homebrewAvailable?O.missing.length>0&&E.push(`macOS libkrun native deps missing: ${O.missing.join(", ")} (run \`linzumi vm setup\` to install via brew)`):E.push("Homebrew is not installed; the macOS libkrun native deps (libepoxy, virglrenderer, molten-vk) cannot be installed, so local VM cannot run. Install Homebrew (https://brew.sh) then run `linzumi vm setup`")),x?b||E.push(`the installed smolvm runtime ${y} is not LIVE-fork-capable (needs >= 1.3.x; pinned ${Nr}); run \`linzumi vm setup\` to upgrade`):E.push("the smolvm runtime is not installed (run `linzumi vm setup`)");for(let z of P)E.includes(z)||E.push(z);return{ready:c&&p&&O.ok&&x&&b&&R,blockers:E,platform:n,arch:t,osLabel:dSe(n,t),platformSupported:c,vmCapable:p,vmCapableReason:m,runtimeInstalled:x,runtimeVersion:y,runtimePinnedVersion:Nr,runtimeForkable:b,macNativeDepsApplies:O.applies,macNativeDepsOk:O.ok,homebrewAvailable:O.homebrewAvailable,macNativeDeps:O.formulae,macNativeDepsMissing:O.missing,smolVmmBinPresent:S,agentRootfsPresent:v,e2fsprogsPresent:w,packedGoldenCapable:R,packedGoldenBlockers:P,workspaceLocalVmExecutionFlag:u}}function cSe(e){return e instanceof Error?e.message:String(e)}var V9=F(()=>{"use strict";ao();$P();Nc()});function LP(e,n){return{method:e,metadata:D$(n),...lSe(e,n)}}function lSe(e,n){let t=pSe(e,n);switch(e){case"thread/tokenUsage/updated":return{token_usage_summary:hSe(n)??"seen (no details)",...t};case"account/rateLimits/updated":return{rate_limit_summary:gSe(n)??"seen (no details)",...t};case"warning":case"error":return{...qg(e,n),...t};default:return t}}function pSe(e,n){return fSe(e,n)?{credit_exhaustion_detected:!0,credit_exhaustion_summary:"OpenAI credits exhausted. Add credits or upgrade the account to continue Codex jobs."}:{}}function fSe(e,n){let t=[e,...OP(n,0)].join(`
|
|
1019
|
-
`).toLowerCase();return mSe.some(r=>t.includes(r))}function OP(e,n){if(n>4)return[];if(typeof e=="string")return[e];if(typeof e=="number"||typeof e=="boolean")return[String(e)];if(Array.isArray(e))return e.flatMap(r=>OP(r,n+1));let t=bt(e);return t===void 0?[]:Object.entries(t).flatMap(([r,o])=>[r,...OP(o,n+1)])}function hSe(e){let n=bt(e.tokenUsage)??bt(e.token_usage)??bt(e.usage)??e,t=ti(bt(n.total))??ti(bt(n.totalUsage))??ti(bt(n.total_usage))??ti(bt(e.totalTokenUsage))??ti(bt(e.total_token_usage))??ti(n),r=ti(bt(n.last))??ti(bt(n.lastUsage))??ti(bt(n.last_usage))??ti(bt(e.lastTokenUsage))??ti(bt(e.last_token_usage)),o=[t===void 0?void 0:`total ${t}`,r===void 0?void 0:`last ${r}`].filter(i=>i!==void 0);return o.length===0?void 0:o.join(" | ")}function ti(e){if(e===void 0)return;let n=bt(e.inputTokensDetails)??bt(e.input_tokens_details),t=bt(e.outputTokensDetails)??bt(e.output_tokens_details),r=on(e.inputTokens)??on(e.input_tokens)??on(e.promptTokens)??on(e.prompt_tokens),o=on(e.outputTokens)??on(e.output_tokens)??on(e.completionTokens)??on(e.completion_tokens),i=on(e.totalTokens)??on(e.total_tokens),s=on(e.cachedInputTokens)??on(e.cached_input_tokens)??on(e.cacheReadInputTokens)??on(e.cache_read_input_tokens)??on(n?.cachedTokens)??on(n?.cached_tokens),a=on(e.reasoningOutputTokens)??on(e.reasoning_output_tokens)??on(e.reasoningTokens)??on(e.reasoning_tokens)??on(t?.reasoningTokens)??on(t?.reasoning_tokens),d=[r===void 0?void 0:`${r} in`,o===void 0?void 0:`${o} out`,i===void 0?void 0:`${i} total`,s===void 0?void 0:`${s} cached`,a===void 0?void 0:`${a} reasoning`].filter(u=>u!==void 0);return d.length===0?void 0:d.join(" / ")}function gSe(e){let n=bt(e.rateLimits)??bt(e.rate_limits)??bt(e.limits)??e,t=W9(n,void 0),r=Object.entries(n).flatMap(([i,s])=>{let a=bt(s);return a===void 0?[]:[W9(a,i)]}),o=[t,...r].filter(i=>i!==void 0);return o.length===0?void 0:o.join(" | ")}function W9(e,n){let t=ri(e.limitName)??ri(e.limit_name)??ri(e.name)??ri(e.type)??n,r=ri(e.planType)??ri(e.plan_type)??ri(e.plan),o=on(e.remaining)??on(e.remainingRequests)??on(e.remaining_requests)??on(e.remainingTokens)??on(e.remaining_tokens),i=on(e.limit)??on(e.requestLimit)??on(e.request_limit)??on(e.limitRequests)??on(e.limit_requests)??on(e.tokenLimit)??on(e.token_limit)??on(e.limitTokens)??on(e.limit_tokens),s=ri(e.resetAt)??ri(e.reset_at)??ri(e.resetsAt)??ri(e.resets_at)??H9(e.resetsAt)??H9(e.resets_at)??__(e.resetAfterSeconds)??__(e.reset_after_seconds)??__(e.retryAfterSeconds)??__(e.retry_after_seconds),a=on(e.usedPercent)??on(e.used_percent),d=on(e.windowDurationMins)??on(e.window_duration_mins),u=[t,r].filter(m=>m!==void 0).join(" "),c=u===""?void 0:u,p=[o===void 0?void 0:i===void 0?`${o} remaining`:`${o}/${i} remaining`,a===void 0?void 0:`${a}% used`,d===void 0?void 0:`${d}m window`,s===void 0?void 0:`reset ${s}`].filter(m=>m!==void 0);return p.length===0?c===void 0?void 0:`${c} seen (no details)`:c===void 0?p.join(" "):`${c} ${p.join(" ")}`}function __(e){let n=on(e);return n===void 0?void 0:`${n}s`}function H9(e){let n=on(e);return n===void 0?void 0:new Date(n*1e3).toISOString()}function bt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function ri(e){return typeof e=="string"&&e.trim()!==""?e:void 0}function on(e){if(typeof e=="number"&&Number.isSafeInteger(e))return e;if(typeof e!="string")return;let n=Number.parseInt(e,10);return Number.isSafeInteger(n)&&n.toString()===e.trim()?n:void 0}var mSe,G9=F(()=>{"use strict";Ng();$n();mSe=["insufficient_quota","quota_exceeded","billing_hard_limit","billing hard limit","credit_exhausted"]});function Q9(e){return Math.ceil(e.length/4)}function X9(e){if(!Z(e))return;let n=Y(e.ir_version),t=
|
|
1020
|
-
`,1)[0]??i)}}return{filesTouched:[...n].slice(0,100),commandsRun:[...t].slice(0,100),errorCount:r}}function wSe(e){if(e===void 0)return[];let n=h(e.path),r=(
|
|
1022
|
+
`).toLowerCase();return mSe.some(r=>t.includes(r))}function OP(e,n){if(n>4)return[];if(typeof e=="string")return[e];if(typeof e=="number"||typeof e=="boolean")return[String(e)];if(Array.isArray(e))return e.flatMap(r=>OP(r,n+1));let t=bt(e);return t===void 0?[]:Object.entries(t).flatMap(([r,o])=>[r,...OP(o,n+1)])}function hSe(e){let n=bt(e.tokenUsage)??bt(e.token_usage)??bt(e.usage)??e,t=ti(bt(n.total))??ti(bt(n.totalUsage))??ti(bt(n.total_usage))??ti(bt(e.totalTokenUsage))??ti(bt(e.total_token_usage))??ti(n),r=ti(bt(n.last))??ti(bt(n.lastUsage))??ti(bt(n.last_usage))??ti(bt(e.lastTokenUsage))??ti(bt(e.last_token_usage)),o=[t===void 0?void 0:`total ${t}`,r===void 0?void 0:`last ${r}`].filter(i=>i!==void 0);return o.length===0?void 0:o.join(" | ")}function ti(e){if(e===void 0)return;let n=bt(e.inputTokensDetails)??bt(e.input_tokens_details),t=bt(e.outputTokensDetails)??bt(e.output_tokens_details),r=on(e.inputTokens)??on(e.input_tokens)??on(e.promptTokens)??on(e.prompt_tokens),o=on(e.outputTokens)??on(e.output_tokens)??on(e.completionTokens)??on(e.completion_tokens),i=on(e.totalTokens)??on(e.total_tokens),s=on(e.cachedInputTokens)??on(e.cached_input_tokens)??on(e.cacheReadInputTokens)??on(e.cache_read_input_tokens)??on(n?.cachedTokens)??on(n?.cached_tokens),a=on(e.reasoningOutputTokens)??on(e.reasoning_output_tokens)??on(e.reasoningTokens)??on(e.reasoning_tokens)??on(t?.reasoningTokens)??on(t?.reasoning_tokens),d=[r===void 0?void 0:`${r} in`,o===void 0?void 0:`${o} out`,i===void 0?void 0:`${i} total`,s===void 0?void 0:`${s} cached`,a===void 0?void 0:`${a} reasoning`].filter(u=>u!==void 0);return d.length===0?void 0:d.join(" / ")}function gSe(e){let n=bt(e.rateLimits)??bt(e.rate_limits)??bt(e.limits)??e,t=W9(n,void 0),r=Object.entries(n).flatMap(([i,s])=>{let a=bt(s);return a===void 0?[]:[W9(a,i)]}),o=[t,...r].filter(i=>i!==void 0);return o.length===0?void 0:o.join(" | ")}function W9(e,n){let t=ri(e.limitName)??ri(e.limit_name)??ri(e.name)??ri(e.type)??n,r=ri(e.planType)??ri(e.plan_type)??ri(e.plan),o=on(e.remaining)??on(e.remainingRequests)??on(e.remaining_requests)??on(e.remainingTokens)??on(e.remaining_tokens),i=on(e.limit)??on(e.requestLimit)??on(e.request_limit)??on(e.limitRequests)??on(e.limit_requests)??on(e.tokenLimit)??on(e.token_limit)??on(e.limitTokens)??on(e.limit_tokens),s=ri(e.resetAt)??ri(e.reset_at)??ri(e.resetsAt)??ri(e.resets_at)??H9(e.resetsAt)??H9(e.resets_at)??__(e.resetAfterSeconds)??__(e.reset_after_seconds)??__(e.retryAfterSeconds)??__(e.retry_after_seconds),a=on(e.usedPercent)??on(e.used_percent),d=on(e.windowDurationMins)??on(e.window_duration_mins),u=[t,r].filter(m=>m!==void 0).join(" "),c=u===""?void 0:u,p=[o===void 0?void 0:i===void 0?`${o} remaining`:`${o}/${i} remaining`,a===void 0?void 0:`${a}% used`,d===void 0?void 0:`${d}m window`,s===void 0?void 0:`reset ${s}`].filter(m=>m!==void 0);return p.length===0?c===void 0?void 0:`${c} seen (no details)`:c===void 0?p.join(" "):`${c} ${p.join(" ")}`}function __(e){let n=on(e);return n===void 0?void 0:`${n}s`}function H9(e){let n=on(e);return n===void 0?void 0:new Date(n*1e3).toISOString()}function bt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function ri(e){return typeof e=="string"&&e.trim()!==""?e:void 0}function on(e){if(typeof e=="number"&&Number.isSafeInteger(e))return e;if(typeof e!="string")return;let n=Number.parseInt(e,10);return Number.isSafeInteger(n)&&n.toString()===e.trim()?n:void 0}var mSe,G9=F(()=>{"use strict";Ng();$n();mSe=["insufficient_quota","quota_exceeded","billing_hard_limit","billing hard limit","credit_exhausted"]});function Q9(e){return Math.ceil(e.length/4)}function X9(e){if(!Z(e))return;let n=Y(e.ir_version),t=qe(e.nodes);if(!(n===void 0||t===void 0))return{irVersion:n,threadTitle:h(e.thread_title),nodes:t.flatMap(ySe),hasMore:e.has_more===!0,cursor:Y(e.cursor),budget:xSe(e.budget)}}function ySe(e){if(!Z(e))return[];let n=h(e.kind),t=Y(e.seq),r=h(e.body)??"";return n===void 0||t===void 0?[]:[{kind:n,seq:t,at:h(e.at),engine:h(e.engine)??"none",body:r,structured:A(e.structured),actor:A(e.actor),attachments:qe(e.attachments)??[],sourceSeq:Y(e.source_seq),streamKey:h(e.stream_key)}]}function xSe(e){if(!Z(e))return;let n=Y(e.context_window),t=Y(e.max_emission_tokens);if(!(n===void 0||t===void 0||t<=0))return{model:h(e.model),contextWindow:n,maxEmissionTokens:t}}function _Se(e,n){let t=n>0?n:Z9,r=e.filter(a=>a.kind!=="reasoning"),o=e.length-r.length,i=[],s=0;for(let a=r.length-1;a>=0;a-=1){let d=r[a];if(d===void 0)continue;let u=Q9(e3(d,t));if(i.length>0&&s+u>t)break;s+=u,i.unshift(d)}return{tail:i,omittedNodeCount:r.length-i.length,redactedReasoningCount:o,artifacts:bSe(e)}}function bSe(e){let n=new Set,t=new Set,r=0;for(let o of e){if(o.kind==="error"&&(r+=1),o.kind==="file_change")for(let i of wSe(o.structured))n.add(i);if(o.kind==="command_execution"){let i=h(o.structured?.command)?.trim();i!==void 0&&i!==""&&t.add(i.split(`
|
|
1023
|
+
`,1)[0]??i)}}return{filesTouched:[...n].slice(0,100),commandsRun:[...t].slice(0,100),errorCount:r}}function wSe(e){if(e===void 0)return[];let n=h(e.path),r=(qe(e.paths)??qe(e.files)??[]).flatMap(o=>{let i=h(o);if(i!==void 0)return[i];let s=Z(o)?h(o.path):void 0;return s===void 0?[]:[s]});return n===void 0?r:[n,...r]}function Y9(e){let n=e.budget?.maxEmissionTokens??Z9,t=_Se(e.nodes,n),r=PSe({resumeFailure:e.resumeFailure,threadTitle:e.threadTitle,linzumiContext:e.linzumiContext,budgeted:t,transcriptEmpty:t.tail.length===0}),o=[Fi(r,"commentary")],i=0;for(let a of t.tail)i+=1,o.push(...vSe(a,n,i));let s=o.reduce((a,d)=>a+Q9(JSON.stringify(d)),0);return{items:o,emittedNodeCount:t.tail.length,omittedNodeCount:t.omittedNodeCount,redactedReasoningCount:t.redactedReasoningCount,emittedTokenEstimate:s,maxEmissionTokens:n}}function vSe(e,n,t){let r=e3(e,n);switch(e.kind){case"user_message":return[{type:"message",role:"user",content:[{type:"input_text",text:TSe(e,r)}]}];case"assistant_message":return[Fi(r,CSe(e))];case"command_execution":return SSe(e,r,t);case"tool_call":return kSe(e,r,t);case"reasoning":return[];case"file_change":return[Fi(`[file change]
|
|
1021
1024
|
${r}`,"commentary")];case"terminal_input":return[Fi(`[terminal input]
|
|
1022
1025
|
${r}`,"commentary")];case"tool_result":return[Fi(`[tool result]
|
|
1023
1026
|
${r}`,"commentary")];case"approval_request":return[Fi(`[approval] ${r}`,"commentary")];case"agent_status":return[Fi(`[status] ${r}`,"commentary")];case"system_notice":return[Fi(`[notice] ${r}`,"commentary")];case"error":return[Fi(`[error] ${r}`,"commentary")];default:return[Fi(`[${e.kind}] ${r}`,"commentary")]}}function SSe(e,n,t){let r=n3(e,t),o=h(e.structured?.command),i=h(e.structured?.cwd),s=Y(e.structured?.exit_code),a=h(e.structured?.output)??n;return[{type:"function_call",name:"shell",call_id:r,arguments:JSON.stringify({command:o??RSe(n),...i===void 0||i===""?{}:{cwd:i}})},{type:"function_call_output",call_id:r,output:s===void 0?a:`exit_code=${s}
|
|
@@ -1518,22 +1521,22 @@ To kick the agent off:
|
|
|
1518
1521
|
`)}catch{}try{t(o,i)}catch{}}}function kJ(e,n,t=process){t.once("SIGINT",()=>e.requestStop()),t.once("SIGTERM",()=>e.requestStop({forwardSignal:"SIGTERM"})),t.on("SIGHUP",()=>{n("supervisor.sighup_survived",{note:"controlling terminal lost; supervision continues headless"})})}async function GIe(e){let n=hJ(e),t=dl(n,["--workspace"])??"",r=dl(n,["--linzumi-url","--api-url"])??Kt;Pg("supervisor_console");let o=SJ(),i=xJ({workspace:t,linzumiUrl:r}),s=_J({path:i,workspace:t,linzumiUrl:r});if(!s.ok)throw new Error(`another \`linzumi connect --supervise\` is already running for ${t===""?"this identity":`workspace ${t}`}${s.holderPid===void 0?"":` (pid ${s.holderPid})`}; stop it first, or run this one without --supervise (lock: ${i})`);let d=pm({argv1:process.argv[1],cwd:process.cwd(),onEvent:(c,l)=>o(`supervisor.${c}`,l)})?.entryPath??process.argv[1];if(d===void 0||d.trim()==="")throw s.release(),new Error("connect --supervise cannot resolve its own CLI entry script (empty argv[1])");let u=wJ({childArgs:n,initialEntryPath:d,initialVersion:jt,ownEntryPath:d,spawnChild:({entryPath:c,childArgs:l,onExit:p,generation:m})=>{let f=uJ(process.execPath,[c,"connect",...l],m===void 0?{stdio:"inherit",env:{...process.env,[G_]:"1"}}:{stdio:["inherit","inherit","inherit","ipc"],env:{...process.env,[G_]:"1",[oI]:String(m.epoch),...m.handoffFromPid===void 0?{}:{[iI]:String(m.handoffFromPid)}}}),y=!1,x=b=>{y||(y=!0,p(b))};if(f.on("exit",(b,S)=>x({code:b,signal:S})),f.on("error",b=>{o("supervisor.child_spawn_error",{message:b instanceof Error?b.message:String(b)}),x({code:null,signal:null})}),m?.onMessage!==void 0){let b=m.onMessage;f.on("message",S=>b(S))}return{pid:f.pid,kill:b=>{try{f.kill(b)}catch{}},...m===void 0?{}:{send:b=>{try{return f.send(b)}catch{return!1}}}}},probeLatestVersion:()=>fI("latest"),installVersion:async c=>({entryPath:(await lB({version:c,onEvent:(p,m)=>o(`supervisor.${p}`,m)})).entryPath}),readEntryBytes:c=>gJ(c),reexecSelf:({entryPath:c})=>{s.release(),uJ(process.execPath,[c,"connect","--supervise",...n],{detached:!0,stdio:"inherit",env:{...process.env}}).unref(),process.exit(0)},reexecAttemptStore:U_(vJ(process.env)),...sI(process.env)?{generationOverlap:{enabled:!0,stillbornWindowMs:b7(process.env)}}:{},log:o,scheduler:{setTimeout:(c,l)=>setTimeout(c,l),clearTimeout:c=>clearTimeout(c)},now:()=>Date.now()});kJ(u,o);try{u.start(),await u.done}finally{s.release()}}var G_,bJ,NI=F(()=>{"use strict";$i();dI();B_();mI();Xs();bI();Lt();Zu();G_="LINZUMI_SUPERVISED";bJ={backoffBaseMs:1e3,backoffCapMs:6e4,crashLoopWindowMs:5*6e4,crashLoopThreshold:5,crashLoopCadenceMs:5*6e4,healthyRunMs:5*6e4,updateCheckIntervalMs:15*6e4,drainDeadlineMs:15*6e4}});function TJ(){let e=new Map;return{current:n=>e.get(n),adopt:(n,t)=>{if(!Number.isInteger(t))return!1;let r=e.get(n);return r!==void 0&&t<r||r===t?!1:(e.set(n,t),!0)},release:n=>{e.delete(n)},snapshot:()=>[...e.entries()].map(([n,t])=>({threadId:n,leaseEpoch:t}))}}function PJ(e,n){return n===void 0||e===void 0?!1:n<e}function IJ(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.lease_epoch;return typeof n=="number"&&Number.isInteger(n)?n:void 0}var UI=F(()=>{"use strict"});function EJ(e){let n=e.store.initial(e.watermarkKey);return mm(n,e.sourceSeq)?(V_(e.store,e.watermarkKey,e.sourceSeq,e.log),!0):!1}async function ZIe(e){let n=e.policy??FB,t=e.nowMs??Date.now();if(e.outcome==="dispatched"){e.inFlightGuard?.mark(e.watermarkKey,e.sourceSeq),e.queue.ack(e.sourceSeq);return}if(e.outcome==="ignored"){e.queue.ack(e.sourceSeq);return}if(e.outcome==="permanent_failed"){let i=QIe(e.queue,e.sourceSeq);e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"permanent",attempts:i,alreadyPublished:!0});return}let r=e.queue.recordAttempt(e.sourceSeq),o=e.queue.entries().find(i=>i.sourceSeq===e.sourceSeq);o!==void 0&&zB(o,n,t)&&(e.log("resume_keystone.dead_lettered",{threadId:e.threadId,sourceSeq:e.sourceSeq,attempts:r}),e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"exhausted",attempts:r,alreadyPublished:!1}))}function QIe(e,n){return e.entries().find(t=>t.sourceSeq===n)?.attempts??0}function Z_(e,n){let t=e.entries(),r;for(let o of t)(r===void 0||o.enqueuedAtMs<r)&&(r=o.enqueuedAtMs);return{pending_count:t.length,oldest_age_ms:r===void 0?null:Math.max(0,n-r)}}async function DJ(e){let n=[],t="ignored",r=!1,o=e.queue.entries().length+1;for(;o>0;){o-=1;let i=e.queue.head();if(i===void 0)break;let s=e.store.initial(e.watermarkKey);if(!mm(s,i.sourceSeq)){e.queue.ack(i.sourceSeq);continue}if(e.onlyDispatchUnattempted&&e.serverRows.length===0&&i.attempts>0){e.log("resume_keystone.attempted_entry_withheld",{threadId:e.threadId,sourceSeq:i.sourceSeq,attempts:i.attempts}),e.queue.deadLetter(i.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:i.sourceSeq,reason:"withheld",attempts:i.attempts,alreadyPublished:!1});continue}let a=await e.dispatch(i.sourceSeq,i.payload);if(await ZIe({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,sourceSeq:i.sourceSeq,threadId:e.threadId,outcome:a,log:e.log,policy:e.policy,nowMs:e.nowMs,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),r||(t=a,r=!0),a==="dispatched"&&n.push(i.sourceSeq),a==="transient_failed")break}return{dispatched:n,headOutcome:t}}async function MJ(e){e.queue.enqueue(e.sourceSeq,e.kind,e.payload,e.nowMs??Date.now());let n=e.leases.current(e.threadId);if(PJ(n,e.leaseEpoch))return e.log("resume_keystone.fenced",{threadId:e.threadId,heldLeaseEpoch:n??null,controlLeaseEpoch:e.leaseEpoch??null,sourceSeq:e.sourceSeq}),e.log("commander.invariant_violation",{invariant:"lease_fence_violation",thread_id:e.threadId,harness:null,detail:`held_lease_epoch=${n??"none"} control_lease_epoch=${e.leaseEpoch??"none"} source_seq=${e.sourceSeq}`}),e.queue.ack(e.sourceSeq),"ignored";e.leaseEpoch!==void 0&&e.leases.adopt(e.threadId,e.leaseEpoch);let t=e.serverRows??[];if(t.length>0){let i=e.store.initial(e.watermarkKey),s=hm(i,t);s!==void 0&&s!==i&&(V_(e.store,e.watermarkKey,s,e.log),e.log("resume_keystone.live_miss_reconciled",{threadId:e.threadId,reconciledWatermark:s,sourceSeq:e.sourceSeq}))}let r=e.store.initial(e.watermarkKey);if(!mm(r,e.sourceSeq))return e.log("resume_keystone.already_applied",{threadId:e.threadId,sourceSeq:e.sourceSeq,appliedSourceSeq:r??null}),e.queue.ack(e.sourceSeq),"ignored";let o=e.reconcilerDeadlineMs??RJ;try{return(await e.lock.runExclusive(e.threadId,()=>DJ({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),o)).headOutcome}catch(i){if(i instanceof ll)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"receive",sourceSeq:e.sourceSeq,deadlineMs:o,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...Z_(e.queue,e.nowMs??Date.now())}),"transient_failed";if(i instanceof Ld)return e.log("resume_keystone.spawn_deadline_exceeded",{threadId:e.threadId,sourceSeq:e.sourceSeq,deadlineMs:o,...Z_(e.queue,e.nowMs??Date.now())}),"transient_failed";throw i}}async function AJ(e){let n=[],t=e.serverRows??[],r=e.reconcilerDeadlineMs??RJ,o=async()=>{let i=e.store.initial(e.watermarkKey),s=hm(i,t);s!==void 0&&s!==i&&V_(e.store,e.watermarkKey,s,e.log),e.queue.tornTail()&&(t.length>0?(e.log("resume_keystone.torn_tail",{threadId:e.threadId,reconciledWatermark:s??null,recovery:"server_reconcile"}),e.queue.reconciledTornTail()):(e.log("resume_keystone.torn_tail_unrecoverable",{threadId:e.threadId,reconciledWatermark:s??null}),e.onTornTailUnrecoverable!==void 0&&await e.onTornTailUnrecoverable(e.threadId),e.queue.reconciledTornTail())),n=(await DJ({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard})).dispatched};try{await e.lock.runExclusive(e.threadId,o,r)}catch(i){if(i instanceof ll)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"drain",deadlineMs:r,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...Z_(e.queue,e.nowMs??Date.now())}),n;if(i instanceof Ld)return e.log("resume_keystone.drain_deadline_exceeded",{threadId:e.threadId,deadlineMs:r,...Z_(e.queue,e.nowMs??Date.now())}),n;throw i}return n}var RJ,$J=F(()=>{"use strict";MI();AI();UI();OI();RJ=12e4});import{spawn as a0,spawnSync as e0}from"node:child_process";import{createHash as zd,randomUUID as BI}from"node:crypto";import{chmodSync as LJ,closeSync as jJ,existsSync as gl,fsyncSync as FJ,lstatSync as XIe,mkdirSync as qd,mkdtempSync as YIe,openSync as zJ,readdirSync as yK,readFileSync as pa,realpathSync as yl,renameSync as n0,rmSync as vm,statSync as d0,writeFileSync as Sm}from"node:fs";import{readFile as eRe}from"node:fs/promises";import{createServer as nRe}from"node:http";import{homedir as Pm,hostname as tRe,tmpdir as xK}from"node:os";import{createInterface as rRe}from"node:readline";import{basename as uR,dirname as fa,extname as oRe,isAbsolute as iRe,join as mt,resolve as Nd}from"node:path";import{fileURLToPath as sRe}from"node:url";async function mRe(e,n){if(e.agentReplay===void 0)return;let t=await b5({...e.agentReplay,onPlaybackError:r=>{let o=w5(r);n("agent_replay.codex_play_failed",{fixture_path:e.agentReplay?.fixturePath??null,message:o}),process.stderr.write(`[linzumi] agent replay Codex playback failed: ${o}
|
|
1519
1522
|
`)}});switch(t.type){case"ok":return n("agent_replay.runtime_started",{fixture_path:t.runtime.fixture.path,provider:t.runtime.provider,record_count:t.runtime.fixture.records.length}),t.runtime;case"error":throw new Error(t.message)}}function hRe(e){return{...e,CLAUDE_CODE_ENABLE_TASKS:"0"}}async function bl(e){let n=lR(e),t=mEe(e),r=await mRe(e,n),o=r===void 0?e:{...e,agentReplay:{...e.agentReplay,fixturePath:e.agentReplay?.fixturePath??r.fixture.path,provider:r.provider,clockMode:e.agentReplay?.clockMode??{type:"immediate"}},claudeCodeAvailable:r.provider==="claude-code",claudeCodeRunner:r.claudeCodeRunner},i={actions:[()=>n.close(),...t===void 0?[]:[()=>t.close()]],closePromise:void 0,removeHandlers:void 0},s=()=>uEe(i),a={stopAccepting:()=>{},flushInboundQueues:()=>{},interruptInFlightTurns:()=>Promise.resolve()},d={beginDraining:()=>{},isQuiescent:()=>!0,isWaitEligible:()=>!0,inFlightTurns:()=>[],lastActivityAtMs:()=>{},publishForcedKillTerminalStates:()=>Promise.resolve(),onTurnCompleted:()=>{}},u=o.threadProcess?.role==="thread"?void 0:w7({log:(p,m)=>n(p,m)});if(u!==void 0){let p=m=>u.handleIpcMessage(m);process.on("message",p),i.actions.push(()=>{process.off("message",p)}),n("runner.generation_overlap_enabled",{epoch:u.epoch,handoffFromPid:u.handoffFromPid??null})}let c=sJ({supervised:qI(process.env),platform:process.platform}),l=xEe(s,a,n,{signals:c?["SIGINT","SIGHUP"]:["SIGTERM","SIGINT","SIGHUP"]});if(i.removeHandlers=l.uninstall,process.platform!=="win32"){let p=aJ({hooks:{beginDraining:()=>d.beginDraining(),isQuiescent:()=>d.isQuiescent(),isWaitEligible:()=>d.isWaitEligible(),inFlightTurns:()=>d.inFlightTurns(),lastActivityAtMs:()=>d.lastActivityAtMs(),publishForcedKillTerminalStates:m=>d.publishForcedKillTerminalStates(m),onTurnCompleted:m=>d.onTurnCompleted(m),exitViaDrain:()=>{l.triggerFastExitDrain("SIGTERM")}},maxWaitMs:H_(process.env),hardCapMs:ZB(process.env,H_(process.env),u!==void 0),activityIdleMs:QB(process.env),signals:c?["SIGUSR2","SIGTERM"]:["SIGUSR2"],log:n});i.actions.push(p.uninstall),u!==void 0&&(u.requestUpdateDrain=m=>p.requestDrain(m),u.cancelUpdateDrain=m=>p.cancelDrain(m))}n("runner.starting",{runnerId:o.runnerId,cwd:o.cwd,kandanUrl:o.kandanUrl,debugTraceDir:t?.runDir??null,codex_bin_path:o.codexBin,codex_bin_source:o.dependencyStatus?.codex.source??null,codex_version:o.dependencyStatus?.codex.version??null}),L2e(),Zj({snapshotsRoot:Qp()}).then(p=>{p.removedSnapshotDirs.length>0&&n("runner.git_safety_snapshots_pruned",{removed_snapshots:p.removedSnapshotDirs.length,removed_refs:p.removedRefs.length})}).catch(p=>{n("runner.git_safety_snapshots_prune_failed",{message:p instanceof Error?p.message:String(p)})});try{if(o.machineId!==void 0){let p=o.machineId,m=()=>j_({machineId:p,runnerId:o.runnerId,cwd:o.cwd,workspace:Ur(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",onTakeover:y=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:y.holderRunnerId,holderPid:y.holderPid,reason:y.reason,lockPath:y.lockPath})}}),f=u?.handoffFromPid;if(u!==void 0&&f!==void 0){let y=h7({machineId:p,runnerId:o.runnerId,cwd:o.cwd,workspace:Ur(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",handoffHolderPid:f,onTakeover:S=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:S.holderRunnerId,holderPid:S.holderPid,reason:S.reason,lockPath:S.lockPath})}});i.actions.push(()=>y.release()),u.promoteRunnerLock=()=>y.promote(),n("runner.generation_incoming_lock_acquired",{path:y.path,machineId:o.machineId,runnerId:o.runnerId,handoffHolderPid:f,alreadyPromoted:y.promoted()});let x=S=>{try{return process.kill(S,0),!0}catch(v){return v.code==="EPERM"}},b=setInterval(()=>{if(u.currentRole()!=="incoming"){clearInterval(b);return}x(f)||(n("runner.generation_self_promote_on_peer_death",{handoffHolderPid:f}),u.handleIpcMessage({type:"generation_promote"}),clearInterval(b))},3e4);b.unref(),i.actions.push(()=>clearInterval(b))}else{let y=await _Ee(m,o,n);i.actions.push(()=>y.release()),n("runner.lock_acquired",{path:y.path,machineId:o.machineId,runnerId:o.runnerId})}}return await xRe(o,n,i,s,a,d,r,t,u)}catch(p){throw await s().catch(()=>{}),p}}async function _K(e){if(e.threadProcess?.role!=="thread")throw new Error("thread Codex worker requires thread process options");if(process.send===void 0)throw new Error("thread Codex worker requires an IPC channel");let n=lR(e),t=R2e(e);if(t!==void 0){n("runner.thread_worker_preflight_failed",{kandanThreadId:e.threadProcess.kandanThreadId,cwd:e.cwd,reason:t.reason,message:t.message}),process.stderr.write(`${t.message}
|
|
1520
1523
|
`),n.close(),process.exitCode=1;return}let r=await NK(e),o=await Kf(r.url),i=e.threadProcess.kandanThreadId,s=l0(()=>{o.close(),r.stop(),n.close()});hB(o),o.onClose?.(a=>{if(n("runner.thread_codex_worker_session_closed",{kandanThreadId:i,reason:a.message}),process.send!==void 0&&process.connected!==!1)try{process.send({type:"linzumi_thread_codex_worker_session_closed",kandanThreadId:i,reason:a.message})}catch{}s()}),process.send({type:"linzumi_thread_codex_worker_ready",kandanThreadId:i,commanderManagedPorts:D1e(r)}),await J2e(r.process),s()}function gRe(e,n,t){let r=`${n}
|
|
1521
|
-
${t}`.toLowerCase();return r.includes("not logged in")||r.includes("not authenticated")||r.includes("login required")||r.includes("please log in")?"not_logged_in":e===0?"logged_in":"probe_failed"}function VI(e,n){let t=e==="logged_in"&&n.status==="probe_failed"&&n.transient;return{status:t?e:n.status,downgradeSkipped:t}}function yRe(e,n){return e==="ENOENT"?n?{status:"binary_missing",transient:!1}:{status:"probe_failed",transient:!0}:{status:"probe_failed",transient:GP(e)}}function NJ(e,n){return new Promise(t=>{let r=[],o=[],i=!1,s,a=u=>{i||(i=!0,s!==void 0&&clearTimeout(s),t(u))},d=a0(e,["login","status"],{cwd:n,env:process.env,stdio:["ignore","pipe","pipe"]});s=setTimeout(()=>{d.kill("SIGTERM"),a({status:"probe_failed",transient:!0})},uRe),d.stdout?.on("data",u=>{r.push(u)}),d.stderr?.on("data",u=>{o.push(u)}),d.once("error",u=>{a(yRe(u.code,gl(n)))}),d.once("exit",u=>{a({status:gRe(u,Buffer.concat(r).toString("utf8"),Buffer.concat(o).toString("utf8")),transient:u===null})})})}async function xRe(e,n,t,r,o,i,s,a,d){let u=NEe(e),c={value:e.dependencyStatus},l={value:(await NJ(e.codexBin,e.cwd)).status},p={value:e.claudeCodeAuthStatus??(YJ(e).includes("claude-code")?"logged_in":"not_logged_in")};(p.value==="probe_failed"||p.value==="binary_missing")&&n("runner.claude_code_auth_startup_probe_failure",{runnerId:e.runnerId,claude_code_auth_status:p.value,probe_detail:e.claudeCodeAuthProbeDetail??null});let m=()=>YJ(e,p.value),f={value:Ax()};n("runner.codex_auth_status_probed",{runnerId:e.runnerId,codex_auth_status:l.value,has_valid_openai_auth:f.value.hasValidOpenAiAuth,openai_auth_mode:f.value.authMode});let y=async()=>{let g=c.value;if(g!==void 0)try{let _=await aa({cwd:e.cwd,codexBin:e.codexBin,codeServerBin:e.codeServerBin,editorRuntime:g.editorRuntime}),C=V3(g,_);c.value=C.status,C.codexDowngradeSkipped&&n("runner.dependency_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,codex_probe_failure:_.codex.failure??null,probe_detail:_.codex.failureDetail??null}),n("runner.dependency_status_reprobed",{runnerId:e.runnerId,codex_available:C.status.codex.available,codex_available_changed:g.codex.available!==C.status.codex.available,probe_detail:_.codex.failureDetail??null})}catch(_){n("runner.dependency_status_reprobe_failed",{runnerId:e.runnerId,message:_ instanceof Error?_.message:String(_)})}},x=async()=>{try{let g=await NJ(e.codexBin,e.cwd),_=l.value,C=VI(_,g);l.value=C.status;let T=f.value.hasValidOpenAiAuth;f.value=Ax(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobed",{runnerId:e.runnerId,codex_auth_status:C.status,codex_auth_status_changed:_!==C.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth,has_valid_openai_auth_changed:T!==f.value.hasValidOpenAiAuth})}catch(g){let _=l.value,C=VI(_,{status:"probe_failed",transient:!0});l.value=C.status,f.value=Ax(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:"probe_failed",message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth})}},b=async()=>{if(!(e.claudeCodeRunner!==void 0||e.agentReplay!==void 0))try{let g=await Oc({cwd:e.cwd,claudeBin:e.claudeCodeBin}),_=p.value,C=VI(_,g);p.value=C.status,C.downgradeSkipped&&n("runner.claude_code_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,probe_detail:g.detail??null}),n("runner.claude_code_auth_status_reprobed",{runnerId:e.runnerId,claude_code_auth_status:C.status,claude_code_auth_status_changed:_!==C.status,probe_detail:g.detail??null,claude_code_executable_fallback:g.fallbackExecutable??null})}catch(g){n("runner.claude_code_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g)})}},S=Y4({computeFingerprint:()=>X4(process.env,{cwd:e.cwd}),refresh:b,onReprobeStarted:()=>{n("runner.claude_code_auth_hint_changed",{runnerId:e.runnerId,claude_code_auth_status:p.value})}}),v=e.allowedForwardPorts??[],w=new Set(v),k=new Set,R=aR(e.kandanUrl),P=()=>TEe(R,k),O=uK(e)?await x2e(n):void 0;O!==void 0&&t.actions.push(()=>O.close());let E=new Map,j=(g,_)=>{E.set(g,{kandanThreadId:_.kandanThreadId??null,codexThreadId:_.codexThreadId??null,channelSlug:_.channelSlug??null,processName:_.processName??null,processIconKey:_.processIconKey??null,localEditor:_.localEditor===!0,agentProvider:_.agentProvider??null,linzumiCliManaged:_.linzumiCliManaged===!0})},z=g=>{E.delete(g)},M=(g,_={})=>{w.add(g),k.add(g),j(g,{processName:_.processName??null,processIconKey:_.processIconKey??null,agentProvider:_.agentProvider??null,linzumiCliManaged:!0})},J=g=>{k.delete(g),z(g),v.includes(g)||w.delete(g)},K=()=>Array.from(w).sort((g,_)=>g-_).map(g=>{let _=E.get(g);return{port:g,kandanThreadId:_?.kandanThreadId??null,codexThreadId:_?.codexThreadId??null,channelSlug:_?.channelSlug??null,processName:_?.processName??null,processIconKey:_?.processIconKey??null,localEditor:_?.localEditor===!0,agentProvider:_?.agentProvider??null,linzumiCliManaged:_?.linzumiCliManaged===!0||k.has(g)}}),G=g=>{let{advertisable:_,rejected:C}=hC(g);for(let T of C)n("runner.non_advertisable_cwd_root_dropped",{root:T.root,reason:T.reason}),bd({severity:"warning",key:`runner.non_advertisable_cwd_root:${T.root}`,message:`not advertising ${JSON.stringify(T.root)} as an allowed working-directory root (${T.reason==="home_root"?"it is your home directory":"it is a filesystem root"}). A catch-all root would let the server route any coding job to this machine. Register explicit project folders instead (connect from a project directory or pass --allowed-cwd).`});return _},W=G(Vt(e.allowedCwds)),te={value:[...W]},me=e.remoteCodexSandboxRunner??EB({env:process.env,platform:process.platform}),ge=new Map,ce={value:Vt(e.missingAllowedCwds??[])},Ie={value:!1},Re={value:null},I=(g,_)=>{let C=Re.value;if(g.configVersion!==null&&C!==null&&g.configVersion<C){n("runner.config_sync_stale_skipped",{source:_.source,configVersion:g.configVersion,appliedConfigVersion:C});return}let T=g8(g.allowedCwds,e.kandanUrl),$=xR(T,{createMissing:!0});Ie.value=Ie.value||y1e($.allowedCwds,[e.cwd,...W]),te.value=G(Vt([..._.includeStartupAllowedCwds?W:[],...$.allowedCwds])),ce.value=$.missingAllowedCwds,g.configVersion!==null&&(Re.value=g.configVersion),n("runner.config_updated",{source:_.source,configVersion:g.configVersion,allowedCwdCount:te.value.length,missingAllowedCwdCount:ce.value.length})},L=(g,_={})=>{let C=L1e(te.value,ce.value);if(!C.changed)return!1;if(te.value=C.advertised,ce.value=C.missing,C.dropped.length>0){n("runner.stale_allowed_cwd_roots_deadvertised",{trigger:g,pruned_roots:C.dropped,advertised_root_count:C.advertised.length,..._});for(let T of C.dropped)bd({severity:"warning",key:`runner.allowed_cwd_root_missing:${T}`,message:`allowed working-directory root ${JSON.stringify(T)} no longer exists (deleted, or its disk/volume is unmounted). Not offering it for coding jobs until it is back; remount the volume or restore the folder to resume.`})}if(C.restored.length>0){n("runner.allowed_cwd_roots_readvertised",{trigger:g,restored_roots:C.restored,advertised_root_count:C.advertised.length,..._});for(let T of C.restored)bd({severity:"info",key:`runner.allowed_cwd_root_restored:${T}`,message:`allowed working-directory root ${JSON.stringify(T)} is back; offering it for coding jobs again.`})}return!0},U={value:{status:"disabled"}},ie={value:0},se={watcher:void 0,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};t.actions.push(()=>{for(let g of ge.values())g.abort(new Error("local runner stopped"));ge.clear(),U.value.status==="running"&&(U.value.process.kill("SIGINT"),U.value.collaboration?.process.kill("SIGINT")),se.watcher?.close()});let Q=()=>Array.from(se.pendingRequests.values()).sort((g,_)=>g.port-_.port).map(g=>{let _=Ii(g.command),C=_?.appName??gf(mr(g));return{requestId:g.requestId,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},summary:`Make ${C} on port ${g.port} accessible on Linzumi?`,reason:Ly(mr(g)),..._?.appName===void 0?{}:{processName:_.appName},..._?.iconKey===void 0?{}:{processIconKey:_.iconKey}}}),_e,Te,ae=()=>(Te===void 0&&(Te=(e.localVmReadinessProbe??(()=>K9({workspaceLocalVmExecutionFlag:e.vmExecution===!0})))().then(_=>(_e=_,_)).catch(_=>{n("vm.local_vm_readiness_probe_failed",{error:_ instanceof Error?_.message:String(_)})})),Te),Ee=()=>(ae(),_e),dt=()=>({...d===void 0?{}:{generationOverlap:!0},codexAppServer:u,codexRemoteTui:u,client_message_ids:!0,commander_pipeline:"pipeline",agentProviders:m(),modelProviders:[...lx],codexAuthStatus:l.value,claudeCodeAuthStatus:p.value,hasValidOpenaiAuth:f.value.hasValidOpenAiAuth,openaiAuthMode:f.value.authMode,waferAvailable:!0,defaultAgentProvider:"codex",startInstance:te.value.length>0,durableClaudeSessionStore:!0,agentSlashCommandCatalog:!0,cloneRepository:!0,managedDevServices:!0,claudeCodeCheckpointRewind:!1,steerTurn:!0,appliedConfigVersion:Re.value,allowedCwds:te.value,missingAllowedCwds:ce.value,allowedCwdSuggestions:j1e(e.cwd,te.value),allowedCwdProjects:F1e(te.value),onboardingSelectedFolderScan:!0,portForwarding:w.size>0,tcpForwarding:!0,linzumiMcp:!0,localVmExecution:e.vmExecution===!0,...(()=>{let g=Ee();return g===void 0?{}:{localVmReadiness:g}})(),remoteCodexExecution:me!==void 0&&te.value.length>0,remoteCodexExecutionStatus:me===void 0?"sandbox_unavailable":te.value.length>0?"ready":"cwd_unavailable",allowedPorts:Array.from(w).sort((g,_)=>g-_),forwardedPortAttributions:K(),pendingEditorForwardPortRequests:Q(),toolStatus:c.value===void 0?null:ZP(c.value),editorRuntime:c.value?.editorRuntime===void 0?null:ZP(c.value).editorRuntime,...S3(e.editorRuntime,te.value,U.value)}),Ke=()=>(L("capabilities_payload"),dt()),Dt=HI(SRe(e.runnerId),n),X=d===void 0?Dt:S7(Dt,()=>d.outgoingDrainActive());t.actions.push(()=>X.flush());let pe=wN(e.runnerId),$e=vN(pe,g=>n("runner.cwd_stillbirth_state_write_failed",{message:g,statePath:pe}),g=>n("runner.cwd_stillbirth_state_read_failed",{message:g,statePath:pe}));if(e.threadProcess?.role!=="thread"){let g=IN($e);g.length>0&&n("runner.cwd_stillbirth_counters_reset_on_restart",{cwds:g})}let _n=HI(kRe(e.runnerId),n,{discardSeqsOnFirstEpochAdoption:!0});t.actions.push(()=>_n.flush());let Ge=Sq(vq(e.runnerId),n);if(e.threadProcess?.role!=="thread"){let g=ud(e.runnerId);zF(g,n),jF({scopeDir:g,ownerPid:process.pid,log:n}).catch(C=>{n("dev_services.reconcile_failed",{message:C instanceof Error?C.message:String(C)})});let _=FF({scopeDir:g,ownerPid:process.pid,log:n});t.actions.push(()=>_.stop())}let Je=HI(PRe(e.runnerId),n,{fsyncOnWrite:!0});t.actions.push(()=>Je.flush());let In={initial:g=>Je.initial(g),onAdvance:(g,_)=>Je.onAdvance(g,_),flush:()=>Je.flush()},wt=qB(),$r=g=>{if(g.sourceSeq===void 0)return;let _=Ss(On(),g.channel,g.threadId);EJ({store:In,watermarkKey:_,sourceSeq:g.sourceSeq,log:n})&&n("runner.live_worker_source_seq_committed",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:g.sourceSeq}),Zt.delete(to(g.channel,g.threadId,g.sourceSeq))},qa=g=>{wt.clearSeq(Ss(On(),g.channel,g.threadId),g.sourceSeq)},xi=g=>{if(g.sourceSeq===void 0)return!1;let _=Ss(On(),g.channel,g.threadId),C=In.initial(_);return NB(C,wt,_,g.sourceSeq)},N=HB(),ne=TJ(),oe=new Map,le=new Map,ve=!0,De=!1,dn=!1,zn=()=>ve&&!De,On=()=>Ur(e)??"default",Vo=()=>e.channelSession?.channelSlug??Ge.list()[0]?.channel,yt=(g,_)=>{let C=On(),T=`${C}:${g}:${_}`,$=oe.get(T);if($!==void 0)return $;let B=RI(DI(C,g,_),n);return oe.set(T,B),B},Zt=new Map,to=(g,_,C)=>`${On()}:${g}:${_}:${C}`,Na=(g,_,C)=>{Zt.set(to(g,_,C.seq),C)},Wo=g=>{let _=yt(g.channel,g.threadId);for(let C of g.sourceSeqs){let T=to(g.channel,g.threadId,C),$=Zt.get(T);if($===void 0){n("runner.live_follow_up_recapture_missing",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C});continue}let B=_.enqueue(C,"replay",Qu($),Date.now());n("runner.live_follow_up_re_enqueued_on_close",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C,enqueued:B.accepted}),Zt.delete(T)}};o.stopAccepting=()=>{ve=!1},o.flushInboundQueues=()=>{for(let g of oe.values())g.compact()};let zu=NRe(X,_n,n,e),Ua=pB({initialToken:e.token,tokenExpiresAt:e.tokenExpiresAt,deps:{renew:async g=>{let _=await a8({kandanUrl:e.kandanUrl,accessToken:g});return _.kind==="renewed"?{kind:"renewed",accessToken:_.token.accessToken,expiresInSeconds:_.token.expiresInSeconds}:{kind:_.kind}},persist:e.tokenExpiresAt===void 0?void 0:({accessToken:g,expiresInSeconds:_})=>{uo({kandanUrl:e.kandanUrl,accessToken:g,expiresInSeconds:_,authFilePath:e.authFilePath})},log:n}}),Se=await Yg(e.kandanUrl,()=>Ua.currentToken(),e.socketFactory,{controlCursorStore:X,controlEpochStore:zu,onOperatorNotice:g=>bd({severity:"warning",audience:"operator",message:g})});Ua.start(),t.actions.push(()=>Ua.stop()),t.actions.push(()=>Se.close());let wp=zRe(n,Date.now,kK,{onReconnectNeeded:({staleForMs:g,attempt:_})=>{let C=Se.forceReconnect?.("connection_stale_forced_reconnect");return n("kandan.connection_force_reconnect_dispatched",{staleForMs:g,attempt:_,initiated:C??!1}),C??!1},onHardResetNeeded:()=>Se.hardReset?.("connection_stale_hard_reset")??!1,onUnrecoverable:({staleForMs:g})=>{console.error(`Connection to Linzumi was lost and did not recover for ${Math.round(g/6e4)} minutes; exiting so a fresh runner can reconnect. Run \`linzumi connect\` to reconnect.`),process.exit(75)}}),Oe=`local_runner:${e.runnerId}`,ig=e.clientId??e.machineId??e.runnerId,ro=tRe(),qu=e7({log:n}),nv=()=>{qu.drain(g=>Se.pushIfConnected(Oe,"diagnostics:upload",g))},_i=KN({upload:g=>Se.pushIfConnected(Oe,"diagnostics:upload",g),runnerLogFile:e.logFile??kg(),log:n,spool:qu});_i.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),nv(),Se.onDisconnect?.(g=>{_i.recordLifecycle({event:"disconnect",atIso:new Date().toISOString(),closeCode:g.closeCode,closeReason:g.closeReason,previousSessionDurationMs:g.previousSessionDurationMs,reconnectCount:g.reconnectCount}),_i.flushNow()}),Se.onReconnect(()=>{_i.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),_i.flushNow(),nv()}),t.actions.push(async()=>{_i.stop(),_i.flushNow()});let Nu=()=>({clientName:"kandan-local-codex-runner",clientId:ig,machineFingerprint:e.machineFingerprint??null,...f$(e.machineFingerprintV2),runnerPid:process.pid,version:jt,hostname:ro,cwd:e.cwd,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,capabilities:Ke(),...d===void 0?{}:{generation:{epoch:d.epoch,overlap:!0}},commander_impl:"ts"}),Ba=[],vp=0,Ja=0,sg={value:void 0};Se.onControl((g,_)=>{wp.recordServerAck();let C=sg.value;if(C===void 0){Ba.push({control:g,ack:_});return}C(g,_)});let q=await Se.join(Oe,Nu(),{rejoinPayload:Nu});if(d!==void 0){let g=d.sendToSupervisor({type:"generation_ready",epoch:d.epoch});n("runner.generation_ready_sent",{epoch:d.epoch,delivered:g})}let je=VJ(A(q)?.runner_config);switch(je.type){case"missing":break;case"invalid":throw n("runner.config_join_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:je.reason}),new Error(`invalid runner_config in Kandan join response: ${je.reason}`);case"ok":I(je.config,{includeStartupAllowedCwds:!1,source:"join"});break}vRe(n),UJ(A(q)?.runner_config,n);let re=A(A(q)?.compute_node);re!==void 0&&n("runner.compute_node",{id:h(re.id),name:h(re.name),identityQuality:h(re.identity_quality),resetGeneration:Y(re.reset_generation)});let Ce=(g,_)=>{let C=pEe(g);C!==void 0&&n("kandan.roster_seeded",{source:_,thread_count:C.threads.length,truncated:C.truncated,skipped_entries:C.skippedEntries,threads:C.threads.map(T=>({kandan_thread_id:T.kandanThreadId,provider_session_key:T.providerSessionKey,channel_id:T.channelId,title:T.title,channel_slug:T.channelSlug,cwd:T.cwd,last_activity_at_ms:T.lastActivityAtMs}))})};Ce(q,"join");let hn=(g,_)=>{let C=A(g)?.fleet_breaker;if(C===void 0)return;let T=XS(C);if(T===void 0){n("runner.fleet_breaker_seed_invalid",{source:_});return}n("runner.fleet_breaker_state",{source:_,outcome:YS(T),state:T.state,fate:T.fate,version:T.version})};hn(q,"join"),Se.onReconnect(g=>{Ce(g.get(Oe),"rejoin"),hn(g.get(Oe),"rejoin");let _=VJ(g.get(Oe)?.runner_config);switch(UJ(g.get(Oe)?.runner_config,n),_.type){case"missing":return;case"invalid":n("runner.config_rejoin_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:_.reason});return;case"ok":I(_.config,{includeStartupAllowedCwds:!1,source:"rejoin"});return}});let oo=lEe(A(q)?.replaced_runners),Or=s===void 0&&e.codexUrl===void 0&&u?await NK(e):void 0;Or!==void 0&&t.actions.push(()=>{Or.stop()});let io=e.codexUrl??Or?.url;if(Or!==void 0){let g=aR(Or.url);g!==void 0&&M(g,{processName:"Codex app-server",processIconKey:"codex",agentProvider:"codex"})}let Ve=`codex-${BI()}`,Ho=g=>{Se.push(Oe,"local_editor_status",g).catch(_=>{n("kandan.local_editor_status_push_failed",{message:_ instanceof Error?_.message:String(_)})})},Go=(g,_)=>{Se.push(Oe,g,_).catch(C=>{n(`kandan.${g}_push_failed`,{message:C instanceof Error?C.message:String(C)})})},Jte=uK(e)?v2e({log:n,instanceId:Ve,markCommanderManagedForwardPort:M,clearCommanderManagedForwardPort:J,managedForwardPorts:k,capabilitiesPayload:Ke,pushForwardPortEvent:Go}):void 0;t.actions.push(()=>Jte?.close());let tv=(g,_)=>{let C=se.approvedTargets.get(g);se.approvedPorts.delete(g),se.approvedTargets.delete(g),w.delete(g),z(g),Go("forward_port_revoked",{instanceId:Ve,port:g,...C===void 0?{}:{pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd}},reason:_,capabilities:Hs(Ke(),g)})},O6=g=>{se.watcher?.close(),se.watcher=void 0,se.pendingRequests.clear(),se.queuedCandidates.clear();let _=Array.from(se.approvedPorts);for(let C of _)tv(C,g);return se.dismissedTargets.clear(),_},ag=()=>{if(se.pendingRequests.size>0||se.queuedCandidates.size===0)return;let g=Array.from(se.queuedCandidates.values()).sort((_,C)=>_.port-C.port)[0];g!==void 0&&(se.queuedCandidates.delete(g.port),L6(g),se.pendingRequests.size===0&&ag())},rv=g=>{let _=xc({requestId:`editor-port-forward-auto-${BI()}`,sourceSeq:0,candidate:g});se.approvedPorts.add(_.port),se.approvedTargets.set(_.port,mr(_)),w.add(_.port);let C=Ii(_.command);j(_.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:_.portKind==="commander_bound"}),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"approve",capabilities:Ke()})},L6=g=>{let _=hf({candidate:g,threadBound:!0,suppressedPorts:new Set(P()),approvedPorts:se.approvedPorts,approvedTargets:se.approvedTargets,dismissedTargets:se.dismissedTargets,pendingRequests:Array.from(se.pendingRequests.values())});switch(_.type){case"skip":return;case"remember_approved_target":se.approvedTargets.set(_.target.port,_.target);return;case"revoke_and_prompt":tv(_.revoked.port,_.reason),rv(g);return;case"replace_pending":se.pendingRequests.delete(_.expired.port),Go("forward_port_resolved",{instanceId:Ve,requestId:_.expired.requestId,source:"local_editor",port:_.expired.port,pid:_.expired.pid,command:_.expired.command,..._.expired.cwd===void 0?{}:{cwd:_.expired.cwd},decision:"expired",reason:_.reason,capabilities:Ke()}),rv(_.candidate);return;case"prompt":rv(g);return}},Kte=g=>{let _=se.queuedCandidates.get(g.port);if(_!==void 0&&zr(_,g)){se.queuedCandidates.delete(g.port);return}let C=se.pendingRequests.get(g.port);if(C!==void 0&&zr(mr(C),g)){se.pendingRequests.delete(g.port),Go("forward_port_revoked",{instanceId:Ve,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},reason:"listener_exited",capabilities:Hs(Ke(),g.port)}),ag();return}se.approvedPorts.has(g.port)&&tv(g.port,"listener_exited")},Vte=g=>{let _=Array.from(se.pendingRequests.values()).find(T=>T.requestId===g.requestId);if(_===void 0)return;if(se.pendingRequests.delete(_.port),g.decision==="deny")return se.dismissedTargets.set(_.port,mr(_)),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"deny",capabilities:Ke()}),ag(),{instanceId:Ve,ok:!0};se.approvedPorts.add(_.port),se.approvedTargets.set(_.port,mr(_)),w.add(_.port);let C=Ii(_.command);return j(_.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:_.portKind==="commander_bound"}),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"approve",capabilities:Ke()}),ag(),{instanceId:Ve,ok:!0,port:_.port}},Wte=g=>{if(g.process.pid===void 0){n("port_forward.local_editor_watch_skipped",{reason:"editor_pid_missing"});return}se.watcher?.close(),se.watcher=yc({rootPid:g.process.pid,onCandidate:L6,onCandidateLost:Kte,onError:_=>{n("port_forward.local_editor_watch_failed",{message:_.message})}})},ov=g=>{if(g.pendingRequests.size>0||g.queuedCandidates.size===0)return;let _=Array.from(g.queuedCandidates.values()).sort((C,T)=>C.port-T.port)[0];_!==void 0&&(g.queuedCandidates.delete(_.port),j6(g,_).catch(C=>{n("port_forward.claude_code_prompt_failed",{message:C instanceof Error?C.message:String(C)})}))},dg=async(g,_,C,T="wait_for_connection")=>{let $=g.approvedTargets.get(_);g.approvedPorts.delete(_),g.approvedTargets.delete(_),w.delete(_),z(_),await(T==="connected_only"?Se.pushIfConnected:Se.push)(Oe,"forward_port_revoked",{instanceId:Ve,port:_,...$===void 0?{}:{pid:$.pid,command:$.command,...$.cwd===void 0?{}:{cwd:$.cwd}},reason:C,agentProvider:"claude-code",capabilities:Hs(Ke(),_)})},iv=async(g,_)=>{let C=g.currentSourceSeq()??g.rootSeq;if(C===void 0){n("port_forward.claude_code_auto_approval_skipped",{reason:"source_seq_missing",port:_.port,pid:_.pid});return}let T=xc({requestId:`claude-port-forward-auto-${BI()}`,sourceSeq:C,candidate:_});g.approvedPorts.add(T.port),g.approvedTargets.set(T.port,mr(T)),w.add(T.port);let $=Ii(T.command);j(T.port,{kandanThreadId:g.threadId,codexThreadId:g.sessionId,channelSlug:g.channel,processName:$?.appName??null,processIconKey:$?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:T.portKind==="commander_bound"}),await Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:T.requestId,port:T.port,pid:T.pid,command:T.command,...T.cwd===void 0?{}:{cwd:T.cwd},sourceSeq:T.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:Ke()})},j6=async(g,_)=>{let C=hf({candidate:_,threadBound:!0,suppressedPorts:new Set(P()),approvedPorts:g.approvedPorts,approvedTargets:g.approvedTargets,dismissedTargets:g.dismissedTargets,pendingRequests:Array.from(g.pendingRequests.values())});switch(C.type){case"skip":return;case"remember_approved_target":g.approvedTargets.set(C.target.port,C.target);return;case"revoke_and_prompt":await dg(g,C.revoked.port,C.reason),await iv(g,_);return;case"replace_pending":g.pendingRequests.delete(C.expired.requestId),await Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.expired.requestId,port:C.expired.port,pid:C.expired.pid,command:C.expired.command,...C.expired.cwd===void 0?{}:{cwd:C.expired.cwd},sourceSeq:C.expired.sourceSeq,decision:"expired",reason:C.reason,agentProvider:"claude-code",capabilities:Ke()}),await ii(Se,Oe,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:C.expired.sourceSeq,status:"failed",reason:"port_forward_listener_changed",sessionId:g.sessionId}),await iv(g,C.candidate);return;case"prompt":await iv(g,_);return}},Hte=(g,_)=>{let C=g.queuedCandidates.get(_.port);if(C!==void 0&&zr(C,_)){g.queuedCandidates.delete(_.port),g.approvedPorts.has(_.port)&&dg(g,_.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})});return}let T=Array.from(g.pendingRequests.values()).find($=>zr(mr($),_));if(T!==void 0){g.pendingRequests.delete(T.requestId),Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:T.requestId,port:T.port,pid:T.pid,command:T.command,...T.cwd===void 0?{}:{cwd:T.cwd},sourceSeq:T.sourceSeq,decision:"expired",reason:"listener_exited",agentProvider:"claude-code",capabilities:Ke()}).then(()=>ii(Se,Oe,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:T.sourceSeq,status:"failed",reason:"port_forward_listener_exited",sessionId:g.sessionId})).then(()=>ov(g)).catch($=>{n("port_forward.claude_code_expire_failed",{message:$ instanceof Error?$.message:String($)})});return}g.approvedPorts.has(_.port)&&dg(g,_.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})})},Gte=g=>{for(let _ of Ku.values()){let C=_.pendingRequests.get(g.requestId);if(C===void 0)continue;if(_.pendingRequests.delete(g.requestId),g.decision==="deny")return _.dismissedTargets.set(C.port,mr(C)),Promise.all([Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"deny",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:_.workspace,channel:_.channel,threadId:_.threadId,sourceSeq:C.sourceSeq,status:"failed",reason:"port_forward_denied",sessionId:_.sessionId})]).then(()=>ov(_)).catch($=>{n("port_forward.claude_code_deny_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ve,ok:!0,agentProvider:"claude-code"};_.approvedPorts.add(C.port),_.approvedTargets.set(C.port,mr(C)),w.add(C.port);let T=Ii(C.command);return j(C.port,{kandanThreadId:_.threadId,codexThreadId:_.sessionId,channelSlug:_.channel,processName:T?.appName??null,processIconKey:T?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:C.portKind==="commander_bound"}),Promise.all([Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:_.workspace,channel:_.channel,threadId:_.threadId,sourceSeq:C.sourceSeq,status:"processed",reason:"Claude Code preview port approved",sessionId:_.sessionId})]).then(()=>ov(_)).catch($=>{n("port_forward.claude_code_approve_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ve,ok:!0,agentProvider:"claude-code",port:C.port}}},sv=g=>{if(Ku.has(g.sessionId))return;let _=e.portForwardWatcher??(B=>yc({rootPid:process.pid,commanderBoundPids:[process.pid],commanderBoundPorts:Array.from(k),watchPorts:v,extraWatchPorts:Ay(ud(e.runnerId)),...B})),C={value:void 0},T;try{T=_({onCandidate:B=>C.value===void 0?void 0:j6(C.value,B),onCandidateLost:B=>C.value===void 0?void 0:Hte(C.value,B),onListenersObserved:B=>_g(`claude-session:${g.sessionId}`,B.filter(be=>be.portKind!=="commander_bound")),onError:B=>{n("port_forward.claude_code_watch_failed",{message:B.message,claude_session_id:g.sessionId})}})}catch(B){n("port_forward.claude_code_watch_skipped",{reason:"watch_start_failed",message:B instanceof Error?B.message:String(B),claude_session_id:g.sessionId});return}n("port_forward.claude_code_watch_started",{claude_session_id:g.sessionId,root_pid:e.portForwardWatcher===void 0?process.pid:null,injected:e.portForwardWatcher!==void 0});let $={...g,watcher:T,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};C.value=$,Ku.set(g.sessionId,$)},ug=async(g,_="wait_for_connection")=>{let C=Ku.get(g);if(C===void 0)return;let T=Array.from(C.pendingRequests.values()),$=Array.from(C.approvedPorts);C.watcher.close(),C.pendingRequests.clear(),C.queuedCandidates.clear(),C.dismissedTargets.clear(),Ku.delete(g),await Promise.all([...T.map(async B=>{try{let be=_==="connected_only"?Se.pushIfConnected:Se.push;await Promise.all([be(Oe,"forward_port_resolved",{instanceId:Ve,requestId:B.requestId,port:B.port,pid:B.pid,command:B.command,...B.cwd===void 0?{}:{cwd:B.cwd},sourceSeq:B.sourceSeq,decision:"expired",reason:"session_ended",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:C.workspace,channel:C.channel,threadId:C.threadId,sourceSeq:B.sourceSeq,status:"failed",reason:"port_forward_session_ended",sessionId:C.sessionId,publishMode:_})])}catch(be){n("port_forward.claude_code_dispose_prompt_failed",{message:be instanceof Error?be.message:String(be)})}}),...$.map(async B=>{try{await dg(C,B,"session_ended",_)}catch(be){n("port_forward.claude_code_dispose_revoke_failed",{message:be instanceof Error?be.message:String(be)})}})])},Zte=(g,_,C)=>{let T=()=>{if(ie.value!==_||U.value.status!=="running"||U.value.process!==g.process)return;U.value={status:"disabled"};let B=O6("editor_exited");w.delete(g.port),k.delete(g.port),g.collaboration!==void 0&&(w.delete(g.collaboration.serverPort),k.delete(g.collaboration.serverPort)),Ho({instanceId:Ve,ok:!0,cwd:g.cwd,capabilities:{...Ke(),revokedPorts:g.collaboration===void 0?[g.port,...B]:[g.port,g.collaboration.serverPort,...B]}})},$=()=>{C.then(T).catch(B=>{n("kandan.local_editor_initial_status_failed",{message:B instanceof Error?B.message:String(B)})})};g.exited.then($)},Qt=s?.codex??(io===void 0?void 0:await Kf(io));if(Qt!==void 0&&t.actions.push(()=>Qt.close()),e.channelSession!==void 0&&Qt===void 0)throw new Error("channel session requires a Codex app-server connection");let F6=eEe({codexUrl:e.codexUrl,threadProcessRole:e.threadProcess?.role,ownsStartedAppServer:Or!==void 0}),av={value:0},z6={value:[]},Uu=Im(e),Qte={instanceId:Ve,clientId:ig,...io===void 0?{}:{codexUrl:io},tuiLaunched:e.launchTui,cwd:e.cwd,hostname:ro,codexThreads:z6.value,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,model:Uu.model??null,reasoningEffort:Uu.reasoningEffort??null,allowPortForwardingByDefault:Uu.allowPortForwardingByDefault??null,fast:e.fast??!1};await Se.push(Oe,"instance_started",Qte),n("runner.instance_started",{runnerId:e.runnerId,hostname:ro,workspace:Ur(e)??null,version:jt,instanceId:Ve,codexUrl:io??null,replacedRunners:oo});let q6=Ur(e),N6={...q6===void 0?{}:{workspace:q6},launch_source:e.launchSource??"cli"};ul({name:"commander.connected",attributes:N6},{apiUrl:e.kandanUrl}),t.actions.push(()=>ul({name:"commander.exited",attributes:N6},{apiUrl:e.kandanUrl}));let Xt=e.channelSession===void 0||Qt===void 0?void 0:await kf({kandan:Se,codex:Qt,topic:Oe,instanceId:Ve,leaseEpochFor:g=>ne.current(g),escalateEngineHalt:Or===void 0?void 0:()=>{Or.stop()},options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:e.cwd,codexBin:e.codexBin,fetch:e.fetch,fast:e.fast,launchTui:e.launchTui,pipelinePersistDir:ym(),enablePortForwardWatch:!0,initialForwardPorts:v,portForwardWatcher:dK({rootPid:Or?.process.pid,start:e.portForwardWatcher}),suppressedForwardPorts:P,onForwardPortApproved:(g,_)=>(w.add(g),j(g,{..._,agentProvider:"codex"}),Ke()),onForwardPortRevoked:g=>(w.delete(g),z(g),Ke()),onUnroutedThreadMessage:g=>G6(g),onLiveSourceSeqAccepted:$r,onLiveSourceSeqSettled:qa,channelSession:e.channelSession},log:n});Xt!==void 0&&(t.actions.push(()=>Xt.close()),Se.onReconnect(()=>Xt.handleKandanReconnect()));let Yt=new Map,Sp=new Map,Ka=new Map,Xte=(g,_)=>{let C=Ka.get(g);if(C!==void 0){Ka.delete(g);for(let T of C)T.resolve(_)}},cg=(g,_)=>{let C=Ka.get(g);if(C!==void 0){Ka.delete(g);for(let T of C)T.reject(_)}},as=Dq(),Yte=new Set(["kandan.reconnect_thread_resume_failed","kandan.reconnect_thread_rehydrate_forced","kandan.reconnect_thread_rehydration_ir_emitted","kandan.reconnect_thread_rehydration_failed","kandan.reconnect_thread_rehydrated","kandan.reconnect_thread_unarchive_started","kandan.reconnect_thread_unarchive_resumed","kandan.reconnect_thread_unarchive_failed"]),ere=(g,_)=>{if(!Yte.has(g))return;let C=_.codex_thread_id;typeof C=="string"&&C!==""&&as.note(C,g)},nre=g=>()=>Mq(cT(),g),dv=Object.assign((g,_)=>{ere(g,_),n(g,_)},{close:()=>n.close()}),uv=g=>Aq({method:"thread/attach",codexThreadId:g.codexThreadId,kandanThreadId:g.kandanThreadId,wait:g.wait,tracker:as,log:n,rolloutBytes:nre(g.codexThreadId),noProgressTimeoutMs:Wy()}),ds=new Map,Bu=new Map,U6=[],cv=g=>{let _=Bu.get(g);if(_!==void 0)return _;let C=sEe({sessions:()=>[...g===Qt&&Xt!==void 0?[Xt]:[],...Array.from(Yt.entries()).filter(([T])=>ds.get(T)===g).map(([,T])=>T)],log:n,onActiveThreadsFailed:F6?T=>{for(let $ of T)U6.push(Se.push(Oe,"session:app_server_lost",{codex_thread_id:$}).then(()=>{},B=>{n("kandan.session_app_server_lost_push_failed",{codex_thread_id:$,message:B instanceof Error?B.message:String(B)})}))}:void 0});return Bu.set(g,C),C},Lr=new Map,lv=new Map,B6={record:(g,_)=>{let C=lv.get(g),T={approvalPolicy:_.approvalPolicy??C?.approvalPolicy,sandbox:_.sandbox??C?.sandbox};T.approvalPolicy===void 0&&T.sandbox===void 0||lv.set(g,T)},resolve:g=>lv.get(g)},kp=new Map,Ju=new Map,Ku=new Map;Se.onReconnect(()=>SEe(Yt.values())),Se.onDisconnect?.(()=>{for(let g of Lr.values())g.pauseOutbox()}),Se.onReconnect(()=>{for(let[g,_]of Lr)n("claude_code.outbox_resumed_on_reconnect",{claude_session_id:g,linzumi_thread_id:_.threadId}),_.resumeOutbox()}),o.interruptInFlightTurns=async()=>{let g=[...Lr.entries()].flatMap(([C,T])=>{let $=T.currentSourceSeq();return $===void 0?[]:[{sessionId:C,session:T,sourceSeq:$}]});if(g.length===0)return;let _=new Promise(C=>{setTimeout(C,yEe).unref?.()});await Promise.race([Promise.all(g.map(async({sessionId:C,session:T,sourceSeq:$})=>{n("runner.drain_turn_interrupted_state",{claude_session_id:C,linzumi_thread_id:T.threadId,source_seq:$});try{await ii(Se,Oe,{workspace:T.workspace,channel:T.channel,threadId:T.threadId,sourceSeq:$,status:"interrupted",reason:gEe,sessionId:C})}catch(B){n("runner.drain_turn_interrupted_state_push_failed",{linzumi_thread_id:T.threadId,source_seq:$,message:B instanceof Error?B.message:String(B)})}})).then(()=>{}),_])};let J6=async()=>{let g=Cq(Ge.list(),Date.now());if(g.length!==0)try{await Se.push(Oe,"session:reannounce_threads",{threads:g.map(_=>({..._}))}),n("kandan.thread_sessions_reannounced",{count:g.length})}catch(_){n("kandan.thread_sessions_reannounce_failed",{count:g.length,message:_ instanceof Error?_.message:String(_)})}};Se.onReconnect(()=>J6()),J6(),t.actions.push(async()=>{await Promise.all(Array.from(Yt.values(),_=>_.close())),Yt.clear(),ds.clear(),Ka.clear();let g=[...Lr.values()];for(let _ of g)try{_.closeInput()}catch(C){n("claude_code.session_input_close_failed",{linzumi_thread_id:_.threadId,message:C instanceof Error?C.message:String(C)})}await Promise.race([Promise.allSettled(g.flatMap(_=>{let C=_.sessionWork();return C===void 0?[]:[C]})),new Promise(_=>{setTimeout(_,1e4).unref?.()})]);for(let _ of g)_.abortController.abort(new Error("local runner stopped"));Lr.clear();for(let _ of kp.values())_.resolve({type:"deny",message:"Claude Code approval cancelled because the runner stopped"});kp.clear();for(let _ of Ju.values())_.resolve({type:"deny",message:"Claude Code question cancelled because the runner stopped"});Ju.clear(),await Promise.all(Array.from(Ku.keys(),_=>ug(_,"connected_only")))});let xt=new Map;t.actions.push(async()=>{await Promise.all(Array.from(xt.values(),oR)),xt.clear()});let tre=()=>{for(let[g,_]of Array.from(xt.entries()))Q_(_)==="dead"&&xt.get(g)===_&&(xt.delete(g),n("runner.thread_process_stale_entry_reaped",{kandanThreadId:g,pid:_.kind==="running"?_.handle.processPid??null:null,prior_kind:_.kind}),oR(_).catch(()=>{}))};if(_m(e)){let g=e.threadRunnerReaperIntervalMs??dRe,_=setInterval(tre,g);_.unref?.(),t.actions.push(()=>clearInterval(_))}let pv=new Map,rre=B7(),fv=async(g,_)=>{let C=Yt.get(g),T=ds.get(g);if(C===void 0||_!==void 0&&T!==_||T?.isClosed?.()!==!0)return!1;Yt.delete(g),ds.delete(g),Sp.delete(g),n("runner.thread_session_evicted_dead_worker",{codex_thread_id:g,kandan_thread_id:C.currentKandanThreadId()??null});try{await C.close()}catch($){n("runner.thread_session_evict_close_failed",{codex_thread_id:g,message:$ instanceof Error?$.message:String($)})}return!0},mv=async(g,_={})=>{let C=Yt.get(g);if(C!==void 0)return C;let T=Sp.get(g);if(T!==void 0){let B=await T;if(B!==void 0)return B}let $=Yt.get(g);return $!==void 0||_.waitForSiblingSpawn!==!0?$:await new Promise((B,be)=>{let tn=Ka.get(g)??[];tn.push({resolve:B,reject:be}),Ka.set(g,tn)})},K6=async g=>{let{control:_,cwd:C,codexThreadId:T,sessionCodex:$}=g,B=g.portForwardWatcherRootPid,be=ln(_,"workspace"),tn=ln(_,"channel"),Ye=ln(_,"threadId");if(be===void 0||tn===void 0||Ye===void 0)return;let Cn=Yt.get(T);if(Cn!==void 0){let tt=Cn.currentKandanThreadId();if(tt!==void 0&&tt!==Ye)throw new md({codexThreadId:T,ownerKandanThreadId:tt,requestingKandanThreadId:Ye});if(!await fv(T))return Cn}let cr=Ge.list().find(tt=>tt.codexThreadId===T&&tt.kandanThreadId!==Ye);if(cr!==void 0)throw new md({codexThreadId:T,ownerKandanThreadId:cr.kandanThreadId,requestingKandanThreadId:Ye});let An=Sp.get(T);if(An!==void 0)return await An;let bi=(async()=>{as.note(T,"attach_started");let tt=e.channelSession?.listenUser??_o(e.token).actorUsername;if(tt===void 0)throw new Error("missing listen user for Commander-started Codex session");let qn=_l(e,_),er=_m(e)?async qe=>rre.run(qe.kandanThreadId,async()=>{await fv(qe.codexThreadId);let Ln=!1,rt=pv.get(qe.kandanThreadId)??(_.modelProvider!==void 0||_.llmProxy!==void 0||_.linzumiAgent!==void 0?{..._.modelProvider===void 0?{}:{modelProvider:_.modelProvider},..._.llmProxy===void 0?{}:{llmProxy:_.llmProxy},..._.linzumiAgent===void 0?{}:{linzumiAgent:_.linzumiAgent}}:void 0),Zo=Y(_.rootSeq);for(let _t of qe.pendingMessages){let Vu={type:"reconnect_thread",workspace:be,channel:tn,threadId:qe.kandanThreadId,codexThreadId:qe.codexThreadId,cwd:C,..._.linzumiContext===void 0?{}:{linzumiContext:_.linzumiContext},..._.type==="reconnect_thread"&&_.sessionRehydrate===!0?{sessionRehydrate:!0}:{},...Zo===void 0?{}:{rootSeq:Zo},...rt?.modelProvider===void 0?{}:{modelProvider:rt.modelProvider},...rt?.llmProxy===void 0?{}:{llmProxy:rt.llmProxy},...rt?.linzumiAgent===void 0?{}:{linzumiAgent:rt.linzumiAgent},sourceSeq:_t.seq,workDescription:_t.body,...qn.model===void 0?{}:{model:qn.model},...qn.reasoningEffort===void 0?{}:{reasoningEffort:qn.reasoningEffort},...qn.sandbox===void 0?{}:{sandbox:qn.sandbox},...qn.approvalPolicy===void 0?{}:{approvalPolicy:qn.approvalPolicy},...qn.fast===void 0?{}:{fast:qn.fast}},d$=async Ha=>{let u$=await uv({codexThreadId:qe.codexThreadId,kandanThreadId:qe.kandanThreadId,wait:mv(qe.codexThreadId,{waitForSiblingSpawn:Ha.waitForSiblingSpawn})});if(u$===void 0)throw new Error(`dead-worker rebuild could not resolve a live session for codex thread ${qe.codexThreadId}`);await u$.startThreadMessageTurn({seq:_t.seq,body:_t.body,actorSlug:_t.actorSlug,actorUserId:_t.actorUserId,boundStartTimeout:!0})};try{if(Ln)await d$({waitForSiblingSpawn:!1});else{let Ha=await gv(Vu,C);GI(Ha)&&(n("runner.thread_dead_worker_rebuild_replay_on_sibling",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:_t.seq}),await d$({waitForSiblingSpawn:!0}))}Ln=!0}catch(Ha){return n("runner.thread_dead_worker_rebuild_failed",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:_t.seq,message:Ha instanceof Error?Ha.message:String(Ha)}),!1}}return Ln}):void 0,Nn=tf()&&m().includes("claude-code")?{targetHarness:"claude_code",execute:async qe=>{let Ln;try{Ln=await import(new URL("./crossHarnessFailover.mjs",import.meta.url).href)}catch(_t){return{ok:!1,failure:`failover transpiler bridge unavailable: ${_t instanceof Error?_t.message:String(_t)}`}}let rt=await Ln.transpileAndSeedClaudeSession({activity:qe.activity,codexThreadId:qe.codexThreadId??"unknown-codex-session",kandanThreadId:qe.kandanThreadId,cwd:C});if(!rt.ok)return{ok:!1,failure:rt.failure};n("runner.cross_harness_failover_seeded",{kandan_thread_id:qe.kandanThreadId,source_session_id:qe.codexThreadId??null,target_session_id:rt.targetSessionId,session_file:rt.sessionFile,transpiled_item_count:rt.transpiledItemCount,redacted_reasoning_count:rt.redactedReasoningCount});let Zo={type:"reconnect_thread",agentProvider:"claude-code",workspace:be,channel:tn,threadId:qe.kandanThreadId,codexThreadId:rt.targetSessionId,cwd:C,sourceSeq:qe.message.seq,workDescription:qe.message.body,...qe.model===void 0?{}:{model:qe.model}};try{let _t=await QI(void 0,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,Zo,dv,a,void 0,void 0,void 0,Vu=>ne.current(Vu),$r,Na,Wo,void 0,e$,B6);if(_t.ok===!1)return{ok:!1,failure:`claude dispatch refused: ${JSON.stringify(_t).slice(0,300)}`}}catch(_t){return{ok:!1,failure:`claude dispatch failed: ${_t instanceof Error?_t.message:String(_t)}`}}return{ok:!0,transpiledItemCount:rt.transpiledItemCount,redactedReasoningCount:rt.redactedReasoningCount,targetSessionId:rt.targetSessionId}}}:void 0,lr=_.linzumiAgent?.mcpToken??e.linzumiAgentMcpToken,wi=r0(_),pr=wi.type==="provider"?wi.runtime:void 0,us=BEe({env:process.env,kandanUrl:e.kandanUrl,workspaceSlug:be,linzumiAgentMcpToken:lr,ownerUsername:c0(e),modelProviderRuntime:pr}),Wa=await kf({kandan:Se,codex:$,topic:Oe,instanceId:Ve,leaseEpochFor:qe=>ne.current(qe),options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:C,codexBin:e.codexBin,mcpAvailable:!la(e)||hR(e),devServicesAvailable:!la(e),fetch:e.fetch,fast:_.fast??e.fast,launchTui:!1,rebuildOnDeadCodexWorker:er,crossHarnessFailover:Nn,onUnroutedThreadMessage:qe=>G6(qe),onCodexThreadRebound:({kandanThreadId:qe,oldCodexThreadId:Ln,newCodexThreadId:rt})=>{if(Ln!==void 0&&Ln!==rt){let _t=Yt.get(Ln),Vu=ds.get(Ln);_t!==void 0&&(Yt.delete(Ln),Yt.set(rt,_t)),Vu!==void 0&&(ds.delete(Ln),ds.set(rt,Vu)),as.clear(Ln)}let Zo=Ge.rebindCodexThread(qe,rt);n("runner.codex_thread_rebind_propagated",{kandan_thread_id:qe,old_codex_thread_id:Ln??null,new_codex_thread_id:rt,registry_outcome:Zo.outcome})},onLiveSourceSeqAccepted:$r,onLiveSourceSeqSettled:qa,...us===void 0?{}:{cloudAgentTurn:us},pipelinePersistDir:ym(),enablePortForwardWatch:!0,initialForwardPorts:v,portForwardWatcher:dK({rootPid:B,start:e.portForwardWatcher,commanderBoundPids:g.commanderBoundPids,commanderBoundPorts:g.commanderBoundPorts}),suppressedForwardPorts:P,onForwardPortApproved:(qe,Ln)=>(w.add(qe),j(qe,{...Ln,agentProvider:"codex"}),Ke()),onForwardPortRevoked:qe=>(w.delete(qe),z(qe),Ke()),channelSession:{workspaceSlug:be,channelSlug:tn,kandanThreadId:Ye,rootSeq:Y(_.rootSeq),codexThreadId:T,linzumiContext:_.linzumiContext,listenUser:tt,linzumiAgentSession:_.linzumiAgent!==void 0||e.threadProcess?.role==="thread"&&e.linzumiAgentMcpToken!==void 0,modelProvider:qn.modelProvider,model:qn.model,reasoningEffort:qn.reasoningEffort,sandbox:qn.sandbox,approvalPolicy:qn.approvalPolicy,sandboxedApprovalNeverDefault:qn.sandboxedApprovalNeverDefault,allowPortForwardingByDefault:qn.allowPortForwardingByDefault}},log:n});return Yt.set(T,Wa),ds.set(T,$),as.note(T,"attached"),Xte(T,Wa),Ge.upsert({workspace:be,channel:tn,kandanThreadId:Ye,codexThreadId:T,cwd:C,agentProvider:"codex",control:AK({workspaceSlug:be,channelSlug:tn,kandanThreadId:Ye,codexThreadId:T,cwd:C,rootSeq:Y(_.rootSeq),runtimeSettings:qn}),updatedAtMs:Date.now()}),$!==Qt&&$.onNotification(qe=>{av.value+=1;let Ln=qe.params??{};n("codex.notification",LP(qe.method,Ln)),cv($).observeNotification(qe.method,Ln),Y_(Wa,qe.method,Ln,n)}),Wa})();Sp.set(T,bi);try{let tt=await bi;return tt===void 0&&cg(T,new Error(`attach for codex thread ${T} resolved without a live session`)),tt}catch(tt){let qn=tt instanceof Error?tt.message:String(tt);throw as.fail(T,qn),cg(T,tt instanceof Error?tt:new Error(qn)),tt}finally{Sp.delete(T)}},hv=async(g,_,C)=>{if(Qt===void 0)throw new Error("cannot attach a thread session without a codex app-server connection");return await K6({control:g,cwd:_,codexThreadId:C,sessionCodex:Qt,portForwardWatcherRootPid:Or?.process.pid})},V6=g=>{let _=yt(g.channel,g.kandanThreadId),C=Ss(On(),g.channel,g.kandanThreadId),T=In.initial(C),$=le.get(g.kandanThreadId)??[],B=hm(T,$)??T,be="";try{be=pa(ac(ym(),Cf({workspaceSlug:g.workspace,channelSlug:g.channel},g.kandanThreadId,Ve)),"utf8")}catch{}return{pendingInboundSeqs:_.entries().map(tn=>tn.sourceSeq),ackedInboundSeqs:_.ackedEntries().map(tn=>tn.sourceSeq),inboundHighWaterSeq:_.highWaterSourceSeq(),appliedFloorSeq:B,outboxTurnSignals:KB(be)}},ore=g=>{try{return $I(V6(g),{nowMs:Date.now()}).unfinished}catch(_){return n("runner.resume_scan_inspect_failed",{thread_id:g.kandanThreadId,phase:"rehydration_retire_guard",message:_ instanceof Error?_.message:String(_)}),!0}},W6=(async()=>{let g=Ge.list();if(g.length===0)return;let _=await kq({records:g,nowMs:Date.now(),maxAgeMs:Qk,pendingDurableRowCount:C=>ny(ac(ym(),Cf({workspaceSlug:C.workspace,channelSlug:C.channel},C.kandanThreadId,Ve)),n).pendingEntries.length,hasUnfinishedWork:ore,attach:async C=>{if(t.closePromise!==void 0)return n("session_registry.rehydrate_aborted_shutdown",{thread_id:C.kandanThreadId}),"failed";let T=qr(C.cwd,te.value);return T.ok?await hv(pl(C),T.cwd,C.codexThreadId)!==void 0?"attached":"failed":(n("session_registry.rehydrate_cwd_rejected",{thread_id:C.kandanThreadId,cwd:C.cwd,reason:T.reason}),"retire")},retire:C=>Ge.remove(C.kandanThreadId),log:n});n("session_registry.rehydrate_complete",{records:g.length,rehydrated:_.rehydrated,retired_drained:_.retiredDrained,retired_stale:_.retiredStale,retired_unattachable:_.retiredUnattachable,kept_unfinished:_.keptUnfinished,failed:_.failed})})().catch(g=>{n("session_registry.rehydrate_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>W6);let gv=async(g,_)=>{if(e.threadProcess?.role==="thread")return;let C=wm(g);if(C.type!=="ok"||C.provider!=="codex")return;let T=ln(g,"workspace"),$=ln(g,"channel"),B=ln(g,"threadId");if(T===void 0||$===void 0||B===void 0)return;let be=r0(g);(g.modelProvider!==void 0||g.llmProxy!==void 0||g.linzumiAgent!==void 0)&&pv.set(B,{...g.modelProvider===void 0?{}:{modelProvider:g.modelProvider},...g.llmProxy===void 0?{}:{llmProxy:g.llmProxy},...g.linzumiAgent===void 0?{}:{linzumiAgent:g.linzumiAgent}});let tn=PK(be);if(tn!==void 0)return{instanceId:Ve,controlType:g.type,ok:!1,error:tn,kandanThreadId:B,cwd:_};let Ye=xt.get(B);if(Ye!==void 0){if(Q_(Ye)!=="dead")return{instanceId:Ve,controlType:g.type,ok:!0,delegated:!0,threadProcess:"already_started",kandanThreadId:B,cwd:_};n("runner.thread_process_stale_entry_evicted",{kandanThreadId:B,codex_thread_id:g.type==="reconnect_thread"?h(g.codexThreadId)??null:null,prior_kind:Ye.kind,pid:Ye.kind==="running"?Ye.handle.processPid??null:null,control_type:g.type}),xt.get(B)===Ye&&xt.delete(B),oR(Ye).catch(()=>{})}let Cn=BK(e.allowedCwds);Cn.missing.length>0&&n("runner.stale_allowed_cwd_roots_pruned",{kandanThreadId:B,control_type:g.type,pruned_roots:Cn.missing,remaining_root_count:Cn.existing.length}),L("thread_process_spawn",{kandanThreadId:B})&&Us();let cr=CN($e,_);if(cr!==void 0)throw n("runner.cwd_stillbirth_circuit_open_start_refused",{kandanThreadId:B,cwd:_,control_type:g.type,consecutive_stillbirths:cr.count,last_stillbirth_at:cr.lastAt}),new Error(EN(_,cr));let An=e.spawnThreadRunner??F2e,bi=FK(e);n("runner.thread_process_starting",{kandanThreadId:B,cwd:_,readyTimeoutMs:bi});let tt=k2e({options:Cn.missing.length>0?{...e,allowedCwds:Cn.existing}:e,control:g,cwd:_,workspaceSlug:T,channelSlug:$,kandanThreadId:B});if(la(tt)){let Nn=await ae(),lr=CRe(e.runnerId),wi=await T1e({dependencyStatusRef:c,connectTimeStatus:e.dependencyStatus,machineVmUnready:Nn!==void 0&&!Nn.ready,cwd:_});wi.confirmation!=="not_needed"&&n("runner.vm_preflight_host_codex_reverified",{kandanThreadId:B,confirmed_available:wi.hostCodexAvailable,probe_failure:wi.probedCodex?.failure??null,probe_detail:wi.probedCodex?.failureDetail??null});let pr=k1e({vmRouted:!0,readiness:Nn,hostCodexAvailable:wi.hostCodexAvailable,hostCodexProbeDetail:wi.probedCodex?.failureDetail,explicitLocalVmOptIn:tt.executionMode==="local_vm",freshStart:g.type==="start_instance",lastNoticedReadinessFingerprint:TRe(lr,n)});if(pr.route==="vm"&&Nn?.ready===!0&&BJ(lr,void 0,n),pr.route==="host_fallback"){if(tt={...tt,executionMode:"raw"},n("runner.local_vm_unready_host_fallback",{kandanThreadId:B,control_type:g.type,blockers:[...pr.blockers],notice_posted:pr.postThreadNotice,readiness_fingerprint:pr.readinessFingerprint}),pr.postThreadNotice)try{await Se.push(Oe,"session:post_thread_message",{workspace:T,channel:$,thread_id:B,body:pr.notice,client_message_id:`local-vm-host-fallback-${B}`,payload:{metadata:{local_codex_runner:{event_type:"local_vm_host_fallback_notice"}}}}),BJ(lr,pr.readinessFingerprint,n)}catch(us){n("runner.local_vm_unready_notice_post_failed",{kandanThreadId:B,message:us instanceof Error?us.message:String(us)})}}else if(pr.route==="fail_loud")throw n("runner.local_vm_unready_start_refused",{kandanThreadId:B,control_type:g.type,blockers:[...pr.blockers]}),new Error(pr.reason)}let qn={kind:"starting",promise:K2e(An(tt),{kandanThreadId:B,timeoutMs:bi})};xt.set(B,qn);let er;try{er=await qn.promise}catch(Nn){if(xt.get(B)===qn&&xt.delete(B),n("runner.thread_process_start_failed",{kandanThreadId:B,cwd:_,message:Nn instanceof Error?Nn.message:String(Nn)}),L("thread_process_start_failed",{kandanThreadId:B})&&Us(),lK(Nn)){let lr=SN($e,_,Nn,Date.now());n("runner.cwd_stillbirth_recorded",{kandanThreadId:B,cwd:_,consecutive_stillbirths:lr.count,circuit_open:lr.tripped})}throw Nn}kN($e,_)&&n("runner.cwd_stillbirth_counter_cleared",{kandanThreadId:B,cwd:_});for(let Nn of er.commanderManagedPorts??[])M(Nn.port,{processName:Nn.processName,processIconKey:Nn.processIconKey,agentProvider:Nn.agentProvider});try{let Nn=er.codex,lr=l0(()=>Nn.close());er.onExit?.(lr),er.onExit?.(()=>{t.closePromise===void 0&&cv(Nn).failActiveTurns("codex thread worker exited")}),er.onExit?.(()=>{wt.clearThread(Ss(On(),$,B))});let pr={kind:"running",handle:{...er,close:async()=>{lr(),await er.close()}}};xt.get(B)===qn&&xt.set(B,pr),er.onExit?.(()=>{xt.get(B)===pr&&xt.delete(B)}),er.onExit?.(()=>{if(t.closePromise===void 0)for(let[qe,Ln]of Array.from(ds.entries()))Ln===Nn&&fv(qe,Nn)}),n("runner.thread_process_started",{kandanThreadId:B,cwd:_});let us=(qe,Ln,rt)=>K6({control:qe,cwd:Ln,codexThreadId:rt,sessionCodex:Nn,portForwardWatcherRootPid:er.processPid,commanderBoundPids:(er.commanderManagedPorts??[]).flatMap(Zo=>Zo.pid===void 0?[]:[Zo.pid]),commanderBoundPorts:(er.commanderManagedPorts??[]).map(Zo=>Zo.port)}),Wa=async qe=>{if(qe!==void 0&&qe.ok!==!1)return qe;let Ln=xt.get(B);return(Ln===qn||Ln?.kind==="running")&&xt.delete(B),await(Ln?.kind==="running"?Ln.handle.close():er.close()).catch(()=>{}),qe};switch(g.type){case"start_instance":{let qe=await RK({codex:Nn,kandan:Se,topic:Oe,control:g,options:e,instanceId:Ve,cwd:_,matchedRoot:_,onStartedThread:us,setStartupStage:()=>{},setStartedCodexThreadId:()=>{}});return await Wa(qe.controlResponse)}case"reconnect_thread":return await Wa(await QI(Nn,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,g,dv,a,us,void 0,void 0,qe=>ne.current(qe),$r,Na,Wo,xi))}}catch(Nn){let lr=xt.get(B);throw(lr===qn||lr?.kind==="running")&&xt.delete(B),await(lr?.kind==="running"?lr.handle.close():er.close()).catch(()=>{}),Nn}},Cp=new Map,yv=new Map,H6=async(g,_,C)=>{try{n("runner.spawn_on_miss_replay_on_sibling",{kandanThreadId:g.threadId??null,codex_thread_id:_.codexThreadId,seq:g.seq});let T=await uv({codexThreadId:_.codexThreadId,kandanThreadId:g.threadId,wait:mv(_.codexThreadId,{waitForSiblingSpawn:!0})});if(T===void 0)throw new Error(`spawn-on-miss could not resolve a live session for codex thread ${_.codexThreadId}`);let $=T.currentKandanThreadId();if(g.threadId!==void 0&&$!==void 0&&$!==g.threadId)throw new md({codexThreadId:_.codexThreadId,ownerKandanThreadId:$,requestingKandanThreadId:g.threadId});return await T.startThreadMessageTurn({seq:g.seq,body:g.body,actorSlug:g.actorSlug,actorUserId:g.actorUserId,attachments:g.attachments,boundStartTimeout:!0}),"dispatched"}catch(T){return n("runner.spawn_on_miss_failed",{kandanThreadId:g.threadId??null,codex_thread_id:_.codexThreadId,seq:g.seq,message:T instanceof Error?T.message:String(T)}),await Ns(C,"failed",`could not resume the thread's coding session: ${T instanceof Error?T.message:String(T)}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}},G6=async g=>{let _=g.threadId;if(!_m(e)||_===void 0)return"ignored";let C=`${_}:${g.seq}`,T=yv.get(C);if(T!==void 0){let B=await T;return B==="spawned"?"spawned_deduped":B}let $=ire(g,_);yv.set(C,$);try{return await $}finally{yv.delete(C)}},ire=async(g,_)=>{let C=xt.get(_);if((C===void 0?void 0:Q_(C))==="live")return"ignored";let $=Ge.list().find(Cn=>Cn.kandanThreadId===_);if($===void 0){let Cn=Vo();if(Cn===void 0||!zn())return"ignored";let An=yt(Cn,_).enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Qu(g),Date.now());return n("runner.spawn_on_miss_enqueued_without_local_record",{kandanThreadId:_,channel:Cn,seq:g.seq,enqueued:An.accepted}),await fre(Cn,g),"spawned"}let B=$.channel,be=Ss(On(),B,_),tn=yt(B,_);if(!zn()){let Cn=tn.enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Qu(g),Date.now());return n("runner.spawn_on_miss_drain_in_progress",{kandanThreadId:_,seq:g.seq,enqueued:Cn.accepted}),"spawned"}return await MJ({queue:tn,store:In,lock:N,leases:ne,threadId:_,watermarkKey:be,sourceSeq:g.seq,kind:g.localRunnerEventType===void 0?"live":"replay",payload:Qu(g),leaseEpoch:IJ(g),dispatch:async(Cn,cr)=>{let An=Zv(cr);return An===void 0?(n("runner.spawn_on_miss_bad_payload",{kandanThreadId:_,seq:Cn}),"permanent_failed"):await n$(An,$)},serverRows:le.get(_)??[],onDeadLetter:r$($),inFlightGuard:wt,log:n})==="ignored"?"ignored":"spawned"},lg=async(g,_=[])=>{if(!zn())return;let C=g.kandanThreadId,T=g.channel,$=Ss(On(),T,C),B=yt(T,C);await AJ({queue:B,store:In,lock:N,threadId:C,watermarkKey:$,serverRows:_,log:n,onlyDispatchUnattempted:_.length===0,onDeadLetter:r$(g),inFlightGuard:wt,onTornTailUnrecoverable:async be=>{let tn=pl(g);await Ns(tn,"failed","a message may have been lost during an unexpected shutdown (power loss). Please resend your last message to continue this job.",g.codexThreadId,{failureClass:"resume_torn_tail"}),n("runner.inbound_torn_tail_resend_published",{kandanThreadId:be})},dispatch:async(be,tn)=>{let Ye=Zv(tn);return Ye===void 0?(n("runner.inbound_drain_bad_payload",{kandanThreadId:C,seq:be}),"permanent_failed"):await n$(Ye,g)}})},sre=async(g,_)=>{if(_!==void 0&&_.ok===!1||!zn())return;let C=Ge.list().find($=>$.kandanThreadId===g);if(C===void 0)return;let T=yt(C.channel,g);T.entries().length!==0&&(n("runner.inbound_drain_after_spawn",{kandanThreadId:g,channel:C.channel,pending:T.entries().length}),await lg(C,le.get(g)??[]).catch($=>{n("runner.inbound_drain_after_spawn_failed",{kandanThreadId:g,message:$ instanceof Error?$.message:String($)})}))},are=async(g,_)=>{let C=await gv(g,_),T=ln(g,"threadId");return T!==void 0&&await sre(T,C),g.type==="reconnect_thread"&&GI(C)&&C!==void 0?await dre(g,C):C},dre=async(g,_)=>{let C=co(g.workDescription),T=Y(g.sourceSeq)??Y(g.rootSeq),$=ln(g,"threadId"),B=ln(g,"channel"),be=h(g.codexThreadId);if(C===void 0||T===void 0||$===void 0||be===void 0)return _;if(B===void 0)n("runner.reconnect_follow_up_missing_channel",{kandanThreadId:$,codex_thread_id:be,source_seq:T});else if(xi({channel:B,threadId:$,sourceSeq:T}))return n("runner.reconnect_follow_up_already_applied",{kandanThreadId:$,codex_thread_id:be,source_seq:T}),{..._,followUp:"duplicate",sourceSeq:T};try{let tn=await uv({codexThreadId:be,kandanThreadId:$,wait:mv(be,{waitForSiblingSpawn:!0})});if(tn===void 0)throw new Error(`no live session attached for codex thread ${be}`);let Ye=tn.currentKandanThreadId();if(Ye!==void 0&&Ye!==$)throw new md({codexThreadId:be,ownerKandanThreadId:Ye,requestingKandanThreadId:$});let Cn=_o(e.token),cr=await tn.startThreadMessageTurn({seq:T,body:C,actorSlug:Cn.actorUsername,actorUserId:Cn.actorUserId,attachments:Qo(Ne(g.attachments)??[]),boundStartTimeout:!0,dedupBySeq:!0});return n("runner.reconnect_follow_up_routed_to_live_worker",{kandanThreadId:$,codex_thread_id:be,source_seq:T,outcome:cr}),{..._,followUp:cr,sourceSeq:T}}catch(tn){let Ye=tn instanceof Error?tn.message:String(tn);return n("runner.reconnect_follow_up_route_failed",{kandanThreadId:$,codex_thread_id:be,source_seq:T,message:Ye}),{..._,followUp:"route_failed",followUpError:Ye,sourceSeq:T}}},Z6=g=>{let _=new Map,C=UB(g);for(let T of C){T.leaseEpoch!==void 0&&ne.adopt(T.threadId,T.leaseEpoch)&&n("runner.resume_reconcile_lease_adopted",{kandanThreadId:T.threadId,leaseEpoch:T.leaseEpoch});let $=BB(T);_.set(T.threadId,$),le.set(T.threadId,$)}return C.length>0&&n("runner.resume_reconcile_consumed",{threadCount:C.length}),_},Q6=async()=>{let g=EI(),_;try{_=yK(g).filter($=>$.endsWith(".log"))}catch($){if($?.code==="ENOENT")return;n("runner.inbound_orphan_scan_failed",{message:$ instanceof Error?$.message:String($)});return}let C=On(),T=new Set(Ge.list().map($=>DI(C,$.channel,$.kandanThreadId)));for(let $ of _){let B=mt(g,$);if(!T.has(B))try{let be=RI(B,n),tn=be.entries();if(tn.length===0)continue;for(let Ye of tn)be.deadLetter(Ye.sourceSeq);be.compact(),n("runner.inbound_orphan_dead_lettered",{path:B,strandedCount:tn.length,strandedSeqs:tn.map(Ye=>Ye.sourceSeq)})}catch(be){n("runner.inbound_orphan_drain_failed",{path:B,message:be instanceof Error?be.message:String(be)})}}},X6=async g=>{if(!zn())return;let _=Ge.list();await Promise.all(_.map(C=>lg(C,g?.get(C.kandanThreadId)??[]).catch(T=>{n("runner.inbound_drain_failed",{kandanThreadId:C.kandanThreadId,message:T instanceof Error?T.message:String(T)})}))),await Q6()},ure=g=>g==="accepted_never_framed"?"this message was accepted but a runner restart killed it before it ran. Resend it (or press retry) to run it now.":"interrupted by a runner restart before it finished. Resend your last message (or press retry) to continue this job.",cre=async g=>{let _=Date.now()+g;for(;;){if(t.closePromise!==void 0)return;let C=_-Date.now();if(C<=0)return;await new Promise(T=>setTimeout(T,Math.min(500,C)))}},lre=async()=>{!zn()||t.closePromise!==void 0||(await VB({records:Ge.list(),threadId:g=>g.kandanThreadId,inspect:V6,resumePendingInbound:async g=>(await lg(g,le.get(g.kandanThreadId)??[]),yt(g.channel,g.kandanThreadId).entries().length===0?"clear":"retry"),respawnWorker:async g=>{if(t.closePromise!==void 0)return!1;let _=qr(g.cwd,te.value);return _.ok?await hv(pl(g),_.cwd,g.codexThreadId)!==void 0:(n("runner.resume_respawn_cwd_rejected",{thread_id:g.kandanThreadId,cwd:g.cwd,reason:_.reason}),!1)},seqInFlight:(g,_)=>wt.has(Ss(On(),g.channel,g.kandanThreadId),_),publishInterruptedTurnState:async(g,_,C)=>{await Ns({...pl(g),sourceSeq:_},"failed",ure(C),g.codexThreadId,{failureClass:"resurrection_interrupted"})},shuttingDown:()=>t.closePromise!==void 0||!zn(),sleep:cre,log:n}),await Q6())};Z6(A(q)?.resume_reconcile);let pre=W6.then(()=>lre()).catch(g=>{n("runner.inbound_boot_drain_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>pre),Se.onReconnect(g=>{let _=g.get(Oe),C=Z6(_===void 0?void 0:_.resume_reconcile);X6(C).catch(T=>{n("runner.inbound_rejoin_drain_failed",{message:T instanceof Error?T.message:String(T)})})});let Va=new Map,Y6=(g,_)=>`${g}:${_}`,e$={windowMs:Uf(process.env),recordWedge:(g,_)=>{let C=Y6(g,_),T=(Va.get(C)??0)+1;if(Va.delete(C),Va.size>=256){let $=Va.keys().next().value;$!==void 0&&Va.delete($)}return Va.set(C,T),T},clear:(g,_)=>{Va.delete(Y6(g,_))},killAndRespawn:async({threadId:g,claudeSessionId:_,reason:C})=>{let T=ks(Lr,[_],[g]);if(T!==void 0){n("claude_code.dispatch_supervisor_killing_session",{linzumi_thread_id:g,claude_session_id:_,reason:C}),T.abortController.abort(new Error(C));let B=T.sessionWork();B!==void 0&&await Promise.race([B.catch(()=>{}),new Promise(be=>{setTimeout(be,1e4).unref?.()})])}let $=Ge.list().find(B=>B.kandanThreadId===g);return $===void 0?(n("claude_code.dispatch_supervisor_no_registry_record",{linzumi_thread_id:g,claude_session_id:_}),"no_replay_path"):(await lg($,le.get(g)??[]),"respawn_dispatched")}},n$=async(g,_)=>{let C=_.kandanThreadId,T=pl(_),$=pv.get(C),B={...T,sourceSeq:g.seq,workDescription:g.body,...g.attachments.length===0?{}:{attachments:Mg(g.attachments)},...$?.modelProvider===void 0?{}:{modelProvider:$.modelProvider},...$?.llmProxy===void 0?{}:{llmProxy:$.llmProxy},...$?.linzumiAgent===void 0?{}:{linzumiAgent:$.linzumiAgent}},be=qr(_.cwd,te.value);if(!be.ok)return n("runner.spawn_on_miss_cwd_rejected",{kandanThreadId:C,cwd:_.cwd,reason:be.reason,seq:g.seq}),await Ns(B,"failed",`could not resume the thread's coding session: working directory ${_.cwd} is not an allowed root (${be.reason})`,_.codexThreadId,{failureClass:"resume_cwd_not_allowed"}),"permanent_failed";let tn=be.cwd,Ye=Cp.get(C);if(Ye!==void 0)return n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:_.codexThreadId,provider_session_key:_.codexThreadId,seq:g.seq,decision:"await_in_flight_spawn"}),await Ye==="no_session"?(await Ns(B,"failed","could not resume the thread's coding session: no live session after spawn",_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"):await H6(g,_,B);n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:_.codexThreadId,provider_session_key:_.codexThreadId,seq:g.seq,decision:"spawned_resume"}),as.note(_.codexThreadId,"spawn_requested");let Cn=()=>{},cr=new Promise(An=>{Cn=An});Cp.set(C,cr);try{let An=await gv(B,tn);if(GI(An))return Cn("spawned"),await H6(g,_,B);if(An===void 0||An.ok===!1){Cn("no_session");let bi=An!==void 0&&typeof An.error=="string"?An.error:"the thread could not be resumed (no resumable codex session)";return as.fail(_.codexThreadId,bi),cg(_.codexThreadId,new Error(bi)),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:_.codexThreadId,seq:g.seq,message:bi}),await Ns(B,"failed",`could not resume the thread's coding session: ${bi}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}return Cn("spawned"),"dispatched"}catch(An){return Cn("no_session"),as.fail(_.codexThreadId,An instanceof Error?An.message:String(An)),cg(_.codexThreadId,An instanceof Error?An:new Error(String(An))),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:_.codexThreadId,seq:g.seq,message:An instanceof Error?An.message:String(An)}),await Ns(B,"failed",`could not resume the thread's coding session: ${An instanceof Error?An.message:String(An)}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}finally{Cn("spawned"),Cp.get(C)===cr&&Cp.delete(C)}},Ns=async(g,_,C,T,$={})=>{let B=ca(g,_,C,{instanceId:Ve,codexThreadId:T,...oc($.failureClass)});if(B!==void 0)try{await Se.push(Oe,"message_state",B)}catch(be){n("runner.spawn_on_miss_state_push_failed",{thread_id:ln(g,"threadId")??null,status:_,message:be instanceof Error?be.message:String(be)})}},t$=async(g,_)=>{let{reason:C,failureClass:T}=M2e(_),$=ca(g,"failed",C,{instanceId:Ve,...oc(T)});if($===void 0){n("runner.stillborn_worker_failed_state_unpublishable",{thread_id:ln(g,"threadId")??null,control_type:g.type,reason:C,cause:"missing_source_seq"});return}try{await Se.push(Oe,"message_state",$),n("runner.stillborn_worker_failed_state_published",{thread_id:ln(g,"threadId")??null,control_type:g.type,reason:C})}catch(B){n("runner.stillborn_worker_failed_state_push_failed",{thread_id:ln(g,"threadId")??null,control_type:g.type,message:B instanceof Error?B.message:String(B)})}},fre=async(g,_)=>{if(_.threadId===void 0)return;let C={workspace:On(),channel:g,thread_id:_.threadId,instance_id:Ve,seq:_.seq,status:"queued",reason:"queued for durable resume"};try{await Se.push(Oe,"message_state",C)}catch(T){n("runner.spawn_on_miss_state_push_failed",{thread_id:_.threadId,status:"queued",message:T instanceof Error?T.message:String(T)})}},pg=[],xv=nJ(process.env),mre=async g=>{try{let _=ln(g,"threadId"),C=g2e({control:g,hasRegistryRecord:_!==void 0&&Ge.list().some(B=>B.kandanThreadId===_),runtimeSettings:_l(e,g),identity:_o(e.token),nowMs:Date.now()});if(C===void 0)return!1;let T=ca(g,"queued",YB,{instanceId:Ve,...C.codexThreadId===void 0?{}:{codexThreadId:C.codexThreadId}}),$=await y2e({plan:C,queuedStatePayload:T,queue:yt(C.channel,C.threadId),upsertRegistryRecord:B=>Ge.upsert(B),pushQueuedState:async B=>{await Se.push(Oe,"message_state",B)},trackHeld:B=>{pg.push({control:g,...B})},log:n,nowMs:Date.now()});return $.held?(n("runner.update_restart_drain_start_held",{control_type:g.type,thread_id:C.threadId,source_seq:C.sourceSeq,enqueued:$.enqueuedFresh,registry_record_synthesized:C.registryRecord!==void 0,max_wait_ms:xv}),!0):!1}catch(_){return n("runner.update_restart_drain_hold_failed",{control_type:g.type,thread_id:ln(g,"threadId")??null,message:_ instanceof Error?_.message:String(_)}),!1}},hre=async()=>{let g=Date.now();for(let _ of[...pg]){if(g-_.heldAtMs<xv)continue;let C=pg.indexOf(_);C!==-1&&pg.splice(C,1);let T=yt(_.channel,_.threadId);T.entries().find(B=>B.sourceSeq===_.sourceSeq)!==void 0&&(T.deadLetter(_.sourceSeq),n("runner.update_restart_drain_held_turn_expired",{thread_id:_.threadId,source_seq:_.sourceSeq,held_for_ms:g-_.heldAtMs,max_wait_ms:xv}),await t$(_.control,new Error(jI)))}},Tp,gre=()=>{Tp===void 0&&(Tp=setInterval(()=>{hre().catch(g=>{n("runner.update_restart_drain_held_sweep_failed",{message:g instanceof Error?g.message:String(g)})})},eJ))};t.actions.push(()=>{Tp!==void 0&&(clearInterval(Tp),Tp=void 0)});let r$=g=>async({sourceSeq:_,reason:C,attempts:T,alreadyPublished:$})=>{n("runner.inbound_dead_lettered",{kandanThreadId:g.kandanThreadId,seq:_,reason:C,attempts:T,alreadyPublished:$}),!$&&await Ns(pl(g),"failed",m2e(C),g.codexThreadId,{failureClass:h2e(C)})},_v=()=>{if(Xt!==void 0)return!1;for(let g of Bu.values())if(g.activeTurnCount()>0)return!1;for(let g of Lr.values())if(g.hasActiveTurn())return!1;for(let g of xt.values())if(g.kind==="starting")return!1;return!(Cp.size>0||ge.size>0)},yre=()=>{if(!_v())return!1;for(let g of oe.values())if(g.entries().length>0)return!1;return!0},o$=N7(process.env),bv=U7({currentVersion:jt,strategy:F7({env:process.env,entrypointPath:process.argv[1]}),isIdle:yre,...o$===void 0?{}:{drain:{timing:o$,hooks:{begin:()=>{De=!0},end:({redispatchHeldWork:g})=>{De=!1,g&&X6().catch(_=>{n("runner.update_drain_requeue_failed",{message:_ instanceof Error?_.message:String(_)})})},isQuiescent:_v,isEligible:()=>Xt===void 0}}},performRestart:q7({currentVersion:jt,argv:process.argv.slice(2),cwd:e.cwd,close:r,exit:g=>process.exit(g),log:n}),log:n,restartAttemptStore:U_(z7())});t.actions.push(()=>bv.stop()),i.beginDraining=()=>{if(d?.outgoingDrainActive()===!0){n("runner.generation_outgoing_gate_open",{pinned:d.outgoingPins.size()});return}dn=!0,De=!0,gre()},i.onTurnCompleted=g=>{if(!(d===void 0||!d.outgoingDrainActive())&&d.outgoingPins.release(g.threadId)){let _=d.sendToSupervisor({type:"generation_pin_released",epoch:d.epoch,threadId:g.threadId});n("runner.generation_pin_released_sent",{threadId:g.threadId,remaining:d.outgoingPins.size(),delivered:_})}},i.isQuiescent=_v,i.isWaitEligible=()=>Xt===void 0,i.inFlightTurns=()=>[...Array.from(Bu.values()).flatMap(g=>g.activeTurns().map(_=>({threadId:_.threadId,turnId:_.turnId,engine:"codex"}))),...Array.from(Lr.values()).filter(g=>g.hasActiveTurn()).map(g=>({threadId:g.threadId,engine:"claude_code"}))],i.lastActivityAtMs=()=>{let g;for(let _ of Bu.values()){let C=_.lastActivityAtMs();C!==void 0&&(g===void 0||C>g)&&(g=C)}for(let _ of Lr.values()){let C=_.lastSdkActivityMs();C>0&&(g===void 0||C>g)&&(g=C)}return g},i.publishForcedKillTerminalStates=g=>{n("runner.drain_forced_kill_states_publishing",{turn_count:g.length,thread_ids:g.map(T=>T.threadId)});let _=new Set(g.filter(T=>T.engine==="codex").map(T=>T.threadId)),C=new Set([Xt,...Yt.values()].filter(T=>T!==void 0).flatMap(T=>T.pendingApprovalTurnIds()));for(let T of Bu.values())T.activeTurns().some($=>_.has($.threadId))&&T.failActiveTurns($=>C.has($.turnId)?iJ:oJ);return Promise.resolve()};let xre=()=>({instanceId:Ve,clientId:ig,...io===void 0?{}:{codexUrl:io},cwd:e.cwd,hostname:ro,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,threadId:Xt?.currentKandanThreadId()??null,codexThreadId:Xt?.currentCodexThreadId()??null,codexThreads:z6.value,model:Uu.model??null,reasoningEffort:Uu.reasoningEffort??null,allowPortForwardingByDefault:Uu.allowPortForwardingByDefault??null,fast:e.fast??!1,capabilities:Ke(),updateNudge:bv.status()??null}),Us=()=>Se.push(Oe,"heartbeat",xre()).then(()=>{wp.recordServerAck();for(let g of Lr.values())g.resumeOutbox()}).catch(g=>{n("kandan.heartbeat_push_failed",{message:g instanceof Error?g.message:String(g)})}),_re=setInterval(()=>{wp.check(),S.check(()=>{Us()}),Us()},15e3);if(t.actions.push(()=>clearInterval(_re)),Se.onReconnect(()=>Us().then(()=>{})),Us(),e.threadProcess?.role!=="thread"&&qx()){let g=$9(O9({kandanUrl:e.kandanUrl,token:e.token,computeKey:a_(e.kandanUrl),query:aP({kandanUrl:e.kandanUrl,token:e.token}),log:_=>n("vm.golden_gc",{line:_})}));t.actions.push(g)}let i$=g3(Se,Oe,()=>Array.from(w));t.actions.push(()=>i$.close());let wv=Xt?.currentCodexThreadId();if(e.launchTui&&Qt===void 0)throw new Error("Codex TUI requires a Codex app-server connection");e.launchTui&&Qt!==void 0&&wv!==void 0&&await IEe(Qt,wv);let s$=e.launchTui&&io!==void 0?vEe(e.codexBin,io,e.cwd,wv,e.channelSession,e.fast):void 0;s$!==void 0&&t.actions.push(()=>{s$.kill("SIGINT")});let vv=Qt===void 0?void 0:cv(Qt);if(Qt?.onNotification(g=>{av.value+=1;let _=g.params??{},C=LP(g.method,_);Xt===void 0&&Se.push(Oe,"codex_notification",{instanceId:Ve,seq:av.value,method:g.method,params:_,metadata:C.metadata,receivedAt:new Date().toISOString()}).catch(T=>{n("kandan.codex_notification_push_failed",{message:T instanceof Error?T.message:String(T)})}),n("codex.notification",C),vv?.observeNotification(g.method,_),Y_(Xt,g.method,_,n);for(let T of Yt.values())Y_(T,g.method,_,n)}),vv!==void 0){let g={handled:!1},_=C=>{if(t.closePromise===void 0&&(n("codex.app_server_connection_lost",{cause:C}),vv.failActiveTurns(C),Or?.stop(),F6&&!g.handled)){g.handled=!0;let T=iEe(rEe(KJ(e.runnerId),Ye=>{n("runner.app_server_exit_loop_stamp_write_failed",{message:Ye,statePath:KJ(e.runnerId)}),console.error(`Warning: could not persist the app-server crash-loop stamp (${Ye}); the exit-code-${ZI} give-up bound cannot take effect across restarts until the state path is writable.`)}),Date.now()),$=T.crashLoop?ZI:75,B=oEe(e.cwd),be=B===void 0?"":` Likely trigger: ${B}.`;if(T.crashLoop){let Ye=e.logFile??kg();n("runner.app_server_crash_loop_gave_up",{cause:C,exitsInWindow:T.count,windowMs:TK,exitCode:$,cwd_missing_diagnosis:B??null}),console.error(`The Codex app-server has died ${T.count} times in rapid succession (latest cause: ${C}).${be} Restarting the runner is not fixing it, so this exit uses code ${ZI} (instead of the restart-requesting 75) to stop the crash loop. Diagnose before reconnecting: the runner log is at ${Ye} and the CLI audit log at ${Wv()} (look for the app-server's exit reason/stderr). Once resolved, run \`linzumi connect\` to reconnect.`)}else console.error(`Codex app-server connection was lost (${C}); exiting so a fresh runner can relaunch it.${be} Run \`linzumi connect\` to reconnect.`);let tn=[...Xt!==void 0?[Xt]:[],...Yt.values()].map(Ye=>Ye.close().catch(Cn=>{n("codex.app_server_lost_session_drain_failed",{message:Cn instanceof Error?Cn.message:String(Cn)})}));nEe({pushes:[...U6,...tn],exit:()=>process.exit($),safetyCapMs:5e3})}};Qt?.onClose?.(C=>_(C.message)),Or?.process.once("exit",(C,T)=>_(`codex app-server process exited (${C??T??"unknown"})`))}let bre=g=>{let _=a_(e.kandanUrl),C=g.cwd!==void 0&&g.cwd.trim()!==""?g.cwd:e.cwd;if(w1e(C)){let $=`cwd_dangerous: golden build refused - resolved build cwd ${JSON.stringify(C)} is not a safe project directory (empty, filesystem root, or non-absolute). Re-run from the project's repository checkout.`;return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:_,cwdDangerous:!0,failureReason:$}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:_,failure_reason:$})}n("vm.golden_build_started",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:_,sourceThreadId:g.sourceThreadId??null,cwd:C});try{X5(iP({projectPublicId:g.projectPublicId??void 0,computeKey:_,cwd:C}))}catch($){n("vm.golden_build_register_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)})}let T=g.sourceThreadId===void 0?void 0:{threadId:g.sourceThreadId,sourceMachineName:Nx({cwd:C,kandanThreadId:g.sourceThreadId})};return J8({cwd:C,projectPublicId:g.projectPublicId??void 0,computeKey:_,name:g.name,...T===void 0?{}:{sourceThread:T},log:$=>n("vm.golden_build",{line:$})}).then($=>(n("vm.golden_build_ready",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,checksum:$.checksum,sizeBytes:$.sizeBytes,artifactRef:$.artifactRef,artifactKind:$.artifactKind,snapshotFallbackReason:$.snapshotFallbackReason??null}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"ready",checksum:$.checksum,size_bytes:$.sizeBytes,artifact_ref:$.artifactRef,artifact_kind:$.artifactKind,source_commits:$.sourceCommits,lockfile_hashes:$.lockfileHashes,toolchain_versions:$.toolchainVersions,compute_key:_,failure_reason:null,metadata:$.snapshotFallbackReason===void 0?{}:{snapshot_fallback_reason:$.snapshotFallbackReason}}))).catch($=>{let B=$ instanceof Gc||$ instanceof Error?$.message:String($);return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,captureUnavailable:$ instanceof Gc,failureReason:B}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:_,failure_reason:B})}).catch($=>{throw n("vm.golden_build_result_push_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)}),$})},wre=g=>{if(n("kandan.control",{control:g}),a?.record("kandan","control.received",{controlType:g.type,control:g}),!HRe(e,g)&&!GRe(e,g,Ju)){let T=oi(g)??null,$=e.threadProcess?.kandanThreadId??null;n("kandan.control_ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:T,threadProcessId:$}),a?.record("kandan","control.ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:T,threadProcessId:$});return}if(g.type==="replace_runner"){n("runner.replaced",{runnerId:e.runnerId,reason:g.reason,replacementRunnerId:g.replacementRunnerId,replacementVersion:g.replacementVersion}),r().catch(T=>{n("runner.replace_close_failed",{message:T instanceof Error?T.message:String(T)})});return}if(g.type==="update_available"){bv.handleUpdateAvailable(g);return}if(g.type==="set_commander_impl"){let T=g.impl,$=T==="ts"||T==="rescript"?T:void 0;if($===void 0){n("runner.commander_impl_control_ignored",{impl:typeof T=="string"?T:null,reason:"unknown_impl_value"});return}let B=wK($),be=$!==sR,tn=process.env.LINZUMI_SUPERVISED==="1"&&process.platform!=="win32";if(n("runner.commander_impl_persisted",{impl:$,persisted:B,runningImpl:sR,restart:be?tn?"graceful_drain":"deferred_to_next_launch":"not_needed"}),be&&tn)try{process.kill(process.pid,"SIGUSR2")}catch(Ye){n("runner.commander_impl_restart_failed",{message:Ye instanceof Error?Ye.message:String(Ye)})}return}let _=QRe(g);if(_!==void 0)return bre(_);if(!JRe(g,Ve)){n("kandan.control_ignored",{reason:"instance_id_mismatch",instanceId:Ve,controlInstanceId:KRe(g),controlType:g.type});return}if(m3(g)){f3(g,Array.from(w)).then(T=>(n("kandan.forward_response",{requestId:g.requestId,port:g.port,path:g.path,status:T.status,ok:T.ok,location:kEe(T.headers,"location")}),Se.push(Oe,"forward:http_response",T))).catch(T=>Se.push(Oe,"forward:http_response",{requestId:g.requestId,ok:!1,error:T instanceof Error?T.message:String(T)})).catch(T=>{n("kandan.forward_response_push_failed",{message:T instanceof Error?T.message:String(T)})});return}if(h3(g)){i$.handle(g);return}if(v3(g)){k3(g,{codeServerBin:e.codeServerBin,editorRuntime:e.editorRuntime,allowedCwds:te.value,currentState:U.value,browserBaseUrl:g.browserBaseUrl??process.env.KANDAN_LOCAL_RUNNER_PUBLIC_BASE_URL,runnerId:e.runnerId,platform:e.localEditorPlatform}).then(T=>{if(T.ok){ie.value+=1;let $=ie.value,B=U.value.status==="running"?[U.value.port,...U.value.collaboration===void 0?[]:[U.value.collaboration.serverPort],...O6("editor_restarted")]:[];U.value.status==="running"&&(w.delete(U.value.port),k.delete(U.value.port),U.value.collaboration!==void 0&&(w.delete(U.value.collaboration.serverPort),k.delete(U.value.collaboration.serverPort))),U.value=T.state,w.add(T.event.port),k.add(T.event.port),T.event.collaboration!==void 0&&(w.add(T.event.collaboration.serverPort),k.add(T.event.collaboration.serverPort));let be=Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!0,capabilities:{...Ke(),...B.length===0?{}:{revokedPorts:B}},...T.event});return T.state.status==="running"&&(Wte(T.state),Zte(T.state,$,be)),be}return U.value=T.state,Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!1,reason:T.reason,capabilities:Ke()})}).catch(T=>Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!1,reason:yf(T),capabilities:Ke()})).catch(T=>{n("kandan.local_editor_status_push_failed",{message:T instanceof Error?T.message:String(T)})});return}if(M1e(g)){I({allowedCwds:g.allowedCwds,configVersion:g.configVersion??null},{includeStartupAllowedCwds:!0,source:"control"}),Us();return}if(A1e(g)){let T=aF(g);n("runner.fleet_breaker_state",{source:"control",outcome:T.outcome,state:T.snapshot?.state??null,fate:T.snapshot?.fate??null,version:T.snapshot?.version??null});return}if(O1e(g)){let T=Vte(g);if(T!==void 0){Se.push(Oe,"codex_response",T).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}let $=Gte(g);if($!==void 0){Se.push(Oe,"codex_response",$).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}}if($1e(g)){switch(g.enabled){case!0:w.add(g.port);break;case!1:w.delete(g.port),k.delete(g.port),z(g.port),se.approvedPorts.delete(g.port),se.approvedTargets.delete(g.port),Se.push(Oe,"forward_port_revoked",{instanceId:Ve,port:g.port,reason:"user_disabled",capabilities:Hs(Ke(),g.port)}).catch(T=>{n("kandan.forward_port_revoked_push_failed",{message:T instanceof Error?T.message:String(T)})});break}Us();return}if(g.type==="import_onboarding_conversations")return Q2e(e,n,g).catch(T=>{throw n("onboarding.conversation_import_failed",{runnerId:e.runnerId,message:T instanceof Error?T.message:String(T)}),T});if(g.type==="scan_onboarding_projects"){let T=n1e(g.paths);return qK(e,n,{workspaceSlug:h(g.workspace),selectedScanRoots:T,sourceRoots:T,workerId:"projects-selected-folders",workerLabel:"Selected folders",startingMessage:"Checking selected folders",emptyMessage:"No Git projects found in selected folders",foundMessage:"Selected folder projects found",failedMessage:"Selected folder project scan failed",currentPlace:T[0]??e.cwd,requireTerminalStatusWrite:!0,includeRuntimeCwdHint:!1}).catch($=>{throw n("onboarding.project_scan_failed",{runnerId:e.runnerId,message:$ instanceof Error?$.message:String($)}),$})}if(g.type==="start_instance"){if(ERe(g,$=>Ge.list().some(B=>B.kandanThreadId===$)))return Ja+=1,n("kandan.start_instance_skipped_known_session",{threadId:oi(g)??null,controlSeq:g.control_seq??null,issuedAt:xm(g)??null,reason:"thread_already_has_known_session",skippedStaleStartInstances:Ja}),Se.push(Oe,"codex_response",{instanceId:Ve,controlType:g.type,threadId:oi(g)??null,ok:!1,skipped:!0,error:"start_instance_thread_already_has_session",issuedAt:xm(g)??null}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})});let T=RRe(g,Date.now());if(T!==void 0)return Ja+=1,n("kandan.start_instance_stale_skipped",{threadId:oi(g)??null,controlSeq:g.control_seq??null,issuedAt:xm(g)??null,ageMs:T,staleWindowMs:vK,skippedStaleStartInstances:Ja}),Se.push(Oe,"codex_response",{instanceId:Ve,controlType:g.type,threadId:oi(g)??null,ok:!1,skipped:!0,error:"stale_start_instance",issuedAt:xm(g)??null,ageMs:T}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})})}let C;if(g.type==="start_turn"){let T=g.control_seq;if(T!==void 0){let $=IRe(Oe,g.threadId),B=_n.initial($);if(DRe(B,T))return vp+=1,n("kandan.start_turn_replay_skipped",{controlType:g.type,threadId:g.threadId,controlSeq:T,appliedControlSeq:B,skippedReplayedStartTurns:vp}),{instanceId:Ve,controlType:g.type,threadId:g.threadId,skipped:!0};C=()=>MRe(_n,$,T)}}return ARe(()=>{if(dn&&(g.type==="start_instance"||g.type==="reconnect_thread")){let T=ln(g,"threadId"),$=g.type==="reconnect_thread"?co(g.codexThreadId):void 0,B=T!==void 0?xt.get(T):void 0,be=g.type==="reconnect_thread"&&($!==void 0&&Lr.has($)||B!==void 0&&Q_(B)!=="dead");if(g.type==="start_instance"||g.type==="reconnect_thread"&&!be)return mre(g).then(Ye=>{if(Ye)return{instanceId:Ve,controlType:g.type,threadId:T??null,held:!0,reason:"runner_updating_queued"};throw n("runner.update_restart_drain_start_refused",{control_type:g.type,thread_id:T??null}),new Error(jI)})}return XRe(Xt,Yt,g).then(T=>T!==void 0?T:QI(Qt,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,g,dv,a,hv,_m(e)?are:void 0,s?.playCodex,$=>ne.current($),$r,Na,Wo,xi,e$,B6))},C).then(T=>Se.push(Oe,"codex_response",T)).catch(async T=>((g.type==="start_instance"||g.type==="reconnect_thread")&&(lK(T)||_C(T)||FI(T))&&await t$(g,T),Se.push(Oe,"codex_error",{instanceId:Ve,message:yf(T)}))).catch(T=>{n("kandan.control_response_push_failed",{message:T instanceof Error?T.message:String(T)})})},vre=lN({store:cN(dN(xl(),e.runnerId),g=>n("runner.control_quarantine_state_write_failed",{message:g})),quarantineFilePath:uN(xl(),e.runnerId),currentEpoch:()=>zu.current(Oe),log:n,emitRunnerEvent:g=>{Se.push(Oe,"runner.control_quarantined",g).catch(_=>{n("runner.control_quarantined_event_push_failed",{message:_ instanceof Error?_.message:String(_)})})}}),a$=(g,_)=>{ORe(g.type,()=>wre(g),_,n,C=>vre.onControlRejected(g,C))},fg=d===void 0?void 0:v7({runtime:d,threadIdOf:g=>oi(g),controlTypeOf:g=>g.type,dispatch:a$,log:n});return d!==void 0&&fg!==void 0&&(d.hooks.onOverlapDrain=g=>{let _=[...new Set(i.inFlightTurns().map(T=>T.threadId).filter(T=>T!==""))];d.beginOutgoingDrain(_);let C=d.sendToSupervisor({type:"generation_pin_snapshot",epoch:d.epoch,threadIds:_});n("runner.generation_outgoing_drain_started",{incomingEpoch:g,pinned:_.length,threadIds:_,snapshotDelivered:C}),d.requestUpdateDrain("generation_overlap")},d.hooks.onOverlapAbort=()=>{let g=d.cancelUpdateDrain("generation_overlap_abort"),_=fg.redispatchDeferredToIncoming();n("runner.generation_overlap_abort_applied",{drainCancelled:g,redispatched:_})},d.hooks.onPinsReleased=()=>{fg.dispatchUnpinned()},d.hooks.onPromote=()=>{let C;t.actions.push(()=>{C!==void 0&&(clearTimeout(C),C=void 0)});let T=$=>{if(C=void 0,d.promoteRunnerLock()){n("runner.generation_lock_promoted",{attempt:$});return}if($>=10){n("runner.generation_lock_promote_gave_up",{attempts:$});return}C=setTimeout(()=>T($+1),5e3),C.unref()};T(1)}),_Re(g1e(e,te.value,ce.value,Ie.value),n,Ba,sg,fg?.dispatch??a$,async()=>{await y(),await x(),p.value==="probe_failed"&&await b()}),{instanceId:Ve,codexUrl:io,close:r}}function _Re(e,n,t,r,o,i){r.value=o,t.splice(0).forEach(({control:s,ack:a})=>o(s,a)),H2e(e,n,i)}function ym(){let e=process.env.LINZUMI_COMMANDER_OUTBOX_DIR?.trim();return e!==void 0&&e!==""?e:mt(Pm(),".linzumi","commander-outbox")}function xl(){let e=process.env.LINZUMI_CONTROL_CURSOR_DIR?.trim();return e!==void 0&&e!==""?e:mt(Pm(),".linzumi","control-cursors")}function bK(){return mt(Pm(),".linzumi","commanderImpl")}function bRe(){return mt(Pm(),".linzumi","commanderImplFallback.json")}function wRe(){try{let e=pa(bK(),"utf8").trim();return e==="ts"||e==="rescript"?e:void 0}catch{return}}function wK(e){let n=bK(),t=`${n}.tmp.${process.pid}.${Math.random().toString(16).slice(2,8)}`;try{qd(fa(n),{recursive:!0}),Sm(t,`${e}
|
|
1524
|
+
${t}`.toLowerCase();return r.includes("not logged in")||r.includes("not authenticated")||r.includes("login required")||r.includes("please log in")?"not_logged_in":e===0?"logged_in":"probe_failed"}function VI(e,n){let t=e==="logged_in"&&n.status==="probe_failed"&&n.transient;return{status:t?e:n.status,downgradeSkipped:t}}function yRe(e,n){return e==="ENOENT"?n?{status:"binary_missing",transient:!1}:{status:"probe_failed",transient:!0}:{status:"probe_failed",transient:GP(e)}}function NJ(e,n){return new Promise(t=>{let r=[],o=[],i=!1,s,a=u=>{i||(i=!0,s!==void 0&&clearTimeout(s),t(u))},d=a0(e,["login","status"],{cwd:n,env:process.env,stdio:["ignore","pipe","pipe"]});s=setTimeout(()=>{d.kill("SIGTERM"),a({status:"probe_failed",transient:!0})},uRe),d.stdout?.on("data",u=>{r.push(u)}),d.stderr?.on("data",u=>{o.push(u)}),d.once("error",u=>{a(yRe(u.code,gl(n)))}),d.once("exit",u=>{a({status:gRe(u,Buffer.concat(r).toString("utf8"),Buffer.concat(o).toString("utf8")),transient:u===null})})})}async function xRe(e,n,t,r,o,i,s,a,d){let u=NEe(e),c={value:e.dependencyStatus},l={value:(await NJ(e.codexBin,e.cwd)).status},p={value:e.claudeCodeAuthStatus??(YJ(e).includes("claude-code")?"logged_in":"not_logged_in")};(p.value==="probe_failed"||p.value==="binary_missing")&&n("runner.claude_code_auth_startup_probe_failure",{runnerId:e.runnerId,claude_code_auth_status:p.value,probe_detail:e.claudeCodeAuthProbeDetail??null});let m=()=>YJ(e,p.value),f={value:Ax()};n("runner.codex_auth_status_probed",{runnerId:e.runnerId,codex_auth_status:l.value,has_valid_openai_auth:f.value.hasValidOpenAiAuth,openai_auth_mode:f.value.authMode});let y=async()=>{let g=c.value;if(g!==void 0)try{let _=await aa({cwd:e.cwd,codexBin:e.codexBin,codeServerBin:e.codeServerBin,editorRuntime:g.editorRuntime}),C=V3(g,_);c.value=C.status,C.codexDowngradeSkipped&&n("runner.dependency_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,codex_probe_failure:_.codex.failure??null,probe_detail:_.codex.failureDetail??null}),n("runner.dependency_status_reprobed",{runnerId:e.runnerId,codex_available:C.status.codex.available,codex_available_changed:g.codex.available!==C.status.codex.available,probe_detail:_.codex.failureDetail??null})}catch(_){n("runner.dependency_status_reprobe_failed",{runnerId:e.runnerId,message:_ instanceof Error?_.message:String(_)})}},x=async()=>{try{let g=await NJ(e.codexBin,e.cwd),_=l.value,C=VI(_,g);l.value=C.status;let T=f.value.hasValidOpenAiAuth;f.value=Ax(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobed",{runnerId:e.runnerId,codex_auth_status:C.status,codex_auth_status_changed:_!==C.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth,has_valid_openai_auth_changed:T!==f.value.hasValidOpenAiAuth})}catch(g){let _=l.value,C=VI(_,{status:"probe_failed",transient:!0});l.value=C.status,f.value=Ax(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:"probe_failed",message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth})}},b=async()=>{if(!(e.claudeCodeRunner!==void 0||e.agentReplay!==void 0))try{let g=await Oc({cwd:e.cwd,claudeBin:e.claudeCodeBin}),_=p.value,C=VI(_,g);p.value=C.status,C.downgradeSkipped&&n("runner.claude_code_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,probe_detail:g.detail??null}),n("runner.claude_code_auth_status_reprobed",{runnerId:e.runnerId,claude_code_auth_status:C.status,claude_code_auth_status_changed:_!==C.status,probe_detail:g.detail??null,claude_code_executable_fallback:g.fallbackExecutable??null})}catch(g){n("runner.claude_code_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g)})}},S=Y4({computeFingerprint:()=>X4(process.env,{cwd:e.cwd}),refresh:b,onReprobeStarted:()=>{n("runner.claude_code_auth_hint_changed",{runnerId:e.runnerId,claude_code_auth_status:p.value})}}),v=e.allowedForwardPorts??[],w=new Set(v),k=new Set,R=aR(e.kandanUrl),P=()=>TEe(R,k),O=uK(e)?await x2e(n):void 0;O!==void 0&&t.actions.push(()=>O.close());let E=new Map,j=(g,_)=>{E.set(g,{kandanThreadId:_.kandanThreadId??null,codexThreadId:_.codexThreadId??null,channelSlug:_.channelSlug??null,processName:_.processName??null,processIconKey:_.processIconKey??null,localEditor:_.localEditor===!0,agentProvider:_.agentProvider??null,linzumiCliManaged:_.linzumiCliManaged===!0})},z=g=>{E.delete(g)},M=(g,_={})=>{w.add(g),k.add(g),j(g,{processName:_.processName??null,processIconKey:_.processIconKey??null,agentProvider:_.agentProvider??null,linzumiCliManaged:!0})},J=g=>{k.delete(g),z(g),v.includes(g)||w.delete(g)},K=()=>Array.from(w).sort((g,_)=>g-_).map(g=>{let _=E.get(g);return{port:g,kandanThreadId:_?.kandanThreadId??null,codexThreadId:_?.codexThreadId??null,channelSlug:_?.channelSlug??null,processName:_?.processName??null,processIconKey:_?.processIconKey??null,localEditor:_?.localEditor===!0,agentProvider:_?.agentProvider??null,linzumiCliManaged:_?.linzumiCliManaged===!0||k.has(g)}}),G=g=>{let{advertisable:_,rejected:C}=hC(g);for(let T of C)n("runner.non_advertisable_cwd_root_dropped",{root:T.root,reason:T.reason}),bd({severity:"warning",key:`runner.non_advertisable_cwd_root:${T.root}`,message:`not advertising ${JSON.stringify(T.root)} as an allowed working-directory root (${T.reason==="home_root"?"it is your home directory":"it is a filesystem root"}). A catch-all root would let the server route any coding job to this machine. Register explicit project folders instead (connect from a project directory or pass --allowed-cwd).`});return _},W=G(Vt(e.allowedCwds)),te={value:[...W]},me=e.remoteCodexSandboxRunner??EB({env:process.env,platform:process.platform}),ge=new Map,ce={value:Vt(e.missingAllowedCwds??[])},Ie={value:!1},Re={value:null},I=(g,_)=>{let C=Re.value;if(g.configVersion!==null&&C!==null&&g.configVersion<C){n("runner.config_sync_stale_skipped",{source:_.source,configVersion:g.configVersion,appliedConfigVersion:C});return}let T=g8(g.allowedCwds,e.kandanUrl),$=xR(T,{createMissing:!0});Ie.value=Ie.value||y1e($.allowedCwds,[e.cwd,...W]),te.value=G(Vt([..._.includeStartupAllowedCwds?W:[],...$.allowedCwds])),ce.value=$.missingAllowedCwds,g.configVersion!==null&&(Re.value=g.configVersion),n("runner.config_updated",{source:_.source,configVersion:g.configVersion,allowedCwdCount:te.value.length,missingAllowedCwdCount:ce.value.length})},L=(g,_={})=>{let C=L1e(te.value,ce.value);if(!C.changed)return!1;if(te.value=C.advertised,ce.value=C.missing,C.dropped.length>0){n("runner.stale_allowed_cwd_roots_deadvertised",{trigger:g,pruned_roots:C.dropped,advertised_root_count:C.advertised.length,..._});for(let T of C.dropped)bd({severity:"warning",key:`runner.allowed_cwd_root_missing:${T}`,message:`allowed working-directory root ${JSON.stringify(T)} no longer exists (deleted, or its disk/volume is unmounted). Not offering it for coding jobs until it is back; remount the volume or restore the folder to resume.`})}if(C.restored.length>0){n("runner.allowed_cwd_roots_readvertised",{trigger:g,restored_roots:C.restored,advertised_root_count:C.advertised.length,..._});for(let T of C.restored)bd({severity:"info",key:`runner.allowed_cwd_root_restored:${T}`,message:`allowed working-directory root ${JSON.stringify(T)} is back; offering it for coding jobs again.`})}return!0},U={value:{status:"disabled"}},ie={value:0},se={watcher:void 0,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};t.actions.push(()=>{for(let g of ge.values())g.abort(new Error("local runner stopped"));ge.clear(),U.value.status==="running"&&(U.value.process.kill("SIGINT"),U.value.collaboration?.process.kill("SIGINT")),se.watcher?.close()});let Q=()=>Array.from(se.pendingRequests.values()).sort((g,_)=>g.port-_.port).map(g=>{let _=Ii(g.command),C=_?.appName??gf(mr(g));return{requestId:g.requestId,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},summary:`Make ${C} on port ${g.port} accessible on Linzumi?`,reason:Ly(mr(g)),..._?.appName===void 0?{}:{processName:_.appName},..._?.iconKey===void 0?{}:{processIconKey:_.iconKey}}}),_e,Te,ae=()=>(Te===void 0&&(Te=(e.localVmReadinessProbe??(()=>K9({workspaceLocalVmExecutionFlag:e.vmExecution===!0})))().then(_=>(_e=_,_)).catch(_=>{n("vm.local_vm_readiness_probe_failed",{error:_ instanceof Error?_.message:String(_)})})),Te),Ee=()=>(ae(),_e),dt=()=>({...d===void 0?{}:{generationOverlap:!0},codexAppServer:u,codexRemoteTui:u,client_message_ids:!0,commander_pipeline:"pipeline",agentProviders:m(),modelProviders:[...lx],codexAuthStatus:l.value,claudeCodeAuthStatus:p.value,hasValidOpenaiAuth:f.value.hasValidOpenAiAuth,openaiAuthMode:f.value.authMode,waferAvailable:!0,defaultAgentProvider:"codex",startInstance:te.value.length>0,durableClaudeSessionStore:!0,agentSlashCommandCatalog:!0,cloneRepository:!0,managedDevServices:!0,claudeCodeCheckpointRewind:!1,steerTurn:!0,appliedConfigVersion:Re.value,allowedCwds:te.value,missingAllowedCwds:ce.value,allowedCwdSuggestions:j1e(e.cwd,te.value),allowedCwdProjects:F1e(te.value),onboardingSelectedFolderScan:!0,portForwarding:w.size>0,tcpForwarding:!0,linzumiMcp:!0,localVmExecution:e.vmExecution===!0,...(()=>{let g=Ee();return g===void 0?{}:{localVmReadiness:g}})(),remoteCodexExecution:me!==void 0&&te.value.length>0,remoteCodexExecutionStatus:me===void 0?"sandbox_unavailable":te.value.length>0?"ready":"cwd_unavailable",allowedPorts:Array.from(w).sort((g,_)=>g-_),forwardedPortAttributions:K(),pendingEditorForwardPortRequests:Q(),toolStatus:c.value===void 0?null:ZP(c.value),editorRuntime:c.value?.editorRuntime===void 0?null:ZP(c.value).editorRuntime,...S3(e.editorRuntime,te.value,U.value)}),Ke=()=>(L("capabilities_payload"),dt()),Dt=HI(SRe(e.runnerId),n),X=d===void 0?Dt:S7(Dt,()=>d.outgoingDrainActive());t.actions.push(()=>X.flush());let pe=wN(e.runnerId),$e=vN(pe,g=>n("runner.cwd_stillbirth_state_write_failed",{message:g,statePath:pe}),g=>n("runner.cwd_stillbirth_state_read_failed",{message:g,statePath:pe}));if(e.threadProcess?.role!=="thread"){let g=IN($e);g.length>0&&n("runner.cwd_stillbirth_counters_reset_on_restart",{cwds:g})}let _n=HI(kRe(e.runnerId),n,{discardSeqsOnFirstEpochAdoption:!0});t.actions.push(()=>_n.flush());let Ge=Sq(vq(e.runnerId),n);if(e.threadProcess?.role!=="thread"){let g=ud(e.runnerId);zF(g,n),jF({scopeDir:g,ownerPid:process.pid,log:n}).catch(C=>{n("dev_services.reconcile_failed",{message:C instanceof Error?C.message:String(C)})});let _=FF({scopeDir:g,ownerPid:process.pid,log:n});t.actions.push(()=>_.stop())}let Je=HI(PRe(e.runnerId),n,{fsyncOnWrite:!0});t.actions.push(()=>Je.flush());let In={initial:g=>Je.initial(g),onAdvance:(g,_)=>Je.onAdvance(g,_),flush:()=>Je.flush()},wt=qB(),$r=g=>{if(g.sourceSeq===void 0)return;let _=Ss(On(),g.channel,g.threadId);EJ({store:In,watermarkKey:_,sourceSeq:g.sourceSeq,log:n})&&n("runner.live_worker_source_seq_committed",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:g.sourceSeq}),Zt.delete(to(g.channel,g.threadId,g.sourceSeq))},qa=g=>{wt.clearSeq(Ss(On(),g.channel,g.threadId),g.sourceSeq)},xi=g=>{if(g.sourceSeq===void 0)return!1;let _=Ss(On(),g.channel,g.threadId),C=In.initial(_);return NB(C,wt,_,g.sourceSeq)},N=HB(),ne=TJ(),oe=new Map,le=new Map,ve=!0,De=!1,dn=!1,zn=()=>ve&&!De,On=()=>Ur(e)??"default",Vo=()=>e.channelSession?.channelSlug??Ge.list()[0]?.channel,yt=(g,_)=>{let C=On(),T=`${C}:${g}:${_}`,$=oe.get(T);if($!==void 0)return $;let B=RI(DI(C,g,_),n);return oe.set(T,B),B},Zt=new Map,to=(g,_,C)=>`${On()}:${g}:${_}:${C}`,Na=(g,_,C)=>{Zt.set(to(g,_,C.seq),C)},Wo=g=>{let _=yt(g.channel,g.threadId);for(let C of g.sourceSeqs){let T=to(g.channel,g.threadId,C),$=Zt.get(T);if($===void 0){n("runner.live_follow_up_recapture_missing",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C});continue}let B=_.enqueue(C,"replay",Qu($),Date.now());n("runner.live_follow_up_re_enqueued_on_close",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C,enqueued:B.accepted}),Zt.delete(T)}};o.stopAccepting=()=>{ve=!1},o.flushInboundQueues=()=>{for(let g of oe.values())g.compact()};let zu=NRe(X,_n,n,e),Ua=pB({initialToken:e.token,tokenExpiresAt:e.tokenExpiresAt,deps:{renew:async g=>{let _=await a8({kandanUrl:e.kandanUrl,accessToken:g});return _.kind==="renewed"?{kind:"renewed",accessToken:_.token.accessToken,expiresInSeconds:_.token.expiresInSeconds}:{kind:_.kind}},persist:e.tokenExpiresAt===void 0?void 0:({accessToken:g,expiresInSeconds:_})=>{uo({kandanUrl:e.kandanUrl,accessToken:g,expiresInSeconds:_,authFilePath:e.authFilePath})},log:n}}),Se=await Yg(e.kandanUrl,()=>Ua.currentToken(),e.socketFactory,{controlCursorStore:X,controlEpochStore:zu,onOperatorNotice:g=>bd({severity:"warning",audience:"operator",message:g})});Ua.start(),t.actions.push(()=>Ua.stop()),t.actions.push(()=>Se.close());let wp=zRe(n,Date.now,kK,{onReconnectNeeded:({staleForMs:g,attempt:_})=>{let C=Se.forceReconnect?.("connection_stale_forced_reconnect");return n("kandan.connection_force_reconnect_dispatched",{staleForMs:g,attempt:_,initiated:C??!1}),C??!1},onHardResetNeeded:()=>Se.hardReset?.("connection_stale_hard_reset")??!1,onUnrecoverable:({staleForMs:g})=>{console.error(`Connection to Linzumi was lost and did not recover for ${Math.round(g/6e4)} minutes; exiting so a fresh runner can reconnect. Run \`linzumi connect\` to reconnect.`),process.exit(75)}}),Oe=`local_runner:${e.runnerId}`,ig=e.clientId??e.machineId??e.runnerId,ro=tRe(),qu=e7({log:n}),nv=()=>{qu.drain(g=>Se.pushIfConnected(Oe,"diagnostics:upload",g))},_i=KN({upload:g=>Se.pushIfConnected(Oe,"diagnostics:upload",g),runnerLogFile:e.logFile??kg(),log:n,spool:qu});_i.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),nv(),Se.onDisconnect?.(g=>{_i.recordLifecycle({event:"disconnect",atIso:new Date().toISOString(),closeCode:g.closeCode,closeReason:g.closeReason,previousSessionDurationMs:g.previousSessionDurationMs,reconnectCount:g.reconnectCount}),_i.flushNow()}),Se.onReconnect(()=>{_i.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),_i.flushNow(),nv()}),t.actions.push(async()=>{_i.stop(),_i.flushNow()});let Nu=()=>({clientName:"kandan-local-codex-runner",clientId:ig,machineFingerprint:e.machineFingerprint??null,...f$(e.machineFingerprintV2),runnerPid:process.pid,version:jt,hostname:ro,cwd:e.cwd,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,capabilities:Ke(),...d===void 0?{}:{generation:{epoch:d.epoch,overlap:!0}},commander_impl:"ts"}),Ba=[],vp=0,Ja=0,sg={value:void 0};Se.onControl((g,_)=>{wp.recordServerAck();let C=sg.value;if(C===void 0){Ba.push({control:g,ack:_});return}C(g,_)});let q=await Se.join(Oe,Nu(),{rejoinPayload:Nu});if(d!==void 0){let g=d.sendToSupervisor({type:"generation_ready",epoch:d.epoch});n("runner.generation_ready_sent",{epoch:d.epoch,delivered:g})}let je=VJ(A(q)?.runner_config);switch(je.type){case"missing":break;case"invalid":throw n("runner.config_join_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:je.reason}),new Error(`invalid runner_config in Kandan join response: ${je.reason}`);case"ok":I(je.config,{includeStartupAllowedCwds:!1,source:"join"});break}vRe(n),UJ(A(q)?.runner_config,n);let re=A(A(q)?.compute_node);re!==void 0&&n("runner.compute_node",{id:h(re.id),name:h(re.name),identityQuality:h(re.identity_quality),resetGeneration:Y(re.reset_generation)});let Ce=(g,_)=>{let C=pEe(g);C!==void 0&&n("kandan.roster_seeded",{source:_,thread_count:C.threads.length,truncated:C.truncated,skipped_entries:C.skippedEntries,threads:C.threads.map(T=>({kandan_thread_id:T.kandanThreadId,provider_session_key:T.providerSessionKey,channel_id:T.channelId,title:T.title,channel_slug:T.channelSlug,cwd:T.cwd,last_activity_at_ms:T.lastActivityAtMs}))})};Ce(q,"join");let hn=(g,_)=>{let C=A(g)?.fleet_breaker;if(C===void 0)return;let T=XS(C);if(T===void 0){n("runner.fleet_breaker_seed_invalid",{source:_});return}n("runner.fleet_breaker_state",{source:_,outcome:YS(T),state:T.state,fate:T.fate,version:T.version})};hn(q,"join"),Se.onReconnect(g=>{Ce(g.get(Oe),"rejoin"),hn(g.get(Oe),"rejoin");let _=VJ(g.get(Oe)?.runner_config);switch(UJ(g.get(Oe)?.runner_config,n),_.type){case"missing":return;case"invalid":n("runner.config_rejoin_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:_.reason});return;case"ok":I(_.config,{includeStartupAllowedCwds:!1,source:"rejoin"});return}});let oo=lEe(A(q)?.replaced_runners),Or=s===void 0&&e.codexUrl===void 0&&u?await NK(e):void 0;Or!==void 0&&t.actions.push(()=>{Or.stop()});let io=e.codexUrl??Or?.url;if(Or!==void 0){let g=aR(Or.url);g!==void 0&&M(g,{processName:"Codex app-server",processIconKey:"codex",agentProvider:"codex"})}let Ve=`codex-${BI()}`,Ho=g=>{Se.push(Oe,"local_editor_status",g).catch(_=>{n("kandan.local_editor_status_push_failed",{message:_ instanceof Error?_.message:String(_)})})},Go=(g,_)=>{Se.push(Oe,g,_).catch(C=>{n(`kandan.${g}_push_failed`,{message:C instanceof Error?C.message:String(C)})})},Jte=uK(e)?v2e({log:n,instanceId:Ve,markCommanderManagedForwardPort:M,clearCommanderManagedForwardPort:J,managedForwardPorts:k,capabilitiesPayload:Ke,pushForwardPortEvent:Go}):void 0;t.actions.push(()=>Jte?.close());let tv=(g,_)=>{let C=se.approvedTargets.get(g);se.approvedPorts.delete(g),se.approvedTargets.delete(g),w.delete(g),z(g),Go("forward_port_revoked",{instanceId:Ve,port:g,...C===void 0?{}:{pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd}},reason:_,capabilities:Hs(Ke(),g)})},O6=g=>{se.watcher?.close(),se.watcher=void 0,se.pendingRequests.clear(),se.queuedCandidates.clear();let _=Array.from(se.approvedPorts);for(let C of _)tv(C,g);return se.dismissedTargets.clear(),_},ag=()=>{if(se.pendingRequests.size>0||se.queuedCandidates.size===0)return;let g=Array.from(se.queuedCandidates.values()).sort((_,C)=>_.port-C.port)[0];g!==void 0&&(se.queuedCandidates.delete(g.port),L6(g),se.pendingRequests.size===0&&ag())},rv=g=>{let _=xc({requestId:`editor-port-forward-auto-${BI()}`,sourceSeq:0,candidate:g});se.approvedPorts.add(_.port),se.approvedTargets.set(_.port,mr(_)),w.add(_.port);let C=Ii(_.command);j(_.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:_.portKind==="commander_bound"}),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"approve",capabilities:Ke()})},L6=g=>{let _=hf({candidate:g,threadBound:!0,suppressedPorts:new Set(P()),approvedPorts:se.approvedPorts,approvedTargets:se.approvedTargets,dismissedTargets:se.dismissedTargets,pendingRequests:Array.from(se.pendingRequests.values())});switch(_.type){case"skip":return;case"remember_approved_target":se.approvedTargets.set(_.target.port,_.target);return;case"revoke_and_prompt":tv(_.revoked.port,_.reason),rv(g);return;case"replace_pending":se.pendingRequests.delete(_.expired.port),Go("forward_port_resolved",{instanceId:Ve,requestId:_.expired.requestId,source:"local_editor",port:_.expired.port,pid:_.expired.pid,command:_.expired.command,..._.expired.cwd===void 0?{}:{cwd:_.expired.cwd},decision:"expired",reason:_.reason,capabilities:Ke()}),rv(_.candidate);return;case"prompt":rv(g);return}},Kte=g=>{let _=se.queuedCandidates.get(g.port);if(_!==void 0&&zr(_,g)){se.queuedCandidates.delete(g.port);return}let C=se.pendingRequests.get(g.port);if(C!==void 0&&zr(mr(C),g)){se.pendingRequests.delete(g.port),Go("forward_port_revoked",{instanceId:Ve,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},reason:"listener_exited",capabilities:Hs(Ke(),g.port)}),ag();return}se.approvedPorts.has(g.port)&&tv(g.port,"listener_exited")},Vte=g=>{let _=Array.from(se.pendingRequests.values()).find(T=>T.requestId===g.requestId);if(_===void 0)return;if(se.pendingRequests.delete(_.port),g.decision==="deny")return se.dismissedTargets.set(_.port,mr(_)),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"deny",capabilities:Ke()}),ag(),{instanceId:Ve,ok:!0};se.approvedPorts.add(_.port),se.approvedTargets.set(_.port,mr(_)),w.add(_.port);let C=Ii(_.command);return j(_.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:_.portKind==="commander_bound"}),Go("forward_port_resolved",{instanceId:Ve,requestId:_.requestId,source:"local_editor",port:_.port,pid:_.pid,command:_.command,..._.cwd===void 0?{}:{cwd:_.cwd},decision:"approve",capabilities:Ke()}),ag(),{instanceId:Ve,ok:!0,port:_.port}},Wte=g=>{if(g.process.pid===void 0){n("port_forward.local_editor_watch_skipped",{reason:"editor_pid_missing"});return}se.watcher?.close(),se.watcher=yc({rootPid:g.process.pid,onCandidate:L6,onCandidateLost:Kte,onError:_=>{n("port_forward.local_editor_watch_failed",{message:_.message})}})},ov=g=>{if(g.pendingRequests.size>0||g.queuedCandidates.size===0)return;let _=Array.from(g.queuedCandidates.values()).sort((C,T)=>C.port-T.port)[0];_!==void 0&&(g.queuedCandidates.delete(_.port),j6(g,_).catch(C=>{n("port_forward.claude_code_prompt_failed",{message:C instanceof Error?C.message:String(C)})}))},dg=async(g,_,C,T="wait_for_connection")=>{let $=g.approvedTargets.get(_);g.approvedPorts.delete(_),g.approvedTargets.delete(_),w.delete(_),z(_),await(T==="connected_only"?Se.pushIfConnected:Se.push)(Oe,"forward_port_revoked",{instanceId:Ve,port:_,...$===void 0?{}:{pid:$.pid,command:$.command,...$.cwd===void 0?{}:{cwd:$.cwd}},reason:C,agentProvider:"claude-code",capabilities:Hs(Ke(),_)})},iv=async(g,_)=>{let C=g.currentSourceSeq()??g.rootSeq;if(C===void 0){n("port_forward.claude_code_auto_approval_skipped",{reason:"source_seq_missing",port:_.port,pid:_.pid});return}let T=xc({requestId:`claude-port-forward-auto-${BI()}`,sourceSeq:C,candidate:_});g.approvedPorts.add(T.port),g.approvedTargets.set(T.port,mr(T)),w.add(T.port);let $=Ii(T.command);j(T.port,{kandanThreadId:g.threadId,codexThreadId:g.sessionId,channelSlug:g.channel,processName:$?.appName??null,processIconKey:$?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:T.portKind==="commander_bound"}),await Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:T.requestId,port:T.port,pid:T.pid,command:T.command,...T.cwd===void 0?{}:{cwd:T.cwd},sourceSeq:T.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:Ke()})},j6=async(g,_)=>{let C=hf({candidate:_,threadBound:!0,suppressedPorts:new Set(P()),approvedPorts:g.approvedPorts,approvedTargets:g.approvedTargets,dismissedTargets:g.dismissedTargets,pendingRequests:Array.from(g.pendingRequests.values())});switch(C.type){case"skip":return;case"remember_approved_target":g.approvedTargets.set(C.target.port,C.target);return;case"revoke_and_prompt":await dg(g,C.revoked.port,C.reason),await iv(g,_);return;case"replace_pending":g.pendingRequests.delete(C.expired.requestId),await Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.expired.requestId,port:C.expired.port,pid:C.expired.pid,command:C.expired.command,...C.expired.cwd===void 0?{}:{cwd:C.expired.cwd},sourceSeq:C.expired.sourceSeq,decision:"expired",reason:C.reason,agentProvider:"claude-code",capabilities:Ke()}),await ii(Se,Oe,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:C.expired.sourceSeq,status:"failed",reason:"port_forward_listener_changed",sessionId:g.sessionId}),await iv(g,C.candidate);return;case"prompt":await iv(g,_);return}},Hte=(g,_)=>{let C=g.queuedCandidates.get(_.port);if(C!==void 0&&zr(C,_)){g.queuedCandidates.delete(_.port),g.approvedPorts.has(_.port)&&dg(g,_.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})});return}let T=Array.from(g.pendingRequests.values()).find($=>zr(mr($),_));if(T!==void 0){g.pendingRequests.delete(T.requestId),Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:T.requestId,port:T.port,pid:T.pid,command:T.command,...T.cwd===void 0?{}:{cwd:T.cwd},sourceSeq:T.sourceSeq,decision:"expired",reason:"listener_exited",agentProvider:"claude-code",capabilities:Ke()}).then(()=>ii(Se,Oe,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:T.sourceSeq,status:"failed",reason:"port_forward_listener_exited",sessionId:g.sessionId})).then(()=>ov(g)).catch($=>{n("port_forward.claude_code_expire_failed",{message:$ instanceof Error?$.message:String($)})});return}g.approvedPorts.has(_.port)&&dg(g,_.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})})},Gte=g=>{for(let _ of Ku.values()){let C=_.pendingRequests.get(g.requestId);if(C===void 0)continue;if(_.pendingRequests.delete(g.requestId),g.decision==="deny")return _.dismissedTargets.set(C.port,mr(C)),Promise.all([Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"deny",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:_.workspace,channel:_.channel,threadId:_.threadId,sourceSeq:C.sourceSeq,status:"failed",reason:"port_forward_denied",sessionId:_.sessionId})]).then(()=>ov(_)).catch($=>{n("port_forward.claude_code_deny_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ve,ok:!0,agentProvider:"claude-code"};_.approvedPorts.add(C.port),_.approvedTargets.set(C.port,mr(C)),w.add(C.port);let T=Ii(C.command);return j(C.port,{kandanThreadId:_.threadId,codexThreadId:_.sessionId,channelSlug:_.channel,processName:T?.appName??null,processIconKey:T?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:C.portKind==="commander_bound"}),Promise.all([Se.push(Oe,"forward_port_resolved",{instanceId:Ve,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:_.workspace,channel:_.channel,threadId:_.threadId,sourceSeq:C.sourceSeq,status:"processed",reason:"Claude Code preview port approved",sessionId:_.sessionId})]).then(()=>ov(_)).catch($=>{n("port_forward.claude_code_approve_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ve,ok:!0,agentProvider:"claude-code",port:C.port}}},sv=g=>{if(Ku.has(g.sessionId))return;let _=e.portForwardWatcher??(B=>yc({rootPid:process.pid,commanderBoundPids:[process.pid],commanderBoundPorts:Array.from(k),watchPorts:v,extraWatchPorts:Ay(ud(e.runnerId)),...B})),C={value:void 0},T;try{T=_({onCandidate:B=>C.value===void 0?void 0:j6(C.value,B),onCandidateLost:B=>C.value===void 0?void 0:Hte(C.value,B),onListenersObserved:B=>_g(`claude-session:${g.sessionId}`,B.filter(be=>be.portKind!=="commander_bound")),onError:B=>{n("port_forward.claude_code_watch_failed",{message:B.message,claude_session_id:g.sessionId})}})}catch(B){n("port_forward.claude_code_watch_skipped",{reason:"watch_start_failed",message:B instanceof Error?B.message:String(B),claude_session_id:g.sessionId});return}n("port_forward.claude_code_watch_started",{claude_session_id:g.sessionId,root_pid:e.portForwardWatcher===void 0?process.pid:null,injected:e.portForwardWatcher!==void 0});let $={...g,watcher:T,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};C.value=$,Ku.set(g.sessionId,$)},ug=async(g,_="wait_for_connection")=>{let C=Ku.get(g);if(C===void 0)return;let T=Array.from(C.pendingRequests.values()),$=Array.from(C.approvedPorts);C.watcher.close(),C.pendingRequests.clear(),C.queuedCandidates.clear(),C.dismissedTargets.clear(),Ku.delete(g),await Promise.all([...T.map(async B=>{try{let be=_==="connected_only"?Se.pushIfConnected:Se.push;await Promise.all([be(Oe,"forward_port_resolved",{instanceId:Ve,requestId:B.requestId,port:B.port,pid:B.pid,command:B.command,...B.cwd===void 0?{}:{cwd:B.cwd},sourceSeq:B.sourceSeq,decision:"expired",reason:"session_ended",agentProvider:"claude-code",capabilities:Ke()}),ii(Se,Oe,{workspace:C.workspace,channel:C.channel,threadId:C.threadId,sourceSeq:B.sourceSeq,status:"failed",reason:"port_forward_session_ended",sessionId:C.sessionId,publishMode:_})])}catch(be){n("port_forward.claude_code_dispose_prompt_failed",{message:be instanceof Error?be.message:String(be)})}}),...$.map(async B=>{try{await dg(C,B,"session_ended",_)}catch(be){n("port_forward.claude_code_dispose_revoke_failed",{message:be instanceof Error?be.message:String(be)})}})])},Zte=(g,_,C)=>{let T=()=>{if(ie.value!==_||U.value.status!=="running"||U.value.process!==g.process)return;U.value={status:"disabled"};let B=O6("editor_exited");w.delete(g.port),k.delete(g.port),g.collaboration!==void 0&&(w.delete(g.collaboration.serverPort),k.delete(g.collaboration.serverPort)),Ho({instanceId:Ve,ok:!0,cwd:g.cwd,capabilities:{...Ke(),revokedPorts:g.collaboration===void 0?[g.port,...B]:[g.port,g.collaboration.serverPort,...B]}})},$=()=>{C.then(T).catch(B=>{n("kandan.local_editor_initial_status_failed",{message:B instanceof Error?B.message:String(B)})})};g.exited.then($)},Qt=s?.codex??(io===void 0?void 0:await Kf(io));if(Qt!==void 0&&t.actions.push(()=>Qt.close()),e.channelSession!==void 0&&Qt===void 0)throw new Error("channel session requires a Codex app-server connection");let F6=eEe({codexUrl:e.codexUrl,threadProcessRole:e.threadProcess?.role,ownsStartedAppServer:Or!==void 0}),av={value:0},z6={value:[]},Uu=Im(e),Qte={instanceId:Ve,clientId:ig,...io===void 0?{}:{codexUrl:io},tuiLaunched:e.launchTui,cwd:e.cwd,hostname:ro,codexThreads:z6.value,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,model:Uu.model??null,reasoningEffort:Uu.reasoningEffort??null,allowPortForwardingByDefault:Uu.allowPortForwardingByDefault??null,fast:e.fast??!1};await Se.push(Oe,"instance_started",Qte),n("runner.instance_started",{runnerId:e.runnerId,hostname:ro,workspace:Ur(e)??null,version:jt,instanceId:Ve,codexUrl:io??null,replacedRunners:oo});let q6=Ur(e),N6={...q6===void 0?{}:{workspace:q6},launch_source:e.launchSource??"cli"};ul({name:"commander.connected",attributes:N6},{apiUrl:e.kandanUrl}),t.actions.push(()=>ul({name:"commander.exited",attributes:N6},{apiUrl:e.kandanUrl}));let Xt=e.channelSession===void 0||Qt===void 0?void 0:await kf({kandan:Se,codex:Qt,topic:Oe,instanceId:Ve,leaseEpochFor:g=>ne.current(g),escalateEngineHalt:Or===void 0?void 0:()=>{Or.stop()},options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:e.cwd,codexBin:e.codexBin,fetch:e.fetch,fast:e.fast,launchTui:e.launchTui,pipelinePersistDir:ym(),enablePortForwardWatch:!0,initialForwardPorts:v,portForwardWatcher:dK({rootPid:Or?.process.pid,start:e.portForwardWatcher}),suppressedForwardPorts:P,onForwardPortApproved:(g,_)=>(w.add(g),j(g,{..._,agentProvider:"codex"}),Ke()),onForwardPortRevoked:g=>(w.delete(g),z(g),Ke()),onUnroutedThreadMessage:g=>G6(g),onLiveSourceSeqAccepted:$r,onLiveSourceSeqSettled:qa,channelSession:e.channelSession},log:n});Xt!==void 0&&(t.actions.push(()=>Xt.close()),Se.onReconnect(()=>Xt.handleKandanReconnect()));let Yt=new Map,Sp=new Map,Ka=new Map,Xte=(g,_)=>{let C=Ka.get(g);if(C!==void 0){Ka.delete(g);for(let T of C)T.resolve(_)}},cg=(g,_)=>{let C=Ka.get(g);if(C!==void 0){Ka.delete(g);for(let T of C)T.reject(_)}},as=Dq(),Yte=new Set(["kandan.reconnect_thread_resume_failed","kandan.reconnect_thread_rehydrate_forced","kandan.reconnect_thread_rehydration_ir_emitted","kandan.reconnect_thread_rehydration_failed","kandan.reconnect_thread_rehydrated","kandan.reconnect_thread_unarchive_started","kandan.reconnect_thread_unarchive_resumed","kandan.reconnect_thread_unarchive_failed"]),ere=(g,_)=>{if(!Yte.has(g))return;let C=_.codex_thread_id;typeof C=="string"&&C!==""&&as.note(C,g)},nre=g=>()=>Mq(cT(),g),dv=Object.assign((g,_)=>{ere(g,_),n(g,_)},{close:()=>n.close()}),uv=g=>Aq({method:"thread/attach",codexThreadId:g.codexThreadId,kandanThreadId:g.kandanThreadId,wait:g.wait,tracker:as,log:n,rolloutBytes:nre(g.codexThreadId),noProgressTimeoutMs:Wy()}),ds=new Map,Bu=new Map,U6=[],cv=g=>{let _=Bu.get(g);if(_!==void 0)return _;let C=sEe({sessions:()=>[...g===Qt&&Xt!==void 0?[Xt]:[],...Array.from(Yt.entries()).filter(([T])=>ds.get(T)===g).map(([,T])=>T)],log:n,onActiveThreadsFailed:F6?T=>{for(let $ of T)U6.push(Se.push(Oe,"session:app_server_lost",{codex_thread_id:$}).then(()=>{},B=>{n("kandan.session_app_server_lost_push_failed",{codex_thread_id:$,message:B instanceof Error?B.message:String(B)})}))}:void 0});return Bu.set(g,C),C},Lr=new Map,lv=new Map,B6={record:(g,_)=>{let C=lv.get(g),T={approvalPolicy:_.approvalPolicy??C?.approvalPolicy,sandbox:_.sandbox??C?.sandbox};T.approvalPolicy===void 0&&T.sandbox===void 0||lv.set(g,T)},resolve:g=>lv.get(g)},kp=new Map,Ju=new Map,Ku=new Map;Se.onReconnect(()=>SEe(Yt.values())),Se.onDisconnect?.(()=>{for(let g of Lr.values())g.pauseOutbox()}),Se.onReconnect(()=>{for(let[g,_]of Lr)n("claude_code.outbox_resumed_on_reconnect",{claude_session_id:g,linzumi_thread_id:_.threadId}),_.resumeOutbox()}),o.interruptInFlightTurns=async()=>{let g=[...Lr.entries()].flatMap(([C,T])=>{let $=T.currentSourceSeq();return $===void 0?[]:[{sessionId:C,session:T,sourceSeq:$}]});if(g.length===0)return;let _=new Promise(C=>{setTimeout(C,yEe).unref?.()});await Promise.race([Promise.all(g.map(async({sessionId:C,session:T,sourceSeq:$})=>{n("runner.drain_turn_interrupted_state",{claude_session_id:C,linzumi_thread_id:T.threadId,source_seq:$});try{await ii(Se,Oe,{workspace:T.workspace,channel:T.channel,threadId:T.threadId,sourceSeq:$,status:"interrupted",reason:gEe,sessionId:C})}catch(B){n("runner.drain_turn_interrupted_state_push_failed",{linzumi_thread_id:T.threadId,source_seq:$,message:B instanceof Error?B.message:String(B)})}})).then(()=>{}),_])};let J6=async()=>{let g=Cq(Ge.list(),Date.now());if(g.length!==0)try{await Se.push(Oe,"session:reannounce_threads",{threads:g.map(_=>({..._}))}),n("kandan.thread_sessions_reannounced",{count:g.length})}catch(_){n("kandan.thread_sessions_reannounce_failed",{count:g.length,message:_ instanceof Error?_.message:String(_)})}};Se.onReconnect(()=>J6()),J6(),t.actions.push(async()=>{await Promise.all(Array.from(Yt.values(),_=>_.close())),Yt.clear(),ds.clear(),Ka.clear();let g=[...Lr.values()];for(let _ of g)try{_.closeInput()}catch(C){n("claude_code.session_input_close_failed",{linzumi_thread_id:_.threadId,message:C instanceof Error?C.message:String(C)})}await Promise.race([Promise.allSettled(g.flatMap(_=>{let C=_.sessionWork();return C===void 0?[]:[C]})),new Promise(_=>{setTimeout(_,1e4).unref?.()})]);for(let _ of g)_.abortController.abort(new Error("local runner stopped"));Lr.clear();for(let _ of kp.values())_.resolve({type:"deny",message:"Claude Code approval cancelled because the runner stopped"});kp.clear();for(let _ of Ju.values())_.resolve({type:"deny",message:"Claude Code question cancelled because the runner stopped"});Ju.clear(),await Promise.all(Array.from(Ku.keys(),_=>ug(_,"connected_only")))});let xt=new Map;t.actions.push(async()=>{await Promise.all(Array.from(xt.values(),oR)),xt.clear()});let tre=()=>{for(let[g,_]of Array.from(xt.entries()))Q_(_)==="dead"&&xt.get(g)===_&&(xt.delete(g),n("runner.thread_process_stale_entry_reaped",{kandanThreadId:g,pid:_.kind==="running"?_.handle.processPid??null:null,prior_kind:_.kind}),oR(_).catch(()=>{}))};if(_m(e)){let g=e.threadRunnerReaperIntervalMs??dRe,_=setInterval(tre,g);_.unref?.(),t.actions.push(()=>clearInterval(_))}let pv=new Map,rre=B7(),fv=async(g,_)=>{let C=Yt.get(g),T=ds.get(g);if(C===void 0||_!==void 0&&T!==_||T?.isClosed?.()!==!0)return!1;Yt.delete(g),ds.delete(g),Sp.delete(g),n("runner.thread_session_evicted_dead_worker",{codex_thread_id:g,kandan_thread_id:C.currentKandanThreadId()??null});try{await C.close()}catch($){n("runner.thread_session_evict_close_failed",{codex_thread_id:g,message:$ instanceof Error?$.message:String($)})}return!0},mv=async(g,_={})=>{let C=Yt.get(g);if(C!==void 0)return C;let T=Sp.get(g);if(T!==void 0){let B=await T;if(B!==void 0)return B}let $=Yt.get(g);return $!==void 0||_.waitForSiblingSpawn!==!0?$:await new Promise((B,be)=>{let tn=Ka.get(g)??[];tn.push({resolve:B,reject:be}),Ka.set(g,tn)})},K6=async g=>{let{control:_,cwd:C,codexThreadId:T,sessionCodex:$}=g,B=g.portForwardWatcherRootPid,be=ln(_,"workspace"),tn=ln(_,"channel"),Ye=ln(_,"threadId");if(be===void 0||tn===void 0||Ye===void 0)return;let Cn=Yt.get(T);if(Cn!==void 0){let tt=Cn.currentKandanThreadId();if(tt!==void 0&&tt!==Ye)throw new md({codexThreadId:T,ownerKandanThreadId:tt,requestingKandanThreadId:Ye});if(!await fv(T))return Cn}let cr=Ge.list().find(tt=>tt.codexThreadId===T&&tt.kandanThreadId!==Ye);if(cr!==void 0)throw new md({codexThreadId:T,ownerKandanThreadId:cr.kandanThreadId,requestingKandanThreadId:Ye});let An=Sp.get(T);if(An!==void 0)return await An;let bi=(async()=>{as.note(T,"attach_started");let tt=e.channelSession?.listenUser??_o(e.token).actorUsername;if(tt===void 0)throw new Error("missing listen user for Commander-started Codex session");let qn=_l(e,_),er=_m(e)?async Ne=>rre.run(Ne.kandanThreadId,async()=>{await fv(Ne.codexThreadId);let Ln=!1,rt=pv.get(Ne.kandanThreadId)??(_.modelProvider!==void 0||_.llmProxy!==void 0||_.linzumiAgent!==void 0?{..._.modelProvider===void 0?{}:{modelProvider:_.modelProvider},..._.llmProxy===void 0?{}:{llmProxy:_.llmProxy},..._.linzumiAgent===void 0?{}:{linzumiAgent:_.linzumiAgent}}:void 0),Zo=Y(_.rootSeq);for(let _t of Ne.pendingMessages){let Vu={type:"reconnect_thread",workspace:be,channel:tn,threadId:Ne.kandanThreadId,codexThreadId:Ne.codexThreadId,cwd:C,..._.linzumiContext===void 0?{}:{linzumiContext:_.linzumiContext},..._.type==="reconnect_thread"&&_.sessionRehydrate===!0?{sessionRehydrate:!0}:{},...Zo===void 0?{}:{rootSeq:Zo},...rt?.modelProvider===void 0?{}:{modelProvider:rt.modelProvider},...rt?.llmProxy===void 0?{}:{llmProxy:rt.llmProxy},...rt?.linzumiAgent===void 0?{}:{linzumiAgent:rt.linzumiAgent},sourceSeq:_t.seq,workDescription:_t.body,...qn.model===void 0?{}:{model:qn.model},...qn.reasoningEffort===void 0?{}:{reasoningEffort:qn.reasoningEffort},...qn.sandbox===void 0?{}:{sandbox:qn.sandbox},...qn.approvalPolicy===void 0?{}:{approvalPolicy:qn.approvalPolicy},...qn.fast===void 0?{}:{fast:qn.fast}},d$=async Ha=>{let u$=await uv({codexThreadId:Ne.codexThreadId,kandanThreadId:Ne.kandanThreadId,wait:mv(Ne.codexThreadId,{waitForSiblingSpawn:Ha.waitForSiblingSpawn})});if(u$===void 0)throw new Error(`dead-worker rebuild could not resolve a live session for codex thread ${Ne.codexThreadId}`);await u$.startThreadMessageTurn({seq:_t.seq,body:_t.body,actorSlug:_t.actorSlug,actorUserId:_t.actorUserId,boundStartTimeout:!0})};try{if(Ln)await d$({waitForSiblingSpawn:!1});else{let Ha=await gv(Vu,C);GI(Ha)&&(n("runner.thread_dead_worker_rebuild_replay_on_sibling",{codex_thread_id:Ne.codexThreadId,kandan_thread_id:Ne.kandanThreadId,seq:_t.seq}),await d$({waitForSiblingSpawn:!0}))}Ln=!0}catch(Ha){return n("runner.thread_dead_worker_rebuild_failed",{codex_thread_id:Ne.codexThreadId,kandan_thread_id:Ne.kandanThreadId,seq:_t.seq,message:Ha instanceof Error?Ha.message:String(Ha)}),!1}}return Ln}):void 0,Nn=tf()&&m().includes("claude-code")?{targetHarness:"claude_code",execute:async Ne=>{let Ln;try{Ln=await import(new URL("./crossHarnessFailover.mjs",import.meta.url).href)}catch(_t){return{ok:!1,failure:`failover transpiler bridge unavailable: ${_t instanceof Error?_t.message:String(_t)}`}}let rt=await Ln.transpileAndSeedClaudeSession({activity:Ne.activity,codexThreadId:Ne.codexThreadId??"unknown-codex-session",kandanThreadId:Ne.kandanThreadId,cwd:C});if(!rt.ok)return{ok:!1,failure:rt.failure};n("runner.cross_harness_failover_seeded",{kandan_thread_id:Ne.kandanThreadId,source_session_id:Ne.codexThreadId??null,target_session_id:rt.targetSessionId,session_file:rt.sessionFile,transpiled_item_count:rt.transpiledItemCount,redacted_reasoning_count:rt.redactedReasoningCount});let Zo={type:"reconnect_thread",agentProvider:"claude-code",workspace:be,channel:tn,threadId:Ne.kandanThreadId,codexThreadId:rt.targetSessionId,cwd:C,sourceSeq:Ne.message.seq,workDescription:Ne.message.body,...Ne.model===void 0?{}:{model:Ne.model}};try{let _t=await QI(void 0,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,Zo,dv,a,void 0,void 0,void 0,Vu=>ne.current(Vu),$r,Na,Wo,void 0,e$,B6);if(_t.ok===!1)return{ok:!1,failure:`claude dispatch refused: ${JSON.stringify(_t).slice(0,300)}`}}catch(_t){return{ok:!1,failure:`claude dispatch failed: ${_t instanceof Error?_t.message:String(_t)}`}}return{ok:!0,transpiledItemCount:rt.transpiledItemCount,redactedReasoningCount:rt.redactedReasoningCount,targetSessionId:rt.targetSessionId}}}:void 0,lr=_.linzumiAgent?.mcpToken??e.linzumiAgentMcpToken,wi=r0(_),pr=wi.type==="provider"?wi.runtime:void 0,us=BEe({env:process.env,kandanUrl:e.kandanUrl,workspaceSlug:be,linzumiAgentMcpToken:lr,ownerUsername:c0(e),modelProviderRuntime:pr}),Wa=await kf({kandan:Se,codex:$,topic:Oe,instanceId:Ve,leaseEpochFor:Ne=>ne.current(Ne),options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:C,codexBin:e.codexBin,mcpAvailable:!la(e)||hR(e),devServicesAvailable:!la(e),fetch:e.fetch,fast:_.fast??e.fast,launchTui:!1,rebuildOnDeadCodexWorker:er,crossHarnessFailover:Nn,onUnroutedThreadMessage:Ne=>G6(Ne),onCodexThreadRebound:({kandanThreadId:Ne,oldCodexThreadId:Ln,newCodexThreadId:rt})=>{if(Ln!==void 0&&Ln!==rt){let _t=Yt.get(Ln),Vu=ds.get(Ln);_t!==void 0&&(Yt.delete(Ln),Yt.set(rt,_t)),Vu!==void 0&&(ds.delete(Ln),ds.set(rt,Vu)),as.clear(Ln)}let Zo=Ge.rebindCodexThread(Ne,rt);n("runner.codex_thread_rebind_propagated",{kandan_thread_id:Ne,old_codex_thread_id:Ln??null,new_codex_thread_id:rt,registry_outcome:Zo.outcome})},onLiveSourceSeqAccepted:$r,onLiveSourceSeqSettled:qa,...us===void 0?{}:{cloudAgentTurn:us},pipelinePersistDir:ym(),enablePortForwardWatch:!0,initialForwardPorts:v,portForwardWatcher:dK({rootPid:B,start:e.portForwardWatcher,commanderBoundPids:g.commanderBoundPids,commanderBoundPorts:g.commanderBoundPorts}),suppressedForwardPorts:P,onForwardPortApproved:(Ne,Ln)=>(w.add(Ne),j(Ne,{...Ln,agentProvider:"codex"}),Ke()),onForwardPortRevoked:Ne=>(w.delete(Ne),z(Ne),Ke()),channelSession:{workspaceSlug:be,channelSlug:tn,kandanThreadId:Ye,rootSeq:Y(_.rootSeq),codexThreadId:T,linzumiContext:_.linzumiContext,listenUser:tt,linzumiAgentSession:_.linzumiAgent!==void 0||e.threadProcess?.role==="thread"&&e.linzumiAgentMcpToken!==void 0,modelProvider:qn.modelProvider,model:qn.model,reasoningEffort:qn.reasoningEffort,sandbox:qn.sandbox,approvalPolicy:qn.approvalPolicy,sandboxedApprovalNeverDefault:qn.sandboxedApprovalNeverDefault,allowPortForwardingByDefault:qn.allowPortForwardingByDefault}},log:n});return Yt.set(T,Wa),ds.set(T,$),as.note(T,"attached"),Xte(T,Wa),Ge.upsert({workspace:be,channel:tn,kandanThreadId:Ye,codexThreadId:T,cwd:C,agentProvider:"codex",control:AK({workspaceSlug:be,channelSlug:tn,kandanThreadId:Ye,codexThreadId:T,cwd:C,rootSeq:Y(_.rootSeq),runtimeSettings:qn}),updatedAtMs:Date.now()}),$!==Qt&&$.onNotification(Ne=>{av.value+=1;let Ln=Ne.params??{};n("codex.notification",LP(Ne.method,Ln)),cv($).observeNotification(Ne.method,Ln),Y_(Wa,Ne.method,Ln,n)}),Wa})();Sp.set(T,bi);try{let tt=await bi;return tt===void 0&&cg(T,new Error(`attach for codex thread ${T} resolved without a live session`)),tt}catch(tt){let qn=tt instanceof Error?tt.message:String(tt);throw as.fail(T,qn),cg(T,tt instanceof Error?tt:new Error(qn)),tt}finally{Sp.delete(T)}},hv=async(g,_,C)=>{if(Qt===void 0)throw new Error("cannot attach a thread session without a codex app-server connection");return await K6({control:g,cwd:_,codexThreadId:C,sessionCodex:Qt,portForwardWatcherRootPid:Or?.process.pid})},V6=g=>{let _=yt(g.channel,g.kandanThreadId),C=Ss(On(),g.channel,g.kandanThreadId),T=In.initial(C),$=le.get(g.kandanThreadId)??[],B=hm(T,$)??T,be="";try{be=pa(ac(ym(),Cf({workspaceSlug:g.workspace,channelSlug:g.channel},g.kandanThreadId,Ve)),"utf8")}catch{}return{pendingInboundSeqs:_.entries().map(tn=>tn.sourceSeq),ackedInboundSeqs:_.ackedEntries().map(tn=>tn.sourceSeq),inboundHighWaterSeq:_.highWaterSourceSeq(),appliedFloorSeq:B,outboxTurnSignals:KB(be)}},ore=g=>{try{return $I(V6(g),{nowMs:Date.now()}).unfinished}catch(_){return n("runner.resume_scan_inspect_failed",{thread_id:g.kandanThreadId,phase:"rehydration_retire_guard",message:_ instanceof Error?_.message:String(_)}),!0}},W6=(async()=>{let g=Ge.list();if(g.length===0)return;let _=await kq({records:g,nowMs:Date.now(),maxAgeMs:Qk,pendingDurableRowCount:C=>ny(ac(ym(),Cf({workspaceSlug:C.workspace,channelSlug:C.channel},C.kandanThreadId,Ve)),n).pendingEntries.length,hasUnfinishedWork:ore,attach:async C=>{if(t.closePromise!==void 0)return n("session_registry.rehydrate_aborted_shutdown",{thread_id:C.kandanThreadId}),"failed";let T=qr(C.cwd,te.value);return T.ok?await hv(pl(C),T.cwd,C.codexThreadId)!==void 0?"attached":"failed":(n("session_registry.rehydrate_cwd_rejected",{thread_id:C.kandanThreadId,cwd:C.cwd,reason:T.reason}),"retire")},retire:C=>Ge.remove(C.kandanThreadId),log:n});n("session_registry.rehydrate_complete",{records:g.length,rehydrated:_.rehydrated,retired_drained:_.retiredDrained,retired_stale:_.retiredStale,retired_unattachable:_.retiredUnattachable,kept_unfinished:_.keptUnfinished,failed:_.failed})})().catch(g=>{n("session_registry.rehydrate_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>W6);let gv=async(g,_)=>{if(e.threadProcess?.role==="thread")return;let C=wm(g);if(C.type!=="ok"||C.provider!=="codex")return;let T=ln(g,"workspace"),$=ln(g,"channel"),B=ln(g,"threadId");if(T===void 0||$===void 0||B===void 0)return;let be=r0(g);(g.modelProvider!==void 0||g.llmProxy!==void 0||g.linzumiAgent!==void 0)&&pv.set(B,{...g.modelProvider===void 0?{}:{modelProvider:g.modelProvider},...g.llmProxy===void 0?{}:{llmProxy:g.llmProxy},...g.linzumiAgent===void 0?{}:{linzumiAgent:g.linzumiAgent}});let tn=PK(be);if(tn!==void 0)return{instanceId:Ve,controlType:g.type,ok:!1,error:tn,kandanThreadId:B,cwd:_};let Ye=xt.get(B);if(Ye!==void 0){if(Q_(Ye)!=="dead")return{instanceId:Ve,controlType:g.type,ok:!0,delegated:!0,threadProcess:"already_started",kandanThreadId:B,cwd:_};n("runner.thread_process_stale_entry_evicted",{kandanThreadId:B,codex_thread_id:g.type==="reconnect_thread"?h(g.codexThreadId)??null:null,prior_kind:Ye.kind,pid:Ye.kind==="running"?Ye.handle.processPid??null:null,control_type:g.type}),xt.get(B)===Ye&&xt.delete(B),oR(Ye).catch(()=>{})}let Cn=BK(e.allowedCwds);Cn.missing.length>0&&n("runner.stale_allowed_cwd_roots_pruned",{kandanThreadId:B,control_type:g.type,pruned_roots:Cn.missing,remaining_root_count:Cn.existing.length}),L("thread_process_spawn",{kandanThreadId:B})&&Us();let cr=CN($e,_);if(cr!==void 0)throw n("runner.cwd_stillbirth_circuit_open_start_refused",{kandanThreadId:B,cwd:_,control_type:g.type,consecutive_stillbirths:cr.count,last_stillbirth_at:cr.lastAt}),new Error(EN(_,cr));let An=e.spawnThreadRunner??F2e,bi=FK(e);n("runner.thread_process_starting",{kandanThreadId:B,cwd:_,readyTimeoutMs:bi});let tt=k2e({options:Cn.missing.length>0?{...e,allowedCwds:Cn.existing}:e,control:g,cwd:_,workspaceSlug:T,channelSlug:$,kandanThreadId:B});if(la(tt)){let Nn=await ae(),lr=CRe(e.runnerId),wi=await T1e({dependencyStatusRef:c,connectTimeStatus:e.dependencyStatus,machineVmUnready:Nn!==void 0&&!Nn.ready,cwd:_});wi.confirmation!=="not_needed"&&n("runner.vm_preflight_host_codex_reverified",{kandanThreadId:B,confirmed_available:wi.hostCodexAvailable,probe_failure:wi.probedCodex?.failure??null,probe_detail:wi.probedCodex?.failureDetail??null});let pr=k1e({vmRouted:!0,readiness:Nn,hostCodexAvailable:wi.hostCodexAvailable,hostCodexProbeDetail:wi.probedCodex?.failureDetail,explicitLocalVmOptIn:tt.executionMode==="local_vm",freshStart:g.type==="start_instance",lastNoticedReadinessFingerprint:TRe(lr,n)});if(pr.route==="vm"&&Nn?.ready===!0&&BJ(lr,void 0,n),pr.route==="host_fallback"){if(tt={...tt,executionMode:"raw"},n("runner.local_vm_unready_host_fallback",{kandanThreadId:B,control_type:g.type,blockers:[...pr.blockers],notice_posted:pr.postThreadNotice,readiness_fingerprint:pr.readinessFingerprint}),pr.postThreadNotice)try{await Se.push(Oe,"session:post_thread_message",{workspace:T,channel:$,thread_id:B,body:pr.notice,client_message_id:`local-vm-host-fallback-${B}`,payload:{metadata:{local_codex_runner:{event_type:"local_vm_host_fallback_notice"}}}}),BJ(lr,pr.readinessFingerprint,n)}catch(us){n("runner.local_vm_unready_notice_post_failed",{kandanThreadId:B,message:us instanceof Error?us.message:String(us)})}}else if(pr.route==="fail_loud")throw n("runner.local_vm_unready_start_refused",{kandanThreadId:B,control_type:g.type,blockers:[...pr.blockers]}),new Error(pr.reason)}let qn={kind:"starting",promise:K2e(An(tt),{kandanThreadId:B,timeoutMs:bi})};xt.set(B,qn);let er;try{er=await qn.promise}catch(Nn){if(xt.get(B)===qn&&xt.delete(B),n("runner.thread_process_start_failed",{kandanThreadId:B,cwd:_,message:Nn instanceof Error?Nn.message:String(Nn)}),L("thread_process_start_failed",{kandanThreadId:B})&&Us(),lK(Nn)){let lr=SN($e,_,Nn,Date.now());n("runner.cwd_stillbirth_recorded",{kandanThreadId:B,cwd:_,consecutive_stillbirths:lr.count,circuit_open:lr.tripped})}throw Nn}kN($e,_)&&n("runner.cwd_stillbirth_counter_cleared",{kandanThreadId:B,cwd:_});for(let Nn of er.commanderManagedPorts??[])M(Nn.port,{processName:Nn.processName,processIconKey:Nn.processIconKey,agentProvider:Nn.agentProvider});try{let Nn=er.codex,lr=l0(()=>Nn.close());er.onExit?.(lr),er.onExit?.(()=>{t.closePromise===void 0&&cv(Nn).failActiveTurns("codex thread worker exited")}),er.onExit?.(()=>{wt.clearThread(Ss(On(),$,B))});let pr={kind:"running",handle:{...er,close:async()=>{lr(),await er.close()}}};xt.get(B)===qn&&xt.set(B,pr),er.onExit?.(()=>{xt.get(B)===pr&&xt.delete(B)}),er.onExit?.(()=>{if(t.closePromise===void 0)for(let[Ne,Ln]of Array.from(ds.entries()))Ln===Nn&&fv(Ne,Nn)}),n("runner.thread_process_started",{kandanThreadId:B,cwd:_});let us=(Ne,Ln,rt)=>K6({control:Ne,cwd:Ln,codexThreadId:rt,sessionCodex:Nn,portForwardWatcherRootPid:er.processPid,commanderBoundPids:(er.commanderManagedPorts??[]).flatMap(Zo=>Zo.pid===void 0?[]:[Zo.pid]),commanderBoundPorts:(er.commanderManagedPorts??[]).map(Zo=>Zo.port)}),Wa=async Ne=>{if(Ne!==void 0&&Ne.ok!==!1)return Ne;let Ln=xt.get(B);return(Ln===qn||Ln?.kind==="running")&&xt.delete(B),await(Ln?.kind==="running"?Ln.handle.close():er.close()).catch(()=>{}),Ne};switch(g.type){case"start_instance":{let Ne=await RK({codex:Nn,kandan:Se,topic:Oe,control:g,options:e,instanceId:Ve,cwd:_,matchedRoot:_,onStartedThread:us,setStartupStage:()=>{},setStartedCodexThreadId:()=>{}});return await Wa(Ne.controlResponse)}case"reconnect_thread":return await Wa(await QI(Nn,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,g,dv,a,us,void 0,void 0,Ne=>ne.current(Ne),$r,Na,Wo,xi))}}catch(Nn){let lr=xt.get(B);throw(lr===qn||lr?.kind==="running")&&xt.delete(B),await(lr?.kind==="running"?lr.handle.close():er.close()).catch(()=>{}),Nn}},Cp=new Map,yv=new Map,H6=async(g,_,C)=>{try{n("runner.spawn_on_miss_replay_on_sibling",{kandanThreadId:g.threadId??null,codex_thread_id:_.codexThreadId,seq:g.seq});let T=await uv({codexThreadId:_.codexThreadId,kandanThreadId:g.threadId,wait:mv(_.codexThreadId,{waitForSiblingSpawn:!0})});if(T===void 0)throw new Error(`spawn-on-miss could not resolve a live session for codex thread ${_.codexThreadId}`);let $=T.currentKandanThreadId();if(g.threadId!==void 0&&$!==void 0&&$!==g.threadId)throw new md({codexThreadId:_.codexThreadId,ownerKandanThreadId:$,requestingKandanThreadId:g.threadId});return await T.startThreadMessageTurn({seq:g.seq,body:g.body,actorSlug:g.actorSlug,actorUserId:g.actorUserId,attachments:g.attachments,boundStartTimeout:!0}),"dispatched"}catch(T){return n("runner.spawn_on_miss_failed",{kandanThreadId:g.threadId??null,codex_thread_id:_.codexThreadId,seq:g.seq,message:T instanceof Error?T.message:String(T)}),await Ns(C,"failed",`could not resume the thread's coding session: ${T instanceof Error?T.message:String(T)}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}},G6=async g=>{let _=g.threadId;if(!_m(e)||_===void 0)return"ignored";let C=`${_}:${g.seq}`,T=yv.get(C);if(T!==void 0){let B=await T;return B==="spawned"?"spawned_deduped":B}let $=ire(g,_);yv.set(C,$);try{return await $}finally{yv.delete(C)}},ire=async(g,_)=>{let C=xt.get(_);if((C===void 0?void 0:Q_(C))==="live")return"ignored";let $=Ge.list().find(Cn=>Cn.kandanThreadId===_);if($===void 0){let Cn=Vo();if(Cn===void 0||!zn())return"ignored";let An=yt(Cn,_).enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Qu(g),Date.now());return n("runner.spawn_on_miss_enqueued_without_local_record",{kandanThreadId:_,channel:Cn,seq:g.seq,enqueued:An.accepted}),await fre(Cn,g),"spawned"}let B=$.channel,be=Ss(On(),B,_),tn=yt(B,_);if(!zn()){let Cn=tn.enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Qu(g),Date.now());return n("runner.spawn_on_miss_drain_in_progress",{kandanThreadId:_,seq:g.seq,enqueued:Cn.accepted}),"spawned"}return await MJ({queue:tn,store:In,lock:N,leases:ne,threadId:_,watermarkKey:be,sourceSeq:g.seq,kind:g.localRunnerEventType===void 0?"live":"replay",payload:Qu(g),leaseEpoch:IJ(g),dispatch:async(Cn,cr)=>{let An=Zv(cr);return An===void 0?(n("runner.spawn_on_miss_bad_payload",{kandanThreadId:_,seq:Cn}),"permanent_failed"):await n$(An,$)},serverRows:le.get(_)??[],onDeadLetter:r$($),inFlightGuard:wt,log:n})==="ignored"?"ignored":"spawned"},lg=async(g,_=[])=>{if(!zn())return;let C=g.kandanThreadId,T=g.channel,$=Ss(On(),T,C),B=yt(T,C);await AJ({queue:B,store:In,lock:N,threadId:C,watermarkKey:$,serverRows:_,log:n,onlyDispatchUnattempted:_.length===0,onDeadLetter:r$(g),inFlightGuard:wt,onTornTailUnrecoverable:async be=>{let tn=pl(g);await Ns(tn,"failed","a message may have been lost during an unexpected shutdown (power loss). Please resend your last message to continue this job.",g.codexThreadId,{failureClass:"resume_torn_tail"}),n("runner.inbound_torn_tail_resend_published",{kandanThreadId:be})},dispatch:async(be,tn)=>{let Ye=Zv(tn);return Ye===void 0?(n("runner.inbound_drain_bad_payload",{kandanThreadId:C,seq:be}),"permanent_failed"):await n$(Ye,g)}})},sre=async(g,_)=>{if(_!==void 0&&_.ok===!1||!zn())return;let C=Ge.list().find($=>$.kandanThreadId===g);if(C===void 0)return;let T=yt(C.channel,g);T.entries().length!==0&&(n("runner.inbound_drain_after_spawn",{kandanThreadId:g,channel:C.channel,pending:T.entries().length}),await lg(C,le.get(g)??[]).catch($=>{n("runner.inbound_drain_after_spawn_failed",{kandanThreadId:g,message:$ instanceof Error?$.message:String($)})}))},are=async(g,_)=>{let C=await gv(g,_),T=ln(g,"threadId");return T!==void 0&&await sre(T,C),g.type==="reconnect_thread"&&GI(C)&&C!==void 0?await dre(g,C):C},dre=async(g,_)=>{let C=co(g.workDescription),T=Y(g.sourceSeq)??Y(g.rootSeq),$=ln(g,"threadId"),B=ln(g,"channel"),be=h(g.codexThreadId);if(C===void 0||T===void 0||$===void 0||be===void 0)return _;if(B===void 0)n("runner.reconnect_follow_up_missing_channel",{kandanThreadId:$,codex_thread_id:be,source_seq:T});else if(xi({channel:B,threadId:$,sourceSeq:T}))return n("runner.reconnect_follow_up_already_applied",{kandanThreadId:$,codex_thread_id:be,source_seq:T}),{..._,followUp:"duplicate",sourceSeq:T};try{let tn=await uv({codexThreadId:be,kandanThreadId:$,wait:mv(be,{waitForSiblingSpawn:!0})});if(tn===void 0)throw new Error(`no live session attached for codex thread ${be}`);let Ye=tn.currentKandanThreadId();if(Ye!==void 0&&Ye!==$)throw new md({codexThreadId:be,ownerKandanThreadId:Ye,requestingKandanThreadId:$});let Cn=_o(e.token),cr=await tn.startThreadMessageTurn({seq:T,body:C,actorSlug:Cn.actorUsername,actorUserId:Cn.actorUserId,attachments:Qo(qe(g.attachments)??[]),boundStartTimeout:!0,dedupBySeq:!0});return n("runner.reconnect_follow_up_routed_to_live_worker",{kandanThreadId:$,codex_thread_id:be,source_seq:T,outcome:cr}),{..._,followUp:cr,sourceSeq:T}}catch(tn){let Ye=tn instanceof Error?tn.message:String(tn);return n("runner.reconnect_follow_up_route_failed",{kandanThreadId:$,codex_thread_id:be,source_seq:T,message:Ye}),{..._,followUp:"route_failed",followUpError:Ye,sourceSeq:T}}},Z6=g=>{let _=new Map,C=UB(g);for(let T of C){T.leaseEpoch!==void 0&&ne.adopt(T.threadId,T.leaseEpoch)&&n("runner.resume_reconcile_lease_adopted",{kandanThreadId:T.threadId,leaseEpoch:T.leaseEpoch});let $=BB(T);_.set(T.threadId,$),le.set(T.threadId,$)}return C.length>0&&n("runner.resume_reconcile_consumed",{threadCount:C.length}),_},Q6=async()=>{let g=EI(),_;try{_=yK(g).filter($=>$.endsWith(".log"))}catch($){if($?.code==="ENOENT")return;n("runner.inbound_orphan_scan_failed",{message:$ instanceof Error?$.message:String($)});return}let C=On(),T=new Set(Ge.list().map($=>DI(C,$.channel,$.kandanThreadId)));for(let $ of _){let B=mt(g,$);if(!T.has(B))try{let be=RI(B,n),tn=be.entries();if(tn.length===0)continue;for(let Ye of tn)be.deadLetter(Ye.sourceSeq);be.compact(),n("runner.inbound_orphan_dead_lettered",{path:B,strandedCount:tn.length,strandedSeqs:tn.map(Ye=>Ye.sourceSeq)})}catch(be){n("runner.inbound_orphan_drain_failed",{path:B,message:be instanceof Error?be.message:String(be)})}}},X6=async g=>{if(!zn())return;let _=Ge.list();await Promise.all(_.map(C=>lg(C,g?.get(C.kandanThreadId)??[]).catch(T=>{n("runner.inbound_drain_failed",{kandanThreadId:C.kandanThreadId,message:T instanceof Error?T.message:String(T)})}))),await Q6()},ure=g=>g==="accepted_never_framed"?"this message was accepted but a runner restart killed it before it ran. Resend it (or press retry) to run it now.":"interrupted by a runner restart before it finished. Resend your last message (or press retry) to continue this job.",cre=async g=>{let _=Date.now()+g;for(;;){if(t.closePromise!==void 0)return;let C=_-Date.now();if(C<=0)return;await new Promise(T=>setTimeout(T,Math.min(500,C)))}},lre=async()=>{!zn()||t.closePromise!==void 0||(await VB({records:Ge.list(),threadId:g=>g.kandanThreadId,inspect:V6,resumePendingInbound:async g=>(await lg(g,le.get(g.kandanThreadId)??[]),yt(g.channel,g.kandanThreadId).entries().length===0?"clear":"retry"),respawnWorker:async g=>{if(t.closePromise!==void 0)return!1;let _=qr(g.cwd,te.value);return _.ok?await hv(pl(g),_.cwd,g.codexThreadId)!==void 0:(n("runner.resume_respawn_cwd_rejected",{thread_id:g.kandanThreadId,cwd:g.cwd,reason:_.reason}),!1)},seqInFlight:(g,_)=>wt.has(Ss(On(),g.channel,g.kandanThreadId),_),publishInterruptedTurnState:async(g,_,C)=>{await Ns({...pl(g),sourceSeq:_},"failed",ure(C),g.codexThreadId,{failureClass:"resurrection_interrupted"})},shuttingDown:()=>t.closePromise!==void 0||!zn(),sleep:cre,log:n}),await Q6())};Z6(A(q)?.resume_reconcile);let pre=W6.then(()=>lre()).catch(g=>{n("runner.inbound_boot_drain_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>pre),Se.onReconnect(g=>{let _=g.get(Oe),C=Z6(_===void 0?void 0:_.resume_reconcile);X6(C).catch(T=>{n("runner.inbound_rejoin_drain_failed",{message:T instanceof Error?T.message:String(T)})})});let Va=new Map,Y6=(g,_)=>`${g}:${_}`,e$={windowMs:Uf(process.env),recordWedge:(g,_)=>{let C=Y6(g,_),T=(Va.get(C)??0)+1;if(Va.delete(C),Va.size>=256){let $=Va.keys().next().value;$!==void 0&&Va.delete($)}return Va.set(C,T),T},clear:(g,_)=>{Va.delete(Y6(g,_))},killAndRespawn:async({threadId:g,claudeSessionId:_,reason:C})=>{let T=ks(Lr,[_],[g]);if(T!==void 0){n("claude_code.dispatch_supervisor_killing_session",{linzumi_thread_id:g,claude_session_id:_,reason:C}),T.abortController.abort(new Error(C));let B=T.sessionWork();B!==void 0&&await Promise.race([B.catch(()=>{}),new Promise(be=>{setTimeout(be,1e4).unref?.()})])}let $=Ge.list().find(B=>B.kandanThreadId===g);return $===void 0?(n("claude_code.dispatch_supervisor_no_registry_record",{linzumi_thread_id:g,claude_session_id:_}),"no_replay_path"):(await lg($,le.get(g)??[]),"respawn_dispatched")}},n$=async(g,_)=>{let C=_.kandanThreadId,T=pl(_),$=pv.get(C),B={...T,sourceSeq:g.seq,workDescription:g.body,...g.attachments.length===0?{}:{attachments:Mg(g.attachments)},...$?.modelProvider===void 0?{}:{modelProvider:$.modelProvider},...$?.llmProxy===void 0?{}:{llmProxy:$.llmProxy},...$?.linzumiAgent===void 0?{}:{linzumiAgent:$.linzumiAgent}},be=qr(_.cwd,te.value);if(!be.ok)return n("runner.spawn_on_miss_cwd_rejected",{kandanThreadId:C,cwd:_.cwd,reason:be.reason,seq:g.seq}),await Ns(B,"failed",`could not resume the thread's coding session: working directory ${_.cwd} is not an allowed root (${be.reason})`,_.codexThreadId,{failureClass:"resume_cwd_not_allowed"}),"permanent_failed";let tn=be.cwd,Ye=Cp.get(C);if(Ye!==void 0)return n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:_.codexThreadId,provider_session_key:_.codexThreadId,seq:g.seq,decision:"await_in_flight_spawn"}),await Ye==="no_session"?(await Ns(B,"failed","could not resume the thread's coding session: no live session after spawn",_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"):await H6(g,_,B);n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:_.codexThreadId,provider_session_key:_.codexThreadId,seq:g.seq,decision:"spawned_resume"}),as.note(_.codexThreadId,"spawn_requested");let Cn=()=>{},cr=new Promise(An=>{Cn=An});Cp.set(C,cr);try{let An=await gv(B,tn);if(GI(An))return Cn("spawned"),await H6(g,_,B);if(An===void 0||An.ok===!1){Cn("no_session");let bi=An!==void 0&&typeof An.error=="string"?An.error:"the thread could not be resumed (no resumable codex session)";return as.fail(_.codexThreadId,bi),cg(_.codexThreadId,new Error(bi)),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:_.codexThreadId,seq:g.seq,message:bi}),await Ns(B,"failed",`could not resume the thread's coding session: ${bi}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}return Cn("spawned"),"dispatched"}catch(An){return Cn("no_session"),as.fail(_.codexThreadId,An instanceof Error?An.message:String(An)),cg(_.codexThreadId,An instanceof Error?An:new Error(String(An))),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:_.codexThreadId,seq:g.seq,message:An instanceof Error?An.message:String(An)}),await Ns(B,"failed",`could not resume the thread's coding session: ${An instanceof Error?An.message:String(An)}`,_.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}finally{Cn("spawned"),Cp.get(C)===cr&&Cp.delete(C)}},Ns=async(g,_,C,T,$={})=>{let B=ca(g,_,C,{instanceId:Ve,codexThreadId:T,...oc($.failureClass)});if(B!==void 0)try{await Se.push(Oe,"message_state",B)}catch(be){n("runner.spawn_on_miss_state_push_failed",{thread_id:ln(g,"threadId")??null,status:_,message:be instanceof Error?be.message:String(be)})}},t$=async(g,_)=>{let{reason:C,failureClass:T}=M2e(_),$=ca(g,"failed",C,{instanceId:Ve,...oc(T)});if($===void 0){n("runner.stillborn_worker_failed_state_unpublishable",{thread_id:ln(g,"threadId")??null,control_type:g.type,reason:C,cause:"missing_source_seq"});return}try{await Se.push(Oe,"message_state",$),n("runner.stillborn_worker_failed_state_published",{thread_id:ln(g,"threadId")??null,control_type:g.type,reason:C})}catch(B){n("runner.stillborn_worker_failed_state_push_failed",{thread_id:ln(g,"threadId")??null,control_type:g.type,message:B instanceof Error?B.message:String(B)})}},fre=async(g,_)=>{if(_.threadId===void 0)return;let C={workspace:On(),channel:g,thread_id:_.threadId,instance_id:Ve,seq:_.seq,status:"queued",reason:"queued for durable resume"};try{await Se.push(Oe,"message_state",C)}catch(T){n("runner.spawn_on_miss_state_push_failed",{thread_id:_.threadId,status:"queued",message:T instanceof Error?T.message:String(T)})}},pg=[],xv=nJ(process.env),mre=async g=>{try{let _=ln(g,"threadId"),C=g2e({control:g,hasRegistryRecord:_!==void 0&&Ge.list().some(B=>B.kandanThreadId===_),runtimeSettings:_l(e,g),identity:_o(e.token),nowMs:Date.now()});if(C===void 0)return!1;let T=ca(g,"queued",YB,{instanceId:Ve,...C.codexThreadId===void 0?{}:{codexThreadId:C.codexThreadId}}),$=await y2e({plan:C,queuedStatePayload:T,queue:yt(C.channel,C.threadId),upsertRegistryRecord:B=>Ge.upsert(B),pushQueuedState:async B=>{await Se.push(Oe,"message_state",B)},trackHeld:B=>{pg.push({control:g,...B})},log:n,nowMs:Date.now()});return $.held?(n("runner.update_restart_drain_start_held",{control_type:g.type,thread_id:C.threadId,source_seq:C.sourceSeq,enqueued:$.enqueuedFresh,registry_record_synthesized:C.registryRecord!==void 0,max_wait_ms:xv}),!0):!1}catch(_){return n("runner.update_restart_drain_hold_failed",{control_type:g.type,thread_id:ln(g,"threadId")??null,message:_ instanceof Error?_.message:String(_)}),!1}},hre=async()=>{let g=Date.now();for(let _ of[...pg]){if(g-_.heldAtMs<xv)continue;let C=pg.indexOf(_);C!==-1&&pg.splice(C,1);let T=yt(_.channel,_.threadId);T.entries().find(B=>B.sourceSeq===_.sourceSeq)!==void 0&&(T.deadLetter(_.sourceSeq),n("runner.update_restart_drain_held_turn_expired",{thread_id:_.threadId,source_seq:_.sourceSeq,held_for_ms:g-_.heldAtMs,max_wait_ms:xv}),await t$(_.control,new Error(jI)))}},Tp,gre=()=>{Tp===void 0&&(Tp=setInterval(()=>{hre().catch(g=>{n("runner.update_restart_drain_held_sweep_failed",{message:g instanceof Error?g.message:String(g)})})},eJ))};t.actions.push(()=>{Tp!==void 0&&(clearInterval(Tp),Tp=void 0)});let r$=g=>async({sourceSeq:_,reason:C,attempts:T,alreadyPublished:$})=>{n("runner.inbound_dead_lettered",{kandanThreadId:g.kandanThreadId,seq:_,reason:C,attempts:T,alreadyPublished:$}),!$&&await Ns(pl(g),"failed",m2e(C),g.codexThreadId,{failureClass:h2e(C)})},_v=()=>{if(Xt!==void 0)return!1;for(let g of Bu.values())if(g.activeTurnCount()>0)return!1;for(let g of Lr.values())if(g.hasActiveTurn())return!1;for(let g of xt.values())if(g.kind==="starting")return!1;return!(Cp.size>0||ge.size>0)},yre=()=>{if(!_v())return!1;for(let g of oe.values())if(g.entries().length>0)return!1;return!0},o$=N7(process.env),bv=U7({currentVersion:jt,strategy:F7({env:process.env,entrypointPath:process.argv[1]}),isIdle:yre,...o$===void 0?{}:{drain:{timing:o$,hooks:{begin:()=>{De=!0},end:({redispatchHeldWork:g})=>{De=!1,g&&X6().catch(_=>{n("runner.update_drain_requeue_failed",{message:_ instanceof Error?_.message:String(_)})})},isQuiescent:_v,isEligible:()=>Xt===void 0}}},performRestart:q7({currentVersion:jt,argv:process.argv.slice(2),cwd:e.cwd,close:r,exit:g=>process.exit(g),log:n}),log:n,restartAttemptStore:U_(z7())});t.actions.push(()=>bv.stop()),i.beginDraining=()=>{if(d?.outgoingDrainActive()===!0){n("runner.generation_outgoing_gate_open",{pinned:d.outgoingPins.size()});return}dn=!0,De=!0,gre()},i.onTurnCompleted=g=>{if(!(d===void 0||!d.outgoingDrainActive())&&d.outgoingPins.release(g.threadId)){let _=d.sendToSupervisor({type:"generation_pin_released",epoch:d.epoch,threadId:g.threadId});n("runner.generation_pin_released_sent",{threadId:g.threadId,remaining:d.outgoingPins.size(),delivered:_})}},i.isQuiescent=_v,i.isWaitEligible=()=>Xt===void 0,i.inFlightTurns=()=>[...Array.from(Bu.values()).flatMap(g=>g.activeTurns().map(_=>({threadId:_.threadId,turnId:_.turnId,engine:"codex"}))),...Array.from(Lr.values()).filter(g=>g.hasActiveTurn()).map(g=>({threadId:g.threadId,engine:"claude_code"}))],i.lastActivityAtMs=()=>{let g;for(let _ of Bu.values()){let C=_.lastActivityAtMs();C!==void 0&&(g===void 0||C>g)&&(g=C)}for(let _ of Lr.values()){let C=_.lastSdkActivityMs();C>0&&(g===void 0||C>g)&&(g=C)}return g},i.publishForcedKillTerminalStates=g=>{n("runner.drain_forced_kill_states_publishing",{turn_count:g.length,thread_ids:g.map(T=>T.threadId)});let _=new Set(g.filter(T=>T.engine==="codex").map(T=>T.threadId)),C=new Set([Xt,...Yt.values()].filter(T=>T!==void 0).flatMap(T=>T.pendingApprovalTurnIds()));for(let T of Bu.values())T.activeTurns().some($=>_.has($.threadId))&&T.failActiveTurns($=>C.has($.turnId)?iJ:oJ);return Promise.resolve()};let xre=()=>({instanceId:Ve,clientId:ig,...io===void 0?{}:{codexUrl:io},cwd:e.cwd,hostname:ro,workspace:Ur(e)??null,channel:e.channelSession?.channelSlug??null,threadId:Xt?.currentKandanThreadId()??null,codexThreadId:Xt?.currentCodexThreadId()??null,codexThreads:z6.value,model:Uu.model??null,reasoningEffort:Uu.reasoningEffort??null,allowPortForwardingByDefault:Uu.allowPortForwardingByDefault??null,fast:e.fast??!1,capabilities:Ke(),updateNudge:bv.status()??null}),Us=()=>Se.push(Oe,"heartbeat",xre()).then(()=>{wp.recordServerAck();for(let g of Lr.values())g.resumeOutbox()}).catch(g=>{n("kandan.heartbeat_push_failed",{message:g instanceof Error?g.message:String(g)})}),_re=setInterval(()=>{wp.check(),S.check(()=>{Us()}),Us()},15e3);if(t.actions.push(()=>clearInterval(_re)),Se.onReconnect(()=>Us().then(()=>{})),Us(),e.threadProcess?.role!=="thread"&&qx()){let g=$9(O9({kandanUrl:e.kandanUrl,token:e.token,computeKey:a_(e.kandanUrl),query:aP({kandanUrl:e.kandanUrl,token:e.token}),log:_=>n("vm.golden_gc",{line:_})}));t.actions.push(g)}let i$=g3(Se,Oe,()=>Array.from(w));t.actions.push(()=>i$.close());let wv=Xt?.currentCodexThreadId();if(e.launchTui&&Qt===void 0)throw new Error("Codex TUI requires a Codex app-server connection");e.launchTui&&Qt!==void 0&&wv!==void 0&&await IEe(Qt,wv);let s$=e.launchTui&&io!==void 0?vEe(e.codexBin,io,e.cwd,wv,e.channelSession,e.fast):void 0;s$!==void 0&&t.actions.push(()=>{s$.kill("SIGINT")});let vv=Qt===void 0?void 0:cv(Qt);if(Qt?.onNotification(g=>{av.value+=1;let _=g.params??{},C=LP(g.method,_);Xt===void 0&&Se.push(Oe,"codex_notification",{instanceId:Ve,seq:av.value,method:g.method,params:_,metadata:C.metadata,receivedAt:new Date().toISOString()}).catch(T=>{n("kandan.codex_notification_push_failed",{message:T instanceof Error?T.message:String(T)})}),n("codex.notification",C),vv?.observeNotification(g.method,_),Y_(Xt,g.method,_,n);for(let T of Yt.values())Y_(T,g.method,_,n)}),vv!==void 0){let g={handled:!1},_=C=>{if(t.closePromise===void 0&&(n("codex.app_server_connection_lost",{cause:C}),vv.failActiveTurns(C),Or?.stop(),F6&&!g.handled)){g.handled=!0;let T=iEe(rEe(KJ(e.runnerId),Ye=>{n("runner.app_server_exit_loop_stamp_write_failed",{message:Ye,statePath:KJ(e.runnerId)}),console.error(`Warning: could not persist the app-server crash-loop stamp (${Ye}); the exit-code-${ZI} give-up bound cannot take effect across restarts until the state path is writable.`)}),Date.now()),$=T.crashLoop?ZI:75,B=oEe(e.cwd),be=B===void 0?"":` Likely trigger: ${B}.`;if(T.crashLoop){let Ye=e.logFile??kg();n("runner.app_server_crash_loop_gave_up",{cause:C,exitsInWindow:T.count,windowMs:TK,exitCode:$,cwd_missing_diagnosis:B??null}),console.error(`The Codex app-server has died ${T.count} times in rapid succession (latest cause: ${C}).${be} Restarting the runner is not fixing it, so this exit uses code ${ZI} (instead of the restart-requesting 75) to stop the crash loop. Diagnose before reconnecting: the runner log is at ${Ye} and the CLI audit log at ${Wv()} (look for the app-server's exit reason/stderr). Once resolved, run \`linzumi connect\` to reconnect.`)}else console.error(`Codex app-server connection was lost (${C}); exiting so a fresh runner can relaunch it.${be} Run \`linzumi connect\` to reconnect.`);let tn=[...Xt!==void 0?[Xt]:[],...Yt.values()].map(Ye=>Ye.close().catch(Cn=>{n("codex.app_server_lost_session_drain_failed",{message:Cn instanceof Error?Cn.message:String(Cn)})}));nEe({pushes:[...U6,...tn],exit:()=>process.exit($),safetyCapMs:5e3})}};Qt?.onClose?.(C=>_(C.message)),Or?.process.once("exit",(C,T)=>_(`codex app-server process exited (${C??T??"unknown"})`))}let bre=g=>{let _=a_(e.kandanUrl),C=g.cwd!==void 0&&g.cwd.trim()!==""?g.cwd:e.cwd;if(w1e(C)){let $=`cwd_dangerous: golden build refused - resolved build cwd ${JSON.stringify(C)} is not a safe project directory (empty, filesystem root, or non-absolute). Re-run from the project's repository checkout.`;return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:_,cwdDangerous:!0,failureReason:$}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:_,failure_reason:$})}n("vm.golden_build_started",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:_,sourceThreadId:g.sourceThreadId??null,cwd:C});try{X5(iP({projectPublicId:g.projectPublicId??void 0,computeKey:_,cwd:C}))}catch($){n("vm.golden_build_register_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)})}let T=g.sourceThreadId===void 0?void 0:{threadId:g.sourceThreadId,sourceMachineName:Nx({cwd:C,kandanThreadId:g.sourceThreadId})};return J8({cwd:C,projectPublicId:g.projectPublicId??void 0,computeKey:_,name:g.name,...T===void 0?{}:{sourceThread:T},log:$=>n("vm.golden_build",{line:$})}).then($=>(n("vm.golden_build_ready",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,checksum:$.checksum,sizeBytes:$.sizeBytes,artifactRef:$.artifactRef,artifactKind:$.artifactKind,snapshotFallbackReason:$.snapshotFallbackReason??null}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"ready",checksum:$.checksum,size_bytes:$.sizeBytes,artifact_ref:$.artifactRef,artifact_kind:$.artifactKind,source_commits:$.sourceCommits,lockfile_hashes:$.lockfileHashes,toolchain_versions:$.toolchainVersions,compute_key:_,failure_reason:null,metadata:$.snapshotFallbackReason===void 0?{}:{snapshot_fallback_reason:$.snapshotFallbackReason}}))).catch($=>{let B=$ instanceof Gc||$ instanceof Error?$.message:String($);return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,captureUnavailable:$ instanceof Gc,failureReason:B}),Se.push(Oe,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:_,failure_reason:B})}).catch($=>{throw n("vm.golden_build_result_push_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)}),$})},wre=g=>{if(n("kandan.control",{control:g}),a?.record("kandan","control.received",{controlType:g.type,control:g}),!HRe(e,g)&&!GRe(e,g,Ju)){let T=oi(g)??null,$=e.threadProcess?.kandanThreadId??null;n("kandan.control_ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:T,threadProcessId:$}),a?.record("kandan","control.ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:T,threadProcessId:$});return}if(g.type==="replace_runner"){n("runner.replaced",{runnerId:e.runnerId,reason:g.reason,replacementRunnerId:g.replacementRunnerId,replacementVersion:g.replacementVersion}),r().catch(T=>{n("runner.replace_close_failed",{message:T instanceof Error?T.message:String(T)})});return}if(g.type==="update_available"){bv.handleUpdateAvailable(g);return}if(g.type==="set_commander_impl"){let T=g.impl,$=T==="ts"||T==="rescript"?T:void 0;if($===void 0){n("runner.commander_impl_control_ignored",{impl:typeof T=="string"?T:null,reason:"unknown_impl_value"});return}let B=wK($),be=$!==sR,tn=process.env.LINZUMI_SUPERVISED==="1"&&process.platform!=="win32";if(n("runner.commander_impl_persisted",{impl:$,persisted:B,runningImpl:sR,restart:be?tn?"graceful_drain":"deferred_to_next_launch":"not_needed"}),be&&tn)try{process.kill(process.pid,"SIGUSR2")}catch(Ye){n("runner.commander_impl_restart_failed",{message:Ye instanceof Error?Ye.message:String(Ye)})}return}let _=QRe(g);if(_!==void 0)return bre(_);if(!JRe(g,Ve)){n("kandan.control_ignored",{reason:"instance_id_mismatch",instanceId:Ve,controlInstanceId:KRe(g),controlType:g.type});return}if(m3(g)){f3(g,Array.from(w)).then(T=>(n("kandan.forward_response",{requestId:g.requestId,port:g.port,path:g.path,status:T.status,ok:T.ok,location:kEe(T.headers,"location")}),Se.push(Oe,"forward:http_response",T))).catch(T=>Se.push(Oe,"forward:http_response",{requestId:g.requestId,ok:!1,error:T instanceof Error?T.message:String(T)})).catch(T=>{n("kandan.forward_response_push_failed",{message:T instanceof Error?T.message:String(T)})});return}if(h3(g)){i$.handle(g);return}if(v3(g)){k3(g,{codeServerBin:e.codeServerBin,editorRuntime:e.editorRuntime,allowedCwds:te.value,currentState:U.value,browserBaseUrl:g.browserBaseUrl??process.env.KANDAN_LOCAL_RUNNER_PUBLIC_BASE_URL,runnerId:e.runnerId,platform:e.localEditorPlatform}).then(T=>{if(T.ok){ie.value+=1;let $=ie.value,B=U.value.status==="running"?[U.value.port,...U.value.collaboration===void 0?[]:[U.value.collaboration.serverPort],...O6("editor_restarted")]:[];U.value.status==="running"&&(w.delete(U.value.port),k.delete(U.value.port),U.value.collaboration!==void 0&&(w.delete(U.value.collaboration.serverPort),k.delete(U.value.collaboration.serverPort))),U.value=T.state,w.add(T.event.port),k.add(T.event.port),T.event.collaboration!==void 0&&(w.add(T.event.collaboration.serverPort),k.add(T.event.collaboration.serverPort));let be=Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!0,capabilities:{...Ke(),...B.length===0?{}:{revokedPorts:B}},...T.event});return T.state.status==="running"&&(Wte(T.state),Zte(T.state,$,be)),be}return U.value=T.state,Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!1,reason:T.reason,capabilities:Ke()})}).catch(T=>Se.push(Oe,"local_editor_status",{instanceId:Ve,requestId:g.requestId,ok:!1,reason:yf(T),capabilities:Ke()})).catch(T=>{n("kandan.local_editor_status_push_failed",{message:T instanceof Error?T.message:String(T)})});return}if(M1e(g)){I({allowedCwds:g.allowedCwds,configVersion:g.configVersion??null},{includeStartupAllowedCwds:!0,source:"control"}),Us();return}if(A1e(g)){let T=aF(g);n("runner.fleet_breaker_state",{source:"control",outcome:T.outcome,state:T.snapshot?.state??null,fate:T.snapshot?.fate??null,version:T.snapshot?.version??null});return}if(O1e(g)){let T=Vte(g);if(T!==void 0){Se.push(Oe,"codex_response",T).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}let $=Gte(g);if($!==void 0){Se.push(Oe,"codex_response",$).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}}if($1e(g)){switch(g.enabled){case!0:w.add(g.port);break;case!1:w.delete(g.port),k.delete(g.port),z(g.port),se.approvedPorts.delete(g.port),se.approvedTargets.delete(g.port),Se.push(Oe,"forward_port_revoked",{instanceId:Ve,port:g.port,reason:"user_disabled",capabilities:Hs(Ke(),g.port)}).catch(T=>{n("kandan.forward_port_revoked_push_failed",{message:T instanceof Error?T.message:String(T)})});break}Us();return}if(g.type==="import_onboarding_conversations")return Q2e(e,n,g).catch(T=>{throw n("onboarding.conversation_import_failed",{runnerId:e.runnerId,message:T instanceof Error?T.message:String(T)}),T});if(g.type==="scan_onboarding_projects"){let T=n1e(g.paths);return qK(e,n,{workspaceSlug:h(g.workspace),selectedScanRoots:T,sourceRoots:T,workerId:"projects-selected-folders",workerLabel:"Selected folders",startingMessage:"Checking selected folders",emptyMessage:"No Git projects found in selected folders",foundMessage:"Selected folder projects found",failedMessage:"Selected folder project scan failed",currentPlace:T[0]??e.cwd,requireTerminalStatusWrite:!0,includeRuntimeCwdHint:!1}).catch($=>{throw n("onboarding.project_scan_failed",{runnerId:e.runnerId,message:$ instanceof Error?$.message:String($)}),$})}if(g.type==="start_instance"){if(ERe(g,$=>Ge.list().some(B=>B.kandanThreadId===$)))return Ja+=1,n("kandan.start_instance_skipped_known_session",{threadId:oi(g)??null,controlSeq:g.control_seq??null,issuedAt:xm(g)??null,reason:"thread_already_has_known_session",skippedStaleStartInstances:Ja}),Se.push(Oe,"codex_response",{instanceId:Ve,controlType:g.type,threadId:oi(g)??null,ok:!1,skipped:!0,error:"start_instance_thread_already_has_session",issuedAt:xm(g)??null}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})});let T=RRe(g,Date.now());if(T!==void 0)return Ja+=1,n("kandan.start_instance_stale_skipped",{threadId:oi(g)??null,controlSeq:g.control_seq??null,issuedAt:xm(g)??null,ageMs:T,staleWindowMs:vK,skippedStaleStartInstances:Ja}),Se.push(Oe,"codex_response",{instanceId:Ve,controlType:g.type,threadId:oi(g)??null,ok:!1,skipped:!0,error:"stale_start_instance",issuedAt:xm(g)??null,ageMs:T}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})})}let C;if(g.type==="start_turn"){let T=g.control_seq;if(T!==void 0){let $=IRe(Oe,g.threadId),B=_n.initial($);if(DRe(B,T))return vp+=1,n("kandan.start_turn_replay_skipped",{controlType:g.type,threadId:g.threadId,controlSeq:T,appliedControlSeq:B,skippedReplayedStartTurns:vp}),{instanceId:Ve,controlType:g.type,threadId:g.threadId,skipped:!0};C=()=>MRe(_n,$,T)}}return ARe(()=>{if(dn&&(g.type==="start_instance"||g.type==="reconnect_thread")){let T=ln(g,"threadId"),$=g.type==="reconnect_thread"?co(g.codexThreadId):void 0,B=T!==void 0?xt.get(T):void 0,be=g.type==="reconnect_thread"&&($!==void 0&&Lr.has($)||B!==void 0&&Q_(B)!=="dead");if(g.type==="start_instance"||g.type==="reconnect_thread"&&!be)return mre(g).then(Ye=>{if(Ye)return{instanceId:Ve,controlType:g.type,threadId:T??null,held:!0,reason:"runner_updating_queued"};throw n("runner.update_restart_drain_start_refused",{control_type:g.type,thread_id:T??null}),new Error(jI)})}return XRe(Xt,Yt,g).then(T=>T!==void 0?T:QI(Qt,Se,Oe,Ve,e,m(),te,me,ge,Lr,kp,Ju,sv,ug,g,dv,a,hv,_m(e)?are:void 0,s?.playCodex,$=>ne.current($),$r,Na,Wo,xi,e$,B6))},C).then(T=>Se.push(Oe,"codex_response",T)).catch(async T=>((g.type==="start_instance"||g.type==="reconnect_thread")&&(lK(T)||_C(T)||FI(T))&&await t$(g,T),Se.push(Oe,"codex_error",{instanceId:Ve,message:yf(T)}))).catch(T=>{n("kandan.control_response_push_failed",{message:T instanceof Error?T.message:String(T)})})},vre=lN({store:cN(dN(xl(),e.runnerId),g=>n("runner.control_quarantine_state_write_failed",{message:g})),quarantineFilePath:uN(xl(),e.runnerId),currentEpoch:()=>zu.current(Oe),log:n,emitRunnerEvent:g=>{Se.push(Oe,"runner.control_quarantined",g).catch(_=>{n("runner.control_quarantined_event_push_failed",{message:_ instanceof Error?_.message:String(_)})})}}),a$=(g,_)=>{ORe(g.type,()=>wre(g),_,n,C=>vre.onControlRejected(g,C))},fg=d===void 0?void 0:v7({runtime:d,threadIdOf:g=>oi(g),controlTypeOf:g=>g.type,dispatch:a$,log:n});return d!==void 0&&fg!==void 0&&(d.hooks.onOverlapDrain=g=>{let _=[...new Set(i.inFlightTurns().map(T=>T.threadId).filter(T=>T!==""))];d.beginOutgoingDrain(_);let C=d.sendToSupervisor({type:"generation_pin_snapshot",epoch:d.epoch,threadIds:_});n("runner.generation_outgoing_drain_started",{incomingEpoch:g,pinned:_.length,threadIds:_,snapshotDelivered:C}),d.requestUpdateDrain("generation_overlap")},d.hooks.onOverlapAbort=()=>{let g=d.cancelUpdateDrain("generation_overlap_abort"),_=fg.redispatchDeferredToIncoming();n("runner.generation_overlap_abort_applied",{drainCancelled:g,redispatched:_})},d.hooks.onPinsReleased=()=>{fg.dispatchUnpinned()},d.hooks.onPromote=()=>{let C;t.actions.push(()=>{C!==void 0&&(clearTimeout(C),C=void 0)});let T=$=>{if(C=void 0,d.promoteRunnerLock()){n("runner.generation_lock_promoted",{attempt:$});return}if($>=10){n("runner.generation_lock_promote_gave_up",{attempts:$});return}C=setTimeout(()=>T($+1),5e3),C.unref()};T(1)}),_Re(g1e(e,te.value,ce.value,Ie.value),n,Ba,sg,fg?.dispatch??a$,async()=>{await y(),await x(),p.value==="probe_failed"&&await b()}),{instanceId:Ve,codexUrl:io,close:r}}function _Re(e,n,t,r,o,i){r.value=o,t.splice(0).forEach(({control:s,ack:a})=>o(s,a)),H2e(e,n,i)}function ym(){let e=process.env.LINZUMI_COMMANDER_OUTBOX_DIR?.trim();return e!==void 0&&e!==""?e:mt(Pm(),".linzumi","commander-outbox")}function xl(){let e=process.env.LINZUMI_CONTROL_CURSOR_DIR?.trim();return e!==void 0&&e!==""?e:mt(Pm(),".linzumi","control-cursors")}function bK(){return mt(Pm(),".linzumi","commanderImpl")}function bRe(){return mt(Pm(),".linzumi","commanderImplFallback.json")}function wRe(){try{let e=pa(bK(),"utf8").trim();return e==="ts"||e==="rescript"?e:void 0}catch{return}}function wK(e){let n=bK(),t=`${n}.tmp.${process.pid}.${Math.random().toString(16).slice(2,8)}`;try{qd(fa(n),{recursive:!0}),Sm(t,`${e}
|
|
1522
1525
|
`),n0(t,n)}catch{try{vm(t,{force:!0})}catch{}return!1}if(e==="ts")try{vm(bRe(),{force:!0})}catch{}return!0}function vRe(e){try{let n=globalThis.__linzumiCommanderChooserMarkJoined;if(n===void 0)return;let t=n();t!==void 0&&e("commander.chooser.fallback_reported",{...t})}catch{}}function UJ(e,n){let t=e!==null&&typeof e=="object"&&!Array.isArray(e)?e.commander_impl:void 0;if(typeof t!="string")return;let r=t.trim()==="rescript"?"rescript":"ts",o=wRe();if(o===r)return;let i=wK(r);n("runner.commander_impl_assigned",{impl:r,previousCache:o??null,persisted:i,runningImpl:sR})}function SRe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=zd("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return mt(xl(),`${r}.${t}.json`)}function kRe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=zd("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return mt(xl(),`${r}.${t}.start-turn.json`)}function CRe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=zd("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return mt(xl(),`${r}.${t}.vm-fallback-notice.json`)}function TRe(e,n){let t;try{if(!gl(e))return;t=pa(e,"utf8")}catch(r){n("vm_fallback_notice_store.read_failed",{path:e,message:r instanceof Error?r.message:String(r)});return}try{let r=JSON.parse(t);if(typeof r=="object"&&r!==null){let o=r.readinessFingerprint;if(typeof o=="string"&&o!=="")return o}}catch{}}function BJ(e,n,t){try{if(n===void 0){vm(e,{force:!0});return}qd(fa(e),{recursive:!0});let r=`${e}.tmp`;Sm(r,`${JSON.stringify({readinessFingerprint:n})}
|
|
1523
1526
|
`,"utf8"),n0(r,e)}catch(r){t("vm_fallback_notice_store.write_failed",{path:e,message:r instanceof Error?r.message:String(r)})}}function PRe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=zd("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return mt(xl(),`${r}.${t}.source-seq.json`)}function IRe(e,n){return`${e} ${n}`}function xm(e){let n=e.issued_at;return typeof n=="string"&&n!==""?n:void 0}function SK(e){return e.replayed===!0}function RRe(e,n){if(!SK(e))return;let t=xm(e);if(t===void 0)return;let r=Date.parse(t);if(Number.isNaN(r))return;let o=n-r;return o>vK?o:void 0}function ERe(e,n){if(e.type!=="start_instance"||!SK(e))return!1;let t=oi(e);return t===void 0?!1:n(t)}function DRe(e,n){return e!==void 0&&n<=e}function MRe(e,n,t){e.onAdvance(n,t),e.flush()}function ARe(e,n){return e().then(t=>(n?.(),t))}function $Re(e){return"then"in e&&typeof e.then=="function"}function ORe(e,n,t,r,o){let i;try{i=n()}catch(s){r("kandan.control_handler_threw",{controlType:e,message:s instanceof Error?s.message:String(s)}),t();return}if(i===void 0||!$Re(i)){t();return}i.then(t,s=>{if(o?.(s)==="quarantine"){t();return}r("kandan.control_ack_withheld_on_failure",{controlType:e,message:s instanceof Error?s.message:String(s)})})}function zRe(e,n=Date.now,t=kK,r){let o=r?.afterMs??FRe,i=r?.forcedReconnectAfterMs??LRe,s=r?.forcedReconnectRetryMs??jRe,a=n(),d=!1,u,c=!1,l=0,p,m=0,f=0;return{recordServerAck:()=>{a=n(),u=void 0,c=!1,l=0,p=void 0,m=0,f=0,d&&(d=!1,e("kandan.connection_recovered",{staleThresholdMs:t}))},check:()=>{let y=n(),x=y-a;!d&&x>t&&(d=!0,u=y,e("kandan.connection_stale",{lastServerAckAgoMs:x,staleThresholdMs:t}));let b=u===void 0?0:y-u;if(d&&r?.onReconnectNeeded!==void 0&&u!==void 0&&b>=i&&(p===void 0||y-p>=s)&&(l+=1,p=y,e("kandan.connection_force_reconnect",{staleForMs:b,lastServerAckAgoMs:x,attempt:l,forcedReconnectAfterMs:i}),r.onReconnectNeeded({staleForMs:b,lastServerAckAgoMs:x,attempt:l})===!1?m+=1:m=0,r.onHardResetNeeded!==void 0&&m>=WI)){if(m=0,f>=JJ)c||(c=!0,e("kandan.connection_hard_reset_exhausted",{staleForMs:b,lastServerAckAgoMs:x,attempt:l,hardResets:f,hardResetFailureLimit:JJ}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:x}));else if(b<o){f+=1;let v=r.onHardResetNeeded({staleForMs:b,lastServerAckAgoMs:x,attempt:l,uninitiatedDispatches:WI,hardResets:f});e("kandan.connection_hard_reset",{staleForMs:b,lastServerAckAgoMs:x,attempt:l,uninitiatedDispatches:WI,hardResets:f,initiated:v!==!1})}}d&&!c&&r!==void 0&&u!==void 0&&b>=o&&(c=!0,e("kandan.connection_unrecoverable",{staleForMs:b,lastServerAckAgoMs:x,escalateAfterMs:o}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:x}))},isStale:()=>d}}function HI(e,n,t){let r=t?.discardSeqsOnFirstEpochAdoption===!0,o=t?.fsyncOnWrite===!0,{cursors:i,epoch:s}=BRe(e,n),a=s,d=!1,u,c=()=>{if(d){d=!1;try{qd(fa(e),{recursive:!0});let m=`${e}.tmp`,f=`${JSON.stringify({...a===void 0?{}:{[CK]:a},...Object.fromEntries(i)})}
|
|
1524
1527
|
`;if(o){let y=zJ(m,"w");try{Sm(y,f,"utf8"),FJ(y)}finally{jJ(y)}n0(m,e);let x=zJ(fa(e),"r");try{FJ(x)}finally{jJ(x)}}else Sm(m,f,"utf8"),n0(m,e)}catch(m){n("control_cursor_store.write_failed",{path:e,message:m instanceof Error?m.message:String(m)})}}},l=()=>{d=!0,u===void 0&&(u=setTimeout(()=>{u=void 0,c()},qRe),u.unref?.())},p=()=>{u!==void 0&&(clearTimeout(u),u=void 0),c()};return{initial:m=>i.get(m),onAdvance:(m,f)=>{let y=i.get(m);y!==void 0&&f<=y||(i.set(m,f),l())},reset:(m,f)=>{i.get(m)!==f&&(i.set(m,f),l())},flush:p,epoch:()=>a,adoptEpoch:m=>{if(a===m)return!1;let f=a!==void 0,y=!f&&r&&i.size>0;return a=m,(f||y)&&(y&&n("control_cursor_store.pre_epoch_seqs_discarded",{path:e,epoch:m,discardedSeqs:i.size}),i.clear()),l(),(f||y)&&p(),f}}}function NRe(e,n,t,r){return{current:()=>e.epoch(),adopt:(o,i)=>{let s=e.epoch(),a=e.adoptEpoch(i),d=n.adoptEpoch(i),u=a||d;return u&&t("kandan.control_epoch_changed",{runnerId:r.runnerId,kandanUrl:r.kandanUrl,topic:o,previousEpoch:s??null,epoch:i,controlCursorCleared:a,startTurnWatermarksCleared:d}),u}}}function URe(e,n){return typeof e=="object"&&e!==null&&e.code===n}function BRe(e,n){let t=new Map,r;try{r=pa(e,"utf8")}catch(s){return URe(s,"ENOENT")||n("control_cursor_store.read_failed",{path:e,message:s instanceof Error?s.message:String(s)}),{cursors:t,epoch:void 0}}let o;try{o=JSON.parse(r)}catch{o=void 0}if(o===null||typeof o!="object"||Array.isArray(o))return n("control_cursor_store.corrupt_ignored",{path:e}),{cursors:t,epoch:void 0};let i;for(let[s,a]of Object.entries(o)){if(s===CK){typeof a=="string"&&a!==""&&(i=a);continue}typeof a=="number"&&Number.isInteger(a)&&a>=0&&t.set(s,a)}return{cursors:t,epoch:i}}function JRe(e,n){return e.type==="replace_runner"?!0:!("instanceId"in e)||e.instanceId===void 0||e.instanceId===n}function KRe(e){return"instanceId"in e?e.instanceId:void 0}function VRe(e,n){let t=new URL(n);if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Error("workspace viewport URL must use http or https");let r=new URL(Bn(e)).origin;if(t.origin!==r)throw new Error("workspace viewport URL must stay on the configured Linzumi origin")}function WRe(e,n){VRe(e,n)}function GI(e){return e!==void 0&&e.delegated===!0&&e.threadProcess==="already_started"}function _m(e){return e.threadProcess?.role==="thread"||e.agentReplay!==void 0?!1:e.spawnThreadRunner!==void 0||e.codexUrl===void 0}function HRe(e,n){let t=e.threadProcess,r=oi(n);return t?.role!=="thread"?!(_m(e)&&r!==void 0&&ZRe(n)):r!==void 0?r===t.kandanThreadId:"instanceId"in n&&n.instanceId!==void 0&&n.instanceId!==""||n.type==="replace_runner"}function GRe(e,n,t){switch(e.threadProcess?.role){case"thread":return!1;default:switch(n.type){case"resolve_claude_user_input_request":case"deny_claude_user_input_request":return t.has(n.requestId);default:return!1}}}function ZRe(e){switch(e.type){case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":return!0;default:return!1}}function QRe(e){let n=e;if(n.kind!=="build_golden_image"&&n.type!=="build_golden_image")return;let t=jd(n.golden_image_public_id),r=jd(n.build_claim_token);if(!(t===void 0||r===void 0))return{goldenImagePublicId:t,buildClaimToken:r,projectPublicId:jd(n.project_public_id),computeKey:jd(n.compute_key),name:jd(n.name),sourceThreadId:jd(n.source_thread_id),cwd:jd(n.cwd)}}function jd(e){return typeof e=="string"&&e!==""?e:void 0}function oi(e){switch(e.type){case"start_instance":case"reconnect_thread":case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"remote_codex_exec":case"remote_codex_exec_cancel":case"stop_turn":case"steer_turn":case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"update_thread_interaction_access":{let n=h(e.threadId)?.trim();return n===void 0||n===""?void 0:n}default:return}}async function XRe(e,n,t){let r=oi(t);if(r!==void 0){let i=n.get(r),s=Array.from(new Set([...i===void 0?[]:[i],...Array.from(n.values()).filter(d=>d.currentKandanThreadId()===r)])),a=[...e?.currentKandanThreadId()===r?[e]:[],...s.filter(d=>d!==e)].filter(d=>d!==void 0);if(t.type==="update_thread_interaction_access"){let d,u;for(let c of a){let l=await c.handleControl(t);l!==void 0&&(d??=l,l.ok===!0&&(u??=l))}return u??d}for(let d of a){let u=await d.handleControl(t);if(u!==void 0)return u}return}let o=await(e?.handleControl(t)??Promise.resolve(void 0));if(o!==void 0)return o;for(let i of n.values()){let s=await i.handleControl(t);if(s!==void 0)return s}}function eEe(e){return e.codexUrl===void 0&&e.threadProcessRole!=="thread"&&e.ownsStartedAppServer}async function nEe(e){let n=e.setTimeoutFn??setTimeout,t=Promise.allSettled(e.pushes).then(()=>{}),r=new Promise(o=>{n(()=>o(),e.safetyCapMs)?.unref?.()});await Promise.race([t,r]),e.exit()}function KJ(e,n=process.env){let t=n.LINZUMI_APP_SERVER_EXIT_LOOP_STATE_FILE?.trim();return t!==void 0&&t!==""?t:mt(Pm(),".linzumi","app-server-exit-loop",`${Rc(e)}.json`)}function rEe(e,n){return{load:()=>{try{let t=JSON.parse(pa(e,"utf8"));return typeof t.count=="number"&&Number.isFinite(t.count)&&typeof t.lastExitAt=="string"?{count:t.count,lastExitAt:t.lastExitAt}:void 0}catch{return}},save:t=>{try{qd(fa(e),{recursive:!0}),Sm(e,`${JSON.stringify(t,null,2)}
|
|
1525
|
-
`)}catch(r){n?.(r instanceof Error?r.message:String(r))}}}}function oEe(e,n=gl){try{if(n(e))return}catch{return}return`the runner's working directory ${e} no longer exists (deleted, or its disk/volume is unmounted); remount the volume or reconnect from an existing folder`}function iEe(e,n,t=TK,r=tEe){let o=e.load(),i=o===void 0?Number.NaN:Date.parse(o.lastExitAt),s=n-i,d=o!==void 0&&Number.isFinite(i)&&s>=0&&s<=t?o.count+1:1;return e.save({count:d,lastExitAt:new Date(n).toISOString()}),{count:d,crashLoop:d>=r}}function sEe(e){let n=new Map,t={failed:!1},r;return{observeNotification:(o,i)=>{if(t.failed)return;let s=aEe(i);if(s===void 0)return;r=Date.now();let a=dEe(i);if(YRe.has(o)){for(let[d,u]of n)u===s&&(a===void 0||a===d)&&n.delete(d);return}a!==void 0&&n.set(a,s)},failActiveTurns:o=>{if(t.failed)return;t.failed=!0;let i=Array.from(n);if(n.clear(),i.length===0)return;e.onActiveThreadsFailed?.(i.map(([d])=>d));let s=Array.from(e.sessions()),a=typeof o=="function"?o:d=>o;for(let[d,u]of i){let c=a({threadId:d,turnId:u});e.log("codex.active_turn_failed_on_connection_loss",{thread_id:d,turn_id:u,cause:c});for(let l of s)Y_(l,"turn/failed",{threadId:d,turnId:u,reason:c,...oc("infra_turn_kill")},e.log)}},activeTurnCount:()=>n.size,activeTurns:()=>Array.from(n,([o,i])=>({threadId:o,turnId:i})),lastActivityAtMs:()=>r}}function aEe(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}function dEe(e){let n=A(e.thread),t=A(e.turn);return h(e.threadId)??h(e.thread_id)??h(n?.id)??h(t?.threadId)??h(t?.thread_id)}function Y_(e,n,t,r){if(e!==void 0)try{e.handleCodexNotification(n,t)}catch(o){r("codex.notification_session_dispatch_failed",{method:n,message:o instanceof Error?o.message:String(o)})}}async function uEe(e){return e.closePromise!==void 0||(e.closePromise=(async()=>{let n=[];e.removeHandlers?.(),e.removeHandlers=void 0;for(let t of[...e.actions].reverse())try{await t()}catch(r){n.push(r instanceof Error?r:new Error(String(r)))}if(e.actions.splice(0),n[0]!==void 0)throw n[0]})()),e.closePromise}function cEe(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);return h(A(A(e.result)?.thread)?.id)}function co(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function cR(e){let n=co(e.projectSharedInstructions),t=co(e.projectPersonalInstructions),r=co(e.projectMemory);return{projectBound:e.projectId!==void 0||e.projectPublicId!==void 0||n!==void 0||t!==void 0||r!==void 0,projectSharedInstructions:n,projectPersonalInstructions:t,projectMemory:r}}function lEe(e){return(
|
|
1526
|
-
`)},promptYesNo:n=>bEe(n)}}function bEe(e){return new Promise(n=>{let t=rRe({input:process.stdin,output:process.stderr});t.question(e,r=>{t.close(),n(/^y(es)?$/i.test(r.trim()))})})}function HJ(e,n,t){return{isPidAlive:n?.isPidAlive??wEe,signalPid:n?.signalPid??((r,o)=>{process.kill(r,o)}),lockReleased:n?.lockReleased??(()=>!gl(e)),currentLockOwner:n?.currentLockOwner??(()=>Ed(e)),sleep:n?.sleep??I7,now:n?.now??(()=>Date.now()),log:n?.log??((r,o)=>{t(r,o),he(r,o)})}}function wEe(e){try{return process.kill(e,0),!0}catch(n){return(n!==null&&typeof n=="object"&&"code"in n?n.code:void 0)!=="ESRCH"}}function vEe(e,n,t,r,o,i){let s=CEe(n,r,o,i);he("process.spawn",{command:e,args:s,cwd:t,purpose:"codex.tui"});let a=a0(e,s,{cwd:t,env:process.env,stdio:"inherit"});return he("process.spawned",{command:e,args:s,cwd:t,pid:a.pid,purpose:"codex.tui"}),a.once("exit",(d,u)=>{he("process.exit",{command:e,args:s,cwd:t,pid:a.pid,code:d,signal:u,purpose:"codex.tui"})}),a}async function SEe(e){await Promise.all(Array.from(e,n=>n.handleKandanReconnect()))}function kEe(e,n){if(!Array.isArray(e))return;let t=e.find(r=>Z(r)&&typeof r.name=="string"&&r.name.toLowerCase()===n.toLowerCase()&&typeof r.value=="string");return Z(t)&&typeof t.value=="string"?t.value:void 0}function CEe(e,n,t,r){let o=PEe(t,r);return n===void 0?["--remote",e,...o]:["resume","--remote",e,...o,n]}function TEe(e,n){let t=new Set(n);return e!==void 0&&t.add(e),Array.from(t).sort((r,o)=>r-o)}function aR(e){let n=new URL(e);if(n.port==="")return;let t=Number.parseInt(n.port,10);if(!Number.isInteger(t)||t<=0||t>65535)throw new Error(`invalid Kandan URL port: ${e}`);return t}function PEe(e,n){let t=e?.model===void 0?[]:["--model",e.model],r=e?.reasoningEffort===void 0?[]:["-c",`model_reasoning_effort="${e.reasoningEffort}"`],o=n===!0?["-c",'service_tier="fast"']:[];return[...t,...r,...o]}async function IEe(e,n){let t=await e.request("thread/resume",{threadId:n});if(!("error"in t))return;if(!t.error.message.includes("no rollout found"))throw new Error(`failed to prepare Codex TUI resume: ${t.error.message}`);let r=await e.request("thread/inject_items",{threadId:n,items:[{type:"agentMessage",text:""}]});if("error"in r)throw new Error(`failed to prepare Codex TUI resume: ${r.error.message}`);let o=await e.request("thread/resume",{threadId:n});if("error"in o)throw new Error(`failed to verify Codex TUI resume: ${o.error.message}`)}async function REe(e,n,t,r){if(t.workspace===void 0||t.channel===void 0||t.threadId===void 0)return[];try{let o=await e.push(n,"session:thread_context",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId});if(Z(o)&&o.status==="ok"&&Z(o.response))return wy(o.response.messages);r("kandan.reconnect_thread_context_fetch_failed",{thread_id:t.threadId,reply:JSON.stringify(o).slice(0,300)})}catch(o){r("kandan.reconnect_thread_context_fetch_failed",{thread_id:t.threadId,message:o instanceof Error?o.message:String(o)})}return[]}async function DEe(e,n,t,r){if(!(t.workspace===void 0||t.channel===void 0||t.threadId===void 0))try{let o=[],i,s,a,d=0;for(let u=0;u<EEe;u+=1){let c=await e.push(n,"session:thread_transcript",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,...a===void 0?{}:{cursor:a}});if(!Z(c)||c.status!=="ok"||!Z(c.response))return r("kandan.reconnect_thread_transcript_fetch_failed",{thread_id:t.threadId,page:u,reply:JSON.stringify(c).slice(0,300)}),u===0?void 0:{nodes:o,budget:i,threadTitle:s};let l=X9(c.response);if(l===void 0)return u===0?void 0:{nodes:o,budget:i,threadTitle:s};i=i??l.budget,s=s??l.threadTitle,o=[...l.nodes,...o],d+=l.nodes.reduce((f,y)=>y.kind==="reasoning"?f:f+y.body.length,0);let p=i?.maxEmissionTokens,m=p!==void 0&&d/4>=p;if(!l.hasMore||l.cursor===void 0||m)break;a=l.cursor}return{nodes:o,budget:i,threadTitle:s}}catch(o){r("kandan.reconnect_thread_transcript_fetch_failed",{thread_id:t.threadId,message:o instanceof Error?o.message:String(o)})}}async function GJ(e,n,t,r,o,i){i("kandan.reconnect_thread_unarchive_started",{codex_thread_id:n,discovered_by:r,message:o});try{let s=await Mi("thread/unarchive",e.request("thread/unarchive",{threadId:n}));if("error"in s)throw new Error(`thread/unarchive failed: ${s.error.message}`);let a=await Mi("thread/resume",e.request("thread/resume",t));if("error"in a)throw new Error(`thread/resume after unarchive failed: ${a.error.message}`);return i("kandan.reconnect_thread_unarchive_resumed",{codex_thread_id:n,discovered_by:r}),{mode:"resumed"}}catch(s){let a=s instanceof Error?s.message:String(s);throw i("kandan.reconnect_thread_unarchive_failed",{codex_thread_id:n,discovered_by:r,archive_error:o,message:a}),new Error(r==="forced_inject_not_found"?`thread/inject_items failed: ${o}; archive recovery failed: ${a}`:a)}}async function $Ee(e,n,t,r){let o={threadId:n,...t},i;if(r.forceRehydrate===!0)i="the server marked the durable engine session dead after an acknowledged-but-unexecuted turn";else{let a=await Mi("thread/resume",e.request("thread/resume",o));if(!("error"in a))return{mode:"resumed"};if(MEe(a.error.message))return await GJ(e,n,o,"resume_archived",a.error.message,r.log);i=a.error.message}r.log(r.forceRehydrate===!0?"kandan.reconnect_thread_rehydrate_forced":"kandan.reconnect_thread_resume_failed",{codex_thread_id:n,message:i,forced:r.forceRehydrate===!0,rehydrating:!0});let s;try{let a;try{a=await r.buildRehydrationItems?.(i)}catch(c){r.log("kandan.reconnect_thread_rehydration_items_failed",{codex_thread_id:n,message:c instanceof Error?c.message:String(c)}),a=void 0}let d=a!==void 0&&a.length>0?[...a]:[{type:"agentMessage",text:await r.buildRehydrationText(i)}],u=await Mi("thread/inject_items",e.request("thread/inject_items",{threadId:n,items:d}));if("error"in u){if(r.forceRehydrate===!0&&AEe(u.error.message))return await GJ(e,n,o,"forced_inject_not_found",u.error.message,r.log);s=`thread/inject_items failed: ${u.error.message}`}else{let c=await Mi("thread/resume",e.request("thread/resume",o));"error"in c&&(s=`rehydrated thread/resume failed: ${c.error.message}`)}}catch(a){s=a instanceof Error?a.message:String(a)}if(s!==void 0)throw r.log("kandan.reconnect_thread_rehydration_failed",{codex_thread_id:n,resume_failure:i,rehydration_failure:s}),new Error(`could not resume this thread's engine session (${i}) and rebuilding a fresh session from the thread transcript also failed (${s})`);return r.log("kandan.reconnect_thread_rehydrated",{codex_thread_id:n,resume_failure:i}),{mode:"rehydrated",resumeFailure:i}}async function OEe(e,n,t,r,o){let i="agent_provider_unavailable:codex";if(o("kandan.start_instance_codex_app_server_unavailable",{controlType:r.type,thread_id:oi(r)??null,instanceId:t}),r.type==="start_instance"||r.type==="reconnect_thread")try{await Co(e,n,r,"failed",i,{instanceId:t,failureClass:"engine_unavailable"})}catch(s){o("kandan.start_instance_unavailable_state_push_failed",{agent_provider:"codex",message:s instanceof Error?s.message:String(s)})}throw new Error(i)}async function QI(e,n,t,r,o,i,s,a,d,u,c,l,p,m,f,y,x,b,S,v,w,k,R,P,O,E,j){if(e===void 0)switch(f.type){case"remote_codex_exec":case"remote_codex_exec_cancel":return await XI(f,r,s.value,a,d,y);case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"clone_repository":break;case"set_workspace_viewport":break;case"start_instance":case"reconnect_thread":{let M=wm(f);if(M.type==="ok"&&M.provider==="claude-code"||S!==void 0)break;return await OEe(n,t,r,f,y)}default:return{instanceId:r,controlType:f.type,requestId:"requestId"in f?h(f.requestId)??null:null,ok:!1,error:"agent_provider_unavailable:codex"}}let z=()=>{if(e===void 0)throw new Error("shared codex app-server connection is unavailable");return e};switch(f.type){case"set_workspace_viewport":return WRe(o.kandanUrl,f.url),{instanceId:r,controlType:f.type,ok:!0,url:f.url};case"start_instance":{let M=qr(f.cwd,s.value),J=wm(f),K="starting_codex_session",G;switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let W=J.provider;if(!M.ok){y("kandan.start_instance_cwd_rejected",{thread_id:oi(f)??null,reason:M.reason,allowedCwdCount:s.value.length});try{await aK(n,t,f,M.reason,s.value,{instanceId:r})}catch(me){y("kandan.start_instance_cwd_failed_state_push_failed",{reason:M.reason,message:me instanceof Error?me.message:String(me)})}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason,allowedCwds:s.value}}if(!i.includes(W)){try{await Co(n,t,f,"failed",XJ(W),{instanceId:r,failureClass:"engine_unavailable"})}catch(me){y("kandan.start_instance_unavailable_state_push_failed",{agent_provider:W,message:me instanceof Error?me.message:String(me)})}return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unavailable:${W}`}}let te=ca(f,"processing",`starting ${UEe(W)} session`,{instanceId:r});te!==void 0&&n.push(t,"message_state",te).catch(me=>{y("kandan.start_instance_processing_state_push_failed",{message:me instanceof Error?me.message:String(me)})});try{let me=await S?.(f,M.cwd);if(me!==void 0)return me;if(W==="codex"){let ce=eK(o,f);if(ce!==void 0){try{await Co(n,t,f,"failed",ce,{instanceId:r,failureClass:"provider_binding_rejected"})}catch(Ie){y("kandan.start_instance_wafer_state_push_failed",{message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,ok:!1,error:ce}}}return W==="claude-code"?(K="starting_claude_code_session",(await tK({kandan:n,topic:t,control:f,options:o,log:y,debugTrace:x,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,activeClaudeCodeSessions:u,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,ensureClaudeCodeForwardPortSession:p,disposeClaudeCodeForwardPortSession:m,resumeSessionId:co(f.resumeSessionId),leaseEpochFor:w,onLiveSourceSeqAccepted:k,onUndeliveredFollowUpsAtClose:P,claudeThreadAccessStore:j,setStartupStage:Ie=>{K=Ie}})).controlResponse):(await RK({codex:z(),kandan:n,topic:t,control:f,options:o,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,onStartedThread:b,startAgentReplayCodex:v,setStartupStage:ce=>{K=ce},setStartedCodexThreadId:ce=>{G=ce}})).controlResponse}catch(me){let ge=ZJ(K,me);y("kandan.start_instance_failed",{stage:K,message:me instanceof Error?me.message:String(me),thread_id:ln(f,"threadId")??null,source_seq:Y(f.sourceSeq)??Y(f.rootSeq)??null,codex_thread_id:G??null});try{await Co(n,t,f,"failed",ge,{codexThreadId:G,instanceId:r,failureClass:QJ(K)})}catch{}throw me}}case"reconnect_thread":{let M=qr(f.cwd,s.value),J=wm(f),K="starting_codex_session";if(!M.ok){try{await aK(n,t,f,M.reason,s.value,{instanceId:r})}catch(Ie){y("kandan.reconnect_thread_cwd_failed_state_push_failed",{reason:M.reason,message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason,allowedCwds:s.value}}switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let G=J.provider;if(!i.includes(G)){try{await Co(n,t,f,"failed",XJ(G),{instanceId:r,failureClass:"engine_unavailable"})}catch(Ie){y("kandan.reconnect_thread_unavailable_state_push_failed",{agent_provider:G,message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unavailable:${G}`}}let W=co(f.codexThreadId);if(W===void 0)return{instanceId:r,controlType:f.type,ok:!1,error:"missing_codex_thread_id"};let te=co(f.workDescription),me=await S?.(f,M.cwd);if(me!==void 0)return me;if(G==="codex"){let Ie=eK(o,f);if(Ie!==void 0)return{instanceId:r,controlType:f.type,ok:!1,error:Ie}}if(G==="claude-code"){let Ie=u.get(W);if(Ie!==void 0&&te!==void 0){let Re=Y(f.rootSeq),I=Y(f.sourceSeq)??Re,L=_e=>{let Te=_e.disposition==="parked"?ca(f,"queued",pc(_e.queuePosition),{instanceId:r,codexThreadId:W}):ca(f,"processing","queued Claude Code input",{instanceId:r,codexThreadId:W});Te!==void 0&&n.push(t,"message_state",Te).catch(ae=>{y("kandan.reconnect_thread_queue_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})})},U=Qo(Ne(f.attachments)??[]),ie=await aS({cwd:M.cwd,kandanUrl:o.kandanUrl,token:o.token,fetch:o.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:I,body:te,attachments:U}).then(_e=>({ok:!0,content:_e})).catch(_e=>({ok:!1,error:_e}));if(!ie.ok){let _e=ie.error instanceof Error?ie.error.message:String(ie.error),Te=`Claude Code input attachment download failed: ${_e}`;try{await Co(n,t,f,"failed",Te,{instanceId:r,codexThreadId:W,failureClass:"attachment_download_failed"})}catch(ae){y("kandan.reconnect_thread_queue_failed_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:_e}}let se=ln(f,"threadId"),Q=ln(f,"channel");if(I!==void 0&&se!==void 0&&Q!==void 0&&R?.(Q,se,{seq:I,type:"thread.message",actorKind:void 0,actorSlug:void 0,actorUserId:void 0,threadId:se,threadTitle:void 0,replyToSeq:Y(f.rootSeq),localRunnerEventType:void 0,body:te,attachments:U,traceparent:h(f.traceparent)}),Q!==void 0&&se!==void 0&&O?.({channel:Q,threadId:se,sourceSeq:I})===!0)return y("claude_code.message_duplicate_ignored",{linzumi_thread_id:se,claude_session_id:W,body_preview:Fd(te),source_seq:I??null}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0};await Xp({cwd:M.cwd,threadKey:Ie.threadId,turnRef:I===void 0?`followup-${Date.now()}`:`seq-${I}`,log:(_e,Te)=>y(_e,Te)});try{let _e=Ie.enqueueInput({content:ie.content,sourceSeq:I});if(_e==="duplicate")return y("claude_code.message_duplicate_ignored",{linzumi_thread_id:ln(f,"threadId")??null,claude_session_id:W,body_preview:Fd(te),source_seq:I??null}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0};L(_e),y("claude_code.message_queued",{linzumi_thread_id:ln(f,"threadId")??null,claude_session_id:W,body_preview:Fd(te),message_received_at_ms:Date.now(),source_seq:I??null}),x?.record("commander","claude.input_queued",{linzumiThreadId:ln(f,"threadId")??null,claudeSessionId:W,sourceSeq:I??null,bodyPreview:Fd(te)})}catch(_e){let Te=_e instanceof Error?_e.message:String(_e),ae=`Claude Code input queue closed: ${Te}`;try{await Co(n,t,f,"failed",ae,{instanceId:r,codexThreadId:W,failureClass:"claude_input_queue_closed"})}catch(Ee){y("kandan.reconnect_thread_queue_closed_state_push_failed",{message:Ee instanceof Error?Ee.message:String(Ee)})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_session_closed",message:Te}}if(I!==void 0){let _e=I,Te=Ie,ae="Claude Code session did not respond after resume - send your message again to start fresh",Ee=E;Ex({windowMs:Ee?.windowMs??Uf(process.env),isDelivered:()=>Te.inputDelivered(_e),isSessionClosed:()=>ks(u,[W],[Te.threadId])===void 0,lastSdkActivityMs:()=>Te.lastSdkActivityMs(),hasPendingBlockingRequest:()=>km({threadId:Te.threadId,pendingApprovals:c,pendingQuestions:l}),log:y,onWedged:dt=>{let Ke=Ee?.recordWedge(Te.threadId,_e)??Number.MAX_SAFE_INTEGER;y("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:Te.threadId,claude_session_id:W,source_seq:_e,waited_ms:dt.waitedMs,cause:dt.cause,attempt:Ee===void 0?null:Ke,dispatch:"queued_input"});let Dt=()=>{Ee?.clear(Te.threadId,_e),Co(n,t,f,"failed",ae,{instanceId:r,codexThreadId:W,failureClass:"claude_dispatch_wedged"}).catch(X=>{y("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:Te.threadId,source_seq:_e,message:X instanceof Error?X.message:String(X)})})};if(Ee!==void 0&&Ke===1){Co(n,t,f,"processing","restarting Claude Code session to recover this message",{instanceId:r,codexThreadId:W}).catch(()=>{}),Ee.killAndRespawn({threadId:Te.threadId,claudeSessionId:W,reason:`claude_dispatch_liveness: no SDK output within ${dt.waitedMs}ms of queued input (seq ${_e})`}).then(X=>{X==="no_replay_path"&&Dt()}).catch(X=>{y("claude_code.dispatch_supervisor_respawn_failed",{linzumi_thread_id:Te.threadId,source_seq:_e,message:X instanceof Error?X.message:String(X)}),Dt()});return}Dt()}})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0}}if(Ie!==void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_active_session_requires_work_description"};{let Re=ln(f,"threadId"),I=ln(f,"channel"),L=Y(f.sourceSeq)??Y(f.rootSeq);if(te!==void 0&&Re!==void 0&&I!==void 0&&L!==void 0&&O?.({channel:I,threadId:Re,sourceSeq:L})===!0)return y("claude_code.replayed_turn_already_applied_ignored",{linzumi_thread_id:Re,claude_session_id:W,body_preview:Fd(te),source_seq:L,replayed:f.replayed===!0}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0}}try{let Re=ca(f,"processing","resuming Claude Code session",{instanceId:r,codexThreadId:W});return Re!==void 0&&n.push(t,"message_state",Re).catch(L=>{y("kandan.reconnect_thread_processing_state_push_failed",{message:L instanceof Error?L.message:String(L)})}),K="starting_claude_code_session",(await tK({kandan:n,topic:t,control:f,options:o,log:y,debugTrace:x,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,resumeSessionId:W,activeClaudeCodeSessions:u,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,ensureClaudeCodeForwardPortSession:p,disposeClaudeCodeForwardPortSession:m,leaseEpochFor:w,onLiveSourceSeqAccepted:k,onUndeliveredFollowUpsAtClose:P,claudeThreadAccessStore:j,setStartupStage:L=>{K=L}})).controlResponse}catch(Re){let I=ZJ(K,Re);y("kandan.reconnect_thread_failed",{stage:K,message:Re instanceof Error?Re.message:String(Re),thread_id:ln(f,"threadId")??null,source_seq:Y(f.sourceSeq)??Y(f.rootSeq)??null,agent_provider:G,provider_session_key:W});try{await Co(n,t,f,"failed",I,{codexThreadId:W,instanceId:r,failureClass:QJ(K)})}catch{}throw Re}}o.codexUrl===void 0&&jx(M.cwd,{configHome:ta()});let ge=_l(o,f),ce=b===void 0?void 0:await Mi("thread/attach",b(f,M.cwd,W));if(te!==void 0){let Ie=Y(f.rootSeq),Re=Y(f.sourceSeq)??Ie;if(ce===void 0||Re===void 0)throw new Error("cannot reconnect a Kandan thread without a session");let I=ln(f,"channel"),L=ln(f,"threadId");if(I!==void 0&&L!==void 0&&O?.({channel:I,threadId:L,sourceSeq:Re})===!0)return y("kandan.reconnect_thread_seq_already_applied",{linzumi_thread_id:L,codex_thread_id:W,source_seq:Re}),{instanceId:r,controlType:f.type,cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,duplicate:!0};let U=ln(f,"workspace"),ie=await $Ee(z(),W,$p({cwd:M.cwd,fast:ge.fast,channelSession:{model:ge.model,reasoningEffort:ge.reasoningEffort,approvalPolicy:ge.approvalPolicy,sandbox:ge.sandbox,sandboxedApprovalNeverDefault:ge.sandboxedApprovalNeverDefault}}),{forceRehydrate:f.sessionRehydrate===!0,log:y,buildRehydrationItems:async _e=>{let Te=await DEe(n,t,{workspace:U,channel:I,threadId:L},y);if(Te===void 0||Te.nodes.length===0)return;let ae=Y9({nodes:Te.nodes,budget:Te.budget,resumeFailure:_e,threadTitle:Te.threadTitle,linzumiContext:Ks(f.linzumiContext)});return y("kandan.reconnect_thread_rehydration_ir_emitted",{linzumi_thread_id:L,codex_thread_id:W,emitted_nodes:ae.emittedNodeCount,omitted_nodes:ae.omittedNodeCount,redacted_reasoning:ae.redactedReasoningCount,emitted_token_estimate:ae.emittedTokenEstimate,max_emission_tokens:ae.maxEmissionTokens}),ae.items},buildRehydrationText:async _e=>tF({messages:await REe(n,t,{workspace:U,channel:I,threadId:L},y),resumeFailure:_e,linzumiContext:Ks(f.linzumiContext)})});if(ie.mode==="rehydrated"){he("runner.thread_resume_rehydrated",{purpose:"linzumi.thread_runner",threadId:L??null,codexThreadId:W,sourceSeq:Re,resumeFailure:ie.resumeFailure});try{await Co(n,t,f,"processing","rebuilt the coding session from durable thread history after an unresumable engine session",{codexThreadId:W,instanceId:r})}catch(_e){y("kandan.reconnect_thread_rehydrated_state_push_failed",{message:_e instanceof Error?_e.message:String(_e)})}}let se=_o(o.token),Q=Qo(Ne(f.attachments)??[]);await ce.startThreadMessageTurn({seq:Re,body:te,actorSlug:se.actorUsername,actorUserId:se.actorUserId,attachments:Q,boundStartTimeout:!0})}return{instanceId:r,controlType:f.type,cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W}}case"list_claude_code_sessions":{let M=qr(f.cwd,s.value);if(!M.ok)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason};if(!i.includes("claude-code"))return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let J;try{J=await r5({cwd:M.cwd,limit:Y(f.limit),messagesPerSession:Y(f.messagesPerSession),provider:o.claudeCodeSessionHistoryProvider})}catch(K){return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:K instanceof Error?`claude_code_session_history_failed:${K.message}`:"claude_code_session_history_failed"}}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!0,cwd:M.cwd,matchedRoot:M.matchedRoot,sessions:J}}case"list_agent_slash_commands":{let M=qr(f.cwd,s.value);if(!M.ok)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason};let J=h(f.agentProvider)??"claude-code";if(J!=="claude-code")return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:`agent_provider_unsupported:${J}`};if(!i.includes("claude-code"))return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let K=h(f.providerSessionKey),G=K===void 0?void 0:u.get(K);if(G===void 0)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"no_active_claude_session"};try{return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!0,cwd:M.cwd,matchedRoot:M.matchedRoot,provider:"claude-code",providerSessionKey:K,commands:await G.slashCommands()}}catch(W){return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:W instanceof Error?`agent_slash_commands_failed:${W.message}`:"agent_slash_commands_failed"}}}case"browse_directory":return B1e(f,o);case"create_project":return W1e(f,o,s);case"clone_repository":return await Q1e(f,o,s);case"suggest_tasks":return Y1e(f,o,s.value,{kandan:n,topic:t});case"remote_codex_exec":return await XI(f,r,s.value,a,d,y);case"remote_codex_exec_cancel":return await XI(f,r,s.value,a,d,y);case"start_turn":{let M=await z().request("turn/start",{threadId:f.threadId,input:f.input});return{instanceId:r,controlType:f.type,response:M}}case"steer_turn":{let M=ks(u,[f.providerSessionKey,f.threadId],[f.threadId]);if(M!==void 0){let W=e2e(f.input);if(W===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_requires_text_input"};let te;try{te=M.steerTurn(W)}catch(Re){let I=Re instanceof Error?Re.message:String(Re);return y("claude_code.steer_failed",{thread_id:f.threadId,message:I}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_failed",message:I,threadId:f.threadId}}if(!await qEe(te.applied))return y("claude_code.steer_not_applied",{thread_id:f.threadId,steered:te.steered}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_not_applied",message:"The turn finished before the steering message could be applied. Linzumi will retry it as its own message automatically; if nothing happens shortly, send it as a new message.",threadId:f.threadId};let ge=Y(f.sourceSeq),ce=h(f.workspace),Ie=h(f.channel);return ge!==void 0&&ce!==void 0&&Ie!==void 0&&n.push(t,"message_state",{workspace:ce,channel:Ie,thread_id:f.threadId,instance_id:r,seq:ge,status:"processed",reason:Yp,agent_provider:"claude-code"}).catch(Re=>{y("claude_code.steer_terminal_state_push_failed",{thread_id:f.threadId,seq:ge,message:Re instanceof Error?Re.message:String(Re)})}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",steered:te.steered,threadId:f.threadId}}let J=f.providerSessionKey??f.threadId,K=h(f.turnId);if(K===void 0)return{instanceId:r,controlType:f.type,agentProvider:"codex",threadId:f.threadId,ok:!1,error:"codex_steer_target_turn_unknown",message:"No live session tracks this thread, so the running turn cannot be steered from here. Linzumi will run the message as its own turn instead."};let G=await z().request("turn/steer",{threadId:J,expectedTurnId:K,input:xy(f.input)});return{instanceId:r,controlType:f.type,response:G}}case"interrupt_turn":{let M=ks(u,[f.threadId]);if(M!==void 0){let K=await M.interruptTurn("Interrupted by Linzumi");return{instanceId:r,controlType:f.type,agentProvider:"claude-code",interrupted:K,threadId:f.threadId}}let J=await z().request("turn/interrupt",{threadId:f.threadId,turnId:f.turnId??null});return{instanceId:r,controlType:f.type,response:J}}case"rewind_thread":return u.get(f.threadId)!==void 0||f.agentProvider==="claude-code"?{instanceId:r,controlType:f.type,agentProvider:"claude-code",requestId:h(f.requestId)??null,threadId:f.threadId,ok:!1,error:"claude_code_rewind_unsupported",message:"Claude Code does not support rewind yet"}:{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,threadId:f.threadId,ok:!1,error:"rewind_not_supported",message:"This runner does not support rewinding threads yet"};case"interrupt_queued_messages":{let M=h(f.agentProvider)?.trim();if(M!=="claude-code"){let G=await z().request("turn/interrupt",{threadId:f.threadId,turnId:null});return{instanceId:r,controlType:f.type,response:G}}let J=ks(u,[f.threadId]);if(J===void 0)return{instanceId:r,controlType:f.type,agentProvider:M,ok:!1,error:"claude_code_session_not_active"};await J.interruptTurn("Claude Code interrupted by Linzumi"),J.abortController.abort(new Error("Claude Code interrupted by Linzumi"));let K=Y(f.throughSeq)??J.currentSourceSeq();if(K!==void 0)try{await ii(n,t,{workspace:J.workspace,channel:J.channel,threadId:J.threadId,sourceSeq:K,status:"failed",reason:"Claude Code interrupted by Linzumi",sessionId:f.threadId})}catch(G){y("kandan.claude_code_interrupt_state_push_failed",{message:G instanceof Error?G.message:String(G),thread_id:J.threadId,source_seq:K,claude_session_id:f.threadId})}return{instanceId:r,controlType:f.type,agentProvider:M,interrupted:!0,threadId:f.threadId}}case"stop_turn":{let M=ks(u,[f.threadId,f.providerSessionKey],[f.threadId]);if(M!==void 0){let K=await FEe({activeSession:M,sessionKey:f.providerSessionKey??f.threadId,publishMessageState:G=>ii(n,t,G),log:y});return y("claude_code.turn_stopped",{thread_id:M.threadId,claude_session_id:f.providerSessionKey??f.threadId,discarded_queued_source_seqs:K}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,ok:!0,stopped:!0,confirmedHalt:!0}}let J=h(f.agentProvider)?.trim();if(J!=="claude-code")try{let K=await z().request("turn/interrupt",{threadId:f.providerSessionKey??f.threadId,turnId:f.turnId??null});return{instanceId:r,controlType:f.type,agentProvider:"codex",threadId:f.threadId,ok:!0,stopped:!0,confirmedHalt:!0,response:K}}catch(K){y("codex.stop_turn_no_session_interrupt_failed",{thread_id:f.threadId,message:K instanceof Error?K.message:String(K)})}return{instanceId:r,controlType:f.type,agentProvider:J??null,threadId:f.threadId,ok:!1,error:"stop_turn_session_not_active"}}case"resolve_codex_approval_request":{let M=c.get(f.requestId);if(M===void 0){if(f.agentProvider==="claude-code")return{instanceId:r,controlType:f.type,skipped:!0};let K=await z().request("resolve_codex_approval_request",{...f});return{instanceId:r,controlType:f.type,response:K}}if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_provider_mismatch"};if(M.sessionId!==void 0&&f.threadId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_session_mismatch"};let J=M.decisions.get(f.decision);return J===void 0?(y("runner.claude_code_approval_unknown_decision",{instanceId:r,requestId:f.requestId,decision:f.decision,threadId:M.threadId,claudeSessionId:M.sessionId}),{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_unknown_decision",decision:f.decision}):(M.resolve(J),await ii(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,status:J.type==="allow"?"processing":"failed",reason:J.type==="allow"?"Claude Code tool approved":"Claude Code tool denied by Linzumi",sessionId:M.sessionId}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",requestId:f.requestId,decision:f.decision,resolved:!0})}case"resolve_claude_user_input_request":{let M=l.get(f.requestId);if(M===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,requestId:f.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(f.threadId!==M.threadId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(M.sessionId!==void 0&&f.sessionId!==void 0&&f.sessionId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_session_mismatch"};let J=f.answers.map(G=>({questionId:G.questionId,selectedLabels:G.selectedLabels??[],freeText:h(G.freeText)})),K=HEe({pending:M,answers:J,actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()});switch(K.type){case"error":{y("runner.claude_code_user_input_resolution_failed",{instanceId:r,requestId:f.requestId,error:K.error,selectedLabels:[...K.selectedLabels],threadId:M.threadId,claudeSessionId:M.sessionId,kind:M.kind}),M.resolve({type:"deny",message:K.error});try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:{kind:"Denied",reason:K.error,answers:J.map(G=>({questionId:G.questionId,selectedLabels:[...G.selectedLabels],freeText:G.freeText})),actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(G){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:G instanceof Error?G.message:String(G)}),G}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,ok:!1,error:K.error,selectedLabels:[...K.selectedLabels],requestKind:M.kind,denied:!0}}case"resolved":M.resolve(K.decision);break}{let G=ks(u,[M.sessionId,h(f.sessionId)],[M.threadId]);if(G!==void 0){let W=M.threadId,te=M.sourceSeq,me=M.sessionId;Ex({windowMs:E?.windowMs??Uf(process.env),isDelivered:()=>M.resolved(),isSessionClosed:()=>ks(u,[me],[W])===void 0,lastSdkActivityMs:()=>G.lastSdkActivityMs(),hasPendingBlockingRequest:()=>km({threadId:W,pendingApprovals:c,pendingQuestions:l}),log:y,onWedged:ge=>{let ce="Claude Code did not continue after your answer - the runner restarted the session; send your message again to continue";y("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:W,claude_session_id:me??null,source_seq:te,waited_ms:ge.waitedMs,cause:ge.cause,dispatch:K.dispatch}),G.abortController.abort(new Error(ce)),(async()=>{let Ie=G.sessionWork();Ie!==void 0&&await Promise.race([Ie.catch(()=>{}),new Promise(Re=>{setTimeout(Re,1e4).unref?.()})]),await ii(n,t,{workspace:M.workspace,channel:M.channel,threadId:W,sourceSeq:te,status:"failed",reason:ce,sessionId:me,failureClass:"claude_dispatch_wedged"})})().catch(Ie=>{y("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:W,source_seq:te,message:Ie instanceof Error?Ie.message:String(Ie)})})}})}}try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:K.answerState,streamState:"completed"})}catch(G){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:G instanceof Error?G.message:String(G)}),G}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,answers:J.map(G=>({questionId:G.questionId,selectedLabels:[...G.selectedLabels],...h(G.freeText)===void 0?{}:{freeText:h(G.freeText)}})),actorUserId:f.actorUserId,actorSlug:f.actorSlug,requestKind:M.kind,resolved:!0}}case"deny_claude_user_input_request":{let M=l.get(f.requestId);if(M===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,requestId:f.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(f.threadId!==M.threadId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(M.sessionId!==void 0&&f.sessionId!==void 0&&f.sessionId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_session_mismatch"};M.resolve({type:"deny",message:f.reason??"Denied by Linzumi"});try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:{kind:"Denied",reason:f.reason??"Denied by Linzumi",actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(J){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:J instanceof Error?J.message:String(J)}),J}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,reason:f.reason??"Denied by Linzumi",actorUserId:f.actorUserId,actorSlug:f.actorSlug,denied:!0}}case"read_thread":{let M=await z().request("thread/read",{threadId:f.threadId,includeTurns:f.includeTurns??!0});return{instanceId:r,controlType:f.type,response:M}}case"update_session_settings":{let M=h(f.threadId),J=ks(u,[M],[M]),K=h(f.approvalPolicy)??void 0,G=h(f.sandbox)??void 0;if(J===void 0)return{instanceId:r,controlType:f.type,skipped:!0};let W=await J.updateSettings({model:h(f.model)??void 0,approvalPolicy:K,reasoningEffort:h(f.reasoningEffort)??void 0}),te=h(W.model),me=h(W.approval_policy),ge=h(W.reasoning_effort),ce=h(f.sandbox);if(fEe({appliedModel:te,appliedApprovalPolicy:me,appliedReasoningEffort:ge,controlSandbox:ce})){let Ie={workspace:J.workspace,channel:J.channel,thread_id:J.threadId,codex_thread_id:f.threadId,updated_at:new Date().toISOString(),...te!==void 0?{model:te}:{},...me!==void 0?{approvalPolicy:me}:{},...ge!==void 0?{reasoningEffort:ge}:{},...ce!==void 0?{sandbox:ce}:{}},Re=await n.push(t,"session:settings",Ie);if(!(Z(Re)&&Re.status==="ok"))throw new Error(`kandan push failed: session:settings: ${JSON.stringify(Re).slice(0,500)}`)}return me!==void 0&&j?.record(J.threadId,{approvalPolicy:me,sandbox:G}),W.approval_policy==="never"&&await DK({kandan:n,topic:t,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,sessionThreadId:J.threadId,actorUserId:f.actorUserId,actorSlug:f.actorSlug,log:y,reason:"full_access_enabled"}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,applied:W}}case"stop_instance":case"kill_instance":{let M="threadId"in f&&typeof f.threadId=="string"?f.threadId:void 0,J=M===void 0?void 0:u.get(M);return J!==void 0?(await J.interruptTurn("Claude Code stopped by Linzumi"),J.abortController.abort(new Error("Claude Code stopped by Linzumi")),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M,stopped:!0}):{instanceId:r,controlType:f.type,skipped:!0}}case"resolve_port_forward_request":case"update_thread_interaction_access":case"set_port_forward_enabled":case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"start_local_editor":case"update_runner_config":case"fleet_breaker_state":case"set_commander_impl":case"replace_runner":return{instanceId:r,controlType:f.type,skipped:!0}}}async function XI(e,n,t,r,o,i){switch(e.type){case"remote_codex_exec":{let s=h(e.requestId)?.trim(),a=new AbortController;s!==void 0&&s!==""&&o.set(s,a);let d=await i3(e,{instanceId:n,allowedCwds:t,sandboxRunner:r,abortSignal:a.signal});return s!==void 0&&s!==""&&o.delete(s),i("remote_codex_exec.handled",{requestId:h(e.requestId)??null,ok:d.ok===!0,error:typeof d.error=="string"?d.error:null}),d}case"remote_codex_exec_cancel":{let s=h(e.requestId)?.trim();if(s===void 0||s==="")return{instanceId:n,controlType:e.type,ok:!1,error:"request_id_required"};let a=o.get(s);return a!==void 0&&(a.abort(new Error("remote_codex_exec_cancelled")),o.delete(s)),{instanceId:n,controlType:e.type,requestId:s,ok:!0,cancelled:a!==void 0}}}}function ZJ(e,n){let t=LEe(n instanceof Error?n.message:String(n));switch(e){case"checking_project_trust":return`Codex could not start because this folder is not trusted locally. Trust the folder with linzumi paths add, or restart the runner from a trusted folder. Detail: ${t}`;case"starting_claude_code_session":return`Claude Code did not create a session. Restart the local runner and try again. Detail: ${t}`;case"claude_code_session_failed":return`Claude Code created a session, but the session failed before completing. Try starting the agent again; if it repeats, share this failed message with the runner owner. Detail: ${t}`;case"posting_claude_code_output":return`Claude Code created a session, but Linzumi could not post its response to this thread. Try starting the agent again; if it repeats, reconnect the local runner. Detail: ${t}`;case"starting_codex_session":return`Codex did not create a session. Restart the local runner and try again. Detail: ${t}`;case"binding_kandan_thread":return`Codex started, but Linzumi could not attach it to this thread. Try starting the agent again; if it repeats, share this failed message with the runner owner. Detail: ${t}`;case"starting_first_turn":return`Codex started, but the first prompt could not be delivered. Try sending the message again; if it repeats, reconnect the local runner. Detail: ${t}`}}function QJ(e){return e==="checking_project_trust"?"project_untrusted":"start_stage_transient"}function XJ(e){switch(e){case"claude-code":return"Claude Code is not available on this computer. Reconnect a local runner with Claude Code auth and try again.";case"codex":return"Codex is not available on this computer. Reconnect a local runner with Codex support and try again."}}function t0(e,n){let t=e.trim();if(t.length<=n)return t;let r=" ... ";if(n<r.length+2)return t.slice(t.length-Math.max(1,n));let o=Math.max(1,Math.floor((n-r.length)/3)),i=Math.max(1,n-r.length-o);return`${t.slice(0,o)}${r}${t.slice(t.length-i)}`}function LEe(e){return t0(e,240)}function jEe(e){let n=e.interruptActiveTurn(e.reason),t=e.interruptSessionControls;if(t!==void 0)try{t().catch(r=>{e.log("claude_code.session_control_interrupt_failed",{thread_id:e.threadId,message:r instanceof Error?r.message:String(r)})})}catch(r){e.log("claude_code.session_control_interrupt_failed",{thread_id:e.threadId,message:r instanceof Error?r.message:String(r)})}return n}async function FEe(e){let{activeSession:n}=e;n.interruptTurnBeforeAbort("stopped by user");let t=n.discardQueuedFollowUpsForStop();n.abortController.abort(new Error("stopped by user"));let r=n.currentSourceSeq(),o=[...new Set([r,...t].filter(s=>s!==void 0))],i=new Set(t);for(let s of o)try{await e.publishMessageState({workspace:n.workspace,channel:n.channel,threadId:n.threadId,sourceSeq:s,status:"interrupted",reason:"stopped by user",sessionId:e.sessionKey}),i.has(s)&&n.markFollowUpSeqDiscarded(s)}catch(a){e.log("kandan.claude_code_stop_state_push_failed",{message:a instanceof Error?a.message:String(a),thread_id:n.threadId,source_seq:s})}return t}function ks(e,n,t=[]){let r=n.filter(i=>i!==void 0&&i!=="");for(let i of r){let s=e.get(i);if(s!==void 0)return s}let o=t.filter(i=>i!==void 0&&i!=="");if(o.length>0){for(let i of e.values())if(o.includes(i.threadId))return i}}async function qEe(e){let n;try{return await Promise.race([e,new Promise(t=>{n=setTimeout(()=>t(!0),zEe),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}}function YJ(e,n){switch(e.agentReplay?.provider){case"codex":return["codex"];case"claude-code":return["claude-code"];case"auto":case void 0:break}switch(e.claudeCodeRunner!==void 0||(n===void 0?e.claudeCodeAvailable===!0:n==="logged_in")){case!0:return["codex","claude-code"];case!1:return["codex"]}}function NEe(e){if(e.agentReplay?.provider==="codex"||e.codexUrl!==void 0||la(e))return!0;switch(e.dependencyStatus?.codex.available){case!1:return!1;case!0:case void 0:return!0}}function wm(e){let n=h(e.agentProvider)?.trim();switch(n){case void 0:case"":case"codex":return{type:"ok",provider:"codex"};case"claude-code":return{type:"ok",provider:"claude-code"};default:return{type:"unsupported",value:n}}}function UEe(e){switch(e){case"codex":return"Codex";case"claude-code":return"Claude Code"}}function r0(e){let n=h(e.modelProvider)?.trim(),t=A(e.llmProxy),r=h(t?.baseUrl)?.trim(),o=h(t?.token)?.trim(),i=r!==void 0&&r!==""&&o!==void 0&&o!==""?{baseUrl:r,token:o}:void 0;return n===void 0||n===""?i===void 0?{type:"none"}:{type:"provider",runtime:{provider:"openai-proxy",llmProxyBaseUrl:i.baseUrl,llmProxyToken:i.token}}:n!=="wafer"?{type:"error",error:`model_provider_unsupported:${n}`}:i===void 0?{type:"error",error:"wafer_model_provider_missing_llm_proxy"}:{type:"provider",runtime:{provider:"wafer",llmProxyBaseUrl:i.baseUrl,llmProxyToken:i.token}}}function PK(e){if(e.type==="error")return e.error;if(e.type==="provider"&&e.runtime.provider==="openai-proxy"&&gs()===void 0)return"codex_llm_proxy_requires_openai_api_key"}function eK(e,n){let t=r0(n);switch(t.type){case"none":return;case"error":return t.error;case"provider":{let r=PK(t);return r!==void 0?r:e.codexModelProvider?.provider===t.runtime.provider?void 0:t.runtime.provider==="wafer"?"wafer_model_provider_requires_thread_worker":"llm_proxy_model_provider_requires_thread_worker"}}}function BEe(e){if(e.linzumiAgentMcpToken===void 0||e.linzumiAgentMcpToken===""||lP(e.env))return;let n=JEe(e.env,e.kandanUrl);if(n===void 0||n==="")return YI("cloud agent turn requires a server URL (kandanUrl) and none was configured; refusing to run the @linzumi agent turn on the host");if(KEe(n))return YI(`cloud agent turn requires a PUBLICLY reachable server URL for the guest VM, got loopback ${n}; set LINZUMI_CLOUD_AGENT_PUBLIC_URL to the server's public base URL (e.g. https://serve.linzumi.com)`);if(!Cd(e.env))return YI("smolcloud is the required execution path for @linzumi agent turns but no smolcloud API key resolved (SMOLCLOUD_API_KEY / cloud.apiKeyFile / SMOL_CLOUD_TOKEN); refusing to run the agent on the render host (set LINZUMI_VM_CLOUD_AGENT=0 only to explicitly opt back into host execution)");let t;try{t=xs()}catch{throw new Error("workspace-agent cloud vm.json is present but invalid; refusing to arm the cloud agent turn on a corrupt config")}let r=M9({env:e.env,config:t});if(r===void 0)throw new Error("workspace-agent cloud execution is enabled but no smolcloud API key resolved");let o=t?.agent,i={...o?.image===void 0?{}:{image:o.image},...o?.allowCidrs===void 0?{}:{allowCidrs:o.allowCidrs},...o?.autoStopSeconds===void 0?{}:{autoStopSeconds:o.autoStopSeconds}},s=e.modelProviderRuntime===void 0?void 0:(()=>{let a=u0(e.modelProviderRuntime);return{id:a.id,name:a.name,baseUrl:a.baseUrl,envKey:a.envKey,wireApi:a.wireApi,...a.httpHeaders===void 0?{}:{httpHeaders:a.httpHeaders},...a.envHttpHeaders===void 0?{}:{envHttpHeaders:a.envHttpHeaders}}})();return D9({connection:r,workspaceSlug:e.workspaceSlug,kandanUrl:n,linzumiAgentMcpToken:e.linzumiAgentMcpToken,ownerUsername:e.ownerUsername,modelProvider:s,llmProxyToken:e.modelProviderRuntime?.llmProxyToken,agentSpec:i,prewarm:!0})}function YI(e){return()=>Promise.reject(new kt(e))}function JEe(e,n){let t=e.LINZUMI_CLOUD_AGENT_PUBLIC_URL?.trim();return t!==void 0&&t!==""?t:n}function KEe(e){try{let n=new URL(e).hostname.toLowerCase();return n==="localhost"||n==="127.0.0.1"||n==="::1"||n==="0.0.0.0"}catch{return!1}}function u0(e){let n=`${e.llmProxyBaseUrl.replace(/\/+$/,"")}/v1`;switch(e.provider){case"wafer":return{id:"linzumi",name:"Linzumi Proxy",baseUrl:n,envKey:"LINZUMI_LLM_PROXY_TOKEN",wireApi:"responses"};case"openai-proxy":return{id:"linzumi",name:"Linzumi Proxy",baseUrl:n,envKey:"OPENAI_API_KEY",wireApi:"responses",envHttpHeaders:{"x-linzumi-llm-proxy-token":"LINZUMI_LLM_PROXY_TOKEN"}}}}function IK(e){switch(e.provider){case"wafer":return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken};case"openai-proxy":{let n=gs();if(n===void 0)throw new Error("codex llm proxy requires API-key auth (OPENAI_API_KEY in the environment or $CODEX_HOME/auth.json); ChatGPT OAuth credentials cannot be forwarded");return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken,OPENAI_API_KEY:n}}}}async function RK(e){e.options.codexUrl===void 0&&(e.setStartupStage("checking_project_trust"),jx(e.cwd,{configHome:ta()})),e.setStartupStage("starting_codex_session");let n=co(e.control.developerPrompt),t=Ks(e.control.linzumiContext),r=_l(e.options,e.control),o=await Mi("thread/start",e.codex.request("thread/start",{cwd:e.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",developerInstructions:Lp({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:!la(e.options)||hR(e.options),devServicesAvailable:!la(e.options),developerPrompt:n,...cR(e.control),linzumiContext:t}),...f2e(r)})),i=cEe(o);e.setStartedCodexThreadId(i);let s=co(e.control.workDescription);i!==void 0&&n!==void 0&&await u2e(e.kandan,e.topic,e.control,n,i);let a;if(i!==void 0&&e.onStartedThread!==void 0&&(e.setStartupStage("binding_kandan_thread"),a=await Mi("thread/attach",e.onStartedThread(e.control,e.cwd,i))),i!==void 0&&s!==void 0){e.setStartupStage("starting_first_turn");let d=Y(e.control.rootSeq),u=Y(e.control.sourceSeq)??d,c=Qo(Ne(e.control.attachments)??[]);if(a===void 0||u===void 0)throw new ox({codexThreadId:i,kandanThreadId:ln(e.control,"threadId"),hasThreadSession:a!==void 0,sourceSeq:u});let l=_o(e.options.token);e.startAgentReplayCodex?.(),await a.startThreadMessageTurn({seq:u,body:s,actorSlug:l.actorUsername,actorUserId:l.actorUserId,attachments:c,boundStartTimeout:!0})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,cwd:e.cwd,matchedRoot:e.matchedRoot,response:o},providerSession:{provider:"codex",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:i}}}function VEe(e){let n=e.LINZUMI_CLAUDE_TURN_STALL_MS?.trim();if(n===void 0||n==="")return 6e5;let t=Number.parseInt(n,10);return Number.isFinite(t)&&t>0?t:6e5}function WEe(e){let n=e.onInputDelivered,t=e.isLiveSteerAllowed,r=e.onInputWait,o=e.onSourceSeqDelivered,i=[eR(e.content)],s=[e.sourceSeq],a=[],d=new Set,u=[],c=new Map,l=v=>new Promise(w=>{c.set(v,w)}),p=(v,w)=>{let k=c.get(v);k!==void 0&&(c.delete(v),k(w))},m={closed:!1},f=()=>{for(;m.closed;){let v=u.shift();if(v===void 0)return;v({done:!0,value:void 0})}},y=(v,w)=>{s.push(w),n?.(),w!==void 0&&o!==void 0&&!d.has(w)&&(d.add(w),o(w));let k=u.shift();if(k===void 0){i.push(v);return}p(v,!0),k({done:!1,value:v})},x=(v,w)=>s.length>0?(a.push({message:v,sourceSeq:w}),{disposition:"parked",queuePosition:a.length}):(y(v,w),{disposition:"delivered"}),b=v=>{if(m.closed)throw new Error("Claude Code streaming input is closed");let w=eR(v.content);return x(w,v.sourceSeq)},S=v=>{if(m.closed)throw new Error("Claude Code streaming input is closed");let w=eR(v),k=l(w);if(s.length===0)return x(w,void 0),{steered:"steered_queued",applied:k};if(t?.()===!1)return x(w,void 0),{steered:"steered_queued",applied:k};let R=u.shift();return R===void 0?i.push(w):(p(w,!0),R({done:!1,value:w})),{steered:"steered_live",applied:k}};return{messages:{[Symbol.asyncIterator](){return{next(){let v=i.shift();return v!==void 0?(p(v,!0),Promise.resolve({done:!1,value:v})):m.closed?Promise.resolve({done:!0,value:void 0}):(r?.(s[0]),new Promise(w=>{u.push(w)}))}}}},close:()=>{if(s.length===0)for(;a.length>0;){let v=a.shift();v!==void 0&&y(v.message,v.sourceSeq)}m.closed=!0,f();for(let[v,w]of c)c.delete(v),w(!1)},enqueue:b,enqueueSteer:S,drainUndeliveredFollowUps:()=>a.splice(0),completeTurn:()=>{let v=s.shift();if(!m.closed&&s.length===0){let w=a.shift();w!==void 0&&y(w.message,w.sourceSeq)}return v},currentSourceSeq:()=>s[0]}}function eR(e){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null}}function HEe(e){let n=e.answers.map(t=>({questionId:t.questionId,selectedLabels:[...t.selectedLabels],freeText:t.freeText}));switch(e.pending.kind){case"question":return{type:"resolved",decision:{type:"answer_question",updatedInput:s5(e.pending.originalInput,e.pending.request,e.answers)},answerState:{kind:"Answered",answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt},dispatch:"user_question_answer"};case"tool_approval":case"plan_review":{let t=e.answers.flatMap(i=>i.selectedLabels),r=t[0];if(r===void 0)return{type:"error",error:"claude_code_user_input_decision_missing",selectedLabels:t};let o=e.pending.approvalDecisions.get(r);return o===void 0?{type:"error",error:"claude_code_user_input_unknown_decision",selectedLabels:t}:{type:"resolved",decision:o,answerState:o.type==="deny"?{kind:"Denied",reason:o.message,answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt}:{kind:"Answered",answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt},dispatch:"user_input_decision"}}}}async function EK(e){let n=e.sourceSeq;if(n===void 0)return{type:"deny",message:"Claude Code user input request had no source message"};if(e.pendingQuestions.has(e.questionRequest.requestId))return{type:"deny",message:"Claude Code user input request id was already pending"};if(km({threadId:e.threadId,pendingApprovals:e.pendingApprovals,pendingQuestions:e.pendingQuestions}))return{type:"deny",message:"Claude Code already has a pending user input request"};if(e.signal.aborted)return{type:"deny",message:"Claude Code user input request cancelled by Linzumi"};let t="Claude Code user input request cancelled by Linzumi",r=e.approvalDecisions??new Map,o,i,s=!1,a=new Promise(d=>{let u=!1,c=()=>{i!==void 0&&e.signal.removeEventListener("abort",i),e.pendingQuestions.delete(e.questionRequest.requestId)},l=m=>{u||(u=!0,c(),d(m))};o=l,i=()=>{s||(s=!0,(async()=>{try{await ml(e.kandan,e.topic,{workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,sessionId:e.sessionId,leaseEpoch:e.leaseEpoch,request:e.questionRequest,answerState:{kind:"Denied",reason:t,answeredAt:new Date().toISOString()},streamState:"interrupted"})}catch(m){console.error("kandan.claude_code_user_input_abort_publish_failed",e.questionRequest.requestId,m instanceof Error?m.message:String(m))}finally{l({type:"deny",message:t})}})())};let p={sessionId:e.sessionId,workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,leaseEpoch:e.leaseEpoch,request:e.questionRequest,resolve:l,resolved:()=>u};switch(e.kind){case"question":e.pendingQuestions.set(e.questionRequest.requestId,{...p,kind:"question",originalInput:e.request.input});break;case"tool_approval":case"plan_review":e.pendingQuestions.set(e.questionRequest.requestId,{...p,kind:e.kind,approvalDecisions:r});break}});if(i!==void 0&&(e.signal.addEventListener("abort",i,{once:!0}),e.signal.aborted))return i(),a;try{await ml(e.kandan,e.topic,{workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,sessionId:e.sessionId,leaseEpoch:e.leaseEpoch,request:e.questionRequest,answerState:{kind:"NeedsAnswer"},streamState:"streaming"})}catch(d){return o?.({type:"deny",message:d instanceof Error?`Claude Code user input request push failed: ${d.message}`:"Claude Code user input request push failed"}),a}return a}async function ml(e,n,t){await e.push(n,"session:stream_thread_message",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,stream_key:d5(t.request.requestId),body:t.request.title,...t.leaseEpoch===void 0?{}:{lease_epoch:t.leaseEpoch},payload:{source_message_seq:t.sourceSeq,agent_provider:"claude-code",...t.sessionId===void 0?{}:{codex_thread_id:t.sessionId,provider_session_key:t.sessionId,claude_session_id:t.sessionId},structured:a5({request:t.request,sessionId:t.sessionId,sourceSeq:t.sourceSeq,answerState:t.answerState,streamState:t.streamState})}})}function km(e){return[...e.pendingApprovals.values()].some(n=>n.threadId===e.threadId)||[...e.pendingQuestions.values()].some(n=>n.threadId===e.threadId)}async function GEe(e){let n=i5(e.request),t=new Map(n.choices.map(r=>[r.label,r.permissionDecision]));return EK({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingApprovals,pendingQuestions:e.pendingQuestions,workspace:e.workspace,channel:e.channel,threadId:e.threadId,sessionId:e.sessionId,sourceSeq:e.sourceSeq,request:e.request,questionRequest:n.request,kind:n.request.requestSource==="claude_code_plan_review"?"plan_review":"tool_approval",approvalDecisions:t,leaseEpoch:e.leaseEpoch,signal:e.signal})}function nK(){return nR.value===void 0&&(nR.value=tq(nq(process.env))),nR.value}async function tK(e){try{return await rK(e)}catch(n){if(!(n instanceof na))throw n;e.log("claude_code.dispatch_liveness_respawn_retry",{thread_id:ln(e.control,"threadId")??null,resume_session_id:e.resumeSessionId??null,waited_ms:n.waitedMs});try{return await rK(e)}catch(t){throw t instanceof na?new Error(ZEe):t}}}async function rK(e){let n=hl(e.control,"workspace"),t=hl(e.control,"channel"),r=hl(e.control,"threadId"),o=Y(e.control.rootSeq),i=Y(e.control.sourceSeq)??o,s=co(e.control.workDescription);if(e.debugTrace?.record("commander","claude.provider_start",{controlType:e.control.type,instanceId:e.instanceId,workspace:n,channel:t,threadId:r,rootSeq:o??null,sourceSeq:i??null,resumeSessionId:e.resumeSessionId??null,cwd:e.cwd}),s===void 0)throw new Error("start_instance control missing workDescription");if(e.log("claude_code.turn_starting",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId??null,body_preview:Fd(s),message_received_at_ms:Date.now()}),e.resumeSessionId!==void 0){let q=await nK().acquire();(q.waitedMs>0||q.timedOut)&&e.log("claude_code.resume_start_throttled",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId,waited_ms:q.waitedMs,timed_out:q.timedOut})}let a=q=>{e.log("claude_code.turn_terminal",{turn_id:null,outcome:"failed",reason:q,thread_id:r,claude_session_id:e.resumeSessionId??null})},d,u=!1,c=!1,l,p=!1,m,f=0,y=!1,x=!1,b=!1,S,v=!1,w=q=>({workspace:n,channel:t,thread_id:r,codex_thread_id:q,provider_session_key:q,agent_provider:"claude-code",claude_session_id:q,cwd:e.cwd,instance_id:e.instanceId}),k=()=>{if(!u||!c||d===void 0)return;let q=()=>{let je=d;if(p||!u||!c||je===void 0)return;p=!0;let re=e.kandan.push(e.topic,"session:typing_start",w(je)).then(()=>{}).catch(Ce=>{e.log("kandan.claude_code_typing_heartbeat_failed",{thread_id:r,claude_session_id:je,message:Ce instanceof Error?Ce.message:String(Ce)})}).finally(()=>{p=!1});m=re,re.finally(()=>{m===re&&(m=void 0)})};q(),l===void 0&&(l=setInterval(q,cRe),l.unref?.())},R=()=>{if(y){x=!0;return}u=!0,f+=1,k()},P=()=>{x&&(x=!1,R())},O=()=>{if(y){b=!0;return}ce.completeTurn()},E=()=>{b&&(b=!1,O())},j=()=>{b=!1,v=!0,ce.completeTurn()},z=async(q,je)=>{let re,Ce=new Promise(oo=>{re=setTimeout(()=>oo("timeout"),pRe),re.unref?.()}),hn=await Promise.race([q.then(()=>"processed"),Ce]);re!==void 0&&clearTimeout(re),hn==="timeout"&&e.log("claude_code.terminal_processing_timeout",{linzumi_thread_id:r,claude_session_id:je.sessionId,event_type:je.type})},M=async(q,je)=>{let re,Ce=new Promise(oo=>{re=setTimeout(()=>oo("timed_out"),lRe),re.unref?.()}),hn=await Promise.race([q.then(()=>"settled"),Ce]);return re!==void 0&&clearTimeout(re),hn==="timed_out"&&e.log("kandan.claude_code_typing_start_wait_timeout",{thread_id:r,claude_session_id:je}),hn},J=async()=>{let q=u,je=d,re=f;if(u=!1,l!==void 0&&(clearInterval(l),l=void 0),!(!q||!c||je===void 0))try{let Ce=m;if(Ce!==void 0&&await M(Ce,je)==="timed_out"&&m===Ce&&(m=void 0,p=!1),u||f!==re)return;await e.kandan.push(e.topic,"session:typing_stop",w(je))}catch(Ce){e.log("kandan.claude_code_typing_stop_failed",{thread_id:r,claude_session_id:je,message:Ce instanceof Error?Ce.message:String(Ce)})}},K=Qo(Ne(e.control.attachments)??[]),G=await aS({cwd:e.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:i,body:s,attachments:K}).then(q=>({ok:!0,content:q})).catch(q=>({ok:!1,error:q}));if(!G.ok){let q=G.error instanceof Error?G.error.message:String(G.error),je=`Claude Code input attachment download failed: ${q}`;a(je);try{await Co(e.kandan,e.topic,e.control,"failed",je,{instanceId:e.instanceId,failureClass:"attachment_download_failed"})}catch(re){e.log("kandan.start_instance_claude_code_attachment_failed_state_push_failed",{message:re instanceof Error?re.message:String(re)})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:q}}}let W=()=>{},te=!1,me=new Promise(q=>{W=q}),ge=()=>{te||(te=!0,setImmediate(W))},ce=WEe({content:G.content,sourceSeq:i,onInputDelivered:R,isLiveSteerAllowed:()=>!y,onInputWait:q=>{q===void 0&&ge()},onSourceSeqDelivered:q=>{Ie.add(q),e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:q})}}),Ie=new Set,Re=new Set,I=0,L=co(e.control.developerPrompt),U=Ks(e.control.linzumiContext),ie=_l(e.options,e.control),se=h(e.control.approvalPolicy)!==void 0,Q=e.claudeThreadAccessStore?.resolve(r),_e=Im(e.options),Te=se?ie.approvalPolicy:Q?.approvalPolicy??_e.approvalPolicy,ae=se?ie.sandbox:Q?.sandbox??_e.sandbox,Ee=Te===void 0?void 0:Op(Te,ae),dt=Ee!==void 0?tR(Ee):ie.approvalPolicy===void 0?void 0:tR(ie.approvalPolicy);if(Ee!==void 0&&e.claudeThreadAccessStore?.record(r,{approvalPolicy:Ee,sandbox:ae}),e.resumeSessionId!==void 0)try{await t5({cwd:e.cwd,sessionId:e.resumeSessionId,validator:e.options.claudeCodeSessionValidator})}catch(q){throw a(q instanceof Error?q.message:String(q)),q}let Ke={runnerIdentity:_o(e.options.token),codexVersion:void 0},Dt=new AbortController,X=Dp({stop:()=>{Dt.signal.aborted||Dt.abort(new Error("engine child reaper teardown"))},pid:void 0,ownProcessGroup:!1,kind:"claude_code"}),pe=new Set(i===void 0?[]:[i]),$e={value:void 0},_n=!1,Ge,Je=[],In=!1,wt,$r=vs({kandanUrl:e.options.kandanUrl,accessToken:e.options.token,fetchImpl:e.options.fetch,operatingMode:"text"}),qa=s.trim().slice(0,2e3),xi=eN({replacePlanSteps:$r.replaceCodingJobPlanSteps,threadId:r,goal:qa,log:e.log}),N=async()=>{if(e.resumeSessionId!==void 0)return;let q=5e3,je=new AbortController,re,Ce=new Promise(hn=>{re=setTimeout(()=>{je.abort(new Error("claude goal seed timed out")),e.log("claude_code.goal_seed_timeout",{thread_id:r,timeout_ms:q}),hn()},q)});try{await Promise.race([nN({upsertCodingJobPlan:$r.upsertCodingJobPlan,threadId:r,goal:qa,log:e.log,signal:je.signal}),Ce])}finally{re!==void 0&&clearTimeout(re)}},ne=Gq({instanceId:e.instanceId,cwd:e.cwd,threadKey:`${n}:${t}:${r}`,persistDir:e.options.claudeCodeRunner===void 0?ym():void 0,wire:()=>({workspaceSlug:n,channelSlug:t,kandanThreadId:r,codexThreadId:d??e.resumeSessionId,rootSeq:o,leaseEpoch:e.leaseEpochFor?.(r)}),push:async(q,je,re,Ce)=>{let hn=await e.kandan.push(e.topic,q,je,Ce);if(Z(hn)&&hn.status==="ok")return hn;throw new Error(`kandan push failed: ${q}: ${JSON.stringify(hn).slice(0,500)}`)},preparePush:(q,je)=>Og({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,cwd:e.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,log:(re,Ce)=>e.log(re,Ce)},q,je),runnerPayload:(q,je,re,Ce)=>td({...e.options,cwd:e.cwd},e.instanceId,q,je,Ke,re,Ce),currentSourceSeq:ce.currentSourceSeq,onTurnTerminal:(q,je,re,Ce,hn)=>{e.log("claude_code.turn_terminal",{turn_id:q,outcome:je,reason:re??null,thread_id:r,claude_session_id:d??null}),je==="completed"&&hn!==void 0&&e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:hn}),S?.(),S=void 0},onTodoWriteCompleted:xi.handleTodoWrite,suppressProcessingState:()=>{for(let q of e.pendingClaudeCodeApprovals.values())if(q.threadId===r)return!0;for(let q of e.pendingClaudeCodeUserQuestions.values())if(q.threadId===r)return!0;return!1},log:e.log,debugTrace:e.debugTrace}),oe=e.options.claudeCodeRunner===void 0&&LN(process.env)?jN({captureDir:mt(xK(),`linzumi-claude-live-bash-${e.instanceId}`),onOutputDelta:(q,je)=>{d!==void 0&&ne.handleTranscriptEvent({type:"command_output_delta",sessionId:d,itemKey:q,delta:je})},log:(q,je)=>e.log(q,je)}):void 0,le,ve;try{let q=UK(),je=yR(e.options);le=je.cleanup;let re=hs({command:q.command,argsPrefix:q.argsPrefix,kandanUrl:e.options.kandanUrl,authFilePath:je.path,ownerUsername:c0(e.options),operatingMode:"text",cwd:e.cwd,threadId:r,toolScope:e.options.codingJobToolScope,devServices:{scope:e.options.runnerId,ownerPid:gR(e.options)}});ve=k5(re)}catch(q){le?.(),le=void 0,e.log("claude_code.mcp_config_failed",{message:q instanceof Error?q.message:String(q),thread_id:r})}let De={kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,cwd:e.cwd,initialPrompt:s,rootSeq:o,log:e.log},dn=new Map,zn=async q=>{let je=Date.now(),re=rT(q.rateLimit,je);e.log("claude_code.rate_limit",{linzumi_thread_id:r,claude_session_id:q.sessionId??d??null,rate_limit_summary:`claude/${q.rateLimit.rateLimitType??"account"} ${re}`,status:q.rateLimit.status??null,utilization_percent:q.rateLimit.utilizationPercent??null,resets_at_ms:q.rateLimit.resetsAtMs??null});let Ce=q.rateLimit.rateLimitType??"account",hn=c2e(q.rateLimit);if(hn!==dn.get(Ce))try{await l2e({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,claudeSessionId:q.sessionId??d,rateLimit:q.rateLimit}),dn.set(Ce,hn)}catch(oo){e.log("claude_code.rate_limit_post_failed",{thread_id:r,message:oo instanceof Error?oo.message:String(oo)})}},On=async q=>{if(I=Date.now(),e.debugTrace?.record("claude-transcript","transcript.event",{eventType:q.type,threadId:r,activeSessionId:d??null,event:q}),Na.observeTranscriptEvent(q),q.type==="tool_call"&&q.toolName==="Bash"){let re=h(q.input.command);re!==void 0&&hy(r,re)}try{await n2e(De,q)}catch(re){e.log("claude_code.session_store_mirror_failed",{session_id:q.sessionId??null,event_type:q.type,message:re instanceof Error?re.message:String(re)})}if(q.type==="session_started"){d=q.sessionId,e.log("claude_code.session_started",{linzumi_thread_id:r,claude_session_id:q.sessionId}),e.activeClaudeCodeSessions.set(q.sessionId,{abortController:Dt,workspace:n,channel:t,threadId:r,currentSourceSeq:ce.currentSourceSeq,pauseOutbox:()=>ne.pauseOutbox(),resumeOutbox:()=>ne.resumeOutbox(),inputDelivered:re=>Ie.has(re)||Re.has(re),lastSdkActivityMs:()=>I,enqueueInput:re=>{if(re.sourceSeq!==void 0&&pe.has(re.sourceSeq))return"duplicate";let Ce=ce.enqueue(re);return re.sourceSeq!==void 0&&pe.add(re.sourceSeq),Ce},closeInput:ce.close,hasActiveTurn:()=>ne.activeTurnId()!==void 0,sessionWork:()=>$e.value,steerTurn:ce.enqueueSteer,interruptTurn:async re=>{let Ce=ne.interruptActiveTurn(re);return await Ge?.interrupt(),Ce},interruptTurnBeforeAbort:re=>{let Ce=Ge;return jEe({reason:re,threadId:r,interruptActiveTurn:hn=>ne.interruptActiveTurn(hn),interruptSessionControls:Ce===void 0?void 0:()=>Ce.interrupt(),log:e.log})},discardQueuedFollowUpsForStop:()=>ce.drainUndeliveredFollowUps().map(Ce=>Ce.sourceSeq).filter(Ce=>Ce!==void 0),markFollowUpSeqDiscarded:re=>{Re.add(re)},slashCommands:async()=>{if(In)return Je;let re=await Ge?.supportedCommands();return In||re!==void 0&&(Je=re),Je},updateSettings:async re=>{let Ce={};if(re.model!==void 0&&(await Ge?.setModel(rR(re.model)),Ce.model=re.model),re.approvalPolicy!==void 0){let hn=tR(re.approvalPolicy);hn!==void 0&&(await Ge?.setPermissionMode(hn),Ce.approval_policy=re.approvalPolicy)}if(re.reasoningEffort!==void 0){let hn=oK(re.reasoningEffort);hn!==void 0&&(await Ge?.setEffort?.(hn),Ce.reasoning_effort=re.reasoningEffort)}return Ce}}),e.ensureClaudeCodeForwardPortSession?.({sessionId:q.sessionId,workspace:n,channel:t,threadId:r,cwd:e.cwd,rootSeq:o,currentSourceSeq:ce.currentSourceSeq}),ne.handleTranscriptEvent(q),await e.kandan.push(e.topic,"session:bind",{workspace:n,channel:t,thread_id:r,codex_thread_id:q.sessionId,provider_session_key:q.sessionId,agent_provider:"claude-code",claude_session_id:q.sessionId,cwd:e.cwd,instance_id:e.instanceId}),c=!0,R();return}if(q.type==="slash_command_catalog"){Je=q.commands,q.source==="commands_changed"&&(In=!0);return}let je=q.type==="turn_completed"||q.type==="turn_interrupted"||q.type==="session_completed"||q.type==="session_failed";if(je){y=!0;let re=ne.activeTurnId(),Ce=!1,hn=()=>{},oo=()=>{Ce=!0,hn()},Or=new Promise(Ho=>{hn=Ho});S=oo,ne.handleTranscriptEvent(q);let io=q.type==="turn_completed"||q.type==="turn_interrupted",Ve=io||re!==void 0||Ce;try{Ve?(await z(Or,q),await ne.flush(fRe)):S===oo&&(S=void 0)}catch(Ho){e.log("claude_code.terminal_typing_flush_timeout",{linzumi_thread_id:r,claude_session_id:q.sessionId,event_type:q.type,message:Ho instanceof Error?Ho.message:String(Ho)})}S===oo&&(S=void 0),io&&(j(),ce.currentSourceSeq()!==void 0&&ge()),(q.type==="session_completed"||q.type==="session_failed")&&d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),q.type==="session_completed"&&ge(),y=!1,await J(),E(),P(),await gy({threadKey:r,workspace:n,channel:t,threadId:r,push:(Ho,Go)=>e.kandan.push(e.topic,Ho,Go),log:(Ho,Go)=>e.log(Ho,Go)})}if((q.type==="turn_completed"||q.type==="session_completed")&&e.log("claude_code.turn_completed",{linzumi_thread_id:r,claude_session_id:q.sessionId,body_source:q.bodySource??null,body_preview:Fd(q.body)}),q.type==="rate_limit"&&await zn(q),q.type==="tool_result"&&oe?.settleTool(q.itemKey),(q.type==="turn_interrupted"||q.type==="session_failed")&&oe?.settleAll(),q.type==="session_failed"&&e.log("claude_code.session_failed",{linzumi_thread_id:r,claude_session_id:q.sessionId??null,model_transport_lane:to.lane,reason:q.reason,api_error_status:q.apiErrorProvenance?.status??null,api_error_request_id:q.apiErrorProvenance?.requestId??null,api_error_message:q.apiErrorProvenance?.message??null}),q.type==="usage"){let re=Z4(q.usage);re!==void 0&&e.log("claude_code.token_usage",{linzumi_thread_id:r,claude_session_id:q.sessionId,token_usage_summary:re})}je||ne.handleTranscriptEvent(q)},Vo=A(e.control.llmProxy),yt=h(Vo?.baseUrl)?.trim(),Zt=h(Vo?.token)?.trim(),to=pq({env:process.env,llmProxyBindingPresent:yt!==void 0&&yt!==""&&Zt!==void 0&&Zt!=="",hostedLinzumiAgentContext:e.control.linzumiAgent!==void 0||e.options.threadProcess?.role==="thread"&&e.options.linzumiAgentMcpToken!==void 0,routedNonAnthropicModel:MK(ie.model)!==void 0});e.log("claude_code.model_transport_lane",{linzumi_thread_id:r,lane:to.lane,credential_class:to.credentialClass,reason:to.reason});let Na=gq({lane:to.lane,workspace:n,channel:t,threadId:r,model:rR(ie.model),push:(q,je)=>e.kandan.push(e.topic,q,je),log:e.log}),Wo,zu,Ua;if(to.lane==="llm_proxy"&&yt!==void 0&&yt!==""&&Zt!==void 0&&Zt!==""){try{Wo=await dq({upstreamBaseUrl:yt,initialToken:Zt,log:(je,re)=>e.log(je,{linzumi_thread_id:r,...re}),debugTrace:e.debugTrace,debugTraceId:e.debugTrace===void 0?void 0:`claude-code:${e.instanceId}`,dispatcher:ei()?.dispatcher,onUpstreamRateLimited:({retryAfterMs:je})=>nK().notifyRateLimited({retryAfterMs:je})});let q=Wo;zu=uq({relay:Wo,mint:()=>a2e(e.kandan,e.topic,q.currentToken()),log:(je,re)=>e.log(je,{linzumi_thread_id:r,...re})})}catch(q){e.log("llm_proxy_relay.start_failed_fallback_to_env_token",{linzumi_thread_id:r,message:q instanceof Error?q.message:String(q)}),Wo=void 0,zu=void 0}Ua=Wo!==void 0?sK(process.env,{baseUrl:Wo.baseUrl},ie.model):sK(process.env,{baseUrl:yt,token:Zt},ie.model)}else Ua=s2e(process.env);let Se=hRe(Ua),wp=()=>ce.currentSourceSeq()!==void 0&&!km({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),Oe=(q,je)=>{if(QEe(q.toolName))return Promise.resolve({type:"allow"});let re=o5(q);switch(re.type){case"question":return(async()=>{await J();let Ce=await EK({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ce.currentSourceSeq(),request:q,questionRequest:re.request,kind:"question",approvalDecisions:void 0,leaseEpoch:e.leaseEpochFor?.(r),signal:je});return R(),Ce})();case"invalid":return Promise.resolve({type:"deny",message:re.message});case"not_question":return GEe({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ce.currentSourceSeq(),request:q,leaseEpoch:e.leaseEpochFor?.(r),signal:je})}},ro=(async()=>{let q;await N(),await Xp({cwd:e.cwd,threadKey:r,turnRef:i===void 0?"session-start":`seq-${i}`,log:(re,Ce)=>e.log(re,Ce)});let je=oK(ie.reasoningEffort);try{try{q=await n5({cwd:e.cwd,prompt:s,includeHookEvents:!0,developerInstructions:Lp({cwd:e.cwd,agentLabel:"Claude Code",planTool:"todo-write",devServicesAvailable:!0,developerPrompt:L,...cR(e.control),linzumiContext:U}),model:rR(ie.model),...typeof je=="string"?{effort:je}:{},...e.debugTrace===void 0?{}:{claudeCodeDebugFile:mt(e.debugTrace.runDir,"claude-code-debug.log")},...dt===void 0?{}:{permissionMode:dt},resumeSessionId:e.resumeSessionId,abortController:Dt,streamingInput:ce,...e.options.claudeCodeRunner===void 0?{turnStallThresholdMs:VEe(process.env),turnStallIsActive:wp,apiWaitStatusThresholdMs:1e4,apiWaitStatusItemKey:re=>{let Ce=ce.currentSourceSeq();return Ce===void 0?void 0:`system:claude-api-wait:${Ce}:${re}`}}:{},runner:e.options.claudeCodeRunner,debugTrace:e.debugTrace,canUseTool:Oe,...ve===void 0?{}:{mcpServers:ve},...oe===void 0?{}:{preToolUseHookMatchers:oe.hookMatchers,wrapApprovedToolInput:(re,Ce,hn)=>Ce==="Bash"?oe.wrapApprovedTool(re,hn):void 0},env:Se,allowedTools:["mcp__linzumi__*"],onSessionControls:re=>{Ge=re,dt==="bypassPermissions"&&(wt=DK({kandan:e.kandan,topic:e.topic,pendingClaudeCodeApprovals:e.pendingClaudeCodeApprovals,pendingClaudeCodeUserQuestions:e.pendingClaudeCodeUserQuestions,sessionThreadId:r,log:e.log,reason:"full_access_started"}).catch(Ce=>{e.log("claude_code.startup_approval_drain_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:Ce instanceof Error?Ce.message:String(Ce)})}))},onTurnCompleted:()=>{v?v=!1:O(),ce.currentSourceSeq()!==void 0&&ge()},onTranscriptEvent:On})}finally{let Ce=ce.drainUndeliveredFollowUps().map(hn=>hn.sourceSeq).filter(hn=>hn!==void 0);Ce.length>0&&e.onUndeliveredFollowUpsAtClose!==void 0&&e.onUndeliveredFollowUpsAtClose({channel:t,threadId:r,sourceSeqs:Ce}),d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),await J(),ce.close(),le?.(),oe?.close()}}catch(re){throw ne.submitLifecycle("codexDied",re instanceof Error?re.message:String(re)),await ne.close(5e3).catch(()=>{}),await Promise.race([xi.settle().catch(()=>{}),new Promise(Ce=>{setTimeout(Ce,5e3).unref?.()})]),a(re instanceof Error?re.message:String(re)),_n||e.setStartupStage("claude_code_session_failed"),re}return _n||e.setStartupStage("posting_claude_code_output"),await ne.awaitTurnsSettled(3e4),await ne.close(3e4),await Promise.race([xi.settle(),new Promise(re=>{setTimeout(re,1e4).unref?.()})]),q})();ro.finally(()=>X.unregister()).catch(()=>{}),ro.finally(()=>{zu?.stop(),Wo?.close()}).catch(()=>{}),$e.value=ro;let qu,_i=e.options.claudeCodeRunner===void 0||process.env.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS!==void 0?Ex({windowMs:Uf(process.env),isDelivered:()=>I>0,isSessionClosed:()=>!1,lastSdkActivityMs:()=>I,hasPendingBlockingRequest:()=>km({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),log:e.log,onWedged:q=>{qu={waitedMs:q.waitedMs},e.log("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:r,claude_session_id:d??e.resumeSessionId??null,waited_ms:q.waitedMs,cause:q.cause,dispatch:e.resumeSessionId===void 0?"initial_turn":"resume_turn"}),Dt.abort(new na(q.waitedMs))}}):void 0;ro.finally(()=>_i?.stop()).catch(()=>{});let Nu;try{Nu=await Promise.race([ro.then(q=>({type:"session_ended",result:q})),me.then(()=>({type:"first_turn_settled"}))])}catch(q){throw qu!==void 0&&!(q instanceof na)?new na(qu.waitedMs):q}finally{_i?.stop()}let Ba=q=>({controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,response:{session:{id:q}}},providerSession:{provider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:q}});if(Nu.type==="session_ended")return Ba(Nu.result.sessionId);e.setStartupStage("posting_claude_code_output"),_n=!0,await ne.awaitTurnsSettled(3e4);try{await ne.flush(3e4)}catch(q){e.log("claude_code.first_turn_flush_timeout",{linzumi_thread_id:r,claude_session_id:d??null,message:q instanceof Error?q.message:String(q)})}wt!==void 0&&await wt;let vp=await Promise.race([ro.then(q=>({type:"session_ended",result:q}),()=>{}),new Promise(q=>{setImmediate(()=>q(void 0))})]);if(vp!==void 0)return Ba(vp.result.sessionId);ro.then(()=>{e.log("claude_code.session_loop_ended",{linzumi_thread_id:r,claude_session_id:d??null})},q=>{e.log("claude_code.session_loop_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:q instanceof Error?q.message:String(q)})});let Ja=d??e.resumeSessionId;if(Ja!==void 0)return Ba(Ja);let sg=await ro;return Ba(sg.sessionId)}function QEe(e){return e.startsWith("mcp__linzumi__")}function tR(e){switch(e){case"never":return"bypassPermissions";case"on-request":case"untrusted":return"default";case"on-failure":return"acceptEdits";default:return}}function oK(e){switch(e?.trim().toLowerCase()){case"default":return null;case"low":return"low";case"medium":return"medium";case"high":return"high";case"xhigh":return"xhigh";default:return}}function XEe(e,n){return[...e.entries()].filter(([,t])=>t.threadId===n)}function YEe(e,n){return[...e.entries()].flatMap(([t,r])=>{switch(r.kind){case"question":return[];case"tool_approval":case"plan_review":return r.threadId===n?[[t,r]]:[]}})}async function DK(e){let n=XEe(e.pendingClaudeCodeApprovals,e.sessionThreadId);for(let[r,o]of n)o.resolve({type:"allow"}),await ii(e.kandan,e.topic,{workspace:o.workspace,channel:o.channel,threadId:o.threadId,sourceSeq:o.sourceSeq,status:"processing",reason:"Claude Code tool approved",sessionId:o.sessionId??e.sessionThreadId}),e.log("claude_code.approval_request_auto_approved",{request_id:r,source_seq:o.sourceSeq,session_id:o.sessionId??e.sessionThreadId,reason:e.reason});let t=YEe(e.pendingClaudeCodeUserQuestions,e.sessionThreadId);for(let[r,o]of t){let i=o.approvalDecisions.get("Allow")??{type:"allow"};o.resolve(i),await ml(e.kandan,e.topic,{workspace:o.workspace,channel:o.channel,threadId:o.threadId,sourceSeq:o.sourceSeq,sessionId:o.sessionId,leaseEpoch:o.leaseEpoch,request:o.request,answerState:i.type==="deny"?{kind:"Denied",reason:i.message,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:new Date().toISOString()}:{kind:"Answered",answers:[{questionId:o.request.questions[0]?.questionId??`${r}:decision`,selectedLabels:["Allow"]}],actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"}),e.log("claude_code.user_input_request_auto_approved",{request_id:r,source_seq:o.sourceSeq,session_id:o.sessionId??e.sessionThreadId,kind:o.kind,reason:e.reason})}}function e2e(e){return _y(e)}async function n2e(e,n){let t=r2e(n);if(t===void 0)return;let r=o2e(e,n);if(r===void 0)return;let o="root",i=t2e(`${e.workspace}:${e.cwd}:${t}:${o}`);await e.kandan.push(e.topic,"claude_session_store_append",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,cwd:e.cwd,sessionId:t,subkey:o,sequence:i,entryType:n.type,payload:r})}function t2e(e){let n=iK.get(e),t=Date.now()*1e3,r=n===void 0?t:Math.max(n+1,t);return iK.set(e,r),r}function r2e(e){switch(e.type){case"unknown":case"session_failed":return e.sessionId;default:return e.sessionId}}function o2e(e,n){switch(n.type){case"assistant_delta":case"slash_command_catalog":return;case"session_started":return{prompt:e.initialPrompt,threadId:e.threadId,rootSeq:e.rootSeq??null};case"assistant_message":return{itemKey:n.itemKey,body:n.content,streamState:n.streamState};case"tool_call":return{itemKey:n.itemKey,toolName:n.toolName,input:n.input};case"tool_result":return{itemKey:n.itemKey,toolName:n.toolName??null,body:n.content,isError:n.isError};case"reasoning_delta":return;case"reasoning_message":return{itemKey:n.itemKey,body:n.content};case"command_output":return{itemKey:n.itemKey,body:n.content};case"command_output_delta":return;case"usage":return{usage:n.usage};case"rate_limit":return{body:`Claude Code rate limit: ${rT(n.rateLimit,Date.now())}`,status:n.rateLimit.status??null,rate_limit_type:n.rateLimit.rateLimitType??null,utilization_percent:n.rateLimit.utilizationPercent??null,resets_at_ms:n.rateLimit.resetsAtMs??null};case"unknown":return{itemKey:n.itemKey,body:n.summary};case"turn_completed":case"session_completed":return{body:n.body,bodySource:n.bodySource??null,usage:n.usage??null};case"turn_interrupted":return{body:"Claude Code turn interrupted"};case"session_failed":return{body:n.reason};case"agent_status":case"agent_task_update":case"permission_mode_changed":return}}function s2e(e){let n={};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);return n}async function a2e(e,n,t){let r=await e.push(n,"llm_proxy:mint_session_token",t!==void 0&&t!==""?{currentToken:t}:{});if(Z(r)&&r.status==="ok"&&Z(r.response)&&typeof r.response.token=="string"&&r.response.token!==""){let o=r.response.max_age_seconds;return{token:r.response.token,...typeof o=="number"&&Number.isFinite(o)&&o>0?{maxAgeMs:o*1e3}:{}}}}function sK(e,n,t){let r={};for(let[i,s]of Object.entries(e))s!==void 0&&(i==="ANTHROPIC_BASE_URL"||i==="ANTHROPIC_CUSTOM_HEADERS"||i.startsWith("CLAUDE_CODE_USE_")||(r[i]=s));r.ANTHROPIC_BASE_URL=n.baseUrl,n.token!==void 0&&(r.ANTHROPIC_CUSTOM_HEADERS=`${i2e}: ${n.token}`);let o=MK(t);return o!==void 0&&(r.ANTHROPIC_DEFAULT_OPUS_MODEL=o,r.ANTHROPIC_DEFAULT_SONNET_MODEL=o,r.ANTHROPIC_DEFAULT_HAIKU_MODEL=o,r.CLAUDE_CODE_SUBAGENT_MODEL=o),r}function MK(e){let n=e?.trim();switch(n){case void 0:case"":case"default":case"haiku":case"sonnet":case"opus":case"fable-5":return;default:return n.startsWith("claude")?void 0:n}}function rR(e){let n=e?.trim();switch(n){case void 0:case"":case"default":return;case"haiku":case"sonnet":case"opus":return n;case"fable-5":return"claude-fable-5";default:return d2e(n)?"sonnet":n}}function d2e(e){let n=e.toLowerCase();return n.startsWith("gpt-")||n.startsWith("o1")||n.startsWith("o3")||n.startsWith("o4")||n.startsWith("o5")||n.startsWith("codex")}async function u2e(e,n,t,r,o){let i=ln(t,"workspace"),s=ln(t,"channel"),a=ln(t,"threadId"),d=h(t.modelProvider)?.trim(),u=h(t.model)?.trim();i===void 0||s===void 0||a===void 0||await e.push(n,"session:post_thread_message",{workspace:i,channel:s,thread_id:a,body:`Starting a new Codex thread with instructions:
|
|
1528
|
+
`)}catch(r){n?.(r instanceof Error?r.message:String(r))}}}}function oEe(e,n=gl){try{if(n(e))return}catch{return}return`the runner's working directory ${e} no longer exists (deleted, or its disk/volume is unmounted); remount the volume or reconnect from an existing folder`}function iEe(e,n,t=TK,r=tEe){let o=e.load(),i=o===void 0?Number.NaN:Date.parse(o.lastExitAt),s=n-i,d=o!==void 0&&Number.isFinite(i)&&s>=0&&s<=t?o.count+1:1;return e.save({count:d,lastExitAt:new Date(n).toISOString()}),{count:d,crashLoop:d>=r}}function sEe(e){let n=new Map,t={failed:!1},r;return{observeNotification:(o,i)=>{if(t.failed)return;let s=aEe(i);if(s===void 0)return;r=Date.now();let a=dEe(i);if(YRe.has(o)){for(let[d,u]of n)u===s&&(a===void 0||a===d)&&n.delete(d);return}a!==void 0&&n.set(a,s)},failActiveTurns:o=>{if(t.failed)return;t.failed=!0;let i=Array.from(n);if(n.clear(),i.length===0)return;e.onActiveThreadsFailed?.(i.map(([d])=>d));let s=Array.from(e.sessions()),a=typeof o=="function"?o:d=>o;for(let[d,u]of i){let c=a({threadId:d,turnId:u});e.log("codex.active_turn_failed_on_connection_loss",{thread_id:d,turn_id:u,cause:c});for(let l of s)Y_(l,"turn/failed",{threadId:d,turnId:u,reason:c,...oc("infra_turn_kill")},e.log)}},activeTurnCount:()=>n.size,activeTurns:()=>Array.from(n,([o,i])=>({threadId:o,turnId:i})),lastActivityAtMs:()=>r}}function aEe(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}function dEe(e){let n=A(e.thread),t=A(e.turn);return h(e.threadId)??h(e.thread_id)??h(n?.id)??h(t?.threadId)??h(t?.thread_id)}function Y_(e,n,t,r){if(e!==void 0)try{e.handleCodexNotification(n,t)}catch(o){r("codex.notification_session_dispatch_failed",{method:n,message:o instanceof Error?o.message:String(o)})}}async function uEe(e){return e.closePromise!==void 0||(e.closePromise=(async()=>{let n=[];e.removeHandlers?.(),e.removeHandlers=void 0;for(let t of[...e.actions].reverse())try{await t()}catch(r){n.push(r instanceof Error?r:new Error(String(r)))}if(e.actions.splice(0),n[0]!==void 0)throw n[0]})()),e.closePromise}function cEe(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);return h(A(A(e.result)?.thread)?.id)}function co(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function cR(e){let n=co(e.projectSharedInstructions),t=co(e.projectPersonalInstructions),r=co(e.projectMemory);return{projectBound:e.projectId!==void 0||e.projectPublicId!==void 0||n!==void 0||t!==void 0||r!==void 0,projectSharedInstructions:n,projectPersonalInstructions:t,projectMemory:r}}function lEe(e){return(qe(e)??[]).flatMap(t=>{let r=A(t),o=h(r?.runnerId);return o===void 0?[]:[{runnerId:o,version:h(r?.version)??null}]})}function VJ(e){if(e===void 0)return{type:"missing"};let n=A(e);if(n===void 0)return{type:"invalid",reason:"runner_config_not_object"};let t=qe(n.allowedCwds);if(t===void 0)return{type:"invalid",reason:"allowed_cwds_not_array"};let r=[];for(let[s,a]of t.entries()){let d=h(a);if(d===void 0)return{type:"invalid",reason:`allowed_cwd_${s}_not_string`};r.push(d)}let o=n.configVersion,i=o==null?null:Y(o);return i===void 0?{type:"invalid",reason:"config_version_not_integer"}:{type:"ok",config:{allowedCwds:r,configVersion:i}}}function pEe(e){let n=A(e);if(A(n?.runner_config)?.rosterEnabled!==!0)return;let r=A(n?.roster),o=r===void 0?void 0:qe(r.threads);if(o===void 0)return;let i=[],s=0;for(let a of o){let d=A(a),u=h(d?.kandan_thread_id);if(u===void 0){s+=1;continue}let c=h(d?.last_activity_at),l=c===void 0?Number.NaN:Date.parse(c),p=d?.channel_id,m=Y(p),f=h(p)??(m===void 0?null:String(m));i.push({kandanThreadId:u,providerSessionKey:h(d?.provider_session_key)??null,channelId:f,title:h(d?.title)??null,channelSlug:h(d?.channel_slug)??null,cwd:h(d?.cwd)??null,lastActivityAtMs:Number.isNaN(l)?null:l})}return{threads:i,truncated:r?.truncated===!0,skippedEntries:s}}function fEe(e){return e.appliedModel!==void 0||e.appliedApprovalPolicy!==void 0||e.appliedReasoningEffort!==void 0||e.controlSandbox!==void 0}function mEe(e){if(e.debugTrace===void 0)return;let n=new Date().toISOString();return rO({dir:e.debugTrace.dir,contentMode:e.debugTrace.contentMode,runId:[n,"pid",String(process.pid),"runner",e.runnerId].join("-"),manifest:{pid:process.pid,argv:iO(process.argv),runnerId:e.runnerId,cwd:e.cwd,kandanUrl:e.kandanUrl,workspaceSlug:e.workspaceSlug??null,threadProcess:e.threadProcess??null,fast:e.fast===!0,startedAt:n}})}function lR(e){let n=e.launchTui&&e.consoleReporter===void 0?void 0:(r,o)=>{e.launchTui||vx(r,o),e.consoleReporter?.(r,o)},t=e.logFile??kg();return DO(t),Pg("runner_process"),vO(t,n)}function xEe(e,n,t,r){let o=GB({steps:{stopAccepting:()=>{n.stopAccepting()},interruptInFlightTurns:()=>n.interruptInFlightTurns().catch(s=>{t("runner.drain_interrupt_states_failed",{message:s instanceof Error?s.message:String(s)})}),checkpointCurrentTurn:()=>{},flushInboundQueues:()=>{n.flushInboundQueues()},flushOutbox:()=>e().catch(()=>{})},deadlineMs:hEe,log:(s,a)=>t(s,a),exit:(s,a)=>{let d=IO(a),u={log:(c,l)=>t(c,l)};wx({trigger:d},u),EO(s,{trigger:d,stdinWasTty:process.stdin.isTTY===!0,stdoutWasTty:process.stdout.isTTY===!0},{sinks:u})},signals:r?.signals??["SIGTERM","SIGINT","SIGHUP"]}),i=()=>{e().catch(()=>{})};return process.once("exit",i),{uninstall:()=>{o.uninstall(),process.off("exit",i)},triggerFastExitDrain:s=>o.trigger(s)}}async function _Ee(e,n,t){try{return e()}catch(r){if(!nI(r))throw r;t("runner.lock_held_by_live_process",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath});let o=n.lockTakeover,i=HJ(r.lockPath,o?.takeover,t),s=Md(r.heldBy,i.isPidAlive,()=>new Date(i.now()));if(l7(r.heldBy,jt,n.launchSource,s)){t("runner.lock_auto_takeover_for_update",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath,fromVersion:r.heldBy.cliVersion,toVersion:jt,launchSource:F_,holderState:s.state});let c=o?.prompt??WJ(o);return await uI({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:!0,prompt:c,takeover:i}),e()}if(!D7(o))throw r;let a=o.prompt??WJ(o),d=HJ(r.lockPath,o.takeover,t);if((await uI({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:o.takeOverWithoutPrompt===!0,prompt:a,takeover:d})).outcome==="declined")throw new um;return t("runner.lock_takeover_interactive",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath}),e()}}function WJ(e){return{isInteractive:()=>e?.forceNonInteractive!==!0&&process.stdin.isTTY===!0&&process.stderr.isTTY===!0,writeReport:n=>{process.stderr.write(`${n}
|
|
1529
|
+
`)},promptYesNo:n=>bEe(n)}}function bEe(e){return new Promise(n=>{let t=rRe({input:process.stdin,output:process.stderr});t.question(e,r=>{t.close(),n(/^y(es)?$/i.test(r.trim()))})})}function HJ(e,n,t){return{isPidAlive:n?.isPidAlive??wEe,signalPid:n?.signalPid??((r,o)=>{process.kill(r,o)}),lockReleased:n?.lockReleased??(()=>!gl(e)),currentLockOwner:n?.currentLockOwner??(()=>Ed(e)),sleep:n?.sleep??I7,now:n?.now??(()=>Date.now()),log:n?.log??((r,o)=>{t(r,o),he(r,o)})}}function wEe(e){try{return process.kill(e,0),!0}catch(n){return(n!==null&&typeof n=="object"&&"code"in n?n.code:void 0)!=="ESRCH"}}function vEe(e,n,t,r,o,i){let s=CEe(n,r,o,i);he("process.spawn",{command:e,args:s,cwd:t,purpose:"codex.tui"});let a=a0(e,s,{cwd:t,env:process.env,stdio:"inherit"});return he("process.spawned",{command:e,args:s,cwd:t,pid:a.pid,purpose:"codex.tui"}),a.once("exit",(d,u)=>{he("process.exit",{command:e,args:s,cwd:t,pid:a.pid,code:d,signal:u,purpose:"codex.tui"})}),a}async function SEe(e){await Promise.all(Array.from(e,n=>n.handleKandanReconnect()))}function kEe(e,n){if(!Array.isArray(e))return;let t=e.find(r=>Z(r)&&typeof r.name=="string"&&r.name.toLowerCase()===n.toLowerCase()&&typeof r.value=="string");return Z(t)&&typeof t.value=="string"?t.value:void 0}function CEe(e,n,t,r){let o=PEe(t,r);return n===void 0?["--remote",e,...o]:["resume","--remote",e,...o,n]}function TEe(e,n){let t=new Set(n);return e!==void 0&&t.add(e),Array.from(t).sort((r,o)=>r-o)}function aR(e){let n=new URL(e);if(n.port==="")return;let t=Number.parseInt(n.port,10);if(!Number.isInteger(t)||t<=0||t>65535)throw new Error(`invalid Kandan URL port: ${e}`);return t}function PEe(e,n){let t=e?.model===void 0?[]:["--model",e.model],r=e?.reasoningEffort===void 0?[]:["-c",`model_reasoning_effort="${e.reasoningEffort}"`],o=n===!0?["-c",'service_tier="fast"']:[];return[...t,...r,...o]}async function IEe(e,n){let t=await e.request("thread/resume",{threadId:n});if(!("error"in t))return;if(!t.error.message.includes("no rollout found"))throw new Error(`failed to prepare Codex TUI resume: ${t.error.message}`);let r=await e.request("thread/inject_items",{threadId:n,items:[{type:"agentMessage",text:""}]});if("error"in r)throw new Error(`failed to prepare Codex TUI resume: ${r.error.message}`);let o=await e.request("thread/resume",{threadId:n});if("error"in o)throw new Error(`failed to verify Codex TUI resume: ${o.error.message}`)}async function REe(e,n,t,r){if(t.workspace===void 0||t.channel===void 0||t.threadId===void 0)return[];try{let o=await e.push(n,"session:thread_context",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId});if(Z(o)&&o.status==="ok"&&Z(o.response))return wy(o.response.messages);r("kandan.reconnect_thread_context_fetch_failed",{thread_id:t.threadId,reply:JSON.stringify(o).slice(0,300)})}catch(o){r("kandan.reconnect_thread_context_fetch_failed",{thread_id:t.threadId,message:o instanceof Error?o.message:String(o)})}return[]}async function DEe(e,n,t,r){if(!(t.workspace===void 0||t.channel===void 0||t.threadId===void 0))try{let o=[],i,s,a,d=0;for(let u=0;u<EEe;u+=1){let c=await e.push(n,"session:thread_transcript",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,...a===void 0?{}:{cursor:a}});if(!Z(c)||c.status!=="ok"||!Z(c.response))return r("kandan.reconnect_thread_transcript_fetch_failed",{thread_id:t.threadId,page:u,reply:JSON.stringify(c).slice(0,300)}),u===0?void 0:{nodes:o,budget:i,threadTitle:s};let l=X9(c.response);if(l===void 0)return u===0?void 0:{nodes:o,budget:i,threadTitle:s};i=i??l.budget,s=s??l.threadTitle,o=[...l.nodes,...o],d+=l.nodes.reduce((f,y)=>y.kind==="reasoning"?f:f+y.body.length,0);let p=i?.maxEmissionTokens,m=p!==void 0&&d/4>=p;if(!l.hasMore||l.cursor===void 0||m)break;a=l.cursor}return{nodes:o,budget:i,threadTitle:s}}catch(o){r("kandan.reconnect_thread_transcript_fetch_failed",{thread_id:t.threadId,message:o instanceof Error?o.message:String(o)})}}async function GJ(e,n,t,r,o,i){i("kandan.reconnect_thread_unarchive_started",{codex_thread_id:n,discovered_by:r,message:o});try{let s=await Mi("thread/unarchive",e.request("thread/unarchive",{threadId:n}));if("error"in s)throw new Error(`thread/unarchive failed: ${s.error.message}`);let a=await Mi("thread/resume",e.request("thread/resume",t));if("error"in a)throw new Error(`thread/resume after unarchive failed: ${a.error.message}`);return i("kandan.reconnect_thread_unarchive_resumed",{codex_thread_id:n,discovered_by:r}),{mode:"resumed"}}catch(s){let a=s instanceof Error?s.message:String(s);throw i("kandan.reconnect_thread_unarchive_failed",{codex_thread_id:n,discovered_by:r,archive_error:o,message:a}),new Error(r==="forced_inject_not_found"?`thread/inject_items failed: ${o}; archive recovery failed: ${a}`:a)}}async function $Ee(e,n,t,r){let o={threadId:n,...t},i;if(r.forceRehydrate===!0)i="the server marked the durable engine session dead after an acknowledged-but-unexecuted turn";else{let a=await Mi("thread/resume",e.request("thread/resume",o));if(!("error"in a))return{mode:"resumed"};if(MEe(a.error.message))return await GJ(e,n,o,"resume_archived",a.error.message,r.log);i=a.error.message}r.log(r.forceRehydrate===!0?"kandan.reconnect_thread_rehydrate_forced":"kandan.reconnect_thread_resume_failed",{codex_thread_id:n,message:i,forced:r.forceRehydrate===!0,rehydrating:!0});let s;try{let a;try{a=await r.buildRehydrationItems?.(i)}catch(c){r.log("kandan.reconnect_thread_rehydration_items_failed",{codex_thread_id:n,message:c instanceof Error?c.message:String(c)}),a=void 0}let d=a!==void 0&&a.length>0?[...a]:[{type:"agentMessage",text:await r.buildRehydrationText(i)}],u=await Mi("thread/inject_items",e.request("thread/inject_items",{threadId:n,items:d}));if("error"in u){if(r.forceRehydrate===!0&&AEe(u.error.message))return await GJ(e,n,o,"forced_inject_not_found",u.error.message,r.log);s=`thread/inject_items failed: ${u.error.message}`}else{let c=await Mi("thread/resume",e.request("thread/resume",o));"error"in c&&(s=`rehydrated thread/resume failed: ${c.error.message}`)}}catch(a){s=a instanceof Error?a.message:String(a)}if(s!==void 0)throw r.log("kandan.reconnect_thread_rehydration_failed",{codex_thread_id:n,resume_failure:i,rehydration_failure:s}),new Error(`could not resume this thread's engine session (${i}) and rebuilding a fresh session from the thread transcript also failed (${s})`);return r.log("kandan.reconnect_thread_rehydrated",{codex_thread_id:n,resume_failure:i}),{mode:"rehydrated",resumeFailure:i}}async function OEe(e,n,t,r,o){let i="agent_provider_unavailable:codex";if(o("kandan.start_instance_codex_app_server_unavailable",{controlType:r.type,thread_id:oi(r)??null,instanceId:t}),r.type==="start_instance"||r.type==="reconnect_thread")try{await Co(e,n,r,"failed",i,{instanceId:t,failureClass:"engine_unavailable"})}catch(s){o("kandan.start_instance_unavailable_state_push_failed",{agent_provider:"codex",message:s instanceof Error?s.message:String(s)})}throw new Error(i)}async function QI(e,n,t,r,o,i,s,a,d,u,c,l,p,m,f,y,x,b,S,v,w,k,R,P,O,E,j){if(e===void 0)switch(f.type){case"remote_codex_exec":case"remote_codex_exec_cancel":return await XI(f,r,s.value,a,d,y);case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"clone_repository":break;case"set_workspace_viewport":break;case"start_instance":case"reconnect_thread":{let M=wm(f);if(M.type==="ok"&&M.provider==="claude-code"||S!==void 0)break;return await OEe(n,t,r,f,y)}default:return{instanceId:r,controlType:f.type,requestId:"requestId"in f?h(f.requestId)??null:null,ok:!1,error:"agent_provider_unavailable:codex"}}let z=()=>{if(e===void 0)throw new Error("shared codex app-server connection is unavailable");return e};switch(f.type){case"set_workspace_viewport":return WRe(o.kandanUrl,f.url),{instanceId:r,controlType:f.type,ok:!0,url:f.url};case"start_instance":{let M=qr(f.cwd,s.value),J=wm(f),K="starting_codex_session",G;switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let W=J.provider;if(!M.ok){y("kandan.start_instance_cwd_rejected",{thread_id:oi(f)??null,reason:M.reason,allowedCwdCount:s.value.length});try{await aK(n,t,f,M.reason,s.value,{instanceId:r})}catch(me){y("kandan.start_instance_cwd_failed_state_push_failed",{reason:M.reason,message:me instanceof Error?me.message:String(me)})}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason,allowedCwds:s.value}}if(!i.includes(W)){try{await Co(n,t,f,"failed",XJ(W),{instanceId:r,failureClass:"engine_unavailable"})}catch(me){y("kandan.start_instance_unavailable_state_push_failed",{agent_provider:W,message:me instanceof Error?me.message:String(me)})}return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unavailable:${W}`}}let te=ca(f,"processing",`starting ${UEe(W)} session`,{instanceId:r});te!==void 0&&n.push(t,"message_state",te).catch(me=>{y("kandan.start_instance_processing_state_push_failed",{message:me instanceof Error?me.message:String(me)})});try{let me=await S?.(f,M.cwd);if(me!==void 0)return me;if(W==="codex"){let ce=eK(o,f);if(ce!==void 0){try{await Co(n,t,f,"failed",ce,{instanceId:r,failureClass:"provider_binding_rejected"})}catch(Ie){y("kandan.start_instance_wafer_state_push_failed",{message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,ok:!1,error:ce}}}return W==="claude-code"?(K="starting_claude_code_session",(await tK({kandan:n,topic:t,control:f,options:o,log:y,debugTrace:x,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,activeClaudeCodeSessions:u,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,ensureClaudeCodeForwardPortSession:p,disposeClaudeCodeForwardPortSession:m,resumeSessionId:co(f.resumeSessionId),leaseEpochFor:w,onLiveSourceSeqAccepted:k,onUndeliveredFollowUpsAtClose:P,claudeThreadAccessStore:j,setStartupStage:Ie=>{K=Ie}})).controlResponse):(await RK({codex:z(),kandan:n,topic:t,control:f,options:o,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,onStartedThread:b,startAgentReplayCodex:v,setStartupStage:ce=>{K=ce},setStartedCodexThreadId:ce=>{G=ce}})).controlResponse}catch(me){let ge=ZJ(K,me);y("kandan.start_instance_failed",{stage:K,message:me instanceof Error?me.message:String(me),thread_id:ln(f,"threadId")??null,source_seq:Y(f.sourceSeq)??Y(f.rootSeq)??null,codex_thread_id:G??null});try{await Co(n,t,f,"failed",ge,{codexThreadId:G,instanceId:r,failureClass:QJ(K)})}catch{}throw me}}case"reconnect_thread":{let M=qr(f.cwd,s.value),J=wm(f),K="starting_codex_session";if(!M.ok){try{await aK(n,t,f,M.reason,s.value,{instanceId:r})}catch(Ie){y("kandan.reconnect_thread_cwd_failed_state_push_failed",{reason:M.reason,message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason,allowedCwds:s.value}}switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let G=J.provider;if(!i.includes(G)){try{await Co(n,t,f,"failed",XJ(G),{instanceId:r,failureClass:"engine_unavailable"})}catch(Ie){y("kandan.reconnect_thread_unavailable_state_push_failed",{agent_provider:G,message:Ie instanceof Error?Ie.message:String(Ie)})}return{instanceId:r,controlType:f.type,ok:!1,error:`agent_provider_unavailable:${G}`}}let W=co(f.codexThreadId);if(W===void 0)return{instanceId:r,controlType:f.type,ok:!1,error:"missing_codex_thread_id"};let te=co(f.workDescription),me=await S?.(f,M.cwd);if(me!==void 0)return me;if(G==="codex"){let Ie=eK(o,f);if(Ie!==void 0)return{instanceId:r,controlType:f.type,ok:!1,error:Ie}}if(G==="claude-code"){let Ie=u.get(W);if(Ie!==void 0&&te!==void 0){let Re=Y(f.rootSeq),I=Y(f.sourceSeq)??Re,L=_e=>{let Te=_e.disposition==="parked"?ca(f,"queued",pc(_e.queuePosition),{instanceId:r,codexThreadId:W}):ca(f,"processing","queued Claude Code input",{instanceId:r,codexThreadId:W});Te!==void 0&&n.push(t,"message_state",Te).catch(ae=>{y("kandan.reconnect_thread_queue_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})})},U=Qo(qe(f.attachments)??[]),ie=await aS({cwd:M.cwd,kandanUrl:o.kandanUrl,token:o.token,fetch:o.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:I,body:te,attachments:U}).then(_e=>({ok:!0,content:_e})).catch(_e=>({ok:!1,error:_e}));if(!ie.ok){let _e=ie.error instanceof Error?ie.error.message:String(ie.error),Te=`Claude Code input attachment download failed: ${_e}`;try{await Co(n,t,f,"failed",Te,{instanceId:r,codexThreadId:W,failureClass:"attachment_download_failed"})}catch(ae){y("kandan.reconnect_thread_queue_failed_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:_e}}let se=ln(f,"threadId"),Q=ln(f,"channel");if(I!==void 0&&se!==void 0&&Q!==void 0&&R?.(Q,se,{seq:I,type:"thread.message",actorKind:void 0,actorSlug:void 0,actorUserId:void 0,threadId:se,threadTitle:void 0,replyToSeq:Y(f.rootSeq),localRunnerEventType:void 0,body:te,attachments:U,traceparent:h(f.traceparent)}),Q!==void 0&&se!==void 0&&O?.({channel:Q,threadId:se,sourceSeq:I})===!0)return y("claude_code.message_duplicate_ignored",{linzumi_thread_id:se,claude_session_id:W,body_preview:Fd(te),source_seq:I??null}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0};await Xp({cwd:M.cwd,threadKey:Ie.threadId,turnRef:I===void 0?`followup-${Date.now()}`:`seq-${I}`,log:(_e,Te)=>y(_e,Te)});try{let _e=Ie.enqueueInput({content:ie.content,sourceSeq:I});if(_e==="duplicate")return y("claude_code.message_duplicate_ignored",{linzumi_thread_id:ln(f,"threadId")??null,claude_session_id:W,body_preview:Fd(te),source_seq:I??null}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0};L(_e),y("claude_code.message_queued",{linzumi_thread_id:ln(f,"threadId")??null,claude_session_id:W,body_preview:Fd(te),message_received_at_ms:Date.now(),source_seq:I??null}),x?.record("commander","claude.input_queued",{linzumiThreadId:ln(f,"threadId")??null,claudeSessionId:W,sourceSeq:I??null,bodyPreview:Fd(te)})}catch(_e){let Te=_e instanceof Error?_e.message:String(_e),ae=`Claude Code input queue closed: ${Te}`;try{await Co(n,t,f,"failed",ae,{instanceId:r,codexThreadId:W,failureClass:"claude_input_queue_closed"})}catch(Ee){y("kandan.reconnect_thread_queue_closed_state_push_failed",{message:Ee instanceof Error?Ee.message:String(Ee)})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_session_closed",message:Te}}if(I!==void 0){let _e=I,Te=Ie,ae="Claude Code session did not respond after resume - send your message again to start fresh",Ee=E;Ex({windowMs:Ee?.windowMs??Uf(process.env),isDelivered:()=>Te.inputDelivered(_e),isSessionClosed:()=>ks(u,[W],[Te.threadId])===void 0,lastSdkActivityMs:()=>Te.lastSdkActivityMs(),hasPendingBlockingRequest:()=>km({threadId:Te.threadId,pendingApprovals:c,pendingQuestions:l}),log:y,onWedged:dt=>{let Ke=Ee?.recordWedge(Te.threadId,_e)??Number.MAX_SAFE_INTEGER;y("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:Te.threadId,claude_session_id:W,source_seq:_e,waited_ms:dt.waitedMs,cause:dt.cause,attempt:Ee===void 0?null:Ke,dispatch:"queued_input"});let Dt=()=>{Ee?.clear(Te.threadId,_e),Co(n,t,f,"failed",ae,{instanceId:r,codexThreadId:W,failureClass:"claude_dispatch_wedged"}).catch(X=>{y("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:Te.threadId,source_seq:_e,message:X instanceof Error?X.message:String(X)})})};if(Ee!==void 0&&Ke===1){Co(n,t,f,"processing","restarting Claude Code session to recover this message",{instanceId:r,codexThreadId:W}).catch(()=>{}),Ee.killAndRespawn({threadId:Te.threadId,claudeSessionId:W,reason:`claude_dispatch_liveness: no SDK output within ${dt.waitedMs}ms of queued input (seq ${_e})`}).then(X=>{X==="no_replay_path"&&Dt()}).catch(X=>{y("claude_code.dispatch_supervisor_respawn_failed",{linzumi_thread_id:Te.threadId,source_seq:_e,message:X instanceof Error?X.message:String(X)}),Dt()});return}Dt()}})}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0}}if(Ie!==void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_active_session_requires_work_description"};{let Re=ln(f,"threadId"),I=ln(f,"channel"),L=Y(f.sourceSeq)??Y(f.rootSeq);if(te!==void 0&&Re!==void 0&&I!==void 0&&L!==void 0&&O?.({channel:I,threadId:Re,sourceSeq:L})===!0)return y("claude_code.replayed_turn_already_applied_ignored",{linzumi_thread_id:Re,claude_session_id:W,body_preview:Fd(te),source_seq:L,replayed:f.replayed===!0}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,queuedInput:!0,duplicate:!0}}try{let Re=ca(f,"processing","resuming Claude Code session",{instanceId:r,codexThreadId:W});return Re!==void 0&&n.push(t,"message_state",Re).catch(L=>{y("kandan.reconnect_thread_processing_state_push_failed",{message:L instanceof Error?L.message:String(L)})}),K="starting_claude_code_session",(await tK({kandan:n,topic:t,control:f,options:o,log:y,debugTrace:x,instanceId:r,cwd:M.cwd,matchedRoot:M.matchedRoot,resumeSessionId:W,activeClaudeCodeSessions:u,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,ensureClaudeCodeForwardPortSession:p,disposeClaudeCodeForwardPortSession:m,leaseEpochFor:w,onLiveSourceSeqAccepted:k,onUndeliveredFollowUpsAtClose:P,claudeThreadAccessStore:j,setStartupStage:L=>{K=L}})).controlResponse}catch(Re){let I=ZJ(K,Re);y("kandan.reconnect_thread_failed",{stage:K,message:Re instanceof Error?Re.message:String(Re),thread_id:ln(f,"threadId")??null,source_seq:Y(f.sourceSeq)??Y(f.rootSeq)??null,agent_provider:G,provider_session_key:W});try{await Co(n,t,f,"failed",I,{codexThreadId:W,instanceId:r,failureClass:QJ(K)})}catch{}throw Re}}o.codexUrl===void 0&&jx(M.cwd,{configHome:ta()});let ge=_l(o,f),ce=b===void 0?void 0:await Mi("thread/attach",b(f,M.cwd,W));if(te!==void 0){let Ie=Y(f.rootSeq),Re=Y(f.sourceSeq)??Ie;if(ce===void 0||Re===void 0)throw new Error("cannot reconnect a Kandan thread without a session");let I=ln(f,"channel"),L=ln(f,"threadId");if(I!==void 0&&L!==void 0&&O?.({channel:I,threadId:L,sourceSeq:Re})===!0)return y("kandan.reconnect_thread_seq_already_applied",{linzumi_thread_id:L,codex_thread_id:W,source_seq:Re}),{instanceId:r,controlType:f.type,cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W,duplicate:!0};let U=ln(f,"workspace"),ie=await $Ee(z(),W,$p({cwd:M.cwd,fast:ge.fast,channelSession:{model:ge.model,reasoningEffort:ge.reasoningEffort,approvalPolicy:ge.approvalPolicy,sandbox:ge.sandbox,sandboxedApprovalNeverDefault:ge.sandboxedApprovalNeverDefault}}),{forceRehydrate:f.sessionRehydrate===!0,log:y,buildRehydrationItems:async _e=>{let Te=await DEe(n,t,{workspace:U,channel:I,threadId:L},y);if(Te===void 0||Te.nodes.length===0)return;let ae=Y9({nodes:Te.nodes,budget:Te.budget,resumeFailure:_e,threadTitle:Te.threadTitle,linzumiContext:Ks(f.linzumiContext)});return y("kandan.reconnect_thread_rehydration_ir_emitted",{linzumi_thread_id:L,codex_thread_id:W,emitted_nodes:ae.emittedNodeCount,omitted_nodes:ae.omittedNodeCount,redacted_reasoning:ae.redactedReasoningCount,emitted_token_estimate:ae.emittedTokenEstimate,max_emission_tokens:ae.maxEmissionTokens}),ae.items},buildRehydrationText:async _e=>tF({messages:await REe(n,t,{workspace:U,channel:I,threadId:L},y),resumeFailure:_e,linzumiContext:Ks(f.linzumiContext)})});if(ie.mode==="rehydrated"){he("runner.thread_resume_rehydrated",{purpose:"linzumi.thread_runner",threadId:L??null,codexThreadId:W,sourceSeq:Re,resumeFailure:ie.resumeFailure});try{await Co(n,t,f,"processing","rebuilt the coding session from durable thread history after an unresumable engine session",{codexThreadId:W,instanceId:r})}catch(_e){y("kandan.reconnect_thread_rehydrated_state_push_failed",{message:_e instanceof Error?_e.message:String(_e)})}}let se=_o(o.token),Q=Qo(qe(f.attachments)??[]);await ce.startThreadMessageTurn({seq:Re,body:te,actorSlug:se.actorUsername,actorUserId:se.actorUserId,attachments:Q,boundStartTimeout:!0})}return{instanceId:r,controlType:f.type,cwd:M.cwd,matchedRoot:M.matchedRoot,codexThreadId:W}}case"list_claude_code_sessions":{let M=qr(f.cwd,s.value);if(!M.ok)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason};if(!i.includes("claude-code"))return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let J;try{J=await r5({cwd:M.cwd,limit:Y(f.limit),messagesPerSession:Y(f.messagesPerSession),provider:o.claudeCodeSessionHistoryProvider})}catch(K){return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:K instanceof Error?`claude_code_session_history_failed:${K.message}`:"claude_code_session_history_failed"}}return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!0,cwd:M.cwd,matchedRoot:M.matchedRoot,sessions:J}}case"list_agent_slash_commands":{let M=qr(f.cwd,s.value);if(!M.ok)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:M.reason};let J=h(f.agentProvider)??"claude-code";if(J!=="claude-code")return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:`agent_provider_unsupported:${J}`};if(!i.includes("claude-code"))return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let K=h(f.providerSessionKey),G=K===void 0?void 0:u.get(K);if(G===void 0)return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:"no_active_claude_session"};try{return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!0,cwd:M.cwd,matchedRoot:M.matchedRoot,provider:"claude-code",providerSessionKey:K,commands:await G.slashCommands()}}catch(W){return{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,ok:!1,error:W instanceof Error?`agent_slash_commands_failed:${W.message}`:"agent_slash_commands_failed"}}}case"browse_directory":return B1e(f,o);case"create_project":return W1e(f,o,s);case"clone_repository":return await Q1e(f,o,s);case"suggest_tasks":return Y1e(f,o,s.value,{kandan:n,topic:t});case"remote_codex_exec":return await XI(f,r,s.value,a,d,y);case"remote_codex_exec_cancel":return await XI(f,r,s.value,a,d,y);case"start_turn":{let M=await z().request("turn/start",{threadId:f.threadId,input:f.input});return{instanceId:r,controlType:f.type,response:M}}case"steer_turn":{let M=ks(u,[f.providerSessionKey,f.threadId],[f.threadId]);if(M!==void 0){let W=e2e(f.input);if(W===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_requires_text_input"};let te;try{te=M.steerTurn(W)}catch(Re){let I=Re instanceof Error?Re.message:String(Re);return y("claude_code.steer_failed",{thread_id:f.threadId,message:I}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_failed",message:I,threadId:f.threadId}}if(!await qEe(te.applied))return y("claude_code.steer_not_applied",{thread_id:f.threadId,steered:te.steered}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_not_applied",message:"The turn finished before the steering message could be applied. Linzumi will retry it as its own message automatically; if nothing happens shortly, send it as a new message.",threadId:f.threadId};let ge=Y(f.sourceSeq),ce=h(f.workspace),Ie=h(f.channel);return ge!==void 0&&ce!==void 0&&Ie!==void 0&&n.push(t,"message_state",{workspace:ce,channel:Ie,thread_id:f.threadId,instance_id:r,seq:ge,status:"processed",reason:Yp,agent_provider:"claude-code"}).catch(Re=>{y("claude_code.steer_terminal_state_push_failed",{thread_id:f.threadId,seq:ge,message:Re instanceof Error?Re.message:String(Re)})}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",steered:te.steered,threadId:f.threadId}}let J=f.providerSessionKey??f.threadId,K=h(f.turnId);if(K===void 0)return{instanceId:r,controlType:f.type,agentProvider:"codex",threadId:f.threadId,ok:!1,error:"codex_steer_target_turn_unknown",message:"No live session tracks this thread, so the running turn cannot be steered from here. Linzumi will run the message as its own turn instead."};let G=await z().request("turn/steer",{threadId:J,expectedTurnId:K,input:xy(f.input)});return{instanceId:r,controlType:f.type,response:G}}case"interrupt_turn":{let M=ks(u,[f.threadId]);if(M!==void 0){let K=await M.interruptTurn("Interrupted by Linzumi");return{instanceId:r,controlType:f.type,agentProvider:"claude-code",interrupted:K,threadId:f.threadId}}let J=await z().request("turn/interrupt",{threadId:f.threadId,turnId:f.turnId??null});return{instanceId:r,controlType:f.type,response:J}}case"rewind_thread":return u.get(f.threadId)!==void 0||f.agentProvider==="claude-code"?{instanceId:r,controlType:f.type,agentProvider:"claude-code",requestId:h(f.requestId)??null,threadId:f.threadId,ok:!1,error:"claude_code_rewind_unsupported",message:"Claude Code does not support rewind yet"}:{instanceId:r,controlType:f.type,requestId:h(f.requestId)??null,threadId:f.threadId,ok:!1,error:"rewind_not_supported",message:"This runner does not support rewinding threads yet"};case"interrupt_queued_messages":{let M=h(f.agentProvider)?.trim();if(M!=="claude-code"){let G=await z().request("turn/interrupt",{threadId:f.threadId,turnId:null});return{instanceId:r,controlType:f.type,response:G}}let J=ks(u,[f.threadId]);if(J===void 0)return{instanceId:r,controlType:f.type,agentProvider:M,ok:!1,error:"claude_code_session_not_active"};await J.interruptTurn("Claude Code interrupted by Linzumi"),J.abortController.abort(new Error("Claude Code interrupted by Linzumi"));let K=Y(f.throughSeq)??J.currentSourceSeq();if(K!==void 0)try{await ii(n,t,{workspace:J.workspace,channel:J.channel,threadId:J.threadId,sourceSeq:K,status:"failed",reason:"Claude Code interrupted by Linzumi",sessionId:f.threadId})}catch(G){y("kandan.claude_code_interrupt_state_push_failed",{message:G instanceof Error?G.message:String(G),thread_id:J.threadId,source_seq:K,claude_session_id:f.threadId})}return{instanceId:r,controlType:f.type,agentProvider:M,interrupted:!0,threadId:f.threadId}}case"stop_turn":{let M=ks(u,[f.threadId,f.providerSessionKey],[f.threadId]);if(M!==void 0){let K=await FEe({activeSession:M,sessionKey:f.providerSessionKey??f.threadId,publishMessageState:G=>ii(n,t,G),log:y});return y("claude_code.turn_stopped",{thread_id:M.threadId,claude_session_id:f.providerSessionKey??f.threadId,discarded_queued_source_seqs:K}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,ok:!0,stopped:!0,confirmedHalt:!0}}let J=h(f.agentProvider)?.trim();if(J!=="claude-code")try{let K=await z().request("turn/interrupt",{threadId:f.providerSessionKey??f.threadId,turnId:f.turnId??null});return{instanceId:r,controlType:f.type,agentProvider:"codex",threadId:f.threadId,ok:!0,stopped:!0,confirmedHalt:!0,response:K}}catch(K){y("codex.stop_turn_no_session_interrupt_failed",{thread_id:f.threadId,message:K instanceof Error?K.message:String(K)})}return{instanceId:r,controlType:f.type,agentProvider:J??null,threadId:f.threadId,ok:!1,error:"stop_turn_session_not_active"}}case"resolve_codex_approval_request":{let M=c.get(f.requestId);if(M===void 0){if(f.agentProvider==="claude-code")return{instanceId:r,controlType:f.type,skipped:!0};let K=await z().request("resolve_codex_approval_request",{...f});return{instanceId:r,controlType:f.type,response:K}}if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_provider_mismatch"};if(M.sessionId!==void 0&&f.threadId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_session_mismatch"};let J=M.decisions.get(f.decision);return J===void 0?(y("runner.claude_code_approval_unknown_decision",{instanceId:r,requestId:f.requestId,decision:f.decision,threadId:M.threadId,claudeSessionId:M.sessionId}),{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_approval_unknown_decision",decision:f.decision}):(M.resolve(J),await ii(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,status:J.type==="allow"?"processing":"failed",reason:J.type==="allow"?"Claude Code tool approved":"Claude Code tool denied by Linzumi",sessionId:M.sessionId}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",requestId:f.requestId,decision:f.decision,resolved:!0})}case"resolve_claude_user_input_request":{let M=l.get(f.requestId);if(M===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,requestId:f.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(f.threadId!==M.threadId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(M.sessionId!==void 0&&f.sessionId!==void 0&&f.sessionId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_session_mismatch"};let J=f.answers.map(G=>({questionId:G.questionId,selectedLabels:G.selectedLabels??[],freeText:h(G.freeText)})),K=HEe({pending:M,answers:J,actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()});switch(K.type){case"error":{y("runner.claude_code_user_input_resolution_failed",{instanceId:r,requestId:f.requestId,error:K.error,selectedLabels:[...K.selectedLabels],threadId:M.threadId,claudeSessionId:M.sessionId,kind:M.kind}),M.resolve({type:"deny",message:K.error});try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:{kind:"Denied",reason:K.error,answers:J.map(G=>({questionId:G.questionId,selectedLabels:[...G.selectedLabels],freeText:G.freeText})),actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(G){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:G instanceof Error?G.message:String(G)}),G}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,ok:!1,error:K.error,selectedLabels:[...K.selectedLabels],requestKind:M.kind,denied:!0}}case"resolved":M.resolve(K.decision);break}{let G=ks(u,[M.sessionId,h(f.sessionId)],[M.threadId]);if(G!==void 0){let W=M.threadId,te=M.sourceSeq,me=M.sessionId;Ex({windowMs:E?.windowMs??Uf(process.env),isDelivered:()=>M.resolved(),isSessionClosed:()=>ks(u,[me],[W])===void 0,lastSdkActivityMs:()=>G.lastSdkActivityMs(),hasPendingBlockingRequest:()=>km({threadId:W,pendingApprovals:c,pendingQuestions:l}),log:y,onWedged:ge=>{let ce="Claude Code did not continue after your answer - the runner restarted the session; send your message again to continue";y("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:W,claude_session_id:me??null,source_seq:te,waited_ms:ge.waitedMs,cause:ge.cause,dispatch:K.dispatch}),G.abortController.abort(new Error(ce)),(async()=>{let Ie=G.sessionWork();Ie!==void 0&&await Promise.race([Ie.catch(()=>{}),new Promise(Re=>{setTimeout(Re,1e4).unref?.()})]),await ii(n,t,{workspace:M.workspace,channel:M.channel,threadId:W,sourceSeq:te,status:"failed",reason:ce,sessionId:me,failureClass:"claude_dispatch_wedged"})})().catch(Ie=>{y("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:W,source_seq:te,message:Ie instanceof Error?Ie.message:String(Ie)})})}})}}try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:K.answerState,streamState:"completed"})}catch(G){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:G instanceof Error?G.message:String(G)}),G}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,answers:J.map(G=>({questionId:G.questionId,selectedLabels:[...G.selectedLabels],...h(G.freeText)===void 0?{}:{freeText:h(G.freeText)}})),actorUserId:f.actorUserId,actorSlug:f.actorSlug,requestKind:M.kind,resolved:!0}}case"deny_claude_user_input_request":{let M=l.get(f.requestId);if(M===void 0)return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,requestId:f.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(f.agentProvider!==void 0&&f.agentProvider!=="claude-code")return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(f.threadId!==M.threadId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(M.sessionId!==void 0&&f.sessionId!==void 0&&f.sessionId!==M.sessionId)return{instanceId:r,controlType:f.type,ok:!1,error:"claude_code_user_input_session_mismatch"};M.resolve({type:"deny",message:f.reason??"Denied by Linzumi"});try{await ml(n,t,{workspace:M.workspace,channel:M.channel,threadId:M.threadId,sourceSeq:M.sourceSeq,sessionId:M.sessionId,leaseEpoch:M.leaseEpoch,request:M.request,answerState:{kind:"Denied",reason:f.reason??"Denied by Linzumi",actorUserId:f.actorUserId,actorSlug:f.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(J){throw y("kandan.claude_code_user_question_completed_publish_failed",{requestId:f.requestId,message:J instanceof Error?J.message:String(J)}),J}return{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M.threadId,requestId:f.requestId,reason:f.reason??"Denied by Linzumi",actorUserId:f.actorUserId,actorSlug:f.actorSlug,denied:!0}}case"read_thread":{let M=await z().request("thread/read",{threadId:f.threadId,includeTurns:f.includeTurns??!0});return{instanceId:r,controlType:f.type,response:M}}case"update_session_settings":{let M=h(f.threadId),J=ks(u,[M],[M]),K=h(f.approvalPolicy)??void 0,G=h(f.sandbox)??void 0;if(J===void 0)return{instanceId:r,controlType:f.type,skipped:!0};let W=await J.updateSettings({model:h(f.model)??void 0,approvalPolicy:K,reasoningEffort:h(f.reasoningEffort)??void 0}),te=h(W.model),me=h(W.approval_policy),ge=h(W.reasoning_effort),ce=h(f.sandbox);if(fEe({appliedModel:te,appliedApprovalPolicy:me,appliedReasoningEffort:ge,controlSandbox:ce})){let Ie={workspace:J.workspace,channel:J.channel,thread_id:J.threadId,codex_thread_id:f.threadId,updated_at:new Date().toISOString(),...te!==void 0?{model:te}:{},...me!==void 0?{approvalPolicy:me}:{},...ge!==void 0?{reasoningEffort:ge}:{},...ce!==void 0?{sandbox:ce}:{}},Re=await n.push(t,"session:settings",Ie);if(!(Z(Re)&&Re.status==="ok"))throw new Error(`kandan push failed: session:settings: ${JSON.stringify(Re).slice(0,500)}`)}return me!==void 0&&j?.record(J.threadId,{approvalPolicy:me,sandbox:G}),W.approval_policy==="never"&&await DK({kandan:n,topic:t,pendingClaudeCodeApprovals:c,pendingClaudeCodeUserQuestions:l,sessionThreadId:J.threadId,actorUserId:f.actorUserId,actorSlug:f.actorSlug,log:y,reason:"full_access_enabled"}),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:f.threadId,applied:W}}case"stop_instance":case"kill_instance":{let M="threadId"in f&&typeof f.threadId=="string"?f.threadId:void 0,J=M===void 0?void 0:u.get(M);return J!==void 0?(await J.interruptTurn("Claude Code stopped by Linzumi"),J.abortController.abort(new Error("Claude Code stopped by Linzumi")),{instanceId:r,controlType:f.type,agentProvider:"claude-code",threadId:M,stopped:!0}):{instanceId:r,controlType:f.type,skipped:!0}}case"resolve_port_forward_request":case"update_thread_interaction_access":case"set_port_forward_enabled":case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"start_local_editor":case"update_runner_config":case"fleet_breaker_state":case"set_commander_impl":case"replace_runner":return{instanceId:r,controlType:f.type,skipped:!0}}}async function XI(e,n,t,r,o,i){switch(e.type){case"remote_codex_exec":{let s=h(e.requestId)?.trim(),a=new AbortController;s!==void 0&&s!==""&&o.set(s,a);let d=await i3(e,{instanceId:n,allowedCwds:t,sandboxRunner:r,abortSignal:a.signal});return s!==void 0&&s!==""&&o.delete(s),i("remote_codex_exec.handled",{requestId:h(e.requestId)??null,ok:d.ok===!0,error:typeof d.error=="string"?d.error:null}),d}case"remote_codex_exec_cancel":{let s=h(e.requestId)?.trim();if(s===void 0||s==="")return{instanceId:n,controlType:e.type,ok:!1,error:"request_id_required"};let a=o.get(s);return a!==void 0&&(a.abort(new Error("remote_codex_exec_cancelled")),o.delete(s)),{instanceId:n,controlType:e.type,requestId:s,ok:!0,cancelled:a!==void 0}}}}function ZJ(e,n){let t=LEe(n instanceof Error?n.message:String(n));switch(e){case"checking_project_trust":return`Codex could not start because this folder is not trusted locally. Trust the folder with linzumi paths add, or restart the runner from a trusted folder. Detail: ${t}`;case"starting_claude_code_session":return`Claude Code did not create a session. Restart the local runner and try again. Detail: ${t}`;case"claude_code_session_failed":return`Claude Code created a session, but the session failed before completing. Try starting the agent again; if it repeats, share this failed message with the runner owner. Detail: ${t}`;case"posting_claude_code_output":return`Claude Code created a session, but Linzumi could not post its response to this thread. Try starting the agent again; if it repeats, reconnect the local runner. Detail: ${t}`;case"starting_codex_session":return`Codex did not create a session. Restart the local runner and try again. Detail: ${t}`;case"binding_kandan_thread":return`Codex started, but Linzumi could not attach it to this thread. Try starting the agent again; if it repeats, share this failed message with the runner owner. Detail: ${t}`;case"starting_first_turn":return`Codex started, but the first prompt could not be delivered. Try sending the message again; if it repeats, reconnect the local runner. Detail: ${t}`}}function QJ(e){return e==="checking_project_trust"?"project_untrusted":"start_stage_transient"}function XJ(e){switch(e){case"claude-code":return"Claude Code is not available on this computer. Reconnect a local runner with Claude Code auth and try again.";case"codex":return"Codex is not available on this computer. Reconnect a local runner with Codex support and try again."}}function t0(e,n){let t=e.trim();if(t.length<=n)return t;let r=" ... ";if(n<r.length+2)return t.slice(t.length-Math.max(1,n));let o=Math.max(1,Math.floor((n-r.length)/3)),i=Math.max(1,n-r.length-o);return`${t.slice(0,o)}${r}${t.slice(t.length-i)}`}function LEe(e){return t0(e,240)}function jEe(e){let n=e.interruptActiveTurn(e.reason),t=e.interruptSessionControls;if(t!==void 0)try{t().catch(r=>{e.log("claude_code.session_control_interrupt_failed",{thread_id:e.threadId,message:r instanceof Error?r.message:String(r)})})}catch(r){e.log("claude_code.session_control_interrupt_failed",{thread_id:e.threadId,message:r instanceof Error?r.message:String(r)})}return n}async function FEe(e){let{activeSession:n}=e;n.interruptTurnBeforeAbort("stopped by user");let t=n.discardQueuedFollowUpsForStop();n.abortController.abort(new Error("stopped by user"));let r=n.currentSourceSeq(),o=[...new Set([r,...t].filter(s=>s!==void 0))],i=new Set(t);for(let s of o)try{await e.publishMessageState({workspace:n.workspace,channel:n.channel,threadId:n.threadId,sourceSeq:s,status:"interrupted",reason:"stopped by user",sessionId:e.sessionKey}),i.has(s)&&n.markFollowUpSeqDiscarded(s)}catch(a){e.log("kandan.claude_code_stop_state_push_failed",{message:a instanceof Error?a.message:String(a),thread_id:n.threadId,source_seq:s})}return t}function ks(e,n,t=[]){let r=n.filter(i=>i!==void 0&&i!=="");for(let i of r){let s=e.get(i);if(s!==void 0)return s}let o=t.filter(i=>i!==void 0&&i!=="");if(o.length>0){for(let i of e.values())if(o.includes(i.threadId))return i}}async function qEe(e){let n;try{return await Promise.race([e,new Promise(t=>{n=setTimeout(()=>t(!0),zEe),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}}function YJ(e,n){switch(e.agentReplay?.provider){case"codex":return["codex"];case"claude-code":return["claude-code"];case"auto":case void 0:break}switch(e.claudeCodeRunner!==void 0||(n===void 0?e.claudeCodeAvailable===!0:n==="logged_in")){case!0:return["codex","claude-code"];case!1:return["codex"]}}function NEe(e){if(e.agentReplay?.provider==="codex"||e.codexUrl!==void 0||la(e))return!0;switch(e.dependencyStatus?.codex.available){case!1:return!1;case!0:case void 0:return!0}}function wm(e){let n=h(e.agentProvider)?.trim();switch(n){case void 0:case"":case"codex":return{type:"ok",provider:"codex"};case"claude-code":return{type:"ok",provider:"claude-code"};default:return{type:"unsupported",value:n}}}function UEe(e){switch(e){case"codex":return"Codex";case"claude-code":return"Claude Code"}}function r0(e){let n=h(e.modelProvider)?.trim(),t=A(e.llmProxy),r=h(t?.baseUrl)?.trim(),o=h(t?.token)?.trim(),i=r!==void 0&&r!==""&&o!==void 0&&o!==""?{baseUrl:r,token:o}:void 0;return n===void 0||n===""?i===void 0?{type:"none"}:{type:"provider",runtime:{provider:"openai-proxy",llmProxyBaseUrl:i.baseUrl,llmProxyToken:i.token}}:n!=="wafer"?{type:"error",error:`model_provider_unsupported:${n}`}:i===void 0?{type:"error",error:"wafer_model_provider_missing_llm_proxy"}:{type:"provider",runtime:{provider:"wafer",llmProxyBaseUrl:i.baseUrl,llmProxyToken:i.token}}}function PK(e){if(e.type==="error")return e.error;if(e.type==="provider"&&e.runtime.provider==="openai-proxy"&&gs()===void 0)return"codex_llm_proxy_requires_openai_api_key"}function eK(e,n){let t=r0(n);switch(t.type){case"none":return;case"error":return t.error;case"provider":{let r=PK(t);return r!==void 0?r:e.codexModelProvider?.provider===t.runtime.provider?void 0:t.runtime.provider==="wafer"?"wafer_model_provider_requires_thread_worker":"llm_proxy_model_provider_requires_thread_worker"}}}function BEe(e){if(e.linzumiAgentMcpToken===void 0||e.linzumiAgentMcpToken===""||lP(e.env))return;let n=JEe(e.env,e.kandanUrl);if(n===void 0||n==="")return YI("cloud agent turn requires a server URL (kandanUrl) and none was configured; refusing to run the @linzumi agent turn on the host");if(KEe(n))return YI(`cloud agent turn requires a PUBLICLY reachable server URL for the guest VM, got loopback ${n}; set LINZUMI_CLOUD_AGENT_PUBLIC_URL to the server's public base URL (e.g. https://serve.linzumi.com)`);if(!Cd(e.env))return YI("smolcloud is the required execution path for @linzumi agent turns but no smolcloud API key resolved (SMOLCLOUD_API_KEY / cloud.apiKeyFile / SMOL_CLOUD_TOKEN); refusing to run the agent on the render host (set LINZUMI_VM_CLOUD_AGENT=0 only to explicitly opt back into host execution)");let t;try{t=xs()}catch{throw new Error("workspace-agent cloud vm.json is present but invalid; refusing to arm the cloud agent turn on a corrupt config")}let r=M9({env:e.env,config:t});if(r===void 0)throw new Error("workspace-agent cloud execution is enabled but no smolcloud API key resolved");let o=t?.agent,i={...o?.image===void 0?{}:{image:o.image},...o?.allowCidrs===void 0?{}:{allowCidrs:o.allowCidrs},...o?.autoStopSeconds===void 0?{}:{autoStopSeconds:o.autoStopSeconds}},s=e.modelProviderRuntime===void 0?void 0:(()=>{let a=u0(e.modelProviderRuntime);return{id:a.id,name:a.name,baseUrl:a.baseUrl,envKey:a.envKey,wireApi:a.wireApi,...a.httpHeaders===void 0?{}:{httpHeaders:a.httpHeaders},...a.envHttpHeaders===void 0?{}:{envHttpHeaders:a.envHttpHeaders}}})();return D9({connection:r,workspaceSlug:e.workspaceSlug,kandanUrl:n,linzumiAgentMcpToken:e.linzumiAgentMcpToken,ownerUsername:e.ownerUsername,modelProvider:s,llmProxyToken:e.modelProviderRuntime?.llmProxyToken,agentSpec:i,prewarm:!0})}function YI(e){return()=>Promise.reject(new kt(e))}function JEe(e,n){let t=e.LINZUMI_CLOUD_AGENT_PUBLIC_URL?.trim();return t!==void 0&&t!==""?t:n}function KEe(e){try{let n=new URL(e).hostname.toLowerCase();return n==="localhost"||n==="127.0.0.1"||n==="::1"||n==="0.0.0.0"}catch{return!1}}function u0(e){let n=`${e.llmProxyBaseUrl.replace(/\/+$/,"")}/v1`;switch(e.provider){case"wafer":return{id:"linzumi",name:"Linzumi Proxy",baseUrl:n,envKey:"LINZUMI_LLM_PROXY_TOKEN",wireApi:"responses"};case"openai-proxy":return{id:"linzumi",name:"Linzumi Proxy",baseUrl:n,envKey:"OPENAI_API_KEY",wireApi:"responses",envHttpHeaders:{"x-linzumi-llm-proxy-token":"LINZUMI_LLM_PROXY_TOKEN"}}}}function IK(e){switch(e.provider){case"wafer":return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken};case"openai-proxy":{let n=gs();if(n===void 0)throw new Error("codex llm proxy requires API-key auth (OPENAI_API_KEY in the environment or $CODEX_HOME/auth.json); ChatGPT OAuth credentials cannot be forwarded");return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken,OPENAI_API_KEY:n}}}}async function RK(e){e.options.codexUrl===void 0&&(e.setStartupStage("checking_project_trust"),jx(e.cwd,{configHome:ta()})),e.setStartupStage("starting_codex_session");let n=co(e.control.developerPrompt),t=Ks(e.control.linzumiContext),r=_l(e.options,e.control),o=await Mi("thread/start",e.codex.request("thread/start",{cwd:e.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",developerInstructions:Lp({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:!la(e.options)||hR(e.options),devServicesAvailable:!la(e.options),developerPrompt:n,...cR(e.control),linzumiContext:t}),...f2e(r)})),i=cEe(o);e.setStartedCodexThreadId(i);let s=co(e.control.workDescription);i!==void 0&&n!==void 0&&await u2e(e.kandan,e.topic,e.control,n,i);let a;if(i!==void 0&&e.onStartedThread!==void 0&&(e.setStartupStage("binding_kandan_thread"),a=await Mi("thread/attach",e.onStartedThread(e.control,e.cwd,i))),i!==void 0&&s!==void 0){e.setStartupStage("starting_first_turn");let d=Y(e.control.rootSeq),u=Y(e.control.sourceSeq)??d,c=Qo(qe(e.control.attachments)??[]);if(a===void 0||u===void 0)throw new ox({codexThreadId:i,kandanThreadId:ln(e.control,"threadId"),hasThreadSession:a!==void 0,sourceSeq:u});let l=_o(e.options.token);e.startAgentReplayCodex?.(),await a.startThreadMessageTurn({seq:u,body:s,actorSlug:l.actorUsername,actorUserId:l.actorUserId,attachments:c,boundStartTimeout:!0})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,cwd:e.cwd,matchedRoot:e.matchedRoot,response:o},providerSession:{provider:"codex",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:i}}}function VEe(e){let n=e.LINZUMI_CLAUDE_TURN_STALL_MS?.trim();if(n===void 0||n==="")return 6e5;let t=Number.parseInt(n,10);return Number.isFinite(t)&&t>0?t:6e5}function WEe(e){let n=e.onInputDelivered,t=e.isLiveSteerAllowed,r=e.onInputWait,o=e.onSourceSeqDelivered,i=[eR(e.content)],s=[e.sourceSeq],a=[],d=new Set,u=[],c=new Map,l=v=>new Promise(w=>{c.set(v,w)}),p=(v,w)=>{let k=c.get(v);k!==void 0&&(c.delete(v),k(w))},m={closed:!1},f=()=>{for(;m.closed;){let v=u.shift();if(v===void 0)return;v({done:!0,value:void 0})}},y=(v,w)=>{s.push(w),n?.(),w!==void 0&&o!==void 0&&!d.has(w)&&(d.add(w),o(w));let k=u.shift();if(k===void 0){i.push(v);return}p(v,!0),k({done:!1,value:v})},x=(v,w)=>s.length>0?(a.push({message:v,sourceSeq:w}),{disposition:"parked",queuePosition:a.length}):(y(v,w),{disposition:"delivered"}),b=v=>{if(m.closed)throw new Error("Claude Code streaming input is closed");let w=eR(v.content);return x(w,v.sourceSeq)},S=v=>{if(m.closed)throw new Error("Claude Code streaming input is closed");let w=eR(v),k=l(w);if(s.length===0)return x(w,void 0),{steered:"steered_queued",applied:k};if(t?.()===!1)return x(w,void 0),{steered:"steered_queued",applied:k};let R=u.shift();return R===void 0?i.push(w):(p(w,!0),R({done:!1,value:w})),{steered:"steered_live",applied:k}};return{messages:{[Symbol.asyncIterator](){return{next(){let v=i.shift();return v!==void 0?(p(v,!0),Promise.resolve({done:!1,value:v})):m.closed?Promise.resolve({done:!0,value:void 0}):(r?.(s[0]),new Promise(w=>{u.push(w)}))}}}},close:()=>{if(s.length===0)for(;a.length>0;){let v=a.shift();v!==void 0&&y(v.message,v.sourceSeq)}m.closed=!0,f();for(let[v,w]of c)c.delete(v),w(!1)},enqueue:b,enqueueSteer:S,drainUndeliveredFollowUps:()=>a.splice(0),completeTurn:()=>{let v=s.shift();if(!m.closed&&s.length===0){let w=a.shift();w!==void 0&&y(w.message,w.sourceSeq)}return v},currentSourceSeq:()=>s[0]}}function eR(e){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null}}function HEe(e){let n=e.answers.map(t=>({questionId:t.questionId,selectedLabels:[...t.selectedLabels],freeText:t.freeText}));switch(e.pending.kind){case"question":return{type:"resolved",decision:{type:"answer_question",updatedInput:s5(e.pending.originalInput,e.pending.request,e.answers)},answerState:{kind:"Answered",answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt},dispatch:"user_question_answer"};case"tool_approval":case"plan_review":{let t=e.answers.flatMap(i=>i.selectedLabels),r=t[0];if(r===void 0)return{type:"error",error:"claude_code_user_input_decision_missing",selectedLabels:t};let o=e.pending.approvalDecisions.get(r);return o===void 0?{type:"error",error:"claude_code_user_input_unknown_decision",selectedLabels:t}:{type:"resolved",decision:o,answerState:o.type==="deny"?{kind:"Denied",reason:o.message,answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt}:{kind:"Answered",answers:n,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:e.answeredAt},dispatch:"user_input_decision"}}}}async function EK(e){let n=e.sourceSeq;if(n===void 0)return{type:"deny",message:"Claude Code user input request had no source message"};if(e.pendingQuestions.has(e.questionRequest.requestId))return{type:"deny",message:"Claude Code user input request id was already pending"};if(km({threadId:e.threadId,pendingApprovals:e.pendingApprovals,pendingQuestions:e.pendingQuestions}))return{type:"deny",message:"Claude Code already has a pending user input request"};if(e.signal.aborted)return{type:"deny",message:"Claude Code user input request cancelled by Linzumi"};let t="Claude Code user input request cancelled by Linzumi",r=e.approvalDecisions??new Map,o,i,s=!1,a=new Promise(d=>{let u=!1,c=()=>{i!==void 0&&e.signal.removeEventListener("abort",i),e.pendingQuestions.delete(e.questionRequest.requestId)},l=m=>{u||(u=!0,c(),d(m))};o=l,i=()=>{s||(s=!0,(async()=>{try{await ml(e.kandan,e.topic,{workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,sessionId:e.sessionId,leaseEpoch:e.leaseEpoch,request:e.questionRequest,answerState:{kind:"Denied",reason:t,answeredAt:new Date().toISOString()},streamState:"interrupted"})}catch(m){console.error("kandan.claude_code_user_input_abort_publish_failed",e.questionRequest.requestId,m instanceof Error?m.message:String(m))}finally{l({type:"deny",message:t})}})())};let p={sessionId:e.sessionId,workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,leaseEpoch:e.leaseEpoch,request:e.questionRequest,resolve:l,resolved:()=>u};switch(e.kind){case"question":e.pendingQuestions.set(e.questionRequest.requestId,{...p,kind:"question",originalInput:e.request.input});break;case"tool_approval":case"plan_review":e.pendingQuestions.set(e.questionRequest.requestId,{...p,kind:e.kind,approvalDecisions:r});break}});if(i!==void 0&&(e.signal.addEventListener("abort",i,{once:!0}),e.signal.aborted))return i(),a;try{await ml(e.kandan,e.topic,{workspace:e.workspace,channel:e.channel,threadId:e.threadId,sourceSeq:n,sessionId:e.sessionId,leaseEpoch:e.leaseEpoch,request:e.questionRequest,answerState:{kind:"NeedsAnswer"},streamState:"streaming"})}catch(d){return o?.({type:"deny",message:d instanceof Error?`Claude Code user input request push failed: ${d.message}`:"Claude Code user input request push failed"}),a}return a}async function ml(e,n,t){await e.push(n,"session:stream_thread_message",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,stream_key:d5(t.request.requestId),body:t.request.title,...t.leaseEpoch===void 0?{}:{lease_epoch:t.leaseEpoch},payload:{source_message_seq:t.sourceSeq,agent_provider:"claude-code",...t.sessionId===void 0?{}:{codex_thread_id:t.sessionId,provider_session_key:t.sessionId,claude_session_id:t.sessionId},structured:a5({request:t.request,sessionId:t.sessionId,sourceSeq:t.sourceSeq,answerState:t.answerState,streamState:t.streamState})}})}function km(e){return[...e.pendingApprovals.values()].some(n=>n.threadId===e.threadId)||[...e.pendingQuestions.values()].some(n=>n.threadId===e.threadId)}async function GEe(e){let n=i5(e.request),t=new Map(n.choices.map(r=>[r.label,r.permissionDecision]));return EK({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingApprovals,pendingQuestions:e.pendingQuestions,workspace:e.workspace,channel:e.channel,threadId:e.threadId,sessionId:e.sessionId,sourceSeq:e.sourceSeq,request:e.request,questionRequest:n.request,kind:n.request.requestSource==="claude_code_plan_review"?"plan_review":"tool_approval",approvalDecisions:t,leaseEpoch:e.leaseEpoch,signal:e.signal})}function nK(){return nR.value===void 0&&(nR.value=tq(nq(process.env))),nR.value}async function tK(e){try{return await rK(e)}catch(n){if(!(n instanceof na))throw n;e.log("claude_code.dispatch_liveness_respawn_retry",{thread_id:ln(e.control,"threadId")??null,resume_session_id:e.resumeSessionId??null,waited_ms:n.waitedMs});try{return await rK(e)}catch(t){throw t instanceof na?new Error(ZEe):t}}}async function rK(e){let n=hl(e.control,"workspace"),t=hl(e.control,"channel"),r=hl(e.control,"threadId"),o=Y(e.control.rootSeq),i=Y(e.control.sourceSeq)??o,s=co(e.control.workDescription);if(e.debugTrace?.record("commander","claude.provider_start",{controlType:e.control.type,instanceId:e.instanceId,workspace:n,channel:t,threadId:r,rootSeq:o??null,sourceSeq:i??null,resumeSessionId:e.resumeSessionId??null,cwd:e.cwd}),s===void 0)throw new Error("start_instance control missing workDescription");if(e.log("claude_code.turn_starting",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId??null,body_preview:Fd(s),message_received_at_ms:Date.now()}),e.resumeSessionId!==void 0){let q=await nK().acquire();(q.waitedMs>0||q.timedOut)&&e.log("claude_code.resume_start_throttled",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId,waited_ms:q.waitedMs,timed_out:q.timedOut})}let a=q=>{e.log("claude_code.turn_terminal",{turn_id:null,outcome:"failed",reason:q,thread_id:r,claude_session_id:e.resumeSessionId??null})},d,u=!1,c=!1,l,p=!1,m,f=0,y=!1,x=!1,b=!1,S,v=!1,w=q=>({workspace:n,channel:t,thread_id:r,codex_thread_id:q,provider_session_key:q,agent_provider:"claude-code",claude_session_id:q,cwd:e.cwd,instance_id:e.instanceId}),k=()=>{if(!u||!c||d===void 0)return;let q=()=>{let je=d;if(p||!u||!c||je===void 0)return;p=!0;let re=e.kandan.push(e.topic,"session:typing_start",w(je)).then(()=>{}).catch(Ce=>{e.log("kandan.claude_code_typing_heartbeat_failed",{thread_id:r,claude_session_id:je,message:Ce instanceof Error?Ce.message:String(Ce)})}).finally(()=>{p=!1});m=re,re.finally(()=>{m===re&&(m=void 0)})};q(),l===void 0&&(l=setInterval(q,cRe),l.unref?.())},R=()=>{if(y){x=!0;return}u=!0,f+=1,k()},P=()=>{x&&(x=!1,R())},O=()=>{if(y){b=!0;return}ce.completeTurn()},E=()=>{b&&(b=!1,O())},j=()=>{b=!1,v=!0,ce.completeTurn()},z=async(q,je)=>{let re,Ce=new Promise(oo=>{re=setTimeout(()=>oo("timeout"),pRe),re.unref?.()}),hn=await Promise.race([q.then(()=>"processed"),Ce]);re!==void 0&&clearTimeout(re),hn==="timeout"&&e.log("claude_code.terminal_processing_timeout",{linzumi_thread_id:r,claude_session_id:je.sessionId,event_type:je.type})},M=async(q,je)=>{let re,Ce=new Promise(oo=>{re=setTimeout(()=>oo("timed_out"),lRe),re.unref?.()}),hn=await Promise.race([q.then(()=>"settled"),Ce]);return re!==void 0&&clearTimeout(re),hn==="timed_out"&&e.log("kandan.claude_code_typing_start_wait_timeout",{thread_id:r,claude_session_id:je}),hn},J=async()=>{let q=u,je=d,re=f;if(u=!1,l!==void 0&&(clearInterval(l),l=void 0),!(!q||!c||je===void 0))try{let Ce=m;if(Ce!==void 0&&await M(Ce,je)==="timed_out"&&m===Ce&&(m=void 0,p=!1),u||f!==re)return;await e.kandan.push(e.topic,"session:typing_stop",w(je))}catch(Ce){e.log("kandan.claude_code_typing_stop_failed",{thread_id:r,claude_session_id:je,message:Ce instanceof Error?Ce.message:String(Ce)})}},K=Qo(qe(e.control.attachments)??[]),G=await aS({cwd:e.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:i,body:s,attachments:K}).then(q=>({ok:!0,content:q})).catch(q=>({ok:!1,error:q}));if(!G.ok){let q=G.error instanceof Error?G.error.message:String(G.error),je=`Claude Code input attachment download failed: ${q}`;a(je);try{await Co(e.kandan,e.topic,e.control,"failed",je,{instanceId:e.instanceId,failureClass:"attachment_download_failed"})}catch(re){e.log("kandan.start_instance_claude_code_attachment_failed_state_push_failed",{message:re instanceof Error?re.message:String(re)})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:q}}}let W=()=>{},te=!1,me=new Promise(q=>{W=q}),ge=()=>{te||(te=!0,setImmediate(W))},ce=WEe({content:G.content,sourceSeq:i,onInputDelivered:R,isLiveSteerAllowed:()=>!y,onInputWait:q=>{q===void 0&&ge()},onSourceSeqDelivered:q=>{Ie.add(q),e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:q})}}),Ie=new Set,Re=new Set,I=0,L=co(e.control.developerPrompt),U=Ks(e.control.linzumiContext),ie=_l(e.options,e.control),se=h(e.control.approvalPolicy)!==void 0,Q=e.claudeThreadAccessStore?.resolve(r),_e=Im(e.options),Te=se?ie.approvalPolicy:Q?.approvalPolicy??_e.approvalPolicy,ae=se?ie.sandbox:Q?.sandbox??_e.sandbox,Ee=Te===void 0?void 0:Op(Te,ae),dt=Ee!==void 0?tR(Ee):ie.approvalPolicy===void 0?void 0:tR(ie.approvalPolicy);if(Ee!==void 0&&e.claudeThreadAccessStore?.record(r,{approvalPolicy:Ee,sandbox:ae}),e.resumeSessionId!==void 0)try{await t5({cwd:e.cwd,sessionId:e.resumeSessionId,validator:e.options.claudeCodeSessionValidator})}catch(q){throw a(q instanceof Error?q.message:String(q)),q}let Ke={runnerIdentity:_o(e.options.token),codexVersion:void 0},Dt=new AbortController,X=Dp({stop:()=>{Dt.signal.aborted||Dt.abort(new Error("engine child reaper teardown"))},pid:void 0,ownProcessGroup:!1,kind:"claude_code"}),pe=new Set(i===void 0?[]:[i]),$e={value:void 0},_n=!1,Ge,Je=[],In=!1,wt,$r=vs({kandanUrl:e.options.kandanUrl,accessToken:e.options.token,fetchImpl:e.options.fetch,operatingMode:"text"}),qa=s.trim().slice(0,2e3),xi=eN({replacePlanSteps:$r.replaceCodingJobPlanSteps,threadId:r,goal:qa,log:e.log}),N=async()=>{if(e.resumeSessionId!==void 0)return;let q=5e3,je=new AbortController,re,Ce=new Promise(hn=>{re=setTimeout(()=>{je.abort(new Error("claude goal seed timed out")),e.log("claude_code.goal_seed_timeout",{thread_id:r,timeout_ms:q}),hn()},q)});try{await Promise.race([nN({upsertCodingJobPlan:$r.upsertCodingJobPlan,threadId:r,goal:qa,log:e.log,signal:je.signal}),Ce])}finally{re!==void 0&&clearTimeout(re)}},ne=Gq({instanceId:e.instanceId,cwd:e.cwd,threadKey:`${n}:${t}:${r}`,persistDir:e.options.claudeCodeRunner===void 0?ym():void 0,wire:()=>({workspaceSlug:n,channelSlug:t,kandanThreadId:r,codexThreadId:d??e.resumeSessionId,rootSeq:o,leaseEpoch:e.leaseEpochFor?.(r)}),push:async(q,je,re,Ce)=>{let hn=await e.kandan.push(e.topic,q,je,Ce);if(Z(hn)&&hn.status==="ok")return hn;throw new Error(`kandan push failed: ${q}: ${JSON.stringify(hn).slice(0,500)}`)},preparePush:(q,je)=>Og({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,cwd:e.cwd,kandanUrl:e.options.kandanUrl,token:e.options.token,fetch:e.options.fetch,log:(re,Ce)=>e.log(re,Ce)},q,je),runnerPayload:(q,je,re,Ce)=>td({...e.options,cwd:e.cwd},e.instanceId,q,je,Ke,re,Ce),currentSourceSeq:ce.currentSourceSeq,onTurnTerminal:(q,je,re,Ce,hn)=>{e.log("claude_code.turn_terminal",{turn_id:q,outcome:je,reason:re??null,thread_id:r,claude_session_id:d??null}),je==="completed"&&hn!==void 0&&e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:hn}),S?.(),S=void 0},onTodoWriteCompleted:xi.handleTodoWrite,suppressProcessingState:()=>{for(let q of e.pendingClaudeCodeApprovals.values())if(q.threadId===r)return!0;for(let q of e.pendingClaudeCodeUserQuestions.values())if(q.threadId===r)return!0;return!1},log:e.log,debugTrace:e.debugTrace}),oe=e.options.claudeCodeRunner===void 0&&LN(process.env)?jN({captureDir:mt(xK(),`linzumi-claude-live-bash-${e.instanceId}`),onOutputDelta:(q,je)=>{d!==void 0&&ne.handleTranscriptEvent({type:"command_output_delta",sessionId:d,itemKey:q,delta:je})},log:(q,je)=>e.log(q,je)}):void 0,le,ve;try{let q=UK(),je=yR(e.options);le=je.cleanup;let re=hs({command:q.command,argsPrefix:q.argsPrefix,kandanUrl:e.options.kandanUrl,authFilePath:je.path,ownerUsername:c0(e.options),operatingMode:"text",cwd:e.cwd,threadId:r,toolScope:e.options.codingJobToolScope,devServices:{scope:e.options.runnerId,ownerPid:gR(e.options)}});ve=k5(re)}catch(q){le?.(),le=void 0,e.log("claude_code.mcp_config_failed",{message:q instanceof Error?q.message:String(q),thread_id:r})}let De={kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,cwd:e.cwd,initialPrompt:s,rootSeq:o,log:e.log},dn=new Map,zn=async q=>{let je=Date.now(),re=rT(q.rateLimit,je);e.log("claude_code.rate_limit",{linzumi_thread_id:r,claude_session_id:q.sessionId??d??null,rate_limit_summary:`claude/${q.rateLimit.rateLimitType??"account"} ${re}`,status:q.rateLimit.status??null,utilization_percent:q.rateLimit.utilizationPercent??null,resets_at_ms:q.rateLimit.resetsAtMs??null});let Ce=q.rateLimit.rateLimitType??"account",hn=c2e(q.rateLimit);if(hn!==dn.get(Ce))try{await l2e({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,claudeSessionId:q.sessionId??d,rateLimit:q.rateLimit}),dn.set(Ce,hn)}catch(oo){e.log("claude_code.rate_limit_post_failed",{thread_id:r,message:oo instanceof Error?oo.message:String(oo)})}},On=async q=>{if(I=Date.now(),e.debugTrace?.record("claude-transcript","transcript.event",{eventType:q.type,threadId:r,activeSessionId:d??null,event:q}),Na.observeTranscriptEvent(q),q.type==="tool_call"&&q.toolName==="Bash"){let re=h(q.input.command);re!==void 0&&hy(r,re)}try{await n2e(De,q)}catch(re){e.log("claude_code.session_store_mirror_failed",{session_id:q.sessionId??null,event_type:q.type,message:re instanceof Error?re.message:String(re)})}if(q.type==="session_started"){d=q.sessionId,e.log("claude_code.session_started",{linzumi_thread_id:r,claude_session_id:q.sessionId}),e.activeClaudeCodeSessions.set(q.sessionId,{abortController:Dt,workspace:n,channel:t,threadId:r,currentSourceSeq:ce.currentSourceSeq,pauseOutbox:()=>ne.pauseOutbox(),resumeOutbox:()=>ne.resumeOutbox(),inputDelivered:re=>Ie.has(re)||Re.has(re),lastSdkActivityMs:()=>I,enqueueInput:re=>{if(re.sourceSeq!==void 0&&pe.has(re.sourceSeq))return"duplicate";let Ce=ce.enqueue(re);return re.sourceSeq!==void 0&&pe.add(re.sourceSeq),Ce},closeInput:ce.close,hasActiveTurn:()=>ne.activeTurnId()!==void 0,sessionWork:()=>$e.value,steerTurn:ce.enqueueSteer,interruptTurn:async re=>{let Ce=ne.interruptActiveTurn(re);return await Ge?.interrupt(),Ce},interruptTurnBeforeAbort:re=>{let Ce=Ge;return jEe({reason:re,threadId:r,interruptActiveTurn:hn=>ne.interruptActiveTurn(hn),interruptSessionControls:Ce===void 0?void 0:()=>Ce.interrupt(),log:e.log})},discardQueuedFollowUpsForStop:()=>ce.drainUndeliveredFollowUps().map(Ce=>Ce.sourceSeq).filter(Ce=>Ce!==void 0),markFollowUpSeqDiscarded:re=>{Re.add(re)},slashCommands:async()=>{if(In)return Je;let re=await Ge?.supportedCommands();return In||re!==void 0&&(Je=re),Je},updateSettings:async re=>{let Ce={};if(re.model!==void 0&&(await Ge?.setModel(rR(re.model)),Ce.model=re.model),re.approvalPolicy!==void 0){let hn=tR(re.approvalPolicy);hn!==void 0&&(await Ge?.setPermissionMode(hn),Ce.approval_policy=re.approvalPolicy)}if(re.reasoningEffort!==void 0){let hn=oK(re.reasoningEffort);hn!==void 0&&(await Ge?.setEffort?.(hn),Ce.reasoning_effort=re.reasoningEffort)}return Ce}}),e.ensureClaudeCodeForwardPortSession?.({sessionId:q.sessionId,workspace:n,channel:t,threadId:r,cwd:e.cwd,rootSeq:o,currentSourceSeq:ce.currentSourceSeq}),ne.handleTranscriptEvent(q),await e.kandan.push(e.topic,"session:bind",{workspace:n,channel:t,thread_id:r,codex_thread_id:q.sessionId,provider_session_key:q.sessionId,agent_provider:"claude-code",claude_session_id:q.sessionId,cwd:e.cwd,instance_id:e.instanceId}),c=!0,R();return}if(q.type==="slash_command_catalog"){Je=q.commands,q.source==="commands_changed"&&(In=!0);return}let je=q.type==="turn_completed"||q.type==="turn_interrupted"||q.type==="session_completed"||q.type==="session_failed";if(je){y=!0;let re=ne.activeTurnId(),Ce=!1,hn=()=>{},oo=()=>{Ce=!0,hn()},Or=new Promise(Ho=>{hn=Ho});S=oo,ne.handleTranscriptEvent(q);let io=q.type==="turn_completed"||q.type==="turn_interrupted",Ve=io||re!==void 0||Ce;try{Ve?(await z(Or,q),await ne.flush(fRe)):S===oo&&(S=void 0)}catch(Ho){e.log("claude_code.terminal_typing_flush_timeout",{linzumi_thread_id:r,claude_session_id:q.sessionId,event_type:q.type,message:Ho instanceof Error?Ho.message:String(Ho)})}S===oo&&(S=void 0),io&&(j(),ce.currentSourceSeq()!==void 0&&ge()),(q.type==="session_completed"||q.type==="session_failed")&&d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),q.type==="session_completed"&&ge(),y=!1,await J(),E(),P(),await gy({threadKey:r,workspace:n,channel:t,threadId:r,push:(Ho,Go)=>e.kandan.push(e.topic,Ho,Go),log:(Ho,Go)=>e.log(Ho,Go)})}if((q.type==="turn_completed"||q.type==="session_completed")&&e.log("claude_code.turn_completed",{linzumi_thread_id:r,claude_session_id:q.sessionId,body_source:q.bodySource??null,body_preview:Fd(q.body)}),q.type==="rate_limit"&&await zn(q),q.type==="tool_result"&&oe?.settleTool(q.itemKey),(q.type==="turn_interrupted"||q.type==="session_failed")&&oe?.settleAll(),q.type==="session_failed"&&e.log("claude_code.session_failed",{linzumi_thread_id:r,claude_session_id:q.sessionId??null,model_transport_lane:to.lane,reason:q.reason,api_error_status:q.apiErrorProvenance?.status??null,api_error_request_id:q.apiErrorProvenance?.requestId??null,api_error_message:q.apiErrorProvenance?.message??null}),q.type==="usage"){let re=Z4(q.usage);re!==void 0&&e.log("claude_code.token_usage",{linzumi_thread_id:r,claude_session_id:q.sessionId,token_usage_summary:re})}je||ne.handleTranscriptEvent(q)},Vo=A(e.control.llmProxy),yt=h(Vo?.baseUrl)?.trim(),Zt=h(Vo?.token)?.trim(),to=pq({env:process.env,llmProxyBindingPresent:yt!==void 0&&yt!==""&&Zt!==void 0&&Zt!=="",hostedLinzumiAgentContext:e.control.linzumiAgent!==void 0||e.options.threadProcess?.role==="thread"&&e.options.linzumiAgentMcpToken!==void 0,routedNonAnthropicModel:MK(ie.model)!==void 0});e.log("claude_code.model_transport_lane",{linzumi_thread_id:r,lane:to.lane,credential_class:to.credentialClass,reason:to.reason});let Na=gq({lane:to.lane,workspace:n,channel:t,threadId:r,model:rR(ie.model),push:(q,je)=>e.kandan.push(e.topic,q,je),log:e.log}),Wo,zu,Ua;if(to.lane==="llm_proxy"&&yt!==void 0&&yt!==""&&Zt!==void 0&&Zt!==""){try{Wo=await dq({upstreamBaseUrl:yt,initialToken:Zt,log:(je,re)=>e.log(je,{linzumi_thread_id:r,...re}),debugTrace:e.debugTrace,debugTraceId:e.debugTrace===void 0?void 0:`claude-code:${e.instanceId}`,dispatcher:ei()?.dispatcher,onUpstreamRateLimited:({retryAfterMs:je})=>nK().notifyRateLimited({retryAfterMs:je})});let q=Wo;zu=uq({relay:Wo,mint:()=>a2e(e.kandan,e.topic,q.currentToken()),log:(je,re)=>e.log(je,{linzumi_thread_id:r,...re})})}catch(q){e.log("llm_proxy_relay.start_failed_fallback_to_env_token",{linzumi_thread_id:r,message:q instanceof Error?q.message:String(q)}),Wo=void 0,zu=void 0}Ua=Wo!==void 0?sK(process.env,{baseUrl:Wo.baseUrl},ie.model):sK(process.env,{baseUrl:yt,token:Zt},ie.model)}else Ua=s2e(process.env);let Se=hRe(Ua),wp=()=>ce.currentSourceSeq()!==void 0&&!km({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),Oe=(q,je)=>{if(QEe(q.toolName))return Promise.resolve({type:"allow"});let re=o5(q);switch(re.type){case"question":return(async()=>{await J();let Ce=await EK({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ce.currentSourceSeq(),request:q,questionRequest:re.request,kind:"question",approvalDecisions:void 0,leaseEpoch:e.leaseEpochFor?.(r),signal:je});return R(),Ce})();case"invalid":return Promise.resolve({type:"deny",message:re.message});case"not_question":return GEe({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ce.currentSourceSeq(),request:q,leaseEpoch:e.leaseEpochFor?.(r),signal:je})}},ro=(async()=>{let q;await N(),await Xp({cwd:e.cwd,threadKey:r,turnRef:i===void 0?"session-start":`seq-${i}`,log:(re,Ce)=>e.log(re,Ce)});let je=oK(ie.reasoningEffort);try{try{q=await n5({cwd:e.cwd,prompt:s,includeHookEvents:!0,developerInstructions:Lp({cwd:e.cwd,agentLabel:"Claude Code",planTool:"todo-write",devServicesAvailable:!0,developerPrompt:L,...cR(e.control),linzumiContext:U}),model:rR(ie.model),...typeof je=="string"?{effort:je}:{},...e.debugTrace===void 0?{}:{claudeCodeDebugFile:mt(e.debugTrace.runDir,"claude-code-debug.log")},...dt===void 0?{}:{permissionMode:dt},resumeSessionId:e.resumeSessionId,abortController:Dt,streamingInput:ce,...e.options.claudeCodeRunner===void 0?{turnStallThresholdMs:VEe(process.env),turnStallIsActive:wp,apiWaitStatusThresholdMs:1e4,apiWaitStatusItemKey:re=>{let Ce=ce.currentSourceSeq();return Ce===void 0?void 0:`system:claude-api-wait:${Ce}:${re}`}}:{},runner:e.options.claudeCodeRunner,debugTrace:e.debugTrace,canUseTool:Oe,...ve===void 0?{}:{mcpServers:ve},...oe===void 0?{}:{preToolUseHookMatchers:oe.hookMatchers,wrapApprovedToolInput:(re,Ce,hn)=>Ce==="Bash"?oe.wrapApprovedTool(re,hn):void 0},env:Se,allowedTools:["mcp__linzumi__*"],onSessionControls:re=>{Ge=re,dt==="bypassPermissions"&&(wt=DK({kandan:e.kandan,topic:e.topic,pendingClaudeCodeApprovals:e.pendingClaudeCodeApprovals,pendingClaudeCodeUserQuestions:e.pendingClaudeCodeUserQuestions,sessionThreadId:r,log:e.log,reason:"full_access_started"}).catch(Ce=>{e.log("claude_code.startup_approval_drain_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:Ce instanceof Error?Ce.message:String(Ce)})}))},onTurnCompleted:()=>{v?v=!1:O(),ce.currentSourceSeq()!==void 0&&ge()},onTranscriptEvent:On})}finally{let Ce=ce.drainUndeliveredFollowUps().map(hn=>hn.sourceSeq).filter(hn=>hn!==void 0);Ce.length>0&&e.onUndeliveredFollowUpsAtClose!==void 0&&e.onUndeliveredFollowUpsAtClose({channel:t,threadId:r,sourceSeqs:Ce}),d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),await J(),ce.close(),le?.(),oe?.close()}}catch(re){throw ne.submitLifecycle("codexDied",re instanceof Error?re.message:String(re)),await ne.close(5e3).catch(()=>{}),await Promise.race([xi.settle().catch(()=>{}),new Promise(Ce=>{setTimeout(Ce,5e3).unref?.()})]),a(re instanceof Error?re.message:String(re)),_n||e.setStartupStage("claude_code_session_failed"),re}return _n||e.setStartupStage("posting_claude_code_output"),await ne.awaitTurnsSettled(3e4),await ne.close(3e4),await Promise.race([xi.settle(),new Promise(re=>{setTimeout(re,1e4).unref?.()})]),q})();ro.finally(()=>X.unregister()).catch(()=>{}),ro.finally(()=>{zu?.stop(),Wo?.close()}).catch(()=>{}),$e.value=ro;let qu,_i=e.options.claudeCodeRunner===void 0||process.env.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS!==void 0?Ex({windowMs:Uf(process.env),isDelivered:()=>I>0,isSessionClosed:()=>!1,lastSdkActivityMs:()=>I,hasPendingBlockingRequest:()=>km({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),log:e.log,onWedged:q=>{qu={waitedMs:q.waitedMs},e.log("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:r,claude_session_id:d??e.resumeSessionId??null,waited_ms:q.waitedMs,cause:q.cause,dispatch:e.resumeSessionId===void 0?"initial_turn":"resume_turn"}),Dt.abort(new na(q.waitedMs))}}):void 0;ro.finally(()=>_i?.stop()).catch(()=>{});let Nu;try{Nu=await Promise.race([ro.then(q=>({type:"session_ended",result:q})),me.then(()=>({type:"first_turn_settled"}))])}catch(q){throw qu!==void 0&&!(q instanceof na)?new na(qu.waitedMs):q}finally{_i?.stop()}let Ba=q=>({controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,response:{session:{id:q}}},providerSession:{provider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:q}});if(Nu.type==="session_ended")return Ba(Nu.result.sessionId);e.setStartupStage("posting_claude_code_output"),_n=!0,await ne.awaitTurnsSettled(3e4);try{await ne.flush(3e4)}catch(q){e.log("claude_code.first_turn_flush_timeout",{linzumi_thread_id:r,claude_session_id:d??null,message:q instanceof Error?q.message:String(q)})}wt!==void 0&&await wt;let vp=await Promise.race([ro.then(q=>({type:"session_ended",result:q}),()=>{}),new Promise(q=>{setImmediate(()=>q(void 0))})]);if(vp!==void 0)return Ba(vp.result.sessionId);ro.then(()=>{e.log("claude_code.session_loop_ended",{linzumi_thread_id:r,claude_session_id:d??null})},q=>{e.log("claude_code.session_loop_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:q instanceof Error?q.message:String(q)})});let Ja=d??e.resumeSessionId;if(Ja!==void 0)return Ba(Ja);let sg=await ro;return Ba(sg.sessionId)}function QEe(e){return e.startsWith("mcp__linzumi__")}function tR(e){switch(e){case"never":return"bypassPermissions";case"on-request":case"untrusted":return"default";case"on-failure":return"acceptEdits";default:return}}function oK(e){switch(e?.trim().toLowerCase()){case"default":return null;case"low":return"low";case"medium":return"medium";case"high":return"high";case"xhigh":return"xhigh";default:return}}function XEe(e,n){return[...e.entries()].filter(([,t])=>t.threadId===n)}function YEe(e,n){return[...e.entries()].flatMap(([t,r])=>{switch(r.kind){case"question":return[];case"tool_approval":case"plan_review":return r.threadId===n?[[t,r]]:[]}})}async function DK(e){let n=XEe(e.pendingClaudeCodeApprovals,e.sessionThreadId);for(let[r,o]of n)o.resolve({type:"allow"}),await ii(e.kandan,e.topic,{workspace:o.workspace,channel:o.channel,threadId:o.threadId,sourceSeq:o.sourceSeq,status:"processing",reason:"Claude Code tool approved",sessionId:o.sessionId??e.sessionThreadId}),e.log("claude_code.approval_request_auto_approved",{request_id:r,source_seq:o.sourceSeq,session_id:o.sessionId??e.sessionThreadId,reason:e.reason});let t=YEe(e.pendingClaudeCodeUserQuestions,e.sessionThreadId);for(let[r,o]of t){let i=o.approvalDecisions.get("Allow")??{type:"allow"};o.resolve(i),await ml(e.kandan,e.topic,{workspace:o.workspace,channel:o.channel,threadId:o.threadId,sourceSeq:o.sourceSeq,sessionId:o.sessionId,leaseEpoch:o.leaseEpoch,request:o.request,answerState:i.type==="deny"?{kind:"Denied",reason:i.message,actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:new Date().toISOString()}:{kind:"Answered",answers:[{questionId:o.request.questions[0]?.questionId??`${r}:decision`,selectedLabels:["Allow"]}],actorUserId:e.actorUserId,actorSlug:e.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"}),e.log("claude_code.user_input_request_auto_approved",{request_id:r,source_seq:o.sourceSeq,session_id:o.sessionId??e.sessionThreadId,kind:o.kind,reason:e.reason})}}function e2e(e){return _y(e)}async function n2e(e,n){let t=r2e(n);if(t===void 0)return;let r=o2e(e,n);if(r===void 0)return;let o="root",i=t2e(`${e.workspace}:${e.cwd}:${t}:${o}`);await e.kandan.push(e.topic,"claude_session_store_append",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,cwd:e.cwd,sessionId:t,subkey:o,sequence:i,entryType:n.type,payload:r})}function t2e(e){let n=iK.get(e),t=Date.now()*1e3,r=n===void 0?t:Math.max(n+1,t);return iK.set(e,r),r}function r2e(e){switch(e.type){case"unknown":case"session_failed":return e.sessionId;default:return e.sessionId}}function o2e(e,n){switch(n.type){case"assistant_delta":case"slash_command_catalog":return;case"session_started":return{prompt:e.initialPrompt,threadId:e.threadId,rootSeq:e.rootSeq??null};case"assistant_message":return{itemKey:n.itemKey,body:n.content,streamState:n.streamState};case"tool_call":return{itemKey:n.itemKey,toolName:n.toolName,input:n.input};case"tool_result":return{itemKey:n.itemKey,toolName:n.toolName??null,body:n.content,isError:n.isError};case"reasoning_delta":return;case"reasoning_message":return{itemKey:n.itemKey,body:n.content};case"command_output":return{itemKey:n.itemKey,body:n.content};case"command_output_delta":return;case"usage":return{usage:n.usage};case"rate_limit":return{body:`Claude Code rate limit: ${rT(n.rateLimit,Date.now())}`,status:n.rateLimit.status??null,rate_limit_type:n.rateLimit.rateLimitType??null,utilization_percent:n.rateLimit.utilizationPercent??null,resets_at_ms:n.rateLimit.resetsAtMs??null};case"unknown":return{itemKey:n.itemKey,body:n.summary};case"turn_completed":case"session_completed":return{body:n.body,bodySource:n.bodySource??null,usage:n.usage??null};case"turn_interrupted":return{body:"Claude Code turn interrupted"};case"session_failed":return{body:n.reason};case"agent_status":case"agent_task_update":case"permission_mode_changed":return}}function s2e(e){let n={};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);return n}async function a2e(e,n,t){let r=await e.push(n,"llm_proxy:mint_session_token",t!==void 0&&t!==""?{currentToken:t}:{});if(Z(r)&&r.status==="ok"&&Z(r.response)&&typeof r.response.token=="string"&&r.response.token!==""){let o=r.response.max_age_seconds;return{token:r.response.token,...typeof o=="number"&&Number.isFinite(o)&&o>0?{maxAgeMs:o*1e3}:{}}}}function sK(e,n,t){let r={};for(let[i,s]of Object.entries(e))s!==void 0&&(i==="ANTHROPIC_BASE_URL"||i==="ANTHROPIC_CUSTOM_HEADERS"||i.startsWith("CLAUDE_CODE_USE_")||(r[i]=s));r.ANTHROPIC_BASE_URL=n.baseUrl,n.token!==void 0&&(r.ANTHROPIC_CUSTOM_HEADERS=`${i2e}: ${n.token}`);let o=MK(t);return o!==void 0&&(r.ANTHROPIC_DEFAULT_OPUS_MODEL=o,r.ANTHROPIC_DEFAULT_SONNET_MODEL=o,r.ANTHROPIC_DEFAULT_HAIKU_MODEL=o,r.CLAUDE_CODE_SUBAGENT_MODEL=o),r}function MK(e){let n=e?.trim();switch(n){case void 0:case"":case"default":case"haiku":case"sonnet":case"opus":case"fable-5":return;default:return n.startsWith("claude")?void 0:n}}function rR(e){let n=e?.trim();switch(n){case void 0:case"":case"default":return;case"haiku":case"sonnet":case"opus":return n;case"fable-5":return"claude-fable-5";default:return d2e(n)?"sonnet":n}}function d2e(e){let n=e.toLowerCase();return n.startsWith("gpt-")||n.startsWith("o1")||n.startsWith("o3")||n.startsWith("o4")||n.startsWith("o5")||n.startsWith("codex")}async function u2e(e,n,t,r,o){let i=ln(t,"workspace"),s=ln(t,"channel"),a=ln(t,"threadId"),d=h(t.modelProvider)?.trim(),u=h(t.model)?.trim();i===void 0||s===void 0||a===void 0||await e.push(n,"session:post_thread_message",{workspace:i,channel:s,thread_id:a,body:`Starting a new Codex thread with instructions:
|
|
1527
1530
|
|
|
1528
|
-
${r}`,payload:{metadata:{local_codex_runner:{event_type:"codex_start_instructions",codex_thread_id:o,instructions_body:r,...d===void 0||d===""?{}:{model_provider:d},...u===void 0||u===""?{}:{model:u}}}},client_message_id:`codex-start-instructions-${a}`})}function Fd(e){let n=e.replace(/\s+/g," ").trim();return n.length<=50?n:`${n.slice(0,47)}...`}function c2e(e){return[e.status??"na",e.rateLimitType??"na",e.utilizationPercent??"na",e.resetsAtMs??"na"].join(":")}async function l2e(e){await e.kandan.push(e.topic,"claude_rate_limit_state",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,agent_provider:"claude-code",...e.claudeSessionId===void 0?{}:{claude_session_id:e.claudeSessionId},rate_limit_type:e.rateLimit.rateLimitType??"account",status:e.rateLimit.status??"allowed",...e.rateLimit.utilizationPercent===void 0?{}:{utilization_percent:Math.min(100,Math.max(0,Math.round(e.rateLimit.utilizationPercent)))},...e.rateLimit.resetsAtMs===void 0?{}:{resets_at_ms:e.rateLimit.resetsAtMs}})}async function Co(e,n,t,r,o,i={}){let{failureClass:s,...a}=i,d=ca(t,r,o,{...a,...r==="failed"?oc(s):{}});d!==void 0&&await e.push(n,"message_state",d)}async function aK(e,n,t,r,o,i={}){let s=Y(t.rootSeq),a=Y(t.sourceSeq)??s;if(a===void 0)return;let d=ln(t,"workspace"),u=ln(t,"channel"),c=ln(t,"threadId");d===void 0||u===void 0||c===void 0||await e.push(n,"message_state",{workspace:d,channel:u,thread_id:c,...i.instanceId===void 0?{}:{instance_id:i.instanceId},seq:a,status:"failed",reason:r,allowed_cwds:o})}async function ii(e,n,t){if(t.sourceSeq===void 0)return;await(t.publishMode==="connected_only"?e.pushIfConnected:e.push)(n,"message_state",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,seq:t.sourceSeq,status:t.status,reason:t.reason,...t.status==="failed"?oc(t.failureClass):{},...t.sessionId===void 0?{}:{codex_thread_id:t.sessionId},agent_provider:"claude-code"})}function ca(e,n,t,r={}){let o=Y(e.rootSeq),i=Y(e.sourceSeq)??o;if(i===void 0)return;let s=hl(e,"workspace"),a=hl(e,"channel"),d=hl(e,"threadId"),u=wm(e),c=u.type==="ok"&&u.provider!=="codex"?u.provider:void 0;return{workspace:s,channel:a,thread_id:d,...r.instanceId===void 0?{}:{instance_id:r.instanceId},seq:i,status:n,reason:t,...r.codexThreadId===void 0?{}:{codex_thread_id:r.codexThreadId},...r.retryable===!0?{retryable:!0}:{},...r.fate!==void 0&&bo(r.fate)?{fate:r.fate}:{},...c===void 0?{}:{agent_provider:c}}}function hl(e,n){return p2e(e,n)}function p2e(e,n){let t=ln(e,n);if(t===void 0)throw new Error(`${e.type} control missing ${n}`);return t}function ln(e,n){let t=h(e[n])?.trim();if(!(t===void 0||t===""))return t}function _l(e,n){let t=Im(e),r=n.sandbox??t.sandbox,o=h(n.modelProvider)?.trim(),i=n.sandboxedApprovalNeverDefault===!0?!0:void 0;return{model:n.model??t.model,modelProvider:o===void 0||o===""?void 0:o,reasoningEffort:n.reasoningEffort??t.reasoningEffort,approvalPolicy:Op(n.approvalPolicy??t.approvalPolicy,r,{sandboxedNeverDefault:i}),sandbox:r,sandboxedApprovalNeverDefault:i,fast:n.fast??e.fast,allowPortForwardingByDefault
|
|
1531
|
+
${r}`,payload:{metadata:{local_codex_runner:{event_type:"codex_start_instructions",codex_thread_id:o,instructions_body:r,...d===void 0||d===""?{}:{model_provider:d},...u===void 0||u===""?{}:{model:u}}}},client_message_id:`codex-start-instructions-${a}`})}function Fd(e){let n=e.replace(/\s+/g," ").trim();return n.length<=50?n:`${n.slice(0,47)}...`}function c2e(e){return[e.status??"na",e.rateLimitType??"na",e.utilizationPercent??"na",e.resetsAtMs??"na"].join(":")}async function l2e(e){await e.kandan.push(e.topic,"claude_rate_limit_state",{workspace:e.workspace,channel:e.channel,thread_id:e.threadId,agent_provider:"claude-code",...e.claudeSessionId===void 0?{}:{claude_session_id:e.claudeSessionId},rate_limit_type:e.rateLimit.rateLimitType??"account",status:e.rateLimit.status??"allowed",...e.rateLimit.utilizationPercent===void 0?{}:{utilization_percent:Math.min(100,Math.max(0,Math.round(e.rateLimit.utilizationPercent)))},...e.rateLimit.resetsAtMs===void 0?{}:{resets_at_ms:e.rateLimit.resetsAtMs}})}async function Co(e,n,t,r,o,i={}){let{failureClass:s,...a}=i,d=ca(t,r,o,{...a,...r==="failed"?oc(s):{}});d!==void 0&&await e.push(n,"message_state",d)}async function aK(e,n,t,r,o,i={}){let s=Y(t.rootSeq),a=Y(t.sourceSeq)??s;if(a===void 0)return;let d=ln(t,"workspace"),u=ln(t,"channel"),c=ln(t,"threadId");d===void 0||u===void 0||c===void 0||await e.push(n,"message_state",{workspace:d,channel:u,thread_id:c,...i.instanceId===void 0?{}:{instance_id:i.instanceId},seq:a,status:"failed",reason:r,allowed_cwds:o})}async function ii(e,n,t){if(t.sourceSeq===void 0)return;await(t.publishMode==="connected_only"?e.pushIfConnected:e.push)(n,"message_state",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,seq:t.sourceSeq,status:t.status,reason:t.reason,...t.status==="failed"?oc(t.failureClass):{},...t.sessionId===void 0?{}:{codex_thread_id:t.sessionId},agent_provider:"claude-code"})}function ca(e,n,t,r={}){let o=Y(e.rootSeq),i=Y(e.sourceSeq)??o;if(i===void 0)return;let s=hl(e,"workspace"),a=hl(e,"channel"),d=hl(e,"threadId"),u=wm(e),c=u.type==="ok"&&u.provider!=="codex"?u.provider:void 0;return{workspace:s,channel:a,thread_id:d,...r.instanceId===void 0?{}:{instance_id:r.instanceId},seq:i,status:n,reason:t,...r.codexThreadId===void 0?{}:{codex_thread_id:r.codexThreadId},...r.retryable===!0?{retryable:!0}:{},...r.fate!==void 0&&bo(r.fate)?{fate:r.fate}:{},...c===void 0?{}:{agent_provider:c}}}function hl(e,n){return p2e(e,n)}function p2e(e,n){let t=ln(e,n);if(t===void 0)throw new Error(`${e.type} control missing ${n}`);return t}function ln(e,n){let t=h(e[n])?.trim();if(!(t===void 0||t===""))return t}function _l(e,n){let t=Im(e),r=n.sandbox??t.sandbox,o=h(n.modelProvider)?.trim(),i=n.sandboxedApprovalNeverDefault===!0?!0:void 0;return{model:n.model??t.model,modelProvider:o===void 0||o===""?void 0:o,reasoningEffort:n.reasoningEffort??t.reasoningEffort,approvalPolicy:Op(n.approvalPolicy??t.approvalPolicy,r,{sandboxedNeverDefault:i}),sandbox:r,sandboxedApprovalNeverDefault:i,fast:n.fast??e.fast,allowPortForwardingByDefault:n.allowPortForwardingByDefault??t.allowPortForwardingByDefault??!0}}function f2e(e){return{...e.model===void 0?{}:{model:e.model},...e.reasoningEffort===void 0?{}:{reasoningEffort:e.reasoningEffort},...e.approvalPolicy===void 0?{}:{approvalPolicy:Ug(e.approvalPolicy,e.sandbox,{sandboxedNeverDefault:e.sandboxedApprovalNeverDefault})},...e.sandbox===void 0?{}:{sandbox:e.sandbox},...e.fast===!0?{serviceTier:"fast"}:{}}}function AK(e){let{runtimeSettings:n}=e;return{type:"reconnect_thread",workspace:e.workspaceSlug,channel:e.channelSlug,threadId:e.kandanThreadId,codexThreadId:e.codexThreadId,cwd:e.cwd,agentProvider:"codex",...e.rootSeq===void 0?{}:{rootSeq:e.rootSeq},...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{reasoningEffort:n.reasoningEffort},...n.sandbox===void 0?{}:{sandbox:n.sandbox},...n.approvalPolicy===void 0?{}:{approvalPolicy:n.approvalPolicy},...n.fast===void 0?{}:{fast:n.fast}}}function m2e(e){switch(e){case"exhausted":return"couldn't resume this job after several attempts; please resend your last message to continue.";case"withheld":return"this message may have already run before an unexpected shutdown; it was not re-run to avoid duplicating work. Please resend if it did not complete.";case"permanent":return"couldn't resume this job's coding session."}}function h2e(e){switch(e){case"exhausted":return"dead_letter_exhausted";case"withheld":return"dead_letter_withheld";case"permanent":return"dead_letter_permanent"}}function pl(e){let n=e.control,t=Y(n.rootSeq),r=h(n.model),o=h(n.reasoningEffort),i=h(n.sandbox),s=h(n.approvalPolicy),a=typeof n.fast=="boolean"?n.fast:void 0;return{type:"reconnect_thread",workspace:e.workspace,channel:e.channel,threadId:e.kandanThreadId,codexThreadId:e.codexThreadId,cwd:e.cwd,agentProvider:"codex",...t===void 0?{}:{rootSeq:t},...r===void 0?{}:{model:r},...o===void 0?{}:{reasoningEffort:o},...i===void 0?{}:{sandbox:i},...s===void 0?{}:{approvalPolicy:s},...a===void 0?{}:{fast:a}}}function g2e(e){let{control:n}=e;if(n.type!=="reconnect_thread")return;let t=ln(n,"channel"),r=ln(n,"threadId"),o=ln(n,"workspace"),i=Y(n.rootSeq),s=Y(n.sourceSeq)??i,a=co(n.workDescription),d=h(n.codexThreadId),u=h(n.cwd);if(!tJ({controlType:n.type,channel:t,threadId:r,sourceSeq:s,workDescription:a,workspace:o,codexThreadId:d,cwd:u,agentProvider:n.agentProvider,hasRegistryRecord:e.hasRegistryRecord}).hold||t===void 0||r===void 0||s===void 0||a===void 0)return;let l={seq:s,type:"thread.message",actorKind:void 0,actorSlug:e.identity.actorUsername,actorUserId:e.identity.actorUserId,threadId:r,threadTitle:void 0,replyToSeq:i,localRunnerEventType:void 0,body:a,attachments:Qo(qe(n.attachments)??[]),traceparent:h(n.traceparent)},p=e.hasRegistryRecord||o===void 0||d===void 0||u===void 0?void 0:{workspace:o,channel:t,kandanThreadId:r,codexThreadId:d,cwd:u,agentProvider:"codex",control:AK({workspaceSlug:o,channelSlug:t,kandanThreadId:r,codexThreadId:d,cwd:u,rootSeq:i,runtimeSettings:e.runtimeSettings}),updatedAtMs:e.nowMs};return{channel:t,threadId:r,sourceSeq:s,codexThreadId:d,queuePayload:Qu(l),registryRecord:p}}async function y2e(e){let{plan:n}=e,t=e.queue.enqueue(n.sourceSeq,"replay",n.queuePayload,e.nowMs);try{if(n.registryRecord!==void 0&&e.upsertRegistryRecord(n.registryRecord),e.queuedStatePayload!==void 0)try{await e.pushQueuedState(e.queuedStatePayload)}catch(r){e.log("runner.update_restart_drain_held_state_push_failed",{thread_id:n.threadId,source_seq:n.sourceSeq,message:r instanceof Error?r.message:String(r)})}e.trackHeld({channel:n.channel,threadId:n.threadId,sourceSeq:n.sourceSeq,heldAtMs:e.nowMs})}catch(r){return e.log("runner.update_restart_drain_hold_compensated",{thread_id:n.threadId,source_seq:n.sourceSeq,residual_duplicate_entry:!t.accepted,message:r instanceof Error?r.message:String(r)}),t.accepted&&e.queue.deadLetter(n.sourceSeq),{held:!1}}return{held:!0,enqueuedFresh:t.accepted}}function dK(e){if(e.rootPid===void 0&&e.start===void 0)return;let n=[process.pid,...e.rootPid===void 0?[]:[e.rootPid],...e.commanderBoundPids??[]],t=e.commanderBoundPorts??[];return{...e.rootPid===void 0?{}:{rootPid:e.rootPid},...n.length===0?{}:{commanderBoundPids:n},...t.length===0?{}:{commanderBoundPorts:t},...e.start===void 0?{}:{start:e.start}}}function uK(e){return e.threadProcess?.role!=="thread"&&e.codexUrl===void 0}async function x2e(e){let n=process.env.LINZUMI_E2E_COMMANDER_BOUND_HTTP_PORT;if(n===void 0||n.trim()==="")return;let t=_2e(n,"LINZUMI_E2E_COMMANDER_BOUND_HTTP_PORT"),r=nRe((o,i)=>{i.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),i.end(`linzumi commander-bound probe
|
|
1529
1532
|
`)});return await b2e(r,t),e("runner.e2e_commander_bound_http_probe_started",{port:t}),{port:t,close:()=>w2e(r)}}function _2e(e,n){let t=e.trim(),r=Number.parseInt(t,10);if(!/^\d+$/u.test(t)||!Number.isInteger(r))throw new Error(`${n} must be an integer TCP port`);if(r<=0||r>65535)throw new Error(`${n} must be between 1 and 65535`);return r}function b2e(e,n){return new Promise((t,r)=>{let o=s=>{e.off("listening",i),r(s)},i=()=>{e.off("error",o),t()};e.once("error",o),e.once("listening",i),e.listen(n,"127.0.0.1")})}function w2e(e){return e.listening?new Promise((n,t)=>{e.close(r=>{if(r!==void 0){t(r);return}n()})}):Promise.resolve()}function v2e(e){return yc({rootPid:process.pid,commanderBoundPids:[process.pid],onCandidate:n=>{if(n.portKind!=="commander_bound"||e.managedForwardPorts.has(n.port))return;let t=Ii(n.command);e.markCommanderManagedForwardPort(n.port,{processName:t?.appName??gf(n),processIconKey:t?.iconKey??"terminal"}),e.pushForwardPortEvent("forward_port_resolved",{instanceId:e.instanceId,requestId:`commander-bound-${n.pid}-${n.port}`,port:n.port,decision:"approve",capabilities:e.capabilitiesPayload()})},onCandidateLost:n=>{n.portKind==="commander_bound"&&e.managedForwardPorts.has(n.port)&&(e.clearCommanderManagedForwardPort(n.port),e.pushForwardPortEvent("forward_port_revoked",{instanceId:e.instanceId,requestId:`commander-bound-${n.pid}-${n.port}`,port:n.port,decision:"revoked",reason:"listener_exited",capabilities:Hs(e.capabilitiesPayload(),n.port)}))},onError:n=>e.log("port_forward.commander_bound_watch_failed",{message:n.message})})}function S2e(e){if(e.codingJobToolScope==="coding"&&e.linzumiAgent?.mcpToken===void 0&&!cR(e).projectBound)return"coding"}function k2e(e){let n=_l(e.options,e.control),t=r0(e.control);return{...e.options,clientId:void 0,machineId:void 0,runnerLockConfigPath:void 0,workspaceSlug:e.workspaceSlug,cwd:e.cwd,codexUrl:void 0,launchTui:!1,allowedCwds:Array.from(new Set([e.cwd,...e.options.allowedCwds])),codeServerBin:e.options.editorRuntime?.mode==="server_managed"?void 0:e.options.codeServerBin,editorRuntime:void 0,threadProcess:{role:"thread",kandanThreadId:e.kandanThreadId},codexModelProvider:t.type==="provider"?t.runtime:void 0,linzumiAgentMcpToken:e.control.linzumiAgent?.mcpToken??e.options.linzumiAgentMcpToken,codingJobToolScope:S2e(e.control),vmExecution:e.options.vmExecution,executionMode:e.control.type==="start_instance"?fR(e.control.executionMode):e.options.executionMode,egressMode:e.control.type==="start_instance"?mR(e.control.egressMode):e.options.egressMode,projectId:e.control.type==="start_instance"?b1e(e.control.projectId):e.options.projectId,projectPublicId:e.control.type==="start_instance"?Cm(e.control.projectPublicId):e.options.projectPublicId,goldenImagePublicId:e.control.type==="start_instance"?Cm(e.control.goldenImagePublicId):e.options.goldenImagePublicId,spawnThreadRunner:void 0,localVmReadinessProbe:void 0,threadRunnerReadyTimeoutMs:e.options.threadRunnerReadyTimeoutMs,runtimeDefaults:{model:n.model,reasoningEffort:n.reasoningEffort,sandbox:n.sandbox,approvalPolicy:n.approvalPolicy,allowPortForwardingByDefault:n.allowPortForwardingByDefault},channelSession:void 0}}function C2e(e){if(e===void 0||!Number.isInteger(e)||e<=0)return!0;try{return process.kill(e,0),!0}catch(n){return n?.code==="EPERM"}}function Q_(e){if(e.kind==="starting")return"starting";let n=e.handle;return n.codex.isClosed?.()===!0||n.sessionClosed?.()===!0?"dead":C2e(n.processPid)?"live":"dead"}async function oR(e){switch(e.kind){case"running":await e.handle.close();return;case"starting":try{await(await e.promise).close()}catch{return}return}}function P2e(e){return e.length>cK?e.slice(e.length-cK):e}function lK(e){let n=e instanceof Error?e.message:String(e??"");return I2e.test(n)}function R2e(e){let n=qr(e.cwd,e.allowedCwds);if(n.ok)return;let t=e.allowedCwds.length===0?"none":e.allowedCwds.join(", ");return{reason:n.reason,message:`${OK} (${n.reason}): working directory ${e.cwd} cannot start a coding session on this runner (allowed roots: ${t})`}}function E2e(e){return e.split(`
|
|
1530
1533
|
`).map(n=>n.trim()).find(n=>n.startsWith(OK))}function D2e(e){let t=(e instanceof Error?e.message:String(e??"")).trim();return`stillborn_worker: ${t===""?"the engine worker never started":t0(t,dR)}`}function M2e(e){if(_C(e)){let n=e instanceof Error?e.message:String(e);return{reason:`cwd_stillbirth_circuit_open: ${t0(n.trim(),dR)}`,failureClass:"cwd_stillbirth_circuit_open"}}if(FI(e)){let n=e instanceof Error?e.message:String(e);return{reason:`runner_updating: ${t0(n.trim(),dR)}`,failureClass:"runner_updating"}}return{reason:D2e(e),failureClass:"stillborn_worker"}}function A2e(e){let n=`thread Codex worker exited before ready: code=${e.code??"null"} signal=${e.signal??"null"}`,t=e.capturedOutput.trim();return t===""?n:`${n}
|
|
1531
|
-
worker output: ${t}`}async function $2e(e,n={}){let t=Math.max(1,n.maxAttempts??$K),r=n.backoffMs??T2e,o=n.sleep??(s=>new Promise(a=>setTimeout(a,s))),i;for(let s=1;s<=t;s++){let a=await e(s);if(a.kind==="ready")return a.handle;i=a;let d=E2e(a.capturedOutput),u=s<t&&d===void 0;if(he("runner.thread_runner_exited_before_ready",{purpose:"linzumi.thread_runner",attempt:s,maxAttempts:t,code:a.code,signal:a.signal,capturedOutput:a.capturedOutput,willRespawn:u,...d===void 0?{}:{deterministicPreflightFailure:d}}),d!==void 0)throw new Error(d);if(!u)break;n.onRespawn?.({attemptNumber:s+1,previous:a}),r>0&&await o(r)}throw new Error(A2e(i??{kind:"exited-before-ready",code:null,signal:null,capturedOutput:""}))}function O2e(e){return Dp({stop:()=>{try{e.exitCode===null&&e.signalCode===null&&e.kill("SIGINT")}catch{}},pid:e.pid,ownProcessGroup:!1,kind:"linzumi.thread_runner"})}function L2e(){pR.value=pm({argv1:process.argv[1],cwd:process.cwd(),onEvent:LK})}function j2e(e,n){return{LINZUMI_THREAD_RUNNER_ROLE:"thread",LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID:e.threadProcess?.kandanThreadId??"",LINZUMI_THREAD_RUNNER_TOKEN:e.token,LINZUMI_DEV_SERVICES_PARENT_PID:String(n.devServicesParentPid),...e.codexModelProvider===void 0?{}:{LINZUMI_LLM_PROXY_TOKEN:e.codexModelProvider.llmProxyToken},LINZUMI_THREAD_RUNNER_AGENT_MCP_TOKEN:e.linzumiAgentMcpToken??"",...n.forwardableOpenAiApiKey===void 0?{}:{OPENAI_API_KEY:n.forwardableOpenAiApiKey}}}async function F2e(e){let n=cB({pinnedRef:pR,argv1:process.argv[1],cwd:process.cwd(),onEvent:LK}),t=e.threadProcess?.kandanThreadId??"",r=$3({codexBin:e.codexBin,source:e.dependencyStatus?.codex.source}),o=["run",...V2e(r.codexBin===e.codexBin?e:{...e,codexBin:r.codexBin})],i=pK(n,o),s=pK(n,W2e(o)),a=e.codexModelProvider?.provider==="openai-proxy"?gs():void 0,d={...process.env,...j2e(e,{devServicesParentPid:gR(e),forwardableOpenAiApiKey:a})};return $2e(async c=>{he("process.spawn",{command:process.execPath,args:s,cwd:e.cwd,attempt:c,purpose:"linzumi.thread_runner",codex_bin_path:r.codexBin,codex_bin_source:r.source??null,codex_version:e.dependencyStatus?.codex.version??null});let l=a0(process.execPath,i,{cwd:e.cwd,env:d,stdio:["inherit","pipe","pipe","ipc"]}),p="",m={active:!0},f=(w,k)=>{let R=l[w];R!==null&&R.on("data",M7({tuiActive:Sx,terminal:k,writeAuditEvent:he,pid:l.pid,streamName:w,capture:m,appendCapturedOutput:P=>{p=P2e(`${p}${P}`)}}))};f("stdout",process.stdout),f("stderr",process.stderr),he("process.spawned",{command:process.execPath,args:s,cwd:e.cwd,pid:l.pid,attempt:c,purpose:"linzumi.thread_runner"});let y=O2e(l),x=new Set,b={exited:!1},S={closed:!1};l.on("message",w=>{mB(w)&&(S.closed=!0,he("runner.thread_runner_session_detached",{purpose:"linzumi.thread_runner",kandanThreadId:w.kandanThreadId,reason:w.reason,pid:l.pid}))}),l.once("exit",(w,k)=>{he("process.exit",{command:process.execPath,args:s,cwd:e.cwd,pid:l.pid,code:w,signal:k,purpose:"linzumi.thread_runner"}),y.unregister(),b.exited=!0;for(let R of x)R();x.clear()});let v=await new Promise((w,k)=>{let R=!1,P,O=()=>{P!==void 0&&clearTimeout(P),l.off("message",j),l.off("close",z)},E=K=>{R||(R=!0,O(),K())},j=K=>{let G=(()=>{try{return N2e(K,t)}catch(W){E(()=>k(W instanceof Error?W:new Error(String(W))));return}})();G!==void 0&&E(()=>w({kind:"ready",kandanThreadId:G.kandanThreadId,commanderManagedPorts:G.commanderManagedPorts}))},z=(K,G)=>{E(()=>w({kind:"exited-before-ready",code:K,signal:G,capturedOutput:p}))},M=()=>{E(()=>{l.kill("SIGINT"),k(jK(t,J))})};l.on("message",j),l.once("close",z);let J=FK(e);P=setTimeout(M,J)});return v.kind==="exited-before-ready"?v:(m.active=!1,{kind:"ready",handle:{kandanThreadId:v.kandanThreadId,codex:gB(l),processPid:l.pid,commanderManagedPorts:v.commanderManagedPorts,sessionClosed:()=>S.closed,onExit:w=>{if(b.exited){queueMicrotask(w);return}x.add(w)},close:async()=>{let w=await rN(l);(w==="exited_after_sigkill"||w==="abandoned")&&he("runner.thread_runner_close_escalated",{purpose:"linzumi.thread_runner",kandanThreadId:t,pid:l.pid,outcome:w})}}})},{onRespawn:({attemptNumber:c})=>{he("runner.thread_runner_respawn",{purpose:"linzumi.thread_runner",kandanThreadId:t,cwd:e.cwd,attempt:c,maxAttempts:$K})}})}function pK(e,n){return[...bm(process.execArgv),e,...n]}function bm(e,n=0){let t=e[n];if(t===void 0)return[];if(z2e(t)){let r=e[n+1];return r===void 0?bm(e,n+1):[t,r,...bm(e,n+2)]}return q2e(t)?[t,...bm(e,n+1)]:bm(e,n+1)}function z2e(e){return["--require","-r","--import","--loader","--experimental-loader"].includes(e)}function q2e(e){return["--require=","-r=","--import=","--loader=","--experimental-loader="].some(n=>e.startsWith(n))}function N2e(e,n){if(!Z(e)||e.type!=="linzumi_thread_codex_worker_ready")return;let t=h(e.kandanThreadId);if(t!==n)throw new Error("thread Codex worker reported invalid ready payload");return{kandanThreadId:t,commanderManagedPorts:U2e(e.commanderManagedPorts)}}function U2e(e){return Array.isArray(e)?e.flatMap(n=>{if(!Z(n))return[];let t=Y(n.port);if(t===void 0||t<1||t>65535)return[];let r=Y(n.pid),o=h(n.processName),i=h(n.processIconKey),s=B2e(n.agentProvider);return[{port:t,...r===void 0?{}:{pid:r},...o===void 0?{}:{processName:o},...i===void 0?{}:{processIconKey:i},...s===void 0?{}:{agentProvider:s}}]}):[]}function B2e(e){switch(h(e)){case"codex":return"codex";case"claude-code":return"claude-code";default:return}}function J2e(e){return new Promise(n=>{let t=l0(()=>{process.off("disconnect",t),process.off("SIGINT",t),process.off("SIGTERM",t),e.off("exit",t),n()});process.once("disconnect",t),process.once("SIGINT",t),process.once("SIGTERM",t),e.once("exit",t)})}function K2e(e,n){return new Promise((t,r)=>{let o=!1,i=setTimeout(()=>{o||(o=!0,r(jK(n.kandanThreadId,n.timeoutMs)))},n.timeoutMs);e.then(s=>{o||(o=!0,clearTimeout(i),t(s))},s=>{o||(o=!0,clearTimeout(i),r(s))})})}function jK(e,n){return new Error(`thread Codex worker did not report ready within ${n}ms for Kandan thread ${e}`)}function FK(e){let n=e.threadRunnerReadyTimeoutMs??aRe;if(Number.isFinite(n)&&n>=0)return n;throw new Error("thread runner ready timeout must be a non-negative number")}function V2e(e){return["--api-url",e.kandanUrl,"--cwd",e.cwd,"--codex-bin",e.codexBin,...Ir("--workspace",e.workspaceSlug),...Ir("--log-file",e.logFile),...Ir("--debug-trace-dir",e.debugTrace?.dir),...Ir("--debug-trace-content",e.debugTrace?.contentMode),...e.fast===!0?["--fast"]:[],...Ir("--allowed-cwd",e.allowedCwds.join(",")),...Ir("--forward-port",(e.allowedForwardPorts??[]).join(",")),...Ir("--code-server-bin",e.codeServerBin),...Ir("--model",e.runtimeDefaults?.model),...Ir("--reasoning-effort",e.runtimeDefaults?.reasoningEffort),...Ir("--sandbox",e.runtimeDefaults?.sandbox),...Ir("--approval-policy",e.runtimeDefaults?.approvalPolicy),...e.codexModelProvider===void 0?[]:["--model-provider",e.codexModelProvider.provider,"--llm-proxy-base-url",e.codexModelProvider.llmProxyBaseUrl],...e.vmExecution===!0?["--vm-execution"]:[],...Ir("--execution-mode",e.executionMode),...Ir("--egress-mode",e.egressMode),...Ir("--project-public-id",e.projectPublicId),...Ir("--golden-image-id",e.goldenImagePublicId),"--allow-port-forwarding-by-default"]}function W2e(e){let n=[];for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--token"){n.push(r,"<redacted>"),t+=1;continue}r!==void 0&&n.push(r)}return n}function Ir(e,n){return n===void 0||n===""?[]:[e,n]}function H2e(e,n,t){let r=Ur(e),o=a=>d=>{n("onboarding.discovery_chain_failed",{phase:a,runnerId:e.runnerId,workspace:r??null,message:d instanceof Error?d.message:String(d)})};if(!x1e(e,r)){Promise.resolve().then(()=>t?.()).catch(o("no_scan_reprobe"));return}let i=_1e(e,r);if(JI.has(i)){n("onboarding.discovery_agents_already_started",{runnerId:e.runnerId,workspace:r});return}JI.add(i),n("onboarding.discovery_agents_started",{runnerId:e.runnerId,workspace:r,kandanUrl:e.kandanUrl});let s=Date.now();Promise.allSettled([qK(e,n),f1e(e,n)]).then(async a=>{let d=Date.now()-s,u=0;for(let c of a){if(c.status!=="fulfilled"||c.value===void 0)continue;u+=c.value.successfulPostStartWriteCount??0,await To(e,n,{...c.value,metadata:{...c.value.metadata,initial_search_duration_ms:d}})&&(u+=1)}u===0&&(JI.delete(i),n("onboarding.discovery_agents_start_key_cleared",{runnerId:e.runnerId,workspace:r})),n("onboarding.discovery_initial_search_completed",{runnerId:e.runnerId,workspace:r,duration_ms:d,workers_completed:2,successful_write_count:u}),await t?.()}).catch(o("initial_search"))}function o0(e,n){return{...e,successfulPostStartWriteCount:n}}async function iR(e,n){return await n?e+1:e}function zK(e){return e.filter(n=>n.status==="fulfilled").length}async function Q2e(e,n,t){let r=h(t.workspace)??Ur(e);if(r===void 0)throw new Error("workspace_required");let o=e1e(t.sources),i=Y2e(e.runnerId,r,o);if(KI.has(i)){n("onboarding.conversation_import_skipped",{runnerId:e.runnerId,workspace:r,sources:o,reason:"already_running"});return}KI.add(i);try{await X2e(e,n,t,r,o)}finally{KI.delete(i)}}async function X2e(e,n,t,r,o){if(o.length===0){await To(e,n,{phase:"conversations",status:"completed",placesSearched:0,message:"No local conversation imports selected",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",imported_count:0,reported_count:0}});return}await To(e,n,{phase:"conversations",status:"running",placesSearched:0,message:"Importing local conversations",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",imported_count:0,reported_count:0}});let i=e.localConversationDiscovery?.()??Dv({candidateLimit:X_}),s=new Set(o),a=i.candidates.filter(m=>s.has(m.source)).slice(0,X_),d=a.length,u=vs({kandanUrl:e.kandanUrl,accessToken:e.token,fetchImpl:e.fetch,operatingMode:"text"}),c=0,l=0,p=0;for(let[m,f]of a.entries()){try{let x=Mv(f),b=await u.noteAgentConversation({workspace:r,runner_id:e.runnerId,source:f.source,import_key:f.importKey,import_to_office_channel:!0,path:f.path,display_name:f.displayName,...f.activityAt===void 0?{}:{activity_at:f.activityAt},metadata:f.metadata,title_messages:i1e(x)}),S=a1e(b),v=h(S?.thread_id);if(h(S?.status)==="failed"){p+=1,n("onboarding.conversation_import_candidate_skipped",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:h(S?.error)??"conversation_import_failed"});continue}if(v!==void 0){let k=await t1e({client:u,options:e,workspaceSlug:r,threadId:v,candidate:f,messages:x});await s1e({client:u,workspaceSlug:r,runnerId:e.runnerId,candidate:f,threadId:v,officeImport:S,replayedMessageCount:x.length,replayedChunkCount:k}).catch(R=>{n("onboarding.conversation_import_replay_completion_failed",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:R instanceof Error?R.message:String(R)})})}c+=1}catch(x){l+=1,n("onboarding.conversation_import_candidate_failed",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:x instanceof Error?x.message:String(x)})}let y=m+1;(y===a.length||y%Z2e===0)&&await To(e,n,{phase:"conversations",status:"running",placesSearched:i.placesSearched,message:"Importing local conversations",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",duration_ms:i.durationMs,codex_count:o.includes("codex")?i.codexCount:0,claude_code_count:o.includes("claude_code")?i.claudeCodeCount:0,candidate_limit:X_,imported_count:c,failed_import_count:l,skipped_import_count:p,reported_count:c,total_count:d}})}await To(e,n,{phase:"conversations",status:"completed",placesSearched:i.placesSearched,message:"Local conversation import finished",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",duration_ms:i.durationMs,codex_count:o.includes("codex")?i.codexCount:0,claude_code_count:o.includes("claude_code")?i.claudeCodeCount:0,candidate_limit:X_,imported_count:c,failed_import_count:l,skipped_import_count:p,reported_count:c,total_count:d}})}function Y2e(e,n,t){return`${e}:${n}:${[...t].sort().join(",")}`}function e1e(e){return Array.from(new Set((Ne(e)??[]).flatMap(n=>{switch(h(n)){case"codex":return["codex"];case"claude_code":return["claude_code"];default:return[]}}))).sort()}function n1e(e){return Vt((Ne(e)??[]).flatMap(n=>{let t=h(n)?.trim();return t===void 0||t===""?[]:[t]}))}async function t1e(e){let n=0;for(let t of e.messages){let r=r1e(t);for(let o of r){let i=d1e(e.candidate.importKey,o.itemKey),s={import_role:t.role,import_source:e.candidate.source,...o.activityAt===void 0?{}:{source_activity_at:o.activityAt}};if(!(o.attachments.length>0&&o.index===r.length-1)){await e.client.sendThreadReply({workspace:e.workspaceSlug,thread_id:e.threadId,body:o.body,client_message_id:i,...s}),n+=1;continue}let d=await u1e({client:e.client,options:e.options,workspaceSlug:e.workspaceSlug,threadId:e.threadId,candidatePath:e.candidate.path,body:o.body,attachments:o.attachments});if(d.uploadedFileIds.length>0){await e.client.attachMessageFiles({workspace:e.workspaceSlug,target:{kind:"new_message",thread_id:e.threadId},body:d.body,uploaded_file_ids:d.uploadedFileIds,client_message_id:i,...s}),n+=1;continue}await e.client.sendThreadReply({workspace:e.workspaceSlug,thread_id:e.threadId,body:d.body,client_message_id:i,...s}),n+=1}}return n}function r1e(e){let n=o1e(e.body);return n.map((t,r)=>({itemKey:n.length===1?e.itemKey:`${e.itemKey}:part-${r+1}`,body:t,attachments:r===n.length-1?e.attachments:[],activityAt:e.activityAt,index:r}))}function o1e(e){let n=e.trim();if(n.length<=fl)return[n];let t=[],r=n;for(;r.length>fl;){let o=r.slice(0,fl),i=o.lastIndexOf(`
|
|
1534
|
+
worker output: ${t}`}async function $2e(e,n={}){let t=Math.max(1,n.maxAttempts??$K),r=n.backoffMs??T2e,o=n.sleep??(s=>new Promise(a=>setTimeout(a,s))),i;for(let s=1;s<=t;s++){let a=await e(s);if(a.kind==="ready")return a.handle;i=a;let d=E2e(a.capturedOutput),u=s<t&&d===void 0;if(he("runner.thread_runner_exited_before_ready",{purpose:"linzumi.thread_runner",attempt:s,maxAttempts:t,code:a.code,signal:a.signal,capturedOutput:a.capturedOutput,willRespawn:u,...d===void 0?{}:{deterministicPreflightFailure:d}}),d!==void 0)throw new Error(d);if(!u)break;n.onRespawn?.({attemptNumber:s+1,previous:a}),r>0&&await o(r)}throw new Error(A2e(i??{kind:"exited-before-ready",code:null,signal:null,capturedOutput:""}))}function O2e(e){return Dp({stop:()=>{try{e.exitCode===null&&e.signalCode===null&&e.kill("SIGINT")}catch{}},pid:e.pid,ownProcessGroup:!1,kind:"linzumi.thread_runner"})}function L2e(){pR.value=pm({argv1:process.argv[1],cwd:process.cwd(),onEvent:LK})}function j2e(e,n){return{LINZUMI_THREAD_RUNNER_ROLE:"thread",LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID:e.threadProcess?.kandanThreadId??"",LINZUMI_THREAD_RUNNER_TOKEN:e.token,LINZUMI_DEV_SERVICES_PARENT_PID:String(n.devServicesParentPid),...e.codexModelProvider===void 0?{}:{LINZUMI_LLM_PROXY_TOKEN:e.codexModelProvider.llmProxyToken},LINZUMI_THREAD_RUNNER_AGENT_MCP_TOKEN:e.linzumiAgentMcpToken??"",...n.forwardableOpenAiApiKey===void 0?{}:{OPENAI_API_KEY:n.forwardableOpenAiApiKey}}}async function F2e(e){let n=cB({pinnedRef:pR,argv1:process.argv[1],cwd:process.cwd(),onEvent:LK}),t=e.threadProcess?.kandanThreadId??"",r=$3({codexBin:e.codexBin,source:e.dependencyStatus?.codex.source}),o=["run",...V2e(r.codexBin===e.codexBin?e:{...e,codexBin:r.codexBin})],i=pK(n,o),s=pK(n,W2e(o)),a=e.codexModelProvider?.provider==="openai-proxy"?gs():void 0,d={...process.env,...j2e(e,{devServicesParentPid:gR(e),forwardableOpenAiApiKey:a})};return $2e(async c=>{he("process.spawn",{command:process.execPath,args:s,cwd:e.cwd,attempt:c,purpose:"linzumi.thread_runner",codex_bin_path:r.codexBin,codex_bin_source:r.source??null,codex_version:e.dependencyStatus?.codex.version??null});let l=a0(process.execPath,i,{cwd:e.cwd,env:d,stdio:["inherit","pipe","pipe","ipc"]}),p="",m={active:!0},f=(w,k)=>{let R=l[w];R!==null&&R.on("data",M7({tuiActive:Sx,terminal:k,writeAuditEvent:he,pid:l.pid,streamName:w,capture:m,appendCapturedOutput:P=>{p=P2e(`${p}${P}`)}}))};f("stdout",process.stdout),f("stderr",process.stderr),he("process.spawned",{command:process.execPath,args:s,cwd:e.cwd,pid:l.pid,attempt:c,purpose:"linzumi.thread_runner"});let y=O2e(l),x=new Set,b={exited:!1},S={closed:!1};l.on("message",w=>{mB(w)&&(S.closed=!0,he("runner.thread_runner_session_detached",{purpose:"linzumi.thread_runner",kandanThreadId:w.kandanThreadId,reason:w.reason,pid:l.pid}))}),l.once("exit",(w,k)=>{he("process.exit",{command:process.execPath,args:s,cwd:e.cwd,pid:l.pid,code:w,signal:k,purpose:"linzumi.thread_runner"}),y.unregister(),b.exited=!0;for(let R of x)R();x.clear()});let v=await new Promise((w,k)=>{let R=!1,P,O=()=>{P!==void 0&&clearTimeout(P),l.off("message",j),l.off("close",z)},E=K=>{R||(R=!0,O(),K())},j=K=>{let G=(()=>{try{return N2e(K,t)}catch(W){E(()=>k(W instanceof Error?W:new Error(String(W))));return}})();G!==void 0&&E(()=>w({kind:"ready",kandanThreadId:G.kandanThreadId,commanderManagedPorts:G.commanderManagedPorts}))},z=(K,G)=>{E(()=>w({kind:"exited-before-ready",code:K,signal:G,capturedOutput:p}))},M=()=>{E(()=>{l.kill("SIGINT"),k(jK(t,J))})};l.on("message",j),l.once("close",z);let J=FK(e);P=setTimeout(M,J)});return v.kind==="exited-before-ready"?v:(m.active=!1,{kind:"ready",handle:{kandanThreadId:v.kandanThreadId,codex:gB(l),processPid:l.pid,commanderManagedPorts:v.commanderManagedPorts,sessionClosed:()=>S.closed,onExit:w=>{if(b.exited){queueMicrotask(w);return}x.add(w)},close:async()=>{let w=await rN(l);(w==="exited_after_sigkill"||w==="abandoned")&&he("runner.thread_runner_close_escalated",{purpose:"linzumi.thread_runner",kandanThreadId:t,pid:l.pid,outcome:w})}}})},{onRespawn:({attemptNumber:c})=>{he("runner.thread_runner_respawn",{purpose:"linzumi.thread_runner",kandanThreadId:t,cwd:e.cwd,attempt:c,maxAttempts:$K})}})}function pK(e,n){return[...bm(process.execArgv),e,...n]}function bm(e,n=0){let t=e[n];if(t===void 0)return[];if(z2e(t)){let r=e[n+1];return r===void 0?bm(e,n+1):[t,r,...bm(e,n+2)]}return q2e(t)?[t,...bm(e,n+1)]:bm(e,n+1)}function z2e(e){return["--require","-r","--import","--loader","--experimental-loader"].includes(e)}function q2e(e){return["--require=","-r=","--import=","--loader=","--experimental-loader="].some(n=>e.startsWith(n))}function N2e(e,n){if(!Z(e)||e.type!=="linzumi_thread_codex_worker_ready")return;let t=h(e.kandanThreadId);if(t!==n)throw new Error("thread Codex worker reported invalid ready payload");return{kandanThreadId:t,commanderManagedPorts:U2e(e.commanderManagedPorts)}}function U2e(e){return Array.isArray(e)?e.flatMap(n=>{if(!Z(n))return[];let t=Y(n.port);if(t===void 0||t<1||t>65535)return[];let r=Y(n.pid),o=h(n.processName),i=h(n.processIconKey),s=B2e(n.agentProvider);return[{port:t,...r===void 0?{}:{pid:r},...o===void 0?{}:{processName:o},...i===void 0?{}:{processIconKey:i},...s===void 0?{}:{agentProvider:s}}]}):[]}function B2e(e){switch(h(e)){case"codex":return"codex";case"claude-code":return"claude-code";default:return}}function J2e(e){return new Promise(n=>{let t=l0(()=>{process.off("disconnect",t),process.off("SIGINT",t),process.off("SIGTERM",t),e.off("exit",t),n()});process.once("disconnect",t),process.once("SIGINT",t),process.once("SIGTERM",t),e.once("exit",t)})}function K2e(e,n){return new Promise((t,r)=>{let o=!1,i=setTimeout(()=>{o||(o=!0,r(jK(n.kandanThreadId,n.timeoutMs)))},n.timeoutMs);e.then(s=>{o||(o=!0,clearTimeout(i),t(s))},s=>{o||(o=!0,clearTimeout(i),r(s))})})}function jK(e,n){return new Error(`thread Codex worker did not report ready within ${n}ms for Kandan thread ${e}`)}function FK(e){let n=e.threadRunnerReadyTimeoutMs??aRe;if(Number.isFinite(n)&&n>=0)return n;throw new Error("thread runner ready timeout must be a non-negative number")}function V2e(e){return["--api-url",e.kandanUrl,"--cwd",e.cwd,"--codex-bin",e.codexBin,...Ir("--workspace",e.workspaceSlug),...Ir("--log-file",e.logFile),...Ir("--debug-trace-dir",e.debugTrace?.dir),...Ir("--debug-trace-content",e.debugTrace?.contentMode),...e.fast===!0?["--fast"]:[],...Ir("--allowed-cwd",e.allowedCwds.join(",")),...Ir("--forward-port",(e.allowedForwardPorts??[]).join(",")),...Ir("--code-server-bin",e.codeServerBin),...Ir("--model",e.runtimeDefaults?.model),...Ir("--reasoning-effort",e.runtimeDefaults?.reasoningEffort),...Ir("--sandbox",e.runtimeDefaults?.sandbox),...Ir("--approval-policy",e.runtimeDefaults?.approvalPolicy),...e.codexModelProvider===void 0?[]:["--model-provider",e.codexModelProvider.provider,"--llm-proxy-base-url",e.codexModelProvider.llmProxyBaseUrl],...e.vmExecution===!0?["--vm-execution"]:[],...Ir("--execution-mode",e.executionMode),...Ir("--egress-mode",e.egressMode),...Ir("--project-public-id",e.projectPublicId),...Ir("--golden-image-id",e.goldenImagePublicId),...e.runtimeDefaults===void 0?[]:e.runtimeDefaults.allowPortForwardingByDefault?["--allow-port-forwarding-by-default"]:["--no-allow-port-forwarding-by-default"]]}function W2e(e){let n=[];for(let t=0;t<e.length;t+=1){let r=e[t];if(r==="--token"){n.push(r,"<redacted>"),t+=1;continue}r!==void 0&&n.push(r)}return n}function Ir(e,n){return n===void 0||n===""?[]:[e,n]}function H2e(e,n,t){let r=Ur(e),o=a=>d=>{n("onboarding.discovery_chain_failed",{phase:a,runnerId:e.runnerId,workspace:r??null,message:d instanceof Error?d.message:String(d)})};if(!x1e(e,r)){Promise.resolve().then(()=>t?.()).catch(o("no_scan_reprobe"));return}let i=_1e(e,r);if(JI.has(i)){n("onboarding.discovery_agents_already_started",{runnerId:e.runnerId,workspace:r});return}JI.add(i),n("onboarding.discovery_agents_started",{runnerId:e.runnerId,workspace:r,kandanUrl:e.kandanUrl});let s=Date.now();Promise.allSettled([qK(e,n),f1e(e,n)]).then(async a=>{let d=Date.now()-s,u=0;for(let c of a){if(c.status!=="fulfilled"||c.value===void 0)continue;u+=c.value.successfulPostStartWriteCount??0,await To(e,n,{...c.value,metadata:{...c.value.metadata,initial_search_duration_ms:d}})&&(u+=1)}u===0&&(JI.delete(i),n("onboarding.discovery_agents_start_key_cleared",{runnerId:e.runnerId,workspace:r})),n("onboarding.discovery_initial_search_completed",{runnerId:e.runnerId,workspace:r,duration_ms:d,workers_completed:2,successful_write_count:u}),await t?.()}).catch(o("initial_search"))}function o0(e,n){return{...e,successfulPostStartWriteCount:n}}async function iR(e,n){return await n?e+1:e}function zK(e){return e.filter(n=>n.status==="fulfilled").length}async function Q2e(e,n,t){let r=h(t.workspace)??Ur(e);if(r===void 0)throw new Error("workspace_required");let o=e1e(t.sources),i=Y2e(e.runnerId,r,o);if(KI.has(i)){n("onboarding.conversation_import_skipped",{runnerId:e.runnerId,workspace:r,sources:o,reason:"already_running"});return}KI.add(i);try{await X2e(e,n,t,r,o)}finally{KI.delete(i)}}async function X2e(e,n,t,r,o){if(o.length===0){await To(e,n,{phase:"conversations",status:"completed",placesSearched:0,message:"No local conversation imports selected",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",imported_count:0,reported_count:0}});return}await To(e,n,{phase:"conversations",status:"running",placesSearched:0,message:"Importing local conversations",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",imported_count:0,reported_count:0}});let i=e.localConversationDiscovery?.()??Dv({candidateLimit:X_}),s=new Set(o),a=i.candidates.filter(m=>s.has(m.source)).slice(0,X_),d=a.length,u=vs({kandanUrl:e.kandanUrl,accessToken:e.token,fetchImpl:e.fetch,operatingMode:"text"}),c=0,l=0,p=0;for(let[m,f]of a.entries()){try{let x=Mv(f),b=await u.noteAgentConversation({workspace:r,runner_id:e.runnerId,source:f.source,import_key:f.importKey,import_to_office_channel:!0,path:f.path,display_name:f.displayName,...f.activityAt===void 0?{}:{activity_at:f.activityAt},metadata:f.metadata,title_messages:i1e(x)}),S=a1e(b),v=h(S?.thread_id);if(h(S?.status)==="failed"){p+=1,n("onboarding.conversation_import_candidate_skipped",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:h(S?.error)??"conversation_import_failed"});continue}if(v!==void 0){let k=await t1e({client:u,options:e,workspaceSlug:r,threadId:v,candidate:f,messages:x});await s1e({client:u,workspaceSlug:r,runnerId:e.runnerId,candidate:f,threadId:v,officeImport:S,replayedMessageCount:x.length,replayedChunkCount:k}).catch(R=>{n("onboarding.conversation_import_replay_completion_failed",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:R instanceof Error?R.message:String(R)})})}c+=1}catch(x){l+=1,n("onboarding.conversation_import_candidate_failed",{runnerId:e.runnerId,workspace:r,source:f.source,import_key:f.importKey,message:x instanceof Error?x.message:String(x)})}let y=m+1;(y===a.length||y%Z2e===0)&&await To(e,n,{phase:"conversations",status:"running",placesSearched:i.placesSearched,message:"Importing local conversations",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",duration_ms:i.durationMs,codex_count:o.includes("codex")?i.codexCount:0,claude_code_count:o.includes("claude_code")?i.claudeCodeCount:0,candidate_limit:X_,imported_count:c,failed_import_count:l,skipped_import_count:p,reported_count:c,total_count:d}})}await To(e,n,{phase:"conversations",status:"completed",placesSearched:i.placesSearched,message:"Local conversation import finished",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-import",worker_label:"Local conversation import",duration_ms:i.durationMs,codex_count:o.includes("codex")?i.codexCount:0,claude_code_count:o.includes("claude_code")?i.claudeCodeCount:0,candidate_limit:X_,imported_count:c,failed_import_count:l,skipped_import_count:p,reported_count:c,total_count:d}})}function Y2e(e,n,t){return`${e}:${n}:${[...t].sort().join(",")}`}function e1e(e){return Array.from(new Set((qe(e)??[]).flatMap(n=>{switch(h(n)){case"codex":return["codex"];case"claude_code":return["claude_code"];default:return[]}}))).sort()}function n1e(e){return Vt((qe(e)??[]).flatMap(n=>{let t=h(n)?.trim();return t===void 0||t===""?[]:[t]}))}async function t1e(e){let n=0;for(let t of e.messages){let r=r1e(t);for(let o of r){let i=d1e(e.candidate.importKey,o.itemKey),s={import_role:t.role,import_source:e.candidate.source,...o.activityAt===void 0?{}:{source_activity_at:o.activityAt}};if(!(o.attachments.length>0&&o.index===r.length-1)){await e.client.sendThreadReply({workspace:e.workspaceSlug,thread_id:e.threadId,body:o.body,client_message_id:i,...s}),n+=1;continue}let d=await u1e({client:e.client,options:e.options,workspaceSlug:e.workspaceSlug,threadId:e.threadId,candidatePath:e.candidate.path,body:o.body,attachments:o.attachments});if(d.uploadedFileIds.length>0){await e.client.attachMessageFiles({workspace:e.workspaceSlug,target:{kind:"new_message",thread_id:e.threadId},body:d.body,uploaded_file_ids:d.uploadedFileIds,client_message_id:i,...s}),n+=1;continue}await e.client.sendThreadReply({workspace:e.workspaceSlug,thread_id:e.threadId,body:d.body,client_message_id:i,...s}),n+=1}}return n}function r1e(e){let n=o1e(e.body);return n.map((t,r)=>({itemKey:n.length===1?e.itemKey:`${e.itemKey}:part-${r+1}`,body:t,attachments:r===n.length-1?e.attachments:[],activityAt:e.activityAt,index:r}))}function o1e(e){let n=e.trim();if(n.length<=fl)return[n];let t=[],r=n;for(;r.length>fl;){let o=r.slice(0,fl),i=o.lastIndexOf(`
|
|
1532
1535
|
|
|
1533
1536
|
`),s=o.lastIndexOf(`
|
|
1534
1537
|
`),a=i>fl/2?i:s>fl/2?s:fl,d=r.slice(0,a).trim();d!==""&&t.push(d),r=r.slice(a).trim()}return r!==""&&t.push(r),t}function i1e(e){let n=e.map((i,s)=>({message:i,index:s})),t=n.slice(0,fK).map(({message:i,index:s})=>hK("first",s,i)),r=Math.max(fK,n.length-G2e),o=n.slice(r).map(({message:i,index:s})=>hK("last",s,i));return[...t,...o].filter(i=>i!==void 0)}function hK(e,n,t){let r=t.body.trim();if(r!=="")return{position:e,index:n,role:t.role,body:r.length>mK?`${r.slice(0,mK).trim()}...`:r}}async function s1e(e){await e.client.noteAgentConversation({workspace:e.workspaceSlug,runner_id:e.runnerId,source:e.candidate.source,import_key:e.candidate.importKey,import_to_office_channel:!0,path:e.candidate.path,display_name:e.candidate.displayName,...e.candidate.activityAt===void 0?{}:{activity_at:e.candidate.activityAt},metadata:{...e.candidate.metadata,office_channel_import:{...e.officeImport??{},thread_id:e.threadId,replayed_message_count:e.replayedMessageCount,replayed_chunk_count:e.replayedChunkCount,replay_completed_at:new Date().toISOString()}}})}function a1e(e){let n=A(e.discovery),t=A(n?.metadata);return A(t?.office_channel_import)}function d1e(e,n){let t=zd("sha256").update(e).digest("hex"),r=zd("sha256").update(n).digest("hex");return`onboarding-import:${t.slice(0,32)}:${r.slice(0,24)}`}async function u1e(e){let n=(await Promise.all(e.attachments.map(d=>c1e(e.candidatePath,d)))).filter(d=>d!==void 0);if(n.length===0)return{body:`${e.body}
|
|
1535
1538
|
|
|
1536
|
-
${e.attachments.length} referenced attachment${e.attachments.length===1?"":"s"} were not available on disk.`,uploadedFileIds:[]};let t=await e.client.prepareMessageUploads({workspace:e.workspaceSlug,thread_id:e.threadId,files:n.map(d=>({file_name:d.fileName,content_type:d.contentType,size_bytes:d.bytes.byteLength}))}),r=
|
|
1539
|
+
${e.attachments.length} referenced attachment${e.attachments.length===1?"":"s"} were not available on disk.`,uploadedFileIds:[]};let t=await e.client.prepareMessageUploads({workspace:e.workspaceSlug,thread_id:e.threadId,files:n.map(d=>({file_name:d.fileName,content_type:d.contentType,size_bytes:d.bytes.byteLength}))}),r=qe(t.uploads)??[];if(r.length!==n.length)throw new Error("Linzumi upload prepare response count mismatch");let o=n.map((d,u)=>{let c=A(r[u]),l=h(c?.upload_url),p=h(c?.upload_method)??"PUT",m=h(c?.file_id);if(l===void 0)throw new Error("Linzumi upload prepare response missing upload_url");if(m===void 0)throw new Error("Linzumi upload prepare response missing file_id");return{file:d,fileId:m,uploadMethod:p,uploadUrl:l}}),i=await Promise.allSettled(o.map(async({file:d,uploadMethod:u,uploadUrl:c})=>{let l=d.bytes.buffer.slice(d.bytes.byteOffset,d.bytes.byteOffset+d.bytes.byteLength),p=await(e.options.fetch??globalThis.fetch)(p1e(e.options.kandanUrl,c),{method:u,headers:{"content-type":d.contentType},body:l});if(!p.ok)throw new Error(`Linzumi upload failed for ${d.fileName}: ${p.status} ${p.statusText}`)})),s=o.flatMap((d,u)=>i[u]?.status==="fulfilled"?[d.fileId]:[]),a=i.filter(d=>d.status==="rejected").length;return{body:a===0?e.body:`${e.body}
|
|
1537
1540
|
|
|
1538
1541
|
${a} referenced attachment${a===1?"":"s"} failed to upload.`,uploadedFileIds:s}}async function c1e(e,n){switch(n.kind){case"bytes":return{fileName:n.fileName,contentType:n.contentType,bytes:Buffer.from(n.dataBase64,"base64")};case"path":{let t=iRe(n.path)?n.path:Nd(fa(e),n.path);try{let r=await eRe(t);return{fileName:n.fileName??uR(t),contentType:n.contentType??l1e(t),bytes:r}}catch{return}}}}function l1e(e){switch(oRe(e).toLowerCase()){case".gif":return"image/gif";case".jpeg":case".jpg":return"image/jpeg";case".png":return"image/png";case".webp":return"image/webp";case".json":case".jsonl":return"application/json";case".md":return"text/markdown";case".txt":return"text/plain";default:return"application/octet-stream"}}function p1e(e,n){try{return new URL(n).toString()}catch{let r=e.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://");return new URL(n,r).toString()}}async function f1e(e,n){let t=Ur(e);if(t===void 0)return;await To(e,n,{phase:"conversations",status:"starting",placesSearched:0,message:"Counting local conversations",currentPlace:"Codex and Claude Code stores",metadata:{worker_id:"conversations-local-filesystem",worker_label:"Local conversation files"}});let r=0;try{let o=await e.localConversationDiscovery?.()??await Q$({log:(p,m)=>n(p,m)}),i=o.candidates.slice(0,qJ),s={worker_id:"conversations-local-filesystem",worker_label:"Local conversation files",duration_ms:o.durationMs,codex_count:o.codexCount,claude_code_count:o.claudeCodeCount,claude_code_subagent_count:o.claudeCodeSubagentCount,reported_count:i.length,report_limit:qJ,search_stats:o.searchStats};r=await iR(r,To(e,n,{phase:"conversations",status:"running",placesSearched:o.placesSearched,message:"Reporting local conversations",currentPlace:"Codex and Claude Code stores",metadata:s}));let a=vs({kandanUrl:e.kandanUrl,accessToken:e.token,fetchImpl:e.fetch,operatingMode:"text"}),d=await Promise.allSettled(i.map(p=>a.noteAgentConversation({workspace:t,runner_id:e.runnerId,source:p.source,import_key:p.importKey,path:p.path,display_name:p.displayName,...p.activityAt===void 0?{}:{activity_at:p.activityAt},metadata:p.metadata}))),u=d.filter(p=>p.status==="rejected").length;r+=zK(d);let c={...s,failed_report_count:u},l={phase:"conversations",status:"completed",placesSearched:o.placesSearched,message:"Local conversation scan finished",currentPlace:"Codex and Claude Code stores",metadata:c};return r=await iR(r,To(e,n,l)),n("onboarding.local_conversation_discovery_completed",{runnerId:e.runnerId,workspace:t,duration_ms:o.durationMs,codex_count:o.codexCount,claude_code_count:o.claudeCodeCount,claude_code_subagent_count:o.claudeCodeSubagentCount,reported_count:i.length,failed_report_count:u}),o0(l,r)}catch(o){let i=o instanceof Error?o.message:String(o),s={phase:"conversations",status:"failed",placesSearched:0,message:"Local conversation scan failed",currentPlace:"Codex and Claude Code stores",lastError:i,metadata:{worker_id:"conversations-local-filesystem",worker_label:"Local conversation files"}};return r=await iR(r,To(e,n,s)),n("onboarding.local_conversation_discovery_failed",{runnerId:e.runnerId,workspace:t,message:i}),o0(s,r)}}async function qK(e,n,t={}){let r=t.workspaceSlug??Ur(e),o=t.selectedScanRoots??m1e(e);if(r===void 0)return;let i=t.workerId??"projects-local-filesystem",s=t.workerLabel??"Local Git projects",a=t.currentPlace??o[0]??e.cwd;await To(e,n,{phase:"projects",status:"starting",placesSearched:0,message:t.startingMessage??"Searching local Git projects",currentPlace:a,currentSource:"git",workspaceSlug:r,metadata:{worker_id:i,worker_label:s,...o.length===0?{}:{selected_scan_roots:o}}});let d=0;try{let u=await e.localProjectDiscovery?.({selectedScanRoots:o,sourceRoots:t.sourceRoots,includeRuntimeCwdHint:t.includeRuntimeCwdHint})??await Z$({cwd:e.cwd,selectedScanRoots:o,sourceRoots:t.sourceRoots,includeRuntimeCwdHint:t.includeRuntimeCwdHint},{log:(y,x)=>n(y,x)}),c=vs({kandanUrl:e.kandanUrl,accessToken:e.token,fetchImpl:e.fetch,operatingMode:"text"}),l=await Promise.allSettled(u.candidates.map(y=>c.noteProjectDirectory({workspace:r,runner_id:e.runnerId,import_key:y.importKey,path:y.path,display_name:y.displayName,...y.activityAt===void 0?{}:{activity_at:y.activityAt},metadata:y.metadata}))),p=l.filter(y=>y.status==="rejected").length;d+=zK(l);let m={phase:"projects",status:"completed",placesSearched:u.placesSearched,message:u.candidates.length===0?t.emptyMessage??"No local Git projects found":t.foundMessage??"Local Git projects found",currentPlace:a,currentSource:"git",workspaceSlug:r,metadata:{worker_id:i,worker_label:s,duration_ms:u.durationMs,reported_count:u.candidates.length,failed_report_count:p,...o.length===0?{}:{selected_scan_roots:o},search_stats:u.searchStats}},f=await To(e,n,m);if(!f&&t.requireTerminalStatusWrite===!0)throw new Error("onboarding project discovery terminal status write failed");return d=f?d+1:d,n("onboarding.local_project_discovery_completed",{runnerId:e.runnerId,workspace:r,duration_ms:u.durationMs,reported_count:u.candidates.length,failed_report_count:p}),o0(m,d)}catch(u){let c=u instanceof Error?u.message:String(u),l={phase:"projects",status:"failed",placesSearched:0,message:t.failedMessage??"Local Git project scan failed",currentPlace:a,currentSource:"git",lastError:c,workspaceSlug:r,metadata:{worker_id:i,worker_label:s,...o.length===0?{}:{selected_scan_roots:o}}},p=await To(e,n,l);if(!p&&t.requireTerminalStatusWrite===!0)throw u;return d=p?d+1:d,n("onboarding.local_project_discovery_failed",{runnerId:e.runnerId,workspace:r,message:c}),o0(l,d)}}function m1e(e){let n=e.cwd.trim(),t=new Set(h1e(n));for(let o of e.projectDiscoveryImplicitCwdAliases??[])t.add(o);let r=e.projectDiscoveryCwdIsSelectedRoot===!0?e.allowedCwds:e.allowedCwds.filter(o=>!t.has(o));return Vt([...r,...e.missingAllowedCwds??[]])}function h1e(e){return e===""?[]:Vt([e,Nd($t(e))])}function g1e(e,n,t,r){return{...e,allowedCwds:n,missingAllowedCwds:t,projectDiscoveryCwdIsSelectedRoot:e.projectDiscoveryCwdIsSelectedRoot===!0||r}}function y1e(e,n){let t=new Set(Vt(e));return Vt(n).some(r=>t.has(r))}function x1e(e,n=Ur(e)){return n!==void 0&&e.threadProcess===void 0&&e.onboardingDiscovery==="start"}async function To(e,n,t){let r=t.workspaceSlug??Ur(e);if(r===void 0)return!1;let o=vs({kandanUrl:e.kandanUrl,accessToken:e.token,fetchImpl:e.fetch,operatingMode:"text"}),i={workspace:r,runner_id:e.runnerId,phase:t.phase,status:t.status,places_searched:t.placesSearched,message:t.message,...t.currentPlace===void 0||t.currentPlace===""?{}:{current_place:t.currentPlace},...t.currentSource===void 0||t.currentSource===""?{}:{current_source:t.currentSource},...t.lastError===void 0||t.lastError===""?{}:{last_error:t.lastError},...t.metadata===void 0?{}:{metadata:t.metadata}};n("onboarding.discovery_status",i);try{return await o.noteOnboardingDiscoveryStatus(i),!0}catch(s){return n("onboarding.discovery_status_failed",{phase:t.phase,status:t.status,message:s instanceof Error?s.message:String(s)}),!1}}function _1e(e,n){return`${e.kandanUrl}\0${n}\0${e.runnerId}`}function fR(e){return e==="raw"||e==="local_vm"?e:void 0}function mR(e){return e==="open"||e==="hardened"?e:void 0}function b1e(e){return typeof e=="number"&&Number.isInteger(e)&&e>0?e:void 0}function Cm(e){if(typeof e!="string")return;let n=e.trim();return n===""?void 0:n}function w1e(e){let n=e.trim();return n===""||n==="/"||!n.startsWith("/")}function v1e(e,n,t=process.env){return e.linzumiMcp===!0&&hR(n,t)}function la(e){return e.executionMode==="local_vm"?!0:e.executionMode==="raw"||e.vmExecution!==!0?!1:e.threadProcess?.role==="thread"?!0:e.dependencyStatus?.codex.available!==!0}function S1e(e){let n=[...new Set(e.map(t=>t.trim()).filter(t=>t!==""))].sort();return zd("sha256").update(JSON.stringify(n)).digest("hex").slice(0,16)}function k1e(e){if(!e.vmRouted)return{route:"host"};if(e.readiness===void 0||e.readiness.ready)return{route:"vm"};let n=e.readiness.blockers.length>0?e.readiness.blockers:["the local-VM readiness probe reported not-ready without naming blockers"],t=n.join("; ");if(e.hostCodexAvailable){let o=S1e(n);return{route:"host_fallback",blockers:n,notice:`Local VM execution is enabled for this job, but this computer is not VM-ready, so the job is running directly on the host instead. VM readiness blockers: ${t}. Run \`linzumi vm setup\` on the runner computer to enable VM execution, or \`linzumi vm disable\` to stop routing jobs through the VM path on this computer.`,postThreadNotice:e.explicitLocalVmOptIn&&e.freshStart&&o!==e.lastNoticedReadinessFingerprint,readinessFingerprint:o}}let r=e.hostCodexProbeDetail===void 0?"":` (codex probe failed: ${e.hostCodexProbeDetail})`;return{route:"fail_loud",blockers:n,reason:`local VM execution is enabled but this computer is not VM-ready (${t}) and no host codex is available to fall back to${r}. Run \`linzumi vm setup\` on the runner computer (or install codex on the host) and start the job again.`}}async function T1e(e){let n=e.dependencyStatusRef.value??e.connectTimeStatus,t=n!==void 0&&(n.codex.failure==="binary_missing"||n.codex.failure==="probe_failed"&&n.codex.failureTransient!==!0);if(!e.machineVmUnready||n===void 0||n.codex.available!==!1||t)return{hostCodexAvailable:n?.codex.available!==!1,confirmation:"not_needed"};let o=await(e.probe??Ni)(n.codex.command,e.cwd,C1e);if(!o.available)return{hostCodexAvailable:!1,confirmation:"confirmed_unavailable",probedCodex:o};let i=e.dependencyStatusRef.value??n;return e.dependencyStatusRef.value={...i,codex:o},{hostCodexAvailable:!0,confirmation:"confirmed_available",probedCodex:o}}async function NK(e,n={linzumiMcp:!0}){if(la(e))return P1e(e,n);let t=e.codexModelProvider===void 0?gs():void 0,r=ta();e.codexModelProvider===void 0&&$x(r),jx(e.cwd,{configHome:r});let o=Im(e),i=n.linzumiMcp===!0?yR(e):void 0,s=UK();try{let a=await Lx(e.codexBin,e.cwd,{model:o.model,reasoningEffort:o.reasoningEffort,fast:e.fast,...e.codexModelProvider===void 0?{}:{modelProvider:u0(e.codexModelProvider)},env:{CODEX_HOME:r,...e.codexModelProvider===void 0?{}:IK(e.codexModelProvider),...t===void 0?{}:{OPENAI_API_KEY:t}},mcpServers:i===void 0?[]:[hs({command:s.command,argsPrefix:s.argsPrefix,kandanUrl:e.kandanUrl,authFilePath:i.path,ownerUsername:c0(e),operatingMode:"text",cwd:e.cwd,threadId:e.threadProcess?.kandanThreadId,agentSession:e.linzumiAgentMcpToken!==void 0,toolScope:e.codingJobToolScope,devServices:{scope:e.runnerId,ownerPid:gR(e)}})]}),d=l0(()=>i?.cleanup());return a.process.once("exit",d),{...a,stop:()=>{a.stop(),d()}}}catch(a){throw i?.cleanup(),a}}async function P1e(e,n={linzumiMcp:!0}){let t=Im(e),r=v1e(n,e)?R1e(e):void 0,o=lR(e),i=await qT({cwd:e.cwd,kandanThreadId:e.threadProcess?.kandanThreadId,...e.threadProcess?.kandanThreadId===void 0?{}:{jobWorkspace:{jobId:e.threadProcess.kandanThreadId}},appServerOptions:{model:t.model,reasoningEffort:t.reasoningEffort,fast:e.fast,mcpServers:[],...e.codexModelProvider===void 0?{}:{modelProvider:u0(e.codexModelProvider)}},llmProxyToken:e.codexModelProvider?.llmProxyToken,...e.egressMode===void 0?{}:{egressMode:e.egressMode},...I1e(e),...r===void 0?{}:{linzumiMcp:r},onSupervisorStderr:s=>{let a=s.trimEnd();a!==""&&o("runner.vm_supervisor_stderr",{output:a})}});return{url:i.url,process:i.process,stop:i.stop}}function I1e(e){let n=e.projectPublicId;return n===void 0||n.trim()===""?{}:{golden:{projectId:n,computeKey:a_(e.kandanUrl),...e.goldenImagePublicId===void 0?{}:{explicitGoldenId:e.goldenImagePublicId},query:aP({kandanUrl:e.kandanUrl,token:e.token})}}}function R1e(e){let n=yR(e);try{return{authFileContents:pa(n.path,"utf8"),kandanUrl:e.kandanUrl,ownerUsername:c0(e),threadId:e.threadProcess?.kandanThreadId,agentSession:e.linzumiAgentMcpToken!==void 0}}finally{n.cleanup()}}function hR(e,n=process.env){return la(e)?E1e(n)!==void 0:!1}function E1e(e){let n=e.LINZUMI_VM_MCP_BUNDLE?.trim();if(n!==void 0&&n!=="")return gl(n)?n:void 0;let t=mt(fa(sRe(import.meta.url)),"mcp-server.mjs");return gl(t)?t:void 0}function D1e(e){let n=aR(e.url);return n===void 0?[]:[{port:n,...e.process.pid===void 0?{}:{pid:e.process.pid},processName:"Codex app-server",processIconKey:"codex",agentProvider:"codex"}]}function c0(e){return e.channelSession?.listenUser??_o(e.token).actorUsername}function gR(e,n=process.env){if(e.threadProcess?.role!=="thread")return process.pid;let t=Number.parseInt(n.LINZUMI_DEV_SERVICES_PARENT_PID??"",10);return Number.isInteger(t)&&t>0?t:process.ppid}function yR(e){let n=YIe(mt(xK(),"linzumi-mcp-auth-"));LJ(n,448);let t=mt(n,"auth.json");return uo({kandanUrl:e.kandanUrl,accessToken:e.linzumiAgentMcpToken??e.token,authFilePath:t}),LJ(t,384),{path:t,cleanup:()=>vm(n,{recursive:!0,force:!0})}}function l0(e){let n=!1;return()=>{switch(n){case!0:return;case!1:n=!0,e();return}}}function UK(){let e=pR.value;return Mx(process.execPath,e?.kind==="mirrored"?e.entryPath:process.argv[1],process.execArgv)}function Ur(e){return e.channelSession?.workspaceSlug??e.workspaceSlug}function Im(e){let n=e.channelSession,t=e.runtimeDefaults,r=t?.sandbox??n?.sandbox;return{model:t?.model??n?.model,reasoningEffort:t?.reasoningEffort??n?.reasoningEffort,approvalPolicy:ec(t?.approvalPolicy??n?.approvalPolicy,r),sandbox:r,allowPortForwardingByDefault:t?.allowPortForwardingByDefault??n?.allowPortForwardingByDefault}}function M1e(e){return e.type==="update_runner_config"}function A1e(e){return e.type==="fleet_breaker_state"}function $1e(e){return e.type==="set_port_forward_enabled"&&Number.isInteger(e.port)&&e.port>0&&e.port<=65535}function O1e(e){return e.type==="resolve_port_forward_request"&&typeof e.requestId=="string"&&(e.decision==="approve"||e.decision==="deny")}function Vt(e){return Array.from(new Set(e.flatMap(n=>{let t=n.trim();return t===""?[]:[t]})))}function xR(e,n={}){let t=n.probes?.mkdirFn??qd,r=n.probes?.realpathFn??yl,o=n.probes?.statFn??d0,i=[],s=[];for(let a of Vt(e)){let d=Nd($t(a));try{n.createMissing===!0&&!PN(d,o)&&t(d,{recursive:!0});let u=r(d);if(yC(u,o)){s.push(d);continue}i.push(...u===d?[u]:[u,d])}catch(u){if(JK(u)){s.push(d);continue}throw u}}return{allowedCwds:Vt(i),missingAllowedCwds:Vt(s)}}function BK(e){let n=[],t=[];for(let r of Vt(e))try{yl(Nd($t(r))),n.push(r)}catch(o){if(mC(o)){t.push(r);continue}n.push(r)}return{existing:n,missing:t}}function L1e(e,n){let t=BK(e),r=new Set(n.filter(s=>xC(s))),o=n.filter(s=>!r.has(s)),i=hC([...r]);return{advertised:Vt([...t.existing,...i.advertisable]),missing:Vt([...o,...t.missing]),dropped:t.missing,restored:i.advertisable,changed:t.missing.length>0||i.advertisable.length>0||i.rejected.length>0}}function JK(e){return typeof e=="object"&&e!==null&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR"||e.code==="EEXIST"||e.code==="EACCES"||e.code==="ELOOP"||e.code==="EIO")}function j1e(e,n){return Vt([e,...n])}function F1e(e){return Vt(e).map(n=>({path:n,isGit:Tm(n)})).sort((n,t)=>{let r=Number(t.isGit)-Number(n.isGit);return r===0?n.path.localeCompare(t.path,void 0,{sensitivity:"base"}):r})}function Tm(e){let n=mt(e,".git");try{let t=d0(n);return t.isDirectory()||t.isFile()}catch{return!1}}function z1e(e){let n=r=>{try{let o=e0("git",["remote","get-url",r],{cwd:e,encoding:"utf8",timeout:2e3});if(o.status===0&&typeof o.stdout=="string"){let i=o.stdout.trim();return i===""?void 0:i}}catch{}},t=n("origin");if(t!==void 0)return t;try{let r=e0("git",["remote"],{cwd:e,encoding:"utf8",timeout:2e3});if(r.status===0&&typeof r.stdout=="string"){let o=r.stdout.split(`
|
|
1539
1542
|
`).map(i=>i.trim()).find(i=>i!=="");if(o!==void 0)return n(o)}}catch{}}function KK(e,n){try{let t=e0("git",[...n],{cwd:e,encoding:"utf8",timeout:2e3});if(t.status===0&&typeof t.stdout=="string"){let r=t.stdout.trim();return r===""?void 0:r}}catch{}}function q1e(e){return KK(e,["branch","--show-current"])}function N1e(e){let n=KK(e,["symbolic-ref","--short","refs/remotes/origin/HEAD"]);if(n===void 0)return;let t=n.replace(/^origin\//,"");return t===""?void 0:t}function U1e(e){try{let n=JSON.parse(pa(mt(e,"package.json"),"utf8"));if(typeof n.description=="string"&&n.description.trim()!=="")return n.description.trim().slice(0,200)}catch{}for(let n of["README.md","readme.md","README"])try{let t=pa(mt(e,n),"utf8");for(let r of t.split(`
|
|
@@ -1548,7 +1551,7 @@ Open: ${e.verificationUri}
|
|
|
1548
1551
|
`;case"refresh_line":return`\r\x1B[2KCode: ${e.userCode} (waiting ${eV(e.waitedMs)}) - open ${e.verificationUri}`;case"transient":return`Device authorization poll hit a transient failure (${e.reason}); retrying with the same code.
|
|
1549
1552
|
`;case"start_failed":return`Could not mint a device authorization code (${e.reason}); retrying in ${Math.round(e.retryInMs/1e3)}s.
|
|
1550
1553
|
`}}function eV(e){let n=Math.floor(e/6e4),t=Math.floor(n/60),r=n%60;return t>0?`${t}h ${r}m`:`${r}m`}async function nV(e){let n=e.deps??{},t=n.startDeviceAuthorization??JT,r=n.pollDeviceCodeForToken??KT,o=n.now??Date.now,i=n.sleep??(y=>new Promise(x=>setTimeout(x,y))),s=e.writeStderr??(y=>process.stderr.write(y)),a=e.isInteractive??process.stderr.isTTY===!0,d=n.report??(y=>s(wDe(y))),u=n.log??(()=>{}),c=Bn(e.kandanUrl),l=o(),p=0,m,f=0;for(;;){let y;try{y=await t({httpBaseUrl:c,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,onboarding:e.onboarding,identity:e.identity})}catch(S){f+=1;let v=Math.min(_De,xDe*2**(f-1)),w=S instanceof Error?S.message:String(S);d({kind:"start_failed",reason:w,retryInMs:v}),u("device_wait.start_failed",{reason:w,retryInMs:v,attempt:f}),await i(v);continue}f=0,p+=1;let x=bDe({cycle:p,nowMs:o(),lastLoudPromptAtMs:m,isInteractive:a});x==="prompt"||x==="summary"?(m=o(),d({kind:x,cycle:p,userCode:y.userCode,verificationUri:y.verificationUri,waitedMs:o()-l})):x==="refresh_line"&&d({kind:"refresh_line",cycle:p,userCode:y.userCode,verificationUri:y.verificationUri,waitedMs:o()-l}),u("device_wait.code_issued",{cycle:p,verificationUri:y.verificationUri});let b;for(;b=await r({httpBaseUrl:c,deviceCode:y.deviceCode,expiresInSeconds:y.expiresInSeconds}),b.kind==="transient";)d({kind:"transient",reason:b.reason,waitedMs:o()-l}),u("device_wait.transient_poll_failure",{cycle:p,reason:b.reason,httpStatus:b.httpStatus??null}),await i(yDe);switch(b.kind){case"token":return u("device_wait.authorized",{cycle:p,waitedMs:o()-l}),b.token;case"denied":throw new Error("local runner device authorization was denied - a signed-in user rejected this computer");case"code_expired":case"consumed":u("device_wait.code_retired",{cycle:p,outcome:b.kind});continue;case"rejected":d({kind:"transient",reason:VT(b.reason,b.httpStatus),waitedMs:o()-l}),u("device_wait.code_rejected",{cycle:p,reason:b.reason??null,httpStatus:b.httpStatus});continue}}}var hDe,gDe,yDe,xDe,_De,tV=F(()=>{"use strict";ko();hDe=3,gDe=3600*1e3,yDe=5e3,xDe=5e3,_De=6e4});import{hostname as vDe}from"node:os";function vR(e){switch(e){case"rejected":return"Cached Linzumi local runner auth was rejected; starting OAuth.";case"not_found":return"Cached Linzumi local runner auth points at a workspace or runner the server no longer knows (it may have been reset); starting OAuth."}}async function Ud(e,n={readCachedToken:Xc,validateToken:Xf,acquireAndCacheToken:CDe}){if(e.explicitToken!==void 0)return e.explicitToken;let t=n.readCachedToken(e.kandanUrl,e.authFilePath);if(t!==void 0){let o=await n.validateToken({kandanUrl:e.kandanUrl,accessToken:t.accessToken,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,requiredScopes:e.requiredScopes});if(o==="usable")return t.accessToken;e.reportRejectedCachedToken?.(o)}let r=await n.acquireAndCacheToken(e);return e.workspaceSlug!==void 0&&await SDe(e,n,r),r}async function SDe(e,n,t){let r;try{r=await n.validateToken({kandanUrl:e.kandanUrl,accessToken:t,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,requiredScopes:e.requiredScopes})}catch{return}if(r==="not_found")throw new Error(kDe(e))}function kDe(e){let n=new URL(Bn(e.kandanUrl)).host;return`Workspace '${e.workspaceSlug}' was not found on ${n}. Sign in to the web app to create it, then re-run connect.`}async function CDe(e){let n=e.authMode??{kind:"browser",callbackHost:e.callbackHost},t=n.kind==="device"?await nV({kandanUrl:e.kandanUrl,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,onboarding:e.onboarding,identity:{runnerId:nr(e.kandanUrl),machineFingerprint:hg(),hostname:vDe()}}):await Qf({kandanUrl:e.kandanUrl,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,onboarding:e.onboarding,callbackHost:n.callbackHost??e.callbackHost});return uo({kandanUrl:e.kandanUrl,accessToken:t.accessToken,expiresInSeconds:t.expiresInSeconds,authFilePath:e.authFilePath}),t.accessToken}var p0=F(()=>{"use strict";_s();tV();sa();gg();ko()});var ih=ee(En=>{"use strict";Object.defineProperty(En,"__esModule",{value:!0});En.regexpCode=En.getEsmExportName=En.getProperty=En.safeStringify=En.stringify=En.strConcat=En.addCodeArg=En.str=En._=En.nil=En._Code=En.Name=En.IDENTIFIER=En._CodeOrName=void 0;var rh=class{};En._CodeOrName=rh;En.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var fu=class extends rh{constructor(n){if(super(),!En.IDENTIFIER.test(n))throw new Error("CodeGen: name must be a valid identifier");this.str=n}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};En.Name=fu;var $o=class extends rh{constructor(n){super(),this._items=typeof n=="string"?[n]:n}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let n=this._items[0];return n===""||n==='""'}get str(){var n;return(n=this._str)!==null&&n!==void 0?n:this._str=this._items.reduce((t,r)=>`${t}${r}`,"")}get names(){var n;return(n=this._names)!==null&&n!==void 0?n:this._names=this._items.reduce((t,r)=>(r instanceof fu&&(t[r.str]=(t[r.str]||0)+1),t),{})}};En._Code=$o;En.nil=new $o("");function _G(e,...n){let t=[e[0]],r=0;for(;r<n.length;)d1(t,n[r]),t.push(e[++r]);return new $o(t)}En._=_G;var a1=new $o("+");function bG(e,...n){let t=[oh(e[0])],r=0;for(;r<n.length;)t.push(a1),d1(t,n[r]),t.push(a1,oh(e[++r]));return aLe(t),new $o(t)}En.str=bG;function d1(e,n){n instanceof $o?e.push(...n._items):n instanceof fu?e.push(n):e.push(cLe(n))}En.addCodeArg=d1;function aLe(e){let n=1;for(;n<e.length-1;){if(e[n]===a1){let t=dLe(e[n-1],e[n+1]);if(t!==void 0){e.splice(n-1,3,t);continue}e[n++]="+"}n++}}function dLe(e,n){if(n==='""')return e;if(e==='""')return n;if(typeof e=="string")return n instanceof fu||e[e.length-1]!=='"'?void 0:typeof n!="string"?`${e.slice(0,-1)}${n}"`:n[0]==='"'?e.slice(0,-1)+n.slice(1):void 0;if(typeof n=="string"&&n[0]==='"'&&!(e instanceof fu))return`"${e}${n.slice(1)}`}function uLe(e,n){return n.emptyStr()?e:e.emptyStr()?n:bG`${e}${n}`}En.strConcat=uLe;function cLe(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:oh(Array.isArray(e)?e.join(","):e)}function lLe(e){return new $o(oh(e))}En.stringify=lLe;function oh(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}En.safeStringify=oh;function pLe(e){return typeof e=="string"&&En.IDENTIFIER.test(e)?new $o(`.${e}`):_G`[${e}]`}En.getProperty=pLe;function fLe(e){if(typeof e=="string"&&En.IDENTIFIER.test(e))return new $o(`${e}`);throw new Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}En.getEsmExportName=fLe;function mLe(e){return new $o(e.toString())}En.regexpCode=mLe});var l1=ee(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.ValueScope=Hr.ValueScopeName=Hr.Scope=Hr.varKinds=Hr.UsedValueState=void 0;var Wr=ih(),u1=class extends Error{constructor(n){super(`CodeGen: "code" for ${n} not defined`),this.value=n.value}},mb;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(mb||(Hr.UsedValueState=mb={}));Hr.varKinds={const:new Wr.Name("const"),let:new Wr.Name("let"),var:new Wr.Name("var")};var hb=class{constructor({prefixes:n,parent:t}={}){this._names={},this._prefixes=n,this._parent=t}toName(n){return n instanceof Wr.Name?n:this.name(n)}name(n){return new Wr.Name(this._newName(n))}_newName(n){let t=this._names[n]||this._nameGroup(n);return`${n}${t.index++}`}_nameGroup(n){var t,r;if(!((r=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||r===void 0)&&r.has(n)||this._prefixes&&!this._prefixes.has(n))throw new Error(`CodeGen: prefix "${n}" is not allowed in this scope`);return this._names[n]={prefix:n,index:0}}};Hr.Scope=hb;var gb=class extends Wr.Name{constructor(n,t){super(t),this.prefix=n}setValue(n,{property:t,itemIndex:r}){this.value=n,this.scopePath=(0,Wr._)`.${new Wr.Name(t)}[${r}]`}};Hr.ValueScopeName=gb;var hLe=(0,Wr._)`\n`,c1=class extends hb{constructor(n){super(n),this._values={},this._scope=n.scope,this.opts={...n,_n:n.lines?hLe:Wr.nil}}get(){return this._scope}name(n){return new gb(n,this._newName(n))}value(n,t){var r;if(t.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let o=this.toName(n),{prefix:i}=o,s=(r=t.key)!==null&&r!==void 0?r:t.ref,a=this._values[i];if(a){let c=a.get(s);if(c)return c}else a=this._values[i]=new Map;a.set(s,o);let d=this._scope[i]||(this._scope[i]=[]),u=d.length;return d[u]=t.ref,o.setValue(t,{property:i,itemIndex:u}),o}getValue(n,t){let r=this._values[n];if(r)return r.get(t)}scopeRefs(n,t=this._values){return this._reduceValues(t,r=>{if(r.scopePath===void 0)throw new Error(`CodeGen: name "${r}" has no value`);return(0,Wr._)`${n}${r.scopePath}`})}scopeCode(n=this._values,t,r){return this._reduceValues(n,o=>{if(o.value===void 0)throw new Error(`CodeGen: name "${o}" has no value`);return o.value.code},t,r)}_reduceValues(n,t,r={},o){let i=Wr.nil;for(let s in n){let a=n[s];if(!a)continue;let d=r[s]=r[s]||new Map;a.forEach(u=>{if(d.has(u))return;d.set(u,mb.Started);let c=t(u);if(c){let l=this.opts.es5?Hr.varKinds.var:Hr.varKinds.const;i=(0,Wr._)`${i}${l} ${u} = ${c};${this.opts._n}`}else if(c=o?.(u))i=(0,Wr._)`${i}${c}${this.opts._n}`;else throw new u1(u);d.set(u,mb.Completed)})}return i}};Hr.ValueScope=c1});var fn=ee(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.or=mn.and=mn.not=mn.CodeGen=mn.operators=mn.varKinds=mn.ValueScopeName=mn.ValueScope=mn.Scope=mn.Name=mn.regexpCode=mn.stringify=mn.getProperty=mn.nil=mn.strConcat=mn.str=mn._=void 0;var Sn=ih(),li=l1(),ka=ih();Object.defineProperty(mn,"_",{enumerable:!0,get:function(){return ka._}});Object.defineProperty(mn,"str",{enumerable:!0,get:function(){return ka.str}});Object.defineProperty(mn,"strConcat",{enumerable:!0,get:function(){return ka.strConcat}});Object.defineProperty(mn,"nil",{enumerable:!0,get:function(){return ka.nil}});Object.defineProperty(mn,"getProperty",{enumerable:!0,get:function(){return ka.getProperty}});Object.defineProperty(mn,"stringify",{enumerable:!0,get:function(){return ka.stringify}});Object.defineProperty(mn,"regexpCode",{enumerable:!0,get:function(){return ka.regexpCode}});Object.defineProperty(mn,"Name",{enumerable:!0,get:function(){return ka.Name}});var bb=l1();Object.defineProperty(mn,"Scope",{enumerable:!0,get:function(){return bb.Scope}});Object.defineProperty(mn,"ValueScope",{enumerable:!0,get:function(){return bb.ValueScope}});Object.defineProperty(mn,"ValueScopeName",{enumerable:!0,get:function(){return bb.ValueScopeName}});Object.defineProperty(mn,"varKinds",{enumerable:!0,get:function(){return bb.varKinds}});mn.operators={GT:new Sn._Code(">"),GTE:new Sn._Code(">="),LT:new Sn._Code("<"),LTE:new Sn._Code("<="),EQ:new Sn._Code("==="),NEQ:new Sn._Code("!=="),NOT:new Sn._Code("!"),OR:new Sn._Code("||"),AND:new Sn._Code("&&"),ADD:new Sn._Code("+")};var Ds=class{optimizeNodes(){return this}optimizeNames(n,t){return this}},p1=class extends Ds{constructor(n,t,r){super(),this.varKind=n,this.name=t,this.rhs=r}render({es5:n,_n:t}){let r=n?li.varKinds.var:this.varKind,o=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${o};`+t}optimizeNames(n,t){if(n[this.name.str])return this.rhs&&(this.rhs=Ul(this.rhs,n,t)),this}get names(){return this.rhs instanceof Sn._CodeOrName?this.rhs.names:{}}},yb=class extends Ds{constructor(n,t,r){super(),this.lhs=n,this.rhs=t,this.sideEffects=r}render({_n:n}){return`${this.lhs} = ${this.rhs};`+n}optimizeNames(n,t){if(!(this.lhs instanceof Sn.Name&&!n[this.lhs.str]&&!this.sideEffects))return this.rhs=Ul(this.rhs,n,t),this}get names(){let n=this.lhs instanceof Sn.Name?{}:{...this.lhs.names};return _b(n,this.rhs)}},f1=class extends yb{constructor(n,t,r,o){super(n,r,o),this.op=t}render({_n:n}){return`${this.lhs} ${this.op}= ${this.rhs};`+n}},m1=class extends Ds{constructor(n){super(),this.label=n,this.names={}}render({_n:n}){return`${this.label}:`+n}},h1=class extends Ds{constructor(n){super(),this.label=n,this.names={}}render({_n:n}){return`break${this.label?` ${this.label}`:""};`+n}},g1=class extends Ds{constructor(n){super(),this.error=n}render({_n:n}){return`throw ${this.error};`+n}get names(){return this.error.names}},y1=class extends Ds{constructor(n){super(),this.code=n}render({_n:n}){return`${this.code};`+n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(n,t){return this.code=Ul(this.code,n,t),this}get names(){return this.code instanceof Sn._CodeOrName?this.code.names:{}}},sh=class extends Ds{constructor(n=[]){super(),this.nodes=n}render(n){return this.nodes.reduce((t,r)=>t+r.render(n),"")}optimizeNodes(){let{nodes:n}=this,t=n.length;for(;t--;){let r=n[t].optimizeNodes();Array.isArray(r)?n.splice(t,1,...r):r?n[t]=r:n.splice(t,1)}return n.length>0?this:void 0}optimizeNames(n,t){let{nodes:r}=this,o=r.length;for(;o--;){let i=r[o];i.optimizeNames(n,t)||(gLe(n,i.names),r.splice(o,1))}return r.length>0?this:void 0}get names(){return this.nodes.reduce((n,t)=>gu(n,t.names),{})}},Ms=class extends sh{render(n){return"{"+n._n+super.render(n)+"}"+n._n}},x1=class extends sh{},Nl=class extends Ms{};Nl.kind="else";var mu=class e extends Ms{constructor(n,t){super(t),this.condition=n}render(n){let t=`if(${this.condition})`+super.render(n);return this.else&&(t+="else "+this.else.render(n)),t}optimizeNodes(){super.optimizeNodes();let n=this.condition;if(n===!0)return this.nodes;let t=this.else;if(t){let r=t.optimizeNodes();t=this.else=Array.isArray(r)?new Nl(r):r}if(t)return n===!1?t instanceof e?t:t.nodes:this.nodes.length?this:new e(wG(n),t instanceof e?[t]:t.nodes);if(!(n===!1||!this.nodes.length))return this}optimizeNames(n,t){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(n,t),!!(super.optimizeNames(n,t)||this.else))return this.condition=Ul(this.condition,n,t),this}get names(){let n=super.names;return _b(n,this.condition),this.else&&gu(n,this.else.names),n}};mu.kind="if";var hu=class extends Ms{};hu.kind="for";var _1=class extends hu{constructor(n){super(),this.iteration=n}render(n){return`for(${this.iteration})`+super.render(n)}optimizeNames(n,t){if(super.optimizeNames(n,t))return this.iteration=Ul(this.iteration,n,t),this}get names(){return gu(super.names,this.iteration.names)}},b1=class extends hu{constructor(n,t,r,o){super(),this.varKind=n,this.name=t,this.from=r,this.to=o}render(n){let t=n.es5?li.varKinds.var:this.varKind,{name:r,from:o,to:i}=this;return`for(${t} ${r}=${o}; ${r}<${i}; ${r}++)`+super.render(n)}get names(){let n=_b(super.names,this.from);return _b(n,this.to)}},xb=class extends hu{constructor(n,t,r,o){super(),this.loop=n,this.varKind=t,this.name=r,this.iterable=o}render(n){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(n)}optimizeNames(n,t){if(super.optimizeNames(n,t))return this.iterable=Ul(this.iterable,n,t),this}get names(){return gu(super.names,this.iterable.names)}},ah=class extends Ms{constructor(n,t,r){super(),this.name=n,this.args=t,this.async=r}render(n){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(n)}};ah.kind="func";var dh=class extends sh{render(n){return"return "+super.render(n)}};dh.kind="return";var w1=class extends Ms{render(n){let t="try"+super.render(n);return this.catch&&(t+=this.catch.render(n)),this.finally&&(t+=this.finally.render(n)),t}optimizeNodes(){var n,t;return super.optimizeNodes(),(n=this.catch)===null||n===void 0||n.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(n,t){var r,o;return super.optimizeNames(n,t),(r=this.catch)===null||r===void 0||r.optimizeNames(n,t),(o=this.finally)===null||o===void 0||o.optimizeNames(n,t),this}get names(){let n=super.names;return this.catch&&gu(n,this.catch.names),this.finally&&gu(n,this.finally.names),n}},uh=class extends Ms{constructor(n){super(),this.error=n}render(n){return`catch(${this.error})`+super.render(n)}};uh.kind="catch";var ch=class extends Ms{render(n){return"finally"+super.render(n)}};ch.kind="finally";var v1=class{constructor(n,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
|
|
1551
|
-
`:""},this._extScope=n,this._scope=new li.Scope({parent:n}),this._nodes=[new x1]}toString(){return this._root.render(this.opts)}name(n){return this._scope.name(n)}scopeName(n){return this._extScope.name(n)}scopeValue(n,t){let r=this._extScope.value(n,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(n,t){return this._extScope.getValue(n,t)}scopeRefs(n){return this._extScope.scopeRefs(n,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(n,t,r,o){let i=this._scope.toName(t);return r!==void 0&&o&&(this._constants[i.str]=r),this._leafNode(new p1(n,i,r)),i}const(n,t,r){return this._def(li.varKinds.const,n,t,r)}let(n,t,r){return this._def(li.varKinds.let,n,t,r)}var(n,t,r){return this._def(li.varKinds.var,n,t,r)}assign(n,t,r){return this._leafNode(new yb(n,t,r))}add(n,t){return this._leafNode(new f1(n,mn.operators.ADD,t))}code(n){return typeof n=="function"?n():n!==Sn.nil&&this._leafNode(new y1(n)),this}object(...n){let t=["{"];for(let[r,o]of n)t.length>1&&t.push(","),t.push(r),(r!==o||this.opts.es5)&&(t.push(":"),(0,Sn.addCodeArg)(t,o));return t.push("}"),new Sn._Code(t)}if(n,t,r){if(this._blockNode(new mu(n)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(n){return this._elseNode(new mu(n))}else(){return this._elseNode(new Nl)}endIf(){return this._endBlockNode(mu,Nl)}_for(n,t){return this._blockNode(n),t&&this.code(t).endFor(),this}for(n,t){return this._for(new _1(n),t)}forRange(n,t,r,o,i=this.opts.es5?li.varKinds.var:li.varKinds.let){let s=this._scope.toName(n);return this._for(new b1(i,s,t,r),()=>o(s))}forOf(n,t,r,o=li.varKinds.const){let i=this._scope.toName(n);if(this.opts.es5){let s=t instanceof Sn.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,Sn._)`${s}.length`,a=>{this.var(i,(0,Sn._)`${s}[${a}]`),r(i)})}return this._for(new xb("of",o,i,t),()=>r(i))}forIn(n,t,r,o=this.opts.es5?li.varKinds.var:li.varKinds.const){if(this.opts.ownProperties)return this.forOf(n,(0,Sn._)`Object.keys(${t})`,r);let i=this._scope.toName(n);return this._for(new xb("in",o,i,t),()=>r(i))}endFor(){return this._endBlockNode(hu)}label(n){return this._leafNode(new m1(n))}break(n){return this._leafNode(new h1(n))}return(n){let t=new dh;if(this._blockNode(t),this.code(n),t.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(dh)}try(n,t,r){if(!t&&!r)throw new Error('CodeGen: "try" without "catch" and "finally"');let o=new w1;if(this._blockNode(o),this.code(n),t){let i=this.name("e");this._currNode=o.catch=new uh(i),t(i)}return r&&(this._currNode=o.finally=new ch,this.code(r)),this._endBlockNode(uh,ch)}throw(n){return this._leafNode(new g1(n))}block(n,t){return this._blockStarts.push(this._nodes.length),n&&this.code(n).endBlock(t),this}endBlock(n){let t=this._blockStarts.pop();if(t===void 0)throw new Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||n!==void 0&&r!==n)throw new Error(`CodeGen: wrong number of nodes: ${r} vs ${n} expected`);return this._nodes.length=t,this}func(n,t=Sn.nil,r,o){return this._blockNode(new ah(n,t,r)),o&&this.code(o).endFunc(),this}endFunc(){return this._endBlockNode(ah)}optimize(n=1){for(;n-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(n){return this._currNode.nodes.push(n),this}_blockNode(n){this._currNode.nodes.push(n),this._nodes.push(n)}_endBlockNode(n,t){let r=this._currNode;if(r instanceof n||t&&r instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${n.kind}/${t.kind}`:n.kind}"`)}_elseNode(n){let t=this._currNode;if(!(t instanceof mu))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=n,this}get _root(){return this._nodes[0]}get _currNode(){let n=this._nodes;return n[n.length-1]}set _currNode(n){let t=this._nodes;t[t.length-1]=n}};mn.CodeGen=v1;function gu(e,n){for(let t in n)e[t]=(e[t]||0)+(n[t]||0);return e}function _b(e,n){return n instanceof Sn._CodeOrName?gu(e,n.names):e}function Ul(e,n,t){if(e instanceof Sn.Name)return r(e);if(!o(e))return e;return new Sn._Code(e._items.reduce((i,s)=>(s instanceof Sn.Name&&(s=r(s)),s instanceof Sn._Code?i.push(...s._items):i.push(s),i),[]));function r(i){let s=t[i.str];return s===void 0||n[i.str]!==1?i:(delete n[i.str],s)}function o(i){return i instanceof Sn._Code&&i._items.some(s=>s instanceof Sn.Name&&n[s.str]===1&&t[s.str]!==void 0)}}function gLe(e,n){for(let t in n)e[t]=(e[t]||0)-(n[t]||0)}function wG(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:(0,Sn._)`!${S1(e)}`}mn.not=wG;var yLe=vG(mn.operators.AND);function xLe(...e){return e.reduce(yLe)}mn.and=xLe;var _Le=vG(mn.operators.OR);function bLe(...e){return e.reduce(_Le)}mn.or=bLe;function vG(e){return(n,t)=>n===Sn.nil?t:t===Sn.nil?n:(0,Sn._)`${S1(n)} ${e} ${S1(t)}`}function S1(e){return e instanceof Sn.Name?e:(0,Sn._)`(${e})`}});var Dn=ee(gn=>{"use strict";Object.defineProperty(gn,"__esModule",{value:!0});gn.checkStrictMode=gn.getErrorPath=gn.Type=gn.useFunc=gn.setEvaluated=gn.evaluatedPropsToName=gn.mergeEvaluated=gn.eachItem=gn.unescapeJsonPointer=gn.escapeJsonPointer=gn.escapeFragment=gn.unescapeFragment=gn.schemaRefOrVal=gn.schemaHasRulesButRef=gn.schemaHasRules=gn.checkUnknownRules=gn.alwaysValidSchema=gn.toHash=void 0;var Qn=fn(),wLe=ih();function vLe(e){let n={};for(let t of e)n[t]=!0;return n}gn.toHash=vLe;function SLe(e,n){return typeof n=="boolean"?n:Object.keys(n).length===0?!0:(CG(e,n),!TG(n,e.self.RULES.all))}gn.alwaysValidSchema=SLe;function CG(e,n=e.schema){let{opts:t,self:r}=e;if(!t.strictSchema||typeof n=="boolean")return;let o=r.RULES.keywords;for(let i in n)o[i]||RG(e,`unknown keyword: "${i}"`)}gn.checkUnknownRules=CG;function TG(e,n){if(typeof e=="boolean")return!e;for(let t in e)if(n[t])return!0;return!1}gn.schemaHasRules=TG;function kLe(e,n){if(typeof e=="boolean")return!e;for(let t in e)if(t!=="$ref"&&n.all[t])return!0;return!1}gn.schemaHasRulesButRef=kLe;function CLe({topSchemaRef:e,schemaPath:n},t,r,o){if(!o){if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="string")return(0,Qn._)`${t}`}return(0,Qn._)`${e}${n}${(0,Qn.getProperty)(r)}`}gn.schemaRefOrVal=CLe;function TLe(e){return PG(decodeURIComponent(e))}gn.unescapeFragment=TLe;function PLe(e){return encodeURIComponent(C1(e))}gn.escapeFragment=PLe;function C1(e){return typeof e=="number"?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}gn.escapeJsonPointer=C1;function PG(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}gn.unescapeJsonPointer=PG;function ILe(e,n){if(Array.isArray(e))for(let t of e)n(t);else n(e)}gn.eachItem=ILe;function SG({mergeNames:e,mergeToName:n,mergeValues:t,resultToName:r}){return(o,i,s,a)=>{let d=s===void 0?i:s instanceof Qn.Name?(i instanceof Qn.Name?e(o,i,s):n(o,i,s),s):i instanceof Qn.Name?(n(o,s,i),i):t(i,s);return a===Qn.Name&&!(d instanceof Qn.Name)?r(o,d):d}}gn.mergeEvaluated={props:SG({mergeNames:(e,n,t)=>e.if((0,Qn._)`${t} !== true && ${n} !== undefined`,()=>{e.if((0,Qn._)`${n} === true`,()=>e.assign(t,!0),()=>e.assign(t,(0,Qn._)`${t} || {}`).code((0,Qn._)`Object.assign(${t}, ${n})`))}),mergeToName:(e,n,t)=>e.if((0,Qn._)`${t} !== true`,()=>{n===!0?e.assign(t,!0):(e.assign(t,(0,Qn._)`${t} || {}`),T1(e,t,n))}),mergeValues:(e,n)=>e===!0?!0:{...e,...n},resultToName:IG}),items:SG({mergeNames:(e,n,t)=>e.if((0,Qn._)`${t} !== true && ${n} !== undefined`,()=>e.assign(t,(0,Qn._)`${n} === true ? true : ${t} > ${n} ? ${t} : ${n}`)),mergeToName:(e,n,t)=>e.if((0,Qn._)`${t} !== true`,()=>e.assign(t,n===!0?!0:(0,Qn._)`${t} > ${n} ? ${t} : ${n}`)),mergeValues:(e,n)=>e===!0?!0:Math.max(e,n),resultToName:(e,n)=>e.var("items",n)})};function IG(e,n){if(n===!0)return e.var("props",!0);let t=e.var("props",(0,Qn._)`{}`);return n!==void 0&&T1(e,t,n),t}gn.evaluatedPropsToName=IG;function T1(e,n,t){Object.keys(t).forEach(r=>e.assign((0,Qn._)`${n}${(0,Qn.getProperty)(r)}`,!0))}gn.setEvaluated=T1;var kG={};function RLe(e,n){return e.scopeValue("func",{ref:n,code:kG[n.code]||(kG[n.code]=new wLe._Code(n.code))})}gn.useFunc=RLe;var k1;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(k1||(gn.Type=k1={}));function ELe(e,n,t){if(e instanceof Qn.Name){let r=n===k1.Num;return t?r?(0,Qn._)`"[" + ${e} + "]"`:(0,Qn._)`"['" + ${e} + "']"`:r?(0,Qn._)`"/" + ${e}`:(0,Qn._)`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return t?(0,Qn.getProperty)(e).toString():"/"+C1(e)}gn.getErrorPath=ELe;function RG(e,n,t=e.opts.strictSchema){if(t){if(n=`strict mode: ${n}`,t===!0)throw new Error(n);e.self.logger.warn(n)}}gn.checkStrictMode=RG});var As=ee(P1=>{"use strict";Object.defineProperty(P1,"__esModule",{value:!0});var vr=fn(),DLe={data:new vr.Name("data"),valCxt:new vr.Name("valCxt"),instancePath:new vr.Name("instancePath"),parentData:new vr.Name("parentData"),parentDataProperty:new vr.Name("parentDataProperty"),rootData:new vr.Name("rootData"),dynamicAnchors:new vr.Name("dynamicAnchors"),vErrors:new vr.Name("vErrors"),errors:new vr.Name("errors"),this:new vr.Name("this"),self:new vr.Name("self"),scope:new vr.Name("scope"),json:new vr.Name("json"),jsonPos:new vr.Name("jsonPos"),jsonLen:new vr.Name("jsonLen"),jsonPart:new vr.Name("jsonPart")};P1.default=DLe});var lh=ee(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.extendErrors=Sr.resetErrorsCount=Sr.reportExtraError=Sr.reportError=Sr.keyword$DataError=Sr.keywordError=void 0;var Pn=fn(),wb=Dn(),Dr=As();Sr.keywordError={message:({keyword:e})=>(0,Pn.str)`must pass "${e}" keyword validation`};Sr.keyword$DataError={message:({keyword:e,schemaType:n})=>n?(0,Pn.str)`"${e}" keyword must be ${n} ($data)`:(0,Pn.str)`"${e}" keyword is invalid ($data)`};function MLe(e,n=Sr.keywordError,t,r){let{it:o}=e,{gen:i,compositeRule:s,allErrors:a}=o,d=MG(e,n,t);r??(s||a)?EG(i,d):DG(o,(0,Pn._)`[${d}]`)}Sr.reportError=MLe;function ALe(e,n=Sr.keywordError,t){let{it:r}=e,{gen:o,compositeRule:i,allErrors:s}=r,a=MG(e,n,t);EG(o,a),i||s||DG(r,Dr.default.vErrors)}Sr.reportExtraError=ALe;function $Le(e,n){e.assign(Dr.default.errors,n),e.if((0,Pn._)`${Dr.default.vErrors} !== null`,()=>e.if(n,()=>e.assign((0,Pn._)`${Dr.default.vErrors}.length`,n),()=>e.assign(Dr.default.vErrors,null)))}Sr.resetErrorsCount=$Le;function OLe({gen:e,keyword:n,schemaValue:t,data:r,errsCount:o,it:i}){if(o===void 0)throw new Error("ajv implementation error");let s=e.name("err");e.forRange("i",o,Dr.default.errors,a=>{e.const(s,(0,Pn._)`${Dr.default.vErrors}[${a}]`),e.if((0,Pn._)`${s}.instancePath === undefined`,()=>e.assign((0,Pn._)`${s}.instancePath`,(0,Pn.strConcat)(Dr.default.instancePath,i.errorPath))),e.assign((0,Pn._)`${s}.schemaPath`,(0,Pn.str)`${i.errSchemaPath}/${n}`),i.opts.verbose&&(e.assign((0,Pn._)`${s}.schema`,t),e.assign((0,Pn._)`${s}.data`,r))})}Sr.extendErrors=OLe;function EG(e,n){let t=e.const("err",n);e.if((0,Pn._)`${Dr.default.vErrors} === null`,()=>e.assign(Dr.default.vErrors,(0,Pn._)`[${t}]`),(0,Pn._)`${Dr.default.vErrors}.push(${t})`),e.code((0,Pn._)`${Dr.default.errors}++`)}function DG(e,n){let{gen:t,validateName:r,schemaEnv:o}=e;o.$async?t.throw((0,Pn._)`new ${e.ValidationError}(${n})`):(t.assign((0,Pn._)`${r}.errors`,n),t.return(!1))}var yu={keyword:new Pn.Name("keyword"),schemaPath:new Pn.Name("schemaPath"),params:new Pn.Name("params"),propertyName:new Pn.Name("propertyName"),message:new Pn.Name("message"),schema:new Pn.Name("schema"),parentSchema:new Pn.Name("parentSchema")};function MG(e,n,t){let{createErrors:r}=e.it;return r===!1?(0,Pn._)`{}`:LLe(e,n,t)}function LLe(e,n,t={}){let{gen:r,it:o}=e,i=[jLe(o,t),FLe(e,t)];return zLe(e,n,i),r.object(...i)}function jLe({errorPath:e},{instancePath:n}){let t=n?(0,Pn.str)`${e}${(0,wb.getErrorPath)(n,wb.Type.Str)}`:e;return[Dr.default.instancePath,(0,Pn.strConcat)(Dr.default.instancePath,t)]}function FLe({keyword:e,it:{errSchemaPath:n}},{schemaPath:t,parentSchema:r}){let o=r?n:(0,Pn.str)`${n}/${e}`;return t&&(o=(0,Pn.str)`${o}${(0,wb.getErrorPath)(t,wb.Type.Str)}`),[yu.schemaPath,o]}function zLe(e,{params:n,message:t},r){let{keyword:o,data:i,schemaValue:s,it:a}=e,{opts:d,propertyName:u,topSchemaRef:c,schemaPath:l}=a;r.push([yu.keyword,o],[yu.params,typeof n=="function"?n(e):n||(0,Pn._)`{}`]),d.messages&&r.push([yu.message,typeof t=="function"?t(e):t]),d.verbose&&r.push([yu.schema,s],[yu.parentSchema,(0,Pn._)`${c}${l}`],[Dr.default.data,i]),u&&r.push([yu.propertyName,u])}});var $G=ee(Bl=>{"use strict";Object.defineProperty(Bl,"__esModule",{value:!0});Bl.boolOrEmptySchema=Bl.topBoolOrEmptySchema=void 0;var qLe=lh(),NLe=fn(),ULe=As(),BLe={message:"boolean schema is false"};function JLe(e){let{gen:n,schema:t,validateName:r}=e;t===!1?AG(e,!1):typeof t=="object"&&t.$async===!0?n.return(ULe.default.data):(n.assign((0,NLe._)`${r}.errors`,null),n.return(!0))}Bl.topBoolOrEmptySchema=JLe;function KLe(e,n){let{gen:t,schema:r}=e;r===!1?(t.var(n,!1),AG(e)):t.var(n,!0)}Bl.boolOrEmptySchema=KLe;function AG(e,n){let{gen:t,data:r}=e,o={gen:t,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,qLe.reportError)(o,BLe,void 0,n)}});var I1=ee(Jl=>{"use strict";Object.defineProperty(Jl,"__esModule",{value:!0});Jl.getRules=Jl.isJSONType=void 0;var VLe=["string","number","integer","boolean","null","object","array"],WLe=new Set(VLe);function HLe(e){return typeof e=="string"&&WLe.has(e)}Jl.isJSONType=HLe;function GLe(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Jl.getRules=GLe});var R1=ee(Ca=>{"use strict";Object.defineProperty(Ca,"__esModule",{value:!0});Ca.shouldUseRule=Ca.shouldUseGroup=Ca.schemaHasRulesForType=void 0;function ZLe({schema:e,self:n},t){let r=n.RULES.types[t];return r&&r!==!0&&OG(e,r)}Ca.schemaHasRulesForType=ZLe;function OG(e,n){return n.rules.some(t=>LG(e,t))}Ca.shouldUseGroup=OG;function LG(e,n){var t;return e[n.keyword]!==void 0||((t=n.definition.implements)===null||t===void 0?void 0:t.some(r=>e[r]!==void 0))}Ca.shouldUseRule=LG});var ph=ee(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.reportTypeError=kr.checkDataTypes=kr.checkDataType=kr.coerceAndCheckDataType=kr.getJSONTypes=kr.getSchemaTypes=kr.DataType=void 0;var QLe=I1(),XLe=R1(),YLe=lh(),un=fn(),jG=Dn(),Kl;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Kl||(kr.DataType=Kl={}));function eje(e){let n=FG(e.type);if(n.includes("null")){if(e.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!n.length&&e.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');e.nullable===!0&&n.push("null")}return n}kr.getSchemaTypes=eje;function FG(e){let n=Array.isArray(e)?e:e?[e]:[];if(n.every(QLe.isJSONType))return n;throw new Error("type must be JSONType or JSONType[]: "+n.join(","))}kr.getJSONTypes=FG;function nje(e,n){let{gen:t,data:r,opts:o}=e,i=tje(n,o.coerceTypes),s=n.length>0&&!(i.length===0&&n.length===1&&(0,XLe.schemaHasRulesForType)(e,n[0]));if(s){let a=D1(n,r,o.strictNumbers,Kl.Wrong);t.if(a,()=>{i.length?rje(e,n,i):M1(e)})}return s}kr.coerceAndCheckDataType=nje;var zG=new Set(["string","number","integer","boolean","null"]);function tje(e,n){return n?e.filter(t=>zG.has(t)||n==="array"&&t==="array"):[]}function rje(e,n,t){let{gen:r,data:o,opts:i}=e,s=r.let("dataType",(0,un._)`typeof ${o}`),a=r.let("coerced",(0,un._)`undefined`);i.coerceTypes==="array"&&r.if((0,un._)`${s} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,()=>r.assign(o,(0,un._)`${o}[0]`).assign(s,(0,un._)`typeof ${o}`).if(D1(n,o,i.strictNumbers),()=>r.assign(a,o))),r.if((0,un._)`${a} !== undefined`);for(let u of t)(zG.has(u)||u==="array"&&i.coerceTypes==="array")&&d(u);r.else(),M1(e),r.endIf(),r.if((0,un._)`${a} !== undefined`,()=>{r.assign(o,a),oje(e,a)});function d(u){switch(u){case"string":r.elseIf((0,un._)`${s} == "number" || ${s} == "boolean"`).assign(a,(0,un._)`"" + ${o}`).elseIf((0,un._)`${o} === null`).assign(a,(0,un._)`""`);return;case"number":r.elseIf((0,un._)`${s} == "boolean" || ${o} === null
|
|
1554
|
+
`:""},this._extScope=n,this._scope=new li.Scope({parent:n}),this._nodes=[new x1]}toString(){return this._root.render(this.opts)}name(n){return this._scope.name(n)}scopeName(n){return this._extScope.name(n)}scopeValue(n,t){let r=this._extScope.value(n,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(n,t){return this._extScope.getValue(n,t)}scopeRefs(n){return this._extScope.scopeRefs(n,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(n,t,r,o){let i=this._scope.toName(t);return r!==void 0&&o&&(this._constants[i.str]=r),this._leafNode(new p1(n,i,r)),i}const(n,t,r){return this._def(li.varKinds.const,n,t,r)}let(n,t,r){return this._def(li.varKinds.let,n,t,r)}var(n,t,r){return this._def(li.varKinds.var,n,t,r)}assign(n,t,r){return this._leafNode(new yb(n,t,r))}add(n,t){return this._leafNode(new f1(n,mn.operators.ADD,t))}code(n){return typeof n=="function"?n():n!==Sn.nil&&this._leafNode(new y1(n)),this}object(...n){let t=["{"];for(let[r,o]of n)t.length>1&&t.push(","),t.push(r),(r!==o||this.opts.es5)&&(t.push(":"),(0,Sn.addCodeArg)(t,o));return t.push("}"),new Sn._Code(t)}if(n,t,r){if(this._blockNode(new mu(n)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(n){return this._elseNode(new mu(n))}else(){return this._elseNode(new Nl)}endIf(){return this._endBlockNode(mu,Nl)}_for(n,t){return this._blockNode(n),t&&this.code(t).endFor(),this}for(n,t){return this._for(new _1(n),t)}forRange(n,t,r,o,i=this.opts.es5?li.varKinds.var:li.varKinds.let){let s=this._scope.toName(n);return this._for(new b1(i,s,t,r),()=>o(s))}forOf(n,t,r,o=li.varKinds.const){let i=this._scope.toName(n);if(this.opts.es5){let s=t instanceof Sn.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,Sn._)`${s}.length`,a=>{this.var(i,(0,Sn._)`${s}[${a}]`),r(i)})}return this._for(new xb("of",o,i,t),()=>r(i))}forIn(n,t,r,o=this.opts.es5?li.varKinds.var:li.varKinds.const){if(this.opts.ownProperties)return this.forOf(n,(0,Sn._)`Object.keys(${t})`,r);let i=this._scope.toName(n);return this._for(new xb("in",o,i,t),()=>r(i))}endFor(){return this._endBlockNode(hu)}label(n){return this._leafNode(new m1(n))}break(n){return this._leafNode(new h1(n))}return(n){let t=new dh;if(this._blockNode(t),this.code(n),t.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(dh)}try(n,t,r){if(!t&&!r)throw new Error('CodeGen: "try" without "catch" and "finally"');let o=new w1;if(this._blockNode(o),this.code(n),t){let i=this.name("e");this._currNode=o.catch=new uh(i),t(i)}return r&&(this._currNode=o.finally=new ch,this.code(r)),this._endBlockNode(uh,ch)}throw(n){return this._leafNode(new g1(n))}block(n,t){return this._blockStarts.push(this._nodes.length),n&&this.code(n).endBlock(t),this}endBlock(n){let t=this._blockStarts.pop();if(t===void 0)throw new Error("CodeGen: not in self-balancing block");let r=this._nodes.length-t;if(r<0||n!==void 0&&r!==n)throw new Error(`CodeGen: wrong number of nodes: ${r} vs ${n} expected`);return this._nodes.length=t,this}func(n,t=Sn.nil,r,o){return this._blockNode(new ah(n,t,r)),o&&this.code(o).endFunc(),this}endFunc(){return this._endBlockNode(ah)}optimize(n=1){for(;n-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(n){return this._currNode.nodes.push(n),this}_blockNode(n){this._currNode.nodes.push(n),this._nodes.push(n)}_endBlockNode(n,t){let r=this._currNode;if(r instanceof n||t&&r instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${n.kind}/${t.kind}`:n.kind}"`)}_elseNode(n){let t=this._currNode;if(!(t instanceof mu))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=n,this}get _root(){return this._nodes[0]}get _currNode(){let n=this._nodes;return n[n.length-1]}set _currNode(n){let t=this._nodes;t[t.length-1]=n}};mn.CodeGen=v1;function gu(e,n){for(let t in n)e[t]=(e[t]||0)+(n[t]||0);return e}function _b(e,n){return n instanceof Sn._CodeOrName?gu(e,n.names):e}function Ul(e,n,t){if(e instanceof Sn.Name)return r(e);if(!o(e))return e;return new Sn._Code(e._items.reduce((i,s)=>(s instanceof Sn.Name&&(s=r(s)),s instanceof Sn._Code?i.push(...s._items):i.push(s),i),[]));function r(i){let s=t[i.str];return s===void 0||n[i.str]!==1?i:(delete n[i.str],s)}function o(i){return i instanceof Sn._Code&&i._items.some(s=>s instanceof Sn.Name&&n[s.str]===1&&t[s.str]!==void 0)}}function gLe(e,n){for(let t in n)e[t]=(e[t]||0)-(n[t]||0)}function wG(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:(0,Sn._)`!${S1(e)}`}mn.not=wG;var yLe=vG(mn.operators.AND);function xLe(...e){return e.reduce(yLe)}mn.and=xLe;var _Le=vG(mn.operators.OR);function bLe(...e){return e.reduce(_Le)}mn.or=bLe;function vG(e){return(n,t)=>n===Sn.nil?t:t===Sn.nil?n:(0,Sn._)`${S1(n)} ${e} ${S1(t)}`}function S1(e){return e instanceof Sn.Name?e:(0,Sn._)`(${e})`}});var Dn=ee(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});yn.checkStrictMode=yn.getErrorPath=yn.Type=yn.useFunc=yn.setEvaluated=yn.evaluatedPropsToName=yn.mergeEvaluated=yn.eachItem=yn.unescapeJsonPointer=yn.escapeJsonPointer=yn.escapeFragment=yn.unescapeFragment=yn.schemaRefOrVal=yn.schemaHasRulesButRef=yn.schemaHasRules=yn.checkUnknownRules=yn.alwaysValidSchema=yn.toHash=void 0;var Qn=fn(),wLe=ih();function vLe(e){let n={};for(let t of e)n[t]=!0;return n}yn.toHash=vLe;function SLe(e,n){return typeof n=="boolean"?n:Object.keys(n).length===0?!0:(CG(e,n),!TG(n,e.self.RULES.all))}yn.alwaysValidSchema=SLe;function CG(e,n=e.schema){let{opts:t,self:r}=e;if(!t.strictSchema||typeof n=="boolean")return;let o=r.RULES.keywords;for(let i in n)o[i]||RG(e,`unknown keyword: "${i}"`)}yn.checkUnknownRules=CG;function TG(e,n){if(typeof e=="boolean")return!e;for(let t in e)if(n[t])return!0;return!1}yn.schemaHasRules=TG;function kLe(e,n){if(typeof e=="boolean")return!e;for(let t in e)if(t!=="$ref"&&n.all[t])return!0;return!1}yn.schemaHasRulesButRef=kLe;function CLe({topSchemaRef:e,schemaPath:n},t,r,o){if(!o){if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="string")return(0,Qn._)`${t}`}return(0,Qn._)`${e}${n}${(0,Qn.getProperty)(r)}`}yn.schemaRefOrVal=CLe;function TLe(e){return PG(decodeURIComponent(e))}yn.unescapeFragment=TLe;function PLe(e){return encodeURIComponent(C1(e))}yn.escapeFragment=PLe;function C1(e){return typeof e=="number"?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}yn.escapeJsonPointer=C1;function PG(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}yn.unescapeJsonPointer=PG;function ILe(e,n){if(Array.isArray(e))for(let t of e)n(t);else n(e)}yn.eachItem=ILe;function SG({mergeNames:e,mergeToName:n,mergeValues:t,resultToName:r}){return(o,i,s,a)=>{let d=s===void 0?i:s instanceof Qn.Name?(i instanceof Qn.Name?e(o,i,s):n(o,i,s),s):i instanceof Qn.Name?(n(o,s,i),i):t(i,s);return a===Qn.Name&&!(d instanceof Qn.Name)?r(o,d):d}}yn.mergeEvaluated={props:SG({mergeNames:(e,n,t)=>e.if((0,Qn._)`${t} !== true && ${n} !== undefined`,()=>{e.if((0,Qn._)`${n} === true`,()=>e.assign(t,!0),()=>e.assign(t,(0,Qn._)`${t} || {}`).code((0,Qn._)`Object.assign(${t}, ${n})`))}),mergeToName:(e,n,t)=>e.if((0,Qn._)`${t} !== true`,()=>{n===!0?e.assign(t,!0):(e.assign(t,(0,Qn._)`${t} || {}`),T1(e,t,n))}),mergeValues:(e,n)=>e===!0?!0:{...e,...n},resultToName:IG}),items:SG({mergeNames:(e,n,t)=>e.if((0,Qn._)`${t} !== true && ${n} !== undefined`,()=>e.assign(t,(0,Qn._)`${n} === true ? true : ${t} > ${n} ? ${t} : ${n}`)),mergeToName:(e,n,t)=>e.if((0,Qn._)`${t} !== true`,()=>e.assign(t,n===!0?!0:(0,Qn._)`${t} > ${n} ? ${t} : ${n}`)),mergeValues:(e,n)=>e===!0?!0:Math.max(e,n),resultToName:(e,n)=>e.var("items",n)})};function IG(e,n){if(n===!0)return e.var("props",!0);let t=e.var("props",(0,Qn._)`{}`);return n!==void 0&&T1(e,t,n),t}yn.evaluatedPropsToName=IG;function T1(e,n,t){Object.keys(t).forEach(r=>e.assign((0,Qn._)`${n}${(0,Qn.getProperty)(r)}`,!0))}yn.setEvaluated=T1;var kG={};function RLe(e,n){return e.scopeValue("func",{ref:n,code:kG[n.code]||(kG[n.code]=new wLe._Code(n.code))})}yn.useFunc=RLe;var k1;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(k1||(yn.Type=k1={}));function ELe(e,n,t){if(e instanceof Qn.Name){let r=n===k1.Num;return t?r?(0,Qn._)`"[" + ${e} + "]"`:(0,Qn._)`"['" + ${e} + "']"`:r?(0,Qn._)`"/" + ${e}`:(0,Qn._)`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return t?(0,Qn.getProperty)(e).toString():"/"+C1(e)}yn.getErrorPath=ELe;function RG(e,n,t=e.opts.strictSchema){if(t){if(n=`strict mode: ${n}`,t===!0)throw new Error(n);e.self.logger.warn(n)}}yn.checkStrictMode=RG});var As=ee(P1=>{"use strict";Object.defineProperty(P1,"__esModule",{value:!0});var vr=fn(),DLe={data:new vr.Name("data"),valCxt:new vr.Name("valCxt"),instancePath:new vr.Name("instancePath"),parentData:new vr.Name("parentData"),parentDataProperty:new vr.Name("parentDataProperty"),rootData:new vr.Name("rootData"),dynamicAnchors:new vr.Name("dynamicAnchors"),vErrors:new vr.Name("vErrors"),errors:new vr.Name("errors"),this:new vr.Name("this"),self:new vr.Name("self"),scope:new vr.Name("scope"),json:new vr.Name("json"),jsonPos:new vr.Name("jsonPos"),jsonLen:new vr.Name("jsonLen"),jsonPart:new vr.Name("jsonPart")};P1.default=DLe});var lh=ee(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.extendErrors=Sr.resetErrorsCount=Sr.reportExtraError=Sr.reportError=Sr.keyword$DataError=Sr.keywordError=void 0;var Pn=fn(),wb=Dn(),Dr=As();Sr.keywordError={message:({keyword:e})=>(0,Pn.str)`must pass "${e}" keyword validation`};Sr.keyword$DataError={message:({keyword:e,schemaType:n})=>n?(0,Pn.str)`"${e}" keyword must be ${n} ($data)`:(0,Pn.str)`"${e}" keyword is invalid ($data)`};function MLe(e,n=Sr.keywordError,t,r){let{it:o}=e,{gen:i,compositeRule:s,allErrors:a}=o,d=MG(e,n,t);r??(s||a)?EG(i,d):DG(o,(0,Pn._)`[${d}]`)}Sr.reportError=MLe;function ALe(e,n=Sr.keywordError,t){let{it:r}=e,{gen:o,compositeRule:i,allErrors:s}=r,a=MG(e,n,t);EG(o,a),i||s||DG(r,Dr.default.vErrors)}Sr.reportExtraError=ALe;function $Le(e,n){e.assign(Dr.default.errors,n),e.if((0,Pn._)`${Dr.default.vErrors} !== null`,()=>e.if(n,()=>e.assign((0,Pn._)`${Dr.default.vErrors}.length`,n),()=>e.assign(Dr.default.vErrors,null)))}Sr.resetErrorsCount=$Le;function OLe({gen:e,keyword:n,schemaValue:t,data:r,errsCount:o,it:i}){if(o===void 0)throw new Error("ajv implementation error");let s=e.name("err");e.forRange("i",o,Dr.default.errors,a=>{e.const(s,(0,Pn._)`${Dr.default.vErrors}[${a}]`),e.if((0,Pn._)`${s}.instancePath === undefined`,()=>e.assign((0,Pn._)`${s}.instancePath`,(0,Pn.strConcat)(Dr.default.instancePath,i.errorPath))),e.assign((0,Pn._)`${s}.schemaPath`,(0,Pn.str)`${i.errSchemaPath}/${n}`),i.opts.verbose&&(e.assign((0,Pn._)`${s}.schema`,t),e.assign((0,Pn._)`${s}.data`,r))})}Sr.extendErrors=OLe;function EG(e,n){let t=e.const("err",n);e.if((0,Pn._)`${Dr.default.vErrors} === null`,()=>e.assign(Dr.default.vErrors,(0,Pn._)`[${t}]`),(0,Pn._)`${Dr.default.vErrors}.push(${t})`),e.code((0,Pn._)`${Dr.default.errors}++`)}function DG(e,n){let{gen:t,validateName:r,schemaEnv:o}=e;o.$async?t.throw((0,Pn._)`new ${e.ValidationError}(${n})`):(t.assign((0,Pn._)`${r}.errors`,n),t.return(!1))}var yu={keyword:new Pn.Name("keyword"),schemaPath:new Pn.Name("schemaPath"),params:new Pn.Name("params"),propertyName:new Pn.Name("propertyName"),message:new Pn.Name("message"),schema:new Pn.Name("schema"),parentSchema:new Pn.Name("parentSchema")};function MG(e,n,t){let{createErrors:r}=e.it;return r===!1?(0,Pn._)`{}`:LLe(e,n,t)}function LLe(e,n,t={}){let{gen:r,it:o}=e,i=[jLe(o,t),FLe(e,t)];return zLe(e,n,i),r.object(...i)}function jLe({errorPath:e},{instancePath:n}){let t=n?(0,Pn.str)`${e}${(0,wb.getErrorPath)(n,wb.Type.Str)}`:e;return[Dr.default.instancePath,(0,Pn.strConcat)(Dr.default.instancePath,t)]}function FLe({keyword:e,it:{errSchemaPath:n}},{schemaPath:t,parentSchema:r}){let o=r?n:(0,Pn.str)`${n}/${e}`;return t&&(o=(0,Pn.str)`${o}${(0,wb.getErrorPath)(t,wb.Type.Str)}`),[yu.schemaPath,o]}function zLe(e,{params:n,message:t},r){let{keyword:o,data:i,schemaValue:s,it:a}=e,{opts:d,propertyName:u,topSchemaRef:c,schemaPath:l}=a;r.push([yu.keyword,o],[yu.params,typeof n=="function"?n(e):n||(0,Pn._)`{}`]),d.messages&&r.push([yu.message,typeof t=="function"?t(e):t]),d.verbose&&r.push([yu.schema,s],[yu.parentSchema,(0,Pn._)`${c}${l}`],[Dr.default.data,i]),u&&r.push([yu.propertyName,u])}});var $G=ee(Bl=>{"use strict";Object.defineProperty(Bl,"__esModule",{value:!0});Bl.boolOrEmptySchema=Bl.topBoolOrEmptySchema=void 0;var qLe=lh(),NLe=fn(),ULe=As(),BLe={message:"boolean schema is false"};function JLe(e){let{gen:n,schema:t,validateName:r}=e;t===!1?AG(e,!1):typeof t=="object"&&t.$async===!0?n.return(ULe.default.data):(n.assign((0,NLe._)`${r}.errors`,null),n.return(!0))}Bl.topBoolOrEmptySchema=JLe;function KLe(e,n){let{gen:t,schema:r}=e;r===!1?(t.var(n,!1),AG(e)):t.var(n,!0)}Bl.boolOrEmptySchema=KLe;function AG(e,n){let{gen:t,data:r}=e,o={gen:t,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,qLe.reportError)(o,BLe,void 0,n)}});var I1=ee(Jl=>{"use strict";Object.defineProperty(Jl,"__esModule",{value:!0});Jl.getRules=Jl.isJSONType=void 0;var VLe=["string","number","integer","boolean","null","object","array"],WLe=new Set(VLe);function HLe(e){return typeof e=="string"&&WLe.has(e)}Jl.isJSONType=HLe;function GLe(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Jl.getRules=GLe});var R1=ee(Ca=>{"use strict";Object.defineProperty(Ca,"__esModule",{value:!0});Ca.shouldUseRule=Ca.shouldUseGroup=Ca.schemaHasRulesForType=void 0;function ZLe({schema:e,self:n},t){let r=n.RULES.types[t];return r&&r!==!0&&OG(e,r)}Ca.schemaHasRulesForType=ZLe;function OG(e,n){return n.rules.some(t=>LG(e,t))}Ca.shouldUseGroup=OG;function LG(e,n){var t;return e[n.keyword]!==void 0||((t=n.definition.implements)===null||t===void 0?void 0:t.some(r=>e[r]!==void 0))}Ca.shouldUseRule=LG});var ph=ee(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});kr.reportTypeError=kr.checkDataTypes=kr.checkDataType=kr.coerceAndCheckDataType=kr.getJSONTypes=kr.getSchemaTypes=kr.DataType=void 0;var QLe=I1(),XLe=R1(),YLe=lh(),un=fn(),jG=Dn(),Kl;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Kl||(kr.DataType=Kl={}));function eje(e){let n=FG(e.type);if(n.includes("null")){if(e.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!n.length&&e.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');e.nullable===!0&&n.push("null")}return n}kr.getSchemaTypes=eje;function FG(e){let n=Array.isArray(e)?e:e?[e]:[];if(n.every(QLe.isJSONType))return n;throw new Error("type must be JSONType or JSONType[]: "+n.join(","))}kr.getJSONTypes=FG;function nje(e,n){let{gen:t,data:r,opts:o}=e,i=tje(n,o.coerceTypes),s=n.length>0&&!(i.length===0&&n.length===1&&(0,XLe.schemaHasRulesForType)(e,n[0]));if(s){let a=D1(n,r,o.strictNumbers,Kl.Wrong);t.if(a,()=>{i.length?rje(e,n,i):M1(e)})}return s}kr.coerceAndCheckDataType=nje;var zG=new Set(["string","number","integer","boolean","null"]);function tje(e,n){return n?e.filter(t=>zG.has(t)||n==="array"&&t==="array"):[]}function rje(e,n,t){let{gen:r,data:o,opts:i}=e,s=r.let("dataType",(0,un._)`typeof ${o}`),a=r.let("coerced",(0,un._)`undefined`);i.coerceTypes==="array"&&r.if((0,un._)`${s} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,()=>r.assign(o,(0,un._)`${o}[0]`).assign(s,(0,un._)`typeof ${o}`).if(D1(n,o,i.strictNumbers),()=>r.assign(a,o))),r.if((0,un._)`${a} !== undefined`);for(let u of t)(zG.has(u)||u==="array"&&i.coerceTypes==="array")&&d(u);r.else(),M1(e),r.endIf(),r.if((0,un._)`${a} !== undefined`,()=>{r.assign(o,a),oje(e,a)});function d(u){switch(u){case"string":r.elseIf((0,un._)`${s} == "number" || ${s} == "boolean"`).assign(a,(0,un._)`"" + ${o}`).elseIf((0,un._)`${o} === null`).assign(a,(0,un._)`""`);return;case"number":r.elseIf((0,un._)`${s} == "boolean" || ${o} === null
|
|
1552
1555
|
|| (${s} == "string" && ${o} && ${o} == +${o})`).assign(a,(0,un._)`+${o}`);return;case"integer":r.elseIf((0,un._)`${s} === "boolean" || ${o} === null
|
|
1553
1556
|
|| (${s} === "string" && ${o} && ${o} == +${o} && !(${o} % 1))`).assign(a,(0,un._)`+${o}`);return;case"boolean":r.elseIf((0,un._)`${o} === "false" || ${o} === 0 || ${o} === null`).assign(a,!1).elseIf((0,un._)`${o} === "true" || ${o} === 1`).assign(a,!0);return;case"null":r.elseIf((0,un._)`${o} === "" || ${o} === 0 || ${o} === false`),r.assign(a,null);return;case"array":r.elseIf((0,un._)`${s} === "string" || ${s} === "number"
|
|
1554
1557
|
|| ${s} === "boolean" || ${o} === null`).assign(a,(0,un._)`[${o}]`)}}}function oje({gen:e,parentData:n,parentDataProperty:t},r){e.if((0,un._)`${n} !== undefined`,()=>e.assign((0,un._)`${n}[${t}]`,r))}function E1(e,n,t,r=Kl.Correct){let o=r===Kl.Correct?un.operators.EQ:un.operators.NEQ,i;switch(e){case"null":return(0,un._)`${n} ${o} null`;case"array":i=(0,un._)`Array.isArray(${n})`;break;case"object":i=(0,un._)`${n} && typeof ${n} == "object" && !Array.isArray(${n})`;break;case"integer":i=s((0,un._)`!(${n} % 1) && !isNaN(${n})`);break;case"number":i=s();break;default:return(0,un._)`typeof ${n} ${o} ${e}`}return r===Kl.Correct?i:(0,un.not)(i);function s(a=un.nil){return(0,un.and)((0,un._)`typeof ${n} == "number"`,a,t?(0,un._)`isFinite(${n})`:un.nil)}}kr.checkDataType=E1;function D1(e,n,t,r){if(e.length===1)return E1(e[0],n,t,r);let o,i=(0,jG.toHash)(e);if(i.array&&i.object){let s=(0,un._)`typeof ${n} != "object"`;o=i.null?s:(0,un._)`!${n} || ${s}`,delete i.null,delete i.array,delete i.object}else o=un.nil;i.number&&delete i.integer;for(let s in i)o=(0,un.and)(o,E1(s,n,t,r));return o}kr.checkDataTypes=D1;var ije={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:n})=>typeof e=="string"?(0,un._)`{type: ${e}}`:(0,un._)`{type: ${n}}`};function M1(e){let n=sje(e);(0,YLe.reportError)(n,ije)}kr.reportTypeError=M1;function sje(e){let{gen:n,data:t,schema:r}=e,o=(0,jG.schemaRefOrVal)(e,r,"type");return{gen:n,keyword:"type",data:t,schema:r.type,schemaCode:o,schemaValue:o,parentSchema:r,params:{},it:e}}});var NG=ee(vb=>{"use strict";Object.defineProperty(vb,"__esModule",{value:!0});vb.assignDefaults=void 0;var Vl=fn(),aje=Dn();function dje(e,n){let{properties:t,items:r}=e.schema;if(n==="object"&&t)for(let o in t)qG(e,o,t[o].default);else n==="array"&&Array.isArray(r)&&r.forEach((o,i)=>qG(e,i,o.default))}vb.assignDefaults=dje;function qG(e,n,t){let{gen:r,compositeRule:o,data:i,opts:s}=e;if(t===void 0)return;let a=(0,Vl._)`${i}${(0,Vl.getProperty)(n)}`;if(o){(0,aje.checkStrictMode)(e,`default is ignored for: ${a}`);return}let d=(0,Vl._)`${a} === undefined`;s.useDefaults==="empty"&&(d=(0,Vl._)`${d} || ${a} === null || ${a} === ""`),r.if(d,(0,Vl._)`${a} = ${(0,Vl.stringify)(t)}`)}});var Oo=ee(Kn=>{"use strict";Object.defineProperty(Kn,"__esModule",{value:!0});Kn.validateUnion=Kn.validateArray=Kn.usePattern=Kn.callValidateCode=Kn.schemaProperties=Kn.allSchemaProperties=Kn.noPropertyInData=Kn.propertyInData=Kn.isOwnProperty=Kn.hasPropFunc=Kn.reportMissingProp=Kn.checkMissingProp=Kn.checkReportMissingProp=void 0;var st=fn(),A1=Dn(),Ta=As(),uje=Dn();function cje(e,n){let{gen:t,data:r,it:o}=e;t.if(O1(t,r,n,o.opts.ownProperties),()=>{e.setParams({missingProperty:(0,st._)`${n}`},!0),e.error()})}Kn.checkReportMissingProp=cje;function lje({gen:e,data:n,it:{opts:t}},r,o){return(0,st.or)(...r.map(i=>(0,st.and)(O1(e,n,i,t.ownProperties),(0,st._)`${o} = ${i}`)))}Kn.checkMissingProp=lje;function pje(e,n){e.setParams({missingProperty:n},!0),e.error()}Kn.reportMissingProp=pje;function UG(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,st._)`Object.prototype.hasOwnProperty`})}Kn.hasPropFunc=UG;function $1(e,n,t){return(0,st._)`${UG(e)}.call(${n}, ${t})`}Kn.isOwnProperty=$1;function fje(e,n,t,r){let o=(0,st._)`${n}${(0,st.getProperty)(t)} !== undefined`;return r?(0,st._)`${o} && ${$1(e,n,t)}`:o}Kn.propertyInData=fje;function O1(e,n,t,r){let o=(0,st._)`${n}${(0,st.getProperty)(t)} === undefined`;return r?(0,st.or)(o,(0,st.not)($1(e,n,t))):o}Kn.noPropertyInData=O1;function BG(e){return e?Object.keys(e).filter(n=>n!=="__proto__"):[]}Kn.allSchemaProperties=BG;function mje(e,n){return BG(n).filter(t=>!(0,A1.alwaysValidSchema)(e,n[t]))}Kn.schemaProperties=mje;function hje({schemaCode:e,data:n,it:{gen:t,topSchemaRef:r,schemaPath:o,errorPath:i},it:s},a,d,u){let c=u?(0,st._)`${e}, ${n}, ${r}${o}`:n,l=[[Ta.default.instancePath,(0,st.strConcat)(Ta.default.instancePath,i)],[Ta.default.parentData,s.parentData],[Ta.default.parentDataProperty,s.parentDataProperty],[Ta.default.rootData,Ta.default.rootData]];s.opts.dynamicRef&&l.push([Ta.default.dynamicAnchors,Ta.default.dynamicAnchors]);let p=(0,st._)`${c}, ${t.object(...l)}`;return d!==st.nil?(0,st._)`${a}.call(${d}, ${p})`:(0,st._)`${a}(${p})`}Kn.callValidateCode=hje;var gje=(0,st._)`new RegExp`;function yje({gen:e,it:{opts:n}},t){let r=n.unicodeRegExp?"u":"",{regExp:o}=n.code,i=o(t,r);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:(0,st._)`${o.code==="new RegExp"?gje:(0,uje.useFunc)(e,o)}(${t}, ${r})`})}Kn.usePattern=yje;function xje(e){let{gen:n,data:t,keyword:r,it:o}=e,i=n.name("valid");if(o.allErrors){let a=n.let("valid",!0);return s(()=>n.assign(a,!1)),a}return n.var(i,!0),s(()=>n.break()),i;function s(a){let d=n.const("len",(0,st._)`${t}.length`);n.forRange("i",0,d,u=>{e.subschema({keyword:r,dataProp:u,dataPropType:A1.Type.Num},i),n.if((0,st.not)(i),a)})}}Kn.validateArray=xje;function _je(e){let{gen:n,schema:t,keyword:r,it:o}=e;if(!Array.isArray(t))throw new Error("ajv implementation error");if(t.some(d=>(0,A1.alwaysValidSchema)(o,d))&&!o.opts.unevaluated)return;let s=n.let("valid",!1),a=n.name("_valid");n.block(()=>t.forEach((d,u)=>{let c=e.subschema({keyword:r,schemaProp:u,compositeRule:!0},a);n.assign(s,(0,st._)`${s} || ${a}`),e.mergeValidEvaluated(c,a)||n.if((0,st.not)(s))})),e.result(s,()=>e.reset(),()=>e.error(!0))}Kn.validateUnion=_je});var VG=ee(Hi=>{"use strict";Object.defineProperty(Hi,"__esModule",{value:!0});Hi.validateKeywordUsage=Hi.validSchemaType=Hi.funcKeywordCode=Hi.macroKeywordCode=void 0;var Mr=fn(),xu=As(),bje=Oo(),wje=lh();function vje(e,n){let{gen:t,keyword:r,schema:o,parentSchema:i,it:s}=e,a=n.macro.call(s.self,o,i,s),d=KG(t,r,a);s.opts.validateSchema!==!1&&s.self.validateSchema(a,!0);let u=t.name("valid");e.subschema({schema:a,schemaPath:Mr.nil,errSchemaPath:`${s.errSchemaPath}/${r}`,topSchemaRef:d,compositeRule:!0},u),e.pass(u,()=>e.error(!0))}Hi.macroKeywordCode=vje;function Sje(e,n){var t;let{gen:r,keyword:o,schema:i,parentSchema:s,$data:a,it:d}=e;Cje(d,n);let u=!a&&n.compile?n.compile.call(d.self,i,s,d):n.validate,c=KG(r,o,u),l=r.let("valid");e.block$data(l,p),e.ok((t=n.valid)!==null&&t!==void 0?t:l);function p(){if(n.errors===!1)y(),n.modifying&&JG(e),x(()=>e.error());else{let b=n.async?m():f();n.modifying&&JG(e),x(()=>kje(e,b))}}function m(){let b=r.let("ruleErrs",null);return r.try(()=>y((0,Mr._)`await `),S=>r.assign(l,!1).if((0,Mr._)`${S} instanceof ${d.ValidationError}`,()=>r.assign(b,(0,Mr._)`${S}.errors`),()=>r.throw(S))),b}function f(){let b=(0,Mr._)`${c}.errors`;return r.assign(b,null),y(Mr.nil),b}function y(b=n.async?(0,Mr._)`await `:Mr.nil){let S=d.opts.passContext?xu.default.this:xu.default.self,v=!("compile"in n&&!a||n.schema===!1);r.assign(l,(0,Mr._)`${b}${(0,bje.callValidateCode)(e,c,S,v)}`,n.modifying)}function x(b){var S;r.if((0,Mr.not)((S=n.valid)!==null&&S!==void 0?S:l),b)}}Hi.funcKeywordCode=Sje;function JG(e){let{gen:n,data:t,it:r}=e;n.if(r.parentData,()=>n.assign(t,(0,Mr._)`${r.parentData}[${r.parentDataProperty}]`))}function kje(e,n){let{gen:t}=e;t.if((0,Mr._)`Array.isArray(${n})`,()=>{t.assign(xu.default.vErrors,(0,Mr._)`${xu.default.vErrors} === null ? ${n} : ${xu.default.vErrors}.concat(${n})`).assign(xu.default.errors,(0,Mr._)`${xu.default.vErrors}.length`),(0,wje.extendErrors)(e)},()=>e.error())}function Cje({schemaEnv:e},n){if(n.async&&!e.$async)throw new Error("async keyword in sync schema")}function KG(e,n,t){if(t===void 0)throw new Error(`keyword "${n}" failed to compile`);return e.scopeValue("keyword",typeof t=="function"?{ref:t}:{ref:t,code:(0,Mr.stringify)(t)})}function Tje(e,n,t=!1){return!n.length||n.some(r=>r==="array"?Array.isArray(e):r==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==r||t&&typeof e>"u")}Hi.validSchemaType=Tje;function Pje({schema:e,opts:n,self:t,errSchemaPath:r},o,i){if(Array.isArray(o.keyword)?!o.keyword.includes(i):o.keyword!==i)throw new Error("ajv implementation error");let s=o.dependencies;if(s?.some(a=>!Object.prototype.hasOwnProperty.call(e,a)))throw new Error(`parent schema must have dependencies of ${i}: ${s.join(",")}`);if(o.validateSchema&&!o.validateSchema(e[i])){let d=`keyword "${i}" value is invalid at path "${r}": `+t.errorsText(o.validateSchema.errors);if(n.validateSchema==="log")t.logger.error(d);else throw new Error(d)}}Hi.validateKeywordUsage=Pje});var HG=ee(Pa=>{"use strict";Object.defineProperty(Pa,"__esModule",{value:!0});Pa.extendSubschemaMode=Pa.extendSubschemaData=Pa.getSubschema=void 0;var Gi=fn(),WG=Dn();function Ije(e,{keyword:n,schemaProp:t,schema:r,schemaPath:o,errSchemaPath:i,topSchemaRef:s}){if(n!==void 0&&r!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(n!==void 0){let a=e.schema[n];return t===void 0?{schema:a,schemaPath:(0,Gi._)`${e.schemaPath}${(0,Gi.getProperty)(n)}`,errSchemaPath:`${e.errSchemaPath}/${n}`}:{schema:a[t],schemaPath:(0,Gi._)`${e.schemaPath}${(0,Gi.getProperty)(n)}${(0,Gi.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${n}/${(0,WG.escapeFragment)(t)}`}}if(r!==void 0){if(o===void 0||i===void 0||s===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:r,schemaPath:o,topSchemaRef:s,errSchemaPath:i}}throw new Error('either "keyword" or "schema" must be passed')}Pa.getSubschema=Ije;function Rje(e,n,{dataProp:t,dataPropType:r,data:o,dataTypes:i,propertyName:s}){if(o!==void 0&&t!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=n;if(t!==void 0){let{errorPath:u,dataPathArr:c,opts:l}=n,p=a.let("data",(0,Gi._)`${n.data}${(0,Gi.getProperty)(t)}`,!0);d(p),e.errorPath=(0,Gi.str)`${u}${(0,WG.getErrorPath)(t,r,l.jsPropertySyntax)}`,e.parentDataProperty=(0,Gi._)`${t}`,e.dataPathArr=[...c,e.parentDataProperty]}if(o!==void 0){let u=o instanceof Gi.Name?o:a.let("data",o,!0);d(u),s!==void 0&&(e.propertyName=s)}i&&(e.dataTypes=i);function d(u){e.data=u,e.dataLevel=n.dataLevel+1,e.dataTypes=[],n.definedProperties=new Set,e.parentData=n.data,e.dataNames=[...n.dataNames,u]}}Pa.extendSubschemaData=Rje;function Eje(e,{jtdDiscriminator:n,jtdMetadata:t,compositeRule:r,createErrors:o,allErrors:i}){r!==void 0&&(e.compositeRule=r),o!==void 0&&(e.createErrors=o),i!==void 0&&(e.allErrors=i),e.jtdDiscriminator=n,e.jtdMetadata=t}Pa.extendSubschemaMode=Eje});var L1=ee((Eun,GG)=>{"use strict";GG.exports=function e(n,t){if(n===t)return!0;if(n&&t&&typeof n=="object"&&typeof t=="object"){if(n.constructor!==t.constructor)return!1;var r,o,i;if(Array.isArray(n)){if(r=n.length,r!=t.length)return!1;for(o=r;o--!==0;)if(!e(n[o],t[o]))return!1;return!0}if(n.constructor===RegExp)return n.source===t.source&&n.flags===t.flags;if(n.valueOf!==Object.prototype.valueOf)return n.valueOf()===t.valueOf();if(n.toString!==Object.prototype.toString)return n.toString()===t.toString();if(i=Object.keys(n),r=i.length,r!==Object.keys(t).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[o]))return!1;for(o=r;o--!==0;){var s=i[o];if(!e(n[s],t[s]))return!1}return!0}return n!==n&&t!==t}});var QG=ee((Dun,ZG)=>{"use strict";var Ia=ZG.exports=function(e,n,t){typeof n=="function"&&(t=n,n={}),t=n.cb||t;var r=typeof t=="function"?t:t.pre||function(){},o=t.post||function(){};Sb(n,r,o,e,"",e)};Ia.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Ia.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Ia.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Ia.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Sb(e,n,t,r,o,i,s,a,d,u){if(r&&typeof r=="object"&&!Array.isArray(r)){n(r,o,i,s,a,d,u);for(var c in r){var l=r[c];if(Array.isArray(l)){if(c in Ia.arrayKeywords)for(var p=0;p<l.length;p++)Sb(e,n,t,l[p],o+"/"+c+"/"+p,i,o,c,r,p)}else if(c in Ia.propsKeywords){if(l&&typeof l=="object")for(var m in l)Sb(e,n,t,l[m],o+"/"+c+"/"+Dje(m),i,o,c,r,m)}else(c in Ia.keywords||e.allKeys&&!(c in Ia.skipKeywords))&&Sb(e,n,t,l,o+"/"+c,i,o,c,r)}t(r,o,i,s,a,d,u)}}function Dje(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var fh=ee(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.getSchemaRefs=Gr.resolveUrl=Gr.normalizeId=Gr._getFullPath=Gr.getFullPath=Gr.inlineRef=void 0;var Mje=Dn(),Aje=L1(),$je=QG(),Oje=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function Lje(e,n=!0){return typeof e=="boolean"?!0:n===!0?!j1(e):n?XG(e)<=n:!1}Gr.inlineRef=Lje;var jje=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function j1(e){for(let n in e){if(jje.has(n))return!0;let t=e[n];if(Array.isArray(t)&&t.some(j1)||typeof t=="object"&&j1(t))return!0}return!1}function XG(e){let n=0;for(let t in e){if(t==="$ref")return 1/0;if(n++,!Oje.has(t)&&(typeof e[t]=="object"&&(0,Mje.eachItem)(e[t],r=>n+=XG(r)),n===1/0))return 1/0}return n}function YG(e,n="",t){t!==!1&&(n=Wl(n));let r=e.parse(n);return eZ(e,r)}Gr.getFullPath=YG;function eZ(e,n){return e.serialize(n).split("#")[0]+"#"}Gr._getFullPath=eZ;var Fje=/#\/?$/;function Wl(e){return e?e.replace(Fje,""):""}Gr.normalizeId=Wl;function zje(e,n,t){return t=Wl(t),e.resolve(n,t)}Gr.resolveUrl=zje;var qje=/^[a-z_][-a-z0-9._]*$/i;function Nje(e,n){if(typeof e=="boolean")return{};let{schemaId:t,uriResolver:r}=this.opts,o=Wl(e[t]||n),i={"":o},s=YG(r,o,!1),a={},d=new Set;return $je(e,{allKeys:!0},(l,p,m,f)=>{if(f===void 0)return;let y=s+p,x=i[f];typeof l[t]=="string"&&(x=b.call(this,l[t])),S.call(this,l.$anchor),S.call(this,l.$dynamicAnchor),i[p]=x;function b(v){let w=this.opts.uriResolver.resolve;if(v=Wl(x?w(x,v):v),d.has(v))throw c(v);d.add(v);let k=this.refs[v];return typeof k=="string"&&(k=this.refs[k]),typeof k=="object"?u(l,k.schema,v):v!==Wl(y)&&(v[0]==="#"?(u(l,a[v],v),a[v]=l):this.refs[v]=y),v}function S(v){if(typeof v=="string"){if(!qje.test(v))throw new Error(`invalid anchor "${v}"`);b.call(this,`#${v}`)}}}),a;function u(l,p,m){if(p!==void 0&&!Aje(l,p))throw c(m)}function c(l){return new Error(`reference "${l}" resolves to more than one schema`)}}Gr.getSchemaRefs=Nje});var gh=ee(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.getData=Ra.KeywordCxt=Ra.validateFunctionCode=void 0;var iZ=$G(),nZ=ph(),z1=R1(),kb=ph(),Uje=NG(),hh=VG(),F1=HG(),ze=fn(),nn=As(),Bje=fh(),$s=Dn(),mh=lh();function Jje(e){if(dZ(e)&&(uZ(e),aZ(e))){Wje(e);return}sZ(e,()=>(0,iZ.topBoolOrEmptySchema)(e))}Ra.validateFunctionCode=Jje;function sZ({gen:e,validateName:n,schema:t,schemaEnv:r,opts:o},i){o.code.es5?e.func(n,(0,ze._)`${nn.default.data}, ${nn.default.valCxt}`,r.$async,()=>{e.code((0,ze._)`"use strict"; ${tZ(t,o)}`),Vje(e,o),e.code(i)}):e.func(n,(0,ze._)`${nn.default.data}, ${Kje(o)}`,r.$async,()=>e.code(tZ(t,o)).code(i))}function Kje(e){return(0,ze._)`{${nn.default.instancePath}="", ${nn.default.parentData}, ${nn.default.parentDataProperty}, ${nn.default.rootData}=${nn.default.data}${e.dynamicRef?(0,ze._)`, ${nn.default.dynamicAnchors}={}`:ze.nil}}={}`}function Vje(e,n){e.if(nn.default.valCxt,()=>{e.var(nn.default.instancePath,(0,ze._)`${nn.default.valCxt}.${nn.default.instancePath}`),e.var(nn.default.parentData,(0,ze._)`${nn.default.valCxt}.${nn.default.parentData}`),e.var(nn.default.parentDataProperty,(0,ze._)`${nn.default.valCxt}.${nn.default.parentDataProperty}`),e.var(nn.default.rootData,(0,ze._)`${nn.default.valCxt}.${nn.default.rootData}`),n.dynamicRef&&e.var(nn.default.dynamicAnchors,(0,ze._)`${nn.default.valCxt}.${nn.default.dynamicAnchors}`)},()=>{e.var(nn.default.instancePath,(0,ze._)`""`),e.var(nn.default.parentData,(0,ze._)`undefined`),e.var(nn.default.parentDataProperty,(0,ze._)`undefined`),e.var(nn.default.rootData,nn.default.data),n.dynamicRef&&e.var(nn.default.dynamicAnchors,(0,ze._)`{}`)})}function Wje(e){let{schema:n,opts:t,gen:r}=e;sZ(e,()=>{t.$comment&&n.$comment&&lZ(e),Xje(e),r.let(nn.default.vErrors,null),r.let(nn.default.errors,0),t.unevaluated&&Hje(e),cZ(e),nFe(e)})}function Hje(e){let{gen:n,validateName:t}=e;e.evaluated=n.const("evaluated",(0,ze._)`${t}.evaluated`),n.if((0,ze._)`${e.evaluated}.dynamicProps`,()=>n.assign((0,ze._)`${e.evaluated}.props`,(0,ze._)`undefined`)),n.if((0,ze._)`${e.evaluated}.dynamicItems`,()=>n.assign((0,ze._)`${e.evaluated}.items`,(0,ze._)`undefined`))}function tZ(e,n){let t=typeof e=="object"&&e[n.schemaId];return t&&(n.code.source||n.code.process)?(0,ze._)`/*# sourceURL=${t} */`:ze.nil}function Gje(e,n){if(dZ(e)&&(uZ(e),aZ(e))){Zje(e,n);return}(0,iZ.boolOrEmptySchema)(e,n)}function aZ({schema:e,self:n}){if(typeof e=="boolean")return!e;for(let t in e)if(n.RULES.all[t])return!0;return!1}function dZ(e){return typeof e.schema!="boolean"}function Zje(e,n){let{schema:t,gen:r,opts:o}=e;o.$comment&&t.$comment&&lZ(e),Yje(e),eFe(e);let i=r.const("_errs",nn.default.errors);cZ(e,i),r.var(n,(0,ze._)`${i} === ${nn.default.errors}`)}function uZ(e){(0,$s.checkUnknownRules)(e),Qje(e)}function cZ(e,n){if(e.opts.jtd)return rZ(e,[],!1,n);let t=(0,nZ.getSchemaTypes)(e.schema),r=(0,nZ.coerceAndCheckDataType)(e,t);rZ(e,t,!r,n)}function Qje(e){let{schema:n,errSchemaPath:t,opts:r,self:o}=e;n.$ref&&r.ignoreKeywordsWithRef&&(0,$s.schemaHasRulesButRef)(n,o.RULES)&&o.logger.warn(`$ref: keywords ignored in schema at path "${t}"`)}function Xje(e){let{schema:n,opts:t}=e;n.default!==void 0&&t.useDefaults&&t.strictSchema&&(0,$s.checkStrictMode)(e,"default is ignored in the schema root")}function Yje(e){let n=e.schema[e.opts.schemaId];n&&(e.baseId=(0,Bje.resolveUrl)(e.opts.uriResolver,e.baseId,n))}function eFe(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}function lZ({gen:e,schemaEnv:n,schema:t,errSchemaPath:r,opts:o}){let i=t.$comment;if(o.$comment===!0)e.code((0,ze._)`${nn.default.self}.logger.log(${i})`);else if(typeof o.$comment=="function"){let s=(0,ze.str)`${r}/$comment`,a=e.scopeValue("root",{ref:n.root});e.code((0,ze._)`${nn.default.self}.opts.$comment(${i}, ${s}, ${a}.schema)`)}}function nFe(e){let{gen:n,schemaEnv:t,validateName:r,ValidationError:o,opts:i}=e;t.$async?n.if((0,ze._)`${nn.default.errors} === 0`,()=>n.return(nn.default.data),()=>n.throw((0,ze._)`new ${o}(${nn.default.vErrors})`)):(n.assign((0,ze._)`${r}.errors`,nn.default.vErrors),i.unevaluated&&tFe(e),n.return((0,ze._)`${nn.default.errors} === 0`))}function tFe({gen:e,evaluated:n,props:t,items:r}){t instanceof ze.Name&&e.assign((0,ze._)`${n}.props`,t),r instanceof ze.Name&&e.assign((0,ze._)`${n}.items`,r)}function rZ(e,n,t,r){let{gen:o,schema:i,data:s,allErrors:a,opts:d,self:u}=e,{RULES:c}=u;if(i.$ref&&(d.ignoreKeywordsWithRef||!(0,$s.schemaHasRulesButRef)(i,c))){o.block(()=>fZ(e,"$ref",c.all.$ref.definition));return}d.jtd||rFe(e,n),o.block(()=>{for(let p of c.rules)l(p);l(c.post)});function l(p){(0,z1.shouldUseGroup)(i,p)&&(p.type?(o.if((0,kb.checkDataType)(p.type,s,d.strictNumbers)),oZ(e,p),n.length===1&&n[0]===p.type&&t&&(o.else(),(0,kb.reportTypeError)(e)),o.endIf()):oZ(e,p),a||o.if((0,ze._)`${nn.default.errors} === ${r||0}`))}}function oZ(e,n){let{gen:t,schema:r,opts:{useDefaults:o}}=e;o&&(0,Uje.assignDefaults)(e,n.type),t.block(()=>{for(let i of n.rules)(0,z1.shouldUseRule)(r,i)&&fZ(e,i.keyword,i.definition,n.type)})}function rFe(e,n){e.schemaEnv.meta||!e.opts.strictTypes||(oFe(e,n),e.opts.allowUnionTypes||iFe(e,n),sFe(e,e.dataTypes))}function oFe(e,n){if(n.length){if(!e.dataTypes.length){e.dataTypes=n;return}n.forEach(t=>{pZ(e.dataTypes,t)||q1(e,`type "${t}" not allowed by context "${e.dataTypes.join(",")}"`)}),dFe(e,n)}}function iFe(e,n){n.length>1&&!(n.length===2&&n.includes("null"))&&q1(e,"use allowUnionTypes to allow union type keyword")}function sFe(e,n){let t=e.self.RULES.all;for(let r in t){let o=t[r];if(typeof o=="object"&&(0,z1.shouldUseRule)(e.schema,o)){let{type:i}=o.definition;i.length&&!i.some(s=>aFe(n,s))&&q1(e,`missing type "${i.join(",")}" for keyword "${r}"`)}}}function aFe(e,n){return e.includes(n)||n==="number"&&e.includes("integer")}function pZ(e,n){return e.includes(n)||n==="integer"&&e.includes("number")}function dFe(e,n){let t=[];for(let r of e.dataTypes)pZ(n,r)?t.push(r):n.includes("integer")&&r==="number"&&t.push("integer");e.dataTypes=t}function q1(e,n){let t=e.schemaEnv.baseId+e.errSchemaPath;n+=` at "${t}" (strictTypes)`,(0,$s.checkStrictMode)(e,n,e.opts.strictTypes)}var Cb=class{constructor(n,t,r){if((0,hh.validateKeywordUsage)(n,t,r),this.gen=n.gen,this.allErrors=n.allErrors,this.keyword=r,this.data=n.data,this.schema=n.schema[r],this.$data=t.$data&&n.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,$s.schemaRefOrVal)(n,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=n.schema,this.params={},this.it=n,this.def=t,this.$data)this.schemaCode=n.gen.const("vSchema",mZ(this.$data,n));else if(this.schemaCode=this.schemaValue,!(0,hh.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw new Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);("code"in t?t.trackErrors:t.errors!==!1)&&(this.errsCount=n.gen.const("_errs",nn.default.errors))}result(n,t,r){this.failResult((0,ze.not)(n),t,r)}failResult(n,t,r){this.gen.if(n),r?r():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(n,t){this.failResult((0,ze.not)(n),void 0,t)}fail(n){if(n===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(n),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(n){if(!this.$data)return this.fail(n);let{schemaCode:t}=this;this.fail((0,ze._)`${t} !== undefined && (${(0,ze.or)(this.invalid$data(),n)})`)}error(n,t,r){if(t){this.setParams(t),this._error(n,r),this.setParams({});return}this._error(n,r)}_error(n,t){(n?mh.reportExtraError:mh.reportError)(this,this.def.error,t)}$dataError(){(0,mh.reportError)(this,this.def.$dataError||mh.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,mh.resetErrorsCount)(this.gen,this.errsCount)}ok(n){this.allErrors||this.gen.if(n)}setParams(n,t){t?Object.assign(this.params,n):this.params=n}block$data(n,t,r=ze.nil){this.gen.block(()=>{this.check$data(n,r),t()})}check$data(n=ze.nil,t=ze.nil){if(!this.$data)return;let{gen:r,schemaCode:o,schemaType:i,def:s}=this;r.if((0,ze.or)((0,ze._)`${o} === undefined`,t)),n!==ze.nil&&r.assign(n,!0),(i.length||s.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),n!==ze.nil&&r.assign(n,!1)),r.else()}invalid$data(){let{gen:n,schemaCode:t,schemaType:r,def:o,it:i}=this;return(0,ze.or)(s(),a());function s(){if(r.length){if(!(t instanceof ze.Name))throw new Error("ajv implementation error");let d=Array.isArray(r)?r:[r];return(0,ze._)`${(0,kb.checkDataTypes)(d,t,i.opts.strictNumbers,kb.DataType.Wrong)}`}return ze.nil}function a(){if(o.validateSchema){let d=n.scopeValue("validate$data",{ref:o.validateSchema});return(0,ze._)`!${d}(${t})`}return ze.nil}}subschema(n,t){let r=(0,F1.getSubschema)(this.it,n);(0,F1.extendSubschemaData)(r,this.it,n),(0,F1.extendSubschemaMode)(r,n);let o={...this.it,...r,items:void 0,props:void 0};return Gje(o,t),o}mergeEvaluated(n,t){let{it:r,gen:o}=this;r.opts.unevaluated&&(r.props!==!0&&n.props!==void 0&&(r.props=$s.mergeEvaluated.props(o,n.props,r.props,t)),r.items!==!0&&n.items!==void 0&&(r.items=$s.mergeEvaluated.items(o,n.items,r.items,t)))}mergeValidEvaluated(n,t){let{it:r,gen:o}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return o.if(t,()=>this.mergeEvaluated(n,ze.Name)),!0}};Ra.KeywordCxt=Cb;function fZ(e,n,t,r){let o=new Cb(e,t,n);"code"in t?t.code(o,r):o.$data&&t.validate?(0,hh.funcKeywordCode)(o,t):"macro"in t?(0,hh.macroKeywordCode)(o,t):(t.compile||t.validate)&&(0,hh.funcKeywordCode)(o,t)}var uFe=/^\/(?:[^~]|~0|~1)*$/,cFe=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function mZ(e,{dataLevel:n,dataNames:t,dataPathArr:r}){let o,i;if(e==="")return nn.default.rootData;if(e[0]==="/"){if(!uFe.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);o=e,i=nn.default.rootData}else{let u=cFe.exec(e);if(!u)throw new Error(`Invalid JSON-pointer: ${e}`);let c=+u[1];if(o=u[2],o==="#"){if(c>=n)throw new Error(d("property/index",c));return r[n-c]}if(c>n)throw new Error(d("data",c));if(i=t[n-c],!o)return i}let s=i,a=o.split("/");for(let u of a)u&&(i=(0,ze._)`${i}${(0,ze.getProperty)((0,$s.unescapeJsonPointer)(u))}`,s=(0,ze._)`${s} && ${i}`);return s;function d(u,c){return`Cannot access ${u} ${c} levels up, current level is ${n}`}}Ra.getData=mZ});var Tb=ee(U1=>{"use strict";Object.defineProperty(U1,"__esModule",{value:!0});var N1=class extends Error{constructor(n){super("validation failed"),this.errors=n,this.ajv=this.validation=!0}};U1.default=N1});var yh=ee(K1=>{"use strict";Object.defineProperty(K1,"__esModule",{value:!0});var B1=fh(),J1=class extends Error{constructor(n,t,r,o){super(o||`can't resolve reference ${r} from id ${t}`),this.missingRef=(0,B1.resolveUrl)(n,t,r),this.missingSchema=(0,B1.normalizeId)((0,B1.getFullPath)(n,this.missingRef))}};K1.default=J1});var Ib=ee(Lo=>{"use strict";Object.defineProperty(Lo,"__esModule",{value:!0});Lo.resolveSchema=Lo.getCompilingSchema=Lo.resolveRef=Lo.compileSchema=Lo.SchemaEnv=void 0;var pi=fn(),lFe=Tb(),_u=As(),fi=fh(),hZ=Dn(),pFe=gh(),Hl=class{constructor(n){var t;this.refs={},this.dynamicAnchors={};let r;typeof n.schema=="object"&&(r=n.schema),this.schema=n.schema,this.schemaId=n.schemaId,this.root=n.root||this,this.baseId=(t=n.baseId)!==null&&t!==void 0?t:(0,fi.normalizeId)(r?.[n.schemaId||"$id"]),this.schemaPath=n.schemaPath,this.localRefs=n.localRefs,this.meta=n.meta,this.$async=r?.$async,this.refs={}}};Lo.SchemaEnv=Hl;function W1(e){let n=gZ.call(this,e);if(n)return n;let t=(0,fi.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:r,lines:o}=this.opts.code,{ownProperties:i}=this.opts,s=new pi.CodeGen(this.scope,{es5:r,lines:o,ownProperties:i}),a;e.$async&&(a=s.scopeValue("Error",{ref:lFe.default,code:(0,pi._)`require("ajv/dist/runtime/validation_error").default`}));let d=s.scopeName("validate");e.validateName=d;let u={gen:s,allErrors:this.opts.allErrors,data:_u.default.data,parentData:_u.default.parentData,parentDataProperty:_u.default.parentDataProperty,dataNames:[_u.default.data],dataPathArr:[pi.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:s.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,pi.stringify)(e.schema)}:{ref:e.schema}),validateName:d,ValidationError:a,schema:e.schema,schemaEnv:e,rootId:t,baseId:e.baseId||t,schemaPath:pi.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,pi._)`""`,opts:this.opts,self:this},c;try{this._compilations.add(e),(0,pFe.validateFunctionCode)(u),s.optimize(this.opts.code.optimize);let l=s.toString();c=`${s.scopeRefs(_u.default.scope)}return ${l}`,this.opts.code.process&&(c=this.opts.code.process(c,e));let m=new Function(`${_u.default.self}`,`${_u.default.scope}`,c)(this,this.scope.get());if(this.scope.value(d,{ref:m}),m.errors=null,m.schema=e.schema,m.schemaEnv=e,e.$async&&(m.$async=!0),this.opts.code.source===!0&&(m.source={validateName:d,validateCode:l,scopeValues:s._values}),this.opts.unevaluated){let{props:f,items:y}=u;m.evaluated={props:f instanceof pi.Name?void 0:f,items:y instanceof pi.Name?void 0:y,dynamicProps:f instanceof pi.Name,dynamicItems:y instanceof pi.Name},m.source&&(m.source.evaluated=(0,pi.stringify)(m.evaluated))}return e.validate=m,e}catch(l){throw delete e.validate,delete e.validateName,c&&this.logger.error("Error compiling schema, function code:",c),l}finally{this._compilations.delete(e)}}Lo.compileSchema=W1;function fFe(e,n,t){var r;t=(0,fi.resolveUrl)(this.opts.uriResolver,n,t);let o=e.refs[t];if(o)return o;let i=gFe.call(this,e,t);if(i===void 0){let s=(r=e.localRefs)===null||r===void 0?void 0:r[t],{schemaId:a}=this.opts;s&&(i=new Hl({schema:s,schemaId:a,root:e,baseId:n}))}if(i!==void 0)return e.refs[t]=mFe.call(this,i)}Lo.resolveRef=fFe;function mFe(e){return(0,fi.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:W1.call(this,e)}function gZ(e){for(let n of this._compilations)if(hFe(n,e))return n}Lo.getCompilingSchema=gZ;function hFe(e,n){return e.schema===n.schema&&e.root===n.root&&e.baseId===n.baseId}function gFe(e,n){let t;for(;typeof(t=this.refs[n])=="string";)n=t;return t||this.schemas[n]||Pb.call(this,e,n)}function Pb(e,n){let t=this.opts.uriResolver.parse(n),r=(0,fi._getFullPath)(this.opts.uriResolver,t),o=(0,fi.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&r===o)return V1.call(this,t,e);let i=(0,fi.normalizeId)(r),s=this.refs[i]||this.schemas[i];if(typeof s=="string"){let a=Pb.call(this,e,s);return typeof a?.schema!="object"?void 0:V1.call(this,t,a)}if(typeof s?.schema=="object"){if(s.validate||W1.call(this,s),i===(0,fi.normalizeId)(n)){let{schema:a}=s,{schemaId:d}=this.opts,u=a[d];return u&&(o=(0,fi.resolveUrl)(this.opts.uriResolver,o,u)),new Hl({schema:a,schemaId:d,root:e,baseId:o})}return V1.call(this,t,s)}}Lo.resolveSchema=Pb;var yFe=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function V1(e,{baseId:n,schema:t,root:r}){var o;if(((o=e.fragment)===null||o===void 0?void 0:o[0])!=="/")return;for(let a of e.fragment.slice(1).split("/")){if(typeof t=="boolean")return;let d=t[(0,hZ.unescapeFragment)(a)];if(d===void 0)return;t=d;let u=typeof t=="object"&&t[this.opts.schemaId];!yFe.has(a)&&u&&(n=(0,fi.resolveUrl)(this.opts.uriResolver,n,u))}let i;if(typeof t!="boolean"&&t.$ref&&!(0,hZ.schemaHasRulesButRef)(t,this.RULES)){let a=(0,fi.resolveUrl)(this.opts.uriResolver,n,t.$ref);i=Pb.call(this,r,a)}let{schemaId:s}=this.opts;if(i=i||new Hl({schema:t,schemaId:s,root:r,baseId:n}),i.schema!==i.root.schema)return i}});var yZ=ee((jun,xFe)=>{xFe.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var G1=ee((Fun,wZ)=>{"use strict";var _Fe=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),_Z=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function H1(e){let n="",t=0,r=0;for(r=0;r<e.length;r++)if(t=e[r].charCodeAt(0),t!==48){if(!(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102))return"";n+=e[r];break}for(r+=1;r<e.length;r++){if(t=e[r].charCodeAt(0),!(t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102))return"";n+=e[r]}return n}var bFe=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function xZ(e){return e.length=0,!0}function wFe(e,n,t){if(e.length){let r=H1(e);if(r!=="")n.push(r);else return t.error=!0,!1;e.length=0}return!0}function vFe(e){let n=0,t={error:!1,address:"",zone:""},r=[],o=[],i=!1,s=!1,a=wFe;for(let d=0;d<e.length;d++){let u=e[d];if(!(u==="["||u==="]"))if(u===":"){if(i===!0&&(s=!0),!a(o,r,t))break;if(++n>7){t.error=!0;break}d>0&&e[d-1]===":"&&(i=!0),r.push(":");continue}else if(u==="%"){if(!a(o,r,t))break;a=xZ}else{o.push(u);continue}}return o.length&&(a===xZ?t.zone=o.join(""):s?r.push(o.join("")):r.push(H1(o))),t.address=r.join(""),t}function bZ(e){if(SFe(e,":")<2)return{host:e,isIPV6:!1};let n=vFe(e);if(n.error)return{host:e,isIPV6:!1};{let t=n.address,r=n.address;return n.zone&&(t+="%"+n.zone,r+="%25"+n.zone),{host:t,isIPV6:!0,escapedHost:r}}}function SFe(e,n){let t=0;for(let r=0;r<e.length;r++)e[r]===n&&t++;return t}function kFe(e){let n=e,t=[],r=-1,o=0;for(;o=n.length;){if(o===1){if(n===".")break;if(n==="/"){t.push("/");break}else{t.push(n);break}}else if(o===2){if(n[0]==="."){if(n[1]===".")break;if(n[1]==="/"){n=n.slice(2);continue}}else if(n[0]==="/"&&(n[1]==="."||n[1]==="/")){t.push("/");break}}else if(o===3&&n==="/.."){t.length!==0&&t.pop(),t.push("/");break}if(n[0]==="."){if(n[1]==="."){if(n[2]==="/"){n=n.slice(3);continue}}else if(n[1]==="/"){n=n.slice(2);continue}}else if(n[0]==="/"&&n[1]==="."){if(n[2]==="/"){n=n.slice(2);continue}else if(n[2]==="."&&n[3]==="/"){n=n.slice(3),t.length!==0&&t.pop();continue}}if((r=n.indexOf("/",1))===-1){t.push(n);break}else t.push(n.slice(0,r)),n=n.slice(r)}return t.join("")}function CFe(e,n){let t=n!==!0?escape:unescape;return e.scheme!==void 0&&(e.scheme=t(e.scheme)),e.userinfo!==void 0&&(e.userinfo=t(e.userinfo)),e.host!==void 0&&(e.host=t(e.host)),e.path!==void 0&&(e.path=t(e.path)),e.query!==void 0&&(e.query=t(e.query)),e.fragment!==void 0&&(e.fragment=t(e.fragment)),e}function TFe(e){let n=[];if(e.userinfo!==void 0&&(n.push(e.userinfo),n.push("@")),e.host!==void 0){let t=unescape(e.host);if(!_Z(t)){let r=bZ(t);r.isIPV6===!0?t=`[${r.escapedHost}]`:t=e.host}n.push(t)}return(typeof e.port=="number"||typeof e.port=="string")&&(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}wZ.exports={nonSimpleDomain:bFe,recomposeAuthority:TFe,normalizeComponentEncoding:CFe,removeDotSegments:kFe,isIPv4:_Z,isUUID:_Fe,normalizeIPv6:bZ,stringArrayToHexStripped:H1}});var TZ=ee((zun,CZ)=>{"use strict";var{isUUID:PFe}=G1(),IFe=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,RFe=["http","https","ws","wss","urn","urn:uuid"];function EFe(e){return RFe.indexOf(e)!==-1}function Z1(e){return e.secure===!0?!0:e.secure===!1?!1:e.scheme?e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S"):!1}function vZ(e){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e}function SZ(e){let n=String(e.scheme).toLowerCase()==="https";return(e.port===(n?443:80)||e.port==="")&&(e.port=void 0),e.path||(e.path="/"),e}function DFe(e){return e.secure=Z1(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function MFe(e){if((e.port===(Z1(e)?443:80)||e.port==="")&&(e.port=void 0),typeof e.secure=="boolean"&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){let[n,t]=e.resourceName.split("?");e.path=n&&n!=="/"?n:void 0,e.query=t,e.resourceName=void 0}return e.fragment=void 0,e}function AFe(e,n){if(!e.path)return e.error="URN can not be parsed",e;let t=e.path.match(IFe);if(t){let r=n.scheme||e.scheme||"urn";e.nid=t[1].toLowerCase(),e.nss=t[2];let o=`${r}:${n.nid||e.nid}`,i=Q1(o);e.path=void 0,i&&(e=i.parse(e,n))}else e.error=e.error||"URN can not be parsed.";return e}function $Fe(e,n){if(e.nid===void 0)throw new Error("URN without nid cannot be serialized");let t=n.scheme||e.scheme||"urn",r=e.nid.toLowerCase(),o=`${t}:${n.nid||r}`,i=Q1(o);i&&(e=i.serialize(e,n));let s=e,a=e.nss;return s.path=`${r||n.nid}:${a}`,n.skipEscape=!0,s}function OFe(e,n){let t=e;return t.uuid=t.nss,t.nss=void 0,!n.tolerant&&(!t.uuid||!PFe(t.uuid))&&(t.error=t.error||"UUID is not valid."),t}function LFe(e){let n=e;return n.nss=(e.uuid||"").toLowerCase(),n}var kZ={scheme:"http",domainHost:!0,parse:vZ,serialize:SZ},jFe={scheme:"https",domainHost:kZ.domainHost,parse:vZ,serialize:SZ},Rb={scheme:"ws",domainHost:!0,parse:DFe,serialize:MFe},FFe={scheme:"wss",domainHost:Rb.domainHost,parse:Rb.parse,serialize:Rb.serialize},zFe={scheme:"urn",parse:AFe,serialize:$Fe,skipNormalize:!0},qFe={scheme:"urn:uuid",parse:OFe,serialize:LFe,skipNormalize:!0},Eb={http:kZ,https:jFe,ws:Rb,wss:FFe,urn:zFe,"urn:uuid":qFe};Object.setPrototypeOf(Eb,null);function Q1(e){return e&&(Eb[e]||Eb[e.toLowerCase()])||void 0}CZ.exports={wsIsSecure:Z1,SCHEMES:Eb,isValidSchemeName:EFe,getSchemeHandler:Q1}});var RZ=ee((qun,Mb)=>{"use strict";var{normalizeIPv6:NFe,removeDotSegments:xh,recomposeAuthority:UFe,normalizeComponentEncoding:Db,isIPv4:BFe,nonSimpleDomain:JFe}=G1(),{SCHEMES:KFe,getSchemeHandler:PZ}=TZ();function VFe(e,n){return typeof e=="string"?e=Zi(Os(e,n),n):typeof e=="object"&&(e=Os(Zi(e,n),n)),e}function WFe(e,n,t){let r=t?Object.assign({scheme:"null"},t):{scheme:"null"},o=IZ(Os(e,r),Os(n,r),r,!0);return r.skipEscape=!0,Zi(o,r)}function IZ(e,n,t,r){let o={};return r||(e=Os(Zi(e,t),t),n=Os(Zi(n,t),t)),t=t||{},!t.tolerant&&n.scheme?(o.scheme=n.scheme,o.userinfo=n.userinfo,o.host=n.host,o.port=n.port,o.path=xh(n.path||""),o.query=n.query):(n.userinfo!==void 0||n.host!==void 0||n.port!==void 0?(o.userinfo=n.userinfo,o.host=n.host,o.port=n.port,o.path=xh(n.path||""),o.query=n.query):(n.path?(n.path[0]==="/"?o.path=xh(n.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?o.path="/"+n.path:e.path?o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+n.path:o.path=n.path,o.path=xh(o.path)),o.query=n.query):(o.path=e.path,n.query!==void 0?o.query=n.query:o.query=e.query),o.userinfo=e.userinfo,o.host=e.host,o.port=e.port),o.scheme=e.scheme),o.fragment=n.fragment,o}function HFe(e,n,t){return typeof e=="string"?(e=unescape(e),e=Zi(Db(Os(e,t),!0),{...t,skipEscape:!0})):typeof e=="object"&&(e=Zi(Db(e,!0),{...t,skipEscape:!0})),typeof n=="string"?(n=unescape(n),n=Zi(Db(Os(n,t),!0),{...t,skipEscape:!0})):typeof n=="object"&&(n=Zi(Db(n,!0),{...t,skipEscape:!0})),e.toLowerCase()===n.toLowerCase()}function Zi(e,n){let t={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},r=Object.assign({},n),o=[],i=PZ(r.scheme||t.scheme);i&&i.serialize&&i.serialize(t,r),t.path!==void 0&&(r.skipEscape?t.path=unescape(t.path):(t.path=escape(t.path),t.scheme!==void 0&&(t.path=t.path.split("%3A").join(":")))),r.reference!=="suffix"&&t.scheme&&o.push(t.scheme,":");let s=UFe(t);if(s!==void 0&&(r.reference!=="suffix"&&o.push("//"),o.push(s),t.path&&t.path[0]!=="/"&&o.push("/")),t.path!==void 0){let a=t.path;!r.absolutePath&&(!i||!i.absolutePath)&&(a=xh(a)),s===void 0&&a[0]==="/"&&a[1]==="/"&&(a="/%2F"+a.slice(2)),o.push(a)}return t.query!==void 0&&o.push("?",t.query),t.fragment!==void 0&&o.push("#",t.fragment),o.join("")}var GFe=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function Os(e,n){let t=Object.assign({},n),r={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},o=!1;t.reference==="suffix"&&(t.scheme?e=t.scheme+":"+e:e="//"+e);let i=e.match(GFe);if(i){if(r.scheme=i[1],r.userinfo=i[3],r.host=i[4],r.port=parseInt(i[5],10),r.path=i[6]||"",r.query=i[7],r.fragment=i[8],isNaN(r.port)&&(r.port=i[5]),r.host)if(BFe(r.host)===!1){let d=NFe(r.host);r.host=d.host.toLowerCase(),o=d.isIPV6}else o=!0;r.scheme===void 0&&r.userinfo===void 0&&r.host===void 0&&r.port===void 0&&r.query===void 0&&!r.path?r.reference="same-document":r.scheme===void 0?r.reference="relative":r.fragment===void 0?r.reference="absolute":r.reference="uri",t.reference&&t.reference!=="suffix"&&t.reference!==r.reference&&(r.error=r.error||"URI is not a "+t.reference+" reference.");let s=PZ(t.scheme||r.scheme);if(!t.unicodeSupport&&(!s||!s.unicodeSupport)&&r.host&&(t.domainHost||s&&s.domainHost)&&o===!1&&JFe(r.host))try{r.host=URL.domainToASCII(r.host.toLowerCase())}catch(a){r.error=r.error||"Host's domain name can not be converted to ASCII: "+a}(!s||s&&!s.skipNormalize)&&(e.indexOf("%")!==-1&&(r.scheme!==void 0&&(r.scheme=unescape(r.scheme)),r.host!==void 0&&(r.host=unescape(r.host))),r.path&&(r.path=escape(unescape(r.path))),r.fragment&&(r.fragment=encodeURI(decodeURIComponent(r.fragment)))),s&&s.parse&&s.parse(r,t)}else r.error=r.error||"URI can not be parsed.";return r}var X1={SCHEMES:KFe,normalize:VFe,resolve:WFe,resolveComponent:IZ,equal:HFe,serialize:Zi,parse:Os};Mb.exports=X1;Mb.exports.default=X1;Mb.exports.fastUri=X1});var DZ=ee(Y1=>{"use strict";Object.defineProperty(Y1,"__esModule",{value:!0});var EZ=RZ();EZ.code='require("ajv/dist/runtime/uri").default';Y1.default=EZ});var zZ=ee(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.CodeGen=sr.Name=sr.nil=sr.stringify=sr.str=sr._=sr.KeywordCxt=void 0;var ZFe=gh();Object.defineProperty(sr,"KeywordCxt",{enumerable:!0,get:function(){return ZFe.KeywordCxt}});var Gl=fn();Object.defineProperty(sr,"_",{enumerable:!0,get:function(){return Gl._}});Object.defineProperty(sr,"str",{enumerable:!0,get:function(){return Gl.str}});Object.defineProperty(sr,"stringify",{enumerable:!0,get:function(){return Gl.stringify}});Object.defineProperty(sr,"nil",{enumerable:!0,get:function(){return Gl.nil}});Object.defineProperty(sr,"Name",{enumerable:!0,get:function(){return Gl.Name}});Object.defineProperty(sr,"CodeGen",{enumerable:!0,get:function(){return Gl.CodeGen}});var QFe=Tb(),LZ=yh(),XFe=I1(),_h=Ib(),YFe=fn(),bh=fh(),Ab=ph(),nD=Dn(),MZ=yZ(),eze=DZ(),jZ=(e,n)=>new RegExp(e,n);jZ.code="new RegExp";var nze=["removeAdditional","useDefaults","coerceTypes"],tze=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),rze={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},oze={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},AZ=200;function ize(e){var n,t,r,o,i,s,a,d,u,c,l,p,m,f,y,x,b,S,v,w,k,R,P,O,E;let j=e.strict,z=(n=e.code)===null||n===void 0?void 0:n.optimize,M=z===!0||z===void 0?1:z||0,J=(r=(t=e.code)===null||t===void 0?void 0:t.regExp)!==null&&r!==void 0?r:jZ,K=(o=e.uriResolver)!==null&&o!==void 0?o:eze.default;return{strictSchema:(s=(i=e.strictSchema)!==null&&i!==void 0?i:j)!==null&&s!==void 0?s:!0,strictNumbers:(d=(a=e.strictNumbers)!==null&&a!==void 0?a:j)!==null&&d!==void 0?d:!0,strictTypes:(c=(u=e.strictTypes)!==null&&u!==void 0?u:j)!==null&&c!==void 0?c:"log",strictTuples:(p=(l=e.strictTuples)!==null&&l!==void 0?l:j)!==null&&p!==void 0?p:"log",strictRequired:(f=(m=e.strictRequired)!==null&&m!==void 0?m:j)!==null&&f!==void 0?f:!1,code:e.code?{...e.code,optimize:M,regExp:J}:{optimize:M,regExp:J},loopRequired:(y=e.loopRequired)!==null&&y!==void 0?y:AZ,loopEnum:(x=e.loopEnum)!==null&&x!==void 0?x:AZ,meta:(b=e.meta)!==null&&b!==void 0?b:!0,messages:(S=e.messages)!==null&&S!==void 0?S:!0,inlineRefs:(v=e.inlineRefs)!==null&&v!==void 0?v:!0,schemaId:(w=e.schemaId)!==null&&w!==void 0?w:"$id",addUsedSchema:(k=e.addUsedSchema)!==null&&k!==void 0?k:!0,validateSchema:(R=e.validateSchema)!==null&&R!==void 0?R:!0,validateFormats:(P=e.validateFormats)!==null&&P!==void 0?P:!0,unicodeRegExp:(O=e.unicodeRegExp)!==null&&O!==void 0?O:!0,int32range:(E=e.int32range)!==null&&E!==void 0?E:!0,uriResolver:K}}var wh=class{constructor(n={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,n=this.opts={...n,...ize(n)};let{es5:t,lines:r}=this.opts.code;this.scope=new YFe.ValueScope({scope:{},prefixes:tze,es5:t,lines:r}),this.logger=lze(n.logger);let o=n.validateFormats;n.validateFormats=!1,this.RULES=(0,XFe.getRules)(),$Z.call(this,rze,n,"NOT SUPPORTED"),$Z.call(this,oze,n,"DEPRECATED","warn"),this._metaOpts=uze.call(this),n.formats&&aze.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),n.keywords&&dze.call(this,n.keywords),typeof n.meta=="object"&&this.addMetaSchema(n.meta),sze.call(this),n.validateFormats=o}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:n,meta:t,schemaId:r}=this.opts,o=MZ;r==="id"&&(o={...MZ},o.id=o.$id,delete o.$id),t&&n&&this.addMetaSchema(o,o[r],!1)}defaultMeta(){let{meta:n,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof n=="object"?n[t]||n:void 0}validate(n,t){let r;if(typeof n=="string"){if(r=this.getSchema(n),!r)throw new Error(`no schema with key or ref "${n}"`)}else r=this.compile(n);let o=r(t);return"$async"in r||(this.errors=r.errors),o}compile(n,t){let r=this._addSchema(n,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(n,t){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return o.call(this,n,t);async function o(c,l){await i.call(this,c.$schema);let p=this._addSchema(c,l);return p.validate||s.call(this,p)}async function i(c){c&&!this.getSchema(c)&&await o.call(this,{$ref:c},!0)}async function s(c){try{return this._compileSchemaEnv(c)}catch(l){if(!(l instanceof LZ.default))throw l;return a.call(this,l),await d.call(this,l.missingSchema),s.call(this,c)}}function a({missingSchema:c,missingRef:l}){if(this.refs[c])throw new Error(`AnySchema ${c} is loaded but ${l} cannot be resolved`)}async function d(c){let l=await u.call(this,c);this.refs[c]||await i.call(this,l.$schema),this.refs[c]||this.addSchema(l,c,t)}async function u(c){let l=this._loading[c];if(l)return l;try{return await(this._loading[c]=r(c))}finally{delete this._loading[c]}}}addSchema(n,t,r,o=this.opts.validateSchema){if(Array.isArray(n)){for(let s of n)this.addSchema(s,void 0,r,o);return this}let i;if(typeof n=="object"){let{schemaId:s}=this.opts;if(i=n[s],i!==void 0&&typeof i!="string")throw new Error(`schema ${s} must be string`)}return t=(0,bh.normalizeId)(t||i),this._checkUnique(t),this.schemas[t]=this._addSchema(n,r,t,o,!0),this}addMetaSchema(n,t,r=this.opts.validateSchema){return this.addSchema(n,t,!0,r),this}validateSchema(n,t){if(typeof n=="boolean")return!0;let r;if(r=n.$schema,r!==void 0&&typeof r!="string")throw new Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let o=this.validate(r,n);if(!o&&t){let i="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(i);else throw new Error(i)}return o}getSchema(n){let t;for(;typeof(t=OZ.call(this,n))=="string";)n=t;if(t===void 0){let{schemaId:r}=this.opts,o=new _h.SchemaEnv({schema:{},schemaId:r});if(t=_h.resolveSchema.call(this,o,n),!t)return;this.refs[n]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(n){if(n instanceof RegExp)return this._removeAllSchemas(this.schemas,n),this._removeAllSchemas(this.refs,n),this;switch(typeof n){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=OZ.call(this,n);return typeof t=="object"&&this._cache.delete(t.schema),delete this.schemas[n],delete this.refs[n],this}case"object":{let t=n;this._cache.delete(t);let r=n[this.opts.schemaId];return r&&(r=(0,bh.normalizeId)(r),delete this.schemas[r],delete this.refs[r]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(n){for(let t of n)this.addKeyword(t);return this}addKeyword(n,t){let r;if(typeof n=="string")r=n,typeof t=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r);else if(typeof n=="object"&&t===void 0){if(t=n,r=t.keyword,Array.isArray(r)&&!r.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(fze.call(this,r,t),!t)return(0,nD.eachItem)(r,i=>eD.call(this,i)),this;hze.call(this,t);let o={...t,type:(0,Ab.getJSONTypes)(t.type),schemaType:(0,Ab.getJSONTypes)(t.schemaType)};return(0,nD.eachItem)(r,o.type.length===0?i=>eD.call(this,i,o):i=>o.type.forEach(s=>eD.call(this,i,o,s))),this}getKeyword(n){let t=this.RULES.all[n];return typeof t=="object"?t.definition:!!t}removeKeyword(n){let{RULES:t}=this;delete t.keywords[n],delete t.all[n];for(let r of t.rules){let o=r.rules.findIndex(i=>i.keyword===n);o>=0&&r.rules.splice(o,1)}return this}addFormat(n,t){return typeof t=="string"&&(t=new RegExp(t)),this.formats[n]=t,this}errorsText(n=this.errors,{separator:t=", ",dataVar:r="data"}={}){return!n||n.length===0?"No errors":n.map(o=>`${r}${o.instancePath} ${o.message}`).reduce((o,i)=>o+t+i)}$dataMetaSchema(n,t){let r=this.RULES.all;n=JSON.parse(JSON.stringify(n));for(let o of t){let i=o.split("/").slice(1),s=n;for(let a of i)s=s[a];for(let a in r){let d=r[a];if(typeof d!="object")continue;let{$data:u}=d.definition,c=s[a];u&&c&&(s[a]=FZ(c))}}return n}_removeAllSchemas(n,t){for(let r in n){let o=n[r];(!t||t.test(r))&&(typeof o=="string"?delete n[r]:o&&!o.meta&&(this._cache.delete(o.schema),delete n[r]))}}_addSchema(n,t,r,o=this.opts.validateSchema,i=this.opts.addUsedSchema){let s,{schemaId:a}=this.opts;if(typeof n=="object")s=n[a];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof n!="boolean")throw new Error("schema must be object or boolean")}let d=this._cache.get(n);if(d!==void 0)return d;r=(0,bh.normalizeId)(s||r);let u=bh.getSchemaRefs.call(this,n,r);return d=new _h.SchemaEnv({schema:n,schemaId:a,meta:t,baseId:r,localRefs:u}),this._cache.set(d.schema,d),i&&!r.startsWith("#")&&(r&&this._checkUnique(r),this.refs[r]=d),o&&this.validateSchema(n,!0),d}_checkUnique(n){if(this.schemas[n]||this.refs[n])throw new Error(`schema with key or id "${n}" already exists`)}_compileSchemaEnv(n){if(n.meta?this._compileMetaSchema(n):_h.compileSchema.call(this,n),!n.validate)throw new Error("ajv implementation error");return n.validate}_compileMetaSchema(n){let t=this.opts;this.opts=this._metaOpts;try{_h.compileSchema.call(this,n)}finally{this.opts=t}}};wh.ValidationError=QFe.default;wh.MissingRefError=LZ.default;sr.default=wh;function $Z(e,n,t,r="error"){for(let o in e){let i=o;i in n&&this.logger[r](`${t}: option ${o}. ${e[i]}`)}}function OZ(e){return e=(0,bh.normalizeId)(e),this.schemas[e]||this.refs[e]}function sze(){let e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(let n in e)this.addSchema(e[n],n)}function aze(){for(let e in this.opts.formats){let n=this.opts.formats[e];n&&this.addFormat(e,n)}}function dze(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let n in e){let t=e[n];t.keyword||(t.keyword=n),this.addKeyword(t)}}function uze(){let e={...this.opts};for(let n of nze)delete e[n];return e}var cze={log(){},warn(){},error(){}};function lze(e){if(e===!1)return cze;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}var pze=/^[a-z_$][a-z0-9_$:-]*$/i;function fze(e,n){let{RULES:t}=this;if((0,nD.eachItem)(e,r=>{if(t.keywords[r])throw new Error(`Keyword ${r} is already defined`);if(!pze.test(r))throw new Error(`Keyword ${r} has invalid name`)}),!!n&&n.$data&&!("code"in n||"validate"in n))throw new Error('$data keyword must have "code" or "validate" function')}function eD(e,n,t){var r;let o=n?.post;if(t&&o)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:i}=this,s=o?i.post:i.rules.find(({type:d})=>d===t);if(s||(s={type:t,rules:[]},i.rules.push(s)),i.keywords[e]=!0,!n)return;let a={keyword:e,definition:{...n,type:(0,Ab.getJSONTypes)(n.type),schemaType:(0,Ab.getJSONTypes)(n.schemaType)}};n.before?mze.call(this,s,a,n.before):s.rules.push(a),i.all[e]=a,(r=n.implements)===null||r===void 0||r.forEach(d=>this.addKeyword(d))}function mze(e,n,t){let r=e.rules.findIndex(o=>o.keyword===t);r>=0?e.rules.splice(r,0,n):(e.rules.push(n),this.logger.warn(`rule ${t} is not defined`))}function hze(e){let{metaSchema:n}=e;n!==void 0&&(e.$data&&this.opts.$data&&(n=FZ(n)),e.validateSchema=this.compile(n,!0))}var gze={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function FZ(e){return{anyOf:[e,gze]}}});var qZ=ee(tD=>{"use strict";Object.defineProperty(tD,"__esModule",{value:!0});var yze={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};tD.default=yze});var JZ=ee(bu=>{"use strict";Object.defineProperty(bu,"__esModule",{value:!0});bu.callRef=bu.getValidate=void 0;var xze=yh(),NZ=Oo(),Zr=fn(),Zl=As(),UZ=Ib(),$b=Dn(),_ze={keyword:"$ref",schemaType:"string",code(e){let{gen:n,schema:t,it:r}=e,{baseId:o,schemaEnv:i,validateName:s,opts:a,self:d}=r,{root:u}=i;if((t==="#"||t==="#/")&&o===u.baseId)return l();let c=UZ.resolveRef.call(d,u,o,t);if(c===void 0)throw new xze.default(r.opts.uriResolver,o,t);if(c instanceof UZ.SchemaEnv)return p(c);return m(c);function l(){if(i===u)return Ob(e,s,i,i.$async);let f=n.scopeValue("root",{ref:u});return Ob(e,(0,Zr._)`${f}.validate`,u,u.$async)}function p(f){let y=BZ(e,f);Ob(e,y,f,f.$async)}function m(f){let y=n.scopeValue("schema",a.code.source===!0?{ref:f,code:(0,Zr.stringify)(f)}:{ref:f}),x=n.name("valid"),b=e.subschema({schema:f,dataTypes:[],schemaPath:Zr.nil,topSchemaRef:y,errSchemaPath:t},x);e.mergeEvaluated(b),e.ok(x)}}};function BZ(e,n){let{gen:t}=e;return n.validate?t.scopeValue("validate",{ref:n.validate}):(0,Zr._)`${t.scopeValue("wrapper",{ref:n})}.validate`}bu.getValidate=BZ;function Ob(e,n,t,r){let{gen:o,it:i}=e,{allErrors:s,schemaEnv:a,opts:d}=i,u=d.passContext?Zl.default.this:Zr.nil;r?c():l();function c(){if(!a.$async)throw new Error("async schema referenced by sync schema");let f=o.let("valid");o.try(()=>{o.code((0,Zr._)`await ${(0,NZ.callValidateCode)(e,n,u)}`),m(n),s||o.assign(f,!0)},y=>{o.if((0,Zr._)`!(${y} instanceof ${i.ValidationError})`,()=>o.throw(y)),p(y),s||o.assign(f,!1)}),e.ok(f)}function l(){e.result((0,NZ.callValidateCode)(e,n,u),()=>m(n),()=>p(n))}function p(f){let y=(0,Zr._)`${f}.errors`;o.assign(Zl.default.vErrors,(0,Zr._)`${Zl.default.vErrors} === null ? ${y} : ${Zl.default.vErrors}.concat(${y})`),o.assign(Zl.default.errors,(0,Zr._)`${Zl.default.vErrors}.length`)}function m(f){var y;if(!i.opts.unevaluated)return;let x=(y=t?.validate)===null||y===void 0?void 0:y.evaluated;if(i.props!==!0)if(x&&!x.dynamicProps)x.props!==void 0&&(i.props=$b.mergeEvaluated.props(o,x.props,i.props));else{let b=o.var("props",(0,Zr._)`${f}.evaluated.props`);i.props=$b.mergeEvaluated.props(o,b,i.props,Zr.Name)}if(i.items!==!0)if(x&&!x.dynamicItems)x.items!==void 0&&(i.items=$b.mergeEvaluated.items(o,x.items,i.items));else{let b=o.var("items",(0,Zr._)`${f}.evaluated.items`);i.items=$b.mergeEvaluated.items(o,b,i.items,Zr.Name)}}}bu.callRef=Ob;bu.default=_ze});var KZ=ee(rD=>{"use strict";Object.defineProperty(rD,"__esModule",{value:!0});var bze=qZ(),wze=JZ(),vze=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",bze.default,wze.default];rD.default=vze});var VZ=ee(oD=>{"use strict";Object.defineProperty(oD,"__esModule",{value:!0});var Lb=fn(),Ea=Lb.operators,jb={maximum:{okStr:"<=",ok:Ea.LTE,fail:Ea.GT},minimum:{okStr:">=",ok:Ea.GTE,fail:Ea.LT},exclusiveMaximum:{okStr:"<",ok:Ea.LT,fail:Ea.GTE},exclusiveMinimum:{okStr:">",ok:Ea.GT,fail:Ea.LTE}},Sze={message:({keyword:e,schemaCode:n})=>(0,Lb.str)`must be ${jb[e].okStr} ${n}`,params:({keyword:e,schemaCode:n})=>(0,Lb._)`{comparison: ${jb[e].okStr}, limit: ${n}}`},kze={keyword:Object.keys(jb),type:"number",schemaType:"number",$data:!0,error:Sze,code(e){let{keyword:n,data:t,schemaCode:r}=e;e.fail$data((0,Lb._)`${t} ${jb[n].fail} ${r} || isNaN(${t})`)}};oD.default=kze});var WZ=ee(iD=>{"use strict";Object.defineProperty(iD,"__esModule",{value:!0});var vh=fn(),Cze={message:({schemaCode:e})=>(0,vh.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,vh._)`{multipleOf: ${e}}`},Tze={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:Cze,code(e){let{gen:n,data:t,schemaCode:r,it:o}=e,i=o.opts.multipleOfPrecision,s=n.let("res"),a=i?(0,vh._)`Math.abs(Math.round(${s}) - ${s}) > 1e-${i}`:(0,vh._)`${s} !== parseInt(${s})`;e.fail$data((0,vh._)`(${r} === 0 || (${s} = ${t}/${r}, ${a}))`)}};iD.default=Tze});var GZ=ee(sD=>{"use strict";Object.defineProperty(sD,"__esModule",{value:!0});function HZ(e){let n=e.length,t=0,r=0,o;for(;r<n;)t++,o=e.charCodeAt(r++),o>=55296&&o<=56319&&r<n&&(o=e.charCodeAt(r),(o&64512)===56320&&r++);return t}sD.default=HZ;HZ.code='require("ajv/dist/runtime/ucs2length").default'});var ZZ=ee(aD=>{"use strict";Object.defineProperty(aD,"__esModule",{value:!0});var wu=fn(),Pze=Dn(),Ize=GZ(),Rze={message({keyword:e,schemaCode:n}){let t=e==="maxLength"?"more":"fewer";return(0,wu.str)`must NOT have ${t} than ${n} characters`},params:({schemaCode:e})=>(0,wu._)`{limit: ${e}}`},Eze={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:Rze,code(e){let{keyword:n,data:t,schemaCode:r,it:o}=e,i=n==="maxLength"?wu.operators.GT:wu.operators.LT,s=o.opts.unicode===!1?(0,wu._)`${t}.length`:(0,wu._)`${(0,Pze.useFunc)(e.gen,Ize.default)}(${t})`;e.fail$data((0,wu._)`${s} ${i} ${r}`)}};aD.default=Eze});var QZ=ee(dD=>{"use strict";Object.defineProperty(dD,"__esModule",{value:!0});var Dze=Oo(),Fb=fn(),Mze={message:({schemaCode:e})=>(0,Fb.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,Fb._)`{pattern: ${e}}`},Aze={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:Mze,code(e){let{data:n,$data:t,schema:r,schemaCode:o,it:i}=e,s=i.opts.unicodeRegExp?"u":"",a=t?(0,Fb._)`(new RegExp(${o}, ${s}))`:(0,Dze.usePattern)(e,r);e.fail$data((0,Fb._)`!${a}.test(${n})`)}};dD.default=Aze});var XZ=ee(uD=>{"use strict";Object.defineProperty(uD,"__esModule",{value:!0});var Sh=fn(),$ze={message({keyword:e,schemaCode:n}){let t=e==="maxProperties"?"more":"fewer";return(0,Sh.str)`must NOT have ${t} than ${n} properties`},params:({schemaCode:e})=>(0,Sh._)`{limit: ${e}}`},Oze={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:$ze,code(e){let{keyword:n,data:t,schemaCode:r}=e,o=n==="maxProperties"?Sh.operators.GT:Sh.operators.LT;e.fail$data((0,Sh._)`Object.keys(${t}).length ${o} ${r}`)}};uD.default=Oze});var YZ=ee(cD=>{"use strict";Object.defineProperty(cD,"__esModule",{value:!0});var kh=Oo(),Ch=fn(),Lze=Dn(),jze={message:({params:{missingProperty:e}})=>(0,Ch.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,Ch._)`{missingProperty: ${e}}`},Fze={keyword:"required",type:"object",schemaType:"array",$data:!0,error:jze,code(e){let{gen:n,schema:t,schemaCode:r,data:o,$data:i,it:s}=e,{opts:a}=s;if(!i&&t.length===0)return;let d=t.length>=a.loopRequired;if(s.allErrors?u():c(),a.strictRequired){let m=e.parentSchema.properties,{definedProperties:f}=e.it;for(let y of t)if(m?.[y]===void 0&&!f.has(y)){let x=s.schemaEnv.baseId+s.errSchemaPath,b=`required property "${y}" is not defined at "${x}" (strictRequired)`;(0,Lze.checkStrictMode)(s,b,s.opts.strictRequired)}}function u(){if(d||i)e.block$data(Ch.nil,l);else for(let m of t)(0,kh.checkReportMissingProp)(e,m)}function c(){let m=n.let("missing");if(d||i){let f=n.let("valid",!0);e.block$data(f,()=>p(m,f)),e.ok(f)}else n.if((0,kh.checkMissingProp)(e,t,m)),(0,kh.reportMissingProp)(e,m),n.else()}function l(){n.forOf("prop",r,m=>{e.setParams({missingProperty:m}),n.if((0,kh.noPropertyInData)(n,o,m,a.ownProperties),()=>e.error())})}function p(m,f){e.setParams({missingProperty:m}),n.forOf(m,r,()=>{n.assign(f,(0,kh.propertyInData)(n,o,m,a.ownProperties)),n.if((0,Ch.not)(f),()=>{e.error(),n.break()})},Ch.nil)}}};cD.default=Fze});var eQ=ee(lD=>{"use strict";Object.defineProperty(lD,"__esModule",{value:!0});var Th=fn(),zze={message({keyword:e,schemaCode:n}){let t=e==="maxItems"?"more":"fewer";return(0,Th.str)`must NOT have ${t} than ${n} items`},params:({schemaCode:e})=>(0,Th._)`{limit: ${e}}`},qze={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:zze,code(e){let{keyword:n,data:t,schemaCode:r}=e,o=n==="maxItems"?Th.operators.GT:Th.operators.LT;e.fail$data((0,Th._)`${t}.length ${o} ${r}`)}};lD.default=qze});var zb=ee(pD=>{"use strict";Object.defineProperty(pD,"__esModule",{value:!0});var nQ=L1();nQ.code='require("ajv/dist/runtime/equal").default';pD.default=nQ});var tQ=ee(mD=>{"use strict";Object.defineProperty(mD,"__esModule",{value:!0});var fD=ph(),ar=fn(),Nze=Dn(),Uze=zb(),Bze={message:({params:{i:e,j:n}})=>(0,ar.str)`must NOT have duplicate items (items ## ${n} and ${e} are identical)`,params:({params:{i:e,j:n}})=>(0,ar._)`{i: ${e}, j: ${n}}`},Jze={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:Bze,code(e){let{gen:n,data:t,$data:r,schema:o,parentSchema:i,schemaCode:s,it:a}=e;if(!r&&!o)return;let d=n.let("valid"),u=i.items?(0,fD.getSchemaTypes)(i.items):[];e.block$data(d,c,(0,ar._)`${s} === false`),e.ok(d);function c(){let f=n.let("i",(0,ar._)`${t}.length`),y=n.let("j");e.setParams({i:f,j:y}),n.assign(d,!0),n.if((0,ar._)`${f} > 1`,()=>(l()?p:m)(f,y))}function l(){return u.length>0&&!u.some(f=>f==="object"||f==="array")}function p(f,y){let x=n.name("item"),b=(0,fD.checkDataTypes)(u,x,a.opts.strictNumbers,fD.DataType.Wrong),S=n.const("indices",(0,ar._)`{}`);n.for((0,ar._)`;${f}--;`,()=>{n.let(x,(0,ar._)`${t}[${f}]`),n.if(b,(0,ar._)`continue`),u.length>1&&n.if((0,ar._)`typeof ${x} == "string"`,(0,ar._)`${x} += "_"`),n.if((0,ar._)`typeof ${S}[${x}] == "number"`,()=>{n.assign(y,(0,ar._)`${S}[${x}]`),e.error(),n.assign(d,!1).break()}).code((0,ar._)`${S}[${x}] = ${f}`)})}function m(f,y){let x=(0,Nze.useFunc)(n,Uze.default),b=n.name("outer");n.label(b).for((0,ar._)`;${f}--;`,()=>n.for((0,ar._)`${y} = ${f}; ${y}--;`,()=>n.if((0,ar._)`${x}(${t}[${f}], ${t}[${y}])`,()=>{e.error(),n.assign(d,!1).break(b)})))}}};mD.default=Jze});var rQ=ee(gD=>{"use strict";Object.defineProperty(gD,"__esModule",{value:!0});var hD=fn(),Kze=Dn(),Vze=zb(),Wze={message:"must be equal to constant",params:({schemaCode:e})=>(0,hD._)`{allowedValue: ${e}}`},Hze={keyword:"const",$data:!0,error:Wze,code(e){let{gen:n,data:t,$data:r,schemaCode:o,schema:i}=e;r||i&&typeof i=="object"?e.fail$data((0,hD._)`!${(0,Kze.useFunc)(n,Vze.default)}(${t}, ${o})`):e.fail((0,hD._)`${i} !== ${t}`)}};gD.default=Hze});var oQ=ee(yD=>{"use strict";Object.defineProperty(yD,"__esModule",{value:!0});var Ph=fn(),Gze=Dn(),Zze=zb(),Qze={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>(0,Ph._)`{allowedValues: ${e}}`},Xze={keyword:"enum",schemaType:"array",$data:!0,error:Qze,code(e){let{gen:n,data:t,$data:r,schema:o,schemaCode:i,it:s}=e;if(!r&&o.length===0)throw new Error("enum must have non-empty array");let a=o.length>=s.opts.loopEnum,d,u=()=>d??(d=(0,Gze.useFunc)(n,Zze.default)),c;if(a||r)c=n.let("valid"),e.block$data(c,l);else{if(!Array.isArray(o))throw new Error("ajv implementation error");let m=n.const("vSchema",i);c=(0,Ph.or)(...o.map((f,y)=>p(m,y)))}e.pass(c);function l(){n.assign(c,!1),n.forOf("v",i,m=>n.if((0,Ph._)`${u()}(${t}, ${m})`,()=>n.assign(c,!0).break()))}function p(m,f){let y=o[f];return typeof y=="object"&&y!==null?(0,Ph._)`${u()}(${t}, ${m}[${f}])`:(0,Ph._)`${t} === ${y}`}}};yD.default=Xze});var iQ=ee(xD=>{"use strict";Object.defineProperty(xD,"__esModule",{value:!0});var Yze=VZ(),eqe=WZ(),nqe=ZZ(),tqe=QZ(),rqe=XZ(),oqe=YZ(),iqe=eQ(),sqe=tQ(),aqe=rQ(),dqe=oQ(),uqe=[Yze.default,eqe.default,nqe.default,tqe.default,rqe.default,oqe.default,iqe.default,sqe.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},aqe.default,dqe.default];xD.default=uqe});var bD=ee(Ih=>{"use strict";Object.defineProperty(Ih,"__esModule",{value:!0});Ih.validateAdditionalItems=void 0;var vu=fn(),_D=Dn(),cqe={message:({params:{len:e}})=>(0,vu.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,vu._)`{limit: ${e}}`},lqe={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:cqe,code(e){let{parentSchema:n,it:t}=e,{items:r}=n;if(!Array.isArray(r)){(0,_D.checkStrictMode)(t,'"additionalItems" is ignored when "items" is not an array of schemas');return}sQ(e,r)}};function sQ(e,n){let{gen:t,schema:r,data:o,keyword:i,it:s}=e;s.items=!0;let a=t.const("len",(0,vu._)`${o}.length`);if(r===!1)e.setParams({len:n.length}),e.pass((0,vu._)`${a} <= ${n.length}`);else if(typeof r=="object"&&!(0,_D.alwaysValidSchema)(s,r)){let u=t.var("valid",(0,vu._)`${a} <= ${n.length}`);t.if((0,vu.not)(u),()=>d(u)),e.ok(u)}function d(u){t.forRange("i",n.length,a,c=>{e.subschema({keyword:i,dataProp:c,dataPropType:_D.Type.Num},u),s.allErrors||t.if((0,vu.not)(u),()=>t.break())})}}Ih.validateAdditionalItems=sQ;Ih.default=lqe});var wD=ee(Rh=>{"use strict";Object.defineProperty(Rh,"__esModule",{value:!0});Rh.validateTuple=void 0;var aQ=fn(),qb=Dn(),pqe=Oo(),fqe={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:n,it:t}=e;if(Array.isArray(n))return dQ(e,"additionalItems",n);t.items=!0,!(0,qb.alwaysValidSchema)(t,n)&&e.ok((0,pqe.validateArray)(e))}};function dQ(e,n,t=e.schema){let{gen:r,parentSchema:o,data:i,keyword:s,it:a}=e;c(o),a.opts.unevaluated&&t.length&&a.items!==!0&&(a.items=qb.mergeEvaluated.items(r,t.length,a.items));let d=r.name("valid"),u=r.const("len",(0,aQ._)`${i}.length`);t.forEach((l,p)=>{(0,qb.alwaysValidSchema)(a,l)||(r.if((0,aQ._)`${u} > ${p}`,()=>e.subschema({keyword:s,schemaProp:p,dataProp:p},d)),e.ok(d))});function c(l){let{opts:p,errSchemaPath:m}=a,f=t.length,y=f===l.minItems&&(f===l.maxItems||l[n]===!1);if(p.strictTuples&&!y){let x=`"${s}" is ${f}-tuple, but minItems or maxItems/${n} are not specified or different at path "${m}"`;(0,qb.checkStrictMode)(a,x,p.strictTuples)}}}Rh.validateTuple=dQ;Rh.default=fqe});var uQ=ee(vD=>{"use strict";Object.defineProperty(vD,"__esModule",{value:!0});var mqe=wD(),hqe={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,mqe.validateTuple)(e,"items")};vD.default=hqe});var lQ=ee(SD=>{"use strict";Object.defineProperty(SD,"__esModule",{value:!0});var cQ=fn(),gqe=Dn(),yqe=Oo(),xqe=bD(),_qe={message:({params:{len:e}})=>(0,cQ.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,cQ._)`{limit: ${e}}`},bqe={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:_qe,code(e){let{schema:n,parentSchema:t,it:r}=e,{prefixItems:o}=t;r.items=!0,!(0,gqe.alwaysValidSchema)(r,n)&&(o?(0,xqe.validateAdditionalItems)(e,o):e.ok((0,yqe.validateArray)(e)))}};SD.default=bqe});var pQ=ee(kD=>{"use strict";Object.defineProperty(kD,"__esModule",{value:!0});var jo=fn(),Nb=Dn(),wqe={message:({params:{min:e,max:n}})=>n===void 0?(0,jo.str)`must contain at least ${e} valid item(s)`:(0,jo.str)`must contain at least ${e} and no more than ${n} valid item(s)`,params:({params:{min:e,max:n}})=>n===void 0?(0,jo._)`{minContains: ${e}}`:(0,jo._)`{minContains: ${e}, maxContains: ${n}}`},vqe={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:wqe,code(e){let{gen:n,schema:t,parentSchema:r,data:o,it:i}=e,s,a,{minContains:d,maxContains:u}=r;i.opts.next?(s=d===void 0?1:d,a=u):s=1;let c=n.const("len",(0,jo._)`${o}.length`);if(e.setParams({min:s,max:a}),a===void 0&&s===0){(0,Nb.checkStrictMode)(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&s>a){(0,Nb.checkStrictMode)(i,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,Nb.alwaysValidSchema)(i,t)){let y=(0,jo._)`${c} >= ${s}`;a!==void 0&&(y=(0,jo._)`${y} && ${c} <= ${a}`),e.pass(y);return}i.items=!0;let l=n.name("valid");a===void 0&&s===1?m(l,()=>n.if(l,()=>n.break())):s===0?(n.let(l,!0),a!==void 0&&n.if((0,jo._)`${o}.length > 0`,p)):(n.let(l,!1),p()),e.result(l,()=>e.reset());function p(){let y=n.name("_valid"),x=n.let("count",0);m(y,()=>n.if(y,()=>f(x)))}function m(y,x){n.forRange("i",0,c,b=>{e.subschema({keyword:"contains",dataProp:b,dataPropType:Nb.Type.Num,compositeRule:!0},y),x()})}function f(y){n.code((0,jo._)`${y}++`),a===void 0?n.if((0,jo._)`${y} >= ${s}`,()=>n.assign(l,!0).break()):(n.if((0,jo._)`${y} > ${a}`,()=>n.assign(l,!1).break()),s===1?n.assign(l,!0):n.if((0,jo._)`${y} >= ${s}`,()=>n.assign(l,!0)))}}};kD.default=vqe});var hQ=ee(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.validateSchemaDeps=Qi.validatePropertyDeps=Qi.error=void 0;var CD=fn(),Sqe=Dn(),Eh=Oo();Qi.error={message:({params:{property:e,depsCount:n,deps:t}})=>{let r=n===1?"property":"properties";return(0,CD.str)`must have ${r} ${t} when property ${e} is present`},params:({params:{property:e,depsCount:n,deps:t,missingProperty:r}})=>(0,CD._)`{property: ${e},
|
|
@@ -1874,7 +1877,7 @@ parentPort.ref();
|
|
|
1874
1877
|
`),n.stdout.write(`runner_id: ${Rn(o,"runner_id")}
|
|
1875
1878
|
`)}async function KDe(e,n){let t=Bd(e.tokenFile,n.readTextFile),r=await Bi(e.apiUrl,`/agent/threads/${encodeURIComponent(e.threadId)}/editor/open`,{runner_id:e.runnerId,cwd:e.cwd},t.agentToken,n.fetchImpl);n.stdout.write(`editor_status: ${Rn(r,"status")}
|
|
1876
1879
|
`),n.stdout.write(`editor_url: ${Rn(r,"editor_url")}
|
|
1877
|
-
`)}async function oV(e,n,t,r,o,i){let s=Bd(n,i.readTextFile);return await Bi(e,`/agent/threads/${encodeURIComponent(t)}/messages`,{body:r,kind:o},s.agentToken,i.fetchImpl)}async function VDe(e,n){let t=Bd(e.tokenFile,n.readTextFile),r=e.sinceLast?t.cursors[e.threadId]:void 0,o=new URL(`/agent/threads/${encodeURIComponent(e.threadId)}/messages`,aV(e.apiUrl));r!==void 0&&o.searchParams.set("since",r);let i=await iV(o,{method:"GET",headers:dV(t.agentToken)},n.fetchImpl),s=
|
|
1880
|
+
`)}async function oV(e,n,t,r,o,i){let s=Bd(n,i.readTextFile);return await Bi(e,`/agent/threads/${encodeURIComponent(t)}/messages`,{body:r,kind:o},s.agentToken,i.fetchImpl)}async function VDe(e,n){let t=Bd(e.tokenFile,n.readTextFile),r=e.sinceLast?t.cursors[e.threadId]:void 0,o=new URL(`/agent/threads/${encodeURIComponent(e.threadId)}/messages`,aV(e.apiUrl));r!==void 0&&o.searchParams.set("since",r);let i=await iV(o,{method:"GET",headers:dV(t.agentToken)},n.fetchImpl),s=qe(i.messages)??[],a=h(i.cursor);s.forEach(d=>{let u=A(d),c=A(u?.author),l=h(c?.display_name)??h(c?.kind)??"unknown",p=h(u?.body)??"";n.stdout.write(`[${l}] ${p}
|
|
1878
1881
|
`)}),a!==void 0&&cV(e.tokenFile,{...t,cursors:{...t.cursors,[e.threadId]:a}},n.writeTextFile)}async function Bi(e,n,t,r,o){let i=new URL(n,aV(e)),s=r===void 0?{"content-type":"application/json"}:{...dV(r),"content-type":"application/json"};return await iV(i,{method:"POST",headers:s,body:JSON.stringify(t)},o)}async function iV(e,n,t){let r=await t(e,n),o=await r.text(),i=sV(o);if(!r.ok){let s=A(i.error),a=h(s?.code)??`http_${r.status}`,d=h(s?.message)??r.statusText;throw new Error(`${a}: ${d}`)}return i}function sV(e){try{let n=JSON.parse(e);if(Z(n))return n}catch{throw new Error("expected JSON object response")}throw new Error("expected JSON object response")}function Nt(e,n){let t=e.get(n);if(t===void 0||t.trim()==="")throw new Error(`missing --${n}`);return t.trim()}function Io(e,n){let t=e.get(n);return t===void 0||t.trim()===""?void 0:t.trim()}function WDe(e){let n=Io(e,"workspace-name");if(n!==void 0){if(n.length<2||n.length>100)throw new Error("--workspace-name must be 2-100 characters");return n}}function si(e,n,t){t!==void 0&&(e[n]=t)}function Rn(e,n){let t=h(e[n]);if(t===void 0)throw new Error(`missing ${n} in response`);return t}function f0(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Po(e){return e.get("api-url")??Jt}function Cs(e){return e.get("agent-token-file")??SR()}function SR(){return DDe(MDe(),".linzumi","agent-token.json")}function aV(e){return e.endsWith("/")?e:`${e}/`}function dV(e){return{authorization:`Bearer ${e}`}}function uV(e){return TDe(e)?IDe(e,"utf8"):void 0}function HDe(e,n){PDe(EDe(e),{recursive:!0}),RDe(e,n)}function kR(e,n=uV){let t=n(e);if(t===void 0)throw new Error(`missing agent token file: ${e}`);let r=sV(t),o=A(r.cursors),i=o===void 0?{}:Object.fromEntries(Object.entries(o).flatMap(([s,a])=>{let d=h(a);return d===void 0?[]:[[s,d]]}));return{apiUrl:Rn(r,"apiUrl"),agentToken:Rn(r,"agentToken"),commanderToken:Rn(r,"commanderToken"),commanderTokenExpiresInSeconds:f0(r.commanderTokenExpiresInSeconds),agentId:Rn(r,"agentId"),workspaceId:Rn(r,"workspaceId"),workspaceName:h(r.workspaceName),channelId:h(r.channelId),ownerUsername:h(r.ownerUsername),channelUrl:h(r.channelUrl),loginUrl:Rn(r,"loginUrl"),supportChannelId:Rn(r,"supportChannelId"),supportChannelUrl:h(r.supportChannelUrl),savedAt:Rn(r,"savedAt"),cursors:i}}function Bd(e,n){return kR(e,n)}function cV(e,n,t){t(e,`${JSON.stringify(n,null,2)}
|
|
1879
1882
|
`)}function lV(e){e.stdout.write(`This is a one-time human login link. Do not open it from automation.
|
|
1880
1883
|
`),e.stdout.write(`Give it directly to the human who will use the workspace.
|
|
@@ -2033,7 +2036,7 @@ Tools:
|
|
|
2033
2036
|
Auth:
|
|
2034
2037
|
Uses --token, LINZUMI_MCP_ACCESS_TOKEN, or cached local runner OAuth from linzumi auth.
|
|
2035
2038
|
Hosted personal agents use --delegation-auth-file with a signed delegation grant.
|
|
2036
|
-
`}async function a4e(e){let n=rM(e);if(n.get("help")===!0){process.stdout.write(TX());return}let t=iM(n,"api-url"),r=await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")}),o=Fn(n,"owner-username")??process.env.LINZUMI_MCP_OWNER_USERNAME,i=oM(Fn(n,"mode")),s=PX(Fn(n,"tool-scope")),a=Fn(n,"cwd")??process.cwd(),d=Fn(n,"thread-id")??process.env.LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID,u=vs({kandanUrl:t,accessToken:r.accessToken,authMode:r.mode,operatingMode:i}),c=new ew({name:"linzumi",version:"0.1.0"});g4e(c),u4e(c,{client:u,toolScope:s,operatingMode:i,cwd:a,kandanUrl:t,defaultThreadId:d,ownerUsername:o,agentSession:n.get("agent-session")===!0,devServices:d4e(process.env)}),await c.connect(new tw)}function d4e(e){let n=e.LINZUMI_DEV_SERVICES_SCOPE?.trim(),t=Number.parseInt(e.LINZUMI_DEV_SERVICES_OWNER_PID??"",10);if(!(n===void 0||n===""||!Number.isInteger(t)||t<=0))return{scopeDir:ud(n),ownerPid:t}}function u4e(e,n){let{client:t,toolScope:r,operatingMode:o,cwd:i,kandanUrl:s,defaultThreadId:a,ownerUsername:d,agentSession:u,devServices:c}=n,l=r==="all"||r==="coding";u&&(e.tool("linzumi_agent_reply","Post your single @linzumi reply for the current turn into the surface where you were mentioned. Call EXACTLY ONCE per turn with your final answer; the reply links to this working session automatically. Fails with already_replied on a second call and no_active_asker_binding when no turn is active.",{body:D.string().min(1).describe("Plain-text reply body to post.")},async p=>Pe(await t.agentReply({body:p.body}))),e.tool("linzumi_list_coding_jobs","List the coding jobs the current asker can see in this workspace: runner connections (online and recent) with their bound job threads. Live state - never answered from search.",{},async()=>Pe(await t.agentListCodingJobs({}))),e.tool("linzumi_start_coding_job","Start a coding job exactly as if the asking user clicked start: same runner/channel authorization, same pipeline. Returns status 'unavailable' with a reason when the runner cannot take the job (relay that honestly).",{channel:D.string().describe("Channel slug to host the job thread."),runner_key:D.string().describe("Runner (computer) to run the job on."),cwd:D.string().describe("Working directory on the runner."),work_description:D.string().min(1).describe("What the job should do - the initial instruction."),model:D.string().optional().describe("Model override (optional)."),model_provider:D.string().optional().describe("Model provider override, e.g. 'wafer' (optional)."),execution_mode:D.enum(["raw","local_vm"]).optional().describe("Execution placement override (optional)."),project_task_id:D.string().optional().describe("Project task item to bind the job to (task_id from linzumi_get_project_tasks). The task flips todo -> active and links to the new job.")},async p=>Pe(await t.agentStartCodingJob(p))),e.tool("linzumi_interrupt_coding_job","Interrupt a coding job: mode 'steer' (default) discards its queued follow-ups so your next message lands first; mode 'stop' terminates the current turn.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),mode:D.enum(["steer","stop"]).optional().describe("Interrupt mode; defaults to 'steer'.")},async p=>Pe(await t.agentInterruptCodingJob(p))),e.tool("linzumi_send_coding_job_message","Send a message into a coding job thread as the asking user (the job processes it like any human follow-up).",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),body:D.string().min(1).describe("Message body to send.")},async p=>Pe(await t.agentSendCodingJobMessage(p))),e.tool("linzumi_read_coding_job_thread","Read a coding job's thread (asker-visible history) plus its workflow status metadata.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),limit:D.number().int().min(1).max(100).optional().describe("Maximum replies to return."),before_seq:D.number().int().positive().optional().describe("Return replies before this channel seq.")},async p=>Pe(await t.agentReadCodingJobThread(p))),e.tool("linzumi_resolve_job_approval","Resolve a coding job's pending approval request with the asking user's decision ('approve' or 'deny'). Only relays the asker's authority - never approve without their explicit instruction.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),source_seq:D.number().int().positive().describe("Channel seq of the message the approval request rides on."),request_id:D.string().describe("The approval request id."),decision:D.enum(["approve","deny"]).describe("The asker's decision.")},async p=>Pe(await t.agentResolveJobApproval(p))),e.tool("linzumi_archive_coding_job","Archive a coding job's thread (or any thread the asking user owns) so it leaves the active list; history is preserved. Do this when the asker says to archive a job or thread - never just promise it.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID to archive.")},async p=>Pe(await t.agentArchiveCodingJob(p))),e.tool("linzumi_unarchive_coding_job","Unarchive a previously archived coding job thread the asking user owns, returning it to the active list.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID to unarchive.")},async p=>Pe(await t.agentUnarchiveCodingJob(p))),e.tool("linzumi_set_thread_status","Set a thread's lifecycle status as the asking user: 'closed' marks it done, 'open' reopens it. Works on threads the asker owns.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID."),status:D.enum(["open","closed"]).describe("Replacement lifecycle status ('closed' = done).")},async p=>Pe(await t.agentSetThreadStatus(p))),e.tool("linzumi_create_channel","Create a new public channel in this workspace as the asking user. The slug is derived from the name.",{name:D.string().min(1).describe("Channel name to create.")},async p=>Pe(await t.agentCreateChannel(p))),e.tool("linzumi_rename_channel","Rename a channel's display name as the asking user. The channel's URL slug stays stable.",{channel:D.string().describe("Current channel slug to rename."),name:D.string().min(1).describe("New display name.")},async p=>Pe(await t.agentRenameChannel(p))),e.tool("linzumi_archive_channel","Archive a channel in this workspace as the asking user. History is preserved; the channel leaves the active sidebar.",{channel:D.string().describe("Channel slug to archive.")},async p=>Pe(await t.agentArchiveChannel(p))),e.tool("linzumi_unarchive_channel","Unarchive a previously archived channel as the asking user.",{channel:D.string().describe("Channel slug to unarchive.")},async p=>Pe(await t.agentUnarchiveChannel(p))),e.tool("linzumi_add_reaction","Add an emoji reaction to a channel message as the asking user. Accepts unicode emoji or a workspace :shortcode:.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the message to react to."),emoji:D.string().min(1).describe("Emoji to add (unicode or :shortcode:).")},async p=>Pe(await t.agentAddReaction(p))),e.tool("linzumi_remove_reaction","Remove the asking user's emoji reaction from a channel message.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the reacted message."),emoji:D.string().min(1).describe("Emoji to remove (unicode or :shortcode:).")},async p=>Pe(await t.agentRemoveReaction(p))),e.tool("linzumi_pin_message","Pin a channel message as the asking user. Thread replies re-point to their root message.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the message to pin.")},async p=>Pe(await t.agentPinMessage(p))),e.tool("linzumi_unpin_message","Remove a pin from a channel message as the asking user.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the pinned message.")},async p=>Pe(await t.agentUnpinMessage(p)))),r==="all"&&(e.tool("linzumi_get_message","Read one Linzumi message by scoped message_seq/message_id or a Linzumi message URL, with optional bounded before/after context.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),message_id:D.union([D.string(),D.number()]).optional().describe("Message seq inside the scoped channel."),message_seq:D.union([D.string(),D.number()]).optional().describe("Alias for message_id."),message_url:D.string().optional().describe("Full Linzumi message URL with #message-<seq>."),before:D.number().int().min(0).max(100).optional().describe("Number of visible messages before the target."),after:D.number().int().min(0).max(100).optional().describe("Number of visible messages after the target.")},async p=>Pe(await t.getMessage(p))),e.tool("linzumi_get_thread","Read one Linzumi thread by thread_id in the scoped channel, including the parent message and bounded replies.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Linzumi thread UUID."),limit:D.number().int().min(1).max(100).optional().describe("Maximum replies to return."),before_seq:D.number().int().positive().optional().describe("Return replies before this channel seq.")},async p=>Pe(await t.getThread(p))),e.tool("linzumi_get_thread_transcript","Read a Linzumi thread's full transcript as canonical IR nodes (user/assistant messages, command executions, file changes, tool calls, statuses), cursor-paginated over the complete history. Use the returned cursor with has_more to walk older pages.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Linzumi thread UUID."),limit:D.number().int().min(1).max(500).optional().describe("Maximum transcript nodes per page (default 200)."),cursor:D.number().int().positive().optional().describe("Return nodes below this seq (the previous page reply cursor).")},async p=>Pe(await t.getThreadTranscript(p))),e.tool("linzumi_get_channel","Read scoped Linzumi channel metadata and bounded recent channel messages.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),limit:D.number().int().min(1).max(100).optional().describe("Maximum messages to return."),before_seq:D.number().int().positive().optional().describe("Return messages before this channel seq.")},async p=>Pe(await t.getChannel(p))),e.tool("linzumi_search_workspace","Search the Linzumi workspace with hybrid lexical+semantic retrieval, scoped to what the authorizing user can access. Returns scored content chunks with provenance (channel, thread, authored time) and a permalink to cite.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),query:D.string().min(1).describe("Natural-language or keyword query to retrieve against."),limit:D.number().int().min(1).max(25).optional().describe("Maximum results to return (default 10, server-capped)."),source_types:D.array(D.enum(["message","coding_job","github_pr","github_pr_review","github_check_run","github_workflow_run","github_diff","dictation","file"])).optional().describe("Restrict results to these corpora; omit for all."),authored_after:D.string().optional().describe("ISO8601 instant; only content authored at or after this time."),authored_before:D.string().optional().describe("ISO8601 instant; only content authored at or before this time."),repo:D.string().optional().describe("Restrict GitHub-sourced results to one repository by full name (owner/name)."),check_status:D.enum(["pending","success","failed"]).optional().describe("Restrict check and workflow results to one conclusion bucket.")},async p=>Pe(await t.searchWorkspace(p))),e.tool("linzumi_ask_workspace",'Ask the Linzumi workspace a natural-language question and get a synthesized, citation-backed answer over what the authorizing user can access. Costs an LLM call on cache misses, so prefer linzumi_search_workspace for simple lookups. A "refused" status means there was not enough accessible evidence - treat it as "the workspace does not know", never retry verbatim.',{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),question:D.string().min(1).max(2e3).describe("Natural-language question to answer with citations."),channel:D.string().optional().describe("Optional channel slug providing conversational context; never widens access."),allow_cached:D.boolean().optional().describe("Allow serving a cached synthesis when the evidence set is unchanged (default true). Set false to force fresh synthesis.")},async p=>Pe(await t.askWorkspace(p))),e.tool("linzumi_about_me","Read what the authorizing user has told Linzumi about themselves: their profile facts (homes, unit preferences, and other self-maintained attributes) plus their derived current timezone. Use it to personalize answers (e.g. pick the right city for weather, use their preferred units). Predicates may have multiple active values; prefer the one consistent with the derived timezone.",{},async p=>Pe(await t.aboutMe(p)))),l&&(e.tool("linzumi_web_search","Search the public web for live or external information: news, current events, weather, prices, third-party API docs, research. Returns result titles, URLs, and snippets. Use this whenever the answer lives outside the Linzumi workspace; follow up with linzumi_fetch_url to read a result page.",{query:D.string().min(1).describe("Web search query (natural language or keywords)."),limit:D.number().int().min(1).max(10).optional().describe("Maximum results to return (default 8, server-capped).")},async p=>Pe(await t.webSearch(p))),e.tool("linzumi_fetch_url","Fetch one public http(s) URL and return its readable text content (HTML is reduced to plain text; large pages are truncated). Use it to read pages found via linzumi_web_search or any public docs/API reference. Only public addresses are reachable - private/internal hosts are rejected with url_not_allowed.",{url:D.string().min(1).describe("Absolute public http(s) URL to fetch.")},async p=>Pe(await t.fetchUrl(p)))),r==="all"&&(e.tool("linzumi_list_ui_targets","List every UI surface you can ask the user to open in their own Linzumi window (channels, DMs, threads, projects, coding jobs, computers, catch-up, activity, settings tabs, pane layouts) with the structured args each kind takes. Use UI control only when the user asks for help or asks to be shown something.",{},async()=>await SX(t.listUiTargets({}))),e.tool("linzumi_open_ui","Ask the user to open one whitelisted UI surface in their own already-open Linzumi window. A consent toast appears in THEIR session; navigation happens only if they tap Open. The call blocks until they decide and returns status opened/dismissed/expired - or error no_active_ui_session when they have no Linzumi window open (tell them to open Linzumi), or invalid_target with a detail. Use it only when the user asks for help or asks to be shown something; kinds and per-kind args come from linzumi_list_ui_targets.",{kind:D.string().min(1).describe("Target kind from linzumi_list_ui_targets (e.g. settings_workspace, channel, pane_layout)."),args:D.record(D.unknown()).optional().describe("Structured per-kind args from linzumi_list_ui_targets (never a URL - the server computes every path)."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>await SX(t.openUi(es(p,a))))),l&&(e.tool("linzumi_get_coding_job_metadata","Read the active coding job workflow metadata for a thread, including the agent-owned goal, ordered plan steps, step lock versions, and workflow status.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread.")},async p=>Pe(await t.getCodingJobMetadata(es(p,a)))),e.tool("linzumi_rename_coding_job","Update the current coding job thread title and workflow-facing title. Use this when the job scope changes materially so the Linzumi thread list and metadata overview stay accurate.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),title:D.string().min(1).max(100).describe("Concise user-visible title for this coding job.")},async p=>Pe(await t.renameCodingJob(es(p,a)))),e.tool("linzumi_upsert_coding_job_plan","Set or update the current coding job goal. Use this at job start and whenever the goal changes materially.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),goal:D.string().min(1).max(1e4).describe("Concrete user-visible goal for this coding job.")},async p=>Pe(await t.upsertCodingJobPlan(es(p,a)))),e.tool("linzumi_replace_coding_job_plan_steps","Replace the ordered coding job plan steps. Use this for the initial plan and for substantial rewrites when the old plan no longer fits the work.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),goal:D.string().min(1).max(1e4).optional().describe("Required when no plan exists yet; updates the current coding job goal."),steps:D.array(D.object({title:D.string().min(1).max(255),description:D.string().min(1).max(1e4),status:D.enum(["pending","active","completed","blocked","canceled"]),status_note:D.string().min(1).max(4e3).optional(),completed_debrief:D.string().min(1).max(2e4).optional()})).min(1).max(50).describe("Ordered user-visible plan steps. Completed steps must include completed_debrief.")},async p=>Pe(await t.replaceCodingJobPlanSteps(es(p,a)))),e.tool("linzumi_update_coding_job_plan_step","Update one coding job plan step status or note. Read metadata first and pass the current step lock_version.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),step_id:D.string().uuid().describe("Step id returned by linzumi_get_coding_job_metadata."),lock_version:D.number().int().positive().describe("Current step lock_version from metadata."),status:D.enum(["pending","active","completed","blocked","canceled"]),status_note:D.string().min(1).max(4e3).optional(),completed_debrief:D.string().min(1).max(2e4).optional().describe("Required when marking a step completed.")},async p=>Pe(await t.updateCodingJobPlanStep(es(p,a)))),e.tool("linzumi_link_coding_job_pull_request","Link the active coding job to its primary GitHub pull request so PR comments, files, commits, checks, deployments, and reviews can flow into the metadata view.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),github_repo_owner:D.string().min(1).max(255),github_repo_name:D.string().min(1).max(255),github_pr_number:D.number().int().positive(),github_pr_url:D.string().url(),title:D.string().min(1).max(255),body:D.string().min(1).max(1e5).optional(),head_branch:D.string().min(1).max(255),head_sha:D.string().min(7).max(64),base_branch:D.string().min(1).max(255),base_sha:D.string().min(7).max(64),state:D.enum(["draft","open","closed","merged"]).optional(),is_draft:D.boolean().optional(),review_status:D.enum(["unknown","review_required","approved","changes_requested"]).optional(),source_remote_url:D.string().min(1).max(1e3).describe("Git remote URL for the local job worktree; required when this job has no repo workspace yet."),runtime_worktree_root:D.string().min(1).max(1e3).describe("Absolute local worktree path for the coding job; required when this job has no repo workspace yet."),dirty_status:D.enum(["unknown","clean","dirty"]).optional(),dirty_summary:D.string().min(1).max(2e3).optional()},async p=>Pe(await t.linkCodingJobPullRequest(es(p,a)))),e.tool("linzumi_upload_files",["Upload local files to Linzumi and attach them to a new, exact, or latest assistant message. Use silently; do not mention this tool in the visible reply.","The JSON result includes message.attachments[].url as an absolute URL. Use those returned URLs when writing rich media directives such as ::audio, ::video, ::image, or Markdown images. Do not guess attachment URLs before upload.","For a message that should both attach files and show inline rich media, use a two-step flow: first upload/attach the files to create or target the message, then edit the same target message with body text that references the returned absolute URLs. When the result has target_seq, use target.kind=message_seq and message_seq=target_seq for that follow-up edit; result.message is the edit event that carries the new attachments, and target_message is the original target."].join(" "),{target:D.object({kind:D.enum(["new_message","message_seq","latest_assistant_message"]).describe("new_message creates a message; message_seq edits an exact message; latest_assistant_message edits the latest assistant message in the scoped thread/channel."),message_seq:D.union([D.string(),D.number()]).optional().describe("Required when kind is message_seq."),thread_id:D.string().optional().describe("Thread UUID. Defaults to the active Linzumi thread when the MCP server was launched with one.")}).describe("Attachment target. Do not guess; use new_message when there is no previous assistant message. To reference uploaded files in the message body, upload first, then edit message_seq/latest_assistant_message with the returned absolute attachment URLs. If the upload result includes target_seq, use message_seq=target_seq for that follow-up edit."),files:D.array(D.string().min(1)).min(1).max(16).describe("Local file paths to upload. Paths must be non-hidden supported file types inside the approved workspace or Downloads."),body:D.string().min(1).max(2e4).optional().describe("Required for new_message. Optional replacement body for message_seq/latest_assistant_message; when omitted, the existing message body is preserved. Rich media directives in body must use Linzumi attachment download URLs returned by this tool."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the target thread's channel (when the thread is known) or the authenticated token scope.")},async p=>{let m=bX(p.target,a);try{let f=await p4e({client:t,cwd:i,kandanUrl:s,target:m,files:p.files,workspace:p.workspace,channel:p.channel,body:p.body});return Pe(wX(s,f))}catch(f){throw l4e(f)}}),e.tool("linzumi_edit_message","Edit an exact scoped Linzumi message by message_seq. Use after linzumi_upload_files when you need a body-only follow-up edit that embeds returned attachment URLs. Requires channel.write, and thread.write when target.thread_id is set. Rich media src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),target:D.object({message_seq:D.union([D.string(),D.number()]).describe("Exact message seq to edit. After linzumi_upload_files returns target_seq, pass that value here."),thread_id:D.string().optional().describe("Thread UUID when editing a thread message. Use the upload result target_message.thread_id when present.")}).describe("Exact message target for the body edit."),body:D.string().min(1).max(2e4).describe("Replacement Markdown body. Rich media src/poster values must be Linzumi attachment download URLs returned by linzumi_upload_files.")},async p=>Pe(wX(s,await t.editMessage({...p,target:bX(p.target,a)}))))),r==="all"&&(e.tool("linzumi_list_vault_secrets","List vault secret names, descriptions, and whether each secret is personal or workspace-owned. Does not return secret values.",{},async p=>Pe(await t.listVaultSecrets(p))),e.tool("linzumi_list_projects","List the projects in the current workspace with their project_id (needed by the other project task tools), slug, title, description, and state.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await t.listProjects(p))),e.tool("linzumi_get_project_tasks",`Read a project's full task graph: task GROUPS (kind "group", organizational containers, exactly one level deep) and ISSUES (kind "issue", the executable work items), each with status (todo/active/blocked/review/done/canceled), DERIVED work_state readiness (ready = todo with every dependency satisfied; blocked = todo with unsatisfied dependencies; running/stalled = active with/without a connected job), parent group, assignee, lock_version, and dependency edges (depends_on_task_ids / unblocks_task_ids). Always read this before reorganizing. Inside a project-bound coding job the project is inferred automatically; otherwise pass project_id from linzumi_list_projects.`,{project_id:D.string().optional().describe("Project id from linzumi_list_projects. Omit inside a coding job started from a project to use that project.")},async p=>Pe(await t.getProjectTasks(es(p,a)))),e.tool("linzumi_create_project_task",'Create a task group (kind "group") or issue (kind "issue", the default) in a project. Groups organize issues and are exactly one level deep: a parent_id must name a GROUP, and groups themselves can never have a parent. New tasks default to status "todo" and append to the end unless position is given. Inside a project-bound coding job the project is inferred; otherwise pass project_id.',{project_id:D.string().optional().describe("Project id from linzumi_list_projects. Omit inside a coding job started from a project to use that project."),title:D.string().min(1).describe("Task title."),kind:D.enum(["issue","group"]).optional().describe('What to create: "issue" (executable work item, default) or "group" (organizational container).'),description:D.string().optional().describe("Detailed description of the work - written so an engineer (or coding agent) could execute the task from it."),status:D.enum(["todo","active","blocked","review","done","canceled"]).optional().describe('Initial status. Defaults to "todo".'),parent_id:D.string().optional().describe("task_id of the GROUP to place an issue in. Only issues can have a parent."),assignee:D.string().optional().describe("Username of a workspace member to assign."),position:D.number().int().min(0).optional().describe("Sort position. Defaults to appending at the end.")},async p=>Pe(await t.createProjectTask(es(p,a)))),e.tool("linzumi_update_project_task",'Update a task group or issue: retitle, edit description/status_note, transition status (todo/active/blocked/review/done/canceled), reassign, reorder (position), or reorganize (parent_id moves an issue into a group; clear_parent moves it to top level). Only the fields you pass change; description and status_note accept null to clear. Prefer updating existing tasks over delete-and-recreate. Pass the lock_version from your last read to fail loudly ("stale") instead of overwriting a concurrent edit.',{task_id:D.string().describe("task_id of the group or issue to update."),title:D.string().min(1).optional().describe("New title."),description:D.string().nullable().optional().describe("New description. Pass null to clear it."),status:D.enum(["todo","active","blocked","review","done","canceled"]).optional().describe('New status. "done"/"canceled" satisfy dependent tasks; "blocked" is a manual hold.'),status_note:D.string().nullable().optional().describe("Short human-readable note about the current status. Pass null to clear it."),position:D.number().int().min(0).optional().describe("New sort position among siblings."),parent_id:D.string().optional().describe("task_id of the GROUP to move this issue into. Do not combine with clear_parent."),clear_parent:D.boolean().optional().describe("true moves the issue to the top level (no group). Do not combine with parent_id."),assignee:D.string().optional().describe("Username of a workspace member to assign. Do not combine with clear_assignee."),clear_assignee:D.boolean().optional().describe("true removes the assignee. Do not combine with assignee."),lock_version:D.number().int().positive().optional().describe("The task's lock_version from your last read, for compare-and-swap safety.")},async p=>Pe(await t.updateProjectTask(p))),e.tool("linzumi_delete_project_task",`Permanently delete a task group or issue. Dependency edges on the task are removed with it (dependents may become ready). Deletion is normally the USER's call - prefer status "canceled" or an update unless you are certain the entry is obsolete.`,{task_id:D.string().describe("task_id of the group or issue to delete.")},async p=>Pe(await t.deleteProjectTask(p))),e.tool("linzumi_add_project_task_dependency",'Add the dependency edge "task_id is blocked by depends_on_task_id" between two ISSUES in the same project (groups cannot have dependencies). The dependent stays blocked until the prerequisite reaches done or canceled. The graph must stay acyclic: an edge that would create a cycle is refused with reason "would_create_cycle" and the offending cycle_path so you can restructure. Duplicate and self edges are rejected.',{task_id:D.string().describe("task_id of the DEPENDENT issue (the one that must wait)."),depends_on_task_id:D.string().describe("task_id of the PREREQUISITE issue (the one that must finish first).")},async p=>Pe(await t.addProjectTaskDependency(p))),e.tool("linzumi_remove_project_task_dependency",'Remove the dependency edge "task_id is blocked by depends_on_task_id". The dependent issue may become ready if that was its last unsatisfied dependency.',{task_id:D.string().describe("task_id of the DEPENDENT issue."),depends_on_task_id:D.string().describe("task_id of the PREREQUISITE issue the edge points at.")},async p=>Pe(await t.removeProjectTaskDependency(p))),e.tool("linzumi_get_call_transcript","Read the full transcript of a completed Linzumi notetaker call: call metadata (title, platform, started/ended/transcribed times), participants, and every spoken segment in order with speaker names and millisecond offsets. Pass the call_id embedded in the request (or copied from the call card). Errors: call_not_found (missing or not visible to you), call_transcript_not_ready (call still connecting, in progress, or transcribing - retry later).",{call_id:D.string().describe("The call id from the call card or the launching message (a CallRecording id - the opaque GraphQL id and the bare uuid both work).")},async p=>Pe(await t.getCallTranscript(p))),u||e.tool("linzumi_start_coding_job","Start a coding job as the invoking user (same authorization and pipeline as clicking start). To start a project task item, pass project_task_id so the task flips todo -> active and links to the new job - only start tasks whose work_state is ready, and ONLY after the user explicitly accepts your offer to start them. Omit channel, runner_key, and cwd to reuse this job's own channel, computer, and folder. Returns status 'unavailable' with a reason when the runner cannot take the job (relay that honestly).",{work_description:D.string().min(1).describe("What the job should do - the initial instruction. For a task item, write it from the task title and description."),project_task_id:D.string().optional().describe("Project task item to bind the job to (task_id from linzumi_get_project_tasks). The task flips todo -> active and links to the new job."),channel:D.string().optional().describe("Channel slug to host the job thread. Omit to use this job's own channel."),runner_key:D.string().optional().describe("Runner (computer) to run the job on. Omit to use this job's own computer."),cwd:D.string().optional().describe("Working directory on the runner. Omit to use this job's own folder."),model:D.string().optional().describe("Model override (optional)."),model_provider:D.string().optional().describe("Model provider override, e.g. 'wafer' (optional)."),execution_mode:D.enum(["raw","local_vm"]).optional().describe("Execution placement override (optional).")},async p=>Pe(await t.agentStartCodingJob(es(p,a))))),r4e(r)&&(e.tool("linzumi_upload_custom_emoji","Upload a local image as a workspace custom emoji. For generated emoji art, create a transparent PNG with a simple centered subject, crisp edges, strong contrast, minimal tiny details, and enough outline/highlight separation to read at 16-24px on both dark and light backgrounds. Use lowercase shortcode names without colons unless preserving a user-provided :name:.",{name:xX.describe("Custom emoji shortcode name, with or without surrounding colons."),file:D.string().min(1).describe("Local PNG/WebP/GIF/JPEG file path to upload. Prefer transparent PNG for generated emoji."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await f4e({client:t,cwd:i,kandanUrl:s,name:p.name,file:p.file,workspace:p.workspace}))),e.tool("linzumi_rename_custom_emoji","Rename an existing workspace custom emoji. The new name may include surrounding colons; Linzumi stores the normalized shortcode without colons.",{emoji_id:D.union([D.string(),D.number().int().positive()]).describe("Workspace custom emoji id returned by linzumi_upload_custom_emoji or workspace emoji listings."),name:xX.describe("New shortcode name, with or without surrounding colons."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await t.renameCustomEmoji(p)))),e.tool("linzumi_media_guide","Return the full Linzumi rich-media authoring guide (audio/video/image directives, URL rules, upload-then-embed flow, examples). Call once BEFORE writing any ::audio/::video/::image directive or Markdown image into a Linzumi message.",{},async()=>({content:[{type:"text",text:Bg}]})),e.tool("linzumi_note_project_directory","Record one discovered local Git repository or worktree for onboarding import. Call once per project as soon as it is found.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),path:D.string().min(1).describe("Absolute local path to the repository worktree root."),display_name:D.string().optional().describe("Short project label. Defaults to the path basename."),activity_at:D.string().optional().describe("Best-known recent activity time as an ISO-8601 timestamp."),import_key:D.string().optional().describe("Stable dedupe key. Defaults to path."),metadata:D.record(D.unknown()).optional().describe("Small structured metadata such as branch or remote origin.")},async p=>Pe(await t.noteProjectDirectory(p))),e.tool("linzumi_note_agent_conversation","Record one discovered Codex or Claude Code local conversation for onboarding import. Call once per conversation as soon as it is found.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),source:D.enum(["codex","claude_code"]).describe("Conversation source."),import_key:D.string().min(1).describe("Stable dedupe key, such as a session id or file path."),path:D.string().optional().describe("Absolute local path to the conversation file or directory."),display_name:D.string().optional().describe("Short label for the discovered conversation."),activity_at:D.string().optional().describe("Best-known recent activity time as an ISO-8601 timestamp."),metadata:D.record(D.unknown()).optional().describe("Small structured metadata such as session id or project path.")},async p=>Pe(await t.noteAgentConversation(p))),e.tool("linzumi_note_onboarding_discovery_status","Record onboarding discovery progress. Call when a search phase starts, checks another place, completes, or fails.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),phase:D.enum(["projects","conversations"]).describe("Discovery phase being reported."),status:D.enum(["starting","running","completed","failed"]).describe("Current phase status."),places_searched:D.number().int().nonnegative().optional().describe("Count of concrete folders/files/known locations checked so far."),message:D.string().optional().describe("Short user-facing status note."),current_place:D.string().optional().describe("Current folder, file, Git command target, or known location being checked."),current_source:D.string().optional().describe("Short machine-readable source label such as git, codex, or claude_code."),last_error:D.string().optional().describe("Short failure detail when status is failed."),metadata:D.record(D.unknown()).optional().describe("Small structured status metadata.")},async p=>Pe(await t.noteOnboardingDiscoveryStatus(p))),r==="all"&&o4e(o)&&(e.tool("linzumi_dm_owner","Send a plain-text DM to the configured Commander owner. Requires dm.write and a visible owner username.",{owner_username:D.string().optional().describe("Owner username. Defaults to LINZUMI_MCP_OWNER_USERNAME or --owner-username."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Source channel slug used to verify owner visibility."),body:D.string().min(1).max(2e4).describe("Plain-text message body to DM.")},async p=>{let m=p.owner_username??d;if(m===void 0)throw new Error("owner_username is required for linzumi_dm_owner");return Pe(await t.dmOwner({...p,owner_username:m}))}),e.tool("linzumi_send_channel_message","Post a NEW standalone Markdown message into the scoped Linzumi channel as the authenticated local-runner user. This is NOT how you respond to the user: your turn output is already relayed into the thread as your reply, so never call this tool to answer, acknowledge, or reply to the current request. Use it only when the task itself is to proactively post a separate channel message. Requires channel.write. Rich media directives may be used when the user has opted into markdown_media_embeds, but src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),body:D.string().min(1).max(2e4).describe("Markdown message body to post. Rich media src/poster values must be Linzumi attachment download URLs, not third-party URLs, /relative paths, or local filesystem paths.")},async p=>Pe(await t.sendChannelMessage(p))),e.tool("linzumi_send_thread_reply","Post a Markdown reply into some OTHER existing Linzumi thread as the authenticated local-runner user. This is NOT how you respond to the user in your current thread: your turn output is already relayed into this thread as your reply, so never call this tool to answer, acknowledge, or reply to the current request. Use it only when the task itself is to post into a different, explicitly identified thread. Requires thread.write. Rich media directives may be used when the user has opted into markdown_media_embeds, but src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Existing Linzumi thread UUID."),body:D.string().min(1).max(2e4).describe("Markdown reply body to post. Rich media src/poster values must be Linzumi attachment download URLs, not third-party URLs, /relative paths, or local filesystem paths.")},async p=>Pe(await t.sendThreadReply(p))),e.tool("linzumi_send_dm","Send a plain-text DM as the authenticated local-runner user to a visible user in the scoped workspace/channel. Requires dm.write.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Source channel slug used to verify target visibility."),username:D.string().describe("Visible Linzumi username to DM."),body:D.string().min(1).max(2e4).describe("Plain-text message body to DM.")},async p=>Pe(await t.sendDm(p)))),r==="all"&&e.tool("linzumi_get_vault_values","Request values for explicit vault env var names after a thread-scoped human approval. Requires vault.read; thread_id resolves the approval thread.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug used to disambiguate the approval thread when needed."),thread_id:D.string().uuid().describe("Existing Linzumi thread UUID for the inline approval."),env_var_names:D.array(D.string().regex(/^[A-Z][A-Z0-9_]{0,127}$/)).min(1).max(20).describe("Explicit vault env var names to request. This tool cannot list all vault keys."),description:D.string().min(1).max(500).describe("Human-readable reason shown in the approval request."),justification:D.string().min(10).max(1e3).describe("Agent justification shown to the approver.")},async p=>Pe(await t.getVaultValues(p))),r==="all"&&!u&&c!==void 0&&c4e(e,i,c)}function _X(e){return{name:e.record.name,command:e.record.command,cwd:e.record.cwd,ports:[...e.record.ports],restart_on_branch_change:e.record.restartOnBranchChange,desired_state:e.record.desiredState,liveness:e.liveness,port_health:e.portProbes.map(n=>({port:n.port,listening:n.listening})),started_at_ms:e.record.startedAtMs??null,last_exit:e.lastExit===void 0?null:{code:e.lastExit.code,signal:e.lastExit.signal,at_ms:e.lastExit.atMs},log_path:e.record.logPath}}function c4e(e,n,t){e.tool("linzumi_dev_service_start","Start a long-running local dev server (npm run dev, storybook, docker compose up, ...) as a MANAGED SERVICE owned by the Linzumi runner. Use this instead of running dev servers in your own shell: a managed service survives the end of your turn and branch switches, is auto-restarted if it crashes, and its declared ports are health-probed and surfaced in the product. Calling start for an existing name declaratively RESTARTS it (e.g. after a checkout). Declare EVERY port the app serves from (primary plus HMR/asset/bundle sibling ports).",{name:D.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/).describe("Stable service name (slug), e.g. 'web' or 'storybook'. Reusing a name restarts that service."),command:D.string().min(1).describe("Shell command that runs the server in the foreground (never daemonize/screen/nohup it yourself), e.g. 'npm run dev'. Runs via the user's login shell."),cwd:D.string().optional().describe("Working directory for the service. Defaults to the session cwd."),ports:D.array(D.number().int().min(1).max(65535)).max(16).default([]).describe("Every TCP port this service listens on (primary AND related ports such as the Vite/HMR bundle port). Used for health probes and product visibility."),restart_on_branch_change:D.boolean().optional().describe("Restart the service automatically when the git branch of its cwd changes (for servers that go stale across checkouts)."),wait_for_ports_ms:D.number().int().min(0).max(6e4).optional().describe("How long to wait for the declared ports to accept connections before returning (default 15000).")},async r=>{let o=await Ey({scopeDir:t.scopeDir,definition:{name:r.name,command:r.command,cwd:r.cwd??n,ports:r.ports,restartOnBranchChange:r.restart_on_branch_change===!0},ownerPid:t.ownerPid});if(!o.ok)return Pe({ok:!1,error:o.error});let i=Date.now()+(r.wait_for_ports_ms??15e3),s=o.record.ports.length===0;for(;!s&&Date.now()<i;)s=(await Promise.all(o.record.ports.map(c=>_k(c)))).every(c=>c),s||await new Promise(c=>setTimeout(c,250));let d=(await pf(t.scopeDir)).find(u=>u.record.name===o.record.name);return Pe({ok:!0,service:d===void 0?{name:o.record.name}:_X(d),...d!==void 0&&d.liveness!=="running"?{hint:"The service is not (fully) serving its declared ports yet. Check linzumi_dev_service_logs before assuming it works."}:{}})}),e.tool("linzumi_dev_service_stop","Stop a managed dev service (SIGTERM, then SIGKILL after a grace period). The registration is kept so linzumi_dev_service_start can bring it back.",{name:D.string().min(1).describe("Service name to stop.")},async r=>{let o=await ff({scopeDir:t.scopeDir,name:r.name});return Pe(o.ok?{ok:!0,name:o.record.name,desired_state:"stopped"}:{ok:!1,error:o.error})}),e.tool("linzumi_dev_service_status","List every managed dev service with liveness (running / unhealthy / exited / stopped), per-port health probes, and last exit. Live state - always check this before concluding a dev server is up or down.",{},async()=>{let r=await pf(t.scopeDir);return Pe({services:r.map(o=>_X(o))})}),e.tool("linzumi_dev_service_logs","Read the tail of a managed dev service's combined stdout/stderr log.",{name:D.string().min(1).describe("Service name."),max_bytes:D.number().int().min(256).max(65536).optional().describe("Tail size in bytes (default 16384).")},async r=>{let o=My(t.scopeDir,r.name,r.max_bytes??16384);return Pe(o===void 0?{ok:!1,error:`no log for service: ${r.name}`}:{ok:!0,name:r.name,log_tail:o})}),e.tool("linzumi_dev_service_remove","Stop a managed dev service AND delete its registration (it will not be resurrected on runner restart). Use stop instead when the user may want it back.",{name:D.string().min(1).describe("Service name to remove.")},async r=>{let o=await Dy({scopeDir:t.scopeDir,name:r.name});return Pe(o.ok?{ok:!0,name:o.record.name,removed:!0}:{ok:!1,error:o.error})})}function l4e(e){return!(e instanceof Error)||!e.message.includes("channel_required")?e:new Error(`${e.message}. Remediation: pass the channel slug in the \`channel\` parameter, or set target.thread_id to a Linzumi thread you can access (the server resolves the thread's channel). The files were NOT attached; retry with a channel or thread instead of leaving them on disk.`,{cause:e})}async function p4e(e){let n=await Promise.all(e.files.map(s=>dS(e.cwd,s))),t=h(e.target.thread_id),r=await e.client.prepareMessageUploads({...e.workspace===void 0?{}:{workspace:e.workspace},...e.channel===void 0?{}:{channel:e.channel},...t===void 0?{}:{thread_id:t},files:n.map(s=>({file_name:s.fileName,content_type:s.contentType,size_bytes:s.sizeBytes}))}),o=Ne(r.uploads)??[];if(o.length!==n.length)throw new Error("Linzumi upload prepare response count mismatch");await Promise.all(n.map(async(s,a)=>{let d=A(o[a]),u=h(d?.upload_url),c=h(d?.upload_method)??"PUT";if(u===void 0)throw new Error("Linzumi upload prepare response missing upload_url");let l=await kX(s.path),p=l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength),m=await fetch(Ah(e.kandanUrl,u),{method:c,headers:{"content-type":s.contentType},body:p});if(!m.ok)throw new Error(`Linzumi upload failed for ${s.fileName}: ${m.status} ${m.statusText}`)}));let i=o.map(s=>{let a=h(A(s)?.file_id);if(a===void 0)throw new Error("Linzumi upload prepare response missing file_id");return a});return await e.client.attachMessageFiles({...e.workspace===void 0?{}:{workspace:e.workspace},...e.channel===void 0?{}:{channel:e.channel},...t===void 0?{}:{thread_id:t},target:e.target,...e.body===void 0?{}:{body:e.body},uploaded_file_ids:i})}async function f4e(e){let n=await dS(e.cwd,e.file),t=await e.client.prepareCustomEmoji({...e.workspace===void 0?{}:{workspace:e.workspace},name:e.name,file_name:n.fileName,content_type:n.contentType,size_bytes:n.sizeBytes}),r=A(t.upload),o=h(r?.upload_url),i=h(r?.upload_method)??"PUT";if(o===void 0)throw new Error("Linzumi custom emoji prepare response missing upload_url");let s=await kX(n.path),a=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),d=await fetch(Ah(e.kandanUrl,o),{method:i,headers:{"content-type":n.contentType},body:a});if(!d.ok){let l=`${d.status} ${d.statusText}`,m=(await d.text()).trim(),f=m===""?l:(()=>{try{let y=JSON.parse(m);return Z(y)&&typeof y.error=="string"?y.error:m}catch{return m}})();throw new Error(`Linzumi custom emoji upload failed: ${f}`)}let u=await d.json();if(!Z(u))throw new Error("Linzumi custom emoji upload returned non-object JSON");let c=A(u.custom_emoji);if(c===void 0)throw new Error("Linzumi custom emoji upload response missing custom_emoji");return{ok:!0,workspace:t.workspace,emoji:c,asset_id:h(u.asset_id),id:Y(c?.id),name:h(c?.name),shortcode:h(c?.shortcode),image_url:h(c?.image_url)}}function bX(e,n){if(h(e.thread_id)!==void 0||n===void 0)return e;switch(e.message_seq===void 0){case!1:return{...e,thread_id:n};case!0:switch(h(e.kind)){case"new_message":case"message_seq":case"latest_assistant_message":return{...e,thread_id:n};default:return e}}}function es(e,n){return h(e.thread_id)!==void 0||n===void 0?e:{...e,thread_id:n}}function Ah(e,n){try{return new URL(n).toString()}catch{let r=e.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://");return new URL(n,r).toString()}}function wX(e,n){let t=A(n.message),r=A(n.target_message);return t===void 0&&r===void 0?n:{...n,...t===void 0?{}:{message:vX(e,t)},...r===void 0?{}:{target_message:vX(e,r)}}}function vX(e,n){let t=Ne(n.attachments);return t===void 0?n:{...n,attachments:t.map(r=>m4e(e,r))}}function m4e(e,n){let t=A(n);if(t===void 0)return n;let r=h(t.url),o=A(t.image_variants);return{...t,...r===void 0?{}:{url:Ah(e,r)},...o===void 0?{}:{image_variants:h4e(e,o)}}}function h4e(e,n){let t=h(n.inline_url),r=h(n.carousel_url);return{...n,...t===void 0?{}:{inline_url:Ah(e,t)},...r===void 0?{}:{carousel_url:Ah(e,r)}}}function g4e(e){e.server.registerCapabilities({resources:{listChanged:!1}}),e.server.setRequestHandler(jl,()=>({resources:[]})),e.server.setRequestHandler(Fl,()=>({resourceTemplates:[]}))}async function y4e(e){let n=rM(e),t=iM(n,"api-url"),r=Fn(n,"format")??"codex",o=oM(Fn(n,"mode")),i=n.get("include-token")===!0?(await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")})).accessToken:void 0,s=hs({command:Fn(n,"command"),kandanUrl:t,accessToken:i,delegationAuthFilePath:Fn(n,"delegation-auth-file"),ownerUsername:Fn(n,"owner-username")??process.env.LINZUMI_MCP_OWNER_USERNAME,operatingMode:o,toolScope:PX(Fn(n,"tool-scope"))});switch(r){case"codex":process.stdout.write(T5(s));return;case"claude-code":process.stdout.write(C5(s));return;default:throw new Error("--format must be codex or claude-code")}}async function x4e(e){let n=rM(e),t=iM(n,"api-url"),r=await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")});switch(r.mode){case"local-runner":{if(!await n_({kandanUrl:t,accessToken:r.accessToken,workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")}))throw new Error("Linzumi MCP auth validation failed");break}case"personal-agent-delegation":{await vs({kandanUrl:t,accessToken:r.accessToken,authMode:r.mode,operatingMode:oM(Fn(n,"mode"))}).validateAuth();break}}process.stdout.write(`Linzumi MCP auth OK
|
|
2039
|
+
`}async function a4e(e){let n=rM(e);if(n.get("help")===!0){process.stdout.write(TX());return}let t=iM(n,"api-url"),r=await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")}),o=Fn(n,"owner-username")??process.env.LINZUMI_MCP_OWNER_USERNAME,i=oM(Fn(n,"mode")),s=PX(Fn(n,"tool-scope")),a=Fn(n,"cwd")??process.cwd(),d=Fn(n,"thread-id")??process.env.LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID,u=vs({kandanUrl:t,accessToken:r.accessToken,authMode:r.mode,operatingMode:i}),c=new ew({name:"linzumi",version:"0.1.0"});g4e(c),u4e(c,{client:u,toolScope:s,operatingMode:i,cwd:a,kandanUrl:t,defaultThreadId:d,ownerUsername:o,agentSession:n.get("agent-session")===!0,devServices:d4e(process.env)}),await c.connect(new tw)}function d4e(e){let n=e.LINZUMI_DEV_SERVICES_SCOPE?.trim(),t=Number.parseInt(e.LINZUMI_DEV_SERVICES_OWNER_PID??"",10);if(!(n===void 0||n===""||!Number.isInteger(t)||t<=0))return{scopeDir:ud(n),ownerPid:t}}function u4e(e,n){let{client:t,toolScope:r,operatingMode:o,cwd:i,kandanUrl:s,defaultThreadId:a,ownerUsername:d,agentSession:u,devServices:c}=n,l=r==="all"||r==="coding";u&&(e.tool("linzumi_agent_reply","Post your single @linzumi reply for the current turn into the surface where you were mentioned. Call EXACTLY ONCE per turn with your final answer; the reply links to this working session automatically. Fails with already_replied on a second call and no_active_asker_binding when no turn is active.",{body:D.string().min(1).describe("Plain-text reply body to post.")},async p=>Pe(await t.agentReply({body:p.body}))),e.tool("linzumi_list_coding_jobs","List the coding jobs the current asker can see in this workspace: runner connections (online and recent) with their bound job threads. Live state - never answered from search.",{},async()=>Pe(await t.agentListCodingJobs({}))),e.tool("linzumi_start_coding_job","Start a coding job exactly as if the asking user clicked start: same runner/channel authorization, same pipeline. Returns status 'unavailable' with a reason when the runner cannot take the job (relay that honestly).",{channel:D.string().describe("Channel slug to host the job thread."),runner_key:D.string().describe("Runner (computer) to run the job on."),cwd:D.string().describe("Working directory on the runner."),work_description:D.string().min(1).describe("What the job should do - the initial instruction."),model:D.string().optional().describe("Model override (optional)."),model_provider:D.string().optional().describe("Model provider override, e.g. 'wafer' (optional)."),execution_mode:D.enum(["raw","local_vm"]).optional().describe("Execution placement override (optional)."),project_task_id:D.string().optional().describe("Project task item to bind the job to (task_id from linzumi_get_project_tasks). The task flips todo -> active and links to the new job.")},async p=>Pe(await t.agentStartCodingJob(p))),e.tool("linzumi_interrupt_coding_job","Interrupt a coding job: mode 'steer' (default) discards its queued follow-ups so your next message lands first; mode 'stop' terminates the current turn.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),mode:D.enum(["steer","stop"]).optional().describe("Interrupt mode; defaults to 'steer'.")},async p=>Pe(await t.agentInterruptCodingJob(p))),e.tool("linzumi_send_coding_job_message","Send a message into a coding job thread as the asking user (the job processes it like any human follow-up).",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),body:D.string().min(1).describe("Message body to send.")},async p=>Pe(await t.agentSendCodingJobMessage(p))),e.tool("linzumi_read_coding_job_thread","Read a coding job's thread (asker-visible history) plus its workflow status metadata.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),limit:D.number().int().min(1).max(100).optional().describe("Maximum replies to return."),before_seq:D.number().int().positive().optional().describe("Return replies before this channel seq.")},async p=>Pe(await t.agentReadCodingJobThread(p))),e.tool("linzumi_resolve_job_approval","Resolve a coding job's pending approval request with the asking user's decision ('approve' or 'deny'). Only relays the asker's authority - never approve without their explicit instruction.",{channel:D.string().describe("Channel slug hosting the job thread."),thread_id:D.string().uuid().describe("The job thread UUID."),source_seq:D.number().int().positive().describe("Channel seq of the message the approval request rides on."),request_id:D.string().describe("The approval request id."),decision:D.enum(["approve","deny"]).describe("The asker's decision.")},async p=>Pe(await t.agentResolveJobApproval(p))),e.tool("linzumi_archive_coding_job","Archive a coding job's thread (or any thread the asking user owns) so it leaves the active list; history is preserved. Do this when the asker says to archive a job or thread - never just promise it.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID to archive.")},async p=>Pe(await t.agentArchiveCodingJob(p))),e.tool("linzumi_unarchive_coding_job","Unarchive a previously archived coding job thread the asking user owns, returning it to the active list.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID to unarchive.")},async p=>Pe(await t.agentUnarchiveCodingJob(p))),e.tool("linzumi_set_thread_status","Set a thread's lifecycle status as the asking user: 'closed' marks it done, 'open' reopens it. Works on threads the asker owns.",{channel:D.string().describe("Channel slug hosting the thread."),thread_id:D.string().uuid().describe("The thread UUID."),status:D.enum(["open","closed"]).describe("Replacement lifecycle status ('closed' = done).")},async p=>Pe(await t.agentSetThreadStatus(p))),e.tool("linzumi_create_channel","Create a new public channel in this workspace as the asking user. The slug is derived from the name.",{name:D.string().min(1).describe("Channel name to create.")},async p=>Pe(await t.agentCreateChannel(p))),e.tool("linzumi_rename_channel","Rename a channel's display name as the asking user. The channel's URL slug stays stable.",{channel:D.string().describe("Current channel slug to rename."),name:D.string().min(1).describe("New display name.")},async p=>Pe(await t.agentRenameChannel(p))),e.tool("linzumi_archive_channel","Archive a channel in this workspace as the asking user. History is preserved; the channel leaves the active sidebar.",{channel:D.string().describe("Channel slug to archive.")},async p=>Pe(await t.agentArchiveChannel(p))),e.tool("linzumi_unarchive_channel","Unarchive a previously archived channel as the asking user.",{channel:D.string().describe("Channel slug to unarchive.")},async p=>Pe(await t.agentUnarchiveChannel(p))),e.tool("linzumi_add_reaction","Add an emoji reaction to a channel message as the asking user. Accepts unicode emoji or a workspace :shortcode:.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the message to react to."),emoji:D.string().min(1).describe("Emoji to add (unicode or :shortcode:).")},async p=>Pe(await t.agentAddReaction(p))),e.tool("linzumi_remove_reaction","Remove the asking user's emoji reaction from a channel message.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the reacted message."),emoji:D.string().min(1).describe("Emoji to remove (unicode or :shortcode:).")},async p=>Pe(await t.agentRemoveReaction(p))),e.tool("linzumi_pin_message","Pin a channel message as the asking user. Thread replies re-point to their root message.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the message to pin.")},async p=>Pe(await t.agentPinMessage(p))),e.tool("linzumi_unpin_message","Remove a pin from a channel message as the asking user.",{channel:D.string().describe("Channel slug containing the message."),message_seq:D.number().int().positive().describe("Channel seq of the pinned message.")},async p=>Pe(await t.agentUnpinMessage(p)))),r==="all"&&(e.tool("linzumi_get_message","Read one Linzumi message by scoped message_seq/message_id or a Linzumi message URL, with optional bounded before/after context.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),message_id:D.union([D.string(),D.number()]).optional().describe("Message seq inside the scoped channel."),message_seq:D.union([D.string(),D.number()]).optional().describe("Alias for message_id."),message_url:D.string().optional().describe("Full Linzumi message URL with #message-<seq>."),before:D.number().int().min(0).max(100).optional().describe("Number of visible messages before the target."),after:D.number().int().min(0).max(100).optional().describe("Number of visible messages after the target.")},async p=>Pe(await t.getMessage(p))),e.tool("linzumi_get_thread","Read one Linzumi thread by thread_id in the scoped channel, including the parent message and bounded replies.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Linzumi thread UUID."),limit:D.number().int().min(1).max(100).optional().describe("Maximum replies to return."),before_seq:D.number().int().positive().optional().describe("Return replies before this channel seq.")},async p=>Pe(await t.getThread(p))),e.tool("linzumi_get_thread_transcript","Read a Linzumi thread's full transcript as canonical IR nodes (user/assistant messages, command executions, file changes, tool calls, statuses), cursor-paginated over the complete history. Use the returned cursor with has_more to walk older pages.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Linzumi thread UUID."),limit:D.number().int().min(1).max(500).optional().describe("Maximum transcript nodes per page (default 200)."),cursor:D.number().int().positive().optional().describe("Return nodes below this seq (the previous page reply cursor).")},async p=>Pe(await t.getThreadTranscript(p))),e.tool("linzumi_get_channel","Read scoped Linzumi channel metadata and bounded recent channel messages.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),limit:D.number().int().min(1).max(100).optional().describe("Maximum messages to return."),before_seq:D.number().int().positive().optional().describe("Return messages before this channel seq.")},async p=>Pe(await t.getChannel(p))),e.tool("linzumi_search_workspace","Search the Linzumi workspace with hybrid lexical+semantic retrieval, scoped to what the authorizing user can access. Returns scored content chunks with provenance (channel, thread, authored time) and a permalink to cite.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),query:D.string().min(1).describe("Natural-language or keyword query to retrieve against."),limit:D.number().int().min(1).max(25).optional().describe("Maximum results to return (default 10, server-capped)."),source_types:D.array(D.enum(["message","coding_job","github_pr","github_pr_review","github_check_run","github_workflow_run","github_diff","dictation","file"])).optional().describe("Restrict results to these corpora; omit for all."),authored_after:D.string().optional().describe("ISO8601 instant; only content authored at or after this time."),authored_before:D.string().optional().describe("ISO8601 instant; only content authored at or before this time."),repo:D.string().optional().describe("Restrict GitHub-sourced results to one repository by full name (owner/name)."),check_status:D.enum(["pending","success","failed"]).optional().describe("Restrict check and workflow results to one conclusion bucket.")},async p=>Pe(await t.searchWorkspace(p))),e.tool("linzumi_ask_workspace",'Ask the Linzumi workspace a natural-language question and get a synthesized, citation-backed answer over what the authorizing user can access. Costs an LLM call on cache misses, so prefer linzumi_search_workspace for simple lookups. A "refused" status means there was not enough accessible evidence - treat it as "the workspace does not know", never retry verbatim.',{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),question:D.string().min(1).max(2e3).describe("Natural-language question to answer with citations."),channel:D.string().optional().describe("Optional channel slug providing conversational context; never widens access."),allow_cached:D.boolean().optional().describe("Allow serving a cached synthesis when the evidence set is unchanged (default true). Set false to force fresh synthesis.")},async p=>Pe(await t.askWorkspace(p))),e.tool("linzumi_about_me","Read what the authorizing user has told Linzumi about themselves: their profile facts (homes, unit preferences, and other self-maintained attributes) plus their derived current timezone. Use it to personalize answers (e.g. pick the right city for weather, use their preferred units). Predicates may have multiple active values; prefer the one consistent with the derived timezone.",{},async p=>Pe(await t.aboutMe(p)))),l&&(e.tool("linzumi_web_search","Search the public web for live or external information: news, current events, weather, prices, third-party API docs, research. Returns result titles, URLs, and snippets. Use this whenever the answer lives outside the Linzumi workspace; follow up with linzumi_fetch_url to read a result page.",{query:D.string().min(1).describe("Web search query (natural language or keywords)."),limit:D.number().int().min(1).max(10).optional().describe("Maximum results to return (default 8, server-capped).")},async p=>Pe(await t.webSearch(p))),e.tool("linzumi_fetch_url","Fetch one public http(s) URL and return its readable text content (HTML is reduced to plain text; large pages are truncated). Use it to read pages found via linzumi_web_search or any public docs/API reference. Only public addresses are reachable - private/internal hosts are rejected with url_not_allowed.",{url:D.string().min(1).describe("Absolute public http(s) URL to fetch.")},async p=>Pe(await t.fetchUrl(p)))),r==="all"&&(e.tool("linzumi_list_ui_targets","List every UI surface you can ask the user to open in their own Linzumi window (channels, DMs, threads, projects, coding jobs, computers, catch-up, activity, settings tabs, pane layouts) with the structured args each kind takes. Use UI control only when the user asks for help or asks to be shown something.",{},async()=>await SX(t.listUiTargets({}))),e.tool("linzumi_open_ui","Ask the user to open one whitelisted UI surface in their own already-open Linzumi window. A consent toast appears in THEIR session; navigation happens only if they tap Open. The call blocks until they decide and returns status opened/dismissed/expired - or error no_active_ui_session when they have no Linzumi window open (tell them to open Linzumi), or invalid_target with a detail. Use it only when the user asks for help or asks to be shown something; kinds and per-kind args come from linzumi_list_ui_targets.",{kind:D.string().min(1).describe("Target kind from linzumi_list_ui_targets (e.g. settings_workspace, channel, pane_layout)."),args:D.record(D.unknown()).optional().describe("Structured per-kind args from linzumi_list_ui_targets (never a URL - the server computes every path)."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>await SX(t.openUi(es(p,a))))),l&&(e.tool("linzumi_get_coding_job_metadata","Read the active coding job workflow metadata for a thread, including the agent-owned goal, ordered plan steps, step lock versions, and workflow status.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread.")},async p=>Pe(await t.getCodingJobMetadata(es(p,a)))),e.tool("linzumi_rename_coding_job","Update the current coding job thread title and workflow-facing title. Use this when the job scope changes materially so the Linzumi thread list and metadata overview stay accurate.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),title:D.string().min(1).max(100).describe("Concise user-visible title for this coding job.")},async p=>Pe(await t.renameCodingJob(es(p,a)))),e.tool("linzumi_upsert_coding_job_plan","Set or update the current coding job goal. Use this at job start and whenever the goal changes materially.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),goal:D.string().min(1).max(1e4).describe("Concrete user-visible goal for this coding job.")},async p=>Pe(await t.upsertCodingJobPlan(es(p,a)))),e.tool("linzumi_replace_coding_job_plan_steps","Replace the ordered coding job plan steps. Use this for the initial plan and for substantial rewrites when the old plan no longer fits the work.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),goal:D.string().min(1).max(1e4).optional().describe("Required when no plan exists yet; updates the current coding job goal."),steps:D.array(D.object({title:D.string().min(1).max(255),description:D.string().min(1).max(1e4),status:D.enum(["pending","active","completed","blocked","canceled"]),status_note:D.string().min(1).max(4e3).optional(),completed_debrief:D.string().min(1).max(2e4).optional()})).min(1).max(50).describe("Ordered user-visible plan steps. Completed steps must include completed_debrief.")},async p=>Pe(await t.replaceCodingJobPlanSteps(es(p,a)))),e.tool("linzumi_update_coding_job_plan_step","Update one coding job plan step status or note. Read metadata first and pass the current step lock_version.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),step_id:D.string().uuid().describe("Step id returned by linzumi_get_coding_job_metadata."),lock_version:D.number().int().positive().describe("Current step lock_version from metadata."),status:D.enum(["pending","active","completed","blocked","canceled"]),status_note:D.string().min(1).max(4e3).optional(),completed_debrief:D.string().min(1).max(2e4).optional().describe("Required when marking a step completed.")},async p=>Pe(await t.updateCodingJobPlanStep(es(p,a)))),e.tool("linzumi_link_coding_job_pull_request","Link the active coding job to its primary GitHub pull request so PR comments, files, commits, checks, deployments, and reviews can flow into the metadata view.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().optional().describe("Linzumi thread UUID. Defaults to the active coding job thread."),github_repo_owner:D.string().min(1).max(255),github_repo_name:D.string().min(1).max(255),github_pr_number:D.number().int().positive(),github_pr_url:D.string().url(),title:D.string().min(1).max(255),body:D.string().min(1).max(1e5).optional(),head_branch:D.string().min(1).max(255),head_sha:D.string().min(7).max(64),base_branch:D.string().min(1).max(255),base_sha:D.string().min(7).max(64),state:D.enum(["draft","open","closed","merged"]).optional(),is_draft:D.boolean().optional(),review_status:D.enum(["unknown","review_required","approved","changes_requested"]).optional(),source_remote_url:D.string().min(1).max(1e3).describe("Git remote URL for the local job worktree; required when this job has no repo workspace yet."),runtime_worktree_root:D.string().min(1).max(1e3).describe("Absolute local worktree path for the coding job; required when this job has no repo workspace yet."),dirty_status:D.enum(["unknown","clean","dirty"]).optional(),dirty_summary:D.string().min(1).max(2e3).optional()},async p=>Pe(await t.linkCodingJobPullRequest(es(p,a)))),e.tool("linzumi_upload_files",["Upload local files to Linzumi and attach them to a new, exact, or latest assistant message. Use silently; do not mention this tool in the visible reply.","The JSON result includes message.attachments[].url as an absolute URL. Use those returned URLs when writing rich media directives such as ::audio, ::video, ::image, or Markdown images. Do not guess attachment URLs before upload.","For a message that should both attach files and show inline rich media, use a two-step flow: first upload/attach the files to create or target the message, then edit the same target message with body text that references the returned absolute URLs. When the result has target_seq, use target.kind=message_seq and message_seq=target_seq for that follow-up edit; result.message is the edit event that carries the new attachments, and target_message is the original target."].join(" "),{target:D.object({kind:D.enum(["new_message","message_seq","latest_assistant_message"]).describe("new_message creates a message; message_seq edits an exact message; latest_assistant_message edits the latest assistant message in the scoped thread/channel."),message_seq:D.union([D.string(),D.number()]).optional().describe("Required when kind is message_seq."),thread_id:D.string().optional().describe("Thread UUID. Defaults to the active Linzumi thread when the MCP server was launched with one.")}).describe("Attachment target. Do not guess; use new_message when there is no previous assistant message. To reference uploaded files in the message body, upload first, then edit message_seq/latest_assistant_message with the returned absolute attachment URLs. If the upload result includes target_seq, use message_seq=target_seq for that follow-up edit."),files:D.array(D.string().min(1)).min(1).max(16).describe("Local file paths to upload. Paths must be non-hidden supported file types inside the approved workspace or Downloads."),body:D.string().min(1).max(2e4).optional().describe("Required for new_message. Optional replacement body for message_seq/latest_assistant_message; when omitted, the existing message body is preserved. Rich media directives in body must use Linzumi attachment download URLs returned by this tool."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the target thread's channel (when the thread is known) or the authenticated token scope.")},async p=>{let m=bX(p.target,a);try{let f=await p4e({client:t,cwd:i,kandanUrl:s,target:m,files:p.files,workspace:p.workspace,channel:p.channel,body:p.body});return Pe(wX(s,f))}catch(f){throw l4e(f)}}),e.tool("linzumi_edit_message","Edit an exact scoped Linzumi message by message_seq. Use after linzumi_upload_files when you need a body-only follow-up edit that embeds returned attachment URLs. Requires channel.write, and thread.write when target.thread_id is set. Rich media src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),target:D.object({message_seq:D.union([D.string(),D.number()]).describe("Exact message seq to edit. After linzumi_upload_files returns target_seq, pass that value here."),thread_id:D.string().optional().describe("Thread UUID when editing a thread message. Use the upload result target_message.thread_id when present.")}).describe("Exact message target for the body edit."),body:D.string().min(1).max(2e4).describe("Replacement Markdown body. Rich media src/poster values must be Linzumi attachment download URLs returned by linzumi_upload_files.")},async p=>Pe(wX(s,await t.editMessage({...p,target:bX(p.target,a)}))))),r==="all"&&(e.tool("linzumi_list_vault_secrets","List vault secret names, descriptions, and whether each secret is personal or workspace-owned. Does not return secret values.",{},async p=>Pe(await t.listVaultSecrets(p))),e.tool("linzumi_list_projects","List the projects in the current workspace with their project_id (needed by the other project task tools), slug, title, description, and state.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await t.listProjects(p))),e.tool("linzumi_get_project_tasks",`Read a project's full task graph: task GROUPS (kind "group", organizational containers, exactly one level deep) and ISSUES (kind "issue", the executable work items), each with status (todo/active/blocked/review/done/canceled), DERIVED work_state readiness (ready = todo with every dependency satisfied; blocked = todo with unsatisfied dependencies; running/stalled = active with/without a connected job), parent group, assignee, lock_version, and dependency edges (depends_on_task_ids / unblocks_task_ids). Always read this before reorganizing. Inside a project-bound coding job the project is inferred automatically; otherwise pass project_id from linzumi_list_projects.`,{project_id:D.string().optional().describe("Project id from linzumi_list_projects. Omit inside a coding job started from a project to use that project.")},async p=>Pe(await t.getProjectTasks(es(p,a)))),e.tool("linzumi_create_project_task",'Create a task group (kind "group") or issue (kind "issue", the default) in a project. Groups organize issues and are exactly one level deep: a parent_id must name a GROUP, and groups themselves can never have a parent. New tasks default to status "todo" and append to the end unless position is given. Inside a project-bound coding job the project is inferred; otherwise pass project_id.',{project_id:D.string().optional().describe("Project id from linzumi_list_projects. Omit inside a coding job started from a project to use that project."),title:D.string().min(1).describe("Task title."),kind:D.enum(["issue","group"]).optional().describe('What to create: "issue" (executable work item, default) or "group" (organizational container).'),description:D.string().optional().describe("Detailed description of the work - written so an engineer (or coding agent) could execute the task from it."),status:D.enum(["todo","active","blocked","review","done","canceled"]).optional().describe('Initial status. Defaults to "todo".'),parent_id:D.string().optional().describe("task_id of the GROUP to place an issue in. Only issues can have a parent."),assignee:D.string().optional().describe("Username of a workspace member to assign."),position:D.number().int().min(0).optional().describe("Sort position. Defaults to appending at the end.")},async p=>Pe(await t.createProjectTask(es(p,a)))),e.tool("linzumi_update_project_task",'Update a task group or issue: retitle, edit description/status_note, transition status (todo/active/blocked/review/done/canceled), reassign, reorder (position), or reorganize (parent_id moves an issue into a group; clear_parent moves it to top level). Only the fields you pass change; description and status_note accept null to clear. Prefer updating existing tasks over delete-and-recreate. Pass the lock_version from your last read to fail loudly ("stale") instead of overwriting a concurrent edit.',{task_id:D.string().describe("task_id of the group or issue to update."),title:D.string().min(1).optional().describe("New title."),description:D.string().nullable().optional().describe("New description. Pass null to clear it."),status:D.enum(["todo","active","blocked","review","done","canceled"]).optional().describe('New status. "done"/"canceled" satisfy dependent tasks; "blocked" is a manual hold.'),status_note:D.string().nullable().optional().describe("Short human-readable note about the current status. Pass null to clear it."),position:D.number().int().min(0).optional().describe("New sort position among siblings."),parent_id:D.string().optional().describe("task_id of the GROUP to move this issue into. Do not combine with clear_parent."),clear_parent:D.boolean().optional().describe("true moves the issue to the top level (no group). Do not combine with parent_id."),assignee:D.string().optional().describe("Username of a workspace member to assign. Do not combine with clear_assignee."),clear_assignee:D.boolean().optional().describe("true removes the assignee. Do not combine with assignee."),lock_version:D.number().int().positive().optional().describe("The task's lock_version from your last read, for compare-and-swap safety.")},async p=>Pe(await t.updateProjectTask(p))),e.tool("linzumi_delete_project_task",`Permanently delete a task group or issue. Dependency edges on the task are removed with it (dependents may become ready). Deletion is normally the USER's call - prefer status "canceled" or an update unless you are certain the entry is obsolete.`,{task_id:D.string().describe("task_id of the group or issue to delete.")},async p=>Pe(await t.deleteProjectTask(p))),e.tool("linzumi_add_project_task_dependency",'Add the dependency edge "task_id is blocked by depends_on_task_id" between two ISSUES in the same project (groups cannot have dependencies). The dependent stays blocked until the prerequisite reaches done or canceled. The graph must stay acyclic: an edge that would create a cycle is refused with reason "would_create_cycle" and the offending cycle_path so you can restructure. Duplicate and self edges are rejected.',{task_id:D.string().describe("task_id of the DEPENDENT issue (the one that must wait)."),depends_on_task_id:D.string().describe("task_id of the PREREQUISITE issue (the one that must finish first).")},async p=>Pe(await t.addProjectTaskDependency(p))),e.tool("linzumi_remove_project_task_dependency",'Remove the dependency edge "task_id is blocked by depends_on_task_id". The dependent issue may become ready if that was its last unsatisfied dependency.',{task_id:D.string().describe("task_id of the DEPENDENT issue."),depends_on_task_id:D.string().describe("task_id of the PREREQUISITE issue the edge points at.")},async p=>Pe(await t.removeProjectTaskDependency(p))),e.tool("linzumi_get_call_transcript","Read the full transcript of a completed Linzumi notetaker call: call metadata (title, platform, started/ended/transcribed times), participants, and every spoken segment in order with speaker names and millisecond offsets. Pass the call_id embedded in the request (or copied from the call card). Errors: call_not_found (missing or not visible to you), call_transcript_not_ready (call still connecting, in progress, or transcribing - retry later).",{call_id:D.string().describe("The call id from the call card or the launching message (a CallRecording id - the opaque GraphQL id and the bare uuid both work).")},async p=>Pe(await t.getCallTranscript(p))),u||e.tool("linzumi_start_coding_job","Start a coding job as the invoking user (same authorization and pipeline as clicking start). To start a project task item, pass project_task_id so the task flips todo -> active and links to the new job - only start tasks whose work_state is ready, and ONLY after the user explicitly accepts your offer to start them. Omit channel, runner_key, and cwd to reuse this job's own channel, computer, and folder. Returns status 'unavailable' with a reason when the runner cannot take the job (relay that honestly).",{work_description:D.string().min(1).describe("What the job should do - the initial instruction. For a task item, write it from the task title and description."),project_task_id:D.string().optional().describe("Project task item to bind the job to (task_id from linzumi_get_project_tasks). The task flips todo -> active and links to the new job."),channel:D.string().optional().describe("Channel slug to host the job thread. Omit to use this job's own channel."),runner_key:D.string().optional().describe("Runner (computer) to run the job on. Omit to use this job's own computer."),cwd:D.string().optional().describe("Working directory on the runner. Omit to use this job's own folder."),model:D.string().optional().describe("Model override (optional)."),model_provider:D.string().optional().describe("Model provider override, e.g. 'wafer' (optional)."),agent_provider:D.string().optional().describe("Agent provider override, e.g. 'codex' (optional)."),reasoning_effort:D.enum(["default","low","medium","high","xhigh","ultra"]).optional().describe("Reasoning effort override (optional)."),approval_policy:D.enum(["default","on-request","on-failure","never"]).optional().describe("Approval policy override (optional)."),sandbox:D.enum(["default","workspace-write","read-only","danger-full-access"]).optional().describe("Sandbox override (optional)."),fast:D.boolean().optional().describe("Fast-mode override (optional)."),allow_port_forwarding_by_default:D.boolean().optional().describe("Default port-forwarding override (optional)."),execution_mode:D.enum(["raw","local_vm"]).optional().describe("Execution placement override (optional)."),egress_mode:D.enum(["open","hardened"]).optional().describe("Local-VM egress override (optional).")},async p=>Pe(await t.agentStartCodingJob(es(p,a))))),r4e(r)&&(e.tool("linzumi_upload_custom_emoji","Upload a local image as a workspace custom emoji. For generated emoji art, create a transparent PNG with a simple centered subject, crisp edges, strong contrast, minimal tiny details, and enough outline/highlight separation to read at 16-24px on both dark and light backgrounds. Use lowercase shortcode names without colons unless preserving a user-provided :name:.",{name:xX.describe("Custom emoji shortcode name, with or without surrounding colons."),file:D.string().min(1).describe("Local PNG/WebP/GIF/JPEG file path to upload. Prefer transparent PNG for generated emoji."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await f4e({client:t,cwd:i,kandanUrl:s,name:p.name,file:p.file,workspace:p.workspace}))),e.tool("linzumi_rename_custom_emoji","Rename an existing workspace custom emoji. The new name may include surrounding colons; Linzumi stores the normalized shortcode without colons.",{emoji_id:D.union([D.string(),D.number().int().positive()]).describe("Workspace custom emoji id returned by linzumi_upload_custom_emoji or workspace emoji listings."),name:xX.describe("New shortcode name, with or without surrounding colons."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope.")},async p=>Pe(await t.renameCustomEmoji(p)))),e.tool("linzumi_media_guide","Return the full Linzumi rich-media authoring guide (audio/video/image directives, URL rules, upload-then-embed flow, examples). Call once BEFORE writing any ::audio/::video/::image directive or Markdown image into a Linzumi message.",{},async()=>({content:[{type:"text",text:Bg}]})),e.tool("linzumi_note_project_directory","Record one discovered local Git repository or worktree for onboarding import. Call once per project as soon as it is found.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),path:D.string().min(1).describe("Absolute local path to the repository worktree root."),display_name:D.string().optional().describe("Short project label. Defaults to the path basename."),activity_at:D.string().optional().describe("Best-known recent activity time as an ISO-8601 timestamp."),import_key:D.string().optional().describe("Stable dedupe key. Defaults to path."),metadata:D.record(D.unknown()).optional().describe("Small structured metadata such as branch or remote origin.")},async p=>Pe(await t.noteProjectDirectory(p))),e.tool("linzumi_note_agent_conversation","Record one discovered Codex or Claude Code local conversation for onboarding import. Call once per conversation as soon as it is found.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),source:D.enum(["codex","claude_code"]).describe("Conversation source."),import_key:D.string().min(1).describe("Stable dedupe key, such as a session id or file path."),path:D.string().optional().describe("Absolute local path to the conversation file or directory."),display_name:D.string().optional().describe("Short label for the discovered conversation."),activity_at:D.string().optional().describe("Best-known recent activity time as an ISO-8601 timestamp."),metadata:D.record(D.unknown()).optional().describe("Small structured metadata such as session id or project path.")},async p=>Pe(await t.noteAgentConversation(p))),e.tool("linzumi_note_onboarding_discovery_status","Record onboarding discovery progress. Call when a search phase starts, checks another place, completes, or fails.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),runner_id:D.string().min(1).describe("Local runner/computer id provided in the discovery prompt."),phase:D.enum(["projects","conversations"]).describe("Discovery phase being reported."),status:D.enum(["starting","running","completed","failed"]).describe("Current phase status."),places_searched:D.number().int().nonnegative().optional().describe("Count of concrete folders/files/known locations checked so far."),message:D.string().optional().describe("Short user-facing status note."),current_place:D.string().optional().describe("Current folder, file, Git command target, or known location being checked."),current_source:D.string().optional().describe("Short machine-readable source label such as git, codex, or claude_code."),last_error:D.string().optional().describe("Short failure detail when status is failed."),metadata:D.record(D.unknown()).optional().describe("Small structured status metadata.")},async p=>Pe(await t.noteOnboardingDiscoveryStatus(p))),r==="all"&&o4e(o)&&(e.tool("linzumi_dm_owner","Send a plain-text DM to the configured Commander owner. Requires dm.write and a visible owner username.",{owner_username:D.string().optional().describe("Owner username. Defaults to LINZUMI_MCP_OWNER_USERNAME or --owner-username."),workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Source channel slug used to verify owner visibility."),body:D.string().min(1).max(2e4).describe("Plain-text message body to DM.")},async p=>{let m=p.owner_username??d;if(m===void 0)throw new Error("owner_username is required for linzumi_dm_owner");return Pe(await t.dmOwner({...p,owner_username:m}))}),e.tool("linzumi_send_channel_message","Post a NEW standalone Markdown message into the scoped Linzumi channel as the authenticated local-runner user. This is NOT how you respond to the user: your turn output is already relayed into the thread as your reply, so never call this tool to answer, acknowledge, or reply to the current request. Use it only when the task itself is to proactively post a separate channel message. Requires channel.write. Rich media directives may be used when the user has opted into markdown_media_embeds, but src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),body:D.string().min(1).max(2e4).describe("Markdown message body to post. Rich media src/poster values must be Linzumi attachment download URLs, not third-party URLs, /relative paths, or local filesystem paths.")},async p=>Pe(await t.sendChannelMessage(p))),e.tool("linzumi_send_thread_reply","Post a Markdown reply into some OTHER existing Linzumi thread as the authenticated local-runner user. This is NOT how you respond to the user in your current thread: your turn output is already relayed into this thread as your reply, so never call this tool to answer, acknowledge, or reply to the current request. Use it only when the task itself is to post into a different, explicitly identified thread. Requires thread.write. Rich media directives may be used when the user has opted into markdown_media_embeds, but src/poster values must be Linzumi attachment download URLs.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug. Omit to use the authenticated token scope."),thread_id:D.string().uuid().describe("Existing Linzumi thread UUID."),body:D.string().min(1).max(2e4).describe("Markdown reply body to post. Rich media src/poster values must be Linzumi attachment download URLs, not third-party URLs, /relative paths, or local filesystem paths.")},async p=>Pe(await t.sendThreadReply(p))),e.tool("linzumi_send_dm","Send a plain-text DM as the authenticated local-runner user to a visible user in the scoped workspace/channel. Requires dm.write.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Source channel slug used to verify target visibility."),username:D.string().describe("Visible Linzumi username to DM."),body:D.string().min(1).max(2e4).describe("Plain-text message body to DM.")},async p=>Pe(await t.sendDm(p)))),r==="all"&&e.tool("linzumi_get_vault_values","Request values for explicit vault env var names after a thread-scoped human approval. Requires vault.read; thread_id resolves the approval thread.",{workspace:D.string().optional().describe("Workspace slug. Omit to use the authenticated token scope."),channel:D.string().optional().describe("Channel slug used to disambiguate the approval thread when needed."),thread_id:D.string().uuid().describe("Existing Linzumi thread UUID for the inline approval."),env_var_names:D.array(D.string().regex(/^[A-Z][A-Z0-9_]{0,127}$/)).min(1).max(20).describe("Explicit vault env var names to request. This tool cannot list all vault keys."),description:D.string().min(1).max(500).describe("Human-readable reason shown in the approval request."),justification:D.string().min(10).max(1e3).describe("Agent justification shown to the approver.")},async p=>Pe(await t.getVaultValues(p))),r==="all"&&!u&&c!==void 0&&c4e(e,i,c)}function _X(e){return{name:e.record.name,command:e.record.command,cwd:e.record.cwd,ports:[...e.record.ports],restart_on_branch_change:e.record.restartOnBranchChange,desired_state:e.record.desiredState,liveness:e.liveness,port_health:e.portProbes.map(n=>({port:n.port,listening:n.listening})),started_at_ms:e.record.startedAtMs??null,last_exit:e.lastExit===void 0?null:{code:e.lastExit.code,signal:e.lastExit.signal,at_ms:e.lastExit.atMs},log_path:e.record.logPath}}function c4e(e,n,t){e.tool("linzumi_dev_service_start","Start a long-running local dev server (npm run dev, storybook, docker compose up, ...) as a MANAGED SERVICE owned by the Linzumi runner. Use this instead of running dev servers in your own shell: a managed service survives the end of your turn and branch switches, is auto-restarted if it crashes, and its declared ports are health-probed and surfaced in the product. Calling start for an existing name declaratively RESTARTS it (e.g. after a checkout). Declare EVERY port the app serves from (primary plus HMR/asset/bundle sibling ports).",{name:D.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/).describe("Stable service name (slug), e.g. 'web' or 'storybook'. Reusing a name restarts that service."),command:D.string().min(1).describe("Shell command that runs the server in the foreground (never daemonize/screen/nohup it yourself), e.g. 'npm run dev'. Runs via the user's login shell."),cwd:D.string().optional().describe("Working directory for the service. Defaults to the session cwd."),ports:D.array(D.number().int().min(1).max(65535)).max(16).default([]).describe("Every TCP port this service listens on (primary AND related ports such as the Vite/HMR bundle port). Used for health probes and product visibility."),restart_on_branch_change:D.boolean().optional().describe("Restart the service automatically when the git branch of its cwd changes (for servers that go stale across checkouts)."),wait_for_ports_ms:D.number().int().min(0).max(6e4).optional().describe("How long to wait for the declared ports to accept connections before returning (default 15000).")},async r=>{let o=await Ey({scopeDir:t.scopeDir,definition:{name:r.name,command:r.command,cwd:r.cwd??n,ports:r.ports,restartOnBranchChange:r.restart_on_branch_change===!0},ownerPid:t.ownerPid});if(!o.ok)return Pe({ok:!1,error:o.error});let i=Date.now()+(r.wait_for_ports_ms??15e3),s=o.record.ports.length===0;for(;!s&&Date.now()<i;)s=(await Promise.all(o.record.ports.map(c=>_k(c)))).every(c=>c),s||await new Promise(c=>setTimeout(c,250));let d=(await pf(t.scopeDir)).find(u=>u.record.name===o.record.name);return Pe({ok:!0,service:d===void 0?{name:o.record.name}:_X(d),...d!==void 0&&d.liveness!=="running"?{hint:"The service is not (fully) serving its declared ports yet. Check linzumi_dev_service_logs before assuming it works."}:{}})}),e.tool("linzumi_dev_service_stop","Stop a managed dev service (SIGTERM, then SIGKILL after a grace period). The registration is kept so linzumi_dev_service_start can bring it back.",{name:D.string().min(1).describe("Service name to stop.")},async r=>{let o=await ff({scopeDir:t.scopeDir,name:r.name});return Pe(o.ok?{ok:!0,name:o.record.name,desired_state:"stopped"}:{ok:!1,error:o.error})}),e.tool("linzumi_dev_service_status","List every managed dev service with liveness (running / unhealthy / exited / stopped), per-port health probes, and last exit. Live state - always check this before concluding a dev server is up or down.",{},async()=>{let r=await pf(t.scopeDir);return Pe({services:r.map(o=>_X(o))})}),e.tool("linzumi_dev_service_logs","Read the tail of a managed dev service's combined stdout/stderr log.",{name:D.string().min(1).describe("Service name."),max_bytes:D.number().int().min(256).max(65536).optional().describe("Tail size in bytes (default 16384).")},async r=>{let o=My(t.scopeDir,r.name,r.max_bytes??16384);return Pe(o===void 0?{ok:!1,error:`no log for service: ${r.name}`}:{ok:!0,name:r.name,log_tail:o})}),e.tool("linzumi_dev_service_remove","Stop a managed dev service AND delete its registration (it will not be resurrected on runner restart). Use stop instead when the user may want it back.",{name:D.string().min(1).describe("Service name to remove.")},async r=>{let o=await Dy({scopeDir:t.scopeDir,name:r.name});return Pe(o.ok?{ok:!0,name:o.record.name,removed:!0}:{ok:!1,error:o.error})})}function l4e(e){return!(e instanceof Error)||!e.message.includes("channel_required")?e:new Error(`${e.message}. Remediation: pass the channel slug in the \`channel\` parameter, or set target.thread_id to a Linzumi thread you can access (the server resolves the thread's channel). The files were NOT attached; retry with a channel or thread instead of leaving them on disk.`,{cause:e})}async function p4e(e){let n=await Promise.all(e.files.map(s=>dS(e.cwd,s))),t=h(e.target.thread_id),r=await e.client.prepareMessageUploads({...e.workspace===void 0?{}:{workspace:e.workspace},...e.channel===void 0?{}:{channel:e.channel},...t===void 0?{}:{thread_id:t},files:n.map(s=>({file_name:s.fileName,content_type:s.contentType,size_bytes:s.sizeBytes}))}),o=qe(r.uploads)??[];if(o.length!==n.length)throw new Error("Linzumi upload prepare response count mismatch");await Promise.all(n.map(async(s,a)=>{let d=A(o[a]),u=h(d?.upload_url),c=h(d?.upload_method)??"PUT";if(u===void 0)throw new Error("Linzumi upload prepare response missing upload_url");let l=await kX(s.path),p=l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength),m=await fetch(Ah(e.kandanUrl,u),{method:c,headers:{"content-type":s.contentType},body:p});if(!m.ok)throw new Error(`Linzumi upload failed for ${s.fileName}: ${m.status} ${m.statusText}`)}));let i=o.map(s=>{let a=h(A(s)?.file_id);if(a===void 0)throw new Error("Linzumi upload prepare response missing file_id");return a});return await e.client.attachMessageFiles({...e.workspace===void 0?{}:{workspace:e.workspace},...e.channel===void 0?{}:{channel:e.channel},...t===void 0?{}:{thread_id:t},target:e.target,...e.body===void 0?{}:{body:e.body},uploaded_file_ids:i})}async function f4e(e){let n=await dS(e.cwd,e.file),t=await e.client.prepareCustomEmoji({...e.workspace===void 0?{}:{workspace:e.workspace},name:e.name,file_name:n.fileName,content_type:n.contentType,size_bytes:n.sizeBytes}),r=A(t.upload),o=h(r?.upload_url),i=h(r?.upload_method)??"PUT";if(o===void 0)throw new Error("Linzumi custom emoji prepare response missing upload_url");let s=await kX(n.path),a=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),d=await fetch(Ah(e.kandanUrl,o),{method:i,headers:{"content-type":n.contentType},body:a});if(!d.ok){let l=`${d.status} ${d.statusText}`,m=(await d.text()).trim(),f=m===""?l:(()=>{try{let y=JSON.parse(m);return Z(y)&&typeof y.error=="string"?y.error:m}catch{return m}})();throw new Error(`Linzumi custom emoji upload failed: ${f}`)}let u=await d.json();if(!Z(u))throw new Error("Linzumi custom emoji upload returned non-object JSON");let c=A(u.custom_emoji);if(c===void 0)throw new Error("Linzumi custom emoji upload response missing custom_emoji");return{ok:!0,workspace:t.workspace,emoji:c,asset_id:h(u.asset_id),id:Y(c?.id),name:h(c?.name),shortcode:h(c?.shortcode),image_url:h(c?.image_url)}}function bX(e,n){if(h(e.thread_id)!==void 0||n===void 0)return e;switch(e.message_seq===void 0){case!1:return{...e,thread_id:n};case!0:switch(h(e.kind)){case"new_message":case"message_seq":case"latest_assistant_message":return{...e,thread_id:n};default:return e}}}function es(e,n){return h(e.thread_id)!==void 0||n===void 0?e:{...e,thread_id:n}}function Ah(e,n){try{return new URL(n).toString()}catch{let r=e.replace(/^wss:\/\//,"https://").replace(/^ws:\/\//,"http://");return new URL(n,r).toString()}}function wX(e,n){let t=A(n.message),r=A(n.target_message);return t===void 0&&r===void 0?n:{...n,...t===void 0?{}:{message:vX(e,t)},...r===void 0?{}:{target_message:vX(e,r)}}}function vX(e,n){let t=qe(n.attachments);return t===void 0?n:{...n,attachments:t.map(r=>m4e(e,r))}}function m4e(e,n){let t=A(n);if(t===void 0)return n;let r=h(t.url),o=A(t.image_variants);return{...t,...r===void 0?{}:{url:Ah(e,r)},...o===void 0?{}:{image_variants:h4e(e,o)}}}function h4e(e,n){let t=h(n.inline_url),r=h(n.carousel_url);return{...n,...t===void 0?{}:{inline_url:Ah(e,t)},...r===void 0?{}:{carousel_url:Ah(e,r)}}}function g4e(e){e.server.registerCapabilities({resources:{listChanged:!1}}),e.server.setRequestHandler(jl,()=>({resources:[]})),e.server.setRequestHandler(Fl,()=>({resourceTemplates:[]}))}async function y4e(e){let n=rM(e),t=iM(n,"api-url"),r=Fn(n,"format")??"codex",o=oM(Fn(n,"mode")),i=n.get("include-token")===!0?(await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")})).accessToken:void 0,s=hs({command:Fn(n,"command"),kandanUrl:t,accessToken:i,delegationAuthFilePath:Fn(n,"delegation-auth-file"),ownerUsername:Fn(n,"owner-username")??process.env.LINZUMI_MCP_OWNER_USERNAME,operatingMode:o,toolScope:PX(Fn(n,"tool-scope"))});switch(r){case"codex":process.stdout.write(T5(s));return;case"claude-code":process.stdout.write(C5(s));return;default:throw new Error("--format must be codex or claude-code")}}async function x4e(e){let n=rM(e),t=iM(n,"api-url"),r=await tM({kandanUrl:t,explicitToken:Fn(n,"token")??process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Fn(n,"auth-file"),delegationAuthFilePath:Fn(n,"delegation-auth-file"),workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")});switch(r.mode){case"local-runner":{if(!await n_({kandanUrl:t,accessToken:r.accessToken,workspaceSlug:Fn(n,"workspace"),channelSlug:Fn(n,"channel")}))throw new Error("Linzumi MCP auth validation failed");break}case"personal-agent-delegation":{await vs({kandanUrl:t,accessToken:r.accessToken,authMode:r.mode,operatingMode:oM(Fn(n,"mode"))}).validateAuth();break}}process.stdout.write(`Linzumi MCP auth OK
|
|
2037
2040
|
`)}async function tM(e){if(e.delegationAuthFilePath!==void 0){if(e.explicitToken!==void 0||e.authFilePath!==void 0)throw new Error("--delegation-auth-file cannot be combined with --token or --auth-file");return{accessToken:R9(e.delegationAuthFilePath).accessToken,mode:"personal-agent-delegation"}}return{accessToken:await _4e({kandanUrl:e.kandanUrl,explicitToken:e.explicitToken,authFilePath:e.authFilePath,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug}),mode:"local-runner"}}async function _4e(e,n={readCachedToken:Xc,validateTokenOutcome:Xf,resolveToken:Ud}){let t=e.explicitToken??n.readCachedToken(e.kandanUrl,e.authFilePath)?.accessToken;if(t===void 0)throw new Error("missing Linzumi MCP token; run linzumi auth or pass --token");let r=await n.validateTokenOutcome({kandanUrl:e.kandanUrl,accessToken:t,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug});if(r==="usable")return t;let o=r;try{return await n.resolveToken({kandanUrl:e.kandanUrl,workspaceSlug:e.workspaceSlug,channelSlug:e.channelSlug,authFilePath:e.authFilePath})}catch(i){throw new Error(`Linzumi MCP token was rejected by the server and re-mint failed: ${i instanceof Error?i.message:String(i)}`)}}function Pe(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e}}async function SX(e){try{return Pe(await e)}catch(n){let t=n instanceof Error?n.message:String(n),r=t.match(/failed: ([a-z0-9_]+)(?: detail=(.+))?$/);if(r===null)return Pe({error:t});let[,o,i]=r;return Pe(i===void 0?{error:o??t}:{error:o??t,detail:i})}}function rM(e){let n=new Map;for(let t=0;t<e.length;t+=1){let r=e[t];if(r===void 0)continue;if(!r.startsWith("--"))throw new Error(`unexpected argument ${r}`);let o=r.slice(2),i=s4e.get(o);if(i===void 0)throw new Error(`unsupported option --${o}`);if(i.kind==="boolean"){n.set(o,!0);continue}let s=e[t+1];if(s===void 0||s.startsWith("--"))throw new Error(`--${o} requires a value`);n.set(o,s),t+=1}return n}function Fn(e,n){let t=e.get(n);return typeof t=="string"&&t.trim()!==""?t:void 0}function oM(e){switch(e){case void 0:return"text";case"voice":case"text":return e;default:throw new Error("--mode must be voice or text")}}function PX(e){switch(e){case void 0:return"all";case"all":case"coding":case"onboarding-discovery":return e;default:throw new Error("--tool-scope must be all, coding, or onboarding-discovery")}}function iM(e,n){let t=Fn(e,n);if(t===void 0)throw new Error(`--${n} is required`);return t}import{execFile as b4e}from"node:child_process";import{promisify as w4e}from"node:util";var v4e=w4e(b4e),Aa="Codex MCP Credentials",rp="2DC432GLL2",op="2CWCP5BR45",S4e=async e=>{let n=await v4e("/usr/bin/security",[...e],{encoding:"utf8"});return{stdout:n.stdout,stderr:n.stderr}};function k4e(e=[rp,op]){return[...e.map(t=>t.trim()).filter(t=>t.length>0).map(t=>`teamid:${t}`),"apple:"].join(",")}function C4e(e){return["set-generic-password-partition-list","-S",e.partitionList,"-s",Aa,"-a",e.account,"-k",e.keychainPassword]}function T4e(){return["find-generic-password","-s",Aa]}function P4e(){return["dump-keychain"]}function I4e(e){let n=[],t=new Set;for(let r of e.split(`
|
|
2038
2041
|
`)){let o=r.trim();if(!o.startsWith('"acct"'))continue;let i=o.indexOf("=");if(i===-1)continue;let s=o.slice(i+1).trim(),a;s==="<NULL>"?a="":s.startsWith('"')&&s.endsWith('"')&&s.length>=2?a=s.slice(1,-1):a=s,t.has(a)||(t.add(a),n.push(a))}return n}function IX(e){let n=e.trim();return n==="<NULL>"?"":n.startsWith('"')&&n.endsWith('"')&&n.length>=2?n.slice(1,-1):n}function R4e(e){let n=[],t=new Set,r,o,i=!1,s=()=>{if(r===Aa){let a=o??"";t.has(a)||(t.add(a),n.push(a))}r=void 0,o=void 0,i=!1};for(let a of e.split(`
|
|
2039
2042
|
`)){let d=a.trim();if(d.startsWith("keychain:")){s();continue}if(d.startsWith('"svce"')){let u=d.indexOf("=");u!==-1&&(r=IX(d.slice(u+1)));continue}if(d.startsWith('"acct"')){let u=d.indexOf("=");u!==-1&&!i&&(o=IX(d.slice(u+1)),i=!0)}}return s(),n}async function E4e(e){try{let{stdout:n}=await e(P4e());return R4e(n)}catch(n){if(RX(n))return[];try{let{stdout:t}=await e(T4e());return I4e(t)}catch(t){if(RX(t))return[];throw t}}}function RX(e){if(typeof e!="object"||e===null)return!1;let n=e;if(n.code===44)return!0;let t=`${n.stderr??""}${n.message??""}`;return t.includes("could not be found")||t.includes("SecKeychainSearchCopyNext")||t.includes("errSecItemNotFound")}function D4e(e){if(typeof e=="object"&&e!==null){let n=e,t=typeof n.stderr=="string"?n.stderr.trim():"";if(t.length>0)return t;if(typeof n.message=="string")return n.message}return String(e)}async function EX(e){let n=e.platform??process.platform,t=e.write??(l=>{process.stdout.write(l)}),r=e.writeError??(l=>{process.stderr.write(l)}),o=e.exec??S4e,i=e.teamIds??[rp,op],s=k4e(i);if(n!=="darwin")return t(`fix-codex-keychain only applies on macOS (darwin). Nothing to do on ${n}.
|
|
@@ -2098,7 +2101,7 @@ Notes:
|
|
|
2098
2101
|
`)}return{ok:!1,verdict:r}}return t(`${NX(n)}
|
|
2099
2102
|
`),{ok:!1,verdict:r}}function BX(e){let n=e.write??(o=>process.stdout.write(o)),t=e.argv.includes("--repair");return n(`linzumi doctor: checking node binary integrity...
|
|
2100
2103
|
`),sM({write:n,attemptRepair:t}).ok?(n(`node binary OK: ${process.execPath}
|
|
2101
|
-
`),0):(t||n("Re-run `linzumi doctor --repair` to attempt automatic repair.\n"),1)}var Gw=["local_runner.discovery.write"],I6=new Map([["version",{kind:"boolean"}],["api-url",{kind:"value"}],["linzumi-url",{kind:"value"}],["token",{kind:"value"}],["cwd",{kind:"value"}],["codex-bin",{kind:"value"}],["claude-bin",{kind:"value"}],["codex-url",{kind:"value"}],["vm-execution",{kind:"boolean"}],["execution-mode",{kind:"value"}],["egress-mode",{kind:"value"}],["project-public-id",{kind:"value"}],["golden-image-id",{kind:"value"}],["agent-replay-fixture",{kind:"value"}],["agent-replay-provider",{kind:"value"}],["agent-replay-speed",{kind:"value"}],["launch-tui",{kind:"boolean"}],["workspace",{kind:"value"}],["channel",{kind:"value"}],["linzumi-thread-id",{kind:"value"}],["listen-user",{kind:"value"}],["model",{kind:"value"}],["reasoning-effort",{kind:"value"}],["sandbox",{kind:"value"}],["approval-policy",{kind:"value"}],["model-provider",{kind:"value"}],["llm-proxy-base-url",{kind:"value"}],["allow-port-forwarding-by-default",{kind:"boolean"}],["stream-flush-ms",{kind:"value"}],["allowed-cwd",{kind:"value"}],["forward-port",{kind:"value"}],["code-server-bin",{kind:"value"}],["fast",{kind:"boolean"}],["no-onboarding-discovery",{kind:"boolean"}],["log-file",{kind:"value"}],["debug-trace-dir",{kind:"value"}],["debug-trace-content",{kind:"value"}],["status-dir",{kind:"value"}],["timeout-ms",{kind:"value"}],["auth-file",{kind:"value"}],["agent-token-file",{kind:"value"}],["oauth-callback-host",{kind:"value"}],["auth-mode",{kind:"value"}],["format",{kind:"value"}],["command",{kind:"value"}],["owner-username",{kind:"value"}],["include-token",{kind:"boolean"}],["take-over",{kind:"boolean"}],["no-input",{kind:"boolean"}],["supervise",{kind:"boolean"}],["keep-alive",{kind:"boolean"}],["help",{kind:"boolean"}]]),J7e=new Map([["dir",{kind:"value"}],["parent-dir",{kind:"value"}],["name",{kind:"value"}],["port",{kind:"value"}],["host",{kind:"value"}],["reset",{kind:"boolean"}],["json",{kind:"boolean"}],["help",{kind:"boolean"}]]);if(K7e())try{await V7e(process.argv.slice(2))}catch(e){let n=nBe(e);n!==""&&process.stderr.write(`${n}
|
|
2104
|
+
`),0):(t||n("Re-run `linzumi doctor --repair` to attempt automatic repair.\n"),1)}var Gw=["local_runner.discovery.write"],I6=new Map([["version",{kind:"boolean"}],["api-url",{kind:"value"}],["linzumi-url",{kind:"value"}],["token",{kind:"value"}],["cwd",{kind:"value"}],["codex-bin",{kind:"value"}],["claude-bin",{kind:"value"}],["codex-url",{kind:"value"}],["vm-execution",{kind:"boolean"}],["execution-mode",{kind:"value"}],["egress-mode",{kind:"value"}],["project-public-id",{kind:"value"}],["golden-image-id",{kind:"value"}],["agent-replay-fixture",{kind:"value"}],["agent-replay-provider",{kind:"value"}],["agent-replay-speed",{kind:"value"}],["launch-tui",{kind:"boolean"}],["workspace",{kind:"value"}],["channel",{kind:"value"}],["linzumi-thread-id",{kind:"value"}],["listen-user",{kind:"value"}],["model",{kind:"value"}],["reasoning-effort",{kind:"value"}],["sandbox",{kind:"value"}],["approval-policy",{kind:"value"}],["model-provider",{kind:"value"}],["llm-proxy-base-url",{kind:"value"}],["allow-port-forwarding-by-default",{kind:"boolean"}],["no-allow-port-forwarding-by-default",{kind:"boolean"}],["stream-flush-ms",{kind:"value"}],["allowed-cwd",{kind:"value"}],["forward-port",{kind:"value"}],["code-server-bin",{kind:"value"}],["fast",{kind:"boolean"}],["no-onboarding-discovery",{kind:"boolean"}],["log-file",{kind:"value"}],["debug-trace-dir",{kind:"value"}],["debug-trace-content",{kind:"value"}],["status-dir",{kind:"value"}],["timeout-ms",{kind:"value"}],["auth-file",{kind:"value"}],["agent-token-file",{kind:"value"}],["oauth-callback-host",{kind:"value"}],["auth-mode",{kind:"value"}],["format",{kind:"value"}],["command",{kind:"value"}],["owner-username",{kind:"value"}],["include-token",{kind:"boolean"}],["take-over",{kind:"boolean"}],["no-input",{kind:"boolean"}],["supervise",{kind:"boolean"}],["keep-alive",{kind:"boolean"}],["help",{kind:"boolean"}]]),J7e=new Map([["dir",{kind:"value"}],["parent-dir",{kind:"value"}],["name",{kind:"value"}],["port",{kind:"value"}],["host",{kind:"value"}],["reset",{kind:"boolean"}],["json",{kind:"boolean"}],["help",{kind:"boolean"}]]);if(K7e())try{await V7e(process.argv.slice(2))}catch(e){let n=nBe(e);n!==""&&process.stderr.write(`${n}
|
|
2102
2105
|
`),process.exit(1)}function K7e(){let e=process.argv[1];return e===void 0?!1:B7e(import.meta.url)===Zw(e)}async function V7e(e){OO();let n=process.env[$v];if(n!==void 0&&n!==""){process.exitCode=await Y$(n,process.stdin,process.stdout);return}let t=W7e(e);switch(t.command){case"guide":process.stdout.write(OBe());return;case"version":process.stdout.write(`${TC}
|
|
2103
2106
|
`);return;case"auth":await rBe(t.args);return;case"publishToken":await oBe(t.args);return;case"paths":G7e(t.args);return;case"hello":H7e(t.args);return;case"signupMock":if(t.args.includes("--help")||t.args.includes("-h")){let{signupHelpText:r}=await Promise.resolve().then(()=>(rg(),tg));process.stdout.write(r());return}{let{parseSignupTuiOptions:r,runSignupFlow:o}=await Promise.resolve().then(()=>(rg(),tg)),i=r(t.args);await o({forceSignup:i.forceSignup,serviceUrl:i.serviceUrl,codeServerBin:i.codeServerBin,openBrowser:!1,debugLaunchPayload:i.debugLaunchPayload,signupServerClient:!1})}return;case"signup":if(t.args.includes("--help")||t.args.includes("-h")){let{signupHelpText:r}=await Promise.resolve().then(()=>(rg(),tg));process.stdout.write(r());return}{let{parseSignupTuiOptions:r,runSignupFlow:o}=await Promise.resolve().then(()=>(rg(),tg)),i=r(t.args);await o({forceSignup:i.forceSignup,serviceUrl:i.serviceUrl,codeServerBin:i.codeServerBin,openBrowser:i.openBrowser,debugLaunchPayload:i.debugLaunchPayload})}return;case"agent":await rV(t.args);return;case"mcp":await CX(t.args);return;case"fixCodexKeychain":await eBe(t.args);return;case"commanderDaemon":await X7e(t.args);return;case"remoteCodexHarnessWorker":await zX();return;case"doctor":if(t.args.includes("--harness")){let{runHarnessDoctor:r}=await Promise.resolve().then(()=>(gte(),hte));process.exitCode=r({requireBundled:t.args.includes("--require-bundled")});return}process.exitCode=BX({argv:t.args});return;case"safetySnapshots":{let{runGitSafetySnapshotsCommand:r}=await Promise.resolve().then(()=>(xte(),yte));process.exitCode=await r(t.args);return}case"devServices":{let{runDevServicesCommand:r}=await Promise.resolve().then(()=>(Ste(),vte));process.exitCode=await r(t.args);return}case"vm":await XK(t.args);return;case"node":{let{runNodeCommand:r}=await Promise.resolve().then(()=>(Fte(),jte));process.exitCode=await r(t.args);return}case"vmCodexSupervisor":await PU();return;case"agentRunner":{let r=await aBe(t.args),o=k6();try{await bl(P6(r))}finally{o?.stop()}return}case"start":{let r=await sBe(t.args);Hc(r.cwd,r.kandanUrl);let o=k6();try{await bl(P6(r))}finally{o?.stop()}return}case"run":{if(process.env.LINZUMI_THREAD_RUNNER_ROLE==="thread"){await _K(kBe(t.args));return}if(t.supervise===!0&&process.env.LINZUMI_SUPERVISED!=="1"){let{runSuperviseLoop:i}=await Promise.resolve().then(()=>(NI(),CJ));await i(t.args);return}let r=dl(t.args,["--api-url","--linzumi-url"]);if(!yBe(t.args)){try{sM({attemptRepair:!1})}catch{}ul({name:"commander.connect.started",attributes:{...gBe(dl(t.args,["--workspace"])),launch_source:qte()}},{apiUrl:r})}let o=k6();try{let i=await hBe(t.args);await bl(P6(i))}catch(i){throw await ul({name:"commander.error",severity:"ERROR",attributes:{...H7(i),launch_source:qte()}},{apiUrl:r}),i}finally{o?.stop()}return}}}function k6(){let e=HK(process.env);if(e!==void 0)return GK({thresholdMs:e})}function C6(e){return e.includes("--supervise")||e.includes("--keep-alive")}function W7e(e){let[n,...t]=e;switch(n){case void 0:case"connect":case"local-codex-runner":return t.length===0?{command:"guide",args:[]}:{command:"run",args:t,supervise:C6(t)};case"--version":return{command:"version",args:[]};case"--help":case"-h":return{command:"run",args:["--help"]};case"auth":return t[0]==="issue-publish-token"?{command:"publishToken",args:t.slice(1)}:{command:"auth",args:t};case"publish-token":return{command:"publishToken",args:t};case"paths":return{command:"paths",args:t};case"hello":case"init-hello-linzumi-demo-app":return{command:"hello",args:t};case"agent":return t[0]==="runner"?{command:"agentRunner",args:t.slice(1)}:{command:"agent",args:t};case"mcp":return{command:"mcp",args:t};case"fix-codex-keychain":return{command:"fixCodexKeychain",args:t};case"agent-runner":return{command:"agentRunner",args:t};case"commander":return["daemon","status","wait","stop"].includes(t[0]??"")?{command:"commanderDaemon",args:t}:{command:"agentRunner",args:t};case"commander-daemon":return{command:"commanderDaemon",args:["daemon",...t]};case"remote-codex-harness-worker":return{command:"remoteCodexHarnessWorker",args:t};case"doctor":return{command:"doctor",args:t};case"safety-snapshots":return{command:"safetySnapshots",args:t};case"dev-services":return{command:"devServices",args:t};case"vm":return{command:"vm",args:t};case"node":return{command:"node",args:t};case"vm-codex-supervisor":return{command:"vmCodexSupervisor",args:t};case"commander-status":return{command:"commanderDaemon",args:["status",...t]};case"commander-wait":return{command:"commanderDaemon",args:["wait",...t]};case"commander-stop":return{command:"commanderDaemon",args:["stop",...t]};case"signup":return t.includes("--mock")?{command:"signupMock",args:t}:t.includes("--email")||t.includes("--agent-name")?{command:"agent",args:e}:{command:"signup",args:t};case"claim":case"login-link":case"thread":case"channel":case"post":case"inbox":case"done":case"codex":case"editor":return{command:"agent",args:e};case"start":return{command:"start",args:t};case"run":return{command:"run",args:t,supervise:C6(t)};default:return{command:"run",args:e,supervise:C6(e)}}}function H7e(e){let n=yi(e,J7e);if(n.get("help")===!0){process.stdout.write(DBe());return}let t=fe(n,"dir"),r=fe(n,"parent-dir"),o=fe(n,"name"),i=EBe(n,"port"),s=fe(n,"host"),a=tl({...t===void 0?{}:{rootPath:t},...r===void 0?{}:{parentDir:bp(r)},...o===void 0?{}:{name:o},...i===void 0?{}:{port:i},...s===void 0?{}:{host:s},reset:n.get("reset")===!0});if(n.get("json")===!0){process.stdout.write(`${JSON.stringify({project_dir:a.root,dev_command:a.startCommand,preview_url:a.previewUrl,port:a.port,host:a.host})}
|
|
2104
2107
|
`);return}process.stdout.write(`project_dir: ${a.root}
|
|
@@ -2143,7 +2146,7 @@ Options:
|
|
|
2143
2146
|
`}async function sBe(e,n={resolveToken:Ud,fetchStartTarget:s8,validateToken:n_,buildDependencyStatus:aa,resolveEditorRuntime:il,ensureRunnerId:nr,probeClaudeCodeAvailability:Oc}){let{cwdArg:t,flagArgs:r}=M6(e),o=yi(r);o.get("help")===!0&&(process.stdout.write(ABe()),process.exit(0)),_Be(o);let i=qs(o)??Kt,s=Ef(bp(t??process.cwd())).cwd,a=fs(s)[0]??s,d=o.has("allowed-cwd")?Ec(Mf(fe(o,"allowed-cwd")),ev):[],u=Array.from(new Set([a,...d])),c=am(fe(o,"codex-bin")),l=fe(o,"code-server-bin"),p=o.get("no-onboarding-discovery")===!0?void 0:"start",m=await n.buildDependencyStatus({cwd:a,codexBin:c.codexBin,codexBinSource:c.source,codeServerBin:l});da(m);let f=m.codex.command,y=m.codex.source??c.source,x=fe(o,"token"),b=fe(o,"auth-file"),S=fe(o,"oauth-callback-host"),v=A6(o),w=G=>{process.stderr.write(`${vR(G)}
|
|
2144
2147
|
`)},k=await n.resolveToken({kandanUrl:i,explicitToken:x,onboarding:p==="start"?"start":void 0,authFilePath:b,callbackHost:S,authMode:v,requiredScopes:p==="start"?Gw:void 0,reportRejectedCachedToken:w}),R=await n.fetchStartTarget({kandanUrl:i,accessToken:k}),O=await n.validateToken({kandanUrl:i,accessToken:k,workspaceSlug:R.workspaceSlug,channelSlug:R.channelSlug,requiredScopes:p==="start"?Gw:void 0})?k:await mBe({kandanUrl:i,explicitToken:x,target:R,authFilePath:b,callbackHost:S,authMode:v,requiredScopes:p==="start"?Gw:void 0,resolveToken:n.resolveToken,reportRejectedCachedToken:w}),E=await n.resolveEditorRuntime({kandanUrl:i,token:O,customCodeServerBin:l,fetchImpl:Sc(ei())}),j=await n.buildDependencyStatus({cwd:a,codexBin:f,codexBinSource:y,codeServerBin:E.codeServerBin,editorRuntime:E.status});da(j);let z=fe(o,"claude-bin"),M=await R6(n,a,z),J=M.status==="logged_in",K=wR({kandanUrl:i,token:O,explicitToken:x,authFilePath:b});return{kandanUrl:i,token:O,tokenExpiresAt:K,authFilePath:b,runnerId:(n.ensureRunnerId??nr)(i),workspaceSlug:R.workspaceSlug,cwd:a,codexBin:f,codexUrl:fe(o,"codex-url"),agentReplay:D6(o),launchSource:Yw(),launchTui:o.get("launch-tui")===!0,vmExecution:E6(o),fast:o.get("fast")===!0,logFile:fe(o,"log-file"),debugTrace:Qw(o),allowedCwds:u,projectDiscoveryCwdIsSelectedRoot:!0,allowedForwardPorts:Af(fe(o,"forward-port")),codeServerBin:E.codeServerBin,editorRuntime:E.runtime,socketFactory:kc(ei()),dependencyStatus:j,claudeCodeAvailable:J,claudeCodeAuthStatus:M.status,claudeCodeAuthProbeDetail:M.detail,claudeCodeBin:z,runtimeDefaults:Xw(o),onboardingDiscovery:p,channelSession:{workspaceSlug:R.workspaceSlug,channelSlug:R.channelSlug,kandanThreadId:fe(o,"linzumi-thread-id"),listenUser:fe(o,"listen-user")??bBe(O),model:fe(o,"model"),reasoningEffort:fe(o,"reasoning-effort"),sandbox:fe(o,"sandbox"),approvalPolicy:fe(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:$6(o,"stream-flush-ms")}}}async function aBe(e,n={readTextFile:dBe,buildDependencyStatus:aa,resolveEditorRuntime:il,ensureRunnerId:nr,probeClaudeCodeAvailability:Oc}){let{cwdArg:t,flagArgs:r}=M6(e),o=yi(r);if(o.get("help")===!0&&(process.stdout.write($Be()),process.exit(0)),uBe(o),t!==void 0&&o.has("cwd"))throw new Error("linzumi commander accepts either <folder> or --cwd, not both");let i=fe(o,"agent-token-file")??SR(),s=kR(i,n.readTextFile),a=s.channelId;cBe(o,a);let d=a===void 0?void 0:{workspaceSlug:s.workspaceId,channelSlug:a,kandanThreadId:fe(o,"linzumi-thread-id"),listenUser:fe(o,"listen-user")??lBe(s.ownerUsername),model:fe(o,"model"),reasoningEffort:fe(o,"reasoning-effort"),sandbox:fe(o,"sandbox"),approvalPolicy:fe(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:$6(o,"stream-flush-ms")},u=qs(o)??pBe(s.apiUrl),c=t??fe(o,"cwd"),l=Ef(bp(c??process.cwd())).cwd,p=c===void 0&&!o.has("allowed-cwd")?YT(u):{allowedCwds:[],missingAllowedCwds:[]},m=o.has("allowed-cwd")?Ec(Mf(fe(o,"allowed-cwd")),ev):[],f=o.has("allowed-cwd")?m.length>0?m:fs(l):c===void 0?p.allowedCwds.length>0?[...p.allowedCwds]:fs(l):fs(l),y=f[0]??l,x=o.has("allowed-cwd")||c===void 0&&p.allowedCwds.length>0,b=am(fe(o,"codex-bin")),S=fe(o,"code-server-bin"),v=await n.buildDependencyStatus({cwd:y,codexBin:b.codexBin,codexBinSource:b.source,codeServerBin:S});da(v);let w=v.codex.command,k=v.codex.source??b.source,R=await n.resolveEditorRuntime({kandanUrl:u,token:s.commanderToken,customCodeServerBin:S,fetchImpl:Sc(ei())}),P=await n.buildDependencyStatus({cwd:y,codexBin:w,codexBinSource:k,codeServerBin:R.codeServerBin,editorRuntime:R.status});da(P);let O=fe(o,"claude-bin"),E=await R6(n,y,O),j=E.status==="logged_in";return{kandanUrl:u,token:s.commanderToken,runnerId:(n.ensureRunnerId??nr)(u),workspaceSlug:s.workspaceId,cwd:y,codexBin:w,codexUrl:fe(o,"codex-url"),agentReplay:D6(o),launchSource:Yw(),launchTui:o.get("launch-tui")===!0,vmExecution:E6(o),fast:o.get("fast")===!0,logFile:fe(o,"log-file"),debugTrace:Qw(o),allowedCwds:f,missingAllowedCwds:p.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:x,projectDiscoveryImplicitCwdAliases:x?void 0:f,allowedForwardPorts:Af(fe(o,"forward-port")),codeServerBin:R.codeServerBin,editorRuntime:R.runtime,socketFactory:kc(ei()),dependencyStatus:P,claudeCodeAvailable:j,claudeCodeAuthStatus:E.status,claudeCodeAuthProbeDetail:E.detail,claudeCodeBin:O,runtimeDefaults:Xw(o),channelSession:d}}function dBe(e){return q7e(e)?N7e(e,"utf8"):void 0}function uBe(e){let n=["workspace","channel","token","auth-file","oauth-callback-host"].filter(t=>e.has(t));if(n.length>0)throw new Error(`linzumi commander uses the claimed human Commander token scope; remove ${n.map(t=>`--${t}`).join(", ")}.`)}function cBe(e,n){if(!(n!==void 0||!e.has("linzumi-thread-id")))throw new Error("linzumi commander cannot bind --linzumi-thread-id because the agent token file has no channelId")}function lBe(e){if(e!==void 0)return e;throw new Error("agent token file is missing ownerUsername; rerun linzumi claim or pass --listen-user explicitly")}function pBe(e){let n=fBe(e);switch(n.protocol){case"https:":return n.protocol="wss:",T6(n.toString());case"http:":return n.protocol="ws:",T6(n.toString());case"wss:":case"ws:":return T6(n.toString());default:throw new Error("agent token file apiUrl must use http, https, ws, or wss")}}function fBe(e){try{return new URL(e)}catch{throw new Error("agent token file apiUrl is not a valid URL")}}function T6(e){return e.endsWith("/")?e.slice(0,-1):e}async function mBe(e){if(e.explicitToken!==void 0)throw new Error(`provided local runner token is not scoped to ${e.target.workspaceSlug}/${e.target.channelSlug}`);return await e.resolveToken({kandanUrl:e.kandanUrl,workspaceSlug:e.target.workspaceSlug,channelSlug:e.target.channelSlug,authFilePath:e.authFilePath,callbackHost:e.callbackHost,authMode:e.authMode,requiredScopes:e.requiredScopes,reportRejectedCachedToken:e.reportRejectedCachedToken})}async function R6(e,n,t){let r=e.probeClaudeCodeAvailability;if(r===void 0)return{status:"probe_failed",transient:!0};try{return await r({cwd:n,claudeBin:t})}catch(o){return console.error(`claude code availability probe failed; continuing with Codex only: ${o instanceof Error?o.message:String(o)}`),{status:"probe_failed",transient:!0}}}async function hBe(e,n={resolveToken:Ud,buildDependencyStatus:aa,resolveEditorRuntime:il,ensureRunnerId:nr,probeClaudeCodeAvailability:Oc}){let t=yi(e);t.get("help")===!0&&(process.stdout.write(Bte()),process.exit(0)),t.get("version")===!0&&(process.stdout.write(`${TC}
|
|
2145
2148
|
`),process.exit(0)),wBe(t);let r=fe(t,"workspace"),o=qs(t)??Kt,i=Ef(bp(fe(t,"cwd")??process.cwd())).cwd,s=fs(i),a=t.has("allowed-cwd")?{allowedCwds:[],missingAllowedCwds:[]}:YT(o),d=t.has("allowed-cwd")?Ec(Mf(fe(t,"allowed-cwd")),ev):[...a.allowedCwds],u=s.some(E=>d.includes(E)),c=am(fe(t,"codex-bin")),l=fe(t,"code-server-bin"),p=t.get("no-onboarding-discovery")===!0?void 0:"start",m=await n.buildDependencyStatus({cwd:i,codexBin:c.codexBin,codexBinSource:c.source,codeServerBin:l});da(m);let f=m.codex.command,y=m.codex.source??c.source,x=fe(t,"token"),b=fe(t,"auth-file"),S=A6(t),v=await n.resolveToken({kandanUrl:o,explicitToken:x,workspaceSlug:r,authFilePath:b,callbackHost:fe(t,"oauth-callback-host"),authMode:S,requiredScopes:p==="start"?Gw:void 0,reportRejectedCachedToken:E=>{process.stderr.write(`${vR(E)}
|
|
2146
|
-
`)}}),w=await n.resolveEditorRuntime({kandanUrl:o,token:v,customCodeServerBin:l,fetchImpl:Sc(ei())}),k=await n.buildDependencyStatus({cwd:i,codexBin:f,codexBinSource:y,codeServerBin:w.codeServerBin,editorRuntime:w.status});da(k);let R=fe(t,"claude-bin"),P=await R6(n,i,R),O=P.status==="logged_in";return{kandanUrl:o,token:v,tokenExpiresAt:wR({kandanUrl:o,token:v,explicitToken:x,authFilePath:b}),authFilePath:b,runnerId:(n.ensureRunnerId??nr)(o),cwd:i,codexBin:f,codexUrl:fe(t,"codex-url"),agentReplay:D6(t),launchSource:Yw(),launchTui:t.get("launch-tui")===!0,vmExecution:E6(t),fast:t.get("fast")===!0,logFile:fe(t,"log-file"),debugTrace:Qw(t),allowedCwds:Array.from(new Set([...s,...d])),missingAllowedCwds:a.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:u,projectDiscoveryImplicitCwdAliases:u?void 0:s,allowedForwardPorts:Af(fe(t,"forward-port")),codeServerBin:w.codeServerBin,editorRuntime:w.runtime,socketFactory:kc(ei()),dependencyStatus:k,claudeCodeAvailable:O,claudeCodeAuthStatus:P.status,claudeCodeAuthProbeDetail:P.detail,claudeCodeBin:R,workspaceSlug:r??qO(v),runtimeDefaults:Xw(t),onboardingDiscovery:p,channelSession:void 0,lockTakeover:{takeOverWithoutPrompt:t.get("take-over")===!0,forceNonInteractive:t.get("no-input")===!0}}}function E6(e){return e.get("vm-execution")===!0||qx()}function D6(e){let n=fe(e,"agent-replay-fixture");if(n!==void 0)return{fixturePath:n,provider:_5(fe(e,"agent-replay-provider")),clockMode:x5(fe(e,"agent-replay-speed"))}}function Qw(e){let n=fe(e,"debug-trace-dir");if(n!==void 0)return{dir:n,contentMode:oO(fe(e,"debug-trace-content"))}}function Xw(e){return{model:fe(e,"model"),reasoningEffort:fe(e,"reasoning-effort"),approvalPolicy:fe(e,"approval-policy"),sandbox:fe(e,"sandbox"),allowPortForwardingByDefault:!
|
|
2149
|
+
`)}}),w=await n.resolveEditorRuntime({kandanUrl:o,token:v,customCodeServerBin:l,fetchImpl:Sc(ei())}),k=await n.buildDependencyStatus({cwd:i,codexBin:f,codexBinSource:y,codeServerBin:w.codeServerBin,editorRuntime:w.status});da(k);let R=fe(t,"claude-bin"),P=await R6(n,i,R),O=P.status==="logged_in";return{kandanUrl:o,token:v,tokenExpiresAt:wR({kandanUrl:o,token:v,explicitToken:x,authFilePath:b}),authFilePath:b,runnerId:(n.ensureRunnerId??nr)(o),cwd:i,codexBin:f,codexUrl:fe(t,"codex-url"),agentReplay:D6(t),launchSource:Yw(),launchTui:t.get("launch-tui")===!0,vmExecution:E6(t),fast:t.get("fast")===!0,logFile:fe(t,"log-file"),debugTrace:Qw(t),allowedCwds:Array.from(new Set([...s,...d])),missingAllowedCwds:a.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:u,projectDiscoveryImplicitCwdAliases:u?void 0:s,allowedForwardPorts:Af(fe(t,"forward-port")),codeServerBin:w.codeServerBin,editorRuntime:w.runtime,socketFactory:kc(ei()),dependencyStatus:k,claudeCodeAvailable:O,claudeCodeAuthStatus:P.status,claudeCodeAuthProbeDetail:P.detail,claudeCodeBin:R,workspaceSlug:r??qO(v),runtimeDefaults:Xw(t),onboardingDiscovery:p,channelSession:void 0,lockTakeover:{takeOverWithoutPrompt:t.get("take-over")===!0,forceNonInteractive:t.get("no-input")===!0}}}function E6(e){return e.get("vm-execution")===!0||qx()}function D6(e){let n=fe(e,"agent-replay-fixture");if(n!==void 0)return{fixturePath:n,provider:_5(fe(e,"agent-replay-provider")),clockMode:x5(fe(e,"agent-replay-speed"))}}function Qw(e){let n=fe(e,"debug-trace-dir");if(n!==void 0)return{dir:n,contentMode:oO(fe(e,"debug-trace-content"))}}function Xw(e){let n=e.get("allow-port-forwarding-by-default")===!0,t=e.get("no-allow-port-forwarding-by-default")===!0;if(n&&t)throw new Error("use only one of --allow-port-forwarding-by-default or --no-allow-port-forwarding-by-default");return{model:fe(e,"model"),reasoningEffort:fe(e,"reasoning-effort"),approvalPolicy:fe(e,"approval-policy"),sandbox:fe(e,"sandbox"),allowPortForwardingByDefault:!t}}function Yw(){return process.env.LINZUMI_ELECTRON_AUTO_CONNECT_RUNNER==="1"?"electron_auto_connect":void 0}function qte(){return Yw()??"cli"}function gBe(e){return e===void 0?{}:{workspace:e}}function yBe(e){return e.some(n=>["--help","-h","--version"].includes(n))}function qs(e){let n=fe(e,"api-url"),t=fe(e,"linzumi-url");if(n!==void 0&&t!==void 0&&n!==t)throw new Error("use only one of --api-url or --linzumi-url");return n??t}function Ute(e){let n=qs(e);if(n===void 0)throw new Error("missing required flag: --api-url or --linzumi-url");return n}function yi(e,n=I6){let t=new Map;for(let r=0;r<e.length;r+=1){let o=e[r];if(o===void 0||!o.startsWith("--"))throw new Error(`invalid argument: ${o??""}`);let i=o.slice(2),s=n.get(i);if(s===void 0)throw new Error(`invalid flag: --${i}`);if(s.kind==="boolean"){t.set(i,!0);continue}let a=e[r+1];if(a===void 0||a.startsWith("--"))throw new Error(`missing value for --${i}`);t.set(i,a),r+=1}return t}function M6(e){let n,t=[];for(let r=0;r<e.length;r+=1){let o=e[r];if(o===void 0)continue;if(!o.startsWith("--")){if(n!==void 0)throw new Error("linzumi start accepts at most one folder path");n=o;continue}t.push(o);let i=o.slice(2),s=I6.get(i);if(s===void 0)throw new Error(`invalid flag: --${i}`);if(s?.kind==="value"){let a=e[r+1];a!==void 0&&(t.push(a),r+=1)}}return{cwdArg:n,flagArgs:t}}function xBe(e){let n=[];for(let t=0;t<e.length;t+=1){let r=e[t];if(r===void 0)continue;let o=r.startsWith("--")?r.slice(2):void 0,i=o===void 0?void 0:I6.get(o);if(o==="log-file"||o==="status-dir"){i?.kind==="value"&&(t+=1);continue}if(n.push(r),i?.kind==="value"){let s=e[t+1];s!==void 0&&(n.push(s),t+=1)}}return n}function _Be(e){let n=["workspace","channel"].filter(t=>e.has(t));if(n.length>0)throw new Error(`linzumi start chooses its workspace during browser onboarding; remove ${n.map(t=>`--${t}`).join(", ")} or use linzumi connect --workspace for an explicit workspace.`)}function bp(e){return e==="~"?zte():e.startsWith("~/")?Zw(zte(),e.slice(2)):Zw(e)}function bBe(e){let n=_o(e).actorUsername;if(n!==void 0)return n;throw new Error("missing --listen-user and authenticated user is unavailable")}function wBe(e){let n=["channel","linzumi-thread-id","listen-user"].filter(t=>e.has(t));if(n.length!==0)throw new Error(`linzumi connect starts a workspace Commander; remove ${n.map(t=>`--${t}`).join(", ")}.`)}function vBe(e){let n=fe(e,"channel"),t=fe(e,"workspace");return n===void 0?t===void 0?void 0:{workspaceSlug:t}:n.includes("/")?SBe(n):{workspaceSlug:t??RBe(e,"workspace"),channelSlug:n}}function SBe(e){let[n,t,...r]=e.split("/");if(n===void 0||n.trim()===""||t===void 0||t.trim()===""||r.length>0)throw new Error("--channel must be CHANNEL or WORKSPACE/CHANNEL");return{workspaceSlug:n.trim(),channelSlug:t.trim()}}function P6(e){if(e.threadProcess?.role==="thread")return e;let n=()=>l$()??z7e();return{...e,machineId:yr(e.kandanUrl)===yr(Kt)?XT(void 0,n):s_(e.kandanUrl,void 0,n),machineFingerprint:hg(),machineFingerprintV2:p$()}}function ev(e){process.stderr.write(`Warning: ignoring allowed cwd root ${e}: it does not exist (dropped from this runner's advertised roots)
|
|
2147
2150
|
`)}function kBe(e){let n=yi(e),t=qs(n)??Kt,r=Ef(bp(fe(n,"cwd")??process.cwd())).cwd,o=n.has("allowed-cwd")?fC(Mf(fe(n,"allowed-cwd"))):{allowed:[],missing:[]};for(let d of o.missing)ev(d);let i=o.allowed.length>0?o.allowed:fs(r),s=PBe(),a=IBe();return{kandanUrl:t,token:a,runnerId:`thread-codex-worker:${s}`,machineId:void 0,runnerLockConfigPath:void 0,workspaceSlug:fe(n,"workspace"),cwd:r,codexBin:fe(n,"codex-bin")??am(void 0).codexBin,codexUrl:void 0,launchTui:!1,vmExecution:n.get("vm-execution")===!0,executionMode:fR(fe(n,"execution-mode")),egressMode:mR(fe(n,"egress-mode")),projectPublicId:Cm(fe(n,"project-public-id")),goldenImagePublicId:Cm(fe(n,"golden-image-id")),fast:n.get("fast")===!0?!0:void 0,logFile:fe(n,"log-file"),debugTrace:Qw(n),allowedCwds:i,missingAllowedCwds:o.missing,allowedForwardPorts:Af(fe(n,"forward-port")),codeServerBin:void 0,editorRuntime:void 0,socketFactory:void 0,runtimeDefaults:Xw(n),threadProcess:{role:"thread",kandanThreadId:s},codexModelProvider:TBe(n),linzumiAgentMcpToken:CBe(),channelSession:void 0}}function CBe(){let e=process.env.LINZUMI_THREAD_RUNNER_AGENT_MCP_TOKEN?.trim();return e===void 0||e===""?void 0:e}function TBe(e){let n=fe(e,"model-provider");if(n===void 0)return;if(n!=="wafer"&&n!=="openai-proxy")throw new Error(`unsupported --model-provider: ${n}`);let t=fe(e,"llm-proxy-base-url"),r=process.env.LINZUMI_LLM_PROXY_TOKEN?.trim();if(t===void 0)throw new Error(`--model-provider ${n} requires --llm-proxy-base-url`);if(r===void 0||r==="")throw new Error(`--model-provider ${n} requires the LINZUMI_LLM_PROXY_TOKEN env credential`);return{provider:n,llmProxyBaseUrl:t,llmProxyToken:r}}function PBe(){let e=process.env.LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID;if(e===void 0||e.trim()==="")throw new Error("thread runner is missing LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID");return e}function IBe(){let e=process.env.LINZUMI_THREAD_RUNNER_TOKEN;if(e===void 0||e.trim()==="")throw new Error("thread runner is missing LINZUMI_THREAD_RUNNER_TOKEN");return e}function RBe(e,n){let t=fe(e,n);if(t===void 0)throw new Error(`missing --${n}`);return t}function fe(e,n){let t=e.get(n);if(typeof t=="string"&&t.trim()!=="")return t}function A6(e){let n=fe(e,"auth-mode")??"browser",t=fe(e,"oauth-callback-host");switch(n){case"browser":return{kind:"browser",callbackHost:t};case"device":if(t!==void 0)throw new Error("--oauth-callback-host cannot be used with --auth-mode device");return{kind:"device"};default:throw new Error("--auth-mode must be browser or device")}}function $6(e,n){let t=fe(e,n);if(t===void 0)return;let r=Number(t);if(Number.isInteger(r)&&r>0)return r;throw new Error(`--${n} must be a positive integer`)}function EBe(e,n){let t=fe(e,n);if(t===void 0)return;let r=Number(t);if(Number.isInteger(r)&&r>0&&r<=65535)return r;throw new Error(`--${n} must be a TCP port from 1 to 65535`)}function Bte(){return`Linzumi local Codex runner
|
|
2148
2151
|
|
|
2149
2152
|
Usage:
|