@evolvingmachines/evolve 0.0.60 → 0.0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/chunk-N2LMMVL4.js +427 -0
  2. package/dist/cli/index.cjs +38 -37
  3. package/dist/cli/index.d.cts +3 -1
  4. package/dist/cli/index.d.ts +3 -1
  5. package/dist/cli/index.js +29 -28
  6. package/dist/index.cjs +54 -54
  7. package/dist/index.d.cts +111 -7
  8. package/dist/index.d.ts +111 -7
  9. package/dist/index.js +38 -38
  10. package/dist/{types-DlpTxdR_.d.cts → types-CMEpx9QI.d.cts} +313 -5
  11. package/dist/{types-DlpTxdR_.d.ts → types-CMEpx9QI.d.ts} +313 -5
  12. package/hosted-error-codes.json +6 -0
  13. package/package.json +5 -5
  14. package/skills/evolve-evals/references/cli-reference/analysis.mdx +69 -0
  15. package/skills/evolve-evals/references/cli-reference/check.mdx +86 -0
  16. package/skills/evolve-evals/references/cli-reference/dataset.mdx +13 -0
  17. package/skills/evolve-evals/references/cli-reference/run.mdx +6 -0
  18. package/skills/evolve-evals/references/cli-reference/trial.mdx +71 -2
  19. package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +14 -0
  20. package/skills/evolve-evals/references/sdk/python.mdx +22 -0
  21. package/skills/evolve-evals/references/sdk/typescript.mdx +22 -0
  22. package/skills/evolve-evals/references/sdk-reference/analyses.mdx +70 -0
  23. package/skills/evolve-evals/references/sdk-reference/checks.mdx +105 -4
  24. package/skills/evolve-evals/references/sdk-reference/datasets.mdx +40 -0
  25. package/skills/evolve-evals/references/sdk-reference/errors.mdx +11 -0
  26. package/skills/evolve-evals/references/sdk-reference/jobs.mdx +1 -1
  27. package/skills/evolve-evals/references/sdk-reference/trials.mdx +70 -0
  28. package/spec/openapi.yaml +3021 -360
  29. package/dist/chunk-JS2UTK2I.js +0 -427
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import {w,o,p,n,I,M as M$1,g,s,m,h,c,e,d,f,i,j as j$1,k,l,r,q as q$1,a,t,O,G,J as J$1,K as K$1,N as N$1,D as D$1,E,H as H$1,F as F$1,P as P$1,Q as Q$1,R,C,S as S$1,L,v,u,x,b,y,z as z$2,A as A$1,B as B$1}from'./chunk-JS2UTK2I.js';export{fa as AGENT_EFFORT_SUPPORT_VALUES,ca as ANALYSIS_ARTIFACT_STREAMS,W as ANALYSIS_STATUSES,X as CHECK_STATUSES,la as DEFAULT_HARNESS_TRIAL_LAYOUT,U as EVAL_SANDBOX_PROVIDERS,xa as EvolveApiError,Aa as EvolveDigestMismatchError,Ba as EvolveIncompleteDownloadError,$ as GATEWAY_TRACE_SEQ_BASE,ma as HARNESS_TRIAL_LAYOUTS,da as HOSTED_ERROR_CODES,za as ImportSettleError,V as JOB_LIST_SCOPES,c as MANAGED_SANDBOX_PROVIDERS,ya as NoActiveVersionError,Z as TASK_LINKED_BY,_ as TASK_LINK_REASONS,ba as TRIAL_ARTIFACT_STREAMS,T as TRIAL_STATUSES,Da as agents,Ha as analyses,ua as analysisEvolveRecord,ta as assembleTrialTree,Ja as auth,wa as checkEvolveRecord,Ia as checks,Ca as datasets,aa as gatewayUsageOf,qa as harborCopyPath,na as harnessTrialLayout,oa as homeRelativePath,La as hosted,ea as isHostedErrorCode,sa as jobEvolveRecord,Fa as jobs,I as managedSecrets,Ma as meta,Ka as orgs,Y as passAtK,pa as placeHomeObject,ga as sessions,Ea as skills,va as taskCheckEvolveRecord,ra as trialEvolveRecord,Ga as trials}from'./chunk-JS2UTK2I.js';import'./chunk-HQJI3HHU.js';export{b as EvolveUploadTimeoutError}from'./chunk-5GVMBEYI.js';import {EventEmitter}from'events';import Ml from'ajv';import {randomBytes,randomUUID,publicEncrypt,constants,createHash}from'crypto';import {stringify,parse}from'smol-toml';import {execFile,exec}from'child_process';import {promisify}from'util';import {mkdir,appendFile,rm,readFile,writeFile,unlink,copyFile,readdir,mkdtemp,rename,stat}from'fs/promises';import {homedir,tmpdir}from'os';import*as K from'path';import {join,basename,posix,dirname,isAbsolute,normalize,resolve,relative}from'path';import ha from'zod-to-json-schema';import*as j from'fs';import {createWriteStream}from'fs';import {z as z$1}from'zod';export{E2BProvider,createE2BProvider}from'@evolvingmachines/e2b';export{DaytonaProvider,createDaytonaProvider}from'@evolvingmachines/daytona';export{ModalProvider,createModalProvider}from'@evolvingmachines/modal';var po={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid"},Kt=["no-internet","pinned-context"],jt={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}},go=["timeoutMs","background","from","checkpointComment","resume"];var xr=["off","minimal","low","medium","high","xhigh","max","thinking"],Sr=2e5,Cr=["off","minimal","medium","thinking"],Er="medium";function fo(t){return t==="none"?{efforts:[],defaultEffort:null}:{efforts:t==="binary"?Cr:xr,defaultEffort:Er}}function Tr(t,e){return e??$[t]?.defaultReasoningEffort}function Ee(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function Vt(t){if(!(t==="off"||t==="none"||t==="no-thinking"))return !t||t==="thinking"||t==="medium"?"medium":t==="low"||t==="minimal"?"minimal":t==="xhigh"?"max":t}function mo(t){let e=Vt(t);return e?` --variant ${e} --thinking`:""}var $={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",effortSupport:"level",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",defaultReasoningEffort:"high",models:[{alias:"fable",modelId:"claude-fable-5-1",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-5",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-5",description:"Daily coding, features, tests"},{alias:"haiku",modelId:"claude-haiku-4-5-20251001",description:"Quick tasks, syntax correction"},{alias:"opus[1m]",modelId:"opus[1m]",description:"Complex reasoning with 1M context window"},{alias:"sonnet[1m]",modelId:"sonnet[1m]",description:"Daily coding with 1M context window"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:true,autoCompactWindow:Sr}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,nativeConfigPath:i})=>{let s=n?"--continue ":"",d=r?` --effort ${r}`:"",p=i?` --settings ${i}`:"";return `echo "${t}" | claude -p ${s}--model ${e}${d}${p} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",effortSupport:"level",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-5.6-sol",defaultReasoningEffort:"high",models:[{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Newest frontier flagship"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"GPT-5.6 flagship (previous generation)"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Balances intelligence and cost"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"High-volume, cost-sensitive tier"},{alias:"gpt-5.5",modelId:"gpt-5.5",description:"GPT-5.5 frontier model (two generations back)"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},nativeConfig:{format:"toml",path:"~/.codex/config.toml",delivery:"base-file"},presets:{"no-internet":{commandFlags:" -c web_search=disabled"},"pinned-context":{commandFlags:` -c model_context_window=${Sr}`}},skillsConfig:{targetDir:"~/.codex/skills"},spendTrackingEnvs:{sessionTagEnv:"EVOLVE_LITELLM_CUSTOMER_ID",runTagEnv:"EVOLVE_LITELLM_TAGS"},setupCommand:`printf '%s\\n' "$OPENAI_API_KEY" | codex login --with-api-key`,buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,presetFlags:i})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s}${i??""} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",effortSupport:"none",oauthEnv:"GEMINI_OAUTH_FILE_PATH",oauthFileName:"oauth_creds.json",oauthActivationEnv:{key:"GOOGLE_GENAI_USE_GCA",value:"true"},baseUrlEnv:"GOOGLE_GEMINI_BASE_URL",defaultModel:"gemini-3.5-flash",models:[{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest flash the stable gemini CLI serves: coding + agentic planning"},{alias:"gemini-3.5-flash-lite",modelId:"gemini-3.5-flash-lite",description:"Most cost-effective 3.5-class model"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${Ce(t)} --model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",effortSupport:"binary",defaultModel:"qwen3.7-max",defaultReasoningEffort:"thinking",models:[{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Strongest reasoning and coding option"},{alias:"qwen3.7-plus",modelId:"qwen3.7-plus",description:"Latest balanced Qwen Cloud recommendation"},{alias:"qwen3.6-flash",modelId:"qwen3.6-flash",description:"Fast and cost-effective option"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.qwen/skills"},spendTrackingJsonConfig:{headersPath:"model.generationConfig.customHeaders"},gatewayModelAliases:{"qwen3.7-max":"dashscope/qwen3.7-max","qwen3.7-plus":"dashscope/qwen3.7-plus","qwen3.6-flash":"dashscope/qwen3.6-flash"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let i=n?"--continue ":"",s=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${i}--auth-type openai --model ${s} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",effortSupport:"level",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k3",defaultReasoningEffort:"max",models:[{alias:"kimi-k3",modelId:"moonshot/kimi-k3",description:"Latest flagship: 1M context, always-on thinking",maxContextSize:1048576},{alias:"kimi-k2.7-code",modelId:"moonshot/kimi-k2.7-code",description:"Latest coding-specialized standard model"},{alias:"kimi-k3-raptor",modelId:"kimi-k3-raptor",description:"Evolve-managed Kimi K3 Raptor route for latency-sensitive agent runs",maxContextSize:1048576},{alias:"kimi-k2p7-code-raptor",modelId:"kimi-k2p7-code-raptor",description:"Evolve-managed Kimi K2.7 Code Raptor route for latency-sensitive agent runs"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.kimi-code/skills"},defaultBaseUrl:"https://api.moonshot.ai/v1",spendTrackingTomlProvider:{configPath:"~/.kimi-code/config.toml",providerName:"evolve-gateway",modelName:"evolve-default",maxContextSize:262144},checkpointExcludes:[".kimi-code/config.toml"],gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","kimi-k2.7-code":"moonshot/kimi-k2.7-code","kimi-k3-raptor":"kimi-k3-raptor","kimi-k2p7-code-raptor":"kimi-k2p7-code-raptor"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n,homeDir:r=q$1})=>{let i=e?"--continue ":"",s=Ce(t),d=`--config-file ${r}/.kimi-code/config.toml`,p=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,l=Ee(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${i}${d}${p}${l} -p ${s} --output-format stream-json; else kimi ${i}-p ${s} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-opus-5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[{alias:"openrouter/anthropic/claude-fable-5.1",modelId:"openrouter/anthropic/claude-fable-5.1",description:"Anthropic Fable 5.1 via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-5",modelId:"openrouter/anthropic/claude-opus-5",description:"Anthropic Opus 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-5",modelId:"openrouter/anthropic/claude-sonnet-5",description:"Anthropic Sonnet 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-haiku-4.5",modelId:"openrouter/anthropic/claude-haiku-4.5",description:"Anthropic Haiku via OpenRouter"},{alias:"openrouter/openai/gpt-6-astra",modelId:"openrouter/openai/gpt-6-astra",description:"OpenAI GPT-6 Astra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-sol",modelId:"openrouter/openai/gpt-5.6-sol",description:"OpenAI GPT-5.6 Sol via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-terra",modelId:"openrouter/openai/gpt-5.6-terra",description:"OpenAI GPT-5.6 Terra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-luna",modelId:"openrouter/openai/gpt-5.6-luna",description:"OpenAI GPT-5.6 Luna via OpenRouter"},{alias:"openrouter/google/gemini-3.6-flash",modelId:"openrouter/google/gemini-3.6-flash",description:"Gemini 3.6 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3.7-max",modelId:"openrouter/qwen/qwen3.7-max",description:"Qwen 3.7 Max via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k3",modelId:"openrouter/moonshotai/kimi-k3",description:"Kimi K3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3",modelId:"openrouter/z-ai/glm-5.3",description:"Zhipu GLM-5.3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3-flash",modelId:"openrouter/z-ai/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash (OpenRouter id; the Evolve gateway serves it from Fireworks)"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{targetDir:"~/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,isExternalGateway:i,reasoningEffort:s})=>{let d=n?"--continue ":"",p=mo(s);if(i)return `OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${e} --format json${p} "${t}" < /dev/null`;let l=ho(e);return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model ${l} --format json${p} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${l} --format json${p} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5.1",modelId:"claude-fable-5-1",description:"Factory-managed Claude Fable 5.1"},{alias:"claude-opus-5",modelId:"claude-opus-5",description:"Factory-managed Claude Opus 5"},{alias:"claude-sonnet-5",modelId:"claude-sonnet-5",description:"Factory-managed Claude Sonnet 5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Factory-managed GPT-6 Astra"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"Factory-managed GPT-5.6 Sol"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Factory-managed GPT-5.6 Terra"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"Factory-managed GPT-5.6 Luna"},{alias:"gemini-3.6-flash",modelId:"gemini-3.6-flash",description:"Factory-managed Gemini 3.6 Flash"},{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Qwen 3.7 Max via the Evolve gateway"},{alias:"kimi-k3",modelId:"kimi-k3",description:"Factory-managed Droid Core Kimi K3"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"claude-fable-5.1":"claude-fable-5-1","kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","qwen3.7-max":"dashscope/qwen3.7-max"},droidGatewaySettings:{settingsPath:"~/.factory/evolve-settings.json",displayName:"Evolve Gateway",provider:"generic-chat-completion-api",maxOutputTokens:32768},checkpointDirs:["~/.factory"],buildCommand:({prompt:t,model:e,isResume:n,sessionId:r,reasoningEffort:i,isDirectMode:s,isExternalGateway:d,homeDir:p=q$1})=>{let l=!s||d,o=l?`--settings ${p}/.factory/evolve-settings.json `:"",a=l?"custom:Evolve-Gateway-0":e,c=i?` --reasoning-effort ${i}`:"",u=n&&r?`--session-id ${Ce(r)} `:"";return `printf '%s' ${Ce(t)} | droid ${o}exec ${u}--skip-permissions-unsafe --cwd ${p}/workspace --output-format stream-json --model ${Ce(a)}${c}`}}};function D(t){let e=$[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function oe(t,e){if(t.models.some(i=>i.alias===e||i.modelId===e))return true;let n=t.gatewayModelAliases;if(n&&(e in n||Object.values(n).includes(e)))return true;let r=t.directModelAliases;return !!(r&&(e in r||Object.values(r).includes(e)))}function _r(t,e){return t.models.find(n=>n.alias===e)?.modelId??e}function ho(t){return t.startsWith("openrouter/")||oe($.opencode,t)?t:`openrouter/${t}`}function Gt(t){return t in $}function M(t,e=q$1){return t.replace(/^~/,e)}function Ce(t){return `'${t.replace(/'/g,"'\\''")}'`}function J(t,e=q$1){let n=D(t);return `${M(n.mcpConfig.settingsDir,e)}/${n.mcpConfig.filename}`}function z(t,e=q$1){let n=D(t);return M(n.mcpConfig.settingsDir,e)}function W(t){if(t instanceof Error){let e=t.message.toLowerCase();return e.includes("not found")||e.includes("enoent")||e.includes("no such file")||e.includes("does not exist")}return false}function Jt(t,e){let n=[e.command,e.url].filter(Boolean);if(n.length===0)throw new Error(`MCP server "${t}" must specify command or url`);if(n.length>1)throw new Error(`MCP server "${t}" cannot specify both command and url`)}function Te(t){for(let[e,n]of Object.entries(t))Jt(e,n);}function _e(t){return t.type?t.type:t.command?"stdio":"sse"}function yo(t){let e=_e(t);return {...t,type:e}}function wo(t){let{type:e,url:n,...r}=t;return _e(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function vo(t){return {type:_e(t),...t}}function bo(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function ko(t){let e=_e(t),{type:n,httpHeaders:r,envHttpHeaders:i,bearerTokenEnvVar:s,envVars:d,...p}=t;if(e==="stdio"&&t.command)return {type:"stdio",...p};if(t.url){let l={...p,type:e==="sse"?"sse":"http",url:t.url},o=t.headers??r;return o&&Object.keys(o).length>0&&(l.headers=o),l}return {type:e==="stdio"?"stdio":"http",...p}}async function zt(t,e,n,r,i){Te(n);let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let p={};try{let o=await t.files.read(d);typeof o=="string"&&(p=JSON.parse(o));}catch(o){if(!W(o))throw o}let l=Object.fromEntries(Object.entries(n).map(([o,a])=>[o,r(a)]));await t.files.write(d,JSON.stringify({...p,mcpServers:l},null,2));}async function Qe(t,e,n,r){Te(n);let i=z("claude",r),s=J("claude",r),d=Object.fromEntries(Object.entries(n).map(([l,o])=>[l,vo(o)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:d},null,2)),await t.files.makeDir(i);let p={};try{let l=await t.files.read(s);typeof l=="string"&&(p=JSON.parse(l));}catch(l){if(!W(l))throw l}p.enableAllProjectMcpServers=true,await t.files.write(s,JSON.stringify(p,null,2));}async function Xe(t,e,n){await zt(t,"gemini",e,yo,n);}async function et(t,e,n){await zt(t,"qwen",e,wo,n);}async function tt(t,e,n,r,i){let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let p={};try{let u=await t.files.read(d);typeof u=="string"&&(p=JSON.parse(u));}catch(u){if(!W(u))throw u}let l=n.split("."),o=p;for(let u=0;u<l.length-1;u++){let g=l[u];(typeof o[g]!="object"||o[g]===null)&&(o[g]={}),o=o[g];}let a=l[l.length-1],c=typeof o[a]=="object"&&o[a]!==null?o[a]:{};o[a]={...c,...r},await t.files.write(d,JSON.stringify(p,null,2));}async function Wt(t,e,n){let r=z("qwen",n),i=J("qwen",n);await t.files.makeDir(r);let s={};try{let o=await t.files.read(i);typeof o=="string"&&(s=JSON.parse(o));}catch(o){if(!W(o))throw o}let d=s.model??{},p=d.generationConfig??{},l=p.extra_body??{};s.model={...d,generationConfig:{...p,extra_body:{...l,enable_thinking:e}}},await t.files.write(i,JSON.stringify(s,null,2));}async function Ht(t,e,n){await zt(t,"kimi",e,bo,n);}async function nt(t,e,n){Te(n);let r=`${e}/.factory`,i=`${r}/mcp.json`;await t.files.makeDir(r);let s={};try{let p=await t.files.read(i);typeof p=="string"&&(s=JSON.parse(p));}catch(p){if(!W(p))throw p}let d=Object.fromEntries(Object.entries(n).map(([p,l])=>[p,ko(l)]));await t.files.write(i,JSON.stringify({...s,mcpServers:d},null,2));}async function rt(t,e,n,r){let i=M(e.settingsPath,r),s=i.slice(0,i.lastIndexOf("/"));await t.files.makeDir(s);let d={cloudSessionSync:false,customModels:[{model:e.model,displayName:e.displayName,baseUrl:e.baseUrl,apiKey:`\${${e.apiKeyEnv}}`,provider:e.provider,...e.maxOutputTokens!==void 0&&{maxOutputTokens:e.maxOutputTokens},extraHeaders:n}]};await t.files.write(i,JSON.stringify(d,null,2));}async function qt(t,e,n){Te(n);let r=`${e}/opencode.json`,i={};try{let d=await t.files.read(r);typeof d=="string"&&(i=JSON.parse(d));}catch(d){if(!W(d))throw d}let s=Object.fromEntries(Object.entries(n).map(([d,p])=>[d,So(p)]));await t.files.write(r,JSON.stringify({...i,mcp:s},null,2));}function So(t){let e=_e(t);if(e==="stdio"&&t.command){let r={type:"local",command:t.args?[t.command,...t.args]:[t.command]};return t.env&&Object.keys(t.env).length>0&&(r.environment=t.env),r}if(t.url){let n={type:"remote",url:t.url};return t.headers&&Object.keys(t.headers).length>0&&(n.headers=t.headers),n}return {type:e==="stdio"?"local":"remote",...t}}function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Rr(t,e,n){let r=t[e];if(r===void 0)return {};let i=Yt(r);if(!i){let s=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${e}" in ${n}: expected a TOML table, found ${s}`)}return i}function Zt(t,e){if(t===e)return true;if(Array.isArray(t)||Array.isArray(e))return Array.isArray(t)&&Array.isArray(e)&&t.length===e.length&&t.every((s,d)=>Zt(s,e[d]));let n=Yt(t),r=Yt(e);if(!n||!r)return false;let i=Object.keys(n);return i.length===Object.keys(r).length&&i.every(s=>s in r&&Zt(n[s],r[s]))}async function Pr(t,e){let n="";try{let r=await t.files.read(e);typeof r=="string"&&(n=r);}catch(r){if(!W(r))throw r;return {}}if(!n.trim())return {};try{return parse(n)}catch(r){throw new Error(`Failed to parse TOML at ${e}: ${r.message}`)}}async function Qt(t,e,n){await t.files.write(e,stringify(n).trimEnd()+`
2
- `);}function Eo(t,e){let n={},r=e.type??(e.command?"stdio":"http");if(r==="http"||r==="sse"||!!e.url){if(!e.url)throw new Error(`MCP server "${t}" is missing url for ${r} transport`);n.url=e.url,e.bearerTokenEnvVar&&(n.bearer_token_env_var=e.bearerTokenEnvVar);let s=e.httpHeaders??e.headers;s&&Object.keys(s).length>0&&(n.http_headers=s),e.envHttpHeaders&&Object.keys(e.envHttpHeaders).length>0&&(n.env_http_headers=e.envHttpHeaders);}else n.command=e.command,e.args&&e.args.length>0&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd);return e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.envVars&&e.envVars.length>0&&(n.env_vars=e.envVars),n}async function it(t,e,n){for(let[p,l]of Object.entries(e))Jt(p,l);let r=z("codex",n),i=J("codex",n);await t.files.makeDir(r);let s=await Pr(t,i);s.experimental_use_rmcp_client===void 0&&(s.experimental_use_rmcp_client=true);let d=Rr(s,"mcp_servers",i);s.mcp_servers=d;for(let[p,l]of Object.entries(e))d[p]===void 0&&(d[p]=Eo(p,l));await Qt(t,i,s);}async function st(t$1,e,n,r={},i){let s=z("codex",i),d=J("codex",i);await t$1.files.makeDir(s);let p=await Pr(t$1,d),l={...n?{[t]:n.sessionTagEnv,[u]:n.runTagEnv}:{},...r},o={name:"Evolve Gateway",base_url:e,env_key:"OPENAI_API_KEY",wire_api:"responses",...Object.keys(l).length>0?{env_http_headers:l}:{}},a=Rr(p,"model_providers",d);p.model_provider==="evolve-gateway"&&Zt(a["evolve-gateway"],o)||(p.model_provider="evolve-gateway",a["evolve-gateway"]=o,p.model_providers=a,await Qt(t$1,d,p));}async function Xt(t,e,n,r,i){let s=M(e.configPath,i),d=s.slice(0,s.lastIndexOf("/"));await t.files.makeDir(d);let p={default_model:e.modelName,default_thinking:r.defaultThinking,default_permission_mode:"auto",thinking:{mode:r.defaultThinking?"on":"off",...r.defaultThinking&&r.thinkingEffort?{effort:r.thinkingEffort}:{}},providers:{[e.providerName]:{type:"kimi",base_url:r.baseUrl,api_key:r.apiKey,custom_headers:n}},models:{[e.modelName]:{provider:e.providerName,model:r.model,max_context_size:e.maxContextSize,capabilities:["image_in","thinking"]}}};await Qt(t,s,p);}async function en(t,e,n,r,i){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await Qe(e,n,r,i);break;case "codex":await it(e,r,i);break;case "gemini":await Xe(e,r,i);break;case "qwen":await et(e,r,i);break;case "kimi":await Ht(e,r,i);break;case "opencode":await qt(e,n,r);break;case "droid":await nt(e,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function Ir(t){return !!t&&t.sessionUpdate!=="error"&&t.sessionUpdate!=="usage"}function P(t,e){for(let n of t)if(typeof n=="string"&&n.length>0)return n;try{let n=JSON.stringify(e);if(typeof n=="string"&&n.length>0)return n}catch{}return String(e)}function ot(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Re(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=ot(e.input_tokens),r=ot(e.output_tokens),i=ot(e.cache_read_input_tokens),s=ot(e.cache_creation_input_tokens),d={};(n!==void 0||i!==void 0||s!==void 0)&&(d.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(d.completionTokens=r),i!==void 0&&(d.cachedTokens=i);let p={};for(let[l,o]of Object.entries(e))l==="input_tokens"||l==="output_tokens"||o!=null&&(p[l]=o);return Object.keys(p).length>0&&(d.extra=p),d}function ee(t){if(typeof t=="string"&&t.length>0&&!Number.isNaN(Date.parse(t)))return t;if(typeof t=="number"&&Number.isFinite(t))return new Date(t).toISOString()}function at(){let t={};return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=a.session_id;switch(a.type){case "system":return null;case "assistant":{let u=n(a.message?.content,"assistant")??[],g=Re(a.message?.usage);return g&&u.push({sessionUpdate:"usage",scope:"call",usage:g}),e(u,a,c)}case "user":{let u=a.message?.content;if(typeof u=="string"||Array.isArray(u)&&u.length===1&&u[0].type==="text")return null;let g=a.tool_use_result??a.toolUseResult;return e(n(u,"user",g),a,c)}case "result":{let u=[],g=typeof a.total_cost_usd=="number"&&Number.isFinite(a.total_cost_usd)?a.total_cost_usd:void 0,f=Re(a.usage)??(g!==void 0?{}:null);if(f&&(g!==void 0&&(f.costUsd=g),u.push({sessionUpdate:"usage",scope:"run",usage:f})),a.is_error===true){let m=(Array.isArray(a.errors)?a.errors:[]).filter(y=>typeof y=="string"&&y.length>0).join(`
3
- `);u.push({sessionUpdate:"error",message:P([m,a.result,a.subtype],a),fatal:true});}return e(u,a,c)}default:return null}};function e(l,o,a){if(!l||l.length===0)return null;let c=o.message,u=ee(o.timestamp),g=typeof c?.model=="string"&&c.model?c.model:void 0,f=typeof c?.id=="string"&&c.id?c.id:void 0,h=typeof o.parent_tool_use_id=="string"&&o.parent_tool_use_id?o.parent_tool_use_id:void 0,m={};for(let y of ["stop_reason","stop_sequence","requestId"]){let w=c?.[y];w!=null&&(m[y]=w);}return l.map(y=>({sessionId:a,update:y,...u!==void 0?{timestamp:u}:{},...g!==void 0?{model:g}:{},...f!==void 0?{messageId:f}:{},...h!==void 0?{parentToolCallId:h}:{},...Object.keys(m).length>0?{extra:m}:{}}))}function n(l,o,a){if(typeof l=="string")return o==="user"?null:[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}];if(!l||!Array.isArray(l))return null;let c=[];for(let u of l){let g=null;switch(u.type){case "text":case "text_delta":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:u.text}};break;case "image":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"image",data:u.source?.type==="base64"?u.source.data:"",mimeType:u.source?.type==="base64"?u.source.media_type:"",uri:u.source?.type==="url"?u.source.url:void 0}};break;case "thinking":case "thinking_delta":g={sessionUpdate:"agent_thought_chunk",content:{type:"text",text:u.thinking}};break;case "tool_use":case "server_tool_use":case "mcp_tool_use":{if(t[u.id]=u,u.name==="TodoWrite")Array.isArray(u.input?.todos)&&(g={sessionUpdate:"plan",entries:p(u.input)});else {let f=r(u);g={sessionUpdate:"tool_call",toolCallId:u.id,status:"pending",...f,toolName:u.name};}break}case "tool_result":case "tool_search_tool_result":case "web_fetch_tool_result":case "web_search_tool_result":case "code_execution_tool_result":case "bash_code_execution_tool_result":case "text_editor_code_execution_tool_result":case "mcp_tool_result":{let f=t[u.tool_use_id];if(!f||(delete t[u.tool_use_id],f.name==="TodoWrite"))break;g={sessionUpdate:"tool_call_update",toolCallId:u.tool_use_id,status:"is_error"in u&&u.is_error?"failed":"completed",...i(u,f),...a!=null?{rawOutput:a}:{}};break}}g&&c.push(g);}return c.length>0?c:null}function r(l){let o=l.name,a=l.input||{};switch(o){case "Task":return {title:a.description||"Task",kind:"think",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "NotebookRead":return {title:a.notebook_path?`Read Notebook ${a.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "NotebookEdit":return {title:a.notebook_path?`Edit Notebook ${a.notebook_path}`:"Edit Notebook",kind:"edit",content:a.new_source?[{type:"content",content:{type:"text",text:a.new_source}}]:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "Bash":return {title:a.command?"`"+a.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:a.description?[{type:"content",content:{type:"text",text:a.description}}]:[],rawInput:a};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:a};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:a};case "Read":{let c="";return a.limit?c=" ("+((a.offset??0)+1)+" - "+((a.offset??0)+a.limit)+")":a.offset&&(c=" (from line "+(a.offset+1)+")"),{title:"Read "+(a.file_path??"File")+c,kind:"read",content:[],locations:a.file_path?[{path:a.file_path,line:a.offset??0}]:[],rawInput:a}}case "LS":return {title:a.path?`List \`${a.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:a};case "Edit":{let c=a.file_path;return {title:c?`Edit \`${c}\``:"Edit",kind:"edit",content:c?[{type:"diff",path:c,oldText:a.old_string??null,newText:a.new_string??""}]:[],locations:c?[{path:c}]:[],rawInput:a}}case "Write":return {title:a.file_path?`Write ${a.file_path}`:"Write",kind:"edit",content:a.file_path?[{type:"diff",path:a.file_path,oldText:null,newText:a.content??""}]:[],locations:a.file_path?[{path:a.file_path}]:[],rawInput:a};case "Glob":{let c="Find";return a.path&&(c+=` \`${a.path}\``),a.pattern&&(c+=` \`${a.pattern}\``),{title:c,kind:"search",content:[],locations:a.path?[{path:a.path}]:[],rawInput:a}}case "Grep":{let c="grep";return a["-i"]&&(c+=" -i"),a["-n"]&&(c+=" -n"),a["-A"]!==void 0&&(c+=` -A ${a["-A"]}`),a["-B"]!==void 0&&(c+=` -B ${a["-B"]}`),a["-C"]!==void 0&&(c+=` -C ${a["-C"]}`),a.output_mode==="files_with_matches"?c+=" -l":a.output_mode==="count"&&(c+=" -c"),a.head_limit!==void 0&&(c+=` | head -${a.head_limit}`),a.glob&&(c+=` --include="${a.glob}"`),a.type&&(c+=` --type=${a.type}`),a.multiline&&(c+=" -P"),c+=` "${a.pattern??""}"`,a.path&&(c+=` ${a.path}`),{title:c,kind:"search",content:[],rawInput:a}}case "WebFetch":return {title:a.url?`Fetch ${a.url}`:"Fetch",kind:"fetch",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "WebSearch":{let c=`"${a.query??""}"`;return a.allowed_domains?.length>0&&(c+=` (allowed: ${a.allowed_domains.join(", ")})`),a.blocked_domains?.length>0&&(c+=` (blocked: ${a.blocked_domains.join(", ")})`),{title:c,kind:"fetch",content:[],rawInput:a}}case "TodoWrite":return {title:Array.isArray(a.todos)?`Update TODOs: ${a.todos.map(c=>c.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:a};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:a.plan?[{type:"content",content:{type:"text",text:a.plan}}]:[],rawInput:a};default:if(o?.startsWith("mcp__")){let c=o.split("__"),u=c[1]||"mcp",g=c.slice(2).join("__")||o;return {title:`${u}: ${g}`,kind:"other",content:[],rawInput:a}}return {title:o||"Unknown Tool",kind:"other",content:[],rawInput:a}}}function i(l,o){return o?.name==="ExitPlanMode"?{title:"Exited Plan Mode"}:s(l.content)}function s(l){return Array.isArray(l)&&l.length>0?{content:l.map(o=>({type:"content",content:d(o)}))}:typeof l=="string"&&l.length>0?{content:[{type:"content",content:{type:"text",text:l}}]}:{}}function d(l){if(l.type==="text")return {type:"text",text:l.text};if(l.type==="image"){if(l.data&&l.mimeType)return {type:"image",data:l.data,mimeType:l.mimeType};if(l.source?.type==="base64")return {type:"image",data:l.source.data||"",mimeType:l.source.media_type||""};if(l.source?.type==="url")return {type:"image",data:"",mimeType:"",uri:l.source.url}}return l}function p(l){return l.todos.map(o=>({content:o.content,status:o.status||"pending",priority:"medium"}))}}function lt(){let e;return function(a){let c;try{c=JSON.parse(a);}catch{return null}if(c._meta||c._prompt)return null;let u=[];switch(c.type){case "thread.started":return typeof c.thread_id=="string"&&c.thread_id&&(e=c.thread_id),null;case "turn.started":return null;case "turn.completed":{let g=n(c.usage);if(!g)return null;u.push({update:{sessionUpdate:"usage",scope:"run",usage:g}});break}case "error":{let g=P([c.message],c);u.push({update:{sessionUpdate:"error",message:g,fatal:false}});break}case "turn.failed":{let g=P([c.error?.message],c.error??c);u.push({update:{sessionUpdate:"error",message:g,fatal:true}});break}case "item.started":{let g=c.item;if(!g)return null;let f=r(g);f&&u.push({update:f});break}case "item.updated":{let g=c.item;if(!g)return null;let f=i(g);f&&u.push({update:f});break}case "item.completed":{let g=c.item;if(!g)return null;let f=s(g);f&&u.push({update:f});break}default:return null}return u.length===0?null:e===void 0?u:u.map(g=>({sessionId:e,...g}))};function n(o){if(!o||typeof o!="object"||Array.isArray(o))return null;let a=o,c=y=>typeof y=="number"&&Number.isFinite(y)?y:void 0,u={},g=c(a.input_tokens),f=c(a.output_tokens),h=c(a.cached_input_tokens);g!==void 0&&(u.promptTokens=g),f!==void 0&&(u.completionTokens=f),h!==void 0&&(u.cachedTokens=h);let m={};for(let[y,w]of Object.entries(a))y==="input_tokens"||y==="output_tokens"||y==="cached_input_tokens"||w!=null&&(m[y]=w);return Object.keys(m).length>0&&(u.extra=m),u}function r(o){let a=o.id;switch(o.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${o.server}:${o.tool}`},{sessionUpdate:"tool_call",toolCallId:a,title:`${o.server}: ${o.tool}`,toolName:`mcp__${o.server}__${o.tool}`,kind:"other",status:"in_progress",rawInput:o.arguments,content:[]};case "command_execution":return {type:"command_execution",name:o.command},{sessionUpdate:"tool_call",toolCallId:a,title:o.command?`\`${o.command}\``:"Execute Command",toolName:"command_execution",kind:"execute",status:"in_progress",rawInput:{command:o.command},content:[]};case "web_search":return {type:"web_search",name:o.query},{sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function i(o){return o.type==="todo_list"?{sessionUpdate:"plan",entries:l(o.items)}:null}function s(o){let a=o.id;switch(o.type){case "error":return {sessionUpdate:"error",message:P([o.message],o),fatal:false};case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o.text??o.summary?.join(`
1
+ import {w,o,p,n,I,M as M$1,g,s,m,h,c,e,d,f,i,j as j$1,k,l,r,q as q$1,a,t,O,G,J as J$1,K as K$1,N as N$1,D as D$1,E,H as H$1,F as F$1,P as P$1,Q as Q$1,R,C,S as S$1,L,v,u,x,b,y,z as z$2,A as A$1,B as B$1}from'./chunk-N2LMMVL4.js';export{ga as AGENT_EFFORT_SUPPORT_VALUES,da as ANALYSIS_ARTIFACT_STREAMS,W as ANALYSIS_STATUSES,X as CHECK_STATUSES,ma as DEFAULT_HARNESS_TRIAL_LAYOUT,U as EVAL_SANDBOX_PROVIDERS,ya as EvolveApiError,Ba as EvolveDigestMismatchError,Ca as EvolveIncompleteDownloadError,$ as GATEWAY_TRACE_SEQ_BASE,na as HARNESS_TRIAL_LAYOUTS,ea as HOSTED_ERROR_CODES,Aa as ImportSettleError,V as JOB_LIST_SCOPES,c as MANAGED_SANDBOX_PROVIDERS,za as NoActiveVersionError,ca as SANDBOX_LOG_STREAMS,Z as TASK_LINKED_BY,_ as TASK_LINK_REASONS,ba as TRIAL_ARTIFACT_STREAMS,T as TRIAL_STATUSES,Ea as agents,Ia as analyses,va as analysisEvolveRecord,ua as assembleTrialTree,Ka as auth,xa as checkEvolveRecord,Ja as checks,Da as datasets,aa as gatewayUsageOf,ra as harborCopyPath,oa as harnessTrialLayout,pa as homeRelativePath,Ma as hosted,fa as isHostedErrorCode,ta as jobEvolveRecord,Ga as jobs,I as managedSecrets,Na as meta,La as orgs,Y as passAtK,qa as placeHomeObject,ha as sessions,Fa as skills,wa as taskCheckEvolveRecord,sa as trialEvolveRecord,Ha as trials}from'./chunk-N2LMMVL4.js';import'./chunk-HQJI3HHU.js';export{b as EvolveUploadTimeoutError}from'./chunk-5GVMBEYI.js';import {EventEmitter}from'events';import Fl from'ajv';import {randomBytes,randomUUID,publicEncrypt,constants,createHash}from'crypto';import {stringify,parse}from'smol-toml';import {execFile,exec}from'child_process';import {promisify}from'util';import {mkdir,appendFile,rm,readFile,writeFile,unlink,copyFile,readdir,mkdtemp,rename,stat}from'fs/promises';import {homedir,tmpdir}from'os';import*as K from'path';import {join,basename,posix,dirname,isAbsolute,normalize,resolve,relative}from'path';import ka from'zod-to-json-schema';import*as j from'fs';import {createWriteStream}from'fs';import {z as z$1}from'zod';export{E2BProvider,createE2BProvider}from'@evolvingmachines/e2b';export{DaytonaProvider,createDaytonaProvider}from'@evolvingmachines/daytona';export{ModalProvider,createModalProvider}from'@evolvingmachines/modal';var yo={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid"},jt=["no-internet","pinned-context"],Vt={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}},wo=["timeoutMs","background","from","checkpointComment","resume"];var _r=["off","minimal","low","medium","high","xhigh","max","thinking"],Tr=2e5,Rr=["off","minimal","medium","thinking"],Pr="medium";function vo(t){return t==="none"?{efforts:[],defaultEffort:null}:{efforts:t==="binary"?Rr:_r,defaultEffort:Pr}}function Ir(t,e){return e??U[t]?.defaultReasoningEffort}function Ee(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function Gt(t){if(!(t==="off"||t==="none"||t==="no-thinking"))return !t||t==="thinking"||t==="medium"?"medium":t==="low"||t==="minimal"?"minimal":t==="xhigh"?"max":t}function bo(t){let e=Gt(t);return e?` --variant ${e} --thinking`:""}var U={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",effortSupport:"level",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",defaultReasoningEffort:"high",models:[{alias:"fable",modelId:"claude-fable-5-1",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-5",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-5",description:"Daily coding, features, tests"},{alias:"haiku",modelId:"claude-haiku-4-5-20251001",description:"Quick tasks, syntax correction"},{alias:"opus[1m]",modelId:"opus[1m]",description:"Complex reasoning with 1M context window"},{alias:"sonnet[1m]",modelId:"sonnet[1m]",description:"Daily coding with 1M context window"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:true,autoCompactWindow:Tr}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,nativeConfigPath:i})=>{let s=n?"--continue ":"",d=r?` --effort ${r}`:"",u=i?` --settings ${i}`:"";return `echo "${t}" | claude -p ${s}--model ${e}${d}${u} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",effortSupport:"level",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-5.6-sol",defaultReasoningEffort:"high",models:[{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Newest frontier flagship"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"GPT-5.6 flagship (previous generation)"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Balances intelligence and cost"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"High-volume, cost-sensitive tier"},{alias:"gpt-5.5",modelId:"gpt-5.5",description:"GPT-5.5 frontier model (two generations back)"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},nativeConfig:{format:"toml",path:"~/.codex/config.toml",delivery:"base-file"},presets:{"no-internet":{commandFlags:" -c web_search=disabled"},"pinned-context":{commandFlags:` -c model_context_window=${Tr}`}},skillsConfig:{targetDir:"~/.codex/skills"},spendTrackingEnvs:{sessionTagEnv:"EVOLVE_LITELLM_CUSTOMER_ID",runTagEnv:"EVOLVE_LITELLM_TAGS"},setupCommand:`printf '%s\\n' "$OPENAI_API_KEY" | codex login --with-api-key`,buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,presetFlags:i})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s}${i??""} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",effortSupport:"none",oauthEnv:"GEMINI_OAUTH_FILE_PATH",oauthFileName:"oauth_creds.json",oauthActivationEnv:{key:"GOOGLE_GENAI_USE_GCA",value:"true"},baseUrlEnv:"GOOGLE_GEMINI_BASE_URL",defaultModel:"gemini-3.5-flash",models:[{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest flash the stable gemini CLI serves: coding + agentic planning"},{alias:"gemini-3.5-flash-lite",modelId:"gemini-3.5-flash-lite",description:"Most cost-effective 3.5-class model"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${Ce(t)} --model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",effortSupport:"binary",defaultModel:"qwen3.7-max",defaultReasoningEffort:"thinking",models:[{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Strongest reasoning and coding option"},{alias:"qwen3.7-plus",modelId:"qwen3.7-plus",description:"Latest balanced Qwen Cloud recommendation"},{alias:"qwen3.6-flash",modelId:"qwen3.6-flash",description:"Fast and cost-effective option"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.qwen/skills"},spendTrackingJsonConfig:{headersPath:"model.generationConfig.customHeaders"},gatewayModelAliases:{"qwen3.7-max":"dashscope/qwen3.7-max","qwen3.7-plus":"dashscope/qwen3.7-plus","qwen3.6-flash":"dashscope/qwen3.6-flash"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let i=n?"--continue ":"",s=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${i}--auth-type openai --model ${s} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",effortSupport:"level",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k3",defaultReasoningEffort:"max",models:[{alias:"kimi-k3",modelId:"moonshot/kimi-k3",description:"Latest flagship: 1M context, always-on thinking",maxContextSize:1048576},{alias:"kimi-k2.7-code",modelId:"moonshot/kimi-k2.7-code",description:"Latest coding-specialized standard model"},{alias:"kimi-k3-raptor",modelId:"kimi-k3-raptor",description:"Evolve-managed Kimi K3 Raptor route for latency-sensitive agent runs",maxContextSize:1048576},{alias:"kimi-k2p7-code-raptor",modelId:"kimi-k2p7-code-raptor",description:"Evolve-managed Kimi K2.7 Code Raptor route for latency-sensitive agent runs"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.kimi-code/skills"},defaultBaseUrl:"https://api.moonshot.ai/v1",spendTrackingTomlProvider:{configPath:"~/.kimi-code/config.toml",providerName:"evolve-gateway",modelName:"evolve-default",maxContextSize:262144},checkpointExcludes:[".kimi-code/config.toml"],gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","kimi-k2.7-code":"moonshot/kimi-k2.7-code","kimi-k3-raptor":"kimi-k3-raptor","kimi-k2p7-code-raptor":"kimi-k2p7-code-raptor"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n,homeDir:r=q$1})=>{let i=e?"--continue ":"",s=Ce(t),d=`--config-file ${r}/.kimi-code/config.toml`,u=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,l=Ee(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${i}${d}${u}${l} -p ${s} --output-format stream-json; else kimi ${i}-p ${s} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-opus-5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[{alias:"openrouter/anthropic/claude-fable-5.1",modelId:"openrouter/anthropic/claude-fable-5.1",description:"Anthropic Fable 5.1 via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-5",modelId:"openrouter/anthropic/claude-opus-5",description:"Anthropic Opus 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-5",modelId:"openrouter/anthropic/claude-sonnet-5",description:"Anthropic Sonnet 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-haiku-4.5",modelId:"openrouter/anthropic/claude-haiku-4.5",description:"Anthropic Haiku via OpenRouter"},{alias:"openrouter/openai/gpt-6-astra",modelId:"openrouter/openai/gpt-6-astra",description:"OpenAI GPT-6 Astra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-sol",modelId:"openrouter/openai/gpt-5.6-sol",description:"OpenAI GPT-5.6 Sol via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-terra",modelId:"openrouter/openai/gpt-5.6-terra",description:"OpenAI GPT-5.6 Terra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-luna",modelId:"openrouter/openai/gpt-5.6-luna",description:"OpenAI GPT-5.6 Luna via OpenRouter"},{alias:"openrouter/google/gemini-3.6-flash",modelId:"openrouter/google/gemini-3.6-flash",description:"Gemini 3.6 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3.7-max",modelId:"openrouter/qwen/qwen3.7-max",description:"Qwen 3.7 Max via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k3",modelId:"openrouter/moonshotai/kimi-k3",description:"Kimi K3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3",modelId:"openrouter/z-ai/glm-5.3",description:"Zhipu GLM-5.3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3-flash",modelId:"openrouter/z-ai/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash (OpenRouter id; the Evolve gateway serves it from Fireworks)"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{targetDir:"~/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,isExternalGateway:i,reasoningEffort:s})=>{let d=n?"--continue ":"",u=bo(s);if(i)return `OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${e} --format json${u} "${t}" < /dev/null`;let l=ko(e);return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model ${l} --format json${u} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${l} --format json${u} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5.1",modelId:"claude-fable-5-1",description:"Factory-managed Claude Fable 5.1"},{alias:"claude-opus-5",modelId:"claude-opus-5",description:"Factory-managed Claude Opus 5"},{alias:"claude-sonnet-5",modelId:"claude-sonnet-5",description:"Factory-managed Claude Sonnet 5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Factory-managed GPT-6 Astra"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"Factory-managed GPT-5.6 Sol"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Factory-managed GPT-5.6 Terra"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"Factory-managed GPT-5.6 Luna"},{alias:"gemini-3.6-flash",modelId:"gemini-3.6-flash",description:"Factory-managed Gemini 3.6 Flash"},{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Qwen 3.7 Max via the Evolve gateway"},{alias:"kimi-k3",modelId:"kimi-k3",description:"Factory-managed Droid Core Kimi K3"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"claude-fable-5.1":"claude-fable-5-1","kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","qwen3.7-max":"dashscope/qwen3.7-max"},droidGatewaySettings:{settingsPath:"~/.factory/evolve-settings.json",displayName:"Evolve Gateway",provider:"generic-chat-completion-api",maxOutputTokens:32768},checkpointDirs:["~/.factory"],buildCommand:({prompt:t,model:e,isResume:n,sessionId:r,reasoningEffort:i,isDirectMode:s,isExternalGateway:d,homeDir:u=q$1})=>{let l=!s||d,o=l?`--settings ${u}/.factory/evolve-settings.json `:"",a=l?"custom:Evolve-Gateway-0":e,c=i?` --reasoning-effort ${i}`:"",p=n&&r?`--session-id ${Ce(r)} `:"";return `printf '%s' ${Ce(t)} | droid ${o}exec ${p}--skip-permissions-unsafe --cwd ${u}/workspace --output-format stream-json --model ${Ce(a)}${c}`}}};function D(t){let e=U[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function oe(t,e){if(t.models.some(i=>i.alias===e||i.modelId===e))return true;let n=t.gatewayModelAliases;if(n&&(e in n||Object.values(n).includes(e)))return true;let r=t.directModelAliases;return !!(r&&(e in r||Object.values(r).includes(e)))}function Ar(t,e){return t.models.find(n=>n.alias===e)?.modelId??e}function ko(t){return t.startsWith("openrouter/")||oe(U.opencode,t)?t:`openrouter/${t}`}function Jt(t){return t in U}function M(t,e=q$1){return t.replace(/^~/,e)}function Ce(t){return `'${t.replace(/'/g,"'\\''")}'`}function J(t,e=q$1){let n=D(t);return `${M(n.mcpConfig.settingsDir,e)}/${n.mcpConfig.filename}`}function z(t,e=q$1){let n=D(t);return M(n.mcpConfig.settingsDir,e)}function W(t){if(t instanceof Error){let e=t.message.toLowerCase();return e.includes("not found")||e.includes("enoent")||e.includes("no such file")||e.includes("does not exist")}return false}function zt(t,e){let n=[e.command,e.url].filter(Boolean);if(n.length===0)throw new Error(`MCP server "${t}" must specify command or url`);if(n.length>1)throw new Error(`MCP server "${t}" cannot specify both command and url`)}function Te(t){for(let[e,n]of Object.entries(t))zt(e,n);}function _e(t){return t.type?t.type:t.command?"stdio":"sse"}function So(t){let e=_e(t);return {...t,type:e}}function xo(t){let{type:e,url:n,...r}=t;return _e(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function Co(t){return {type:_e(t),...t}}function Eo(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function To(t){let e=_e(t),{type:n,httpHeaders:r,envHttpHeaders:i,bearerTokenEnvVar:s,envVars:d,...u}=t;if(e==="stdio"&&t.command)return {type:"stdio",...u};if(t.url){let l={...u,type:e==="sse"?"sse":"http",url:t.url},o=t.headers??r;return o&&Object.keys(o).length>0&&(l.headers=o),l}return {type:e==="stdio"?"stdio":"http",...u}}async function Wt(t,e,n,r,i){Te(n);let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let u={};try{let o=await t.files.read(d);typeof o=="string"&&(u=JSON.parse(o));}catch(o){if(!W(o))throw o}let l=Object.fromEntries(Object.entries(n).map(([o,a])=>[o,r(a)]));await t.files.write(d,JSON.stringify({...u,mcpServers:l},null,2));}async function Qe(t,e,n,r){Te(n);let i=z("claude",r),s=J("claude",r),d=Object.fromEntries(Object.entries(n).map(([l,o])=>[l,Co(o)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:d},null,2)),await t.files.makeDir(i);let u={};try{let l=await t.files.read(s);typeof l=="string"&&(u=JSON.parse(l));}catch(l){if(!W(l))throw l}u.enableAllProjectMcpServers=true,await t.files.write(s,JSON.stringify(u,null,2));}async function Xe(t,e,n){await Wt(t,"gemini",e,So,n);}async function et(t,e,n){await Wt(t,"qwen",e,xo,n);}async function tt(t,e,n,r,i){let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let u={};try{let p=await t.files.read(d);typeof p=="string"&&(u=JSON.parse(p));}catch(p){if(!W(p))throw p}let l=n.split("."),o=u;for(let p=0;p<l.length-1;p++){let g=l[p];(typeof o[g]!="object"||o[g]===null)&&(o[g]={}),o=o[g];}let a=l[l.length-1],c=typeof o[a]=="object"&&o[a]!==null?o[a]:{};o[a]={...c,...r},await t.files.write(d,JSON.stringify(u,null,2));}async function Ht(t,e,n){let r=z("qwen",n),i=J("qwen",n);await t.files.makeDir(r);let s={};try{let o=await t.files.read(i);typeof o=="string"&&(s=JSON.parse(o));}catch(o){if(!W(o))throw o}let d=s.model??{},u=d.generationConfig??{},l=u.extra_body??{};s.model={...d,generationConfig:{...u,extra_body:{...l,enable_thinking:e}}},await t.files.write(i,JSON.stringify(s,null,2));}async function qt(t,e,n){await Wt(t,"kimi",e,Eo,n);}async function nt(t,e,n){Te(n);let r=`${e}/.factory`,i=`${r}/mcp.json`;await t.files.makeDir(r);let s={};try{let u=await t.files.read(i);typeof u=="string"&&(s=JSON.parse(u));}catch(u){if(!W(u))throw u}let d=Object.fromEntries(Object.entries(n).map(([u,l])=>[u,To(l)]));await t.files.write(i,JSON.stringify({...s,mcpServers:d},null,2));}async function rt(t,e,n,r){let i=M(e.settingsPath,r),s=i.slice(0,i.lastIndexOf("/"));await t.files.makeDir(s);let d={cloudSessionSync:false,customModels:[{model:e.model,displayName:e.displayName,baseUrl:e.baseUrl,apiKey:`\${${e.apiKeyEnv}}`,provider:e.provider,...e.maxOutputTokens!==void 0&&{maxOutputTokens:e.maxOutputTokens},extraHeaders:n}]};await t.files.write(i,JSON.stringify(d,null,2));}async function Yt(t,e,n){Te(n);let r=`${e}/opencode.json`,i={};try{let d=await t.files.read(r);typeof d=="string"&&(i=JSON.parse(d));}catch(d){if(!W(d))throw d}let s=Object.fromEntries(Object.entries(n).map(([d,u])=>[d,_o(u)]));await t.files.write(r,JSON.stringify({...i,mcp:s},null,2));}function _o(t){let e=_e(t);if(e==="stdio"&&t.command){let r={type:"local",command:t.args?[t.command,...t.args]:[t.command]};return t.env&&Object.keys(t.env).length>0&&(r.environment=t.env),r}if(t.url){let n={type:"remote",url:t.url};return t.headers&&Object.keys(t.headers).length>0&&(n.headers=t.headers),n}return {type:e==="stdio"?"local":"remote",...t}}function Zt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Or(t,e,n){let r=t[e];if(r===void 0)return {};let i=Zt(r);if(!i){let s=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${e}" in ${n}: expected a TOML table, found ${s}`)}return i}function Qt(t,e){if(t===e)return true;if(Array.isArray(t)||Array.isArray(e))return Array.isArray(t)&&Array.isArray(e)&&t.length===e.length&&t.every((s,d)=>Qt(s,e[d]));let n=Zt(t),r=Zt(e);if(!n||!r)return false;let i=Object.keys(n);return i.length===Object.keys(r).length&&i.every(s=>s in r&&Qt(n[s],r[s]))}async function Mr(t,e){let n="";try{let r=await t.files.read(e);typeof r=="string"&&(n=r);}catch(r){if(!W(r))throw r;return {}}if(!n.trim())return {};try{return parse(n)}catch(r){throw new Error(`Failed to parse TOML at ${e}: ${r.message}`)}}async function Xt(t,e,n){await t.files.write(e,stringify(n).trimEnd()+`
2
+ `);}function Io(t,e){let n={},r=e.type??(e.command?"stdio":"http");if(r==="http"||r==="sse"||!!e.url){if(!e.url)throw new Error(`MCP server "${t}" is missing url for ${r} transport`);n.url=e.url,e.bearerTokenEnvVar&&(n.bearer_token_env_var=e.bearerTokenEnvVar);let s=e.httpHeaders??e.headers;s&&Object.keys(s).length>0&&(n.http_headers=s),e.envHttpHeaders&&Object.keys(e.envHttpHeaders).length>0&&(n.env_http_headers=e.envHttpHeaders);}else n.command=e.command,e.args&&e.args.length>0&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd);return e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.envVars&&e.envVars.length>0&&(n.env_vars=e.envVars),n}async function it(t,e,n){for(let[u,l]of Object.entries(e))zt(u,l);let r=z("codex",n),i=J("codex",n);await t.files.makeDir(r);let s=await Mr(t,i);s.experimental_use_rmcp_client===void 0&&(s.experimental_use_rmcp_client=true);let d=Or(s,"mcp_servers",i);s.mcp_servers=d;for(let[u,l]of Object.entries(e))d[u]===void 0&&(d[u]=Io(u,l));await Xt(t,i,s);}async function st(t$1,e,n,r={},i){let s=z("codex",i),d=J("codex",i);await t$1.files.makeDir(s);let u$1=await Mr(t$1,d),l={...n?{[t]:n.sessionTagEnv,[u]:n.runTagEnv}:{},...r},o={name:"Evolve Gateway",base_url:e,env_key:"OPENAI_API_KEY",wire_api:"responses",...Object.keys(l).length>0?{env_http_headers:l}:{}},a=Or(u$1,"model_providers",d);u$1.model_provider==="evolve-gateway"&&Qt(a["evolve-gateway"],o)||(u$1.model_provider="evolve-gateway",a["evolve-gateway"]=o,u$1.model_providers=a,await Xt(t$1,d,u$1));}async function en(t,e,n,r,i){let s=M(e.configPath,i),d=s.slice(0,s.lastIndexOf("/"));await t.files.makeDir(d);let u={default_model:e.modelName,default_thinking:r.defaultThinking,default_permission_mode:"auto",thinking:{mode:r.defaultThinking?"on":"off",...r.defaultThinking&&r.thinkingEffort?{effort:r.thinkingEffort}:{}},providers:{[e.providerName]:{type:"kimi",base_url:r.baseUrl,api_key:r.apiKey,custom_headers:n}},models:{[e.modelName]:{provider:e.providerName,model:r.model,max_context_size:e.maxContextSize,capabilities:["image_in","thinking"]}}};await Xt(t,s,u);}async function tn(t,e,n,r,i){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await Qe(e,n,r,i);break;case "codex":await it(e,r,i);break;case "gemini":await Xe(e,r,i);break;case "qwen":await et(e,r,i);break;case "kimi":await qt(e,r,i);break;case "opencode":await Yt(e,n,r);break;case "droid":await nt(e,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function $r(t){return !!t&&t.sessionUpdate!=="error"&&t.sessionUpdate!=="usage"}function P(t,e){for(let n of t)if(typeof n=="string"&&n.length>0)return n;try{let n=JSON.stringify(e);if(typeof n=="string"&&n.length>0)return n}catch{}return String(e)}function ot(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Re(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=ot(e.input_tokens),r=ot(e.output_tokens),i=ot(e.cache_read_input_tokens),s=ot(e.cache_creation_input_tokens),d={};(n!==void 0||i!==void 0||s!==void 0)&&(d.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(d.completionTokens=r),i!==void 0&&(d.cachedTokens=i);let u={};for(let[l,o]of Object.entries(e))l==="input_tokens"||l==="output_tokens"||o!=null&&(u[l]=o);return Object.keys(u).length>0&&(d.extra=u),d}function ee(t){if(typeof t=="string"&&t.length>0&&!Number.isNaN(Date.parse(t)))return t;if(typeof t=="number"&&Number.isFinite(t))return new Date(t).toISOString()}function at(){let t={};return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=a.session_id;switch(a.type){case "system":return null;case "assistant":{let p=n(a.message?.content,"assistant")??[],g=Re(a.message?.usage);return g&&p.push({sessionUpdate:"usage",scope:"call",usage:g}),e(p,a,c)}case "user":{let p=a.message?.content;if(typeof p=="string"||Array.isArray(p)&&p.length===1&&p[0].type==="text")return null;let g=a.tool_use_result??a.toolUseResult;return e(n(p,"user",g),a,c)}case "result":{let p=[],g=typeof a.total_cost_usd=="number"&&Number.isFinite(a.total_cost_usd)?a.total_cost_usd:void 0,f=Re(a.usage)??(g!==void 0?{}:null);if(f&&(g!==void 0&&(f.costUsd=g),p.push({sessionUpdate:"usage",scope:"run",usage:f})),a.is_error===true){let m=(Array.isArray(a.errors)?a.errors:[]).filter(y=>typeof y=="string"&&y.length>0).join(`
3
+ `);p.push({sessionUpdate:"error",message:P([m,a.result,a.subtype],a),fatal:true});}return e(p,a,c)}default:return null}};function e(l,o,a){if(!l||l.length===0)return null;let c=o.message,p=ee(o.timestamp),g=typeof c?.model=="string"&&c.model?c.model:void 0,f=typeof c?.id=="string"&&c.id?c.id:void 0,h=typeof o.parent_tool_use_id=="string"&&o.parent_tool_use_id?o.parent_tool_use_id:void 0,m={};for(let y of ["stop_reason","stop_sequence","requestId"]){let w=c?.[y];w!=null&&(m[y]=w);}return l.map(y=>({sessionId:a,update:y,...p!==void 0?{timestamp:p}:{},...g!==void 0?{model:g}:{},...f!==void 0?{messageId:f}:{},...h!==void 0?{parentToolCallId:h}:{},...Object.keys(m).length>0?{extra:m}:{}}))}function n(l,o,a){if(typeof l=="string")return o==="user"?null:[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}];if(!l||!Array.isArray(l))return null;let c=[];for(let p of l){let g=null;switch(p.type){case "text":case "text_delta":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.text}};break;case "image":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"image",data:p.source?.type==="base64"?p.source.data:"",mimeType:p.source?.type==="base64"?p.source.media_type:"",uri:p.source?.type==="url"?p.source.url:void 0}};break;case "thinking":case "thinking_delta":g={sessionUpdate:"agent_thought_chunk",content:{type:"text",text:p.thinking}};break;case "tool_use":case "server_tool_use":case "mcp_tool_use":{if(t[p.id]=p,p.name==="TodoWrite")Array.isArray(p.input?.todos)&&(g={sessionUpdate:"plan",entries:u(p.input)});else {let f=r(p);g={sessionUpdate:"tool_call",toolCallId:p.id,status:"pending",...f,toolName:p.name};}break}case "tool_result":case "tool_search_tool_result":case "web_fetch_tool_result":case "web_search_tool_result":case "code_execution_tool_result":case "bash_code_execution_tool_result":case "text_editor_code_execution_tool_result":case "mcp_tool_result":{let f=t[p.tool_use_id];if(!f||(delete t[p.tool_use_id],f.name==="TodoWrite"))break;g={sessionUpdate:"tool_call_update",toolCallId:p.tool_use_id,status:"is_error"in p&&p.is_error?"failed":"completed",...i(p,f),...a!=null?{rawOutput:a}:{}};break}}g&&c.push(g);}return c.length>0?c:null}function r(l){let o=l.name,a=l.input||{};switch(o){case "Task":return {title:a.description||"Task",kind:"think",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "NotebookRead":return {title:a.notebook_path?`Read Notebook ${a.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "NotebookEdit":return {title:a.notebook_path?`Edit Notebook ${a.notebook_path}`:"Edit Notebook",kind:"edit",content:a.new_source?[{type:"content",content:{type:"text",text:a.new_source}}]:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "Bash":return {title:a.command?"`"+a.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:a.description?[{type:"content",content:{type:"text",text:a.description}}]:[],rawInput:a};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:a};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:a};case "Read":{let c="";return a.limit?c=" ("+((a.offset??0)+1)+" - "+((a.offset??0)+a.limit)+")":a.offset&&(c=" (from line "+(a.offset+1)+")"),{title:"Read "+(a.file_path??"File")+c,kind:"read",content:[],locations:a.file_path?[{path:a.file_path,line:a.offset??0}]:[],rawInput:a}}case "LS":return {title:a.path?`List \`${a.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:a};case "Edit":{let c=a.file_path;return {title:c?`Edit \`${c}\``:"Edit",kind:"edit",content:c?[{type:"diff",path:c,oldText:a.old_string??null,newText:a.new_string??""}]:[],locations:c?[{path:c}]:[],rawInput:a}}case "Write":return {title:a.file_path?`Write ${a.file_path}`:"Write",kind:"edit",content:a.file_path?[{type:"diff",path:a.file_path,oldText:null,newText:a.content??""}]:[],locations:a.file_path?[{path:a.file_path}]:[],rawInput:a};case "Glob":{let c="Find";return a.path&&(c+=` \`${a.path}\``),a.pattern&&(c+=` \`${a.pattern}\``),{title:c,kind:"search",content:[],locations:a.path?[{path:a.path}]:[],rawInput:a}}case "Grep":{let c="grep";return a["-i"]&&(c+=" -i"),a["-n"]&&(c+=" -n"),a["-A"]!==void 0&&(c+=` -A ${a["-A"]}`),a["-B"]!==void 0&&(c+=` -B ${a["-B"]}`),a["-C"]!==void 0&&(c+=` -C ${a["-C"]}`),a.output_mode==="files_with_matches"?c+=" -l":a.output_mode==="count"&&(c+=" -c"),a.head_limit!==void 0&&(c+=` | head -${a.head_limit}`),a.glob&&(c+=` --include="${a.glob}"`),a.type&&(c+=` --type=${a.type}`),a.multiline&&(c+=" -P"),c+=` "${a.pattern??""}"`,a.path&&(c+=` ${a.path}`),{title:c,kind:"search",content:[],rawInput:a}}case "WebFetch":return {title:a.url?`Fetch ${a.url}`:"Fetch",kind:"fetch",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "WebSearch":{let c=`"${a.query??""}"`;return a.allowed_domains?.length>0&&(c+=` (allowed: ${a.allowed_domains.join(", ")})`),a.blocked_domains?.length>0&&(c+=` (blocked: ${a.blocked_domains.join(", ")})`),{title:c,kind:"fetch",content:[],rawInput:a}}case "TodoWrite":return {title:Array.isArray(a.todos)?`Update TODOs: ${a.todos.map(c=>c.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:a};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:a.plan?[{type:"content",content:{type:"text",text:a.plan}}]:[],rawInput:a};default:if(o?.startsWith("mcp__")){let c=o.split("__"),p=c[1]||"mcp",g=c.slice(2).join("__")||o;return {title:`${p}: ${g}`,kind:"other",content:[],rawInput:a}}return {title:o||"Unknown Tool",kind:"other",content:[],rawInput:a}}}function i(l,o){return o?.name==="ExitPlanMode"?{title:"Exited Plan Mode"}:s(l.content)}function s(l){return Array.isArray(l)&&l.length>0?{content:l.map(o=>({type:"content",content:d(o)}))}:typeof l=="string"&&l.length>0?{content:[{type:"content",content:{type:"text",text:l}}]}:{}}function d(l){if(l.type==="text")return {type:"text",text:l.text};if(l.type==="image"){if(l.data&&l.mimeType)return {type:"image",data:l.data,mimeType:l.mimeType};if(l.source?.type==="base64")return {type:"image",data:l.source.data||"",mimeType:l.source.media_type||""};if(l.source?.type==="url")return {type:"image",data:"",mimeType:"",uri:l.source.url}}return l}function u(l){return l.todos.map(o=>({content:o.content,status:o.status||"pending",priority:"medium"}))}}function lt(){let e;return function(a){let c;try{c=JSON.parse(a);}catch{return null}if(c._meta||c._prompt)return null;let p=[];switch(c.type){case "thread.started":return typeof c.thread_id=="string"&&c.thread_id&&(e=c.thread_id),null;case "turn.started":return null;case "turn.completed":{let g=n(c.usage);if(!g)return null;p.push({update:{sessionUpdate:"usage",scope:"run",usage:g}});break}case "error":{let g=P([c.message],c);p.push({update:{sessionUpdate:"error",message:g,fatal:false}});break}case "turn.failed":{let g=P([c.error?.message],c.error??c);p.push({update:{sessionUpdate:"error",message:g,fatal:true}});break}case "item.started":{let g=c.item;if(!g)return null;let f=r(g);f&&p.push({update:f});break}case "item.updated":{let g=c.item;if(!g)return null;let f=i(g);f&&p.push({update:f});break}case "item.completed":{let g=c.item;if(!g)return null;let f=s(g);f&&p.push({update:f});break}default:return null}return p.length===0?null:e===void 0?p:p.map(g=>({sessionId:e,...g}))};function n(o){if(!o||typeof o!="object"||Array.isArray(o))return null;let a=o,c=y=>typeof y=="number"&&Number.isFinite(y)?y:void 0,p={},g=c(a.input_tokens),f=c(a.output_tokens),h=c(a.cached_input_tokens);g!==void 0&&(p.promptTokens=g),f!==void 0&&(p.completionTokens=f),h!==void 0&&(p.cachedTokens=h);let m={};for(let[y,w]of Object.entries(a))y==="input_tokens"||y==="output_tokens"||y==="cached_input_tokens"||w!=null&&(m[y]=w);return Object.keys(m).length>0&&(p.extra=m),p}function r(o){let a=o.id;switch(o.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${o.server}:${o.tool}`},{sessionUpdate:"tool_call",toolCallId:a,title:`${o.server}: ${o.tool}`,toolName:`mcp__${o.server}__${o.tool}`,kind:"other",status:"in_progress",rawInput:o.arguments,content:[]};case "command_execution":return {type:"command_execution",name:o.command},{sessionUpdate:"tool_call",toolCallId:a,title:o.command?`\`${o.command}\``:"Execute Command",toolName:"command_execution",kind:"execute",status:"in_progress",rawInput:{command:o.command},content:[]};case "web_search":return {type:"web_search",name:o.query},{sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function i(o){return o.type==="todo_list"?{sessionUpdate:"plan",entries:l(o.items)}:null}function s(o){let a=o.id;switch(o.type){case "error":return {sessionUpdate:"error",message:P([o.message],o),fatal:false};case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o.text??o.summary?.join(`
4
4
  `)??o.content?.join(`
5
- `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:o.text??""}};case "mcp_tool_call":{let u=d(o.result),g=o.status==="failed"||o.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:u,rawOutput:o}}case "command_execution":{let u=o.aggregated_output?[{type:"content",content:{type:"text",text:o.aggregated_output}}]:[],g=o.status==="completed"||o.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:u,rawOutput:o}}case "file_change":{let u=o.changes??[],g=u.map(h=>({path:h.path})),f=u.length===1?`${u[0].kind==="add"?"Create":"Edit"} ${u[0].path}`:`Edit ${u.length} files`;return {sessionUpdate:"tool_call",toolCallId:a,title:f,toolName:"file_change",kind:"edit",status:o.status==="completed"?"completed":"failed",rawInput:{changes:u},content:u.map(h=>({type:"diff",path:h.path,oldText:h.kind==="add"?null:"",newText:""})),locations:g}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function d(o){return o?.content?Array.isArray(o.content)?o.content.map(a=>({type:"content",content:p(a)})):typeof o.content=="string"?[{type:"content",content:{type:"text",text:o.content}}]:[]:[]}function p(o){return o.type==="text"?{type:"text",text:o.text??""}:o.type==="image"?{type:"image",data:o.data??"",mimeType:o.mime_type??o.mimeType??"",uri:o.uri}:o}function l(o){if(!Array.isArray(o))return [];let a=false;return o.map(c=>{let u;return c.completed?u="completed":a?u="pending":(u="in_progress",a=true),{content:c.text??"",status:u,priority:"medium"}})}}var To={applypatch:"edit",apply_patch:"edit",create:"edit",edit:"edit",grep:"search",glob:"search",ls:"search",read:"read",write:"edit",execute:"execute",execute_cli:"execute",fetchurl:"fetch",fetch_url:"fetch",webfetch:"fetch",web_fetch:"fetch",websearch:"fetch",web_search:"fetch",skill:"execute",task:"think",todowrite:"other",todo_write:"other"},_o=new Set(["assistant_text_complete","thinking_text_complete","droid_working_state_changed","permission_resolved","settings_updated","session_title_updated","mcp_status_changed","session_token_usage_changed","mission_state_changed","mission_features_changed","mission_progress_entry","mission_heartbeat","mission_worker_started","mission_worker_completed","mcp_auth_required","mcp_auth_completed","structured_output"]);function ct(){let t=new Map,e,n,r=false,i="",s;return function(p){let l;try{l=JSON.parse(p);}catch{return null}if(!Ur(l))return null;let o=Ro(l);if(o.sessionId&&(e=o.sessionId),o.errorText)return [tn(e,o.errorText,true)];if(o.resultText)return i=o.resultText,r=true,[ae(e,o.resultText)];if(o.handled)return null;let c=Po(l)??l,u=Mr(c);u&&(e=u);let g=[],f=S(c,"type");switch(f){case "system":{let m=S(c,"model");return m&&(n=m),null}case "message":{let m=S(c,"role"),y=S(c,"text")||rn(c.content);if(!y)break;m==="assistant"&&(r=true,i=y,g.push(ae(e,y)));break}case "completion":{let m=S(c,"finalText")||S(c,"result");m&&(!r||m!==i)&&(r=true,i=m,g.push(ae(e,m)));let y=Re(c.usage);y&&g.push({sessionId:e,update:{sessionUpdate:"usage",scope:"run",usage:y}});break}case "assistant_text_delta":{let m=S(c,"textDelta")||S(c,"text");m&&(r=true,i+=m,g.push(ae(e,m)));break}case "thinking_text_delta":{let m=S(c,"textDelta")||S(c,"text");if(m){let y=Ar(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "reasoning":{let m=S(c,"text");if(m){let y=Ar(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "assistant":{let m=S(c,"text")||rn(A(c.message)?.content);m&&(r=true,i=m,g.push(ae(e,m)));break}case "tool_call":case "tool_call_delta":{let m=A(c.toolUse)??A(c.tool_use)??c,y=Or(m,t);y&&g.push({sessionId:e,update:y});break}case "tool_result":{let m=Ao(c,t);m&&g.push({sessionId:e,update:m});break}case "tool_progress_update":case "tool_progress":{let m=Oo(c);m&&g.push({sessionId:e,update:m});break}case "create_message":{for(let m of Io(c,t)){if(m.sessionUpdate==="agent_message_chunk"){let y=m.content.type==="text"?m.content.text:"";if(r&&y===i)continue;r=true,i=y;}g.push({sessionId:e,update:m});}break}case "result":{if(c.is_error===true||c.subtype==="failure"){g.push(tn(e,P([H(c.result),H(c.error),H(c.subtype)],c),true));break}let m=H(c.result??c.text??c.error);m&&(r=true,i=m,g.push(ae(e,m)));break}case "error":{g.push(tn(e,P([H(c.message),H(c.error)],c),false));break}default:if(f&&!_o.has(f))return null}if(g.length>0&&f!=="reasoning"&&f!=="thinking_text_delta"&&(s=void 0),g.length===0)return null;let h=ee(c.timestamp);return g.map(m=>({...m,...h!==void 0?{timestamp:h}:{},...n!==void 0?{model:n}:{}}))}}function Ar(t,e,n){let r=nn(t,"id")||nn(t,"messageId"),i=nn(t,"blockIndex"),s=`${S(t,"type")}:${r}:${i}:${e}`;return s===n?null:{signature:s,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function Ro(t){if(t.type!=="response")return {handled:false};let e=A(t.result),n=A(t.error),r=Mr(e??t);if(n)return {handled:true,sessionId:r,errorText:H(n.message??n)};let i=e?S(e,"finalText")||S(e,"result"):"";return {handled:true,sessionId:r,resultText:i}}function Po(t){return t.method!=="droid.session_notification"?null:A(A(t.params)?.notification)}function Io(t,e){let n=A(t.message);if(!n)return [];let r=[],i=n.content;if(Array.isArray(i))for(let s of i){let d=A(s);if(d&&d.type==="tool_use"){let p=Or(d,e);p&&r.push(p);}}if(n.role==="assistant"){let s=rn(i);s&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:s}});}return r}function Or(t,e){let n=S(t,"id")||S(t,"toolUseId")||S(t,"tool_use_id"),r=S(t,"name")||S(t,"toolName")||S(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let i=A(t.input)??A(t.toolInput)??A(t.arguments)??A(t.parameters)??{};if($r(r)==="todowrite"){let o=Mo(i);if(o)return o}let{title:s,kind:d,content:p,locations:l}=Uo(r,i);return {sessionUpdate:"tool_call",toolCallId:n,title:s,toolName:r,kind:d,status:"pending",rawInput:i,content:p,locations:l}}function Ao(t,e){let n=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!n)return null;let r=S(t,"toolName")||S(t,"tool_name")||e.get(n);return e.delete(n),{sessionUpdate:"tool_call_update",toolCallId:n,status:t.isError===true||t.is_error===true?"failed":"completed",title:r,content:sn(t.content??t.result??t.value??t.error)}}function Oo(t){let e=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!e)return null;let n=A(t.update),r=H(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?sn(r):void 0}}function Mo(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let i=A(r);if(!i)return [];let s=S(i,"content"),d=$o(S(i,"status")),p=Do(S(i,"priority"));return s?[{content:s,status:d,priority:p}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function Uo(t,e){let n=To[$r(t)]||"other",r=S(e,"path")||S(e,"filePath")||S(e,"file_path")||S(e,"absolute_path"),i=S(e,"command"),s=S(e,"url"),d=r||i||s;return {title:d?`${t} ${d}`:t,kind:n,content:Object.keys(e).length>0?sn(e):[],locations:r?[{path:r}]:[]}}function Mr(t){if(t)return S(t,"session_id")||S(t,"sessionId")}function ae(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function tn(t,e,n){return {sessionId:t,update:{sessionUpdate:"error",message:e,fatal:n}}}function rn(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=A(e);return n?S(n,"text")||S(n,"content"):""}).filter(Boolean).join(""):""}function sn(t){let e=H(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function H(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function Ur(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function A(t){return Ur(t)?t:null}function S(t,e){let n=t[e];return typeof n=="string"?n:""}function nn(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function $r(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function $o(t){return t==="in_progress"||t==="completed"?t:"pending"}function Do(t){return t==="high"||t==="low"?t:"medium"}var Bo={read_file:"read",read_many_files:"read",write_file:"edit",replace:"edit",edit_file:"edit",run_shell_command:"execute",shell:"execute",glob:"search",grep:"search",search_file_content:"search",list_directory:"search",brave_web_search:"fetch",web_search:"fetch",google_web_search:"fetch",web_fetch:"fetch",delegate_to_agent:"think",write_todos:"other",save_memory:"other",activate_skill:"other"};function dt(){let t,e;return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=(typeof a.session_id=="string"&&a.session_id?a.session_id:void 0)??e,u=[];switch(a.type){case "init":return typeof a.model=="string"&&a.model&&(t=a.model),typeof a.session_id=="string"&&a.session_id&&(e=a.session_id),null;case "result":{let f=n(a.stats);if(f&&u.push({sessionId:c,update:{sessionUpdate:"usage",scope:"run",usage:f}}),a.status!=="error")break;u.push({sessionId:c,update:{sessionUpdate:"error",message:P([a.error?.message,a.error?.type,'gemini ended the run with result status "error" and no error text'],a.error??a),fatal:true}});break}case "message":{let f=r(a);f&&u.push({sessionId:c,update:f});break}case "tool_use":{let f=i(a);f&&u.push({sessionId:c,update:f});break}case "tool_result":{let f=s(a);f&&u.push({sessionId:c,update:f});break}case "error":{let f=d(a);f&&u.push({sessionId:c,update:f});break}default:return null}if(u.length===0)return null;let g=ee(a.timestamp);return u.map(f=>({...f,...g!==void 0?{timestamp:g}:{},...t!==void 0?{model:t}:{}}))};function n(l){if(!l||typeof l!="object"||Array.isArray(l))return null;let o=l,a=m=>typeof m=="number"&&Number.isFinite(m)?m:void 0,c={},u=a(o.input_tokens),g=a(o.output_tokens),f=a(o.cached);u!==void 0&&(c.promptTokens=u),g!==void 0&&(c.completionTokens=g),f!==void 0&&(c.cachedTokens=f);let h={};for(let[m,y]of Object.entries(o))m==="input_tokens"||m==="output_tokens"||m==="cached"||y!=null&&(h[m]=y);return Object.keys(h).length>0&&(c.extra=h),c}function r(l){let o=l.role,a=l.content;return a?o==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}:o==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:a}}:null:null}function i(l){let o=l.tool_id,a=l.tool_name,c=l.parameters||{},{title:u,kind:g,content:f,locations:h}=p(a,c);return {sessionUpdate:"tool_call",toolCallId:o,title:u,toolName:a,kind:g,status:"pending",rawInput:c,content:f,locations:h}}function s(l){let o=l.tool_id,a=l.status,c=l.output,u=l.error,g=[];return c&&typeof c=="string"&&c.length>0&&g.push({type:"content",content:{type:"text",text:c}}),u?.message&&!c&&g.push({type:"content",content:{type:"text",text:u.message}}),{sessionUpdate:"tool_call_update",toolCallId:o,status:a==="success"?"completed":"failed",content:g}}function d(l){return {sessionUpdate:"error",message:P([l.message],l),fatal:false}}function p(l,o){let a=Bo[l]||"other",c=[],u=[],g=l;switch(l){case "read_file":g=`Read ${o.absolute_path||o.file_path||"file"}`,(o.absolute_path||o.file_path)&&u.push({path:o.absolute_path||o.file_path});break;case "write_file":g=`Write ${o.file_path||"file"}`,o.file_path&&(u.push({path:o.file_path}),c.push({type:"diff",path:o.file_path,oldText:null,newText:o.content||""}));break;case "edit_file":g=`Edit ${o.file_path||"file"}`,o.file_path&&u.push({path:o.file_path});break;case "replace":g=`Edit ${o.file_path||"file"}`,o.file_path&&(u.push({path:o.file_path}),(o.old_string!==void 0||o.new_string!==void 0)&&c.push({type:"diff",path:o.file_path,oldText:o.old_string||"",newText:o.new_string||""}));break;case "run_shell_command":case "shell":g=o.command?`\`${o.command}\``:"Run command",o.description&&c.push({type:"content",content:{type:"text",text:o.description}});break;case "brave_web_search":case "web_search":case "google_web_search":g=o.query?`"${o.query}"`:"Web search";break;case "web_fetch":g=o.prompt?`Fetch: ${o.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":g=`Find ${o.pattern||"files"}`,o.dir_path&&u.push({path:o.dir_path});break;case "grep":case "search_file_content":g=`grep "${o.pattern||o.query||""}"`;break;case "list_directory":g=`List ${o.dir_path||o.path||"directory"}`,(o.dir_path||o.path)&&u.push({path:o.dir_path||o.path});break;case "read_many_files":g=`Read ${o.include?.length||"multiple"} files`,Array.isArray(o.include)&&o.include.forEach(f=>u.push({path:f}));break;case "delegate_to_agent":g=o.agent_name?`Agent: ${o.agent_name}`:"Delegate to agent";break;case "write_todos":g="Update todos";break;case "save_memory":g=o.fact?`Remember: "${o.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":g=o.name?`Activate skill: ${o.name}`:"Activate skill";break;default:g=l;}return {title:g,kind:a,content:c,locations:u}}}var Lo={Read:"read",ReadFile:"read",ReadMediaFile:"read",Write:"edit",WriteFile:"edit",Edit:"edit",StrReplaceFile:"edit",Bash:"execute",Shell:"execute",Glob:"search",Grep:"search",WebSearch:"fetch",SearchWeb:"fetch",FetchURL:"fetch",Agent:"think",AgentSwarm:"think",Task:"think",Think:"think",CreateSubagent:"think",TodoList:"other",SetTodoList:"other"};function Dr(t){return t==="TodoList"||t==="SetTodoList"}function an(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function Lr(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function ln(t){if(!t||typeof t!="object")return null;if(t.type==="text"&&typeof t.text=="string"&&t.text.length>0)return {type:"content",content:{type:"text",text:t.text}};if(t.type==="image_url"&&typeof t.image_url?.url=="string"){let e=t.image_url.url,n=Lr(e);return n?{type:"content",content:{type:"image",data:n.data,mimeType:n.mimeType}}:{type:"content",content:{type:"image",data:"",mimeType:"",uri:e}}}return t.type==="video_url"&&typeof t.video_url?.url=="string"?{type:"content",content:{type:"text",text:`[video] ${t.video_url.url}`}}:t.type==="audio_url"&&typeof t.audio_url?.url=="string"?{type:"content",content:{type:"text",text:`[audio] ${t.audio_url.url}`}}:null}function on(t){let e=[];if(typeof t=="string")return t.length>0&&e.push({type:"content",content:{type:"text",text:t}}),e;if(Array.isArray(t)){for(let n of t){if(typeof n=="string"&&n.length>0){e.push({type:"content",content:{type:"text",text:n}});continue}let r=ln(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=ln(t);n&&e.push(n);}return e}function No(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&an(e.content.text))}function Fo(t){if(!t||typeof t!="object")return null;if(t.type==="think"&&typeof t.think=="string"&&t.think.length>0)return {update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:t.think}}};if(t.type==="text"&&typeof t.text=="string"&&t.text.length>0)return {update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:t.text}}};if(t.type==="image_url"&&typeof t.image_url?.url=="string"){let e=t.image_url.url,n=Lr(e);return n?{update:{sessionUpdate:"agent_message_chunk",content:{type:"image",data:n.data,mimeType:n.mimeType}}}:{update:{sessionUpdate:"agent_message_chunk",content:{type:"image",data:"",mimeType:"",uri:e}}}}return t.type==="video_url"&&typeof t.video_url?.url=="string"?{update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[video] ${t.video_url.url}`}}}:t.type==="audio_url"&&typeof t.audio_url?.url=="string"?{update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[audio] ${t.audio_url.url}`}}}:null}function Ko(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function Br(t){if(!t||typeof t!="object")return [];let e=t.todos;return Array.isArray(e)?e.map(n=>{if(!n||typeof n!="object")return null;let r=n.title;if(typeof r!="string"||r.length===0)return null;let i=n.status;return {content:r,status:Ko(i),priority:"medium"}}).filter(n=>n!==null):[]}function cn(){let t=new Set,e=0;function n(p,l){return typeof p=="string"&&p.length>0?p:(e+=1,`kimi_${l.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.role;return "_meta"in o||"_prompt"in o?null:a==="meta"?o.type!=="turn.step.retrying"?null:[{update:{sessionUpdate:"error",message:P([o.error_message,o.error_name],o),fatal:false}}]:a==="assistant"?r(o):a==="tool"?i(o):typeof o.type=="string"&&"payload"in o?s(o):null};function r(p){let l=[],o=p.content,a=p.tool_calls;if(typeof o=="string"&&o.length>0)l.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}});else if(Array.isArray(o))for(let c of o){let u=Fo(c);u&&l.push(u);}if(Array.isArray(a))for(let c of a){if(!c||typeof c!="object")continue;let u=c.function;if(!u)continue;let g=u.name??"",f=n(c.id,g),h;try{h=u.arguments?JSON.parse(u.arguments):{};}catch{h=u.arguments;}if(Dr(g)){let k=Br(h);k.length>0&&l.push({update:{sessionUpdate:"plan",entries:k}}),t.add(f);continue}let{title:m,kind:y,toolContent:w,locations:b}=d(g,typeof h=="object"&&h!==null?h:{});l.push({update:{sessionUpdate:"tool_call",toolCallId:f,title:m,toolName:g,kind:y,status:"pending",rawInput:h,content:w,locations:b}});}return l.length>0?l:null}function i(p){let l=p.tool_call_id;if(typeof l!="string"||l.length===0)return null;if(t.has(l))return t.delete(l),null;let o=p.content,a=[],c=false;if(typeof o=="string")c=an(o),o.length>0&&a.push({type:"content",content:{type:"text",text:o}});else if(Array.isArray(o))for(let u of o){let g=ln(u);g&&(g.type==="content"&&g.content.type==="text"&&an(g.content.text)&&(c=true),a.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:l,status:c?"failed":"completed",content:a}}]}function s(p){let l=p.type,o=p.payload??{},a=[];switch(l){case "TextPart":{let c=o.text;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}});break}case "ThinkPart":{let c=o.think;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:c}}});break}case "ToolCall":{let c=o.function?.name??"",u=n(o.id,c),g=o.function;if(!g)break;let f;try{f=g.arguments?JSON.parse(g.arguments):{};}catch{f=g.arguments;}if(Dr(c)){let b=Br(f);b.length>0&&a.push({update:{sessionUpdate:"plan",entries:b}}),t.add(u);break}let{title:h,kind:m,toolContent:y,locations:w}=d(c,typeof f=="object"&&f!==null?f:{});a.push({update:{sessionUpdate:"tool_call",toolCallId:u,title:h,toolName:c,kind:m,status:"pending",rawInput:f,content:y,locations:w}});break}case "ToolResult":{let c=o.tool_call_id;if(typeof c!="string"||c.length===0)break;if(t.has(c)){t.delete(c);break}let u=o.return_value??o.content,g=[],f=o.is_error===true;if(u&&typeof u=="object"&&!Array.isArray(u)){let h=u;f=f||h.type==="ToolError"||h.is_error===true,g.push(...on(h.output)),g.length===0&&typeof h.message=="string"&&h.message.length>0&&g.push({type:"content",content:{type:"text",text:h.message}}),g.length===0&&g.push(...on(u));}else g.push(...on(u));f=f||No(g),a.push({update:{sessionUpdate:"tool_call_update",toolCallId:c,status:f?"failed":"completed",content:g}});break}default:return null}return a.length>0?a:null}function d(p,l){let o=Lo[p]||"other",a=[],c=[],u=p;switch(p){case "Read":case "ReadFile":{let g=l.path??l.file_path;u=`Read ${g||"file"}`,g&&c.push({path:g});break}case "ReadMediaFile":{let g=l.path??l.file_path;u=`Read media ${g||"file"}`,g&&c.push({path:g});break}case "Write":case "WriteFile":{let g=l.path??l.file_path;u=`Write ${g||"file"}`,g&&(c.push({path:g}),typeof l.content=="string"&&a.push({type:"diff",path:g,oldText:null,newText:l.content}));break}case "Edit":case "StrReplaceFile":{let g=l.path??l.file_path;u=`Edit ${g||"file"}`,g&&c.push({path:g});break}case "Bash":case "Shell":u=l.command?`\`${l.command}\``:"Run command";break;case "Glob":u=`Find ${l.pattern||"files"}`,l.path&&c.push({path:l.path});break;case "Grep":u=`grep "${l.pattern||""}"`,l.path&&c.push({path:l.path});break;case "WebSearch":case "SearchWeb":u=l.query?`"${l.query}"`:"Web search";break;case "FetchURL":u=l.url?`Fetch ${l.url}`:"Web fetch";break;case "Agent":case "AgentSwarm":case "Task":u=l.description||"Subagent task";break;case "Think":u=l.thought||"Thinking";break;case "CreateSubagent":u=l.name?`Subagent: ${l.name}`:"Create subagent";break;case "TodoList":case "SetTodoList":u="Update todos";break;default:u=p;}return {title:u,kind:o,toolContent:a,locations:c}}}var jo={read:"read",write:"edit",edit:"edit",multiedit:"edit",apply_patch:"edit",bash:"execute",glob:"search",grep:"search",list:"search",codesearch:"search",lsp:"search",webfetch:"fetch",websearch:"fetch",task:"think",batch:"think",plan_enter:"switch_mode",plan_exit:"switch_mode",todoread:"other",todowrite:"other",skill:"other",question:"other"};function Vo(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function Go(t){if(typeof t!="string")return "pending";switch(t.toLowerCase()){case "in_progress":case "in-progress":case "running":return "in_progress";case "completed":case "done":case "cancelled":return "completed";default:return "pending"}}function Jo(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function Nr(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object")return null;let n=e.content;return typeof n!="string"||n.length===0?null:{content:n,status:Go(e.status),priority:Jo(e.priority)}}).filter(e=>e!==null):[]}function zo(t){if(!t||typeof t!="object")return null;let e=t,n=typeof e.mime=="string"?e.mime:"",r=typeof e.url=="string"?e.url:"";if(n.startsWith("image/")){if(r.length>0){let p=Vo(r);return p?{type:"content",content:{type:"image",data:p.data,mimeType:p.mimeType||n}}:{type:"content",content:{type:"image",data:"",mimeType:n,uri:r}}}return null}return {type:"content",content:{type:"text",text:`[attachment] ${(typeof e.filename=="string"?e.filename:"")||"attachment"} (${n||"file"})`}}}function Wo(t,e){if(t==="error")return typeof e.error=="string"?e.error:null;if(typeof e.output=="string")return e.output;if(e.output===void 0||e.output===null)return null;try{return JSON.stringify(e.output)}catch{return String(e.output)}}function Ho(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function dn(){return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.sessionID,c=[];switch(o.type){case "step_start":return null;case "step_finish":{let g=t(o.part);if(!g)return null;c.push({sessionUpdate:"usage",scope:"call",usage:g});break}case "user":{let g=e(o);g&&c.push(g);break}case "text":{let g=n(o);g&&c.push(g);break}case "reasoning":{let g=r(o);g&&c.push(g);break}case "tool_use":{c.push(...i(o));break}case "error":{let g=s(o);g&&c.push(g);break}default:return null}if(c.length===0)return null;let u=ee(o.timestamp);return c.map(g=>({sessionId:a,update:g,...u!==void 0?{timestamp:u}:{}}))};function t(p){if(!p||typeof p!="object")return null;let l=p.tokens;if(!l||typeof l!="object")return null;let o=l,a=typeof o.cache=="object"&&o.cache?o.cache:{},c=k=>typeof k=="number"&&Number.isFinite(k)?k:void 0,u=c(o.input),g=c(o.output),f=c(a.read),h=c(a.write),m=c(o.reasoning),y=c(p.cost),w={};(u!==void 0||f!==void 0)&&(w.promptTokens=(u??0)+(f??0)),g!==void 0&&(w.completionTokens=g),f!==void 0&&(w.cachedTokens=f),y!==void 0&&y>0&&(w.costUsd=y);let b={};return m&&(b.reasoning_tokens=m),h&&(b.cache_write_tokens=h),Object.keys(b).length>0&&(w.extra=b),w}function e(p){let o=(Array.isArray(p.parts)?p.parts:[]).filter(a=>a&&typeof a=="object"&&a.type==="text"&&typeof a.text=="string"&&a.text).map(a=>a.text).join(`
6
- `);return o.length===0?null:{sessionUpdate:"user_message_chunk",content:{type:"text",text:o}}}function n(p){let l=p.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}}function r(p){let l=p.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:l}}}function i(p){let l=p.part;if(!l)return [];let o=typeof l.callID=="string"?l.callID:"";if(o.length===0)return [];let a=typeof l.tool=="string"?l.tool:"",c=a.toLowerCase(),u=typeof l.state=="object"&&l.state?l.state:{},g=typeof u.input=="object"&&u.input?u.input:{},f=u.status,h=u.title??u.metadata?.description??c,m=u.metadata?.exit,{kind:y,content:w,locations:b}=d(c,g),k=[];if(k.push({sessionUpdate:"tool_call",toolCallId:o,title:h,toolName:a,kind:y,status:"pending",rawInput:g,content:w,locations:b}),c==="todowrite"){let E=Nr(g.todos);if(E.length===0&&typeof u.output=="string")try{E=Nr(JSON.parse(u.output));}catch{}E.length>0&&k.push({sessionUpdate:"plan",entries:E});}let C=Ho(f,m);if(C==="pending")return k;let v=Wo(f,u),x=[];if(typeof v=="string"&&v.length>0&&x.push({type:"content",content:{type:"text",text:v}}),Array.isArray(u.attachments))for(let E of u.attachments){let I=zo(E);I&&x.push(I);}return k.push({sessionUpdate:"tool_call_update",toolCallId:o,status:C,content:x,rawOutput:u}),k}function s(p){return {sessionUpdate:"error",message:P([p.error?.data?.message,p.error?.message,p.error?.name],p.error??p),fatal:false}}function d(p,l){let o=jo[p]||"other",a=[],c=[];switch(p){case "read":{let u=l.filePath??l.path;if(u){let g=l.offset;c.push({path:u,line:typeof g=="number"&&Number.isFinite(g)?Math.max(0,g-1):void 0});}break}case "write":{let u=l.filePath??l.path;u&&(c.push({path:u}),typeof l.content=="string"&&a.push({type:"diff",path:u,oldText:null,newText:l.content}));break}case "edit":case "multiedit":{let u=l.filePath??l.path;u&&(c.push({path:u}),p==="edit"&&(l.oldString!==void 0||l.newString!==void 0)&&a.push({type:"diff",path:u,oldText:l.oldString??"",newText:l.newString??""}));break}case "apply_patch":break;case "bash":{let u=l.command;u&&l.description?a.push({type:"content",content:{type:"text",text:l.description}}):u&&a.push({type:"content",content:{type:"text",text:u}});break}case "glob":case "list":{let u=l.path;u&&c.push({path:u});break}case "grep":{let u=l.path;u&&c.push({path:u});break}case "codesearch":case "websearch":{let u=l.query;u&&a.push({type:"content",content:{type:"text",text:u}});break}case "webfetch":{let u=l.url;u&&a.push({type:"content",content:{type:"text",text:u}});break}case "task":{let u=l.description;u&&a.push({type:"content",content:{type:"text",text:u}});break}}return {kind:o,content:a,locations:c}}}var qo={Read:"read",read_file:"read",Write:"edit",Edit:"edit",write_file:"edit",edit_file:"edit",Bash:"execute",BashOutput:"execute",KillShell:"execute",shell:"execute",run_shell_command:"execute",WebFetch:"fetch",WebSearch:"fetch",brave_web_search:"fetch",Glob:"search",Grep:"search",LS:"search",list_directory:"search",Task:"think",TodoWrite:"other",ExitPlanMode:"switch_mode"};function ut(){let t=new Map,e=new Map;return function(c){let u;try{u=JSON.parse(c);}catch{return null}if(!u||typeof u!="object")return null;let g=u;if("_meta"in g||"_prompt"in g)return null;let f=g.session_id||void 0,h=[];switch(g.type){case "assistant":{let v=g;h.push(...r(v));let x=n(v.message?.usage);x&&h.push({sessionUpdate:"usage",scope:"call",usage:x});break}case "stream_event":{h.push(...i(g));break}case "user":{h.push(...s(g));break}case "system":return null;case "result":{let v=n(g.usage);if(v&&h.push({sessionUpdate:"usage",scope:"run",usage:v}),g.is_error!==true)break;let x=g.error;h.push({sessionUpdate:"error",message:P([x?.message,g.subtype],g.error??g),fatal:true});break}default:return null}if(h.length===0)return null;let m=g.message,y=typeof m?.model=="string"&&m.model?m.model:void 0,w=typeof m?.id=="string"&&m.id?m.id:void 0,b=typeof g.parent_tool_use_id=="string"&&g.parent_tool_use_id?g.parent_tool_use_id:void 0,k=m?.stop_reason,C=k!=null?{stop_reason:k}:void 0;return h.map(v=>({sessionId:f,update:v,...y!==void 0?{model:y}:{},...w!==void 0?{messageId:w}:{},...b!==void 0?{parentToolCallId:b}:{},...C!==void 0?{extra:C}:{}}))};function n(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let c=a,u=w=>typeof w=="number"&&Number.isFinite(w)?w:void 0,g={},f=u(c.input_tokens),h=u(c.output_tokens),m=u(c.cache_read_input_tokens);f!==void 0&&(g.promptTokens=f),h!==void 0&&(g.completionTokens=h),m!==void 0&&(g.cachedTokens=m);let y={};for(let[w,b]of Object.entries(c))w==="input_tokens"||w==="output_tokens"||w==="cache_read_input_tokens"||b!=null&&(y[w]=b);return Object.keys(y).length>0&&(g.extra=y),g}function r(a){let c=[],u=a.message?.content;if(!Array.isArray(u))return c;for(let g of u){let f=d(g);c.push(...f);}return c}function i(a){let c=[],u=a.event;if(!u)return c;switch(u.type){case "content_block_start":{let g=u.index??0,f=u.content_block;f&&(t.set(g,f),f.type==="tool_use"&&e.set(g,""));break}case "content_block_delta":{let g=u.index??0,f=u.delta,h=t.get(g);if(f?.type==="text_delta"&&f.text)c.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.text}});else if(f?.type==="thinking_delta"&&f.thinking)c.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:f.thinking}});else if(f?.type==="input_json_delta"&&f.partial_json&&h?.type==="tool_use"){let m=e.get(g)||"";e.set(g,m+f.partial_json);}break}case "content_block_stop":{let g=u.index??0,f=t.get(g);if(f&&!(f.type==="text"&&f.text)){if(!(f.type==="thinking"&&f.thinking)){if(f.type==="tool_use"){let h=f,m=e.get(g)||"";e.delete(g);let y=h.input;if(m)try{y=JSON.parse(m);}catch{}let w={...h,input:y},b=p(w);b&&c.push(b);}else if(f.type==="tool_result"){let h=l(f);h&&c.push(h);}}}t.delete(g);break}}return c}function s(a){let c=a.message?.content,u=[];if(typeof c=="string")return u.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:c}}),u;if(Array.isArray(c)){for(let g of c)if(g.type==="text")u.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:g.text}});else if(g.type==="tool_result"){let f=l(g);f&&u.push(f);}}return u}function d(a){switch(a.type){case "text":return a.text?[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a.text}}]:[];case "thinking":return a.thinking?[{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:a.thinking}}]:[];case "tool_use":{let c=p(a);return c?[c]:[]}case "tool_result":{let c=l(a);return c?[c]:[]}}}function p(a){let c=a.id,u=a.name,g=a.input;if(u==="TodoWrite"&&Array.isArray(g?.todos))return {sessionUpdate:"plan",entries:g.todos.map(w=>({content:w.content,status:w.status||"pending",priority:"medium"}))};let{title:f,kind:h,content:m,locations:y}=o(u,g||{});return {sessionUpdate:"tool_call",toolCallId:c,title:f,toolName:u,kind:h,status:"pending",rawInput:g,content:m,locations:y}}function l(a){let c=a.tool_use_id,u=a.is_error??false,g=a.content,f=[];if(typeof g=="string"&&g.length>0)f.push({type:"content",content:{type:"text",text:g}});else if(Array.isArray(g))for(let h of g)h.type==="text"&&f.push({type:"content",content:{type:"text",text:h.text}});return {sessionUpdate:"tool_call_update",toolCallId:c,status:u?"failed":"completed",content:f}}function o(a,c){let u=qo[a]||"other",g=[],f=[],h=a;switch(a){case "Read":case "read_file":h=`Read ${c.file_path||c.absolute_path||"file"}`,(c.file_path||c.absolute_path)&&f.push({path:c.file_path||c.absolute_path});break;case "Write":case "write_file":h=`Write ${c.file_path||"file"}`,c.file_path&&(f.push({path:c.file_path}),g.push({type:"diff",path:c.file_path,oldText:null,newText:c.content||""}));break;case "Edit":case "edit_file":h=`Edit ${c.file_path||"file"}`,c.file_path&&f.push({path:c.file_path});break;case "Bash":case "shell":case "run_shell_command":h=c.command?`\`${c.command}\``:"Run command",c.description&&g.push({type:"content",content:{type:"text",text:c.description}});break;case "WebFetch":h=c.url?`Fetch ${c.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":h=c.query?`"${c.query}"`:"Web search";break;case "Glob":h=`Find ${c.pattern||"files"}`,c.path&&f.push({path:c.path});break;case "Grep":h=`grep "${c.pattern||""}"`;break;case "LS":case "list_directory":h=`List ${c.path||"directory"}`,c.path&&f.push({path:c.path});break;case "Task":h=c.description||"Subagent task";break;case "TodoWrite":h="Update todos";break;case "ExitPlanMode":h="Exit plan mode";break;default:h=a;}return {title:h,kind:u,content:g,locations:f}}}function Fr(t){return ut()(t)}function ne(t){switch(t){case "claude":return at();case "codex":return lt();case "gemini":return dt();case "qwen":return ut();case "kimi":return cn();case "opencode":return dn();case "droid":return ct();default:return ()=>null}}function Yo(t,e){let n=e.trim();return n?ne(t)(n):null}function Zo(t,e){let n=[],r=e.split(`
7
- `),i=ne(t);for(let s of r){let d=s.trim();if(!d)continue;let p=i(d);p&&n.push(...p);}return n}var sa=promisify(execFile),Y="SKILL.md",oa=join(homedir(),".cache","evolve","skills"),hn=["skills","skills/.curated","skills/.experimental","skills/.system",".claude/skills"],aa=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)(?:@(.+))?$/,la=/^[0-9a-f]{40}$/,pn=2e3,gn=64*1024*1024,N=class extends Error{constructor(e){super(e),this.name="SkillRefError";}},U=class extends Error{constructor(e){super(e),this.name="SkillResolveError";}};function ca(t){return t==="~"?homedir():t.startsWith("~/")?join(homedir(),t.slice(2)):t}function da(t){let e=t.indexOf("@");if(e===-1)return {base:t};let n=t.slice(e+1);if(!n)throw new N(`Empty @ref in skill reference segment: ${JSON.stringify(t)}`);return {base:t.slice(0,e),gitRef:n}}var ua=/^[A-Za-z0-9._-]+$/;function gt(t,e,n){if(!ua.test(t))throw new N(`Cannot parse skill reference ${JSON.stringify(n)}: ${e} ${JSON.stringify(t)} may only contain letters, digits, ".", "_" and "-".`);return t}function yn(t){let e=String(t??"").trim();if(!e)throw new N("Skill reference cannot be empty.");if(e.startsWith("upload:")){let s=e.slice(7);if(!s)throw new N(`Skill upload reference ${JSON.stringify(e)} names no upload id.`);return {kind:"upload",id:s,raw:e}}if(e.startsWith("name:")){let s=e.slice(5);if(!s)throw new N(`Skill name reference ${JSON.stringify(e)} names no skill.`);return gt(s,"skill name",e),{kind:"name",name:s,raw:e}}if(e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~"))return {kind:"local",path:ca(e),raw:e};let n=e.match(/^(?:https?:\/\/)?(?:www\.)?skills\.sh\/(.+)$/);if(n){let d=n[1].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2||d.length>3)throw new N(`Cannot parse skill reference ${JSON.stringify(e)}: expected skills.sh/<owner>/<repo> or skills.sh/<owner>/<repo>/<skill>, optionally @ref.`);let{base:p,gitRef:l}=da(d[d.length-1]);d[d.length-1]=p;let[o,a,c]=d;return gt(o,"owner",e),gt(a,"repo",e),c!==void 0&&gt(c,"skill name",e),{kind:"git",host:"github.com",org:o,repo:a,...l?{gitRef:l}:{},...c?{skillName:c}:{},viaSkillsSh:true,raw:e}}let r=e.match(/^https?:\/\/([^/]+)\/(.+)$/);if(r){let s=r[1],d=r[2].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2)throw new N(`Git URL must have at least org/name in the path: ${JSON.stringify(e)}`);let p=d[0],l=d[1].replace(/\.git$/,""),o,a;return d.length>=4&&d[2]==="tree"&&(o=d[3],d.length>4&&(a=d.slice(4).join("/"))),{kind:"git",host:s,org:p,repo:l,...o?{gitRef:o}:{},...a?{subdir:a}:{},viaSkillsSh:false,raw:e}}let i=e.match(aa);if(i)return {kind:"git",host:"github.com",org:i[1],repo:i[2],...i[3]?{gitRef:i[3]}:{},viaSkillsSh:false,raw:e};throw new N(`Cannot parse skill reference ${JSON.stringify(e)}. Expected skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], an https git URL, or a local folder path (prefix relative paths with './').`)}function wn(t){return `https://${t.host}/${t.org}/${t.repo}.git`}function le(t){return `https://${t.host}/${t.org}/${t.repo}`}async function q(t,e){try{let{stdout:n}=await sa("git",t,{cwd:e.cwd,timeout:e.timeoutMs,env:e.gitEnv??process.env,maxBuffer:16777216});return n}catch(n){let r=n,i=(r.stderr||r.message||"").trim();throw new U(`git ${t[0]} failed${r.killed?" (timed out)":""}: ${i}`)}}async function vn(t,e={}){if(t.gitRef&&la.test(t.gitRef))return t.gitRef;let n=t.gitRef??"HEAD",i=(await q(["ls-remote",wn(t),n,`${n}^{}`],{timeoutMs:e.lsRemoteTimeoutMs??3e4,gitEnv:e.gitEnv})).trim().split(`
8
- `).filter(p=>p.length>0).map(p=>{let[l,o]=p.split(" ");return {sha:l,name:o}});if(i.length===0||!i[0].sha)throw new U(`No matching ref ${JSON.stringify(n)} found in ${le(t)}`);let s=i[0];return (i.find(p=>p.name===`${s.name}^{}`)??s).sha}async function pa(t,e={}){let n=yn(t);if(n.kind!=="git")return {ref:n.raw};let r=await vn(n,e),i;return n.viaSkillsSh?i=`skills.sh/${n.org}/${n.repo}${n.skillName?`/${n.skillName}`:""}@${r}`:n.subdir!==void 0||n.raw.includes("://")?i=`https://${n.host}/${n.org}/${n.repo}/tree/${r}${n.subdir?`/${n.subdir}`:""}`:i=`${n.org}/${n.repo}@${r}`,{ref:i,gitUrl:le(n),gitCommit:r}}async function fn(t){let e=[],n=async i=>{let s=i===""?t:join(t,i),d=await readdir(s,{withFileTypes:true});for(let p of d){let l=i===""?p.name:`${i}/${p.name}`;p.isDirectory()?await n(l):p.isFile()&&e.push(l);}};await n(""),e.sort();let r=createHash("sha256");for(let i of e){let s=createHash("sha256").update(await readFile(join(t,i))).digest("hex");r.update(i),r.update("\0"),r.update(s),r.update("\0");}return `sha256:${r.digest("hex")}`}async function Pe(t){try{return (await stat(t)).isFile()}catch{return false}}async function bn(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function Vr(t,e){if(!await bn(t))throw new U(`Skill path does not exist or is not a directory: ${e}`);if(await Pe(join(t,Y)))return [t];let r=(await readdir(t,{withFileTypes:true})).filter(d=>d.isDirectory()&&!d.name.startsWith(".")).map(d=>d.name).sort(),i=[],s=[];for(let d of r)await Pe(join(t,d,Y))?s.push(join(t,d)):i.push(d);if(i.length>0)throw new U(`Skill root ${e} contains child directories without ${Y}: ${i.join(", ")}`);if(s.length===0)throw new U(`Skill path ${e} must be a skill directory containing ${Y}, or a root whose immediate child directories each contain ${Y}.`);return s}async function ga(t){let e=new Map;await Pe(join(t,Y))&&e.set(basename(t),t);for(let n of hn){let r=join(t,n);if(!await bn(r))continue;let i=await readdir(r,{withFileTypes:true});for(let s of i.sort((d,p)=>d.name<p.name?-1:1)){if(!s.isDirectory()||s.name.startsWith("."))continue;let d=join(r,s.name);await Pe(join(d,Y))&&e.set(s.name,d);}}return Array.from(e,([n,r])=>({dir:r,name:n}))}function fa(t){return t.cacheDir??process.env.EVOLVE_SKILLS_CACHE??oa}async function ma(t,e,n){let r=join(fa(n),t.host,t.org,t.repo,e),i=join(r,t.repo),s=join(r,".evolve-complete");if(await Pe(s)&&await bn(i))return i;await mkdir(dirname(r),{recursive:true});let d=await mkdtemp(`${r}.tmp-`),p=join(d,t.repo),l=n.checkoutTimeoutMs??12e4,o={cwd:p,timeoutMs:l,gitEnv:n.gitEnv};try{await mkdir(p),await q(["init","--quiet"],o),await q(["remote","add","origin",wn(t)],o),t.subdir?(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",t.subdir],o)):(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",...hn],o)),await q(["fetch","--quiet","--depth=1","origin",e],o),await q(["checkout","--quiet","FETCH_HEAD"],o),await rm(join(p,".git"),{recursive:!0,force:!0}),await writeFile(join(d,".evolve-complete"),""),await rm(r,{recursive:!0,force:!0});try{await rename(d,r);}catch{await rm(d,{recursive:!0,force:!0});}return i}catch(a){throw await rm(d,{recursive:true,force:true}),a}}async function Gr(t,e){let n=0,r=0,i=async s=>{let d=await readdir(s,{withFileTypes:true});for(let p of d){let l=join(s,p.name);if(p.isDirectory())await i(l);else if(p.isFile()&&(n+=1,r+=(await stat(l)).size,n>pn||r>gn))throw new U(`Skill ${e} exceeds the size ceiling (${pn} files / ${gn} bytes) \u2014 a skill is instructions, not a dataset.`)}};await i(t);}async function kn(t,e={}){let n=new Map;for(let r of t){let i=yn(r);if(i.kind==="upload")throw new U(`Skill reference ${JSON.stringify(i.raw)} is a platform upload handle; only the hosted platform can resolve it. Use a skills.sh/git reference or a local folder here.`);if(i.kind==="name")throw new U(`Skill reference ${JSON.stringify(i.raw)} is a platform skill name \u2014 a moving pointer only the hosted platform can resolve (server-side, at job create). Use a skills.sh/git reference or a local folder here.`);if(i.kind==="local"){let l=await Vr(i.path,i.raw);for(let o of l)await Gr(o,i.raw),n.set(basename(o),{name:basename(o),dir:o,source:i.raw,digest:await fn(o)});continue}let s=await vn(i,e),d=await ma(i,s,e),p;if(i.subdir)p=(await Vr(join(d,i.subdir),`${i.raw} (${i.subdir})`)).map(o=>({dir:o,name:basename(o)}));else if(p=await ga(d),p.length===0)throw new U(`No skills found in ${le(i)}@${s.slice(0,12)}: expected ${Y} at the repo root or under ${hn.join(", ")}.`);if(i.skillName){let l=p.filter(o=>o.name===i.skillName);if(l.length===0)throw new U(`Skill ${JSON.stringify(i.skillName)} not found in ${le(i)}@${s.slice(0,12)}. Available: ${p.map(o=>o.name).sort().join(", ")||"(none)"}`);p=l;}for(let{dir:l,name:o}of p)await Gr(l,i.raw),n.set(o,{name:o,dir:l,source:i.raw,gitUrl:le(i),gitCommit:s,digest:await fn(l)});}return Array.from(n.values()).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0)}function ft(t){return `'${t.replace(/'/g,"'\\''")}'`}async function Sn(t,e,n){if(e.length===0)return;let{tarGzipDirectory:r}=await import('./tar-GVC4KE52.js');await t.files.makeDir(n);for(let i of e){let s=await r(i.dir),d=`${n}/.evolve-skill-${i.name}.tgz`,p=`${n}/${i.name}`;await t.files.write(d,s),await t.commands.run(`mkdir -p ${ft(p)} && tar -xzf ${ft(d)} -C ${ft(p)} && rm -f ${ft(d)}`,{timeoutMs:6e4});}}function F(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function ce(t){return JSON.stringify(ha(t,{target:"jsonSchema7"}),null,2)}function de(t){return JSON.stringify(t,null,2)}function Jr(t,e=false){let n={};function r(i,s){for(let d of j.readdirSync(i)){let p=K.join(i,d),l=s?`${s}/${d}`:d;j.statSync(p).isDirectory()?e&&r(p,l):n[l]=j.readFileSync(p);}}return r(t,""),n}function zr(t,e){let n=K.resolve(t),r=n.endsWith(K.sep)?n:n+K.sep;for(let[i,s]of Object.entries(e)){let d=K.resolve(n,i);if(!d.startsWith(r))throw new Error(`Unsafe file path escapes target directory: ${i}`);let p=K.dirname(d);j.mkdirSync(p,{recursive:true});let l;s instanceof ArrayBuffer||s instanceof Uint8Array?l=Buffer.from(s):l=s,j.writeFileSync(d,l);}}var _=class extends Error{field;constructor(e,n){super(n),this.name="EvolveConfigError",this.field=e;}};function xn(t){return typeof t=="string"&&t.trim()!==""}function ue(t){return t==null?String(t):JSON.stringify(t)}function Ie(t){if(!t)return;if(t.type!==void 0&&!Gt(t.type))throw new _("type",`Evolve agent config: unknown agent type ${ue(t.type)}. Valid types: ${Object.keys($).join(", ")}.`);let e=t.type??m;if(t.model!==void 0&&!xn(t.model))throw new _("model",`Evolve agent config: "model" is empty (${ue(t.model)}). Pass a model id such as "${D(e).defaultModel}", or omit model entirely to use ${e}'s default.`);if(t.config!==void 0){if(!Zr(e))throw new _("config",`Evolve agent config: agent "${e}" does not support a native config. Agents with native-config support: ${Qr().join(", ")}.`);let n=t.config;if(typeof n=="string"){if(!xn(n))throw new _("config",`Evolve agent config: "config" is an empty path (${ue(n)}). Pass a local settings file path or an inline JSON object.`)}else if(!yt(n))throw new _("config",`Evolve agent config: "config" must be a local file path or a JSON object, received ${ue(n)}.`)}t.preset!==void 0&&Cn(e,t.preset);}function Cn(t,e){if(!Kt.includes(e))throw new _("preset",`Evolve agent config: unknown preset ${ue(e)}. Valid presets: ${Kt.join(", ")}.`);let n=Yr(e);if(!n.includes(t))throw new _("preset",`Evolve agent config: agent "${t}" cannot guarantee preset "${e}". Agents that can: ${n.join(", ")}.`)}function qr(t){let e=$[t]?.presets;return e?Object.keys(e):[]}function Yr(t){return Object.keys($).filter(e=>qr(e).includes(t))}function wt(t,e){let n={...t};for(let[r,i]of Object.entries(e)){let s=n[r];if(yt(s)&&yt(i))n[r]=wt(s,i);else if(Array.isArray(s)&&Array.isArray(i)){let d=[...s];for(let p of i)d.some(l=>pe(l)===pe(p))||d.push(p);n[r]=d;}else n[r]=i;}return n}function yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Zr(t){return $[t]?.nativeConfig!==void 0}function Qr(){return Object.keys($).filter(Zr)}function wa(t,e){if(e===void 0)return;let n=$[t]?.nativeConfig;if(!n)throw new _("config",`Evolve agent config: agent "${t}" does not support a native config. Agents with native-config support: ${Qr().join(", ")}.`);let r;if(typeof e=="string"){let i=e.replace(/^~/,process.env.HOME||"");if(!j.existsSync(i))throw new _("config",`Agent config file not found: ${i}`);let s=j.readFileSync(i,"utf-8");try{r=n.format==="toml"?parse(s):JSON.parse(s);}catch(d){throw new _("config",`Invalid ${t} config file ${e}: ${d.message}`)}}else {let i;try{i=JSON.parse(JSON.stringify(e));}catch(s){throw new _("config",`Invalid inline ${t} config: not JSON-serializable: ${s.message}`)}if(JSON.stringify(i)!==JSON.stringify(e))throw new _("config",`Invalid inline ${t} config: expected a JSON object that can be represented without conversion`);r=i;}if(!yt(r))throw new _("config",`Invalid ${t} config: expected a ${n.format==="toml"?"TOML table":"JSON object"}.`);if(n.format==="toml"){let i;try{i=parse(stringify(r));}catch(s){throw new _("config",`Invalid ${t} config for TOML conversion: ${s.message}`)}if(pe(i)!==pe(r))throw new _("config",`Invalid ${t} config: the document cannot be represented losslessly as TOML (TOML has no null and no mixed-type arrays)`)}return r}function pe(t){return Array.isArray(t)?`[${t.map(pe).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).sort(([n],[r])=>n<r?-1:n>r?1:0).map(([n,r])=>`${JSON.stringify(n)}:${pe(r)}`).join(",")}}`:JSON.stringify(t)??"null"}function En(t){if(!t||!xn(t.prompt))throw new _("prompt",`run() requires a non-empty "prompt" string, received ${ue(t?.prompt)}.`)}function Tn(t){if(t){for(let e of x)if(e in t)throw new _(`observability.${e}`,`Evolve observability metadata: "${e}" is reserved for session identity and would split this run across two dashboard sessions. Reserved keys: ${x.join(", ")}. Use a different key, or set the session tag with .withSessionTagPrefix().`)}}function vt(t){if(t.externalGateway){if(t.providerApiKey||t.providerBaseUrl||t.oauthToken)throw new Error("externalGateway cannot be combined with providerApiKey/providerBaseUrl/oauthToken (direct mode)");if(t.apiKey)throw new Error("externalGateway cannot be combined with apiKey (Evolve gateway mode)")}}function va(t){let e=t.replace(/^~/,process.env.HOME||"");if(!j.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return j.readFileSync(e,"utf-8")}function Hr(t,e,n){if(!e.providerEnvMap||!n)return;let r=n.indexOf("/");if(r<=0)return;let i=n.slice(0,r);if(!(e.providerEnvMap[i]||!oe(e,n)))throw new _("model",`Model "${n}" is served through the Evolve gateway only: the ${t} agent holds no ${i} key in direct mode. Set ${h} (or apiKey) to run it through the gateway, or pick a model whose route has a direct-mode key (${Object.keys(e.providerEnvMap).join(", ")}).`)}function bt(t){let e=t?.type??m,n=D(e),r=wa(e,t?.config);t?.preset!==void 0&&Cn(e,t.preset);let i={...r!==void 0?{config:r}:{},...t?.preset!==void 0?{preset:t.preset}:{}};if(t?.externalGateway){vt(t);let{apiKey:l,baseUrl:o,revoke:a}=t.externalGateway;if(!l||!o||typeof a!="function")throw new Error("externalGateway requires apiKey, baseUrl, and a revoke() function");return {type:e,apiKey:l,baseUrl:o,isDirectMode:true,externalGateway:{revoke:a},model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.oauthToken){if(e!=="claude")throw new Error(`oauthToken is only supported for claude agent (Claude Max subscription), not ${e}. Use providerApiKey for ${e} instead.`);return {type:e,apiKey:t.oauthToken,isDirectMode:true,isOAuth:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.providerApiKey){Hr(e,n,t.model);let l=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,o=t.providerBaseUrl??l??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:o,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i};let s=process.env[h];if(s)return {type:e,apiKey:s,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i};if(n.providerEnvMap){let o=(t?.model??n.defaultModel)?.split("/")[0],a=o?n.providerEnvMap[o]:void 0,c=a?process.env[a.keyEnv]:void 0;if(c){let g=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:c,baseUrl:g,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let d=process.env[n.apiKeyEnv];if(d){Hr(e,n,t?.model);let o=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:d,baseUrl:o,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}if(n.oauthEnv){let l=process.env[n.oauthEnv];if(l){if(n.oauthFileName){let o=va(l);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:o,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}return {type:e,apiKey:l,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let p=n.oauthEnv?n.oauthFileName?`, or ${n.oauthEnv}`:`, oauthToken, or ${n.oauthEnv}`:"";throw new Error(`No API key found for ${e}. Set apiKey (gateway), providerApiKey (direct)${p}, or ${h} / ${n.apiKeyEnv} env var.`)}function ba(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}var ti=new WeakSet;function _n(t){return ti.add(t),t}function fe(t){return ti.has(t)}function Xr(t,e){return new Error(`${h} is set but ${t} failed to load.
9
- Try installing: ${e}`)}function ei(t){return t.message?.includes("Cannot find module")||t.message?.includes("MODULE_NOT_FOUND")}function Rn(t,e){if(!e||e.timeoutMs===void 0&&e.resources===void 0)return t;let n=t.create.bind(t);return t.create=(r={})=>n({...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},...e.resources!==void 0?{resources:e.resources}:{},...r}),t}async function Ae(t,e$1="e2b",n){let r=t||process.env[h];if(!r)throw new Error(`${h} is required for Evolve-managed sandbox features`);if(!c.includes(e$1))throw new Error(`Unknown managed sandbox provider "${e$1}". Supported: ${c.join(", ")}`);if(e$1==="daytona")try{let{createDaytonaProvider:i}=await import('@evolvingmachines/daytona');return Rn(_n(i({apiKey:r,apiUrl:d("daytona"),managedToolboxUrl:e()})),n)}catch(i){let s=i;throw ei(s)?Xr("@evolvingmachines/daytona","npm install @evolvingmachines/daytona"):s}if(e$1==="modal"){let{ManagedModalProvider:i}=await import('./managed-modal-IJW62SSK.js');return Rn(_n(new i({apiKey:r,baseUrl:d("modal")})),n)}try{let{createE2BProvider:i}=await import('@evolvingmachines/e2b');return Rn(_n(i({apiKey:ba(r),apiUrl:f()})),n)}catch(i){let s=i;throw ei(s)?Xr("@evolvingmachines/e2b","npm install @evolvingmachines/evolve"):s}}function ka(t="e2b",e){let n=typeof e=="string"?{apiKey:e}:e??{},{apiKey:r,...i}=n;return Ae(r,t,i)}async function Pn(){let t=process.env[i];if(t)try{let{createE2BProvider:s}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===f()&&delete process.env.E2B_API_URL,s({apiKey:t})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${i} is set but @evolvingmachines/e2b failed to load.
5
+ `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:o.text??""}};case "mcp_tool_call":{let p=d(o.result),g=o.status==="failed"||o.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:p,rawOutput:o}}case "command_execution":{let p=o.aggregated_output?[{type:"content",content:{type:"text",text:o.aggregated_output}}]:[],g=o.status==="completed"||o.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:p,rawOutput:o}}case "file_change":{let p=o.changes??[],g=p.map(h=>({path:h.path})),f=p.length===1?`${p[0].kind==="add"?"Create":"Edit"} ${p[0].path}`:`Edit ${p.length} files`;return {sessionUpdate:"tool_call",toolCallId:a,title:f,toolName:"file_change",kind:"edit",status:o.status==="completed"?"completed":"failed",rawInput:{changes:p},content:p.map(h=>({type:"diff",path:h.path,oldText:h.kind==="add"?null:"",newText:""})),locations:g}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function d(o){return o?.content?Array.isArray(o.content)?o.content.map(a=>({type:"content",content:u(a)})):typeof o.content=="string"?[{type:"content",content:{type:"text",text:o.content}}]:[]:[]}function u(o){return o.type==="text"?{type:"text",text:o.text??""}:o.type==="image"?{type:"image",data:o.data??"",mimeType:o.mime_type??o.mimeType??"",uri:o.uri}:o}function l(o){if(!Array.isArray(o))return [];let a=false;return o.map(c=>{let p;return c.completed?p="completed":a?p="pending":(p="in_progress",a=true),{content:c.text??"",status:p,priority:"medium"}})}}var Ao={applypatch:"edit",apply_patch:"edit",create:"edit",edit:"edit",grep:"search",glob:"search",ls:"search",read:"read",write:"edit",execute:"execute",execute_cli:"execute",fetchurl:"fetch",fetch_url:"fetch",webfetch:"fetch",web_fetch:"fetch",websearch:"fetch",web_search:"fetch",skill:"execute",task:"think",todowrite:"other",todo_write:"other"},Oo=new Set(["assistant_text_complete","thinking_text_complete","droid_working_state_changed","permission_resolved","settings_updated","session_title_updated","mcp_status_changed","session_token_usage_changed","mission_state_changed","mission_features_changed","mission_progress_entry","mission_heartbeat","mission_worker_started","mission_worker_completed","mcp_auth_required","mcp_auth_completed","structured_output"]);function ct(){let t=new Map,e,n,r=false,i="",s;return function(u){let l;try{l=JSON.parse(u);}catch{return null}if(!Lr(l))return null;let o=Mo(l);if(o.sessionId&&(e=o.sessionId),o.errorText)return [nn(e,o.errorText,true)];if(o.resultText)return i=o.resultText,r=true,[ae(e,o.resultText)];if(o.handled)return null;let c=$o(l)??l,p=Br(c);p&&(e=p);let g=[],f=S(c,"type");switch(f){case "system":{let m=S(c,"model");return m&&(n=m),null}case "message":{let m=S(c,"role"),y=S(c,"text")||sn(c.content);if(!y)break;m==="assistant"&&(r=true,i=y,g.push(ae(e,y)));break}case "completion":{let m=S(c,"finalText")||S(c,"result");m&&(!r||m!==i)&&(r=true,i=m,g.push(ae(e,m)));let y=Re(c.usage);y&&g.push({sessionId:e,update:{sessionUpdate:"usage",scope:"run",usage:y}});break}case "assistant_text_delta":{let m=S(c,"textDelta")||S(c,"text");m&&(r=true,i+=m,g.push(ae(e,m)));break}case "thinking_text_delta":{let m=S(c,"textDelta")||S(c,"text");if(m){let y=Ur(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "reasoning":{let m=S(c,"text");if(m){let y=Ur(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "assistant":{let m=S(c,"text")||sn(A(c.message)?.content);m&&(r=true,i=m,g.push(ae(e,m)));break}case "tool_call":case "tool_call_delta":{let m=A(c.toolUse)??A(c.tool_use)??c,y=Dr(m,t);y&&g.push({sessionId:e,update:y});break}case "tool_result":{let m=Do(c,t);m&&g.push({sessionId:e,update:m});break}case "tool_progress_update":case "tool_progress":{let m=Bo(c);m&&g.push({sessionId:e,update:m});break}case "create_message":{for(let m of Uo(c,t)){if(m.sessionUpdate==="agent_message_chunk"){let y=m.content.type==="text"?m.content.text:"";if(r&&y===i)continue;r=true,i=y;}g.push({sessionId:e,update:m});}break}case "result":{if(c.is_error===true||c.subtype==="failure"){g.push(nn(e,P([H(c.result),H(c.error),H(c.subtype)],c),true));break}let m=H(c.result??c.text??c.error);m&&(r=true,i=m,g.push(ae(e,m)));break}case "error":{g.push(nn(e,P([H(c.message),H(c.error)],c),false));break}default:if(f&&!Oo.has(f))return null}if(g.length>0&&f!=="reasoning"&&f!=="thinking_text_delta"&&(s=void 0),g.length===0)return null;let h=ee(c.timestamp);return g.map(m=>({...m,...h!==void 0?{timestamp:h}:{},...n!==void 0?{model:n}:{}}))}}function Ur(t,e,n){let r=rn(t,"id")||rn(t,"messageId"),i=rn(t,"blockIndex"),s=`${S(t,"type")}:${r}:${i}:${e}`;return s===n?null:{signature:s,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function Mo(t){if(t.type!=="response")return {handled:false};let e=A(t.result),n=A(t.error),r=Br(e??t);if(n)return {handled:true,sessionId:r,errorText:H(n.message??n)};let i=e?S(e,"finalText")||S(e,"result"):"";return {handled:true,sessionId:r,resultText:i}}function $o(t){return t.method!=="droid.session_notification"?null:A(A(t.params)?.notification)}function Uo(t,e){let n=A(t.message);if(!n)return [];let r=[],i=n.content;if(Array.isArray(i))for(let s of i){let d=A(s);if(d&&d.type==="tool_use"){let u=Dr(d,e);u&&r.push(u);}}if(n.role==="assistant"){let s=sn(i);s&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:s}});}return r}function Dr(t,e){let n=S(t,"id")||S(t,"toolUseId")||S(t,"tool_use_id"),r=S(t,"name")||S(t,"toolName")||S(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let i=A(t.input)??A(t.toolInput)??A(t.arguments)??A(t.parameters)??{};if(Fr(r)==="todowrite"){let o=Lo(i);if(o)return o}let{title:s,kind:d,content:u,locations:l}=Fo(r,i);return {sessionUpdate:"tool_call",toolCallId:n,title:s,toolName:r,kind:d,status:"pending",rawInput:i,content:u,locations:l}}function Do(t,e){let n=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!n)return null;let r=S(t,"toolName")||S(t,"tool_name")||e.get(n);return e.delete(n),{sessionUpdate:"tool_call_update",toolCallId:n,status:t.isError===true||t.is_error===true?"failed":"completed",title:r,content:on(t.content??t.result??t.value??t.error)}}function Bo(t){let e=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!e)return null;let n=A(t.update),r=H(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?on(r):void 0}}function Lo(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let i=A(r);if(!i)return [];let s=S(i,"content"),d=No(S(i,"status")),u=Ko(S(i,"priority"));return s?[{content:s,status:d,priority:u}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function Fo(t,e){let n=Ao[Fr(t)]||"other",r=S(e,"path")||S(e,"filePath")||S(e,"file_path")||S(e,"absolute_path"),i=S(e,"command"),s=S(e,"url"),d=r||i||s;return {title:d?`${t} ${d}`:t,kind:n,content:Object.keys(e).length>0?on(e):[],locations:r?[{path:r}]:[]}}function Br(t){if(t)return S(t,"session_id")||S(t,"sessionId")}function ae(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function nn(t,e,n){return {sessionId:t,update:{sessionUpdate:"error",message:e,fatal:n}}}function sn(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=A(e);return n?S(n,"text")||S(n,"content"):""}).filter(Boolean).join(""):""}function on(t){let e=H(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function H(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function Lr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function A(t){return Lr(t)?t:null}function S(t,e){let n=t[e];return typeof n=="string"?n:""}function rn(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function Fr(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function No(t){return t==="in_progress"||t==="completed"?t:"pending"}function Ko(t){return t==="high"||t==="low"?t:"medium"}var jo={read_file:"read",read_many_files:"read",write_file:"edit",replace:"edit",edit_file:"edit",run_shell_command:"execute",shell:"execute",glob:"search",grep:"search",search_file_content:"search",list_directory:"search",brave_web_search:"fetch",web_search:"fetch",google_web_search:"fetch",web_fetch:"fetch",delegate_to_agent:"think",write_todos:"other",save_memory:"other",activate_skill:"other"};function dt(){let t,e;return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=(typeof a.session_id=="string"&&a.session_id?a.session_id:void 0)??e,p=[];switch(a.type){case "init":return typeof a.model=="string"&&a.model&&(t=a.model),typeof a.session_id=="string"&&a.session_id&&(e=a.session_id),null;case "result":{let f=n(a.stats);if(f&&p.push({sessionId:c,update:{sessionUpdate:"usage",scope:"run",usage:f}}),a.status!=="error")break;p.push({sessionId:c,update:{sessionUpdate:"error",message:P([a.error?.message,a.error?.type,'gemini ended the run with result status "error" and no error text'],a.error??a),fatal:true}});break}case "message":{let f=r(a);f&&p.push({sessionId:c,update:f});break}case "tool_use":{let f=i(a);f&&p.push({sessionId:c,update:f});break}case "tool_result":{let f=s(a);f&&p.push({sessionId:c,update:f});break}case "error":{let f=d(a);f&&p.push({sessionId:c,update:f});break}default:return null}if(p.length===0)return null;let g=ee(a.timestamp);return p.map(f=>({...f,...g!==void 0?{timestamp:g}:{},...t!==void 0?{model:t}:{}}))};function n(l){if(!l||typeof l!="object"||Array.isArray(l))return null;let o=l,a=m=>typeof m=="number"&&Number.isFinite(m)?m:void 0,c={},p=a(o.input_tokens),g=a(o.output_tokens),f=a(o.cached);p!==void 0&&(c.promptTokens=p),g!==void 0&&(c.completionTokens=g),f!==void 0&&(c.cachedTokens=f);let h={};for(let[m,y]of Object.entries(o))m==="input_tokens"||m==="output_tokens"||m==="cached"||y!=null&&(h[m]=y);return Object.keys(h).length>0&&(c.extra=h),c}function r(l){let o=l.role,a=l.content;return a?o==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}:o==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:a}}:null:null}function i(l){let o=l.tool_id,a=l.tool_name,c=l.parameters||{},{title:p,kind:g,content:f,locations:h}=u(a,c);return {sessionUpdate:"tool_call",toolCallId:o,title:p,toolName:a,kind:g,status:"pending",rawInput:c,content:f,locations:h}}function s(l){let o=l.tool_id,a=l.status,c=l.output,p=l.error,g=[];return c&&typeof c=="string"&&c.length>0&&g.push({type:"content",content:{type:"text",text:c}}),p?.message&&!c&&g.push({type:"content",content:{type:"text",text:p.message}}),{sessionUpdate:"tool_call_update",toolCallId:o,status:a==="success"?"completed":"failed",content:g}}function d(l){return {sessionUpdate:"error",message:P([l.message],l),fatal:false}}function u(l,o){let a=jo[l]||"other",c=[],p=[],g=l;switch(l){case "read_file":g=`Read ${o.absolute_path||o.file_path||"file"}`,(o.absolute_path||o.file_path)&&p.push({path:o.absolute_path||o.file_path});break;case "write_file":g=`Write ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),c.push({type:"diff",path:o.file_path,oldText:null,newText:o.content||""}));break;case "edit_file":g=`Edit ${o.file_path||"file"}`,o.file_path&&p.push({path:o.file_path});break;case "replace":g=`Edit ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),(o.old_string!==void 0||o.new_string!==void 0)&&c.push({type:"diff",path:o.file_path,oldText:o.old_string||"",newText:o.new_string||""}));break;case "run_shell_command":case "shell":g=o.command?`\`${o.command}\``:"Run command",o.description&&c.push({type:"content",content:{type:"text",text:o.description}});break;case "brave_web_search":case "web_search":case "google_web_search":g=o.query?`"${o.query}"`:"Web search";break;case "web_fetch":g=o.prompt?`Fetch: ${o.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":g=`Find ${o.pattern||"files"}`,o.dir_path&&p.push({path:o.dir_path});break;case "grep":case "search_file_content":g=`grep "${o.pattern||o.query||""}"`;break;case "list_directory":g=`List ${o.dir_path||o.path||"directory"}`,(o.dir_path||o.path)&&p.push({path:o.dir_path||o.path});break;case "read_many_files":g=`Read ${o.include?.length||"multiple"} files`,Array.isArray(o.include)&&o.include.forEach(f=>p.push({path:f}));break;case "delegate_to_agent":g=o.agent_name?`Agent: ${o.agent_name}`:"Delegate to agent";break;case "write_todos":g="Update todos";break;case "save_memory":g=o.fact?`Remember: "${o.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":g=o.name?`Activate skill: ${o.name}`:"Activate skill";break;default:g=l;}return {title:g,kind:a,content:c,locations:p}}}var Vo={Read:"read",ReadFile:"read",ReadMediaFile:"read",Write:"edit",WriteFile:"edit",Edit:"edit",StrReplaceFile:"edit",Bash:"execute",Shell:"execute",Glob:"search",Grep:"search",WebSearch:"fetch",SearchWeb:"fetch",FetchURL:"fetch",Agent:"think",AgentSwarm:"think",Task:"think",Think:"think",CreateSubagent:"think",TodoList:"other",SetTodoList:"other"};function Nr(t){return t==="TodoList"||t==="SetTodoList"}function ln(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function jr(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function cn(t){if(!t||typeof t!="object")return null;if(t.type==="text"&&typeof t.text=="string"&&t.text.length>0)return {type:"content",content:{type:"text",text:t.text}};if(t.type==="image_url"&&typeof t.image_url?.url=="string"){let e=t.image_url.url,n=jr(e);return n?{type:"content",content:{type:"image",data:n.data,mimeType:n.mimeType}}:{type:"content",content:{type:"image",data:"",mimeType:"",uri:e}}}return t.type==="video_url"&&typeof t.video_url?.url=="string"?{type:"content",content:{type:"text",text:`[video] ${t.video_url.url}`}}:t.type==="audio_url"&&typeof t.audio_url?.url=="string"?{type:"content",content:{type:"text",text:`[audio] ${t.audio_url.url}`}}:null}function an(t){let e=[];if(typeof t=="string")return t.length>0&&e.push({type:"content",content:{type:"text",text:t}}),e;if(Array.isArray(t)){for(let n of t){if(typeof n=="string"&&n.length>0){e.push({type:"content",content:{type:"text",text:n}});continue}let r=cn(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=cn(t);n&&e.push(n);}return e}function Go(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&ln(e.content.text))}function Jo(t){if(!t||typeof t!="object")return null;if(t.type==="think"&&typeof t.think=="string"&&t.think.length>0)return {update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:t.think}}};if(t.type==="text"&&typeof t.text=="string"&&t.text.length>0)return {update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:t.text}}};if(t.type==="image_url"&&typeof t.image_url?.url=="string"){let e=t.image_url.url,n=jr(e);return n?{update:{sessionUpdate:"agent_message_chunk",content:{type:"image",data:n.data,mimeType:n.mimeType}}}:{update:{sessionUpdate:"agent_message_chunk",content:{type:"image",data:"",mimeType:"",uri:e}}}}return t.type==="video_url"&&typeof t.video_url?.url=="string"?{update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[video] ${t.video_url.url}`}}}:t.type==="audio_url"&&typeof t.audio_url?.url=="string"?{update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[audio] ${t.audio_url.url}`}}}:null}function zo(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function Kr(t){if(!t||typeof t!="object")return [];let e=t.todos;return Array.isArray(e)?e.map(n=>{if(!n||typeof n!="object")return null;let r=n.title;if(typeof r!="string"||r.length===0)return null;let i=n.status;return {content:r,status:zo(i),priority:"medium"}}).filter(n=>n!==null):[]}function dn(){let t=new Set,e=0;function n(u,l){return typeof u=="string"&&u.length>0?u:(e+=1,`kimi_${l.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.role;return "_meta"in o||"_prompt"in o?null:a==="meta"?o.type!=="turn.step.retrying"?null:[{update:{sessionUpdate:"error",message:P([o.error_message,o.error_name],o),fatal:false}}]:a==="assistant"?r(o):a==="tool"?i(o):typeof o.type=="string"&&"payload"in o?s(o):null};function r(u){let l=[],o=u.content,a=u.tool_calls;if(typeof o=="string"&&o.length>0)l.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}});else if(Array.isArray(o))for(let c of o){let p=Jo(c);p&&l.push(p);}if(Array.isArray(a))for(let c of a){if(!c||typeof c!="object")continue;let p=c.function;if(!p)continue;let g=p.name??"",f=n(c.id,g),h;try{h=p.arguments?JSON.parse(p.arguments):{};}catch{h=p.arguments;}if(Nr(g)){let k=Kr(h);k.length>0&&l.push({update:{sessionUpdate:"plan",entries:k}}),t.add(f);continue}let{title:m,kind:y,toolContent:w,locations:b}=d(g,typeof h=="object"&&h!==null?h:{});l.push({update:{sessionUpdate:"tool_call",toolCallId:f,title:m,toolName:g,kind:y,status:"pending",rawInput:h,content:w,locations:b}});}return l.length>0?l:null}function i(u){let l=u.tool_call_id;if(typeof l!="string"||l.length===0)return null;if(t.has(l))return t.delete(l),null;let o=u.content,a=[],c=false;if(typeof o=="string")c=ln(o),o.length>0&&a.push({type:"content",content:{type:"text",text:o}});else if(Array.isArray(o))for(let p of o){let g=cn(p);g&&(g.type==="content"&&g.content.type==="text"&&ln(g.content.text)&&(c=true),a.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:l,status:c?"failed":"completed",content:a}}]}function s(u){let l=u.type,o=u.payload??{},a=[];switch(l){case "TextPart":{let c=o.text;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}});break}case "ThinkPart":{let c=o.think;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:c}}});break}case "ToolCall":{let c=o.function?.name??"",p=n(o.id,c),g=o.function;if(!g)break;let f;try{f=g.arguments?JSON.parse(g.arguments):{};}catch{f=g.arguments;}if(Nr(c)){let b=Kr(f);b.length>0&&a.push({update:{sessionUpdate:"plan",entries:b}}),t.add(p);break}let{title:h,kind:m,toolContent:y,locations:w}=d(c,typeof f=="object"&&f!==null?f:{});a.push({update:{sessionUpdate:"tool_call",toolCallId:p,title:h,toolName:c,kind:m,status:"pending",rawInput:f,content:y,locations:w}});break}case "ToolResult":{let c=o.tool_call_id;if(typeof c!="string"||c.length===0)break;if(t.has(c)){t.delete(c);break}let p=o.return_value??o.content,g=[],f=o.is_error===true;if(p&&typeof p=="object"&&!Array.isArray(p)){let h=p;f=f||h.type==="ToolError"||h.is_error===true,g.push(...an(h.output)),g.length===0&&typeof h.message=="string"&&h.message.length>0&&g.push({type:"content",content:{type:"text",text:h.message}}),g.length===0&&g.push(...an(p));}else g.push(...an(p));f=f||Go(g),a.push({update:{sessionUpdate:"tool_call_update",toolCallId:c,status:f?"failed":"completed",content:g}});break}default:return null}return a.length>0?a:null}function d(u,l){let o=Vo[u]||"other",a=[],c=[],p=u;switch(u){case "Read":case "ReadFile":{let g=l.path??l.file_path;p=`Read ${g||"file"}`,g&&c.push({path:g});break}case "ReadMediaFile":{let g=l.path??l.file_path;p=`Read media ${g||"file"}`,g&&c.push({path:g});break}case "Write":case "WriteFile":{let g=l.path??l.file_path;p=`Write ${g||"file"}`,g&&(c.push({path:g}),typeof l.content=="string"&&a.push({type:"diff",path:g,oldText:null,newText:l.content}));break}case "Edit":case "StrReplaceFile":{let g=l.path??l.file_path;p=`Edit ${g||"file"}`,g&&c.push({path:g});break}case "Bash":case "Shell":p=l.command?`\`${l.command}\``:"Run command";break;case "Glob":p=`Find ${l.pattern||"files"}`,l.path&&c.push({path:l.path});break;case "Grep":p=`grep "${l.pattern||""}"`,l.path&&c.push({path:l.path});break;case "WebSearch":case "SearchWeb":p=l.query?`"${l.query}"`:"Web search";break;case "FetchURL":p=l.url?`Fetch ${l.url}`:"Web fetch";break;case "Agent":case "AgentSwarm":case "Task":p=l.description||"Subagent task";break;case "Think":p=l.thought||"Thinking";break;case "CreateSubagent":p=l.name?`Subagent: ${l.name}`:"Create subagent";break;case "TodoList":case "SetTodoList":p="Update todos";break;default:p=u;}return {title:p,kind:o,toolContent:a,locations:c}}}var Wo={read:"read",write:"edit",edit:"edit",multiedit:"edit",apply_patch:"edit",bash:"execute",glob:"search",grep:"search",list:"search",codesearch:"search",lsp:"search",webfetch:"fetch",websearch:"fetch",task:"think",batch:"think",plan_enter:"switch_mode",plan_exit:"switch_mode",todoread:"other",todowrite:"other",skill:"other",question:"other"};function Ho(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function qo(t){if(typeof t!="string")return "pending";switch(t.toLowerCase()){case "in_progress":case "in-progress":case "running":return "in_progress";case "completed":case "done":case "cancelled":return "completed";default:return "pending"}}function Yo(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function Vr(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object")return null;let n=e.content;return typeof n!="string"||n.length===0?null:{content:n,status:qo(e.status),priority:Yo(e.priority)}}).filter(e=>e!==null):[]}function Zo(t){if(!t||typeof t!="object")return null;let e=t,n=typeof e.mime=="string"?e.mime:"",r=typeof e.url=="string"?e.url:"";if(n.startsWith("image/")){if(r.length>0){let u=Ho(r);return u?{type:"content",content:{type:"image",data:u.data,mimeType:u.mimeType||n}}:{type:"content",content:{type:"image",data:"",mimeType:n,uri:r}}}return null}return {type:"content",content:{type:"text",text:`[attachment] ${(typeof e.filename=="string"?e.filename:"")||"attachment"} (${n||"file"})`}}}function Qo(t,e){if(t==="error")return typeof e.error=="string"?e.error:null;if(typeof e.output=="string")return e.output;if(e.output===void 0||e.output===null)return null;try{return JSON.stringify(e.output)}catch{return String(e.output)}}function Xo(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function pn(){return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.sessionID,c=[];switch(o.type){case "step_start":return null;case "step_finish":{let g=t(o.part);if(!g)return null;c.push({sessionUpdate:"usage",scope:"call",usage:g});break}case "user":{let g=e(o);g&&c.push(g);break}case "text":{let g=n(o);g&&c.push(g);break}case "reasoning":{let g=r(o);g&&c.push(g);break}case "tool_use":{c.push(...i(o));break}case "error":{let g=s(o);g&&c.push(g);break}default:return null}if(c.length===0)return null;let p=ee(o.timestamp);return c.map(g=>({sessionId:a,update:g,...p!==void 0?{timestamp:p}:{}}))};function t(u){if(!u||typeof u!="object")return null;let l=u.tokens;if(!l||typeof l!="object")return null;let o=l,a=typeof o.cache=="object"&&o.cache?o.cache:{},c=k=>typeof k=="number"&&Number.isFinite(k)?k:void 0,p=c(o.input),g=c(o.output),f=c(a.read),h=c(a.write),m=c(o.reasoning),y=c(u.cost),w={};(p!==void 0||f!==void 0)&&(w.promptTokens=(p??0)+(f??0)),g!==void 0&&(w.completionTokens=g),f!==void 0&&(w.cachedTokens=f),y!==void 0&&y>0&&(w.costUsd=y);let b={};return m&&(b.reasoning_tokens=m),h&&(b.cache_write_tokens=h),Object.keys(b).length>0&&(w.extra=b),w}function e(u){let o=(Array.isArray(u.parts)?u.parts:[]).filter(a=>a&&typeof a=="object"&&a.type==="text"&&typeof a.text=="string"&&a.text).map(a=>a.text).join(`
6
+ `);return o.length===0?null:{sessionUpdate:"user_message_chunk",content:{type:"text",text:o}}}function n(u){let l=u.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}}function r(u){let l=u.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:l}}}function i(u){let l=u.part;if(!l)return [];let o=typeof l.callID=="string"?l.callID:"";if(o.length===0)return [];let a=typeof l.tool=="string"?l.tool:"",c=a.toLowerCase(),p=typeof l.state=="object"&&l.state?l.state:{},g=typeof p.input=="object"&&p.input?p.input:{},f=p.status,h=p.title??p.metadata?.description??c,m=p.metadata?.exit,{kind:y,content:w,locations:b}=d(c,g),k=[];if(k.push({sessionUpdate:"tool_call",toolCallId:o,title:h,toolName:a,kind:y,status:"pending",rawInput:g,content:w,locations:b}),c==="todowrite"){let E=Vr(g.todos);if(E.length===0&&typeof p.output=="string")try{E=Vr(JSON.parse(p.output));}catch{}E.length>0&&k.push({sessionUpdate:"plan",entries:E});}let C=Xo(f,m);if(C==="pending")return k;let v=Qo(f,p),x=[];if(typeof v=="string"&&v.length>0&&x.push({type:"content",content:{type:"text",text:v}}),Array.isArray(p.attachments))for(let E of p.attachments){let I=Zo(E);I&&x.push(I);}return k.push({sessionUpdate:"tool_call_update",toolCallId:o,status:C,content:x,rawOutput:p}),k}function s(u){return {sessionUpdate:"error",message:P([u.error?.data?.message,u.error?.message,u.error?.name],u.error??u),fatal:false}}function d(u,l){let o=Wo[u]||"other",a=[],c=[];switch(u){case "read":{let p=l.filePath??l.path;if(p){let g=l.offset;c.push({path:p,line:typeof g=="number"&&Number.isFinite(g)?Math.max(0,g-1):void 0});}break}case "write":{let p=l.filePath??l.path;p&&(c.push({path:p}),typeof l.content=="string"&&a.push({type:"diff",path:p,oldText:null,newText:l.content}));break}case "edit":case "multiedit":{let p=l.filePath??l.path;p&&(c.push({path:p}),u==="edit"&&(l.oldString!==void 0||l.newString!==void 0)&&a.push({type:"diff",path:p,oldText:l.oldString??"",newText:l.newString??""}));break}case "apply_patch":break;case "bash":{let p=l.command;p&&l.description?a.push({type:"content",content:{type:"text",text:l.description}}):p&&a.push({type:"content",content:{type:"text",text:p}});break}case "glob":case "list":{let p=l.path;p&&c.push({path:p});break}case "grep":{let p=l.path;p&&c.push({path:p});break}case "codesearch":case "websearch":{let p=l.query;p&&a.push({type:"content",content:{type:"text",text:p}});break}case "webfetch":{let p=l.url;p&&a.push({type:"content",content:{type:"text",text:p}});break}case "task":{let p=l.description;p&&a.push({type:"content",content:{type:"text",text:p}});break}}return {kind:o,content:a,locations:c}}}var ea={Read:"read",read_file:"read",Write:"edit",Edit:"edit",write_file:"edit",edit_file:"edit",Bash:"execute",BashOutput:"execute",KillShell:"execute",shell:"execute",run_shell_command:"execute",WebFetch:"fetch",WebSearch:"fetch",brave_web_search:"fetch",Glob:"search",Grep:"search",LS:"search",list_directory:"search",Task:"think",TodoWrite:"other",ExitPlanMode:"switch_mode"};function pt(){let t=new Map,e=new Map;return function(c){let p;try{p=JSON.parse(c);}catch{return null}if(!p||typeof p!="object")return null;let g=p;if("_meta"in g||"_prompt"in g)return null;let f=g.session_id||void 0,h=[];switch(g.type){case "assistant":{let v=g;h.push(...r(v));let x=n(v.message?.usage);x&&h.push({sessionUpdate:"usage",scope:"call",usage:x});break}case "stream_event":{h.push(...i(g));break}case "user":{h.push(...s(g));break}case "system":return null;case "result":{let v=n(g.usage);if(v&&h.push({sessionUpdate:"usage",scope:"run",usage:v}),g.is_error!==true)break;let x=g.error;h.push({sessionUpdate:"error",message:P([x?.message,g.subtype],g.error??g),fatal:true});break}default:return null}if(h.length===0)return null;let m=g.message,y=typeof m?.model=="string"&&m.model?m.model:void 0,w=typeof m?.id=="string"&&m.id?m.id:void 0,b=typeof g.parent_tool_use_id=="string"&&g.parent_tool_use_id?g.parent_tool_use_id:void 0,k=m?.stop_reason,C=k!=null?{stop_reason:k}:void 0;return h.map(v=>({sessionId:f,update:v,...y!==void 0?{model:y}:{},...w!==void 0?{messageId:w}:{},...b!==void 0?{parentToolCallId:b}:{},...C!==void 0?{extra:C}:{}}))};function n(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let c=a,p=w=>typeof w=="number"&&Number.isFinite(w)?w:void 0,g={},f=p(c.input_tokens),h=p(c.output_tokens),m=p(c.cache_read_input_tokens);f!==void 0&&(g.promptTokens=f),h!==void 0&&(g.completionTokens=h),m!==void 0&&(g.cachedTokens=m);let y={};for(let[w,b]of Object.entries(c))w==="input_tokens"||w==="output_tokens"||w==="cache_read_input_tokens"||b!=null&&(y[w]=b);return Object.keys(y).length>0&&(g.extra=y),g}function r(a){let c=[],p=a.message?.content;if(!Array.isArray(p))return c;for(let g of p){let f=d(g);c.push(...f);}return c}function i(a){let c=[],p=a.event;if(!p)return c;switch(p.type){case "content_block_start":{let g=p.index??0,f=p.content_block;f&&(t.set(g,f),f.type==="tool_use"&&e.set(g,""));break}case "content_block_delta":{let g=p.index??0,f=p.delta,h=t.get(g);if(f?.type==="text_delta"&&f.text)c.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.text}});else if(f?.type==="thinking_delta"&&f.thinking)c.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:f.thinking}});else if(f?.type==="input_json_delta"&&f.partial_json&&h?.type==="tool_use"){let m=e.get(g)||"";e.set(g,m+f.partial_json);}break}case "content_block_stop":{let g=p.index??0,f=t.get(g);if(f&&!(f.type==="text"&&f.text)){if(!(f.type==="thinking"&&f.thinking)){if(f.type==="tool_use"){let h=f,m=e.get(g)||"";e.delete(g);let y=h.input;if(m)try{y=JSON.parse(m);}catch{}let w={...h,input:y},b=u(w);b&&c.push(b);}else if(f.type==="tool_result"){let h=l(f);h&&c.push(h);}}}t.delete(g);break}}return c}function s(a){let c=a.message?.content,p=[];if(typeof c=="string")return p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:c}}),p;if(Array.isArray(c)){for(let g of c)if(g.type==="text")p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:g.text}});else if(g.type==="tool_result"){let f=l(g);f&&p.push(f);}}return p}function d(a){switch(a.type){case "text":return a.text?[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a.text}}]:[];case "thinking":return a.thinking?[{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:a.thinking}}]:[];case "tool_use":{let c=u(a);return c?[c]:[]}case "tool_result":{let c=l(a);return c?[c]:[]}}}function u(a){let c=a.id,p=a.name,g=a.input;if(p==="TodoWrite"&&Array.isArray(g?.todos))return {sessionUpdate:"plan",entries:g.todos.map(w=>({content:w.content,status:w.status||"pending",priority:"medium"}))};let{title:f,kind:h,content:m,locations:y}=o(p,g||{});return {sessionUpdate:"tool_call",toolCallId:c,title:f,toolName:p,kind:h,status:"pending",rawInput:g,content:m,locations:y}}function l(a){let c=a.tool_use_id,p=a.is_error??false,g=a.content,f=[];if(typeof g=="string"&&g.length>0)f.push({type:"content",content:{type:"text",text:g}});else if(Array.isArray(g))for(let h of g)h.type==="text"&&f.push({type:"content",content:{type:"text",text:h.text}});return {sessionUpdate:"tool_call_update",toolCallId:c,status:p?"failed":"completed",content:f}}function o(a,c){let p=ea[a]||"other",g=[],f=[],h=a;switch(a){case "Read":case "read_file":h=`Read ${c.file_path||c.absolute_path||"file"}`,(c.file_path||c.absolute_path)&&f.push({path:c.file_path||c.absolute_path});break;case "Write":case "write_file":h=`Write ${c.file_path||"file"}`,c.file_path&&(f.push({path:c.file_path}),g.push({type:"diff",path:c.file_path,oldText:null,newText:c.content||""}));break;case "Edit":case "edit_file":h=`Edit ${c.file_path||"file"}`,c.file_path&&f.push({path:c.file_path});break;case "Bash":case "shell":case "run_shell_command":h=c.command?`\`${c.command}\``:"Run command",c.description&&g.push({type:"content",content:{type:"text",text:c.description}});break;case "WebFetch":h=c.url?`Fetch ${c.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":h=c.query?`"${c.query}"`:"Web search";break;case "Glob":h=`Find ${c.pattern||"files"}`,c.path&&f.push({path:c.path});break;case "Grep":h=`grep "${c.pattern||""}"`;break;case "LS":case "list_directory":h=`List ${c.path||"directory"}`,c.path&&f.push({path:c.path});break;case "Task":h=c.description||"Subagent task";break;case "TodoWrite":h="Update todos";break;case "ExitPlanMode":h="Exit plan mode";break;default:h=a;}return {title:h,kind:p,content:g,locations:f}}}function Gr(t){return pt()(t)}function ne(t){switch(t){case "claude":return at();case "codex":return lt();case "gemini":return dt();case "qwen":return pt();case "kimi":return dn();case "opencode":return pn();case "droid":return ct();default:return ()=>null}}function ta(t,e){let n=e.trim();return n?ne(t)(n):null}function na(t,e){let n=[],r=e.split(`
7
+ `),i=ne(t);for(let s of r){let d=s.trim();if(!d)continue;let u=i(d);u&&n.push(...u);}return n}var da=promisify(execFile),Y="SKILL.md",pa=join(homedir(),".cache","evolve","skills"),yn=["skills","skills/.curated","skills/.experimental","skills/.system",".claude/skills"],ua=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)(?:@(.+))?$/,ga=/^[0-9a-f]{40}$/,gn=2e3,fn=64*1024*1024,F=class extends Error{constructor(e){super(e),this.name="SkillRefError";}},$=class extends Error{constructor(e){super(e),this.name="SkillResolveError";}};function fa(t){return t==="~"?homedir():t.startsWith("~/")?join(homedir(),t.slice(2)):t}function ma(t){let e=t.indexOf("@");if(e===-1)return {base:t};let n=t.slice(e+1);if(!n)throw new F(`Empty @ref in skill reference segment: ${JSON.stringify(t)}`);return {base:t.slice(0,e),gitRef:n}}var ha=/^[A-Za-z0-9._-]+$/;function gt(t,e,n){if(!ha.test(t))throw new F(`Cannot parse skill reference ${JSON.stringify(n)}: ${e} ${JSON.stringify(t)} may only contain letters, digits, ".", "_" and "-".`);return t}function wn(t){let e=String(t??"").trim();if(!e)throw new F("Skill reference cannot be empty.");if(e.startsWith("upload:")){let s=e.slice(7);if(!s)throw new F(`Skill upload reference ${JSON.stringify(e)} names no upload id.`);return {kind:"upload",id:s,raw:e}}if(e.startsWith("name:")){let s=e.slice(5);if(!s)throw new F(`Skill name reference ${JSON.stringify(e)} names no skill.`);return gt(s,"skill name",e),{kind:"name",name:s,raw:e}}if(e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~"))return {kind:"local",path:fa(e),raw:e};let n=e.match(/^(?:https?:\/\/)?(?:www\.)?skills\.sh\/(.+)$/);if(n){let d=n[1].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2||d.length>3)throw new F(`Cannot parse skill reference ${JSON.stringify(e)}: expected skills.sh/<owner>/<repo> or skills.sh/<owner>/<repo>/<skill>, optionally @ref.`);let{base:u,gitRef:l}=ma(d[d.length-1]);d[d.length-1]=u;let[o,a,c]=d;return gt(o,"owner",e),gt(a,"repo",e),c!==void 0&&gt(c,"skill name",e),{kind:"git",host:"github.com",org:o,repo:a,...l?{gitRef:l}:{},...c?{skillName:c}:{},viaSkillsSh:true,raw:e}}let r=e.match(/^https?:\/\/([^/]+)\/(.+)$/);if(r){let s=r[1],d=r[2].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2)throw new F(`Git URL must have at least org/name in the path: ${JSON.stringify(e)}`);let u=d[0],l=d[1].replace(/\.git$/,""),o,a;return d.length>=4&&d[2]==="tree"&&(o=d[3],d.length>4&&(a=d.slice(4).join("/"))),{kind:"git",host:s,org:u,repo:l,...o?{gitRef:o}:{},...a?{subdir:a}:{},viaSkillsSh:false,raw:e}}let i=e.match(ua);if(i)return {kind:"git",host:"github.com",org:i[1],repo:i[2],...i[3]?{gitRef:i[3]}:{},viaSkillsSh:false,raw:e};throw new F(`Cannot parse skill reference ${JSON.stringify(e)}. Expected skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], an https git URL, or a local folder path (prefix relative paths with './').`)}function vn(t){return `https://${t.host}/${t.org}/${t.repo}.git`}function le(t){return `https://${t.host}/${t.org}/${t.repo}`}async function q(t,e){try{let{stdout:n}=await da("git",t,{cwd:e.cwd,timeout:e.timeoutMs,env:e.gitEnv??process.env,maxBuffer:16777216});return n}catch(n){let r=n,i=(r.stderr||r.message||"").trim();throw new $(`git ${t[0]} failed${r.killed?" (timed out)":""}: ${i}`)}}async function bn(t,e={}){if(t.gitRef&&ga.test(t.gitRef))return t.gitRef;let n=t.gitRef??"HEAD",i=(await q(["ls-remote",vn(t),n,`${n}^{}`],{timeoutMs:e.lsRemoteTimeoutMs??3e4,gitEnv:e.gitEnv})).trim().split(`
8
+ `).filter(u=>u.length>0).map(u=>{let[l,o]=u.split(" ");return {sha:l,name:o}});if(i.length===0||!i[0].sha)throw new $(`No matching ref ${JSON.stringify(n)} found in ${le(t)}`);let s=i[0];return (i.find(u=>u.name===`${s.name}^{}`)??s).sha}async function ya(t,e={}){let n=wn(t);if(n.kind!=="git")return {ref:n.raw};let r=await bn(n,e),i;return n.viaSkillsSh?i=`skills.sh/${n.org}/${n.repo}${n.skillName?`/${n.skillName}`:""}@${r}`:n.subdir!==void 0||n.raw.includes("://")?i=`https://${n.host}/${n.org}/${n.repo}/tree/${r}${n.subdir?`/${n.subdir}`:""}`:i=`${n.org}/${n.repo}@${r}`,{ref:i,gitUrl:le(n),gitCommit:r}}async function mn(t){let e=[],n=async i=>{let s=i===""?t:join(t,i),d=await readdir(s,{withFileTypes:true});for(let u of d){let l=i===""?u.name:`${i}/${u.name}`;u.isDirectory()?await n(l):u.isFile()&&e.push(l);}};await n(""),e.sort();let r=createHash("sha256");for(let i of e){let s=createHash("sha256").update(await readFile(join(t,i))).digest("hex");r.update(i),r.update("\0"),r.update(s),r.update("\0");}return `sha256:${r.digest("hex")}`}async function Pe(t){try{return (await stat(t)).isFile()}catch{return false}}async function kn(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function Wr(t,e){if(!await kn(t))throw new $(`Skill path does not exist or is not a directory: ${e}`);if(await Pe(join(t,Y)))return [t];let r=(await readdir(t,{withFileTypes:true})).filter(d=>d.isDirectory()&&!d.name.startsWith(".")).map(d=>d.name).sort(),i=[],s=[];for(let d of r)await Pe(join(t,d,Y))?s.push(join(t,d)):i.push(d);if(i.length>0)throw new $(`Skill root ${e} contains child directories without ${Y}: ${i.join(", ")}`);if(s.length===0)throw new $(`Skill path ${e} must be a skill directory containing ${Y}, or a root whose immediate child directories each contain ${Y}.`);return s}async function wa(t){let e=new Map;await Pe(join(t,Y))&&e.set(basename(t),t);for(let n of yn){let r=join(t,n);if(!await kn(r))continue;let i=await readdir(r,{withFileTypes:true});for(let s of i.sort((d,u)=>d.name<u.name?-1:1)){if(!s.isDirectory()||s.name.startsWith("."))continue;let d=join(r,s.name);await Pe(join(d,Y))&&e.set(s.name,d);}}return Array.from(e,([n,r])=>({dir:r,name:n}))}function va(t){return t.cacheDir??process.env.EVOLVE_SKILLS_CACHE??pa}async function ba(t,e,n){let r=join(va(n),t.host,t.org,t.repo,e),i=join(r,t.repo),s=join(r,".evolve-complete");if(await Pe(s)&&await kn(i))return i;await mkdir(dirname(r),{recursive:true});let d=await mkdtemp(`${r}.tmp-`),u=join(d,t.repo),l=n.checkoutTimeoutMs??12e4,o={cwd:u,timeoutMs:l,gitEnv:n.gitEnv};try{await mkdir(u),await q(["init","--quiet"],o),await q(["remote","add","origin",vn(t)],o),t.subdir?(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",t.subdir],o)):(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",...yn],o)),await q(["fetch","--quiet","--depth=1","origin",e],o),await q(["checkout","--quiet","FETCH_HEAD"],o),await rm(join(u,".git"),{recursive:!0,force:!0}),await writeFile(join(d,".evolve-complete"),""),await rm(r,{recursive:!0,force:!0});try{await rename(d,r);}catch{await rm(d,{recursive:!0,force:!0});}return i}catch(a){throw await rm(d,{recursive:true,force:true}),a}}async function Hr(t,e){let n=0,r=0,i=async s=>{let d=await readdir(s,{withFileTypes:true});for(let u of d){let l=join(s,u.name);if(u.isDirectory())await i(l);else if(u.isFile()&&(n+=1,r+=(await stat(l)).size,n>gn||r>fn))throw new $(`Skill ${e} exceeds the size ceiling (${gn} files / ${fn} bytes) \u2014 a skill is instructions, not a dataset.`)}};await i(t);}async function Sn(t,e={}){let n=new Map;for(let r of t){let i=wn(r);if(i.kind==="upload")throw new $(`Skill reference ${JSON.stringify(i.raw)} is a platform upload handle; only the hosted platform can resolve it. Use a skills.sh/git reference or a local folder here.`);if(i.kind==="name")throw new $(`Skill reference ${JSON.stringify(i.raw)} is a platform skill name \u2014 a moving pointer only the hosted platform can resolve (server-side, at job create). Use a skills.sh/git reference or a local folder here.`);if(i.kind==="local"){let l=await Wr(i.path,i.raw);for(let o of l)await Hr(o,i.raw),n.set(basename(o),{name:basename(o),dir:o,source:i.raw,digest:await mn(o)});continue}let s=await bn(i,e),d=await ba(i,s,e),u;if(i.subdir)u=(await Wr(join(d,i.subdir),`${i.raw} (${i.subdir})`)).map(o=>({dir:o,name:basename(o)}));else if(u=await wa(d),u.length===0)throw new $(`No skills found in ${le(i)}@${s.slice(0,12)}: expected ${Y} at the repo root or under ${yn.join(", ")}.`);if(i.skillName){let l=u.filter(o=>o.name===i.skillName);if(l.length===0)throw new $(`Skill ${JSON.stringify(i.skillName)} not found in ${le(i)}@${s.slice(0,12)}. Available: ${u.map(o=>o.name).sort().join(", ")||"(none)"}`);u=l;}for(let{dir:l,name:o}of u)await Hr(l,i.raw),n.set(o,{name:o,dir:l,source:i.raw,gitUrl:le(i),gitCommit:s,digest:await mn(l)});}return Array.from(n.values()).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0)}function ft(t){return `'${t.replace(/'/g,"'\\''")}'`}async function xn(t,e,n){if(e.length===0)return;let{tarGzipDirectory:r}=await import('./tar-GVC4KE52.js');await t.files.makeDir(n);for(let i of e){let s=await r(i.dir),d=`${n}/.evolve-skill-${i.name}.tgz`,u=`${n}/${i.name}`;await t.files.write(d,s),await t.commands.run(`mkdir -p ${ft(u)} && tar -xzf ${ft(d)} -C ${ft(u)} && rm -f ${ft(d)}`,{timeoutMs:6e4});}}function N(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function ce(t){return JSON.stringify(ka(t,{target:"jsonSchema7"}),null,2)}function de(t){return JSON.stringify(t,null,2)}function qr(t,e=false){let n={};function r(i,s){for(let d of j.readdirSync(i)){let u=K.join(i,d),l=s?`${s}/${d}`:d;j.statSync(u).isDirectory()?e&&r(u,l):n[l]=j.readFileSync(u);}}return r(t,""),n}function Yr(t,e){let n=K.resolve(t),r=n.endsWith(K.sep)?n:n+K.sep;for(let[i,s]of Object.entries(e)){let d=K.resolve(n,i);if(!d.startsWith(r))throw new Error(`Unsafe file path escapes target directory: ${i}`);let u=K.dirname(d);j.mkdirSync(u,{recursive:true});let l;s instanceof ArrayBuffer||s instanceof Uint8Array?l=Buffer.from(s):l=s,j.writeFileSync(d,l);}}var _=class extends Error{field;constructor(e,n){super(n),this.name="EvolveConfigError",this.field=e;}};function Cn(t){return typeof t=="string"&&t.trim()!==""}function pe(t){return t==null?String(t):JSON.stringify(t)}function Ie(t){if(!t)return;if(t.type!==void 0&&!Jt(t.type))throw new _("type",`Evolve agent config: unknown agent type ${pe(t.type)}. Valid types: ${Object.keys(U).join(", ")}.`);let e=t.type??m;if(t.model!==void 0&&!Cn(t.model))throw new _("model",`Evolve agent config: "model" is empty (${pe(t.model)}). Pass a model id such as "${D(e).defaultModel}", or omit model entirely to use ${e}'s default.`);if(t.config!==void 0){if(!ti(e))throw new _("config",`Evolve agent config: agent "${e}" does not support a native config. Agents with native-config support: ${ni().join(", ")}.`);let n=t.config;if(typeof n=="string"){if(!Cn(n))throw new _("config",`Evolve agent config: "config" is an empty path (${pe(n)}). Pass a local settings file path or an inline JSON object.`)}else if(!yt(n))throw new _("config",`Evolve agent config: "config" must be a local file path or a JSON object, received ${pe(n)}.`)}t.preset!==void 0&&En(e,t.preset);}function En(t,e){if(!jt.includes(e))throw new _("preset",`Evolve agent config: unknown preset ${pe(e)}. Valid presets: ${jt.join(", ")}.`);let n=ei(e);if(!n.includes(t))throw new _("preset",`Evolve agent config: agent "${t}" cannot guarantee preset "${e}". Agents that can: ${n.join(", ")}.`)}function Xr(t){let e=U[t]?.presets;return e?Object.keys(e):[]}function ei(t){return Object.keys(U).filter(e=>Xr(e).includes(t))}function wt(t,e){let n={...t};for(let[r,i]of Object.entries(e)){let s=n[r];if(yt(s)&&yt(i))n[r]=wt(s,i);else if(Array.isArray(s)&&Array.isArray(i)){let d=[...s];for(let u of i)d.some(l=>ue(l)===ue(u))||d.push(u);n[r]=d;}else n[r]=i;}return n}function yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ti(t){return U[t]?.nativeConfig!==void 0}function ni(){return Object.keys(U).filter(ti)}function xa(t,e){if(e===void 0)return;let n=U[t]?.nativeConfig;if(!n)throw new _("config",`Evolve agent config: agent "${t}" does not support a native config. Agents with native-config support: ${ni().join(", ")}.`);let r;if(typeof e=="string"){let i=e.replace(/^~/,process.env.HOME||"");if(!j.existsSync(i))throw new _("config",`Agent config file not found: ${i}`);let s=j.readFileSync(i,"utf-8");try{r=n.format==="toml"?parse(s):JSON.parse(s);}catch(d){throw new _("config",`Invalid ${t} config file ${e}: ${d.message}`)}}else {let i;try{i=JSON.parse(JSON.stringify(e));}catch(s){throw new _("config",`Invalid inline ${t} config: not JSON-serializable: ${s.message}`)}if(JSON.stringify(i)!==JSON.stringify(e))throw new _("config",`Invalid inline ${t} config: expected a JSON object that can be represented without conversion`);r=i;}if(!yt(r))throw new _("config",`Invalid ${t} config: expected a ${n.format==="toml"?"TOML table":"JSON object"}.`);if(n.format==="toml"){let i;try{i=parse(stringify(r));}catch(s){throw new _("config",`Invalid ${t} config for TOML conversion: ${s.message}`)}if(ue(i)!==ue(r))throw new _("config",`Invalid ${t} config: the document cannot be represented losslessly as TOML (TOML has no null and no mixed-type arrays)`)}return r}function ue(t){return Array.isArray(t)?`[${t.map(ue).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).sort(([n],[r])=>n<r?-1:n>r?1:0).map(([n,r])=>`${JSON.stringify(n)}:${ue(r)}`).join(",")}}`:JSON.stringify(t)??"null"}function Tn(t){if(!t||!Cn(t.prompt))throw new _("prompt",`run() requires a non-empty "prompt" string, received ${pe(t?.prompt)}.`)}function _n(t){if(t){for(let e of x)if(e in t)throw new _(`observability.${e}`,`Evolve observability metadata: "${e}" is reserved for session identity and would split this run across two dashboard sessions. Reserved keys: ${x.join(", ")}. Use a different key, or set the session tag with .withSessionTagPrefix().`)}}function vt(t){if(t.externalGateway){if(t.providerApiKey||t.providerBaseUrl||t.oauthToken)throw new Error("externalGateway cannot be combined with providerApiKey/providerBaseUrl/oauthToken (direct mode)");if(t.apiKey)throw new Error("externalGateway cannot be combined with apiKey (Evolve gateway mode)")}}function Ca(t){let e=t.replace(/^~/,process.env.HOME||"");if(!j.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return j.readFileSync(e,"utf-8")}function Qr(t,e,n){if(!e.providerEnvMap||!n)return;let r=n.indexOf("/");if(r<=0)return;let i=n.slice(0,r);if(!(e.providerEnvMap[i]||!oe(e,n)))throw new _("model",`Model "${n}" is served through the Evolve gateway only: the ${t} agent holds no ${i} key in direct mode. Set ${h} (or apiKey) to run it through the gateway, or pick a model whose route has a direct-mode key (${Object.keys(e.providerEnvMap).join(", ")}).`)}function bt(t){let e=t?.type??m,n=D(e),r=xa(e,t?.config);t?.preset!==void 0&&En(e,t.preset);let i={...r!==void 0?{config:r}:{},...t?.preset!==void 0?{preset:t.preset}:{}};if(t?.externalGateway){vt(t);let{apiKey:l,baseUrl:o,revoke:a}=t.externalGateway;if(!l||!o||typeof a!="function")throw new Error("externalGateway requires apiKey, baseUrl, and a revoke() function");return {type:e,apiKey:l,baseUrl:o,isDirectMode:true,externalGateway:{revoke:a},model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.oauthToken){if(e!=="claude")throw new Error(`oauthToken is only supported for claude agent (Claude Max subscription), not ${e}. Use providerApiKey for ${e} instead.`);return {type:e,apiKey:t.oauthToken,isDirectMode:true,isOAuth:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.providerApiKey){Qr(e,n,t.model);let l=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,o=t.providerBaseUrl??l??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:o,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i};let s=process.env[h];if(s)return {type:e,apiKey:s,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i};if(n.providerEnvMap){let o=(t?.model??n.defaultModel)?.split("/")[0],a=o?n.providerEnvMap[o]:void 0,c=a?process.env[a.keyEnv]:void 0;if(c){let g=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:c,baseUrl:g,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let d=process.env[n.apiKeyEnv];if(d){Qr(e,n,t?.model);let o=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:d,baseUrl:o,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}if(n.oauthEnv){let l=process.env[n.oauthEnv];if(l){if(n.oauthFileName){let o=Ca(l);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:o,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}return {type:e,apiKey:l,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let u=n.oauthEnv?n.oauthFileName?`, or ${n.oauthEnv}`:`, oauthToken, or ${n.oauthEnv}`:"";throw new Error(`No API key found for ${e}. Set apiKey (gateway), providerApiKey (direct)${u}, or ${h} / ${n.apiKeyEnv} env var.`)}function Ea(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}var si=new WeakSet;function Rn(t){return si.add(t),t}function fe(t){return si.has(t)}function ri(t,e){return new Error(`${h} is set but ${t} failed to load.
9
+ Try installing: ${e}`)}function ii(t){return t.message?.includes("Cannot find module")||t.message?.includes("MODULE_NOT_FOUND")}function Pn(t,e){if(!e||e.timeoutMs===void 0&&e.resources===void 0)return t;let n=t.create.bind(t);return t.create=(r={})=>n({...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},...e.resources!==void 0?{resources:e.resources}:{},...r}),t}async function Ae(t,e$1="e2b",n){let r=t||process.env[h];if(!r)throw new Error(`${h} is required for Evolve-managed sandbox features`);if(!c.includes(e$1))throw new Error(`Unknown managed sandbox provider "${e$1}". Supported: ${c.join(", ")}`);if(e$1==="daytona")try{let{createDaytonaProvider:i}=await import('@evolvingmachines/daytona');return Pn(Rn(i({apiKey:r,apiUrl:d("daytona"),managedToolboxUrl:e()})),n)}catch(i){let s=i;throw ii(s)?ri("@evolvingmachines/daytona","npm install @evolvingmachines/daytona"):s}if(e$1==="modal"){let{ManagedModalProvider:i}=await import('./managed-modal-IJW62SSK.js');return Pn(Rn(new i({apiKey:r,baseUrl:d("modal")})),n)}try{let{createE2BProvider:i}=await import('@evolvingmachines/e2b');return Pn(Rn(i({apiKey:Ea(r),apiUrl:f()})),n)}catch(i){let s=i;throw ii(s)?ri("@evolvingmachines/e2b","npm install @evolvingmachines/evolve"):s}}function Ta(t="e2b",e){let n=typeof e=="string"?{apiKey:e}:e??{},{apiKey:r,...i}=n;return Ae(r,t,i)}async function kt(){let t=process.env[i];if(t)try{let{createE2BProvider:s}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===f()&&delete process.env.E2B_API_URL,s({apiKey:t})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${i} is set but @evolvingmachines/e2b failed to load.
10
10
  Try reinstalling: npm install @evolvingmachines/evolve`):d}let e=process.env[j$1];if(e)try{let{createDaytonaProvider:s}=await import('@evolvingmachines/daytona');return s({apiKey:e})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${j$1} is set but @evolvingmachines/daytona failed to load.
11
11
  Try installing: npm install @evolvingmachines/daytona`):d}let n=process.env[k],r=process.env[l];if(n&&r)try{let{createModalProvider:s}=await import('@evolvingmachines/modal');return s({tokenId:n,tokenSecret:r})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${k} is set but @evolvingmachines/modal failed to load.
12
12
  Try installing: npm install @evolvingmachines/modal`):d}let i$1=process.env[h];if(i$1)return Ae(i$1);throw new Error(`No sandbox provider configured. Either:
@@ -14,7 +14,7 @@ Try installing: npm install @evolvingmachines/modal`):d}let i$1=process.env[h];i
14
14
  2. Set ${i} environment variable (direct E2B access, get key at https://e2b.dev)
15
15
  3. Set ${j$1} environment variable (direct Daytona access, get key at https://app.daytona.io)
16
16
  4. Set ${k} and ${l} environment variables (direct Modal access, get tokens at https://modal.com/settings/tokens)
17
- 5. Pass sandbox explicitly: .withSandbox(provider)`)}function Sa(t){return new Promise(e=>setTimeout(e,t))}async function B(t,e,n=0){let r=xa(e),i=e?.onItemRetry,s=null,d=0,p=r.backoffMs;for(;d<r.maxAttempts;){if(d++,s=await t(d),!r.retryOn(s))return s;if(d>=r.maxAttempts)break;if(i){let l=s.error??"Unknown error";i(n,d,l);}await Sa(p),p*=r.backoffMultiplier;}return s}function xa(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var ni=`## FILESYSTEM INSTRUCTIONS:
17
+ 5. Pass sandbox explicitly: .withSandbox(provider)`)}function _a(t){return new Promise(e=>setTimeout(e,t))}async function B(t,e,n=0){let r=Ra(e),i=e?.onItemRetry,s=null,d=0,u=r.backoffMs;for(;d<r.maxAttempts;){if(d++,s=await t(d),!r.retryOn(s))return s;if(d>=r.maxAttempts)break;if(i){let l=s.error??"Unknown error";i(n,d,l);}await _a(u),u*=r.backoffMultiplier;}return s}function Ra(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var oi=`## FILESYSTEM INSTRUCTIONS:
18
18
 
19
19
  You are running in a sandbox environment.
20
20
 
@@ -47,7 +47,7 @@ Examples:
47
47
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
48
48
  - "Write a Python script" \u2192 \`output/parser.py\`
49
49
  - "Convert this to JSON" \u2192 \`output/data.json\`
50
- `;var ri=`## FILESYSTEM INSTRUCTIONS:
50
+ `;var ai=`## FILESYSTEM INSTRUCTIONS:
51
51
 
52
52
  You are running in a sandbox environment.
53
53
 
@@ -81,9 +81,9 @@ Examples:
81
81
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
82
82
  - "Write a Python script" \u2192 \`output/parser.py\`
83
83
  - "Convert this to JSON" \u2192 \`output/data.json\`
84
- `;var ii=`## SYSTEM PROMPT
84
+ `;var li=`## SYSTEM PROMPT
85
85
 
86
- {{systemPrompt}}`;var si=`## STRUCTURED OUTPUT
86
+ {{systemPrompt}}`;var ci=`## STRUCTURED OUTPUT
87
87
 
88
88
  Your final result MUST be saved to \`output/result.json\` following this schema:
89
89
 
@@ -101,13 +101,13 @@ You are free to:
101
101
  But your final \`output/result.json\` MUST conform to the schema above.
102
102
 
103
103
  ### OUTPUT RESULTS (DELIVERABLES) MUST BE WRITTEN to \`output/result.json\` as files.
104
- ### Never just state results as text.`;var oi=`## BROWSER AUTOMATION
104
+ ### Never just state results as text.`;var di=`## BROWSER AUTOMATION
105
105
 
106
106
  Actionbook is preconfigured for remote browser automation in this environment. When browser automation is needed, start sessions with \`actionbook browser start --session s1\`, then use normal Actionbook browser commands. Do not override the configured browser mode or browser endpoint unless the user explicitly asks.
107
- `;var ai=`## Browser Automation
107
+ `;var pi=`## Browser Automation
108
108
 
109
109
  The agent-browser CDP connection is already configured. Use normal \`agent-browser\` commands when browser automation is needed.
110
- `;var li=`### 1. YOUR ROLE: BEST OF N JUDGE
110
+ `;var ui=`### 1. YOUR ROLE: BEST OF N JUDGE
111
111
 
112
112
  You are a judge. {{candidateCount}} AI workers attempted the same task independently. Your job is to analyze their solution attempts and pick the best one based on the evaluation criteria below.
113
113
 
@@ -137,7 +137,7 @@ You must judge their work based on:
137
137
  5. Pick the best candidate (0-indexed)
138
138
 
139
139
  **IMPORTANT:** Be thorough. Do not skip steps. Your judgment must be evidence-based \u2014 cite specific files, outputs, or discrepancies to justify your decision.
140
- `;var ci=`### 1. YOUR ROLE: OUTPUT VERIFIER
140
+ `;var gi=`### 1. YOUR ROLE: OUTPUT VERIFIER
141
141
 
142
142
  You are a quality verifier. An AI worker produced output for a task. Your job is to verify whether the output meets the specified quality criteria.
143
143
 
@@ -170,14 +170,14 @@ The output must satisfy:
170
170
  **IMPORTANT:** Be thorough and fair. Cite specific evidence. If the output generally achieves the goal with minor issues, consider passing. Only fail if there are significant problems that violate the criteria.
171
171
 
172
172
  If failing, provide specific, actionable feedback explaining what needs to be fixed.
173
- `;var di=`### CONTEXT STRUCTURE
173
+ `;var fi=`### CONTEXT STRUCTURE
174
174
 
175
175
  \`\`\`
176
176
  {{fileTree}}
177
177
  \`\`\`
178
178
 
179
179
  Examine all files within each item folder before producing your output.
180
- `;var ui="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var pi="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var gi=`{{originalPrompt}}
180
+ `;var mi="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var hi="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var yi=`{{originalPrompt}}
181
181
 
182
182
  ## IMPORTANT: Previous Attempt Failed Verification
183
183
 
@@ -186,30 +186,30 @@ Your previous attempt did not pass quality verification. Please address this fee
186
186
  {{feedback}}
187
187
 
188
188
  Make sure your output addresses all the feedback points above.
189
- `;var fi=ni,mi=ri,hi=ii,yi=si,In=oi,wi=ai,An=li,vi=ui,On=ci,bi=pi,ki=di,Mn=gi;function Z(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:n)}function Un(t){let e=t.mode==="swe"?mi:fi,n=Z(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
189
+ `;var wi=oi,vi=ai,bi=li,ki=ci,In=di,Si=pi,An=ui,xi=mi,On=gi,Ci=hi,Ei=fi,Mn=yi;function Z(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:n)}function $n(t){let e=t.mode==="swe"?vi:wi,n=Z(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
190
190
 
191
191
 
192
192
  ${t.browserPrompt.trim()}`),t.systemPrompt&&(n+=`
193
193
 
194
194
 
195
- ${Z(hi,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=F(t.schema)?ce(t.schema):de(t.schema);n+=`
195
+ ${Z(bi,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=N(t.schema)?ce(t.schema):de(t.schema);n+=`
196
196
 
197
197
 
198
- ${Z(yi,{schema:r}).trim()}`;}return n}function kt(t){let e=[...new Set(Object.keys(t).map(l=>l.split("/")[0]))].sort((l,o)=>l==="worker_task"?-1:o==="worker_task"?1:l.localeCompare(o));if(!e.length)return `context/
199
- (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,i=Object.keys(t).some(l=>l.startsWith("worker_task/input/")),s=[];e.forEach((l,o)=>{let a=o===e.length-1,c=a?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",u=a?" ":"\u2502 ";if(l==="worker_task"){s.push({line:`${c}${l}/`,comment:"task given to worker"});let g=[];n&&g.push({name:"system_prompt.txt",comment:"worker system prompt"}),g.push({name:"user_prompt.txt",comment:"worker task prompt"}),r&&g.push({name:"schema.json",comment:"expected output schema"}),i&&g.push({name:"input/",comment:"worker input files"}),g.forEach((f,h)=>{let y=h===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";s.push({line:`${u}${y}${f.name}`,comment:f.comment});});}else if(l.startsWith("candidate_")){let g=l.replace("candidate_","");s.push({line:`${c}${l}/`,comment:`worker ${g} solution`});}else if(l==="worker_output")s.push({line:`${c}${l}/`,comment:"output to verify"});else if(l.startsWith("item_")){let g=l.replace("item_","");s.push({line:`${c}${l}/`,comment:`input ${g}`});}else s.push({line:`${c}${l}/`,comment:""});});let d=Math.max(...s.map(l=>l.line.length)),p=["context/"];for(let l of s)if(l.comment){let o=" ".repeat(d-l.line.length+3);p.push(`${l.line}${o}# ${l.comment}`);}else p.push(l.line);return p.join(`
200
- `)}var Si=join(homedir(),w),Oe=class{tag;timestamp;provider;agent;model;sandboxId;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;warnedKeys=new Set;localQueue=Promise.resolve();dirReady=mkdir(Si,{recursive:true}).catch(()=>{});eventBuffer=[];dashboardQueue=Promise.resolve();flushTimer;constructor(e){this.validateConfig(e),this.provider=e.provider,this.agent=e.agent,this.model=e.model,this.sandboxId=e.sandboxId,this.apiKey=e.apiKey,this.dashboardUrl=b(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${randomBytes(8).toString("hex")}`,this.timestamp=new Date().toISOString();let n=this.timestamp.replace(/[:.]/g,"-"),r=`${this.tag}_${this.provider}_${this.sandboxId}_${this.agent}_${n}.jsonl`;this.localFilePath=join(Si,r),this.parser=ne(e.agent);}getTag(){return this.tag}getTimestamp(){return this.timestamp}writePrompt(e){this.isClosed||this.write({_prompt:{text:e}});}writeEventParsed(e,n){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey&&n))for(let r of n)this.bufferForDashboard(r);}writeEvent(e){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey)){let n=this.parser(e);if(n)for(let r of n)this.bufferForDashboard(r);}}async flush(){await this.localQueue,await this.dashboardQueue,this.apiKey&&this.eventBuffer.length>0&&(this.flushDashboard(),await this.dashboardQueue);}async close(){this.isClosed||(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.write({_sessionEnd:{timestamp:new Date().toISOString()}}),this.isClosed=true,await this.flush());}writeLocalLine(e){this.metaWritten||this.writeMeta();let n=e.endsWith(`
198
+ ${Z(ki,{schema:r}).trim()}`;}return n}function St(t){let e=[...new Set(Object.keys(t).map(l=>l.split("/")[0]))].sort((l,o)=>l==="worker_task"?-1:o==="worker_task"?1:l.localeCompare(o));if(!e.length)return `context/
199
+ (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,i=Object.keys(t).some(l=>l.startsWith("worker_task/input/")),s=[];e.forEach((l,o)=>{let a=o===e.length-1,c=a?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",p=a?" ":"\u2502 ";if(l==="worker_task"){s.push({line:`${c}${l}/`,comment:"task given to worker"});let g=[];n&&g.push({name:"system_prompt.txt",comment:"worker system prompt"}),g.push({name:"user_prompt.txt",comment:"worker task prompt"}),r&&g.push({name:"schema.json",comment:"expected output schema"}),i&&g.push({name:"input/",comment:"worker input files"}),g.forEach((f,h)=>{let y=h===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";s.push({line:`${p}${y}${f.name}`,comment:f.comment});});}else if(l.startsWith("candidate_")){let g=l.replace("candidate_","");s.push({line:`${c}${l}/`,comment:`worker ${g} solution`});}else if(l==="worker_output")s.push({line:`${c}${l}/`,comment:"output to verify"});else if(l.startsWith("item_")){let g=l.replace("item_","");s.push({line:`${c}${l}/`,comment:`input ${g}`});}else s.push({line:`${c}${l}/`,comment:""});});let d=Math.max(...s.map(l=>l.line.length)),u=["context/"];for(let l of s)if(l.comment){let o=" ".repeat(d-l.line.length+3);u.push(`${l.line}${o}# ${l.comment}`);}else u.push(l.line);return u.join(`
200
+ `)}var Ti=join(homedir(),w),Ja=/^[A-Za-z0-9_-]{1,32}$/,Oe=class{tag;timestamp;provider;agent;model;reasoningEffort;sandboxId;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;warnedKeys=new Set;localQueue=Promise.resolve();dirReady=mkdir(Ti,{recursive:true}).catch(()=>{});eventBuffer=[];dashboardQueue=Promise.resolve();flushTimer;constructor(e){this.validateConfig(e),this.provider=e.provider,this.agent=e.agent,this.model=e.model,this.reasoningEffort=e.reasoningEffort,this.sandboxId=e.sandboxId,this.apiKey=e.apiKey,this.dashboardUrl=b(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${randomBytes(8).toString("hex")}`,this.timestamp=new Date().toISOString();let n=this.timestamp.replace(/[:.]/g,"-"),r=`${this.tag}_${this.provider}_${this.sandboxId}_${this.agent}_${n}.jsonl`;this.localFilePath=join(Ti,r),this.parser=ne(e.agent);}getTag(){return this.tag}getTimestamp(){return this.timestamp}writePrompt(e){this.isClosed||this.write({_prompt:{text:e}});}writeEventParsed(e,n){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey&&n))for(let r of n)this.bufferForDashboard(r);}writeEvent(e){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey)){let n=this.parser(e);if(n)for(let r of n)this.bufferForDashboard(r);}}async flush(){await this.localQueue,await this.dashboardQueue,this.apiKey&&this.eventBuffer.length>0&&(this.flushDashboard(),await this.dashboardQueue);}async close(){this.isClosed||(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.write({_sessionEnd:{timestamp:new Date().toISOString()}}),this.isClosed=true,await this.flush());}writeLocalLine(e){this.metaWritten||this.writeMeta();let n=e.endsWith(`
201
201
  `)?e:e+`
202
202
  `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{});}bufferForDashboard(e){this.eventBuffer.push(e),this.scheduleFlush();}write(e){this.metaWritten||this.writeMeta();let n=JSON.stringify(e)+`
203
203
  `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&(this.eventBuffer.push(e),this.scheduleFlush());}writeMeta(){let e={_meta:{tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,sandbox_id:this.sandboxId,timestamp:this.timestamp,...this.annotations()}},n=JSON.stringify(e)+`
204
- `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&this.eventBuffer.push(e),this.metaWritten=true;}async appendLocal(e){try{await this.dirReady,await appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=y){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},z$2));}flushDashboard(){if(!this.apiKey||this.eventBuffer.length===0)return;let e=this.eventBuffer.splice(0);this.dashboardQueue=this.dashboardQueue.then(()=>this.sendToDashboard(e)).catch(()=>{});}async sendToDashboard(e){let n={tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,sandboxId:this.sandboxId,timestamp:this.timestamp,...this.annotations(),events:e};for(let r=1;r<=A$1;r++)try{let i=await fetch(`${this.dashboardUrl}/api/sessions/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(i.ok)return;if(i.status===429||i.status===401||i.status>=500){if(r===A$1){console.debug(`[SessionLogger] Dashboard ${i.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay(B$1*r);continue}console.debug(`[SessionLogger] Dashboard ${i.status}, dropping events`);return}catch(i){r===A$1?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",i),this.requeueEvents(e)):await this.delay(B$1*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}validateConfig(e){let n=b();if(e.apiKey&&!n.startsWith("https://")&&!n.includes("localhost")&&!n.includes("127.0.0.1"))throw new Error("Dashboard URL must use HTTPS when API key is provided")}delay(e){return new Promise(n=>setTimeout(n,e))}annotations(){if(!this.observability)return {};let e={};for(let[n,r]of Object.entries(this.observability))if(r!==void 0){if(x.includes(n)){this.warnedKeys.has(n)||(this.warnedKeys.add(n),console.warn(`[SessionLogger] observability key "${n}" is reserved for session identity \u2014 ignoring it.`));continue}e[n]=r;}return e}};function Me(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Ue(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("EVOLVE_API_KEY is required for managed integrations");return e}async function $e(t){return await t.text().catch(()=>"")}function $n(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function Fa(t){let e=Array.from(new Set((t??[]).map(n=>n.trim()).filter(Boolean)));if(e.length===0)throw new Error("withIntegrations() requires at least one app");return e}async function Ci(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:$n(t.userId),apps:Fa(t.apps),tools:t.tools,accounts:t.accounts,keys:t.keys,authConfigs:t.authConfigs,sessionTag:t.sessionTag}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integrations session create failed (${e.status}): ${await $e(e)}`);let n=await e.json();if(!n.mcp?.url)throw new Error("Managed integrations response missing mcp.url");return {url:n.mcp.url,headers:n.mcp.headers??{}}}async function Ka(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:$n(t.userId),app:t.app,accountLabel:t.accountLabel}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration connect failed (${e.status}): ${await $e(e)}`);return await e.json()}async function ja(t){let e=Array.from(new Set((t.userIds??[]).map(d=>$n(d))));if(e.length===0)throw new Error("Integration accounts.list() requires at least one userId");let n=new URLSearchParams({userIds:e.join(",")});t.app&&n.set("app",t.app),t.statuses?.length&&n.set("statuses",t.statuses.join(","));let r={Authorization:`Bearer ${Ue(t.apiKey)}`,accept:"application/json"},i=await fetch(`${Me(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new Error(`Managed integration status failed (${i.status}): ${await $e(i)}`);return ((await i.json()).accounts??[]).map(d=>({userId:String(d.userId??""),app:String(d.app??""),appName:typeof d.appName=="string"?d.appName:void 0,appIcon:typeof d.appIcon=="string"?d.appIcon:void 0,accountLabel:typeof d.accountLabel=="string"?d.accountLabel:void 0,status:String(d.status??""),accountId:typeof d.accountId=="string"?d.accountId:void 0,updatedAt:typeof d.updatedAt=="string"?d.updatedAt:void 0}))}async function Va(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId,accountLabel:t.accountLabel}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account update failed (${e.status}): ${await $e(e)}`);return await e.json()}async function Ga(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account delete failed (${e.status}): ${await $e(e)}`);return await e.json()}var Ei={auth:Ka,accounts:{list:ja,update:Va,delete:Ga}};promisify(exec);var Kn=promisify(execFile),Ri=Symbol.for("evolve:awsSdkCache"),Pi=Symbol.for("evolve:s3ClientCache");var tl=3600,nl=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function rl(t){if(t.startsWith("s3://")){let i=t.slice(5),s=i.indexOf("/");return s===-1?{bucket:i,prefix:""}:{bucket:i.slice(0,s),prefix:i.slice(s+1).replace(/\/+$/,"")}}let e=new URL(t),n=e.hostname,r=e.pathname.split("/").filter(Boolean);if(n.includes(".s3.")&&n.endsWith(".amazonaws.com"))return {bucket:n.split(".s3.")[0],prefix:r.join("/")};if(r.length===0)throw new Error(`Invalid storage URL: no bucket in path. Expected https://endpoint/bucket/prefix, got ${t}`);return {bucket:r[0],prefix:r.slice(1).join("/"),endpoint:`${e.protocol}//${e.host}`}}function xt(t,e,n,r){if(!t?.url&&!t?.bucket){if(!e)throw new Error("Storage requires either a URL (BYOK mode) or gateway API key. Use .withStorage({ url: 's3://bucket/prefix' }) or configure EVOLVE_API_KEY for gateway mode.");return {bucket:"",prefix:"",region:t?.region||"us-east-1",mode:"gateway",gatewayUrl:n,gatewayApiKey:r}}let i=t?.bucket||"",s=t?.prefix||"",d=t?.endpoint;if(t?.url){let p=rl(t.url);i=i||p.bucket,s=s||p.prefix,d=d||p.endpoint;}if(!i)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:i,prefix:s,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:d,credentials:t?.credentials,mode:"byok"}}function Dn(t){if(t.includes(".."))throw new Error(`settingsDir must not contain '..': ${t}`);let e;if(t.startsWith("~/"))e=t.slice(2);else if(t.startsWith("/home/user/"))e=t.slice(11);else if(t.startsWith("."))e=t;else throw new Error(`Unexpected settingsDir: ${t}. Expected ~/ or /home/user/ prefix.`);if(!e||e.startsWith("/"))throw new Error(`settingsDir resolves to invalid path: ${t}`);return e}function il(t){if(t.includes(".."))throw new Error(`workingDir must not contain '..': ${t}`);if(!t.startsWith("/home/user/"))throw new Error(`Unexpected workingDir: ${t}. Must start with /home/user/.`);let e=t.slice(11).replace(/\/+$/,"");if(!e||e.startsWith("/")||e.includes("//"))throw new Error(`workingDir resolves to invalid path: ${t}`);return e}function De(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function sl(t,e){let n=D(t),r=il(e),i=n.checkpointDirs?.length?n.checkpointDirs.map(p=>Dn(p)):[Dn(n.mcpConfig.settingsDir)],s=[...nl.map(p=>`--exclude=${De(p)}`),`--exclude=${De(r+"/temp")}`,...(n.checkpointExcludes??[]).map(p=>`--exclude=${De(Dn(p))}`)].join(" "),d=[De(r+"/"),...i.map(p=>De(p+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${s} ${d}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function he(){let t=globalThis[Ri];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,i]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[Ri]={s3:r,presigner:i},{s3:r,presigner:i}}catch{throw new Error("Storage requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner. Install: npm i @aws-sdk/client-s3 @aws-sdk/s3-request-presigner")}}async function Le(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[Pi];if(r?.key===n)return r.client;let{s3:i}=await he(),s=new i.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[Pi]={client:s,key:n},s}async function Li(t,e,n){let{s3:r,presigner:i}=await he(),s=await Le(t),d=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return i.getSignedUrl(s,d,{expiresIn:tl})}async function Ii(t,e){let{s3:n}=await he(),r=await Le(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(i){let s=i?.name||i?.message||"";if(i?.$metadata?.httpStatusCode===404||s==="NotFound"||s==="NoSuchKey")return false;throw i}}async function Ni(t,e){let{s3:n}=await he(),s=await(await(await Le(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!s)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(s)}async function ol(t,e,n){let{s3:r}=await he();await(await Le(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function Fi(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function Ki(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function al(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function ji(t,e,n,r){let i=await fetch(`${t.gatewayUrl}/api/checkpoints/presign`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify({tag:e,hash:n,action:r})});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway presign failed (${i.status}): ${s}`)}return i.json()}async function ll(t,e){let n=await fetch(`${t.gatewayUrl}/api/checkpoints`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify(e)});if(!n.ok){let r=await n.text().catch(()=>"");throw new Error(`Gateway checkpoint create failed (${n.status}): ${r}`)}return n.json()}async function cl(t,e){let n=await fetch(`${t.gatewayUrl}/api/checkpoints/${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!n.ok){if(n.status===404)throw new Error(`Checkpoint ${e} not found`);let r=await n.text().catch(()=>"");throw new Error(`Gateway checkpoint get failed (${n.status}): ${r}`)}return n.json()}async function jn(t,e,n,r,i){let s=new Date().toISOString(),d=sl(n,r),p=await t.commands.run(d,{timeoutMs:12e4});if(p.exitCode!==0)throw new Error(`Checkpoint tar failed: ${p.stderr}`);let l=p.stdout.trim().split(`
205
- `).pop()?.trim();if(!l||l.length!==64)throw new Error(`Invalid checkpoint hash: ${l}`);let o=await t.commands.run("stat -c '%s' /tmp/evolve-ckpt.tar.gz 2>/dev/null || stat -f '%z' /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4}),a=parseInt(o.stdout.trim(),10),c=Number.isNaN(a)?void 0:a,u;try{if(e.mode==="byok"){let g=Fi(e,l);if(!await Ii(e,g)){let m=await Li(e,g,"put"),y=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${m}"`,{timeoutMs:3e5});if(y.exitCode!==0)throw new Error(`Checkpoint upload failed: ${y.stderr}`);if(!await Ii(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}u=al();let h={id:u,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment,sandboxId:t.sandboxId};await ol(e,Ki(e,u),h);}else {let g=await ji(e,i.tag,l,"put");if(!g.alreadyExists){let h=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${g.url}"`,{timeoutMs:3e5});if(h.exitCode!==0)throw new Error(`Checkpoint upload failed: ${h.stderr}`)}u=(await ll(e,{tag:i.tag,hash:l,sizeBytes:c??0,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:u,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment}}async function Vi(t,e,n){let r=await Gn(e,n),i=r.hash,s={agentType:r.agentType,workspaceMode:r.workspaceMode},d=await Wi(e,r),p=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${d}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(p.exitCode!==0)throw new Error(`Checkpoint download failed: ${p.stderr}`);let l=p.stdout.trim().split(`
206
- `).pop()?.trim();if(l!==i)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${i}, got ${l})`);let o=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(o.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${o.stderr}`);return s}function Gi(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||s,i=!t.url&&!t.bucket&&!!n;return xt(t,i,r,n)}async function Ji(t,e){let{s3:n}=await he(),r=await Le(t),s=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,d=[],p;do{let u={Bucket:t.bucket,Prefix:s,...p&&{ContinuationToken:p}},g=await r.send(new n.ListObjectsV2Command(u));if(g.Contents)for(let f of g.Contents)f.Key?.endsWith(".json")&&f.LastModified&&d.push({key:f.Key,lastModified:f.LastModified});p=g.IsTruncated?g.NextContinuationToken:void 0;}while(p);if(d.length===0)return [];d.sort((u,g)=>{let f=g.lastModified.getTime()-u.lastModified.getTime();return f!==0?f:g.key<u.key?-1:g.key>u.key?1:0});let o=!!e?.tag?d:e?.limit?d.slice(0,e.limit):d,c=(await Promise.all(o.map(async u=>{try{return await Ni(t,u.key)}catch{return null}}))).filter(u=>u!==null);return e?.tag&&(c=c.filter(u=>u.tag===e.tag)),e?.limit&&c.length>e.limit&&(c=c.slice(0,e.limit)),c}async function zi(t,e){let n=new URLSearchParams;e?.limit&&n.set("limit",String(e.limit)),e?.tag&&n.set("tag",e.tag);let r=`${t.gatewayUrl}/api/checkpoints${n.toString()?`?${n}`:""}`,i=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${i.status}): ${s}`)}return i.json()}function dl(t){return t&&t>0?Math.min(t,500):100}async function Vn(t,e){return t.mode==="byok"?(await Ji(t,{limit:1,tag:e?.tag}))[0]??null:(await zi(t,{limit:1,tag:e?.tag}))[0]??null}async function Gn(t,e){if(t.mode==="byok"){let n=Ki(t,e);try{return await Ni(t,n)}catch(r){throw ul(r)?new Error(`Checkpoint ${e} not found`):r}}else return await cl(t,e)}async function Ai(t,e,n){if(e==="latest"){let r=await Vn(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function Wi(t,e){if(t.mode==="byok")return Li(t,Fi(t,e.hash),"get");{let n=await ji(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function Hi(t){return !(!t||isAbsolute(t)||t.startsWith("-")||normalize(t).startsWith("..")||t.includes("\0"))}function Oi(t,e){let n=resolve(t,e),r=resolve(t),i=relative(r,n);if(i.startsWith("..")||isAbsolute(i))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function ul(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function Bn(t){let e=t.filter(n=>!Hi(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var qi=10*1024*1024,Mi=false;async function Yi(){if(!Mi)try{await Kn("tar",["--version"]),Mi=!0;}catch{throw new Error("The 'tar' command is not available on this system. Storage download/extract requires tar (available on macOS, Linux, and Windows with Git Bash or WSL).")}}async function Ui(t,e){let n=await Gn(t,e),r=await Wi(t,n),i=e.replace(/[^a-zA-Z0-9_-]/g,"_"),s=join(tmpdir(),`evolve-dl-${i}-${Date.now()}.tar.gz`),d=await fetch(r);if(!d.ok)throw new Error(`Checkpoint download failed (${d.status})`);if(!d.body)throw new Error("Checkpoint download returned empty body");let p=createHash("sha256"),l=createWriteStream(s);try{let a=d.body.getReader();await new Promise((c,u)=>{l.on("error",u),l.on("finish",c);async function g(){for(;;){let{done:f,value:h}=await a.read();if(f){l.end();break}p.update(h),l.write(h)||await new Promise(m=>l.once("drain",m));}}g().catch(u);});}catch(a){throw l.destroy(),await unlink(s).catch(()=>{}),a}let o=p.digest("hex");if(o!==n.hash)throw await unlink(s).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${o})`);return {tmpPath:s,metadata:n}}var Fn=class extends Error{constructor(n){super(`Could not read a file path out of this 'tar -tvzf' line: ${JSON.stringify(n)}. The listing is produced by the tar on THIS machine, so an unrecognised layout means an unsupported tar variant (busybox, a very old BSD tar) rather than a corrupt archive. Refusing to return a partial file list.`);this.line=n;this.name="TarListingParseError";}},pl={LC_ALL:"C",LANG:"C"};function gl(t){let e=[],n=[],r=[];for(let i of t.trim().split(`
207
- `)){if(!i||i.startsWith("total "))continue;let s=i[0];if(s!=="-"&&s!=="d"&&s!=="l")throw new Error(`Archive contains unsupported entry type: "${s}"`);let d=i.match(/\d{2}:\d{2}\s+(.+)/)??i.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!d)throw new Fn(i);let p=d[1];if(s==="l"){let l=p.indexOf(" -> ");l!==-1&&(p=p.slice(0,l)),e.push(p);}else s==="d"?n.push(p.replace(/\/$/,"")):r.push(p);}return {filePaths:r,dirPaths:n,symlinkPaths:[...new Set(e)]}}async function $i(t){await Yi();let{stdout:e}=await Kn("tar",["-tvzf",t],{maxBuffer:qi,env:{...process.env,...pl}}),{filePaths:n,dirPaths:r,symlinkPaths:i}=gl(e);return Bn(r),Bn(i),Bn(n)}async function Ln(t,e,n){await Yi(),await mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await Kn("tar",r,{maxBuffer:qi});}function fl(t){let e="^",n=0;for(;n<t.length;){let r=t[n];r==="*"&&t[n+1]==="*"?t[n+2]==="/"?(e+="(?:.*/)?",n+=3):(e+=".*",n+=2):r==="*"?(e+="[^/]*",n++):r==="?"?(e+="[^/]",n++):".+^${}()|[]\\".includes(r)?(e+="\\"+r,n++):(e+=r,n++);}return e+="$",new RegExp(e)}function Jn(t,e){let n=Gi(t,e);return Zi(n)}function ml(t){let e=Gi(t||{});return Zi(e)}function Zi(t){return {async listCheckpoints(e){let n=dl(e?.limit);return t.mode==="byok"?Ji(t,{limit:n,tag:e?.tag}):zi(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return Gn(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,i=n?.to||process.cwd(),s=await Ai(t,e),{tmpPath:d,metadata:p}=await Ui(t,s);try{if(r)return await mkdir(i,{recursive:!0}),await $i(d),await Ln(d,i),i;{await mkdir(i,{recursive:!0});let l=join(i,`checkpoint-${p.id}.tar.gz`);return await copyFile(d,l),l}}finally{await unlink(d).catch(()=>{});}},async downloadFiles(e,n){let r=await Ai(t,e),{tmpPath:i}=await Ui(t,r),s;try{let d=await $i(i),p;if(n?.files){let o=n.files.filter(c=>!Hi(c));if(o.length>0)throw new Error(`Unsafe file path requested: ${o[0]}`);let a=new Set(n.files);p=d.filter(c=>a.has(c));}else if(n?.glob){let o=n.glob.map(fl);p=d.filter(a=>o.some(c=>c.test(a)));}else p=d;if(p.length===0)return {};s=join(tmpdir(),`evolve-extract-${Date.now()}`);try{await Ln(i,s,p);}catch(o){let a=o?.message??"";if(!a.includes("E2BIG")&&!a.includes("Argument list too long")&&!a.includes("ENAMETOOLONG"))throw o;await rm(s,{recursive:!0,force:!0}).catch(()=>{}),s=join(tmpdir(),`evolve-extract-${Date.now()}`),await Ln(i,s);}let l={};return await Promise.all(p.map(async o=>{Oi(s,o),l[o]=await readFile(join(s,o));})),n?.to&&(await mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(l).map(async([o,a])=>{Oi(n.to,o);let c=join(n.to,o);await mkdir(dirname(c),{recursive:!0}),await writeFile(c,a);}))),l}finally{s&&await rm(s,{recursive:true,force:true}).catch(()=>{}),await unlink(i).catch(()=>{});}}}}function Q(t){return `'${t.replace(/'/g,"'\\''")}'`}function Ct(t){return typeof t=="string"&&t.length>0}function ye(t,e,n){let r=t[e];if(!Ct(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function hl(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
208
- ${n}`)}function yl(t,e){switch(t){case "droid":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`droid plugin marketplace add ${Q(n)}`,`droid plugin install ${Q(r)} --scope user`]}case "claude":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`claude plugin marketplace add ${Q(n)} --scope user`,`claude plugin install ${Q(r)} --scope user`]}case "gemini":{let n=ye(e,"source",t),r=e,i=[`gemini extensions install ${Q(n)}`];return Ct(r.ref)&&i.push(`--ref ${Q(r.ref)}`),r.autoUpdate===true&&i.push("--auto-update"),r.preRelease===true&&i.push("--pre-release"),i.push("--consent"),r.skipSettings===true&&i.push("--skip-settings"),[i.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=ye(e,"marketplace",t),r=e,i=[`codex plugin marketplace add ${Q(n)}`];if(Ct(r.ref)&&i.push(`--ref ${Q(r.ref)}`),Array.isArray(r.sparse))for(let s of r.sparse){if(!Ct(s))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");i.push(`--sparse ${Q(s)}`);}return [i.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function Qi(t,e,n){if(n?.length)for(let r of n){let i=yl(t,r);for(let s of i){let d=await e.commands.run(s,{timeoutMs:12e4});if(d.exitCode!==0)throw hl(s,d)}}}var ns="/home/user/.agent-browser",Xi=`${ns}/config.json`,rs="/home/user/.actionbook",vl=`${rs}/config.toml`;function es(t){return t==="actionbook"||t==="agent-browser"}function bl(t){return t.remote===true}function ts(t){if(t==null)return;if(typeof t!="string")throw new Error("browser profile must be a string");let e=t.trim();if(!e)throw new Error("browser profile cannot be empty");return e}function is(t){if(typeof t=="string"){if(t==="browser-use")return {provider:"browser-use",managed:false};if(es(t))return {provider:t,managed:false};throw new Error("Unsupported browser configuration")}if(t.provider===void 0)return {provider:"agent-browser",managed:t.remote!==false,profile:ts(t.profile)};if(es(t.provider))return {provider:t.provider,managed:bl(t),profile:ts(t.profile)};throw new Error("Unsupported browser configuration")}function zn(t,e){return t==="actionbook"?{envs:{},files:[{path:vl,data:stringify({version:1,browser:{mode:"cloud",cdp_endpoint:e.cdpUrl}}).trimEnd()+`
209
- `}],directories:[rs]}:{envs:{AGENT_BROWSER_CONFIG:Xi},files:[{path:Xi,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
210
- `}],directories:[ns]}}function ss(t){return (t?.dashboardUrl||s).replace(/\/$/,"")}async function os(t){return await t.text().catch(()=>"")}async function as(t,e,n={}){let r=await fetch(`${ss(t)}/api/browser-sessions`,{method:"POST",headers:{Authorization:`Bearer ${t.apiKey}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({sessionTag:e,options:{remote:true},browserAuth:n.browserCredentials===true,...t.profile?{profile:t.profile}:{}}),signal:AbortSignal.timeout(3e4)});if(!r.ok)throw new Error(`Managed browser session create failed (${r.status}): ${await os(r)}`);let i=await r.json();if(!i.id||!i.sessionId||!i.cdpUrl||!i.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:i.id,sessionId:i.sessionId,sessionTag:i.sessionTag,cdpUrl:i.cdpUrl,liveUrl:i.liveUrl,browserAuthGrantToken:i.browserAuthGrantToken}}async function ls(t,e){let n=await fetch(`${ss(t)}/api/browser-sessions/${encodeURIComponent(e.id)}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.apiKey}`,accept:"application/json"},signal:AbortSignal.timeout(5e3)});if(!n.ok&&n.status!==404)throw new Error(`Managed browser session stop failed (${n.status}): ${await os(n)}`)}var xl="RSA-OAEP-256",Wn="browser-login";function Cl(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function El(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("Browser credentials require EVOLVE_API_KEY or an explicit apiKey");return e}async function Tl(t){return await t.text().catch(()=>"")}async function Ne(t,e,n={}){let r=await fetch(`${Cl(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${El(t?.apiKey)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Error(`Browser credentials request failed (${r.status}): ${await Tl(r)}`);return await r.json()}async function _l(t,e){let n=await Ne(t,"/api/browser-credentials/public-key"),r=publicEncrypt({key:n.publicKey,padding:constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:xl,keyId:n.id,ciphertext:r.toString("base64url")}}var Et=class{constructor(e={}){this.config=e;}toMetadata(e){let{account_label:n,...r}=e;return {...r,accountLabel:n}}async list(e={}){let n=new URLSearchParams;e.website&&n.set("website",e.website),e.limit!==void 0&&n.set("limit",String(e.limit)),e.offset!==void 0&&n.set("offset",String(e.offset));let r=n.toString()?`?${n.toString()}`:"",i=await Ne(this.config,`/api/browser-credentials${r}`);return {credentials:i.credentials.map(s=>this.toMetadata(s)),total:i.total,count:i.count,offset:i.offset,hasMore:i.has_more??i.offset+i.count<i.total}}async create(e){let n=await _l(this.config,e.password),r=await Ne(this.config,"/api/browser-credentials",{method:"POST",body:JSON.stringify({website:e.website,account_label:e.accountLabel,email:e.email,encryptedPassword:n})});return {status:r.status,credential:this.toMetadata(r.credential)}}async delete(e){let n="id"in e?e:{website:e.website,account_label:e.accountLabel};return await Ne(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function Hn(t={}){return new Et(t)}async function cs(t){return (await Ne({apiKey:t.apiKey,dashboardUrl:t.dashboardUrl},"/api/browser-login/mcp-config",{method:"POST",body:JSON.stringify({browserSessionId:t.browserSessionId,sessionTag:t.sessionTag,grantToken:t.grantToken,allow:Rl(t.config)})})).server}function Rl(t){return t?.allow?.map(e=>({website:e.website,...e.accountLabel||e.account_label?{account_label:e.accountLabel||e.account_label}:{}}))}var qn="x-evolve-provider-runtime-binding";function Pl(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}async function Il(t){return await t.text().catch(()=>"")}var Fe=class extends Error{constructor(n,r){super(r);this.status=n;this.name="ProviderRuntimeTokenRequestError";}};function ds(t){return t instanceof Fe&&t.status===404}async function Yn(t,e,n={}){let r=await fetch(`${Pl(t.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${t.apiKey}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Fe(r.status,`Provider runtime token request failed (${r.status}): ${await Il(r)}`);return await r.json()}function Al(t){if(!t||typeof t!="object"||Array.isArray(t))return false;let e=t;return e.enabled===true&&(e.provider==="anthropic"||e.provider==="openai"||e.provider==="gemini"||e.provider==="dashscope"||e.provider==="kimi"||e.provider==="openrouter"||e.provider==="droid")&&(e.credentialMode==="provider_key"||e.credentialMode==="evolve_key")&&typeof e.token=="string"&&e.token.length>0&&typeof e.bindingSecret=="string"&&e.bindingSecret.length>0&&typeof e.baseUrl=="string"&&e.baseUrl.length>0&&typeof e.expiresAt=="string"&&e.expiresAt.length>0}async function us(t,e){let n=await Yn(t,"/api/provider-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!Al(n))throw new Fe(502,"Provider runtime token response was invalid");return n}async function ps(t,e){return (await Yn(t,"/api/provider-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function gs(t,e){return (await Yn(t,"/api/provider-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}function Ke(t){return `'${t.replaceAll("'",`'"'"'`)}'`}function Ol(t){let e=t.trim();if(e==="")return [];let n=Buffer.from(e,"base64"),r=[],i=0;for(let s=0;s<n.length;s++)n[s]===0&&(r.push(n.toString("utf8",i,s)),i=s+1);return i<n.length&&r.push(n.toString("utf8",i,n.length)),r}async function fs(t,e,n){if(n.length===0)throw new Error("collectArtifacts() requires at least one path.");let r=n.map(a=>{if(!a||a.includes("\0"))throw new Error(`Invalid artifact path: ${JSON.stringify(a)}`);let c=posix.normalize(a);if(!posix.isAbsolute(c)&&(c===".."||c.startsWith("../")))throw new Error(`Artifact path escapes the working directory: ${a}`);return posix.isAbsolute(c)?c:posix.join(e,c)}),s=(await t.commands.run(r.map(a=>`if [ ! -e ${Ke(a)} ]; then echo MISSING ${Ke(a)}; elif [ ! -r ${Ke(a)} ]; then echo UNREADABLE ${Ke(a)}; fi`).join("; "),{cwd:e,timeoutMs:15e3})).stdout.split(`
211
- `).map(a=>a.trim()).filter(Boolean);if(s.length>0)throw new Error(`Artifact roots are not collectable: ${s.join("; ")}`);let d;try{d=await t.commands.run(`set -o pipefail 2>/dev/null; find -- ${r.map(Ke).join(" ")} -type f -printf '%p\\0%s\\0' | base64 -w0`,{cwd:e,timeoutMs:3e4});}catch(a){throw new Error(`Artifact listing failed: ${a.message}`)}if(d.exitCode!==0)throw new Error(`Artifact listing failed (exit ${d.exitCode}): ${(d.stderr||"").slice(0,500)}`);let p=Ol(d.stdout);if(p.length%2!==0)throw new Error("Sandbox returned malformed artifact metadata.");let l=new Map;for(let a=0;a<p.length;a+=2){let c=p[a],u=Number(p[a+1]);if(!Number.isSafeInteger(u)||u<0)throw new Error(`Sandbox returned an invalid artifact size: ${c}`);l.has(c)||l.set(c,u);}let o={};for(let a of [...l.keys()].sort()){let c=r.some(f=>a===f||a.startsWith(`${f.replace(/\/$/,"")}/`));if(!posix.isAbsolute(a)||!c)throw new Error(`Sandbox returned an invalid artifact path: ${a}`);let u=posix.relative(e,a),g=u&&u!==".."&&!u.startsWith("../")?u:a;o[g]=await t.files.read(a);}return o}var Tt="EVOLVE_PROVIDER_RUNTIME_BINDING",Zn="gemini-api-key";function je(t){switch(t){case "claude":return "anthropic";case "codex":return "openai";case "gemini":return "gemini";case "qwen":return "dashscope";case "kimi":return "kimi";case "opencode":return "openrouter";case "droid":return "droid";default:return null}}function Bl(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function ms(t){return `${t}-${randomBytes(8).toString("hex")}`}function Qn(t,e,n="newline"){let r=new Map;if(t){let i=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let s of i){let d=s.trim();if(!d)continue;let p=d.indexOf(":");if(p<=0)continue;let l=d.slice(0,p).trim(),o=d.slice(p+1).trim();r.set(l.toLowerCase(),`${l}: ${o}`);}}for(let[i,s]of Object.entries(e)){let d=i.toLowerCase();if(d===u&&r.has(d)&&n==="newline"){let p=r.get(d),l=p.slice(p.indexOf(":")+1).trim();r.set(d,`${i}: ${l},${s}`);}else r.set(d,`${i}: ${s}`);}return Array.from(r.values()).join(n==="comma"?", ":`
212
- `)}var Ll=262144,Nl=128e3,Fl=new Set(["low","medium","high","xhigh","max"]);function hs(t){if(t)return Fl.has(t)?t:void 0}function _t(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}var Ve=class{agentConfig;options;sandbox;hasRun=false;workingDir;homeDir;lastRunTimestamp;registry;sessionTag;previousSessionTag;sessionLogger;activeCommand;activeProcessId=null;activeOperationId=null;activeOperationKind=null;nextOperationId=0;interruptedOperations=new Set;sandboxState;agentState="idle";droidSessionId;managedBrowserSession;providerRuntimeToken;managedSecretRuntimeToken;managedSecretProxy;credentialsSealed=false;skills;resolvedSkillsList;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(Ie(e),Tn(n.observability),n.managedSecrets){if(e.isDirectMode)throw new Error("managed secrets are available only in gateway mode with EVOLVE_API_KEY");if(n.sandboxId)throw new Error("managed secrets cannot be used with an existing sandbox; grants are sandbox-scoped.");if(n.sandboxProvider&&!fe(n.sandboxProvider))throw new Error("managed secrets require an Evolve-managed sandbox provider")}if(this.agentConfig=e,this.options=n,n.sandboxId&&n.sandboxCreateOptions?.user)throw new Error("sandbox user cannot be enforced when attaching to an existing sandbox; create a fresh sandbox with the user instead");if(this.homeDir=r(n.sandboxCreateOptions?.user,n.sandboxCreateOptions?.homeDir),this.homeDir!==q$1){if(n.storage)throw new Error("Checkpoint storage requires the default /home/user sandbox home directory; remove sandbox user/homeDir or storage");if(n.managedBrowser||n.browserCredentials)throw new Error("Managed browser features require the default /home/user sandbox home directory")}if(this.workingDir=n.workingDirectory||n.sandboxCreateOptions?.workingDirectory||`${this.homeDir}/workspace`,this.sandboxState=n.sandboxId?"ready":"stopped",n.workspaceMode==="task"&&[n.context,n.files,n.systemPrompt,n.browserPrompt,n.schema].some(Boolean))throw new Error('workspaceMode "task" cannot be combined with context, files, systemPrompt, browserPrompt, or schema; the task owns the working directory');if(this.skills=n.skills,this.storage=n.storage,n.schema)if(F(n.schema))this.zodSchema=n.schema,n.schemaOptions&&console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead");else {this.jsonSchema=n.schema,this.schemaOptions=n.schemaOptions;try{let r=this.createAjvValidator();this.compiledValidator=r.compile(this.jsonSchema);}catch(r){throw new Error(`Invalid JSON Schema: ${r.message}`)}}this.registry=D(e.type),this.sessionTag=ms(n.sessionTagPrefix||"evolve");}browserRuntimeInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl,sessionId:this.managedBrowserSession.sessionId,sessionTag:this.managedBrowserSession.sessionTag}}browserResponseInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl}}emitLifecycle(e,n){let r=this.browserRuntimeInfo();e?.onLifecycle?.({sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,timestamp:new Date().toISOString(),reason:n,...r?{browser:r}:{}});}invalidateActiveOperation(){this.activeCommand=void 0,this.activeProcessId=null,this.activeOperationId=null,this.activeOperationKind=null;}beginOperation(e,n,r,i){let s=++this.nextOperationId;return this.activeOperationId=s,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,i),s}finalizeOperation(e,n,r,i="idle",s="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=s,this.agentState=i,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,i,s){let d=n==="run"?"run_background_complete":"command_background_complete",p=n==="run"?"run_background_failed":"command_background_failed",l=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async o=>{if(this.interruptedOperations.delete(e)||o.exitCode===130){this.finalizeOperation(e,i,l,"interrupted");return}n==="run"&&s&&await this.writeDroidSessionState(s);let c=o.exitCode===0?d:p,u=o.exitCode===0?"idle":"error";this.finalizeOperation(e,i,c,u);}).catch(()=>{this.interruptedOperations.delete(e),this.finalizeOperation(e,i,p,"error");});}createAjvValidator(){let n={...jt[this.schemaOptions?.mode||"loose"],...this.schemaOptions?.coerceTypes!==void 0&&{coerceTypes:this.schemaOptions.coerceTypes},...this.schemaOptions?.removeAdditional!==void 0&&{removeAdditional:this.schemaOptions.removeAdditional},...this.schemaOptions?.useDefaults!==void 0&&{useDefaults:this.schemaOptions.useDefaults},...this.schemaOptions?.allErrors!==void 0&&{allErrors:this.schemaOptions.allErrors}};return new Ml({...n,strict:false})}async getSandbox(e){if(this.sandbox)return this.sandbox;if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot create or attach another sandbox");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");let n=this.options.sandboxProvider;this.sandboxState="booting",this.emitLifecycle(e,"sandbox_boot");let r=false;try{if(this.options.sandboxId)(this.options.mcpServers||this.options.integrations||this.options.plugins||this.options.context||this.options.files||this.options.systemPrompt||this.options.managedBrowser||this.options.browserCredentials)&&console.warn("[Evolve] Connecting to existing sandbox - ignoring mcpServers, integrations, plugins, context, files, systemPrompt, managed browser setup, and browser credentials"),this.sandbox=await n.connect(this.options.sandboxId),this.hasRun=!0,await this.loadDroidSessionState(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_connected");else {await this.ensureManagedBrowserSession(e),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let i=this.buildEnvironmentVariables();this.sandbox=await n.create(this.buildSandboxCreateOptions(i)),r=!0,await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox),await this.setupManagedBrowser(this.sandbox),await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox),await this.setupWorkspace(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_ready");}}catch(i){throw r&&this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(e,"sandbox_error"),i}return this.sandbox}resolveKimiMaxContextSize(){if(typeof this.agentConfig.maxContextSize=="number")return this.agentConfig.maxContextSize;let e=this.agentConfig.model||this.registry.defaultModel;return oe(this.registry,e)||oe(this.registry,this.resolveCommandModel(e))?this.registry.models.find(i=>i.alias===e||i.modelId===e)?.maxContextSize??this.registry.spendTrackingTomlProvider?.maxContextSize??Ll:Nl}reasoningEffort(){return Tr(this.agentConfig.type,this.agentConfig.reasoningEffort)}buildKimiDirectModelEnvs(){let e=Ee(this.reasoningEffort()),n=hs(this.reasoningEffort()),r={KIMI_MODEL_NAME:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),KIMI_MODEL_API_KEY:this.agentConfig.apiKey,KIMI_MODEL_PROVIDER_TYPE:"kimi",KIMI_MODEL_MAX_CONTEXT_SIZE:String(this.resolveKimiMaxContextSize()),KIMI_MODEL_DEFAULT_THINKING:e?"true":"false",KIMI_MODEL_THINKING_MODE:e?"on":"off"};return n&&(r.KIMI_MODEL_THINKING_EFFORT=n),this.agentConfig.baseUrl&&(r.KIMI_MODEL_BASE_URL=this.agentConfig.baseUrl),r}buildEnvironmentVariables(){let e={},n=this.validatedUserSecretsForEnvironment();if(this.agentConfig.type==="kimi"&&this.agentConfig.isDirectMode)Object.assign(e,this.buildKimiDirectModelEnvs());else if(this.agentConfig.oauthFileContent)this.registry.oauthActivationEnv&&(e[this.registry.oauthActivationEnv.key]=this.registry.oauthActivationEnv.value);else if(!(this.agentConfig.type==="kimi"&&!this.agentConfig.isDirectMode)){if(!(!this.agentConfig.isDirectMode&&je(this.agentConfig.type))){if(!(this.registry.skipApiKeyEnvInGateway&&!this.agentConfig.isDirectMode))if(this.registry.providerEnvMap&&!this.agentConfig.isDirectMode)for(let r of Object.values(this.registry.providerEnvMap))e[r.keyEnv]=this.agentConfig.apiKey;else {let r=this.agentConfig.model?.split("/")[0],i=r?this.registry.providerEnvMap?.[r]:void 0,s=i?i.keyEnv:this.registry.apiKeyEnv,d=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:s;e[d]=this.agentConfig.apiKey;}}}if(this.agentConfig.isDirectMode&&!this.agentConfig.isOAuth&&this.agentConfig.type!=="kimi")this.agentConfig.baseUrl&&this.registry.baseUrlEnv&&(e[this.registry.baseUrlEnv]=this.agentConfig.baseUrl);else if(!this.agentConfig.isDirectMode){let r=a(this.registry.gatewayPath),i=this.requireActiveProviderRuntimeToken();if(this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=i?.baseUrl??r),i&&(this.shouldExposeProviderRuntimeTokenEnv()&&(e[this.registry.apiKeyEnv]=i.token),this.agentConfig.type==="gemini"&&(e.GEMINI_DEFAULT_AUTH_TYPE=Zn),this.registry.spendTrackingEnvs&&(e[Tt]=i.bindingSecret)),!i){if(je(this.agentConfig.type))throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);e[h]=this.agentConfig.apiKey;}}if(this.agentConfig.externalGateway&&this.registry.gatewayConfigEnv&&(e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.externalGateway&&this.agentConfig.type==="gemini"&&(e.GEMINI_CLI_TRUST_WORKSPACE="true"),this.agentConfig.type==="claude"&&(e.IS_SANDBOX="1"),this.managedBrowserSession&&this.options.managedBrowser&&Object.assign(e,zn(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.managedSecretRuntimeToken&&Object.assign(e,O(this.managedSecretRuntimeToken)),n&&Object.assign(e,n),!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";e[r]=Qn(e[r],{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},i);}return !this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&(e[this.registry.spendTrackingEnvs.sessionTagEnv]=this.sessionTag),e}buildSandboxCreateOptions(e){return {...this.options.sandboxCreateOptions,envs:e,workingDirectory:this.workingDir}}validatedUserSecretsForEnvironment(){let e={...this.options.sandboxCreateOptions?.envs,...this.options.secrets};if(Object.keys(e).length===0)return;let n=new Set;this.agentConfig.isDirectMode||(n.add(h),n.add(Tt),this.agentConfig.type==="gemini"&&n.add("GEMINI_DEFAULT_AUTH_TYPE"));let r=s=>{s&&n.add(s);};r(this.registry.apiKeyEnv),r(this.registry.baseUrlEnv);for(let s of Object.values(this.registry.providerEnvMap??{}))r(s.keyEnv);if(this.managedSecretRuntimeToken)for(let s of G())n.add(s);for(let s of this.managedSecretRuntimeToken?.env??[])r(s.envName);let i={};for(let[s,d]of Object.entries(e)){if(n.has(s))throw new Error(`${s} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);s!==this.registry.gatewayConfigEnv&&(i[s]=d);}return i}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await as(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async ensureProviderRuntimeToken(){let e=je(this.agentConfig.type);if(this.agentConfig.isDirectMode||!e||!this.options.providerRouting||this.providerRuntimeToken)return;let n;try{n=await us(this.options.providerRouting,{provider:e,sessionTag:this.sessionTag});}catch(r){throw ds(r)?new Error(`${e} runtime token endpoint is required in gateway mode: ${r.message}`):r}this.providerRuntimeToken=n,this.providerRuntimeToken&&this.sandbox?.sandboxId&&await this.bindProviderRuntimeToken(this.sandbox.sandboxId);}directSandboxProviderDeclaration(){let e=this.options.sandboxProvider;if(!e||fe(e))return;let n=e.providerType;return c.includes(n)?n:void 0}async bindProviderRuntimeToken(e){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.directSandboxProviderDeclaration();if(!await ps(this.options.providerRouting,{token:this.providerRuntimeToken.token,sandboxId:e,...n?{directSandboxProvider:n}:{}}))throw new Error("Failed to bind provider runtime token to sandbox")}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=zn(this.options.managedBrowser.provider,this.managedBrowserSession);for(let r of n.directories)await e.files.makeDir(r);for(let r of n.files)await e.files.write(r.path,r.data);}async closeManagedBrowserSession(){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let e=this.managedBrowserSession;this.managedBrowserSession=void 0;try{await ls(this.options.managedBrowser,e);}catch(n){console.warn(`[Evolve] Managed browser cleanup failed: ${n.message}`);}}async closeProviderRuntimeToken(e=false){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.providerRuntimeToken,r;for(let s=0;s<3;s++)try{if(!await gs(this.options.providerRouting,{token:n.token}))throw new Error("Dashboard returned ok=false");this.providerRuntimeToken=void 0;return}catch(d){r=d,s<2&&await new Promise(p=>setTimeout(p,100*(s+1)));}let i=`Provider runtime token cleanup failed: ${r.message}`;if(e)throw new Error(i);console.warn(`[Evolve] ${i}`),this.providerRuntimeToken=void 0;}async ensureManagedSecretRuntimeToken(){this.managedSecretRuntimeToken||!this.options.managedSecrets||(this.managedSecretRuntimeToken=await J$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{sessionTag:this.sessionTag,secrets:this.options.managedSecrets.secrets}));}async bindManagedSecretRuntimeToken(e){if(!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;if(!await K$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:this.managedSecretRuntimeToken.token,sandboxId:e}))throw new Error("Failed to bind managed secret runtime token to sandbox")}async setupManagedSecretEgress(e){if(!this.managedSecretRuntimeToken||!N$1(this.managedSecretRuntimeToken))return;if(await e.files.makeDir(D$1),await e.commands.run(`umask 077 && mkdir -p ${D$1}/certs && chmod 700 ${D$1} ${D$1}/certs`,{timeoutMs:5e3}),await e.files.write(E,H$1),await e.files.write(F$1,P$1(this.managedSecretRuntimeToken)),await e.commands.run(`chmod 700 ${E} && chmod 600 ${F$1}`,{timeoutMs:5e3}),await e.commands.run(Q$1(),{timeoutMs:3e4}),this.managedSecretProxy=await e.commands.spawn(R(),{timeoutMs:3e4}),(await e.commands.run(`python3 - <<'PY'
204
+ `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&this.eventBuffer.push(e),this.metaWritten=true;}async appendLocal(e){try{await this.dirReady,await appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=y){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},z$2));}flushDashboard(){if(!this.apiKey||this.eventBuffer.length===0)return;let e=this.eventBuffer.splice(0);this.dashboardQueue=this.dashboardQueue.then(()=>this.sendToDashboard(e)).catch(()=>{});}async sendToDashboard(e){let n={tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,reasoningEffort:this.reasoningEffort!==void 0&&Ja.test(this.reasoningEffort)?this.reasoningEffort:null,sandboxId:this.sandboxId,timestamp:this.timestamp,...this.annotations(),events:e};for(let r=1;r<=A$1;r++)try{let i=await fetch(`${this.dashboardUrl}/api/sessions/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(i.ok)return;if(i.status===429||i.status===401||i.status>=500){if(r===A$1){console.debug(`[SessionLogger] Dashboard ${i.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay(B$1*r);continue}console.debug(`[SessionLogger] Dashboard ${i.status}, dropping events`);return}catch(i){r===A$1?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",i),this.requeueEvents(e)):await this.delay(B$1*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}validateConfig(e){let n=b();if(e.apiKey&&!n.startsWith("https://")&&!n.includes("localhost")&&!n.includes("127.0.0.1"))throw new Error("Dashboard URL must use HTTPS when API key is provided")}delay(e){return new Promise(n=>setTimeout(n,e))}annotations(){if(!this.observability)return {};let e={};for(let[n,r]of Object.entries(this.observability))if(r!==void 0){if(x.includes(n)){this.warnedKeys.has(n)||(this.warnedKeys.add(n),console.warn(`[SessionLogger] observability key "${n}" is reserved for session identity \u2014 ignoring it.`));continue}e[n]=r;}return e}};function Me(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function $e(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("EVOLVE_API_KEY is required for managed integrations");return e}async function Ue(t){return await t.text().catch(()=>"")}function Un(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function za(t){let e=Array.from(new Set((t??[]).map(n=>n.trim()).filter(Boolean)));if(e.length===0)throw new Error("withIntegrations() requires at least one app");return e}async function Ri(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${$e(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Un(t.userId),apps:za(t.apps),tools:t.tools,accounts:t.accounts,keys:t.keys,authConfigs:t.authConfigs,sessionTag:t.sessionTag}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integrations session create failed (${e.status}): ${await Ue(e)}`);let n=await e.json();if(!n.mcp?.url)throw new Error("Managed integrations response missing mcp.url");return {url:n.mcp.url,headers:n.mcp.headers??{}}}async function Wa(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${$e(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Un(t.userId),app:t.app,accountLabel:t.accountLabel}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration connect failed (${e.status}): ${await Ue(e)}`);return await e.json()}async function Ha(t){let e=Array.from(new Set((t.userIds??[]).map(d=>Un(d))));if(e.length===0)throw new Error("Integration accounts.list() requires at least one userId");let n=new URLSearchParams({userIds:e.join(",")});t.app&&n.set("app",t.app),t.statuses?.length&&n.set("statuses",t.statuses.join(","));let r={Authorization:`Bearer ${$e(t.apiKey)}`,accept:"application/json"},i=await fetch(`${Me(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new Error(`Managed integration status failed (${i.status}): ${await Ue(i)}`);return ((await i.json()).accounts??[]).map(d=>({userId:String(d.userId??""),app:String(d.app??""),appName:typeof d.appName=="string"?d.appName:void 0,appIcon:typeof d.appIcon=="string"?d.appIcon:void 0,accountLabel:typeof d.accountLabel=="string"?d.accountLabel:void 0,status:String(d.status??""),accountId:typeof d.accountId=="string"?d.accountId:void 0,updatedAt:typeof d.updatedAt=="string"?d.updatedAt:void 0}))}async function qa(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${$e(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId,accountLabel:t.accountLabel}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account update failed (${e.status}): ${await Ue(e)}`);return await e.json()}async function Ya(t){let e=await fetch(`${Me(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${$e(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account delete failed (${e.status}): ${await Ue(e)}`);return await e.json()}var Pi={auth:Wa,accounts:{list:Ha,update:qa,delete:Ya}};promisify(exec);var Kn=promisify(execFile),Oi=Symbol.for("evolve:awsSdkCache"),Mi=Symbol.for("evolve:s3ClientCache");var al=3600,ll=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function cl(t){if(t.startsWith("s3://")){let i=t.slice(5),s=i.indexOf("/");return s===-1?{bucket:i,prefix:""}:{bucket:i.slice(0,s),prefix:i.slice(s+1).replace(/\/+$/,"")}}let e=new URL(t),n=e.hostname,r=e.pathname.split("/").filter(Boolean);if(n.includes(".s3.")&&n.endsWith(".amazonaws.com"))return {bucket:n.split(".s3.")[0],prefix:r.join("/")};if(r.length===0)throw new Error(`Invalid storage URL: no bucket in path. Expected https://endpoint/bucket/prefix, got ${t}`);return {bucket:r[0],prefix:r.slice(1).join("/"),endpoint:`${e.protocol}//${e.host}`}}function Ct(t,e,n,r){if(!t?.url&&!t?.bucket){if(!e)throw new Error("Storage requires either a URL (BYOK mode) or gateway API key. Use .withStorage({ url: 's3://bucket/prefix' }) or configure EVOLVE_API_KEY for gateway mode.");return {bucket:"",prefix:"",region:t?.region||"us-east-1",mode:"gateway",gatewayUrl:n,gatewayApiKey:r}}let i=t?.bucket||"",s=t?.prefix||"",d=t?.endpoint;if(t?.url){let u=cl(t.url);i=i||u.bucket,s=s||u.prefix,d=d||u.endpoint;}if(!i)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:i,prefix:s,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:d,credentials:t?.credentials,mode:"byok"}}function Dn(t){if(t.includes(".."))throw new Error(`settingsDir must not contain '..': ${t}`);let e;if(t.startsWith("~/"))e=t.slice(2);else if(t.startsWith("/home/user/"))e=t.slice(11);else if(t.startsWith("."))e=t;else throw new Error(`Unexpected settingsDir: ${t}. Expected ~/ or /home/user/ prefix.`);if(!e||e.startsWith("/"))throw new Error(`settingsDir resolves to invalid path: ${t}`);return e}function dl(t){if(t.includes(".."))throw new Error(`workingDir must not contain '..': ${t}`);if(!t.startsWith("/home/user/"))throw new Error(`Unexpected workingDir: ${t}. Must start with /home/user/.`);let e=t.slice(11).replace(/\/+$/,"");if(!e||e.startsWith("/")||e.includes("//"))throw new Error(`workingDir resolves to invalid path: ${t}`);return e}function De(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function pl(t,e){let n=D(t),r=dl(e),i=n.checkpointDirs?.length?n.checkpointDirs.map(u=>Dn(u)):[Dn(n.mcpConfig.settingsDir)],s=[...ll.map(u=>`--exclude=${De(u)}`),`--exclude=${De(r+"/temp")}`,...(n.checkpointExcludes??[]).map(u=>`--exclude=${De(Dn(u))}`)].join(" "),d=[De(r+"/"),...i.map(u=>De(u+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${s} ${d}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function he(){let t=globalThis[Oi];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,i]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[Oi]={s3:r,presigner:i},{s3:r,presigner:i}}catch{throw new Error("Storage requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner. Install: npm i @aws-sdk/client-s3 @aws-sdk/s3-request-presigner")}}async function Le(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[Mi];if(r?.key===n)return r.client;let{s3:i}=await he(),s=new i.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[Mi]={client:s,key:n},s}async function ji(t,e,n){let{s3:r,presigner:i}=await he(),s=await Le(t),d=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return i.getSignedUrl(s,d,{expiresIn:al})}async function $i(t,e){let{s3:n}=await he(),r=await Le(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(i){let s=i?.name||i?.message||"";if(i?.$metadata?.httpStatusCode===404||s==="NotFound"||s==="NoSuchKey")return false;throw i}}async function Vi(t,e){let{s3:n}=await he(),s=await(await(await Le(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!s)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(s)}async function ul(t,e,n){let{s3:r}=await he();await(await Le(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function Gi(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function Ji(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function gl(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function zi(t,e,n,r){let i=await fetch(`${t.gatewayUrl}/api/checkpoints/presign`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify({tag:e,hash:n,action:r})});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway presign failed (${i.status}): ${s}`)}return i.json()}async function fl(t,e){let n=await fetch(`${t.gatewayUrl}/api/checkpoints`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify(e)});if(!n.ok){let r=await n.text().catch(()=>"");throw new Error(`Gateway checkpoint create failed (${n.status}): ${r}`)}return n.json()}async function ml(t,e){let n=await fetch(`${t.gatewayUrl}/api/checkpoints/${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!n.ok){if(n.status===404)throw new Error(`Checkpoint ${e} not found`);let r=await n.text().catch(()=>"");throw new Error(`Gateway checkpoint get failed (${n.status}): ${r}`)}return n.json()}async function jn(t,e,n,r,i){let s=new Date().toISOString(),d=pl(n,r),u=await t.commands.run(d,{timeoutMs:12e4});if(u.exitCode!==0)throw new Error(`Checkpoint tar failed: ${u.stderr}`);let l=u.stdout.trim().split(`
205
+ `).pop()?.trim();if(!l||l.length!==64)throw new Error(`Invalid checkpoint hash: ${l}`);let o=await t.commands.run("stat -c '%s' /tmp/evolve-ckpt.tar.gz 2>/dev/null || stat -f '%z' /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4}),a=parseInt(o.stdout.trim(),10),c=Number.isNaN(a)?void 0:a,p;try{if(e.mode==="byok"){let g=Gi(e,l);if(!await $i(e,g)){let m=await ji(e,g,"put"),y=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${m}"`,{timeoutMs:3e5});if(y.exitCode!==0)throw new Error(`Checkpoint upload failed: ${y.stderr}`);if(!await $i(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}p=gl();let h={id:p,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment,sandboxId:t.sandboxId};await ul(e,Ji(e,p),h);}else {let g=await zi(e,i.tag,l,"put");if(!g.alreadyExists){let h=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${g.url}"`,{timeoutMs:3e5});if(h.exitCode!==0)throw new Error(`Checkpoint upload failed: ${h.stderr}`)}p=(await fl(e,{tag:i.tag,hash:l,sizeBytes:c??0,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:p,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment}}async function Wi(t,e,n){let r=await Gn(e,n),i=r.hash,s={agentType:r.agentType,workspaceMode:r.workspaceMode},d=await Zi(e,r),u=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${d}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(u.exitCode!==0)throw new Error(`Checkpoint download failed: ${u.stderr}`);let l=u.stdout.trim().split(`
206
+ `).pop()?.trim();if(l!==i)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${i}, got ${l})`);let o=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(o.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${o.stderr}`);return s}function Hi(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||s,i=!t.url&&!t.bucket&&!!n;return Ct(t,i,r,n)}async function qi(t,e){let{s3:n}=await he(),r=await Le(t),s=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,d=[],u;do{let p={Bucket:t.bucket,Prefix:s,...u&&{ContinuationToken:u}},g=await r.send(new n.ListObjectsV2Command(p));if(g.Contents)for(let f of g.Contents)f.Key?.endsWith(".json")&&f.LastModified&&d.push({key:f.Key,lastModified:f.LastModified});u=g.IsTruncated?g.NextContinuationToken:void 0;}while(u);if(d.length===0)return [];d.sort((p,g)=>{let f=g.lastModified.getTime()-p.lastModified.getTime();return f!==0?f:g.key<p.key?-1:g.key>p.key?1:0});let o=!!e?.tag?d:e?.limit?d.slice(0,e.limit):d,c=(await Promise.all(o.map(async p=>{try{return await Vi(t,p.key)}catch{return null}}))).filter(p=>p!==null);return e?.tag&&(c=c.filter(p=>p.tag===e.tag)),e?.limit&&c.length>e.limit&&(c=c.slice(0,e.limit)),c}async function Yi(t,e){let n=new URLSearchParams;e?.limit&&n.set("limit",String(e.limit)),e?.tag&&n.set("tag",e.tag);let r=`${t.gatewayUrl}/api/checkpoints${n.toString()?`?${n}`:""}`,i=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${i.status}): ${s}`)}return i.json()}function hl(t){return t&&t>0?Math.min(t,500):100}async function Vn(t,e){return t.mode==="byok"?(await qi(t,{limit:1,tag:e?.tag}))[0]??null:(await Yi(t,{limit:1,tag:e?.tag}))[0]??null}async function Gn(t,e){if(t.mode==="byok"){let n=Ji(t,e);try{return await Vi(t,n)}catch(r){throw yl(r)?new Error(`Checkpoint ${e} not found`):r}}else return await ml(t,e)}async function Ui(t,e,n){if(e==="latest"){let r=await Vn(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function Zi(t,e){if(t.mode==="byok")return ji(t,Gi(t,e.hash),"get");{let n=await zi(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function Qi(t){return !(!t||isAbsolute(t)||t.startsWith("-")||normalize(t).startsWith("..")||t.includes("\0"))}function Di(t,e){let n=resolve(t,e),r=resolve(t),i=relative(r,n);if(i.startsWith("..")||isAbsolute(i))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function yl(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function Bn(t){let e=t.filter(n=>!Qi(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var Xi=10*1024*1024,Bi=false;async function es(){if(!Bi)try{await Kn("tar",["--version"]),Bi=!0;}catch{throw new Error("The 'tar' command is not available on this system. Storage download/extract requires tar (available on macOS, Linux, and Windows with Git Bash or WSL).")}}async function Li(t,e){let n=await Gn(t,e),r=await Zi(t,n),i=e.replace(/[^a-zA-Z0-9_-]/g,"_"),s=join(tmpdir(),`evolve-dl-${i}-${Date.now()}.tar.gz`),d=await fetch(r);if(!d.ok)throw new Error(`Checkpoint download failed (${d.status})`);if(!d.body)throw new Error("Checkpoint download returned empty body");let u=createHash("sha256"),l=createWriteStream(s);try{let a=d.body.getReader();await new Promise((c,p)=>{l.on("error",p),l.on("finish",c);async function g(){for(;;){let{done:f,value:h}=await a.read();if(f){l.end();break}u.update(h),l.write(h)||await new Promise(m=>l.once("drain",m));}}g().catch(p);});}catch(a){throw l.destroy(),await unlink(s).catch(()=>{}),a}let o=u.digest("hex");if(o!==n.hash)throw await unlink(s).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${o})`);return {tmpPath:s,metadata:n}}var Nn=class extends Error{constructor(n){super(`Could not read a file path out of this 'tar -tvzf' line: ${JSON.stringify(n)}. The listing is produced by the tar on THIS machine, so an unrecognised layout means an unsupported tar variant (busybox, a very old BSD tar) rather than a corrupt archive. Refusing to return a partial file list.`);this.line=n;this.name="TarListingParseError";}},wl={LC_ALL:"C",LANG:"C"};function vl(t){let e=[],n=[],r=[];for(let i of t.trim().split(`
207
+ `)){if(!i||i.startsWith("total "))continue;let s=i[0];if(s!=="-"&&s!=="d"&&s!=="l")throw new Error(`Archive contains unsupported entry type: "${s}"`);let d=i.match(/\d{2}:\d{2}\s+(.+)/)??i.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!d)throw new Nn(i);let u=d[1];if(s==="l"){let l=u.indexOf(" -> ");l!==-1&&(u=u.slice(0,l)),e.push(u);}else s==="d"?n.push(u.replace(/\/$/,"")):r.push(u);}return {filePaths:r,dirPaths:n,symlinkPaths:[...new Set(e)]}}async function Fi(t){await es();let{stdout:e}=await Kn("tar",["-tvzf",t],{maxBuffer:Xi,env:{...process.env,...wl}}),{filePaths:n,dirPaths:r,symlinkPaths:i}=vl(e);return Bn(r),Bn(i),Bn(n)}async function Ln(t,e,n){await es(),await mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await Kn("tar",r,{maxBuffer:Xi});}function bl(t){let e="^",n=0;for(;n<t.length;){let r=t[n];r==="*"&&t[n+1]==="*"?t[n+2]==="/"?(e+="(?:.*/)?",n+=3):(e+=".*",n+=2):r==="*"?(e+="[^/]*",n++):r==="?"?(e+="[^/]",n++):".+^${}()|[]\\".includes(r)?(e+="\\"+r,n++):(e+=r,n++);}return e+="$",new RegExp(e)}function Jn(t,e){let n=Hi(t,e);return ts(n)}function kl(t){let e=Hi(t||{});return ts(e)}function ts(t){return {async listCheckpoints(e){let n=hl(e?.limit);return t.mode==="byok"?qi(t,{limit:n,tag:e?.tag}):Yi(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return Gn(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,i=n?.to||process.cwd(),s=await Ui(t,e),{tmpPath:d,metadata:u}=await Li(t,s);try{if(r)return await mkdir(i,{recursive:!0}),await Fi(d),await Ln(d,i),i;{await mkdir(i,{recursive:!0});let l=join(i,`checkpoint-${u.id}.tar.gz`);return await copyFile(d,l),l}}finally{await unlink(d).catch(()=>{});}},async downloadFiles(e,n){let r=await Ui(t,e),{tmpPath:i}=await Li(t,r),s;try{let d=await Fi(i),u;if(n?.files){let o=n.files.filter(c=>!Qi(c));if(o.length>0)throw new Error(`Unsafe file path requested: ${o[0]}`);let a=new Set(n.files);u=d.filter(c=>a.has(c));}else if(n?.glob){let o=n.glob.map(bl);u=d.filter(a=>o.some(c=>c.test(a)));}else u=d;if(u.length===0)return {};s=join(tmpdir(),`evolve-extract-${Date.now()}`);try{await Ln(i,s,u);}catch(o){let a=o?.message??"";if(!a.includes("E2BIG")&&!a.includes("Argument list too long")&&!a.includes("ENAMETOOLONG"))throw o;await rm(s,{recursive:!0,force:!0}).catch(()=>{}),s=join(tmpdir(),`evolve-extract-${Date.now()}`),await Ln(i,s);}let l={};return await Promise.all(u.map(async o=>{Di(s,o),l[o]=await readFile(join(s,o));})),n?.to&&(await mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(l).map(async([o,a])=>{Di(n.to,o);let c=join(n.to,o);await mkdir(dirname(c),{recursive:!0}),await writeFile(c,a);}))),l}finally{s&&await rm(s,{recursive:true,force:true}).catch(()=>{}),await unlink(i).catch(()=>{});}}}}function Q(t){return `'${t.replace(/'/g,"'\\''")}'`}function Et(t){return typeof t=="string"&&t.length>0}function ye(t,e,n){let r=t[e];if(!Et(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function Sl(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
208
+ ${n}`)}function xl(t,e){switch(t){case "droid":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`droid plugin marketplace add ${Q(n)}`,`droid plugin install ${Q(r)} --scope user`]}case "claude":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`claude plugin marketplace add ${Q(n)} --scope user`,`claude plugin install ${Q(r)} --scope user`]}case "gemini":{let n=ye(e,"source",t),r=e,i=[`gemini extensions install ${Q(n)}`];return Et(r.ref)&&i.push(`--ref ${Q(r.ref)}`),r.autoUpdate===true&&i.push("--auto-update"),r.preRelease===true&&i.push("--pre-release"),i.push("--consent"),r.skipSettings===true&&i.push("--skip-settings"),[i.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=ye(e,"marketplace",t),r=e,i=[`codex plugin marketplace add ${Q(n)}`];if(Et(r.ref)&&i.push(`--ref ${Q(r.ref)}`),Array.isArray(r.sparse))for(let s of r.sparse){if(!Et(s))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");i.push(`--sparse ${Q(s)}`);}return [i.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function ns(t,e,n){if(n?.length)for(let r of n){let i=xl(t,r);for(let s of i){let d=await e.commands.run(s,{timeoutMs:12e4});if(d.exitCode!==0)throw Sl(s,d)}}}var os="/home/user/.agent-browser",rs=`${os}/config.json`,as="/home/user/.actionbook",El=`${as}/config.toml`;function is(t){return t==="actionbook"||t==="agent-browser"}function Tl(t){return t.remote===true}function ss(t){if(t==null)return;if(typeof t!="string")throw new Error("browser profile must be a string");let e=t.trim();if(!e)throw new Error("browser profile cannot be empty");return e}function ls(t){if(typeof t=="string"){if(t==="browser-use")return {provider:"browser-use",managed:false};if(is(t))return {provider:t,managed:false};throw new Error("Unsupported browser configuration")}if(t.provider===void 0)return {provider:"agent-browser",managed:t.remote!==false,profile:ss(t.profile)};if(is(t.provider))return {provider:t.provider,managed:Tl(t),profile:ss(t.profile)};throw new Error("Unsupported browser configuration")}function zn(t,e){return t==="actionbook"?{envs:{},files:[{path:El,data:stringify({version:1,browser:{mode:"cloud",cdp_endpoint:e.cdpUrl}}).trimEnd()+`
209
+ `}],directories:[as]}:{envs:{AGENT_BROWSER_CONFIG:rs},files:[{path:rs,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
210
+ `}],directories:[os]}}function cs(t){return (t?.dashboardUrl||s).replace(/\/$/,"")}async function ds(t){return await t.text().catch(()=>"")}async function ps(t,e,n={}){let r=await fetch(`${cs(t)}/api/browser-sessions`,{method:"POST",headers:{Authorization:`Bearer ${t.apiKey}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({sessionTag:e,options:{remote:true},browserAuth:n.browserCredentials===true,...t.profile?{profile:t.profile}:{}}),signal:AbortSignal.timeout(3e4)});if(!r.ok)throw new Error(`Managed browser session create failed (${r.status}): ${await ds(r)}`);let i=await r.json();if(!i.id||!i.sessionId||!i.cdpUrl||!i.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:i.id,sessionId:i.sessionId,sessionTag:i.sessionTag,cdpUrl:i.cdpUrl,liveUrl:i.liveUrl,browserAuthGrantToken:i.browserAuthGrantToken}}async function us(t,e){let n=await fetch(`${cs(t)}/api/browser-sessions/${encodeURIComponent(e.id)}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.apiKey}`,accept:"application/json"},signal:AbortSignal.timeout(5e3)});if(!n.ok&&n.status!==404)throw new Error(`Managed browser session stop failed (${n.status}): ${await ds(n)}`)}var Pl="RSA-OAEP-256",Wn="browser-login";function Il(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Al(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("Browser credentials require EVOLVE_API_KEY or an explicit apiKey");return e}async function Ol(t){return await t.text().catch(()=>"")}async function Fe(t,e,n={}){let r=await fetch(`${Il(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Al(t?.apiKey)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Error(`Browser credentials request failed (${r.status}): ${await Ol(r)}`);return await r.json()}async function Ml(t,e){let n=await Fe(t,"/api/browser-credentials/public-key"),r=publicEncrypt({key:n.publicKey,padding:constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:Pl,keyId:n.id,ciphertext:r.toString("base64url")}}var Tt=class{constructor(e={}){this.config=e;}toMetadata(e){let{account_label:n,...r}=e;return {...r,accountLabel:n}}async list(e={}){let n=new URLSearchParams;e.website&&n.set("website",e.website),e.limit!==void 0&&n.set("limit",String(e.limit)),e.offset!==void 0&&n.set("offset",String(e.offset));let r=n.toString()?`?${n.toString()}`:"",i=await Fe(this.config,`/api/browser-credentials${r}`);return {credentials:i.credentials.map(s=>this.toMetadata(s)),total:i.total,count:i.count,offset:i.offset,hasMore:i.has_more??i.offset+i.count<i.total}}async create(e){let n=await Ml(this.config,e.password),r=await Fe(this.config,"/api/browser-credentials",{method:"POST",body:JSON.stringify({website:e.website,account_label:e.accountLabel,email:e.email,encryptedPassword:n})});return {status:r.status,credential:this.toMetadata(r.credential)}}async delete(e){let n="id"in e?e:{website:e.website,account_label:e.accountLabel};return await Fe(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function Hn(t={}){return new Tt(t)}async function gs(t){return (await Fe({apiKey:t.apiKey,dashboardUrl:t.dashboardUrl},"/api/browser-login/mcp-config",{method:"POST",body:JSON.stringify({browserSessionId:t.browserSessionId,sessionTag:t.sessionTag,grantToken:t.grantToken,allow:$l(t.config)})})).server}function $l(t){return t?.allow?.map(e=>({website:e.website,...e.accountLabel||e.account_label?{account_label:e.accountLabel||e.account_label}:{}}))}var qn="x-evolve-provider-runtime-binding";function Ul(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}async function Dl(t){return await t.text().catch(()=>"")}var Ne=class extends Error{constructor(n,r){super(r);this.status=n;this.name="ProviderRuntimeTokenRequestError";}};function fs(t){return t instanceof Ne&&t.status===404}async function Yn(t,e,n={}){let r=await fetch(`${Ul(t.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${t.apiKey}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Ne(r.status,`Provider runtime token request failed (${r.status}): ${await Dl(r)}`);return await r.json()}function Bl(t){if(!t||typeof t!="object"||Array.isArray(t))return false;let e=t;return e.enabled===true&&(e.provider==="anthropic"||e.provider==="openai"||e.provider==="gemini"||e.provider==="dashscope"||e.provider==="kimi"||e.provider==="openrouter"||e.provider==="droid")&&(e.credentialMode==="provider_key"||e.credentialMode==="evolve_key")&&typeof e.token=="string"&&e.token.length>0&&typeof e.bindingSecret=="string"&&e.bindingSecret.length>0&&typeof e.baseUrl=="string"&&e.baseUrl.length>0&&typeof e.expiresAt=="string"&&e.expiresAt.length>0}async function ms(t,e){let n=await Yn(t,"/api/provider-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!Bl(n))throw new Ne(502,"Provider runtime token response was invalid");return n}async function hs(t,e){return (await Yn(t,"/api/provider-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function ys(t,e){return (await Yn(t,"/api/provider-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}function Ke(t){return `'${t.replaceAll("'",`'"'"'`)}'`}function Ll(t){let e=t.trim();if(e==="")return [];let n=Buffer.from(e,"base64"),r=[],i=0;for(let s=0;s<n.length;s++)n[s]===0&&(r.push(n.toString("utf8",i,s)),i=s+1);return i<n.length&&r.push(n.toString("utf8",i,n.length)),r}async function ws(t,e,n){if(n.length===0)throw new Error("collectArtifacts() requires at least one path.");let r=n.map(a=>{if(!a||a.includes("\0"))throw new Error(`Invalid artifact path: ${JSON.stringify(a)}`);let c=posix.normalize(a);if(!posix.isAbsolute(c)&&(c===".."||c.startsWith("../")))throw new Error(`Artifact path escapes the working directory: ${a}`);return posix.isAbsolute(c)?c:posix.join(e,c)}),s=(await t.commands.run(r.map(a=>`if [ ! -e ${Ke(a)} ]; then echo MISSING ${Ke(a)}; elif [ ! -r ${Ke(a)} ]; then echo UNREADABLE ${Ke(a)}; fi`).join("; "),{cwd:e,timeoutMs:15e3})).stdout.split(`
211
+ `).map(a=>a.trim()).filter(Boolean);if(s.length>0)throw new Error(`Artifact roots are not collectable: ${s.join("; ")}`);let d;try{d=await t.commands.run(`set -o pipefail 2>/dev/null; find -- ${r.map(Ke).join(" ")} -type f -printf '%p\\0%s\\0' | base64 -w0`,{cwd:e,timeoutMs:3e4});}catch(a){throw new Error(`Artifact listing failed: ${a.message}`)}if(d.exitCode!==0)throw new Error(`Artifact listing failed (exit ${d.exitCode}): ${(d.stderr||"").slice(0,500)}`);let u=Ll(d.stdout);if(u.length%2!==0)throw new Error("Sandbox returned malformed artifact metadata.");let l=new Map;for(let a=0;a<u.length;a+=2){let c=u[a],p=Number(u[a+1]);if(!Number.isSafeInteger(p)||p<0)throw new Error(`Sandbox returned an invalid artifact size: ${c}`);l.has(c)||l.set(c,p);}let o={};for(let a of [...l.keys()].sort()){let c=r.some(f=>a===f||a.startsWith(`${f.replace(/\/$/,"")}/`));if(!posix.isAbsolute(a)||!c)throw new Error(`Sandbox returned an invalid artifact path: ${a}`);let p=posix.relative(e,a),g=p&&p!==".."&&!p.startsWith("../")?p:a;o[g]=await t.files.read(a);}return o}var _t="EVOLVE_PROVIDER_RUNTIME_BINDING",Zn="gemini-api-key";function je(t){switch(t){case "claude":return "anthropic";case "codex":return "openai";case "gemini":return "gemini";case "qwen":return "dashscope";case "kimi":return "kimi";case "opencode":return "openrouter";case "droid":return "droid";default:return null}}function Vl(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function vs(t){return `${t}-${randomBytes(8).toString("hex")}`}function Qn(t,e,n="newline"){let r=new Map;if(t){let i=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let s of i){let d=s.trim();if(!d)continue;let u=d.indexOf(":");if(u<=0)continue;let l=d.slice(0,u).trim(),o=d.slice(u+1).trim();r.set(l.toLowerCase(),`${l}: ${o}`);}}for(let[i,s]of Object.entries(e)){let d=i.toLowerCase();if(d===u&&r.has(d)&&n==="newline"){let u=r.get(d),l=u.slice(u.indexOf(":")+1).trim();r.set(d,`${i}: ${l},${s}`);}else r.set(d,`${i}: ${s}`);}return Array.from(r.values()).join(n==="comma"?", ":`
212
+ `)}var Gl=262144,Jl=128e3,zl=new Set(["low","medium","high","xhigh","max"]);function bs(t){if(t)return zl.has(t)?t:void 0}function Rt(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}var Ve=class{agentConfig;options;sandbox;hasRun=false;workingDir;homeDir;lastRunTimestamp;registry;sessionTag;previousSessionTag;sessionLogger;activeCommand;activeProcessId=null;activeOperationId=null;activeOperationKind=null;nextOperationId=0;interruptedOperations=new Set;sandboxState;agentState="idle";droidSessionId;managedBrowserSession;providerRuntimeToken;managedSecretRuntimeToken;managedSecretProxy;credentialsSealed=false;skills;resolvedSkillsList;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(Ie(e),_n(n.observability),n.managedSecrets){if(e.isDirectMode)throw new Error("managed secrets are available only in gateway mode with EVOLVE_API_KEY");if(n.sandboxId)throw new Error("managed secrets cannot be used with an existing sandbox; grants are sandbox-scoped.");if(n.sandboxProvider&&!fe(n.sandboxProvider))throw new Error("managed secrets require an Evolve-managed sandbox provider")}if(this.agentConfig=e,this.options=n,n.sandboxId&&n.sandboxCreateOptions?.user)throw new Error("sandbox user cannot be enforced when attaching to an existing sandbox; create a fresh sandbox with the user instead");if(this.homeDir=r(n.sandboxCreateOptions?.user,n.sandboxCreateOptions?.homeDir),this.homeDir!==q$1){if(n.storage)throw new Error("Checkpoint storage requires the default /home/user sandbox home directory; remove sandbox user/homeDir or storage");if(n.managedBrowser||n.browserCredentials)throw new Error("Managed browser features require the default /home/user sandbox home directory")}if(this.workingDir=n.workingDirectory||n.sandboxCreateOptions?.workingDirectory||`${this.homeDir}/workspace`,this.sandboxState=n.sandboxId?"ready":"stopped",n.workspaceMode==="task"&&[n.context,n.files,n.systemPrompt,n.browserPrompt,n.schema].some(Boolean))throw new Error('workspaceMode "task" cannot be combined with context, files, systemPrompt, browserPrompt, or schema; the task owns the working directory');if(this.skills=n.skills,this.storage=n.storage,n.schema)if(N(n.schema))this.zodSchema=n.schema,n.schemaOptions&&console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead");else {this.jsonSchema=n.schema,this.schemaOptions=n.schemaOptions;try{let r=this.createAjvValidator();this.compiledValidator=r.compile(this.jsonSchema);}catch(r){throw new Error(`Invalid JSON Schema: ${r.message}`)}}this.registry=D(e.type),this.sessionTag=vs(n.sessionTagPrefix||"evolve");}browserRuntimeInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl,sessionId:this.managedBrowserSession.sessionId,sessionTag:this.managedBrowserSession.sessionTag}}browserResponseInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl}}emitLifecycle(e,n){let r=this.browserRuntimeInfo();e?.onLifecycle?.({sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,timestamp:new Date().toISOString(),reason:n,...r?{browser:r}:{}});}invalidateActiveOperation(){this.activeCommand=void 0,this.activeProcessId=null,this.activeOperationId=null,this.activeOperationKind=null;}beginOperation(e,n,r,i){let s=++this.nextOperationId;return this.activeOperationId=s,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,i),s}finalizeOperation(e,n,r,i="idle",s="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=s,this.agentState=i,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,i,s){let d=n==="run"?"run_background_complete":"command_background_complete",u=n==="run"?"run_background_failed":"command_background_failed",l=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async o=>{if(this.interruptedOperations.delete(e)||o.exitCode===130){this.finalizeOperation(e,i,l,"interrupted");return}n==="run"&&s&&await this.writeDroidSessionState(s);let c=o.exitCode===0?d:u,p=o.exitCode===0?"idle":"error";this.finalizeOperation(e,i,c,p);}).catch(()=>{this.interruptedOperations.delete(e),this.finalizeOperation(e,i,u,"error");});}createAjvValidator(){let n={...Vt[this.schemaOptions?.mode||"loose"],...this.schemaOptions?.coerceTypes!==void 0&&{coerceTypes:this.schemaOptions.coerceTypes},...this.schemaOptions?.removeAdditional!==void 0&&{removeAdditional:this.schemaOptions.removeAdditional},...this.schemaOptions?.useDefaults!==void 0&&{useDefaults:this.schemaOptions.useDefaults},...this.schemaOptions?.allErrors!==void 0&&{allErrors:this.schemaOptions.allErrors}};return new Fl({...n,strict:false})}async getSandbox(e){if(this.sandbox)return this.sandbox;if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot create or attach another sandbox");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");let n=this.options.sandboxProvider;this.sandboxState="booting",this.emitLifecycle(e,"sandbox_boot");let r=false;try{if(this.options.sandboxId)(this.options.mcpServers||this.options.integrations||this.options.plugins||this.options.context||this.options.files||this.options.systemPrompt||this.options.managedBrowser||this.options.browserCredentials)&&console.warn("[Evolve] Connecting to existing sandbox - ignoring mcpServers, integrations, plugins, context, files, systemPrompt, managed browser setup, and browser credentials"),this.sandbox=await n.connect(this.options.sandboxId),this.hasRun=!0,await this.loadDroidSessionState(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_connected");else {await this.ensureManagedBrowserSession(e),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let i=this.buildEnvironmentVariables();this.sandbox=await n.create(this.buildSandboxCreateOptions(i)),r=!0,await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox),await this.setupManagedBrowser(this.sandbox),await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox),await this.setupWorkspace(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_ready");}}catch(i){throw r&&this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(e,"sandbox_error"),i}return this.sandbox}resolveKimiMaxContextSize(){if(typeof this.agentConfig.maxContextSize=="number")return this.agentConfig.maxContextSize;let e=this.agentConfig.model||this.registry.defaultModel;return oe(this.registry,e)||oe(this.registry,this.resolveCommandModel(e))?this.registry.models.find(i=>i.alias===e||i.modelId===e)?.maxContextSize??this.registry.spendTrackingTomlProvider?.maxContextSize??Gl:Jl}reasoningEffort(){return Ir(this.agentConfig.type,this.agentConfig.reasoningEffort)}buildKimiDirectModelEnvs(){let e=Ee(this.reasoningEffort()),n=bs(this.reasoningEffort()),r={KIMI_MODEL_NAME:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),KIMI_MODEL_API_KEY:this.agentConfig.apiKey,KIMI_MODEL_PROVIDER_TYPE:"kimi",KIMI_MODEL_MAX_CONTEXT_SIZE:String(this.resolveKimiMaxContextSize()),KIMI_MODEL_DEFAULT_THINKING:e?"true":"false",KIMI_MODEL_THINKING_MODE:e?"on":"off"};return n&&(r.KIMI_MODEL_THINKING_EFFORT=n),this.agentConfig.baseUrl&&(r.KIMI_MODEL_BASE_URL=this.agentConfig.baseUrl),r}buildEnvironmentVariables(){let e={},n=this.validatedUserSecretsForEnvironment();if(this.agentConfig.type==="kimi"&&this.agentConfig.isDirectMode)Object.assign(e,this.buildKimiDirectModelEnvs());else if(this.agentConfig.oauthFileContent)this.registry.oauthActivationEnv&&(e[this.registry.oauthActivationEnv.key]=this.registry.oauthActivationEnv.value);else if(!(this.agentConfig.type==="kimi"&&!this.agentConfig.isDirectMode)){if(!(!this.agentConfig.isDirectMode&&je(this.agentConfig.type))){if(!(this.registry.skipApiKeyEnvInGateway&&!this.agentConfig.isDirectMode))if(this.registry.providerEnvMap&&!this.agentConfig.isDirectMode)for(let r of Object.values(this.registry.providerEnvMap))e[r.keyEnv]=this.agentConfig.apiKey;else {let r=this.agentConfig.model?.split("/")[0],i=r?this.registry.providerEnvMap?.[r]:void 0,s=i?i.keyEnv:this.registry.apiKeyEnv,d=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:s;e[d]=this.agentConfig.apiKey;}}}if(this.agentConfig.isDirectMode&&!this.agentConfig.isOAuth&&this.agentConfig.type!=="kimi")this.agentConfig.baseUrl&&this.registry.baseUrlEnv&&(e[this.registry.baseUrlEnv]=this.agentConfig.baseUrl);else if(!this.agentConfig.isDirectMode){let r=a(this.registry.gatewayPath),i=this.requireActiveProviderRuntimeToken();if(this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=i?.baseUrl??r),i&&(this.shouldExposeProviderRuntimeTokenEnv()&&(e[this.registry.apiKeyEnv]=i.token),this.agentConfig.type==="gemini"&&(e.GEMINI_DEFAULT_AUTH_TYPE=Zn),this.registry.spendTrackingEnvs&&(e[_t]=i.bindingSecret)),!i){if(je(this.agentConfig.type))throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);e[h]=this.agentConfig.apiKey;}}if(this.agentConfig.externalGateway&&this.registry.gatewayConfigEnv&&(e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.externalGateway&&this.agentConfig.type==="gemini"&&(e.GEMINI_CLI_TRUST_WORKSPACE="true"),this.agentConfig.type==="claude"&&(e.IS_SANDBOX="1"),this.managedBrowserSession&&this.options.managedBrowser&&Object.assign(e,zn(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.managedSecretRuntimeToken&&Object.assign(e,O(this.managedSecretRuntimeToken)),n&&Object.assign(e,n),!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";e[r]=Qn(e[r],{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},i);}return !this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&(e[this.registry.spendTrackingEnvs.sessionTagEnv]=this.sessionTag),e}buildSandboxCreateOptions(e){return {...this.options.sandboxCreateOptions,envs:e,workingDirectory:this.workingDir}}validatedUserSecretsForEnvironment(){let e={...this.options.sandboxCreateOptions?.envs,...this.options.secrets};if(Object.keys(e).length===0)return;let n=new Set;this.agentConfig.isDirectMode||(n.add(h),n.add(_t),this.agentConfig.type==="gemini"&&n.add("GEMINI_DEFAULT_AUTH_TYPE"));let r=s=>{s&&n.add(s);};r(this.registry.apiKeyEnv),r(this.registry.baseUrlEnv);for(let s of Object.values(this.registry.providerEnvMap??{}))r(s.keyEnv);if(this.managedSecretRuntimeToken)for(let s of G())n.add(s);for(let s of this.managedSecretRuntimeToken?.env??[])r(s.envName);let i={};for(let[s,d]of Object.entries(e)){if(n.has(s))throw new Error(`${s} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);s!==this.registry.gatewayConfigEnv&&(i[s]=d);}return i}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await ps(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async ensureProviderRuntimeToken(){let e=je(this.agentConfig.type);if(this.agentConfig.isDirectMode||!e||!this.options.providerRouting||this.providerRuntimeToken)return;let n;try{n=await ms(this.options.providerRouting,{provider:e,sessionTag:this.sessionTag});}catch(r){throw fs(r)?new Error(`${e} runtime token endpoint is required in gateway mode: ${r.message}`):r}this.providerRuntimeToken=n,this.providerRuntimeToken&&this.sandbox?.sandboxId&&await this.bindProviderRuntimeToken(this.sandbox.sandboxId);}directSandboxProviderDeclaration(){let e=this.options.sandboxProvider;if(!e||fe(e))return;let n=e.providerType;return c.includes(n)?n:void 0}async bindProviderRuntimeToken(e){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.directSandboxProviderDeclaration();if(!await hs(this.options.providerRouting,{token:this.providerRuntimeToken.token,sandboxId:e,...n?{directSandboxProvider:n}:{}}))throw new Error("Failed to bind provider runtime token to sandbox")}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=zn(this.options.managedBrowser.provider,this.managedBrowserSession);for(let r of n.directories)await e.files.makeDir(r);for(let r of n.files)await e.files.write(r.path,r.data);}async closeManagedBrowserSession(){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let e=this.managedBrowserSession;this.managedBrowserSession=void 0;try{await us(this.options.managedBrowser,e);}catch(n){console.warn(`[Evolve] Managed browser cleanup failed: ${n.message}`);}}async closeProviderRuntimeToken(e=false){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.providerRuntimeToken,r;for(let s=0;s<3;s++)try{if(!await ys(this.options.providerRouting,{token:n.token}))throw new Error("Dashboard returned ok=false");this.providerRuntimeToken=void 0;return}catch(d){r=d,s<2&&await new Promise(u=>setTimeout(u,100*(s+1)));}let i=`Provider runtime token cleanup failed: ${r.message}`;if(e)throw new Error(i);console.warn(`[Evolve] ${i}`),this.providerRuntimeToken=void 0;}async ensureManagedSecretRuntimeToken(){this.managedSecretRuntimeToken||!this.options.managedSecrets||(this.managedSecretRuntimeToken=await J$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{sessionTag:this.sessionTag,secrets:this.options.managedSecrets.secrets}));}async bindManagedSecretRuntimeToken(e){if(!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;if(!await K$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:this.managedSecretRuntimeToken.token,sandboxId:e}))throw new Error("Failed to bind managed secret runtime token to sandbox")}async setupManagedSecretEgress(e){if(!this.managedSecretRuntimeToken||!N$1(this.managedSecretRuntimeToken))return;if(await e.files.makeDir(D$1),await e.commands.run(`umask 077 && mkdir -p ${D$1}/certs && chmod 700 ${D$1} ${D$1}/certs`,{timeoutMs:5e3}),await e.files.write(E,H$1),await e.files.write(F$1,P$1(this.managedSecretRuntimeToken)),await e.commands.run(`chmod 700 ${E} && chmod 600 ${F$1}`,{timeoutMs:5e3}),await e.commands.run(Q$1(),{timeoutMs:3e4}),this.managedSecretProxy=await e.commands.spawn(R(),{timeoutMs:3e4}),(await e.commands.run(`python3 - <<'PY'
213
213
  import socket, sys, time
214
214
  for _ in range(50):
215
215
  try:
@@ -219,12 +219,12 @@ for _ in range(50):
219
219
  except OSError:
220
220
  time.sleep(0.1)
221
221
  sys.exit(1)
222
- PY`,{timeoutMs:1e4})).exitCode!==0)throw new Error("Managed secret egress proxy failed to start");await e.commands.run(S$1(),{timeoutMs:5e3});}async closeManagedSecretRuntimeToken(){let e=this.managedSecretProxy;if(this.managedSecretProxy=void 0,e&&await e.kill().catch(()=>false),!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;let n=this.managedSecretRuntimeToken,r;try{for(let i=0;i<3;i++)try{if(!await L({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:n.token}))throw new Error("Dashboard returned ok=false");return}catch(s){r=s,i<2&&await new Promise(d=>setTimeout(d,100*(i+1)));}console.warn(`[Evolve] Managed secret runtime token cleanup failed: ${r.message}`);}finally{this.managedSecretRuntimeToken=void 0;}}buildGatewayConfigJson(e){let n=this.requireActiveProviderRuntimeToken(),r=this.agentConfig.externalGateway?this.agentConfig.baseUrl??_t(a(this.registry.gatewayPath)):n?.baseUrl??_t(a(this.registry.gatewayPath)),i=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),s={},d=this.options.secrets?.[this.registry.gatewayConfigEnv];if(d)try{s=JSON.parse(d);}catch{}let p=s.provider??{},l=p.litellm??{},o=l.options??{},a$1=l.models??{},c=a$1[i]??{},u=c.headers??{},g=this.agentConfig.type==="opencode"?Vt(this.reasoningEffort()):void 0,f=c.variants??{},h=g?f[g]??{}:void 0;return s.provider={...p,litellm:{...l,npm:"@ai-sdk/openai-compatible",options:{...o,baseURL:r,apiKey:n?.token??this.agentConfig.apiKey},models:{...a$1,[i]:{...c,name:i,headers:{...u,...e},...g?{variants:{...f,[g]:{...h,reasoningEffort:g}}}:{}}}}},JSON.stringify(s)}activeProviderRuntimeToken(){let e=je(this.agentConfig.type);return e&&this.providerRuntimeToken?.provider===e?this.providerRuntimeToken:void 0}requireActiveProviderRuntimeToken(){let e=je(this.agentConfig.type),n=this.activeProviderRuntimeToken();if(!this.agentConfig.isDirectMode&&e&&!n)throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);return n}ensureSessionLogger(e){if(this.sessionLogger)return;let n=this.options.sandboxProvider;this.sessionLogger=new Oe({provider:n?.name||n?.providerType||"unknown",agent:this.agentConfig.type,model:this.agentConfig.model||this.registry.defaultModel,sandboxId:e.sandboxId,tag:this.sessionTag,apiKey:this.agentConfig.isDirectMode?void 0:this.agentConfig.apiKey,observability:{...this.options.observability,...this.managedBrowserSession&&this.options.managedBrowser?{browser_provider:this.options.managedBrowser.provider,browser_session_id:this.managedBrowserSession.id,dashboard_session_id:this.managedBrowserSession.sessionId,browser_session_tag:this.managedBrowserSession.sessionTag,browser_live_url:this.managedBrowserSession.liveUrl}:{}}});}async flushSessionLoggerWithTimeout(e=2e3){this.sessionLogger&&await Promise.race([this.sessionLogger.flush(),new Promise(n=>setTimeout(n,e))]);}requiresPreRunDashboardIngest(){return !!(this.activeProviderRuntimeToken()||this.managedSecretRuntimeToken)}providerRuntimeHeaderUpdates(){let e=this.activeProviderRuntimeToken();return e?{[qn]:e.bindingSecret}:{}}shouldExposeProviderRuntimeTokenEnv(){return this.agentConfig.type!=="kimi"&&!this.registry.gatewayConfigEnv}buildProviderRuntimeProcessEnvs(){if(this.agentConfig.externalGateway){if(this.agentConfig.type==="kimi")return this.buildKimiDirectModelEnvs();let r={[this.registry.apiKeyEnv]:this.agentConfig.apiKey};return this.registry.baseUrlEnv&&this.agentConfig.baseUrl&&(r[this.registry.baseUrlEnv]=this.agentConfig.baseUrl),this.registry.gatewayConfigEnv&&(r[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.type==="gemini"&&(r.GEMINI_CLI_TRUST_WORKSPACE="true"),r}let e=this.activeProviderRuntimeToken();if(!e)return {};let n={};if(this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.apiKeyEnv]=e.token),this.agentConfig.type==="gemini"&&(n.GEMINI_DEFAULT_AUTH_TYPE=Zn),this.registry.baseUrlEnv&&this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.baseUrlEnv]=e.baseUrl),this.registry.spendTrackingEnvs&&(n[Tt]=e.bindingSecret),this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";n[r]=Qn(this.options.secrets?.[r],this.providerRuntimeHeaderUpdates(),i);}return n}buildRunEnvs(e){if(this.agentConfig.externalGateway)return this.buildProviderRuntimeProcessEnvs();if(this.agentConfig.isDirectMode)return;let n=this.buildProviderRuntimeProcessEnvs(),r=this.registry.customHeadersEnv;if(r){let s=this.options.secrets?.[r],d=this.registry.customHeadersFormat||"newline";return n[r]=Qn(s,{[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()},d),n}let i=this.registry.spendTrackingEnvs;return i?{...n,[i.sessionTagEnv]:this.sessionTag,[i.runTagEnv]:`${v}${e}`}:this.registry.gatewayConfigEnv?{...n,[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()})}:Object.keys(n).length>0?n:void 0}async writeCodexGatewayProviderConfig(e){if(this.agentConfig.type==="codex"){if(this.agentConfig.externalGateway){await st(e,this.agentConfig.baseUrl||a(),void 0,void 0,this.homeDir);return}this.agentConfig.isDirectMode||!this.registry.spendTrackingEnvs||await st(e,this.activeProviderRuntimeToken()?.baseUrl||this.agentConfig.baseUrl||a(),this.registry.spendTrackingEnvs,this.activeProviderRuntimeToken()?{[qn]:Tt}:void 0,this.homeDir);}}captureDroidSession(e,n){if(this.agentConfig.type!=="droid")return;let r=n?.find(s=>typeof s.sessionId=="string"&&s.sessionId.length>0)?.sessionId;if(r){this.droidSessionId=r;return}let i=this.extractDroidSessionId(e);i&&(this.droidSessionId=i);}extractDroidSessionId(e){try{return this.findDroidSessionId(JSON.parse(e))}catch{return}}findDroidSessionId(e){if(!e||typeof e!="object"||Array.isArray(e))return;let n=e,r=n.sessionId??n.session_id;return typeof r=="string"&&r.length>0?r:this.findDroidSessionId(n.result)??this.findDroidSessionId(n.params)??this.findDroidSessionId(n.notification)}droidSessionStatePath(){return `${this.homeDir}/.factory/evolve-session.json`}async loadDroidSessionState(e){if(!(this.agentConfig.type!=="droid"||this.droidSessionId))try{let n=await e.files.read(this.droidSessionStatePath());if(typeof n!="string")return;let r=JSON.parse(n);typeof r.sessionId=="string"&&r.sessionId.length>0&&(this.droidSessionId=r.sessionId);}catch{}}async writeDroidSessionState(e){this.agentConfig.type!=="droid"||!this.droidSessionId||(await e.files.makeDir(`${this.homeDir}/.factory`),await e.files.write(this.droidSessionStatePath(),JSON.stringify({sessionId:this.droidSessionId},null,2)));}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??e}droidSettingsModel(){let e=this.agentConfig.model||this.registry.defaultModel;return this.agentConfig.externalGateway?_r(this.registry,e):this.resolveCommandModel(e)}async setupAgentAuth(e){if(this.agentConfig.oauthFileContent&&this.registry.oauthFileName){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir);await e.files.makeDir(n),await e.files.write(`${n}/${this.registry.oauthFileName}`,this.agentConfig.oauthFileContent);return}this.agentConfig.type==="gemini"&&(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&await this.writeGeminiGatewayAuthSettings(e),this.registry.setupCommand&&await e.commands.run(this.registry.setupCommand,{timeoutMs:3e4});}async writeGeminiGatewayAuthSettings(e){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir),r=`${n}/${this.registry.mcpConfig.filename}`;await e.files.makeDir(n);let i={};try{let p=await e.files.read(r);typeof p=="string"&&p.trim()&&(i=JSON.parse(p));}catch(p){let l=p.message||"";if(!/not found|no such file|does not exist/i.test(l))throw p}let s=typeof i.security=="object"&&i.security!==null?i.security:{},d=typeof s.auth=="object"&&s.auth!==null?s.auth:{};i.security={...s,auth:{...d,selectedType:Zn}},await e.files.write(r,JSON.stringify(i,null,2));}async setupAgentPlugins(e){await Qi(this.agentConfig.type,e,this.options.plugins);}assertProviderRuntimeDoesNotExposeGatewayKey(e){if(!this.activeProviderRuntimeToken())return;let n=this.agentConfig.apiKey;for(let[r,i]of Object.entries(e))for(let s of Object.values(i.headers||{}))if(s.includes(n))throw new Error(`MCP server "${r}" would expose the Evolve API key inside the sandbox. Use managed agent-browser or remove this gateway-authenticated MCP server.`)}async setupWorkspace(e,n){let r=this.options.workspaceMode||"knowledge";if(r!=="task"){let s=r==="swe"?`${this.workingDir}/repo ${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`:`${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`;if(await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),!n?.skipSystemPrompt){let d=Un({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),p=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(p,d);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);}let i={...this.options.mcpServers};if(this.options.integrations){let s=await Ci({...this.options.integrations,sessionTag:this.sessionTag});i={...i,integrations:{type:"http",url:s.url,headers:s.headers}};}if(this.options.browserCredentials){if(!this.options.managedBrowser||this.options.managedBrowser.provider!=="agent-browser")throw new Error("Browser credentials require managed remote agent-browser.");if(!this.managedBrowserSession?.id||!this.managedBrowserSession.sessionTag||!this.managedBrowserSession.browserAuthGrantToken)throw new Error("Managed browser session is missing browser credential grant data.");let s=await cs({apiKey:this.options.browserCredentials.apiKey,dashboardUrl:this.options.browserCredentials.dashboardUrl,browserSessionId:this.managedBrowserSession.id,sessionTag:this.managedBrowserSession.sessionTag,grantToken:this.managedBrowserSession.browserAuthGrantToken,config:this.options.browserCredentials.config});i={...i,[Wn]:s};}await this.writeNativeAgentConfig(e),Object.keys(i).length>0&&(this.assertProviderRuntimeDoesNotExposeGatewayKey(i),await en(this.agentConfig.type,e,this.workingDir,i,this.homeDir)),await this.writeCodexGatewayProviderConfig(e),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await tt(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.skills?.length&&await this.setupSkills(e);}async writeNativeAgentConfig(e){let n=this.effectiveNativeConfigDocument();if(!n)return;let r=this.registry.nativeConfig;if(!r)throw new Error(`Agent "${this.agentConfig.type}" has a config but no nativeConfig registry knowledge`);let i=M(r.path,this.homeDir),s=i.substring(0,i.lastIndexOf("/")),d=r.format==="toml"?stringify(n):JSON.stringify(n,null,2);await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),await e.files.write(i,d),await e.commands.run(`chmod 600 ${i}`,{timeoutMs:3e4});}effectiveNativeConfigDocument(){let e=this.agentConfig.config,n=this.agentConfig.preset,r=n?this.registry.presets?.[n]?.configStamp:void 0;return r?wt(e??{},r):e}presetCommandFlags(){let e=this.agentConfig.preset;return e?this.registry.presets?.[e]?.commandFlags:void 0}nativeConfigFlagPath(){let e=this.registry.nativeConfig;if(!(!e||e.delivery!=="settings-flag"||!this.effectiveNativeConfigDocument()))return M(e.path,this.homeDir)}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,r=M(n.targetDir,this.homeDir),i=await kn(this.skills);this.resolvedSkillsList=i,await Sn(e,i,r);}resolvedSkills(){return this.resolvedSkillsList??[]}async uploadContextFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:`${this.workingDir}/context/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:s.startsWith("/")?s:`${this.workingDir}/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e,n){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"?e:Bl(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:n??this.hasRun,sessionId:this.agentConfig.type==="droid"?this.droidSessionId:void 0,reasoningEffort:this.reasoningEffort(),nativeConfigPath:this.nativeConfigFlagPath(),presetFlags:this.presetCommandFlags(),isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:!!this.agentConfig.externalGateway,skills:this.skills,homeDir:this.homeDir})}async writeKimiPerRunConfig(e,n){if(this.agentConfig.isDirectMode||!this.registry.spendTrackingTomlProvider)return;let r=this.requireActiveProviderRuntimeToken();await Xt(e,{...this.registry.spendTrackingTomlProvider,maxContextSize:this.resolveKimiMaxContextSize()},{[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()},{baseUrl:_t(r?.baseUrl??a(this.registry.gatewayPath)),apiKey:r?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:Ee(this.reasoningEffort()),thinkingEffort:hs(this.reasoningEffort())},this.homeDir);}async run(e,n$1){if(this.credentialsSealed)throw new Error("Agent credentials are sealed; this Evolve instance cannot run the agent again");En(e);let{prompt:r,timeoutMs:i=n,background:s=false,checkpointComment:d,resume:p}=e,{from:l}=e;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background run to finish, or create a new Evolve instance.");if(l&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(l==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let v=await Vn(this.storage);if(!v)throw new Error('No checkpoints found for from: "latest".');l=v.id;}if(l){if(!this.storage)throw new Error("Storage not configured. Call .withStorage() before using 'from'.");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");await this.ensureManagedBrowserSession(n$1),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let v=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n$1,"sandbox_boot");try{this.sandbox=await this.options.sandboxProvider.create(this.buildSandboxCreateOptions(v)),await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox);let x=await Vi(this.sandbox,this.storage,l);if(await this.setupManagedBrowser(this.sandbox),x.agentType&&x.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${x.agentType}, current: ${this.agentConfig.type})`);let E=this.options.workspaceMode||"knowledge";if(x.workspaceMode&&x.workspaceMode!==E)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${x.workspaceMode}, current: ${E})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let I=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!I}),await this.loadDroidSessionState(this.sandbox),this.hasRun=!0,this.lastCheckpointId=l,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n$1,"sandbox_ready");}catch(x){throw this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(n$1,"sandbox_error"),x}}let o=await this.getSandbox(n$1);await this.ensureProviderRuntimeToken(),await this.loadDroidSessionState(o),this.lastRunTimestamp=Date.now(),this.ensureSessionLogger(o),this.sessionLogger?.writePrompt(r),this.requiresPreRunDashboardIngest()&&await this.flushSessionLoggerWithTimeout();let a$1=this.buildCommand(r,p),c=randomUUID(),u$1=this.buildRunEnvs(c);if(await this.writeCodexGatewayProviderConfig(o),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await tt(o,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.agentConfig.type==="qwen"&&await Wt(o,Ee(this.reasoningEffort()),this.homeDir),await this.writeKimiPerRunConfig(o,c),(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&this.registry.droidGatewaySettings){let v$1=!!this.agentConfig.externalGateway,x=v$1?void 0:this.requireActiveProviderRuntimeToken();await rt(o,{...this.registry.droidGatewaySettings,model:this.droidSettingsModel(),baseUrl:v$1?this.agentConfig.baseUrl??a():_t(x?.baseUrl??a()),apiKeyEnv:this.registry.apiKeyEnv},v$1?{}:{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir);}let g="",f=ne(this.agentConfig.type),h=v=>{g+=v;let x=g.split(`
222
+ PY`,{timeoutMs:1e4})).exitCode!==0)throw new Error("Managed secret egress proxy failed to start");await e.commands.run(S$1(),{timeoutMs:5e3});}async closeManagedSecretRuntimeToken(){let e=this.managedSecretProxy;if(this.managedSecretProxy=void 0,e&&await e.kill().catch(()=>false),!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;let n=this.managedSecretRuntimeToken,r;try{for(let i=0;i<3;i++)try{if(!await L({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:n.token}))throw new Error("Dashboard returned ok=false");return}catch(s){r=s,i<2&&await new Promise(d=>setTimeout(d,100*(i+1)));}console.warn(`[Evolve] Managed secret runtime token cleanup failed: ${r.message}`);}finally{this.managedSecretRuntimeToken=void 0;}}buildGatewayConfigJson(e){let n=this.requireActiveProviderRuntimeToken(),r=this.agentConfig.externalGateway?this.agentConfig.baseUrl??Rt(a(this.registry.gatewayPath)):n?.baseUrl??Rt(a(this.registry.gatewayPath)),i=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),s={},d=this.options.secrets?.[this.registry.gatewayConfigEnv];if(d)try{s=JSON.parse(d);}catch{}let u=s.provider??{},l=u.litellm??{},o=l.options??{},a$1=l.models??{},c=a$1[i]??{},p=c.headers??{},g=this.agentConfig.type==="opencode"?Gt(this.reasoningEffort()):void 0,f=c.variants??{},h=g?f[g]??{}:void 0;return s.provider={...u,litellm:{...l,npm:"@ai-sdk/openai-compatible",options:{...o,baseURL:r,apiKey:n?.token??this.agentConfig.apiKey},models:{...a$1,[i]:{...c,name:i,headers:{...p,...e},...g?{variants:{...f,[g]:{...h,reasoningEffort:g}}}:{}}}}},JSON.stringify(s)}activeProviderRuntimeToken(){let e=je(this.agentConfig.type);return e&&this.providerRuntimeToken?.provider===e?this.providerRuntimeToken:void 0}requireActiveProviderRuntimeToken(){let e=je(this.agentConfig.type),n=this.activeProviderRuntimeToken();if(!this.agentConfig.isDirectMode&&e&&!n)throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);return n}ensureSessionLogger(e){if(this.sessionLogger)return;let n=this.options.sandboxProvider;this.sessionLogger=new Oe({provider:n?.name||n?.providerType||"unknown",agent:this.agentConfig.type,model:this.agentConfig.model||this.registry.defaultModel,reasoningEffort:this.reasoningEffort(),sandboxId:e.sandboxId,tag:this.sessionTag,apiKey:this.agentConfig.isDirectMode?void 0:this.agentConfig.apiKey,observability:{...this.options.observability,...this.managedBrowserSession&&this.options.managedBrowser?{browser_provider:this.options.managedBrowser.provider,browser_session_id:this.managedBrowserSession.id,dashboard_session_id:this.managedBrowserSession.sessionId,browser_session_tag:this.managedBrowserSession.sessionTag,browser_live_url:this.managedBrowserSession.liveUrl}:{}}});}async flushSessionLoggerWithTimeout(e=2e3){this.sessionLogger&&await Promise.race([this.sessionLogger.flush(),new Promise(n=>setTimeout(n,e))]);}requiresPreRunDashboardIngest(){return !!(this.activeProviderRuntimeToken()||this.managedSecretRuntimeToken)}providerRuntimeHeaderUpdates(){let e=this.activeProviderRuntimeToken();return e?{[qn]:e.bindingSecret}:{}}shouldExposeProviderRuntimeTokenEnv(){return this.agentConfig.type!=="kimi"&&!this.registry.gatewayConfigEnv}buildProviderRuntimeProcessEnvs(){if(this.agentConfig.externalGateway){if(this.agentConfig.type==="kimi")return this.buildKimiDirectModelEnvs();let r={[this.registry.apiKeyEnv]:this.agentConfig.apiKey};return this.registry.baseUrlEnv&&this.agentConfig.baseUrl&&(r[this.registry.baseUrlEnv]=this.agentConfig.baseUrl),this.registry.gatewayConfigEnv&&(r[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.type==="gemini"&&(r.GEMINI_CLI_TRUST_WORKSPACE="true"),r}let e=this.activeProviderRuntimeToken();if(!e)return {};let n={};if(this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.apiKeyEnv]=e.token),this.agentConfig.type==="gemini"&&(n.GEMINI_DEFAULT_AUTH_TYPE=Zn),this.registry.baseUrlEnv&&this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.baseUrlEnv]=e.baseUrl),this.registry.spendTrackingEnvs&&(n[_t]=e.bindingSecret),this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";n[r]=Qn(this.options.secrets?.[r],this.providerRuntimeHeaderUpdates(),i);}return n}buildRunEnvs(e){if(this.agentConfig.externalGateway)return this.buildProviderRuntimeProcessEnvs();if(this.agentConfig.isDirectMode)return;let n=this.buildProviderRuntimeProcessEnvs(),r=this.registry.customHeadersEnv;if(r){let s=this.options.secrets?.[r],d=this.registry.customHeadersFormat||"newline";return n[r]=Qn(s,{[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()},d),n}let i=this.registry.spendTrackingEnvs;return i?{...n,[i.sessionTagEnv]:this.sessionTag,[i.runTagEnv]:`${v}${e}`}:this.registry.gatewayConfigEnv?{...n,[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()})}:Object.keys(n).length>0?n:void 0}async writeCodexGatewayProviderConfig(e){if(this.agentConfig.type==="codex"){if(this.agentConfig.externalGateway){await st(e,this.agentConfig.baseUrl||a(),void 0,void 0,this.homeDir);return}this.agentConfig.isDirectMode||!this.registry.spendTrackingEnvs||await st(e,this.activeProviderRuntimeToken()?.baseUrl||this.agentConfig.baseUrl||a(),this.registry.spendTrackingEnvs,this.activeProviderRuntimeToken()?{[qn]:_t}:void 0,this.homeDir);}}captureDroidSession(e,n){if(this.agentConfig.type!=="droid")return;let r=n?.find(s=>typeof s.sessionId=="string"&&s.sessionId.length>0)?.sessionId;if(r){this.droidSessionId=r;return}let i=this.extractDroidSessionId(e);i&&(this.droidSessionId=i);}extractDroidSessionId(e){try{return this.findDroidSessionId(JSON.parse(e))}catch{return}}findDroidSessionId(e){if(!e||typeof e!="object"||Array.isArray(e))return;let n=e,r=n.sessionId??n.session_id;return typeof r=="string"&&r.length>0?r:this.findDroidSessionId(n.result)??this.findDroidSessionId(n.params)??this.findDroidSessionId(n.notification)}droidSessionStatePath(){return `${this.homeDir}/.factory/evolve-session.json`}async loadDroidSessionState(e){if(!(this.agentConfig.type!=="droid"||this.droidSessionId))try{let n=await e.files.read(this.droidSessionStatePath());if(typeof n!="string")return;let r=JSON.parse(n);typeof r.sessionId=="string"&&r.sessionId.length>0&&(this.droidSessionId=r.sessionId);}catch{}}async writeDroidSessionState(e){this.agentConfig.type!=="droid"||!this.droidSessionId||(await e.files.makeDir(`${this.homeDir}/.factory`),await e.files.write(this.droidSessionStatePath(),JSON.stringify({sessionId:this.droidSessionId},null,2)));}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??e}droidSettingsModel(){let e=this.agentConfig.model||this.registry.defaultModel;return this.agentConfig.externalGateway?Ar(this.registry,e):this.resolveCommandModel(e)}async setupAgentAuth(e){if(this.agentConfig.oauthFileContent&&this.registry.oauthFileName){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir);await e.files.makeDir(n),await e.files.write(`${n}/${this.registry.oauthFileName}`,this.agentConfig.oauthFileContent);return}this.agentConfig.type==="gemini"&&(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&await this.writeGeminiGatewayAuthSettings(e),this.registry.setupCommand&&await e.commands.run(this.registry.setupCommand,{timeoutMs:3e4});}async writeGeminiGatewayAuthSettings(e){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir),r=`${n}/${this.registry.mcpConfig.filename}`;await e.files.makeDir(n);let i={};try{let u=await e.files.read(r);typeof u=="string"&&u.trim()&&(i=JSON.parse(u));}catch(u){let l=u.message||"";if(!/not found|no such file|does not exist/i.test(l))throw u}let s=typeof i.security=="object"&&i.security!==null?i.security:{},d=typeof s.auth=="object"&&s.auth!==null?s.auth:{};i.security={...s,auth:{...d,selectedType:Zn}},await e.files.write(r,JSON.stringify(i,null,2));}async setupAgentPlugins(e){await ns(this.agentConfig.type,e,this.options.plugins);}assertProviderRuntimeDoesNotExposeGatewayKey(e){if(!this.activeProviderRuntimeToken())return;let n=this.agentConfig.apiKey;for(let[r,i]of Object.entries(e))for(let s of Object.values(i.headers||{}))if(s.includes(n))throw new Error(`MCP server "${r}" would expose the Evolve API key inside the sandbox. Use managed agent-browser or remove this gateway-authenticated MCP server.`)}async setupWorkspace(e,n){let r=this.options.workspaceMode||"knowledge";if(r!=="task"){let s=r==="swe"?`${this.workingDir}/repo ${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`:`${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`;if(await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),!n?.skipSystemPrompt){let d=$n({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),u=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(u,d);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);}let i={...this.options.mcpServers};if(this.options.integrations){let s=await Ri({...this.options.integrations,sessionTag:this.sessionTag});i={...i,integrations:{type:"http",url:s.url,headers:s.headers}};}if(this.options.browserCredentials){if(!this.options.managedBrowser||this.options.managedBrowser.provider!=="agent-browser")throw new Error("Browser credentials require managed remote agent-browser.");if(!this.managedBrowserSession?.id||!this.managedBrowserSession.sessionTag||!this.managedBrowserSession.browserAuthGrantToken)throw new Error("Managed browser session is missing browser credential grant data.");let s=await gs({apiKey:this.options.browserCredentials.apiKey,dashboardUrl:this.options.browserCredentials.dashboardUrl,browserSessionId:this.managedBrowserSession.id,sessionTag:this.managedBrowserSession.sessionTag,grantToken:this.managedBrowserSession.browserAuthGrantToken,config:this.options.browserCredentials.config});i={...i,[Wn]:s};}await this.writeNativeAgentConfig(e),Object.keys(i).length>0&&(this.assertProviderRuntimeDoesNotExposeGatewayKey(i),await tn(this.agentConfig.type,e,this.workingDir,i,this.homeDir)),await this.writeCodexGatewayProviderConfig(e),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await tt(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.skills?.length&&await this.setupSkills(e);}async writeNativeAgentConfig(e){let n=this.effectiveNativeConfigDocument();if(!n)return;let r=this.registry.nativeConfig;if(!r)throw new Error(`Agent "${this.agentConfig.type}" has a config but no nativeConfig registry knowledge`);let i=M(r.path,this.homeDir),s=i.substring(0,i.lastIndexOf("/")),d=r.format==="toml"?stringify(n):JSON.stringify(n,null,2);await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),await e.files.write(i,d),await e.commands.run(`chmod 600 ${i}`,{timeoutMs:3e4});}effectiveNativeConfigDocument(){let e=this.agentConfig.config,n=this.agentConfig.preset,r=n?this.registry.presets?.[n]?.configStamp:void 0;return r?wt(e??{},r):e}presetCommandFlags(){let e=this.agentConfig.preset;return e?this.registry.presets?.[e]?.commandFlags:void 0}nativeConfigFlagPath(){let e=this.registry.nativeConfig;if(!(!e||e.delivery!=="settings-flag"||!this.effectiveNativeConfigDocument()))return M(e.path,this.homeDir)}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,r=M(n.targetDir,this.homeDir),i=await Sn(this.skills);this.resolvedSkillsList=i,await xn(e,i,r);}resolvedSkills(){return this.resolvedSkillsList??[]}async uploadContextFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:`${this.workingDir}/context/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:s.startsWith("/")?s:`${this.workingDir}/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e,n){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"?e:Vl(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:n??this.hasRun,sessionId:this.agentConfig.type==="droid"?this.droidSessionId:void 0,reasoningEffort:this.reasoningEffort(),nativeConfigPath:this.nativeConfigFlagPath(),presetFlags:this.presetCommandFlags(),isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:!!this.agentConfig.externalGateway,skills:this.skills,homeDir:this.homeDir})}async writeKimiPerRunConfig(e,n){if(this.agentConfig.isDirectMode||!this.registry.spendTrackingTomlProvider)return;let r=this.requireActiveProviderRuntimeToken();await en(e,{...this.registry.spendTrackingTomlProvider,maxContextSize:this.resolveKimiMaxContextSize()},{[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()},{baseUrl:Rt(r?.baseUrl??a(this.registry.gatewayPath)),apiKey:r?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:Ee(this.reasoningEffort()),thinkingEffort:bs(this.reasoningEffort())},this.homeDir);}async run(e,n$1){if(this.credentialsSealed)throw new Error("Agent credentials are sealed; this Evolve instance cannot run the agent again");Tn(e);let{prompt:r,timeoutMs:i=n,background:s=false,checkpointComment:d,resume:u$1}=e,{from:l}=e;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background run to finish, or create a new Evolve instance.");if(l&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(l==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let v=await Vn(this.storage);if(!v)throw new Error('No checkpoints found for from: "latest".');l=v.id;}if(l){if(!this.storage)throw new Error("Storage not configured. Call .withStorage() before using 'from'.");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");await this.ensureManagedBrowserSession(n$1),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let v=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n$1,"sandbox_boot");try{this.sandbox=await this.options.sandboxProvider.create(this.buildSandboxCreateOptions(v)),await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox);let x=await Wi(this.sandbox,this.storage,l);if(await this.setupManagedBrowser(this.sandbox),x.agentType&&x.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${x.agentType}, current: ${this.agentConfig.type})`);let E=this.options.workspaceMode||"knowledge";if(x.workspaceMode&&x.workspaceMode!==E)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${x.workspaceMode}, current: ${E})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let I=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!I}),await this.loadDroidSessionState(this.sandbox),this.hasRun=!0,this.lastCheckpointId=l,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n$1,"sandbox_ready");}catch(x){throw this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(n$1,"sandbox_error"),x}}let o=await this.getSandbox(n$1);await this.ensureProviderRuntimeToken(),await this.loadDroidSessionState(o),this.lastRunTimestamp=Date.now(),this.ensureSessionLogger(o),this.sessionLogger?.writePrompt(r),this.requiresPreRunDashboardIngest()&&await this.flushSessionLoggerWithTimeout();let a$1=this.buildCommand(r,u$1),c=randomUUID(),p=this.buildRunEnvs(c);if(await this.writeCodexGatewayProviderConfig(o),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await tt(o,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.agentConfig.type==="qwen"&&await Ht(o,Ee(this.reasoningEffort()),this.homeDir),await this.writeKimiPerRunConfig(o,c),(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&this.registry.droidGatewaySettings){let v$1=!!this.agentConfig.externalGateway,x=v$1?void 0:this.requireActiveProviderRuntimeToken();await rt(o,{...this.registry.droidGatewaySettings,model:this.droidSettingsModel(),baseUrl:v$1?this.agentConfig.baseUrl??a():Rt(x?.baseUrl??a()),apiKeyEnv:this.registry.apiKeyEnv},v$1?{}:{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir);}let g="",f=ne(this.agentConfig.type),h=v=>{g+=v;let x=g.split(`
223
223
  `);g=x.pop()??"";for(let E of x){if(!E.trim())continue;let I=f(E);if(this.captureDroidSession(E,I),this.sessionLogger?.writeEventParsed(E,I),n$1?.onStdout?.(E+`
224
- `),I&&n$1?.onContent)for(let Je of I)n$1.onContent(Je);}},m=v=>{n$1?.onStderr?.(v);},y=await o.commands.spawn(a$1,{cwd:this.workingDir,timeoutMs:i,envs:u$1,onStdout:h,onStderr:m}),w=this.beginOperation("run",y,n$1,"run_start");if(this.hasRun=true,s)return this.watchBackgroundOperation(w,"run",y,n$1,o),{sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:0,stdout:`Background process started with ID ${y.processId}`,stderr:""};let b;try{b=await y.wait();}catch(v){throw this.interruptedOperations.delete(w),this.finalizeOperation(w,n$1,"run_failed","error"),v}if(this.interruptedOperations.delete(w)||b.exitCode===130?this.finalizeOperation(w,n$1,"run_interrupted","interrupted"):b.exitCode===0?this.finalizeOperation(w,n$1,"run_complete","idle"):this.finalizeOperation(w,n$1,"run_failed","error"),g.trim()){let v=f(g);if(this.captureDroidSession(g,v),this.sessionLogger?.writeEventParsed(g,v),n$1?.onStdout?.(g+`
225
- `),v&&n$1?.onContent)for(let x of v)n$1.onContent(x);}await this.writeDroidSessionState(o),this.sessionLogger&&!s&&await this.flushSessionLoggerWithTimeout();let C;if(this.storage&&!s&&b.exitCode===0)try{C=await jn(o,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:d,parentId:this.lastCheckpointId}),this.lastCheckpointId=C.id;}catch(v){console.warn(`[Evolve] Auto-checkpoint failed: ${v.message}`);}return {sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:b.exitCode,stdout:b.stdout,stderr:b.stderr,checkpoint:C}}async executeCommand(e,n$1={},r){let{timeoutMs:i=n,background:s=false}=n$1;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background command to finish, or create a new Evolve instance.");let d=await this.getSandbox(r);this.credentialsSealed||await this.ensureProviderRuntimeToken(),this.lastRunTimestamp=Date.now(),this.requiresPreRunDashboardIngest()&&(this.ensureSessionLogger(d),this.sessionLogger?.writePrompt(e),await this.flushSessionLoggerWithTimeout());let p="",l="",o=m=>{p+=m,r?.onStdout?.(m);},a=m=>{l+=m,r?.onStderr?.(m);},c=this.credentialsSealed?{}:this.buildProviderRuntimeProcessEnvs(),u=await d.commands.spawn(e,{cwd:this.workingDir,timeoutMs:i,envs:Object.keys(c).length>0?c:void 0,onStdout:o,onStderr:a}),g=this.beginOperation("command",u,r,"command_start");if(s)return this.watchBackgroundOperation(g,"command",u,r),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${u.processId}`,stderr:""};let f;try{f=await u.wait();}catch(m){throw this.interruptedOperations.delete(g),this.finalizeOperation(g,r,"command_failed","error"),m}return this.interruptedOperations.delete(g)||f.exitCode===130?this.finalizeOperation(g,r,"command_interrupted","interrupted"):f.exitCode===0?this.finalizeOperation(g,r,"command_complete","idle"):this.finalizeOperation(g,r,"command_failed","error"),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:f.exitCode,stdout:p||f.stdout||"",stderr:l||f.stderr||""}}async sealCredentials(){if(this.credentialsSealed)return;if(!this.sandbox)throw new Error("No active sandbox. Call run() or executeCommand() first.");if(this.activeCommand)throw new Error("Cannot seal credentials while a process is running.");if(this.agentConfig.isDirectMode&&!this.agentConfig.externalGateway)throw new Error("Credential sealing requires gateway mode; direct provider credentials cannot be revoked by Evolve");if([this.options.secrets&&Object.keys(this.options.secrets).length>0,this.options.sandboxCreateOptions?.envs&&Object.keys(this.options.sandboxCreateOptions.envs).length>0,this.options.managedSecrets,this.options.integrations,this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0,this.options.managedBrowser,this.options.browserCredentials].some(Boolean))throw new Error("Credential sealing requires a credential-minimal sandbox: omit secrets, managed secrets, integrations, MCP servers, and browser credentials");if(this.agentConfig.externalGateway){await this.agentConfig.externalGateway.revoke(),this.credentialsSealed=true;return}if(!this.providerRuntimeToken||!this.options.providerRouting)throw new Error("Cannot seal credentials: no active provider runtime token to revoke. Without a gateway-issued runtime token the sandbox may hold credentials Evolve cannot revoke, so sealing would be a false guarantee.");await this.closeProviderRuntimeToken(true),this.credentialsSealed=true;}isSealed(){return this.credentialsSealed}async collectArtifacts(e){if(!this.credentialsSealed)throw new Error("Call sealCredentials() before collecting artifacts.");if(!this.sandbox)throw new Error("No active sandbox.");if(this.activeCommand)throw new Error("Cannot collect artifacts while a process is running.");return fs(this.sandbox,this.workingDir,e)}async uploadContext(e){let n=await this.getSandbox();await this.uploadContextFiles(n,e);}async uploadFiles(e){let n=await this.getSandbox();await this.uploadWorkspaceFiles(n,e);}async uploadFileFromPath(e,n){let r=await this.getSandbox(),i=e.startsWith("/")?e:`${this.workingDir}/${e}`,s=i.substring(0,i.lastIndexOf("/"));if(s&&await r.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),r.files.writeFromPath){await r.files.writeFromPath(i,n);return}let{readFile:d}=await import('fs/promises');await r.files.write(i,await d(n));}async getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,i=e?"":"-maxdepth 1",d=(await n.commands.run(`find ${r} ${i} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
226
- `).filter(Boolean),p=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,l=[],o=`${r}/`;for(let f of d){let[h,m]=f.split("|");if(!h||!m)continue;let y=parseInt(m,10);p>0&&y<p||l.push(h);}let a={},c=await Promise.all(l.map(async f=>{try{let h=await n.files.read(f);return {relativePath:f.startsWith(o)?f.slice(o.length):f.split("/").pop()||f,content:h}}catch{return null}}));for(let f of c)f&&(a[f.relativePath]=f.content);if(!this.zodSchema&&!this.jsonSchema)return {files:a,data:null};let u=a["result.json"];if(!u)return {files:a,data:null,error:"Schema provided but agent did not create output/result.json"};let g=typeof u=="string"?u:new TextDecoder().decode(u);try{let f=JSON.parse(g);if(this.zodSchema){let h=this.zodSchema.safeParse(f);return h.success?{files:a,data:h.data}:{files:a,data:null,error:`Schema validation failed: ${h.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(f))return {files:a,data:f};{let m=this.compiledValidator.errors?.map(y=>`${y.instancePath} ${y.message}`).join(", ")||"Unknown validation error";return {files:a,data:null,error:`Schema validation failed: ${m}`,rawData:g}}}return {files:a,data:null}}catch(f){return {files:a,data:null,error:`Failed to parse result.json: ${f.message}`,rawData:g}}}async checkpoint(e){if(!this.storage)throw new Error("Storage not configured. Call .withStorage().");if(!this.sandbox)throw new Error("No active sandbox. Call run() first.");let n=await jn(this.sandbox,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:e?.comment,parentId:this.lastCheckpointId});return this.lastCheckpointId=n.id,n}getSession(){return this.sandbox?.sandboxId||this.options.sandboxId||null}async setSession(e){if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot switch sandboxes");if(this.options.managedSecrets)throw new Error("setSession() cannot be used with managed secrets; managed secret grants are sandbox-scoped.");if(this.options.sandboxCreateOptions?.user)throw new Error("setSession() cannot be used with a configured sandbox user; the user cannot be enforced on an existing sandbox.");if(this.activeCommand&&!await this.interrupt())throw new Error("Cannot switch session while an active process is running and could not be interrupted.");await this.rotateSession(),await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession(),this.options.sandboxId=e,this.sandbox=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="idle",this.hasRun=true,this.lastCheckpointId=void 0;}async pause(e){this.sandbox&&(this.activeCommand&&await this.interrupt(e),await this.sandbox.pause(),this.sandboxState="paused",this.agentState="idle",this.emitLifecycle(e,"sandbox_pause"));}async resume(e){this.sandbox&&this.options.sandboxProvider&&(this.sandbox=await this.options.sandboxProvider.connect(this.sandbox.sandboxId),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_resume"));}async interrupt(e){if(!this.activeCommand&&!this.activeProcessId)return false;let n=this.activeOperationId,r=this.activeOperationKind,i=false;try{this.activeCommand?i=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(i=await this.sandbox.commands.kill(this.activeProcessId));}catch{i=false;}if(!i)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let s=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,s),i}status(){let e=this.browserRuntimeInfo();return {sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,activeProcessId:this.activeProcessId,hasRun:this.hasRun,timestamp:new Date().toISOString(),...e?{browser:e}:{}}}async kill(e){await this.rotateSession();let n;try{this.activeCommand&&await this.interrupt(e),this.sandbox&&(await this.sandbox.kill(),this.sandbox=void 0);}catch(r){n=r;}finally{await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession();}if(n)throw n;this.options.sandboxId=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="stopped",this.agentState="idle",this.hasRun=false,this.lastCheckpointId=void 0,this.emitLifecycle(e,"sandbox_killed");}async getHost(e){return (await this.getSandbox()).getHost(e)}getAgentType(){return this.agentConfig.type}getSessionTag(){return !this.sandbox&&!this.sessionLogger?null:this.sessionTag}getSessionTimestamp(){return this.sessionLogger?.getTimestamp()||null}async flushObservability(){await this.sessionLogger?.flush();}async rotateSession(){let e=!!this.sessionLogger;this.sessionLogger&&(await this.sessionLogger.close(),this.sessionLogger=void 0),e&&(this.previousSessionTag=this.sessionTag),this.sessionTag=ms(this.options.sessionTagPrefix||"evolve");}async fetchSpend(e){if(this.agentConfig.isDirectMode)throw new Error("Cost tracking requires gateway mode (set EVOLVE_API_KEY).");let n=this.agentConfig.apiKey;if(!n)throw new Error("Cost tracking requires an API key.");let r=process.env.EVOLVE_DASHBOARD_URL||s,i=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Spend query failed (${i.status}): ${s}`)}return i}resolveSpendTag(){if(this.sandbox||this.sessionLogger)return this.sessionTag;if(this.previousSessionTag)return this.previousSessionTag;throw new Error("No session to query. Call run() first.")}normalizeRunCost(e,n){return {...e,asOf:e.asOf??n.asOf,isComplete:e.isComplete??n.isComplete,truncated:e.truncated??n.truncated}}normalizeSessionCost(e){let n={asOf:e.asOf,isComplete:e.isComplete,truncated:e.truncated};return {...e,runs:e.runs.map(r=>this.normalizeRunCost(r,n))}}async getSessionCost(){let e=this.resolveSpendTag(),n=new URLSearchParams({tag:e}),i=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(i)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let d=new URLSearchParams({tag:n,runId:e.runId}),l=await(await this.fetchSpend(d)).json();return this.normalizeRunCost(l,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),i=e.index>0?e.index-1:r.runs.length+e.index,s=r.runs[i];if(!s)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return s}};function Kl(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function jl(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("Browser profiles require EVOLVE_API_KEY or an explicit apiKey");return e}async function Vl(t){return await t.text().catch(()=>"")}async function ys(t,e,n={}){let r=await fetch(`${Kl(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${jl(t?.apiKey)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Error(`Browser profiles request failed (${r.status}): ${await Vl(r)}`);return r.status===204?{}:await r.json()}var Rt=class{constructor(e={}){this.config=e;}toMetadata(e){return {id:e.id,profile:e.profile,createdAt:e.createdAt||e.created_at||"",updatedAt:e.updatedAt||e.updated_at||"",lastUsedAt:e.lastUsedAt??e.last_used_at??null}}async list(){return {profiles:(await ys(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await ys(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function Xn(t={}){return new Rt(t)}var Ge=class extends EventEmitter{config={};agent;fallbackSandboxState="stopped";fallbackAgentState="idle";fallbackHasRun=false;constructor(){super();}on(e,n){return super.on(e,n)}off(e,n){return super.off(e,n)}emit(e,...n){return super.emit(e,...n)}withAgent(e){return e&&(Ie(e),vt(e),this.config.agent=e,this._cachedGatewayOverrides=null),this}withSandbox(e){return this.config.sandbox=e,this}withSandboxCreateOptions(e){return this.config.sandboxCreateOptions={...e,envs:e.envs?{...e.envs}:void 0,metadata:e.metadata?{...e.metadata}:void 0},this}withWorkingDirectory(e){return this.config.workingDirectory=e,this}withWorkspaceMode(e){return this.config.workspaceMode=e,this}withSecrets(e){return this.config.secrets={...this.config.secrets,...e},this}withManagedSecrets(e){return this.config.managedSecrets=e,this}withSession(e){return this.config.sandboxId=e,this.agent||(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this}withSystemPrompt(e){return this.config.systemPrompt=e,this}withContext(e){return this.config.context={...this.config.context,...e},this}withFiles(e){return this.config.files={...this.config.files,...e},this}withMcpServers(e){return this.config.mcpServers={...this.config.mcpServers,...e},this}withBrowser(e={provider:"agent-browser",remote:true}){return e===false?delete this.config.browser:this.config.browser=e,this}withBrowserCredentials(e={}){return this.config.browserCredentials=e,this}withPlugins(e){let n=Array.isArray(e)?e:[e];return this.config.plugins=[...this.config.plugins??[],...n],this}withSkills(e){return this.config.skills=e,this}withSchema(e,n){return this.config.schema=e,n&&(F(e)?console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead"):this.config.schemaOptions=n),this}withSessionTagPrefix(e){return this.config.sessionTagPrefix=e,this}withObservability(e){return this.config.observability={...this.config.observability,...e},this}withIntegrations(e){return this.config.integrations=e,this}withStorage(e){return this.config.storage=e||{},this}static integrations=Ei;static browserCredentials=Hn;static browserProfiles=Xn;static managedSecrets=I;async initializeAgent(){let e=bt(this.config.agent),n=D(e.type);if(this.config.integrations&&e.isDirectMode)throw new Error("withIntegrations() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&e.isDirectMode)throw new Error("withManagedSecrets() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&this.config.sandboxId)throw new Error("withManagedSecrets() cannot be used with withSession(); managed secret grants are sandbox-scoped.");let r=M$1(this.config.managedSecrets,n);if(r&&this.config.sandbox&&!fe(this.config.sandbox))throw new Error("withManagedSecrets() requires an Evolve-managed sandbox; remove withSandbox() or pass a managed sandbox provider.");let i=this.config.sandbox??(r?await Ae(e.apiKey):await Pn()),s$1={},d,p,l=this.config.skills,o;if(this.config.browser){let u=is(this.config.browser);if(o=u,u.provider==="browser-use"){if(e.isDirectMode)throw new Error('withBrowser("browser-use") requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.');s$1=g(e.apiKey);}if((u.provider==="actionbook"||u.provider==="agent-browser")&&u.managed){if(e.isDirectMode)throw new Error(`Managed browser provider "${u.provider}" requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.`);d=u.provider==="actionbook"?In:wi,p={provider:u.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,...u.profile?{profile:u.profile}:{}};}if(u.profile&&!u.managed)throw new Error('withBrowser({ profile }) requires managed remote browser mode. Use .withBrowser({ profile }) or .withBrowser({ provider: "agent-browser", remote: true, profile }).')}if(this.config.browserCredentials!==void 0){if(this.config.sandboxId)throw new Error("withBrowserCredentials() cannot be used with withSession(); browser login tokens are run-scoped.");if(e.isDirectMode)throw new Error("withBrowserCredentials() requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.");if(!o||o.provider!=="agent-browser"||!o.managed)throw new Error('withBrowserCredentials() requires .withBrowser() or .withBrowser({ provider: "agent-browser", remote: true }).');if(this.config.mcpServers?.["browser-login"])throw new Error('withBrowserCredentials() reserves the "browser-login" MCP server name.')}let a=this.config.storage!==void 0?xt(this.config.storage,!e.isDirectMode,s,e.isDirectMode?void 0:e.apiKey):void 0,c={sandboxProvider:i,sandboxCreateOptions:this.config.sandboxCreateOptions,secrets:this.config.secrets,managedSecrets:r?{secrets:r,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,sandboxId:this.config.sandboxId,workingDirectory:this.config.workingDirectory,workspaceMode:this.config.workspaceMode,systemPrompt:this.config.systemPrompt,context:this.config.context,files:this.config.files,mcpServers:{...s$1,...this.config.mcpServers},browserPrompt:d,managedBrowser:p,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,config:this.config.browserCredentials}:void 0,plugins:this.config.plugins,skills:l,schema:this.config.schema,schemaOptions:this.config.schemaOptions,sessionTagPrefix:this.config.sessionTagPrefix,observability:this.config.observability,integrations:this.config.integrations?{...this.config.integrations,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,providerRouting:e.isDirectMode?void 0:{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s},storage:a};this.agent=new Ve(e,c);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,i=this.listenerCount("lifecycle")>0;return {onStdout:e?s=>this.emit("stdout",s):void 0,onStderr:n?s=>this.emit("stderr",s):void 0,onContent:r?s=>this.emit("content",s):void 0,onLifecycle:i?s=>this.emit("lifecycle",s):void 0}}emitLifecycleFromStatus(e){if(this.listenerCount("lifecycle")===0)return;let n=this.status();this.emit("lifecycle",{sandboxId:n.sandboxId,sandbox:n.sandbox,agent:n.agent,timestamp:new Date().toISOString(),reason:e,...n.browser?{browser:n.browser}:{}});}async run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d}){if(i&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let p=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d},p)}async executeCommand(e,n={}){this.agent||await this.initializeAgent();let r=this.createStreamCallbacks();return this.agent.executeCommand(e,n,r)}async prepareSandbox(){this.agent||await this.initializeAgent();let e=this.createStreamCallbacks();return (await this.agent.getSandbox(e)).sandboxId}async updateNetwork(e){if(!this.agent)throw new Error("No sandbox yet. Call prepareSandbox(), run() or executeCommand() before updateNetwork().");let n=await this.agent.getSandbox(this.createStreamCallbacks());if(typeof n.updateNetwork!="function")throw new Error(`The ${this.config.sandbox?.providerType??"configured"} sandbox provider cannot change network policy after start. Create the sandbox with the policy it needs for its whole lifetime, or use a provider that supports runtime changes.`);await n.updateNetwork(e);}async sealCredentials(){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");await this.agent.sealCredentials();}isSealed(){return this.agent?.isSealed()??false}resolvedSkills(){return this.agent?.resolvedSkills()??[]}async collectArtifacts(e){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");return this.agent.collectArtifacts(e)}async interrupt(){if(!this.agent)return false;let e=this.createStreamCallbacks();return this.agent.interrupt(e)}async uploadContext(e){return this.agent||await this.initializeAgent(),this.agent.uploadContext(e)}async uploadFiles(e){return this.agent||await this.initializeAgent(),this.agent.uploadFiles(e)}async uploadFileFromPath(e,n){return this.agent||await this.initializeAgent(),this.agent.uploadFileFromPath(e,n)}async getOutputFiles(e=false){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.getOutputFiles(e)}async checkpoint(e){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.checkpoint(e)}_cachedGatewayOverrides=null;resolveGatewayOverrides(){if(this._cachedGatewayOverrides!==null)return this._cachedGatewayOverrides||void 0;try{let e=bt(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:s,gatewayApiKey:e.apiKey},this._cachedGatewayOverrides}catch{}this._cachedGatewayOverrides=void 0;}async listCheckpoints(e){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Jn(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Jn(this.config.storage,this.resolveGatewayOverrides()||{})}getSession(){return this.agent?this.agent.getSession():this.config.sandboxId??null}async setSession(e){if(this.config.managedSecrets)throw new Error("setSession() cannot be used with withManagedSecrets(); managed secret grants are sandbox-scoped.");this.agent?await this.agent.setSession(e):(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this.config.sandboxId=e;}status(){return this.agent?this.agent.status():{sandboxId:this.config.sandboxId??null,sandbox:this.fallbackSandboxState,agent:this.fallbackAgentState,activeProcessId:null,hasRun:this.fallbackHasRun,timestamp:new Date().toISOString()}}async pause(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.pause(e);return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).pause(),this.fallbackSandboxState="paused",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_pause"));}async resume(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.resume(e);return}this.config.sandboxId&&this.config.sandbox&&(await this.config.sandbox.connect(this.config.sandboxId),this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_resume"));}async kill(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.kill(e),this.config.sandboxId=void 0,this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false;return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).kill(),this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false,this.emitLifecycleFromStatus("sandbox_killed"),this.config.sandboxId=void 0);}async getHost(e){return this.agent||await this.initializeAgent(),this.agent.getHost(e)}getSessionTag(){return this.agent?.getSessionTag()||null}getSessionTimestamp(){return this.agent?.getSessionTimestamp()||null}async flushObservability(){await this.agent?.flushObservability();}async getSessionCost(){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getSessionCost()}async getRunCost(e){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getRunCost(e)}};var ve=class{permits;queue=[];constructor(e){if(e<1)throw new Error("Semaphore max must be >= 1");this.permits=e;}async use(e){await this.acquire();try{return await e()}finally{this.release();}}acquire(){return this.permits>0?(this.permits--,Promise.resolve()):new Promise(e=>this.queue.push(e))}release(){this.queue.length>0?this.queue.shift()():this.permits++;}};var re=Symbol.for("evolve.SwarmResult"),be=class t extends Array{get success(){return this.filter(e=>e.status==="success")}get filtered(){return this.filter(e=>e.status==="filtered")}get error(){return this.filter(e=>e.status==="error")}static from(e){let n=new t;return n.push(...e),n}};var er=class t{config;semaphore;constructor(e={}){let n$1=e.concurrency??o;if(n$1>p)throw new Error(`concurrency=${n$1} exceeds max ${p}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n$1,timeoutMs:e.timeoutMs??n,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new ve(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:i,verify:s}=e,d=e.retry??this.config.retry,p=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs;if(i&&s)throw new Error("map() cannot use both bestOf and verify options simultaneously");let o=await Promise.all(n.map((a,c)=>i?this.executeMapItemWithBestOf(a,r,c,p,e,l,d):s?this.executeMapItemWithVerify(a,r,c,p,e,l,d):d?B(u=>this.executeMapItem(a,r,c,p,e,l,u),d,c):this.executeMapItem(a,r,c,p,e,l)));return be.from(o)}async filter(e){let{items:n,prompt:r,condition:i,verify:s}=e,d=e.retry??this.config.retry,p=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=await Promise.all(n.map((c,u)=>s?this.executeFilterItemWithVerify(c,r,u,p,e,l,d):d?B(g=>this.executeFilterItem(c,r,u,p,e,l,g),d,u):this.executeFilterItem(c,r,u,p,e,l))),a=[];for(let c of o)if(c.status==="error")a.push(c);else if(c.data!==null)try{i(c.data)?a.push(c):a.push({...c,status:"filtered"});}catch(u){a.push({...c,status:"error",data:null,error:`Condition function threw: ${u.message}`});}return be.from(a)}async reduce(e){let{items:n,prompt:r,verify:i}=e,s=e.retry??this.config.retry,d=this.generateOperationId(),p=e.timeoutMs??this.config.timeoutMs,l=[],o=[];n.forEach((k,C)=>{l.push(this.getFiles(k)),o.push(this.getIndex(k,C));});let a={};l.forEach((k,C)=>{Object.entries(k).forEach(([v,x])=>{a[`item_${o[C]}/${v}`]=x;});});let c=kt(a),u=Z(ki,{fileTree:c}),g=e.systemPrompt?`${u}
224
+ `),I&&n$1?.onContent)for(let Je of I)n$1.onContent(Je);}},m=v=>{n$1?.onStderr?.(v);},y=await o.commands.spawn(a$1,{cwd:this.workingDir,timeoutMs:i,envs:p,onStdout:h,onStderr:m}),w=this.beginOperation("run",y,n$1,"run_start");if(this.hasRun=true,s)return this.watchBackgroundOperation(w,"run",y,n$1,o),{sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:0,stdout:`Background process started with ID ${y.processId}`,stderr:""};let b;try{b=await y.wait();}catch(v){throw this.interruptedOperations.delete(w),this.finalizeOperation(w,n$1,"run_failed","error"),v}if(this.interruptedOperations.delete(w)||b.exitCode===130?this.finalizeOperation(w,n$1,"run_interrupted","interrupted"):b.exitCode===0?this.finalizeOperation(w,n$1,"run_complete","idle"):this.finalizeOperation(w,n$1,"run_failed","error"),g.trim()){let v=f(g);if(this.captureDroidSession(g,v),this.sessionLogger?.writeEventParsed(g,v),n$1?.onStdout?.(g+`
225
+ `),v&&n$1?.onContent)for(let x of v)n$1.onContent(x);}await this.writeDroidSessionState(o),this.sessionLogger&&!s&&await this.flushSessionLoggerWithTimeout();let C;if(this.storage&&!s&&b.exitCode===0)try{C=await jn(o,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:d,parentId:this.lastCheckpointId}),this.lastCheckpointId=C.id;}catch(v){console.warn(`[Evolve] Auto-checkpoint failed: ${v.message}`);}return {sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:b.exitCode,stdout:b.stdout,stderr:b.stderr,checkpoint:C}}async executeCommand(e,n$1={},r){let{timeoutMs:i=n,background:s=false}=n$1;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background command to finish, or create a new Evolve instance.");let d=await this.getSandbox(r);this.credentialsSealed||await this.ensureProviderRuntimeToken(),this.lastRunTimestamp=Date.now(),this.requiresPreRunDashboardIngest()&&(this.ensureSessionLogger(d),this.sessionLogger?.writePrompt(e),await this.flushSessionLoggerWithTimeout());let u="",l="",o=m=>{u+=m,r?.onStdout?.(m);},a=m=>{l+=m,r?.onStderr?.(m);},c=this.credentialsSealed?{}:this.buildProviderRuntimeProcessEnvs(),p=await d.commands.spawn(e,{cwd:this.workingDir,timeoutMs:i,envs:Object.keys(c).length>0?c:void 0,onStdout:o,onStderr:a}),g=this.beginOperation("command",p,r,"command_start");if(s)return this.watchBackgroundOperation(g,"command",p,r),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${p.processId}`,stderr:""};let f;try{f=await p.wait();}catch(m){throw this.interruptedOperations.delete(g),this.finalizeOperation(g,r,"command_failed","error"),m}return this.interruptedOperations.delete(g)||f.exitCode===130?this.finalizeOperation(g,r,"command_interrupted","interrupted"):f.exitCode===0?this.finalizeOperation(g,r,"command_complete","idle"):this.finalizeOperation(g,r,"command_failed","error"),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:f.exitCode,stdout:u||f.stdout||"",stderr:l||f.stderr||""}}async sealCredentials(){if(this.credentialsSealed)return;if(!this.sandbox)throw new Error("No active sandbox. Call run() or executeCommand() first.");if(this.activeCommand)throw new Error("Cannot seal credentials while a process is running.");if(this.agentConfig.isDirectMode&&!this.agentConfig.externalGateway)throw new Error("Credential sealing requires gateway mode; direct provider credentials cannot be revoked by Evolve");if([this.options.secrets&&Object.keys(this.options.secrets).length>0,this.options.sandboxCreateOptions?.envs&&Object.keys(this.options.sandboxCreateOptions.envs).length>0,this.options.managedSecrets,this.options.integrations,this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0,this.options.managedBrowser,this.options.browserCredentials].some(Boolean))throw new Error("Credential sealing requires a credential-minimal sandbox: omit secrets, managed secrets, integrations, MCP servers, and browser credentials");if(this.agentConfig.externalGateway){await this.agentConfig.externalGateway.revoke(),this.credentialsSealed=true;return}if(!this.providerRuntimeToken||!this.options.providerRouting)throw new Error("Cannot seal credentials: no active provider runtime token to revoke. Without a gateway-issued runtime token the sandbox may hold credentials Evolve cannot revoke, so sealing would be a false guarantee.");await this.closeProviderRuntimeToken(true),this.credentialsSealed=true;}isSealed(){return this.credentialsSealed}async collectArtifacts(e){if(!this.credentialsSealed)throw new Error("Call sealCredentials() before collecting artifacts.");if(!this.sandbox)throw new Error("No active sandbox.");if(this.activeCommand)throw new Error("Cannot collect artifacts while a process is running.");return ws(this.sandbox,this.workingDir,e)}async uploadContext(e){let n=await this.getSandbox();await this.uploadContextFiles(n,e);}async uploadFiles(e){let n=await this.getSandbox();await this.uploadWorkspaceFiles(n,e);}async uploadFileFromPath(e,n){let r=await this.getSandbox(),i=e.startsWith("/")?e:`${this.workingDir}/${e}`,s=i.substring(0,i.lastIndexOf("/"));if(s&&await r.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),r.files.writeFromPath){await r.files.writeFromPath(i,n);return}let{readFile:d}=await import('fs/promises');await r.files.write(i,await d(n));}async getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,i=e?"":"-maxdepth 1",d=(await n.commands.run(`find ${r} ${i} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
226
+ `).filter(Boolean),u=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,l=[],o=`${r}/`;for(let f of d){let[h,m]=f.split("|");if(!h||!m)continue;let y=parseInt(m,10);u>0&&y<u||l.push(h);}let a={},c=await Promise.all(l.map(async f=>{try{let h=await n.files.read(f);return {relativePath:f.startsWith(o)?f.slice(o.length):f.split("/").pop()||f,content:h}}catch{return null}}));for(let f of c)f&&(a[f.relativePath]=f.content);if(!this.zodSchema&&!this.jsonSchema)return {files:a,data:null};let p=a["result.json"];if(!p)return {files:a,data:null,error:"Schema provided but agent did not create output/result.json"};let g=typeof p=="string"?p:new TextDecoder().decode(p);try{let f=JSON.parse(g);if(this.zodSchema){let h=this.zodSchema.safeParse(f);return h.success?{files:a,data:h.data}:{files:a,data:null,error:`Schema validation failed: ${h.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(f))return {files:a,data:f};{let m=this.compiledValidator.errors?.map(y=>`${y.instancePath} ${y.message}`).join(", ")||"Unknown validation error";return {files:a,data:null,error:`Schema validation failed: ${m}`,rawData:g}}}return {files:a,data:null}}catch(f){return {files:a,data:null,error:`Failed to parse result.json: ${f.message}`,rawData:g}}}async checkpoint(e){if(!this.storage)throw new Error("Storage not configured. Call .withStorage().");if(!this.sandbox)throw new Error("No active sandbox. Call run() first.");let n=await jn(this.sandbox,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:e?.comment,parentId:this.lastCheckpointId});return this.lastCheckpointId=n.id,n}getSession(){return this.sandbox?.sandboxId||this.options.sandboxId||null}async setSession(e){if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot switch sandboxes");if(this.options.managedSecrets)throw new Error("setSession() cannot be used with managed secrets; managed secret grants are sandbox-scoped.");if(this.options.sandboxCreateOptions?.user)throw new Error("setSession() cannot be used with a configured sandbox user; the user cannot be enforced on an existing sandbox.");if(this.activeCommand&&!await this.interrupt())throw new Error("Cannot switch session while an active process is running and could not be interrupted.");await this.rotateSession(),await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession(),this.options.sandboxId=e,this.sandbox=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="idle",this.hasRun=true,this.lastCheckpointId=void 0;}async pause(e){this.sandbox&&(this.activeCommand&&await this.interrupt(e),await this.sandbox.pause(),this.sandboxState="paused",this.agentState="idle",this.emitLifecycle(e,"sandbox_pause"));}async resume(e){this.sandbox&&this.options.sandboxProvider&&(this.sandbox=await this.options.sandboxProvider.connect(this.sandbox.sandboxId),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_resume"));}async interrupt(e){if(!this.activeCommand&&!this.activeProcessId)return false;let n=this.activeOperationId,r=this.activeOperationKind,i=false;try{this.activeCommand?i=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(i=await this.sandbox.commands.kill(this.activeProcessId));}catch{i=false;}if(!i)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let s=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,s),i}status(){let e=this.browserRuntimeInfo();return {sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,activeProcessId:this.activeProcessId,hasRun:this.hasRun,timestamp:new Date().toISOString(),...e?{browser:e}:{}}}async kill(e){await this.rotateSession();let n;try{this.activeCommand&&await this.interrupt(e),this.sandbox&&(await this.sandbox.kill(),this.sandbox=void 0);}catch(r){n=r;}finally{await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession();}if(n)throw n;this.options.sandboxId=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="stopped",this.agentState="idle",this.hasRun=false,this.lastCheckpointId=void 0,this.emitLifecycle(e,"sandbox_killed");}async getHost(e){return (await this.getSandbox()).getHost(e)}getAgentType(){return this.agentConfig.type}getSessionTag(){return !this.sandbox&&!this.sessionLogger?null:this.sessionTag}getSessionTimestamp(){return this.sessionLogger?.getTimestamp()||null}async flushObservability(){await this.sessionLogger?.flush();}async rotateSession(){let e=!!this.sessionLogger;this.sessionLogger&&(await this.sessionLogger.close(),this.sessionLogger=void 0),e&&(this.previousSessionTag=this.sessionTag),this.sessionTag=vs(this.options.sessionTagPrefix||"evolve");}async fetchSpend(e){if(this.agentConfig.isDirectMode)throw new Error("Cost tracking requires gateway mode (set EVOLVE_API_KEY).");let n=this.agentConfig.apiKey;if(!n)throw new Error("Cost tracking requires an API key.");let r=process.env.EVOLVE_DASHBOARD_URL||s,i=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Spend query failed (${i.status}): ${s}`)}return i}resolveSpendTag(){if(this.sandbox||this.sessionLogger)return this.sessionTag;if(this.previousSessionTag)return this.previousSessionTag;throw new Error("No session to query. Call run() first.")}normalizeRunCost(e,n){return {...e,asOf:e.asOf??n.asOf,isComplete:e.isComplete??n.isComplete,truncated:e.truncated??n.truncated}}normalizeSessionCost(e){let n={asOf:e.asOf,isComplete:e.isComplete,truncated:e.truncated};return {...e,runs:e.runs.map(r=>this.normalizeRunCost(r,n))}}async getSessionCost(){let e=this.resolveSpendTag(),n=new URLSearchParams({tag:e}),i=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(i)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let d=new URLSearchParams({tag:n,runId:e.runId}),l=await(await this.fetchSpend(d)).json();return this.normalizeRunCost(l,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),i=e.index>0?e.index-1:r.runs.length+e.index,s=r.runs[i];if(!s)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return s}};function Wl(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Hl(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("Browser profiles require EVOLVE_API_KEY or an explicit apiKey");return e}async function ql(t){return await t.text().catch(()=>"")}async function ks(t,e,n={}){let r=await fetch(`${Wl(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Hl(t?.apiKey)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Error(`Browser profiles request failed (${r.status}): ${await ql(r)}`);return r.status===204?{}:await r.json()}var Pt=class{constructor(e={}){this.config=e;}toMetadata(e){return {id:e.id,profile:e.profile,createdAt:e.createdAt||e.created_at||"",updatedAt:e.updatedAt||e.updated_at||"",lastUsedAt:e.lastUsedAt??e.last_used_at??null}}async list(){return {profiles:(await ks(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await ks(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function Xn(t={}){return new Pt(t)}var Ge=class extends EventEmitter{config={};agent;fallbackSandboxState="stopped";fallbackAgentState="idle";fallbackHasRun=false;constructor(){super();}on(e,n){return super.on(e,n)}off(e,n){return super.off(e,n)}emit(e,...n){return super.emit(e,...n)}withAgent(e){return e&&(Ie(e),vt(e),this.config.agent=e,this._cachedGatewayOverrides=null),this}withSandbox(e){return this.config.sandbox=e,this}withSandboxCreateOptions(e){return this.config.sandboxCreateOptions={...e,envs:e.envs?{...e.envs}:void 0,metadata:e.metadata?{...e.metadata}:void 0},this}withWorkingDirectory(e){return this.config.workingDirectory=e,this}withWorkspaceMode(e){return this.config.workspaceMode=e,this}withSecrets(e){return this.config.secrets={...this.config.secrets,...e},this}withManagedSecrets(e){return this.config.managedSecrets=e,this}withSession(e){return this.config.sandboxId=e,this.agent||(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this}withSystemPrompt(e){return this.config.systemPrompt=e,this}withContext(e){return this.config.context={...this.config.context,...e},this}withFiles(e){return this.config.files={...this.config.files,...e},this}withMcpServers(e){return this.config.mcpServers={...this.config.mcpServers,...e},this}withBrowser(e={provider:"agent-browser",remote:true}){return e===false?delete this.config.browser:this.config.browser=e,this}withBrowserCredentials(e={}){return this.config.browserCredentials=e,this}withPlugins(e){let n=Array.isArray(e)?e:[e];return this.config.plugins=[...this.config.plugins??[],...n],this}withSkills(e){return this.config.skills=e,this}withSchema(e,n){return this.config.schema=e,n&&(N(e)?console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead"):this.config.schemaOptions=n),this}withSessionTagPrefix(e){return this.config.sessionTagPrefix=e,this}withObservability(e){return this.config.observability={...this.config.observability,...e},this}withIntegrations(e){return this.config.integrations=e,this}withStorage(e){return this.config.storage=e||{},this}static integrations=Pi;static browserCredentials=Hn;static browserProfiles=Xn;static managedSecrets=I;async initializeAgent(){let e=bt(this.config.agent),n=D(e.type);if(this.config.integrations&&e.isDirectMode)throw new Error("withIntegrations() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&e.isDirectMode)throw new Error("withManagedSecrets() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&this.config.sandboxId)throw new Error("withManagedSecrets() cannot be used with withSession(); managed secret grants are sandbox-scoped.");let r=M$1(this.config.managedSecrets,n);if(r&&this.config.sandbox&&!fe(this.config.sandbox))throw new Error("withManagedSecrets() requires an Evolve-managed sandbox; remove withSandbox() or pass a managed sandbox provider.");let i=this.config.sandbox??(r?await Ae(e.apiKey):await kt()),s$1={},d,u,l=this.config.skills,o;if(this.config.browser){let p=ls(this.config.browser);if(o=p,p.provider==="browser-use"){if(e.isDirectMode)throw new Error('withBrowser("browser-use") requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.');s$1=g(e.apiKey);}if((p.provider==="actionbook"||p.provider==="agent-browser")&&p.managed){if(e.isDirectMode)throw new Error(`Managed browser provider "${p.provider}" requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.`);d=p.provider==="actionbook"?In:Si,u={provider:p.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,...p.profile?{profile:p.profile}:{}};}if(p.profile&&!p.managed)throw new Error('withBrowser({ profile }) requires managed remote browser mode. Use .withBrowser({ profile }) or .withBrowser({ provider: "agent-browser", remote: true, profile }).')}if(this.config.browserCredentials!==void 0){if(this.config.sandboxId)throw new Error("withBrowserCredentials() cannot be used with withSession(); browser login tokens are run-scoped.");if(e.isDirectMode)throw new Error("withBrowserCredentials() requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.");if(!o||o.provider!=="agent-browser"||!o.managed)throw new Error('withBrowserCredentials() requires .withBrowser() or .withBrowser({ provider: "agent-browser", remote: true }).');if(this.config.mcpServers?.["browser-login"])throw new Error('withBrowserCredentials() reserves the "browser-login" MCP server name.')}let a=this.config.storage!==void 0?Ct(this.config.storage,!e.isDirectMode,s,e.isDirectMode?void 0:e.apiKey):void 0,c={sandboxProvider:i,sandboxCreateOptions:this.config.sandboxCreateOptions,secrets:this.config.secrets,managedSecrets:r?{secrets:r,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,sandboxId:this.config.sandboxId,workingDirectory:this.config.workingDirectory,workspaceMode:this.config.workspaceMode,systemPrompt:this.config.systemPrompt,context:this.config.context,files:this.config.files,mcpServers:{...s$1,...this.config.mcpServers},browserPrompt:d,managedBrowser:u,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,config:this.config.browserCredentials}:void 0,plugins:this.config.plugins,skills:l,schema:this.config.schema,schemaOptions:this.config.schemaOptions,sessionTagPrefix:this.config.sessionTagPrefix,observability:this.config.observability,integrations:this.config.integrations?{...this.config.integrations,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,providerRouting:e.isDirectMode?void 0:{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s},storage:a};this.agent=new Ve(e,c);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,i=this.listenerCount("lifecycle")>0;return {onStdout:e?s=>this.emit("stdout",s):void 0,onStderr:n?s=>this.emit("stderr",s):void 0,onContent:r?s=>this.emit("content",s):void 0,onLifecycle:i?s=>this.emit("lifecycle",s):void 0}}emitLifecycleFromStatus(e){if(this.listenerCount("lifecycle")===0)return;let n=this.status();this.emit("lifecycle",{sandboxId:n.sandboxId,sandbox:n.sandbox,agent:n.agent,timestamp:new Date().toISOString(),reason:e,...n.browser?{browser:n.browser}:{}});}async run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d}){if(i&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let u=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d},u)}async executeCommand(e,n={}){this.agent||await this.initializeAgent();let r=this.createStreamCallbacks();return this.agent.executeCommand(e,n,r)}async prepareSandbox(){this.agent||await this.initializeAgent();let e=this.createStreamCallbacks();return (await this.agent.getSandbox(e)).sandboxId}async updateNetwork(e){if(!this.agent)throw new Error("No sandbox yet. Call prepareSandbox(), run() or executeCommand() before updateNetwork().");let n=await this.agent.getSandbox(this.createStreamCallbacks());if(typeof n.updateNetwork!="function")throw new Error(`The ${this.config.sandbox?.providerType??"configured"} sandbox provider cannot change network policy after start. Create the sandbox with the policy it needs for its whole lifetime, or use a provider that supports runtime changes.`);await n.updateNetwork(e);}async sealCredentials(){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");await this.agent.sealCredentials();}isSealed(){return this.agent?.isSealed()??false}resolvedSkills(){return this.agent?.resolvedSkills()??[]}async collectArtifacts(e){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");return this.agent.collectArtifacts(e)}async interrupt(){if(!this.agent)return false;let e=this.createStreamCallbacks();return this.agent.interrupt(e)}async uploadContext(e){return this.agent||await this.initializeAgent(),this.agent.uploadContext(e)}async uploadFiles(e){return this.agent||await this.initializeAgent(),this.agent.uploadFiles(e)}async uploadFileFromPath(e,n){return this.agent||await this.initializeAgent(),this.agent.uploadFileFromPath(e,n)}async getOutputFiles(e=false){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.getOutputFiles(e)}async checkpoint(e){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.checkpoint(e)}_cachedGatewayOverrides=null;resolveGatewayOverrides(){if(this._cachedGatewayOverrides!==null)return this._cachedGatewayOverrides||void 0;try{let e=bt(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:s,gatewayApiKey:e.apiKey},this._cachedGatewayOverrides}catch{}this._cachedGatewayOverrides=void 0;}async listCheckpoints(e){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Jn(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Jn(this.config.storage,this.resolveGatewayOverrides()||{})}getSession(){return this.agent?this.agent.getSession():this.config.sandboxId??null}async setSession(e){if(this.config.managedSecrets)throw new Error("setSession() cannot be used with withManagedSecrets(); managed secret grants are sandbox-scoped.");this.agent?await this.agent.setSession(e):(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this.config.sandboxId=e;}status(){return this.agent?this.agent.status():{sandboxId:this.config.sandboxId??null,sandbox:this.fallbackSandboxState,agent:this.fallbackAgentState,activeProcessId:null,hasRun:this.fallbackHasRun,timestamp:new Date().toISOString()}}async pause(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.pause(e);return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).pause(),this.fallbackSandboxState="paused",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_pause"));}async resume(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.resume(e);return}this.config.sandboxId&&this.config.sandbox&&(await this.config.sandbox.connect(this.config.sandboxId),this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_resume"));}async kill(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.kill(e),this.config.sandboxId=void 0,this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false;return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).kill(),this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false,this.emitLifecycleFromStatus("sandbox_killed"),this.config.sandboxId=void 0);}async getHost(e){return this.agent||await this.initializeAgent(),this.agent.getHost(e)}getSessionTag(){return this.agent?.getSessionTag()||null}getSessionTimestamp(){return this.agent?.getSessionTimestamp()||null}async flushObservability(){await this.agent?.flushObservability();}async getSessionCost(){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getSessionCost()}async getRunCost(e){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getRunCost(e)}};var ve=class{permits;queue=[];constructor(e){if(e<1)throw new Error("Semaphore max must be >= 1");this.permits=e;}async use(e){await this.acquire();try{return await e()}finally{this.release();}}acquire(){return this.permits>0?(this.permits--,Promise.resolve()):new Promise(e=>this.queue.push(e))}release(){this.queue.length>0?this.queue.shift()():this.permits++;}};var re=Symbol.for("evolve.SwarmResult"),be=class t extends Array{get success(){return this.filter(e=>e.status==="success")}get filtered(){return this.filter(e=>e.status==="filtered")}get error(){return this.filter(e=>e.status==="error")}static from(e){let n=new t;return n.push(...e),n}};var er=class t{config;semaphore;constructor(e={}){let n$1=e.concurrency??o;if(n$1>p)throw new Error(`concurrency=${n$1} exceeds max ${p}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n$1,timeoutMs:e.timeoutMs??n,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new ve(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:i,verify:s}=e,d=e.retry??this.config.retry,u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs;if(i&&s)throw new Error("map() cannot use both bestOf and verify options simultaneously");let o=await Promise.all(n.map((a,c)=>i?this.executeMapItemWithBestOf(a,r,c,u,e,l,d):s?this.executeMapItemWithVerify(a,r,c,u,e,l,d):d?B(p=>this.executeMapItem(a,r,c,u,e,l,p),d,c):this.executeMapItem(a,r,c,u,e,l)));return be.from(o)}async filter(e){let{items:n,prompt:r,condition:i,verify:s}=e,d=e.retry??this.config.retry,u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=await Promise.all(n.map((c,p)=>s?this.executeFilterItemWithVerify(c,r,p,u,e,l,d):d?B(g=>this.executeFilterItem(c,r,p,u,e,l,g),d,p):this.executeFilterItem(c,r,p,u,e,l))),a=[];for(let c of o)if(c.status==="error")a.push(c);else if(c.data!==null)try{i(c.data)?a.push(c):a.push({...c,status:"filtered"});}catch(p){a.push({...c,status:"error",data:null,error:`Condition function threw: ${p.message}`});}return be.from(a)}async reduce(e){let{items:n,prompt:r,verify:i}=e,s=e.retry??this.config.retry,d=this.generateOperationId(),u=e.timeoutMs??this.config.timeoutMs,l=[],o=[];n.forEach((k,C)=>{l.push(this.getFiles(k)),o.push(this.getIndex(k,C));});let a={};l.forEach((k,C)=>{Object.entries(k).forEach(([v,x])=>{a[`item_${o[C]}/${v}`]=x;});});let c=St(a),p=Z(Ei,{fileTree:c}),g=e.systemPrompt?`${p}
227
227
 
228
- ${e.systemPrompt}`:u,f=(k,C,v)=>({operationId:d,operation:"reduce",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:o,errorRetry:C,verifyRetry:v,...this.pipelineContextToMeta(e._pipelineContext)}),h=e.mcpServers??this.config.mcpServers,m=e.skills??this.config.skills,y=e.integrations??this.config.integrations,w=async(k,C,v,x)=>{let E=await this.semaphore.use(()=>this.execute(a,k,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:h,skills:m,integrations:y,tagPrefix:C,timeoutMs:p,observability:{swarmName:this.config.tag,operationName:e.name,operationId:d,operation:"reduce",role:"worker",errorRetry:v,verifyRetry:x&&x>1?x-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),I=f(E,v,x&&x>1?x-1:void 0);return E.error?{status:"error",data:null,files:E.files,meta:I,error:E.error,rawData:E.rawData}:{status:"success",data:E.data,files:E.files,meta:I}},b=`${this.config.tag}-reduce`;return i?this.runWithVerification((k,C,v)=>w(k,C,void 0,v),{originalPrompt:r,inputFiles:a,verifyConfig:i,timeoutMs:p,systemPrompt:g,schema:e.schema,mcpServers:h,skills:m,integrations:y,operationId:d,baseTag:b,retry:s,operation:"reduce",_pipelineContext:e._pipelineContext}):s?B(k=>{let C=k>1?k-1:void 0,v=C?`${b}-er${C}`:b;return w(r,v,C)},s):w(r,b)}async bestOf(e){let{item:n,prompt:r,config:i}=e,s=e.retry??this.config.retry,d=i.n??i.taskAgents?.length;if(d===void 0)throw new Error("bestOf requires n or taskAgents");if(d<2)throw new Error("bestOf requires n >= 2");let p=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=this.getFiles(n),a=i.mcpServers??this.config.mcpServers,c=i.judgeMcpServers??i.mcpServers??this.config.mcpServers,u=i.skills??this.config.skills,g=i.judgeSkills??i.skills??this.config.skills,f=i.integrations??this.config.integrations,h=i.judgeIntegrations??i.integrations??this.config.integrations,m=await Promise.all(Array.from({length:d},async(C,v)=>{let x=s?await B(E=>this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:p,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:u,integrations:f,timeoutMs:l,attempt:E}),s,v):await this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:p,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:u,integrations:f,timeoutMs:l});return i.onCandidateComplete?.(0,v,x.status==="success"?"success":"error"),x})),y=s?await B(C=>this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:p,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h,attempt:C}),{...s,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:p,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h}),w=m.findIndex(C=>C.status==="success"),b=y.decision?.winner??(w>=0?w:0);i.onJudgeComplete?.(0,b,y.decision?.reasoning??"Judge failed to provide reasoning");let k={operationId:p,operation:"bestof-judge",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:d};return {winner:m[b]??m[0],winnerIndex:b,judgeReasoning:y.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:k,candidates:m}}async execute(e,n,r){let i=null,s="",d=r.tagPrefix,p={},l=null,o,a,c={...this.config.agent,...r.agent};try{i=new Ge().withAgent(c).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&i.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&i.withSystemPrompt(r.systemPrompt),r.mcpServers&&i.withMcpServers(r.mcpServers),r.skills?.length&&i.withSkills(r.skills),r.integrations&&i.withIntegrations(r.integrations),r.observability&&i.withObservability(r.observability),Object.keys(e).length>0&&i.withContext(e);let u=await i.run({prompt:n,timeoutMs:r.timeoutMs});s=u.sandboxId,d=i.getSessionTag()??r.tagPrefix;let g=null;try{g=await i.getOutputFiles(!0),p=g.files;}catch{}u.exitCode!==0?o=`Agent exited with code ${u.exitCode}`:r.schema?g?(l=g.data,g.error&&(o=g.error),g.rawData&&(a=g.rawData)):o="Failed to read output files from sandbox":l=p;}catch(u){if(o=u.message,i){d=i.getSessionTag()??r.tagPrefix;try{p=(await i.getOutputFiles(!0)).files;}catch{}}}finally{i&&await i.kill().catch(()=>{});}return {files:p,data:l,tag:d,sandboxId:s,error:o,rawData:a}}async executeMapItem(e,n,r,i,s,d,p=1){let l=this.getFiles(e),o=p>1?`${this.config.tag}-map-${r}-er${p-1}`:`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.mcpServers??this.config.mcpServers,u=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=await this.semaphore.use(()=>this.execute(l,a,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:u,integrations:g,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",errorRetry:p>1?p-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),h={operationId:i,operation:"map",tag:f.tag,sandboxId:f.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:p>1?p-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(f,h)}async executeMapItemWithVerify(e,n,r,i,s,d,p){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,u=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=this.evaluatePrompt(n,l,r);if(f instanceof Error)return this.buildErrorResult(`Prompt function threw: ${f.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let h=async(m,y,w)=>{let b=await this.semaphore.use(()=>this.execute(l,m,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:u,integrations:g,tagPrefix:y,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),k={operationId:i,operation:"map",tag:b.tag,sandboxId:b.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(b,k)};return this.runWithVerification(h,{originalPrompt:f,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:u,integrations:g,operationId:i,baseTag:o,retry:p,itemIndex:r,operation:"map",_pipelineContext:s._pipelineContext})}async executeMapItemWithBestOf(e,n,r,i,s,d,p){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.bestOf,u=c.n??c.taskAgents?.length;if(u===void 0||u<2)return this.buildErrorResult("bestOf requires n >= 2 or taskAgents with at least 2 elements",{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let g=s.mcpServers??this.config.mcpServers,f=c.mcpServers??g,h=c.judgeMcpServers??c.mcpServers??g,m=s.skills??this.config.skills,y=c.skills??m,w=c.judgeSkills??c.skills??m,b=s.integrations??this.config.integrations,k=c.integrations??b,C=c.judgeIntegrations??c.integrations??b,v=await Promise.all(Array.from({length:u},async(ze,We)=>{let tr=p?await B(vs=>this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:We,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,attempt:vs,_pipelineContext:s._pipelineContext}),p,We):await this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:We,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,_pipelineContext:s._pipelineContext});return c.onCandidateComplete?.(r,We,tr.status==="success"?"success":"error"),tr})),x=p?await B(ze=>this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,attempt:ze,_pipelineContext:s._pipelineContext}),{...p,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,_pipelineContext:s._pipelineContext}),E=v.findIndex(ze=>ze.status==="success"),I=x.decision?.winner??(E>=0?E:0),Je=v[I]??v[0];c.onJudgeComplete?.(r,I,x.decision?.reasoning??"Judge failed to provide reasoning");let ws={operationId:i,operation:"bestof-judge",tag:x.tag,sandboxId:x.sandboxId,swarmName:this.config.tag,operationName:s.name,candidateCount:u,...this.pipelineContextToMeta(s._pipelineContext)};return {...Je,meta:{...Je.meta,operation:"map",swarmName:this.config.tag,operationName:s.name,itemIndex:r,...this.pipelineContextToMeta(s._pipelineContext)},bestOf:{winnerIndex:I,judgeReasoning:x.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:ws,candidates:v}}}async executeFilterItem(e,n,r,i,s,d,p=1){let l=this.getFiles(e),o=p>1?`${this.config.tag}-filter-${r}-er${p-1}`:`${this.config.tag}-filter-${r}`,a=s.mcpServers??this.config.mcpServers,c=s.skills??this.config.skills,u=s.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(l,n,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:a,skills:c,integrations:u,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",errorRetry:p>1?p-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),f={operationId:i,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:p>1?p-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(g,f,l)}async executeFilterItemWithVerify(e,n,r,i,s,d,p){let l=this.getFiles(e),o=`${this.config.tag}-filter-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,u=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=async(h,m,y)=>{let w=await this.semaphore.use(()=>this.execute(l,h,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:u,integrations:g,tagPrefix:m,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),b={operationId:i,operation:"filter",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(w,b,l)};return this.runWithVerification(f,{originalPrompt:n,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:u,integrations:g,operationId:i,baseTag:o,retry:p,itemIndex:r,operation:"filter",_pipelineContext:s._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:i,operationId:s,config:d,timeoutMs:p,parentIndex:l,attempt:o=1,_pipelineContext:a}=e,c=l!==void 0?`${this.config.tag}-map-${l}-bestof-cand-${i}`:`${this.config.tag}-bestof-cand-${i}`,u=o>1?`${c}-er${o-1}`:c,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:d.taskAgents?.[i],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:u,timeoutMs:p,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:l,role:"candidate",candidateIndex:i,errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(a)}})),f={operationId:s,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:i,errorRetry:o>1?o-1:void 0,candidateIndex:i,...this.pipelineContextToMeta(a)};return this.buildResult(g,f)}buildJudgeContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return e.candidates.forEach((r,i)=>{r.status==="error"&&(n[`candidate_${i}/_failed.txt`]=`STATUS: FAILED
228
+ ${e.systemPrompt}`:p,f=(k,C,v)=>({operationId:d,operation:"reduce",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:o,errorRetry:C,verifyRetry:v,...this.pipelineContextToMeta(e._pipelineContext)}),h=e.mcpServers??this.config.mcpServers,m=e.skills??this.config.skills,y=e.integrations??this.config.integrations,w=async(k,C,v,x)=>{let E=await this.semaphore.use(()=>this.execute(a,k,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:h,skills:m,integrations:y,tagPrefix:C,timeoutMs:u,observability:{swarmName:this.config.tag,operationName:e.name,operationId:d,operation:"reduce",role:"worker",errorRetry:v,verifyRetry:x&&x>1?x-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),I=f(E,v,x&&x>1?x-1:void 0);return E.error?{status:"error",data:null,files:E.files,meta:I,error:E.error,rawData:E.rawData}:{status:"success",data:E.data,files:E.files,meta:I}},b=`${this.config.tag}-reduce`;return i?this.runWithVerification((k,C,v)=>w(k,C,void 0,v),{originalPrompt:r,inputFiles:a,verifyConfig:i,timeoutMs:u,systemPrompt:g,schema:e.schema,mcpServers:h,skills:m,integrations:y,operationId:d,baseTag:b,retry:s,operation:"reduce",_pipelineContext:e._pipelineContext}):s?B(k=>{let C=k>1?k-1:void 0,v=C?`${b}-er${C}`:b;return w(r,v,C)},s):w(r,b)}async bestOf(e){let{item:n,prompt:r,config:i}=e,s=e.retry??this.config.retry,d=i.n??i.taskAgents?.length;if(d===void 0)throw new Error("bestOf requires n or taskAgents");if(d<2)throw new Error("bestOf requires n >= 2");let u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=this.getFiles(n),a=i.mcpServers??this.config.mcpServers,c=i.judgeMcpServers??i.mcpServers??this.config.mcpServers,p=i.skills??this.config.skills,g=i.judgeSkills??i.skills??this.config.skills,f=i.integrations??this.config.integrations,h=i.judgeIntegrations??i.integrations??this.config.integrations,m=await Promise.all(Array.from({length:d},async(C,v)=>{let x=s?await B(E=>this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:u,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:p,integrations:f,timeoutMs:l,attempt:E}),s,v):await this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:u,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:p,integrations:f,timeoutMs:l});return i.onCandidateComplete?.(0,v,x.status==="success"?"success":"error"),x})),y=s?await B(C=>this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:u,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h,attempt:C}),{...s,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:u,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h}),w=m.findIndex(C=>C.status==="success"),b=y.decision?.winner??(w>=0?w:0);i.onJudgeComplete?.(0,b,y.decision?.reasoning??"Judge failed to provide reasoning");let k={operationId:u,operation:"bestof-judge",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:d};return {winner:m[b]??m[0],winnerIndex:b,judgeReasoning:y.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:k,candidates:m}}async execute(e,n,r){let i=null,s="",d=r.tagPrefix,u={},l=null,o,a,c={...this.config.agent,...r.agent};try{i=new Ge().withAgent(c).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&i.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&i.withSystemPrompt(r.systemPrompt),r.mcpServers&&i.withMcpServers(r.mcpServers),r.skills?.length&&i.withSkills(r.skills),r.integrations&&i.withIntegrations(r.integrations),r.observability&&i.withObservability(r.observability),Object.keys(e).length>0&&i.withContext(e);let p=await i.run({prompt:n,timeoutMs:r.timeoutMs});s=p.sandboxId,d=i.getSessionTag()??r.tagPrefix;let g=null;try{g=await i.getOutputFiles(!0),u=g.files;}catch{}p.exitCode!==0?o=`Agent exited with code ${p.exitCode}`:r.schema?g?(l=g.data,g.error&&(o=g.error),g.rawData&&(a=g.rawData)):o="Failed to read output files from sandbox":l=u;}catch(p){if(o=p.message,i){d=i.getSessionTag()??r.tagPrefix;try{u=(await i.getOutputFiles(!0)).files;}catch{}}}finally{i&&await i.kill().catch(()=>{});}return {files:u,data:l,tag:d,sandboxId:s,error:o,rawData:a}}async executeMapItem(e,n,r,i,s,d,u=1){let l=this.getFiles(e),o=u>1?`${this.config.tag}-map-${r}-er${u-1}`:`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=await this.semaphore.use(()=>this.execute(l,a,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),h={operationId:i,operation:"map",tag:f.tag,sandboxId:f.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:u>1?u-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(f,h)}async executeMapItemWithVerify(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=this.evaluatePrompt(n,l,r);if(f instanceof Error)return this.buildErrorResult(`Prompt function threw: ${f.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let h=async(m,y,w)=>{let b=await this.semaphore.use(()=>this.execute(l,m,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:y,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),k={operationId:i,operation:"map",tag:b.tag,sandboxId:b.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(b,k)};return this.runWithVerification(h,{originalPrompt:f,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:p,integrations:g,operationId:i,baseTag:o,retry:u,itemIndex:r,operation:"map",_pipelineContext:s._pipelineContext})}async executeMapItemWithBestOf(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.bestOf,p=c.n??c.taskAgents?.length;if(p===void 0||p<2)return this.buildErrorResult("bestOf requires n >= 2 or taskAgents with at least 2 elements",{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let g=s.mcpServers??this.config.mcpServers,f=c.mcpServers??g,h=c.judgeMcpServers??c.mcpServers??g,m=s.skills??this.config.skills,y=c.skills??m,w=c.judgeSkills??c.skills??m,b=s.integrations??this.config.integrations,k=c.integrations??b,C=c.judgeIntegrations??c.integrations??b,v=await Promise.all(Array.from({length:p},async(ze,We)=>{let sr=u?await B(xs=>this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:We,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,attempt:xs,_pipelineContext:s._pipelineContext}),u,We):await this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:We,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,_pipelineContext:s._pipelineContext});return c.onCandidateComplete?.(r,We,sr.status==="success"?"success":"error"),sr})),x=u?await B(ze=>this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,attempt:ze,_pipelineContext:s._pipelineContext}),{...u,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,_pipelineContext:s._pipelineContext}),E=v.findIndex(ze=>ze.status==="success"),I=x.decision?.winner??(E>=0?E:0),Je=v[I]??v[0];c.onJudgeComplete?.(r,I,x.decision?.reasoning??"Judge failed to provide reasoning");let Ss={operationId:i,operation:"bestof-judge",tag:x.tag,sandboxId:x.sandboxId,swarmName:this.config.tag,operationName:s.name,candidateCount:p,...this.pipelineContextToMeta(s._pipelineContext)};return {...Je,meta:{...Je.meta,operation:"map",swarmName:this.config.tag,operationName:s.name,itemIndex:r,...this.pipelineContextToMeta(s._pipelineContext)},bestOf:{winnerIndex:I,judgeReasoning:x.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:Ss,candidates:v}}}async executeFilterItem(e,n,r,i,s,d,u=1){let l=this.getFiles(e),o=u>1?`${this.config.tag}-filter-${r}-er${u-1}`:`${this.config.tag}-filter-${r}`,a=s.mcpServers??this.config.mcpServers,c=s.skills??this.config.skills,p=s.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(l,n,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:a,skills:c,integrations:p,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),f={operationId:i,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:u>1?u-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(g,f,l)}async executeFilterItemWithVerify(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-filter-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=async(h,m,y)=>{let w=await this.semaphore.use(()=>this.execute(l,h,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:m,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),b={operationId:i,operation:"filter",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(w,b,l)};return this.runWithVerification(f,{originalPrompt:n,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:p,integrations:g,operationId:i,baseTag:o,retry:u,itemIndex:r,operation:"filter",_pipelineContext:s._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:i,operationId:s,config:d,timeoutMs:u,parentIndex:l,attempt:o=1,_pipelineContext:a}=e,c=l!==void 0?`${this.config.tag}-map-${l}-bestof-cand-${i}`:`${this.config.tag}-bestof-cand-${i}`,p=o>1?`${c}-er${o-1}`:c,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:d.taskAgents?.[i],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:p,timeoutMs:u,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:l,role:"candidate",candidateIndex:i,errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(a)}})),f={operationId:s,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:i,errorRetry:o>1?o-1:void 0,candidateIndex:i,...this.pipelineContextToMeta(a)};return this.buildResult(g,f)}buildJudgeContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return e.candidates.forEach((r,i)=>{r.status==="error"&&(n[`candidate_${i}/_failed.txt`]=`STATUS: FAILED
229
229
 
230
- Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([s,d])=>{n[`candidate_${i}/${s}`]=d;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:i,operationId:s,parentIndex:d,attempt:p=1,_pipelineContext:l}=e,o=d!==void 0?`${this.config.tag}-map-${d}-bestof-judge`:`${this.config.tag}-bestof-judge`,a=p>1?`${o}-er${p-1}`:o,c=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),u=kt(c),g=Z(An,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:u}),f=z$1.object({winner:z$1.number().min(0).max(n.length-1),reasoning:z$1.string()}),h=await this.semaphore.use(()=>this.execute(c,vi,{systemPrompt:g,schema:f,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:a,timeoutMs:i,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:d,role:"judge",errorRetry:p>1?p-1:void 0,...this.pipelineContextToObservability(l)}})),m=null;if(h.data&&!h.error)m=h.data;else if(h.rawData)try{let y=JSON.parse(h.rawData);console.warn(`Judge returned invalid winner ${y.winner}, defaulting to candidate 0`),m={winner:0,reasoning:y.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${h.error}`);}return {status:m?"success":"error",decision:m,tag:h.tag,sandboxId:h.sandboxId,error:m?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=z$1.object({passed:z$1.boolean(),reasoning:z$1.string(),feedback:z$1.string().optional()});buildVerifyContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return Object.entries(e.outputFiles).forEach(([r,i])=>{n[`worker_output/${r}`]=i;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:i,workerTag:s,retryAttempt:d=1,operation:p,itemIndex:l,attemptIndex:o,_pipelineContext:a}=e,c=d>1?`${s}-verifier-er${d-1}`:`${s}-verifier`,u=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,f=n.verifierIntegrations??e.integrations,h=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),m=kt(h),y=Z(On,{criteria:n.criteria,fileTree:m}),w=await this.semaphore.use(()=>this.execute(h,bi,{systemPrompt:y,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:u,skills:g,integrations:f,tagPrefix:c,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:i,operation:p,itemIndex:l,role:"verifier",verifyRetry:o&&o>1?o-1:void 0,errorRetry:d>1?d-1:void 0,...this.pipelineContextToObservability(a)}})),b=null;if(w.data&&!w.error)b=w.data;else if(w.rawData)try{let k=JSON.parse(w.rawData);b={passed:!!k.passed,reasoning:k.reasoning??"Verification completed",feedback:k.feedback};}catch{console.warn(`Verify validation failed: ${w.error}`);}return {status:b?"success":"error",decision:b,tag:w.tag,sandboxId:w.sandboxId,error:b?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return Z(Mn,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:d,operationId:p,baseTag:l,retry:o,itemIndex:a=0,operation:c,_pipelineContext:u}=n,g=s.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,f=r,h=null,m=0;for(;m<g;){m++;let w=m>1?`${l}-vr${m-1}`:l,b=o?await B(v=>e(f,v>1?`${w}-er${v-1}`:w,m),o,a):await e(f,w,m);if(s.onWorkerComplete?.(a,m,b.status==="error"?"error":"success"),b.status==="error")return b;h=b;let k=o?await B(v=>this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:p,workerTag:w,retryAttempt:v,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:u}),{...o,retryOn:void 0}):await this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:p,workerTag:w,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:u}),C={operationId:p,operation:"verify",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(u)};if(s.onVerifierComplete?.(a,m,k.decision?.passed??false,k.decision?.feedback),k.decision?.passed)return {...b,verify:{passed:true,reasoning:k.decision.reasoning,verifyMeta:C,attempts:m}};if(m<g){let v=k.decision?.feedback??k.decision?.reasoning??"Output did not meet criteria";f=t.buildRetryPromptWithFeedback(r,v);}}let y=m>1?`${l}-vr${m-1}`:l;return {...h,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:p,operation:"verify",tag:`${y}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(u)},attempts:m}}}generateOperationId(){return randomBytes(8).toString("hex")}pipelineContextToObservability(e){return e?{pipelineRunId:e.pipelineRunId,pipelineStepIndex:e.pipelineStepIndex}:{}}pipelineContextToMeta(e){return {pipelineRunId:e?.pipelineRunId,pipelineStepIndex:e?.pipelineStepIndex}}evaluatePrompt(e,n,r){if(typeof e=="string")return e;try{return e(n,r)}catch(i){return i}}buildEvaluatorContext(e){let n={};return e.systemPrompt&&(n["worker_task/system_prompt.txt"]=e.systemPrompt),n["worker_task/user_prompt.txt"]=e.taskPrompt,e.schema&&(n["worker_task/schema.json"]=F(e.schema)?ce(e.schema):de(e.schema)),Object.entries(e.inputFiles).forEach(([r,i])=>{n[`worker_task/input/${r}`]=i;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&re in e&&e[re]===true}getFiles(e){if(this.isSwarmResult(e)){let n={...e.files};return n["result.json"]&&(n["data.json"]=n["result.json"],delete n["result.json"]),n}return e}getIndex(e,n){return this.isSwarmResult(e)?e.meta.itemIndex:n}buildResult(e,n,r){let i=r??e.files;return e.error?{[re]:true,status:"error",data:null,files:i,meta:n,error:e.error,rawData:e.rawData}:{[re]:true,status:"success",data:e.data,files:i,meta:n}}buildErrorResult(e,n){return {[re]:true,status:"error",data:null,files:{},meta:n,error:e}}};var Pt=class t{swarm;steps;events;constructor(e,n=[],r={}){this.swarm=e,this.steps=n,this.events=r;}map(e){return new t(this.swarm,[...this.steps,{type:"map",config:e}],this.events)}filter(e){return new t(this.swarm,[...this.steps,{type:"filter",config:e}],this.events)}reduce(e){return new It(this.swarm,[...this.steps,{type:"reduce",config:e}],this.events)}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}async run(e){let n=randomBytes(8).toString("hex"),r=[],i=e,s=Date.now();for(let p=0;p<this.steps.length;p++){let l=this.steps[p],o=l.config.name,a=Date.now();this.events.onStepStart?.({type:l.type,index:p,name:o,itemCount:i.length});let c={pipelineRunId:n,pipelineStepIndex:p};try{let u=await this.executeStep(l,i,p,o,c),g=Date.now()-a;if(r.push({type:l.type,index:p,durationMs:g,results:u.output}),this.events.onStepComplete?.({type:l.type,index:p,name:o,durationMs:g,successCount:u.successCount,errorCount:u.errorCount,filteredCount:u.filteredCount}),l.type==="reduce")return {pipelineRunId:n,steps:r,output:u.output,totalDurationMs:Date.now()-s};i=u.nextItems;}catch(u){throw this.events.onStepError?.({type:l.type,index:p,name:o,error:u instanceof Error?u:new Error(String(u))}),u}}let d=r[r.length-1];return {pipelineRunId:n,steps:r,output:d?.results??[],totalDurationMs:Date.now()-s}}async executeStep(e,n,r,i,s){if(e.type==="map"){let l=e.config,o=await this.swarm.map({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i),bestOf:this.wrapBestOf(l.bestOf,r,i)});return {output:[...o],nextItems:o.success,successCount:o.success.length,errorCount:o.error.length,filteredCount:0}}if(e.type==="filter"){let l=e.config,o=await this.swarm.filter({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i)}),a=l.emit??"success",c=a==="success"?o.success:a==="filtered"?o.filtered:[...o.success,...o.filtered];return {output:[...o],nextItems:c,successCount:o.success.length,errorCount:o.error.length,filteredCount:o.filtered.length}}let d=e.config,p=await this.swarm.reduce({items:n,...d,_pipelineContext:s,retry:this.wrapRetry(d.retry,r,i),verify:this.wrapVerify(d.verify,r,i)});return {output:p,nextItems:[],successCount:p.status==="success"?1:0,errorCount:p.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(i,s,d)=>{e.onItemRetry?.(i,s,d),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,error:d});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(i,s,d)=>{e.onWorkerComplete?.(i,s,d),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,status:d});},onVerifierComplete:(i,s,d,p)=>{e.onVerifierComplete?.(i,s,d,p),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,passed:d,feedback:p});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(i,s,d)=>{e.onCandidateComplete?.(i,s,d),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:i,candidateIndex:s,status:d});},onJudgeComplete:(i,s,d)=>{e.onJudgeComplete?.(i,s,d),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:i,winnerIndex:s,reasoning:d});}}}},It=class t extends Pt{constructor(e,n,r){super(e,n,r);}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}map(){throw new Error("Cannot add steps after reduce")}filter(){throw new Error("Cannot add steps after reduce")}reduce(){throw new Error("Cannot add steps after reduce")}};export{$ as AGENT_REGISTRY,po as AGENT_TYPES,Ve as Agent,Cr as BINARY_EFFORT_VALUES,In as BROWSER_ACTIONBOOK_PROMPT,Wn as BROWSER_LOGIN_MCP_SERVER_NAME,Et as BrowserCredentialsClient,Rt as BrowserProfilesClient,Er as DEFAULT_REASONING_EFFORT,Ge as Evolve,_ as EvolveConfigError,An as JUDGE_PROMPT,gn as MAX_SKILL_BYTES,pn as MAX_SKILL_FILES,Pt as Pipeline,xr as REASONING_EFFORTS,Mn as RETRY_FEEDBACK_PROMPT,yi as SCHEMA_PROMPT,Y as SKILL_FILE_NAME,go as SUPPORTED_RUN_OPTIONS,re as SWARM_RESULT_BRAND,hi as SYSTEM_PROMPT,ve as Semaphore,N as SkillRefError,U as SkillResolveError,er as Swarm,be as SwarmResultList,It as TerminalPipeline,jt as VALIDATION_PRESETS,On as VERIFY_PROMPT,fi as WORKSPACE_PROMPT,mi as WORKSPACE_SWE_PROMPT,Z as applyTemplate,Hn as browserCredentials,Xn as browserProfiles,Un as buildWorkerSystemPrompt,fn as computeSkillDigest,ne as createAgentParser,at as createClaudeParser,lt as createCodexParser,ct as createDroidParser,dt as createGeminiParser,B as executeWithRetry,M as expandPath,D as getAgentConfig,z as getMcpSettingsDir,J as getMcpSettingsPath,fo as harnessEffortVocabulary,Ir as isAgentWorkUpdate,Gt as isValidAgentType,F as isZodSchema,de as jsonSchemaToString,ka as managedSandbox,Sn as mountSkills,Yo as parseNdjsonLine,Zo as parseNdjsonOutput,Fr as parseQwenOutput,yn as parseSkillRef,pa as pinSkillRef,Jr as readLocalDir,vn as resolveSkillSha,kn as resolveSkills,xt as resolveStorageConfig,zr as saveLocalDir,wn as skillCloneUrl,le as skillDisplayUrl,ml as storage,Qe as writeClaudeMcpConfig,it as writeCodexMcpConfig,rt as writeDroidGatewaySettings,nt as writeDroidMcpConfig,Xe as writeGeminiMcpConfig,en as writeMcpConfig,et as writeQwenMcpConfig,ce as zodSchemaToJson};
230
+ Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([s,d])=>{n[`candidate_${i}/${s}`]=d;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:i,operationId:s,parentIndex:d,attempt:u=1,_pipelineContext:l}=e,o=d!==void 0?`${this.config.tag}-map-${d}-bestof-judge`:`${this.config.tag}-bestof-judge`,a=u>1?`${o}-er${u-1}`:o,c=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),p=St(c),g=Z(An,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:p}),f=z$1.object({winner:z$1.number().min(0).max(n.length-1),reasoning:z$1.string()}),h=await this.semaphore.use(()=>this.execute(c,xi,{systemPrompt:g,schema:f,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:a,timeoutMs:i,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:d,role:"judge",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(l)}})),m=null;if(h.data&&!h.error)m=h.data;else if(h.rawData)try{let y=JSON.parse(h.rawData);console.warn(`Judge returned invalid winner ${y.winner}, defaulting to candidate 0`),m={winner:0,reasoning:y.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${h.error}`);}return {status:m?"success":"error",decision:m,tag:h.tag,sandboxId:h.sandboxId,error:m?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=z$1.object({passed:z$1.boolean(),reasoning:z$1.string(),feedback:z$1.string().optional()});buildVerifyContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return Object.entries(e.outputFiles).forEach(([r,i])=>{n[`worker_output/${r}`]=i;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:i,workerTag:s,retryAttempt:d=1,operation:u,itemIndex:l,attemptIndex:o,_pipelineContext:a}=e,c=d>1?`${s}-verifier-er${d-1}`:`${s}-verifier`,p=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,f=n.verifierIntegrations??e.integrations,h=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),m=St(h),y=Z(On,{criteria:n.criteria,fileTree:m}),w=await this.semaphore.use(()=>this.execute(h,Ci,{systemPrompt:y,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:p,skills:g,integrations:f,tagPrefix:c,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:i,operation:u,itemIndex:l,role:"verifier",verifyRetry:o&&o>1?o-1:void 0,errorRetry:d>1?d-1:void 0,...this.pipelineContextToObservability(a)}})),b=null;if(w.data&&!w.error)b=w.data;else if(w.rawData)try{let k=JSON.parse(w.rawData);b={passed:!!k.passed,reasoning:k.reasoning??"Verification completed",feedback:k.feedback};}catch{console.warn(`Verify validation failed: ${w.error}`);}return {status:b?"success":"error",decision:b,tag:w.tag,sandboxId:w.sandboxId,error:b?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return Z(Mn,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:d,operationId:u,baseTag:l,retry:o,itemIndex:a=0,operation:c,_pipelineContext:p}=n,g=s.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,f=r,h=null,m=0;for(;m<g;){m++;let w=m>1?`${l}-vr${m-1}`:l,b=o?await B(v=>e(f,v>1?`${w}-er${v-1}`:w,m),o,a):await e(f,w,m);if(s.onWorkerComplete?.(a,m,b.status==="error"?"error":"success"),b.status==="error")return b;h=b;let k=o?await B(v=>this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:u,workerTag:w,retryAttempt:v,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:p}),{...o,retryOn:void 0}):await this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:u,workerTag:w,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:p}),C={operationId:u,operation:"verify",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)};if(s.onVerifierComplete?.(a,m,k.decision?.passed??false,k.decision?.feedback),k.decision?.passed)return {...b,verify:{passed:true,reasoning:k.decision.reasoning,verifyMeta:C,attempts:m}};if(m<g){let v=k.decision?.feedback??k.decision?.reasoning??"Output did not meet criteria";f=t.buildRetryPromptWithFeedback(r,v);}}let y=m>1?`${l}-vr${m-1}`:l;return {...h,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:u,operation:"verify",tag:`${y}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)},attempts:m}}}generateOperationId(){return randomBytes(8).toString("hex")}pipelineContextToObservability(e){return e?{pipelineRunId:e.pipelineRunId,pipelineStepIndex:e.pipelineStepIndex}:{}}pipelineContextToMeta(e){return {pipelineRunId:e?.pipelineRunId,pipelineStepIndex:e?.pipelineStepIndex}}evaluatePrompt(e,n,r){if(typeof e=="string")return e;try{return e(n,r)}catch(i){return i}}buildEvaluatorContext(e){let n={};return e.systemPrompt&&(n["worker_task/system_prompt.txt"]=e.systemPrompt),n["worker_task/user_prompt.txt"]=e.taskPrompt,e.schema&&(n["worker_task/schema.json"]=N(e.schema)?ce(e.schema):de(e.schema)),Object.entries(e.inputFiles).forEach(([r,i])=>{n[`worker_task/input/${r}`]=i;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&re in e&&e[re]===true}getFiles(e){if(this.isSwarmResult(e)){let n={...e.files};return n["result.json"]&&(n["data.json"]=n["result.json"],delete n["result.json"]),n}return e}getIndex(e,n){return this.isSwarmResult(e)?e.meta.itemIndex:n}buildResult(e,n,r){let i=r??e.files;return e.error?{[re]:true,status:"error",data:null,files:i,meta:n,error:e.error,rawData:e.rawData}:{[re]:true,status:"success",data:e.data,files:i,meta:n}}buildErrorResult(e,n){return {[re]:true,status:"error",data:null,files:{},meta:n,error:e}}};var It=class t{swarm;steps;events;constructor(e,n=[],r={}){this.swarm=e,this.steps=n,this.events=r;}map(e){return new t(this.swarm,[...this.steps,{type:"map",config:e}],this.events)}filter(e){return new t(this.swarm,[...this.steps,{type:"filter",config:e}],this.events)}reduce(e){return new At(this.swarm,[...this.steps,{type:"reduce",config:e}],this.events)}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}async run(e){let n=randomBytes(8).toString("hex"),r=[],i=e,s=Date.now();for(let u=0;u<this.steps.length;u++){let l=this.steps[u],o=l.config.name,a=Date.now();this.events.onStepStart?.({type:l.type,index:u,name:o,itemCount:i.length});let c={pipelineRunId:n,pipelineStepIndex:u};try{let p=await this.executeStep(l,i,u,o,c),g=Date.now()-a;if(r.push({type:l.type,index:u,durationMs:g,results:p.output}),this.events.onStepComplete?.({type:l.type,index:u,name:o,durationMs:g,successCount:p.successCount,errorCount:p.errorCount,filteredCount:p.filteredCount}),l.type==="reduce")return {pipelineRunId:n,steps:r,output:p.output,totalDurationMs:Date.now()-s};i=p.nextItems;}catch(p){throw this.events.onStepError?.({type:l.type,index:u,name:o,error:p instanceof Error?p:new Error(String(p))}),p}}let d=r[r.length-1];return {pipelineRunId:n,steps:r,output:d?.results??[],totalDurationMs:Date.now()-s}}async executeStep(e,n,r,i,s){if(e.type==="map"){let l=e.config,o=await this.swarm.map({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i),bestOf:this.wrapBestOf(l.bestOf,r,i)});return {output:[...o],nextItems:o.success,successCount:o.success.length,errorCount:o.error.length,filteredCount:0}}if(e.type==="filter"){let l=e.config,o=await this.swarm.filter({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i)}),a=l.emit??"success",c=a==="success"?o.success:a==="filtered"?o.filtered:[...o.success,...o.filtered];return {output:[...o],nextItems:c,successCount:o.success.length,errorCount:o.error.length,filteredCount:o.filtered.length}}let d=e.config,u=await this.swarm.reduce({items:n,...d,_pipelineContext:s,retry:this.wrapRetry(d.retry,r,i),verify:this.wrapVerify(d.verify,r,i)});return {output:u,nextItems:[],successCount:u.status==="success"?1:0,errorCount:u.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(i,s,d)=>{e.onItemRetry?.(i,s,d),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,error:d});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(i,s,d)=>{e.onWorkerComplete?.(i,s,d),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,status:d});},onVerifierComplete:(i,s,d,u)=>{e.onVerifierComplete?.(i,s,d,u),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,passed:d,feedback:u});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(i,s,d)=>{e.onCandidateComplete?.(i,s,d),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:i,candidateIndex:s,status:d});},onJudgeComplete:(i,s,d)=>{e.onJudgeComplete?.(i,s,d),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:i,winnerIndex:s,reasoning:d});}}}},At=class t extends It{constructor(e,n,r){super(e,n,r);}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}map(){throw new Error("Cannot add steps after reduce")}filter(){throw new Error("Cannot add steps after reduce")}reduce(){throw new Error("Cannot add steps after reduce")}};var tr=class extends Error{feature;provider;reason;constructor(e,n,r){super(`${n} does not support ${e}${r?`: ${r}`:""}`),this.name="SandboxFeatureUnsupportedError",this.feature=e,this.provider=n,this.reason=r;}},nr=class extends Error{path;provider;constructor(e,n){super(`${n}: no such file or directory: ${e}`),this.name="SandboxPathNotFoundError",this.path=e,this.provider=n;}},rr=class extends Error{sandboxId;provider;state;constructor(e,n,r){super(`${n} sandbox ${e} is not running (${r}); inspect never starts or resumes a sandbox`),this.name="SandboxNotRunningError",this.sandboxId=e,this.provider=n,this.state=r;}};function ir(t,e){return !!t&&typeof t=="object"&&t.name===e}function Xl(t){return ir(t,"SandboxFeatureUnsupportedError")}function ec(t){return ir(t,"SandboxPathNotFoundError")}function tc(t){return ir(t,"SandboxNotRunningError")}export{U as AGENT_REGISTRY,yo as AGENT_TYPES,Ve as Agent,Rr as BINARY_EFFORT_VALUES,In as BROWSER_ACTIONBOOK_PROMPT,Wn as BROWSER_LOGIN_MCP_SERVER_NAME,Tt as BrowserCredentialsClient,Pt as BrowserProfilesClient,Pr as DEFAULT_REASONING_EFFORT,Ge as Evolve,_ as EvolveConfigError,An as JUDGE_PROMPT,fn as MAX_SKILL_BYTES,gn as MAX_SKILL_FILES,It as Pipeline,_r as REASONING_EFFORTS,Mn as RETRY_FEEDBACK_PROMPT,ki as SCHEMA_PROMPT,Y as SKILL_FILE_NAME,wo as SUPPORTED_RUN_OPTIONS,re as SWARM_RESULT_BRAND,bi as SYSTEM_PROMPT,tr as SandboxFeatureUnsupportedError,rr as SandboxNotRunningError,nr as SandboxPathNotFoundError,ve as Semaphore,F as SkillRefError,$ as SkillResolveError,er as Swarm,be as SwarmResultList,At as TerminalPipeline,Vt as VALIDATION_PRESETS,On as VERIFY_PROMPT,wi as WORKSPACE_PROMPT,vi as WORKSPACE_SWE_PROMPT,Z as applyTemplate,Hn as browserCredentials,Xn as browserProfiles,$n as buildWorkerSystemPrompt,mn as computeSkillDigest,ne as createAgentParser,at as createClaudeParser,lt as createCodexParser,ct as createDroidParser,dt as createGeminiParser,B as executeWithRetry,M as expandPath,D as getAgentConfig,z as getMcpSettingsDir,J as getMcpSettingsPath,vo as harnessEffortVocabulary,$r as isAgentWorkUpdate,Xl as isSandboxFeatureUnsupportedError,tc as isSandboxNotRunningError,ec as isSandboxPathNotFoundError,Jt as isValidAgentType,N as isZodSchema,de as jsonSchemaToString,Ta as managedSandbox,xn as mountSkills,ta as parseNdjsonLine,na as parseNdjsonOutput,Gr as parseQwenOutput,wn as parseSkillRef,ya as pinSkillRef,qr as readLocalDir,kt as resolveDefaultSandbox,bn as resolveSkillSha,Sn as resolveSkills,Ct as resolveStorageConfig,Yr as saveLocalDir,vn as skillCloneUrl,le as skillDisplayUrl,kl as storage,Qe as writeClaudeMcpConfig,it as writeCodexMcpConfig,rt as writeDroidGatewaySettings,nt as writeDroidMcpConfig,Xe as writeGeminiMcpConfig,tn as writeMcpConfig,et as writeQwenMcpConfig,ce as zodSchemaToJson};