UNPKG

@anthropic-ai/claude-agent-sdk

Version:

SDK for building AI agents with Claude Code's capabilities. Programmatically interact with Claude to build autonomous agents that can understand codebases, edit files, and execute workflows.

42 lines • 119 kB
// (c) Anthropic PBC. All rights reserved. Use is subject to the Legal Agreements outlined here: https://code.claude.com/docs/en/legal-and-compliance.

// Version: 0.3.301

// symbol-dispose-prelude: bun build --banner for every SDK bundle; the build
// scripts grep for this line's tag. Runs before any module body. bun lowers
// `using` to a helper that keys disposal on the registry symbol when the
// well-known one is missing, while disposable objects key on the well-known
// global directly; on engines without a native `Symbol.dispose` (Safari/iOS,
// Firefox ESR, `node:vm` contexts on Node <=22 such as Jest's `node`
// environment and vitest's vm pools, and Node before 18.18 / 20.4) the two
// disagree and every lowered `using` throws. Registering both symbols first
// makes the keys agree; a no-op where they are native, and a locked-down
// `Symbol` (SES lockdown) keeps today's behaviour instead of failing to load.
if (typeof Symbol.dispose !== 'symbol') {
  try {
    Symbol.dispose = Symbol.for('Symbol.dispose')
  } catch {}
}
if (typeof Symbol.asyncDispose !== 'symbol') {
  try {
    Symbol.asyncDispose = Symbol.for('Symbol.asyncDispose')
  } catch {}
}
import{be,l,i,o,V,R,Q,c,w,Nt,Ut,L,p,r,ze,yt,g,bt,M,D,lt,u,$e,T,f,q,cn,un,Ct,Xe,Gt,zt,Wt,$t,Vt,Me,pe,Se,Ne,dt,pt,A,Ot,qt,t,E,_e,e,vt,Zt,fe,H,Qe,re,n,_t,Qt,Dt,Pt,en,Ee,tn,rn,ge,an}from"./core-x118ntbh.mjs";import{execFile as Pa}from"child_process";import{randomUUID as Aa}from"crypto";import{mkdir as tr,mkdtemp as kp,readFile as Ta,rm as Ia,writeFile as Ks}from"fs/promises";import{createRequire as xa}from"module";import{homedir as nr,tmpdir as Oa}from"os";import{dirname as Ls,isAbsolute as Ma,join as G,posix as Da,resolve as Xt,sep as Na,win32 as La}from"path";import{fileURLToPath as ja}from"url";import{setMaxListeners as vo}from"events";var Co=50;function nt(s=Co){let a=new AbortController;return vo(s,a.signal),a}var Nc=new FinalizationRegistry(({parentSignalRef:s,handler:a})=>{s.deref()?.removeEventListener("abort",a)});var Ro="ask-withdrawn-by-asker",Lc=new DOMException(Ro,"AbortError");var jc={"user-cancel":new DOMException("user-cancel","AbortError"),"remote-cancel":new DOMException("remote-cancel","AbortError"),shutdown:new DOMException("shutdown","AbortError"),interrupt:new DOMException("interrupt","AbortError"),"turn-abort":new DOMException("turn-abort","AbortError"),background:new DOMException("background","AbortError"),"refusal-fallback-edit":new DOMException("refusal-fallback-edit","AbortError"),"recovery-timeout":new DOMException("recovery-timeout","AbortError"),"permission-stop":new DOMException("permission-stop","AbortError")};var Po="server-fallback-tombstone";var Fc=new DOMException(Po,"AbortError");var Ao="subagent-park",Kc=new DOMException(Ao,"AbortError");import{spawn as Zo}from"child_process";import{existsSync as ei}from"fs";import{createInterface as ti}from"readline";import{StringDecoder as ni}from"string_decoder";var To=/hooks\.slack\.com\/(?:services|workflows|triggers)\/[A-Za-z0-9/_-]+/gi;var vn={bearer:[/\bBearer\s+(?=[A-Za-z0-9._~+/=-](?:[A-Za-z0-9._~+/=-]|%[0-9A-Fa-f]{2}){7})[A-Za-z0-9._~+/=-](?:[A-Za-z0-9._~+/=-]+|%[0-9A-Fa-f]{2})*/gi,"Bearer <token>"],basic:[/(:\s*)Basic\s+[A-Za-z0-9+/=]{8,}/gi,"$1Basic <token>"],sk:[/\bsk-[A-Za-z0-9_-]{20,}/g,"<token>"]},Io=[/\bBearer\s{1,512}(?=[A-Za-z0-9._~+/=-](?:[A-Za-z0-9._~+/=-]|%(?!20)[0-9A-Fa-f]{2}){15})(?:eyJ|(?=(?:[A-Za-z0-9._~+/=-]|%(?!20)[0-9A-Fa-f]{2}){0,64}[0-9=]))/i,/:\s{0,512}Basic\s{1,512}(?=[A-Za-z0-9+/=]{16})(?=[A-Za-z0-9+/=]{0,64}[0-9=])/i,/\bsk-(?=[A-Za-z0-9_-]{20})(?=[A-Za-z0-9_-]{0,64}[0-9])/];var Bc=new RegExp(`(?:\\b(?:xox[abe-z](?:\\.xox[a-z])?|xapp|xwfp)-${Ie("[A-Za-z0-9+/=%_-]")}|\\bxox[cd]-|(?:xox[abe-z](?:\\.xox[a-z])?|xapp|xwfp)-(?=[0-9])|xox[cd]-${Ie("[A-Za-z0-9+/=%_-]")}(?=[A-Za-z0-9+/=%_-]{16}))`,"i"),_r=[[rt("sk-ant-","[A-Za-z0-9_-]",8,Cn(8)),"<token>"],[rt("sk-(?:proj|svcacct|admin)-","[A-Za-z0-9_-]",20,Cn(20)),"<token>"]],wr=["AKIA","ASIA","ABIA","ACCA","A3T[A-Z0-9]"],xo=`(?:${wr.join("|")})`,Er=[[new RegExp(`(^|[^A-Za-z0-9+])${xo}[A-Z0-9]{16}(?![A-Za-z0-9+=])`,"g"),"$1<token>"]],kr=[[rt("gh[opusr]_","[A-Za-z0-9]",20,Ie("[A-Za-z0-9]")),"<token>"],[/github_pat_[A-Za-z0-9_]{82,}/g,"<token>"],[/sq0(?:atp|csp)-[A-Za-z0-9_-]{22,}/g,"<token>"],[/(^|[^A-Za-z0-9+/])EAAA[A-Za-z0-9+/=%_-]{56,}/g,"$1<token>"],[rt("gl(?:pat|dt|rt|ft|soat|oas|agent|ptt|cbt|imt|ffct)-","[A-Za-z0-9_=-]",20,Ie("[A-Za-z0-9_=-]"),"(?:\\.[0-9a-z]{9})?"),"<token>"],[rt("(?:xox[abe-z](?:\\.xox[a-z])?|xapp|xwfp)-","[A-Za-z0-9+/=%_-]",10,"(?=[0-9])","",Ie("[A-Za-z0-9+/=%_-]"),"gi"),"<token>"],[new RegExp(`(?:\\bxox[cd]-[A-Za-z0-9+/=%_-]{10,}|xox[cd]-${Ie("[A-Za-z0-9+/=%_-]")}[A-Za-z0-9+/=%_-]{16,})`,"gi"),"<token>"],[To,"hooks.slack.com/<redacted>"]];var Oo=[new RegExp("(?<![A-Za-z0-9_-])(?=[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]{10}[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]{10}[A-Za-z0-9_-]*)((?:[A-Za-z0-9_-]*?-)??)ey[A-Za-z0-9_-]{10}[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]{10}[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]{10}[A-Za-z0-9_-]*","g"),"$1<jwt>"],Mo=/\beyJ(?:[A-Za-z0-9_-]{256}|[A-Za-z0-9_-]{8,2048}\.[A-Za-z0-9_-]{10})/,vr=[[/(^|[^A-Za-z0-9+_-])AIza[A-Za-z0-9_-]{35}(?![A-Za-z0-9+=_-])/g,"$1<token>"],[/(^|[^A-Za-z0-9+_-])GOCSPX-[A-Za-z0-9_-]{28}(?![A-Za-z0-9+=_-])/g,"$1<token>"]],Cr=[[/(^|[^A-Za-z0-9+_-])[sr]k_(?:live|test|prod)_(?=[A-Za-z0-9]{0,64}[0-9])[A-Za-z0-9]{24,}(?![A-Za-z0-9+=_-])/g,"$1<token>"]],Do=[vn.bearer,vn.basic,..._r,vn.sk,...Er],No=[...kr,Oo,...vr,...Cr],Uc=[[new RegExp(`sk-${Cn(20)}[A-Za-z0-9_-]{20,}`,"g"),"<token>"],...wr.map((s)=>[new RegExp(`${s}[A-Z2-7]{16}`,"g"),"<token>"]),[/AIza[\w-]{35}/g,"<token>"],[/GOCSPX-[\w-]{28,}/g,"<token>"],[/[sr]k_(?:live|test|prod)_[A-Za-z0-9]{24,}/g,"<token>"]];function st(s){return[...Do,...No].reduce((a,[d,m])=>a.replace(d,m),String(s))}var Hc=[...Io,...[..._r,...Er,...kr,...vr,...Cr].map(([s])=>new RegExp(s.source,s.flags.replaceAll("g",""))),Mo];function rt(s,a,d,m,h="",y="",S="g"){let b=`${a}{${d},}${h}`;return new RegExp(`(?:\\b${s}${y}${b}|${s}${m}${b})`,S)}function Ie(s){return`(?=${s}{0,64}[0-9])`}function Cn(s){return`(?=[A-Za-z0-9_-]{0,64}?(?=[A-Za-z0-9]{${s}})(?=[A-Za-z0-9]{0,64}[0-9])(?=[A-Za-z0-9]{0,64}[A-Za-z]))`}import{randomUUID as zo}from"crypto";import{join as xr}from"path";import{AsyncLocalStorage as Lo}from"async_hooks";import{constants as jo}from"fs";import{appendFile as Fo,copyFile as Ko,lstat as $o,mkdir as Bo,open as Rr,readdir as Pr,readFile as Ar,stat as Uo,unlink as Ho,writeFile as Rn}from"fs/promises";class Ir{read(s){return Ar(s,"utf8")}readBytes(s){return Ar(s)}write(s,a,d){return Rn(s,a,{encoding:"utf8",mode:d})}async mkdir(s,a){try{await Bo(s,{recursive:!0,mode:a})}catch(d){if(r(d)!=="EEXIST")throw d}}atomicWrite(s,a,d){return Zt(s,a,d)}delete(s){return Ho(s)}list(s){return Pr(s)}append(s,a,d){return Fo(s,a,{encoding:"utf8",mode:d})}writeExclusive(s,a,d){return Rn(s,a,{encoding:"utf8",flag:"wx",mode:d})}writeBytesExclusive(s,a,d){return Rn(s,a,{flag:"wx",mode:d})}copy(s,a){return Ko(s,a)}async stat(s){return{mtimeMs:(await Uo(s)).mtimeMs}}async lstat(s){try{let a=await $o(s);return{isSymbolicLink:a.isSymbolicLink(),isFile:a.isFile(),isDirectory:a.isDirectory(),mtimeMs:a.mtimeMs,nlink:a.nlink}}catch(a){if(r(a)==="ENOENT")return;throw a}}async listEntries(s){return(await Pr(s,{withFileTypes:!0})).map((d)=>({name:d.name,isDirectory:d.isDirectory(),isFile:d.isFile()}))}async readRange(s,a,d){Pn("readRange","offset",a),Pn("readRange","length",d);let m=await Rr(s,"r");try{return await Tr(m,a,d)}finally{await m.close()}}async readTail(s,a,d){Pn("readTail","maxBytes",a);let m=d?.noFollow?jo.O_RDONLY|fe:"r",h=await Rr(s,m);try{let y=await h.stat();if(d?.noFollow&&!y.isFile())throw Object.assign(Error("ENXIO: not a regular file"),{code:"ENXIO",path:s});let{size:S}=y,b=Math.min(a,S);return await Tr(h,S-b,b)}finally{await h.close()}}}function Pn(s,a,d){if(!Number.isInteger(d)||d<0)throw RangeError(`${s}: ${a} must be a non-negative integer, got ${d}`)}async function Tr(s,a,d){if(d===0)return Buffer.alloc(0);let m=Buffer.alloc(d),h=0;while(h<d){let{bytesRead:y}=await s.read(m,h,d-h,a+h);if(y===0)break;h+=y}return h===d?m:Buffer.from(m.subarray(0,h))}var Go=new Lo;function An(){return Go.getStore()??new Ir}class Or{debugFilePath=void 0;initPromise=null;logStem=null}var Wo=new i(()=>new Or);function Mr(){return Wo.of(T().host)}function Dr(s){if(s.initPromise)return s.initPromise;if(!pt("DEBUG_CLAUDE_AGENT_SDK"))return s.debugFilePath=null,s.initPromise=Promise.resolve(),s.initPromise;let a=xr(A(),"debug");return s.logStem=`sdk-${zo()}`,s.debugFilePath=xr(a,`${s.logStem}.txt`),process.stderr.write(`SDK debug logs: ${s.debugFilePath}
`),s.initPromise=An().mkdir(a).catch(()=>{}),s.initPromise}function qo(s){return s.logStem===null?null:{namespace:"log",sessionId:s.logStem,channel:"debug"}}function Nr(){let s=Mr();return Dr(s),s.debugFilePath??null}function Y(s,a){let d=Mr();if(d.debugFilePath===null)return;let h=`${new Date().toISOString()} ${s}
`;Dr(d).then(()=>{if(a!==void 0){let y=qo(d);if(y!==null)a.append(y,[{data:h}]).catch(()=>{});return}if(d.debugFilePath)An().append(d.debugFilePath,h).catch(()=>{})})}function Vo(s){let a=s.trim();return a.startsWith("{")&&a.endsWith("}")}var Yo=new Set(["filesystem.denyRead","filesystem.denyWrite","network.deniedDomains","credentials.files","credentials.envVars"]),Jo=new Set(["ripgrep","network.tlsTerminate"]),Xo=new Set(["__proto__","constructor","prototype"]),Qo=["httpProxyPort","socksProxyPort"];function Lr(s,a,d=""){let m=H(s)?{...s}:{};for(let[h,y]of Object.entries(a)){if(Xo.has(h)||y===void 0)continue;let S=d?`${d}.${h}`:h,b=Object.hasOwn(m,h)?m[h]:void 0;if(Yo.has(S)&&Array.isArray(b)&&Array.isArray(y))m[h]=R([...b,...y]);else if(H(b)&&H(y)&&!Jo.has(S))m[h]=Lr(b,y,S);else m[h]=y}return m}function jr(s,a){let d={...s};if(!a)return d;let m=d.settings;if(m&&!Vo(m))throw Error("Cannot use both a settings file path and the sandbox option. Include the sandbox configuration in your settings file instead.");let h={};if(m)try{h=E(m)}catch{}let y=Lr(h.sandbox,a),S=a.credentials?.files,b=a.filesystem!==void 0||Array.isArray(S)&&S.some((P)=>H(P)&&P.mode==="deny"),_=y.filesystem;if(b&&a.filesystem?.disabled===void 0&&H(_)&&_.disabled===!0)delete _.disabled;let k=a.network,v=k?.allowedDomains!==void 0||(k?.deniedDomains?.length??0)>0||k?.strictAllowlist===!0,C=y.network;if(v&&H(C)){for(let P of Qo)if(k?.[P]===void 0&&C[P]!==void 0)delete C[P]}if(a.enabled===!0&&y.failIfUnavailable===void 0)y.failIfUnavailable=!0;return d.settings=t({...h,sandbox:y}),d}function K(s,a){return`${s}=${a}`}function At(s,a){let d=String(a);if(d.length>1&&d.startsWith("-"))return[K(s,d)];return[s,d]}function Fr(s,a,d){s.push(...At(`--${a}`,d))}var ri=2000,Tn=2048,Br="sdk-exit-after-stderr-drained",si=200;function In(s){return s==="exit"?Br:s}class Ur{#e=new Set;#t=!1;#n=()=>this.killAll();track(s){if(this.#e.add(s),!this.#t)this.#t=!0,process.on("exit",this.#n)}untrack(s){this.#e.delete(s)}isTracking(s){return this.#e.has(s)}get size(){return this.#e.size}killAll(){for(let s of this.#e)if(!s.killed)if(process.platform==="win32")try{s.stdin.end()}catch{}else s.kill("SIGTERM")}reset(){process.off("exit",this.#n),this.#t=!1,this.#e.clear()}}var Tt=new Ur,oi=/[(),\u0000-\u001f\u007f-\u009f]/;function ii(s){if(typeof s!=="string"||s.trim()==="")throw Error("Skill names must be non-empty strings.");if(!Xe(s))throw new c(`Invalid skill name ${t(s)}: the name contains an unpaired surrogate, which cannot survive the UTF-8 encoding of the CLI invocation; no skill discovered from the filesystem can have such a name.`,"skill name with unpaired surrogate rejected");if(s!==s.trim())throw new c(`Invalid skill name ${t(s)}: leading or trailing whitespace is not allowed — the Skill tool trims the invoked name, so a padded rule can never match. Remove the padding.`,"skill name with surrounding whitespace rejected");if(oi.test(s))throw new c(`Invalid skill name ${t(s)}: parentheses, commas, and control characters are not allowed in skill names. Skill names match the skill's directory name (or 'plugin:skill' for plugin-qualified skills); rename the skill if its directory name contains these characters.`,"invalid skill name rejected");if(s==="*")throw Error("Invalid skill name '*': use skills: 'all' to enable every skill.");if(s.endsWith(":*")||s.endsWith(" *"))throw new c(`Invalid skill name ${t(s)}: wildcard-suffix names are not allowed; list each skill by its exact name.`,"wildcard-suffix skill name rejected");if(s.startsWith("/"))throw new c(`Invalid skill name ${t(s)}: skill names may not start with '/'. Skills are invoked as slash commands, but the skills option takes the skill's canonical name — the directory name, or 'plugin:skill'.`,"skill name with leading slash rejected");if(s.includes("\\\\"))throw new c(`Invalid skill name ${t(s)}: consecutive backslashes are not allowed — the permission-rule parser collapses escaped backslashes, so the rule would name a different skill. Rename the skill.`,"skill name with consecutive backslashes rejected");if(s.endsWith("\\"))throw new c(`Invalid skill name ${t(s)}: names may not end with an unpaired backslash.`,"skill name with unpaired trailing backslash rejected");return s}class On{options;process;processStdin;processStdout;ready=!1;abortController;exitError;exitEventDelivered=!1;stderrTail="";exitListeners=[];abortHandler;forwardedAbort=nt();pendingWrites=[];pendingEndInput=!1;spawnResolve;spawnReject;spawnPromise;constructor(s){this.options=s;if(this.abortController=s.abortController||nt(),s.deferSpawn)this.spawnPromise=new Promise((a,d)=>{this.spawnResolve=a,this.spawnReject=d}),this.spawnPromise.catch(()=>{});else this.initialize()}spawn(){try{this.initialize()}catch(a){throw this.spawnAbort(L(a)),a}let s=this.pendingWrites;if(this.pendingWrites=[],this.spawnResolve)this.spawnResolve(),this.spawnResolve=void 0,this.spawnReject=void 0;for(let a of s)this.write(a);if(this.pendingEndInput)this.pendingEndInput=!1,this.processStdin?.end()}spawnAbort(s){if(this.spawnReject)this.spawnReject(s),this.spawnReject=void 0,this.spawnResolve=void 0,this.pendingWrites=[]}updateEnv(s){if(this.options.env)Object.assign(this.options.env,s);else this.options.env={...s}}updateResume(s){this.options.resume=s}getDefaultExecutable(){return Se()?"bun":"node"}spawnLocalProcess(s){let{command:a,args:d,cwd:m,env:h,signal:y}=s,S=Zo(a,d,{cwd:m,stdio:["pipe","pipe","pipe"],signal:y,env:h,windowsHide:!0});if(S.pid!==void 0&&this.options.onProcessSpawned)try{this.options.onProcessSpawned(S.pid)}catch(N){Y(`onProcessSpawned threw: ${p(N)}`)}let b=new ni("utf8"),_=!1,k=!1,v=!1,C,P=o(h.DEBUG_CLAUDE_AGENT_SDK)||this.options.stderr!==void 0;S.stderr.on("data",(N)=>{if(v)return;let F=b.write(N);if(this.stderrTail+=F,this.stderrTail.length>2*Tn)this.stderrTail=Ct(st(this.stderrTail),Tn);if(P)Y(F),this.options.stderr?.(F)}),S.stderr.on("error",(N)=>{Y(`[ProcessTransport] stderr read failed: ${N.code??N.message}`)});let O=()=>{if(v)return;if(v=!0,C)clearTimeout(C);S.emit(Br,S.exitCode,S.signalCode);let N=S.stderr;if(ui(N))N.unref();else N.destroy()};return S.stderr.once("close",()=>{if(this.stderrTail+=b.end(),_=!0,k)O()}),S.once("exit",()=>{if(k=!0,this.ready=!1,_)O();else C=setTimeout(O,si)}),{stdin:S.stdin,stdout:S.stdout,get killed(){return S.killed},get exitCode(){return S.exitCode},get signalCode(){return S.signalCode},kill:S.kill.bind(S),on:(N,F)=>S.on(In(N),F),once:(N,F)=>S.once(In(N),F),off:(N,F)=>S.off(In(N),F)}}initialize(){try{let{additionalDirectories:s=[],projectConfigRoot:a,agent:d,betas:m,cwd:h,executable:y=this.getDefaultExecutable(),executableArgs:S=[],extraArgs:b={},pathToClaudeCodeExecutable:_,env:k={...process.env},thinkingConfig:v,maxTurns:C,maxBudgetUsd:P,taskBudget:O,model:I,fallbackModel:N,jsonSchema:F,permissionMode:B,allowDangerouslySkipPermissions:X,permissionPromptToolName:ve,permissionPrompts:se,continueConversation:pn,resume:Re,settingSources:Be,skills:Ue,disallowedTools:ht=[],tools:He,mcpServers:Ge,strictMcpConfig:fn,canUseTool:ae,includePartialMessages:mn,plugins:We,pluginsViaInitialize:St,sandbox:gn}=this.options,{allowedTools:me=[]}=this.options;if(Ue!==void 0){let j=Ue==="all"?["Skill"]:Ue.map((Z)=>`Skill(${ii(Z)})`),te=new Set(me);me=[...me,...j.filter((Z)=>!te.has(Z))]}let x=["--output-format","stream-json","--verbose","--input-format","stream-json"];if(v){switch(v.type){case"enabled":if(v.budgetTokens===void 0)x.push("--thinking=adaptive");else x.push(K("--max-thinking-tokens",v.budgetTokens));break;case"disabled":x.push("--thinking=disabled");break;case"adaptive":x.push("--thinking=adaptive");break}if(v.type!=="disabled"&&v.display)x.push(K("--thinking-display",v.display))}if(this.options.effort)x.push(K("--effort",this.options.effort));if(C)x.push(K("--max-turns",C));if(P!==void 0)x.push(K("--max-budget-usd",P));if(O)x.push(K("--task-budget",O.total));if(I)x.push(K("--model",I));if(d)x.push(K("--agent",d));if(m&&m.length>0)x.push(K("--betas",m.join(",")));if(F)x.push(K("--json-schema",t(F)));if(this.options.debugFile)x.push(K("--debug-file",this.options.debugFile));else if(this.options.debug)x.push("--debug");if(!this.options.debugFile&&!this.options.spawnClaudeCodeProcess){let j=Nr();if(j)x.push(K("--debug-file",j))}if(ae){if(ve)throw Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other.");x.push("--permission-prompt-tool=stdio")}else if(ve)x.push(K("--permission-prompt-tool",ve));if(se)x.push(K("--permission-prompts",se));if(pn)x.push("--continue");if(Re)x.push(K("--resume",Re));if(this.options.channels&&this.options.channels.length>0)for(let j of this.options.channels)x.push(K("--channels",j));if(me.length>0)x.push(K("--allowedTools",me.join(",")));if(ht.length>0)x.push(K("--disallowedTools",ht.join(",")));if(He!==void 0)if(Array.isArray(He))x.push(K("--tools",He.join(",")));else x.push("--tools=default");if(Ge&&Object.keys(Ge).length>0)x.push(...At("--mcp-config",t({mcpServers:Ge})));if(Be!==void 0)x.push(K("--setting-sources",Be.join(",")));if(fn)x.push("--strict-mcp-config");if(B)x.push(K("--permission-mode",B));if(X)x.push("--allow-dangerously-skip-permissions");if(N){if(I&&N===I)throw Error("Fallback model cannot be the same as the main model. Please specify a different model for fallbackModel option.");x.push(K("--fallback-model",N))}if(this.options.includeHookEvents)x.push("--include-hook-events");if(mn)x.push("--include-partial-messages");if(this.options.sessionMirror)x.push("--session-mirror");if(a!==void 0)x.push(K("--project-config-root",a));for(let j of s)x.push(K("--add-dir",j));if(St)x.push("--await-initialize");else if(We&&We.length>0)for(let j of We)if(j.type==="local")x.push(j.skipMcpDiscovery?K("--plugin-dir-no-mcp",j.path):K("--plugin-dir",j.path));else throw Error(`Unsupported plugin type: ${j.type}`);if(this.options.forkSession)x.push("--fork-session");if(this.options.resumeSessionAt)x.push(K("--resume-session-at",this.options.resumeSessionAt));if(this.options.resumeDropsTurn!==void 0)x.push(K("--resume-drops-turn",this.options.resumeDropsTurn));if(this.options.sessionId)x.push(K("--session-id",this.options.sessionId));if(this.options.persistSession===!1)x.push("--no-session-persistence");if(this.options.managedSettings)x.push(...At("--managed-settings",this.options.managedSettings));let wt={...b??{}};if(this.options.settings)wt.settings=this.options.settings;let Et=jr(wt,gn);for(let[j,te]of Object.entries(Et))if(te===null)x.push(`--${j}`);else Fr(x,j,te);if(!k.CLAUDE_CODE_ENTRYPOINT)k.CLAUDE_CODE_ENTRYPOINT="sdk-ts";if(delete k.NODE_OPTIONS,o(k.DEBUG_CLAUDE_AGENT_SDK))k.DEBUG="1";else delete k.DEBUG;let qe=ai(_),Ve=qe?_:y,Ye=qe?[...S,...x]:[...S,_,...x],Je={command:Ve,args:Ye,cwd:h,env:k,signal:this.forwardedAbort.signal};if(this.options.spawnClaudeCodeProcess)Y(`Spawning Claude Code (custom): ${Ve} ${Ye.join(" ")}`),this.process=this.options.spawnClaudeCodeProcess(Je);else Y(`Spawning Claude Code: ${Ve} ${Ye.join(" ")}`),this.process=this.spawnLocalProcess(Je);if(this.processStdin=this.process.stdin,this.processStdout=this.process.stdout,this.processStdin.on("error",(j)=>{Y(`[ProcessTransport] stdin write failed (child likely exited): ${j.code??j.message}`),this.ready=!1}),Tt.track(this.process),this.abortHandler=()=>this.close(),this.abortController.signal.addEventListener("abort",this.abortHandler),this.abortController.signal.aborted)this.close();let Pe=this.process;Pe.on("error",(j)=>{this.ready=!1;let te=j,Z=te.syscall!==void 0?te.syscall.startsWith("spawn"):bt(j);if(Z&&!Pe.killed)Tt.untrack(Pe);if(this.abortController.signal.aborted)this.exitError=It(),w(j,{telemetryMessage:"Claude Code process aborted by user",errorClass:"aborted"});else if(Z&&bt(j)){let{message:Ae,telemetryMessage:hn,errorClass:kt}=ci(_,qe),ne={telemetryMessage:`${hn}${xn(j)}`,errorClass:kt,code:ze(j)};this.exitError=w(ReferenceError(Ae),ne),w(j,ne),Y(this.exitError.message)}else{let Ae={telemetryMessage:Z?`Failed to spawn Claude Code process${xn(j)}`:`Claude Code process error${xn(j)}`,errorClass:Z?"spawn_failed":"process_error",code:ze(j)};this.exitError=w(Error(`Failed to spawn Claude Code process: ${st(j.message)}`),Ae),w(j,Ae),Y(this.exitError.message)}}),Pe.on("exit",(j,te)=>{if(this.exitEventDelivered=!0,this.ready=!1,this.abortController.signal.aborted)this.exitError=It();else{let Z=this.getProcessExitError(j,te);if(Z)this.exitError=Z,Y(Z.message)}}),this.ready=!this.abortController.signal.aborted}catch(s){throw this.ready=!1,s}}getProcessExitError(s,a){if(s!==0&&s!==null){let d=Number.isInteger(s)?s:void 0;return w(Error(`Claude Code process exited with code ${s}${this.formatStderrTail()}`),{telemetryMessage:`Claude Code process exited with code ${d??"unknown"}`,errorClass:"process_exited_nonzero",exitCode:d})}else if(a){let d=/^SIG[A-Z0-9]{1,8}$/.test(a)?a:"unknown";return w(Error(`Claude Code process terminated by signal ${a}${this.formatStderrTail()}`),{telemetryMessage:`Claude Code process terminated by signal ${d}`,errorClass:"process_killed_by_signal",signal:d})}return}formatStderrTail(){let s=Ct(st(this.stderrTail),Tn).trim();return s?`. stderr: ${s}`:""}write(s){if(this.abortController.signal.aborted)throw Kr();if(this.spawnResolve){this.pendingWrites.push(s);return}if(!this.ready||!this.processStdin)throw Error("ProcessTransport is not ready for writing");if(this.processStdin.writableEnded){Y("[ProcessTransport] Dropping write to ended stdin stream");return}if(this.process?.killed||this.process?.exitCode!==null)throw Error("Cannot write to terminated process");if(this.exitError)throw w(Error(`Cannot write to process that exited with error: ${this.exitError.message}`),{telemetryMessage:`Cannot write to process that exited with error: ${Nt(this.exitError)??"untagged exit error"}`,errorClass:$r(this.exitError,"errorClass"),code:ze(this.exitError),exitCode:li(this.exitError),signal:$r(this.exitError,"signal")});Y(`[ProcessTransport] Writing to stdin: ${s.substring(0,100)}`);try{if(!this.processStdin.write(s))Y("[ProcessTransport] Write buffer full, data queued")}catch(a){throw this.ready=!1,Error(`Failed to write to process stdin: ${p(a)}`)}}[Symbol.dispose](){this.close()}close(){if(this.spawnAbort(this.abortController.signal.aborted?It():Error("Query closed before spawn")),this.processStdin)this.processStdin.end(),this.processStdin=void 0;if(this.abortHandler)this.abortController.signal.removeEventListener("abort",this.abortHandler),this.abortHandler=void 0;let s=this.process?.exitCode??null,a=this.process?.signalCode??null,d=!this.exitEventDelivered&&(s!==null&&s>=0||a!==null),m;if(d){if(this.exitEventDelivered=!0,m=this.abortController.signal.aborted?It():this.getProcessExitError(s,a),m&&!this.exitError)this.exitError=m}let h=this.exitListeners;this.exitListeners=[];for(let{callback:b,handler:_}of h)if(this.process?.off("exit",_),d)try{b(m)}catch(k){Y(`[ProcessTransport] onExit callback threw during close(): ${p(k)}`)}let y=()=>{if(this.abortController.signal.aborted)this.forwardedAbort.abort(this.abortController.signal.reason)},S=this.process;if(S&&!S.killed&&S.exitCode===null&&S.signalCode==null)setTimeout((b,_)=>{if(b.exitCode!==null||b.signalCode!=null){_();return}if(process.platform==="win32"){setTimeout((k,v)=>{if(k.exitCode===null)k.kill("SIGKILL");v()},5000,b,_).unref();return}b.kill("SIGTERM"),setTimeout((k)=>{if(k.exitCode===null)k.kill("SIGKILL")},5000,b).unref(),_()},ri,S,y).unref(),S.once("exit",()=>Tt.untrack(S));else if(S)Tt.untrack(S),y();this.ready=!1}isReady(){return this.ready}async*readMessages(){if(this.spawnPromise)await this.spawnPromise,this.spawnPromise=void 0;if(!this.processStdout)throw Error("ProcessTransport output stream not available");if(this.exitError)throw this.exitError;let s=ti({input:this.processStdout}),a=this.process?(()=>{let d=this.process,m=()=>s.close();return d.on("error",m),()=>d.off("error",m)})():void 0;if(this.exitError)s.close();try{for await(let d of s)if(d.trim()){let m;try{m=E(d)}catch(h){Y(`Non-JSON stdout: ${d}`);continue}yield m}if(this.exitError)throw this.exitError;await this.waitForExit()}finally{a?.(),s.close()}}endInput(){if(this.spawnResolve){this.pendingEndInput=!0;return}if(this.processStdin)this.processStdin.end()}onExit(s){if(!this.process)return()=>{};let a=(d,m)=>{let h=this.getProcessExitError(d,m);s(h)};return this.process.on("exit",a),this.exitListeners.push({callback:s,handler:a}),()=>{if(this.process)this.process.off("exit",a);let d=this.exitListeners.findIndex((m)=>m.handler===a);if(d!==-1)this.exitListeners.splice(d,1)}}async waitForExit(){if(this.exitError)throw this.exitError;if(!this.process||this.process.exitCode===0||this.process.killed&&this.exitEventDelivered)return;return new Promise((s,a)=>{let d=(h,y)=>{if(this.abortController.signal.aborted){a(Kr());return}let S=this.getProcessExitError(h,y);if(S)a(S);else s()};this.process.once("exit",d);let m=(h)=>{this.process.off("exit",d),a(h)};this.process.once("error",m),this.process.once("exit",()=>{this.process.off("error",m)})})}}function ai(s){return![".js",".mjs",".tsx",".ts",".jsx"].some((d)=>s.endsWith(d))}function ci(s,a){let d=a?"native binary":"executable",m=st(s);if(ei(s))return{message:a?`Claude Code native binary at ${m} exists but failed to launch. This usually means the binary does not match this system's libc — e.g. spawning a musl-linked binary on a glibc Linux host fails because the musl dynamic loader (/lib/ld-musl-*) is missing. Specify a matching binary with options.pathToClaudeCodeExecutable.`:`Claude Code executable at ${m} exists but failed to launch.`,telemetryMessage:`Claude Code ${d} exists at the configured path but failed to launch`,errorClass:"executable_launch_failed"};return{message:a?`Claude Code native binary not found at ${m}. Please ensure Claude Code is installed via native installer or specify a valid path with options.pathToClaudeCodeExecutable.`:`Claude Code executable not found at ${m}. Is options.pathToClaudeCodeExecutable set?`,telemetryMessage:`Claude Code ${d} not found at the configured path`,errorClass:"executable_not_found"}}function xn(s){let a=ze(s);return a===void 0?"":` (${a})`}function It(){return w(new pe("Claude Code process aborted by user"),{telemetryMessage:"Claude Code process aborted by user",errorClass:"aborted"})}function Kr(){return w(new pe("Operation aborted"),{telemetryMessage:"Operation aborted",errorClass:"aborted"})}function $r(s,a){let d=Object.hasOwn(s,a)?Reflect.get(s,a):void 0;return typeof d==="string"?d:void 0}function li(s){let a=Object.hasOwn(s,"exitCode")?Reflect.get(s,"exitCode"):void 0;return typeof a==="number"?a:void 0}function ui(s){return typeof Reflect.get(s,"unref")==="function"}import{existsSync as di}from"fs";var xe="@anthropic-ai/claude-agent-sdk";function pi(){if(process.platform!=="linux")return!1;let s=typeof process.report?.getReport==="function"?process.report.getReport():null;return s!=null&&s.header?.glibcVersionRuntime===void 0}function Hr(s,a={}){let d=a.platform??process.platform,m=a.arch??process.arch,h=a.exists??di,y=a.preferMusl??pi(),S="claude",b=d==="win32"?".exe":"",k=(d==="android"?[`${xe}-linux-${m}-android`]:d==="linux"?y?[`${xe}-linux-${m}-musl`,`${xe}-linux-${m}`]:[`${xe}-linux-${m}`,`${xe}-linux-${m}-musl`]:[`${xe}-${d}-${m}`]).map((v)=>`${v}/claude${b}`);for(let v of k)try{let C=s(v);if(h(C))return C}catch{}return null}var fi=["signed_out","identity_changed","transient","refresh_failed"];function Gr(s){return fi.some((a)=>a===s)}var xt=600000;class Mn{returned;queue=[];readResolve;readReject;isDone=!1;hasError;started=!1;constructor(s){this.returned=s}get ended(){return this.isDone}[Symbol.asyncIterator](){if(this.started)throw Error("Stream can only be iterated once");return this.started=!0,this}next(){if(this.queue.length>0)return Promise.resolve({done:!1,value:this.queue.shift()});if(this.isDone)return Promise.resolve({done:!0,value:void 0});if(this.hasError)return Promise.reject(this.hasError);return new Promise((s,a)=>{this.readResolve=s,this.readReject=a})}enqueue(s){if(this.readResolve){let a=this.readResolve;this.readResolve=void 0,this.readReject=void 0,a({done:!1,value:s})}else this.queue.push(s)}done(){if(this.isDone=!0,this.readResolve){let s=this.readResolve;this.readResolve=void 0,this.readReject=void 0,s({done:!0,value:void 0})}}error(s){if(this.hasError=s,this.readReject){let a=this.readReject;this.readResolve=void 0,this.readReject=void 0,a(s)}}return(){if(this.isDone=!0,this.returned)this.returned();return Promise.resolve({done:!0,value:void 0})}}function Dn(s,a){re("tengu_feature_ok",{...a,feature_name:Q(s)})}function mi(s,a,d){re("tengu_feature_bad",{...d,feature_name:Q(s),error_code:yt(a)})}function Mt(s,a,d){re("tengu_feature_sad",{...d,feature_name:Q(s),error_code:yt(a)})}async function W(s,a,d){try{let m=await a();return Dn(s),m}catch(m){throw mi(s,d?.(m)??"error"),m}}function zr(s){return"method"in s&&"id"in s&&s.id!==null}var Wr=Object.freeze({}),qr=Object.freeze({name:"claude-code",title:"Claude Code",description:"Anthropic's agentic coding tool",websiteUrl:"https://claude.com/claude-code"}),Kl=Symbol("swallow");class Nn{sendMcpMessage;isClosed=!1;constructor(s){this.sendMcpMessage=s}onclose;onerror;onmessage;async start(){}async send(s){if(this.isClosed)throw Error("Transport is closed");this.sendMcpMessage(s)}async close(){if(this.isClosed)return;this.isClosed=!0,this.onclose?.()}}var Vr=["remote_tool_call","remote_plumbing_call","remote_tools_probe","remote_tools_reannounce"];var Yr="2025-11-25";var gi="notifications/tools/list_changed";function Jr(s){return n(s)&&!("id"in s)&&s.method===gi}var Xr=250,Lt="sdk-manifest-capture:",Oe=Symbol("suppressControlResponse");function Qr(s,a,d){for(let m of d){let h=m==="tools"?Pt(a):void 0;e(h?`[Query] MCP server '${s}': ${en(h)}`:`[Query] MCP server '${s}': ignoring malformed ${m} in its config`)}}class jt{transport;isSingleUserTurn;canUseTool;hooks;abortController;jsonSchema;initConfig;onElicitation;getOAuthToken;getHostAuthToken;onUserDialog;verbatimPrompts;runEndCeilingMs;pendingControlResponses=new Map;unmatchedControlResponses=new Map;static UNMATCHED_CONTROL_RESPONSES_MAX=1024;cleanupPerformed=!1;cleanupCause;sdkMessages;inputStream=new Mn;initialization;cancelControllers=new Map;hookCallbacks=new Map;nextCallbackId=0;initHooksPayload;sdkMcpServers=new Map;initializeWritten;initializeHasBeenWritten=!1;markInitializeWritten;writingFirstInitialize=!1;stopSdkMcpManifestCapture;sdkMcpToolsChangedDuringCapture=new Set;pendingMcpResponses=new Map;runEndedResolve;runEnded=!1;resultReceived=!1;runEndCeilingTimer;sessionState;lastErrorResultText;errorTextBeforeModelLessTurns;modelLessTurnEnded=!1;latestCommands;transcriptMirrorBatcher;cleanupCallbacks=[];cleanupPromise;setIsSingleUserTurn(s){this.isSingleUserTurn=s}setTranscriptMirrorBatcher(s){this.transcriptMirrorBatcher=s}reportMirrorError(s,a){let d={type:"system",subtype:"mirror_error",error:a,key:s,uuid:be(),session_id:s.sessionId};this.inputStream.enqueue(d)}addCleanupCallback(s){if(this.cleanupPerformed)s();else this.cleanupCallbacks.push(s)}isClosed(){return this.cleanupPerformed}hasBidirectionalNeeds(){return this.sdkMcpServers.size>0||this.hooks!==void 0&&Object.keys(this.hooks).length>0||this.canUseTool!==void 0||this.onElicitation!==void 0||this.onUserDialog!==void 0||this.getOAuthToken!==void 0||this.getHostAuthToken!==void 0||this.workSecretAnswerer!==void 0}remoteControlCallGeneration=0;uiHost;workSecretAnswerer;constructor(s,a,d,m,h,y=new Map,S,b,_,k,v,C,P=!1,O=xt){this.transport=s;this.isSingleUserTurn=a;this.canUseTool=d;this.hooks=m;this.abortController=h;this.jsonSchema=S;this.initConfig=b;this.onElicitation=_;this.getOAuthToken=k;this.getHostAuthToken=v;this.onUserDialog=C;this.verbatimPrompts=P;this.runEndCeilingMs=O;for(let[I,N]of y)this.connectSdkMcpServer(I,N);this.sdkMessages=this.readSdkMessages(),this.readMessages(),this.initializeWritten=new Promise((I)=>{this.markInitializeWritten=()=>{this.initializeHasBeenWritten=!0,I()}}),this.initialization=this.initialize({first:!0}),this.initialization.catch(()=>{})}setError(s){this.inputStream.error(s)}async stopTask(s){await this.request({subtype:"stop_task",task_id:s})}async backgroundTasks(s){return(await this.request({subtype:"background_tasks",tool_use_id:s})).response.backgrounded??!0}close(){this.cleanup()}cleanup(s){if(this.clearRunEndCeiling(),this.cleanupPromise)return this.cleanupPromise;return this.cleanupPerformed=!0,this.cleanupCause=s,this.stopSdkMcpManifestCapture?.(),this.cleanupPromise=this.performCleanup(s),this.cleanupPromise}async performCleanup(s){for(let a of this.cleanupCallbacks)try{a()}catch{}if(this.cleanupCallbacks=[],this.transcriptMirrorBatcher)try{await this.transcriptMirrorBatcher.flush()}catch{}try{for(let a of this.cancelControllers.values())a.abort();this.cancelControllers.clear(),this.transport.close()}catch(a){e(`[Query.cleanup] transport.close() failed: ${p(a)}`,{level:"error"})}try{let a=s??Ln();for(let{reject:d}of this.pendingControlResponses.values())d(a);this.pendingControlResponses.clear(),this.unmatchedControlResponses.clear();for(let{reject:d}of this.pendingMcpResponses.values())d(a);this.pendingMcpResponses.clear(),this.hookCallbacks.clear();for(let{transport:d}of this.sdkMcpServers.values())d.close().catch(()=>{});if(this.sdkMcpServers.clear(),s)this.inputStream.error(s);else this.inputStream.done()}catch(a){}if(this.transport.waitForExit){let a=new AbortController;try{await Promise.race([this.transport.waitForExit(),M(2000,a.signal)])}catch{}finally{a.abort()}}}next(...[s]){return this.sdkMessages.next(...[s])}async return(s){return await this.cleanup(),this.sdkMessages.return(s)}async throw(s){return await this.cleanup(),this.sdkMessages.throw(s)}[Symbol.asyncIterator](){return this.sdkMessages}async[Symbol.asyncDispose](){await this.cleanup()}async readMessages(){try{for await(let s of this.transport.readMessages()){if(s.type==="control_response"){let a=this.pendingControlResponses.get(s.response.request_id);if(a)a.handler(s.response);else{if(this.unmatchedControlResponses.size>=jt.UNMATCHED_CONTROL_RESPONSES_MAX){let d=this.unmatchedControlResponses.keys().next().value;if(d!==void 0)this.unmatchedControlResponses.delete(d)}this.unmatchedControlResponses.set(s.response.request_id,s.response)}continue}else if(s.type==="control_request"){this.handleControlRequest(s);continue}else if(s.type==="control_cancel_request"){this.handleControlCancelRequest(s);continue}else if(s.type==="keep_alive")continue;else if(s.type==="transcript_mirror"){this.transcriptMirrorBatcher?.enqueue(s.filePath,s.entries);continue}if(s.type==="system"&&s.subtype==="commands_changed"&&Array.isArray(s.commands))this.latestCommands=s.commands;if(s.type==="system"&&(s.subtype==="post_turn_summary"||s.subtype==="task_summary"||s.subtype==="session_metadata")){this.inputStream.enqueue(s);continue}if(s.type==="active_goal"){this.inputStream.enqueue(s);continue}if(s.type==="autocompact_state"){this.inputStream.enqueue(s);continue}if(s.type==="result"){if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();let a=s.is_error?s.subtype==="success"?s.result:s.errors.map((d)=>d.trim()).filter(Boolean).join("; "):void 0;if(this.lastErrorResultText=a||void 0,this.modelLessTurnEnded=s.subtype==="success"&&!s.is_error&&s.num_turns===0&&s.result==="",!this.modelLessTurnEnded)this.errorTextBeforeModelLessTurns=this.lastErrorResultText;if(this.resultReceived=!0,this.sessionState===void 0||this.sessionState==="idle"||!this.hasBidirectionalNeeds())this.endRun();else this.armRunEndCeiling()}else if(s.type==="system"&&s.subtype==="session_state_changed"){if(this.sessionState=s.state,s.state==="idle"){if(this.resultReceived)this.endRun()}else if(!(this.isSingleUserTurn&&this.runEnded)){if(this.runEnded=!1,s.state==="requires_action")this.clearRunEndCeiling();else if(this.resultReceived)this.armRunEndCeiling()}if("sdk_host_only"in s&&s.sdk_host_only===!0)continue}else{if(this.lastErrorResultText=void 0,s.type==="system"&&s.subtype==="init")this.modelLessTurnEnded=!1;else if(s.type!=="system"||s.subtype==="compact_boundary")this.errorTextBeforeModelLessTurns=void 0,this.modelLessTurnEnded=!1;if((s.type==="assistant"||s.type==="stream_event")&&s.parent_tool_use_id===null&&!(this.isSingleUserTurn&&this.runEnded))this.runEnded=!1,this.clearRunEndCeiling()}this.inputStream.enqueue(s)}if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();this.inputStream.done(),this.cleanup()}catch(s){if(this.transcriptMirrorBatcher)await this.transcriptMirrorBatcher.flush();let a=this.lastErrorResultText??(this.modelLessTurnEnded?this.errorTextBeforeModelLessTurns:void 0);if(a!==void 0&&!(s instanceof pe)&&s?.name!=="SSEHttpError"){let d=w(Error(`Claude Code returned an error result: ${a}`),{telemetryMessage:"Claude Code returned an error result",errorClass:"error_result"});e(`[Query.readMessages] Replacing exit error with result text. Original: ${p(s)}`),this.inputStream.error(d),this.cleanup(d);return}this.inputStream.error(s),this.cleanup(s)}}async handleControlRequest(s){if(this.cleanupPerformed){e(`[Query.handleControlRequest] Request ${s.request_id} (${s.request.subtype}) arrived after close — skipping`);return}if(this.cancelControllers.has(s.request_id)){e(`[Query.handleControlRequest] Duplicate delivery of in-flight request ${s.request_id} (${s.request.subtype}) — skipping`);return}let a=new AbortController;this.cancelControllers.set(s.request_id,a);try{let d;try{let m=await this.processControlRequest(s,a.signal);if(this.cleanupPerformed)return;if(m===Oe)return;let h={type:"control_response",response:{subtype:"success",request_id:s.request_id,response:m}};d=t(h)+`
`}catch(m){if(this.cleanupPerformed)return;let h={type:"control_response",response:{subtype:"error",request_id:s.request_id,error:p(m)}};d=t(h)+`
`}try{await Promise.resolve(this.transport.write(d))}catch(m){e(`[Query.handleControlRequest] Response write failed: ${p(m)}`,{level:"error"})}}finally{if(this.cancelControllers.get(s.request_id)===a)this.cancelControllers.delete(s.request_id)}}handleControlCancelRequest(s){let a=this.cancelControllers.get(s.request_id);if(a)a.abort(),this.cancelControllers.delete(s.request_id)}async processControlRequest(s,a){if(Vr.some((d)=>d===s.request.subtype))return e(`[Query.processControlRequest] ${s.request.subtype} ${s.request_id} is for the machine serving this session's tools — leaving it unanswered`),Oe;if(s.request.subtype==="can_use_tool"){if(!this.canUseTool)throw Error("canUseTool callback is not provided.");let d=s.request.computer_folder,m=await this.canUseTool(s.request.tool_name,s.request.input,{signal:a,suggestions:s.request.permission_suggestions,blockedPath:s.request.blocked_path,...s.request.mcp_server&&{mcpServer:{name:s.request.mcp_server.name,source:s.request.mcp_server.source}},decisionReason:s.request.decision_reason,...typeof s.request.decision_reason_type==="string"&&{decisionReasonType:s.request.decision_reason_type},...typeof s.request.decision_reason_code==="string"&&{decisionReasonCode:s.request.decision_reason_code},title:s.request.title,displayName:s.request.display_name,description:s.request.description,defaultToNo:s.request.default_to_no,suppressAlwaysAllowRule:s.request.suppress_always_allow_rule,toolUseID:s.request.tool_use_id,agentID:s.request.agent_id,...typeof s.request.plugin==="string"&&{plugin:s.request.plugin},requestId:s.request_id,...typeof s.request.requires_user_interaction==="boolean"&&{requiresUserInteraction:s.request.requires_user_interaction},...typeof s.request.server_prompt==="string"&&{serverPrompt:s.request.server_prompt},...typeof d==="object"&&d!==null&&"path"in d&&typeof d.path==="string"&&"computer_name"in d&&typeof d.computer_name==="string"&&{computerFolder:{path:d.path,computer_name:d.computer_name}},...s.request.matched_ask_rule&&{matchedAskRule:{source:s.request.matched_ask_rule.source,toolName:s.request.matched_ask_rule.tool_name,...s.request.matched_ask_rule.rule_content!==void 0&&{ruleContent:s.request.matched_ask_rule.rule_content}}}});if(m===null)return Oe;return{...m,toolUseID:s.request.tool_use_id}}else if(s.request.subtype==="hook_callback")return await this.handleHookCallbacks(s.request.callback_id,s.request.input,s.request.tool_use_id,a);else if(s.request.subtype==="mcp_message"){let d=s.request,m=this.sdkMcpServers.get(d.server_name)?.transport;if(!m)throw Error(`SDK MCP server not found: ${d.server_name}`);if(zr(d.message))return{mcp_response:await this.handleMcpControlRequest(d.server_name,d,m)};else{if(m.onmessage)m.onmessage(d.message);return{mcp_response:{jsonrpc:"2.0",result:{},id:0}}}}else if(s.request.subtype==="elicitation"){let d=s.request;if(this.onElicitation){let m=await this.onElicitation({serverName:d.mcp_server_name,message:d.message,mode:d.mode,url:d.url,elicitationId:d.elicitation_id,requestedSchema:d.requested_schema,title:d.title,displayName:d.display_name,description:d.description},{signal:a,requestId:s.request_id});if(m===null)return Oe;return m}return{action:"decline"}}else if(s.request.subtype==="request_user_dialog"){if(this.onUserDialog){let d=await this.onUserDialog({dialogKind:s.request.dialog_kind,payload:s.request.payload,toolUseID:s.request.tool_use_id},{signal:a,requestId:s.request_id});if(d===null)return Oe;return d}return e(`[Query] No onUserDialog handler for request_user_dialog (kind=${s.request.dialog_kind}) — staying silent so a capable client (or the worker's park deadline) settles it`),re("tengu_request_user_dialog_response_ignored",{shape:Q("auto_cancel")}),Oe}else if(s.request.subtype==="oauth_token_refresh"){if(!this.getOAuthToken)throw Error("getOAuthToken callback is not provided.");let d,m=await this.getOAuthToken({signal:a,onDecline:(h)=>{if(Gr(h))d=h}})??null;return m===null&&d!==void 0?{accessToken:m,reason:d}:{accessToken:m}}else if(s.request.subtype==="host_auth_token_refresh"){if(!this.getHostAuthToken)throw Error("getHostAuthToken callback is not provided.");let d=await this.getHostAuthToken({signal:a})??null;return typeof d==="string"||d===null?{authToken:d}:d}else if(s.request.subtype==="remote_control_work_secret"){let d=this.workSecretAnswerer;if(!d)throw Error("refreshWorkSecret callback is not provided.");if(!Zr(d.sessionId,s.request.session_id))throw Error("remote_control_work_secret names a session this host did not attach.");return{work_secret:await d.refresh(d.sessionId,{signal:a})||null}}if(s.request.subtype==="ui_copy"&&this.uiHost?.copy){let{subtype:d,...m}=s.request;return this.uiHost.copy(m,{signal:a})}if(s.request.subtype==="ui_prompt_read"&&this.uiHost?.promptRead){let{subtype:d,...m}=s.request;return this.uiHost.promptRead(m,{signal:a})}if(s.request.subtype==="ui_prompt_fill"&&this.uiHost?.promptFill){let{subtype:d,...m}=s.request;return this.uiHost.promptFill(m,{signal:a})}if(s.request.subtype==="ui_prompt_suggest"&&this.uiHost?.promptSuggest){let{subtype:d,...m}=s.request;return this.uiHost.promptSuggest(m,{signal:a})}if(s.request.subtype==="ui_read_selection"&&this.uiHost?.readSelection){let{subtype:d,...m}=s.request;return this.uiHost.readSelection(m,{signal:a})}throw Error("Unsupported control request subtype: "+s.request.subtype)}async*readSdkMessages(){try{for await(let s of this.inputStream)this.transport.markDelivered?.(s),yield s}finally{await this.cleanup()}}async initialize({first:s}={first:!1}){if(!s&&!this.initializeHasBeenWritten)await this.initializeWritten;let a,d;try{if(s&&this.initConfig?.captureSdkMcpManifests===!0&&this.sdkMcpServers.size>0){a=await this.captureSdkMcpServerManifests();for(let S of this.sdkMcpToolsChangedDuringCapture){let b=a!==void 0&&Object.hasOwn(a,S)?a[S]:void 0;if(b?.toolsListResult!==void 0)a[S]={initializeResult:b.initializeResult}}}this.sdkMcpToolsChangedDuringCapture.clear();let y=this.buildInitializeRequest(a);if(this.cleanupPerformed)throw this.cleanupCause??Error("Query closed before initialize was sent");this.writingFirstInitialize=s;try{d=this.request(y)}finally{this.writingFirstInitialize=!1}}finally{if(s)this.markInitializeWritten()}let h=(await d).response;if(this.initConfig?.plugins!==void 0&&this.initConfig.plugins.length>0&&h.plugins_applied!==!0)e(`[Query.initialize] Claude Code reported plugins_applied=${String(h.plugins_applied)} for ${this.initConfig.plugins.length} plugins sent with pluginDelivery 'initialize'; the process is running with the plugins it was launched with.`,{level:"warn"});return h}buildInitializeRequest(s){if(this.hooks&&!this.initHooksPayload){this.initHooksPayload={};for(let[y,S]of Object.entries(this.hooks))if(S.length>0)this.initHooksPayload[y]=S.map((b)=>{let _=[];for(let k of b.hooks){let v=`hook_${this.nextCallbackId++}`;this.hookCallbacks.set(v,k),_.push(v)}return{matcher:b.matcher,hookCallbackIds:_,timeout:b.timeout}})}let a=this.sdkMcpServers.size>0?Array.from(this.sdkMcpServers.keys()):void 0,d=Array.from(this.sdkMcpServers).flatMap(([y,{settings:S}])=>Object.keys(S).length>0?[[y,S]]:[]),m=d.length>0?Object.fromEntries(d):void 0;return{subtype:"initialize",hooks:this.initHooksPayload,sdkMcpServers:a,sdkMcpServerConfigs:m,sdkMcpServerManifests:s,jsonSchema:this.jsonSchema,systemPrompt:typeof this.initConfig?.systemPrompt==="string"?[this.initConfig.systemPrompt]:this.initConfig?.systemPrompt,appendSystemPrompt:this.initConfig?.appendSystemPrompt,planModeInstructions:this.initConfig?.planModeInstructions,systemPromptSnapshot:this.initConfig?.systemPromptSnapshot,appendSubagentSystemPrompt:this.initConfig?.appendSubagentSystemPrompt,toolAliases:this.initConfig?.toolAliases,excludeDynamicSections:this.initConfig?.excludeDynamicSections,agents:this.initConfig?.agents,title:this.initConfig?.title,skills:Array.isArray(this.initConfig?.skills)?this.initConfig.skills:void 0,webSearchIsolationExemptMcpServers:this.initConfig?.webSearchIsolationExemptMcpServers,promptSuggestions:this.initConfig?.promptSuggestions,agentProgressSummaries:this.initConfig?.agentProgressSummaries,forwardSubagentText:this.initConfig?.forwardSubagentText,supportedDialogKinds:this.initConfig?.supportedDialogKinds,perTaskStopAffordance:this.initConfig?.perTaskStopAffordance,rapidFollowupPreempt:this.initConfig?.rapidFollowupPreempt,forwardNestedSubagentToolCalls:this.initConfig?.forwardNestedSubagentToolCalls,workspaceTrust:this.initConfig?.workspaceTrust,plugins:this.initConfig?.plugins}}async captureSdkMcpServerManifests(){let s=performance.now(),a=new Map,d=!1,m=async(C,P)=>{try{if(await this.sdkMcpServers.get(C)?.connection,d)return;let O=await this.handleMcpControlRequest(C,{server_name:C,message:{jsonrpc:"2.0",id:Lt+"initialize",method:"initialize",params:{protocolVersion:Yr,capabilities:Wr,clientInfo:{...qr,version:"0.3.301"}}}},P);if(d)return;if(!("result"in O)){e(`[Query.captureSdkMcpServerManifests] '${C}' answered initialize with an error; leaving it to the CLI: ${t(O)}`,{level:"warn"});return}let I=O.result;P.onmessage?.({jsonrpc:"2.0",method:"notifications/initialized"});let N=I.capabilities,F=typeof N==="object"&&N!==null&&"tools"in N&&N.tools!==void 0&&N.tools!==null,B;if(F){let se=await this.handleMcpControlRequest(C,{server_name:C,message:{jsonrpc:"2.0",id:Lt+"tools-list",method:"tools/list"}},P);if(d)return;if(!("result"in se)){e(`[Query.captureSdkMcpServerManifests] '${C}' answered tools/list with an error; leaving it to the CLI: ${t(se)}`,{level:"warn"});return}if(se.result.nextCursor===void 0)B=se.result}let ve=E(t(B===void 0?{initializeResult:I}:{initializeResult:I,toolsListResult:B}));a.set(C,{transport:P,manifest:ve})}catch(O){if(!d)e(`[Query.captureSdkMcpServerManifests] '${C}': ${O}; the CLI will handshake it over the control channel`,{level:"warn"})}},h=Array.from(this.sdkMcpServers,([C,{transport:P}])=>m(C,P)),y=Promise.all(h).then(()=>"settled"),S=new Promise((C)=>{this.stopSdkMcpManifestCapture=()=>C("closed")}),b=await lt(Promise.race([y,S]),Xr);d=!0,this.stopSdkMcpManifestCapture=void 0;let _=Math.round(performance.now()-s),k={servers:h.length,captured:a.size,elapsed_ms:_};if(b==="closed"){Mt("sdk_mcp_manifest_capture","closed",k);return}if(b===void 0)e(`[Query.captureSdkMcpServerManifests] ${a.size}/${h.length} in-process MCP servers captured within ${Xr} ms; the rest will handshake over the control channel`,{level:"warn"}),Mt("sdk_mcp_manifest_capture","deadline",k);else if(a.size<h.length)Mt("sdk_mcp_manifest_capture","partial",k);else Dn("sdk_mcp_manifest_capture",k);if(a.size===0)return;let v=Object.fromEntries(Array.from(this.sdkMcpServers).flatMap(([C,P])=>{let O=a.get(C);return O!==void 0&&O.transport===P.transport?[[C,O.manifest]]:[]}));if(Object.keys(v).length===0)return;return e(`[Query.captureSdkMcpServerManifests] manifests for [${Object.keys(v).join(", ")}] captured in ${_} ms`),v}async interrupt(s){return W("sdk_interrupt",async()=>{let a=await this.request({subtype:"interrupt",...s?.cancelQueued===!0&&{cancel_queued:!0}}),d=a.response?.still_queued;if(!Array.isArray(d))return;let m=a.response?.cancelled;return{still_queued:d.filter((h)=>typeof h==="string"),...Array.isArray(m)&&{cancelled:m.filter((h)=>typeof h==="string")}}})}async setPermissionMode(s){await this.request({subtype:"set_permission_mode",mode:s})}setUiHost(s){this.uiHost=s}async setMcpPermissionModeOverride(s,a){return(await this.request({subtype:"set_mcp_permission_mode_override",serverName:s,mode:a})).response??{}}async setChromeBrowserHints(s){await this.request({subtype:"set_chrome_browser_hints",...s})}async setPromptSuggestionsPaused(s){await this.request({subtype:"set_prompt_suggestions_paused",paused:s})}awaitControlResponse(s){return this.transport.expectControlResponse?.(s),new Promise((a,d)=>{let m=(y)=>{if(y.subtype==="success"){let{pending_permission_requests:S,pending_user_dialog_requests:b,..._}=y;a(_)}else d(new c(y.error,"awaitControlResponse: CLI error verdict"));if(y.pending_permission_requests||y.pending_user_dialog_requests)e("[Query] Ignoring prompt-redelivery fields on awaitControlResponse response")};if(this.cleanupPerformed){d(Ln());return}let h=this.unmatchedControlResponses.get(s);if(h){this.unmatchedControlResponses.delete(s),m(h);return}this.pendingControlResponses.set(s,{handler:(y)=>{this.pendingControlResponses.delete(s),m(y)},reject:d})})}async setModel(s){await this.request({subtype:"set_model",model:s})}async setMaxThinkingTokens(s,a){await this.request({subtype:"set_max_thinking_tokens",max_thinking_tokens:s,thinking_display:a})}async applyFlagSettings(s){return W("sdk_apply_flag_settings",async()=>{await this.request({subtype:"apply_flag_settings",settings:s})})}async getSettings(){return(await this.request({subtype:"get_settings"})).response}async getHooksListing(){return(await this.request({subtype:"get_hooks_listing"})).response}async getTaskOutput(s){return(await this.request({subtype:"get_task_output",task_id:s})).response}async listPermissionRules(){return(await this.request({subtype:"list_permission_rules"})).response}async updateSettings(s,a){return W("sdk_update_settings",async()=>{await this.request({subtype:"update_settings",source:s,settings:a})})}async rewindFiles(s,a){return W("sdk_rewind_files",async()=>(await this.request({subtype:"rewind_files",user_message_id:s,dry_run:a?.dryRun})).response)}async cancelAsyncMessage(s){return(await this.request({subtype:"cancel_async_message",message_uuid:s})).response.cancelled}async seedReadState(s,a){await this.request({subtype:"seed_read_state",path:s,mtime:a})}async setCwd(s,a){return W("sdk_set_cwd",async()=>(await this.request({subtype:"set_cwd",path:s,...a?.trustAccepted!==void 0&&{trust_accepted:a.trustAccepted},...a?.trustedDirectory!==void 0&&{trusted_directory:a.trustedDirectory}})).response)}async claimSession(s){let a=W("sdk_claim_session",async()=>(await this.request({subtype:"claim_session",...s,include_initialize:s.include_initialize??!0})).response),d=this.initialization;return this.initialization=a.then(async(m)=>{if(m?.initialize===void 0)return d;let h=m.initialize,y=await d.then((_)=>({hooks_applied:_.hooks_applied,plugins_applied:_.plugins_applied}),()=>({hooks_applied:void 0,plugins_applied:void 0})),S=h.hooks_applied??y.hooks_applied,b=h.plugins_applied??y.plugins_applied;return{...h,...S!==void 0&&{hooks_applied:S},...b!==void 0&&{plugins_applied:b}}},()=>d),this.initialization.catch(()=>{}),a}async enableRemoteControl(s,a,d){let m=++this.remoteControlCallGeneration,h=this.workSecretAnswerer,y=d?.reattachSessionId||(d?.workSecret===void 0?void 0:yi(d.workSecret)),S=s&&d?.workSecret!==void 0&&d.refreshWorkSecret&&y!==void 0?{sessionId:y,refresh:d.refreshWorkSecret}:void 0;this.workSecretAnswerer=S;let b;try{b=(await this.request({subtype:"remote_control",enabled:s,...a!==void 0&&{name:a},reattach_session_id:d?.reattachSessionId,keep_session_on_exit:d?.keepSessionOnExit,work_secret:d?.workSecret})).response}catch(_){if(m===this.remoteControlCallGeneration)this.workSecretAnswerer=void 0;throw _}if(s&&m===this.remoteControlCallGeneration){let _=b.bridge_session_id,k=[S,h];this.workSecretAnswerer=typeof _==="string"?k.find((v)=>v!==void 0&&Zr(v.sessionId,_)):void 0}return b}async submitFeedback(s,a){return(await this.request({subtype:"submit_feedback",description:s,surface:a?.surface,draft_id:a?.draft_id,type:a?.type,title:a?.title,area:a?.area,attach_transcript:a?.attach_transcript,save_locally:a?.save_locally})).response}async renameSession(s,a){await this.request({subtype:"rename_session",title:s,source:"host",session_id:a})}async generateSessionTitle(s,a){return W("sdk_session_title_generate",async()=>(await this.request({subtype:"generate_session_title",description:s,persist:a?.persist})).response.title)}async askSideQuestion(s,a){return W("sdk_side_question",async()=>{let m=(await this.request({subtype:"side_question",question:s,...a?.history?.length&&{history:[...a.history]}},a)).response;return m.response===null?null:{response:m.response,synthetic:m.synthetic??!1,...m.refusal_fallback&&{refusalFallback:{originalModel:m.refusal_fallback.original_model,fallbackModel:m.refusal_fallback.fallback_model,content:m.refusal_fallback.content}}}},()=>a?.signal?.aborted?"cancelled":"error")}async launchUltrareview(s,a){return(await this.request({subtype:"ultrareview_launch",args:s,confirm:a?.confirm??!1})).response}async messageRated(s){await this.request({subtype:"message_rated",messageUuid:s.messageUuid,sentiment:s.sentiment,surface:s.surface,cleared:s.cleared??!1})}processPendingPermissionRequests(s){for(let a of s)if(a.request.subtype==="can_use_tool")this.handleControlRequest(a).catch(()=>{})}processPendingUserDialogRequests(s){for(let a of s)if(a.request.subtype==="request_user_dialog")this.handleControlRequest(a).catch(()=>{})}request(s,a){let d=a?.signal;if(d?.aborted)return Promise.reject(L(d.reason??"Control request aborted"));if(this.cleanupPerformed)return Promise.reject(Ln());let m=Math.random().toString(36).substring(2,15);this.transport.expectControlResponse?.(m);let h={request_id:m,type:"control_request",request:s},y=s.subtype==="initialize";return new Promise((S,b)=>{let _,k=!1,v=(I)=>{this.pendingControlResponses.delete(m),_?.(),S(I)},C=(I)=>{this.pendingControlResponses.delete(m),_?.(),b(I)};if(d){let I=()=>{if(C(L(d.reason??"Control request aborted")),!k)return;try{Promise.resolve(this.transport.write(t({type:"control_cancel_request",request_id:m})+`
`)).catch(()=>{})}catch{}};d.addEventListener("abort",I,{once:!0}),_=()=>{d.removeEventListener("abort",I)}}this.pendingControlResponses.set(m,{handler:(I)=>{if(I.subtype==="success")v(I);else C(w(Error(I.error),{telemetryMessage:`Claude Code control request failed (${s.subtype})`,errorClass:"control_request_failed",errorCode:typeof I.error_code==="string"&&hi.test(I.error_code)?I.error_code:void 0}));if(!y&&(I.pending_permission_requests||I.pending_user_dialog_requests))e(`[Query] Ignoring prompt-redelivery fields on non-initialize response (subtype=${s.subtype})`);else{if(I.pending_permission_requests)this.processPendingPermissionRequests(I.pending_permission_requests);if(I.pending_user_dialog_requests)this.processPendingUserDialogRequests(I.pending_user_dialog_requests)}},reject:C});let P=t(h)+`
`,O=()=>{if(d?.aborted)return;return k=!0,this.transport.write(P)};try{(this.initializeHasBeenWritten||this.writingFirstInitialize?Promise.resolve(O()):this.initializeWritten.then(O)).catch(C)}catch(I){C(I)}})}initializationResult(){return this.initialization}writeAfterInitialize(s){if(this.initializeHasBeenWritten)return Promise.resolve(this.transport.write(s));return this.initializeWritten.then(()=>this.transport.write(s))}reinitialize(){return W("sdk_reinitialize",()=>this.initialize({first:!1}))}async supportedCommands(){let{commands:s}=await this.initialization;return this.latestCommands??s}async supportedModels(){return(await this.initialization).models}async supportedAgents(){return(await this.initialization).agents}async reconnectMcpServer(s){await this.request({subtype:"mcp_reconnect",serverName:s})}async toggleMcpServer(s,a){return W("sdk_mcp_toggle_server",async()=>{await this.request({subtype:"mcp_toggle",serverName:s,enabled:a})})}async readMcpResource(s,a){return(await this.request({subtype:"mcp_read_resource",serverName:s,uri:a})).response}async enableChannel(s){return W("sdk_mcp_enable_channel",async()=>{await this.request({subtype:"channel_enable",serverName:s})})}async mcpAuthenticate(s,a){return(await this.request({subtype:"mcp_authenticate",serverName:s,redirectUri:a})).response}async mcpClearAuth(s){return(await this.request({subtype:"mcp_clear_auth",serverName:s})).response}async mcpSubmitOAuthCallbackUrl(s,a){return(await this.request({subtype:"mcp_oauth_callback_url",serverName:s,callbackUrl:a})).response}async claudeAuthenticate(s){return(await this.request({subtype:"claude_authenticate",loginWithClaudeAi:s})).response}async claudeOAuthCallback(s,a){return(await this.request({subtype:"claude_oauth_callback",authorizationCode:s,state:a})).response}async claudeOAuthWaitForCompletion(){return(await this.request({subtype:"claude_oauth_wait_for_completion"})).response}async mcpServerStatus(){return(await this.request({subtype:"mcp_status"})).response.mcpServers}async getContextUsage(s){return(await this.request({subtype:"get_context_usage",...s})).response}async usage_EXPERIMENTAL_MAY_CHANGE_DO_NOT_RELY_ON_THIS_API_YET(s){return(await this.request({subtype:"get_usage",...s?.skipBehaviors&&{skip_behaviors:!0}})).response}async getMemoryDialog(){return(await this.request({subtype:"get_memory_dialog"})).response}async getSkillsDialog(){return(await this.request({subtype:"get_skills_dialog"})).response}async getStatus(){return(await this.request({subtype:"get_status"})).response}async exportConversation(){return(await this.request({subtype:"export_conversation"})).response}async getChromeDialog(){return(await this.request({subtype:"get_chrome_dialog"})).response}async getChromeBrowsers(){return(await this.request({subtype:"get_chrome_browsers"})).response}async selectChromeBrowser(s){return(await this.request({subtype:"select_chrome_browser",device_id:s})).response}async getSandboxDialog(){return(await this.request({subtype:"get_sandbox_dialog"})).response}async readFile(s,a){try{return(await this.request({subtype:"read_file",path:s,max_bytes:a?.maxBytes,encoding:a?.encoding})).response}catch{return null}}async getPlan(){return(await this.request({subtype:"get_plan"})).response}async reloadPlugins(s){return W("sdk_reload_plugins",async()=>(await this.request({subtype:"reload_plugins",...s?.holdOnCacheImpact&&{hold_on_cache_impact:!0},...s?.addPlugins&&s.addPlugins.length>0&&{add_plugins:s.addPlugins}})).response)}async reloadSkills(){return W("sdk_reload_skills",async()=>(await this.request({subtype:"reload_skills"})).response)}async reloadOutputStyles(){return W("sdk_reload_output_styles",async()=>(await this.request({subtype:"reload_output_styles"})).response)}async setMcpServers(s){return W("sdk_mcp_set_servers",async()=>{let a={},d={};for(let[b,_]of Object.entries(s))if(_.type==="sdk"&&"instance"in _)a[b]=_;else d[b]=_;let m=new Set(this.sdkMcpServers.keys()),h=new Set(Object.keys(a));for(let b of m)if(!h.has(b))await this.disconnectSdkMcpServer(b);for(let[b,_]of Object.entries(a)){let k=this.sdkMcpServers.get(b);if(!k){this.connectSdkMcpServer(b,_);continue}let{settings:v,ignored:C}=Dt(_);if(Qr(b,_,C),v.timeout!==k.settings.timeout||v.disableAutoBackground!==k.settings.disableAutoBackground)e(`[Query.setMcpServers] MCP server '${b}' is already registered, so the different timeout or disableAutoBackground passed to setMcpServers is ignored; remove and re-add the server to change it`);if(v.tools!==void 0&&!Qt(v.tools,k.settings.tools))e(v.tools.length===0?`[Query.setMcpServers] MCP server '${b}': per-tool policy cleared`:`[Query.setMcpServers] MCP server '${b}': per-tool policy replaced (${v.tools.length} ${v.tools.length===1?"entry":"entries"})`),k.settings={...k.settings,tools:v.tools}}let y={};for(let b of Object.keys(a))y[b]={type:"sdk",name:b,...this.sdkMcpServers.get(b)?.settings};return(await this.request({subtype:"mcp_set_servers",servers:{...d,...y}})).response})}async accountInfo(){return(await this.initialization).account}async streamInput(s){e("[Query.streamInput] Starting to process input stream");try{if(!this.initializeHasBeenWritten)await this.initializeWritten;let a=0;for await(let d of s){if(a++,e(`[Query.streamInput] Processing message ${a}: ${d.type}`),this.abortController?.signal.aborted)break;this.runEnded=!1,this.resultReceived=!1,this.clearRunEndCeiling(),await Promise.resolve(this.transport.write(t(this.verbatimPrompts?{...d,client_composed:!0}:d)+`
`))}if(e(`[Query.streamInput] Finished processing ${a} messages from input stream`),a>0&&this.hasBidirectionalNeeds())e("[Query.streamInput] Has bidirectional needs, waiting for the run to end"),await this.waitForRunEnd();e("[Query] Calling transport.endInput() to close stdin to CLI process"),this.transport.endInput()}catch(a){if(!(a instanceof pe))throw a}}endRun(){if(this.runEnded)return;if(this.runEnded=!0,this.clearRunEndCeiling(),this.runEndedResolve?.(),this.isSingleUserTurn)e("[Query.readMessages] Run ended for single-turn query, closing stdin"),this.transport.endInput()}armRunEndCeiling(){if(this.clearRunEndCeiling(),this.runEnded||this.cleanupPerformed||this.runEndCeilingMs<=0)return;this.runEndCeilingTimer=setTimeout(()=>{e(`[Query.readMessages] No 'idle' ${this.runEndCeilingMs}ms after the last result, ending the run`),this.endRun()},Math.min(this.runEndCeilingMs,Qe)),this.runEndCeilingTimer.unref?.()}clearRunEndCeiling(){clearTimeout(this.runEndCeilingTimer),this.runEndCeilingTimer=void 0}waitForRunEnd(){if(this.runEnded)return e("[Query.waitForRunEnd] Run already ended, returning immediately"),Promise.resolve();return new Promise((s)=>{let a=this.abortController?.signal;if(this.cleanupPerformed||a?.aborted){s();return}let d=()=>s();a?.addEventListener("abort",d,{once:!0}),this.addCleanupCallback(()=>{a?.removeEventListener("abort",d),s()}),this.runEndedResolve=()=>{a?.removeEventListener("abort",d),s()}})}handleHookCallbacks(s,a,d,m){let h=this.hookCallbacks.get(s);if(!h)throw Error(`No hook callback found for ID: ${s}`);return h(a,d,{signal:m})}connectSdkMcpServer(s,a){let d=new Nn((S)=>this.sendMcpServerMessageToCli(s,S)),m=a.instance.connect(d).catch((S)=>{if(this.sdkMcpServers.get(s)?.transport===d)this.sdkMcpServers.delete(s);e(`[Query.connectSdkMcpServer] Failed to connect MCP server '${s}': ${S}`,{level:"error"})}),{settings:h,ignored:y}=Dt(a);Qr(s,a,y),this.sdkMcpServers.set(s,{transport:d,settings:h,connection:m})}async disconnectSdkMcpServer(s){let a=this.sdkMcpServers.get(s);if(a){let d=`${s}:${Lt}`;for(let[m,h]of this.pendingMcpResponses)if(m.startsWith(d))this.pendingMcpResponses.delete(m),h.reject(Error("MCP server was removed during the manifest capture"));if(await a.transport.close(),this.sdkMcpServers.get(s)===a)this.sdkMcpServers.delete(s)}}sendMcpServerMessageToCli(s,a){if("id"in a&&a.id!==null&&a.id!==void 0){let m=`${s}:${a.id}`,h=this.pendingMcpResponses.get(m);if(h){h.resolve(a),this.pendingMcpResponses.delete(m);return}if(typeof a.id==="string"&&a.id.startsWith(Lt)){e(`[Query.sendMcpServerMessageToCli] Dropping late manifest-capture reply from '${s}' (${a.id})`);return}}let d={type:"control_request",request_id:be(),request:{subtype:"mcp_message",server_name:s,message:a}};if(!this.initializeHasBeenWritten&&Jr(a))this.sdkMcpToolsChangedDuringCapture.add(s);this.writeAfterInitialize(t(d)+`
`).catch((m)=>{e(`[Query.sendMcpServerMessageToCli] Transport write failed: ${m}`,{level:"error"})})}handleMcpControlRequest(s,a,d){let m="id"in a.message?a.message.id:null,h=`${s}:${m}`;return new Promise((y,S)=>{let b=()=>{this.pendingMcpResponses.delete(h)},_=(v)=>{b(),y(v)},k=(v)=>{b(),S(v)};if(this.pendingMcpResponses.set(h,{resolve:_,reject:k}),d.onmessage)d.onmessage(a.message);else{b(),S(Error("No message handler registered"));return}})}}function Ln(){return Error("Query closed before response received")}var hi=/^[a-z][a-z0-9_]{0,63}$/;function Zr(s,a){if(s===a)return!0;let d=s.slice(s.lastIndexOf("_")+1),m=a.slice(a.lastIndexOf("_")+1);return d.length>=4&&d===m}function yi(s){try{let a=E(Buffer.from(s,"base64url").toString("utf8"));if(typeof a!=="object"||a===null||!("session_ingress_token"in a)||typeof a.session_ingress_token!=="string")return;let d=a.session_ingress_token,h=(d.startsWith("sk-ant-si-")?d.slice(10):d).split(".");if(h.length!==3||!h[1])return;let y=E(Buffer.from(h[1],"base64url").toString("utf8"));return typeof y==="object"&&y!==null&&"session_id"in y&&typeof y.session_id==="string"&&y.session_id?y.session_id:void 0}catch{return}}var jn=500,Fn=1048576;var Si=[200,800];class Kn{send;pending=[];pendingEntries=0;pendingBytes=0;flushPromise=null;sendTimeoutMs;onError;maxPendingEntries;maxPendingBytes;backoffMs;constructor(s,a){this.send=s;let{sendTimeoutMs:d=60000,onError:m,maxPendingEntries:h=jn,maxPendingBytes:y=Fn,backoffMs:S=Si}=a??{};this.sendTimeoutMs=d,this.onError=m,this.maxPendingEntries=h,this.maxPendingBytes=y,this.backoffMs=S}enqueue(s,a){let d=t(a).length;if(this.pending.push({filePath:s,entries:a,bytes:d}),this.pendingEntries+=a.length,this.pendingBytes+=d,this.pendingEntries>this.maxPendingEntries||this.pendingBytes>this.maxPendingBytes)this.flushPromise=this.drain(),this.flushPromise.catch(()=>{})}async flush(){let s=this.drain();if(this.flushPromise=s,await s,this.flushPromise===s)this.flushPromise=null}async drain(){let s=this.flushPromise,a=this.pending.splice(0);if(this.pendingEntries=0,this.pendingBytes=0,s)await s;if(a.length===0)return;await this.doFlush(a)}async doFlush(s){let a=new Map;for(let d of s){let m=a.get(d.filePath);if(m)m.push(...d.entries);else a.set(d.filePath,d.entries.slice())}for(let[d,m]of a)await this.sendWithRetry(d,m)}async sendWithRetry(s,a){let d=this.backoffMs.length+1,m=`SessionStore.append() timed out after ${this.sendTimeoutMs}ms for ${s}`,h,y=1;for(;y<=d;y++)try{await D(this.send(s,a),this.sendTimeoutMs,m),h=void 0;break}catch(S){if(h=L(S),h.message===m)break;let b=this.backoffMs[y-1];if(b===void 0)break;await M(b)}if(h){e(`[TranscriptMirrorBatcher] flush failed for ${s} after ${y} attempt(s): ${h}`,{level:"error"});try{this.onError?.(s,h)}catch(S){e(`[TranscriptMirrorBatcher] onError callback threw: ${S}`,{level:"error"})}}}}var es=typeof globalThis==="object"?globalThis:global;var ce="1.9.0";var ts=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function bi(s){var a=new Set([s]),d=new Set,m=s.match(ts);if(!m)return function(){return!1};var h={major:+m[1],minor:+m[2],patch:+m[3],prerelease:m[4]};if(h.prerelease!=null)return function(_){return _===s};function y(b){return d.add(b),!1}function S(b){return a.add(b),!0}return function(_){if(a.has(_))return!0;if(d.has(_))return!1;var k=_.match(ts);if(!k)return y(_);var v={major:+k[1],minor:+k[2],patch:+k[3],prerelease:k[4]};if(v.prerelease!=null)return y(_);if(h.major!==v.major)return y(_);if(h.major===0){if(h.minor===v.minor&&h.patch<=v.patch)return S(_);return y(_)}if(h.minor<=v.minor)return S(_);return y(_)}}var ns=bi(ce);var _i=ce.split(".")[0],ot=Symbol.for("opentelemetry.js.api."+_i),it=es;function De(s,a,d,m){var h;if(m===void 0)m=!1;var y=it[ot]=(h=it[ot])!==null&&h!==void 0?h:{version:ce};if(!m&&y[s]){var S=Error("@opentelemetry/api: Attempted duplicate registration of API: "+s);return d.error(S.stack||S.message),!1}if(y.version!==ce){var S=Error("@opentelemetry/api: Registration of version v"+y.version+" for "+s+" does not match previously registered API v"+ce);return d.error(S.stack||S.message),!1}return y[s]=a,d.debug("@opentelemetry/api: Registered a global for "+s+" v"+ce+"."),!0}function le(s){var a,d,m=(a=it[ot])===null||a===void 0?void 0:a.version;if(!m||!ns(m))return;return(d=it[ot])===null||d===void 0?void 0:d[s]}function Le(s,a){a.debug("@opentelemetry/api: Unregistering a global for "+s+" v"+ce+".");var d=it[ot];if(d)delete d[s]}var wi=function(s,a){var d=typeof Symbol==="function"&&s[Symbol.iterator];if(!d)return s;var m=d.call(s),h,y=[],S;try{while((a===void 0||a-- >0)&&!(h=m.next()).done)y.push(h.value)}catch(b){S={error:b}}finally{try{if(h&&!h.done&&(d=m.return))d.call(m)}finally{if(S)throw S.error}}return y},Ei=function(s,a,d){if(d||arguments.length===2){for(var m=0,h=a.length,y;m<h;m++)if(y||!(m in a)){if(!y)y=Array.prototype.slice.call(a,0,m);y[m]=a[m]}}return s.concat(y||Array.prototype.slice.call(a))},rs=function(){function s(a){this._namespace=a.namespace||"DiagComponentLogger"}return s.prototype.debug=function(){var a=[];for(var d=0;d<arguments.length;d++)a[d]=arguments[d];return at("debug",this._namespace,a)},s.prototype.error=function(){var a=[];for(var d=0;d<arguments.length;d++)a[d]=arguments[d];return at("error",this._namespace,a)},s.prototype.info=function(){var a=[];for(var d=0;d<arguments.length;d++)a[d]=arguments[d];return at("info",this._namespace,a)},s.prototype.warn=function(){var a=[];for(var d=0;d<arguments.length;d++)a[d]=arguments[d];return at("warn",this._namespace,a)},s.prototype.verbose=function(){var a=[];for(var d=0;d<arguments.length;d++)a[d]=arguments[d];return at("verbose",this._namespace,a)},s}();function at(s,a,d){var m=le("diag");if(!m)return;return d.unshift(a),m[s].apply(m,Ei([],wi(d),!1))}var J;(function(s){s[s.NONE=0]="NONE",s[s.ERROR=30]="ERROR",s[s.WARN=50]="WARN",s[s.INFO=60]="INFO",s[s.DEBUG=70]="DEBUG",s[s.VERBOSE=80]="VERBOSE",s[s.ALL=9999]="ALL"})(J||(J={}));function ss(s,a){if(s<J.NONE)s=J.NONE;else if(s>J.ALL)s=J.ALL;a=a||{};function d(m,h){var y=a[m];if(typeof y==="function"&&s>=h)return y.bind(a);return function(){}}return{error:d("error",J.ERROR),warn:d("warn",J.WARN),info:d("info",J.INFO),debug:d("debug",J.DEBUG),verbose:d("verbose",J.VERBOSE)}}var ki=function(s,a){var d=typeof Symbol==="function"&&s[Symbol.iterator];if(!d)return s;var m=d.call(s),h,y=[],S;try{while((a===void 0||a-- >0)&&!(h=m.next()).done)y.push(h.value)}catch(b){S={error:b}}finally{try{if(h&&!h.done&&(d=m.return))d.call(m)}finally{if(S)throw S.error}}return y},vi=function(s,a,d){if(d||arguments.length===2){for(var m=0,h=a.length,y;m<h;m++)if(y||!(m in a)){if(!y)y=Array.prototype.slice.call(a,0,m);y[m]=a[m]}}return s.concat(y||Array.prototype.slice.call(a))},Ci="diag",he=function(){function s(){function a(h){return function(){var y=[];for(var S=0;S<arguments.length;S++)y[S]=arguments[S];var b=le("diag");if(!b)return;return b[h].apply(b,vi([],ki(y),!1))}}var d=this,m=function(h,y){var S,b,_;if(y===void 0)y={logLevel:J.INFO};if(h===d){var k=Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return d.error((S=k.stack)!==null&&S!==void 0?S:k.message),!1}if(typeof y==="number")y={logLevel:y};var v=le("diag"),C=ss((b=y.logLevel)!==null&&b!==void 0?b:J.INFO,h);if(v&&!y.suppressOverrideMessage){var P=(_=Error().stack)!==null&&_!==void 0?_:"<failed to generate stacktrace>";v.warn("Current logger will be overwritten from "+P),C.warn("Current logger will overwrite one already registered from "+P)}return De("diag",C,d,!0)};d.setLogger=m,d.disable=function(){Le(Ci,d)},d.createComponentLogger=function(h){return new rs(h)},d.verbose=a("verbose"),d.debug=a("debug"),d.info=a("info"),d.warn=a("warn"),d.error=a("error")}return s.instance=function(){if(!this._instance)this._instance=new s;return this._instance},s}();var Ri=function(s,a){var d=typeof Symbol==="function"&&s[Symbol.iterator];if(!d)return s;var m=d.call(s),h,y=[],S;try{while((a===void 0||a-- >0)&&!(h=m.next()).done)y.push(h.value)}catch(b){S={error:b}}finally{try{if(h&&!h.done&&(d=m.return))d.call(m)}finally{if(S)throw S.error}}return y},Pi=function(s){var a=typeof Symbol==="function"&&Symbol.iterator,d=a&&s[a],m=0;if(d)return d.call(s);if(s&&typeof s.length==="number")return{next:function(){if(s&&m>=s.length)s=void 0;return{value:s&&s[m++],done:!s}}};throw TypeError(a?"Object is not iterable.":"Symbol.iterator is not defined.")},os=function(){function s(a){this._entries=a?new Map(a):new Map}return s.prototype.getEntry=function(a){var d=this._entries.get(a);if(!d)return;return Object.assign({},d)},s.prototype.getAllEntries=function(){return Array.from(this._entries.entries()).map(function(a){var d=Ri(a,2),m=d[0],h=d[1];return[m,h]})},s.prototype.setEntry=function(a,d){var m=new s(this._entries);return m._entries.set(a,d),m},s.prototype.removeEntry=function(a){var d=new s(this._entries);return d._entries.delete(a),d},s.prototype.removeEntries=function(){var a,d,m=[];for(var h=0;h<arguments.length;h++)m[h]=arguments[h];var y=new s(this._entries);try{for(var S=Pi(m),b=S.next();!b.done;b=S.next()){var _=b.value;y._entries.delete(_)}}catch(k){a={error:k}}finally{try{if(b&&!b.done&&(d=S.return))d.call(S)}finally{if(a)throw a.error}}return y},s.prototype.clear=function(){return new s},s}();var Fu=he.instance();function is(s){if(s===void 0)s={};return new os(new Map(Object.entries(s)))}function as(s){return Symbol.for(s)}var Ai=function(){function s(a){var d=this;d._currentContext=a?new Map(a):new Map,d.getValue=function(m){return d._currentContext.get(m)},d.setValue=function(m,h){var y=new s(d._currentContext);return y._currentContext.set(m,h),y},d.deleteValue=function(m){var h=new s(d._currentContext);return h._currentContext.delete(m),h}}return s}(),cs=new Ai;var ls={get:function(s,a){if(s==null)return;return s[a]},keys:function(s){if(s==null)return[];return Object.keys(s)}},us={set:function(s,a,d){if(s==null)return;s[a]=d}};var Ti=function(s,a){var d=typeof Symbol==="function"&&s[Symbol.iterator];if(!d)return s;var m=d.call(s),h,y=[],S;try{while((a===void 0||a-- >0)&&!(h=m.next()).done)y.push(h.value)}catch(b){S={error:b}}finally{try{if(h&&!h.done&&(d=m.return))d.call(m)}finally{if(S)throw S.error}}return y},Ii=function(s,a,d){if(d||arguments.length===2){for(var m=0,h=a.length,y;m<h;m++)if(y||!(m in a)){if(!y)y=Array.prototype.slice.call(a,0,m);y[m]=a[m]}}return s.concat(y||Array.prototype.slice.call(a))},ds=function(){function s(){}return s.prototype.active=function(){return cs},s.prototype.with=function(a,d,m){var h=[];for(var y=3;y<arguments.length;y++)h[y-3]=arguments[y];return d.call.apply(d,Ii([m],Ti(h),!1))},s.prototype.bind=function(a,d){return d},s.prototype.enable=function(){return this},s.prototype.disable=function(){return this},s}();var xi=function(s,a){var d=typeof Symbol==="function"&&s[Symbol.iterator];if(!d)return s;var m=d.call(s),h,y=[],S;try{while((a===void 0||a-- >0)&&!(h=m.next()).done)y.push(h.value)}catch(b){S={error:b}}finally{try{if(h&&!h.done&&(d=m.return))d.call(m)}finally{if(S)throw S.error}}return y},Oi=function(s,a,d){if(d||arguments.length===2){for(var m=0,h=a.length,y;m<h;m++)if(y||!(m in a)){if(!y)y=Array.prototype.slice.call(a,0,m);y[m]=a[m]}}return s.concat(y||Array.prototype.slice.call(a))},$n="context",Mi=new ds,Ft=function(){function s(){}return s.getInstance=function(){if(!this._instance)this._instance=new s;return this._instance},s.prototype.setGlobalContextManager=function(a){return De($n,a,he.instance())},s.prototype.active=function(){return this._getContextManager().active()},s.prototype.with=function(a,d,m){var h,y=[];for(var S=3;S<arguments.length;S++)y[S-3]=arguments[S];return(h=this._getContextManager()).with.apply(h,Oi([a,d,m],xi(y),!1))},s.prototype.bind=function(a,d){return this._getContextManager().bind(a,d)},s.prototype._getContextManager=function(){return le($n)||Mi},s.prototype.disable=function(){this._getContextManager().disable(),Le($n,he.instance())},s}();var Bn=Ft.getInstance();var ps=function(){function s(){}return s.prototype.inject=function(a,d){},s.prototype.extract=function(a,d){return a},s.prototype.fields=function(){return[]},s}();var Un=as("OpenTelemetry Baggage Key");function Hn(s){return s.getValue(Un)||void 0}function fs(){return Hn(Ft.getInstance().active())}function ms(s,a){return s.setValue(Un,a)}function gs(s){return s.deleteValue(Un)}var Gn="propagation",Di=new ps,hs=function(){function s(){this.createBaggage=is,this.getBaggage=Hn,this.getActiveBaggage=fs,this.setBaggage=ms,this.deleteBaggage=gs}return s.getInstance=function(){if(!this._instance)this._instance=new s;return this._instance},s.prototype.setGlobalPropagator=function(a){return De(Gn,a,he.instance())},s.prototype.inject=function(a,d,m){if(m===void 0)m=us;return this._getGlobalPropagator().inject(a,d,m)},s.prototype.extract=function(a,d,m){if(m===void 0)m=ls;return this._getGlobalPropagator().extract(a,d,m)},s.prototype.fields=function(){return this._getGlobalPropagator().fields()},s.prototype.disable=function(){Le(Gn,he.instance())},s.prototype._getGlobalPropagator=function(){return le(Gn)||Di},s}();var zn=hs.getInstance();import{copyFile as Ni,readFile as Li,rm as Ss,writeFile as bs}from"fs/promises";import{homedir as ys}from"os";import{join as Wn}from"path";function _s(s){return{globalConfig:Wn(s||ys(),".claude.json"),userSettings:Wn(s||Wn(ys(),".claude"),"settings.json")}}function qn(s,a,d,m){return s!==void 0&&a===d?{backend:s,key:m}:void 0}async function je(s,a,d,m){if(m)return ji(m,s,a,d);try{if(d)await bs(a,d(await Li(s)),{mode:384});else await Ni(s,a)}catch(h){if(r(h)===void 0)throw h;if(!g(h))await Ss(a,{force:!0}).catch(()=>{}),e(`sessionStore resume: skipping ${s} (${r(h)})`)}}async function ji({backend:s,key:a},d,m,h){let y=await s.read([a]);if(!y.ok){if(y.error.code==="InvalidArgument")throw new c(`sessionStore resume: invalid v5 key for ${d}: ${y.error.argument}${y.error.reason?` (${y.error.reason})`:""}`,"sessionStore resume: invalid v5 key (InvalidArgument from backend read)");e(`sessionStore resume: skipping ${d} (${y.error.code})`);return}let S=y.value.items[0];if(!S?.found)return;let b=Buffer.from(S.value);try{await bs(m,h?h(b):b,{mode:384})}catch(_){if(r(_)===void 0)throw _;if(!g(_))await Ss(m,{force:!0}).catch(()=>{}),e(`sessionStore resume: skipping ${d} (${r(_)})`)}}import{createHash as Fi}from"crypto";import{homedir as _d,userInfo as Ki}from"os";var ws="-credentials";function Es(s=""){let a=process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR,d=a!==void 0?!a:!process.env.CLAUDE_CONFIG_DIR,m=a!==void 0?a.normalize("NFC"):A(),h=d?"":`-${Fi("sha256").update(m).digest("hex").substring(0,8)}`;return`Claude Code${rn().OAUTH_FILE_SUFFIX}${s}${h}`}var $i=/^[a-zA-Z0-9._-]+$/;function ks(){if(process.platform==="win32")return"claude-code-user";let s;try{s=process.env.USER||Ki().username}catch{s="claude-code-user"}if(!$i.test(s))return"claude-code-user";return s}class vs{cache={data:null,cachedAt:0};generation=0;readInFlight=null;lastReadFailure=null;keychainHoldsItem=!1;lastKnown=null;legacyApiKeyPrefetch=null}var Cd=new i(()=>new vs);import{once as As}from"events";import{constants as ct,createWriteStream as ea}from"fs";import{lstat as ta,open as na,lstat as qd,readdir as Bt,realpath as ra,rename as Vd,stat as Yd}from"fs/promises";import{basename as sa,dirname as oa,isAbsolute as Xd,join as ye}from"path";async function Vn(s,a,d){let m=Math.max(1,Math.floor(d?.maxPages??1e4)),h;for(let y=0;y<m;y++){if(d?.budget!==void 0){if(d.budget.pagesLeft<1)return{status:"capped"};d.budget.pagesLeft--}let S=await s(h);if(!S.ok)return{status:"error",error:S.error};if(await a(S.value.items),d?.until?.())return{status:"done"};if(h=S.value.cursor,!h)return{status:"done"}}return{status:"capped"}}import{execFile as Xi}from"child_process";import{promisify as Qi}from"util";import{execFileSync as Bi}from"child_process";import{lstatSync as Ui}from"fs";import{join as Hi}from"path";function Gi(){return process.platform==="win32"}class Rs{resolved=new Map;lookup(s){return this.resolved.get(s)}remember(s,a){this.resolved.set(s,a)}forget(s){this.resolved.delete(s)}}var zi=new i(()=>new Rs),Wi=5000;function Cs(s){try{return Ui(s,{throwIfNoEntry:!1})===void 0}catch{return!1}}var qi=new Set([".com",".exe",".bat",".cmd"]);function Vi(s){let a=s.toLowerCase().replace(/.*[\\/]/,"").replace(/[. ]+$/,""),d=a.lastIndexOf(".");return d>0&&qi.has(a.slice(d))}function Yi(s,a=!1){let d=zi.of(T().host),m=d.lookup(s);if(m!==void 0)if(m!==null){if(!Cs(m))return m;d.forget(s)}else{if(!a)return m;d.forget(s)}let h=dt("SYSTEMROOT")||"C:\\Windows",y=Hi(h,"System32","where.exe");try{let b=Bi(y,[s],{stdio:"pipe",encoding:"utf8",timeout:Wi,windowsHide:!0,env:process.env}).trim().split(/\r?\n/).filter(Boolean),_=process.cwd(),k=!1;for(let v of b){if(Cs(v))continue;if($e(v,_)){k=!0;continue}if(!Vi(v))continue;return d.remember(s,v),v}if(b.length>0&&!k)d.remember(s,null);return null}catch(S){if(Ji(S))d.remember(s,null);return null}}function Ji(s){if(s===null||typeof s!=="object")return!1;let a="status"in s?s.status:void 0,d="signal"in s?s.signal:void 0,m="code"in s?s.code:void 0;return a===1&&!d&&!m}function Ps(s,a=!1){if(!Gi())return s;if(s.includes("/")||s.includes("\\"))return s;return Yi(s,a)}var Zi=Qi(Xi);async function Kt(s){let a=Ps("git");if(a===null)return[];try{let{stdout:d}=await Zi(a,["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=","worktree","list","--porcelain"],{cwd:s,timeout:5000,windowsHide:!0});if(!d)return[];return d.split(`
`).filter((m)=>m.startsWith("worktree ")).map((m)=>u(m.slice(9)))}catch{return[]}}var Fe=65536;var ia=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function ie(s){if(typeof s!=="string")return null;return ia.test(s)?s:null}function aa(s,a,d){return ca(s,d,a)}function ca(s,a,d){let m=d===void 0?void 0:`"type":"${d}"`,h=`"${a}":`,y=s.length;while(y>0){let S=s.lastIndexOf(`
`,y-1),b=s.slice(S+1,y);if(y=S,b.includes(h)&&(m===void 0||b.includes(m)))try{let _=JSON.parse(b);if(typeof _==="object"&&_!==null&&(d===void 0||_.type===d)){let k=_[a];if(typeof k==="string")return k}}catch{}if(S<0)break}return}function la(s,a){let d=`"${a}":`,m=0;while(m<s.length){let h=s.indexOf(`
`,m),y=h<0?s.slice(m):s.slice(m,h);if(m=h<0?s.length:h+1,y.includes(d))try{let S=JSON.parse(y);if(typeof S==="object"&&S!==null){let b=S[a];if(typeof b==="string")return b}}catch{}}return}function Yn(s,a){return s?.realWorkspacePath===void 0?void 0:{hoverRestOn:a,realPath:s.realWorkspacePath}}async function Jn(s,a,d){return ua(s,a,"w",d)}async function ua(s,a,d,m){if(m!==void 0&&m.hoverRestOn&&(d==="w"||a.length>0))return da(m.source,a,d);let h=ea(s,{mode:384,flags:d});try{for(let y of a)if(!h.write(JSON.stringify(y)+`
`))await As(h,"drain");h.end(),await As(h,"finish")}catch(y){throw h.destroy(),y}}async function da(s,a,d){let{backend:m,key:h}=s,y=a.map((b)=>({data:JSON.stringify(b)+`
`}));if(d==="w"){let b=await m.replaceRecords(h,y,{publishDiscipline:"inPlace",mode:384});if(!b.ok)throw Error("transcript stream replace failed",{cause:b.error});return}let S=await m.append(h,y);if(!S.ok)throw Error("transcript stream append failed",{cause:S.error})}var Ts=process.platform==="win32"?ct.O_RDONLY:ct.O_RDONLY|ct.O_NOFOLLOW|ct.O_NONBLOCK;async function pa(s){let{backend:a,key:d}=s;try{let m=await a.read([{key:d,offset:0,length:Fe},{key:d,tail:Fe}]);if(!m.ok)return null;let[h,y]=m.value.items;if(!h.found||h.value.length===0)return null;let S=Is(h.value),b=y.found&&y.value.length>0?Is(y.value):S;return{head:S,tail:b,mtimeMs:h.mtimeMs,totalBytes:h.totalBytes}}catch{return null}}function Is(s){return Buffer.from(s.buffer,s.byteOffset,s.byteLength).toString("utf8")}var ip=Buffer.from('"type":"user"'),ap=Buffer.from('"type":"assistant"');function Xn(s,a){if(s.kind!=="scope"||s.scope.namespace!=="transcript"||s.scope.projectKey===void 0||s.scope.sessionId!==void 0||!a(s.scope.projectKey))return;return s.scope.projectKey}function xs(s){return{skipScopeStats:!0,skipKeyStats:!0,...s!==void 0&&{cursor:s}}}async function fa(s,a){if(a!==void 0&&a.hoverRestOn)return Os(a.source);try{if(Ts===ct.O_RDONLY){if(!(await ta(s)).isFile())return null}let d=await na(s,Ts);try{let m=await d.stat();if(!m.isFile())return null;let h=Buffer.allocUnsafe(Fe),y=await d.read(h,0,Fe,0);if(y.bytesRead===0)return null;let S=h.toString("utf8",0,y.bytesRead),b=Math.max(0,m.size-Fe),_=S;if(b>0){let k=await d.read(h,0,Fe,b);_=h.toString("utf8",0,k.bytesRead)}return{mtime:m.mtime.getTime(),size:m.size,head:S,tail:_}}finally{await d.close()}}catch{return null}}async function Os(s){let a=await pa(s);if(a===null)return null;return{mtime:Math.trunc(a.mtimeMs),size:a.totalBytes,head:a.head,tail:a.tail}}var Ke=200;function ma(s){return Math.abs(vt(s)).toString(36)}function Ht(s){return s.replace(/[^a-zA-Z0-9]/g,"-")}function ut(s){let a=Ht(s);if(a.length<=Ke)return a;return`${a.slice(0,Ke)}-${ma(s)}`}function ue(){return ye(A(),"projects")}function ft(s){return qt()??ut(s)}function Qn(s){let a=ut(s);return a===ft(s)?void 0:a}function mt(s,a=ue()){return ye(a,ft(s))}function Yt(s,a){let d=sa(s);return oa(s)===ue()&&a(d)?d:void 0}async function Zn(s,a){try{if(a!==void 0&&a.hoverRestOn){let d=await a.realPath(s);return u(d.ok&&d.value.found?d.value.path:s)}return u(await ra(s))}catch{return u(s)}}async function Jt(s,a,d,m){let h=m!==void 0&&m.hoverRestOn?m.source:void 0,y=h===void 0?void 0:Yt(s,h.isKeySegment);if(h!==void 0&&y!==void 0){let _=await ga(y,a,d,h);if(_!==void 0)return _}if(f())return!1;let S=Ht(a),b;try{b=await Bt(s,{withFileTypes:!0})}catch{return!1}for(let _ of b){if(!_.isFile()||!_.name.endsWith(".jsonl"))continue;let k=await fa(ye(s,_.name));if(k===null)continue;if(Ms(k,S,d))return!0}return!1}function Ms(s,a,d){let m=aa(s.tail,"relocated","relocatedCwd")??la(s.head,"cwd");if(m===void 0)return!1;let h=Ht(u(m));return d?h.toLowerCase()===a.toLowerCase():h===a}async function ga(s,a,d,m){let{backend:h,transcriptKey:y,isKeySegment:S}=m,b=Ht(a),_=!1,k=new Set;try{let v=await Vn((C)=>h.listEntries({namespace:"transcript",projectKey:s},xs(C)),async(C)=>{for(let P of C){if(P.kind!=="key"||P.key.namespace!=="transcript"||P.key.projectKey!==s||P.key.agentId!==void 0||!S(P.key.sessionId)||k.has(P.key.sessionId))continue;let O=P.key.sessionId,I=await Os({backend:h,key:y(s,O)});if(I===null)continue;if(k.add(O),Ms(I,b,d)){_=!0;return}}},{until:()=>_});if(_)return!0;if(v.status!=="done")return}catch{return}return!1}async function gt(s,a,d=ue()){if(a!==void 0&&a.hoverRestOn)return ha(s,a);if(f())return[];let m=mt(s,d),h=[];try{await Bt(m),h.push(m)}catch{}let y=Qn(s);if(y!==void 0){let C=ye(d,y);try{await Bt(C),h.push(C)}catch{}return h}let S=ut(s);if(S.length<=Ke)return h;let b=process.platform==="win32",_=(C)=>b?C.toLowerCase():C,k=_(S.slice(0,Ke)+"-"),v=_(m);try{for(let C of await Bt(d,{withFileTypes:!0})){if(!C.isDirectory()||!_(C.name).startsWith(k))continue;let P=ye(d,C.name);if(_(P)!==v&&await Jt(P,s,b))h.push(P)}}catch{}return h}async function ha(s,a){let d=await ya(a.source);if(d===null){let m=Qn(s);return[mt(s),...m!==void 0?[ye(ue(),m)]:[]]}return Sa(s,d,process.platform==="win32",a)}async function ya(s){let{backend:a,isKeySegment:d}=s,m=[],h=new Set,y=0;try{if((await Vn((b)=>a.listEntries({namespace:"transcript"},xs(b)),(b)=>{for(let _ of b){let k=Xn(_,d);if(k!==void 0&&!h.has(k))h.add(k),m.push(k)}y++})).status==="error")return y===0?null:m}catch{return y===0?null:m}return m}async function Sa(s,a,d,m){let h=ft(s),y=mt(s),S=Qn(s),b=S===void 0&&h.length>Ke?h.slice(0,Ke)+"-":void 0,_=ue(),k=(B)=>d?B.toLowerCase():B,v=b!==void 0?k(b):void 0,C=k(h),P=!1,O,I=[],N=new Set;for(let B of a)if(B===h)P=!0;else if(S!==void 0){if(O===void 0&&k(B)===k(S))O=ye(_,B)}else if(v!==void 0&&k(B).startsWith(v)&&k(B)!==C&&!N.has(k(B)))N.add(k(B)),I.push(B);let F=[];for(let B of I){let X=ye(_,B);if(await Jt(X,s,d,m))F.push(X)}return[...P?[y]:[],...O!==void 0?[O]:[],...F]}var cp=Buffer.from('"compact_boundary"');var lp=Buffer.from('{"type":"attribution-snapshot"'),up=Buffer.from('{"type":"system"'),ba=10,dp=Buffer.from([ba]);function _a(s,a){if(s==="bypassPermissions")return"canUseTool will not be invoked: permissionMode 'bypassPermissions' auto-approves every tool call (except explicit deny rules) before the callback is consulted. To gate every tool call, use a PreToolUse hook instead.";let d=a.filter((m)=>m.length>0&&!m.includes("("));if(d.length===0)return;return`canUseTool will not be invoked for: ${d.join(", ")}. Bare allowedTools entries auto-approve the whole tool before the callback is consulted. To gate every tool call, use a PreToolUse hook; or remove the bare names from allowedTools so they fall through to canUseTool. Allow rules from settings files can also shadow the callback but are not visible here.`}function Ds(s,a,d){if(!s)return;let m=_a(a,d);if(m===void 0)return;process.emitWarning(m,{code:"CLAUDE_SDK_CAN_USE_TOOL_SHADOWED"})}import{realpathSync as wa}from"fs";import{isAbsolute as Ea,relative as ka,resolve as va,sep as Ca}from"path";function Ra(s){let a=va(s??"."),d;try{d=wa(a)}catch{d=a}return u(d)}function we(s,a){let d=Ra(s);if(a===void 0)return ft(d);return(a.CLAUDE_CONFIG_DIR?Ot(a.CLAUDE_CODE_PROJECT_DIR_NAME):void 0)??ut(d)}function Ns(s){return typeof s==="object"&&s!==null&&"type"in s&&s.type==="agent_metadata"}function er(s,a){let d=ka(a,s),m=d.split(Ca);if(m[0]===".."||Ea(d))return null;if(m.length<2)return null;let h=m[0],y=m[1];if(m.length===2&&y.endsWith(".jsonl"))return{projectKey:h,sessionId:y.replace(/\.jsonl$/,"")};if(m.length>=4){let S=m.slice(2),b=S.length-1;return S[b]=S.at(-1).replace(/\.jsonl$/,""),{projectKey:h,sessionId:y,subpath:S.join("/")}}return null}process.env.NoDefaultCurrentDirectoryInExePath="1";var Fa=["enabledPlugins","extraKnownMarketplaces","additionalMarketplaces"];function js(s){let a;try{a=E(Ee(s.toString("utf8")))}catch{return s}if(!Fs(a))return s;let d=!1;for(let h of Fa)if(Object.hasOwn(a,h))delete a[h],d=!0;let m=a.env;if(Fs(m)&&Object.hasOwn(m,"CLAUDE_CONFIG_DIR"))delete m.CLAUDE_CONFIG_DIR,d=!0;return d?t(a):s}function Fs(s){return s!==null&&typeof s==="object"&&!Array.isArray(s)}async function Ka(s,a){if(!s)return;let d=s;try{let m=E(s);if(m?.claudeAiOauth?.refreshToken)delete m.claudeAiOauth.refreshToken,d=t(m)}catch{}await Ks(a,d,{mode:384})}function $a(){if(process.platform!=="darwin")return Promise.resolve(void 0);let s=Es(ws);return new Promise((a)=>{Pa("security",["find-generic-password","-a",ks(),"-w","-s",s],{encoding:"utf-8",timeout:5000,windowsHide:!0},(d,m)=>a(d?void 0:m.trim()||void 0))})}async function $s(s,a,d,m,h=60000,y){if(!ie(a))return;let S=we(d,m),b=await D(s.load({projectKey:S,sessionId:a}),h,`SessionStore.load() timed out after ${h}ms for session ${a}`);if(!b||b.length===0)return;let _=G(Oa(),`claude-resume-${Aa()}`);try{let k=G(_,"projects",S);await tr(k,{recursive:!0,mode:448});let v=G(k,`${a}.jsonl`);await Jn(v,b);let C=m?.CLAUDE_CONFIG_DIR??process.env.CLAUDE_CONFIG_DIR,P=C??G(nr(),".claude"),O;try{O=await Ta(G(P,".credentials.json"),"utf-8")}catch(X){if(!g(X))throw X}if(!C&&!(m??process.env).ANTHROPIC_API_KEY&&!(m??process.env).CLAUDE_CODE_OAUTH_TOKEN)O=await $a()??O;await Ka(O,G(_,".credentials.json"));let I=_s(dt("CLAUDE_CONFIG_DIR")),N=C||nr(),F=G(N,".claude.json");await je(F,G(_,".claude.json"),void 0,qn(y,F,I.globalConfig,ge.globalConfig())),await je(G(P,".config.json"),G(_,".config.json"));for(let X of tn)if(X)await je(G(N,`.claude${X}.json`),G(_,`.claude${X}.json`));let B=G(P,"settings.json");if(await je(B,G(_,"settings.json"),js,qn(y,B,I.userSettings,ge.userSettings())),await je(G(P,"cowork_settings.json"),G(_,"cowork_settings.json"),js),s.listSubkeys)await Ba(s,{projectKey:S,sessionId:a},G(k,a),h);return _}catch(k){throw await nn(_),k}}async function Ba(s,a,d,m){let h=await D(s.listSubkeys({projectKey:a.projectKey,sessionId:a.sessionId}),m,`SessionStore.listSubkeys() timed out after ${m}ms for session ${a.sessionId}`);for(let y of h){let S=Xt(d,y+".jsonl");if(!y||Ma(y)||y.split(/[\\/]/).includes("..")||!S.startsWith(d+Na)){e(`[SessionStore] skipping unsafe subpath from listSubkeys: ${y}`,{level:"warn"});continue}let b=await D(s.load({projectKey:a.projectKey,sessionId:a.sessionId,subpath:y}),m,`SessionStore.load() timed out after ${m}ms for session ${a.sessionId} subpath ${y}`);if(!b||b.length===0)continue;let _=[],k=[];for(let v of b)if(Ns(v))_.push(v);else k.push(v);if(k.length>0)await tr(Ls(S),{recursive:!0}),await Jn(S,k);if(_.length>0){let v=_.at(-1),C=Xt(d,y+".meta.json");await tr(Ls(C),{recursive:!0});let{type:P,...O}=v;await Ks(C,t(O),{mode:384})}}}function Ua(s){let a=s?.accepted===!0&&(typeof s.directory!=="string"||!(Da.isAbsolute(s.directory)||La.isAbsolute(s.directory)))?void 0:s;if(s!==void 0&&a===void 0)e("workspaceTrust ignored: accepted requires an absolute directory, as it exists where Claude Code runs",{level:"warn"});return a}function rr(s,a){let{isSingleUserTurn:d,resumeConfigDir:m,deferSpawn:h}=a,{systemPrompt:y,settings:S,managedSettings:b,settingSources:_,sandbox:k,...v}=s??{},C,P,O,I;if(y===void 0)C="";else if(typeof y==="string")C=y;else if(Array.isArray(y))C=y;else if(y.type==="custom")C=y.prompt,I=y.snapshot;else if(y.type==="preset")P=y.append,O=y.excludeDynamicSections,I=y.snapshot;process.env.CLAUDE_AGENT_SDK_VERSION="0.3.301";let{abortController:N=nt(),additionalDirectories:F=[],projectConfigRoot:B,agent:X,agents:ve,allowedTools:se=[],betas:pn,canUseTool:Re,continue:Be,cwd:Ue,debug:ht,debugFile:He,disallowedTools:Ge=[],tools:fn,env:ae,executable:mn=Se()?"bun":"node",executableArgs:We=[],extraArgs:St={},fallbackModel:gn,enableFileCheckpointing:me,toolConfig:x,forkSession:wt,hooks:Et,includeHookEvents:qe,includePartialMessages:Ve,forwardSubagentText:Ye,verbatimPrompts:Je=!1,onElicitation:Pe,onUserDialog:j,supportedDialogKinds:te,perTaskStopAffordance:Z,rapidFollowupPreempt:Ae,workspaceTrust:hn,persistSession:kt,sessionStore:ne,sessionStoreFlush:oo,thinking:Ze,effort:io,maxThinkingTokens:yn,maxTurns:ao,maxBudgetUsd:co,taskBudget:lo,mcpServers:ar,model:uo,outputFormat:cr,permissionMode:po,allowDangerouslySkipPermissions:fo=!1,permissionPromptToolName:mo,permissionPrompts:go,plugins:Rt,pluginDelivery:Sn="argv",getOAuthToken:lr,getHostAuthToken:ur,workload:dr,resume:pr,resumeSessionAt:ho,resumeDropsTurn:yo,sessionId:So,skills:fr,stderr:bo,strictMcpConfig:_o}=v,mr=po;if(ne&&kt===!1)throw Error("sessionStore cannot be used with persistSession: false -- the storage adapter requires local writes to mirror from. Use CLAUDE_CONFIG_DIR=/tmp for ephemeral local writes with external mirroring.");if(te!==void 0&&te.length>0&&!j)throw Error("supportedDialogKinds requires an onUserDialog callback -- declaring dialog kinds without a handler would park dialogs nothing can answer. Provide onUserDialog, or omit supportedDialogKinds.");let wo=Ua(hn);if(ne&&Be&&!pr&&!ne.listSessions)throw Error("Options.continue with sessionStore requires store.listSessions to be implemented");if(ne&&me)throw Error("enableFileCheckpointing is not yet supported with sessionStore (backup blobs are not mirrored, so rewindFiles() fails after a store-backed resume).");if(ne&&v.spawnClaudeCodeProcess)e("sessionStore with custom spawnClaudeCodeProcess: ensure the subprocess CLAUDE_CONFIG_DIR matches the parent (same path, same separators) or transcript_mirror frames will be dropped.",{level:"warn"});if(Ds(!!Re,mr??"default",se),Sn!=="argv"&&Sn!=="initialize")throw Error("Invalid pluginDelivery. Expected 'argv' or 'initialize'.");let gr=Sn==="initialize"&&Rt!==void 0&&Rt.length>0,bn=v.pathToClaudeCodeExecutable;if(!bn){let z=ja(import.meta.url),ee=xa(z),oe=Hr((Te)=>ee.resolve(Te));if(!oe)throw Error(`Native CLI binary for ${process.platform}-${process.arch} not found. Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, or set options.pathToClaudeCodeExecutable.`);bn=oe}let hr=cr?.type==="json_schema"?cr.schema:void 0,U=ae?{...ae}:{...process.env};if(!U.CLAUDE_CODE_ENTRYPOINT)U.CLAUDE_CODE_ENTRYPOINT="sdk-ts";if(!U.CLAUDE_AGENT_SDK_VERSION)U.CLAUDE_AGENT_SDK_VERSION="0.3.301";if(me)U.CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING="true";if(!Object.keys(U).some((z)=>z.toUpperCase()==="CLAUDE_CODE_SDK_READS_SESSION_STATE"))U.CLAUDE_CODE_SDK_READS_SESSION_STATE="1";let _n=Ne(U.CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS),Eo=Number.isFinite(_n)&&_n>=0?_n:xt;if(lr)U.CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH="1";if(ur)U.CLAUDE_CODE_SDK_HAS_HOST_AUTH_REFRESH="1";if(x?.askUserQuestion?.previewFormat)U.CLAUDE_CODE_QUESTION_PREVIEW_FORMAT=x.askUserQuestion.previewFormat;for(let[z,ee]of[[x?.askUserQuestion?.extendedQuestions,"CLAUDE_CODE_QUESTION_EXTENDED"],[x?.askUserQuestion?.optionalDescriptions,"CLAUDE_CODE_QUESTION_OPTIONAL_DESCRIPTIONS"],[!1,"CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES"]])if(z)U[ee]="1";else if(!ae){for(let oe of Object.keys(U))if(oe.toUpperCase()===ee)delete U[oe]}let wn={};if(zn.inject(Bn.active(),wn),"traceparent"in wn){for(let z of["TRACEPARENT","TRACESTATE"])if(!(z in(ae??{})))delete U[z]}for(let[z,ee]of Object.entries(wn)){let oe=z.toUpperCase();if(!(oe in(ae??{})))U[oe]=ee}let yr={},Sr=new Map;if(ar)for(let[z,ee]of Object.entries(ar))if(ee.type==="sdk"&&ee.instance)Sr.set(z,ee);else yr[z]=ee;let et;if(Ze)switch(Ze.type){case"adaptive":et={type:"adaptive",display:Ze.display};break;case"enabled":et={type:"enabled",budgetTokens:Ze.budgetTokens,display:Ze.display};break;case"disabled":et={type:"disabled"};break}else if(yn!==void 0)et=yn===0?{type:"disabled"}:{type:"enabled",budgetTokens:yn};if(m){if(U.CLAUDE_CONFIG_DIR=m,process.platform==="win32")U.CLAUDE_SECURESTORAGE_CONFIG_DIR=ae?.CLAUDE_SECURESTORAGE_CONFIG_DIR??process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR??ae?.CLAUDE_CONFIG_DIR??process.env.CLAUDE_CONFIG_DIR??""}let br=new On({abortController:N,additionalDirectories:F,projectConfigRoot:B,agent:X,betas:pn,cwd:Ue,debug:ht,debugFile:He,executable:mn,executableArgs:We,extraArgs:dr?{...St,workload:dr}:St,pathToClaudeCodeExecutable:bn,env:U,forkSession:wt,stderr:bo,thinkingConfig:et,effort:io,maxTurns:ao,maxBudgetUsd:co,taskBudget:lo,model:uo,fallbackModel:gn,jsonSchema:hr,permissionMode:mr,allowDangerouslySkipPermissions:fo,permissionPromptToolName:mo,permissionPrompts:go,continueConversation:ne?void 0:Be,resume:pr,resumeSessionAt:ho,resumeDropsTurn:yo,sessionId:So,settings:typeof S==="object"?t(S):S,managedSettings:b?t(b):void 0,settingSources:_,skills:fr,allowedTools:se,disallowedTools:Ge,tools:fn,mcpServers:yr,strictMcpConfig:_o,canUseTool:!!Re,hooks:!!Et,includeHookEvents:qe,includePartialMessages:Ve,persistSession:kt,sessionMirror:!!ne,plugins:Rt,pluginsViaInitialize:gr,sandbox:k,spawnClaudeCodeProcess:v.spawnClaudeCodeProcess,onProcessSpawned:s?.onProcessSpawned,deferSpawn:h}),ko={systemPrompt:C,appendSystemPrompt:P,planModeInstructions:v.planModeInstructions,systemPromptSnapshot:I,appendSubagentSystemPrompt:v.appendSubagentSystemPrompt,toolAliases:v.toolAliases,excludeDynamicSections:O,agents:ve,title:v.title,skills:fr,webSearchIsolationExemptMcpServers:v.webSearchIsolationExemptMcpServers,promptSuggestions:v.promptSuggestions,agentProgressSummaries:v.agentProgressSummaries,forwardSubagentText:Ye,supportedDialogKinds:te,perTaskStopAffordance:Z,rapidFollowupPreempt:Ae,forwardNestedSubagentToolCalls:s?.forwardNestedSubagentToolCalls,workspaceTrust:wo,plugins:gr?Rt:void 0,captureSdkMcpManifests:!pt("CLAUDE_AGENT_SDK_DISABLE_MCP_MANIFESTS")},En=new jt(br,d,Re,Et,N,Sr,hr,ko,Pe,lr,ur,j,Je,Eo);if(ne){let z=()=>G(U.CLAUDE_CONFIG_DIR??G(nr(),".claude"),"projects"),ee=oo==="eager",oe=new Kn(async(Te,kn)=>{let tt=er(Te,z());if(tt)await ne.append(tt,kn);else e(`[SessionStore] dropping mirror frame: filePath ${Te} is not under ${z()} -- subprocess CLAUDE_CONFIG_DIR likely differs from parent (custom spawnClaudeCodeProcess / container?)`,{level:"warn"})},{onError:(Te,kn)=>{let tt=er(Te,z());if(tt)En.reportMirrorError(tt,kn.message)},maxPendingEntries:ee?0:jn,maxPendingBytes:ee?0:Fn});En.setTranscriptMirrorBatcher(oe)}return{queryInstance:En,transport:br,abortController:N,processEnv:U,verbatimPrompts:Je}}function sr(s,a,d,m){if(typeof a==="string")s.writeAfterInitialize(t({type:"user",session_id:"",message:{role:"user",content:[{type:"text",text:a}]},parent_tool_use_id:null,...m&&{client_composed:!0}})+`
`).catch((h)=>d.abort(h));else s.streamInput(a).catch((h)=>d.abort(h))}var Ha=new Set(["EBUSY","EMFILE","ENFILE","ENOTEMPTY","EPERM"]);async function nn(s){for(let a=0;;a++)try{return await Ia(s,{recursive:!0,force:!0})}catch(d){if(a>=4||!Ha.has(r(d)??""))return;await M((a+1)*100)}}function Ga(s,a){s.waitForExit().catch(()=>{}).finally(()=>nn(a))}function za({prompt:s,options:a}){if((a?.resume||a?.continue)&&a?.sessionStore)return Wa(s,a);let{queryInstance:d,abortController:m,verbatimPrompts:h}=rr(a,{isSingleUserTurn:typeof s==="string"});return sr(d,s,m,h),d}function Wa(s,a){let{queryInstance:d,transport:m,abortController:h,processEnv:y,verbatimPrompts:S}=rr({...a},{isSingleUserTurn:typeof s==="string",deferSpawn:!0}),b=Xt(a.cwd??"."),_=a.sessionStore,k=a.loadTimeoutMs??60000,v=a.resume;return(async()=>{if(!v)v=(await D(_.listSessions(we(b,a.env)),k,`SessionStore.listSessions() timed out after ${k}ms`)).slice().sort((O,I)=>I.mtime-O.mtime)[0]?.sessionId;if(!v)return;return $s(_,v,b,a.env,a.loadTimeoutMs)})().then((P)=>{if(P){m.updateResume(v);let O={CLAUDE_CONFIG_DIR:P};if(process.platform==="win32"){let I=a.env?.CLAUDE_SECURESTORAGE_CONFIG_DIR??process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR??a.env?.CLAUDE_CONFIG_DIR??process.env.CLAUDE_CONFIG_DIR??"";O.CLAUDE_SECURESTORAGE_CONFIG_DIR=I,y.CLAUDE_SECURESTORAGE_CONFIG_DIR=I}m.updateEnv(O),y.CLAUDE_CONFIG_DIR=P,d.addCleanupCallback(()=>Ga(m,P))}if(!d.isClosed())m.spawn()}).catch((P)=>{let O=L(P);m.spawnAbort(O),d.setError(O)}),sr(d,s,h,S),d}async function qa(s={}){return(await Va(s)).warm}async function Va({options:s,initializeTimeoutMs:a=60000}){let d,m=s?.resume;if((m||s?.continue)&&s?.sessionStore){let b=Xt(s.cwd??".");if(!m){if(!s.sessionStore.listSessions)throw Error("Options.continue with sessionStore requires store.listSessions to be implemented");let _=s.loadTimeoutMs??60000;m=(await D(s.sessionStore.listSessions(we(b,s.env)),_,`SessionStore.listSessions() timed out after ${_}ms`)).slice().sort((v,C)=>C.mtime-v.mtime)[0]?.sessionId}if(m)d=await $s(s.sessionStore,m,b,s.env,s.loadTimeoutMs)}let h,y,S;try{let I=function(){if(O)return;O=!0,C.close()},b=rr(d&&m&&m!==s?.resume?{...s,resume:m}:s,{isSingleUserTurn:!1,resumeConfigDir:d});h=b.queryInstance;let{transport:_,abortController:k,verbatimPrompts:v}=b;y=_;let C=b.queryInstance;if(d){let F=d;C.addCleanupCallback(()=>{S=_.waitForExit().catch(()=>{}).then(()=>nn(F))})}let P=`Subprocess initialization did not complete within ${a}ms — check authentication and network connectivity`;await D(C.initializationResult(),a,P).catch((F)=>{throw Ut(F,P)?w(F,{telemetryMessage:`Subprocess initialization did not complete within ${a}ms`,errorClass:"initialize_timeout"}):F});let O=!1;return{warm:{query(F){if(O)throw Error("WarmQuery.query() can only be called once");O=!0;try{sr(C,F,k,v)}catch(B){throw C.close(),B}if(typeof F==="string")C.setIsSingleUserTurn(!0);return C},close:I,async[Symbol.asyncDispose](){O=!0,C.close(),await S}},query:C,transport:_}}catch(b){if(h?.close(),d&&!S){let _=y;S=(_?_.waitForExit().catch(()=>{}):Promise.resolve()).then(()=>nn(d))}throw await S,b}}import{randomUUID as ro}from"crypto";import{constants as Vs}from"fs";import{open as oc,readdir as Xs,rm as Ys,stat as ic}from"fs/promises";import{join as de}from"path";class Bs{available=void 0;probing=void 0;procUnreadableLogged=!1}var Af=new i(()=>new Bs);var Us=["commands","agents","output-styles","skills","workflows","routines","themes","rules","session-env","uploads","mcp-skill-archives","usage-data","mcp-discovery-cache"];var Yf=new Set(Us),Jf=`must be one of the userConfigDir directory names (${Us.join(", ")})`,Hs=["installed","marketplaces","flagged","catalog","inUseSweep"];var Xf=new Set(Hs),Qf=`must be one of the pluginRegistry files (${Hs.join(", ")})`,Gs=["manifest","catalog"];var Zf=new Set(Gs),em=`must be one of the marketplaceCache forms (${Gs.join(", ")})`;var zs=["world"];var tm=new Set(zs),nm=`must be one of the session journal names (${zs.join(", ")})`;var Ws=["backup","corrupted"];var rm=new Set(Ws),sm=`must be one of the global-config copy kinds (${Ws.join(", ")})`;var ec="cloud-snapshots";var tc=new Set(["memory","tiny_memory","bagel",ec,"bridge-pointer.json",".session-aliases"]);var qs=".cast",om=`<stamp>${qs} inside a session's folder is that session's terminal recording stream: address it as keys.recording(projectKey, sessionId, stamp)`;var nc=[".ccr-tip.json",".precompact.json",qs],im=`must not end with ${nc.join(", ")}: those name a session's project-level sibling files`;var rc=".dir-sync.json",am=`must not end with ${rc}: that name is reserved for a cloud session's record at the project level`;var cm=`${[...tc].join(", ")} are reserved: they name project-level entries, not sessions`;var sc="timeline.jsonl",lm=`${sc} is the job's timeline stream: address it as keys.jobTimeline(jobId)`;function sn(s){return s===void 0?void 0:{source:s,hoverRestOn:l()}}var ac=64;function ir(s){return l()?s:void 0}async function Qs(s,a,d={},m){if(!ie(s))throw Error(`Invalid sessionId: ${s}`);if(!a.trim())throw Error("title must be non-empty");let h=t({type:"custom-title",customTitle:a.trim(),sessionId:s})+`
`;await no(s,h,d,ir(m))}async function Zs(s,a,d={},m){if(!ie(s))throw Error(`Invalid sessionId: ${s}`);if(a!==null){let y=_e(a).trim();if(!y)throw Error("tag must be non-empty (use null to clear)");a=y}let h=t({type:"tag",tag:a??"",sessionId:s})+`
`;await no(s,h,d,ir(m))}async function eo(s,a={},d){if(!ie(s))throw Error(`Invalid sessionId: ${s}`);let m=ir(d);for(let h of await lc(a,m)){if(l()&&m!==void 0){let b=Yt(h,m.isKeySegment);if(b!==void 0){if(await cc(b,s,m))return;continue}}let y=de(h,`${s}.jsonl`),S;try{({size:S}=await ic(y))}catch(b){let _=r(b);if(_==="ENOENT"||_==="ENOTDIR")continue;throw b}if(S===0)continue;await Ys(y,{force:!0}),await Ys(de(h,s),{recursive:!0,force:!0});return}throw Error(a.dir?`Session ${s} not found in project directory for ${a.dir}`:`Session ${s} not found in any project directory`)}async function cc(s,a,d){let{backend:m,transcriptKey:h}=d,y=h(s,a),S=await m.statMeta(y);if(!S.ok){if(S.error.code==="NotFound")return!1;throw Error("Session delete: transcript unreadable via storage",{cause:S.error})}if((S.value.storedBytes??S.value.size)===0)return!1;for(let _ of["transcript","sidecar"]){let k=await m.deleteScope({namespace:_,projectKey:s,sessionId:a});if(!k.ok)throw Error("Session delete: session directory not deletable via storage",{cause:k.error})}let b=await m.delete(y);if(!b.ok)throw Error("Session delete: transcript not deletable via storage",{cause:b.error});return!0}async function lc(s,a){if(s.dir){let m=await Zn(s.dir,Yn(a,l())),h=await Js(m,a),y;try{y=await Kt(m)}catch{y=[]}for(let S of y){if(S===m)continue;h.push(...await Js(S,a))}return h}let d=ue();if(l()&&a!==void 0){let m=await to(a);if(m===void 0)return[];if(m.laterPageFailed)throw Error("Session delete: project listing incomplete via storage");return m.names.map((h)=>de(d,h))}try{return(await Xs(d,{withFileTypes:!0})).filter((h)=>h.isDirectory()||h.isSymbolicLink()).map((h)=>de(d,h.name))}catch{return[]}}async function Js(s,a){let d=sn(a);if(d===void 0||!d.hoverRestOn)return gt(s);let m=await gt(s,d),h=mt(s),y=process.platform==="win32",S=[];for(let b of m)if(b===h||await Jt(b,s,y,d))S.push(b);return S}async function to(s){let a=[],d,m=0;try{do{let h=await s.backend.listEntries({namespace:"transcript"},{skipScopeStats:!0,...d!==void 0&&{cursor:d}});if(!h.ok)return m===0?void 0:{names:a,laterPageFailed:!0};for(let y of h.value.items){let S=Xn(y,s.isKeySegment);if(S!==void 0)a.push(S)}d=h.value.cursor}while(d&&++m<ac);return{names:a,laterPageFailed:Boolean(d)}}catch{return m===0&&a.length===0?void 0:{names:a,laterPageFailed:!0}}}async function no(s,a,d,m){let h=`${s}.jsonl`;if(d.dir){let b=await Zn(d.dir,Yn(m,l()));for(let k of await gt(b,sn(m)))if(await on(de(k,h),a,or(k,s,m)))return;let _;try{_=await Kt(b)}catch{_=[]}for(let k of _){if(k===b)continue;for(let v of await gt(k,sn(m)))if(await on(de(v,h),a,or(v,s,m)))return}throw Error(`Session ${s} not found in project directory for ${d.dir}`)}let y=ue();if(l()&&m!==void 0){let b=await to(m);if(b===void 0)throw new c(`Session ${s} not found (no projects directory)`,"Session not found (no projects directory)");let{names:_}=b;for(let k of _){let v=de(y,k);if(await on(de(v,h),a,or(v,s,m)))return}throw new c(`Session ${s} not found in any project directory`,"Session not found in any project directory")}let S;try{S=await Xs(y)}catch{throw Error(`Session ${s} not found (no projects directory)`)}for(let b of S)if(await on(de(y,b,h),a))return;throw Error(`Session ${s} not found in any project directory`)}async function on(s,a,d){if(l()&&d!==void 0)return uc(d,a);let m;try{m=await oc(s,Vs.O_WRONLY|Vs.O_APPEND)}catch(h){let y=r(h);if(y==="ENOENT"||y==="ENOTDIR")return!1;throw h}try{let{size:h}=await m.stat();if(h===0)return!1;let y=process.platform==="win32"?h:void 0,S=Buffer.from(a,"utf8"),b=0;while(b<S.length){let{bytesWritten:_}=await m.write(S,b,S.length-b,y);if(_<=0)throw new c(`tryAppend: short write to ${s} stalled with ${S.length-b} bytes remaining`,"tryAppend: zero-progress short write");if(b+=_,y!==void 0)y+=_}return!0}finally{await m.close()}}async function uc({backend:s,key:a},d){let m=await s.append(a,[{data:d}],{precondition:{type:"ifExists",nonEmpty:!0}});if(!m.ok){if(m.error.code==="NotFound")return!1;throw Error("Session append: transcript not writable via storage",{cause:m.error})}return!0}function or(s,a,d){if(!l()||d===void 0)return;let m=Yt(s,d.isKeySegment);return m===void 0?void 0:{backend:d.backend,key:d.transcriptKey(m,a)}}async function dc(s,a,d){if(d?.sessionStore)return mc(d.sessionStore,s,a,d.dir);return Qs(s,a,d)}async function pc(s,a,d){if(d?.sessionStore)return gc(d.sessionStore,s,a,d.dir);return Zs(s,a,d)}async function fc(s,a){if(!ie(s))throw new c(`Invalid sessionId: ${s}`,"deleteSession: invalid sessionId (must be a UUID)");if(a?.sessionStore){if(!a.sessionStore.delete)return;let d=we(a.dir);await a.sessionStore.delete({projectKey:d,sessionId:s});return}return eo(s,a)}async function mc(s,a,d,m){if(!ie(a))throw new c(`Invalid sessionId: ${a}`,"renameSession: invalid sessionId (must be a UUID)");if(!d.trim())throw Error("title must be non-empty");let h=we(m);await s.append({projectKey:h,sessionId:a},[{type:"custom-title",customTitle:d.trim(),sessionId:a,uuid:ro(),timestamp:new Date().toISOString()}])}async function gc(s,a,d,m){if(!ie(a))throw new c(`Invalid sessionId: ${a}`,"tagSession: invalid sessionId (must be a UUID)");if(d!==null){let y=_e(d).trim();if(!y)throw Error("tag must be non-empty (use null to clear)");d=y}let h=we(m);await s.append({projectKey:h,sessionId:a},[{type:"tag",tag:d??"",sessionId:a,uuid:ro(),timestamp:new Date().toISOString()}])}import{McpServer as hc}from"@modelcontextprotocol/sdk/server/mcp.js";import{normalizeObjectSchema as yc}from"@modelcontextprotocol/sdk/server/zod-compat.js";import{toJsonSchemaCompat as Sc}from"@modelcontextprotocol/sdk/server/zod-json-schema-compat.js";import{globalRegistry as so}from"zod/v4";import{version as ke}from"zod/v4/core";function bc(s,a,d,m,h){let y={};if(h?.searchHint)y["anthropic/searchHint"]=h.searchHint;if(h?.alwaysLoad)y["anthropic/alwaysLoad"]=!0;return{name:s,description:a,inputSchema:d,handler:m,annotations:h?.annotations,_meta:Object.keys(y).length>0?y:void 0}}var _c="CLAUDE_SDK_MCP_TOOL_SCHEMA_UNCONVERTIBLE";function wc(s){let a=new hc({name:s.name,version:s.version??"1.0.0"},{capabilities:{tools:s.tools?{}:void 0},instructions:s.instructions});if(s.tools)s.tools.forEach((m)=>{let h=kc(m.inputSchema)?V(m.inputSchema,(v)=>{if(!dn(v))return v;let C=vc(v),P=v.description;if(P&&!so.has(C))so.add(C,{description:P});return C}):m.inputSchema,y=a.registerTool(m.name,{description:m.description,inputSchema:h,annotations:m.annotations,_meta:s.alwaysLoad?{"anthropic/alwaysLoad":!0,...m._meta}:m._meta},m.handler);if(!Object.getOwnPropertyDescriptor(y,"enabled")?.configurable||!Object.isExtensible(y))return;let b=y.enabled,_,k;Object.defineProperty(y,"enabled",{configurable:!0,enumerable:!0,get(){if(!b||_===y.inputSchema)return b;try{let v=yc(y.inputSchema);if(v)Sc(v,{strictUnions:!0,pipeStrategy:"input"});return _=y.inputSchema,!0}catch(v){if(k!==y.inputSchema){k=y.inputSchema;let C=p(v).replace(/\.$/,""),P=[`Tool "${m.name}" on SDK MCP server "${s.name}" was left out of the server's tool list, because its input schema cannot be converted to JSON Schema${C?`: ${C}`:""}. The server's other tools are unaffected.`,...Ec(m.inputSchema,v)].join(" ");if(typeof process<"u"&&typeof process.emitWarning==="function")process.emitWarning(P,{code:_c});else console.warn(P)}return!1}},set(v){b=v}})});let d=_t(s.timeout);return{type:"sdk",name:s.name,instance:a,...d!==void 0&&{timeout:d}}}function Ec(s,a){if(a instanceof ReferenceError)return["Something this tool's schema reads, such as a z.lazy target or a default value, is not defined yet. Define every schema this tool uses before passing the server to query(), startup() or setMcpServers(). A zod 4 z.lazy whose function has thrown once stays broken, so create the schema, its tool and the server again to get the tool back."];let h=`${ke.major}.${ke.minor}.${ke.patch}`,y=Object.values(s).filter(dn).map((C)=>C._zod?.version).find((C)=>typeof C?.major==="number"&&(C.major!==ke.major||C.minor!==ke.minor||C.patch!==ke.patch)),S=y&&`this tool's schema was built with zod ${y.major}.${y.minor}.${y.patch}, and this SDK converts schemas with its own zod ${h}`,b=`${ke.major}.${ke.minor}`;if(!(a instanceof TypeError)){let C=["Change this tool's schema so that every field can be converted."];if(S)C.push(`A different zod version can also cause this: ${S}, so building the schema with zod ${b} may fix it.`);return C}let _="a schema this tool uses is not defined yet, or a zod 3 schema is nested inside a zod 4 one. Define every schema this tool uses before passing the server to query(), startup() or setMcpServers(). Build the whole schema with zod 3 or with zod 4, not a mix of the two. A zod 4 z.lazy whose function has thrown once stays broken, so create the schema, its tool and the server again to get the tool back.";if(!y)return[`This can mean ${_}`];let k=[`The zod versions differ: ${S}. Conversion can fail across versions, so build the schema with zod ${b}, or use an SDK release that bundles your zod version.`],v=y.major===4&&y.minor<=3;if(v)k.push(`On zod ${y.major}.${y.minor}, a z.record given only one argument also causes this; pass both, as in z.record(keySchema, valueSchema).`);return k.push(`If ${v?"neither is the cause":"the version difference is not the cause"}, it can mean ${_}`),k}function dn(s){return typeof s==="object"&&s!==null&&"_zod"in s}function kc(s){return typeof s==="object"&&s!==null&&!("_zod"in s)&&!("_def"in s)&&typeof s.parse!=="function"}function vc(s){if(!(Cc(s)?!Ce(s,!0):ln(s)&&!Ce(s,!1))||s._zod.optin!=="optional"||s._zod.optout!=="optional"||typeof s.clone!=="function")return s;let d=s.clone();return d._zod.optin="defaulted",d}function Cc(s){let a=s._zod.version;return a?.major===4&&a.minor<5}function Ce(s,a,d=new Set){if(!dn(s)||d.has(s))return!1;d.add(s);let m=s._zod.def;switch(m.type){case"lazy":return!0;case"optional":return!a&&Ce(m.innerType,a,d);case"nullable":case"catch":case"readonly":return Ce(m.innerType,a,d);case"pipe":return Ce(m.in,a,d)||Ce(m.out,a,d);case"union":return m.options?.some((h)=>Ce(h,a,d))??!1;default:return!1}}function ln(s,a=new Set){if(!dn(s)||a.has(s))return!1;a.add(s);let d=s._zod.def;switch(d.type){case"default":case"prefault":return!0;case"optional":case"nullable":case"catch":case"readonly":return ln(d.innerType,a);case"pipe":return ln(d.in,a);case"union":return d.options?.some((m)=>ln(m,a))??!1;default:return!1}}async function Rc(s){let{resolveSettingsForSdk:a}=await import("./core-6z7brxfa.mjs");return a(s)}var Pc=new Set(["bypassPermissions","auto","acceptEdits"]),Ac=new Set(["project"]),Tc=new Set(["project","local"]);function Ic(s){let a=s.effective.permissions?.defaultMode;if(!a||!Pc.has(a))return s.effective;for(let d=s.sources.length-1;d>=0;d--){let m=s.sources[d];if(m.settings.permissions?.defaultMode!==void 0){if((an.includes(a)?Tc:Ac).has(m.source)){let{defaultMode:y,...S}=s.effective.permissions??{};return{...s.effective,permissions:S}}return s.effective}}return s.effective}export{pe as AbortError,Vt as BUILTIN_TOOL_NAMES,cn as EXIT_REASONS,q as HOOK_EVENTS,Me as LEGACY_TOOL_NAME_ALIASES,zt as ORG_POLICY_LIMIT_PREFIXES,un as SYSTEM_PROMPT_DYNAMIC_BOUNDARY,Gt as USAGE_LIMIT_ERROR_PREFIXES,$t as USAGE_TRANSITION_PREFIXES,Wt as USAGE_WARNING_PREFIXES,wc as createSdkMcpServer,fc as deleteSession,Ic as filterEscalatingDefaultMode,za as query,dc as renameSession,Rc as resolveSettings,qa as startup,pc as tagSession,bc as tool};