@qoder-ai/qoder-agent-sdk 1.0.42 → 1.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,35 +1,35 @@
1
- var hr=Object.defineProperty;var yr=(n,e)=>{for(var t in e)hr(n,t,{get:e[t],enumerable:!0})};import{spawn as Xr}from"child_process";import{createInterface as Zr}from"readline";var Sr=["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","SessionStart","SessionEnd","Stop","SubagentStart","SubagentStop","PreCompact","PostCompact","CwdChanged","InstructionsLoaded","FileChanged","PermissionRequest","PermissionDenied","WorktreeCreate","WorktreeRemove"],wr=["clear","resume","logout","prompt_input_exit","other","bypass_permissions_disabled"],Ve=2e3,Kn=5e3;var Ye="1.0.42";var ye=41,jn=["Agent","AskUserQuestion","Bash","Edit","Glob","Grep","ImageGen","ImageSearch","NotebookEdit","Read","Skill","TaskCreate","TaskGet","TaskUpdate","TaskList","UpdateGoal","WebFetch","WebSearch","Write"],Fn=["TaskCreate","TaskGet","TaskUpdate","TaskList"],vr="QODER_FEATURE_TASKS";function Un(n){let e=n[vr];if(e!=="0"&&e!=="false")return[...jn];let t=new Set(Fn);return jn.flatMap(s=>s===Fn[0]?["TodoWrite"]:t.has(s)?[]:[s])}import{chmod as Gn,mkdtemp as Ar,rm as Wn,writeFile as Dr}from"fs/promises";import{existsSync as tt,mkdtempSync as Or,readFileSync as xr,rmSync as qr,writeFileSync as Nr}from"fs";import{homedir as jr,tmpdir as Hn}from"os";import{dirname as ts,join as B}from"path";import{fileURLToPath as Fr}from"url";var kr=/^[A-Za-z0-9_-]{1,64}$/,br=new Set(["mcp_list","mcp_get","mcp_call"]);function Dt(n,e){if(e.exposedName!==void 0){if(e.alwaysLoad!==!0)throw new Error(`MCP tool "${n}/${e.name}" requires alwaysLoad: true when exposedName is set.`);if(!kr.test(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" has invalid exposedName "${e.exposedName}".`);if(br.has(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" cannot use reserved exposedName "${e.exposedName}".`)}}function Ot(n,e){let t={};for(let s of e)Dt(n,s),(s.exposedName!==void 0||s.alwaysLoad===!0)&&(t[s.name]={...s.exposedName!==void 0?{exposedName:s.exposedName}:{},...s.alwaysLoad===!0?{alwaysLoad:!0}:{}});return Object.keys(t).length>0?t:void 0}function xt(n,e,t=e.tools??[]){let{tools:s,...o}=e,r=Ot(n,t);return{...o,...r?{toolOverrides:r}:{}}}function Ln(n){let e={};for(let[t,s]of Object.entries(n)){if(s.type==="sdk")throw new Error(`MCP server "${t}" uses an in-process SDK transport and cannot be changed with setMcpServers().`);let o=s.tools??[],r=o.find(i=>i.permission_policy!==void 0);if(r)throw new Error(`MCP tool "${t}/${r.name}" cannot set permission_policy through setMcpServers(); configure it when creating the query.`);e[t]=xt(t,s,o)}return e}var _r="global",Bn=_r==="cn",Rr=Bn?"QODERCN_":"QODER_",qt=`${Rr}VPC_ENDPOINT`,v=Bn?{productName:"QoderCN",packageName:"@qodercn-ai/qodercn-agent-sdk",cliCommands:["qoderclicn","qodercn"],configDirName:".qoder-cn",projectConfigDirName:".qoder",configDirEnv:"QODERCN_CONFIG_DIR",configDirNameEnv:"QODERCN_CONFIG_DIR_NAME",cliHomeEnv:"QODERCN_CLI_HOME",accessTokenEnv:"QODERCN_PERSONAL_ACCESS_TOKEN",serviceAccountEnv:"QODERCN_SERVICE_ACCOUNT_KEY"}:{productName:"Qoder",packageName:"@qoder-ai/qoder-agent-sdk",cliCommands:["qodercli","qoder"],configDirName:".qoder",projectConfigDirName:".qoder",configDirEnv:"QODER_CONFIG_DIR",configDirNameEnv:"QODER_CONFIG_DIR_NAME",cliHomeEnv:"QODER_CLI_HOME",accessTokenEnv:"QODER_PERSONAL_ACCESS_TOKEN",serviceAccountEnv:"QODER_SERVICE_ACCOUNT_KEY"};var $n=v.accessTokenEnv,Xe=v.serviceAccountEnv;function Cr(n){return{type:"accessToken",accessToken:n}}function Er(n=$n){return{type:"accessToken",accessToken:{envVar:n}}}function Pr(){return{type:"qodercli"}}function Tr(n){let e=n.serviceAccountKey!==void 0,t=typeof n.fetchServiceAccountToken=="function";if(e===t)throw new TypeError("serviceAccount() requires exactly one credential source: serviceAccountKey or fetchServiceAccountToken");return{type:"serviceAccount",...n}}function Mr(n=Xe){return{type:"serviceAccount",serviceAccountKey:{envVar:n}}}function Ir(n){return{type:"jobToken",fetchJobToken:n}}var zn=["l1StaticCheck","l2LightweightScan","l3DeepScan"];function Qn(n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError("securityScan must be an object.");let e=new Set(zn),t=Object.keys(n).filter(s=>!e.has(s));if(t.length>0)throw new TypeError(`securityScan contains unknown option${t.length===1?"":"s"}: ${t.join(", ")}.`);for(let s of zn){let o=n[s];if(o!==void 0&&typeof o!="boolean")throw new TypeError(`securityScan.${s} must be a boolean.`)}return{l1StaticCheck:n.l1StaticCheck??!1,l2LightweightScan:n.l2LightweightScan??!1,l3DeepScan:n.l3DeepScan??!1}}var Jn="QODER_AGENT_SDK_ENTRYPOINT",Vn="QODER_AGENT_SDK_VERSION",Yn="QODER_SDK_AUTH_PAYLOAD_FILE",Kr="sdk-ts",Ur=Fr(import.meta.url),Xn=ts(Ur),Ze=class extends Error{code="auth_access_token_env_var_not_configured";constructor(e){super(`The auth access token environment variable "${e}" is not set; set it or pass auth.accessToken directly.`),this.name="AuthAccessTokenEnvVarError"}},et=class extends Error{code="auth_service_account_env_var_not_configured";constructor(e){super(`The Service Account key environment variable "${e}" is not set; set it or pass auth.serviceAccountKey directly.`),this.name="AuthServiceAccountEnvVarError"}};function nt(n){return/\.(js|mjs|tsx?|jsx)$/.test(n)}function J(){if(process.env.QODERCLI_PATH)return process.env.QODERCLI_PATH;let n=Lr();if(n)return n;let e=Br();if(tt(e))return e;let t=$r();return t||v.cliCommands[0]}function Lr(){for(let n of ns())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=B(n,"dist","_bundled",t);if(tt(s))return s}return null}function Br(){for(let n of ns())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=[B(n,"node_modules",".bin",t),B(n,"..","..",".bin",t)];for(let o of s)if(tt(o))return o}return v.cliCommands[0]}function $r(){let n=process.env[v.cliHomeEnv]??jr();for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=B(n,v.configDirName,"local",t);if(tt(s))return s}return null}function ns(){let n=[B(Xn,".."),B(Xn,"..","..")];return[...new Set(n)]}function zr(){return{allow:[],ask:[],deny:[]}}function Zn(n){return n.replace(/[^a-zA-Z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"")}function Qr(n,e){if(e.startsWith("mcp__"))return e;let t=Zn(n),s=e==="*"?"*":Zn(e);if(!t||!s)throw new Error(`Invalid MCP tool policy name for server "${n}" and tool "${e}"`);return`mcp__${t}__${s}`}function es(n,e){if(e.length===0)return;let t=new Set(n);for(let s of e)t.has(s)||(n.push(s),t.add(s))}function Gr(n){let e=n??{},t=e.general&&typeof e.general=="object"&&!Array.isArray(e.general)?e.general:{},s=t.fileCheckpointing&&typeof t.fileCheckpointing=="object"&&!Array.isArray(t.fileCheckpointing)?t.fileCheckpointing:{};return{...e,general:{...t,fileCheckpointing:{...s,enabled:!0}}}}var H=class{options;diagnostics;logPrefix;authPayloadPath=null;generatedSettingsDir;constructor(e,t,s="[RuntimeLaunch]"){this.options=e,this.diagnostics=t,this.logPrefix=s}async prepare(){return this.options.auth&&(this.authPayloadPath=await this.createAuthPayloadFile(this.options.auth)),{args:this.buildArgs(),env:this.buildEnv(),authPayloadPath:this.authPayloadPath??void 0}}cleanupGeneratedSettings(){if(this.generatedSettingsDir)try{qr(this.generatedSettingsDir,{recursive:!0,force:!0})}catch{}finally{this.generatedSettingsDir=void 0}}async cleanupLaunchArtifacts(){this.cleanupGeneratedSettings(),await this.cleanupAuthPayload()}async cleanupAuthPayload(){if(!this.authPayloadPath)return;let e=ts(this.authPayloadPath);try{await Wn(e,{recursive:!0,force:!0}),this.diagnostics?.record(`${this.logPrefix} Auth payload cleaned up`)}catch{}this.authPayloadPath=null}buildEnv(){let e=this.options.env??{...process.env},t={};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);delete t[Jn],delete t[Vn],delete t[Yn];for(let s of this.serviceAccountCredentialEnvVars())Jr(t,s);if(t[Jn]=Kr,t[Vn]=Ye,this.authPayloadPath&&(t[Yn]=this.authPayloadPath),delete t.NODE_OPTIONS,this.options.vpcEndpoint!==void 0){let s=this.options.vpcEndpoint.trim();s?t[qt]=s:delete t[qt]}return t}serviceAccountCredentialEnvVars(){let e=this.options.auth;if(e?.type!=="serviceAccount")return[];let t=[Xe];return e.serviceAccountKey&&typeof e.serviceAccountKey!="string"&&t.push(e.serviceAccountKey.envVar),t}buildArgs(){let e=[],t=this.options;if(t.extraArgs&&Object.hasOwn(t.extraArgs,"proxy"))throw new Error("extraArgs.proxy is reserved; use the dedicated proxy option instead.");if(e.push("--print"),e.push("--output-format","stream-json"),e.push("--input-format","stream-json"),t.sessionMirror&&e.push("--session-mirror"),t.persistSession===!1&&e.push("--no-session-persistence"),t.model&&e.push("--model",t.model),t.proxy!==void 0&&e.push("--proxy",t.proxy),t.agent&&e.push("--agent",t.agent),t.debug&&e.push("--debug"),t.resume?e.push("--resume",t.resume):t.continue&&e.push("--continue"),t.resumeSessionAt&&e.push(`--resume-session-at=${t.resumeSessionAt}`),t.resumeDropsTurn!==void 0&&e.push(`--resume-drops-turn=${t.resumeDropsTurn}`),t.sessionId&&e.push("--session-id",t.sessionId),t.permissionMode&&(t.permissionMode==="yolo"?e.push("--yolo"):e.push("--permission-mode",t.permissionMode)),t.allowDangerouslySkipPermissions&&t.permissionMode!=="yolo"&&e.push("--dangerously-skip-permissions"),t.includePartialMessages&&e.push("--include-partial-messages"),t.allowedTools&&t.allowedTools.length>0)for(let r of t.allowedTools)e.push("--allowed-tools",r);if(t.disallowedTools&&t.disallowedTools.length>0)for(let r of t.disallowedTools)e.push("--disallowed-tools",r);let s=t.tools??Un(t.env??process.env);if(Array.isArray(s)?e.push("--tools",s.join(",")):e.push("--tools","default"),t.canUseTool){if(t.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");e.push("--permission-prompt-tool","stdio")}else t.permissionPromptToolName&&e.push("--permission-prompt-tool",t.permissionPromptToolName);if(t.extensions&&t.extensions.length>0)for(let r of t.extensions)e.push("--extensions",r);if(t.mcpServers&&Object.keys(t.mcpServers).length>0&&e.push("--mcp-config",JSON.stringify({mcpServers:this.buildCliMcpServers()})),t.allowedMcpServerNames&&t.allowedMcpServerNames.length>0)for(let r of t.allowedMcpServerNames)e.push("--allowed-mcp-server-names",r);t.strictMcpConfig&&e.push("--strict-mcp-config");let o=this.buildSettingsArg();if(o!==void 0&&e.push("--settings",o),t.settingSources!==void 0&&e.push("--setting-sources",t.settingSources.join(",")),e.push("--disable-builtin-skills"),t.additionalDirectories&&t.additionalDirectories.length>0)for(let r of t.additionalDirectories)e.push("--add-dir",r);if(t.maxTurns!==void 0&&e.push("--max-turns",String(t.maxTurns)),t.forkSession&&e.push("--fork-session"),t.plugins&&t.plugins.length>0)for(let r of t.plugins)r.type==="local"&&e.push("--plugin-dir",r.path);if(t.extraArgs)for(let[r,i]of Object.entries(t.extraArgs))e.push(`--${r}`),i!==null&&e.push(i);return e}buildSettingsArg(){let e=this.options.settings,t=this.collectMcpPolicyPermissionRules();if(typeof e=="string"){if(e.length===0)return;if(!this.hasMcpPolicyRules(t)&&!this.options.enableFileCheckpointing&&this.options.securityScan===void 0&&(!this.options.additionalDirectories||this.options.additionalDirectories.length===0))return e;let r=this.readSettingsFile(e);this.applySettingsCompatibility(r),this.applyAdditionalDirectories(r),this.applyMcpPolicyRules(r,t),this.applySecurityScanSetting(r);let i=this.applyFileCheckpointingSetting(r);return Object.keys(i).length>0?this.writeGeneratedSettingsFile(i):void 0}let s={...e??{}};this.applySettingsCompatibility(s),this.applyAdditionalDirectories(s),this.applyMcpPolicyRules(s,t),this.applySecurityScanSetting(s);let o=this.applyFileCheckpointingSetting(s);return Object.keys(o).length>0?JSON.stringify(o):void 0}applyFileCheckpointingSetting(e){return this.options.enableFileCheckpointing?Gr(e):e}applySecurityScanSetting(e){let t=this.options.securityScan;t!==void 0&&(e.securityScan=Qn(t))}applySettingsCompatibility(e){let t=e.permissions;if(t?.defaultMode!==void 0){let s=e.general!==null&&typeof e.general=="object"?e.general:{},o=this.toQoderDefaultPermissionMode(t.defaultMode);o!==void 0&&s.defaultPermissionMode===void 0&&(s.defaultPermissionMode=o),e.general=s}t?.disableBypassPermissionsMode==="disable"&&(e.security={...e.security??{},disableYoloMode:!0})}toQoderDefaultPermissionMode(e){switch(e){case"acceptEdits":return"accept_edits";case"bypassPermissions":case"yolo":return"bypass_permissions";case"dontAsk":return"dont_ask";case"default":case"accept_edits":case"bypass_permissions":case"dont_ask":case"plan":case"auto":return e;default:return}}applyAdditionalDirectories(e){let t=this.options.additionalDirectories;if(!t||t.length===0)return;let s=e.permissions!==null&&typeof e.permissions=="object"?e.permissions:{},o=Array.isArray(s.additionalDirectories)?[...s.additionalDirectories]:[];es(o,t),s.additionalDirectories=o,e.permissions=s}buildCliMcpServers(){let e=this.options.mcpServers;if(!e||Object.keys(e).length===0)return e;let t={};for(let[s,o]of Object.entries(e)){let r=this.options.mcpToolPolicies?.[s]??o.tools??[];t[s]=xt(s,o,r)}return t}collectMcpPolicyPermissionRules(){let e=zr(),t=new Map;for(let[s,o]of Object.entries(this.options.mcpToolPolicies??{}))o.length>0&&t.set(s,o);for(let[s,o]of Object.entries(this.options.mcpServers??{})){let r=o.tools;Array.isArray(r)&&r.length>0&&t.set(s,[...t.get(s)??[],...r])}for(let[s,o]of t)for(let r of o){let i=Qr(s,r.name);switch(r.permission_policy){case"always_allow":e.allow.push(i);break;case"always_ask":e.ask.push(i);break;case"always_deny":e.deny.push(i);break;case void 0:break}}return e}hasMcpPolicyRules(e){return e.allow.length>0||e.ask.length>0||e.deny.length>0}applyMcpPolicyRules(e,t){if(!this.hasMcpPolicyRules(t))return;let s=e.permissions!==null&&typeof e.permissions=="object"?e.permissions:{};e.permissions=s;for(let o of["allow","ask","deny"]){let r=Array.isArray(s[o])?[...s[o]]:[];es(r,t[o]),s[o]=r}}readSettingsFile(e){let t=xr(e,"utf8").trim();if(!t)return{};let s=JSON.parse(t);if(s===null||typeof s!="object"||Array.isArray(s))throw new Error("Settings file must contain a JSON object.");return s}writeGeneratedSettingsFile(e){this.generatedSettingsDir=Or(B(Hn(),"qoder-agent-sdk-settings-"));let t=B(this.generatedSettingsDir,"settings.json");return Nr(t,JSON.stringify(e),"utf8"),t}async createAuthPayloadFile(e){let t=Nt(e,this.options.env),s=await Ar(B(Hn(),"qoder-sdk-auth-"));try{await Gn(s,448);let o=B(s,"payload.json");return await Dr(o,JSON.stringify(t),{mode:384}),await Gn(o,384),this.diagnostics?.record(`${this.logPrefix} Auth payload created: type=${t.type}, path=${o}`),o}catch(o){throw await Wn(s,{recursive:!0,force:!0}).catch(()=>{}),o}}};function Nt(n,e){switch(n.type){case"accessToken":return{type:"accessToken",accessToken:Hr(n,e)};case"qodercli":return{type:"qodercli"};case"jobToken":return{type:"jobToken",jobTokenProvider:"host"};case"serviceAccount":{let t=n.serviceAccountKey!==void 0,s=typeof n.fetchServiceAccountToken=="function";if(t===s)throw new TypeError("Service Account auth requires exactly one credential source: serviceAccountKey or fetchServiceAccountToken");return s?{type:"serviceAccount",serviceAccountTokenProvider:"host"}:{type:"serviceAccount",serviceAccountKey:Wr(n,e)}}}}function Wr(n,e){if(!n.serviceAccountKey)throw new Error("Service Account key authentication requires serviceAccountKey");if(typeof n.serviceAccountKey=="string")return n.serviceAccountKey;let t=n.serviceAccountKey.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new et(t);return s}function Hr(n,e){if(typeof n.accessToken=="string")return n.accessToken;let t=n.accessToken.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new Ze(t);return s}function Jr(n,e){if(process.platform!=="win32"){delete n[e];return}let t=e.toLowerCase();for(let s of Object.keys(n))s.toLowerCase()===t&&delete n[s]}function st(n,e){let t={...n};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}var Vr=new Set(["--mcp-config","--proxy","--settings"]);function ot(n){let e=[];for(let t=0;t<n.length;t+=1){let s=n[t];e.push(s),Vr.has(s)&&t+1<n.length&&(e.push("[redacted]"),t+=1)}return e.join(" ")}import{Transform as Yr}from"node:stream";var $=16*1024*1024,Oe=class extends Error{constructor(t,s){super(`${t} exceeded the ${s}-byte frame limit`);this.direction=t;this.limit=s;this.name="FrameTooLargeError"}code="DAEMON_FRAME_TOO_LARGE"},V=class extends Yr{constructor(t=$,s="JSONL input"){super();this.maxLineBytes=t;this.direction=s;if(!Number.isSafeInteger(t)||t<=0)throw new Error("maxLineBytes must be a positive safe integer")}bytesSinceNewline=0;_transform(t,s,o){let r=Buffer.isBuffer(t)?t:Buffer.from(t,s),i=0;for(let a=0;a<r.length;a+=1)if(r[a]===10){if(this.bytesSinceNewline+=a-i,this.bytesSinceNewline>this.maxLineBytes){o(new Oe(this.direction,this.maxLineBytes));return}this.bytesSinceNewline=0,i=a+1}if(this.bytesSinceNewline+=r.length-i,this.bytesSinceNewline>this.maxLineBytes){o(new Oe(this.direction,this.maxLineBytes));return}o(void 0,r)}};function Se(n,e=$,t="JSONL output"){let s=n.endsWith(`
2
- `)?n.slice(0,-1):n;if(Buffer.byteLength(s,"utf8")>e)throw new Oe(t,e)}var ss=8192,D=class extends Error{code="QODER_CLI_PROCESS_ERROR";exitCode;signal;stderr;constructor(e,t){super(e,t?.cause?{cause:t.cause}:void 0),this.name="QoderCliProcessError",this.exitCode=t?.exitCode,this.signal=t?.signal,this.stderr=t?.stderr}},we=class n{static default=new n;process=null;customHandle=null;options;ready=!1;closed=!1;shutdownStarted=!1;initializePromise=null;authExpiredFired=!1;pendingInput=[];diagnostics;processExitError;processStopped=!1;closeTimer;killTimer;stderrTail="";launchOptionsBuilder;constructor(e={}){this.options={...e},this.diagnostics=e.diagnostics,this.launchOptionsBuilder=new H(this.options,this.diagnostics,"[ProcessTransport]")}create(e){return new n(st(this.options,e))}async initialize(){if(!this.ready)return this.initializePromise||(this.initializePromise=this._doInitialize()),this.initializePromise}async _doInitialize(){try{let e=await this.launchOptionsBuilder.prepare(),t=e.args;if(this.closed){await this.cleanupLaunchArtifacts();return}let s=e.env,{command:o,commandArgs:r}=this.resolveExecutable(t);if(this.diagnostics?.record(`[ProcessTransport] Spawning: ${o} ${ot(r)}`),this.diagnostics?.record(`[ProcessTransport] CWD: ${this.options.cwd??""}`),this.options.spawnQoderCLIProcess){let i=this.options.spawnQoderCLIProcess({command:o,args:r,cwd:this.options.cwd,env:s,signal:this.options.abortController?.signal??new AbortController().signal});this.customHandle=i,this.observeProcess(i)}else this.process=Xr(o,r,{cwd:this.options.cwd,env:s,stdio:["pipe","pipe",this.options.stderr??"pipe"]}),this.observeProcess(this.process),this.process.stderr?.on("data",i=>{let a=i.toString();this.appendStderr(a),this.options.stderrHandler?.(a);let u=a.trim();u&&this.diagnostics?.record(`[ProcessTransport] STDERR: ${u}`)});this.ready=!this.closed&&!this.shutdownStarted&&!this.processStopped,this.flushPendingInput()}catch(e){throw this.process||this.customHandle?this.shutdownProcess():await this.cleanupLaunchArtifacts(),e}}write(e){if(this.processExitError)throw this.processExitError;if(this.closed)throw new Error("Transport is not ready or has been closed");let t=e.endsWith(`
1
+ var Er=Object.defineProperty;var Pr=(n,e)=>{for(var t in e)Er(n,t,{get:e[t],enumerable:!0})};import{spawn as ui}from"child_process";import{createInterface as ci}from"readline";var Tr=["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","SessionStart","SessionEnd","Stop","SubagentStart","SubagentStop","PreCompact","PostCompact","CwdChanged","InstructionsLoaded","FileChanged","PermissionRequest","PermissionDenied","WorktreeCreate","WorktreeRemove"],Mr=["clear","resume","logout","prompt_input_exit","other","bypass_permissions_disabled"],Ze=2e3,Ln=5e3;var et="1.0.44";var we=41,Kn=["Agent","AskUserQuestion","Bash","Edit","Glob","Grep","ImageGen","ImageSearch","NotebookEdit","Read","Skill","TaskCreate","TaskGet","TaskUpdate","TaskList","UpdateGoal","WebFetch","WebSearch","Write"],Un=["TaskCreate","TaskGet","TaskUpdate","TaskList"],Ar="QODER_FEATURE_TASKS";function Bn(n){let e=n[Ar];if(e!=="0"&&e!=="false")return[...Kn];let t=new Set(Un);return Kn.flatMap(s=>s===Un[0]?["TodoWrite"]:t.has(s)?[]:[s])}import{chmod as Wn,mkdtemp as Lr,rm as Jn,writeFile as Br}from"fs/promises";import{existsSync as ot,mkdtempSync as $r,readFileSync as zr,rmSync as Qr,writeFileSync as Gr}from"fs";import{homedir as Hr,tmpdir as Vn}from"os";import{dirname as ss,join as z}from"path";import{fileURLToPath as Wr}from"url";var Ir=/^[A-Za-z0-9_-]{1,64}$/,Dr=new Set(["mcp_list","mcp_get","mcp_call"]);function xt(n,e){if(e.exposedName!==void 0){if(e.alwaysLoad!==!0)throw new Error(`MCP tool "${n}/${e.name}" requires alwaysLoad: true when exposedName is set.`);if(!Ir.test(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" has invalid exposedName "${e.exposedName}".`);if(Dr.has(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" cannot use reserved exposedName "${e.exposedName}".`)}}function qt(n,e){let t={};for(let s of e)xt(n,s),(s.exposedName!==void 0||s.alwaysLoad===!0)&&(t[s.name]={...s.exposedName!==void 0?{exposedName:s.exposedName}:{},...s.alwaysLoad===!0?{alwaysLoad:!0}:{}});return Object.keys(t).length>0?t:void 0}function Nt(n,e,t=e.tools??[]){let{tools:s,...o}=e,r=qt(n,t);return{...o,...r?{toolOverrides:r}:{}}}function $n(n){let e={};for(let[t,s]of Object.entries(n)){if(s.type==="sdk")throw new Error(`MCP server "${t}" uses an in-process SDK transport and cannot be changed with setMcpServers().`);let o=s.tools??[],r=o.find(i=>i.permission_policy!==void 0);if(r)throw new Error(`MCP tool "${t}/${r.name}" cannot set permission_policy through setMcpServers(); configure it when creating the query.`);e[t]=Nt(t,s,o)}return e}var Or="global",zn=Or==="cn",xr=zn?"QODERCN_":"QODER_",jt=`${xr}VPC_ENDPOINT`,v=zn?{productName:"QoderCN",packageName:"@qodercn-ai/qodercn-agent-sdk",cliCommands:["qoderclicn","qodercn"],configDirName:".qoder-cn",projectConfigDirName:".qoder",configDirEnv:"QODERCN_CONFIG_DIR",configDirNameEnv:"QODERCN_CONFIG_DIR_NAME",cliHomeEnv:"QODERCN_CLI_HOME",accessTokenEnv:"QODERCN_PERSONAL_ACCESS_TOKEN",serviceAccountEnv:"QODERCN_SERVICE_ACCOUNT_KEY"}:{productName:"Qoder",packageName:"@qoder-ai/qoder-agent-sdk",cliCommands:["qodercli","qoder"],configDirName:".qoder",projectConfigDirName:".qoder",configDirEnv:"QODER_CONFIG_DIR",configDirNameEnv:"QODER_CONFIG_DIR_NAME",cliHomeEnv:"QODER_CLI_HOME",accessTokenEnv:"QODER_PERSONAL_ACCESS_TOKEN",serviceAccountEnv:"QODER_SERVICE_ACCOUNT_KEY"};var Qn=v.accessTokenEnv,tt=v.serviceAccountEnv;function qr(n){return{type:"accessToken",accessToken:n}}function Nr(n=Qn){return{type:"accessToken",accessToken:{envVar:n}}}function jr(){return{type:"qodercli"}}function Fr(n){let e=n.serviceAccountKey!==void 0,t=typeof n.fetchServiceAccountToken=="function";if(e===t)throw new TypeError("serviceAccount() requires exactly one credential source: serviceAccountKey or fetchServiceAccountToken");return{type:"serviceAccount",...n}}function Kr(n=tt){return{type:"serviceAccount",serviceAccountKey:{envVar:n}}}function Ur(n){return{type:"jobToken",fetchJobToken:n}}var Gn=["l1StaticCheck","l2LightweightScan","l3DeepScan"];function Hn(n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError("securityScan must be an object.");let e=new Set(Gn),t=Object.keys(n).filter(s=>!e.has(s));if(t.length>0)throw new TypeError(`securityScan contains unknown option${t.length===1?"":"s"}: ${t.join(", ")}.`);for(let s of Gn){let o=n[s];if(o!==void 0&&typeof o!="boolean")throw new TypeError(`securityScan.${s} must be a boolean.`)}return{l1StaticCheck:n.l1StaticCheck??!1,l2LightweightScan:n.l2LightweightScan??!1,l3DeepScan:n.l3DeepScan??!1}}var Yn="QODER_AGENT_SDK_ENTRYPOINT",Xn="QODER_AGENT_SDK_VERSION",Zn="QODER_SDK_AUTH_PAYLOAD_FILE",Jr="sdk-ts",Vr=Wr(import.meta.url),es=ss(Vr),nt=class extends Error{code="auth_access_token_env_var_not_configured";constructor(e){super(`The auth access token environment variable "${e}" is not set; set it or pass auth.accessToken directly.`),this.name="AuthAccessTokenEnvVarError"}},st=class extends Error{code="auth_service_account_env_var_not_configured";constructor(e){super(`The Service Account key environment variable "${e}" is not set; set it or pass auth.serviceAccountKey directly.`),this.name="AuthServiceAccountEnvVarError"}};function X(n){return/\.(js|mjs|tsx?|jsx)$/.test(n)}function Z(){if(process.env.QODERCLI_PATH)return process.env.QODERCLI_PATH;let n=Yr();if(n)return n;let e=Xr();if(ot(e))return e;let t=Zr();return t||v.cliCommands[0]}function Yr(){for(let n of os())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=z(n,"dist","_bundled",t);if(ot(s))return s}return null}function Xr(){for(let n of os())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=[z(n,"node_modules",".bin",t),z(n,"..","..",".bin",t)];for(let o of s)if(ot(o))return o}return v.cliCommands[0]}function Zr(){let n=process.env[v.cliHomeEnv]??Hr();for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=z(n,v.configDirName,"local",t);if(ot(s))return s}return null}function os(){let n=[z(es,".."),z(es,"..","..")];return[...new Set(n)]}function ei(){return{allow:[],ask:[],deny:[]}}function ts(n){return n.replace(/[^a-zA-Z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"")}function ti(n,e){if(e.startsWith("mcp__"))return e;let t=ts(n),s=e==="*"?"*":ts(e);if(!t||!s)throw new Error(`Invalid MCP tool policy name for server "${n}" and tool "${e}"`);return`mcp__${t}__${s}`}function ns(n,e){if(e.length===0)return;let t=new Set(n);for(let s of e)t.has(s)||(n.push(s),t.add(s))}function ni(n){let e=n??{},t=e.general&&typeof e.general=="object"&&!Array.isArray(e.general)?e.general:{},s=t.fileCheckpointing&&typeof t.fileCheckpointing=="object"&&!Array.isArray(t.fileCheckpointing)?t.fileCheckpointing:{};return{...e,general:{...t,fileCheckpointing:{...s,enabled:!0}}}}var j=class{options;diagnostics;logPrefix;authPayloadPath=null;generatedSettingsDir;constructor(e,t,s="[RuntimeLaunch]"){this.options=e,this.diagnostics=t,this.logPrefix=s}async prepare(){return this.options.auth&&(this.authPayloadPath=await this.createAuthPayloadFile(this.options.auth)),{args:this.buildArgs(),env:this.buildEnv(),authPayloadPath:this.authPayloadPath??void 0}}cleanupGeneratedSettings(){if(this.generatedSettingsDir)try{Qr(this.generatedSettingsDir,{recursive:!0,force:!0})}catch{}finally{this.generatedSettingsDir=void 0}}async cleanupLaunchArtifacts(){this.cleanupGeneratedSettings(),await this.cleanupAuthPayload()}async cleanupAuthPayload(){if(!this.authPayloadPath)return;let e=ss(this.authPayloadPath);try{await Jn(e,{recursive:!0,force:!0}),this.diagnostics?.record(`${this.logPrefix} Auth payload cleaned up`)}catch{}this.authPayloadPath=null}buildEnv(){let e=this.options.env??{...process.env},t={};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);delete t[Yn],delete t[Xn],delete t[Zn];for(let s of this.serviceAccountCredentialEnvVars())ri(t,s);if(t[Yn]=Jr,t[Xn]=et,this.authPayloadPath&&(t[Zn]=this.authPayloadPath),delete t.NODE_OPTIONS,this.options.vpcEndpoint!==void 0){let s=this.options.vpcEndpoint.trim();s?t[jt]=s:delete t[jt]}return t}serviceAccountCredentialEnvVars(){let e=this.options.auth;if(e?.type!=="serviceAccount")return[];let t=[tt];return e.serviceAccountKey&&typeof e.serviceAccountKey!="string"&&t.push(e.serviceAccountKey.envVar),t}buildArgs(){let e=[],t=this.options;if(t.extraArgs&&Object.hasOwn(t.extraArgs,"proxy"))throw new Error("extraArgs.proxy is reserved; use the dedicated proxy option instead.");if(e.push("--print"),e.push("--output-format","stream-json"),e.push("--input-format","stream-json"),t.sessionMirror&&e.push("--session-mirror"),t.persistSession===!1&&e.push("--no-session-persistence"),t.model&&e.push("--model",t.model),t.proxy!==void 0&&e.push("--proxy",t.proxy),t.agent&&e.push("--agent",t.agent),t.debug&&e.push("--debug"),t.resume?e.push("--resume",t.resume):t.continue&&e.push("--continue"),t.resumeSessionAt&&e.push(`--resume-session-at=${t.resumeSessionAt}`),t.resumeDropsTurn!==void 0&&e.push(`--resume-drops-turn=${t.resumeDropsTurn}`),t.sessionId&&e.push("--session-id",t.sessionId),t.permissionMode&&(t.permissionMode==="yolo"?e.push("--yolo"):e.push("--permission-mode",t.permissionMode)),t.allowDangerouslySkipPermissions&&t.permissionMode!=="yolo"&&e.push("--dangerously-skip-permissions"),t.includePartialMessages&&e.push("--include-partial-messages"),t.allowedTools&&t.allowedTools.length>0)for(let r of t.allowedTools)e.push("--allowed-tools",r);if(t.disallowedTools&&t.disallowedTools.length>0)for(let r of t.disallowedTools)e.push("--disallowed-tools",r);let s=t.tools??Bn(t.env??process.env);if(Array.isArray(s)?e.push("--tools",s.join(",")):e.push("--tools","default"),t.canUseTool){if(t.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");e.push("--permission-prompt-tool","stdio")}else t.permissionPromptToolName&&e.push("--permission-prompt-tool",t.permissionPromptToolName);if(t.extensions&&t.extensions.length>0)for(let r of t.extensions)e.push("--extensions",r);if(t.mcpServers&&Object.keys(t.mcpServers).length>0&&e.push("--mcp-config",JSON.stringify({mcpServers:this.buildCliMcpServers()})),t.allowedMcpServerNames&&t.allowedMcpServerNames.length>0)for(let r of t.allowedMcpServerNames)e.push("--allowed-mcp-server-names",r);t.strictMcpConfig&&e.push("--strict-mcp-config");let o=this.buildSettingsArg();if(o!==void 0&&e.push("--settings",o),t.settingSources!==void 0&&e.push("--setting-sources",t.settingSources.join(",")),e.push("--disable-builtin-skills"),t.additionalDirectories&&t.additionalDirectories.length>0)for(let r of t.additionalDirectories)e.push("--add-dir",r);if(t.maxTurns!==void 0&&e.push("--max-turns",String(t.maxTurns)),t.forkSession&&e.push("--fork-session"),t.plugins&&t.plugins.length>0)for(let r of t.plugins)r.type==="local"&&e.push("--plugin-dir",r.path);if(t.extraArgs)for(let[r,i]of Object.entries(t.extraArgs))e.push(`--${r}`),i!==null&&e.push(i);return e}buildSettingsArg(){let e=this.options.settings,t=this.collectMcpPolicyPermissionRules();if(typeof e=="string"){if(e.length===0)return;if(!this.hasMcpPolicyRules(t)&&!this.options.enableFileCheckpointing&&this.options.securityScan===void 0&&(!this.options.additionalDirectories||this.options.additionalDirectories.length===0))return e;let r=this.readSettingsFile(e);this.applySettingsCompatibility(r),this.applyAdditionalDirectories(r),this.applyMcpPolicyRules(r,t),this.applySecurityScanSetting(r);let i=this.applyFileCheckpointingSetting(r);return Object.keys(i).length>0?this.writeGeneratedSettingsFile(i):void 0}let s={...e??{}};this.applySettingsCompatibility(s),this.applyAdditionalDirectories(s),this.applyMcpPolicyRules(s,t),this.applySecurityScanSetting(s);let o=this.applyFileCheckpointingSetting(s);return Object.keys(o).length>0?JSON.stringify(o):void 0}applyFileCheckpointingSetting(e){return this.options.enableFileCheckpointing?ni(e):e}applySecurityScanSetting(e){let t=this.options.securityScan;t!==void 0&&(e.securityScan=Hn(t))}applySettingsCompatibility(e){let t=e.permissions;if(t?.defaultMode!==void 0){let s=e.general!==null&&typeof e.general=="object"?e.general:{},o=this.toQoderDefaultPermissionMode(t.defaultMode);o!==void 0&&s.defaultPermissionMode===void 0&&(s.defaultPermissionMode=o),e.general=s}t?.disableBypassPermissionsMode==="disable"&&(e.security={...e.security??{},disableYoloMode:!0})}toQoderDefaultPermissionMode(e){switch(e){case"acceptEdits":return"accept_edits";case"bypassPermissions":case"yolo":return"bypass_permissions";case"dontAsk":return"dont_ask";case"default":case"accept_edits":case"bypass_permissions":case"dont_ask":case"plan":case"auto":return e;default:return}}applyAdditionalDirectories(e){let t=this.options.additionalDirectories;if(!t||t.length===0)return;let s=e.permissions!==null&&typeof e.permissions=="object"?e.permissions:{},o=Array.isArray(s.additionalDirectories)?[...s.additionalDirectories]:[];ns(o,t),s.additionalDirectories=o,e.permissions=s}buildCliMcpServers(){let e=this.options.mcpServers;if(!e||Object.keys(e).length===0)return e;let t={};for(let[s,o]of Object.entries(e)){let r=this.options.mcpToolPolicies?.[s]??o.tools??[];t[s]=Nt(s,o,r)}return t}collectMcpPolicyPermissionRules(){let e=ei(),t=new Map;for(let[s,o]of Object.entries(this.options.mcpToolPolicies??{}))o.length>0&&t.set(s,o);for(let[s,o]of Object.entries(this.options.mcpServers??{})){let r=o.tools;Array.isArray(r)&&r.length>0&&t.set(s,[...t.get(s)??[],...r])}for(let[s,o]of t)for(let r of o){let i=ti(s,r.name);switch(r.permission_policy){case"always_allow":e.allow.push(i);break;case"always_ask":e.ask.push(i);break;case"always_deny":e.deny.push(i);break;case void 0:break}}return e}hasMcpPolicyRules(e){return e.allow.length>0||e.ask.length>0||e.deny.length>0}applyMcpPolicyRules(e,t){if(!this.hasMcpPolicyRules(t))return;let s=e.permissions!==null&&typeof e.permissions=="object"?e.permissions:{};e.permissions=s;for(let o of["allow","ask","deny"]){let r=Array.isArray(s[o])?[...s[o]]:[];ns(r,t[o]),s[o]=r}}readSettingsFile(e){let t=zr(e,"utf8").trim();if(!t)return{};let s=JSON.parse(t);if(s===null||typeof s!="object"||Array.isArray(s))throw new Error("Settings file must contain a JSON object.");return s}writeGeneratedSettingsFile(e){this.generatedSettingsDir=$r(z(Vn(),"qoder-agent-sdk-settings-"));let t=z(this.generatedSettingsDir,"settings.json");return Gr(t,JSON.stringify(e),"utf8"),t}async createAuthPayloadFile(e){let t=Ft(e,this.options.env),s=await Lr(z(Vn(),"qoder-sdk-auth-"));try{await Wn(s,448);let o=z(s,"payload.json");return await Br(o,JSON.stringify(t),{mode:384}),await Wn(o,384),this.diagnostics?.record(`${this.logPrefix} Auth payload created: type=${t.type}, path=${o}`),o}catch(o){throw await Jn(s,{recursive:!0,force:!0}).catch(()=>{}),o}}};function Ft(n,e){switch(n.type){case"accessToken":return{type:"accessToken",accessToken:oi(n,e)};case"qodercli":return{type:"qodercli"};case"jobToken":return{type:"jobToken",jobTokenProvider:"host"};case"serviceAccount":{let t=n.serviceAccountKey!==void 0,s=typeof n.fetchServiceAccountToken=="function";if(t===s)throw new TypeError("Service Account auth requires exactly one credential source: serviceAccountKey or fetchServiceAccountToken");return s?{type:"serviceAccount",serviceAccountTokenProvider:"host"}:{type:"serviceAccount",serviceAccountKey:si(n,e)}}}}function si(n,e){if(!n.serviceAccountKey)throw new Error("Service Account key authentication requires serviceAccountKey");if(typeof n.serviceAccountKey=="string")return n.serviceAccountKey;let t=n.serviceAccountKey.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new st(t);return s}function oi(n,e){if(typeof n.accessToken=="string")return n.accessToken;let t=n.accessToken.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new nt(t);return s}function ri(n,e){if(process.platform!=="win32"){delete n[e];return}let t=e.toLowerCase();for(let s of Object.keys(n))s.toLowerCase()===t&&delete n[s]}function rt(n,e){let t={...n};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}var ii=new Set(["--mcp-config","--proxy","--settings"]);function it(n){let e=[];for(let t=0;t<n.length;t+=1){let s=n[t];e.push(s),ii.has(s)&&t+1<n.length&&(e.push("[redacted]"),t+=1)}return e.join(" ")}import{Transform as ai}from"node:stream";var Q=16*1024*1024,Ne=class extends Error{constructor(t,s){super(`${t} exceeded the ${s}-byte frame limit`);this.direction=t;this.limit=s;this.name="FrameTooLargeError"}code="DAEMON_FRAME_TOO_LARGE"},ee=class extends ai{constructor(t=Q,s="JSONL input"){super();this.maxLineBytes=t;this.direction=s;if(!Number.isSafeInteger(t)||t<=0)throw new Error("maxLineBytes must be a positive safe integer")}bytesSinceNewline=0;_transform(t,s,o){let r=Buffer.isBuffer(t)?t:Buffer.from(t,s),i=0;for(let a=0;a<r.length;a+=1)if(r[a]===10){if(this.bytesSinceNewline+=a-i,this.bytesSinceNewline>this.maxLineBytes){o(new Ne(this.direction,this.maxLineBytes));return}this.bytesSinceNewline=0,i=a+1}if(this.bytesSinceNewline+=r.length-i,this.bytesSinceNewline>this.maxLineBytes){o(new Ne(this.direction,this.maxLineBytes));return}o(void 0,r)}};function ve(n,e=Q,t="JSONL output"){let s=n.endsWith(`
2
+ `)?n.slice(0,-1):n;if(Buffer.byteLength(s,"utf8")>e)throw new Ne(t,e)}var rs=8192,D=class extends Error{code="QODER_CLI_PROCESS_ERROR";exitCode;signal;stderr;constructor(e,t){super(e,t?.cause?{cause:t.cause}:void 0),this.name="QoderCliProcessError",this.exitCode=t?.exitCode,this.signal=t?.signal,this.stderr=t?.stderr}},ke=class n{static default=new n;process=null;customHandle=null;options;ready=!1;closed=!1;shutdownStarted=!1;initializePromise=null;authExpiredFired=!1;pendingInput=[];diagnostics;processExitError;processStopped=!1;closeTimer;killTimer;stderrTail="";launchOptionsBuilder;constructor(e={}){this.options={...e},this.diagnostics=e.diagnostics,this.launchOptionsBuilder=new j(this.options,this.diagnostics,"[ProcessTransport]")}create(e){return new n(rt(this.options,e))}async initialize(){if(!this.ready)return this.initializePromise||(this.initializePromise=this._doInitialize()),this.initializePromise}async _doInitialize(){try{let e=await this.launchOptionsBuilder.prepare(),t=e.args;if(this.closed){await this.cleanupLaunchArtifacts();return}let s=e.env,{command:o,commandArgs:r}=this.resolveExecutable(t);if(this.diagnostics?.record(`[ProcessTransport] Spawning: ${o} ${it(r)}`),this.diagnostics?.record(`[ProcessTransport] CWD: ${this.options.cwd??""}`),this.options.spawnQoderCLIProcess){let i=this.options.spawnQoderCLIProcess({command:o,args:r,cwd:this.options.cwd,env:s,signal:this.options.abortController?.signal??new AbortController().signal});this.customHandle=i,this.observeProcess(i)}else this.process=ui(o,r,{cwd:this.options.cwd,env:s,stdio:["pipe","pipe",this.options.stderr??"pipe"]}),this.observeProcess(this.process),this.process.stderr?.on("data",i=>{let a=i.toString();this.appendStderr(a),this.options.stderrHandler?.(a);let u=a.trim();u&&this.diagnostics?.record(`[ProcessTransport] STDERR: ${u}`)});this.ready=!this.closed&&!this.shutdownStarted&&!this.processStopped,this.flushPendingInput()}catch(e){throw this.process||this.customHandle?this.shutdownProcess():await this.cleanupLaunchArtifacts(),e}}write(e){if(this.processExitError)throw this.processExitError;if(this.closed)throw new Error("Transport is not ready or has been closed");let t=e.endsWith(`
3
3
  `)?e:e+`
4
- `;if(Se(t,$,"SDK process input"),!this.ready){if(this.initializePromise){this.pendingInput.push({type:"write",line:t});return}throw new Error("Transport is not ready or has been closed")}this.writeReadyLine(t)}writeReadyLine(e){if(this.customHandle){let t=this.customHandle.stdin;if(t.destroyed||t.writableEnded)return;typeof t.write=="function"&&t.write(e)}else this.process?.stdin&&!this.process.stdin.destroyed&&!this.process.stdin.writableEnded&&this.process.stdin.write(e)}flushPendingInput(){if(this.pendingInput.length===0)return;let e=this.pendingInput;this.pendingInput=[];for(let t of e)t.type==="write"?this.writeReadyLine(t.line):this.endReadyInput()}isReady(){return this.ready&&!this.closed}endInput(){if(!this.ready&&!this.process&&!this.customHandle){this.initializePromise&&this.pendingInput.push({type:"end"});return}this.endReadyInput()}endReadyInput(){if(this.customHandle){let e=this.customHandle.stdin;if(e.destroyed||e.writableEnded)return;typeof e.end=="function"&&e.end()}else this.process?.stdin&&!this.process.stdin.destroyed&&!this.process.stdin.writableEnded&&this.process.stdin.end()}async*readMessages(){this.initializePromise&&await this.initializePromise;let e=this.getStdout();if(!e)return;let t=new V($,"SDK process output");e.pipe(t);let s=Zr({input:t,crlfDelay:1/0});try{for await(let o of s){if(this.closed)break;let r=o.trim();if(r)try{yield JSON.parse(r)}catch{}}this.closed||await this.waitForProcessExit()}finally{s.close(),e.unpipe(t),t.destroy()}}close(){this.closed||(this.closed=!0,this.shutdownProcess())}shutdownProcess(){if(this.shutdownStarted)return;this.shutdownStarted=!0,this.ready=!1,this.pendingInput=[];let e=this.process??this.customHandle;if(!e)return;if(this.hasProcessStopped()){this.finishProcess();return}if(this.endInput(),this.hasProcessStopped()){this.finishProcess();return}let t=o=>{try{e.kill(o)}catch(r){this.diagnostics?.record(`[ProcessTransport] Failed to send ${o}:`,r)}},s=this.options.closeGraceMs??Ve;this.closeTimer=setTimeout(()=>{this.closeTimer=void 0,!this.hasProcessStopped()&&(t("SIGTERM"),!this.hasProcessStopped()&&(this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.hasProcessStopped()||t("SIGKILL")},Kn),this.killTimer.unref()))},s),this.closeTimer.unref()}hasProcessStopped(){let e=this.process??this.customHandle;return this.processStopped||e!==null&&e.exitCode!==null||this.process!==null&&this.process.signalCode!==null}finishProcess(){this.processStopped||(this.processStopped=!0,this.ready=!1,clearTimeout(this.closeTimer),clearTimeout(this.killTimer),this.closeTimer=void 0,this.killTimer=void 0,this.cleanupLaunchArtifacts().catch(()=>{}))}observeProcess(e){e.on("error",t=>{this.ready=!1,this.closed||(this.processExitError??=this.createSpawnError(t)),this.diagnostics?.record("[ProcessTransport] Process error:",t),this.hasProcessStopped()?this.finishProcess():this.shutdownProcess()}),e.once("exit",(t,s)=>{if(this.finishProcess(),this.diagnostics?.record(`[ProcessTransport] Process exited: code=${t}, signal=${s}`),!this.closed&&!this.processExitError){t===ye&&this.fireAuthExpired();let o=this.createProcessExitError(t,s);o&&(this.processExitError=o)}})}get pid(){return this.process?.pid??void 0}getStdout(){return this.process?.stdout?this.process.stdout:this.customHandle?.stdout?this.customHandle.stdout:null}appendStderr(e){this.stderrTail+=e,this.stderrTail.length>ss&&(this.stderrTail=this.stderrTail.slice(-ss))}createSpawnError(e){let t=this.options.pathToQoderCLIExecutable??"qodercli",o=e.code==="ENOENT"?`Qoder CLI executable not found: ${t}`:`Failed to spawn Qoder CLI process: ${e.message}`;return new D(o,{stderr:this.getStderrTail(),cause:e})}createProcessExitError(e,t){if(e!==ye){if(e!==0&&e!==null)return new D(`Qoder CLI process exited with code ${e}`,{exitCode:e,signal:t,stderr:this.getStderrTail()});if(t)return new D(`Qoder CLI process terminated by signal ${t}`,{exitCode:e,signal:t,stderr:this.getStderrTail()})}}getStderrTail(){return this.stderrTail.trim()||void 0}async waitForProcessExit(){if(this.processExitError)throw this.processExitError;let e=this.process??this.customHandle;if(e){if(this.hasProcessStopped()){let t=this.createProcessExitError(e.exitCode,this.process?.signalCode??null);if(t)throw this.processExitError=t,t;return}await new Promise((t,s)=>{let o=(i,a)=>{if(e.off("error",r),this.closed){t();return}let u=this.processExitError??this.createProcessExitError(i,a);u?(this.processExitError=u,s(u)):t()},r=i=>{if(e.off("exit",o),this.closed){t();return}let a=this.processExitError??this.createSpawnError(i);this.processExitError=a,s(a)};e.once("exit",o),e.once("error",r)})}}resolveExecutable(e){let t=this.options.pathToQoderCLIExecutable??J();if(nt(t)){let s=this.options.executable??"node",o=this.options.executableArgs??[];return{command:s,commandArgs:[...o,t,...e]}}return{command:t,commandArgs:e}}async cleanupLaunchArtifacts(){await this.launchOptionsBuilder.cleanupLaunchArtifacts()}fireAuthExpired(){if(!this.authExpiredFired){this.authExpiredFired=!0;try{this.options.onAuthExpired?.()}catch{}}}};function ei(){switch("worker"){case"worker":return"worker";case"process":return"process"}return"process"}var oe=ei();function os(n){return typeof n=="object"&&n!==null&&typeof n.create=="function"}function rt(n,e){return n.create(e)}import{existsSync as Ci}from"fs";import{createInterface as Ei}from"readline";import{Worker as Pi}from"worker_threads";import{createHash as ti}from"node:crypto";import{existsSync as ni}from"node:fs";import{chmod as si,lstat as oi,mkdir as xe,readFile as rs,readdir as ri,readlink as ii,rename as ai,rm as it,stat as ui,symlink as ci,writeFile as is}from"node:fs/promises";import{tmpdir as li,userInfo as di}from"node:os";import{basename as as,dirname as ve,join as z,relative as pi}from"node:path";var mi="QODER_WORKER_RUNTIME_ASSET_ROOT",us=/(^|[\\/])app\.asar([\\/]|$)/,Ft=".qoder-worker-runtime-ready";function cs(n){return us.test(n)}function Kt(n){return cs(n)?n.replace(us,(e,t,s)=>`${t}app.asar.unpacked${s}`):null}async function ke(n,e={}){let t=Kt(n);if(!e.forceMaterialize&&t){let u=ve(t);if(ni(t))return e.diagnostics?.record(`[WorkerTransport] Using asar-unpacked worker runtime: ${t}`),jt(t,u,!1,ve(n))}if(!(e.forceMaterialize||cs(n))){let u=ve(n);return jt(n,u,!1)}let o=ve(n),r=await fi(o,n,{cacheDir:e.cacheDir,diagnostics:e.diagnostics}),i=pi(o,n)||as(n),a=z(r,i);return jt(a,r,!0,o)}function jt(n,e,t,s){return{runtimePath:n,runtimeRoot:e,materialized:t,sourceRuntimeRoot:s,env:{[mi]:e}}}async function fi(n,e,t){let s=await gi(n,e),o=t.cacheDir??Si(),r=z(o,s),i=z(r,Ft);if(await ds(i)===s)return r;let a=z(o,`.setup-${s}-${process.pid}-${Date.now()}`);await xe(o,{recursive:!0,mode:448}),await it(a,{recursive:!0,force:!0}),await it(r,{recursive:!0,force:!0}),t.diagnostics?.record(`[WorkerTransport] Materializing worker runtime: ${n} -> ${r}`);try{return await xe(a,{recursive:!0,mode:448}),await ls(n,a),await is(z(a,Ft),s,{mode:384}),await yi(a,r,s),r}catch(u){throw await it(a,{recursive:!0,force:!0}).catch(()=>{}),u}}async function gi(n,e){let t=ti("sha256");t.update("qoder-worker-runtime-v1\0");let s=await ps(z(n,"runtime-info.json"));if(s)t.update(s);else{t.update(e);let o=await ui(e).catch(()=>null);o&&t.update(`${o.size}\0${o.mtimeMs}`)}return`runtime-${t.digest("hex").slice(0,24)}`}async function ls(n,e){let t=await ri(n,{withFileTypes:!0});await xe(e,{recursive:!0,mode:448});for(let s of t){let o=z(n,s.name),r=z(e,s.name);if(s.isDirectory()){await ls(o,r);continue}if(s.isSymbolicLink()){await xe(ve(r),{recursive:!0,mode:448}),await ci(await ii(o),r);continue}if(!s.isFile())continue;let i=await hi(o);await xe(ve(r),{recursive:!0,mode:448}),await is(r,await rs(o),{mode:i}),process.platform!=="win32"&&await si(r,i)}}async function hi(n){let e=((await oi(n)).mode||420)&511;if(process.platform==="win32")return e||420;let t=as(n);return t==="rg"||t==="spawn-helper"||/\.(?:node|dylib|exe)$/.test(t)||/\.so(?:\.\d+)*$/.test(t)?493:e||420}async function yi(n,e,t){try{await ai(n,e)}catch(s){if(await ds(z(e,Ft))===t){await it(n,{recursive:!0,force:!0});return}throw s}}async function ds(n){let e=await ps(n);return e?e.toString("utf8"):null}async function ps(n){try{return await rs(n)}catch{return null}}function Si(){let n=wi(di().username||process.env.USER||process.env.USERNAME||"user");return z(li(),`qoder-sdk-worker-runtime-${n}`)}function wi(n){return n.replace(/[^a-zA-Z0-9._-]/g,"_")||"unknown"}var vi="QODER_WORKER_CWD";function at(n,e){return{env:{...e.env,[vi]:e.cwd,...n.env},workerData:{...e.workerData??{},qoderWorkerRuntime:{cwd:e.cwd,runtimeRoot:n.runtimeRoot,materialized:n.materialized}}}}import{existsSync as Ut}from"node:fs";import{dirname as ki,join as re}from"node:path";import{fileURLToPath as bi}from"node:url";var _i=bi(import.meta.url),Lt=ki(_i);function Y(n){if(n)return n;let e=[];for(let t of Ri())e.push(re(t,"dist","_worker","qoder-worker-runtime.obf.mjs"),re(t,"dist","_worker","qoder-worker-runtime.mjs"),re(t,"_worker","qoder-worker-runtime.obf.mjs"),re(t,"_worker","qoder-worker-runtime.mjs"));for(let t of e)if(Ut(t))return t;return e[0]??re(Lt,"..","_worker","qoder-worker-runtime.obf.mjs")}function ms(n){let e=Y(n);if(Ut(e))return!0;let t=Kt(e);return t!==null&&Ut(t)}function Ri(){let n=[re(Lt,".."),re(Lt,"..","..")];return[...new Set(n)]}var fs=8192,ie=class extends Error{code="QODER_WORKER_RUNTIME_ERROR";exitCode;stderr;constructor(e,t){super(e,t?.cause?{cause:t.cause}:void 0),this.name="QoderWorkerRuntimeError",this.exitCode=t?.exitCode,this.stderr=t?.stderr}},be=class n{static default=new n;options;constructor(e={}){this.options={...e}}create(e){return new Bt(st(this.options,e))}},Bt=class{worker=null;options;ready=!1;closed=!1;initializePromise=null;authExpiredFired=!1;pendingInput=[];diagnostics;workerExitError;stderrTail="";observedExitCode=null;launchOptionsBuilder;closeTimer=null;abortSignal;abortListener;constructor(e={}){this.options={...e},this.diagnostics=e.diagnostics,this.launchOptionsBuilder=new H(this.options,this.diagnostics,"[WorkerTransport]")}async initialize(){if(!this.ready)return this.initializePromise||(this.initializePromise=this._doInitialize()),this.initializePromise}async _doInitialize(){try{let e=await this.launchOptionsBuilder.prepare();if(this.closed){await this.cleanupLaunchArtifacts();return}let t=Y(this.options.pathToQoderWorkerRuntime),s;try{s=await ke(t,{diagnostics:this.diagnostics})}catch(a){throw new ie(`Failed to prepare Qoder worker runtime: ${t}`,{cause:a})}let o=s.runtimePath;if(!Ci(o))throw new ie(`Qoder worker runtime not found: ${o}`);if(this.closed){await this.cleanupLaunchArtifacts();return}let r=this.options.cwd??process.cwd(),i=at(s,{cwd:r,env:e.env,workerData:this.options.workerData});if(this.diagnostics?.record(`[WorkerTransport] Starting: ${o}`),this.diagnostics?.record(`[WorkerTransport] CWD: ${r}`),this.diagnostics?.record(`[WorkerTransport] Args: ${ot(e.args)}`),this.worker=new Pi(o,{argv:e.args,env:i.env,execArgv:this.options.execArgv??[],stdin:!0,stdout:!0,stderr:!0,workerData:i.workerData}),this.worker.once("error",a=>{this.ready=!1,this.cleanupAbortListener(),this.closed||(this.workerExitError=this.createWorkerError(a)),this.diagnostics?.record("[WorkerTransport] Worker error:",a),this.destroyWorkerStreams(this.worker)}),this.worker.once("exit",a=>{if(this.ready=!1,this.observedExitCode=a,this.cleanupAbortListener(),this.clearCloseTimer(),this.recordWorkerExit(a),this.destroyWorkerStreams(this.worker),this.closed){a!==0&&this.recordSuppressedWorkerExit(a),this.cleanupLaunchArtifacts().catch(()=>{});return}a===ye&&this.fireAuthExpired();let u=this.createWorkerExitError(a);u&&(this.workerExitError=u),this.cleanupLaunchArtifacts().catch(()=>{})}),this.worker.stderr?.on("data",a=>{let u=a.toString();this.appendStderr(u),this.options.stderr!=="ignore"&&this.options.stderrHandler?.(u),this.options.stderr==="inherit"&&process.stderr.write(u);let c=u.trim();c&&this.diagnostics?.record(`[WorkerTransport] STDERR: ${c}`)}),this.options.abortController){let a=this.options.abortController.signal;a.aborted?this.close():(this.abortSignal=a,this.abortListener=()=>this.close(),a.addEventListener("abort",this.abortListener,{once:!0}))}this.ready=!0,this.flushPendingInput()}catch(e){throw this.worker?this.close():await this.cleanupLaunchArtifacts(),e}}write(e){if(this.workerExitError)throw this.workerExitError;if(this.closed)throw new Error("Transport is not ready or has been closed");let t=e.endsWith(`
4
+ `;if(ve(t,Q,"SDK process input"),!this.ready){if(this.initializePromise){this.pendingInput.push({type:"write",line:t});return}throw new Error("Transport is not ready or has been closed")}this.writeReadyLine(t)}writeReadyLine(e){if(this.customHandle){let t=this.customHandle.stdin;if(t.destroyed||t.writableEnded)return;typeof t.write=="function"&&t.write(e)}else this.process?.stdin&&!this.process.stdin.destroyed&&!this.process.stdin.writableEnded&&this.process.stdin.write(e)}flushPendingInput(){if(this.pendingInput.length===0)return;let e=this.pendingInput;this.pendingInput=[];for(let t of e)t.type==="write"?this.writeReadyLine(t.line):this.endReadyInput()}isReady(){return this.ready&&!this.closed}endInput(){if(!this.ready&&!this.process&&!this.customHandle){this.initializePromise&&this.pendingInput.push({type:"end"});return}this.endReadyInput()}endReadyInput(){if(this.customHandle){let e=this.customHandle.stdin;if(e.destroyed||e.writableEnded)return;typeof e.end=="function"&&e.end()}else this.process?.stdin&&!this.process.stdin.destroyed&&!this.process.stdin.writableEnded&&this.process.stdin.end()}async*readMessages(){this.initializePromise&&await this.initializePromise;let e=this.getStdout();if(!e)return;let t=new ee(Q,"SDK process output");e.pipe(t);let s=ci({input:t,crlfDelay:1/0});try{for await(let o of s){if(this.closed)break;let r=o.trim();if(r)try{yield JSON.parse(r)}catch{}}this.closed||await this.waitForProcessExit()}finally{s.close(),e.unpipe(t),t.destroy()}}close(){this.closed||(this.closed=!0,this.shutdownProcess())}shutdownProcess(){if(this.shutdownStarted)return;this.shutdownStarted=!0,this.ready=!1,this.pendingInput=[];let e=this.process??this.customHandle;if(!e)return;if(this.hasProcessStopped()){this.finishProcess();return}if(this.endInput(),this.hasProcessStopped()){this.finishProcess();return}let t=o=>{try{e.kill(o)}catch(r){this.diagnostics?.record(`[ProcessTransport] Failed to send ${o}:`,r)}},s=this.options.closeGraceMs??Ze;this.closeTimer=setTimeout(()=>{this.closeTimer=void 0,!this.hasProcessStopped()&&(t("SIGTERM"),!this.hasProcessStopped()&&(this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.hasProcessStopped()||t("SIGKILL")},Ln),this.killTimer.unref()))},s),this.closeTimer.unref()}hasProcessStopped(){let e=this.process??this.customHandle;return this.processStopped||e!==null&&e.exitCode!==null||this.process!==null&&this.process.signalCode!==null}finishProcess(){this.processStopped||(this.processStopped=!0,this.ready=!1,clearTimeout(this.closeTimer),clearTimeout(this.killTimer),this.closeTimer=void 0,this.killTimer=void 0,this.cleanupLaunchArtifacts().catch(()=>{}))}observeProcess(e){e.on("error",t=>{this.ready=!1,this.closed||(this.processExitError??=this.createSpawnError(t)),this.diagnostics?.record("[ProcessTransport] Process error:",t),this.hasProcessStopped()?this.finishProcess():this.shutdownProcess()}),e.once("exit",(t,s)=>{if(this.finishProcess(),this.diagnostics?.record(`[ProcessTransport] Process exited: code=${t}, signal=${s}`),!this.closed&&!this.processExitError){t===we&&this.fireAuthExpired();let o=this.createProcessExitError(t,s);o&&(this.processExitError=o)}})}get pid(){return this.process?.pid??void 0}getStdout(){return this.process?.stdout?this.process.stdout:this.customHandle?.stdout?this.customHandle.stdout:null}appendStderr(e){this.stderrTail+=e,this.stderrTail.length>rs&&(this.stderrTail=this.stderrTail.slice(-rs))}createSpawnError(e){let t=this.options.pathToQoderCLIExecutable??"qodercli",o=e.code==="ENOENT"?`Qoder CLI executable not found: ${t}`:`Failed to spawn Qoder CLI process: ${e.message}`;return new D(o,{stderr:this.getStderrTail(),cause:e})}createProcessExitError(e,t){if(e!==we){if(e!==0&&e!==null)return new D(`Qoder CLI process exited with code ${e}`,{exitCode:e,signal:t,stderr:this.getStderrTail()});if(t)return new D(`Qoder CLI process terminated by signal ${t}`,{exitCode:e,signal:t,stderr:this.getStderrTail()})}}getStderrTail(){return this.stderrTail.trim()||void 0}async waitForProcessExit(){if(this.processExitError)throw this.processExitError;let e=this.process??this.customHandle;if(e){if(this.hasProcessStopped()){let t=this.createProcessExitError(e.exitCode,this.process?.signalCode??null);if(t)throw this.processExitError=t,t;return}await new Promise((t,s)=>{let o=(i,a)=>{if(e.off("error",r),this.closed){t();return}let u=this.processExitError??this.createProcessExitError(i,a);u?(this.processExitError=u,s(u)):t()},r=i=>{if(e.off("exit",o),this.closed){t();return}let a=this.processExitError??this.createSpawnError(i);this.processExitError=a,s(a)};e.once("exit",o),e.once("error",r)})}}resolveExecutable(e){let t=this.options.pathToQoderCLIExecutable??Z();if(X(t)){let s=this.options.executable??"node",o=this.options.executableArgs??[];return{command:s,commandArgs:[...o,t,...e]}}return{command:t,commandArgs:e}}async cleanupLaunchArtifacts(){await this.launchOptionsBuilder.cleanupLaunchArtifacts()}fireAuthExpired(){if(!this.authExpiredFired){this.authExpiredFired=!0;try{this.options.onAuthExpired?.()}catch{}}}};function li(){switch("worker"){case"worker":return"worker";case"process":return"process"}return"process"}var ae=li();function is(n){return typeof n=="object"&&n!==null&&typeof n.create=="function"}function at(n,e){return n.create(e)}import{existsSync as qi}from"fs";import{createInterface as Ni}from"readline";import{Worker as ji}from"worker_threads";import{createHash as di}from"node:crypto";import{existsSync as pi}from"node:fs";import{chmod as mi,lstat as fi,mkdir as je,readFile as as,readdir as gi,readlink as hi,rename as yi,rm as ut,stat as Si,symlink as wi,writeFile as us}from"node:fs/promises";import{tmpdir as vi,userInfo as ki}from"node:os";import{basename as cs,dirname as be,join as G,relative as bi}from"node:path";var _i="QODER_WORKER_RUNTIME_ASSET_ROOT",ls=/(^|[\\/])app\.asar([\\/]|$)/,Ut=".qoder-worker-runtime-ready";function ds(n){return ls.test(n)}function Lt(n){return ds(n)?n.replace(ls,(e,t,s)=>`${t}app.asar.unpacked${s}`):null}async function _e(n,e={}){let t=Lt(n);if(!e.forceMaterialize&&t){let u=be(t);if(pi(t))return e.diagnostics?.record(`[WorkerTransport] Using asar-unpacked worker runtime: ${t}`),Kt(t,u,!1,be(n))}if(!(e.forceMaterialize||ds(n))){let u=be(n);return Kt(n,u,!1)}let o=be(n),r=await Ri(o,n,{cacheDir:e.cacheDir,diagnostics:e.diagnostics}),i=bi(o,n)||cs(n),a=G(r,i);return Kt(a,r,!0,o)}function Kt(n,e,t,s){return{runtimePath:n,runtimeRoot:e,materialized:t,sourceRuntimeRoot:s,env:{[_i]:e}}}async function Ri(n,e,t){let s=await Ci(n,e),o=t.cacheDir??Ti(),r=G(o,s),i=G(r,Ut);if(await ms(i)===s)return r;let a=G(o,`.setup-${s}-${process.pid}-${Date.now()}`);await je(o,{recursive:!0,mode:448}),await ut(a,{recursive:!0,force:!0}),await ut(r,{recursive:!0,force:!0}),t.diagnostics?.record(`[WorkerTransport] Materializing worker runtime: ${n} -> ${r}`);try{return await je(a,{recursive:!0,mode:448}),await ps(n,a),await us(G(a,Ut),s,{mode:384}),await Pi(a,r,s),r}catch(u){throw await ut(a,{recursive:!0,force:!0}).catch(()=>{}),u}}async function Ci(n,e){let t=di("sha256");t.update("qoder-worker-runtime-v1\0");let s=await fs(G(n,"runtime-info.json"));if(s)t.update(s);else{t.update(e);let o=await Si(e).catch(()=>null);o&&t.update(`${o.size}\0${o.mtimeMs}`)}return`runtime-${t.digest("hex").slice(0,24)}`}async function ps(n,e){let t=await gi(n,{withFileTypes:!0});await je(e,{recursive:!0,mode:448});for(let s of t){let o=G(n,s.name),r=G(e,s.name);if(s.isDirectory()){await ps(o,r);continue}if(s.isSymbolicLink()){await je(be(r),{recursive:!0,mode:448}),await wi(await hi(o),r);continue}if(!s.isFile())continue;let i=await Ei(o);await je(be(r),{recursive:!0,mode:448}),await us(r,await as(o),{mode:i}),process.platform!=="win32"&&await mi(r,i)}}async function Ei(n){let e=((await fi(n)).mode||420)&511;if(process.platform==="win32")return e||420;let t=cs(n);return t==="rg"||t==="spawn-helper"||/\.(?:node|dylib|exe)$/.test(t)||/\.so(?:\.\d+)*$/.test(t)?493:e||420}async function Pi(n,e,t){try{await yi(n,e)}catch(s){if(await ms(G(e,Ut))===t){await ut(n,{recursive:!0,force:!0});return}throw s}}async function ms(n){let e=await fs(n);return e?e.toString("utf8"):null}async function fs(n){try{return await as(n)}catch{return null}}function Ti(){let n=Mi(ki().username||process.env.USER||process.env.USERNAME||"user");return G(vi(),`qoder-sdk-worker-runtime-${n}`)}function Mi(n){return n.replace(/[^a-zA-Z0-9._-]/g,"_")||"unknown"}var Ai="QODER_WORKER_CWD";function ct(n,e){return{env:{...e.env,[Ai]:e.cwd,...n.env},workerData:{...e.workerData??{},qoderWorkerRuntime:{cwd:e.cwd,runtimeRoot:n.runtimeRoot,materialized:n.materialized}}}}import{existsSync as Bt}from"node:fs";import{dirname as Ii,join as ue}from"node:path";import{fileURLToPath as Di}from"node:url";var Oi=Di(import.meta.url),$t=Ii(Oi);function te(n){if(n)return n;let e=[];for(let t of xi())e.push(ue(t,"dist","_worker","qoder-worker-runtime.obf.mjs"),ue(t,"dist","_worker","qoder-worker-runtime.mjs"),ue(t,"_worker","qoder-worker-runtime.obf.mjs"),ue(t,"_worker","qoder-worker-runtime.mjs"));for(let t of e)if(Bt(t))return t;return e[0]??ue($t,"..","_worker","qoder-worker-runtime.obf.mjs")}function gs(n){let e=te(n);if(Bt(e))return!0;let t=Lt(e);return t!==null&&Bt(t)}function xi(){let n=[ue($t,".."),ue($t,"..","..")];return[...new Set(n)]}var hs=8192,ce=class extends Error{code="QODER_WORKER_RUNTIME_ERROR";exitCode;stderr;constructor(e,t){super(e,t?.cause?{cause:t.cause}:void 0),this.name="QoderWorkerRuntimeError",this.exitCode=t?.exitCode,this.stderr=t?.stderr}},Re=class n{static default=new n;options;constructor(e={}){this.options={...e}}create(e){return new zt(rt(this.options,e))}},zt=class{worker=null;options;ready=!1;closed=!1;initializePromise=null;authExpiredFired=!1;pendingInput=[];diagnostics;workerExitError;stderrTail="";observedExitCode=null;launchOptionsBuilder;closeTimer=null;closePromise;abortSignal;abortListener;constructor(e={}){this.options={...e},this.diagnostics=e.diagnostics,this.launchOptionsBuilder=new j(this.options,this.diagnostics,"[WorkerTransport]")}async initialize(){if(!this.ready)return this.initializePromise||(this.initializePromise=this._doInitialize()),this.initializePromise}async _doInitialize(){try{let e=await this.launchOptionsBuilder.prepare();if(this.closed){await this.cleanupLaunchArtifacts();return}let t=te(this.options.pathToQoderWorkerRuntime),s;try{s=await _e(t,{diagnostics:this.diagnostics})}catch(a){throw new ce(`Failed to prepare Qoder worker runtime: ${t}`,{cause:a})}let o=s.runtimePath;if(!qi(o))throw new ce(`Qoder worker runtime not found: ${o}`);if(this.closed){await this.cleanupLaunchArtifacts();return}let r=this.options.cwd??process.cwd(),i=ct(s,{cwd:r,env:e.env,workerData:this.options.workerData});if(this.diagnostics?.record(`[WorkerTransport] Starting: ${o}`),this.diagnostics?.record(`[WorkerTransport] CWD: ${r}`),this.diagnostics?.record(`[WorkerTransport] Args: ${it(e.args)}`),this.worker=new ji(o,{argv:e.args,env:i.env,execArgv:this.options.execArgv??[],stdin:!0,stdout:!0,stderr:!0,workerData:i.workerData}),this.worker.once("error",a=>{this.ready=!1,this.cleanupAbortListener(),this.closed||(this.workerExitError=this.createWorkerError(a)),this.diagnostics?.record("[WorkerTransport] Worker error:",a),this.destroyWorkerStreams(this.worker)}),this.worker.once("exit",a=>{if(this.ready=!1,this.observedExitCode=a,this.cleanupAbortListener(),this.clearCloseTimer(),this.recordWorkerExit(a),this.destroyWorkerStreams(this.worker),this.closed){a!==0&&this.recordSuppressedWorkerExit(a),this.cleanupLaunchArtifacts().catch(()=>{});return}a===we&&this.fireAuthExpired();let u=this.createWorkerExitError(a);u&&(this.workerExitError=u),this.cleanupLaunchArtifacts().catch(()=>{})}),this.worker.stderr?.on("data",a=>{let u=a.toString();this.appendStderr(u),this.options.stderr!=="ignore"&&this.options.stderrHandler?.(u),this.options.stderr==="inherit"&&process.stderr.write(u);let c=u.trim();c&&this.diagnostics?.record(`[WorkerTransport] STDERR: ${c}`)}),this.options.abortController){let a=this.options.abortController.signal;a.aborted?this.close():(this.abortSignal=a,this.abortListener=()=>this.close(),a.addEventListener("abort",this.abortListener,{once:!0}))}this.ready=!this.closed,this.ready&&this.flushPendingInput()}catch(e){throw this.worker?this.close():await this.cleanupLaunchArtifacts(),e}}write(e){if(this.workerExitError)throw this.workerExitError;if(this.closed)throw new Error("Transport is not ready or has been closed");let t=e.endsWith(`
5
5
  `)?e:e+`
6
- `;if(Se(t,$,"SDK Worker input"),!this.ready){if(this.initializePromise){this.pendingInput.push({type:"write",line:t});return}throw new Error("Transport is not ready or has been closed")}this.writeReadyLine(t)}isReady(){return this.ready&&!this.closed}endInput(){if(!this.ready&&!this.worker){this.initializePromise&&this.pendingInput.push({type:"end"});return}this.endReadyInput()}async*readMessages(){this.initializePromise&&await this.initializePromise;let e=this.worker?.stdout;if(!e)return;let t=new V($,"SDK Worker output");e.pipe(t);let s=Ei({input:t,crlfDelay:1/0});try{for await(let o of s){if(this.closed)break;let r=o.trim();if(r)try{yield JSON.parse(r)}catch{}}this.closed||await this.waitForWorkerExit()}finally{s.close(),e.unpipe(t),t.destroy()}}close(){if(this.closed)return;this.closed=!0,this.ready=!1,this.pendingInput=[],this.cleanupAbortListener();let e=this.worker;if(!e)return;this.endInput();let t=this.options.closeGraceMs??Ve;this.closeTimer=setTimeout(()=>{e.terminate().catch(()=>{})},t),this.closeTimer.unref?.(),e.once("exit",()=>{this.clearCloseTimer()})}get threadId(){return this.worker?.threadId}writeReadyLine(e){let t=this.worker?.stdin;!t||t.destroyed||t.writableEnded||t.write(e)}flushPendingInput(){if(this.pendingInput.length===0)return;let e=this.pendingInput;this.pendingInput=[];for(let t of e)t.type==="write"?this.writeReadyLine(t.line):this.endReadyInput()}endReadyInput(){let e=this.worker?.stdin;!e||e.destroyed||e.writableEnded||e.end()}destroyWorkerStreams(e){e?.stdin?.destroy(),e?.stdout?.destroy(),e?.stderr?.destroy()}appendStderr(e){this.stderrTail+=e,this.stderrTail.length>fs&&(this.stderrTail=this.stderrTail.slice(-fs))}createWorkerError(e){return new ie(`Failed to start Qoder worker runtime: ${e.message}`,{stderr:this.getStderrTail(),cause:e})}createWorkerExitError(e){if(!(e===0||e===ye))return new ie(`Qoder worker runtime exited with code ${e}`,{exitCode:e,stderr:this.getStderrTail()})}getStderrTail(){return this.stderrTail.trim()||void 0}recordWorkerExit(e){let t=this.formatStderrTailForDiagnostics();this.diagnostics?.record(`[WorkerTransport] Worker exited: code=${e}, closed=${this.closed}, ready=${this.ready}, stderrTail=${t}`)}recordSuppressedWorkerExit(e){let t=this.formatStderrTailForDiagnostics();this.diagnostics?.record(`[WorkerTransport] Worker non-zero exit suppressed after close: code=${e}, stderrTail=${t}`)}formatStderrTailForDiagnostics(){let e=this.getStderrTail();return e?JSON.stringify(e):"<empty>"}async waitForWorkerExit(){if(this.closed)return;if(this.workerExitError)throw this.workerExitError;let e=this.worker;if(e){if(this.observedExitCode!==null){if(this.closed)return;let t=this.createWorkerExitError(this.observedExitCode);if(t)throw this.workerExitError=t,t;return}await new Promise((t,s)=>{let o=i=>{if(e.off("error",r),this.closed){t();return}let a=this.createWorkerExitError(i);a?(this.workerExitError=a,s(a)):t()},r=i=>{if(e.off("exit",o),this.closed){t();return}let a=this.createWorkerError(i);this.workerExitError=a,s(a)};e.once("exit",o),e.once("error",r)})}}clearCloseTimer(){this.closeTimer&&(clearTimeout(this.closeTimer),this.closeTimer=null)}cleanupAbortListener(){this.abortSignal&&this.abortListener&&this.abortSignal.removeEventListener("abort",this.abortListener),this.abortSignal=void 0,this.abortListener=void 0}async cleanupLaunchArtifacts(){await this.launchOptionsBuilder.cleanupLaunchArtifacts()}fireAuthExpired(){if(!this.authExpiredFired){this.authExpiredFired=!0;try{this.options.onAuthExpired?.()}catch{}}}};var ut=class{constructor(e){this.bootstrap=e}transport;bootstrapPromise;pending=[];closed=!1;closePromise;cleanup;cleanupPromise;async initialize(){if(this.closed){await this.closePromise;return}try{let e=await this.getTransport();if(this.closed)return;if(await e.initialize(),this.closed){await e.close(),await this.runCleanup();return}for(let t of this.pending.splice(0))t.type==="write"?await e.write(t.data):e.endInput()}catch(e){throw await this.runCleanup(),e}}write(e){if(this.closed)throw new Error("Transport has been closed");if(this.transport?.isReady()){this.transport.write(e);return}this.pending.push({type:"write",data:e})}close(){return this.closePromise||(this.closed=!0,this.pending.length=0,this.closePromise=this.performClose(),this.closePromise.catch(()=>{})),this.closePromise}isReady(){return!this.closed&&(this.transport?.isReady()??!1)}async*readMessages(){try{if(await this.initialize(),this.closed)return;yield*(await this.getTransport()).readMessages()}finally{await this.runCleanup()}}endInput(){if(!this.closed){if(this.transport?.isReady()){this.transport.endInput();return}this.pending.push({type:"endInput"})}}async getTransport(){return this.bootstrapPromise||(this.bootstrapPromise=this.bootstrap().then(e=>(this.transport=e.transport,this.cleanup=e.cleanup,e.transport))),this.bootstrapPromise}async performClose(){let e=this.transport;if(!e&&this.bootstrapPromise)try{e=await this.bootstrapPromise}catch{await this.runCleanup();return}try{await e?.close()}finally{await this.runCleanup()}}runCleanup(){return this.cleanupPromise||(this.cleanupPromise=this.cleanup?.()??Promise.resolve()),this.cleanupPromise}};import{appendFileSync as Ti,mkdirSync as Mi}from"fs";import{dirname as Ii}from"path";var Ai="QODER_AGENT_SDK_DEBUG";function Di(n){return n.debugFile?!0:n.debug===!0||xi(process.env[Ai])}function Oi(n){if(n.debugFile)return n.debugFile}function xi(n){if(n===void 0)return!1;let e=n.trim().toLowerCase();return e!==""&&e!=="0"&&e!=="false"&&e!=="no"&&e!=="off"}var ct=class{enabled;debugFile;stderr;constructor(e={}){this.enabled=Di(e),this.debugFile=Oi(e),this.stderr=e.stderr}record(e,t){if(!this.enabled)return;let s=this.formatLine(e,t),o=this.debugFile;if(o){this.writeToFile(o,s);return}this.writeToStderr(s)}get filePath(){return this.debugFile}writeToFile(e,t){try{Mi(Ii(e),{recursive:!0}),Ti(e,t,"utf8")}catch{}}writeToStderr(e){try{this.stderr?this.stderr(e):process.stderr.write(e)}catch{}}formatLine(e,t){let s=new Date().toISOString(),o=this.formatError(t);return`${s} ${e}${o}
6
+ `;if(ve(t,Q,"SDK Worker input"),!this.ready){if(this.initializePromise){this.pendingInput.push({type:"write",line:t});return}throw new Error("Transport is not ready or has been closed")}this.writeReadyLine(t)}isReady(){return this.ready&&!this.closed}endInput(){if(!this.ready&&!this.worker){this.initializePromise&&this.pendingInput.push({type:"end"});return}this.endReadyInput()}async*readMessages(){this.initializePromise&&await this.initializePromise;let e=this.worker?.stdout;if(!e)return;let t=new ee(Q,"SDK Worker output");e.pipe(t);let s=Ni({input:t,crlfDelay:1/0});try{for await(let o of s){if(this.closed)break;let r=o.trim();if(r)try{yield JSON.parse(r)}catch{}}this.closed||await this.waitForWorkerExit()}finally{s.close(),e.unpipe(t),t.destroy()}}close(){return this.closePromise||(this.closePromise=this.performClose(),this.closePromise.catch(()=>{})),this.closePromise}async performClose(){this.closed||(this.closed=!0,this.ready=!1,this.pendingInput=[],this.cleanupAbortListener()),this.initializePromise&&await this.initializePromise.catch(()=>{});let e=this.worker;if(!e){await this.cleanupLaunchArtifacts();return}if(this.observedExitCode===null){this.endInput();let t=this.options.closeGraceMs??Ze;this.closeTimer=setTimeout(()=>{e.terminate().catch(()=>{})},t),this.closeTimer.unref?.(),await new Promise(s=>{if(this.observedExitCode!==null){s();return}e.once("exit",()=>s())})}this.clearCloseTimer(),await this.cleanupLaunchArtifacts()}get threadId(){return this.worker?.threadId}writeReadyLine(e){let t=this.worker?.stdin;!t||t.destroyed||t.writableEnded||t.write(e)}flushPendingInput(){if(this.pendingInput.length===0)return;let e=this.pendingInput;this.pendingInput=[];for(let t of e)t.type==="write"?this.writeReadyLine(t.line):this.endReadyInput()}endReadyInput(){let e=this.worker?.stdin;!e||e.destroyed||e.writableEnded||e.end()}destroyWorkerStreams(e){e?.stdin?.destroy(),e?.stdout?.destroy(),e?.stderr?.destroy()}appendStderr(e){this.stderrTail+=e,this.stderrTail.length>hs&&(this.stderrTail=this.stderrTail.slice(-hs))}createWorkerError(e){return new ce(`Failed to start Qoder worker runtime: ${e.message}`,{stderr:this.getStderrTail(),cause:e})}createWorkerExitError(e){if(!(e===0||e===we))return new ce(`Qoder worker runtime exited with code ${e}`,{exitCode:e,stderr:this.getStderrTail()})}getStderrTail(){return this.stderrTail.trim()||void 0}recordWorkerExit(e){let t=this.formatStderrTailForDiagnostics();this.diagnostics?.record(`[WorkerTransport] Worker exited: code=${e}, closed=${this.closed}, ready=${this.ready}, stderrTail=${t}`)}recordSuppressedWorkerExit(e){let t=this.formatStderrTailForDiagnostics();this.diagnostics?.record(`[WorkerTransport] Worker non-zero exit suppressed after close: code=${e}, stderrTail=${t}`)}formatStderrTailForDiagnostics(){let e=this.getStderrTail();return e?JSON.stringify(e):"<empty>"}async waitForWorkerExit(){if(this.closed)return;if(this.workerExitError)throw this.workerExitError;let e=this.worker;if(e){if(this.observedExitCode!==null){if(this.closed)return;let t=this.createWorkerExitError(this.observedExitCode);if(t)throw this.workerExitError=t,t;return}await new Promise((t,s)=>{let o=i=>{if(e.off("error",r),this.closed){t();return}let a=this.createWorkerExitError(i);a?(this.workerExitError=a,s(a)):t()},r=i=>{if(e.off("exit",o),this.closed){t();return}let a=this.createWorkerError(i);this.workerExitError=a,s(a)};e.once("exit",o),e.once("error",r)})}}clearCloseTimer(){this.closeTimer&&(clearTimeout(this.closeTimer),this.closeTimer=null)}cleanupAbortListener(){this.abortSignal&&this.abortListener&&this.abortSignal.removeEventListener("abort",this.abortListener),this.abortSignal=void 0,this.abortListener=void 0}async cleanupLaunchArtifacts(){await this.launchOptionsBuilder.cleanupLaunchArtifacts()}fireAuthExpired(){if(!this.authExpiredFired){this.authExpiredFired=!0;try{this.options.onAuthExpired?.()}catch{}}}};var lt=class{constructor(e){this.bootstrap=e}transport;bootstrapPromise;pending=[];closed=!1;closePromise;cleanup;cleanupPromise;async initialize(){if(this.closed){await this.closePromise;return}try{let e=await this.getTransport();if(this.closed)return;if(await e.initialize(),this.closed){await e.close(),await this.runCleanup();return}for(let t of this.pending.splice(0))t.type==="write"?await e.write(t.data):e.endInput()}catch(e){throw await this.runCleanup(),e}}write(e){if(this.closed)throw new Error("Transport has been closed");if(this.transport?.isReady()){this.transport.write(e);return}this.pending.push({type:"write",data:e})}close(){return this.closePromise||(this.closed=!0,this.pending.length=0,this.closePromise=this.performClose(),this.closePromise.catch(()=>{})),this.closePromise}isReady(){return!this.closed&&(this.transport?.isReady()??!1)}async*readMessages(){try{if(await this.initialize(),this.closed)return;yield*(await this.getTransport()).readMessages()}finally{await this.runCleanup()}}endInput(){if(!this.closed){if(this.transport?.isReady()){this.transport.endInput();return}this.pending.push({type:"endInput"})}}async getTransport(){return this.bootstrapPromise||(this.bootstrapPromise=this.bootstrap().then(e=>(this.transport=e.transport,this.cleanup=e.cleanup,e.transport))),this.bootstrapPromise}async performClose(){let e=this.transport;if(!e&&this.bootstrapPromise)try{e=await this.bootstrapPromise}catch{await this.runCleanup();return}try{await e?.close()}finally{await this.runCleanup()}}runCleanup(){return this.cleanupPromise||(this.cleanupPromise=this.cleanup?.()??Promise.resolve()),this.cleanupPromise}};import{appendFileSync as Fi,mkdirSync as Ki}from"fs";import{dirname as Ui}from"path";var Li="QODER_AGENT_SDK_DEBUG";function Bi(n){return n.debugFile?!0:n.debug===!0||zi(process.env[Li])}function $i(n){if(n.debugFile)return n.debugFile}function zi(n){if(n===void 0)return!1;let e=n.trim().toLowerCase();return e!==""&&e!=="0"&&e!=="false"&&e!=="no"&&e!=="off"}var dt=class{enabled;debugFile;stderr;constructor(e={}){this.enabled=Bi(e),this.debugFile=$i(e),this.stderr=e.stderr}record(e,t){if(!this.enabled)return;let s=this.formatLine(e,t),o=this.debugFile;if(o){this.writeToFile(o,s);return}this.writeToStderr(s)}get filePath(){return this.debugFile}writeToFile(e,t){try{Ki(Ui(e),{recursive:!0}),Fi(e,t,"utf8")}catch{}}writeToStderr(e){try{this.stderr?this.stderr(e):process.stderr.write(e)}catch{}}formatLine(e,t){let s=new Date().toISOString(),o=this.formatError(t);return`${s} ${e}${o}
7
7
  `}formatError(e){if(e===void 0)return"";if(e instanceof Error)return`
8
- ${e.stack??e.message}`;try{return` ${JSON.stringify(e)}`}catch{return` ${String(e)}`}}};import{randomUUID as Vi}from"node:crypto";var X=class{queue=[];readResolve;readReject;isDone=!1;errorValue;started=!1;returnCallback;constructor(e){this.returnCallback=e}[Symbol.asyncIterator](){if(this.started)throw new Error("Stream can only be iterated once");return this.started=!0,this}async next(){if(this.queue.length>0)return{done:!1,value:this.queue.shift()};if(this.isDone)return{done:!0,value:void 0};if(this.errorValue!==void 0)throw this.errorValue;return new Promise((e,t)=>{this.readResolve=e,this.readReject=t})}enqueue(e){if(!this.isDone)if(this.readResolve){let t=this.readResolve;this.readResolve=void 0,this.readReject=void 0,t({done:!1,value:e})}else this.queue.push(e)}done(){if(this.isDone=!0,this.readResolve){let e=this.readResolve;this.readResolve=void 0,this.readReject=void 0,e({done:!0,value:void 0})}}error(e){if(this.errorValue=e,this.readReject){let t=this.readReject;this.readResolve=void 0,this.readReject=void 0,t(e)}}async return(){return this.isDone=!0,this.returnCallback?.(),{done:!0,value:void 0}}async throw(e){return this.error(e),{done:!0,value:void 0}}};import{isAbsolute as qi}from"node:path";function $t(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function qe(n,e){let t=n[e];if(typeof t!="string"||t.length===0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-empty string`);return t}function gs(n,e){let t=n[e];if(t!==void 0){if(typeof t!="string")throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a string`);return t}}function hs(n,e){let t=n[e];if(t!==void 0){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-negative finite number`);return t}}function ys(n,e){let t=n[e];if(!Number.isSafeInteger(t)||t<0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-negative safe integer`);return t}function Ni(n){if(!$t(n))throw new TypeError("resolveSessionArtifacts result artifacts must contain objects");let e=qe(n,"path");if(!qi(e))throw new TypeError('resolveSessionArtifacts result field "path" must be absolute');let t=qe(n,"displayPath"),s=qe(n,"name"),o=gs(n,"relativePath"),r=gs(n,"mime"),i=hs(n,"size"),a=hs(n,"mtime"),u;if(n.group!==void 0){if(!$t(n.group))throw new TypeError('resolveSessionArtifacts result field "group" must be an object');u={key:qe(n.group,"key"),name:qe(n.group,"name")}}let c={path:e,displayPath:t,name:s,...u?{group:u}:{},...o!==void 0?{relativePath:o}:{},...i!==void 0?{size:i}:{},...r!==void 0?{mime:r}:{},...a!==void 0?{mtime:a}:{}};if(n.kind==="presented")return{...c,kind:"presented"};if(n.kind!=="changed")throw new TypeError('resolveSessionArtifacts result field "kind" must be "presented" or "changed"');if(typeof n.isNew!="boolean")throw new TypeError('resolveSessionArtifacts result field "isNew" must be a boolean');return{...c,kind:"changed",additions:ys(n,"additions"),deletions:ys(n,"deletions"),isNew:n.isNew}}function Ss(n){if(!$t(n)||!Array.isArray(n.artifacts))throw new TypeError("resolveSessionArtifacts must return an object with an artifacts array");return{artifacts:n.artifacts.map(Ni)}}var j=class extends Error{constructor(e="Operation was aborted"){super(e),this.name="AbortError"}},Ne=class extends Error{timeoutMs;constructor(e){super(`resolveModel did not return within ${e}ms. Increase resolveModelTimeoutMs or ensure the callback resolves faster.`),this.name="ModelPolicyTimeoutError",this.timeoutMs=e}},F=class extends Error{cliProtocolVersion;sdkProtocolVersion;constructor(e,t){super(`Wire protocol major mismatch: CLI announced "${e}" but this SDK was built for "${t}". Upgrade either qodercli or @qoder-ai/qoder-agent-sdk so the major versions align.`),this.name="ProtocolVersionMismatchError",this.cliProtocolVersion=e,this.sdkProtocolVersion=t}},Q=class extends Error{capability;constructor(e){super(`The running qodercli does not advertise the required capability "${e}". Upgrade qodercli or use a matching bundled SDK runtime.`),this.name="UnsupportedCliCapabilityError",this.capability=e}},zt="CONTROL_REQUEST_TIMEOUT",_e=class extends Error{requestId;code;retryable;details;constructor(e){super(e.message),this.name="ControlRequestError",this.requestId=e.requestId,this.code=e.code,this.retryable=e.retryable===!0,this.details=e.details}};var Qt="1.4.0";var ji=new Set(["default","acceptEdits","auto","bypassPermissions"]);function je(n){if(n===void 0)return;if(n==="yolo")return"bypassPermissions";if(typeof n=="string"&&ji.has(n))return n;if(n==="plan")throw new Error('permissionMode="plan" is not supported for daemon Queries; use planMode or setPlanMode() instead.');let e=typeof n=="string"?JSON.stringify(n):n===null?"null":typeof n;throw new Error(`permissionMode=${e} is not supported for daemon Queries; use default, acceptEdits, auto, or bypassPermissions.`)}function Fe(n){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`goalMaxTurns must be a positive safe integer, received ${String(n)}.`)}function ws(n,e,t,s){return new Promise((o,r)=>{if(!("id"in e&&e.id!==null)){try{t.onmessage?.(e)}catch(u){r(u);return}o({jsonrpc:"2.0"});return}let a=`${n}:${e.id}`;s.set(a,{resolve:o,reject:r}),t.onmessage?t.onmessage(e):(s.delete(a),r(new Error(`No message handler registered for MCP server "${n}"`)))})}function vs(n,e,t){if("id"in e&&e.id!==null){let s=`${n}:${e.id}`,o=t.get(s);if(o)return o.resolve(e),t.delete(s),!0}return!1}function ks(n,e,t){let s=0,o=`${n}:`,r=Array.from(t.entries());for(let i of r){let[a,u]=i;a.startsWith(o)&&(u.reject(e),t.delete(a),s++)}return s}import{randomUUID as Fi}from"crypto";function Rs(n){if(typeof n!="object"||n===null)return!1;let e=n;return e.type==="transcript_mirror"&&typeof e.filePath=="string"&&Array.isArray(e.entries)}var Ki=500,Ui=1024*1024,Li=6e4,lt=class{constructor(e){this.options=e;this.holding=e.holdUntilFlush===!0}states=new Map;failures=[];holding;receivedEntryCount=0;enqueue(e){let t=Bi(e.filePath),s=$i(e.entries);this.receivedEntryCount+=s.length;let o=_s(t),r=this.states.get(o);r||(r={key:t,entries:[],bytes:0,tail:Promise.resolve()},this.states.set(o,r)),r.entries.push(...s),r.bytes+=Qi(s),!this.holding&&(this.options.flushMode==="eager"||r.entries.length>=Ki||r.bytes>=Ui)&&this.drain(r)}async flush(e={}){for(let t of this.states.values())this.drain(t);if(await Promise.all([...this.states.values()].map(t=>t.tail)),e.throwOnError===!0&&this.failures.length>0)throw new AggregateError(this.failures,`SessionStore failed to persist ${this.failures.length} transcript mirror batch(es).`)}async completeBarrier(){if(this.receivedEntryCount===0)throw new Error("SessionStore Fork persistence barrier received no transcript entries.");await this.flush({throwOnError:!0}),this.holding=!1}discardPending(){for(let e of this.states.values())e.entries=[],e.bytes=0}drain(e){if(e.entries.length===0)return;let t=e.entries;e.entries=[],e.bytes=0,e.tail=e.tail.then(async()=>{try{await Gi(this.options.store,e.key,t,this.options.appendTimeoutMs??Li)}catch(s){this.failures.push(s),this.options.diagnostics?.record(`[SessionStore] append failed for ${_s(e.key)}`,s),this.options.onMirrorError({type:"system",subtype:"mirror_error",error:s instanceof Error?s.message:String(s),key:{...e.key},uuid:Fi(),session_id:e.key.sessionId})}})}};function Bi(n){let e=n.replaceAll("\\","/").split("/").filter(Boolean),t=e.lastIndexOf("projects"),s=e.slice(t+1);if(t<0||s.length<2)throw new Error(`Invalid transcript mirror path: ${n}`);let o=s[0],r=/^([0-9a-f-]{36})\.jsonl$/i.exec(s[1]);if(s.length===2&&r)return{projectKey:o,sessionId:bs(r[1])};let i=bs(s[1]),a=s.slice(2),u=a.at(-1);a[a.length-1]=u.endsWith(".jsonl")?u.slice(0,-6):u;let c=a.join("/");return zi(c),{projectKey:o,sessionId:i,subpath:c}}function $i(n){return n.map((e,t)=>{if(typeof e!="object"||e===null||typeof e.type!="string")throw new Error(`Transcript mirror entry ${t} is not a typed object`);return e})}function bs(n){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(n))throw new Error(`Invalid transcript session id: ${n}`);return n}function zi(n){let e=n.split("/");if(!n||n.includes("\0")||/^[a-z]:/i.test(n)||e.some(t=>!t||t==="."||t===".."))throw new Error(`Invalid transcript subpath: ${n}`)}function _s(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}function Qi(n){return n.reduce((e,t)=>e+Buffer.byteLength(JSON.stringify(t))+1,0)}async function Gi(n,e,t,s){await Wi(n.append({...e},structuredClone(t)),s)}async function Wi(n,e){let t;n.catch(()=>{});try{await Promise.race([n,new Promise((s,o)=>{t=setTimeout(()=>o(new Gt(e)),e)})])}finally{t!==void 0&&clearTimeout(t)}}var Gt=class extends Error{constructor(e){super(`SessionStore append timed out after ${e}ms`),this.name="SessionStoreTimeoutError"}};function pt(n){if(!ae(n)||Array.isArray(n))return;let e=n.total_credits,t=n.model_usage;if(!Wt(e)||e<0||!ae(t)||Array.isArray(t))return;let s={};for(let[o,r]of Object.entries(t)){if(!ae(r)||Array.isArray(r))continue;let i=r.credits;Wt(i)&&i>=0&&(s[o]={credits:i})}return{total_credits:e,model_usage:s}}function mt(n){if(!ae(n)||Array.isArray(n))return null;let e={};Re(e,n,"userId"),Re(e,n,"userType"),G(e,n,"totalUsagePercentage"),dt(e,n,"isHighestTier"),G(e,n,"expiresAt"),Re(e,n,"upgradeUrl"),dt(e,n,"isQuotaExceeded"),dt(e,n,"isPlanQuotaProrated");let t=Cs(n.userQuota);t&&(e.userQuota=t);let s=Hi(n.addOnQuota);s&&(e.addOnQuota=s);let o=Ji(n.orgResourcePackage);return o&&(e.orgResourcePackage=o),e}function ae(n){return typeof n=="object"&&n!==null}function Wt(n){return typeof n=="number"&&Number.isFinite(n)}function Ht(n){return Object.keys(n).length>0}function G(n,e,t){let s=e[t];Wt(s)&&(n[t]=s)}function Re(n,e,t){let s=e[t];typeof s=="string"&&(n[t]=s)}function dt(n,e,t){let s=e[t];typeof s=="boolean"&&(n[t]=s)}function Cs(n){if(!ae(n)||Array.isArray(n))return;let e={};return G(e,n,"total"),G(e,n,"used"),G(e,n,"remaining"),G(e,n,"percentage"),Re(e,n,"unit"),Ht(e)?e:void 0}function Hi(n){if(!ae(n)||Array.isArray(n))return;let e=Cs(n)??{};return Re(e,n,"detailUrl"),Ht(e)?e:void 0}function Ji(n){if(!ae(n)||Array.isArray(n))return;let e={};return G(e,n,"used"),G(e,n,"cap"),G(e,n,"remaining"),G(e,n,"percentage"),dt(e,n,"available"),Re(e,n,"unit"),Ht(e)?e:void 0}function Es(){return Math.random().toString(36).substring(2,15)}function Ps(n,e){let t="type"in e&&!("subtype"in e)?{...e,subtype:e.type}:e;return{type:"control_request",request_id:n,request:t}}function Ts(n,e){return{type:"control_response",response:{subtype:"success",request_id:n,response:e}}}function Ms(n,e,t){return{type:"control_response",response:{subtype:"error",request_id:n,error:e,...t?{code:t}:{}}}}function Is(n){return typeof n=="object"&&n!==null&&n.type==="control_response"}function As(n){return typeof n=="object"&&n!==null&&n.type==="control_request"}function Ds(n){return typeof n=="object"&&n!==null&&(n.type==="control_cancel_request"||n.type==="control_cancel")}function Ke(n){if(typeof n!="object"||n===null)return;let e=n,t=e.subtype;if(typeof t=="string")return t;let s=e.type;return typeof s=="string"?s:void 0}function Os(n){if(typeof n!="object"||n===null)return!1;let e=n.type;return e==="keepalive"||e==="keep_alive"}function xs(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_text"}function qs(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_tool_use_summary"}function Ns(n){return typeof n=="object"&&n!==null&&n.type==="post_turn_summary"}function js(n){return typeof n=="object"&&n!==null&&n.type==="result"}var Yi="<synthetic>";function Xi(n){return n.type!=="assistant"||n.isApiErrorMessage===!0||n.message.model!==Yi?n:{...n,isApiErrorMessage:!0}}var ft=class n{static CUSTOM_CONTEXT_CAPABILITY="custom_context_v1";static SELECTED_SKILLS_CAPABILITY="selected_skills_v1";static INITIALIZE_TIMEOUT_MS=12e4;static BACKGROUND_TASKS_CAPABILITY="background_tasks_v1";static SIDE_QUESTION_CAPABILITY="side_question_v1";static GOAL_CAPABILITY="goal_v1";static GOAL_MAX_TURNS_CAPABILITY="goal_max_turns_v1";static PLAN_MODE_CAPABILITY="plan_mode_v1";static SESSION_STORE_FORK_BARRIER_CAPABILITY="session_store_fork_barrier_v1";static BYOK_CONFIG_MANAGEMENT_CAPABILITY="byok_config_management_v1";static REMOTE_PROJECTION_REQUEST_ID_PREFIX="daemon_worker_sdk_";transport;inputStream;pendingRequests=new Map;pendingInboundRequests=new Map;hooks;hookCallbacks=new Map;nextHookCallbackId=0;sdkMcpServers;sdkMcpTransports;pendingMcpResponses;sdkMcpToolOverrides;isSingleTurn;canUseTool;abortController;initConfig;onElicitation;onAuthExpired;fetchJobToken;fetchServiceAccountToken;diagnostics;controlRequestTimeoutMs;resolveModel;resolveModelTimeoutMs;transcriptMirrorBatcher;memoryCallbacks;skillEvolutionCallbacks;resolveSessionArtifacts;resolveStreamInitialization;initResponse;latestCommands=[];initializationPromise;resultMessage;pendingErrorResultExit=!1;readLoopPromise;closed=!1;authExpiredFired=!1;protocolHandshakeValidated=!1;cliCapabilities;customContextCapabilityWarningEmitted=!1;firstResultReceived=!1;firstResultReceivedResolve;memoryFlushPromise;endInputFlushPromise;skillEvolutionFlushPromise;closePromise;sessionStoreForkBarrierComplete=!1;constructor(e,t,s,o,r,i,a,u,c,d,m,p,l,f,y,g,S,k="batched",h,P,T,ne,R){if(this.transport=e,this.isSingleTurn=t,this.canUseTool=s,this.hooks=o??{},this.abortController=r,this.sdkMcpServers=i??new Map,this.sdkMcpTransports=p??new Map,this.pendingMcpResponses=l??new Map,this.sdkMcpToolOverrides=h??{},this.initConfig=a??{},this.onElicitation=u,this.onAuthExpired=d,this.fetchJobToken=f,this.fetchServiceAccountToken=P,this.diagnostics=c,this.controlRequestTimeoutMs=m??6e4,this.resolveModel=y,this.resolveModelTimeoutMs=g??500,this.memoryCallbacks=T,this.skillEvolutionCallbacks=ne,this.resolveSessionArtifacts=R,this.inputStream=new X(()=>{this.close().catch(()=>{})}),S&&(this.transcriptMirrorBatcher=new lt({store:S,flushMode:k,holdUntilFlush:this.initConfig.requireSessionStoreForkBarrier===!0,diagnostics:c,onMirrorError:M=>this.inputStream.enqueue(M)})),this.readLoopPromise=this.readMessages().catch(M=>{this.inputStream.error(M)}),this.initializationPromise=this.initConfig.resolveInitializationFromStream?this.waitForStreamInitialization():this.performInitialize(),this.initializationPromise.catch(()=>{}),this.abortController){let M=this.abortController.signal;M.aborted?this.close().catch(()=>{}):M.addEventListener("abort",()=>{this.close().catch(()=>{})},{once:!0})}}getRecord(e){return typeof e=="object"&&e!==null?e:void 0}normalizeLogPreview(e){let s=e.replace(/\s+/g," ").trim();return s.length>200?`${s.slice(0,200)}...`:s}extractMessagePreview(e){if(typeof e=="string")return this.normalizeLogPreview(e);if(Array.isArray(e)){for(let i of e){let a=this.extractMessagePreview(i);if(a)return a}return""}let t=this.getRecord(e);if(!t)return"";let s=t.text;if(typeof s=="string")return this.normalizeLogPreview(s);let o=this.extractMessagePreview(t.content);if(o)return o;let r=this.getRecord(t.message);return r?this.extractMessagePreview(r):""}getMessagePreviewSuffix(e){let t=this.extractMessagePreview(e);return t?` preview=${JSON.stringify(t)}`:""}getMessageType(e){let s=this.getRecord(e)?.type;return typeof s=="string"&&s?s:"unknown"}getMessageSubtype(e){let s=this.getRecord(e)?.subtype;return typeof s=="string"&&s?s:"none"}getMessageUuid(e){let s=this.getRecord(e)?.uuid;return typeof s=="string"&&s?s:"none"}recordInboundSessionMessage(e){this.diagnostics?.record(`[QueryRunner] inbound session_message received type=${this.getMessageType(e)} subtype=${this.getMessageSubtype(e)} uuid=${this.getMessageUuid(e)}${this.getMessagePreviewSuffix(e)}`)}recordOutboundSessionMessage(e){let t=this.getRecord(e)?.message,o=this.getRecord(t)?.content,r=Array.isArray(o)?o.length:0;this.diagnostics?.record(`[QueryRunner] outbound session_message sent type=${this.getMessageType(e)} uuid=${this.getMessageUuid(e)} content_blocks=${r}${this.getMessagePreviewSuffix(e)}`)}[Symbol.asyncIterator](){return this}async next(){return this.inputStream.next()}async return(){return await this.close(),{done:!0,value:void 0}}async throw(e){return await this.inputStream.throw(e),{done:!0,value:void 0}}async readMessages(){let e;try{for await(let t of this.transport.readMessages()){if(this.closed)break;if(Rs(t)){try{this.transcriptMirrorBatcher?.enqueue(t)}catch(o){this.diagnostics?.record("[QueryRunner] invalid transcript_mirror frame ignored:",o)}continue}if(Is(t)){this.handleControlResponse(t);continue}if(As(t)){this.handleControlRequest(t).catch(o=>{this.diagnostics?.record("[QueryRunner] Error handling control request:",o)});continue}if(Ds(t)){this.handleControlCancelRequest(t);continue}if(Os(t)||xs(t)||qs(t)||Ns(t))continue;if(js(t)){await this.transcriptMirrorBatcher?.flush();let o=t;this.recordInboundSessionMessage(o),this.resultMessage=o,this.pendingErrorResultExit=this.resultMessage.is_error===!0,this.firstResultReceived=!0,this.firstResultReceivedResolve?.(),this.firstResultReceivedResolve=void 0,this.inputStream.enqueue(o),this.isSingleTurn&&this.flushBeforeEndInput();continue}let s=Xi(t);if((s.type==="user"||s.type==="assistant")&&(this.pendingErrorResultExit=!1),this.recordInboundSessionMessage(s),s.type==="system"&&s.subtype==="init")try{let o=s;this.validateProtocolHandshake(o),this.cliCapabilities=new Set(o.capabilities??[]),this.replaceLatestCommands(o.commands),this.resolveStreamInitialization&&(this.initResponse=o,this.resolveStreamInitialization(this.initResponse),this.resolveStreamInitialization=void 0)}catch(o){throw this.inputStream.error(o),o}s.type==="system"&&s.subtype==="commands_changed"&&this.replaceLatestCommands(s.commands),this.dispatchMemoryCallbacks(s),this.dispatchSkillEvolutionCallbacks(s),this.notifyAuthExpiredIfNeeded(s),this.inputStream.enqueue(s)}}catch(t){this.isStructuredResultExit(t)?this.diagnostics?.record("[QueryRunner] exit code 1 accepted after the latest structured error result"):e=t}finally{await this.flushTranscriptMirrorForLifecycle();let t=e instanceof Error?e:new Error("Transport closed");this.firstResultReceivedResolve?.(),this.firstResultReceivedResolve=void 0;for(let[,s]of this.pendingRequests)s.reject(t);this.pendingRequests.clear(),e!==void 0?this.inputStream.error(e):this.inputStream.done()}}isStructuredResultExit(e){if(!this.pendingErrorResultExit||e===null||typeof e!="object")return!1;let t=e;return t.exitCode===1&&(t.signal===void 0||t.signal===null)}notifyAuthExpiredIfNeeded(e){if(!this.onAuthExpired||this.authExpiredFired)return;let s=e.type==="auth_status"&&!!e.error,o=e.type==="assistant"&&e.error==="authentication_failed";!s&&!o||(this.authExpiredFired=!0,Promise.resolve(this.onAuthExpired()).catch(r=>{this.diagnostics?.record("[QueryRunner] onAuthExpired callback threw:",r)}))}dispatchMemoryCallbacks(e){if(!(e.type!=="system"||!this.memoryCallbacks))try{let t;e.subtype==="memory_generation"?t=this.memoryCallbacks.onGenerationResult?.(e.result):e.subtype==="memory_consumption"&&(t=this.memoryCallbacks.onConsumptionResult?.(e.result)),t!==void 0&&Promise.resolve(t).catch(s=>{this.diagnostics?.record("[QueryRunner] memory callback threw:",s)})}catch(t){this.diagnostics?.record("[QueryRunner] memory callback threw:",t)}}dispatchSkillEvolutionCallbacks(e){if(!(e.type!=="system"||e.subtype!=="skill_evolution"||!this.skillEvolutionCallbacks))try{let t=this.skillEvolutionCallbacks.onResult?.(e.result);t!==void 0&&Promise.resolve(t).catch(s=>this.diagnostics?.record("[QueryRunner] skill evolution callback threw:",s))}catch(t){this.diagnostics?.record("[QueryRunner] skill evolution callback threw:",t)}}flushBeforeEndInput(){return this.endInputFlushPromise||(this.endInputFlushPromise=this.performFlushBeforeEndInput()),this.endInputFlushPromise}async performFlushBeforeEndInput(){try{let e=[];this.initConfig.memory!==void 0&&e.push(this.flushMemory()),this.initConfig.evolution?.skill!==void 0&&e.push(this.flushSkillEvolution());let s=(await Promise.allSettled(e)).find(o=>o.status==="rejected");if(s)throw s.reason}catch(e){this.diagnostics?.record("[QueryRunner] post-turn flush before end input failed:",e)}finally{this.transport.endInput()}}async request(e,t){if(t?.signal?.aborted)throw new j;let s=`${t?.requestIdPrefix??""}${Es()}`,o=Ps(s,e),r=t?.timeoutMs??this.controlRequestTimeoutMs,i=Ke(o.request)??"unknown",a=Date.now();return new Promise((u,c)=>{let d=null,m=()=>{try{this.transport.write(JSON.stringify({type:"control_cancel_request",request_id:s})+`
9
- `)}catch(f){this.diagnostics?.record("[QueryRunner] Failed to send control_cancel_request:",f)}},p=()=>{d&&(clearTimeout(d),d=null),t?.signal?.removeEventListener("abort",l)},l=()=>{this.pendingRequests.delete(s)&&(p(),this.diagnostics?.record(`[QueryRunner] control_request cancelled request_id=${s} subtype=${i}`),m(),c(new j))};this.pendingRequests.set(s,{resolve:f=>{p(),this.diagnostics?.record(`[QueryRunner] control_response received request_id=${s} subtype=${i} status=success duration_ms=${Date.now()-a}`),u(f)},reject:f=>{p(),this.diagnostics?.record(`[QueryRunner] control_response received request_id=${s} subtype=${i} status=error duration_ms=${Date.now()-a}`,f),c(f)}}),t?.signal?.addEventListener("abort",l,{once:!0}),r>0&&Number.isFinite(r)&&(d=setTimeout(()=>{if(!this.pendingRequests.has(s))return;this.pendingRequests.delete(s),p();let f=Date.now()-a;this.diagnostics?.record(`[QueryRunner] control_request timed out request_id=${s} subtype=${i} timeout_ms=${r} elapsed_ms=${f}`),m(),c(new _e({requestId:s,message:`Control request "${i}" timed out after ${r}ms`,code:zt,details:{requestType:i,timeoutMs:r,elapsedMs:f}}))},r));try{this.diagnostics?.record(`[QueryRunner] control_request sending request_id=${s} subtype=${i} timeout_ms=${r}`),this.transport.write(JSON.stringify(o)+`
10
- `),this.diagnostics?.record(`[QueryRunner] control_request sent request_id=${s} subtype=${i}`)}catch(f){p(),this.pendingRequests.delete(s),this.diagnostics?.record(`[QueryRunner] control_request send failed request_id=${s} subtype=${i}`,f),c(f)}})}handleControlResponse(e){let t=e.response,s=t.request_id,o=this.pendingRequests.get(s);if(!o){this.diagnostics?.record(`[QueryRunner] unmatched control_response received request_id=${s} status=${t.subtype}`);return}if(this.pendingRequests.delete(s),t.subtype==="success")o.resolve(t.response);else{let r=new _e({requestId:s,message:t.error,code:t.code,retryable:t.retryable,details:t.details});o.reject(r),this.processPendingPermissionRequests(t.pending_permission_requests)}}processPendingPermissionRequests(e){if(e)for(let t of e)Ke(t.request)==="can_use_tool"&&this.handleControlRequest(t).catch(s=>{this.diagnostics?.record("[QueryRunner] Error handling pending permission request:",s)})}async handleControlRequest(e){let t=e.request_id,s=Ke(e.request)??"unknown",o=Date.now(),r=new AbortController;this.pendingInboundRequests.set(t,{abortController:r}),this.diagnostics?.record(`[QueryRunner] inbound control_request received request_id=${t} subtype=${s}`);try{let i=await this.awaitAbortable(this.processControlRequest(e,r.signal),r.signal);if(!r.signal.aborted){let a=Ts(t,i);this.transport.write(JSON.stringify(a)+`
11
- `),this.diagnostics?.record(`[QueryRunner] inbound control_response sent request_id=${t} subtype=${s} status=success duration_ms=${Date.now()-o}`)}}catch(i){if(!r.signal.aborted){let{error:a,code:u}=Zi(i),c=Ms(t,a,u);this.transport.write(JSON.stringify(c)+`
12
- `),this.diagnostics?.record(`[QueryRunner] inbound control_response sent request_id=${t} subtype=${s} status=error duration_ms=${Date.now()-o}`,i)}}finally{this.pendingInboundRequests.delete(t)}}handleControlCancelRequest(e){let t=this.pendingInboundRequests.get(e.request_id);t&&(t.abortController.abort(),this.pendingInboundRequests.delete(e.request_id))}throwIfAborted(e){if(e.aborted)throw new j}validateProtocolHandshake(e){if(this.protocolHandshakeValidated)return;this.protocolHandshakeValidated=!0;let t=e.protocol_version,s=Qt;if(!t){this.diagnostics?.record(`[QueryRunner] CLI did not announce protocol_version. This SDK was built for ${s}. Consider upgrading qodercli for the version handshake.`);return}let o=Fs(t),r=Fs(s);if(!o||!r){this.diagnostics?.record(`[QueryRunner] Could not parse protocol_version "${t}" or built-in "${s}"; skipping handshake.`);return}if(o.major!==r.major)throw new F(t,s);o.minor<r.minor&&this.diagnostics?.record(`[QueryRunner] CLI protocol_version ${t} is older than this SDK's ${s}. New optional fields may be absent.`)}async awaitAbortable(e,t){if(t.aborted)throw new j;return new Promise((s,o)=>{let r=()=>{o(new j)};t.addEventListener("abort",r,{once:!0}),e.then(i=>{t.removeEventListener("abort",r),s(i)},i=>{t.removeEventListener("abort",r),o(i)})})}async processControlRequest(e,t){this.throwIfAborted(t);let s=e.request,o=Ke(s),r=s;switch(o){case"resolve_session_artifacts":{if(!this.resolveSessionArtifacts)throw new Error("resolve_session_artifacts_unavailable: No resolveSessionArtifacts callback configured");let i=r.local_session_id,a=r.cwd;if(typeof i!="string"||i.length===0||typeof a!="string"||a.length===0)throw new TypeError("resolve_session_artifacts requires local_session_id and cwd");let u=await this.awaitAbortable(Promise.resolve().then(()=>this.resolveSessionArtifacts(i,a)),t);return Ss(u)}case"fetch_job_token":{if(!this.fetchJobToken)throw new Error("job_token_unavailable: No fetchJobToken callback configured");let i=r.reason??"initial",a=r.session_id,u=e.request_id,c=await this.awaitAbortable(this.fetchJobToken({requestId:u,reason:i,sessionId:a},{signal:t}),t);if(!c?.token)throw new Error("job_token_unavailable: Host did not provide a Job Token");let d=c.expiresAt;if(d!==void 0&&(!Number.isFinite(d)||d<1e12))throw new Error("job_token_unavailable: expiresAt must be a Unix timestamp in milliseconds");return this.diagnostics?.record(`[QueryRunner] fetch_job_token fulfilled: reason=${i}`),{token:c.token,...d!==void 0?{expires_at:d}:{}}}case"fetch_service_account_token":{if(!this.fetchServiceAccountToken)throw new Error("service_account_token_unavailable: No fetchServiceAccountToken callback configured");let i=await this.awaitAbortable(this.fetchServiceAccountToken(),t);if(!i?.token)throw new Error("service_account_token_unavailable: Host did not provide a Service Account token");let a=i.expiresAt;if(a!==void 0&&(!Number.isFinite(a)||a<1e12))throw new Error("service_account_token_unavailable: expiresAt must be a Unix timestamp in milliseconds");return this.diagnostics?.record("[QueryRunner] fetch_service_account_token fulfilled"),{token:i.token,...a!==void 0?{expires_at:a}:{}}}case"can_use_tool":{let i=r.tool_name,a=r.input??{};if(!this.canUseTool)throw new Error("canUseTool callback is not provided.");let u=r.tool_use_id,c=r.permission_suggestions??r.suggestions,d=r.blocked_path,m=r.decision_reason,p=r.title,l=r.display_name,f=r.description,y=r.agent_id,g=r.permission_kind,S=r.options,k=r.details,h=await this.awaitAbortable(this.canUseTool(i,a,{signal:t,suggestions:c,blockedPath:d,decisionReason:m,title:p,displayName:l,description:f,toolUseID:u,agentID:y,permissionKind:g,permissionOptions:S,details:k}),t);if(h.behavior==="deny"&&!h.message)throw new Error("Permission deny result must include a message.");return h.behavior==="allow"?{...h,updatedInput:h.updatedInput??a,toolUseID:u}:{...h,toolUseID:u}}case"hook_callback":{let i=r.callback_id;if(!i)throw new Error("Hook callback missing callback_id");return this.invokeRegisteredHookCallback(i,r.input,r.tool_use_id,t)}case"memory_should_generate":{let i=r.callbackId;if(!i)throw new Error("Memory shouldGenerate request missing callbackId");let a=this.memoryCallbacks?.shouldGenerateCallbacks.get(i);if(!a)throw new Error(`Unknown memory shouldGenerate callback: ${i}`);let u=await this.awaitAbortable(a(r.input,{signal:t}),t);if(!u||typeof u.run!="boolean")throw new TypeError("Memory shouldGenerate callback must return { run: boolean }");return{run:u.run,...typeof u.reason=="string"?{reason:u.reason}:{}}}case"skill_evolution_should_review":{let i=r.callbackId;if(!i)throw new Error("Skill evolution shouldReview request missing callbackId");let a=this.skillEvolutionCallbacks?.shouldReviewCallbacks.get(i);if(!a)throw new Error(`Unknown skill evolution shouldReview callback: ${i}`);let u=await this.awaitAbortable(a(r.input,{signal:t}),t);if(!u||typeof u.run!="boolean")throw new TypeError("Skill evolution shouldReview callback must return { run: boolean }");return{run:u.run,...typeof u.reason=="string"?{reason:u.reason}:{}}}case"mcp_message":{let i=r.server_name,a=r.message,u=this.sdkMcpTransports.get(i);if(!u)throw new Error(`Unknown in-process MCP server: ${i}`);return{mcp_response:await this.awaitAbortable(ws(i,a,u,this.pendingMcpResponses),t)}}case"elicitation":case"elicitation_response":return this.onElicitation?await this.awaitAbortable(this.onElicitation({serverName:r.mcp_server_name??"",message:r.message??r.prompt??"",mode:r.mode,url:r.url,elicitationId:r.elicitation_id,requestedSchema:r.requested_schema,title:r.title,displayName:r.display_name,description:r.description},{signal:t}),t):{action:"cancel"};case"get_model_policy":{if(!this.resolveModel)return{type:"get_model_policy"};let i={purpose:r.purpose,sessionId:r.sessionId,turnIndex:r.turnIndex,agentId:r.agentId,agentType:r.agentType,resolvedModel:r.resolvedModel,availableModels:r.models??[]},a=this.resolveModelTimeoutMs,u=Promise.resolve(this.resolveModel(i)),c,d=new Promise((g,S)=>{c=setTimeout(()=>{S(new Ne(a))},a)}),m;try{m=await this.awaitAbortable(Promise.race([u,d]),t)}finally{clearTimeout(c)}let p={type:"get_model_policy",...m?.parameters!==void 0?{parameters:m.parameters}:{}},l=m?.model;if(typeof l=="string")p.model=l;else if(l!==void 0){let{model:g,...S}=l;p.model=g,p.custom_model={...S,style:S.style??"openai"}}let f=m?.taskId?.trim();f&&(p.task_id=f);let y=m?.subTask?.trim();return y&&(p.sub_task=y),p}default:throw new Error(`Unhandled control request subtype: ${o??"unknown"}`)}}async initialize(){return this.initializationPromise||(this.initializationPromise=this.performInitialize()),this.initializationPromise}async performInitialize(){await this.initConfig.beforeInitialize?.();let e={type:"initialize",modelPolicyProvider:this.resolveModel!==void 0,supportsCatalogReadyInitialize:!0,supportsAvailableModelsUpdate:!0,supportsCommandsChanged:!0,initializeTimeoutMs:n.INITIALIZE_TIMEOUT_MS},t={};for(let[o,r]of Object.entries(this.hooks)){if(!r||r.length===0)continue;let i=[];for(let a of r){let u=a.hooks.map(c=>{let d=`hook_${this.nextHookCallbackId++}`;return this.hookCallbacks.set(d,c),d});u.length!==0&&i.push({matcher:a.matcher,hookCallbackIds:u,timeout:a.timeout})}i.length>0&&(t[o]=i)}if(Object.keys(t).length>0&&(e.hooks=t),this.initConfig.systemPrompt!==void 0&&(e.systemPrompt=this.initConfig.systemPrompt),this.initConfig.appendSystemPrompt!==void 0&&(e.appendSystemPrompt=this.initConfig.appendSystemPrompt),this.initConfig.modelRequestPatches!==void 0&&(e.modelRequestPatches=this.initConfig.modelRequestPatches),this.initConfig.agents&&(e.agents=this.initConfig.agents),this.initConfig.skills!==void 0&&(e.skills=this.initConfig.skills),this.initConfig.promptSuggestions!==void 0&&(e.promptSuggestions=this.initConfig.promptSuggestions),this.initConfig.enableFileCheckpointing!==void 0&&(e.enableFileCheckpointing=this.initConfig.enableFileCheckpointing),this.initConfig.independentPlanModeControls===!0){e.independentPlanModeControls=!0;let o=je(this.initConfig.permissionMode);o!==void 0&&(e.permissionMode=o)}this.initConfig.memory!==void 0&&(e.memory=this.initConfig.memory),this.initConfig.evolution!==void 0&&(e.evolution=this.initConfig.evolution),this.resolveSessionArtifacts!==void 0&&(e.resolveSessionArtifacts=!0),this.sdkMcpServers.size>0&&(e.sdkMcpServers=Array.from(this.sdkMcpServers.keys()),Object.keys(this.sdkMcpToolOverrides).length>0&&(e.sdkMcpToolOverrides=this.sdkMcpToolOverrides));let s=await this.request(e,{timeoutMs:n.INITIALIZE_TIMEOUT_MS});if(s&&typeof s=="object"){let o=s;this.initResponse=o,this.replaceLatestCommands(o.commands),this.cliCapabilities=new Set(o.capabilities??[])}if(!this.initResponse)throw new Error("Failed to receive initialization response");if(this.initConfig.goalMaxTurns!==void 0&&!this.cliCapabilities?.has(n.GOAL_MAX_TURNS_CAPABILITY))throw new Q(n.GOAL_MAX_TURNS_CAPABILITY);if(this.initConfig.planMode!==void 0){if(!this.cliCapabilities?.has(n.PLAN_MODE_CAPABILITY))throw new Q(n.PLAN_MODE_CAPABILITY);let o={subtype:"set_plan_mode",active:this.initConfig.planMode};await this.request(o)}return await this.completeSessionStoreForkBarrier(),this.initResponse}async completeSessionStoreForkBarrier(){if(this.initConfig.requireSessionStoreForkBarrier!==!0)return;if(!this.cliCapabilities?.has(n.SESSION_STORE_FORK_BARRIER_CAPABILITY))throw new Q(n.SESSION_STORE_FORK_BARRIER_CAPABILITY);let e=this.transcriptMirrorBatcher;if(!e)throw new Error("SessionStore Fork persistence barrier requires a transcript mirror.");await e.completeBarrier(),this.sessionStoreForkBarrierComplete=!0}async flushTranscriptMirrorForLifecycle(){if(this.initConfig.requireSessionStoreForkBarrier===!0&&!this.sessionStoreForkBarrierComplete){this.transcriptMirrorBatcher?.discardPending();return}await this.transcriptMirrorBatcher?.flush()}async invokeRegisteredHookCallback(e,t,s,o){let r=this.hookCallbacks.get(e);if(!r)throw new Error(`Unknown hook callback: ${e}`);return await this.awaitAbortable(r(t,s,{signal:o}),o)??{continue:!0}}async initializationResult(){return this.initialize()}replaceLatestCommands(e){this.latestCommands=(e??[]).map(t=>({...t}))}getLatestCommands(){return this.latestCommands.map(e=>({...e}))}waitForStreamInitialization(){return new Promise(e=>{this.resolveStreamInitialization=e})}async streamInput(e){(async()=>{try{await this.initialize();let t=0;for await(let s of e){if(this.closed)break;t+=1;let r=Object.prototype.hasOwnProperty.call(s,"custom_context")?s.custom_context:this.initConfig.customContext,i=typeof s.uuid=="string"&&s.uuid.trim().length>0?s.uuid:Vi(),a={...s,uuid:i,...r===void 0?{}:{custom_context:r}};if(this.pendingErrorResultExit=!1,a.selected_skills!==void 0&&a.selected_skills.length>0&&!this.cliCapabilities?.has(n.SELECTED_SKILLS_CAPABILITY))throw new Q(n.SELECTED_SKILLS_CAPABILITY);r!==void 0&&!this.cliCapabilities?.has(n.CUSTOM_CONTEXT_CAPABILITY)&&!this.customContextCapabilityWarningEmitted&&(this.customContextCapabilityWarningEmitted=!0,this.diagnostics?.record("[QueryRunner] custom_context requested but paired CLI does not advertise custom_context_v1; the field may be ignored")),this.transport.write(JSON.stringify(a)+`
13
- `),this.recordOutboundSessionMessage(a)}t>0&&await this.waitForFirstResult(),(!this.isSingleTurn||!this.firstResultReceived)&&await this.flushBeforeEndInput()}catch(t){this.diagnostics?.record("[QueryRunner] streamInput error:",t),this.inputStream.error(t instanceof Error?t:new Error(String(t))),this.transport.endInput()}})().catch(()=>{})}async interrupt(){let t=(await this.request({type:"interrupt"}))?.still_queued;if(Array.isArray(t))return{still_queued:t.filter(s=>typeof s=="string")}}async cancelAsyncMessage(e){return(await this.request({subtype:"cancel_async_message",message_uuid:e})).cancelled}async stopTask(e){await this.requireCliCapability(n.BACKGROUND_TASKS_CAPABILITY),await this.request({subtype:"stop_task",task_id:e})}async backgroundTasks(e){await this.requireCliCapability(n.BACKGROUND_TASKS_CAPABILITY);let t=await this.request({subtype:"background_tasks",tool_use_id:e});return typeof t?.backgrounded=="boolean"?t.backgrounded:!0}async setGoal(e){await this.requireCliCapability(n.GOAL_CAPABILITY);let t={subtype:"set_goal"};return e.objective!==void 0&&(t.objective=e.objective),e.status!==void 0&&(t.status=e.status),e.creditsBudget!==void 0&&(t.credits_budget=e.creditsBudget),(await this.request(t))?.goal??null}async setGoalMaxTurns(e){e!==null&&Fe(e),await this.requireCliCapability(n.GOAL_MAX_TURNS_CAPABILITY);let t={subtype:"set_goal_max_turns",max_turns:e},s=await this.request(t);return Fe(s.goal_max_turns),s.goal_max_turns}async getGoal(){await this.requireCliCapability(n.GOAL_CAPABILITY);let e={subtype:"get_goal"};return(await this.request(e))?.goal??null}async clearGoal(){await this.requireCliCapability(n.GOAL_CAPABILITY);let e={subtype:"clear_goal"};return(await this.request(e))?.cleared===!0}async setPlanMode(e){await this.requireCliCapability(n.PLAN_MODE_CAPABILITY);let t={subtype:"set_plan_mode",active:e};return(await this.request(t)).plan_mode}async getPlanMode(){await this.requireCliCapability(n.PLAN_MODE_CAPABILITY);let e={subtype:"get_plan_mode"};return(await this.request(e)).plan_mode}async requireCliCapability(e){if(await this.initializationResult(),!this.cliCapabilities?.has(e))throw new Q(e)}async setPermissionMode(e){let t=this.initConfig.independentPlanModeControls===!0?je(e):e==="yolo"?"bypassPermissions":e;if(t===void 0)throw new Error("permissionMode is required.");await this.request({type:"set_permission_mode",mode:t,...this.initConfig.independentPlanModeControls===!0?{preservePlanMode:!0}:{}})}waitForFirstResult(){return this.firstResultReceived||this.closed?Promise.resolve():new Promise(e=>{if(this.abortController?.signal.aborted){e();return}this.firstResultReceivedResolve=e,this.abortController?.signal.addEventListener("abort",()=>e(),{once:!0})})}async setModel(e){await this.request({type:"set_model",model:e??""})}async enableRemoteProjection(e,t={}){if(typeof e!="string"||e.trim().length===0)throw new TypeError("remoteSessionId must be a non-empty string");if(t.fromSequenceNum!==void 0&&(!Number.isSafeInteger(t.fromSequenceNum)||t.fromSequenceNum<=0))throw new TypeError("fromSequenceNum must be a positive safe integer");await this.request({type:"enable_remote_projection",remote_session_id:e,...t.suppressInitialIdleStateEvents===!0?{suppress_initial_idle_state_events:!0}:{},...t.skipInitialFlush===!0?{skip_initial_flush:!0}:{},...t.fromSequenceNum===void 0?{}:{from_sequence_num:t.fromSequenceNum}},{requestIdPrefix:n.REMOTE_PROJECTION_REQUEST_ID_PREFIX,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}})}async disableRemoteProjection(e={}){let t=await this.request({type:"disable_remote_projection"},{requestIdPrefix:n.REMOTE_PROJECTION_REQUEST_ID_PREFIX,...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}});if(!(typeof t?.remote_session_id!="string"||t.remote_session_id.length===0||typeof t.last_sequence_num!="number"||!Number.isSafeInteger(t.last_sequence_num)||t.last_sequence_num<=0))return{remoteSessionId:t.remote_session_id,lastSequenceNum:t.last_sequence_num}}async setProxy(e){await this.request({type:"set_proxy",proxy:e||null})}async generateSessionTitle(e,t){return(await this.request({type:"generate_session_title",description:e,...t?.persist!==void 0?{persist:t.persist}:{}}))?.title??null}async askSideQuestion(e,t){await this.requireCliCapability(n.SIDE_QUESTION_CAPABILITY);let s=await this.request({subtype:"side_question",question:e,...t?.history?.length?{history:t.history.map(o=>({...o}))}:{}},{timeoutMs:0,signal:t?.signal});return s?.response==null?null:{response:s.response,synthetic:s.synthetic??!1,...s.refusal_fallback?{refusalFallback:{originalModel:s.refusal_fallback.original_model,fallbackModel:s.refusal_fallback.fallback_model,content:s.refusal_fallback.content}}:{}}}async addDirectories(e){if(!Array.isArray(e))throw new Error("directories must be an array");return await this.request({type:"add_directories",directories:e})}async applyFlagSettings(e){await this.request({type:"apply_flag_settings",settings:e})}async supportedCommands(){return await this.initializationResult(),this.getLatestCommands()}async getAvailableModels(e){let t={subtype:"get_models",...e?.fetchStrategy?{fetchStrategy:e.fetchStrategy}:{},...e?.uid?{uid:e.uid}:{},...e?.outerProviders?{outerProviders:e.outerProviders}:{}};return(await this.request(t))?.models??[]}async listByokProviders(){try{return(await this.request({type:"get_byok_config"}))?.providers??null}catch{return null}}async validateByokModel(e){try{let t=await this.request({type:"validate_byok_model",provider:e.provider,model:e.model,api_key:e.api_key,...e.url!==void 0?{url:e.url}:{},...e.style!==void 0?{style:e.style}:{}});return typeof t?.success=="boolean"?t.success:null}catch{return null}}async listByokConfigs(){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"list_byok_configs"})).configs}async createByokConfig(e){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"create_byok_config",config:e})).config}async updateByokConfig(e){await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"update_byok_config",config:e})}async deleteByokConfig(e){await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"delete_byok_config",target:e})}async checkByokConfig(e){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"check_byok_config",config:e})}async supportedAgents(){return(await this.initializationResult()).agents??[]}async accountInfo(){try{let t=await this.request({type:"account_info"});if(t?.account&&Object.keys(t.account).length>0)return t.account}catch{}return(await this.initializationResult()).account??{}}async mcpServerStatus(){return(await this.request({type:"mcp_status"}))?.servers??[]}async getContextUsage(){return await this.request({type:"get_context_usage"})}async getUsageInfo(){try{let e=await this.request({type:"get_usage_info"}),t=mt(e?.usage),s=pt(e?.session);return!t&&!s?null:{...t??{},...s?{session:s}:{}}}catch{return null}}async reloadPlugins(){let e=await this.request({type:"reload_plugins"});return this.replaceLatestCommands(e.commands),e}async reloadSkills(){return await this.requireCliCapability("reload_skills_v1"),await this.request({type:"reload_skills"})}async listPlugins(){return(await this.request({type:"list_plugins"})).plugins}async rewindFiles(e,t){let s={type:"rewind_files",user_message_id:e};t?.dryRun&&(s.dry_run=!0);let r=await this.request(s);if(!t?.dryRun&&r?.canRewind===!1)throw new Error(typeof r.error=="string"&&r.error.length>0?r.error:"Unable to rewind files.");return r}async rewind(e,t){if(!(await this.initializationResult()).capabilities?.includes("session_rewind_v1"))throw new Error("The connected qodercli does not support full session rewind (session_rewind_v1).");let o={type:"rewind",user_message_id:e,scope:t?.scope??"both"};return t?.dryRun&&(o.dry_run=!0),await this.request(o)}async seedReadState(e,t){await this.request({type:"seed_read_state",path:e,mtime:t})}async flushMemory(){return this.memoryFlushPromise||(this.memoryFlushPromise=this.performMemoryFlush().finally(()=>{this.memoryFlushPromise=void 0})),this.memoryFlushPromise}async flushSkillEvolution(){return this.skillEvolutionFlushPromise||(this.skillEvolutionFlushPromise=this.performSkillEvolutionFlush().finally(()=>{this.skillEvolutionFlushPromise=void 0})),this.skillEvolutionFlushPromise}async performSkillEvolutionFlush(){await this.requireSkillEvolutionEnabled(),await this.request({type:"flush_skill_evolution"})}async requireSkillEvolutionEnabled(){let e=await this.initializationResult();if(!this.cliCapabilities?.has("skill_evolution_v1"))throw new Q("skill_evolution_v1");if(e.evolution?.skill?.enabled!==!0||e.evolution.skill.requester!=="sdk")throw new Error("The connected CLI did not enable SDK skill evolution for this query")}async performMemoryFlush(){await this.requireSdkMemoryEnabled(),await this.request({type:"flush_memory"})}async refreshMemory(){await this.requireSdkMemoryEnabled(),await this.request({type:"refresh_memory"})}async requireSdkMemoryEnabled(){let e=await this.initializationResult();if(e.memory?.enabled!==!0||e.memory.requester!=="sdk")throw new Error("The connected CLI did not enable SDK memory for this query")}async reconnectMcpServer(e){await this.request({type:"mcp_reconnect",serverName:e})}async toggleMcpServer(e,t){await this.request({type:"mcp_toggle",serverName:e,enabled:t})}async setMcpServers(e){let t=Ln(e);return await this.request({type:"mcp_set_servers",servers:t})??{added:[],removed:[],errors:{}}}async injectMcpToken(e,t){await this.request({type:"mcp_inject_token",serverName:e,token:t})}async mcpAuthenticate(e,t){let s=await this.request({type:"mcp_authenticate",serverName:e,...t!==void 0?{redirectUri:t}:{}}),o=s?.requiresUserAction===!0,r=typeof s?.authUrl=="string"?s.authUrl:void 0;if(o&&r===void 0)throw new Error("mcp_authenticate response set requiresUserAction=true but did not include an authUrl");return o?{authUrl:r,requiresUserAction:!0}:{requiresUserAction:!1}}async mcpSubmitOAuthCallbackUrl(e,t){await this.request({type:"mcp_oauth_callback_url",serverName:e,callbackUrl:t})}async mcpClearAuth(e){await this.request({type:"mcp_clear_auth",serverName:e})}async close(){return this.closePromise||(this.closePromise=this.performClose()),this.closePromise}async performClose(){if(this.closed)return;if((this.initConfig.memory!==void 0||this.initConfig.evolution?.skill!==void 0)&&(this.initResponse?.memory?.enabled===!0||this.initResponse?.evolution?.skill?.enabled===!0)&&this.transport.isReady()&&this.abortController?.signal.aborted!==!0)try{await(this.endInputFlushPromise??this.flushBeforeEndInput())}catch(s){this.diagnostics?.record("[QueryRunner] post-turn flush during close failed:",s)}this.closed=!0;for(let[,s]of this.pendingInboundRequests)s.abortController.abort();this.pendingInboundRequests.clear(),this.hookCallbacks.clear();let e=new Error("SDK closing");for(let[s,o]of this.sdkMcpTransports){try{await o.close()}catch(r){this.diagnostics?.record(`[QueryRunner] error closing SDK MCP transport "${s}":`,r)}ks(s,e,this.pendingMcpResponses)}let t;try{await this.transport.close()}catch(s){t={error:s}}try{await this.readLoopPromise}catch{}if(await this.flushTranscriptMirrorForLifecycle(),t)throw t.error}async[Symbol.asyncDispose](){await this.close()}};function Zi(n){let e=n instanceof Error?n.message:String(n),t=typeof n=="object"&&n!==null?n.code:void 0,s=typeof t=="string"&&t.length>0?t:void 0,o=/^([a-z][a-z0-9_]*):\s*(.*)$/.exec(e);if(o){let r=s??o[1];return(!s||s===o[1])&&(e=o[2]||e),{error:e,code:r}}return s?{error:e,code:s}:{error:e}}function Fs(n){let e=/^(\d+)\.(\d+)(?:\.\d+)?(?:[-+].*)?$/.exec(n);return e?{major:Number(e[1]),minor:Number(e[2])}:null}var gt=class{sendMcpMessage;isClosed=!1;onclose;onerror;onmessage;constructor(e){this.sendMcpMessage=e}async start(){}async send(e){if(this.isClosed)throw new Error("Transport is closed");this.sendMcpMessage(e)}async close(){this.isClosed||(this.isClosed=!0,this.onclose?.())}get closed(){return this.isClosed}};import{randomUUID as Ks}from"crypto";var ea="QODER_CLOUD_AGENT_API_BASE",ta="https://api.qoder.com/api/v1/cloud",Z={agentMessage:"agent.message",modelRequestEnd:"span.model_request_end",idle:"session.status_idle",error:"session.error",terminated:"terminated",userMessage:"user.message",userInterrupt:"user.interrupt"},na=1024,Us=1*1024*1024,Ls=4*1024*1024,sa=8*1024,Vt=class extends Error{code="auth_access_token_env_var_not_configured";constructor(e){super(`The auth access token environment variable "${e}" is not set; set it or pass auth.accessToken directly.`),this.name="CloudAuthAccessTokenEnvVarError"}},ht=class extends Error{code="cloud_agent_auth_requires_access_token";constructor(){super("options.experimentalCloudAgent requires PAT authentication via accessToken() or accessTokenFromEnv()."),this.name="CloudAgentUnsupportedAuthError"}},Yt=class extends Error{code="cloud_agent_api_error";status;constructor(e,t){super(`Cloud Agent API request failed with status ${e}: ${t}`),this.name="CloudAgentApiError",this.status=e}},oa=new Set(["abortController","auth","experimentalCloudAgent","debug","debugFile","stderr","env","includePartialMessages","onAuthExpired"]);function Qs(n){if(!n.experimentalCloudAgent)return;let e=Object.keys(n).filter(r=>n[r]!==void 0&&!oa.has(r));if(e.length>0)throw new Error(`options.experimentalCloudAgent cannot be combined with CLI runtime options: ${e.join(", ")}`);if(n.auth?.type!=="accessToken")throw new ht;let{agent:t,session:s}=n.experimentalCloudAgent;if(t&&Ce(t)&&Jt(t))throw new Error("options.experimentalCloudAgent.agent must specify either id or create, not both.");if(s&&Ce(s)&&Jt(s))throw new Error("options.experimentalCloudAgent.session must specify either id or create, not both.");if(s&&Ce(s)&&t!==void 0)throw new Error("options.experimentalCloudAgent.agent cannot be combined with experimentalCloudAgent.session.id because an existing session already selects its agent.");let o=!!s&&Ce(s);if(!o&&t===void 0)throw new Error("options.experimentalCloudAgent.agent is required when experimentalCloudAgent.session.id is not provided.");if(!o){if(!s||!Jt(s))throw new Error("options.experimentalCloudAgent.session.create is required when creating a Cloud Agent session.");if(typeof s.create.environment_id!="string"||s.create.environment_id.length===0)throw new Error("options.experimentalCloudAgent.session.create.environment_id is required when creating a Cloud Agent session.")}}function Ce(n){return"id"in n&&n.id!==void 0}function Jt(n){return"create"in n&&n.create!==void 0}function Gs(n){return new Xt(n)}var Xt=class{experimentalCloudAgent;inputStream;abortController=new AbortController;accessToken;apiBase;diagnostics;onAuthExpired;sessionReadyPromise;readLoopPromise;sseConnected=wa();startedAt=Date.now();closed=!1;authExpiredFired=!1;sessionId;assistantTextParts=[];currentTurnId;lastSseEventId;hasCurrentTurn=!1;pendingTurnEvents=[];latestUsage=zs();latestModelUsage={};totalCostUsd=0;postedMessages=0;activeInputStreams=0;idleSeen=!1;resultEmitted=!1;constructor(e){if(!e.options.experimentalCloudAgent)throw new Error("options.experimentalCloudAgent is required for CloudAgentQuery.");this.experimentalCloudAgent=e.options.experimentalCloudAgent,this.diagnostics=e.diagnostics,this.onAuthExpired=e.options.onAuthExpired,this.accessToken=ra(e.options.auth,e.options.env),this.apiBase=ia(),this.inputStream=new X(()=>{this.close().catch(()=>{})});let t=e.options.abortController?.signal;t?.aborted?this.abortController.abort():t?.addEventListener("abort",()=>{this.close().catch(()=>{})},{once:!0}),this.sessionReadyPromise=this.initializeCloudSession(),this.readLoopPromise=this.readCloudEvents().catch(s=>{this.sseConnected.reject(s),this.closed||this.inputStream.error(s)}),this.streamInput(ya(e.prompt)).catch(s=>{this.closed||this.inputStream.error(s)})}[Symbol.asyncIterator](){return this}async next(){return this.inputStream.next()}async return(){return await this.close(),{done:!0,value:void 0}}async throw(e){return await this.inputStream.throw(e),{done:!0,value:void 0}}async initializationResult(){return(await this.sessionReadyPromise).init}async streamInput(e){this.activeInputStreams+=1,(async()=>{try{await this.sessionReadyPromise,await this.sseConnected.promise;for await(let t of e){if(this.closed)break;let s=ha(t);this.beginPendingTurn();let o=await this.postSessionEvents([{type:Z.userMessage,content:s}]);this.postedMessages+=1,this.activateTurn(o.find(r=>r.type===Z.userMessage)?.turnId)}}finally{this.activeInputStreams=Math.max(0,this.activeInputStreams-1),this.finishIfIdle()}})().catch(t=>{this.closed||this.inputStream.error(t)})}async interrupt(){await this.sessionReadyPromise,await this.postSessionEvents([{type:Z.userInterrupt}])}async cancelAsyncMessage(e){this.unsupported("cancelAsyncMessage")}async stopTask(e){this.unsupported("stopTask")}async backgroundTasks(e){this.unsupported("backgroundTasks")}async setPermissionMode(e){this.unsupported("setPermissionMode")}async setModel(e){this.unsupported("setModel")}async setProxy(e){this.unsupported("setProxy")}async generateSessionTitle(e,t){this.unsupported("generateSessionTitle")}async addDirectories(e){this.unsupported("addDirectories")}async applyFlagSettings(e){this.unsupported("applyFlagSettings")}async supportedCommands(){this.unsupported("supportedCommands")}async getAvailableModels(){this.unsupported("getAvailableModels")}async listByokProviders(){this.unsupported("listByokProviders")}async validateByokModel(e){this.unsupported("validateByokModel")}async listByokConfigs(){this.unsupported("listByokConfigs")}async createByokConfig(e){this.unsupported("createByokConfig")}async updateByokConfig(e){this.unsupported("updateByokConfig")}async deleteByokConfig(e){this.unsupported("deleteByokConfig")}async checkByokConfig(e){this.unsupported("checkByokConfig")}async supportedAgents(){this.unsupported("supportedAgents")}async mcpServerStatus(){this.unsupported("mcpServerStatus")}async getContextUsage(){this.unsupported("getContextUsage")}async getUsageInfo(){this.unsupported("getUsageInfo")}async reloadPlugins(){this.unsupported("reloadPlugins")}async reloadSkills(){this.unsupported("reloadSkills")}async listPlugins(){this.unsupported("listPlugins")}async accountInfo(){this.unsupported("accountInfo")}async rewindFiles(e,t){this.unsupported("rewindFiles")}async rewind(e,t){this.unsupported("rewind")}async seedReadState(e,t){this.unsupported("seedReadState")}async flushMemory(){this.unsupported("flushMemory")}async flushSkillEvolution(){this.unsupported("flushSkillEvolution")}async refreshMemory(){this.unsupported("refreshMemory")}async mcpAuthenticate(e,t){this.unsupported("mcpAuthenticate")}async mcpSubmitOAuthCallbackUrl(e,t){this.unsupported("mcpSubmitOAuthCallbackUrl")}async close(){this.finish();try{await this.readLoopPromise}catch{}}async[Symbol.asyncDispose](){await this.close()}async initializeCloudSession(){if(this.closed)throw new Error("Cloud Agent query is closed.");let{session:e}=this.experimentalCloudAgent,t;if(e&&Ce(e))t=e.id;else{let s=await this.resolveAgentId(),o=e.create,r=await this.requestJson("/sessions",{method:"POST",body:{agent:s,...ua(o)}});t=Bs(r,"Cloud session")}return this.sessionId=t,this.diagnostics?.record(`[cloud-agent] session ready: ${t}`),{sessionId:t,init:{commands:[],agents:[],output_style:"cloud-agent",available_output_styles:["cloud-agent"],models:[],account:{}}}}async resolveAgentId(){let{agent:e}=this.experimentalCloudAgent;if(!e)throw new Error("options.experimentalCloudAgent.agent is required when experimentalCloudAgent.session.id is not provided.");if(Ce(e))return e.id;let t=await this.requestJson("/agents",{method:"POST",body:aa(e.create)});return Bs(t,"Cloud agent")}async readCloudEvents(){let{sessionId:e}=await this.sessionReadyPromise,t=0;for(;!this.closed;){let s=this.lastSseEventId;if(await this.readCloudEventStream(e),this.closed||this.resultEmitted)return;if(!this.shouldReconnectSse()||t>=3){this.finishAfterSseClosed();return}this.lastSseEventId!==s&&(t=0),t+=1,await Sa(250*t,this.abortController.signal)}}async readCloudEventStream(e){let t=new URL(`${this.apiBase}/sessions/${encodeURIComponent(e)}/events/stream`),s=this.lastSseEventId??this.experimentalCloudAgent.stream?.afterId;s&&t.searchParams.set("after_id",s),this.experimentalCloudAgent.stream?.deltaFlushIntervalMs!==void 0&&t.searchParams.set("delta_flush_interval_ms",String(this.experimentalCloudAgent.stream.deltaFlushIntervalMs));let o=await fetch(t.toString(),{headers:this.authHeaders({accept:"text/event-stream"}),signal:this.abortController.signal});if(!o.ok)throw this.handleAuthFailure(o.status),await $s(o);if(!o.body)throw new Error("Cloud Agent SSE response did not include a body.");this.sseConnected.resolve(),await this.readSseBody(o.body)}async readSseBody(e){let t=e.getReader(),s=new TextDecoder,o="",r={data:[],dataBytes:0};try{for(;!this.closed;){let{done:i,value:a}=await t.read();if(i){o+=s.decode(),o.length>0&&this.consumeSseLine(o,r);break}o+=s.decode(a,{stream:!0});let u;for(;(u=o.indexOf(`
14
- `))!==-1;){let c=o.slice(0,u);o=o.slice(u+1);let d=c.endsWith("\r")?c.slice(0,-1):c;if(this.consumeSseLine(d,r),this.closed)break}o.length>Us&&(this.diagnostics?.record(`[cloud-agent] SSE line exceeded ${Us} bytes; resetting buffer.`),o="",r.id=void 0,r.event=void 0,r.data.length=0,r.dataBytes=0)}}finally{try{await t.cancel()}catch{}t.releaseLock()}}consumeSseLine(e,t){if(e===""){(t.event||t.data.length>0)&&this.handleSseEvent({id:t.id,event:t.event??"message",data:da(t.data.join(`
15
- `))}),t.id=void 0,t.event=void 0,t.data.length=0,t.dataBytes=0;return}if(e.startsWith(":"))return;let s=e.indexOf(":"),o=s===-1?e:e.slice(0,s),r=s===-1?"":e.slice(s+1);switch(r.startsWith(" ")&&(r=r.slice(1)),o){case"id":t.id=r;break;case"event":t.event=r;break;case"data":if(t.dataBytes+r.length>Ls){this.diagnostics?.record(`[cloud-agent] SSE event data exceeded ${Ls} bytes; dropping event.`),t.id=void 0,t.event=void 0,t.data.length=0,t.dataBytes=0;return}t.data.push(r),t.dataBytes+=r.length;break}}handleSseEvent(e){if(this.closed)return;let t=K(e.data,"type")??e.event,s=K(e.data,"turn_id"),o={type:"cloud_agent_event",event:t,id:e.id,data:e.data,uuid:e.id??Ks(),session_id:this.sessionId??K(e.data,"session_id")??""};if(e.id&&(this.lastSseEventId=e.id),this.inputStream.enqueue(o),!this.isCurrentTurnEvent(s)){this.bufferPendingTurnEvent(e,t,s);return}this.handleCurrentTurnEvent(e,t)}handleCurrentTurnEvent(e,t){switch(t){case Z.agentMessage:{let s=ma(Ue(e.data,"content"));s&&this.assistantTextParts.push(s);return}case Z.modelRequestEnd:this.captureUsage(e.data);return;case Z.idle:this.idleSeen=!0,this.finishIfIdle();return;case Z.error:this.emitErrorResult(e),this.finish();return;case Z.terminated:this.resultEmitted||this.emitSuccessResult(),this.finish();return}}beginPendingTurn(){this.currentTurnId=void 0,this.hasCurrentTurn=!1,this.pendingTurnEvents=[],this.assistantTextParts=[],this.latestUsage=zs(),this.latestModelUsage={},this.totalCostUsd=0,this.idleSeen=!1}activateTurn(e){this.currentTurnId=e,this.hasCurrentTurn=!0;let t=this.pendingTurnEvents;this.pendingTurnEvents=[];for(let s of t)if(this.isCurrentTurnEvent(s.turnId)&&this.handleCurrentTurnEvent(s.event,s.type),this.closed)break}isCurrentTurnEvent(e){return this.hasCurrentTurn?this.currentTurnId?e===this.currentTurnId:e===void 0:!1}bufferPendingTurnEvent(e,t,s){this.hasCurrentTurn||this.activeInputStreams===0||(this.pendingTurnEvents.length>=na&&this.pendingTurnEvents.shift(),this.pendingTurnEvents.push({event:e,type:t,turnId:s}))}finishIfIdle(){this.closed||!this.idleSeen||this.activeInputStreams>0||this.postedMessages===0||(this.emitSuccessResult(),this.finish())}finishAfterSseClosed(){this.finishIfIdle(),!this.closed&&(!this.resultEmitted&&(this.hasCurrentTurn||this.postedMessages>0||this.activeInputStreams>0)&&this.emitErrorResultMessage("Cloud Agent SSE stream closed before the current turn reached a terminal state."),this.finish())}shouldReconnectSse(){return!this.resultEmitted&&(this.hasCurrentTurn||this.postedMessages>0||this.activeInputStreams>0)}emitSuccessResult(){this.resultEmitted||this.closed||(this.resultEmitted=!0,this.inputStream.enqueue({...this.buildResultBase(),subtype:"success",is_error:!1,result:this.assistantTextParts.join("")}))}emitErrorResult(e){this.emitErrorResultMessage(K(e.data,"error")??K(yt(e.data,"error"),"message")??"Cloud Agent session failed.")}emitErrorResultMessage(e){this.resultEmitted||this.closed||(this.resultEmitted=!0,this.inputStream.enqueue({...this.buildResultBase(),subtype:"error_during_execution",is_error:!0,errors:[e]}))}buildResultBase(){let e=Date.now()-this.startedAt;return{type:"result",duration_ms:e,duration_api_ms:e,num_turns:Math.max(1,this.postedMessages),stop_reason:null,total_cost_usd:this.totalCostUsd,usage:this.latestUsage,modelUsage:this.latestModelUsage,permission_denials:[],uuid:Ks(),session_id:this.sessionId??""}}async postSessionEvents(e){let t=this.sessionId??(await this.sessionReadyPromise).sessionId,s=await this.requestJson(`/sessions/${encodeURIComponent(t)}/events`,{method:"POST",body:{events:e}});return ca(s)}captureUsage(e){let t=yt(e,"usage");if(!t)return;this.latestUsage=fa(this.latestUsage,t);let s=O(e,"total_cost_usd")??O(e,"cost_usd")??O(t,"total_cost_usd")??O(t,"cost_usd");s!==void 0&&(this.totalCostUsd+=s);let o=K(e,"model")??K(t,"model");if(o){let r=this.latestModelUsage[o]?.costUSD??0;this.latestModelUsage[o]=ga(this.latestUsage,r+(s??0))}}async requestJson(e,t){let s=await fetch(`${this.apiBase}${e}`,{method:t.method,headers:this.authHeaders({accept:"application/json",contentType:t.body?"application/json":void 0}),body:t.body?JSON.stringify(t.body):void 0,signal:this.abortController.signal});if(!s.ok)throw this.handleAuthFailure(s.status),await $s(s);if(s.status===204)return{};try{return await s.json()}catch{return{}}}authHeaders(e){let t={Authorization:`Bearer ${this.accessToken}`,Accept:e.accept};return e.contentType&&(t["Content-Type"]=e.contentType),t}handleAuthFailure(e){if((e===401||e===403)&&!this.authExpiredFired){this.authExpiredFired=!0;try{this.onAuthExpired?.()}catch(t){this.diagnostics?.record("[cloud-agent] onAuthExpired callback threw:",t)}}}finish(){this.closed||(this.closed=!0,this.abortController.abort(),this.sseConnected.resolve(),this.inputStream.done())}unsupported(e){throw new Error(`Query.${e}() is not supported when options.experimentalCloudAgent is enabled.`)}};function ra(n,e){if(n?.type!=="accessToken")throw new ht;if(typeof n.accessToken=="string")return n.accessToken;let t=n.accessToken.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new Vt(t);return s}function ia(){return process.env[ea]?.replace(/\/+$/,"")??ta}function aa(n){return Zt({name:n.name,model:n.model,system:n.system,description:n.description,tools:n.tools,mcp_servers:n.mcp_servers,skills:n.skills,metadata:n.metadata})}function ua(n){return Zt({title:n.title,environment_id:n.environment_id,resources:n.resources?.map(e=>Zt({...e})),vault_ids:n.vault_ids,memory_store_ids:n.memory_store_ids})}function Zt(n){return Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))}function Bs(n,e){let t=K(n,"id");if(!t)throw new Error(`${e} response did not include an id.`);return t}function ca(n){let e=pa(n,"data");return e?e.flatMap(t=>t===null||typeof t!="object"||Array.isArray(t)?[]:[{id:K(t,"id"),turnId:K(t,"turn_id"),type:K(t,"type")}]):[]}async function $s(n){let e=await la(n,sa);return new Yt(n.status,e||n.statusText||"unknown error")}async function la(n,e){if(!n.body)try{return(await n.text()).slice(0,e)}catch{return""}let t=n.body.getReader(),s=new TextDecoder,o=[],r=0;try{for(;r<e;){let{done:i,value:a}=await t.read();if(i)break;r+=a.byteLength,o.push(s.decode(a,{stream:!0}))}o.push(s.decode())}catch{}finally{try{await t.cancel()}catch{}t.releaseLock()}return o.join("").slice(0,e)}function da(n){if(n.length===0)return{};try{return JSON.parse(n)}catch{return n}}function yt(n,e){let t=Ue(n,e);return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function pa(n,e){let t=Ue(n,e);return Array.isArray(t)?t:void 0}function K(n,e){let t=Ue(n,e);return typeof t=="string"?t:void 0}function O(n,e){let t=Ue(n,e);return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Ue(n,e){if(!(n===null||typeof n!="object"||Array.isArray(n)))return n[e]}function ma(n){return typeof n=="string"?n:Array.isArray(n)&&n.map(t=>Ws(t)?t.text:"").filter(Boolean).join("")||void 0}function fa(n,e){let t=yt(e,"cache_creation"),s=yt(e,"server_tool_use");return{...n,cache_creation:{ephemeral_1h_input_tokens:O(t,"ephemeral_1h_input_tokens")??n.cache_creation.ephemeral_1h_input_tokens,ephemeral_5m_input_tokens:O(t,"ephemeral_5m_input_tokens")??n.cache_creation.ephemeral_5m_input_tokens},cache_creation_input_tokens:O(e,"cache_creation_input_tokens")??n.cache_creation_input_tokens,cache_read_input_tokens:O(e,"cache_read_input_tokens")??n.cache_read_input_tokens,input_tokens:O(e,"input_tokens")??n.input_tokens,output_tokens:O(e,"output_tokens")??n.output_tokens,server_tool_use:{web_fetch_requests:O(s,"web_fetch_requests")??n.server_tool_use.web_fetch_requests,web_search_requests:O(s,"web_search_requests")??n.server_tool_use.web_search_requests}}}function ga(n,e){return{inputTokens:n.input_tokens,outputTokens:n.output_tokens,cacheReadInputTokens:n.cache_read_input_tokens,cacheCreationInputTokens:n.cache_creation_input_tokens,webSearchRequests:n.server_tool_use.web_search_requests,costUSD:e,contextWindow:0,maxOutputTokens:0}}function ha(n){let e=n.message.content;return typeof e=="string"?e:Array.isArray(e)?e.map(t=>Ws(t)?t.text:JSON.stringify(t)).join(`
16
- `):JSON.stringify(e)}function Ws(n){return n!==null&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text=="string"}function ya(n){return typeof n!="string"?n:async function*(){yield{type:"user",message:{role:"user",content:[{type:"text",text:n}]},parent_tool_use_id:null}}()}function zs(){return{cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},cache_creation_input_tokens:0,cache_read_input_tokens:0,inference_geo:"",input_tokens:0,iterations:[],output_tokens:0,server_tool_use:{web_fetch_requests:0,web_search_requests:0},service_tier:"standard",speed:"standard"}}async function Sa(n,e){e.aborted||await new Promise(t=>{let s=setTimeout(t,n);e.addEventListener("abort",()=>{clearTimeout(s),t()},{once:!0})})}function wa(){let n,e;return{promise:new Promise((s,o)=>{n=s,e=o}),resolve:n,reject:e}}import{access as Pa,chmod as Zs,cp as Ta,mkdtemp as Ma,mkdir as eo,realpath as to,rm as Vs,writeFile as Ia}from"fs/promises";import{homedir as Aa,tmpdir as Da}from"os";import{dirname as Oa,isAbsolute as no,join as ue,relative as xa,resolve as en,sep as qa}from"path";import{homedir as va}from"os";import{join as Js}from"path";var ka=v.configDirName,ba=v.cliHomeEnv,_a=v.configDirEnv,Hs=200;function Ra(){return process.env[ba]||va()}function Ca(){let n=process.env[_a];return n||Js(Ra(),ka)}function Ee(){return Js(Ca(),"projects")}function Ea(n){let e=5381;for(let t=0;t<n.length;t++)e=e*33^n.charCodeAt(t);return e}function x(n){let e=n.replace(/[^a-zA-Z0-9]/g,"-");if(e.length<=Hs)return e;let t=Math.abs(Ea(n)).toString(36);return`${e.slice(0,Hs)}-${t}`}var Na=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ja=6e4;async function so(n){if(n.resume===void 0&&!n.continue)return;let e=x(await Ua(n.cwd)),t=n.loadTimeoutMs??ja,s=n.resume!==void 0?n.resume:await La(n.store,e,t);if(s===void 0||!Na.test(s))return;let o={projectKey:e,sessionId:s},r=await Ys(n.store,o,t);if(!r)return;let i=n.store.listSubkeys?await tn(n.store.listSubkeys(o),t,"listSubkeys"):[];if(!Array.isArray(i))throw new Error("SessionStore listSubkeys() must return an array");let a=[];for(let c of i){if(!$a(c)){console.warn(`[SessionStore] skipping unsafe subpath from listSubkeys: ${String(c)}`);continue}let d=await Ys(n.store,{...o,subpath:c},t);d&&a.push({subpath:c,entries:d})}let u;try{u=await Ma(ue(Da(),"qoder-session-store-")),await Zs(u,448),u=await to(u),await Ka(Fa(n.env),u);let c=ue(u,"projects",e),d=ue(c,s);await eo(c,{recursive:!0,mode:448}),await Xs(ue(c,`${s}.jsonl`),r);for(let{subpath:p,entries:l}of a){let f=za(d,`${p}.jsonl`),y=l.filter(S=>S.type==="agent_metadata"),g=l.filter(S=>S.type!=="agent_metadata");if(g.length>0&&await Xs(f,g),y.length>0){let S={...y.at(-1)};delete S.type,await oo(f.slice(0,-6)+".meta.json",JSON.stringify(S))}}let m=u;return{configDir:m,projectKey:e,sessionId:s,cleanup:async()=>{await Vs(m,{recursive:!0,force:!0})}}}catch(c){throw u!==void 0&&await Vs(u,{recursive:!0,force:!0}),c}}function Fa(n){let e=n?.[v.cliHomeEnv]??process.env[v.cliHomeEnv]??Aa();return en(n?.[v.configDirEnv]??process.env[v.configDirEnv]??ue(e,v.configDirName))}async function Ka(n,e){for(let t of[".auth","oauth_creds.json"]){let s=ue(n,t);try{await Pa(s),await Ta(s,ue(e,t),{recursive:!0,force:!1,preserveTimestamps:!0})}catch(o){if(o.code!=="ENOENT")throw o}}}async function Ua(n){let e=en(n??process.cwd());try{return await to(e)}catch{return e}}async function La(n,e,t){if(!n.listSessions)throw new Error("sessionStore.listSessions() is required when options.continue is true");let s=await tn(n.listSessions(e),t,"listSessions");if(!Array.isArray(s))throw new Error("SessionStore listSessions() must return an array");return s.slice().sort((o,r)=>r.mtime-o.mtime)[0]?.sessionId}async function Ys(n,e,t){let s=await tn(n.load({...e}),t,"load");if(!(s===null||s.length===0)){if(!Array.isArray(s))throw new Error("SessionStore load() must return an array or null");return s.map((o,r)=>Ba(o,r))}}function Ba(n,e){if(n===null||typeof n!="object"||typeof n.type!="string")throw new Error(`SessionStore entry ${e} is not a typed object`);try{let t=JSON.stringify(n);if(t===void 0)throw new Error("JSON serialization returned undefined");return JSON.parse(t)}catch(t){throw new Error(`SessionStore entry ${e} is not JSON-safe`,{cause:t})}}function $a(n){return!(typeof n!="string"||!n||n.includes("\0")||n.includes("\\")||no(n)||/^[a-z]:/i.test(n)||n.replaceAll("\\","/").split("/").some(e=>!e||e==="."||e===".."))}function za(n,e){let t=en(n,e),s=xa(n,t);if(s===""||s===".."||s.startsWith(`..${qa}`)||no(s))throw new Error(`SessionStore subpath escapes the session: ${e}`);return t}async function Xs(n,e){let t=e.map(s=>JSON.stringify(s)).join(`
17
- `);await oo(n,t?`${t}
18
- `:"")}async function oo(n,e){await eo(Oa(n),{recursive:!0,mode:448}),await Ia(n,e,{encoding:"utf8",mode:384}),await Zs(n,384)}async function tn(n,e,t){let s;n.catch(()=>{});try{return await Promise.race([n,new Promise((o,r)=>{s=setTimeout(()=>r(new Error(`SessionStore ${t} timed out after ${e}ms`)),e)})])}finally{s!==void 0&&clearTimeout(s)}}var Qa=/^(?:qoder(?:cli|clicn|cn)?-)?worker-runtime(?:\.obf)?\.mjs$/i;function Ga(n){let e=n.replace(/\\/g,"/").split("/").at(-1)??"";return Qa.test(e)}function Pe(n,e,t=process.env){let s=n.pathToQoderCLIExecutable;return s?Ga(s)?{transport:"worker",pathToQoderWorkerRuntime:s}:{transport:"process"}:n.executable!==void 0||n.executableArgs!==void 0||n.spawnQoderCLIProcess!==void 0?{transport:"process"}:t.QODERCLI_PATH?{transport:"process"}:{transport:e}}import ro from"node:path";function Te(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function Le(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function Wa(n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0)throw new TypeError("options.memory.generation.roots must be a non-empty array");let e=new Set;for(let[t,s]of n.entries()){if(!s||typeof s!="object")throw new TypeError(`options.memory.generation.roots[${t}] must be an object`);if(Te(s.id,`options.memory.generation.roots[${t}].id`),Te(s.path,`options.memory.generation.roots[${t}].path`),e.has(s.id))throw new TypeError(`options.memory.generation.roots contains duplicate id "${s.id}"`);if(e.add(s.id),s.access!==void 0&&s.access!=="read"&&s.access!=="read-write")throw new TypeError(`options.memory.generation.roots[${t}].access must be "read" or "read-write"`);if(s.indexFile!==void 0){Te(s.indexFile,`options.memory.generation.roots[${t}].indexFile`);let o=s.indexFile.replaceAll("\\","/");if(ro.posix.isAbsolute(o)||ro.win32.isAbsolute(s.indexFile)||o.split("/").includes(".."))throw new TypeError(`options.memory.generation.roots[${t}].indexFile must stay within its root`)}}}function Ha(n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0)throw new TypeError("options.memory.consumption.files must be a non-empty array");let e=new Set;for(let[t,s]of n.entries()){if(!s||typeof s!="object")throw new TypeError(`options.memory.consumption.files[${t}] must be an object`);if(Te(s.id,`options.memory.consumption.files[${t}].id`),Te(s.path,`options.memory.consumption.files[${t}].path`),e.has(s.id))throw new TypeError(`options.memory.consumption.files contains duplicate id "${s.id}"`);if(e.add(s.id),s.required!==void 0&&typeof s.required!="boolean")throw new TypeError(`options.memory.consumption.files[${t}].required must be a boolean`)}}function io(n){if(n===void 0)return{};if(!n||typeof n!="object")throw new TypeError("options.memory must be an object");if(Array.isArray(n))throw new TypeError("options.memory must be an object");if(Object.keys(n).length===0)return{};if(n.mode!=="native"&&n.mode!=="custom")throw new TypeError('options.memory.mode must be "native" or "custom"');if(n.projectScope!==void 0&&typeof n.projectScope!="boolean")throw new TypeError("options.memory.projectScope must be a boolean");if(n.userScope!==void 0&&typeof n.userScope!="boolean")throw new TypeError("options.memory.userScope must be a boolean");let e=new Map;if(n.mode==="native"){if(n.projectScope===!1&&n.userScope===!1)throw new TypeError("options.memory native mode requires at least one enabled scope; use memory: {} to disable SDK memory");let i=Object.keys(n.generation??{}),a=Object.keys(n.consumption??{});if(i.some(u=>u!=="onResult")||a.some(u=>u!=="onResult"))throw new TypeError('options.memory mode "native" only accepts generation.onResult and consumption.onResult');return Le(n.generation?.onResult,"options.memory.generation.onResult"),Le(n.consumption?.onResult,"options.memory.consumption.onResult"),{config:{requester:"sdk",mode:"native",...n.projectScope!==void 0?{projectScope:n.projectScope}:{},...n.userScope!==void 0?{userScope:n.userScope}:{}},callbacks:{shouldGenerateCallbacks:e,onGenerationResult:n.generation?.onResult,onConsumptionResult:n.consumption?.onResult}}}let t,s=n.generation;if(s!==void 0){if(!s||typeof s!="object")throw new TypeError("options.memory.generation must be an object");if(s.enabled!==void 0&&typeof s.enabled!="boolean")throw new TypeError("options.memory.generation.enabled must be a boolean");Wa(s.roots),s.prompt!==void 0&&Te(s.prompt,"options.memory.generation.prompt"),Le(s.onResult,"options.memory.generation.onResult");let i;if(s.turnComplete!==void 0){let a=s.turnComplete;if(!a||typeof a!="object")throw new TypeError("options.memory.generation.turnComplete must be an object");if(a.enabled!==void 0&&typeof a.enabled!="boolean")throw new TypeError("options.memory.generation.turnComplete.enabled must be a boolean");if(Le(a.shouldGenerate,"options.memory.generation.turnComplete.shouldGenerate"),a.timeoutMs!==void 0&&(!Number.isFinite(a.timeoutMs)||a.timeoutMs<=0))throw new TypeError("options.memory.generation.turnComplete.timeoutMs must be a positive finite number");if(a.onGateError!==void 0&&a.onGateError!=="skip"&&a.onGateError!=="report_failed")throw new TypeError('options.memory.generation.turnComplete.onGateError must be "skip" or "report_failed"');let u=a.shouldGenerate?"memory_should_generate_0":void 0;u&&a.shouldGenerate&&e.set(u,a.shouldGenerate),i={enabled:a.enabled??!0,shouldGenerateCallbackId:u,timeoutMs:a.timeoutMs,onGateError:a.onGateError}}if(s.turnComplete?.enabled===!0&&s.enabled===!1)throw new TypeError("options.memory.generation.turnComplete cannot be enabled when generation.enabled is false");t={enabled:s.enabled??!0,roots:s.roots?.map(a=>({...a})),prompt:s.prompt,turnComplete:i}}let o,r=n.consumption;if(r!==void 0){if(!r||typeof r!="object")throw new TypeError("options.memory.consumption must be an object");if(r.enabled!==void 0&&typeof r.enabled!="boolean")throw new TypeError("options.memory.consumption.enabled must be a boolean");if(Ha(r.files),r.maxTokens!==void 0&&(!Number.isInteger(r.maxTokens)||r.maxTokens<=0))throw new TypeError("options.memory.consumption.maxTokens must be a positive integer");if(r.overflow!==void 0&&r.overflow!=="truncate"&&r.overflow!=="fail_query")throw new TypeError('options.memory.consumption.overflow must be "truncate" or "fail_query"');if(r.failureMode!==void 0&&r.failureMode!=="best_effort"&&r.failureMode!=="fail_query")throw new TypeError('options.memory.consumption.failureMode must be "best_effort" or "fail_query"');Le(r.onResult,"options.memory.consumption.onResult"),o={enabled:r.enabled??!0,files:r.files?.map(i=>({...i,required:i.required??!1})),maxTokens:r.maxTokens,overflow:r.overflow,failureMode:r.failureMode}}return{config:{requester:"sdk",mode:n.mode,...n.projectScope!==void 0?{projectScope:n.projectScope}:{},...n.userScope!==void 0?{userScope:n.userScope}:{},generation:t,consumption:o},callbacks:{shouldGenerateCallbacks:e,onGenerationResult:s?.onResult,onConsumptionResult:r?.onResult}}}var St=10;function Ja(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function wt(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function ao(n){if(n!==void 0){if(!Number.isInteger(n)||n<1||n>10)throw new TypeError(`options.evolution.skill.generation.turnComplete.reviewThreshold must be an integer between 1 and ${10}`);return n}}function Va(n){let e={shouldReviewCallbacks:new Map};if(n===void 0)return{config:void 0,callbacks:e};if(!n||typeof n!="object")throw new TypeError("options.evolution.skill.generation must be an object");if("roots"in n)throw new TypeError("options.evolution.skill.generation does not accept roots; roots are derived from loaded skills");if(n.enabled!==void 0&&typeof n.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.enabled must be a boolean");if(n.prompt!==void 0&&Ja(n.prompt,"options.evolution.skill.generation.prompt"),n.maxSuggestions!==void 0&&(!Number.isInteger(n.maxSuggestions)||n.maxSuggestions<1||n.maxSuggestions>10))throw new TypeError("options.evolution.skill.generation.maxSuggestions must be an integer between 1 and 10");wt(n.onResult,"options.evolution.skill.generation.onResult");let t;if(n.turnComplete!==void 0){if(!n.turnComplete||typeof n.turnComplete!="object")throw new TypeError("options.evolution.skill.generation.turnComplete must be an object");if(n.turnComplete.enabled!==void 0&&typeof n.turnComplete.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.turnComplete.enabled must be a boolean");let s=ao(n.turnComplete.reviewThreshold);if(wt(n.turnComplete.shouldReview,"options.evolution.skill.generation.turnComplete.shouldReview"),n.turnComplete.timeoutMs!==void 0&&(!Number.isFinite(n.turnComplete.timeoutMs)||n.turnComplete.timeoutMs<=0))throw new TypeError("options.evolution.skill.generation.turnComplete.timeoutMs must be a positive finite number");if(n.turnComplete.onGateError!==void 0&&n.turnComplete.onGateError!=="skip"&&n.turnComplete.onGateError!=="report_failed")throw new TypeError('options.evolution.skill.generation.turnComplete.onGateError must be "skip" or "report_failed"');let o=n.turnComplete.shouldReview?"skill_evolution_should_review_0":void 0;o&&e.shouldReviewCallbacks.set(o,n.turnComplete.shouldReview),t={enabled:n.turnComplete.enabled??!0,reviewThreshold:s,shouldReviewCallbackId:o,timeoutMs:n.turnComplete.timeoutMs,onGateError:n.turnComplete.onGateError}}if(n.turnComplete!==void 0&&t?.enabled===!0&&n.enabled===!1)throw new TypeError("options.evolution.skill.generation.turnComplete cannot be enabled when generation.enabled is false");return{config:{enabled:n.enabled??!0,prompt:n.prompt,maxSuggestions:n.maxSuggestions,turnComplete:t},callbacks:{...e,onResult:n.onResult}}}function uo(n){if(n===void 0)return{};if(!n||typeof n!="object")throw new TypeError("options.evolution.skill must be an object");if(n.mode!=="native"&&n.mode!=="custom")throw new TypeError('options.evolution.skill.mode must be "native" or "custom"');let e=n.generation;if(n.mode==="native"){if(Object.keys(e??{}).some(i=>i!=="enabled"&&i!=="onResult"&&i!=="turnComplete"))throw new TypeError('options.evolution.skill mode "native" only accepts generation.enabled, generation.onResult, and generation.turnComplete.reviewThreshold');if(e?.enabled!==void 0&&typeof e.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.enabled must be a boolean");let o=e?.turnComplete;if(o!==void 0){if(!o||typeof o!="object")throw new TypeError("options.evolution.skill.generation.turnComplete must be an object");if(Object.keys(o).some(i=>i!=="reviewThreshold"))throw new TypeError('options.evolution.skill mode "native" only accepts generation.turnComplete.reviewThreshold')}let r=ao(o?.reviewThreshold);return e?.enabled===!1?(wt(e?.onResult,"options.evolution.skill.generation.onResult"),{callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}}):(wt(e?.onResult,"options.evolution.skill.generation.onResult"),{config:{requester:"sdk",mode:"native",...r===void 0?{}:{generation:{turnComplete:{reviewThreshold:r}}}},callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}})}let t=Va(e);return t.config?.enabled===!1?{callbacks:t.callbacks}:{config:{requester:"sdk",mode:"custom",generation:t.config},callbacks:t.callbacks}}import{spawn as Cu}from"node:child_process";import{createInterface as ou}from"node:readline";var rn="daemon_queries_v1",w=class extends Error{code="DAEMON_PROTOCOL_ERROR";constructor(e){super(e),this.name="DaemonProtocolError"}};function an(n){if(n.trim().length===0)throw new w("daemon protocol line must not be empty");let e;try{e=JSON.parse(n)}catch{throw new w("daemon protocol line must contain valid JSON")}let t=_(e,"daemon protocol frame");if(Object.hasOwn(t,"frame_type")||Object.hasOwn(t,"protocol_version")&&!Object.hasOwn(t,"type"))throw new w("daemon v1 frame envelopes are not supported on the v2 wire");switch(t.type){case"control_request":Xa(t);break;case"control_response":Za(t);break;case"status_event":Ya(t);break;case"keep_alive":C(t,["type"],"keep_alive frame");break;case"session_input":case"session_output":throw new w(`${String(t.type)} is not supported on the v2 wire`);default:if(E(t,"type"),!tu(t.type))throw new w(`unknown daemon message type: ${String(t.type)}`);eu(t),un(t)}return t}function po(n){let e=JSON.stringify(n);return an(e),e}function mo(n,e){let t=e.response.response;switch(n){case"initialize":{q(e,"initialize response");let s=_(t,"initialize response");if(C(s,["daemon_protocol_version","daemon_version","capabilities"],"initialize response"),s.daemon_protocol_version!==2)throw new w(`unsupported daemon_protocol_version: ${String(s.daemon_protocol_version)}`);return E(s,"daemon_version"),nu(s,"capabilities"),s}case"open_session":{let s=sn(e,"open_session response");return nn(t,"open_session"),{session_id:s}}case"list_sessions":{q(e,"list_sessions response");let s=_(t,"list_sessions response");C(s,["sessions"],"list_sessions response");let o=s.sessions;if(!Array.isArray(o))throw new w("sessions must be an array");for(let[r,i]of o.entries())lo(_(i,`sessions[${r}]`),`sessions[${r}]`);return s}case"rename_session":{sn(e,"rename_session response");let s=_(t,"rename_session response");return C(s,["session"],"rename_session response"),lo(_(s.session,"rename_session session"),"rename_session session"),s}case"close_session":return sn(e,`${n} response`),nn(t,n),null;case"delete_session":case"shutdown":case"update_byok_config":case"delete_byok_config":return q(e,`${n} response`),nn(t,n),null;case"get_models":return q(e,`${n} response`),vt(t,n,"models");case"get_byok_config":return q(e,`${n} response`),vt(t,n,"providers");case"list_byok_configs":return q(e,`${n} response`),vt(t,n,"configs");case"list_plugins":return q(e,`${n} response`),vt(t,n,"plugins");case"validate_byok_model":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success"],`${n} response`),on(s,"success"),s}case"create_byok_config":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["config"],`${n} response`),_(s.config,`${n} response config`),s}case"account_info":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["account"],`${n} response`),_(s.account,`${n} response account`),s}case"check_byok_config":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success","error","code","requestId","details"],`${n} response`),on(s,"success"),co(s,["error","code","requestId"]),s.details!==void 0&&_(s.details,`${n} response details`),s}case"get_usage_info":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["usage","session","usage_error"],`${n} response`),s.usage!==null&&_(s.usage,`${n} response usage`),_(s.session,`${n} response session`),co(s,["usage_error"]),s}default:throw new w(`unknown daemon command result method: ${String(n)}`)}}function Ya(n){if(C(n,["type","status","data"],"status_event frame"),n.status!=="daemon.session_updated")throw new w("unsupported status_event status");let e=_(n.data,"status_event data");if(C(e,["local_session_id","state","error"],"status_event data"),E(e,"local_session_id"),e.state!=="failed")throw new w("status_event state must be failed");_(e.error,"status_event error")}function Xa(n){C(n,["type","request_id","session_id","request"],"control_request frame"),E(n,"request_id"),un(n);let e=_(n.request,"control request");if(!(typeof e.type=="string"&&e.type.length>0)&&!(typeof e.subtype=="string"&&e.subtype.length>0))throw new w("control request must have a non-empty string type or subtype")}function Za(n){C(n,["type","session_id","response"],"control_response frame"),un(n);let e=_(n.response,"control response");E(e,"request_id");let t=E(e,"subtype");if(t==="success"){if(["error","code","retryable","details"].some(s=>Object.hasOwn(e,s)))throw new w("success control response must not include error fields");C(e,["subtype","request_id","response"],"success control response"),e.response!==void 0&&_(e.response,"success response result");return}if(t!=="error")throw new w(`unknown control response subtype: ${t}`);if(Object.hasOwn(e,"response"))throw new w("error control response must not include response");if(C(e,["subtype","request_id","error","code","retryable","details","pending_permission_requests"],"error control response"),E(e,"error"),e.code!==void 0&&E(e,"code"),e.retryable!==void 0&&on(e,"retryable"),e.details!==void 0&&_(e.details,"control response details"),e.pending_permission_requests!==void 0&&!Array.isArray(e.pending_permission_requests))throw new w("pending_permission_requests must be an array")}function co(n,e){for(let t of e)n[t]!==void 0&&E(n,t)}function vt(n,e,t){let s=_(n,`${e} response`);if(C(s,[t],`${e} response`),!Array.isArray(s[t]))throw new w(`${e} response ${t} must be an array`);return s}function lo(n,e){C(n,["local_session_id","title","cwd","state","created_at","updated_at"],e),E(n,"local_session_id"),n.cwd!==void 0&&E(n,"cwd"),E(n,"title");let t=E(n,"state");if(!["pending","ready","inactive","failed"].includes(t))throw new w(`${e} has invalid state: ${t}`);E(n,"created_at"),E(n,"updated_at")}function nn(n,e){if(n!==void 0)throw new w(`${e} success must omit response`)}function sn(n,e){let t=n;try{return E(t,"session_id")}catch{throw new w(`${e} requires a valid session_id`)}}function q(n,e){if(Object.hasOwn(n,"session_id"))throw new w(`${e} must not include session_id`)}function un(n){let e=n;e.session_id!==void 0&&E(e,"session_id")}function eu(n){for(let e of["session_epoch","sequence"])if(Object.hasOwn(n,e))throw new w(`${e} is reserved for daemon-internal Session ordering`)}function tu(n){return typeof n=="string"&&["user","assistant","stream_event","result","system","prompt_suggestion","command_lifecycle","control_cancel_request","control_cancel","transcript_mirror"].includes(n)}function _(n,e){if(typeof n!="object"||n===null||Array.isArray(n))throw new w(`${e} must be a JSON object`);return n}function E(n,e){let t=n[e];if(typeof t!="string"||t.length===0)throw new w(`${e} must be a non-empty string`);return t}function on(n,e){let t=n[e];if(typeof t!="boolean")throw new w(`${e} must be a boolean`);return t}function nu(n,e){let t=n[e];if(!Array.isArray(t)||t.some(s=>typeof s!="string"))throw new w(`${e} must be an array of strings`);return t}function C(n,e,t){let s=new Set(e),o=Object.keys(n).find(r=>!s.has(r));if(o!==void 0)throw new w(`${t} contains unknown field: ${o}`)}var kt=class{constructor(e,t){this.connection=e;this.options=t}messages=new X;pendingMessages=[];initializePromise;sessionId;flushingPendingMessages=!1;inputEnded=!1;resultReceived=!1;commandLifecycleSupported=!1;pendingCommandUuids=new Set;closed=!1;cleaned=!1;releasePromise;closePromise;initialize(){return this.initializePromise||(this.initializePromise=this.open(),this.initializePromise.catch(()=>{})),this.initializePromise}write(e){if(this.closed)throw new Error("Transport is not ready or has been closed");let t=su(e);if(this.trackOutboundCommand(t),!this.sessionId||this.flushingPendingMessages){if(!this.initializePromise)throw new Error("Transport is not ready or has been closed");this.pendingMessages.push(t);return}let s;try{s=fo(t,this.sessionId)}catch(o){this.failAndRelease(o);return}this.connection.sendSessionMessage(s).catch(o=>this.failAndRelease(o))}async*readMessages(){await this.initialize();for await(let e of this.messages)yield e}endInput(){this.closed||(this.inputEnded=!0,this.maybeCloseAfterResult())}close(){return this.closePromise||(this.closePromise=this.performClose(),this.closePromise.catch(()=>{})),this.closePromise}isReady(){return this.sessionId!==void 0&&!this.closed}acceptOutput(e){this.closed||(this.observeCapabilities(e),this.messages.enqueue(e),this.observeCommandLifecycle(e),e.type==="result"&&(this.resultReceived=!0),this.maybeCloseAfterResult())}fail(e){this.closed||(this.closed=!0,this.cleanup(),this.messages.error(e instanceof Error?e:new Error(String(e))))}async open(){let e;try{let t=await this.connection.openSession({worker_args:[...this.options.workerArgs],...this.options.cwd!==void 0?{cwd:this.options.cwd}:{},...this.options.configDir!==void 0?{config_dir:this.options.configDir}:{}},this);if(this.sessionId=t,e=t,this.closed){await this.releaseSessionOnce(t);return}this.flushingPendingMessages=!0;try{for(;this.pendingMessages.length>0;){let s=this.pendingMessages.map(o=>fo(o,t));this.pendingMessages.splice(0);for(let o of s)await this.connection.sendSessionMessage(o)}}finally{this.flushingPendingMessages=!1}}catch(t){throw e!==void 0&&this.startRelease(e),this.fail(t),t}}failAndRelease(e){let t=this.sessionId;t!==void 0&&this.startRelease(t),this.fail(e)}startRelease(e){this.releaseSessionOnce(e).catch(()=>{})}releaseSessionOnce(e){return this.releasePromise||(this.releasePromise=this.releaseSession(e).catch(t=>{throw this.connection.fail(t),t})),this.releasePromise}releaseSession(e){return this.connection.closeSession(e)}trackOutboundCommand(e){if(!this.commandLifecycleSupported||e.type!=="user")return;let t=e.uuid;typeof t=="string"&&t.trim().length>0&&this.pendingCommandUuids.add(t)}observeCapabilities(e){e.type!=="system"||e.subtype!=="init"||this.updateCommandLifecycleCapability(e)}updateCommandLifecycleCapability(e){let t=e.capabilities;this.commandLifecycleSupported=Array.isArray(t)&&t.includes("msg_lifecycle_v1")}observeCommandLifecycle(e){if(e.type!=="command_lifecycle"||e.state!=="completed"&&e.state!=="cancelled"&&e.state!=="discarded")return;let t=e.command_uuid;typeof t=="string"&&this.pendingCommandUuids.delete(t)}maybeCloseAfterResult(){!this.inputEnded||!this.resultReceived||this.commandLifecycleSupported&&this.pendingCommandUuids.size>0||this.close().catch(()=>{})}async performClose(){this.closed||(this.closed=!0,this.cleanup());try{this.initializePromise&&await this.initializePromise.catch(()=>{}),this.releasePromise?await this.releasePromise:this.sessionId&&await this.releaseSessionOnce(this.sessionId),this.messages.done()}catch(e){throw this.messages.error(e),e}}cleanup(){this.cleaned||(this.cleaned=!0,this.options.cleanup?.())}};function su(n){let e;try{e=JSON.parse(n.trim())}catch{throw new Error("Query transport input must contain valid JSON")}if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("Query transport input must be a JSON object");return e}function fo(n,e){if(Object.hasOwn(n,"session_id")&&n.session_id!==e)throw new Error(`Query message session_id must match daemon Session: expected ${e}, received ${String(n.session_id)}`);return{...n,session_id:e}}var ln="multi_session_v2",go="session_title_sync_v1",ho="session_delete_v1";var ru=3e4,dn=3e4,iu=125e3,au=12e4,uu=5e3,cu=6e4,lu=1024,du=64,pu=8*1024*1024,mu=256,fu=32*1024*1024,gu=new Set(["daemon.auth.fetch_job_token","daemon.auth.fetch_service_account_token"]),bt=class extends Error{code;retryable;details;constructor(e){super(e.message),this.name="DaemonRpcError",this.code=e.code,this.retryable=e.retryable,this.details=e.details}},ce=class extends Error{code;retryable;details;constructor(e){super(e.message),this.name="DaemonRequestError",this.code=e.code,this.retryable=e.retryable,this.details=e.details}},_t=class{input;requestHandler;pendingRequests=new Map;timedOutRequestIds=new Set;activeInboundRequestIds=new Set;sessions=new Map;closedSessionIds=new Set;pendingSessionMessages=new Map;pendingSessionMessageBytes=new Map;pendingSessionMessageFrameCount=0;pendingSessionMessageByteCount=0;maxFrameBytes;readTask;writeChain=Promise.resolve();nextRequestId=1;initializing=!1;initialized=!1;capabilities=new Set;stopping=!1;failure;failureListeners=new Set;constructor(e){if(this.input=e.input,this.requestHandler=e.requestHandler,this.maxFrameBytes=e.maxFrameBytes??$,!Number.isSafeInteger(this.maxFrameBytes)||this.maxFrameBytes<=0)throw new TypeError("maxFrameBytes must be a positive safe integer");this.readTask=this.readOutput(e.output)}async initialize(e,t={}){if(this.initialized)throw new w("daemon connection is already initialized");if(this.initializing)throw new w("daemon initialize is already in progress");this.initializing=!0;let s,o=t.timeoutMs??ru,r=this.request("initialize",{daemon_protocol_version:2,sdk_version:e,capabilities:[ln,...t.capabilities??[]],...t.auth?{auth:t.auth}:{}}),i=new Promise((u,c)=>{s=setTimeout(()=>{let d=new Error(`Qoder CLI daemon did not initialize within ${o}ms`);this.fail(d),c(d)},o)}),a;try{a=await Promise.race([r,i])}finally{this.initializing=!1,s&&clearTimeout(s)}if(!a.capabilities.includes(ln))throw new w(`daemon is missing required capability: ${ln}`);for(let u of a.capabilities)this.capabilities.add(u);this.initialized=!0}createSessionTransport(e){if(!this.initialized||this.stopping||this.failure)throw this.failure??new Error("Daemon connection is not ready");return new kt(this,e)}supportsCapability(e){return this.capabilities.has(e)}onFailure(e){return this.failureListeners.add(e),this.failure&&e(this.failure),()=>this.failureListeners.delete(e)}async openSession(e,t){return(await this.request("open_session",e,t,void 0,au)).session_id}async listSessions(){return(await this.request("list_sessions",{},void 0,void 0,iu,"request")).sessions}renameSession(e,t){return this.capabilities.has(go)?this.request("rename_session",{title:t},void 0,e,dn):Promise.reject(new w(`daemon is missing required capability: ${go}`))}sendSessionMessage(e){return this.writeFrame(e)}async closeSession(e){this.sessions.delete(e),this.closedSessionIds.add(e),await this.request("close_session",{},void 0,e,dn)}async deleteSession(e){if(!this.capabilities.has(ho))throw new w(`daemon is missing required capability: ${ho}`);await this.request("delete_session",{local_session_id:e},void 0,void 0,dn)}query(e,t){return this.capabilities.has(rn)?this.request(e,t,void 0,void 0,cu,"request"):Promise.reject(new w(`daemon is missing required capability: ${rn}`))}async shutdown(e=uu){if(this.stopping){await this.readTask.catch(()=>{});return}this.stopping=!0;for(let t of this.sessions.values())t.fail(new Error("Daemon is stopping"));this.sessions.clear();try{this.failure||await this.request("shutdown",{},void 0,void 0,e)}finally{!this.input.destroyed&&!this.input.writableEnded&&this.input.end()}}fail(e,t=!0){let s=e instanceof Error?e:new Error(String(e));if(!this.failure){this.failure=s;for(let o of this.pendingRequests.values())o.timeout&&clearTimeout(o.timeout),o.reject(s);this.pendingRequests.clear(),this.timedOutRequestIds.clear(),this.clearPendingSessionMessages();for(let o of this.sessions.values())o.fail(s);if(this.sessions.clear(),t)for(let o of this.failureListeners)try{o(s)}catch{}}}request(e,t,s,o,r,i="connection"){if(this.failure)return Promise.reject(this.failure);if(e!=="initialize"&&!this.initialized)return Promise.reject(new w("daemon connection is not initialized"));let a=`sdk_daemon_${this.nextRequestId++}`,u={type:"control_request",request_id:a,...o!==void 0?{session_id:o}:{},request:{type:`daemon.${e}`,...t}};return new Promise((c,d)=>{let m={method:e,resolve:p=>c(p),reject:d,...s?{sessionTransport:s}:{},...o!==void 0?{sessionId:o}:{}};r!==void 0&&(m.timeout=setTimeout(()=>{if(this.pendingRequests.get(a)!==m)return;let p=new w(`daemon ${e} request timed out after ${r}ms`);if(i==="request"){this.pendingRequests.delete(a),this.rememberTimedOutRequestId(a),m.reject(p);return}this.fail(p)},r),m.timeout.unref?.()),this.pendingRequests.set(a,m),this.writeFrame(u).catch(p=>{let l=this.pendingRequests.get(a);l?.timeout&&clearTimeout(l.timeout),this.pendingRequests.delete(a),d(p),l?.sessionTransport&&this.failIfSessionMessagesAreOrphaned()})})}async readOutput(e){let t=new V(this.maxFrameBytes,"SDK daemon output");e.pipe(t);let s=ou({input:t,crlfDelay:1/0,terminal:!1});try{for await(let o of s){if(!o.trim())continue;let r=hu(o);r!==void 0&&this.rejectLegacyInitialize(r)||this.acceptFrame(an(o))}(!this.stopping||this.pendingRequests.size>0)&&this.fail(new Error("Daemon connection closed"),!1)}catch(o){this.fail(o)}finally{s.close(),e.unpipe(t),t.destroy()}}acceptFrame(e){let t=e;if(t.type!=="keep_alive"){if(t.type==="control_response"){let s=e,o=s.response.request_id;if(this.pendingRequests.has(o)){this.acceptControlResponse(s);return}if(this.timedOutRequestIds.delete(o))return;this.routeSessionMessage(t);return}if(t.type==="control_request"){let s=e,o=yu(s);if(o==="valid"){this.acceptRequest(s);return}if(o==="contradictory")throw new w(`contradictory daemon reverse RPC routing markers: ${s.request_id}`)}if(t.type==="status_event"){this.acceptSessionUpdatedStatusEvent(e);return}this.routeSessionMessage(t)}}rememberTimedOutRequestId(e){if(this.timedOutRequestIds.size>=lu){let t=this.timedOutRequestIds.values().next().value;t!==void 0&&this.timedOutRequestIds.delete(t)}this.timedOutRequestIds.add(e)}routeSessionMessage(e){let t=e.session_id;if(typeof t!="string"||t.length===0)throw new w(`daemon Session message requires a valid session_id: ${String(t)}`);let s=this.sessions.get(t);if(s){s.acceptOutput(e);return}if(this.hasPendingSessionRequest()){this.bufferPendingSessionMessage(t,e);return}if(!this.closedSessionIds.has(t))throw new w(`daemon output has unknown session_id: ${t}`)}acceptControlResponse(e){let t=e.response.request_id,s=this.pendingRequests.get(t);if(!s)throw new w(`daemon response has unknown request_id: ${t}`);if(s.timeout&&clearTimeout(s.timeout),s.sessionId!==void 0&&e.session_id!==s.sessionId){this.pendingRequests.delete(t),s.reject(new w(`${s.method} response session_id does not match request: expected ${s.sessionId}, received ${String(e.session_id)}`));return}if(this.pendingRequests.delete(t),e.response.subtype==="error"){if(s.method==="initialize"&&e.response.code==="PROTOCOL_VERSION_UNSUPPORTED"){s.reject(new F("1","2"));return}s.reject(new bt({code:e.response.code??"DAEMON_REQUEST_FAILED",message:e.response.error,retryable:e.response.retryable??!1,...e.response.details===void 0?{}:{details:e.response.details}})),s.sessionTransport&&this.failIfSessionMessagesAreOrphaned();return}try{let o=e,r=o.response.response?.daemon_protocol_version;if(s.method==="initialize"&&typeof r=="number"&&r!==2)throw new F(String(r),String(2));let i=mo(s.method,o);if(s.sessionTransport){let a=i.session_id;if(typeof a!="string"||a.length===0)throw new w(`${s.method} did not return a valid session_id`);let u=this.takePendingSessionMessages(a);this.closedSessionIds.delete(a);let c=this.failIfSessionMessagesAreOrphaned(`${s.method} response session_id does not match buffered output`);if(c)throw c;if(this.sessions.has(a)){let d=new w(`daemon returned duplicate session_id: ${a}`);throw this.fail(d),d}this.sessions.set(a,s.sessionTransport);for(let d of u)s.sessionTransport.acceptOutput(d)}s.resolve(i)}catch(o){s.reject(o instanceof Error?o:new Error(String(o))),s.sessionTransport&&this.failIfSessionMessagesAreOrphaned()}}hasPendingSessionRequest(){return[...this.pendingRequests.values()].some(e=>e.sessionTransport!==void 0)}failIfSessionMessagesAreOrphaned(e="daemon left orphaned pre-response Session output"){if(this.hasPendingSessionRequest())return;for(let o of this.pendingSessionMessages.keys())this.closedSessionIds.has(o)&&this.deletePendingSessionMessages(o);if(this.pendingSessionMessages.size===0)return;let t=[...this.pendingSessionMessages.keys()].join(", "),s=new w(`${e}: ${t}`);return this.clearPendingSessionMessages(),this.fail(s),s}bufferPendingSessionMessage(e,t){let s=this.pendingSessionMessages.get(e)??[],o=Buffer.byteLength(JSON.stringify(t),"utf8"),r=this.pendingSessionMessageBytes.get(e)??0;if(s.length+1>du||r+o>pu||this.pendingSessionMessageFrameCount+1>mu||this.pendingSessionMessageByteCount+o>fu)throw new w("daemon pre-response Session output exceeded its bounded buffer");s.push(t),this.pendingSessionMessages.set(e,s),this.pendingSessionMessageBytes.set(e,r+o),this.pendingSessionMessageFrameCount+=1,this.pendingSessionMessageByteCount+=o}takePendingSessionMessages(e){let t=this.pendingSessionMessages.get(e)??[];return this.deletePendingSessionMessages(e),t}deletePendingSessionMessages(e){let t=this.pendingSessionMessages.get(e)?.length??0,s=this.pendingSessionMessageBytes.get(e)??0;this.pendingSessionMessages.delete(e),this.pendingSessionMessageBytes.delete(e),this.pendingSessionMessageFrameCount-=t,this.pendingSessionMessageByteCount-=s}clearPendingSessionMessages(){this.pendingSessionMessages.clear(),this.pendingSessionMessageBytes.clear(),this.pendingSessionMessageFrameCount=0,this.pendingSessionMessageByteCount=0}rejectLegacyInitialize(e){let t=this.pendingRequests.get(e);return t?.method!=="initialize"?!1:(this.pendingRequests.delete(e),t.reject(new F("1","2")),!0)}acceptRequest(e){if(this.activeInboundRequestIds.has(e.request_id)){this.writeInboundError(e.request_id,"DUPLICATE_REQUEST_ID",`daemon request_id is already active: ${e.request_id}`);return}if(!this.requestHandler){this.writeInboundError(e.request_id,"METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${e.request.type}`);return}this.activeInboundRequestIds.add(e.request_id),Promise.resolve().then(()=>this.requestHandler(e)).then(t=>{let s={type:"control_response",response:{subtype:"success",request_id:e.request_id,...t===null?{}:{response:t}}};return this.writeFrame(s)}).catch(t=>{let s=t instanceof ce?t:void 0,o={type:"control_response",response:{subtype:"error",request_id:e.request_id,code:s?.code??"SDK_REQUEST_FAILED",error:t instanceof Error?t.message:String(t),retryable:s?.retryable??!1,...s?.details?{details:s.details}:{}}};return this.writeFrame(o)}).catch(t=>this.fail(t)).finally(()=>{this.activeInboundRequestIds.delete(e.request_id)})}writeInboundError(e,t,s){let o={type:"control_response",response:{subtype:"error",request_id:e,code:t,error:s,retryable:!1}};this.writeFrame(o).catch(r=>this.fail(r))}acceptSessionUpdatedStatusEvent(e){let t=e.data.local_session_id,s=this.sessions.get(t);s&&(this.sessions.delete(t),this.closedSessionIds.add(t),s.fail(Su(e.data)))}writeFrame(e){let t;try{t=`${po(e)}
19
- `,Se(t,this.maxFrameBytes,"SDK daemon input")}catch(o){let r=o instanceof Error?o:new Error(String(o));return this.fail(r),Promise.reject(r)}let s=this.writeChain.then(()=>new Promise((o,r)=>{this.input.write(t,"utf8",i=>{if(i){r(i);return}o()})}));return this.writeChain=s.catch(()=>{}),s.catch(o=>this.fail(o)),s}};function hu(n){let e;try{e=JSON.parse(n)}catch{return}if(!yo(e)||!So(e,["protocol_version","frame_type","request_id","ok","error"])||e.protocol_version!==1||e.frame_type!=="response"||e.ok!==!1||typeof e.request_id!="string"||e.request_id.length===0)return;let t=e.error;if(!(!yo(t)||!So(t,["code","message","retryable"])||t.code!=="PROTOCOL_VERSION_UNSUPPORTED"||typeof t.message!="string"||t.message.length===0||t.retryable!==!1))return e.request_id}function yo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function So(n,e){return Object.keys(n).length===e.length&&e.every(t=>Object.hasOwn(n,t))}function yu(n){let e=gu.has(n.request.type),t=n.request_id.startsWith("daemon_sdk_");return e&&t&&n.session_id===void 0?"valid":e||t?"contradictory":"none"}function Su(n){let e=n.error,t=typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{},s=typeof t.message=="string"&&t.message.length>0?t.message:"Qoder CLI Worker exited before Session completed",o=t.exit_code===null||typeof t.exit_code=="number"?t.exit_code:void 0,r=t.signal===null||typeof t.signal=="string"?t.signal:void 0,i=typeof t.stderr=="string"&&t.stderr.length>0?t.stderr:void 0;return new D(s,{exitCode:o,signal:r,stderr:i})}var wu=3e4;function wo(n,e=wu){return Ru(e,"callbackTimeoutMs"),async t=>{switch(t.request.type){case"daemon.auth.fetch_job_token":return vu(n,t,e);case"daemon.auth.fetch_service_account_token":return ku(n,t,e);default:throw N("METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${t.request.type}`)}}}async function vu(n,e,t){if(n.type!=="jobToken")throw N("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host job token callback is not configured");let s=vo(e,["reason","session_id"]),o=ko(s.reason),r=bu(s.session_id,"session_id"),i=new AbortController;try{let a=await bo(()=>n.fetchJobToken({requestId:e.request_id,reason:o,sessionId:r},{signal:i.signal}),t,i);if(!a||typeof a.token!="string"||!a.token)throw N("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback did not provide a token");return{token:a.token}}catch(a){throw a instanceof ce?a:N("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback failed",!0)}}async function ku(n,e,t){if(n.type!=="serviceAccount"||typeof n.fetchServiceAccountToken!="function")throw N("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host Service Account token callback is not configured");let s=vo(e,["reason","required_scopes"]);ko(s.reason),_u(s.required_scopes,"required_scopes");let o=new AbortController;try{let r=await bo(()=>n.fetchServiceAccountToken(),t,o);if(!r||typeof r.token!="string"||!r.token)throw N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback did not provide a token");let i=r.expiresAt;if(i!==void 0&&(!Number.isFinite(i)||i<1e12))throw N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback returned invalid expiresAt");return{token:r.token,...i!==void 0?{expires_at:i}:{}}}catch(r){throw r instanceof ce?r:N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback failed",!0)}}function vo(n,e){let t=Object.keys(n.request).find(s=>s!=="type"&&!e.includes(s));if(t)throw N("DAEMON_AUTH_INVALID_REQUEST",`request contains unknown field: ${t}`);return n.request}function ko(n){if(n!=="initial"&&n!=="unauthorized")throw N("DAEMON_AUTH_INVALID_REQUEST","reason must be initial or unauthorized");return n}function bu(n,e){if(n!==void 0){if(typeof n!="string"||!n)throw N("DAEMON_AUTH_INVALID_REQUEST",`${e} must be a non-empty string`);return n}}function _u(n,e){if(!Array.isArray(n)||n.some(t=>typeof t!="string"))throw N("DAEMON_AUTH_INVALID_REQUEST",`${e} must be an array of strings`);return n}async function bo(n,e,t){let s;try{return await Promise.race([Promise.resolve().then(n),new Promise((o,r)=>{s=setTimeout(()=>{t.abort(),r(new Error("daemon auth callback timed out"))},e),s.unref?.()})])}finally{s&&clearTimeout(s)}}function Ru(n,e){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`${e} must be a positive integer`)}function N(n,e,t=!1){return new ce({code:n,message:e,retryable:t})}var Eu="QODER_AGENT_SDK_DAEMON",Pu="QODER_AGENT_SDK_DAEMON_IDLE_TIMEOUT_MS",Tu="ELECTRON_RUN_AS_NODE",_o="--sdk",Mu=30*6e4,Ro=2e3,Co=8192,Eo=255,Mo=new WeakMap;function gn(n){return Mo.get(n)}async function hn(n){let e=n.workerIdleTimeoutMs??Mu;Au(e),Du(n.initializeTimeoutMs);let t=new H({auth:n.auth,env:n.env,proxy:n.proxy}),s=await t.prepare(),o=Nt(n.auth,n.env),r=await Ou(n.pathToQoderCLIExecutable),i={...s.env,...r.env,[Eu]:"1",[Pu]:String(e)},a;try{a=await fn.spawn({command:r.command,args:r.args,cwd:n.cwd,env:i});let u=new _t({input:a.process.stdin,output:a.process.stdout,requestHandler:wo(n.auth)});a.setConnection(u),await u.initialize(Ye,{capabilities:["session_delete_v1"],auth:o,...n.initializeTimeoutMs===void 0?{}:{timeoutMs:n.initializeTimeoutMs}}),await t.cleanupAuthPayload();let c=new pn(u,a);return Mo.set(c,{auth:n.auth,transportProvider:new mn(u,s.env,n.cwd)}),c}catch(u){throw await t.cleanupAuthPayload(),await a?.stop().catch(()=>{}),u}}var pn=class{constructor(e,t){this.connection=e;this.processController=t;this.connection.onFailure(s=>this.acceptDaemonFailure(s)),this.processController.onFailure(s=>this.acceptDaemonFailure(s))}currentState="ready";stopPromise;get state(){return this.currentState}async listSessions(){return this.requireReady(),(await this.connection.listSessions()).map(Po)}async renameSession(e,t){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");let s=Iu(t),o=await this.connection.renameSession(e,s);return Po(o.session)}async deleteSession(e){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");await this.connection.deleteSession(e)}async getModels(e={}){return this.requireReady(),(await this.connection.query("get_models",{...e.fetchStrategy?{fetchStrategy:e.fetchStrategy}:{},...e.uid?{uid:e.uid}:{},...e.outerProviders?{outerProviders:e.outerProviders}:{}})).models}async getByokConfig(){return this.requireReady(),(await this.connection.query("get_byok_config",{})).providers}async validateByokModel(e){return this.requireReady(),(await this.connection.query("validate_byok_model",{provider:e.provider,model:e.model,api_key:e.api_key,...e.url!==void 0?{url:e.url}:{},...e.style!==void 0?{style:e.style}:{},...e.model_type!==void 0?{model_type:e.model_type}:{},...e.provider_type!==void 0?{provider_type:e.provider_type}:{}})).success}async listByokConfigs(){return this.requireReady(),(await this.connection.query("list_byok_configs",{})).configs}async createByokConfig(e){return this.requireReady(),(await this.connection.query("create_byok_config",{config:e})).config}async updateByokConfig(e){this.requireReady(),await this.connection.query("update_byok_config",{config:e})}async deleteByokConfig(e){this.requireReady(),await this.connection.query("delete_byok_config",{target:e})}async checkByokConfig(e){return this.requireReady(),this.connection.query("check_byok_config",{config:e})}async listPlugins(){return this.requireReady(),(await this.connection.query("list_plugins",{})).plugins}async getUsageInfo(){this.requireReady();let e=await this.connection.query("get_usage_info",{}),t=mt(e.usage),s=pt(e.session);return!t&&!s?null:{...t??{},...s?{session:s}:{}}}async accountInfo(){return this.requireReady(),(await this.connection.query("account_info",{})).account}stop(){return this.stopPromise||(this.processController.beginStopping(),this.currentState!=="failed"&&this.setDaemonState("stopping"),this.stopPromise=this.stopInternal()),this.stopPromise}async stopInternal(){try{await this.connection.shutdown().catch(()=>{}),await this.processController.stop(),this.currentState!=="failed"&&this.setDaemonState("stopped")}catch(e){throw this.setDaemonState("failed",e instanceof Error?e:new Error(String(e))),e}}acceptDaemonFailure(e){this.currentState==="ready"&&this.setDaemonState("failed",e)}setDaemonState(e,t){this.currentState!==e&&(this.currentState=e)}requireReady(){if(this.currentState!=="ready")throw new Error("Daemon is not ready")}};function Iu(n){if(typeof n!="string")throw new TypeError("title must be a non-empty string");let e=n.replace(/[\r\n]+/g," ").trim();if(!e)throw new TypeError("title must be a non-empty string");if(e.length>Eo)throw new TypeError(`title must be at most ${Eo} characters`);return e}function Po(n){return{localSessionId:n.local_session_id,title:n.title,...n.cwd?{cwd:n.cwd}:{},state:n.state,createdAt:n.created_at,updatedAt:n.updated_at}}var mn=class{constructor(e,t,s){this.connection=e;this.daemonEnv=t;this.defaultCwd=s}create(e){let t=new H({...e,auth:void 0,env:this.daemonEnv}),s=t.buildArgs();return this.connection.createSessionTransport({workerArgs:s,cwd:e.cwd??this.defaultCwd,...e.materializedSessionConfigDir!==void 0?{configDir:e.materializedSessionConfigDir}:{},cleanup:()=>t.cleanupGeneratedSettings()})}};function Au(n){if(!Number.isSafeInteger(n)||n<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer")}function Du(n){if(n!==void 0&&(!Number.isSafeInteger(n)||n<=0))throw new TypeError("initializeTimeoutMs must be a positive integer")}async function Ou(n){let e=Pe({pathToQoderCLIExecutable:n},oe),t,s={};if(e.transport==="worker"){let o=await ke(Y(e.pathToQoderWorkerRuntime));t=o.runtimePath,s=o.env}else t=n??J();return nt(t)?{command:process.execPath,args:[t,_o],env:{...s,...typeof process.versions.electron=="string"?{[Tu]:"1"}:{}}}:{command:t,args:[_o],env:s}}var fn=class n{constructor(e){this.process=e;this.exited=new Promise(t=>{e.once("exit",()=>t()),e.once("error",()=>t())}),e.stderr?.on("data",t=>{this.stderrTail+=t.toString("utf8"),this.stderrTail.length>Co&&(this.stderrTail=this.stderrTail.slice(-Co))}),e.once("error",t=>{this.reportFailure(new D(`Failed to spawn Qoder CLI daemon: ${t.message}`,{stderr:this.getStderr(),cause:t}))}),e.once("exit",(t,s)=>{this.stopping||this.reportFailure(new D(t!==null?`Qoder CLI daemon exited with code ${t}`:`Qoder CLI daemon terminated by signal ${s}`,{exitCode:t,signal:s,stderr:this.getStderr()}))})}connection;failure;failureListeners=new Set;stderrTail="";exited;stopping=!1;static async spawn(e){let t;try{t=Cu(e.command,e.args,{cwd:e.cwd,env:e.env,stdio:["pipe","pipe","pipe"]}),await qu(t)}catch(s){throw new D(`Failed to spawn Qoder CLI daemon: ${xu(s)}`,{cause:s})}if(!t.stdin||!t.stdout)throw t.kill("SIGTERM"),new Error("Qoder CLI daemon did not expose piped stdin/stdout");return new n(t)}setConnection(e){this.connection=e,this.failure&&e.fail(this.failure)}onFailure(e){this.failureListeners.add(e),this.failure&&e(this.failure)}beginStopping(){this.stopping=!0}async stop(){this.beginStopping(),!await To(this.exited,Ro)&&(this.process.kill("SIGTERM"),!await To(this.exited,Ro)&&(this.process.kill("SIGKILL"),await this.exited))}getStderr(){return this.stderrTail.trim()||void 0}reportFailure(e){if(!(this.stopping||this.failure)){this.failure=e,this.connection?.fail(e);for(let t of this.failureListeners)t(e)}}};function xu(n){return n instanceof Error?n.message:String(n)}async function qu(n){n.pid===void 0&&await new Promise((e,t)=>{let s=()=>{n.off("error",o),e()},o=r=>{n.off("spawn",s),t(r)};n.once("spawn",s),n.once("error",o)})}async function To(n,e){let t;try{return await Promise.race([n.then(()=>!0),new Promise(s=>{t=setTimeout(()=>s(!1),e),t.unref?.()})])}finally{t&&clearTimeout(t)}}var yn=class extends Error{code="auth_not_configured";constructor(){super("The auth option is required when calling query(); configure options.auth so the SDK can create an auth payload file before spawning qodercli."),this.name="AuthNotConfiguredError"}};function Nu(n,e){if(e){if(n.transport!==void 0)throw new Error("options.transport cannot be combined with options.daemon.");let s=gn(e);if(!s)throw new Error("options.daemon must be returned by startDaemon().");return s.transportProvider}if(n.transport!==void 0){if(os(n.transport))return n.transport;throw new Error("options.transport must implement QueryTransportProvider. Use ProcessTransport.default, WorkerTransport.default, or a custom provider with create().")}let t=Pe(n,oe);return t.transport==="worker"?new be({pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):we.default}function Sn(n){let{prompt:e,options:t={}}=n,s=t.daemon,o;s&&(o=ju(t));let r=s?gn(s):void 0,i=t.sessionStore,a=t.sessionStoreFlush??"batched",u=Nu(t,s),c=new ct({debug:t.debug,debugFile:t.debugFile,stderr:t.stderr});if(s!==void 0&&c.record("[DaemonRoute] explicit_daemon transport_overridden"),t.canUseTool&&t.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");if(t.planMode!==void 0&&typeof t.planMode!="boolean")throw new TypeError("options.planMode must be a boolean");t.goalMaxTurns!==void 0&&Fe(t.goalMaxTurns);let d=r?.auth??t.auth;if(d==null)throw new yn;let m=i!==void 0&&t.forkSession===!0;if(i&&t.persistSession===!1)throw new Error(`sessionStore cannot be used with persistSession: false -- the storage adapter requires local writes to mirror from. Use ${v.configDirEnv}=/tmp for ephemeral local writes with external mirroring.`);if(i&&r===void 0&&!(u instanceof we)&&!(u instanceof be))throw new Error("sessionStore requires ProcessTransport or WorkerTransport.");if(i&&t.sessionStoreFlush!==void 0&&t.sessionStoreFlush!=="batched"&&t.sessionStoreFlush!=="eager")throw new Error('sessionStoreFlush must be "batched" or "eager".');if(i&&t.loadTimeoutMs!==void 0&&(!Number.isFinite(t.loadTimeoutMs)||t.loadTimeoutMs<=0))throw new Error("loadTimeoutMs must be a positive finite number.");if(i&&t.experimentalCloudAgent!==void 0)throw new Error("sessionStore is not supported by the experimental Cloud Agent runtime.");if(t.cloudAgent!==void 0)throw new Error("options.cloudAgent is not supported. Use options.experimentalCloudAgent for the experimental Cloud Agent runtime.");if(t.experimentalCloudAgent!==void 0)return Qs(t),Gs({prompt:e,options:t,diagnostics:c});let p=io(t.memory),l=uo(t.evolution?.skill),f=t.onAuthExpired,y=!1,g=f?()=>{y||(y=!0,Promise.resolve(f()).catch(b=>{c.record("[query] onAuthExpired callback threw:",b)}))}:void 0,S=new Map,k=new Map,h=new Map,P={},T={},ne={};if(t.mcpServers)for(let[b,L]of Object.entries(t.mcpServers)){let se=L.tools;if(Array.isArray(se)&&se.length>0&&(T[b]=se),L.type==="sdk"&&"instance"in L&&L.instance){let he=L.instance;if(S.set(b,he),se){let Je=Ot(b,se);Je&&(ne[b]=Je)}let Nn=new gt(Je=>{vs(b,Je,h)});k.set(b,Nn),he.connect(Nn).catch(()=>{})}else P[b]=L}let R=Object.keys(P).length>0,M=Object.keys(T).length>0,We=t.pathToQoderCLIExecutable,dr=t.env,pr=d?.type==="jobToken"?d.fetchJobToken:void 0,mr=d?.type==="serviceAccount"?d.fetchServiceAccountToken:void 0,He={pathToQoderCLIExecutable:We,executable:t.executable,executableArgs:t.executableArgs,env:dr,proxy:t.proxy,vpcEndpoint:t.vpcEndpoint,cwd:t.cwd,closeGraceMs:t.closeGraceMs,auth:d,model:t.model,agent:t.agent,debug:t.debug,diagnostics:c,maxTurns:t.maxTurns,includePartialMessages:t.includePartialMessages,includeHookEvents:t.includeHookEvents,sessionMirror:i!==void 0,permissionMode:t.permissionMode,allowDangerouslySkipPermissions:t.allowDangerouslySkipPermissions,permissionPromptToolName:t.permissionPromptToolName,canUseTool:t.canUseTool!==void 0,continue:t.continue,resume:t.resume,resumeSessionAt:t.resumeSessionAt,resumeDropsTurn:t.resumeDropsTurn,forkSession:t.forkSession,sessionId:t.sessionId,persistSession:t.persistSession,allowedTools:(()=>{let b=t.allowedTools??[];if(t.skills===void 0)return b.length>0?b:void 0;let L=t.skills==="all"?["Skill"]:t.skills.map(he=>`Skill(${he})`),se=new Set(b);return[...b,...L.filter(he=>!se.has(he))]})(),disallowedTools:t.disallowedTools,tools:t.tools,toolConfig:t.toolConfig,extensions:t.extensions,extraArgs:t.extraArgs,mcpServers:R?P:void 0,mcpToolPolicies:M?T:void 0,allowedMcpServerNames:t.allowedMcpServerNames,strictMcpConfig:t.strictMcpConfig,settings:t.settings,securityScan:t.securityScan,settingSources:t.settingSources,additionalDirectories:t.additionalDirectories,plugins:t.plugins,enableFileCheckpointing:t.enableFileCheckpointing,stderr:"pipe",stderrHandler:t.stderr,spawnQoderCLIProcess:t.spawnQoderCLIProcess,onAuthExpired:g},On=i!==void 0&&(t.resume!==void 0||t.continue===!0)?new ut(async()=>{let b=await so({store:i,cwd:t.cwd,resume:t.resume,continue:t.continue,loadTimeoutMs:t.loadTimeoutMs,env:t.env});if(!b)return{transport:rt(u,{...He,continue:!1})};try{return{transport:rt(u,{...He,env:{...He.env??process.env,[v.configDirEnv]:b.configDir},materializedSessionConfigDir:b.configDir,continue:!1,resume:b.sessionId}),cleanup:b.cleanup}}catch(L){throw await b.cleanup(),L}}):rt(u,He);On.initialize().catch(()=>{});let fr=typeof e=="string",ge=t.systemPrompt,xn,qn;if(typeof ge=="string")xn=ge;else if(typeof ge=="object"&&ge!==null&&ge.type==="preset"){let b=ge;if(b.preset!=="qodercli")throw new Error(`Unsupported systemPrompt preset: ${String(b.preset)}`);qn=b.append}let gr={systemPrompt:xn,appendSystemPrompt:qn,modelRequestPatches:t.modelRequestPatches,agents:t.agents,skills:Array.isArray(t.skills)?t.skills:void 0,planMode:s!==void 0?t.planMode??!1:t.planMode,promptSuggestions:t.promptSuggestions,goalMaxTurns:t.goalMaxTurns,enableFileCheckpointing:t.enableFileCheckpointing,memory:p.config,evolution:l.config?{skill:l.config}:void 0,customContext:t.customContext,beforeInitialize:void 0,requireSessionStoreForkBarrier:m,...s!==void 0?{independentPlanModeControls:!0,permissionMode:o}:{}},At=new ft(On,fr,t.canUseTool,t.hooks,t.abortController,S,gr,t.onElicitation,c,g,t.controlRequestTimeoutMs,k,h,pr,t.resolveModel,t.resolveModelTimeoutMs,i,a,ne,mr,p.callbacks,l.callbacks,t.resolveSessionArtifacts);if(typeof e=="string"){let b={type:"user",message:{role:"user",content:[{type:"text",text:e}]},parent_tool_use_id:null};At.streamInput(async function*(){yield b}())}else At.streamInput(e);return At}function ju(n){if(n.planMode!==void 0&&typeof n.planMode!="boolean")throw new TypeError("options.planMode must be a boolean.");let e=je(n.permissionMode),s=[["auth",n.auth],["transport",n.transport],["env",n.env],["pathToQoderCLIExecutable",n.pathToQoderCLIExecutable],["executable",n.executable],["executableArgs",n.executableArgs],["proxy",n.proxy],["spawnQoderCLIProcess",n.spawnQoderCLIProcess],["closeGraceMs",n.closeGraceMs],["sessionStore",n.sessionStore]].find(([,o])=>o!==void 0);if(s)throw new Error(`options.${s[0]} is part of startDaemon() configuration and cannot be overridden by a daemon-bound Query.`);return e}var wn=class{resolvePrompt;prompt=new Promise(e=>{this.resolvePrompt=e});settled=!1;activate(e){if(this.settled)throw new Error("WarmQuery can only be queried once");this.settled=!0,this.resolvePrompt(e)}discard(){this.settled||(this.settled=!0,this.resolvePrompt(void 0))}async*[Symbol.asyncIterator](){let e=await this.prompt;if(e!==void 0){if(typeof e=="string"){yield{type:"user",message:{role:"user",content:[{type:"text",text:e}]},parent_tool_use_id:null};return}yield*e}}},vn=class{constructor(e,t){this.session=e;this.gate=t}used=!1;closed=!1;query(e){if(this.closed)throw new Error("WarmQuery is closed");if(this.used)throw new Error("WarmQuery can only be queried once");return this.used=!0,this.gate.activate(e),this.session}close(){this.closed||(this.closed=!0,this.gate.discard(),this.session.close())}async[Symbol.asyncDispose](){this.closed||(this.closed=!0,this.gate.discard()),await this.session.close()}};async function Fu(n={}){let e=n.initializeTimeoutMs??6e4;if(!Number.isFinite(e)||e<=0)throw new TypeError("initializeTimeoutMs must be a positive finite number");if(n.options?.experimentalCloudAgent!==void 0)throw new Error("startup is not supported by the experimental Cloud Agent runtime");let t=new wn,s=Sn({prompt:t,options:n.options}),o;try{return await Promise.race([s.initializationResult(),new Promise((r,i)=>{o=setTimeout(()=>{i(new Error(`Qoder Agent SDK startup timed out after ${e}ms while waiting for qodercli initialization. Check authentication and network connectivity, then retry.`))},e)})]),new vn(s,t)}catch(r){throw t.discard(),await s.close(),r}finally{o!==void 0&&clearTimeout(o)}}import{readFile as Ku}from"node:fs/promises";import Uu from"node:os";import U from"node:path";var Lu=["user","project","local"],_n=new Set(["__proto__","constructor","prototype"]),Bu=/^[\p{L}\p{N}\p{M}._ -]+$/u,$u=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu,zu=new Set([".git",".svn",".hg",".vscode",".idea",".husky",".github","node_modules","bower_components"]),Qu=new Set(["mcpServers","providers","skillOverrides","enabledPlugins","extraKnownMarketplaces","pluginConfigs"]),Gu=new Set(["context.fileFiltering.customIgnoreFilePaths","tools.exclude","mcp.enabledProjectMcpServers","mcp.disabledProjectMcpServers","security.approvedExternalImportProjects","advanced.excludedEnvVars","extensions.disabled","extensions.workspacesWithMigrationNudge","plugins.enabled","plugins.disabled","skills.disabled","blockedMarketplaces","allowedHttpHookUrls"]);function le(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function Wu(n){let e=n.charCodeAt(0)===65279?n.slice(1):n,t="",s=!1,o=!1,r=!1,i=!1;for(let a=0;a<e.length;a+=1){let u=e[a],c=e[a+1];if(r){u===`
8
+ ${e.stack??e.message}`;try{return` ${JSON.stringify(e)}`}catch{return` ${String(e)}`}}};import{randomUUID as ia}from"node:crypto";var ys=["copy_text","helpful","not_helpful","create_branch_task","copy_markdown","add_reply_to_task"];var Ss=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function ws(n){if(!Ss.test(n.uuid))throw new Error("uuid must be a UUID");if(!n.sessionId.trim())throw new Error("sessionId is required");if(!Ss.test(n.parentResultUuid))throw new Error("parentResultUuid must be a UUID");if(!ys.includes(n.action))throw new Error("action is not supported");return{type:"feedback",subtype:"action",uuid:n.uuid,action:n.action,session_id:n.sessionId,parent_result_uuid:n.parentResultUuid}}var ne=class{queue=[];readResolve;readReject;isDone=!1;errorValue;started=!1;returnCallback;constructor(e){this.returnCallback=e}[Symbol.asyncIterator](){if(this.started)throw new Error("Stream can only be iterated once");return this.started=!0,this}async next(){if(this.queue.length>0)return{done:!1,value:this.queue.shift()};if(this.isDone)return{done:!0,value:void 0};if(this.errorValue!==void 0)throw this.errorValue;return new Promise((e,t)=>{this.readResolve=e,this.readReject=t})}enqueue(e){if(!this.isDone)if(this.readResolve){let t=this.readResolve;this.readResolve=void 0,this.readReject=void 0,t({done:!1,value:e})}else this.queue.push(e)}done(){if(this.isDone=!0,this.readResolve){let e=this.readResolve;this.readResolve=void 0,this.readReject=void 0,e({done:!0,value:void 0})}}error(e){if(this.errorValue=e,this.readReject){let t=this.readReject;this.readResolve=void 0,this.readReject=void 0,t(e)}}async return(){return this.isDone=!0,this.returnCallback?.(),{done:!0,value:void 0}}async throw(e){return this.error(e),{done:!0,value:void 0}}};import{isAbsolute as Qi}from"node:path";function Qt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Fe(n,e){let t=n[e];if(typeof t!="string"||t.length===0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-empty string`);return t}function vs(n,e){let t=n[e];if(t!==void 0){if(typeof t!="string")throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a string`);return t}}function ks(n,e){let t=n[e];if(t!==void 0){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-negative finite number`);return t}}function bs(n,e){let t=n[e];if(!Number.isSafeInteger(t)||t<0)throw new TypeError(`resolveSessionArtifacts result field "${e}" must be a non-negative safe integer`);return t}function Gi(n){if(!Qt(n))throw new TypeError("resolveSessionArtifacts result artifacts must contain objects");let e=Fe(n,"path");if(!Qi(e))throw new TypeError('resolveSessionArtifacts result field "path" must be absolute');let t=Fe(n,"displayPath"),s=Fe(n,"name"),o=vs(n,"relativePath"),r=vs(n,"mime"),i=ks(n,"size"),a=ks(n,"mtime"),u;if(n.group!==void 0){if(!Qt(n.group))throw new TypeError('resolveSessionArtifacts result field "group" must be an object');u={key:Fe(n.group,"key"),name:Fe(n.group,"name")}}let c={path:e,displayPath:t,name:s,...u?{group:u}:{},...o!==void 0?{relativePath:o}:{},...i!==void 0?{size:i}:{},...r!==void 0?{mime:r}:{},...a!==void 0?{mtime:a}:{}};if(n.kind==="presented")return{...c,kind:"presented"};if(n.kind!=="changed")throw new TypeError('resolveSessionArtifacts result field "kind" must be "presented" or "changed"');if(typeof n.isNew!="boolean")throw new TypeError('resolveSessionArtifacts result field "isNew" must be a boolean');return{...c,kind:"changed",additions:bs(n,"additions"),deletions:bs(n,"deletions"),isNew:n.isNew}}function _s(n){if(!Qt(n)||!Array.isArray(n.artifacts))throw new TypeError("resolveSessionArtifacts must return an object with an artifacts array");return{artifacts:n.artifacts.map(Gi)}}var F=class extends Error{constructor(e="Operation was aborted"){super(e),this.name="AbortError"}},Ke=class extends Error{timeoutMs;constructor(e){super(`resolveModel did not return within ${e}ms. Increase resolveModelTimeoutMs or ensure the callback resolves faster.`),this.name="ModelPolicyTimeoutError",this.timeoutMs=e}},K=class extends Error{cliProtocolVersion;sdkProtocolVersion;constructor(e,t){super(`Wire protocol major mismatch: CLI announced "${e}" but this SDK was built for "${t}". Upgrade either qodercli or @qoder-ai/qoder-agent-sdk so the major versions align.`),this.name="ProtocolVersionMismatchError",this.cliProtocolVersion=e,this.sdkProtocolVersion=t}},U=class extends Error{capability;constructor(e){super(`The running qodercli does not advertise the required capability "${e}". Upgrade qodercli or use a matching bundled SDK runtime.`),this.name="UnsupportedCliCapabilityError",this.capability=e}},Gt="CONTROL_REQUEST_TIMEOUT",Ce=class extends Error{requestId;code;retryable;details;constructor(e){super(e.message),this.name="ControlRequestError",this.requestId=e.requestId,this.code=e.code,this.retryable=e.retryable===!0,this.details=e.details}};var Ht="1.5.0";var Hi=new Set(["default","acceptEdits","auto","bypassPermissions"]);function Ue(n){if(n===void 0)return;if(n==="yolo")return"bypassPermissions";if(typeof n=="string"&&Hi.has(n))return n;if(n==="plan")throw new Error('permissionMode="plan" is not supported for daemon Queries; use planMode or setPlanMode() instead.');let e=typeof n=="string"?JSON.stringify(n):n===null?"null":typeof n;throw new Error(`permissionMode=${e} is not supported for daemon Queries; use default, acceptEdits, auto, or bypassPermissions.`)}function Le(n){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`goalMaxTurns must be a positive safe integer, received ${String(n)}.`)}function Rs(n,e,t,s){return new Promise((o,r)=>{if(!("id"in e&&e.id!==null)){try{t.onmessage?.(e)}catch(u){r(u);return}o({jsonrpc:"2.0"});return}let a=`${n}:${e.id}`;s.set(a,{resolve:o,reject:r}),t.onmessage?t.onmessage(e):(s.delete(a),r(new Error(`No message handler registered for MCP server "${n}"`)))})}function Cs(n,e,t){if("id"in e&&e.id!==null){let s=`${n}:${e.id}`,o=t.get(s);if(o)return o.resolve(e),t.delete(s),!0}return!1}function Es(n,e,t){let s=0,o=`${n}:`,r=Array.from(t.entries());for(let i of r){let[a,u]=i;a.startsWith(o)&&(u.reject(e),t.delete(a),s++)}return s}import{randomUUID as Wi}from"crypto";function Ms(n){if(typeof n!="object"||n===null)return!1;let e=n;return e.type==="transcript_mirror"&&typeof e.filePath=="string"&&Array.isArray(e.entries)}var Ji=500,Vi=1024*1024,Yi=6e4,pt=class{constructor(e){this.options=e;this.holding=e.holdUntilFlush===!0}states=new Map;failures=[];holding;receivedEntryCount=0;enqueue(e){let t=Xi(e.filePath),s=Zi(e.entries);this.receivedEntryCount+=s.length;let o=Ts(t),r=this.states.get(o);r||(r={key:t,entries:[],bytes:0,tail:Promise.resolve()},this.states.set(o,r)),r.entries.push(...s),r.bytes+=ta(s),!this.holding&&(this.options.flushMode==="eager"||r.entries.length>=Ji||r.bytes>=Vi)&&this.drain(r)}async flush(e={}){for(let t of this.states.values())this.drain(t);if(await Promise.all([...this.states.values()].map(t=>t.tail)),e.throwOnError===!0&&this.failures.length>0)throw new AggregateError(this.failures,`SessionStore failed to persist ${this.failures.length} transcript mirror batch(es).`)}async completeBarrier(){if(this.receivedEntryCount===0)throw new Error("SessionStore Fork persistence barrier received no transcript entries.");await this.flush({throwOnError:!0}),this.holding=!1}discardPending(){for(let e of this.states.values())e.entries=[],e.bytes=0}drain(e){if(e.entries.length===0)return;let t=e.entries;e.entries=[],e.bytes=0,e.tail=e.tail.then(async()=>{try{await na(this.options.store,e.key,t,this.options.appendTimeoutMs??Yi)}catch(s){this.failures.push(s),this.options.diagnostics?.record(`[SessionStore] append failed for ${Ts(e.key)}`,s),this.options.onMirrorError({type:"system",subtype:"mirror_error",error:s instanceof Error?s.message:String(s),key:{...e.key},uuid:Wi(),session_id:e.key.sessionId})}})}};function Xi(n){let e=n.replaceAll("\\","/").split("/").filter(Boolean),t=e.lastIndexOf("projects"),s=e.slice(t+1);if(t<0||s.length<2)throw new Error(`Invalid transcript mirror path: ${n}`);let o=s[0],r=/^([0-9a-f-]{36})\.jsonl$/i.exec(s[1]);if(s.length===2&&r)return{projectKey:o,sessionId:Ps(r[1])};let i=Ps(s[1]),a=s.slice(2),u=a.at(-1);a[a.length-1]=u.endsWith(".jsonl")?u.slice(0,-6):u;let c=a.join("/");return ea(c),{projectKey:o,sessionId:i,subpath:c}}function Zi(n){return n.map((e,t)=>{if(typeof e!="object"||e===null||typeof e.type!="string")throw new Error(`Transcript mirror entry ${t} is not a typed object`);return e})}function Ps(n){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(n))throw new Error(`Invalid transcript session id: ${n}`);return n}function ea(n){let e=n.split("/");if(!n||n.includes("\0")||/^[a-z]:/i.test(n)||e.some(t=>!t||t==="."||t===".."))throw new Error(`Invalid transcript subpath: ${n}`)}function Ts(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}function ta(n){return n.reduce((e,t)=>e+Buffer.byteLength(JSON.stringify(t))+1,0)}async function na(n,e,t,s){await sa(n.append({...e},structuredClone(t)),s)}async function sa(n,e){let t;n.catch(()=>{});try{await Promise.race([n,new Promise((s,o)=>{t=setTimeout(()=>o(new Wt(e)),e)})])}finally{t!==void 0&&clearTimeout(t)}}var Wt=class extends Error{constructor(e){super(`SessionStore append timed out after ${e}ms`),this.name="SessionStoreTimeoutError"}};function ft(n){if(!le(n)||Array.isArray(n))return;let e=n.total_credits,t=n.model_usage;if(!Jt(e)||e<0||!le(t)||Array.isArray(t))return;let s={};for(let[o,r]of Object.entries(t)){if(!le(r)||Array.isArray(r))continue;let i=r.credits;Jt(i)&&i>=0&&(s[o]={credits:i})}return{total_credits:e,model_usage:s}}function gt(n){if(!le(n)||Array.isArray(n))return null;let e={};Ee(e,n,"userId"),Ee(e,n,"userType"),H(e,n,"totalUsagePercentage"),mt(e,n,"isHighestTier"),H(e,n,"expiresAt"),Ee(e,n,"upgradeUrl"),mt(e,n,"isQuotaExceeded"),mt(e,n,"isPlanQuotaProrated");let t=As(n.userQuota);t&&(e.userQuota=t);let s=oa(n.addOnQuota);s&&(e.addOnQuota=s);let o=ra(n.orgResourcePackage);return o&&(e.orgResourcePackage=o),e}function le(n){return typeof n=="object"&&n!==null}function Jt(n){return typeof n=="number"&&Number.isFinite(n)}function Vt(n){return Object.keys(n).length>0}function H(n,e,t){let s=e[t];Jt(s)&&(n[t]=s)}function Ee(n,e,t){let s=e[t];typeof s=="string"&&(n[t]=s)}function mt(n,e,t){let s=e[t];typeof s=="boolean"&&(n[t]=s)}function As(n){if(!le(n)||Array.isArray(n))return;let e={};return H(e,n,"total"),H(e,n,"used"),H(e,n,"remaining"),H(e,n,"percentage"),Ee(e,n,"unit"),Vt(e)?e:void 0}function oa(n){if(!le(n)||Array.isArray(n))return;let e=As(n)??{};return Ee(e,n,"detailUrl"),Vt(e)?e:void 0}function ra(n){if(!le(n)||Array.isArray(n))return;let e={};return H(e,n,"used"),H(e,n,"cap"),H(e,n,"remaining"),H(e,n,"percentage"),mt(e,n,"available"),Ee(e,n,"unit"),Vt(e)?e:void 0}function Is(){return Math.random().toString(36).substring(2,15)}function Ds(n,e){let t="type"in e&&!("subtype"in e)?{...e,subtype:e.type}:e;return{type:"control_request",request_id:n,request:t}}function Os(n,e){return{type:"control_response",response:{subtype:"success",request_id:n,response:e}}}function xs(n,e,t){return{type:"control_response",response:{subtype:"error",request_id:n,error:e,...t?{code:t}:{}}}}function qs(n){return typeof n=="object"&&n!==null&&n.type==="control_response"}function Ns(n){return typeof n=="object"&&n!==null&&n.type==="control_request"}function js(n){return typeof n=="object"&&n!==null&&(n.type==="control_cancel_request"||n.type==="control_cancel")}function Be(n){if(typeof n!="object"||n===null)return;let e=n,t=e.subtype;if(typeof t=="string")return t;let s=e.type;return typeof s=="string"?s:void 0}function Fs(n){if(typeof n!="object"||n===null)return!1;let e=n.type;return e==="keepalive"||e==="keep_alive"}function Ks(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_text"}function Us(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_tool_use_summary"}function Ls(n){return typeof n=="object"&&n!==null&&n.type==="post_turn_summary"}function Bs(n){return typeof n=="object"&&n!==null&&n.type==="result"}var aa="<synthetic>";function ua(n){return n.type!=="assistant"||n.isApiErrorMessage===!0||n.message.model!==aa?n:{...n,isApiErrorMessage:!0}}var ht=class n{constructor(e,t,s,o,r,i,a,u,c,l,m,p,d,f,y,g,S,k="batched",h,P,T,ie,R,J,qe=!1){this.hostActionDirect=qe;if(this.transport=e,this.isSingleTurn=t,this.canUseTool=s,this.hooks=o??{},this.abortController=r,this.sdkMcpServers=i??new Map,this.sdkMcpTransports=p??new Map,this.pendingMcpResponses=d??new Map,this.sdkMcpToolOverrides=h??{},this.initConfig=a??{},this.onElicitation=u,this.onAuthExpired=l,this.fetchJobToken=f,this.fetchServiceAccountToken=P,this.diagnostics=c,this.controlRequestTimeoutMs=m??6e4,this.resolveModel=y,this.resolveModelTimeoutMs=g??500,this.memoryCallbacks=T,this.skillEvolutionCallbacks=ie,this.hostActionFallback=J,this.resolveSessionArtifacts=R,this.inputStream=new ne(()=>{this.close().catch(()=>{})}),S&&(this.transcriptMirrorBatcher=new pt({store:S,flushMode:k,holdUntilFlush:this.initConfig.requireSessionStoreForkBarrier===!0,diagnostics:c,onMirrorError:V=>this.inputStream.enqueue(V)})),this.readLoopPromise=this.readMessages().catch(V=>{this.inputStream.error(V)}),this.initializationPromise=this.initConfig.resolveInitializationFromStream?this.waitForStreamInitialization():this.performInitialize(),this.initializationPromise.catch(()=>{}),this.abortController){let V=this.abortController.signal;V.aborted?this.close().catch(()=>{}):V.addEventListener("abort",()=>{this.close().catch(()=>{})},{once:!0})}}static CUSTOM_CONTEXT_CAPABILITY="custom_context_v1";static SELECTED_SKILLS_CAPABILITY="selected_skills_v1";static INITIALIZE_TIMEOUT_MS=12e4;static BACKGROUND_TASKS_CAPABILITY="background_tasks_v1";static SIDE_QUESTION_CAPABILITY="side_question_v1";static GOAL_CAPABILITY="goal_v1";static GOAL_MAX_TURNS_CAPABILITY="goal_max_turns_v1";static PLAN_MODE_CAPABILITY="plan_mode_v1";static SESSION_STORE_FORK_BARRIER_CAPABILITY="session_store_fork_barrier_v1";static HOST_ACTION_CAPABILITY="host_action";static BYOK_CONFIG_MANAGEMENT_CAPABILITY="byok_config_management_v1";static REMOTE_PROJECTION_REQUEST_ID_PREFIX="daemon_worker_sdk_";transport;inputStream;pendingRequests=new Map;pendingInboundRequests=new Map;hooks;hookCallbacks=new Map;nextHookCallbackId=0;sdkMcpServers;sdkMcpTransports;pendingMcpResponses;sdkMcpToolOverrides;isSingleTurn;canUseTool;abortController;initConfig;onElicitation;onAuthExpired;fetchJobToken;fetchServiceAccountToken;diagnostics;controlRequestTimeoutMs;resolveModel;resolveModelTimeoutMs;transcriptMirrorBatcher;memoryCallbacks;skillEvolutionCallbacks;hostActionFallback;resolveSessionArtifacts;resolveStreamInitialization;initResponse;latestCommands=[];initializationPromise;resultMessage;pendingErrorResultExit=!1;readLoopPromise;closed=!1;authExpiredFired=!1;protocolHandshakeValidated=!1;cliCapabilities;customContextCapabilityWarningEmitted=!1;firstResultReceived=!1;firstResultReceivedResolve;memoryFlushPromise;endInputFlushPromise;skillEvolutionFlushPromise;closePromise;sessionStoreForkBarrierComplete=!1;inputEnded=!1;getRecord(e){return typeof e=="object"&&e!==null?e:void 0}normalizeLogPreview(e){let s=e.replace(/\s+/g," ").trim();return s.length>200?`${s.slice(0,200)}...`:s}extractMessagePreview(e){if(typeof e=="string")return this.normalizeLogPreview(e);if(Array.isArray(e)){for(let i of e){let a=this.extractMessagePreview(i);if(a)return a}return""}let t=this.getRecord(e);if(!t)return"";let s=t.text;if(typeof s=="string")return this.normalizeLogPreview(s);let o=this.extractMessagePreview(t.content);if(o)return o;let r=this.getRecord(t.message);return r?this.extractMessagePreview(r):""}getMessagePreviewSuffix(e){let t=this.extractMessagePreview(e);return t?` preview=${JSON.stringify(t)}`:""}getMessageType(e){let s=this.getRecord(e)?.type;return typeof s=="string"&&s?s:"unknown"}getMessageSubtype(e){let s=this.getRecord(e)?.subtype;return typeof s=="string"&&s?s:"none"}getMessageUuid(e){let s=this.getRecord(e)?.uuid;return typeof s=="string"&&s?s:"none"}recordInboundSessionMessage(e){this.diagnostics?.record(`[QueryRunner] inbound session_message received type=${this.getMessageType(e)} subtype=${this.getMessageSubtype(e)} uuid=${this.getMessageUuid(e)}${this.getMessagePreviewSuffix(e)}`)}recordOutboundSessionMessage(e){let t=this.getRecord(e)?.message,o=this.getRecord(t)?.content,r=Array.isArray(o)?o.length:0;this.diagnostics?.record(`[QueryRunner] outbound session_message sent type=${this.getMessageType(e)} uuid=${this.getMessageUuid(e)} content_blocks=${r}${this.getMessagePreviewSuffix(e)}`)}[Symbol.asyncIterator](){return this}async next(){return this.inputStream.next()}async return(){return await this.close(),{done:!0,value:void 0}}async throw(e){return await this.inputStream.throw(e),{done:!0,value:void 0}}async readMessages(){let e;try{for await(let t of this.transport.readMessages()){if(this.closed)break;if(Ms(t)){try{this.transcriptMirrorBatcher?.enqueue(t)}catch(o){this.diagnostics?.record("[QueryRunner] invalid transcript_mirror frame ignored:",o)}continue}if(qs(t)){this.handleControlResponse(t);continue}if(Ns(t)){this.handleControlRequest(t).catch(o=>{this.diagnostics?.record("[QueryRunner] Error handling control request:",o)});continue}if(js(t)){this.handleControlCancelRequest(t);continue}if(Fs(t)||Ks(t)||Us(t)||Ls(t))continue;if(Bs(t)){await this.transcriptMirrorBatcher?.flush();let o=t;this.recordInboundSessionMessage(o),this.resultMessage=o,this.pendingErrorResultExit=this.resultMessage.is_error===!0,this.firstResultReceived=!0,this.firstResultReceivedResolve?.(),this.firstResultReceivedResolve=void 0,this.inputStream.enqueue(o),this.isSingleTurn&&this.flushBeforeEndInput();continue}let s=ua(t);if((s.type==="user"||s.type==="assistant")&&(this.pendingErrorResultExit=!1),this.recordInboundSessionMessage(s),s.type==="system"&&s.subtype==="init")try{let o=s;this.validateProtocolHandshake(o),this.cliCapabilities=new Set(o.capabilities??[]);let r=o.commands;r!==void 0&&this.replaceLatestCommands(r),this.resolveStreamInitialization&&(this.initResponse=o,this.resolveStreamInitialization(this.initResponse),this.resolveStreamInitialization=void 0)}catch(o){throw this.inputStream.error(o),o}s.type==="system"&&s.subtype==="commands_changed"&&this.replaceLatestCommands(s.commands),this.dispatchMemoryCallbacks(s),this.dispatchSkillEvolutionCallbacks(s),this.notifyAuthExpiredIfNeeded(s),this.inputStream.enqueue(s)}}catch(t){this.isStructuredResultExit(t)?this.diagnostics?.record("[QueryRunner] exit code 1 accepted after the latest structured error result"):e=t}finally{await this.flushTranscriptMirrorForLifecycle();let t=e instanceof Error?e:new Error("Transport closed");this.firstResultReceivedResolve?.(),this.firstResultReceivedResolve=void 0;for(let[,s]of this.pendingRequests)s.reject(t);this.pendingRequests.clear(),e!==void 0?this.inputStream.error(e):this.inputStream.done()}}isStructuredResultExit(e){if(!this.pendingErrorResultExit||e===null||typeof e!="object")return!1;let t=e;return t.exitCode===1&&(t.signal===void 0||t.signal===null)}notifyAuthExpiredIfNeeded(e){if(!this.onAuthExpired||this.authExpiredFired)return;let s=e.type==="auth_status"&&!!e.error,o=e.type==="assistant"&&e.error==="authentication_failed";!s&&!o||(this.authExpiredFired=!0,Promise.resolve(this.onAuthExpired()).catch(r=>{this.diagnostics?.record("[QueryRunner] onAuthExpired callback threw:",r)}))}dispatchMemoryCallbacks(e){if(!(e.type!=="system"||!this.memoryCallbacks))try{let t;e.subtype==="memory_generation"?t=this.memoryCallbacks.onGenerationResult?.(e.result):e.subtype==="memory_consumption"&&(t=this.memoryCallbacks.onConsumptionResult?.(e.result)),t!==void 0&&Promise.resolve(t).catch(s=>{this.diagnostics?.record("[QueryRunner] memory callback threw:",s)})}catch(t){this.diagnostics?.record("[QueryRunner] memory callback threw:",t)}}dispatchSkillEvolutionCallbacks(e){if(!(e.type!=="system"||e.subtype!=="skill_evolution"||!this.skillEvolutionCallbacks))try{let t=this.skillEvolutionCallbacks.onResult?.(e.result);t!==void 0&&Promise.resolve(t).catch(s=>this.diagnostics?.record("[QueryRunner] skill evolution callback threw:",s))}catch(t){this.diagnostics?.record("[QueryRunner] skill evolution callback threw:",t)}}flushBeforeEndInput(){return this.endInputFlushPromise||(this.endInputFlushPromise=this.performFlushBeforeEndInput()),this.endInputFlushPromise}async performFlushBeforeEndInput(){try{let e=[];this.initConfig.memory!==void 0&&e.push(this.flushMemory()),this.initConfig.evolution?.skill!==void 0&&e.push(this.flushSkillEvolution());let s=(await Promise.allSettled(e)).find(o=>o.status==="rejected");if(s)throw s.reason}catch(e){this.diagnostics?.record("[QueryRunner] post-turn flush before end input failed:",e)}finally{this.endTransportInput()}}endTransportInput(){this.inputEnded||(this.inputEnded=!0,this.transport.endInput())}async request(e,t){if(t?.signal?.aborted)throw new F;let s=`${t?.requestIdPrefix??""}${Is()}`,o=Ds(s,e),r=t?.timeoutMs??this.controlRequestTimeoutMs,i=Be(o.request)??"unknown",a=Date.now();return new Promise((u,c)=>{let l=null,m=()=>{try{this.transport.write(JSON.stringify({type:"control_cancel_request",request_id:s})+`
9
+ `)}catch(f){this.diagnostics?.record("[QueryRunner] Failed to send control_cancel_request:",f)}},p=()=>{l&&(clearTimeout(l),l=null),t?.signal?.removeEventListener("abort",d)},d=()=>{this.pendingRequests.delete(s)&&(p(),this.diagnostics?.record(`[QueryRunner] control_request cancelled request_id=${s} subtype=${i}`),m(),c(new F))};this.pendingRequests.set(s,{resolve:f=>{p(),this.diagnostics?.record(`[QueryRunner] control_response received request_id=${s} subtype=${i} status=success duration_ms=${Date.now()-a}`),u(f)},reject:f=>{p(),this.diagnostics?.record(`[QueryRunner] control_response received request_id=${s} subtype=${i} status=error duration_ms=${Date.now()-a}`,f),c(f)}}),t?.signal?.addEventListener("abort",d,{once:!0}),r>0&&Number.isFinite(r)&&(l=setTimeout(()=>{if(!this.pendingRequests.has(s))return;this.pendingRequests.delete(s),p();let f=Date.now()-a;this.diagnostics?.record(`[QueryRunner] control_request timed out request_id=${s} subtype=${i} timeout_ms=${r} elapsed_ms=${f}`),m(),c(new Ce({requestId:s,message:`Control request "${i}" timed out after ${r}ms`,code:Gt,details:{requestType:i,timeoutMs:r,elapsedMs:f}}))},r));try{this.diagnostics?.record(`[QueryRunner] control_request sending request_id=${s} subtype=${i} timeout_ms=${r}`),this.transport.write(JSON.stringify(o)+`
10
+ `),this.diagnostics?.record(`[QueryRunner] control_request sent request_id=${s} subtype=${i}`)}catch(f){p(),this.pendingRequests.delete(s),this.diagnostics?.record(`[QueryRunner] control_request send failed request_id=${s} subtype=${i}`,f),c(f)}})}handleControlResponse(e){let t=e.response,s=t.request_id,o=this.pendingRequests.get(s);if(!o){this.diagnostics?.record(`[QueryRunner] unmatched control_response received request_id=${s} status=${t.subtype}`);return}if(this.pendingRequests.delete(s),t.subtype==="success")o.resolve(t.response);else{let r=new Ce({requestId:s,message:t.error,code:t.code,retryable:t.retryable,details:t.details});o.reject(r),this.processPendingPermissionRequests(t.pending_permission_requests)}}processPendingPermissionRequests(e){if(e)for(let t of e)Be(t.request)==="can_use_tool"&&this.handleControlRequest(t).catch(s=>{this.diagnostics?.record("[QueryRunner] Error handling pending permission request:",s)})}async handleControlRequest(e){let t=e.request_id,s=Be(e.request)??"unknown",o=Date.now(),r=new AbortController;this.pendingInboundRequests.set(t,{abortController:r}),this.diagnostics?.record(`[QueryRunner] inbound control_request received request_id=${t} subtype=${s}`);try{let i=await this.awaitAbortable(this.processControlRequest(e,r.signal),r.signal);if(!r.signal.aborted){let a=Os(t,i);this.transport.write(JSON.stringify(a)+`
11
+ `),this.diagnostics?.record(`[QueryRunner] inbound control_response sent request_id=${t} subtype=${s} status=success duration_ms=${Date.now()-o}`)}}catch(i){if(!r.signal.aborted){let{error:a,code:u}=ca(i),c=xs(t,a,u);this.transport.write(JSON.stringify(c)+`
12
+ `),this.diagnostics?.record(`[QueryRunner] inbound control_response sent request_id=${t} subtype=${s} status=error duration_ms=${Date.now()-o}`,i)}}finally{this.pendingInboundRequests.delete(t)}}handleControlCancelRequest(e){let t=this.pendingInboundRequests.get(e.request_id);t&&(t.abortController.abort(),this.pendingInboundRequests.delete(e.request_id))}throwIfAborted(e){if(e.aborted)throw new F}validateProtocolHandshake(e){if(this.protocolHandshakeValidated)return;this.protocolHandshakeValidated=!0;let t=e.protocol_version,s=Ht;if(!t){this.diagnostics?.record(`[QueryRunner] CLI did not announce protocol_version. This SDK was built for ${s}. Consider upgrading qodercli for the version handshake.`);return}let o=$s(t),r=$s(s);if(!o||!r){this.diagnostics?.record(`[QueryRunner] Could not parse protocol_version "${t}" or built-in "${s}"; skipping handshake.`);return}if(o.major!==r.major)throw new K(t,s);o.minor<r.minor&&this.diagnostics?.record(`[QueryRunner] CLI protocol_version ${t} is older than this SDK's ${s}. New optional fields may be absent.`)}async awaitAbortable(e,t){if(t.aborted)throw new F;return new Promise((s,o)=>{let r=()=>{o(new F)};t.addEventListener("abort",r,{once:!0}),e.then(i=>{t.removeEventListener("abort",r),s(i)},i=>{t.removeEventListener("abort",r),o(i)})})}async processControlRequest(e,t){this.throwIfAborted(t);let s=e.request,o=Be(s),r=s;switch(o){case"resolve_session_artifacts":{if(!this.resolveSessionArtifacts)throw new Error("resolve_session_artifacts_unavailable: No resolveSessionArtifacts callback configured");let i=r.local_session_id,a=r.cwd;if(typeof i!="string"||i.length===0||typeof a!="string"||a.length===0)throw new TypeError("resolve_session_artifacts requires local_session_id and cwd");let u=await this.awaitAbortable(Promise.resolve().then(()=>this.resolveSessionArtifacts(i,a)),t);return _s(u)}case"fetch_job_token":{if(!this.fetchJobToken)throw new Error("job_token_unavailable: No fetchJobToken callback configured");let i=r.reason??"initial",a=r.session_id,u=e.request_id,c=await this.awaitAbortable(this.fetchJobToken({requestId:u,reason:i,sessionId:a},{signal:t}),t);if(!c?.token)throw new Error("job_token_unavailable: Host did not provide a Job Token");let l=c.expiresAt;if(l!==void 0&&(!Number.isFinite(l)||l<1e12))throw new Error("job_token_unavailable: expiresAt must be a Unix timestamp in milliseconds");return this.diagnostics?.record(`[QueryRunner] fetch_job_token fulfilled: reason=${i}`),{token:c.token,...l!==void 0?{expires_at:l}:{}}}case"fetch_service_account_token":{if(!this.fetchServiceAccountToken)throw new Error("service_account_token_unavailable: No fetchServiceAccountToken callback configured");let i=await this.awaitAbortable(this.fetchServiceAccountToken(),t);if(!i?.token)throw new Error("service_account_token_unavailable: Host did not provide a Service Account token");let a=i.expiresAt;if(a!==void 0&&(!Number.isFinite(a)||a<1e12))throw new Error("service_account_token_unavailable: expiresAt must be a Unix timestamp in milliseconds");return this.diagnostics?.record("[QueryRunner] fetch_service_account_token fulfilled"),{token:i.token,...a!==void 0?{expires_at:a}:{}}}case"can_use_tool":{let i=r.tool_name,a=r.input??{};if(!this.canUseTool)throw new Error("canUseTool callback is not provided.");let u=r.tool_use_id,c=r.permission_suggestions??r.suggestions,l=r.blocked_path,m=r.decision_reason,p=r.title,d=r.display_name,f=r.description,y=r.agent_id,g=r.permission_kind,S=r.options,k=r.details,h=await this.awaitAbortable(this.canUseTool(i,a,{signal:t,suggestions:c,blockedPath:l,decisionReason:m,title:p,displayName:d,description:f,toolUseID:u,agentID:y,permissionKind:g,permissionOptions:S,details:k}),t);if(h.behavior==="deny"&&!h.message)throw new Error("Permission deny result must include a message.");return h.behavior==="allow"?{...h,updatedInput:h.updatedInput??a,toolUseID:u}:{...h,toolUseID:u}}case"hook_callback":{let i=r.callback_id;if(!i)throw new Error("Hook callback missing callback_id");return this.invokeRegisteredHookCallback(i,r.input,r.tool_use_id,t)}case"memory_should_generate":{let i=r.callbackId;if(!i)throw new Error("Memory shouldGenerate request missing callbackId");let a=this.memoryCallbacks?.shouldGenerateCallbacks.get(i);if(!a)throw new Error(`Unknown memory shouldGenerate callback: ${i}`);let u=await this.awaitAbortable(a(r.input,{signal:t}),t);if(!u||typeof u.run!="boolean")throw new TypeError("Memory shouldGenerate callback must return { run: boolean }");return{run:u.run,...typeof u.reason=="string"?{reason:u.reason}:{}}}case"skill_evolution_should_review":{let i=r.callbackId;if(!i)throw new Error("Skill evolution shouldReview request missing callbackId");let a=this.skillEvolutionCallbacks?.shouldReviewCallbacks.get(i);if(!a)throw new Error(`Unknown skill evolution shouldReview callback: ${i}`);let u=await this.awaitAbortable(a(r.input,{signal:t}),t);if(!u||typeof u.run!="boolean")throw new TypeError("Skill evolution shouldReview callback must return { run: boolean }");return{run:u.run,...typeof u.reason=="string"?{reason:u.reason}:{}}}case"mcp_message":{let i=r.server_name,a=r.message,u=this.sdkMcpTransports.get(i);if(!u)throw new Error(`Unknown in-process MCP server: ${i}`);return{mcp_response:await this.awaitAbortable(Rs(i,a,u,this.pendingMcpResponses),t)}}case"elicitation":case"elicitation_response":return this.onElicitation?await this.awaitAbortable(this.onElicitation({serverName:r.mcp_server_name??"",message:r.message??r.prompt??"",mode:r.mode,url:r.url,elicitationId:r.elicitation_id,requestedSchema:r.requested_schema,title:r.title,displayName:r.display_name,description:r.description},{signal:t}),t):{action:"cancel"};case"get_model_policy":{if(!this.resolveModel)return{type:"get_model_policy"};let i={purpose:r.purpose,sessionId:r.sessionId,turnIndex:r.turnIndex,agentId:r.agentId,agentType:r.agentType,resolvedModel:r.resolvedModel,availableModels:r.models??[]},a=this.resolveModelTimeoutMs,u=Promise.resolve(this.resolveModel(i)),c,l=new Promise((g,S)=>{c=setTimeout(()=>{S(new Ke(a))},a)}),m;try{m=await this.awaitAbortable(Promise.race([u,l]),t)}finally{clearTimeout(c)}let p={type:"get_model_policy",...m?.parameters!==void 0?{parameters:m.parameters}:{}},d=m?.model;if(typeof d=="string")p.model=d;else if(d!==void 0){let{model:g,...S}=d;p.model=g,p.custom_model={...S,style:S.style??"openai"}}let f=m?.taskId?.trim();f&&(p.task_id=f);let y=m?.subTask?.trim();return y&&(p.sub_task=y),p}default:throw new Error(`Unhandled control request subtype: ${o??"unknown"}`)}}async initialize(){return this.initializationPromise||(this.initializationPromise=this.performInitialize()),this.initializationPromise}async performInitialize(){await this.initConfig.beforeInitialize?.();let e={type:"initialize",modelPolicyProvider:this.resolveModel!==void 0,supportsCatalogReadyInitialize:!0,supportsAvailableModelsUpdate:!0,supportsCommandsChanged:!0,initializeTimeoutMs:n.INITIALIZE_TIMEOUT_MS},t={};for(let[o,r]of Object.entries(this.hooks)){if(!r||r.length===0)continue;let i=[];for(let a of r){let u=a.hooks.map(c=>{let l=`hook_${this.nextHookCallbackId++}`;return this.hookCallbacks.set(l,c),l});u.length!==0&&i.push({matcher:a.matcher,hookCallbackIds:u,timeout:a.timeout})}i.length>0&&(t[o]=i)}if(Object.keys(t).length>0&&(e.hooks=t),this.initConfig.systemPrompt!==void 0&&(e.systemPrompt=this.initConfig.systemPrompt),this.initConfig.appendSystemPrompt!==void 0&&(e.appendSystemPrompt=this.initConfig.appendSystemPrompt),this.initConfig.modelRequestPatches!==void 0&&(e.modelRequestPatches=this.initConfig.modelRequestPatches),this.initConfig.agents&&(e.agents=this.initConfig.agents),this.initConfig.skills!==void 0&&(e.skills=this.initConfig.skills),this.initConfig.promptSuggestions!==void 0&&(e.promptSuggestions=this.initConfig.promptSuggestions),this.initConfig.hostActions!==void 0&&(e.hostActions=this.initConfig.hostActions),this.initConfig.enableFileCheckpointing!==void 0&&(e.enableFileCheckpointing=this.initConfig.enableFileCheckpointing),this.initConfig.independentPlanModeControls===!0){e.independentPlanModeControls=!0;let o=Ue(this.initConfig.permissionMode);o!==void 0&&(e.permissionMode=o)}this.initConfig.memory!==void 0&&(e.memory=this.initConfig.memory),this.initConfig.evolution!==void 0&&(e.evolution=this.initConfig.evolution),this.resolveSessionArtifacts!==void 0&&(e.resolveSessionArtifacts=!0),this.sdkMcpServers.size>0&&(e.sdkMcpServers=Array.from(this.sdkMcpServers.keys()),Object.keys(this.sdkMcpToolOverrides).length>0&&(e.sdkMcpToolOverrides=this.sdkMcpToolOverrides));let s=await this.request(e,{timeoutMs:n.INITIALIZE_TIMEOUT_MS});if(s&&typeof s=="object"){let o=s;this.initResponse=o,this.replaceLatestCommands(o.commands),this.cliCapabilities=new Set(o.capabilities??[])}if(!this.initResponse)throw new Error("Failed to receive initialization response");if(this.initConfig.goalMaxTurns!==void 0&&!this.cliCapabilities?.has(n.GOAL_MAX_TURNS_CAPABILITY))throw new U(n.GOAL_MAX_TURNS_CAPABILITY);if(this.initConfig.hostActions!==void 0&&!this.cliCapabilities?.has(n.HOST_ACTION_CAPABILITY))throw new U(n.HOST_ACTION_CAPABILITY);if(this.initConfig.planMode!==void 0){if(!this.cliCapabilities?.has(n.PLAN_MODE_CAPABILITY))throw new U(n.PLAN_MODE_CAPABILITY);let o={subtype:"set_plan_mode",active:this.initConfig.planMode};await this.request(o)}return await this.completeSessionStoreForkBarrier(),this.initResponse}async completeSessionStoreForkBarrier(){if(this.initConfig.requireSessionStoreForkBarrier!==!0)return;if(!this.cliCapabilities?.has(n.SESSION_STORE_FORK_BARRIER_CAPABILITY))throw new U(n.SESSION_STORE_FORK_BARRIER_CAPABILITY);let e=this.transcriptMirrorBatcher;if(!e)throw new Error("SessionStore Fork persistence barrier requires a transcript mirror.");await e.completeBarrier(),this.sessionStoreForkBarrierComplete=!0}async flushTranscriptMirrorForLifecycle(){if(this.initConfig.requireSessionStoreForkBarrier===!0&&!this.sessionStoreForkBarrierComplete){this.transcriptMirrorBatcher?.discardPending();return}await this.transcriptMirrorBatcher?.flush()}async invokeRegisteredHookCallback(e,t,s,o){let r=this.hookCallbacks.get(e);if(!r)throw new Error(`Unknown hook callback: ${e}`);return await this.awaitAbortable(r(t,s,{signal:o}),o)??{continue:!0}}async initializationResult(){return this.initialize()}replaceLatestCommands(e){this.latestCommands=(e??[]).map(t=>({...t}))}getLatestCommands(){return this.latestCommands.map(e=>({...e}))}waitForStreamInitialization(){return new Promise(e=>{this.resolveStreamInitialization=e})}async streamInput(e){(async()=>{try{await this.initialize();let t=0;for await(let s of e){if(this.closed)break;t+=1;let r=Object.prototype.hasOwnProperty.call(s,"custom_context")?s.custom_context:this.initConfig.customContext,i=typeof s.uuid=="string"&&s.uuid.trim().length>0?s.uuid:ia(),a={...s,uuid:i,...r===void 0?{}:{custom_context:r}};if(this.pendingErrorResultExit=!1,a.selected_skills!==void 0&&a.selected_skills.length>0&&!this.cliCapabilities?.has(n.SELECTED_SKILLS_CAPABILITY))throw new U(n.SELECTED_SKILLS_CAPABILITY);r!==void 0&&!this.cliCapabilities?.has(n.CUSTOM_CONTEXT_CAPABILITY)&&!this.customContextCapabilityWarningEmitted&&(this.customContextCapabilityWarningEmitted=!0,this.diagnostics?.record("[QueryRunner] custom_context requested but paired CLI does not advertise custom_context_v1; the field may be ignored")),this.transport.write(JSON.stringify(a)+`
13
+ `),this.recordOutboundSessionMessage(a)}t>0&&await this.waitForFirstResult(),(!this.isSingleTurn||!this.firstResultReceived)&&await this.flushBeforeEndInput()}catch(t){this.diagnostics?.record("[QueryRunner] streamInput error:",t),this.inputStream.error(t instanceof Error?t:new Error(String(t))),this.endTransportInput()}})().catch(()=>{})}async interrupt(){let t=(await this.request({type:"interrupt"}))?.still_queued;if(Array.isArray(t))return{still_queued:t.filter(s=>typeof s=="string")}}async sendHostAction(e){if(this.initConfig.hostActions===void 0)throw new Error("Host actions are disabled; configure options.hostActions first");await this.initialize(),await this.requireCliCapability(n.HOST_ACTION_CAPABILITY);let t=ws(e);if(!this.hostActionDirect&&!this.closed&&!this.inputEnded&&this.transport.isReady())try{await this.transport.write(`${JSON.stringify(t)}
14
+ `);return}catch(s){this.diagnostics?.record("[QueryRunner] active Host action transport failed; using fallback:",s)}if(!this.hostActionFallback)throw new Error("Host action transport is no longer writable");await this.hostActionFallback(t)}async cancelAsyncMessage(e){return(await this.request({subtype:"cancel_async_message",message_uuid:e})).cancelled}async stopTask(e){await this.requireCliCapability(n.BACKGROUND_TASKS_CAPABILITY),await this.request({subtype:"stop_task",task_id:e})}async backgroundTasks(e){await this.requireCliCapability(n.BACKGROUND_TASKS_CAPABILITY);let t=await this.request({subtype:"background_tasks",tool_use_id:e});return typeof t?.backgrounded=="boolean"?t.backgrounded:!0}async setGoal(e){await this.requireCliCapability(n.GOAL_CAPABILITY);let t={subtype:"set_goal"};return e.objective!==void 0&&(t.objective=e.objective),e.status!==void 0&&(t.status=e.status),e.creditsBudget!==void 0&&(t.credits_budget=e.creditsBudget),(await this.request(t))?.goal??null}async setGoalMaxTurns(e){e!==null&&Le(e),await this.requireCliCapability(n.GOAL_MAX_TURNS_CAPABILITY);let t={subtype:"set_goal_max_turns",max_turns:e},s=await this.request(t);return Le(s.goal_max_turns),s.goal_max_turns}async getGoal(){await this.requireCliCapability(n.GOAL_CAPABILITY);let e={subtype:"get_goal"};return(await this.request(e))?.goal??null}async clearGoal(){await this.requireCliCapability(n.GOAL_CAPABILITY);let e={subtype:"clear_goal"};return(await this.request(e))?.cleared===!0}async setPlanMode(e){await this.requireCliCapability(n.PLAN_MODE_CAPABILITY);let t={subtype:"set_plan_mode",active:e};return(await this.request(t)).plan_mode}async getPlanMode(){await this.requireCliCapability(n.PLAN_MODE_CAPABILITY);let e={subtype:"get_plan_mode"};return(await this.request(e)).plan_mode}async requireCliCapability(e){if(await this.initializationResult(),!this.cliCapabilities?.has(e))throw new U(e)}async setPermissionMode(e){let t=this.initConfig.independentPlanModeControls===!0?Ue(e):e==="yolo"?"bypassPermissions":e;if(t===void 0)throw new Error("permissionMode is required.");await this.request({type:"set_permission_mode",mode:t,...this.initConfig.independentPlanModeControls===!0?{preservePlanMode:!0}:{}})}waitForFirstResult(){return this.firstResultReceived||this.closed?Promise.resolve():new Promise(e=>{if(this.abortController?.signal.aborted){e();return}this.firstResultReceivedResolve=e,this.abortController?.signal.addEventListener("abort",()=>e(),{once:!0})})}async setModel(e){await this.request({type:"set_model",model:e??""})}async enableRemoteProjection(e,t={}){if(typeof e!="string"||e.trim().length===0)throw new TypeError("remoteSessionId must be a non-empty string");if(t.fromSequenceNum!==void 0&&(!Number.isSafeInteger(t.fromSequenceNum)||t.fromSequenceNum<=0))throw new TypeError("fromSequenceNum must be a positive safe integer");await this.request({type:"enable_remote_projection",remote_session_id:e,...t.suppressInitialIdleStateEvents===!0?{suppress_initial_idle_state_events:!0}:{},...t.skipInitialFlush===!0?{skip_initial_flush:!0}:{},...t.fromSequenceNum===void 0?{}:{from_sequence_num:t.fromSequenceNum}},{requestIdPrefix:n.REMOTE_PROJECTION_REQUEST_ID_PREFIX,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}})}async disableRemoteProjection(e={}){let t=await this.request({type:"disable_remote_projection"},{requestIdPrefix:n.REMOTE_PROJECTION_REQUEST_ID_PREFIX,...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}});if(!(typeof t?.remote_session_id!="string"||t.remote_session_id.length===0||typeof t.last_sequence_num!="number"||!Number.isSafeInteger(t.last_sequence_num)||t.last_sequence_num<=0))return{remoteSessionId:t.remote_session_id,lastSequenceNum:t.last_sequence_num}}async setProxy(e){await this.request({type:"set_proxy",proxy:e||null})}async generateSessionTitle(e,t){return(await this.request({type:"generate_session_title",description:e,...t?.persist!==void 0?{persist:t.persist}:{}}))?.title??null}async askSideQuestion(e,t){await this.requireCliCapability(n.SIDE_QUESTION_CAPABILITY);let s=await this.request({subtype:"side_question",question:e,...t?.history?.length?{history:t.history.map(o=>({...o}))}:{}},{timeoutMs:0,signal:t?.signal});return s?.response==null?null:{response:s.response,synthetic:s.synthetic??!1,...s.refusal_fallback?{refusalFallback:{originalModel:s.refusal_fallback.original_model,fallbackModel:s.refusal_fallback.fallback_model,content:s.refusal_fallback.content}}:{}}}async addDirectories(e){if(!Array.isArray(e))throw new Error("directories must be an array");return await this.request({type:"add_directories",directories:e})}async applyFlagSettings(e){await this.request({type:"apply_flag_settings",settings:e})}async supportedCommands(){return await this.initializationResult(),this.getLatestCommands()}async getAvailableModels(e){let t={subtype:"get_models",...e?.fetchStrategy?{fetchStrategy:e.fetchStrategy}:{},...e?.uid?{uid:e.uid}:{},...e?.outerProviders?{outerProviders:e.outerProviders}:{}};return(await this.request(t))?.models??[]}async listByokProviders(){try{return(await this.request({type:"get_byok_config"}))?.providers??null}catch{return null}}async validateByokModel(e){try{let t=await this.request({type:"validate_byok_model",provider:e.provider,model:e.model,api_key:e.api_key,...e.url!==void 0?{url:e.url}:{},...e.style!==void 0?{style:e.style}:{}});return typeof t?.success=="boolean"?t.success:null}catch{return null}}async listByokConfigs(){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"list_byok_configs"})).configs}async createByokConfig(e){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"create_byok_config",config:e})).config}async updateByokConfig(e){await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"update_byok_config",config:e})}async deleteByokConfig(e){await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"delete_byok_config",target:e})}async checkByokConfig(e){return await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"check_byok_config",config:e})}async supportedAgents(){return(await this.initializationResult()).agents??[]}async accountInfo(){try{let t=await this.request({type:"account_info"});if(t?.account&&Object.keys(t.account).length>0)return t.account}catch{}return(await this.initializationResult()).account??{}}async mcpServerStatus(){return(await this.request({type:"mcp_status"}))?.servers??[]}async getContextUsage(){return await this.request({type:"get_context_usage"})}async getUsageInfo(){try{let e=await this.request({type:"get_usage_info"}),t=gt(e?.usage),s=ft(e?.session);return!t&&!s?null:{...t??{},...s?{session:s}:{}}}catch{return null}}async reloadPlugins(){let e=await this.request({type:"reload_plugins"});return this.replaceLatestCommands(e.commands),e}async reloadSkills(){return await this.requireCliCapability("reload_skills_v1"),await this.request({type:"reload_skills"})}async listPlugins(){return(await this.request({type:"list_plugins"})).plugins}async rewindFiles(e,t){let s={type:"rewind_files",user_message_id:e};t?.dryRun&&(s.dry_run=!0);let r=await this.request(s);if(!t?.dryRun&&r?.canRewind===!1)throw new Error(typeof r.error=="string"&&r.error.length>0?r.error:"Unable to rewind files.");return r}async rewind(e,t){if(!(await this.initializationResult()).capabilities?.includes("session_rewind_v1"))throw new Error("The connected qodercli does not support full session rewind (session_rewind_v1).");let o={type:"rewind",user_message_id:e,scope:t?.scope??"both"};return t?.dryRun&&(o.dry_run=!0),await this.request(o)}async seedReadState(e,t){await this.request({type:"seed_read_state",path:e,mtime:t})}async flushMemory(){return this.memoryFlushPromise||(this.memoryFlushPromise=this.performMemoryFlush().finally(()=>{this.memoryFlushPromise=void 0})),this.memoryFlushPromise}async flushSkillEvolution(){return this.skillEvolutionFlushPromise||(this.skillEvolutionFlushPromise=this.performSkillEvolutionFlush().finally(()=>{this.skillEvolutionFlushPromise=void 0})),this.skillEvolutionFlushPromise}async performSkillEvolutionFlush(){await this.requireSkillEvolutionEnabled(),await this.request({type:"flush_skill_evolution"})}async requireSkillEvolutionEnabled(){let e=await this.initializationResult();if(!this.cliCapabilities?.has("skill_evolution_v1"))throw new U("skill_evolution_v1");if(e.evolution?.skill?.enabled!==!0||e.evolution.skill.requester!=="sdk")throw new Error("The connected CLI did not enable SDK skill evolution for this query")}async performMemoryFlush(){await this.requireSdkMemoryEnabled(),await this.request({type:"flush_memory"})}async refreshMemory(){await this.requireSdkMemoryEnabled(),await this.request({type:"refresh_memory"})}async requireSdkMemoryEnabled(){let e=await this.initializationResult();if(e.memory?.enabled!==!0||e.memory.requester!=="sdk")throw new Error("The connected CLI did not enable SDK memory for this query")}async reconnectMcpServer(e){await this.request({type:"mcp_reconnect",serverName:e})}async toggleMcpServer(e,t){await this.request({type:"mcp_toggle",serverName:e,enabled:t})}async setMcpServers(e){let t=$n(e);return await this.request({type:"mcp_set_servers",servers:t})??{added:[],removed:[],errors:{}}}async injectMcpToken(e,t){await this.request({type:"mcp_inject_token",serverName:e,token:t})}async mcpAuthenticate(e,t){let s=await this.request({type:"mcp_authenticate",serverName:e,...t!==void 0?{redirectUri:t}:{}}),o=s?.requiresUserAction===!0,r=typeof s?.authUrl=="string"?s.authUrl:void 0;if(o&&r===void 0)throw new Error("mcp_authenticate response set requiresUserAction=true but did not include an authUrl");return o?{authUrl:r,requiresUserAction:!0}:{requiresUserAction:!1}}async mcpSubmitOAuthCallbackUrl(e,t){await this.request({type:"mcp_oauth_callback_url",serverName:e,callbackUrl:t})}async mcpClearAuth(e){await this.request({type:"mcp_clear_auth",serverName:e})}async close(){return this.closePromise||(this.closePromise=this.performClose()),this.closePromise}async performClose(){if(this.closed)return;if((this.initConfig.memory!==void 0||this.initConfig.evolution?.skill!==void 0)&&(this.initResponse?.memory?.enabled===!0||this.initResponse?.evolution?.skill?.enabled===!0)&&this.transport.isReady()&&this.abortController?.signal.aborted!==!0)try{await(this.endInputFlushPromise??this.flushBeforeEndInput())}catch(s){this.diagnostics?.record("[QueryRunner] post-turn flush during close failed:",s)}this.closed=!0;for(let[,s]of this.pendingInboundRequests)s.abortController.abort();this.pendingInboundRequests.clear(),this.hookCallbacks.clear();let e=new Error("SDK closing");for(let[s,o]of this.sdkMcpTransports){try{await o.close()}catch(r){this.diagnostics?.record(`[QueryRunner] error closing SDK MCP transport "${s}":`,r)}Es(s,e,this.pendingMcpResponses)}let t;try{await this.transport.close()}catch(s){t={error:s}}try{await this.readLoopPromise}catch{}if(await this.flushTranscriptMirrorForLifecycle(),t)throw t.error}async[Symbol.asyncDispose](){await this.close()}};function ca(n){let e=n instanceof Error?n.message:String(n),t=typeof n=="object"&&n!==null?n.code:void 0,s=typeof t=="string"&&t.length>0?t:void 0,o=/^([a-z][a-z0-9_]*):\s*(.*)$/.exec(e);if(o){let r=s??o[1];return(!s||s===o[1])&&(e=o[2]||e),{error:e,code:r}}return s?{error:e,code:s}:{error:e}}function $s(n){let e=/^(\d+)\.(\d+)(?:\.\d+)?(?:[-+].*)?$/.exec(n);return e?{major:Number(e[1]),minor:Number(e[2])}:null}var yt=class{sendMcpMessage;isClosed=!1;onclose;onerror;onmessage;constructor(e){this.sendMcpMessage=e}async start(){}async send(e){if(this.isClosed)throw new Error("Transport is closed");this.sendMcpMessage(e)}async close(){this.isClosed||(this.isClosed=!0,this.onclose?.())}get closed(){return this.isClosed}};import{randomUUID as zs}from"crypto";var la="QODER_CLOUD_AGENT_API_BASE",da="https://api.qoder.com/api/v1/cloud",se={agentMessage:"agent.message",modelRequestEnd:"span.model_request_end",idle:"session.status_idle",error:"session.error",terminated:"terminated",userMessage:"user.message",userInterrupt:"user.interrupt"},pa=1024,Qs=1*1024*1024,Gs=4*1024*1024,ma=8*1024,Xt=class extends Error{code="auth_access_token_env_var_not_configured";constructor(e){super(`The auth access token environment variable "${e}" is not set; set it or pass auth.accessToken directly.`),this.name="CloudAuthAccessTokenEnvVarError"}},St=class extends Error{code="cloud_agent_auth_requires_access_token";constructor(){super("options.experimentalCloudAgent requires PAT authentication via accessToken() or accessTokenFromEnv()."),this.name="CloudAgentUnsupportedAuthError"}},Zt=class extends Error{code="cloud_agent_api_error";status;constructor(e,t){super(`Cloud Agent API request failed with status ${e}: ${t}`),this.name="CloudAgentApiError",this.status=e}},fa=new Set(["abortController","auth","experimentalCloudAgent","debug","debugFile","stderr","env","includePartialMessages","onAuthExpired"]);function Vs(n){if(!n.experimentalCloudAgent)return;let e=Object.keys(n).filter(r=>n[r]!==void 0&&!fa.has(r));if(e.length>0)throw new Error(`options.experimentalCloudAgent cannot be combined with CLI runtime options: ${e.join(", ")}`);if(n.auth?.type!=="accessToken")throw new St;let{agent:t,session:s}=n.experimentalCloudAgent;if(t&&Pe(t)&&Yt(t))throw new Error("options.experimentalCloudAgent.agent must specify either id or create, not both.");if(s&&Pe(s)&&Yt(s))throw new Error("options.experimentalCloudAgent.session must specify either id or create, not both.");if(s&&Pe(s)&&t!==void 0)throw new Error("options.experimentalCloudAgent.agent cannot be combined with experimentalCloudAgent.session.id because an existing session already selects its agent.");let o=!!s&&Pe(s);if(!o&&t===void 0)throw new Error("options.experimentalCloudAgent.agent is required when experimentalCloudAgent.session.id is not provided.");if(!o){if(!s||!Yt(s))throw new Error("options.experimentalCloudAgent.session.create is required when creating a Cloud Agent session.");if(typeof s.create.environment_id!="string"||s.create.environment_id.length===0)throw new Error("options.experimentalCloudAgent.session.create.environment_id is required when creating a Cloud Agent session.")}}function Pe(n){return"id"in n&&n.id!==void 0}function Yt(n){return"create"in n&&n.create!==void 0}function Ys(n){return new en(n)}var en=class{experimentalCloudAgent;inputStream;abortController=new AbortController;accessToken;apiBase;diagnostics;onAuthExpired;sessionReadyPromise;readLoopPromise;sseConnected=Ma();startedAt=Date.now();closed=!1;authExpiredFired=!1;sessionId;assistantTextParts=[];currentTurnId;lastSseEventId;hasCurrentTurn=!1;pendingTurnEvents=[];latestUsage=Js();latestModelUsage={};totalCostUsd=0;postedMessages=0;activeInputStreams=0;idleSeen=!1;resultEmitted=!1;constructor(e){if(!e.options.experimentalCloudAgent)throw new Error("options.experimentalCloudAgent is required for CloudAgentQuery.");this.experimentalCloudAgent=e.options.experimentalCloudAgent,this.diagnostics=e.diagnostics,this.onAuthExpired=e.options.onAuthExpired,this.accessToken=ga(e.options.auth,e.options.env),this.apiBase=ha(),this.inputStream=new ne(()=>{this.close().catch(()=>{})});let t=e.options.abortController?.signal;t?.aborted?this.abortController.abort():t?.addEventListener("abort",()=>{this.close().catch(()=>{})},{once:!0}),this.sessionReadyPromise=this.initializeCloudSession(),this.readLoopPromise=this.readCloudEvents().catch(s=>{this.sseConnected.reject(s),this.closed||this.inputStream.error(s)}),this.streamInput(Pa(e.prompt)).catch(s=>{this.closed||this.inputStream.error(s)})}[Symbol.asyncIterator](){return this}async next(){return this.inputStream.next()}async return(){return await this.close(),{done:!0,value:void 0}}async throw(e){return await this.inputStream.throw(e),{done:!0,value:void 0}}async initializationResult(){return(await this.sessionReadyPromise).init}async streamInput(e){this.activeInputStreams+=1,(async()=>{try{await this.sessionReadyPromise,await this.sseConnected.promise;for await(let t of e){if(this.closed)break;let s=Ea(t);this.beginPendingTurn();let o=await this.postSessionEvents([{type:se.userMessage,content:s}]);this.postedMessages+=1,this.activateTurn(o.find(r=>r.type===se.userMessage)?.turnId)}}finally{this.activeInputStreams=Math.max(0,this.activeInputStreams-1),this.finishIfIdle()}})().catch(t=>{this.closed||this.inputStream.error(t)})}async interrupt(){await this.sessionReadyPromise,await this.postSessionEvents([{type:se.userInterrupt}])}async cancelAsyncMessage(e){this.unsupported("cancelAsyncMessage")}async sendHostAction(e){throw new Error("Host actions are not supported by Cloud Agent queries.")}async stopTask(e){this.unsupported("stopTask")}async backgroundTasks(e){this.unsupported("backgroundTasks")}async setPermissionMode(e){this.unsupported("setPermissionMode")}async setModel(e){this.unsupported("setModel")}async setProxy(e){this.unsupported("setProxy")}async generateSessionTitle(e,t){this.unsupported("generateSessionTitle")}async addDirectories(e){this.unsupported("addDirectories")}async applyFlagSettings(e){this.unsupported("applyFlagSettings")}async supportedCommands(){this.unsupported("supportedCommands")}async getAvailableModels(){this.unsupported("getAvailableModels")}async listByokProviders(){this.unsupported("listByokProviders")}async validateByokModel(e){this.unsupported("validateByokModel")}async listByokConfigs(){this.unsupported("listByokConfigs")}async createByokConfig(e){this.unsupported("createByokConfig")}async updateByokConfig(e){this.unsupported("updateByokConfig")}async deleteByokConfig(e){this.unsupported("deleteByokConfig")}async checkByokConfig(e){this.unsupported("checkByokConfig")}async supportedAgents(){this.unsupported("supportedAgents")}async mcpServerStatus(){this.unsupported("mcpServerStatus")}async getContextUsage(){this.unsupported("getContextUsage")}async getUsageInfo(){this.unsupported("getUsageInfo")}async reloadPlugins(){this.unsupported("reloadPlugins")}async reloadSkills(){this.unsupported("reloadSkills")}async listPlugins(){this.unsupported("listPlugins")}async accountInfo(){this.unsupported("accountInfo")}async rewindFiles(e,t){this.unsupported("rewindFiles")}async rewind(e,t){this.unsupported("rewind")}async seedReadState(e,t){this.unsupported("seedReadState")}async flushMemory(){this.unsupported("flushMemory")}async flushSkillEvolution(){this.unsupported("flushSkillEvolution")}async refreshMemory(){this.unsupported("refreshMemory")}async mcpAuthenticate(e,t){this.unsupported("mcpAuthenticate")}async mcpSubmitOAuthCallbackUrl(e,t){this.unsupported("mcpSubmitOAuthCallbackUrl")}async close(){this.finish();try{await this.readLoopPromise}catch{}}async[Symbol.asyncDispose](){await this.close()}async initializeCloudSession(){if(this.closed)throw new Error("Cloud Agent query is closed.");let{session:e}=this.experimentalCloudAgent,t;if(e&&Pe(e))t=e.id;else{let s=await this.resolveAgentId(),o=e.create,r=await this.requestJson("/sessions",{method:"POST",body:{agent:s,...Sa(o)}});t=Hs(r,"Cloud session")}return this.sessionId=t,this.diagnostics?.record(`[cloud-agent] session ready: ${t}`),{sessionId:t,init:{commands:[],agents:[],output_style:"cloud-agent",available_output_styles:["cloud-agent"],models:[],account:{}}}}async resolveAgentId(){let{agent:e}=this.experimentalCloudAgent;if(!e)throw new Error("options.experimentalCloudAgent.agent is required when experimentalCloudAgent.session.id is not provided.");if(Pe(e))return e.id;let t=await this.requestJson("/agents",{method:"POST",body:ya(e.create)});return Hs(t,"Cloud agent")}async readCloudEvents(){let{sessionId:e}=await this.sessionReadyPromise,t=0;for(;!this.closed;){let s=this.lastSseEventId;if(await this.readCloudEventStream(e),this.closed||this.resultEmitted)return;if(!this.shouldReconnectSse()||t>=3){this.finishAfterSseClosed();return}this.lastSseEventId!==s&&(t=0),t+=1,await Ta(250*t,this.abortController.signal)}}async readCloudEventStream(e){let t=new URL(`${this.apiBase}/sessions/${encodeURIComponent(e)}/events/stream`),s=this.lastSseEventId??this.experimentalCloudAgent.stream?.afterId;s&&t.searchParams.set("after_id",s),this.experimentalCloudAgent.stream?.deltaFlushIntervalMs!==void 0&&t.searchParams.set("delta_flush_interval_ms",String(this.experimentalCloudAgent.stream.deltaFlushIntervalMs));let o=await fetch(t.toString(),{headers:this.authHeaders({accept:"text/event-stream"}),signal:this.abortController.signal});if(!o.ok)throw this.handleAuthFailure(o.status),await Ws(o);if(!o.body)throw new Error("Cloud Agent SSE response did not include a body.");this.sseConnected.resolve(),await this.readSseBody(o.body)}async readSseBody(e){let t=e.getReader(),s=new TextDecoder,o="",r={data:[],dataBytes:0};try{for(;!this.closed;){let{done:i,value:a}=await t.read();if(i){o+=s.decode(),o.length>0&&this.consumeSseLine(o,r);break}o+=s.decode(a,{stream:!0});let u;for(;(u=o.indexOf(`
15
+ `))!==-1;){let c=o.slice(0,u);o=o.slice(u+1);let l=c.endsWith("\r")?c.slice(0,-1):c;if(this.consumeSseLine(l,r),this.closed)break}o.length>Qs&&(this.diagnostics?.record(`[cloud-agent] SSE line exceeded ${Qs} bytes; resetting buffer.`),o="",r.id=void 0,r.event=void 0,r.data.length=0,r.dataBytes=0)}}finally{try{await t.cancel()}catch{}t.releaseLock()}}consumeSseLine(e,t){if(e===""){(t.event||t.data.length>0)&&this.handleSseEvent({id:t.id,event:t.event??"message",data:ka(t.data.join(`
16
+ `))}),t.id=void 0,t.event=void 0,t.data.length=0,t.dataBytes=0;return}if(e.startsWith(":"))return;let s=e.indexOf(":"),o=s===-1?e:e.slice(0,s),r=s===-1?"":e.slice(s+1);switch(r.startsWith(" ")&&(r=r.slice(1)),o){case"id":t.id=r;break;case"event":t.event=r;break;case"data":if(t.dataBytes+r.length>Gs){this.diagnostics?.record(`[cloud-agent] SSE event data exceeded ${Gs} bytes; dropping event.`),t.id=void 0,t.event=void 0,t.data.length=0,t.dataBytes=0;return}t.data.push(r),t.dataBytes+=r.length;break}}handleSseEvent(e){if(this.closed)return;let t=L(e.data,"type")??e.event,s=L(e.data,"turn_id"),o={type:"cloud_agent_event",event:t,id:e.id,data:e.data,uuid:e.id??zs(),session_id:this.sessionId??L(e.data,"session_id")??""};if(e.id&&(this.lastSseEventId=e.id),this.inputStream.enqueue(o),!this.isCurrentTurnEvent(s)){this.bufferPendingTurnEvent(e,t,s);return}this.handleCurrentTurnEvent(e,t)}handleCurrentTurnEvent(e,t){switch(t){case se.agentMessage:{let s=_a($e(e.data,"content"));s&&this.assistantTextParts.push(s);return}case se.modelRequestEnd:this.captureUsage(e.data);return;case se.idle:this.idleSeen=!0,this.finishIfIdle();return;case se.error:this.emitErrorResult(e),this.finish();return;case se.terminated:this.resultEmitted||this.emitSuccessResult(),this.finish();return}}beginPendingTurn(){this.currentTurnId=void 0,this.hasCurrentTurn=!1,this.pendingTurnEvents=[],this.assistantTextParts=[],this.latestUsage=Js(),this.latestModelUsage={},this.totalCostUsd=0,this.idleSeen=!1}activateTurn(e){this.currentTurnId=e,this.hasCurrentTurn=!0;let t=this.pendingTurnEvents;this.pendingTurnEvents=[];for(let s of t)if(this.isCurrentTurnEvent(s.turnId)&&this.handleCurrentTurnEvent(s.event,s.type),this.closed)break}isCurrentTurnEvent(e){return this.hasCurrentTurn?this.currentTurnId?e===this.currentTurnId:e===void 0:!1}bufferPendingTurnEvent(e,t,s){this.hasCurrentTurn||this.activeInputStreams===0||(this.pendingTurnEvents.length>=pa&&this.pendingTurnEvents.shift(),this.pendingTurnEvents.push({event:e,type:t,turnId:s}))}finishIfIdle(){this.closed||!this.idleSeen||this.activeInputStreams>0||this.postedMessages===0||(this.emitSuccessResult(),this.finish())}finishAfterSseClosed(){this.finishIfIdle(),!this.closed&&(!this.resultEmitted&&(this.hasCurrentTurn||this.postedMessages>0||this.activeInputStreams>0)&&this.emitErrorResultMessage("Cloud Agent SSE stream closed before the current turn reached a terminal state."),this.finish())}shouldReconnectSse(){return!this.resultEmitted&&(this.hasCurrentTurn||this.postedMessages>0||this.activeInputStreams>0)}emitSuccessResult(){this.resultEmitted||this.closed||(this.resultEmitted=!0,this.inputStream.enqueue({...this.buildResultBase(),subtype:"success",is_error:!1,result:this.assistantTextParts.join("")}))}emitErrorResult(e){this.emitErrorResultMessage(L(e.data,"error")??L(wt(e.data,"error"),"message")??"Cloud Agent session failed.")}emitErrorResultMessage(e){this.resultEmitted||this.closed||(this.resultEmitted=!0,this.inputStream.enqueue({...this.buildResultBase(),subtype:"error_during_execution",is_error:!0,errors:[e]}))}buildResultBase(){let e=Date.now()-this.startedAt;return{type:"result",duration_ms:e,duration_api_ms:e,num_turns:Math.max(1,this.postedMessages),stop_reason:null,total_cost_usd:this.totalCostUsd,usage:this.latestUsage,modelUsage:this.latestModelUsage,permission_denials:[],uuid:zs(),session_id:this.sessionId??""}}async postSessionEvents(e){let t=this.sessionId??(await this.sessionReadyPromise).sessionId,s=await this.requestJson(`/sessions/${encodeURIComponent(t)}/events`,{method:"POST",body:{events:e}});return wa(s)}captureUsage(e){let t=wt(e,"usage");if(!t)return;this.latestUsage=Ra(this.latestUsage,t);let s=O(e,"total_cost_usd")??O(e,"cost_usd")??O(t,"total_cost_usd")??O(t,"cost_usd");s!==void 0&&(this.totalCostUsd+=s);let o=L(e,"model")??L(t,"model");if(o){let r=this.latestModelUsage[o]?.costUSD??0;this.latestModelUsage[o]=Ca(this.latestUsage,r+(s??0))}}async requestJson(e,t){let s=await fetch(`${this.apiBase}${e}`,{method:t.method,headers:this.authHeaders({accept:"application/json",contentType:t.body?"application/json":void 0}),body:t.body?JSON.stringify(t.body):void 0,signal:this.abortController.signal});if(!s.ok)throw this.handleAuthFailure(s.status),await Ws(s);if(s.status===204)return{};try{return await s.json()}catch{return{}}}authHeaders(e){let t={Authorization:`Bearer ${this.accessToken}`,Accept:e.accept};return e.contentType&&(t["Content-Type"]=e.contentType),t}handleAuthFailure(e){if((e===401||e===403)&&!this.authExpiredFired){this.authExpiredFired=!0;try{this.onAuthExpired?.()}catch(t){this.diagnostics?.record("[cloud-agent] onAuthExpired callback threw:",t)}}}finish(){this.closed||(this.closed=!0,this.abortController.abort(),this.sseConnected.resolve(),this.inputStream.done())}unsupported(e){throw new Error(`Query.${e}() is not supported when options.experimentalCloudAgent is enabled.`)}};function ga(n,e){if(n?.type!=="accessToken")throw new St;if(typeof n.accessToken=="string")return n.accessToken;let t=n.accessToken.envVar,s=e&&Object.hasOwn(e,t)?e[t]:process.env[t];if(!s)throw new Xt(t);return s}function ha(){return process.env[la]?.replace(/\/+$/,"")??da}function ya(n){return tn({name:n.name,model:n.model,system:n.system,description:n.description,tools:n.tools,mcp_servers:n.mcp_servers,skills:n.skills,metadata:n.metadata})}function Sa(n){return tn({title:n.title,environment_id:n.environment_id,resources:n.resources?.map(e=>tn({...e})),vault_ids:n.vault_ids,memory_store_ids:n.memory_store_ids})}function tn(n){return Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))}function Hs(n,e){let t=L(n,"id");if(!t)throw new Error(`${e} response did not include an id.`);return t}function wa(n){let e=ba(n,"data");return e?e.flatMap(t=>t===null||typeof t!="object"||Array.isArray(t)?[]:[{id:L(t,"id"),turnId:L(t,"turn_id"),type:L(t,"type")}]):[]}async function Ws(n){let e=await va(n,ma);return new Zt(n.status,e||n.statusText||"unknown error")}async function va(n,e){if(!n.body)try{return(await n.text()).slice(0,e)}catch{return""}let t=n.body.getReader(),s=new TextDecoder,o=[],r=0;try{for(;r<e;){let{done:i,value:a}=await t.read();if(i)break;r+=a.byteLength,o.push(s.decode(a,{stream:!0}))}o.push(s.decode())}catch{}finally{try{await t.cancel()}catch{}t.releaseLock()}return o.join("").slice(0,e)}function ka(n){if(n.length===0)return{};try{return JSON.parse(n)}catch{return n}}function wt(n,e){let t=$e(n,e);return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function ba(n,e){let t=$e(n,e);return Array.isArray(t)?t:void 0}function L(n,e){let t=$e(n,e);return typeof t=="string"?t:void 0}function O(n,e){let t=$e(n,e);return typeof t=="number"&&Number.isFinite(t)?t:void 0}function $e(n,e){if(!(n===null||typeof n!="object"||Array.isArray(n)))return n[e]}function _a(n){return typeof n=="string"?n:Array.isArray(n)&&n.map(t=>Xs(t)?t.text:"").filter(Boolean).join("")||void 0}function Ra(n,e){let t=wt(e,"cache_creation"),s=wt(e,"server_tool_use");return{...n,cache_creation:{ephemeral_1h_input_tokens:O(t,"ephemeral_1h_input_tokens")??n.cache_creation.ephemeral_1h_input_tokens,ephemeral_5m_input_tokens:O(t,"ephemeral_5m_input_tokens")??n.cache_creation.ephemeral_5m_input_tokens},cache_creation_input_tokens:O(e,"cache_creation_input_tokens")??n.cache_creation_input_tokens,cache_read_input_tokens:O(e,"cache_read_input_tokens")??n.cache_read_input_tokens,input_tokens:O(e,"input_tokens")??n.input_tokens,output_tokens:O(e,"output_tokens")??n.output_tokens,server_tool_use:{web_fetch_requests:O(s,"web_fetch_requests")??n.server_tool_use.web_fetch_requests,web_search_requests:O(s,"web_search_requests")??n.server_tool_use.web_search_requests}}}function Ca(n,e){return{inputTokens:n.input_tokens,outputTokens:n.output_tokens,cacheReadInputTokens:n.cache_read_input_tokens,cacheCreationInputTokens:n.cache_creation_input_tokens,webSearchRequests:n.server_tool_use.web_search_requests,costUSD:e,contextWindow:0,maxOutputTokens:0}}function Ea(n){let e=n.message.content;return typeof e=="string"?e:Array.isArray(e)?e.map(t=>Xs(t)?t.text:JSON.stringify(t)).join(`
17
+ `):JSON.stringify(e)}function Xs(n){return n!==null&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text=="string"}function Pa(n){return typeof n!="string"?n:async function*(){yield{type:"user",message:{role:"user",content:[{type:"text",text:n}]},parent_tool_use_id:null}}()}function Js(){return{cache_creation:{ephemeral_1h_input_tokens:0,ephemeral_5m_input_tokens:0},cache_creation_input_tokens:0,cache_read_input_tokens:0,inference_geo:"",input_tokens:0,iterations:[],output_tokens:0,server_tool_use:{web_fetch_requests:0,web_search_requests:0},service_tier:"standard",speed:"standard"}}async function Ta(n,e){e.aborted||await new Promise(t=>{let s=setTimeout(t,n);e.addEventListener("abort",()=>{clearTimeout(s),t()},{once:!0})})}function Ma(){let n,e;return{promise:new Promise((s,o)=>{n=s,e=o}),resolve:n,reject:e}}import{access as ja,chmod as oo,cp as Fa,mkdtemp as Ka,mkdir as ro,realpath as io,rm as to,writeFile as Ua}from"fs/promises";import{homedir as La,tmpdir as Ba}from"os";import{dirname as $a,isAbsolute as ao,join as de,relative as za,resolve as nn,sep as Qa}from"path";import{homedir as Aa}from"os";import{join as eo}from"path";var Ia=v.configDirName,Da=v.cliHomeEnv,Oa=v.configDirEnv,Zs=200;function xa(){return process.env[Da]||Aa()}function qa(){let n=process.env[Oa];return n||eo(xa(),Ia)}function Te(){return eo(qa(),"projects")}function Na(n){let e=5381;for(let t=0;t<n.length;t++)e=e*33^n.charCodeAt(t);return e}function x(n){let e=n.replace(/[^a-zA-Z0-9]/g,"-");if(e.length<=Zs)return e;let t=Math.abs(Na(n)).toString(36);return`${e.slice(0,Zs)}-${t}`}var Ga=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Ha=6e4;async function uo(n){if(n.resume===void 0&&!n.continue)return;let e=x(await Va(n.cwd)),t=n.loadTimeoutMs??Ha,s=n.resume!==void 0?n.resume:await Ya(n.store,e,t);if(s===void 0||!Ga.test(s))return;let o={projectKey:e,sessionId:s},r=await no(n.store,o,t);if(!r)return;let i=n.store.listSubkeys?await sn(n.store.listSubkeys(o),t,"listSubkeys"):[];if(!Array.isArray(i))throw new Error("SessionStore listSubkeys() must return an array");let a=[];for(let c of i){if(!Za(c)){console.warn(`[SessionStore] skipping unsafe subpath from listSubkeys: ${String(c)}`);continue}let l=await no(n.store,{...o,subpath:c},t);l&&a.push({subpath:c,entries:l})}let u;try{u=await Ka(de(Ba(),"qoder-session-store-")),await oo(u,448),u=await io(u),await Ja(Wa(n.env),u);let c=de(u,"projects",e),l=de(c,s);await ro(c,{recursive:!0,mode:448}),await so(de(c,`${s}.jsonl`),r);for(let{subpath:p,entries:d}of a){let f=eu(l,`${p}.jsonl`),y=d.filter(S=>S.type==="agent_metadata"),g=d.filter(S=>S.type!=="agent_metadata");if(g.length>0&&await so(f,g),y.length>0){let S={...y.at(-1)};delete S.type,await co(f.slice(0,-6)+".meta.json",JSON.stringify(S))}}let m=u;return{configDir:m,projectKey:e,sessionId:s,cleanup:async()=>{await to(m,{recursive:!0,force:!0})}}}catch(c){throw u!==void 0&&await to(u,{recursive:!0,force:!0}),c}}function Wa(n){let e=n?.[v.cliHomeEnv]??process.env[v.cliHomeEnv]??La();return nn(n?.[v.configDirEnv]??process.env[v.configDirEnv]??de(e,v.configDirName))}async function Ja(n,e){for(let t of[".auth","oauth_creds.json"]){let s=de(n,t);try{await ja(s),await Fa(s,de(e,t),{recursive:!0,force:!1,preserveTimestamps:!0})}catch(o){if(o.code!=="ENOENT")throw o}}}async function Va(n){let e=nn(n??process.cwd());try{return await io(e)}catch{return e}}async function Ya(n,e,t){if(!n.listSessions)throw new Error("sessionStore.listSessions() is required when options.continue is true");let s=await sn(n.listSessions(e),t,"listSessions");if(!Array.isArray(s))throw new Error("SessionStore listSessions() must return an array");return s.slice().sort((o,r)=>r.mtime-o.mtime)[0]?.sessionId}async function no(n,e,t){let s=await sn(n.load({...e}),t,"load");if(!(s===null||s.length===0)){if(!Array.isArray(s))throw new Error("SessionStore load() must return an array or null");return s.map((o,r)=>Xa(o,r))}}function Xa(n,e){if(n===null||typeof n!="object"||typeof n.type!="string")throw new Error(`SessionStore entry ${e} is not a typed object`);try{let t=JSON.stringify(n);if(t===void 0)throw new Error("JSON serialization returned undefined");return JSON.parse(t)}catch(t){throw new Error(`SessionStore entry ${e} is not JSON-safe`,{cause:t})}}function Za(n){return!(typeof n!="string"||!n||n.includes("\0")||n.includes("\\")||ao(n)||/^[a-z]:/i.test(n)||n.replaceAll("\\","/").split("/").some(e=>!e||e==="."||e===".."))}function eu(n,e){let t=nn(n,e),s=za(n,t);if(s===""||s===".."||s.startsWith(`..${Qa}`)||ao(s))throw new Error(`SessionStore subpath escapes the session: ${e}`);return t}async function so(n,e){let t=e.map(s=>JSON.stringify(s)).join(`
18
+ `);await co(n,t?`${t}
19
+ `:"")}async function co(n,e){await ro($a(n),{recursive:!0,mode:448}),await Ua(n,e,{encoding:"utf8",mode:384}),await oo(n,384)}async function sn(n,e,t){let s;n.catch(()=>{});try{return await Promise.race([n,new Promise((o,r)=>{s=setTimeout(()=>r(new Error(`SessionStore ${t} timed out after ${e}ms`)),e)})])}finally{s!==void 0&&clearTimeout(s)}}var tu=/^(?:qoder(?:cli|clicn|cn)?-)?worker-runtime(?:\.obf)?\.mjs$/i;function nu(n){let e=n.replace(/\\/g,"/").split("/").at(-1)??"";return tu.test(e)}function Me(n,e,t=process.env){let s=n.pathToQoderCLIExecutable;return s?nu(s)?{transport:"worker",pathToQoderWorkerRuntime:s}:{transport:"process"}:n.executable!==void 0||n.executableArgs!==void 0||n.spawnQoderCLIProcess!==void 0?{transport:"process"}:t.QODERCLI_PATH?{transport:"process"}:{transport:e}}import lo from"node:path";function Ae(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function ze(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function su(n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0)throw new TypeError("options.memory.generation.roots must be a non-empty array");let e=new Set;for(let[t,s]of n.entries()){if(!s||typeof s!="object")throw new TypeError(`options.memory.generation.roots[${t}] must be an object`);if(Ae(s.id,`options.memory.generation.roots[${t}].id`),Ae(s.path,`options.memory.generation.roots[${t}].path`),e.has(s.id))throw new TypeError(`options.memory.generation.roots contains duplicate id "${s.id}"`);if(e.add(s.id),s.access!==void 0&&s.access!=="read"&&s.access!=="read-write")throw new TypeError(`options.memory.generation.roots[${t}].access must be "read" or "read-write"`);if(s.indexFile!==void 0){Ae(s.indexFile,`options.memory.generation.roots[${t}].indexFile`);let o=s.indexFile.replaceAll("\\","/");if(lo.posix.isAbsolute(o)||lo.win32.isAbsolute(s.indexFile)||o.split("/").includes(".."))throw new TypeError(`options.memory.generation.roots[${t}].indexFile must stay within its root`)}}}function ou(n){if(n===void 0)return;if(!Array.isArray(n)||n.length===0)throw new TypeError("options.memory.consumption.files must be a non-empty array");let e=new Set;for(let[t,s]of n.entries()){if(!s||typeof s!="object")throw new TypeError(`options.memory.consumption.files[${t}] must be an object`);if(Ae(s.id,`options.memory.consumption.files[${t}].id`),Ae(s.path,`options.memory.consumption.files[${t}].path`),e.has(s.id))throw new TypeError(`options.memory.consumption.files contains duplicate id "${s.id}"`);if(e.add(s.id),s.required!==void 0&&typeof s.required!="boolean")throw new TypeError(`options.memory.consumption.files[${t}].required must be a boolean`)}}function po(n){if(n===void 0)return{};if(!n||typeof n!="object")throw new TypeError("options.memory must be an object");if(Array.isArray(n))throw new TypeError("options.memory must be an object");if(Object.keys(n).length===0)return{};if(n.mode!=="native"&&n.mode!=="custom")throw new TypeError('options.memory.mode must be "native" or "custom"');if(n.projectScope!==void 0&&typeof n.projectScope!="boolean")throw new TypeError("options.memory.projectScope must be a boolean");if(n.userScope!==void 0&&typeof n.userScope!="boolean")throw new TypeError("options.memory.userScope must be a boolean");let e=new Map;if(n.mode==="native"){if(n.projectScope===!1&&n.userScope===!1)throw new TypeError("options.memory native mode requires at least one enabled scope; use memory: {} to disable SDK memory");let i=Object.keys(n.generation??{}),a=Object.keys(n.consumption??{});if(i.some(u=>u!=="onResult")||a.some(u=>u!=="onResult"))throw new TypeError('options.memory mode "native" only accepts generation.onResult and consumption.onResult');return ze(n.generation?.onResult,"options.memory.generation.onResult"),ze(n.consumption?.onResult,"options.memory.consumption.onResult"),{config:{requester:"sdk",mode:"native",...n.projectScope!==void 0?{projectScope:n.projectScope}:{},...n.userScope!==void 0?{userScope:n.userScope}:{}},callbacks:{shouldGenerateCallbacks:e,onGenerationResult:n.generation?.onResult,onConsumptionResult:n.consumption?.onResult}}}let t,s=n.generation;if(s!==void 0){if(!s||typeof s!="object")throw new TypeError("options.memory.generation must be an object");if(s.enabled!==void 0&&typeof s.enabled!="boolean")throw new TypeError("options.memory.generation.enabled must be a boolean");su(s.roots),s.prompt!==void 0&&Ae(s.prompt,"options.memory.generation.prompt"),ze(s.onResult,"options.memory.generation.onResult");let i;if(s.turnComplete!==void 0){let a=s.turnComplete;if(!a||typeof a!="object")throw new TypeError("options.memory.generation.turnComplete must be an object");if(a.enabled!==void 0&&typeof a.enabled!="boolean")throw new TypeError("options.memory.generation.turnComplete.enabled must be a boolean");if(ze(a.shouldGenerate,"options.memory.generation.turnComplete.shouldGenerate"),a.timeoutMs!==void 0&&(!Number.isFinite(a.timeoutMs)||a.timeoutMs<=0))throw new TypeError("options.memory.generation.turnComplete.timeoutMs must be a positive finite number");if(a.onGateError!==void 0&&a.onGateError!=="skip"&&a.onGateError!=="report_failed")throw new TypeError('options.memory.generation.turnComplete.onGateError must be "skip" or "report_failed"');let u=a.shouldGenerate?"memory_should_generate_0":void 0;u&&a.shouldGenerate&&e.set(u,a.shouldGenerate),i={enabled:a.enabled??!0,shouldGenerateCallbackId:u,timeoutMs:a.timeoutMs,onGateError:a.onGateError}}if(s.turnComplete?.enabled===!0&&s.enabled===!1)throw new TypeError("options.memory.generation.turnComplete cannot be enabled when generation.enabled is false");t={enabled:s.enabled??!0,roots:s.roots?.map(a=>({...a})),prompt:s.prompt,turnComplete:i}}let o,r=n.consumption;if(r!==void 0){if(!r||typeof r!="object")throw new TypeError("options.memory.consumption must be an object");if(r.enabled!==void 0&&typeof r.enabled!="boolean")throw new TypeError("options.memory.consumption.enabled must be a boolean");if(ou(r.files),r.maxTokens!==void 0&&(!Number.isInteger(r.maxTokens)||r.maxTokens<=0))throw new TypeError("options.memory.consumption.maxTokens must be a positive integer");if(r.overflow!==void 0&&r.overflow!=="truncate"&&r.overflow!=="fail_query")throw new TypeError('options.memory.consumption.overflow must be "truncate" or "fail_query"');if(r.failureMode!==void 0&&r.failureMode!=="best_effort"&&r.failureMode!=="fail_query")throw new TypeError('options.memory.consumption.failureMode must be "best_effort" or "fail_query"');ze(r.onResult,"options.memory.consumption.onResult"),o={enabled:r.enabled??!0,files:r.files?.map(i=>({...i,required:i.required??!1})),maxTokens:r.maxTokens,overflow:r.overflow,failureMode:r.failureMode}}return{config:{requester:"sdk",mode:n.mode,...n.projectScope!==void 0?{projectScope:n.projectScope}:{},...n.userScope!==void 0?{userScope:n.userScope}:{},generation:t,consumption:o},callbacks:{shouldGenerateCallbacks:e,onGenerationResult:s?.onResult,onConsumptionResult:r?.onResult}}}var vt=10;function ru(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function kt(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function mo(n){if(n!==void 0){if(!Number.isInteger(n)||n<1||n>10)throw new TypeError(`options.evolution.skill.generation.turnComplete.reviewThreshold must be an integer between 1 and ${10}`);return n}}function iu(n){let e={shouldReviewCallbacks:new Map};if(n===void 0)return{config:void 0,callbacks:e};if(!n||typeof n!="object")throw new TypeError("options.evolution.skill.generation must be an object");if("roots"in n)throw new TypeError("options.evolution.skill.generation does not accept roots; roots are derived from loaded skills");if(n.enabled!==void 0&&typeof n.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.enabled must be a boolean");if(n.prompt!==void 0&&ru(n.prompt,"options.evolution.skill.generation.prompt"),n.maxSuggestions!==void 0&&(!Number.isInteger(n.maxSuggestions)||n.maxSuggestions<1||n.maxSuggestions>10))throw new TypeError("options.evolution.skill.generation.maxSuggestions must be an integer between 1 and 10");kt(n.onResult,"options.evolution.skill.generation.onResult");let t;if(n.turnComplete!==void 0){if(!n.turnComplete||typeof n.turnComplete!="object")throw new TypeError("options.evolution.skill.generation.turnComplete must be an object");if(n.turnComplete.enabled!==void 0&&typeof n.turnComplete.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.turnComplete.enabled must be a boolean");let s=mo(n.turnComplete.reviewThreshold);if(kt(n.turnComplete.shouldReview,"options.evolution.skill.generation.turnComplete.shouldReview"),n.turnComplete.timeoutMs!==void 0&&(!Number.isFinite(n.turnComplete.timeoutMs)||n.turnComplete.timeoutMs<=0))throw new TypeError("options.evolution.skill.generation.turnComplete.timeoutMs must be a positive finite number");if(n.turnComplete.onGateError!==void 0&&n.turnComplete.onGateError!=="skip"&&n.turnComplete.onGateError!=="report_failed")throw new TypeError('options.evolution.skill.generation.turnComplete.onGateError must be "skip" or "report_failed"');let o=n.turnComplete.shouldReview?"skill_evolution_should_review_0":void 0;o&&e.shouldReviewCallbacks.set(o,n.turnComplete.shouldReview),t={enabled:n.turnComplete.enabled??!0,reviewThreshold:s,shouldReviewCallbackId:o,timeoutMs:n.turnComplete.timeoutMs,onGateError:n.turnComplete.onGateError}}if(n.turnComplete!==void 0&&t?.enabled===!0&&n.enabled===!1)throw new TypeError("options.evolution.skill.generation.turnComplete cannot be enabled when generation.enabled is false");return{config:{enabled:n.enabled??!0,prompt:n.prompt,maxSuggestions:n.maxSuggestions,turnComplete:t},callbacks:{...e,onResult:n.onResult}}}function fo(n){if(n===void 0)return{};if(!n||typeof n!="object")throw new TypeError("options.evolution.skill must be an object");if(n.mode!=="native"&&n.mode!=="custom")throw new TypeError('options.evolution.skill.mode must be "native" or "custom"');let e=n.generation;if(n.mode==="native"){if(Object.keys(e??{}).some(i=>i!=="enabled"&&i!=="onResult"&&i!=="turnComplete"))throw new TypeError('options.evolution.skill mode "native" only accepts generation.enabled, generation.onResult, and generation.turnComplete.reviewThreshold');if(e?.enabled!==void 0&&typeof e.enabled!="boolean")throw new TypeError("options.evolution.skill.generation.enabled must be a boolean");let o=e?.turnComplete;if(o!==void 0){if(!o||typeof o!="object")throw new TypeError("options.evolution.skill.generation.turnComplete must be an object");if(Object.keys(o).some(i=>i!=="reviewThreshold"))throw new TypeError('options.evolution.skill mode "native" only accepts generation.turnComplete.reviewThreshold')}let r=mo(o?.reviewThreshold);return e?.enabled===!1?(kt(e?.onResult,"options.evolution.skill.generation.onResult"),{callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}}):(kt(e?.onResult,"options.evolution.skill.generation.onResult"),{config:{requester:"sdk",mode:"native",...r===void 0?{}:{generation:{turnComplete:{reviewThreshold:r}}}},callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}})}let t=iu(e);return t.config?.enabled===!1?{callbacks:t.callbacks}:{config:{requester:"sdk",mode:"custom",generation:t.config},callbacks:t.callbacks}}import{spawn as qu}from"node:child_process";import{createInterface as fu}from"node:readline";var un="daemon_queries_v1",w=class extends Error{code="DAEMON_PROTOCOL_ERROR";constructor(e){super(e),this.name="DaemonProtocolError"}};function cn(n){if(n.trim().length===0)throw new w("daemon protocol line must not be empty");let e;try{e=JSON.parse(n)}catch{throw new w("daemon protocol line must contain valid JSON")}let t=_(e,"daemon protocol frame");if(Object.hasOwn(t,"frame_type")||Object.hasOwn(t,"protocol_version")&&!Object.hasOwn(t,"type"))throw new w("daemon v1 frame envelopes are not supported on the v2 wire");switch(t.type){case"control_request":uu(t);break;case"control_response":cu(t);break;case"status_event":au(t);break;case"keep_alive":C(t,["type"],"keep_alive frame");break;case"session_input":case"session_output":throw new w(`${String(t.type)} is not supported on the v2 wire`);default:if(E(t,"type"),!du(t.type))throw new w(`unknown daemon message type: ${String(t.type)}`);lu(t),ln(t)}return t}function yo(n){let e=JSON.stringify(n);return cn(e),e}function So(n,e){let t=e.response.response;switch(n){case"initialize":{q(e,"initialize response");let s=_(t,"initialize response");if(C(s,["daemon_protocol_version","daemon_version","capabilities"],"initialize response"),s.daemon_protocol_version!==2)throw new w(`unsupported daemon_protocol_version: ${String(s.daemon_protocol_version)}`);return E(s,"daemon_version"),pu(s,"capabilities"),s}case"open_session":{let s=rn(e,"open_session response");return on(t,"open_session"),{session_id:s}}case"list_sessions":{q(e,"list_sessions response");let s=_(t,"list_sessions response");C(s,["sessions"],"list_sessions response");let o=s.sessions;if(!Array.isArray(o))throw new w("sessions must be an array");for(let[r,i]of o.entries())ho(_(i,`sessions[${r}]`),`sessions[${r}]`);return s}case"rename_session":{rn(e,"rename_session response");let s=_(t,"rename_session response");return C(s,["session"],"rename_session response"),ho(_(s.session,"rename_session session"),"rename_session session"),s}case"close_session":return rn(e,`${n} response`),on(t,n),null;case"delete_session":case"shutdown":case"update_byok_config":case"delete_byok_config":return q(e,`${n} response`),on(t,n),null;case"get_models":return q(e,`${n} response`),bt(t,n,"models");case"get_byok_config":return q(e,`${n} response`),bt(t,n,"providers");case"list_byok_configs":return q(e,`${n} response`),bt(t,n,"configs");case"list_plugins":return q(e,`${n} response`),bt(t,n,"plugins");case"validate_byok_model":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success"],`${n} response`),an(s,"success"),s}case"create_byok_config":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["config"],`${n} response`),_(s.config,`${n} response config`),s}case"account_info":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["account"],`${n} response`),_(s.account,`${n} response account`),s}case"check_byok_config":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success","error","code","requestId","details"],`${n} response`),an(s,"success"),go(s,["error","code","requestId"]),s.details!==void 0&&_(s.details,`${n} response details`),s}case"get_usage_info":{q(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["usage","session","usage_error"],`${n} response`),s.usage!==null&&_(s.usage,`${n} response usage`),_(s.session,`${n} response session`),go(s,["usage_error"]),s}default:throw new w(`unknown daemon command result method: ${String(n)}`)}}function au(n){if(C(n,["type","status","data"],"status_event frame"),n.status!=="daemon.session_updated")throw new w("unsupported status_event status");let e=_(n.data,"status_event data");if(C(e,["local_session_id","state","error"],"status_event data"),E(e,"local_session_id"),e.state!=="failed")throw new w("status_event state must be failed");_(e.error,"status_event error")}function uu(n){C(n,["type","request_id","session_id","request"],"control_request frame"),E(n,"request_id"),ln(n);let e=_(n.request,"control request");if(!(typeof e.type=="string"&&e.type.length>0)&&!(typeof e.subtype=="string"&&e.subtype.length>0))throw new w("control request must have a non-empty string type or subtype")}function cu(n){C(n,["type","session_id","response"],"control_response frame"),ln(n);let e=_(n.response,"control response");E(e,"request_id");let t=E(e,"subtype");if(t==="success"){if(["error","code","retryable","details"].some(s=>Object.hasOwn(e,s)))throw new w("success control response must not include error fields");C(e,["subtype","request_id","response"],"success control response"),e.response!==void 0&&_(e.response,"success response result");return}if(t!=="error")throw new w(`unknown control response subtype: ${t}`);if(Object.hasOwn(e,"response"))throw new w("error control response must not include response");if(C(e,["subtype","request_id","error","code","retryable","details","pending_permission_requests"],"error control response"),E(e,"error"),e.code!==void 0&&E(e,"code"),e.retryable!==void 0&&an(e,"retryable"),e.details!==void 0&&_(e.details,"control response details"),e.pending_permission_requests!==void 0&&!Array.isArray(e.pending_permission_requests))throw new w("pending_permission_requests must be an array")}function go(n,e){for(let t of e)n[t]!==void 0&&E(n,t)}function bt(n,e,t){let s=_(n,`${e} response`);if(C(s,[t],`${e} response`),!Array.isArray(s[t]))throw new w(`${e} response ${t} must be an array`);return s}function ho(n,e){C(n,["local_session_id","title","cwd","state","created_at","updated_at"],e),E(n,"local_session_id"),n.cwd!==void 0&&E(n,"cwd"),E(n,"title");let t=E(n,"state");if(!["pending","ready","inactive","failed"].includes(t))throw new w(`${e} has invalid state: ${t}`);E(n,"created_at"),E(n,"updated_at")}function on(n,e){if(n!==void 0)throw new w(`${e} success must omit response`)}function rn(n,e){let t=n;try{return E(t,"session_id")}catch{throw new w(`${e} requires a valid session_id`)}}function q(n,e){if(Object.hasOwn(n,"session_id"))throw new w(`${e} must not include session_id`)}function ln(n){let e=n;e.session_id!==void 0&&E(e,"session_id")}function lu(n){for(let e of["session_epoch","sequence"])if(Object.hasOwn(n,e))throw new w(`${e} is reserved for daemon-internal Session ordering`)}function du(n){return typeof n=="string"&&["user","assistant","stream_event","result","system","prompt_suggestion","command_lifecycle","control_cancel_request","control_cancel","transcript_mirror"].includes(n)}function _(n,e){if(typeof n!="object"||n===null||Array.isArray(n))throw new w(`${e} must be a JSON object`);return n}function E(n,e){let t=n[e];if(typeof t!="string"||t.length===0)throw new w(`${e} must be a non-empty string`);return t}function an(n,e){let t=n[e];if(typeof t!="boolean")throw new w(`${e} must be a boolean`);return t}function pu(n,e){let t=n[e];if(!Array.isArray(t)||t.some(s=>typeof s!="string"))throw new w(`${e} must be an array of strings`);return t}function C(n,e,t){let s=new Set(e),o=Object.keys(n).find(r=>!s.has(r));if(o!==void 0)throw new w(`${t} contains unknown field: ${o}`)}var _t=class{constructor(e,t){this.connection=e;this.options=t}messages=new ne;pendingMessages=[];initializePromise;sessionId;flushingPendingMessages=!1;inputEnded=!1;resultReceived=!1;commandLifecycleSupported=!1;pendingCommandUuids=new Set;closed=!1;cleaned=!1;releasePromise;closePromise;initialize(){return this.initializePromise||(this.initializePromise=this.open(),this.initializePromise.catch(()=>{})),this.initializePromise}write(e){if(this.closed)throw new Error("Transport is not ready or has been closed");let t=mu(e);if(this.trackOutboundCommand(t),!this.sessionId||this.flushingPendingMessages){if(!this.initializePromise)throw new Error("Transport is not ready or has been closed");this.pendingMessages.push(t);return}let s;try{s=wo(t,this.sessionId)}catch(o){this.failAndRelease(o);return}this.connection.sendSessionMessage(s).catch(o=>this.failAndRelease(o))}async*readMessages(){await this.initialize();for await(let e of this.messages)yield e}endInput(){this.closed||(this.inputEnded=!0,this.maybeCloseAfterResult())}close(){return this.closePromise||(this.closePromise=this.performClose(),this.closePromise.catch(()=>{})),this.closePromise}isReady(){return this.sessionId!==void 0&&!this.closed}acceptOutput(e){this.closed||(this.observeCapabilities(e),this.messages.enqueue(e),this.observeCommandLifecycle(e),e.type==="result"&&(this.resultReceived=!0),this.maybeCloseAfterResult())}fail(e){this.closed||(this.closed=!0,this.cleanup(),this.messages.error(e instanceof Error?e:new Error(String(e))))}async open(){let e;try{let t=await this.connection.openSession({worker_args:[...this.options.workerArgs],...this.options.cwd!==void 0?{cwd:this.options.cwd}:{},...this.options.configDir!==void 0?{config_dir:this.options.configDir}:{}},this);if(this.sessionId=t,e=t,this.closed){await this.releaseSessionOnce(t);return}this.flushingPendingMessages=!0;try{for(;this.pendingMessages.length>0;){let s=this.pendingMessages.map(o=>wo(o,t));this.pendingMessages.splice(0);for(let o of s)await this.connection.sendSessionMessage(o)}}finally{this.flushingPendingMessages=!1}}catch(t){throw e!==void 0&&this.startRelease(e),this.fail(t),t}}failAndRelease(e){let t=this.sessionId;t!==void 0&&this.startRelease(t),this.fail(e)}startRelease(e){this.releaseSessionOnce(e).catch(()=>{})}releaseSessionOnce(e){return this.releasePromise||(this.releasePromise=this.releaseSession(e).catch(t=>{throw this.connection.fail(t),t})),this.releasePromise}releaseSession(e){return this.connection.closeSession(e)}trackOutboundCommand(e){if(!this.commandLifecycleSupported||e.type!=="user")return;let t=e.uuid;typeof t=="string"&&t.trim().length>0&&this.pendingCommandUuids.add(t)}observeCapabilities(e){e.type!=="system"||e.subtype!=="init"||this.updateCommandLifecycleCapability(e)}updateCommandLifecycleCapability(e){let t=e.capabilities;this.commandLifecycleSupported=Array.isArray(t)&&t.includes("msg_lifecycle_v1")}observeCommandLifecycle(e){if(e.type!=="command_lifecycle"||e.state!=="completed"&&e.state!=="cancelled"&&e.state!=="discarded")return;let t=e.command_uuid;typeof t=="string"&&this.pendingCommandUuids.delete(t)}maybeCloseAfterResult(){!this.inputEnded||!this.resultReceived||this.commandLifecycleSupported&&this.pendingCommandUuids.size>0||this.close().catch(()=>{})}async performClose(){this.closed||(this.closed=!0,this.cleanup());try{this.initializePromise&&await this.initializePromise.catch(()=>{}),this.releasePromise?await this.releasePromise:this.sessionId&&await this.releaseSessionOnce(this.sessionId),this.messages.done()}catch(e){throw this.messages.error(e),e}}cleanup(){this.cleaned||(this.cleaned=!0,this.options.cleanup?.())}};function mu(n){let e;try{e=JSON.parse(n.trim())}catch{throw new Error("Query transport input must contain valid JSON")}if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("Query transport input must be a JSON object");return e}function wo(n,e){if(Object.hasOwn(n,"session_id")&&n.session_id!==e)throw new Error(`Query message session_id must match daemon Session: expected ${e}, received ${String(n.session_id)}`);return{...n,session_id:e}}var pn="multi_session_v2",vo="session_title_sync_v1",ko="session_delete_v1";var gu=3e4,mn=3e4,hu=125e3,yu=12e4,Su=5e3,wu=6e4,vu=1024,ku=64,bu=8*1024*1024,_u=256,Ru=32*1024*1024,Cu=new Set(["daemon.auth.fetch_job_token","daemon.auth.fetch_service_account_token"]),Rt=class extends Error{code;retryable;details;constructor(e){super(e.message),this.name="DaemonRpcError",this.code=e.code,this.retryable=e.retryable,this.details=e.details}},pe=class extends Error{code;retryable;details;constructor(e){super(e.message),this.name="DaemonRequestError",this.code=e.code,this.retryable=e.retryable,this.details=e.details}},Ct=class{input;requestHandler;pendingRequests=new Map;timedOutRequestIds=new Set;activeInboundRequestIds=new Set;sessions=new Map;closedSessionIds=new Set;pendingSessionMessages=new Map;pendingSessionMessageBytes=new Map;pendingSessionMessageFrameCount=0;pendingSessionMessageByteCount=0;maxFrameBytes;readTask;writeChain=Promise.resolve();nextRequestId=1;initializing=!1;initialized=!1;capabilities=new Set;stopping=!1;failure;failureListeners=new Set;constructor(e){if(this.input=e.input,this.requestHandler=e.requestHandler,this.maxFrameBytes=e.maxFrameBytes??Q,!Number.isSafeInteger(this.maxFrameBytes)||this.maxFrameBytes<=0)throw new TypeError("maxFrameBytes must be a positive safe integer");this.readTask=this.readOutput(e.output)}async initialize(e,t={}){if(this.initialized)throw new w("daemon connection is already initialized");if(this.initializing)throw new w("daemon initialize is already in progress");this.initializing=!0;let s,o=t.timeoutMs??gu,r=this.request("initialize",{daemon_protocol_version:2,sdk_version:e,capabilities:[pn,...t.capabilities??[]],...t.auth?{auth:t.auth}:{}}),i=new Promise((u,c)=>{s=setTimeout(()=>{let l=new Error(`Qoder CLI daemon did not initialize within ${o}ms`);this.fail(l),c(l)},o)}),a;try{a=await Promise.race([r,i])}finally{this.initializing=!1,s&&clearTimeout(s)}if(!a.capabilities.includes(pn))throw new w(`daemon is missing required capability: ${pn}`);for(let u of a.capabilities)this.capabilities.add(u);this.initialized=!0}createSessionTransport(e){if(!this.initialized||this.stopping||this.failure)throw this.failure??new Error("Daemon connection is not ready");return new _t(this,e)}supportsCapability(e){return this.capabilities.has(e)}onFailure(e){return this.failureListeners.add(e),this.failure&&e(this.failure),()=>this.failureListeners.delete(e)}async openSession(e,t){return(await this.request("open_session",e,t,void 0,yu)).session_id}async listSessions(){return(await this.request("list_sessions",{},void 0,void 0,hu,"request")).sessions}renameSession(e,t){return this.capabilities.has(vo)?this.request("rename_session",{title:t},void 0,e,mn):Promise.reject(new w(`daemon is missing required capability: ${vo}`))}sendSessionMessage(e){return this.writeFrame(e)}async closeSession(e){this.sessions.delete(e),this.closedSessionIds.add(e),await this.request("close_session",{},void 0,e,mn)}async deleteSession(e){if(!this.capabilities.has(ko))throw new w(`daemon is missing required capability: ${ko}`);await this.request("delete_session",{local_session_id:e},void 0,void 0,mn)}query(e,t){return this.capabilities.has(un)?this.request(e,t,void 0,void 0,wu,"request"):Promise.reject(new w(`daemon is missing required capability: ${un}`))}async shutdown(e=Su){if(this.stopping){await this.readTask.catch(()=>{});return}this.stopping=!0;for(let t of this.sessions.values())t.fail(new Error("Daemon is stopping"));this.sessions.clear();try{this.failure||await this.request("shutdown",{},void 0,void 0,e)}finally{!this.input.destroyed&&!this.input.writableEnded&&this.input.end()}}fail(e,t=!0){let s=e instanceof Error?e:new Error(String(e));if(!this.failure){this.failure=s;for(let o of this.pendingRequests.values())o.timeout&&clearTimeout(o.timeout),o.reject(s);this.pendingRequests.clear(),this.timedOutRequestIds.clear(),this.clearPendingSessionMessages();for(let o of this.sessions.values())o.fail(s);if(this.sessions.clear(),t)for(let o of this.failureListeners)try{o(s)}catch{}}}request(e,t,s,o,r,i="connection"){if(this.failure)return Promise.reject(this.failure);if(e!=="initialize"&&!this.initialized)return Promise.reject(new w("daemon connection is not initialized"));let a=`sdk_daemon_${this.nextRequestId++}`,u={type:"control_request",request_id:a,...o!==void 0?{session_id:o}:{},request:{type:`daemon.${e}`,...t}};return new Promise((c,l)=>{let m={method:e,resolve:p=>c(p),reject:l,...s?{sessionTransport:s}:{},...o!==void 0?{sessionId:o}:{}};r!==void 0&&(m.timeout=setTimeout(()=>{if(this.pendingRequests.get(a)!==m)return;let p=new w(`daemon ${e} request timed out after ${r}ms`);if(i==="request"){this.pendingRequests.delete(a),this.rememberTimedOutRequestId(a),m.reject(p);return}this.fail(p)},r),m.timeout.unref?.()),this.pendingRequests.set(a,m),this.writeFrame(u).catch(p=>{let d=this.pendingRequests.get(a);d?.timeout&&clearTimeout(d.timeout),this.pendingRequests.delete(a),l(p),d?.sessionTransport&&this.failIfSessionMessagesAreOrphaned()})})}async readOutput(e){let t=new ee(this.maxFrameBytes,"SDK daemon output");e.pipe(t);let s=fu({input:t,crlfDelay:1/0,terminal:!1});try{for await(let o of s){if(!o.trim())continue;let r=Eu(o);r!==void 0&&this.rejectLegacyInitialize(r)||this.acceptFrame(cn(o))}(!this.stopping||this.pendingRequests.size>0)&&this.fail(new Error("Daemon connection closed"),!1)}catch(o){this.fail(o)}finally{s.close(),e.unpipe(t),t.destroy()}}acceptFrame(e){let t=e;if(t.type!=="keep_alive"){if(t.type==="control_response"){let s=e,o=s.response.request_id;if(this.pendingRequests.has(o)){this.acceptControlResponse(s);return}if(this.timedOutRequestIds.delete(o))return;this.routeSessionMessage(t);return}if(t.type==="control_request"){let s=e,o=Pu(s);if(o==="valid"){this.acceptRequest(s);return}if(o==="contradictory")throw new w(`contradictory daemon reverse RPC routing markers: ${s.request_id}`)}if(t.type==="status_event"){this.acceptSessionUpdatedStatusEvent(e);return}this.routeSessionMessage(t)}}rememberTimedOutRequestId(e){if(this.timedOutRequestIds.size>=vu){let t=this.timedOutRequestIds.values().next().value;t!==void 0&&this.timedOutRequestIds.delete(t)}this.timedOutRequestIds.add(e)}routeSessionMessage(e){let t=e.session_id;if(typeof t!="string"||t.length===0)throw new w(`daemon Session message requires a valid session_id: ${String(t)}`);let s=this.sessions.get(t);if(s){s.acceptOutput(e);return}if(this.hasPendingSessionRequest()){this.bufferPendingSessionMessage(t,e);return}if(!this.closedSessionIds.has(t))throw new w(`daemon output has unknown session_id: ${t}`)}acceptControlResponse(e){let t=e.response.request_id,s=this.pendingRequests.get(t);if(!s)throw new w(`daemon response has unknown request_id: ${t}`);if(s.timeout&&clearTimeout(s.timeout),s.sessionId!==void 0&&e.session_id!==s.sessionId){this.pendingRequests.delete(t),s.reject(new w(`${s.method} response session_id does not match request: expected ${s.sessionId}, received ${String(e.session_id)}`));return}if(this.pendingRequests.delete(t),e.response.subtype==="error"){if(s.method==="initialize"&&e.response.code==="PROTOCOL_VERSION_UNSUPPORTED"){s.reject(new K("1","2"));return}s.reject(new Rt({code:e.response.code??"DAEMON_REQUEST_FAILED",message:e.response.error,retryable:e.response.retryable??!1,...e.response.details===void 0?{}:{details:e.response.details}})),s.sessionTransport&&this.failIfSessionMessagesAreOrphaned();return}try{let o=e,r=o.response.response?.daemon_protocol_version;if(s.method==="initialize"&&typeof r=="number"&&r!==2)throw new K(String(r),String(2));let i=So(s.method,o);if(s.sessionTransport){let a=i.session_id;if(typeof a!="string"||a.length===0)throw new w(`${s.method} did not return a valid session_id`);let u=this.takePendingSessionMessages(a);this.closedSessionIds.delete(a);let c=this.failIfSessionMessagesAreOrphaned(`${s.method} response session_id does not match buffered output`);if(c)throw c;if(this.sessions.has(a)){let l=new w(`daemon returned duplicate session_id: ${a}`);throw this.fail(l),l}this.sessions.set(a,s.sessionTransport);for(let l of u)s.sessionTransport.acceptOutput(l)}s.resolve(i)}catch(o){s.reject(o instanceof Error?o:new Error(String(o))),s.sessionTransport&&this.failIfSessionMessagesAreOrphaned()}}hasPendingSessionRequest(){return[...this.pendingRequests.values()].some(e=>e.sessionTransport!==void 0)}failIfSessionMessagesAreOrphaned(e="daemon left orphaned pre-response Session output"){if(this.hasPendingSessionRequest())return;for(let o of this.pendingSessionMessages.keys())this.closedSessionIds.has(o)&&this.deletePendingSessionMessages(o);if(this.pendingSessionMessages.size===0)return;let t=[...this.pendingSessionMessages.keys()].join(", "),s=new w(`${e}: ${t}`);return this.clearPendingSessionMessages(),this.fail(s),s}bufferPendingSessionMessage(e,t){let s=this.pendingSessionMessages.get(e)??[],o=Buffer.byteLength(JSON.stringify(t),"utf8"),r=this.pendingSessionMessageBytes.get(e)??0;if(s.length+1>ku||r+o>bu||this.pendingSessionMessageFrameCount+1>_u||this.pendingSessionMessageByteCount+o>Ru)throw new w("daemon pre-response Session output exceeded its bounded buffer");s.push(t),this.pendingSessionMessages.set(e,s),this.pendingSessionMessageBytes.set(e,r+o),this.pendingSessionMessageFrameCount+=1,this.pendingSessionMessageByteCount+=o}takePendingSessionMessages(e){let t=this.pendingSessionMessages.get(e)??[];return this.deletePendingSessionMessages(e),t}deletePendingSessionMessages(e){let t=this.pendingSessionMessages.get(e)?.length??0,s=this.pendingSessionMessageBytes.get(e)??0;this.pendingSessionMessages.delete(e),this.pendingSessionMessageBytes.delete(e),this.pendingSessionMessageFrameCount-=t,this.pendingSessionMessageByteCount-=s}clearPendingSessionMessages(){this.pendingSessionMessages.clear(),this.pendingSessionMessageBytes.clear(),this.pendingSessionMessageFrameCount=0,this.pendingSessionMessageByteCount=0}rejectLegacyInitialize(e){let t=this.pendingRequests.get(e);return t?.method!=="initialize"?!1:(this.pendingRequests.delete(e),t.reject(new K("1","2")),!0)}acceptRequest(e){if(this.activeInboundRequestIds.has(e.request_id)){this.writeInboundError(e.request_id,"DUPLICATE_REQUEST_ID",`daemon request_id is already active: ${e.request_id}`);return}if(!this.requestHandler){this.writeInboundError(e.request_id,"METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${e.request.type}`);return}this.activeInboundRequestIds.add(e.request_id),Promise.resolve().then(()=>this.requestHandler(e)).then(t=>{let s={type:"control_response",response:{subtype:"success",request_id:e.request_id,...t===null?{}:{response:t}}};return this.writeFrame(s)}).catch(t=>{let s=t instanceof pe?t:void 0,o={type:"control_response",response:{subtype:"error",request_id:e.request_id,code:s?.code??"SDK_REQUEST_FAILED",error:t instanceof Error?t.message:String(t),retryable:s?.retryable??!1,...s?.details?{details:s.details}:{}}};return this.writeFrame(o)}).catch(t=>this.fail(t)).finally(()=>{this.activeInboundRequestIds.delete(e.request_id)})}writeInboundError(e,t,s){let o={type:"control_response",response:{subtype:"error",request_id:e,code:t,error:s,retryable:!1}};this.writeFrame(o).catch(r=>this.fail(r))}acceptSessionUpdatedStatusEvent(e){let t=e.data.local_session_id,s=this.sessions.get(t);s&&(this.sessions.delete(t),this.closedSessionIds.add(t),s.fail(Tu(e.data)))}writeFrame(e){let t;try{t=`${yo(e)}
20
+ `,ve(t,this.maxFrameBytes,"SDK daemon input")}catch(o){let r=o instanceof Error?o:new Error(String(o));return this.fail(r),Promise.reject(r)}let s=this.writeChain.then(()=>new Promise((o,r)=>{this.input.write(t,"utf8",i=>{if(i){r(i);return}o()})}));return this.writeChain=s.catch(()=>{}),s.catch(o=>this.fail(o)),s}};function Eu(n){let e;try{e=JSON.parse(n)}catch{return}if(!bo(e)||!_o(e,["protocol_version","frame_type","request_id","ok","error"])||e.protocol_version!==1||e.frame_type!=="response"||e.ok!==!1||typeof e.request_id!="string"||e.request_id.length===0)return;let t=e.error;if(!(!bo(t)||!_o(t,["code","message","retryable"])||t.code!=="PROTOCOL_VERSION_UNSUPPORTED"||typeof t.message!="string"||t.message.length===0||t.retryable!==!1))return e.request_id}function bo(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _o(n,e){return Object.keys(n).length===e.length&&e.every(t=>Object.hasOwn(n,t))}function Pu(n){let e=Cu.has(n.request.type),t=n.request_id.startsWith("daemon_sdk_");return e&&t&&n.session_id===void 0?"valid":e||t?"contradictory":"none"}function Tu(n){let e=n.error,t=typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{},s=typeof t.message=="string"&&t.message.length>0?t.message:"Qoder CLI Worker exited before Session completed",o=t.exit_code===null||typeof t.exit_code=="number"?t.exit_code:void 0,r=t.signal===null||typeof t.signal=="string"?t.signal:void 0,i=typeof t.stderr=="string"&&t.stderr.length>0?t.stderr:void 0;return new D(s,{exitCode:o,signal:r,stderr:i})}var Mu=3e4;function Ro(n,e=Mu){return xu(e,"callbackTimeoutMs"),async t=>{switch(t.request.type){case"daemon.auth.fetch_job_token":return Au(n,t,e);case"daemon.auth.fetch_service_account_token":return Iu(n,t,e);default:throw N("METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${t.request.type}`)}}}async function Au(n,e,t){if(n.type!=="jobToken")throw N("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host job token callback is not configured");let s=Co(e,["reason","session_id"]),o=Eo(s.reason),r=Du(s.session_id,"session_id"),i=new AbortController;try{let a=await Po(()=>n.fetchJobToken({requestId:e.request_id,reason:o,sessionId:r},{signal:i.signal}),t,i);if(!a||typeof a.token!="string"||!a.token)throw N("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback did not provide a token");return{token:a.token}}catch(a){throw a instanceof pe?a:N("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback failed",!0)}}async function Iu(n,e,t){if(n.type!=="serviceAccount"||typeof n.fetchServiceAccountToken!="function")throw N("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host Service Account token callback is not configured");let s=Co(e,["reason","required_scopes"]);Eo(s.reason),Ou(s.required_scopes,"required_scopes");let o=new AbortController;try{let r=await Po(()=>n.fetchServiceAccountToken(),t,o);if(!r||typeof r.token!="string"||!r.token)throw N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback did not provide a token");let i=r.expiresAt;if(i!==void 0&&(!Number.isFinite(i)||i<1e12))throw N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback returned invalid expiresAt");return{token:r.token,...i!==void 0?{expires_at:i}:{}}}catch(r){throw r instanceof pe?r:N("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback failed",!0)}}function Co(n,e){let t=Object.keys(n.request).find(s=>s!=="type"&&!e.includes(s));if(t)throw N("DAEMON_AUTH_INVALID_REQUEST",`request contains unknown field: ${t}`);return n.request}function Eo(n){if(n!=="initial"&&n!=="unauthorized")throw N("DAEMON_AUTH_INVALID_REQUEST","reason must be initial or unauthorized");return n}function Du(n,e){if(n!==void 0){if(typeof n!="string"||!n)throw N("DAEMON_AUTH_INVALID_REQUEST",`${e} must be a non-empty string`);return n}}function Ou(n,e){if(!Array.isArray(n)||n.some(t=>typeof t!="string"))throw N("DAEMON_AUTH_INVALID_REQUEST",`${e} must be an array of strings`);return n}async function Po(n,e,t){let s;try{return await Promise.race([Promise.resolve().then(n),new Promise((o,r)=>{s=setTimeout(()=>{t.abort(),r(new Error("daemon auth callback timed out"))},e),s.unref?.()})])}finally{s&&clearTimeout(s)}}function xu(n,e){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`${e} must be a positive integer`)}function N(n,e,t=!1){return new pe({code:n,message:e,retryable:t})}var Nu="QODER_AGENT_SDK_DAEMON",ju="QODER_AGENT_SDK_DAEMON_IDLE_TIMEOUT_MS",Fu="ELECTRON_RUN_AS_NODE",To="--sdk",Ku=30*6e4,Mo=2e3,Ao=8192,Io=255,xo=new WeakMap;function yn(n){return xo.get(n)}async function Sn(n){let e=n.workerIdleTimeoutMs??Ku;Lu(e),Bu(n.initializeTimeoutMs);let t=new j({auth:n.auth,env:n.env,proxy:n.proxy}),s=await t.prepare(),o=Ft(n.auth,n.env),r=await $u(n.pathToQoderCLIExecutable),i={...s.env,...r.env,[Nu]:"1",[ju]:String(e)},a;try{a=await hn.spawn({command:r.command,args:r.args,cwd:n.cwd,env:i});let u=new Ct({input:a.process.stdin,output:a.process.stdout,requestHandler:Ro(n.auth)});a.setConnection(u),await u.initialize(et,{capabilities:["session_delete_v1"],auth:o,...n.initializeTimeoutMs===void 0?{}:{timeoutMs:n.initializeTimeoutMs}}),await t.cleanupAuthPayload();let c=new fn(u,a);return xo.set(c,{hostActionLaunch:{proxy:n.proxy,cliPath:n.pathToQoderCLIExecutable,env:n.env,cwd:n.cwd},auth:n.auth,transportProvider:new gn(u,s.env,n.cwd)}),c}catch(u){throw await t.cleanupAuthPayload(),await a?.stop().catch(()=>{}),u}}var fn=class{constructor(e,t){this.connection=e;this.processController=t;this.connection.onFailure(s=>this.acceptDaemonFailure(s)),this.processController.onFailure(s=>this.acceptDaemonFailure(s))}currentState="ready";stopPromise;get state(){return this.currentState}async listSessions(){return this.requireReady(),(await this.connection.listSessions()).map(Do)}async renameSession(e,t){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");let s=Uu(t),o=await this.connection.renameSession(e,s);return Do(o.session)}async deleteSession(e){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");await this.connection.deleteSession(e)}async getModels(e={}){return this.requireReady(),(await this.connection.query("get_models",{...e.fetchStrategy?{fetchStrategy:e.fetchStrategy}:{},...e.uid?{uid:e.uid}:{},...e.outerProviders?{outerProviders:e.outerProviders}:{}})).models}async getByokConfig(){return this.requireReady(),(await this.connection.query("get_byok_config",{})).providers}async validateByokModel(e){return this.requireReady(),(await this.connection.query("validate_byok_model",{provider:e.provider,model:e.model,api_key:e.api_key,...e.url!==void 0?{url:e.url}:{},...e.style!==void 0?{style:e.style}:{},...e.model_type!==void 0?{model_type:e.model_type}:{},...e.provider_type!==void 0?{provider_type:e.provider_type}:{}})).success}async listByokConfigs(){return this.requireReady(),(await this.connection.query("list_byok_configs",{})).configs}async createByokConfig(e){return this.requireReady(),(await this.connection.query("create_byok_config",{config:e})).config}async updateByokConfig(e){this.requireReady(),await this.connection.query("update_byok_config",{config:e})}async deleteByokConfig(e){this.requireReady(),await this.connection.query("delete_byok_config",{target:e})}async checkByokConfig(e){return this.requireReady(),this.connection.query("check_byok_config",{config:e})}async listPlugins(){return this.requireReady(),(await this.connection.query("list_plugins",{})).plugins}async getUsageInfo(){this.requireReady();let e=await this.connection.query("get_usage_info",{}),t=gt(e.usage),s=ft(e.session);return!t&&!s?null:{...t??{},...s?{session:s}:{}}}async accountInfo(){return this.requireReady(),(await this.connection.query("account_info",{})).account}stop(){return this.stopPromise||(this.processController.beginStopping(),this.currentState!=="failed"&&this.setDaemonState("stopping"),this.stopPromise=this.stopInternal()),this.stopPromise}async stopInternal(){try{await this.connection.shutdown().catch(()=>{}),await this.processController.stop(),this.currentState!=="failed"&&this.setDaemonState("stopped")}catch(e){throw this.setDaemonState("failed",e instanceof Error?e:new Error(String(e))),e}}acceptDaemonFailure(e){this.currentState==="ready"&&this.setDaemonState("failed",e)}setDaemonState(e,t){this.currentState!==e&&(this.currentState=e)}requireReady(){if(this.currentState!=="ready")throw new Error("Daemon is not ready")}};function Uu(n){if(typeof n!="string")throw new TypeError("title must be a non-empty string");let e=n.replace(/[\r\n]+/g," ").trim();if(!e)throw new TypeError("title must be a non-empty string");if(e.length>Io)throw new TypeError(`title must be at most ${Io} characters`);return e}function Do(n){return{localSessionId:n.local_session_id,title:n.title,...n.cwd?{cwd:n.cwd}:{},state:n.state,createdAt:n.created_at,updatedAt:n.updated_at}}var gn=class{constructor(e,t,s){this.connection=e;this.daemonEnv=t;this.defaultCwd=s}create(e){let t=new j({...e,auth:void 0,env:this.daemonEnv}),s=t.buildArgs();return this.connection.createSessionTransport({workerArgs:s,cwd:e.cwd??this.defaultCwd,...e.materializedSessionConfigDir!==void 0?{configDir:e.materializedSessionConfigDir}:{},cleanup:()=>t.cleanupGeneratedSettings()})}};function Lu(n){if(!Number.isSafeInteger(n)||n<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer")}function Bu(n){if(n!==void 0&&(!Number.isSafeInteger(n)||n<=0))throw new TypeError("initializeTimeoutMs must be a positive integer")}async function $u(n){let e=Me({pathToQoderCLIExecutable:n},ae),t,s={};if(e.transport==="worker"){let o=await _e(te(e.pathToQoderWorkerRuntime));t=o.runtimePath,s=o.env}else t=n??Z();return X(t)?{command:process.execPath,args:[t,To],env:{...s,...typeof process.versions.electron=="string"?{[Fu]:"1"}:{}}}:{command:t,args:[To],env:s}}var hn=class n{constructor(e){this.process=e;this.exited=new Promise(t=>{e.once("exit",()=>t()),e.once("error",()=>t())}),e.stderr?.on("data",t=>{this.stderrTail+=t.toString("utf8"),this.stderrTail.length>Ao&&(this.stderrTail=this.stderrTail.slice(-Ao))}),e.once("error",t=>{this.reportFailure(new D(`Failed to spawn Qoder CLI daemon: ${t.message}`,{stderr:this.getStderr(),cause:t}))}),e.once("exit",(t,s)=>{this.stopping||this.reportFailure(new D(t!==null?`Qoder CLI daemon exited with code ${t}`:`Qoder CLI daemon terminated by signal ${s}`,{exitCode:t,signal:s,stderr:this.getStderr()}))})}connection;failure;failureListeners=new Set;stderrTail="";exited;stopping=!1;static async spawn(e){let t;try{t=qu(e.command,e.args,{cwd:e.cwd,env:e.env,stdio:["pipe","pipe","pipe"]}),await Qu(t)}catch(s){throw new D(`Failed to spawn Qoder CLI daemon: ${zu(s)}`,{cause:s})}if(!t.stdin||!t.stdout)throw t.kill("SIGTERM"),new Error("Qoder CLI daemon did not expose piped stdin/stdout");return new n(t)}setConnection(e){this.connection=e,this.failure&&e.fail(this.failure)}onFailure(e){this.failureListeners.add(e),this.failure&&e(this.failure)}beginStopping(){this.stopping=!0}async stop(){this.beginStopping(),!await Oo(this.exited,Mo)&&(this.process.kill("SIGTERM"),!await Oo(this.exited,Mo)&&(this.process.kill("SIGKILL"),await this.exited))}getStderr(){return this.stderrTail.trim()||void 0}reportFailure(e){if(!(this.stopping||this.failure)){this.failure=e,this.connection?.fail(e);for(let t of this.failureListeners)t(e)}}};function zu(n){return n instanceof Error?n.message:String(n)}async function Qu(n){n.pid===void 0&&await new Promise((e,t)=>{let s=()=>{n.off("error",o),e()},o=r=>{n.off("spawn",s),t(r)};n.once("spawn",s),n.once("error",o)})}async function Oo(n,e){let t;try{return await Promise.race([n.then(()=>!0),new Promise(s=>{t=setTimeout(()=>s(!1),e),t.unref?.()})])}finally{t&&clearTimeout(t)}}import{execFile as Gu,spawn as Hu}from"child_process";import{randomUUID as Wu}from"node:crypto";import{homedir as Ju}from"node:os";import{resolve as qo}from"node:path";function No(){return Z()}function jo(n=process.env){return qo(n.QODERCLI_HOST_ACTION_STORAGE_DIR??n[v.configDirEnv]??qo(n[v.cliHomeEnv]??Ju(),n[`${v.configDirEnv}_NAME`]??v.configDirName))}async function Fo(n,e={}){let t=e.cliPath??No(),s=e.timeout??125e3,o=X(t)?process.execPath:t,r=["feedback","action","send","--json"];e.proxy!==void 0&&r.push("--proxy",e.proxy);let i=await Vu(n,e.auth,s),a=X(t)?[t,...r]:r;await new Promise((u,c)=>{let l=Hu(o,a,{cwd:e.cwd,env:{...e.env??process.env,...X(t)&&process.versions.electron?{ELECTRON_RUN_AS_NODE:"1"}:{}},stdio:["pipe","ignore","ignore"]}),m=setTimeout(()=>{l.kill("SIGTERM"),c(new Error("Host action fallback timed out"))},s);m.unref?.(),l.once("error",p=>{clearTimeout(m),c(p)}),l.once("exit",(p,d)=>{clearTimeout(m),p===0?u():c(new Error(`Host action fallback exited with ${p??d??"unknown status"}`))}),l.stdin.on("error",p=>{clearTimeout(m),l.kill("SIGTERM"),c(p)}),l.stdin.end(`${JSON.stringify(i?{event:n,credential:i}:n)}
21
+ `)})}async function Vu(n,e,t){if(e?.type==="serviceAccount")throw new Error("Host actions are not supported for Service Account authentication");if(e?.type!=="jobToken")return;let s=new AbortController,o;try{let r=await Promise.race([Promise.resolve().then(()=>e.fetchJobToken({requestId:Wu(),reason:"initial",sessionId:n.session_id},{signal:s.signal})),new Promise((i,a)=>{o=setTimeout(()=>{s.abort(),a(new Error("Host action authentication timed out"))},Math.min(t,3e4))})]);if(!r?.token?.trim()||r.expiresAt!==void 0&&(!Number.isFinite(r.expiresAt)||r.expiresAt<=Date.now()))throw new Error("Host action credentials are unavailable or expired");return{type:e.type,token:r.token,expiresAt:r.expiresAt}}catch{throw new Error("Host action authentication failed")}finally{o&&clearTimeout(o)}}async function Yu(n,e){if(!n.content)return{success:!1,message:"Feedback content is required"};let t=e?.cliPath??No(),s=e?.timeout??6e4,o=["feedback","-c",n.content,"--json"];if(e?.storageDir&&o.push("--storage-dir",e.storageDir),n.sessionId&&o.push("-s",n.sessionId),n.workdir&&o.push("--workdir",n.workdir),n.email&&o.push("--email",n.email),n.include)for(let r of n.include)o.push("--include",r);if(n.imagePaths)for(let r of n.imagePaths)o.push("--images",r);if(n.callerVersion&&o.push("--caller-version",n.callerVersion),e?.integrationMode){let r=e.integrationMode==="qoder_work"?"QoderWork":e.integrationMode==="quest"?"Quest":e.integrationMode;r&&o.push("--ide-type",r)}return new Promise(r=>{Gu(t,o,{env:e?.env??process.env,timeout:s,maxBuffer:1024*1024},(i,a)=>{let u=a.trim();if(u)try{let c=JSON.parse(u);r({success:!!c.success,message:c.success?c.message||"Feedback submitted successfully":c.error||c.message||"Failed to submit feedback",requestId:c.request_id});return}catch{}r(i?{success:!1,message:i.message||"Failed to submit feedback"}:{success:!0,message:u||"Feedback submitted successfully"})})})}var wn=class extends Error{code="auth_not_configured";constructor(){super("The auth option is required when calling query(); configure options.auth so the SDK can create an auth payload file before spawning qodercli."),this.name="AuthNotConfiguredError"}};function Xu(n,e){if(e){if(n.transport!==void 0)throw new Error("options.transport cannot be combined with options.daemon.");let s=yn(e);if(!s)throw new Error("options.daemon must be returned by startDaemon().");return s.transportProvider}if(n.transport!==void 0){if(is(n.transport))return n.transport;throw new Error("options.transport must implement QueryTransportProvider. Use ProcessTransport.default, WorkerTransport.default, or a custom provider with create().")}let t=Me(n,ae);return t.transport==="worker"?new Re({pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):ke.default}function vn(n){let{prompt:e,options:t={}}=n,s=t.daemon,o;s&&(o=Zu(t));let r=s?yn(s):void 0,i=t.sessionStore,a=t.sessionStoreFlush??"batched",u=Xu(t,s),c=new dt({debug:t.debug,debugFile:t.debugFile,stderr:t.stderr});if(s!==void 0&&c.record("[DaemonRoute] explicit_daemon transport_overridden"),t.canUseTool&&t.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");if(t.planMode!==void 0&&typeof t.planMode!="boolean")throw new TypeError("options.planMode must be a boolean");t.goalMaxTurns!==void 0&&Le(t.goalMaxTurns);let l=r?.auth??t.auth;if(l==null)throw new wn;if(t.hostActions!==void 0&&l.type==="serviceAccount")throw new Error("Host actions are not supported for Service Account authentication: Tracking requires a user signing context");let m=i!==void 0&&t.forkSession===!0;if(i&&t.persistSession===!1)throw new Error(`sessionStore cannot be used with persistSession: false -- the storage adapter requires local writes to mirror from. Use ${v.configDirEnv}=/tmp for ephemeral local writes with external mirroring.`);if(i&&r===void 0&&!(u instanceof ke)&&!(u instanceof Re))throw new Error("sessionStore requires ProcessTransport or WorkerTransport.");if(i&&t.sessionStoreFlush!==void 0&&t.sessionStoreFlush!=="batched"&&t.sessionStoreFlush!=="eager")throw new Error('sessionStoreFlush must be "batched" or "eager".');if(i&&t.loadTimeoutMs!==void 0&&(!Number.isFinite(t.loadTimeoutMs)||t.loadTimeoutMs<=0))throw new Error("loadTimeoutMs must be a positive finite number.");if(i&&t.experimentalCloudAgent!==void 0)throw new Error("sessionStore is not supported by the experimental Cloud Agent runtime.");if(t.cloudAgent!==void 0)throw new Error("options.cloudAgent is not supported. Use options.experimentalCloudAgent for the experimental Cloud Agent runtime.");if(t.experimentalCloudAgent!==void 0)return Vs(t),Ys({prompt:e,options:t,diagnostics:c});let p=po(t.memory),d=fo(t.evolution?.skill),f=t.onAuthExpired,y=!1,g=f?()=>{y||(y=!0,Promise.resolve(f()).catch(b=>{c.record("[query] onAuthExpired callback threw:",b)}))}:void 0,S=new Map,k=new Map,h=new Map,P={},T={},ie={};if(t.mcpServers)for(let[b,M]of Object.entries(t.mcpServers)){let $=M.tools;if(Array.isArray($)&&$.length>0&&(T[b]=$),M.type==="sdk"&&"instance"in M&&M.instance){let Y=M.instance;if(S.set(b,Y),$){let Xe=qt(b,$);Xe&&(ie[b]=Xe)}let Fn=new yt(Xe=>{Cs(b,Xe,h)});k.set(b,Fn),Y.connect(Fn).catch(()=>{})}else P[b]=M}let R=Object.keys(P).length>0,J=Object.keys(T).length>0,qe=t.pathToQoderCLIExecutable,V=t.env,br=l?.type==="jobToken"?l.fetchJobToken:void 0,_r=l?.type==="serviceAccount"?l.fetchServiceAccountToken:void 0,Ve={pathToQoderCLIExecutable:qe,executable:t.executable,executableArgs:t.executableArgs,env:V,proxy:t.proxy,vpcEndpoint:t.vpcEndpoint,cwd:t.cwd,closeGraceMs:t.closeGraceMs,auth:l,model:t.model,agent:t.agent,debug:t.debug,diagnostics:c,maxTurns:t.maxTurns,includePartialMessages:t.includePartialMessages,includeHookEvents:t.includeHookEvents,sessionMirror:i!==void 0,permissionMode:t.permissionMode,allowDangerouslySkipPermissions:t.allowDangerouslySkipPermissions,permissionPromptToolName:t.permissionPromptToolName,canUseTool:t.canUseTool!==void 0,continue:t.continue,resume:t.resume,resumeSessionAt:t.resumeSessionAt,resumeDropsTurn:t.resumeDropsTurn,forkSession:t.forkSession,sessionId:t.sessionId,persistSession:t.persistSession,allowedTools:(()=>{let b=t.allowedTools??[];if(t.skills===void 0)return b.length>0?b:void 0;let M=t.skills==="all"?["Skill"]:t.skills.map(Y=>`Skill(${Y})`),$=new Set(b);return[...b,...M.filter(Y=>!$.has(Y))]})(),disallowedTools:t.disallowedTools,tools:t.tools,toolConfig:t.toolConfig,extensions:t.extensions,extraArgs:t.extraArgs,mcpServers:R?P:void 0,mcpToolPolicies:J?T:void 0,allowedMcpServerNames:t.allowedMcpServerNames,strictMcpConfig:t.strictMcpConfig,settings:t.settings,securityScan:t.securityScan,settingSources:t.settingSources,additionalDirectories:t.additionalDirectories,plugins:t.plugins,enableFileCheckpointing:t.enableFileCheckpointing,stderr:"pipe",stderrHandler:t.stderr,spawnQoderCLIProcess:t.spawnQoderCLIProcess,onAuthExpired:g},Ye,qn=i!==void 0&&(t.resume!==void 0||t.continue===!0)?new lt(async()=>{let b=await uo({store:i,cwd:t.cwd,resume:t.resume,continue:t.continue,loadTimeoutMs:t.loadTimeoutMs,env:t.env});if(!b)return{transport:at(u,{...Ve,continue:!1})};Ye=jo(t.env);try{return{transport:at(u,{...Ve,env:{...Ve.env??process.env,[v.configDirEnv]:b.configDir,...t.hostActions!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:Ye}:{}},materializedSessionConfigDir:b.configDir,continue:!1,resume:b.sessionId}),cleanup:b.cleanup}}catch(M){throw await b.cleanup(),M}}):at(u,Ve);qn.initialize().catch(()=>{});let Rr=typeof e=="string",Se=t.systemPrompt,Nn,jn;if(typeof Se=="string")Nn=Se;else if(typeof Se=="object"&&Se!==null&&Se.type==="preset"){let b=Se;if(b.preset!=="qodercli")throw new Error(`Unsupported systemPrompt preset: ${String(b.preset)}`);jn=b.append}let Cr={systemPrompt:Nn,appendSystemPrompt:jn,modelRequestPatches:t.modelRequestPatches,agents:t.agents,skills:Array.isArray(t.skills)?t.skills:void 0,planMode:s!==void 0?t.planMode??!1:t.planMode,promptSuggestions:t.promptSuggestions,hostActions:t.hostActions,goalMaxTurns:t.goalMaxTurns,enableFileCheckpointing:t.enableFileCheckpointing,memory:p.config,evolution:d.config?{skill:d.config}:void 0,customContext:t.customContext,beforeInitialize:void 0,requireSessionStoreForkBarrier:m,...s!==void 0?{independentPlanModeControls:!0,permissionMode:o}:{}},Ot=new ht(qn,Rr,t.canUseTool,t.hooks,t.abortController,S,Cr,t.onElicitation,c,g,t.controlRequestTimeoutMs,k,h,br,t.resolveModel,t.resolveModelTimeoutMs,i,a,ie,_r,p.callbacks,d.callbacks,t.resolveSessionArtifacts,async b=>{let M=r?.hostActionLaunch,$=new j({auth:l,vpcEndpoint:t.vpcEndpoint,env:{...M?.env??t.env??process.env,...Ye!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:Ye}:{}}});try{let Y=await $.prepare();await Fo(b,{cliPath:M?.cliPath??t.pathToQoderCLIExecutable,env:Y.env,cwd:t.cwd??M?.cwd,auth:l,proxy:M?.proxy??t.proxy})}finally{await $.cleanupAuthPayload()}},r!==void 0);if(typeof e=="string"){let b={type:"user",message:{role:"user",content:[{type:"text",text:e}]},parent_tool_use_id:null};Ot.streamInput(async function*(){yield b}())}else Ot.streamInput(e);return Ot}function Zu(n){if(n.planMode!==void 0&&typeof n.planMode!="boolean")throw new TypeError("options.planMode must be a boolean.");let e=Ue(n.permissionMode),s=[["auth",n.auth],["transport",n.transport],["env",n.env],["pathToQoderCLIExecutable",n.pathToQoderCLIExecutable],["executable",n.executable],["executableArgs",n.executableArgs],["proxy",n.proxy],["spawnQoderCLIProcess",n.spawnQoderCLIProcess],["closeGraceMs",n.closeGraceMs],["sessionStore",n.sessionStore]].find(([,o])=>o!==void 0);if(s)throw new Error(`options.${s[0]} is part of startDaemon() configuration and cannot be overridden by a daemon-bound Query.`);return e}var kn=class{resolvePrompt;prompt=new Promise(e=>{this.resolvePrompt=e});settled=!1;activate(e){if(this.settled)throw new Error("WarmQuery can only be queried once");this.settled=!0,this.resolvePrompt(e)}discard(){this.settled||(this.settled=!0,this.resolvePrompt(void 0))}async*[Symbol.asyncIterator](){let e=await this.prompt;if(e!==void 0){if(typeof e=="string"){yield{type:"user",message:{role:"user",content:[{type:"text",text:e}]},parent_tool_use_id:null};return}yield*e}}},bn=class{constructor(e,t){this.session=e;this.gate=t}used=!1;closed=!1;query(e){if(this.closed)throw new Error("WarmQuery is closed");if(this.used)throw new Error("WarmQuery can only be queried once");return this.used=!0,this.gate.activate(e),this.session}close(){this.closed||(this.closed=!0,this.gate.discard(),this.session.close())}async[Symbol.asyncDispose](){this.closed||(this.closed=!0,this.gate.discard()),await this.session.close()}};async function ec(n={}){let e=n.initializeTimeoutMs??6e4;if(!Number.isFinite(e)||e<=0)throw new TypeError("initializeTimeoutMs must be a positive finite number");if(n.options?.experimentalCloudAgent!==void 0)throw new Error("startup is not supported by the experimental Cloud Agent runtime");let t=new kn,s=vn({prompt:t,options:n.options}),o;try{return await Promise.race([s.initializationResult(),new Promise((r,i)=>{o=setTimeout(()=>{i(new Error(`Qoder Agent SDK startup timed out after ${e}ms while waiting for qodercli initialization. Check authentication and network connectivity, then retry.`))},e)})]),new bn(s,t)}catch(r){throw t.discard(),await s.close(),r}finally{o!==void 0&&clearTimeout(o)}}import{readFile as tc}from"node:fs/promises";import nc from"node:os";import B from"node:path";var sc=["user","project","local"],Cn=new Set(["__proto__","constructor","prototype"]),oc=/^[\p{L}\p{N}\p{M}._ -]+$/u,rc=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu,ic=new Set([".git",".svn",".hg",".vscode",".idea",".husky",".github","node_modules","bower_components"]),ac=new Set(["mcpServers","providers","skillOverrides","enabledPlugins","extraKnownMarketplaces","pluginConfigs"]),uc=new Set(["context.fileFiltering.customIgnoreFilePaths","tools.exclude","mcp.enabledProjectMcpServers","mcp.disabledProjectMcpServers","security.approvedExternalImportProjects","advanced.excludedEnvVars","extensions.disabled","extensions.workspacesWithMigrationNudge","plugins.enabled","plugins.disabled","skills.disabled","blockedMarketplaces","allowedHttpHookUrls"]);function me(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function cc(n){let e=n.charCodeAt(0)===65279?n.slice(1):n,t="",s=!1,o=!1,r=!1,i=!1;for(let a=0;a<e.length;a+=1){let u=e[a],c=e[a+1];if(r){u===`
20
22
  `||u==="\r"?(r=!1,t+=u):t+=" ";continue}if(i){u==="*"&&c==="/"?(i=!1,t+=" ",a+=1):t+=u===`
21
- `||u==="\r"?u:" ";continue}if(s){t+=u,o?o=!1:u==="\\"?o=!0:u==='"'&&(s=!1);continue}u==='"'?(s=!0,t+=u):u==="/"&&c==="/"?(r=!0,t+=" ",a+=1):u==="/"&&c==="*"?(i=!0,t+=" ",a+=1):t+=u}return t}function Hu(n,e){let t;try{t=JSON.parse(Wu(n))}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`Unable to parse settings from ${e}: ${o}`)}if(!le(t))throw new TypeError(`Settings from ${e} must be a JSON object`);return Rt(t)}function Me(n){return Array.isArray(n)?n.map(Me):le(n)?Rt(n):n}function Rt(n){let e={};for(let[t,s]of Object.entries(n))_n.has(t)||s===void 0||(e[t]=Me(s));return e}function Ju(n){let e=n.join(".");if(Qu.has(e)||n.length===2&&n[0]==="providers")return"shallow";if(Gu.has(e))return"union";if(n.length===2&&n[0]==="hooks")return"concat"}function bn(n,e,t=[]){for(let[s,o]of Object.entries(e)){if(_n.has(s)||o===void 0)continue;let r=[...t,s],i=n[s],a=Ju(r);if(a==="shallow"&&i&&o){let u={};le(i)&&Object.assign(u,Rt(i)),le(o)&&Object.assign(u,Rt(o)),n[s]=u;continue}if(Array.isArray(i)){let u=Array.isArray(o)?o:[o];if(a==="concat"){n[s]=[...i.map(Me),...u.map(Me)];continue}if(a==="union"){n[s]=[...new Set([...i,...u])].map(Me);continue}}if(le(i)&&le(o))bn(i,o,r);else if(le(o)){let u={};bn(u,o,r),n[s]=u}else n[s]=Me(o)}}function Vu(n){let e=n?.[v.configDirNameEnv];if(e===void 0||e==="")return{user:v.configDirName,project:v.projectConfigDirName};let t=e.normalize("NFC");if(Array.from(t).length<1||Array.from(t).length>64||t.startsWith(" ")||t.endsWith(" ")||t.endsWith(".")||t==="."||t===".."||!Bu.test(t)||$u.test(t))throw new Error(`${v.configDirNameEnv} must be a valid directory name`);if(zu.has(t.toLowerCase()))throw new Error(`${v.configDirNameEnv} must not use a protected directory name`);return{user:t,project:t}}async function kn(n,e){let t;try{t=await Ku(e,"utf8")}catch(s){if(s.code==="ENOENT")return;throw s}return{source:n,path:U.resolve(e),settings:Hu(t,U.resolve(e))}}async function Yu(n={}){let e=U.resolve(n.cwd??process.cwd()),t=process.env,s=Vu(t),o=t[v.cliHomeEnv]??t.GEMINI_CLI_HOME,r=o?U.resolve(e,o):Uu.homedir(),i=t[v.configDirEnv]?U.resolve(e,t[v.configDirEnv]):U.join(r,s.user),a=U.join(e,s.project),u=new Set(n.settingSources??Lu),c=U.resolve(r)===e,d=[];if(u.has("user")){let l=await kn("user",U.join(i,"settings.json"));l&&d.push(l)}if(u.has("project")&&!c){let l=await kn("project",U.join(a,"settings.json"));l&&d.push(l)}if(u.has("local")&&!c){let l=await kn("local",U.join(a,"settings.local.json"));l&&d.push(l)}let m={},p={};for(let l of d){bn(m,l.settings);for(let f of Object.keys(l.settings))_n.has(f)||(p[f]={source:l.source,...l.path?{path:l.path}:{}})}return{effective:m,provenance:p,sources:d}}var Xu=30*6e4,Ct=class extends Error{constructor(){super("Global daemon is already initialized with a different workerIdleTimeoutMs"),this.name="DaemonConfigurationConflictError"}},de,W,pe,Be,me;function Ao(n){let e;try{e=ec(n)}catch(s){return Promise.reject(s)}if(me)return me.then(()=>Ao(n));if(de){if(de.state==="ready")return Io(e)?Promise.resolve({mode:"daemon",daemon:de}):Promise.reject(new Ct);de=void 0,W=void 0,Be=void 0}if(pe)return Io(e)?pe:Promise.reject(new Ct);if(Be)return Promise.resolve(Be);W=e;let t;return t=hn(e).then(s=>(de=s,{mode:"daemon",daemon:s})).catch(s=>{let o=tc(s);return Be=o,W=void 0,o}).finally(()=>{pe===t&&(pe=void 0)}),pe=t,t}function Zu(){if(me)return me;let n=pe,e=de,t;return t=(async()=>{let s=e?{mode:"daemon",daemon:e}:n?await n:void 0;s?.mode==="daemon"&&await s.daemon.stop()})().finally(()=>{me===t&&(de=void 0,W=void 0,pe=void 0,Be=void 0,me=void 0)}),me=t,t}function ec(n){let e=n.workerIdleTimeoutMs??Xu;if(!Number.isSafeInteger(e)||e<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer");return{...n,workerIdleTimeoutMs:e}}function Io(n){return W?.auth===n.auth&&W.workerIdleTimeoutMs===n.workerIdleTimeoutMs&&W.cwd===n.cwd&&W.pathToQoderCLIExecutable===n.pathToQoderCLIExecutable&&W.proxy===n.proxy&&W.env===n.env}function tc(n){return n instanceof F?{mode:"direct",reason:"protocol_version_mismatch"}:{mode:"direct",reason:"daemon_unavailable"}}import{McpServer as nc}from"@modelcontextprotocol/sdk/server/mcp.js";function sc(n){if(!n.name||typeof n.name!="string"||n.name.trim()==="")throw new Error("[createSdkMcpServer] Server name must be a non-empty string.");let e=new nc({name:n.name,version:n.version??"1.0.0"},{capabilities:{tools:n.tools&&n.tools.length>0?{}:void 0}}),t=[];if(n.tools&&n.tools.length>0)for(let s of n.tools){if(!s.name||typeof s.name!="string"||s.name.trim()==="")throw new Error(`[createSdkMcpServer] Tool name must be a non-empty string in server "${n.name}".`);if(!s.description||typeof s.description!="string")throw new Error(`[createSdkMcpServer] Tool "${s.name}" must have a non-empty description string.`);Dt(n.name,{name:s.name,exposedName:s.exposedName,alwaysLoad:s.alwaysLoad}),(s.exposedName!==void 0||s.alwaysLoad!==void 0||s.permissionPolicy!==void 0)&&t.push({name:s.name,...s.exposedName!==void 0?{exposedName:s.exposedName}:{},...s.alwaysLoad!==void 0?{alwaysLoad:s.alwaysLoad}:{},...s.permissionPolicy!==void 0?{permission_policy:s.permissionPolicy}:{}});try{e.registerTool(s.name,{description:s.description,inputSchema:s.inputSchema,...s.annotations?{annotations:s.annotations}:{}},s.handler)}catch(o){throw o instanceof Error&&o.message.includes("already registered")?new Error(`[createSdkMcpServer] Duplicate tool name "${s.name}" in server "${n.name}". Each tool name must be unique within a server.`):o}}return{type:"sdk",name:n.name,instance:e,...t.length>0?{tools:t}:{}}}function oc(n,e,t,s,o){return{name:n,description:e,inputSchema:t,handler:s,annotations:o?.annotations,...o?.exposedName!==void 0?{exposedName:o.exposedName}:{},...o?.alwaysLoad!==void 0?{alwaysLoad:o.alwaysLoad}:{},...o?.permissionPolicy!==void 0?{permissionPolicy:o.permissionPolicy}:{}}}import{readdir as Rn,readFile as Pt,stat as Ie,appendFile as Fo,realpath as rc,rm as Do}from"fs/promises";import{basename as ic,join as I,resolve as Oo}from"path";import{execFile as ac}from"child_process";import{randomUUID as Ko}from"crypto";import{promisify as uc}from"util";var cc=uc(ac),lc=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Uo=new Set(["user","assistant","system","progress","attachment"]);function A(n){return n!==null&&typeof n=="object"}function fe(n){return lc.test(n)}function dc(n){let e=[];for(let t of n.split(`
22
- `)){let s=t.trim();if(s)try{let o=JSON.parse(s);A(o)&&typeof o.uuid=="string"&&typeof o.type=="string"&&Uo.has(o.type)&&e.push(o)}catch{}}return e}function pc(n,e){let t;for(let s of n.split(`
23
- `)){let o=s.trim();if(o)try{let r=JSON.parse(o);if(!A(r)||r.type!=="active-leaf"||(r.sessionId??r.session_id)!==e)continue;let a=Object.hasOwn(r,"leafUuid")?r.leafUuid:r.leaf_uuid;if(a!==null&&typeof a!="string")continue;t={leafUuid:a,sessionId:e}}catch{}}return t}function Et(n){if(!A(n.message))return[];let e=n.message.content;return Array.isArray(e)?e:[]}var mc=new Set(["user-rejected","permission-rule","automode-blocked","automode-unavailable","automode-parsing-error","interrupted","cancelled"]);function fc(n){return typeof n=="string"&&mc.has(n)?n:void 0}function Cn(n){if(n.type!=="user")return;let e=Et(n).filter(r=>A(r)&&r.type==="tool_result"&&typeof r.tool_use_id=="string");if(e.length===0)return;let t=Array.isArray(n.toolDenialKind)?n.toolDenialKind:e.length===1?[n.toolDenialKind]:[],s=Array.isArray(n.userFeedback)?n.userFeedback:e.length===1?[n.userFeedback]:[],o=e.flatMap((r,i)=>{let a=fc(t[i]);if(!a)return[];let u=s[i];return[{id:r.tool_use_id,non_execution_kind:a,...typeof u=="string"?{user_feedback:u}:{}}]});return o.length>0?o:void 0}function $e(n){if(n.type!=="assistant"||!A(n.message))return;let e=n.message.id;return typeof e=="string"&&e?e:void 0}function Lo(n){return n.type!=="user"||!n.parentUuid?!1:Et(n).some(e=>A(e)&&e.type==="tool_result")}function gc(n){if(!A(n.message))return null;let e=n.message.id;return typeof e=="string"&&e.length>0?e:null}function hc(n,e){let t=new Map;for(let[s,o]of n){let r=gc(o);if(r){let i=t.get(r);i?i.push(s):t.set(r,[s])}}for(let[s,o]of n){let r=yc(o,o.parentUuid,n,t,e);r!==o.parentUuid&&n.set(s,{...o,parentUuid:r})}}function yc(n,e,t,s,o){if(!e||t.has(e))return e;let r=s.get(e);return!r||r.length===0?e:r.length===1?r[0]:Sc(n,r,t)??wc(n,r,t,o)??e}function Sc(n,e,t){if(!Lo(n))return;let s=Et(n).filter(r=>A(r)&&r.type==="tool_result").map(r=>r.tool_use_id).filter(r=>typeof r=="string");if(s.length===0)return;let o=e.filter(r=>{let i=t.get(r);return i?Et(i).some(a=>A(a)&&a.type==="tool_use"&&s.includes(typeof a.id=="string"?a.id:"")):!1});return o.length===1?o[0]:void 0}function wc(n,e,t,s){return e.map(r=>t.get(r)).filter(r=>r!==void 0).filter(r=>(s.get(r.uuid)??-1)<(s.get(n.uuid)??-1)).at(-1)?.uuid}function vc(n){for(let e of n.values()){if(e.type!=="system"||e.subtype!=="compact_boundary")continue;let t=e.compactMetadata?.preservedSegment,s=t?.headUuid,o=t?.anchorUuid,r=t?.tailUuid;if(!s||!o||!r)continue;let i=n.get(s);i&&n.set(s,{...i,parentUuid:o});for(let[a,u]of n)a!==s&&u.parentUuid===o&&n.set(a,{...u,parentUuid:r})}}function xo(n,e,t){let s=(n.timestamp??"").localeCompare(e.timestamp??"");return s!==0?s:(t.get(n.uuid)??Number.MAX_SAFE_INTEGER)-(t.get(e.uuid)??Number.MAX_SAFE_INTEGER)}function kc(n,e,t){let s=e.filter(p=>p.type==="assistant");if(s.length===0)return e;let o=new Map,r=0;for(let p of n.keys())o.set(p,r++);let i=new Map;for(let p of s){let l=$e(p);l&&i.set(l,p)}let a=new Map,u=new Map;for(let p of n.values()){let l=$e(p);if(l){let f=a.get(l)??[];f.push(p),a.set(l,f);continue}if(Lo(p)&&p.parentUuid){let f=u.get(p.parentUuid)??[];f.push(p),u.set(p.parentUuid,f)}}let c=new Set,d=new Map;for(let p of s){let l=$e(p);if(!l||c.has(l))continue;c.add(l);let f=a.get(l)??[p],y=f.filter(R=>!t.has(R.uuid)),g=[];for(let R of f){let M=u.get(R.uuid)??[];for(let We of M)t.has(We.uuid)||g.push(We)}if(y.length===0&&g.length===0)continue;let S=i.get(l);if(!S)continue;let k=[...f].sort((R,M)=>xo(R,M,o));g.sort((R,M)=>xo(R,M,o));let h=k.findIndex(R=>R.uuid===S.uuid),P=k.slice(0,Math.max(h,0)).filter(R=>!t.has(R.uuid)),T=k.slice(h+1).filter(R=>!t.has(R.uuid)),ne=[...P,...T,...g];for(let R of ne)t.add(R.uuid);d.set(S.uuid,ne)}if(d.size===0)return e;let m=[];for(let p of e){let l=d.get(p.uuid);if(l){let f=o.get(p.uuid)??Number.MAX_SAFE_INTEGER,y=[],g=[];for(let S of l)(p.type==="assistant"&&S.type==="assistant"&&$e(S)===$e(p)&&(o.get(S.uuid)??Number.MAX_SAFE_INTEGER)<f?y:g).push(S);m.push(...y,p,...g)}else m.push(p)}return m}function Bo(n,e,t="runtime"){if(n.length===0)return[];let s=new Map,o=new Map;for(let[d,m]of n.entries())s.set(m.uuid,m),o.set(m.uuid,d);t==="runtime"&&vc(s),hc(s,o);let r;if(e?.leafUuid===null)return[];if(e){let d=s.get(e.leafUuid),m=d?.sessionId??d?.session_id;d&&(m===void 0||m===e.sessionId)&&(r=d)}if(!r){let d=new Set;for(let y of s.values())y.parentUuid&&d.add(y.parentUuid);let m=Array.from(s.values()).filter(y=>!d.has(y.uuid)),p=[];for(let y of m){let g=y,S=new Set;for(;g&&!S.has(g.uuid);){if(S.add(g.uuid),g.type==="user"||g.type==="assistant"){p.push(g);break}g=g.parentUuid?s.get(g.parentUuid):void 0}}if(p.length===0)return[];let l=p.filter(y=>!y.isSidechain&&!y.teamName&&!y.isMeta);r=(l.length>0?l:p).reduce((y,g)=>(o.get(g.uuid)??-1)>(o.get(y.uuid)??-1)?g:y)}let i=[],a=new Set,u=r;for(;u&&!a.has(u.uuid);){a.add(u.uuid),i.push(u);let d=t==="historical"&&u.type==="system"&&u.subtype==="compact_boundary"?u.logicalParentUuid??u.parentUuid:u.parentUuid;u=d?s.get(d):void 0}i.reverse();let c=t==="runtime"?bc(i):i;return kc(s,c,new Set(c.map(d=>d.uuid)))}function bc(n){let e=-1;for(let t=n.length-1;t>=0;t--){let s=n[t];if(s?.type==="system"&&s.subtype==="compact_boundary"){e=t;break}}return e>=0?n.slice(e):[...n]}function _c(n){return n.isCompactSummary===!0||n.type==="system"&&n.subtype==="compact_boundary"}function En(n,e,t){let s=n.flatMap(r=>A(r)&&typeof r.uuid=="string"&&typeof r.type=="string"&&Uo.has(r.type)?[r]:[]),o;for(let r of n){if(!A(r)||r.type!=="active-leaf"||(r.sessionId??r.session_id)!==e)continue;let a=Object.hasOwn(r,"leafUuid")?r.leafUuid:r.leaf_uuid;a!==null&&typeof a!="string"||(o={leafUuid:a,sessionId:e})}return Bo(s,o,t)}function qo(n,e,t){if(t==="historical"&&_c(n))return!1;let s=n.type==="user"||n.type==="assistant",o=e&&n.type==="system";return!(!s&&!o||n.isMeta||n.isSidechain||n.teamName)}function Rc(n){if(!n)return;let e=n.preservedSegment,t={trigger:n.trigger,pre_tokens:n.preTokens??n.pre_tokens,post_tokens:n.postTokens??n.post_tokens,messages_summarized:n.messagesSummarized??n.messages_summarized,duration_ms:n.durationMs??n.duration_ms};return!e?.headUuid||!e.anchorUuid||!e.tailUuid?t:{...t,preserved_segment:{head_uuid:e.headUuid,anchor_uuid:e.anchorUuid,tail_uuid:e.tailUuid}}}function Pn(n){return n.type==="assistant"&&n.isApiErrorMessage===!0?{isApiErrorMessage:!0}:{}}function Tn(n){return n.type==="user"&&n.toolUseResult!==void 0?{tool_use_result:n.toolUseResult}:{}}function No(n){let e=n.type==="system"?Rc(n.compactMetadata):void 0,t=Cn(n);return{type:n.type,uuid:n.uuid,session_id:n.sessionId??n.session_id??"",message:n.message,parent_tool_use_id:null,parent_agent_id:null,...Pn(n),...Tn(n),...t?{tool_result_meta:t}:{},...typeof n.timestamp=="string"&&n.timestamp.length>0?{timestamp:n.timestamp}:{},...n.type==="system"&&n.subtype?{subtype:n.subtype}:{},...e?{compact_metadata:e}:{}}}function jo(n,e){let t=Math.max(0,e?.offset??0),s=e?.limit;return s!==void 0&&s>0?n.slice(t,t+s):t>0?n.slice(t):n}async function Tt(n){try{return await rc(Oo(n))}catch{return Oo(n)}}async function Cc(n){return x(await Tt(n))}async function ee(n){let e=Ee();if(n?.dir){let t=await Tt(n.dir),s=[I(e,x(t))];if(n.includeWorktrees!==!1)try{let{stdout:o}=await cc("git",["worktree","list","--porcelain"],{cwd:n.dir}),r=o.split(`
24
- `).filter(i=>i.startsWith("worktree ")).map(i=>i.substring(9).trim()).filter(i=>i!==t);for(let i of r)s.push(I(e,await Cc(i)))}catch{}return s}try{return(await Rn(e,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>I(e,s.name))}catch{return[]}}async function $o(n){try{let[e,t]=await Promise.all([Pt(n,"utf-8"),Ie(n)]),s=e.trim().split(`
25
- `).filter(Boolean).flatMap(r=>{try{let i=JSON.parse(r);return A(i)?[i]:[]}catch{return[]}});if(s.length===0)return null;let o=ic(n,".jsonl");return Mn(o,s,t.mtimeMs,{fileSize:t.size})??null}catch{return null}}function zo(n,e){return I(n,e,"subagents")}function Qo(n){if(typeof n!="object"||n===null)return!1;let e=n;return(e.type==="user"||e.type==="assistant")&&typeof e.uuid=="string"}async function Go(n){let e=[];async function t(s){let o;try{o=await Rn(s,{withFileTypes:!0})}catch{return}for(let r of o){let i=I(s,r.name);if(r.isDirectory()){await t(i);continue}if(r.isFile()&&r.name.startsWith("agent-")&&r.name.endsWith(".jsonl")){let a=r.name.slice(6,-6);a&&e.push({agentId:a,filePath:i})}}}return await t(n),e}async function Ec(n){try{let e=await Pt(n.replace(/\.jsonl$/,".meta.json"),"utf-8"),t=JSON.parse(e);return{parentToolUseId:typeof t.toolUseId=="string"&&t.toolUseId.length>0?t.toolUseId:null,parentAgentId:typeof t.parentAgentId=="string"&&t.parentAgentId.length>0?t.parentAgentId:null}}catch{return{parentToolUseId:null,parentAgentId:null}}}function Wo(n){if(n.length===0)return[];let e=new Map(n.map(i=>[i.uuid,i])),t=n[n.length-1],s=[],o=new Set,r=t;for(;r&&!o.has(r.uuid);)o.add(r.uuid),s.push(r),r=r.parentUuid!==void 0&&r.parentUuid!==null?e.get(r.parentUuid):void 0;return s.reverse()}async function Pc(n,e,t){let[s,o]=await Promise.all([Pt(n,"utf-8"),Ec(n)]),r=[];for(let d of s.trim().split(`
26
- `).filter(Boolean))try{let m=JSON.parse(d);Qo(m)&&r.push(m)}catch{}let a=Wo(r).map(d=>{let m=Cn(d);return{type:d.type,uuid:d.uuid,session_id:d.sessionId??e,message:d.message,parent_tool_use_id:o.parentToolUseId,parent_agent_id:o.parentAgentId,...Pn(d),...Tn(d),...m?{tool_result_meta:m}:{}}}),u=t?.offset??0,c=t?.limit;return c!==void 0?a.slice(u,u+c):a.slice(u)}async function Ae(n){return x(await Tt(n??process.cwd()))}function ze(n,e){return{projectKey:n,sessionId:e}}function Tc(n){let e=0;for(let t of n){if(typeof t.timestamp!="string")continue;let s=Date.parse(t.timestamp);Number.isFinite(s)&&(e=Math.max(e,s))}return e}function Mc(n){let e=n.at(-1)?.timestamp;if(typeof e=="string"){let t=Date.parse(e);if(Number.isFinite(t))return t}return Date.now()}var Ic=/[\p{Cf}\p{Co}\p{Cn}\u200b-\u200f\u202a-\u202e\u2066-\u2069\ufeff\ue000-\uf8ff]/gu;function Ac(n){let e=n;for(let t=0;t<10;t+=1){let s=e.normalize("NFKC").replace(Ic,"");if(s===e)return s;e=s}return e}var Dc=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/,Oc=/<command-name>(.*?)<\/command-name>/,xc=/<bash-input>([\s\S]*?)<\/bash-input>/;function qc(n){if(n.length<=200)return n;let e=n.slice(0,200),t=e.charCodeAt(e.length-1);return`${(t>=55296&&t<=56319?e.slice(0,-1):e).trim()}\u2026`}function Nc(n,e){if(n.type!=="user"||n.isMeta===!0||n.isCompactSummary===!0)return;let t=n.message;if(!A(t))return;let s=t.content,o=[];if(typeof s=="string")o.push(s);else if(Array.isArray(s)){for(let r of s)if(A(r)){if(r.type==="tool_result")return;r.type==="text"&&typeof r.text=="string"&&o.push(r.text)}}for(let r of o){let i=r.replaceAll(`
27
- `," ").trim();if(!i)continue;let a=Oc.exec(i);if(a){e.commandFallback??=a[1];continue}let u=xc.exec(i);if(u)return`! ${u[1].trim()}`;if(!Dc.test(i))return qc(i)}}function Mn(n,e,t,s={}){if(e.length===0)return;let o,r,i,a,u,c,d,m,p,l,f;for(let k of e){let h=k;if(f??=h.isSidechain===!0,l===void 0&&typeof h.timestamp=="string"){let P=Date.parse(h.timestamp);Number.isFinite(P)&&(l=P)}if(!o){let P={commandFallback:r};o=Nc(h,P),r=P.commandFallback}h.type==="custom-title"&&typeof h.customTitle=="string"&&(i=h.customTitle),h.type==="ai-title"&&typeof h.aiTitle=="string"&&(a=h.aiTitle),typeof h.lastPrompt=="string"&&(u=h.lastPrompt),typeof h.summary=="string"&&(c=h.summary),h.type==="tag"&&(p=typeof h.tag=="string"&&h.tag?h.tag:void 0),typeof h.gitBranch=="string"&&(d=h.gitBranch),m===void 0&&typeof h.cwd=="string"&&(m=h.cwd),h.type==="relocated"&&typeof h.relocatedCwd=="string"&&(m=h.relocatedCwd)}if(f)return;let y=o??r,g=i||a,S=g||u||c||y;if(S)return{sessionId:n,summary:S,lastModified:t??Tc(e),fileSize:s.fileSize,customTitle:g,firstPrompt:y,gitBranch:d,cwd:m||s.defaultCwd,tag:p,createdAt:l}}async function Ho(n,e,t){let s=ze(await Ae(t),e),o=await n.load(s);return o?{key:s,entries:o}:void 0}async function jc(n){if(n?.sessionStore){let c=n.sessionStore;if(!c.listSessions)throw new Error("sessionStore.listSessions() is required by listSessions()");let d=await Tt(n.dir??process.cwd()),m=x(d),p=(await c.listSessions(m)).slice().sort((g,S)=>S.mtime-g.mtime),l=Math.max(0,n.offset??0),f=n.limit!==void 0&&n.limit>0?p.slice(l,l+n.limit):l>0?p.slice(l):p;return(await Promise.allSettled(f.map(async({sessionId:g,mtime:S})=>{let k=await c.load(ze(m,g));return k?Mn(g,k,S,{defaultCwd:d}):void 0}))).flatMap((g,S)=>{if(g.status==="fulfilled")return g.value?[g.value]:[];let k=f[S];return[{sessionId:k.sessionId,summary:"",lastModified:k.mtime}]})}let e=await ee(n),s=(await Promise.all(e.map(async c=>{try{return(await Rn(c)).filter(m=>m.endsWith(".jsonl")).map(m=>I(c,m))}catch{return[]}}))).flat(),o=await Promise.all(s.map($o)),r=new Map;for(let c of o){if(!c)continue;let d=r.get(c.sessionId);(!d||c.lastModified>d.lastModified)&&r.set(c.sessionId,c)}let i=Array.from(r.values()).sort((c,d)=>d.lastModified-c.lastModified),a=n?.offset??0,u=n?.limit;return u!==void 0?i.slice(a,a+u):i.slice(a)}async function Fc(n,e){if(e?.sessionStore){if(!fe(n))return;let s=await Ho(e.sessionStore,n,e.dir);return s?Mn(n,s.entries,Mc(s.entries)):void 0}let t=await ee(e);for(let s of t){let o=I(s,`${n}.jsonl`),r=await $o(o);if(r)return r}}async function Kc(n,e){if(!fe(n))return[];let t=e?.includeSystemMessages===!0,s=e?.view??"runtime";if(e?.sessionStore){let r=await Ho(e.sessionStore,n,e.dir);if(!r)return[];let i=En(r.entries,n,s);return jo(i.filter(a=>qo(a,t,s)).map(No),e)}let o=await ee(e);for(let r of o){let i=I(r,`${n}.jsonl`);try{let a=await Pt(i,"utf-8"),c=Bo(dc(a),pc(a,n),s).filter(d=>qo(d,t,s)).map(No);return jo(c,e)}catch{continue}}return[]}async function Uc(n,e,t){if(!fe(n))throw new Error(`Invalid sessionId: ${n}`);let s=e.trim();if(!s)throw new Error("title must be non-empty");if(t?.sessionStore){await t.sessionStore.append(ze(await Ae(t.dir),n),[{type:"custom-title",sessionId:n,customTitle:s,uuid:Ko(),timestamp:new Date().toISOString()}]);return}let o=await ee(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Ie(i);let a=JSON.stringify({type:"custom-title",sessionId:n,customTitle:s,timestamp:new Date().toISOString()});await Fo(i,a+`
28
- `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function Lc(n,e,t){if(!fe(n))throw new Error(`Invalid sessionId: ${n}`);let s=e===null?null:Ac(e).trim();if(s!==null&&!s)throw new Error("tag must be non-empty (use null to clear)");if(t?.sessionStore){await t.sessionStore.append(ze(await Ae(t.dir),n),[{type:"tag",sessionId:n,tag:s??"",uuid:Ko(),timestamp:new Date().toISOString()}]);return}let o=await ee(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Ie(i);let a=JSON.stringify({type:"tag",sessionId:n,tag:s??"",timestamp:new Date().toISOString()});await Fo(i,a+`
29
- `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function Bc(n,e){if(e?.sessionStore){if(!fe(n))return[];if(!e.sessionStore.listSubkeys)throw new Error("sessionStore.listSubkeys() is required by listSubagents()");let s=await e.sessionStore.listSubkeys({projectKey:await Ae(e.dir),sessionId:n});return Array.from(new Set(s.map(o=>{if(!o.startsWith("subagents/"))return;let r=o.split("/").at(-1);return r?.startsWith("agent-")?r.slice(6):void 0}).filter(o=>o!==void 0)))}let t=await ee(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Ie(o);let r=await Go(zo(s,n));return Array.from(new Set(r.map(i=>i.agentId)))}catch{continue}}return[]}async function $c(n,e,t){if(t?.sessionStore){if(!fe(n)||!e)return[];let o=await Ae(t.dir),r=`subagents/agent-${e}`;if(t.sessionStore.listSubkeys){let l=await t.sessionStore.listSubkeys({projectKey:o,sessionId:n}),f=`agent-${e}`,y=l.find(g=>g.startsWith("subagents/")&&g.split("/").at(-1)===f);if(!y)return[];r=y}let i=await t.sessionStore.load({projectKey:o,sessionId:n,subpath:r});if(!i)return[];let a=i.filter(Qo),u=i.filter(l=>l.type==="agent_metadata").at(-1),c=typeof u?.toolUseId=="string"?u.toolUseId:null,d=typeof u?.parentAgentId=="string"?u.parentAgentId:null,m=Wo(a).map(l=>{let f=Cn(l);return{type:l.type,uuid:l.uuid,session_id:l.sessionId??n,message:l.message,parent_tool_use_id:c,parent_agent_id:d,...Pn(l),...Tn(l),...f?{tool_result_meta:f}:{}}}),p=Math.max(0,t.offset??0);return t.limit!==void 0?m.slice(p,p+t.limit):m.slice(p)}let s=await ee(t);for(let o of s){let r=I(o,`${n}.jsonl`);try{await Ie(r);let a=(await Go(zo(o,n))).find(u=>u.agentId===e);return a?await Pc(a.filePath,n,t):[]}catch{continue}}return[]}async function zc(n,e){if(!fe(n))throw new Error(`Invalid sessionId: ${n}`);if(e?.sessionStore){if(!e.sessionStore.delete)throw new Error("SessionStore does not support delete()");await e.sessionStore.delete(ze(await Ae(e.dir),n));return}let t=await ee(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Ie(o),await Promise.all([Do(o,{force:!0}),Do(I(s,n),{recursive:!0,force:!0})]);return}catch{continue}}throw new Error(`Session ${n} not found`)}import{randomUUID as Mt}from"crypto";import{readdir as Qc,readFile as Gc,realpath as Wc,stat as Jo,writeFile as Hc}from"fs/promises";import{dirname as Jc,join as In,resolve as Vc}from"path";var Vo=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Yc=new Set(["user","assistant","attachment","system","progress"]);async function Xo(n){let e=Vc(n);try{return await Wc(e)}catch{return e}}async function Xc(n,e){let t=Ee();if(e){let o=x(await Xo(e)),r=In(t,o,`${n}.jsonl`);try{if((await Jo(r)).size>0)return r}catch{}return}let s;try{s=await Qc(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=In(t,o.name,`${n}.jsonl`);try{if((await Jo(r)).size>0)return r}catch{}}}function Zo(n,e){let t=[],s;for(let r of n){if(r===null||typeof r!="object")continue;let i=r;if(i.type==="content-replacement"&&i.sessionId===e&&Array.isArray(i.replacements)){t.push(...i.replacements);continue}i.type==="relocated"&&i.sessionId===e&&typeof i.relocatedCwd=="string"&&(s=i.relocatedCwd)}return{transcript:En(n,e,"historical").filter(r=>Yc.has(r.type)),contentReplacements:t,relocatedCwd:s}}function Zc(n,e){let t=[];for(let s of n.split(`
30
- `))if(s.trim())try{t.push(JSON.parse(s))}catch{}return Zo(t,e)}function el(n){for(let e of n){if(e===null||typeof e!="object")continue;let t=e;if(t.type!=="user"||t.isMeta===!0||t.isCompactSummary===!0)continue;let s=t.message;if(s===null||typeof s!="object")continue;let o=s.content;if(typeof o=="string"&&o.trim())return o.trim();if(!Array.isArray(o)||o.some(i=>i!==null&&typeof i=="object"&&i.type==="tool_result"))continue;let r=o.filter(i=>i!==null&&typeof i=="object"&&i.type==="text"&&typeof i.text=="string").map(i=>i.text).join(`
31
- `).trim();if(r)return r}}function tl(n){let e,t;for(let s of n){if(s===null||typeof s!="object")continue;let o=s;typeof o.customTitle=="string"&&o.customTitle&&(e=o.customTitle),typeof o.aiTitle=="string"&&o.aiTitle&&(t=o.aiTitle)}return e??t??el(n)}function Yo(n,e,t,s){let o=n.transcript.filter(l=>l.isSidechain!==!0);if(o.length===0)throw new Error(`Session ${e} has no messages to fork`);if(t.upToMessageId){let l=o.findIndex(f=>f.uuid===t.upToMessageId);if(l<0)throw new Error(`Message ${t.upToMessageId} not found in session ${e}`);o=o.slice(0,l+1)}let r=new Set(o.map(l=>l.uuid)),i=new Map(o.map(l=>[l.uuid,Mt()])),a=o.filter(l=>l.type!=="progress");if(a.length===0)throw new Error(`Session ${e} has no messages to fork`);let u=new Map(o.map(l=>[l.uuid,l])),c=Mt(),d=new Date().toISOString(),m=a.map((l,f)=>{let y=null,g=typeof l.parentUuid=="string"?l.parentUuid:void 0;for(;g;){let h=u.get(g);if(!h)break;if(h.type!=="progress"){y=i.get(g)??null;break}g=typeof h.parentUuid=="string"?h.parentUuid:void 0}let S=typeof l.logicalParentUuid=="string"?i.get(l.logicalParentUuid)??null:l.logicalParentUuid??null,k={...l,...l.type==="system"&&l.subtype==="model_refusal_fallback"?{neutralizedByFork:!0}:{},uuid:i.get(l.uuid),parentUuid:y,logicalParentUuid:S,sessionId:c,timestamp:f===a.length-1?d:typeof l.timestamp=="string"?l.timestamp:d,isSidechain:!1,forkedFrom:{sessionId:e,messageUuid:l.uuid}};return delete k.teamName,delete k.agentName,delete k.sessionKind,delete k.slug,delete k.sourceToolAssistantUUID,k});if(n.contentReplacements.length>0){let l=n.contentReplacements.flatMap(f=>{if(f===null||typeof f!="object")return[];let y=f.messageUuid;if(typeof y!="string"||!r.has(y))return[];let g=i.get(y);return g?[{...f,messageUuid:g}]:[]});l.length>0&&m.push({type:"content-replacement",sessionId:c,replacements:l,uuid:Mt(),timestamp:d})}n.relocatedCwd&&m.push({type:"relocated",sessionId:c,relocatedCwd:n.relocatedCwd});let p=t.title?.trim();return m.push({type:"custom-title",sessionId:c,customTitle:p||`${tl(s)??"Forked session"} (fork)`,uuid:Mt(),timestamp:d}),{sessionId:c,entries:m}}async function nl(n,e={}){if(!Vo.test(n))throw new Error(`Invalid sessionId: ${n}`);if(e.upToMessageId&&!Vo.test(e.upToMessageId))throw new Error(`Invalid upToMessageId: ${e.upToMessageId}`);if(e.sessionStore){let i=await Xo(e.dir??process.cwd()),a=x(i),u=await e.sessionStore.load({projectKey:a,sessionId:n});if(!u?.length)throw new Error(`Session ${n} not found`);let c=Yo(Zo(u,n),n,e,u);return await e.sessionStore.append({projectKey:a,sessionId:c.sessionId},c.entries),{sessionId:c.sessionId}}let t=await Xc(n,e.dir);if(!t)throw new Error(`Session ${n} not found`);let s=await Gc(t,"utf8"),o=s.split(`
32
- `).filter(i=>i.trim()).flatMap(i=>{try{return[JSON.parse(i)]}catch{return[]}}),r=Yo(Zc(s,n),n,e,o);return await Hc(In(Jc(t),`${r.sessionId}.jsonl`),`${r.entries.map(i=>JSON.stringify(i)).join(`
23
+ `||u==="\r"?u:" ";continue}if(s){t+=u,o?o=!1:u==="\\"?o=!0:u==='"'&&(s=!1);continue}u==='"'?(s=!0,t+=u):u==="/"&&c==="/"?(r=!0,t+=" ",a+=1):u==="/"&&c==="*"?(i=!0,t+=" ",a+=1):t+=u}return t}function lc(n,e){let t;try{t=JSON.parse(cc(n))}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`Unable to parse settings from ${e}: ${o}`)}if(!me(t))throw new TypeError(`Settings from ${e} must be a JSON object`);return Et(t)}function Ie(n){return Array.isArray(n)?n.map(Ie):me(n)?Et(n):n}function Et(n){let e={};for(let[t,s]of Object.entries(n))Cn.has(t)||s===void 0||(e[t]=Ie(s));return e}function dc(n){let e=n.join(".");if(ac.has(e)||n.length===2&&n[0]==="providers")return"shallow";if(uc.has(e))return"union";if(n.length===2&&n[0]==="hooks")return"concat"}function Rn(n,e,t=[]){for(let[s,o]of Object.entries(e)){if(Cn.has(s)||o===void 0)continue;let r=[...t,s],i=n[s],a=dc(r);if(a==="shallow"&&i&&o){let u={};me(i)&&Object.assign(u,Et(i)),me(o)&&Object.assign(u,Et(o)),n[s]=u;continue}if(Array.isArray(i)){let u=Array.isArray(o)?o:[o];if(a==="concat"){n[s]=[...i.map(Ie),...u.map(Ie)];continue}if(a==="union"){n[s]=[...new Set([...i,...u])].map(Ie);continue}}if(me(i)&&me(o))Rn(i,o,r);else if(me(o)){let u={};Rn(u,o,r),n[s]=u}else n[s]=Ie(o)}}function pc(n){let e=n?.[v.configDirNameEnv];if(e===void 0||e==="")return{user:v.configDirName,project:v.projectConfigDirName};let t=e.normalize("NFC");if(Array.from(t).length<1||Array.from(t).length>64||t.startsWith(" ")||t.endsWith(" ")||t.endsWith(".")||t==="."||t===".."||!oc.test(t)||rc.test(t))throw new Error(`${v.configDirNameEnv} must be a valid directory name`);if(ic.has(t.toLowerCase()))throw new Error(`${v.configDirNameEnv} must not use a protected directory name`);return{user:t,project:t}}async function _n(n,e){let t;try{t=await tc(e,"utf8")}catch(s){if(s.code==="ENOENT")return;throw s}return{source:n,path:B.resolve(e),settings:lc(t,B.resolve(e))}}async function mc(n={}){let e=B.resolve(n.cwd??process.cwd()),t=process.env,s=pc(t),o=t[v.cliHomeEnv]??t.GEMINI_CLI_HOME,r=o?B.resolve(e,o):nc.homedir(),i=t[v.configDirEnv]?B.resolve(e,t[v.configDirEnv]):B.join(r,s.user),a=B.join(e,s.project),u=new Set(n.settingSources??sc),c=B.resolve(r)===e,l=[];if(u.has("user")){let d=await _n("user",B.join(i,"settings.json"));d&&l.push(d)}if(u.has("project")&&!c){let d=await _n("project",B.join(a,"settings.json"));d&&l.push(d)}if(u.has("local")&&!c){let d=await _n("local",B.join(a,"settings.local.json"));d&&l.push(d)}let m={},p={};for(let d of l){Rn(m,d.settings);for(let f of Object.keys(d.settings))Cn.has(f)||(p[f]={source:d.source,...d.path?{path:d.path}:{}})}return{effective:m,provenance:p,sources:l}}var fc=30*6e4,Pt=class extends Error{constructor(){super("Global daemon is already initialized with a different workerIdleTimeoutMs"),this.name="DaemonConfigurationConflictError"}},fe,W,ge,Qe,he;function Uo(n){let e;try{e=hc(n)}catch(s){return Promise.reject(s)}if(he)return he.then(()=>Uo(n));if(fe){if(fe.state==="ready")return Ko(e)?Promise.resolve({mode:"daemon",daemon:fe}):Promise.reject(new Pt);fe=void 0,W=void 0,Qe=void 0}if(ge)return Ko(e)?ge:Promise.reject(new Pt);if(Qe)return Promise.resolve(Qe);W=e;let t;return t=Sn(e).then(s=>(fe=s,{mode:"daemon",daemon:s})).catch(s=>{let o=yc(s);return Qe=o,W=void 0,o}).finally(()=>{ge===t&&(ge=void 0)}),ge=t,t}function gc(){if(he)return he;let n=ge,e=fe,t;return t=(async()=>{let s=e?{mode:"daemon",daemon:e}:n?await n:void 0;s?.mode==="daemon"&&await s.daemon.stop()})().finally(()=>{he===t&&(fe=void 0,W=void 0,ge=void 0,Qe=void 0,he=void 0)}),he=t,t}function hc(n){let e=n.workerIdleTimeoutMs??fc;if(!Number.isSafeInteger(e)||e<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer");return{...n,workerIdleTimeoutMs:e}}function Ko(n){return W?.auth===n.auth&&W.workerIdleTimeoutMs===n.workerIdleTimeoutMs&&W.cwd===n.cwd&&W.pathToQoderCLIExecutable===n.pathToQoderCLIExecutable&&W.proxy===n.proxy&&W.env===n.env}function yc(n){return n instanceof K?{mode:"direct",reason:"protocol_version_mismatch"}:{mode:"direct",reason:"daemon_unavailable"}}import{McpServer as Sc}from"@modelcontextprotocol/sdk/server/mcp.js";function wc(n){if(!n.name||typeof n.name!="string"||n.name.trim()==="")throw new Error("[createSdkMcpServer] Server name must be a non-empty string.");let e=new Sc({name:n.name,version:n.version??"1.0.0"},{capabilities:{tools:n.tools&&n.tools.length>0?{}:void 0}}),t=[];if(n.tools&&n.tools.length>0)for(let s of n.tools){if(!s.name||typeof s.name!="string"||s.name.trim()==="")throw new Error(`[createSdkMcpServer] Tool name must be a non-empty string in server "${n.name}".`);if(!s.description||typeof s.description!="string")throw new Error(`[createSdkMcpServer] Tool "${s.name}" must have a non-empty description string.`);xt(n.name,{name:s.name,exposedName:s.exposedName,alwaysLoad:s.alwaysLoad}),(s.exposedName!==void 0||s.alwaysLoad!==void 0||s.permissionPolicy!==void 0)&&t.push({name:s.name,...s.exposedName!==void 0?{exposedName:s.exposedName}:{},...s.alwaysLoad!==void 0?{alwaysLoad:s.alwaysLoad}:{},...s.permissionPolicy!==void 0?{permission_policy:s.permissionPolicy}:{}});try{e.registerTool(s.name,{description:s.description,inputSchema:s.inputSchema,...s.annotations?{annotations:s.annotations}:{}},s.handler)}catch(o){throw o instanceof Error&&o.message.includes("already registered")?new Error(`[createSdkMcpServer] Duplicate tool name "${s.name}" in server "${n.name}". Each tool name must be unique within a server.`):o}}return{type:"sdk",name:n.name,instance:e,...t.length>0?{tools:t}:{}}}function vc(n,e,t,s,o){return{name:n,description:e,inputSchema:t,handler:s,annotations:o?.annotations,...o?.exposedName!==void 0?{exposedName:o.exposedName}:{},...o?.alwaysLoad!==void 0?{alwaysLoad:o.alwaysLoad}:{},...o?.permissionPolicy!==void 0?{permissionPolicy:o.permissionPolicy}:{}}}import{readdir as En,readFile as Mt,stat as De,appendFile as Wo,realpath as kc,rm as Bo}from"fs/promises";import{basename as bc,join as A,resolve as $o}from"path";import{execFile as _c}from"child_process";import{randomUUID as Jo}from"crypto";import{promisify as Rc}from"util";async function Lo(n,e){let t=0,s=524288;for(;t<n.length;){t>=s&&(await new Promise(u=>setImmediate(u)),s=t+524288);let o=n.indexOf(10,t),r=o===-1?n.length:o,i=n.toString("utf8",t,r).trim();if(t=r+1,!i)continue;let a;try{a=JSON.parse(i)}catch{continue}e(a)}}var Cc=Rc(_c),Ec=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Vo=new Set(["user","assistant","system","progress","attachment"]);function I(n){return n!==null&&typeof n=="object"}function ye(n){return Ec.test(n)}function Yo(n,e){if(!I(n)||n.type!=="active-leaf"||(n.sessionId??n.session_id)!==e)return;let s=Object.hasOwn(n,"leafUuid")?n.leafUuid:n.leaf_uuid;if(!(s!==null&&typeof s!="string"))return{leafUuid:s,sessionId:e}}async function Pc(n,e){let t=[],s;return await Lo(n,o=>{s=Yo(o,e)??s,I(o)&&typeof o.uuid=="string"&&typeof o.type=="string"&&Vo.has(o.type)&&t.push(o)}),{entries:t,activeLeaf:s}}function Tt(n){if(!I(n.message))return[];let e=n.message.content;return Array.isArray(e)?e:[]}var Tc=new Set(["user-rejected","permission-rule","automode-blocked","automode-unavailable","automode-parsing-error","interrupted","cancelled"]);function Mc(n){return typeof n=="string"&&Tc.has(n)?n:void 0}function Pn(n){if(n.type!=="user")return;let e=Tt(n).filter(r=>I(r)&&r.type==="tool_result"&&typeof r.tool_use_id=="string");if(e.length===0)return;let t=Array.isArray(n.toolDenialKind)?n.toolDenialKind:e.length===1?[n.toolDenialKind]:[],s=Array.isArray(n.userFeedback)?n.userFeedback:e.length===1?[n.userFeedback]:[],o=e.flatMap((r,i)=>{let a=Mc(t[i]);if(!a)return[];let u=s[i];return[{id:r.tool_use_id,non_execution_kind:a,...typeof u=="string"?{user_feedback:u}:{}}]});return o.length>0?o:void 0}function Ge(n){if(n.type!=="assistant"||!I(n.message))return;let e=n.message.id;return typeof e=="string"&&e?e:void 0}function Xo(n){return n.type!=="user"||!n.parentUuid?!1:Tt(n).some(e=>I(e)&&e.type==="tool_result")}function Ac(n){if(!I(n.message))return null;let e=n.message.id;return typeof e=="string"&&e.length>0?e:null}function Ic(n,e){let t=new Map;for(let[s,o]of n){let r=Ac(o);if(r){let i=t.get(r);i?i.push(s):t.set(r,[s])}}for(let[s,o]of n){let r=Dc(o,o.parentUuid,n,t,e);r!==o.parentUuid&&n.set(s,{...o,parentUuid:r})}}function Dc(n,e,t,s,o){if(!e||t.has(e))return e;let r=s.get(e);return!r||r.length===0?e:r.length===1?r[0]:Oc(n,r,t)??xc(n,r,t,o)??e}function Oc(n,e,t){if(!Xo(n))return;let s=Tt(n).filter(r=>I(r)&&r.type==="tool_result").map(r=>r.tool_use_id).filter(r=>typeof r=="string");if(s.length===0)return;let o=e.filter(r=>{let i=t.get(r);return i?Tt(i).some(a=>I(a)&&a.type==="tool_use"&&s.includes(typeof a.id=="string"?a.id:"")):!1});return o.length===1?o[0]:void 0}function xc(n,e,t,s){return e.map(r=>t.get(r)).filter(r=>r!==void 0).filter(r=>(s.get(r.uuid)??-1)<(s.get(n.uuid)??-1)).at(-1)?.uuid}function qc(n){for(let e of n.values()){if(e.type!=="system"||e.subtype!=="compact_boundary")continue;let t=e.compactMetadata?.preservedSegment,s=t?.headUuid,o=t?.anchorUuid,r=t?.tailUuid;if(!s||!o||!r)continue;let i=n.get(s);i&&n.set(s,{...i,parentUuid:o});for(let[a,u]of n)a!==s&&u.parentUuid===o&&n.set(a,{...u,parentUuid:r})}}function zo(n,e,t){let s=(n.timestamp??"").localeCompare(e.timestamp??"");return s!==0?s:(t.get(n.uuid)??Number.MAX_SAFE_INTEGER)-(t.get(e.uuid)??Number.MAX_SAFE_INTEGER)}function Nc(n,e,t){let s=e.filter(p=>p.type==="assistant");if(s.length===0)return e;let o=new Map,r=0;for(let p of n.keys())o.set(p,r++);let i=new Map;for(let p of s){let d=Ge(p);d&&i.set(d,p)}let a=new Map,u=new Map;for(let p of n.values()){let d=Ge(p);if(d){let f=a.get(d)??[];f.push(p),a.set(d,f);continue}if(Xo(p)&&p.parentUuid){let f=u.get(p.parentUuid)??[];f.push(p),u.set(p.parentUuid,f)}}let c=new Set,l=new Map;for(let p of s){let d=Ge(p);if(!d||c.has(d))continue;c.add(d);let f=a.get(d)??[p],y=f.filter(R=>!t.has(R.uuid)),g=[];for(let R of f){let J=u.get(R.uuid)??[];for(let qe of J)t.has(qe.uuid)||g.push(qe)}if(y.length===0&&g.length===0)continue;let S=i.get(d);if(!S)continue;let k=[...f].sort((R,J)=>zo(R,J,o));g.sort((R,J)=>zo(R,J,o));let h=k.findIndex(R=>R.uuid===S.uuid),P=k.slice(0,Math.max(h,0)).filter(R=>!t.has(R.uuid)),T=k.slice(h+1).filter(R=>!t.has(R.uuid)),ie=[...P,...T,...g];for(let R of ie)t.add(R.uuid);l.set(S.uuid,ie)}if(l.size===0)return e;let m=[];for(let p of e){let d=l.get(p.uuid);if(d){let f=o.get(p.uuid)??Number.MAX_SAFE_INTEGER,y=[],g=[];for(let S of d)(p.type==="assistant"&&S.type==="assistant"&&Ge(S)===Ge(p)&&(o.get(S.uuid)??Number.MAX_SAFE_INTEGER)<f?y:g).push(S);m.push(...y,p,...g)}else m.push(p)}return m}function Zo(n,e,t="runtime"){if(n.length===0)return[];let s=new Map,o=new Map;for(let[l,m]of n.entries())s.set(m.uuid,m),o.set(m.uuid,l);t==="runtime"&&qc(s),Ic(s,o);let r;if(e?.leafUuid===null)return[];if(e){let l=s.get(e.leafUuid),m=l?.sessionId??l?.session_id;l&&(m===void 0||m===e.sessionId)&&(r=l)}if(!r){let l=new Set;for(let y of s.values())y.parentUuid&&l.add(y.parentUuid);let m=Array.from(s.values()).filter(y=>!l.has(y.uuid)),p=[];for(let y of m){let g=y,S=new Set;for(;g&&!S.has(g.uuid);){if(S.add(g.uuid),g.type==="user"||g.type==="assistant"){p.push(g);break}g=g.parentUuid?s.get(g.parentUuid):void 0}}if(p.length===0)return[];let d=p.filter(y=>!y.isSidechain&&!y.teamName&&!y.isMeta);r=(d.length>0?d:p).reduce((y,g)=>(o.get(g.uuid)??-1)>(o.get(y.uuid)??-1)?g:y)}let i=[],a=new Set,u=r;for(;u&&!a.has(u.uuid);){a.add(u.uuid),i.push(u);let l=t==="historical"&&u.type==="system"&&u.subtype==="compact_boundary"?u.logicalParentUuid??u.parentUuid:u.parentUuid;u=l?s.get(l):void 0}i.reverse();let c=t==="runtime"?jc(i):i;return Nc(s,c,new Set(c.map(l=>l.uuid)))}function jc(n){let e=-1;for(let t=n.length-1;t>=0;t--){let s=n[t];if(s?.type==="system"&&s.subtype==="compact_boundary"){e=t;break}}return e>=0?n.slice(e):[...n]}function Fc(n){return n.isCompactSummary===!0||n.type==="system"&&n.subtype==="compact_boundary"}function Tn(n,e,t){let s=n.flatMap(r=>I(r)&&typeof r.uuid=="string"&&typeof r.type=="string"&&Vo.has(r.type)?[r]:[]),o;for(let r of n)o=Yo(r,e)??o;return Zo(s,o,t)}function Qo(n,e,t){if(t==="historical"&&Fc(n))return!1;let s=n.type==="user"||n.type==="assistant",o=e&&n.type==="system";return!(!s&&!o||n.isMeta||n.isSidechain||n.teamName)}function Kc(n){if(!n)return;let e=n.preservedSegment,t={trigger:n.trigger,pre_tokens:n.preTokens??n.pre_tokens,post_tokens:n.postTokens??n.post_tokens,messages_summarized:n.messagesSummarized??n.messages_summarized,duration_ms:n.durationMs??n.duration_ms};return!e?.headUuid||!e.anchorUuid||!e.tailUuid?t:{...t,preserved_segment:{head_uuid:e.headUuid,anchor_uuid:e.anchorUuid,tail_uuid:e.tailUuid}}}function Mn(n){return n.type==="assistant"&&n.isApiErrorMessage===!0?{isApiErrorMessage:!0}:{}}function An(n){return n.type==="user"&&n.toolUseResult!==void 0?{tool_use_result:n.toolUseResult}:{}}function Go(n){let e=n.type==="system"?Kc(n.compactMetadata):void 0,t=Pn(n);return{type:n.type,uuid:n.uuid,session_id:n.sessionId??n.session_id??"",message:n.message,parent_tool_use_id:null,parent_agent_id:null,...Mn(n),...An(n),...t?{tool_result_meta:t}:{},...typeof n.timestamp=="string"&&n.timestamp.length>0?{timestamp:n.timestamp}:{},...n.type==="system"&&n.subtype?{subtype:n.subtype}:{},...e?{compact_metadata:e}:{}}}function Ho(n,e){let t=Math.max(0,e?.offset??0),s=e?.limit;return s!==void 0&&s>0?n.slice(t,t+s):t>0?n.slice(t):n}async function At(n){try{return await kc($o(n))}catch{return $o(n)}}async function Uc(n){return x(await At(n))}async function oe(n){let e=Te();if(n?.dir){let t=await At(n.dir),s=[A(e,x(t))];if(n.includeWorktrees!==!1)try{let{stdout:o}=await Cc("git",["worktree","list","--porcelain"],{cwd:n.dir}),r=o.split(`
24
+ `).filter(i=>i.startsWith("worktree ")).map(i=>i.substring(9).trim()).filter(i=>i!==t);for(let i of r)s.push(A(e,await Uc(i)))}catch{}return s}try{return(await En(e,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>A(e,s.name))}catch{return[]}}async function er(n){try{let[e,t]=await Promise.all([Mt(n,"utf-8"),De(n)]),s=e.trim().split(`
25
+ `).filter(Boolean).flatMap(r=>{try{let i=JSON.parse(r);return I(i)?[i]:[]}catch{return[]}});if(s.length===0)return null;let o=bc(n,".jsonl");return In(o,s,t.mtimeMs,{fileSize:t.size})??null}catch{return null}}function tr(n,e){return A(n,e,"subagents")}function nr(n){if(typeof n!="object"||n===null)return!1;let e=n;return(e.type==="user"||e.type==="assistant")&&typeof e.uuid=="string"}async function sr(n){let e=[];async function t(s){let o;try{o=await En(s,{withFileTypes:!0})}catch{return}for(let r of o){let i=A(s,r.name);if(r.isDirectory()){await t(i);continue}if(r.isFile()&&r.name.startsWith("agent-")&&r.name.endsWith(".jsonl")){let a=r.name.slice(6,-6);a&&e.push({agentId:a,filePath:i})}}}return await t(n),e}async function Lc(n){try{let e=await Mt(n.replace(/\.jsonl$/,".meta.json"),"utf-8"),t=JSON.parse(e);return{parentToolUseId:typeof t.toolUseId=="string"&&t.toolUseId.length>0?t.toolUseId:null,parentAgentId:typeof t.parentAgentId=="string"&&t.parentAgentId.length>0?t.parentAgentId:null}}catch{return{parentToolUseId:null,parentAgentId:null}}}function or(n){if(n.length===0)return[];let e=new Map(n.map(i=>[i.uuid,i])),t=n[n.length-1],s=[],o=new Set,r=t;for(;r&&!o.has(r.uuid);)o.add(r.uuid),s.push(r),r=r.parentUuid!==void 0&&r.parentUuid!==null?e.get(r.parentUuid):void 0;return s.reverse()}async function Bc(n,e,t){let[s,o]=await Promise.all([Mt(n,"utf-8"),Lc(n)]),r=[];for(let l of s.trim().split(`
26
+ `).filter(Boolean))try{let m=JSON.parse(l);nr(m)&&r.push(m)}catch{}let a=or(r).map(l=>{let m=Pn(l);return{type:l.type,uuid:l.uuid,session_id:l.sessionId??e,message:l.message,parent_tool_use_id:o.parentToolUseId,parent_agent_id:o.parentAgentId,...Mn(l),...An(l),...m?{tool_result_meta:m}:{}}}),u=t?.offset??0,c=t?.limit;return c!==void 0?a.slice(u,u+c):a.slice(u)}async function Oe(n){return x(await At(n??process.cwd()))}function He(n,e){return{projectKey:n,sessionId:e}}function $c(n){let e=0;for(let t of n){if(typeof t.timestamp!="string")continue;let s=Date.parse(t.timestamp);Number.isFinite(s)&&(e=Math.max(e,s))}return e}function zc(n){let e=n.at(-1)?.timestamp;if(typeof e=="string"){let t=Date.parse(e);if(Number.isFinite(t))return t}return Date.now()}var Qc=/[\p{Cf}\p{Co}\p{Cn}\u200b-\u200f\u202a-\u202e\u2066-\u2069\ufeff\ue000-\uf8ff]/gu;function Gc(n){let e=n;for(let t=0;t<10;t+=1){let s=e.normalize("NFKC").replace(Qc,"");if(s===e)return s;e=s}return e}var Hc=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/,Wc=/<command-name>(.*?)<\/command-name>/,Jc=/<bash-input>([\s\S]*?)<\/bash-input>/;function Vc(n){if(n.length<=200)return n;let e=n.slice(0,200),t=e.charCodeAt(e.length-1);return`${(t>=55296&&t<=56319?e.slice(0,-1):e).trim()}\u2026`}function Yc(n,e){if(n.type!=="user"||n.isMeta===!0||n.isCompactSummary===!0)return;let t=n.message;if(!I(t))return;let s=t.content,o=[];if(typeof s=="string")o.push(s);else if(Array.isArray(s)){for(let r of s)if(I(r)){if(r.type==="tool_result")return;r.type==="text"&&typeof r.text=="string"&&o.push(r.text)}}for(let r of o){let i=r.replaceAll(`
27
+ `," ").trim();if(!i)continue;let a=Wc.exec(i);if(a){e.commandFallback??=a[1];continue}let u=Jc.exec(i);if(u)return`! ${u[1].trim()}`;if(!Hc.test(i))return Vc(i)}}function In(n,e,t,s={}){if(e.length===0)return;let o,r,i,a,u,c,l,m,p,d,f;for(let k of e){let h=k;if(f??=h.isSidechain===!0,d===void 0&&typeof h.timestamp=="string"){let P=Date.parse(h.timestamp);Number.isFinite(P)&&(d=P)}if(!o){let P={commandFallback:r};o=Yc(h,P),r=P.commandFallback}h.type==="custom-title"&&typeof h.customTitle=="string"&&(i=h.customTitle),h.type==="ai-title"&&typeof h.aiTitle=="string"&&(a=h.aiTitle),typeof h.lastPrompt=="string"&&(u=h.lastPrompt),typeof h.summary=="string"&&(c=h.summary),h.type==="tag"&&(p=typeof h.tag=="string"&&h.tag?h.tag:void 0),typeof h.gitBranch=="string"&&(l=h.gitBranch),m===void 0&&typeof h.cwd=="string"&&(m=h.cwd),h.type==="relocated"&&typeof h.relocatedCwd=="string"&&(m=h.relocatedCwd)}if(f)return;let y=o??r,g=i||a,S=g||u||c||y;if(S)return{sessionId:n,summary:S,lastModified:t??$c(e),fileSize:s.fileSize,customTitle:g,firstPrompt:y,gitBranch:l,cwd:m||s.defaultCwd,tag:p,createdAt:d}}async function rr(n,e,t){let s=He(await Oe(t),e),o=await n.load(s);return o?{key:s,entries:o}:void 0}async function Xc(n){if(n?.sessionStore){let c=n.sessionStore;if(!c.listSessions)throw new Error("sessionStore.listSessions() is required by listSessions()");let l=await At(n.dir??process.cwd()),m=x(l),p=(await c.listSessions(m)).slice().sort((g,S)=>S.mtime-g.mtime),d=Math.max(0,n.offset??0),f=n.limit!==void 0&&n.limit>0?p.slice(d,d+n.limit):d>0?p.slice(d):p;return(await Promise.allSettled(f.map(async({sessionId:g,mtime:S})=>{let k=await c.load(He(m,g));return k?In(g,k,S,{defaultCwd:l}):void 0}))).flatMap((g,S)=>{if(g.status==="fulfilled")return g.value?[g.value]:[];let k=f[S];return[{sessionId:k.sessionId,summary:"",lastModified:k.mtime}]})}let e=await oe(n),s=(await Promise.all(e.map(async c=>{try{return(await En(c)).filter(m=>m.endsWith(".jsonl")).map(m=>A(c,m))}catch{return[]}}))).flat(),o=await Promise.all(s.map(er)),r=new Map;for(let c of o){if(!c)continue;let l=r.get(c.sessionId);(!l||c.lastModified>l.lastModified)&&r.set(c.sessionId,c)}let i=Array.from(r.values()).sort((c,l)=>l.lastModified-c.lastModified),a=n?.offset??0,u=n?.limit;return u!==void 0?i.slice(a,a+u):i.slice(a)}async function Zc(n,e){if(e?.sessionStore){if(!ye(n))return;let s=await rr(e.sessionStore,n,e.dir);return s?In(n,s.entries,zc(s.entries)):void 0}let t=await oe(e);for(let s of t){let o=A(s,`${n}.jsonl`),r=await er(o);if(r)return r}}async function el(n,e){if(!ye(n))return[];let t=e?.includeSystemMessages===!0,s=e?.view??"runtime";if(e?.sessionStore){let r=await rr(e.sessionStore,n,e.dir);if(!r)return[];let i=Tn(r.entries,n,s);return Ho(i.filter(a=>Qo(a,t,s)).map(Go),e)}let o=await oe(e);for(let r of o){let i=A(r,`${n}.jsonl`);try{let a=await Mt(i),{entries:u,activeLeaf:c}=await Pc(a,n),m=Zo(u,c,s).filter(p=>Qo(p,t,s)).map(Go);return Ho(m,e)}catch{continue}}return[]}async function tl(n,e,t){if(!ye(n))throw new Error(`Invalid sessionId: ${n}`);let s=e.trim();if(!s)throw new Error("title must be non-empty");if(t?.sessionStore){await t.sessionStore.append(He(await Oe(t.dir),n),[{type:"custom-title",sessionId:n,customTitle:s,uuid:Jo(),timestamp:new Date().toISOString()}]);return}let o=await oe(t);for(let r of o){let i=A(r,`${n}.jsonl`);try{await De(i);let a=JSON.stringify({type:"custom-title",sessionId:n,customTitle:s,timestamp:new Date().toISOString()});await Wo(i,a+`
28
+ `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function nl(n,e,t){if(!ye(n))throw new Error(`Invalid sessionId: ${n}`);let s=e===null?null:Gc(e).trim();if(s!==null&&!s)throw new Error("tag must be non-empty (use null to clear)");if(t?.sessionStore){await t.sessionStore.append(He(await Oe(t.dir),n),[{type:"tag",sessionId:n,tag:s??"",uuid:Jo(),timestamp:new Date().toISOString()}]);return}let o=await oe(t);for(let r of o){let i=A(r,`${n}.jsonl`);try{await De(i);let a=JSON.stringify({type:"tag",sessionId:n,tag:s??"",timestamp:new Date().toISOString()});await Wo(i,a+`
29
+ `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function sl(n,e){if(e?.sessionStore){if(!ye(n))return[];if(!e.sessionStore.listSubkeys)throw new Error("sessionStore.listSubkeys() is required by listSubagents()");let s=await e.sessionStore.listSubkeys({projectKey:await Oe(e.dir),sessionId:n});return Array.from(new Set(s.map(o=>{if(!o.startsWith("subagents/"))return;let r=o.split("/").at(-1);return r?.startsWith("agent-")?r.slice(6):void 0}).filter(o=>o!==void 0)))}let t=await oe(e);for(let s of t){let o=A(s,`${n}.jsonl`);try{await De(o);let r=await sr(tr(s,n));return Array.from(new Set(r.map(i=>i.agentId)))}catch{continue}}return[]}async function ol(n,e,t){if(t?.sessionStore){if(!ye(n)||!e)return[];let o=await Oe(t.dir),r=`subagents/agent-${e}`;if(t.sessionStore.listSubkeys){let d=await t.sessionStore.listSubkeys({projectKey:o,sessionId:n}),f=`agent-${e}`,y=d.find(g=>g.startsWith("subagents/")&&g.split("/").at(-1)===f);if(!y)return[];r=y}let i=await t.sessionStore.load({projectKey:o,sessionId:n,subpath:r});if(!i)return[];let a=i.filter(nr),u=i.filter(d=>d.type==="agent_metadata").at(-1),c=typeof u?.toolUseId=="string"?u.toolUseId:null,l=typeof u?.parentAgentId=="string"?u.parentAgentId:null,m=or(a).map(d=>{let f=Pn(d);return{type:d.type,uuid:d.uuid,session_id:d.sessionId??n,message:d.message,parent_tool_use_id:c,parent_agent_id:l,...Mn(d),...An(d),...f?{tool_result_meta:f}:{}}}),p=Math.max(0,t.offset??0);return t.limit!==void 0?m.slice(p,p+t.limit):m.slice(p)}let s=await oe(t);for(let o of s){let r=A(o,`${n}.jsonl`);try{await De(r);let a=(await sr(tr(o,n))).find(u=>u.agentId===e);return a?await Bc(a.filePath,n,t):[]}catch{continue}}return[]}async function rl(n,e){if(!ye(n))throw new Error(`Invalid sessionId: ${n}`);if(e?.sessionStore){if(!e.sessionStore.delete)throw new Error("SessionStore does not support delete()");await e.sessionStore.delete(He(await Oe(e.dir),n));return}let t=await oe(e);for(let s of t){let o=A(s,`${n}.jsonl`);try{await De(o),await Promise.all([Bo(o,{force:!0}),Bo(A(s,n),{recursive:!0,force:!0})]);return}catch{continue}}throw new Error(`Session ${n} not found`)}import{randomUUID as It}from"crypto";import{readdir as il,readFile as al,realpath as ul,stat as ir,writeFile as cl}from"fs/promises";import{dirname as ll,join as Dn,resolve as dl}from"path";var ar=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,pl=new Set(["user","assistant","attachment","system","progress"]);async function cr(n){let e=dl(n);try{return await ul(e)}catch{return e}}async function ml(n,e){let t=Te();if(e){let o=x(await cr(e)),r=Dn(t,o,`${n}.jsonl`);try{if((await ir(r)).size>0)return r}catch{}return}let s;try{s=await il(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Dn(t,o.name,`${n}.jsonl`);try{if((await ir(r)).size>0)return r}catch{}}}function lr(n,e){let t=[],s;for(let r of n){if(r===null||typeof r!="object")continue;let i=r;if(i.type==="content-replacement"&&i.sessionId===e&&Array.isArray(i.replacements)){t.push(...i.replacements);continue}i.type==="relocated"&&i.sessionId===e&&typeof i.relocatedCwd=="string"&&(s=i.relocatedCwd)}return{transcript:Tn(n,e,"historical").filter(r=>pl.has(r.type)),contentReplacements:t,relocatedCwd:s}}function fl(n,e){let t=[];for(let s of n.split(`
30
+ `))if(s.trim())try{t.push(JSON.parse(s))}catch{}return lr(t,e)}function gl(n){for(let e of n){if(e===null||typeof e!="object")continue;let t=e;if(t.type!=="user"||t.isMeta===!0||t.isCompactSummary===!0)continue;let s=t.message;if(s===null||typeof s!="object")continue;let o=s.content;if(typeof o=="string"&&o.trim())return o.trim();if(!Array.isArray(o)||o.some(i=>i!==null&&typeof i=="object"&&i.type==="tool_result"))continue;let r=o.filter(i=>i!==null&&typeof i=="object"&&i.type==="text"&&typeof i.text=="string").map(i=>i.text).join(`
31
+ `).trim();if(r)return r}}function hl(n){let e,t;for(let s of n){if(s===null||typeof s!="object")continue;let o=s;typeof o.customTitle=="string"&&o.customTitle&&(e=o.customTitle),typeof o.aiTitle=="string"&&o.aiTitle&&(t=o.aiTitle)}return e??t??gl(n)}function ur(n,e,t,s){let o=n.transcript.filter(d=>d.isSidechain!==!0);if(o.length===0)throw new Error(`Session ${e} has no messages to fork`);if(t.upToMessageId){let d=o.findIndex(f=>f.uuid===t.upToMessageId);if(d<0)throw new Error(`Message ${t.upToMessageId} not found in session ${e}`);o=o.slice(0,d+1)}let r=new Set(o.map(d=>d.uuid)),i=new Map(o.map(d=>[d.uuid,It()])),a=o.filter(d=>d.type!=="progress");if(a.length===0)throw new Error(`Session ${e} has no messages to fork`);let u=new Map(o.map(d=>[d.uuid,d])),c=It(),l=new Date().toISOString(),m=a.map((d,f)=>{let y=null,g=typeof d.parentUuid=="string"?d.parentUuid:void 0;for(;g;){let h=u.get(g);if(!h)break;if(h.type!=="progress"){y=i.get(g)??null;break}g=typeof h.parentUuid=="string"?h.parentUuid:void 0}let S=typeof d.logicalParentUuid=="string"?i.get(d.logicalParentUuid)??null:d.logicalParentUuid??null,k={...d,...d.type==="system"&&d.subtype==="model_refusal_fallback"?{neutralizedByFork:!0}:{},uuid:i.get(d.uuid),parentUuid:y,logicalParentUuid:S,sessionId:c,timestamp:f===a.length-1?l:typeof d.timestamp=="string"?d.timestamp:l,isSidechain:!1,forkedFrom:{sessionId:e,messageUuid:d.uuid}};return delete k.teamName,delete k.agentName,delete k.sessionKind,delete k.slug,delete k.sourceToolAssistantUUID,k});if(n.contentReplacements.length>0){let d=n.contentReplacements.flatMap(f=>{if(f===null||typeof f!="object")return[];let y=f.messageUuid;if(typeof y!="string"||!r.has(y))return[];let g=i.get(y);return g?[{...f,messageUuid:g}]:[]});d.length>0&&m.push({type:"content-replacement",sessionId:c,replacements:d,uuid:It(),timestamp:l})}n.relocatedCwd&&m.push({type:"relocated",sessionId:c,relocatedCwd:n.relocatedCwd});let p=t.title?.trim();return m.push({type:"custom-title",sessionId:c,customTitle:p||`${hl(s)??"Forked session"} (fork)`,uuid:It(),timestamp:l}),{sessionId:c,entries:m}}async function yl(n,e={}){if(!ar.test(n))throw new Error(`Invalid sessionId: ${n}`);if(e.upToMessageId&&!ar.test(e.upToMessageId))throw new Error(`Invalid upToMessageId: ${e.upToMessageId}`);if(e.sessionStore){let i=await cr(e.dir??process.cwd()),a=x(i),u=await e.sessionStore.load({projectKey:a,sessionId:n});if(!u?.length)throw new Error(`Session ${n} not found`);let c=ur(lr(u,n),n,e,u);return await e.sessionStore.append({projectKey:a,sessionId:c.sessionId},c.entries),{sessionId:c.sessionId}}let t=await ml(n,e.dir);if(!t)throw new Error(`Session ${n} not found`);let s=await al(t,"utf8"),o=s.split(`
32
+ `).filter(i=>i.trim()).flatMap(i=>{try{return[JSON.parse(i)]}catch{return[]}}),r=ur(fl(s,n),n,e,o);return await cl(Dn(ll(t),`${r.sessionId}.jsonl`),`${r.entries.map(i=>JSON.stringify(i)).join(`
33
33
  `)}
34
- `,{flag:"wx",mode:384}),{sessionId:r.sessionId}}function It(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}var An=class{entries=new Map;keys=new Map;modifiedAt=new Map;lastModifiedAt=0;async append(e,t){if(t.length===0)return;let s=It(e),o=this.entries.get(s)??[];o.push(...t),this.entries.set(s,o),this.keys.set(s,{...e});let r=Math.max(Date.now(),this.lastModifiedAt+1);this.lastModifiedAt=r,this.modifiedAt.set(s,r)}async load(e){let t=this.entries.get(It(e));return t?[...t]:null}async listSessions(e){let t=[];for(let[s,o]of this.keys)o.projectKey!==e||o.subpath!==void 0||t.push({sessionId:o.sessionId,mtime:this.modifiedAt.get(s)??0});return t.sort((s,o)=>o.mtime-s.mtime)}async delete(e){if(e.subpath!==void 0){this.deleteSerialized(It(e));return}for(let[t,s]of this.keys)s.projectKey===e.projectKey&&s.sessionId===e.sessionId&&this.deleteSerialized(t)}async listSubkeys(e){let t=[];for(let s of this.keys.values())s.projectKey===e.projectKey&&s.sessionId===e.sessionId&&s.subpath!==void 0&&t.push(s.subpath);return t.sort()}getEntries(e){return[...this.entries.get(It(e))??[]]}get size(){let e=0;for(let t of this.keys.values())t.subpath===void 0&&(e+=1);return e}clear(){this.entries.clear(),this.keys.clear(),this.modifiedAt.clear(),this.lastModifiedAt=0}deleteSerialized(e){this.entries.delete(e),this.keys.delete(e),this.modifiedAt.delete(e)}};import{createReadStream as sl}from"fs";import{readdir as sr,readFile as ol,realpath as rl,stat as er}from"fs/promises";import{basename as tr,dirname as il,join as Qe,relative as al,resolve as ul,sep as cl}from"path";import{createInterface as ll}from"readline";var dl=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,pl=500,ml=1024*1024;async function fl(n){let e=ul(n);try{return await rl(e)}catch{return e}}async function gl(n,e){let t=Ee();if(e){let o=x(await fl(e)),r=Qe(t,o,`${n}.jsonl`);try{if((await er(r)).size>0)return{filePath:r,projectKey:o}}catch{}return}let s;try{s=await sr(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Qe(t,o.name,`${n}.jsonl`);try{if((await er(r)).size>0)return{filePath:r,projectKey:o.name}}catch{}}}async function hl(n){let e=[];async function t(s){let o;try{o=await sr(s,{withFileTypes:!0})}catch{return}o.sort((r,i)=>r.name.localeCompare(i.name));for(let r of o){let i=Qe(s,r.name);r.isDirectory()?await t(i):r.isFile()&&r.name.endsWith(".jsonl")&&e.push(i)}}return await t(n),e}async function nr(n,e,t,s){let o=ll({input:sl(n,{encoding:"utf8"}),crlfDelay:1/0}),r=[],i=0;for await(let a of o){if(!a.trim())continue;let u;try{u=JSON.parse(a)}catch(c){console.warn(`importSessionToStore: skipping unparseable line in ${n}: ${String(c)}`);continue}if(u===null||typeof u!="object"){console.warn(`importSessionToStore: skipping non-object line in ${n}`);continue}r.push(u),i+=Buffer.byteLength(a),(r.length>=s||i>=ml)&&(await t.append(e,r),r=[],i=0)}r.length>0&&await t.append(e,r)}async function yl(n,e,t={}){if(!dl.test(n))throw new Error(`Invalid sessionId: ${n}`);let s=await gl(n,t.dir);if(!s)throw new Error(`Session ${n} not found`);let o=t.batchSize!==void 0&&t.batchSize>0?t.batchSize:pl;if(await nr(s.filePath,{projectKey:s.projectKey,sessionId:n},e,o),t.includeSubagents===!1)return;let r=s.filePath.replace(/\.jsonl$/,""),i=Qe(r,"subagents");for(let a of await hl(i)){let c=al(r,a).split(cl);c[c.length-1]=tr(c[c.length-1],".jsonl");let d={projectKey:s.projectKey,sessionId:n,subpath:c.join("/")};await nr(a,d,e,o);let m=Qe(il(a),`${tr(a,".jsonl")}.meta.json`);try{let p=JSON.parse(await ol(m,"utf8"));await e.append(d,[{type:"agent_metadata",...p}])}catch(p){if(typeof p=="object"&&p!==null&&"code"in p&&p.code==="ENOENT")continue;console.warn(`importSessionToStore: skipping unreadable sidecar ${m}: ${String(p)}`)}}}import{spawn as Sl}from"node:child_process";import{existsSync as wl}from"node:fs";import{Worker as vl}from"node:worker_threads";var Dn=3e4;async function or(n,e={}){let t=Pe({pathToQoderCLIExecutable:e.pathToQoderCLIExecutable},oe);return t.transport==="worker"?bl(n,{...e,pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):kl(n,{...e,pathToQoderCLIExecutable:e.pathToQoderCLIExecutable??J()})}function kl(n,e){return new Promise((t,s)=>{let o=Sl(e.pathToQoderCLIExecutable,n,{cwd:e.cwd,env:rr(e.env),stdio:["ignore","pipe","pipe"],signal:e.signal}),r="",i="",a=!1,u=setTimeout(()=>{a||(a=!0,o.kill("SIGTERM"),s(ir(e.timeoutMs)))},e.timeoutMs??Dn);o.stdout.on("data",c=>{r+=c.toString()}),o.stderr.on("data",c=>{i+=c.toString()}),o.on("error",c=>{a||(a=!0,clearTimeout(u),s(c))}),o.on("close",c=>{a||(a=!0,clearTimeout(u),t({stdout:r,stderr:i,exitCode:c??1}))})})}async function bl(n,e){Rl(e.signal);let t=Y(e.pathToQoderWorkerRuntime),s=await ke(t);_l(s);let o=e.cwd??process.cwd(),r=rr(e.env);delete r.NODE_OPTIONS;let i=at(s,{cwd:o,env:r});return new Promise((a,u)=>{let c=new vl(s.runtimePath,{argv:n,env:i.env,execArgv:[],stdin:!0,stdout:!0,stderr:!0,workerData:i.workerData}),d="",m="",p=!1,l,f=c.stdout===null,y=c.stderr===null,g=()=>{clearTimeout(P),e.signal?.removeEventListener("abort",h)},S=T=>{p||(p=!0,g(),u(T))},k=()=>{p||l===void 0||!f||!y||(p=!0,g(),a({stdout:d,stderr:m,exitCode:l}))},h=()=>{c.terminate(),S(ar(e.signal))},P=setTimeout(()=>{c.terminate(),S(ir(e.timeoutMs))},e.timeoutMs??Dn);c.stdin?.end(),c.stdout?.on("data",T=>{d+=T.toString()}),c.stdout?.on("end",()=>{f=!0,k()}),c.stderr?.on("data",T=>{m+=T.toString()}),c.stderr?.on("end",()=>{y=!0,k()}),c.once("error",S),c.once("exit",T=>{l=T,k()}),e.signal?.addEventListener("abort",h,{once:!0}),e.signal?.aborted&&h()})}function rr(n){let e={...process.env,...n},t={};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}function _l(n){if(!wl(n.runtimePath))throw new Error(`Qoder worker runtime not found: ${n.runtimePath}`)}function ir(n){return new Error(`qodercli subprocess timed out after ${n??Dn}ms`)}function Rl(n){if(n?.aborted)throw ar(n)}function ar(n){if(n?.reason instanceof Error)return n.reason;let e=new Error("The operation was aborted");return e.name="AbortError",e}async function Cl(n){let e=["plugins","list","--json"];n?.orgId&&e.push("--org-id",n.orgId);let t=await De(e,n);return JSON.parse(t.stdout).map(o=>({id:o.id,name:o.name,source:o.source,path:o.installPath??o.path,version:o.version??"unknown",scope:o.scope,enabled:o.enabled,canDisable:o.canDisable,displayName:o.displayName,description:o.description,installedAt:o.installedAt,lastUpdated:o.lastUpdated,...typeof o.projectPath=="string"?{projectPath:o.projectPath}:{},resources:o.resources}))}async function El(n,e){let t=["plugins","enable",n];e?.scope&&t.push("--scope",e.scope);let s=await De(t,e);s.exitCode!==0&&Ge(s)}async function Pl(n,e){let t=["plugins","disable",n];e?.scope&&t.push("--scope",e.scope);let s=await De(t,e);s.exitCode!==0&&Ge(s)}async function Tl(n,e){let t=e?.scope??"user",s=await De(["plugins","install",n,"--scope",t,"--json"],e);s.exitCode!==0&&Ge(s);let o=JSON.parse(s.stdout);return{pluginId:o.pluginId,version:o.version??"local",path:o.path}}async function Ml(n,e){let t=e?.scope??"user",s=["plugins","uninstall",n,"--scope",t,"--json"];e?.keepData&&s.push("--keep-data");let o=await De(s,e);o.exitCode!==0&&Ge(o);let r=JSON.parse(o.stdout);return{pluginId:r.pluginId,fullyRemoved:r.fullyRemoved,reverseDependents:r.reverseDependents??[]}}async function Il(n,e){let t;try{t=await De(["plugins","validate",n,"--json"],e)}catch(o){if(e?.signal?.aborted||o instanceof Error&&o.name==="AbortError")throw new j("Plugin validation was aborted");let r=o instanceof Error?o.message:String(o);throw te("plugin_validation_failed",`Failed to run qodercli plugin validation: ${r}`)}let s;try{s=JSON.parse(t.stdout)}catch{let o=Al(`${t.stderr}
35
- ${t.stdout}`);throw te(o?"plugin_validation_unsupported":"plugin_validation_protocol_error",o?"The selected qodercli does not support structured plugin validation.":"qodercli returned an invalid plugin validation response.")}if(s&&typeof s=="object"&&"ok"in s&&s.schemaVersion!==1)throw te("plugin_validation_schema_unsupported","qodercli returned an unsupported plugin validation schema version.");if(s&&typeof s=="object"&&s.ok===!0&&s.report){let o=s.report;if(Ol(o))return o;throw te("plugin_validation_protocol_error","qodercli returned a malformed plugin validation report.")}if(s&&typeof s=="object"&&s.ok===!1){let o=s.error;if(!o||typeof o!="object"||typeof o.code!="string"||typeof o.message!="string")throw te("plugin_validation_protocol_error","qodercli returned a malformed plugin validation error.");let r=o;throw te(r.code,r.message)}throw t.exitCode!==0&&Ge(t),te("plugin_validation_protocol_error","qodercli returned an unrecognized plugin validation response.")}function Al(n){return/unknown option[^\n]*--json/i.test(n)||/unknown command[^\n]*validate/i.test(n)}var Dl=3e4;function De(n,e){return or(n,{pathToQoderCLIExecutable:e?.cliPath,cwd:e?.cwd,env:e?.env,signal:e?.signal,timeoutMs:Dl})}function Ge(n){let e="plugin_operation_failed",t=n.stderr||n.stdout;try{let s=JSON.parse(n.stdout);s.error&&s.code?(e=s.code,t=s.message??t):s.ok===!1&&s.error&&(e=s.error.code??e,t=s.error.message??t)}catch{}throw te(e,t)}function te(n,e){let t=new Error(e);return t.code=n,t}function Ol(n){if(!n||typeof n!="object")return!1;let e=n;if(e.schemaVersion!==1||typeof e.valid!="boolean"||!e.validator||e.validator.name!=="qodercli"||typeof e.validator.version!="string"||!e.target||typeof e.target.inputPath!="string"||typeof e.target.resolvedPath!="string"||!Array.isArray(e.diagnostics)||!e.summary||typeof e.summary.errorCount!="number"||typeof e.summary.warningCount!="number"||typeof e.summary.componentCount!="number")return!1;let t=new Set(["target","manifest","component","load-simulation","installability"]);return e.diagnostics.every(s=>s!==null&&typeof s=="object"&&(s.severity==="error"||s.severity==="warning")&&typeof s.code=="string"&&typeof s.message=="string"&&typeof s.phase=="string"&&t.has(s.phase)&&(s.location===void 0||s.location!==null&&typeof s.location=="object"&&typeof s.location.path=="string"))}import{execFile as xl}from"child_process";function ql(){return J()}async function Nl(n,e){if(!n.content)return{success:!1,message:"Feedback content is required"};let t=e?.cliPath??ql(),s=e?.timeout??6e4,o=["feedback","-c",n.content,"--json"];if(e?.storageDir&&o.push("--storage-dir",e.storageDir),n.sessionId&&o.push("-s",n.sessionId),n.workdir&&o.push("--workdir",n.workdir),n.email&&o.push("--email",n.email),n.include)for(let r of n.include)o.push("--include",r);if(n.imagePaths)for(let r of n.imagePaths)o.push("--images",r);if(n.callerVersion&&o.push("--caller-version",n.callerVersion),e?.integrationMode){let r=e.integrationMode==="qoder_work"?"QoderWork":e.integrationMode==="quest"?"Quest":e.integrationMode;r&&o.push("--ide-type",r)}return new Promise(r=>{xl(t,o,{env:e?.env??process.env,timeout:s,maxBuffer:1024*1024},(i,a)=>{let u=a.trim();if(u)try{let c=JSON.parse(u);r({success:!!c.success,message:c.success?c.message||"Feedback submitted successfully":c.error||c.message||"Failed to submit feedback",requestId:c.request_id});return}catch{}r(i?{success:!1,message:i.message||"Failed to submit feedback"}:{success:!0,message:u||"Feedback submitted successfully"})})})}var lr={};yr(lr,{filterEscalatingDefaultMode:()=>ur,isBashToolBackgroundLaunchResult:()=>cr});var jl=new Set(["bypassPermissions","yolo","auto","acceptEdits"]);function ur(n){let e=n.effective.permissions?.defaultMode;if(!e||!jl.has(e))return n.effective;for(let t=n.sources.length-1;t>=0;t-=1){let s=n.sources[t];if(s.settings.permissions?.defaultMode!==void 0){if(s.source==="project"){let{defaultMode:o,...r}=n.effective.permissions??{};return{...n.effective,permissions:r}}return n.effective}}return n.effective}function cr(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n,t=r=>r===void 0||typeof r=="string",s=r=>r===void 0||typeof r=="number"&&Number.isInteger(r)&&r>=0,o=e.backgroundReason;return e.kind==="backgrounded"&&typeof e.pid=="number"&&Number.isInteger(e.pid)&&e.pid>0&&typeof e.taskId=="string"&&typeof e.command=="string"&&typeof e.initialOutput=="string"&&t(e.outputFile)&&t(e.stdout)&&t(e.telemetryExecutionId)&&s(e.totalLines)&&s(e.totalBytes)&&(o===void 0||o==="user"||o==="model"||o==="timeout"||o==="auto")}export{j as AbortError,Ze as AuthAccessTokenEnvVarError,et as AuthServiceAccountEnvVarError,zt as CONTROL_REQUEST_TIMEOUT_CODE,_e as ControlRequestError,$n as DEFAULT_ACCESS_TOKEN_ENV_VAR,oe as DEFAULT_RUNTIME_TRANSPORT,Xe as DEFAULT_SERVICE_ACCOUNT_ENV_VAR,bt as DaemonRpcError,wr as EXIT_REASONS,Sr as HOOK_EVENTS,An as InMemorySessionStore,St as MAX_SKILL_EVOLUTION_REVIEW_THRESHOLD,Ne as ModelPolicyTimeoutError,we as ProcessTransport,F as ProtocolVersionMismatchError,D as QoderCliProcessError,ie as QoderWorkerRuntimeError,Q as UnsupportedCliCapabilityError,Qt as WIRE_PROTOCOL_VERSION,be as WorkerTransport,Cr as accessToken,Er as accessTokenFromEnv,lr as coreTypes,sc as createSdkMcpServer,zc as deleteSession,Pl as disablePlugin,El as enablePlugin,ur as filterEscalatingDefaultMode,nl as forkSession,Fc as getSessionInfo,Kc as getSessionMessages,$c as getSubagentMessages,ms as hasResolvableQoderWorkerRuntime,yl as importSessionToStore,Ao as initDaemon,Tl as installPlugin,cr as isBashToolBackgroundLaunchResult,Ir as jobToken,Cl as listPlugins,jc as listSessions,Bc as listSubagents,Pr as qodercliAuth,Sn as query,Uc as renameSession,Y as resolveQoderWorkerRuntimePath,Yu as resolveSettings,Tr as serviceAccount,Mr as serviceAccountFromEnv,Zu as shutdownDaemon,hn as startDaemon,Fu as startup,Nl as submitFeedback,Lc as tagSession,oc as tool,Ml as uninstallPlugin,Il as validatePlugin};
34
+ `,{flag:"wx",mode:384}),{sessionId:r.sessionId}}function Dt(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}var On=class{entries=new Map;keys=new Map;modifiedAt=new Map;lastModifiedAt=0;async append(e,t){if(t.length===0)return;let s=Dt(e),o=this.entries.get(s)??[];o.push(...t),this.entries.set(s,o),this.keys.set(s,{...e});let r=Math.max(Date.now(),this.lastModifiedAt+1);this.lastModifiedAt=r,this.modifiedAt.set(s,r)}async load(e){let t=this.entries.get(Dt(e));return t?[...t]:null}async listSessions(e){let t=[];for(let[s,o]of this.keys)o.projectKey!==e||o.subpath!==void 0||t.push({sessionId:o.sessionId,mtime:this.modifiedAt.get(s)??0});return t.sort((s,o)=>o.mtime-s.mtime)}async delete(e){if(e.subpath!==void 0){this.deleteSerialized(Dt(e));return}for(let[t,s]of this.keys)s.projectKey===e.projectKey&&s.sessionId===e.sessionId&&this.deleteSerialized(t)}async listSubkeys(e){let t=[];for(let s of this.keys.values())s.projectKey===e.projectKey&&s.sessionId===e.sessionId&&s.subpath!==void 0&&t.push(s.subpath);return t.sort()}getEntries(e){return[...this.entries.get(Dt(e))??[]]}get size(){let e=0;for(let t of this.keys.values())t.subpath===void 0&&(e+=1);return e}clear(){this.entries.clear(),this.keys.clear(),this.modifiedAt.clear(),this.lastModifiedAt=0}deleteSerialized(e){this.entries.delete(e),this.keys.delete(e),this.modifiedAt.delete(e)}};import{createReadStream as Sl}from"fs";import{readdir as fr,readFile as wl,realpath as vl,stat as dr}from"fs/promises";import{basename as pr,dirname as kl,join as We,relative as bl,resolve as _l,sep as Rl}from"path";import{createInterface as Cl}from"readline";var El=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Pl=500,Tl=1024*1024;async function Ml(n){let e=_l(n);try{return await vl(e)}catch{return e}}async function Al(n,e){let t=Te();if(e){let o=x(await Ml(e)),r=We(t,o,`${n}.jsonl`);try{if((await dr(r)).size>0)return{filePath:r,projectKey:o}}catch{}return}let s;try{s=await fr(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=We(t,o.name,`${n}.jsonl`);try{if((await dr(r)).size>0)return{filePath:r,projectKey:o.name}}catch{}}}async function Il(n){let e=[];async function t(s){let o;try{o=await fr(s,{withFileTypes:!0})}catch{return}o.sort((r,i)=>r.name.localeCompare(i.name));for(let r of o){let i=We(s,r.name);r.isDirectory()?await t(i):r.isFile()&&r.name.endsWith(".jsonl")&&e.push(i)}}return await t(n),e}async function mr(n,e,t,s){let o=Cl({input:Sl(n,{encoding:"utf8"}),crlfDelay:1/0}),r=[],i=0;for await(let a of o){if(!a.trim())continue;let u;try{u=JSON.parse(a)}catch(c){console.warn(`importSessionToStore: skipping unparseable line in ${n}: ${String(c)}`);continue}if(u===null||typeof u!="object"){console.warn(`importSessionToStore: skipping non-object line in ${n}`);continue}r.push(u),i+=Buffer.byteLength(a),(r.length>=s||i>=Tl)&&(await t.append(e,r),r=[],i=0)}r.length>0&&await t.append(e,r)}async function Dl(n,e,t={}){if(!El.test(n))throw new Error(`Invalid sessionId: ${n}`);let s=await Al(n,t.dir);if(!s)throw new Error(`Session ${n} not found`);let o=t.batchSize!==void 0&&t.batchSize>0?t.batchSize:Pl;if(await mr(s.filePath,{projectKey:s.projectKey,sessionId:n},e,o),t.includeSubagents===!1)return;let r=s.filePath.replace(/\.jsonl$/,""),i=We(r,"subagents");for(let a of await Il(i)){let c=bl(r,a).split(Rl);c[c.length-1]=pr(c[c.length-1],".jsonl");let l={projectKey:s.projectKey,sessionId:n,subpath:c.join("/")};await mr(a,l,e,o);let m=We(kl(a),`${pr(a,".jsonl")}.meta.json`);try{let p=JSON.parse(await wl(m,"utf8"));await e.append(l,[{type:"agent_metadata",...p}])}catch(p){if(typeof p=="object"&&p!==null&&"code"in p&&p.code==="ENOENT")continue;console.warn(`importSessionToStore: skipping unreadable sidecar ${m}: ${String(p)}`)}}}import{spawn as Ol}from"node:child_process";import{existsSync as xl}from"node:fs";import{Worker as ql}from"node:worker_threads";var xn=3e4;async function gr(n,e={}){let t=Me({pathToQoderCLIExecutable:e.pathToQoderCLIExecutable},ae);return t.transport==="worker"?jl(n,{...e,pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):Nl(n,{...e,pathToQoderCLIExecutable:e.pathToQoderCLIExecutable??Z()})}function Nl(n,e){return new Promise((t,s)=>{let o=Ol(e.pathToQoderCLIExecutable,n,{cwd:e.cwd,env:hr(e.env),stdio:["ignore","pipe","pipe"],signal:e.signal}),r="",i="",a=!1,u=setTimeout(()=>{a||(a=!0,o.kill("SIGTERM"),s(yr(e.timeoutMs)))},e.timeoutMs??xn);o.stdout.on("data",c=>{r+=c.toString()}),o.stderr.on("data",c=>{i+=c.toString()}),o.on("error",c=>{a||(a=!0,clearTimeout(u),s(c))}),o.on("close",c=>{a||(a=!0,clearTimeout(u),t({stdout:r,stderr:i,exitCode:c??1}))})})}async function jl(n,e){Kl(e.signal);let t=te(e.pathToQoderWorkerRuntime),s=await _e(t);Fl(s);let o=e.cwd??process.cwd(),r=hr(e.env);delete r.NODE_OPTIONS;let i=ct(s,{cwd:o,env:r});return new Promise((a,u)=>{let c=new ql(s.runtimePath,{argv:n,env:i.env,execArgv:[],stdin:!0,stdout:!0,stderr:!0,workerData:i.workerData}),l="",m="",p=!1,d,f=c.stdout===null,y=c.stderr===null,g=()=>{clearTimeout(P),e.signal?.removeEventListener("abort",h)},S=T=>{p||(p=!0,g(),u(T))},k=()=>{p||d===void 0||!f||!y||(p=!0,g(),a({stdout:l,stderr:m,exitCode:d}))},h=()=>{c.terminate(),S(Sr(e.signal))},P=setTimeout(()=>{c.terminate(),S(yr(e.timeoutMs))},e.timeoutMs??xn);c.stdin?.end(),c.stdout?.on("data",T=>{l+=T.toString()}),c.stdout?.on("end",()=>{f=!0,k()}),c.stderr?.on("data",T=>{m+=T.toString()}),c.stderr?.on("end",()=>{y=!0,k()}),c.once("error",S),c.once("exit",T=>{d=T,k()}),e.signal?.addEventListener("abort",h,{once:!0}),e.signal?.aborted&&h()})}function hr(n){let e={...process.env,...n},t={};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}function Fl(n){if(!xl(n.runtimePath))throw new Error(`Qoder worker runtime not found: ${n.runtimePath}`)}function yr(n){return new Error(`qodercli subprocess timed out after ${n??xn}ms`)}function Kl(n){if(n?.aborted)throw Sr(n)}function Sr(n){if(n?.reason instanceof Error)return n.reason;let e=new Error("The operation was aborted");return e.name="AbortError",e}async function Ul(n){let e=["plugins","list","--json"];n?.orgId&&e.push("--org-id",n.orgId);let t=await xe(e,n);return JSON.parse(t.stdout).map(o=>({id:o.id,name:o.name,source:o.source,path:o.installPath??o.path,version:o.version??"unknown",scope:o.scope,enabled:o.enabled,canDisable:o.canDisable,displayName:o.displayName,description:o.description,installedAt:o.installedAt,lastUpdated:o.lastUpdated,...typeof o.projectPath=="string"?{projectPath:o.projectPath}:{},resources:o.resources}))}async function Ll(n,e){let t=["plugins","enable",n];e?.scope&&t.push("--scope",e.scope);let s=await xe(t,e);s.exitCode!==0&&Je(s)}async function Bl(n,e){let t=["plugins","disable",n];e?.scope&&t.push("--scope",e.scope);let s=await xe(t,e);s.exitCode!==0&&Je(s)}async function $l(n,e){let t=e?.scope??"user",s=await xe(["plugins","install",n,"--scope",t,"--json"],e);s.exitCode!==0&&Je(s);let o=JSON.parse(s.stdout);return{pluginId:o.pluginId,version:o.version??"local",path:o.path}}async function zl(n,e){let t=e?.scope??"user",s=["plugins","uninstall",n,"--scope",t,"--json"];e?.keepData&&s.push("--keep-data");let o=await xe(s,e);o.exitCode!==0&&Je(o);let r=JSON.parse(o.stdout);return{pluginId:r.pluginId,fullyRemoved:r.fullyRemoved,reverseDependents:r.reverseDependents??[]}}async function Ql(n,e){let t;try{t=await xe(["plugins","validate",n,"--json"],e)}catch(o){if(e?.signal?.aborted||o instanceof Error&&o.name==="AbortError")throw new F("Plugin validation was aborted");let r=o instanceof Error?o.message:String(o);throw re("plugin_validation_failed",`Failed to run qodercli plugin validation: ${r}`)}let s;try{s=JSON.parse(t.stdout)}catch{let o=Gl(`${t.stderr}
35
+ ${t.stdout}`);throw re(o?"plugin_validation_unsupported":"plugin_validation_protocol_error",o?"The selected qodercli does not support structured plugin validation.":"qodercli returned an invalid plugin validation response.")}if(s&&typeof s=="object"&&"ok"in s&&s.schemaVersion!==1)throw re("plugin_validation_schema_unsupported","qodercli returned an unsupported plugin validation schema version.");if(s&&typeof s=="object"&&s.ok===!0&&s.report){let o=s.report;if(Wl(o))return o;throw re("plugin_validation_protocol_error","qodercli returned a malformed plugin validation report.")}if(s&&typeof s=="object"&&s.ok===!1){let o=s.error;if(!o||typeof o!="object"||typeof o.code!="string"||typeof o.message!="string")throw re("plugin_validation_protocol_error","qodercli returned a malformed plugin validation error.");let r=o;throw re(r.code,r.message)}throw t.exitCode!==0&&Je(t),re("plugin_validation_protocol_error","qodercli returned an unrecognized plugin validation response.")}function Gl(n){return/unknown option[^\n]*--json/i.test(n)||/unknown command[^\n]*validate/i.test(n)}var Hl=3e4;function xe(n,e){return gr(n,{pathToQoderCLIExecutable:e?.cliPath,cwd:e?.cwd,env:e?.env,signal:e?.signal,timeoutMs:Hl})}function Je(n){let e="plugin_operation_failed",t=n.stderr||n.stdout;try{let s=JSON.parse(n.stdout);s.error&&s.code?(e=s.code,t=s.message??t):s.ok===!1&&s.error&&(e=s.error.code??e,t=s.error.message??t)}catch{}throw re(e,t)}function re(n,e){let t=new Error(e);return t.code=n,t}function Wl(n){if(!n||typeof n!="object")return!1;let e=n;if(e.schemaVersion!==1||typeof e.valid!="boolean"||!e.validator||e.validator.name!=="qodercli"||typeof e.validator.version!="string"||!e.target||typeof e.target.inputPath!="string"||typeof e.target.resolvedPath!="string"||!Array.isArray(e.diagnostics)||!e.summary||typeof e.summary.errorCount!="number"||typeof e.summary.warningCount!="number"||typeof e.summary.componentCount!="number")return!1;let t=new Set(["target","manifest","component","load-simulation","installability"]);return e.diagnostics.every(s=>s!==null&&typeof s=="object"&&(s.severity==="error"||s.severity==="warning")&&typeof s.code=="string"&&typeof s.message=="string"&&typeof s.phase=="string"&&t.has(s.phase)&&(s.location===void 0||s.location!==null&&typeof s.location=="object"&&typeof s.location.path=="string"))}var kr={};Pr(kr,{filterEscalatingDefaultMode:()=>wr,isBashToolBackgroundLaunchResult:()=>vr});var Jl=new Set(["bypassPermissions","yolo","auto","acceptEdits"]);function wr(n){let e=n.effective.permissions?.defaultMode;if(!e||!Jl.has(e))return n.effective;for(let t=n.sources.length-1;t>=0;t-=1){let s=n.sources[t];if(s.settings.permissions?.defaultMode!==void 0){if(s.source==="project"){let{defaultMode:o,...r}=n.effective.permissions??{};return{...n.effective,permissions:r}}return n.effective}}return n.effective}function vr(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=n,t=r=>r===void 0||typeof r=="string",s=r=>r===void 0||typeof r=="number"&&Number.isInteger(r)&&r>=0,o=e.backgroundReason;return e.kind==="backgrounded"&&typeof e.pid=="number"&&Number.isInteger(e.pid)&&e.pid>0&&typeof e.taskId=="string"&&typeof e.command=="string"&&typeof e.initialOutput=="string"&&t(e.outputFile)&&t(e.stdout)&&t(e.telemetryExecutionId)&&s(e.totalLines)&&s(e.totalBytes)&&(o===void 0||o==="user"||o==="model"||o==="timeout"||o==="auto")}export{F as AbortError,nt as AuthAccessTokenEnvVarError,st as AuthServiceAccountEnvVarError,Gt as CONTROL_REQUEST_TIMEOUT_CODE,Ce as ControlRequestError,Qn as DEFAULT_ACCESS_TOKEN_ENV_VAR,ae as DEFAULT_RUNTIME_TRANSPORT,tt as DEFAULT_SERVICE_ACCOUNT_ENV_VAR,Rt as DaemonRpcError,Mr as EXIT_REASONS,Tr as HOOK_EVENTS,On as InMemorySessionStore,vt as MAX_SKILL_EVOLUTION_REVIEW_THRESHOLD,Ke as ModelPolicyTimeoutError,ke as ProcessTransport,K as ProtocolVersionMismatchError,D as QoderCliProcessError,ce as QoderWorkerRuntimeError,U as UnsupportedCliCapabilityError,Ht as WIRE_PROTOCOL_VERSION,Re as WorkerTransport,qr as accessToken,Nr as accessTokenFromEnv,kr as coreTypes,wc as createSdkMcpServer,rl as deleteSession,Bl as disablePlugin,Ll as enablePlugin,wr as filterEscalatingDefaultMode,yl as forkSession,Zc as getSessionInfo,el as getSessionMessages,ol as getSubagentMessages,gs as hasResolvableQoderWorkerRuntime,Dl as importSessionToStore,Uo as initDaemon,$l as installPlugin,vr as isBashToolBackgroundLaunchResult,Ur as jobToken,Ul as listPlugins,Xc as listSessions,sl as listSubagents,jr as qodercliAuth,vn as query,tl as renameSession,te as resolveQoderWorkerRuntimePath,mc as resolveSettings,Fr as serviceAccount,Kr as serviceAccountFromEnv,gc as shutdownDaemon,Sn as startDaemon,ec as startup,Yu as submitFeedback,nl as tagSession,vc as tool,zl as uninstallPlugin,Ql as validatePlugin};