@linzumi/cli 1.0.201 → 1.0.203
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/cloud-supervisor.mjs +1 -1
- package/dist/impl-res/index.js +154 -153
- package/dist/impl-ts/cloud-supervisor.mjs +1 -1
- package/dist/impl-ts/index.js +3 -3
- package/package.json +1 -1
package/dist/impl-ts/index.js
CHANGED
|
@@ -40,7 +40,7 @@ ${u}`.split(`
|
|
|
40
40
|
`,"utf8")}catch{return}}function AC(){let e=process.env.LINZUMI_CLI_AUDIT_LOG?.trim();return e===void 0||e===""?EC(RC(),".linzumi","logs","command-events.jsonl"):e}function w_(){let e=process.env.LINZUMI_RUNNER_LOG_FILE?.trim();return e===void 0||e===""?EC(RC(),".linzumi","logs","linzumi-runner.log"):e}function Zi(e){return wF(e)}function MC(e,n){return epe(n)?Ud:typeof e=="string"?SF(e):Array.isArray(e)?n==="args"?Xle(e):e.map(t=>MC(t,void 0)):e!==null&&typeof e=="object"?wF(e):e}function wF(e){let n=typeof e.name=="string"?e.name.toLowerCase():void 0,t=n==="authorization"||n==="cookie"||n==="set-cookie";return Object.fromEntries(Object.entries(e).filter(([r])=>r!=="runner_console").map(([r,o])=>[r,t&&r==="value"?Ud:MC(o,r)]))}function Zle(e,n){let t=Qle(n.runner_console);return t===void 0?e:{...e,...Zi(t)}}function Qle(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Xle(e){let n=!1;return e.map(t=>{if(typeof t!="string")return n=!1,MC(t,void 0);if(n)return n=!1,Ud;let[r,o]=Yle(t);return Hle.has(r)?o===void 0?(n=!0,t):`${r}=${Ud}`:SF(t)})}function Yle(e){let n=e.indexOf("=");return n===-1?[e,void 0]:[e.slice(0,n),e.slice(n+1)]}function epe(e){return e===void 0?!1:/^(authorization|cookie|set-cookie|password)$/i.test(e)||/(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$/i.test(e)}function SF(e){return npe(e).replace(/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,Ud)}function npe(e){let n;try{n=new URL(e)}catch{return tpe(e)}for(let t of[...n.searchParams.keys()])xF.has(t.toLowerCase())&&n.searchParams.set(t,Ud);return n.toString()}function tpe(e){let n=e.indexOf("?"),t=e.indexOf("#");if(n===-1||t!==-1&&t<n)return e;let r=e.slice(0,n),o=t===-1?e.slice(n+1):e.slice(n+1,t),i=t===-1?"":e.slice(t),s=new URLSearchParams(o),a=!1;for(let d of[...s.keys()])xF.has(d.toLowerCase())&&(s.set(d,Ud),a=!0);switch(a){case!0:return`${r}?${s.toString()}${i}`;case!1:return e}}function rpe(e){return e.closed||e.destroyed?Promise.resolve():new Promise((n,t)=>{e.once("error",t),e.end(n)})}var Ud,xF,Hle,Gle,zt=U(()=>{"use strict";v_();Ud="<SENSITIVE_DATA>",xF=gF(new Set(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"])),Hle=new Set(["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"]),Gle=3e4});function ipe(e){let n=new Map;return{report:r=>{let o=r.key??r.message,i=r.audience??"user",s=e.nowMs(),a=n.get(o),d=a===void 0?{key:o,severity:r.severity,message:r.message,audience:i,count:1,firstAtMs:s,lastAtMs:s}:{...a,severity:r.severity,message:r.message,audience:i,count:a.count+1,lastAtMs:s};n.delete(o),n.set(o,d);for(let u of n.keys()){if(n.size<=ope)break;n.delete(u)}return e.writeAuditEvent(kF,{severity:d.severity,audience:d.audience,key:d.key,message:d.message,count:d.count}),e.tuiActive()?(d.audience==="user"&&e.reportConsoleEvent(kF,{severity:d.severity,key:d.key,message:d.message,count:d.count}),d):(d.count===1&&e.writeStderr(`${spe(d.severity)}${d.message}
|
|
41
41
|
`),d)},notices:()=>Array.from(n.values()),reset:()=>n.clear()}}function spe(e){switch(e){case"warning":return"WARNING: ";case"error":return"ERROR: ";case"info":return""}}function CF(e){DC=e}function or(e){return ape.report(e)}var ope,kF,DC,ape,Uf=U(()=>{"use strict";zt();ope=50,kF="runner.notice";DC={tuiActive:()=>!1,reportConsoleEvent:()=>{}};ape=ipe({tuiActive:()=>DC.tuiActive(),writeAuditEvent:(e,n)=>ye(e,n),reportConsoleEvent:(e,n)=>DC.reportConsoleEvent(e,n),writeStderr:e=>{process.stderr.write(e)},nowMs:Date.now})});import{realpath as S_,writeFile as dpe,mkdir as upe,open as cpe}from"node:fs/promises";import{constants as TF}from"node:fs";import{homedir as lpe}from"node:os";import{basename as qC,extname as IF,isAbsolute as RF,join as PF,relative as EF,resolve as $C}from"node:path";async function jC(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=PF(e.cwd,".kandan",e.attachmentDirectoryName,`message-${n.seq}`);await upe(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=gpe(i.fileName??i.id??`attachment-${o+1}`,o),d=PF(t,a),u=DF(e.kandanUrl,s),c=await(e.fetch??globalThis.fetch)(u,{headers:fpe(e,u)});if(!c.ok)throw new Error(`attachment ${a} download failed: ${c.status} ${c.statusText}`);let l=Buffer.from(await c.arrayBuffer());await dpe(d,l),r.push({fileName:a,contentType:i.contentType,sizeBytes:i.sizeBytes??l.byteLength,path:d,isImage:ype(i.contentType,i.kind),dataBase64:l.toString("base64")})}return r}function LC(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: source/text files of any language are fine, as are common document, image, patch, archive, or video types."]:["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.","Attach files to the reply you already posted with target.kind=latest_assistant_message; only use new_message when you have not posted a reply yet, and never repeat your reply text as the new message body."];return[e,...r,"",...o].join(`
|
|
42
42
|
`)}function MF(e){return e.flatMap(n=>n.isImage?[{type:"localImage",path:n.path}]:[])}async function FC(e,n){let t=await jC(e,n),r=LC(n.body,t,{uploadInstructionMode:"footer"}),o=t.flatMap(i=>{let s=_pe(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 ppe(e,n,t){if(y(t.kind)!=="codex_assistant_message")return{fileIds:[],attachedRawPaths:[]};let r=await S_(e.cwd),o=await jF(r),i=await xpe(n,r);if(i.length===0)return{fileIds:[],attachedRawPaths:[]};let s=await Promise.all(i.map(async({rawPath:c,resolvedPath:l})=>{let p=await qF(o,l);return{rawPath:c,fileName:qC(l),contentType:LF(l,p.classification),sizeBytes:p.bytes.byteLength,bytes:p.bytes}})),a=await Rpe(e.kandan,e.topic,"session:prepare_message_uploads",{workspace:e.workspace,channel:e.channel,files:s.map(c=>({file_name:c.fileName,content_type:c.contentType,size_bytes:c.sizeBytes}))}),d=$e(a.uploads)??[];if(d.length!==s.length)throw new Error("Kandan attachment prepare response count mismatch");return await Promise.all(s.map(async(c,l)=>{let p=A(d[l]),f=y(p?.upload_url),g=y(p?.upload_method)??"PUT";if(f===void 0)throw new Error("Kandan attachment prepare response missing upload_url");let m=c.bytes,_=m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength),b=await(e.fetch??globalThis.fetch)(DF(e.kandanUrl,f),{method:g,headers:{"content-type":c.contentType},body:_});if(!b.ok)throw new Error(`Kandan attachment upload failed for ${c.fileName}: ${b.status} ${b.statusText}`)})),{fileIds:d.map(c=>{let l=y(A(c)?.file_id);if(l===void 0)throw new Error("Kandan attachment prepare response missing file_id");return l}),attachedRawPaths:s.map(c=>c.rawPath)}}async function NC(e,n){let t=await S_(e),r=await jF(t),o=await $F(t,n),i=await qF(r,o);return{fileName:qC(o),contentType:LF(o,i.classification),sizeBytes:i.bytes.byteLength,bytes:i.bytes}}function DF(e,n){let t=hpe(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 fpe(e,n){return mpe(e.kandanUrl,n)?{authorization:`Bearer ${e.token}`}:{}}function mpe(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 hpe(e){try{return new URL(e).toString()}catch{return}}function gpe(e,n){let t=qC(e).replaceAll(/[^\w.\- ]/g,"_").trim(),r=t===""||t==="."||t===".."?`attachment-${n+1}`:t;return`${n+1}-${r}`}function ype(e,n){return e!==void 0&&e.toLowerCase().startsWith("image/")?!0:n?.toLowerCase()==="image"}function _pe(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 xpe(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=OF(a);if(d==="")continue;if(d===void 0)break;if(Ipe(d))continue;if(!Ppe(d))break;let u;try{u=await $F(n,d)}catch(c){if(c.code==="ENOENT")break;throw c}o.has(u)||(o.add(u),i.push({rawPath:d,resolvedPath:u}))}return i}function OF(e){if(e==="")return"";let n=e.startsWith("- ")?e.slice(2).trim():e;if(n!=="")return n.replace(/^`|`$/g,"")}async function $F(e,n){if(n==="")throw new Error("Kandan attachment path must not be empty");let t=RF(n)?$C(n):$C(e,n);return await S_(t)}async function qF(e,n){let t=e.find(s=>bpe(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(EF(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=await cpe(n,TF.O_RDONLY|TF.O_NONBLOCK);try{if(!(await i.stat()).isFile())throw new Error(`Kandan attachment path is not a file: ${n}`);let a=IF(n).toLowerCase();if(AF.has(a))return{classification:"known-type",bytes:await i.readFile()};let d=Buffer.alloc(OC),{bytesRead:u}=await i.read(d,0,OC,0);if(d.subarray(0,u).includes(0))throw new Error(`Kandan attachment upload requires a known media/document type or text content (binary content is not allowed): ${n}`);let c=await i.readFile();if(c.subarray(0,OC).includes(0))throw new Error(`Kandan attachment upload requires a known media/document type or text content (binary content is not allowed): ${n}`);return{classification:"text-content",bytes:c}}finally{await i.close()}}async function jF(e){let n=[{path:e,label:"runner cwd"}],t=process.env.HOME?.trim(),r=$C(t===void 0||t===""?lpe():t,"Downloads");try{let o=await S_(r);n.some(i=>i.path===o)||n.push({path:o,label:"~/Downloads"})}catch{return n}return n}function bpe(e,n){let t=EF(e,n);return t===""||!t.startsWith("..")&&!RF(t)}function vpe(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 LF(e,n){if(e.toLowerCase().endsWith(".py"))return"text/x-python";let r=vpe(e);return n==="text-content"&&r==="application/octet-stream"?"text/plain":r}function wpe(e,n=[]){let t=e.split(/\r?\n/),r=t.findIndex(a=>a.trim().toLowerCase()==="kandan attachments:");if(r===-1)return e;let o=[],i=!1;for(let a of t.slice(r+1)){if(a.trim()===""){switch(i){case!0:o.push(a);break;case!1:break}continue}Cpe(a,n)||(o.push(a),i=!0)}let s=[...t.slice(0,r),...o];for(;s.length>0&&s[s.length-1]?.trim()==="";)s.pop();return s.join(`
|
|
43
|
-
`)}function Spe(e,n,t=[]){let r=wpe(e,t);switch(r.trim()===""&&n.length>0){case!0:return"Attached file.";case!1:return r}}function kpe(e,n){return y(e.kind)==="codex_assistant_message"?{...e,content:n}:e}function Cpe(e,n){let t=OF(e.trim());return t===""?!0:t===void 0?!1:n.includes(t)}function Ppe(e){let n=IF(e).toLowerCase();return n===""?!/\s/.test(e):AF.has(n)||Tpe.test(n)}function Ipe(e){return e.split(/[\\/]+/).some(n=>n.startsWith("."))}async function Rpe(e,n,t,r){let o=await e.push(n,t,r);if(ne(o)&&o.status==="ok"&&ne(o.response))return o.response;throw new Error(`kandan push failed: ${t}: ${JSON.stringify(o).slice(0,500)}`)}async function k_(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||y(o.stream_state)!=="completed")return t;let s,a;try{let l=await ppe(e,i,o);s=l.fileIds,a=l.attachedRawPaths}catch(l){return e.log?.("pipeline.attachment_prepare_degraded",{event:n,message:l instanceof Error?l.message:String(l)}),t}let d=Spe(i,s,a),u=kpe(o,d);if(d===i&&s.length===0)return t;let c={...t,body:d,...s.length===0?{}:{uploaded_file_ids:s}};return r?{...c,structured:u}:{...c,payload:{...A(t.payload)??{},structured:u}}}var AF,OC,Tpe,C_=U(()=>{"use strict";et();zn();AF=new Set([".csv",".diff",".gif",".htm",".html",".jpeg",".jpg",".json",".jsonl",".log",".md",".mp4",".patch",".pdf",".png",".svg",".txt",".webm",".webp",".xml",".zip"]);OC=8192;Tpe=/^\.[a-z0-9_+-]{1,12}$/});function R_(e,n){switch(e){case"warning":case"error":return{diagnostic_summary:BC(e,n)??`${e}: seen (no details)`,diagnostic_payload:UC(n,0),diagnostic_payload_keys:Object.keys(n).sort()};default:return{}}}function zF(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<=P_?a:`${a.slice(0,P_)}...`;i(JSON.stringify(I_(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>=NF){i(JSON.stringify("[max-depth]"));return}if(!ne(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(":"),UF(c)?i(JSON.stringify(T_)):s(a[c],d+1))}i("}")};return s(e,0),o?`${t.join("")}...`:t.join("")}function BC(e,n){let t=FF(n.error),r=FF(n.item),o=Qi(n.code)??zC(n.code)??Qi(t?.code)??zC(t?.code)??Qi(n.status)??zC(n.status),i=Qi(n.message)??Qi(n.detail)??Qi(n.reason)??Qi(t?.message)??Qi(t?.detail)??Qi(t?.reason),s=Qi(r?.type),a=o===void 0?void 0:I_(o),d=a===void 0?e:`${e} ${a}`,u=i===void 0?s===void 0?void 0:`item.type=${s}`:I_(i);return u===void 0?void 0:`${d}: ${u}`}function UC(e,n){if(e===void 0)return null;if(typeof e=="string"){let t=I_(e);return t.length<=P_?t:`${t.slice(0,P_)}...`}return e===null||typeof e=="boolean"||typeof e=="number"?e:n>=NF?"[max-depth]":Array.isArray(e)?e.map(t=>UC(t,n+1)):Object.fromEntries(Object.entries(e).map(([t,r])=>[t,UF(t)?T_:UC(r,n+1)]))}function UF(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 I_(e){return e.replace(/https?:\/\/\S*(?:token|secret|signature|sig|x-amz-signature|api[_-]?key|access[_-]?key|private[_-]?key|refresh)\S*/gi,Epe).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}${T_}${s}`).replace(new RegExp(`(^|[^A-Za-z0-9_-])(["']?)(${Ape})\\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}${T_}${s}`).replace(/\bBearer\s+[^\s,;]+/gi,"Bearer [redacted]")}function FF(e){return ne(e)?e:void 0}function Qi(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function zC(e){return typeof e=="number"&&Number.isFinite(e)?e.toString():void 0}var T_,Epe,NF,P_,Ape,E_=U(()=>{"use strict";zn();T_="[redacted]",Epe="[redacted-url]",NF=12,P_=8e3,Ape="(?:(?:[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 Bf(e){let n=e.channelSession;return{...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{config:{model_reasoning_effort:n.reasoningEffort}},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Kf(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandbox:n.sandbox}}}function BF(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:Kf(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandboxPolicy:Mpe(n.sandbox,e.cwd)}}}function Hc(e,n,t){if(!(e===void 0||e==="default"))return Jf(e,n,t)}function Jf(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:
|
|
43
|
+
`)}function Spe(e,n,t=[]){let r=wpe(e,t);switch(r.trim()===""&&n.length>0){case!0:return"Attached file.";case!1:return r}}function kpe(e,n){return y(e.kind)==="codex_assistant_message"?{...e,content:n}:e}function Cpe(e,n){let t=OF(e.trim());return t===""?!0:t===void 0?!1:n.includes(t)}function Ppe(e){let n=IF(e).toLowerCase();return n===""?!/\s/.test(e):AF.has(n)||Tpe.test(n)}function Ipe(e){return e.split(/[\\/]+/).some(n=>n.startsWith("."))}async function Rpe(e,n,t,r){let o=await e.push(n,t,r);if(ne(o)&&o.status==="ok"&&ne(o.response))return o.response;throw new Error(`kandan push failed: ${t}: ${JSON.stringify(o).slice(0,500)}`)}async function k_(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||y(o.stream_state)!=="completed")return t;let s,a;try{let l=await ppe(e,i,o);s=l.fileIds,a=l.attachedRawPaths}catch(l){return e.log?.("pipeline.attachment_prepare_degraded",{event:n,message:l instanceof Error?l.message:String(l)}),t}let d=Spe(i,s,a),u=kpe(o,d);if(d===i&&s.length===0)return t;let c={...t,body:d,...s.length===0?{}:{uploaded_file_ids:s}};return r?{...c,structured:u}:{...c,payload:{...A(t.payload)??{},structured:u}}}var AF,OC,Tpe,C_=U(()=>{"use strict";et();zn();AF=new Set([".csv",".diff",".gif",".htm",".html",".jpeg",".jpg",".json",".jsonl",".log",".md",".mp4",".patch",".pdf",".png",".svg",".txt",".webm",".webp",".xml",".zip"]);OC=8192;Tpe=/^\.[a-z0-9_+-]{1,12}$/});function R_(e,n){switch(e){case"warning":case"error":return{diagnostic_summary:BC(e,n)??`${e}: seen (no details)`,diagnostic_payload:UC(n,0),diagnostic_payload_keys:Object.keys(n).sort()};default:return{}}}function zF(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<=P_?a:`${a.slice(0,P_)}...`;i(JSON.stringify(I_(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>=NF){i(JSON.stringify("[max-depth]"));return}if(!ne(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(":"),UF(c)?i(JSON.stringify(T_)):s(a[c],d+1))}i("}")};return s(e,0),o?`${t.join("")}...`:t.join("")}function BC(e,n){let t=FF(n.error),r=FF(n.item),o=Qi(n.code)??zC(n.code)??Qi(t?.code)??zC(t?.code)??Qi(n.status)??zC(n.status),i=Qi(n.message)??Qi(n.detail)??Qi(n.reason)??Qi(t?.message)??Qi(t?.detail)??Qi(t?.reason),s=Qi(r?.type),a=o===void 0?void 0:I_(o),d=a===void 0?e:`${e} ${a}`,u=i===void 0?s===void 0?void 0:`item.type=${s}`:I_(i);return u===void 0?void 0:`${d}: ${u}`}function UC(e,n){if(e===void 0)return null;if(typeof e=="string"){let t=I_(e);return t.length<=P_?t:`${t.slice(0,P_)}...`}return e===null||typeof e=="boolean"||typeof e=="number"?e:n>=NF?"[max-depth]":Array.isArray(e)?e.map(t=>UC(t,n+1)):Object.fromEntries(Object.entries(e).map(([t,r])=>[t,UF(t)?T_:UC(r,n+1)]))}function UF(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 I_(e){return e.replace(/https?:\/\/\S*(?:token|secret|signature|sig|x-amz-signature|api[_-]?key|access[_-]?key|private[_-]?key|refresh)\S*/gi,Epe).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}${T_}${s}`).replace(new RegExp(`(^|[^A-Za-z0-9_-])(["']?)(${Ape})\\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}${T_}${s}`).replace(/\bBearer\s+[^\s,;]+/gi,"Bearer [redacted]")}function FF(e){return ne(e)?e:void 0}function Qi(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function zC(e){return typeof e=="number"&&Number.isFinite(e)?e.toString():void 0}var T_,Epe,NF,P_,Ape,E_=U(()=>{"use strict";zn();T_="[redacted]",Epe="[redacted-url]",NF=12,P_=8e3,Ape="(?:(?:[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 Bf(e){let n=e.channelSession;return{...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{config:{model_reasoning_effort:n.reasoningEffort}},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Kf(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandbox:n.sandbox}}}function BF(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:Kf(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandboxPolicy:Mpe(n.sandbox,e.cwd)}}}function Hc(e,n,t){if(!(e===void 0||e==="default"))return Jf(e,n,t)}function Jf(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:return console.warn(`linzumi approval-policy clamp: unknown Codex approval policy ${e}; clamping to most-restrictive approval (on-request)`),"on-request"}}function Kf(e,n,t){let r=Jf(e,n,t);return r==="never"&&n==="danger-full-access"?JF:r==="on-failure"?"on-request":r}function Vf(e,n,t){try{return Kf(e,n,t)===JF}catch{return!1}}function Gc(e){switch(e){case"read-only":case"workspace-write":return!0;default:return!1}}function Zc(e){switch(e){case"on-request":case"on-failure":case"untrusted":return!0;default:return!1}}function Mpe(e,n){switch(e){case"danger-full-access":return{type:"dangerFullAccess"};case"read-only":return{type:"readOnly",networkAccess:!1};case"workspace-write":return{type:"workspaceWrite",writableRoots:[n],networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1};default:throw new Error(`unsupported Codex sandbox mode: ${e}`)}}var JF,Wf=U(()=>{"use strict";JF={granular:{sandbox_approval:!1,rules:!1,skill_approval:!1,request_permissions:!1,mcp_elicitations:!0}}});var A_,KF,JC=U(()=>{"use strict";A_=`<linzumi_markdown_media_guidance>
|
|
44
44
|
Some Linzumi users have opted into rich Markdown media rendering. When you are
|
|
45
45
|
writing a visible Linzumi message, channel message, or thread reply, you may use
|
|
46
46
|
these Markdown-compatible media directives:
|
|
@@ -1540,7 +1540,7 @@ To kick the agent off:
|
|
|
1540
1540
|
`,O=Buffer.byteLength(P,"utf8");if(O>s)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:O,max_entry_bytes:s}),!1;iDe(n,{recursive:!0}),f(u)+O>i&&g(),_(O);let R=b()?`
|
|
1541
1541
|
`:"";return tDe(u,`${R}${P}`,"utf8"),!0}catch(T){return l("runner_diagnostics.spool_failed",{error:T instanceof Error?T.message:String(T)}),!1}},v=C=>{let T=[],P=aDe(C,"utf8");for(let O of P.split(`
|
|
1542
1542
|
`))if(O.trim()!=="")try{let R=JSON.parse(O);R!==null&&typeof R=="object"&&T.push({parsed:R,raw:O})}catch{}return T};return{append:w,drain:async C=>{if(c)return{uploadedBatches:0,uploadedEntries:0,remainingBatches:p().length,skipped:!0};c=!0;let T=0,P=0;try{g(),_(0);let O=a()-o;for(let R of p()){let j;try{j=v(R)}catch(H){l("runner_diagnostics.spool_batch_unreadable",{file:R,error:H instanceof Error?H.message:String(H)}),m(R,"unreadable");continue}let B=j.filter(H=>{let X=kDe(H.parsed);return X===void 0||X>=O});if(B.length===0){m(R,"empty_or_expired");continue}let K=UE(R,".jsonl"),D=B.map(H=>H.raw).join(`
|
|
1543
|
-
`),J=B.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),W={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:K,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:K,entry_count:B.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:D};try{await C(W)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:R,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}T+=1,P+=B.length;try{RV(R)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:R,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:T,uploadedEntries:P,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var fDe,mDe,hDe,gDe,yDe,EV,xDe,bDe,MV=U(()=>{"use strict";qb();fDe=32*1024*1024,mDe=10080*60*1e3,hDe=4*1024*1024,gDe=1024*1024,yDe="spool.jsonl",EV=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;xDe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,bDe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Yt,JE,Ka=U(()=>{"use strict";Yt="1.0.
|
|
1543
|
+
`),J=B.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),W={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:K,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:K,entry_count:B.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:D};try{await C(W)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:R,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}T+=1,P+=B.length;try{RV(R)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:R,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:T,uploadedEntries:P,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var fDe,mDe,hDe,gDe,yDe,EV,xDe,bDe,MV=U(()=>{"use strict";qb();fDe=32*1024*1024,mDe=10080*60*1e3,hDe=4*1024*1024,gDe=1024*1024,yDe="spool.jsonl",EV=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;xDe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,bDe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Yt,JE,Ka=U(()=>{"use strict";Yt="1.0.203",JE=`linzumi ${Yt}`});import{closeSync as OV,existsSync as VE,mkdirSync as CDe,openSync as $V,readFileSync as qV,renameSync as TDe,unlinkSync as ku,writeFileSync as PDe,writeSync as jV}from"node:fs";import{dirname as LV,join as IDe}from"node:path";function WE(e){return e instanceof Gs||e instanceof Error&&e.name===NV&&"lockPath"in e&&"heldBy"in e}function HE(e,n=at(),t){let r=t===void 0?encodeURIComponent(e):gu(t);return IDe(LV(n),"runners",`${r}.lock`)}function Hv(e){let n=HE(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??WV,r=e.now??(()=>new Date),o=e.killPid??zDe,i=r().toISOString(),s={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:Gn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??Yt,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};MDe(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),DDe(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>zV(n,s,r),d=setInterval(a,FV);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),KV(n,s)}}}function zV(e,n,t){try{let r=Zv(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;PDe(i,`${JSON.stringify(o,null,2)}
|
|
1544
1544
|
`,"utf8"),TDe(i,e)}catch{}}function Cu(e,n,t){if(!n(e.pid))return{state:"dead"};let r=e.heartbeatAt??e.startedAt,o=Date.parse(r);return Number.isNaN(o)||t().getTime()-o>RDe?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function UV(e,n,t,r){return t!==Gv||e.launchSource!==Gv?!1:r.state!=="live"?!0:EDe(n,e.cliVersion)>0}function EDe(e,n){let t=DV(e),r=DV(n);for(let o=0;o<3;o++){let i=t.core[o],s=r.core[o];if(i===void 0||s===void 0)throw new Error(`compareCliVersions: unexpected undefined at core index ${o}`);if(i!==s)return i>s?1:-1}return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:ADe(t.prerelease,r.prerelease)}function DV(e){let n=e.trim().replace(/^v/i,"").split("+",1)[0]??"",t=n.indexOf("-"),r=t===-1?n:n.slice(0,t),o=t===-1?"":n.slice(t+1),i=r.split("."),s=[KE(i[0]),KE(i[1]),KE(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function KE(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function ADe(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){let o=e[r],i=n[r];if(o===void 0)return-1;if(i===void 0)return 1;let s=Number.parseInt(o,10),a=Number.parseInt(i,10),d=s.toString()===o,u=a.toString()===i;if(d&&u){if(s!==a)return s>a?1:-1}else{if(d!==u)return d?-1:1;if(o!==i)return o>i?1:-1}}return 0}function BV(e,n,t,r,o){try{r(n.pid)}catch(i){let s=i!==null&&typeof i=="object"&&"code"in i?i.code:void 0;if(s!=="ESRCH")throw s==="EPERM"||s==="EACCES"?new Error(`Cannot take over the runner lock at ${e}: its holder process (pid ${n.pid}) is owned by another user and cannot be stopped. Stop that process, or remove the lock file, then retry.`):i}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function MDe(e,n,t,r,o,i,s){if(t===void 0||Er(t)!==Er(sr))return;let a=HE(e,n),d=Zv(a);if(d!==void 0){if(Cu(d,r,o).state==="live")throw new Gs(a,d);JV(a,r,()=>{let u=VE(a)?GE(a):void 0;if(u===void 0)return;let c=Cu(u,r,o);if(c.state==="live")throw new Gs(a,u);c.state==="wedged"&&BV(a,u,c.reason,i,s),ku(a)})}}function DDe(e,n,t,r,o,i,s,a){if(Wv(e,n))return;s?.();let d=Zv(e);if(d===void 0){if(Wv(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Cu(d,t,r).state==="live")throw new Gs(e,d);a?.(),JV(e,t,()=>{let u=VE(e)?GE(e):void 0;if(u!==void 0){let c=Cu(u,t,r);if(c.state==="live")throw new Gs(e,u);c.state==="wedged"&&BV(e,u,c.reason,o,i),ku(e)}if(!Wv(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function Wv(e,n){CDe(LV(e),{recursive:!0});try{let t=$V(e,"wx");try{jV(t,`${JSON.stringify(n,null,2)}
|
|
1545
1545
|
`)}finally{OV(t)}return!0}catch(t){if(rp(t,"EEXIST"))return!1;throw t}}function JV(e,n,t){let r=`${e}.replace`;for(;;)try{let o=$V(r,"wx");try{jV(o,`${process.pid}
|
|
1546
1546
|
`),t()}finally{OV(o),ku(r)}return}catch(o){if(rp(o,"EEXIST")){let i=ODe(r);if(i===void 0)continue;if(n(i))throw new Error(["another Linzumi runner is already replacing a stale runner lock",`lock: ${e}`,"Wait for that startup to finish, then retry."].join(`
|
|
@@ -1653,7 +1653,7 @@ ${t}`.toLowerCase();return r.includes("not logged in")||r.includes("not authenti
|
|
|
1653
1653
|
`,"utf8"),Tw(r,e)}catch(r){t("vm_fallback_notice_store.write_failed",{path:e,message:r instanceof Error?r.message:String(r)})}}function Dqe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=Ou("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return Tt(xp(),`${r}.${t}.source-seq.json`)}function Oqe(e,n){return`${e} ${n}`}function tg(e){let n=e.issued_at;return typeof n=="string"&&n!==""?n:void 0}function xQ(e){return e.replayed===!0}function $qe(e,n){if(!xQ(e))return;let t=tg(e);if(t===void 0)return;let r=Date.parse(t);if(Number.isNaN(r))return;let o=n-r;return o>_Q?o:void 0}function qqe(e,n){if(e.type!=="start_instance"||!xQ(e))return!1;let t=ro(e);return t===void 0?!1:n(t)}function jqe(e,n){return e!==void 0&&n<=e}function Lqe(e,n,t){e.onAdvance(n,t),e.flush()}function Fqe(e,n){return e().then(t=>(n?.(),t))}function Nqe(e){return"then"in e&&typeof e.then=="function"}function zqe(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||!Nqe(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 Kqe(e,n=Date.now,t=bQ,r){let o=r?.afterMs??Jqe,i=r?.forcedReconnectAfterMs??Uqe,s=r?.forcedReconnectRetryMs??Bqe,a=n(),d=!1,u,c=!1,l=0,p,f=0,g=0;return{recordServerAck:()=>{a=n(),u=void 0,c=!1,l=0,p=void 0,f=0,g=0,d&&(d=!1,e("kandan.connection_recovered",{staleThresholdMs:t}))},check:()=>{let m=n(),_=m-a;!d&&_>t&&(d=!0,u=m,e("kandan.connection_stale",{lastServerAckAgoMs:_,staleThresholdMs:t}));let b=u===void 0?0:m-u;if(d&&r?.onReconnectNeeded!==void 0&&u!==void 0&&b>=i&&(p===void 0||m-p>=s)&&(l+=1,p=m,e("kandan.connection_force_reconnect",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,forcedReconnectAfterMs:i}),r.onReconnectNeeded({staleForMs:b,lastServerAckAgoMs:_,attempt:l})===!1?f+=1:f=0,r.onHardResetNeeded!==void 0&&f>=pM)){if(f=0,g>=AZ)c||(c=!0,e("kandan.connection_hard_reset_exhausted",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,hardResets:g,hardResetFailureLimit:AZ}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:_}));else if(b<o){g+=1;let v=r.onHardResetNeeded({staleForMs:b,lastServerAckAgoMs:_,attempt:l,uninitiatedDispatches:pM,hardResets:g});e("kandan.connection_hard_reset",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,uninitiatedDispatches:pM,hardResets:g,initiated:v!==!1})}}d&&!c&&r!==void 0&&u!==void 0&&b>=o&&(c=!0,e("kandan.connection_unrecoverable",{staleForMs:b,lastServerAckAgoMs:_,escalateAfterMs:o}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:_}))},isStale:()=>d}}function fM(e,n,t){let r=t?.discardSeqsOnFirstEpochAdoption===!0,o=t?.fsyncOnWrite===!0,{cursors:i,epoch:s}=Gqe(e,n),a=s,d=!1,u,c=()=>{if(d){d=!1;try{$u(ed(e),{recursive:!0});let f=`${e}.tmp`,g=`${JSON.stringify({...a===void 0?{}:{[vQ]:a},...Object.fromEntries(i)})}
|
|
1654
1654
|
`;if(o){let m=TZ(f,"w");try{sg(m,g,"utf8"),CZ(m)}finally{kZ(m)}Tw(f,e);let _=TZ(ed(e),"r");try{CZ(_)}finally{kZ(_)}}else sg(f,g,"utf8"),Tw(f,e)}catch(f){n("control_cursor_store.write_failed",{path:e,message:f instanceof Error?f.message:String(f)})}}},l=()=>{d=!0,u===void 0&&(u=setTimeout(()=>{u=void 0,c()},Vqe),u.unref?.())},p=()=>{u!==void 0&&(clearTimeout(u),u=void 0),c()};return{initial:f=>i.get(f),onAdvance:(f,g)=>{let m=i.get(f);m!==void 0&&g<=m||(i.set(f,g),l())},reset:(f,g)=>{i.get(f)!==g&&(i.set(f,g),l())},flush:p,epoch:()=>a,adoptEpoch:f=>{if(a===f)return!1;let g=a!==void 0,m=!g&&r&&i.size>0;return a=f,(g||m)&&(m&&n("control_cursor_store.pre_epoch_seqs_discarded",{path:e,epoch:f,discardedSeqs:i.size}),i.clear()),l(),(g||m)&&p(),g}}}function Wqe(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 Hqe(e,n){return typeof e=="object"&&e!==null&&e.code===n}function Gqe(e,n){let t=new Map,r;try{r=Ya(e,"utf8")}catch(s){return Hqe(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===vQ){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 Zqe(e,n){return e.type==="replace_runner"?!0:!("instanceId"in e)||e.instanceId===void 0||e.instanceId===n}function Qqe(e){return"instanceId"in e?e.instanceId:void 0}function Xqe(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(Gn(e)).origin;if(t.origin!==r)throw new Error("workspace viewport URL must stay on the configured Linzumi origin")}function Yqe(e,n){Xqe(e,n)}function mM(e){return e!==void 0&&e.delegated===!0&&e.threadProcess==="already_started"}function Za(e){return e.threadProcess?.role==="thread"||e.agentReplay!==void 0?!1:e.spawnThreadRunner!==void 0||e.codexUrl===void 0}function e6e(e,n){let t=e.threadProcess,r=ro(n);return t?.role!=="thread"?!(Za(e)&&r!==void 0&&r6e(n)):r!==void 0?r===t.kandanThreadId:"instanceId"in n&&n.instanceId!==void 0&&n.instanceId!==""||n.type==="replace_runner"}function n6e(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 t6e(e,n,t,r,o){switch(e.threadProcess?.role){case"thread":return!1;default:switch(n.type){case"resolve_codex_user_input_request":case"deny_codex_user_input_request":return[t,...r.values()].filter(i=>i!==void 0).some(i=>i.currentKandanThreadId()===n.threadId||i.currentCodexThreadId()===n.threadId||i.currentCodexThreadId()===n.sessionId)||n.sessionId!==void 0&&o.has(n.sessionId);default:return!1}}}function r6e(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":case"resolve_codex_user_input_request":case"deny_codex_user_input_request":return!0;default:return!1}}function o6e(e){let n=e;if(n.kind!=="build_golden_image"&&n.type!=="build_golden_image")return;let t=Mu(n.golden_image_public_id),r=Mu(n.build_claim_token);if(!(t===void 0||r===void 0))return{goldenImagePublicId:t,buildClaimToken:r,projectPublicId:Mu(n.project_public_id),computeKey:Mu(n.compute_key),name:Mu(n.name),sourceThreadId:Mu(n.source_thread_id),cwd:Mu(n.cwd)}}function Mu(e){return typeof e=="string"&&e!==""?e:void 0}function i6e(e){return e.type==="resolve_codex_user_input_request"?{...e,answers:e.answers.map(({questionId:n,selectedLabels:t})=>({questionId:n,...t===void 0?{}:{selectedLabels:t}}))}:e}function ro(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"resolve_codex_user_input_request":case"deny_codex_user_input_request":case"set_thread_collaboration_mode":case"compact_thread":case"review_thread":case"update_thread_interaction_access":{let n=y(e.threadId)?.trim();return n===void 0||n===""?void 0:n}default:return}}async function s6e(e,n,t,r){let o=ro(r);if(o!==void 0){let s=r.type==="resolve_codex_user_input_request"||r.type==="deny_codex_user_input_request"?r.sessionId===void 0?void 0:await t.get(r.sessionId):void 0,a=n.get(o),d=Array.from(new Set([...a===void 0?[]:[a],...s===void 0?[]:[s],...Array.from(n.values()).filter(c=>c.currentKandanThreadId()===o)])),u=[...e?.currentKandanThreadId()===o?[e]:[],...d.filter(c=>c!==e)].filter(c=>c!==void 0);if(r.type==="update_thread_interaction_access"){let c,l;for(let p of u){let f=await p.handleControl(r);f!==void 0&&(c??=f,f.ok===!0&&(l??=f))}return l??c}for(let c of u){let l=await c.handleControl(r);if(l!==void 0)return l}return}let i=await(e?.handleControl(r)??Promise.resolve(void 0));if(i!==void 0)return i;for(let s of n.values()){let a=await s.handleControl(r);if(a!==void 0)return a}}function a6e(e){return e.codexUrl===void 0&&e.threadProcessRole!=="thread"&&e.ownsStartedAppServer}async function d6e(e){let n=e.setTimeoutFn??setTimeout,t=Promise.allSettled([e.requiredHealthPublication,...e.pushes]).then(()=>{}),r=new Promise(o=>{n(()=>o(),e.safetyCapMs)?.unref?.()});await Promise.race([t,r]),e.exit()}function MZ(e,n=process.env){let t=n.LINZUMI_APP_SERVER_EXIT_LOOP_STATE_FILE?.trim();return t!==void 0&&t!==""?t:Tt(cg(),".linzumi","app-server-exit-loop",`${Rl(e)}.json`)}function c6e(e,n){return{load:()=>{try{let t=JSON.parse(Ya(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{$u(ed(e),{recursive:!0}),sg(e,`${JSON.stringify(t,null,2)}
|
|
1655
1655
|
`)}catch(r){n?.(r instanceof Error?r.message:String(r))}}}}function l6e(e,n=yp){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 p6e(e,n,t=wQ,r=u6e){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 f6e(e){let n=new Map,t={failed:!1},r;return{observeNotification:(o,i)=>{if(t.failed)return;let s=m6e(i);if(s===void 0)return;r=Date.now();let a=kw(i);if(Sw.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)Qa(l,"turn/failed",{threadId:d,turnId:u,reason:c,...el("infra_turn_kill")},e.log)}},activeTurnCount:()=>n.size,activeTurns:()=>Array.from(n,([o,i])=>({threadId:o,turnId:i})),lastActivityAtMs:()=>r}}function m6e(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return y(n?.id)??y(e.turnId)??y(e.turn_id)??y(t?.turnId)??y(t?.turn_id)??y(r?.id)}function kw(e){let n=A(e.thread),t=A(e.turn);return y(e.threadId)??y(e.thread_id)??y(n?.id)??y(t?.threadId)??y(t?.thread_id)}function Qa(e,n,t,r,o){if(e===void 0)return!1;try{return e.handleCodexNotification(n,t,o),!0}catch(i){return r("codex.notification_session_dispatch_failed",{method:n,message:i instanceof Error?i.message:String(i)}),!1}}function h6e(e,n=!0){let t=new Map,r=n,o=0,i=()=>[...t.values()].reduce((c,l)=>c+1+l.parentFrames.length+l.childFrames.length,0),s=(c,l)=>{if(c!=="item/started"&&c!=="item/completed")return;let p=A(l.item),f=kw(l);if(p===void 0||y(p.type)!=="subAgentActivity"||y(p.kind)!=="started"||f===void 0)return;let g=y(p.id),m=y(p.agentThreadId)??y(p.agent_thread_id);return{key:`${f}:${g??m??"missing-item-id"}`,sequence:0,activityPending:!0,method:c,params:l,parentThreadId:f,childThreadId:m,itemId:g,captureAuthority:"pre_disable_accepted",parentFrames:[],childFrames:[]}},a=(c,l)=>{let p=c.filter(f=>f.ownsCodexThreadId(l));switch(p.length){case 0:return;case 1:return p[0];default:{let f=p.filter(g=>g.currentCodexThreadId?.()===l);switch(f.length){case 1:return f[0];case 0:throw new Error(`multiple inherited channel sessions own Codex thread ${l}`);default:throw new Error(`multiple direct channel sessions own Codex thread ${l}`)}}}},d=(c,l)=>{let p=[...t.values()].filter(f=>f.key!==l&&f.activityPending&&f.childThreadId===c);if(p.length>1)throw new Error(`multiple deferred Codex subagent edges claim child ${c}`);return p[0]},u=c=>{let l=[...t.values()].flatMap(f=>[...f.activityPending&&d(f.parentThreadId,f.key)===void 0&&a(c,f.parentThreadId)!==void 0?[{kind:"activity",sequence:f.sequence,activity:f}]:[],...f.parentFrames.flatMap(g=>!f.activityPending&&a(c,f.parentThreadId)!==void 0?[{kind:"parent_frame",sequence:g.sequence,activity:f,frame:g}]:[]),...f.childFrames.flatMap(g=>!f.activityPending&&f.childThreadId!==void 0&&a(c,f.childThreadId)!==void 0?[{kind:"frame",sequence:g.sequence,activity:f,frame:g}]:[])]).sort((f,g)=>f.sequence-g.sequence)[0];if(l===void 0)return;let p=l.kind==="activity"||l.kind==="parent_frame"?a(c,l.activity.parentThreadId):l.activity.childThreadId===void 0?void 0:a(c,l.activity.childThreadId);if(p===void 0)throw new Error(`deferred Codex subagent owner disappeared for ${l.activity.parentThreadId}`);if(l.kind==="activity"){if(!Qa(p,l.activity.method,l.activity.params,e,{captureAuthority:l.activity.captureAuthority}))return;if(l.activity.childThreadId!==void 0&&a(c,l.activity.childThreadId)===void 0)throw new Error(`deferred Codex subagent child was not registered: ${l.activity.childThreadId}`);l.activity.parentFrames.length===0&&l.activity.childFrames.length===0?t.delete(l.activity.key):t.set(l.activity.key,{...l.activity,activityPending:!1})}else if(l.kind==="parent_frame"){if(!p.ownsCodexThreadId(l.activity.parentThreadId))throw new Error(`deferred Codex subagent parent owner disappeared for ${l.activity.parentThreadId}`);if(!Qa(p,l.frame.method,l.frame.params,e,{captureAuthority:l.activity.captureAuthority}))return;let g=l.activity.parentFrames.filter(({sequence:m})=>m!==l.frame.sequence);!l.activity.activityPending&&g.length===0&&l.activity.childFrames.length===0?t.delete(l.activity.key):t.set(l.activity.key,{...l.activity,parentFrames:g})}else{if(l.activity.childThreadId===void 0||!p.ownsCodexThreadId(l.activity.childThreadId))throw new Error(`deferred Codex subagent child owner disappeared for ${l.activity.childThreadId??l.activity.key}`);if(!Qa(p,l.frame.method,l.frame.params,e,{captureAuthority:l.activity.captureAuthority}))return;let g=l.activity.childFrames.filter(({sequence:m})=>m!==l.frame.sequence);!l.activity.activityPending&&l.activity.parentFrames.length===0&&g.length===0?t.delete(l.activity.key):t.set(l.activity.key,{...l.activity,childFrames:g})}u(c)};return{dispatch:(c,l,p)=>{if(!r){u(c);let _=kw(p);if(_!==void 0&&Sw.has(l)){let b=[...t.values()].filter(({activityPending:C,childThreadId:T})=>C&&T===_);if(b.length>1)throw new Error(`multiple deferred Codex subagent edges claim child ${_}`);let w=[...t.values()].filter(({activityPending:C,parentThreadId:T})=>C&&T===_).sort((C,T)=>C.sequence-T.sequence)[0],v=b[0],S=w??v;if(S!==void 0){if(i()>=1e3)throw new Error("deferred Codex subagent activity and frames exceeded 1000 entries");let C={sequence:o++,method:l,params:p};t.set(S.key,{...S,...w!==void 0?{parentFrames:[...S.parentFrames,C]}:{childFrames:[...S.childFrames,C]}}),e("codex.subagent_activity_parent_unresolved",{phase:w!==void 0?"post_disable_parent_terminal_deferred":"post_disable_child_terminal_deferred",parent_thread_id:S.parentThreadId,child_thread_id:S.childThreadId??null,item_id:S.itemId??null,method:l}),u(c);return}}for(let b of c)Qa(b,l,p,e);return}u(c);let f=s(l,p);if(f===void 0){let _=kw(p),b=_===void 0?[]:[...t.values()].filter(({childThreadId:C,activityPending:T})=>T&&C===_);if(b.length>1)throw new Error(`multiple deferred Codex subagent edges claim child ${_}`);let w=b[0],v=_===void 0?void 0:[...t.values()].filter(({parentThreadId:C,activityPending:T})=>T&&C===_).sort((C,T)=>C.sequence-T.sequence)[0],S=v??w;if(S!==void 0){if(i()>=1e3)throw new Error("deferred Codex subagent activity and frames exceeded 1000 entries");let C={sequence:o++,method:l,params:p};t.set(S.key,{...S,...v!==void 0?{parentFrames:[...S.parentFrames,C]}:{childFrames:[...S.childFrames,C]}}),e("codex.subagent_activity_parent_unresolved",{phase:v!==void 0?"parent_frame_deferred":"child_frame_deferred",parent_thread_id:S.parentThreadId,child_thread_id:S.childThreadId??null,item_id:S.itemId??null,method:l});return}for(let C of c)Qa(C,l,p,e);u(c);return}let g=d(f.parentThreadId,f.key);if(g!==void 0){if(i()>=1e3&&!t.has(f.key))throw new Error("deferred Codex subagent activity exceeded 1000 entries");let _=t.get(f.key);t.set(f.key,{...f,sequence:_?.sequence??o++,parentFrames:_?.parentFrames??[],childFrames:_?.childFrames??[]}),e("codex.subagent_activity_parent_unresolved",{phase:"nested_activity_deferred",parent_thread_id:f.parentThreadId,child_thread_id:f.childThreadId??null,item_id:f.itemId??null,blocked_by_parent_thread_id:g.parentThreadId,blocked_by_item_id:g.itemId??null,method:l});return}let m=a(c,f.parentThreadId);if(m===void 0){if(i()>=1e3&&!t.has(f.key))throw new Error("deferred Codex subagent activity exceeded 1000 entries");let _=t.get(f.key);t.set(f.key,{...f,sequence:_?.sequence??o++,parentFrames:_?.parentFrames??[],childFrames:_?.childFrames??[]}),e("codex.subagent_activity_parent_unresolved",{phase:"deferred",parent_thread_id:f.parentThreadId,child_thread_id:f.childThreadId??null,item_id:f.itemId??null,method:l});return}if(!Qa(m,l,p,e))throw new Error(`Codex subagent activity owner dispatch failed for ${f.parentThreadId}`);u(c)},reconcile:c=>{u(c)},setEnabled:c=>{if(!c&&r&&t.size>0){let l=[...t.values()],p=new Map(l.map(_=>[_.key,_.childFrames.filter(({method:b})=>Sw.has(b))])),f=new Map(l.map(_=>[_.key,_.parentFrames.filter(({method:b})=>Sw.has(b))])),g=new Set,m=_=>{if(g.has(_.key))return;g.add(_.key);let b=d(_.parentThreadId,_.key);b!==void 0&&m(b)};for(let _ of l){let b=p.get(_.key)?.length??0,w=f.get(_.key)?.length??0;_.activityPending&&b===0&&w===0&&m(_),b>0&&m(_),w>0&&(d(_.parentThreadId,_.key)!==void 0||_.childFrames.length>0)&&m(_)}for(let _ of l){e("codex.subagent_activity_parent_unresolved",{phase:"feature_disabled",parent_thread_id:_.parentThreadId,child_thread_id:_.childThreadId??null,item_id:_.itemId??null,method:_.method,buffered_frame_count:_.parentFrames.length+_.childFrames.length});let b=p.get(_.key)??[];if(_.parentFrames.length===0&&b.length===0&&!g.has(_.key))t.delete(_.key);else{let w=g.has(_.key)?_.childFrames:b;t.set(_.key,{..._,activityPending:g.has(_.key),childFrames:w})}}}r=c},close:()=>{for(let c of t.values())e("codex.subagent_activity_parent_unresolved",{phase:"runner_close",parent_thread_id:c.parentThreadId,child_thread_id:c.childThreadId??null,item_id:c.itemId??null,method:c.method,buffered_frame_count:c.parentFrames.length+c.childFrames.length});t.clear()}}}async function g6e(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}async function DZ(e){let n=new Map,t=[!1,!0];for(let r of t){let o=await e.request("thread/list",{limit:50,sortKey:"updated_at",sortDirection:"desc",sourceKinds:["subAgentThreadSpawn"],archived:r,useStateDbOnly:!0});if("error"in o)throw new Error(`thread/list failed: ${o.error.message}`);let s=A(o.result)?.data;if(!Array.isArray(s))throw new Error("thread/list result.data must be an array");if(!s.every(ne))throw new Error("thread/list result.data entries must be objects");for(let a of s){let d=SQ(a),u=_6e(a,r);n.has(d)||n.set(d,u)}}return Array.from(n.values()).sort(x6e)}function Xs(e,n,t){let r=n.flatMap(i=>{let s=e[i];if(s==null)return[];if(typeof s!="string")throw new Error(`thread/list ${t} must be a string (${i})`);return[s]}),o=r[0];if(o!==void 0&&r.some(i=>i!==o))throw new Error(`thread/list ${t} aliases disagree`);return o}function gM(e,n,t){if(e!==void 0&&n!==void 0&&e!==n)throw new Error(`thread/list ${t} source and thread values disagree`);return e??n}function y6e(e){let n=Xs(e,["parentThreadId","parent_thread_id"],"parent thread id"),t=Xs(e,["agentNickname","agent_nickname"],"agent nickname"),r=Xs(e,["agentRole","agent_role"],"agent role"),o={...n===void 0?{}:{parentThreadId:n},...t===void 0?{}:{agentNickname:t},...r===void 0?{}:{agentRole:r}},i=e.source;if(typeof i=="string"){if(i==="subAgentThreadSpawn"&&(n===void 0||n.trim()===""))throw new Error("thread/list subagent spawn requires a parent thread id");return{source:i,...o}}let s=A(i);if(s===void 0)throw new Error("thread/list thread source must be a string or object");let a=Xs(s,["custom"],"custom source");if(a!==void 0)return{source:a,...o};let d=Xs(s,["internal"],"internal source");if(d!==void 0)return{source:d,...o};let u=[s.subAgent,s.subagent].filter(b=>b!==void 0);if(u.length!==1)throw new Error("thread/list structured source requires exactly one subAgent/subagent value");let c=u[0];if(c==="review")return{source:"subAgentReview",...o};if(c==="compact")return{source:"subAgentCompact",...o};if(c==="memory_consolidation")return{source:"subAgentOther",...o};let l=A(c);if(l===void 0)throw new Error("thread/list subagent source has an unknown shape");let p=[A(l.thread_spawn),A(l.threadSpawn)].filter(b=>b!==void 0),f=p[0];if(f===void 0){if(Xs(l,["other"],"subagent other source")!==void 0)return{source:"subAgentOther",...o};throw new Error("thread/list subagent source has an unknown shape")}if(p.length!==1)throw new Error("thread/list subagent source has conflicting spawn variants");let g=gM(Xs(f,["parent_thread_id","parentThreadId"],"subagent parent thread id"),n,"parent thread id");if(g===void 0||g.trim()==="")throw new Error("thread/list subagent spawn requires a parent thread id");let m=gM(Xs(f,["agent_nickname","agentNickname"],"subagent nickname"),t,"agent nickname"),_=gM(Xs(f,["agent_role","agentRole"],"subagent role"),r,"agent role");return{source:"subAgentThreadSpawn",parentThreadId:g,...m===void 0?{}:{agentNickname:m},..._===void 0?{}:{agentRole:_}}}function _6e(e,n){let t=SQ(e),r=A(e.gitInfo),o=y(e.preview)??"",i=y(e.name)??"",s=y(e.title)??(i===""?o:i),a=y(e.description)??y(e.summary)??o;return{id:t,title:s??"",description:a??"",preview:o.replace(/\s+/g," ").trim(),cwd:y(e.cwd)??"",...y6e(e),createdAt:OZ(e.createdAt),updatedAt:OZ(e.updatedAt),archived:n,modelProvider:y(e.modelProvider)??"",cliVersion:y(e.cliVersion)??"",gitBranch:y(r?.branch)??"",gitOriginUrl:y(r?.originUrl)??"",path:y(e.path)??""}}function SQ(e){let n=e.id;if(typeof n!="string"||n.trim()==="")throw new Error("thread/list thread id must be a non-empty string");return n}function OZ(e){return typeof e=="number"&&Number.isFinite(e)?new Date(e*1e3).toISOString():y(e)??""}function x6e(e,n){let t=A(e),r=A(n),o=Date.parse(y(t?.createdAt)??y(t?.updatedAt)??""),i=Date.parse(y(r?.createdAt)??y(r?.updatedAt)??"");return $Z(o)-$Z(i)}function $Z(e){return Number.isFinite(e)?e:Number.MAX_SAFE_INTEGER}function b6e(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);return y(A(A(e.result)?.thread)?.id)}function Ro(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function $M(e){let n=Ro(e.projectSharedInstructions),t=Ro(e.projectPersonalInstructions),r=Ro(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 v6e(e){return($e(e)??[]).flatMap(t=>{let r=A(t),o=y(r?.runnerId);return o===void 0?[]:[{runnerId:o,version:y(r?.version)??null}]})}function qZ(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=$e(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=y(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 Yh(e){let n=A(e),t=A(n?.runner_config);if(t===void 0||!Object.prototype.hasOwnProperty.call(t,"multiAgentJobsEnabled"))return!1;let r=t.multiAgentJobsEnabled;if(typeof r!="boolean")throw new Error("runner_config.multiAgentJobsEnabled must be a boolean when present");return r}function yM(e){let n=A(e),t=A(n?.runner_config);if(t===void 0||!Object.prototype.hasOwnProperty.call(t,"documentSurfacesEnabled"))return!1;let r=t.documentSurfacesEnabled;if(typeof r!="boolean")throw new Error("runner_config.documentSurfacesEnabled must be a boolean when present");return r}function jZ(e){let n=e.linzumiAgentMcpToken??e.codingJobMcpToken;return n===void 0?!1:qf(n)}function w6e(e){let n=A(e);if(A(n?.runner_config)?.rosterEnabled!==!0)return;let r=A(n?.roster),o=r===void 0?void 0:$e(r.threads);if(o===void 0)return;let i=[],s=0;for(let a of o){let d=A(a),u=y(d?.kandan_thread_id);if(u===void 0){s+=1;continue}let c=y(d?.last_activity_at),l=c===void 0?Number.NaN:Date.parse(c),p=d?.channel_id,f=Y(p),g=y(p)??(f===void 0?null:String(f));i.push({kandanThreadId:u,providerSessionKey:y(d?.provider_session_key)??null,channelId:g,title:y(d?.title)??null,channelSlug:y(d?.channel_slug)??null,cwd:y(d?.cwd)??null,lastActivityAtMs:Number.isNaN(l)?null:l})}return{threads:i,truncated:r?.truncated===!0,skippedEntries:s}}function S6e(e){return e.appliedModel!==void 0||e.appliedApprovalPolicy!==void 0||e.appliedReasoningEffort!==void 0||e.controlSandbox!==void 0}function k6e(e){if(e.debugTrace===void 0)return;let n=new Date().toISOString();return zL({dir:e.debugTrace.dir,contentMode:e.debugTrace.contentMode,runId:[n,"pid",String(process.pid),"runner",e.runnerId].join("-"),manifest:{pid:process.pid,argv:BL(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 qM(e){let n=e.launchTui&&e.consoleReporter===void 0?void 0:(r,o)=>{e.launchTui||mA(r,o),e.consoleReporter?.(r,o)},t=e.logFile??w_();return p8(t),vb("runner_process"),vF(t,n)}function I6e(e,n,t,r){let o=hG({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:C6e,log:(s,a)=>t(s,a),exit:(s,a)=>{let d=u8(a),u={log:(c,l)=>t(c,l)};tw({trigger:d},u),iM({signal:a,stop:r?.supervisorStop,finishExit:()=>l8(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 R6e(e,n,t){try{return e()}catch(r){if(!WE(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=FZ(r.lockPath,o?.takeover,t),s=Cu(r.heldBy,i.isPidAlive,()=>new Date(i.now()));if(UV(r.heldBy,Yt,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:Yt,launchSource:Gv,holderState:s.state});let c=o?.prompt??LZ(o);return await nA({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:!0,prompt:c,takeover:i}),e()}if(!dW(o))throw r;let a=o.prompt??LZ(o),d=FZ(r.lockPath,o.takeover,t);if((await nA({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:o.takeOverWithoutPrompt===!0,prompt:a,takeover:d})).outcome==="declined")throw new Lh;return t("runner.lock_takeover_interactive",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath}),e()}}function LZ(e){return{isInteractive:()=>e?.forceNonInteractive!==!0&&jh()&&process.stdin.isTTY===!0&&process.stderr.isTTY===!0,writeReport:n=>{process.stderr.write(`${n}
|
|
1656
|
-
`)},promptYesNo:n=>E6e(n)}}function E6e(e){return new Promise(n=>{let t=H$e({input:process.stdin,output:process.stderr});t.question(e,r=>{t.close(),n(/^y(es)?$/i.test(r.trim()))})})}function FZ(e,n,t){return{isPidAlive:n?.isPidAlive??A6e,signalPid:n?.signalPid??((r,o)=>{process.kill(r,o)}),lockReleased:n?.lockReleased??(()=>!yp(e)),currentLockOwner:n?.currentLockOwner??(()=>Su(e)),sleep:n?.sleep??iW,now:n?.now??(()=>Date.now()),log:n?.log??((r,o)=>{t(r,o),ye(r,o)})}}function A6e(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 M6e(e,n,t,r,o,i){let s=$6e(n,r,o,i);ye("process.spawn",{command:e,args:s,cwd:t,purpose:"codex.tui"});let a=Aw(e,s,{cwd:t,env:process.env,stdio:"inherit"});return ye("process.spawned",{command:e,args:s,cwd:t,pid:a.pid,purpose:"codex.tui"}),a.once("exit",(d,u)=>{ye("process.exit",{command:e,args:s,cwd:t,pid:a.pid,code:d,signal:u,purpose:"codex.tui"})}),a}async function D6e(e){await Promise.all(Array.from(e,n=>n.handleKandanReconnect()))}function O6e(e,n){if(!Array.isArray(e))return;let t=e.find(r=>ne(r)&&typeof r.name=="string"&&r.name.toLowerCase()===n.toLowerCase()&&typeof r.value=="string");return ne(t)&&typeof t.value=="string"?t.value:void 0}function $6e(e,n,t,r){let o=j6e(t,r);return n===void 0?["--remote",e,...o]:["resume","--remote",e,...o,n]}function q6e(e,n){let t=new Set(n);return e!==void 0&&t.add(e),Array.from(t).sort((r,o)=>r-o)}function MM(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 j6e(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 L6e(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 F6e(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(ne(o)&&o.status==="ok"&&ne(o.response))return mx(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 z6e(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<N6e;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(!ne(c)||c.status!=="ok"||!ne(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=RK(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((g,m)=>m.kind==="reasoning"?g:g+m.body.length,0);let p=i?.maxEmissionTokens,f=p!==void 0&&d/4>=p;if(!l.hasMore||l.cursor===void 0||f)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 NZ(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 Si("thread/unarchive",e.request("thread/unarchive",{threadId:n}));if("error"in s)throw new Error(`thread/unarchive failed: ${s.error.message}`);let a=await Si("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 J6e(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 Si("thread/resume",e.request("thread/resume",o));if(!("error"in a))return{mode:"resumed"};if(U6e(a.error.message))return await NZ(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 Si("thread/inject_items",e.request("thread/inject_items",{threadId:n,items:d}));if("error"in u){if(r.forceRehydrate===!0&&B6e(u.error.message))return await NZ(e,n,o,"forced_inject_not_found",u.error.message,r.log);s=`thread/inject_items failed: ${u.error.message}`}else{let c=await Si("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 K6e(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:ro(r)??null,instanceId:t}),r.type==="start_instance"||r.type==="reconnect_thread")try{await oo(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 _M(e,n,t,r,o,i,s,a,d,u,c,l,p,f,g,m,_,b,w,v,S,C,T,P,O,R,j,B){if(e===void 0)switch(m.type){case"remote_codex_exec":case"remote_codex_exec_cancel":return await xM(m,r,a.value,d,u,_);case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"resolve_codex_user_input_request":case"deny_codex_user_input_request":break;case"compact_thread":case"review_thread":if(m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,requestId:m.requestId.trim()||null,ok:!1,error:"agent_provider_unavailable:codex"};break;case"clone_repository":break;case"set_workspace_viewport":break;case"start_instance":case"reconnect_thread":{let D=mp(m);if(D.type==="ok"&&D.provider==="claude-code"||v!==void 0)break;return await K6e(n,t,r,m,_)}default:return{instanceId:r,controlType:m.type,requestId:"requestId"in m?y(m.requestId)??null:null,ok:!1,error:"agent_provider_unavailable:codex"}}let K=()=>{if(e===void 0)throw new Error("shared codex app-server connection is unavailable");return e};switch(m.type){case"set_workspace_viewport":return Yqe(o.kandanUrl,m.url),{instanceId:r,controlType:m.type,ok:!0,url:m.url};case"compact_thread":{let D=m.requestId.trim(),J=y(m.providerSessionKey)?.trim()??"",W=m.agentProvider??"codex";if(D==="")return{instanceId:r,controlType:m.type,requestId:null,ok:!1,error:"request_id_required"};if(W!=="codex")return{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:`agent_compaction_unsupported:${W}`};if(J==="")return{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:"provider_session_key_required"};let H=await K().request("thread/compact/start",{threadId:J});return"error"in H?{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:`codex_compaction_failed:${H.error.message}`}:{instanceId:r,controlType:m.type,requestId:D,ok:!0,threadId:m.threadId,providerSessionKey:J}}case"start_instance":{let D=no(m.cwd,a.value),J=mp(m),W="starting_codex_session",H;switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:m.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let X=J.provider;if(!D.ok){_("kandan.start_instance_cwd_rejected",{thread_id:ro(m)??null,reason:D.reason,allowedCwdCount:a.value.length});try{await eQ(n,t,m,D.reason,a.value,{instanceId:r})}catch(we){_("kandan.start_instance_cwd_failed_state_push_failed",{reason:D.reason,message:we instanceof Error?we.message:String(we)})}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason,allowedCwds:a.value}}let be=await s(X),Re=ww({agentProvider:X,modelProvider:y(m.modelProvider),model:y(m.model),modelTransportCatalogStatus:EM(m,_),llmProxyBinding:RM(m.llmProxy),hasNativeCodexAuth:be.hasNativeCodexAuth},qa,be.agentProviders);if(Re.type==="blocked"){_("linzumi.start_instance_model_account_preflight_rejected",{agent_provider:X,model_provider:y(m.modelProvider)??null,model:y(m.model)??"default",reason:Re.code,discriminator:Re.reason});try{await oo(n,t,m,"failed",Re.message,{instanceId:r,failureClass:"provider_binding_rejected",modelAccountRejection:{identity:Re.identity,reason:Re.reason}})}catch(we){_("linzumi.start_instance_model_account_state_push_failed",{message:we instanceof Error?we.message:String(we)})}return{instanceId:r,controlType:m.type,ok:!1,error:Re.code}}let ie=Xa(m,"processing",`starting ${tje(X)} session`,{instanceId:r});ie!==void 0&&n.push(t,"message_state",ie).catch(we=>{_("kandan.start_instance_processing_state_push_failed",{message:we instanceof Error?we.message:String(we)})});try{let we=await v?.(m,D.cwd);if(we!==void 0)return we;if(X==="codex"){let Oe=JZ(o,m);if(Oe!==void 0){try{await oo(n,t,m,"failed",Oe,{instanceId:r,failureClass:"provider_binding_rejected"})}catch(vn){_("kandan.start_instance_wafer_state_push_failed",{message:vn instanceof Error?vn.message:String(vn)})}return{instanceId:r,controlType:m.type,ok:!1,error:Oe}}}return X==="claude-code"?(W="starting_claude_code_session",(await WZ({kandan:n,topic:t,control:m,options:o,log:_,debugTrace:b,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,activeClaudeCodeSessions:c,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,ensureClaudeCodeForwardPortSession:f,disposeClaudeCodeForwardPortSession:g,resumeSessionId:Ro(m.resumeSessionId),leaseEpochFor:C,onLiveSourceSeqAccepted:T,onUndeliveredFollowUpsAtClose:O,claudeThreadAccessStore:B,setStartupStage:vn=>{W=vn}})).controlResponse):(await PQ({codex:K(),kandan:n,topic:t,control:m,options:o,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,onStartedThread:w,startAgentReplayCodex:S,setStartupStage:Oe=>{W=Oe},setStartedCodexThreadId:Oe=>{H=Oe}})).controlResponse}catch(we){let qe=zZ(W,we);_("kandan.start_instance_failed",{stage:W,message:we instanceof Error?we.message:String(we),thread_id:fn(m,"threadId")??null,source_seq:Y(m.sourceSeq)??Y(m.rootSeq)??null,codex_thread_id:H??null});try{X==="claude-code"?await YZ({kandan:n,topic:t,control:m,failureReason:qe,rawFailureText:we instanceof Error?we.message:String(we),failureClass:bM(W),codexThreadId:H,instanceId:r,log:_}):await oo(n,t,m,"failed",qe,{codexThreadId:H,instanceId:r,failureClass:bM(W)})}catch{}throw we}}case"reconnect_thread":{let D=no(m.cwd,a.value),J=mp(m),W=y(m.transportCeilingRecoveryRequestId),H="starting_codex_session";if(!D.ok){try{await eQ(n,t,m,D.reason,a.value,{instanceId:r})}catch(un){_("kandan.reconnect_thread_cwd_failed_state_push_failed",{reason:D.reason,message:un instanceof Error?un.message:String(un)})}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason,allowedCwds:a.value}}switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:m.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let X=J.provider,be=await s(X),Re=ww({agentProvider:X,modelProvider:y(m.modelProvider),model:y(m.model),modelTransportCatalogStatus:EM(m,_),llmProxyBinding:RM(m.llmProxy),hasNativeCodexAuth:be.hasNativeCodexAuth},qa,be.agentProviders);if(Re.type==="blocked"){_("linzumi.reconnect_thread_model_account_preflight_rejected",{agent_provider:X,model_provider:y(m.modelProvider)??null,model:y(m.model)??"default",reason:Re.code,discriminator:Re.reason});try{await oo(n,t,m,"failed",Re.message,{instanceId:r,failureClass:"provider_binding_rejected",modelAccountRejection:{identity:Re.identity,reason:Re.reason}})}catch(un){_("linzumi.reconnect_thread_model_account_state_push_failed",{message:un instanceof Error?un.message:String(un)})}return{instanceId:r,controlType:m.type,ok:!1,error:Re.code}}let ie=Ro(m.codexThreadId);if(ie===void 0)return{instanceId:r,controlType:m.type,ok:!1,error:"missing_codex_thread_id"};let we=Ro(m.workDescription),qe=await v?.(m,D.cwd);if(qe!==void 0)return qe;if(X==="codex"){let un=JZ(o,m);if(un!==void 0)return{instanceId:r,controlType:m.type,ok:!1,error:un}}if(X==="claude-code"){let un=c.get(ie);if(un!==void 0&&we!==void 0){let je=Y(m.rootSeq),Xe=Y(m.sourceSeq)??je,_e=ae=>{let pe=ae.disposition==="parked"?Xa(m,"queued",ul(ae.queuePosition),{instanceId:r,codexThreadId:ie}):Xa(m,"processing","queued Claude Code input",{instanceId:r,codexThreadId:ie});pe!==void 0&&n.push(t,"message_state",pe).catch(Te=>{_("kandan.reconnect_thread_queue_state_push_failed",{message:Te instanceof Error?Te.message:String(Te)})})},q=vi($e(m.attachments)??[]),F=await FC({cwd:D.cwd,kandanUrl:o.kandanUrl,token:o.token,fetch:o.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:Xe,body:we,attachments:q}).then(ae=>({ok:!0,content:ae})).catch(ae=>({ok:!1,error:ae}));if(!F.ok){let ae=F.error instanceof Error?F.error.message:String(F.error),pe=`Claude Code input attachment download failed: ${ae}`;try{await oo(n,t,m,"failed",pe,{instanceId:r,codexThreadId:ie,failureClass:"attachment_download_failed"})}catch(Te){_("kandan.reconnect_thread_queue_failed_state_push_failed",{message:Te instanceof Error?Te.message:String(Te)})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:ae}}let z=fn(m,"threadId"),V=fn(m,"channel");if(Xe!==void 0&&z!==void 0&&V!==void 0&&P?.(V,z,{seq:Xe,type:"thread.message",actorKind:void 0,actorSlug:void 0,actorUserId:void 0,threadId:z,threadTitle:void 0,replyToSeq:Y(m.rootSeq),localRunnerEventType:void 0,body:we,attachments:q,traceparent:y(m.traceparent)}),V!==void 0&&z!==void 0&&R?.({channel:V,threadId:z,sourceSeq:Xe,transportCeilingRecoveryRequestId:W})===!0)return _("claude_code.message_duplicate_ignored",{linzumi_thread_id:z,claude_session_id:ie,body_preview:Du(we),source_seq:Xe??null}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0};await hm({cwd:D.cwd,threadKey:un.threadId,turnRef:Xe===void 0?`followup-${Date.now()}`:`seq-${Xe}`,log:(ae,pe)=>_(ae,pe)});try{let ae=un.enqueueInput({content:F.content,sourceSeq:Xe});if(ae==="duplicate")return _("claude_code.message_duplicate_ignored",{linzumi_thread_id:fn(m,"threadId")??null,claude_session_id:ie,body_preview:Du(we),source_seq:Xe??null}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0};_e(ae),_("claude_code.message_queued",{linzumi_thread_id:fn(m,"threadId")??null,claude_session_id:ie,body_preview:Du(we),message_received_at_ms:Date.now(),source_seq:Xe??null}),b?.record("commander","claude.input_queued",{linzumiThreadId:fn(m,"threadId")??null,claudeSessionId:ie,sourceSeq:Xe??null,bodyPreview:Du(we)})}catch(ae){let pe=ae instanceof Error?ae.message:String(ae),Te=`Claude Code input queue closed: ${pe}`;try{await oo(n,t,m,"failed",Te,{instanceId:r,codexThreadId:ie,failureClass:"claude_input_queue_closed"})}catch(Z){_("kandan.reconnect_thread_queue_closed_state_push_failed",{message:Z instanceof Error?Z.message:String(Z)})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_session_closed",message:pe}}if(Xe!==void 0){let ae=Xe,pe=un,Te="Claude Code session did not respond after resume - send your message again to start fresh",Z=j;Nb({windowMs:Z?.windowMs??mh(process.env),isDelivered:()=>pe.inputDelivered(ae),isSessionClosed:()=>Pi(c,[ie],[pe.threadId])===void 0,lastSdkActivityMs:()=>pe.lastSdkActivityMs(),hasPendingBlockingRequest:()=>ag({threadId:pe.threadId,pendingApprovals:l,pendingQuestions:p}),log:_,onWedged:de=>{let ue=Z?.recordWedge(pe.threadId,ae)??Number.MAX_SAFE_INTEGER;_("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:pe.threadId,claude_session_id:ie,source_seq:ae,waited_ms:de.waitedMs,cause:de.cause,attempt:Z===void 0?null:ue,dispatch:"queued_input"});let en=()=>{Z?.clear(pe.threadId,ae),oo(n,t,m,"failed",Te,{instanceId:r,codexThreadId:ie,failureClass:"claude_dispatch_wedged"}).catch(Ye=>{_("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:pe.threadId,source_seq:ae,message:Ye instanceof Error?Ye.message:String(Ye)})})};if(Z!==void 0&&ue===1){oo(n,t,m,"processing","restarting Claude Code session to recover this message",{instanceId:r,codexThreadId:ie}).catch(()=>{}),Z.killAndRespawn({threadId:pe.threadId,claudeSessionId:ie,reason:`claude_dispatch_liveness: no SDK output within ${de.waitedMs}ms of queued input (seq ${ae})`}).then(Ye=>{Ye==="no_replay_path"&&en()}).catch(Ye=>{_("claude_code.dispatch_supervisor_respawn_failed",{linzumi_thread_id:pe.threadId,source_seq:ae,message:Ye instanceof Error?Ye.message:String(Ye)}),en()});return}en()}})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0}}if(un!==void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_active_session_requires_work_description"};{let je=fn(m,"threadId"),Xe=fn(m,"channel"),_e=Y(m.sourceSeq)??Y(m.rootSeq);if(we!==void 0&&je!==void 0&&Xe!==void 0&&_e!==void 0&&R?.({channel:Xe,threadId:je,sourceSeq:_e,transportCeilingRecoveryRequestId:W})===!0)return _("claude_code.replayed_turn_already_applied_ignored",{linzumi_thread_id:je,claude_session_id:ie,body_preview:Du(we),source_seq:_e,replayed:m.replayed===!0}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0}}try{let je=Xa(m,"processing","resuming Claude Code session",{instanceId:r,codexThreadId:ie});return je!==void 0&&n.push(t,"message_state",je).catch(_e=>{_("kandan.reconnect_thread_processing_state_push_failed",{message:_e instanceof Error?_e.message:String(_e)})}),H="starting_claude_code_session",(await WZ({kandan:n,topic:t,control:m,options:o,log:_,debugTrace:b,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,resumeSessionId:ie,activeClaudeCodeSessions:c,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,ensureClaudeCodeForwardPortSession:f,disposeClaudeCodeForwardPortSession:g,leaseEpochFor:C,onLiveSourceSeqAccepted:T,onUndeliveredFollowUpsAtClose:O,claudeThreadAccessStore:B,setStartupStage:_e=>{H=_e}})).controlResponse}catch(je){let Xe=zZ(H,je);_("kandan.reconnect_thread_failed",{stage:H,message:je instanceof Error?je.message:String(je),thread_id:fn(m,"threadId")??null,source_seq:Y(m.sourceSeq)??Y(m.rootSeq)??null,agent_provider:X,provider_session_key:ie});try{await YZ({kandan:n,topic:t,control:m,failureReason:Xe,rawFailureText:je instanceof Error?je.message:String(je),failureClass:bM(H),codexThreadId:ie,instanceId:r,log:_})}catch{}throw je}}o.codexUrl===void 0&&Hb(D.cwd,{configHome:La()});let Oe=vp(o,m),vn=w===void 0?void 0:await Si("thread/attach",w(m,D.cwd,ie));if(we!==void 0){let un=Y(m.rootSeq),je=Y(m.sourceSeq)??un;if(vn===void 0||je===void 0)throw new Error("cannot reconnect a Kandan thread without a session");let Xe=fn(m,"channel"),_e=fn(m,"threadId");if(Xe!==void 0&&_e!==void 0&&R?.({channel:Xe,threadId:_e,sourceSeq:je,transportCeilingRecoveryRequestId:W})===!0)return _("kandan.reconnect_thread_seq_already_applied",{linzumi_thread_id:_e,codex_thread_id:ie,source_seq:je}),{instanceId:r,controlType:m.type,cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,duplicate:!0};let q=fn(m,"workspace"),F=await J6e(K(),ie,Bf({cwd:D.cwd,fast:Oe.fast,channelSession:{model:Oe.model,reasoningEffort:Oe.reasoningEffort,approvalPolicy:Oe.approvalPolicy,sandbox:Oe.sandbox,sandboxedApprovalNeverDefault:Oe.sandboxedApprovalNeverDefault}}),{forceRehydrate:m.sessionRehydrate===!0,log:_,buildRehydrationItems:async ae=>{let pe=await z6e(n,t,{workspace:q,channel:Xe,threadId:_e},_);if(pe===void 0||pe.nodes.length===0)return;let Te=EK({nodes:pe.nodes,budget:pe.budget,resumeFailure:ae,threadTitle:pe.threadTitle,linzumiContext:Sa(m.linzumiContext)});return _("kandan.reconnect_thread_rehydration_ir_emitted",{linzumi_thread_id:_e,codex_thread_id:ie,emitted_nodes:Te.emittedNodeCount,omitted_nodes:Te.omittedNodeCount,redacted_reasoning:Te.redactedReasoningCount,emitted_token_estimate:Te.emittedTokenEstimate,max_emission_tokens:Te.maxEmissionTokens}),Te.items},buildRehydrationText:async ae=>$4({messages:await F6e(n,t,{workspace:q,channel:Xe,threadId:_e},_),resumeFailure:ae,linzumiContext:Sa(m.linzumiContext)})});if(F.mode==="rehydrated"){ye("runner.thread_resume_rehydrated",{purpose:"linzumi.thread_runner",threadId:_e??null,codexThreadId:ie,sourceSeq:je,resumeFailure:F.resumeFailure});try{await oo(n,t,m,"processing","rebuilt the coding session from durable thread history after an unresumable engine session",{codexThreadId:ie,instanceId:r})}catch(ae){_("kandan.reconnect_thread_rehydrated_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})}}let z=Uo(o.token),V=vi($e(m.attachments)??[]);await vn.startThreadMessageTurn({seq:je,body:we,actorSlug:z.actorUsername,actorUserId:z.actorUserId,attachments:V,boundStartTimeout:!0,transportCeilingRecoveryRequestId:W})}return{instanceId:r,controlType:m.type,cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie}}case"list_claude_code_sessions":{let D=no(m.cwd,a.value);if(!D.ok)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason};if(!i.includes("claude-code"))return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let J;try{J=await b9({cwd:D.cwd,limit:Y(m.limit),messagesPerSession:Y(m.messagesPerSession),provider:o.claudeCodeSessionHistoryProvider})}catch(W){return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:W instanceof Error?`claude_code_session_history_failed:${W.message}`:"claude_code_session_history_failed"}}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!0,cwd:D.cwd,matchedRoot:D.matchedRoot,sessions:J}}case"list_agent_slash_commands":{let D=no(m.cwd,a.value);if(!D.ok)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason};let J=y(m.agentProvider)??"claude-code";if(J!=="claude-code")return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:`agent_provider_unsupported:${J}`};if(!i.includes("claude-code"))return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let W=y(m.providerSessionKey),H=W===void 0?void 0:c.get(W);if(H===void 0)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"no_active_claude_session"};try{return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!0,cwd:D.cwd,matchedRoot:D.matchedRoot,provider:"claude-code",providerSessionKey:W,commands:await H.slashCommands()}}catch(X){return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:X instanceof Error?`agent_slash_commands_failed:${X.message}`:"agent_slash_commands_failed"}}}case"browse_directory":return dFe(m,o);case"create_project":return pFe(m,o,a);case"clone_repository":return await yFe(m,o,a);case"suggest_tasks":return xFe(m,o,a.value,{kandan:n,topic:t});case"remote_codex_exec":return await xM(m,r,a.value,d,u,_);case"remote_codex_exec_cancel":return await xM(m,r,a.value,d,u,_);case"start_turn":{let D=await s("codex"),J=ww({agentProvider:"codex",modelProvider:void 0,model:void 0,llmProxyBinding:"absent",hasNativeCodexAuth:D.hasNativeCodexAuth},qa,D.agentProviders);if(J.type==="blocked"){_("linzumi.start_turn_model_account_preflight_rejected",{thread_id:m.threadId,agent_provider:J.identity[0],model_provider:J.identity[1]??null,model:J.identity[2],reason:J.code,discriminator:J.reason});try{await n.push(t,"codex_error",{instanceId:r,message:J.message})}catch(H){throw _("linzumi.start_turn_model_account_error_push_failed",{thread_id:m.threadId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,ok:!1,error:J.code}}let W=await K().request("turn/start",{threadId:m.threadId,input:m.input});return{instanceId:r,controlType:m.type,response:W}}case"steer_turn":{let D=Pi(c,[m.providerSessionKey,m.threadId],[m.threadId]);if(D!==void 0){let X=mje(m.input);if(X===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_requires_text_input"};let be;try{be=D.steerTurn(X)}catch(Oe){let vn=Oe instanceof Error?Oe.message:String(Oe);return _("claude_code.steer_failed",{thread_id:m.threadId,message:vn}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_failed",message:vn,threadId:m.threadId}}if(!await eje(be.applied))return _("claude_code.steer_not_applied",{thread_id:m.threadId,steered:be.steered}),{instanceId:r,controlType:m.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:m.threadId};let ie=Y(m.sourceSeq),we=y(m.workspace),qe=y(m.channel);return ie!==void 0&&we!==void 0&&qe!==void 0&&n.push(t,"message_state",{workspace:we,channel:qe,thread_id:m.threadId,instance_id:r,seq:ie,status:"processed",reason:Tm,agent_provider:"claude-code"}).catch(Oe=>{_("claude_code.steer_terminal_state_push_failed",{thread_id:m.threadId,seq:ie,message:Oe instanceof Error?Oe.message:String(Oe)})}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",steered:be.steered,threadId:m.threadId}}let J=m.providerSessionKey??m.threadId,W=y(m.turnId);if(W===void 0)return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.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 H=await K().request("turn/steer",{threadId:J,expectedTurnId:W,input:gm(m.input)});return{instanceId:r,controlType:m.type,response:H}}case"interrupt_turn":{let D=Pi(c,[m.threadId]);if(D!==void 0){let W=await D.interruptTurn("Interrupted by Linzumi");return{instanceId:r,controlType:m.type,agentProvider:"claude-code",interrupted:W,threadId:m.threadId}}let J=await K().request("turn/interrupt",{threadId:m.threadId,turnId:m.turnId??null});return{instanceId:r,controlType:m.type,response:J}}case"rewind_thread":return c.get(m.threadId)!==void 0||m.agentProvider==="claude-code"?{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:y(m.requestId)??null,threadId:m.threadId,ok:!1,error:"claude_code_rewind_unsupported",message:"Claude Code does not support rewind yet"}:{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,threadId:m.threadId,ok:!1,error:"rewind_not_supported",message:"This runner does not support rewinding threads yet"};case"interrupt_queued_messages":{let D=y(m.agentProvider)?.trim();if(D!=="claude-code"){let H=await K().request("turn/interrupt",{threadId:m.threadId,turnId:null});return{instanceId:r,controlType:m.type,response:H}}let J=Pi(c,[m.threadId]);if(J===void 0)return{instanceId:r,controlType:m.type,agentProvider:D,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 W=Y(m.throughSeq)??J.currentSourceSeq();if(W!==void 0)try{await Io(n,t,{workspace:J.workspace,channel:J.channel,threadId:J.threadId,sourceSeq:W,status:"failed",reason:"Claude Code interrupted by Linzumi",sessionId:m.threadId})}catch(H){_("kandan.claude_code_interrupt_state_push_failed",{message:H instanceof Error?H.message:String(H),thread_id:J.threadId,source_seq:W,claude_session_id:m.threadId})}return{instanceId:r,controlType:m.type,agentProvider:D,interrupted:!0,threadId:m.threadId}}case"stop_turn":{let D=Pi(c,[m.threadId,m.providerSessionKey],[m.threadId]);if(D!==void 0){let W=await Q6e({activeSession:D,sessionKey:m.providerSessionKey??m.threadId,publishMessageState:H=>Io(n,t,H),log:_});return _("claude_code.turn_stopped",{thread_id:D.threadId,claude_session_id:m.providerSessionKey??m.threadId,discarded_queued_source_seqs:W}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,ok:!0,stopped:!0,confirmedHalt:!0}}let J=y(m.agentProvider)?.trim();if(J!=="claude-code")try{let W=await K().request("turn/interrupt",{threadId:m.providerSessionKey??m.threadId,turnId:m.turnId??null});return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.threadId,ok:!0,stopped:!0,confirmedHalt:!0,response:W}}catch(W){_("codex.stop_turn_no_session_interrupt_failed",{thread_id:m.threadId,message:W instanceof Error?W.message:String(W)})}return{instanceId:r,controlType:m.type,agentProvider:J??null,threadId:m.threadId,ok:!1,error:"stop_turn_session_not_active"}}case"resolve_codex_approval_request":{let D=l.get(m.requestId);if(D===void 0){if(m.agentProvider==="claude-code")return{instanceId:r,controlType:m.type,skipped:!0};let be=await K().request("resolve_codex_approval_request",{...m});return{instanceId:r,controlType:m.type,response:be}}if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_provider_mismatch"};if(D.sessionId!==void 0&&m.threadId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_session_mismatch"};let J=D.decisions.get(m.decision);if(J===void 0)return _("runner.claude_code_approval_unknown_decision",{instanceId:r,requestId:m.requestId,decision:m.decision,threadId:D.threadId,claudeSessionId:D.sessionId}),{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_unknown_decision",decision:m.decision};let W=Pi(c,[D.sessionId],[D.threadId]);if(W===void 0)return _("runner.claude_code_approval_session_not_active",{instanceId:r,requestId:m.requestId,threadId:D.threadId,claudeSessionId:D.sessionId}),{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_session_not_active"};let H=J.type==="allow"?"processing":"failed";return await kQ({pending:D,decision:J,incomingStatus:H,publishMessageState:()=>Io(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,status:H,reason:J.type==="allow"?"Claude Code tool approved":"Claude Code tool denied by Linzumi",sessionId:D.sessionId}),captureMessageStateAttemptGeneration:W.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:W.adoptMessageStateConsensusForAttempt,stopSession:be=>{W.interruptTurnBeforeAbort(be),W.abortController.abort(new Error(be))},log:_,reason:"human_decision"})==="stopped"?{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:m.requestId,decision:m.decision,resolved:!1,error:"claude_code_approval_terminal_consensus"}:(KZ({threadId:D.threadId,decision:J,log:_}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:m.requestId,decision:m.decision,resolved:!0})}case"resolve_codex_user_input_request":case"deny_codex_user_input_request":return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"codex_user_input_request_not_found"};case"resolve_claude_user_input_request":{let D=p.get(m.requestId);if(D===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(m.threadId!==D.threadId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(D.sessionId!==void 0&&m.sessionId!==void 0&&m.sessionId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_session_mismatch"};let J=m.answers.map(H=>({questionId:H.questionId,selectedLabels:H.selectedLabels??[],freeText:y(H.freeText)})),W=dje({pending:D,answers:J,actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()});switch(W.type){case"error":{_("runner.claude_code_user_input_resolution_failed",{instanceId:r,requestId:m.requestId,error:W.error,selectedLabels:[...W.selectedLabels],threadId:D.threadId,claudeSessionId:D.sessionId,kind:D.kind}),D.resolve({type:"deny",message:W.error});try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:{kind:"Denied",reason:W.error,answers:J.map(H=>({questionId:H.questionId,selectedLabels:[...H.selectedLabels],freeText:H.freeText})),actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(H){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,ok:!1,error:W.error,selectedLabels:[...W.selectedLabels],requestKind:D.kind,denied:!0}}case"resolved":D.resolve(W.decision),D.kind==="tool_approval"&&KZ({threadId:D.threadId,decision:W.decision,log:_});break}{let H=Pi(c,[D.sessionId,y(m.sessionId)],[D.threadId]);if(H!==void 0){let X=D.threadId,be=D.sourceSeq,Re=D.sessionId;Nb({windowMs:j?.windowMs??mh(process.env),isDelivered:()=>D.resolved(),isSessionClosed:()=>Pi(c,[Re],[X])===void 0,lastSdkActivityMs:()=>H.lastSdkActivityMs(),hasPendingBlockingRequest:()=>ag({threadId:X,pendingApprovals:l,pendingQuestions:p}),log:_,onWedged:ie=>{let we="Claude Code did not continue after your answer - the runner restarted the session; send your message again to continue";_("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:X,claude_session_id:Re??null,source_seq:be,waited_ms:ie.waitedMs,cause:ie.cause,dispatch:W.dispatch}),H.abortController.abort(new Error(we)),(async()=>{let qe=H.sessionWork();qe!==void 0&&await Promise.race([qe.catch(()=>{}),new Promise(Oe=>{setTimeout(Oe,1e4).unref?.()})]),await Io(n,t,{workspace:D.workspace,channel:D.channel,threadId:X,sourceSeq:be,status:"failed",reason:we,sessionId:Re,failureClass:"claude_dispatch_wedged"})})().catch(qe=>{_("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:X,source_seq:be,message:qe instanceof Error?qe.message:String(qe)})})}})}}try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:W.answerState,streamState:"completed"})}catch(H){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,answers:J.map(H=>({questionId:H.questionId,selectedLabels:[...H.selectedLabels],...y(H.freeText)===void 0?{}:{freeText:y(H.freeText)}})),actorUserId:m.actorUserId,actorSlug:m.actorSlug,requestKind:D.kind,resolved:!0}}case"deny_claude_user_input_request":{let D=p.get(m.requestId);if(D===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(m.threadId!==D.threadId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(D.sessionId!==void 0&&m.sessionId!==void 0&&m.sessionId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_session_mismatch"};D.resolve({type:"deny",message:m.reason??"Denied by Linzumi"});try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:{kind:"Denied",reason:m.reason??"Denied by Linzumi",actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(J){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:J instanceof Error?J.message:String(J)}),J}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,reason:m.reason??"Denied by Linzumi",actorUserId:m.actorUserId,actorSlug:m.actorSlug,denied:!0}}case"read_thread":{let D=await K().request("thread/read",{threadId:m.threadId,includeTurns:m.includeTurns??!0});return{instanceId:r,controlType:m.type,response:D}}case"update_session_settings":{let D=y(m.threadId),J=Pi(c,[D],[D]),W=y(m.approvalPolicy)??void 0,H=y(m.sandbox)??void 0;if(J===void 0)return{instanceId:r,controlType:m.type,skipped:!0};let X=await J.updateSettings({model:y(m.model)??void 0,approvalPolicy:W,reasoningEffort:y(m.reasoningEffort)??void 0}),be=y(X.model),Re=y(X.approval_policy),ie=y(X.reasoning_effort),we=y(m.sandbox);if(S6e({appliedModel:be,appliedApprovalPolicy:Re,appliedReasoningEffort:ie,controlSandbox:we})){let qe={workspace:J.workspace,channel:J.channel,thread_id:J.threadId,codex_thread_id:m.threadId,updated_at:new Date().toISOString(),...be!==void 0?{model:be}:{},...Re!==void 0?{approvalPolicy:Re}:{},...ie!==void 0?{reasoningEffort:ie}:{},...we!==void 0?{sandbox:we}:{}},Oe=await n.push(t,"session:settings",qe);if(!(ne(Oe)&&Oe.status==="ok"))throw new Error(`kandan push failed: session:settings: ${JSON.stringify(Oe).slice(0,500)}`)}return Re!==void 0&&B?.record(J.threadId,{approvalPolicy:Re,sandbox:H}),X.approval_policy==="never"&&await RQ({kandan:n,topic:t,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,sessionThreadId:J.threadId,actorUserId:m.actorUserId,actorSlug:m.actorSlug,captureMessageStateAttemptGeneration:J.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:J.adoptMessageStateConsensusForAttempt,stopSession:qe=>{J.interruptTurnBeforeAbort(qe),J.abortController.abort(new Error(qe))},log:_,reason:"full_access_enabled"}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,applied:X}}case"stop_instance":case"kill_instance":{let D="threadId"in m&&typeof m.threadId=="string"?m.threadId:void 0,J=D===void 0?void 0:c.get(D);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:m.type,agentProvider:"claude-code",threadId:D,stopped:!0}):{instanceId:r,controlType:m.type,skipped:!0}}case"set_thread_collaboration_mode":return{instanceId:r,controlType:m.type,requestId:m.requestId,threadId:m.threadId,collaborationMode:m.collaborationMode,ok:!1,error:"thread_not_loaded"};case"review_thread":return{instanceId:r,controlType:m.type,requestId:m.requestId,threadId:m.threadId,ok:!1,error:"thread_not_loaded"};case"steer_child_thread":return _("steer_child_thread.missing_channel_session",{threadId:m.threadId,providerChildThreadId:m.providerChildThreadId,providerSessionKey:m.providerSessionKey}),{instanceId:r,controlType:m.type,ok:!1,error:"child_channel_session_not_loaded"};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"multi_agent_jobs_state":case"document_surfaces_state":case"fleet_breaker_state":case"route_outage_state":case"stream_idle_timeout_default":case"set_commander_impl":case"replace_runner":case"stop_process":return{instanceId:r,controlType:m.type,skipped:!0}}}async function xM(e,n,t,r,o,i){switch(e.type){case"remote_codex_exec":{let s=y(e.requestId)?.trim(),a=new AbortController;s!==void 0&&s!==""&&o.set(s,a);let d=await qK(e,{instanceId:n,allowedCwds:t,sandboxRunner:r,abortSignal:a.signal});return s!==void 0&&s!==""&&o.delete(s),i("remote_codex_exec.handled",{requestId:y(e.requestId)??null,ok:d.ok===!0,error:typeof d.error=="string"?d.error:null}),d}case"remote_codex_exec_cancel":{let s=y(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 zZ(e,n){let t=W6e(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 bM(e){return e==="checking_project_trust"?"project_untrusted":"start_stage_transient"}function bp(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 vM(e,n,t){let r=e==="startup"?`Claude Code startup readiness failed: ${n}`:`Claude Code readiness changed to ${n}`,o=t?.trim();return bp(o===void 0||o===""?r:`${r} (${o})`,480)}function V6e(e=or){e({severity:"info",key:"runner.execution_health_failed:claude-code",message:"Claude Code login restored - Claude Code coding jobs are available again."})}function W6e(e){return bp(e,240)}function H6e(){let e={value:{status:"starting",reason:"execution_leg_readiness_not_proven"}},n=(o,i=[])=>i.length===0?{status:"ready",adapters:o}:{status:"ready",adapters:o,failures:i},t=o=>{switch(o.status){case"starting":return[];case"ready":return o.failures??[];case"failed":return o.failures??[{adapter:o.adapter,reason:o.reason}]}};return{snapshot:()=>e.value,canClaimWork:o=>{switch(e.value.status){case"starting":case"failed":return!1;case"ready":return o===void 0||e.value.adapters.includes(o)}},markReady:o=>{switch(e.value.status){case"starting":e.value=n([o]);break;case"ready":{let i=t(e.value).find(s=>s.adapter===o);if(i!==void 0)throw new Error(`runner execution leg failed before readiness: ${i.reason}`);e.value.adapters.includes(o)||(e.value=n([...e.value.adapters,o],t(e.value)));break}case"failed":{let i=t(e.value),s=i.find(a=>a.adapter===o);if(s!==void 0)throw new Error(`runner execution leg failed before readiness: ${s.reason}`);e.value=n([o],i);break}}},markReadyAfterRecovery:o=>{switch(e.value.status){case"starting":e.value=n([o]);break;case"ready":{let i=e.value.adapters.includes(o)?e.value.adapters:[...e.value.adapters,o];e.value=n(i,t(e.value).filter(s=>s.adapter!==o));break}case"failed":{e.value=n([o],t(e.value).filter(i=>i.adapter!==o));break}}},markFailed:(o,i)=>{let s=o.trim();if(s==="")throw new Error("runner execution-leg failure requires a reason");let a={adapter:i,reason:s};switch(e.value.status){case"starting":e.value={status:"failed",adapter:i,reason:s};break;case"ready":{let d=e.value.adapters.filter(c=>c!==i),u=[...t(e.value).filter(c=>c.adapter!==i),a];e.value=d.length===0?{status:"failed",adapter:i,reason:s,...u.length===1?{}:{failures:u}}:n(d,u);break}case"failed":{let d=t(e.value);d.some(u=>u.adapter===i)||(e.value={...e.value,failures:[...d,a]});break}}},markNotReady:(o,i)=>{let s=o.trim();if(s==="")throw new Error("runner execution-leg demotion requires a reason");switch(e.value.status){case"starting":case"failed":break;case"ready":{let a=e.value.adapters.filter(u=>u!==i),d=[...t(e.value).filter(u=>u.adapter!==i),{adapter:i,reason:s}];e.value=a.length===0?{status:"failed",adapter:i,reason:s,...d.length===1?{}:{failures:d}}:n(a,d);break}}},refusalReason:o=>{switch(e.value.status){case"starting":return`runner_execution_leg_unhealthy: ${e.value.reason}`;case"failed":return`runner_execution_leg_unhealthy: ${(o===void 0?void 0:t(e.value).find(s=>s.adapter===o))?.reason??e.value.reason}`;case"ready":{if(o!==void 0&&!e.value.adapters.includes(o))return`runner_execution_leg_unhealthy: ${t(e.value).find(s=>s.adapter===o)?.reason??`${o}_readiness_not_proven`}`;throw new Error("runner execution leg is ready and has no refusal reason")}}},capabilityFields:()=>({executionHealth:e.value})}}async function G6e(e){if(UZ(e.health),e.activateDispatch(),await e.publishReadyHealth(),UZ(e.health),!e.signalGenerationReady())throw new Error("runner generation-ready signal was not delivered");return{type:"ready",delivered:!0}}function UZ(e){let n=e.snapshot();switch(n.status){case"ready":break;case"starting":throw new Error(`runner execution leg is starting: ${n.reason}`);case"failed":throw new Error(`runner execution leg is failed: ${n.reason}`)}}function Z6e(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 Q6e(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 Pi(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}}function X6e(e,n){return Pi(e,[n],[n])===void 0?"codex":"claude-code"}async function eje(e){let n;try{return await Promise.race([e,new Promise(t=>{n=setTimeout(()=>t(!0),Y6e),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}}async function kQ(e){let n=e.pending.sourceSeq;if(n===void 0)return e.log("claude_code.approval_consensus_source_seq_missing",{thread_id:e.pending.threadId,claude_session_id:e.pending.sessionId??null,reason:e.reason}),e.stopSession("Claude Code approval has no source sequence"),"stopped";let t=e.captureMessageStateAttemptGeneration(),r;try{r=await e.publishMessageState()}catch(i){e.log("claude_code.approval_consensus_push_unconfirmed",{thread_id:e.pending.threadId,source_seq:n,claude_session_id:e.pending.sessionId??null,reason:e.reason,message:i instanceof Error?i.message:String(i)}),r={kind:"unconfirmed"}}return e.adoptMessageStateConsensusForAttempt(n,e.incomingStatus,r,t)==="stop"?(e.log("claude_code.approval_terminal_consensus",{thread_id:e.pending.threadId,source_seq:n??null,claude_session_id:e.pending.sessionId??null,disposition:r.kind,reason:e.reason}),e.stopSession("Claude Code turn already terminated by the server"),"stopped"):(e.pending.resolve(e.decision),"resolved")}function BZ(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 nje(e){if(e.agentReplay?.provider==="codex"||e.codexUrl!==void 0||Ys(e))return!0;switch(e.dependencyStatus?.codex.available){case!1:return!1;case!0:case void 0:return!0}}function mp(e){let n=y(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 tje(e){switch(e){case"codex":return"Codex";case"claude-code":return"Claude Code"}}function Pw(e){let n=y(e.modelProvider)?.trim(),t=A(e.llmProxy),r=y(t?.baseUrl)?.trim(),o=y(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 CQ(e){if(e.type==="error")return e.error;if(e.type==="provider"&&e.runtime.provider==="openai-proxy"&&Js()===void 0)return"codex_llm_proxy_requires_openai_api_key"}function JZ(e,n){let t=Pw(n);switch(t.type){case"none":return;case"error":return t.error;case"provider":{let r=CQ(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 rje(e){if(e.linzumiAgentMcpToken===void 0||e.linzumiAgentMcpToken===""||tE(e.env))return;let n=oje(e.env,e.kandanUrl);if(n===void 0||n==="")return wM("cloud agent turn requires a server URL (kandanUrl) and none was configured; refusing to run the @linzumi agent turn on the host");if(ije(n))return wM(`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(!_u(e.env))return wM("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=Vs()}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=uK({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=Dw(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 dK({connection:r,workspaceSlug:e.workspaceSlug,kandanUrl:n,linzumiAgentMcpToken:e.linzumiAgentMcpToken,ownerUsername:e.ownerUsername,modelProvider:s,llmProxyToken:e.modelProviderRuntime?.llmProxyToken,agentSpec:i,prewarm:!0})}function wM(e){return()=>Promise.reject(new At(e))}function oje(e,n){let t=e.LINZUMI_CLOUD_AGENT_PUBLIC_URL?.trim();return t!==void 0&&t!==""?t:n}function ije(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 Dw(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 TQ(e){switch(e.provider){case"wafer":return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken};case"openai-proxy":{let n=Js();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 PQ(e){e.options.codexUrl===void 0&&(e.setStartupStage("checking_project_trust"),Hb(e.cwd,{configHome:La()})),e.setStartupStage("starting_codex_session");let n=Ro(e.control.developerPrompt),t=Sa(e.control.linzumiContext),r=vp(e.options,e.control),o=await Si("thread/start",e.codex.request("thread/start",Pje(r,{cwd:e.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",developerInstructions:Hf({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:!Ys(e.options)||zM(e.options),devServicesAvailable:!Ys(e.options),developerPrompt:n,...$M(e.control),linzumiContext:t,...Gc(r.sandbox)&&r.sandbox!==void 0?{sandboxNetworkPosture:{sandbox:r.sandbox,approvalCapable:Zc(r.approvalPolicy)}}:{}})}))),i=b6e(o);e.setStartedCodexThreadId(i);let s=Ro(e.control.workDescription);i!==void 0&&n!==void 0&&await wje(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 Si("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=vi($e(e.control.attachments)??[]);if(a===void 0||u===void 0)throw new Ib({codexThreadId:i,kandanThreadId:fn(e.control,"threadId"),hasThreadSession:a!==void 0,sourceSeq:u});let l=Uo(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 sje(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 aje(e){let n=e.onInputDelivered,t=e.isLiveSteerAllowed,r=e.onInputWait,o=e.onSourceSeqDelivered,i=[SM(e.content)],s=[e.sourceSeq],a=[],d=new Set,u=[],c=new Map,l=v=>new Promise(S=>{c.set(v,S)}),p=(v,S)=>{let C=c.get(v);C!==void 0&&(c.delete(v),C(S))},f={closed:!1},g=()=>{for(;f.closed;){let v=u.shift();if(v===void 0)return;v({done:!0,value:void 0})}},m=(v,S,C)=>{s.push(S),n?.(),S!==void 0&&o!==void 0&&!d.has(S)&&(d.add(S),o(S)),C?.();let T=u.shift();if(T===void 0){i.push(v);return}p(v,!0),T({done:!1,value:v})},_=(v,S,C)=>s.length>0?(a.push({message:v,sourceSeq:S,onDelivered:C}),{disposition:"parked",queuePosition:a.length}):(m(v,S,C),{disposition:"delivered"}),b=v=>{if(f.closed)throw new Error("Claude Code streaming input is closed");let S=SM(v.content);return _(S,v.sourceSeq,v.onDelivered)},w=v=>{if(f.closed)throw new Error("Claude Code streaming input is closed");let S=SM(v),C=l(S);if(s.length===0)return _(S,void 0),{steered:"steered_queued",applied:C};if(t?.()===!1)return _(S,void 0),{steered:"steered_queued",applied:C};let T=u.shift();return T===void 0?i.push(S):(p(S,!0),T({done:!1,value:S})),{steered:"steered_live",applied:C}};return{messages:{[Symbol.asyncIterator](){return{next(){let v=i.shift();return v!==void 0?(p(v,!0),Promise.resolve({done:!1,value:v})):f.closed?Promise.resolve({done:!0,value:void 0}):(r?.(s[0]),new Promise(S=>{u.push(S)}))}}}},close:()=>{if(s.length===0)for(;a.length>0;){let v=a.shift();v!==void 0&&m(v.message,v.sourceSeq,v.onDelivered)}f.closed=!0,g();for(let[v,S]of c)c.delete(v),S(!1)},enqueue:b,enqueueSteer:w,drainUndeliveredFollowUps:()=>a.splice(0),completeTurn:()=>{let v=s.shift();if(!f.closed&&s.length===0){let S=a.shift();S!==void 0&&m(S.message,S.sourceSeq,S.onDelivered)}return v},currentSourceSeq:()=>s[0]}}function SM(e){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null}}function KZ(e){if(e.decision.type!=="allow")return;let n=E9(e.decision.updatedPermissions);if(n.length!==0)try{D9(e.threadId,n),e.log("claude_code.thread_permission_grants_recorded",{linzumi_thread_id:e.threadId,rules:n.map(VI)})}catch(t){e.log("claude_code.thread_permission_grants_persist_failed",{linzumi_thread_id:e.threadId,message:t instanceof Error?t.message:String(t)})}}function dje(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:k9(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 IQ(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(ag({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=f=>{u||(u=!0,c(),d(f))};o=l,i=()=>{s||(s=!0,(async()=>{try{await hp(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(f){console.error("kandan.claude_code_user_input_abort_publish_failed",e.questionRequest.requestId,f instanceof Error?f.message:String(f))}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 hp(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 hp(e,n,t){await e.push(n,"session:stream_thread_message",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,stream_key:T9(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:C9({request:t.request,sessionId:t.sessionId,sourceSeq:t.sourceSeq,answerState:t.answerState,streamState:t.streamState})}})}function ag(e){return[...e.pendingApprovals.values()].some(n=>n.threadId===e.threadId)||[...e.pendingQuestions.values()].some(n=>n.threadId===e.threadId)}async function uje(e){let n=S9(e.request),t=new Map(n.choices.map(r=>[r.label,r.permissionDecision]));return IQ({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 VZ(){return kM.value===void 0&&(kM.value=_8(y8(process.env))),kM.value}async function WZ(e){try{return await HZ(e)}catch(n){if(!(n instanceof ja))throw n;e.log("claude_code.dispatch_liveness_respawn_retry",{thread_id:fn(e.control,"threadId")??null,resume_session_id:e.resumeSessionId??null,waited_ms:n.waitedMs});try{return await HZ(e)}catch(t){throw t instanceof ja?new Error(cje):t}}}async function HZ(e){let n=gp(e.control,"workspace"),t=gp(e.control,"channel"),r=gp(e.control,"threadId"),o=Y(e.control.rootSeq),i=Y(e.control.sourceSeq)??o,s=Ro(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:Du(s),message_received_at_ms:Date.now()}),e.resumeSessionId!==void 0){let $=await VZ().acquire();($.waitedMs>0||$.timedOut)&&e.log("claude_code.resume_start_throttled",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId,waited_ms:$.waitedMs,timed_out:$.timedOut})}let a=$=>{e.log("claude_code.turn_terminal",{turn_id:null,outcome:"failed",reason:$,thread_id:r,claude_session_id:e.resumeSessionId??null})},d,u=!1,c=!1,l,p=!1,f,g=0,m=!1,_=!1,b=!1,w,v=!1,S=$=>({workspace:n,channel:t,thread_id:r,codex_thread_id:$,provider_session_key:$,agent_provider:"claude-code",claude_session_id:$,cwd:e.cwd,instance_id:e.instanceId}),C=()=>{if(!u||!c||d===void 0)return;let $=()=>{let Le=d;if(p||!u||!c||Le===void 0)return;p=!0;let G=e.kandan.push(e.topic,"session:typing_start",S(Le)).then(()=>{}).catch(Pe=>{e.log("kandan.claude_code_typing_heartbeat_failed",{thread_id:r,claude_session_id:Le,message:Pe instanceof Error?Pe.message:String(Pe)})}).finally(()=>{p=!1});f=G,G.finally(()=>{f===G&&(f=void 0)})};$(),l===void 0&&(l=setInterval($,mqe),l.unref?.())},T=()=>{if(m){_=!0;return}u=!0,g+=1,C()},P=()=>{_&&(_=!1,T())},O=()=>{if(m){b=!0;return}ie.completeTurn()},R=()=>{b&&(b=!1,O())},j=()=>{b=!1,v=!0,ie.completeTurn()},B=async($,Le)=>{let G,Pe=new Promise(xt=>{G=setTimeout(()=>xt("timeout"),gqe),G.unref?.()}),We=await Promise.race([$.then(()=>"processed"),Pe]);G!==void 0&&clearTimeout(G),We==="timeout"&&e.log("claude_code.terminal_processing_timeout",{linzumi_thread_id:r,claude_session_id:Le.sessionId,event_type:Le.type})},K=async($,Le)=>{let G,Pe=new Promise(xt=>{G=setTimeout(()=>xt("timed_out"),hqe),G.unref?.()}),We=await Promise.race([$.then(()=>"settled"),Pe]);return G!==void 0&&clearTimeout(G),We==="timed_out"&&e.log("kandan.claude_code_typing_start_wait_timeout",{thread_id:r,claude_session_id:Le}),We},D=async()=>{let $=u,Le=d,G=g;if(u=!1,l!==void 0&&(clearInterval(l),l=void 0),!(!$||!c||Le===void 0))try{let Pe=f;if(Pe!==void 0&&await K(Pe,Le)==="timed_out"&&f===Pe&&(f=void 0,p=!1),u||g!==G)return;await e.kandan.push(e.topic,"session:typing_stop",S(Le))}catch(Pe){e.log("kandan.claude_code_typing_stop_failed",{thread_id:r,claude_session_id:Le,message:Pe instanceof Error?Pe.message:String(Pe)})}},J=vi($e(e.control.attachments)??[]),W=await FC({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:J}).then($=>({ok:!0,content:$})).catch($=>({ok:!1,error:$}));if(!W.ok){let $=W.error instanceof Error?W.error.message:String(W.error),Le=`Claude Code input attachment download failed: ${$}`;a(Le);try{await oo(e.kandan,e.topic,e.control,"failed",Le,{instanceId:e.instanceId,failureClass:"attachment_download_failed"})}catch(G){e.log("kandan.start_instance_claude_code_attachment_failed_state_push_failed",{message:G instanceof Error?G.message:String(G)})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:$}}}let H=()=>{},X=!1,be=new Promise($=>{H=$}),Re=()=>{X||(X=!0,setImmediate(H))},ie=aje({content:W.content,sourceSeq:i,onInputDelivered:T,isLiveSteerAllowed:()=>!m,onInputWait:$=>{$===void 0&&Re()},onSourceSeqDelivered:$=>{we.add($),e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:$})}}),we=new Set,qe=new Set,Oe=0,vn=Ro(e.control.developerPrompt),un=Sa(e.control.linzumiContext),je=vp(e.options,e.control),Xe=y(e.control.approvalPolicy)!==void 0,_e=e.claudeThreadAccessStore?.resolve(r),q=Sp(e.options),F=Xe?je.approvalPolicy:_e?.approvalPolicy??q.approvalPolicy,z=Xe?je.sandbox:_e?.sandbox??q.sandbox,V=F===void 0?void 0:Jf(F,z),ae=V!==void 0?CM(V):je.approvalPolicy===void 0?void 0:CM(je.approvalPolicy);if(V!==void 0&&e.claudeThreadAccessStore?.record(r,{approvalPolicy:V,sandbox:z}),e.resumeSessionId!==void 0)try{await x9({cwd:e.cwd,sessionId:e.resumeSessionId,validator:e.options.claudeCodeSessionValidator})}catch($){throw a($ instanceof Error?$.message:String($)),$}let pe={runnerIdentity:Uo(e.options.token),codexVersion:void 0},Te=new AbortController,Z=nh({stop:()=>{Te.signal.aborted||Te.abort(new Error("engine child reaper teardown"))},pid:void 0,ownProcessGroup:!1,kind:"claude_code"}),de=new Set(i===void 0?[]:[i]),ue={value:void 0},en=!1,Ye,Be=[],In=!1,ft,ee=Qs({kandanUrl:e.options.kandanUrl,accessToken:e.options.token,fetchImpl:e.options.fetch,operatingMode:"text"}),Q=s.trim().slice(0,2e3),he=hB({replacePlanSteps:ee.replaceCodingJobPlanSteps,threadId:r,goal:Q,log:e.log}),He=async()=>{if(e.resumeSessionId!==void 0)return;let $=5e3,Le=new AbortController,G,Pe=new Promise(We=>{G=setTimeout(()=>{Le.abort(new Error("claude goal seed timed out")),e.log("claude_code.goal_seed_timeout",{thread_id:r,timeout_ms:$}),We()},$)});try{await Promise.race([gB({upsertCodingJobPlan:ee.upsertCodingJobPlan,threadId:r,goal:Q,log:e.log,signal:Le.signal}),Pe])}finally{G!==void 0&&clearTimeout(G)}},N={model:je.model,modelProvider:je.modelProvider},ce=lB({flushJournaledTerminal:()=>te.flush(IZ),publishMessageState:$=>Io(e.kandan,e.topic,{workspace:n,channel:t,threadId:r,sourceSeq:$.sourceSeq,status:$.status,reason:$.reason,sessionId:d,fate:$.fate,retryable:$.retryable,holdDeadlineAt:$.holdDeadlineAt,model:$.model,provider:$.provider}),adoptMessageStateConsensus:($,Le,G)=>te.adoptMessageStateConsensus($,Le,G),acceptRestart:$=>te.acceptRouteOutageRestart($),enqueue:$=>ie.enqueue($).disposition,isSessionClosed:()=>Te.signal.aborted,attribution:()=>({...N.model===void 0?{}:{model:N.model},...N.modelProvider===void 0?{}:{provider:N.modelProvider}}),log:($,Le)=>e.log($,{thread_id:r,...Le})});i!==void 0&&ce.retainInput(i,W.content);let te=uB({instanceId:e.instanceId,cwd:e.cwd,threadKey:`${n}:${t}:${r}`,persistDir:e.options.claudeCodeRunner===void 0?ng():void 0,wire:()=>({workspaceSlug:n,channelSlug:t,kandanThreadId:r,codexThreadId:d??e.resumeSessionId,rootSeq:o,leaseEpoch:e.leaseEpochFor?.(r)}),push:async($,Le,G,Pe)=>{let We=await e.kandan.push(e.topic,$,Le,Pe);if(ne(We)&&We.status==="ok")return We;throw new Error(`kandan push failed: ${$}: ${JSON.stringify(We).slice(0,500)}`)},preparePush:($,Le)=>k_({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:(G,Pe)=>e.log(G,Pe)},$,Le),runnerPayload:($,Le,G,Pe)=>Hi({...e.options,cwd:e.cwd},e.instanceId,$,Le,pe,G,Pe),currentSourceSeq:ie.currentSourceSeq,routeOutageActive:()=>Pa(void 0,N.model,0)==="active",runtimeMetadataForSourceSeq:()=>({model:N.model??null,model_provider:N.modelProvider??null}),onTurnTerminal:($,Le,G,Pe,We,xt,xa)=>{e.log("claude_code.turn_terminal",{turn_id:$,outcome:Le,reason:G??null,thread_id:r,claude_session_id:d??null,...xt===void 0?{}:{fate:xt}}),(Le==="failed"||Le==="interrupted")&&xt==="route_outage"&&We!==void 0&&ce.park({sourceSeq:We,reason:G,provider:xa?.provider,model:xa?.model,holdCeilingMs:xa?.holdCeilingMs}),Le==="completed"&&We!==void 0&&(e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:We}),ce.releaseRetained(We)),w?.(),w=void 0},onTodoWriteCompleted:he.handleTodoWrite,suppressProcessingState:()=>{for(let $ of e.pendingClaudeCodeApprovals.values())if($.threadId===r)return!0;for(let $ of e.pendingClaudeCodeUserQuestions.values())if($.threadId===r)return!0;return!1},log:e.log,debugTrace:e.debugTrace}),ke=e.options.claudeCodeRunner===void 0&&XB(process.env)?YB({captureDir:Tt(lQ(),`linzumi-claude-live-bash-${e.instanceId}`),onOutputDelta:($,Le)=>{d!==void 0&&te.handleTranscriptEvent({type:"command_output_delta",sessionId:d,itemKey:$,delta:Le})},log:($,Le)=>e.log($,Le)}):void 0,Ae,nn;try{let $=UQ(),Le=BM({...e.options,codingJobMcpToken:jM(e.control)});Ae=Le.cleanup;let G=$s({command:$.command,argsPrefix:$.argsPrefix,kandanUrl:e.options.kandanUrl,authFilePath:Le.path,ownerUsername:Ow(e.options),operatingMode:"text",cwd:e.cwd,threadId:r,toolScope:e.options.codingJobToolScope,multiAgentJobs:e.options.multiAgentJobs===!0,devServices:{scope:e.options.runnerId,ownerPid:UM(e.options)}});nn=g4(G)}catch($){Ae?.(),Ae=void 0,e.log("claude_code.mcp_config_failed",{message:$ instanceof Error?$.message:String($),thread_id:r})}let Yn={kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,cwd:e.cwd,initialPrompt:s,rootSeq:o,log:e.log},pn=new Map,Kt=async $=>{let Le=Date.now(),G=NI($.rateLimit,Le);e.log("claude_code.rate_limit",{linzumi_thread_id:r,claude_session_id:$.sessionId??d??null,rate_limit_summary:`claude/${$.rateLimit.rateLimitType??"account"} ${G}`,status:$.rateLimit.status??null,utilization_percent:$.rateLimit.utilizationPercent??null,resets_at_ms:$.rateLimit.resetsAtMs??null});let Pe=$.rateLimit.rateLimitType??"account",We=Sje($.rateLimit);if(We!==pn.get(Pe))try{await kje({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,claudeSessionId:$.sessionId??d,rateLimit:$.rateLimit}),pn.set(Pe,We)}catch(xt){e.log("claude_code.rate_limit_post_failed",{thread_id:r,message:xt instanceof Error?xt.message:String(xt)})}},qo=async $=>{if(Oe=Date.now(),e.debugTrace?.record("claude-transcript","transcript.event",{eventType:$.type,threadId:r,activeSessionId:d??null,event:$}),Uy.observeTranscriptEvent($),$.type==="tool_call"&&$.toolName==="Bash"){let G=y($.input.command);G!==void 0&&sx(r,G)}try{await hje(Yn,$)}catch(G){e.log("claude_code.session_store_mirror_failed",{session_id:$.sessionId??null,event_type:$.type,message:G instanceof Error?G.message:String(G)})}if($.type==="session_started"){d=$.sessionId,e.log("claude_code.session_started",{linzumi_thread_id:r,claude_session_id:$.sessionId}),e.activeClaudeCodeSessions.set($.sessionId,{abortController:Te,workspace:n,channel:t,threadId:r,currentSourceSeq:ie.currentSourceSeq,adoptMessageStateConsensus:te.adoptMessageStateConsensus,captureMessageStateAttemptGeneration:te.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:te.adoptMessageStateConsensusForAttempt,pauseOutbox:()=>te.pauseOutbox(),resumeOutbox:()=>te.resumeOutbox(),inputDelivered:G=>we.has(G)||qe.has(G),lastSdkActivityMs:()=>Oe,enqueueInput:G=>{if(G.sourceSeq!==void 0&&de.has(G.sourceSeq))return"duplicate";let Pe=ie.enqueue(G);return G.sourceSeq!==void 0&&(ce.noteSupersession("new_user_input"),ce.retainInput(G.sourceSeq,G.content)),G.sourceSeq!==void 0&&de.add(G.sourceSeq),Pe},closeInput:ie.close,hasActiveTurn:()=>te.activeTurnId()!==void 0,sessionWork:()=>ue.value,steerTurn:ie.enqueueSteer,interruptTurn:async G=>{ce.noteSupersession("interrupt_turn");let Pe=te.interruptActiveTurn(G);return await Ye?.interrupt(),Pe},interruptTurnBeforeAbort:G=>{let Pe=Ye;return ce.noteSupersession("interrupt_before_abort"),Z6e({reason:G,threadId:r,interruptActiveTurn:We=>te.interruptActiveTurn(We),interruptSessionControls:Pe===void 0?void 0:()=>Pe.interrupt(),log:e.log})},discardQueuedFollowUpsForStop:()=>(ce.noteSupersession("stop_discard"),ie.drainUndeliveredFollowUps().map(Pe=>Pe.sourceSeq).filter(Pe=>Pe!==void 0)),markFollowUpSeqDiscarded:G=>{qe.add(G)},slashCommands:async()=>{if(In)return Be;let G=await Ye?.supportedCommands();return In||G!==void 0&&(Be=G),Be},updateSettings:async G=>{let Pe={};if(G.model!==void 0&&(await Ye?.setModel(TM(G.model)),Pe.model=G.model,N.model=G.model),G.approvalPolicy!==void 0){let We=CM(G.approvalPolicy);We!==void 0&&(await Ye?.setPermissionMode(We),Pe.approval_policy=G.approvalPolicy)}if(G.reasoningEffort!==void 0){let We=ZZ(G.reasoningEffort);We!==void 0&&(await Ye?.setEffort?.(We),Pe.reasoning_effort=G.reasoningEffort)}return Pe}}),e.ensureClaudeCodeForwardPortSession?.({sessionId:$.sessionId,workspace:n,channel:t,threadId:r,cwd:e.cwd,rootSeq:o,currentSourceSeq:ie.currentSourceSeq}),te.handleTranscriptEvent($),await e.kandan.push(e.topic,"session:bind",{workspace:n,channel:t,thread_id:r,codex_thread_id:$.sessionId,provider_session_key:$.sessionId,agent_provider:"claude-code",claude_session_id:$.sessionId,cwd:e.cwd,instance_id:e.instanceId}),c=!0,T();return}if($.type==="slash_command_catalog"){Be=$.commands,$.source==="commands_changed"&&(In=!0);return}let Le=$.type==="turn_completed"||$.type==="turn_interrupted"||$.type==="session_completed"||$.type==="session_failed";if(Le){m=!0;let G=te.activeTurnId(),Pe=!1,We=()=>{},xt=()=>{Pe=!0,We()},xa=new Promise(Fo=>{We=Fo});w=xt,te.handleTranscriptEvent($);let Bi=$.type==="turn_completed"||$.type==="turn_interrupted",Ky=Bi||G!==void 0||Pe;try{Ky?(await B(xa,$),await te.flush(IZ)):w===xt&&(w=void 0)}catch(Fo){e.log("claude_code.terminal_typing_flush_timeout",{linzumi_thread_id:r,claude_session_id:$.sessionId,event_type:$.type,message:Fo instanceof Error?Fo.message:String(Fo)})}w===xt&&(w=void 0),Bi&&(j(),ie.currentSourceSeq()!==void 0&&Re()),($.type==="session_completed"||$.type==="session_failed")&&d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),$.type==="session_completed"&&Re(),m=!1,await D(),R(),P(),await ax({threadKey:r,workspace:n,channel:t,threadId:r,push:(Fo,$c)=>e.kandan.push(e.topic,Fo,$c),log:(Fo,$c)=>e.log(Fo,$c)})}if(($.type==="turn_completed"||$.type==="session_completed")&&e.log("claude_code.turn_completed",{linzumi_thread_id:r,claude_session_id:$.sessionId,body_source:$.bodySource??null,body_preview:Du($.body)}),$.type==="rate_limit"&&await Kt($),$.type==="tool_result"&&ke?.settleTool($.itemKey),($.type==="turn_interrupted"||$.type==="session_failed")&&ke?.settleAll(),$.type==="session_failed"&&e.log("claude_code.session_failed",{linzumi_thread_id:r,claude_session_id:$.sessionId??null,model_transport_lane:Lo.lane,reason:$.reason,api_error_status:$.apiErrorProvenance?.status??null,api_error_request_id:$.apiErrorProvenance?.requestId??null,api_error_message:$.apiErrorProvenance?.message??null}),$.type==="usage"){let G=f9($.usage);G!==void 0&&e.log("claude_code.token_usage",{linzumi_thread_id:r,claude_session_id:$.sessionId,token_usage_summary:G})}Le||te.handleTranscriptEvent($)},pr=A(e.control.llmProxy),xo=y(pr?.baseUrl)?.trim(),jo=y(pr?.token)?.trim(),Lo=T8({env:process.env,llmProxyBindingPresent:xo!==void 0&&xo!==""&&jo!==void 0&&jo!=="",hostedLinzumiAgentContext:e.control.linzumiAgent!==void 0||e.options.threadProcess?.role==="thread"&&e.options.linzumiAgentMcpToken!==void 0,routedNonAnthropicModel:AQ(je.model)!==void 0});e.log("claude_code.model_transport_lane",{linzumi_thread_id:r,lane:Lo.lane,credential_class:Lo.credentialClass,reason:Lo.reason});let Uy=E8({lane:Lo.lane,workspace:n,channel:t,threadId:r,model:TM(je.model),push:($,Le)=>e.kandan.push(e.topic,$,Le),log:e.log}),Fr,ga,zi;if(Lo.lane==="llm_proxy"&&xo!==void 0&&xo!==""&&jo!==void 0&&jo!==""){try{Fr=await tI({upstreamBaseUrl:xo,initialToken:jo,log:(Le,G)=>e.log(Le,{linzumi_thread_id:r,...G}),debugTrace:e.debugTrace,debugTraceId:e.debugTrace===void 0?void 0:`claude-code:${e.instanceId}`,dispatcher:Xo()?.dispatcher,onUpstreamRateLimited:({retryAfterMs:Le})=>VZ().notifyRateLimited({retryAfterMs:Le})});let $=Fr;ga=rI({relay:Fr,mint:()=>EQ(e.kandan,e.topic,$.currentToken()),log:(Le,G)=>e.log(Le,{linzumi_thread_id:r,...G})})}catch($){e.log("llm_proxy_relay.start_failed_fallback_to_env_token",{linzumi_thread_id:r,message:$ instanceof Error?$.message:String($)}),Fr=void 0,ga=void 0}zi=Fr!==void 0?XZ(process.env,{baseUrl:Fr.baseUrl},je.model):XZ(process.env,{baseUrl:xo,token:jo},je.model)}else zi=bje(process.env);let By=_qe(zi),Dc=()=>ie.currentSourceSeq()!==void 0&&!ag({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),Jy=($,Le)=>{if(lje($.toolName))return Promise.resolve({type:"allow"});let G=w9($);switch(G.type){case"question":return(async()=>{await D();let Pe=await IQ({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ie.currentSourceSeq(),request:$,questionRequest:G.request,kind:"question",approvalDecisions:void 0,leaseEpoch:e.leaseEpochFor?.(r),signal:Le});return T(),Pe})();case"invalid":return Promise.resolve({type:"deny",message:G.message});case"not_question":{let Pe=A9(fh(r),$);return Pe!==void 0?(e.log("claude_code.tool_approval_auto_granted",{linzumi_thread_id:r,tool_name:$.toolName,request_id:$.requestId}),Promise.resolve(Pe)):uje({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ie.currentSourceSeq(),request:$,leaseEpoch:e.leaseEpochFor?.(r),signal:Le})}}},Ct=(async()=>{let $;await He(),await hm({cwd:e.cwd,threadKey:r,turnRef:i===void 0?"session-start":`seq-${i}`,log:(Pe,We)=>e.log(Pe,We)});let Le=ZZ(je.reasoningEffort),G=fh(r).map(VI);try{try{$=await _9({cwd:e.cwd,prompt:s,includeHookEvents:!0,developerInstructions:Hf({cwd:e.cwd,agentLabel:"Claude Code",planTool:"todo-write",devServicesAvailable:!0,developerPrompt:vn,...$M(e.control),linzumiContext:un}),model:TM(je.model),...typeof Le=="string"?{effort:Le}:{},...e.debugTrace===void 0?{}:{claudeCodeDebugFile:Tt(e.debugTrace.runDir,"claude-code-debug.log")},...ae===void 0?{}:{permissionMode:ae},...G.length===0?{}:{permissionGrantRules:G},resumeSessionId:e.resumeSessionId,abortController:Te,streamingInput:ie,...e.options.claudeCodeRunner===void 0?{turnStallThresholdMs:sje(process.env),turnStallIsActive:Dc,apiWaitStatusThresholdMs:1e4,apiWaitStatusItemKey:Pe=>{let We=ie.currentSourceSeq();return We===void 0?void 0:`system:claude-api-wait:${We}:${Pe}`}}:{},runner:e.options.claudeCodeRunner,debugTrace:e.debugTrace,canUseTool:Jy,...nn===void 0?{}:{mcpServers:nn},...ke===void 0?{}:{preToolUseHookMatchers:ke.hookMatchers,wrapApprovedToolInput:(Pe,We,xt)=>We==="Bash"?ke.wrapApprovedTool(Pe,xt):void 0},env:By,allowedTools:["mcp__linzumi__*"],onSessionControls:Pe=>{Ye=Pe,ae==="bypassPermissions"&&(ft=RQ({kandan:e.kandan,topic:e.topic,pendingClaudeCodeApprovals:e.pendingClaudeCodeApprovals,pendingClaudeCodeUserQuestions:e.pendingClaudeCodeUserQuestions,sessionThreadId:r,captureMessageStateAttemptGeneration:te.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:te.adoptMessageStateConsensusForAttempt,stopSession:We=>{te.interruptActiveTurn(We),Te.abort(new Error(We))},log:e.log,reason:"full_access_started"}).catch(We=>{e.log("claude_code.startup_approval_drain_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:We instanceof Error?We.message:String(We)})}))},onTurnCompleted:()=>{v?v=!1:O(),ie.currentSourceSeq()!==void 0&&Re()},onTranscriptEvent:qo})}finally{let We=ie.drainUndeliveredFollowUps().map(xt=>xt.sourceSeq).filter(xt=>xt!==void 0);We.length>0&&e.onUndeliveredFollowUpsAtClose!==void 0&&e.onUndeliveredFollowUpsAtClose({channel:t,threadId:r,sourceSeqs:We}),d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),await D(),ie.close(),Ae?.(),ke?.close()}}catch(Pe){throw te.submitLifecycle("codexDied",Pe instanceof Error?Pe.message:String(Pe)),await te.close(5e3).catch(()=>{}),await Promise.race([he.settle().catch(()=>{}),new Promise(We=>{setTimeout(We,5e3).unref?.()})]),a(Pe instanceof Error?Pe.message:String(Pe)),en||e.setStartupStage("claude_code_session_failed"),Pe}return en||e.setStartupStage("posting_claude_code_output"),await te.awaitTurnsSettled(3e4),await te.close(3e4),await Promise.race([he.settle(),new Promise(Pe=>{setTimeout(Pe,1e4).unref?.()})]),$})();Ct.finally(()=>Z.unregister()).catch(()=>{}),Ct.finally(()=>{ga?.stop(),Fr?.close()}).catch(()=>{}),ue.value=Ct;let Cf,Rd=e.options.claudeCodeRunner===void 0||process.env.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS!==void 0?Nb({windowMs:mh(process.env),isDelivered:()=>Oe>0,isSessionClosed:()=>!1,lastSdkActivityMs:()=>Oe,hasPendingBlockingRequest:()=>ag({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),log:e.log,onWedged:$=>{Cf={waitedMs:$.waitedMs},e.log("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:r,claude_session_id:d??e.resumeSessionId??null,waited_ms:$.waitedMs,cause:$.cause,dispatch:e.resumeSessionId===void 0?"initial_turn":"resume_turn"}),Te.abort(new ja($.waitedMs))}}):void 0;Ct.finally(()=>Rd?.stop()).catch(()=>{});let Ed;try{Ed=await Promise.race([Ct.then($=>({type:"session_ended",result:$})),be.then(()=>({type:"first_turn_settled"}))])}catch($){throw Cf!==void 0&&!($ instanceof ja)?new ja(Cf.waitedMs):$}finally{Rd?.stop()}let _a=$=>({controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,response:{session:{id:$}}},providerSession:{provider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:$}});if(Ed.type==="session_ended")return _a(Ed.result.sessionId);e.setStartupStage("posting_claude_code_output"),en=!0,await te.awaitTurnsSettled(3e4);try{await te.flush(3e4)}catch($){e.log("claude_code.first_turn_flush_timeout",{linzumi_thread_id:r,claude_session_id:d??null,message:$ instanceof Error?$.message:String($)})}ft!==void 0&&await ft;let Oc=await Promise.race([Ct.then($=>({type:"session_ended",result:$}),()=>{}),new Promise($=>{setImmediate(()=>$(void 0))})]);if(Oc!==void 0)return _a(Oc.result.sessionId);Ct.then(()=>{e.log("claude_code.session_loop_ended",{linzumi_thread_id:r,claude_session_id:d??null})},$=>{e.log("claude_code.session_loop_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:$ instanceof Error?$.message:String($)})});let Tf=d??e.resumeSessionId;if(Tf!==void 0)return _a(Tf);let Pf=await Ct;return _a(Pf.sessionId)}function lje(e){return e.startsWith("mcp__linzumi__")}function GZ(e){switch(e){case"untrusted":return 0;case"on-request":return 1;case"on-failure":return 2;case"never":return 3;default:return}}function CM(e){switch(e){case"never":return"bypassPermissions";case"on-request":case"untrusted":return"default";case"on-failure":return"acceptEdits";default:return}}function ZZ(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 pje(e,n){return[...e.entries()].filter(([,t])=>t.threadId===n)}function fje(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 RQ(e){let n=pje(e.pendingClaudeCodeApprovals,e.sessionThreadId);for(let[r,o]of n){if(await kQ({pending:o,decision:{type:"allow"},incomingStatus:"processing",publishMessageState:()=>Io(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}),captureMessageStateAttemptGeneration:e.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:e.adoptMessageStateConsensusForAttempt,stopSession:e.stopSession,log:e.log,reason:e.reason})==="stopped")return;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=fje(e.pendingClaudeCodeUserQuestions,e.sessionThreadId);for(let[r,o]of t){let i=o.approvalDecisions.get("Allow")??{type:"allow"};o.resolve(i),await hp(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 mje(e){return ux(e)}async function hje(e,n){let t=yje(n);if(t===void 0)return;let r=_je(e,n);if(r===void 0)return;let o="root",i=gje(`${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 gje(e){let n=QZ.get(e),t=Date.now()*1e3,r=n===void 0?t:Math.max(n+1,t);return QZ.set(e,r),r}function yje(e){switch(e.type){case"unknown":case"session_failed":return e.sessionId;default:return e.sessionId}}function _je(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: ${NI(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 bje(e){let n={};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);return n}async function EQ(e,n,t){let r=await e.push(n,"llm_proxy:mint_session_token",t!==void 0&&t!==""?{currentToken:t}:{});if(ne(r)&&r.status==="ok"&&ne(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 XZ(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=`${xje}: ${n.token}`);let o=AQ(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 AQ(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 TM(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 vje(n)?"sonnet":n}}function vje(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 wje(e,n,t,r,o){let i=fn(t,"workspace"),s=fn(t,"channel"),a=fn(t,"threadId"),d=y(t.modelProvider)?.trim(),u=y(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:
|
|
1656
|
+
`)},promptYesNo:n=>E6e(n)}}function E6e(e){return new Promise(n=>{let t=H$e({input:process.stdin,output:process.stderr});t.question(e,r=>{t.close(),n(/^y(es)?$/i.test(r.trim()))})})}function FZ(e,n,t){return{isPidAlive:n?.isPidAlive??A6e,signalPid:n?.signalPid??((r,o)=>{process.kill(r,o)}),lockReleased:n?.lockReleased??(()=>!yp(e)),currentLockOwner:n?.currentLockOwner??(()=>Su(e)),sleep:n?.sleep??iW,now:n?.now??(()=>Date.now()),log:n?.log??((r,o)=>{t(r,o),ye(r,o)})}}function A6e(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 M6e(e,n,t,r,o,i){let s=$6e(n,r,o,i);ye("process.spawn",{command:e,args:s,cwd:t,purpose:"codex.tui"});let a=Aw(e,s,{cwd:t,env:process.env,stdio:"inherit"});return ye("process.spawned",{command:e,args:s,cwd:t,pid:a.pid,purpose:"codex.tui"}),a.once("exit",(d,u)=>{ye("process.exit",{command:e,args:s,cwd:t,pid:a.pid,code:d,signal:u,purpose:"codex.tui"})}),a}async function D6e(e){await Promise.all(Array.from(e,n=>n.handleKandanReconnect()))}function O6e(e,n){if(!Array.isArray(e))return;let t=e.find(r=>ne(r)&&typeof r.name=="string"&&r.name.toLowerCase()===n.toLowerCase()&&typeof r.value=="string");return ne(t)&&typeof t.value=="string"?t.value:void 0}function $6e(e,n,t,r){let o=j6e(t,r);return n===void 0?["--remote",e,...o]:["resume","--remote",e,...o,n]}function q6e(e,n){let t=new Set(n);return e!==void 0&&t.add(e),Array.from(t).sort((r,o)=>r-o)}function MM(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 j6e(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 L6e(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 F6e(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(ne(o)&&o.status==="ok"&&ne(o.response))return mx(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 z6e(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<N6e;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(!ne(c)||c.status!=="ok"||!ne(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=RK(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((g,m)=>m.kind==="reasoning"?g:g+m.body.length,0);let p=i?.maxEmissionTokens,f=p!==void 0&&d/4>=p;if(!l.hasMore||l.cursor===void 0||f)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 NZ(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 Si("thread/unarchive",e.request("thread/unarchive",{threadId:n}));if("error"in s)throw new Error(`thread/unarchive failed: ${s.error.message}`);let a=await Si("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 J6e(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 Si("thread/resume",e.request("thread/resume",o));if(!("error"in a))return{mode:"resumed"};if(U6e(a.error.message))return await NZ(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 Si("thread/inject_items",e.request("thread/inject_items",{threadId:n,items:d}));if("error"in u){if(r.forceRehydrate===!0&&B6e(u.error.message))return await NZ(e,n,o,"forced_inject_not_found",u.error.message,r.log);s=`thread/inject_items failed: ${u.error.message}`}else{let c=await Si("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 K6e(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:ro(r)??null,instanceId:t}),r.type==="start_instance"||r.type==="reconnect_thread")try{await oo(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 _M(e,n,t,r,o,i,s,a,d,u,c,l,p,f,g,m,_,b,w,v,S,C,T,P,O,R,j,B){if(e===void 0)switch(m.type){case"remote_codex_exec":case"remote_codex_exec_cancel":return await xM(m,r,a.value,d,u,_);case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"resolve_codex_user_input_request":case"deny_codex_user_input_request":break;case"compact_thread":case"review_thread":if(m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,requestId:m.requestId.trim()||null,ok:!1,error:"agent_provider_unavailable:codex"};break;case"clone_repository":break;case"set_workspace_viewport":break;case"start_instance":case"reconnect_thread":{let D=mp(m);if(D.type==="ok"&&D.provider==="claude-code"||v!==void 0)break;return await K6e(n,t,r,m,_)}default:return{instanceId:r,controlType:m.type,requestId:"requestId"in m?y(m.requestId)??null:null,ok:!1,error:"agent_provider_unavailable:codex"}}let K=()=>{if(e===void 0)throw new Error("shared codex app-server connection is unavailable");return e};switch(m.type){case"set_workspace_viewport":return Yqe(o.kandanUrl,m.url),{instanceId:r,controlType:m.type,ok:!0,url:m.url};case"compact_thread":{let D=m.requestId.trim(),J=y(m.providerSessionKey)?.trim()??"",W=m.agentProvider??"codex";if(D==="")return{instanceId:r,controlType:m.type,requestId:null,ok:!1,error:"request_id_required"};if(W!=="codex")return{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:`agent_compaction_unsupported:${W}`};if(J==="")return{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:"provider_session_key_required"};let H=await K().request("thread/compact/start",{threadId:J});return"error"in H?{instanceId:r,controlType:m.type,requestId:D,ok:!1,error:`codex_compaction_failed:${H.error.message}`}:{instanceId:r,controlType:m.type,requestId:D,ok:!0,threadId:m.threadId,providerSessionKey:J}}case"start_instance":{let D=no(m.cwd,a.value),J=mp(m),W="starting_codex_session",H;switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:m.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let X=J.provider;if(!D.ok){_("kandan.start_instance_cwd_rejected",{thread_id:ro(m)??null,reason:D.reason,allowedCwdCount:a.value.length});try{await eQ(n,t,m,D.reason,a.value,{instanceId:r})}catch(we){_("kandan.start_instance_cwd_failed_state_push_failed",{reason:D.reason,message:we instanceof Error?we.message:String(we)})}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason,allowedCwds:a.value}}let be=await s(X),Re=ww({agentProvider:X,modelProvider:y(m.modelProvider),model:y(m.model),modelTransportCatalogStatus:EM(m,_),llmProxyBinding:RM(m.llmProxy),hasNativeCodexAuth:be.hasNativeCodexAuth},qa,be.agentProviders);if(Re.type==="blocked"){_("linzumi.start_instance_model_account_preflight_rejected",{agent_provider:X,model_provider:y(m.modelProvider)??null,model:y(m.model)??"default",reason:Re.code,discriminator:Re.reason});try{await oo(n,t,m,"failed",Re.message,{instanceId:r,failureClass:"provider_binding_rejected",modelAccountRejection:{identity:Re.identity,reason:Re.reason}})}catch(we){_("linzumi.start_instance_model_account_state_push_failed",{message:we instanceof Error?we.message:String(we)})}return{instanceId:r,controlType:m.type,ok:!1,error:Re.code}}let ie=Xa(m,"processing",`starting ${tje(X)} session`,{instanceId:r});ie!==void 0&&n.push(t,"message_state",ie).catch(we=>{_("kandan.start_instance_processing_state_push_failed",{message:we instanceof Error?we.message:String(we)})});try{let we=await v?.(m,D.cwd);if(we!==void 0)return we;if(X==="codex"){let Oe=JZ(o,m);if(Oe!==void 0){try{await oo(n,t,m,"failed",Oe,{instanceId:r,failureClass:"provider_binding_rejected"})}catch(vn){_("kandan.start_instance_wafer_state_push_failed",{message:vn instanceof Error?vn.message:String(vn)})}return{instanceId:r,controlType:m.type,ok:!1,error:Oe}}}return X==="claude-code"?(W="starting_claude_code_session",(await WZ({kandan:n,topic:t,control:m,options:o,log:_,debugTrace:b,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,activeClaudeCodeSessions:c,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,ensureClaudeCodeForwardPortSession:f,disposeClaudeCodeForwardPortSession:g,resumeSessionId:Ro(m.resumeSessionId),leaseEpochFor:C,onLiveSourceSeqAccepted:T,onUndeliveredFollowUpsAtClose:O,claudeThreadAccessStore:B,setStartupStage:vn=>{W=vn}})).controlResponse):(await PQ({codex:K(),kandan:n,topic:t,control:m,options:o,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,onStartedThread:w,startAgentReplayCodex:S,setStartupStage:Oe=>{W=Oe},setStartedCodexThreadId:Oe=>{H=Oe}})).controlResponse}catch(we){let qe=zZ(W,we);_("kandan.start_instance_failed",{stage:W,message:we instanceof Error?we.message:String(we),thread_id:fn(m,"threadId")??null,source_seq:Y(m.sourceSeq)??Y(m.rootSeq)??null,codex_thread_id:H??null});try{X==="claude-code"?await YZ({kandan:n,topic:t,control:m,failureReason:qe,rawFailureText:we instanceof Error?we.message:String(we),failureClass:bM(W),codexThreadId:H,instanceId:r,log:_}):await oo(n,t,m,"failed",qe,{codexThreadId:H,instanceId:r,failureClass:bM(W)})}catch{}throw we}}case"reconnect_thread":{let D=no(m.cwd,a.value),J=mp(m),W=y(m.transportCeilingRecoveryRequestId),H="starting_codex_session";if(!D.ok){try{await eQ(n,t,m,D.reason,a.value,{instanceId:r})}catch(un){_("kandan.reconnect_thread_cwd_failed_state_push_failed",{reason:D.reason,message:un instanceof Error?un.message:String(un)})}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason,allowedCwds:a.value}}switch(J.type){case"ok":break;case"unsupported":return{instanceId:r,controlType:m.type,ok:!1,error:`agent_provider_unsupported:${J.value}`}}let X=J.provider,be=await s(X),Re=ww({agentProvider:X,modelProvider:y(m.modelProvider),model:y(m.model),modelTransportCatalogStatus:EM(m,_),llmProxyBinding:RM(m.llmProxy),hasNativeCodexAuth:be.hasNativeCodexAuth},qa,be.agentProviders);if(Re.type==="blocked"){_("linzumi.reconnect_thread_model_account_preflight_rejected",{agent_provider:X,model_provider:y(m.modelProvider)??null,model:y(m.model)??"default",reason:Re.code,discriminator:Re.reason});try{await oo(n,t,m,"failed",Re.message,{instanceId:r,failureClass:"provider_binding_rejected",modelAccountRejection:{identity:Re.identity,reason:Re.reason}})}catch(un){_("linzumi.reconnect_thread_model_account_state_push_failed",{message:un instanceof Error?un.message:String(un)})}return{instanceId:r,controlType:m.type,ok:!1,error:Re.code}}let ie=Ro(m.codexThreadId);if(ie===void 0)return{instanceId:r,controlType:m.type,ok:!1,error:"missing_codex_thread_id"};let we=Ro(m.workDescription),qe=await v?.(m,D.cwd);if(qe!==void 0)return qe;if(X==="codex"){let un=JZ(o,m);if(un!==void 0)return{instanceId:r,controlType:m.type,ok:!1,error:un}}if(X==="claude-code"){let un=c.get(ie);if(un!==void 0&&we!==void 0){let je=Y(m.rootSeq),Xe=Y(m.sourceSeq)??je,_e=ae=>{let pe=ae.disposition==="parked"?Xa(m,"queued",ul(ae.queuePosition),{instanceId:r,codexThreadId:ie}):Xa(m,"processing","queued Claude Code input",{instanceId:r,codexThreadId:ie});pe!==void 0&&n.push(t,"message_state",pe).catch(Te=>{_("kandan.reconnect_thread_queue_state_push_failed",{message:Te instanceof Error?Te.message:String(Te)})})},q=vi($e(m.attachments)??[]),F=await FC({cwd:D.cwd,kandanUrl:o.kandanUrl,token:o.token,fetch:o.fetch,attachmentDirectoryName:"local-claude-code-attachments"},{seq:Xe,body:we,attachments:q}).then(ae=>({ok:!0,content:ae})).catch(ae=>({ok:!1,error:ae}));if(!F.ok){let ae=F.error instanceof Error?F.error.message:String(F.error),pe=`Claude Code input attachment download failed: ${ae}`;try{await oo(n,t,m,"failed",pe,{instanceId:r,codexThreadId:ie,failureClass:"attachment_download_failed"})}catch(Te){_("kandan.reconnect_thread_queue_failed_state_push_failed",{message:Te instanceof Error?Te.message:String(Te)})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:ae}}let z=fn(m,"threadId"),V=fn(m,"channel");if(Xe!==void 0&&z!==void 0&&V!==void 0&&P?.(V,z,{seq:Xe,type:"thread.message",actorKind:void 0,actorSlug:void 0,actorUserId:void 0,threadId:z,threadTitle:void 0,replyToSeq:Y(m.rootSeq),localRunnerEventType:void 0,body:we,attachments:q,traceparent:y(m.traceparent)}),V!==void 0&&z!==void 0&&R?.({channel:V,threadId:z,sourceSeq:Xe,transportCeilingRecoveryRequestId:W})===!0)return _("claude_code.message_duplicate_ignored",{linzumi_thread_id:z,claude_session_id:ie,body_preview:Du(we),source_seq:Xe??null}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0};await hm({cwd:D.cwd,threadKey:un.threadId,turnRef:Xe===void 0?`followup-${Date.now()}`:`seq-${Xe}`,log:(ae,pe)=>_(ae,pe)});try{let ae=un.enqueueInput({content:F.content,sourceSeq:Xe});if(ae==="duplicate")return _("claude_code.message_duplicate_ignored",{linzumi_thread_id:fn(m,"threadId")??null,claude_session_id:ie,body_preview:Du(we),source_seq:Xe??null}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0};_e(ae),_("claude_code.message_queued",{linzumi_thread_id:fn(m,"threadId")??null,claude_session_id:ie,body_preview:Du(we),message_received_at_ms:Date.now(),source_seq:Xe??null}),b?.record("commander","claude.input_queued",{linzumiThreadId:fn(m,"threadId")??null,claudeSessionId:ie,sourceSeq:Xe??null,bodyPreview:Du(we)})}catch(ae){let pe=ae instanceof Error?ae.message:String(ae),Te=`Claude Code input queue closed: ${pe}`;try{await oo(n,t,m,"failed",Te,{instanceId:r,codexThreadId:ie,failureClass:"claude_input_queue_closed"})}catch(Z){_("kandan.reconnect_thread_queue_closed_state_push_failed",{message:Z instanceof Error?Z.message:String(Z)})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_session_closed",message:pe}}if(Xe!==void 0){let ae=Xe,pe=un,Te="Claude Code session did not respond after resume - send your message again to start fresh",Z=j;Nb({windowMs:Z?.windowMs??mh(process.env),isDelivered:()=>pe.inputDelivered(ae),isSessionClosed:()=>Pi(c,[ie],[pe.threadId])===void 0,lastSdkActivityMs:()=>pe.lastSdkActivityMs(),hasPendingBlockingRequest:()=>ag({threadId:pe.threadId,pendingApprovals:l,pendingQuestions:p}),log:_,onWedged:de=>{let ue=Z?.recordWedge(pe.threadId,ae)??Number.MAX_SAFE_INTEGER;_("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:pe.threadId,claude_session_id:ie,source_seq:ae,waited_ms:de.waitedMs,cause:de.cause,attempt:Z===void 0?null:ue,dispatch:"queued_input"});let en=()=>{Z?.clear(pe.threadId,ae),oo(n,t,m,"failed",Te,{instanceId:r,codexThreadId:ie,failureClass:"claude_dispatch_wedged"}).catch(Ye=>{_("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:pe.threadId,source_seq:ae,message:Ye instanceof Error?Ye.message:String(Ye)})})};if(Z!==void 0&&ue===1){oo(n,t,m,"processing","restarting Claude Code session to recover this message",{instanceId:r,codexThreadId:ie}).catch(()=>{}),Z.killAndRespawn({threadId:pe.threadId,claudeSessionId:ie,reason:`claude_dispatch_liveness: no SDK output within ${de.waitedMs}ms of queued input (seq ${ae})`}).then(Ye=>{Ye==="no_replay_path"&&en()}).catch(Ye=>{_("claude_code.dispatch_supervisor_respawn_failed",{linzumi_thread_id:pe.threadId,source_seq:ae,message:Ye instanceof Error?Ye.message:String(Ye)}),en()});return}en()}})}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0}}if(un!==void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_active_session_requires_work_description"};{let je=fn(m,"threadId"),Xe=fn(m,"channel"),_e=Y(m.sourceSeq)??Y(m.rootSeq);if(we!==void 0&&je!==void 0&&Xe!==void 0&&_e!==void 0&&R?.({channel:Xe,threadId:je,sourceSeq:_e,transportCeilingRecoveryRequestId:W})===!0)return _("claude_code.replayed_turn_already_applied_ignored",{linzumi_thread_id:je,claude_session_id:ie,body_preview:Du(we),source_seq:_e,replayed:m.replayed===!0}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,queuedInput:!0,duplicate:!0}}try{let je=Xa(m,"processing","resuming Claude Code session",{instanceId:r,codexThreadId:ie});return je!==void 0&&n.push(t,"message_state",je).catch(_e=>{_("kandan.reconnect_thread_processing_state_push_failed",{message:_e instanceof Error?_e.message:String(_e)})}),H="starting_claude_code_session",(await WZ({kandan:n,topic:t,control:m,options:o,log:_,debugTrace:b,instanceId:r,cwd:D.cwd,matchedRoot:D.matchedRoot,resumeSessionId:ie,activeClaudeCodeSessions:c,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,ensureClaudeCodeForwardPortSession:f,disposeClaudeCodeForwardPortSession:g,leaseEpochFor:C,onLiveSourceSeqAccepted:T,onUndeliveredFollowUpsAtClose:O,claudeThreadAccessStore:B,setStartupStage:_e=>{H=_e}})).controlResponse}catch(je){let Xe=zZ(H,je);_("kandan.reconnect_thread_failed",{stage:H,message:je instanceof Error?je.message:String(je),thread_id:fn(m,"threadId")??null,source_seq:Y(m.sourceSeq)??Y(m.rootSeq)??null,agent_provider:X,provider_session_key:ie});try{await YZ({kandan:n,topic:t,control:m,failureReason:Xe,rawFailureText:je instanceof Error?je.message:String(je),failureClass:bM(H),codexThreadId:ie,instanceId:r,log:_})}catch{}throw je}}o.codexUrl===void 0&&Hb(D.cwd,{configHome:La()});let Oe=vp(o,m),vn=w===void 0?void 0:await Si("thread/attach",w(m,D.cwd,ie));if(we!==void 0){let un=Y(m.rootSeq),je=Y(m.sourceSeq)??un;if(vn===void 0||je===void 0)throw new Error("cannot reconnect a Kandan thread without a session");let Xe=fn(m,"channel"),_e=fn(m,"threadId");if(Xe!==void 0&&_e!==void 0&&R?.({channel:Xe,threadId:_e,sourceSeq:je,transportCeilingRecoveryRequestId:W})===!0)return _("kandan.reconnect_thread_seq_already_applied",{linzumi_thread_id:_e,codex_thread_id:ie,source_seq:je}),{instanceId:r,controlType:m.type,cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie,duplicate:!0};let q=fn(m,"workspace"),F=await J6e(K(),ie,Bf({cwd:D.cwd,fast:Oe.fast,channelSession:{model:Oe.model,reasoningEffort:Oe.reasoningEffort,approvalPolicy:Oe.approvalPolicy,sandbox:Oe.sandbox,sandboxedApprovalNeverDefault:Oe.sandboxedApprovalNeverDefault}}),{forceRehydrate:m.sessionRehydrate===!0,log:_,buildRehydrationItems:async ae=>{let pe=await z6e(n,t,{workspace:q,channel:Xe,threadId:_e},_);if(pe===void 0||pe.nodes.length===0)return;let Te=EK({nodes:pe.nodes,budget:pe.budget,resumeFailure:ae,threadTitle:pe.threadTitle,linzumiContext:Sa(m.linzumiContext)});return _("kandan.reconnect_thread_rehydration_ir_emitted",{linzumi_thread_id:_e,codex_thread_id:ie,emitted_nodes:Te.emittedNodeCount,omitted_nodes:Te.omittedNodeCount,redacted_reasoning:Te.redactedReasoningCount,emitted_token_estimate:Te.emittedTokenEstimate,max_emission_tokens:Te.maxEmissionTokens}),Te.items},buildRehydrationText:async ae=>$4({messages:await F6e(n,t,{workspace:q,channel:Xe,threadId:_e},_),resumeFailure:ae,linzumiContext:Sa(m.linzumiContext)})});if(F.mode==="rehydrated"){ye("runner.thread_resume_rehydrated",{purpose:"linzumi.thread_runner",threadId:_e??null,codexThreadId:ie,sourceSeq:je,resumeFailure:F.resumeFailure});try{await oo(n,t,m,"processing","rebuilt the coding session from durable thread history after an unresumable engine session",{codexThreadId:ie,instanceId:r})}catch(ae){_("kandan.reconnect_thread_rehydrated_state_push_failed",{message:ae instanceof Error?ae.message:String(ae)})}}let z=Uo(o.token),V=vi($e(m.attachments)??[]);await vn.startThreadMessageTurn({seq:je,body:we,actorSlug:z.actorUsername,actorUserId:z.actorUserId,attachments:V,boundStartTimeout:!0,transportCeilingRecoveryRequestId:W})}return{instanceId:r,controlType:m.type,cwd:D.cwd,matchedRoot:D.matchedRoot,codexThreadId:ie}}case"list_claude_code_sessions":{let D=no(m.cwd,a.value);if(!D.ok)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason};if(!i.includes("claude-code"))return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let J;try{J=await b9({cwd:D.cwd,limit:Y(m.limit),messagesPerSession:Y(m.messagesPerSession),provider:o.claudeCodeSessionHistoryProvider})}catch(W){return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:W instanceof Error?`claude_code_session_history_failed:${W.message}`:"claude_code_session_history_failed"}}return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!0,cwd:D.cwd,matchedRoot:D.matchedRoot,sessions:J}}case"list_agent_slash_commands":{let D=no(m.cwd,a.value);if(!D.ok)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:D.reason};let J=y(m.agentProvider)??"claude-code";if(J!=="claude-code")return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:`agent_provider_unsupported:${J}`};if(!i.includes("claude-code"))return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"agent_provider_unavailable:claude-code"};let W=y(m.providerSessionKey),H=W===void 0?void 0:c.get(W);if(H===void 0)return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:"no_active_claude_session"};try{return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!0,cwd:D.cwd,matchedRoot:D.matchedRoot,provider:"claude-code",providerSessionKey:W,commands:await H.slashCommands()}}catch(X){return{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,ok:!1,error:X instanceof Error?`agent_slash_commands_failed:${X.message}`:"agent_slash_commands_failed"}}}case"browse_directory":return dFe(m,o);case"create_project":return pFe(m,o,a);case"clone_repository":return await yFe(m,o,a);case"suggest_tasks":return xFe(m,o,a.value,{kandan:n,topic:t});case"remote_codex_exec":return await xM(m,r,a.value,d,u,_);case"remote_codex_exec_cancel":return await xM(m,r,a.value,d,u,_);case"start_turn":{let D=await s("codex"),J=ww({agentProvider:"codex",modelProvider:void 0,model:void 0,llmProxyBinding:"absent",hasNativeCodexAuth:D.hasNativeCodexAuth},qa,D.agentProviders);if(J.type==="blocked"){_("linzumi.start_turn_model_account_preflight_rejected",{thread_id:m.threadId,agent_provider:J.identity[0],model_provider:J.identity[1]??null,model:J.identity[2],reason:J.code,discriminator:J.reason});try{await n.push(t,"codex_error",{instanceId:r,message:J.message})}catch(H){throw _("linzumi.start_turn_model_account_error_push_failed",{thread_id:m.threadId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,ok:!1,error:J.code}}let W=await K().request("turn/start",{threadId:m.threadId,input:m.input});return{instanceId:r,controlType:m.type,response:W}}case"steer_turn":{let D=Pi(c,[m.providerSessionKey,m.threadId],[m.threadId]);if(D!==void 0){let X=mje(m.input);if(X===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_requires_text_input"};let be;try{be=D.steerTurn(X)}catch(Oe){let vn=Oe instanceof Error?Oe.message:String(Oe);return _("claude_code.steer_failed",{thread_id:m.threadId,message:vn}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",ok:!1,error:"claude_code_steer_failed",message:vn,threadId:m.threadId}}if(!await eje(be.applied))return _("claude_code.steer_not_applied",{thread_id:m.threadId,steered:be.steered}),{instanceId:r,controlType:m.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:m.threadId};let ie=Y(m.sourceSeq),we=y(m.workspace),qe=y(m.channel);return ie!==void 0&&we!==void 0&&qe!==void 0&&n.push(t,"message_state",{workspace:we,channel:qe,thread_id:m.threadId,instance_id:r,seq:ie,status:"processed",reason:Tm,agent_provider:"claude-code"}).catch(Oe=>{_("claude_code.steer_terminal_state_push_failed",{thread_id:m.threadId,seq:ie,message:Oe instanceof Error?Oe.message:String(Oe)})}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",steered:be.steered,threadId:m.threadId}}let J=m.providerSessionKey??m.threadId,W=y(m.turnId);if(W===void 0)return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.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 H=await K().request("turn/steer",{threadId:J,expectedTurnId:W,input:gm(m.input)});return{instanceId:r,controlType:m.type,response:H}}case"interrupt_turn":{let D=Pi(c,[m.threadId]);if(D!==void 0){let W=await D.interruptTurn("Interrupted by Linzumi");return{instanceId:r,controlType:m.type,agentProvider:"claude-code",interrupted:W,threadId:m.threadId}}let J=await K().request("turn/interrupt",{threadId:m.threadId,turnId:m.turnId??null});return{instanceId:r,controlType:m.type,response:J}}case"rewind_thread":return c.get(m.threadId)!==void 0||m.agentProvider==="claude-code"?{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:y(m.requestId)??null,threadId:m.threadId,ok:!1,error:"claude_code_rewind_unsupported",message:"Claude Code does not support rewind yet"}:{instanceId:r,controlType:m.type,requestId:y(m.requestId)??null,threadId:m.threadId,ok:!1,error:"rewind_not_supported",message:"This runner does not support rewinding threads yet"};case"interrupt_queued_messages":{let D=y(m.agentProvider)?.trim();if(D!=="claude-code"){let H=await K().request("turn/interrupt",{threadId:m.threadId,turnId:null});return{instanceId:r,controlType:m.type,response:H}}let J=Pi(c,[m.threadId]);if(J===void 0)return{instanceId:r,controlType:m.type,agentProvider:D,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 W=Y(m.throughSeq)??J.currentSourceSeq();if(W!==void 0)try{await Io(n,t,{workspace:J.workspace,channel:J.channel,threadId:J.threadId,sourceSeq:W,status:"failed",reason:"Claude Code interrupted by Linzumi",sessionId:m.threadId})}catch(H){_("kandan.claude_code_interrupt_state_push_failed",{message:H instanceof Error?H.message:String(H),thread_id:J.threadId,source_seq:W,claude_session_id:m.threadId})}return{instanceId:r,controlType:m.type,agentProvider:D,interrupted:!0,threadId:m.threadId}}case"stop_turn":{let D=Pi(c,[m.threadId,m.providerSessionKey],[m.threadId]);if(D!==void 0){let W=await Q6e({activeSession:D,sessionKey:m.providerSessionKey??m.threadId,publishMessageState:H=>Io(n,t,H),log:_});return _("claude_code.turn_stopped",{thread_id:D.threadId,claude_session_id:m.providerSessionKey??m.threadId,discarded_queued_source_seqs:W}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,ok:!0,stopped:!0,confirmedHalt:!0}}let J=y(m.agentProvider)?.trim();if(J!=="claude-code")try{let W=await K().request("turn/interrupt",{threadId:m.providerSessionKey??m.threadId,turnId:m.turnId??null});return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.threadId,ok:!0,stopped:!0,confirmedHalt:!0,response:W}}catch(W){_("codex.stop_turn_no_session_interrupt_failed",{thread_id:m.threadId,message:W instanceof Error?W.message:String(W)})}return{instanceId:r,controlType:m.type,agentProvider:J??null,threadId:m.threadId,ok:!1,error:"stop_turn_session_not_active"}}case"resolve_codex_approval_request":{let D=l.get(m.requestId);if(D===void 0){if(m.agentProvider==="claude-code")return{instanceId:r,controlType:m.type,skipped:!0};let be=await K().request("resolve_codex_approval_request",{...m});return{instanceId:r,controlType:m.type,response:be}}if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_provider_mismatch"};if(D.sessionId!==void 0&&m.threadId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_session_mismatch"};let J=D.decisions.get(m.decision);if(J===void 0)return _("runner.claude_code_approval_unknown_decision",{instanceId:r,requestId:m.requestId,decision:m.decision,threadId:D.threadId,claudeSessionId:D.sessionId}),{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_unknown_decision",decision:m.decision};let W=Pi(c,[D.sessionId],[D.threadId]);if(W===void 0)return _("runner.claude_code_approval_session_not_active",{instanceId:r,requestId:m.requestId,threadId:D.threadId,claudeSessionId:D.sessionId}),{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_approval_session_not_active"};let H=J.type==="allow"?"processing":"failed";return await kQ({pending:D,decision:J,incomingStatus:H,publishMessageState:()=>Io(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,status:H,reason:J.type==="allow"?"Claude Code tool approved":"Claude Code tool denied by Linzumi",sessionId:D.sessionId}),captureMessageStateAttemptGeneration:W.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:W.adoptMessageStateConsensusForAttempt,stopSession:be=>{W.interruptTurnBeforeAbort(be),W.abortController.abort(new Error(be))},log:_,reason:"human_decision"})==="stopped"?{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:m.requestId,decision:m.decision,resolved:!1,error:"claude_code_approval_terminal_consensus"}:(KZ({threadId:D.threadId,decision:J,log:_}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",requestId:m.requestId,decision:m.decision,resolved:!0})}case"resolve_codex_user_input_request":case"deny_codex_user_input_request":return{instanceId:r,controlType:m.type,agentProvider:"codex",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"codex_user_input_request_not_found"};case"resolve_claude_user_input_request":{let D=p.get(m.requestId);if(D===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(m.threadId!==D.threadId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(D.sessionId!==void 0&&m.sessionId!==void 0&&m.sessionId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_session_mismatch"};let J=m.answers.map(H=>({questionId:H.questionId,selectedLabels:H.selectedLabels??[],freeText:y(H.freeText)})),W=dje({pending:D,answers:J,actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()});switch(W.type){case"error":{_("runner.claude_code_user_input_resolution_failed",{instanceId:r,requestId:m.requestId,error:W.error,selectedLabels:[...W.selectedLabels],threadId:D.threadId,claudeSessionId:D.sessionId,kind:D.kind}),D.resolve({type:"deny",message:W.error});try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:{kind:"Denied",reason:W.error,answers:J.map(H=>({questionId:H.questionId,selectedLabels:[...H.selectedLabels],freeText:H.freeText})),actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(H){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,ok:!1,error:W.error,selectedLabels:[...W.selectedLabels],requestKind:D.kind,denied:!0}}case"resolved":D.resolve(W.decision),D.kind==="tool_approval"&&KZ({threadId:D.threadId,decision:W.decision,log:_});break}{let H=Pi(c,[D.sessionId,y(m.sessionId)],[D.threadId]);if(H!==void 0){let X=D.threadId,be=D.sourceSeq,Re=D.sessionId;Nb({windowMs:j?.windowMs??mh(process.env),isDelivered:()=>D.resolved(),isSessionClosed:()=>Pi(c,[Re],[X])===void 0,lastSdkActivityMs:()=>H.lastSdkActivityMs(),hasPendingBlockingRequest:()=>ag({threadId:X,pendingApprovals:l,pendingQuestions:p}),log:_,onWedged:ie=>{let we="Claude Code did not continue after your answer - the runner restarted the session; send your message again to continue";_("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:X,claude_session_id:Re??null,source_seq:be,waited_ms:ie.waitedMs,cause:ie.cause,dispatch:W.dispatch}),H.abortController.abort(new Error(we)),(async()=>{let qe=H.sessionWork();qe!==void 0&&await Promise.race([qe.catch(()=>{}),new Promise(Oe=>{setTimeout(Oe,1e4).unref?.()})]),await Io(n,t,{workspace:D.workspace,channel:D.channel,threadId:X,sourceSeq:be,status:"failed",reason:we,sessionId:Re,failureClass:"claude_dispatch_wedged"})})().catch(qe=>{_("claude_code.dispatch_wedged_state_push_failed",{linzumi_thread_id:X,source_seq:be,message:qe instanceof Error?qe.message:String(qe)})})}})}}try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:W.answerState,streamState:"completed"})}catch(H){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:H instanceof Error?H.message:String(H)}),H}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,answers:J.map(H=>({questionId:H.questionId,selectedLabels:[...H.selectedLabels],...y(H.freeText)===void 0?{}:{freeText:y(H.freeText)}})),actorUserId:m.actorUserId,actorSlug:m.actorSlug,requestKind:D.kind,resolved:!0}}case"deny_claude_user_input_request":{let D=p.get(m.requestId);if(D===void 0)return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,requestId:m.requestId,ok:!1,error:"claude_code_user_input_continuation_not_found"};if(m.agentProvider!==void 0&&m.agentProvider!=="claude-code")return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_provider_mismatch"};if(m.threadId!==D.threadId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_thread_mismatch"};if(D.sessionId!==void 0&&m.sessionId!==void 0&&m.sessionId!==D.sessionId)return{instanceId:r,controlType:m.type,ok:!1,error:"claude_code_user_input_session_mismatch"};D.resolve({type:"deny",message:m.reason??"Denied by Linzumi"});try{await hp(n,t,{workspace:D.workspace,channel:D.channel,threadId:D.threadId,sourceSeq:D.sourceSeq,sessionId:D.sessionId,leaseEpoch:D.leaseEpoch,request:D.request,answerState:{kind:"Denied",reason:m.reason??"Denied by Linzumi",actorUserId:m.actorUserId,actorSlug:m.actorSlug,answeredAt:new Date().toISOString()},streamState:"completed"})}catch(J){throw _("kandan.claude_code_user_question_completed_publish_failed",{requestId:m.requestId,message:J instanceof Error?J.message:String(J)}),J}return{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:D.threadId,requestId:m.requestId,reason:m.reason??"Denied by Linzumi",actorUserId:m.actorUserId,actorSlug:m.actorSlug,denied:!0}}case"read_thread":{let D=await K().request("thread/read",{threadId:m.threadId,includeTurns:m.includeTurns??!0});return{instanceId:r,controlType:m.type,response:D}}case"update_session_settings":{let D=y(m.threadId),J=Pi(c,[D],[D]),W=y(m.approvalPolicy)??void 0,H=y(m.sandbox)??void 0;if(J===void 0)return{instanceId:r,controlType:m.type,skipped:!0};let X=await J.updateSettings({model:y(m.model)??void 0,approvalPolicy:W,reasoningEffort:y(m.reasoningEffort)??void 0}),be=y(X.model),Re=y(X.approval_policy),ie=y(X.reasoning_effort),we=y(m.sandbox);if(S6e({appliedModel:be,appliedApprovalPolicy:Re,appliedReasoningEffort:ie,controlSandbox:we})){let qe={workspace:J.workspace,channel:J.channel,thread_id:J.threadId,codex_thread_id:m.threadId,updated_at:new Date().toISOString(),...be!==void 0?{model:be}:{},...Re!==void 0?{approvalPolicy:Re}:{},...ie!==void 0?{reasoningEffort:ie}:{},...we!==void 0?{sandbox:we}:{}},Oe=await n.push(t,"session:settings",qe);if(!(ne(Oe)&&Oe.status==="ok"))throw new Error(`kandan push failed: session:settings: ${JSON.stringify(Oe).slice(0,500)}`)}return Re!==void 0&&B?.record(J.threadId,{approvalPolicy:Re,sandbox:H}),X.approval_policy==="never"&&await RQ({kandan:n,topic:t,pendingClaudeCodeApprovals:l,pendingClaudeCodeUserQuestions:p,sessionThreadId:J.threadId,actorUserId:m.actorUserId,actorSlug:m.actorSlug,captureMessageStateAttemptGeneration:J.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:J.adoptMessageStateConsensusForAttempt,stopSession:qe=>{J.interruptTurnBeforeAbort(qe),J.abortController.abort(new Error(qe))},log:_,reason:"full_access_enabled"}),{instanceId:r,controlType:m.type,agentProvider:"claude-code",threadId:m.threadId,applied:X}}case"stop_instance":case"kill_instance":{let D="threadId"in m&&typeof m.threadId=="string"?m.threadId:void 0,J=D===void 0?void 0:c.get(D);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:m.type,agentProvider:"claude-code",threadId:D,stopped:!0}):{instanceId:r,controlType:m.type,skipped:!0}}case"set_thread_collaboration_mode":return{instanceId:r,controlType:m.type,requestId:m.requestId,threadId:m.threadId,collaborationMode:m.collaborationMode,ok:!1,error:"thread_not_loaded"};case"review_thread":return{instanceId:r,controlType:m.type,requestId:m.requestId,threadId:m.threadId,ok:!1,error:"thread_not_loaded"};case"steer_child_thread":return _("steer_child_thread.missing_channel_session",{threadId:m.threadId,providerChildThreadId:m.providerChildThreadId,providerSessionKey:m.providerSessionKey}),{instanceId:r,controlType:m.type,ok:!1,error:"child_channel_session_not_loaded"};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"multi_agent_jobs_state":case"document_surfaces_state":case"fleet_breaker_state":case"route_outage_state":case"stream_idle_timeout_default":case"set_commander_impl":case"replace_runner":case"stop_process":return{instanceId:r,controlType:m.type,skipped:!0}}}async function xM(e,n,t,r,o,i){switch(e.type){case"remote_codex_exec":{let s=y(e.requestId)?.trim(),a=new AbortController;s!==void 0&&s!==""&&o.set(s,a);let d=await qK(e,{instanceId:n,allowedCwds:t,sandboxRunner:r,abortSignal:a.signal});return s!==void 0&&s!==""&&o.delete(s),i("remote_codex_exec.handled",{requestId:y(e.requestId)??null,ok:d.ok===!0,error:typeof d.error=="string"?d.error:null}),d}case"remote_codex_exec_cancel":{let s=y(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 zZ(e,n){let t=W6e(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 bM(e){return e==="checking_project_trust"?"project_untrusted":"start_stage_transient"}function bp(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 vM(e,n,t){let r=e==="startup"?`Claude Code startup readiness failed: ${n}`:`Claude Code readiness changed to ${n}`,o=t?.trim();return bp(o===void 0||o===""?r:`${r} (${o})`,480)}function V6e(e=or){e({severity:"info",key:"runner.execution_health_failed:claude-code",message:"Claude Code login restored - Claude Code coding jobs are available again."})}function W6e(e){return bp(e,240)}function H6e(){let e={value:{status:"starting",reason:"execution_leg_readiness_not_proven"}},n=(o,i=[])=>i.length===0?{status:"ready",adapters:o}:{status:"ready",adapters:o,failures:i},t=o=>{switch(o.status){case"starting":return[];case"ready":return o.failures??[];case"failed":return o.failures??[{adapter:o.adapter,reason:o.reason}]}};return{snapshot:()=>e.value,canClaimWork:o=>{switch(e.value.status){case"starting":case"failed":return!1;case"ready":return o===void 0||e.value.adapters.includes(o)}},markReady:o=>{switch(e.value.status){case"starting":e.value=n([o]);break;case"ready":{let i=t(e.value).find(s=>s.adapter===o);if(i!==void 0)throw new Error(`runner execution leg failed before readiness: ${i.reason}`);e.value.adapters.includes(o)||(e.value=n([...e.value.adapters,o],t(e.value)));break}case"failed":{let i=t(e.value),s=i.find(a=>a.adapter===o);if(s!==void 0)throw new Error(`runner execution leg failed before readiness: ${s.reason}`);e.value=n([o],i);break}}},markReadyAfterRecovery:o=>{switch(e.value.status){case"starting":e.value=n([o]);break;case"ready":{let i=e.value.adapters.includes(o)?e.value.adapters:[...e.value.adapters,o];e.value=n(i,t(e.value).filter(s=>s.adapter!==o));break}case"failed":{e.value=n([o],t(e.value).filter(i=>i.adapter!==o));break}}},markFailed:(o,i)=>{let s=o.trim();if(s==="")throw new Error("runner execution-leg failure requires a reason");let a={adapter:i,reason:s};switch(e.value.status){case"starting":e.value={status:"failed",adapter:i,reason:s};break;case"ready":{let d=e.value.adapters.filter(c=>c!==i),u=[...t(e.value).filter(c=>c.adapter!==i),a];e.value=d.length===0?{status:"failed",adapter:i,reason:s,...u.length===1?{}:{failures:u}}:n(d,u);break}case"failed":{let d=t(e.value);d.some(u=>u.adapter===i)||(e.value={...e.value,failures:[...d,a]});break}}},markNotReady:(o,i)=>{let s=o.trim();if(s==="")throw new Error("runner execution-leg demotion requires a reason");switch(e.value.status){case"starting":case"failed":break;case"ready":{let a=e.value.adapters.filter(u=>u!==i),d=[...t(e.value).filter(u=>u.adapter!==i),{adapter:i,reason:s}];e.value=a.length===0?{status:"failed",adapter:i,reason:s,...d.length===1?{}:{failures:d}}:n(a,d);break}}},refusalReason:o=>{switch(e.value.status){case"starting":return`runner_execution_leg_unhealthy: ${e.value.reason}`;case"failed":return`runner_execution_leg_unhealthy: ${(o===void 0?void 0:t(e.value).find(s=>s.adapter===o))?.reason??e.value.reason}`;case"ready":{if(o!==void 0&&!e.value.adapters.includes(o))return`runner_execution_leg_unhealthy: ${t(e.value).find(s=>s.adapter===o)?.reason??`${o}_readiness_not_proven`}`;throw new Error("runner execution leg is ready and has no refusal reason")}}},capabilityFields:()=>({executionHealth:e.value})}}async function G6e(e){if(UZ(e.health),e.activateDispatch(),await e.publishReadyHealth(),UZ(e.health),!e.signalGenerationReady())throw new Error("runner generation-ready signal was not delivered");return{type:"ready",delivered:!0}}function UZ(e){let n=e.snapshot();switch(n.status){case"ready":break;case"starting":throw new Error(`runner execution leg is starting: ${n.reason}`);case"failed":throw new Error(`runner execution leg is failed: ${n.reason}`)}}function Z6e(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 Q6e(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 Pi(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}}function X6e(e,n){return Pi(e,[n],[n])===void 0?"codex":"claude-code"}async function eje(e){let n;try{return await Promise.race([e,new Promise(t=>{n=setTimeout(()=>t(!0),Y6e),n.unref?.()})])}finally{n!==void 0&&clearTimeout(n)}}async function kQ(e){let n=e.pending.sourceSeq;if(n===void 0)return e.log("claude_code.approval_consensus_source_seq_missing",{thread_id:e.pending.threadId,claude_session_id:e.pending.sessionId??null,reason:e.reason}),e.stopSession("Claude Code approval has no source sequence"),"stopped";let t=e.captureMessageStateAttemptGeneration(),r;try{r=await e.publishMessageState()}catch(i){e.log("claude_code.approval_consensus_push_unconfirmed",{thread_id:e.pending.threadId,source_seq:n,claude_session_id:e.pending.sessionId??null,reason:e.reason,message:i instanceof Error?i.message:String(i)}),r={kind:"unconfirmed"}}return e.adoptMessageStateConsensusForAttempt(n,e.incomingStatus,r,t)==="stop"?(e.log("claude_code.approval_terminal_consensus",{thread_id:e.pending.threadId,source_seq:n??null,claude_session_id:e.pending.sessionId??null,disposition:r.kind,reason:e.reason}),e.stopSession("Claude Code turn already terminated by the server"),"stopped"):(e.pending.resolve(e.decision),"resolved")}function BZ(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 nje(e){if(e.agentReplay?.provider==="codex"||e.codexUrl!==void 0||Ys(e))return!0;switch(e.dependencyStatus?.codex.available){case!1:return!1;case!0:case void 0:return!0}}function mp(e){let n=y(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 tje(e){switch(e){case"codex":return"Codex";case"claude-code":return"Claude Code"}}function Pw(e){let n=y(e.modelProvider)?.trim(),t=A(e.llmProxy),r=y(t?.baseUrl)?.trim(),o=y(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 CQ(e){if(e.type==="error")return e.error;if(e.type==="provider"&&e.runtime.provider==="openai-proxy"&&Js()===void 0)return"codex_llm_proxy_requires_openai_api_key"}function JZ(e,n){let t=Pw(n);switch(t.type){case"none":return;case"error":return t.error;case"provider":{let r=CQ(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 rje(e){if(e.linzumiAgentMcpToken===void 0||e.linzumiAgentMcpToken===""||tE(e.env))return;let n=oje(e.env,e.kandanUrl);if(n===void 0||n==="")return wM("cloud agent turn requires a server URL (kandanUrl) and none was configured; refusing to run the @linzumi agent turn on the host");if(ije(n))return wM(`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(!_u(e.env))return wM("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=Vs()}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=uK({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=Dw(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 dK({connection:r,workspaceSlug:e.workspaceSlug,kandanUrl:n,linzumiAgentMcpToken:e.linzumiAgentMcpToken,ownerUsername:e.ownerUsername,modelProvider:s,llmProxyToken:e.modelProviderRuntime?.llmProxyToken,agentSpec:i,prewarm:!0})}function wM(e){return()=>Promise.reject(new At(e))}function oje(e,n){let t=e.LINZUMI_CLOUD_AGENT_PUBLIC_URL?.trim();return t!==void 0&&t!==""?t:n}function ije(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 Dw(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 TQ(e){switch(e.provider){case"wafer":return{LINZUMI_LLM_PROXY_TOKEN:e.llmProxyToken};case"openai-proxy":{let n=Js();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 PQ(e){e.options.codexUrl===void 0&&(e.setStartupStage("checking_project_trust"),Hb(e.cwd,{configHome:La()})),e.setStartupStage("starting_codex_session");let n=Ro(e.control.developerPrompt),t=Sa(e.control.linzumiContext),r=vp(e.options,e.control),o=await Si("thread/start",e.codex.request("thread/start",Pje(r,{cwd:e.cwd,serviceName:"kandan-local-runner",personality:"pragmatic",developerInstructions:Hf({cwd:e.cwd,planTool:"linzumi-mcp",mcpAvailable:!Ys(e.options)||zM(e.options),devServicesAvailable:!Ys(e.options),developerPrompt:n,...$M(e.control),linzumiContext:t,...Gc(r.sandbox)&&r.sandbox!==void 0?{sandboxNetworkPosture:{sandbox:r.sandbox,approvalCapable:Zc(r.approvalPolicy)}}:{}})}))),i=b6e(o);e.setStartedCodexThreadId(i);let s=Ro(e.control.workDescription);i!==void 0&&n!==void 0&&await wje(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 Si("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=vi($e(e.control.attachments)??[]);if(a===void 0||u===void 0)throw new Ib({codexThreadId:i,kandanThreadId:fn(e.control,"threadId"),hasThreadSession:a!==void 0,sourceSeq:u});let l=Uo(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 sje(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 aje(e){let n=e.onInputDelivered,t=e.isLiveSteerAllowed,r=e.onInputWait,o=e.onSourceSeqDelivered,i=[SM(e.content)],s=[e.sourceSeq],a=[],d=new Set,u=[],c=new Map,l=v=>new Promise(S=>{c.set(v,S)}),p=(v,S)=>{let C=c.get(v);C!==void 0&&(c.delete(v),C(S))},f={closed:!1},g=()=>{for(;f.closed;){let v=u.shift();if(v===void 0)return;v({done:!0,value:void 0})}},m=(v,S,C)=>{s.push(S),n?.(),S!==void 0&&o!==void 0&&!d.has(S)&&(d.add(S),o(S)),C?.();let T=u.shift();if(T===void 0){i.push(v);return}p(v,!0),T({done:!1,value:v})},_=(v,S,C)=>s.length>0?(a.push({message:v,sourceSeq:S,onDelivered:C}),{disposition:"parked",queuePosition:a.length}):(m(v,S,C),{disposition:"delivered"}),b=v=>{if(f.closed)throw new Error("Claude Code streaming input is closed");let S=SM(v.content);return _(S,v.sourceSeq,v.onDelivered)},w=v=>{if(f.closed)throw new Error("Claude Code streaming input is closed");let S=SM(v),C=l(S);if(s.length===0)return _(S,void 0),{steered:"steered_queued",applied:C};if(t?.()===!1)return _(S,void 0),{steered:"steered_queued",applied:C};let T=u.shift();return T===void 0?i.push(S):(p(S,!0),T({done:!1,value:S})),{steered:"steered_live",applied:C}};return{messages:{[Symbol.asyncIterator](){return{next(){let v=i.shift();return v!==void 0?(p(v,!0),Promise.resolve({done:!1,value:v})):f.closed?Promise.resolve({done:!0,value:void 0}):(r?.(s[0]),new Promise(S=>{u.push(S)}))}}}},close:()=>{if(s.length===0)for(;a.length>0;){let v=a.shift();v!==void 0&&m(v.message,v.sourceSeq,v.onDelivered)}f.closed=!0,g();for(let[v,S]of c)c.delete(v),S(!1)},enqueue:b,enqueueSteer:w,drainUndeliveredFollowUps:()=>a.splice(0),completeTurn:()=>{let v=s.shift();if(!f.closed&&s.length===0){let S=a.shift();S!==void 0&&m(S.message,S.sourceSeq,S.onDelivered)}return v},currentSourceSeq:()=>s[0]}}function SM(e){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null}}function KZ(e){if(e.decision.type!=="allow")return;let n=E9(e.decision.updatedPermissions);if(n.length!==0)try{D9(e.threadId,n),e.log("claude_code.thread_permission_grants_recorded",{linzumi_thread_id:e.threadId,rules:n.map(VI)})}catch(t){e.log("claude_code.thread_permission_grants_persist_failed",{linzumi_thread_id:e.threadId,message:t instanceof Error?t.message:String(t)})}}function dje(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:k9(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 IQ(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(ag({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=f=>{u||(u=!0,c(),d(f))};o=l,i=()=>{s||(s=!0,(async()=>{try{await hp(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(f){console.error("kandan.claude_code_user_input_abort_publish_failed",e.questionRequest.requestId,f instanceof Error?f.message:String(f))}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 hp(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 hp(e,n,t){await e.push(n,"session:stream_thread_message",{workspace:t.workspace,channel:t.channel,thread_id:t.threadId,stream_key:T9(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:C9({request:t.request,sessionId:t.sessionId,sourceSeq:t.sourceSeq,answerState:t.answerState,streamState:t.streamState})}})}function ag(e){return[...e.pendingApprovals.values()].some(n=>n.threadId===e.threadId)||[...e.pendingQuestions.values()].some(n=>n.threadId===e.threadId)}async function uje(e){let n=S9(e.request),t=new Map(n.choices.map(r=>[r.label,r.permissionDecision]));return IQ({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 VZ(){return kM.value===void 0&&(kM.value=_8(y8(process.env))),kM.value}async function WZ(e){try{return await HZ(e)}catch(n){if(!(n instanceof ja))throw n;e.log("claude_code.dispatch_liveness_respawn_retry",{thread_id:fn(e.control,"threadId")??null,resume_session_id:e.resumeSessionId??null,waited_ms:n.waitedMs});try{return await HZ(e)}catch(t){throw t instanceof ja?new Error(cje):t}}}async function HZ(e){let n=gp(e.control,"workspace"),t=gp(e.control,"channel"),r=gp(e.control,"threadId"),o=Y(e.control.rootSeq),i=Y(e.control.sourceSeq)??o,s=Ro(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:Du(s),message_received_at_ms:Date.now()}),e.resumeSessionId!==void 0){let $=await VZ().acquire();($.waitedMs>0||$.timedOut)&&e.log("claude_code.resume_start_throttled",{linzumi_thread_id:r,claude_session_id:e.resumeSessionId,waited_ms:$.waitedMs,timed_out:$.timedOut})}let a=$=>{e.log("claude_code.turn_terminal",{turn_id:null,outcome:"failed",reason:$,thread_id:r,claude_session_id:e.resumeSessionId??null})},d,u=!1,c=!1,l,p=!1,f,g=0,m=!1,_=!1,b=!1,w,v=!1,S=$=>({workspace:n,channel:t,thread_id:r,codex_thread_id:$,provider_session_key:$,agent_provider:"claude-code",claude_session_id:$,cwd:e.cwd,instance_id:e.instanceId}),C=()=>{if(!u||!c||d===void 0)return;let $=()=>{let Le=d;if(p||!u||!c||Le===void 0)return;p=!0;let G=e.kandan.push(e.topic,"session:typing_start",S(Le)).then(()=>{}).catch(Pe=>{e.log("kandan.claude_code_typing_heartbeat_failed",{thread_id:r,claude_session_id:Le,message:Pe instanceof Error?Pe.message:String(Pe)})}).finally(()=>{p=!1});f=G,G.finally(()=>{f===G&&(f=void 0)})};$(),l===void 0&&(l=setInterval($,mqe),l.unref?.())},T=()=>{if(m){_=!0;return}u=!0,g+=1,C()},P=()=>{_&&(_=!1,T())},O=()=>{if(m){b=!0;return}ie.completeTurn()},R=()=>{b&&(b=!1,O())},j=()=>{b=!1,v=!0,ie.completeTurn()},B=async($,Le)=>{let G,Pe=new Promise(xt=>{G=setTimeout(()=>xt("timeout"),gqe),G.unref?.()}),We=await Promise.race([$.then(()=>"processed"),Pe]);G!==void 0&&clearTimeout(G),We==="timeout"&&e.log("claude_code.terminal_processing_timeout",{linzumi_thread_id:r,claude_session_id:Le.sessionId,event_type:Le.type})},K=async($,Le)=>{let G,Pe=new Promise(xt=>{G=setTimeout(()=>xt("timed_out"),hqe),G.unref?.()}),We=await Promise.race([$.then(()=>"settled"),Pe]);return G!==void 0&&clearTimeout(G),We==="timed_out"&&e.log("kandan.claude_code_typing_start_wait_timeout",{thread_id:r,claude_session_id:Le}),We},D=async()=>{let $=u,Le=d,G=g;if(u=!1,l!==void 0&&(clearInterval(l),l=void 0),!(!$||!c||Le===void 0))try{let Pe=f;if(Pe!==void 0&&await K(Pe,Le)==="timed_out"&&f===Pe&&(f=void 0,p=!1),u||g!==G)return;await e.kandan.push(e.topic,"session:typing_stop",S(Le))}catch(Pe){e.log("kandan.claude_code_typing_stop_failed",{thread_id:r,claude_session_id:Le,message:Pe instanceof Error?Pe.message:String(Pe)})}},J=vi($e(e.control.attachments)??[]),W=await FC({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:J}).then($=>({ok:!0,content:$})).catch($=>({ok:!1,error:$}));if(!W.ok){let $=W.error instanceof Error?W.error.message:String(W.error),Le=`Claude Code input attachment download failed: ${$}`;a(Le);try{await oo(e.kandan,e.topic,e.control,"failed",Le,{instanceId:e.instanceId,failureClass:"attachment_download_failed"})}catch(G){e.log("kandan.start_instance_claude_code_attachment_failed_state_push_failed",{message:G instanceof Error?G.message:String(G)})}return{controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",ok:!1,error:"claude_code_attachment_download_failed",message:$}}}let H=()=>{},X=!1,be=new Promise($=>{H=$}),Re=()=>{X||(X=!0,setImmediate(H))},ie=aje({content:W.content,sourceSeq:i,onInputDelivered:T,isLiveSteerAllowed:()=>!m,onInputWait:$=>{$===void 0&&Re()},onSourceSeqDelivered:$=>{we.add($),e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:$})}}),we=new Set,qe=new Set,Oe=0,vn=Ro(e.control.developerPrompt),un=Sa(e.control.linzumiContext),je=vp(e.options,e.control),Xe=y(e.control.approvalPolicy)!==void 0,_e=e.claudeThreadAccessStore?.resolve(r),q=Sp(e.options),F=Xe?je.approvalPolicy:_e?.approvalPolicy??q.approvalPolicy,z=Xe?je.sandbox:_e?.sandbox??q.sandbox,V=F===void 0?void 0:Jf(F,z),ae=V!==void 0?CM(V):je.approvalPolicy===void 0?void 0:CM(je.approvalPolicy);if(V!==void 0&&e.claudeThreadAccessStore?.record(r,{approvalPolicy:V,sandbox:z}),e.resumeSessionId!==void 0)try{await x9({cwd:e.cwd,sessionId:e.resumeSessionId,validator:e.options.claudeCodeSessionValidator})}catch($){throw a($ instanceof Error?$.message:String($)),$}let pe={runnerIdentity:Uo(e.options.token),codexVersion:void 0},Te=new AbortController,Z=nh({stop:()=>{Te.signal.aborted||Te.abort(new Error("engine child reaper teardown"))},pid:void 0,ownProcessGroup:!1,kind:"claude_code"}),de=new Set(i===void 0?[]:[i]),ue={value:void 0},en=!1,Ye,Be=[],In=!1,ft,ee=Qs({kandanUrl:e.options.kandanUrl,accessToken:e.options.token,fetchImpl:e.options.fetch,operatingMode:"text"}),Q=s.trim().slice(0,2e3),he=hB({replacePlanSteps:ee.replaceCodingJobPlanSteps,threadId:r,goal:Q,log:e.log}),He=async()=>{if(e.resumeSessionId!==void 0)return;let $=5e3,Le=new AbortController,G,Pe=new Promise(We=>{G=setTimeout(()=>{Le.abort(new Error("claude goal seed timed out")),e.log("claude_code.goal_seed_timeout",{thread_id:r,timeout_ms:$}),We()},$)});try{await Promise.race([gB({upsertCodingJobPlan:ee.upsertCodingJobPlan,threadId:r,goal:Q,log:e.log,signal:Le.signal}),Pe])}finally{G!==void 0&&clearTimeout(G)}},N={model:je.model,modelProvider:je.modelProvider},ce=lB({flushJournaledTerminal:()=>te.flush(IZ),publishMessageState:$=>Io(e.kandan,e.topic,{workspace:n,channel:t,threadId:r,sourceSeq:$.sourceSeq,status:$.status,reason:$.reason,sessionId:d,fate:$.fate,retryable:$.retryable,holdDeadlineAt:$.holdDeadlineAt,model:$.model,provider:$.provider}),adoptMessageStateConsensus:($,Le,G)=>te.adoptMessageStateConsensus($,Le,G),acceptRestart:$=>te.acceptRouteOutageRestart($),enqueue:$=>ie.enqueue($).disposition,isSessionClosed:()=>Te.signal.aborted,attribution:()=>({...N.model===void 0?{}:{model:N.model},...N.modelProvider===void 0?{}:{provider:N.modelProvider}}),log:($,Le)=>e.log($,{thread_id:r,...Le})});i!==void 0&&ce.retainInput(i,W.content);let te=uB({instanceId:e.instanceId,cwd:e.cwd,threadKey:`${n}:${t}:${r}`,persistDir:e.options.claudeCodeRunner===void 0?ng():void 0,wire:()=>({workspaceSlug:n,channelSlug:t,kandanThreadId:r,codexThreadId:d??e.resumeSessionId,rootSeq:o,leaseEpoch:e.leaseEpochFor?.(r)}),push:async($,Le,G,Pe)=>{let We=await e.kandan.push(e.topic,$,Le,Pe);if(ne(We)&&We.status==="ok")return We;throw new Error(`kandan push failed: ${$}: ${JSON.stringify(We).slice(0,500)}`)},preparePush:($,Le)=>k_({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:(G,Pe)=>e.log(G,Pe)},$,Le),runnerPayload:($,Le,G,Pe)=>Hi({...e.options,cwd:e.cwd},e.instanceId,$,Le,pe,G,Pe),currentSourceSeq:ie.currentSourceSeq,routeOutageActive:()=>Pa(void 0,N.model,0)==="active",runtimeMetadataForSourceSeq:()=>({model:N.model??null,model_provider:N.modelProvider??null}),onTurnTerminal:($,Le,G,Pe,We,xt,xa)=>{e.log("claude_code.turn_terminal",{turn_id:$,outcome:Le,reason:G??null,thread_id:r,claude_session_id:d??null,...xt===void 0?{}:{fate:xt}}),(Le==="failed"||Le==="interrupted")&&xt==="route_outage"&&We!==void 0&&ce.park({sourceSeq:We,reason:G,provider:xa?.provider,model:xa?.model,holdCeilingMs:xa?.holdCeilingMs}),Le==="completed"&&We!==void 0&&(e.onLiveSourceSeqAccepted?.({channel:t,threadId:r,sourceSeq:We}),ce.releaseRetained(We)),w?.(),w=void 0},onTodoWriteCompleted:he.handleTodoWrite,suppressProcessingState:()=>{for(let $ of e.pendingClaudeCodeApprovals.values())if($.threadId===r)return!0;for(let $ of e.pendingClaudeCodeUserQuestions.values())if($.threadId===r)return!0;return!1},log:e.log,debugTrace:e.debugTrace}),ke=e.options.claudeCodeRunner===void 0&&XB(process.env)?YB({captureDir:Tt(lQ(),`linzumi-claude-live-bash-${e.instanceId}`),onOutputDelta:($,Le)=>{d!==void 0&&te.handleTranscriptEvent({type:"command_output_delta",sessionId:d,itemKey:$,delta:Le})},log:($,Le)=>e.log($,Le)}):void 0,Ae,nn;try{let $=UQ(),Le=BM({...e.options,codingJobMcpToken:jM(e.control)});Ae=Le.cleanup;let G=$s({command:$.command,argsPrefix:$.argsPrefix,kandanUrl:e.options.kandanUrl,authFilePath:Le.path,ownerUsername:Ow(e.options),operatingMode:"text",cwd:e.cwd,threadId:r,toolScope:e.options.codingJobToolScope,multiAgentJobs:e.options.multiAgentJobs===!0,devServices:{scope:e.options.runnerId,ownerPid:UM(e.options)}});nn=g4(G)}catch($){Ae?.(),Ae=void 0,e.log("claude_code.mcp_config_failed",{message:$ instanceof Error?$.message:String($),thread_id:r})}let Yn={kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,cwd:e.cwd,initialPrompt:s,rootSeq:o,log:e.log},pn=new Map,Kt=async $=>{let Le=Date.now(),G=NI($.rateLimit,Le);e.log("claude_code.rate_limit",{linzumi_thread_id:r,claude_session_id:$.sessionId??d??null,rate_limit_summary:`claude/${$.rateLimit.rateLimitType??"account"} ${G}`,status:$.rateLimit.status??null,utilization_percent:$.rateLimit.utilizationPercent??null,resets_at_ms:$.rateLimit.resetsAtMs??null});let Pe=$.rateLimit.rateLimitType??"account",We=Sje($.rateLimit);if(We!==pn.get(Pe))try{await kje({kandan:e.kandan,topic:e.topic,workspace:n,channel:t,threadId:r,claudeSessionId:$.sessionId??d,rateLimit:$.rateLimit}),pn.set(Pe,We)}catch(xt){e.log("claude_code.rate_limit_post_failed",{thread_id:r,message:xt instanceof Error?xt.message:String(xt)})}},qo=async $=>{if(Oe=Date.now(),e.debugTrace?.record("claude-transcript","transcript.event",{eventType:$.type,threadId:r,activeSessionId:d??null,event:$}),Uy.observeTranscriptEvent($),$.type==="tool_call"&&$.toolName==="Bash"){let G=y($.input.command);G!==void 0&&sx(r,G)}try{await hje(Yn,$)}catch(G){e.log("claude_code.session_store_mirror_failed",{session_id:$.sessionId??null,event_type:$.type,message:G instanceof Error?G.message:String(G)})}if($.type==="session_started"){d=$.sessionId,e.log("claude_code.session_started",{linzumi_thread_id:r,claude_session_id:$.sessionId}),e.activeClaudeCodeSessions.set($.sessionId,{abortController:Te,workspace:n,channel:t,threadId:r,currentSourceSeq:ie.currentSourceSeq,adoptMessageStateConsensus:te.adoptMessageStateConsensus,captureMessageStateAttemptGeneration:te.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:te.adoptMessageStateConsensusForAttempt,pauseOutbox:()=>te.pauseOutbox(),resumeOutbox:()=>te.resumeOutbox(),inputDelivered:G=>we.has(G)||qe.has(G),lastSdkActivityMs:()=>Oe,enqueueInput:G=>{if(G.sourceSeq!==void 0&&de.has(G.sourceSeq))return"duplicate";let Pe=ie.enqueue(G);return G.sourceSeq!==void 0&&(ce.noteSupersession("new_user_input"),ce.retainInput(G.sourceSeq,G.content)),G.sourceSeq!==void 0&&de.add(G.sourceSeq),Pe},closeInput:ie.close,hasActiveTurn:()=>te.activeTurnId()!==void 0,sessionWork:()=>ue.value,steerTurn:ie.enqueueSteer,interruptTurn:async G=>{ce.noteSupersession("interrupt_turn");let Pe=te.interruptActiveTurn(G);return await Ye?.interrupt(),Pe},interruptTurnBeforeAbort:G=>{let Pe=Ye;return ce.noteSupersession("interrupt_before_abort"),Z6e({reason:G,threadId:r,interruptActiveTurn:We=>te.interruptActiveTurn(We),interruptSessionControls:Pe===void 0?void 0:()=>Pe.interrupt(),log:e.log})},discardQueuedFollowUpsForStop:()=>(ce.noteSupersession("stop_discard"),ie.drainUndeliveredFollowUps().map(Pe=>Pe.sourceSeq).filter(Pe=>Pe!==void 0)),markFollowUpSeqDiscarded:G=>{qe.add(G)},slashCommands:async()=>{if(In)return Be;let G=await Ye?.supportedCommands();return In||G!==void 0&&(Be=G),Be},updateSettings:async G=>{let Pe={};if(G.model!==void 0&&(await Ye?.setModel(TM(G.model)),Pe.model=G.model,N.model=G.model),G.approvalPolicy!==void 0){let We=CM(G.approvalPolicy);We!==void 0&&(await Ye?.setPermissionMode(We),Pe.approval_policy=G.approvalPolicy)}if(G.reasoningEffort!==void 0){let We=ZZ(G.reasoningEffort);We!==void 0&&(await Ye?.setEffort?.(We),Pe.reasoning_effort=G.reasoningEffort)}return Pe}}),e.ensureClaudeCodeForwardPortSession?.({sessionId:$.sessionId,workspace:n,channel:t,threadId:r,cwd:e.cwd,rootSeq:o,currentSourceSeq:ie.currentSourceSeq}),te.handleTranscriptEvent($),await e.kandan.push(e.topic,"session:bind",{workspace:n,channel:t,thread_id:r,codex_thread_id:$.sessionId,provider_session_key:$.sessionId,agent_provider:"claude-code",claude_session_id:$.sessionId,cwd:e.cwd,instance_id:e.instanceId}),c=!0,T();return}if($.type==="slash_command_catalog"){Be=$.commands,$.source==="commands_changed"&&(In=!0);return}let Le=$.type==="turn_completed"||$.type==="turn_interrupted"||$.type==="session_completed"||$.type==="session_failed";if(Le){m=!0;let G=te.activeTurnId(),Pe=!1,We=()=>{},xt=()=>{Pe=!0,We()},xa=new Promise(Fo=>{We=Fo});w=xt,te.handleTranscriptEvent($);let Bi=$.type==="turn_completed"||$.type==="turn_interrupted",Ky=Bi||G!==void 0||Pe;try{Ky?(await B(xa,$),await te.flush(IZ)):w===xt&&(w=void 0)}catch(Fo){e.log("claude_code.terminal_typing_flush_timeout",{linzumi_thread_id:r,claude_session_id:$.sessionId,event_type:$.type,message:Fo instanceof Error?Fo.message:String(Fo)})}w===xt&&(w=void 0),Bi&&(j(),ie.currentSourceSeq()!==void 0&&Re()),($.type==="session_completed"||$.type==="session_failed")&&d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),$.type==="session_completed"&&Re(),m=!1,await D(),R(),P(),await ax({threadKey:r,workspace:n,channel:t,threadId:r,push:(Fo,$c)=>e.kandan.push(e.topic,Fo,$c),log:(Fo,$c)=>e.log(Fo,$c)})}if(($.type==="turn_completed"||$.type==="session_completed")&&e.log("claude_code.turn_completed",{linzumi_thread_id:r,claude_session_id:$.sessionId,body_source:$.bodySource??null,body_preview:Du($.body)}),$.type==="rate_limit"&&await Kt($),$.type==="tool_result"&&ke?.settleTool($.itemKey),($.type==="turn_interrupted"||$.type==="session_failed")&&ke?.settleAll(),$.type==="session_failed"&&e.log("claude_code.session_failed",{linzumi_thread_id:r,claude_session_id:$.sessionId??null,model_transport_lane:Lo.lane,reason:$.reason,api_error_status:$.apiErrorProvenance?.status??null,api_error_request_id:$.apiErrorProvenance?.requestId??null,api_error_message:$.apiErrorProvenance?.message??null}),$.type==="usage"){let G=f9($.usage);G!==void 0&&e.log("claude_code.token_usage",{linzumi_thread_id:r,claude_session_id:$.sessionId,token_usage_summary:G})}Le||te.handleTranscriptEvent($)},pr=A(e.control.llmProxy),xo=y(pr?.baseUrl)?.trim(),jo=y(pr?.token)?.trim(),Lo=T8({env:process.env,llmProxyBindingPresent:xo!==void 0&&xo!==""&&jo!==void 0&&jo!=="",hostedLinzumiAgentContext:e.control.linzumiAgent!==void 0||e.options.threadProcess?.role==="thread"&&e.options.linzumiAgentMcpToken!==void 0,routedNonAnthropicModel:AQ(je.model)!==void 0});e.log("claude_code.model_transport_lane",{linzumi_thread_id:r,lane:Lo.lane,credential_class:Lo.credentialClass,reason:Lo.reason});let Uy=E8({lane:Lo.lane,workspace:n,channel:t,threadId:r,model:TM(je.model),push:($,Le)=>e.kandan.push(e.topic,$,Le),log:e.log}),Fr,ga,zi;if(Lo.lane==="llm_proxy"&&xo!==void 0&&xo!==""&&jo!==void 0&&jo!==""){try{Fr=await tI({upstreamBaseUrl:xo,initialToken:jo,log:(Le,G)=>e.log(Le,{linzumi_thread_id:r,...G}),debugTrace:e.debugTrace,debugTraceId:e.debugTrace===void 0?void 0:`claude-code:${e.instanceId}`,dispatcher:Xo()?.dispatcher,onUpstreamRateLimited:({retryAfterMs:Le})=>VZ().notifyRateLimited({retryAfterMs:Le})});let $=Fr;ga=rI({relay:Fr,mint:()=>EQ(e.kandan,e.topic,$.currentToken()),log:(Le,G)=>e.log(Le,{linzumi_thread_id:r,...G})})}catch($){e.log("llm_proxy_relay.start_failed_fallback_to_env_token",{linzumi_thread_id:r,message:$ instanceof Error?$.message:String($)}),Fr=void 0,ga=void 0}zi=Fr!==void 0?XZ(process.env,{baseUrl:Fr.baseUrl},je.model):XZ(process.env,{baseUrl:xo,token:jo},je.model)}else zi=bje(process.env);let By=_qe(zi),Dc=()=>ie.currentSourceSeq()!==void 0&&!ag({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),Jy=($,Le)=>{if(lje($.toolName))return Promise.resolve({type:"allow"});let G=w9($);switch(G.type){case"question":return(async()=>{await D();let Pe=await IQ({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ie.currentSourceSeq(),request:$,questionRequest:G.request,kind:"question",approvalDecisions:void 0,leaseEpoch:e.leaseEpochFor?.(r),signal:Le});return T(),Pe})();case"invalid":return Promise.resolve({type:"deny",message:G.message});case"not_question":{let Pe=A9(fh(r),$);return Pe!==void 0?(e.log("claude_code.tool_approval_auto_granted",{linzumi_thread_id:r,tool_name:$.toolName,request_id:$.requestId}),Promise.resolve(Pe)):uje({kandan:e.kandan,topic:e.topic,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions,workspace:n,channel:t,threadId:r,sessionId:d??e.resumeSessionId,sourceSeq:ie.currentSourceSeq(),request:$,leaseEpoch:e.leaseEpochFor?.(r),signal:Le})}}},Ct=(async()=>{let $;await He(),await hm({cwd:e.cwd,threadKey:r,turnRef:i===void 0?"session-start":`seq-${i}`,log:(Pe,We)=>e.log(Pe,We)});let Le=ZZ(je.reasoningEffort),G=fh(r).map(VI);try{try{$=await _9({cwd:e.cwd,prompt:s,includeHookEvents:!0,developerInstructions:Hf({cwd:e.cwd,agentLabel:"Claude Code",planTool:"todo-write",devServicesAvailable:!0,developerPrompt:vn,...$M(e.control),linzumiContext:un}),model:TM(je.model),...typeof Le=="string"?{effort:Le}:{},...e.debugTrace===void 0?{}:{claudeCodeDebugFile:Tt(e.debugTrace.runDir,"claude-code-debug.log")},...ae===void 0?{}:{permissionMode:ae},...G.length===0?{}:{permissionGrantRules:G},resumeSessionId:e.resumeSessionId,abortController:Te,streamingInput:ie,...e.options.claudeCodeRunner===void 0?{turnStallThresholdMs:sje(process.env),turnStallIsActive:Dc,apiWaitStatusThresholdMs:1e4,apiWaitStatusItemKey:Pe=>{let We=ie.currentSourceSeq();return We===void 0?void 0:`system:claude-api-wait:${We}:${Pe}`}}:{},runner:e.options.claudeCodeRunner,debugTrace:e.debugTrace,canUseTool:Jy,...nn===void 0?{}:{mcpServers:nn},...ke===void 0?{}:{preToolUseHookMatchers:ke.hookMatchers,wrapApprovedToolInput:(Pe,We,xt)=>We==="Bash"?ke.wrapApprovedTool(Pe,xt):void 0},env:By,allowedTools:["mcp__linzumi__*"],onSessionControls:Pe=>{Ye=Pe,ae==="bypassPermissions"&&(ft=RQ({kandan:e.kandan,topic:e.topic,pendingClaudeCodeApprovals:e.pendingClaudeCodeApprovals,pendingClaudeCodeUserQuestions:e.pendingClaudeCodeUserQuestions,sessionThreadId:r,captureMessageStateAttemptGeneration:te.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:te.adoptMessageStateConsensusForAttempt,stopSession:We=>{te.interruptActiveTurn(We),Te.abort(new Error(We))},log:e.log,reason:"full_access_started"}).catch(We=>{e.log("claude_code.startup_approval_drain_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:We instanceof Error?We.message:String(We)})}))},onTurnCompleted:()=>{v?v=!1:O(),ie.currentSourceSeq()!==void 0&&Re()},onTranscriptEvent:qo})}finally{let We=ie.drainUndeliveredFollowUps().map(xt=>xt.sourceSeq).filter(xt=>xt!==void 0);We.length>0&&e.onUndeliveredFollowUpsAtClose!==void 0&&e.onUndeliveredFollowUpsAtClose({channel:t,threadId:r,sourceSeqs:We}),d!==void 0&&(e.activeClaudeCodeSessions.delete(d),await e.disposeClaudeCodeForwardPortSession?.(d)),await D(),ie.close(),Ae?.(),ke?.close()}}catch(Pe){throw te.submitLifecycle("codexDied",Pe instanceof Error?Pe.message:String(Pe)),await te.close(5e3).catch(()=>{}),await Promise.race([he.settle().catch(()=>{}),new Promise(We=>{setTimeout(We,5e3).unref?.()})]),a(Pe instanceof Error?Pe.message:String(Pe)),en||e.setStartupStage("claude_code_session_failed"),Pe}return en||e.setStartupStage("posting_claude_code_output"),await te.awaitTurnsSettled(3e4),await te.close(3e4),await Promise.race([he.settle(),new Promise(Pe=>{setTimeout(Pe,1e4).unref?.()})]),$})();Ct.finally(()=>Z.unregister()).catch(()=>{}),Ct.finally(()=>{ga?.stop(),Fr?.close()}).catch(()=>{}),ue.value=Ct;let Cf,Rd=e.options.claudeCodeRunner===void 0||process.env.LINZUMI_CLAUDE_DISPATCH_LIVENESS_MS!==void 0?Nb({windowMs:mh(process.env),isDelivered:()=>Oe>0,isSessionClosed:()=>!1,lastSdkActivityMs:()=>Oe,hasPendingBlockingRequest:()=>ag({threadId:r,pendingApprovals:e.pendingClaudeCodeApprovals,pendingQuestions:e.pendingClaudeCodeUserQuestions}),log:e.log,onWedged:$=>{Cf={waitedMs:$.waitedMs},e.log("claude_code.dispatch_liveness_wedged",{linzumi_thread_id:r,claude_session_id:d??e.resumeSessionId??null,waited_ms:$.waitedMs,cause:$.cause,dispatch:e.resumeSessionId===void 0?"initial_turn":"resume_turn"}),Te.abort(new ja($.waitedMs))}}):void 0;Ct.finally(()=>Rd?.stop()).catch(()=>{});let Ed;try{Ed=await Promise.race([Ct.then($=>({type:"session_ended",result:$})),be.then(()=>({type:"first_turn_settled"}))])}catch($){throw Cf!==void 0&&!($ instanceof ja)?new ja(Cf.waitedMs):$}finally{Rd?.stop()}let _a=$=>({controlResponse:{instanceId:e.instanceId,controlType:e.control.type,agentProvider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,response:{session:{id:$}}},providerSession:{provider:"claude-code",cwd:e.cwd,matchedRoot:e.matchedRoot,sessionId:$}});if(Ed.type==="session_ended")return _a(Ed.result.sessionId);e.setStartupStage("posting_claude_code_output"),en=!0,await te.awaitTurnsSettled(3e4);try{await te.flush(3e4)}catch($){e.log("claude_code.first_turn_flush_timeout",{linzumi_thread_id:r,claude_session_id:d??null,message:$ instanceof Error?$.message:String($)})}ft!==void 0&&await ft;let Oc=await Promise.race([Ct.then($=>({type:"session_ended",result:$}),()=>{}),new Promise($=>{setImmediate(()=>$(void 0))})]);if(Oc!==void 0)return _a(Oc.result.sessionId);Ct.then(()=>{e.log("claude_code.session_loop_ended",{linzumi_thread_id:r,claude_session_id:d??null})},$=>{e.log("claude_code.session_loop_failed",{linzumi_thread_id:r,claude_session_id:d??null,message:$ instanceof Error?$.message:String($)})});let Tf=d??e.resumeSessionId;if(Tf!==void 0)return _a(Tf);let Pf=await Ct;return _a(Pf.sessionId)}function lje(e){return e.startsWith("mcp__linzumi__")}function GZ(e){switch(e){case"untrusted":return 0;case"on-request":return 1;case"on-failure":return 2;case"never":return 3;default:return}}function CM(e){switch(e){case"never":return"bypassPermissions";case"on-request":case"untrusted":return"default";case"on-failure":return"acceptEdits";default:return console.warn(`linzumi approval-policy clamp: unknown Claude Code approval policy ${e}; clamping to most-restrictive mode (default = prompt every command)`),"default"}}function ZZ(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 pje(e,n){return[...e.entries()].filter(([,t])=>t.threadId===n)}function fje(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 RQ(e){let n=pje(e.pendingClaudeCodeApprovals,e.sessionThreadId);for(let[r,o]of n){if(await kQ({pending:o,decision:{type:"allow"},incomingStatus:"processing",publishMessageState:()=>Io(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}),captureMessageStateAttemptGeneration:e.captureMessageStateAttemptGeneration,adoptMessageStateConsensusForAttempt:e.adoptMessageStateConsensusForAttempt,stopSession:e.stopSession,log:e.log,reason:e.reason})==="stopped")return;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=fje(e.pendingClaudeCodeUserQuestions,e.sessionThreadId);for(let[r,o]of t){let i=o.approvalDecisions.get("Allow")??{type:"allow"};o.resolve(i),await hp(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 mje(e){return ux(e)}async function hje(e,n){let t=yje(n);if(t===void 0)return;let r=_je(e,n);if(r===void 0)return;let o="root",i=gje(`${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 gje(e){let n=QZ.get(e),t=Date.now()*1e3,r=n===void 0?t:Math.max(n+1,t);return QZ.set(e,r),r}function yje(e){switch(e.type){case"unknown":case"session_failed":return e.sessionId;default:return e.sessionId}}function _je(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: ${NI(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 bje(e){let n={};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);return n}async function EQ(e,n,t){let r=await e.push(n,"llm_proxy:mint_session_token",t!==void 0&&t!==""?{currentToken:t}:{});if(ne(r)&&r.status==="ok"&&ne(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 XZ(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=`${xje}: ${n.token}`);let o=AQ(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 AQ(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 TM(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 vje(n)?"sonnet":n}}function vje(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 wje(e,n,t,r,o){let i=fn(t,"workspace"),s=fn(t,"channel"),a=fn(t,"threadId"),d=y(t.modelProvider)?.trim(),u=y(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:
|
|
1657
1657
|
|
|
1658
1658
|
${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 Du(e){let n=e.replace(/\s+/g," ").trim();return n.length<=50?n:`${n.slice(0,47)}...`}function Sje(e){return[e.status??"na",e.rateLimitType??"na",e.utilizationPercent??"na",e.resetsAtMs??"na"].join(":")}async function kje(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 oo(e,n,t,r,o,i={}){let{failureClass:s,fateOverride:a,modelAccountRejection:d,...u}=i,c=Xa(t,r,o,{...u,...r==="failed"?el(s):{},...r==="failed"&&a!==void 0?{fate:a,retryable:tT(a)}:{},...r==="failed"&&d!==void 0?{modelAccountRejection:d}:{}});c!==void 0&&await e.push(n,"message_state",c)}async function YZ(e,n={}){let t,r;try{r=W_(e.rawFailureText??e.failureReason),t=H_({stalled:!1,provenance:r})}catch(o){e.log("claude_code.start_path_fate_classification_failed",{message:o instanceof Error?o.message:String(o)})}t==="route_outage"&&r!==void 0&&Cje(e,r,n)||await oo(e.kandan,e.topic,e.control,"failed",e.failureReason,{codexThreadId:e.codexThreadId,instanceId:e.instanceId,failureClass:e.failureClass,...t===void 0?{}:{fateOverride:t}})}function Cje(e,n,t={}){let r=t.executeHold??gI,o=t.snapshotHoldCeilingMs??ll,i=Y(e.control.rootSeq),s=Y(e.control.sourceSeq)??i,a=fn(e.control,"workspace"),d=fn(e.control,"channel"),u=fn(e.control,"threadId"),c=n.holdCeilingMinutes===void 0?void 0:n.holdCeilingMinutes*6e4,l=o();if(s===void 0||a===void 0||d===void 0||u===void 0||c===void 0&&(l===void 0||l<=0))return!1;let p=n.providerOutageRoute?.model,f=n.providerOutageRoute?.provider;return r({sourceSeq:s,reason:e.failureReason,provider:f,model:p,holdCeilingMs:c},{snapshotHoldCeilingMs:o,publishMessageState:g=>Io(e.kandan,e.topic,{workspace:a,channel:d,threadId:u,sourceSeq:g.sourceSeq,status:g.status,reason:g.reason,sessionId:e.codexThreadId,fate:g.fate,retryable:g.retryable,holdDeadlineAt:g.holdDeadlineAt,model:g.model,provider:g.provider}),adoptMessageStateConsensus:(g,m,_)=>(e.log("claude_code.start_path_route_outage_consensus_without_pipeline",{thread_id:u,source_seq:g,incoming_status:m,disposition:_.kind}),"stop"),redispatch:()=>!1,isSuperseded:()=>!1,attribution:()=>({...p===void 0?{}:{model:p},...f===void 0?{}:{provider:f}}),log:(g,m)=>e.log(g,{thread_id:u,start_path_never_started_turn:!0,...m})}).then(g=>{e.log("claude_code.start_path_route_outage_hold_settled",{thread_id:u,queued_seq:s,outcome:g})}).catch(async g=>{e.log("claude_code.start_path_route_outage_hold_crashed",{thread_id:u,queued_seq:s,message:g instanceof Error?g.message:String(g)});try{await oo(e.kandan,e.topic,e.control,"failed",e.failureReason,{codexThreadId:e.codexThreadId,instanceId:e.instanceId,failureClass:e.failureClass,fateOverride:"route_outage"})}catch{}}),!0}async function eQ(e,n,t,r,o,i={}){let s=Y(t.rootSeq),a=Y(t.sourceSeq)??s;if(a===void 0)return;let d=fn(t,"workspace"),u=fn(t,"channel"),c=fn(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 Io(e,n,t){if(t.sourceSeq===void 0)return{kind:"unconfirmed"};let o=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"?el(t.failureClass):{},...t.fate===void 0?{}:{fate:t.fate},...t.retryable===!0?{retryable:!0}:{},...t.holdDeadlineAt===void 0?{}:{hold_deadline_at:t.holdDeadlineAt},...t.model===void 0?{}:{model:t.model},...t.provider===void 0?{}:{provider:t.provider},...t.sessionId===void 0?{}:{codex_thread_id:t.sessionId},agent_provider:"claude-code"});return Fd(o,"full")}function Xa(e,n,t,r={}){let o=Y(e.rootSeq),i=Y(e.sourceSeq)??o;if(i===void 0)return;let s=gp(e,"workspace"),a=gp(e,"channel"),d=gp(e,"threadId"),u=mp(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}:{},...r.modelAccountRejection===void 0?{}:{model_account_compatibility_identity:{agent_provider:r.modelAccountRejection.identity[0],model_provider:r.modelAccountRejection.identity[1]??null,model:r.modelAccountRejection.identity[2]},model_account_compatibility_rejection_reason:r.modelAccountRejection.reason},...c===void 0?{}:{agent_provider:c}}}function gp(e,n){return Tje(e,n)}function Tje(e,n){let t=fn(e,n);if(t===void 0)throw new Error(`${e.type} control missing ${n}`);return t}function fn(e,n){let t=y(e[n])?.trim();if(!(t===void 0||t===""))return t}function vp(e,n){let t=Sp(e),r=n.sandbox??t.sandbox,o=y(n.modelProvider)?.trim(),i=n.sandboxedApprovalNeverDefault===!0?!0:void 0;return{model:n.model??t.model,modelProvider:o===void 0||o===""?void 0:o,modelTransportCatalogStatus:n.modelTransportCatalogStatus,reasoningEffort:n.reasoningEffort??t.reasoningEffort,collaborationMode:n.collaborationMode??t.collaborationMode,approvalPolicy:Jf(n.approvalPolicy??t.approvalPolicy,r,{sandboxedNeverDefault:i}),sandbox:r,sandboxedApprovalNeverDefault:i,fast:n.fast??e.fast,allowPortForwardingByDefault:n.allowPortForwardingByDefault??t.allowPortForwardingByDefault??!0}}function Pje(e,n={}){return{...e.model===void 0?{}:{model:e.model},...e.fast===!0?{serviceTier:"fast"}:{},...n.cwd===void 0?{}:{cwd:n.cwd},...e.approvalPolicy===void 0?{}:{approvalPolicy:Kf(e.approvalPolicy,e.sandbox,{sandboxedNeverDefault:e.sandboxedApprovalNeverDefault})},...e.sandbox===void 0?{}:{sandbox:e.sandbox},...e.reasoningEffort===void 0?{}:{config:{model_reasoning_effort:e.reasoningEffort}},...n.serviceName===void 0?{}:{serviceName:n.serviceName},...n.developerInstructions===void 0?{}:{developerInstructions:n.developerInstructions},...n.personality===void 0?{}:{personality:n.personality}}}function MQ(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",...n.collaborationMode===void 0?{}:{collaborationMode:n.collaborationMode},...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 Ije(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 Rje(e){switch(e){case"exhausted":return"dead_letter_exhausted";case"withheld":return"dead_letter_withheld";case"permanent":return"dead_letter_permanent"}}function lp(e){let n=e.control,t=Y(n.rootSeq),r=y(n.model),o=y(n.reasoningEffort),i=y(n.sandbox),s=y(n.approvalPolicy),a=n.collaborationMode==="plan"||n.collaborationMode==="default"?n.collaborationMode:void 0,d=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",...a===void 0?{}:{collaborationMode:a},...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},...d===void 0?{}:{fast:d}}}function Eje(e){let{control:n}=e;if(n.type!=="reconnect_thread")return;let t=fn(n,"channel"),r=fn(n,"threadId"),o=fn(n,"workspace"),i=Y(n.rootSeq),s=Y(n.sourceSeq)??i,a=Ro(n.workDescription),d=y(n.codexThreadId),u=y(n.cwd);if(!wG({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:vi($e(n.attachments)??[]),traceparent:y(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:MQ({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:Bc(l),registryRecord:p}}async function Aje(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 nQ(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 tQ(e){return e.threadProcess?.role!=="thread"&&e.codexUrl===void 0}async function Mje(e){let n=process.env.LINZUMI_E2E_COMMANDER_BOUND_HTTP_PORT;if(n===void 0||n.trim()==="")return;let t=Dje(n,"LINZUMI_E2E_COMMANDER_BOUND_HTTP_PORT"),r=V$e((o,i)=>{i.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),i.end(`linzumi commander-bound probe
|
|
1659
1659
|
`)});return await Oje(r,t),e("runner.e2e_commander_bound_http_probe_started",{port:t}),{port:t,close:()=>$je(r)}}function Dje(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 Oje(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 $je(e){return e.listening?new Promise((n,t)=>{e.close(r=>{if(r!==void 0){t(r);return}n()})}):Promise.resolve()}function qje(e){return hl({rootPid:process.pid,commanderBoundPids:[process.pid],onCandidate:n=>{if(n.portKind!=="commander_bound"||e.managedForwardPorts.has(n.port))return;let t=es(n.command);e.markCommanderManagedForwardPort(n.port,{processName:t?.appName??zm(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:Ma(e.capabilitiesPayload(),n.port)}))},onError:n=>e.log("port_forward.commander_bound_watch_failed",{message:n.message})})}function jje(e){if(e.codingJobToolScope==="coding"&&e.linzumiAgent?.mcpToken===void 0&&!$M(e).projectBound)return"coding"}function jM(e){if(e.multiAgentJobsEnabled!==!0)return;let n=e.codingJob?.mcpToken?.trim();if(n===void 0||n==="")throw new Error(`${e.type} control enabled multi-agent jobs without codingJob.mcpToken`);return n}function Lje(e,n){return jM(e)}function Fje(e){let n=vp(e.options,e.control),t=Pw(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,codingJobMcpToken:jM(e.control),codingJobToolScope:jje(e.control),multiAgentJobs:e.control.multiAgentJobsEnabled===!0,multiAgentJobsEligible:e.control.multiAgentJobsEligible===!0,vmExecution:e.options.vmExecution,executionMode:e.control.type==="start_instance"?FM(e.control.executionMode):e.options.executionMode,egressMode:e.control.type==="start_instance"?NM(e.control.egressMode):e.options.egressMode,projectId:e.control.type==="start_instance"?$Le(e.control.projectId):e.options.projectId,projectPublicId:e.control.type==="start_instance"?dg(e.control.projectPublicId):e.options.projectPublicId,goldenImagePublicId:e.control.type==="start_instance"?dg(e.control.goldenImagePublicId):e.options.goldenImagePublicId,spawnThreadRunner:void 0,localVmReadinessProbe:void 0,threadRunnerReadyTimeoutMs:e.options.threadRunnerReadyTimeoutMs,runtimeDefaults:{model:n.model,reasoningEffort:n.reasoningEffort,collaborationMode:n.collaborationMode,sandbox:n.sandbox,approvalPolicy:n.approvalPolicy,allowPortForwardingByDefault:n.allowPortForwardingByDefault},channelSession:void 0}}function Nje(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 eg(e){if(e.kind==="starting")return"starting";let n=e.handle;return n.codex.isClosed?.()===!0||n.sessionClosed?.()===!0?"dead":Nje(n.processPid)?"live":"dead"}async function pp(e){switch(e.kind){case"running":if(e.handle.closeWithOutcome!==void 0)return e.handle.closeWithOutcome();await e.handle.close();return;case"starting":try{let n=await e.promise;if(n.closeWithOutcome!==void 0)return n.closeWithOutcome();await n.close();return}catch{return}}}function Uje(e){return e.length>rQ?e.slice(e.length-rQ):e}function oQ(e){let n=e instanceof Error?e.message:String(e??"");return Bje.test(n)}function Jje(e){let n=no(e.cwd,e.allowedCwds);if(n.ok)return;let t=e.allowedCwds.length===0?"none":e.allowedCwds.join(", ");return{reason:n.reason,message:`${OQ} (${n.reason}): working directory ${e.cwd} cannot start a coding session on this runner (allowed roots: ${t})`}}function Kje(e){return e.split(`
|