@evolvingmachines/sdk 0.0.50 → 0.0.52-project-sable.20260726.6e95f36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,52 +1,52 @@
1
- 'use strict';var events=require('events'),fs=require('ajv'),crypto=require('crypto'),ii=require('zod-to-json-schema'),$=require('fs'),ae=require('path'),promises=require('fs/promises'),os=require('os'),child_process=require('child_process'),util=require('util'),zod=require('zod'),e2b=require('@evolvingmachines/e2b'),daytona=require('@evolvingmachines/daytona'),modal=require('@evolvingmachines/modal'),stream=require('stream'),promises$1=require('stream/promises');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var fs__default=/*#__PURE__*/_interopDefault(fs);var ii__default=/*#__PURE__*/_interopDefault(ii);var $__namespace=/*#__PURE__*/_interopNamespace($);var ae__namespace=/*#__PURE__*/_interopNamespace(ae);var xr={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid"},He={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}};function ne(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function qe(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 Cr(t){let e=qe(t);return e?` --variant ${e} --thinking`:""}var Ye={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",models:[{alias:"fable",modelId:"claude-fable-5",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-4-8",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-4-6",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"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r})=>{let s=n?"--continue ":"",o=r?` --effort ${r}`:"";return `echo "${t}" | claude -p ${s}--model ${e}${o} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-5.4",models:[{alias:"gpt-5.5",modelId:"gpt-5.5",description:"Newest frontier model"},{alias:"gpt-5.4",modelId:"gpt-5.4",description:"Flagship for professional work"},{alias:"gpt-5.4-mini",modelId:"gpt-5.4-mini",description:"Fast, efficient mini model"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"},{alias:"gpt-5.2",modelId:"gpt-5.2",description:"Previous general-purpose model"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.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})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",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.1-pro-preview",models:[{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"},{alias:"gemini-3.1-flash-lite-preview",modelId:"gemini-3.1-flash-lite-preview",description:"Cost-efficient, low latency"},{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest Flash model"},{alias:"gemini-3-flash-preview",modelId:"gemini-3-flash-preview",description:"Frontier flash performance"},{alias:"gemini-2.5-pro",modelId:"gemini-2.5-pro",description:"Complex tasks, deep reasoning"},{alias:"gemini-2.5-flash",modelId:"gemini-2.5-flash",description:"Balance speed/reasoning"},{alias:"gemini-2.5-flash-lite",modelId:"gemini-2.5-flash-lite",description:"Simple tasks, fastest"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini "${t}" ${n?"--resume latest ":""}--model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"qwen3.7-max",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"},{alias:"qwen3.6-plus",modelId:"qwen3.6-plus",description:"Compatibility model used in Qwen Code examples"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.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","qwen3.6-plus":"dashscope/qwen3.6-plus"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let s=n?"--continue ":"",o=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${s}--auth-type openai --model ${o} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k2.6",models:[{alias:"kimi-k2.6",modelId:"moonshot/kimi-k2.6",description:"Latest: long-horizon coding, swarm orchestration"},{alias:"kimi-k2.6-turbo",modelId:"kimi-k2.6-turbo",description:"Evolve-managed Kimi K2.6 turbo route for latency-sensitive agent runs"},{alias:"kimi-k2.5",modelId:"moonshot/kimi-k2.5",description:"Previous multimodal flagship"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.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-k2.6":"moonshot/kimi-k2.6","kimi-k2.6-turbo":"kimi-k2.6-turbo","kimi-k2.5":"moonshot/kimi-k2.5"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n})=>{let r=e?"--continue ":"",s=ve(t),o="--config-file /home/user/.kimi-code/config.toml",c="$(if [ -f /home/user/.kimi-code/mcp.json ]; then printf ' --mcp-config-file /home/user/.kimi-code/mcp.json'; fi)",a=ne(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${r}${o}${c}${a} -p ${s} --output-format stream-json; else kimi ${r}-p ${s} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-sonnet-4.6",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[{alias:"openrouter/anthropic/claude-fable-5",modelId:"openrouter/anthropic/claude-fable-5",description:"Anthropic Fable via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-4.6",modelId:"openrouter/anthropic/claude-sonnet-4.6",description:"Anthropic Sonnet via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-4.8",modelId:"openrouter/anthropic/claude-opus-4.8",description:"Anthropic Opus 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-5.5",modelId:"openrouter/openai/gpt-5.5",description:"OpenAI GPT-5.5 via OpenRouter"},{alias:"openrouter/openai/gpt-5.4",modelId:"openrouter/openai/gpt-5.4",description:"OpenAI GPT-5.4 via OpenRouter"},{alias:"openrouter/openai/gpt-5.4-mini",modelId:"openrouter/openai/gpt-5.4-mini",description:"OpenAI GPT-5.4 Mini via OpenRouter"},{alias:"openrouter/openai/gpt-5.3-codex",modelId:"openrouter/openai/gpt-5.3-codex",description:"OpenAI Codex via OpenRouter"},{alias:"openrouter/openai/gpt-5.2",modelId:"openrouter/openai/gpt-5.2",description:"OpenAI GPT-5.2 via OpenRouter"},{alias:"openrouter/google/gemini-3.1-pro-preview",modelId:"openrouter/google/gemini-3.1-pro-preview",description:"Gemini 3.1 Pro via OpenRouter"},{alias:"openrouter/google/gemini-3.5-flash",modelId:"openrouter/google/gemini-3.5-flash",description:"Gemini 3.5 Flash via OpenRouter"},{alias:"openrouter/google/gemini-3-flash-preview",modelId:"openrouter/google/gemini-3-flash-preview",description:"Gemini 3 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3-coder-next",modelId:"openrouter/qwen/qwen3-coder-next",description:"Qwen Coder Next via OpenRouter"},{alias:"openrouter/qwen/qwen3-coder-plus",modelId:"openrouter/qwen/qwen3-coder-plus",description:"Qwen Coder via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k2.6",modelId:"openrouter/moonshotai/kimi-k2.6",description:"Kimi K2.6 via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k2.5",modelId:"openrouter/moonshotai/kimi-k2.5",description:"Kimi K2.5 via OpenRouter"},{alias:"openrouter/z-ai/glm-5",modelId:"openrouter/z-ai/glm-5",description:"Zhipu GLM-5 via OpenRouter"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,reasoningEffort:s})=>{let o=n?"--continue ":"",c=e.startsWith("openrouter/")?e:`openrouter/${e}`,a=Cr(s);return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${o}--model ${c} --format json${a} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${o}--model litellm/${c} --format json${a} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",defaultModel:"gpt-5.5",models:[{alias:"claude-opus-4-8",modelId:"claude-opus-4-8",description:"Factory-managed Claude Opus 4.8"},{alias:"claude-opus-4-8-fast",modelId:"claude-opus-4-8-fast",description:"Factory-managed Claude Opus 4.8 Fast Mode"},{alias:"claude-sonnet-4-6",modelId:"claude-sonnet-4-6",description:"Factory-managed Claude Sonnet 4.6"},{alias:"claude-opus-4-6",modelId:"claude-opus-4-6",description:"Factory-managed Claude Opus 4.6"},{alias:"claude-opus-4-6-fast",modelId:"claude-opus-4-6-fast",description:"Factory-managed Claude Opus 4.6 Fast Mode"},{alias:"claude-opus-4-5",modelId:"claude-opus-4-5-20251101",description:"Factory-managed Claude Opus 4.5"},{alias:"claude-sonnet-4-5",modelId:"claude-sonnet-4-5-20250929",description:"Factory-managed Claude Sonnet 4.5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-5.5",modelId:"gpt-5.5",description:"Factory-managed GPT-5.5"},{alias:"gpt-5.5-fast",modelId:"gpt-5.5-fast",description:"Factory-managed GPT-5.5 Fast Mode"},{alias:"gpt-5.5-pro",modelId:"gpt-5.5-pro",description:"Factory-managed GPT-5.5 Pro"},{alias:"gpt-5.4",modelId:"gpt-5.4",description:"Factory-managed GPT-5.4"},{alias:"gpt-5.4-fast",modelId:"gpt-5.4-fast",description:"Factory-managed GPT-5.4 Fast Mode"},{alias:"gpt-5.4-mini",modelId:"gpt-5.4-mini",description:"Factory-managed GPT-5.4 Mini"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Factory-managed GPT-5.3-Codex"},{alias:"gpt-5.3-codex-fast",modelId:"gpt-5.3-codex-fast",description:"Factory-managed GPT-5.3-Codex Fast"},{alias:"gpt-5.2",modelId:"gpt-5.2",description:"Factory-managed GPT-5.2"},{alias:"gpt-5.2-codex",modelId:"gpt-5.2-codex",description:"Factory-managed GPT-5.2-Codex"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Factory-managed Gemini 3.1 Pro"},{alias:"gemini-3-pro-preview",modelId:"gemini-3-pro-preview",description:"Factory-managed Gemini 3 Pro"},{alias:"gemini-3-flash-preview",modelId:"gemini-3-flash-preview",description:"Factory-managed Gemini 3 Flash"},{alias:"kimi-k2.6",modelId:"kimi-k2.6",description:"Factory-managed Droid Core Kimi K2.6"},{alias:"kimi-k2.5",modelId:"kimi-k2.5",description:"Factory-managed Droid Core Kimi K2.5"},{alias:"deepseek-v4-pro",modelId:"deepseek-v4-pro",description:"Factory-managed Droid Core DeepSeek V4 Pro"},{alias:"minimax-m2.7",modelId:"minimax-m2.7",description:"Factory-managed Droid Core MiniMax M2.7"},{alias:"minimax-m2.5",modelId:"minimax-m2.5",description:"Factory-managed Droid Core MiniMax M2.5"},{alias:"glm-5.1",modelId:"glm-5.1",description:"Factory-managed Droid Core GLM-5.1"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{sourceDir:"/home/user/.evolve/skills",targetDir:"/home/user/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"kimi-k2.6":"moonshot/kimi-k2.6","kimi-k2.5":"moonshot/kimi-k2.5","deepseek-v4-pro":"deepseek/deepseek-v4-pro","minimax-m2.7":"minimax/minimax-m2.7","minimax-m2.5":"minimax/minimax-m2.5","glm-5.1":"openrouter/z-ai/glm-5.1"},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:s,isDirectMode:o})=>{let c=o?"":"--settings /home/user/.factory/evolve-settings.json ",a=o?e:"custom:Evolve-Gateway-0",l=s?` --reasoning-effort ${s}`:"",d=n&&r?`--session-id ${ve(r)} `:"";return `printf '%s' ${ve(t)} | droid ${c}exec ${d}--skip-permissions-unsafe --cwd /home/user/workspace --output-format stream-json --model ${ve(a)}${l}`}}};function D(t){let e=Ye[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function _r(t){return t in Ye}function V(t){return t.replace(/^~/,"/home/user")}function ve(t){return `'${t.replace(/'/g,"'\\''")}'`}function B(t){let e=D(t);return `${V(e.mcpConfig.settingsDir)}/${e.mcpConfig.filename}`}function U(t){let e=D(t);return V(e.mcpConfig.settingsDir)}function A(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 Qe(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 re(t){for(let[e,n]of Object.entries(t))Qe(e,n);}function ie(t){return t.type?t.type:t.command?"stdio":"sse"}function Er(t){let e=ie(t);return {...t,type:e}}function Tr(t){let{type:e,url:n,...r}=t;return ie(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function Ir(t){return {type:ie(t),...t}}function Rr(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function Pr(t){let e=ie(t),{type:n,httpHeaders:r,envHttpHeaders:s,bearerTokenEnvVar:o,envVars:c,...a}=t;if(e==="stdio"&&t.command)return {type:"stdio",...a};if(t.url){let l={...a,type:e==="sse"?"sse":"http",url:t.url},d=t.headers??r;return d&&Object.keys(d).length>0&&(l.headers=d),l}return {type:e==="stdio"?"stdio":"http",...a}}async function Ze(t,e,n,r){re(n);let s=U(e),o=B(e);await t.files.makeDir(s);let c={};try{let l=await t.files.read(o);typeof l=="string"&&(c=JSON.parse(l));}catch(l){if(!A(l))throw l}let a=Object.fromEntries(Object.entries(n).map(([l,d])=>[l,r(d)]));await t.files.write(o,JSON.stringify({...c,mcpServers:a},null,2));}async function Se(t,e,n){re(n);let r=U("claude"),s=B("claude"),o=Object.fromEntries(Object.entries(n).map(([a,l])=>[a,Ir(l)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:o},null,2)),await t.files.makeDir(r);let c={};try{let a=await t.files.read(s);typeof a=="string"&&(c=JSON.parse(a));}catch(a){if(!A(a))throw a}c.enableAllProjectMcpServers=true,await t.files.write(s,JSON.stringify(c,null,2));}async function ke(t,e){await Ze(t,"gemini",e,Er);}async function xe(t,e){await Ze(t,"qwen",e,Tr);}async function Ce(t,e,n,r){let s=U(e),o=B(e);await t.files.makeDir(s);let c={};try{let p=await t.files.read(o);typeof p=="string"&&(c=JSON.parse(p));}catch(p){if(!A(p))throw p}let a=n.split("."),l=c;for(let p=0;p<a.length-1;p++){let u=a[p];(typeof l[u]!="object"||l[u]===null)&&(l[u]={}),l=l[u];}let d=a[a.length-1],i=typeof l[d]=="object"&&l[d]!==null?l[d]:{};l[d]={...i,...r},await t.files.write(o,JSON.stringify(c,null,2));}async function Xe(t,e){let n=U("qwen"),r=B("qwen");await t.files.makeDir(n);let s={};try{let l=await t.files.read(r);typeof l=="string"&&(s=JSON.parse(l));}catch(l){if(!A(l))throw l}let o=s.model??{},c=o.generationConfig??{},a=c.extra_body??{};s.model={...o,generationConfig:{...c,extra_body:{...a,enable_thinking:e}}},await t.files.write(r,JSON.stringify(s,null,2));}async function et(t,e){await Ze(t,"kimi",e,Rr);}async function _e(t,e,n){re(n);let r=`${e}/.factory`,s=`${r}/mcp.json`;await t.files.makeDir(r);let o={};try{let a=await t.files.read(s);typeof a=="string"&&(o=JSON.parse(a));}catch(a){if(!A(a))throw a}let c=Object.fromEntries(Object.entries(n).map(([a,l])=>[a,Pr(l)]));await t.files.write(s,JSON.stringify({...o,mcpServers:c},null,2));}async function Ee(t,e,n){let r=V(e.settingsPath),s=r.slice(0,r.lastIndexOf("/"));await t.files.makeDir(s);let o={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(r,JSON.stringify(o,null,2));}async function tt(t,e,n){re(n);let r=`${e}/opencode.json`,s={};try{let c=await t.files.read(r);typeof c=="string"&&(s=JSON.parse(c));}catch(c){if(!A(c))throw c}let o=Object.fromEntries(Object.entries(n).map(([c,a])=>[c,Or(a)]));await t.files.write(r,JSON.stringify({...s,mcp:o},null,2));}function Or(t){let e=ie(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 G(t=""){let e=process.env.EVOLVE_GATEWAY_URL||"https://swarmkit-gateway-692833842999.us-central1.run.app";if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return `${e}${n}`}function Te(t=""){let e=process.env.EVOLVE_DASHBOARD_URL||E;if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return `${e.replace(/\/$/,"")}${n}`}function nt(){return Te("/api/managed/e2b")}function Nt(t){return {"browser-use":{type:"http",url:G("/browser_use/mcp"),headers:{"x-litellm-api-key":`Bearer ${t}`}}}}var I="EVOLVE_API_KEY",Ie="E2B_API_KEY",Re="DAYTONA_API_KEY",Pe="MODAL_TOKEN_ID",rt="MODAL_TOKEN_SECRET",Kt="claude",se=36e5,jt=4,it=100,Vt="/home/user/workspace",E=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai",O="x-litellm-customer-id",L="x-litellm-tags",W="run:",Gt=".evolve-sdk/observability/sessions",Wt=100,zt=5e3,Oe=3,st=1e3;function _(t){return typeof t=="string"?`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:Array.isArray(t)?`[${t.map(e=>_(e)).join(", ")}]`:typeof t=="object"&&t!==null?`{ ${Object.entries(t).map(([n,r])=>`${n} = ${_(r)}`).join(", ")} }`:typeof t=="boolean"?t?"true":"false":String(t)}async function Ae(t,e){for(let[l,d]of Object.entries(e))Qe(l,d);let n=U("codex"),r=B("codex");await t.files.makeDir(n);let s="";try{let l=await t.files.read(r);typeof l=="string"&&(s=l);}catch(l){if(!A(l))throw l}let o=[],c=[];s.includes("experimental_use_rmcp_client")||(o.push("# Enable improved RMCP client (recommended)"),o.push("experimental_use_rmcp_client = true")),s.includes("[mcp_servers]")||c.push("[mcp_servers]","");for(let[l,d]of Object.entries(e)){if(s.includes(`[mcp_servers.${l}]`))continue;c.push(`[mcp_servers.${l}]`);let i=d.type??(d.command?"stdio":"http");if(i==="http"||i==="sse"||!!d.url){if(!d.url)throw new Error(`MCP server "${l}" is missing url for ${i} transport`);c.push(`url = ${_(d.url)}`),d.bearerTokenEnvVar&&c.push(`bearer_token_env_var = ${_(d.bearerTokenEnvVar)}`);let u=d.httpHeaders??d.headers;u&&Object.keys(u).length>0&&c.push(`http_headers = ${_(u)}`),d.envHttpHeaders&&Object.keys(d.envHttpHeaders).length>0&&c.push(`env_http_headers = ${_(d.envHttpHeaders)}`);}else c.push(`command = ${_(d.command)}`),d.args&&d.args.length>0&&c.push(`args = ${_(d.args)}`),d.cwd&&c.push(`cwd = ${_(d.cwd)}`);d.env&&Object.keys(d.env).length>0&&c.push(`env = ${_(d.env)}`),d.envVars&&d.envVars.length>0&&c.push(`env_vars = ${_(d.envVars)}`),c.push("");}let a=[s.trim(),o.join(`
2
- `),c.join(`
3
- `)].filter(l=>l.length>0);await t.files.write(r,a.join(`
1
+ 'use strict';var zlib=require('zlib'),J=require('fs'),xe=require('path'),events=require('events'),ia=require('ajv'),crypto=require('crypto'),Bi=require('zod-to-json-schema'),promises=require('fs/promises'),os$1=require('os'),child_process=require('child_process'),util=require('util'),zod=require('zod'),e2b=require('@evolvingmachines/e2b'),daytona=require('@evolvingmachines/daytona'),modal=require('@evolvingmachines/modal'),stream=require('stream'),promises$1=require('stream/promises');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var J__namespace=/*#__PURE__*/_interopNamespace(J);var xe__namespace=/*#__PURE__*/_interopNamespace(xe);var ia__default=/*#__PURE__*/_interopDefault(ia);var Bi__default=/*#__PURE__*/_interopDefault(Bi);var Qs=Object.defineProperty;var Zs=(t,e)=>()=>(t&&(e=t(t=0)),e);var ei=(t,e)=>{for(var n in e)Qs(t,n,{get:e[n],enumerable:true});};var Pn={};ei(Pn,{tarGzipDirectory:()=>Oa});function Ia(t){let e=[],n=r=>{let s=r===""?t:xe.join(t,r),a=J.readdirSync(s,{withFileTypes:true}).sort((c,o)=>c.name<o.name?-1:c.name>o.name?1:0);for(let c of a){if(c.name.startsWith("."))continue;let o=r===""?c.name:`${r}/${c.name}`,l=xe.join(s,c.name),d=J.lstatSync(l);d.isSymbolicLink()||(d.isDirectory()?n(o):d.isFile()&&e.push({rel:o,abs:l}));}};return n(""),e.sort((r,s)=>r.rel<s.rel?-1:r.rel>s.rel?1:0)}function Aa(t,e){let n=t,r="";if(Buffer.byteLength(n,"utf8")>100){let c=-1;for(let o=n.indexOf("/");o!==-1;o=n.indexOf("/",o+1)){let l=n.slice(0,o),d=n.slice(o+1);d.length>0&&Buffer.byteLength(d,"utf8")<=100&&Buffer.byteLength(l,"utf8")<=155&&(c=o);}if(c===-1)throw new Error(`path too long to store in a USTAR tar (max 255 bytes, split at "/"): ${t}`);r=n.slice(0,c),n=n.slice(c+1);}let s=Buffer.alloc(me);s.write(n,0,100,"utf8"),s.write("0000644\0",100,"ascii"),s.write("0000000\0",108,"ascii"),s.write("0000000\0",116,"ascii"),s.write(e.toString(8).padStart(11,"0")+"\0",124,"ascii"),s.write("00000000000\0",136,"ascii"),s.write(" ",148,"ascii"),s.write("0",156,"ascii"),s.write("ustar\0",257,"ascii"),s.write("00",263,"ascii"),r&&s.write(r,345,155,"utf8");let a=0;for(let c=0;c<me;c++)a+=s[c];return s.write(a.toString(8).padStart(6,"0")+"\0 ",148,"ascii"),s}function Oa(t){let e=Ia(t),n=[];for(let{rel:r,abs:s}of e){let a=J.readFileSync(s);n.push(Aa(r,a.length)),n.push(a);let c=(me-a.length%me)%me;c>0&&n.push(Buffer.alloc(c));}return n.push(Buffer.alloc(me*2)),zlib.gzipSync(Buffer.concat(n),{level:9})}var me,In=Zs(()=>{me=512;});var ti={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid"},Mt={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}};function N(t=""){let e=process.env.EVOLVE_GATEWAY_URL||"https://swarmkit-gateway-692833842999.us-central1.run.app";if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return `${e}${n}`}function je(t=""){let e=process.env.EVOLVE_DASHBOARD_URL||C;if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return `${e.replace(/\/$/,"")}${n}`}var Je=["e2b","daytona","modal"];function Ve(t){return je(`/api/managed/${t}`)}function Bn(){return `${Ve("daytona")}/toolbox`}function Dt(){return Ve("e2b")}function $n(t){return {"browser-use":{type:"http",url:N("/browser_use/mcp"),headers:{"x-litellm-api-key":`Bearer ${t}`}}}}var P="EVOLVE_API_KEY",He="E2B_API_KEY",Ge="DAYTONA_API_KEY",ze="MODAL_TOKEN_ID",Ut="MODAL_TOKEN_SECRET",Ln="claude",ye=36e5,Nn=4,Bt=100,F="/home/user";function Fn(t,e){return e?e.replace(/\/+$/,"")||"/":t?t==="root"?"/root":`/home/${t}`:F}var C=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai",B="x-litellm-customer-id",V="x-litellm-tags",Z="run:",Kn=".evolve-sdk/observability/sessions",jn=100,Jn=5e3,We=3,$t=1e3;function be(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function Lt(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 ni(t){let e=Lt(t);return e?` --variant ${e} --thinking`:""}var Nt={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",models:[{alias:"fable",modelId:"claude-fable-5",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-4-8",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-4-6",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"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},skillsConfig:{sourceDir:"~/.evolve/skills",targetDir:"~/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r})=>{let s=n?"--continue ":"",a=r?` --effort ${r}`:"";return `echo "${t}" | claude -p ${s}--model ${e}${a} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-5.4",models:[{alias:"gpt-5.5",modelId:"gpt-5.5",description:"Newest frontier model"},{alias:"gpt-5.4",modelId:"gpt-5.4",description:"Flagship for professional work"},{alias:"gpt-5.4-mini",modelId:"gpt-5.4-mini",description:"Fast, efficient mini model"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"},{alias:"gpt-5.2",modelId:"gpt-5.2",description:"Previous general-purpose model"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},skillsConfig:{sourceDir:"~/.evolve/skills",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})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",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.1-pro-preview",models:[{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"},{alias:"gemini-3.1-flash-lite-preview",modelId:"gemini-3.1-flash-lite-preview",description:"Cost-efficient, low latency"},{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest Flash model"},{alias:"gemini-3-flash-preview",modelId:"gemini-3-flash-preview",description:"Frontier flash performance"},{alias:"gemini-2.5-pro",modelId:"gemini-2.5-pro",description:"Complex tasks, deep reasoning"},{alias:"gemini-2.5-flash",modelId:"gemini-2.5-flash",description:"Balance speed/reasoning"},{alias:"gemini-2.5-flash-lite",modelId:"gemini-2.5-flash-lite",description:"Simple tasks, fastest"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{sourceDir:"~/.evolve/skills",targetDir:"~/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${we(t)} --model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"qwen3.7-max",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"},{alias:"qwen3.6-plus",modelId:"qwen3.6-plus",description:"Compatibility model used in Qwen Code examples"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{sourceDir:"~/.evolve/skills",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","qwen3.6-plus":"dashscope/qwen3.6-plus"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let s=n?"--continue ":"",a=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${s}--auth-type openai --model ${a} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k2.6",models:[{alias:"kimi-k2.6",modelId:"moonshot/kimi-k2.6",description:"Latest: long-horizon coding, swarm orchestration"},{alias:"kimi-k2p6-raptor",modelId:"kimi-k2p6-raptor",description:"Evolve-managed Kimi K2.6 Raptor route for latency-sensitive agent runs"},{alias:"kimi-k2p7-code-raptor",modelId:"kimi-k2p7-code-raptor",description:"Evolve-managed Kimi K2.7 Code Raptor route for latency-sensitive agent runs"},{alias:"kimi-k2.5",modelId:"moonshot/kimi-k2.5",description:"Previous multimodal flagship"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{sourceDir:"~/.evolve/skills",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-k2.6":"moonshot/kimi-k2.6","kimi-k2p6-raptor":"kimi-k2p6-raptor","kimi-k2p7-code-raptor":"kimi-k2p7-code-raptor","kimi-k2.5":"moonshot/kimi-k2.5"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n,homeDir:r=F})=>{let s=e?"--continue ":"",a=we(t),c=`--config-file ${r}/.kimi-code/config.toml`,o=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,l=be(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${s}${c}${o}${l} -p ${a} --output-format stream-json; else kimi ${s}-p ${a} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-sonnet-4.6",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[{alias:"openrouter/anthropic/claude-fable-5",modelId:"openrouter/anthropic/claude-fable-5",description:"Anthropic Fable via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-4.6",modelId:"openrouter/anthropic/claude-sonnet-4.6",description:"Anthropic Sonnet via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-4.8",modelId:"openrouter/anthropic/claude-opus-4.8",description:"Anthropic Opus 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-5.5",modelId:"openrouter/openai/gpt-5.5",description:"OpenAI GPT-5.5 via OpenRouter"},{alias:"openrouter/openai/gpt-5.4",modelId:"openrouter/openai/gpt-5.4",description:"OpenAI GPT-5.4 via OpenRouter"},{alias:"openrouter/openai/gpt-5.4-mini",modelId:"openrouter/openai/gpt-5.4-mini",description:"OpenAI GPT-5.4 Mini via OpenRouter"},{alias:"openrouter/openai/gpt-5.3-codex",modelId:"openrouter/openai/gpt-5.3-codex",description:"OpenAI Codex via OpenRouter"},{alias:"openrouter/openai/gpt-5.2",modelId:"openrouter/openai/gpt-5.2",description:"OpenAI GPT-5.2 via OpenRouter"},{alias:"openrouter/google/gemini-3.1-pro-preview",modelId:"openrouter/google/gemini-3.1-pro-preview",description:"Gemini 3.1 Pro via OpenRouter"},{alias:"openrouter/google/gemini-3.5-flash",modelId:"openrouter/google/gemini-3.5-flash",description:"Gemini 3.5 Flash via OpenRouter"},{alias:"openrouter/google/gemini-3-flash-preview",modelId:"openrouter/google/gemini-3-flash-preview",description:"Gemini 3 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3-coder-next",modelId:"openrouter/qwen/qwen3-coder-next",description:"Qwen Coder Next via OpenRouter"},{alias:"openrouter/qwen/qwen3-coder-plus",modelId:"openrouter/qwen/qwen3-coder-plus",description:"Qwen Coder via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k2.6",modelId:"openrouter/moonshotai/kimi-k2.6",description:"Kimi K2.6 via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k2.5",modelId:"openrouter/moonshotai/kimi-k2.5",description:"Kimi K2.5 via OpenRouter"},{alias:"openrouter/z-ai/glm-5",modelId:"openrouter/z-ai/glm-5",description:"Zhipu GLM-5 via OpenRouter"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{sourceDir:"~/.evolve/skills",targetDir:"~/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,isExternalGateway:s,reasoningEffort:a})=>{let c=n?"--continue ":"",o=ni(a);if(s)return `OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${c}--model litellm/${e} --format json${o} "${t}" < /dev/null`;let l=e.startsWith("openrouter/")?e:`openrouter/${e}`;return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${c}--model ${l} --format json${o} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${c}--model litellm/${l} --format json${o} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",defaultModel:"gpt-5.5",models:[{alias:"claude-opus-4-8",modelId:"claude-opus-4-8",description:"Factory-managed Claude Opus 4.8"},{alias:"claude-opus-4-8-fast",modelId:"claude-opus-4-8-fast",description:"Factory-managed Claude Opus 4.8 Fast Mode"},{alias:"claude-sonnet-4-6",modelId:"claude-sonnet-4-6",description:"Factory-managed Claude Sonnet 4.6"},{alias:"claude-opus-4-6",modelId:"claude-opus-4-6",description:"Factory-managed Claude Opus 4.6"},{alias:"claude-opus-4-6-fast",modelId:"claude-opus-4-6-fast",description:"Factory-managed Claude Opus 4.6 Fast Mode"},{alias:"claude-opus-4-5",modelId:"claude-opus-4-5-20251101",description:"Factory-managed Claude Opus 4.5"},{alias:"claude-sonnet-4-5",modelId:"claude-sonnet-4-5-20250929",description:"Factory-managed Claude Sonnet 4.5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-5.5",modelId:"gpt-5.5",description:"Factory-managed GPT-5.5"},{alias:"gpt-5.5-fast",modelId:"gpt-5.5-fast",description:"Factory-managed GPT-5.5 Fast Mode"},{alias:"gpt-5.5-pro",modelId:"gpt-5.5-pro",description:"Factory-managed GPT-5.5 Pro"},{alias:"gpt-5.4",modelId:"gpt-5.4",description:"Factory-managed GPT-5.4"},{alias:"gpt-5.4-fast",modelId:"gpt-5.4-fast",description:"Factory-managed GPT-5.4 Fast Mode"},{alias:"gpt-5.4-mini",modelId:"gpt-5.4-mini",description:"Factory-managed GPT-5.4 Mini"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Factory-managed GPT-5.3-Codex"},{alias:"gpt-5.3-codex-fast",modelId:"gpt-5.3-codex-fast",description:"Factory-managed GPT-5.3-Codex Fast"},{alias:"gpt-5.2",modelId:"gpt-5.2",description:"Factory-managed GPT-5.2"},{alias:"gpt-5.2-codex",modelId:"gpt-5.2-codex",description:"Factory-managed GPT-5.2-Codex"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Factory-managed Gemini 3.1 Pro"},{alias:"gemini-3-pro-preview",modelId:"gemini-3-pro-preview",description:"Factory-managed Gemini 3 Pro"},{alias:"gemini-3-flash-preview",modelId:"gemini-3-flash-preview",description:"Factory-managed Gemini 3 Flash"},{alias:"kimi-k2.6",modelId:"kimi-k2.6",description:"Factory-managed Droid Core Kimi K2.6"},{alias:"kimi-k2.5",modelId:"kimi-k2.5",description:"Factory-managed Droid Core Kimi K2.5"},{alias:"deepseek-v4-pro",modelId:"deepseek-v4-pro",description:"Factory-managed Droid Core DeepSeek V4 Pro"},{alias:"minimax-m2.7",modelId:"minimax-m2.7",description:"Factory-managed Droid Core MiniMax M2.7"},{alias:"minimax-m2.5",modelId:"minimax-m2.5",description:"Factory-managed Droid Core MiniMax M2.5"},{alias:"glm-5.1",modelId:"glm-5.1",description:"Factory-managed Droid Core GLM-5.1"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{sourceDir:"~/.evolve/skills",targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"kimi-k2.6":"moonshot/kimi-k2.6","kimi-k2.5":"moonshot/kimi-k2.5","deepseek-v4-pro":"deepseek/deepseek-v4-pro","minimax-m2.7":"minimax/minimax-m2.7","minimax-m2.5":"minimax/minimax-m2.5","glm-5.1":"openrouter/z-ai/glm-5.1"},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:s,isDirectMode:a,isExternalGateway:c,homeDir:o=F})=>{let l=!a||c,d=l?`--settings ${o}/.factory/evolve-settings.json `:"",i=l?"custom:Evolve-Gateway-0":e,u=s?` --reasoning-effort ${s}`:"",p=n&&r?`--session-id ${we(r)} `:"";return `printf '%s' ${we(t)} | droid ${d}exec ${p}--skip-permissions-unsafe --cwd ${o}/workspace --output-format stream-json --model ${we(i)}${u}`}}};function $(t){let e=Nt[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function ri(t){return t in Nt}function M(t,e=F){return t.replace(/^~/,e)}function we(t){return `'${t.replace(/'/g,"'\\''")}'`}function H(t,e=F){let n=$(t);return `${M(n.mcpConfig.settingsDir,e)}/${n.mcpConfig.filename}`}function G(t,e=F){let n=$(t);return M(n.mcpConfig.settingsDir,e)}function K(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 Ft(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 ve(t){for(let[e,n]of Object.entries(t))Ft(e,n);}function ke(t){return t.type?t.type:t.command?"stdio":"sse"}function si(t){let e=ke(t);return {...t,type:e}}function ii(t){let{type:e,url:n,...r}=t;return ke(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function oi(t){return {type:ke(t),...t}}function ai(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function ci(t){let e=ke(t),{type:n,httpHeaders:r,envHttpHeaders:s,bearerTokenEnvVar:a,envVars:c,...o}=t;if(e==="stdio"&&t.command)return {type:"stdio",...o};if(t.url){let l={...o,type:e==="sse"?"sse":"http",url:t.url},d=t.headers??r;return d&&Object.keys(d).length>0&&(l.headers=d),l}return {type:e==="stdio"?"stdio":"http",...o}}async function Kt(t,e,n,r,s){ve(n);let a=G(e,s),c=H(e,s);await t.files.makeDir(a);let o={};try{let d=await t.files.read(c);typeof d=="string"&&(o=JSON.parse(d));}catch(d){if(!K(d))throw d}let l=Object.fromEntries(Object.entries(n).map(([d,i])=>[d,r(i)]));await t.files.write(c,JSON.stringify({...o,mcpServers:l},null,2));}async function qe(t,e,n,r){ve(n);let s=G("claude",r),a=H("claude",r),c=Object.fromEntries(Object.entries(n).map(([l,d])=>[l,oi(d)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:c},null,2)),await t.files.makeDir(s);let o={};try{let l=await t.files.read(a);typeof l=="string"&&(o=JSON.parse(l));}catch(l){if(!K(l))throw l}o.enableAllProjectMcpServers=true,await t.files.write(a,JSON.stringify(o,null,2));}async function Ye(t,e,n){await Kt(t,"gemini",e,si,n);}async function Xe(t,e,n){await Kt(t,"qwen",e,ii,n);}async function Qe(t,e,n,r,s){let a=G(e,s),c=H(e,s);await t.files.makeDir(a);let o={};try{let p=await t.files.read(c);typeof p=="string"&&(o=JSON.parse(p));}catch(p){if(!K(p))throw p}let l=n.split("."),d=o;for(let p=0;p<l.length-1;p++){let g=l[p];(typeof d[g]!="object"||d[g]===null)&&(d[g]={}),d=d[g];}let i=l[l.length-1],u=typeof d[i]=="object"&&d[i]!==null?d[i]:{};d[i]={...u,...r},await t.files.write(c,JSON.stringify(o,null,2));}async function jt(t,e,n){let r=G("qwen",n),s=H("qwen",n);await t.files.makeDir(r);let a={};try{let d=await t.files.read(s);typeof d=="string"&&(a=JSON.parse(d));}catch(d){if(!K(d))throw d}let c=a.model??{},o=c.generationConfig??{},l=o.extra_body??{};a.model={...c,generationConfig:{...o,extra_body:{...l,enable_thinking:e}}},await t.files.write(s,JSON.stringify(a,null,2));}async function Jt(t,e,n){await Kt(t,"kimi",e,ai,n);}async function Ze(t,e,n){ve(n);let r=`${e}/.factory`,s=`${r}/mcp.json`;await t.files.makeDir(r);let a={};try{let o=await t.files.read(s);typeof o=="string"&&(a=JSON.parse(o));}catch(o){if(!K(o))throw o}let c=Object.fromEntries(Object.entries(n).map(([o,l])=>[o,ci(l)]));await t.files.write(s,JSON.stringify({...a,mcpServers:c},null,2));}async function et(t,e,n,r){let s=M(e.settingsPath,r),a=s.slice(0,s.lastIndexOf("/"));await t.files.makeDir(a);let c={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(s,JSON.stringify(c,null,2));}async function Vt(t,e,n){ve(n);let r=`${e}/opencode.json`,s={};try{let c=await t.files.read(r);typeof c=="string"&&(s=JSON.parse(c));}catch(c){if(!K(c))throw c}let a=Object.fromEntries(Object.entries(n).map(([c,o])=>[c,li(o)]));await t.files.write(r,JSON.stringify({...s,mcp:a},null,2));}function li(t){let e=ke(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 _(t){return typeof t=="string"?`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:Array.isArray(t)?`[${t.map(e=>_(e)).join(", ")}]`:typeof t=="object"&&t!==null?`{ ${Object.entries(t).map(([n,r])=>`${n} = ${_(r)}`).join(", ")} }`:typeof t=="boolean"?t?"true":"false":String(t)}async function tt(t,e,n){for(let[d,i]of Object.entries(e))Ft(d,i);let r=G("codex",n),s=H("codex",n);await t.files.makeDir(r);let a="";try{let d=await t.files.read(s);typeof d=="string"&&(a=d);}catch(d){if(!K(d))throw d}let c=[],o=[];a.includes("experimental_use_rmcp_client")||(c.push("# Enable improved RMCP client (recommended)"),c.push("experimental_use_rmcp_client = true")),a.includes("[mcp_servers]")||o.push("[mcp_servers]","");for(let[d,i]of Object.entries(e)){if(a.includes(`[mcp_servers.${d}]`))continue;o.push(`[mcp_servers.${d}]`);let u=i.type??(i.command?"stdio":"http");if(u==="http"||u==="sse"||!!i.url){if(!i.url)throw new Error(`MCP server "${d}" is missing url for ${u} transport`);o.push(`url = ${_(i.url)}`),i.bearerTokenEnvVar&&o.push(`bearer_token_env_var = ${_(i.bearerTokenEnvVar)}`);let g=i.httpHeaders??i.headers;g&&Object.keys(g).length>0&&o.push(`http_headers = ${_(g)}`),i.envHttpHeaders&&Object.keys(i.envHttpHeaders).length>0&&o.push(`env_http_headers = ${_(i.envHttpHeaders)}`);}else o.push(`command = ${_(i.command)}`),i.args&&i.args.length>0&&o.push(`args = ${_(i.args)}`),i.cwd&&o.push(`cwd = ${_(i.cwd)}`);i.env&&Object.keys(i.env).length>0&&o.push(`env = ${_(i.env)}`),i.envVars&&i.envVars.length>0&&o.push(`env_vars = ${_(i.envVars)}`),o.push("");}let l=[a.trim(),c.join(`
2
+ `),o.join(`
3
+ `)].filter(d=>d.length>0);await t.files.write(s,l.join(`
4
4
 
5
5
  `)+`
6
- `);}async function ot(t,e,n){let r=U("codex"),s=B("codex");await t.files.makeDir(r);let o="";try{let m=await t.files.read(s);typeof m=="string"&&(o=m);}catch(m){if(!A(m))throw m}let c=o.search(/^\[/m),a=c>=0?o.slice(0,c):o,l=c>=0?o.slice(c):"",d=o.includes("[model_providers.evolve-gateway]"),i=/^model_provider\s*=\s*"evolve-gateway"/m.test(a);if(d&&i)return;o=(a.replace(/^model_provider\s*=\s*.*$/m,"").replace(/\n{3,}/g,`
6
+ `);}async function nt(t,e,n,r={},s){let a=G("codex",s),c=H("codex",s);await t.files.makeDir(a);let o="";try{let b=await t.files.read(c);typeof b=="string"&&(o=b);}catch(b){if(!K(b))throw b}let l=o.search(/^\[/m),d=l>=0?o.slice(0,l):o,i=l>=0?o.slice(l):"",u=o.includes("[model_providers.evolve-gateway]"),p=/^model_provider\s*=\s*"evolve-gateway"/m.test(d),g={...n?{[B]:n.sessionTagEnv,[V]:n.runTagEnv}:{},...r},m=["[model_providers.evolve-gateway]",'name = "Evolve Gateway"',`base_url = ${_(e)}`,'env_key = "OPENAI_API_KEY"','wire_api = "responses"',...Object.keys(g).length>0?[`env_http_headers = ${_(g)}`]:[]].join(`
7
+ `);if(u&&p&&o.includes(m))return;o=(d.replace(/^model_provider\s*=\s*.*$/m,"").replace(/\n{3,}/g,`
7
8
 
8
- `)+l).replace(/^\n+/,"");let u='model_provider = "evolve-gateway"',g=d?"":["[model_providers.evolve-gateway]",'name = "Evolve Gateway"',`base_url = ${_(e)}`,'env_key = "OPENAI_API_KEY"',`env_http_headers = ${_({[O]:n.sessionTagEnv,[L]:n.runTagEnv})}`].join(`
9
- `),f;if(!o.trim())f=g?`${u}
9
+ `)+i).replace(/\n?\[model_providers\.evolve-gateway\][\s\S]*?(?=\n\[|\s*$)/,"").replace(/^\n+/,"");let h='model_provider = "evolve-gateway"',w=m,y;if(!o.trim())y=w?`${h}
10
10
 
11
- ${g}
12
- `:`${u}
13
- `;else {let m=o.search(/^\[/m);m>0?f=o.slice(0,m)+u+`
11
+ ${w}
12
+ `:`${h}
13
+ `;else {let b=o.search(/^\[/m);b>0?y=o.slice(0,b)+h+`
14
14
 
15
- `+o.slice(m).trimEnd():m===0?f=u+`
15
+ `+o.slice(b).trimEnd():b===0?y=h+`
16
16
 
17
- `+o.trimEnd():f=o.trimEnd()+`
17
+ `+o.trimEnd():y=o.trimEnd()+`
18
18
 
19
- `+u,g&&(f=f.trimEnd()+`
19
+ `+h,w&&(y=y.trimEnd()+`
20
20
 
21
- `+g),f+=`
22
- `;}await t.files.write(s,f);}async function at(t,e,n,r){let s=V(e.configPath),o=s.slice(0,s.lastIndexOf("/"));await t.files.makeDir(o);let c=[`default_model = ${_(e.modelName)}`,`default_thinking = ${_(r.defaultThinking)}`,'default_permission_mode = "auto"',"","[thinking]",`mode = ${_(r.defaultThinking?"on":"off")}`];r.defaultThinking&&r.thinkingEffort&&c.push(`effort = ${_(r.thinkingEffort)}`),c.push("",`[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"])}`);let a=c.join(`
21
+ `+w),y+=`
22
+ `;}await t.files.write(c,y);}async function Ht(t,e,n,r,s){let a=M(e.configPath,s),c=a.slice(0,a.lastIndexOf("/"));await t.files.makeDir(c);let o=[`default_model = ${_(e.modelName)}`,`default_thinking = ${_(r.defaultThinking)}`,'default_permission_mode = "auto"',"","[thinking]",`mode = ${_(r.defaultThinking?"on":"off")}`];r.defaultThinking&&r.thinkingEffort&&o.push(`effort = ${_(r.thinkingEffort)}`),o.push("",`[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"])}`);let l=o.join(`
23
23
  `)+`
24
- `;await t.files.write(s,a);}async function ct(t,e,n,r){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await Se(e,n,r);break;case "codex":await Ae(e,r);break;case "gemini":await ke(e,r);break;case "qwen":await xe(e,r);break;case "kimi":await et(e,r);break;case "opencode":await tt(e,n,r);break;case "droid":await _e(e,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function Me(){let t={};return function(d){let i;try{i=JSON.parse(d);}catch{return null}if(i._meta||i._prompt)return null;let p=i.session_id;switch(i.type){case "system":return null;case "assistant":return e(i.message?.content,"assistant",p);case "user":{let u=i.message?.content;return typeof u=="string"||Array.isArray(u)&&u.length===1&&u[0].type==="text"?null:e(u,"user",p)}case "result":return null;default:return null}};function e(l,d,i){if(typeof l=="string")return d==="user"?null:[{sessionId:i,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}}];if(!l||!Array.isArray(l))return null;let p=[];for(let u of l){let g=null;switch(u.type){case "text":case "text_delta":if(d==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:u.text}};break;case "image":if(d==="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:c(u.input)});else {let f=n(u);g={sessionUpdate:"tool_call",toolCallId:u.id,status:"pending",...f};}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",...r(u,f)};break}}g&&p.push({sessionId:i,update:g});}return p.length>0?p:null}function n(l){let d=l.name,i=l.input||{};switch(d){case "Task":return {title:i.description||"Task",kind:"think",content:i.prompt?[{type:"content",content:{type:"text",text:i.prompt}}]:[],rawInput:i};case "NotebookRead":return {title:i.notebook_path?`Read Notebook ${i.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:i.notebook_path?[{path:i.notebook_path}]:[],rawInput:i};case "NotebookEdit":return {title:i.notebook_path?`Edit Notebook ${i.notebook_path}`:"Edit Notebook",kind:"edit",content:i.new_source?[{type:"content",content:{type:"text",text:i.new_source}}]:[],locations:i.notebook_path?[{path:i.notebook_path}]:[],rawInput:i};case "Bash":return {title:i.command?"`"+i.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:i.description?[{type:"content",content:{type:"text",text:i.description}}]:[],rawInput:i};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:i};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:i};case "Read":{let p="";return i.limit?p=" ("+((i.offset??0)+1)+" - "+((i.offset??0)+i.limit)+")":i.offset&&(p=" (from line "+(i.offset+1)+")"),{title:"Read "+(i.file_path??"File")+p,kind:"read",content:[],locations:i.file_path?[{path:i.file_path,line:i.offset??0}]:[],rawInput:i}}case "LS":return {title:i.path?`List \`${i.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:i};case "Edit":{let p=i.file_path;return {title:p?`Edit \`${p}\``:"Edit",kind:"edit",content:p?[{type:"diff",path:p,oldText:i.old_string??null,newText:i.new_string??""}]:[],locations:p?[{path:p}]:[],rawInput:i}}case "Write":return {title:i.file_path?`Write ${i.file_path}`:"Write",kind:"edit",content:i.file_path?[{type:"diff",path:i.file_path,oldText:null,newText:i.content??""}]:[],locations:i.file_path?[{path:i.file_path}]:[],rawInput:i};case "Glob":{let p="Find";return i.path&&(p+=` \`${i.path}\``),i.pattern&&(p+=` \`${i.pattern}\``),{title:p,kind:"search",content:[],locations:i.path?[{path:i.path}]:[],rawInput:i}}case "Grep":{let p="grep";return i["-i"]&&(p+=" -i"),i["-n"]&&(p+=" -n"),i["-A"]!==void 0&&(p+=` -A ${i["-A"]}`),i["-B"]!==void 0&&(p+=` -B ${i["-B"]}`),i["-C"]!==void 0&&(p+=` -C ${i["-C"]}`),i.output_mode==="files_with_matches"?p+=" -l":i.output_mode==="count"&&(p+=" -c"),i.head_limit!==void 0&&(p+=` | head -${i.head_limit}`),i.glob&&(p+=` --include="${i.glob}"`),i.type&&(p+=` --type=${i.type}`),i.multiline&&(p+=" -P"),p+=` "${i.pattern??""}"`,i.path&&(p+=` ${i.path}`),{title:p,kind:"search",content:[],rawInput:i}}case "WebFetch":return {title:i.url?`Fetch ${i.url}`:"Fetch",kind:"fetch",content:i.prompt?[{type:"content",content:{type:"text",text:i.prompt}}]:[],rawInput:i};case "WebSearch":{let p=`"${i.query??""}"`;return i.allowed_domains?.length>0&&(p+=` (allowed: ${i.allowed_domains.join(", ")})`),i.blocked_domains?.length>0&&(p+=` (blocked: ${i.blocked_domains.join(", ")})`),{title:p,kind:"fetch",content:[],rawInput:i}}case "TodoWrite":return {title:Array.isArray(i.todos)?`Update TODOs: ${i.todos.map(p=>p.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:i};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:i.plan?[{type:"content",content:{type:"text",text:i.plan}}]:[],rawInput:i};default:if(d?.startsWith("mcp__")){let p=d.split("__"),u=p[1]||"mcp",g=p.slice(2).join("__")||d;return {title:`${u}: ${g}`,kind:"other",content:[],rawInput:i}}return {title:d||"Unknown Tool",kind:"other",content:[],rawInput:i}}}function r(l,d){let i=l.content;switch(d?.name){case "Read":return Array.isArray(i)&&i.length>0?{content:i.map(p=>({type:"content",content:p.type==="text"?{type:"text",text:a(p.text)}:o(p,false)}))}:typeof i=="string"&&i.length>0?{content:[{type:"content",content:{type:"text",text:a(i)}}]}:{};case "Edit":case "Write":case "Bash":return s(i,l.is_error||false);case "ExitPlanMode":return {title:"Exited Plan Mode"};default:return s(i,"is_error"in l?l.is_error:false)}}function s(l,d=false){return Array.isArray(l)&&l.length>0?{content:l.map(i=>({type:"content",content:o(i,d)}))}:typeof l=="string"&&l.length>0?{content:[{type:"content",content:{type:"text",text:d?"```\n"+l+"\n```":l}}]}:{}}function o(l,d){if(l.type==="text")return d?{type:"text",text:"```\n"+l.text+"\n```"}:{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 c(l){return l.todos.map(d=>({content:d.content,status:d.status||"pending",priority:"medium"}))}function a(l){let d="```",i=Array.from(l.matchAll(/^```+/gm));for(let[p]of i)for(;p.length>=d.length;)d+="`";return d+`
24
+ `;await t.files.write(a,l);}async function Gt(t,e,n,r,s){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await qe(e,n,r,s);break;case "codex":await tt(e,r,s);break;case "gemini":await Ye(e,r,s);break;case "qwen":await Xe(e,r,s);break;case "kimi":await Jt(e,r,s);break;case "opencode":await Vt(e,n,r);break;case "droid":await Ze(e,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function rt(){let t={};return function(d){let i;try{i=JSON.parse(d);}catch{return null}if(i._meta||i._prompt)return null;let u=i.session_id;switch(i.type){case "system":return null;case "assistant":return e(i.message?.content,"assistant",u);case "user":{let p=i.message?.content;return typeof p=="string"||Array.isArray(p)&&p.length===1&&p[0].type==="text"?null:e(p,"user",u)}case "result":return null;default:return null}};function e(l,d,i){if(typeof l=="string")return d==="user"?null:[{sessionId:i,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}}];if(!l||!Array.isArray(l))return null;let u=[];for(let p of l){let g=null;switch(p.type){case "text":case "text_delta":if(d==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.text}};break;case "image":if(d==="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:c(p.input)});else {let m=n(p);g={sessionUpdate:"tool_call",toolCallId:p.id,status:"pending",...m};}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 m=t[p.tool_use_id];if(!m||(delete t[p.tool_use_id],m.name==="TodoWrite"))break;g={sessionUpdate:"tool_call_update",toolCallId:p.tool_use_id,status:"is_error"in p&&p.is_error?"failed":"completed",...r(p,m)};break}}g&&u.push({sessionId:i,update:g});}return u.length>0?u:null}function n(l){let d=l.name,i=l.input||{};switch(d){case "Task":return {title:i.description||"Task",kind:"think",content:i.prompt?[{type:"content",content:{type:"text",text:i.prompt}}]:[],rawInput:i};case "NotebookRead":return {title:i.notebook_path?`Read Notebook ${i.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:i.notebook_path?[{path:i.notebook_path}]:[],rawInput:i};case "NotebookEdit":return {title:i.notebook_path?`Edit Notebook ${i.notebook_path}`:"Edit Notebook",kind:"edit",content:i.new_source?[{type:"content",content:{type:"text",text:i.new_source}}]:[],locations:i.notebook_path?[{path:i.notebook_path}]:[],rawInput:i};case "Bash":return {title:i.command?"`"+i.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:i.description?[{type:"content",content:{type:"text",text:i.description}}]:[],rawInput:i};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:i};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:i};case "Read":{let u="";return i.limit?u=" ("+((i.offset??0)+1)+" - "+((i.offset??0)+i.limit)+")":i.offset&&(u=" (from line "+(i.offset+1)+")"),{title:"Read "+(i.file_path??"File")+u,kind:"read",content:[],locations:i.file_path?[{path:i.file_path,line:i.offset??0}]:[],rawInput:i}}case "LS":return {title:i.path?`List \`${i.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:i};case "Edit":{let u=i.file_path;return {title:u?`Edit \`${u}\``:"Edit",kind:"edit",content:u?[{type:"diff",path:u,oldText:i.old_string??null,newText:i.new_string??""}]:[],locations:u?[{path:u}]:[],rawInput:i}}case "Write":return {title:i.file_path?`Write ${i.file_path}`:"Write",kind:"edit",content:i.file_path?[{type:"diff",path:i.file_path,oldText:null,newText:i.content??""}]:[],locations:i.file_path?[{path:i.file_path}]:[],rawInput:i};case "Glob":{let u="Find";return i.path&&(u+=` \`${i.path}\``),i.pattern&&(u+=` \`${i.pattern}\``),{title:u,kind:"search",content:[],locations:i.path?[{path:i.path}]:[],rawInput:i}}case "Grep":{let u="grep";return i["-i"]&&(u+=" -i"),i["-n"]&&(u+=" -n"),i["-A"]!==void 0&&(u+=` -A ${i["-A"]}`),i["-B"]!==void 0&&(u+=` -B ${i["-B"]}`),i["-C"]!==void 0&&(u+=` -C ${i["-C"]}`),i.output_mode==="files_with_matches"?u+=" -l":i.output_mode==="count"&&(u+=" -c"),i.head_limit!==void 0&&(u+=` | head -${i.head_limit}`),i.glob&&(u+=` --include="${i.glob}"`),i.type&&(u+=` --type=${i.type}`),i.multiline&&(u+=" -P"),u+=` "${i.pattern??""}"`,i.path&&(u+=` ${i.path}`),{title:u,kind:"search",content:[],rawInput:i}}case "WebFetch":return {title:i.url?`Fetch ${i.url}`:"Fetch",kind:"fetch",content:i.prompt?[{type:"content",content:{type:"text",text:i.prompt}}]:[],rawInput:i};case "WebSearch":{let u=`"${i.query??""}"`;return i.allowed_domains?.length>0&&(u+=` (allowed: ${i.allowed_domains.join(", ")})`),i.blocked_domains?.length>0&&(u+=` (blocked: ${i.blocked_domains.join(", ")})`),{title:u,kind:"fetch",content:[],rawInput:i}}case "TodoWrite":return {title:Array.isArray(i.todos)?`Update TODOs: ${i.todos.map(u=>u.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:i};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:i.plan?[{type:"content",content:{type:"text",text:i.plan}}]:[],rawInput:i};default:if(d?.startsWith("mcp__")){let u=d.split("__"),p=u[1]||"mcp",g=u.slice(2).join("__")||d;return {title:`${p}: ${g}`,kind:"other",content:[],rawInput:i}}return {title:d||"Unknown Tool",kind:"other",content:[],rawInput:i}}}function r(l,d){let i=l.content;switch(d?.name){case "Read":return Array.isArray(i)&&i.length>0?{content:i.map(u=>({type:"content",content:u.type==="text"?{type:"text",text:o(u.text)}:a(u,false)}))}:typeof i=="string"&&i.length>0?{content:[{type:"content",content:{type:"text",text:o(i)}}]}:{};case "Edit":case "Write":case "Bash":return s(i,l.is_error||false);case "ExitPlanMode":return {title:"Exited Plan Mode"};default:return s(i,"is_error"in l?l.is_error:false)}}function s(l,d=false){return Array.isArray(l)&&l.length>0?{content:l.map(i=>({type:"content",content:a(i,d)}))}:typeof l=="string"&&l.length>0?{content:[{type:"content",content:{type:"text",text:d?"```\n"+l+"\n```":l}}]}:{}}function a(l,d){if(l.type==="text")return d?{type:"text",text:"```\n"+l.text+"\n```"}:{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 c(l){return l.todos.map(d=>({content:d.content,status:d.status||"pending",priority:"medium"}))}function o(l){let d="```",i=Array.from(l.matchAll(/^```+/gm));for(let[u]of i)for(;u.length>=d.length;)d+="`";return d+`
25
25
  `+l+(l.endsWith(`
26
26
  `)?"":`
27
- `)+d}}function $e(){return function(l){let d;try{d=JSON.parse(l);}catch{return null}if(d._meta||d._prompt)return null;let i=[];switch(d.type){case "thread.started":case "turn.started":case "turn.completed":return null;case "item.started":{let p=d.item;if(!p)return null;let u=e(p);u&&i.push({update:u});break}case "item.updated":{let p=d.item;if(!p)return null;let u=n(p);u&&i.push({update:u});break}case "item.completed":{let p=d.item;if(!p)return null;let u=r(p);u&&i.push({update:u});break}default:return null}return i.length>0?i:null};function e(a){let l=a.id;switch(a.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${a.server}:${a.tool}`},{sessionUpdate:"tool_call",toolCallId:l,title:`${a.server}: ${a.tool}`,kind:"other",status:"in_progress",rawInput:a.arguments,content:[]};case "command_execution":return {type:"command_execution",name:a.command},{sessionUpdate:"tool_call",toolCallId:l,title:a.command?`\`${a.command}\``:"Execute Command",kind:"execute",status:"in_progress",rawInput:{command:a.command},content:[]};case "web_search":return {type:"web_search",name:a.query},{sessionUpdate:"tool_call",toolCallId:l,title:`Search: ${a.query??""}`,kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:c(a.items)};default:return null}}function n(a){return a.type==="todo_list"?{sessionUpdate:"plan",entries:c(a.items)}:null}function r(a){let l=a.id;switch(a.type){case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:a.text??a.summary?.join(`
28
- `)??a.content?.join(`
29
- `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:a.text??""}};case "mcp_tool_call":{let i=s(a.result),p=a.status==="failed"||a.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:l,status:p,content:i}}case "command_execution":{let i=a.aggregated_output?[{type:"content",content:{type:"text",text:a.aggregated_output}}]:[],p=a.status==="completed"||a.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:l,status:p,content:i}}case "file_change":{let i=a.changes??[],p=i.map(g=>({path:g.path})),u=i.length===1?`${i[0].kind==="add"?"Create":"Edit"} ${i[0].path}`:`Edit ${i.length} files`;return {sessionUpdate:"tool_call",toolCallId:l,title:u,kind:"edit",status:a.status==="completed"?"completed":"failed",content:i.map(g=>({type:"diff",path:g.path,oldText:g.kind==="add"?null:"",newText:""})),locations:p}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:l,title:`Search: ${a.query??""}`,kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:c(a.items)};default:return null}}function s(a){return a?.content?Array.isArray(a.content)?a.content.map(l=>({type:"content",content:o(l)})):typeof a.content=="string"?[{type:"content",content:{type:"text",text:a.content}}]:[]:[]}function o(a){return a.type==="text"?{type:"text",text:a.text??""}:a.type==="image"?{type:"image",data:a.data??"",mimeType:a.mime_type??a.mimeType??"",uri:a.uri}:a}function c(a){if(!Array.isArray(a))return [];let l=false;return a.map(d=>{let i;return d.completed?i="completed":l?i="pending":(i="in_progress",l=true),{content:d.text??"",status:i,priority:"medium"}})}}var Ar={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"},Mr=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 De(){let t=new Map,e,n=false,r="",s;return function(c){let a;try{a=JSON.parse(c);}catch{return null}if(!Yt(a))return null;let l=$r(a);if(l.sessionId&&(e=l.sessionId),l.errorText)return [j(e,l.errorText)];if(l.resultText)return r=l.resultText,n=true,[j(e,l.resultText)];if(l.handled)return null;let i=Dr(a)??a,p=qt(i);p&&(e=p);let u=[],g=x(i,"type");switch(g){case "system":return null;case "message":{let f=x(i,"role"),m=x(i,"text")||dt(i.content);if(!m)break;f==="assistant"&&(n=true,r=m,u.push(j(e,m)));break}case "completion":{let f=x(i,"finalText")||x(i,"result");f&&(!n||f!==r)&&(n=true,r=f,u.push(j(e,f)));break}case "assistant_text_delta":{let f=x(i,"textDelta")||x(i,"text");f&&(n=true,r+=f,u.push(j(e,f)));break}case "thinking_text_delta":{let f=x(i,"textDelta")||x(i,"text");if(f){let m=Jt(i,f,s);m&&(s=m.signature,u.push({sessionId:e,update:m.event}));}break}case "reasoning":{let f=x(i,"text");if(f){let m=Jt(i,f,s);m&&(s=m.signature,u.push({sessionId:e,update:m.event}));}break}case "assistant":{let f=x(i,"text")||dt(R(i.message)?.content);f&&(n=true,r=f,u.push(j(e,f)));break}case "tool_call":case "tool_call_delta":{let f=R(i.toolUse)??R(i.tool_use)??i,m=Ht(f,t);m&&u.push({sessionId:e,update:m});break}case "tool_result":{let f=Ur(i,t);f&&u.push({sessionId:e,update:f});break}case "tool_progress_update":case "tool_progress":{let f=Lr(i);f&&u.push({sessionId:e,update:f});break}case "create_message":{for(let f of Br(i,t)){if(f.sessionUpdate==="agent_message_chunk"){let m=f.content.type==="text"?f.content.text:"";if(n&&m===r)continue;n=true,r=m;}u.push({sessionId:e,update:f});}break}case "result":{let f=oe(i.result??i.text??i.error);f&&(n=true,r=f,u.push(j(e,f)));break}case "error":{let f=oe(i.message??i.error??i);f&&u.push(j(e,f));break}default:if(g&&!Mr.has(g))return null}return u.length>0&&g!=="reasoning"&&g!=="thinking_text_delta"&&(s=void 0),u.length>0?u:null}}function Jt(t,e,n){let r=lt(t,"id")||lt(t,"messageId"),s=lt(t,"blockIndex"),o=`${x(t,"type")}:${r}:${s}:${e}`;return o===n?null:{signature:o,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function $r(t){if(t.type!=="response")return {handled:false};let e=R(t.result),n=R(t.error),r=qt(e??t);if(n)return {handled:true,sessionId:r,errorText:oe(n.message??n)};let s=e?x(e,"finalText")||x(e,"result"):"";return {handled:true,sessionId:r,resultText:s}}function Dr(t){return t.method!=="droid.session_notification"?null:R(R(t.params)?.notification)}function Br(t,e){let n=R(t.message);if(!n)return [];let r=[],s=n.content;if(Array.isArray(s))for(let o of s){let c=R(o);if(c&&c.type==="tool_use"){let a=Ht(c,e);a&&r.push(a);}}if(n.role==="assistant"){let o=dt(s);o&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}});}return r}function Ht(t,e){let n=x(t,"id")||x(t,"toolUseId")||x(t,"tool_use_id"),r=x(t,"name")||x(t,"toolName")||x(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let s=R(t.input)??R(t.toolInput)??R(t.arguments)??{};if(Qt(r)==="todowrite"){let d=Fr(s);if(d)return d}let{title:o,kind:c,content:a,locations:l}=Nr(r,s);return {sessionUpdate:"tool_call",toolCallId:n,title:o,kind:c,status:"pending",rawInput:s,content:a,locations:l}}function Ur(t,e){let n=x(t,"toolUseId")||x(t,"tool_use_id")||x(t,"tool_id");if(!n)return null;let r=x(t,"toolName")||x(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:pt(t.content??t.result??t.error)}}function Lr(t){let e=x(t,"toolUseId")||x(t,"tool_use_id")||x(t,"tool_id");if(!e)return null;let n=R(t.update),r=oe(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?pt(r):void 0}}function Fr(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let s=R(r);if(!s)return [];let o=x(s,"content"),c=Kr(x(s,"status")),a=jr(x(s,"priority"));return o?[{content:o,status:c,priority:a}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function Nr(t,e){let n=Ar[Qt(t)]||"other",r=x(e,"path")||x(e,"filePath")||x(e,"file_path")||x(e,"absolute_path"),s=x(e,"command"),o=x(e,"url"),c=r||s||o;return {title:c?`${t} ${c}`:t,kind:n,content:Object.keys(e).length>0?pt(e):[],locations:r?[{path:r}]:[]}}function qt(t){if(t)return x(t,"session_id")||x(t,"sessionId")}function j(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function dt(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=R(e);return n?x(n,"text")||x(n,"content"):""}).filter(Boolean).join(""):""}function pt(t){let e=oe(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function oe(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function Yt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function R(t){return Yt(t)?t:null}function x(t,e){let n=t[e];return typeof n=="string"?n:""}function lt(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function Qt(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function Kr(t){return t==="in_progress"||t==="completed"?t:"pending"}function jr(t){return t==="high"||t==="low"?t:"medium"}var Vr={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 Be(){return function(c){let a;try{a=JSON.parse(c);}catch{return null}if(a._meta||a._prompt)return null;let l=a.session_id,d=[];switch(a.type){case "init":case "result":return null;case "message":{let i=t(a);i&&d.push({sessionId:l,update:i});break}case "tool_use":{let i=e(a);i&&d.push({sessionId:l,update:i});break}case "tool_result":{let i=n(a);i&&d.push({sessionId:l,update:i});break}case "error":{let i=r(a);i&&d.push({sessionId:l,update:i});break}default:return null}return d.length>0?d:null};function t(o){let c=o.role,a=o.content;return a?c==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}:c==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:a}}:null:null}function e(o){let c=o.tool_id,a=o.tool_name,l=o.parameters||{},{title:d,kind:i,content:p,locations:u}=s(a,l);return {sessionUpdate:"tool_call",toolCallId:c,title:d,kind:i,status:"pending",rawInput:l,content:p,locations:u}}function n(o){let c=o.tool_id,a=o.status,l=o.output,d=o.error,i=[];return l&&typeof l=="string"&&l.length>0&&i.push({type:"content",content:{type:"text",text:a==="error"?`\`\`\`
27
+ `)+d}}function st(){return function(l){let d;try{d=JSON.parse(l);}catch{return null}if(d._meta||d._prompt)return null;let i=[];switch(d.type){case "thread.started":case "turn.started":case "turn.completed":return null;case "error":{let u=typeof d.message=="string"?d.message:JSON.stringify(d);i.push({update:{sessionUpdate:"error",message:u,fatal:false}});break}case "turn.failed":{let u=typeof d.error?.message=="string"?d.error.message:JSON.stringify(d.error??d);i.push({update:{sessionUpdate:"error",message:u,fatal:true}});break}case "item.started":{let u=d.item;if(!u)return null;let p=e(u);p&&i.push({update:p});break}case "item.updated":{let u=d.item;if(!u)return null;let p=n(u);p&&i.push({update:p});break}case "item.completed":{let u=d.item;if(!u)return null;let p=r(u);p&&i.push({update:p});break}default:return null}return i.length>0?i:null};function e(o){let l=o.id;switch(o.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${o.server}:${o.tool}`},{sessionUpdate:"tool_call",toolCallId:l,title:`${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:l,title:o.command?`\`${o.command}\``:"Execute Command",kind:"execute",status:"in_progress",rawInput:{command:o.command},content:[]};case "web_search":return {type:"web_search",name:o.query},{sessionUpdate:"tool_call",toolCallId:l,title:`Search: ${o.query??""}`,kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:c(o.items)};default:return null}}function n(o){return o.type==="todo_list"?{sessionUpdate:"plan",entries:c(o.items)}:null}function r(o){let l=o.id;switch(o.type){case "error":return {sessionUpdate:"error",message:typeof o.message=="string"?o.message:JSON.stringify(o),fatal:false};case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o.text??o.summary?.join(`
28
+ `)??o.content?.join(`
29
+ `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:o.text??""}};case "mcp_tool_call":{let i=s(o.result),u=o.status==="failed"||o.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:l,status:u,content:i}}case "command_execution":{let i=o.aggregated_output?[{type:"content",content:{type:"text",text:o.aggregated_output}}]:[],u=o.status==="completed"||o.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:l,status:u,content:i}}case "file_change":{let i=o.changes??[],u=i.map(g=>({path:g.path})),p=i.length===1?`${i[0].kind==="add"?"Create":"Edit"} ${i[0].path}`:`Edit ${i.length} files`;return {sessionUpdate:"tool_call",toolCallId:l,title:p,kind:"edit",status:o.status==="completed"?"completed":"failed",content:i.map(g=>({type:"diff",path:g.path,oldText:g.kind==="add"?null:"",newText:""})),locations:u}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:l,title:`Search: ${o.query??""}`,kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:c(o.items)};default:return null}}function s(o){return o?.content?Array.isArray(o.content)?o.content.map(l=>({type:"content",content:a(l)})):typeof o.content=="string"?[{type:"content",content:{type:"text",text:o.content}}]:[]:[]}function a(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 c(o){if(!Array.isArray(o))return [];let l=false;return o.map(d=>{let i;return d.completed?i="completed":l?i="pending":(i="in_progress",l=true),{content:d.text??"",status:i,priority:"medium"}})}}var di={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"},ui=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 it(){let t=new Map,e,n=false,r="",s;return function(c){let o;try{o=JSON.parse(c);}catch{return null}if(!zn(o))return null;let l=pi(o);if(l.sessionId&&(e=l.sessionId),l.errorText)return [Y(e,l.errorText)];if(l.resultText)return r=l.resultText,n=true,[Y(e,l.resultText)];if(l.handled)return null;let i=gi(o)??o,u=Gn(i);u&&(e=u);let p=[],g=x(i,"type");switch(g){case "system":return null;case "message":{let m=x(i,"role"),f=x(i,"text")||Wt(i.content);if(!f)break;m==="assistant"&&(n=true,r=f,p.push(Y(e,f)));break}case "completion":{let m=x(i,"finalText")||x(i,"result");m&&(!n||m!==r)&&(n=true,r=m,p.push(Y(e,m)));break}case "assistant_text_delta":{let m=x(i,"textDelta")||x(i,"text");m&&(n=true,r+=m,p.push(Y(e,m)));break}case "thinking_text_delta":{let m=x(i,"textDelta")||x(i,"text");if(m){let f=Vn(i,m,s);f&&(s=f.signature,p.push({sessionId:e,update:f.event}));}break}case "reasoning":{let m=x(i,"text");if(m){let f=Vn(i,m,s);f&&(s=f.signature,p.push({sessionId:e,update:f.event}));}break}case "assistant":{let m=x(i,"text")||Wt(A(i.message)?.content);m&&(n=true,r=m,p.push(Y(e,m)));break}case "tool_call":case "tool_call_delta":{let m=A(i.toolUse)??A(i.tool_use)??i,f=Hn(m,t);f&&p.push({sessionId:e,update:f});break}case "tool_result":{let m=fi(i,t);m&&p.push({sessionId:e,update:m});break}case "tool_progress_update":case "tool_progress":{let m=hi(i);m&&p.push({sessionId:e,update:m});break}case "create_message":{for(let m of mi(i,t)){if(m.sessionUpdate==="agent_message_chunk"){let f=m.content.type==="text"?m.content.text:"";if(n&&f===r)continue;n=true,r=f;}p.push({sessionId:e,update:m});}break}case "result":{let m=Se(i.result??i.text??i.error);m&&(n=true,r=m,p.push(Y(e,m)));break}case "error":{let m=Se(i.message??i.error??i);m&&p.push(Y(e,m));break}default:if(g&&!ui.has(g))return null}return p.length>0&&g!=="reasoning"&&g!=="thinking_text_delta"&&(s=void 0),p.length>0?p:null}}function Vn(t,e,n){let r=zt(t,"id")||zt(t,"messageId"),s=zt(t,"blockIndex"),a=`${x(t,"type")}:${r}:${s}:${e}`;return a===n?null:{signature:a,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function pi(t){if(t.type!=="response")return {handled:false};let e=A(t.result),n=A(t.error),r=Gn(e??t);if(n)return {handled:true,sessionId:r,errorText:Se(n.message??n)};let s=e?x(e,"finalText")||x(e,"result"):"";return {handled:true,sessionId:r,resultText:s}}function gi(t){return t.method!=="droid.session_notification"?null:A(A(t.params)?.notification)}function mi(t,e){let n=A(t.message);if(!n)return [];let r=[],s=n.content;if(Array.isArray(s))for(let a of s){let c=A(a);if(c&&c.type==="tool_use"){let o=Hn(c,e);o&&r.push(o);}}if(n.role==="assistant"){let a=Wt(s);a&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}});}return r}function Hn(t,e){let n=x(t,"id")||x(t,"toolUseId")||x(t,"tool_use_id"),r=x(t,"name")||x(t,"toolName")||x(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let s=A(t.input)??A(t.toolInput)??A(t.arguments)??{};if(Wn(r)==="todowrite"){let d=yi(s);if(d)return d}let{title:a,kind:c,content:o,locations:l}=wi(r,s);return {sessionUpdate:"tool_call",toolCallId:n,title:a,kind:c,status:"pending",rawInput:s,content:o,locations:l}}function fi(t,e){let n=x(t,"toolUseId")||x(t,"tool_use_id")||x(t,"tool_id");if(!n)return null;let r=x(t,"toolName")||x(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:qt(t.content??t.result??t.error)}}function hi(t){let e=x(t,"toolUseId")||x(t,"tool_use_id")||x(t,"tool_id");if(!e)return null;let n=A(t.update),r=Se(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?qt(r):void 0}}function yi(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let s=A(r);if(!s)return [];let a=x(s,"content"),c=bi(x(s,"status")),o=vi(x(s,"priority"));return a?[{content:a,status:c,priority:o}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function wi(t,e){let n=di[Wn(t)]||"other",r=x(e,"path")||x(e,"filePath")||x(e,"file_path")||x(e,"absolute_path"),s=x(e,"command"),a=x(e,"url"),c=r||s||a;return {title:c?`${t} ${c}`:t,kind:n,content:Object.keys(e).length>0?qt(e):[],locations:r?[{path:r}]:[]}}function Gn(t){if(t)return x(t,"session_id")||x(t,"sessionId")}function Y(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function Wt(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=A(e);return n?x(n,"text")||x(n,"content"):""}).filter(Boolean).join(""):""}function qt(t){let e=Se(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function Se(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function zn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function A(t){return zn(t)?t:null}function x(t,e){let n=t[e];return typeof n=="string"?n:""}function zt(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function Wn(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function bi(t){return t==="in_progress"||t==="completed"?t:"pending"}function vi(t){return t==="high"||t==="low"?t:"medium"}var ki={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 ot(){return function(c){let o;try{o=JSON.parse(c);}catch{return null}if(o._meta||o._prompt)return null;let l=o.session_id,d=[];switch(o.type){case "init":case "result":return null;case "message":{let i=t(o);i&&d.push({sessionId:l,update:i});break}case "tool_use":{let i=e(o);i&&d.push({sessionId:l,update:i});break}case "tool_result":{let i=n(o);i&&d.push({sessionId:l,update:i});break}case "error":{let i=r(o);i&&d.push({sessionId:l,update:i});break}default:return null}return d.length>0?d:null};function t(a){let c=a.role,o=a.content;return o?c==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}:c==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:o}}:null:null}function e(a){let c=a.tool_id,o=a.tool_name,l=a.parameters||{},{title:d,kind:i,content:u,locations:p}=s(o,l);return {sessionUpdate:"tool_call",toolCallId:c,title:d,kind:i,status:"pending",rawInput:l,content:u,locations:p}}function n(a){let c=a.tool_id,o=a.status,l=a.output,d=a.error,i=[];return l&&typeof l=="string"&&l.length>0&&i.push({type:"content",content:{type:"text",text:o==="error"?`\`\`\`
30
30
  ${l}
31
31
  \`\`\``:l}}),d?.message&&!l&&i.push({type:"content",content:{type:"text",text:`\`\`\`
32
32
  ${d.message}
33
- \`\`\``}}),{sessionUpdate:"tool_call_update",toolCallId:c,status:a==="success"?"completed":"failed",content:i}}function r(o){let c=o.severity,a=o.message;return a?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`${c==="warning"?"\u26A0\uFE0F Warning":"\u274C Error"}: ${a}`}}:null}function s(o,c){let a=Vr[o]||"other",l=[],d=[],i=o;switch(o){case "read_file":i=`Read ${c.absolute_path||c.file_path||"file"}`,(c.absolute_path||c.file_path)&&d.push({path:c.absolute_path||c.file_path});break;case "write_file":i=`Write ${c.file_path||"file"}`,c.file_path&&(d.push({path:c.file_path}),l.push({type:"diff",path:c.file_path,oldText:null,newText:c.content||""}));break;case "edit_file":i=`Edit ${c.file_path||"file"}`,c.file_path&&d.push({path:c.file_path});break;case "replace":i=`Edit ${c.file_path||"file"}`,c.file_path&&(d.push({path:c.file_path}),(c.old_string!==void 0||c.new_string!==void 0)&&l.push({type:"diff",path:c.file_path,oldText:c.old_string||"",newText:c.new_string||""}));break;case "run_shell_command":case "shell":i=c.command?`\`${c.command}\``:"Run command",c.description&&l.push({type:"content",content:{type:"text",text:c.description}});break;case "brave_web_search":case "web_search":case "google_web_search":i=c.query?`"${c.query}"`:"Web search";break;case "web_fetch":i=c.prompt?`Fetch: ${c.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":i=`Find ${c.pattern||"files"}`,c.dir_path&&d.push({path:c.dir_path});break;case "grep":case "search_file_content":i=`grep "${c.pattern||c.query||""}"`;break;case "list_directory":i=`List ${c.dir_path||c.path||"directory"}`,(c.dir_path||c.path)&&d.push({path:c.dir_path||c.path});break;case "read_many_files":i=`Read ${c.include?.length||"multiple"} files`,Array.isArray(c.include)&&c.include.forEach(p=>d.push({path:p}));break;case "delegate_to_agent":i=c.agent_name?`Agent: ${c.agent_name}`:"Delegate to agent";break;case "write_todos":i="Update todos";break;case "save_memory":i=c.fact?`Remember: "${c.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":i=c.name?`Activate skill: ${c.name}`:"Activate skill";break;default:i=o;}return {title:i,kind:a,content:l,locations:d}}}var Gr={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 Zt(t){return t==="TodoList"||t==="SetTodoList"}function gt(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function en(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",s=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:s}:null}function ft(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=en(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 ut(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=ft(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=ft(t);n&&e.push(n);}return e}function Wr(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&gt(e.content.text))}function zr(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=en(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 Jr(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function Xt(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 s=n.status;return {content:r,status:Jr(s),priority:"medium"}}).filter(n=>n!==null):[]}function mt(){let t=new Set,e=0;function n(a,l){return typeof a=="string"&&a.length>0?a:(e+=1,`kimi_${l.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(l){let d;try{d=JSON.parse(l);}catch{return null}if(!d||typeof d!="object")return null;let i=d.role;return "_meta"in d||"_prompt"in d||i==="meta"?null:i==="assistant"?r(d):i==="tool"?s(d):typeof d.type=="string"&&"payload"in d?o(d):null};function r(a){let l=[],d=a.content,i=a.tool_calls;if(typeof d=="string"&&d.length>0)l.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d}}});else if(Array.isArray(d))for(let p of d){let u=zr(p);u&&l.push(u);}if(Array.isArray(i))for(let p of i){if(!p||typeof p!="object")continue;let u=p.function;if(!u)continue;let g=u.name??"",f=n(p.id,g),m;try{m=u.arguments?JSON.parse(u.arguments):{};}catch{m=u.arguments;}if(Zt(g)){let S=Xt(m);S.length>0&&l.push({update:{sessionUpdate:"plan",entries:S}}),t.add(f);continue}let{title:h,kind:y,toolContent:w,locations:k}=c(g,typeof m=="object"&&m!==null?m:{});l.push({update:{sessionUpdate:"tool_call",toolCallId:f,title:h,kind:y,status:"pending",rawInput:m,content:w,locations:k}});}return l.length>0?l:null}function s(a){let l=a.tool_call_id;if(typeof l!="string"||l.length===0)return null;if(t.has(l))return t.delete(l),null;let d=a.content,i=[],p=false;if(typeof d=="string")p=gt(d),d.length>0&&i.push({type:"content",content:{type:"text",text:d}});else if(Array.isArray(d))for(let u of d){let g=ft(u);g&&(g.type==="content"&&g.content.type==="text"&&gt(g.content.text)&&(p=true),i.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:l,status:p?"failed":"completed",content:i}}]}function o(a){let l=a.type,d=a.payload??{},i=[];switch(l){case "TextPart":{let p=d.text;typeof p=="string"&&p.length>0&&i.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:p}}});break}case "ThinkPart":{let p=d.think;typeof p=="string"&&p.length>0&&i.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:p}}});break}case "ToolCall":{let p=d.function?.name??"",u=n(d.id,p),g=d.function;if(!g)break;let f;try{f=g.arguments?JSON.parse(g.arguments):{};}catch{f=g.arguments;}if(Zt(p)){let k=Xt(f);k.length>0&&i.push({update:{sessionUpdate:"plan",entries:k}}),t.add(u);break}let{title:m,kind:h,toolContent:y,locations:w}=c(p,typeof f=="object"&&f!==null?f:{});i.push({update:{sessionUpdate:"tool_call",toolCallId:u,title:m,kind:h,status:"pending",rawInput:f,content:y,locations:w}});break}case "ToolResult":{let p=d.tool_call_id;if(typeof p!="string"||p.length===0)break;if(t.has(p)){t.delete(p);break}let u=d.return_value??d.content,g=[],f=d.is_error===true;if(u&&typeof u=="object"&&!Array.isArray(u)){let m=u;f=f||m.type==="ToolError"||m.is_error===true,g.push(...ut(m.output)),g.length===0&&typeof m.message=="string"&&m.message.length>0&&g.push({type:"content",content:{type:"text",text:m.message}}),g.length===0&&g.push(...ut(u));}else g.push(...ut(u));f=f||Wr(g),i.push({update:{sessionUpdate:"tool_call_update",toolCallId:p,status:f?"failed":"completed",content:g}});break}default:return null}return i.length>0?i:null}function c(a,l){let d=Gr[a]||"other",i=[],p=[],u=a;switch(a){case "Read":case "ReadFile":{let g=l.path??l.file_path;u=`Read ${g||"file"}`,g&&p.push({path:g});break}case "ReadMediaFile":{let g=l.path??l.file_path;u=`Read media ${g||"file"}`,g&&p.push({path:g});break}case "Write":case "WriteFile":{let g=l.path??l.file_path;u=`Write ${g||"file"}`,g&&(p.push({path:g}),typeof l.content=="string"&&i.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&&p.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&&p.push({path:l.path});break;case "Grep":u=`grep "${l.pattern||""}"`,l.path&&p.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=a;}return {title:u,kind:d,toolContent:i,locations:p}}}var Hr={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 qr(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",s=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:s}:null}function Yr(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 Qr(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function tn(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:Yr(e.status),priority:Qr(e.priority)}}).filter(e=>e!==null):[]}function Zr(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 a=qr(r);return a?{type:"content",content:{type:"image",data:a.data,mimeType:a.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 Xr(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 ei(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function ht(){return function(c){let a;try{a=JSON.parse(c);}catch{return null}if(!a||typeof a!="object")return null;let l=a.sessionID,d=[];switch(a.type){case "step_start":case "step_finish":return null;case "text":{let i=t(a);i&&d.push({sessionId:l,update:i});break}case "reasoning":{let i=e(a);i&&d.push({sessionId:l,update:i});break}case "tool_use":{let i=n(a);for(let p of i)d.push({sessionId:l,update:p});break}case "error":{let i=r(a);i&&d.push({sessionId:l,update:i});break}default:return null}return d.length>0?d:null};function t(o){let c=o.part?.text;return typeof c!="string"||c.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}}function e(o){let c=o.part?.text;return typeof c!="string"||c.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:c}}}function n(o){let c=o.part;if(!c)return [];let a=typeof c.callID=="string"?c.callID:"";if(a.length===0)return [];let l=typeof c.tool=="string"?c.tool.toLowerCase():"",d=typeof c.state=="object"&&c.state?c.state:{},i=typeof d.input=="object"&&d.input?d.input:{},p=d.status,u=d.title??d.metadata?.description??l,g=d.metadata?.exit,{kind:f,content:m,locations:h}=s(l,i),y=[];if(y.push({sessionUpdate:"tool_call",toolCallId:a,title:u,kind:f,status:"pending",rawInput:i,content:m,locations:h}),l==="todowrite"){let b=tn(i.todos);if(b.length===0&&typeof d.output=="string")try{b=tn(JSON.parse(d.output));}catch{}b.length>0&&y.push({sessionUpdate:"plan",entries:b});}let w=ei(p,g);if(w==="pending")return y;let k=Xr(p,d),S=[];if(typeof k=="string"&&k.length>0&&S.push({type:"content",content:{type:"text",text:w==="failed"?`\`\`\`
34
- ${k}
35
- \`\`\``:k}}),Array.isArray(d.attachments))for(let b of d.attachments){let v=Zr(b);v&&S.push(v);}return y.push({sessionUpdate:"tool_call_update",toolCallId:a,status:w,content:S}),y}function r(o){let c=o.error?.name??"Error",a=o.error?.data?.message??o.error?.message??"Unknown error";return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:`\u274C ${c}: ${a}`}}}function s(o,c){let a=Hr[o]||"other",l=[],d=[];switch(o){case "read":{let i=c.filePath??c.path;if(i){let p=c.offset;d.push({path:i,line:typeof p=="number"&&Number.isFinite(p)?Math.max(0,p-1):void 0});}break}case "write":{let i=c.filePath??c.path;i&&(d.push({path:i}),typeof c.content=="string"&&l.push({type:"diff",path:i,oldText:null,newText:c.content}));break}case "edit":case "multiedit":{let i=c.filePath??c.path;i&&(d.push({path:i}),o==="edit"&&(c.oldString!==void 0||c.newString!==void 0)&&l.push({type:"diff",path:i,oldText:c.oldString??"",newText:c.newString??""}));break}case "apply_patch":break;case "bash":{let i=c.command;i&&c.description?l.push({type:"content",content:{type:"text",text:c.description}}):i&&l.push({type:"content",content:{type:"text",text:i}});break}case "glob":case "list":{let i=c.path;i&&d.push({path:i});break}case "grep":{let i=c.path;i&&d.push({path:i});break}case "codesearch":case "websearch":{let i=c.query;i&&l.push({type:"content",content:{type:"text",text:i}});break}case "webfetch":{let i=c.url;i&&l.push({type:"content",content:{type:"text",text:i}});break}case "task":{let i=c.description;i&&l.push({type:"content",content:{type:"text",text:i}});break}}return {kind:a,content:l,locations:d}}}var ti={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 Ue(){let t=new Map,e=new Map;return function(i){let p;try{p=JSON.parse(i);}catch{return null}if(!p||typeof p!="object")return null;let u=p;if("_meta"in u||"_prompt"in u)return null;let g=u.session_id||void 0,f=[];switch(u.type){case "assistant":{let m=n(u);for(let h of m)f.push({sessionId:g,update:h});break}case "stream_event":{let m=r(u);for(let h of m)f.push({sessionId:g,update:h});break}case "user":{let m=s(u);for(let h of m)f.push({sessionId:g,update:h});break}case "system":case "result":return null;default:return null}return f.length>0?f:null};function n(d){let i=[],p=d.message?.content;if(!Array.isArray(p))return i;for(let u of p){let g=o(u);i.push(...g);}return i}function r(d){let i=[],p=d.event;if(!p)return i;switch(p.type){case "content_block_start":{let u=p.index??0,g=p.content_block;g&&(t.set(u,g),g.type==="tool_use"&&e.set(u,""));break}case "content_block_delta":{let u=p.index??0,g=p.delta,f=t.get(u);if(g?.type==="text_delta"&&g.text)i.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:g.text}});else if(g?.type==="thinking_delta"&&g.thinking)i.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:g.thinking}});else if(g?.type==="input_json_delta"&&g.partial_json&&f?.type==="tool_use"){let m=e.get(u)||"";e.set(u,m+g.partial_json);}break}case "content_block_stop":{let u=p.index??0,g=t.get(u);if(g&&!(g.type==="text"&&g.text)){if(!(g.type==="thinking"&&g.thinking)){if(g.type==="tool_use"){let f=g,m=e.get(u)||"";e.delete(u);let h=f.input;if(m)try{h=JSON.parse(m);}catch{}let y={...f,input:h},w=c(y);w&&i.push(w);}else if(g.type==="tool_result"){let f=a(g);f&&i.push(f);}}}t.delete(u);break}}return i}function s(d){let i=d.message?.content,p=[];if(typeof i=="string")return p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:i}}),p;if(Array.isArray(i)){for(let u of i)if(u.type==="text")p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:u.text}});else if(u.type==="tool_result"){let g=a(u);g&&p.push(g);}}return p}function o(d){switch(d.type){case "text":return d.text?[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.text}}]:[];case "thinking":return d.thinking?[{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:d.thinking}}]:[];case "tool_use":{let i=c(d);return i?[i]:[]}case "tool_result":{let i=a(d);return i?[i]:[]}}}function c(d){let i=d.id,p=d.name,u=d.input;if(p==="TodoWrite"&&Array.isArray(u?.todos))return {sessionUpdate:"plan",entries:u.todos.map(y=>({content:y.content,status:y.status||"pending",priority:"medium"}))};let{title:g,kind:f,content:m,locations:h}=l(p,u||{});return {sessionUpdate:"tool_call",toolCallId:i,title:g,kind:f,status:"pending",rawInput:u,content:m,locations:h}}function a(d){let i=d.tool_use_id,p=d.is_error??false,u=d.content,g=[];if(typeof u=="string"&&u.length>0)g.push({type:"content",content:{type:"text",text:p?`\`\`\`
36
- ${u}
37
- \`\`\``:u}});else if(Array.isArray(u)){for(let f of u)if(f.type==="text"){let m=f.text;g.push({type:"content",content:{type:"text",text:p?`\`\`\`
38
- ${m}
39
- \`\`\``:m}});}}return {sessionUpdate:"tool_call_update",toolCallId:i,status:p?"failed":"completed",content:g}}function l(d,i){let p=ti[d]||"other",u=[],g=[],f=d;switch(d){case "Read":case "read_file":f=`Read ${i.file_path||i.absolute_path||"file"}`,(i.file_path||i.absolute_path)&&g.push({path:i.file_path||i.absolute_path});break;case "Write":case "write_file":f=`Write ${i.file_path||"file"}`,i.file_path&&(g.push({path:i.file_path}),u.push({type:"diff",path:i.file_path,oldText:null,newText:i.content||""}));break;case "Edit":case "edit_file":f=`Edit ${i.file_path||"file"}`,i.file_path&&g.push({path:i.file_path});break;case "Bash":case "shell":case "run_shell_command":f=i.command?`\`${i.command}\``:"Run command",i.description&&u.push({type:"content",content:{type:"text",text:i.description}});break;case "WebFetch":f=i.url?`Fetch ${i.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":f=i.query?`"${i.query}"`:"Web search";break;case "Glob":f=`Find ${i.pattern||"files"}`,i.path&&g.push({path:i.path});break;case "Grep":f=`grep "${i.pattern||""}"`;break;case "LS":case "list_directory":f=`List ${i.path||"directory"}`,i.path&&g.push({path:i.path});break;case "Task":f=i.description||"Subagent task";break;case "TodoWrite":f="Update todos";break;case "ExitPlanMode":f="Exit plan mode";break;default:f=d;}return {title:f,kind:p,content:u,locations:g}}}function nn(t){return Ue()(t)}function z(t){switch(t){case "claude":return Me();case "codex":return $e();case "gemini":return Be();case "qwen":return Ue();case "kimi":return mt();case "opencode":return ht();case "droid":return De();default:return ()=>null}}function ni(t,e){let n=e.trim();return n?z(t)(n):null}function ri(t,e){let n=[],r=e.split(`
40
- `),s=z(t);for(let o of r){let c=o.trim();if(!c)continue;let a=s(c);a&&n.push(...a);}return n}function M(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function q(t){return JSON.stringify(ii__default.default(t,{target:"jsonSchema7"}),null,2)}function Y(t){return JSON.stringify(t,null,2)}function rn(t,e=false){let n={};function r(s,o){for(let c of $__namespace.readdirSync(s)){let a=ae__namespace.join(s,c),l=o?`${o}/${c}`:c;$__namespace.statSync(a).isDirectory()?e&&r(a,l):n[l]=$__namespace.readFileSync(a);}}return r(t,""),n}function sn(t,e){for(let[n,r]of Object.entries(e)){let s=ae__namespace.join(t,n),o=ae__namespace.dirname(s);$__namespace.mkdirSync(o,{recursive:true});let c;r instanceof ArrayBuffer||r instanceof Uint8Array?c=Buffer.from(r):c=r,$__namespace.writeFileSync(s,c);}}function si(t){let e=t.replace(/^~/,process.env.HOME||"");if(!$__namespace.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return $__namespace.readFileSync(e,"utf-8")}function Fe(t){let e=t?.type??Kt,n=D(e);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}}if(t?.providerApiKey){let c=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,a=t.providerBaseUrl??c??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:a,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort};let r=process.env[I];if(r)return {type:e,apiKey:r,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort};if(n.providerEnvMap){let a=(t?.model??n.defaultModel)?.split("/")[0],l=a?n.providerEnvMap[a]:void 0,d=l?process.env[l.keyEnv]:void 0;if(d){let p=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:d,baseUrl:p,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort}}}let s=process.env[n.apiKeyEnv];if(s){let a=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:s,baseUrl:a,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort}}if(n.oauthEnv){let c=process.env[n.oauthEnv];if(c){if(n.oauthFileName){let a=si(c);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:a,model:t?.model,reasoningEffort:t?.reasoningEffort}}return {type:e,apiKey:c,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort}}}let o=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)${o}, or ${I} / ${n.apiKeyEnv} env var.`)}function oi(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}async function yt(){let t=process.env[Ie];if(t)try{let{createE2BProvider:o}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===nt()&&delete process.env.E2B_API_URL,o({apiKey:t})}catch(o){let c=o;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${Ie} is set but @evolvingmachines/e2b failed to load.
41
- Try reinstalling: npm install @evolvingmachines/sdk`):c}let e=process.env[Re];if(e)try{let{createDaytonaProvider:o}=await import('@evolvingmachines/daytona');return o({apiKey:e})}catch(o){let c=o;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${Re} is set but @evolvingmachines/daytona failed to load.
42
- Try installing: npm install @evolvingmachines/daytona`):c}let n=process.env[Pe],r=process.env[rt];if(n&&r)try{let{createModalProvider:o}=await import('@evolvingmachines/modal');return o({tokenId:n,tokenSecret:r})}catch(o){let c=o;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${Pe} is set but @evolvingmachines/modal failed to load.
43
- Try installing: npm install @evolvingmachines/modal`):c}let s=process.env[I];if(s)try{let{createE2BProvider:o}=await import('@evolvingmachines/e2b');return o({apiKey:oi(s),apiUrl:nt()})}catch(o){let c=o;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${I} is set but @evolvingmachines/e2b failed to load.
44
- Try reinstalling: npm install @evolvingmachines/sdk`):c}throw new Error(`No sandbox provider configured. Either:
45
- 1. Set ${I} environment variable (recommended, get key at https://dashboard.evolvingmachines.ai)
46
- 2. Set ${Ie} environment variable (direct E2B access, get key at https://e2b.dev)
47
- 3. Set ${Re} environment variable (direct Daytona access, get key at https://app.daytona.io)
48
- 4. Set ${Pe} and ${rt} environment variables (direct Modal access, get tokens at https://modal.com/settings/tokens)
49
- 5. Pass sandbox explicitly: .withSandbox(provider)`)}function ai(t){return new Promise(e=>setTimeout(e,t))}async function P(t,e,n=0){let r=ci(e),s=e?.onItemRetry,o=null,c=0,a=r.backoffMs;for(;c<r.maxAttempts;){if(c++,o=await t(c),!r.retryOn(o))return o;if(c>=r.maxAttempts)break;if(s){let l=o.error??"Unknown error";s(n,c,l);}await ai(a),a*=r.backoffMultiplier;}return o}function ci(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var on=`## FILESYSTEM INSTRUCTIONS:
33
+ \`\`\``}}),{sessionUpdate:"tool_call_update",toolCallId:c,status:o==="success"?"completed":"failed",content:i}}function r(a){let c=a.severity,o=a.message;return o?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`${c==="warning"?"\u26A0\uFE0F Warning":"\u274C Error"}: ${o}`}}:null}function s(a,c){let o=ki[a]||"other",l=[],d=[],i=a;switch(a){case "read_file":i=`Read ${c.absolute_path||c.file_path||"file"}`,(c.absolute_path||c.file_path)&&d.push({path:c.absolute_path||c.file_path});break;case "write_file":i=`Write ${c.file_path||"file"}`,c.file_path&&(d.push({path:c.file_path}),l.push({type:"diff",path:c.file_path,oldText:null,newText:c.content||""}));break;case "edit_file":i=`Edit ${c.file_path||"file"}`,c.file_path&&d.push({path:c.file_path});break;case "replace":i=`Edit ${c.file_path||"file"}`,c.file_path&&(d.push({path:c.file_path}),(c.old_string!==void 0||c.new_string!==void 0)&&l.push({type:"diff",path:c.file_path,oldText:c.old_string||"",newText:c.new_string||""}));break;case "run_shell_command":case "shell":i=c.command?`\`${c.command}\``:"Run command",c.description&&l.push({type:"content",content:{type:"text",text:c.description}});break;case "brave_web_search":case "web_search":case "google_web_search":i=c.query?`"${c.query}"`:"Web search";break;case "web_fetch":i=c.prompt?`Fetch: ${c.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":i=`Find ${c.pattern||"files"}`,c.dir_path&&d.push({path:c.dir_path});break;case "grep":case "search_file_content":i=`grep "${c.pattern||c.query||""}"`;break;case "list_directory":i=`List ${c.dir_path||c.path||"directory"}`,(c.dir_path||c.path)&&d.push({path:c.dir_path||c.path});break;case "read_many_files":i=`Read ${c.include?.length||"multiple"} files`,Array.isArray(c.include)&&c.include.forEach(u=>d.push({path:u}));break;case "delegate_to_agent":i=c.agent_name?`Agent: ${c.agent_name}`:"Delegate to agent";break;case "write_todos":i="Update todos";break;case "save_memory":i=c.fact?`Remember: "${c.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":i=c.name?`Activate skill: ${c.name}`:"Activate skill";break;default:i=a;}return {title:i,kind:o,content:l,locations:d}}}var Si={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 qn(t){return t==="TodoList"||t==="SetTodoList"}function Xt(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function Xn(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",s=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:s}:null}function Qt(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=Xn(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 Yt(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=Qt(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=Qt(t);n&&e.push(n);}return e}function xi(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&Xt(e.content.text))}function Ci(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=Xn(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 Ei(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function Yn(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 s=n.status;return {content:r,status:Ei(s),priority:"medium"}}).filter(n=>n!==null):[]}function Zt(){let t=new Set,e=0;function n(o,l){return typeof o=="string"&&o.length>0?o:(e+=1,`kimi_${l.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(l){let d;try{d=JSON.parse(l);}catch{return null}if(!d||typeof d!="object")return null;let i=d.role;return "_meta"in d||"_prompt"in d||i==="meta"?null:i==="assistant"?r(d):i==="tool"?s(d):typeof d.type=="string"&&"payload"in d?a(d):null};function r(o){let l=[],d=o.content,i=o.tool_calls;if(typeof d=="string"&&d.length>0)l.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d}}});else if(Array.isArray(d))for(let u of d){let p=Ci(u);p&&l.push(p);}if(Array.isArray(i))for(let u of i){if(!u||typeof u!="object")continue;let p=u.function;if(!p)continue;let g=p.name??"",m=n(u.id,g),f;try{f=p.arguments?JSON.parse(p.arguments):{};}catch{f=p.arguments;}if(qn(g)){let S=Yn(f);S.length>0&&l.push({update:{sessionUpdate:"plan",entries:S}}),t.add(m);continue}let{title:h,kind:w,toolContent:y,locations:b}=c(g,typeof f=="object"&&f!==null?f:{});l.push({update:{sessionUpdate:"tool_call",toolCallId:m,title:h,kind:w,status:"pending",rawInput:f,content:y,locations:b}});}return l.length>0?l:null}function s(o){let l=o.tool_call_id;if(typeof l!="string"||l.length===0)return null;if(t.has(l))return t.delete(l),null;let d=o.content,i=[],u=false;if(typeof d=="string")u=Xt(d),d.length>0&&i.push({type:"content",content:{type:"text",text:d}});else if(Array.isArray(d))for(let p of d){let g=Qt(p);g&&(g.type==="content"&&g.content.type==="text"&&Xt(g.content.text)&&(u=true),i.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:l,status:u?"failed":"completed",content:i}}]}function a(o){let l=o.type,d=o.payload??{},i=[];switch(l){case "TextPart":{let u=d.text;typeof u=="string"&&u.length>0&&i.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:u}}});break}case "ThinkPart":{let u=d.think;typeof u=="string"&&u.length>0&&i.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:u}}});break}case "ToolCall":{let u=d.function?.name??"",p=n(d.id,u),g=d.function;if(!g)break;let m;try{m=g.arguments?JSON.parse(g.arguments):{};}catch{m=g.arguments;}if(qn(u)){let b=Yn(m);b.length>0&&i.push({update:{sessionUpdate:"plan",entries:b}}),t.add(p);break}let{title:f,kind:h,toolContent:w,locations:y}=c(u,typeof m=="object"&&m!==null?m:{});i.push({update:{sessionUpdate:"tool_call",toolCallId:p,title:f,kind:h,status:"pending",rawInput:m,content:w,locations:y}});break}case "ToolResult":{let u=d.tool_call_id;if(typeof u!="string"||u.length===0)break;if(t.has(u)){t.delete(u);break}let p=d.return_value??d.content,g=[],m=d.is_error===true;if(p&&typeof p=="object"&&!Array.isArray(p)){let f=p;m=m||f.type==="ToolError"||f.is_error===true,g.push(...Yt(f.output)),g.length===0&&typeof f.message=="string"&&f.message.length>0&&g.push({type:"content",content:{type:"text",text:f.message}}),g.length===0&&g.push(...Yt(p));}else g.push(...Yt(p));m=m||xi(g),i.push({update:{sessionUpdate:"tool_call_update",toolCallId:u,status:m?"failed":"completed",content:g}});break}default:return null}return i.length>0?i:null}function c(o,l){let d=Si[o]||"other",i=[],u=[],p=o;switch(o){case "Read":case "ReadFile":{let g=l.path??l.file_path;p=`Read ${g||"file"}`,g&&u.push({path:g});break}case "ReadMediaFile":{let g=l.path??l.file_path;p=`Read media ${g||"file"}`,g&&u.push({path:g});break}case "Write":case "WriteFile":{let g=l.path??l.file_path;p=`Write ${g||"file"}`,g&&(u.push({path:g}),typeof l.content=="string"&&i.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&&u.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&&u.push({path:l.path});break;case "Grep":p=`grep "${l.pattern||""}"`,l.path&&u.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=o;}return {title:p,kind:d,toolContent:i,locations:u}}}var Ri={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 _i(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",s=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:s}:null}function Ti(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 Pi(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function Qn(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:Ti(e.status),priority:Pi(e.priority)}}).filter(e=>e!==null):[]}function Ii(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 o=_i(r);return o?{type:"content",content:{type:"image",data:o.data,mimeType:o.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 Ai(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 Oi(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function en(){return function(c){let o;try{o=JSON.parse(c);}catch{return null}if(!o||typeof o!="object")return null;let l=o.sessionID,d=[];switch(o.type){case "step_start":case "step_finish":return null;case "text":{let i=t(o);i&&d.push({sessionId:l,update:i});break}case "reasoning":{let i=e(o);i&&d.push({sessionId:l,update:i});break}case "tool_use":{let i=n(o);for(let u of i)d.push({sessionId:l,update:u});break}case "error":{let i=r(o);i&&d.push({sessionId:l,update:i});break}default:return null}return d.length>0?d:null};function t(a){let c=a.part?.text;return typeof c!="string"||c.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}}function e(a){let c=a.part?.text;return typeof c!="string"||c.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:c}}}function n(a){let c=a.part;if(!c)return [];let o=typeof c.callID=="string"?c.callID:"";if(o.length===0)return [];let l=typeof c.tool=="string"?c.tool.toLowerCase():"",d=typeof c.state=="object"&&c.state?c.state:{},i=typeof d.input=="object"&&d.input?d.input:{},u=d.status,p=d.title??d.metadata?.description??l,g=d.metadata?.exit,{kind:m,content:f,locations:h}=s(l,i),w=[];if(w.push({sessionUpdate:"tool_call",toolCallId:o,title:p,kind:m,status:"pending",rawInput:i,content:f,locations:h}),l==="todowrite"){let v=Qn(i.todos);if(v.length===0&&typeof d.output=="string")try{v=Qn(JSON.parse(d.output));}catch{}v.length>0&&w.push({sessionUpdate:"plan",entries:v});}let y=Oi(u,g);if(y==="pending")return w;let b=Ai(u,d),S=[];if(typeof b=="string"&&b.length>0&&S.push({type:"content",content:{type:"text",text:y==="failed"?`\`\`\`
34
+ ${b}
35
+ \`\`\``:b}}),Array.isArray(d.attachments))for(let v of d.attachments){let k=Ii(v);k&&S.push(k);}return w.push({sessionUpdate:"tool_call_update",toolCallId:o,status:y,content:S}),w}function r(a){let c=a.error?.name??"Error",o=a.error?.data?.message??a.error?.message??"Unknown error";return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:`\u274C ${c}: ${o}`}}}function s(a,c){let o=Ri[a]||"other",l=[],d=[];switch(a){case "read":{let i=c.filePath??c.path;if(i){let u=c.offset;d.push({path:i,line:typeof u=="number"&&Number.isFinite(u)?Math.max(0,u-1):void 0});}break}case "write":{let i=c.filePath??c.path;i&&(d.push({path:i}),typeof c.content=="string"&&l.push({type:"diff",path:i,oldText:null,newText:c.content}));break}case "edit":case "multiedit":{let i=c.filePath??c.path;i&&(d.push({path:i}),a==="edit"&&(c.oldString!==void 0||c.newString!==void 0)&&l.push({type:"diff",path:i,oldText:c.oldString??"",newText:c.newString??""}));break}case "apply_patch":break;case "bash":{let i=c.command;i&&c.description?l.push({type:"content",content:{type:"text",text:c.description}}):i&&l.push({type:"content",content:{type:"text",text:i}});break}case "glob":case "list":{let i=c.path;i&&d.push({path:i});break}case "grep":{let i=c.path;i&&d.push({path:i});break}case "codesearch":case "websearch":{let i=c.query;i&&l.push({type:"content",content:{type:"text",text:i}});break}case "webfetch":{let i=c.url;i&&l.push({type:"content",content:{type:"text",text:i}});break}case "task":{let i=c.description;i&&l.push({type:"content",content:{type:"text",text:i}});break}}return {kind:o,content:l,locations:d}}}var Mi={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 at(){let t=new Map,e=new Map;return function(i){let u;try{u=JSON.parse(i);}catch{return null}if(!u||typeof u!="object")return null;let p=u;if("_meta"in p||"_prompt"in p)return null;let g=p.session_id||void 0,m=[];switch(p.type){case "assistant":{let f=n(p);for(let h of f)m.push({sessionId:g,update:h});break}case "stream_event":{let f=r(p);for(let h of f)m.push({sessionId:g,update:h});break}case "user":{let f=s(p);for(let h of f)m.push({sessionId:g,update:h});break}case "system":case "result":return null;default:return null}return m.length>0?m:null};function n(d){let i=[],u=d.message?.content;if(!Array.isArray(u))return i;for(let p of u){let g=a(p);i.push(...g);}return i}function r(d){let i=[],u=d.event;if(!u)return i;switch(u.type){case "content_block_start":{let p=u.index??0,g=u.content_block;g&&(t.set(p,g),g.type==="tool_use"&&e.set(p,""));break}case "content_block_delta":{let p=u.index??0,g=u.delta,m=t.get(p);if(g?.type==="text_delta"&&g.text)i.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:g.text}});else if(g?.type==="thinking_delta"&&g.thinking)i.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:g.thinking}});else if(g?.type==="input_json_delta"&&g.partial_json&&m?.type==="tool_use"){let f=e.get(p)||"";e.set(p,f+g.partial_json);}break}case "content_block_stop":{let p=u.index??0,g=t.get(p);if(g&&!(g.type==="text"&&g.text)){if(!(g.type==="thinking"&&g.thinking)){if(g.type==="tool_use"){let m=g,f=e.get(p)||"";e.delete(p);let h=m.input;if(f)try{h=JSON.parse(f);}catch{}let w={...m,input:h},y=c(w);y&&i.push(y);}else if(g.type==="tool_result"){let m=o(g);m&&i.push(m);}}}t.delete(p);break}}return i}function s(d){let i=d.message?.content,u=[];if(typeof i=="string")return u.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:i}}),u;if(Array.isArray(i)){for(let p of i)if(p.type==="text")u.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:p.text}});else if(p.type==="tool_result"){let g=o(p);g&&u.push(g);}}return u}function a(d){switch(d.type){case "text":return d.text?[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.text}}]:[];case "thinking":return d.thinking?[{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:d.thinking}}]:[];case "tool_use":{let i=c(d);return i?[i]:[]}case "tool_result":{let i=o(d);return i?[i]:[]}}}function c(d){let i=d.id,u=d.name,p=d.input;if(u==="TodoWrite"&&Array.isArray(p?.todos))return {sessionUpdate:"plan",entries:p.todos.map(w=>({content:w.content,status:w.status||"pending",priority:"medium"}))};let{title:g,kind:m,content:f,locations:h}=l(u,p||{});return {sessionUpdate:"tool_call",toolCallId:i,title:g,kind:m,status:"pending",rawInput:p,content:f,locations:h}}function o(d){let i=d.tool_use_id,u=d.is_error??false,p=d.content,g=[];if(typeof p=="string"&&p.length>0)g.push({type:"content",content:{type:"text",text:u?`\`\`\`
36
+ ${p}
37
+ \`\`\``:p}});else if(Array.isArray(p)){for(let m of p)if(m.type==="text"){let f=m.text;g.push({type:"content",content:{type:"text",text:u?`\`\`\`
38
+ ${f}
39
+ \`\`\``:f}});}}return {sessionUpdate:"tool_call_update",toolCallId:i,status:u?"failed":"completed",content:g}}function l(d,i){let u=Mi[d]||"other",p=[],g=[],m=d;switch(d){case "Read":case "read_file":m=`Read ${i.file_path||i.absolute_path||"file"}`,(i.file_path||i.absolute_path)&&g.push({path:i.file_path||i.absolute_path});break;case "Write":case "write_file":m=`Write ${i.file_path||"file"}`,i.file_path&&(g.push({path:i.file_path}),p.push({type:"diff",path:i.file_path,oldText:null,newText:i.content||""}));break;case "Edit":case "edit_file":m=`Edit ${i.file_path||"file"}`,i.file_path&&g.push({path:i.file_path});break;case "Bash":case "shell":case "run_shell_command":m=i.command?`\`${i.command}\``:"Run command",i.description&&p.push({type:"content",content:{type:"text",text:i.description}});break;case "WebFetch":m=i.url?`Fetch ${i.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":m=i.query?`"${i.query}"`:"Web search";break;case "Glob":m=`Find ${i.pattern||"files"}`,i.path&&g.push({path:i.path});break;case "Grep":m=`grep "${i.pattern||""}"`;break;case "LS":case "list_directory":m=`List ${i.path||"directory"}`,i.path&&g.push({path:i.path});break;case "Task":m=i.description||"Subagent task";break;case "TodoWrite":m="Update todos";break;case "ExitPlanMode":m="Exit plan mode";break;default:m=d;}return {title:m,kind:u,content:p,locations:g}}}function Zn(t){return at()(t)}function er(t){return !!t&&t.sessionUpdate!=="error"}function ee(t){switch(t){case "claude":return rt();case "codex":return st();case "gemini":return ot();case "qwen":return at();case "kimi":return Zt();case "opencode":return en();case "droid":return it();default:return ()=>null}}function Di(t,e){let n=e.trim();return n?ee(t)(n):null}function Ui(t,e){let n=[],r=e.split(`
40
+ `),s=ee(t);for(let a of r){let c=a.trim();if(!c)continue;let o=s(c);o&&n.push(...o);}return n}function j(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function se(t){return JSON.stringify(Bi__default.default(t,{target:"jsonSchema7"}),null,2)}function ie(t){return JSON.stringify(t,null,2)}function tr(t,e=false){let n={};function r(s,a){for(let c of J__namespace.readdirSync(s)){let o=xe__namespace.join(s,c),l=a?`${a}/${c}`:c;J__namespace.statSync(o).isDirectory()?e&&r(o,l):n[l]=J__namespace.readFileSync(o);}}return r(t,""),n}function nr(t,e){for(let[n,r]of Object.entries(e)){let s=xe__namespace.join(t,n),a=xe__namespace.dirname(s);J__namespace.mkdirSync(a,{recursive:true});let c;r instanceof ArrayBuffer||r instanceof Uint8Array?c=Buffer.from(r):c=r,J__namespace.writeFileSync(s,c);}}function lt(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 $i(t){let e=t.replace(/^~/,process.env.HOME||"");if(!J__namespace.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return J__namespace.readFileSync(e,"utf-8")}function dt(t){let e=t?.type??Ln,n=$(e);if(t?.externalGateway){lt(t);let{apiKey:c,baseUrl:o,revoke:l}=t.externalGateway;if(!c||!o||typeof l!="function")throw new Error("externalGateway requires apiKey, baseUrl, and a revoke() function");return {type:e,apiKey:c,baseUrl:o,isDirectMode:true,externalGateway:{revoke:l},model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize}}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}}if(t?.providerApiKey){let c=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,o=t.providerBaseUrl??c??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:o,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize};let r=process.env[P];if(r)return {type:e,apiKey:r,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize};if(n.providerEnvMap){let o=(t?.model??n.defaultModel)?.split("/")[0],l=o?n.providerEnvMap[o]:void 0,d=l?process.env[l.keyEnv]:void 0;if(d){let u=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:d,baseUrl:u,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize}}}let s=process.env[n.apiKeyEnv];if(s){let o=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:s,baseUrl:o,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize}}if(n.oauthEnv){let c=process.env[n.oauthEnv];if(c){if(n.oauthFileName){let o=$i(c);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:o,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize}}return {type:e,apiKey:c,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize}}}let a=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)${a}, or ${P} / ${n.apiKeyEnv} env var.`)}function Li(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}var or=new WeakSet;function rr(t){return or.add(t),t}function Ce(t){return or.has(t)}function sr(t,e){return new Error(`${P} is set but ${t} failed to load.
41
+ Try installing: ${e}`)}function ir(t){return t.message?.includes("Cannot find module")||t.message?.includes("MODULE_NOT_FOUND")}async function Ee(t,e="e2b"){let n=t||process.env[P];if(!n)throw new Error(`${P} is required for Evolve-managed sandbox features`);if(!Je.includes(e))throw new Error(`Unknown managed sandbox provider "${e}". Supported: ${Je.join(", ")}`);if(e==="daytona")try{let{createDaytonaProvider:r}=await import('@evolvingmachines/daytona');return rr(r({apiKey:n,apiUrl:Ve("daytona"),managedToolboxUrl:Bn()}))}catch(r){let s=r;throw ir(s)?sr("@evolvingmachines/daytona","npm install @evolvingmachines/daytona"):s}if(e==="modal")throw new Error('Managed Modal sandboxes are not available yet: the managed Modal API serves create/list/get/kill/exec and has no filesystem operations, which an agent session requires. Use managedSandbox("e2b") or managedSandbox("daytona"), or pass Modal tokens for direct mode.');try{let{createE2BProvider:r}=await import('@evolvingmachines/e2b');return rr(r({apiKey:Li(n),apiUrl:Dt()}))}catch(r){let s=r;throw ir(s)?sr("@evolvingmachines/e2b","npm install @evolvingmachines/sdk"):s}}function Ni(t="e2b",e){return Ee(e,t)}async function tn(){let t=process.env[He];if(t)try{let{createE2BProvider:a}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===Dt()&&delete process.env.E2B_API_URL,a({apiKey:t})}catch(a){let c=a;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${He} is set but @evolvingmachines/e2b failed to load.
42
+ Try reinstalling: npm install @evolvingmachines/sdk`):c}let e=process.env[Ge];if(e)try{let{createDaytonaProvider:a}=await import('@evolvingmachines/daytona');return a({apiKey:e})}catch(a){let c=a;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${Ge} is set but @evolvingmachines/daytona failed to load.
43
+ Try installing: npm install @evolvingmachines/daytona`):c}let n=process.env[ze],r=process.env[Ut];if(n&&r)try{let{createModalProvider:a}=await import('@evolvingmachines/modal');return a({tokenId:n,tokenSecret:r})}catch(a){let c=a;throw c.message?.includes("Cannot find module")||c.message?.includes("MODULE_NOT_FOUND")?new Error(`${ze} is set but @evolvingmachines/modal failed to load.
44
+ Try installing: npm install @evolvingmachines/modal`):c}let s=process.env[P];if(s)return Ee(s);throw new Error(`No sandbox provider configured. Either:
45
+ 1. Set ${P} environment variable (recommended, get key at https://dashboard.evolvingmachines.ai)
46
+ 2. Set ${He} environment variable (direct E2B access, get key at https://e2b.dev)
47
+ 3. Set ${Ge} environment variable (direct Daytona access, get key at https://app.daytona.io)
48
+ 4. Set ${ze} and ${Ut} environment variables (direct Modal access, get tokens at https://modal.com/settings/tokens)
49
+ 5. Pass sandbox explicitly: .withSandbox(provider)`)}function Fi(t){return new Promise(e=>setTimeout(e,t))}async function D(t,e,n=0){let r=Ki(e),s=e?.onItemRetry,a=null,c=0,o=r.backoffMs;for(;c<r.maxAttempts;){if(c++,a=await t(c),!r.retryOn(a))return a;if(c>=r.maxAttempts)break;if(s){let l=a.error??"Unknown error";s(n,c,l);}await Fi(o),o*=r.backoffMultiplier;}return a}function Ki(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var ar=`## FILESYSTEM INSTRUCTIONS:
50
50
 
51
51
  You are running in a sandbox environment.
52
52
 
@@ -79,7 +79,7 @@ Examples:
79
79
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
80
80
  - "Write a Python script" \u2192 \`output/parser.py\`
81
81
  - "Convert this to JSON" \u2192 \`output/data.json\`
82
- `;var an=`## FILESYSTEM INSTRUCTIONS:
82
+ `;var cr=`## FILESYSTEM INSTRUCTIONS:
83
83
 
84
84
  You are running in a sandbox environment.
85
85
 
@@ -113,9 +113,9 @@ Examples:
113
113
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
114
114
  - "Write a Python script" \u2192 \`output/parser.py\`
115
115
  - "Convert this to JSON" \u2192 \`output/data.json\`
116
- `;var cn=`## SYSTEM PROMPT
116
+ `;var lr=`## SYSTEM PROMPT
117
117
 
118
- {{systemPrompt}}`;var ln=`## STRUCTURED OUTPUT
118
+ {{systemPrompt}}`;var dr=`## STRUCTURED OUTPUT
119
119
 
120
120
  Your final result MUST be saved to \`output/result.json\` following this schema:
121
121
 
@@ -133,13 +133,13 @@ You are free to:
133
133
  But your final \`output/result.json\` MUST conform to the schema above.
134
134
 
135
135
  ### OUTPUT RESULTS (DELIVERABLES) MUST BE WRITTEN to \`output/result.json\` as files.
136
- ### Never just state results as text.`;var dn=`## BROWSER AUTOMATION
136
+ ### Never just state results as text.`;var ur=`## BROWSER AUTOMATION
137
137
 
138
138
  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.
139
- `;var pn=`## Browser Automation
139
+ `;var pr=`## Browser Automation
140
140
 
141
141
  The agent-browser CDP connection is already configured. Use normal \`agent-browser\` commands when browser automation is needed.
142
- `;var un=`### 1. YOUR ROLE: BEST OF N JUDGE
142
+ `;var gr=`### 1. YOUR ROLE: BEST OF N JUDGE
143
143
 
144
144
  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.
145
145
 
@@ -169,7 +169,7 @@ You must judge their work based on:
169
169
  5. Pick the best candidate (0-indexed)
170
170
 
171
171
  **IMPORTANT:** Be thorough. Do not skip steps. Your judgment must be evidence-based \u2014 cite specific files, outputs, or discrepancies to justify your decision.
172
- `;var gn=`### 1. YOUR ROLE: OUTPUT VERIFIER
172
+ `;var mr=`### 1. YOUR ROLE: OUTPUT VERIFIER
173
173
 
174
174
  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.
175
175
 
@@ -202,14 +202,14 @@ The output must satisfy:
202
202
  **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.
203
203
 
204
204
  If failing, provide specific, actionable feedback explaining what needs to be fixed.
205
- `;var fn=`### CONTEXT STRUCTURE
205
+ `;var fr=`### CONTEXT STRUCTURE
206
206
 
207
207
  \`\`\`
208
208
  {{fileTree}}
209
209
  \`\`\`
210
210
 
211
211
  Examine all files within each item folder before producing your output.
212
- `;var mn="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var hn="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var yn=`{{originalPrompt}}
212
+ `;var hr="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var yr="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var wr=`{{originalPrompt}}
213
213
 
214
214
  ## IMPORTANT: Previous Attempt Failed Verification
215
215
 
@@ -218,38 +218,419 @@ Your previous attempt did not pass quality verification. Please address this fee
218
218
  {{feedback}}
219
219
 
220
220
  Make sure your output addresses all the feedback points above.
221
- `;var wn=on,bn=an,vn=cn,Sn=ln,wt=dn,kn=pn,bt=un,xn=mn,vt=gn,Cn=hn,_n=fn,St=yn;function F(t,e){let n=t;for(let[r,s]of Object.entries(e))n=n.replace(new RegExp(`\\{\\{${r}\\}\\}`,"g"),s);return n}function kt(t){let e=t.mode==="swe"?bn:wn,n=F(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
221
+ `;var br=ar,vr=cr,kr=lr,Sr=dr,nn=ur,xr=pr,rn=gr,Cr=hr,sn=mr,Er=yr,Rr=fr,on=wr;function z(t,e){let n=t;for(let[r,s]of Object.entries(e))n=n.replace(new RegExp(`\\{\\{${r}\\}\\}`,"g"),s);return n}function an(t){let e=t.mode==="swe"?vr:br,n=z(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
222
222
 
223
223
 
224
224
  ${t.browserPrompt.trim()}`),t.systemPrompt&&(n+=`
225
225
 
226
226
 
227
- ${F(vn,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=M(t.schema)?q(t.schema):Y(t.schema);n+=`
227
+ ${z(kr,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=j(t.schema)?se(t.schema):ie(t.schema);n+=`
228
228
 
229
229
 
230
- ${F(Sn,{schema:r}).trim()}`;}return n}function Ne(t){let e=[...new Set(Object.keys(t).map(l=>l.split("/")[0]))].sort((l,d)=>l==="worker_task"?-1:d==="worker_task"?1:l.localeCompare(d));if(!e.length)return `context/
231
- (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,s=Object.keys(t).some(l=>l.startsWith("worker_task/input/")),o=[];e.forEach((l,d)=>{let i=d===e.length-1,p=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",u=i?" ":"\u2502 ";if(l==="worker_task"){o.push({line:`${p}${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"}),s&&g.push({name:"input/",comment:"worker input files"}),g.forEach((f,m)=>{let y=m===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";o.push({line:`${u}${y}${f.name}`,comment:f.comment});});}else if(l.startsWith("candidate_")){let g=l.replace("candidate_","");o.push({line:`${p}${l}/`,comment:`worker ${g} solution`});}else if(l==="worker_output")o.push({line:`${p}${l}/`,comment:"output to verify"});else if(l.startsWith("item_")){let g=l.replace("item_","");o.push({line:`${p}${l}/`,comment:`input ${g}`});}else o.push({line:`${p}${l}/`,comment:""});});let c=Math.max(...o.map(l=>l.line.length)),a=["context/"];for(let l of o)if(l.comment){let d=" ".repeat(c-l.line.length+3);a.push(`${l.line}${d}# ${l.comment}`);}else a.push(l.line);return a.join(`
232
- `)}var En=ae.join(os.homedir(),Gt),ce=class{tag;timestamp;provider;agent;model;sandboxId;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;localQueue=Promise.resolve();dirReady=promises.mkdir(En,{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=Te(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${crypto.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=ae.join(En,r),this.parser=z(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.isClosed=true,this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.write({_sessionEnd:{timestamp:new Date().toISOString()}}),await this.flush());}writeLocalLine(e){this.metaWritten||this.writeMeta();let n=e.endsWith(`
230
+ ${z(Sr,{schema:r}).trim()}`;}return n}function ut(t){let e=[...new Set(Object.keys(t).map(l=>l.split("/")[0]))].sort((l,d)=>l==="worker_task"?-1:d==="worker_task"?1:l.localeCompare(d));if(!e.length)return `context/
231
+ (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,s=Object.keys(t).some(l=>l.startsWith("worker_task/input/")),a=[];e.forEach((l,d)=>{let i=d===e.length-1,u=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",p=i?" ":"\u2502 ";if(l==="worker_task"){a.push({line:`${u}${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"}),s&&g.push({name:"input/",comment:"worker input files"}),g.forEach((m,f)=>{let w=f===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";a.push({line:`${p}${w}${m.name}`,comment:m.comment});});}else if(l.startsWith("candidate_")){let g=l.replace("candidate_","");a.push({line:`${u}${l}/`,comment:`worker ${g} solution`});}else if(l==="worker_output")a.push({line:`${u}${l}/`,comment:"output to verify"});else if(l.startsWith("item_")){let g=l.replace("item_","");a.push({line:`${u}${l}/`,comment:`input ${g}`});}else a.push({line:`${u}${l}/`,comment:""});});let c=Math.max(...a.map(l=>l.line.length)),o=["context/"];for(let l of a)if(l.comment){let d=" ".repeat(c-l.line.length+3);o.push(`${l.line}${d}# ${l.comment}`);}else o.push(l.line);return o.join(`
232
+ `)}var _r=xe.join(os$1.homedir(),Kn),Re=class{tag;timestamp;provider;agent;model;sandboxId;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;localQueue=Promise.resolve();dirReady=promises.mkdir(_r,{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=je(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${crypto.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=xe.join(_r,r),this.parser=ee(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(`
233
233
  `)?e:e+`
234
234
  `;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)+`
235
235
  `;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.filterUndefined(this.observability)}},n=JSON.stringify(e)+`
236
- `;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 promises.appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=Wt){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},zt));}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.filterUndefined(this.observability),events:e};for(let r=1;r<=Oe;r++)try{let s=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(s.ok)return;if(s.status===429||s.status===401||s.status>=500){if(r===Oe){console.debug(`[SessionLogger] Dashboard ${s.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay(st*r);continue}console.debug(`[SessionLogger] Dashboard ${s.status}, dropping events`);return}catch(s){r===Oe?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",s),this.requeueEvents(e)):await this.delay(st*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}validateConfig(e){let n=Te();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))}filterUndefined(e){return e?Object.fromEntries(Object.entries(e).filter(([,n])=>n!==void 0)):{}}};function le(t){return (t||process.env.EVOLVE_DASHBOARD_URL||E).replace(/\/$/,"")}function de(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 pe(t){return await t.text().catch(()=>"")}function xt(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function _i(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 In(t){let e=await fetch(`${le(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${de(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:xt(t.userId),apps:_i(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 pe(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 Ei(t){let e=await fetch(`${le(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${de(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:xt(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 pe(e)}`);return await e.json()}async function Ti(t){let e=Array.from(new Set((t.userIds??[]).map(c=>xt(c))));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 ${de(t.apiKey)}`,accept:"application/json"},s=await fetch(`${le(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!s.ok)throw new Error(`Managed integration status failed (${s.status}): ${await pe(s)}`);return ((await s.json()).accounts??[]).map(c=>({userId:String(c.userId??""),app:String(c.app??""),appName:typeof c.appName=="string"?c.appName:void 0,appIcon:typeof c.appIcon=="string"?c.appIcon:void 0,accountLabel:typeof c.accountLabel=="string"?c.accountLabel:void 0,status:String(c.status??""),accountId:typeof c.accountId=="string"?c.accountId:void 0,updatedAt:typeof c.updatedAt=="string"?c.updatedAt:void 0}))}async function Ii(t){let e=await fetch(`${le(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${de(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 pe(e)}`);return await e.json()}async function Ri(t){let e=await fetch(`${le(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${de(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 pe(e)}`);return await e.json()}var Rn={auth:Ei,accounts:{list:Ti,update:Ii,delete:Ri}};util.promisify(child_process.exec);var It=util.promisify(child_process.execFile),An=Symbol.for("evolve:awsSdkCache"),Mn=Symbol.for("evolve:s3ClientCache");var Ni=3600,Ki=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function ji(t){if(t.startsWith("s3://")){let s=t.slice(5),o=s.indexOf("/");return o===-1?{bucket:s,prefix:""}:{bucket:s.slice(0,o),prefix:s.slice(o+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 je(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 s=t?.bucket||"",o=t?.prefix||"",c=t?.endpoint;if(t?.url){let a=ji(t.url);s=s||a.bucket,o=o||a.prefix,c=c||a.endpoint;}if(!s)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:s,prefix:o,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:c,credentials:t?.credentials,mode:"byok"}}function Ct(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 Vi(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 ue(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function Gi(t,e){let n=D(t),r=Vi(e),s=n.checkpointDirs?.length?n.checkpointDirs.map(a=>Ct(a)):[Ct(n.mcpConfig.settingsDir)],o=[...Ki.map(a=>`--exclude=${ue(a)}`),`--exclude=${ue(r+"/temp")}`,...(n.checkpointExcludes??[]).map(a=>`--exclude=${ue(Ct(a))}`)].join(" "),c=[ue(r+"/"),...s.map(a=>ue(a+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${o} ${c}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function Z(){let t=globalThis[An];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,s]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[An]={s3:r,presigner:s},{s3:r,presigner:s}}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 fe(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[Mn];if(r?.key===n)return r.client;let{s3:s}=await Z(),o=new s.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[Mn]={client:o,key:n},o}async function jn(t,e,n){let{s3:r,presigner:s}=await Z(),o=await fe(t),c=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return s.getSignedUrl(o,c,{expiresIn:Ni})}async function $n(t,e){let{s3:n}=await Z(),r=await fe(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(s){let o=s?.name||s?.message||"";if(s?.$metadata?.httpStatusCode===404||o==="NotFound"||o==="NoSuchKey")return false;throw s}}async function Vn(t,e){let{s3:n}=await Z(),o=await(await(await fe(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!o)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(o)}async function Wi(t,e,n){let{s3:r}=await Z();await(await fe(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function Gn(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function Wn(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function zi(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function zn(t,e,n,r){let s=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(!s.ok){let o=await s.text().catch(()=>"");throw new Error(`Gateway presign failed (${s.status}): ${o}`)}return s.json()}async function Ji(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 Hi(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 Rt(t,e,n,r,s){let o=new Date().toISOString(),c=Gi(n,r),a=await t.commands.run(c,{timeoutMs:12e4});if(a.exitCode!==0)throw new Error(`Checkpoint tar failed: ${a.stderr}`);let l=a.stdout.trim().split(`
237
- `).pop()?.trim();if(!l||l.length!==64)throw new Error(`Invalid checkpoint hash: ${l}`);let d=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}),i=parseInt(d.stdout.trim(),10),p=Number.isNaN(i)?void 0:i,u;try{if(e.mode==="byok"){let g=Gn(e,l);if(!await $n(e,g)){let h=await jn(e,g,"put"),y=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${h}"`,{timeoutMs:3e5});if(y.exitCode!==0)throw new Error(`Checkpoint upload failed: ${y.stderr}`);if(!await $n(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}u=zi();let m={id:u,hash:l,tag:s.tag,timestamp:o,sizeBytes:p,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment,sandboxId:t.sandboxId};await Wi(e,Wn(e,u),m);}else {let g=await zn(e,s.tag,l,"put");if(!g.alreadyExists){let m=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(m.exitCode!==0)throw new Error(`Checkpoint upload failed: ${m.stderr}`)}u=(await Ji(e,{tag:s.tag,hash:l,sizeBytes:p??0,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:u,hash:l,tag:s.tag,timestamp:o,sizeBytes:p,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment}}async function Jn(t,e,n){let r=await Ot(e,n),s=r.hash,o={agentType:r.agentType,workspaceMode:r.workspaceMode},c=await Qn(e,r),a=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${c}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(a.exitCode!==0)throw new Error(`Checkpoint download failed: ${a.stderr}`);let l=a.stdout.trim().split(`
238
- `).pop()?.trim();if(l!==s)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${s}, got ${l})`);let d=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(d.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${d.stderr}`);return o}function Hn(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||E,s=!t.url&&!t.bucket&&!!n;return je(t,s,r,n)}async function qn(t,e){let{s3:n}=await Z(),r=await fe(t),o=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,c=[],a;do{let u={Bucket:t.bucket,Prefix:o,...a&&{ContinuationToken:a}},g=await r.send(new n.ListObjectsV2Command(u));if(g.Contents)for(let f of g.Contents)f.Key?.endsWith(".json")&&f.LastModified&&c.push({key:f.Key,lastModified:f.LastModified});a=g.IsTruncated?g.NextContinuationToken:void 0;}while(a);if(c.length===0)return [];c.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 d=!!e?.tag?c:e?.limit?c.slice(0,e.limit):c,p=(await Promise.all(d.map(async u=>{try{return await Vn(t,u.key)}catch{return null}}))).filter(u=>u!==null);return e?.tag&&(p=p.filter(u=>u.tag===e.tag)),e?.limit&&p.length>e.limit&&(p=p.slice(0,e.limit)),p}async function Yn(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}`:""}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!s.ok){let o=await s.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${s.status}): ${o}`)}return s.json()}function qi(t){return t&&t>0?Math.min(t,500):100}async function Pt(t,e){return t.mode==="byok"?(await qn(t,{limit:1,tag:e?.tag}))[0]??null:(await Yn(t,{limit:1,tag:e?.tag}))[0]??null}async function Ot(t,e){if(t.mode==="byok"){let n=Wn(t,e);try{return await Vn(t,n)}catch(r){throw Yi(r)?new Error(`Checkpoint ${e} not found`):r}}else return await Hi(t,e)}async function Dn(t,e,n){if(e==="latest"){let r=await Pt(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function Qn(t,e){if(t.mode==="byok")return jn(t,Gn(t,e.hash),"get");{let n=await zn(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function Zn(t){return !(!t||ae.isAbsolute(t)||t.startsWith("-")||ae.normalize(t).startsWith("..")||t.includes("\0"))}function Bn(t,e){let n=ae.resolve(t,e),r=ae.resolve(t),s=ae.relative(r,n);if(s.startsWith("..")||ae.isAbsolute(s))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function Yi(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function _t(t){let e=t.filter(n=>!Zn(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var Xn=10*1024*1024,Un=false;async function er(){if(!Un)try{await It("tar",["--version"]),Un=!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 Ln(t,e){let n=await Ot(t,e),r=await Qn(t,n),s=e.replace(/[^a-zA-Z0-9_-]/g,"_"),o=ae.join(os.tmpdir(),`evolve-dl-${s}-${Date.now()}.tar.gz`),c=await fetch(r);if(!c.ok)throw new Error(`Checkpoint download failed (${c.status})`);if(!c.body)throw new Error("Checkpoint download returned empty body");let a=crypto.createHash("sha256"),l=$.createWriteStream(o);try{let i=c.body.getReader();await new Promise((p,u)=>{l.on("error",u),l.on("finish",p);async function g(){for(;;){let{done:f,value:m}=await i.read();if(f){l.end();break}a.update(m),l.write(m)||await new Promise(h=>l.once("drain",h));}}g().catch(u);});}catch(i){throw l.destroy(),await promises.unlink(o).catch(()=>{}),i}let d=a.digest("hex");if(d!==n.hash)throw await promises.unlink(o).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${d})`);return {tmpPath:o,metadata:n}}async function Fn(t){await er();let{stdout:e}=await It("tar",["-tvzf",t],{maxBuffer:Xn}),n=new Set,r=[],s=[];for(let o of e.trim().split(`
239
- `)){if(!o||o.startsWith("total "))continue;let c=o[0];if(c!=="-"&&c!=="d"&&c!=="l")throw new Error(`Archive contains unsupported entry type: "${c}"`);let a=o.match(/\d{2}:\d{2}\s+(.+)/)??o.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!a)continue;let l=a[1];if(c==="l"){let d=l.indexOf(" -> ");d!==-1&&(l=l.slice(0,d)),n.add(l);}else c==="d"?r.push(l.replace(/\/$/,"")):s.push(l);}return _t(r),_t([...n]),_t(s)}async function Et(t,e,n){await er(),await promises.mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await It("tar",r,{maxBuffer:Xn});}function Qi(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 At(t,e){let n=Hn(t,e);return tr(n)}function Zi(t){let e=Hn(t||{});return tr(e)}function tr(t){return {async listCheckpoints(e){let n=qi(e?.limit);return t.mode==="byok"?qn(t,{limit:n,tag:e?.tag}):Yn(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return Ot(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,s=n?.to||process.cwd(),o=await Dn(t,e),{tmpPath:c,metadata:a}=await Ln(t,o);try{if(r)return await promises.mkdir(s,{recursive:!0}),await Fn(c),await Et(c,s),s;{await promises.mkdir(s,{recursive:!0});let l=ae.join(s,`checkpoint-${a.id}.tar.gz`);return await promises.copyFile(c,l),l}}finally{await promises.unlink(c).catch(()=>{});}},async downloadFiles(e,n){let r=await Dn(t,e),{tmpPath:s}=await Ln(t,r),o;try{let c=await Fn(s),a;if(n?.files){let d=n.files.filter(p=>!Zn(p));if(d.length>0)throw new Error(`Unsafe file path requested: ${d[0]}`);let i=new Set(n.files);a=c.filter(p=>i.has(p));}else if(n?.glob){let d=n.glob.map(Qi);a=c.filter(i=>d.some(p=>p.test(i)));}else a=c;if(a.length===0)return {};o=ae.join(os.tmpdir(),`evolve-extract-${Date.now()}`);try{await Et(s,o,a);}catch(d){let i=d?.message??"";if(!i.includes("E2BIG")&&!i.includes("Argument list too long")&&!i.includes("ENAMETOOLONG"))throw d;await promises.rm(o,{recursive:!0,force:!0}).catch(()=>{}),o=ae.join(os.tmpdir(),`evolve-extract-${Date.now()}`),await Et(s,o);}let l={};return await Promise.all(a.map(async d=>{Bn(o,d),l[d]=await promises.readFile(ae.join(o,d));})),n?.to&&(await promises.mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(l).map(async([d,i])=>{Bn(n.to,d);let p=ae.join(n.to,d);await promises.mkdir(ae.dirname(p),{recursive:!0}),await promises.writeFile(p,i);}))),l}finally{o&&await promises.rm(o,{recursive:true,force:true}).catch(()=>{}),await promises.unlink(s).catch(()=>{});}}}}function N(t){return `'${t.replace(/'/g,"'\\''")}'`}function Ve(t){return typeof t=="string"&&t.length>0}function X(t,e,n){let r=t[e];if(!Ve(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function Xi(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
240
- ${n}`)}function es(t,e){switch(t){case "droid":{let n=X(e,"marketplace",t),r=X(e,"plugin",t);return [`droid plugin marketplace add ${N(n)}`,`droid plugin install ${N(r)} --scope user`]}case "claude":{let n=X(e,"marketplace",t),r=X(e,"plugin",t);return [`claude plugin marketplace add ${N(n)} --scope user`,`claude plugin install ${N(r)} --scope user`]}case "gemini":{let n=X(e,"source",t),r=e,s=[`gemini extensions install ${N(n)}`];return Ve(r.ref)&&s.push(`--ref ${N(r.ref)}`),r.autoUpdate===true&&s.push("--auto-update"),r.preRelease===true&&s.push("--pre-release"),s.push("--consent"),r.skipSettings===true&&s.push("--skip-settings"),[s.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=X(e,"marketplace",t),r=e,s=[`codex plugin marketplace add ${N(n)}`];if(Ve(r.ref)&&s.push(`--ref ${N(r.ref)}`),Array.isArray(r.sparse))for(let o of r.sparse){if(!Ve(o))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");s.push(`--sparse ${N(o)}`);}return [s.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function nr(t,e,n){if(n?.length)for(let r of n){let s=es(t,r);for(let o of s){let c=await e.commands.run(o,{timeoutMs:12e4});if(c.exitCode!==0)throw Xi(o,c)}}}var ts=["actionbook","active-research","extract"],ns=["agent-browser"],rs={actionbook:ts,"agent-browser":ns},or="/home/user/.agent-browser",rr=`${or}/config.json`,ar="/home/user/.actionbook",is=`${ar}/config.toml`;function ir(t){return t==="actionbook"||t==="agent-browser"}function ss(t){return t.remote===true}function sr(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 cr(t){if(typeof t=="string"){if(t==="browser-use")return {provider:"browser-use",managed:false};if(ir(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:sr(t.profile)};if(ir(t.provider))return {provider:t.provider,managed:ss(t),profile:sr(t.profile)};throw new Error("Unsupported browser configuration")}function lr(t,e){return Array.from(new Set([...e??[],...rs[t]]))}function Mt(t,e){return t==="actionbook"?{envs:{},files:[{path:is,data:`version = 1
236
+ `;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 promises.appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=jn){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},Jn));}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.filterUndefined(this.observability),events:e};for(let r=1;r<=We;r++)try{let s=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(s.ok)return;if(s.status===429||s.status===401||s.status>=500){if(r===We){console.debug(`[SessionLogger] Dashboard ${s.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay($t*r);continue}console.debug(`[SessionLogger] Dashboard ${s.status}, dropping events`);return}catch(s){r===We?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",s),this.requeueEvents(e)):await this.delay($t*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}validateConfig(e){let n=je();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))}filterUndefined(e){return e?Object.fromEntries(Object.entries(e).filter(([,n])=>n!==void 0)):{}}};function _e(t){return (t||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"")}function Te(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 Pe(t){return await t.text().catch(()=>"")}function cn(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function so(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 Pr(t){let e=await fetch(`${_e(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${Te(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:cn(t.userId),apps:so(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 Pe(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 io(t){let e=await fetch(`${_e(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${Te(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:cn(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 Pe(e)}`);return await e.json()}async function oo(t){let e=Array.from(new Set((t.userIds??[]).map(c=>cn(c))));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 ${Te(t.apiKey)}`,accept:"application/json"},s=await fetch(`${_e(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!s.ok)throw new Error(`Managed integration status failed (${s.status}): ${await Pe(s)}`);return ((await s.json()).accounts??[]).map(c=>({userId:String(c.userId??""),app:String(c.app??""),appName:typeof c.appName=="string"?c.appName:void 0,appIcon:typeof c.appIcon=="string"?c.appIcon:void 0,accountLabel:typeof c.accountLabel=="string"?c.accountLabel:void 0,status:String(c.status??""),accountId:typeof c.accountId=="string"?c.accountId:void 0,updatedAt:typeof c.updatedAt=="string"?c.updatedAt:void 0}))}async function ao(t){let e=await fetch(`${_e(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${Te(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 Pe(e)}`);return await e.json()}async function co(t){let e=await fetch(`${_e(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${Te(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 Pe(e)}`);return await e.json()}var Ir={auth:io,accounts:{list:oo,update:ao,delete:co}};util.promisify(child_process.exec);var gn=util.promisify(child_process.execFile),Mr=Symbol.for("evolve:awsSdkCache"),Dr=Symbol.for("evolve:s3ClientCache");var vo=3600,ko=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function So(t){if(t.startsWith("s3://")){let s=t.slice(5),a=s.indexOf("/");return a===-1?{bucket:s,prefix:""}:{bucket:s.slice(0,a),prefix:s.slice(a+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 gt(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 s=t?.bucket||"",a=t?.prefix||"",c=t?.endpoint;if(t?.url){let o=So(t.url);s=s||o.bucket,a=a||o.prefix,c=c||o.endpoint;}if(!s)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:s,prefix:a,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:c,credentials:t?.credentials,mode:"byok"}}function ln(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 xo(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 Ie(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function Co(t,e){let n=$(t),r=xo(e),s=n.checkpointDirs?.length?n.checkpointDirs.map(o=>ln(o)):[ln(n.mcpConfig.settingsDir)],a=[...ko.map(o=>`--exclude=${Ie(o)}`),`--exclude=${Ie(r+"/temp")}`,...(n.checkpointExcludes??[]).map(o=>`--exclude=${Ie(ln(o))}`)].join(" "),c=[Ie(r+"/"),...s.map(o=>Ie(o+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${a} ${c}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function ae(){let t=globalThis[Mr];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,s]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[Mr]={s3:r,presigner:s},{s3:r,presigner:s}}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 Oe(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[Dr];if(r?.key===n)return r.client;let{s3:s}=await ae(),a=new s.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[Dr]={client:a,key:n},a}async function Jr(t,e,n){let{s3:r,presigner:s}=await ae(),a=await Oe(t),c=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return s.getSignedUrl(a,c,{expiresIn:vo})}async function Ur(t,e){let{s3:n}=await ae(),r=await Oe(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(s){let a=s?.name||s?.message||"";if(s?.$metadata?.httpStatusCode===404||a==="NotFound"||a==="NoSuchKey")return false;throw s}}async function Vr(t,e){let{s3:n}=await ae(),a=await(await(await Oe(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!a)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(a)}async function Eo(t,e,n){let{s3:r}=await ae();await(await Oe(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function Hr(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function Gr(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function Ro(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function zr(t,e,n,r){let s=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(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Gateway presign failed (${s.status}): ${a}`)}return s.json()}async function _o(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 To(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 mn(t,e,n,r,s){let a=new Date().toISOString(),c=Co(n,r),o=await t.commands.run(c,{timeoutMs:12e4});if(o.exitCode!==0)throw new Error(`Checkpoint tar failed: ${o.stderr}`);let l=o.stdout.trim().split(`
237
+ `).pop()?.trim();if(!l||l.length!==64)throw new Error(`Invalid checkpoint hash: ${l}`);let d=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}),i=parseInt(d.stdout.trim(),10),u=Number.isNaN(i)?void 0:i,p;try{if(e.mode==="byok"){let g=Hr(e,l);if(!await Ur(e,g)){let h=await Jr(e,g,"put"),w=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${h}"`,{timeoutMs:3e5});if(w.exitCode!==0)throw new Error(`Checkpoint upload failed: ${w.stderr}`);if(!await Ur(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}p=Ro();let f={id:p,hash:l,tag:s.tag,timestamp:a,sizeBytes:u,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment,sandboxId:t.sandboxId};await Eo(e,Gr(e,p),f);}else {let g=await zr(e,s.tag,l,"put");if(!g.alreadyExists){let f=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(f.exitCode!==0)throw new Error(`Checkpoint upload failed: ${f.stderr}`)}p=(await _o(e,{tag:s.tag,hash:l,sizeBytes:u??0,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:p,hash:l,tag:s.tag,timestamp:a,sizeBytes:u,agentType:n,model:s.model,workspaceMode:s.workspaceMode,parentId:s.parentId,comment:s.comment}}async function Wr(t,e,n){let r=await hn(e,n),s=r.hash,a={agentType:r.agentType,workspaceMode:r.workspaceMode},c=await Qr(e,r),o=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${c}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(o.exitCode!==0)throw new Error(`Checkpoint download failed: ${o.stderr}`);let l=o.stdout.trim().split(`
238
+ `).pop()?.trim();if(l!==s)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${s}, got ${l})`);let d=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(d.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${d.stderr}`);return a}function qr(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||C,s=!t.url&&!t.bucket&&!!n;return gt(t,s,r,n)}async function Yr(t,e){let{s3:n}=await ae(),r=await Oe(t),a=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,c=[],o;do{let p={Bucket:t.bucket,Prefix:a,...o&&{ContinuationToken:o}},g=await r.send(new n.ListObjectsV2Command(p));if(g.Contents)for(let m of g.Contents)m.Key?.endsWith(".json")&&m.LastModified&&c.push({key:m.Key,lastModified:m.LastModified});o=g.IsTruncated?g.NextContinuationToken:void 0;}while(o);if(c.length===0)return [];c.sort((p,g)=>{let m=g.lastModified.getTime()-p.lastModified.getTime();return m!==0?m:g.key<p.key?-1:g.key>p.key?1:0});let d=!!e?.tag?c:e?.limit?c.slice(0,e.limit):c,u=(await Promise.all(d.map(async p=>{try{return await Vr(t,p.key)}catch{return null}}))).filter(p=>p!==null);return e?.tag&&(u=u.filter(p=>p.tag===e.tag)),e?.limit&&u.length>e.limit&&(u=u.slice(0,e.limit)),u}async function Xr(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}`:""}`,s=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${s.status}): ${a}`)}return s.json()}function Po(t){return t&&t>0?Math.min(t,500):100}async function fn(t,e){return t.mode==="byok"?(await Yr(t,{limit:1,tag:e?.tag}))[0]??null:(await Xr(t,{limit:1,tag:e?.tag}))[0]??null}async function hn(t,e){if(t.mode==="byok"){let n=Gr(t,e);try{return await Vr(t,n)}catch(r){throw Io(r)?new Error(`Checkpoint ${e} not found`):r}}else return await To(t,e)}async function Br(t,e,n){if(e==="latest"){let r=await fn(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function Qr(t,e){if(t.mode==="byok")return Jr(t,Hr(t,e.hash),"get");{let n=await zr(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function Zr(t){return !(!t||xe.isAbsolute(t)||t.startsWith("-")||xe.normalize(t).startsWith("..")||t.includes("\0"))}function $r(t,e){let n=xe.resolve(t,e),r=xe.resolve(t),s=xe.relative(r,n);if(s.startsWith("..")||xe.isAbsolute(s))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function Io(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function dn(t){let e=t.filter(n=>!Zr(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var es=10*1024*1024,Lr=false;async function ts(){if(!Lr)try{await gn("tar",["--version"]),Lr=!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 Nr(t,e){let n=await hn(t,e),r=await Qr(t,n),s=e.replace(/[^a-zA-Z0-9_-]/g,"_"),a=xe.join(os$1.tmpdir(),`evolve-dl-${s}-${Date.now()}.tar.gz`),c=await fetch(r);if(!c.ok)throw new Error(`Checkpoint download failed (${c.status})`);if(!c.body)throw new Error("Checkpoint download returned empty body");let o=crypto.createHash("sha256"),l=J.createWriteStream(a);try{let i=c.body.getReader();await new Promise((u,p)=>{l.on("error",p),l.on("finish",u);async function g(){for(;;){let{done:m,value:f}=await i.read();if(m){l.end();break}o.update(f),l.write(f)||await new Promise(h=>l.once("drain",h));}}g().catch(p);});}catch(i){throw l.destroy(),await promises.unlink(a).catch(()=>{}),i}let d=o.digest("hex");if(d!==n.hash)throw await promises.unlink(a).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${d})`);return {tmpPath:a,metadata:n}}async function Fr(t){await ts();let{stdout:e}=await gn("tar",["-tvzf",t],{maxBuffer:es}),n=new Set,r=[],s=[];for(let a of e.trim().split(`
239
+ `)){if(!a||a.startsWith("total "))continue;let c=a[0];if(c!=="-"&&c!=="d"&&c!=="l")throw new Error(`Archive contains unsupported entry type: "${c}"`);let o=a.match(/\d{2}:\d{2}\s+(.+)/)??a.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!o)continue;let l=o[1];if(c==="l"){let d=l.indexOf(" -> ");d!==-1&&(l=l.slice(0,d)),n.add(l);}else c==="d"?r.push(l.replace(/\/$/,"")):s.push(l);}return dn(r),dn([...n]),dn(s)}async function un(t,e,n){await ts(),await promises.mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await gn("tar",r,{maxBuffer:es});}function Ao(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 yn(t,e){let n=qr(t,e);return ns(n)}function Oo(t){let e=qr(t||{});return ns(e)}function ns(t){return {async listCheckpoints(e){let n=Po(e?.limit);return t.mode==="byok"?Yr(t,{limit:n,tag:e?.tag}):Xr(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return hn(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,s=n?.to||process.cwd(),a=await Br(t,e),{tmpPath:c,metadata:o}=await Nr(t,a);try{if(r)return await promises.mkdir(s,{recursive:!0}),await Fr(c),await un(c,s),s;{await promises.mkdir(s,{recursive:!0});let l=xe.join(s,`checkpoint-${o.id}.tar.gz`);return await promises.copyFile(c,l),l}}finally{await promises.unlink(c).catch(()=>{});}},async downloadFiles(e,n){let r=await Br(t,e),{tmpPath:s}=await Nr(t,r),a;try{let c=await Fr(s),o;if(n?.files){let d=n.files.filter(u=>!Zr(u));if(d.length>0)throw new Error(`Unsafe file path requested: ${d[0]}`);let i=new Set(n.files);o=c.filter(u=>i.has(u));}else if(n?.glob){let d=n.glob.map(Ao);o=c.filter(i=>d.some(u=>u.test(i)));}else o=c;if(o.length===0)return {};a=xe.join(os$1.tmpdir(),`evolve-extract-${Date.now()}`);try{await un(s,a,o);}catch(d){let i=d?.message??"";if(!i.includes("E2BIG")&&!i.includes("Argument list too long")&&!i.includes("ENAMETOOLONG"))throw d;await promises.rm(a,{recursive:!0,force:!0}).catch(()=>{}),a=xe.join(os$1.tmpdir(),`evolve-extract-${Date.now()}`),await un(s,a);}let l={};return await Promise.all(o.map(async d=>{$r(a,d),l[d]=await promises.readFile(xe.join(a,d));})),n?.to&&(await promises.mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(l).map(async([d,i])=>{$r(n.to,d);let u=xe.join(n.to,d);await promises.mkdir(xe.dirname(u),{recursive:!0}),await promises.writeFile(u,i);}))),l}finally{a&&await promises.rm(a,{recursive:true,force:true}).catch(()=>{}),await promises.unlink(s).catch(()=>{});}}}}function W(t){return `'${t.replace(/'/g,"'\\''")}'`}function mt(t){return typeof t=="string"&&t.length>0}function ce(t,e,n){let r=t[e];if(!mt(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function Mo(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
240
+ ${n}`)}function Do(t,e){switch(t){case "droid":{let n=ce(e,"marketplace",t),r=ce(e,"plugin",t);return [`droid plugin marketplace add ${W(n)}`,`droid plugin install ${W(r)} --scope user`]}case "claude":{let n=ce(e,"marketplace",t),r=ce(e,"plugin",t);return [`claude plugin marketplace add ${W(n)} --scope user`,`claude plugin install ${W(r)} --scope user`]}case "gemini":{let n=ce(e,"source",t),r=e,s=[`gemini extensions install ${W(n)}`];return mt(r.ref)&&s.push(`--ref ${W(r.ref)}`),r.autoUpdate===true&&s.push("--auto-update"),r.preRelease===true&&s.push("--pre-release"),s.push("--consent"),r.skipSettings===true&&s.push("--skip-settings"),[s.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=ce(e,"marketplace",t),r=e,s=[`codex plugin marketplace add ${W(n)}`];if(mt(r.ref)&&s.push(`--ref ${W(r.ref)}`),Array.isArray(r.sparse))for(let a of r.sparse){if(!mt(a))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");s.push(`--sparse ${W(a)}`);}return [s.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function rs(t,e,n){if(n?.length)for(let r of n){let s=Do(t,r);for(let a of s){let c=await e.commands.run(a,{timeoutMs:12e4});if(c.exitCode!==0)throw Mo(a,c)}}}var Uo=["actionbook","active-research","extract"],Bo=["agent-browser"],$o={actionbook:Uo,"agent-browser":Bo},as="/home/user/.agent-browser",ss=`${as}/config.json`,cs="/home/user/.actionbook",Lo=`${cs}/config.toml`;function is(t){return t==="actionbook"||t==="agent-browser"}function No(t){return t.remote===true}function os(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:os(t.profile)};if(is(t.provider))return {provider:t.provider,managed:No(t),profile:os(t.profile)};throw new Error("Unsupported browser configuration")}function ds(t,e){return Array.from(new Set([...e??[],...$o[t]]))}function wn(t,e){return t==="actionbook"?{envs:{},files:[{path:Lo,data:`version = 1
241
241
 
242
242
  [browser]
243
243
  mode = "cloud"
244
244
  cdp_endpoint = ${JSON.stringify(e.cdpUrl)}
245
- `}],directories:[ar]}:{envs:{AGENT_BROWSER_CONFIG:rr},files:[{path:rr,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
246
- `}],directories:[or]}}function dr(t){return (t?.dashboardUrl||E).replace(/\/$/,"")}async function pr(t){return await t.text().catch(()=>"")}async function ur(t,e,n={}){let r=await fetch(`${dr(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 pr(r)}`);let s=await r.json();if(!s.id||!s.sessionId||!s.cdpUrl||!s.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:s.id,sessionId:s.sessionId,sessionTag:s.sessionTag,cdpUrl:s.cdpUrl,liveUrl:s.liveUrl,browserAuthGrantToken:s.browserAuthGrantToken}}async function gr(t,e){let n=await fetch(`${dr(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 pr(n)}`)}var cs="RSA-OAEP-256",$t="browser-login";function ls(t){return (t||process.env.EVOLVE_DASHBOARD_URL||E).replace(/\/$/,"")}function ds(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 ps(t){return await t.text().catch(()=>"")}async function me(t,e,n={}){let r=await fetch(`${ls(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${ds(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 ps(r)}`);return await r.json()}async function us(t,e){let n=await me(t,"/api/browser-credentials/public-key"),r=crypto.publicEncrypt({key:n.publicKey,padding:crypto.constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:cs,keyId:n.id,ciphertext:r.toString("base64url")}}var Ge=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()}`:"",s=await me(this.config,`/api/browser-credentials${r}`);return {credentials:s.credentials.map(o=>this.toMetadata(o)),total:s.total,count:s.count,offset:s.offset,hasMore:s.has_more??s.offset+s.count<s.total}}async create(e){let n=await us(this.config,e.password),r=await me(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 me(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function Dt(t={}){return new Ge(t)}async function fr(t){return (await me({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:gs(t.config)})})).server}function gs(t){return t?.allow?.map(e=>({website:e.website,...e.accountLabel||e.account_label?{account_label:e.accountLabel||e.account_label}:{}}))}var mr="/home/user/.factory/evolve-session.json";function ys(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function hr(t){return `${t}-${crypto.randomBytes(8).toString("hex")}`}function yr(t,e,n="newline"){let r=new Map;if(t){let s=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let o of s){let c=o.trim();if(!c)continue;let a=c.indexOf(":");if(a<=0)continue;let l=c.slice(0,a).trim(),d=c.slice(a+1).trim();r.set(l.toLowerCase(),`${l}: ${d}`);}}for(let[s,o]of Object.entries(e)){let c=s.toLowerCase();if(c===L&&r.has(c)&&n==="newline"){let a=r.get(c),l=a.slice(a.indexOf(":")+1).trim();r.set(c,`${s}: ${l},${o}`);}else r.set(c,`${s}: ${o}`);}return Array.from(r.values()).join(n==="comma"?", ":`
247
- `)}var ws=262144,bs=new Set(["low","medium","high","xhigh","max"]);function wr(t){if(t)return bs.has(t)?t:void 0}function vs(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}var he=class{agentConfig;options;sandbox;hasRun=false;workingDir;lastRunTimestamp;registry;sessionTag;previousSessionTag;sessionLogger;activeCommand;activeProcessId=null;activeOperationId=null;activeOperationKind=null;nextOperationId=0;interruptedOperations=new Set;sandboxState;agentState="idle";droidSessionId;managedBrowserSession;skills;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(this.agentConfig=e,this.options=n,this.workingDir=n.workingDirectory||Vt,this.sandboxState=n.sandboxId?"ready":"stopped",this.skills=n.skills,this.storage=n.storage,n.schema)if(M(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=hr(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,s){let o=++this.nextOperationId;return this.activeOperationId=o,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,s),o}finalizeOperation(e,n,r,s="idle",o="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=o,this.agentState=s,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,s,o){let c=n==="run"?"run_background_complete":"command_background_complete",a=n==="run"?"run_background_failed":"command_background_failed",l=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async d=>{if(this.interruptedOperations.delete(e)||d.exitCode===130){this.finalizeOperation(e,s,l,"interrupted");return}n==="run"&&o&&await this.writeDroidSessionState(o);let p=d.exitCode===0?c:a,u=d.exitCode===0?"idle":"error";this.finalizeOperation(e,s,p,u);}).catch(()=>{this.interruptedOperations.delete(e),this.finalizeOperation(e,s,a,"error");});}createAjvValidator(){let n={...He[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 fs__default.default({...n,strict:false})}async getSandbox(e){if(this.sandbox)return this.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");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);let r=this.buildEnvironmentVariables();this.sandbox=await n.create({envs:r,workingDirectory:this.workingDir}),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(r){throw await this.closeManagedBrowserSession().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(e,"sandbox_error"),r}return this.sandbox}buildEnvironmentVariables(){let e={};if(this.agentConfig.type==="kimi"&&this.agentConfig.isDirectMode){let n=ne(this.agentConfig.reasoningEffort),r=wr(this.agentConfig.reasoningEffort);e.KIMI_MODEL_NAME=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),e.KIMI_MODEL_API_KEY=this.agentConfig.apiKey,e.KIMI_MODEL_PROVIDER_TYPE="kimi",e.KIMI_MODEL_MAX_CONTEXT_SIZE=String(this.registry.spendTrackingTomlProvider?.maxContextSize??ws),e.KIMI_MODEL_DEFAULT_THINKING=n?"true":"false",e.KIMI_MODEL_THINKING_MODE=n?"on":"off",r&&(e.KIMI_MODEL_THINKING_EFFORT=r),this.agentConfig.baseUrl&&(e.KIMI_MODEL_BASE_URL=this.agentConfig.baseUrl);}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.registry.skipApiKeyEnvInGateway&&!this.agentConfig.isDirectMode))if(this.registry.providerEnvMap&&!this.agentConfig.isDirectMode)for(let n of Object.values(this.registry.providerEnvMap))e[n.keyEnv]=this.agentConfig.apiKey;else {let n=this.agentConfig.model?.split("/")[0],r=n?this.registry.providerEnvMap?.[n]:void 0,s=r?r.keyEnv:this.registry.apiKeyEnv,o=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:s;e[o]=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 n=G(this.registry.gatewayPath);this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[O]:this.sessionTag}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=n),e.EVOLVE_API_KEY=this.agentConfig.apiKey;}if(this.managedBrowserSession&&this.options.managedBrowser&&Object.assign(e,Mt(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.options.secrets){if(Object.prototype.hasOwnProperty.call(this.options.secrets,I))throw new Error(`${I} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);Object.assign(e,this.options.secrets);}if(!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let n=this.registry.customHeadersEnv,r=this.registry.customHeadersFormat||"newline";e[n]=yr(e[n],{[O]:this.sessionTag},r);}return !this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&(e[this.registry.spendTrackingEnvs.sessionTagEnv]=this.sessionTag),e}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await ur(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=Mt(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 gr(this.options.managedBrowser,e);}catch(n){console.warn(`[Evolve] Managed browser cleanup failed: ${n.message}`);}}buildGatewayConfigJson(e){let n=G(this.registry.gatewayPath),r=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),s={},o=this.options.secrets?.[this.registry.gatewayConfigEnv];if(o)try{s=JSON.parse(o);}catch{}let c=s.provider??{},a=c.litellm??{},l=a.options??{},d=a.models??{},i=d[r]??{},p=i.headers??{},u=this.agentConfig.type==="opencode"?qe(this.agentConfig.reasoningEffort):void 0,g=i.variants??{},f=u?g[u]??{}:void 0;return s.provider={...c,litellm:{...a,npm:"@ai-sdk/openai-compatible",options:{...l,baseURL:`${n}/v1`,apiKey:this.agentConfig.apiKey},models:{...d,[r]:{...i,name:r,headers:{...p,...e},...u?{variants:{...g,[u]:{...f,reasoningEffort:u}}}:{}}}}},JSON.stringify(s)}buildRunEnvs(e){if(this.agentConfig.isDirectMode)return;let n=this.registry.customHeadersEnv;if(n){let s=this.options.secrets?.[n],o=this.registry.customHeadersFormat||"newline";return {[n]:yr(s,{[O]:this.sessionTag,[L]:`${W}${e}`},o)}}let r=this.registry.spendTrackingEnvs;if(r)return {[r.sessionTagEnv]:this.sessionTag,[r.runTagEnv]:`${W}${e}`};if(this.registry.gatewayConfigEnv)return {[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[O]:this.sessionTag,[L]:`${W}${e}`})}}captureDroidSession(e,n){if(this.agentConfig.type!=="droid")return;let r=n?.find(o=>typeof o.sessionId=="string"&&o.sessionId.length>0)?.sessionId;if(r){this.droidSessionId=r;return}let s=this.extractDroidSessionId(e);s&&(this.droidSessionId=s);}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)}async loadDroidSessionState(e){if(!(this.agentConfig.type!=="droid"||this.droidSessionId))try{let n=await e.files.read(mr);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("/home/user/.factory"),await e.files.write(mr,JSON.stringify({sessionId:this.droidSessionId},null,2)));}resolveGatewayModel(e){return this.agentConfig.isDirectMode?e:this.registry.gatewayModelAliases?.[e]??e}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??e}async setupAgentAuth(e){if(this.agentConfig.oauthFileContent&&this.registry.oauthFileName){let n=this.registry.mcpConfig.settingsDir.replace(/^~/,"/home/user");await e.files.makeDir(n),await e.files.write(`${n}/${this.registry.oauthFileName}`,this.agentConfig.oauthFileContent);return}this.registry.setupCommand&&await e.commands.run(this.registry.setupCommand,{timeoutMs:3e4});}async setupAgentPlugins(e){await nr(this.agentConfig.type,e,this.options.plugins);}async setupWorkspace(e,n){let r=this.options.workspaceMode||"knowledge",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 c=kt({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),a=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(a,c);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);let o={...this.options.mcpServers};if(this.options.integrations){let c=await In({...this.options.integrations,sessionTag:this.sessionTag});o={...o,integrations:{type:"http",url:c.url,headers:c.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 c=await fr({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});o={...o,[$t]:c};}Object.keys(o).length>0&&await ct(this.agentConfig.type,e,this.workingDir,o),!this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&this.agentConfig.type==="codex"&&await ot(e,this.agentConfig.baseUrl||G(),this.registry.spendTrackingEnvs),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await Ce(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[O]:this.sessionTag}),this.skills?.length&&await this.setupSkills(e);}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,{sourceDir:r,targetDir:s}=n;await e.files.makeDir(s);for(let o of this.skills){let c=`cp -r ${r}/${o} ${s}/ 2>/dev/null || true`;await e.commands.run(c,{timeoutMs:3e4});}}async uploadContextFiles(e,n){let r=Object.entries(n).map(([o,c])=>({path:`${this.workingDir}/context/${o}`,data:c}));if(r.length===0)return;let s=new Set(r.map(o=>o.path.substring(0,o.path.lastIndexOf("/"))).filter(Boolean));s.size>0&&await e.commands.run(`mkdir -p ${Array.from(s).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([o,c])=>({path:o.startsWith("/")?o:`${this.workingDir}/${o}`,data:c}));if(r.length===0)return;let s=new Set(r.map(o=>o.path.substring(0,o.path.lastIndexOf("/"))).filter(Boolean));s.size>0&&await e.commands.run(`mkdir -p ${Array.from(s).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"?e:ys(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:this.hasRun,sessionId:this.agentConfig.type==="droid"?this.droidSessionId:void 0,reasoningEffort:this.agentConfig.reasoningEffort,isDirectMode:this.agentConfig.isDirectMode,skills:this.skills})}async run(e,n){let{prompt:r,timeoutMs:s=se,background:o=false,checkpointComment:c}=e,{from:a}=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(a&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(a==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let b=await Pt(this.storage);if(!b)throw new Error('No checkpoints found for from: "latest".');a=b.id;}if(a){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);let b=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n,"sandbox_boot");try{this.sandbox=await this.options.sandboxProvider.create({envs:b,workingDirectory:this.workingDir});let v=await Jn(this.sandbox,this.storage,a);if(await this.setupManagedBrowser(this.sandbox),v.agentType&&v.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${v.agentType}, current: ${this.agentConfig.type})`);let C=this.options.workspaceMode||"knowledge";if(v.workspaceMode&&v.workspaceMode!==C)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${v.workspaceMode}, current: ${C})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let T=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!T}),await this.loadDroidSessionState(this.sandbox),this.hasRun=!0,this.lastCheckpointId=a,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n,"sandbox_ready");}catch(v){throw this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(n,"sandbox_error"),v}}let l=await this.getSandbox(n);if(await this.loadDroidSessionState(l),this.lastRunTimestamp=Date.now(),!this.sessionLogger){let b=this.options.sandboxProvider;this.sessionLogger=new ce({provider:b?.name||b?.providerType||"unknown",agent:this.agentConfig.type,model:this.agentConfig.model||this.registry.defaultModel,sandboxId:l.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}:{}}});}this.sessionLogger.writePrompt(r);let d=this.buildCommand(r),i=crypto.randomUUID(),p=this.buildRunEnvs(i);!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await Ce(l,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[O]:this.sessionTag,[L]:`${W}${i}`}),this.agentConfig.type==="qwen"&&await Xe(l,ne(this.agentConfig.reasoningEffort)),!this.agentConfig.isDirectMode&&this.registry.spendTrackingTomlProvider&&await at(l,this.registry.spendTrackingTomlProvider,{[O]:this.sessionTag,[L]:`${W}${i}`},{baseUrl:vs(G(this.registry.gatewayPath)),apiKey:this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:ne(this.agentConfig.reasoningEffort),thinkingEffort:wr(this.agentConfig.reasoningEffort)}),!this.agentConfig.isDirectMode&&this.registry.droidGatewaySettings&&await Ee(l,{...this.registry.droidGatewaySettings,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),baseUrl:`${G()}/v1`,apiKeyEnv:"EVOLVE_API_KEY"},{[O]:this.sessionTag,[L]:`${W}${i}`});let u="",g=z(this.agentConfig.type),f=b=>{u+=b;let v=u.split(`
248
- `);u=v.pop()??"";for(let C of v){if(!C.trim())continue;let T=g(C);if(this.captureDroidSession(C,T),this.sessionLogger?.writeEventParsed(C,T),n?.onStdout?.(C+`
249
- `),T&&n?.onContent)for(let K of T)n.onContent(K);}},m=b=>{n?.onStderr?.(b);},h=await l.commands.spawn(d,{cwd:this.workingDir,timeoutMs:s,envs:p,onStdout:f,onStderr:m}),y=this.beginOperation("run",h,n,"run_start");if(this.hasRun=true,o)return this.watchBackgroundOperation(y,"run",h,n,l),{sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:i,exitCode:0,stdout:`Background process started with ID ${h.processId}`,stderr:""};let w;try{w=await h.wait();}catch(b){throw this.interruptedOperations.delete(y),this.finalizeOperation(y,n,"run_failed","error"),b}if(this.interruptedOperations.delete(y)||w.exitCode===130?this.finalizeOperation(y,n,"run_interrupted","interrupted"):w.exitCode===0?this.finalizeOperation(y,n,"run_complete","idle"):this.finalizeOperation(y,n,"run_failed","error"),u.trim()){let b=g(u);if(this.captureDroidSession(u,b),this.sessionLogger?.writeEventParsed(u,b),n?.onStdout?.(u+`
250
- `),b&&n?.onContent)for(let v of b)n.onContent(v);}await this.writeDroidSessionState(l),this.sessionLogger&&!o&&await Promise.race([this.sessionLogger.flush(),new Promise(b=>setTimeout(b,2e3))]);let S;if(this.storage&&!o&&w.exitCode===0)try{S=await Rt(l,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:c,parentId:this.lastCheckpointId}),this.lastCheckpointId=S.id;}catch(b){console.warn(`[Evolve] Auto-checkpoint failed: ${b.message}`);}return {sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:i,exitCode:w.exitCode,stdout:w.stdout,stderr:w.stderr,checkpoint:S}}async executeCommand(e,n={},r){let{timeoutMs:s=se,background:o=false}=n;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 c=await this.getSandbox(r);this.lastRunTimestamp=Date.now();let a="",l="",d=m=>{a+=m,r?.onStdout?.(m);},i=m=>{l+=m,r?.onStderr?.(m);},p=await c.commands.spawn(e,{cwd:this.workingDir,timeoutMs:s,onStdout:d,onStderr:i}),u=this.beginOperation("command",p,r,"command_start");if(o)return this.watchBackgroundOperation(u,"command",p,r),{sandboxId:c.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${p.processId}`,stderr:""};let g;try{g=await p.wait();}catch(m){throw this.interruptedOperations.delete(u),this.finalizeOperation(u,r,"command_failed","error"),m}return this.interruptedOperations.delete(u)||g.exitCode===130?this.finalizeOperation(u,r,"command_interrupted","interrupted"):g.exitCode===0?this.finalizeOperation(u,r,"command_complete","idle"):this.finalizeOperation(u,r,"command_failed","error"),{sandboxId:c.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:g.exitCode,stdout:a||g.stdout||"",stderr:l||g.stderr||""}}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 getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,s=e?"":"-maxdepth 1",c=(await n.commands.run(`find ${r} ${s} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
251
- `).filter(Boolean),a=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,l=[],d=`${r}/`;for(let f of c){let[m,h]=f.split("|");if(!m||!h)continue;let y=parseInt(h,10);a>0&&y<a||l.push(m);}let i={},p=await Promise.all(l.map(async f=>{try{let m=await n.files.read(f);return {relativePath:f.startsWith(d)?f.slice(d.length):f.split("/").pop()||f,content:m}}catch{return null}}));for(let f of p)f&&(i[f.relativePath]=f.content);if(!this.zodSchema&&!this.jsonSchema)return {files:i,data:null};let u=i["result.json"];if(!u)return {files:i,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 m=this.zodSchema.safeParse(f);return m.success?{files:i,data:m.data}:{files:i,data:null,error:`Schema validation failed: ${m.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(f))return {files:i,data:f};{let h=this.compiledValidator.errors?.map(y=>`${y.instancePath} ${y.message}`).join(", ")||"Unknown validation error";return {files:i,data:null,error:`Schema validation failed: ${h}`,rawData:g}}}return {files:i,data:null}}catch(f){return {files:i,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 Rt(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.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.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,s=false;try{this.activeCommand?s=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(s=await this.sandbox.commands.kill(this.activeProcessId));}catch{s=false;}if(!s)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let o=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,o),s}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.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=hr(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||E,s=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!s.ok){let o=await s.text().catch(()=>"");throw new Error(`Spend query failed (${s.status}): ${o}`)}return s}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}),s=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(s)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let c=new URLSearchParams({tag:n,runId:e.runId}),l=await(await this.fetchSpend(c)).json();return this.normalizeRunCost(l,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),s=e.index>0?e.index-1:r.runs.length+e.index,o=r.runs[s];if(!o)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return o}};function Ss(t){return (t||process.env.EVOLVE_DASHBOARD_URL||E).replace(/\/$/,"")}function ks(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 xs(t){return await t.text().catch(()=>"")}async function br(t,e,n={}){let r=await fetch(`${Ss(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${ks(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 xs(r)}`);return r.status===204?{}:await r.json()}var We=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 br(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await br(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function Bt(t={}){return new We(t)}var ye=class extends events.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&&(this.config.agent=e,this._cachedGatewayOverrides=null),this}withSandbox(e){return this.config.sandbox=e,this}withWorkingDirectory(e){return this.config.workingDirectory=e,this}withWorkspaceMode(e){return this.config.workspaceMode=e,this}withSecrets(e){if(Object.prototype.hasOwnProperty.call(e,I))throw new Error(`${I} is reserved for Evolve-managed sandbox services and cannot be set with withSecrets()`);return this.config.secrets={...this.config.secrets,...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&&(M(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=Rn;static browserCredentials=Dt;static browserProfiles=Bt;async initializeAgent(){let e=Fe(this.config.agent),n=this.config.sandbox??await yt();if(this.config.integrations&&e.isDirectMode)throw new Error("withIntegrations() is available only in gateway mode with EVOLVE_API_KEY");let r={},s,o,c=this.config.skills,a;if(this.config.browser){let i=cr(this.config.browser);if(a=i,i.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.');r=Nt(e.apiKey);}if((i.provider==="actionbook"||i.provider==="agent-browser")&&(c=lr(i.provider,c),i.managed)){if(e.isDirectMode)throw new Error(`Managed browser provider "${i.provider}" requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.`);s=i.provider==="actionbook"?wt:kn,o={provider:i.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||E,...i.profile?{profile:i.profile}:{}};}if(i.profile&&!i.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(!a||a.provider!=="agent-browser"||!a.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 l=this.config.storage!==void 0?je(this.config.storage,!e.isDirectMode,E,e.isDirectMode?void 0:e.apiKey):void 0,d={sandboxProvider:n,secrets:this.config.secrets,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:{...r,...this.config.mcpServers},browserPrompt:s,managedBrowser:o,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||E,config:this.config.browserCredentials}:void 0,plugins:this.config.plugins,skills:c,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||E}:void 0,storage:l};this.agent=new he(e,d);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,s=this.listenerCount("lifecycle")>0;return {onStdout:e?o=>this.emit("stdout",o):void 0,onStderr:n?o=>this.emit("stderr",o):void 0,onContent:r?o=>this.emit("content",o):void 0,onLifecycle:s?o=>this.emit("lifecycle",o):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:s,checkpointComment:o}){if(s&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let c=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:s,checkpointComment:o},c)}async executeCommand(e,n={}){this.agent||await this.initializeAgent();let r=this.createStreamCallbacks();return this.agent.executeCommand(e,n,r)}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 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=Fe(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:E,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 At(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return At(this.config.storage,this.resolveGatewayOverrides()||{})}getSession(){return this.agent?this.agent.getSession():this.config.sandboxId??null}async setSession(e){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 ee=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 J=Symbol.for("evolve.SwarmResult"),te=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 Ut=class t{config;semaphore;constructor(e={}){let n=e.concurrency??jt;if(n>it)throw new Error(`concurrency=${n} exceeds max ${it}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n,timeoutMs:e.timeoutMs??se,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new ee(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:s,verify:o}=e,c=e.retry??this.config.retry,a=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs;if(s&&o)throw new Error("map() cannot use both bestOf and verify options simultaneously");let d=await Promise.all(n.map((i,p)=>s?this.executeMapItemWithBestOf(i,r,p,a,e,l,c):o?this.executeMapItemWithVerify(i,r,p,a,e,l,c):c?P(u=>this.executeMapItem(i,r,p,a,e,l,u),c,p):this.executeMapItem(i,r,p,a,e,l)));return te.from(d)}async filter(e){let{items:n,prompt:r,condition:s,verify:o}=e,c=e.retry??this.config.retry,a=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,d=await Promise.all(n.map((p,u)=>o?this.executeFilterItemWithVerify(p,r,u,a,e,l,c):c?P(g=>this.executeFilterItem(p,r,u,a,e,l,g),c,u):this.executeFilterItem(p,r,u,a,e,l))),i=[];for(let p of d)if(p.status==="error")i.push(p);else if(p.data!==null)try{s(p.data)?i.push(p):i.push({...p,status:"filtered"});}catch(u){i.push({...p,status:"error",data:null,error:`Condition function threw: ${u.message}`});}return te.from(i)}async reduce(e){let{items:n,prompt:r,verify:s}=e,o=e.retry??this.config.retry,c=this.generateOperationId(),a=e.timeoutMs??this.config.timeoutMs,l=[],d=[];n.forEach((S,b)=>{l.push(this.getFiles(S)),d.push(this.getIndex(S,b));});let i={};l.forEach((S,b)=>{Object.entries(S).forEach(([v,C])=>{i[`item_${d[b]}/${v}`]=C;});});let p=Ne(i),u=F(_n,{fileTree:p}),g=e.systemPrompt?`${u}
252
-
253
- ${e.systemPrompt}`:u,f=(S,b,v)=>({operationId:c,operation:"reduce",tag:S.tag,sandboxId:S.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:d,errorRetry:b,verifyRetry:v,...this.pipelineContextToMeta(e._pipelineContext)}),m=e.mcpServers??this.config.mcpServers,h=e.skills??this.config.skills,y=e.integrations??this.config.integrations,w=async(S,b,v,C)=>{let T=await this.semaphore.use(()=>this.execute(i,S,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:m,skills:h,integrations:y,tagPrefix:b,timeoutMs:a,observability:{swarmName:this.config.tag,operationName:e.name,operationId:c,operation:"reduce",role:"worker",errorRetry:v,verifyRetry:C&&C>1?C-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),K=f(T,v,C&&C>1?C-1:void 0);return T.error?{status:"error",data:null,files:T.files,meta:K,error:T.error,rawData:T.rawData}:{status:"success",data:T.data,files:T.files,meta:K}},k=`${this.config.tag}-reduce`;return s?this.runWithVerification((S,b,v)=>w(S,b,void 0,v),{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:a,systemPrompt:g,schema:e.schema,mcpServers:m,skills:h,integrations:y,operationId:c,baseTag:k,retry:o,operation:"reduce",_pipelineContext:e._pipelineContext}):o?P(S=>{let b=S>1?S-1:void 0,v=b?`${k}-er${b}`:k;return w(r,v,b)},o):w(r,k)}async bestOf(e){let{item:n,prompt:r,config:s}=e,o=e.retry??this.config.retry,c=s.n??s.taskAgents?.length;if(c===void 0)throw new Error("bestOf requires n or taskAgents");if(c<2)throw new Error("bestOf requires n >= 2");let a=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,d=this.getFiles(n),i=s.mcpServers??this.config.mcpServers,p=s.judgeMcpServers??s.mcpServers??this.config.mcpServers,u=s.skills??this.config.skills,g=s.judgeSkills??s.skills??this.config.skills,f=s.integrations??this.config.integrations,m=s.judgeIntegrations??s.integrations??this.config.integrations,h=await Promise.all(Array.from({length:c},async(b,v)=>{let C=o?await P(T=>this.executeBestOfCandidate({inputFiles:d,prompt:r,candidateIndex:v,operationId:a,config:s,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:i,skills:u,integrations:f,timeoutMs:l,attempt:T}),o,v):await this.executeBestOfCandidate({inputFiles:d,prompt:r,candidateIndex:v,operationId:a,config:s,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:i,skills:u,integrations:f,timeoutMs:l});return s.onCandidateComplete?.(0,v,C.status==="success"?"success":"error"),C})),y=o?await P(b=>this.executeBestOfJudge({inputFiles:d,taskPrompt:r,candidates:h,config:s,timeoutMs:l,operationId:a,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:p,skills:g,integrations:m,attempt:b}),{...o,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:d,taskPrompt:r,candidates:h,config:s,timeoutMs:l,operationId:a,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:p,skills:g,integrations:m}),w=h.findIndex(b=>b.status==="success"),k=y.decision?.winner??(w>=0?w:0);s.onJudgeComplete?.(0,k,y.decision?.reasoning??"Judge failed to provide reasoning");let S={operationId:a,operation:"bestof-judge",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:c};return {winner:h[k]??h[0],winnerIndex:k,judgeReasoning:y.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:S,candidates:h}}async execute(e,n,r){let s=null,o="",c=r.tagPrefix,a={},l=null,d,i,p={...this.config.agent,...r.agent};try{s=new ye().withAgent(p).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&s.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&s.withSystemPrompt(r.systemPrompt),r.mcpServers&&s.withMcpServers(r.mcpServers),r.skills?.length&&s.withSkills(r.skills),r.integrations&&s.withIntegrations(r.integrations),r.observability&&s.withObservability(r.observability),Object.keys(e).length>0&&s.withContext(e);let u=await s.run({prompt:n,timeoutMs:r.timeoutMs});o=u.sandboxId,c=s.getSessionTag()??r.tagPrefix;let g=null;try{g=await s.getOutputFiles(!0),a=g.files;}catch{}u.exitCode!==0?d=`Agent exited with code ${u.exitCode}`:r.schema?g?(l=g.data,g.error&&(d=g.error),g.rawData&&(i=g.rawData)):d="Failed to read output files from sandbox":l=a;}catch(u){if(d=u.message,s){c=s.getSessionTag()??r.tagPrefix;try{a=(await s.getOutputFiles(!0)).files;}catch{}}}finally{s&&await s.kill().catch(()=>{});}return {files:a,data:l,tag:c,sandboxId:o,error:d,rawData:i}}async executeMapItem(e,n,r,s,o,c,a=1){let l=this.getFiles(e),d=a>1?`${this.config.tag}-map-${r}-er${a-1}`:`${this.config.tag}-map-${r}`,i=this.evaluatePrompt(n,l,r);if(i instanceof Error)return this.buildErrorResult(`Prompt function threw: ${i.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let p=o.mcpServers??this.config.mcpServers,u=o.skills??this.config.skills,g=o.integrations??this.config.integrations,f=await this.semaphore.use(()=>this.execute(l,i,{systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,agent:o.agent,mcpServers:p,skills:u,integrations:g,tagPrefix:d,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:o.name,operationId:s,operation:"map",itemIndex:r,role:"worker",errorRetry:a>1?a-1:void 0,...this.pipelineContextToObservability(o._pipelineContext)}})),m={operationId:s,operation:"map",tag:f.tag,sandboxId:f.sandboxId,swarmName:this.config.tag,operationName:o.name,itemIndex:r,errorRetry:a>1?a-1:void 0,...this.pipelineContextToMeta(o._pipelineContext)};return this.buildResult(f,m)}async executeMapItemWithVerify(e,n,r,s,o,c,a){let l=this.getFiles(e),d=`${this.config.tag}-map-${r}`,i=o.verify,p=o.mcpServers??this.config.mcpServers,u=o.skills??this.config.skills,g=o.integrations??this.config.integrations,f=this.evaluatePrompt(n,l,r);if(f instanceof Error)return this.buildErrorResult(`Prompt function threw: ${f.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let m=async(h,y,w)=>{let k=await this.semaphore.use(()=>this.execute(l,h,{systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,agent:o.agent,mcpServers:p,skills:u,integrations:g,tagPrefix:y,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:o.name,operationId:s,operation:"map",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(o._pipelineContext)}})),S={operationId:s,operation:"map",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,operationName:o.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(o._pipelineContext)};return this.buildResult(k,S)};return this.runWithVerification(m,{originalPrompt:f,inputFiles:l,verifyConfig:i,timeoutMs:c,systemPrompt:o.systemPrompt,schema:o.schema,mcpServers:p,skills:u,integrations:g,operationId:s,baseTag:d,retry:a,itemIndex:r,operation:"map",_pipelineContext:o._pipelineContext})}async executeMapItemWithBestOf(e,n,r,s,o,c,a){let l=this.getFiles(e),d=`${this.config.tag}-map-${r}`,i=this.evaluatePrompt(n,l,r);if(i instanceof Error)return this.buildErrorResult(`Prompt function threw: ${i.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let p=o.bestOf,u=p.n??p.taskAgents?.length;if(u===void 0||u<2)return this.buildErrorResult("bestOf requires n >= 2 or taskAgents with at least 2 elements",{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let g=o.mcpServers??this.config.mcpServers,f=p.mcpServers??g,m=p.judgeMcpServers??p.mcpServers??g,h=o.skills??this.config.skills,y=p.skills??h,w=p.judgeSkills??p.skills??h,k=o.integrations??this.config.integrations,S=p.integrations??k,b=p.judgeIntegrations??p.integrations??k,v=await Promise.all(Array.from({length:u},async(we,be)=>{let Ft=a?await P(kr=>this.executeBestOfCandidate({inputFiles:l,prompt:i,candidateIndex:be,operationId:s,config:p,systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,mcpServers:f,skills:y,integrations:S,timeoutMs:c,parentIndex:r,attempt:kr,_pipelineContext:o._pipelineContext}),a,be):await this.executeBestOfCandidate({inputFiles:l,prompt:i,candidateIndex:be,operationId:s,config:p,systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,mcpServers:f,skills:y,integrations:S,timeoutMs:c,parentIndex:r,_pipelineContext:o._pipelineContext});return p.onCandidateComplete?.(r,be,Ft.status==="success"?"success":"error"),Ft})),C=a?await P(we=>this.executeBestOfJudge({inputFiles:l,taskPrompt:i,candidates:v,config:p,timeoutMs:c,operationId:s,systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,mcpServers:m,skills:w,integrations:b,parentIndex:r,attempt:we,_pipelineContext:o._pipelineContext}),{...a,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:l,taskPrompt:i,candidates:v,config:p,timeoutMs:c,operationId:s,systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,mcpServers:m,skills:w,integrations:b,parentIndex:r,_pipelineContext:o._pipelineContext}),T=v.findIndex(we=>we.status==="success"),K=C.decision?.winner??(T>=0?T:0),Lt=v[K]??v[0];p.onJudgeComplete?.(r,K,C.decision?.reasoning??"Judge failed to provide reasoning");let Sr={operationId:s,operation:"bestof-judge",tag:C.tag,sandboxId:C.sandboxId,swarmName:this.config.tag,operationName:o.name,candidateCount:u,...this.pipelineContextToMeta(o._pipelineContext)};return {...Lt,meta:{...Lt.meta,operation:"map",swarmName:this.config.tag,operationName:o.name,itemIndex:r,...this.pipelineContextToMeta(o._pipelineContext)},bestOf:{winnerIndex:K,judgeReasoning:C.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:Sr,candidates:v}}}async executeFilterItem(e,n,r,s,o,c,a=1){let l=this.getFiles(e),d=a>1?`${this.config.tag}-filter-${r}-er${a-1}`:`${this.config.tag}-filter-${r}`,i=o.mcpServers??this.config.mcpServers,p=o.skills??this.config.skills,u=o.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(l,n,{systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,agent:o.agent,mcpServers:i,skills:p,integrations:u,tagPrefix:d,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:o.name,operationId:s,operation:"filter",itemIndex:r,role:"worker",errorRetry:a>1?a-1:void 0,...this.pipelineContextToObservability(o._pipelineContext)}})),f={operationId:s,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:o.name,itemIndex:r,errorRetry:a>1?a-1:void 0,...this.pipelineContextToMeta(o._pipelineContext)};return this.buildResult(g,f,l)}async executeFilterItemWithVerify(e,n,r,s,o,c,a){let l=this.getFiles(e),d=`${this.config.tag}-filter-${r}`,i=o.verify,p=o.mcpServers??this.config.mcpServers,u=o.skills??this.config.skills,g=o.integrations??this.config.integrations,f=async(m,h,y)=>{let w=await this.semaphore.use(()=>this.execute(l,m,{systemPrompt:o.systemPrompt,schema:o.schema,schemaOptions:o.schemaOptions,agent:o.agent,mcpServers:p,skills:u,integrations:g,tagPrefix:h,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:o.name,operationId:s,operation:"filter",itemIndex:r,role:"worker",verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToObservability(o._pipelineContext)}})),k={operationId:s,operation:"filter",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:o.name,itemIndex:r,verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToMeta(o._pipelineContext)};return this.buildResult(w,k,l)};return this.runWithVerification(f,{originalPrompt:n,inputFiles:l,verifyConfig:i,timeoutMs:c,systemPrompt:o.systemPrompt,schema:o.schema,mcpServers:p,skills:u,integrations:g,operationId:s,baseTag:d,retry:a,itemIndex:r,operation:"filter",_pipelineContext:o._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:s,operationId:o,config:c,timeoutMs:a,parentIndex:l,attempt:d=1,_pipelineContext:i}=e,p=l!==void 0?`${this.config.tag}-map-${l}-bestof-cand-${s}`:`${this.config.tag}-bestof-cand-${s}`,u=d>1?`${p}-er${d-1}`:p,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:c.taskAgents?.[s],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:u,timeoutMs:a,observability:{swarmName:this.config.tag,operationId:o,operation:"map",itemIndex:l,role:"candidate",candidateIndex:s,errorRetry:d>1?d-1:void 0,...this.pipelineContextToObservability(i)}})),f={operationId:o,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:s,errorRetry:d>1?d-1:void 0,candidateIndex:s,...this.pipelineContextToMeta(i)};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,s)=>{r.status==="error"&&(n[`candidate_${s}/_failed.txt`]=`STATUS: FAILED
254
-
255
- Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([o,c])=>{n[`candidate_${s}/${o}`]=c;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:s,operationId:o,parentIndex:c,attempt:a=1,_pipelineContext:l}=e,d=c!==void 0?`${this.config.tag}-map-${c}-bestof-judge`:`${this.config.tag}-bestof-judge`,i=a>1?`${d}-er${a-1}`:d,p=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),u=Ne(p),g=F(bt,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:u}),f=zod.z.object({winner:zod.z.number().min(0).max(n.length-1),reasoning:zod.z.string()}),m=await this.semaphore.use(()=>this.execute(p,xn,{systemPrompt:g,schema:f,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:i,timeoutMs:s,observability:{swarmName:this.config.tag,operationId:o,operation:"map",itemIndex:c,role:"judge",errorRetry:a>1?a-1:void 0,...this.pipelineContextToObservability(l)}})),h=null;if(m.data&&!m.error)h=m.data;else if(m.rawData)try{let y=JSON.parse(m.rawData);console.warn(`Judge returned invalid winner ${y.winner}, defaulting to candidate 0`),h={winner:0,reasoning:y.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${m.error}`);}return {status:h?"success":"error",decision:h,tag:m.tag,sandboxId:m.sandboxId,error:h?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=zod.z.object({passed:zod.z.boolean(),reasoning:zod.z.string(),feedback:zod.z.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,s])=>{n[`worker_output/${r}`]=s;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:s,workerTag:o,retryAttempt:c=1,operation:a,itemIndex:l,attemptIndex:d,_pipelineContext:i}=e,p=c>1?`${o}-verifier-er${c-1}`:`${o}-verifier`,u=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,f=n.verifierIntegrations??e.integrations,m=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),h=Ne(m),y=F(vt,{criteria:n.criteria,fileTree:h}),w=await this.semaphore.use(()=>this.execute(m,Cn,{systemPrompt:y,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:u,skills:g,integrations:f,tagPrefix:p,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:s,operation:a,itemIndex:l,role:"verifier",verifyRetry:d&&d>1?d-1:void 0,errorRetry:c>1?c-1:void 0,...this.pipelineContextToObservability(i)}})),k=null;if(w.data&&!w.error)k=w.data;else if(w.rawData)try{let S=JSON.parse(w.rawData);k={passed:!!S.passed,reasoning:S.reasoning??"Verification completed",feedback:S.feedback};}catch{console.warn(`Verify validation failed: ${w.error}`);}return {status:k?"success":"error",decision:k,tag:w.tag,sandboxId:w.sandboxId,error:k?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return F(St,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:s,verifyConfig:o,timeoutMs:c,operationId:a,baseTag:l,retry:d,itemIndex:i=0,operation:p,_pipelineContext:u}=n,g=o.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,f=r,m=null,h=0;for(;h<g;){h++;let w=h>1?`${l}-vr${h-1}`:l,k=d?await P(v=>e(f,v>1?`${w}-er${v-1}`:w,h),d,i):await e(f,w,h);if(o.onWorkerComplete?.(i,h,k.status==="error"?"error":"success"),k.status==="error")return k;m=k;let S=d?await P(v=>this.executeVerify({inputFiles:s,outputFiles:k.files,taskPrompt:f,config:o,timeoutMs:c,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:a,workerTag:w,retryAttempt:v,operation:p,itemIndex:i,attemptIndex:h,_pipelineContext:u}),{...d,retryOn:void 0}):await this.executeVerify({inputFiles:s,outputFiles:k.files,taskPrompt:f,config:o,timeoutMs:c,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:a,workerTag:w,operation:p,itemIndex:i,attemptIndex:h,_pipelineContext:u}),b={operationId:a,operation:"verify",tag:S.tag,sandboxId:S.sandboxId,swarmName:this.config.tag,attempts:h,...this.pipelineContextToMeta(u)};if(o.onVerifierComplete?.(i,h,S.decision?.passed??false,S.decision?.feedback),S.decision?.passed)return {...k,verify:{passed:true,reasoning:S.decision.reasoning,verifyMeta:b,attempts:h}};if(h<g){let v=S.decision?.feedback??S.decision?.reasoning??"Output did not meet criteria";f=t.buildRetryPromptWithFeedback(r,v);}}let y=h>1?`${l}-vr${h-1}`:l;return {...m,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:a,operation:"verify",tag:`${y}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:h,...this.pipelineContextToMeta(u)},attempts:h}}}generateOperationId(){return crypto.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(s){return s}}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"]=M(e.schema)?q(e.schema):Y(e.schema)),Object.entries(e.inputFiles).forEach(([r,s])=>{n[`worker_task/input/${r}`]=s;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&J in e&&e[J]===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 s=r??e.files;return e.error?{[J]:true,status:"error",data:null,files:s,meta:n,error:e.error,rawData:e.rawData}:{[J]:true,status:"success",data:e.data,files:s,meta:n}}buildErrorResult(e,n){return {[J]:true,status:"error",data:null,files:{},meta:n,error:e}}};var ze=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 Je(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=crypto.randomBytes(8).toString("hex"),r=[],s=e,o=Date.now();for(let a=0;a<this.steps.length;a++){let l=this.steps[a],d=l.config.name,i=Date.now();this.events.onStepStart?.({type:l.type,index:a,name:d,itemCount:s.length});let p={pipelineRunId:n,pipelineStepIndex:a};try{let u=await this.executeStep(l,s,a,d,p),g=Date.now()-i;if(r.push({type:l.type,index:a,durationMs:g,results:u.output}),this.events.onStepComplete?.({type:l.type,index:a,name:d,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()-o};s=u.nextItems;}catch(u){throw this.events.onStepError?.({type:l.type,index:a,name:d,error:u instanceof Error?u:new Error(String(u))}),u}}let c=r[r.length-1];return {pipelineRunId:n,steps:r,output:c?.results??[],totalDurationMs:Date.now()-o}}async executeStep(e,n,r,s,o){if(e.type==="map"){let l=e.config,d=await this.swarm.map({items:n,...l,_pipelineContext:o,retry:this.wrapRetry(l.retry,r,s),verify:this.wrapVerify(l.verify,r,s),bestOf:this.wrapBestOf(l.bestOf,r,s)});return {output:[...d],nextItems:d.success,successCount:d.success.length,errorCount:d.error.length,filteredCount:0}}if(e.type==="filter"){let l=e.config,d=await this.swarm.filter({items:n,...l,_pipelineContext:o,retry:this.wrapRetry(l.retry,r,s),verify:this.wrapVerify(l.verify,r,s)}),i=l.emit??"success",p=i==="success"?d.success:i==="filtered"?d.filtered:[...d.success,...d.filtered];return {output:[...d],nextItems:p,successCount:d.success.length,errorCount:d.error.length,filteredCount:d.filtered.length}}let c=e.config,a=await this.swarm.reduce({items:n,...c,_pipelineContext:o,retry:this.wrapRetry(c.retry,r,s),verify:this.wrapVerify(c.verify,r,s)});return {output:a,nextItems:[],successCount:a.status==="success"?1:0,errorCount:a.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(s,o,c)=>{e.onItemRetry?.(s,o,c),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:s,attempt:o,error:c});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(s,o,c)=>{e.onWorkerComplete?.(s,o,c),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:s,attempt:o,status:c});},onVerifierComplete:(s,o,c,a)=>{e.onVerifierComplete?.(s,o,c,a),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:s,attempt:o,passed:c,feedback:a});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(s,o,c)=>{e.onCandidateComplete?.(s,o,c),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:s,candidateIndex:o,status:c});},onJudgeComplete:(s,o,c)=>{e.onJudgeComplete?.(s,o,c),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:s,winnerIndex:o,reasoning:c});}}}},Je=class t extends ze{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 As=6e5,Ms=5e3;function vr(t,e,n){let r=e??n;if(!Number.isFinite(r)||r<=0)throw new Error(`${t} must be a positive number`);return r}function $s(t){let e=t?.apiKey||process.env[I];if(!e)throw new Error(`sessions() requires an API key. Set ${I} or pass { apiKey } in config.`);let n=t?.dashboardUrl||E;async function r(a,l){let d=await fetch(`${n}${a}`,{...l,headers:{Authorization:`Bearer ${e}`,...l?.headers}});if(!d.ok){let i=await d.text().catch(()=>"");throw new Error(`Dashboard API error (${d.status}): ${i||d.statusText}`)}return d}function s(a){return {id:a.id,tag:a.tag,agent:a.agent,model:a.model||null,provider:a.provider,sandboxId:a.sandboxId||null,state:a.isEnded?"ended":"live",runtimeStatus:a.runtimeStatus||"unknown",cost:typeof a.cost=="number"?a.cost:null,createdAt:a.createdAt,endedAt:a.endedAt||null,stepCount:a.stepCount||0,toolStats:a.toolStats||null}}function o(a,l){if(a.status!=="ready")throw new Error(`Browser replay is not ready (status: ${String(a.status||"unknown")})`);if(typeof a.replayUrl!="string"||typeof a.downloadUrl!="string")throw new Error("Browser replay response missing replayUrl or downloadUrl");return {sessionId:a.sessionId||l,status:"ready",replayUrl:a.replayUrl,downloadUrl:a.downloadUrl,suggestedStartSeconds:typeof a.suggestedStartSeconds=="number"?a.suggestedStartSeconds:void 0,sizeBytes:typeof a.sizeBytes=="number"?a.sizeBytes:void 0,readyAt:typeof a.readyAt=="string"?a.readyAt:void 0}}let c=a=>new Promise(l=>setTimeout(l,a));return {async list(a){let l=new URLSearchParams({paginationMode:"cursor",pageSize:String(Math.min(a?.limit??20,200)),paginated:"true"});if(a?.cursor&&l.set("cursor",a.cursor),a?.state&&a.state!=="all"&&l.set("state",a.state),a?.agent&&l.set("agent",a.agent),a?.tagPrefix&&l.set("tagPrefix",a.tagPrefix),a?.sort){let p={newest:"desc",oldest:"asc",cost:"desc"};l.set("sortDirection",p[a.sort]),a.sort==="cost"?l.set("sortField","cost"):l.set("sortField","timestamp");}let i=await(await r(`/api/sessions?${l}`)).json();return {items:(i.items||[]).map(s),nextCursor:i.nextCursor||null,hasMore:!!i.hasMore}},async get(a){let d=await(await r(`/api/sessions/${encodeURIComponent(a)}`)).json();return s(d)},async events(a,l){let d=new URLSearchParams;l?.since!=null&&d.set("since",String(l.since));let i=d.toString();return (await(await r(`/api/sessions/${encodeURIComponent(a)}/events${i?`?${i}`:""}`)).json()).events||[]},async download(a,l){let p=(await(await r(`/api/sessions/${encodeURIComponent(a)}`)).json()).tag||a,u=await fetch(`${n}/api/sessions/${encodeURIComponent(a)}/download`,{headers:{Authorization:`Bearer ${e}`},redirect:"follow"});if(!u.ok){let h=await u.text().catch(()=>"");throw new Error(`Download failed (${u.status}): ${h||u.statusText}`)}let g=l?.to||process.cwd();await promises.mkdir(g,{recursive:true});let f=ae.join(g,`${p}.jsonl`);if(!u.body)throw new Error("Download response has no body");let m=stream.Readable.fromWeb(u.body);return await promises$1.pipeline(m,$.createWriteStream(f)),f},async browserReplay(a,l){let d=vr("timeoutMs",l?.timeoutMs,As),i=vr("intervalMs",l?.intervalMs,Ms),p=Date.now()+d,u=`/api/sessions/${encodeURIComponent(a)}/browser-replay`;for(;;){let g=p-Date.now();if(g<=0)throw new Error(`Browser replay timed out after ${d}ms`);let f;try{f=await fetch(`${n}${u}`,{headers:{Authorization:`Bearer ${e}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,g))});}catch(h){let y=h.name;throw y==="AbortError"||y==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):h}let m={};if(f.ok)m=await f.json();else {let h=await f.text().catch(()=>"");throw new Error(`Dashboard API error (${f.status}): ${h||f.statusText}`)}if(m.status==="ready")return o(m,a);if(m.status==="failed"){let h=typeof m.error=="string"?m.error:"unknown error";throw new Error(`Browser replay failed: ${h}`)}if(Date.now()>=p)throw new Error(`Browser replay timed out after ${d}ms`);await c(Math.min(i,Math.max(0,p-Date.now())));}}}}Object.defineProperty(exports,"E2BProvider",{enumerable:true,get:function(){return e2b.E2BProvider}});Object.defineProperty(exports,"createE2BProvider",{enumerable:true,get:function(){return e2b.createE2BProvider}});Object.defineProperty(exports,"DaytonaProvider",{enumerable:true,get:function(){return daytona.DaytonaProvider}});Object.defineProperty(exports,"createDaytonaProvider",{enumerable:true,get:function(){return daytona.createDaytonaProvider}});Object.defineProperty(exports,"ModalProvider",{enumerable:true,get:function(){return modal.ModalProvider}});Object.defineProperty(exports,"createModalProvider",{enumerable:true,get:function(){return modal.createModalProvider}});exports.AGENT_REGISTRY=Ye;exports.AGENT_TYPES=xr;exports.Agent=he;exports.BROWSER_ACTIONBOOK_PROMPT=wt;exports.BROWSER_LOGIN_MCP_SERVER_NAME=$t;exports.BrowserCredentialsClient=Ge;exports.BrowserProfilesClient=We;exports.Evolve=ye;exports.JUDGE_PROMPT=bt;exports.Pipeline=ze;exports.RETRY_FEEDBACK_PROMPT=St;exports.SCHEMA_PROMPT=Sn;exports.SWARM_RESULT_BRAND=J;exports.SYSTEM_PROMPT=vn;exports.Semaphore=ee;exports.Swarm=Ut;exports.SwarmResultList=te;exports.TerminalPipeline=Je;exports.VALIDATION_PRESETS=He;exports.VERIFY_PROMPT=vt;exports.WORKSPACE_PROMPT=wn;exports.WORKSPACE_SWE_PROMPT=bn;exports.applyTemplate=F;exports.browserCredentials=Dt;exports.browserProfiles=Bt;exports.buildWorkerSystemPrompt=kt;exports.createAgentParser=z;exports.createClaudeParser=Me;exports.createCodexParser=$e;exports.createDroidParser=De;exports.createGeminiParser=Be;exports.executeWithRetry=P;exports.expandPath=V;exports.getAgentConfig=D;exports.getMcpSettingsDir=U;exports.getMcpSettingsPath=B;exports.isValidAgentType=_r;exports.isZodSchema=M;exports.jsonSchemaToString=Y;exports.parseNdjsonLine=ni;exports.parseNdjsonOutput=ri;exports.parseQwenOutput=nn;exports.readLocalDir=rn;exports.resolveStorageConfig=je;exports.saveLocalDir=sn;exports.sessions=$s;exports.storage=Zi;exports.writeClaudeMcpConfig=Se;exports.writeCodexMcpConfig=Ae;exports.writeDroidGatewaySettings=Ee;exports.writeDroidMcpConfig=_e;exports.writeGeminiMcpConfig=ke;exports.writeMcpConfig=ct;exports.writeQwenMcpConfig=xe;exports.zodSchemaToJson=q;
245
+ `}],directories:[cs]}:{envs:{AGENT_BROWSER_CONFIG:ss},files:[{path:ss,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
246
+ `}],directories:[as]}}function us(t){return (t?.dashboardUrl||C).replace(/\/$/,"")}async function ps(t){return await t.text().catch(()=>"")}async function gs(t,e,n={}){let r=await fetch(`${us(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 ps(r)}`);let s=await r.json();if(!s.id||!s.sessionId||!s.cdpUrl||!s.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:s.id,sessionId:s.sessionId,sessionTag:s.sessionTag,cdpUrl:s.cdpUrl,liveUrl:s.liveUrl,browserAuthGrantToken:s.browserAuthGrantToken}}async function ms(t,e){let n=await fetch(`${us(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 ps(n)}`)}var jo="RSA-OAEP-256",bn="browser-login";function Jo(t){return (t||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"")}function Vo(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 Ho(t){return await t.text().catch(()=>"")}async function Me(t,e,n={}){let r=await fetch(`${Jo(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Vo(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 Ho(r)}`);return await r.json()}async function Go(t,e){let n=await Me(t,"/api/browser-credentials/public-key"),r=crypto.publicEncrypt({key:n.publicKey,padding:crypto.constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:jo,keyId:n.id,ciphertext:r.toString("base64url")}}var ft=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()}`:"",s=await Me(this.config,`/api/browser-credentials${r}`);return {credentials:s.credentials.map(a=>this.toMetadata(a)),total:s.total,count:s.count,offset:s.offset,hasMore:s.has_more??s.offset+s.count<s.total}}async create(e){let n=await Go(this.config,e.password),r=await Me(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 Me(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function vn(t={}){return new ft(t)}async function fs(t){return (await Me({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:zo(t.config)})})).server}function zo(t){return t?.allow?.map(e=>({website:e.website,...e.accountLabel||e.account_label?{account_label:e.accountLabel||e.account_label}:{}}))}var kn="x-evolve-provider-runtime-binding";function Wo(t){return (t||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"")}async function qo(t){return await t.text().catch(()=>"")}var De=class extends Error{constructor(n,r){super(r);this.status=n;this.name="ProviderRuntimeTokenRequestError";}};function hs(t){return t instanceof De&&t.status===404}async function Sn(t,e,n={}){let r=await fetch(`${Wo(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 De(r.status,`Provider runtime token request failed (${r.status}): ${await qo(r)}`);return await r.json()}function Yo(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 ys(t,e){let n=await Sn(t,"/api/provider-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!Yo(n))throw new De(502,"Provider runtime token response was invalid");return n}async function ws(t,e){return (await Sn(t,"/api/provider-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function bs(t,e){return (await Sn(t,"/api/provider-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}var yt=18181,O="/tmp/evolve-managed-secrets",Ue=`${O}/proxy.py`,de=`${O}/config.json`,te=`${O}/ca.crt`,ht=`${O}/ca.key`,le=`${O}/ca-bundle.crt`,Ss=["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","http_proxy","https_proxy","all_proxy","NO_PROXY","no_proxy","NODE_EXTRA_CA_CERTS","SSL_CERT_FILE","REQUESTS_CA_BUNDLE","CURL_CA_BUNDLE","GIT_SSL_CAINFO"];function xs(){return [...Ss]}var Cs=String.raw`#!/usr/bin/env python3
247
+ import base64
248
+ import json
249
+ import os
250
+ import select
251
+ import secrets
252
+ import socket
253
+ import ssl
254
+ import subprocess
255
+ import sys
256
+ import tempfile
257
+ import threading
258
+ import urllib.error
259
+ import urllib.request
260
+
261
+ for key in ["HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "http_proxy", "https_proxy", "all_proxy"]:
262
+ os.environ.pop(key, None)
263
+
264
+ CONFIG_PATH = sys.argv[1]
265
+ with open(CONFIG_PATH, "r", encoding="utf-8") as f:
266
+ CONFIG = json.load(f)
267
+ try:
268
+ os.unlink(CONFIG_PATH)
269
+ except FileNotFoundError:
270
+ pass
271
+
272
+ MAX_BODY_BYTES = int(CONFIG.get("max_body_bytes", 10 * 1024 * 1024))
273
+ CONNECT_TIMEOUT_SECONDS = 15
274
+ SOCKET_TIMEOUT_SECONDS = 130
275
+ MAX_WORKERS = 100
276
+ WORKERS = threading.BoundedSemaphore(MAX_WORKERS)
277
+ HOST_PATTERNS = [h.lower() for h in CONFIG["hosts"]]
278
+ PLACEHOLDERS = set(CONFIG["placeholders"])
279
+ PLACEHOLDER_BYTES = [p.encode("utf-8") for p in CONFIG["placeholders"]]
280
+ BASE_DIR = CONFIG["base_dir"]
281
+ CERT_DIR = os.path.join(BASE_DIR, "certs")
282
+ os.makedirs(CERT_DIR, exist_ok=True)
283
+ CHANNEL_SECRET = secrets.token_urlsafe(32)
284
+
285
+ def register_channel():
286
+ payload = json.dumps({}).encode("utf-8")
287
+ req = urllib.request.Request(
288
+ CONFIG["channel_url"],
289
+ data=payload,
290
+ method="POST",
291
+ headers={
292
+ "content-type": "application/json",
293
+ "accept": "application/json",
294
+ "x-evolve-managed-secret-token": CONFIG["token"],
295
+ "x-evolve-managed-secret-binding": CONFIG["binding"],
296
+ "x-evolve-managed-secret-channel": CHANNEL_SECRET,
297
+ },
298
+ )
299
+ with urllib.request.urlopen(req, timeout=30) as resp:
300
+ if resp.status < 200 or resp.status >= 300:
301
+ raise RuntimeError("managed secret channel registration failed")
302
+
303
+ def host_matches(pattern, host):
304
+ host = host.lower()
305
+ if pattern.startswith("*."):
306
+ base = pattern[2:]
307
+ return host != base and host.endswith("." + base)
308
+ return host == pattern
309
+
310
+ def is_managed_host(host):
311
+ clean = host.split(":", 1)[0].strip("[]").lower()
312
+ return any(host_matches(pattern, clean) for pattern in HOST_PATTERNS)
313
+
314
+ def safe_name(host):
315
+ return "".join(ch if ch.isalnum() or ch in "._-" else "_" for ch in host)[:180]
316
+
317
+ def ensure_cert(host):
318
+ name = safe_name(host)
319
+ cert = os.path.join(CERT_DIR, name + ".crt")
320
+ key = os.path.join(CERT_DIR, name + ".key")
321
+ if os.path.exists(cert) and os.path.exists(key):
322
+ return cert, key
323
+ csr = os.path.join(CERT_DIR, name + ".csr")
324
+ ext = os.path.join(CERT_DIR, name + ".ext")
325
+ san = "IP:" + host if host.replace(".", "").isdigit() else "DNS:" + host
326
+ with open(ext, "w", encoding="utf-8") as f:
327
+ f.write("basicConstraints=critical,CA:FALSE\n")
328
+ f.write("keyUsage=critical,digitalSignature,keyEncipherment\n")
329
+ f.write("subjectAltName=" + san + "\n")
330
+ f.write("extendedKeyUsage=serverAuth\n")
331
+ subprocess.run(
332
+ ["openssl", "req", "-newkey", "rsa:2048", "-nodes", "-keyout", key, "-subj", "/CN=" + host, "-out", csr],
333
+ check=True,
334
+ stdout=subprocess.DEVNULL,
335
+ stderr=subprocess.DEVNULL,
336
+ )
337
+ subprocess.run(
338
+ [
339
+ "openssl", "x509", "-req", "-in", csr,
340
+ "-CA", CONFIG["ca_cert"], "-CAkey", CONFIG["ca_key"], "-CAcreateserial",
341
+ "-out", cert, "-days", "30", "-sha256", "-extfile", ext,
342
+ ],
343
+ check=True,
344
+ stdout=subprocess.DEVNULL,
345
+ stderr=subprocess.DEVNULL,
346
+ )
347
+ return cert, key
348
+
349
+ def pipe_raw(client, host, port):
350
+ upstream = socket.create_connection((host, port), timeout=CONNECT_TIMEOUT_SECONDS)
351
+ client.settimeout(SOCKET_TIMEOUT_SECONDS)
352
+ upstream.settimeout(SOCKET_TIMEOUT_SECONDS)
353
+ try:
354
+ client.sendall(b"HTTP/1.1 200 Connection Established\r\n\r\n")
355
+ sockets = [client, upstream]
356
+ while True:
357
+ readable, _, _ = select.select(sockets, [], [], 120)
358
+ if not readable:
359
+ break
360
+ for sock in readable:
361
+ data = sock.recv(65536)
362
+ if not data:
363
+ return
364
+ (upstream if sock is client else client).sendall(data)
365
+ finally:
366
+ upstream.close()
367
+
368
+ def recv_until(sock, marker, limit=65536):
369
+ data = b""
370
+ while marker not in data:
371
+ chunk = sock.recv(4096)
372
+ if not chunk:
373
+ break
374
+ data += chunk
375
+ if len(data) > limit:
376
+ raise RuntimeError("request headers too large")
377
+ return data
378
+
379
+ def parse_headers(blob):
380
+ head, rest = blob.split(b"\r\n\r\n", 1)
381
+ lines = head.decode("iso-8859-1").split("\r\n")
382
+ request_line = lines[0]
383
+ headers = {}
384
+ for line in lines[1:]:
385
+ if not line or ":" not in line:
386
+ continue
387
+ name, value = line.split(":", 1)
388
+ headers[name.strip()] = value.strip()
389
+ return request_line, headers, rest
390
+
391
+ def header_value(headers, name):
392
+ wanted = name.lower()
393
+ for key, value in headers.items():
394
+ if key.lower() == wanted:
395
+ return value
396
+ return None
397
+
398
+ def read_chunked_body(sock, initial):
399
+ data = initial
400
+ body = b""
401
+ while True:
402
+ while b"\r\n" not in data:
403
+ chunk = sock.recv(4096)
404
+ if not chunk:
405
+ raise RuntimeError("incomplete chunked request")
406
+ data += chunk
407
+ line, data = data.split(b"\r\n", 1)
408
+ size = int((line.split(b";", 1)[0].strip() or b"0"), 16)
409
+ if size == 0:
410
+ return body
411
+ if len(body) + size > MAX_BODY_BYTES:
412
+ raise RuntimeError("request body too large")
413
+ while len(data) < size + 2:
414
+ chunk = sock.recv(65536)
415
+ if not chunk:
416
+ raise RuntimeError("incomplete chunked request")
417
+ data += chunk
418
+ body += data[:size]
419
+ data = data[size + 2:]
420
+
421
+ def read_request(tls_sock):
422
+ blob = recv_until(tls_sock, b"\r\n\r\n")
423
+ if not blob:
424
+ return None
425
+ request_line, headers, rest = parse_headers(blob)
426
+ transfer_encoding = (header_value(headers, "Transfer-Encoding") or "").lower()
427
+ if "chunked" in transfer_encoding:
428
+ return request_line, headers, read_chunked_body(tls_sock, rest)
429
+ length = int(header_value(headers, "Content-Length") or "0")
430
+ if length > MAX_BODY_BYTES:
431
+ raise RuntimeError("request body too large")
432
+ body = rest
433
+ while len(body) < length:
434
+ chunk = tls_sock.recv(min(65536, length - len(body)))
435
+ if not chunk:
436
+ break
437
+ body += chunk
438
+ return request_line, headers, body[:length]
439
+
440
+ def uses_placeholder(path, headers, body):
441
+ if any(ph in path for ph in PLACEHOLDERS):
442
+ return True
443
+ if any(ph in value for ph in PLACEHOLDERS for value in headers.values()):
444
+ return True
445
+ return any(ph_b in body for ph_b in PLACEHOLDER_BYTES)
446
+
447
+ def call_dashboard(method, url, headers, body):
448
+ payload = json.dumps({
449
+ "method": method,
450
+ "url": url,
451
+ "headers": headers,
452
+ "bodyBase64": base64.b64encode(body).decode("ascii") if body else "",
453
+ }).encode("utf-8")
454
+ req = urllib.request.Request(
455
+ CONFIG["egress_url"],
456
+ data=payload,
457
+ method="POST",
458
+ headers={
459
+ "content-type": "application/json",
460
+ "accept": "application/json",
461
+ "x-evolve-managed-secret-token": CONFIG["token"],
462
+ "x-evolve-managed-secret-binding": CONFIG["binding"],
463
+ "x-evolve-managed-secret-channel": CHANNEL_SECRET,
464
+ },
465
+ )
466
+ try:
467
+ with urllib.request.urlopen(req, timeout=130) as resp:
468
+ return resp.status, resp.reason, json.loads(resp.read().decode("utf-8"))
469
+ except urllib.error.HTTPError as err:
470
+ text = err.read().decode("utf-8", "replace")
471
+ return err.code, "Managed Secret Egress Error", {"headers": {"content-type": "application/json"}, "bodyBase64": base64.b64encode(text.encode()).decode("ascii")}
472
+
473
+ def read_limited_response(stream):
474
+ chunks = []
475
+ total = 0
476
+ while True:
477
+ chunk = stream.read(65536)
478
+ if not chunk:
479
+ break
480
+ total += len(chunk)
481
+ if total > MAX_BODY_BYTES:
482
+ raise RuntimeError("response body too large")
483
+ chunks.append(chunk)
484
+ return b"".join(chunks)
485
+
486
+ def call_direct(method, url, headers, body):
487
+ hop_by_hop = {"connection", "proxy-connection", "keep-alive", "transfer-encoding", "upgrade", "host", "content-length"}
488
+ request_headers = {k: v for k, v in headers.items() if k.lower() not in hop_by_hop}
489
+ req = urllib.request.Request(
490
+ url,
491
+ data=body if body else None,
492
+ method=method,
493
+ headers=request_headers,
494
+ )
495
+ try:
496
+ with urllib.request.urlopen(req, timeout=130) as resp:
497
+ return resp.status, resp.reason, {
498
+ "headers": dict(resp.headers.items()),
499
+ "bodyBase64": base64.b64encode(read_limited_response(resp)).decode("ascii"),
500
+ }
501
+ except urllib.error.HTTPError as err:
502
+ return err.code, err.reason, {
503
+ "headers": dict(err.headers.items()),
504
+ "bodyBase64": base64.b64encode(read_limited_response(err)).decode("ascii"),
505
+ }
506
+
507
+ def send_response(tls_sock, status, reason, result):
508
+ body = base64.b64decode(result.get("bodyBase64") or "")
509
+ headers = {str(k): str(v) for k, v in (result.get("headers") or {}).items()}
510
+ headers["content-length"] = str(len(body))
511
+ headers["connection"] = "close"
512
+ status_line = ("HTTP/1.1 %d %s\r\n" % (status, reason or "")).encode("ascii", "replace")
513
+ header_blob = b"".join((name + ": " + value + "\r\n").encode("iso-8859-1", "replace") for name, value in headers.items())
514
+ tls_sock.sendall(status_line + header_blob + b"\r\n" + body)
515
+
516
+ def dispatch_managed_request(method, url, headers, body):
517
+ if uses_placeholder(url, headers, body):
518
+ return call_dashboard(method, url, headers, body)
519
+ return call_direct(method, url, headers, body)
520
+
521
+ def handle_managed_connect(client, host, port):
522
+ client.sendall(b"HTTP/1.1 200 Connection Established\r\n\r\n")
523
+ cert, key = ensure_cert(host)
524
+ ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
525
+ ctx.load_cert_chain(cert, key)
526
+ client.settimeout(SOCKET_TIMEOUT_SECONDS)
527
+ tls_sock = ctx.wrap_socket(client, server_side=True)
528
+ tls_sock.settimeout(SOCKET_TIMEOUT_SECONDS)
529
+ try:
530
+ request = read_request(tls_sock)
531
+ if not request:
532
+ return
533
+ request_line, headers, body = request
534
+ parts = request_line.split()
535
+ if len(parts) < 2:
536
+ raise RuntimeError("bad request line")
537
+ method, path = parts[0].upper(), parts[1]
538
+ if path.startswith("http://") or path.startswith("https://"):
539
+ url = path
540
+ else:
541
+ url = "https://%s%s" % (host if port == 443 else host + ":" + str(port), path)
542
+ status, reason, result = dispatch_managed_request(method, url, headers, body)
543
+ send_response(tls_sock, status, reason, result)
544
+ finally:
545
+ try:
546
+ tls_sock.close()
547
+ except Exception:
548
+ pass
549
+
550
+ def handle_client(client):
551
+ try:
552
+ client.settimeout(SOCKET_TIMEOUT_SECONDS)
553
+ blob = recv_until(client, b"\r\n\r\n")
554
+ if not blob:
555
+ return
556
+ request_line, headers, rest = parse_headers(blob)
557
+ parts = request_line.split()
558
+ if len(parts) < 3:
559
+ return
560
+ if parts[0].upper() == "CONNECT":
561
+ target = parts[1]
562
+ if ":" in target:
563
+ host, port_s = target.rsplit(":", 1)
564
+ port = int(port_s)
565
+ else:
566
+ host, port = target, 443
567
+ host = host.strip("[]")
568
+ if is_managed_host(host):
569
+ handle_managed_connect(client, host, port)
570
+ else:
571
+ pipe_raw(client, host, port)
572
+ return
573
+ client.sendall(b"HTTP/1.1 501 Not Implemented\r\ncontent-length: 0\r\nconnection: close\r\n\r\n")
574
+ except Exception as exc:
575
+ try:
576
+ body = json.dumps({"error": str(exc)}).encode("utf-8")
577
+ client.sendall(b"HTTP/1.1 502 Bad Gateway\r\ncontent-type: application/json\r\ncontent-length: " + str(len(body)).encode() + b"\r\nconnection: close\r\n\r\n" + body)
578
+ except Exception:
579
+ pass
580
+ finally:
581
+ try:
582
+ client.close()
583
+ except Exception:
584
+ pass
585
+
586
+ def serve():
587
+ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
588
+ server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
589
+ server.bind(("127.0.0.1", int(CONFIG["port"])))
590
+ server.listen(100)
591
+ while True:
592
+ client, _ = server.accept()
593
+ if not WORKERS.acquire(blocking=False):
594
+ try:
595
+ client.sendall(b"HTTP/1.1 503 Service Unavailable\r\ncontent-length: 0\r\nconnection: close\r\n\r\n")
596
+ except Exception:
597
+ pass
598
+ client.close()
599
+ continue
600
+ def run_client():
601
+ try:
602
+ handle_client(client)
603
+ finally:
604
+ WORKERS.release()
605
+ thread = threading.Thread(target=run_client, daemon=True)
606
+ thread.start()
607
+
608
+ if __name__ == "__main__":
609
+ register_channel()
610
+ serve()
611
+ `;function Xo(t){return (t||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"")}function Qo(t){let e=t.apiKey||process.env.EVOLVE_API_KEY;if(!e)throw new Error("EVOLVE_API_KEY is required for managed secrets");return e}async function Zo(t){return await t.text().catch(()=>"")}async function wt(t,e,n={}){let r=await fetch(`${Xo(t.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Qo(t)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!r.ok)throw new Error(`Managed secrets request failed (${r.status}): ${await Zo(r)}`);return await r.json()}function xn(t={}){return {async list(){return (await wt(t,"/api/managed-secrets")).secrets??[]}}}function ea(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}function vs(t){try{return new URL(t).protocol==="https:"}catch{return false}}function ta(t){if(!t||typeof t!="object"||Array.isArray(t))return false;let e=t;return typeof e.token=="string"&&e.token.startsWith("evrt_")&&typeof e.bindingSecret=="string"&&e.bindingSecret.startsWith("evrb_")&&typeof e.egressUrl=="string"&&vs(e.egressUrl)&&typeof e.channelUrl=="string"&&vs(e.channelUrl)&&typeof e.expiresAt=="string"&&Array.isArray(e.env)&&e.env.every(n=>{if(!n||typeof n!="object"||Array.isArray(n))return false;let r=n;return typeof r.name=="string"&&typeof r.envName=="string"&&typeof r.placeholder=="string"&&r.placeholder.startsWith("evsec_")&&ea(r.allowedHosts)})}async function Es(t,e){let n=await wt(t,"/api/managed-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!ta(n))throw new Error("Invalid managed secret runtime token response");return n}async function Rs(t,e){return (await wt(t,"/api/managed-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function _s(t,e){return (await wt(t,"/api/managed-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}function na(t){if(!Array.isArray(t)||t.length===0)throw new Error("withManagedSecrets() requires at least one secret");return t.map((e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`managedSecrets[${n}] must be an object with a name`);let r=ks(e.name,`managedSecrets[${n}].name`),s=e.as===void 0?void 0:ks(e.as,`managedSecrets[${n}].as`);return s?{name:r,as:s}:{name:r}})}function ks(t,e){if(typeof t!="string"||!t.trim())throw new Error(`${e} is required`);let n=t.trim().toUpperCase();if(!/^[A-Z_][A-Z0-9_]{0,127}$/.test(n))throw new Error(`${e} must be a valid environment variable name`);if(n.startsWith("EVOLVE_"))throw new Error(`${e} cannot use the reserved EVOLVE_ prefix`);return n}function ra(t){let e=new Set(["EVOLVE_API_KEY","EVOLVE_PROVIDER_RUNTIME_BINDING","GEMINI_DEFAULT_AUTH_TYPE",...Ss]),n=r=>{r&&e.add(r);};n(t.apiKeyEnv),n(t.baseUrlEnv),n(t.customHeadersEnv),n(t.gatewayConfigEnv),t.spendTrackingEnvs&&(n(t.spendTrackingEnvs.sessionTagEnv),n(t.spendTrackingEnvs.runTagEnv));for(let r of Object.values(t.providerEnvMap??{}))n(r.keyEnv);return e}function Ts(t,e){if(!t)return;let n=na(t),r=ra(e),s=new Set;for(let a of n){let c=a.as||a.name;if(r.has(c))throw new Error(`${c} is reserved for Evolve-managed sandbox services and cannot be used as a managed secret env var`);if(s.has(c))throw new Error(`duplicate managed secret env var: ${c}`);s.add(c);}return n}function Ps(t){let e={};for(let s of t.env)e[s.envName]=s.placeholder;let n=`http://127.0.0.1:${yt}`;e.HTTPS_PROXY=n,e.https_proxy=n,e.NODE_EXTRA_CA_CERTS=te,e.SSL_CERT_FILE=le,e.REQUESTS_CA_BUNDLE=le,e.CURL_CA_BUNDLE=le,e.GIT_SSL_CAINFO=le;let r=new URL(t.egressUrl).hostname;return e.NO_PROXY=`localhost,127.0.0.1,::1,${r}`,e.no_proxy=e.NO_PROXY,e}function Is(t){let e=Array.from(new Set(t.env.flatMap(n=>n.allowedHosts)));return JSON.stringify({egress_url:t.egressUrl,channel_url:t.channelUrl,token:t.token,binding:t.bindingSecret,hosts:e,placeholders:t.env.map(n=>n.placeholder),base_dir:O,ca_cert:te,ca_key:ht,port:yt,max_body_bytes:10*1024*1024},null,2)}function As(){return ["umask 077",`mkdir -p ${O}/certs`,`chmod 700 ${O} ${O}/certs`,`chmod 700 ${Ue} 2>/dev/null || true`,`chmod 600 ${de} 2>/dev/null || true`,`if [ ! -f ${ht} ]; then openssl genrsa -out ${ht} 2048 >/dev/null 2>&1; fi`,`if [ ! -f ${te} ]; then openssl req -x509 -new -nodes -key ${ht} -sha256 -days 30 -subj "/CN=Evolve Managed Secrets" -addext "basicConstraints=critical,CA:TRUE" -addext "keyUsage=critical,keyCertSign,cRLSign" -out ${te} >/dev/null 2>&1; fi`,`SYSTEM_CA_BUNDLE=""; for p in /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem; do if [ -f "$p" ]; then SYSTEM_CA_BUNDLE="$p"; break; fi; done; if [ -n "$SYSTEM_CA_BUNDLE" ]; then cat "$SYSTEM_CA_BUNDLE" ${te} > ${le}; else cp ${te} ${le}; fi`,`if command -v update-ca-certificates >/dev/null 2>&1; then cp ${te} /usr/local/share/ca-certificates/evolve-managed-secrets.crt 2>/dev/null && update-ca-certificates >/dev/null 2>&1 || true; fi`].join(" && ")}function Os(){return `umask 077 && exec python3 ${Ue} ${de}`}function Ms(){return `rm -f ${de}`}var bt=256,Ds=100*1024*1024,Us=500*1024*1024;function Be(t){return `'${t.replaceAll("'",`'"'"'`)}'`}function sa(t){let e=t.trim();if(e==="")return [];let n=Buffer.from(e,"base64"),r=[],s=0;for(let a=0;a<n.length;a++)n[a]===0&&(r.push(n.toString("utf8",s,a)),s=a+1);return s<n.length&&r.push(n.toString("utf8",s,n.length)),r}async function Bs(t,e,n){if(n.length===0||n.length>bt)throw new Error(`collectArtifacts() requires between 1 and ${bt} paths.`);let r=n.map(u=>{if(!u||u.includes("\0"))throw new Error(`Invalid artifact path: ${JSON.stringify(u)}`);let p=xe.posix.normalize(u);if(!xe.posix.isAbsolute(p)&&(p===".."||p.startsWith("../")))throw new Error(`Artifact path escapes the working directory: ${u}`);return xe.posix.isAbsolute(p)?p:xe.posix.join(e,p)}),a=(await t.commands.run(r.map(u=>`if [ ! -e ${Be(u)} ]; then echo MISSING ${Be(u)}; elif [ ! -r ${Be(u)} ]; then echo UNREADABLE ${Be(u)}; fi`).join("; "),{cwd:e,timeoutMs:15e3})).stdout.split(`
612
+ `).map(u=>u.trim()).filter(Boolean);if(a.length>0)throw new Error(`Artifact roots are not collectable: ${a.join("; ")}`);let c;try{c=await t.commands.run(`set -o pipefail 2>/dev/null; find -- ${r.map(Be).join(" ")} -type f -printf '%p\\0%s\\0' | base64 -w0`,{cwd:e,timeoutMs:3e4});}catch(u){throw new Error(`Artifact listing failed: ${u.message}`)}if(c.exitCode!==0)throw new Error(`Artifact listing failed (exit ${c.exitCode}): ${(c.stderr||"").slice(0,500)}`);let o=sa(c.stdout);if(o.length%2!==0)throw new Error("Sandbox returned malformed artifact metadata.");let l=new Map,d=0;for(let u=0;u<o.length;u+=2){let p=o[u],g=Number(o[u+1]);if(!Number.isSafeInteger(g)||g<0)throw new Error(`Sandbox returned an invalid artifact size: ${p}`);if(g>Ds)throw new Error(`Artifact exceeds ${Ds} bytes: ${p}`);l.has(p)||(l.set(p,g),d+=g);}if(l.size>bt)throw new Error(`Artifact collection exceeds ${bt} files.`);if(d>Us)throw new Error(`Artifact collection exceeds ${Us} bytes.`);let i={};for(let u of [...l.keys()].sort()){let p=r.some(f=>u===f||u.startsWith(`${f.replace(/\/$/,"")}/`));if(!xe.posix.isAbsolute(u)||!p)throw new Error(`Sandbox returned an invalid artifact path: ${u}`);let g=xe.posix.relative(e,u),m=g&&g!==".."&&!g.startsWith("../")?g:u;i[m]=await t.files.read(u);}return i}var vt="EVOLVE_PROVIDER_RUNTIME_BINDING",Cn="gemini-api-key";function $e(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 ca(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function $s(t){return `${t}-${crypto.randomBytes(8).toString("hex")}`}function En(t,e,n="newline"){let r=new Map;if(t){let s=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let a of s){let c=a.trim();if(!c)continue;let o=c.indexOf(":");if(o<=0)continue;let l=c.slice(0,o).trim(),d=c.slice(o+1).trim();r.set(l.toLowerCase(),`${l}: ${d}`);}}for(let[s,a]of Object.entries(e)){let c=s.toLowerCase();if(c===V&&r.has(c)&&n==="newline"){let o=r.get(c),l=o.slice(o.indexOf(":")+1).trim();r.set(c,`${s}: ${l},${a}`);}else r.set(c,`${s}: ${a}`);}return Array.from(r.values()).join(n==="comma"?", ":`
613
+ `)}var la=262144,da=128e3;function Ls(t,e){if(t.models.some(s=>s.alias===e||s.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)))}var ua=new Set(["low","medium","high","xhigh","max"]);function Ns(t){if(t)return ua.has(t)?t:void 0}function kt(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}var Le=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;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(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&&!Ce(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=Fn(n.sandboxCreateOptions?.user,n.sandboxCreateOptions?.homeDir),this.homeDir!==F){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(j(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=$(e.type),this.sessionTag=$s(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,s){let a=++this.nextOperationId;return this.activeOperationId=a,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,s),a}finalizeOperation(e,n,r,s="idle",a="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=a,this.agentState=s,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,s,a){let c=n==="run"?"run_background_complete":"command_background_complete",o=n==="run"?"run_background_failed":"command_background_failed",l=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async d=>{if(this.interruptedOperations.delete(e)||d.exitCode===130){this.finalizeOperation(e,s,l,"interrupted");return}n==="run"&&a&&await this.writeDroidSessionState(a);let u=d.exitCode===0?c:o,p=d.exitCode===0?"idle":"error";this.finalizeOperation(e,s,u,p);}).catch(()=>{this.interruptedOperations.delete(e),this.finalizeOperation(e,s,o,"error");});}createAjvValidator(){let n={...Mt[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 ia__default.default({...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 s=this.buildEnvironmentVariables();this.sandbox=await n.create(this.buildSandboxCreateOptions(s)),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(s){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"),s}return this.sandbox}resolveKimiMaxContextSize(){if(typeof this.agentConfig.maxContextSize=="number")return this.agentConfig.maxContextSize;let e=this.agentConfig.model||this.registry.defaultModel;return Ls(this.registry,e)||Ls(this.registry,this.resolveCommandModel(e))?this.registry.spendTrackingTomlProvider?.maxContextSize??la:da}buildKimiDirectModelEnvs(){let e=be(this.agentConfig.reasoningEffort),n=Ns(this.agentConfig.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&&$e(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],s=r?this.registry.providerEnvMap?.[r]:void 0,a=s?s.keyEnv:this.registry.apiKeyEnv,c=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:a;e[c]=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=N(this.registry.gatewayPath),s=this.requireActiveProviderRuntimeToken();if(this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[B]:this.sessionTag,...this.providerRuntimeHeaderUpdates()}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=s?.baseUrl??r),s&&(this.shouldExposeProviderRuntimeTokenEnv()&&(e[this.registry.apiKeyEnv]=s.token),this.agentConfig.type==="gemini"&&(e.GEMINI_DEFAULT_AUTH_TYPE=Cn),this.registry.spendTrackingEnvs&&(e[vt]=s.bindingSecret)),!s){if($e(this.agentConfig.type))throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);e[P]=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,wn(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.managedSecretRuntimeToken&&Object.assign(e,Ps(this.managedSecretRuntimeToken)),n&&Object.assign(e,n),!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,s=this.registry.customHeadersFormat||"newline";e[r]=En(e[r],{[B]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},s);}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(P),n.add(vt),this.agentConfig.type==="gemini"&&n.add("GEMINI_DEFAULT_AUTH_TYPE"));let r=a=>{a&&n.add(a);};r(this.registry.apiKeyEnv),r(this.registry.baseUrlEnv);for(let a of Object.values(this.registry.providerEnvMap??{}))r(a.keyEnv);if(this.managedSecretRuntimeToken)for(let a of xs())n.add(a);for(let a of this.managedSecretRuntimeToken?.env??[])r(a.envName);let s={};for(let[a,c]of Object.entries(e)){if(n.has(a))throw new Error(`${a} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);a!==this.registry.gatewayConfigEnv&&(s[a]=c);}return s}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await gs(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async ensureProviderRuntimeToken(){let e=$e(this.agentConfig.type);if(this.agentConfig.isDirectMode||!e||!this.options.providerRouting||this.providerRuntimeToken)return;let n;try{n=await ys(this.options.providerRouting,{provider:e,sessionTag:this.sessionTag});}catch(r){throw hs(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);}async bindProviderRuntimeToken(e){if(!this.providerRuntimeToken||!this.options.providerRouting)return;if(!await ws(this.options.providerRouting,{token:this.providerRuntimeToken.token,sandboxId:e}))throw new Error("Failed to bind provider runtime token to sandbox")}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=wn(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 ms(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 a=0;a<3;a++)try{if(!await bs(this.options.providerRouting,{token:n.token}))throw new Error("Dashboard returned ok=false");this.providerRuntimeToken=void 0;return}catch(c){r=c,a<2&&await new Promise(o=>setTimeout(o,100*(a+1)));}let s=`Provider runtime token cleanup failed: ${r.message}`;if(e)throw new Error(s);console.warn(`[Evolve] ${s}`),this.providerRuntimeToken=void 0;}async ensureManagedSecretRuntimeToken(){this.managedSecretRuntimeToken||!this.options.managedSecrets||(this.managedSecretRuntimeToken=await Es({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 Rs({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)return;if(await e.files.makeDir(O),await e.commands.run(`umask 077 && mkdir -p ${O}/certs && chmod 700 ${O} ${O}/certs`,{timeoutMs:5e3}),await e.files.write(Ue,Cs),await e.files.write(de,Is(this.managedSecretRuntimeToken)),await e.commands.run(`chmod 700 ${Ue} && chmod 600 ${de}`,{timeoutMs:5e3}),await e.commands.run(As(),{timeoutMs:3e4}),this.managedSecretProxy=await e.commands.spawn(Os(),{timeoutMs:3e4}),(await e.commands.run(`python3 - <<'PY'
614
+ import socket, sys, time
615
+ for _ in range(50):
616
+ try:
617
+ s = socket.create_connection(("127.0.0.1", ${yt}), timeout=0.2)
618
+ s.close()
619
+ sys.exit(0)
620
+ except OSError:
621
+ time.sleep(0.1)
622
+ sys.exit(1)
623
+ PY`,{timeoutMs:1e4})).exitCode!==0)throw new Error("Managed secret egress proxy failed to start");await e.commands.run(Ms(),{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 s=0;s<3;s++)try{if(!await _s({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:n.token}))throw new Error("Dashboard returned ok=false");return}catch(a){r=a,s<2&&await new Promise(c=>setTimeout(c,100*(s+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??kt(N(this.registry.gatewayPath)):n?.baseUrl??kt(N(this.registry.gatewayPath)),s=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),a={},c=this.options.secrets?.[this.registry.gatewayConfigEnv];if(c)try{a=JSON.parse(c);}catch{}let o=a.provider??{},l=o.litellm??{},d=l.options??{},i=l.models??{},u=i[s]??{},p=u.headers??{},g=this.agentConfig.type==="opencode"?Lt(this.agentConfig.reasoningEffort):void 0,m=u.variants??{},f=g?m[g]??{}:void 0;return a.provider={...o,litellm:{...l,npm:"@ai-sdk/openai-compatible",options:{...d,baseURL:r,apiKey:n?.token??this.agentConfig.apiKey},models:{...i,[s]:{...u,name:s,headers:{...p,...e},...g?{variants:{...m,[g]:{...f,reasoningEffort:g}}}:{}}}}},JSON.stringify(a)}activeProviderRuntimeToken(){let e=$e(this.agentConfig.type);return e&&this.providerRuntimeToken?.provider===e?this.providerRuntimeToken:void 0}requireActiveProviderRuntimeToken(){let e=$e(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 Re({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?{[kn]: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=Cn),this.registry.baseUrlEnv&&this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.baseUrlEnv]=e.baseUrl),this.registry.spendTrackingEnvs&&(n[vt]=e.bindingSecret),this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,s=this.registry.customHeadersFormat||"newline";n[r]=En(this.options.secrets?.[r],this.providerRuntimeHeaderUpdates(),s);}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 a=this.options.secrets?.[r],c=this.registry.customHeadersFormat||"newline";return n[r]=En(a,{[B]:this.sessionTag,[V]:`${Z}${e}`,...this.providerRuntimeHeaderUpdates()},c),n}let s=this.registry.spendTrackingEnvs;return s?{...n,[s.sessionTagEnv]:this.sessionTag,[s.runTagEnv]:`${Z}${e}`}:this.registry.gatewayConfigEnv?{...n,[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[B]:this.sessionTag,[V]:`${Z}${e}`,...this.providerRuntimeHeaderUpdates()})}:Object.keys(n).length>0?n:void 0}async writeCodexGatewayProviderConfig(e){if(this.agentConfig.type==="codex"){if(this.agentConfig.externalGateway){await nt(e,this.agentConfig.baseUrl||N(),void 0,void 0,this.homeDir);return}this.agentConfig.isDirectMode||!this.registry.spendTrackingEnvs||await nt(e,this.activeProviderRuntimeToken()?.baseUrl||this.agentConfig.baseUrl||N(),this.registry.spendTrackingEnvs,this.activeProviderRuntimeToken()?{[kn]:vt}:void 0,this.homeDir);}}captureDroidSession(e,n){if(this.agentConfig.type!=="droid")return;let r=n?.find(a=>typeof a.sessionId=="string"&&a.sessionId.length>0)?.sessionId;if(r){this.droidSessionId=r;return}let s=this.extractDroidSessionId(e);s&&(this.droidSessionId=s);}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)));}resolveGatewayModel(e){return this.agentConfig.isDirectMode?e:this.registry.gatewayModelAliases?.[e]??e}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??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 s={};try{let o=await e.files.read(r);typeof o=="string"&&o.trim()&&(s=JSON.parse(o));}catch(o){let l=o.message||"";if(!/not found|no such file|does not exist/i.test(l))throw o}let a=typeof s.security=="object"&&s.security!==null?s.security:{},c=typeof a.auth=="object"&&a.auth!==null?a.auth:{};s.security={...a,auth:{...c,selectedType:Cn}},await e.files.write(r,JSON.stringify(s,null,2));}async setupAgentPlugins(e){await rs(this.agentConfig.type,e,this.options.plugins);}assertProviderRuntimeDoesNotExposeGatewayKey(e){if(!this.activeProviderRuntimeToken())return;let n=this.agentConfig.apiKey;for(let[r,s]of Object.entries(e))for(let a of Object.values(s.headers||{}))if(a.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 a=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 ${a}`,{timeoutMs:3e4}),!n?.skipSystemPrompt){let c=an({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),o=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(o,c);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);}let s={...this.options.mcpServers};if(this.options.integrations){let a=await Pr({...this.options.integrations,sessionTag:this.sessionTag});s={...s,integrations:{type:"http",url:a.url,headers:a.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 a=await fs({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});s={...s,[bn]:a};}Object.keys(s).length>0&&(this.assertProviderRuntimeDoesNotExposeGatewayKey(s),await Gt(this.agentConfig.type,e,this.workingDir,s,this.homeDir)),await this.writeCodexGatewayProviderConfig(e),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await Qe(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[B]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.skills?.length&&await this.setupSkills(e);}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,r=M(n.sourceDir,this.homeDir),s=M(n.targetDir,this.homeDir);await e.files.makeDir(s);for(let a of this.skills){let c=`cp -r ${r}/${a} ${s}/ 2>/dev/null || true`;await e.commands.run(c,{timeoutMs:3e4});}}async uploadContextFiles(e,n){let r=Object.entries(n).map(([a,c])=>({path:`${this.workingDir}/context/${a}`,data:c}));if(r.length===0)return;let s=new Set(r.map(a=>a.path.substring(0,a.path.lastIndexOf("/"))).filter(Boolean));s.size>0&&await e.commands.run(`mkdir -p ${Array.from(s).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([a,c])=>({path:a.startsWith("/")?a:`${this.workingDir}/${a}`,data:c}));if(r.length===0)return;let s=new Set(r.map(a=>a.path.substring(0,a.path.lastIndexOf("/"))).filter(Boolean));s.size>0&&await e.commands.run(`mkdir -p ${Array.from(s).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"?e:ca(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:this.hasRun,sessionId:this.agentConfig.type==="droid"?this.droidSessionId:void 0,reasoningEffort:this.agentConfig.reasoningEffort,isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:!!this.agentConfig.externalGateway,skills:this.skills,homeDir:this.homeDir})}async run(e,n){if(this.credentialsSealed)throw new Error("Agent credentials are sealed; this Evolve instance cannot run the agent again");let{prompt:r,timeoutMs:s=ye,background:a=false,checkpointComment:c}=e,{from:o}=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(o&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(o==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let v=await fn(this.storage);if(!v)throw new Error('No checkpoints found for from: "latest".');o=v.id;}if(o){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),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let v=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n,"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 k=await Wr(this.sandbox,this.storage,o);if(await this.setupManagedBrowser(this.sandbox),k.agentType&&k.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${k.agentType}, current: ${this.agentConfig.type})`);let E=this.options.workspaceMode||"knowledge";if(k.workspaceMode&&k.workspaceMode!==E)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${k.workspaceMode}, current: ${E})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let T=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!T}),await this.loadDroidSessionState(this.sandbox),this.hasRun=!0,this.lastCheckpointId=o,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n,"sandbox_ready");}catch(k){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,"sandbox_error"),k}}let l=await this.getSandbox(n);await this.ensureProviderRuntimeToken(),await this.loadDroidSessionState(l),this.lastRunTimestamp=Date.now(),this.ensureSessionLogger(l),this.sessionLogger?.writePrompt(r),this.requiresPreRunDashboardIngest()&&await this.flushSessionLoggerWithTimeout();let d=this.buildCommand(r),i=crypto.randomUUID(),u=this.buildRunEnvs(i);if(await this.writeCodexGatewayProviderConfig(l),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await Qe(l,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[B]:this.sessionTag,[V]:`${Z}${i}`,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.agentConfig.type==="qwen"&&await jt(l,be(this.agentConfig.reasoningEffort),this.homeDir),!this.agentConfig.isDirectMode&&this.registry.spendTrackingTomlProvider){let v=this.requireActiveProviderRuntimeToken();await Ht(l,{...this.registry.spendTrackingTomlProvider,maxContextSize:this.resolveKimiMaxContextSize()},{[B]:this.sessionTag,[V]:`${Z}${i}`,...this.providerRuntimeHeaderUpdates()},{baseUrl:kt(v?.baseUrl??N(this.registry.gatewayPath)),apiKey:v?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:be(this.agentConfig.reasoningEffort),thinkingEffort:Ns(this.agentConfig.reasoningEffort)},this.homeDir);}if((!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&this.registry.droidGatewaySettings){let v=!!this.agentConfig.externalGateway,k=v?void 0:this.requireActiveProviderRuntimeToken();await et(l,{...this.registry.droidGatewaySettings,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),baseUrl:v?this.agentConfig.baseUrl??N():kt(k?.baseUrl??N()),apiKeyEnv:this.registry.apiKeyEnv},v?{}:{[B]:this.sessionTag,[V]:`${Z}${i}`,...this.providerRuntimeHeaderUpdates()},this.homeDir);}let p="",g=ee(this.agentConfig.type),m=v=>{p+=v;let k=p.split(`
624
+ `);p=k.pop()??"";for(let E of k){if(!E.trim())continue;let T=g(E);if(this.captureDroidSession(E,T),this.sessionLogger?.writeEventParsed(E,T),n?.onStdout?.(E+`
625
+ `),T&&n?.onContent)for(let U of T)n.onContent(U);}},f=v=>{n?.onStderr?.(v);},h=await l.commands.spawn(d,{cwd:this.workingDir,timeoutMs:s,envs:u,onStdout:m,onStderr:f}),w=this.beginOperation("run",h,n,"run_start");if(this.hasRun=true,a)return this.watchBackgroundOperation(w,"run",h,n,l),{sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:i,exitCode:0,stdout:`Background process started with ID ${h.processId}`,stderr:""};let y;try{y=await h.wait();}catch(v){throw this.interruptedOperations.delete(w),this.finalizeOperation(w,n,"run_failed","error"),v}if(this.interruptedOperations.delete(w)||y.exitCode===130?this.finalizeOperation(w,n,"run_interrupted","interrupted"):y.exitCode===0?this.finalizeOperation(w,n,"run_complete","idle"):this.finalizeOperation(w,n,"run_failed","error"),p.trim()){let v=g(p);if(this.captureDroidSession(p,v),this.sessionLogger?.writeEventParsed(p,v),n?.onStdout?.(p+`
626
+ `),v&&n?.onContent)for(let k of v)n.onContent(k);}await this.writeDroidSessionState(l),this.sessionLogger&&!a&&await this.flushSessionLoggerWithTimeout();let S;if(this.storage&&!a&&y.exitCode===0)try{S=await mn(l,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:c,parentId:this.lastCheckpointId}),this.lastCheckpointId=S.id;}catch(v){console.warn(`[Evolve] Auto-checkpoint failed: ${v.message}`);}return {sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:i,exitCode:y.exitCode,stdout:y.stdout,stderr:y.stderr,checkpoint:S}}async executeCommand(e,n={},r){let{timeoutMs:s=ye,background:a=false}=n;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 c=await this.getSandbox(r);this.credentialsSealed||await this.ensureProviderRuntimeToken(),this.lastRunTimestamp=Date.now(),this.requiresPreRunDashboardIngest()&&(this.ensureSessionLogger(c),this.sessionLogger?.writePrompt(e),await this.flushSessionLoggerWithTimeout());let o="",l="",d=h=>{o+=h,r?.onStdout?.(h);},i=h=>{l+=h,r?.onStderr?.(h);},u=this.credentialsSealed?{}:this.buildProviderRuntimeProcessEnvs(),p=await c.commands.spawn(e,{cwd:this.workingDir,timeoutMs:s,envs:Object.keys(u).length>0?u:void 0,onStdout:d,onStderr:i}),g=this.beginOperation("command",p,r,"command_start");if(a)return this.watchBackgroundOperation(g,"command",p,r),{sandboxId:c.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${p.processId}`,stderr:""};let m;try{m=await p.wait();}catch(h){throw this.interruptedOperations.delete(g),this.finalizeOperation(g,r,"command_failed","error"),h}return this.interruptedOperations.delete(g)||m.exitCode===130?this.finalizeOperation(g,r,"command_interrupted","interrupted"):m.exitCode===0?this.finalizeOperation(g,r,"command_complete","idle"):this.finalizeOperation(g,r,"command_failed","error"),{sandboxId:c.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:m.exitCode,stdout:o||m.stdout||"",stderr:l||m.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 Bs(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(),s=e.startsWith("/")?e:`${this.workingDir}/${e}`,a=s.substring(0,s.lastIndexOf("/"));if(a&&await r.commands.run(`mkdir -p ${a}`,{timeoutMs:3e4}),r.files.writeFromPath){await r.files.writeFromPath(s,n);return}let{readFile:c}=await import('fs/promises');await r.files.write(s,await c(n));}async getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,s=e?"":"-maxdepth 1",c=(await n.commands.run(`find ${r} ${s} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
627
+ `).filter(Boolean),o=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,l=[],d=`${r}/`;for(let m of c){let[f,h]=m.split("|");if(!f||!h)continue;let w=parseInt(h,10);o>0&&w<o||l.push(f);}let i={},u=await Promise.all(l.map(async m=>{try{let f=await n.files.read(m);return {relativePath:m.startsWith(d)?m.slice(d.length):m.split("/").pop()||m,content:f}}catch{return null}}));for(let m of u)m&&(i[m.relativePath]=m.content);if(!this.zodSchema&&!this.jsonSchema)return {files:i,data:null};let p=i["result.json"];if(!p)return {files:i,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 m=JSON.parse(g);if(this.zodSchema){let f=this.zodSchema.safeParse(m);return f.success?{files:i,data:f.data}:{files:i,data:null,error:`Schema validation failed: ${f.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(m))return {files:i,data:m};{let h=this.compiledValidator.errors?.map(w=>`${w.instancePath} ${w.message}`).join(", ")||"Unknown validation error";return {files:i,data:null,error:`Schema validation failed: ${h}`,rawData:g}}}return {files:i,data:null}}catch(m){return {files:i,data:null,error:`Failed to parse result.json: ${m.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 mn(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,s=false;try{this.activeCommand?s=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(s=await this.sandbox.commands.kill(this.activeProcessId));}catch{s=false;}if(!s)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let a=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,a),s}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=$s(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||C,s=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!s.ok){let a=await s.text().catch(()=>"");throw new Error(`Spend query failed (${s.status}): ${a}`)}return s}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}),s=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(s)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let c=new URLSearchParams({tag:n,runId:e.runId}),l=await(await this.fetchSpend(c)).json();return this.normalizeRunCost(l,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),s=e.index>0?e.index-1:r.runs.length+e.index,a=r.runs[s];if(!a)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return a}};function pa(t){return (t||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"")}function ga(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 ma(t){return await t.text().catch(()=>"")}async function Fs(t,e,n={}){let r=await fetch(`${pa(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${ga(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 ma(r)}`);return r.status===204?{}:await r.json()}var St=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 Fs(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await Fs(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function Rn(t={}){return new St(t)}var Ne=class extends events.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&&(lt(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&&(j(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=Ir;static browserCredentials=vn;static browserProfiles=Rn;static managedSecrets=xn;async initializeAgent(){let e=dt(this.config.agent),n=$(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=Ts(this.config.managedSecrets,n);if(r&&this.config.sandbox&&!Ce(this.config.sandbox))throw new Error("withManagedSecrets() requires an Evolve-managed sandbox; remove withSandbox() or pass a managed sandbox provider.");let s=this.config.sandbox??(r?await Ee(e.apiKey):await tn()),a={},c,o,l=this.config.skills,d;if(this.config.browser){let p=ls(this.config.browser);if(d=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.');a=$n(e.apiKey);}if((p.provider==="actionbook"||p.provider==="agent-browser")&&(l=ds(p.provider,l),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.`);c=p.provider==="actionbook"?nn:xr,o={provider:p.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||C,...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(!d||d.provider!=="agent-browser"||!d.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 i=this.config.storage!==void 0?gt(this.config.storage,!e.isDirectMode,C,e.isDirectMode?void 0:e.apiKey):void 0,u={sandboxProvider:s,sandboxCreateOptions:this.config.sandboxCreateOptions,secrets:this.config.secrets,managedSecrets:r?{secrets:r,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||C}: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:{...a,...this.config.mcpServers},browserPrompt:c,managedBrowser:o,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||C,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||C}:void 0,providerRouting:e.isDirectMode?void 0:{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||C},storage:i};this.agent=new Le(e,u);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,s=this.listenerCount("lifecycle")>0;return {onStdout:e?a=>this.emit("stdout",a):void 0,onStderr:n?a=>this.emit("stderr",a):void 0,onContent:r?a=>this.emit("content",a):void 0,onLifecycle:s?a=>this.emit("lifecycle",a):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:s,checkpointComment:a}){if(s&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let c=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:s,checkpointComment:a},c)}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 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}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=dt(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:C,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 yn(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return yn(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 pe=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 ne=Symbol.for("evolve.SwarmResult"),ge=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 _n=class t{config;semaphore;constructor(e={}){let n=e.concurrency??Nn;if(n>Bt)throw new Error(`concurrency=${n} exceeds max ${Bt}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n,timeoutMs:e.timeoutMs??ye,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new pe(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:s,verify:a}=e,c=e.retry??this.config.retry,o=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs;if(s&&a)throw new Error("map() cannot use both bestOf and verify options simultaneously");let d=await Promise.all(n.map((i,u)=>s?this.executeMapItemWithBestOf(i,r,u,o,e,l,c):a?this.executeMapItemWithVerify(i,r,u,o,e,l,c):c?D(p=>this.executeMapItem(i,r,u,o,e,l,p),c,u):this.executeMapItem(i,r,u,o,e,l)));return ge.from(d)}async filter(e){let{items:n,prompt:r,condition:s,verify:a}=e,c=e.retry??this.config.retry,o=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,d=await Promise.all(n.map((u,p)=>a?this.executeFilterItemWithVerify(u,r,p,o,e,l,c):c?D(g=>this.executeFilterItem(u,r,p,o,e,l,g),c,p):this.executeFilterItem(u,r,p,o,e,l))),i=[];for(let u of d)if(u.status==="error")i.push(u);else if(u.data!==null)try{s(u.data)?i.push(u):i.push({...u,status:"filtered"});}catch(p){i.push({...u,status:"error",data:null,error:`Condition function threw: ${p.message}`});}return ge.from(i)}async reduce(e){let{items:n,prompt:r,verify:s}=e,a=e.retry??this.config.retry,c=this.generateOperationId(),o=e.timeoutMs??this.config.timeoutMs,l=[],d=[];n.forEach((S,v)=>{l.push(this.getFiles(S)),d.push(this.getIndex(S,v));});let i={};l.forEach((S,v)=>{Object.entries(S).forEach(([k,E])=>{i[`item_${d[v]}/${k}`]=E;});});let u=ut(i),p=z(Rr,{fileTree:u}),g=e.systemPrompt?`${p}
628
+
629
+ ${e.systemPrompt}`:p,m=(S,v,k)=>({operationId:c,operation:"reduce",tag:S.tag,sandboxId:S.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:d,errorRetry:v,verifyRetry:k,...this.pipelineContextToMeta(e._pipelineContext)}),f=e.mcpServers??this.config.mcpServers,h=e.skills??this.config.skills,w=e.integrations??this.config.integrations,y=async(S,v,k,E)=>{let T=await this.semaphore.use(()=>this.execute(i,S,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:f,skills:h,integrations:w,tagPrefix:v,timeoutMs:o,observability:{swarmName:this.config.tag,operationName:e.name,operationId:c,operation:"reduce",role:"worker",errorRetry:k,verifyRetry:E&&E>1?E-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),U=m(T,k,E&&E>1?E-1:void 0);return T.error?{status:"error",data:null,files:T.files,meta:U,error:T.error,rawData:T.rawData}:{status:"success",data:T.data,files:T.files,meta:U}},b=`${this.config.tag}-reduce`;return s?this.runWithVerification((S,v,k)=>y(S,v,void 0,k),{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:o,systemPrompt:g,schema:e.schema,mcpServers:f,skills:h,integrations:w,operationId:c,baseTag:b,retry:a,operation:"reduce",_pipelineContext:e._pipelineContext}):a?D(S=>{let v=S>1?S-1:void 0,k=v?`${b}-er${v}`:b;return y(r,k,v)},a):y(r,b)}async bestOf(e){let{item:n,prompt:r,config:s}=e,a=e.retry??this.config.retry,c=s.n??s.taskAgents?.length;if(c===void 0)throw new Error("bestOf requires n or taskAgents");if(c<2)throw new Error("bestOf requires n >= 2");let o=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,d=this.getFiles(n),i=s.mcpServers??this.config.mcpServers,u=s.judgeMcpServers??s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.judgeSkills??s.skills??this.config.skills,m=s.integrations??this.config.integrations,f=s.judgeIntegrations??s.integrations??this.config.integrations,h=await Promise.all(Array.from({length:c},async(v,k)=>{let E=a?await D(T=>this.executeBestOfCandidate({inputFiles:d,prompt:r,candidateIndex:k,operationId:o,config:s,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:i,skills:p,integrations:m,timeoutMs:l,attempt:T}),a,k):await this.executeBestOfCandidate({inputFiles:d,prompt:r,candidateIndex:k,operationId:o,config:s,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:i,skills:p,integrations:m,timeoutMs:l});return s.onCandidateComplete?.(0,k,E.status==="success"?"success":"error"),E})),w=a?await D(v=>this.executeBestOfJudge({inputFiles:d,taskPrompt:r,candidates:h,config:s,timeoutMs:l,operationId:o,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:u,skills:g,integrations:f,attempt:v}),{...a,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:d,taskPrompt:r,candidates:h,config:s,timeoutMs:l,operationId:o,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:u,skills:g,integrations:f}),y=h.findIndex(v=>v.status==="success"),b=w.decision?.winner??(y>=0?y:0);s.onJudgeComplete?.(0,b,w.decision?.reasoning??"Judge failed to provide reasoning");let S={operationId:o,operation:"bestof-judge",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:c};return {winner:h[b]??h[0],winnerIndex:b,judgeReasoning:w.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:S,candidates:h}}async execute(e,n,r){let s=null,a="",c=r.tagPrefix,o={},l=null,d,i,u={...this.config.agent,...r.agent};try{s=new Ne().withAgent(u).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&s.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&s.withSystemPrompt(r.systemPrompt),r.mcpServers&&s.withMcpServers(r.mcpServers),r.skills?.length&&s.withSkills(r.skills),r.integrations&&s.withIntegrations(r.integrations),r.observability&&s.withObservability(r.observability),Object.keys(e).length>0&&s.withContext(e);let p=await s.run({prompt:n,timeoutMs:r.timeoutMs});a=p.sandboxId,c=s.getSessionTag()??r.tagPrefix;let g=null;try{g=await s.getOutputFiles(!0),o=g.files;}catch{}p.exitCode!==0?d=`Agent exited with code ${p.exitCode}`:r.schema?g?(l=g.data,g.error&&(d=g.error),g.rawData&&(i=g.rawData)):d="Failed to read output files from sandbox":l=o;}catch(p){if(d=p.message,s){c=s.getSessionTag()??r.tagPrefix;try{o=(await s.getOutputFiles(!0)).files;}catch{}}}finally{s&&await s.kill().catch(()=>{});}return {files:o,data:l,tag:c,sandboxId:a,error:d,rawData:i}}async executeMapItem(e,n,r,s,a,c,o=1){let l=this.getFiles(e),d=o>1?`${this.config.tag}-map-${r}-er${o-1}`:`${this.config.tag}-map-${r}`,i=this.evaluatePrompt(n,l,r);if(i instanceof Error)return this.buildErrorResult(`Prompt function threw: ${i.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let u=a.mcpServers??this.config.mcpServers,p=a.skills??this.config.skills,g=a.integrations??this.config.integrations,m=await this.semaphore.use(()=>this.execute(l,i,{systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,agent:a.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:d,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:a.name,operationId:s,operation:"map",itemIndex:r,role:"worker",errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(a._pipelineContext)}})),f={operationId:s,operation:"map",tag:m.tag,sandboxId:m.sandboxId,swarmName:this.config.tag,operationName:a.name,itemIndex:r,errorRetry:o>1?o-1:void 0,...this.pipelineContextToMeta(a._pipelineContext)};return this.buildResult(m,f)}async executeMapItemWithVerify(e,n,r,s,a,c,o){let l=this.getFiles(e),d=`${this.config.tag}-map-${r}`,i=a.verify,u=a.mcpServers??this.config.mcpServers,p=a.skills??this.config.skills,g=a.integrations??this.config.integrations,m=this.evaluatePrompt(n,l,r);if(m instanceof Error)return this.buildErrorResult(`Prompt function threw: ${m.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let f=async(h,w,y)=>{let b=await this.semaphore.use(()=>this.execute(l,h,{systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,agent:a.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:w,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:a.name,operationId:s,operation:"map",itemIndex:r,role:"worker",verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToObservability(a._pipelineContext)}})),S={operationId:s,operation:"map",tag:b.tag,sandboxId:b.sandboxId,swarmName:this.config.tag,operationName:a.name,itemIndex:r,verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToMeta(a._pipelineContext)};return this.buildResult(b,S)};return this.runWithVerification(f,{originalPrompt:m,inputFiles:l,verifyConfig:i,timeoutMs:c,systemPrompt:a.systemPrompt,schema:a.schema,mcpServers:u,skills:p,integrations:g,operationId:s,baseTag:d,retry:o,itemIndex:r,operation:"map",_pipelineContext:a._pipelineContext})}async executeMapItemWithBestOf(e,n,r,s,a,c,o){let l=this.getFiles(e),d=`${this.config.tag}-map-${r}`,i=this.evaluatePrompt(n,l,r);if(i instanceof Error)return this.buildErrorResult(`Prompt function threw: ${i.message}`,{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let u=a.bestOf,p=u.n??u.taskAgents?.length;if(p===void 0||p<2)return this.buildErrorResult("bestOf requires n >= 2 or taskAgents with at least 2 elements",{operationId:s,operation:"map",tag:d,sandboxId:"",itemIndex:r});let g=a.mcpServers??this.config.mcpServers,m=u.mcpServers??g,f=u.judgeMcpServers??u.mcpServers??g,h=a.skills??this.config.skills,w=u.skills??h,y=u.judgeSkills??u.skills??h,b=a.integrations??this.config.integrations,S=u.integrations??b,v=u.judgeIntegrations??u.integrations??b,k=await Promise.all(Array.from({length:p},async(L,Ke)=>{let Un=o?await D(Xs=>this.executeBestOfCandidate({inputFiles:l,prompt:i,candidateIndex:Ke,operationId:s,config:u,systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,mcpServers:m,skills:w,integrations:S,timeoutMs:c,parentIndex:r,attempt:Xs,_pipelineContext:a._pipelineContext}),o,Ke):await this.executeBestOfCandidate({inputFiles:l,prompt:i,candidateIndex:Ke,operationId:s,config:u,systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,mcpServers:m,skills:w,integrations:S,timeoutMs:c,parentIndex:r,_pipelineContext:a._pipelineContext});return u.onCandidateComplete?.(r,Ke,Un.status==="success"?"success":"error"),Un})),E=o?await D(L=>this.executeBestOfJudge({inputFiles:l,taskPrompt:i,candidates:k,config:u,timeoutMs:c,operationId:s,systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,mcpServers:f,skills:y,integrations:v,parentIndex:r,attempt:L,_pipelineContext:a._pipelineContext}),{...o,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:l,taskPrompt:i,candidates:k,config:u,timeoutMs:c,operationId:s,systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,mcpServers:f,skills:y,integrations:v,parentIndex:r,_pipelineContext:a._pipelineContext}),T=k.findIndex(L=>L.status==="success"),U=E.decision?.winner??(T>=0?T:0),I=k[U]??k[0];u.onJudgeComplete?.(r,U,E.decision?.reasoning??"Judge failed to provide reasoning");let q={operationId:s,operation:"bestof-judge",tag:E.tag,sandboxId:E.sandboxId,swarmName:this.config.tag,operationName:a.name,candidateCount:p,...this.pipelineContextToMeta(a._pipelineContext)};return {...I,meta:{...I.meta,operation:"map",swarmName:this.config.tag,operationName:a.name,itemIndex:r,...this.pipelineContextToMeta(a._pipelineContext)},bestOf:{winnerIndex:U,judgeReasoning:E.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:q,candidates:k}}}async executeFilterItem(e,n,r,s,a,c,o=1){let l=this.getFiles(e),d=o>1?`${this.config.tag}-filter-${r}-er${o-1}`:`${this.config.tag}-filter-${r}`,i=a.mcpServers??this.config.mcpServers,u=a.skills??this.config.skills,p=a.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(l,n,{systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,agent:a.agent,mcpServers:i,skills:u,integrations:p,tagPrefix:d,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:a.name,operationId:s,operation:"filter",itemIndex:r,role:"worker",errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(a._pipelineContext)}})),m={operationId:s,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:a.name,itemIndex:r,errorRetry:o>1?o-1:void 0,...this.pipelineContextToMeta(a._pipelineContext)};return this.buildResult(g,m,l)}async executeFilterItemWithVerify(e,n,r,s,a,c,o){let l=this.getFiles(e),d=`${this.config.tag}-filter-${r}`,i=a.verify,u=a.mcpServers??this.config.mcpServers,p=a.skills??this.config.skills,g=a.integrations??this.config.integrations,m=async(f,h,w)=>{let y=await this.semaphore.use(()=>this.execute(l,f,{systemPrompt:a.systemPrompt,schema:a.schema,schemaOptions:a.schemaOptions,agent:a.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:h,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:a.name,operationId:s,operation:"filter",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(a._pipelineContext)}})),b={operationId:s,operation:"filter",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:a.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(a._pipelineContext)};return this.buildResult(y,b,l)};return this.runWithVerification(m,{originalPrompt:n,inputFiles:l,verifyConfig:i,timeoutMs:c,systemPrompt:a.systemPrompt,schema:a.schema,mcpServers:u,skills:p,integrations:g,operationId:s,baseTag:d,retry:o,itemIndex:r,operation:"filter",_pipelineContext:a._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:s,operationId:a,config:c,timeoutMs:o,parentIndex:l,attempt:d=1,_pipelineContext:i}=e,u=l!==void 0?`${this.config.tag}-map-${l}-bestof-cand-${s}`:`${this.config.tag}-bestof-cand-${s}`,p=d>1?`${u}-er${d-1}`:u,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:c.taskAgents?.[s],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:p,timeoutMs:o,observability:{swarmName:this.config.tag,operationId:a,operation:"map",itemIndex:l,role:"candidate",candidateIndex:s,errorRetry:d>1?d-1:void 0,...this.pipelineContextToObservability(i)}})),m={operationId:a,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:s,errorRetry:d>1?d-1:void 0,candidateIndex:s,...this.pipelineContextToMeta(i)};return this.buildResult(g,m)}buildJudgeContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return e.candidates.forEach((r,s)=>{r.status==="error"&&(n[`candidate_${s}/_failed.txt`]=`STATUS: FAILED
630
+
631
+ Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([a,c])=>{n[`candidate_${s}/${a}`]=c;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:s,operationId:a,parentIndex:c,attempt:o=1,_pipelineContext:l}=e,d=c!==void 0?`${this.config.tag}-map-${c}-bestof-judge`:`${this.config.tag}-bestof-judge`,i=o>1?`${d}-er${o-1}`:d,u=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),p=ut(u),g=z(rn,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:p}),m=zod.z.object({winner:zod.z.number().min(0).max(n.length-1),reasoning:zod.z.string()}),f=await this.semaphore.use(()=>this.execute(u,Cr,{systemPrompt:g,schema:m,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:i,timeoutMs:s,observability:{swarmName:this.config.tag,operationId:a,operation:"map",itemIndex:c,role:"judge",errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(l)}})),h=null;if(f.data&&!f.error)h=f.data;else if(f.rawData)try{let w=JSON.parse(f.rawData);console.warn(`Judge returned invalid winner ${w.winner}, defaulting to candidate 0`),h={winner:0,reasoning:w.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${f.error}`);}return {status:h?"success":"error",decision:h,tag:f.tag,sandboxId:f.sandboxId,error:h?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=zod.z.object({passed:zod.z.boolean(),reasoning:zod.z.string(),feedback:zod.z.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,s])=>{n[`worker_output/${r}`]=s;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:s,workerTag:a,retryAttempt:c=1,operation:o,itemIndex:l,attemptIndex:d,_pipelineContext:i}=e,u=c>1?`${a}-verifier-er${c-1}`:`${a}-verifier`,p=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,m=n.verifierIntegrations??e.integrations,f=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),h=ut(f),w=z(sn,{criteria:n.criteria,fileTree:h}),y=await this.semaphore.use(()=>this.execute(f,Er,{systemPrompt:w,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:p,skills:g,integrations:m,tagPrefix:u,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:s,operation:o,itemIndex:l,role:"verifier",verifyRetry:d&&d>1?d-1:void 0,errorRetry:c>1?c-1:void 0,...this.pipelineContextToObservability(i)}})),b=null;if(y.data&&!y.error)b=y.data;else if(y.rawData)try{let S=JSON.parse(y.rawData);b={passed:!!S.passed,reasoning:S.reasoning??"Verification completed",feedback:S.feedback};}catch{console.warn(`Verify validation failed: ${y.error}`);}return {status:b?"success":"error",decision:b,tag:y.tag,sandboxId:y.sandboxId,error:b?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return z(on,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:s,verifyConfig:a,timeoutMs:c,operationId:o,baseTag:l,retry:d,itemIndex:i=0,operation:u,_pipelineContext:p}=n,g=a.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,m=r,f=null,h=0;for(;h<g;){h++;let y=h>1?`${l}-vr${h-1}`:l,b=d?await D(k=>e(m,k>1?`${y}-er${k-1}`:y,h),d,i):await e(m,y,h);if(a.onWorkerComplete?.(i,h,b.status==="error"?"error":"success"),b.status==="error")return b;f=b;let S=d?await D(k=>this.executeVerify({inputFiles:s,outputFiles:b.files,taskPrompt:m,config:a,timeoutMs:c,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:o,workerTag:y,retryAttempt:k,operation:u,itemIndex:i,attemptIndex:h,_pipelineContext:p}),{...d,retryOn:void 0}):await this.executeVerify({inputFiles:s,outputFiles:b.files,taskPrompt:m,config:a,timeoutMs:c,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:o,workerTag:y,operation:u,itemIndex:i,attemptIndex:h,_pipelineContext:p}),v={operationId:o,operation:"verify",tag:S.tag,sandboxId:S.sandboxId,swarmName:this.config.tag,attempts:h,...this.pipelineContextToMeta(p)};if(a.onVerifierComplete?.(i,h,S.decision?.passed??false,S.decision?.feedback),S.decision?.passed)return {...b,verify:{passed:true,reasoning:S.decision.reasoning,verifyMeta:v,attempts:h}};if(h<g){let k=S.decision?.feedback??S.decision?.reasoning??"Output did not meet criteria";m=t.buildRetryPromptWithFeedback(r,k);}}let w=h>1?`${l}-vr${h-1}`:l;return {...f,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:o,operation:"verify",tag:`${w}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:h,...this.pipelineContextToMeta(p)},attempts:h}}}generateOperationId(){return crypto.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(s){return s}}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"]=j(e.schema)?se(e.schema):ie(e.schema)),Object.entries(e.inputFiles).forEach(([r,s])=>{n[`worker_task/input/${r}`]=s;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&ne in e&&e[ne]===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 s=r??e.files;return e.error?{[ne]:true,status:"error",data:null,files:s,meta:n,error:e.error,rawData:e.rawData}:{[ne]:true,status:"success",data:e.data,files:s,meta:n}}buildErrorResult(e,n){return {[ne]:true,status:"error",data:null,files:{},meta:n,error:e}}};var xt=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 Ct(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=crypto.randomBytes(8).toString("hex"),r=[],s=e,a=Date.now();for(let o=0;o<this.steps.length;o++){let l=this.steps[o],d=l.config.name,i=Date.now();this.events.onStepStart?.({type:l.type,index:o,name:d,itemCount:s.length});let u={pipelineRunId:n,pipelineStepIndex:o};try{let p=await this.executeStep(l,s,o,d,u),g=Date.now()-i;if(r.push({type:l.type,index:o,durationMs:g,results:p.output}),this.events.onStepComplete?.({type:l.type,index:o,name:d,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()-a};s=p.nextItems;}catch(p){throw this.events.onStepError?.({type:l.type,index:o,name:d,error:p instanceof Error?p:new Error(String(p))}),p}}let c=r[r.length-1];return {pipelineRunId:n,steps:r,output:c?.results??[],totalDurationMs:Date.now()-a}}async executeStep(e,n,r,s,a){if(e.type==="map"){let l=e.config,d=await this.swarm.map({items:n,...l,_pipelineContext:a,retry:this.wrapRetry(l.retry,r,s),verify:this.wrapVerify(l.verify,r,s),bestOf:this.wrapBestOf(l.bestOf,r,s)});return {output:[...d],nextItems:d.success,successCount:d.success.length,errorCount:d.error.length,filteredCount:0}}if(e.type==="filter"){let l=e.config,d=await this.swarm.filter({items:n,...l,_pipelineContext:a,retry:this.wrapRetry(l.retry,r,s),verify:this.wrapVerify(l.verify,r,s)}),i=l.emit??"success",u=i==="success"?d.success:i==="filtered"?d.filtered:[...d.success,...d.filtered];return {output:[...d],nextItems:u,successCount:d.success.length,errorCount:d.error.length,filteredCount:d.filtered.length}}let c=e.config,o=await this.swarm.reduce({items:n,...c,_pipelineContext:a,retry:this.wrapRetry(c.retry,r,s),verify:this.wrapVerify(c.verify,r,s)});return {output:o,nextItems:[],successCount:o.status==="success"?1:0,errorCount:o.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(s,a,c)=>{e.onItemRetry?.(s,a,c),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:s,attempt:a,error:c});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(s,a,c)=>{e.onWorkerComplete?.(s,a,c),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:s,attempt:a,status:c});},onVerifierComplete:(s,a,c,o)=>{e.onVerifierComplete?.(s,a,c,o),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:s,attempt:a,passed:c,feedback:o});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(s,a,c)=>{e.onCandidateComplete?.(s,a,c),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:s,candidateIndex:a,status:c});},onJudgeComplete:(s,a,c)=>{e.onJudgeComplete?.(s,a,c),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:s,winnerIndex:a,reasoning:c});}}}},Ct=class t extends xt{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 xa=6e5,Ca=5e3;function Ks(t,e,n){let r=e??n;if(!Number.isFinite(r)||r<=0)throw new Error(`${t} must be a positive number`);return r}function Ea(t){let e=t?.apiKey||process.env[P];if(!e)throw new Error(`sessions() requires an API key. Set ${P} or pass { apiKey } in config.`);let n=t?.dashboardUrl||C;async function r(o,l){let d=await fetch(`${n}${o}`,{...l,headers:{Authorization:`Bearer ${e}`,...l?.headers}});if(!d.ok){let i=await d.text().catch(()=>"");throw new Error(`Dashboard API error (${d.status}): ${i||d.statusText}`)}return d}function s(o){return {id:o.id,tag:o.tag,agent:o.agent,model:o.model||null,provider:o.provider,sandboxId:o.sandboxId||null,state:o.isEnded?"ended":"live",runtimeStatus:o.runtimeStatus||"unknown",cost:typeof o.cost=="number"?o.cost:null,createdAt:o.createdAt,endedAt:o.endedAt||null,stepCount:o.stepCount||0,toolStats:o.toolStats||null}}function a(o,l){if(o.status!=="ready")throw new Error(`Browser replay is not ready (status: ${String(o.status||"unknown")})`);if(typeof o.replayUrl!="string"||typeof o.downloadUrl!="string")throw new Error("Browser replay response missing replayUrl or downloadUrl");return {sessionId:o.sessionId||l,status:"ready",replayUrl:o.replayUrl,downloadUrl:o.downloadUrl,suggestedStartSeconds:typeof o.suggestedStartSeconds=="number"?o.suggestedStartSeconds:void 0,sizeBytes:typeof o.sizeBytes=="number"?o.sizeBytes:void 0,readyAt:typeof o.readyAt=="string"?o.readyAt:void 0}}let c=o=>new Promise(l=>setTimeout(l,o));return {async list(o){let l=new URLSearchParams({paginationMode:"cursor",pageSize:String(Math.min(o?.limit??20,200)),paginated:"true"});if(o?.cursor&&l.set("cursor",o.cursor),o?.state&&o.state!=="all"&&l.set("state",o.state),o?.agent&&l.set("agent",o.agent),o?.tagPrefix&&l.set("tagPrefix",o.tagPrefix),o?.sort){let u={newest:"desc",oldest:"asc",cost:"desc"};l.set("sortDirection",u[o.sort]),o.sort==="cost"?l.set("sortField","cost"):l.set("sortField","timestamp");}let i=await(await r(`/api/sessions?${l}`)).json();return {items:(i.items||[]).map(s),nextCursor:i.nextCursor||null,hasMore:!!i.hasMore}},async get(o){let d=await(await r(`/api/sessions/${encodeURIComponent(o)}`)).json();return s(d)},async events(o,l){let d=new URLSearchParams;l?.since!=null&&d.set("since",String(l.since));let i=d.toString();return (await(await r(`/api/sessions/${encodeURIComponent(o)}/events${i?`?${i}`:""}`)).json()).events||[]},async download(o,l){let u=(await(await r(`/api/sessions/${encodeURIComponent(o)}`)).json()).tag||o,p=await fetch(`${n}/api/sessions/${encodeURIComponent(o)}/download`,{headers:{Authorization:`Bearer ${e}`},redirect:"follow"});if(!p.ok){let h=await p.text().catch(()=>"");throw new Error(`Download failed (${p.status}): ${h||p.statusText}`)}let g=l?.to||process.cwd();await promises.mkdir(g,{recursive:true});let m=xe.join(g,`${u}.jsonl`);if(!p.body)throw new Error("Download response has no body");let f=stream.Readable.fromWeb(p.body);return await promises$1.pipeline(f,J.createWriteStream(m)),m},async browserReplay(o,l){let d=Ks("timeoutMs",l?.timeoutMs,xa),i=Ks("intervalMs",l?.intervalMs,Ca),u=Date.now()+d,p=`/api/sessions/${encodeURIComponent(o)}/browser-replay`;for(;;){let g=u-Date.now();if(g<=0)throw new Error(`Browser replay timed out after ${d}ms`);let m;try{m=await fetch(`${n}${p}`,{headers:{Authorization:`Bearer ${e}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,g))});}catch(h){let w=h.name;throw w==="AbortError"||w==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):h}let f={};if(m.ok)f=await m.json();else {let h=await m.text().catch(()=>"");throw new Error(`Dashboard API error (${m.status}): ${h||m.statusText}`)}if(f.status==="ready")return a(f,o);if(f.status==="failed"){let h=typeof f.error=="string"?f.error:"unknown error";throw new Error(`Browser replay failed: ${h}`)}if(Date.now()>=u)throw new Error(`Browser replay timed out after ${d}ms`);await c(Math.min(i,Math.max(0,u-Date.now())));}}}}var Tn=["missing_authorization","invalid_api_key","credential_service_unavailable","rate_limited","insufficient_credits","invalid_json","invalid_input","invalid_limit","invalid_status","invalid_cursor","invalid_after","invalid_format","invalid_ids","invalid_multipart","idempotency_key_reused","benchmark_not_found","benchmark_version_not_found","benchmark_name_taken","benchmark_in_use","benchmark_not_owned","no_active_version","version_not_ready","unknown_task_keys","no_tasks","custom_harness_not_found","custom_harness_name_taken","custom_harness_name_reserved","custom_harness_invalid_name","custom_harness_source_required","custom_harness_source_conflict","custom_harness_invalid_env","custom_harness_too_large","custom_harness_limit_reached","harness_version_not_found","job_too_large","provider_unsupported","job_not_found","job_not_terminal","no_failed_runs","trial_not_found","concurrent_update","regrade_source_ineligible","no_regradable_runs","regrade_not_found","import_not_found","import_too_large","invalid_archive","internal_error"];function Et(t){return typeof t=="string"&&Tn.includes(t)}var fe=class extends Error{status;code;param;details;retryAfterSec;requestId;constructor(e,n,r,s){super(r),this.name="EvolveApiError",this.status=e,this.code=n,s?.param!==void 0&&(this.param=s.param),s?.details!==void 0&&(this.details=s.details),s?.retryAfterSec!==void 0&&(this.retryAfterSec=s.retryAfterSec),s?.requestId!==void 0&&(this.requestId=s.requestId);}isKnownCode(){return Et(this.code)}};async function On(t){let e=await t.text().catch(()=>""),n=t.headers?.get?.("x-request-id")??void 0,r=Number(t.headers?.get?.("retry-after")),s=Number.isFinite(r)?r:void 0;try{let a=JSON.parse(e);if(a?.error&&typeof a.error=="object"){let c=typeof a.error.code=="string"?a.error.code:"unknown_error",o=typeof a.error.message=="string"?a.error.message:t.statusText;throw new fe(t.status,c,o,{param:typeof a.error.param=="string"?a.error.param:void 0,details:a.error.details&&typeof a.error.details=="object"?a.error.details:void 0,retryAfterSec:typeof a.error.retryAfterSec=="number"?a.error.retryAfterSec:s,requestId:typeof a.error.requestId=="string"?a.error.requestId:n})}}catch(a){if(a instanceof fe)throw a}throw new fe(t.status,"unknown_error",e||t.statusText,{retryAfterSec:s,requestId:n})}var At=class extends Error{benchmark;constructor(e){super(`Benchmark "${e}" has no active version`),this.name="NoActiveVersionError",this.benchmark=e;}},La=1e3,Na=3e4,Fa=new Set(["COMPLETED","CANCELLED","FAILED"]),Ka=new Set(["job.completed","job.cancelled","job.failed"]),ja=2e3,Ja=new Set(["COMPLETED","FAILED"]);function Mn(t,e){let n=e?.apiKey||process.env[P];if(!n)throw new Error(`${t}() requires an API key. Set ${P} or pass { apiKey } in config.`);let r=(e?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,"");return {apiKey:n,baseUrl:r}}async function R(t,e,n){let r=await fetch(`${t.baseUrl}${e}`,{...n,headers:{Authorization:`Bearer ${t.apiKey}`,...n?.headers}});return r.ok||await On(r),r}function Va(t){let e=t.indexOf("@");if(e===-1)return {name:t.trim()};let n=t.slice(0,e).trim(),r=t.slice(e+1).trim();if(!n||!r)throw new Error(`Invalid benchmark ref "${t}": expected "name" or "name@version"`);return {name:n,version:r}}function Dn(t){return {harness:t.harness,model:t.model,harnessVersion:t.harnessVersion??null,reasoningEffort:t.reasoningEffort??null}}function Rt(t){return {version:t.version,state:t.state,createdAt:t.createdAt,taskCount:t.taskCount??0}}function Ha(t){return {taskKey:t.taskKey,agentTimeoutSec:t.agentTimeoutSec,verifierTimeoutSec:t.verifierTimeoutSec,providers:t.providers}}function Fe(t){let e=t.trials??{};return {id:t.id,status:t.status,benchmark:t.benchmark,agents:(t.agents??[]).map(Dn),runsPerTask:t.runsPerTask,concurrency:t.concurrency,maxTrialSpendUsd:t.maxTrialSpendUsd,worstCaseSpendUsd:t.worstCaseSpendUsd,sandboxProvider:t.sandboxProvider,spentUsd:t.spentUsd??0,createdAt:t.createdAt,updatedAt:t.updatedAt,counts:t.counts,trials:{total:e.total??0,byStatus:e.byStatus??{}},meanReward:t.meanReward??null,failure:t.failure??null,sourceJobId:t.sourceJobId??null,idempotentReplay:t.idempotentReplay===true}}function Q(t,e){let n=t??{};return {items:Array.isArray(n.items)?n.items.map(e):[],nextCursor:n.nextCursor??null,hasMore:n.hasMore===true}}function X(t,e){let n=new URLSearchParams;t?.limit!==void 0&&n.set("limit",String(t.limit)),t?.cursor&&n.set("cursor",t.cursor);for(let[s,a]of Object.entries(e??{}))a!==void 0&&n.set(s,a);let r=n.toString();return r?`?${r}`:""}function Js(t){return {id:t.id,taskKey:t.taskKey,agent:Dn(t.agent||{}),runNumber:t.runNumber,status:t.status,reward:t.reward??null,metrics:t.metrics??null,failurePhase:t.failurePhase??null,failureDetail:t.failureDetail??null,phaseTimingsMs:t.phaseTimingsMs??null,modelUsage:t.modelUsage??null,sandboxProvider:t.sandboxProvider??null,verifierMode:t.verifierMode??null,spentUsd:t.spentUsd??null,spendSource:t.spendSource??null,liveSpentUsd:t.liveSpentUsd??null,liveSpendAt:t.liveSpendAt??null,resolvedHarnessVersion:t.resolvedHarnessVersion??null,sessionRef:t.sessionRef??null,createdAt:t.createdAt,updatedAt:t.updatedAt}}function Ga(t){return {id:t.id,sourceTrialId:t.sourceTrialId,taskKey:t.taskKey,status:t.status,reward:t.reward??null,metrics:t.metrics??null,sourceReward:t.sourceReward??null,sourceStatus:t.sourceStatus,rewardDelta:t.rewardDelta??null,verifierMode:t.verifierMode??"separate",verifierDigest:t.verifierDigest??null,verifierSandboxId:t.verifierSandboxId??null,failurePhase:t.failurePhase??null,failureDetail:t.failureDetail??null,phaseTimingsMs:t.phaseTimingsMs??null,createdAt:t.createdAt,settledAt:t.settledAt??null}}function _t(t){let e=t.results??{};return {id:t.id,sourceJobId:t.sourceJobId,status:t.status,sandboxProvider:t.sandboxProvider,filter:t.filter??null,results:{...Q(e,Ga),total:e.total??0,byStatus:e.byStatus??{}},createdAt:t.createdAt,updatedAt:t.updatedAt}}function Tt(t){return {name:t.name,source:t.source,runCommand:t.runCommand,env:t.env??{},createdAt:t.createdAt,updatedAt:t.updatedAt}}function Pt(t){let e={id:t.id,status:t.status,benchmarkName:t.benchmarkName,version:t.version,failure:t.failure??null};return typeof t.taskCount=="number"&&(e.taskCount=t.taskCount),typeof t.createdAt=="string"&&(e.createdAt=t.createdAt),typeof t.updatedAt=="string"&&(e.updatedAt=t.updatedAt),e}function Gs(t){let e=t??{};return {scored:e.scored??0,total:e.total??0}}function za(t){return {id:t.id,benchmark:t.benchmark,status:t.status,meanReward:t.meanReward??null,coverage:Gs(t.coverage),spentUsd:t.spentUsd??0,agents:(t.agents||[]).map(Dn),createdAt:t.createdAt}}function Wa(t){return {jobId:t.jobId,status:t.status,meanReward:t.meanReward??null,coverage:Gs(t.coverage)}}function qa(t){return {taskKey:t.taskKey,disagreement:t.disagreement===true,cells:(t.cells||[]).map(Wa)}}function Ya(t){return {seq:t.seq,type:t.type,data:t.data??{}}}function An(t){if(t?.aborted)throw t.reason instanceof Error?t.reason:new Error("Watch aborted")}function Vs(t,e){return e?.aborted?true:t?.name==="AbortError"}function It(t,e){return new Promise((n,r)=>{let s=setTimeout(()=>{e?.removeEventListener("abort",a),n();},t),a=()=>{clearTimeout(s),r(e?.reason instanceof Error?e.reason:new Error("Watch aborted"));};e?.addEventListener("abort",a,{once:true});})}function Xa(t){let e="";return {push(n){e+=n.replace(/\r\n/g,`
632
+ `);let r;for(;(r=e.indexOf(`
633
+
634
+ `))!==-1;){let s=e.slice(0,r);e=e.slice(r+2);let a,c,o=[];for(let l of s.split(`
635
+ `)){if(!l||l.startsWith(":"))continue;let d=l.indexOf(":"),i=d===-1?l:l.slice(0,d),u=d===-1?"":l.slice(d+1);u.startsWith(" ")&&(u=u.slice(1)),i==="id"?a=u:i==="event"?c=u:i==="data"&&o.push(u);}(a!==void 0||c!==void 0||o.length>0)&&t({id:a,event:c,data:o.join(`
636
+ `)});}}}}function he(t,e){let n,r=()=>n??=t({limit:e?.limit,cursor:e?.cursor});return {then(s,a){return r().then(s,a)},catch(s){return r().catch(s)},finally(s){return r().finally(s)},async*[Symbol.asyncIterator](){let s=e?.cursor;for(;;){let a=await t({limit:e?.limit,cursor:s});for(let c of a.items)yield c;if(!a.nextCursor)return;s=a.nextCursor;}}}}function Ot(t,e){let n=new FormData;for(let[r,s]of Object.entries(t))s!==void 0&&n.set(r,s);return e&&n.set("file",new Blob([e.bytes],{type:"application/gzip"}),e.filename),n}function Qa(t){let e,n=()=>(e||(e=(async()=>{let r=await t.next();for(;!r.done;)r=await t.next();return r.value})()),e);return {then(r,s){return n().then(r,s)},catch(r){return n().catch(r)},finally(r){return n().finally(r)},[Symbol.asyncIterator](){return t}}}function zs(t){let e=Mn("benchmarks",t);async function n(c){let o=await R(e,`/api/benchmarks/imports/${encodeURIComponent(c)}`);return Pt(await o.json())}function r(c){if(!c||typeof c!="object")return null;let o=c;return {ref:o.ref,currentCommit:o.currentCommit,latestCommit:o.latestCommit??null,moved:o.moved===true,behindBy:typeof o.behindBy=="number"?o.behindBy:null,checkedAt:o.checkedAt??null,error:o.error??null}}async function s(c,o){let l=Va(c),d=X(o,{version:l.version}),u=await(await R(e,`/api/benchmarks/${encodeURIComponent(l.name)}${d}`)).json();return {name:u.name,title:u.title??null,description:u.description??null,activeVersion:u.activeVersion?Rt(u.activeVersion):null,versions:(u.versions||[]).map(Rt),selectedVersion:u.selectedVersion?Rt(u.selectedVersion):null,tasks:Q(u.tasks,Ha),upstream:r(u.upstream),createdAt:u.createdAt,updatedAt:u.updatedAt}}async function a(c){let o=await R(e,`/api/benchmarks${X(c)}`);return Q(await o.json(),l=>({name:l.name,title:l.title??null,description:l.description??null,activeVersion:l.activeVersion?Rt(l.activeVersion):null,upstream:r(l.upstream)}))}return {list(c){return he(a,c)},get:s,async getActive(c,o){let l=await s(c,o);if(l.activeVersion===null)throw new At(c);return {name:l.name,title:l.title,description:l.description,activeVersion:l.activeVersion,version:l.activeVersion.version,tasks:l.tasks??{items:[],nextCursor:null,hasMore:false},versions:l.versions??[],createdAt:l.createdAt,updatedAt:l.updatedAt}},async import(c){let o=c.source;if(o?.directory){let{tarGzipDirectory:l}=await Promise.resolve().then(()=>(In(),Pn)),d=l(o.directory),i=await R(e,"/api/benchmarks/imports",{method:"POST",body:Ot({benchmarkName:c.benchmarkName,version:c.version},{bytes:d,filename:"corpus.tar.gz"})});return Pt(await i.json())}if(o&&"gitUrl"in o&&o.gitUrl){let l=await R(e,"/api/benchmarks/imports",{method:"POST",body:Ot({benchmarkName:c.benchmarkName,version:c.version,gitUrl:o.gitUrl,ref:o.ref})});return Pt(await l.json())}throw new Error("benchmarks().import() requires either a git source ({ source: { gitUrl, ref } }) or a local corpus directory ({ source: { directory } }), plus benchmarkName and version")},getImport:n,async watchImport(c,o){let l=o?.pollIntervalMs??ja,d=null;for(;;){An(o?.signal);let i=await n(c);if(i.status!==d&&(d=i.status,o?.onStatus?.(i)),Ja.has(i.status))return i;await It(l,o?.signal);}},listImports(c){return he(async o=>{let l=new URLSearchParams;o.limit!==void 0&&l.set("limit",String(o.limit)),o.cursor!==void 0&&l.set("cursor",o.cursor),c?.status!==void 0&&l.set("status",c.status),c?.benchmark!==void 0&&l.set("benchmark",c.benchmark);let d=l.toString()?`?${l}`:"",i=await R(e,`/api/benchmarks/imports${d}`);return Q(await i.json(),Pt)},c)},async delete(c){await R(e,`/api/benchmarks/${encodeURIComponent(c)}`,{method:"DELETE"});}}}function Ws(t){let e=Mn("customHarnesses",t);return {async create(n){let r=await Hs("customHarnesses().create()",n),s=await R(e,"/api/custom-harnesses",{method:"POST",body:r});return Tt(await s.json())},list(n){return he(async r=>{let s=await R(e,`/api/custom-harnesses${X(r)}`);return Q(await s.json(),Tt)},n)},async get(n){let r=await R(e,`/api/custom-harnesses/${encodeURIComponent(n)}`);return Tt(await r.json())},async delete(n){await R(e,`/api/custom-harnesses/${encodeURIComponent(n)}`,{method:"DELETE"});},async upsert(n,r){let s=await Hs("customHarnesses().upsert()",{...r,name:n}),a=await R(e,`/api/custom-harnesses/${encodeURIComponent(n)}`,{method:"PUT",body:s});return Tt(await a.json())}}}async function Hs(t,e){let n=typeof e.installScript=="string",r=typeof e.directory=="string";if(n&&r)throw new Error(`${t} takes EITHER an install script ({ installScript }) or a local directory ({ directory }), not both`);if(!n&&!r)throw new Error(`${t} requires either an install script ({ installScript }) or a local directory ({ directory }), plus runCommand`);let s={name:e.name,runCommand:e.runCommand,...e.env!==void 0?{env:JSON.stringify(e.env)}:{},...n?{installScript:e.installScript}:{}};if(r){let{tarGzipDirectory:a}=await Promise.resolve().then(()=>(In(),Pn)),c=a(e.directory);return Ot(s,{bytes:c,filename:"source.tar.gz"})}return Ot(s)}function qs(t){let e=Mn("jobs",t);async function n(d){let i=await R(e,`/api/jobs/${encodeURIComponent(d)}`);return Fe(await i.json())}async function r(d){let i=await R(e,`/api/jobs${X(d)}`);return Q(await i.json(),Fe)}async function s(d,i){let u=X(i,{status:i?.status?.length?i.status.join(","):void 0}),p=await R(e,`/api/jobs/${encodeURIComponent(d)}/trials${u}`);return Q(await p.json(),Js)}async function a(d,i,u){let p=await R(e,`/api/jobs/${encodeURIComponent(d)}/trials/${encodeURIComponent(i)}/trace${X(u)}`);return Q(await p.json(),Ya)}async function c(d,i){let u=i?`?format=${encodeURIComponent(i)}`:"";return R(e,`/api/jobs/${encodeURIComponent(d)}/export${u}`)}function o(d,i){let p=(d.headers.get("Content-Disposition")||"").match(/filename="([^"]+)"/);return p?p[1]:`job-${i}-export.json.gz`}async function*l(d,i){let{onEvent:u,signal:p}=i??{},g=i?.reconnectDelayMs??La,m=i?.maxReconnectDelayMs??Na,f=null,h=false,w=false,y=g;for(;!h;){An(p);let b;try{b=await fetch(`${e.baseUrl}/api/jobs/${encodeURIComponent(d)}/events`,{headers:{Authorization:`Bearer ${e.apiKey}`,Accept:"text/event-stream",...f!==null?{"Last-Event-ID":String(f)}:{}},signal:p});}catch(I){if(Vs(I,p))throw I;await It(y,p),y=Math.min(y*2,m);continue}if(!b.ok){if(b.status===429||b.status>=500){await b.text().catch(()=>""),await It(y,p),y=Math.min(y*2,m);continue}await On(b);}if(!b.body)throw new Error("Event stream response has no body");let S=false,v=[],k=Xa(I=>{let q=Number(I.id),L={seq:Number.isInteger(q)?q:-1,type:I.event||"message",data:I.data?Za(I.data):{}};Number.isInteger(q)&&(f=q),S=true,Ka.has(L.type)&&(h=true),v.push(L);}),E=b.body.getReader(),T=new TextDecoder;try{for(;!h;){let{done:I,value:q}=await E.read();if(I)break;k.push(T.decode(q,{stream:!0}));for(let L of v)u?.(L),yield L;v.length=0;}}catch(I){if(Vs(I,p))throw I}finally{await E.cancel().catch(()=>{});}if(h)break;An(p);let U=await n(d);if(Fa.has(U.status)){if(w)return U;w=true;continue}S&&(y=g),await It(y,p),y=Math.min(y*2,m);}return n(d)}return {async run(d,i){let u=await R(e,"/api/jobs",{method:"POST",headers:{"Content-Type":"application/json",...i?.idempotencyKey?{"Idempotency-Key":i.idempotencyKey}:{}},body:JSON.stringify(d)});return Fe(await u.json())},get:n,list(d){return he(r,d)},trials(d,i){return he(u=>s(d,{...u,status:i?.status}),i)},async trial(d,i){let p=await(await R(e,`/api/jobs/${encodeURIComponent(d)}/trials/${encodeURIComponent(i)}`)).json();return {...Js(p),jobId:p.jobId}},trialTrace:a,async*trialTraceEvents(d,i,u){let p=u?.cursor;for(;;){let g=await a(d,i,{cursor:p,limit:u?.limit});for(let m of g.items)yield m;if(!g.nextCursor)return;p=g.nextCursor;}},watch(d,i){return Qa(l(d,i))},async cancel(d){let i=await R(e,`/api/jobs/${encodeURIComponent(d)}/cancel`,{method:"POST"});return Fe(await i.json())},async compare(d){let i=d.map(encodeURIComponent).join(","),p=await(await R(e,`/api/jobs/compare?ids=${i}`)).json();return {jobs:(p.jobs||[]).map(za),taskMatrix:(p.taskMatrix||[]).map(qa)}},async rerunFailed(d,i){let u=await R(e,`/api/jobs/${encodeURIComponent(d)}/rerun-failed`,{method:"POST",headers:i?.idempotencyKey?{"Idempotency-Key":i.idempotencyKey}:void 0});return Fe(await u.json())},async regrade(d,i){let u={};i?.status?.length&&(u.status=i.status),i?.taskKey!==void 0&&(u.taskKey=i.taskKey);let p=await R(e,`/api/jobs/${encodeURIComponent(d)}/regrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return _t(await p.json())},async regradeTrial(d,i){let u=await R(e,`/api/jobs/${encodeURIComponent(d)}/trials/${encodeURIComponent(i)}/regrade`,{method:"POST"});return _t(await u.json())},listRegrades(d){return he(async i=>{let p=await(await R(e,`/api/regrades${X(i,{jobId:d?.jobId})}`)).json();return {items:p.items.map(_t),nextCursor:p.nextCursor,hasMore:p.hasMore}},d)},async getRegrade(d,i){let u=await R(e,`/api/regrades/${encodeURIComponent(d)}${X(i)}`);return _t(await u.json())},export:(async(d,i)=>{let u=await c(d,i?.format);if(i?.stream){if(!u.body)throw new Error("Export response has no body");return u.body}if(i?.to){if(!u.body)throw new Error("Export response has no body");let g=i.to;await promises.mkdir(g,{recursive:true});let m=xe.join(g,o(u,d)),f=stream.Readable.fromWeb(u.body);return await promises$1.pipeline(f,J.createWriteStream(m)),m}let p=await u.arrayBuffer();return Buffer.from(p)})}}function Za(t){try{let e=JSON.parse(t);return e&&typeof e=="object"?e:{value:e}}catch{return {raw:t}}}function ec(t){let e,n,r;return {get benchmarks(){return e??=zs(t)},get customHarnesses(){return n??=Ws(t)},get jobs(){return r??=qs(t)},meta(){return Ys(t)}}}async function Ys(t){let e=(t?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||C).replace(/\/$/,""),n=await fetch(`${e}/api/meta`);return n.ok||await On(n),await n.json()}Object.defineProperty(exports,"E2BProvider",{enumerable:true,get:function(){return e2b.E2BProvider}});Object.defineProperty(exports,"createE2BProvider",{enumerable:true,get:function(){return e2b.createE2BProvider}});Object.defineProperty(exports,"DaytonaProvider",{enumerable:true,get:function(){return daytona.DaytonaProvider}});Object.defineProperty(exports,"createDaytonaProvider",{enumerable:true,get:function(){return daytona.createDaytonaProvider}});Object.defineProperty(exports,"ModalProvider",{enumerable:true,get:function(){return modal.ModalProvider}});Object.defineProperty(exports,"createModalProvider",{enumerable:true,get:function(){return modal.createModalProvider}});exports.AGENT_REGISTRY=Nt;exports.AGENT_TYPES=ti;exports.Agent=Le;exports.BROWSER_ACTIONBOOK_PROMPT=nn;exports.BROWSER_LOGIN_MCP_SERVER_NAME=bn;exports.BrowserCredentialsClient=ft;exports.BrowserProfilesClient=St;exports.Evolve=Ne;exports.EvolveApiError=fe;exports.HOSTED_ERROR_CODES=Tn;exports.JUDGE_PROMPT=rn;exports.MANAGED_SANDBOX_PROVIDERS=Je;exports.NoActiveVersionError=At;exports.Pipeline=xt;exports.RETRY_FEEDBACK_PROMPT=on;exports.SCHEMA_PROMPT=Sr;exports.SWARM_RESULT_BRAND=ne;exports.SYSTEM_PROMPT=kr;exports.Semaphore=pe;exports.Swarm=_n;exports.SwarmResultList=ge;exports.TerminalPipeline=Ct;exports.VALIDATION_PRESETS=Mt;exports.VERIFY_PROMPT=sn;exports.WORKSPACE_PROMPT=br;exports.WORKSPACE_SWE_PROMPT=vr;exports.applyTemplate=z;exports.benchmarks=zs;exports.browserCredentials=vn;exports.browserProfiles=Rn;exports.buildWorkerSystemPrompt=an;exports.createAgentParser=ee;exports.createClaudeParser=rt;exports.createCodexParser=st;exports.createDroidParser=it;exports.createGeminiParser=ot;exports.customHarnesses=Ws;exports.executeWithRetry=D;exports.expandPath=M;exports.getAgentConfig=$;exports.getMcpSettingsDir=G;exports.getMcpSettingsPath=H;exports.hosted=ec;exports.isAgentWorkUpdate=er;exports.isHostedErrorCode=Et;exports.isValidAgentType=ri;exports.isZodSchema=j;exports.jobs=qs;exports.jsonSchemaToString=ie;exports.managedSandbox=Ni;exports.managedSecrets=xn;exports.meta=Ys;exports.parseNdjsonLine=Di;exports.parseNdjsonOutput=Ui;exports.parseQwenOutput=Zn;exports.readLocalDir=tr;exports.resolveStorageConfig=gt;exports.saveLocalDir=nr;exports.sessions=Ea;exports.storage=Oo;exports.writeClaudeMcpConfig=qe;exports.writeCodexMcpConfig=tt;exports.writeDroidGatewaySettings=et;exports.writeDroidMcpConfig=Ze;exports.writeGeminiMcpConfig=Ye;exports.writeMcpConfig=Gt;exports.writeQwenMcpConfig=Xe;exports.zodSchemaToJson=se;