@evolvingmachines/evolve 0.0.67 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/chunk-FHL4GIAZ.js +1 -0
  2. package/dist/chunk-ORD7JDZB.js +1 -0
  3. package/dist/chunk-SQDR2TAW.js +427 -0
  4. package/dist/cli/index.cjs +38 -38
  5. package/dist/cli/index.d.cts +1 -1
  6. package/dist/cli/index.d.ts +1 -1
  7. package/dist/cli/index.js +30 -30
  8. package/dist/index.cjs +65 -60
  9. package/dist/index.d.cts +332 -29
  10. package/dist/index.d.ts +332 -29
  11. package/dist/index.js +48 -43
  12. package/dist/managed-modal-IXZBT4D5.js +4 -0
  13. package/dist/resumable-XNW5SKRW.js +1 -0
  14. package/dist/{types-84M4J_Vm.d.cts → types-DGx_qo9M.d.cts} +118 -77
  15. package/dist/{types-84M4J_Vm.d.ts → types-DGx_qo9M.d.ts} +118 -77
  16. package/harness-capabilities.json +325 -77
  17. package/hosted-error-codes.json +1 -0
  18. package/package.json +9 -7
  19. package/skills/create-adapter/SKILL.md +1 -1
  20. package/skills/create-task/SKILL.md +1 -1
  21. package/skills/evolve/SKILL.md +1 -1
  22. package/skills/evolve-evals/SKILL.md +1 -1
  23. package/skills/evolve-evals/references/cli-reference/agent.md +1 -1
  24. package/skills/evolve-evals/references/cli-reference/analyze.md +7 -4
  25. package/skills/evolve-evals/references/cli-reference/check.md +5 -4
  26. package/skills/evolve-evals/references/cli-reference/index.md +1 -1
  27. package/skills/evolve-evals/references/cli-reference/run.md +6 -5
  28. package/skills/evolve-evals/references/core-concepts/agents.md +19 -5
  29. package/skills/evolve-evals/references/core-concepts/analyze.md +39 -5
  30. package/skills/evolve-evals/references/core-concepts/check.md +62 -6
  31. package/skills/evolve-evals/references/core-concepts/datasets.md +1 -1
  32. package/skills/evolve-evals/references/core-concepts/index.md +1 -1
  33. package/skills/evolve-evals/references/core-concepts/jobs.md +3 -3
  34. package/skills/evolve-evals/references/core-concepts/models.md +393 -41
  35. package/skills/evolve-evals/references/core-concepts/sandboxes.md +1 -1
  36. package/skills/evolve-evals/references/core-concepts/secrets.md +1 -1
  37. package/skills/evolve-evals/references/core-concepts/skills.md +1 -1
  38. package/skills/evolve-evals/references/core-concepts/task-verifiers.md +1 -1
  39. package/skills/evolve-evals/references/core-concepts/teams.md +1 -1
  40. package/skills/evolve-evals/references/core-concepts/upload.md +1 -1
  41. package/skills/evolve-evals/references/dashboard/checks.md +5 -3
  42. package/skills/evolve-evals/references/dashboard/jobs.md +1 -1
  43. package/skills/evolve-evals/references/getting-started/first-task.md +1 -1
  44. package/skills/evolve-evals/references/getting-started/quick-start.md +1 -1
  45. package/skills/evolve-evals/references/index.md +1 -1
  46. package/skills/evolve-evals/references/sdk/http.md +1 -1
  47. package/skills/evolve-evals/references/sdk/python.md +1 -1
  48. package/skills/evolve-evals/references/sdk/typescript.md +1 -1
  49. package/skills/evolve-evals/references/sdk-reference/analyses.md +16 -5
  50. package/skills/evolve-evals/references/sdk-reference/checks.md +14 -5
  51. package/skills/evolve-evals/references/sdk-reference/error-codes.md +3 -2
  52. package/skills/evolve-evals/references/sdk-reference/jobs.md +3 -3
  53. package/skills/evolve-evals/references/sdk-reference/meta.md +4 -3
  54. package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +6 -4
  55. package/skills/evolve-evals/references/sdk-reference/methods/checks.md +8 -4
  56. package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +5 -3
  57. package/skills/evolve-evals/references/sdk-reference/methods/meta.md +15 -4
  58. package/skills/evolve-evals/references/sdk-reference/skills.md +2 -2
  59. package/skills/evolve-evals/references/sdk-reference/types.md +11 -5
  60. package/spec/openapi.yaml +290 -137
  61. package/dist/chunk-HQJI3HHU.js +0 -1
  62. package/dist/chunk-RFLMRPGK.js +0 -427
  63. package/dist/managed-modal-IJW62SSK.js +0 -4
  64. package/dist/resumable-HFSICSH3.js +0 -1
package/dist/index.js CHANGED
@@ -1,20 +1,25 @@
1
- import {w,o,p,n,Da,Ha as Ha$1,g,s,m,h,c,e,d,f,i,j as j$1,k,l,r,q as q$1,a,t,Ja,Ba,Ea as Ea$1,Fa,Ia as Ia$1,ya as ya$1,za,Ca,Aa,Ka,La,Ma,xa as xa$1,Na,Ga,v,u,x,ua as ua$1,b,ha as ha$1,y,z as z$2,A,B as B$1}from'./chunk-RFLMRPGK.js';export{S as AGENT_EFFORT_SUPPORT_VALUES,P as ANALYSIS_ARTIFACT_STREAMS,G as ANALYSIS_STATUSES,H as CHECK_STATUSES,X as DEFAULT_HARNESS_TRIAL_LAYOUT,D as EVAL_SANDBOX_PROVIDERS,ha as EvolveApiError,ka as EvolveDigestMismatchError,la as EvolveIncompleteDownloadError,L as GATEWAY_TRACE_SEQ_BASE,Y as HARNESS_TRIAL_LAYOUTS,Q as HOSTED_ERROR_CODES,ja as ImportSettleError,F as JOB_LIST_KINDS,E as JOB_LIST_SCOPES,c as MANAGED_SANDBOX_PROVIDERS,ia as NoActiveVersionError,O as SANDBOX_LOG_STREAMS,J as TASK_LINKED_BY,K as TASK_LINK_REASONS,N as TRIAL_ARTIFACT_STREAMS,C as TRIAL_STATUSES,na as agents,ra as analyses,ea as analysisEvolveRecord,da as assembleTrialTree,ta as auth,ga as checkEvolveRecord,sa as checks,ma as datasets,M as gatewayUsageOf,aa as harborCopyPath,Z as harnessTrialLayout,_ as homeRelativePath,va as hosted,R as isHostedErrorCode,ca as jobEvolveRecord,pa as jobs,Da as managedSecrets,wa as meta,ua as orgs,I as passAtK,$ as placeHomeObject,Oa as sessions,oa as skills,fa as taskCheckEvolveRecord,ba as trialEvolveRecord,qa as trials}from'./chunk-RFLMRPGK.js';import'./chunk-HQJI3HHU.js';export{b as EvolveUploadTimeoutError}from'./chunk-5GVMBEYI.js';import {EventEmitter}from'events';import Kl from'ajv';import {randomBytes,randomUUID,publicEncrypt,constants,createHash}from'crypto';import {stringify,parse}from'smol-toml';import {execFile,exec}from'child_process';import {promisify}from'util';import {mkdir,appendFile,rm,readFile,writeFile,unlink,copyFile,readdir,mkdtemp,rename,stat}from'fs/promises';import {homedir,tmpdir}from'os';import*as K from'path';import {join,basename,posix,dirname,isAbsolute,normalize,resolve,relative}from'path';import xa from'zod-to-json-schema';import*as j from'fs';import {createWriteStream}from'fs';import {z as z$1}from'zod';export{E2BProvider,createE2BProvider}from'@evolvingmachines/e2b';export{DaytonaProvider,createDaytonaProvider}from'@evolvingmachines/daytona';export{ModalProvider,createModalProvider}from'@evolvingmachines/modal';var vo={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid"},Gt=["no-internet","pinned-context"],Jt={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}},bo=["timeoutMs","background","from","checkpointComment","resume"];var Pr=["off","minimal","low","medium","high","xhigh","max","thinking"],_r=2e5,Ir=["off","minimal","medium","thinking"],Or="medium";function ko(t){return t==="none"?{efforts:[],defaultEffort:null}:{efforts:t==="binary"?Ir:Pr,defaultEffort:Or}}function Ar(t,e){return e??U[t]?.defaultReasoningEffort}function Te(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function zt(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 So(t){let e=zt(t);return e?` --variant ${e} --thinking`:""}var U={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",effortSupport:"level",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",defaultReasoningEffort:"high",models:[{alias:"fable",modelId:"claude-fable-5-1",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-5",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-5",description:"Daily coding, features, tests"},{alias:"haiku",modelId:"claude-haiku-4-5-20251001",description:"Quick tasks, syntax correction"},{alias:"opus[1m]",modelId:"opus[1m]",description:"Complex reasoning with 1M context window"},{alias:"sonnet[1m]",modelId:"sonnet[1m]",description:"Daily coding with 1M context window"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:true,autoCompactWindow:_r}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,nativeConfigPath:i})=>{let s=n?"--continue ":"",d=r?` --effort ${r}`:"",u=i?` --settings ${i}`:"";return `echo "${t}" | claude -p ${s}--model ${e}${d}${u} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",effortSupport:"level",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-5.6-sol",defaultReasoningEffort:"high",models:[{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Newest frontier flagship"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"GPT-5.6 flagship (previous generation)"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Balances intelligence and cost"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"High-volume, cost-sensitive tier"},{alias:"gpt-5.5",modelId:"gpt-5.5",description:"GPT-5.5 frontier model (two generations back)"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},nativeConfig:{format:"toml",path:"~/.codex/config.toml",delivery:"base-file"},presets:{"no-internet":{commandFlags:" -c web_search=disabled"},"pinned-context":{commandFlags:` -c model_context_window=${_r}`}},skillsConfig:{targetDir:"~/.codex/skills"},spendTrackingEnvs:{sessionTagEnv:"EVOLVE_LITELLM_CUSTOMER_ID",runTagEnv:"EVOLVE_LITELLM_TAGS"},setupCommand:`printf '%s\\n' "$OPENAI_API_KEY" | codex login --with-api-key`,buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,presetFlags:i})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s}${i??""} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",effortSupport:"none",oauthEnv:"GEMINI_OAUTH_FILE_PATH",oauthFileName:"oauth_creds.json",oauthActivationEnv:{key:"GOOGLE_GENAI_USE_GCA",value:"true"},baseUrlEnv:"GOOGLE_GEMINI_BASE_URL",defaultModel:"gemini-3.5-flash",models:[{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest flash the stable gemini CLI serves: coding + agentic planning"},{alias:"gemini-3.5-flash-lite",modelId:"gemini-3.5-flash-lite",description:"Most cost-effective 3.5-class model"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${Ee(t)} --model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",effortSupport:"binary",defaultModel:"qwen3.7-max",defaultReasoningEffort:"thinking",models:[{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Strongest reasoning and coding option"},{alias:"qwen3.7-plus",modelId:"qwen3.7-plus",description:"Latest balanced Qwen Cloud recommendation"},{alias:"qwen3.6-flash",modelId:"qwen3.6-flash",description:"Fast and cost-effective option"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.qwen/skills"},spendTrackingJsonConfig:{headersPath:"model.generationConfig.customHeaders"},gatewayModelAliases:{"qwen3.7-max":"dashscope/qwen3.7-max","qwen3.7-plus":"dashscope/qwen3.7-plus","qwen3.6-flash":"dashscope/qwen3.6-flash"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let i=n?"--continue ":"",s=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${i}--auth-type openai --model ${s} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",effortSupport:"level",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k3",defaultReasoningEffort:"max",models:[{alias:"kimi-k3",modelId:"moonshot/kimi-k3",description:"Latest flagship: 1M context, always-on thinking",maxContextSize:1048576},{alias:"kimi-k2.7-code",modelId:"moonshot/kimi-k2.7-code",description:"Latest coding-specialized standard model"},{alias:"kimi-k3-raptor",modelId:"kimi-k3-raptor",description:"Evolve-managed Kimi K3 Raptor route for latency-sensitive agent runs",maxContextSize:1048576},{alias:"kimi-k2p7-code-raptor",modelId:"kimi-k2p7-code-raptor",description:"Evolve-managed Kimi K2.7 Code Raptor route for latency-sensitive agent runs"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.kimi-code/skills"},defaultBaseUrl:"https://api.moonshot.ai/v1",spendTrackingTomlProvider:{configPath:"~/.kimi-code/config.toml",providerName:"evolve-gateway",modelName:"evolve-default",maxContextSize:262144},checkpointExcludes:[".kimi-code/config.toml"],gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","kimi-k2.7-code":"moonshot/kimi-k2.7-code","kimi-k3-raptor":"kimi-k3-raptor","kimi-k2p7-code-raptor":"kimi-k2p7-code-raptor"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n,homeDir:r=q$1})=>{let i=e?"--continue ":"",s=Ee(t),d=`--config-file ${r}/.kimi-code/config.toml`,u=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,l=Te(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${i}${d}${u}${l} -p ${s} --output-format stream-json; else kimi ${i}-p ${s} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-opus-5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[{alias:"openrouter/anthropic/claude-fable-5.1",modelId:"openrouter/anthropic/claude-fable-5.1",description:"Anthropic Fable 5.1 via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-5",modelId:"openrouter/anthropic/claude-opus-5",description:"Anthropic Opus 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-5",modelId:"openrouter/anthropic/claude-sonnet-5",description:"Anthropic Sonnet 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-haiku-4.5",modelId:"openrouter/anthropic/claude-haiku-4.5",description:"Anthropic Haiku via OpenRouter"},{alias:"openrouter/openai/gpt-6-astra",modelId:"openrouter/openai/gpt-6-astra",description:"OpenAI GPT-6 Astra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-sol",modelId:"openrouter/openai/gpt-5.6-sol",description:"OpenAI GPT-5.6 Sol via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-terra",modelId:"openrouter/openai/gpt-5.6-terra",description:"OpenAI GPT-5.6 Terra via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-luna",modelId:"openrouter/openai/gpt-5.6-luna",description:"OpenAI GPT-5.6 Luna via OpenRouter"},{alias:"openrouter/google/gemini-3.6-flash",modelId:"openrouter/google/gemini-3.6-flash",description:"Gemini 3.6 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3.7-max",modelId:"openrouter/qwen/qwen3.7-max",description:"Qwen 3.7 Max via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k3",modelId:"openrouter/moonshotai/kimi-k3",description:"Kimi K3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3",modelId:"openrouter/z-ai/glm-5.3",description:"Zhipu GLM-5.3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3-flash",modelId:"openrouter/z-ai/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash (OpenRouter id; the Evolve gateway serves it from Fireworks)"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{targetDir:"~/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,isExternalGateway:i,reasoningEffort:s})=>{let d=n?"--continue ":"",u=So(s);if(i)return `OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${e} --format json${u} "${t}" < /dev/null`;let l=xo(e);return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model ${l} --format json${u} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${d}--model litellm/${l} --format json${u} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5.1",modelId:"claude-fable-5-1",description:"Factory-managed Claude Fable 5.1"},{alias:"claude-opus-5",modelId:"claude-opus-5",description:"Factory-managed Claude Opus 5"},{alias:"claude-sonnet-5",modelId:"claude-sonnet-5",description:"Factory-managed Claude Sonnet 5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Factory-managed GPT-6 Astra"},{alias:"gpt-5.6-sol",modelId:"gpt-5.6-sol",description:"Factory-managed GPT-5.6 Sol"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Factory-managed GPT-5.6 Terra"},{alias:"gpt-5.6-luna",modelId:"gpt-5.6-luna",description:"Factory-managed GPT-5.6 Luna"},{alias:"gemini-3.6-flash",modelId:"gemini-3.6-flash",description:"Factory-managed Gemini 3.6 Flash"},{alias:"qwen3.7-max",modelId:"qwen3.7-max",description:"Qwen 3.7 Max via the Evolve gateway"},{alias:"kimi-k3",modelId:"kimi-k3",description:"Factory-managed Droid Core Kimi K3"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"claude-fable-5.1":"claude-fable-5-1","kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","qwen3.7-max":"dashscope/qwen3.7-max"},droidGatewaySettings:{settingsPath:"~/.factory/evolve-settings.json",displayName:"Evolve Gateway",provider:"generic-chat-completion-api",maxOutputTokens:32768},checkpointDirs:["~/.factory"],buildCommand:({prompt:t,model:e,isResume:n,sessionId:r,reasoningEffort:i,isDirectMode:s,isExternalGateway:d,homeDir:u=q$1})=>{let l=!s||d,o=l?`--settings ${u}/.factory/evolve-settings.json `:"",a=l?"custom:Evolve-Gateway-0":e,c=i?` --reasoning-effort ${i}`:"",p=n&&r?`--session-id ${Ee(r)} `:"";return `printf '%s' ${Ee(t)} | droid ${o}exec ${p}--skip-permissions-unsafe --cwd ${u}/workspace --output-format stream-json --model ${Ee(a)}${c}`}}};function D(t){let e=U[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function oe(t,e){if(t.models.some(i=>i.alias===e||i.modelId===e))return true;let n=t.gatewayModelAliases;if(n&&(e in n||Object.values(n).includes(e)))return true;let r=t.directModelAliases;return !!(r&&(e in r||Object.values(r).includes(e)))}function Mr(t,e){return t.models.find(n=>n.alias===e)?.modelId??e}function xo(t){return t.startsWith("openrouter/")||oe(U.opencode,t)?t:`openrouter/${t}`}function Wt(t){return t in U}function M(t,e=q$1){return t.replace(/^~/,e)}function Ee(t){return `'${t.replace(/'/g,"'\\''")}'`}function J(t,e=q$1){let n=D(t);return `${M(n.mcpConfig.settingsDir,e)}/${n.mcpConfig.filename}`}function z(t,e=q$1){let n=D(t);return M(n.mcpConfig.settingsDir,e)}function W(t){if(t instanceof Error){let e=t.message.toLowerCase();return e.includes("not found")||e.includes("enoent")||e.includes("no such file")||e.includes("does not exist")}return false}function Ht(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))Ht(e,n);}function _e(t){return t.type?t.type:t.command?"stdio":"sse"}function Co(t){let e=_e(t);return {...t,type:e}}function Eo(t){let{type:e,url:n,...r}=t;return _e(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function To(t){return {type:_e(t),...t}}function Ro(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function _o(t){let e=_e(t),{type:n,httpHeaders:r,envHttpHeaders:i,bearerTokenEnvVar:s,envVars:d,...u}=t;if(e==="stdio"&&t.command)return {type:"stdio",...u};if(t.url){let l={...u,type:e==="sse"?"sse":"http",url:t.url},o=t.headers??r;return o&&Object.keys(o).length>0&&(l.headers=o),l}return {type:e==="stdio"?"stdio":"http",...u}}async function qt(t,e,n,r,i){Re(n);let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let u={};try{let o=await t.files.read(d);typeof o=="string"&&(u=JSON.parse(o));}catch(o){if(!W(o))throw o}let l=Object.fromEntries(Object.entries(n).map(([o,a])=>[o,r(a)]));await t.files.write(d,JSON.stringify({...u,mcpServers:l},null,2));}async function Xe(t,e,n,r){Re(n);let i=z("claude",r),s=J("claude",r),d=Object.fromEntries(Object.entries(n).map(([l,o])=>[l,To(o)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:d},null,2)),await t.files.makeDir(i);let u={};try{let l=await t.files.read(s);typeof l=="string"&&(u=JSON.parse(l));}catch(l){if(!W(l))throw l}u.enableAllProjectMcpServers=true,await t.files.write(s,JSON.stringify(u,null,2));}async function et(t,e,n){await qt(t,"gemini",e,Co,n);}async function tt(t,e,n){await qt(t,"qwen",e,Eo,n);}async function nt(t,e,n,r,i){let s=z(e,i),d=J(e,i);await t.files.makeDir(s);let u={};try{let p=await t.files.read(d);typeof p=="string"&&(u=JSON.parse(p));}catch(p){if(!W(p))throw p}let l=n.split("."),o=u;for(let p=0;p<l.length-1;p++){let g=l[p];(typeof o[g]!="object"||o[g]===null)&&(o[g]={}),o=o[g];}let a=l[l.length-1],c=typeof o[a]=="object"&&o[a]!==null?o[a]:{};o[a]={...c,...r},await t.files.write(d,JSON.stringify(u,null,2));}async function Yt(t,e,n){let r=z("qwen",n),i=J("qwen",n);await t.files.makeDir(r);let s={};try{let o=await t.files.read(i);typeof o=="string"&&(s=JSON.parse(o));}catch(o){if(!W(o))throw o}let d=s.model??{},u=d.generationConfig??{},l=u.extra_body??{};s.model={...d,generationConfig:{...u,extra_body:{...l,enable_thinking:e}}},await t.files.write(i,JSON.stringify(s,null,2));}async function Zt(t,e,n){await qt(t,"kimi",e,Ro,n);}async function rt(t,e,n){Re(n);let r=`${e}/.factory`,i=`${r}/mcp.json`;await t.files.makeDir(r);let s={};try{let u=await t.files.read(i);typeof u=="string"&&(s=JSON.parse(u));}catch(u){if(!W(u))throw u}let d=Object.fromEntries(Object.entries(n).map(([u,l])=>[u,_o(l)]));await t.files.write(i,JSON.stringify({...s,mcpServers:d},null,2));}async function it(t,e,n,r){let i=M(e.settingsPath,r),s=i.slice(0,i.lastIndexOf("/"));await t.files.makeDir(s);let d={cloudSessionSync:false,customModels:[{model:e.model,displayName:e.displayName,baseUrl:e.baseUrl,apiKey:`\${${e.apiKeyEnv}}`,provider:e.provider,...e.maxOutputTokens!==void 0&&{maxOutputTokens:e.maxOutputTokens},extraHeaders:n}]};await t.files.write(i,JSON.stringify(d,null,2));}async function Qt(t,e,n){Re(n);let r=`${e}/opencode.json`,i={};try{let d=await t.files.read(r);typeof d=="string"&&(i=JSON.parse(d));}catch(d){if(!W(d))throw d}let s=Object.fromEntries(Object.entries(n).map(([d,u])=>[d,Po(u)]));await t.files.write(r,JSON.stringify({...i,mcp:s},null,2));}function Po(t){let e=_e(t);if(e==="stdio"&&t.command){let r={type:"local",command:t.args?[t.command,...t.args]:[t.command]};return t.env&&Object.keys(t.env).length>0&&(r.environment=t.env),r}if(t.url){let n={type:"remote",url:t.url};return t.headers&&Object.keys(t.headers).length>0&&(n.headers=t.headers),n}return {type:e==="stdio"?"local":"remote",...t}}function Xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function $r(t,e,n){let r=t[e];if(r===void 0)return {};let i=Xt(r);if(!i){let s=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${e}" in ${n}: expected a TOML table, found ${s}`)}return i}function en(t,e){if(t===e)return true;if(Array.isArray(t)||Array.isArray(e))return Array.isArray(t)&&Array.isArray(e)&&t.length===e.length&&t.every((s,d)=>en(s,e[d]));let n=Xt(t),r=Xt(e);if(!n||!r)return false;let i=Object.keys(n);return i.length===Object.keys(r).length&&i.every(s=>s in r&&en(n[s],r[s]))}async function Ur(t,e){let n="";try{let r=await t.files.read(e);typeof r=="string"&&(n=r);}catch(r){if(!W(r))throw r;return {}}if(!n.trim())return {};try{return parse(n)}catch(r){throw new Error(`Failed to parse TOML at ${e}: ${r.message}`)}}async function tn(t,e,n){await t.files.write(e,stringify(n).trimEnd()+`
2
- `);}function Ao(t,e){let n={},r=e.type??(e.command?"stdio":"http");if(r==="http"||r==="sse"||!!e.url){if(!e.url)throw new Error(`MCP server "${t}" is missing url for ${r} transport`);n.url=e.url,e.bearerTokenEnvVar&&(n.bearer_token_env_var=e.bearerTokenEnvVar);let s=e.httpHeaders??e.headers;s&&Object.keys(s).length>0&&(n.http_headers=s),e.envHttpHeaders&&Object.keys(e.envHttpHeaders).length>0&&(n.env_http_headers=e.envHttpHeaders);}else n.command=e.command,e.args&&e.args.length>0&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd);return e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.envVars&&e.envVars.length>0&&(n.env_vars=e.envVars),n}async function st(t,e,n){for(let[u,l]of Object.entries(e))Ht(u,l);let r=z("codex",n),i=J("codex",n);await t.files.makeDir(r);let s=await Ur(t,i);s.experimental_use_rmcp_client===void 0&&(s.experimental_use_rmcp_client=true);let d=$r(s,"mcp_servers",i);s.mcp_servers=d;for(let[u,l]of Object.entries(e))d[u]===void 0&&(d[u]=Ao(u,l));await tn(t,i,s);}async function ot(t$1,e,n,r={},i){let s=z("codex",i),d=J("codex",i);await t$1.files.makeDir(s);let u$1=await Ur(t$1,d),l={...n?{[t]:n.sessionTagEnv,[u]:n.runTagEnv}:{},...r},o={name:"Evolve Gateway",base_url:e,env_key:"OPENAI_API_KEY",wire_api:"responses",...Object.keys(l).length>0?{env_http_headers:l}:{}},a=$r(u$1,"model_providers",d);u$1.model_provider==="evolve-gateway"&&en(a["evolve-gateway"],o)||(u$1.model_provider="evolve-gateway",a["evolve-gateway"]=o,u$1.model_providers=a,await tn(t$1,d,u$1));}async function nn(t,e,n,r,i){let s=M(e.configPath,i),d=s.slice(0,s.lastIndexOf("/"));await t.files.makeDir(d);let u={default_model:e.modelName,default_thinking:r.defaultThinking,default_permission_mode:"auto",thinking:{mode:r.defaultThinking?"on":"off",...r.defaultThinking&&r.thinkingEffort?{effort:r.thinkingEffort}:{}},providers:{[e.providerName]:{type:"kimi",base_url:r.baseUrl,api_key:r.apiKey,custom_headers:n}},models:{[e.modelName]:{provider:e.providerName,model:r.model,max_context_size:e.maxContextSize,capabilities:["image_in","thinking"]}}};await tn(t,s,u);}async function rn(t,e,n,r,i){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await Xe(e,n,r,i);break;case "codex":await st(e,r,i);break;case "gemini":await et(e,r,i);break;case "qwen":await tt(e,r,i);break;case "kimi":await Zt(e,r,i);break;case "opencode":await Qt(e,n,r);break;case "droid":await rt(e,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function Dr(t){return !!t&&t.sessionUpdate!=="error"&&t.sessionUpdate!=="usage"}function P(t,e){for(let n of t)if(typeof n=="string"&&n.length>0)return n;try{let n=JSON.stringify(e);if(typeof n=="string"&&n.length>0)return n}catch{}return String(e)}function at(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Pe(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=at(e.input_tokens),r=at(e.output_tokens),i=at(e.cache_read_input_tokens),s=at(e.cache_creation_input_tokens),d={};(n!==void 0||i!==void 0||s!==void 0)&&(d.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(d.completionTokens=r),i!==void 0&&(d.cachedTokens=i);let u={};for(let[l,o]of Object.entries(e))l==="input_tokens"||l==="output_tokens"||o!=null&&(u[l]=o);return Object.keys(u).length>0&&(d.extra=u),d}function ee(t){if(typeof t=="string"&&t.length>0&&!Number.isNaN(Date.parse(t)))return t;if(typeof t=="number"&&Number.isFinite(t))return new Date(t).toISOString()}function lt(){let t={};return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=a.session_id;switch(a.type){case "system":return null;case "assistant":{let p=n(a.message?.content,"assistant")??[],g=Pe(a.message?.usage);return g&&p.push({sessionUpdate:"usage",scope:"call",usage:g}),e(p,a,c)}case "user":{let p=a.message?.content;if(typeof p=="string"||Array.isArray(p)&&p.length===1&&p[0].type==="text")return null;let g=a.tool_use_result??a.toolUseResult;return e(n(p,"user",g),a,c)}case "result":{let p=[],g=typeof a.total_cost_usd=="number"&&Number.isFinite(a.total_cost_usd)?a.total_cost_usd:void 0,f=Pe(a.usage)??(g!==void 0?{}:null);if(f&&(g!==void 0&&(f.costUsd=g),p.push({sessionUpdate:"usage",scope:"run",usage:f})),a.is_error===true){let m=(Array.isArray(a.errors)?a.errors:[]).filter(y=>typeof y=="string"&&y.length>0).join(`
3
- `);p.push({sessionUpdate:"error",message:P([m,a.result,a.subtype],a),fatal:true});}return e(p,a,c)}default:return null}};function e(l,o,a){if(!l||l.length===0)return null;let c=o.message,p=ee(o.timestamp),g=typeof c?.model=="string"&&c.model?c.model:void 0,f=typeof c?.id=="string"&&c.id?c.id:void 0,h=typeof o.parent_tool_use_id=="string"&&o.parent_tool_use_id?o.parent_tool_use_id:void 0,m={};for(let y of ["stop_reason","stop_sequence","requestId"]){let w=c?.[y];w!=null&&(m[y]=w);}return l.map(y=>({sessionId:a,update:y,...p!==void 0?{timestamp:p}:{},...g!==void 0?{model:g}:{},...f!==void 0?{messageId:f}:{},...h!==void 0?{parentToolCallId:h}:{},...Object.keys(m).length>0?{extra:m}:{}}))}function n(l,o,a){if(typeof l=="string")return o==="user"?null:[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}];if(!l||!Array.isArray(l))return null;let c=[];for(let p of l){let g=null;switch(p.type){case "text":case "text_delta":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.text}};break;case "image":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"image",data:p.source?.type==="base64"?p.source.data:"",mimeType:p.source?.type==="base64"?p.source.media_type:"",uri:p.source?.type==="url"?p.source.url:void 0}};break;case "thinking":case "thinking_delta":g={sessionUpdate:"agent_thought_chunk",content:{type:"text",text:p.thinking}};break;case "tool_use":case "server_tool_use":case "mcp_tool_use":{if(t[p.id]=p,p.name==="TodoWrite")Array.isArray(p.input?.todos)&&(g={sessionUpdate:"plan",entries:u(p.input)});else {let f=r(p);g={sessionUpdate:"tool_call",toolCallId:p.id,status:"pending",...f,toolName:p.name};}break}case "tool_result":case "tool_search_tool_result":case "web_fetch_tool_result":case "web_search_tool_result":case "code_execution_tool_result":case "bash_code_execution_tool_result":case "text_editor_code_execution_tool_result":case "mcp_tool_result":{let f=t[p.tool_use_id];if(!f||(delete t[p.tool_use_id],f.name==="TodoWrite"))break;g={sessionUpdate:"tool_call_update",toolCallId:p.tool_use_id,status:"is_error"in p&&p.is_error?"failed":"completed",...i(p,f),...a!=null?{rawOutput:a}:{}};break}}g&&c.push(g);}return c.length>0?c:null}function r(l){let o=l.name,a=l.input||{};switch(o){case "Task":return {title:a.description||"Task",kind:"think",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "NotebookRead":return {title:a.notebook_path?`Read Notebook ${a.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "NotebookEdit":return {title:a.notebook_path?`Edit Notebook ${a.notebook_path}`:"Edit Notebook",kind:"edit",content:a.new_source?[{type:"content",content:{type:"text",text:a.new_source}}]:[],locations:a.notebook_path?[{path:a.notebook_path}]:[],rawInput:a};case "Bash":return {title:a.command?"`"+a.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:a.description?[{type:"content",content:{type:"text",text:a.description}}]:[],rawInput:a};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:a};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:a};case "Read":{let c="";return a.limit?c=" ("+((a.offset??0)+1)+" - "+((a.offset??0)+a.limit)+")":a.offset&&(c=" (from line "+(a.offset+1)+")"),{title:"Read "+(a.file_path??"File")+c,kind:"read",content:[],locations:a.file_path?[{path:a.file_path,line:a.offset??0}]:[],rawInput:a}}case "LS":return {title:a.path?`List \`${a.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:a};case "Edit":{let c=a.file_path;return {title:c?`Edit \`${c}\``:"Edit",kind:"edit",content:c?[{type:"diff",path:c,oldText:a.old_string??null,newText:a.new_string??""}]:[],locations:c?[{path:c}]:[],rawInput:a}}case "Write":return {title:a.file_path?`Write ${a.file_path}`:"Write",kind:"edit",content:a.file_path?[{type:"diff",path:a.file_path,oldText:null,newText:a.content??""}]:[],locations:a.file_path?[{path:a.file_path}]:[],rawInput:a};case "Glob":{let c="Find";return a.path&&(c+=` \`${a.path}\``),a.pattern&&(c+=` \`${a.pattern}\``),{title:c,kind:"search",content:[],locations:a.path?[{path:a.path}]:[],rawInput:a}}case "Grep":{let c="grep";return a["-i"]&&(c+=" -i"),a["-n"]&&(c+=" -n"),a["-A"]!==void 0&&(c+=` -A ${a["-A"]}`),a["-B"]!==void 0&&(c+=` -B ${a["-B"]}`),a["-C"]!==void 0&&(c+=` -C ${a["-C"]}`),a.output_mode==="files_with_matches"?c+=" -l":a.output_mode==="count"&&(c+=" -c"),a.head_limit!==void 0&&(c+=` | head -${a.head_limit}`),a.glob&&(c+=` --include="${a.glob}"`),a.type&&(c+=` --type=${a.type}`),a.multiline&&(c+=" -P"),c+=` "${a.pattern??""}"`,a.path&&(c+=` ${a.path}`),{title:c,kind:"search",content:[],rawInput:a}}case "WebFetch":return {title:a.url?`Fetch ${a.url}`:"Fetch",kind:"fetch",content:a.prompt?[{type:"content",content:{type:"text",text:a.prompt}}]:[],rawInput:a};case "WebSearch":{let c=`"${a.query??""}"`;return a.allowed_domains?.length>0&&(c+=` (allowed: ${a.allowed_domains.join(", ")})`),a.blocked_domains?.length>0&&(c+=` (blocked: ${a.blocked_domains.join(", ")})`),{title:c,kind:"fetch",content:[],rawInput:a}}case "TodoWrite":return {title:Array.isArray(a.todos)?`Update TODOs: ${a.todos.map(c=>c.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:a};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:a.plan?[{type:"content",content:{type:"text",text:a.plan}}]:[],rawInput:a};default:if(o?.startsWith("mcp__")){let c=o.split("__"),p=c[1]||"mcp",g=c.slice(2).join("__")||o;return {title:`${p}: ${g}`,kind:"other",content:[],rawInput:a}}return {title:o||"Unknown Tool",kind:"other",content:[],rawInput:a}}}function i(l,o){return o?.name==="ExitPlanMode"?{title:"Exited Plan Mode"}:s(l.content)}function s(l){return Array.isArray(l)&&l.length>0?{content:l.map(o=>({type:"content",content:d(o)}))}:typeof l=="string"&&l.length>0?{content:[{type:"content",content:{type:"text",text:l}}]}:{}}function d(l){if(l.type==="text")return {type:"text",text:l.text};if(l.type==="image"){if(l.data&&l.mimeType)return {type:"image",data:l.data,mimeType:l.mimeType};if(l.source?.type==="base64")return {type:"image",data:l.source.data||"",mimeType:l.source.media_type||""};if(l.source?.type==="url")return {type:"image",data:"",mimeType:"",uri:l.source.url}}return l}function u(l){return l.todos.map(o=>({content:o.content,status:o.status||"pending",priority:"medium"}))}}function ct(){let e;return function(a){let c;try{c=JSON.parse(a);}catch{return null}if(c._meta||c._prompt)return null;let p=[];switch(c.type){case "thread.started":return typeof c.thread_id=="string"&&c.thread_id&&(e=c.thread_id),null;case "turn.started":return null;case "turn.completed":{let g=n(c.usage);if(!g)return null;p.push({update:{sessionUpdate:"usage",scope:"run",usage:g}});break}case "error":{let g=P([c.message],c);p.push({update:{sessionUpdate:"error",message:g,fatal:false}});break}case "turn.failed":{let g=P([c.error?.message],c.error??c);p.push({update:{sessionUpdate:"error",message:g,fatal:true}});break}case "item.started":{let g=c.item;if(!g)return null;let f=r(g);f&&p.push({update:f});break}case "item.updated":{let g=c.item;if(!g)return null;let f=i(g);f&&p.push({update:f});break}case "item.completed":{let g=c.item;if(!g)return null;let f=s(g);f&&p.push({update:f});break}default:return null}return p.length===0?null:e===void 0?p:p.map(g=>({sessionId:e,...g}))};function n(o){if(!o||typeof o!="object"||Array.isArray(o))return null;let a=o,c=y=>typeof y=="number"&&Number.isFinite(y)?y:void 0,p={},g=c(a.input_tokens),f=c(a.output_tokens),h=c(a.cached_input_tokens);g!==void 0&&(p.promptTokens=g),f!==void 0&&(p.completionTokens=f),h!==void 0&&(p.cachedTokens=h);let m={};for(let[y,w]of Object.entries(a))y==="input_tokens"||y==="output_tokens"||y==="cached_input_tokens"||w!=null&&(m[y]=w);return Object.keys(m).length>0&&(p.extra=m),p}function r(o){let a=o.id;switch(o.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${o.server}:${o.tool}`},{sessionUpdate:"tool_call",toolCallId:a,title:`${o.server}: ${o.tool}`,toolName:`mcp__${o.server}__${o.tool}`,kind:"other",status:"in_progress",rawInput:o.arguments,content:[]};case "command_execution":return {type:"command_execution",name:o.command},{sessionUpdate:"tool_call",toolCallId:a,title:o.command?`\`${o.command}\``:"Execute Command",toolName:"command_execution",kind:"execute",status:"in_progress",rawInput:{command:o.command},content:[]};case "web_search":return {type:"web_search",name:o.query},{sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function i(o){return o.type==="todo_list"?{sessionUpdate:"plan",entries:l(o.items)}:null}function s(o){let a=o.id;switch(o.type){case "error":return {sessionUpdate:"error",message:P([o.message],o),fatal:false};case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o.text??o.summary?.join(`
1
+ import {w,o,p,n,Da,Ha as Ha$1,g,s,m,h,c,e,d,f,i,j as j$1,k,l,r,q,a,t,Ja as Ja$1,Ba,Ea,Fa,Ia,ya,za as za$1,Ca,Aa,Ka as Ka$1,La,Ma,xa,Na,Ga as Ga$1,v,u,x,ua,b,ha,y,z as z$1,A as A$1,B as B$1}from'./chunk-SQDR2TAW.js';export{S as AGENT_EFFORT_SUPPORT_VALUES,P as ANALYSIS_ARTIFACT_STREAMS,G as ANALYSIS_STATUSES,H as CHECK_STATUSES,X as DEFAULT_HARNESS_TRIAL_LAYOUT,D as EVAL_SANDBOX_PROVIDERS,ha as EvolveApiError,ka as EvolveDigestMismatchError,la as EvolveIncompleteDownloadError,L as GATEWAY_TRACE_SEQ_BASE,Y as HARNESS_TRIAL_LAYOUTS,Q as HOSTED_ERROR_CODES,ja as ImportSettleError,F as JOB_LIST_KINDS,E as JOB_LIST_SCOPES,c as MANAGED_SANDBOX_PROVIDERS,ia as NoActiveVersionError,O as SANDBOX_LOG_STREAMS,J as TASK_LINKED_BY,K as TASK_LINK_REASONS,N as TRIAL_ARTIFACT_STREAMS,C as TRIAL_STATUSES,na as agents,ra as analyses,ea as analysisEvolveRecord,da as assembleTrialTree,ta as auth,ga as checkEvolveRecord,sa as checks,ma as datasets,M as gatewayUsageOf,aa as harborCopyPath,Z as harnessTrialLayout,_ as homeRelativePath,va as hosted,R as isHostedErrorCode,ca as jobEvolveRecord,pa as jobs,Da as managedSecrets,wa as meta,ua as orgs,I as passAtK,$ as placeHomeObject,Oa as sessions,oa as skills,fa as taskCheckEvolveRecord,ba as trialEvolveRecord,qa as trials}from'./chunk-SQDR2TAW.js';import'./chunk-FHL4GIAZ.js';import {c as c$1,b as b$1}from'./chunk-ORD7JDZB.js';export{b as EvolveUploadTimeoutError}from'./chunk-5GVMBEYI.js';import {EventEmitter}from'events';import ru from'ajv';import {randomBytes,randomUUID,publicEncrypt,constants,createHash}from'crypto';import*as ce from'fs';import {createWriteStream}from'fs';import {stringify,parse}from'smol-toml';import {stringify as stringify$1}from'yaml';import {execFile,exec}from'child_process';import {promisify}from'util';import {mkdir,appendFile,rm,readFile,writeFile,unlink,copyFile,readdir,mkdtemp,rename,stat}from'fs/promises';import {homedir,tmpdir}from'os';import*as le from'path';import {join,basename,posix,dirname,isAbsolute,normalize,resolve,relative}from'path';import Bc from'zod-to-json-schema';import {z}from'zod';export{E2BProvider,createE2BProvider}from'@evolvingmachines/e2b';export{DaytonaProvider,createDaytonaProvider}from'@evolvingmachines/daytona';export{ModalProvider,createModalProvider}from'@evolvingmachines/modal';function F(t){return `'${t.replace(/'/g,"'\\''")}'`}var Ka={CLAUDE:"claude",CODEX:"codex",GEMINI:"gemini",QWEN:"qwen",KIMI:"kimi",OPENCODE:"opencode",DROID:"droid",PI:"pi",PRIME_AGENT:"prime-agent",DSH:"dsh",ZCODE:"zcode",ANTIGRAVITY:"antigravity"},$n=["no-internet","pinned-context"],Dn={strict:{coerceTypes:false,removeAdditional:false,useDefaults:false,allErrors:true},loose:{coerceTypes:"array",removeAdditional:false,useDefaults:true,allErrors:true}},ja=["timeoutMs","background","from","checkpointComment","resume"];var Oi=["off","minimal","low","medium","high","xhigh","max","thinking"],Nn=2e5,Ai=["off","minimal","medium","thinking"],Mi="medium";function Va(t,e){return t==="none"?{efforts:[],defaultEffort:null}:{efforts:e??(t==="binary"?Ai:Oi),defaultEffort:Mi}}function Ui(t,e){return e??K[t]?.defaultReasoningEffort}function ke(t){return t!=="off"&&t!=="none"&&t!=="minimal"&&t!=="no-thinking"}function Ln(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 Ga(t){let e=Ln(t);return e?` --variant ${e} --thinking`:""}var He=["low","medium","high"];function $i(t){if(t){if(He.includes(t))return t;throw new Error(`Evolve agent config: agent "dsh" honors reasoning effort ${He.map(e=>`"${e}"`).join(", ")} only; "${t}" is not one of them and would be recorded but never applied.`)}}var kt="evolve",Ja="PI_MCP_ADAPTER_EXTENSION",za="/opt/evolve/pi-mcp-adapter/node_modules/pi-mcp-adapter/index.ts";function bt(t){if(t)return t==="none"||t==="no-thinking"?"off":t==="thinking"?"medium":t}function St(t,e){return e.isDirectMode&&!e.isExternalGateway&&t.startsWith("openrouter/")?t.slice(11):t}var Fn=[{alias:"openrouter/anthropic/claude-fable-5.1",modelId:"openrouter/anthropic/claude-fable-5.1",description:"Anthropic Fable 5.1 via OpenRouter"},{alias:"openrouter/anthropic/claude-opus-5.5",modelId:"openrouter/anthropic/claude-opus-5.5",description:"Anthropic Opus 5.5 via OpenRouter"},{alias:"openrouter/anthropic/claude-sonnet-5",modelId:"openrouter/anthropic/claude-sonnet-5",description:"Anthropic Sonnet 5 via OpenRouter"},{alias:"openrouter/anthropic/claude-haiku-4.5",modelId:"openrouter/anthropic/claude-haiku-4.5",description:"Anthropic Haiku via OpenRouter"},{alias:"openrouter/openai/gpt-6-astra",modelId:"openrouter/openai/gpt-6-astra",description:"OpenAI GPT-6 Astra via OpenRouter"},{alias:"openrouter/openai/gpt-6-sol",modelId:"openrouter/openai/gpt-6-sol",description:"OpenAI GPT-6 Sol via OpenRouter"},{alias:"openrouter/openai/gpt-5.6-terra",modelId:"openrouter/openai/gpt-5.6-terra",description:"OpenAI GPT-5.6 Terra via OpenRouter"},{alias:"openrouter/openai/gpt-6-luna",modelId:"openrouter/openai/gpt-6-luna",description:"OpenAI GPT-6 Luna via OpenRouter"},{alias:"openrouter/google/gemini-3.8-flash",modelId:"openrouter/google/gemini-3.8-flash",description:"Gemini 3.8 Flash via OpenRouter"},{alias:"openrouter/qwen/qwen3.8-max-0902",modelId:"openrouter/qwen/qwen3.8-max-0902",description:"Qwen 3.8 Max (0902) via OpenRouter"},{alias:"openrouter/moonshotai/kimi-k3",modelId:"openrouter/moonshotai/kimi-k3",description:"Kimi K3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3",modelId:"openrouter/z-ai/glm-5.3",description:"Zhipu GLM-5.3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3-flash",modelId:"openrouter/z-ai/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash (OpenRouter id; the Evolve gateway serves it from Fireworks)"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"}];function Di(t){let e=t??K.zcode.defaultReasoningEffort;return ke(e)?e==="low"?"low":e==="medium"||e==="thinking"?"medium":"high":"disabled"}function Wa(t){return {ZCODE_STORAGE_DIR:`${t}/.zcode`,ZCODE_DATA_BASE_DIR:t,ZCODE_SESSION_DB_PATH:`${t}/.zcode/cli/db/db.sqlite`,ZCODE_SESSION_DB:`${t}/.zcode/cli/db/db.sqlite`,ZCODE_PERSONAL_PROVIDER_CONFIG_FILE:`${t}/.zcode/v2/provider_config.json`,ZCODE_HTTP_PROXY:"",ZCODE_NO_PROXY:"",ZCODE_AGENT_CA_CERT:"",ZCODE_MODEL_TELEMETRY_ENABLED:"0"}}function Ha(t){switch(t){case "off":case "none":case "no-thinking":case "minimal":case "low":return "low";case "medium":case "thinking":return "medium";case "high":return "high";case "xhigh":case "max":return "max";default:return t}}function Bn(t,e){return e.isExternalGateway?Re(K.antigravity,t):t}var K={claude:{image:"evolve-all",apiKeyEnv:"ANTHROPIC_API_KEY",effortSupport:"level",oauthEnv:"CLAUDE_CODE_OAUTH_TOKEN",baseUrlEnv:"ANTHROPIC_BASE_URL",customHeadersEnv:"ANTHROPIC_CUSTOM_HEADERS",defaultModel:"opus",defaultReasoningEffort:"high",models:[{alias:"fable",modelId:"claude-fable-5-1",description:"Highest capability, long-horizon agentic work"},{alias:"opus",modelId:"claude-opus-5-5",description:"Complex reasoning, R&D, architecting"},{alias:"sonnet",modelId:"claude-sonnet-5",description:"Daily coding, features, tests"},{alias:"haiku",modelId:"claude-haiku-4-5-20251001",description:"Quick tasks, syntax correction"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:true},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:true,autoCompactWindow:Nn}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,nativeConfigPath:i})=>{let s=n?"--continue ":"",l=r?` --effort ${r}`:"",c=i?` --settings ${i}`:"",a=Re(K.claude,e);return `echo "${t}" | claude -p ${s}--model ${a}${l}${c} --output-format stream-json --verbose --dangerously-skip-permissions`}},codex:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",oauthEnv:"CODEX_OAUTH_FILE_PATH",effortSupport:"level",oauthFileName:"auth.json",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"gpt-6-sol",defaultReasoningEffort:"high",models:[{alias:"gpt-6-astra",modelId:"gpt-6-astra",description:"Most capable, for the hardest end-to-end work"},{alias:"gpt-6-sol",modelId:"gpt-6-sol",description:"Complex coding and agentic workflows"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Balances intelligence and cost"},{alias:"gpt-6-luna",modelId:"gpt-6-luna",description:"Most efficient, for focused high-volume tasks"},{alias:"gpt-5.3-codex",modelId:"gpt-5.3-codex",description:"Industry-leading code-optimized"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.codex",filename:"config.toml",format:"toml"},nativeConfig:{format:"toml",path:"~/.codex/config.toml",delivery:"base-file"},presets:{"no-internet":{commandFlags:" -c web_search=disabled"},"pinned-context":{commandFlags:` -c model_context_window=${Nn}`}},skillsConfig:{targetDir:"~/.codex/skills"},spendTrackingEnvs:{sessionTagEnv:"EVOLVE_LITELLM_CUSTOMER_ID",runTagEnv:"EVOLVE_LITELLM_TAGS"},setupCommand:`printf '%s\\n' "$OPENAI_API_KEY" | codex login --with-api-key`,buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,presetFlags:i})=>{let s=r?` -c model_reasoning_effort="${r}"`:"";return `printf '%s' "${t}" | codex exec --model ${e}${s}${i??""} --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json${n?" resume --last":""}`}},gemini:{retired:{replacedBy:"antigravity"},image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",effortSupport:"none",oauthEnv:"GEMINI_OAUTH_FILE_PATH",oauthFileName:"oauth_creds.json",oauthActivationEnv:{key:"GOOGLE_GENAI_USE_GCA",value:"true"},baseUrlEnv:"GOOGLE_GEMINI_BASE_URL",defaultModel:"gemini-3.5-flash",models:[{alias:"gemini-3.5-flash",modelId:"gemini-3.5-flash",description:"Latest flash the stable gemini CLI serves: coding + agentic planning"},{alias:"gemini-3.5-flash-lite",modelId:"gemini-3.5-flash-lite",description:"Most cost-effective 3.5-class model"},{alias:"gemini-3.1-pro-preview",modelId:"gemini-3.1-pro-preview",description:"Latest pro, complex agentic + coding"}],systemPromptFile:"GEMINI.md",mcpConfig:{settingsDir:"~/.gemini",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.gemini/skills"},customHeadersEnv:"GEMINI_CLI_CUSTOM_HEADERS",customHeadersFormat:"comma",gatewayPath:"/gemini",buildCommand:({prompt:t,model:e,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${F(t)} --model ${e} --yolo --output-format stream-json`},qwen:{image:"evolve-all",apiKeyEnv:"OPENAI_API_KEY",baseUrlEnv:"OPENAI_BASE_URL",effortSupport:"binary",defaultModel:"qwen3.8-max",defaultReasoningEffort:"thinking",models:[{alias:"qwen3.8-max",modelId:"qwen3.8-max",description:"Strongest reasoning and coding option"},{alias:"qwen3.7-plus",modelId:"qwen3.7-plus",description:"Latest balanced Qwen Cloud recommendation"},{alias:"qwen3.8-flash",modelId:"qwen3.8-flash",description:"Fast and cost-effective option"}],systemPromptFile:"QWEN.md",mcpConfig:{settingsDir:"~/.qwen",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.qwen/skills"},spendTrackingJsonConfig:{headersPath:"model.generationConfig.customHeaders"},gatewayModelAliases:{"qwen3.8-max":"dashscope/qwen3.8-max","qwen3.7-plus":"dashscope/qwen3.7-plus","qwen3.8-flash":"dashscope/qwen3.8-flash"},defaultBaseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1",buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r})=>{let i=n?"--continue ":"",s=r||e.startsWith("dashscope/")?e:`dashscope/${e}`;return `qwen "${t}" ${i}--auth-type openai --model ${s} --yolo --output-format stream-json`}},kimi:{image:"evolve-all",apiKeyEnv:"KIMI_API_KEY",effortSupport:"level",baseUrlEnv:"KIMI_BASE_URL",defaultModel:"kimi-k3",defaultReasoningEffort:"max",models:[{alias:"kimi-k3",modelId:"moonshot/kimi-k3",description:"Latest flagship: 1M context, always-on thinking",maxContextSize:1048576},{alias:"kimi-k2.7-code",modelId:"moonshot/kimi-k2.7-code",description:"Latest coding-specialized standard model"},{alias:"kimi-k3-raptor",modelId:"kimi-k3-raptor",description:"Evolve-managed Kimi K3 Raptor route for latency-sensitive agent runs",maxContextSize:1048576}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.kimi-code",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.kimi-code/skills"},defaultBaseUrl:"https://api.moonshot.ai/v1",spendTrackingTomlProvider:{configPath:"~/.kimi-code/config.toml",providerName:"evolve-gateway",modelName:"evolve-default",maxContextSize:262144},checkpointExcludes:[".kimi-code/config.toml"],gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","kimi-k2.7-code":"moonshot/kimi-k2.7-code","kimi-k3-raptor":"kimi-k3-raptor"},buildCommand:({prompt:t,isResume:e,reasoningEffort:n,homeDir:r=q})=>{let i=e?"--continue ":"",s=F(t),l=`--config-file ${r}/.kimi-code/config.toml`,c=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,a=ke(n)?"":" --no-thinking";return `if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${i}${l}${c}${a} -p ${s} --output-format stream-json; else kimi ${i}-p ${s} --output-format stream-json; fi`}},opencode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",baseUrlEnv:"OPENAI_BASE_URL",defaultModel:"openrouter/anthropic/claude-opus-5.5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},gatewayConfigEnv:"OPENCODE_CONFIG_CONTENT",models:[...Fn,{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:".",filename:"opencode.json",format:"json"},skillsConfig:{targetDir:"~/.agents/skills"},checkpointDirs:["~/.local/share/opencode","~/.config/opencode","~/.local/state/opencode"],buildCommand:({prompt:t,model:e,isResume:n,isDirectMode:r,isExternalGateway:i,reasoningEffort:s})=>{let l=n?"--continue ":"",c=Ga(s);if(i)return `OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${l}--model litellm/${e} --format json${c} "${t}" < /dev/null`;let a=qa(e);return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${l}--model ${a} --format json${c} "${t}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${l}--model litellm/${a} --format json${c} "${t}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5.1",modelId:"claude-fable-5-1",description:"Factory-managed Claude Fable 5.1"},{alias:"claude-opus-5-5",modelId:"claude-opus-5-5",description:"Factory-managed Claude Opus 5.5"},{alias:"claude-sonnet-5",modelId:"claude-sonnet-5",description:"Factory-managed Claude Sonnet 5"},{alias:"claude-haiku-4-5",modelId:"claude-haiku-4-5-20251001",description:"Factory-managed Claude Haiku 4.5"},{alias:"gpt-5.6-terra",modelId:"gpt-5.6-terra",description:"Factory-managed GPT-5.6 Terra"},{alias:"gemini-3.8-flash",modelId:"gemini-3.8-flash",description:"Factory-managed Gemini 3.8 Flash"},{alias:"qwen3.8-max",modelId:"qwen3.8-max",description:"Qwen 3.8 Max via the Evolve gateway"},{alias:"kimi-k3",modelId:"kimi-k3",description:"Factory-managed Droid Core Kimi K3"},{alias:"glm-5.3",modelId:"glm-5.3",description:"Zhipu GLM-5.3 via the Evolve gateway"},{alias:"glm-5.3-flash",modelId:"glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via the Evolve gateway"},{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:true,gatewayModelAliases:{"claude-fable-5.1":"claude-fable-5-1","kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","qwen3.8-max":"dashscope/qwen3.8-max"},droidGatewaySettings:{settingsPath:"~/.factory/evolve-settings.json",displayName:"Evolve Gateway",provider:"generic-chat-completion-api",maxOutputTokens:32768},checkpointDirs:["~/.factory"],sessionIdStateFile:"~/.factory/evolve-session.json",buildCommand:({prompt:t,model:e,isResume:n,sessionId:r,reasoningEffort:i,isDirectMode:s,isExternalGateway:l,homeDir:c=q})=>{let a=!s||l,o=a?`--settings ${c}/.factory/evolve-settings.json `:"",d=a?"custom:Evolve-Gateway-0":e,u=i?` --reasoning-effort ${i}`:"",p=n&&r?`--session-id ${F(r)} `:"";return `printf '%s' ${F(t)} | droid ${o}exec ${p}--skip-permissions-unsafe --cwd ${c}/workspace --output-format stream-json --model ${F(d)}${u}`}},pi:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",defaultModel:"openrouter/anthropic/claude-opus-5.5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},defaultBaseUrl:"https://openrouter.ai/api/v1",models:[...Fn],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.pi/agent",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.pi/agent/skills"},modelsJsonRoute:{agentDir:"~/.pi/agent",providerName:kt,apiKeyRef:"dollar"},verdictFromStream:true,settingsStamp:{path:"~/.pi/agent/settings.json",document:{cacheWarming:"off",enableInstallTelemetry:false}},buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,isDirectMode:i,isExternalGateway:s,mcpConfigured:l,homeDir:c=q})=>{let a=`${c}/.pi/agent`,o=n?"--continue ":"",d=bt(r),u=d?` --thinking ${d}`:"",p=St(e,{isDirectMode:i,isExternalGateway:s}),g=l?` --extension "\${${Ja}:-${za}}"`:"";return `PI_OFFLINE=1 PI_TELEMETRY=0 PI_SKIP_VERSION_CHECK=1 pi --mode json --approve ${o}--provider ${kt} --model ${p}${u} --session-dir ${a}/sessions${g} -- "${t}" </dev/null`}},"prime-agent":{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",defaultModel:"openrouter/anthropic/claude-opus-5.5",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},defaultBaseUrl:"https://openrouter.ai/api/v1",models:[...Fn],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.prime/agent",filename:"settings.json",format:"json"},skillsConfig:{targetDir:"~/.prime/agent/skills"},modelsJsonRoute:{agentDir:"~/.prime/agent",providerName:kt,apiKeyRef:"bare"},verdictFromStream:true,settingsStamp:{path:"~/.prime/agent/settings.json",document:{retry:{provider:{waitForUsage:{enabled:false,pauseUntilReset:false}}}}},checkpointExcludes:[".prime/agent/kernel-venv"],buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,isDirectMode:i,isExternalGateway:s})=>{let l=n?"--continue ":"",c=bt(r),a=c?` --thinking ${c}`:"",o=St(e,{isDirectMode:i,isExternalGateway:s});return `PRIME_AGENT_TELEMETRY=0 TMPDIR=/tmp prime-agent --mode json --offline --cwd "$PWD" ${l}--provider ${kt} --model ${o}${a} -- "${t}" </dev/null`}},dsh:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",efforts:He,baseUrlEnv:"EVOLVE_DSH_BASE_URL",defaultModel:"openrouter/deepseek/deepseek-v4.1-flash",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},models:[{alias:"openrouter/deepseek/deepseek-v4.1-flash",modelId:"openrouter/deepseek/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via OpenRouter"},{alias:"fireworks/deepseek-v4.1-flash",modelId:"fireworks/deepseek-v4.1-flash",description:"DeepSeek V4.1 Flash via Fireworks"},{alias:"openrouter/deepseek/deepseek-v4-pro-0813",modelId:"openrouter/deepseek/deepseek-v4-pro-0813",description:"DeepSeek V4 Pro via OpenRouter"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.dsh",filename:"evolve-mcp.patch.yml",format:"yaml"},skillsConfig:{targetDir:"~/.dsh/skills"},defaultBaseUrl:"https://openrouter.ai/api/v1",directModelAliases:{"openrouter/deepseek/deepseek-v4.1-flash":"deepseek/deepseek-v4.1-flash","openrouter/deepseek/deepseek-v4-pro-0813":"deepseek/deepseek-v4-pro-0813"},spendTrackingEnvs:{sessionTagEnv:"EVOLVE_LITELLM_CUSTOMER_ID",runTagEnv:"EVOLVE_LITELLM_TAGS"},dshRoutePatch:{path:"~/.dsh/evolve-route.patch.yml",providerName:"evolve",contextWindow:128e3,maxTokens:32e3},sessionIdStateFile:"~/.dsh/evolve-session.json",buildCommand:({prompt:t,isResume:e,sessionId:n,homeDir:r=q})=>{let i=`${r}/.dsh`,s=`${i}/evolve-route.patch.yml`,l=`${i}/evolve-mcp.patch.yml`,c=`$(if [ -f ${l} ]; then printf ' --patch ${l}'; fi)`,a=e&&n?` --session-id ${F(n)}`:"";return `DSH_HOME=${i} DSH_PERMISSION_MODE=danger-full-access DSH_TELEMETRY_DISABLED=1 dsh --profile headless --patch ${s}${c} --json${a} -- "${t}"`}},zcode:{image:"evolve-all",apiKeyEnv:"OPENROUTER_API_KEY",effortSupport:"level",defaultModel:"openrouter/z-ai/glm-5.3",defaultReasoningEffort:"high",providerEnvMap:{openrouter:{keyEnv:"OPENROUTER_API_KEY"}},defaultBaseUrl:"https://openrouter.ai/api/v1",models:[{alias:"openrouter/z-ai/glm-5.3",modelId:"openrouter/z-ai/glm-5.3",description:"Zhipu GLM-5.3 via OpenRouter"},{alias:"openrouter/z-ai/glm-5.3-flash",modelId:"openrouter/z-ai/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via OpenRouter"},{alias:"fireworks/glm-5.3",modelId:"fireworks/glm-5.3",description:"Zhipu GLM-5.3 via Fireworks"},{alias:"fireworks/glm-5.3-flash",modelId:"fireworks/glm-5.3-flash",description:"Zhipu GLM-5.3 Flash via Fireworks"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.zcode/cli",filename:"config.json",format:"json"},skillsConfig:{targetDir:"~/.zcode/skills"},directModelAliases:{"openrouter/z-ai/glm-5.3":"z-ai/glm-5.3","openrouter/z-ai/glm-5.3-flash":"z-ai/glm-5.3-flash"},zcodeProviderConfig:{path:"~/.zcode/v2/provider_config.json",providerId:"evolve",providerName:"Evolve gateway",contextWindow:Nn,maxOutputTokens:32768},checkpointDirs:["~/.zcode"],checkpointExcludes:[".zcode/v2/provider_config.json",".zcode/cli/plugins/cache",".zcode/v2/runtime"],verdictFromStream:true,buildCommand:({prompt:t,isResume:e,homeDir:n=q})=>{let r=e?"--continue ":"";return `${Object.entries(Wa(n)).map(([s,l])=>`${s}=${F(l)}`).join(" ")} zcode -p "${t}" ${r}--output-format stream-json`}},antigravity:{image:"evolve-all",apiKeyEnv:"GEMINI_API_KEY",effortSupport:"level",baseUrlEnv:"GOOGLE_GEMINI_BASE_URL",defaultModel:"gemini-3.8-flash",defaultReasoningEffort:"high",models:[{alias:"gemini-3.8-flash",modelId:"vertex_ai/gemini-3.8-flash",description:"Latest Flash on Vertex AI: coding + agentic planning"},{alias:"gemini-3.5-flash-lite",modelId:"vertex_ai/gemini-3.5-flash-lite",description:"Latest Flash-Lite on Vertex AI: most cost-effective"},{alias:"gemini-3.1-pro-preview",modelId:"vertex_ai/gemini-3.1-pro-preview",description:"Latest Pro on Vertex AI: complex agentic + coding"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.gemini/config",filename:"mcp_config.json",format:"json"},skillsConfig:{targetDir:"~/.gemini/config/skills"},antigravitySettings:{settingsPath:"~/.gemini/antigravity-cli/settings.json"},gatewayModelAliases:{"gemini-3.8-flash":"vertex_ai/gemini-3.8-flash","gemini-3.5-flash-lite":"vertex_ai/gemini-3.5-flash-lite","gemini-3.1-pro-preview":"vertex_ai/gemini-3.1-pro-preview"},checkpointDirs:["~/.gemini"],checkpointExcludes:[".gemini/antigravity-cli/bin",".gemini/antigravity-cli/builtin",".gemini/antigravity-cli/cache"],buildCommand:({prompt:t,model:e,isResume:n,reasoningEffort:r,isExternalGateway:i})=>{let s=n?"--continue ":"",l=r?` --effort ${Ha(r)}`:"",c=Bn(e,{isExternalGateway:i});return `antigravity ${s}--prompt ${F(t)} --model ${F(c)}${l} --dangerously-skip-permissions --output-format stream-json --add-dir "$PWD" < /dev/null`}}};function Y(t){let e=K[t];if(!e)throw new Error(`Unknown agent type: ${t}`);return e}function Te(t,e){if(t.models.some(i=>i.alias===e||i.modelId===e))return true;let n=t.gatewayModelAliases;if(n&&(e in n||Object.values(n).includes(e)))return true;let r=t.directModelAliases;return !!(r&&(e in r||Object.values(r).includes(e)))}function Re(t,e){return t.models.find(n=>n.alias===e)?.modelId??e}function qa(t){return t.startsWith("openrouter/")||Te(K.opencode,t)?t:`openrouter/${t}`}function Kn(t){return t in K}function qe(){return Object.keys(K).filter(t=>!K[t].retired)}function D(t,e=q){return t.replace(/^~/,e)}function J(t,e=q){let n=Y(t);return `${D(n.mcpConfig.settingsDir,e)}/${n.mcpConfig.filename}`}function ne(t,e=q){let n=Y(t);return D(n.mcpConfig.settingsDir,e)}var O=class extends Error{field;constructor(e,n){super(n),this.name="EvolveConfigError",this.field=e;}};function jn(t){return typeof t=="string"&&t.trim()!==""}function be(t){return t==null?String(t):JSON.stringify(t)}function Ye(t){if(!t)return;if(t.type!==void 0&&!Kn(t.type))throw new O("type",`Evolve agent config: unknown agent type ${be(t.type)}. Valid types: ${qe().join(", ")}.`);let e=t.type??m,n=K[e].retired;if(n)throw new O("type",`Evolve agent config: agent type "${e}" is retired; use "${n.replacedBy}" instead. Records of past ${e} runs stay readable.`);if(t.model!==void 0&&!jn(t.model))throw new O("model",`Evolve agent config: "model" is empty (${be(t.model)}). Pass a model id such as "${Y(e).defaultModel}", or omit model entirely to use ${e}'s default.`);let r=Y(e).efforts;if(t.reasoningEffort!==void 0&&r&&!r.includes(t.reasoningEffort))throw new O("reasoningEffort",`Evolve agent config: agent "${e}" honors reasoning effort ${r.map(i=>`"${i}"`).join(", ")} only; ${be(t.reasoningEffort)} is not one of them and would be recorded but never applied.`);if(t.config!==void 0){if(!Ki(e))throw new O("config",`Evolve agent config: agent "${e}" does not support a native config. Agents with native-config support: ${ji().join(", ")}.`);let i=t.config;if(typeof i=="string"){if(!jn(i))throw new O("config",`Evolve agent config: "config" is an empty path (${be(i)}). Pass a local settings file path or an inline JSON object.`)}else if(!xt(i))throw new O("config",`Evolve agent config: "config" must be a local file path or a JSON object, received ${be(i)}.`)}t.preset!==void 0&&Vn(e,t.preset);}function Vn(t,e){if(!$n.includes(e))throw new O("preset",`Evolve agent config: unknown preset ${be(e)}. Valid presets: ${$n.join(", ")}.`);let n=Bi(e);if(!n.includes(t))throw new O("preset",`Evolve agent config: agent "${t}" cannot guarantee preset "${e}". Agents that can: ${n.join(", ")}.`)}function Li(t){let e=K[t]?.presets;return e?Object.keys(e):[]}function Bi(t){return qe().filter(e=>Li(e).includes(t))}function Ct(t,e){let n={...t};for(let[r,i]of Object.entries(e)){let s=n[r];if(xt(s)&&xt(i))n[r]=Ct(s,i);else if(Array.isArray(s)&&Array.isArray(i)){let l=[...s];for(let c of i)l.some(a=>Pe(a)===Pe(c))||l.push(c);n[r]=l;}else n[r]=i;}return n}function xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ki(t){return K[t]?.nativeConfig!==void 0}function ji(){return qe().filter(Ki)}function Za(t,e){if(e===void 0)return;let n=K[t]?.nativeConfig;if(!n)throw new O("config",`Evolve agent config: agent "${t}" does not support a native config. Agents with native-config support: ${ji().join(", ")}.`);let r;if(typeof e=="string"){let i=e.replace(/^~/,process.env.HOME||"");if(!ce.existsSync(i))throw new O("config",`Agent config file not found: ${i}`);let s=ce.readFileSync(i,"utf-8");try{r=n.format==="toml"?parse(s):JSON.parse(s);}catch(l){throw new O("config",`Invalid ${t} config file ${e}: ${l.message}`)}}else {let i;try{i=JSON.parse(JSON.stringify(e));}catch(s){throw new O("config",`Invalid inline ${t} config: not JSON-serializable: ${s.message}`)}if(JSON.stringify(i)!==JSON.stringify(e))throw new O("config",`Invalid inline ${t} config: expected a JSON object that can be represented without conversion`);r=i;}if(!xt(r))throw new O("config",`Invalid ${t} config: expected a ${n.format==="toml"?"TOML table":"JSON object"}.`);if(n.format==="toml"){let i;try{i=parse(stringify(r));}catch(s){throw new O("config",`Invalid ${t} config for TOML conversion: ${s.message}`)}if(Pe(i)!==Pe(r))throw new O("config",`Invalid ${t} config: the document cannot be represented losslessly as TOML (TOML has no null and no mixed-type arrays)`)}return r}function Pe(t){return Array.isArray(t)?`[${t.map(Pe).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).sort(([n],[r])=>n<r?-1:n>r?1:0).map(([n,r])=>`${JSON.stringify(n)}:${Pe(r)}`).join(",")}}`:JSON.stringify(t)??"null"}function Gn(t){if(!t||!jn(t.prompt))throw new O("prompt",`run() requires a non-empty "prompt" string, received ${be(t?.prompt)}.`)}function Jn(t){if(t){for(let e of x)if(e in t)throw new O(`observability.${e}`,`Evolve observability metadata: "${e}" is reserved for session identity and would split this run across two dashboard sessions. Reserved keys: ${x.join(", ")}. Use a different key, or set the session tag with .withSessionTagPrefix().`)}}function Et(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 Qa(t){let e=t.replace(/^~/,process.env.HOME||"");if(!ce.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return ce.readFileSync(e,"utf-8")}function Fi(t,e,n){if(!e.providerEnvMap||!n)return;let r=n.indexOf("/");if(r<=0)return;let i=n.slice(0,r);if(!(e.providerEnvMap[i]||!Te(e,n)))throw new O("model",`Model "${n}" is served through the Evolve gateway only: the ${t} agent holds no ${i} key in direct mode. Set ${h} (or apiKey) to run it through the gateway, or pick a model whose route has a direct-mode key (${Object.keys(e.providerEnvMap).join(", ")}).`)}function _t(t){let e=t?.type??m,n=Y(e),r=Za(e,t?.config);t?.preset!==void 0&&Vn(e,t.preset);let i={...r!==void 0?{config:r}:{},...t?.preset!==void 0?{preset:t.preset}:{}};if(t?.externalGateway){Et(t);let{apiKey:a,baseUrl:o,revoke:d}=t.externalGateway;if(!a||!o||typeof d!="function")throw new Error("externalGateway requires apiKey, baseUrl, and a revoke() function");return {type:e,apiKey:a,baseUrl:o,isDirectMode:true,externalGateway:{revoke:d},model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.oauthToken){if(e!=="claude")throw new Error(`oauthToken is only supported for claude agent (Claude Max subscription), not ${e}. Use providerApiKey for ${e} instead.`);return {type:e,apiKey:t.oauthToken,isDirectMode:true,isOAuth:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.providerApiKey){Fi(e,n,t.model);let a=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,o=t.providerBaseUrl??a??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:o,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i};let s=process.env[h];if(s)return {type:e,apiKey:s,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i};if(n.providerEnvMap){let o=(t?.model??n.defaultModel)?.split("/")[0],d=o?n.providerEnvMap[o]:void 0,u=d?process.env[d.keyEnv]:void 0;if(u){let g=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:u,baseUrl:g,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let l=process.env[n.apiKeyEnv];if(l){Fi(e,n,t?.model);let o=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:l,baseUrl:o,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}if(n.oauthEnv){let a=process.env[n.oauthEnv];if(a){if(n.oauthFileName){let o=Qa(a);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:o,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}return {type:e,apiKey:a,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let c=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)${c}, or ${h} / ${n.apiKeyEnv} env var.`)}function j(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 zn(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 oe(t){for(let[e,n]of Object.entries(t))zn(e,n);}var Xa=/^(?:[A-Za-z_][A-Za-z0-9_-]*\$?|[0-9]+(?::[0-9]+)?)$/,Vi=1e4,Tt=class extends Error{constructor(n,r,i,s){super(`${r==="prepare"?"preparing the directory of":"handing over"} ${n} failed (exit ${i}): ${s.trim()||"no stderr"}`);this.path=n;this.step=r;this.exitCode=i;this.stderr=s;this.name="HomeFileError";}};function Wn(t){let e=t.trim();if(!Xa.test(e))throw new O("homeOwner",`homeOwner must be a user name, a uid, or uid:gid; got ${JSON.stringify(t)}`);return e}function Ji(t,e){let n=t.endsWith("/")?t:`${t}/`;if(!e.startsWith(n))throw new Error(`${e} is not inside the config home ${t}`);let r=e.slice(n.length).split("/").filter(i=>i.length>0);return r.map((i,s)=>n+r.slice(0,s+1).join("/"))}function el(t,e){let n=Ji(t,e).slice(0,-1);return n.length===0?"true":`for d in ${n.map(F).join(" ")}; do [ -d "$d" ] || { mkdir "$d" && printf '%s\\n' "$d" || exit 1; }; done`}function tl(t,e,n,r={}){let i=`chown -h "$o" ${[...n,e].map(F).join(" ")}`,s=r.owner?`o=${F(Wn(r.owner))} && ${i}`:`o="$(stat -c %u:%g ${F(t)})" && { [ "\${o%%:*}" = "$(id -u)" ] || ${i}; }`;return r.mode?`${s} && chmod ${r.mode} ${F(e)}`:s}async function Z(t,e,n,r={}){let i=r.homeDir??q,s=Ji(i,e),l=await t.commands.run(el(i,e),{timeoutMs:Vi});Gi(e,"prepare",l);let c=new Set(l.stdout.split(`
2
+ `).map(d=>d.trim())),a=s.slice(0,-1).filter(d=>c.has(d));await t.files.write(e,n);let o=await t.commands.run(tl(i,e,a,r),{timeoutMs:Vi});Gi(e,"hand-over",o);}function Gi(t,e,n){if(n.exitCode!==0)throw new Tt(t,e,n.exitCode,n.stderr??"")}function Wi(t,e,n){if(typeof t!="string"||t.trim()==="")return {};let r;try{r=JSON.parse(t);}catch(i){throw new O(n,`Existing config at ${e} is not valid JSON: ${i instanceof Error?i.message:String(i)}`)}return typeof r=="object"&&r!==null&&!Array.isArray(r)?r:{}}function ue(t){return t.type?t.type:t.command?"stdio":"sse"}function nl(t){let e=ue(t);return {...t,type:e}}function rl(t){let{type:e,url:n,...r}=t;return ue(t)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function il(t){return {type:ue(t),...t}}function sl(t){let{type:e,...n}=t;return n.command?{...n,transport:"stdio"}:n.url&&(e==="http"||e==="sse")?{...n,transport:e}:n}function ol(t){let e=ue(t),{type:n,httpHeaders:r,envHttpHeaders:i,bearerTokenEnvVar:s,envVars:l,...c}=t;if(e==="stdio"&&t.command)return {type:"stdio",...c};if(t.url){let a={...c,type:e==="sse"?"sse":"http",url:t.url},o=t.headers??r;return o&&Object.keys(o).length>0&&(a.headers=o),a}return {type:e==="stdio"?"stdio":"http",...c}}function al(t){let e=ue(t);if(e==="stdio"&&t.command){let i={type:"stdio",command:t.command};return t.args&&t.args.length>0&&(i.args=t.args),t.env&&Object.keys(t.env).length>0&&(i.env=t.env),i}let n={type:e==="sse"?"sse":"http"};t.url&&(n.url=t.url);let r=t.headers??t.httpHeaders;return r&&Object.keys(r).length>0&&(n.headers=r),n}function ll(t){let e=ue(t),{type:n,url:r,httpHeaders:i,envHttpHeaders:s,bearerTokenEnvVar:l,envVars:c,headers:a,...o}=t;if(e==="stdio"&&t.command)return {...o};if(r){let d={...o,serverUrl:r},u=a??i;return u&&Object.keys(u).length>0&&(d.headers=u),d}return {...o}}async function Rt(t,e,n,r,i){oe(n);let s=ne(e,i),l=J(e,i);await t.files.makeDir(s);let c={};try{c=Wi(await t.files.read(l),l,"mcpServers");}catch(o){if(!j(o))throw o}let a=Object.fromEntries(Object.entries(n).map(([o,d])=>[o,r(d)]));await t.files.write(l,JSON.stringify({...c,mcpServers:a},null,2));}async function Pt(t,e,n,r){oe(n);let i=ne("claude",r),s=J("claude",r),l=Object.fromEntries(Object.entries(n).map(([a,o])=>[a,il(o)]));await t.files.write(`${e}/.mcp.json`,JSON.stringify({mcpServers:l},null,2)),await t.files.makeDir(i);let c={};try{let a=await t.files.read(s);typeof a=="string"&&(c=JSON.parse(a));}catch(a){if(!j(a))throw a}c.enableAllProjectMcpServers=true,await t.files.write(s,JSON.stringify(c,null,2));}async function It(t,e,n){await Rt(t,"gemini",e,nl,n);}async function Ot(t,e,n){await Rt(t,"qwen",e,rl,n);}async function At(t,e,n,r,i,s){let l=J(e,i),c={};try{let p=await t.files.read(l);typeof p=="string"&&(c=JSON.parse(p));}catch(p){if(!j(p))throw p}let a=n.split("."),o=c;for(let p=0;p<a.length-1;p++){let g=a[p];(typeof o[g]!="object"||o[g]===null)&&(o[g]={}),o=o[g];}let d=a[a.length-1],u=typeof o[d]=="object"&&o[d]!==null?o[d]:{};o[d]={...u,...r},await Z(t,l,JSON.stringify(c,null,2),{homeDir:i,owner:s});}async function Hn(t,e,n,r){let i=J("qwen",n),s={};try{let o=await t.files.read(i);typeof o=="string"&&(s=JSON.parse(o));}catch(o){if(!j(o))throw o}let l=s.model??{},c=l.generationConfig??{},a=c.extra_body??{};s.model={...l,generationConfig:{...c,extra_body:{...a,enable_thinking:e}}},await Z(t,i,JSON.stringify(s,null,2),{homeDir:n,owner:r});}async function Mt(t,e,n){await Rt(t,"kimi",e,sl,n);}async function Ut(t,e,n){await Rt(t,"antigravity",e,ll,n);}async function $t(t,e,n,r,i){let s=D(e,r),l={};try{l=Wi(await t.files.read(s),s,"antigravitySettings");}catch(o){if(!j(o))throw o}let c=typeof l.customModelsConfig=="object"&&l.customModelsConfig!==null?l.customModelsConfig:{},a=typeof c.customModels=="object"&&c.customModels!==null?c.customModels:{};l.modelProvider="gemini",l.telemetryEnabled=false,l.allowNonWorkspaceAccess=true,l.customModelsConfig={...c,customModels:{...a,[n]:{modelName:n}}},await Z(t,s,JSON.stringify(l,null,2),{homeDir:r,owner:i});}async function Dt(t,e,n){oe(n);let r=`${e}/.factory`,i=`${r}/mcp.json`;await t.files.makeDir(r);let s={};try{let c=await t.files.read(i);typeof c=="string"&&(s=JSON.parse(c));}catch(c){if(!j(c))throw c}let l=Object.fromEntries(Object.entries(n).map(([c,a])=>[c,ol(a)]));await t.files.write(i,JSON.stringify({...s,mcpServers:l},null,2));}async function Nt(t,e,n,r,i){let s=D(e.settingsPath,r),l={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 Z(t,s,JSON.stringify(l,null,2),{homeDir:r,owner:i});}async function Ft(t,e,n){oe(e);let r=ne("zcode",n),i=J("zcode",n);await t.files.makeDir(r);let s={};try{let a=await t.files.read(i);typeof a=="string"&&a.trim()&&(s=JSON.parse(a));}catch(a){if(!j(a))throw a}let l=typeof s.mcp=="object"&&s.mcp!==null?s.mcp:{},c=Object.fromEntries(Object.entries(e).map(([a,o])=>[a,al(o)]));await t.files.write(i,JSON.stringify({...s,mcp:{...l,servers:c}},null,2));}async function Lt(t,e,n,r){let i=D(e.path,n),s={type:"openai-chat-completions",baseUrl:e.baseUrl};Object.keys(e.headers).length>0&&(s.headers=e.headers);let l={schemaVersion:1,config:{providerConfigRules:{providerRules:[{providerId:e.providerId,providerName:e.providerName,config:{group:"standard-personal",access:{type:"api-key",apiKey:e.apiKey},api:s,personalModelIds:[e.model]}}]},modelConfigRules:{providerModelRules:[{providerId:e.providerId,modelId:e.model,config:{enabled:true,properties:{contextWindow:e.contextWindow,supportsToolCall:true},optionSpecs:{maxOutputTokens:{max:e.maxOutputTokens,map:'{"max_tokens": maxOutputTokens}'},reasoningLevel:{values:["disabled","low","medium","high"],map:'reasoningLevel == "disabled" ? {} : {"reasoning_effort": reasoningLevel}'}}}}],manualProviderModelRules:[]},defaultModelSelection:{providerId:e.providerId,modelId:e.model,options:{reasoningLevel:e.reasoningLevel}}}};await Z(t,i,JSON.stringify(l,null,2),{homeDir:n,owner:r,mode:"600"});}async function Bt(t,e,n){oe(n);let r=`${e}/opencode.json`,i={};try{let l=await t.files.read(r);typeof l=="string"&&(i=JSON.parse(l));}catch(l){if(!j(l))throw l}let s=Object.fromEntries(Object.entries(n).map(([l,c])=>[l,cl(c)]));await t.files.write(r,JSON.stringify({...i,mcp:s},null,2));}function cl(t){let e=ue(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 dl(t){if(ue(t)==="stdio"&&t.command){let i={command:t.command};return t.args&&t.args.length>0&&(i.args=t.args),t.cwd&&(i.cwd=t.cwd),t.env&&Object.keys(t.env).length>0&&(i.env=t.env),i}let n={url:t.url},r=t.headers??t.httpHeaders;return r&&Object.keys(r).length>0&&(n.headers=r),n}var Hi={hostConfigDiscovery:"off",notifyOnStartupConnect:false,scriptMode:false};async function Kt(t,e,n){oe(e);let r=ne("pi",n),i=J("pi",n);await t.files.makeDir(r);let s={};try{let a=await t.files.read(i);typeof a=="string"&&(s=JSON.parse(a));}catch(a){if(!j(a))throw a}let l=typeof s.settings=="object"&&s.settings!==null?s.settings:{},c=Object.fromEntries(Object.entries(e).map(([a,o])=>[a,dl(o)]));await t.files.write(i,JSON.stringify({...s,settings:{...l,...Hi},mcpServers:c},null,2));}function ul(t,e){if(ue(e)==="stdio"&&e.command){if(e.env&&Object.keys(e.env).length>0)throw new Error(`MCP server "${t}": Prime Agent passes a stdio server's env only as references to the sandbox environment (its settings.json takes { env: NAME }, never literal values). Set the values in the sandbox environment and name them with envVars instead of env.`);let s={type:"stdio",command:e.command};return e.args&&e.args.length>0&&(s.args=e.args),e.cwd&&(s.cwd=e.cwd),e.envVars&&e.envVars.length>0&&(s.env=Object.fromEntries(e.envVars.map(l=>[l,{env:l}]))),s}let r={type:"http",url:e.url},i=e.headers??e.httpHeaders;return i&&Object.keys(i).length>0&&(r.headers=i),e.bearerTokenEnvVar&&(r.bearerTokenEnvVar=e.bearerTokenEnvVar),r}async function jt(t,e,n){oe(e);let r=ne("prime-agent",n),i=J("prime-agent",n);await t.files.makeDir(r);let s={};try{let c=await t.files.read(i);typeof c=="string"&&(s=JSON.parse(c));}catch(c){if(!j(c))throw c}let l=Object.fromEntries(Object.entries(e).map(([c,a])=>[c,ul(c,a)]));await t.files.write(i,JSON.stringify({...s,mcpServers:l},null,2));}async function qn(t,e,n,r,i){let l=`${D(e.agentDir,r)}/models.json`,c={};try{let u=await t.files.read(l);typeof u=="string"&&u.trim()&&(c=JSON.parse(u));}catch(u){if(!j(u))throw u}let a=typeof c.providers=="object"&&c.providers!==null?c.providers:{},o={id:e.model,reasoning:e.reasoning};e.reasoning&&(e.thinkingLevel==="xhigh"||e.thinkingLevel==="max")&&(o.thinkingLevelMap={[e.thinkingLevel]:e.thinkingLevel});let d={baseUrl:e.baseUrl,api:"openai-completions",apiKey:e.apiKeyRef==="dollar"?`$${e.apiKeyEnv}`:e.apiKeyEnv,models:[o]};Object.keys(n).length>0&&(d.headers=n),await Z(t,l,JSON.stringify({...c,providers:{...a,[e.providerName]:d}},null,2),{homeDir:r,owner:i});}async function Yn(t,e,n,r){let i=D(e,r),s=i.slice(0,i.lastIndexOf("/"));await t.files.makeDir(s);let l={};try{let c=await t.files.read(i);typeof c=="string"&&c.trim()&&(l=JSON.parse(c));}catch(c){if(!j(c))throw c}await t.files.write(i,JSON.stringify(qi(l,n),null,2));}function qi(t,e){let n={...t};for(let[r,i]of Object.entries(e)){let s=n[r];zi(i)&&zi(s)?n[r]=qi(s,i):n[r]=i;}return n}function zi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Zn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0}function Yi(t,e,n){let r=t[e];if(r===void 0)return {};let i=Zn(r);if(!i){let s=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${e}" in ${n}: expected a TOML table, found ${s}`)}return i}function Qn(t,e){if(t===e)return true;if(Array.isArray(t)||Array.isArray(e))return Array.isArray(t)&&Array.isArray(e)&&t.length===e.length&&t.every((s,l)=>Qn(s,e[l]));let n=Zn(t),r=Zn(e);if(!n||!r)return false;let i=Object.keys(n);return i.length===Object.keys(r).length&&i.every(s=>s in r&&Qn(n[s],r[s]))}async function Zi(t,e){let n="";try{let r=await t.files.read(e);typeof r=="string"&&(n=r);}catch(r){if(!j(r))throw r;return {}}if(!n.trim())return {};try{return parse(n)}catch(r){throw new Error(`Failed to parse TOML at ${e}: ${r.message}`)}}async function Qi(t,e,n,r,i){await Z(t,e,Xi(n),{homeDir:r,owner:i});}function Xi(t){return stringify(t).trimEnd()+`
3
+ `}function fl(t,e){let n={},r=e.type??(e.command?"stdio":"http");if(r==="http"||r==="sse"||!!e.url){if(!e.url)throw new Error(`MCP server "${t}" is missing url for ${r} transport`);n.url=e.url,e.bearerTokenEnvVar&&(n.bearer_token_env_var=e.bearerTokenEnvVar);let s=e.httpHeaders??e.headers;s&&Object.keys(s).length>0&&(n.http_headers=s),e.envHttpHeaders&&Object.keys(e.envHttpHeaders).length>0&&(n.env_http_headers=e.envHttpHeaders);}else n.command=e.command,e.args&&e.args.length>0&&(n.args=e.args),e.cwd&&(n.cwd=e.cwd);return e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.envVars&&e.envVars.length>0&&(n.env_vars=e.envVars),n}async function Vt(t,e,n){for(let[l,c]of Object.entries(e))zn(l,c);let r=J("codex",n);await t.files.makeDir(ne("codex",n));let i=await Zi(t,r);i.experimental_use_rmcp_client===void 0&&(i.experimental_use_rmcp_client=true);let s=Yi(i,"mcp_servers",r);i.mcp_servers=s;for(let[l,c]of Object.entries(e))s[l]===void 0&&(s[l]=fl(l,c));await t.files.write(r,Xi(i));}async function Gt(t$1,e,n,r={},i,s){let l=J("codex",i),c=await Zi(t$1,l),a={...n?{[t]:n.sessionTagEnv,[u]:n.runTagEnv}:{},...r},o={name:"Evolve Gateway",base_url:e,env_key:"OPENAI_API_KEY",wire_api:"responses",...Object.keys(a).length>0?{env_http_headers:a}:{}},d=Yi(c,"model_providers",l);c.model_provider==="evolve-gateway"&&Qn(d["evolve-gateway"],o)||(c.model_provider="evolve-gateway",d["evolve-gateway"]=o,c.model_providers=d,await Qi(t$1,l,c,i,s));}async function Xn(t,e,n,r,i,s){let l=D(e.configPath,i),c={default_model:e.modelName,default_thinking:r.defaultThinking,default_permission_mode:"auto",thinking:{mode:r.defaultThinking?"on":"off",...r.defaultThinking&&r.thinkingEffort?{effort:r.thinkingEffort}:{}},providers:{[e.providerName]:{type:"kimi",base_url:r.baseUrl,api_key:r.apiKey,custom_headers:n}},models:{[e.modelName]:{provider:e.providerName,model:r.model,max_context_size:e.maxContextSize,capabilities:["image_in","thinking"]}}};await Qi(t,l,c,i,s);}var es=/^[A-Za-z0-9_-]{1,32}$/;function hl(t,e){if(!es.test(t))throw new Error(`MCP server "${t}" cannot be registered with dsh: dsh-mcp-client server names must match ${es}`);if(e.type==="sse")throw new Error(`MCP server "${t}" uses the sse transport, which dsh does not support (stdio or streamable-http only)`);let n={serverName:t};if(e.command)return n.transport="stdio",n.command=e.command,e.args&&e.args.length>0&&(n.args=e.args),e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.cwd&&(n.cwd=e.cwd),n;n.transport="streamable-http",n.url=e.url;let r=e.headers??e.httpHeaders;return r&&Object.keys(r).length>0&&(n.headers=r),n}async function Jt(t,e,n){oe(e);let r=ne("dsh",n),i=J("dsh",n);await t.files.makeDir(r);let s=Object.entries(e).map(([l,c])=>({id:`evolve-mcp-${l}`,name:"@deepseek-ai/dsh-mcp-client",config:hl(l,c)}));await t.files.write(i,`# Evolve-owned dsh patch: MCP servers as @deepseek-ai/dsh-mcp-client rows. Rewritten at setup.
4
+ `+stringify$1([{insert:s}]));}var yl=/^[A-Z_][A-Z0-9_]*$/;function ts(t){if(!yl.test(t))throw new Error(`dsh route patch: "${t}" is not an environment variable name`);return `!!js process.env.${t}`}function Se(t){return JSON.stringify(t)}function ns(t){let e=["# Evolve-owned dsh patch: the pi-ai route, the default model and effort, and the rows a","# headless run must not carry. Rewritten before every run. Names env variables only \u2014","# never a key or a URL value.","- id: llm-pi-ai"," config:"," providers:",` ${Se(t.providerName)}:`,` apiKeyEnv: ${Se(t.apiKeyEnv)}`," api: openai-completions",` baseURL: ${ts(t.baseUrlEnv)}`];if(t.headerEnvs&&Object.keys(t.headerEnvs).length>0){e.push(" headers:");for(let[n,r]of Object.entries(t.headerEnvs))e.push(` ${Se(n)}: ${ts(r)}`);}return e.push(" compat:"," supportsDeveloperRole: false"," maxTokensField: max_tokens"," models:",` - id: ${Se(t.model)}`,` contextWindow: ${t.contextWindow}`,` maxTokens: ${t.maxTokens}`," reasoningEfforts:",...He.map(n=>` ${n}: ${n}`),"- id: agent-default-model"," config:",` provider: ${Se(t.providerName)}`,` model: ${Se(t.model)}`),t.reasoningEffort&&e.push(` reasoningEffort: ${Se(t.reasoningEffort)}`),e.push("- id: session-log-deepseek"," config:"," enabled: false","- id: plugin-package-inventory-deepseek"," config:"," enabled: false","- id: session-title-llm"," disabled: true","- id: tool-web"," config:"," search: false"," fetch: true"," searchTimeoutMs: 60000",""),e.join(`
5
+ `)}async function zt(t,e,n,r){await Z(t,D(e.path,n),ns(e),{homeDir:n,owner:r});}async function er(t,e,n,r,i){if(!(!r||Object.keys(r).length===0))switch(t){case "claude":await Pt(e,n,r,i);break;case "codex":await Vt(e,r,i);break;case "gemini":await It(e,r,i);break;case "qwen":await Ot(e,r,i);break;case "kimi":await Mt(e,r,i);break;case "opencode":await Bt(e,n,r);break;case "droid":await Dt(e,n,r);break;case "pi":await Kt(e,r,i);break;case "prime-agent":await jt(e,r,i);break;case "dsh":await Jt(e,r,i);break;case "zcode":await Ft(e,r,i);break;case "antigravity":await Ut(e,r,i);break;default:throw new Error(`Unknown agent type for MCP config: ${t}`)}}function A(t,e,n="type"){let{[n]:r,...i}=e;return {sessionUpdate:"harness_event",type:t,payload:i}}function we(t){let e=new Set;return (n,r)=>{let i=`${n}:${r}`;e.has(i)||(e.add(i),console.warn(`[${t} parser] unknown ${n} "${r}" passed through as harness_event`));}}function rs(t){return !!t&&t.sessionUpdate!=="error"&&t.sessionUpdate!=="usage"&&t.sessionUpdate!=="harness_event"}function R(t,e){for(let n of t)if(typeof n=="string"&&n.length>0)return n;try{let n=JSON.stringify(e);if(typeof n=="string"&&n.length>0)return n}catch{}return String(e)}var wl={run_command:"execute",command_status:"execute",send_command_input:"execute",notebook_execution:"execute",view_file:"read",read_resource:"read",list_dir:"search",find_by_name:"search",grep_search:"search",list_resources:"search",write_to_file:"edit",replace_file_content:"edit",multi_replace_file_content:"edit",sed_file:"edit",notebook_edit:"edit",read_url_content:"fetch",search_web:"fetch",open_browser_url:"fetch",invoke_subagent:"think",define_subagent:"think",manage_subagents:"think",browser_subagent:"think"},os=["TargetFile","AbsolutePath","DirectoryPath","SearchPath"],vl=["CommandLine",...os,"Query","Pattern","Url","Action"],kl=new Set(["system_message","checkpoint"]);function Wt(){let t,e,n=new Set,r="",i=we("antigravity");return function(g){let f;try{f=JSON.parse(g);}catch{return null}if(!rr(f))return null;let h=M(f,"event");if(!h&&typeof f.status=="string"&&"conversation_id"in f)return s(c(f),f);if(!h)return null;switch(h){case "init":{let m=re(f.init),w=m?M(m,"model"):"";return w&&(t=w),s([A(h,f,"event")],f)}case "step_update":{let m=re(f.step_update);return m?s(l(m),m):s([A(h,f,"event")],f)}case "result":{let m=re(f.result);return m?s(c(m),m):s([A(h,f,"event")],f)}default:return i("event type",h),s([A(h,f,"event")],f)}};function s(p,g){if(p.length===0)return null;let f=M(g,"conversation_id");f&&(e=f);let h=bl(g),m=u(g);return p.map(w=>({...e!==void 0?{sessionId:e}:{},update:w,...t!==void 0?{model:t}:{},...m!==void 0?{messageId:m}:{},...h!==void 0?{extra:h}:{}}))}function l(p){let g=M(p,"step_type"),f=M(p,"state"),h=[];switch(g){case "agent_response":{let m=M(p,"thinking_delta");m&&h.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:m}});let w=M(p,"text_delta");w&&(r+=w,h.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:w}}));let v=tr(p.usage);return v&&h.push({sessionUpdate:"usage",scope:"call",usage:v}),h}case "tool":case "subagent":{let m=d(p),w=M(p,"tool_name")||M(re(p.tool_info)??{},"name")||(g==="subagent"?"invoke_subagent":"tool"),v=g==="subagent"?p.subagent_info:re(p.tool_info)?.parameters;return n.has(m)||(n.add(m),h.push(a(m,w,v))),f==="DONE"?h.push(o(m,g,p)):h.length===0&&h.push({sessionUpdate:"tool_call_update",toolCallId:m,status:"in_progress"}),h}case "error_message":return [{sessionUpdate:"error",message:R([M(re(p.error)??{},"message"),M(p,"text_delta")],p),fatal:false}];case "user_input":return [];default:{kl.has(g)||i("step type",g);let m=[A(g||"step_update",p,"step_type")],w=tr(p.usage);return w&&m.push({sessionUpdate:"usage",scope:"call",usage:w}),m}}}function c(p){let g=[],f=M(p,"response");f&&!r.includes(f)&&(r+=f,g.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:f}}));let h=tr(p.usage);h&&g.push({sessionUpdate:"usage",scope:"run",usage:h});let m=M(p,"status");return m!=="SUCCESS"&&g.push({sessionUpdate:"error",message:R([M(p,"error"),`antigravity ended the run with result status "${m}" and no error text`],p),fatal:true}),g}function a(p,g,f){let h=re(f)??{},m=ss(h,vl),w=ss(h,os),v=w?[{path:w}]:[],k=m?`${g} ${m}`:g;if(g==="run_command"&&m&&(k=`\`${m}\``),g==="call_mcp_tool"){let y=M(h,"ServerName"),S=M(h,"ToolName");(y||S)&&(k=`call_mcp_tool ${y}/${S}`);}if(g==="invoke_subagent"){let y=is(f).map(S=>M(S,"type_name")).filter(Boolean);y.length>0&&(k=`invoke_subagent ${y.join(", ")}`);}return {sessionUpdate:"tool_call",toolCallId:p,title:k,toolName:g,kind:wl[g]??"other",status:"pending",rawInput:f,locations:v}}function o(p,g,f){let h=[],m="completed",w;if(g==="subagent"){w=f.subagent_info;let v=is(f.subagent_info).map(k=>{let y=M(k,"type_name"),S=M(k,"conversation_id");return S?`${y}: conversation ${S}`:y}).filter(Boolean);v.length>0&&h.push({type:"content",content:{type:"text",text:v.join(`
6
+ `)}});}else {let v=re(f.tool_info);w=v??void 0;let k=v?M(v,"output"):"";k&&h.push({type:"content",content:{type:"text",text:k}});let y=v?re(v.error):null;if(y){m="failed";let S=R([M(y,"message"),M(y,"type")],y);k||h.push({type:"content",content:{type:"text",text:S}});}}return {sessionUpdate:"tool_call_update",toolCallId:p,status:m,content:h,...w!==void 0?{rawOutput:w}:{}}}function d(p){return `${M(p,"conversation_id")||e||"conversation"}:${String(p.step_index)}`}function u(p){if(M(p,"step_type")==="agent_response"&&typeof p.step_index=="number")return d(p)}}function tr(t){let e=re(t);if(!e)return null;let n=nr(e.input_tokens),r=nr(e.output_tokens),i=nr(e.cache_read_tokens),s={};(n!==void 0||i!==void 0)&&(s.promptTokens=(n??0)+(i??0)),r!==void 0&&(s.completionTokens=r),i!==void 0&&(s.cachedTokens=i);let l={};for(let[c,a]of Object.entries(e))c==="input_tokens"||c==="output_tokens"||c==="cache_read_tokens"||a!=null&&(l[c]=a);return Object.keys(l).length>0&&(s.extra=l),s}function bl(t){let e={};for(let n of ["status","num_turns","step_index","step_type","state","duration_seconds"]){let r=t[n];r!=null&&(e[n]=r);}return Object.keys(e).length>0?e:void 0}function is(t){let e=re(t)?.subagents;return Array.isArray(e)?e.filter(rr):[]}function ss(t,e){for(let n of e){let r=t[n];if(typeof r=="string"&&r.length>0)return r}return ""}function nr(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function rr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function re(t){return rr(t)?t:null}function M(t,e){let n=t[e];return typeof n=="string"?n:""}function Ht(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Ze(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=Ht(e.input_tokens),r=Ht(e.output_tokens),i=Ht(e.cache_read_input_tokens),s=Ht(e.cache_creation_input_tokens),l={};(n!==void 0||i!==void 0||s!==void 0)&&(l.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(l.completionTokens=r),i!==void 0&&(l.cachedTokens=i);let c={};for(let[a,o]of Object.entries(e))a==="input_tokens"||a==="output_tokens"||o!=null&&(c[a]=o);return Object.keys(c).length>0&&(l.extra=c),l}function ee(t){if(typeof t=="string"&&t.length>0&&!Number.isNaN(Date.parse(t)))return t;if(typeof t=="number"&&Number.isFinite(t))return new Date(t).toISOString()}function qt(){let t={};return function(o){let d;try{d=JSON.parse(o);}catch{return null}if(d._meta||d._prompt)return null;let u=d.session_id;switch(d.type){case "system":return null;case "assistant":{let p=n(d.message?.content,"assistant")??[],g=Ze(d.message?.usage);return g&&p.push({sessionUpdate:"usage",scope:"call",usage:g}),e(p,d,u)}case "user":{let p=d.message?.content;if(typeof p=="string"||Array.isArray(p)&&p.length===1&&p[0].type==="text")return null;let g=d.tool_use_result??d.toolUseResult;return e(n(p,"user",g),d,u)}case "result":{let p=[],g=typeof d.total_cost_usd=="number"&&Number.isFinite(d.total_cost_usd)?d.total_cost_usd:void 0,f=Ze(d.usage)??(g!==void 0?{}:null);if(f&&(g!==void 0&&(f.costUsd=g),p.push({sessionUpdate:"usage",scope:"run",usage:f})),d.is_error===true){let m=(Array.isArray(d.errors)?d.errors:[]).filter(w=>typeof w=="string"&&w.length>0).join(`
7
+ `);p.push({sessionUpdate:"error",message:R([m,d.result,d.subtype],d),fatal:true});}return e(p,d,u)}default:return null}};function e(a,o,d){if(!a||a.length===0)return null;let u=o.message,p=ee(o.timestamp),g=typeof u?.model=="string"&&u.model?u.model:void 0,f=typeof u?.id=="string"&&u.id?u.id:void 0,h=typeof o.parent_tool_use_id=="string"&&o.parent_tool_use_id?o.parent_tool_use_id:void 0,m={};for(let w of ["stop_reason","stop_sequence","requestId"]){let v=u?.[w];v!=null&&(m[w]=v);}return a.map(w=>({sessionId:d,update:w,...p!==void 0?{timestamp:p}:{},...g!==void 0?{model:g}:{},...f!==void 0?{messageId:f}:{},...h!==void 0?{parentToolCallId:h}:{},...Object.keys(m).length>0?{extra:m}:{}}))}function n(a,o,d){if(typeof a=="string")return o==="user"?null:[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}];if(!a||!Array.isArray(a))return null;let u=[];for(let p of a){let g=null;switch(p.type){case "text":case "text_delta":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.text}};break;case "image":if(o==="user")break;g={sessionUpdate:"agent_message_chunk",content:{type:"image",data:p.source?.type==="base64"?p.source.data:"",mimeType:p.source?.type==="base64"?p.source.media_type:"",uri:p.source?.type==="url"?p.source.url:void 0}};break;case "thinking":case "thinking_delta":g={sessionUpdate:"agent_thought_chunk",content:{type:"text",text:p.thinking}};break;case "tool_use":case "server_tool_use":case "mcp_tool_use":{if(t[p.id]=p,p.name==="TodoWrite")Array.isArray(p.input?.todos)&&(g={sessionUpdate:"plan",entries:c(p.input)});else {let f=r(p);g={sessionUpdate:"tool_call",toolCallId:p.id,status:"pending",...f,toolName:p.name};}break}case "tool_result":case "tool_search_tool_result":case "web_fetch_tool_result":case "web_search_tool_result":case "code_execution_tool_result":case "bash_code_execution_tool_result":case "text_editor_code_execution_tool_result":case "mcp_tool_result":{let f=t[p.tool_use_id];if(!f||(delete t[p.tool_use_id],f.name==="TodoWrite"))break;g={sessionUpdate:"tool_call_update",toolCallId:p.tool_use_id,status:"is_error"in p&&p.is_error?"failed":"completed",...i(p,f),...d!=null?{rawOutput:d}:{}};break}}g&&u.push(g);}return u.length>0?u:null}function r(a){let o=a.name,d=a.input||{};switch(o){case "Task":return {title:d.description||"Task",kind:"think",content:d.prompt?[{type:"content",content:{type:"text",text:d.prompt}}]:[],rawInput:d};case "NotebookRead":return {title:d.notebook_path?`Read Notebook ${d.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:d.notebook_path?[{path:d.notebook_path}]:[],rawInput:d};case "NotebookEdit":return {title:d.notebook_path?`Edit Notebook ${d.notebook_path}`:"Edit Notebook",kind:"edit",content:d.new_source?[{type:"content",content:{type:"text",text:d.new_source}}]:[],locations:d.notebook_path?[{path:d.notebook_path}]:[],rawInput:d};case "Bash":return {title:d.command?"`"+d.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:d.description?[{type:"content",content:{type:"text",text:d.description}}]:[],rawInput:d};case "BashOutput":return {title:"Tail Logs",kind:"execute",content:[],rawInput:d};case "KillShell":return {title:"Kill Process",kind:"execute",content:[],rawInput:d};case "Read":{let u="";return d.limit?u=" ("+((d.offset??0)+1)+" - "+((d.offset??0)+d.limit)+")":d.offset&&(u=" (from line "+(d.offset+1)+")"),{title:"Read "+(d.file_path??"File")+u,kind:"read",content:[],locations:d.file_path?[{path:d.file_path,line:d.offset??0}]:[],rawInput:d}}case "LS":return {title:d.path?`List \`${d.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:d};case "Edit":{let u=d.file_path;return {title:u?`Edit \`${u}\``:"Edit",kind:"edit",content:u?[{type:"diff",path:u,oldText:d.old_string??null,newText:d.new_string??""}]:[],locations:u?[{path:u}]:[],rawInput:d}}case "Write":return {title:d.file_path?`Write ${d.file_path}`:"Write",kind:"edit",content:d.file_path?[{type:"diff",path:d.file_path,oldText:null,newText:d.content??""}]:[],locations:d.file_path?[{path:d.file_path}]:[],rawInput:d};case "Glob":{let u="Find";return d.path&&(u+=` \`${d.path}\``),d.pattern&&(u+=` \`${d.pattern}\``),{title:u,kind:"search",content:[],locations:d.path?[{path:d.path}]:[],rawInput:d}}case "Grep":{let u="grep";return d["-i"]&&(u+=" -i"),d["-n"]&&(u+=" -n"),d["-A"]!==void 0&&(u+=` -A ${d["-A"]}`),d["-B"]!==void 0&&(u+=` -B ${d["-B"]}`),d["-C"]!==void 0&&(u+=` -C ${d["-C"]}`),d.output_mode==="files_with_matches"?u+=" -l":d.output_mode==="count"&&(u+=" -c"),d.head_limit!==void 0&&(u+=` | head -${d.head_limit}`),d.glob&&(u+=` --include="${d.glob}"`),d.type&&(u+=` --type=${d.type}`),d.multiline&&(u+=" -P"),u+=` "${d.pattern??""}"`,d.path&&(u+=` ${d.path}`),{title:u,kind:"search",content:[],rawInput:d}}case "WebFetch":return {title:d.url?`Fetch ${d.url}`:"Fetch",kind:"fetch",content:d.prompt?[{type:"content",content:{type:"text",text:d.prompt}}]:[],rawInput:d};case "WebSearch":{let u=`"${d.query??""}"`;return d.allowed_domains?.length>0&&(u+=` (allowed: ${d.allowed_domains.join(", ")})`),d.blocked_domains?.length>0&&(u+=` (blocked: ${d.blocked_domains.join(", ")})`),{title:u,kind:"fetch",content:[],rawInput:d}}case "TodoWrite":return {title:Array.isArray(d.todos)?`Update TODOs: ${d.todos.map(u=>u.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:d};case "ExitPlanMode":return {title:"Ready to code?",kind:"switch_mode",content:d.plan?[{type:"content",content:{type:"text",text:d.plan}}]:[],rawInput:d};default:if(o?.startsWith("mcp__")){let u=o.split("__"),p=u[1]||"mcp",g=u.slice(2).join("__")||o;return {title:`${p}: ${g}`,kind:"other",content:[],rawInput:d}}return {title:o||"Unknown Tool",kind:"other",content:[],rawInput:d}}}function i(a,o){return o?.name==="ExitPlanMode"?{title:"Exited Plan Mode"}:s(a.content)}function s(a){return Array.isArray(a)&&a.length>0?{content:a.map(o=>({type:"content",content:l(o)}))}:typeof a=="string"&&a.length>0?{content:[{type:"content",content:{type:"text",text:a}}]}:{}}function l(a){if(a.type==="text")return {type:"text",text:a.text};if(a.type==="image"){if(a.data&&a.mimeType)return {type:"image",data:a.data,mimeType:a.mimeType};if(a.source?.type==="base64")return {type:"image",data:a.source.data||"",mimeType:a.source.media_type||""};if(a.source?.type==="url")return {type:"image",data:"",mimeType:"",uri:a.source.url}}return a}function c(a){return a.todos.map(o=>({content:o.content,status:o.status||"pending",priority:"medium"}))}}function Yt(){let e;return function(d){let u;try{u=JSON.parse(d);}catch{return null}if(u._meta||u._prompt)return null;let p=[];switch(u.type){case "thread.started":return typeof u.thread_id=="string"&&u.thread_id&&(e=u.thread_id),null;case "turn.started":return null;case "turn.completed":{let g=n(u.usage);if(!g)return null;p.push({update:{sessionUpdate:"usage",scope:"run",usage:g}});break}case "error":{let g=R([u.message],u);p.push({update:{sessionUpdate:"error",message:g,fatal:false}});break}case "turn.failed":{let g=R([u.error?.message],u.error??u);p.push({update:{sessionUpdate:"error",message:g,fatal:true}});break}case "item.started":{let g=u.item;if(!g)return null;let f=r(g);f&&p.push({update:f});break}case "item.updated":{let g=u.item;if(!g)return null;let f=i(g);f&&p.push({update:f});break}case "item.completed":{let g=u.item;if(!g)return null;let f=s(g);f&&p.push({update:f});break}default:return null}return p.length===0?null:e===void 0?p:p.map(g=>({sessionId:e,...g}))};function n(o){if(!o||typeof o!="object"||Array.isArray(o))return null;let d=o,u=w=>typeof w=="number"&&Number.isFinite(w)?w:void 0,p={},g=u(d.input_tokens),f=u(d.output_tokens),h=u(d.cached_input_tokens);g!==void 0&&(p.promptTokens=g),f!==void 0&&(p.completionTokens=f),h!==void 0&&(p.cachedTokens=h);let m={};for(let[w,v]of Object.entries(d))w==="input_tokens"||w==="output_tokens"||w==="cached_input_tokens"||v!=null&&(m[w]=v);return Object.keys(m).length>0&&(p.extra=m),p}function r(o){let d=o.id;switch(o.type){case "mcp_tool_call":return {type:"mcp_tool_call",name:`${o.server}:${o.tool}`},{sessionUpdate:"tool_call",toolCallId:d,title:`${o.server}: ${o.tool}`,toolName:`mcp__${o.server}__${o.tool}`,kind:"other",status:"in_progress",rawInput:o.arguments,content:[]};case "command_execution":return {type:"command_execution",name:o.command},{sessionUpdate:"tool_call",toolCallId:d,title:o.command?`\`${o.command}\``:"Execute Command",toolName:"command_execution",kind:"execute",status:"in_progress",rawInput:{command:o.command},content:[]};case "web_search":return {type:"web_search",name:o.query},{sessionUpdate:"tool_call",toolCallId:d,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"in_progress",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:a(o.items)};default:return null}}function i(o){return o.type==="todo_list"?{sessionUpdate:"plan",entries:a(o.items)}:null}function s(o){let d=o.id;switch(o.type){case "error":return {sessionUpdate:"error",message:R([o.message],o),fatal:false};case "reasoning":return {sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o.text??o.summary?.join(`
4
8
  `)??o.content?.join(`
5
- `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:o.text??""}};case "mcp_tool_call":{let p=d(o.result),g=o.status==="failed"||o.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:p,rawOutput:o}}case "command_execution":{let p=o.aggregated_output?[{type:"content",content:{type:"text",text:o.aggregated_output}}]:[],g=o.status==="completed"||o.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:a,status:g,content:p,rawOutput:o}}case "file_change":{let p=o.changes??[],g=p.map(h=>({path:h.path})),f=p.length===1?`${p[0].kind==="add"?"Create":"Edit"} ${p[0].path}`:`Edit ${p.length} files`;return {sessionUpdate:"tool_call",toolCallId:a,title:f,toolName:"file_change",kind:"edit",status:o.status==="completed"?"completed":"failed",rawInput:{changes:p},content:p.map(h=>({type:"diff",path:h.path,oldText:h.kind==="add"?null:"",newText:""})),locations:g}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:a,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:l(o.items)};default:return null}}function d(o){return o?.content?Array.isArray(o.content)?o.content.map(a=>({type:"content",content:u(a)})):typeof o.content=="string"?[{type:"content",content:{type:"text",text:o.content}}]:[]:[]}function u(o){return o.type==="text"?{type:"text",text:o.text??""}:o.type==="image"?{type:"image",data:o.data??"",mimeType:o.mime_type??o.mimeType??"",uri:o.uri}:o}function l(o){if(!Array.isArray(o))return [];let a=false;return o.map(c=>{let p;return c.completed?p="completed":a?p="pending":(p="in_progress",a=true),{content:c.text??"",status:p,priority:"medium"}})}}var Mo={applypatch:"edit",apply_patch:"edit",create:"edit",edit:"edit",grep:"search",glob:"search",ls:"search",read:"read",write:"edit",execute:"execute",execute_cli:"execute",fetchurl:"fetch",fetch_url:"fetch",webfetch:"fetch",web_fetch:"fetch",websearch:"fetch",web_search:"fetch",skill:"execute",task:"think",todowrite:"other",todo_write:"other"},$o=new Set(["assistant_text_complete","thinking_text_complete","droid_working_state_changed","permission_resolved","settings_updated","session_title_updated","mcp_status_changed","session_token_usage_changed","mission_state_changed","mission_features_changed","mission_progress_entry","mission_heartbeat","mission_worker_started","mission_worker_completed","mcp_auth_required","mcp_auth_completed","structured_output"]);function dt(){let t=new Map,e,n,r=false,i="",s;return function(u){let l;try{l=JSON.parse(u);}catch{return null}if(!Fr(l))return null;let o=Uo(l);if(o.sessionId&&(e=o.sessionId),o.errorText)return [sn(e,o.errorText,true)];if(o.resultText)return i=o.resultText,r=true,[ae(e,o.resultText)];if(o.handled)return null;let c=Do(l)??l,p=Nr(c);p&&(e=p);let g=[],f=S(c,"type");switch(f){case "system":{let m=S(c,"model");return m&&(n=m),null}case "message":{let m=S(c,"role"),y=S(c,"text")||an(c.content);if(!y)break;m==="assistant"&&(r=true,i=y,g.push(ae(e,y)));break}case "completion":{let m=S(c,"finalText")||S(c,"result");m&&(!r||m!==i)&&(r=true,i=m,g.push(ae(e,m)));let y=Pe(c.usage);y&&g.push({sessionId:e,update:{sessionUpdate:"usage",scope:"run",usage:y}});break}case "assistant_text_delta":{let m=S(c,"textDelta")||S(c,"text");m&&(r=true,i+=m,g.push(ae(e,m)));break}case "thinking_text_delta":{let m=S(c,"textDelta")||S(c,"text");if(m){let y=Br(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "reasoning":{let m=S(c,"text");if(m){let y=Br(c,m,s);y&&(s=y.signature,g.push({sessionId:e,update:y.event}));}break}case "assistant":{let m=S(c,"text")||an(O(c.message)?.content);m&&(r=true,i=m,g.push(ae(e,m)));break}case "tool_call":case "tool_call_delta":{let m=O(c.toolUse)??O(c.tool_use)??c,y=Lr(m,t);y&&g.push({sessionId:e,update:y});break}case "tool_result":{let m=Lo(c,t);m&&g.push({sessionId:e,update:m});break}case "tool_progress_update":case "tool_progress":{let m=No(c);m&&g.push({sessionId:e,update:m});break}case "create_message":{for(let m of Bo(c,t)){if(m.sessionUpdate==="agent_message_chunk"){let y=m.content.type==="text"?m.content.text:"";if(r&&y===i)continue;r=true,i=y;}g.push({sessionId:e,update:m});}break}case "result":{if(c.is_error===true||c.subtype==="failure"){g.push(sn(e,P([H(c.result),H(c.error),H(c.subtype)],c),true));break}let m=H(c.result??c.text??c.error);m&&(r=true,i=m,g.push(ae(e,m)));break}case "error":{g.push(sn(e,P([H(c.message),H(c.error)],c),false));break}default:if(f&&!$o.has(f))return null}if(g.length>0&&f!=="reasoning"&&f!=="thinking_text_delta"&&(s=void 0),g.length===0)return null;let h=ee(c.timestamp);return g.map(m=>({...m,...h!==void 0?{timestamp:h}:{},...n!==void 0?{model:n}:{}}))}}function Br(t,e,n){let r=on(t,"id")||on(t,"messageId"),i=on(t,"blockIndex"),s=`${S(t,"type")}:${r}:${i}:${e}`;return s===n?null:{signature:s,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function Uo(t){if(t.type!=="response")return {handled:false};let e=O(t.result),n=O(t.error),r=Nr(e??t);if(n)return {handled:true,sessionId:r,errorText:H(n.message??n)};let i=e?S(e,"finalText")||S(e,"result"):"";return {handled:true,sessionId:r,resultText:i}}function Do(t){return t.method!=="droid.session_notification"?null:O(O(t.params)?.notification)}function Bo(t,e){let n=O(t.message);if(!n)return [];let r=[],i=n.content;if(Array.isArray(i))for(let s of i){let d=O(s);if(d&&d.type==="tool_use"){let u=Lr(d,e);u&&r.push(u);}}if(n.role==="assistant"){let s=an(i);s&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:s}});}return r}function Lr(t,e){let n=S(t,"id")||S(t,"toolUseId")||S(t,"tool_use_id"),r=S(t,"name")||S(t,"toolName")||S(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let i=O(t.input)??O(t.toolInput)??O(t.arguments)??O(t.parameters)??{};if(Kr(r)==="todowrite"){let o=Fo(i);if(o)return o}let{title:s,kind:d,content:u,locations:l}=Ko(r,i);return {sessionUpdate:"tool_call",toolCallId:n,title:s,toolName:r,kind:d,status:"pending",rawInput:i,content:u,locations:l}}function Lo(t,e){let n=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!n)return null;let r=S(t,"toolName")||S(t,"tool_name")||e.get(n);return e.delete(n),{sessionUpdate:"tool_call_update",toolCallId:n,status:t.isError===true||t.is_error===true?"failed":"completed",title:r,content:ln(t.content??t.result??t.value??t.error)}}function No(t){let e=S(t,"toolUseId")||S(t,"tool_use_id")||S(t,"tool_id")||S(t,"id")||S(t,"toolId");if(!e)return null;let n=O(t.update),r=H(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?ln(r):void 0}}function Fo(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let i=O(r);if(!i)return [];let s=S(i,"content"),d=jo(S(i,"status")),u=Vo(S(i,"priority"));return s?[{content:s,status:d,priority:u}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function Ko(t,e){let n=Mo[Kr(t)]||"other",r=S(e,"path")||S(e,"filePath")||S(e,"file_path")||S(e,"absolute_path"),i=S(e,"command"),s=S(e,"url"),d=r||i||s;return {title:d?`${t} ${d}`:t,kind:n,content:Object.keys(e).length>0?ln(e):[],locations:r?[{path:r}]:[]}}function Nr(t){if(t)return S(t,"session_id")||S(t,"sessionId")}function ae(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function sn(t,e,n){return {sessionId:t,update:{sessionUpdate:"error",message:e,fatal:n}}}function an(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=O(e);return n?S(n,"text")||S(n,"content"):""}).filter(Boolean).join(""):""}function ln(t){let e=H(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function H(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function Fr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function O(t){return Fr(t)?t:null}function S(t,e){let n=t[e];return typeof n=="string"?n:""}function on(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function Kr(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function jo(t){return t==="in_progress"||t==="completed"?t:"pending"}function Vo(t){return t==="high"||t==="low"?t:"medium"}var Go={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 pt(){let t,e;return function(o){let a;try{a=JSON.parse(o);}catch{return null}if(a._meta||a._prompt)return null;let c=(typeof a.session_id=="string"&&a.session_id?a.session_id:void 0)??e,p=[];switch(a.type){case "init":return typeof a.model=="string"&&a.model&&(t=a.model),typeof a.session_id=="string"&&a.session_id&&(e=a.session_id),null;case "result":{let f=n(a.stats);if(f&&p.push({sessionId:c,update:{sessionUpdate:"usage",scope:"run",usage:f}}),a.status!=="error")break;p.push({sessionId:c,update:{sessionUpdate:"error",message:P([a.error?.message,a.error?.type,'gemini ended the run with result status "error" and no error text'],a.error??a),fatal:true}});break}case "message":{let f=r(a);f&&p.push({sessionId:c,update:f});break}case "tool_use":{let f=i(a);f&&p.push({sessionId:c,update:f});break}case "tool_result":{let f=s(a);f&&p.push({sessionId:c,update:f});break}case "error":{let f=d(a);f&&p.push({sessionId:c,update:f});break}default:return null}if(p.length===0)return null;let g=ee(a.timestamp);return p.map(f=>({...f,...g!==void 0?{timestamp:g}:{},...t!==void 0?{model:t}:{}}))};function n(l){if(!l||typeof l!="object"||Array.isArray(l))return null;let o=l,a=m=>typeof m=="number"&&Number.isFinite(m)?m:void 0,c={},p=a(o.input_tokens),g=a(o.output_tokens),f=a(o.cached);p!==void 0&&(c.promptTokens=p),g!==void 0&&(c.completionTokens=g),f!==void 0&&(c.cachedTokens=f);let h={};for(let[m,y]of Object.entries(o))m==="input_tokens"||m==="output_tokens"||m==="cached"||y!=null&&(h[m]=y);return Object.keys(h).length>0&&(c.extra=h),c}function r(l){let o=l.role,a=l.content;return a?o==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}:o==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:a}}:null:null}function i(l){let o=l.tool_id,a=l.tool_name,c=l.parameters||{},{title:p,kind:g,content:f,locations:h}=u(a,c);return {sessionUpdate:"tool_call",toolCallId:o,title:p,toolName:a,kind:g,status:"pending",rawInput:c,content:f,locations:h}}function s(l){let o=l.tool_id,a=l.status,c=l.output,p=l.error,g=[];return c&&typeof c=="string"&&c.length>0&&g.push({type:"content",content:{type:"text",text:c}}),p?.message&&!c&&g.push({type:"content",content:{type:"text",text:p.message}}),{sessionUpdate:"tool_call_update",toolCallId:o,status:a==="success"?"completed":"failed",content:g}}function d(l){return {sessionUpdate:"error",message:P([l.message],l),fatal:false}}function u(l,o){let a=Go[l]||"other",c=[],p=[],g=l;switch(l){case "read_file":g=`Read ${o.absolute_path||o.file_path||"file"}`,(o.absolute_path||o.file_path)&&p.push({path:o.absolute_path||o.file_path});break;case "write_file":g=`Write ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),c.push({type:"diff",path:o.file_path,oldText:null,newText:o.content||""}));break;case "edit_file":g=`Edit ${o.file_path||"file"}`,o.file_path&&p.push({path:o.file_path});break;case "replace":g=`Edit ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),(o.old_string!==void 0||o.new_string!==void 0)&&c.push({type:"diff",path:o.file_path,oldText:o.old_string||"",newText:o.new_string||""}));break;case "run_shell_command":case "shell":g=o.command?`\`${o.command}\``:"Run command",o.description&&c.push({type:"content",content:{type:"text",text:o.description}});break;case "brave_web_search":case "web_search":case "google_web_search":g=o.query?`"${o.query}"`:"Web search";break;case "web_fetch":g=o.prompt?`Fetch: ${o.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":g=`Find ${o.pattern||"files"}`,o.dir_path&&p.push({path:o.dir_path});break;case "grep":case "search_file_content":g=`grep "${o.pattern||o.query||""}"`;break;case "list_directory":g=`List ${o.dir_path||o.path||"directory"}`,(o.dir_path||o.path)&&p.push({path:o.dir_path||o.path});break;case "read_many_files":g=`Read ${o.include?.length||"multiple"} files`,Array.isArray(o.include)&&o.include.forEach(f=>p.push({path:f}));break;case "delegate_to_agent":g=o.agent_name?`Agent: ${o.agent_name}`:"Delegate to agent";break;case "write_todos":g="Update todos";break;case "save_memory":g=o.fact?`Remember: "${o.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":g=o.name?`Activate skill: ${o.name}`:"Activate skill";break;default:g=l;}return {title:g,kind:a,content:c,locations:p}}}var Jo={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 jr(t){return t==="TodoList"||t==="SetTodoList"}function dn(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function Gr(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function pn(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=Gr(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 cn(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=pn(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=pn(t);n&&e.push(n);}return e}function zo(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&dn(e.content.text))}function Wo(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=Gr(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 Ho(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function Vr(t){if(!t||typeof t!="object")return [];let e=t.todos;return Array.isArray(e)?e.map(n=>{if(!n||typeof n!="object")return null;let r=n.title;if(typeof r!="string"||r.length===0)return null;let i=n.status;return {content:r,status:Ho(i),priority:"medium"}}).filter(n=>n!==null):[]}function un(){let t=new Set,e=0;function n(u,l){return typeof u=="string"&&u.length>0?u:(e+=1,`kimi_${l.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.role;return "_meta"in o||"_prompt"in o?null:a==="meta"?o.type!=="turn.step.retrying"?null:[{update:{sessionUpdate:"error",message:P([o.error_message,o.error_name],o),fatal:false}}]:a==="assistant"?r(o):a==="tool"?i(o):typeof o.type=="string"&&"payload"in o?s(o):null};function r(u){let l=[],o=u.content,a=u.tool_calls;if(typeof o=="string"&&o.length>0)l.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}});else if(Array.isArray(o))for(let c of o){let p=Wo(c);p&&l.push(p);}if(Array.isArray(a))for(let c of a){if(!c||typeof c!="object")continue;let p=c.function;if(!p)continue;let g=p.name??"",f=n(c.id,g),h;try{h=p.arguments?JSON.parse(p.arguments):{};}catch{h=p.arguments;}if(jr(g)){let k=Vr(h);k.length>0&&l.push({update:{sessionUpdate:"plan",entries:k}}),t.add(f);continue}let{title:m,kind:y,toolContent:w,locations:b}=d(g,typeof h=="object"&&h!==null?h:{});l.push({update:{sessionUpdate:"tool_call",toolCallId:f,title:m,toolName:g,kind:y,status:"pending",rawInput:h,content:w,locations:b}});}return l.length>0?l:null}function i(u){let l=u.tool_call_id;if(typeof l!="string"||l.length===0)return null;if(t.has(l))return t.delete(l),null;let o=u.content,a=[],c=false;if(typeof o=="string")c=dn(o),o.length>0&&a.push({type:"content",content:{type:"text",text:o}});else if(Array.isArray(o))for(let p of o){let g=pn(p);g&&(g.type==="content"&&g.content.type==="text"&&dn(g.content.text)&&(c=true),a.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:l,status:c?"failed":"completed",content:a}}]}function s(u){let l=u.type,o=u.payload??{},a=[];switch(l){case "TextPart":{let c=o.text;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}});break}case "ThinkPart":{let c=o.think;typeof c=="string"&&c.length>0&&a.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:c}}});break}case "ToolCall":{let c=o.function?.name??"",p=n(o.id,c),g=o.function;if(!g)break;let f;try{f=g.arguments?JSON.parse(g.arguments):{};}catch{f=g.arguments;}if(jr(c)){let b=Vr(f);b.length>0&&a.push({update:{sessionUpdate:"plan",entries:b}}),t.add(p);break}let{title:h,kind:m,toolContent:y,locations:w}=d(c,typeof f=="object"&&f!==null?f:{});a.push({update:{sessionUpdate:"tool_call",toolCallId:p,title:h,toolName:c,kind:m,status:"pending",rawInput:f,content:y,locations:w}});break}case "ToolResult":{let c=o.tool_call_id;if(typeof c!="string"||c.length===0)break;if(t.has(c)){t.delete(c);break}let p=o.return_value??o.content,g=[],f=o.is_error===true;if(p&&typeof p=="object"&&!Array.isArray(p)){let h=p;f=f||h.type==="ToolError"||h.is_error===true,g.push(...cn(h.output)),g.length===0&&typeof h.message=="string"&&h.message.length>0&&g.push({type:"content",content:{type:"text",text:h.message}}),g.length===0&&g.push(...cn(p));}else g.push(...cn(p));f=f||zo(g),a.push({update:{sessionUpdate:"tool_call_update",toolCallId:c,status:f?"failed":"completed",content:g}});break}default:return null}return a.length>0?a:null}function d(u,l){let o=Jo[u]||"other",a=[],c=[],p=u;switch(u){case "Read":case "ReadFile":{let g=l.path??l.file_path;p=`Read ${g||"file"}`,g&&c.push({path:g});break}case "ReadMediaFile":{let g=l.path??l.file_path;p=`Read media ${g||"file"}`,g&&c.push({path:g});break}case "Write":case "WriteFile":{let g=l.path??l.file_path;p=`Write ${g||"file"}`,g&&(c.push({path:g}),typeof l.content=="string"&&a.push({type:"diff",path:g,oldText:null,newText:l.content}));break}case "Edit":case "StrReplaceFile":{let g=l.path??l.file_path;p=`Edit ${g||"file"}`,g&&c.push({path:g});break}case "Bash":case "Shell":p=l.command?`\`${l.command}\``:"Run command";break;case "Glob":p=`Find ${l.pattern||"files"}`,l.path&&c.push({path:l.path});break;case "Grep":p=`grep "${l.pattern||""}"`,l.path&&c.push({path:l.path});break;case "WebSearch":case "SearchWeb":p=l.query?`"${l.query}"`:"Web search";break;case "FetchURL":p=l.url?`Fetch ${l.url}`:"Web fetch";break;case "Agent":case "AgentSwarm":case "Task":p=l.description||"Subagent task";break;case "Think":p=l.thought||"Thinking";break;case "CreateSubagent":p=l.name?`Subagent: ${l.name}`:"Create subagent";break;case "TodoList":case "SetTodoList":p="Update todos";break;default:p=u;}return {title:p,kind:o,toolContent:a,locations:c}}}var qo={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 Yo(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function Zo(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 Qo(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function Jr(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:Zo(e.status),priority:Qo(e.priority)}}).filter(e=>e!==null):[]}function Xo(t){if(!t||typeof t!="object")return null;let e=t,n=typeof e.mime=="string"?e.mime:"",r=typeof e.url=="string"?e.url:"";if(n.startsWith("image/")){if(r.length>0){let u=Yo(r);return u?{type:"content",content:{type:"image",data:u.data,mimeType:u.mimeType||n}}:{type:"content",content:{type:"image",data:"",mimeType:n,uri:r}}}return null}return {type:"content",content:{type:"text",text:`[attachment] ${(typeof e.filename=="string"?e.filename:"")||"attachment"} (${n||"file"})`}}}function ea(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 ta(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function gn(){return function(l){let o;try{o=JSON.parse(l);}catch{return null}if(!o||typeof o!="object")return null;let a=o.sessionID,c=[];switch(o.type){case "step_start":return null;case "step_finish":{let g=t(o.part);if(!g)return null;c.push({sessionUpdate:"usage",scope:"call",usage:g});break}case "user":{let g=e(o);g&&c.push(g);break}case "text":{let g=n(o);g&&c.push(g);break}case "reasoning":{let g=r(o);g&&c.push(g);break}case "tool_use":{c.push(...i(o));break}case "error":{let g=s(o);g&&c.push(g);break}default:return null}if(c.length===0)return null;let p=ee(o.timestamp);return c.map(g=>({sessionId:a,update:g,...p!==void 0?{timestamp:p}:{}}))};function t(u){if(!u||typeof u!="object")return null;let l=u.tokens;if(!l||typeof l!="object")return null;let o=l,a=typeof o.cache=="object"&&o.cache?o.cache:{},c=k=>typeof k=="number"&&Number.isFinite(k)?k:void 0,p=c(o.input),g=c(o.output),f=c(a.read),h=c(a.write),m=c(o.reasoning),y=c(u.cost),w={};(p!==void 0||f!==void 0)&&(w.promptTokens=(p??0)+(f??0)),g!==void 0&&(w.completionTokens=g),f!==void 0&&(w.cachedTokens=f),y!==void 0&&y>0&&(w.costUsd=y);let b={};return m&&(b.reasoning_tokens=m),h&&(b.cache_write_tokens=h),Object.keys(b).length>0&&(w.extra=b),w}function e(u){let o=(Array.isArray(u.parts)?u.parts:[]).filter(a=>a&&typeof a=="object"&&a.type==="text"&&typeof a.text=="string"&&a.text).map(a=>a.text).join(`
6
- `);return o.length===0?null:{sessionUpdate:"user_message_chunk",content:{type:"text",text:o}}}function n(u){let l=u.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:l}}}function r(u){let l=u.part?.text;return typeof l!="string"||l.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:l}}}function i(u){let l=u.part;if(!l)return [];let o=typeof l.callID=="string"?l.callID:"";if(o.length===0)return [];let a=typeof l.tool=="string"?l.tool:"",c=a.toLowerCase(),p=typeof l.state=="object"&&l.state?l.state:{},g=typeof p.input=="object"&&p.input?p.input:{},f=p.status,h=p.title??p.metadata?.description??c,m=p.metadata?.exit,{kind:y,content:w,locations:b}=d(c,g),k=[];if(k.push({sessionUpdate:"tool_call",toolCallId:o,title:h,toolName:a,kind:y,status:"pending",rawInput:g,content:w,locations:b}),c==="todowrite"){let E=Jr(g.todos);if(E.length===0&&typeof p.output=="string")try{E=Jr(JSON.parse(p.output));}catch{}E.length>0&&k.push({sessionUpdate:"plan",entries:E});}let C=ta(f,m);if(C==="pending")return k;let v=ea(f,p),x=[];if(typeof v=="string"&&v.length>0&&x.push({type:"content",content:{type:"text",text:v}}),Array.isArray(p.attachments))for(let E of p.attachments){let I=Xo(E);I&&x.push(I);}return k.push({sessionUpdate:"tool_call_update",toolCallId:o,status:C,content:x,rawOutput:p}),k}function s(u){return {sessionUpdate:"error",message:P([u.error?.data?.message,u.error?.message,u.error?.name],u.error??u),fatal:false}}function d(u,l){let o=qo[u]||"other",a=[],c=[];switch(u){case "read":{let p=l.filePath??l.path;if(p){let g=l.offset;c.push({path:p,line:typeof g=="number"&&Number.isFinite(g)?Math.max(0,g-1):void 0});}break}case "write":{let p=l.filePath??l.path;p&&(c.push({path:p}),typeof l.content=="string"&&a.push({type:"diff",path:p,oldText:null,newText:l.content}));break}case "edit":case "multiedit":{let p=l.filePath??l.path;p&&(c.push({path:p}),u==="edit"&&(l.oldString!==void 0||l.newString!==void 0)&&a.push({type:"diff",path:p,oldText:l.oldString??"",newText:l.newString??""}));break}case "apply_patch":break;case "bash":{let p=l.command;p&&l.description?a.push({type:"content",content:{type:"text",text:l.description}}):p&&a.push({type:"content",content:{type:"text",text:p}});break}case "glob":case "list":{let p=l.path;p&&c.push({path:p});break}case "grep":{let p=l.path;p&&c.push({path:p});break}case "codesearch":case "websearch":{let p=l.query;p&&a.push({type:"content",content:{type:"text",text:p}});break}case "webfetch":{let p=l.url;p&&a.push({type:"content",content:{type:"text",text:p}});break}case "task":{let p=l.description;p&&a.push({type:"content",content:{type:"text",text:p}});break}}return {kind:o,content:a,locations:c}}}var na={Read:"read",read_file:"read",Write:"edit",Edit:"edit",write_file:"edit",edit_file:"edit",Bash:"execute",BashOutput:"execute",KillShell:"execute",shell:"execute",run_shell_command:"execute",WebFetch:"fetch",WebSearch:"fetch",brave_web_search:"fetch",Glob:"search",Grep:"search",LS:"search",list_directory:"search",Task:"think",TodoWrite:"other",ExitPlanMode:"switch_mode"};function ut(){let t=new Map,e=new Map;return function(c){let p;try{p=JSON.parse(c);}catch{return null}if(!p||typeof p!="object")return null;let g=p;if("_meta"in g||"_prompt"in g)return null;let f=g.session_id||void 0,h=[];switch(g.type){case "assistant":{let v=g;h.push(...r(v));let x=n(v.message?.usage);x&&h.push({sessionUpdate:"usage",scope:"call",usage:x});break}case "stream_event":{h.push(...i(g));break}case "user":{h.push(...s(g));break}case "system":return null;case "result":{let v=n(g.usage);if(v&&h.push({sessionUpdate:"usage",scope:"run",usage:v}),g.is_error!==true)break;let x=g.error;h.push({sessionUpdate:"error",message:P([x?.message,g.subtype],g.error??g),fatal:true});break}default:return null}if(h.length===0)return null;let m=g.message,y=typeof m?.model=="string"&&m.model?m.model:void 0,w=typeof m?.id=="string"&&m.id?m.id:void 0,b=typeof g.parent_tool_use_id=="string"&&g.parent_tool_use_id?g.parent_tool_use_id:void 0,k=m?.stop_reason,C=k!=null?{stop_reason:k}:void 0;return h.map(v=>({sessionId:f,update:v,...y!==void 0?{model:y}:{},...w!==void 0?{messageId:w}:{},...b!==void 0?{parentToolCallId:b}:{},...C!==void 0?{extra:C}:{}}))};function n(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let c=a,p=w=>typeof w=="number"&&Number.isFinite(w)?w:void 0,g={},f=p(c.input_tokens),h=p(c.output_tokens),m=p(c.cache_read_input_tokens);f!==void 0&&(g.promptTokens=f),h!==void 0&&(g.completionTokens=h),m!==void 0&&(g.cachedTokens=m);let y={};for(let[w,b]of Object.entries(c))w==="input_tokens"||w==="output_tokens"||w==="cache_read_input_tokens"||b!=null&&(y[w]=b);return Object.keys(y).length>0&&(g.extra=y),g}function r(a){let c=[],p=a.message?.content;if(!Array.isArray(p))return c;for(let g of p){let f=d(g);c.push(...f);}return c}function i(a){let c=[],p=a.event;if(!p)return c;switch(p.type){case "content_block_start":{let g=p.index??0,f=p.content_block;f&&(t.set(g,f),f.type==="tool_use"&&e.set(g,""));break}case "content_block_delta":{let g=p.index??0,f=p.delta,h=t.get(g);if(f?.type==="text_delta"&&f.text)c.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.text}});else if(f?.type==="thinking_delta"&&f.thinking)c.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:f.thinking}});else if(f?.type==="input_json_delta"&&f.partial_json&&h?.type==="tool_use"){let m=e.get(g)||"";e.set(g,m+f.partial_json);}break}case "content_block_stop":{let g=p.index??0,f=t.get(g);if(f&&!(f.type==="text"&&f.text)){if(!(f.type==="thinking"&&f.thinking)){if(f.type==="tool_use"){let h=f,m=e.get(g)||"";e.delete(g);let y=h.input;if(m)try{y=JSON.parse(m);}catch{}let w={...h,input:y},b=u(w);b&&c.push(b);}else if(f.type==="tool_result"){let h=l(f);h&&c.push(h);}}}t.delete(g);break}}return c}function s(a){let c=a.message?.content,p=[];if(typeof c=="string")return p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:c}}),p;if(Array.isArray(c)){for(let g of c)if(g.type==="text")p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:g.text}});else if(g.type==="tool_result"){let f=l(g);f&&p.push(f);}}return p}function d(a){switch(a.type){case "text":return a.text?[{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a.text}}]:[];case "thinking":return a.thinking?[{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:a.thinking}}]:[];case "tool_use":{let c=u(a);return c?[c]:[]}case "tool_result":{let c=l(a);return c?[c]:[]}}}function u(a){let c=a.id,p=a.name,g=a.input;if(p==="TodoWrite"&&Array.isArray(g?.todos))return {sessionUpdate:"plan",entries:g.todos.map(w=>({content:w.content,status:w.status||"pending",priority:"medium"}))};let{title:f,kind:h,content:m,locations:y}=o(p,g||{});return {sessionUpdate:"tool_call",toolCallId:c,title:f,toolName:p,kind:h,status:"pending",rawInput:g,content:m,locations:y}}function l(a){let c=a.tool_use_id,p=a.is_error??false,g=a.content,f=[];if(typeof g=="string"&&g.length>0)f.push({type:"content",content:{type:"text",text:g}});else if(Array.isArray(g))for(let h of g)h.type==="text"&&f.push({type:"content",content:{type:"text",text:h.text}});return {sessionUpdate:"tool_call_update",toolCallId:c,status:p?"failed":"completed",content:f}}function o(a,c){let p=na[a]||"other",g=[],f=[],h=a;switch(a){case "Read":case "read_file":h=`Read ${c.file_path||c.absolute_path||"file"}`,(c.file_path||c.absolute_path)&&f.push({path:c.file_path||c.absolute_path});break;case "Write":case "write_file":h=`Write ${c.file_path||"file"}`,c.file_path&&(f.push({path:c.file_path}),g.push({type:"diff",path:c.file_path,oldText:null,newText:c.content||""}));break;case "Edit":case "edit_file":h=`Edit ${c.file_path||"file"}`,c.file_path&&f.push({path:c.file_path});break;case "Bash":case "shell":case "run_shell_command":h=c.command?`\`${c.command}\``:"Run command",c.description&&g.push({type:"content",content:{type:"text",text:c.description}});break;case "WebFetch":h=c.url?`Fetch ${c.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":h=c.query?`"${c.query}"`:"Web search";break;case "Glob":h=`Find ${c.pattern||"files"}`,c.path&&f.push({path:c.path});break;case "Grep":h=`grep "${c.pattern||""}"`;break;case "LS":case "list_directory":h=`List ${c.path||"directory"}`,c.path&&f.push({path:c.path});break;case "Task":h=c.description||"Subagent task";break;case "TodoWrite":h="Update todos";break;case "ExitPlanMode":h="Exit plan mode";break;default:h=a;}return {title:h,kind:p,content:g,locations:f}}}function zr(t){return ut()(t)}function ne(t){switch(t){case "claude":return lt();case "codex":return ct();case "gemini":return pt();case "qwen":return ut();case "kimi":return un();case "opencode":return gn();case "droid":return dt();default:return ()=>null}}function ra(t,e){let n=e.trim();return n?ne(t)(n):null}function ia(t,e){let n=[],r=e.split(`
7
- `),i=ne(t);for(let s of r){let d=s.trim();if(!d)continue;let u=i(d);u&&n.push(...u);}return n}var ua=promisify(execFile),Y="SKILL.md",ga=join(homedir(),".cache","evolve","skills"),vn=["skills","skills/.curated","skills/.experimental","skills/.system",".claude/skills"],fa=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)(?:@(.+))?$/,ma=/^[0-9a-f]{40}$/,mn=2e3,hn=64*1024*1024,N=class extends Error{constructor(e){super(e),this.name="SkillRefError";}},$=class extends Error{constructor(e){super(e),this.name="SkillResolveError";}};function ha(t){return t==="~"?homedir():t.startsWith("~/")?join(homedir(),t.slice(2)):t}function ya(t){let e=t.indexOf("@");if(e===-1)return {base:t};let n=t.slice(e+1);if(!n)throw new N(`Empty @ref in skill reference segment: ${JSON.stringify(t)}`);return {base:t.slice(0,e),gitRef:n}}var wa=/^[A-Za-z0-9._-]+$/;function ft(t,e,n){if(!wa.test(t))throw new N(`Cannot parse skill reference ${JSON.stringify(n)}: ${e} ${JSON.stringify(t)} may only contain letters, digits, ".", "_" and "-".`);return t}function bn(t){let e=String(t??"").trim();if(!e)throw new N("Skill reference cannot be empty.");if(e.startsWith("upload:")){let s=e.slice(7);if(!s)throw new N(`Skill upload reference ${JSON.stringify(e)} names no upload id.`);return {kind:"upload",id:s,raw:e}}if(e.startsWith("name:")){let s=e.slice(5);if(!s)throw new N(`Skill name reference ${JSON.stringify(e)} names no skill.`);return ft(s,"skill name",e),{kind:"name",name:s,raw:e}}if(e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~"))return {kind:"local",path:ha(e),raw:e};let n=e.match(/^(?:https?:\/\/)?(?:www\.)?skills\.sh\/(.+)$/);if(n){let d=n[1].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2||d.length>3)throw new N(`Cannot parse skill reference ${JSON.stringify(e)}: expected skills.sh/<owner>/<repo> or skills.sh/<owner>/<repo>/<skill>, optionally @ref.`);let{base:u,gitRef:l}=ya(d[d.length-1]);d[d.length-1]=u;let[o,a,c]=d;return ft(o,"owner",e),ft(a,"repo",e),c!==void 0&&ft(c,"skill name",e),{kind:"git",host:"github.com",org:o,repo:a,...l?{gitRef:l}:{},...c?{skillName:c}:{},viaSkillsSh:true,raw:e}}let r=e.match(/^https?:\/\/([^/]+)\/(.+)$/);if(r){let s=r[1],d=r[2].replace(/\/+$/,"").split("/").filter(Boolean);if(d.length<2)throw new N(`Git URL must have at least org/name in the path: ${JSON.stringify(e)}`);let u=d[0],l=d[1].replace(/\.git$/,""),o,a;return d.length>=4&&d[2]==="tree"&&(o=d[3],d.length>4&&(a=d.slice(4).join("/"))),{kind:"git",host:s,org:u,repo:l,...o?{gitRef:o}:{},...a?{subdir:a}:{},viaSkillsSh:false,raw:e}}let i=e.match(fa);if(i)return {kind:"git",host:"github.com",org:i[1],repo:i[2],...i[3]?{gitRef:i[3]}:{},viaSkillsSh:false,raw:e};throw new N(`Cannot parse skill reference ${JSON.stringify(e)}. Expected skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], an https git URL, or a local folder path (prefix relative paths with './').`)}function kn(t){return `https://${t.host}/${t.org}/${t.repo}.git`}function le(t){return `https://${t.host}/${t.org}/${t.repo}`}async function q(t,e){try{let{stdout:n}=await ua("git",t,{cwd:e.cwd,timeout:e.timeoutMs,env:e.gitEnv??process.env,maxBuffer:16777216});return n}catch(n){let r=n,i=(r.stderr||r.message||"").trim();throw new $(`git ${t[0]} failed${r.killed?" (timed out)":""}: ${i}`)}}async function Sn(t,e={}){if(t.gitRef&&ma.test(t.gitRef))return t.gitRef;let n=t.gitRef??"HEAD",i=(await q(["ls-remote",kn(t),n,`${n}^{}`],{timeoutMs:e.lsRemoteTimeoutMs??3e4,gitEnv:e.gitEnv})).trim().split(`
8
- `).filter(u=>u.length>0).map(u=>{let[l,o]=u.split(" ");return {sha:l,name:o}});if(i.length===0||!i[0].sha)throw new $(`No matching ref ${JSON.stringify(n)} found in ${le(t)}`);let s=i[0];return (i.find(u=>u.name===`${s.name}^{}`)??s).sha}async function va(t,e={}){let n=bn(t);if(n.kind!=="git")return {ref:n.raw};let r=await Sn(n,e),i;return n.viaSkillsSh?i=`skills.sh/${n.org}/${n.repo}${n.skillName?`/${n.skillName}`:""}@${r}`:n.subdir!==void 0||n.raw.includes("://")?i=`https://${n.host}/${n.org}/${n.repo}/tree/${r}${n.subdir?`/${n.subdir}`:""}`:i=`${n.org}/${n.repo}@${r}`,{ref:i,gitUrl:le(n),gitCommit:r}}async function yn(t){let e=[],n=async i=>{let s=i===""?t:join(t,i),d=await readdir(s,{withFileTypes:true});for(let u of d){let l=i===""?u.name:`${i}/${u.name}`;u.isDirectory()?await n(l):u.isFile()&&e.push(l);}};await n(""),e.sort();let r=createHash("sha256");for(let i of e){let s=createHash("sha256").update(await readFile(join(t,i))).digest("hex");r.update(i),r.update("\0"),r.update(s),r.update("\0");}return `sha256:${r.digest("hex")}`}async function Ie(t){try{return (await stat(t)).isFile()}catch{return false}}async function xn(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function qr(t,e){if(!await xn(t))throw new $(`Skill path does not exist or is not a directory: ${e}`);if(await Ie(join(t,Y)))return [t];let r=(await readdir(t,{withFileTypes:true})).filter(d=>d.isDirectory()&&!d.name.startsWith(".")).map(d=>d.name).sort(),i=[],s=[];for(let d of r)await Ie(join(t,d,Y))?s.push(join(t,d)):i.push(d);if(i.length>0)throw new $(`Skill root ${e} contains child directories without ${Y}: ${i.join(", ")}`);if(s.length===0)throw new $(`Skill path ${e} must be a skill directory containing ${Y}, or a root whose immediate child directories each contain ${Y}.`);return s}async function ba(t){let e=new Map;await Ie(join(t,Y))&&e.set(basename(t),t);for(let n of vn){let r=join(t,n);if(!await xn(r))continue;let i=await readdir(r,{withFileTypes:true});for(let s of i.sort((d,u)=>d.name<u.name?-1:1)){if(!s.isDirectory()||s.name.startsWith("."))continue;let d=join(r,s.name);await Ie(join(d,Y))&&e.set(s.name,d);}}return Array.from(e,([n,r])=>({dir:r,name:n}))}function ka(t){return t.cacheDir??process.env.EVOLVE_SKILLS_CACHE??ga}async function Sa(t,e,n){let r=join(ka(n),t.host,t.org,t.repo,e),i=join(r,t.repo),s=join(r,".evolve-complete");if(await Ie(s)&&await xn(i))return i;await mkdir(dirname(r),{recursive:true});let d=await mkdtemp(`${r}.tmp-`),u=join(d,t.repo),l=n.checkoutTimeoutMs??12e4,o={cwd:u,timeoutMs:l,gitEnv:n.gitEnv};try{await mkdir(u),await q(["init","--quiet"],o),await q(["remote","add","origin",kn(t)],o),t.subdir?(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",t.subdir],o)):(await q(["sparse-checkout","init","--cone"],o),await q(["sparse-checkout","set",...vn],o)),await q(["fetch","--quiet","--depth=1","origin",e],o),await q(["checkout","--quiet","FETCH_HEAD"],o),await rm(join(u,".git"),{recursive:!0,force:!0}),await writeFile(join(d,".evolve-complete"),""),await rm(r,{recursive:!0,force:!0});try{await rename(d,r);}catch{await rm(d,{recursive:!0,force:!0});}return i}catch(a){throw await rm(d,{recursive:true,force:true}),a}}async function Yr(t,e){let n=0,r=0,i=async s=>{let d=await readdir(s,{withFileTypes:true});for(let u of d){let l=join(s,u.name);if(u.isDirectory())await i(l);else if(u.isFile()&&(n+=1,r+=(await stat(l)).size,n>mn||r>hn))throw new $(`Skill ${e} exceeds the size ceiling (${mn} files / ${hn} bytes) \u2014 a skill is instructions, not a dataset.`)}};await i(t);}async function Cn(t,e={}){let n=new Map;for(let r of t){let i=bn(r);if(i.kind==="upload")throw new $(`Skill reference ${JSON.stringify(i.raw)} is a platform upload handle; only the hosted platform can resolve it. Use a skills.sh/git reference or a local folder here.`);if(i.kind==="name")throw new $(`Skill reference ${JSON.stringify(i.raw)} is a platform skill name \u2014 a moving pointer only the hosted platform can resolve (server-side, at job create). Use a skills.sh/git reference or a local folder here.`);if(i.kind==="local"){let l=await qr(i.path,i.raw);for(let o of l)await Yr(o,i.raw),n.set(basename(o),{name:basename(o),dir:o,source:i.raw,digest:await yn(o)});continue}let s=await Sn(i,e),d=await Sa(i,s,e),u;if(i.subdir)u=(await qr(join(d,i.subdir),`${i.raw} (${i.subdir})`)).map(o=>({dir:o,name:basename(o)}));else if(u=await ba(d),u.length===0)throw new $(`No skills found in ${le(i)}@${s.slice(0,12)}: expected ${Y} at the repo root or under ${vn.join(", ")}.`);if(i.skillName){let l=u.filter(o=>o.name===i.skillName);if(l.length===0)throw new $(`Skill ${JSON.stringify(i.skillName)} not found in ${le(i)}@${s.slice(0,12)}. Available: ${u.map(o=>o.name).sort().join(", ")||"(none)"}`);u=l;}for(let{dir:l,name:o}of u)await Yr(l,i.raw),n.set(o,{name:o,dir:l,source:i.raw,gitUrl:le(i),gitCommit:s,digest:await yn(l)});}return Array.from(n.values()).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0)}function mt(t){return `'${t.replace(/'/g,"'\\''")}'`}async function En(t,e,n){if(e.length===0)return;let{tarGzipDirectory:r}=await import('./tar-GVC4KE52.js');await t.files.makeDir(n);for(let i of e){let s=await r(i.dir),d=`${n}/.evolve-skill-${i.name}.tgz`,u=`${n}/${i.name}`;await t.files.write(d,s),await t.commands.run(`mkdir -p ${mt(u)} && tar -xzf ${mt(d)} -C ${mt(u)} && rm -f ${mt(d)}`,{timeoutMs:6e4});}}function F(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function ce(t){return JSON.stringify(xa(t,{target:"jsonSchema7"}),null,2)}function de(t){return JSON.stringify(t,null,2)}function Zr(t,e=false){let n={};function r(i,s){for(let d of j.readdirSync(i)){let u=K.join(i,d),l=s?`${s}/${d}`:d;j.statSync(u).isDirectory()?e&&r(u,l):n[l]=j.readFileSync(u);}}return r(t,""),n}function Qr(t,e){let n=K.resolve(t),r=n.endsWith(K.sep)?n:n+K.sep;for(let[i,s]of Object.entries(e)){let d=K.resolve(n,i);if(!d.startsWith(r))throw new Error(`Unsafe file path escapes target directory: ${i}`);let u=K.dirname(d);j.mkdirSync(u,{recursive:true});let l;s instanceof ArrayBuffer||s instanceof Uint8Array?l=Buffer.from(s):l=s,j.writeFileSync(d,l);}}var T=class extends Error{field;constructor(e,n){super(n),this.name="EvolveConfigError",this.field=e;}};function Tn(t){return typeof t=="string"&&t.trim()!==""}function pe(t){return t==null?String(t):JSON.stringify(t)}function Oe(t){if(!t)return;if(t.type!==void 0&&!Wt(t.type))throw new T("type",`Evolve agent config: unknown agent type ${pe(t.type)}. Valid types: ${Object.keys(U).join(", ")}.`);let e=t.type??m;if(t.model!==void 0&&!Tn(t.model))throw new T("model",`Evolve agent config: "model" is empty (${pe(t.model)}). Pass a model id such as "${D(e).defaultModel}", or omit model entirely to use ${e}'s default.`);if(t.config!==void 0){if(!ri(e))throw new T("config",`Evolve agent config: agent "${e}" does not support a native config. Agents with native-config support: ${ii().join(", ")}.`);let n=t.config;if(typeof n=="string"){if(!Tn(n))throw new T("config",`Evolve agent config: "config" is an empty path (${pe(n)}). Pass a local settings file path or an inline JSON object.`)}else if(!wt(n))throw new T("config",`Evolve agent config: "config" must be a local file path or a JSON object, received ${pe(n)}.`)}t.preset!==void 0&&Rn(e,t.preset);}function Rn(t,e){if(!Gt.includes(e))throw new T("preset",`Evolve agent config: unknown preset ${pe(e)}. Valid presets: ${Gt.join(", ")}.`);let n=ni(e);if(!n.includes(t))throw new T("preset",`Evolve agent config: agent "${t}" cannot guarantee preset "${e}". Agents that can: ${n.join(", ")}.`)}function ti(t){let e=U[t]?.presets;return e?Object.keys(e):[]}function ni(t){return Object.keys(U).filter(e=>ti(e).includes(t))}function vt(t,e){let n={...t};for(let[r,i]of Object.entries(e)){let s=n[r];if(wt(s)&&wt(i))n[r]=vt(s,i);else if(Array.isArray(s)&&Array.isArray(i)){let d=[...s];for(let u of i)d.some(l=>ue(l)===ue(u))||d.push(u);n[r]=d;}else n[r]=i;}return n}function wt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ri(t){return U[t]?.nativeConfig!==void 0}function ii(){return Object.keys(U).filter(ri)}function Ea(t,e){if(e===void 0)return;let n=U[t]?.nativeConfig;if(!n)throw new T("config",`Evolve agent config: agent "${t}" does not support a native config. Agents with native-config support: ${ii().join(", ")}.`);let r;if(typeof e=="string"){let i=e.replace(/^~/,process.env.HOME||"");if(!j.existsSync(i))throw new T("config",`Agent config file not found: ${i}`);let s=j.readFileSync(i,"utf-8");try{r=n.format==="toml"?parse(s):JSON.parse(s);}catch(d){throw new T("config",`Invalid ${t} config file ${e}: ${d.message}`)}}else {let i;try{i=JSON.parse(JSON.stringify(e));}catch(s){throw new T("config",`Invalid inline ${t} config: not JSON-serializable: ${s.message}`)}if(JSON.stringify(i)!==JSON.stringify(e))throw new T("config",`Invalid inline ${t} config: expected a JSON object that can be represented without conversion`);r=i;}if(!wt(r))throw new T("config",`Invalid ${t} config: expected a ${n.format==="toml"?"TOML table":"JSON object"}.`);if(n.format==="toml"){let i;try{i=parse(stringify(r));}catch(s){throw new T("config",`Invalid ${t} config for TOML conversion: ${s.message}`)}if(ue(i)!==ue(r))throw new T("config",`Invalid ${t} config: the document cannot be represented losslessly as TOML (TOML has no null and no mixed-type arrays)`)}return r}function ue(t){return Array.isArray(t)?`[${t.map(ue).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).sort(([n],[r])=>n<r?-1:n>r?1:0).map(([n,r])=>`${JSON.stringify(n)}:${ue(r)}`).join(",")}}`:JSON.stringify(t)??"null"}function _n(t){if(!t||!Tn(t.prompt))throw new T("prompt",`run() requires a non-empty "prompt" string, received ${pe(t?.prompt)}.`)}function Pn(t){if(t){for(let e of x)if(e in t)throw new T(`observability.${e}`,`Evolve observability metadata: "${e}" is reserved for session identity and would split this run across two dashboard sessions. Reserved keys: ${x.join(", ")}. Use a different key, or set the session tag with .withSessionTagPrefix().`)}}function bt(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 Ta(t){let e=t.replace(/^~/,process.env.HOME||"");if(!j.existsSync(e))throw new Error(`OAuth file not found: ${e}`);return j.readFileSync(e,"utf-8")}function ei(t,e,n){if(!e.providerEnvMap||!n)return;let r=n.indexOf("/");if(r<=0)return;let i=n.slice(0,r);if(!(e.providerEnvMap[i]||!oe(e,n)))throw new T("model",`Model "${n}" is served through the Evolve gateway only: the ${t} agent holds no ${i} key in direct mode. Set ${h} (or apiKey) to run it through the gateway, or pick a model whose route has a direct-mode key (${Object.keys(e.providerEnvMap).join(", ")}).`)}function kt(t){let e=t?.type??m,n=D(e),r=Ea(e,t?.config);t?.preset!==void 0&&Rn(e,t.preset);let i={...r!==void 0?{config:r}:{},...t?.preset!==void 0?{preset:t.preset}:{}};if(t?.externalGateway){bt(t);let{apiKey:l,baseUrl:o,revoke:a}=t.externalGateway;if(!l||!o||typeof a!="function")throw new Error("externalGateway requires apiKey, baseUrl, and a revoke() function");return {type:e,apiKey:l,baseUrl:o,isDirectMode:true,externalGateway:{revoke:a},model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.oauthToken){if(e!=="claude")throw new Error(`oauthToken is only supported for claude agent (Claude Max subscription), not ${e}. Use providerApiKey for ${e} instead.`);return {type:e,apiKey:t.oauthToken,isDirectMode:true,isOAuth:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.providerApiKey){ei(e,n,t.model);let l=n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0,o=t.providerBaseUrl??l??n.defaultBaseUrl;return {type:e,apiKey:t.providerApiKey,baseUrl:o,isDirectMode:true,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i}}if(t?.apiKey)return {type:e,apiKey:t.apiKey,isDirectMode:false,model:t.model,reasoningEffort:t.reasoningEffort,maxContextSize:t.maxContextSize,...i};let s=process.env[h];if(s)return {type:e,apiKey:s,isDirectMode:false,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i};if(n.providerEnvMap){let o=(t?.model??n.defaultModel)?.split("/")[0],a=o?n.providerEnvMap[o]:void 0,c=a?process.env[a.keyEnv]:void 0;if(c){let g=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:c,baseUrl:g,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let d=process.env[n.apiKeyEnv];if(d){ei(e,n,t?.model);let o=(n.baseUrlEnv?process.env[n.baseUrlEnv]:void 0)??n.defaultBaseUrl;return {type:e,apiKey:d,baseUrl:o,isDirectMode:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}if(n.oauthEnv){let l=process.env[n.oauthEnv];if(l){if(n.oauthFileName){let o=Ta(l);return {type:e,apiKey:"__oauth_file__",isDirectMode:true,isOAuth:true,oauthFileContent:o,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}return {type:e,apiKey:l,isDirectMode:true,isOAuth:true,model:t?.model,reasoningEffort:t?.reasoningEffort,maxContextSize:t?.maxContextSize,...i}}}let u=n.oauthEnv?n.oauthFileName?`, or ${n.oauthEnv}`:`, oauthToken, or ${n.oauthEnv}`:"";throw new Error(`No API key found for ${e}. Set apiKey (gateway), providerApiKey (direct)${u}, or ${h} / ${n.apiKeyEnv} env var.`)}function Ra(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}var ai=new WeakSet;function In(t){return ai.add(t),t}function fe(t){return ai.has(t)}function si(t,e){return new Error(`${h} is set but ${t} failed to load.
9
- Try installing: ${e}`)}function oi(t){return t.message?.includes("Cannot find module")||t.message?.includes("MODULE_NOT_FOUND")}function On(t,e){if(!e||e.timeoutMs===void 0&&e.resources===void 0)return t;let n=t.create.bind(t);return t.create=(r={})=>n({...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},...e.resources!==void 0?{resources:e.resources}:{},...r}),t}async function Ae(t,e$1="e2b",n){let r=t||process.env[h];if(!r)throw new Error(`${h} is required for Evolve-managed sandbox features`);if(!c.includes(e$1))throw new Error(`Unknown managed sandbox provider "${e$1}". Supported: ${c.join(", ")}`);if(e$1==="daytona")try{let{createDaytonaProvider:i}=await import('@evolvingmachines/daytona');return On(In(i({apiKey:r,apiUrl:d("daytona"),managedToolboxUrl:e()})),n)}catch(i){let s=i;throw oi(s)?si("@evolvingmachines/daytona","npm install @evolvingmachines/daytona"):s}if(e$1==="modal"){let{ManagedModalProvider:i}=await import('./managed-modal-IJW62SSK.js');return On(In(new i({apiKey:r,baseUrl:d("modal")})),n)}try{let{createE2BProvider:i}=await import('@evolvingmachines/e2b');return On(In(i({apiKey:Ra(r),apiUrl:f()})),n)}catch(i){let s=i;throw oi(s)?si("@evolvingmachines/e2b","npm install @evolvingmachines/evolve"):s}}function _a(t="e2b",e){let n=typeof e=="string"?{apiKey:e}:e??{},{apiKey:r,...i}=n;return Ae(r,t,i)}async function St(){let t=process.env[i];if(t)try{let{createE2BProvider:s}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===f()&&delete process.env.E2B_API_URL,s({apiKey:t})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${i} is set but @evolvingmachines/e2b failed to load.
10
- Try reinstalling: npm install @evolvingmachines/evolve`):d}let e=process.env[j$1];if(e)try{let{createDaytonaProvider:s}=await import('@evolvingmachines/daytona');return s({apiKey:e})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${j$1} is set but @evolvingmachines/daytona failed to load.
11
- Try installing: npm install @evolvingmachines/daytona`):d}let n=process.env[k],r=process.env[l];if(n&&r)try{let{createModalProvider:s}=await import('@evolvingmachines/modal');return s({tokenId:n,tokenSecret:r})}catch(s){let d=s;throw d.message?.includes("Cannot find module")||d.message?.includes("MODULE_NOT_FOUND")?new Error(`${k} is set but @evolvingmachines/modal failed to load.
12
- Try installing: npm install @evolvingmachines/modal`):d}let i$1=process.env[h];if(i$1)return Ae(i$1);throw new Error(`No sandbox provider configured. Either:
9
+ `)??""}};case "agent_message":return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:o.text??""}};case "mcp_tool_call":{let p=l(o.result),g=o.status==="failed"||o.error?"failed":"completed";return {sessionUpdate:"tool_call_update",toolCallId:d,status:g,content:p,rawOutput:o}}case "command_execution":{let p=o.aggregated_output?[{type:"content",content:{type:"text",text:o.aggregated_output}}]:[],g=o.status==="completed"||o.exit_code===0?"completed":"failed";return {sessionUpdate:"tool_call_update",toolCallId:d,status:g,content:p,rawOutput:o}}case "file_change":{let p=o.changes??[],g=p.map(h=>({path:h.path})),f=p.length===1?`${p[0].kind==="add"?"Create":"Edit"} ${p[0].path}`:`Edit ${p.length} files`;return {sessionUpdate:"tool_call",toolCallId:d,title:f,toolName:"file_change",kind:"edit",status:o.status==="completed"?"completed":"failed",rawInput:{changes:p},content:p.map(h=>({type:"diff",path:h.path,oldText:h.kind==="add"?null:"",newText:""})),locations:g}}case "web_search":return {sessionUpdate:"tool_call",toolCallId:d,title:`Search: ${o.query??""}`,toolName:"web_search",kind:"fetch",status:"completed",content:[]};case "todo_list":return {sessionUpdate:"plan",entries:a(o.items)};default:return null}}function l(o){return o?.content?Array.isArray(o.content)?o.content.map(d=>({type:"content",content:c(d)})):typeof o.content=="string"?[{type:"content",content:{type:"text",text:o.content}}]:[]:[]}function c(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 a(o){if(!Array.isArray(o))return [];let d=false;return o.map(u=>{let p;return u.completed?p="completed":d?p="pending":(p="in_progress",d=true),{content:u.text??"",status:p,priority:"medium"}})}}var Sl={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"},xl=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 Zt(){let t=new Map,e,n,r=false,i="",s;return function(c){let a;try{a=JSON.parse(c);}catch{return null}if(!ds(a))return null;let o=Cl(a);if(o.sessionId&&(e=o.sessionId),o.errorText)return [ir(e,o.errorText,true)];if(o.resultText)return i=o.resultText,r=true,[Oe(e,o.resultText)];if(o.handled)return null;let u=El(a)??a,p=cs(u);p&&(e=p);let g=[],f=_(u,"type");switch(f){case "system":{let m=_(u,"model");return m&&(n=m),null}case "message":{let m=_(u,"role"),w=_(u,"text")||or(u.content);if(!w)break;m==="assistant"&&(r=true,i=w,g.push(Oe(e,w)));break}case "completion":{let m=_(u,"finalText")||_(u,"result");m&&(!r||m!==i)&&(r=true,i=m,g.push(Oe(e,m)));let w=Ze(u.usage);w&&g.push({sessionId:e,update:{sessionUpdate:"usage",scope:"run",usage:w}});break}case "assistant_text_delta":{let m=_(u,"textDelta")||_(u,"text");m&&(r=true,i+=m,g.push(Oe(e,m)));break}case "thinking_text_delta":{let m=_(u,"textDelta")||_(u,"text");if(m){let w=as(u,m,s);w&&(s=w.signature,g.push({sessionId:e,update:w.event}));}break}case "reasoning":{let m=_(u,"text");if(m){let w=as(u,m,s);w&&(s=w.signature,g.push({sessionId:e,update:w.event}));}break}case "assistant":{let m=_(u,"text")||or(B(u.message)?.content);m&&(r=true,i=m,g.push(Oe(e,m)));break}case "tool_call":case "tool_call_delta":{let m=B(u.toolUse)??B(u.tool_use)??u,w=ls(m,t);w&&g.push({sessionId:e,update:w});break}case "tool_result":{let m=Tl(u,t);m&&g.push({sessionId:e,update:m});break}case "tool_progress_update":case "tool_progress":{let m=Rl(u);m&&g.push({sessionId:e,update:m});break}case "create_message":{for(let m of _l(u,t)){if(m.sessionUpdate==="agent_message_chunk"){let w=m.content.type==="text"?m.content.text:"";if(r&&w===i)continue;r=true,i=w;}g.push({sessionId:e,update:m});}break}case "result":{if(u.is_error===true||u.subtype==="failure"){g.push(ir(e,R([pe(u.result),pe(u.error),pe(u.subtype)],u),true));break}let m=pe(u.result??u.text??u.error);m&&(r=true,i=m,g.push(Oe(e,m)));break}case "error":{g.push(ir(e,R([pe(u.message),pe(u.error)],u),false));break}default:if(f&&!xl.has(f))return null}if(g.length>0&&f!=="reasoning"&&f!=="thinking_text_delta"&&(s=void 0),g.length===0)return null;let h=ee(u.timestamp);return g.map(m=>({...m,...h!==void 0?{timestamp:h}:{},...n!==void 0?{model:n}:{}}))}}function as(t,e,n){let r=sr(t,"id")||sr(t,"messageId"),i=sr(t,"blockIndex"),s=`${_(t,"type")}:${r}:${i}:${e}`;return s===n?null:{signature:s,event:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:e}}}}function Cl(t){if(t.type!=="response")return {handled:false};let e=B(t.result),n=B(t.error),r=cs(e??t);if(n)return {handled:true,sessionId:r,errorText:pe(n.message??n)};let i=e?_(e,"finalText")||_(e,"result"):"";return {handled:true,sessionId:r,resultText:i}}function El(t){return t.method!=="droid.session_notification"?null:B(B(t.params)?.notification)}function _l(t,e){let n=B(t.message);if(!n)return [];let r=[],i=n.content;if(Array.isArray(i))for(let s of i){let l=B(s);if(l&&l.type==="tool_use"){let c=ls(l,e);c&&r.push(c);}}if(n.role==="assistant"){let s=or(i);s&&r.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:s}});}return r}function ls(t,e){let n=_(t,"id")||_(t,"toolUseId")||_(t,"tool_use_id"),r=_(t,"name")||_(t,"toolName")||_(t,"tool_name")||"Tool";if(!n)return null;e.set(n,r);let i=B(t.input)??B(t.toolInput)??B(t.arguments)??B(t.parameters)??{};if(us(r)==="todowrite"){let o=Pl(i);if(o)return o}let{title:s,kind:l,content:c,locations:a}=Il(r,i);return {sessionUpdate:"tool_call",toolCallId:n,title:s,toolName:r,kind:l,status:"pending",rawInput:i,content:c,locations:a}}function Tl(t,e){let n=_(t,"toolUseId")||_(t,"tool_use_id")||_(t,"tool_id")||_(t,"id")||_(t,"toolId");if(!n)return null;let r=_(t,"toolName")||_(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:ar(t.content??t.result??t.value??t.error)}}function Rl(t){let e=_(t,"toolUseId")||_(t,"tool_use_id")||_(t,"tool_id")||_(t,"id")||_(t,"toolId");if(!e)return null;let n=B(t.update),r=pe(t.content??n?.text??n?.status??n?.details);return {sessionUpdate:"tool_call_update",toolCallId:e,status:"in_progress",content:r?ar(r):void 0}}function Pl(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let i=B(r);if(!i)return [];let s=_(i,"content"),l=Ol(_(i,"status")),c=Al(_(i,"priority"));return s?[{content:s,status:l,priority:c}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function Il(t,e){let n=Sl[us(t)]||"other",r=_(e,"path")||_(e,"filePath")||_(e,"file_path")||_(e,"absolute_path"),i=_(e,"command"),s=_(e,"url"),l=r||i||s;return {title:l?`${t} ${l}`:t,kind:n,content:Object.keys(e).length>0?ar(e):[],locations:r?[{path:r}]:[]}}function cs(t){if(t)return _(t,"session_id")||_(t,"sessionId")}function Oe(t,e){return {sessionId:t,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:e}}}}function ir(t,e,n){return {sessionId:t,update:{sessionUpdate:"error",message:e,fatal:n}}}function or(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=B(e);return n?_(n,"text")||_(n,"content"):""}).filter(Boolean).join(""):""}function ar(t){let e=pe(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function pe(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function ds(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function B(t){return ds(t)?t:null}function _(t,e){let n=t[e];return typeof n=="string"?n:""}function sr(t,e){let n=t[e];return typeof n=="string"||typeof n=="number"||typeof n=="boolean"?String(n):""}function us(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function Ol(t){return t==="in_progress"||t==="completed"?t:"pending"}function Al(t){return t==="high"||t==="low"?t:"medium"}var Ml={read:"read",read_image:"read",write:"edit",edit:"edit",glob:"search",grep:"search",bash:"execute",run_code:"execute",job_list:"execute",job_output:"execute",job_kill:"execute",web_search:"fetch",web_fetch:"fetch",subagent:"think",subagent_fork:"think",exit_plan_mode:"switch_mode"};function Xt(){let t,e,n=we("dsh");return function(i){let s;try{s=JSON.parse(i);}catch{return null}if(!ps(s))return null;let l=$(s,"type"),c=[],a={};switch(s.truncated===true&&(a.truncated=true),l){case "session":{let o=$(s,"sessionId");o&&(t=o),c.push(A(l,s));break}case "status":{let o=Ul(s,a,n);o&&c.push(o);break}case "thinking":{let o=$(s,"text");o&&c.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:o}});break}case "text":{let o=$(s,"text");o&&(e=o,c.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}));break}case "tool_call":{c.push(...Dl(s));break}case "tool_result":{let o=Nl(s);o&&c.push(o);break}case "final":{let o=$(s,"text");o&&o!==e&&(e=o,c.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}));break}case "error":{c.push({sessionUpdate:"error",message:R([s.message],s),fatal:true});break}default:n("event type",l),c.push(A(l,s));break}return c.length===0?null:c.map(o=>({sessionId:t,update:o,...Object.keys(a).length>0?{extra:a}:{}}))}}function Ul(t,e,n){let r=$(t,"phase");switch(r){case "turn_start":case "step_start":return null;case "step_end":{let i=$l(t.usage);return i?(typeof t.turn=="number"&&(e.turn=t.turn),typeof t.step=="number"&&(e.step=t.step),{sessionUpdate:"usage",scope:"call",usage:i}):null}case "turn_end":{let i=Qe(t.reason),s=i?$(i,"kind"):"";if(s==="completed")return null;let l=i?Qe(i.error):null;typeof t.turn=="number"&&(e.turn=t.turn),s&&(e.kind=s);for(let c of ["code","status","requestId","providerRetryAfterMs"]){let a=l?.[c];a!=null&&(e[c]=a);}return {sessionUpdate:"error",message:R([l?.message,i?.reason],i??t),fatal:true}}default:return n("status phase",r),A("status",t)}}function $l(t){let e=Qe(t);if(!e)return null;let n=Qt(e.inputTokens),r=Qt(e.outputTokens),i=Qt(e.cacheReadTokens),s=Qt(e.cacheWriteTokens),l={};(n!==void 0||i!==void 0||s!==void 0)&&(l.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(l.completionTokens=r),i!==void 0&&(l.cachedTokens=i);let c={};for(let[a,o]of Object.entries(e))a==="inputTokens"||a==="outputTokens"||a==="cacheReadTokens"||o!=null&&(c[a]=o);return Object.keys(c).length>0&&(l.extra=c),l}function Dl(t){let e=$(t,"callId");if(!e)return [];let n=$(t,"tool"),r=Qe(t.input)??{},{title:i,kind:s,content:l,locations:c}=Fl(n,r),a=[{sessionUpdate:"tool_call",toolCallId:e,title:i,toolName:n,kind:s,status:"pending",rawInput:t.input,content:l,locations:c}];if(n==="todo_write"){let o=Ll(r.todos);o.length>0&&a.push({sessionUpdate:"plan",entries:o});}return a}function Nl(t){let e=$(t,"callId");if(!e)return null;let n=Bl(t.result);return {sessionUpdate:"tool_call_update",toolCallId:e,status:t.status==="error"?"failed":"completed",content:n?[{type:"content",content:{type:"text",text:n}}]:[]}}function Fl(t,e){let n=Ml[t]??"other",r=$(e,"file_path")||$(e,"path"),i=$(e,"command"),s=$(e,"url"),l=r||i||s||$(e,"pattern")||$(e,"name")||$(e,"description"),c=[],a=[];switch(t){case "read":{if(r){let o=e.offset;a.push({path:r,line:typeof o=="number"&&Number.isFinite(o)?Math.max(0,o-1):void 0});}break}case "write":{r&&(a.push({path:r}),typeof e.content=="string"&&c.push({type:"diff",path:r,oldText:null,newText:e.content}));break}case "edit":{r&&(a.push({path:r}),(typeof e.old_string=="string"||typeof e.new_string=="string")&&c.push({type:"diff",path:r,oldText:typeof e.old_string=="string"?e.old_string:"",newText:typeof e.new_string=="string"?e.new_string:""}));break}case "bash":{let o=$(e,"description");(o||i)&&c.push({type:"content",content:{type:"text",text:o||i}});break}case "glob":case "grep":{r&&a.push({path:r});break}case "web_fetch":case "web_search":{let o=s||$(e,"query");o&&c.push({type:"content",content:{type:"text",text:o}});break}case "subagent":case "subagent_fork":{let o=$(e,"description");o&&c.push({type:"content",content:{type:"text",text:o}});break}}return {title:l?`${t} ${l}`:t,kind:n,content:c,locations:a}}function Ll(t){if(!Array.isArray(t))return [];let e=[];for(let n of t){let r=Qe(n),i=r?$(r,"content"):"";if(!i)continue;let s=r?$(r,"status"):"";e.push({content:i,status:s==="in_progress"||s==="completed"?s:"pending",priority:"medium"});}return e}function Qt(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Bl(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function ps(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Qe(t){return ps(t)?t:null}function $(t,e){let n=t[e];return typeof n=="string"?n:""}var Kl={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 en(){let t,e;return function(o){let d;try{d=JSON.parse(o);}catch{return null}if(d._meta||d._prompt)return null;let u=(typeof d.session_id=="string"&&d.session_id?d.session_id:void 0)??e,p=[];switch(d.type){case "init":return typeof d.model=="string"&&d.model&&(t=d.model),typeof d.session_id=="string"&&d.session_id&&(e=d.session_id),null;case "result":{let f=n(d.stats);if(f&&p.push({sessionId:u,update:{sessionUpdate:"usage",scope:"run",usage:f}}),d.status!=="error")break;p.push({sessionId:u,update:{sessionUpdate:"error",message:R([d.error?.message,d.error?.type,'gemini ended the run with result status "error" and no error text'],d.error??d),fatal:true}});break}case "message":{let f=r(d);f&&p.push({sessionId:u,update:f});break}case "tool_use":{let f=i(d);f&&p.push({sessionId:u,update:f});break}case "tool_result":{let f=s(d);f&&p.push({sessionId:u,update:f});break}case "error":{let f=l(d);f&&p.push({sessionId:u,update:f});break}default:return null}if(p.length===0)return null;let g=ee(d.timestamp);return p.map(f=>({...f,...g!==void 0?{timestamp:g}:{},...t!==void 0?{model:t}:{}}))};function n(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let o=a,d=m=>typeof m=="number"&&Number.isFinite(m)?m:void 0,u={},p=d(o.input_tokens),g=d(o.output_tokens),f=d(o.cached);p!==void 0&&(u.promptTokens=p),g!==void 0&&(u.completionTokens=g),f!==void 0&&(u.cachedTokens=f);let h={};for(let[m,w]of Object.entries(o))m==="input_tokens"||m==="output_tokens"||m==="cached"||w!=null&&(h[m]=w);return Object.keys(h).length>0&&(u.extra=h),u}function r(a){let o=a.role,d=a.content;return d?o==="assistant"?{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d}}:o==="user"?{sessionUpdate:"user_message_chunk",content:{type:"text",text:d}}:null:null}function i(a){let o=a.tool_id,d=a.tool_name,u=a.parameters||{},{title:p,kind:g,content:f,locations:h}=c(d,u);return {sessionUpdate:"tool_call",toolCallId:o,title:p,toolName:d,kind:g,status:"pending",rawInput:u,content:f,locations:h}}function s(a){let o=a.tool_id,d=a.status,u=a.output,p=a.error,g=[];return u&&typeof u=="string"&&u.length>0&&g.push({type:"content",content:{type:"text",text:u}}),p?.message&&!u&&g.push({type:"content",content:{type:"text",text:p.message}}),{sessionUpdate:"tool_call_update",toolCallId:o,status:d==="success"?"completed":"failed",content:g}}function l(a){return {sessionUpdate:"error",message:R([a.message],a),fatal:false}}function c(a,o){let d=Kl[a]||"other",u=[],p=[],g=a;switch(a){case "read_file":g=`Read ${o.absolute_path||o.file_path||"file"}`,(o.absolute_path||o.file_path)&&p.push({path:o.absolute_path||o.file_path});break;case "write_file":g=`Write ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),u.push({type:"diff",path:o.file_path,oldText:null,newText:o.content||""}));break;case "edit_file":g=`Edit ${o.file_path||"file"}`,o.file_path&&p.push({path:o.file_path});break;case "replace":g=`Edit ${o.file_path||"file"}`,o.file_path&&(p.push({path:o.file_path}),(o.old_string!==void 0||o.new_string!==void 0)&&u.push({type:"diff",path:o.file_path,oldText:o.old_string||"",newText:o.new_string||""}));break;case "run_shell_command":case "shell":g=o.command?`\`${o.command}\``:"Run command",o.description&&u.push({type:"content",content:{type:"text",text:o.description}});break;case "brave_web_search":case "web_search":case "google_web_search":g=o.query?`"${o.query}"`:"Web search";break;case "web_fetch":g=o.prompt?`Fetch: ${o.prompt.substring(0,50)}...`:"Web fetch";break;case "glob":g=`Find ${o.pattern||"files"}`,o.dir_path&&p.push({path:o.dir_path});break;case "grep":case "search_file_content":g=`grep "${o.pattern||o.query||""}"`;break;case "list_directory":g=`List ${o.dir_path||o.path||"directory"}`,(o.dir_path||o.path)&&p.push({path:o.dir_path||o.path});break;case "read_many_files":g=`Read ${o.include?.length||"multiple"} files`,Array.isArray(o.include)&&o.include.forEach(f=>p.push({path:f}));break;case "delegate_to_agent":g=o.agent_name?`Agent: ${o.agent_name}`:"Delegate to agent";break;case "write_todos":g="Update todos";break;case "save_memory":g=o.fact?`Remember: "${o.fact.substring(0,40)}..."`:"Save memory";break;case "activate_skill":g=o.name?`Activate skill: ${o.name}`:"Activate skill";break;default:g=a;}return {title:g,kind:d,content:u,locations:p}}}var jl={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 gs(t){return t==="TodoList"||t==="SetTodoList"}function cr(t){return /<system>\s*ERROR:/i.test(t)||t.includes("<error>")||t.includes("ToolError")}function ms(t){let e=/^data:([^;,]+)((?:;[^,]*)*),(.+)$/i.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function dr(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=ms(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 lr(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=dr(n);r&&e.push(r);}return e}if(t&&typeof t=="object"){let n=dr(t);n&&e.push(n);}return e}function Vl(t){return t.some(e=>e.type==="content"&&e.content.type==="text"&&cr(e.content.text))}function Gl(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=ms(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 Jl(t){return t==="in_progress"?"in_progress":t==="done"||t==="completed"?"completed":"pending"}function fs(t){if(!t||typeof t!="object")return [];let e=t.todos;return Array.isArray(e)?e.map(n=>{if(!n||typeof n!="object")return null;let r=n.title;if(typeof r!="string"||r.length===0)return null;let i=n.status;return {content:r,status:Jl(i),priority:"medium"}}).filter(n=>n!==null):[]}function ur(){let t=new Set,e=0;function n(c,a){return typeof c=="string"&&c.length>0?c:(e+=1,`kimi_${a.replace(/[^a-zA-Z0-9_]/g,"_")||"tool"}_${e}`)}return function(a){let o;try{o=JSON.parse(a);}catch{return null}if(!o||typeof o!="object")return null;let d=o.role;return "_meta"in o||"_prompt"in o?null:d==="meta"?o.type!=="turn.step.retrying"?null:[{update:{sessionUpdate:"error",message:R([o.error_message,o.error_name],o),fatal:false}}]:d==="assistant"?r(o):d==="tool"?i(o):typeof o.type=="string"&&"payload"in o?s(o):null};function r(c){let a=[],o=c.content,d=c.tool_calls;if(typeof o=="string"&&o.length>0)a.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:o}}});else if(Array.isArray(o))for(let u of o){let p=Gl(u);p&&a.push(p);}if(Array.isArray(d))for(let u of d){if(!u||typeof u!="object")continue;let p=u.function;if(!p)continue;let g=p.name??"",f=n(u.id,g),h;try{h=p.arguments?JSON.parse(p.arguments):{};}catch{h=p.arguments;}if(gs(g)){let y=fs(h);y.length>0&&a.push({update:{sessionUpdate:"plan",entries:y}}),t.add(f);continue}let{title:m,kind:w,toolContent:v,locations:k}=l(g,typeof h=="object"&&h!==null?h:{});a.push({update:{sessionUpdate:"tool_call",toolCallId:f,title:m,toolName:g,kind:w,status:"pending",rawInput:h,content:v,locations:k}});}return a.length>0?a:null}function i(c){let a=c.tool_call_id;if(typeof a!="string"||a.length===0)return null;if(t.has(a))return t.delete(a),null;let o=c.content,d=[],u=false;if(typeof o=="string")u=cr(o),o.length>0&&d.push({type:"content",content:{type:"text",text:o}});else if(Array.isArray(o))for(let p of o){let g=dr(p);g&&(g.type==="content"&&g.content.type==="text"&&cr(g.content.text)&&(u=true),d.push(g));}return [{update:{sessionUpdate:"tool_call_update",toolCallId:a,status:u?"failed":"completed",content:d}}]}function s(c){let a=c.type,o=c.payload??{},d=[];switch(a){case "TextPart":{let u=o.text;typeof u=="string"&&u.length>0&&d.push({update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:u}}});break}case "ThinkPart":{let u=o.think;typeof u=="string"&&u.length>0&&d.push({update:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:u}}});break}case "ToolCall":{let u=o.function?.name??"",p=n(o.id,u),g=o.function;if(!g)break;let f;try{f=g.arguments?JSON.parse(g.arguments):{};}catch{f=g.arguments;}if(gs(u)){let k=fs(f);k.length>0&&d.push({update:{sessionUpdate:"plan",entries:k}}),t.add(p);break}let{title:h,kind:m,toolContent:w,locations:v}=l(u,typeof f=="object"&&f!==null?f:{});d.push({update:{sessionUpdate:"tool_call",toolCallId:p,title:h,toolName:u,kind:m,status:"pending",rawInput:f,content:w,locations:v}});break}case "ToolResult":{let u=o.tool_call_id;if(typeof u!="string"||u.length===0)break;if(t.has(u)){t.delete(u);break}let p=o.return_value??o.content,g=[],f=o.is_error===true;if(p&&typeof p=="object"&&!Array.isArray(p)){let h=p;f=f||h.type==="ToolError"||h.is_error===true,g.push(...lr(h.output)),g.length===0&&typeof h.message=="string"&&h.message.length>0&&g.push({type:"content",content:{type:"text",text:h.message}}),g.length===0&&g.push(...lr(p));}else g.push(...lr(p));f=f||Vl(g),d.push({update:{sessionUpdate:"tool_call_update",toolCallId:u,status:f?"failed":"completed",content:g}});break}default:return null}return d.length>0?d:null}function l(c,a){let o=jl[c]||"other",d=[],u=[],p=c;switch(c){case "Read":case "ReadFile":{let g=a.path??a.file_path;p=`Read ${g||"file"}`,g&&u.push({path:g});break}case "ReadMediaFile":{let g=a.path??a.file_path;p=`Read media ${g||"file"}`,g&&u.push({path:g});break}case "Write":case "WriteFile":{let g=a.path??a.file_path;p=`Write ${g||"file"}`,g&&(u.push({path:g}),typeof a.content=="string"&&d.push({type:"diff",path:g,oldText:null,newText:a.content}));break}case "Edit":case "StrReplaceFile":{let g=a.path??a.file_path;p=`Edit ${g||"file"}`,g&&u.push({path:g});break}case "Bash":case "Shell":p=a.command?`\`${a.command}\``:"Run command";break;case "Glob":p=`Find ${a.pattern||"files"}`,a.path&&u.push({path:a.path});break;case "Grep":p=`grep "${a.pattern||""}"`,a.path&&u.push({path:a.path});break;case "WebSearch":case "SearchWeb":p=a.query?`"${a.query}"`:"Web search";break;case "FetchURL":p=a.url?`Fetch ${a.url}`:"Web fetch";break;case "Agent":case "AgentSwarm":case "Task":p=a.description||"Subagent task";break;case "Think":p=a.thought||"Thinking";break;case "CreateSubagent":p=a.name?`Subagent: ${a.name}`:"Create subagent";break;case "TodoList":case "SetTodoList":p="Update todos";break;default:p=c;}return {title:p,kind:o,toolContent:d,locations:u}}}var zl={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 Wl(t){let e=/^data:([^;,]+)?((?:;[^,]+)*),(.*)$/s.exec(t);if(!e)return null;let n=e[1]||"",r=e[2]||"",i=e[3]||"";return /;base64/i.test(r)?{mimeType:n,data:i}:null}function Hl(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 ql(t){return t==="high"||t==="medium"||t==="low"?t:"medium"}function hs(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:Hl(e.status),priority:ql(e.priority)}}).filter(e=>e!==null):[]}function Yl(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 c=Wl(r);return c?{type:"content",content:{type:"image",data:c.data,mimeType:c.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 Zl(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 Ql(t,e){return t==="error"?"failed":t==="running"?"in_progress":t==="pending"?"pending":typeof e=="number"&&e!==0?"failed":"completed"}function pr(){return function(a){let o;try{o=JSON.parse(a);}catch{return null}if(!o||typeof o!="object")return null;let d=o.sessionID,u=[];switch(o.type){case "step_start":return null;case "step_finish":{let g=t(o.part);if(!g)return null;u.push({sessionUpdate:"usage",scope:"call",usage:g});break}case "user":{let g=e(o);g&&u.push(g);break}case "text":{let g=n(o);g&&u.push(g);break}case "reasoning":{let g=r(o);g&&u.push(g);break}case "tool_use":{u.push(...i(o));break}case "error":{let g=s(o);g&&u.push(g);break}default:return null}if(u.length===0)return null;let p=ee(o.timestamp);return u.map(g=>({sessionId:d,update:g,...p!==void 0?{timestamp:p}:{}}))};function t(c){if(!c||typeof c!="object")return null;let a=c.tokens;if(!a||typeof a!="object")return null;let o=a,d=typeof o.cache=="object"&&o.cache?o.cache:{},u=y=>typeof y=="number"&&Number.isFinite(y)?y:void 0,p=u(o.input),g=u(o.output),f=u(d.read),h=u(d.write),m=u(o.reasoning),w=u(c.cost),v={};(p!==void 0||f!==void 0)&&(v.promptTokens=(p??0)+(f??0)),g!==void 0&&(v.completionTokens=g),f!==void 0&&(v.cachedTokens=f),w!==void 0&&w>0&&(v.costUsd=w);let k={};return m&&(k.reasoning_tokens=m),h&&(k.cache_write_tokens=h),Object.keys(k).length>0&&(v.extra=k),v}function e(c){let o=(Array.isArray(c.parts)?c.parts:[]).filter(d=>d&&typeof d=="object"&&d.type==="text"&&typeof d.text=="string"&&d.text).map(d=>d.text).join(`
10
+ `);return o.length===0?null:{sessionUpdate:"user_message_chunk",content:{type:"text",text:o}}}function n(c){let a=c.part?.text;return typeof a!="string"||a.length===0?null:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:a}}}function r(c){let a=c.part?.text;return typeof a!="string"||a.length===0?null:{sessionUpdate:"agent_thought_chunk",content:{type:"text",text:a}}}function i(c){let a=c.part;if(!a)return [];let o=typeof a.callID=="string"?a.callID:"";if(o.length===0)return [];let d=typeof a.tool=="string"?a.tool:"",u=d.toLowerCase(),p=typeof a.state=="object"&&a.state?a.state:{},g=typeof p.input=="object"&&p.input?p.input:{},f=p.status,h=p.title??p.metadata?.description??u,m=p.metadata?.exit,{kind:w,content:v,locations:k}=l(u,g),y=[];if(y.push({sessionUpdate:"tool_call",toolCallId:o,title:h,toolName:d,kind:w,status:"pending",rawInput:g,content:v,locations:k}),u==="todowrite"){let b=hs(g.todos);if(b.length===0&&typeof p.output=="string")try{b=hs(JSON.parse(p.output));}catch{}b.length>0&&y.push({sessionUpdate:"plan",entries:b});}let S=Ql(f,m);if(S==="pending")return y;let C=Zl(f,p),x=[];if(typeof C=="string"&&C.length>0&&x.push({type:"content",content:{type:"text",text:C}}),Array.isArray(p.attachments))for(let b of p.attachments){let E=Yl(b);E&&x.push(E);}return y.push({sessionUpdate:"tool_call_update",toolCallId:o,status:S,content:x,rawOutput:p}),y}function s(c){return {sessionUpdate:"error",message:R([c.error?.data?.message,c.error?.message,c.error?.name],c.error??c),fatal:false}}function l(c,a){let o=zl[c]||"other",d=[],u=[];switch(c){case "read":{let p=a.filePath??a.path;if(p){let g=a.offset;u.push({path:p,line:typeof g=="number"&&Number.isFinite(g)?Math.max(0,g-1):void 0});}break}case "write":{let p=a.filePath??a.path;p&&(u.push({path:p}),typeof a.content=="string"&&d.push({type:"diff",path:p,oldText:null,newText:a.content}));break}case "edit":case "multiedit":{let p=a.filePath??a.path;p&&(u.push({path:p}),c==="edit"&&(a.oldString!==void 0||a.newString!==void 0)&&d.push({type:"diff",path:p,oldText:a.oldString??"",newText:a.newString??""}));break}case "apply_patch":break;case "bash":{let p=a.command;p&&a.description?d.push({type:"content",content:{type:"text",text:a.description}}):p&&d.push({type:"content",content:{type:"text",text:p}});break}case "glob":case "list":{let p=a.path;p&&u.push({path:p});break}case "grep":{let p=a.path;p&&u.push({path:p});break}case "codesearch":case "websearch":{let p=a.query;p&&d.push({type:"content",content:{type:"text",text:p}});break}case "webfetch":{let p=a.url;p&&d.push({type:"content",content:{type:"text",text:p}});break}case "task":{let p=a.description;p&&d.push({type:"content",content:{type:"text",text:p}});break}}return {kind:o,content:d,locations:u}}}var Xl=new Set(["agent_start","turn_start","turn_end","agent_settled"]);function nn(t){let e,n,r=false,i=false,s,l=false,c=new Map,a=new Set,o=new Set,d=we(t.harness);return function(y){let S;try{S=JSON.parse(y);}catch{return null}if(!ys(S))return null;let C=I(S,"type");if(!C||Xl.has(C))return null;switch(C){case "session":{let x=I(S,"id");return x&&(e=x),null}case "agent_end":return S.willRetry===false&&s!==void 0&&!l?(l=true,[v({sessionUpdate:"error",message:s,fatal:true})]):null;case "message_start":return u(V(S.message));case "message_update":return p(S);case "message_end":return g(V(S.message));case "tool_execution_start":return f(S);case "tool_execution_update":return h(S);case "tool_execution_end":return m(S);case "auto_retry_start":return [v(A(C,S))];case "auto_retry_end":return S.success===false?l?null:(l=true,[v({sessionUpdate:"error",message:R([S.finalError,s],S),fatal:true})]):[v(A(C,S))];default:return t.knownEvents.has(C)||d("event type",C),[v(A(C,S))]}};function u(k){if(!k)return null;let y=I(k,"role");if(y==="assistant")return n=I(k,"model")||void 0,r=false,i=false,s=void 0,l=false,null;if(y==="user"){let S=gr(k.content);return S?[v({sessionUpdate:"user_message_chunk",content:{type:"text",text:S}},tn(k))]:null}if(y==="custom"){if(I(k,"customType")!=="agent_message")return null;let S=gr(k.content);if(!S)return null;let C=V(k.details),x={customType:"agent_message"};return C?.from!==void 0&&(x.from=C.from),[v({sessionUpdate:"user_message_chunk",content:{type:"text",text:S}},{...tn(k),extra:x})]}return y==="system"||y==="toolResult"?null:[v(A("message_start",{message:k}))]}function p(k){let y=V(k.assistantMessageEvent);if(!y)return null;let S=I(y,"delta");if(!S)return null;let C=V(k.message),x=C?tn(C):{};x.model===void 0&&n&&(x.model=n);let b=I(y,"type");return b==="text_delta"?(r=true,[v({sessionUpdate:"agent_message_chunk",content:{type:"text",text:S}},x)]):b==="thinking_delta"?(i=true,[v({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:S}},x)]):null}function g(k){if(!k||I(k,"role")!=="assistant")return null;let y=tn(k),S=[],C=Array.isArray(k.content)?k.content:[];for(let P of C){let L=V(P);if(!L)continue;let se=I(L,"type");if(se==="thinking"&&!i){let z=I(L,"thinking");z&&S.push(v({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:z}},y));}else if(se==="text"&&!r){let z=I(L,"text");z&&S.push(v({sessionUpdate:"agent_message_chunk",content:{type:"text",text:z}},y));}else if(se==="toolCall"){let z=I(L,"id"),Ve=I(L,"name");if(!z||!Ve)continue;S.push(v(w(z,Ve,V(L.arguments)??{}),y));}}let x=I(k,"stopReason");(x==="error"||x==="aborted")&&(s=R([k.errorMessage,x],k),S.push(v({sessionUpdate:"error",message:s,fatal:false},y)));let b=ec(k.usage),E=b!==null&&(x==="error"||x==="aborted")&&tc(b);return b&&!E&&S.push(v({sessionUpdate:"usage",scope:"call",usage:b},y)),S.length>0?S:null}function f(k){let y=I(k,"toolCallId"),S=I(k,"toolName");return !y||!S||a.has(y)?null:[v(w(y,S,V(k.args)??{}))]}function h(k){let y=I(k,"toolCallId");return !y||o.has(y)?null:(o.add(y),[v({sessionUpdate:"tool_call_update",toolCallId:y,status:"in_progress"})])}function m(k){let y=I(k,"toolCallId");if(!y)return null;let S=I(k,"toolName")||c.get(y)||"",C=V(k.result),x=C?V(C.details):null,b=k.isError===true,E=b||t.toolFailed(S,x,b),P=C?gr(C.content):"";return c.delete(y),a.delete(y),o.delete(y),[v({sessionUpdate:"tool_call_update",toolCallId:y,status:E?"failed":"completed",content:P?[{type:"content",content:{type:"text",text:P}}]:[],...C!==null?{rawOutput:C}:{}})]}function w(k,y,S){c.set(k,y),a.add(k);let C=t.describeTool(y,S);return {sessionUpdate:"tool_call",toolCallId:k,title:C.title,toolName:y,kind:C.kind,status:"pending",rawInput:S,content:C.content,locations:C.locations}}function v(k,y={}){return {sessionId:e,update:k,...y.timestamp!==void 0?{timestamp:y.timestamp}:{},...y.model!==void 0?{model:y.model}:{},...y.messageId!==void 0?{messageId:y.messageId}:{},...y.extra!==void 0?{extra:y.extra}:{}}}}function tn(t){let e={},n=ee(t.timestamp);n!==void 0&&(e.timestamp=n);let r=I(t,"model");r&&(e.model=r);let i=I(t,"responseId");i&&(e.messageId=i);let s={};for(let l of ["stopReason","rawStopReason","stopReasonRaw","responseModel","provider","api"]){let c=t[l];typeof c=="string"&&c.length>0&&(s[l]=c);}return Object.keys(s).length>0&&(e.extra=s),e}function ec(t){let e=V(t);if(!e)return null;let n=Xe(e.input),r=Xe(e.output),i=Xe(e.cacheRead),s=Xe(e.cacheWrite);if(n===void 0&&r===void 0&&i===void 0&&s===void 0)return null;let l={};(n!==void 0||i!==void 0||s!==void 0)&&(l.promptTokens=(n??0)+(i??0)+(s??0)),r!==void 0&&(l.completionTokens=r),i!==void 0&&(l.cachedTokens=i);let c=Xe(V(e.cost)?.total);c!==void 0&&c>0&&(l.costUsd=c);let a={};for(let[o,d]of Object.entries(e))o==="input"||o==="output"||o==="cost"||d!=null&&(a[o]=d);return Object.keys(a).length>0&&(l.extra=a),l}function tc(t){return !t.promptTokens&&!t.completionTokens&&!t.cachedTokens&&!t.costUsd}function gr(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{let n=V(e);return n&&n.type==="text"?I(n,"text"):""}).filter(Boolean).join(""):""}function ys(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function V(t){return ys(t)?t:null}function I(t,e){let n=t[e];return typeof n=="string"?n:""}function Xe(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}var nc={read:"read",write:"edit",edit:"edit",bash:"execute",grep:"search",find:"search",ls:"search",mcp:"other"},rc=new Set(["entry_appended","queue_update","session_info_changed","thinking_level_changed","compaction_start","compaction_end","summarization_retry_scheduled","summarization_retry_attempt_start","summarization_retry_finished"]);function rn(){return nn({harness:"pi",describeTool:sc,toolFailed:ic,knownEvents:rc})}function ic(t,e,n){return n?true:t==="mcp"&&e!==null&&typeof e.error=="string"&&e.error.length>0}function sc(t,e){let n=nc[t]??"other",r=[],i=[],s=I(e,"path");switch(t){case "read":{if(s){let l=e.offset;r.push({path:s,line:typeof l=="number"&&Number.isFinite(l)?Math.max(0,l-1):void 0});}return {title:s?`read ${s}`:"read",kind:n,locations:r,content:i}}case "write":return s&&(r.push({path:s}),typeof e.content=="string"&&i.push({type:"diff",path:s,oldText:null,newText:e.content})),{title:s?`write ${s}`:"write",kind:n,locations:r,content:i};case "edit":return s&&(r.push({path:s}),(typeof e.oldText=="string"||typeof e.newText=="string")&&i.push({type:"diff",path:s,oldText:typeof e.oldText=="string"?e.oldText:"",newText:typeof e.newText=="string"?e.newText:""})),{title:s?`edit ${s}`:"edit",kind:n,locations:r,content:i};case "bash":{let l=I(e,"command");return l&&i.push({type:"content",content:{type:"text",text:l}}),{title:l?`bash ${l}`:"bash",kind:n,locations:r,content:i}}case "grep":case "find":case "ls":{s&&r.push({path:s});let l=I(e,"pattern");return {title:l?`${t} ${l}`:s?`${t} ${s}`:t,kind:n,locations:r,content:i}}case "mcp":{let l=I(e,"tool"),c=I(e,"search"),a=I(e,"server"),o=l||(c?`search ${c}`:a||""),d=V(e.args);return d&&i.push({type:"content",content:{type:"text",text:JSON.stringify(d)}}),{title:o?`mcp ${o}`:"mcp",kind:n,locations:r,content:i}}default:return {title:t,kind:n,locations:r,content:i}}}var oc=new Set(["session_action_update","compaction_start","compaction_end","session_info_changed","thinking_level_changed","service_tier_changed","auth_stale","ipython_sent_agent_message","rlm_child_update","rlm_progress_note","recap_update","goal_update","bash_start","bash_output","bash_end","refine_complete","refine_failed"]);function sn(){return nn({harness:"prime-agent",describeTool:lc,toolFailed:ac,knownEvents:oc})}function ac(t,e,n){return n?true:e!==null&&e.status==="error"}function lc(t,e){let n=[];if(t==="ipython"){let r=I(e,"code");r&&n.push({type:"content",content:{type:"text",text:r}});let i=r.split(`
11
+ `).find(s=>s.trim().length>0)?.trim()??"";return {title:i?`ipython ${i}`:"ipython",kind:"execute",locations:[],content:n}}return {title:t,kind:"other",locations:[],content:n}}var cc={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 on(){let t=new Map,e=new Map;return function(u){let p;try{p=JSON.parse(u);}catch{return null}if(!p||typeof p!="object")return null;let g=p;if("_meta"in g||"_prompt"in g)return null;let f=g.session_id||void 0,h=[];switch(g.type){case "assistant":{let C=g;h.push(...r(C));let x=n(C.message?.usage);x&&h.push({sessionUpdate:"usage",scope:"call",usage:x});break}case "stream_event":{h.push(...i(g));break}case "user":{h.push(...s(g));break}case "system":return null;case "result":{let C=n(g.usage);if(C&&h.push({sessionUpdate:"usage",scope:"run",usage:C}),g.is_error!==true)break;let x=g.error;h.push({sessionUpdate:"error",message:R([x?.message,g.subtype],g.error??g),fatal:true});break}default:return null}if(h.length===0)return null;let m=g.message,w=typeof m?.model=="string"&&m.model?m.model:void 0,v=typeof m?.id=="string"&&m.id?m.id:void 0,k=typeof g.parent_tool_use_id=="string"&&g.parent_tool_use_id?g.parent_tool_use_id:void 0,y=m?.stop_reason,S=y!=null?{stop_reason:y}:void 0;return h.map(C=>({sessionId:f,update:C,...w!==void 0?{model:w}:{},...v!==void 0?{messageId:v}:{},...k!==void 0?{parentToolCallId:k}:{},...S!==void 0?{extra:S}:{}}))};function n(d){if(!d||typeof d!="object"||Array.isArray(d))return null;let u=d,p=v=>typeof v=="number"&&Number.isFinite(v)?v:void 0,g={},f=p(u.input_tokens),h=p(u.output_tokens),m=p(u.cache_read_input_tokens);f!==void 0&&(g.promptTokens=f),h!==void 0&&(g.completionTokens=h),m!==void 0&&(g.cachedTokens=m);let w={};for(let[v,k]of Object.entries(u))v==="input_tokens"||v==="output_tokens"||v==="cache_read_input_tokens"||k!=null&&(w[v]=k);return Object.keys(w).length>0&&(g.extra=w),g}function r(d){let u=[],p=d.message?.content;if(!Array.isArray(p))return u;for(let g of p){let f=l(g);u.push(...f);}return u}function i(d){let u=[],p=d.event;if(!p)return u;switch(p.type){case "content_block_start":{let g=p.index??0,f=p.content_block;f&&(t.set(g,f),f.type==="tool_use"&&e.set(g,""));break}case "content_block_delta":{let g=p.index??0,f=p.delta,h=t.get(g);if(f?.type==="text_delta"&&f.text)u.push({sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.text}});else if(f?.type==="thinking_delta"&&f.thinking)u.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:f.thinking}});else if(f?.type==="input_json_delta"&&f.partial_json&&h?.type==="tool_use"){let m=e.get(g)||"";e.set(g,m+f.partial_json);}break}case "content_block_stop":{let g=p.index??0,f=t.get(g);if(f&&!(f.type==="text"&&f.text)){if(!(f.type==="thinking"&&f.thinking)){if(f.type==="tool_use"){let h=f,m=e.get(g)||"";e.delete(g);let w=h.input;if(m)try{w=JSON.parse(m);}catch{}let v={...h,input:w},k=c(v);k&&u.push(k);}else if(f.type==="tool_result"){let h=a(f);h&&u.push(h);}}}t.delete(g);break}}return u}function s(d){let u=d.message?.content,p=[];if(typeof u=="string")return p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:u}}),p;if(Array.isArray(u)){for(let g of u)if(g.type==="text")p.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:g.text}});else if(g.type==="tool_result"){let f=a(g);f&&p.push(f);}}return p}function l(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 u=c(d);return u?[u]:[]}case "tool_result":{let u=a(d);return u?[u]:[]}}}function c(d){let u=d.id,p=d.name,g=d.input;if(p==="TodoWrite"&&Array.isArray(g?.todos))return {sessionUpdate:"plan",entries:g.todos.map(v=>({content:v.content,status:v.status||"pending",priority:"medium"}))};let{title:f,kind:h,content:m,locations:w}=o(p,g||{});return {sessionUpdate:"tool_call",toolCallId:u,title:f,toolName:p,kind:h,status:"pending",rawInput:g,content:m,locations:w}}function a(d){let u=d.tool_use_id,p=d.is_error??false,g=d.content,f=[];if(typeof g=="string"&&g.length>0)f.push({type:"content",content:{type:"text",text:g}});else if(Array.isArray(g))for(let h of g)h.type==="text"&&f.push({type:"content",content:{type:"text",text:h.text}});return {sessionUpdate:"tool_call_update",toolCallId:u,status:p?"failed":"completed",content:f}}function o(d,u){let p=cc[d]||"other",g=[],f=[],h=d;switch(d){case "Read":case "read_file":h=`Read ${u.file_path||u.absolute_path||"file"}`,(u.file_path||u.absolute_path)&&f.push({path:u.file_path||u.absolute_path});break;case "Write":case "write_file":h=`Write ${u.file_path||"file"}`,u.file_path&&(f.push({path:u.file_path}),g.push({type:"diff",path:u.file_path,oldText:null,newText:u.content||""}));break;case "Edit":case "edit_file":h=`Edit ${u.file_path||"file"}`,u.file_path&&f.push({path:u.file_path});break;case "Bash":case "shell":case "run_shell_command":h=u.command?`\`${u.command}\``:"Run command",u.description&&g.push({type:"content",content:{type:"text",text:u.description}});break;case "WebFetch":h=u.url?`Fetch ${u.url}`:"Web fetch";break;case "WebSearch":case "brave_web_search":h=u.query?`"${u.query}"`:"Web search";break;case "Glob":h=`Find ${u.pattern||"files"}`,u.path&&f.push({path:u.path});break;case "Grep":h=`grep "${u.pattern||""}"`;break;case "LS":case "list_directory":h=`List ${u.path||"directory"}`,u.path&&f.push({path:u.path});break;case "Task":h=u.description||"Subagent task";break;case "TodoWrite":h="Update todos";break;case "ExitPlanMode":h="Exit plan mode";break;default:h=d;}return {title:h,kind:p,content:g,locations:f}}}function ws(t){return on()(t)}var dc={read:"read",write:"edit",edit:"edit",multiedit:"edit",notebookedit:"edit",bash:"execute",glob:"search",grep:"search",ls:"search",webfetch:"fetch",websearch:"fetch",skill:"execute",agent:"think",task:"think",todowrite:"other"},uc=new Set(["session.titleUpdated","session.resumed","checkpoint.created","streamRecovery.updated"]),pc=new Set(["start","finish","text_start","text_end","reasoning_start","reasoning_end","tool_input_start","tool_input_delta","tool_input_end"]);function ln(){let t,e=new Map,n=new Map,r=new Map,i=new Map,s=new Map,l,c=false,a=we("zcode");return function(u){let p;try{p=JSON.parse(u);}catch{return null}if(!Ae(p))return null;let g=T(p,"type");if(!g)return null;let f=T(p,"sessionId")||void 0;t===void 0&&f&&(t=f);let h=f??t,m=h!==void 0&&h!==t,w=[],v=h?r.get(h):void 0,k={};if(g==="result"){let x=fr(p.usage);x&&!c&&(c=true,w.push({sessionUpdate:"usage",scope:"run",usage:x}));let b=T(p,"response"),E=l?i.get(l)??"":"";return b&&b!==E&&w.push(hr(b)),v=l,o(w,h,void 0,v,k,m?h:void 0)}let y=ge(p.payload)??{},S=ee(p.timestamp);switch(g){case "turn.started":{let x=T(y,"input");x&&w.push({sessionUpdate:"user_message_chunk",content:{type:"text",text:x}}),v=void 0;break}case "session.updated":{let x=T(y,"type");if(x){switch(x){case "model_request_started":{let b=T(y,"modelId");b&&h&&n.set(h,b),w.push(A(g,p));break}case "model_request_completed":{let b=fr(y.usage);b&&w.push({sessionUpdate:"usage",scope:"call",usage:b});let E=T(y,"finishReason");E&&(k.finishReason=E);break}case "model_request_failed":{w.push({sessionUpdate:"error",message:R([y.message,y.providerErrorMessage,y.errorCode],y),fatal:false}),yr(y,k,["errorCode","statusCode","retryable","attempt","maxAttempts"]);break}case "model_retry_scheduled":w.push(A(g,p));break;default:a("event type",`session.updated/${x}`),w.push(A(g,p));}break}if(typeof y.modelId=="string"&&typeof y.providerId=="string"&&"messageCount"in y){h&&n.set(h,y.modelId),w.push(A(g,p));break}if(Ae(y.usage)&&"stopReason"in y){let b=T(y,"content"),E=v?i.get(v)??"":"";b&&b!==E&&(w.push(hr(b)),v&&i.set(v,b));let P=T(y,"stopReason");P&&(k.stopReason=P);break}if(typeof y.toolCallId=="string"&&typeof y.status=="string"&&!("childSessionId"in y))break;if(Ae(y.modelSelection)){let b=T(y.modelSelection,"modelId");b&&h&&n.set(h,b),w.push(A(g,p));break}if(typeof y.childSessionId=="string"&&typeof y.parentToolCallId=="string"){e.set(y.childSessionId,y.parentToolCallId),w.push(A(g,p));break}if(Ae(y.error)&&"retryable"in y){w.push({sessionUpdate:"error",message:R([ge(y.error)?.message],y),fatal:false});break}a("event type",`session.updated/{${Object.keys(y).sort().join(",")}}`),w.push(A(g,p));break}case "model.streaming":{let x=T(y,"kind"),b=T(y,"assistantMessageId");switch(b&&h&&(r.set(h,b),m||(l=b),v=b),x){case "text_delta":{let E=T(y,"delta");E&&(w.push(hr(E)),v&&i.set(v,(i.get(v)??"")+E));break}case "reasoning_delta":{let E=T(y,"delta");E&&w.push({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:E}});break}case "tool_call":{let E=vs(s,T(y,"toolCallId"),T(y,"toolName"),ge(y.input)??{});E&&w.push(E);break}case "error":{w.push({sessionUpdate:"error",message:R([y.message,y.delta],y),fatal:false});break}default:pc.has(x)||(a("event type",`model.streaming/${x||"?"}`),w.push(A(g,p)));}break}case "tool.updated":{let x=T(y,"kind"),b=T(y,"toolCallId"),E=T(y,"assistantMessageId");switch(E&&(v=E),x){case "scheduled":{if(s.get(b)?.emitted)break;let P=vs(s,b,T(y,"toolName"),ge(y.input)??{},fc(y.display));P&&w.push(P);break}case "started":{if(!b)break;w.push({sessionUpdate:"tool_call_update",toolCallId:b,status:"in_progress",title:mr(s.get(b))||T(y,"toolName")||void 0});break}case "progress":{if(!b)break;let P=T(y,"outputPreview")||T(y,"stdoutTail")||T(y,"stderrTail");w.push({sessionUpdate:"tool_call_update",toolCallId:b,status:"in_progress",content:P?an(P):void 0});break}case "result":{if(!b)break;let P=ge(y.result)??{};w.push({sessionUpdate:"tool_call_update",toolCallId:b,status:P.success===false?"failed":"completed",title:mr(s.get(b))||void 0,content:an(P.content),rawOutput:y.result}),s.delete(b);break}case "error":{if(!b)break;let P=ge(y.error);w.push({sessionUpdate:"tool_call_update",toolCallId:b,status:"failed",title:mr(s.get(b))||void 0,content:an(R([P?.message,P?.code],y.error??y)),rawOutput:y.error}),s.delete(b);break}case "batch":break;default:a("event type",`tool.updated/${x||"?"}`),w.push(A(g,p));}break}case "turn.completed":{let x=T(y,"resultType");if(x&&x!=="success"&&(w.push({sessionUpdate:"error",message:R([x],y),fatal:true}),k.resultType=x,!m)){let b=fr(y.usage);b&&!c&&(c=true,w.push({sessionUpdate:"usage",scope:"run",usage:b}));}break}case "turn.failed":{let x=ge(y.error)??{};w.push({sessionUpdate:"error",message:R([x.message,x.detail,x.code],y),fatal:true}),yr(x,k,["code","type"]),yr(y,k,["turnPhase"]);break}default:uc.has(g)||a("event type",g),w.push(A(g,p));}let C=m&&h?e.get(h):void 0;return o(w,h,S,v,k,m?h:void 0,C)};function o(d,u,p,g,f,h,m){if(d.length===0)return null;let w=u!==void 0?n.get(u):void 0;return h&&(f.childSessionId=h),d.map(v=>({sessionId:t??u,update:v,...p!==void 0?{timestamp:p}:{},...w!==void 0?{model:w}:{},...g!==void 0?{messageId:g}:{},...m!==void 0?{parentToolCallId:m}:{},...Object.keys(f).length>0?{extra:{...f}}:{}}))}}function fr(t){if(!Ae(t))return null;let e=wr(t.inputTokens),n=wr(t.outputTokens),r=wr(t.cacheReadTokens),i={};e!==void 0&&(i.promptTokens=e),n!==void 0&&(i.completionTokens=n),r!==void 0&&(i.cachedTokens=r);let s={};for(let[l,c]of Object.entries(t))l==="inputTokens"||l==="outputTokens"||l==="cacheReadTokens"||c!=null&&(s[l]=c);return Object.keys(s).length>0&&(i.extra=s),Object.keys(i).length>0?i:null}function vs(t,e,n,r,i){if(!e)return null;let s=t.get(e);if(s?.emitted)return null;let l=n||s?.name||"Tool",c=i??gc(l);if(t.set(e,{name:l,input:r,emitted:true,title:c}),ks(l)==="todowrite"){let p=mc(r);if(p)return p}let{title:a,kind:o,content:d,locations:u}=hc(l,r);return {sessionUpdate:"tool_call",toolCallId:e,title:c??a,toolName:l,kind:o,status:"pending",rawInput:r,content:d,locations:u}}function gc(t){if(!t.startsWith("mcp__"))return;let e=t.slice(5),n=e.indexOf("__");return n>0&&n+2<e.length?`${e.slice(0,n)} ${e.slice(n+2)} (MCP)`:void 0}function fc(t){let e=ge(t);if(e?.kind!=="mcp_tool")return;let n=T(e,"serverName"),r=T(e,"toolName");return n&&r?`${n} ${r} (MCP)`:void 0}function mr(t){return t?.title??t?.name??""}function mc(t){let e=t.todos;if(!Array.isArray(e))return null;let n=e.flatMap(r=>{let i=ge(r);if(!i)return [];let s=T(i,"content"),l=wc(T(i,"status")),c=vc(T(i,"priority"));return s?[{content:s,status:l,priority:c}]:[]});return n.length>0?{sessionUpdate:"plan",entries:n}:null}function hc(t,e){let n=dc[ks(t)]||"other",r=T(e,"file_path")||T(e,"path")||T(e,"notebook_path"),i=T(e,"command"),s=T(e,"url"),l=T(e,"skill"),c=T(e,"subagent_type"),a=r||i||s||l||c;return {title:a?`${t} ${a}`:t,kind:n,content:Object.keys(e).length>0?an(e):[],locations:r?[{path:r}]:[]}}function hr(t){return {sessionUpdate:"agent_message_chunk",content:{type:"text",text:t}}}function yr(t,e,n){for(let r of n){let i=t[r];i!=null&&(e[r]=i);}}function an(t){let e=yc(t);return e?[{type:"content",content:{type:"text",text:e}}]:[]}function yc(t){if(typeof t=="string")return t;if(t==null)return "";try{return JSON.stringify(t)}catch{return String(t)}}function wr(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Ae(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ge(t){return Ae(t)?t:null}function T(t,e){let n=t[e];return typeof n=="string"?n:""}function ks(t){return t.replace(/[-_\s]/g,"").toLowerCase()}function wc(t){return t==="in_progress"||t==="completed"?t:"pending"}function vc(t){return t==="high"||t==="low"?t:"medium"}function xe(t){switch(t){case "claude":return qt();case "codex":return Yt();case "gemini":return en();case "qwen":return on();case "kimi":return ur();case "opencode":return pr();case "droid":return Zt();case "pi":return rn();case "prime-agent":return sn();case "dsh":return Xt();case "zcode":return ln();case "antigravity":return Wt();default:return ()=>null}}function kc(t,e){let n=e.trim();return n?xe(t)(n):null}function bc(t,e){let n=[],r=e.split(`
12
+ `),i=xe(t);for(let s of r){let l=s.trim();if(!l)continue;let c=i(l);c&&n.push(...c);}return n}var Pc=promisify(execFile),me="SKILL.md",Ic=join(homedir(),".cache","evolve","skills"),Cr=["skills","skills/.curated","skills/.experimental","skills/.system",".claude/skills"],Oc=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)(?:@(.+))?$/,Ac=/^[0-9a-f]{40}$/,kr=2e3,br=64*1024*1024,ie=class extends Error{constructor(e){super(e),this.name="SkillRefError";}},Q=class extends Error{constructor(e){super(e),this.name="SkillResolveError";}};function Mc(t){return t==="~"?homedir():t.startsWith("~/")?join(homedir(),t.slice(2)):t}function Uc(t){let e=t.indexOf("@");if(e===-1)return {base:t};let n=t.slice(e+1);if(!n)throw new ie(`Empty @ref in skill reference segment: ${JSON.stringify(t)}`);return {base:t.slice(0,e),gitRef:n}}var $c=/^[A-Za-z0-9._-]+$/;function dn(t,e,n){if(!$c.test(t))throw new ie(`Cannot parse skill reference ${JSON.stringify(n)}: ${e} ${JSON.stringify(t)} may only contain letters, digits, ".", "_" and "-".`);return t}function Er(t){let e=String(t??"").trim();if(!e)throw new ie("Skill reference cannot be empty.");if(e.startsWith("upload:")){let s=e.slice(7);if(!s)throw new ie(`Skill upload reference ${JSON.stringify(e)} names no upload id.`);return {kind:"upload",id:s,raw:e}}if(e.startsWith("name:")){let s=e.slice(5);if(!s)throw new ie(`Skill name reference ${JSON.stringify(e)} names no skill.`);return dn(s,"skill name",e),{kind:"name",name:s,raw:e}}if(e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~"))return {kind:"local",path:Mc(e),raw:e};let n=e.match(/^(?:https?:\/\/)?(?:www\.)?skills\.sh\/(.+)$/);if(n){let l=n[1].replace(/\/+$/,"").split("/").filter(Boolean);if(l.length<2||l.length>3)throw new ie(`Cannot parse skill reference ${JSON.stringify(e)}: expected skills.sh/<owner>/<repo> or skills.sh/<owner>/<repo>/<skill>, optionally @ref.`);let{base:c,gitRef:a}=Uc(l[l.length-1]);l[l.length-1]=c;let[o,d,u]=l;return dn(o,"owner",e),dn(d,"repo",e),u!==void 0&&dn(u,"skill name",e),{kind:"git",host:"github.com",org:o,repo:d,...a?{gitRef:a}:{},...u?{skillName:u}:{},viaSkillsSh:true,raw:e}}let r=e.match(/^https?:\/\/([^/]+)\/(.+)$/);if(r){let s=r[1],l=r[2].replace(/\/+$/,"").split("/").filter(Boolean);if(l.length<2)throw new ie(`Git URL must have at least org/name in the path: ${JSON.stringify(e)}`);let c=l[0],a=l[1].replace(/\.git$/,""),o,d;return l.length>=4&&l[2]==="tree"&&(o=l[3],l.length>4&&(d=l.slice(4).join("/"))),{kind:"git",host:s,org:c,repo:a,...o?{gitRef:o}:{},...d?{subdir:d}:{},viaSkillsSh:false,raw:e}}let i=e.match(Oc);if(i)return {kind:"git",host:"github.com",org:i[1],repo:i[2],...i[3]?{gitRef:i[3]}:{},viaSkillsSh:false,raw:e};throw new ie(`Cannot parse skill reference ${JSON.stringify(e)}. Expected skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], an https git URL, or a local folder path (prefix relative paths with './').`)}function _r(t){return `https://${t.host}/${t.org}/${t.repo}.git`}function Me(t){return `https://${t.host}/${t.org}/${t.repo}`}async function fe(t,e){try{let{stdout:n}=await Pc("git",t,{cwd:e.cwd,timeout:e.timeoutMs,env:e.gitEnv??process.env,maxBuffer:16777216});return n}catch(n){let r=n,i=(r.stderr||r.message||"").trim();throw new Q(`git ${t[0]} failed${r.killed?" (timed out)":""}: ${i}`)}}async function Tr(t,e={}){if(t.gitRef&&Ac.test(t.gitRef))return t.gitRef;let n=t.gitRef??"HEAD",i=(await fe(["ls-remote",_r(t),n,`${n}^{}`],{timeoutMs:e.lsRemoteTimeoutMs??3e4,gitEnv:e.gitEnv})).trim().split(`
13
+ `).filter(c=>c.length>0).map(c=>{let[a,o]=c.split(" ");return {sha:a,name:o}});if(i.length===0||!i[0].sha)throw new Q(`No matching ref ${JSON.stringify(n)} found in ${Me(t)}`);let s=i[0];return (i.find(c=>c.name===`${s.name}^{}`)??s).sha}async function Dc(t,e={}){let n=Er(t);if(n.kind!=="git")return {ref:n.raw};let r=await Tr(n,e),i;return n.viaSkillsSh?i=`skills.sh/${n.org}/${n.repo}${n.skillName?`/${n.skillName}`:""}@${r}`:n.subdir!==void 0||n.raw.includes("://")?i=`https://${n.host}/${n.org}/${n.repo}/tree/${r}${n.subdir?`/${n.subdir}`:""}`:i=`${n.org}/${n.repo}@${r}`,{ref:i,gitUrl:Me(n),gitCommit:r}}async function Sr(t){let e=[],n=async i=>{let s=i===""?t:join(t,i),l=await readdir(s,{withFileTypes:true});for(let c of l){let a=i===""?c.name:`${i}/${c.name}`;c.isDirectory()?await n(a):c.isFile()&&e.push(a);}};await n(""),e.sort();let r=createHash("sha256");for(let i of e){let s=createHash("sha256").update(await readFile(join(t,i))).digest("hex");r.update(i),r.update("\0"),r.update(s),r.update("\0");}return `sha256:${r.digest("hex")}`}async function et(t){try{return (await stat(t)).isFile()}catch{return false}}async function Rr(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function xs(t,e){if(!await Rr(t))throw new Q(`Skill path does not exist or is not a directory: ${e}`);if(await et(join(t,me)))return [t];let r=(await readdir(t,{withFileTypes:true})).filter(l=>l.isDirectory()&&!l.name.startsWith(".")).map(l=>l.name).sort(),i=[],s=[];for(let l of r)await et(join(t,l,me))?s.push(join(t,l)):i.push(l);if(i.length>0)throw new Q(`Skill root ${e} contains child directories without ${me}: ${i.join(", ")}`);if(s.length===0)throw new Q(`Skill path ${e} must be a skill directory containing ${me}, or a root whose immediate child directories each contain ${me}.`);return s}async function Nc(t){let e=new Map;await et(join(t,me))&&e.set(basename(t),t);for(let n of Cr){let r=join(t,n);if(!await Rr(r))continue;let i=await readdir(r,{withFileTypes:true});for(let s of i.sort((l,c)=>l.name<c.name?-1:1)){if(!s.isDirectory()||s.name.startsWith("."))continue;let l=join(r,s.name);await et(join(l,me))&&e.set(s.name,l);}}return Array.from(e,([n,r])=>({dir:r,name:n}))}function Fc(t){return t.cacheDir??process.env.EVOLVE_SKILLS_CACHE??Ic}async function Lc(t,e,n){let r=join(Fc(n),t.host,t.org,t.repo,e),i=join(r,t.repo),s=join(r,".evolve-complete");if(await et(s)&&await Rr(i))return i;await mkdir(dirname(r),{recursive:true});let l=await mkdtemp(`${r}.tmp-`),c=join(l,t.repo),a=n.checkoutTimeoutMs??12e4,o={cwd:c,timeoutMs:a,gitEnv:n.gitEnv};try{await mkdir(c),await fe(["init","--quiet"],o),await fe(["remote","add","origin",_r(t)],o),t.subdir?(await fe(["sparse-checkout","init","--cone"],o),await fe(["sparse-checkout","set",t.subdir],o)):(await fe(["sparse-checkout","init","--cone"],o),await fe(["sparse-checkout","set",...Cr],o)),await fe(["fetch","--quiet","--depth=1","origin",e],o),await fe(["checkout","--quiet","FETCH_HEAD"],o),await rm(join(c,".git"),{recursive:!0,force:!0}),await writeFile(join(l,".evolve-complete"),""),await rm(r,{recursive:!0,force:!0});try{await rename(l,r);}catch{await rm(l,{recursive:!0,force:!0});}return i}catch(d){throw await rm(l,{recursive:true,force:true}),d}}async function Cs(t,e){let n=0,r=0,i=async s=>{let l=await readdir(s,{withFileTypes:true});for(let c of l){let a=join(s,c.name);if(c.isDirectory())await i(a);else if(c.isFile()&&(n+=1,r+=(await stat(a)).size,n>kr||r>br))throw new Q(`Skill ${e} exceeds the size ceiling (${kr} files / ${br} bytes) \u2014 a skill is instructions, not a dataset.`)}};await i(t);}async function Pr(t,e={}){let n=new Map;for(let r of t){let i=Er(r);if(i.kind==="upload")throw new Q(`Skill reference ${JSON.stringify(i.raw)} is a platform upload handle; only the hosted platform can resolve it. Use a skills.sh/git reference or a local folder here.`);if(i.kind==="name")throw new Q(`Skill reference ${JSON.stringify(i.raw)} is a platform skill name \u2014 a moving pointer only the hosted platform can resolve (server-side, at job create). Use a skills.sh/git reference or a local folder here.`);if(i.kind==="local"){let a=await xs(i.path,i.raw);for(let o of a)await Cs(o,i.raw),n.set(basename(o),{name:basename(o),dir:o,source:i.raw,digest:await Sr(o)});continue}let s=await Tr(i,e),l=await Lc(i,s,e),c;if(i.subdir)c=(await xs(join(l,i.subdir),`${i.raw} (${i.subdir})`)).map(o=>({dir:o,name:basename(o)}));else if(c=await Nc(l),c.length===0)throw new Q(`No skills found in ${Me(i)}@${s.slice(0,12)}: expected ${me} at the repo root or under ${Cr.join(", ")}.`);if(i.skillName){let a=c.filter(o=>o.name===i.skillName);if(a.length===0)throw new Q(`Skill ${JSON.stringify(i.skillName)} not found in ${Me(i)}@${s.slice(0,12)}. Available: ${c.map(o=>o.name).sort().join(", ")||"(none)"}`);c=a;}for(let{dir:a,name:o}of c)await Cs(a,i.raw),n.set(o,{name:o,dir:a,source:i.raw,gitUrl:Me(i),gitCommit:s,digest:await Sr(a)});}return Array.from(n.values()).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0)}function un(t){return `'${t.replace(/'/g,"'\\''")}'`}async function Ir(t,e,n){if(e.length===0)return;let{tarGzipDirectory:r}=await import('./tar-GVC4KE52.js');await t.files.makeDir(n);for(let i of e){let s=await r(i.dir),l=`${n}/.evolve-skill-${i.name}.tgz`,c=`${n}/${i.name}`;await t.files.write(l,s),await t.commands.run(`mkdir -p ${un(c)} && tar -xzf ${un(l)} -C ${un(c)} && rm -f ${un(l)}`,{timeoutMs:6e4});}}function ae(t){return t!==null&&typeof t=="object"&&"safeParse"in t&&typeof t.safeParse=="function"}function Ue(t){return JSON.stringify(Bc(t,{target:"jsonSchema7"}),null,2)}function $e(t){return JSON.stringify(t,null,2)}function Es(t,e=false){let n={};function r(i,s){for(let l of ce.readdirSync(i)){let c=le.join(i,l),a=s?`${s}/${l}`:l;ce.statSync(c).isDirectory()?e&&r(c,a):n[a]=ce.readFileSync(c);}}return r(t,""),n}function _s(t,e){let n=le.resolve(t),r=n.endsWith(le.sep)?n:n+le.sep;for(let[i,s]of Object.entries(e)){let l=le.resolve(n,i);if(!l.startsWith(r))throw new Error(`Unsafe file path escapes target directory: ${i}`);let c=le.dirname(l);ce.mkdirSync(c,{recursive:true});let a;s instanceof ArrayBuffer||s instanceof Uint8Array?a=Buffer.from(s):a=s,ce.writeFileSync(l,a);}}function Kc(t){return `e2b_${Buffer.from(t,"utf8").toString("hex")}`}var Ps=new WeakSet;function Or(t){return Ps.add(t),t}function De(t){return Ps.has(t)}function Ts(t,e){return new Error(`${h} is set but ${t} failed to load.
14
+ Try installing: ${e}`)}function Rs(t){return t.message?.includes("Cannot find module")||t.message?.includes("MODULE_NOT_FOUND")}function Ar(t,e){if(!e||e.timeoutMs===void 0&&e.resources===void 0)return t;let n=t.create.bind(t);return t.create=(r={})=>n({...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},...e.resources!==void 0?{resources:e.resources}:{},...r}),t}var jc={attempts:3,baseDelayMs:1e3,maxDelayMs:3e4};function Vc(t){if(!(t instanceof Error))return;let e=t,n=typeof e.status=="number"?e.status:e.statusCode;if(typeof n=="number"){if(n!==429&&n!==503)return;if(typeof e.retryAfterSec=="number")return {retryAfterSec:e.retryAfterSec};let r=e.headers,i=typeof r?.get=="function"?r.get("retry-after"):r?.["retry-after"];return {retryAfterSec:b$1(i)}}if(e.name==="RateLimitError")return {};if(e.name==="SandboxError"&&e.message.startsWith("503:"))return {}}function Mr(t){return c$1(t,Vc,jc)}async function tt(t,e$1="e2b",n){let r=t||process.env[h];if(!r)throw new Error(`${h} is required for Evolve-managed sandbox features`);if(!c.includes(e$1))throw new Error(`Unknown managed sandbox provider "${e$1}". Supported: ${c.join(", ")}`);if(e$1==="daytona")try{let{createDaytonaProvider:i}=await import('@evolvingmachines/daytona');return Ar(Or(i({apiKey:r,apiUrl:d("daytona"),managedToolboxUrl:e(),retryCreateRequest:Mr})),n)}catch(i){let s=i;throw Rs(s)?Ts("@evolvingmachines/daytona","npm install @evolvingmachines/daytona"):s}if(e$1==="modal"){let{ManagedModalProvider:i}=await import('./managed-modal-IXZBT4D5.js');return Ar(Or(new i({apiKey:r,baseUrl:d("modal"),retryCreateRequest:Mr})),n)}try{let{createE2BProvider:i}=await import('@evolvingmachines/e2b');return Ar(Or(i({apiKey:Kc(r),apiUrl:f(),retryCreateRequest:Mr})),n)}catch(i){let s=i;throw Rs(s)?Ts("@evolvingmachines/e2b","npm install @evolvingmachines/evolve"):s}}function Gc(t="e2b",e){let n=typeof e=="string"?{apiKey:e}:e??{},{apiKey:r,...i}=n;return tt(r,t,i)}async function fn(){let t=process.env[i];if(t)try{let{createE2BProvider:s}=await import('@evolvingmachines/e2b');return process.env.E2B_API_URL===f()&&delete process.env.E2B_API_URL,s({apiKey:t})}catch(s){let l=s;throw l.message?.includes("Cannot find module")||l.message?.includes("MODULE_NOT_FOUND")?new Error(`${i} is set but @evolvingmachines/e2b failed to load.
15
+ Try reinstalling: npm install @evolvingmachines/evolve`):l}let e=process.env[j$1];if(e)try{let{createDaytonaProvider:s}=await import('@evolvingmachines/daytona');return s({apiKey:e})}catch(s){let l=s;throw l.message?.includes("Cannot find module")||l.message?.includes("MODULE_NOT_FOUND")?new Error(`${j$1} is set but @evolvingmachines/daytona failed to load.
16
+ Try installing: npm install @evolvingmachines/daytona`):l}let n=process.env[k],r=process.env[l];if(n&&r)try{let{createModalProvider:s}=await import('@evolvingmachines/modal');return s({tokenId:n,tokenSecret:r})}catch(s){let l=s;throw l.message?.includes("Cannot find module")||l.message?.includes("MODULE_NOT_FOUND")?new Error(`${k} is set but @evolvingmachines/modal failed to load.
17
+ Try installing: npm install @evolvingmachines/modal`):l}let i$1=process.env[h];if(i$1)return tt(i$1);throw new Error(`No sandbox provider configured. Either:
13
18
  1. Set ${h} environment variable (recommended, get key at https://dashboard.evolvingmachines.ai)
14
19
  2. Set ${i} environment variable (direct E2B access, get key at https://e2b.dev)
15
20
  3. Set ${j$1} environment variable (direct Daytona access, get key at https://app.daytona.io)
16
21
  4. Set ${k} and ${l} environment variables (direct Modal access, get tokens at https://modal.com/settings/tokens)
17
- 5. Pass sandbox explicitly: .withSandbox(provider)`)}function Pa(t){return new Promise(e=>setTimeout(e,t))}async function B(t,e,n=0){let r=Ia(e),i=e?.onItemRetry,s=null,d=0,u=r.backoffMs;for(;d<r.maxAttempts;){if(d++,s=await t(d),!r.retryOn(s))return s;if(d>=r.maxAttempts)break;if(i){let l=s.error??"Unknown error";i(n,d,l);}await Pa(u),u*=r.backoffMultiplier;}return s}function Ia(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var li=`## FILESYSTEM INSTRUCTIONS:
22
+ 5. Pass sandbox explicitly: .withSandbox(provider)`)}function Jc(t){return new Promise(e=>setTimeout(e,t))}async function te(t,e,n=0){let r=zc(e),i=e?.onItemRetry,s=null,l=0,c=r.backoffMs;for(;l<r.maxAttempts;){if(l++,s=await t(l),!r.retryOn(s))return s;if(l>=r.maxAttempts)break;if(i){let a=s.error??"Unknown error";i(n,l,a);}await Jc(c),c*=r.backoffMultiplier;}return s}function zc(t){return {maxAttempts:t?.maxAttempts??3,backoffMs:t?.backoffMs??1e3,backoffMultiplier:t?.backoffMultiplier??2,retryOn:t?.retryOn??(e=>e.status==="error")}}var Is=`## FILESYSTEM INSTRUCTIONS:
18
23
 
19
24
  You are running in a sandbox environment.
20
25
 
@@ -47,7 +52,7 @@ Examples:
47
52
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
48
53
  - "Write a Python script" \u2192 \`output/parser.py\`
49
54
  - "Convert this to JSON" \u2192 \`output/data.json\`
50
- `;var ci=`## FILESYSTEM INSTRUCTIONS:
55
+ `;var Os=`## FILESYSTEM INSTRUCTIONS:
51
56
 
52
57
  You are running in a sandbox environment.
53
58
 
@@ -81,9 +86,9 @@ Examples:
81
86
  - "Generate a bar chart" \u2192 \`output/revenue_chart.png\`
82
87
  - "Write a Python script" \u2192 \`output/parser.py\`
83
88
  - "Convert this to JSON" \u2192 \`output/data.json\`
84
- `;var di=`## SYSTEM PROMPT
89
+ `;var As=`## SYSTEM PROMPT
85
90
 
86
- {{systemPrompt}}`;var pi=`## STRUCTURED OUTPUT
91
+ {{systemPrompt}}`;var Ms=`## STRUCTURED OUTPUT
87
92
 
88
93
  Your final result MUST be saved to \`output/result.json\` following this schema:
89
94
 
@@ -101,13 +106,13 @@ You are free to:
101
106
  But your final \`output/result.json\` MUST conform to the schema above.
102
107
 
103
108
  ### OUTPUT RESULTS (DELIVERABLES) MUST BE WRITTEN to \`output/result.json\` as files.
104
- ### Never just state results as text.`;var ui=`## BROWSER AUTOMATION
109
+ ### Never just state results as text.`;var Us=`## BROWSER AUTOMATION
105
110
 
106
111
  Actionbook is preconfigured for remote browser automation in this environment. When browser automation is needed, start sessions with \`actionbook browser start --session s1\`, then use normal Actionbook browser commands. Do not override the configured browser mode or browser endpoint unless the user explicitly asks.
107
- `;var gi=`## Browser Automation
112
+ `;var $s=`## Browser Automation
108
113
 
109
114
  The agent-browser CDP connection is already configured. Use normal \`agent-browser\` commands when browser automation is needed.
110
- `;var fi=`### 1. YOUR ROLE: BEST OF N JUDGE
115
+ `;var Ds=`### 1. YOUR ROLE: BEST OF N JUDGE
111
116
 
112
117
  You are a judge. {{candidateCount}} AI workers attempted the same task independently. Your job is to analyze their solution attempts and pick the best one based on the evaluation criteria below.
113
118
 
@@ -137,7 +142,7 @@ You must judge their work based on:
137
142
  5. Pick the best candidate (0-indexed)
138
143
 
139
144
  **IMPORTANT:** Be thorough. Do not skip steps. Your judgment must be evidence-based \u2014 cite specific files, outputs, or discrepancies to justify your decision.
140
- `;var mi=`### 1. YOUR ROLE: OUTPUT VERIFIER
145
+ `;var Ns=`### 1. YOUR ROLE: OUTPUT VERIFIER
141
146
 
142
147
  You are a quality verifier. An AI worker produced output for a task. Your job is to verify whether the output meets the specified quality criteria.
143
148
 
@@ -170,14 +175,14 @@ The output must satisfy:
170
175
  **IMPORTANT:** Be thorough and fair. Cite specific evidence. If the output generally achieves the goal with minor issues, consider passing. Only fail if there are significant problems that violate the criteria.
171
176
 
172
177
  If failing, provide specific, actionable feedback explaining what needs to be fixed.
173
- `;var hi=`### CONTEXT STRUCTURE
178
+ `;var Fs=`### CONTEXT STRUCTURE
174
179
 
175
180
  \`\`\`
176
181
  {{fileTree}}
177
182
  \`\`\`
178
183
 
179
184
  Examine all files within each item folder before producing your output.
180
- `;var yi="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var wi="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var vi=`{{originalPrompt}}
185
+ `;var Ls="Evaluate the candidates and select the best one. You MUST save your decision to the file `output/result.json`.\n";var Bs="Verify the worker output against the criteria. You MUST save your decision to the file `output/result.json`.\n";var Ks=`{{originalPrompt}}
181
186
 
182
187
  ## IMPORTANT: Previous Attempt Failed Verification
183
188
 
@@ -186,45 +191,45 @@ Your previous attempt did not pass quality verification. Please address this fee
186
191
  {{feedback}}
187
192
 
188
193
  Make sure your output addresses all the feedback points above.
189
- `;var bi=li,ki=ci,Si=di,xi=pi,An=ui,Ci=gi,Mn=fi,Ei=yi,$n=mi,Ti=wi,Ri=hi,Un=vi;function Z(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:n)}function Dn(t){let e=t.mode==="swe"?ki:bi,n=Z(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
194
+ `;var js=Is,Vs=Os,Gs=As,Js=Ms,Ur=Us,zs=$s,$r=Ds,Ws=Ls,Dr=Ns,Hs=Bs,qs=Fs,Nr=Ks;function he(t,e){return t.replace(/\{\{(\w+)\}\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(e,r)?e[r]:n)}function Fr(t){let e=t.mode==="swe"?Vs:js,n=he(e,{workingDir:t.workingDir}).trim();if(t.browserPrompt&&(n+=`
190
195
 
191
196
 
192
197
  ${t.browserPrompt.trim()}`),t.systemPrompt&&(n+=`
193
198
 
194
199
 
195
- ${Z(Si,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=F(t.schema)?ce(t.schema):de(t.schema);n+=`
200
+ ${he(Gs,{systemPrompt:t.systemPrompt}).trim()}`),t.schema){let r=ae(t.schema)?Ue(t.schema):$e(t.schema);n+=`
196
201
 
197
202
 
198
- ${Z(xi,{schema:r}).trim()}`;}return n}function xt(t){let e=[...new Set(Object.keys(t).map(l=>l.split("/")[0]))].sort((l,o)=>l==="worker_task"?-1:o==="worker_task"?1:l.localeCompare(o));if(!e.length)return `context/
199
- (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,i=Object.keys(t).some(l=>l.startsWith("worker_task/input/")),s=[];e.forEach((l,o)=>{let a=o===e.length-1,c=a?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",p=a?" ":"\u2502 ";if(l==="worker_task"){s.push({line:`${c}${l}/`,comment:"task given to worker"});let g=[];n&&g.push({name:"system_prompt.txt",comment:"worker system prompt"}),g.push({name:"user_prompt.txt",comment:"worker task prompt"}),r&&g.push({name:"schema.json",comment:"expected output schema"}),i&&g.push({name:"input/",comment:"worker input files"}),g.forEach((f,h)=>{let y=h===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";s.push({line:`${p}${y}${f.name}`,comment:f.comment});});}else if(l.startsWith("candidate_")){let g=l.replace("candidate_","");s.push({line:`${c}${l}/`,comment:`worker ${g} solution`});}else if(l==="worker_output")s.push({line:`${c}${l}/`,comment:"output to verify"});else if(l.startsWith("item_")){let g=l.replace("item_","");s.push({line:`${c}${l}/`,comment:`input ${g}`});}else s.push({line:`${c}${l}/`,comment:""});});let d=Math.max(...s.map(l=>l.line.length)),u=["context/"];for(let l of s)if(l.comment){let o=" ".repeat(d-l.line.length+3);u.push(`${l.line}${o}# ${l.comment}`);}else u.push(l.line);return u.join(`
200
- `)}var _i=join(homedir(),w),Wa=/^[A-Za-z0-9_-]{1,32}$/,Me=class{tag;timestamp;provider;agent;model;reasoningEffort;sandboxId;org;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;warnedKeys=new Set;warnedRefusals=new Set;localQueue=Promise.resolve();dirReady=mkdir(_i,{recursive:true}).catch(()=>{});eventBuffer=[];dashboardQueue=Promise.resolve();flushTimer;constructor(e){this.validateConfig(e),this.provider=e.provider,this.agent=e.agent,this.model=e.model,this.reasoningEffort=e.reasoningEffort,this.sandboxId=e.sandboxId,this.org=e.org,this.apiKey=e.apiKey,this.dashboardUrl=b(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${randomBytes(8).toString("hex")}`,this.timestamp=new Date().toISOString();let n=this.timestamp.replace(/[:.]/g,"-"),r=`${this.tag}_${this.provider}_${this.sandboxId}_${this.agent}_${n}.jsonl`;this.localFilePath=join(_i,r),this.parser=ne(e.agent);}getTag(){return this.tag}getTimestamp(){return this.timestamp}writePrompt(e){this.isClosed||this.write({_prompt:{text:e}});}writeEventParsed(e,n){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey&&n))for(let r of n)this.bufferForDashboard(r);}writeEvent(e){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey)){let n=this.parser(e);if(n)for(let r of n)this.bufferForDashboard(r);}}async flush(){await this.localQueue,await this.dashboardQueue,this.apiKey&&this.eventBuffer.length>0&&(this.flushDashboard(),await this.dashboardQueue);}async close(){this.isClosed||(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.write({_sessionEnd:{timestamp:new Date().toISOString()}}),this.isClosed=true,await this.flush());}writeLocalLine(e){this.metaWritten||this.writeMeta();let n=e.endsWith(`
203
+ ${he(Js,{schema:r}).trim()}`;}return n}function mn(t){let e=[...new Set(Object.keys(t).map(a=>a.split("/")[0]))].sort((a,o)=>a==="worker_task"?-1:o==="worker_task"?1:a.localeCompare(o));if(!e.length)return `context/
204
+ (empty)`;let n="worker_task/system_prompt.txt"in t,r="worker_task/schema.json"in t,i=Object.keys(t).some(a=>a.startsWith("worker_task/input/")),s=[];e.forEach((a,o)=>{let d=o===e.length-1,u=d?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",p=d?" ":"\u2502 ";if(a==="worker_task"){s.push({line:`${u}${a}/`,comment:"task given to worker"});let g=[];n&&g.push({name:"system_prompt.txt",comment:"worker system prompt"}),g.push({name:"user_prompt.txt",comment:"worker task prompt"}),r&&g.push({name:"schema.json",comment:"expected output schema"}),i&&g.push({name:"input/",comment:"worker input files"}),g.forEach((f,h)=>{let w=h===g.length-1?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ";s.push({line:`${p}${w}${f.name}`,comment:f.comment});});}else if(a.startsWith("candidate_")){let g=a.replace("candidate_","");s.push({line:`${u}${a}/`,comment:`worker ${g} solution`});}else if(a==="worker_output")s.push({line:`${u}${a}/`,comment:"output to verify"});else if(a.startsWith("item_")){let g=a.replace("item_","");s.push({line:`${u}${a}/`,comment:`input ${g}`});}else s.push({line:`${u}${a}/`,comment:""});});let l=Math.max(...s.map(a=>a.line.length)),c=["context/"];for(let a of s)if(a.comment){let o=" ".repeat(l-a.line.length+3);c.push(`${a.line}${o}# ${a.comment}`);}else c.push(a.line);return c.join(`
205
+ `)}var Ys=join(homedir(),w),cd=/^[A-Za-z0-9_-]{1,32}$/,nt=class{tag;timestamp;provider;agent;model;reasoningEffort;sandboxId;org;apiKey;dashboardUrl;localFilePath;observability;parser;isClosed=false;metaWritten=false;warnedKeys=new Set;warnedRefusals=new Set;localQueue=Promise.resolve();dirReady=mkdir(Ys,{recursive:true}).catch(()=>{});eventBuffer=[];dashboardQueue=Promise.resolve();flushTimer;constructor(e){this.validateConfig(e),this.provider=e.provider,this.agent=e.agent,this.model=e.model,this.reasoningEffort=e.reasoningEffort,this.sandboxId=e.sandboxId,this.org=e.org,this.apiKey=e.apiKey,this.dashboardUrl=b(),this.observability=e.observability,this.tag=e.tag||`${e.tagPrefix||"evolve"}-${randomBytes(8).toString("hex")}`,this.timestamp=new Date().toISOString();let n=this.timestamp.replace(/[:.]/g,"-"),r=`${this.tag}_${this.provider}_${this.sandboxId}_${this.agent}_${n}.jsonl`;this.localFilePath=join(Ys,r),this.parser=xe(e.agent);}getTag(){return this.tag}getTimestamp(){return this.timestamp}writePrompt(e){this.isClosed||this.write({_prompt:{text:e}});}writeEventParsed(e,n){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey&&n))for(let r of n)this.bufferForDashboard(r);}writeEvent(e){if(!this.isClosed&&(this.writeLocalLine(e),this.apiKey)){let n=this.parser(e);if(n)for(let r of n)this.bufferForDashboard(r);}}async flush(){await this.localQueue,await this.dashboardQueue,this.apiKey&&this.eventBuffer.length>0&&(this.flushDashboard(),await this.dashboardQueue);}async close(){this.isClosed||(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.write({_sessionEnd:{timestamp:new Date().toISOString()}}),this.isClosed=true,await this.flush());}writeLocalLine(e){this.metaWritten||this.writeMeta();let n=e.endsWith(`
201
206
  `)?e:e+`
202
207
  `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{});}bufferForDashboard(e){this.eventBuffer.push(e),this.scheduleFlush();}write(e){this.metaWritten||this.writeMeta();let n=JSON.stringify(e)+`
203
208
  `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&(this.eventBuffer.push(e),this.scheduleFlush());}writeMeta(){let e={_meta:{tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,sandbox_id:this.sandboxId,timestamp:this.timestamp,...this.annotations()}},n=JSON.stringify(e)+`
204
- `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&this.eventBuffer.push(e),this.metaWritten=true;}async appendLocal(e){try{await this.dirReady,await appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=y){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},z$2));}flushDashboard(){if(!this.apiKey||this.eventBuffer.length===0)return;let e=this.eventBuffer.splice(0);this.dashboardQueue=this.dashboardQueue.then(()=>this.sendToDashboard(e)).catch(()=>{});}async sendToDashboard(e){let n={tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,reasoningEffort:this.reasoningEffort!==void 0&&Wa.test(this.reasoningEffort)?this.reasoningEffort:null,sandboxId:this.sandboxId,...this.org?{org:this.org}:{},timestamp:this.timestamp,...this.annotations(),events:e};for(let r=1;r<=A;r++)try{let i=await fetch(`${this.dashboardUrl}/api/sessions/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(i.ok)return;if(i.status===429||i.status===401||i.status>=500){if(r===A){console.debug(`[SessionLogger] Dashboard ${i.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay(B$1*r);continue}await this.warnRefusal(i,e.length);return}catch(i){r===A?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",i),this.requeueEvents(e)):await this.delay(B$1*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}async warnRefusal(e,n){let r="unknown_error",i=e.statusText;try{let d=await e.json();if(d?.error&&typeof d.error=="object"){let u=d.error;typeof u.code=="string"&&(r=u.code),typeof u.message=="string"&&(i=u.message);}else typeof d?.error=="string"&&(i=d.error);}catch{}let s=`${e.status}:${r}`;this.warnedRefusals.has(s)||(this.warnedRefusals.add(s),console.warn(`[SessionLogger] Dashboard refused session "${this.tag}" (HTTP ${e.status} ${r}): ${i}. ${n} trace event(s) dropped; further refusals of this kind are not repeated.`));}validateConfig(e){let n=b();if(e.apiKey&&!n.startsWith("https://")&&!n.includes("localhost")&&!n.includes("127.0.0.1"))throw new Error("Dashboard URL must use HTTPS when API key is provided")}delay(e){return new Promise(n=>setTimeout(n,e))}annotations(){if(!this.observability)return {};let e={};for(let[n,r]of Object.entries(this.observability))if(r!==void 0){if(x.includes(n)){this.warnedKeys.has(n)||(this.warnedKeys.add(n),console.warn(`[SessionLogger] observability key "${n}" is reserved for session identity \u2014 ignoring it.`));continue}e[n]=r;}return e}};function $e(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Ue(t){let e=t||process.env.EVOLVE_API_KEY;if(!e)throw new Error("EVOLVE_API_KEY is required for managed integrations");return e}async function De(t){return await t.text().catch(()=>"")}function Bn(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function Ha(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 Ii(t){let e=await fetch(`${$e(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Bn(t.userId),apps:Ha(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 De(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 qa(t){let e=await fetch(`${$e(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Bn(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 De(e)}`);return await e.json()}async function Ya(t){let e=Array.from(new Set((t.userIds??[]).map(d=>Bn(d))));if(e.length===0)throw new Error("Integration accounts.list() requires at least one userId");let n=new URLSearchParams({userIds:e.join(",")});t.app&&n.set("app",t.app),t.statuses?.length&&n.set("statuses",t.statuses.join(","));let r={Authorization:`Bearer ${Ue(t.apiKey)}`,accept:"application/json"},i=await fetch(`${$e(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new Error(`Managed integration status failed (${i.status}): ${await De(i)}`);return ((await i.json()).accounts??[]).map(d=>({userId:String(d.userId??""),app:String(d.app??""),appName:typeof d.appName=="string"?d.appName:void 0,appIcon:typeof d.appIcon=="string"?d.appIcon:void 0,accountLabel:typeof d.accountLabel=="string"?d.accountLabel:void 0,status:String(d.status??""),accountId:typeof d.accountId=="string"?d.accountId:void 0,updatedAt:typeof d.updatedAt=="string"?d.updatedAt:void 0}))}async function Za(t){let e=await fetch(`${$e(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId,accountLabel:t.accountLabel}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account update failed (${e.status}): ${await De(e)}`);return await e.json()}async function Qa(t){let e=await fetch(`${$e(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${Ue(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({accountId:t.accountId}),signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new Error(`Managed integration account delete failed (${e.status}): ${await De(e)}`);return await e.json()}var Oi={auth:qa,accounts:{list:Ya,update:Za,delete:Qa}};promisify(exec);var Vn=promisify(execFile),$i=Symbol.for("evolve:awsSdkCache"),Ui=Symbol.for("evolve:s3ClientCache");var cl=3600,dl=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function pl(t){if(t.startsWith("s3://")){let i=t.slice(5),s=i.indexOf("/");return s===-1?{bucket:i,prefix:""}:{bucket:i.slice(0,s),prefix:i.slice(s+1).replace(/\/+$/,"")}}let e=new URL(t),n=e.hostname,r=e.pathname.split("/").filter(Boolean);if(n.includes(".s3.")&&n.endsWith(".amazonaws.com"))return {bucket:n.split(".s3.")[0],prefix:r.join("/")};if(r.length===0)throw new Error(`Invalid storage URL: no bucket in path. Expected https://endpoint/bucket/prefix, got ${t}`);return {bucket:r[0],prefix:r.slice(1).join("/"),endpoint:`${e.protocol}//${e.host}`}}function Et(t,e,n,r){if(!t?.url&&!t?.bucket){if(!e)throw new Error("Storage requires either a URL (BYOK mode) or gateway API key. Use .withStorage({ url: 's3://bucket/prefix' }) or configure EVOLVE_API_KEY for gateway mode.");return {bucket:"",prefix:"",region:t?.region||"us-east-1",mode:"gateway",gatewayUrl:n,gatewayApiKey:r}}let i=t?.bucket||"",s=t?.prefix||"",d=t?.endpoint;if(t?.url){let u=pl(t.url);i=i||u.bucket,s=s||u.prefix,d=d||u.endpoint;}if(!i)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:i,prefix:s,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:d,credentials:t?.credentials,mode:"byok"}}function 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 ul(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 Be(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function gl(t,e){let n=D(t),r=ul(e),i=n.checkpointDirs?.length?n.checkpointDirs.map(u=>Ln(u)):[Ln(n.mcpConfig.settingsDir)],s=[...dl.map(u=>`--exclude=${Be(u)}`),`--exclude=${Be(r+"/temp")}`,...(n.checkpointExcludes??[]).map(u=>`--exclude=${Be(Ln(u))}`)].join(" "),d=[Be(r+"/"),...i.map(u=>Be(u+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${s} ${d}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function he(){let t=globalThis[$i];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,i]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[$i]={s3:r,presigner:i},{s3:r,presigner:i}}catch{throw new Error("Storage requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner. Install: npm i @aws-sdk/client-s3 @aws-sdk/s3-request-presigner")}}async function Ne(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[Ui];if(r?.key===n)return r.client;let{s3:i}=await he(),s=new i.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[Ui]={client:s,key:n},s}async function Gi(t,e,n){let{s3:r,presigner:i}=await he(),s=await Ne(t),d=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return i.getSignedUrl(s,d,{expiresIn:cl})}async function Di(t,e){let{s3:n}=await he(),r=await Ne(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(i){let s=i?.name||i?.message||"";if(i?.$metadata?.httpStatusCode===404||s==="NotFound"||s==="NoSuchKey")return false;throw i}}async function Ji(t,e){let{s3:n}=await he(),s=await(await(await Ne(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!s)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(s)}async function fl(t,e,n){let{s3:r}=await he();await(await Ne(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function zi(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function Wi(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function ml(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function Hi(t,e,n,r){let i=await fetch(`${t.gatewayUrl}/api/checkpoints/presign`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify({tag:e,hash:n,action:r})});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway presign failed (${i.status}): ${s}`)}return i.json()}async function hl(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 yl(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 Gn(t,e,n,r,i){let s=new Date().toISOString(),d=gl(n,r),u=await t.commands.run(d,{timeoutMs:12e4});if(u.exitCode!==0)throw new Error(`Checkpoint tar failed: ${u.stderr}`);let l=u.stdout.trim().split(`
205
- `).pop()?.trim();if(!l||l.length!==64)throw new Error(`Invalid checkpoint hash: ${l}`);let o=await t.commands.run("stat -c '%s' /tmp/evolve-ckpt.tar.gz 2>/dev/null || stat -f '%z' /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4}),a=parseInt(o.stdout.trim(),10),c=Number.isNaN(a)?void 0:a,p;try{if(e.mode==="byok"){let g=zi(e,l);if(!await Di(e,g)){let m=await Gi(e,g,"put"),y=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${m}"`,{timeoutMs:3e5});if(y.exitCode!==0)throw new Error(`Checkpoint upload failed: ${y.stderr}`);if(!await Di(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}p=ml();let h={id:p,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment,sandboxId:t.sandboxId};await fl(e,Wi(e,p),h);}else {let g=await Hi(e,i.tag,l,"put");if(!g.alreadyExists){let h=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${g.url}"`,{timeoutMs:3e5});if(h.exitCode!==0)throw new Error(`Checkpoint upload failed: ${h.stderr}`)}p=(await hl(e,{tag:i.tag,hash:l,sizeBytes:c??0,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:p,hash:l,tag:i.tag,timestamp:s,sizeBytes:c,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment}}async function qi(t,e,n){let r=await zn(e,n),i=r.hash,s={agentType:r.agentType,workspaceMode:r.workspaceMode},d=await Xi(e,r),u=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${d}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(u.exitCode!==0)throw new Error(`Checkpoint download failed: ${u.stderr}`);let l=u.stdout.trim().split(`
206
- `).pop()?.trim();if(l!==i)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${i}, got ${l})`);let o=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(o.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${o.stderr}`);return s}function Yi(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||s,i=!t.url&&!t.bucket&&!!n;return Et(t,i,r,n)}async function Zi(t,e){let{s3:n}=await he(),r=await Ne(t),s=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,d=[],u;do{let p={Bucket:t.bucket,Prefix:s,...u&&{ContinuationToken:u}},g=await r.send(new n.ListObjectsV2Command(p));if(g.Contents)for(let f of g.Contents)f.Key?.endsWith(".json")&&f.LastModified&&d.push({key:f.Key,lastModified:f.LastModified});u=g.IsTruncated?g.NextContinuationToken:void 0;}while(u);if(d.length===0)return [];d.sort((p,g)=>{let f=g.lastModified.getTime()-p.lastModified.getTime();return f!==0?f:g.key<p.key?-1:g.key>p.key?1:0});let o=!!e?.tag?d:e?.limit?d.slice(0,e.limit):d,c=(await Promise.all(o.map(async p=>{try{return await Ji(t,p.key)}catch{return null}}))).filter(p=>p!==null);return e?.tag&&(c=c.filter(p=>p.tag===e.tag)),e?.limit&&c.length>e.limit&&(c=c.slice(0,e.limit)),c}async function Qi(t,e){let n=new URLSearchParams;e?.limit&&n.set("limit",String(e.limit)),e?.tag&&n.set("tag",e.tag);let r=`${t.gatewayUrl}/api/checkpoints${n.toString()?`?${n}`:""}`,i=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${i.status}): ${s}`)}return i.json()}function wl(t){return t&&t>0?Math.min(t,500):100}async function Jn(t,e){return t.mode==="byok"?(await Zi(t,{limit:1,tag:e?.tag}))[0]??null:(await Qi(t,{limit:1,tag:e?.tag}))[0]??null}async function zn(t,e){if(t.mode==="byok"){let n=Wi(t,e);try{return await Ji(t,n)}catch(r){throw vl(r)?new Error(`Checkpoint ${e} not found`):r}}else return await yl(t,e)}async function Bi(t,e,n){if(e==="latest"){let r=await Jn(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function Xi(t,e){if(t.mode==="byok")return Gi(t,zi(t,e.hash),"get");{let n=await Hi(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function es(t){return !(!t||isAbsolute(t)||t.startsWith("-")||normalize(t).startsWith("..")||t.includes("\0"))}function Li(t,e){let n=resolve(t,e),r=resolve(t),i=relative(r,n);if(i.startsWith("..")||isAbsolute(i))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function vl(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function Nn(t){let e=t.filter(n=>!es(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var ts=10*1024*1024,Ni=false;async function ns(){if(!Ni)try{await Vn("tar",["--version"]),Ni=!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 Fi(t,e){let n=await zn(t,e),r=await Xi(t,n),i=e.replace(/[^a-zA-Z0-9_-]/g,"_"),s=join(tmpdir(),`evolve-dl-${i}-${Date.now()}.tar.gz`),d=await fetch(r);if(!d.ok)throw new Error(`Checkpoint download failed (${d.status})`);if(!d.body)throw new Error("Checkpoint download returned empty body");let u=createHash("sha256"),l=createWriteStream(s);try{let a=d.body.getReader();await new Promise((c,p)=>{l.on("error",p),l.on("finish",c);async function g(){for(;;){let{done:f,value:h}=await a.read();if(f){l.end();break}u.update(h),l.write(h)||await new Promise(m=>l.once("drain",m));}}g().catch(p);});}catch(a){throw l.destroy(),await unlink(s).catch(()=>{}),a}let o=u.digest("hex");if(o!==n.hash)throw await unlink(s).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${o})`);return {tmpPath:s,metadata:n}}var jn=class extends Error{constructor(n){super(`Could not read a file path out of this 'tar -tvzf' line: ${JSON.stringify(n)}. The listing is produced by the tar on THIS machine, so an unrecognised layout means an unsupported tar variant (busybox, a very old BSD tar) rather than a corrupt archive. Refusing to return a partial file list.`);this.line=n;this.name="TarListingParseError";}},bl={LC_ALL:"C",LANG:"C"};function kl(t){let e=[],n=[],r=[];for(let i of t.trim().split(`
207
- `)){if(!i||i.startsWith("total "))continue;let s=i[0];if(s!=="-"&&s!=="d"&&s!=="l")throw new Error(`Archive contains unsupported entry type: "${s}"`);let d=i.match(/\d{2}:\d{2}\s+(.+)/)??i.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!d)throw new jn(i);let u=d[1];if(s==="l"){let l=u.indexOf(" -> ");l!==-1&&(u=u.slice(0,l)),e.push(u);}else s==="d"?n.push(u.replace(/\/$/,"")):r.push(u);}return {filePaths:r,dirPaths:n,symlinkPaths:[...new Set(e)]}}async function Ki(t){await ns();let{stdout:e}=await Vn("tar",["-tvzf",t],{maxBuffer:ts,env:{...process.env,...bl}}),{filePaths:n,dirPaths:r,symlinkPaths:i}=kl(e);return Nn(r),Nn(i),Nn(n)}async function Fn(t,e,n){await ns(),await mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await Vn("tar",r,{maxBuffer:ts});}function Sl(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 Wn(t,e){let n=Yi(t,e);return rs(n)}function xl(t){let e=Yi(t||{});return rs(e)}function rs(t){return {async listCheckpoints(e){let n=wl(e?.limit);return t.mode==="byok"?Zi(t,{limit:n,tag:e?.tag}):Qi(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return zn(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,i=n?.to||process.cwd(),s=await Bi(t,e),{tmpPath:d,metadata:u}=await Fi(t,s);try{if(r)return await mkdir(i,{recursive:!0}),await Ki(d),await Fn(d,i),i;{await mkdir(i,{recursive:!0});let l=join(i,`checkpoint-${u.id}.tar.gz`);return await copyFile(d,l),l}}finally{await unlink(d).catch(()=>{});}},async downloadFiles(e,n){let r=await Bi(t,e),{tmpPath:i}=await Fi(t,r),s;try{let d=await Ki(i),u;if(n?.files){let o=n.files.filter(c=>!es(c));if(o.length>0)throw new Error(`Unsafe file path requested: ${o[0]}`);let a=new Set(n.files);u=d.filter(c=>a.has(c));}else if(n?.glob){let o=n.glob.map(Sl);u=d.filter(a=>o.some(c=>c.test(a)));}else u=d;if(u.length===0)return {};s=join(tmpdir(),`evolve-extract-${Date.now()}`);try{await Fn(i,s,u);}catch(o){let a=o?.message??"";if(!a.includes("E2BIG")&&!a.includes("Argument list too long")&&!a.includes("ENAMETOOLONG"))throw o;await rm(s,{recursive:!0,force:!0}).catch(()=>{}),s=join(tmpdir(),`evolve-extract-${Date.now()}`),await Fn(i,s);}let l={};return await Promise.all(u.map(async o=>{Li(s,o),l[o]=await readFile(join(s,o));})),n?.to&&(await mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(l).map(async([o,a])=>{Li(n.to,o);let c=join(n.to,o);await mkdir(dirname(c),{recursive:!0}),await writeFile(c,a);}))),l}finally{s&&await rm(s,{recursive:true,force:true}).catch(()=>{}),await unlink(i).catch(()=>{});}}}}function Q(t){return `'${t.replace(/'/g,"'\\''")}'`}function Tt(t){return typeof t=="string"&&t.length>0}function ye(t,e,n){let r=t[e];if(!Tt(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function Cl(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
208
- ${n}`)}function El(t,e){switch(t){case "droid":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`droid plugin marketplace add ${Q(n)}`,`droid plugin install ${Q(r)} --scope user`]}case "claude":{let n=ye(e,"marketplace",t),r=ye(e,"plugin",t);return [`claude plugin marketplace add ${Q(n)} --scope user`,`claude plugin install ${Q(r)} --scope user`]}case "gemini":{let n=ye(e,"source",t),r=e,i=[`gemini extensions install ${Q(n)}`];return Tt(r.ref)&&i.push(`--ref ${Q(r.ref)}`),r.autoUpdate===true&&i.push("--auto-update"),r.preRelease===true&&i.push("--pre-release"),i.push("--consent"),r.skipSettings===true&&i.push("--skip-settings"),[i.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=ye(e,"marketplace",t),r=e,i=[`codex plugin marketplace add ${Q(n)}`];if(Tt(r.ref)&&i.push(`--ref ${Q(r.ref)}`),Array.isArray(r.sparse))for(let s of r.sparse){if(!Tt(s))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");i.push(`--sparse ${Q(s)}`);}return [i.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function is(t,e,n){if(n?.length)for(let r of n){let i=El(t,r);for(let s of i){let d=await e.commands.run(s,{timeoutMs:12e4});if(d.exitCode!==0)throw Cl(s,d)}}}var ls="/home/user/.agent-browser",ss=`${ls}/config.json`,cs="/home/user/.actionbook",Rl=`${cs}/config.toml`;function os(t){return t==="actionbook"||t==="agent-browser"}function _l(t){return t.remote===true}function as(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 ds(t){if(typeof t=="string"){if(t==="browser-use")return {provider:"browser-use",managed:false};if(os(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:as(t.profile)};if(os(t.provider))return {provider:t.provider,managed:_l(t),profile:as(t.profile)};throw new Error("Unsupported browser configuration")}function Hn(t,e){return t==="actionbook"?{envs:{},files:[{path:Rl,data:stringify({version:1,browser:{mode:"cloud",cdp_endpoint:e.cdpUrl}}).trimEnd()+`
209
- `}],directories:[cs]}:{envs:{AGENT_BROWSER_CONFIG:ss},files:[{path:ss,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
210
- `}],directories:[ls]}}function ps(t){return (t?.dashboardUrl||s).replace(/\/$/,"")}async function us(t){return await t.text().catch(()=>"")}async function gs(t,e,n={}){let r=await fetch(`${ps(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 us(r)}`);let i=await r.json();if(!i.id||!i.sessionId||!i.cdpUrl||!i.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:i.id,sessionId:i.sessionId,sessionTag:i.sessionTag,cdpUrl:i.cdpUrl,liveUrl:i.liveUrl,browserAuthGrantToken:i.browserAuthGrantToken}}async function fs(t,e){let n=await fetch(`${ps(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 us(n)}`)}var Ol="RSA-OAEP-256",qn="browser-login";function Al(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Ml(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 $l(t){return await t.text().catch(()=>"")}async function Fe(t,e,n={}){let r=await fetch(`${Al(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Ml(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 $l(r)}`);return await r.json()}async function Ul(t,e){let n=await Fe(t,"/api/browser-credentials/public-key"),r=publicEncrypt({key:n.publicKey,padding:constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:Ol,keyId:n.id,ciphertext:r.toString("base64url")}}var Rt=class{constructor(e={}){this.config=e;}toMetadata(e){let{account_label:n,...r}=e;return {...r,accountLabel:n}}async list(e={}){let n=new URLSearchParams;e.website&&n.set("website",e.website),e.limit!==void 0&&n.set("limit",String(e.limit)),e.offset!==void 0&&n.set("offset",String(e.offset));let r=n.toString()?`?${n.toString()}`:"",i=await Fe(this.config,`/api/browser-credentials${r}`);return {credentials:i.credentials.map(s=>this.toMetadata(s)),total:i.total,count:i.count,offset:i.offset,hasMore:i.has_more??i.offset+i.count<i.total}}async create(e){let n=await Ul(this.config,e.password),r=await Fe(this.config,"/api/browser-credentials",{method:"POST",body:JSON.stringify({website:e.website,account_label:e.accountLabel,email:e.email,encryptedPassword:n})});return {status:r.status,credential:this.toMetadata(r.credential)}}async delete(e){let n="id"in e?e:{website:e.website,account_label:e.accountLabel};return await Fe(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function Yn(t={}){return new Rt(t)}async function ms(t){return (await Fe({apiKey:t.apiKey,dashboardUrl:t.dashboardUrl},"/api/browser-login/mcp-config",{method:"POST",body:JSON.stringify({browserSessionId:t.browserSessionId,sessionTag:t.sessionTag,grantToken:t.grantToken,allow:Dl(t.config)})})).server}function Dl(t){return t?.allow?.map(e=>({website:e.website,...e.accountLabel||e.account_label?{account_label:e.accountLabel||e.account_label}:{}}))}var Zn="x-evolve-provider-runtime-binding";function Bl(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}async function Ll(t){return await t.text().catch(()=>"")}var Ke=class extends Error{constructor(n,r){super(r);this.status=n;this.name="ProviderRuntimeTokenRequestError";}};function hs(t){return t instanceof Ke&&t.status===404}async function Qn(t,e,n={}){let r=await fetch(`${Bl(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 Ke(r.status,`Provider runtime token request failed (${r.status}): ${await Ll(r)}`);return await r.json()}function Nl(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 Qn(t,"/api/provider-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!Nl(n))throw new Ke(502,"Provider runtime token response was invalid");return n}async function ws(t,e){return (await Qn(t,"/api/provider-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function vs(t,e){return (await Qn(t,"/api/provider-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}async function bs(t,e){try{await ua$1({apiKey:e,baseUrl:b()}).get(t);}catch(n){throw n instanceof ha$1&&n.status===404?new T("org",`Organization ${JSON.stringify(t)} was not found, or you are not a member of it (${n.code}). Check the slug or id passed as org; the session would otherwise be refused by the dashboard and its trace lost.`):n}}function je(t){return `'${t.replaceAll("'",`'"'"'`)}'`}function Fl(t){let e=t.trim();if(e==="")return [];let n=Buffer.from(e,"base64"),r=[],i=0;for(let s=0;s<n.length;s++)n[s]===0&&(r.push(n.toString("utf8",i,s)),i=s+1);return i<n.length&&r.push(n.toString("utf8",i,n.length)),r}async function ks(t,e,n){if(n.length===0)throw new Error("collectArtifacts() requires at least one path.");let r=n.map(a=>{if(!a||a.includes("\0"))throw new Error(`Invalid artifact path: ${JSON.stringify(a)}`);let c=posix.normalize(a);if(!posix.isAbsolute(c)&&(c===".."||c.startsWith("../")))throw new Error(`Artifact path escapes the working directory: ${a}`);return posix.isAbsolute(c)?c:posix.join(e,c)}),s=(await t.commands.run(r.map(a=>`if [ ! -e ${je(a)} ]; then echo MISSING ${je(a)}; elif [ ! -r ${je(a)} ]; then echo UNREADABLE ${je(a)}; fi`).join("; "),{cwd:e,timeoutMs:15e3})).stdout.split(`
211
- `).map(a=>a.trim()).filter(Boolean);if(s.length>0)throw new Error(`Artifact roots are not collectable: ${s.join("; ")}`);let d;try{d=await t.commands.run(`set -o pipefail 2>/dev/null; find -- ${r.map(je).join(" ")} -type f -printf '%p\\0%s\\0' | base64 -w0`,{cwd:e,timeoutMs:3e4});}catch(a){throw new Error(`Artifact listing failed: ${a.message}`)}if(d.exitCode!==0)throw new Error(`Artifact listing failed (exit ${d.exitCode}): ${(d.stderr||"").slice(0,500)}`);let u=Fl(d.stdout);if(u.length%2!==0)throw new Error("Sandbox returned malformed artifact metadata.");let l=new Map;for(let a=0;a<u.length;a+=2){let c=u[a],p=Number(u[a+1]);if(!Number.isSafeInteger(p)||p<0)throw new Error(`Sandbox returned an invalid artifact size: ${c}`);l.has(c)||l.set(c,p);}let o={};for(let a of [...l.keys()].sort()){let c=r.some(f=>a===f||a.startsWith(`${f.replace(/\/$/,"")}/`));if(!posix.isAbsolute(a)||!c)throw new Error(`Sandbox returned an invalid artifact path: ${a}`);let p=posix.relative(e,a),g=p&&p!==".."&&!p.startsWith("../")?p:a;o[g]=await t.files.read(a);}return o}var _t="EVOLVE_PROVIDER_RUNTIME_BINDING",Xn="gemini-api-key";function Ve(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 Jl(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function Ss(t){return `${t}-${randomBytes(8).toString("hex")}`}function er(t,e,n="newline"){let r=new Map;if(t){let i=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let s of i){let d=s.trim();if(!d)continue;let u=d.indexOf(":");if(u<=0)continue;let l=d.slice(0,u).trim(),o=d.slice(u+1).trim();r.set(l.toLowerCase(),`${l}: ${o}`);}}for(let[i,s]of Object.entries(e)){let d=i.toLowerCase();if(d===u&&r.has(d)&&n==="newline"){let u=r.get(d),l=u.slice(u.indexOf(":")+1).trim();r.set(d,`${i}: ${l},${s}`);}else r.set(d,`${i}: ${s}`);}return Array.from(r.values()).join(n==="comma"?", ":`
212
- `)}var zl=262144,Wl=128e3,Hl=new Set(["low","medium","high","xhigh","max"]);function xs(t){if(t)return Hl.has(t)?t:void 0}function Pt(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}var Ge=class{agentConfig;options;sandbox;hasRun=false;workingDir;homeDir;lastRunTimestamp;registry;sessionTag;previousSessionTag;sessionLogger;orgResolved=false;activeCommand;activeProcessId=null;activeOperationId=null;activeOperationKind=null;nextOperationId=0;interruptedOperations=new Set;sandboxState;agentState="idle";droidSessionId;managedBrowserSession;providerRuntimeToken;managedSecretRuntimeToken;managedSecretProxy;credentialsSealed=false;skills;resolvedSkillsList;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(Oe(e),Pn(n.observability),n.managedSecrets){if(e.isDirectMode)throw new Error("managed secrets are available only in gateway mode with EVOLVE_API_KEY");if(n.sandboxId)throw new Error("managed secrets cannot be used with an existing sandbox; grants are sandbox-scoped.");if(n.sandboxProvider&&!fe(n.sandboxProvider))throw new Error("managed secrets require an Evolve-managed sandbox provider")}if(this.agentConfig=e,this.options=n,n.sandboxId&&n.sandboxCreateOptions?.user)throw new Error("sandbox user cannot be enforced when attaching to an existing sandbox; create a fresh sandbox with the user instead");if(this.homeDir=r(n.sandboxCreateOptions?.user,n.sandboxCreateOptions?.homeDir),this.homeDir!==q$1){if(n.storage)throw new Error("Checkpoint storage requires the default /home/user sandbox home directory; remove sandbox user/homeDir or storage");if(n.managedBrowser||n.browserCredentials)throw new Error("Managed browser features require the default /home/user sandbox home directory")}if(this.workingDir=n.workingDirectory||n.sandboxCreateOptions?.workingDirectory||`${this.homeDir}/workspace`,this.sandboxState=n.sandboxId?"ready":"stopped",n.workspaceMode==="task"&&[n.context,n.files,n.systemPrompt,n.browserPrompt,n.schema].some(Boolean))throw new Error('workspaceMode "task" cannot be combined with context, files, systemPrompt, browserPrompt, or schema; the task owns the working directory');if(this.skills=n.skills,this.storage=n.storage,n.schema)if(F(n.schema))this.zodSchema=n.schema,n.schemaOptions&&console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead");else {this.jsonSchema=n.schema,this.schemaOptions=n.schemaOptions;try{let r=this.createAjvValidator();this.compiledValidator=r.compile(this.jsonSchema);}catch(r){throw new Error(`Invalid JSON Schema: ${r.message}`)}}this.registry=D(e.type),this.sessionTag=Ss(n.sessionTagPrefix||"evolve");}browserRuntimeInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl,sessionId:this.managedBrowserSession.sessionId,sessionTag:this.managedBrowserSession.sessionTag}}browserResponseInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl}}emitLifecycle(e,n){let r=this.browserRuntimeInfo();e?.onLifecycle?.({sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,timestamp:new Date().toISOString(),reason:n,...r?{browser:r}:{}});}invalidateActiveOperation(){this.activeCommand=void 0,this.activeProcessId=null,this.activeOperationId=null,this.activeOperationKind=null;}beginOperation(e,n,r,i){let s=++this.nextOperationId;return this.activeOperationId=s,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,i),s}finalizeOperation(e,n,r,i="idle",s="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=s,this.agentState=i,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,i,s){let d=n==="run"?"run_background_complete":"command_background_complete",u=n==="run"?"run_background_failed":"command_background_failed",l=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async o=>{if(this.interruptedOperations.delete(e)||o.exitCode===130){this.finalizeOperation(e,i,l,"interrupted");return}n==="run"&&s&&await this.writeDroidSessionState(s);let c=o.exitCode===0?d:u,p=o.exitCode===0?"idle":"error";this.finalizeOperation(e,i,c,p);}).catch(()=>{this.interruptedOperations.delete(e),this.finalizeOperation(e,i,u,"error");});}createAjvValidator(){let n={...Jt[this.schemaOptions?.mode||"loose"],...this.schemaOptions?.coerceTypes!==void 0&&{coerceTypes:this.schemaOptions.coerceTypes},...this.schemaOptions?.removeAdditional!==void 0&&{removeAdditional:this.schemaOptions.removeAdditional},...this.schemaOptions?.useDefaults!==void 0&&{useDefaults:this.schemaOptions.useDefaults},...this.schemaOptions?.allErrors!==void 0&&{allErrors:this.schemaOptions.allErrors}};return new Kl({...n,strict:false})}async getSandbox(e){if(this.sandbox)return this.sandbox;if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot create or attach another sandbox");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");let n=this.options.sandboxProvider;this.sandboxState="booting",this.emitLifecycle(e,"sandbox_boot");let r=false;try{if(this.options.sandboxId)(this.options.mcpServers||this.options.integrations||this.options.plugins||this.options.context||this.options.files||this.options.systemPrompt||this.options.managedBrowser||this.options.browserCredentials)&&console.warn("[Evolve] Connecting to existing sandbox - ignoring mcpServers, integrations, plugins, context, files, systemPrompt, managed browser setup, and browser credentials"),this.sandbox=await n.connect(this.options.sandboxId),this.hasRun=!0,await this.loadDroidSessionState(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_connected");else {await this.ensureManagedBrowserSession(e),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let i=this.buildEnvironmentVariables();this.sandbox=await n.create(this.buildSandboxCreateOptions(i)),r=!0,await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox),await this.setupManagedBrowser(this.sandbox),await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox),await this.setupWorkspace(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_ready");}}catch(i){throw r&&this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(e,"sandbox_error"),i}return this.sandbox}resolveKimiMaxContextSize(){if(typeof this.agentConfig.maxContextSize=="number")return this.agentConfig.maxContextSize;let e=this.agentConfig.model||this.registry.defaultModel;return oe(this.registry,e)||oe(this.registry,this.resolveCommandModel(e))?this.registry.models.find(i=>i.alias===e||i.modelId===e)?.maxContextSize??this.registry.spendTrackingTomlProvider?.maxContextSize??zl:Wl}reasoningEffort(){return Ar(this.agentConfig.type,this.agentConfig.reasoningEffort)}buildKimiDirectModelEnvs(){let e=Te(this.reasoningEffort()),n=xs(this.reasoningEffort()),r={KIMI_MODEL_NAME:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),KIMI_MODEL_API_KEY:this.agentConfig.apiKey,KIMI_MODEL_PROVIDER_TYPE:"kimi",KIMI_MODEL_MAX_CONTEXT_SIZE:String(this.resolveKimiMaxContextSize()),KIMI_MODEL_DEFAULT_THINKING:e?"true":"false",KIMI_MODEL_THINKING_MODE:e?"on":"off"};return n&&(r.KIMI_MODEL_THINKING_EFFORT=n),this.agentConfig.baseUrl&&(r.KIMI_MODEL_BASE_URL=this.agentConfig.baseUrl),r}buildEnvironmentVariables(){let e={},n=this.validatedUserSecretsForEnvironment();if(this.agentConfig.type==="kimi"&&this.agentConfig.isDirectMode)Object.assign(e,this.buildKimiDirectModelEnvs());else if(this.agentConfig.oauthFileContent)this.registry.oauthActivationEnv&&(e[this.registry.oauthActivationEnv.key]=this.registry.oauthActivationEnv.value);else if(!(this.agentConfig.type==="kimi"&&!this.agentConfig.isDirectMode)){if(!(!this.agentConfig.isDirectMode&&Ve(this.agentConfig.type))){if(!(this.registry.skipApiKeyEnvInGateway&&!this.agentConfig.isDirectMode))if(this.registry.providerEnvMap&&!this.agentConfig.isDirectMode)for(let r of Object.values(this.registry.providerEnvMap))e[r.keyEnv]=this.agentConfig.apiKey;else {let r=this.agentConfig.model?.split("/")[0],i=r?this.registry.providerEnvMap?.[r]:void 0,s=i?i.keyEnv:this.registry.apiKeyEnv,d=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:s;e[d]=this.agentConfig.apiKey;}}}if(this.agentConfig.isDirectMode&&!this.agentConfig.isOAuth&&this.agentConfig.type!=="kimi")this.agentConfig.baseUrl&&this.registry.baseUrlEnv&&(e[this.registry.baseUrlEnv]=this.agentConfig.baseUrl);else if(!this.agentConfig.isDirectMode){let r=a(this.registry.gatewayPath),i=this.requireActiveProviderRuntimeToken();if(this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=i?.baseUrl??r),i&&(this.shouldExposeProviderRuntimeTokenEnv()&&(e[this.registry.apiKeyEnv]=i.token),this.agentConfig.type==="gemini"&&(e.GEMINI_DEFAULT_AUTH_TYPE=Xn),this.registry.spendTrackingEnvs&&(e[_t]=i.bindingSecret)),!i){if(Ve(this.agentConfig.type))throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);e[h]=this.agentConfig.apiKey;}}if(this.agentConfig.externalGateway&&this.registry.gatewayConfigEnv&&(e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.externalGateway&&this.agentConfig.type==="gemini"&&(e.GEMINI_CLI_TRUST_WORKSPACE="true"),this.agentConfig.type==="claude"&&(e.IS_SANDBOX="1"),this.managedBrowserSession&&this.options.managedBrowser&&Object.assign(e,Hn(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.managedSecretRuntimeToken&&Object.assign(e,Ja(this.managedSecretRuntimeToken)),n&&Object.assign(e,n),!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";e[r]=er(e[r],{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},i);}return !this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&(e[this.registry.spendTrackingEnvs.sessionTagEnv]=this.sessionTag),e}buildSandboxCreateOptions(e){return {...this.options.sandboxCreateOptions,envs:e,workingDirectory:this.workingDir}}validatedUserSecretsForEnvironment(){let e={...this.options.sandboxCreateOptions?.envs,...this.options.secrets};if(Object.keys(e).length===0)return;let n=new Set;this.agentConfig.isDirectMode||(n.add(h),n.add(_t),this.agentConfig.type==="gemini"&&n.add("GEMINI_DEFAULT_AUTH_TYPE"));let r=s=>{s&&n.add(s);};r(this.registry.apiKeyEnv),r(this.registry.baseUrlEnv);for(let s of Object.values(this.registry.providerEnvMap??{}))r(s.keyEnv);if(this.managedSecretRuntimeToken)for(let s of Ba())n.add(s);for(let s of this.managedSecretRuntimeToken?.env??[])r(s.envName);let i={};for(let[s,d]of Object.entries(e)){if(n.has(s))throw new Error(`${s} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);s!==this.registry.gatewayConfigEnv&&(i[s]=d);}return i}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await gs(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async ensureProviderRuntimeToken(){let e=Ve(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);}directSandboxProviderDeclaration(){let e=this.options.sandboxProvider;if(!e||fe(e))return;let n=e.providerType;return c.includes(n)?n:void 0}async bindProviderRuntimeToken(e){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.directSandboxProviderDeclaration();if(!await ws(this.options.providerRouting,{token:this.providerRuntimeToken.token,sandboxId:e,...n?{directSandboxProvider:n}:{}}))throw new Error("Failed to bind provider runtime token to sandbox")}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=Hn(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 fs(this.options.managedBrowser,e);}catch(n){console.warn(`[Evolve] Managed browser cleanup failed: ${n.message}`);}}async closeProviderRuntimeToken(e=false){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.providerRuntimeToken,r;for(let s=0;s<3;s++)try{if(!await vs(this.options.providerRouting,{token:n.token}))throw new Error("Dashboard returned ok=false");this.providerRuntimeToken=void 0;return}catch(d){r=d,s<2&&await new Promise(u=>setTimeout(u,100*(s+1)));}let i=`Provider runtime token cleanup failed: ${r.message}`;if(e)throw new Error(i);console.warn(`[Evolve] ${i}`),this.providerRuntimeToken=void 0;}async ensureManagedSecretRuntimeToken(){this.managedSecretRuntimeToken||!this.options.managedSecrets||(this.managedSecretRuntimeToken=await Ea$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{sessionTag:this.sessionTag,secrets:this.options.managedSecrets.secrets}));}async bindManagedSecretRuntimeToken(e){if(!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;if(!await Fa({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||!Ia$1(this.managedSecretRuntimeToken))return;if(await e.files.makeDir(ya$1),await e.commands.run(`umask 077 && mkdir -p ${ya$1}/certs && chmod 700 ${ya$1} ${ya$1}/certs`,{timeoutMs:5e3}),await e.files.write(za,Ca),await e.files.write(Aa,Ka(this.managedSecretRuntimeToken)),await e.commands.run(`chmod 700 ${za} && chmod 600 ${Aa}`,{timeoutMs:5e3}),await e.commands.run(La(),{timeoutMs:3e4}),this.managedSecretProxy=await e.commands.spawn(Ma(),{timeoutMs:3e4}),(await e.commands.run(`python3 - <<'PY'
209
+ `;this.localQueue=this.localQueue.then(()=>this.appendLocal(n)).catch(()=>{}),this.apiKey&&this.eventBuffer.push(e),this.metaWritten=true;}async appendLocal(e){try{await this.dirReady,await appendFile(this.localFilePath,e,"utf-8");}catch(n){console.debug("[SessionLogger] Local write failed:",n);}}scheduleFlush(){if(this.eventBuffer.length>=y){this.flushDashboard();return}!this.flushTimer&&!this.isClosed&&(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushDashboard();},z$1));}flushDashboard(){if(!this.apiKey||this.eventBuffer.length===0)return;let e=this.eventBuffer.splice(0);this.dashboardQueue=this.dashboardQueue.then(()=>this.sendToDashboard(e)).catch(()=>{});}async sendToDashboard(e){let n={tag:this.tag,provider:this.provider,agent:this.agent,model:this.model,reasoningEffort:this.reasoningEffort!==void 0&&cd.test(this.reasoningEffort)?this.reasoningEffort:null,sandboxId:this.sandboxId,...this.org?{org:this.org}:{},timestamp:this.timestamp,...this.annotations(),events:e};for(let r=1;r<=A$1;r++)try{let i=await fetch(`${this.dashboardUrl}/api/sessions/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(n),signal:AbortSignal.timeout(1e4)});if(i.ok)return;if(i.status===429||i.status===401||i.status>=500){if(r===A$1){console.debug(`[SessionLogger] Dashboard ${i.status} after ${r} retries, requeueing`),this.requeueEvents(e);return}await this.delay(B$1*r);continue}await this.warnRefusal(i,e.length);return}catch(i){r===A$1?(console.debug("[SessionLogger] Dashboard sync failed after retries, requeueing:",i),this.requeueEvents(e)):await this.delay(B$1*r);}}requeueEvents(e){this.eventBuffer.unshift(...e);}async warnRefusal(e,n){let r="unknown_error",i=e.statusText;try{let l=await e.json();if(l?.error&&typeof l.error=="object"){let c=l.error;typeof c.code=="string"&&(r=c.code),typeof c.message=="string"&&(i=c.message);}else typeof l?.error=="string"&&(i=l.error);}catch{}let s=`${e.status}:${r}`;this.warnedRefusals.has(s)||(this.warnedRefusals.add(s),console.warn(`[SessionLogger] Dashboard refused session "${this.tag}" (HTTP ${e.status} ${r}): ${i}. ${n} trace event(s) dropped; further refusals of this kind are not repeated.`));}validateConfig(e){let n=b();if(e.apiKey&&!n.startsWith("https://")&&!n.includes("localhost")&&!n.includes("127.0.0.1"))throw new Error("Dashboard URL must use HTTPS when API key is provided")}delay(e){return new Promise(n=>setTimeout(n,e))}annotations(){if(!this.observability)return {};let e={};for(let[n,r]of Object.entries(this.observability))if(r!==void 0){if(x.includes(n)){this.warnedKeys.has(n)||(this.warnedKeys.add(n),console.warn(`[SessionLogger] observability key "${n}" is reserved for session identity \u2014 ignoring it.`));continue}e[n]=r;}return e}};function rt(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function it(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 st(t){return await t.text().catch(()=>"")}function Lr(t){let e=t?.trim();if(!e)throw new Error('Integration userId is required; use "root" for dashboard-owned accounts');return e}function dd(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 Qs(t){let e=await fetch(`${rt(t.dashboardUrl)}/api/integration-sessions`,{method:"POST",headers:{Authorization:`Bearer ${it(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Lr(t.userId),apps:dd(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 st(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 ud(t){let e=await fetch(`${rt(t.dashboardUrl)}/api/integrations/connect`,{method:"POST",headers:{Authorization:`Bearer ${it(t.apiKey)}`,"content-type":"application/json",accept:"application/json"},body:JSON.stringify({userId:Lr(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 st(e)}`);return await e.json()}async function pd(t){let e=Array.from(new Set((t.userIds??[]).map(l=>Lr(l))));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 ${it(t.apiKey)}`,accept:"application/json"},i=await fetch(`${rt(t.dashboardUrl)}/api/integrations/status?${n}`,{headers:r,signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new Error(`Managed integration status failed (${i.status}): ${await st(i)}`);return ((await i.json()).accounts??[]).map(l=>({userId:String(l.userId??""),app:String(l.app??""),appName:typeof l.appName=="string"?l.appName:void 0,appIcon:typeof l.appIcon=="string"?l.appIcon:void 0,accountLabel:typeof l.accountLabel=="string"?l.accountLabel:void 0,status:String(l.status??""),accountId:typeof l.accountId=="string"?l.accountId:void 0,updatedAt:typeof l.updatedAt=="string"?l.updatedAt:void 0}))}async function gd(t){let e=await fetch(`${rt(t.dashboardUrl)}/api/integrations/accounts/update`,{method:"POST",headers:{Authorization:`Bearer ${it(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 st(e)}`);return await e.json()}async function fd(t){let e=await fetch(`${rt(t.dashboardUrl)}/api/integrations/disconnect`,{method:"POST",headers:{Authorization:`Bearer ${it(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 st(e)}`);return await e.json()}var Xs={auth:ud,accounts:{list:pd,update:gd,delete:fd}};promisify(exec);var Jr=promisify(execFile),no=Symbol.for("evolve:awsSdkCache"),ro=Symbol.for("evolve:s3ClientCache");var Ed=3600,_d=["node_modules","__pycache__","*.pyc",".cache",".npm",".pip",".venv","venv"];function Td(t){if(t.startsWith("s3://")){let i=t.slice(5),s=i.indexOf("/");return s===-1?{bucket:i,prefix:""}:{bucket:i.slice(0,s),prefix:i.slice(s+1).replace(/\/+$/,"")}}let e=new URL(t),n=e.hostname,r=e.pathname.split("/").filter(Boolean);if(n.includes(".s3.")&&n.endsWith(".amazonaws.com"))return {bucket:n.split(".s3.")[0],prefix:r.join("/")};if(r.length===0)throw new Error(`Invalid storage URL: no bucket in path. Expected https://endpoint/bucket/prefix, got ${t}`);return {bucket:r[0],prefix:r.slice(1).join("/"),endpoint:`${e.protocol}//${e.host}`}}function yn(t,e,n,r){if(!t?.url&&!t?.bucket){if(!e)throw new Error("Storage requires either a URL (BYOK mode) or gateway API key. Use .withStorage({ url: 's3://bucket/prefix' }) or configure EVOLVE_API_KEY for gateway mode.");return {bucket:"",prefix:"",region:t?.region||"us-east-1",mode:"gateway",gatewayUrl:n,gatewayApiKey:r}}let i=t?.bucket||"",s=t?.prefix||"",l=t?.endpoint;if(t?.url){let c=Td(t.url);i=i||c.bucket,s=s||c.prefix,l=l||c.endpoint;}if(!i)throw new Error("Storage bucket is required. Provide url (s3://bucket/prefix) or explicit bucket name.");return {bucket:i,prefix:s,region:t?.region||process.env.AWS_REGION||"us-east-1",endpoint:l,credentials:t?.credentials,mode:"byok"}}function Br(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 Rd(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 ot(t){return "'"+t.replace(/'/g,"'\\''")+"'"}function Pd(t,e){let n=Y(t),r=Rd(e),i=n.checkpointDirs?.length?n.checkpointDirs.map(c=>Br(c)):[Br(n.mcpConfig.settingsDir)],s=[..._d.map(c=>`--exclude=${ot(c)}`),`--exclude=${ot(r+"/temp")}`,...(n.checkpointExcludes??[]).map(c=>`--exclude=${ot(Br(c))}`)].join(" "),l=[ot(r+"/"),...i.map(c=>ot(c+"/"))].join(" ");return [`tar -czf /tmp/evolve-ckpt.tar.gz -C /home/user ${s} ${l}`,"sha256sum /tmp/evolve-ckpt.tar.gz | awk '{print $1}'"].join(" && ")}async function Fe(){let t=globalThis[no];if(t)return t;let e="@aws-sdk/client-s3",n="@aws-sdk/s3-request-presigner";try{let[r,i]=await Promise.all([Function("m","return import(m)")(e),Function("m","return import(m)")(n)]);return globalThis[no]={s3:r,presigner:i},{s3:r,presigner:i}}catch{throw new Error("Storage requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner. Install: npm i @aws-sdk/client-s3 @aws-sdk/s3-request-presigner")}}async function lt(t){let e=t.credentials?`${t.credentials.accessKeyId}:${t.credentials.secretAccessKey.slice(-4)}`:"env",n=`${t.bucket}:${t.region}:${t.endpoint||""}:${e}`,r=globalThis[ro];if(r?.key===n)return r.client;let{s3:i}=await Fe(),s=new i.S3Client({region:t.region,...t.endpoint&&{endpoint:t.endpoint,forcePathStyle:true},...t.credentials&&{credentials:t.credentials}});return globalThis[ro]={client:s,key:n},s}async function go(t,e,n){let{s3:r,presigner:i}=await Fe(),s=await lt(t),l=n==="put"?new r.PutObjectCommand({Bucket:t.bucket,Key:e,ContentType:"application/gzip"}):new r.GetObjectCommand({Bucket:t.bucket,Key:e});return i.getSignedUrl(s,l,{expiresIn:Ed})}async function io(t,e){let{s3:n}=await Fe(),r=await lt(t);try{return await r.send(new n.HeadObjectCommand({Bucket:t.bucket,Key:e})),!0}catch(i){let s=i?.name||i?.message||"";if(i?.$metadata?.httpStatusCode===404||s==="NotFound"||s==="NoSuchKey")return false;throw i}}async function fo(t,e){let{s3:n}=await Fe(),s=await(await(await lt(t)).send(new n.GetObjectCommand({Bucket:t.bucket,Key:e}))).Body?.transformToString();if(!s)throw new Error(`Empty response from S3 key: ${e}`);return JSON.parse(s)}async function Id(t,e,n){let{s3:r}=await Fe();await(await lt(t)).send(new r.PutObjectCommand({Bucket:t.bucket,Key:e,Body:JSON.stringify(n,null,2),ContentType:"application/json"}));}function mo(t,e){return `${t.prefix?`${t.prefix}/`:""}data/${e}/archive.tar.gz`}function ho(t,e){return `${t.prefix?`${t.prefix}/`:""}checkpoints/${e}.json`}function Od(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,10);return `ckpt_${t}_${e}`}async function yo(t,e,n,r){let i=await fetch(`${t.gatewayUrl}/api/checkpoints/presign`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.gatewayApiKey}`},body:JSON.stringify({tag:e,hash:n,action:r})});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway presign failed (${i.status}): ${s}`)}return i.json()}async function Ad(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 Md(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 zr(t,e,n,r,i){let s=new Date().toISOString(),l=Pd(n,r),c=await t.commands.run(l,{timeoutMs:12e4});if(c.exitCode!==0)throw new Error(`Checkpoint tar failed: ${c.stderr}`);let a=c.stdout.trim().split(`
210
+ `).pop()?.trim();if(!a||a.length!==64)throw new Error(`Invalid checkpoint hash: ${a}`);let o=await t.commands.run("stat -c '%s' /tmp/evolve-ckpt.tar.gz 2>/dev/null || stat -f '%z' /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4}),d=parseInt(o.stdout.trim(),10),u=Number.isNaN(d)?void 0:d,p;try{if(e.mode==="byok"){let g=mo(e,a);if(!await io(e,g)){let m=await go(e,g,"put"),w=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${m}"`,{timeoutMs:3e5});if(w.exitCode!==0)throw new Error(`Checkpoint upload failed: ${w.stderr}`);if(!await io(e,g))throw new Error("Checkpoint upload verification failed (HeadObject)")}p=Od();let h={id:p,hash:a,tag:i.tag,timestamp:s,sizeBytes:u,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment,sandboxId:t.sandboxId};await Id(e,ho(e,p),h);}else {let g=await yo(e,i.tag,a,"put");if(!g.alreadyExists){let h=await t.commands.run(`curl -sf -X PUT -H "Content-Type: application/gzip" --upload-file /tmp/evolve-ckpt.tar.gz "${g.url}"`,{timeoutMs:3e5});if(h.exitCode!==0)throw new Error(`Checkpoint upload failed: ${h.stderr}`)}p=(await Ad(e,{tag:i.tag,hash:a,sizeBytes:u??0,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment})).id;}}finally{await t.commands.run("rm -f /tmp/evolve-ckpt.tar.gz",{timeoutMs:1e4});}return {id:p,hash:a,tag:i.tag,timestamp:s,sizeBytes:u,agentType:n,model:i.model,workspaceMode:i.workspaceMode,parentId:i.parentId,comment:i.comment}}async function wo(t,e,n){let r=await Hr(e,n),i=r.hash,s={agentType:r.agentType,workspaceMode:r.workspaceMode},l=await So(e,r),c=await t.commands.run(`curl -sf -o /tmp/evolve-restore.tar.gz "${l}" && sha256sum /tmp/evolve-restore.tar.gz | awk '{print $1}'`,{timeoutMs:3e5});if(c.exitCode!==0)throw new Error(`Checkpoint download failed: ${c.stderr}`);let a=c.stdout.trim().split(`
211
+ `).pop()?.trim();if(a!==i)throw await t.commands.run("rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:1e4}),new Error(`Checkpoint integrity check failed (expected ${i}, got ${a})`);let o=await t.commands.run("tar -xzf /tmp/evolve-restore.tar.gz -C /home/user && rm -f /tmp/evolve-restore.tar.gz",{timeoutMs:12e4});if(o.exitCode!==0)throw new Error(`Checkpoint extraction failed: ${o.stderr}`);return s}function vo(t,e){let n=e?.gatewayApiKey||process.env.EVOLVE_API_KEY,r=e?.gatewayUrl||s,i=!t.url&&!t.bucket&&!!n;return yn(t,i,r,n)}async function ko(t,e){let{s3:n}=await Fe(),r=await lt(t),s=`${t.prefix?`${t.prefix}/`:""}checkpoints/`,l=[],c;do{let p={Bucket:t.bucket,Prefix:s,...c&&{ContinuationToken:c}},g=await r.send(new n.ListObjectsV2Command(p));if(g.Contents)for(let f of g.Contents)f.Key?.endsWith(".json")&&f.LastModified&&l.push({key:f.Key,lastModified:f.LastModified});c=g.IsTruncated?g.NextContinuationToken:void 0;}while(c);if(l.length===0)return [];l.sort((p,g)=>{let f=g.lastModified.getTime()-p.lastModified.getTime();return f!==0?f:g.key<p.key?-1:g.key>p.key?1:0});let o=!!e?.tag?l:e?.limit?l.slice(0,e.limit):l,u=(await Promise.all(o.map(async p=>{try{return await fo(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 bo(t,e){let n=new URLSearchParams;e?.limit&&n.set("limit",String(e.limit)),e?.tag&&n.set("tag",e.tag);let r=`${t.gatewayUrl}/api/checkpoints${n.toString()?`?${n}`:""}`,i=await fetch(r,{method:"GET",headers:{Authorization:`Bearer ${t.gatewayApiKey}`}});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Gateway list checkpoints failed (${i.status}): ${s}`)}return i.json()}function Ud(t){return t&&t>0?Math.min(t,500):100}async function Wr(t,e){return t.mode==="byok"?(await ko(t,{limit:1,tag:e?.tag}))[0]??null:(await bo(t,{limit:1,tag:e?.tag}))[0]??null}async function Hr(t,e){if(t.mode==="byok"){let n=ho(t,e);try{return await fo(t,n)}catch(r){throw $d(r)?new Error(`Checkpoint ${e} not found`):r}}else return await Md(t,e)}async function so(t,e,n){if(e==="latest"){let r=await Wr(t,{tag:n});if(!r)throw new Error("No checkpoints found");return r.id}return e}async function So(t,e){if(t.mode==="byok")return go(t,mo(t,e.hash),"get");{let n=await yo(t,e.tag,e.hash,"get");if(!n.url)throw new Error("Gateway presign returned no download URL");return n.url}}function xo(t){return !(!t||isAbsolute(t)||t.startsWith("-")||normalize(t).startsWith("..")||t.includes("\0"))}function oo(t,e){let n=resolve(t,e),r=resolve(t),i=relative(r,n);if(i.startsWith("..")||isAbsolute(i))throw new Error(`Path traversal detected: "${e}" resolves outside target directory`)}function $d(t){let e=t.name,n=t.message;return t?.$metadata?.httpStatusCode===404||e==="NoSuchKey"||e==="NotFound"||n==="NoSuchKey"}function Kr(t){let e=t.filter(n=>!xo(n));if(e.length>0)throw new Error(`Archive contains unsafe path(s): ${e.slice(0,3).join(", ")}`);return t}var Co=10*1024*1024,ao=false;async function Eo(){if(!ao)try{await Jr("tar",["--version"]),ao=!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 lo(t,e){let n=await Hr(t,e),r=await So(t,n),i=e.replace(/[^a-zA-Z0-9_-]/g,"_"),s=join(tmpdir(),`evolve-dl-${i}-${Date.now()}.tar.gz`),l=await fetch(r);if(!l.ok)throw new Error(`Checkpoint download failed (${l.status})`);if(!l.body)throw new Error("Checkpoint download returned empty body");let c=createHash("sha256"),a=createWriteStream(s);try{let d=l.body.getReader();await new Promise((u,p)=>{a.on("error",p),a.on("finish",u);async function g(){for(;;){let{done:f,value:h}=await d.read();if(f){a.end();break}c.update(h),a.write(h)||await new Promise(m=>a.once("drain",m));}}g().catch(p);});}catch(d){throw a.destroy(),await unlink(s).catch(()=>{}),d}let o=c.digest("hex");if(o!==n.hash)throw await unlink(s).catch(()=>{}),new Error(`Checkpoint integrity check failed (expected ${n.hash}, got ${o})`);return {tmpPath:s,metadata:n}}var Gr=class extends Error{constructor(n){super(`Could not read a file path out of this 'tar -tvzf' line: ${JSON.stringify(n)}. The listing is produced by the tar on THIS machine, so an unrecognised layout means an unsupported tar variant (busybox, a very old BSD tar) rather than a corrupt archive. Refusing to return a partial file list.`);this.line=n;this.name="TarListingParseError";}},Dd={LC_ALL:"C",LANG:"C"};function Nd(t){let e=[],n=[],r=[];for(let i of t.trim().split(`
212
+ `)){if(!i||i.startsWith("total "))continue;let s=i[0];if(s!=="-"&&s!=="d"&&s!=="l")throw new Error(`Archive contains unsupported entry type: "${s}"`);let l=i.match(/\d{2}:\d{2}\s+(.+)/)??i.match(/[A-Z][a-z]{2}\s+\d{1,2}\s+\d{4}\s+(.+)/);if(!l)throw new Gr(i);let c=l[1];if(s==="l"){let a=c.indexOf(" -> ");a!==-1&&(c=c.slice(0,a)),e.push(c);}else s==="d"?n.push(c.replace(/\/$/,"")):r.push(c);}return {filePaths:r,dirPaths:n,symlinkPaths:[...new Set(e)]}}async function co(t){await Eo();let{stdout:e}=await Jr("tar",["-tvzf",t],{maxBuffer:Co,env:{...process.env,...Dd}}),{filePaths:n,dirPaths:r,symlinkPaths:i}=Nd(e);return Kr(r),Kr(i),Kr(n)}async function jr(t,e,n){await Eo(),await mkdir(e,{recursive:true});let r=["-xzf",t,"--no-same-owner","--no-same-permissions","-C",e];n?.length&&r.push("--",...n),await Jr("tar",r,{maxBuffer:Co});}function Fd(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 qr(t,e){let n=vo(t,e);return _o(n)}function Ld(t){let e=vo(t||{});return _o(e)}function _o(t){return {async listCheckpoints(e){let n=Ud(e?.limit);return t.mode==="byok"?ko(t,{limit:n,tag:e?.tag}):bo(t,{limit:n,tag:e?.tag})},async getCheckpoint(e){return Hr(t,e)},async downloadCheckpoint(e,n){let r=n?.extract!==false,i=n?.to||process.cwd(),s=await so(t,e),{tmpPath:l,metadata:c}=await lo(t,s);try{if(r)return await mkdir(i,{recursive:!0}),await co(l),await jr(l,i),i;{await mkdir(i,{recursive:!0});let a=join(i,`checkpoint-${c.id}.tar.gz`);return await copyFile(l,a),a}}finally{await unlink(l).catch(()=>{});}},async downloadFiles(e,n){let r=await so(t,e),{tmpPath:i}=await lo(t,r),s;try{let l=await co(i),c;if(n?.files){let o=n.files.filter(u=>!xo(u));if(o.length>0)throw new Error(`Unsafe file path requested: ${o[0]}`);let d=new Set(n.files);c=l.filter(u=>d.has(u));}else if(n?.glob){let o=n.glob.map(Fd);c=l.filter(d=>o.some(u=>u.test(d)));}else c=l;if(c.length===0)return {};s=join(tmpdir(),`evolve-extract-${Date.now()}`);try{await jr(i,s,c);}catch(o){let d=o?.message??"";if(!d.includes("E2BIG")&&!d.includes("Argument list too long")&&!d.includes("ENAMETOOLONG"))throw o;await rm(s,{recursive:!0,force:!0}).catch(()=>{}),s=join(tmpdir(),`evolve-extract-${Date.now()}`),await jr(i,s);}let a={};return await Promise.all(c.map(async o=>{oo(s,o),a[o]=await readFile(join(s,o));})),n?.to&&(await mkdir(n.to,{recursive:!0}),await Promise.all(Object.entries(a).map(async([o,d])=>{oo(n.to,o);let u=join(n.to,o);await mkdir(dirname(u),{recursive:!0}),await writeFile(u,d);}))),a}finally{s&&await rm(s,{recursive:true,force:true}).catch(()=>{}),await unlink(i).catch(()=>{});}}}}function ye(t){return `'${t.replace(/'/g,"'\\''")}'`}function wn(t){return typeof t=="string"&&t.length>0}function Le(t,e,n){let r=t[e];if(!wn(r))throw new Error(`withPlugins() for ${n} requires ${e}`);return r}function Bd(t,e){let n=e.stderr||e.stdout||`exit code ${e.exitCode}`;return new Error(`Plugin setup failed while running: ${t}
213
+ ${n}`)}function Kd(t,e){switch(t){case "droid":{let n=Le(e,"marketplace",t),r=Le(e,"plugin",t);return [`droid plugin marketplace add ${ye(n)}`,`droid plugin install ${ye(r)} --scope user`]}case "claude":{let n=Le(e,"marketplace",t),r=Le(e,"plugin",t);return [`claude plugin marketplace add ${ye(n)} --scope user`,`claude plugin install ${ye(r)} --scope user`]}case "gemini":{let n=Le(e,"source",t),r=e,i=[`gemini extensions install ${ye(n)}`];return wn(r.ref)&&i.push(`--ref ${ye(r.ref)}`),r.autoUpdate===true&&i.push("--auto-update"),r.preRelease===true&&i.push("--pre-release"),i.push("--consent"),r.skipSettings===true&&i.push("--skip-settings"),[i.join(" ")]}case "codex":{if("plugin"in e)throw new Error("withPlugins() for codex registers marketplaces only; codex has no plugin install command");let n=Le(e,"marketplace",t),r=e,i=[`codex plugin marketplace add ${ye(n)}`];if(wn(r.ref)&&i.push(`--ref ${ye(r.ref)}`),Array.isArray(r.sparse))for(let s of r.sparse){if(!wn(s))throw new Error("withPlugins() for codex requires sparse entries to be non-empty strings");i.push(`--sparse ${ye(s)}`);}return [i.join(" ")]}default:throw new Error(`withPlugins() is not supported for ${t}`)}}async function To(t,e,n){if(n?.length)for(let r of n){let i=Kd(t,r);for(let s of i){let l=await e.commands.run(s,{timeoutMs:12e4});if(l.exitCode!==0)throw Bd(s,l)}}}var Oo="/home/user/.agent-browser",Ro=`${Oo}/config.json`,Ao="/home/user/.actionbook",Vd=`${Ao}/config.toml`;function Po(t){return t==="actionbook"||t==="agent-browser"}function Gd(t){return t.remote===true}function Io(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 Mo(t){if(typeof t=="string"){if(t==="browser-use")return {provider:"browser-use",managed:false};if(Po(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:Io(t.profile)};if(Po(t.provider))return {provider:t.provider,managed:Gd(t),profile:Io(t.profile)};throw new Error("Unsupported browser configuration")}function Yr(t,e){return t==="actionbook"?{envs:{},files:[{path:Vd,data:stringify({version:1,browser:{mode:"cloud",cdp_endpoint:e.cdpUrl}}).trimEnd()+`
214
+ `}],directories:[Ao]}:{envs:{AGENT_BROWSER_CONFIG:Ro},files:[{path:Ro,data:`${JSON.stringify({cdp:e.cdpUrl},null,2)}
215
+ `}],directories:[Oo]}}function Uo(t){return (t?.dashboardUrl||s).replace(/\/$/,"")}async function $o(t){return await t.text().catch(()=>"")}async function Do(t,e,n={}){let r=await fetch(`${Uo(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 $o(r)}`);let i=await r.json();if(!i.id||!i.sessionId||!i.cdpUrl||!i.liveUrl)throw new Error("Managed browser session response missing id, sessionId, cdpUrl, or liveUrl");return {id:i.id,sessionId:i.sessionId,sessionTag:i.sessionTag,cdpUrl:i.cdpUrl,liveUrl:i.liveUrl,browserAuthGrantToken:i.browserAuthGrantToken}}async function No(t,e){let n=await fetch(`${Uo(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 $o(n)}`)}var Wd="RSA-OAEP-256",Zr="browser-login";function Hd(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function qd(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 Yd(t){return await t.text().catch(()=>"")}async function ct(t,e,n={}){let r=await fetch(`${Hd(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${qd(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 Yd(r)}`);return await r.json()}async function Zd(t,e){let n=await ct(t,"/api/browser-credentials/public-key"),r=publicEncrypt({key:n.publicKey,padding:constants.RSA_PKCS1_OAEP_PADDING,oaepHash:"sha256"},Buffer.from(e,"utf8"));return {algorithm:Wd,keyId:n.id,ciphertext:r.toString("base64url")}}var vn=class{constructor(e={}){this.config=e;}toMetadata(e){let{account_label:n,...r}=e;return {...r,accountLabel:n}}async list(e={}){let n=new URLSearchParams;e.website&&n.set("website",e.website),e.limit!==void 0&&n.set("limit",String(e.limit)),e.offset!==void 0&&n.set("offset",String(e.offset));let r=n.toString()?`?${n.toString()}`:"",i=await ct(this.config,`/api/browser-credentials${r}`);return {credentials:i.credentials.map(s=>this.toMetadata(s)),total:i.total,count:i.count,offset:i.offset,hasMore:i.has_more??i.offset+i.count<i.total}}async create(e){let n=await Zd(this.config,e.password),r=await ct(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 ct(this.config,"/api/browser-credentials",{method:"DELETE",body:JSON.stringify(n)})}};function Qr(t={}){return new vn(t)}async function Fo(t){return (await ct({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:Qd(t.config)})})).server}function Qd(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 Xd(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}async function eu(t){return await t.text().catch(()=>"")}var dt=class extends Error{constructor(n,r){super(r);this.status=n;this.name="ProviderRuntimeTokenRequestError";}};function Lo(t){return t instanceof dt&&t.status===404}async function Xr(t,e,n={}){let r=await fetch(`${Xd(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 dt(r.status,`Provider runtime token request failed (${r.status}): ${await eu(r)}`);return await r.json()}function tu(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.provider==="pi"||e.provider==="prime-agent"||e.provider==="dsh"||e.provider==="zcode"||e.provider==="antigravity")&&(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 Bo(t,e){let n=await Xr(t,"/api/provider-secrets/runtime-token",{method:"POST",body:JSON.stringify(e)});if(!tu(n))throw new dt(502,"Provider runtime token response was invalid");return n}async function Ko(t,e){return (await Xr(t,"/api/provider-secrets/runtime-token",{method:"PATCH",body:JSON.stringify(e)})).ok}async function jo(t,e){return (await Xr(t,"/api/provider-secrets/runtime-token",{method:"DELETE",body:JSON.stringify(e)})).ok}async function Vo(t,e){try{await ua({apiKey:e,baseUrl:b()}).get(t);}catch(n){throw n instanceof ha&&n.status===404?new O("org",`Organization ${JSON.stringify(t)} was not found, or you are not a member of it (${n.code}). Check the slug or id passed as org; the session would otherwise be refused by the dashboard and its trace lost.`):n}}function ut(t){return `'${t.replaceAll("'",`'"'"'`)}'`}function nu(t){let e=t.trim();if(e==="")return [];let n=Buffer.from(e,"base64"),r=[],i=0;for(let s=0;s<n.length;s++)n[s]===0&&(r.push(n.toString("utf8",i,s)),i=s+1);return i<n.length&&r.push(n.toString("utf8",i,n.length)),r}async function Go(t,e,n){if(n.length===0)throw new Error("collectArtifacts() requires at least one path.");let r=n.map(d=>{if(!d||d.includes("\0"))throw new Error(`Invalid artifact path: ${JSON.stringify(d)}`);let u=posix.normalize(d);if(!posix.isAbsolute(u)&&(u===".."||u.startsWith("../")))throw new Error(`Artifact path escapes the working directory: ${d}`);return posix.isAbsolute(u)?u:posix.join(e,u)}),s=(await t.commands.run(r.map(d=>`if [ ! -e ${ut(d)} ]; then echo MISSING ${ut(d)}; elif [ ! -r ${ut(d)} ]; then echo UNREADABLE ${ut(d)}; fi`).join("; "),{cwd:e,timeoutMs:15e3})).stdout.split(`
216
+ `).map(d=>d.trim()).filter(Boolean);if(s.length>0)throw new Error(`Artifact roots are not collectable: ${s.join("; ")}`);let l;try{l=await t.commands.run(`set -o pipefail 2>/dev/null; find -- ${r.map(ut).join(" ")} -type f -printf '%p\\0%s\\0' | base64 -w0`,{cwd:e,timeoutMs:3e4});}catch(d){throw new Error(`Artifact listing failed: ${d.message}`)}if(l.exitCode!==0)throw new Error(`Artifact listing failed (exit ${l.exitCode}): ${(l.stderr||"").slice(0,500)}`);let c=nu(l.stdout);if(c.length%2!==0)throw new Error("Sandbox returned malformed artifact metadata.");let a=new Map;for(let d=0;d<c.length;d+=2){let u=c[d],p=Number(c[d+1]);if(!Number.isSafeInteger(p)||p<0)throw new Error(`Sandbox returned an invalid artifact size: ${u}`);a.has(u)||a.set(u,p);}let o={};for(let d of [...a.keys()].sort()){let u=r.some(f=>d===f||d.startsWith(`${f.replace(/\/$/,"")}/`));if(!posix.isAbsolute(d)||!u)throw new Error(`Sandbox returned an invalid artifact path: ${d}`);let p=posix.relative(e,d),g=p&&p!==".."&&!p.startsWith("../")?p:d;o[g]=await t.files.read(d);}return o}var pt="EVOLVE_PROVIDER_RUNTIME_BINDING",ei="gemini-api-key";function gt(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";case "pi":return "pi";case "prime-agent":return "prime-agent";case "dsh":return "dsh";case "zcode":return "zcode";case "antigravity":return "antigravity";default:return null}}var ti={AGY_CLI_DISABLE_AUTO_UPDATE:"true"};function au(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`")}function Jo(t){return `${t}-${randomBytes(8).toString("hex")}`}function ni(t,e,n="newline"){let r=new Map;if(t){let i=n==="comma"?t.split(/,(?=\s*[^,:]+:)/):t.split(/\r?\n/);for(let s of i){let l=s.trim();if(!l)continue;let c=l.indexOf(":");if(c<=0)continue;let a=l.slice(0,c).trim(),o=l.slice(c+1).trim();r.set(a.toLowerCase(),`${a}: ${o}`);}}for(let[i,s]of Object.entries(e)){let l=i.toLowerCase();if(l===u&&r.has(l)&&n==="newline"){let c=r.get(l),a=c.slice(c.indexOf(":")+1).trim();r.set(l,`${i}: ${a},${s}`);}else r.set(l,`${i}: ${s}`);}return Array.from(r.values()).join(n==="comma"?", ":`
217
+ `)}var lu=262144,cu=128e3,du=new Set(["low","medium","high","xhigh","max"]);function zo(t){if(t)return du.has(t)?t:void 0}function ve(t){let e=t.replace(/\/+$/,"");return e.endsWith("/v1")?e:`${e}/v1`}function Wo(t,e){for(let n of t??[]){let r=n.extra?.stopReason;typeof r=="string"&&(e=r==="error"||r==="aborted"),n.update.sessionUpdate==="error"&&n.update.fatal&&(e=true);}return e}var ft=class{agentConfig;options;sandbox;hasRun=false;mcpConfigured=false;workingDir;homeDir;homeOwner;lastRunTimestamp;registry;sessionTag;previousSessionTag;sessionLogger;orgResolved=false;activeCommand;activeProcessId=null;activeOperationId=null;activeOperationKind=null;nextOperationId=0;interruptedOperations=new Set;sandboxState;agentState="idle";capturedSessionId;managedBrowserSession;providerRuntimeToken;managedSecretRuntimeToken;managedSecretProxy;credentialsSealed=false;skills;resolvedSkillsList;storage;lastCheckpointId;zodSchema;jsonSchema;schemaOptions;compiledValidator;constructor(e,n={}){if(Ye(e),Jn(n.observability),n.managedSecrets){if(e.isDirectMode)throw new Error("managed secrets are available only in gateway mode with EVOLVE_API_KEY");if(n.sandboxId)throw new Error("managed secrets cannot be used with an existing sandbox; grants are sandbox-scoped.");if(n.sandboxProvider&&!De(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");this.homeDir=r(n.sandboxCreateOptions?.user,n.sandboxCreateOptions?.homeDir);let r$1=n.sandboxCreateOptions?.homeOwner;if(this.homeOwner=r$1===void 0?void 0:Wn(r$1),this.homeDir!==q){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(ae(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 i=this.createAjvValidator();this.compiledValidator=i.compile(this.jsonSchema);}catch(i){throw new Error(`Invalid JSON Schema: ${i.message}`)}}this.registry=Y(e.type),this.sessionTag=Jo(n.sessionTagPrefix||"evolve");}browserRuntimeInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl,sessionId:this.managedBrowserSession.sessionId,sessionTag:this.managedBrowserSession.sessionTag}}browserResponseInfo(){if(this.managedBrowserSession)return {liveUrl:this.managedBrowserSession.liveUrl}}emitLifecycle(e,n){let r=this.browserRuntimeInfo();e?.onLifecycle?.({sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,timestamp:new Date().toISOString(),reason:n,...r?{browser:r}:{}});}invalidateActiveOperation(){this.activeCommand=void 0,this.activeProcessId=null,this.activeOperationId=null,this.activeOperationKind=null;}beginOperation(e,n,r,i){let s=++this.nextOperationId;return this.activeOperationId=s,this.activeOperationKind=e,this.activeCommand=n,this.activeProcessId=n.processId,this.sandboxState="running",this.agentState="running",this.emitLifecycle(r,i),s}finalizeOperation(e,n,r,i="idle",s="ready"){return this.activeOperationId!==e?false:(this.invalidateActiveOperation(),this.sandboxState=s,this.agentState=i,this.emitLifecycle(n,r),true)}watchBackgroundOperation(e,n,r,i,s,l=()=>false){let c=n==="run"?"run_background_complete":"command_background_complete",a=n==="run"?"run_background_failed":"command_background_failed",o=n==="run"?"run_interrupted":"command_interrupted";r.wait().then(async d=>{if(n==="run"&&s&&await this.removeZcodePerRunConfig(s),this.interruptedOperations.delete(e)||d.exitCode===130){this.finalizeOperation(e,i,o,"interrupted");return}n==="run"&&s&&await this.writeCapturedSessionId(s);let p=d.exitCode===0&&!l();this.finalizeOperation(e,i,p?c:a,p?"idle":"error");}).catch(async()=>{n==="run"&&s&&await this.removeZcodePerRunConfig(s),this.interruptedOperations.delete(e),this.finalizeOperation(e,i,a,"error");});}createAjvValidator(){let n={...Dn[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 ru({...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.loadCapturedSessionId(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_connected");else {await this.ensureManagedBrowserSession(e),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let i=this.buildEnvironmentVariables();this.sandbox=await n.create(this.buildSandboxCreateOptions(i)),r=!0,await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox),await this.setupManagedBrowser(this.sandbox),await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox),await this.setupWorkspace(this.sandbox),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_ready");}}catch(i){throw r&&this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(e,"sandbox_error"),i}return this.sandbox}resolveKimiMaxContextSize(){if(typeof this.agentConfig.maxContextSize=="number")return this.agentConfig.maxContextSize;let e=this.agentConfig.model||this.registry.defaultModel;return Te(this.registry,e)||Te(this.registry,this.resolveCommandModel(e))?this.registry.models.find(i=>i.alias===e||i.modelId===e)?.maxContextSize??this.registry.spendTrackingTomlProvider?.maxContextSize??lu:cu}reasoningEffort(){return Ui(this.agentConfig.type,this.agentConfig.reasoningEffort)}buildKimiDirectModelEnvs(){let e=ke(this.reasoningEffort()),n=zo(this.reasoningEffort()),r={KIMI_MODEL_NAME:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),KIMI_MODEL_API_KEY:this.agentConfig.apiKey,KIMI_MODEL_PROVIDER_TYPE:"kimi",KIMI_MODEL_MAX_CONTEXT_SIZE:String(this.resolveKimiMaxContextSize()),KIMI_MODEL_DEFAULT_THINKING:e?"true":"false",KIMI_MODEL_THINKING_MODE:e?"on":"off"};return n&&(r.KIMI_MODEL_THINKING_EFFORT=n),this.agentConfig.baseUrl&&(r.KIMI_MODEL_BASE_URL=this.agentConfig.baseUrl),r}buildEnvironmentVariables(){let e={},n=this.validatedUserSecretsForEnvironment();if(this.agentConfig.type==="kimi"&&this.agentConfig.isDirectMode)Object.assign(e,this.buildKimiDirectModelEnvs());else if(this.agentConfig.oauthFileContent)this.registry.oauthActivationEnv&&(e[this.registry.oauthActivationEnv.key]=this.registry.oauthActivationEnv.value);else if(!(this.agentConfig.type==="kimi"&&!this.agentConfig.isDirectMode)){if(!(!this.agentConfig.isDirectMode&&gt(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 if(!this.credentialRidesProviderFile()){let r=this.agentConfig.model?.split("/")[0],i=r?this.registry.providerEnvMap?.[r]:void 0,s=i?i.keyEnv:this.registry.apiKeyEnv,l=this.agentConfig.isOAuth&&this.registry.oauthEnv?this.registry.oauthEnv:s;e[l]=this.agentConfig.apiKey;}}}}if(this.agentConfig.isDirectMode&&!this.agentConfig.isOAuth&&this.agentConfig.type!=="kimi")this.agentConfig.baseUrl&&this.registry.baseUrlEnv&&(e[this.registry.baseUrlEnv]=this.agentConfig.baseUrl);else if(!this.agentConfig.isDirectMode){let r=a(this.registry.gatewayPath),i=this.requireActiveProviderRuntimeToken();if(this.registry.gatewayConfigEnv?e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()}):this.registry.baseUrlEnv&&this.agentConfig.type!=="kimi"&&(e[this.registry.baseUrlEnv]=i?.baseUrl??r),i&&(this.shouldExposeProviderRuntimeTokenEnv()&&(e[this.registry.apiKeyEnv]=i.token),this.agentConfig.type==="gemini"&&(e.GEMINI_DEFAULT_AUTH_TYPE=ei),this.registry.spendTrackingEnvs&&(e[pt]=i.bindingSecret)),!i){if(gt(this.agentConfig.type))throw new Error(`${this.agentConfig.type} gateway mode requires a Dashboard runtime token before sandbox setup`);e[h]=this.agentConfig.apiKey;}}if(this.agentConfig.externalGateway&&this.registry.gatewayConfigEnv&&(e[this.registry.gatewayConfigEnv]=this.buildGatewayConfigJson({})),this.agentConfig.externalGateway&&this.agentConfig.type==="gemini"&&(e.GEMINI_CLI_TRUST_WORKSPACE="true"),this.agentConfig.type==="claude"&&(e.IS_SANDBOX="1"),this.agentConfig.type==="antigravity"&&Object.assign(e,ti),this.managedBrowserSession&&this.options.managedBrowser&&Object.assign(e,Yr(this.options.managedBrowser.provider,this.managedBrowserSession).envs),this.managedSecretRuntimeToken&&Object.assign(e,Ja$1(this.managedSecretRuntimeToken)),n&&Object.assign(e,n),!this.agentConfig.isDirectMode&&this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";e[r]=ni(e[r],{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},i);}return !this.agentConfig.isDirectMode&&this.registry.spendTrackingEnvs&&(e[this.registry.spendTrackingEnvs.sessionTagEnv]=this.sessionTag),e}buildSandboxCreateOptions(e){return {...this.options.sandboxCreateOptions,envs:e,workingDirectory:this.workingDir}}validatedUserSecretsForEnvironment(){let e={...this.options.sandboxCreateOptions?.envs,...this.options.secrets};if(Object.keys(e).length===0)return;let n=new Set;this.agentConfig.isDirectMode||(n.add(h),n.add(pt),this.agentConfig.type==="gemini"&&n.add("GEMINI_DEFAULT_AUTH_TYPE"));let r=s=>{s&&n.add(s);};r(this.registry.apiKeyEnv),r(this.registry.baseUrlEnv);for(let s of Object.values(this.registry.providerEnvMap??{}))r(s.keyEnv);if(this.managedSecretRuntimeToken)for(let s of Ba())n.add(s);for(let s of this.managedSecretRuntimeToken?.env??[])r(s.envName);let i={};for(let[s,l]of Object.entries(e)){if(n.has(s))throw new Error(`${s} is reserved for Evolve-managed sandbox services and cannot be set with secrets`);s!==this.registry.gatewayConfigEnv&&(i[s]=l);}return i}async ensureManagedBrowserSession(e){this.managedBrowserSession||!this.options.managedBrowser||(this.managedBrowserSession=await Do(this.options.managedBrowser,this.sessionTag,{browserCredentials:this.options.browserCredentials!==void 0}),this.emitLifecycle(e,"browser_ready"));}async ensureProviderRuntimeToken(){let e=gt(this.agentConfig.type);if(this.agentConfig.isDirectMode||!e||!this.options.providerRouting||this.providerRuntimeToken)return;let n;try{n=await Bo(this.options.providerRouting,{provider:e,sessionTag:this.sessionTag});}catch(r){throw Lo(r)?new Error(`${e} runtime token endpoint is required in gateway mode: ${r.message}`):r}this.providerRuntimeToken=n,this.providerRuntimeToken&&this.sandbox?.sandboxId&&await this.bindProviderRuntimeToken(this.sandbox.sandboxId);}directSandboxProviderDeclaration(){let e=this.options.sandboxProvider;if(!e||De(e))return;let n=e.providerType;return c.includes(n)?n:void 0}async bindProviderRuntimeToken(e){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.directSandboxProviderDeclaration();if(!await Ko(this.options.providerRouting,{token:this.providerRuntimeToken.token,sandboxId:e,...n?{directSandboxProvider:n}:{}}))throw new Error("Failed to bind provider runtime token to sandbox")}async setupManagedBrowser(e){if(!this.managedBrowserSession||!this.options.managedBrowser)return;let n=Yr(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 No(this.options.managedBrowser,e);}catch(n){console.warn(`[Evolve] Managed browser cleanup failed: ${n.message}`);}}async closeProviderRuntimeToken(e=false){if(!this.providerRuntimeToken||!this.options.providerRouting)return;let n=this.providerRuntimeToken,r;for(let s=0;s<3;s++)try{if(!await jo(this.options.providerRouting,{token:n.token}))throw new Error("Dashboard returned ok=false");this.providerRuntimeToken=void 0;return}catch(l){r=l,s<2&&await new Promise(c=>setTimeout(c,100*(s+1)));}let i=`Provider runtime token cleanup failed: ${r.message}`;if(e)throw new Error(i);console.warn(`[Evolve] ${i}`),this.providerRuntimeToken=void 0;}async ensureManagedSecretRuntimeToken(){this.managedSecretRuntimeToken||!this.options.managedSecrets||(this.managedSecretRuntimeToken=await Ea({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 Fa({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||!Ia(this.managedSecretRuntimeToken))return;if(await e.files.makeDir(ya),await e.commands.run(`umask 077 && mkdir -p ${ya}/certs && chmod 700 ${ya} ${ya}/certs`,{timeoutMs:5e3}),await e.files.write(za$1,Ca),await e.files.write(Aa,Ka$1(this.managedSecretRuntimeToken)),await e.commands.run(`chmod 700 ${za$1} && chmod 600 ${Aa}`,{timeoutMs:5e3}),await e.commands.run(La(),{timeoutMs:3e4}),this.managedSecretProxy=await e.commands.spawn(Ma(),{timeoutMs:3e4}),(await e.commands.run(`python3 - <<'PY'
213
218
  import socket, sys, time
214
219
  for _ in range(50):
215
220
  try:
216
- s = socket.create_connection(("127.0.0.1", ${xa$1}), timeout=0.2)
221
+ s = socket.create_connection(("127.0.0.1", ${xa}), timeout=0.2)
217
222
  s.close()
218
223
  sys.exit(0)
219
224
  except OSError:
220
225
  time.sleep(0.1)
221
226
  sys.exit(1)
222
- PY`,{timeoutMs:1e4})).exitCode!==0)throw new Error("Managed secret egress proxy failed to start");await e.commands.run(Na(),{timeoutMs:5e3});}async closeManagedSecretRuntimeToken(){let e=this.managedSecretProxy;if(this.managedSecretProxy=void 0,e&&await e.kill().catch(()=>false),!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;let n=this.managedSecretRuntimeToken,r;try{for(let i=0;i<3;i++)try{if(!await Ga({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:n.token}))throw new Error("Dashboard returned ok=false");return}catch(s){r=s,i<2&&await new Promise(d=>setTimeout(d,100*(i+1)));}console.warn(`[Evolve] Managed secret runtime token cleanup failed: ${r.message}`);}finally{this.managedSecretRuntimeToken=void 0;}}buildGatewayConfigJson(e){let n=this.requireActiveProviderRuntimeToken(),r=this.agentConfig.externalGateway?this.agentConfig.baseUrl??Pt(a(this.registry.gatewayPath)):n?.baseUrl??Pt(a(this.registry.gatewayPath)),i=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),s={},d=this.options.secrets?.[this.registry.gatewayConfigEnv];if(d)try{s=JSON.parse(d);}catch{}let u=s.provider??{},l=u.litellm??{},o=l.options??{},a$1=l.models??{},c=a$1[i]??{},p=c.headers??{},g=this.agentConfig.type==="opencode"?zt(this.reasoningEffort()):void 0,f=c.variants??{},h=g?f[g]??{}:void 0;return s.provider={...u,litellm:{...l,npm:"@ai-sdk/openai-compatible",options:{...o,baseURL:r,apiKey:n?.token??this.agentConfig.apiKey},models:{...a$1,[i]:{...c,name:i,headers:{...p,...e},...g?{variants:{...f,[g]:{...h,reasoningEffort:g}}}:{}}}}},JSON.stringify(s)}activeProviderRuntimeToken(){let e=Ve(this.agentConfig.type);return e&&this.providerRuntimeToken?.provider===e?this.providerRuntimeToken:void 0}requireActiveProviderRuntimeToken(){let e=Ve(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}async ensureOrgResolved(){this.orgResolved||!this.options.org||this.agentConfig.isDirectMode||(await bs(this.options.org,this.agentConfig.apiKey),this.orgResolved=true);}ensureSessionLogger(e){if(this.sessionLogger)return;let n=this.options.sandboxProvider;this.sessionLogger=new Me({provider:n?.name||n?.providerType||"unknown",agent:this.agentConfig.type,model:this.agentConfig.model||this.registry.defaultModel,reasoningEffort:this.reasoningEffort(),sandboxId:e.sandboxId,tag:this.sessionTag,org:this.options.org,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?{[Zn]: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=Xn),this.registry.baseUrlEnv&&this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.baseUrlEnv]=e.baseUrl),this.registry.spendTrackingEnvs&&(n[_t]=e.bindingSecret),this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";n[r]=er(this.options.secrets?.[r],this.providerRuntimeHeaderUpdates(),i);}return n}buildRunEnvs(e){if(this.agentConfig.externalGateway)return this.buildProviderRuntimeProcessEnvs();if(this.agentConfig.isDirectMode)return;let n=this.buildProviderRuntimeProcessEnvs(),r=this.registry.customHeadersEnv;if(r){let s=this.options.secrets?.[r],d=this.registry.customHeadersFormat||"newline";return n[r]=er(s,{[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()},d),n}let i=this.registry.spendTrackingEnvs;return i?{...n,[i.sessionTagEnv]:this.sessionTag,[i.runTagEnv]:`${v}${e}`}:this.registry.gatewayConfigEnv?{...n,[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()})}:Object.keys(n).length>0?n:void 0}async writeCodexGatewayProviderConfig(e){if(this.agentConfig.type==="codex"){if(this.agentConfig.externalGateway){await ot(e,this.agentConfig.baseUrl||a(),void 0,void 0,this.homeDir);return}this.agentConfig.isDirectMode||!this.registry.spendTrackingEnvs||await ot(e,this.activeProviderRuntimeToken()?.baseUrl||this.agentConfig.baseUrl||a(),this.registry.spendTrackingEnvs,this.activeProviderRuntimeToken()?{[Zn]:_t}:void 0,this.homeDir);}}captureDroidSession(e,n){if(this.agentConfig.type!=="droid")return;let r=n?.find(s=>typeof s.sessionId=="string"&&s.sessionId.length>0)?.sessionId;if(r){this.droidSessionId=r;return}let i=this.extractDroidSessionId(e);i&&(this.droidSessionId=i);}extractDroidSessionId(e){try{return this.findDroidSessionId(JSON.parse(e))}catch{return}}findDroidSessionId(e){if(!e||typeof e!="object"||Array.isArray(e))return;let n=e,r=n.sessionId??n.session_id;return typeof r=="string"&&r.length>0?r:this.findDroidSessionId(n.result)??this.findDroidSessionId(n.params)??this.findDroidSessionId(n.notification)}droidSessionStatePath(){return `${this.homeDir}/.factory/evolve-session.json`}async loadDroidSessionState(e){if(!(this.agentConfig.type!=="droid"||this.droidSessionId))try{let n=await e.files.read(this.droidSessionStatePath());if(typeof n!="string")return;let r=JSON.parse(n);typeof r.sessionId=="string"&&r.sessionId.length>0&&(this.droidSessionId=r.sessionId);}catch{}}async writeDroidSessionState(e){this.agentConfig.type!=="droid"||!this.droidSessionId||(await e.files.makeDir(`${this.homeDir}/.factory`),await e.files.write(this.droidSessionStatePath(),JSON.stringify({sessionId:this.droidSessionId},null,2)));}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??e}droidSettingsModel(){let e=this.agentConfig.model||this.registry.defaultModel;return this.agentConfig.externalGateway?Mr(this.registry,e):this.resolveCommandModel(e)}async setupAgentAuth(e){if(this.agentConfig.oauthFileContent&&this.registry.oauthFileName){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir);await e.files.makeDir(n),await e.files.write(`${n}/${this.registry.oauthFileName}`,this.agentConfig.oauthFileContent);return}this.agentConfig.type==="gemini"&&(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&await this.writeGeminiGatewayAuthSettings(e),this.registry.setupCommand&&await e.commands.run(this.registry.setupCommand,{timeoutMs:3e4});}async writeGeminiGatewayAuthSettings(e){let n=M(this.registry.mcpConfig.settingsDir,this.homeDir),r=`${n}/${this.registry.mcpConfig.filename}`;await e.files.makeDir(n);let i={};try{let u=await e.files.read(r);typeof u=="string"&&u.trim()&&(i=JSON.parse(u));}catch(u){let l=u.message||"";if(!/not found|no such file|does not exist/i.test(l))throw u}let s=typeof i.security=="object"&&i.security!==null?i.security:{},d=typeof s.auth=="object"&&s.auth!==null?s.auth:{};i.security={...s,auth:{...d,selectedType:Xn}},await e.files.write(r,JSON.stringify(i,null,2));}async setupAgentPlugins(e){await is(this.agentConfig.type,e,this.options.plugins);}assertProviderRuntimeDoesNotExposeGatewayKey(e){if(!this.activeProviderRuntimeToken())return;let n=this.agentConfig.apiKey;for(let[r,i]of Object.entries(e))for(let s of Object.values(i.headers||{}))if(s.includes(n))throw new Error(`MCP server "${r}" would expose the Evolve API key inside the sandbox. Use managed agent-browser or remove this gateway-authenticated MCP server.`)}async setupWorkspace(e,n){let r=this.options.workspaceMode||"knowledge";if(r!=="task"){let s=r==="swe"?`${this.workingDir}/repo ${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`:`${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`;if(await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),!n?.skipSystemPrompt){let d=Dn({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),u=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(u,d);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);}let i={...this.options.mcpServers};if(this.options.integrations){let s=await Ii({...this.options.integrations,sessionTag:this.sessionTag});i={...i,integrations:{type:"http",url:s.url,headers:s.headers}};}if(this.options.browserCredentials){if(!this.options.managedBrowser||this.options.managedBrowser.provider!=="agent-browser")throw new Error("Browser credentials require managed remote agent-browser.");if(!this.managedBrowserSession?.id||!this.managedBrowserSession.sessionTag||!this.managedBrowserSession.browserAuthGrantToken)throw new Error("Managed browser session is missing browser credential grant data.");let s=await ms({apiKey:this.options.browserCredentials.apiKey,dashboardUrl:this.options.browserCredentials.dashboardUrl,browserSessionId:this.managedBrowserSession.id,sessionTag:this.managedBrowserSession.sessionTag,grantToken:this.managedBrowserSession.browserAuthGrantToken,config:this.options.browserCredentials.config});i={...i,[qn]:s};}await this.writeNativeAgentConfig(e),Object.keys(i).length>0&&(this.assertProviderRuntimeDoesNotExposeGatewayKey(i),await rn(this.agentConfig.type,e,this.workingDir,i,this.homeDir)),await this.writeCodexGatewayProviderConfig(e),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await nt(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.skills?.length&&await this.setupSkills(e);}async writeNativeAgentConfig(e){let n=this.effectiveNativeConfigDocument();if(!n)return;let r=this.registry.nativeConfig;if(!r)throw new Error(`Agent "${this.agentConfig.type}" has a config but no nativeConfig registry knowledge`);let i=M(r.path,this.homeDir),s=i.substring(0,i.lastIndexOf("/")),d=r.format==="toml"?stringify(n):JSON.stringify(n,null,2);await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),await e.files.write(i,d),await e.commands.run(`chmod 600 ${i}`,{timeoutMs:3e4});}effectiveNativeConfigDocument(){let e=this.agentConfig.config,n=this.agentConfig.preset,r=n?this.registry.presets?.[n]?.configStamp:void 0;return r?vt(e??{},r):e}presetCommandFlags(){let e=this.agentConfig.preset;return e?this.registry.presets?.[e]?.commandFlags:void 0}nativeConfigFlagPath(){let e=this.registry.nativeConfig;if(!(!e||e.delivery!=="settings-flag"||!this.effectiveNativeConfigDocument()))return M(e.path,this.homeDir)}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,r=M(n.targetDir,this.homeDir),i=await Cn(this.skills);this.resolvedSkillsList=i,await En(e,i,r);}resolvedSkills(){return this.resolvedSkillsList??[]}async uploadContextFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:`${this.workingDir}/context/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([s,d])=>({path:s.startsWith("/")?s:`${this.workingDir}/${s}`,data:d}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e,n){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"?e:Jl(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:n??this.hasRun,sessionId:this.agentConfig.type==="droid"?this.droidSessionId:void 0,reasoningEffort:this.reasoningEffort(),nativeConfigPath:this.nativeConfigFlagPath(),presetFlags:this.presetCommandFlags(),isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:!!this.agentConfig.externalGateway,skills:this.skills,homeDir:this.homeDir})}async writeKimiPerRunConfig(e,n){if(this.agentConfig.isDirectMode||!this.registry.spendTrackingTomlProvider)return;let r=this.requireActiveProviderRuntimeToken();await nn(e,{...this.registry.spendTrackingTomlProvider,maxContextSize:this.resolveKimiMaxContextSize()},{[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()},{baseUrl:Pt(r?.baseUrl??a(this.registry.gatewayPath)),apiKey:r?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:Te(this.reasoningEffort()),thinkingEffort:xs(this.reasoningEffort())},this.homeDir);}async run(e,n$1){if(this.credentialsSealed)throw new Error("Agent credentials are sealed; this Evolve instance cannot run the agent again");_n(e);let{prompt:r,timeoutMs:i=n,background:s=false,checkpointComment:d,resume:u$1}=e,{from:l}=e;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background run to finish, or create a new Evolve instance.");if(await this.ensureOrgResolved(),l&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(l==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let v=await Jn(this.storage);if(!v)throw new Error('No checkpoints found for from: "latest".');l=v.id;}if(l){if(!this.storage)throw new Error("Storage not configured. Call .withStorage() before using 'from'.");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");await this.ensureManagedBrowserSession(n$1),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let v=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n$1,"sandbox_boot");try{this.sandbox=await this.options.sandboxProvider.create(this.buildSandboxCreateOptions(v)),await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox);let x=await qi(this.sandbox,this.storage,l);if(await this.setupManagedBrowser(this.sandbox),x.agentType&&x.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${x.agentType}, current: ${this.agentConfig.type})`);let E=this.options.workspaceMode||"knowledge";if(x.workspaceMode&&x.workspaceMode!==E)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${x.workspaceMode}, current: ${E})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let I=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!I}),await this.loadDroidSessionState(this.sandbox),this.hasRun=!0,this.lastCheckpointId=l,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n$1,"sandbox_ready");}catch(x){throw this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(n$1,"sandbox_error"),x}}let o=await this.getSandbox(n$1);await this.ensureProviderRuntimeToken(),await this.loadDroidSessionState(o),this.lastRunTimestamp=Date.now(),this.ensureSessionLogger(o),this.sessionLogger?.writePrompt(r),this.requiresPreRunDashboardIngest()&&await this.flushSessionLoggerWithTimeout();let a$1=this.buildCommand(r,u$1),c=randomUUID(),p=this.buildRunEnvs(c);if(await this.writeCodexGatewayProviderConfig(o),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await nt(o,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir),this.agentConfig.type==="qwen"&&await Yt(o,Te(this.reasoningEffort()),this.homeDir),await this.writeKimiPerRunConfig(o,c),(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&this.registry.droidGatewaySettings){let v$1=!!this.agentConfig.externalGateway,x=v$1?void 0:this.requireActiveProviderRuntimeToken();await it(o,{...this.registry.droidGatewaySettings,model:this.droidSettingsModel(),baseUrl:v$1?this.agentConfig.baseUrl??a():Pt(x?.baseUrl??a()),apiKeyEnv:this.registry.apiKeyEnv},v$1?{}:{[t]:this.sessionTag,[u]:`${v}${c}`,...this.providerRuntimeHeaderUpdates()},this.homeDir);}let g="",f=ne(this.agentConfig.type),h=v=>{g+=v;let x=g.split(`
223
- `);g=x.pop()??"";for(let E of x){if(!E.trim())continue;let I=f(E);if(this.captureDroidSession(E,I),this.sessionLogger?.writeEventParsed(E,I),n$1?.onStdout?.(E+`
224
- `),I&&n$1?.onContent)for(let ze of I)n$1.onContent(ze);}},m=v=>{n$1?.onStderr?.(v);},y=await o.commands.spawn(a$1,{cwd:this.workingDir,timeoutMs:i,envs:p,onStdout:h,onStderr:m}),w=this.beginOperation("run",y,n$1,"run_start");if(this.hasRun=true,s)return this.watchBackgroundOperation(w,"run",y,n$1,o),{sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:0,stdout:`Background process started with ID ${y.processId}`,stderr:""};let b;try{b=await y.wait();}catch(v){throw this.interruptedOperations.delete(w),this.finalizeOperation(w,n$1,"run_failed","error"),v}if(this.interruptedOperations.delete(w)||b.exitCode===130?this.finalizeOperation(w,n$1,"run_interrupted","interrupted"):b.exitCode===0?this.finalizeOperation(w,n$1,"run_complete","idle"):this.finalizeOperation(w,n$1,"run_failed","error"),g.trim()){let v=f(g);if(this.captureDroidSession(g,v),this.sessionLogger?.writeEventParsed(g,v),n$1?.onStdout?.(g+`
225
- `),v&&n$1?.onContent)for(let x of v)n$1.onContent(x);}await this.writeDroidSessionState(o),this.sessionLogger&&!s&&await this.flushSessionLoggerWithTimeout();let C;if(this.storage&&!s&&b.exitCode===0)try{C=await Gn(o,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:d,parentId:this.lastCheckpointId}),this.lastCheckpointId=C.id;}catch(v){console.warn(`[Evolve] Auto-checkpoint failed: ${v.message}`);}return {sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:c,exitCode:b.exitCode,stdout:b.stdout,stderr:b.stderr,checkpoint:C}}async executeCommand(e,n$1={},r){let{timeoutMs:i=n,background:s=false}=n$1;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background command to finish, or create a new Evolve instance.");let d=await this.getSandbox(r);this.credentialsSealed||await this.ensureProviderRuntimeToken(),this.lastRunTimestamp=Date.now(),this.requiresPreRunDashboardIngest()&&(this.ensureSessionLogger(d),this.sessionLogger?.writePrompt(e),await this.flushSessionLoggerWithTimeout());let u="",l="",o=m=>{u+=m,r?.onStdout?.(m);},a=m=>{l+=m,r?.onStderr?.(m);},c=this.credentialsSealed?{}:this.buildProviderRuntimeProcessEnvs(),p=await d.commands.spawn(e,{cwd:this.workingDir,timeoutMs:i,envs:Object.keys(c).length>0?c:void 0,onStdout:o,onStderr:a}),g=this.beginOperation("command",p,r,"command_start");if(s)return this.watchBackgroundOperation(g,"command",p,r),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${p.processId}`,stderr:""};let f;try{f=await p.wait();}catch(m){throw this.interruptedOperations.delete(g),this.finalizeOperation(g,r,"command_failed","error"),m}return this.interruptedOperations.delete(g)||f.exitCode===130?this.finalizeOperation(g,r,"command_interrupted","interrupted"):f.exitCode===0?this.finalizeOperation(g,r,"command_complete","idle"):this.finalizeOperation(g,r,"command_failed","error"),{sandboxId:d.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:f.exitCode,stdout:u||f.stdout||"",stderr:l||f.stderr||""}}async sealCredentials(){if(this.credentialsSealed)return;if(!this.sandbox)throw new Error("No active sandbox. Call run() or executeCommand() first.");if(this.activeCommand)throw new Error("Cannot seal credentials while a process is running.");if(this.agentConfig.isDirectMode&&!this.agentConfig.externalGateway)throw new Error("Credential sealing requires gateway mode; direct provider credentials cannot be revoked by Evolve");if([this.options.secrets&&Object.keys(this.options.secrets).length>0,this.options.sandboxCreateOptions?.envs&&Object.keys(this.options.sandboxCreateOptions.envs).length>0,this.options.managedSecrets,this.options.integrations,this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0,this.options.managedBrowser,this.options.browserCredentials].some(Boolean))throw new Error("Credential sealing requires a credential-minimal sandbox: omit secrets, managed secrets, integrations, MCP servers, and browser credentials");if(this.agentConfig.externalGateway){await this.agentConfig.externalGateway.revoke(),this.credentialsSealed=true;return}if(!this.providerRuntimeToken||!this.options.providerRouting)throw new Error("Cannot seal credentials: no active provider runtime token to revoke. Without a gateway-issued runtime token the sandbox may hold credentials Evolve cannot revoke, so sealing would be a false guarantee.");await this.closeProviderRuntimeToken(true),this.credentialsSealed=true;}isSealed(){return this.credentialsSealed}async collectArtifacts(e){if(!this.credentialsSealed)throw new Error("Call sealCredentials() before collecting artifacts.");if(!this.sandbox)throw new Error("No active sandbox.");if(this.activeCommand)throw new Error("Cannot collect artifacts while a process is running.");return ks(this.sandbox,this.workingDir,e)}async uploadContext(e){let n=await this.getSandbox();await this.uploadContextFiles(n,e);}async uploadFiles(e){let n=await this.getSandbox();await this.uploadWorkspaceFiles(n,e);}async uploadFileFromPath(e,n){let r=await this.getSandbox(),i=e.startsWith("/")?e:`${this.workingDir}/${e}`,s=i.substring(0,i.lastIndexOf("/"));if(s&&await r.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),r.files.writeFromPath){await r.files.writeFromPath(i,n);return}let{readFile:d}=await import('fs/promises');await r.files.write(i,await d(n));}async getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,i=e?"":"-maxdepth 1",d=(await n.commands.run(`find ${r} ${i} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
226
- `).filter(Boolean),u=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,l=[],o=`${r}/`;for(let f of d){let[h,m]=f.split("|");if(!h||!m)continue;let y=parseInt(m,10);u>0&&y<u||l.push(h);}let a={},c=await Promise.all(l.map(async f=>{try{let h=await n.files.read(f);return {relativePath:f.startsWith(o)?f.slice(o.length):f.split("/").pop()||f,content:h}}catch{return null}}));for(let f of c)f&&(a[f.relativePath]=f.content);if(!this.zodSchema&&!this.jsonSchema)return {files:a,data:null};let p=a["result.json"];if(!p)return {files:a,data:null,error:"Schema provided but agent did not create output/result.json"};let g=typeof p=="string"?p:new TextDecoder().decode(p);try{let f=JSON.parse(g);if(this.zodSchema){let h=this.zodSchema.safeParse(f);return h.success?{files:a,data:h.data}:{files:a,data:null,error:`Schema validation failed: ${h.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(f))return {files:a,data:f};{let m=this.compiledValidator.errors?.map(y=>`${y.instancePath} ${y.message}`).join(", ")||"Unknown validation error";return {files:a,data:null,error:`Schema validation failed: ${m}`,rawData:g}}}return {files:a,data:null}}catch(f){return {files:a,data:null,error:`Failed to parse result.json: ${f.message}`,rawData:g}}}async checkpoint(e){if(!this.storage)throw new Error("Storage not configured. Call .withStorage().");if(!this.sandbox)throw new Error("No active sandbox. Call run() first.");let n=await Gn(this.sandbox,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:e?.comment,parentId:this.lastCheckpointId});return this.lastCheckpointId=n.id,n}getSession(){return this.sandbox?.sandboxId||this.options.sandboxId||null}async setSession(e){if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot switch sandboxes");if(this.options.managedSecrets)throw new Error("setSession() cannot be used with managed secrets; managed secret grants are sandbox-scoped.");if(this.options.sandboxCreateOptions?.user)throw new Error("setSession() cannot be used with a configured sandbox user; the user cannot be enforced on an existing sandbox.");if(this.activeCommand&&!await this.interrupt())throw new Error("Cannot switch session while an active process is running and could not be interrupted.");await this.rotateSession(),await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession(),this.options.sandboxId=e,this.sandbox=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="idle",this.hasRun=true,this.lastCheckpointId=void 0;}async pause(e){this.sandbox&&(this.activeCommand&&await this.interrupt(e),await this.sandbox.pause(),this.sandboxState="paused",this.agentState="idle",this.emitLifecycle(e,"sandbox_pause"));}async resume(e){this.sandbox&&this.options.sandboxProvider&&(this.sandbox=await this.options.sandboxProvider.connect(this.sandbox.sandboxId),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_resume"));}async interrupt(e){if(!this.activeCommand&&!this.activeProcessId)return false;let n=this.activeOperationId,r=this.activeOperationKind,i=false;try{this.activeCommand?i=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(i=await this.sandbox.commands.kill(this.activeProcessId));}catch{i=false;}if(!i)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let s=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,s),i}status(){let e=this.browserRuntimeInfo();return {sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,activeProcessId:this.activeProcessId,hasRun:this.hasRun,timestamp:new Date().toISOString(),...e?{browser:e}:{}}}async kill(e){await this.rotateSession();let n;try{this.activeCommand&&await this.interrupt(e),this.sandbox&&(await this.sandbox.kill(),this.sandbox=void 0);}catch(r){n=r;}finally{await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession();}if(n)throw n;this.options.sandboxId=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="stopped",this.agentState="idle",this.hasRun=false,this.lastCheckpointId=void 0,this.emitLifecycle(e,"sandbox_killed");}async getHost(e){return (await this.getSandbox()).getHost(e)}getAgentType(){return this.agentConfig.type}getSessionTag(){return !this.sandbox&&!this.sessionLogger?null:this.sessionTag}getSessionTimestamp(){return this.sessionLogger?.getTimestamp()||null}async flushObservability(){await this.sessionLogger?.flush();}async rotateSession(){let e=!!this.sessionLogger;this.sessionLogger&&(await this.sessionLogger.close(),this.sessionLogger=void 0),e&&(this.previousSessionTag=this.sessionTag),this.sessionTag=Ss(this.options.sessionTagPrefix||"evolve");}async fetchSpend(e){if(this.agentConfig.isDirectMode)throw new Error("Cost tracking requires gateway mode (set EVOLVE_API_KEY).");let n=this.agentConfig.apiKey;if(!n)throw new Error("Cost tracking requires an API key.");let r=process.env.EVOLVE_DASHBOARD_URL||s,i=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Spend query failed (${i.status}): ${s}`)}return i}resolveSpendTag(){if(this.sandbox||this.sessionLogger)return this.sessionTag;if(this.previousSessionTag)return this.previousSessionTag;throw new Error("No session to query. Call run() first.")}normalizeRunCost(e,n){return {...e,asOf:e.asOf??n.asOf,isComplete:e.isComplete??n.isComplete,truncated:e.truncated??n.truncated}}normalizeSessionCost(e){let n={asOf:e.asOf,isComplete:e.isComplete,truncated:e.truncated};return {...e,runs:e.runs.map(r=>this.normalizeRunCost(r,n))}}async getSessionCost(){let e=this.resolveSpendTag(),n=new URLSearchParams({tag:e}),i=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(i)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let d=new URLSearchParams({tag:n,runId:e.runId}),l=await(await this.fetchSpend(d)).json();return this.normalizeRunCost(l,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),i=e.index>0?e.index-1:r.runs.length+e.index,s=r.runs[i];if(!s)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return s}};function ql(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function Yl(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 Zl(t){return await t.text().catch(()=>"")}async function Cs(t,e,n={}){let r=await fetch(`${ql(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${Yl(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 Zl(r)}`);return r.status===204?{}:await r.json()}var It=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 Cs(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await Cs(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function tr(t={}){return new It(t)}var Je=class extends EventEmitter{config={};agent;fallbackSandboxState="stopped";fallbackAgentState="idle";fallbackHasRun=false;constructor(){super();}on(e,n){return super.on(e,n)}off(e,n){return super.off(e,n)}emit(e,...n){return super.emit(e,...n)}withAgent(e){return e&&(Oe(e),bt(e),this.config.agent=e,this._cachedGatewayOverrides=null),this}withSandbox(e){return this.config.sandbox=e,this}withSandboxCreateOptions(e){return this.config.sandboxCreateOptions={...e,envs:e.envs?{...e.envs}:void 0,metadata:e.metadata?{...e.metadata}:void 0},this}withWorkingDirectory(e){return this.config.workingDirectory=e,this}withWorkspaceMode(e){return this.config.workspaceMode=e,this}withSecrets(e){return this.config.secrets={...this.config.secrets,...e},this}withManagedSecrets(e){return this.config.managedSecrets=e,this}withSession(e){return this.config.sandboxId=e,this.agent||(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this}withSystemPrompt(e){return this.config.systemPrompt=e,this}withContext(e){return this.config.context={...this.config.context,...e},this}withFiles(e){return this.config.files={...this.config.files,...e},this}withMcpServers(e){return this.config.mcpServers={...this.config.mcpServers,...e},this}withBrowser(e={provider:"agent-browser",remote:true}){return e===false?delete this.config.browser:this.config.browser=e,this}withBrowserCredentials(e={}){return this.config.browserCredentials=e,this}withPlugins(e){let n=Array.isArray(e)?e:[e];return this.config.plugins=[...this.config.plugins??[],...n],this}withSkills(e){return this.config.skills=e,this}withSchema(e,n){return this.config.schema=e,n&&(F(e)?console.warn("[Evolve] schemaOptions ignored for Zod schemas - use .passthrough(), .strip(), z.coerce instead"):this.config.schemaOptions=n),this}withSessionTagPrefix(e){return this.config.sessionTagPrefix=e,this}withOrg(e){return this.config.org=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=Oi;static browserCredentials=Yn;static browserProfiles=tr;static managedSecrets=Da;async initializeAgent(){let e=kt(this.config.agent),n=D(e.type);if(this.config.integrations&&e.isDirectMode)throw new Error("withIntegrations() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&e.isDirectMode)throw new Error("withManagedSecrets() is available only in gateway mode with EVOLVE_API_KEY");if(this.config.managedSecrets&&this.config.sandboxId)throw new Error("withManagedSecrets() cannot be used with withSession(); managed secret grants are sandbox-scoped.");let r=Ha$1(this.config.managedSecrets,n);if(r&&this.config.sandbox&&!fe(this.config.sandbox))throw new Error("withManagedSecrets() requires an Evolve-managed sandbox; remove withSandbox() or pass a managed sandbox provider.");let i=this.config.sandbox??(r?await Ae(e.apiKey):await St()),s$1={},d,u,l=this.config.skills,o;if(this.config.browser){let p=ds(this.config.browser);if(o=p,p.provider==="browser-use"){if(e.isDirectMode)throw new Error('withBrowser("browser-use") requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.');s$1=g(e.apiKey);}if((p.provider==="actionbook"||p.provider==="agent-browser")&&p.managed){if(e.isDirectMode)throw new Error(`Managed browser provider "${p.provider}" requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.`);d=p.provider==="actionbook"?An:Ci,u={provider:p.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,...p.profile?{profile:p.profile}:{}};}if(p.profile&&!p.managed)throw new Error('withBrowser({ profile }) requires managed remote browser mode. Use .withBrowser({ profile }) or .withBrowser({ provider: "agent-browser", remote: true, profile }).')}if(this.config.browserCredentials!==void 0){if(this.config.sandboxId)throw new Error("withBrowserCredentials() cannot be used with withSession(); browser login tokens are run-scoped.");if(e.isDirectMode)throw new Error("withBrowserCredentials() requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.");if(!o||o.provider!=="agent-browser"||!o.managed)throw new Error('withBrowserCredentials() requires .withBrowser() or .withBrowser({ provider: "agent-browser", remote: true }).');if(this.config.mcpServers?.["browser-login"])throw new Error('withBrowserCredentials() reserves the "browser-login" MCP server name.')}let a=this.config.storage!==void 0?Et(this.config.storage,!e.isDirectMode,s,e.isDirectMode?void 0:e.apiKey):void 0,c={sandboxProvider:i,sandboxCreateOptions:this.config.sandboxCreateOptions,secrets:this.config.secrets,managedSecrets:r?{secrets:r,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,sandboxId:this.config.sandboxId,workingDirectory:this.config.workingDirectory,workspaceMode:this.config.workspaceMode,systemPrompt:this.config.systemPrompt,context:this.config.context,files:this.config.files,mcpServers:{...s$1,...this.config.mcpServers},browserPrompt:d,managedBrowser:u,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,config:this.config.browserCredentials}:void 0,plugins:this.config.plugins,skills:l,schema:this.config.schema,schemaOptions:this.config.schemaOptions,sessionTagPrefix:this.config.sessionTagPrefix,org:this.config.org,observability:this.config.observability,integrations:this.config.integrations?{...this.config.integrations,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,providerRouting:e.isDirectMode?void 0:{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s},storage:a};this.agent=new Ge(e,c);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,i=this.listenerCount("lifecycle")>0;return {onStdout:e?s=>this.emit("stdout",s):void 0,onStderr:n?s=>this.emit("stderr",s):void 0,onContent:r?s=>this.emit("content",s):void 0,onLifecycle:i?s=>this.emit("lifecycle",s):void 0}}emitLifecycleFromStatus(e){if(this.listenerCount("lifecycle")===0)return;let n=this.status();this.emit("lifecycle",{sandboxId:n.sandboxId,sandbox:n.sandbox,agent:n.agent,timestamp:new Date().toISOString(),reason:e,...n.browser?{browser:n.browser}:{}});}async run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d}){if(i&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let u=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:d},u)}async executeCommand(e,n={}){this.agent||await this.initializeAgent();let r=this.createStreamCallbacks();return this.agent.executeCommand(e,n,r)}async prepareSandbox(){this.agent||await this.initializeAgent();let e=this.createStreamCallbacks();return (await this.agent.getSandbox(e)).sandboxId}async updateNetwork(e){if(!this.agent)throw new Error("No sandbox yet. Call prepareSandbox(), run() or executeCommand() before updateNetwork().");let n=await this.agent.getSandbox(this.createStreamCallbacks());if(typeof n.updateNetwork!="function")throw new Error(`The ${this.config.sandbox?.providerType??"configured"} sandbox provider cannot change network policy after start. Create the sandbox with the policy it needs for its whole lifetime, or use a provider that supports runtime changes.`);await n.updateNetwork(e);}async sealCredentials(){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");await this.agent.sealCredentials();}isSealed(){return this.agent?.isSealed()??false}resolvedSkills(){return this.agent?.resolvedSkills()??[]}async collectArtifacts(e){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");return this.agent.collectArtifacts(e)}async interrupt(){if(!this.agent)return false;let e=this.createStreamCallbacks();return this.agent.interrupt(e)}async uploadContext(e){return this.agent||await this.initializeAgent(),this.agent.uploadContext(e)}async uploadFiles(e){return this.agent||await this.initializeAgent(),this.agent.uploadFiles(e)}async uploadFileFromPath(e,n){return this.agent||await this.initializeAgent(),this.agent.uploadFileFromPath(e,n)}async getOutputFiles(e=false){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.getOutputFiles(e)}async checkpoint(e){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.checkpoint(e)}_cachedGatewayOverrides=null;resolveGatewayOverrides(){if(this._cachedGatewayOverrides!==null)return this._cachedGatewayOverrides||void 0;try{let e=kt(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:s,gatewayApiKey:e.apiKey},this._cachedGatewayOverrides}catch{}this._cachedGatewayOverrides=void 0;}async listCheckpoints(e){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Wn(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return Wn(this.config.storage,this.resolveGatewayOverrides()||{})}getSession(){return this.agent?this.agent.getSession():this.config.sandboxId??null}async setSession(e){if(this.config.managedSecrets)throw new Error("setSession() cannot be used with withManagedSecrets(); managed secret grants are sandbox-scoped.");this.agent?await this.agent.setSession(e):(this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.fallbackHasRun=true),this.config.sandboxId=e;}status(){return this.agent?this.agent.status():{sandboxId:this.config.sandboxId??null,sandbox:this.fallbackSandboxState,agent:this.fallbackAgentState,activeProcessId:null,hasRun:this.fallbackHasRun,timestamp:new Date().toISOString()}}async pause(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.pause(e);return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).pause(),this.fallbackSandboxState="paused",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_pause"));}async resume(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.resume(e);return}this.config.sandboxId&&this.config.sandbox&&(await this.config.sandbox.connect(this.config.sandboxId),this.fallbackSandboxState="ready",this.fallbackAgentState="idle",this.emitLifecycleFromStatus("sandbox_resume"));}async kill(){if(this.agent){let e=this.createStreamCallbacks();await this.agent.kill(e),this.config.sandboxId=void 0,this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false;return}this.config.sandboxId&&this.config.sandbox&&(await(await this.config.sandbox.connect(this.config.sandboxId)).kill(),this.fallbackSandboxState="stopped",this.fallbackAgentState="idle",this.fallbackHasRun=false,this.emitLifecycleFromStatus("sandbox_killed"),this.config.sandboxId=void 0);}async getHost(e){return this.agent||await this.initializeAgent(),this.agent.getHost(e)}getSessionTag(){return this.agent?.getSessionTag()||null}getSessionTimestamp(){return this.agent?.getSessionTimestamp()||null}async flushObservability(){await this.agent?.flushObservability();}async getSessionCost(){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getSessionCost()}async getRunCost(e){if(!this.agent)throw new Error("No agent initialized. Call run() first.");return this.agent.getRunCost(e)}};var ve=class{permits;queue=[];constructor(e){if(e<1)throw new Error("Semaphore max must be >= 1");this.permits=e;}async use(e){await this.acquire();try{return await e()}finally{this.release();}}acquire(){return this.permits>0?(this.permits--,Promise.resolve()):new Promise(e=>this.queue.push(e))}release(){this.queue.length>0?this.queue.shift()():this.permits++;}};var re=Symbol.for("evolve.SwarmResult"),be=class t extends Array{get success(){return this.filter(e=>e.status==="success")}get filtered(){return this.filter(e=>e.status==="filtered")}get error(){return this.filter(e=>e.status==="error")}static from(e){let n=new t;return n.push(...e),n}};var nr=class t{config;semaphore;constructor(e={}){let n$1=e.concurrency??o;if(n$1>p)throw new Error(`concurrency=${n$1} exceeds max ${p}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n$1,timeoutMs:e.timeoutMs??n,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new ve(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:i,verify:s}=e,d=e.retry??this.config.retry,u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs;if(i&&s)throw new Error("map() cannot use both bestOf and verify options simultaneously");let o=await Promise.all(n.map((a,c)=>i?this.executeMapItemWithBestOf(a,r,c,u,e,l,d):s?this.executeMapItemWithVerify(a,r,c,u,e,l,d):d?B(p=>this.executeMapItem(a,r,c,u,e,l,p),d,c):this.executeMapItem(a,r,c,u,e,l)));return be.from(o)}async filter(e){let{items:n,prompt:r,condition:i,verify:s}=e,d=e.retry??this.config.retry,u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=await Promise.all(n.map((c,p)=>s?this.executeFilterItemWithVerify(c,r,p,u,e,l,d):d?B(g=>this.executeFilterItem(c,r,p,u,e,l,g),d,p):this.executeFilterItem(c,r,p,u,e,l))),a=[];for(let c of o)if(c.status==="error")a.push(c);else if(c.data!==null)try{i(c.data)?a.push(c):a.push({...c,status:"filtered"});}catch(p){a.push({...c,status:"error",data:null,error:`Condition function threw: ${p.message}`});}return be.from(a)}async reduce(e){let{items:n,prompt:r,verify:i}=e,s=e.retry??this.config.retry,d=this.generateOperationId(),u=e.timeoutMs??this.config.timeoutMs,l=[],o=[];n.forEach((k,C)=>{l.push(this.getFiles(k)),o.push(this.getIndex(k,C));});let a={};l.forEach((k,C)=>{Object.entries(k).forEach(([v,x])=>{a[`item_${o[C]}/${v}`]=x;});});let c=xt(a),p=Z(Ri,{fileTree:c}),g=e.systemPrompt?`${p}
227
+ PY`,{timeoutMs:1e4})).exitCode!==0)throw new Error("Managed secret egress proxy failed to start");await e.commands.run(Na(),{timeoutMs:5e3});}async closeManagedSecretRuntimeToken(){let e=this.managedSecretProxy;if(this.managedSecretProxy=void 0,e&&await e.kill().catch(()=>false),!this.managedSecretRuntimeToken||!this.options.managedSecrets)return;let n=this.managedSecretRuntimeToken,r;try{for(let i=0;i<3;i++)try{if(!await Ga$1({apiKey:this.options.managedSecrets.apiKey,dashboardUrl:this.options.managedSecrets.dashboardUrl},{token:n.token}))throw new Error("Dashboard returned ok=false");return}catch(s){r=s,i<2&&await new Promise(l=>setTimeout(l,100*(i+1)));}console.warn(`[Evolve] Managed secret runtime token cleanup failed: ${r.message}`);}finally{this.managedSecretRuntimeToken=void 0;}}buildGatewayConfigJson(e){let n=this.requireActiveProviderRuntimeToken(),r=this.agentConfig.externalGateway?this.agentConfig.baseUrl??ve(a(this.registry.gatewayPath)):n?.baseUrl??ve(a(this.registry.gatewayPath)),i=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),s={},l=this.options.secrets?.[this.registry.gatewayConfigEnv];if(l)try{s=JSON.parse(l);}catch{}let c=s.provider??{},a$1=c.litellm??{},o=a$1.options??{},d=a$1.models??{},u=d[i]??{},p=u.headers??{},g=this.agentConfig.type==="opencode"?Ln(this.reasoningEffort()):void 0,f=u.variants??{},h=g?f[g]??{}:void 0;return s.provider={...c,litellm:{...a$1,npm:"@ai-sdk/openai-compatible",options:{...o,baseURL:r,apiKey:n?.token??this.agentConfig.apiKey},models:{...d,[i]:{...u,name:i,headers:{...p,...e},...g?{variants:{...f,[g]:{...h,reasoningEffort:g}}}:{}}}}},JSON.stringify(s)}activeProviderRuntimeToken(){let e=gt(this.agentConfig.type);return e&&this.providerRuntimeToken?.provider===e?this.providerRuntimeToken:void 0}requireActiveProviderRuntimeToken(){let e=gt(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}async ensureOrgResolved(){this.orgResolved||!this.options.org||this.agentConfig.isDirectMode||(await Vo(this.options.org,this.agentConfig.apiKey),this.orgResolved=true);}ensureSessionLogger(e){if(this.sessionLogger)return;let n=this.options.sandboxProvider;this.sessionLogger=new nt({provider:n?.name||n?.providerType||"unknown",agent:this.agentConfig.type,model:this.agentConfig.model||this.registry.defaultModel,reasoningEffort:this.reasoningEffort(),sandboxId:e.sandboxId,tag:this.sessionTag,org:this.options.org,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&&!this.credentialRidesProviderFile()}credentialRidesProviderFile(){return this.registry.zcodeProviderConfig!==void 0}buildProviderRuntimeProcessEnvs(){if(this.agentConfig.externalGateway){if(this.agentConfig.type==="kimi")return this.buildKimiDirectModelEnvs();let r=this.credentialRidesProviderFile()?{}:{[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"),this.agentConfig.type==="antigravity"&&Object.assign(r,ti),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=ei),this.agentConfig.type==="antigravity"&&Object.assign(n,ti),this.registry.baseUrlEnv&&this.shouldExposeProviderRuntimeTokenEnv()&&(n[this.registry.baseUrlEnv]=e.baseUrl),this.registry.spendTrackingEnvs&&(n[pt]=e.bindingSecret),this.registry.customHeadersEnv){let r=this.registry.customHeadersEnv,i=this.registry.customHeadersFormat||"newline";n[r]=ni(this.options.secrets?.[r],this.providerRuntimeHeaderUpdates(),i);}return n}buildRunEnvs(e){if(this.agentConfig.externalGateway)return this.buildProviderRuntimeProcessEnvs();if(this.agentConfig.isDirectMode)return;let n=this.buildProviderRuntimeProcessEnvs(),r=this.registry.customHeadersEnv;if(r){let s=this.options.secrets?.[r],l=this.registry.customHeadersFormat||"newline";return n[r]=ni(s,{[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()},l),n}let i=this.registry.spendTrackingEnvs;return i?{...n,[i.sessionTagEnv]:this.sessionTag,[i.runTagEnv]:`${v}${e}`}:this.registry.gatewayConfigEnv?{...n,[this.registry.gatewayConfigEnv]:this.buildGatewayConfigJson({[t]:this.sessionTag,[u]:`${v}${e}`,...this.providerRuntimeHeaderUpdates()})}:Object.keys(n).length>0?n:void 0}async writeCodexGatewayProviderConfig(e){if(this.agentConfig.type==="codex"){if(this.agentConfig.externalGateway){await Gt(e,this.agentConfig.baseUrl||a(),void 0,void 0,this.homeDir,this.homeOwner);return}this.agentConfig.isDirectMode||!this.registry.spendTrackingEnvs||await Gt(e,this.activeProviderRuntimeToken()?.baseUrl||this.agentConfig.baseUrl||a(),this.registry.spendTrackingEnvs,this.activeProviderRuntimeToken()?{[kn]:pt}:void 0,this.homeDir,this.homeOwner);}}captureHarnessSessionId(e,n){if(!this.registry.sessionIdStateFile)return;let r=n?.find(s=>typeof s.sessionId=="string"&&s.sessionId.length>0)?.sessionId;if(r){this.capturedSessionId=r;return}let i=this.extractSessionIdFromLine(e);i&&(this.capturedSessionId=i);}extractSessionIdFromLine(e){try{return this.findSessionIdInLine(JSON.parse(e))}catch{return}}findSessionIdInLine(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.findSessionIdInLine(n.result)??this.findSessionIdInLine(n.params)??this.findSessionIdInLine(n.notification)}sessionIdStatePath(){let e=this.registry.sessionIdStateFile;return e?D(e,this.homeDir):void 0}async loadCapturedSessionId(e){let n=this.sessionIdStatePath();if(!(!n||this.capturedSessionId))try{let r=await e.files.read(n);if(typeof r!="string")return;let i=JSON.parse(r);typeof i.sessionId=="string"&&i.sessionId.length>0&&(this.capturedSessionId=i.sessionId);}catch{}}async writeCapturedSessionId(e){let n=this.sessionIdStatePath();!n||!this.capturedSessionId||await Z(e,n,JSON.stringify({sessionId:this.capturedSessionId},null,2),{homeDir:this.homeDir,owner:this.homeOwner});}dshPatchModel(){let e=this.agentConfig.model||this.registry.defaultModel;return this.agentConfig.externalGateway?Re(this.registry,e):this.resolveCommandModel(e)}async writeDshPerRunPatch(e){let n=this.registry.dshRoutePatch;if(!n||!this.registry.baseUrlEnv)return;let r=!this.agentConfig.isDirectMode;r&&this.requireActiveProviderRuntimeToken();let i=this.registry.spendTrackingEnvs;await zt(e,{...n,apiKeyEnv:this.registry.apiKeyEnv,baseUrlEnv:this.registry.baseUrlEnv,model:this.dshPatchModel(),reasoningEffort:$i(this.reasoningEffort()),headerEnvs:r&&i?{[t]:i.sessionTagEnv,[u]:i.runTagEnv,[kn]:pt}:void 0},this.homeDir,this.homeOwner);}resolveCommandModel(e){return (this.agentConfig.isDirectMode?this.registry.directModelAliases:this.registry.gatewayModelAliases)?.[e]??e}async writePiFamilyModelsJson(e,n){let r=this.registry.modelsJsonRoute;if(!r)return;let i=!!this.agentConfig.externalGateway,s=this.agentConfig.isDirectMode&&!i,l,c={};if(i)l=this.agentConfig.baseUrl??ve(a());else if(s){let o=this.agentConfig.baseUrl??this.registry.defaultBaseUrl;if(!o)throw new Error(`${this.agentConfig.type} direct mode needs a base URL (providerBaseUrl or the registry defaultBaseUrl)`);l=o;}else {let o=this.requireActiveProviderRuntimeToken();l=ve(o?.baseUrl??a()),c={[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()};}let a$1=this.reasoningEffort();await qn(e,{...r,apiKeyEnv:this.registry.apiKeyEnv,baseUrl:l,model:St(this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),{isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:i}),reasoning:ke(a$1),thinkingLevel:bt(a$1)},c,this.homeDir,this.homeOwner);}droidSettingsModel(){let e=this.agentConfig.model||this.registry.defaultModel;return this.agentConfig.externalGateway?Re(this.registry,e):this.resolveCommandModel(e)}async setupAgentAuth(e){if(this.agentConfig.oauthFileContent&&this.registry.oauthFileName){let n=D(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),await this.writeAntigravityRunSettings(e),this.registry.setupCommand&&await e.commands.run(this.registry.setupCommand,{timeoutMs:3e4});}async writeGeminiGatewayAuthSettings(e){let n=D(this.registry.mcpConfig.settingsDir,this.homeDir),r=`${n}/${this.registry.mcpConfig.filename}`;await e.files.makeDir(n);let i={};try{let c=await e.files.read(r);typeof c=="string"&&c.trim()&&(i=JSON.parse(c));}catch(c){let a=c.message||"";if(!/not found|no such file|does not exist/i.test(a))throw c}let s=typeof i.security=="object"&&i.security!==null?i.security:{},l=typeof s.auth=="object"&&s.auth!==null?s.auth:{};i.security={...s,auth:{...l,selectedType:ei}},await e.files.write(r,JSON.stringify(i,null,2));}async writeAntigravityRunSettings(e){let n=this.registry.antigravitySettings;if(!n)return;let r=this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel);await $t(e,n.settingsPath,Bn(r,{isExternalGateway:!!this.agentConfig.externalGateway}),this.homeDir,this.homeOwner);}async setupAgentPlugins(e){await To(this.agentConfig.type,e,this.options.plugins);}assertProviderRuntimeDoesNotExposeGatewayKey(e){if(!this.activeProviderRuntimeToken())return;let n=this.agentConfig.apiKey;for(let[r,i]of Object.entries(e))for(let s of Object.values(i.headers||{}))if(s.includes(n))throw new Error(`MCP server "${r}" would expose the Evolve API key inside the sandbox. Use managed agent-browser or remove this gateway-authenticated MCP server.`)}async setupWorkspace(e,n){let r=this.options.workspaceMode||"knowledge";if(r!=="task"){let s=r==="swe"?`${this.workingDir}/repo ${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`:`${this.workingDir}/context ${this.workingDir}/scripts ${this.workingDir}/temp ${this.workingDir}/output`;if(await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),!n?.skipSystemPrompt){let l=Fr({workingDir:this.workingDir,systemPrompt:this.options.systemPrompt,browserPrompt:this.options.browserPrompt,schema:this.zodSchema||this.jsonSchema,mode:r}),c=`${this.workingDir}/${this.registry.systemPromptFile}`;await e.files.write(c,l);}this.options.context&&await this.uploadContextFiles(e,this.options.context),this.options.files&&await this.uploadWorkspaceFiles(e,this.options.files);}let i={...this.options.mcpServers};if(this.options.integrations){let s=await Qs({...this.options.integrations,sessionTag:this.sessionTag});i={...i,integrations:{type:"http",url:s.url,headers:s.headers}};}if(this.options.browserCredentials){if(!this.options.managedBrowser||this.options.managedBrowser.provider!=="agent-browser")throw new Error("Browser credentials require managed remote agent-browser.");if(!this.managedBrowserSession?.id||!this.managedBrowserSession.sessionTag||!this.managedBrowserSession.browserAuthGrantToken)throw new Error("Managed browser session is missing browser credential grant data.");let s=await Fo({apiKey:this.options.browserCredentials.apiKey,dashboardUrl:this.options.browserCredentials.dashboardUrl,browserSessionId:this.managedBrowserSession.id,sessionTag:this.managedBrowserSession.sessionTag,grantToken:this.managedBrowserSession.browserAuthGrantToken,config:this.options.browserCredentials.config});i={...i,[Zr]:s};}await this.writeNativeAgentConfig(e),Object.keys(i).length>0&&(this.assertProviderRuntimeDoesNotExposeGatewayKey(i),this.mcpConfigured=true,await er(this.agentConfig.type,e,this.workingDir,i,this.homeDir)),this.registry.settingsStamp&&await Yn(e,this.registry.settingsStamp.path,this.registry.settingsStamp.document,this.homeDir),await this.writeCodexGatewayProviderConfig(e),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await At(e,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,...this.providerRuntimeHeaderUpdates()},this.homeDir,this.homeOwner),this.skills?.length&&await this.setupSkills(e);}async writeNativeAgentConfig(e){let n=this.effectiveNativeConfigDocument();if(!n)return;let r=this.registry.nativeConfig;if(!r)throw new Error(`Agent "${this.agentConfig.type}" has a config but no nativeConfig registry knowledge`);let i=D(r.path,this.homeDir),s=i.substring(0,i.lastIndexOf("/")),l=r.format==="toml"?stringify(n):JSON.stringify(n,null,2);await e.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),await e.files.write(i,l),await e.commands.run(`chmod 600 ${i}`,{timeoutMs:3e4});}effectiveNativeConfigDocument(){let e=this.agentConfig.config,n=this.agentConfig.preset,r=n?this.registry.presets?.[n]?.configStamp:void 0;return r?Ct(e??{},r):e}presetCommandFlags(){let e=this.agentConfig.preset;return e?this.registry.presets?.[e]?.commandFlags:void 0}nativeConfigFlagPath(){let e=this.registry.nativeConfig;if(!(!e||e.delivery!=="settings-flag"||!this.effectiveNativeConfigDocument()))return D(e.path,this.homeDir)}async setupSkills(e){if(!this.skills?.length)return;let{skillsConfig:n}=this.registry,r=D(n.targetDir,this.homeDir),i=await Pr(this.skills);this.resolvedSkillsList=i,await Ir(e,i,r);}resolvedSkills(){return this.resolvedSkillsList??[]}async uploadContextFiles(e,n){let r=Object.entries(n).map(([s,l])=>({path:`${this.workingDir}/context/${s}`,data:l}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}async uploadWorkspaceFiles(e,n){let r=Object.entries(n).map(([s,l])=>({path:s.startsWith("/")?s:`${this.workingDir}/${s}`,data:l}));if(r.length===0)return;let i=new Set(r.map(s=>s.path.substring(0,s.path.lastIndexOf("/"))).filter(Boolean));i.size>0&&await e.commands.run(`mkdir -p ${Array.from(i).join(" ")}`,{timeoutMs:3e4}),await e.files.writeBatch(r);}buildCommand(e,n){return this.registry.buildCommand({prompt:this.agentConfig.type==="droid"||this.agentConfig.type==="antigravity"?e:au(e),model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),isResume:n??this.hasRun,mcpConfigured:this.mcpConfigured,sessionId:this.capturedSessionId,reasoningEffort:this.reasoningEffort(),nativeConfigPath:this.nativeConfigFlagPath(),presetFlags:this.presetCommandFlags(),isDirectMode:this.agentConfig.isDirectMode,isExternalGateway:!!this.agentConfig.externalGateway,skills:this.skills,homeDir:this.homeDir})}async writeKimiPerRunConfig(e,n){if(this.agentConfig.isDirectMode||!this.registry.spendTrackingTomlProvider)return;let r=this.requireActiveProviderRuntimeToken();await Xn(e,{...this.registry.spendTrackingTomlProvider,maxContextSize:this.resolveKimiMaxContextSize()},{[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()},{baseUrl:ve(r?.baseUrl??a(this.registry.gatewayPath)),apiKey:r?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(this.agentConfig.model||this.registry.defaultModel),defaultThinking:ke(this.reasoningEffort()),thinkingEffort:zo(this.reasoningEffort())},this.homeDir,this.homeOwner);}async writeZcodePerRunConfig(e,n){let r=this.registry.zcodeProviderConfig;if(!r)return;let i=this.agentConfig.model||this.registry.defaultModel,s=Di(this.reasoningEffort()),l;if(this.agentConfig.externalGateway)l={baseUrl:this.agentConfig.baseUrl??ve(a()),apiKey:this.agentConfig.apiKey,model:Re(this.registry,i),headers:{}};else if(this.agentConfig.isDirectMode)l={baseUrl:this.agentConfig.baseUrl??this.registry.defaultBaseUrl??"",apiKey:this.agentConfig.apiKey,model:this.resolveCommandModel(i),headers:{}};else {let c=this.requireActiveProviderRuntimeToken();l={baseUrl:ve(c?.baseUrl??a()),apiKey:c?.token??this.agentConfig.apiKey,model:this.resolveCommandModel(i),headers:{[t]:this.sessionTag,[u]:`${v}${n}`,...this.providerRuntimeHeaderUpdates()}};}await Lt(e,{...r,...l,reasoningLevel:s},this.homeDir,this.homeOwner);}async removeZcodePerRunConfig(e){let n=this.registry.zcodeProviderConfig;if(n)try{await e.commands.run(`rm -f ${F(D(n.path,this.homeDir))}`,{timeoutMs:1e4});}catch{}}async run(e,n$1){if(this.credentialsSealed)throw new Error("Agent credentials are sealed; this Evolve instance cannot run the agent again");Gn(e);let{prompt:r,timeoutMs:i=n,background:s=false,checkpointComment:l,resume:c}=e,{from:a$1}=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(await this.ensureOrgResolved(),a$1&&(this.sandbox||this.options.sandboxId))throw new Error("Cannot restore into existing sandbox. Call kill() first, or create a new Evolve instance.");if(a$1==="latest"){if(!this.storage)throw new Error('Storage not configured. Call .withStorage() before using from: "latest".');let b=await Wr(this.storage);if(!b)throw new Error('No checkpoints found for from: "latest".');a$1=b.id;}if(a$1){if(!this.storage)throw new Error("Storage not configured. Call .withStorage() before using 'from'.");if(!this.options.sandboxProvider)throw new Error("No sandbox provider configured");await this.ensureManagedBrowserSession(n$1),await this.ensureProviderRuntimeToken(),await this.ensureManagedSecretRuntimeToken();let b=this.buildEnvironmentVariables();this.sandboxState="booting",this.emitLifecycle(n$1,"sandbox_boot");try{this.sandbox=await this.options.sandboxProvider.create(this.buildSandboxCreateOptions(b)),await this.bindProviderRuntimeToken(this.sandbox.sandboxId),await this.bindManagedSecretRuntimeToken(this.sandbox.sandboxId),await this.setupManagedSecretEgress(this.sandbox);let E=await wo(this.sandbox,this.storage,a$1);if(await this.setupManagedBrowser(this.sandbox),E.agentType&&E.agentType!==this.agentConfig.type)throw new Error(`Cannot restore checkpoint: agent type mismatch (checkpoint: ${E.agentType}, current: ${this.agentConfig.type})`);let P=this.options.workspaceMode||"knowledge";if(E.workspaceMode&&E.workspaceMode!==P)throw new Error(`Cannot restore checkpoint: workspace mode mismatch (checkpoint: ${E.workspaceMode}, current: ${P})`);await this.setupAgentAuth(this.sandbox),await this.setupAgentPlugins(this.sandbox);let L=!!(this.options.systemPrompt||this.options.browserPrompt||this.zodSchema||this.jsonSchema);await this.setupWorkspace(this.sandbox,{skipSystemPrompt:!L}),await this.loadCapturedSessionId(this.sandbox),this.hasRun=!0,this.lastCheckpointId=a$1,this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(n$1,"sandbox_ready");}catch(E){throw this.sandbox&&(await this.sandbox.kill().catch(()=>{}),this.sandbox=void 0),await this.closeManagedBrowserSession().catch(()=>{}),await this.closeProviderRuntimeToken().catch(()=>{}),await this.closeManagedSecretRuntimeToken().catch(()=>{}),this.sandboxState="error",this.agentState="error",this.emitLifecycle(n$1,"sandbox_error"),E}}let o=await this.getSandbox(n$1);await this.ensureProviderRuntimeToken(),await this.loadCapturedSessionId(o),this.lastRunTimestamp=Date.now(),this.ensureSessionLogger(o),this.sessionLogger?.writePrompt(r),this.requiresPreRunDashboardIngest()&&await this.flushSessionLoggerWithTimeout();let d=this.buildCommand(r,c),u$1=randomUUID(),p=this.buildRunEnvs(u$1);if(await this.writeCodexGatewayProviderConfig(o),!this.agentConfig.isDirectMode&&this.registry.spendTrackingJsonConfig&&await At(o,this.agentConfig.type,this.registry.spendTrackingJsonConfig.headersPath,{[t]:this.sessionTag,[u]:`${v}${u$1}`,...this.providerRuntimeHeaderUpdates()},this.homeDir,this.homeOwner),this.agentConfig.type==="qwen"&&await Hn(o,ke(this.reasoningEffort()),this.homeDir,this.homeOwner),await this.writeKimiPerRunConfig(o,u$1),await this.writeDshPerRunPatch(o),await this.writeAntigravityRunSettings(o),(!this.agentConfig.isDirectMode||this.agentConfig.externalGateway)&&this.registry.droidGatewaySettings){let b=!!this.agentConfig.externalGateway,E=b?void 0:this.requireActiveProviderRuntimeToken();await Nt(o,{...this.registry.droidGatewaySettings,model:this.droidSettingsModel(),baseUrl:b?this.agentConfig.baseUrl??a():ve(E?.baseUrl??a()),apiKeyEnv:this.registry.apiKeyEnv},b?{}:{[t]:this.sessionTag,[u]:`${v}${u$1}`,...this.providerRuntimeHeaderUpdates()},this.homeDir,this.homeOwner);}await this.writePiFamilyModelsJson(o,u$1),await this.writeZcodePerRunConfig(o,u$1);let g="",f=false,h=xe(this.agentConfig.type),m=b=>{g+=b;let E=g.split(`
228
+ `);g=E.pop()??"";for(let P of E){if(!P.trim())continue;let L=h(P);if(f=Wo(L,f),this.captureHarnessSessionId(P,L),this.sessionLogger?.writeEventParsed(P,L),n$1?.onStdout?.(P+`
229
+ `),L&&n$1?.onContent)for(let se of L)n$1.onContent(se);}},w=b=>{n$1?.onStderr?.(b);},v$1=await o.commands.spawn(d,{cwd:this.workingDir,timeoutMs:i,envs:p,onStdout:m,onStderr:w}),k=this.beginOperation("run",v$1,n$1,"run_start");if(this.hasRun=true,s)return this.watchBackgroundOperation(k,"run",v$1,n$1,o,()=>this.registry.verdictFromStream===true&&f),{sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:u$1,exitCode:0,stdout:`Background process started with ID ${v$1.processId}`,stderr:""};let y;try{y=await v$1.wait();}catch(b){throw this.interruptedOperations.delete(k),this.finalizeOperation(k,n$1,"run_failed","error"),await this.removeZcodePerRunConfig(o),b}if(g.trim()){let b=h(g);if(f=Wo(b,f),this.captureHarnessSessionId(g,b),this.sessionLogger?.writeEventParsed(g,b),n$1?.onStdout?.(g+`
230
+ `),b&&n$1?.onContent)for(let E of b)n$1.onContent(E);}let S=y.exitCode===0&&!(this.registry.verdictFromStream&&f);this.interruptedOperations.delete(k)||y.exitCode===130?this.finalizeOperation(k,n$1,"run_interrupted","interrupted"):S?this.finalizeOperation(k,n$1,"run_complete","idle"):this.finalizeOperation(k,n$1,"run_failed","error"),await this.removeZcodePerRunConfig(o),await this.writeCapturedSessionId(o),this.sessionLogger&&!s&&await this.flushSessionLoggerWithTimeout();let x;if(this.storage&&!s&&S)try{x=await zr(o,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:l,parentId:this.lastCheckpointId}),this.lastCheckpointId=x.id;}catch(b){console.warn(`[Evolve] Auto-checkpoint failed: ${b.message}`);}return {sandboxId:o.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),runId:u$1,exitCode:y.exitCode,stdout:y.stdout,stderr:y.stderr,checkpoint:x}}async executeCommand(e,n$1={},r){let{timeoutMs:i=n,background:s=false}=n$1;if(this.activeCommand)throw new Error("Agent is already running. Call interrupt(), wait for the active/background command to finish, or create a new Evolve instance.");let l=await this.getSandbox(r);this.credentialsSealed||await this.ensureProviderRuntimeToken(),this.lastRunTimestamp=Date.now(),this.requiresPreRunDashboardIngest()&&(this.ensureSessionLogger(l),this.sessionLogger?.writePrompt(e),await this.flushSessionLoggerWithTimeout());let c="",a="",o=m=>{c+=m,r?.onStdout?.(m);},d=m=>{a+=m,r?.onStderr?.(m);},u=this.credentialsSealed?{}:this.buildProviderRuntimeProcessEnvs(),p=await l.commands.spawn(e,{cwd:this.workingDir,timeoutMs:i,envs:Object.keys(u).length>0?u:void 0,onStdout:o,onStderr:d}),g=this.beginOperation("command",p,r,"command_start");if(s)return this.watchBackgroundOperation(g,"command",p,r),{sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:0,stdout:`Background process started with ID ${p.processId}`,stderr:""};let f;try{f=await p.wait();}catch(m){throw this.interruptedOperations.delete(g),this.finalizeOperation(g,r,"command_failed","error"),m}return this.interruptedOperations.delete(g)||f.exitCode===130?this.finalizeOperation(g,r,"command_interrupted","interrupted"):f.exitCode===0?this.finalizeOperation(g,r,"command_complete","idle"):this.finalizeOperation(g,r,"command_failed","error"),{sandboxId:l.sandboxId,sessionId:this.managedBrowserSession?.sessionId,browser:this.browserResponseInfo(),exitCode:f.exitCode,stdout:c||f.stdout||"",stderr:a||f.stderr||""}}async sealCredentials(){if(this.credentialsSealed)return;if(!this.sandbox)throw new Error("No active sandbox. Call run() or executeCommand() first.");if(this.activeCommand)throw new Error("Cannot seal credentials while a process is running.");if(this.agentConfig.isDirectMode&&!this.agentConfig.externalGateway)throw new Error("Credential sealing requires gateway mode; direct provider credentials cannot be revoked by Evolve");if([this.options.secrets&&Object.keys(this.options.secrets).length>0,this.options.sandboxCreateOptions?.envs&&Object.keys(this.options.sandboxCreateOptions.envs).length>0,this.options.managedSecrets,this.options.integrations,this.options.mcpServers&&Object.keys(this.options.mcpServers).length>0,this.options.managedBrowser,this.options.browserCredentials].some(Boolean))throw new Error("Credential sealing requires a credential-minimal sandbox: omit secrets, managed secrets, integrations, MCP servers, and browser credentials");if(this.agentConfig.externalGateway){await this.agentConfig.externalGateway.revoke(),this.credentialsSealed=true;return}if(!this.providerRuntimeToken||!this.options.providerRouting)throw new Error("Cannot seal credentials: no active provider runtime token to revoke. Without a gateway-issued runtime token the sandbox may hold credentials Evolve cannot revoke, so sealing would be a false guarantee.");await this.closeProviderRuntimeToken(true),this.credentialsSealed=true;}isSealed(){return this.credentialsSealed}async collectArtifacts(e){if(!this.credentialsSealed)throw new Error("Call sealCredentials() before collecting artifacts.");if(!this.sandbox)throw new Error("No active sandbox.");if(this.activeCommand)throw new Error("Cannot collect artifacts while a process is running.");return Go(this.sandbox,this.workingDir,e)}async uploadContext(e){let n=await this.getSandbox();await this.uploadContextFiles(n,e);}async uploadFiles(e){let n=await this.getSandbox();await this.uploadWorkspaceFiles(n,e);}async uploadFileFromPath(e,n){let r=await this.getSandbox(),i=e.startsWith("/")?e:`${this.workingDir}/${e}`,s=i.substring(0,i.lastIndexOf("/"));if(s&&await r.commands.run(`mkdir -p ${s}`,{timeoutMs:3e4}),r.files.writeFromPath){await r.files.writeFromPath(i,n);return}let{readFile:l}=await import('fs/promises');await r.files.write(i,await l(n));}async getOutputFiles(e=false){let n=await this.getSandbox(),r=`${this.workingDir}/output`,i=e?"":"-maxdepth 1",l=(await n.commands.run(`find ${r} ${i} -type f -exec stat -c '%n|%Z' {} \\; 2>/dev/null || true`,{timeoutMs:3e4})).stdout.split(`
231
+ `).filter(Boolean),c=this.lastRunTimestamp?Math.floor(this.lastRunTimestamp/1e3)-2:0,a=[],o=`${r}/`;for(let f of l){let[h,m]=f.split("|");if(!h||!m)continue;let w=parseInt(m,10);c>0&&w<c||a.push(h);}let d={},u=await Promise.all(a.map(async f=>{try{let h=await n.files.read(f);return {relativePath:f.startsWith(o)?f.slice(o.length):f.split("/").pop()||f,content:h}}catch{return null}}));for(let f of u)f&&(d[f.relativePath]=f.content);if(!this.zodSchema&&!this.jsonSchema)return {files:d,data:null};let p=d["result.json"];if(!p)return {files:d,data:null,error:"Schema provided but agent did not create output/result.json"};let g=typeof p=="string"?p:new TextDecoder().decode(p);try{let f=JSON.parse(g);if(this.zodSchema){let h=this.zodSchema.safeParse(f);return h.success?{files:d,data:h.data}:{files:d,data:null,error:`Schema validation failed: ${h.error.message}`,rawData:g}}if(this.compiledValidator){if(this.compiledValidator(f))return {files:d,data:f};{let m=this.compiledValidator.errors?.map(w=>`${w.instancePath} ${w.message}`).join(", ")||"Unknown validation error";return {files:d,data:null,error:`Schema validation failed: ${m}`,rawData:g}}}return {files:d,data:null}}catch(f){return {files:d,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 zr(this.sandbox,this.storage,this.agentConfig.type,this.workingDir,{tag:this.sessionTag,model:this.agentConfig.model||this.registry.defaultModel,workspaceMode:this.options.workspaceMode||"knowledge",comment:e?.comment,parentId:this.lastCheckpointId});return this.lastCheckpointId=n.id,n}getSession(){return this.sandbox?.sandboxId||this.options.sandboxId||null}async setSession(e){if(this.credentialsSealed)throw new Error("Agent credentials are sealed and this Evolve instance cannot switch sandboxes");if(this.options.managedSecrets)throw new Error("setSession() cannot be used with managed secrets; managed secret grants are sandbox-scoped.");if(this.options.sandboxCreateOptions?.user)throw new Error("setSession() cannot be used with a configured sandbox user; the user cannot be enforced on an existing sandbox.");if(this.activeCommand&&!await this.interrupt())throw new Error("Cannot switch session while an active process is running and could not be interrupted.");await this.rotateSession(),await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession(),this.options.sandboxId=e,this.sandbox=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="idle",this.hasRun=true,this.lastCheckpointId=void 0;}async pause(e){this.sandbox&&(this.activeCommand&&await this.interrupt(e),await this.sandbox.pause(),this.sandboxState="paused",this.agentState="idle",this.emitLifecycle(e,"sandbox_pause"));}async resume(e){this.sandbox&&this.options.sandboxProvider&&(this.sandbox=await this.options.sandboxProvider.connect(this.sandbox.sandboxId),this.sandboxState="ready",this.agentState="idle",this.emitLifecycle(e,"sandbox_resume"));}async interrupt(e){if(!this.activeCommand&&!this.activeProcessId)return false;let n=this.activeOperationId,r=this.activeOperationKind,i=false;try{this.activeCommand?i=await this.activeCommand.kill():this.sandbox&&this.activeProcessId&&(i=await this.sandbox.commands.kill(this.activeProcessId));}catch{i=false;}if(!i)return this.sandboxState="running",this.agentState="running",false;n!==null&&this.interruptedOperations.add(n),this.invalidateActiveOperation(),this.sandboxState="ready",this.agentState="interrupted";let s=r==="run"?"run_interrupted":"command_interrupted";return this.emitLifecycle(e,s),i}status(){let e=this.browserRuntimeInfo();return {sandboxId:this.getSession(),sandbox:this.sandboxState,agent:this.agentState,activeProcessId:this.activeProcessId,hasRun:this.hasRun,timestamp:new Date().toISOString(),...e?{browser:e}:{}}}async kill(e){await this.rotateSession();let n;try{this.activeCommand&&await this.interrupt(e),this.sandbox&&(await this.sandbox.kill(),this.sandbox=void 0);}catch(r){n=r;}finally{await this.closeProviderRuntimeToken(),await this.closeManagedSecretRuntimeToken(),await this.closeManagedBrowserSession();}if(n)throw n;this.options.sandboxId=void 0,this.interruptedOperations.clear(),this.invalidateActiveOperation(),this.sandboxState="stopped",this.agentState="idle",this.hasRun=false,this.lastCheckpointId=void 0,this.emitLifecycle(e,"sandbox_killed");}async getHost(e){return (await this.getSandbox()).getHost(e)}getAgentType(){return this.agentConfig.type}getSessionTag(){return !this.sandbox&&!this.sessionLogger?null:this.sessionTag}getSessionTimestamp(){return this.sessionLogger?.getTimestamp()||null}async flushObservability(){await this.sessionLogger?.flush();}async rotateSession(){let e=!!this.sessionLogger;this.sessionLogger&&(await this.sessionLogger.close(),this.sessionLogger=void 0),e&&(this.previousSessionTag=this.sessionTag),this.sessionTag=Jo(this.options.sessionTagPrefix||"evolve");}async fetchSpend(e){if(this.agentConfig.isDirectMode)throw new Error("Cost tracking requires gateway mode (set EVOLVE_API_KEY).");let n=this.agentConfig.apiKey;if(!n)throw new Error("Cost tracking requires an API key.");let r=process.env.EVOLVE_DASHBOARD_URL||s,i=await fetch(`${r}/api/sessions/spend?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(1e4)});if(!i.ok){let s=await i.text().catch(()=>"");throw new Error(`Spend query failed (${i.status}): ${s}`)}return i}resolveSpendTag(){if(this.sandbox||this.sessionLogger)return this.sessionTag;if(this.previousSessionTag)return this.previousSessionTag;throw new Error("No session to query. Call run() first.")}normalizeRunCost(e,n){return {...e,asOf:e.asOf??n.asOf,isComplete:e.isComplete??n.isComplete,truncated:e.truncated??n.truncated}}normalizeSessionCost(e){let n={asOf:e.asOf,isComplete:e.isComplete,truncated:e.truncated};return {...e,runs:e.runs.map(r=>this.normalizeRunCost(r,n))}}async getSessionCost(){let e=this.resolveSpendTag(),n=new URLSearchParams({tag:e}),i=await(await this.fetchSpend(n)).json();return this.normalizeSessionCost(i)}async getRunCost(e){let n=this.resolveSpendTag();if("runId"in e){let l=new URLSearchParams({tag:n,runId:e.runId}),a=await(await this.fetchSpend(l)).json();return this.normalizeRunCost(a,{asOf:new Date().toISOString(),isComplete:false,truncated:false})}let r=await this.getSessionCost(),i=e.index>0?e.index-1:r.runs.length+e.index,s=r.runs[i];if(!s)throw new Error(`Run index ${e.index} out of range. Session has ${r.runs.length} run(s).`);return s}};function uu(t){return (t||process.env.EVOLVE_DASHBOARD_URL||s).replace(/\/$/,"")}function pu(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 gu(t){return await t.text().catch(()=>"")}async function Ho(t,e,n={}){let r=await fetch(`${uu(t?.dashboardUrl)}${e}`,{...n,headers:{Authorization:`Bearer ${pu(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 gu(r)}`);return r.status===204?{}:await r.json()}var bn=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 Ho(this.config,"/api/browser-profiles")).profiles.map(n=>this.toMetadata(n))}}async delete(e){return await Ho(this.config,"/api/browser-profiles",{method:"DELETE",body:JSON.stringify(e)})}};function ri(t={}){return new bn(t)}var mt=class extends EventEmitter{config={};agent;fallbackSandboxState="stopped";fallbackAgentState="idle";fallbackHasRun=false;constructor(){super();}on(e,n){return super.on(e,n)}off(e,n){return super.off(e,n)}emit(e,...n){return super.emit(e,...n)}withAgent(e){return e&&(Ye(e),Et(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&&(ae(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}withOrg(e){return this.config.org=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=Xs;static browserCredentials=Qr;static browserProfiles=ri;static managedSecrets=Da;async initializeAgent(){let e=_t(this.config.agent),n=Y(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=Ha$1(this.config.managedSecrets,n);if(r&&this.config.sandbox&&!De(this.config.sandbox))throw new Error("withManagedSecrets() requires an Evolve-managed sandbox; remove withSandbox() or pass a managed sandbox provider.");let i=this.config.sandbox??(r?await tt(e.apiKey):await fn()),s$1={},l,c,a=this.config.skills,o;if(this.config.browser){let p=Mo(this.config.browser);if(o=p,p.provider==="browser-use"){if(e.isDirectMode)throw new Error('withBrowser("browser-use") requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.');s$1=g(e.apiKey);}if((p.provider==="actionbook"||p.provider==="agent-browser")&&p.managed){if(e.isDirectMode)throw new Error(`Managed browser provider "${p.provider}" requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.`);l=p.provider==="actionbook"?Ur:zs,c={provider:p.provider,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,...p.profile?{profile:p.profile}:{}};}if(p.profile&&!p.managed)throw new Error('withBrowser({ profile }) requires managed remote browser mode. Use .withBrowser({ profile }) or .withBrowser({ provider: "agent-browser", remote: true, profile }).')}if(this.config.browserCredentials!==void 0){if(this.config.sandboxId)throw new Error("withBrowserCredentials() cannot be used with withSession(); browser login tokens are run-scoped.");if(e.isDirectMode)throw new Error("withBrowserCredentials() requires gateway mode. Use apiKey/EVOLVE_API_KEY instead of providerApiKey/direct mode.");if(!o||o.provider!=="agent-browser"||!o.managed)throw new Error('withBrowserCredentials() requires .withBrowser() or .withBrowser({ provider: "agent-browser", remote: true }).');if(this.config.mcpServers?.["browser-login"])throw new Error('withBrowserCredentials() reserves the "browser-login" MCP server name.')}let d=this.config.storage!==void 0?yn(this.config.storage,!e.isDirectMode,s,e.isDirectMode?void 0:e.apiKey):void 0,u={sandboxProvider:i,sandboxCreateOptions:this.config.sandboxCreateOptions,secrets:this.config.secrets,managedSecrets:r?{secrets:r,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,sandboxId:this.config.sandboxId,workingDirectory:this.config.workingDirectory,workspaceMode:this.config.workspaceMode,systemPrompt:this.config.systemPrompt,context:this.config.context,files:this.config.files,mcpServers:{...s$1,...this.config.mcpServers},browserPrompt:l,managedBrowser:c,browserCredentials:this.config.browserCredentials!==void 0?{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s,config:this.config.browserCredentials}:void 0,plugins:this.config.plugins,skills:a,schema:this.config.schema,schemaOptions:this.config.schemaOptions,sessionTagPrefix:this.config.sessionTagPrefix,org:this.config.org,observability:this.config.observability,integrations:this.config.integrations?{...this.config.integrations,apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s}:void 0,providerRouting:e.isDirectMode?void 0:{apiKey:e.apiKey,dashboardUrl:process.env.EVOLVE_DASHBOARD_URL||s},storage:d};this.agent=new ft(e,u);}createStreamCallbacks(){let e=this.listenerCount("stdout")>0,n=this.listenerCount("stderr")>0,r=this.listenerCount("content")>0,i=this.listenerCount("lifecycle")>0;return {onStdout:e?s=>this.emit("stdout",s):void 0,onStderr:n?s=>this.emit("stderr",s):void 0,onContent:r?s=>this.emit("content",s):void 0,onLifecycle:i?s=>this.emit("lifecycle",s):void 0}}emitLifecycleFromStatus(e){if(this.listenerCount("lifecycle")===0)return;let n=this.status();this.emit("lifecycle",{sandboxId:n.sandboxId,sandbox:n.sandbox,agent:n.agent,timestamp:new Date().toISOString(),reason:e,...n.browser?{browser:n.browser}:{}});}async run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:l}){if(i&&this.config.sandboxId)throw new Error("Cannot use 'from' with 'withSession()' \u2014 restore requires a fresh sandbox.");this.agent||await this.initializeAgent();let c=this.createStreamCallbacks();return this.agent.run({prompt:e,timeoutMs:n,background:r,from:i,checkpointComment:s,resume:l},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 updateNetwork(e){if(!this.agent)throw new Error("No sandbox yet. Call prepareSandbox(), run() or executeCommand() before updateNetwork().");let n=await this.agent.getSandbox(this.createStreamCallbacks());if(typeof n.updateNetwork!="function")throw new Error(`The ${this.config.sandbox?.providerType??"configured"} sandbox provider cannot change network policy after start. Create the sandbox with the policy it needs for its whole lifetime, or use a provider that supports runtime changes.`);await n.updateNetwork(e);}async sealCredentials(){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");await this.agent.sealCredentials();}isSealed(){return this.agent?.isSealed()??false}resolvedSkills(){return this.agent?.resolvedSkills()??[]}async collectArtifacts(e){if(!this.agent)throw new Error("Agent not initialized. Call run() or executeCommand() first.");return this.agent.collectArtifacts(e)}async interrupt(){if(!this.agent)return false;let e=this.createStreamCallbacks();return this.agent.interrupt(e)}async uploadContext(e){return this.agent||await this.initializeAgent(),this.agent.uploadContext(e)}async uploadFiles(e){return this.agent||await this.initializeAgent(),this.agent.uploadFiles(e)}async uploadFileFromPath(e,n){return this.agent||await this.initializeAgent(),this.agent.uploadFileFromPath(e,n)}async getOutputFiles(e=false){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.getOutputFiles(e)}async checkpoint(e){if(!this.agent)throw new Error("Agent not initialized. Call run() first.");return this.agent.checkpoint(e)}_cachedGatewayOverrides=null;resolveGatewayOverrides(){if(this._cachedGatewayOverrides!==null)return this._cachedGatewayOverrides||void 0;try{let e=_t(this.config.agent);if(!e.isDirectMode)return this._cachedGatewayOverrides={gatewayUrl:s,gatewayApiKey:e.apiKey},this._cachedGatewayOverrides}catch{}this._cachedGatewayOverrides=void 0;}async listCheckpoints(e){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return qr(this.config.storage,this.resolveGatewayOverrides()||{}).listCheckpoints(e)}storage(){if(this.config.storage===void 0)throw new Error("Storage not configured. Call .withStorage().");return qr(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 Ke=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 Ce=Symbol.for("evolve.SwarmResult"),je=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 ii=class t{config;semaphore;constructor(e={}){let n$1=e.concurrency??o;if(n$1>p)throw new Error(`concurrency=${n$1} exceeds max ${p}. For higher parallelism, scale horizontally with multiple processes.`);this.config={agent:e.agent,sandbox:e.sandbox,tag:e.tag??"swarm",concurrency:n$1,timeoutMs:e.timeoutMs??n,workspaceMode:e.workspaceMode??"knowledge",retry:e.retry,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations},this.semaphore=new Ke(this.config.concurrency);}async map(e){let{items:n,prompt:r,bestOf:i,verify:s}=e,l=e.retry??this.config.retry,c=this.generateOperationId(),a=e.timeoutMs??this.config.timeoutMs;if(i&&s)throw new Error("map() cannot use both bestOf and verify options simultaneously");let o=await Promise.all(n.map((d,u)=>i?this.executeMapItemWithBestOf(d,r,u,c,e,a,l):s?this.executeMapItemWithVerify(d,r,u,c,e,a,l):l?te(p=>this.executeMapItem(d,r,u,c,e,a,p),l,u):this.executeMapItem(d,r,u,c,e,a)));return je.from(o)}async filter(e){let{items:n,prompt:r,condition:i,verify:s}=e,l=e.retry??this.config.retry,c=this.generateOperationId(),a=e.timeoutMs??this.config.timeoutMs,o=await Promise.all(n.map((u,p)=>s?this.executeFilterItemWithVerify(u,r,p,c,e,a,l):l?te(g=>this.executeFilterItem(u,r,p,c,e,a,g),l,p):this.executeFilterItem(u,r,p,c,e,a))),d=[];for(let u of o)if(u.status==="error")d.push(u);else if(u.data!==null)try{i(u.data)?d.push(u):d.push({...u,status:"filtered"});}catch(p){d.push({...u,status:"error",data:null,error:`Condition function threw: ${p.message}`});}return je.from(d)}async reduce(e){let{items:n,prompt:r,verify:i}=e,s=e.retry??this.config.retry,l=this.generateOperationId(),c=e.timeoutMs??this.config.timeoutMs,a=[],o=[];n.forEach((y,S)=>{a.push(this.getFiles(y)),o.push(this.getIndex(y,S));});let d={};a.forEach((y,S)=>{Object.entries(y).forEach(([C,x])=>{d[`item_${o[S]}/${C}`]=x;});});let u=mn(d),p=he(qs,{fileTree:u}),g=e.systemPrompt?`${p}
227
232
 
228
- ${e.systemPrompt}`:p,f=(k,C,v)=>({operationId:d,operation:"reduce",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:o,errorRetry:C,verifyRetry:v,...this.pipelineContextToMeta(e._pipelineContext)}),h=e.mcpServers??this.config.mcpServers,m=e.skills??this.config.skills,y=e.integrations??this.config.integrations,w=async(k,C,v,x)=>{let E=await this.semaphore.use(()=>this.execute(a,k,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:h,skills:m,integrations:y,tagPrefix:C,timeoutMs:u,observability:{swarmName:this.config.tag,operationName:e.name,operationId:d,operation:"reduce",role:"worker",errorRetry:v,verifyRetry:x&&x>1?x-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),I=f(E,v,x&&x>1?x-1:void 0);return E.error?{status:"error",data:null,files:E.files,meta:I,error:E.error,rawData:E.rawData}:{status:"success",data:E.data,files:E.files,meta:I}},b=`${this.config.tag}-reduce`;return i?this.runWithVerification((k,C,v)=>w(k,C,void 0,v),{originalPrompt:r,inputFiles:a,verifyConfig:i,timeoutMs:u,systemPrompt:g,schema:e.schema,mcpServers:h,skills:m,integrations:y,operationId:d,baseTag:b,retry:s,operation:"reduce",_pipelineContext:e._pipelineContext}):s?B(k=>{let C=k>1?k-1:void 0,v=C?`${b}-er${C}`:b;return w(r,v,C)},s):w(r,b)}async bestOf(e){let{item:n,prompt:r,config:i}=e,s=e.retry??this.config.retry,d=i.n??i.taskAgents?.length;if(d===void 0)throw new Error("bestOf requires n or taskAgents");if(d<2)throw new Error("bestOf requires n >= 2");let u=this.generateOperationId(),l=e.timeoutMs??this.config.timeoutMs,o=this.getFiles(n),a=i.mcpServers??this.config.mcpServers,c=i.judgeMcpServers??i.mcpServers??this.config.mcpServers,p=i.skills??this.config.skills,g=i.judgeSkills??i.skills??this.config.skills,f=i.integrations??this.config.integrations,h=i.judgeIntegrations??i.integrations??this.config.integrations,m=await Promise.all(Array.from({length:d},async(C,v)=>{let x=s?await B(E=>this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:u,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:p,integrations:f,timeoutMs:l,attempt:E}),s,v):await this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:v,operationId:u,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:a,skills:p,integrations:f,timeoutMs:l});return i.onCandidateComplete?.(0,v,x.status==="success"?"success":"error"),x})),y=s?await B(C=>this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:u,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h,attempt:C}),{...s,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:l,operationId:u,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:c,skills:g,integrations:h}),w=m.findIndex(C=>C.status==="success"),b=y.decision?.winner??(w>=0?w:0);i.onJudgeComplete?.(0,b,y.decision?.reasoning??"Judge failed to provide reasoning");let k={operationId:u,operation:"bestof-judge",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:d};return {winner:m[b]??m[0],winnerIndex:b,judgeReasoning:y.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:k,candidates:m}}async execute(e,n,r){let i=null,s="",d=r.tagPrefix,u={},l=null,o,a,c={...this.config.agent,...r.agent};try{i=new Je().withAgent(c).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&i.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&i.withSystemPrompt(r.systemPrompt),r.mcpServers&&i.withMcpServers(r.mcpServers),r.skills?.length&&i.withSkills(r.skills),r.integrations&&i.withIntegrations(r.integrations),r.observability&&i.withObservability(r.observability),Object.keys(e).length>0&&i.withContext(e);let p=await i.run({prompt:n,timeoutMs:r.timeoutMs});s=p.sandboxId,d=i.getSessionTag()??r.tagPrefix;let g=null;try{g=await i.getOutputFiles(!0),u=g.files;}catch{}p.exitCode!==0?o=`Agent exited with code ${p.exitCode}`:r.schema?g?(l=g.data,g.error&&(o=g.error),g.rawData&&(a=g.rawData)):o="Failed to read output files from sandbox":l=u;}catch(p){if(o=p.message,i){d=i.getSessionTag()??r.tagPrefix;try{u=(await i.getOutputFiles(!0)).files;}catch{}}}finally{i&&await i.kill().catch(()=>{});}return {files:u,data:l,tag:d,sandboxId:s,error:o,rawData:a}}async executeMapItem(e,n,r,i,s,d,u=1){let l=this.getFiles(e),o=u>1?`${this.config.tag}-map-${r}-er${u-1}`:`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=await this.semaphore.use(()=>this.execute(l,a,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),h={operationId:i,operation:"map",tag:f.tag,sandboxId:f.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:u>1?u-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(f,h)}async executeMapItemWithVerify(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=this.evaluatePrompt(n,l,r);if(f instanceof Error)return this.buildErrorResult(`Prompt function threw: ${f.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let h=async(m,y,w)=>{let b=await this.semaphore.use(()=>this.execute(l,m,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:y,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),k={operationId:i,operation:"map",tag:b.tag,sandboxId:b.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(b,k)};return this.runWithVerification(h,{originalPrompt:f,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:p,integrations:g,operationId:i,baseTag:o,retry:u,itemIndex:r,operation:"map",_pipelineContext:s._pipelineContext})}async executeMapItemWithBestOf(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-map-${r}`,a=this.evaluatePrompt(n,l,r);if(a instanceof Error)return this.buildErrorResult(`Prompt function threw: ${a.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let c=s.bestOf,p=c.n??c.taskAgents?.length;if(p===void 0||p<2)return this.buildErrorResult("bestOf requires n >= 2 or taskAgents with at least 2 elements",{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let g=s.mcpServers??this.config.mcpServers,f=c.mcpServers??g,h=c.judgeMcpServers??c.mcpServers??g,m=s.skills??this.config.skills,y=c.skills??m,w=c.judgeSkills??c.skills??m,b=s.integrations??this.config.integrations,k=c.integrations??b,C=c.judgeIntegrations??c.integrations??b,v=await Promise.all(Array.from({length:p},async(We,He)=>{let ar=u?await B(Ts=>this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:He,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,attempt:Ts,_pipelineContext:s._pipelineContext}),u,He):await this.executeBestOfCandidate({inputFiles:l,prompt:a,candidateIndex:He,operationId:i,config:c,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:y,integrations:k,timeoutMs:d,parentIndex:r,_pipelineContext:s._pipelineContext});return c.onCandidateComplete?.(r,He,ar.status==="success"?"success":"error"),ar})),x=u?await B(We=>this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,attempt:We,_pipelineContext:s._pipelineContext}),{...u,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:l,taskPrompt:a,candidates:v,config:c,timeoutMs:d,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:w,integrations:C,parentIndex:r,_pipelineContext:s._pipelineContext}),E=v.findIndex(We=>We.status==="success"),I=x.decision?.winner??(E>=0?E:0),ze=v[I]??v[0];c.onJudgeComplete?.(r,I,x.decision?.reasoning??"Judge failed to provide reasoning");let Es={operationId:i,operation:"bestof-judge",tag:x.tag,sandboxId:x.sandboxId,swarmName:this.config.tag,operationName:s.name,candidateCount:p,...this.pipelineContextToMeta(s._pipelineContext)};return {...ze,meta:{...ze.meta,operation:"map",swarmName:this.config.tag,operationName:s.name,itemIndex:r,...this.pipelineContextToMeta(s._pipelineContext)},bestOf:{winnerIndex:I,judgeReasoning:x.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:Es,candidates:v}}}async executeFilterItem(e,n,r,i,s,d,u=1){let l=this.getFiles(e),o=u>1?`${this.config.tag}-filter-${r}-er${u-1}`:`${this.config.tag}-filter-${r}`,a=s.mcpServers??this.config.mcpServers,c=s.skills??this.config.skills,p=s.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(l,n,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:a,skills:c,integrations:p,tagPrefix:o,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),f={operationId:i,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:u>1?u-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(g,f,l)}async executeFilterItemWithVerify(e,n,r,i,s,d,u){let l=this.getFiles(e),o=`${this.config.tag}-filter-${r}`,a=s.verify,c=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=async(h,m,y)=>{let w=await this.semaphore.use(()=>this.execute(l,h,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:c,skills:p,integrations:g,tagPrefix:m,timeoutMs:d,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),b={operationId:i,operation:"filter",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:y&&y>1?y-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(w,b,l)};return this.runWithVerification(f,{originalPrompt:n,inputFiles:l,verifyConfig:a,timeoutMs:d,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:c,skills:p,integrations:g,operationId:i,baseTag:o,retry:u,itemIndex:r,operation:"filter",_pipelineContext:s._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:i,operationId:s,config:d,timeoutMs:u,parentIndex:l,attempt:o=1,_pipelineContext:a}=e,c=l!==void 0?`${this.config.tag}-map-${l}-bestof-cand-${i}`:`${this.config.tag}-bestof-cand-${i}`,p=o>1?`${c}-er${o-1}`:c,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:d.taskAgents?.[i],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:p,timeoutMs:u,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:l,role:"candidate",candidateIndex:i,errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(a)}})),f={operationId:s,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:i,errorRetry:o>1?o-1:void 0,candidateIndex:i,...this.pipelineContextToMeta(a)};return this.buildResult(g,f)}buildJudgeContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return e.candidates.forEach((r,i)=>{r.status==="error"&&(n[`candidate_${i}/_failed.txt`]=`STATUS: FAILED
233
+ ${e.systemPrompt}`:p,f=(y,S,C)=>({operationId:l,operation:"reduce",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,operationName:e.name,inputCount:n.length,inputIndices:o,errorRetry:S,verifyRetry:C,...this.pipelineContextToMeta(e._pipelineContext)}),h=e.mcpServers??this.config.mcpServers,m=e.skills??this.config.skills,w=e.integrations??this.config.integrations,v=async(y,S,C,x)=>{let b=await this.semaphore.use(()=>this.execute(d,y,{systemPrompt:g,schema:e.schema,schemaOptions:e.schemaOptions,agent:e.agent,mcpServers:h,skills:m,integrations:w,tagPrefix:S,timeoutMs:c,observability:{swarmName:this.config.tag,operationName:e.name,operationId:l,operation:"reduce",role:"worker",errorRetry:C,verifyRetry:x&&x>1?x-1:void 0,...this.pipelineContextToObservability(e._pipelineContext)}})),E=f(b,C,x&&x>1?x-1:void 0);return b.error?{status:"error",data:null,files:b.files,meta:E,error:b.error,rawData:b.rawData}:{status:"success",data:b.data,files:b.files,meta:E}},k=`${this.config.tag}-reduce`;return i?this.runWithVerification((y,S,C)=>v(y,S,void 0,C),{originalPrompt:r,inputFiles:d,verifyConfig:i,timeoutMs:c,systemPrompt:g,schema:e.schema,mcpServers:h,skills:m,integrations:w,operationId:l,baseTag:k,retry:s,operation:"reduce",_pipelineContext:e._pipelineContext}):s?te(y=>{let S=y>1?y-1:void 0,C=S?`${k}-er${S}`:k;return v(r,C,S)},s):v(r,k)}async bestOf(e){let{item:n,prompt:r,config:i}=e,s=e.retry??this.config.retry,l=i.n??i.taskAgents?.length;if(l===void 0)throw new Error("bestOf requires n or taskAgents");if(l<2)throw new Error("bestOf requires n >= 2");let c=this.generateOperationId(),a=e.timeoutMs??this.config.timeoutMs,o=this.getFiles(n),d=i.mcpServers??this.config.mcpServers,u=i.judgeMcpServers??i.mcpServers??this.config.mcpServers,p=i.skills??this.config.skills,g=i.judgeSkills??i.skills??this.config.skills,f=i.integrations??this.config.integrations,h=i.judgeIntegrations??i.integrations??this.config.integrations,m=await Promise.all(Array.from({length:l},async(S,C)=>{let x=s?await te(b=>this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:C,operationId:c,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:d,skills:p,integrations:f,timeoutMs:a,attempt:b}),s,C):await this.executeBestOfCandidate({inputFiles:o,prompt:r,candidateIndex:C,operationId:c,config:i,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:d,skills:p,integrations:f,timeoutMs:a});return i.onCandidateComplete?.(0,C,x.status==="success"?"success":"error"),x})),w=s?await te(S=>this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:a,operationId:c,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:u,skills:g,integrations:h,attempt:S}),{...s,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:o,taskPrompt:r,candidates:m,config:i,timeoutMs:a,operationId:c,systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,mcpServers:u,skills:g,integrations:h}),v=m.findIndex(S=>S.status==="success"),k=w.decision?.winner??(v>=0?v:0);i.onJudgeComplete?.(0,k,w.decision?.reasoning??"Judge failed to provide reasoning");let y={operationId:c,operation:"bestof-judge",tag:w.tag,sandboxId:w.sandboxId,swarmName:this.config.tag,operationName:e.name,candidateCount:l};return {winner:m[k]??m[0],winnerIndex:k,judgeReasoning:w.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:y,candidates:m}}async execute(e,n,r){let i=null,s="",l=r.tagPrefix,c={},a=null,o,d,u={...this.config.agent,...r.agent};try{i=new mt().withAgent(u).withSandbox(this.config.sandbox).withWorkspaceMode(this.config.workspaceMode).withSessionTagPrefix(r.tagPrefix),r.schema&&i.withSchema(r.schema,r.schemaOptions),r.systemPrompt&&i.withSystemPrompt(r.systemPrompt),r.mcpServers&&i.withMcpServers(r.mcpServers),r.skills?.length&&i.withSkills(r.skills),r.integrations&&i.withIntegrations(r.integrations),r.observability&&i.withObservability(r.observability),Object.keys(e).length>0&&i.withContext(e);let p=await i.run({prompt:n,timeoutMs:r.timeoutMs});s=p.sandboxId,l=i.getSessionTag()??r.tagPrefix;let g=null;try{g=await i.getOutputFiles(!0),c=g.files;}catch{}p.exitCode!==0?o=`Agent exited with code ${p.exitCode}`:r.schema?g?(a=g.data,g.error&&(o=g.error),g.rawData&&(d=g.rawData)):o="Failed to read output files from sandbox":a=c;}catch(p){if(o=p.message,i){l=i.getSessionTag()??r.tagPrefix;try{c=(await i.getOutputFiles(!0)).files;}catch{}}}finally{i&&await i.kill().catch(()=>{});}return {files:c,data:a,tag:l,sandboxId:s,error:o,rawData:d}}async executeMapItem(e,n,r,i,s,l,c=1){let a=this.getFiles(e),o=c>1?`${this.config.tag}-map-${r}-er${c-1}`:`${this.config.tag}-map-${r}`,d=this.evaluatePrompt(n,a,r);if(d instanceof Error)return this.buildErrorResult(`Prompt function threw: ${d.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let u=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=await this.semaphore.use(()=>this.execute(a,d,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:o,timeoutMs:l,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",errorRetry:c>1?c-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),h={operationId:i,operation:"map",tag:f.tag,sandboxId:f.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:c>1?c-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(f,h)}async executeMapItemWithVerify(e,n,r,i,s,l,c){let a=this.getFiles(e),o=`${this.config.tag}-map-${r}`,d=s.verify,u=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=this.evaluatePrompt(n,a,r);if(f instanceof Error)return this.buildErrorResult(`Prompt function threw: ${f.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let h=async(m,w,v)=>{let k=await this.semaphore.use(()=>this.execute(a,m,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:w,timeoutMs:l,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"map",itemIndex:r,role:"worker",verifyRetry:v&&v>1?v-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),y={operationId:i,operation:"map",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:v&&v>1?v-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(k,y)};return this.runWithVerification(h,{originalPrompt:f,inputFiles:a,verifyConfig:d,timeoutMs:l,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:u,skills:p,integrations:g,operationId:i,baseTag:o,retry:c,itemIndex:r,operation:"map",_pipelineContext:s._pipelineContext})}async executeMapItemWithBestOf(e,n,r,i,s,l,c){let a=this.getFiles(e),o=`${this.config.tag}-map-${r}`,d=this.evaluatePrompt(n,a,r);if(d instanceof Error)return this.buildErrorResult(`Prompt function threw: ${d.message}`,{operationId:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let u=s.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:i,operation:"map",tag:o,sandboxId:"",itemIndex:r});let g=s.mcpServers??this.config.mcpServers,f=u.mcpServers??g,h=u.judgeMcpServers??u.mcpServers??g,m=s.skills??this.config.skills,w=u.skills??m,v=u.judgeSkills??u.skills??m,k=s.integrations??this.config.integrations,y=u.integrations??k,S=u.judgeIntegrations??u.integrations??k,C=await Promise.all(Array.from({length:p},async(se,z)=>{let Ve=c?await te(qo=>this.executeBestOfCandidate({inputFiles:a,prompt:d,candidateIndex:z,operationId:i,config:u,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:w,integrations:y,timeoutMs:l,parentIndex:r,attempt:qo,_pipelineContext:s._pipelineContext}),c,z):await this.executeBestOfCandidate({inputFiles:a,prompt:d,candidateIndex:z,operationId:i,config:u,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:f,skills:w,integrations:y,timeoutMs:l,parentIndex:r,_pipelineContext:s._pipelineContext});return u.onCandidateComplete?.(r,z,Ve.status==="success"?"success":"error"),Ve})),x=c?await te(se=>this.executeBestOfJudge({inputFiles:a,taskPrompt:d,candidates:C,config:u,timeoutMs:l,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:v,integrations:S,parentIndex:r,attempt:se,_pipelineContext:s._pipelineContext}),{...c,retryOn:void 0},0):await this.executeBestOfJudge({inputFiles:a,taskPrompt:d,candidates:C,config:u,timeoutMs:l,operationId:i,systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,mcpServers:h,skills:v,integrations:S,parentIndex:r,_pipelineContext:s._pipelineContext}),b=C.findIndex(se=>se.status==="success"),E=x.decision?.winner??(b>=0?b:0),P=C[E]??C[0];u.onJudgeComplete?.(r,E,x.decision?.reasoning??"Judge failed to provide reasoning");let L={operationId:i,operation:"bestof-judge",tag:x.tag,sandboxId:x.sandboxId,swarmName:this.config.tag,operationName:s.name,candidateCount:p,...this.pipelineContextToMeta(s._pipelineContext)};return {...P,meta:{...P.meta,operation:"map",swarmName:this.config.tag,operationName:s.name,itemIndex:r,...this.pipelineContextToMeta(s._pipelineContext)},bestOf:{winnerIndex:E,judgeReasoning:x.decision?.reasoning??"Judge failed to provide reasoning",judgeMeta:L,candidates:C}}}async executeFilterItem(e,n,r,i,s,l,c=1){let a=this.getFiles(e),o=c>1?`${this.config.tag}-filter-${r}-er${c-1}`:`${this.config.tag}-filter-${r}`,d=s.mcpServers??this.config.mcpServers,u=s.skills??this.config.skills,p=s.integrations??this.config.integrations,g=await this.semaphore.use(()=>this.execute(a,n,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:d,skills:u,integrations:p,tagPrefix:o,timeoutMs:l,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",errorRetry:c>1?c-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),f={operationId:i,operation:"filter",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,errorRetry:c>1?c-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(g,f,a)}async executeFilterItemWithVerify(e,n,r,i,s,l,c){let a=this.getFiles(e),o=`${this.config.tag}-filter-${r}`,d=s.verify,u=s.mcpServers??this.config.mcpServers,p=s.skills??this.config.skills,g=s.integrations??this.config.integrations,f=async(h,m,w)=>{let v=await this.semaphore.use(()=>this.execute(a,h,{systemPrompt:s.systemPrompt,schema:s.schema,schemaOptions:s.schemaOptions,agent:s.agent,mcpServers:u,skills:p,integrations:g,tagPrefix:m,timeoutMs:l,observability:{swarmName:this.config.tag,operationName:s.name,operationId:i,operation:"filter",itemIndex:r,role:"worker",verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToObservability(s._pipelineContext)}})),k={operationId:i,operation:"filter",tag:v.tag,sandboxId:v.sandboxId,swarmName:this.config.tag,operationName:s.name,itemIndex:r,verifyRetry:w&&w>1?w-1:void 0,...this.pipelineContextToMeta(s._pipelineContext)};return this.buildResult(v,k,a)};return this.runWithVerification(f,{originalPrompt:n,inputFiles:a,verifyConfig:d,timeoutMs:l,systemPrompt:s.systemPrompt,schema:s.schema,mcpServers:u,skills:p,integrations:g,operationId:i,baseTag:o,retry:c,itemIndex:r,operation:"filter",_pipelineContext:s._pipelineContext})}async executeBestOfCandidate(e){let{inputFiles:n,prompt:r,candidateIndex:i,operationId:s,config:l,timeoutMs:c,parentIndex:a,attempt:o=1,_pipelineContext:d}=e,u=a!==void 0?`${this.config.tag}-map-${a}-bestof-cand-${i}`:`${this.config.tag}-bestof-cand-${i}`,p=o>1?`${u}-er${o-1}`:u,g=await this.semaphore.use(()=>this.execute(n,r,{systemPrompt:e.systemPrompt,schema:e.schema,schemaOptions:e.schemaOptions,agent:l.taskAgents?.[i],mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:p,timeoutMs:c,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:a,role:"candidate",candidateIndex:i,errorRetry:o>1?o-1:void 0,...this.pipelineContextToObservability(d)}})),f={operationId:s,operation:"bestof-cand",tag:g.tag,sandboxId:g.sandboxId,swarmName:this.config.tag,itemIndex:i,errorRetry:o>1?o-1:void 0,candidateIndex:i,...this.pipelineContextToMeta(d)};return this.buildResult(g,f)}buildJudgeContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return e.candidates.forEach((r,i)=>{r.status==="error"&&(n[`candidate_${i}/_failed.txt`]=`STATUS: FAILED
229
234
 
230
- Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([s,d])=>{n[`candidate_${i}/${s}`]=d;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:i,operationId:s,parentIndex:d,attempt:u=1,_pipelineContext:l}=e,o=d!==void 0?`${this.config.tag}-map-${d}-bestof-judge`:`${this.config.tag}-bestof-judge`,a=u>1?`${o}-er${u-1}`:o,c=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),p=xt(c),g=Z(Mn,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:p}),f=z$1.object({winner:z$1.number().min(0).max(n.length-1),reasoning:z$1.string()}),h=await this.semaphore.use(()=>this.execute(c,Ei,{systemPrompt:g,schema:f,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:a,timeoutMs:i,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:d,role:"judge",errorRetry:u>1?u-1:void 0,...this.pipelineContextToObservability(l)}})),m=null;if(h.data&&!h.error)m=h.data;else if(h.rawData)try{let y=JSON.parse(h.rawData);console.warn(`Judge returned invalid winner ${y.winner}, defaulting to candidate 0`),m={winner:0,reasoning:y.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${h.error}`);}return {status:m?"success":"error",decision:m,tag:h.tag,sandboxId:h.sandboxId,error:m?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=z$1.object({passed:z$1.boolean(),reasoning:z$1.string(),feedback:z$1.string().optional()});buildVerifyContext(e){let n=this.buildEvaluatorContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,systemPrompt:e.systemPrompt,schema:e.schema});return Object.entries(e.outputFiles).forEach(([r,i])=>{n[`worker_output/${r}`]=i;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:i,workerTag:s,retryAttempt:d=1,operation:u,itemIndex:l,attemptIndex:o,_pipelineContext:a}=e,c=d>1?`${s}-verifier-er${d-1}`:`${s}-verifier`,p=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,f=n.verifierIntegrations??e.integrations,h=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),m=xt(h),y=Z($n,{criteria:n.criteria,fileTree:m}),w=await this.semaphore.use(()=>this.execute(h,Ti,{systemPrompt:y,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:p,skills:g,integrations:f,tagPrefix:c,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:i,operation:u,itemIndex:l,role:"verifier",verifyRetry:o&&o>1?o-1:void 0,errorRetry:d>1?d-1:void 0,...this.pipelineContextToObservability(a)}})),b=null;if(w.data&&!w.error)b=w.data;else if(w.rawData)try{let k=JSON.parse(w.rawData);b={passed:!!k.passed,reasoning:k.reasoning??"Verification completed",feedback:k.feedback};}catch{console.warn(`Verify validation failed: ${w.error}`);}return {status:b?"success":"error",decision:b,tag:w.tag,sandboxId:w.sandboxId,error:b?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return Z(Un,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:d,operationId:u,baseTag:l,retry:o,itemIndex:a=0,operation:c,_pipelineContext:p}=n,g=s.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,f=r,h=null,m=0;for(;m<g;){m++;let w=m>1?`${l}-vr${m-1}`:l,b=o?await B(v=>e(f,v>1?`${w}-er${v-1}`:w,m),o,a):await e(f,w,m);if(s.onWorkerComplete?.(a,m,b.status==="error"?"error":"success"),b.status==="error")return b;h=b;let k=o?await B(v=>this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:u,workerTag:w,retryAttempt:v,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:p}),{...o,retryOn:void 0}):await this.executeVerify({inputFiles:i,outputFiles:b.files,taskPrompt:f,config:s,timeoutMs:d,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:u,workerTag:w,operation:c,itemIndex:a,attemptIndex:m,_pipelineContext:p}),C={operationId:u,operation:"verify",tag:k.tag,sandboxId:k.sandboxId,swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)};if(s.onVerifierComplete?.(a,m,k.decision?.passed??false,k.decision?.feedback),k.decision?.passed)return {...b,verify:{passed:true,reasoning:k.decision.reasoning,verifyMeta:C,attempts:m}};if(m<g){let v=k.decision?.feedback??k.decision?.reasoning??"Output did not meet criteria";f=t.buildRetryPromptWithFeedback(r,v);}}let y=m>1?`${l}-vr${m-1}`:l;return {...h,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:u,operation:"verify",tag:`${y}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)},attempts:m}}}generateOperationId(){return randomBytes(8).toString("hex")}pipelineContextToObservability(e){return e?{pipelineRunId:e.pipelineRunId,pipelineStepIndex:e.pipelineStepIndex}:{}}pipelineContextToMeta(e){return {pipelineRunId:e?.pipelineRunId,pipelineStepIndex:e?.pipelineStepIndex}}evaluatePrompt(e,n,r){if(typeof e=="string")return e;try{return e(n,r)}catch(i){return i}}buildEvaluatorContext(e){let n={};return e.systemPrompt&&(n["worker_task/system_prompt.txt"]=e.systemPrompt),n["worker_task/user_prompt.txt"]=e.taskPrompt,e.schema&&(n["worker_task/schema.json"]=F(e.schema)?ce(e.schema):de(e.schema)),Object.entries(e.inputFiles).forEach(([r,i])=>{n[`worker_task/input/${r}`]=i;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&re in e&&e[re]===true}getFiles(e){if(this.isSwarmResult(e)){let n={...e.files};return n["result.json"]&&(n["data.json"]=n["result.json"],delete n["result.json"]),n}return e}getIndex(e,n){return this.isSwarmResult(e)?e.meta.itemIndex:n}buildResult(e,n,r){let i=r??e.files;return e.error?{[re]:true,status:"error",data:null,files:i,meta:n,error:e.error,rawData:e.rawData}:{[re]:true,status:"success",data:e.data,files:i,meta:n}}buildErrorResult(e,n){return {[re]:true,status:"error",data:null,files:{},meta:n,error:e}}};var Ot=class t{swarm;steps;events;constructor(e,n=[],r={}){this.swarm=e,this.steps=n,this.events=r;}map(e){return new t(this.swarm,[...this.steps,{type:"map",config:e}],this.events)}filter(e){return new t(this.swarm,[...this.steps,{type:"filter",config:e}],this.events)}reduce(e){return new At(this.swarm,[...this.steps,{type:"reduce",config:e}],this.events)}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}async run(e){let n=randomBytes(8).toString("hex"),r=[],i=e,s=Date.now();for(let u=0;u<this.steps.length;u++){let l=this.steps[u],o=l.config.name,a=Date.now();this.events.onStepStart?.({type:l.type,index:u,name:o,itemCount:i.length});let c={pipelineRunId:n,pipelineStepIndex:u};try{let p=await this.executeStep(l,i,u,o,c),g=Date.now()-a;if(r.push({type:l.type,index:u,durationMs:g,results:p.output}),this.events.onStepComplete?.({type:l.type,index:u,name:o,durationMs:g,successCount:p.successCount,errorCount:p.errorCount,filteredCount:p.filteredCount}),l.type==="reduce")return {pipelineRunId:n,steps:r,output:p.output,totalDurationMs:Date.now()-s};i=p.nextItems;}catch(p){throw this.events.onStepError?.({type:l.type,index:u,name:o,error:p instanceof Error?p:new Error(String(p))}),p}}let d=r[r.length-1];return {pipelineRunId:n,steps:r,output:d?.results??[],totalDurationMs:Date.now()-s}}async executeStep(e,n,r,i,s){if(e.type==="map"){let l=e.config,o=await this.swarm.map({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i),bestOf:this.wrapBestOf(l.bestOf,r,i)});return {output:[...o],nextItems:o.success,successCount:o.success.length,errorCount:o.error.length,filteredCount:0}}if(e.type==="filter"){let l=e.config,o=await this.swarm.filter({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i)}),a=l.emit??"success",c=a==="success"?o.success:a==="filtered"?o.filtered:[...o.success,...o.filtered];return {output:[...o],nextItems:c,successCount:o.success.length,errorCount:o.error.length,filteredCount:o.filtered.length}}let d=e.config,u=await this.swarm.reduce({items:n,...d,_pipelineContext:s,retry:this.wrapRetry(d.retry,r,i),verify:this.wrapVerify(d.verify,r,i)});return {output:u,nextItems:[],successCount:u.status==="success"?1:0,errorCount:u.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(i,s,d)=>{e.onItemRetry?.(i,s,d),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,error:d});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(i,s,d)=>{e.onWorkerComplete?.(i,s,d),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,status:d});},onVerifierComplete:(i,s,d,u)=>{e.onVerifierComplete?.(i,s,d,u),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,passed:d,feedback:u});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(i,s,d)=>{e.onCandidateComplete?.(i,s,d),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:i,candidateIndex:s,status:d});},onJudgeComplete:(i,s,d)=>{e.onJudgeComplete?.(i,s,d),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:i,winnerIndex:s,reasoning:d});}}}},At=class t extends Ot{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 rr=class extends Error{feature;provider;reason;constructor(e,n,r){super(`${n} does not support ${e}${r?`: ${r}`:""}`),this.name="SandboxFeatureUnsupportedError",this.feature=e,this.provider=n,this.reason=r;}},ir=class extends Error{path;provider;constructor(e,n){super(`${n}: no such file or directory: ${e}`),this.name="SandboxPathNotFoundError",this.path=e,this.provider=n;}},sr=class extends Error{sandboxId;provider;state;constructor(e,n,r){super(`${n} sandbox ${e} is not running (${r}); inspect never starts or resumes a sandbox`),this.name="SandboxNotRunningError",this.sandboxId=e,this.provider=n,this.state=r;}};function or(t,e){return !!t&&typeof t=="object"&&t.name===e}function tc(t){return or(t,"SandboxFeatureUnsupportedError")}function nc(t){return or(t,"SandboxPathNotFoundError")}function rc(t){return or(t,"SandboxNotRunningError")}export{U as AGENT_REGISTRY,vo as AGENT_TYPES,Ge as Agent,Ir as BINARY_EFFORT_VALUES,An as BROWSER_ACTIONBOOK_PROMPT,qn as BROWSER_LOGIN_MCP_SERVER_NAME,Rt as BrowserCredentialsClient,It as BrowserProfilesClient,Or as DEFAULT_REASONING_EFFORT,Je as Evolve,T as EvolveConfigError,Mn as JUDGE_PROMPT,hn as MAX_SKILL_BYTES,mn as MAX_SKILL_FILES,Ot as Pipeline,Pr as REASONING_EFFORTS,Un as RETRY_FEEDBACK_PROMPT,xi as SCHEMA_PROMPT,Y as SKILL_FILE_NAME,bo as SUPPORTED_RUN_OPTIONS,re as SWARM_RESULT_BRAND,Si as SYSTEM_PROMPT,rr as SandboxFeatureUnsupportedError,sr as SandboxNotRunningError,ir as SandboxPathNotFoundError,ve as Semaphore,N as SkillRefError,$ as SkillResolveError,nr as Swarm,be as SwarmResultList,At as TerminalPipeline,Jt as VALIDATION_PRESETS,$n as VERIFY_PROMPT,bi as WORKSPACE_PROMPT,ki as WORKSPACE_SWE_PROMPT,Z as applyTemplate,Yn as browserCredentials,tr as browserProfiles,Dn as buildWorkerSystemPrompt,yn as computeSkillDigest,ne as createAgentParser,lt as createClaudeParser,ct as createCodexParser,dt as createDroidParser,pt as createGeminiParser,B as executeWithRetry,M as expandPath,D as getAgentConfig,z as getMcpSettingsDir,J as getMcpSettingsPath,ko as harnessEffortVocabulary,Dr as isAgentWorkUpdate,tc as isSandboxFeatureUnsupportedError,rc as isSandboxNotRunningError,nc as isSandboxPathNotFoundError,Wt as isValidAgentType,F as isZodSchema,de as jsonSchemaToString,_a as managedSandbox,En as mountSkills,ra as parseNdjsonLine,ia as parseNdjsonOutput,zr as parseQwenOutput,bn as parseSkillRef,va as pinSkillRef,Zr as readLocalDir,St as resolveDefaultSandbox,Sn as resolveSkillSha,Cn as resolveSkills,Et as resolveStorageConfig,Qr as saveLocalDir,kn as skillCloneUrl,le as skillDisplayUrl,xl as storage,Xe as writeClaudeMcpConfig,st as writeCodexMcpConfig,it as writeDroidGatewaySettings,rt as writeDroidMcpConfig,et as writeGeminiMcpConfig,rn as writeMcpConfig,tt as writeQwenMcpConfig,ce as zodSchemaToJson};
235
+ Error: ${r.error??"Unknown error"}`),Object.entries(r.files).forEach(([s,l])=>{n[`candidate_${i}/${s}`]=l;});}),n}async executeBestOfJudge(e){let{candidates:n,config:r,timeoutMs:i,operationId:s,parentIndex:l,attempt:c=1,_pipelineContext:a}=e,o=l!==void 0?`${this.config.tag}-map-${l}-bestof-judge`:`${this.config.tag}-bestof-judge`,d=c>1?`${o}-er${c-1}`:o,u=this.buildJudgeContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,candidates:n,systemPrompt:e.systemPrompt,schema:e.schema}),p=mn(u),g=he($r,{candidateCount:String(n.length),criteria:r.judgeCriteria,fileTree:p}),f=z.object({winner:z.number().min(0).max(n.length-1),reasoning:z.string()}),h=await this.semaphore.use(()=>this.execute(u,Ws,{systemPrompt:g,schema:f,agent:r.judgeAgent,mcpServers:e.mcpServers,skills:e.skills,integrations:e.integrations,tagPrefix:d,timeoutMs:i,observability:{swarmName:this.config.tag,operationId:s,operation:"map",itemIndex:l,role:"judge",errorRetry:c>1?c-1:void 0,...this.pipelineContextToObservability(a)}})),m=null;if(h.data&&!h.error)m=h.data;else if(h.rawData)try{let w=JSON.parse(h.rawData);console.warn(`Judge returned invalid winner ${w.winner}, defaulting to candidate 0`),m={winner:0,reasoning:w.reasoning??"Judge failed to provide reasoning"};}catch{console.warn(`Judge validation failed: ${h.error}`);}return {status:m?"success":"error",decision:m,tag:h.tag,sandboxId:h.sandboxId,error:m?void 0:"Judge failed to produce valid decision"}}static DEFAULT_VERIFY_MAX_ATTEMPTS=3;static VerifyDecisionSchema=z.object({passed:z.boolean(),reasoning:z.string(),feedback: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,i])=>{n[`worker_output/${r}`]=i;}),n}async executeVerify(e){let{config:n,timeoutMs:r,operationId:i,workerTag:s,retryAttempt:l=1,operation:c,itemIndex:a,attemptIndex:o,_pipelineContext:d}=e,u=l>1?`${s}-verifier-er${l-1}`:`${s}-verifier`,p=n.verifierMcpServers??e.mcpServers,g=n.verifierSkills??e.skills,f=n.verifierIntegrations??e.integrations,h=this.buildVerifyContext({inputFiles:e.inputFiles,taskPrompt:e.taskPrompt,outputFiles:e.outputFiles,systemPrompt:e.systemPrompt,schema:e.schema}),m=mn(h),w=he(Dr,{criteria:n.criteria,fileTree:m}),v=await this.semaphore.use(()=>this.execute(h,Hs,{systemPrompt:w,schema:t.VerifyDecisionSchema,agent:n.verifierAgent,mcpServers:p,skills:g,integrations:f,tagPrefix:u,timeoutMs:r,observability:{swarmName:this.config.tag,operationId:i,operation:c,itemIndex:a,role:"verifier",verifyRetry:o&&o>1?o-1:void 0,errorRetry:l>1?l-1:void 0,...this.pipelineContextToObservability(d)}})),k=null;if(v.data&&!v.error)k=v.data;else if(v.rawData)try{let y=JSON.parse(v.rawData);k={passed:!!y.passed,reasoning:y.reasoning??"Verification completed",feedback:y.feedback};}catch{console.warn(`Verify validation failed: ${v.error}`);}return {status:k?"success":"error",decision:k,tag:v.tag,sandboxId:v.sandboxId,error:k?void 0:"Verifier failed to produce valid decision"}}static buildRetryPromptWithFeedback(e,n){return he(Nr,{originalPrompt:e,feedback:n})}async runWithVerification(e,n){let{originalPrompt:r,inputFiles:i,verifyConfig:s,timeoutMs:l,operationId:c,baseTag:a,retry:o,itemIndex:d=0,operation:u,_pipelineContext:p}=n,g=s.maxAttempts??t.DEFAULT_VERIFY_MAX_ATTEMPTS,f=r,h=null,m=0;for(;m<g;){m++;let v=m>1?`${a}-vr${m-1}`:a,k=o?await te(C=>e(f,C>1?`${v}-er${C-1}`:v,m),o,d):await e(f,v,m);if(s.onWorkerComplete?.(d,m,k.status==="error"?"error":"success"),k.status==="error")return k;h=k;let y=o?await te(C=>this.executeVerify({inputFiles:i,outputFiles:k.files,taskPrompt:f,config:s,timeoutMs:l,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:c,workerTag:v,retryAttempt:C,operation:u,itemIndex:d,attemptIndex:m,_pipelineContext:p}),{...o,retryOn:void 0}):await this.executeVerify({inputFiles:i,outputFiles:k.files,taskPrompt:f,config:s,timeoutMs:l,systemPrompt:n.systemPrompt,schema:n.schema,mcpServers:n.mcpServers,skills:n.skills,integrations:n.integrations,operationId:c,workerTag:v,operation:u,itemIndex:d,attemptIndex:m,_pipelineContext:p}),S={operationId:c,operation:"verify",tag:y.tag,sandboxId:y.sandboxId,swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)};if(s.onVerifierComplete?.(d,m,y.decision?.passed??false,y.decision?.feedback),y.decision?.passed)return {...k,verify:{passed:true,reasoning:y.decision.reasoning,verifyMeta:S,attempts:m}};if(m<g){let C=y.decision?.feedback??y.decision?.reasoning??"Output did not meet criteria";f=t.buildRetryPromptWithFeedback(r,C);}}let w=m>1?`${a}-vr${m-1}`:a;return {...h,status:"error",verify:{passed:false,reasoning:"Max verification retries exceeded",verifyMeta:{operationId:c,operation:"verify",tag:`${w}-verifier`,sandboxId:"",swarmName:this.config.tag,attempts:m,...this.pipelineContextToMeta(p)},attempts:m}}}generateOperationId(){return randomBytes(8).toString("hex")}pipelineContextToObservability(e){return e?{pipelineRunId:e.pipelineRunId,pipelineStepIndex:e.pipelineStepIndex}:{}}pipelineContextToMeta(e){return {pipelineRunId:e?.pipelineRunId,pipelineStepIndex:e?.pipelineStepIndex}}evaluatePrompt(e,n,r){if(typeof e=="string")return e;try{return e(n,r)}catch(i){return i}}buildEvaluatorContext(e){let n={};return e.systemPrompt&&(n["worker_task/system_prompt.txt"]=e.systemPrompt),n["worker_task/user_prompt.txt"]=e.taskPrompt,e.schema&&(n["worker_task/schema.json"]=ae(e.schema)?Ue(e.schema):$e(e.schema)),Object.entries(e.inputFiles).forEach(([r,i])=>{n[`worker_task/input/${r}`]=i;}),n}isSwarmResult(e){return typeof e=="object"&&e!==null&&Ce in e&&e[Ce]===true}getFiles(e){if(this.isSwarmResult(e)){let n={...e.files};return n["result.json"]&&(n["data.json"]=n["result.json"],delete n["result.json"]),n}return e}getIndex(e,n){return this.isSwarmResult(e)?e.meta.itemIndex:n}buildResult(e,n,r){let i=r??e.files;return e.error?{[Ce]:true,status:"error",data:null,files:i,meta:n,error:e.error,rawData:e.rawData}:{[Ce]:true,status:"success",data:e.data,files:i,meta:n}}buildErrorResult(e,n){return {[Ce]:true,status:"error",data:null,files:{},meta:n,error:e}}};var Sn=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 xn(this.swarm,[...this.steps,{type:"reduce",config:e}],this.events)}on(e,n){if(typeof e=="string"){let r=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`;return new t(this.swarm,this.steps,{...this.events,[r]:n})}return new t(this.swarm,this.steps,{...this.events,...e})}async run(e){let n=randomBytes(8).toString("hex"),r=[],i=e,s=Date.now();for(let c=0;c<this.steps.length;c++){let a=this.steps[c],o=a.config.name,d=Date.now();this.events.onStepStart?.({type:a.type,index:c,name:o,itemCount:i.length});let u={pipelineRunId:n,pipelineStepIndex:c};try{let p=await this.executeStep(a,i,c,o,u),g=Date.now()-d;if(r.push({type:a.type,index:c,durationMs:g,results:p.output}),this.events.onStepComplete?.({type:a.type,index:c,name:o,durationMs:g,successCount:p.successCount,errorCount:p.errorCount,filteredCount:p.filteredCount}),a.type==="reduce")return {pipelineRunId:n,steps:r,output:p.output,totalDurationMs:Date.now()-s};i=p.nextItems;}catch(p){throw this.events.onStepError?.({type:a.type,index:c,name:o,error:p instanceof Error?p:new Error(String(p))}),p}}let l=r[r.length-1];return {pipelineRunId:n,steps:r,output:l?.results??[],totalDurationMs:Date.now()-s}}async executeStep(e,n,r,i,s){if(e.type==="map"){let a=e.config,o=await this.swarm.map({items:n,...a,_pipelineContext:s,retry:this.wrapRetry(a.retry,r,i),verify:this.wrapVerify(a.verify,r,i),bestOf:this.wrapBestOf(a.bestOf,r,i)});return {output:[...o],nextItems:o.success,successCount:o.success.length,errorCount:o.error.length,filteredCount:0}}if(e.type==="filter"){let a=e.config,o=await this.swarm.filter({items:n,...a,_pipelineContext:s,retry:this.wrapRetry(a.retry,r,i),verify:this.wrapVerify(a.verify,r,i)}),d=a.emit??"success",u=d==="success"?o.success:d==="filtered"?o.filtered:[...o.success,...o.filtered];return {output:[...o],nextItems:u,successCount:o.success.length,errorCount:o.error.length,filteredCount:o.filtered.length}}let l=e.config,c=await this.swarm.reduce({items:n,...l,_pipelineContext:s,retry:this.wrapRetry(l.retry,r,i),verify:this.wrapVerify(l.verify,r,i)});return {output:c,nextItems:[],successCount:c.status==="success"?1:0,errorCount:c.status==="error"?1:0,filteredCount:0}}wrapRetry(e,n,r){if(e)return {...e,onItemRetry:(i,s,l)=>{e.onItemRetry?.(i,s,l),this.events.onItemRetry?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,error:l});}}}wrapVerify(e,n,r){if(e)return {...e,onWorkerComplete:(i,s,l)=>{e.onWorkerComplete?.(i,s,l),this.events.onWorkerComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,status:l});},onVerifierComplete:(i,s,l,c)=>{e.onVerifierComplete?.(i,s,l,c),this.events.onVerifierComplete?.({stepIndex:n,stepName:r,itemIndex:i,attempt:s,passed:l,feedback:c});}}}wrapBestOf(e,n,r){if(e)return {...e,onCandidateComplete:(i,s,l)=>{e.onCandidateComplete?.(i,s,l),this.events.onCandidateComplete?.({stepIndex:n,stepName:r,itemIndex:i,candidateIndex:s,status:l});},onJudgeComplete:(i,s,l)=>{e.onJudgeComplete?.(i,s,l),this.events.onJudgeComplete?.({stepIndex:n,stepName:r,itemIndex:i,winnerIndex:s,reasoning:l});}}}},xn=class t extends Sn{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 si=class extends Error{feature;provider;reason;constructor(e,n,r){super(`${n} does not support ${e}${r?`: ${r}`:""}`),this.name="SandboxFeatureUnsupportedError",this.feature=e,this.provider=n,this.reason=r;}},oi=class extends Error{path;provider;constructor(e,n){super(`${n}: no such file or directory: ${e}`),this.name="SandboxPathNotFoundError",this.path=e,this.provider=n;}},ai=class extends Error{sandboxId;provider;state;constructor(e,n,r){super(`${n} sandbox ${e} is not running (${r}); inspect never starts or resumes a sandbox`),this.name="SandboxNotRunningError",this.sandboxId=e,this.provider=n,this.state=r;}};function li(t,e){return !!t&&typeof t=="object"&&t.name===e}function yu(t){return li(t,"SandboxFeatureUnsupportedError")}function wu(t){return li(t,"SandboxPathNotFoundError")}function vu(t){return li(t,"SandboxNotRunningError")}export{K as AGENT_REGISTRY,Ka as AGENT_TYPES,ft as Agent,Ai as BINARY_EFFORT_VALUES,Ur as BROWSER_ACTIONBOOK_PROMPT,Zr as BROWSER_LOGIN_MCP_SERVER_NAME,vn as BrowserCredentialsClient,bn as BrowserProfilesClient,Mi as DEFAULT_REASONING_EFFORT,mt as Evolve,O as EvolveConfigError,Tt as HomeFileError,$r as JUDGE_PROMPT,br as MAX_SKILL_BYTES,kr as MAX_SKILL_FILES,Sn as Pipeline,Oi as REASONING_EFFORTS,Nr as RETRY_FEEDBACK_PROMPT,Js as SCHEMA_PROMPT,me as SKILL_FILE_NAME,ja as SUPPORTED_RUN_OPTIONS,Ce as SWARM_RESULT_BRAND,Gs as SYSTEM_PROMPT,si as SandboxFeatureUnsupportedError,ai as SandboxNotRunningError,oi as SandboxPathNotFoundError,Ke as Semaphore,ie as SkillRefError,Q as SkillResolveError,ii as Swarm,je as SwarmResultList,xn as TerminalPipeline,Dn as VALIDATION_PRESETS,Dr as VERIFY_PROMPT,js as WORKSPACE_PROMPT,Vs as WORKSPACE_SWE_PROMPT,he as applyTemplate,Qr as browserCredentials,ri as browserProfiles,Fr as buildWorkerSystemPrompt,Sr as computeSkillDigest,xe as createAgentParser,Wt as createAntigravityParser,qt as createClaudeParser,Yt as createCodexParser,Zt as createDroidParser,Xt as createDshParser,en as createGeminiParser,rn as createPiParser,sn as createPrimeAgentParser,ln as createZcodeParser,te as executeWithRetry,D as expandPath,Y as getAgentConfig,ne as getMcpSettingsDir,J as getMcpSettingsPath,Va as harnessEffortVocabulary,rs as isAgentWorkUpdate,yu as isSandboxFeatureUnsupportedError,vu as isSandboxNotRunningError,wu as isSandboxPathNotFoundError,Kn as isValidAgentType,ae as isZodSchema,$e as jsonSchemaToString,qe as liveAgentTypes,Gc as managedSandbox,Ir as mountSkills,kc as parseNdjsonLine,bc as parseNdjsonOutput,ws as parseQwenOutput,Er as parseSkillRef,Dc as pinSkillRef,Es as readLocalDir,fn as resolveDefaultSandbox,Tr as resolveSkillSha,Pr as resolveSkills,yn as resolveStorageConfig,_s as saveLocalDir,_r as skillCloneUrl,Me as skillDisplayUrl,Ld as storage,Ut as writeAntigravityMcpConfig,$t as writeAntigravitySettings,Pt as writeClaudeMcpConfig,Vt as writeCodexMcpConfig,Nt as writeDroidGatewaySettings,Dt as writeDroidMcpConfig,Jt as writeDshMcpConfig,zt as writeDshRoutePatch,It as writeGeminiMcpConfig,Mt as writeKimiMcpConfig,er as writeMcpConfig,Bt as writeOpenCodeMcpConfig,Kt as writePiMcpConfig,jt as writePrimeAgentMcpConfig,Ot as writeQwenMcpConfig,Ft as writeZcodeMcpConfig,Lt as writeZcodeProviderConfig,Ue as zodSchemaToJson};