@qoder-ai/qoder-agent-sdk 1.0.52 → 1.0.54

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,40 +1,40 @@
1
- var Or=Object.defineProperty;var xr=(n,e)=>{for(var t in e)Or(n,t,{get:e[t],enumerable:!0})};import{spawn as gi}from"child_process";import{createInterface as hi}from"readline";var qr=["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","SessionStart","SessionEnd","Stop","SubagentStart","SubagentStop","PreCompact","PostCompact","CwdChanged","InstructionsLoaded","FileChanged","PermissionRequest","PermissionDenied","WorktreeCreate","WorktreeRemove"],Nr=["clear","resume","logout","prompt_input_exit","other","bypass_permissions_disabled"],ot=2e3,Vn=5e3;var rt="1.0.52";var _e=41,Wn=["Agent","AskUserQuestion","Bash","Edit","Glob","Grep","ImageGen","ImageSearch","NotebookEdit","Read","Skill","TaskCreate","TaskGet","TaskUpdate","TaskList","UpdateGoal","WebFetch","WebSearch","Write"],Jn=["TaskCreate","TaskGet","TaskUpdate","TaskList"],jr="QODER_FEATURE_TASKS";function Yn(n){let e=n[jr];if(e!=="0"&&e!=="false")return[...Wn];let t=new Set(Jn);return Wn.flatMap(s=>s===Jn[0]?["TodoWrite"]:t.has(s)?[]:[s])}import{chmod as ss,mkdtemp as Wr,rm as os,writeFile as Jr}from"fs/promises";import{existsSync as ct,mkdtempSync as Vr,readFileSync as Yr,rmSync as Xr,writeFileSync as Zr}from"fs";import{homedir as ei,tmpdir as rs}from"os";import{dirname as ps,join as G}from"path";import{fileURLToPath as ti}from"url";var Fr=/^[A-Za-z0-9_-]{1,64}$/,Ur=new Set(["mcp_list","mcp_get","mcp_call"]);function Lt(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(!Fr.test(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" has invalid exposedName "${e.exposedName}".`);if(Ur.has(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" cannot use reserved exposedName "${e.exposedName}".`)}}function Bt(n,e){let t={};for(let s of e)Lt(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 $t(n,e,t=e.tools??[]){let{tools:s,...o}=e,r=Bt(n,t);return{...o,...r?{toolOverrides:r}:{}}}function Xn(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]=$t(t,s,o)}return e}var Kr="global",Zn=Kr==="cn",Lr=Zn?"QODERCN_":"QODER_",zt=`${Lr}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 es=v.accessTokenEnv,it=v.serviceAccountEnv;function Br(n){return{type:"accessToken",accessToken:n}}function $r(n=es){return{type:"accessToken",accessToken:{envVar:n}}}function zr(){return{type:"qodercli"}}function Qr(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 Gr(n=it){return{type:"serviceAccount",serviceAccountKey:{envVar:n}}}function Hr(n){return{type:"jobToken",fetchJobToken:n}}var ts=["l1StaticCheck","l2LightweightScan","l3DeepScan"];function ns(n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError("securityScan must be an object.");let e=new Set(ts),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 ts){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 is="QODER_AGENT_SDK_ENTRYPOINT",as="QODER_AGENT_SDK_VERSION",us="QODER_SDK_AUTH_PAYLOAD_FILE",ni="sdk-ts",si=ti(import.meta.url),cs=ps(si),at=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"}},ut=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 te(n){return/\.(js|mjs|tsx?|jsx)$/.test(n)}function ne(){if(process.env.QODERCLI_PATH)return process.env.QODERCLI_PATH;let n=oi();if(n)return n;let e=ri();if(ct(e))return e;let t=ii();return t||v.cliCommands[0]}function oi(){for(let n of ms())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=G(n,"dist","_bundled",t);if(ct(s))return s}return null}function ri(){for(let n of ms())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=[G(n,"node_modules",".bin",t),G(n,"..","..",".bin",t)];for(let o of s)if(ct(o))return o}return v.cliCommands[0]}function ii(){let n=process.env[v.cliHomeEnv]??ei();for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=G(n,v.configDirName,"local",t);if(ct(s))return s}return null}function ms(){let n=[G(cs,".."),G(cs,"..","..")];return[...new Set(n)]}function ai(){return{allow:[],ask:[],deny:[]}}function ls(n){return n.replace(/[^a-zA-Z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"")}function ui(n,e){if(e.startsWith("mcp__"))return e;let t=ls(n),s=e==="*"?"*":ls(e);if(!t||!s)throw new Error(`Invalid MCP tool policy name for server "${n}" and tool "${e}"`);return`mcp__${t}__${s}`}function ds(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 ci(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 U=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{Xr(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=ps(this.authPayloadPath);try{await os(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[is],delete t[as],delete t[us];for(let s of this.serviceAccountCredentialEnvVars())pi(t,s);if(t[is]=ni,t[as]=rt,this.authPayloadPath&&(t[us]=this.authPayloadPath),delete t.NODE_OPTIONS,this.options.vpcEndpoint!==void 0){let s=this.options.vpcEndpoint.trim();s?t[zt]=s:delete t[zt]}return t}serviceAccountCredentialEnvVars(){let e=this.options.auth;if(e?.type!=="serviceAccount")return[];let t=[it];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??Yn(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?ci(e):e}applySecurityScanSetting(e){let t=this.options.securityScan;t!==void 0&&(e.securityScan=ns(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]:[];ds(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]=$t(s,o,r)}return t}collectMcpPolicyPermissionRules(){let e=ai(),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=ui(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]]:[];ds(r,t[o]),s[o]=r}}readSettingsFile(e){let t=Yr(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=Vr(G(rs(),"qoder-agent-sdk-settings-"));let t=G(this.generatedSettingsDir,"settings.json");return Zr(t,JSON.stringify(e),"utf8"),t}async createAuthPayloadFile(e){let t=Qt(e,this.options.env),s=await Wr(G(rs(),"qoder-sdk-auth-"));try{await ss(s,448);let o=G(s,"payload.json");return await Jr(o,JSON.stringify(t),{mode:384}),await ss(o,384),this.diagnostics?.record(`${this.logPrefix} Auth payload created: type=${t.type}, path=${o}`),o}catch(o){throw await os(s,{recursive:!0,force:!0}).catch(()=>{}),o}}};function Qt(n,e){switch(n.type){case"accessToken":return{type:"accessToken",accessToken:di(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:li(n,e)}}}}function li(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 ut(t);return s}function di(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 at(t);return s}function pi(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 lt(n,e){let t={...n};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}var mi=new Set(["--mcp-config","--proxy","--settings"]);function dt(n){let e=[];for(let t=0;t<n.length;t+=1){let s=n[t];e.push(s),mi.has(s)&&t+1<n.length&&(e.push("[redacted]"),t+=1)}return e.join(" ")}import{Transform as fi}from"node:stream";var H=class extends Error{constructor(t,s,o,r,i){super(`${r} exceeded the ${s}-byte frame limit`+(t==="input"?". Reduce the input text or remove attachments and try again.":""));this.direction=t;this.limit=s;this.actualBytes=o;this.source=r;this.inputMessageUuid=i;this.name="FrameTooLargeError",this.code=t==="input"?"SDK_INPUT_TOO_LARGE":"SDK_OUTPUT_TOO_LARGE"}code},Re=class extends Error{code;result;constructor(e){let t=e.subtype==="success"?e.result:e.errors?.filter(s=>s.trim().length>0).join(`
2
- `);super(t?.trim()?t:"Qoder CLI initialization failed."),this.name="QoderCliInitializationError",this.code=e.error_code,this.result=e}},D=class extends Error{constructor(e="Operation was aborted"){super(e),this.name="AbortError"}},Be=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}},L=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 W=64*1024*1024,se=class extends fi{constructor(t=W,s="SDK output"){super();this.maxLineBytes=t;this.source=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 H("output",this.maxLineBytes,this.bytesSinceNewline,this.source));return}this.bytesSinceNewline=0,i=a+1}if(this.bytesSinceNewline+=r.length-i,this.bytesSinceNewline>this.maxLineBytes){o(new H("output",this.maxLineBytes,this.bytesSinceNewline,this.source));return}o(void 0,r)}};function Ee(n,e=W,t="SDK input",s){let o=n.endsWith(`
3
- `)?n.slice(0,-1):n,r=Buffer.byteLength(o,"utf8");if(r>e)throw new H("input",e,r,t,s)}var fs=8192,O=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}},Pe=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 U(this.options,this.diagnostics,"[ProcessTransport]")}create(e){return new n(lt(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} ${dt(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=gi(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 Or=Object.defineProperty;var xr=(n,e)=>{for(var t in e)Or(n,t,{get:e[t],enumerable:!0})};import{spawn as gi}from"child_process";import{createInterface as hi}from"readline";var qr=["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","SessionStart","SessionEnd","Stop","SubagentStart","SubagentStop","PreCompact","PostCompact","CwdChanged","InstructionsLoaded","FileChanged","PermissionRequest","PermissionDenied","WorktreeCreate","WorktreeRemove"],Nr=["clear","resume","logout","prompt_input_exit","other","bypass_permissions_disabled"],te=2e3,Vn=5e3;var rt="1.0.54";var Re=41,Wn=["Agent","AskUserQuestion","Bash","Edit","Glob","Grep","ImageGen","ImageSearch","NotebookEdit","Read","Skill","TaskCreate","TaskGet","TaskUpdate","TaskList","UpdateGoal","WebFetch","WebSearch","Write"],Jn=["TaskCreate","TaskGet","TaskUpdate","TaskList"],jr="QODER_FEATURE_TASKS";function Yn(n){let e=n[jr];if(e!=="0"&&e!=="false")return[...Wn];let t=new Set(Jn);return Wn.flatMap(s=>s===Jn[0]?["TodoWrite"]:t.has(s)?[]:[s])}import{chmod as ss,mkdtemp as Wr,rm as os,writeFile as Jr}from"fs/promises";import{existsSync as ct,mkdtempSync as Vr,readFileSync as Yr,rmSync as Xr,writeFileSync as Zr}from"fs";import{homedir as ei,tmpdir as rs}from"os";import{dirname as ps,join as G}from"path";import{fileURLToPath as ti}from"url";var Fr=/^[A-Za-z0-9_-]{1,64}$/,Ur=new Set(["mcp_list","mcp_get","mcp_call"]);function Lt(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(!Fr.test(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" has invalid exposedName "${e.exposedName}".`);if(Ur.has(e.exposedName))throw new Error(`MCP tool "${n}/${e.name}" cannot use reserved exposedName "${e.exposedName}".`)}}function Bt(n,e){let t={};for(let s of e)Lt(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 $t(n,e,t=e.tools??[]){let{tools:s,...o}=e,r=Bt(n,t);return{...o,...r?{toolOverrides:r}:{}}}function Xn(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]=$t(t,s,o)}return e}var Kr="global",Zn=Kr==="cn",Lr=Zn?"QODERCN_":"QODER_",zt=`${Lr}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 es=v.accessTokenEnv,it=v.serviceAccountEnv;function Br(n){return{type:"accessToken",accessToken:n}}function $r(n=es){return{type:"accessToken",accessToken:{envVar:n}}}function zr(){return{type:"qodercli"}}function Qr(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 Gr(n=it){return{type:"serviceAccount",serviceAccountKey:{envVar:n}}}function Hr(n){return{type:"jobToken",fetchJobToken:n}}var ts=["l1StaticCheck","l2LightweightScan","l3DeepScan"];function ns(n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError("securityScan must be an object.");let e=new Set(ts),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 ts){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 is="QODER_AGENT_SDK_ENTRYPOINT",as="QODER_AGENT_SDK_VERSION",us="QODER_SDK_AUTH_PAYLOAD_FILE",ni="sdk-ts",si=ti(import.meta.url),cs=ps(si),at=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"}},ut=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 ne(n){return/\.(js|mjs|tsx?|jsx)$/.test(n)}function se(){if(process.env.QODERCLI_PATH)return process.env.QODERCLI_PATH;let n=oi();if(n)return n;let e=ri();if(ct(e))return e;let t=ii();return t||v.cliCommands[0]}function oi(){for(let n of ms())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=G(n,"dist","_bundled",t);if(ct(s))return s}return null}function ri(){for(let n of ms())for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=[G(n,"node_modules",".bin",t),G(n,"..","..",".bin",t)];for(let o of s)if(ct(o))return o}return v.cliCommands[0]}function ii(){let n=process.env[v.cliHomeEnv]??ei();for(let e of v.cliCommands){let t=process.platform==="win32"?`${e}.exe`:e,s=G(n,v.configDirName,"local",t);if(ct(s))return s}return null}function ms(){let n=[G(cs,".."),G(cs,"..","..")];return[...new Set(n)]}function ai(){return{allow:[],ask:[],deny:[]}}function ls(n){return n.replace(/[^a-zA-Z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"")}function ui(n,e){if(e.startsWith("mcp__"))return e;let t=ls(n),s=e==="*"?"*":ls(e);if(!t||!s)throw new Error(`Invalid MCP tool policy name for server "${n}" and tool "${e}"`);return`mcp__${t}__${s}`}function ds(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 ci(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 U=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{Xr(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=ps(this.authPayloadPath);try{await os(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[is],delete t[as],delete t[us];for(let s of this.serviceAccountCredentialEnvVars())pi(t,s);if(t[is]=ni,t[as]=rt,this.authPayloadPath&&(t[us]=this.authPayloadPath),delete t.NODE_OPTIONS,this.options.vpcEndpoint!==void 0){let s=this.options.vpcEndpoint.trim();s?t[zt]=s:delete t[zt]}return t}serviceAccountCredentialEnvVars(){let e=this.options.auth;if(e?.type!=="serviceAccount")return[];let t=[it];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??Yn(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?ci(e):e}applySecurityScanSetting(e){let t=this.options.securityScan;t!==void 0&&(e.securityScan=ns(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]:[];ds(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]=$t(s,o,r)}return t}collectMcpPolicyPermissionRules(){let e=ai(),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=ui(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]]:[];ds(r,t[o]),s[o]=r}}readSettingsFile(e){let t=Yr(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=Vr(G(rs(),"qoder-agent-sdk-settings-"));let t=G(this.generatedSettingsDir,"settings.json");return Zr(t,JSON.stringify(e),"utf8"),t}async createAuthPayloadFile(e){let t=Qt(e,this.options.env),s=await Wr(G(rs(),"qoder-sdk-auth-"));try{await ss(s,448);let o=G(s,"payload.json");return await Jr(o,JSON.stringify(t),{mode:384}),await ss(o,384),this.diagnostics?.record(`${this.logPrefix} Auth payload created: type=${t.type}, path=${o}`),o}catch(o){throw await os(s,{recursive:!0,force:!0}).catch(()=>{}),o}}};function Qt(n,e){switch(n.type){case"accessToken":return{type:"accessToken",accessToken:di(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:li(n,e)}}}}function li(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 ut(t);return s}function di(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 at(t);return s}function pi(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 lt(n,e){let t={...n};for(let[s,o]of Object.entries(e))o!==void 0&&(t[s]=o);return t}var mi=new Set(["--mcp-config","--proxy","--settings"]);function dt(n){let e=[];for(let t=0;t<n.length;t+=1){let s=n[t];e.push(s),mi.has(s)&&t+1<n.length&&(e.push("[redacted]"),t+=1)}return e.join(" ")}import{Transform as fi}from"node:stream";var H=class extends Error{constructor(t,s,o,r,i){super(`${r} exceeded the ${s}-byte frame limit`+(t==="input"?". Reduce the input text or remove attachments and try again.":""));this.direction=t;this.limit=s;this.actualBytes=o;this.source=r;this.inputMessageUuid=i;this.name="FrameTooLargeError",this.code=t==="input"?"SDK_INPUT_TOO_LARGE":"SDK_OUTPUT_TOO_LARGE"}code},Ce=class extends Error{code;result;constructor(e){let t=e.subtype==="success"?e.result:e.errors?.filter(s=>s.trim().length>0).join(`
2
+ `);super(t?.trim()?t:"Qoder CLI initialization failed."),this.name="QoderCliInitializationError",this.code=e.error_code,this.result=e}},D=class extends Error{constructor(e="Operation was aborted"){super(e),this.name="AbortError"}},$e=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}},L=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",Ee=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 W=64*1024*1024,oe=class extends fi{constructor(t=W,s="SDK output"){super();this.maxLineBytes=t;this.source=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 H("output",this.maxLineBytes,this.bytesSinceNewline,this.source));return}this.bytesSinceNewline=0,i=a+1}if(this.bytesSinceNewline+=r.length-i,this.bytesSinceNewline>this.maxLineBytes){o(new H("output",this.maxLineBytes,this.bytesSinceNewline,this.source));return}o(void 0,r)}};function Pe(n,e=W,t="SDK input",s){let o=n.endsWith(`
3
+ `)?n.slice(0,-1):n,r=Buffer.byteLength(o,"utf8");if(r>e)throw new H("input",e,r,t,s)}var fs=8192,O=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}},Te=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 U(this.options,this.diagnostics,"[ProcessTransport]")}create(e){return new n(lt(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} ${dt(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=gi(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(`
4
4
  `)?e:e+`
5
- `;if(Ee(t,W,"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 se(W,"SDK process output");e.pipe(t);let s=hi({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??ot;this.closeTimer=setTimeout(()=>{this.closeTimer=void 0,!this.hasProcessStopped()&&(t("SIGTERM"),!this.hasProcessStopped()&&(this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.hasProcessStopped()||t("SIGKILL")},Vn),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===_e&&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>fs&&(this.stderrTail=this.stderrTail.slice(-fs))}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 O(o,{stderr:this.getStderrTail(),cause:e})}createProcessExitError(e,t){if(e!==_e){if(e!==0&&e!==null)return new O(`Qoder CLI process exited with code ${e}`,{exitCode:e,signal:t,stderr:this.getStderrTail()});if(t)return new O(`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??ne();if(te(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 yi(){switch("worker"){case"worker":return"worker";case"process":return"process"}return"process"}var le=yi();function gs(n){return typeof n=="object"&&n!==null&&typeof n.create=="function"}function pt(n,e){return n.create(e)}import{performance as hs}from"node:perf_hooks";async function P(n,e,t,s){let o=hs.now(),r=i=>{try{n?.recordClose?.({component:e,stage:t,outcome:i,elapsedMs:Math.max(0,Math.round(hs.now()-o)),...i==="failed"?{errorCode:"SDK_CLOSE_STAGE_FAILED"}:{}})}catch{}};r("started");try{let i=await s();return r("completed"),i}catch(i){throw r("failed"),i}}import{existsSync as Bi}from"fs";import{createInterface as $i}from"readline";import{Worker as zi}from"worker_threads";import{createHash as Si}from"node:crypto";import{existsSync as wi}from"node:fs";import{chmod as vi,lstat as ki,mkdir as $e,readFile as ys,readdir as bi,readlink as _i,rename as Ri,rm as mt,stat as Ci,symlink as Ei,writeFile as Ss}from"node:fs/promises";import{tmpdir as Pi,userInfo as Ti}from"node:os";import{basename as ws,dirname as Te,join as J,relative as Mi}from"node:path";var Ai="QODER_WORKER_RUNTIME_ASSET_ROOT",vs=/(^|[\\/])app\.asar([\\/]|$)/,Wt=".qoder-worker-runtime-ready";function ks(n){return vs.test(n)}function Jt(n){return ks(n)?n.replace(vs,(e,t,s)=>`${t}app.asar.unpacked${s}`):null}async function Me(n,e={}){let t=Jt(n);if(!e.forceMaterialize&&t){let u=Te(t);if(wi(t))return e.diagnostics?.record(`[WorkerTransport] Using asar-unpacked worker runtime: ${t}`),Ht(t,u,!1,Te(n))}if(!(e.forceMaterialize||ks(n))){let u=Te(n);return Ht(n,u,!1)}let o=Te(n),r=await Ii(o,n,{cacheDir:e.cacheDir,diagnostics:e.diagnostics}),i=Mi(o,n)||ws(n),a=J(r,i);return Ht(a,r,!0,o)}function Ht(n,e,t,s){return{runtimePath:n,runtimeRoot:e,materialized:t,sourceRuntimeRoot:s,env:{[Ai]:e}}}async function Ii(n,e,t){let s=await Di(n,e),o=t.cacheDir??qi(),r=J(o,s),i=J(r,Wt);if(await _s(i)===s)return r;let a=J(o,`.setup-${s}-${process.pid}-${Date.now()}`);await $e(o,{recursive:!0,mode:448}),await mt(a,{recursive:!0,force:!0}),await mt(r,{recursive:!0,force:!0}),t.diagnostics?.record(`[WorkerTransport] Materializing worker runtime: ${n} -> ${r}`);try{return await $e(a,{recursive:!0,mode:448}),await bs(n,a),await Ss(J(a,Wt),s,{mode:384}),await xi(a,r,s),r}catch(u){throw await mt(a,{recursive:!0,force:!0}).catch(()=>{}),u}}async function Di(n,e){let t=Si("sha256");t.update("qoder-worker-runtime-v1\0");let s=await Rs(J(n,"runtime-info.json"));if(s)t.update(s);else{t.update(e);let o=await Ci(e).catch(()=>null);o&&t.update(`${o.size}\0${o.mtimeMs}`)}return`runtime-${t.digest("hex").slice(0,24)}`}async function bs(n,e){let t=await bi(n,{withFileTypes:!0});await $e(e,{recursive:!0,mode:448});for(let s of t){let o=J(n,s.name),r=J(e,s.name);if(s.isDirectory()){await bs(o,r);continue}if(s.isSymbolicLink()){await $e(Te(r),{recursive:!0,mode:448}),await Ei(await _i(o),r);continue}if(!s.isFile())continue;let i=await Oi(o);await $e(Te(r),{recursive:!0,mode:448}),await Ss(r,await ys(o),{mode:i}),process.platform!=="win32"&&await vi(r,i)}}async function Oi(n){let e=((await ki(n)).mode||420)&511;if(process.platform==="win32")return e||420;let t=ws(n);return t==="rg"||t==="spawn-helper"||/\.(?:node|dylib|exe)$/.test(t)||/\.so(?:\.\d+)*$/.test(t)?493:e||420}async function xi(n,e,t){try{await Ri(n,e)}catch(s){if(await _s(J(e,Wt))===t){await mt(n,{recursive:!0,force:!0});return}throw s}}async function _s(n){let e=await Rs(n);return e?e.toString("utf8"):null}async function Rs(n){try{return await ys(n)}catch{return null}}function qi(){let n=Ni(Ti().username||process.env.USER||process.env.USERNAME||"user");return J(Pi(),`qoder-sdk-worker-runtime-${n}`)}function Ni(n){return n.replace(/[^a-zA-Z0-9._-]/g,"_")||"unknown"}var ji="QODER_WORKER_CWD";function ft(n,e){return{env:{...e.env,[ji]:e.cwd,...n.env},workerData:{...e.workerData??{},qoderWorkerRuntime:{cwd:e.cwd,runtimeRoot:n.runtimeRoot,materialized:n.materialized}}}}import{existsSync as Vt}from"node:fs";import{dirname as Fi,join as de}from"node:path";import{fileURLToPath as Ui}from"node:url";var Ki=Ui(import.meta.url),Yt=Fi(Ki);function oe(n){if(n)return n;let e=[];for(let t of Li())e.push(de(t,"dist","_worker","qoder-worker-runtime.obf.mjs"),de(t,"dist","_worker","qoder-worker-runtime.mjs"),de(t,"_worker","qoder-worker-runtime.obf.mjs"),de(t,"_worker","qoder-worker-runtime.mjs"));for(let t of e)if(Vt(t))return t;return e[0]??de(Yt,"..","_worker","qoder-worker-runtime.obf.mjs")}function Cs(n){let e=oe(n);if(Vt(e))return!0;let t=Jt(e);return t!==null&&Vt(t)}function Li(){let n=[de(Yt,".."),de(Yt,"..","..")];return[...new Set(n)]}var Es=8192,pe=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}},Ae=class n{static default=new n;options;constructor(e={}){this.options={...e}}create(e){return new Xt(lt(this.options,e))}},Xt=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 U(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=oe(this.options.pathToQoderWorkerRuntime),s;try{s=await Me(t,{diagnostics:this.diagnostics})}catch(a){throw new pe(`Failed to prepare Qoder worker runtime: ${t}`,{cause:a})}let o=s.runtimePath;if(!Bi(o))throw new pe(`Qoder worker runtime not found: ${o}`);if(this.closed){await this.cleanupLaunchArtifacts();return}let r=this.options.cwd??process.cwd(),i=ft(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: ${dt(e.args)}`),this.worker=new zi(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=>{this.ready=!1,this.observedExitCode=a;try{this.diagnostics?.recordClose?.({component:"worker",stage:"worker_exit_observed",outcome:"completed",elapsedMs:0,exitCode:a})}catch{}if(this.cleanupAbortListener(),this.clearCloseTimer(),this.recordWorkerExit(a),this.destroyWorkerStreams(this.worker),this.closed){a!==0&&this.recordSuppressedWorkerExit(a),this.cleanupLaunchArtifacts().catch(()=>{});return}a===_e&&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
+ `;if(Pe(t,W,"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 oe(W,"SDK process output");e.pipe(t);let s=hi({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??te;this.closeTimer=setTimeout(()=>{this.closeTimer=void 0,!this.hasProcessStopped()&&(t("SIGTERM"),!this.hasProcessStopped()&&(this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.hasProcessStopped()||t("SIGKILL")},Vn),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===Re&&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>fs&&(this.stderrTail=this.stderrTail.slice(-fs))}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 O(o,{stderr:this.getStderrTail(),cause:e})}createProcessExitError(e,t){if(e!==Re){if(e!==0&&e!==null)return new O(`Qoder CLI process exited with code ${e}`,{exitCode:e,signal:t,stderr:this.getStderrTail()});if(t)return new O(`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??se();if(ne(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 yi(){switch("worker"){case"worker":return"worker";case"process":return"process"}return"process"}var de=yi();function gs(n){return typeof n=="object"&&n!==null&&typeof n.create=="function"}function pt(n,e){return n.create(e)}import{performance as hs}from"node:perf_hooks";async function P(n,e,t,s){let o=hs.now(),r=i=>{try{n?.recordClose?.({component:e,stage:t,outcome:i,elapsedMs:Math.max(0,Math.round(hs.now()-o)),...i==="failed"?{errorCode:"SDK_CLOSE_STAGE_FAILED"}:{}})}catch{}};r("started");try{let i=await s();return r("completed"),i}catch(i){throw r("failed"),i}}import{existsSync as Bi}from"fs";import{createInterface as $i}from"readline";import{Worker as zi}from"worker_threads";import{createHash as Si}from"node:crypto";import{existsSync as wi}from"node:fs";import{chmod as vi,lstat as ki,mkdir as ze,readFile as ys,readdir as bi,readlink as _i,rename as Ri,rm as mt,stat as Ci,symlink as Ei,writeFile as Ss}from"node:fs/promises";import{tmpdir as Pi,userInfo as Ti}from"node:os";import{basename as ws,dirname as Me,join as J,relative as Mi}from"node:path";var Ai="QODER_WORKER_RUNTIME_ASSET_ROOT",vs=/(^|[\\/])app\.asar([\\/]|$)/,Wt=".qoder-worker-runtime-ready";function ks(n){return vs.test(n)}function Jt(n){return ks(n)?n.replace(vs,(e,t,s)=>`${t}app.asar.unpacked${s}`):null}async function Ae(n,e={}){let t=Jt(n);if(!e.forceMaterialize&&t){let u=Me(t);if(wi(t))return e.diagnostics?.record(`[WorkerTransport] Using asar-unpacked worker runtime: ${t}`),Ht(t,u,!1,Me(n))}if(!(e.forceMaterialize||ks(n))){let u=Me(n);return Ht(n,u,!1)}let o=Me(n),r=await Ii(o,n,{cacheDir:e.cacheDir,diagnostics:e.diagnostics}),i=Mi(o,n)||ws(n),a=J(r,i);return Ht(a,r,!0,o)}function Ht(n,e,t,s){return{runtimePath:n,runtimeRoot:e,materialized:t,sourceRuntimeRoot:s,env:{[Ai]:e}}}async function Ii(n,e,t){let s=await Di(n,e),o=t.cacheDir??qi(),r=J(o,s),i=J(r,Wt);if(await _s(i)===s)return r;let a=J(o,`.setup-${s}-${process.pid}-${Date.now()}`);await ze(o,{recursive:!0,mode:448}),await mt(a,{recursive:!0,force:!0}),await mt(r,{recursive:!0,force:!0}),t.diagnostics?.record(`[WorkerTransport] Materializing worker runtime: ${n} -> ${r}`);try{return await ze(a,{recursive:!0,mode:448}),await bs(n,a),await Ss(J(a,Wt),s,{mode:384}),await xi(a,r,s),r}catch(u){throw await mt(a,{recursive:!0,force:!0}).catch(()=>{}),u}}async function Di(n,e){let t=Si("sha256");t.update("qoder-worker-runtime-v1\0");let s=await Rs(J(n,"runtime-info.json"));if(s)t.update(s);else{t.update(e);let o=await Ci(e).catch(()=>null);o&&t.update(`${o.size}\0${o.mtimeMs}`)}return`runtime-${t.digest("hex").slice(0,24)}`}async function bs(n,e){let t=await bi(n,{withFileTypes:!0});await ze(e,{recursive:!0,mode:448});for(let s of t){let o=J(n,s.name),r=J(e,s.name);if(s.isDirectory()){await bs(o,r);continue}if(s.isSymbolicLink()){await ze(Me(r),{recursive:!0,mode:448}),await Ei(await _i(o),r);continue}if(!s.isFile())continue;let i=await Oi(o);await ze(Me(r),{recursive:!0,mode:448}),await Ss(r,await ys(o),{mode:i}),process.platform!=="win32"&&await vi(r,i)}}async function Oi(n){let e=((await ki(n)).mode||420)&511;if(process.platform==="win32")return e||420;let t=ws(n);return t==="rg"||t==="spawn-helper"||/\.(?:node|dylib|exe)$/.test(t)||/\.so(?:\.\d+)*$/.test(t)?493:e||420}async function xi(n,e,t){try{await Ri(n,e)}catch(s){if(await _s(J(e,Wt))===t){await mt(n,{recursive:!0,force:!0});return}throw s}}async function _s(n){let e=await Rs(n);return e?e.toString("utf8"):null}async function Rs(n){try{return await ys(n)}catch{return null}}function qi(){let n=Ni(Ti().username||process.env.USER||process.env.USERNAME||"user");return J(Pi(),`qoder-sdk-worker-runtime-${n}`)}function Ni(n){return n.replace(/[^a-zA-Z0-9._-]/g,"_")||"unknown"}var ji="QODER_WORKER_CWD";function ft(n,e){return{env:{...e.env,[ji]:e.cwd,...n.env},workerData:{...e.workerData??{},qoderWorkerRuntime:{cwd:e.cwd,runtimeRoot:n.runtimeRoot,materialized:n.materialized}}}}import{existsSync as Vt}from"node:fs";import{dirname as Fi,join as pe}from"node:path";import{fileURLToPath as Ui}from"node:url";var Ki=Ui(import.meta.url),Yt=Fi(Ki);function re(n){if(n)return n;let e=[];for(let t of Li())e.push(pe(t,"dist","_worker","qoder-worker-runtime.obf.mjs"),pe(t,"dist","_worker","qoder-worker-runtime.mjs"),pe(t,"_worker","qoder-worker-runtime.obf.mjs"),pe(t,"_worker","qoder-worker-runtime.mjs"));for(let t of e)if(Vt(t))return t;return e[0]??pe(Yt,"..","_worker","qoder-worker-runtime.obf.mjs")}function Cs(n){let e=re(n);if(Vt(e))return!0;let t=Jt(e);return t!==null&&Vt(t)}function Li(){let n=[pe(Yt,".."),pe(Yt,"..","..")];return[...new Set(n)]}var Es=8192,me=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}},Ie=class n{static default=new n;options;constructor(e={}){this.options={...e}}create(e){return new Xt(lt(this.options,e))}},Xt=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 U(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=re(this.options.pathToQoderWorkerRuntime),s;try{s=await Ae(t,{diagnostics:this.diagnostics})}catch(a){throw new me(`Failed to prepare Qoder worker runtime: ${t}`,{cause:a})}let o=s.runtimePath;if(!Bi(o))throw new me(`Qoder worker runtime not found: ${o}`);if(this.closed){await this.cleanupLaunchArtifacts();return}let r=this.options.cwd??process.cwd(),i=ft(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: ${dt(e.args)}`),this.worker=new zi(o,{argv:e.args,env:i.env,execArgv:this.options.execArgv??[],stdin:!0,stdout:!0,stderr:!0,workerData:i.workerData}),this.worker.on("message",a=>{if(!this.closed||this.options.closeGraceMs!==void 0||typeof a!="object"||a===null||!("type"in a)||a.type!=="qoder.runtime.closing"||!("timeoutMs"in a)||typeof a.timeoutMs!="number"||!Number.isFinite(a.timeoutMs)||a.timeoutMs<0||this.observedExitCode!==null)return;this.clearCloseTimer();let u=this.worker;this.closeTimer=setTimeout(()=>{u?.terminate().catch(()=>{})},Math.min(12e4,Math.max(te,a.timeoutMs+1e3))),this.closeTimer.unref?.()}),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=>{this.ready=!1,this.observedExitCode=a;try{this.diagnostics?.recordClose?.({component:"worker",stage:"worker_exit_observed",outcome:"completed",elapsedMs:0,exitCode:a})}catch{}if(this.cleanupAbortListener(),this.clearCloseTimer(),this.recordWorkerExit(a),this.destroyWorkerStreams(this.worker),this.closed){a!==0&&this.recordSuppressedWorkerExit(a),this.cleanupLaunchArtifacts().catch(()=>{});return}a===Re&&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(`
6
6
  `)?e:e+`
7
- `;if(Ee(t,W,"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 se(W,"SDK Worker output");e.pipe(t);let s=$i({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=P(this.diagnostics,"worker","close",()=>this.performClose()),this.closePromise.catch(()=>{})),this.closePromise}async performClose(){this.closed||(this.closed=!0,this.ready=!1,this.pendingInput=[],this.cleanupAbortListener()),this.initializePromise&&await P(this.diagnostics,"worker","initialize",()=>this.initializePromise).catch(()=>{});let e=this.worker;if(!e){await P(this.diagnostics,"worker","artifacts",()=>this.cleanupLaunchArtifacts());return}if(this.observedExitCode===null){this.endInput();let t=this.options.closeGraceMs??ot;this.closeTimer=setTimeout(()=>{P(this.diagnostics,"worker","terminate",()=>e.terminate()).catch(()=>{})},t),this.closeTimer.unref?.(),await P(this.diagnostics,"worker","worker_exit",()=>new Promise(s=>{if(this.observedExitCode!==null){s();return}e.once("exit",()=>s())}))}this.clearCloseTimer(),await P(this.diagnostics,"worker","artifacts",()=>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>Es&&(this.stderrTail=this.stderrTail.slice(-Es))}createWorkerError(e){return new pe(`Failed to start Qoder worker runtime: ${e.message}`,{stderr:this.getStderrTail(),cause:e})}createWorkerExitError(e){if(!(e===0||e===_e))return new pe(`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 gt=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 Qi,mkdirSync as Gi}from"fs";import{dirname as Hi}from"path";import{randomUUID as Wi}from"node:crypto";var Ji="QODER_AGENT_SDK_DEBUG";function Vi(n){return n.debugFile?!0:n.debug===!0||Xi(process.env[Ji])}function Yi(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 re=class{correlationId=Wi();onCloseDiagnostic;enabled;debugFile;stderr;constructor(e={}){this.onCloseDiagnostic=e.onCloseDiagnostic,this.enabled=Vi(e),this.debugFile=Yi(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)}recordClose(e){let t=Object.freeze({...e,correlationId:this.correlationId});this.record(`[SDK close] ${JSON.stringify(t)}`),queueMicrotask(()=>{try{Promise.resolve(this.onCloseDiagnostic?.(t)).catch(()=>{})}catch{}})}get filePath(){return this.debugFile}writeToFile(e,t){try{Gi(Hi(e),{recursive:!0}),Qi(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
+ `;if(Pe(t,W,"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 oe(W,"SDK Worker output");e.pipe(t);let s=$i({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=P(this.diagnostics,"worker","close",()=>this.performClose()),this.closePromise.catch(()=>{})),this.closePromise}async performClose(){this.closed||(this.closed=!0,this.ready=!1,this.pendingInput=[],this.cleanupAbortListener()),this.initializePromise&&await P(this.diagnostics,"worker","initialize",()=>this.initializePromise).catch(()=>{});let e=this.worker;if(!e){await P(this.diagnostics,"worker","artifacts",()=>this.cleanupLaunchArtifacts());return}if(this.observedExitCode===null){e.postMessage({type:"qoder.runtime.close"}),this.endInput();let t=this.options.closeGraceMs??te;this.closeTimer=setTimeout(()=>{P(this.diagnostics,"worker","terminate",()=>e.terminate()).catch(()=>{})},t),this.closeTimer.unref?.(),await P(this.diagnostics,"worker","worker_exit",()=>new Promise(s=>{if(this.observedExitCode!==null){s();return}e.once("exit",()=>s())}))}this.clearCloseTimer(),await P(this.diagnostics,"worker","artifacts",()=>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>Es&&(this.stderrTail=this.stderrTail.slice(-Es))}createWorkerError(e){return new me(`Failed to start Qoder worker runtime: ${e.message}`,{stderr:this.getStderrTail(),cause:e})}createWorkerExitError(e){if(!(e===0||e===Re))return new me(`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 gt=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 Qi,mkdirSync as Gi}from"fs";import{dirname as Hi}from"path";import{randomUUID as Wi}from"node:crypto";var Ji="QODER_AGENT_SDK_DEBUG";function Vi(n){return n.debugFile?!0:n.debug===!0||Xi(process.env[Ji])}function Yi(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 ie=class{correlationId=Wi();onCloseDiagnostic;enabled;debugFile;stderr;constructor(e={}){this.onCloseDiagnostic=e.onCloseDiagnostic,this.enabled=Vi(e),this.debugFile=Yi(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)}recordClose(e){let t=Object.freeze({...e,correlationId:this.correlationId});this.record(`[SDK close] ${JSON.stringify(t)}`),queueMicrotask(()=>{try{Promise.resolve(this.onCloseDiagnostic?.(t)).catch(()=>{})}catch{}})}get filePath(){return this.debugFile}writeToFile(e,t){try{Gi(Hi(e),{recursive:!0}),Qi(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}
8
8
  `}formatError(e){if(e===void 0)return"";if(e instanceof Error)return`
9
- ${e.stack??e.message}`;try{return` ${JSON.stringify(e)}`}catch{return` ${String(e)}`}}};import{randomUUID as fa}from"node:crypto";var Ps=["copy_text","helpful","not_helpful","create_branch_task","copy_markdown","add_reply_to_task"];var Ts=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ms(n){if(!Ts.test(n.uuid))throw new Error("uuid must be a UUID");if(!n.sessionId.trim())throw new Error("sessionId is required");if(!Ts.test(n.parentResultUuid))throw new Error("parentResultUuid must be a UUID");if(!Ps.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 ie=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 Zi}from"node:path";function Zt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ze(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 As(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 Is(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 Ds(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 ea(n){if(!Zt(n))throw new TypeError("resolveSessionArtifacts result artifacts must contain objects");let e=ze(n,"path");if(!Zi(e))throw new TypeError('resolveSessionArtifacts result field "path" must be absolute');let t=ze(n,"displayPath"),s=ze(n,"name"),o=As(n,"relativePath"),r=As(n,"mime"),i=Is(n,"size"),a=Is(n,"mtime"),u;if(n.group!==void 0){if(!Zt(n.group))throw new TypeError('resolveSessionArtifacts result field "group" must be an object');u={key:ze(n.group,"key"),name:ze(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:Ds(n,"additions"),deletions:Ds(n,"deletions"),isNew:n.isNew}}function Os(n){if(!Zt(n)||!Array.isArray(n.artifacts))throw new TypeError("resolveSessionArtifacts must return an object with an artifacts array");return{artifacts:n.artifacts.map(ea)}}var en="1.5.0";var ta=new Set(["default","acceptEdits","auto","bypassPermissions"]);function Qe(n){if(n===void 0)return;if(n==="yolo")return"bypassPermissions";if(typeof n=="string"&&ta.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 Ge(n){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`goalMaxTurns must be a positive safe integer, received ${String(n)}.`)}function xs(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 qs(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 Ns(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 na}from"crypto";function Us(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 sa=500,oa=1024*1024,ra=6e4,ht=class{constructor(e){this.options=e;this.holding=e.holdUntilFlush===!0}states=new Map;failures=[];holding;receivedEntryCount=0;enqueue(e){let t=ia(e.filePath),s=aa(e.entries);this.receivedEntryCount+=s.length;let o=Fs(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+=ca(s),!this.holding&&(this.options.flushMode==="eager"||r.entries.length>=sa||r.bytes>=oa)&&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 la(this.options.store,e.key,t,this.options.appendTimeoutMs??ra)}catch(s){this.failures.push(s),this.options.diagnostics?.record(`[SessionStore] append failed for ${Fs(e.key)}`,s),this.options.onMirrorError({type:"system",subtype:"mirror_error",error:s instanceof Error?s.message:String(s),key:{...e.key},uuid:na(),session_id:e.key.sessionId})}})}};function ia(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:js(r[1])};let i=js(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 ua(c),{projectKey:o,sessionId:i,subpath:c}}function aa(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 js(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 ua(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 Fs(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}function ca(n){return n.reduce((e,t)=>e+Buffer.byteLength(JSON.stringify(t))+1,0)}async function la(n,e,t,s){await da(n.append({...e},structuredClone(t)),s)}async function da(n,e){let t;n.catch(()=>{});try{await Promise.race([n,new Promise((s,o)=>{t=setTimeout(()=>o(new tn(e)),e)})])}finally{t!==void 0&&clearTimeout(t)}}var tn=class extends Error{constructor(e){super(`SessionStore append timed out after ${e}ms`),this.name="SessionStoreTimeoutError"}};function St(n){if(!me(n)||Array.isArray(n))return;let e=n.total_credits,t=n.model_usage;if(!nn(e)||e<0||!me(t)||Array.isArray(t))return;let s={};for(let[o,r]of Object.entries(t)){if(!me(r)||Array.isArray(r))continue;let i=r.credits;nn(i)&&i>=0&&(s[o]={credits:i})}return{total_credits:e,model_usage:s}}function wt(n){if(!me(n)||Array.isArray(n))return null;let e={};Ie(e,n,"userId"),Ie(e,n,"userType"),V(e,n,"totalUsagePercentage"),yt(e,n,"isHighestTier"),V(e,n,"expiresAt"),Ie(e,n,"upgradeUrl"),yt(e,n,"isQuotaExceeded"),yt(e,n,"isPlanQuotaProrated");let t=Ks(n.userQuota);t&&(e.userQuota=t);let s=pa(n.addOnQuota);s&&(e.addOnQuota=s);let o=ma(n.orgResourcePackage);return o&&(e.orgResourcePackage=o),e}function me(n){return typeof n=="object"&&n!==null}function nn(n){return typeof n=="number"&&Number.isFinite(n)}function sn(n){return Object.keys(n).length>0}function V(n,e,t){let s=e[t];nn(s)&&(n[t]=s)}function Ie(n,e,t){let s=e[t];typeof s=="string"&&(n[t]=s)}function yt(n,e,t){let s=e[t];typeof s=="boolean"&&(n[t]=s)}function Ks(n){if(!me(n)||Array.isArray(n))return;let e={};return V(e,n,"total"),V(e,n,"used"),V(e,n,"remaining"),V(e,n,"percentage"),Ie(e,n,"unit"),sn(e)?e:void 0}function pa(n){if(!me(n)||Array.isArray(n))return;let e=Ks(n)??{};return Ie(e,n,"detailUrl"),sn(e)?e:void 0}function ma(n){if(!me(n)||Array.isArray(n))return;let e={};return V(e,n,"used"),V(e,n,"cap"),V(e,n,"remaining"),V(e,n,"percentage"),yt(e,n,"available"),Ie(e,n,"unit"),sn(e)?e:void 0}function Ls(){return Math.random().toString(36).substring(2,15)}function Bs(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 $s(n,e){return{type:"control_response",response:{subtype:"success",request_id:n,response:e}}}function zs(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 Gs(n){return typeof n=="object"&&n!==null&&n.type==="control_request"}function Hs(n){return typeof n=="object"&&n!==null&&(n.type==="control_cancel_request"||n.type==="control_cancel")}function He(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 Ws(n){if(typeof n!="object"||n===null)return!1;let e=n.type;return e==="keepalive"||e==="keep_alive"}function Js(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_text"}function Vs(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_tool_use_summary"}function Ys(n){return typeof n=="object"&&n!==null&&n.type==="post_turn_summary"}function Xs(n){return typeof n=="object"&&n!==null&&n.type==="result"}var ga="<synthetic>";function ha(n){return n.type!=="assistant"||n.isApiErrorMessage===!0||n.message.model!==ga?n:{...n,isApiErrorMessage:!0}}var vt=class n{constructor(e,t,s,o,r,i,a,u,c,d,m,p,l,f,y,g,S,k="batched",h,M,T,X,R,Y,Le=!1,Ut){this.hostActionDirect=Le;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=M,this.diagnostics=c,this.controlRequestTimeoutMs=m??6e4,this.resolveModel=y,this.resolveModelTimeoutMs=g??500,this.memoryCallbacks=T,this.skillEvolutionCallbacks=X,this.hostActionFallback=Y,this.resolveSessionArtifacts=R,this.daemonAccountQueries=Ut,this.inputStream=new ie(()=>{this.close().catch(()=>{})}),S&&(this.transcriptMirrorBatcher=new ht({store:S,flushMode:k,holdUntilFlush:this.initConfig.requireSessionStoreForkBarrier===!0,diagnostics:c,onMirrorError:Z=>this.inputStream.enqueue(Z)})),this.readLoopPromise=this.readMessages().catch(Z=>{this.inputStream.error(Z)}),this.initializationPromise=this.startInitialization(),this.initializationPromise.catch(()=>{}),this.abortController){let Z=this.abortController.signal,et=()=>{this.failInitialization(new D),this.close().catch(()=>{})};Z.aborted?et():Z.addEventListener("abort",et,{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_RESUME_CAPABILITY="goal_resume_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;daemonAccountQueries;resolveStreamInitialization;initResponse;latestCommands=[];initializationPromise;rejectInitialization;resultMessage;pendingErrorResultExit=!1;readLoopPromise;closed=!1;authExpiredFired=!1;protocolHandshakeValidated=!1;cliCapabilities;customContextCapabilityWarningEmitted=!1;firstResultReceived=!1;sdkStartupTimingSent=!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(Us(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(Gs(t)){this.handleControlRequest(t).catch(o=>{this.diagnostics?.record("[QueryRunner] Error handling control request:",o)});continue}if(Hs(t)){this.handleControlCancelRequest(t);continue}if(Ws(t)||Js(t)||Vs(t)||Ys(t))continue;if(Xs(t)){await this.transcriptMirrorBatcher?.flush();let o=t;if(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.rejectInitialization&&this.resultMessage.is_error===!0){let r=this.resultMessage.terminal_reason;this.failInitialization(this.abortController?.signal.aborted||this.closed||r==="aborted_streaming"||r==="aborted_tools"||r==="abort"?new D:new Re(this.resultMessage))}this.isSingleTurn&&this.flushBeforeEndInput();continue}let s=ha(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.failInitialization(t),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(P(this.diagnostics,"query","memory_flush",()=>this.flushMemory())),this.initConfig.evolution?.skill!==void 0&&e.push(P(this.diagnostics,"query","skill_flush",()=>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 D;let s=`${t?.requestIdPrefix??""}${Ls()}`,o=Bs(s,e),r=t?.timeoutMs??this.controlRequestTimeoutMs,i=He(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})+`
10
- `)}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 D))};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 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)+`
11
- `),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)He(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=He(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=$s(t,i);this.transport.write(JSON.stringify(a)+`
9
+ ${e.stack??e.message}`;try{return` ${JSON.stringify(e)}`}catch{return` ${String(e)}`}}};import{randomUUID as fa}from"node:crypto";var Ps=["copy_text","helpful","not_helpful","create_branch_task","copy_markdown","add_reply_to_task"];var Ts=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ms(n){if(!Ts.test(n.uuid))throw new Error("uuid must be a UUID");if(!n.sessionId.trim())throw new Error("sessionId is required");if(!Ts.test(n.parentResultUuid))throw new Error("parentResultUuid must be a UUID");if(!Ps.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 ae=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 Zi}from"node:path";function Zt(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 As(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 Is(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 Ds(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 ea(n){if(!Zt(n))throw new TypeError("resolveSessionArtifacts result artifacts must contain objects");let e=Qe(n,"path");if(!Zi(e))throw new TypeError('resolveSessionArtifacts result field "path" must be absolute');let t=Qe(n,"displayPath"),s=Qe(n,"name"),o=As(n,"relativePath"),r=As(n,"mime"),i=Is(n,"size"),a=Is(n,"mtime"),u;if(n.group!==void 0){if(!Zt(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:Ds(n,"additions"),deletions:Ds(n,"deletions"),isNew:n.isNew}}function Os(n){if(!Zt(n)||!Array.isArray(n.artifacts))throw new TypeError("resolveSessionArtifacts must return an object with an artifacts array");return{artifacts:n.artifacts.map(ea)}}var en="1.5.0";var ta=new Set(["default","acceptEdits","auto","bypassPermissions"]);function Ge(n){if(n===void 0)return;if(n==="yolo")return"bypassPermissions";if(typeof n=="string"&&ta.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 He(n){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`goalMaxTurns must be a positive safe integer, received ${String(n)}.`)}function xs(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 qs(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 Ns(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 na}from"crypto";function Us(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 sa=500,oa=1024*1024,ra=6e4,ht=class{constructor(e){this.options=e;this.holding=e.holdUntilFlush===!0}states=new Map;failures=[];holding;receivedEntryCount=0;enqueue(e){let t=ia(e.filePath),s=aa(e.entries);this.receivedEntryCount+=s.length;let o=Fs(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+=ca(s),!this.holding&&(this.options.flushMode==="eager"||r.entries.length>=sa||r.bytes>=oa)&&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 la(this.options.store,e.key,t,this.options.appendTimeoutMs??ra)}catch(s){this.failures.push(s),this.options.diagnostics?.record(`[SessionStore] append failed for ${Fs(e.key)}`,s),this.options.onMirrorError({type:"system",subtype:"mirror_error",error:s instanceof Error?s.message:String(s),key:{...e.key},uuid:na(),session_id:e.key.sessionId})}})}};function ia(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:js(r[1])};let i=js(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 ua(c),{projectKey:o,sessionId:i,subpath:c}}function aa(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 js(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 ua(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 Fs(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}function ca(n){return n.reduce((e,t)=>e+Buffer.byteLength(JSON.stringify(t))+1,0)}async function la(n,e,t,s){await da(n.append({...e},structuredClone(t)),s)}async function da(n,e){let t;n.catch(()=>{});try{await Promise.race([n,new Promise((s,o)=>{t=setTimeout(()=>o(new tn(e)),e)})])}finally{t!==void 0&&clearTimeout(t)}}var tn=class extends Error{constructor(e){super(`SessionStore append timed out after ${e}ms`),this.name="SessionStoreTimeoutError"}};function St(n){if(!fe(n)||Array.isArray(n))return;let e=n.total_credits,t=n.model_usage;if(!nn(e)||e<0||!fe(t)||Array.isArray(t))return;let s={};for(let[o,r]of Object.entries(t)){if(!fe(r)||Array.isArray(r))continue;let i=r.credits;nn(i)&&i>=0&&(s[o]={credits:i})}return{total_credits:e,model_usage:s}}function wt(n){if(!fe(n)||Array.isArray(n))return null;let e={};De(e,n,"userId"),De(e,n,"userType"),V(e,n,"totalUsagePercentage"),yt(e,n,"isHighestTier"),V(e,n,"expiresAt"),De(e,n,"upgradeUrl"),yt(e,n,"isQuotaExceeded"),yt(e,n,"isPlanQuotaProrated");let t=Ks(n.userQuota);t&&(e.userQuota=t);let s=pa(n.addOnQuota);s&&(e.addOnQuota=s);let o=ma(n.orgResourcePackage);return o&&(e.orgResourcePackage=o),e}function fe(n){return typeof n=="object"&&n!==null}function nn(n){return typeof n=="number"&&Number.isFinite(n)}function sn(n){return Object.keys(n).length>0}function V(n,e,t){let s=e[t];nn(s)&&(n[t]=s)}function De(n,e,t){let s=e[t];typeof s=="string"&&(n[t]=s)}function yt(n,e,t){let s=e[t];typeof s=="boolean"&&(n[t]=s)}function Ks(n){if(!fe(n)||Array.isArray(n))return;let e={};return V(e,n,"total"),V(e,n,"used"),V(e,n,"remaining"),V(e,n,"percentage"),De(e,n,"unit"),sn(e)?e:void 0}function pa(n){if(!fe(n)||Array.isArray(n))return;let e=Ks(n)??{};return De(e,n,"detailUrl"),sn(e)?e:void 0}function ma(n){if(!fe(n)||Array.isArray(n))return;let e={};return V(e,n,"used"),V(e,n,"cap"),V(e,n,"remaining"),V(e,n,"percentage"),yt(e,n,"available"),De(e,n,"unit"),sn(e)?e:void 0}function Ls(){return Math.random().toString(36).substring(2,15)}function Bs(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 $s(n,e){return{type:"control_response",response:{subtype:"success",request_id:n,response:e}}}function zs(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 Gs(n){return typeof n=="object"&&n!==null&&n.type==="control_request"}function Hs(n){return typeof n=="object"&&n!==null&&(n.type==="control_cancel_request"||n.type==="control_cancel")}function We(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 Ws(n){if(typeof n!="object"||n===null)return!1;let e=n.type;return e==="keepalive"||e==="keep_alive"}function Js(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_text"}function Vs(n){return typeof n=="object"&&n!==null&&n.type==="streamlined_tool_use_summary"}function Ys(n){return typeof n=="object"&&n!==null&&n.type==="post_turn_summary"}function Xs(n){return typeof n=="object"&&n!==null&&n.type==="result"}var ga="<synthetic>";function ha(n){return n.type!=="assistant"||n.isApiErrorMessage===!0||n.message.model!==ga?n:{...n,isApiErrorMessage:!0}}var vt=class n{constructor(e,t,s,o,r,i,a,u,c,d,m,p,l,f,y,g,S,k="batched",h,M,T,X,R,Y,Be=!1,Ut){this.hostActionDirect=Be;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=M,this.diagnostics=c,this.controlRequestTimeoutMs=m??6e4,this.resolveModel=y,this.resolveModelTimeoutMs=g??500,this.memoryCallbacks=T,this.skillEvolutionCallbacks=X,this.hostActionFallback=Y,this.resolveSessionArtifacts=R,this.daemonAccountQueries=Ut,this.inputStream=new ae(()=>{this.close().catch(()=>{})}),S&&(this.transcriptMirrorBatcher=new ht({store:S,flushMode:k,holdUntilFlush:this.initConfig.requireSessionStoreForkBarrier===!0,diagnostics:c,onMirrorError:Z=>this.inputStream.enqueue(Z)})),this.readLoopPromise=this.readMessages().catch(Z=>{this.inputStream.error(Z)}),this.initializationPromise=this.startInitialization(),this.initializationPromise.catch(()=>{}),this.abortController){let Z=this.abortController.signal,tt=()=>{this.failInitialization(new D),this.close().catch(()=>{})};Z.aborted?tt():Z.addEventListener("abort",tt,{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_RESUME_CAPABILITY="goal_resume_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;daemonAccountQueries;resolveStreamInitialization;initResponse;latestCommands=[];initializationPromise;rejectInitialization;resultMessage;pendingErrorResultExit=!1;readLoopPromise;closed=!1;authExpiredFired=!1;protocolHandshakeValidated=!1;cliCapabilities;customContextCapabilityWarningEmitted=!1;firstResultReceived=!1;sdkStartupTimingSent=!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(Us(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(Gs(t)){this.handleControlRequest(t).catch(o=>{this.diagnostics?.record("[QueryRunner] Error handling control request:",o)});continue}if(Hs(t)){this.handleControlCancelRequest(t);continue}if(Ws(t)||Js(t)||Vs(t)||Ys(t))continue;if(Xs(t)){await this.transcriptMirrorBatcher?.flush();let o=t;if(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.rejectInitialization&&this.resultMessage.is_error===!0){let r=this.resultMessage.terminal_reason;this.failInitialization(this.abortController?.signal.aborted||this.closed||r==="aborted_streaming"||r==="aborted_tools"||r==="abort"?new D:new Ce(this.resultMessage))}this.isSingleTurn&&this.flushBeforeEndInput();continue}let s=ha(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.failInitialization(t),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(P(this.diagnostics,"query","memory_flush",()=>this.flushMemory())),this.initConfig.evolution?.skill!==void 0&&e.push(P(this.diagnostics,"query","skill_flush",()=>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 D;let s=`${t?.requestIdPrefix??""}${Ls()}`,o=Bs(s,e),r=t?.timeoutMs??this.controlRequestTimeoutMs,i=We(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})+`
10
+ `)}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 D))};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 Ee({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)+`
11
+ `),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 Ee({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)We(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=We(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=$s(t,i);this.transport.write(JSON.stringify(a)+`
12
12
  `),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}=ya(i),c=zs(t,a,u);this.transport.write(JSON.stringify(c)+`
13
- `),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 D}validateProtocolHandshake(e){if(this.protocolHandshakeValidated)return;this.protocolHandshakeValidated=!0;let t=e.protocol_version,s=en;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=Zs(t),r=Zs(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 D;return new Promise((s,o)=>{let r=()=>{o(new D)};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=He(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 Os(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(xs(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 Be(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.startInitialization()),this.initializationPromise}startInitialization(){let e=new Promise((s,o)=>{this.rejectInitialization=o}),t=this.initConfig.resolveInitializationFromStream?this.waitForStreamInitialization():this.performInitialize();return Promise.race([t,e]).then(s=>(this.rejectInitialization=void 0,this.initResponse=s,this.cliCapabilities=new Set(s.capabilities??[]),s),s=>{throw this.rejectInitialization=void 0,s})}failInitialization(e){let t=this.rejectInitialization;if(t){this.rejectInitialization=void 0,t(e);for(let s of this.pendingRequests.values())s.reject(e);this.pendingRequests.clear()}}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.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=Qe(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 L(n.GOAL_MAX_TURNS_CAPABILITY);if(this.initConfig.hostActions!==void 0&&!this.cliCapabilities?.has(n.HOST_ACTION_CAPABILITY))throw new L(n.HOST_ACTION_CAPABILITY);if(this.initConfig.planMode!==void 0){if(!this.cliCapabilities?.has(n.PLAN_MODE_CAPABILITY))throw new L(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 L(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()=>{let t,s=!1;try{t=e[Symbol.asyncIterator]();let o=async()=>{let a=await t.next();return s=a.done===!0,{...a,submittedAtMs:Date.now()}},[,r]=await Promise.all([this.initialize(),o()]),i=0;for(;!r.done;r=await o()){let a=r.value,u=r.submittedAtMs;if(this.closed)break;i+=1;let d=Object.prototype.hasOwnProperty.call(a,"custom_context")?a.custom_context:this.initConfig.customContext,m=typeof a.uuid=="string"&&a.uuid.trim().length>0?a.uuid:fa(),p={...a,uuid:m,extra:{...!this.sdkStartupTimingSent&&this.initConfig.sdkStartedAtMs!==void 0?{started_at_ms:this.initConfig.sdkStartedAtMs}:{},submitted_at_ms:u,...a.extra},...d===void 0?{}:{custom_context:d}};if(this.pendingErrorResultExit=!1,p.selected_skills!==void 0&&p.selected_skills.length>0&&!this.cliCapabilities?.has(n.SELECTED_SKILLS_CAPABILITY))throw new L(n.SELECTED_SKILLS_CAPABILITY);d!==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"));try{await this.transport.write(JSON.stringify(p)+`
14
- `)}catch(l){throw l instanceof H&&l.direction==="input"?new H(l.direction,l.limit,l.actualBytes,l.source,m):l}this.sdkStartupTimingSent=!0,this.recordOutboundSessionMessage(p)}i>0&&await this.waitForFirstResult(),(!this.isSingleTurn||!this.firstResultReceived)&&await this.flushBeforeEndInput()}catch(o){this.diagnostics?.record("[QueryRunner] streamInput error:",o),(!(o instanceof Re)||o.result!==this.resultMessage)&&this.inputStream.error(o instanceof Error?o:new Error(String(o))),this.endTransportInput()}finally{t&&!s&&Promise.resolve().then(()=>t?.return?.()).catch(o=>{this.diagnostics?.record("[QueryRunner] input cleanup error:",o)})}})().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=Ms(e);if(!this.hostActionDirect&&!this.closed&&!this.inputEnded&&this.transport.isReady())try{await this.transport.write(`${JSON.stringify(t)}
15
- `);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&&Ge(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 Ge(s.goal_max_turns),s.goal_max_turns}async resumeGoal(){await this.requireCliCapability(n.GOAL_RESUME_CAPABILITY);let e={subtype:"resume_goal"};return(await this.request(e))?.goal??null}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 L(e)}async setPermissionMode(e){let t=this.initConfig.independentPlanModeControls===!0?Qe(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){if(this.daemonAccountQueries)return await this.daemonAccountQueries.getModels(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(){if(this.daemonAccountQueries)try{return await this.daemonAccountQueries.getByokConfig()??null}catch{return null}try{return(await this.request({type:"get_byok_config"}))?.providers??null}catch{return null}}async validateByokModel(e){if(this.daemonAccountQueries)try{let t=await this.daemonAccountQueries.validateByokModel(e);return typeof t=="boolean"?t:null}catch{return null}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(e){if(e&&!e.uid?.trim())throw new Error("BYOK_UID_REQUIRED");return this.daemonAccountQueries&&!e?this.daemonAccountQueries.listByokConfigs():(await this.requireCliCapability(e?"byok_config_read_v1":n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"list_byok_configs",...e?{uid:e.uid}:{}})).configs)}async createByokConfig(e){return this.daemonAccountQueries?this.daemonAccountQueries.createByokConfig(e):(await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"create_byok_config",config:e})).config)}async updateByokConfig(e){if(this.daemonAccountQueries){await this.daemonAccountQueries.updateByokConfig(e);return}await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"update_byok_config",config:e})}async deleteByokConfig(e){if(this.daemonAccountQueries){await this.daemonAccountQueries.deleteByokConfig(e);return}await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"delete_byok_config",target:e})}async checkByokConfig(e){return this.daemonAccountQueries?this.daemonAccountQueries.checkByokConfig(e):(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(){if(this.daemonAccountQueries)try{let t=await this.daemonAccountQueries.accountInfo();if(t&&Object.keys(t).length>0)return t}catch{}else 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(){if(this.daemonAccountQueries)try{return await this.daemonAccountQueries.getUsageInfo()}catch{return null}try{let e=await this.request({type:"get_usage_info"}),t=wt(e?.usage),s=St(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 L("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=Xn(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=P(this.diagnostics,"query","close",()=>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 P(this.diagnostics,"query","flush",()=>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 P(this.diagnostics,"query","mcp_close",()=>o.close())}catch(r){this.diagnostics?.record(`[QueryRunner] error closing SDK MCP transport "${s}":`,r)}Ns(s,e,this.pendingMcpResponses)}let t;try{await P(this.diagnostics,"query","transport_close",()=>this.transport.close())}catch(s){t={error:s}}try{await P(this.diagnostics,"query","read_loop",()=>this.readLoopPromise)}catch{}if(await P(this.diagnostics,"query","transcript_flush",()=>this.flushTranscriptMirrorForLifecycle()),t)throw t.error}async[Symbol.asyncDispose](){await this.close()}};function ya(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 Zs(n){let e=/^(\d+)\.(\d+)(?:\.\d+)?(?:[-+].*)?$/.exec(n);return e?{major:Number(e[1]),minor:Number(e[2])}:null}var kt=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 eo}from"crypto";var Sa="QODER_CLOUD_AGENT_API_BASE",wa="https://api.qoder.com/api/v1/cloud",ae={agentMessage:"agent.message",modelRequestEnd:"span.model_request_end",idle:"session.status_idle",error:"session.error",terminated:"terminated",userMessage:"user.message",userInterrupt:"user.interrupt"},va=1024,to=1*1024*1024,no=4*1024*1024,ka=8*1024,rn=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"}},bt=class extends Error{code="cloud_agent_auth_requires_access_token";constructor(){super("options.experimentalCloudAgent requires PAT authentication via accessToken() or accessTokenFromEnv()."),this.name="CloudAgentUnsupportedAuthError"}},an=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}},ba=new Set(["abortController","auth","experimentalCloudAgent","debug","debugFile","stderr","env","includePartialMessages","onAuthExpired"]);function io(n){if(!n.experimentalCloudAgent)return;let e=Object.keys(n).filter(r=>n[r]!==void 0&&!ba.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 bt;let{agent:t,session:s}=n.experimentalCloudAgent;if(t&&De(t)&&on(t))throw new Error("options.experimentalCloudAgent.agent must specify either id or create, not both.");if(s&&De(s)&&on(s))throw new Error("options.experimentalCloudAgent.session must specify either id or create, not both.");if(s&&De(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&&De(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||!on(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 De(n){return"id"in n&&n.id!==void 0}function on(n){return"create"in n&&n.create!==void 0}function ao(n){return new un(n)}var un=class{experimentalCloudAgent;inputStream;abortController=new AbortController;accessToken;apiBase;diagnostics;onAuthExpired;sessionReadyPromise;readLoopPromise;sseConnected=ja();startedAt=Date.now();closed=!1;authExpiredFired=!1;sessionId;assistantTextParts=[];currentTurnId;lastSseEventId;hasCurrentTurn=!1;pendingTurnEvents=[];latestUsage=ro();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=_a(e.options.auth,e.options.env),this.apiBase=Ra(),this.inputStream=new ie(()=>{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(qa(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=xa(t);this.beginPendingTurn();let o=await this.postSessionEvents([{type:ae.userMessage,content:s}]);this.postedMessages+=1,this.activateTurn(o.find(r=>r.type===ae.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:ae.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&&De(e))t=e.id;else{let s=await this.resolveAgentId(),o=e.create,r=await this.requestJson("/sessions",{method:"POST",body:{agent:s,...Ea(o)}});t=so(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(De(e))return e.id;let t=await this.requestJson("/agents",{method:"POST",body:Ca(e.create)});return so(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 Na(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 oo(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(`
13
+ `),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 D}validateProtocolHandshake(e){if(this.protocolHandshakeValidated)return;this.protocolHandshakeValidated=!0;let t=e.protocol_version,s=en;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=Zs(t),r=Zs(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 D;return new Promise((s,o)=>{let r=()=>{o(new D)};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=We(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 Os(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(xs(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 $e(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.startInitialization()),this.initializationPromise}startInitialization(){let e=new Promise((s,o)=>{this.rejectInitialization=o}),t=this.initConfig.resolveInitializationFromStream?this.waitForStreamInitialization():this.performInitialize();return Promise.race([t,e]).then(s=>(this.rejectInitialization=void 0,this.initResponse=s,this.cliCapabilities=new Set(s.capabilities??[]),s),s=>{throw this.rejectInitialization=void 0,s})}failInitialization(e){let t=this.rejectInitialization;if(t){this.rejectInitialization=void 0,t(e);for(let s of this.pendingRequests.values())s.reject(e);this.pendingRequests.clear()}}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.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=Ge(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 L(n.GOAL_MAX_TURNS_CAPABILITY);if(this.initConfig.hostActions!==void 0&&!this.cliCapabilities?.has(n.HOST_ACTION_CAPABILITY))throw new L(n.HOST_ACTION_CAPABILITY);if(this.initConfig.planMode!==void 0){if(!this.cliCapabilities?.has(n.PLAN_MODE_CAPABILITY))throw new L(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 L(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()=>{let t,s=!1;try{t=e[Symbol.asyncIterator]();let o=async()=>{let a=await t.next();return s=a.done===!0,{...a,submittedAtMs:Date.now()}},[,r]=await Promise.all([this.initialize(),o()]),i=0;for(;!r.done;r=await o()){let a=r.value,u=r.submittedAtMs;if(this.closed)break;i+=1;let d=Object.prototype.hasOwnProperty.call(a,"custom_context")?a.custom_context:this.initConfig.customContext,m=typeof a.uuid=="string"&&a.uuid.trim().length>0?a.uuid:fa(),p={...a,uuid:m,extra:{...!this.sdkStartupTimingSent&&this.initConfig.sdkStartedAtMs!==void 0?{started_at_ms:this.initConfig.sdkStartedAtMs}:{},submitted_at_ms:u,...a.extra},...d===void 0?{}:{custom_context:d}};if(this.pendingErrorResultExit=!1,p.selected_skills!==void 0&&p.selected_skills.length>0&&!this.cliCapabilities?.has(n.SELECTED_SKILLS_CAPABILITY))throw new L(n.SELECTED_SKILLS_CAPABILITY);d!==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"));try{await this.transport.write(JSON.stringify(p)+`
14
+ `)}catch(l){throw l instanceof H&&l.direction==="input"?new H(l.direction,l.limit,l.actualBytes,l.source,m):l}this.sdkStartupTimingSent=!0,this.recordOutboundSessionMessage(p)}i>0&&await this.waitForFirstResult(),(!this.isSingleTurn||!this.firstResultReceived)&&await this.flushBeforeEndInput()}catch(o){this.diagnostics?.record("[QueryRunner] streamInput error:",o),(!(o instanceof Ce)||o.result!==this.resultMessage)&&this.inputStream.error(o instanceof Error?o:new Error(String(o))),this.endTransportInput()}finally{t&&!s&&Promise.resolve().then(()=>t?.return?.()).catch(o=>{this.diagnostics?.record("[QueryRunner] input cleanup error:",o)})}})().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=Ms(e);if(!this.hostActionDirect&&!this.closed&&!this.inputEnded&&this.transport.isReady())try{await this.transport.write(`${JSON.stringify(t)}
15
+ `);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&&He(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 He(s.goal_max_turns),s.goal_max_turns}async resumeGoal(){await this.requireCliCapability(n.GOAL_RESUME_CAPABILITY);let e={subtype:"resume_goal"};return(await this.request(e))?.goal??null}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 L(e)}async setPermissionMode(e){let t=this.initConfig.independentPlanModeControls===!0?Ge(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){if(this.daemonAccountQueries)return await this.daemonAccountQueries.getModels(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(){if(this.daemonAccountQueries)try{return await this.daemonAccountQueries.getByokConfig()??null}catch{return null}try{return(await this.request({type:"get_byok_config"}))?.providers??null}catch{return null}}async validateByokModel(e){if(this.daemonAccountQueries)try{let t=await this.daemonAccountQueries.validateByokModel(e);return typeof t=="boolean"?t:null}catch{return null}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(e){if(e&&!e.uid?.trim())throw new Error("BYOK_UID_REQUIRED");return this.daemonAccountQueries&&!e?this.daemonAccountQueries.listByokConfigs():(await this.requireCliCapability(e?"byok_config_read_v1":n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"list_byok_configs",...e?{uid:e.uid}:{}})).configs)}async createByokConfig(e){return this.daemonAccountQueries?this.daemonAccountQueries.createByokConfig(e):(await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),(await this.request({type:"create_byok_config",config:e})).config)}async updateByokConfig(e){if(this.daemonAccountQueries){await this.daemonAccountQueries.updateByokConfig(e);return}await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"update_byok_config",config:e})}async deleteByokConfig(e){if(this.daemonAccountQueries){await this.daemonAccountQueries.deleteByokConfig(e);return}await this.requireCliCapability(n.BYOK_CONFIG_MANAGEMENT_CAPABILITY),await this.request({type:"delete_byok_config",target:e})}async checkByokConfig(e){return this.daemonAccountQueries?this.daemonAccountQueries.checkByokConfig(e):(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(){if(this.daemonAccountQueries)try{let t=await this.daemonAccountQueries.accountInfo();if(t&&Object.keys(t).length>0)return t}catch{}else 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(){if(this.daemonAccountQueries)try{return await this.daemonAccountQueries.getUsageInfo()}catch{return null}try{let e=await this.request({type:"get_usage_info"}),t=wt(e?.usage),s=St(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 L("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=Xn(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=P(this.diagnostics,"query","close",()=>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 P(this.diagnostics,"query","flush",()=>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 P(this.diagnostics,"query","mcp_close",()=>o.close())}catch(r){this.diagnostics?.record(`[QueryRunner] error closing SDK MCP transport "${s}":`,r)}Ns(s,e,this.pendingMcpResponses)}let t;try{await P(this.diagnostics,"query","transport_close",()=>this.transport.close())}catch(s){t={error:s}}try{await P(this.diagnostics,"query","read_loop",()=>this.readLoopPromise)}catch{}if(await P(this.diagnostics,"query","transcript_flush",()=>this.flushTranscriptMirrorForLifecycle()),t)throw t.error}async[Symbol.asyncDispose](){await this.close()}};function ya(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 Zs(n){let e=/^(\d+)\.(\d+)(?:\.\d+)?(?:[-+].*)?$/.exec(n);return e?{major:Number(e[1]),minor:Number(e[2])}:null}var kt=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 eo}from"crypto";var Sa="QODER_CLOUD_AGENT_API_BASE",wa="https://api.qoder.com/api/v1/cloud",ue={agentMessage:"agent.message",modelRequestEnd:"span.model_request_end",idle:"session.status_idle",error:"session.error",terminated:"terminated",userMessage:"user.message",userInterrupt:"user.interrupt"},va=1024,to=1*1024*1024,no=4*1024*1024,ka=8*1024,rn=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"}},bt=class extends Error{code="cloud_agent_auth_requires_access_token";constructor(){super("options.experimentalCloudAgent requires PAT authentication via accessToken() or accessTokenFromEnv()."),this.name="CloudAgentUnsupportedAuthError"}},an=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}},ba=new Set(["abortController","auth","experimentalCloudAgent","debug","debugFile","stderr","env","includePartialMessages","onAuthExpired"]);function io(n){if(!n.experimentalCloudAgent)return;let e=Object.keys(n).filter(r=>n[r]!==void 0&&!ba.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 bt;let{agent:t,session:s}=n.experimentalCloudAgent;if(t&&Oe(t)&&on(t))throw new Error("options.experimentalCloudAgent.agent must specify either id or create, not both.");if(s&&Oe(s)&&on(s))throw new Error("options.experimentalCloudAgent.session must specify either id or create, not both.");if(s&&Oe(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&&Oe(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||!on(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 Oe(n){return"id"in n&&n.id!==void 0}function on(n){return"create"in n&&n.create!==void 0}function ao(n){return new un(n)}var un=class{experimentalCloudAgent;inputStream;abortController=new AbortController;accessToken;apiBase;diagnostics;onAuthExpired;sessionReadyPromise;readLoopPromise;sseConnected=ja();startedAt=Date.now();closed=!1;authExpiredFired=!1;sessionId;assistantTextParts=[];currentTurnId;lastSseEventId;hasCurrentTurn=!1;pendingTurnEvents=[];latestUsage=ro();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=_a(e.options.auth,e.options.env),this.apiBase=Ra(),this.inputStream=new ae(()=>{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(qa(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=xa(t);this.beginPendingTurn();let o=await this.postSessionEvents([{type:ue.userMessage,content:s}]);this.postedMessages+=1,this.activateTurn(o.find(r=>r.type===ue.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:ue.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&&Oe(e))t=e.id;else{let s=await this.resolveAgentId(),o=e.create,r=await this.requestJson("/sessions",{method:"POST",body:{agent:s,...Ea(o)}});t=so(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(Oe(e))return e.id;let t=await this.requestJson("/agents",{method:"POST",body:Ca(e.create)});return so(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 Na(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 oo(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(`
16
16
  `))!==-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>to&&(this.diagnostics?.record(`[cloud-agent] SSE line exceeded ${to} 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:Ma(t.data.join(`
17
- `))}),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>no){this.diagnostics?.record(`[cloud-agent] SSE event data exceeded ${no} 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=B(e.data,"type")??e.event,s=B(e.data,"turn_id"),o={type:"cloud_agent_event",event:t,id:e.id,data:e.data,uuid:e.id??eo(),session_id:this.sessionId??B(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 ae.agentMessage:{let s=Ia(We(e.data,"content"));s&&this.assistantTextParts.push(s);return}case ae.modelRequestEnd:this.captureUsage(e.data);return;case ae.idle:this.idleSeen=!0,this.finishIfIdle();return;case ae.error:this.emitErrorResult(e),this.finish();return;case ae.terminated:this.resultEmitted||this.emitSuccessResult(),this.finish();return}}beginPendingTurn(){this.currentTurnId=void 0,this.hasCurrentTurn=!1,this.pendingTurnEvents=[],this.assistantTextParts=[],this.latestUsage=ro(),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>=va&&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(B(e.data,"error")??B(_t(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:eo(),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 Pa(s)}captureUsage(e){let t=_t(e,"usage");if(!t)return;this.latestUsage=Da(this.latestUsage,t);let s=q(e,"total_cost_usd")??q(e,"cost_usd")??q(t,"total_cost_usd")??q(t,"cost_usd");s!==void 0&&(this.totalCostUsd+=s);let o=B(e,"model")??B(t,"model");if(o){let r=this.latestModelUsage[o]?.costUSD??0;this.latestModelUsage[o]=Oa(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 oo(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 _a(n,e){if(n?.type!=="accessToken")throw new bt;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 rn(t);return s}function Ra(){return process.env[Sa]?.replace(/\/+$/,"")??wa}function Ca(n){return cn({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 Ea(n){return cn({title:n.title,environment_id:n.environment_id,resources:n.resources?.map(e=>cn({...e})),vault_ids:n.vault_ids,memory_store_ids:n.memory_store_ids})}function cn(n){return Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))}function so(n,e){let t=B(n,"id");if(!t)throw new Error(`${e} response did not include an id.`);return t}function Pa(n){let e=Aa(n,"data");return e?e.flatMap(t=>t===null||typeof t!="object"||Array.isArray(t)?[]:[{id:B(t,"id"),turnId:B(t,"turn_id"),type:B(t,"type")}]):[]}async function oo(n){let e=await Ta(n,ka);return new an(n.status,e||n.statusText||"unknown error")}async function Ta(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 Ma(n){if(n.length===0)return{};try{return JSON.parse(n)}catch{return n}}function _t(n,e){let t=We(n,e);return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function Aa(n,e){let t=We(n,e);return Array.isArray(t)?t:void 0}function B(n,e){let t=We(n,e);return typeof t=="string"?t:void 0}function q(n,e){let t=We(n,e);return typeof t=="number"&&Number.isFinite(t)?t:void 0}function We(n,e){if(!(n===null||typeof n!="object"||Array.isArray(n)))return n[e]}function Ia(n){return typeof n=="string"?n:Array.isArray(n)&&n.map(t=>uo(t)?t.text:"").filter(Boolean).join("")||void 0}function Da(n,e){let t=_t(e,"cache_creation"),s=_t(e,"server_tool_use");return{...n,cache_creation:{ephemeral_1h_input_tokens:q(t,"ephemeral_1h_input_tokens")??n.cache_creation.ephemeral_1h_input_tokens,ephemeral_5m_input_tokens:q(t,"ephemeral_5m_input_tokens")??n.cache_creation.ephemeral_5m_input_tokens},cache_creation_input_tokens:q(e,"cache_creation_input_tokens")??n.cache_creation_input_tokens,cache_read_input_tokens:q(e,"cache_read_input_tokens")??n.cache_read_input_tokens,input_tokens:q(e,"input_tokens")??n.input_tokens,output_tokens:q(e,"output_tokens")??n.output_tokens,server_tool_use:{web_fetch_requests:q(s,"web_fetch_requests")??n.server_tool_use.web_fetch_requests,web_search_requests:q(s,"web_search_requests")??n.server_tool_use.web_search_requests}}}function Oa(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 xa(n){let e=n.message.content;return typeof e=="string"?e:Array.isArray(e)?e.map(t=>uo(t)?t.text:JSON.stringify(t)).join(`
18
- `):JSON.stringify(e)}function uo(n){return n!==null&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text=="string"}function qa(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 ro(){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 Na(n,e){e.aborted||await new Promise(t=>{let s=setTimeout(t,n);e.addEventListener("abort",()=>{clearTimeout(s),t()},{once:!0})})}function ja(){let n,e;return{promise:new Promise((s,o)=>{n=s,e=o}),resolve:n,reject:e}}import{access as za,chmod as go,cp as Qa,mkdtemp as Ga,mkdir as ho,realpath as yo,rm as po,writeFile as Ha}from"fs/promises";import{homedir as Wa,tmpdir as Ja}from"os";import{dirname as Va,isAbsolute as So,join as fe,relative as Ya,resolve as dn,sep as Xa}from"path";import{homedir as Fa}from"os";import{join as lo}from"path";var Ua=v.configDirName,Ka=v.cliHomeEnv,La=v.configDirEnv,co=200;function Ba(){return process.env[Ka]||Fa()}function ln(){let n=process.env[La];return n||lo(Ba(),Ua)}function Oe(){return lo(ln(),"projects")}function $a(n){let e=5381;for(let t=0;t<n.length;t++)e=e*33^n.charCodeAt(t);return e}function N(n){let e=n.replace(/[^a-zA-Z0-9]/g,"-");if(e.length<=co)return e;let t=Math.abs($a(n)).toString(36);return`${e.slice(0,co)}-${t}`}var Za=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,eu=6e4;async function wo(n){if(n.resume===void 0&&!n.continue)return;let e=N(await su(n.cwd)),t=n.loadTimeoutMs??eu,s=n.resume!==void 0?n.resume:await ou(n.store,e,t);if(s===void 0||!Za.test(s))return;let o={projectKey:e,sessionId:s},r=await mo(n.store,o,t);if(!r)return;let i=n.store.listSubkeys?await pn(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(!iu(c)){console.warn(`[SessionStore] skipping unsafe subpath from listSubkeys: ${String(c)}`);continue}let d=await mo(n.store,{...o,subpath:c},t);d&&a.push({subpath:c,entries:d})}let u;try{u=await Ga(fe(Ja(),"qoder-session-store-")),await go(u,448),u=await yo(u),await nu(tu(n.env),u);let c=fe(u,"projects",e),d=fe(c,s);await ho(c,{recursive:!0,mode:448}),await fo(fe(c,`${s}.jsonl`),r);for(let{subpath:p,entries:l}of a){let f=au(d,`${p}.jsonl`),y=l.filter(S=>S.type==="agent_metadata"),g=l.filter(S=>S.type!=="agent_metadata");if(g.length>0&&await fo(f,g),y.length>0){let S={...y.at(-1)};delete S.type,await vo(f.slice(0,-6)+".meta.json",JSON.stringify(S))}}let m=u;return{configDir:m,projectKey:e,sessionId:s,cleanup:async()=>{await po(m,{recursive:!0,force:!0})}}}catch(c){throw u!==void 0&&await po(u,{recursive:!0,force:!0}),c}}function tu(n){let e=n?.[v.cliHomeEnv]??process.env[v.cliHomeEnv]??Wa();return dn(n?.[v.configDirEnv]??process.env[v.configDirEnv]??fe(e,v.configDirName))}async function nu(n,e){for(let t of[".auth","oauth_creds.json"]){let s=fe(n,t);try{await za(s),await Qa(s,fe(e,t),{recursive:!0,force:!1,preserveTimestamps:!0})}catch(o){if(o.code!=="ENOENT")throw o}}}async function su(n){let e=dn(n??process.cwd());try{return await yo(e)}catch{return e}}async function ou(n,e,t){if(!n.listSessions)throw new Error("sessionStore.listSessions() is required when options.continue is true");let s=await pn(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 mo(n,e,t){let s=await pn(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)=>ru(o,r))}}function ru(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 iu(n){return!(typeof n!="string"||!n||n.includes("\0")||n.includes("\\")||So(n)||/^[a-z]:/i.test(n)||n.replaceAll("\\","/").split("/").some(e=>!e||e==="."||e===".."))}function au(n,e){let t=dn(n,e),s=Ya(n,t);if(s===""||s===".."||s.startsWith(`..${Xa}`)||So(s))throw new Error(`SessionStore subpath escapes the session: ${e}`);return t}async function fo(n,e){let t=e.map(s=>JSON.stringify(s)).join(`
17
+ `))}),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>no){this.diagnostics?.record(`[cloud-agent] SSE event data exceeded ${no} 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=B(e.data,"type")??e.event,s=B(e.data,"turn_id"),o={type:"cloud_agent_event",event:t,id:e.id,data:e.data,uuid:e.id??eo(),session_id:this.sessionId??B(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 ue.agentMessage:{let s=Ia(Je(e.data,"content"));s&&this.assistantTextParts.push(s);return}case ue.modelRequestEnd:this.captureUsage(e.data);return;case ue.idle:this.idleSeen=!0,this.finishIfIdle();return;case ue.error:this.emitErrorResult(e),this.finish();return;case ue.terminated:this.resultEmitted||this.emitSuccessResult(),this.finish();return}}beginPendingTurn(){this.currentTurnId=void 0,this.hasCurrentTurn=!1,this.pendingTurnEvents=[],this.assistantTextParts=[],this.latestUsage=ro(),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>=va&&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(B(e.data,"error")??B(_t(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:eo(),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 Pa(s)}captureUsage(e){let t=_t(e,"usage");if(!t)return;this.latestUsage=Da(this.latestUsage,t);let s=q(e,"total_cost_usd")??q(e,"cost_usd")??q(t,"total_cost_usd")??q(t,"cost_usd");s!==void 0&&(this.totalCostUsd+=s);let o=B(e,"model")??B(t,"model");if(o){let r=this.latestModelUsage[o]?.costUSD??0;this.latestModelUsage[o]=Oa(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 oo(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 _a(n,e){if(n?.type!=="accessToken")throw new bt;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 rn(t);return s}function Ra(){return process.env[Sa]?.replace(/\/+$/,"")??wa}function Ca(n){return cn({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 Ea(n){return cn({title:n.title,environment_id:n.environment_id,resources:n.resources?.map(e=>cn({...e})),vault_ids:n.vault_ids,memory_store_ids:n.memory_store_ids})}function cn(n){return Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))}function so(n,e){let t=B(n,"id");if(!t)throw new Error(`${e} response did not include an id.`);return t}function Pa(n){let e=Aa(n,"data");return e?e.flatMap(t=>t===null||typeof t!="object"||Array.isArray(t)?[]:[{id:B(t,"id"),turnId:B(t,"turn_id"),type:B(t,"type")}]):[]}async function oo(n){let e=await Ta(n,ka);return new an(n.status,e||n.statusText||"unknown error")}async function Ta(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 Ma(n){if(n.length===0)return{};try{return JSON.parse(n)}catch{return n}}function _t(n,e){let t=Je(n,e);return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function Aa(n,e){let t=Je(n,e);return Array.isArray(t)?t:void 0}function B(n,e){let t=Je(n,e);return typeof t=="string"?t:void 0}function q(n,e){let t=Je(n,e);return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Je(n,e){if(!(n===null||typeof n!="object"||Array.isArray(n)))return n[e]}function Ia(n){return typeof n=="string"?n:Array.isArray(n)&&n.map(t=>uo(t)?t.text:"").filter(Boolean).join("")||void 0}function Da(n,e){let t=_t(e,"cache_creation"),s=_t(e,"server_tool_use");return{...n,cache_creation:{ephemeral_1h_input_tokens:q(t,"ephemeral_1h_input_tokens")??n.cache_creation.ephemeral_1h_input_tokens,ephemeral_5m_input_tokens:q(t,"ephemeral_5m_input_tokens")??n.cache_creation.ephemeral_5m_input_tokens},cache_creation_input_tokens:q(e,"cache_creation_input_tokens")??n.cache_creation_input_tokens,cache_read_input_tokens:q(e,"cache_read_input_tokens")??n.cache_read_input_tokens,input_tokens:q(e,"input_tokens")??n.input_tokens,output_tokens:q(e,"output_tokens")??n.output_tokens,server_tool_use:{web_fetch_requests:q(s,"web_fetch_requests")??n.server_tool_use.web_fetch_requests,web_search_requests:q(s,"web_search_requests")??n.server_tool_use.web_search_requests}}}function Oa(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 xa(n){let e=n.message.content;return typeof e=="string"?e:Array.isArray(e)?e.map(t=>uo(t)?t.text:JSON.stringify(t)).join(`
18
+ `):JSON.stringify(e)}function uo(n){return n!==null&&typeof n=="object"&&"type"in n&&n.type==="text"&&"text"in n&&typeof n.text=="string"}function qa(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 ro(){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 Na(n,e){e.aborted||await new Promise(t=>{let s=setTimeout(t,n);e.addEventListener("abort",()=>{clearTimeout(s),t()},{once:!0})})}function ja(){let n,e;return{promise:new Promise((s,o)=>{n=s,e=o}),resolve:n,reject:e}}import{access as za,chmod as go,cp as Qa,mkdtemp as Ga,mkdir as ho,realpath as yo,rm as po,writeFile as Ha}from"fs/promises";import{homedir as Wa,tmpdir as Ja}from"os";import{dirname as Va,isAbsolute as So,join as ge,relative as Ya,resolve as dn,sep as Xa}from"path";import{homedir as Fa}from"os";import{join as lo}from"path";var Ua=v.configDirName,Ka=v.cliHomeEnv,La=v.configDirEnv,co=200;function Ba(){return process.env[Ka]||Fa()}function ln(){let n=process.env[La];return n||lo(Ba(),Ua)}function xe(){return lo(ln(),"projects")}function $a(n){let e=5381;for(let t=0;t<n.length;t++)e=e*33^n.charCodeAt(t);return e}function N(n){let e=n.replace(/[^a-zA-Z0-9]/g,"-");if(e.length<=co)return e;let t=Math.abs($a(n)).toString(36);return`${e.slice(0,co)}-${t}`}var Za=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,eu=6e4;async function wo(n){if(n.resume===void 0&&!n.continue)return;let e=N(await su(n.cwd)),t=n.loadTimeoutMs??eu,s=n.resume!==void 0?n.resume:await ou(n.store,e,t);if(s===void 0||!Za.test(s))return;let o={projectKey:e,sessionId:s},r=await mo(n.store,o,t);if(!r)return;let i=n.store.listSubkeys?await pn(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(!iu(c)){console.warn(`[SessionStore] skipping unsafe subpath from listSubkeys: ${String(c)}`);continue}let d=await mo(n.store,{...o,subpath:c},t);d&&a.push({subpath:c,entries:d})}let u;try{u=await Ga(ge(Ja(),"qoder-session-store-")),await go(u,448),u=await yo(u),await nu(tu(n.env),u);let c=ge(u,"projects",e),d=ge(c,s);await ho(c,{recursive:!0,mode:448}),await fo(ge(c,`${s}.jsonl`),r);for(let{subpath:p,entries:l}of a){let f=au(d,`${p}.jsonl`),y=l.filter(S=>S.type==="agent_metadata"),g=l.filter(S=>S.type!=="agent_metadata");if(g.length>0&&await fo(f,g),y.length>0){let S={...y.at(-1)};delete S.type,await vo(f.slice(0,-6)+".meta.json",JSON.stringify(S))}}let m=u;return{configDir:m,projectKey:e,sessionId:s,cleanup:async()=>{await po(m,{recursive:!0,force:!0})}}}catch(c){throw u!==void 0&&await po(u,{recursive:!0,force:!0}),c}}function tu(n){let e=n?.[v.cliHomeEnv]??process.env[v.cliHomeEnv]??Wa();return dn(n?.[v.configDirEnv]??process.env[v.configDirEnv]??ge(e,v.configDirName))}async function nu(n,e){for(let t of[".auth","oauth_creds.json"]){let s=ge(n,t);try{await za(s),await Qa(s,ge(e,t),{recursive:!0,force:!1,preserveTimestamps:!0})}catch(o){if(o.code!=="ENOENT")throw o}}}async function su(n){let e=dn(n??process.cwd());try{return await yo(e)}catch{return e}}async function ou(n,e,t){if(!n.listSessions)throw new Error("sessionStore.listSessions() is required when options.continue is true");let s=await pn(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 mo(n,e,t){let s=await pn(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)=>ru(o,r))}}function ru(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 iu(n){return!(typeof n!="string"||!n||n.includes("\0")||n.includes("\\")||So(n)||/^[a-z]:/i.test(n)||n.replaceAll("\\","/").split("/").some(e=>!e||e==="."||e===".."))}function au(n,e){let t=dn(n,e),s=Ya(n,t);if(s===""||s===".."||s.startsWith(`..${Xa}`)||So(s))throw new Error(`SessionStore subpath escapes the session: ${e}`);return t}async function fo(n,e){let t=e.map(s=>JSON.stringify(s)).join(`
19
19
  `);await vo(n,t?`${t}
20
- `:"")}async function vo(n,e){await ho(Va(n),{recursive:!0,mode:448}),await Ha(n,e,{encoding:"utf8",mode:384}),await go(n,384)}async function pn(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 uu=/^(?:qoder(?:cli|clicn|cn)?-)?worker-runtime(?:\.obf)?\.mjs$/i;function cu(n){let e=n.replace(/\\/g,"/").split("/").at(-1)??"";return uu.test(e)}function xe(n,e,t=process.env){let s=n.pathToQoderCLIExecutable;return s?cu(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 ko from"node:path";function qe(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function Je(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function lu(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(qe(s.id,`options.memory.generation.roots[${t}].id`),qe(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){qe(s.indexFile,`options.memory.generation.roots[${t}].indexFile`);let o=s.indexFile.replaceAll("\\","/");if(ko.posix.isAbsolute(o)||ko.win32.isAbsolute(s.indexFile)||o.split("/").includes(".."))throw new TypeError(`options.memory.generation.roots[${t}].indexFile must stay within its root`)}}}function du(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(qe(s.id,`options.memory.consumption.files[${t}].id`),qe(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 bo(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 Je(n.generation?.onResult,"options.memory.generation.onResult"),Je(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");lu(s.roots),s.prompt!==void 0&&qe(s.prompt,"options.memory.generation.prompt"),Je(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(Je(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(du(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"');Je(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 Rt=10;function pu(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function Ct(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function _o(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 mu(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&&pu(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");Ct(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=_o(n.turnComplete.reviewThreshold);if(Ct(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 Ro(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=_o(o?.reviewThreshold);return e?.enabled===!1?(Ct(e?.onResult,"options.evolution.skill.generation.onResult"),{callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}}):(Ct(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=mu(e);return t.config?.enabled===!1?{callbacks:t.callbacks}:{config:{requester:"sdk",mode:"custom",generation:t.config},callbacks:t.callbacks}}import{spawn as Bu}from"node:child_process";import{join as $u}from"node:path";import{createInterface as ku}from"node:readline";var hn="daemon_queries_v1",w=class extends Error{code="DAEMON_PROTOCOL_ERROR";constructor(e){super(e),this.name="DaemonProtocolError"}};function yn(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":gu(t);break;case"control_response":hu(t);break;case"status_event":fu(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"),!Su(t.type))throw new w(`unknown daemon message type: ${String(t.type)}`);yu(t),Sn(t)}return t}function Po(n){let e=JSON.stringify(n);return yn(e),e}function To(n,e){let t=e.response.response;switch(n){case"initialize":{j(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"),wu(s,"capabilities"),s}case"open_session":{let s=fn(e,"open_session response");return mn(t,"open_session"),{session_id:s}}case"list_sessions":{j(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())Eo(_(i,`sessions[${r}]`),`sessions[${r}]`);return s}case"rename_session":{fn(e,"rename_session response");let s=_(t,"rename_session response");return C(s,["session"],"rename_session response"),Eo(_(s.session,"rename_session session"),"rename_session session"),s}case"close_session":return fn(e,`${n} response`),mn(t,n),null;case"delete_session":case"shutdown":case"update_byok_config":case"delete_byok_config":return j(e,`${n} response`),mn(t,n),null;case"get_models":return j(e,`${n} response`),Et(t,n,"models");case"get_byok_config":return j(e,`${n} response`),Et(t,n,"providers");case"list_byok_configs":return j(e,`${n} response`),Et(t,n,"configs");case"list_plugins":return j(e,`${n} response`),Et(t,n,"plugins");case"validate_byok_model":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success"],`${n} response`),gn(s,"success"),s}case"create_byok_config":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["config"],`${n} response`),_(s.config,`${n} response config`),s}case"account_info":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["account"],`${n} response`),_(s.account,`${n} response account`),s}case"check_byok_config":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success","error","code","requestId","details"],`${n} response`),gn(s,"success"),Co(s,["error","code","requestId"]),s.details!==void 0&&_(s.details,`${n} response details`),s}case"get_usage_info":{j(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 fu(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 gu(n){C(n,["type","request_id","session_id","request"],"control_request frame"),E(n,"request_id"),Sn(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 hu(n){C(n,["type","session_id","response"],"control_response frame"),Sn(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&&gn(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 Et(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 Eo(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 mn(n,e){if(n!==void 0)throw new w(`${e} success must omit response`)}function fn(n,e){let t=n;try{return E(t,"session_id")}catch{throw new w(`${e} requires a valid session_id`)}}function j(n,e){if(Object.hasOwn(n,"session_id"))throw new w(`${e} must not include session_id`)}function Sn(n){let e=n;e.session_id!==void 0&&E(e,"session_id")}function yu(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 Su(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 gn(n,e){let t=n[e];if(typeof t!="boolean")throw new w(`${e} must be a boolean`);return t}function wu(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 Pt=class{constructor(e,t){this.connection=e;this.options=t}messages=new ie;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=vu(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=Mo(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.record(`session opened cwd=${this.options.cwd??"(inherit)"} workerArgs=${this.options.workerArgs.length}`),this.closed){await this.releaseSessionOnce(t);return}this.flushingPendingMessages=!0;try{for(;this.pendingMessages.length>0;){let s=this.pendingMessages.map(o=>Mo(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;this.record("session failed, releasing",e),t!==void 0&&this.startRelease(t),this.fail(e)}record(e,t){let s=this.sessionId;this.options.diagnostics?.record(`[DaemonSession]${s!==void 0?` sessionId=${s}`:""} ${e}`,t)}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.initializePromise&&await this.initializePromise.catch(()=>{});try{this.releasePromise?await this.releasePromise:this.sessionId&&await this.releaseSessionOnce(this.sessionId)}catch(e){throw this.record("close handshake failed",e),this.markClosed(),this.messages.error(e),e}this.record("closed"),this.markClosed(),this.messages.done()}markClosed(){this.closed||(this.closed=!0,this.cleanup())}cleanup(){this.cleaned||(this.cleaned=!0,this.options.cleanup?.())}};function vu(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 Mo(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 vn="multi_session_v2",Ao="session_title_sync_v1",Io="session_delete_v1";var bu=3e4,kn=3e4,_u=125e3,Ru=12e4,Cu=5e3,Eu=6e4,Pu=1024,Tu=64,Mu=8*1024*1024,Au=256,Iu=32*1024*1024,Du=new Set(["daemon.auth.fetch_job_token","daemon.auth.fetch_service_account_token"]),Tt=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}},ge=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}},Mt=class{input;requestHandler;pendingRequests=new Map;timedOutRequestIds=new Set;activeInboundRequestIds=new Set;sessions=new Map;closedSessionIds=new Set;sessionCwds=new Map;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;describeUnexpectedClose;diagnostics;constructor(e){if(this.input=e.input,this.requestHandler=e.requestHandler,this.describeUnexpectedClose=e.describeUnexpectedClose,this.diagnostics=e.diagnostics,this.maxFrameBytes=e.maxFrameBytes??W,!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??bu,r=this.request("initialize",{daemon_protocol_version:2,sdk_version:e,capabilities:[vn,...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(vn))throw new w(`daemon is missing required capability: ${vn}`);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 Pt(this,{...e,diagnostics:this.diagnostics})}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){let s=await this.request("open_session",e,t,void 0,Ru);return e.cwd!==void 0&&this.sessionCwds.set(s.session_id,e.cwd),s.session_id}async listSessions(e){return(await this.request("list_sessions",e===void 0?{}:{cwd:e},void 0,void 0,_u,"request")).sessions}renameSession(e,t,s){if(!this.capabilities.has(Ao))return Promise.reject(new w(`daemon is missing required capability: ${Ao}`));let o=s??this.sessionCwds.get(e);return this.request("rename_session",o===void 0?{title:t}:{title:t,cwd:o},void 0,e,kn)}sendSessionMessage(e){return this.writeFrame(e)}async closeSession(e){try{await this.request("close_session",{},void 0,e,kn)}finally{this.sessions.delete(e),this.closedSessionIds.add(e)}}async deleteSession(e,t){if(!this.capabilities.has(Io))throw new w(`daemon is missing required capability: ${Io}`);let s=t??this.sessionCwds.get(e);await this.request("delete_session",s===void 0?{local_session_id:e}:{local_session_id:e,cwd:s},void 0,void 0,kn)}query(e,t){return this.capabilities.has(hn)?this.request(e,t,void 0,void 0,Eu,"request"):Promise.reject(new w(`daemon is missing required capability: ${hn}`))}async shutdown(e=Cu){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()}}async resolveUnexpectedClose(){if(!this.describeUnexpectedClose)return new Error("Daemon connection closed");try{return await this.describeUnexpectedClose()??new Error("Daemon connection closed")}catch{return new Error("Daemon connection closed")}}fail(e,t=!0){let s=e instanceof Error?e:new Error(String(e));if(!this.failure){this.failure=s,this.diagnostics?.record(`[DaemonConnection] connection failed pendingRequests=${this.pendingRequests.size} sessions=${this.sessions.size}`,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(this.diagnostics?.record(`[DaemonConnection] request timeout method=${e} requestId=${a}${o!==void 0?` sessionId=${o}`:""} timeoutMs=${r} scope=${i}`),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.diagnostics?.record(`[DaemonConnection] request sent method=${e} requestId=${a}${o!==void 0?` sessionId=${o}`:""}${r!==void 0?` timeoutMs=${r}`:""}`),this.writeFrame(u).catch(p=>{let l=this.pendingRequests.get(a);l?.timeout&&clearTimeout(l.timeout),this.pendingRequests.delete(a),this.diagnostics?.record(`[DaemonConnection] request write failed method=${e} requestId=${a}`,p),d(p),l?.sessionTransport&&this.failIfSessionMessagesAreOrphaned()})})}async readOutput(e){let t=new se(this.maxFrameBytes,"SDK daemon output");e.pipe(t);let s=ku({input:t,crlfDelay:1/0,terminal:!1});try{for await(let o of s){if(!o.trim())continue;let r=Ou(o);r!==void 0&&this.rejectLegacyInitialize(r)||this.acceptFrame(yn(o))}(!this.stopping||this.pendingRequests.size>0)&&this.fail(await this.resolveUnexpectedClose(),!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=xu(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>=Pu){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 Tt({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=To(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>Tu||r+o>Mu||this.pendingSessionMessageFrameCount+1>Au||this.pendingSessionMessageByteCount+o>Iu)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 ge?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(qu(e.data)))}writeFrame(e){let t;try{t=`${Po(e)}
21
- `,Ee(t,this.maxFrameBytes,"SDK daemon input",e.type==="user"&&"uuid"in e&&typeof e.uuid=="string"?e.uuid:void 0)}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 Ou(n){let e;try{e=JSON.parse(n)}catch{return}if(!Do(e)||!Oo(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(!(!Do(t)||!Oo(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 Do(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Oo(n,e){return Object.keys(n).length===e.length&&e.every(t=>Object.hasOwn(n,t))}function xu(n){let e=Du.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 qu(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 O(s,{exitCode:o,signal:r,stderr:i})}var Nu=3e4;function xo(n,e=Nu){return Lu(e,"callbackTimeoutMs"),async t=>{switch(t.request.type){case"daemon.auth.fetch_job_token":return ju(n,t,e);case"daemon.auth.fetch_service_account_token":return Fu(n,t,e);default:throw F("METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${t.request.type}`)}}}async function ju(n,e,t){if(n.type!=="jobToken")throw F("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host job token callback is not configured");let s=qo(e,["reason","session_id"]),o=No(s.reason),r=Uu(s.session_id,"session_id"),i=new AbortController;try{let a=await jo(()=>n.fetchJobToken({requestId:e.request_id,reason:o,sessionId:r},{signal:i.signal}),t,i);if(!a||typeof a.token!="string"||!a.token)throw F("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback did not provide a token");return{token:a.token}}catch(a){throw a instanceof ge?a:F("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback failed",!0)}}async function Fu(n,e,t){if(n.type!=="serviceAccount"||typeof n.fetchServiceAccountToken!="function")throw F("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host Service Account token callback is not configured");let s=qo(e,["reason","required_scopes"]);No(s.reason),Ku(s.required_scopes,"required_scopes");let o=new AbortController;try{let r=await jo(()=>n.fetchServiceAccountToken(),t,o);if(!r||typeof r.token!="string"||!r.token)throw F("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 F("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 ge?r:F("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback failed",!0)}}function qo(n,e){let t=Object.keys(n.request).find(s=>s!=="type"&&!e.includes(s));if(t)throw F("DAEMON_AUTH_INVALID_REQUEST",`request contains unknown field: ${t}`);return n.request}function No(n){if(n!=="initial"&&n!=="unauthorized")throw F("DAEMON_AUTH_INVALID_REQUEST","reason must be initial or unauthorized");return n}function Uu(n,e){if(n!==void 0){if(typeof n!="string"||!n)throw F("DAEMON_AUTH_INVALID_REQUEST",`${e} must be a non-empty string`);return n}}function Ku(n,e){if(!Array.isArray(n)||n.some(t=>typeof t!="string"))throw F("DAEMON_AUTH_INVALID_REQUEST",`${e} must be an array of strings`);return n}async function jo(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 Lu(n,e){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`${e} must be a positive integer`)}function F(n,e,t=!1){return new ge({code:n,message:e,retryable:t})}var zu="QODER_AGENT_SDK_DAEMON",Qu="QODER_AGENT_SDK_DAEMON_IDLE_TIMEOUT_MS",Gu="ELECTRON_RUN_AS_NODE",Fo="--sdk",Hu=30*6e4,At=2e3,Uo=8192,Ko=255,Bo=new WeakMap;function Cn(n){return Bo.get(n)}async function En(n){let e=n.workerIdleTimeoutMs??Hu;Ju(e),Vu(n.initializeTimeoutMs);let t=new U({auth:n.auth,env:n.env,proxy:n.proxy}),s=await t.prepare(),o=Qt(n.auth,n.env),r=await Yu(n.pathToQoderCLIExecutable),i={...s.env,...r.env,[zu]:"1",[Qu]:String(e)},a,u=new re({debug:n.debug,debugFile:n.debugFile??Pn(n),stderr:n.stderr});try{a=await Rn.spawn({command:r.command,args:r.args,env:i,stderrHandler:n.stderr}),u.record(`[Daemon] spawned pid=${a.process.pid} idleTimeoutMs=${e}`);let c=new Mt({input:a.process.stdin,output:a.process.stdout,requestHandler:xo(n.auth),diagnostics:u,describeUnexpectedClose:()=>a.describeUnexpectedClose()});a.setConnection(c);let d=Date.now();await c.initialize(rt,{capabilities:["session_delete_v1"],auth:o,...n.initializeTimeoutMs===void 0?{}:{timeoutMs:n.initializeTimeoutMs}}),u.record(`[Daemon] initialized in ${Date.now()-d}ms`),await t.cleanupAuthPayload();let m=new bn(c,a);return Bo.set(m,{hostActionLaunch:{proxy:n.proxy,cliPath:n.pathToQoderCLIExecutable,env:n.env},auth:n.auth,transportProvider:new _n(c,s.env)}),m}catch(c){throw await t.cleanupAuthPayload(),await a?.stop().catch(()=>{}),c}}var bn=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(e){return this.requireReady(),(await this.connection.listSessions(e)).map(Lo)}async renameSession(e,t,s){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");let o=Wu(t),r=await this.connection.renameSession(e,o,s);return Lo(r.session)}async deleteSession(e,t){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");await this.connection.deleteSession(e,t)}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=wt(e.usage),s=St(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 Wu(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>Ko)throw new TypeError(`title must be at most ${Ko} characters`);return e}function Lo(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 _n=class{constructor(e,t){this.connection=e;this.daemonEnv=t}create(e){let t=new U({...e,auth:void 0,env:this.daemonEnv}),s=t.buildArgs();return this.connection.createSessionTransport({workerArgs:s,cwd:e.cwd??process.cwd(),...e.materializedSessionConfigDir!==void 0?{configDir:e.materializedSessionConfigDir}:{},cleanup:()=>t.cleanupGeneratedSettings()})}};function Ju(n){if(!Number.isSafeInteger(n)||n<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer")}function Vu(n){if(n!==void 0&&(!Number.isSafeInteger(n)||n<=0))throw new TypeError("initializeTimeoutMs must be a positive integer")}async function Yu(n){let e=xe({pathToQoderCLIExecutable:n},le),t,s={};if(e.transport==="worker"){let o=await Me(oe(e.pathToQoderWorkerRuntime));t=o.runtimePath,s=o.env}else t=n??ne();return te(t)?{command:process.execPath,args:[t,Fo],env:{...s,...typeof process.versions.electron=="string"?{[Gu]:"1"}:{}}}:{command:t,args:[Fo],env:s}}var Rn=class n{constructor(e,t){this.process=e;this.stderrHandler=t;this.exited=new Promise(s=>{e.once("exit",()=>s()),e.once("error",()=>s())}),this.closed=new Promise(s=>{e.once("close",()=>s()),e.once("error",()=>s())}),e.stderr?.on("data",s=>{let o=s.toString("utf8");if(this.stderrTail+=o,this.stderrTail.length>Uo&&(this.stderrTail=this.stderrTail.slice(-Uo)),!!this.stderrHandler)try{this.stderrHandler(o)}catch{}}),e.once("error",s=>{this.reportFailure(new O(`Failed to spawn Qoder CLI daemon: ${s.message}`,{stderr:this.getStderr(),cause:s}))}),e.once("exit",(s,o)=>{this.exitInfo={code:s,signal:o},!this.stopping&&It(this.closed,At).then(()=>{if(this.stopping)return;let r=this.getStderr(),i=s!==null?`Qoder CLI daemon exited with code ${s}`:`Qoder CLI daemon terminated by signal ${o}`;this.reportFailure(new O(r?`${i}
20
+ `:"")}async function vo(n,e){await ho(Va(n),{recursive:!0,mode:448}),await Ha(n,e,{encoding:"utf8",mode:384}),await go(n,384)}async function pn(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 uu=/^(?:qoder(?:cli|clicn|cn)?-)?worker-runtime(?:\.obf)?\.mjs$/i;function cu(n){let e=n.replace(/\\/g,"/").split("/").at(-1)??"";return uu.test(e)}function qe(n,e,t=process.env){let s=n.pathToQoderCLIExecutable;return s?cu(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 ko from"node:path";function Ne(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function Ve(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function lu(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(Ne(s.id,`options.memory.generation.roots[${t}].id`),Ne(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){Ne(s.indexFile,`options.memory.generation.roots[${t}].indexFile`);let o=s.indexFile.replaceAll("\\","/");if(ko.posix.isAbsolute(o)||ko.win32.isAbsolute(s.indexFile)||o.split("/").includes(".."))throw new TypeError(`options.memory.generation.roots[${t}].indexFile must stay within its root`)}}}function du(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(Ne(s.id,`options.memory.consumption.files[${t}].id`),Ne(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 bo(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 Ve(n.generation?.onResult,"options.memory.generation.onResult"),Ve(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");lu(s.roots),s.prompt!==void 0&&Ne(s.prompt,"options.memory.generation.prompt"),Ve(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(Ve(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(du(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"');Ve(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 Rt=10;function pu(n,e){if(typeof n!="string"||n.trim()==="")throw new TypeError(`${e} must be a non-empty string`)}function Ct(n,e){if(n!==void 0&&typeof n!="function")throw new TypeError(`${e} must be a function`)}function _o(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 mu(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&&pu(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");Ct(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=_o(n.turnComplete.reviewThreshold);if(Ct(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 Ro(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=_o(o?.reviewThreshold);return e?.enabled===!1?(Ct(e?.onResult,"options.evolution.skill.generation.onResult"),{callbacks:{shouldReviewCallbacks:new Map,onResult:e?.onResult}}):(Ct(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=mu(e);return t.config?.enabled===!1?{callbacks:t.callbacks}:{config:{requester:"sdk",mode:"custom",generation:t.config},callbacks:t.callbacks}}import{spawn as Bu}from"node:child_process";import{join as $u}from"node:path";import{createInterface as ku}from"node:readline";var hn="daemon_queries_v1",w=class extends Error{code="DAEMON_PROTOCOL_ERROR";constructor(e){super(e),this.name="DaemonProtocolError"}};function yn(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":gu(t);break;case"control_response":hu(t);break;case"status_event":fu(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"),!Su(t.type))throw new w(`unknown daemon message type: ${String(t.type)}`);yu(t),Sn(t)}return t}function Po(n){let e=JSON.stringify(n);return yn(e),e}function To(n,e){let t=e.response.response;switch(n){case"initialize":{j(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"),wu(s,"capabilities"),s}case"open_session":{let s=fn(e,"open_session response");return mn(t,"open_session"),{session_id:s}}case"list_sessions":{j(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())Eo(_(i,`sessions[${r}]`),`sessions[${r}]`);return s}case"rename_session":{fn(e,"rename_session response");let s=_(t,"rename_session response");return C(s,["session"],"rename_session response"),Eo(_(s.session,"rename_session session"),"rename_session session"),s}case"close_session":return fn(e,`${n} response`),mn(t,n),null;case"delete_session":case"shutdown":case"update_byok_config":case"delete_byok_config":return j(e,`${n} response`),mn(t,n),null;case"get_models":return j(e,`${n} response`),Et(t,n,"models");case"get_byok_config":return j(e,`${n} response`),Et(t,n,"providers");case"list_byok_configs":return j(e,`${n} response`),Et(t,n,"configs");case"list_plugins":return j(e,`${n} response`),Et(t,n,"plugins");case"validate_byok_model":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success"],`${n} response`),gn(s,"success"),s}case"create_byok_config":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["config"],`${n} response`),_(s.config,`${n} response config`),s}case"account_info":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["account"],`${n} response`),_(s.account,`${n} response account`),s}case"check_byok_config":{j(e,`${n} response`);let s=_(t,`${n} response`);return C(s,["success","error","code","requestId","details"],`${n} response`),gn(s,"success"),Co(s,["error","code","requestId"]),s.details!==void 0&&_(s.details,`${n} response details`),s}case"get_usage_info":{j(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 fu(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 gu(n){C(n,["type","request_id","session_id","request"],"control_request frame"),E(n,"request_id"),Sn(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 hu(n){C(n,["type","session_id","response"],"control_response frame"),Sn(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&&gn(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 Et(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 Eo(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 mn(n,e){if(n!==void 0)throw new w(`${e} success must omit response`)}function fn(n,e){let t=n;try{return E(t,"session_id")}catch{throw new w(`${e} requires a valid session_id`)}}function j(n,e){if(Object.hasOwn(n,"session_id"))throw new w(`${e} must not include session_id`)}function Sn(n){let e=n;e.session_id!==void 0&&E(e,"session_id")}function yu(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 Su(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 gn(n,e){let t=n[e];if(typeof t!="boolean")throw new w(`${e} must be a boolean`);return t}function wu(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 Pt=class{constructor(e,t){this.connection=e;this.options=t}messages=new ae;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=vu(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=Mo(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.record(`session opened cwd=${this.options.cwd??"(inherit)"} workerArgs=${this.options.workerArgs.length}`),this.closed){await this.releaseSessionOnce(t);return}this.flushingPendingMessages=!0;try{for(;this.pendingMessages.length>0;){let s=this.pendingMessages.map(o=>Mo(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;this.record("session failed, releasing",e),t!==void 0&&this.startRelease(t),this.fail(e)}record(e,t){let s=this.sessionId;this.options.diagnostics?.record(`[DaemonSession]${s!==void 0?` sessionId=${s}`:""} ${e}`,t)}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.initializePromise&&await this.initializePromise.catch(()=>{});try{this.releasePromise?await this.releasePromise:this.sessionId&&await this.releaseSessionOnce(this.sessionId)}catch(e){throw this.record("close handshake failed",e),this.markClosed(),this.messages.error(e),e}this.record("closed"),this.markClosed(),this.messages.done()}markClosed(){this.closed||(this.closed=!0,this.cleanup())}cleanup(){this.cleaned||(this.cleaned=!0,this.options.cleanup?.())}};function vu(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 Mo(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 vn="multi_session_v2",Ao="session_title_sync_v1",Io="session_delete_v1";var bu=3e4,kn=3e4,_u=125e3,Ru=12e4,Cu=5e3,Eu=6e4,Pu=1024,Tu=64,Mu=8*1024*1024,Au=256,Iu=32*1024*1024,Du=new Set(["daemon.auth.fetch_job_token","daemon.auth.fetch_service_account_token"]),Tt=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}},he=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}},Mt=class{input;requestHandler;pendingRequests=new Map;timedOutRequestIds=new Set;activeInboundRequestIds=new Set;sessions=new Map;closedSessionIds=new Set;sessionCwds=new Map;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;describeUnexpectedClose;diagnostics;constructor(e){if(this.input=e.input,this.requestHandler=e.requestHandler,this.describeUnexpectedClose=e.describeUnexpectedClose,this.diagnostics=e.diagnostics,this.maxFrameBytes=e.maxFrameBytes??W,!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??bu,r=this.request("initialize",{daemon_protocol_version:2,sdk_version:e,capabilities:[vn,...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(vn))throw new w(`daemon is missing required capability: ${vn}`);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 Pt(this,{...e,diagnostics:this.diagnostics})}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){let s=await this.request("open_session",e,t,void 0,Ru);return e.cwd!==void 0&&this.sessionCwds.set(s.session_id,e.cwd),s.session_id}async listSessions(e){return(await this.request("list_sessions",e===void 0?{}:{cwd:e},void 0,void 0,_u,"request")).sessions}renameSession(e,t,s){if(!this.capabilities.has(Ao))return Promise.reject(new w(`daemon is missing required capability: ${Ao}`));let o=s??this.sessionCwds.get(e);return this.request("rename_session",o===void 0?{title:t}:{title:t,cwd:o},void 0,e,kn)}sendSessionMessage(e){return this.writeFrame(e)}async closeSession(e){try{await this.request("close_session",{},void 0,e,kn)}finally{this.sessions.delete(e),this.closedSessionIds.add(e)}}async deleteSession(e,t){if(!this.capabilities.has(Io))throw new w(`daemon is missing required capability: ${Io}`);let s=t??this.sessionCwds.get(e);await this.request("delete_session",s===void 0?{local_session_id:e}:{local_session_id:e,cwd:s},void 0,void 0,kn)}query(e,t){return this.capabilities.has(hn)?this.request(e,t,void 0,void 0,Eu,"request"):Promise.reject(new w(`daemon is missing required capability: ${hn}`))}async shutdown(e=Cu){if(this.stopping){await this.readTask.catch(()=>{});return}this.stopping=!0;try{this.failure||await this.request("shutdown",{},void 0,void 0,e)}finally{for(let t of this.sessions.values())t.fail(new Error("Daemon is stopping"));this.sessions.clear(),!this.input.destroyed&&!this.input.writableEnded&&this.input.end()}}async resolveUnexpectedClose(){if(!this.describeUnexpectedClose)return new Error("Daemon connection closed");try{return await this.describeUnexpectedClose()??new Error("Daemon connection closed")}catch{return new Error("Daemon connection closed")}}fail(e,t=!0){let s=e instanceof Error?e:new Error(String(e));if(!this.failure){this.failure=s,this.diagnostics?.record(`[DaemonConnection] connection failed pendingRequests=${this.pendingRequests.size} sessions=${this.sessions.size}`,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(this.diagnostics?.record(`[DaemonConnection] request timeout method=${e} requestId=${a}${o!==void 0?` sessionId=${o}`:""} timeoutMs=${r} scope=${i}`),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.diagnostics?.record(`[DaemonConnection] request sent method=${e} requestId=${a}${o!==void 0?` sessionId=${o}`:""}${r!==void 0?` timeoutMs=${r}`:""}`),this.writeFrame(u).catch(p=>{let l=this.pendingRequests.get(a);l?.timeout&&clearTimeout(l.timeout),this.pendingRequests.delete(a),this.diagnostics?.record(`[DaemonConnection] request write failed method=${e} requestId=${a}`,p),d(p),l?.sessionTransport&&this.failIfSessionMessagesAreOrphaned()})})}async readOutput(e){let t=new oe(this.maxFrameBytes,"SDK daemon output");e.pipe(t);let s=ku({input:t,crlfDelay:1/0,terminal:!1});try{for await(let o of s){if(!o.trim())continue;let r=Ou(o);r!==void 0&&this.rejectLegacyInitialize(r)||this.acceptFrame(yn(o))}(!this.stopping||this.pendingRequests.size>0)&&this.fail(await this.resolveUnexpectedClose(),!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=xu(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>=Pu){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 Tt({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=To(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>Tu||r+o>Mu||this.pendingSessionMessageFrameCount+1>Au||this.pendingSessionMessageByteCount+o>Iu)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 he?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(qu(e.data)))}writeFrame(e){let t;try{t=`${Po(e)}
21
+ `,Pe(t,this.maxFrameBytes,"SDK daemon input",e.type==="user"&&"uuid"in e&&typeof e.uuid=="string"?e.uuid:void 0)}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 Ou(n){let e;try{e=JSON.parse(n)}catch{return}if(!Do(e)||!Oo(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(!(!Do(t)||!Oo(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 Do(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Oo(n,e){return Object.keys(n).length===e.length&&e.every(t=>Object.hasOwn(n,t))}function xu(n){let e=Du.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 qu(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 O(s,{exitCode:o,signal:r,stderr:i})}var Nu=3e4;function xo(n,e=Nu){return Lu(e,"callbackTimeoutMs"),async t=>{switch(t.request.type){case"daemon.auth.fetch_job_token":return ju(n,t,e);case"daemon.auth.fetch_service_account_token":return Fu(n,t,e);default:throw F("METHOD_NOT_FOUND",`SDK has no handler for daemon method: ${t.request.type}`)}}}async function ju(n,e,t){if(n.type!=="jobToken")throw F("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host job token callback is not configured");let s=qo(e,["reason","session_id"]),o=No(s.reason),r=Uu(s.session_id,"session_id"),i=new AbortController;try{let a=await jo(()=>n.fetchJobToken({requestId:e.request_id,reason:o,sessionId:r},{signal:i.signal}),t,i);if(!a||typeof a.token!="string"||!a.token)throw F("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback did not provide a token");return{token:a.token}}catch(a){throw a instanceof he?a:F("DAEMON_AUTH_CALLBACK_FAILED","Host job token callback failed",!0)}}async function Fu(n,e,t){if(n.type!=="serviceAccount"||typeof n.fetchServiceAccountToken!="function")throw F("DAEMON_AUTH_CALLBACK_UNAVAILABLE","Host Service Account token callback is not configured");let s=qo(e,["reason","required_scopes"]);No(s.reason),Ku(s.required_scopes,"required_scopes");let o=new AbortController;try{let r=await jo(()=>n.fetchServiceAccountToken(),t,o);if(!r||typeof r.token!="string"||!r.token)throw F("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 F("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 he?r:F("DAEMON_AUTH_CALLBACK_FAILED","Host Service Account token callback failed",!0)}}function qo(n,e){let t=Object.keys(n.request).find(s=>s!=="type"&&!e.includes(s));if(t)throw F("DAEMON_AUTH_INVALID_REQUEST",`request contains unknown field: ${t}`);return n.request}function No(n){if(n!=="initial"&&n!=="unauthorized")throw F("DAEMON_AUTH_INVALID_REQUEST","reason must be initial or unauthorized");return n}function Uu(n,e){if(n!==void 0){if(typeof n!="string"||!n)throw F("DAEMON_AUTH_INVALID_REQUEST",`${e} must be a non-empty string`);return n}}function Ku(n,e){if(!Array.isArray(n)||n.some(t=>typeof t!="string"))throw F("DAEMON_AUTH_INVALID_REQUEST",`${e} must be an array of strings`);return n}async function jo(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 Lu(n,e){if(!Number.isSafeInteger(n)||n<=0)throw new TypeError(`${e} must be a positive integer`)}function F(n,e,t=!1){return new he({code:n,message:e,retryable:t})}var zu="QODER_AGENT_SDK_DAEMON",Qu="QODER_AGENT_SDK_DAEMON_IDLE_TIMEOUT_MS",Gu="ELECTRON_RUN_AS_NODE",Fo="--sdk",Hu=30*6e4,At=2e3,Uo=8192,Ko=255,Bo=new WeakMap;function Cn(n){return Bo.get(n)}async function En(n){let e=n.workerIdleTimeoutMs??Hu;Ju(e),Vu(n.initializeTimeoutMs);let t=new U({auth:n.auth,env:n.env,proxy:n.proxy}),s=await t.prepare(),o=Qt(n.auth,n.env),r=await Yu(n.pathToQoderCLIExecutable),i={...s.env,...r.env,[zu]:"1",[Qu]:String(e)},a,u=new ie({debug:n.debug,debugFile:n.debugFile??Pn(n),stderr:n.stderr});try{a=await Rn.spawn({command:r.command,args:r.args,env:i,stderrHandler:n.stderr}),u.record(`[Daemon] spawned pid=${a.process.pid} idleTimeoutMs=${e}`);let c=new Mt({input:a.process.stdin,output:a.process.stdout,requestHandler:xo(n.auth),diagnostics:u,describeUnexpectedClose:()=>a.describeUnexpectedClose()});a.setConnection(c);let d=Date.now();await c.initialize(rt,{capabilities:["session_delete_v1"],auth:o,...n.initializeTimeoutMs===void 0?{}:{timeoutMs:n.initializeTimeoutMs}}),u.record(`[Daemon] initialized in ${Date.now()-d}ms`),await t.cleanupAuthPayload();let m=new bn(c,a);return Bo.set(m,{hostActionLaunch:{proxy:n.proxy,cliPath:n.pathToQoderCLIExecutable,env:n.env},auth:n.auth,transportProvider:new _n(c,s.env)}),m}catch(c){throw await t.cleanupAuthPayload(),await a?.stop().catch(()=>{}),c}}var bn=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(e){return this.requireReady(),(await this.connection.listSessions(e)).map(Lo)}async renameSession(e,t,s){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");let o=Wu(t),r=await this.connection.renameSession(e,o,s);return Lo(r.session)}async deleteSession(e,t){if(this.requireReady(),typeof e!="string"||!e.trim())throw new TypeError("localSessionId must be a non-empty string");await this.connection.deleteSession(e,t)}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=wt(e.usage),s=St(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 Wu(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>Ko)throw new TypeError(`title must be at most ${Ko} characters`);return e}function Lo(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 _n=class{constructor(e,t){this.connection=e;this.daemonEnv=t}create(e){let t=new U({...e,auth:void 0,env:this.daemonEnv}),s=t.buildArgs();return this.connection.createSessionTransport({workerArgs:s,cwd:e.cwd??process.cwd(),...e.materializedSessionConfigDir!==void 0?{configDir:e.materializedSessionConfigDir}:{},cleanup:()=>t.cleanupGeneratedSettings()})}};function Ju(n){if(!Number.isSafeInteger(n)||n<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer")}function Vu(n){if(n!==void 0&&(!Number.isSafeInteger(n)||n<=0))throw new TypeError("initializeTimeoutMs must be a positive integer")}async function Yu(n){let e=qe({pathToQoderCLIExecutable:n},de),t,s={};if(e.transport==="worker"){let o=await Ae(re(e.pathToQoderWorkerRuntime));t=o.runtimePath,s=o.env}else t=n??se();return ne(t)?{command:process.execPath,args:[t,Fo],env:{...s,...typeof process.versions.electron=="string"?{[Gu]:"1"}:{}}}:{command:t,args:[Fo],env:s}}var Rn=class n{constructor(e,t){this.process=e;this.stderrHandler=t;this.exited=new Promise(s=>{e.once("exit",()=>s()),e.once("error",()=>s())}),this.closed=new Promise(s=>{e.once("close",()=>s()),e.once("error",()=>s())}),e.stderr?.on("data",s=>{let o=s.toString("utf8");if(this.stderrTail+=o,this.stderrTail.length>Uo&&(this.stderrTail=this.stderrTail.slice(-Uo)),!!this.stderrHandler)try{this.stderrHandler(o)}catch{}}),e.once("error",s=>{this.reportFailure(new O(`Failed to spawn Qoder CLI daemon: ${s.message}`,{stderr:this.getStderr(),cause:s}))}),e.once("exit",(s,o)=>{this.exitInfo={code:s,signal:o},!this.stopping&&It(this.closed,At).then(()=>{if(this.stopping)return;let r=this.getStderr(),i=s!==null?`Qoder CLI daemon exited with code ${s}`:`Qoder CLI daemon terminated by signal ${o}`;this.reportFailure(new O(r?`${i}
22
22
  daemon stderr:
23
23
  ${r}`:i,{exitCode:s,signal:o,stderr:r}))})})}connection;failure;failureListeners=new Set;stderrTail="";exited;closed;exitInfo;stopping=!1;async describeUnexpectedClose(){if(!await It(this.closed,At))return;let e=this.exitInfo;if(!e)return;let t=this.getStderr(),s=e.code!==null?`Qoder CLI daemon exited with code ${e.code}`:`Qoder CLI daemon terminated by signal ${e.signal}`;return new O(t?`${s}
24
24
  daemon stderr:
25
- ${t}`:s,{exitCode:e.code,signal:e.signal,stderr:t})}static async spawn(e){let t;try{t=Bu(e.command,e.args,{env:e.env,stdio:["pipe","pipe","pipe"]}),await Zu(t)}catch(s){throw new O(`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,e.stderrHandler)}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 It(this.exited,At)&&(this.process.kill("SIGTERM"),!await It(this.exited,At)&&(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 Zu(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)})}function Pn(n){if(n.debug!==!0)return $u(ln(),"logs",`sdk-daemon-${process.pid}-${Date.now()}.log`)}async function It(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 ec,spawn as tc}from"child_process";import{randomUUID as nc}from"node:crypto";import{homedir as sc}from"node:os";import{resolve as $o}from"node:path";function zo(){return ne()}function Qo(n=process.env){return $o(n.QODERCLI_HOST_ACTION_STORAGE_DIR??n[v.configDirEnv]??$o(n[v.cliHomeEnv]??sc(),n[`${v.configDirEnv}_NAME`]??v.configDirName))}async function Go(n,e={}){let t=e.cliPath??zo(),s=e.timeout??125e3,o=te(t)?process.execPath:t,r=["feedback","action","send","--json"];e.proxy!==void 0&&r.push("--proxy",e.proxy);let i=await oc(n,e.auth,s),a=te(t)?[t,...r]:r;await new Promise((u,c)=>{let d=tc(o,a,{cwd:e.cwd,env:{...e.env??process.env,...te(t)&&process.versions.electron?{ELECTRON_RUN_AS_NODE:"1"}:{}},stdio:["pipe","ignore","ignore"]}),m=setTimeout(()=>{d.kill("SIGTERM"),c(new Error("Host action fallback timed out"))},s);m.unref?.(),d.once("error",p=>{clearTimeout(m),c(p)}),d.once("exit",(p,l)=>{clearTimeout(m),p===0?u():c(new Error(`Host action fallback exited with ${p??l??"unknown status"}`))}),d.stdin.on("error",p=>{clearTimeout(m),d.kill("SIGTERM"),c(p)}),d.stdin.end(`${JSON.stringify(i?{event:n,credential:i}:n)}
26
- `)})}async function oc(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:nc(),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 rc(n,e){if(!n.content)return{success:!1,message:"Feedback content is required"};let t=e?.cliPath??zo(),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=>{ec(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 Tn=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 ic(n,e){if(e){if(n.transport!==void 0)throw new Error("options.transport cannot be combined with options.daemon.");let s=Cn(e);if(!s)throw new Error("options.daemon must be returned by startDaemon().");return s.transportProvider}if(n.transport!==void 0){if(gs(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=xe(n,le);return t.transport==="worker"?new Ae({pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):Pe.default}function Mn(n){let e=Date.now(),{prompt:t,options:s={}}=n,o=s.daemon,r;o&&(r=ac(s));let i=o?Cn(o):void 0,a=s.sessionStore,u=s.sessionStoreFlush??"batched",c=ic(s,o),d=new re({onCloseDiagnostic:s.onCloseDiagnostic,debug:s.debug,debugFile:s.debugFile,stderr:s.stderr});if(o!==void 0&&d.record("[DaemonRoute] explicit_daemon transport_overridden"),s.canUseTool&&s.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");if(s.planMode!==void 0&&typeof s.planMode!="boolean")throw new TypeError("options.planMode must be a boolean");s.goalMaxTurns!==void 0&&Ge(s.goalMaxTurns);let m=i?.auth??s.auth;if(m==null)throw new Tn;if(s.hostActions!==void 0&&m.type==="serviceAccount")throw new Error("Host actions are not supported for Service Account authentication: Tracking requires a user signing context");let p=a!==void 0&&s.forkSession===!0;if(a&&s.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(a&&i===void 0&&!(c instanceof Pe)&&!(c instanceof Ae))throw new Error("sessionStore requires ProcessTransport or WorkerTransport.");if(a&&s.sessionStoreFlush!==void 0&&s.sessionStoreFlush!=="batched"&&s.sessionStoreFlush!=="eager")throw new Error('sessionStoreFlush must be "batched" or "eager".');if(a&&s.loadTimeoutMs!==void 0&&(!Number.isFinite(s.loadTimeoutMs)||s.loadTimeoutMs<=0))throw new Error("loadTimeoutMs must be a positive finite number.");if(a&&s.experimentalCloudAgent!==void 0)throw new Error("sessionStore is not supported by the experimental Cloud Agent runtime.");if(s.cloudAgent!==void 0)throw new Error("options.cloudAgent is not supported. Use options.experimentalCloudAgent for the experimental Cloud Agent runtime.");if(s.experimentalCloudAgent!==void 0)return io(s),ao({prompt:t,options:s,diagnostics:d});let l=bo(s.memory),f=Ro(s.evolution?.skill),y=s.onAuthExpired,g=!1,S=y?()=>{g||(g=!0,Promise.resolve(y()).catch(b=>{d.record("[query] onAuthExpired callback threw:",b)}))}:void 0,k=new Map,h=new Map,M=new Map,T={},X={},R={};if(s.mcpServers)for(let[b,A]of Object.entries(s.mcpServers)){let Q=A.tools;if(Array.isArray(Q)&&Q.length>0&&(X[b]=Q),A.type==="sdk"&&"instance"in A&&A.instance){let ee=A.instance;if(k.set(b,ee),Q){let st=Bt(b,Q);st&&(R[b]=st)}let Hn=new kt(st=>{qs(b,st,M)});h.set(b,Hn),ee.connect(Hn).catch(()=>{})}else T[b]=A}let Y=Object.keys(T).length>0,Le=Object.keys(X).length>0,Ut=s.pathToQoderCLIExecutable,Z=s.env,et=m?.type==="jobToken"?m.fetchJobToken:void 0,Ar=m?.type==="serviceAccount"?m.fetchServiceAccountToken:void 0,tt={pathToQoderCLIExecutable:Ut,executable:s.executable,executableArgs:s.executableArgs,env:Z,proxy:s.proxy,vpcEndpoint:s.vpcEndpoint,cwd:s.cwd,closeGraceMs:s.closeGraceMs,auth:m,model:s.model,agent:s.agent,debug:s.debug,diagnostics:d,maxTurns:s.maxTurns,includePartialMessages:s.includePartialMessages,includeHookEvents:s.includeHookEvents,sessionMirror:a!==void 0,permissionMode:s.permissionMode,allowDangerouslySkipPermissions:s.allowDangerouslySkipPermissions,permissionPromptToolName:s.permissionPromptToolName,canUseTool:s.canUseTool!==void 0,continue:s.continue,resume:s.resume,resumeSessionAt:s.resumeSessionAt,resumeDropsTurn:s.resumeDropsTurn,forkSession:s.forkSession,sessionId:s.sessionId,persistSession:s.persistSession,allowedTools:(()=>{let b=s.allowedTools??[];if(s.skills===void 0)return b.length>0?b:void 0;let A=s.skills==="all"?["Skill"]:s.skills.map(ee=>`Skill(${ee})`),Q=new Set(b);return[...b,...A.filter(ee=>!Q.has(ee))]})(),disallowedTools:s.disallowedTools,tools:s.tools,toolConfig:s.toolConfig,extensions:s.extensions,extraArgs:s.extraArgs,mcpServers:Y?T:void 0,mcpToolPolicies:Le?X:void 0,allowedMcpServerNames:s.allowedMcpServerNames,strictMcpConfig:s.strictMcpConfig,settings:s.settings,securityScan:s.securityScan,settingSources:s.settingSources,additionalDirectories:s.additionalDirectories,plugins:s.plugins,enableFileCheckpointing:s.enableFileCheckpointing,stderr:"pipe",stderrHandler:s.stderr,spawnQoderCLIProcess:s.spawnQoderCLIProcess,onAuthExpired:S},nt,zn=a!==void 0&&(s.resume!==void 0||s.continue===!0)?new gt(async()=>{let b=await wo({store:a,cwd:s.cwd,resume:s.resume,continue:s.continue,loadTimeoutMs:s.loadTimeoutMs,env:s.env});if(!b)return{transport:pt(c,{...tt,continue:!1})};nt=Qo(s.env);try{return{transport:pt(c,{...tt,env:{...tt.env??process.env,[v.configDirEnv]:b.configDir,...s.hostActions!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:nt}:{}},materializedSessionConfigDir:b.configDir,continue:!1,resume:b.sessionId}),cleanup:b.cleanup}}catch(A){throw await b.cleanup(),A}}):pt(c,tt);zn.initialize().catch(()=>{});let Ir=typeof t=="string",be=s.systemPrompt,Qn,Gn;if(typeof be=="string")Qn=be;else if(typeof be=="object"&&be!==null&&be.type==="preset"){let b=be;if(b.preset!=="qodercli")throw new Error(`Unsupported systemPrompt preset: ${String(b.preset)}`);Gn=b.append}let Dr={sdkStartedAtMs:e,systemPrompt:Qn,appendSystemPrompt:Gn,modelRequestPatches:s.modelRequestPatches,agents:s.agents,skills:Array.isArray(s.skills)?s.skills:void 0,planMode:o!==void 0?s.planMode??!1:s.planMode,promptSuggestions:s.promptSuggestions,hostActions:s.hostActions,goalMaxTurns:s.goalMaxTurns,enableFileCheckpointing:s.enableFileCheckpointing,memory:l.config,evolution:f.config?{skill:f.config}:void 0,customContext:s.customContext,beforeInitialize:void 0,requireSessionStoreForkBarrier:p,...o!==void 0?{independentPlanModeControls:!0,permissionMode:r}:{}},Kt=new vt(zn,Ir,s.canUseTool,s.hooks,s.abortController,k,Dr,s.onElicitation,d,S,s.controlRequestTimeoutMs,h,M,et,s.resolveModel,s.resolveModelTimeoutMs,a,u,R,Ar,l.callbacks,f.callbacks,s.resolveSessionArtifacts,async b=>{let A=i?.hostActionLaunch,Q=new U({auth:m,vpcEndpoint:s.vpcEndpoint,env:{...A?.env??s.env??process.env,...nt!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:nt}:{}}});try{let ee=await Q.prepare();await Go(b,{cliPath:A?.cliPath??s.pathToQoderCLIExecutable,env:ee.env,cwd:s.cwd,auth:m,proxy:A?.proxy??s.proxy})}finally{await Q.cleanupAuthPayload()}},i!==void 0,i!==void 0?o:void 0);if(typeof t=="string"){let b={type:"user",extra:{submitted_at_ms:e},message:{role:"user",content:[{type:"text",text:t}]},parent_tool_use_id:null};Kt.streamInput(async function*(){yield b}())}else Kt.streamInput(t);return Kt}function ac(n){if(n.planMode!==void 0&&typeof n.planMode!="boolean")throw new TypeError("options.planMode must be a boolean.");let e=Qe(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 An=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}}},In=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 uc(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 An,s=Mn({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 In(s,t)}catch(r){throw t.discard(),await s.close().catch(()=>{}),r}finally{o!==void 0&&clearTimeout(o)}}import{readFile as cc}from"node:fs/promises";import lc from"node:os";import $ from"node:path";var dc=["user","project","local"],xn=new Set(["__proto__","constructor","prototype"]),pc=/^[\p{L}\p{N}\p{M}._ -]+$/u,mc=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu,fc=new Set([".git",".svn",".hg",".vscode",".idea",".husky",".github","node_modules","bower_components"]),gc=new Set(["mcpServers","providers","skillOverrides","enabledPlugins","extraKnownMarketplaces","pluginConfigs"]),hc=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 he(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function yc(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===`
25
+ ${t}`:s,{exitCode:e.code,signal:e.signal,stderr:t})}static async spawn(e){let t;try{t=Bu(e.command,e.args,{env:e.env,stdio:["pipe","pipe","pipe"]}),await Zu(t)}catch(s){throw new O(`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,e.stderrHandler)}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 It(this.exited,At)&&(this.process.kill("SIGTERM"),!await It(this.exited,At)&&(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 Zu(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)})}function Pn(n){if(n.debug!==!0)return $u(ln(),"logs",`sdk-daemon-${process.pid}-${Date.now()}.log`)}async function It(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 ec,spawn as tc}from"child_process";import{randomUUID as nc}from"node:crypto";import{homedir as sc}from"node:os";import{resolve as $o}from"node:path";function zo(){return se()}function Qo(n=process.env){return $o(n.QODERCLI_HOST_ACTION_STORAGE_DIR??n[v.configDirEnv]??$o(n[v.cliHomeEnv]??sc(),n[`${v.configDirEnv}_NAME`]??v.configDirName))}async function Go(n,e={}){let t=e.cliPath??zo(),s=e.timeout??125e3,o=ne(t)?process.execPath:t,r=["feedback","action","send","--json"];e.proxy!==void 0&&r.push("--proxy",e.proxy);let i=await oc(n,e.auth,s),a=ne(t)?[t,...r]:r;await new Promise((u,c)=>{let d=tc(o,a,{cwd:e.cwd,env:{...e.env??process.env,...ne(t)&&process.versions.electron?{ELECTRON_RUN_AS_NODE:"1"}:{}},stdio:["pipe","ignore","ignore"]}),m=setTimeout(()=>{d.kill("SIGTERM"),c(new Error("Host action fallback timed out"))},s);m.unref?.(),d.once("error",p=>{clearTimeout(m),c(p)}),d.once("exit",(p,l)=>{clearTimeout(m),p===0?u():c(new Error(`Host action fallback exited with ${p??l??"unknown status"}`))}),d.stdin.on("error",p=>{clearTimeout(m),d.kill("SIGTERM"),c(p)}),d.stdin.end(`${JSON.stringify(i?{event:n,credential:i}:n)}
26
+ `)})}async function oc(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:nc(),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 rc(n,e){if(!n.content)return{success:!1,message:"Feedback content is required"};let t=e?.cliPath??zo(),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=>{ec(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 Tn=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 ic(n,e){if(e){if(n.transport!==void 0)throw new Error("options.transport cannot be combined with options.daemon.");let s=Cn(e);if(!s)throw new Error("options.daemon must be returned by startDaemon().");return s.transportProvider}if(n.transport!==void 0){if(gs(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=qe(n,de);return t.transport==="worker"?new Ie({pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):Te.default}function Mn(n){let e=Date.now(),{prompt:t,options:s={}}=n,o=s.daemon,r;o&&(r=ac(s));let i=o?Cn(o):void 0,a=s.sessionStore,u=s.sessionStoreFlush??"batched",c=ic(s,o),d=new ie({onCloseDiagnostic:s.onCloseDiagnostic,debug:s.debug,debugFile:s.debugFile,stderr:s.stderr});if(o!==void 0&&d.record("[DaemonRoute] explicit_daemon transport_overridden"),s.canUseTool&&s.permissionPromptToolName)throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");if(s.planMode!==void 0&&typeof s.planMode!="boolean")throw new TypeError("options.planMode must be a boolean");s.goalMaxTurns!==void 0&&He(s.goalMaxTurns);let m=i?.auth??s.auth;if(m==null)throw new Tn;if(s.hostActions!==void 0&&m.type==="serviceAccount")throw new Error("Host actions are not supported for Service Account authentication: Tracking requires a user signing context");let p=a!==void 0&&s.forkSession===!0;if(a&&s.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(a&&i===void 0&&!(c instanceof Te)&&!(c instanceof Ie))throw new Error("sessionStore requires ProcessTransport or WorkerTransport.");if(a&&s.sessionStoreFlush!==void 0&&s.sessionStoreFlush!=="batched"&&s.sessionStoreFlush!=="eager")throw new Error('sessionStoreFlush must be "batched" or "eager".');if(a&&s.loadTimeoutMs!==void 0&&(!Number.isFinite(s.loadTimeoutMs)||s.loadTimeoutMs<=0))throw new Error("loadTimeoutMs must be a positive finite number.");if(a&&s.experimentalCloudAgent!==void 0)throw new Error("sessionStore is not supported by the experimental Cloud Agent runtime.");if(s.cloudAgent!==void 0)throw new Error("options.cloudAgent is not supported. Use options.experimentalCloudAgent for the experimental Cloud Agent runtime.");if(s.experimentalCloudAgent!==void 0)return io(s),ao({prompt:t,options:s,diagnostics:d});let l=bo(s.memory),f=Ro(s.evolution?.skill),y=s.onAuthExpired,g=!1,S=y?()=>{g||(g=!0,Promise.resolve(y()).catch(b=>{d.record("[query] onAuthExpired callback threw:",b)}))}:void 0,k=new Map,h=new Map,M=new Map,T={},X={},R={};if(s.mcpServers)for(let[b,A]of Object.entries(s.mcpServers)){let Q=A.tools;if(Array.isArray(Q)&&Q.length>0&&(X[b]=Q),A.type==="sdk"&&"instance"in A&&A.instance){let ee=A.instance;if(k.set(b,ee),Q){let ot=Bt(b,Q);ot&&(R[b]=ot)}let Hn=new kt(ot=>{qs(b,ot,M)});h.set(b,Hn),ee.connect(Hn).catch(()=>{})}else T[b]=A}let Y=Object.keys(T).length>0,Be=Object.keys(X).length>0,Ut=s.pathToQoderCLIExecutable,Z=s.env,tt=m?.type==="jobToken"?m.fetchJobToken:void 0,Ar=m?.type==="serviceAccount"?m.fetchServiceAccountToken:void 0,nt={pathToQoderCLIExecutable:Ut,executable:s.executable,executableArgs:s.executableArgs,env:Z,proxy:s.proxy,vpcEndpoint:s.vpcEndpoint,cwd:s.cwd,closeGraceMs:s.closeGraceMs,auth:m,model:s.model,agent:s.agent,debug:s.debug,diagnostics:d,maxTurns:s.maxTurns,includePartialMessages:s.includePartialMessages,includeHookEvents:s.includeHookEvents,sessionMirror:a!==void 0,permissionMode:s.permissionMode,allowDangerouslySkipPermissions:s.allowDangerouslySkipPermissions,permissionPromptToolName:s.permissionPromptToolName,canUseTool:s.canUseTool!==void 0,continue:s.continue,resume:s.resume,resumeSessionAt:s.resumeSessionAt,resumeDropsTurn:s.resumeDropsTurn,forkSession:s.forkSession,sessionId:s.sessionId,persistSession:s.persistSession,allowedTools:(()=>{let b=s.allowedTools??[];if(s.skills===void 0)return b.length>0?b:void 0;let A=s.skills==="all"?["Skill"]:s.skills.map(ee=>`Skill(${ee})`),Q=new Set(b);return[...b,...A.filter(ee=>!Q.has(ee))]})(),disallowedTools:s.disallowedTools,tools:s.tools,toolConfig:s.toolConfig,extensions:s.extensions,extraArgs:s.extraArgs,mcpServers:Y?T:void 0,mcpToolPolicies:Be?X:void 0,allowedMcpServerNames:s.allowedMcpServerNames,strictMcpConfig:s.strictMcpConfig,settings:s.settings,securityScan:s.securityScan,settingSources:s.settingSources,additionalDirectories:s.additionalDirectories,plugins:s.plugins,enableFileCheckpointing:s.enableFileCheckpointing,stderr:"pipe",stderrHandler:s.stderr,spawnQoderCLIProcess:s.spawnQoderCLIProcess,onAuthExpired:S},st,zn=a!==void 0&&(s.resume!==void 0||s.continue===!0)?new gt(async()=>{let b=await wo({store:a,cwd:s.cwd,resume:s.resume,continue:s.continue,loadTimeoutMs:s.loadTimeoutMs,env:s.env});if(!b)return{transport:pt(c,{...nt,continue:!1})};st=Qo(s.env);try{return{transport:pt(c,{...nt,env:{...nt.env??process.env,[v.configDirEnv]:b.configDir,...s.hostActions!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:st}:{}},materializedSessionConfigDir:b.configDir,continue:!1,resume:b.sessionId}),cleanup:b.cleanup}}catch(A){throw await b.cleanup(),A}}):pt(c,nt);zn.initialize().catch(()=>{});let Ir=typeof t=="string",_e=s.systemPrompt,Qn,Gn;if(typeof _e=="string")Qn=_e;else if(typeof _e=="object"&&_e!==null&&_e.type==="preset"){let b=_e;if(b.preset!=="qodercli")throw new Error(`Unsupported systemPrompt preset: ${String(b.preset)}`);Gn=b.append}let Dr={sdkStartedAtMs:e,systemPrompt:Qn,appendSystemPrompt:Gn,modelRequestPatches:s.modelRequestPatches,agents:s.agents,skills:Array.isArray(s.skills)?s.skills:void 0,planMode:o!==void 0?s.planMode??!1:s.planMode,promptSuggestions:s.promptSuggestions,hostActions:s.hostActions,goalMaxTurns:s.goalMaxTurns,enableFileCheckpointing:s.enableFileCheckpointing,memory:l.config,evolution:f.config?{skill:f.config}:void 0,customContext:s.customContext,beforeInitialize:void 0,requireSessionStoreForkBarrier:p,...o!==void 0?{independentPlanModeControls:!0,permissionMode:r}:{}},Kt=new vt(zn,Ir,s.canUseTool,s.hooks,s.abortController,k,Dr,s.onElicitation,d,S,s.controlRequestTimeoutMs,h,M,tt,s.resolveModel,s.resolveModelTimeoutMs,a,u,R,Ar,l.callbacks,f.callbacks,s.resolveSessionArtifacts,async b=>{let A=i?.hostActionLaunch,Q=new U({auth:m,vpcEndpoint:s.vpcEndpoint,env:{...A?.env??s.env??process.env,...st!==void 0?{QODERCLI_HOST_ACTION_STORAGE_DIR:st}:{}}});try{let ee=await Q.prepare();await Go(b,{cliPath:A?.cliPath??s.pathToQoderCLIExecutable,env:ee.env,cwd:s.cwd,auth:m,proxy:A?.proxy??s.proxy})}finally{await Q.cleanupAuthPayload()}},i!==void 0,i!==void 0?o:void 0);if(typeof t=="string"){let b={type:"user",extra:{submitted_at_ms:e},message:{role:"user",content:[{type:"text",text:t}]},parent_tool_use_id:null};Kt.streamInput(async function*(){yield b}())}else Kt.streamInput(t);return Kt}function ac(n){if(n.planMode!==void 0&&typeof n.planMode!="boolean")throw new TypeError("options.planMode must be a boolean.");let e=Ge(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 uc=1e3,An=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}}},In=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 cc(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 An,s=Mn({prompt:t,options:n.options}),o,r;try{return await Promise.race([s.initializationResult(),new Promise((i,a)=>{o=setTimeout(()=>{a(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 In(s,t)}catch(i){t.discard();let a=n.options?.closeGraceMs??te,u=(Number.isFinite(a)?Math.max(0,a):te)+uc;throw await Promise.race([s.close().catch(()=>{}),new Promise(c=>{r=setTimeout(c,u)})]),i}finally{o!==void 0&&clearTimeout(o),r!==void 0&&clearTimeout(r)}}import{readFile as lc}from"node:fs/promises";import dc from"node:os";import $ from"node:path";var pc=["user","project","local"],xn=new Set(["__proto__","constructor","prototype"]),mc=/^[\p{L}\p{N}\p{M}._ -]+$/u,fc=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu,gc=new Set([".git",".svn",".hg",".vscode",".idea",".husky",".github","node_modules","bower_components"]),hc=new Set(["mcpServers","providers","skillOverrides","enabledPlugins","extraKnownMarketplaces","pluginConfigs"]),yc=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 ye(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function Sc(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===`
27
27
  `||u==="\r"?(r=!1,t+=u):t+=" ";continue}if(i){u==="*"&&c==="/"?(i=!1,t+=" ",a+=1):t+=u===`
28
- `||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 Sc(n,e){let t;try{t=JSON.parse(yc(n))}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`Unable to parse settings from ${e}: ${o}`)}if(!he(t))throw new TypeError(`Settings from ${e} must be a JSON object`);return Dt(t)}function Ne(n){return Array.isArray(n)?n.map(Ne):he(n)?Dt(n):n}function Dt(n){let e={};for(let[t,s]of Object.entries(n))xn.has(t)||s===void 0||(e[t]=Ne(s));return e}function wc(n){let e=n.join(".");if(gc.has(e)||n.length===2&&n[0]==="providers")return"shallow";if(hc.has(e))return"union";if(n.length===2&&n[0]==="hooks")return"concat"}function On(n,e,t=[]){for(let[s,o]of Object.entries(e)){if(xn.has(s)||o===void 0)continue;let r=[...t,s],i=n[s],a=wc(r);if(a==="shallow"&&i&&o){let u={};he(i)&&Object.assign(u,Dt(i)),he(o)&&Object.assign(u,Dt(o)),n[s]=u;continue}if(Array.isArray(i)){let u=Array.isArray(o)?o:[o];if(a==="concat"){n[s]=[...i.map(Ne),...u.map(Ne)];continue}if(a==="union"){n[s]=[...new Set([...i,...u])].map(Ne);continue}}if(he(i)&&he(o))On(i,o,r);else if(he(o)){let u={};On(u,o,r),n[s]=u}else n[s]=Ne(o)}}function vc(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===".."||!pc.test(t)||mc.test(t))throw new Error(`${v.configDirNameEnv} must be a valid directory name`);if(fc.has(t.toLowerCase()))throw new Error(`${v.configDirNameEnv} must not use a protected directory name`);return{user:t,project:t}}async function Dn(n,e){let t;try{t=await cc(e,"utf8")}catch(s){if(s.code==="ENOENT")return;throw s}return{source:n,path:$.resolve(e),settings:Sc(t,$.resolve(e))}}async function kc(n={}){let e=$.resolve(n.cwd??process.cwd()),t=process.env,s=vc(t),o=t[v.cliHomeEnv]??t.GEMINI_CLI_HOME,r=o?$.resolve(e,o):lc.homedir(),i=t[v.configDirEnv]?$.resolve(e,t[v.configDirEnv]):$.join(r,s.user),a=$.join(e,s.project),u=new Set(n.settingSources??dc),c=$.resolve(r)===e,d=[];if(u.has("user")){let l=await Dn("user",$.join(i,"settings.json"));l&&d.push(l)}if(u.has("project")&&!c){let l=await Dn("project",$.join(a,"settings.json"));l&&d.push(l)}if(u.has("local")&&!c){let l=await Dn("local",$.join(a,"settings.local.json"));l&&d.push(l)}let m={},p={};for(let l of d){On(m,l.settings);for(let f of Object.keys(l.settings))xn.has(f)||(p[f]={source:l.source,...l.path?{path:l.path}:{}})}return{effective:m,provenance:p,sources:d}}var bc=30*6e4,Ot=class extends Error{constructor(){super("Global daemon is already initialized with a different workerIdleTimeoutMs"),this.name="DaemonConfigurationConflictError"}},Se,z,we,je,ve;function Wo(n){let e;try{e=Rc(n)}catch(o){return Promise.reject(o)}if(ve)return ve.then(()=>Wo(n));if(Se){if(Se.state==="ready")return Ho(e)?(ye(e).record("[GlobalDaemon] init reused the ready daemon"),Promise.resolve({mode:"daemon",daemon:Se})):(ye(e).record("[GlobalDaemon] init rejected: configuration conflict with the ready daemon"),Promise.reject(new Ot));Se=void 0,z=void 0,je=void 0}if(we)return Ho(e)?(ye(e).record("[GlobalDaemon] init joined an in-flight initialization"),we):(ye(e).record("[GlobalDaemon] init rejected: configuration conflict with an in-flight initialization"),Promise.reject(new Ot));if(je)return ye(e).record(`[GlobalDaemon] init short-circuited to direct mode (reason=${je.reason})`),Promise.resolve(je);z=e;let t=ye(e),s;return s=En(e).then(o=>(Se=o,t.record("[GlobalDaemon] daemon ready"),{mode:"daemon",daemon:o})).catch(o=>{let r=Cc(o);return je=r,z=void 0,t.record(`[GlobalDaemon] startDaemon failed, falling back to direct mode (reason=${r.reason})`,o),r}).finally(()=>{we===s&&(we=void 0)}),we=s,s}function ye(n){return new re({debug:n.debug,debugFile:n.debugFile??Pn(n),stderr:n.stderr})}function _c(){if(ve)return ve;let n=we,e=Se,t=ye(z??{}),s;return s=(async()=>{let o=e?{mode:"daemon",daemon:e}:n?await n:void 0;o?.mode==="daemon"?(t.record("[GlobalDaemon] shutting down the global daemon"),await o.daemon.stop(),t.record("[GlobalDaemon] global daemon stopped")):t.record("[GlobalDaemon] shutdown with no daemon to stop")})().finally(()=>{ve===s&&(Se=void 0,z=void 0,we=void 0,je=void 0,ve=void 0)}),ve=s,s}function Rc(n){let e=n.workerIdleTimeoutMs??bc;if(!Number.isSafeInteger(e)||e<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer");return{...n,workerIdleTimeoutMs:e}}function Ho(n){return z?.auth===n.auth&&z.workerIdleTimeoutMs===n.workerIdleTimeoutMs&&z.cwd===n.cwd&&z.pathToQoderCLIExecutable===n.pathToQoderCLIExecutable&&z.proxy===n.proxy&&z.env===n.env}function Cc(n){return n instanceof K?{mode:"direct",reason:"protocol_version_mismatch"}:{mode:"direct",reason:"daemon_unavailable"}}import{McpServer as Ec}from"@modelcontextprotocol/sdk/server/mcp.js";function Pc(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 Ec({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.`);Lt(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 Tc(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 qn,readFile as qt,stat as Fe,appendFile as nr,realpath as Mc,rm as Vo}from"fs/promises";import{basename as Ac,join as I,resolve as Yo}from"path";import{execFile as Ic}from"child_process";import{randomUUID as sr}from"crypto";import{promisify as Dc}from"util";async function Jo(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 Oc=Dc(Ic),xc=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,or=new Set(["user","assistant","system","progress","attachment"]);function x(n){return n!==null&&typeof n=="object"}function ke(n){return xc.test(n)}function rr(n,e){if(!x(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 qc(n,e){let t=[],s;return await Jo(n,o=>{s=rr(o,e)??s,x(o)&&typeof o.uuid=="string"&&typeof o.type=="string"&&or.has(o.type)&&t.push(o)}),{entries:t,activeLeaf:s}}function xt(n){if(!x(n.message))return[];let e=n.message.content;return Array.isArray(e)?e:[]}var Nc=new Set(["user-rejected","permission-rule","automode-blocked","automode-unavailable","automode-parsing-error","interrupted","cancelled"]);function jc(n){return typeof n=="string"&&Nc.has(n)?n:void 0}function Nn(n){if(n.type!=="user")return;let e=xt(n).filter(r=>x(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=jc(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 Ve(n){if(n.type!=="assistant"||!x(n.message))return;let e=n.message.id;return typeof e=="string"&&e?e:void 0}function ir(n){return n.type!=="user"||!n.parentUuid?!1:xt(n).some(e=>x(e)&&e.type==="tool_result")}function Fc(n){if(!x(n.message))return null;let e=n.message.id;return typeof e=="string"&&e.length>0?e:null}function Uc(n,e){let t=new Map;for(let[s,o]of n){let r=Fc(o);if(r){let i=t.get(r);i?i.push(s):t.set(r,[s])}}for(let[s,o]of n){let r=Kc(o,o.parentUuid,n,t,e);r!==o.parentUuid&&n.set(s,{...o,parentUuid:r})}}function Kc(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]:Lc(n,r,t)??Bc(n,r,t,o)??e}function Lc(n,e,t){if(!ir(n))return;let s=xt(n).filter(r=>x(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?xt(i).some(a=>x(a)&&a.type==="tool_use"&&s.includes(typeof a.id=="string"?a.id:"")):!1});return o.length===1?o[0]:void 0}function Bc(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 $c(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 zc(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=Ve(p);l&&i.set(l,p)}let a=new Map,u=new Map;for(let p of n.values()){let l=Ve(p);if(l){let f=a.get(l)??[];f.push(p),a.set(l,f);continue}if(ir(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=Ve(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 Y=u.get(R.uuid)??[];for(let Le of Y)t.has(Le.uuid)||g.push(Le)}if(y.length===0&&g.length===0)continue;let S=i.get(l);if(!S)continue;let k=[...f].sort((R,Y)=>Xo(R,Y,o));g.sort((R,Y)=>Xo(R,Y,o));let h=k.findIndex(R=>R.uuid===S.uuid),M=k.slice(0,Math.max(h,0)).filter(R=>!t.has(R.uuid)),T=k.slice(h+1).filter(R=>!t.has(R.uuid)),X=[...M,...T,...g];for(let R of X)t.add(R.uuid);d.set(S.uuid,X)}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"&&Ve(S)===Ve(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 ar(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"&&$c(s),Uc(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"?Qc(i):i;return zc(s,c,new Set(c.map(d=>d.uuid)))}function Qc(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 Gc(n){return n.isCompactSummary===!0||n.type==="system"&&n.subtype==="compact_boundary"}function jn(n,e,t){let s=n.flatMap(r=>x(r)&&typeof r.uuid=="string"&&typeof r.type=="string"&&or.has(r.type)?[r]:[]),o;for(let r of n)o=rr(r,e)??o;return ar(s,o,t)}function Zo(n,e,t){if(t==="historical"&&Gc(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 Hc(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 Fn(n){return n.type==="assistant"&&n.isApiErrorMessage===!0?{isApiErrorMessage:!0}:{}}function Un(n){return n.type==="user"&&n.toolUseResult!==void 0?{tool_use_result:n.toolUseResult}:{}}function er(n){let e=n.type==="system"?Hc(n.compactMetadata):void 0,t=Nn(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,...Fn(n),...Un(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 tr(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 Nt(n){try{return await Mc(Yo(n))}catch{return Yo(n)}}async function Wc(n){return N(await Nt(n))}async function ue(n){let e=Oe();if(n?.dir){let t=await Nt(n.dir),s=[I(e,N(t))];if(n.includeWorktrees!==!1)try{let{stdout:o}=await Oc("git",["worktree","list","--porcelain"],{cwd:n.dir}),r=o.split(`
29
- `).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 Wc(i)))}catch{}return s}try{return(await qn(e,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>I(e,s.name))}catch{return[]}}async function ur(n){try{let[e,t]=await Promise.all([qt(n,"utf-8"),Fe(n)]),s=e.trim().split(`
30
- `).filter(Boolean).flatMap(r=>{try{let i=JSON.parse(r);return x(i)?[i]:[]}catch{return[]}});if(s.length===0)return null;let o=Ac(n,".jsonl");return Kn(o,s,t.mtimeMs,{fileSize:t.size})??null}catch{return null}}function cr(n,e){return I(n,e,"subagents")}function lr(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 dr(n){let e=[];async function t(s){let o;try{o=await qn(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 Jc(n){try{let e=await qt(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 pr(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 Vc(n,e,t){let[s,o]=await Promise.all([qt(n,"utf-8"),Jc(n)]),r=[];for(let d of s.trim().split(`
31
- `).filter(Boolean))try{let m=JSON.parse(d);lr(m)&&r.push(m)}catch{}let a=pr(r).map(d=>{let m=Nn(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,...Fn(d),...Un(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 Ue(n){return N(await Nt(n??process.cwd()))}function Ye(n,e){return{projectKey:n,sessionId:e}}function Yc(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 Xc(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 Zc=/[\p{Cf}\p{Co}\p{Cn}\u200b-\u200f\u202a-\u202e\u2066-\u2069\ufeff\ue000-\uf8ff]/gu;function el(n){let e=n;for(let t=0;t<10;t+=1){let s=e.normalize("NFKC").replace(Zc,"");if(s===e)return s;e=s}return e}var tl=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/,nl=/<command-name>(.*?)<\/command-name>/,sl=/<bash-input>([\s\S]*?)<\/bash-input>/;function ol(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 rl(n,e){if(n.type!=="user"||n.isMeta===!0||n.isCompactSummary===!0)return;let t=n.message;if(!x(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(x(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(`
32
- `," ").trim();if(!i)continue;let a=nl.exec(i);if(a){e.commandFallback??=a[1];continue}let u=sl.exec(i);if(u)return`! ${u[1].trim()}`;if(!tl.test(i))return ol(i)}}function Kn(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 M=Date.parse(h.timestamp);Number.isFinite(M)&&(l=M)}if(!o){let M={commandFallback:r};o=rl(h,M),r=M.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??Yc(e),fileSize:s.fileSize,customTitle:g,firstPrompt:y,gitBranch:d,cwd:m||s.defaultCwd,tag:p,createdAt:l}}async function mr(n,e,t){let s=Ye(await Ue(t),e),o=await n.load(s);return o?{key:s,entries:o}:void 0}async function il(n){if(n?.sessionStore){let c=n.sessionStore;if(!c.listSessions)throw new Error("sessionStore.listSessions() is required by listSessions()");let d=await Nt(n.dir??process.cwd()),m=N(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(Ye(m,g));return k?Kn(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 ue(n),s=(await Promise.all(e.map(async c=>{try{return(await qn(c)).filter(m=>m.endsWith(".jsonl")).map(m=>I(c,m))}catch{return[]}}))).flat(),o=await Promise.all(s.map(ur)),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 al(n,e){if(e?.sessionStore){if(!ke(n))return;let s=await mr(e.sessionStore,n,e.dir);return s?Kn(n,s.entries,Xc(s.entries)):void 0}let t=await ue(e);for(let s of t){let o=I(s,`${n}.jsonl`),r=await ur(o);if(r)return r}}async function ul(n,e){if(!ke(n))return[];let t=e?.includeSystemMessages===!0,s=e?.view??"runtime";if(e?.sessionStore){let r=await mr(e.sessionStore,n,e.dir);if(!r)return[];let i=jn(r.entries,n,s);return tr(i.filter(a=>Zo(a,t,s)).map(er),e)}let o=await ue(e);for(let r of o){let i=I(r,`${n}.jsonl`);try{let a=await qt(i),{entries:u,activeLeaf:c}=await qc(a,n),m=ar(u,c,s).filter(p=>Zo(p,t,s)).map(er);return tr(m,e)}catch{continue}}return[]}async function cl(n,e,t){if(!ke(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(Ye(await Ue(t.dir),n),[{type:"custom-title",sessionId:n,customTitle:s,uuid:sr(),timestamp:new Date().toISOString()}]);return}let o=await ue(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Fe(i);let a=JSON.stringify({type:"custom-title",sessionId:n,customTitle:s,timestamp:new Date().toISOString()});await nr(i,a+`
33
- `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function ll(n,e,t){if(!ke(n))throw new Error(`Invalid sessionId: ${n}`);let s=e===null?null:el(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(Ye(await Ue(t.dir),n),[{type:"tag",sessionId:n,tag:s??"",uuid:sr(),timestamp:new Date().toISOString()}]);return}let o=await ue(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Fe(i);let a=JSON.stringify({type:"tag",sessionId:n,tag:s??"",timestamp:new Date().toISOString()});await nr(i,a+`
34
- `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function dl(n,e){if(e?.sessionStore){if(!ke(n))return[];if(!e.sessionStore.listSubkeys)throw new Error("sessionStore.listSubkeys() is required by listSubagents()");let s=await e.sessionStore.listSubkeys({projectKey:await Ue(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 ue(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Fe(o);let r=await dr(cr(s,n));return Array.from(new Set(r.map(i=>i.agentId)))}catch{continue}}return[]}async function pl(n,e,t){if(t?.sessionStore){if(!ke(n)||!e)return[];let o=await Ue(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(lr),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=pr(a).map(l=>{let f=Nn(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,...Fn(l),...Un(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 ue(t);for(let o of s){let r=I(o,`${n}.jsonl`);try{await Fe(r);let a=(await dr(cr(o,n))).find(u=>u.agentId===e);return a?await Vc(a.filePath,n,t):[]}catch{continue}}return[]}async function ml(n,e){if(!ke(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(Ye(await Ue(e.dir),n));return}let t=await ue(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Fe(o),await Promise.all([Vo(o,{force:!0}),Vo(I(s,n),{recursive:!0,force:!0})]);return}catch{continue}}throw new Error(`Session ${n} not found`)}import{randomUUID as jt}from"crypto";import{readdir as fl,readFile as gl,realpath as hl,stat as fr,writeFile as yl}from"fs/promises";import{dirname as Sl,join as Ln,resolve as wl}from"path";var gr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,vl=new Set(["user","assistant","attachment","system","progress"]);async function yr(n){let e=wl(n);try{return await hl(e)}catch{return e}}async function kl(n,e){let t=Oe();if(e){let o=N(await yr(e)),r=Ln(t,o,`${n}.jsonl`);try{if((await fr(r)).size>0)return r}catch{}return}let s;try{s=await fl(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Ln(t,o.name,`${n}.jsonl`);try{if((await fr(r)).size>0)return r}catch{}}}function Sr(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:jn(n,e,"historical").filter(r=>vl.has(r.type)),contentReplacements:t,relocatedCwd:s}}function bl(n,e){let t=[];for(let s of n.split(`
35
- `))if(s.trim())try{t.push(JSON.parse(s))}catch{}return Sr(t,e)}function _l(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(`
36
- `).trim();if(r)return r}}function Rl(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??_l(n)}function hr(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,jt()])),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=jt(),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:jt(),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||`${Rl(s)??"Forked session"} (fork)`,uuid:jt(),timestamp:d}),{sessionId:c,entries:m}}async function Cl(n,e={}){if(!gr.test(n))throw new Error(`Invalid sessionId: ${n}`);if(e.upToMessageId&&!gr.test(e.upToMessageId))throw new Error(`Invalid upToMessageId: ${e.upToMessageId}`);if(e.sessionStore){let i=await yr(e.dir??process.cwd()),a=N(i),u=await e.sessionStore.load({projectKey:a,sessionId:n});if(!u?.length)throw new Error(`Session ${n} not found`);let c=hr(Sr(u,n),n,e,u);return await e.sessionStore.append({projectKey:a,sessionId:c.sessionId},c.entries),{sessionId:c.sessionId}}let t=await kl(n,e.dir);if(!t)throw new Error(`Session ${n} not found`);let s=await gl(t,"utf8"),o=s.split(`
37
- `).filter(i=>i.trim()).flatMap(i=>{try{return[JSON.parse(i)]}catch{return[]}}),r=hr(bl(s,n),n,e,o);return await yl(Ln(Sl(t),`${r.sessionId}.jsonl`),`${r.entries.map(i=>JSON.stringify(i)).join(`
28
+ `||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 wc(n,e){let t;try{t=JSON.parse(Sc(n))}catch(s){let o=s instanceof Error?s.message:String(s);throw new Error(`Unable to parse settings from ${e}: ${o}`)}if(!ye(t))throw new TypeError(`Settings from ${e} must be a JSON object`);return Dt(t)}function je(n){return Array.isArray(n)?n.map(je):ye(n)?Dt(n):n}function Dt(n){let e={};for(let[t,s]of Object.entries(n))xn.has(t)||s===void 0||(e[t]=je(s));return e}function vc(n){let e=n.join(".");if(hc.has(e)||n.length===2&&n[0]==="providers")return"shallow";if(yc.has(e))return"union";if(n.length===2&&n[0]==="hooks")return"concat"}function On(n,e,t=[]){for(let[s,o]of Object.entries(e)){if(xn.has(s)||o===void 0)continue;let r=[...t,s],i=n[s],a=vc(r);if(a==="shallow"&&i&&o){let u={};ye(i)&&Object.assign(u,Dt(i)),ye(o)&&Object.assign(u,Dt(o)),n[s]=u;continue}if(Array.isArray(i)){let u=Array.isArray(o)?o:[o];if(a==="concat"){n[s]=[...i.map(je),...u.map(je)];continue}if(a==="union"){n[s]=[...new Set([...i,...u])].map(je);continue}}if(ye(i)&&ye(o))On(i,o,r);else if(ye(o)){let u={};On(u,o,r),n[s]=u}else n[s]=je(o)}}function kc(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===".."||!mc.test(t)||fc.test(t))throw new Error(`${v.configDirNameEnv} must be a valid directory name`);if(gc.has(t.toLowerCase()))throw new Error(`${v.configDirNameEnv} must not use a protected directory name`);return{user:t,project:t}}async function Dn(n,e){let t;try{t=await lc(e,"utf8")}catch(s){if(s.code==="ENOENT")return;throw s}return{source:n,path:$.resolve(e),settings:wc(t,$.resolve(e))}}async function bc(n={}){let e=$.resolve(n.cwd??process.cwd()),t=process.env,s=kc(t),o=t[v.cliHomeEnv]??t.GEMINI_CLI_HOME,r=o?$.resolve(e,o):dc.homedir(),i=t[v.configDirEnv]?$.resolve(e,t[v.configDirEnv]):$.join(r,s.user),a=$.join(e,s.project),u=new Set(n.settingSources??pc),c=$.resolve(r)===e,d=[];if(u.has("user")){let l=await Dn("user",$.join(i,"settings.json"));l&&d.push(l)}if(u.has("project")&&!c){let l=await Dn("project",$.join(a,"settings.json"));l&&d.push(l)}if(u.has("local")&&!c){let l=await Dn("local",$.join(a,"settings.local.json"));l&&d.push(l)}let m={},p={};for(let l of d){On(m,l.settings);for(let f of Object.keys(l.settings))xn.has(f)||(p[f]={source:l.source,...l.path?{path:l.path}:{}})}return{effective:m,provenance:p,sources:d}}var _c=30*6e4,Ot=class extends Error{constructor(){super("Global daemon is already initialized with a different workerIdleTimeoutMs"),this.name="DaemonConfigurationConflictError"}},we,z,ve,Fe,ke;function Wo(n){let e;try{e=Cc(n)}catch(o){return Promise.reject(o)}if(ke)return ke.then(()=>Wo(n));if(we){if(we.state==="ready")return Ho(e)?(Se(e).record("[GlobalDaemon] init reused the ready daemon"),Promise.resolve({mode:"daemon",daemon:we})):(Se(e).record("[GlobalDaemon] init rejected: configuration conflict with the ready daemon"),Promise.reject(new Ot));we=void 0,z=void 0,Fe=void 0}if(ve)return Ho(e)?(Se(e).record("[GlobalDaemon] init joined an in-flight initialization"),ve):(Se(e).record("[GlobalDaemon] init rejected: configuration conflict with an in-flight initialization"),Promise.reject(new Ot));if(Fe)return Se(e).record(`[GlobalDaemon] init short-circuited to direct mode (reason=${Fe.reason})`),Promise.resolve(Fe);z=e;let t=Se(e),s;return s=En(e).then(o=>(we=o,t.record("[GlobalDaemon] daemon ready"),{mode:"daemon",daemon:o})).catch(o=>{let r=Ec(o);return Fe=r,z=void 0,t.record(`[GlobalDaemon] startDaemon failed, falling back to direct mode (reason=${r.reason})`,o),r}).finally(()=>{ve===s&&(ve=void 0)}),ve=s,s}function Se(n){return new ie({debug:n.debug,debugFile:n.debugFile??Pn(n),stderr:n.stderr})}function Rc(){if(ke)return ke;let n=ve,e=we,t=Se(z??{}),s;return s=(async()=>{let o=e?{mode:"daemon",daemon:e}:n?await n:void 0;o?.mode==="daemon"?(t.record("[GlobalDaemon] shutting down the global daemon"),await o.daemon.stop(),t.record("[GlobalDaemon] global daemon stopped")):t.record("[GlobalDaemon] shutdown with no daemon to stop")})().finally(()=>{ke===s&&(we=void 0,z=void 0,ve=void 0,Fe=void 0,ke=void 0)}),ke=s,s}function Cc(n){let e=n.workerIdleTimeoutMs??_c;if(!Number.isSafeInteger(e)||e<0)throw new TypeError("workerIdleTimeoutMs must be a non-negative integer");return{...n,workerIdleTimeoutMs:e}}function Ho(n){return z?.auth===n.auth&&z.workerIdleTimeoutMs===n.workerIdleTimeoutMs&&z.cwd===n.cwd&&z.pathToQoderCLIExecutable===n.pathToQoderCLIExecutable&&z.proxy===n.proxy&&z.env===n.env}function Ec(n){return n instanceof K?{mode:"direct",reason:"protocol_version_mismatch"}:{mode:"direct",reason:"daemon_unavailable"}}import{McpServer as Pc}from"@modelcontextprotocol/sdk/server/mcp.js";function Tc(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 Pc({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.`);Lt(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 Mc(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 qn,readFile as qt,stat as Ue,appendFile as nr,realpath as Ac,rm as Vo}from"fs/promises";import{basename as Ic,join as I,resolve as Yo}from"path";import{execFile as Dc}from"child_process";import{randomUUID as sr}from"crypto";import{promisify as Oc}from"util";async function Jo(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 xc=Oc(Dc),qc=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,or=new Set(["user","assistant","system","progress","attachment"]);function x(n){return n!==null&&typeof n=="object"}function be(n){return qc.test(n)}function rr(n,e){if(!x(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 Nc(n,e){let t=[],s;return await Jo(n,o=>{s=rr(o,e)??s,x(o)&&typeof o.uuid=="string"&&typeof o.type=="string"&&or.has(o.type)&&t.push(o)}),{entries:t,activeLeaf:s}}function xt(n){if(!x(n.message))return[];let e=n.message.content;return Array.isArray(e)?e:[]}var jc=new Set(["user-rejected","permission-rule","automode-blocked","automode-unavailable","automode-parsing-error","interrupted","cancelled"]);function Fc(n){return typeof n=="string"&&jc.has(n)?n:void 0}function Nn(n){if(n.type!=="user")return;let e=xt(n).filter(r=>x(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 Ye(n){if(n.type!=="assistant"||!x(n.message))return;let e=n.message.id;return typeof e=="string"&&e?e:void 0}function ir(n){return n.type!=="user"||!n.parentUuid?!1:xt(n).some(e=>x(e)&&e.type==="tool_result")}function Uc(n){if(!x(n.message))return null;let e=n.message.id;return typeof e=="string"&&e.length>0?e:null}function Kc(n,e){let t=new Map;for(let[s,o]of n){let r=Uc(o);if(r){let i=t.get(r);i?i.push(s):t.set(r,[s])}}for(let[s,o]of n){let r=Lc(o,o.parentUuid,n,t,e);r!==o.parentUuid&&n.set(s,{...o,parentUuid:r})}}function Lc(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]:Bc(n,r,t)??$c(n,r,t,o)??e}function Bc(n,e,t){if(!ir(n))return;let s=xt(n).filter(r=>x(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?xt(i).some(a=>x(a)&&a.type==="tool_use"&&s.includes(typeof a.id=="string"?a.id:"")):!1});return o.length===1?o[0]:void 0}function $c(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 zc(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 Qc(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=Ye(p);l&&i.set(l,p)}let a=new Map,u=new Map;for(let p of n.values()){let l=Ye(p);if(l){let f=a.get(l)??[];f.push(p),a.set(l,f);continue}if(ir(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=Ye(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 Y=u.get(R.uuid)??[];for(let Be of Y)t.has(Be.uuid)||g.push(Be)}if(y.length===0&&g.length===0)continue;let S=i.get(l);if(!S)continue;let k=[...f].sort((R,Y)=>Xo(R,Y,o));g.sort((R,Y)=>Xo(R,Y,o));let h=k.findIndex(R=>R.uuid===S.uuid),M=k.slice(0,Math.max(h,0)).filter(R=>!t.has(R.uuid)),T=k.slice(h+1).filter(R=>!t.has(R.uuid)),X=[...M,...T,...g];for(let R of X)t.add(R.uuid);d.set(S.uuid,X)}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"&&Ye(S)===Ye(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 ar(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"&&zc(s),Kc(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"?Gc(i):i;return Qc(s,c,new Set(c.map(d=>d.uuid)))}function Gc(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 Hc(n){return n.isCompactSummary===!0||n.type==="system"&&n.subtype==="compact_boundary"}function jn(n,e,t){let s=n.flatMap(r=>x(r)&&typeof r.uuid=="string"&&typeof r.type=="string"&&or.has(r.type)?[r]:[]),o;for(let r of n)o=rr(r,e)??o;return ar(s,o,t)}function Zo(n,e,t){if(t==="historical"&&Hc(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 Wc(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 Fn(n){return n.type==="assistant"&&n.isApiErrorMessage===!0?{isApiErrorMessage:!0}:{}}function Un(n){return n.type==="user"&&n.toolUseResult!==void 0?{tool_use_result:n.toolUseResult}:{}}function er(n){let e=n.type==="system"?Wc(n.compactMetadata):void 0,t=Nn(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,...Fn(n),...Un(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 tr(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 Nt(n){try{return await Ac(Yo(n))}catch{return Yo(n)}}async function Jc(n){return N(await Nt(n))}async function ce(n){let e=xe();if(n?.dir){let t=await Nt(n.dir),s=[I(e,N(t))];if(n.includeWorktrees!==!1)try{let{stdout:o}=await xc("git",["worktree","list","--porcelain"],{cwd:n.dir}),r=o.split(`
29
+ `).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 Jc(i)))}catch{}return s}try{return(await qn(e,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>I(e,s.name))}catch{return[]}}async function ur(n){try{let[e,t]=await Promise.all([qt(n,"utf-8"),Ue(n)]),s=e.trim().split(`
30
+ `).filter(Boolean).flatMap(r=>{try{let i=JSON.parse(r);return x(i)?[i]:[]}catch{return[]}});if(s.length===0)return null;let o=Ic(n,".jsonl");return Kn(o,s,t.mtimeMs,{fileSize:t.size})??null}catch{return null}}function cr(n,e){return I(n,e,"subagents")}function lr(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 dr(n){let e=[];async function t(s){let o;try{o=await qn(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 Vc(n){try{let e=await qt(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 pr(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 Yc(n,e,t){let[s,o]=await Promise.all([qt(n,"utf-8"),Vc(n)]),r=[];for(let d of s.trim().split(`
31
+ `).filter(Boolean))try{let m=JSON.parse(d);lr(m)&&r.push(m)}catch{}let a=pr(r).map(d=>{let m=Nn(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,...Fn(d),...Un(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 Ke(n){return N(await Nt(n??process.cwd()))}function Xe(n,e){return{projectKey:n,sessionId:e}}function Xc(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 el=/[\p{Cf}\p{Co}\p{Cn}\u200b-\u200f\u202a-\u202e\u2066-\u2069\ufeff\ue000-\uf8ff]/gu;function tl(n){let e=n;for(let t=0;t<10;t+=1){let s=e.normalize("NFKC").replace(el,"");if(s===e)return s;e=s}return e}var nl=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/,sl=/<command-name>(.*?)<\/command-name>/,ol=/<bash-input>([\s\S]*?)<\/bash-input>/;function rl(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 il(n,e){if(n.type!=="user"||n.isMeta===!0||n.isCompactSummary===!0)return;let t=n.message;if(!x(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(x(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(`
32
+ `," ").trim();if(!i)continue;let a=sl.exec(i);if(a){e.commandFallback??=a[1];continue}let u=ol.exec(i);if(u)return`! ${u[1].trim()}`;if(!nl.test(i))return rl(i)}}function Kn(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 M=Date.parse(h.timestamp);Number.isFinite(M)&&(l=M)}if(!o){let M={commandFallback:r};o=il(h,M),r=M.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??Xc(e),fileSize:s.fileSize,customTitle:g,firstPrompt:y,gitBranch:d,cwd:m||s.defaultCwd,tag:p,createdAt:l}}async function mr(n,e,t){let s=Xe(await Ke(t),e),o=await n.load(s);return o?{key:s,entries:o}:void 0}async function al(n){if(n?.sessionStore){let c=n.sessionStore;if(!c.listSessions)throw new Error("sessionStore.listSessions() is required by listSessions()");let d=await Nt(n.dir??process.cwd()),m=N(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(Xe(m,g));return k?Kn(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 ce(n),s=(await Promise.all(e.map(async c=>{try{return(await qn(c)).filter(m=>m.endsWith(".jsonl")).map(m=>I(c,m))}catch{return[]}}))).flat(),o=await Promise.all(s.map(ur)),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 ul(n,e){if(e?.sessionStore){if(!be(n))return;let s=await mr(e.sessionStore,n,e.dir);return s?Kn(n,s.entries,Zc(s.entries)):void 0}let t=await ce(e);for(let s of t){let o=I(s,`${n}.jsonl`),r=await ur(o);if(r)return r}}async function cl(n,e){if(!be(n))return[];let t=e?.includeSystemMessages===!0,s=e?.view??"runtime";if(e?.sessionStore){let r=await mr(e.sessionStore,n,e.dir);if(!r)return[];let i=jn(r.entries,n,s);return tr(i.filter(a=>Zo(a,t,s)).map(er),e)}let o=await ce(e);for(let r of o){let i=I(r,`${n}.jsonl`);try{let a=await qt(i),{entries:u,activeLeaf:c}=await Nc(a,n),m=ar(u,c,s).filter(p=>Zo(p,t,s)).map(er);return tr(m,e)}catch{continue}}return[]}async function ll(n,e,t){if(!be(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(Xe(await Ke(t.dir),n),[{type:"custom-title",sessionId:n,customTitle:s,uuid:sr(),timestamp:new Date().toISOString()}]);return}let o=await ce(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Ue(i);let a=JSON.stringify({type:"custom-title",sessionId:n,customTitle:s,timestamp:new Date().toISOString()});await nr(i,a+`
33
+ `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function dl(n,e,t){if(!be(n))throw new Error(`Invalid sessionId: ${n}`);let s=e===null?null:tl(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(Xe(await Ke(t.dir),n),[{type:"tag",sessionId:n,tag:s??"",uuid:sr(),timestamp:new Date().toISOString()}]);return}let o=await ce(t);for(let r of o){let i=I(r,`${n}.jsonl`);try{await Ue(i);let a=JSON.stringify({type:"tag",sessionId:n,tag:s??"",timestamp:new Date().toISOString()});await nr(i,a+`
34
+ `);return}catch{continue}}throw new Error(`Session ${n} not found`)}async function pl(n,e){if(e?.sessionStore){if(!be(n))return[];if(!e.sessionStore.listSubkeys)throw new Error("sessionStore.listSubkeys() is required by listSubagents()");let s=await e.sessionStore.listSubkeys({projectKey:await Ke(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 ce(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Ue(o);let r=await dr(cr(s,n));return Array.from(new Set(r.map(i=>i.agentId)))}catch{continue}}return[]}async function ml(n,e,t){if(t?.sessionStore){if(!be(n)||!e)return[];let o=await Ke(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(lr),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=pr(a).map(l=>{let f=Nn(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,...Fn(l),...Un(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 ce(t);for(let o of s){let r=I(o,`${n}.jsonl`);try{await Ue(r);let a=(await dr(cr(o,n))).find(u=>u.agentId===e);return a?await Yc(a.filePath,n,t):[]}catch{continue}}return[]}async function fl(n,e){if(!be(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(Xe(await Ke(e.dir),n));return}let t=await ce(e);for(let s of t){let o=I(s,`${n}.jsonl`);try{await Ue(o),await Promise.all([Vo(o,{force:!0}),Vo(I(s,n),{recursive:!0,force:!0})]);return}catch{continue}}throw new Error(`Session ${n} not found`)}import{randomUUID as jt}from"crypto";import{readdir as gl,readFile as hl,realpath as yl,stat as fr,writeFile as Sl}from"fs/promises";import{dirname as wl,join as Ln,resolve as vl}from"path";var gr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,kl=new Set(["user","assistant","attachment","system","progress"]);async function yr(n){let e=vl(n);try{return await yl(e)}catch{return e}}async function bl(n,e){let t=xe();if(e){let o=N(await yr(e)),r=Ln(t,o,`${n}.jsonl`);try{if((await fr(r)).size>0)return r}catch{}return}let s;try{s=await gl(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Ln(t,o.name,`${n}.jsonl`);try{if((await fr(r)).size>0)return r}catch{}}}function Sr(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:jn(n,e,"historical").filter(r=>kl.has(r.type)),contentReplacements:t,relocatedCwd:s}}function _l(n,e){let t=[];for(let s of n.split(`
35
+ `))if(s.trim())try{t.push(JSON.parse(s))}catch{}return Sr(t,e)}function Rl(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(`
36
+ `).trim();if(r)return r}}function Cl(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??Rl(n)}function hr(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,jt()])),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=jt(),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:jt(),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||`${Cl(s)??"Forked session"} (fork)`,uuid:jt(),timestamp:d}),{sessionId:c,entries:m}}async function El(n,e={}){if(!gr.test(n))throw new Error(`Invalid sessionId: ${n}`);if(e.upToMessageId&&!gr.test(e.upToMessageId))throw new Error(`Invalid upToMessageId: ${e.upToMessageId}`);if(e.sessionStore){let i=await yr(e.dir??process.cwd()),a=N(i),u=await e.sessionStore.load({projectKey:a,sessionId:n});if(!u?.length)throw new Error(`Session ${n} not found`);let c=hr(Sr(u,n),n,e,u);return await e.sessionStore.append({projectKey:a,sessionId:c.sessionId},c.entries),{sessionId:c.sessionId}}let t=await bl(n,e.dir);if(!t)throw new Error(`Session ${n} not found`);let s=await hl(t,"utf8"),o=s.split(`
37
+ `).filter(i=>i.trim()).flatMap(i=>{try{return[JSON.parse(i)]}catch{return[]}}),r=hr(_l(s,n),n,e,o);return await Sl(Ln(wl(t),`${r.sessionId}.jsonl`),`${r.entries.map(i=>JSON.stringify(i)).join(`
38
38
  `)}
39
- `,{flag:"wx",mode:384}),{sessionId:r.sessionId}}function Ft(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}var Bn=class{entries=new Map;keys=new Map;modifiedAt=new Map;lastModifiedAt=0;async append(e,t){if(t.length===0)return;let s=Ft(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(Ft(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(Ft(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(Ft(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 El}from"fs";import{readdir as br,readFile as Pl,realpath as Tl,stat as wr}from"fs/promises";import{basename as vr,dirname as Ml,join as Xe,relative as Al,resolve as Il,sep as Dl}from"path";import{createInterface as Ol}from"readline";var xl=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ql=500,Nl=1024*1024;async function jl(n){let e=Il(n);try{return await Tl(e)}catch{return e}}async function Fl(n,e){let t=Oe();if(e){let o=N(await jl(e)),r=Xe(t,o,`${n}.jsonl`);try{if((await wr(r)).size>0)return{filePath:r,projectKey:o}}catch{}return}let s;try{s=await br(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Xe(t,o.name,`${n}.jsonl`);try{if((await wr(r)).size>0)return{filePath:r,projectKey:o.name}}catch{}}}async function Ul(n){let e=[];async function t(s){let o;try{o=await br(s,{withFileTypes:!0})}catch{return}o.sort((r,i)=>r.name.localeCompare(i.name));for(let r of o){let i=Xe(s,r.name);r.isDirectory()?await t(i):r.isFile()&&r.name.endsWith(".jsonl")&&e.push(i)}}return await t(n),e}async function kr(n,e,t,s){let o=Ol({input:El(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>=Nl)&&(await t.append(e,r),r=[],i=0)}r.length>0&&await t.append(e,r)}async function Kl(n,e,t={}){if(!xl.test(n))throw new Error(`Invalid sessionId: ${n}`);let s=await Fl(n,t.dir);if(!s)throw new Error(`Session ${n} not found`);let o=t.batchSize!==void 0&&t.batchSize>0?t.batchSize:ql;if(await kr(s.filePath,{projectKey:s.projectKey,sessionId:n},e,o),t.includeSubagents===!1)return;let r=s.filePath.replace(/\.jsonl$/,""),i=Xe(r,"subagents");for(let a of await Ul(i)){let c=Al(r,a).split(Dl);c[c.length-1]=vr(c[c.length-1],".jsonl");let d={projectKey:s.projectKey,sessionId:n,subpath:c.join("/")};await kr(a,d,e,o);let m=Xe(Ml(a),`${vr(a,".jsonl")}.meta.json`);try{let p=JSON.parse(await Pl(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 Ll}from"node:child_process";import{existsSync as Bl}from"node:fs";import{Worker as $l}from"node:worker_threads";var $n=3e4;async function _r(n,e={}){let t=xe({pathToQoderCLIExecutable:e.pathToQoderCLIExecutable},le);return t.transport==="worker"?Ql(n,{...e,pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):zl(n,{...e,pathToQoderCLIExecutable:e.pathToQoderCLIExecutable??ne()})}function zl(n,e){return new Promise((t,s)=>{let o=Ll(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(Cr(e.timeoutMs)))},e.timeoutMs??$n);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 Ql(n,e){Hl(e.signal);let t=oe(e.pathToQoderWorkerRuntime),s=await Me(t);Gl(s);let o=e.cwd??process.cwd(),r=Rr(e.env);delete r.NODE_OPTIONS;let i=ft(s,{cwd:o,env:r});return new Promise((a,u)=>{let c=new $l(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(M),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(Er(e.signal))},M=setTimeout(()=>{c.terminate(),S(Cr(e.timeoutMs))},e.timeoutMs??$n);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 Gl(n){if(!Bl(n.runtimePath))throw new Error(`Qoder worker runtime not found: ${n.runtimePath}`)}function Cr(n){return new Error(`qodercli subprocess timed out after ${n??$n}ms`)}function Hl(n){if(n?.aborted)throw Er(n)}function Er(n){if(n?.reason instanceof Error)return n.reason;let e=new Error("The operation was aborted");return e.name="AbortError",e}async function Wl(n){let e=["plugins","list","--json"];n?.orgId&&e.push("--org-id",n.orgId);let t=await Ke(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 Jl(n,e){let t=["plugins","enable",n];e?.scope&&t.push("--scope",e.scope);let s=await Ke(t,e);s.exitCode!==0&&Ze(s)}async function Vl(n,e){let t=["plugins","disable",n];e?.scope&&t.push("--scope",e.scope);let s=await Ke(t,e);s.exitCode!==0&&Ze(s)}async function Yl(n,e){let t=e?.scope??"user",s=await Ke(["plugins","install",n,"--scope",t,"--json"],e);s.exitCode!==0&&Ze(s);let o=JSON.parse(s.stdout);return{pluginId:o.pluginId,version:o.version??"local",path:o.path}}async function Xl(n,e){let t=e?.scope??"user",s=["plugins","uninstall",n,"--scope",t,"--json"];e?.keepData&&s.push("--keep-data");let o=await Ke(s,e);o.exitCode!==0&&Ze(o);let r=JSON.parse(o.stdout);return{pluginId:r.pluginId,fullyRemoved:r.fullyRemoved,reverseDependents:r.reverseDependents??[]}}async function Zl(n,e){let t;try{t=await Ke(["plugins","validate",n,"--json"],e)}catch(o){if(e?.signal?.aborted||o instanceof Error&&o.name==="AbortError")throw new D("Plugin validation was aborted");let r=o instanceof Error?o.message:String(o);throw ce("plugin_validation_failed",`Failed to run qodercli plugin validation: ${r}`)}let s;try{s=JSON.parse(t.stdout)}catch{let o=ed(`${t.stderr}
40
- ${t.stdout}`);throw ce(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 ce("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(nd(o))return o;throw ce("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 ce("plugin_validation_protocol_error","qodercli returned a malformed plugin validation error.");let r=o;throw ce(r.code,r.message)}throw t.exitCode!==0&&Ze(t),ce("plugin_validation_protocol_error","qodercli returned an unrecognized plugin validation response.")}function ed(n){return/unknown option[^\n]*--json/i.test(n)||/unknown command[^\n]*validate/i.test(n)}var td=3e4;function Ke(n,e){return _r(n,{pathToQoderCLIExecutable:e?.cliPath,cwd:e?.cwd,env:e?.env,signal:e?.signal,timeoutMs:td})}function Ze(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 ce(e,t)}function ce(n,e){let t=new Error(e);return t.code=n,t}function nd(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 Mr={};xr(Mr,{filterEscalatingDefaultMode:()=>Pr,isBashToolBackgroundLaunchResult:()=>Tr});var sd=new Set(["bypassPermissions","yolo","auto","acceptEdits"]);function Pr(n){let e=n.effective.permissions?.defaultMode;if(!e||!sd.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 Tr(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{D as AbortError,at as AuthAccessTokenEnvVarError,ut as AuthServiceAccountEnvVarError,Gt as CONTROL_REQUEST_TIMEOUT_CODE,Ce as ControlRequestError,es as DEFAULT_ACCESS_TOKEN_ENV_VAR,le as DEFAULT_RUNTIME_TRANSPORT,it as DEFAULT_SERVICE_ACCOUNT_ENV_VAR,Tt as DaemonRpcError,Nr as EXIT_REASONS,H as FrameTooLargeError,qr as HOOK_EVENTS,Bn as InMemorySessionStore,Rt as MAX_SKILL_EVOLUTION_REVIEW_THRESHOLD,Be as ModelPolicyTimeoutError,Pe as ProcessTransport,K as ProtocolVersionMismatchError,Re as QoderCliInitializationError,O as QoderCliProcessError,pe as QoderWorkerRuntimeError,L as UnsupportedCliCapabilityError,en as WIRE_PROTOCOL_VERSION,Ae as WorkerTransport,Br as accessToken,$r as accessTokenFromEnv,Mr as coreTypes,Pc as createSdkMcpServer,ml as deleteSession,Vl as disablePlugin,Jl as enablePlugin,Pr as filterEscalatingDefaultMode,Cl as forkSession,al as getSessionInfo,ul as getSessionMessages,pl as getSubagentMessages,Cs as hasResolvableQoderWorkerRuntime,Kl as importSessionToStore,Wo as initDaemon,Yl as installPlugin,Tr as isBashToolBackgroundLaunchResult,Hr as jobToken,Wl as listPlugins,il as listSessions,dl as listSubagents,zr as qodercliAuth,Mn as query,cl as renameSession,oe as resolveQoderWorkerRuntimePath,kc as resolveSettings,Qr as serviceAccount,Gr as serviceAccountFromEnv,_c as shutdownDaemon,En as startDaemon,uc as startup,rc as submitFeedback,ll as tagSession,Tc as tool,Xl as uninstallPlugin,Zl as validatePlugin};
39
+ `,{flag:"wx",mode:384}),{sessionId:r.sessionId}}function Ft(n){return JSON.stringify([n.projectKey,n.sessionId,n.subpath??null])}var Bn=class{entries=new Map;keys=new Map;modifiedAt=new Map;lastModifiedAt=0;async append(e,t){if(t.length===0)return;let s=Ft(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(Ft(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(Ft(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(Ft(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 Pl}from"fs";import{readdir as br,readFile as Tl,realpath as Ml,stat as wr}from"fs/promises";import{basename as vr,dirname as Al,join as Ze,relative as Il,resolve as Dl,sep as Ol}from"path";import{createInterface as xl}from"readline";var ql=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Nl=500,jl=1024*1024;async function Fl(n){let e=Dl(n);try{return await Ml(e)}catch{return e}}async function Ul(n,e){let t=xe();if(e){let o=N(await Fl(e)),r=Ze(t,o,`${n}.jsonl`);try{if((await wr(r)).size>0)return{filePath:r,projectKey:o}}catch{}return}let s;try{s=await br(t,{withFileTypes:!0})}catch{return}for(let o of s){if(!o.isDirectory()&&!o.isSymbolicLink())continue;let r=Ze(t,o.name,`${n}.jsonl`);try{if((await wr(r)).size>0)return{filePath:r,projectKey:o.name}}catch{}}}async function Kl(n){let e=[];async function t(s){let o;try{o=await br(s,{withFileTypes:!0})}catch{return}o.sort((r,i)=>r.name.localeCompare(i.name));for(let r of o){let i=Ze(s,r.name);r.isDirectory()?await t(i):r.isFile()&&r.name.endsWith(".jsonl")&&e.push(i)}}return await t(n),e}async function kr(n,e,t,s){let o=xl({input:Pl(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>=jl)&&(await t.append(e,r),r=[],i=0)}r.length>0&&await t.append(e,r)}async function Ll(n,e,t={}){if(!ql.test(n))throw new Error(`Invalid sessionId: ${n}`);let s=await Ul(n,t.dir);if(!s)throw new Error(`Session ${n} not found`);let o=t.batchSize!==void 0&&t.batchSize>0?t.batchSize:Nl;if(await kr(s.filePath,{projectKey:s.projectKey,sessionId:n},e,o),t.includeSubagents===!1)return;let r=s.filePath.replace(/\.jsonl$/,""),i=Ze(r,"subagents");for(let a of await Kl(i)){let c=Il(r,a).split(Ol);c[c.length-1]=vr(c[c.length-1],".jsonl");let d={projectKey:s.projectKey,sessionId:n,subpath:c.join("/")};await kr(a,d,e,o);let m=Ze(Al(a),`${vr(a,".jsonl")}.meta.json`);try{let p=JSON.parse(await Tl(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 Bl}from"node:child_process";import{existsSync as $l}from"node:fs";import{Worker as zl}from"node:worker_threads";var $n=3e4;async function _r(n,e={}){let t=qe({pathToQoderCLIExecutable:e.pathToQoderCLIExecutable},de);return t.transport==="worker"?Gl(n,{...e,pathToQoderWorkerRuntime:t.pathToQoderWorkerRuntime}):Ql(n,{...e,pathToQoderCLIExecutable:e.pathToQoderCLIExecutable??se()})}function Ql(n,e){return new Promise((t,s)=>{let o=Bl(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(Cr(e.timeoutMs)))},e.timeoutMs??$n);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 Gl(n,e){Wl(e.signal);let t=re(e.pathToQoderWorkerRuntime),s=await Ae(t);Hl(s);let o=e.cwd??process.cwd(),r=Rr(e.env);delete r.NODE_OPTIONS;let i=ft(s,{cwd:o,env:r});return new Promise((a,u)=>{let c=new zl(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(M),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(Er(e.signal))},M=setTimeout(()=>{c.terminate(),S(Cr(e.timeoutMs))},e.timeoutMs??$n);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 Hl(n){if(!$l(n.runtimePath))throw new Error(`Qoder worker runtime not found: ${n.runtimePath}`)}function Cr(n){return new Error(`qodercli subprocess timed out after ${n??$n}ms`)}function Wl(n){if(n?.aborted)throw Er(n)}function Er(n){if(n?.reason instanceof Error)return n.reason;let e=new Error("The operation was aborted");return e.name="AbortError",e}async function Jl(n){let e=["plugins","list","--json"];n?.orgId&&e.push("--org-id",n.orgId);let t=await Le(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 Vl(n,e){let t=["plugins","enable",n];e?.scope&&t.push("--scope",e.scope);let s=await Le(t,e);s.exitCode!==0&&et(s)}async function Yl(n,e){let t=["plugins","disable",n];e?.scope&&t.push("--scope",e.scope);let s=await Le(t,e);s.exitCode!==0&&et(s)}async function Xl(n,e){let t=e?.scope??"user",s=await Le(["plugins","install",n,"--scope",t,"--json"],e);s.exitCode!==0&&et(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 Le(s,e);o.exitCode!==0&&et(o);let r=JSON.parse(o.stdout);return{pluginId:r.pluginId,fullyRemoved:r.fullyRemoved,reverseDependents:r.reverseDependents??[]}}async function ed(n,e){let t;try{t=await Le(["plugins","validate",n,"--json"],e)}catch(o){if(e?.signal?.aborted||o instanceof Error&&o.name==="AbortError")throw new D("Plugin validation was aborted");let r=o instanceof Error?o.message:String(o);throw le("plugin_validation_failed",`Failed to run qodercli plugin validation: ${r}`)}let s;try{s=JSON.parse(t.stdout)}catch{let o=td(`${t.stderr}
40
+ ${t.stdout}`);throw le(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 le("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(sd(o))return o;throw le("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 le("plugin_validation_protocol_error","qodercli returned a malformed plugin validation error.");let r=o;throw le(r.code,r.message)}throw t.exitCode!==0&&et(t),le("plugin_validation_protocol_error","qodercli returned an unrecognized plugin validation response.")}function td(n){return/unknown option[^\n]*--json/i.test(n)||/unknown command[^\n]*validate/i.test(n)}var nd=3e4;function Le(n,e){return _r(n,{pathToQoderCLIExecutable:e?.cliPath,cwd:e?.cwd,env:e?.env,signal:e?.signal,timeoutMs:nd})}function et(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 le(e,t)}function le(n,e){let t=new Error(e);return t.code=n,t}function sd(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 Mr={};xr(Mr,{filterEscalatingDefaultMode:()=>Pr,isBashToolBackgroundLaunchResult:()=>Tr});var od=new Set(["bypassPermissions","yolo","auto","acceptEdits"]);function Pr(n){let e=n.effective.permissions?.defaultMode;if(!e||!od.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 Tr(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{D as AbortError,at as AuthAccessTokenEnvVarError,ut as AuthServiceAccountEnvVarError,Gt as CONTROL_REQUEST_TIMEOUT_CODE,Ee as ControlRequestError,es as DEFAULT_ACCESS_TOKEN_ENV_VAR,de as DEFAULT_RUNTIME_TRANSPORT,it as DEFAULT_SERVICE_ACCOUNT_ENV_VAR,Tt as DaemonRpcError,Nr as EXIT_REASONS,H as FrameTooLargeError,qr as HOOK_EVENTS,Bn as InMemorySessionStore,Rt as MAX_SKILL_EVOLUTION_REVIEW_THRESHOLD,$e as ModelPolicyTimeoutError,Te as ProcessTransport,K as ProtocolVersionMismatchError,Ce as QoderCliInitializationError,O as QoderCliProcessError,me as QoderWorkerRuntimeError,L as UnsupportedCliCapabilityError,en as WIRE_PROTOCOL_VERSION,Ie as WorkerTransport,Br as accessToken,$r as accessTokenFromEnv,Mr as coreTypes,Tc as createSdkMcpServer,fl as deleteSession,Yl as disablePlugin,Vl as enablePlugin,Pr as filterEscalatingDefaultMode,El as forkSession,ul as getSessionInfo,cl as getSessionMessages,ml as getSubagentMessages,Cs as hasResolvableQoderWorkerRuntime,Ll as importSessionToStore,Wo as initDaemon,Xl as installPlugin,Tr as isBashToolBackgroundLaunchResult,Hr as jobToken,Jl as listPlugins,al as listSessions,pl as listSubagents,zr as qodercliAuth,Mn as query,ll as renameSession,re as resolveQoderWorkerRuntimePath,bc as resolveSettings,Qr as serviceAccount,Gr as serviceAccountFromEnv,Rc as shutdownDaemon,En as startDaemon,cc as startup,rc as submitFeedback,dl as tagSession,Mc as tool,Zl as uninstallPlugin,ed as validatePlugin};