evolve-sdk 0.0.55.dev1151__tar.gz → 0.0.55.dev1159__tar.gz

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 (44) hide show
  1. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/PKG-INFO +1 -1
  2. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/bridge/dist/bridge.bundle.cjs +1 -1
  3. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/__init__.py +1 -1
  4. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/hosted.py +71 -2
  5. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve_sdk.egg-info/PKG-INFO +1 -1
  6. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/pyproject.toml +1 -1
  7. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/LICENSE +0 -0
  8. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/MANIFEST.in +0 -0
  9. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/README.md +0 -0
  10. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/bridge/__init__.py +0 -0
  11. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/_http.py +0 -0
  12. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/agent.py +0 -0
  13. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/bridge.py +0 -0
  14. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/browser_credentials.py +0 -0
  15. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/browser_profiles.py +0 -0
  16. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/config.py +0 -0
  17. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/integrations.py +0 -0
  18. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/managed_secrets.py +0 -0
  19. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/pipeline/__init__.py +0 -0
  20. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/pipeline/pipeline.py +0 -0
  21. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/pipeline/types.py +0 -0
  22. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/__init__.py +0 -0
  23. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/agent_md/judge.md +0 -0
  24. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/agent_md/reduce.md +0 -0
  25. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/agent_md/verify.md +0 -0
  26. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/user/judge.md +0 -0
  27. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/user/retry_feedback.md +0 -0
  28. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/prompts/user/verify.md +0 -0
  29. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/py.typed +0 -0
  30. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/results.py +0 -0
  31. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/retry.py +0 -0
  32. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/schema.py +0 -0
  33. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/sessions_client.py +0 -0
  34. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/storage_client.py +0 -0
  35. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/swarm/__init__.py +0 -0
  36. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/swarm/results.py +0 -0
  37. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/swarm/swarm.py +0 -0
  38. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/swarm/types.py +0 -0
  39. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve/utils.py +0 -0
  40. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve_sdk.egg-info/SOURCES.txt +0 -0
  41. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve_sdk.egg-info/dependency_links.txt +0 -0
  42. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve_sdk.egg-info/requires.txt +0 -0
  43. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/evolve_sdk.egg-info/top_level.txt +0 -0
  44. {evolve_sdk-0.0.55.dev1151 → evolve_sdk-0.0.55.dev1159}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.55.dev1151
3
+ Version: 0.0.55.dev1159
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -675,7 +675,7 @@ if __name__ == "__main__":
675
675
  ]))`;continue}else if(r[c]==="$"){a+=`($|(?=[\r
676
676
  ]))`;continue}}if(n.s&&r[c]==="."){a+=s?`${r[c]}\r
677
677
  `:`[${r[c]}\r
678
- ]`;continue}a+=r[c],r[c]==="\\"?i=!0:s&&r[c]==="]"?s=!1:!s&&r[c]==="["&&(s=!0)}try{new RegExp(a)}catch{return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return a}function UA(e,t){if(t.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),t.target==="openApi3"&&e.keyType?._def.typeName===Ue.ZodEnum)return{type:"object",required:e.keyType._def.values,properties:e.keyType._def.values.reduce((r,a)=>({...r,[a]:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"properties",a]})??Jr(t)}),{}),additionalProperties:t.rejectedAdditionalProperties};let n={type:"object",additionalProperties:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]})??t.allowedAdditionalProperties};if(t.target==="openApi3")return n;if(e.keyType?._def.typeName===Ue.ZodString&&e.keyType._def.checks?.length){let{type:r,...a}=DA(e.keyType._def,t);return{...n,propertyNames:a}}else{if(e.keyType?._def.typeName===Ue.ZodEnum)return{...n,propertyNames:{enum:e.keyType._def.values}};if(e.keyType?._def.typeName===Ue.ZodBranded&&e.keyType._def.type._def.typeName===Ue.ZodString&&e.keyType._def.type._def.checks?.length){let{type:r,...a}=MA(e.keyType._def,t);return{...n,propertyNames:a}}}return n}function ere(e,t){if(t.mapStrategy==="record")return UA(e,t);let n=gt(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||Jr(t),r=gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||Jr(t);return{type:"array",maxItems:125,items:{type:"array",items:[n,r],minItems:2,maxItems:2}}}function tre(e){let t=e.values,r=Object.keys(e.values).filter(i=>typeof t[t[i]]!="number").map(i=>t[i]),a=Array.from(new Set(r.map(i=>typeof i)));return{type:a.length===1?a[0]==="string"?"string":"number":["string","number"],enum:r}}function nre(e){return e.target==="openAi"?void 0:{not:Jr({...e,currentPath:[...e.currentPath,"not"]})}}function rre(e){return e.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var UI={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function are(e,t){if(t.target==="openApi3")return ire(e,t);let n=e.options instanceof Map?Array.from(e.options.values()):e.options;if(n.every(r=>r._def.typeName in UI&&(!r._def.checks||!r._def.checks.length))){let r=n.reduce((a,i)=>{let s=UI[i._def.typeName];return s&&!a.includes(s)?[...a,s]:a},[]);return{type:r.length>1?r:r[0]}}else if(n.every(r=>r._def.typeName==="ZodLiteral"&&!r.description)){let r=n.reduce((a,i)=>{let s=typeof i._def.value;switch(s){case"string":case"number":case"boolean":return[...a,s];case"bigint":return[...a,"integer"];case"object":if(i._def.value===null)return[...a,"null"];case"symbol":case"undefined":case"function":default:return a}},[]);if(r.length===n.length){let a=r.filter((i,s,o)=>o.indexOf(i)===s);return{type:a.length>1?a:a[0],enum:n.reduce((i,s)=>i.includes(s._def.value)?i:[...i,s._def.value],[])}}}else if(n.every(r=>r._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((r,a)=>[...r,...a._def.values.filter(i=>!r.includes(i))],[])};return ire(e,t)}var ire=(e,t)=>{let n=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((r,a)=>gt(r._def,{...t,currentPath:[...t.currentPath,"anyOf",`${a}`]})).filter(r=>!!r&&(!t.strictUnions||typeof r=="object"&&Object.keys(r).length>0));return n.length?{anyOf:n}:void 0};function sre(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return t.target==="openApi3"?{type:UI[e.innerType._def.typeName],nullable:!0}:{type:[UI[e.innerType._def.typeName],"null"]};if(t.target==="openApi3"){let r=gt(e.innerType._def,{...t,currentPath:[...t.currentPath]});return r&&"$ref"in r?{allOf:[r],nullable:!0}:r&&{...r,nullable:!0}}let n=gt(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}function ore(e,t){let n={type:"number"};if(!e.checks)return n;for(let r of e.checks)switch(r.kind){case"int":n.type="integer",AL(n,"type",r.message,t);break;case"min":t.target==="jsonSchema7"?r.inclusive?yn(n,"minimum",r.value,r.message,t):yn(n,"exclusiveMinimum",r.value,r.message,t):(r.inclusive||(n.exclusiveMinimum=!0),yn(n,"minimum",r.value,r.message,t));break;case"max":t.target==="jsonSchema7"?r.inclusive?yn(n,"maximum",r.value,r.message,t):yn(n,"exclusiveMaximum",r.value,r.message,t):(r.inclusive||(n.exclusiveMaximum=!0),yn(n,"maximum",r.value,r.message,t));break;case"multipleOf":yn(n,"multipleOf",r.value,r.message,t);break}return n}function cre(e,t){let n=t.target==="openAi",r={type:"object",properties:{}},a=[],i=e.shape();for(let o in i){let c=i[o];if(c===void 0||c._def===void 0)continue;let l=Qat(c);l&&n&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),l=!1);let u=gt(c._def,{...t,currentPath:[...t.currentPath,"properties",o],propertyPath:[...t.currentPath,"properties",o]});u!==void 0&&(r.properties[o]=u,l||a.push(o))}a.length&&(r.required=a);let s=Zat(e,t);return s!==void 0&&(r.additionalProperties=s),r}function Zat(e,t){if(e.catchall._def.typeName!=="ZodNever")return gt(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function Qat(e){try{return e.isOptional()}catch{return!0}}var lre=(e,t)=>{if(t.currentPath.toString()===t.propertyPath?.toString())return gt(e.innerType._def,t);let n=gt(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return n?{anyOf:[{not:Jr(t)},n]}:Jr(t)};var ure=(e,t)=>{if(t.pipeStrategy==="input")return gt(e.in._def,t);if(t.pipeStrategy==="output")return gt(e.out._def,t);let n=gt(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),r=gt(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,r].filter(a=>a!==void 0)}};function dre(e,t){return gt(e.type._def,t)}function fre(e,t){let r={type:"array",uniqueItems:!0,items:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};return e.minSize&&yn(r,"minItems",e.minSize.value,e.minSize.message,t),e.maxSize&&yn(r,"maxItems",e.maxSize.value,e.maxSize.message,t),r}function pre(e,t){return e.rest?{type:"array",minItems:e.items.length,items:e.items.map((n,r)=>gt(n._def,{...t,currentPath:[...t.currentPath,"items",`${r}`]})).reduce((n,r)=>r===void 0?n:[...n,r],[]),additionalItems:gt(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})}:{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((n,r)=>gt(n._def,{...t,currentPath:[...t.currentPath,"items",`${r}`]})).reduce((n,r)=>r===void 0?n:[...n,r],[])}}function hre(e){return{not:Jr(e)}}function mre(e){return Jr(e)}var gre=(e,t)=>gt(e.innerType._def,t);var yre=(e,t,n)=>{switch(t){case Ue.ZodString:return DA(e,n);case Ue.ZodNumber:return ore(e,n);case Ue.ZodObject:return cre(e,n);case Ue.ZodBigInt:return Jne(e,n);case Ue.ZodBoolean:return Hne();case Ue.ZodDate:return NL(e,n);case Ue.ZodUndefined:return hre(n);case Ue.ZodNull:return rre(n);case Ue.ZodArray:return Gne(e,n);case Ue.ZodUnion:case Ue.ZodDiscriminatedUnion:return are(e,n);case Ue.ZodIntersection:return Xne(e,n);case Ue.ZodTuple:return pre(e,n);case Ue.ZodRecord:return UA(e,n);case Ue.ZodLiteral:return Zne(e,n);case Ue.ZodEnum:return Kne(e);case Ue.ZodNativeEnum:return tre(e);case Ue.ZodNullable:return sre(e,n);case Ue.ZodOptional:return lre(e,n);case Ue.ZodMap:return ere(e,n);case Ue.ZodSet:return fre(e,n);case Ue.ZodLazy:return()=>e.getter()._def;case Ue.ZodPromise:return dre(e,n);case Ue.ZodNaN:case Ue.ZodNever:return nre(n);case Ue.ZodEffects:return jne(e,n);case Ue.ZodAny:return Jr(n);case Ue.ZodUnknown:return mre(n);case Ue.ZodDefault:return Yne(e,n);case Ue.ZodBranded:return MA(e,n);case Ue.ZodReadonly:return gre(e,n);case Ue.ZodCatch:return Wne(e,n);case Ue.ZodPipeline:return ure(e,n);case Ue.ZodFunction:case Ue.ZodVoid:case Ue.ZodSymbol:return;default:return(r=>{})(t)}};function gt(e,t,n=!1){let r=t.seen.get(e);if(t.override){let o=t.override?.(e,t,r,n);if(o!==Pne)return o}if(r&&!n){let o=est(r,t);if(o!==void 0)return o}let a={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,a);let i=yre(e,e.typeName,t),s=typeof i=="function"?gt(i(),t):i;if(s&&tst(e,t,s),t.postProcess){let o=t.postProcess(s,e,t);return a.jsonSchema=s,o}return a.jsonSchema=s,s}var est=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:OA(t.currentPath,e.path)};case"none":case"seen":return e.path.length<t.currentPath.length&&e.path.every((n,r)=>t.currentPath[r]===n)?(console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),Jr(t)):t.$refStrategy==="seen"?Jr(t):void 0}},tst=(e,t,n)=>(e.description&&(n.description=e.description,t.markdownDescription&&(n.markdownDescription=e.description)),n);var vre=(e,t)=>{let n=Cne(t),r=typeof t=="object"&&t.definitions?Object.entries(t.definitions).reduce((c,[l,u])=>({...c,[l]:gt(u._def,{...n,currentPath:[...n.basePath,n.definitionPath,l]},!0)??Jr(n)}),{}):void 0,a=typeof t=="string"?t:t?.nameStrategy==="title"?void 0:t?.name,i=gt(e._def,a===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,a]},!1)??Jr(n),s=typeof t=="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;s!==void 0&&(i.title=s),n.flags.hasReferencedOpenAiAnyType&&(r||(r={}),r[n.openAiAnyTypeName]||(r[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}));let o=a===void 0?r?{...i,[n.definitionPath]:r}:i:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,a].join("/"),[n.definitionPath]:{...r,[a]:i}};return n.target==="jsonSchema7"?o.$schema="http://json-schema.org/draft-07/schema#":(n.target==="jsonSchema2019-09"||n.target==="openAi")&&(o.$schema="https://json-schema.org/draft/2019-09/schema#"),n.target==="openAi"&&("anyOf"in o||"oneOf"in o||"allOf"in o||"type"in o&&Array.isArray(o.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),o};var bre=vre;var rf=Ve(require("fs"),1),xXe=require("fs");rE();FT();eB();var BKe=["no-internet","pinned-context"],g5t={strict:{coerceTypes:!1,removeAdditional:!1,useDefaults:!1,allErrors:!0},loose:{coerceTypes:"array",removeAdditional:!1,useDefaults:!0,allErrors:!0}};var FKe=2e5;function y5t(e,t){return t??Vp[e]?.defaultReasoningEffort}function cB(e){return e!=="off"&&e!=="none"&&e!=="minimal"&&e!=="no-thinking"}function EXe(e){if(!(e==="off"||e==="none"||e==="no-thinking"))return!e||e==="thinking"||e==="medium"?"medium":e==="low"||e==="minimal"?"minimal":e==="xhigh"?"max":e}function v5t(e){let t=EXe(e);return t?` --variant ${t} --thinking`:""}var Vp={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",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:"deepseek-v4-flash-vision",modelId:"deepseek-v4-flash-vision",description:"DeepSeek V4 Flash Vision (Fireworks) via the Evolve gateway"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:!0},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:!0,autoCompactWindow:FKe}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:e,model:t,isResume:n,reasoningEffort:r,nativeConfigPath:a})=>{let i=n?"--continue ":"",s=r?` --effort ${r}`:"",o=a?` --settings ${a}`:"";return`echo "${e}" | claude -p ${i}--model ${t}${s}${o} --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-5.6-sol",modelId:"gpt-5.6-sol",description:"Newest frontier flagship"},{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:"Previous frontier model"},{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=${FKe}`}},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:e,model:t,isResume:n,reasoningEffort:r,presetFlags:a})=>{let i=r?` -c model_reasoning_effort="${r}"`:"";return`printf '%s' "${e}" | codex exec --model ${t}${i}${a??""} --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:e,model:t,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${yO(e)} --model ${t} --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:e,model:t,isResume:n,isDirectMode:r})=>{let a=n?"--continue ":"",i=r||t.startsWith("dashscope/")?t:`dashscope/${t}`;return`qwen "${e}" ${a}--auth-type openai --model ${i} --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:e,isResume:t,reasoningEffort:n,homeDir:r=qp})=>{let a=t?"--continue ":"",i=yO(e),s=`--config-file ${r}/.kimi-code/config.toml`,o=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,c=cB(n)?"":" --no-thinking";return`if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${a}${s}${o}${c} -p ${i} --output-format stream-json; else kimi ${a}-p ${i} --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",modelId:"openrouter/anthropic/claude-fable-5",description:"Anthropic Fable 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-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 via OpenRouter"}],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:e,model:t,isResume:n,isDirectMode:r,isExternalGateway:a,reasoningEffort:i})=>{let s=n?"--continue ":"",o=v5t(i);if(a)return`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model litellm/${t} --format json${o} "${e}" < /dev/null`;let c=t.startsWith("openrouter/")?t:`openrouter/${t}`;return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model ${c} --format json${o} "${e}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model litellm/${c} --format json${o} "${e}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5",modelId:"claude-fable-5",description:"Factory-managed Claude Fable 5"},{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-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"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:!0,gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","glm-5.3-flash":"openrouter/z-ai/glm-5.3-flash","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:e,model:t,isResume:n,sessionId:r,reasoningEffort:a,isDirectMode:i,isExternalGateway:s,homeDir:o=qp})=>{let c=!i||s,l=c?`--settings ${o}/.factory/evolve-settings.json `:"",u=c?"custom:Evolve-Gateway-0":t,d=a?` --reasoning-effort ${a}`:"",f=n&&r?`--session-id ${yO(r)} `:"";return`printf '%s' ${yO(e)} | droid ${l}exec ${f}--skip-permissions-unsafe --cwd ${o}/workspace --output-format stream-json --model ${yO(u)}${d}`}}};function xv(e){let t=Vp[e];if(!t)throw new Error(`Unknown agent type: ${e}`);return t}function b5t(e){return e in Vp}function Fp(e,t=qp){return e.replace(/^~/,t)}function yO(e){return`'${e.replace(/'/g,"'\\''")}'`}function jw(e,t=qp){let n=xv(e);return`${Fp(n.mcpConfig.settingsDir,t)}/${n.mcpConfig.filename}`}function Kw(e,t=qp){let n=xv(e);return Fp(n.mcpConfig.settingsDir,t)}function Ev(e){if(e instanceof Error){let t=e.message.toLowerCase();return t.includes("not found")||t.includes("enoent")||t.includes("no such file")||t.includes("does not exist")}return!1}function TXe(e,t){let n=[t.command,t.url].filter(Boolean);if(n.length===0)throw new Error(`MCP server "${e}" must specify command or url`);if(n.length>1)throw new Error(`MCP server "${e}" cannot specify both command and url`)}function hB(e){for(let[t,n]of Object.entries(e))TXe(t,n)}function EO(e){return e.type?e.type:e.command?"stdio":"sse"}function S5t(e){let t=EO(e);return{...e,type:t}}function _5t(e){let{type:t,url:n,...r}=e;return EO(e)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function w5t(e){return{type:EO(e),...e}}function I5t(e){let{type:t,...n}=e;return n.command?{...n,transport:"stdio"}:n.url&&(t==="http"||t==="sse")?{...n,transport:t}:n}function x5t(e){let t=EO(e),{type:n,httpHeaders:r,envHttpHeaders:a,bearerTokenEnvVar:i,envVars:s,...o}=e;if(t==="stdio"&&e.command)return{type:"stdio",...o};if(e.url){let c={...o,type:t==="sse"?"sse":"http",url:e.url},l=e.headers??r;return l&&Object.keys(l).length>0&&(c.headers=l),c}return{type:t==="stdio"?"stdio":"http",...o}}async function CZ(e,t,n,r,a){hB(n);let i=Kw(t,a),s=jw(t,a);await e.files.makeDir(i);let o={};try{let l=await e.files.read(s);typeof l=="string"&&(o=JSON.parse(l))}catch(l){if(!Ev(l))throw l}let c=Object.fromEntries(Object.entries(n).map(([l,u])=>[l,r(u)]));await e.files.write(s,JSON.stringify({...o,mcpServers:c},null,2))}async function E5t(e,t,n,r){hB(n);let a=Kw("claude",r),i=jw("claude",r),s=Object.fromEntries(Object.entries(n).map(([c,l])=>[c,w5t(l)]));await e.files.write(`${t}/.mcp.json`,JSON.stringify({mcpServers:s},null,2)),await e.files.makeDir(a);let o={};try{let c=await e.files.read(i);typeof c=="string"&&(o=JSON.parse(c))}catch(c){if(!Ev(c))throw c}o.enableAllProjectMcpServers=!0,await e.files.write(i,JSON.stringify(o,null,2))}async function T5t(e,t,n){await CZ(e,"gemini",t,S5t,n)}async function k5t(e,t,n){await CZ(e,"qwen",t,_5t,n)}async function LKe(e,t,n,r,a){let i=Kw(t,a),s=jw(t,a);await e.files.makeDir(i);let o={};try{let f=await e.files.read(s);typeof f=="string"&&(o=JSON.parse(f))}catch(f){if(!Ev(f))throw f}let c=n.split("."),l=o;for(let f=0;f<c.length-1;f++){let h=c[f];(typeof l[h]!="object"||l[h]===null)&&(l[h]={}),l=l[h]}let u=c[c.length-1],d=typeof l[u]=="object"&&l[u]!==null?l[u]:{};l[u]={...d,...r},await e.files.write(s,JSON.stringify(o,null,2))}async function O5t(e,t,n){let r=Kw("qwen",n),a=jw("qwen",n);await e.files.makeDir(r);let i={};try{let l=await e.files.read(a);typeof l=="string"&&(i=JSON.parse(l))}catch(l){if(!Ev(l))throw l}let s=i.model??{},o=s.generationConfig??{},c=o.extra_body??{};i.model={...s,generationConfig:{...o,extra_body:{...c,enable_thinking:t}}},await e.files.write(a,JSON.stringify(i,null,2))}async function A5t(e,t,n){await CZ(e,"kimi",t,I5t,n)}async function P5t(e,t,n){hB(n);let r=`${t}/.factory`,a=`${r}/mcp.json`;await e.files.makeDir(r);let i={};try{let o=await e.files.read(a);typeof o=="string"&&(i=JSON.parse(o))}catch(o){if(!Ev(o))throw o}let s=Object.fromEntries(Object.entries(n).map(([o,c])=>[o,x5t(c)]));await e.files.write(a,JSON.stringify({...i,mcpServers:s},null,2))}async function R5t(e,t,n,r){let a=Fp(t.settingsPath,r),i=a.slice(0,a.lastIndexOf("/"));await e.files.makeDir(i);let s={cloudSessionSync:!1,customModels:[{model:t.model,displayName:t.displayName,baseUrl:t.baseUrl,apiKey:`\${${t.apiKeyEnv}}`,provider:t.provider,...t.maxOutputTokens!==void 0&&{maxOutputTokens:t.maxOutputTokens},extraHeaders:n}]};await e.files.write(a,JSON.stringify(s,null,2))}async function C5t(e,t,n){hB(n);let r=`${t}/opencode.json`,a={};try{let s=await e.files.read(r);typeof s=="string"&&(a=JSON.parse(s))}catch(s){if(!Ev(s))throw s}let i=Object.fromEntries(Object.entries(n).map(([s,o])=>[s,N5t(o)]));await e.files.write(r,JSON.stringify({...a,mcp:i},null,2))}function N5t(e){let t=EO(e);if(t==="stdio"&&e.command){let n={type:"local",command:e.args?[e.command,...e.args]:[e.command]};return e.env&&Object.keys(e.env).length>0&&(n.environment=e.env),n}if(e.url){let n={type:"remote",url:e.url};return e.headers&&Object.keys(e.headers).length>0&&(n.headers=e.headers),n}return{type:t==="stdio"?"local":"remote",...e}}function EZ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function kXe(e,t,n){let r=e[t];if(r===void 0)return{};let a=EZ(r);if(!a){let i=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${t}" in ${n}: expected a TOML table, found ${i}`)}return a}function TZ(e,t){if(e===t)return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((i,s)=>TZ(i,t[s]));let n=EZ(e),r=EZ(t);if(!n||!r)return!1;let a=Object.keys(n);return a.length===Object.keys(r).length&&a.every(i=>i in r&&TZ(n[i],r[i]))}async function OXe(e,t){let n="";try{let r=await e.files.read(t);typeof r=="string"&&(n=r)}catch(r){if(!Ev(r))throw r;return{}}if(!n.trim())return{};try{return Bm(n)}catch(r){throw new Error(`Failed to parse TOML at ${t}: ${r.message}`)}}async function NZ(e,t,n){await e.files.write(t,Wv(n).trimEnd()+`
678
+ ]`;continue}a+=r[c],r[c]==="\\"?i=!0:s&&r[c]==="]"?s=!1:!s&&r[c]==="["&&(s=!0)}try{new RegExp(a)}catch{return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return a}function UA(e,t){if(t.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),t.target==="openApi3"&&e.keyType?._def.typeName===Ue.ZodEnum)return{type:"object",required:e.keyType._def.values,properties:e.keyType._def.values.reduce((r,a)=>({...r,[a]:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"properties",a]})??Jr(t)}),{}),additionalProperties:t.rejectedAdditionalProperties};let n={type:"object",additionalProperties:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]})??t.allowedAdditionalProperties};if(t.target==="openApi3")return n;if(e.keyType?._def.typeName===Ue.ZodString&&e.keyType._def.checks?.length){let{type:r,...a}=DA(e.keyType._def,t);return{...n,propertyNames:a}}else{if(e.keyType?._def.typeName===Ue.ZodEnum)return{...n,propertyNames:{enum:e.keyType._def.values}};if(e.keyType?._def.typeName===Ue.ZodBranded&&e.keyType._def.type._def.typeName===Ue.ZodString&&e.keyType._def.type._def.checks?.length){let{type:r,...a}=MA(e.keyType._def,t);return{...n,propertyNames:a}}}return n}function ere(e,t){if(t.mapStrategy==="record")return UA(e,t);let n=gt(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||Jr(t),r=gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||Jr(t);return{type:"array",maxItems:125,items:{type:"array",items:[n,r],minItems:2,maxItems:2}}}function tre(e){let t=e.values,r=Object.keys(e.values).filter(i=>typeof t[t[i]]!="number").map(i=>t[i]),a=Array.from(new Set(r.map(i=>typeof i)));return{type:a.length===1?a[0]==="string"?"string":"number":["string","number"],enum:r}}function nre(e){return e.target==="openAi"?void 0:{not:Jr({...e,currentPath:[...e.currentPath,"not"]})}}function rre(e){return e.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var UI={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function are(e,t){if(t.target==="openApi3")return ire(e,t);let n=e.options instanceof Map?Array.from(e.options.values()):e.options;if(n.every(r=>r._def.typeName in UI&&(!r._def.checks||!r._def.checks.length))){let r=n.reduce((a,i)=>{let s=UI[i._def.typeName];return s&&!a.includes(s)?[...a,s]:a},[]);return{type:r.length>1?r:r[0]}}else if(n.every(r=>r._def.typeName==="ZodLiteral"&&!r.description)){let r=n.reduce((a,i)=>{let s=typeof i._def.value;switch(s){case"string":case"number":case"boolean":return[...a,s];case"bigint":return[...a,"integer"];case"object":if(i._def.value===null)return[...a,"null"];case"symbol":case"undefined":case"function":default:return a}},[]);if(r.length===n.length){let a=r.filter((i,s,o)=>o.indexOf(i)===s);return{type:a.length>1?a:a[0],enum:n.reduce((i,s)=>i.includes(s._def.value)?i:[...i,s._def.value],[])}}}else if(n.every(r=>r._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((r,a)=>[...r,...a._def.values.filter(i=>!r.includes(i))],[])};return ire(e,t)}var ire=(e,t)=>{let n=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((r,a)=>gt(r._def,{...t,currentPath:[...t.currentPath,"anyOf",`${a}`]})).filter(r=>!!r&&(!t.strictUnions||typeof r=="object"&&Object.keys(r).length>0));return n.length?{anyOf:n}:void 0};function sre(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return t.target==="openApi3"?{type:UI[e.innerType._def.typeName],nullable:!0}:{type:[UI[e.innerType._def.typeName],"null"]};if(t.target==="openApi3"){let r=gt(e.innerType._def,{...t,currentPath:[...t.currentPath]});return r&&"$ref"in r?{allOf:[r],nullable:!0}:r&&{...r,nullable:!0}}let n=gt(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}function ore(e,t){let n={type:"number"};if(!e.checks)return n;for(let r of e.checks)switch(r.kind){case"int":n.type="integer",AL(n,"type",r.message,t);break;case"min":t.target==="jsonSchema7"?r.inclusive?yn(n,"minimum",r.value,r.message,t):yn(n,"exclusiveMinimum",r.value,r.message,t):(r.inclusive||(n.exclusiveMinimum=!0),yn(n,"minimum",r.value,r.message,t));break;case"max":t.target==="jsonSchema7"?r.inclusive?yn(n,"maximum",r.value,r.message,t):yn(n,"exclusiveMaximum",r.value,r.message,t):(r.inclusive||(n.exclusiveMaximum=!0),yn(n,"maximum",r.value,r.message,t));break;case"multipleOf":yn(n,"multipleOf",r.value,r.message,t);break}return n}function cre(e,t){let n=t.target==="openAi",r={type:"object",properties:{}},a=[],i=e.shape();for(let o in i){let c=i[o];if(c===void 0||c._def===void 0)continue;let l=Qat(c);l&&n&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),l=!1);let u=gt(c._def,{...t,currentPath:[...t.currentPath,"properties",o],propertyPath:[...t.currentPath,"properties",o]});u!==void 0&&(r.properties[o]=u,l||a.push(o))}a.length&&(r.required=a);let s=Zat(e,t);return s!==void 0&&(r.additionalProperties=s),r}function Zat(e,t){if(e.catchall._def.typeName!=="ZodNever")return gt(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function Qat(e){try{return e.isOptional()}catch{return!0}}var lre=(e,t)=>{if(t.currentPath.toString()===t.propertyPath?.toString())return gt(e.innerType._def,t);let n=gt(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return n?{anyOf:[{not:Jr(t)},n]}:Jr(t)};var ure=(e,t)=>{if(t.pipeStrategy==="input")return gt(e.in._def,t);if(t.pipeStrategy==="output")return gt(e.out._def,t);let n=gt(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),r=gt(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,r].filter(a=>a!==void 0)}};function dre(e,t){return gt(e.type._def,t)}function fre(e,t){let r={type:"array",uniqueItems:!0,items:gt(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};return e.minSize&&yn(r,"minItems",e.minSize.value,e.minSize.message,t),e.maxSize&&yn(r,"maxItems",e.maxSize.value,e.maxSize.message,t),r}function pre(e,t){return e.rest?{type:"array",minItems:e.items.length,items:e.items.map((n,r)=>gt(n._def,{...t,currentPath:[...t.currentPath,"items",`${r}`]})).reduce((n,r)=>r===void 0?n:[...n,r],[]),additionalItems:gt(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})}:{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((n,r)=>gt(n._def,{...t,currentPath:[...t.currentPath,"items",`${r}`]})).reduce((n,r)=>r===void 0?n:[...n,r],[])}}function hre(e){return{not:Jr(e)}}function mre(e){return Jr(e)}var gre=(e,t)=>gt(e.innerType._def,t);var yre=(e,t,n)=>{switch(t){case Ue.ZodString:return DA(e,n);case Ue.ZodNumber:return ore(e,n);case Ue.ZodObject:return cre(e,n);case Ue.ZodBigInt:return Jne(e,n);case Ue.ZodBoolean:return Hne();case Ue.ZodDate:return NL(e,n);case Ue.ZodUndefined:return hre(n);case Ue.ZodNull:return rre(n);case Ue.ZodArray:return Gne(e,n);case Ue.ZodUnion:case Ue.ZodDiscriminatedUnion:return are(e,n);case Ue.ZodIntersection:return Xne(e,n);case Ue.ZodTuple:return pre(e,n);case Ue.ZodRecord:return UA(e,n);case Ue.ZodLiteral:return Zne(e,n);case Ue.ZodEnum:return Kne(e);case Ue.ZodNativeEnum:return tre(e);case Ue.ZodNullable:return sre(e,n);case Ue.ZodOptional:return lre(e,n);case Ue.ZodMap:return ere(e,n);case Ue.ZodSet:return fre(e,n);case Ue.ZodLazy:return()=>e.getter()._def;case Ue.ZodPromise:return dre(e,n);case Ue.ZodNaN:case Ue.ZodNever:return nre(n);case Ue.ZodEffects:return jne(e,n);case Ue.ZodAny:return Jr(n);case Ue.ZodUnknown:return mre(n);case Ue.ZodDefault:return Yne(e,n);case Ue.ZodBranded:return MA(e,n);case Ue.ZodReadonly:return gre(e,n);case Ue.ZodCatch:return Wne(e,n);case Ue.ZodPipeline:return ure(e,n);case Ue.ZodFunction:case Ue.ZodVoid:case Ue.ZodSymbol:return;default:return(r=>{})(t)}};function gt(e,t,n=!1){let r=t.seen.get(e);if(t.override){let o=t.override?.(e,t,r,n);if(o!==Pne)return o}if(r&&!n){let o=est(r,t);if(o!==void 0)return o}let a={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,a);let i=yre(e,e.typeName,t),s=typeof i=="function"?gt(i(),t):i;if(s&&tst(e,t,s),t.postProcess){let o=t.postProcess(s,e,t);return a.jsonSchema=s,o}return a.jsonSchema=s,s}var est=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:OA(t.currentPath,e.path)};case"none":case"seen":return e.path.length<t.currentPath.length&&e.path.every((n,r)=>t.currentPath[r]===n)?(console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),Jr(t)):t.$refStrategy==="seen"?Jr(t):void 0}},tst=(e,t,n)=>(e.description&&(n.description=e.description,t.markdownDescription&&(n.markdownDescription=e.description)),n);var vre=(e,t)=>{let n=Cne(t),r=typeof t=="object"&&t.definitions?Object.entries(t.definitions).reduce((c,[l,u])=>({...c,[l]:gt(u._def,{...n,currentPath:[...n.basePath,n.definitionPath,l]},!0)??Jr(n)}),{}):void 0,a=typeof t=="string"?t:t?.nameStrategy==="title"?void 0:t?.name,i=gt(e._def,a===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,a]},!1)??Jr(n),s=typeof t=="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;s!==void 0&&(i.title=s),n.flags.hasReferencedOpenAiAnyType&&(r||(r={}),r[n.openAiAnyTypeName]||(r[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}));let o=a===void 0?r?{...i,[n.definitionPath]:r}:i:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,a].join("/"),[n.definitionPath]:{...r,[a]:i}};return n.target==="jsonSchema7"?o.$schema="http://json-schema.org/draft-07/schema#":(n.target==="jsonSchema2019-09"||n.target==="openAi")&&(o.$schema="https://json-schema.org/draft/2019-09/schema#"),n.target==="openAi"&&("anyOf"in o||"oneOf"in o||"allOf"in o||"type"in o&&Array.isArray(o.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),o};var bre=vre;var rf=Ve(require("fs"),1),xXe=require("fs");rE();FT();eB();var BKe=["no-internet","pinned-context"],g5t={strict:{coerceTypes:!1,removeAdditional:!1,useDefaults:!1,allErrors:!0},loose:{coerceTypes:"array",removeAdditional:!1,useDefaults:!0,allErrors:!0}};var FKe=2e5;function y5t(e,t){return t??Vp[e]?.defaultReasoningEffort}function cB(e){return e!=="off"&&e!=="none"&&e!=="minimal"&&e!=="no-thinking"}function EXe(e){if(!(e==="off"||e==="none"||e==="no-thinking"))return!e||e==="thinking"||e==="medium"?"medium":e==="low"||e==="minimal"?"minimal":e==="xhigh"?"max":e}function v5t(e){let t=EXe(e);return t?` --variant ${t} --thinking`:""}var Vp={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",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:"glm-5.3-flash-fireworks",modelId:"glm-5.3-flash-fireworks",description:"Zhipu GLM-5.3 Flash on Fireworks via the Evolve gateway"},{alias:"deepseek-v4-flash-vision",modelId:"deepseek-v4-flash-vision",description:"DeepSeek V4 Flash Vision (Fireworks) via the Evolve gateway"}],systemPromptFile:"CLAUDE.md",mcpConfig:{settingsDir:"~/.claude",filename:"settings.json",format:"json",projectConfig:!0},nativeConfig:{format:"json",path:"~/.claude/evolve-user-settings.json",delivery:"settings-flag"},presets:{"no-internet":{configStamp:{permissions:{deny:["WebSearch","WebFetch"]}}},"pinned-context":{configStamp:{autoCompactEnabled:!0,autoCompactWindow:FKe}}},skillsConfig:{targetDir:"~/.claude/skills"},buildCommand:({prompt:e,model:t,isResume:n,reasoningEffort:r,nativeConfigPath:a})=>{let i=n?"--continue ":"",s=r?` --effort ${r}`:"",o=a?` --settings ${a}`:"";return`echo "${e}" | claude -p ${i}--model ${t}${s}${o} --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-5.6-sol",modelId:"gpt-5.6-sol",description:"Newest frontier flagship"},{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:"Previous frontier model"},{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=${FKe}`}},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:e,model:t,isResume:n,reasoningEffort:r,presetFlags:a})=>{let i=r?` -c model_reasoning_effort="${r}"`:"";return`printf '%s' "${e}" | codex exec --model ${t}${i}${a??""} --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:e,model:t,isResume:n})=>`gemini ${n?"--resume latest ":""}--prompt ${yO(e)} --model ${t} --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:e,model:t,isResume:n,isDirectMode:r})=>{let a=n?"--continue ":"",i=r||t.startsWith("dashscope/")?t:`dashscope/${t}`;return`qwen "${e}" ${a}--auth-type openai --model ${i} --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:e,isResume:t,reasoningEffort:n,homeDir:r=qp})=>{let a=t?"--continue ":"",i=yO(e),s=`--config-file ${r}/.kimi-code/config.toml`,o=`$(if [ -f ${r}/.kimi-code/mcp.json ]; then printf ' --mcp-config-file ${r}/.kimi-code/mcp.json'; fi)`,c=cB(n)?"":" --no-thinking";return`if kimi --help 2>&1 | grep -q -- '--print'; then kimi --print ${a}${s}${o}${c} -p ${i} --output-format stream-json; else kimi ${a}-p ${i} --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",modelId:"openrouter/anthropic/claude-fable-5",description:"Anthropic Fable 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-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 via OpenRouter"}],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:e,model:t,isResume:n,isDirectMode:r,isExternalGateway:a,reasoningEffort:i})=>{let s=n?"--continue ":"",o=v5t(i);if(a)return`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model litellm/${t} --format json${o} "${e}" < /dev/null`;let c=t.startsWith("openrouter/")?t:`openrouter/${t}`;return r?`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model ${c} --format json${o} "${e}" < /dev/null`:`OPENCODE_PERMISSION='{"*":"allow"}' opencode run ${s}--model litellm/${c} --format json${o} "${e}" < /dev/null`}},droid:{image:"evolve-all",apiKeyEnv:"FACTORY_API_KEY",effortSupport:"level",defaultModel:"claude-opus-5",defaultReasoningEffort:"high",models:[{alias:"claude-fable-5",modelId:"claude-fable-5",description:"Factory-managed Claude Fable 5"},{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-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:"glm-5.3-flash-fireworks",modelId:"glm-5.3-flash-fireworks",description:"Zhipu GLM-5.3 Flash on Fireworks via the Evolve gateway"}],systemPromptFile:"AGENTS.md",mcpConfig:{settingsDir:"~/.factory",filename:"mcp.json",format:"json"},skillsConfig:{targetDir:"~/.factory/skills"},skipApiKeyEnvInGateway:!0,gatewayModelAliases:{"kimi-k3":"moonshot/kimi-k3","glm-5.3":"openrouter/z-ai/glm-5.3","glm-5.3-flash":"openrouter/z-ai/glm-5.3-flash","glm-5.3-flash-fireworks":"glm-5.3-flash-fireworks","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:e,model:t,isResume:n,sessionId:r,reasoningEffort:a,isDirectMode:i,isExternalGateway:s,homeDir:o=qp})=>{let c=!i||s,l=c?`--settings ${o}/.factory/evolve-settings.json `:"",u=c?"custom:Evolve-Gateway-0":t,d=a?` --reasoning-effort ${a}`:"",f=n&&r?`--session-id ${yO(r)} `:"";return`printf '%s' ${yO(e)} | droid ${l}exec ${f}--skip-permissions-unsafe --cwd ${o}/workspace --output-format stream-json --model ${yO(u)}${d}`}}};function xv(e){let t=Vp[e];if(!t)throw new Error(`Unknown agent type: ${e}`);return t}function b5t(e){return e in Vp}function Fp(e,t=qp){return e.replace(/^~/,t)}function yO(e){return`'${e.replace(/'/g,"'\\''")}'`}function jw(e,t=qp){let n=xv(e);return`${Fp(n.mcpConfig.settingsDir,t)}/${n.mcpConfig.filename}`}function Kw(e,t=qp){let n=xv(e);return Fp(n.mcpConfig.settingsDir,t)}function Ev(e){if(e instanceof Error){let t=e.message.toLowerCase();return t.includes("not found")||t.includes("enoent")||t.includes("no such file")||t.includes("does not exist")}return!1}function TXe(e,t){let n=[t.command,t.url].filter(Boolean);if(n.length===0)throw new Error(`MCP server "${e}" must specify command or url`);if(n.length>1)throw new Error(`MCP server "${e}" cannot specify both command and url`)}function hB(e){for(let[t,n]of Object.entries(e))TXe(t,n)}function EO(e){return e.type?e.type:e.command?"stdio":"sse"}function S5t(e){let t=EO(e);return{...e,type:t}}function _5t(e){let{type:t,url:n,...r}=e;return EO(e)==="http"&&n?{httpUrl:n,...r}:n?{url:n,...r}:r}function w5t(e){return{type:EO(e),...e}}function I5t(e){let{type:t,...n}=e;return n.command?{...n,transport:"stdio"}:n.url&&(t==="http"||t==="sse")?{...n,transport:t}:n}function x5t(e){let t=EO(e),{type:n,httpHeaders:r,envHttpHeaders:a,bearerTokenEnvVar:i,envVars:s,...o}=e;if(t==="stdio"&&e.command)return{type:"stdio",...o};if(e.url){let c={...o,type:t==="sse"?"sse":"http",url:e.url},l=e.headers??r;return l&&Object.keys(l).length>0&&(c.headers=l),c}return{type:t==="stdio"?"stdio":"http",...o}}async function CZ(e,t,n,r,a){hB(n);let i=Kw(t,a),s=jw(t,a);await e.files.makeDir(i);let o={};try{let l=await e.files.read(s);typeof l=="string"&&(o=JSON.parse(l))}catch(l){if(!Ev(l))throw l}let c=Object.fromEntries(Object.entries(n).map(([l,u])=>[l,r(u)]));await e.files.write(s,JSON.stringify({...o,mcpServers:c},null,2))}async function E5t(e,t,n,r){hB(n);let a=Kw("claude",r),i=jw("claude",r),s=Object.fromEntries(Object.entries(n).map(([c,l])=>[c,w5t(l)]));await e.files.write(`${t}/.mcp.json`,JSON.stringify({mcpServers:s},null,2)),await e.files.makeDir(a);let o={};try{let c=await e.files.read(i);typeof c=="string"&&(o=JSON.parse(c))}catch(c){if(!Ev(c))throw c}o.enableAllProjectMcpServers=!0,await e.files.write(i,JSON.stringify(o,null,2))}async function T5t(e,t,n){await CZ(e,"gemini",t,S5t,n)}async function k5t(e,t,n){await CZ(e,"qwen",t,_5t,n)}async function LKe(e,t,n,r,a){let i=Kw(t,a),s=jw(t,a);await e.files.makeDir(i);let o={};try{let f=await e.files.read(s);typeof f=="string"&&(o=JSON.parse(f))}catch(f){if(!Ev(f))throw f}let c=n.split("."),l=o;for(let f=0;f<c.length-1;f++){let h=c[f];(typeof l[h]!="object"||l[h]===null)&&(l[h]={}),l=l[h]}let u=c[c.length-1],d=typeof l[u]=="object"&&l[u]!==null?l[u]:{};l[u]={...d,...r},await e.files.write(s,JSON.stringify(o,null,2))}async function O5t(e,t,n){let r=Kw("qwen",n),a=jw("qwen",n);await e.files.makeDir(r);let i={};try{let l=await e.files.read(a);typeof l=="string"&&(i=JSON.parse(l))}catch(l){if(!Ev(l))throw l}let s=i.model??{},o=s.generationConfig??{},c=o.extra_body??{};i.model={...s,generationConfig:{...o,extra_body:{...c,enable_thinking:t}}},await e.files.write(a,JSON.stringify(i,null,2))}async function A5t(e,t,n){await CZ(e,"kimi",t,I5t,n)}async function P5t(e,t,n){hB(n);let r=`${t}/.factory`,a=`${r}/mcp.json`;await e.files.makeDir(r);let i={};try{let o=await e.files.read(a);typeof o=="string"&&(i=JSON.parse(o))}catch(o){if(!Ev(o))throw o}let s=Object.fromEntries(Object.entries(n).map(([o,c])=>[o,x5t(c)]));await e.files.write(a,JSON.stringify({...i,mcpServers:s},null,2))}async function R5t(e,t,n,r){let a=Fp(t.settingsPath,r),i=a.slice(0,a.lastIndexOf("/"));await e.files.makeDir(i);let s={cloudSessionSync:!1,customModels:[{model:t.model,displayName:t.displayName,baseUrl:t.baseUrl,apiKey:`\${${t.apiKeyEnv}}`,provider:t.provider,...t.maxOutputTokens!==void 0&&{maxOutputTokens:t.maxOutputTokens},extraHeaders:n}]};await e.files.write(a,JSON.stringify(s,null,2))}async function C5t(e,t,n){hB(n);let r=`${t}/opencode.json`,a={};try{let s=await e.files.read(r);typeof s=="string"&&(a=JSON.parse(s))}catch(s){if(!Ev(s))throw s}let i=Object.fromEntries(Object.entries(n).map(([s,o])=>[s,N5t(o)]));await e.files.write(r,JSON.stringify({...a,mcp:i},null,2))}function N5t(e){let t=EO(e);if(t==="stdio"&&e.command){let n={type:"local",command:e.args?[e.command,...e.args]:[e.command]};return e.env&&Object.keys(e.env).length>0&&(n.environment=e.env),n}if(e.url){let n={type:"remote",url:e.url};return e.headers&&Object.keys(e.headers).length>0&&(n.headers=e.headers),n}return{type:t==="stdio"?"local":"remote",...e}}function EZ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function kXe(e,t,n){let r=e[t];if(r===void 0)return{};let a=EZ(r);if(!a){let i=Array.isArray(r)?"an array":`a ${typeof r}`;throw new Error(`Refusing to rewrite "${t}" in ${n}: expected a TOML table, found ${i}`)}return a}function TZ(e,t){if(e===t)return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((i,s)=>TZ(i,t[s]));let n=EZ(e),r=EZ(t);if(!n||!r)return!1;let a=Object.keys(n);return a.length===Object.keys(r).length&&a.every(i=>i in r&&TZ(n[i],r[i]))}async function OXe(e,t){let n="";try{let r=await e.files.read(t);typeof r=="string"&&(n=r)}catch(r){if(!Ev(r))throw r;return{}}if(!n.trim())return{};try{return Bm(n)}catch(r){throw new Error(`Failed to parse TOML at ${t}: ${r.message}`)}}async function NZ(e,t,n){await e.files.write(t,Wv(n).trimEnd()+`
679
679
  `)}function M5t(e,t){let n={},r=t.type??(t.command?"stdio":"http");if(r==="http"||r==="sse"||t.url){if(!t.url)throw new Error(`MCP server "${e}" is missing url for ${r} transport`);n.url=t.url,t.bearerTokenEnvVar&&(n.bearer_token_env_var=t.bearerTokenEnvVar);let a=t.httpHeaders??t.headers;a&&Object.keys(a).length>0&&(n.http_headers=a),t.envHttpHeaders&&Object.keys(t.envHttpHeaders).length>0&&(n.env_http_headers=t.envHttpHeaders)}else n.command=t.command,t.args&&t.args.length>0&&(n.args=t.args),t.cwd&&(n.cwd=t.cwd);return t.env&&Object.keys(t.env).length>0&&(n.env=t.env),t.envVars&&t.envVars.length>0&&(n.env_vars=t.envVars),n}async function D5t(e,t,n){for(let[o,c]of Object.entries(t))TXe(o,c);let r=Kw("codex",n),a=jw("codex",n);await e.files.makeDir(r);let i=await OXe(e,a);i.experimental_use_rmcp_client===void 0&&(i.experimental_use_rmcp_client=!0);let s=kXe(i,"mcp_servers",a);i.mcp_servers=s;for(let[o,c]of Object.entries(t))s[o]===void 0&&(s[o]=M5t(o,c));await NZ(e,a,i)}async function VKe(e,t,n,r={},a){let i=Kw("codex",a),s=jw("codex",a);await e.files.makeDir(i);let o=await OXe(e,s),c={...n?{[Wu]:n.sessionTagEnv,[$p]:n.runTagEnv}:{},...r},l={name:"Evolve Gateway",base_url:t,env_key:"OPENAI_API_KEY",wire_api:"responses",...Object.keys(c).length>0?{env_http_headers:c}:{}},u=kXe(o,"model_providers",s);o.model_provider==="evolve-gateway"&&TZ(u["evolve-gateway"],l)||(o.model_provider="evolve-gateway",u["evolve-gateway"]=l,o.model_providers=u,await NZ(e,s,o))}async function U5t(e,t,n,r,a){let i=Fp(t.configPath,a),s=i.slice(0,i.lastIndexOf("/"));await e.files.makeDir(s);let o={default_model:t.modelName,default_thinking:r.defaultThinking,default_permission_mode:"auto",thinking:{mode:r.defaultThinking?"on":"off",...r.defaultThinking&&r.thinkingEffort?{effort:r.thinkingEffort}:{}},providers:{[t.providerName]:{type:"kimi",base_url:r.baseUrl,api_key:r.apiKey,custom_headers:n}},models:{[t.modelName]:{provider:t.providerName,model:r.model,max_context_size:t.maxContextSize,capabilities:["image_in","thinking"]}}};await NZ(e,i,o)}async function B5t(e,t,n,r,a){if(!(!r||Object.keys(r).length===0))switch(e){case"claude":await E5t(t,n,r,a);break;case"codex":await D5t(t,r,a);break;case"gemini":await T5t(t,r,a);break;case"qwen":await k5t(t,r,a);break;case"kimi":await A5t(t,r,a);break;case"opencode":await C5t(t,n,r);break;case"droid":await P5t(t,n,r);break;default:throw new Error(`Unknown agent type for MCP config: ${e}`)}}function Gu(e,t){for(let n of e)if(typeof n=="string"&&n.length>0)return n;try{let n=JSON.stringify(t);if(typeof n=="string"&&n.length>0)return n}catch{}return String(t)}function F5t(){let e={};return function(c){let l;try{l=JSON.parse(c)}catch{return null}if(l._meta||l._prompt)return null;let u=l.session_id;switch(l.type){case"system":return null;case"assistant":return t(l.message?.content,"assistant",u);case"user":{let d=l.message?.content;return typeof d=="string"||Array.isArray(d)&&d.length===1&&d[0].type==="text"?null:t(d,"user",u)}case"result":{if(l.is_error!==!0)return null;let d=(Array.isArray(l.errors)?l.errors:[]).filter(f=>typeof f=="string"&&f.length>0).join(`
680
680
  `);return[{sessionId:u,update:{sessionUpdate:"error",message:Gu([d,l.result,l.subtype],l),fatal:!0}}]}default:return null}};function t(c,l,u){if(typeof c=="string")return l==="user"?null:[{sessionId:u,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:c}}}];if(!c||!Array.isArray(c))return null;let d=[];for(let f of c){let h=null;switch(f.type){case"text":case"text_delta":if(l==="user")break;h={sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.text}};break;case"image":if(l==="user")break;h={sessionUpdate:"agent_message_chunk",content:{type:"image",data:f.source?.type==="base64"?f.source.data:"",mimeType:f.source?.type==="base64"?f.source.media_type:"",uri:f.source?.type==="url"?f.source.url:void 0}};break;case"thinking":case"thinking_delta":h={sessionUpdate:"agent_thought_chunk",content:{type:"text",text:f.thinking}};break;case"tool_use":case"server_tool_use":case"mcp_tool_use":{if(e[f.id]=f,f.name==="TodoWrite")Array.isArray(f.input?.todos)&&(h={sessionUpdate:"plan",entries:s(f.input)});else{let m=n(f);h={sessionUpdate:"tool_call",toolCallId:f.id,status:"pending",...m,toolName:f.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 m=e[f.tool_use_id];if(!m||(delete e[f.tool_use_id],m.name==="TodoWrite"))break;h={sessionUpdate:"tool_call_update",toolCallId:f.tool_use_id,status:"is_error"in f&&f.is_error?"failed":"completed",...r(f,m)};break}}h&&d.push({sessionId:u,update:h})}return d.length>0?d:null}function n(c){let l=c.name,u=c.input||{};switch(l){case"Task":return{title:u.description||"Task",kind:"think",content:u.prompt?[{type:"content",content:{type:"text",text:u.prompt}}]:[],rawInput:u};case"NotebookRead":return{title:u.notebook_path?`Read Notebook ${u.notebook_path}`:"Read Notebook",kind:"read",content:[],locations:u.notebook_path?[{path:u.notebook_path}]:[],rawInput:u};case"NotebookEdit":return{title:u.notebook_path?`Edit Notebook ${u.notebook_path}`:"Edit Notebook",kind:"edit",content:u.new_source?[{type:"content",content:{type:"text",text:u.new_source}}]:[],locations:u.notebook_path?[{path:u.notebook_path}]:[],rawInput:u};case"Bash":return{title:u.command?"`"+u.command.replaceAll("`","\\`")+"`":"Terminal",kind:"execute",content:u.description?[{type:"content",content:{type:"text",text:u.description}}]:[],rawInput:u};case"BashOutput":return{title:"Tail Logs",kind:"execute",content:[],rawInput:u};case"KillShell":return{title:"Kill Process",kind:"execute",content:[],rawInput:u};case"Read":{let d="";return u.limit?d=" ("+((u.offset??0)+1)+" - "+((u.offset??0)+u.limit)+")":u.offset&&(d=" (from line "+(u.offset+1)+")"),{title:"Read "+(u.file_path??"File")+d,kind:"read",content:[],locations:u.file_path?[{path:u.file_path,line:u.offset??0}]:[],rawInput:u}}case"LS":return{title:u.path?`List \`${u.path}\` directory`:"List current directory",kind:"search",content:[],locations:[],rawInput:u};case"Edit":{let d=u.file_path;return{title:d?`Edit \`${d}\``:"Edit",kind:"edit",content:d?[{type:"diff",path:d,oldText:u.old_string??null,newText:u.new_string??""}]:[],locations:d?[{path:d}]:[],rawInput:u}}case"Write":return{title:u.file_path?`Write ${u.file_path}`:"Write",kind:"edit",content:u.file_path?[{type:"diff",path:u.file_path,oldText:null,newText:u.content??""}]:[],locations:u.file_path?[{path:u.file_path}]:[],rawInput:u};case"Glob":{let d="Find";return u.path&&(d+=` \`${u.path}\``),u.pattern&&(d+=` \`${u.pattern}\``),{title:d,kind:"search",content:[],locations:u.path?[{path:u.path}]:[],rawInput:u}}case"Grep":{let d="grep";return u["-i"]&&(d+=" -i"),u["-n"]&&(d+=" -n"),u["-A"]!==void 0&&(d+=` -A ${u["-A"]}`),u["-B"]!==void 0&&(d+=` -B ${u["-B"]}`),u["-C"]!==void 0&&(d+=` -C ${u["-C"]}`),u.output_mode==="files_with_matches"?d+=" -l":u.output_mode==="count"&&(d+=" -c"),u.head_limit!==void 0&&(d+=` | head -${u.head_limit}`),u.glob&&(d+=` --include="${u.glob}"`),u.type&&(d+=` --type=${u.type}`),u.multiline&&(d+=" -P"),d+=` "${u.pattern??""}"`,u.path&&(d+=` ${u.path}`),{title:d,kind:"search",content:[],rawInput:u}}case"WebFetch":return{title:u.url?`Fetch ${u.url}`:"Fetch",kind:"fetch",content:u.prompt?[{type:"content",content:{type:"text",text:u.prompt}}]:[],rawInput:u};case"WebSearch":{let d=`"${u.query??""}"`;return u.allowed_domains?.length>0&&(d+=` (allowed: ${u.allowed_domains.join(", ")})`),u.blocked_domains?.length>0&&(d+=` (blocked: ${u.blocked_domains.join(", ")})`),{title:d,kind:"fetch",content:[],rawInput:u}}case"TodoWrite":return{title:Array.isArray(u.todos)?`Update TODOs: ${u.todos.map(d=>d.content).join(", ")}`:"Update TODOs",kind:"think",content:[],rawInput:u};case"ExitPlanMode":return{title:"Ready to code?",kind:"switch_mode",content:u.plan?[{type:"content",content:{type:"text",text:u.plan}}]:[],rawInput:u};default:if(l?.startsWith("mcp__")){let d=l.split("__"),f=d[1]||"mcp",h=d.slice(2).join("__")||l;return{title:`${f}: ${h}`,kind:"other",content:[],rawInput:u}}return{title:l||"Unknown Tool",kind:"other",content:[],rawInput:u}}}function r(c,l){let u=c.content;switch(l?.name){case"Read":return Array.isArray(u)&&u.length>0?{content:u.map(d=>({type:"content",content:d.type==="text"?{type:"text",text:o(d.text)}:i(d,!1)}))}:typeof u=="string"&&u.length>0?{content:[{type:"content",content:{type:"text",text:o(u)}}]}:{};case"Edit":case"Write":case"Bash":return a(u,c.is_error||!1);case"ExitPlanMode":return{title:"Exited Plan Mode"};default:return a(u,"is_error"in c?c.is_error:!1)}}function a(c,l=!1){return Array.isArray(c)&&c.length>0?{content:c.map(u=>({type:"content",content:i(u,l)}))}:typeof c=="string"&&c.length>0?{content:[{type:"content",content:{type:"text",text:l?"```\n"+c+"\n```":c}}]}:{}}function i(c,l){if(c.type==="text")return l?{type:"text",text:"```\n"+c.text+"\n```"}:{type:"text",text:c.text};if(c.type==="image"){if(c.data&&c.mimeType)return{type:"image",data:c.data,mimeType:c.mimeType};if(c.source?.type==="base64")return{type:"image",data:c.source.data||"",mimeType:c.source.media_type||""};if(c.source?.type==="url")return{type:"image",data:"",mimeType:"",uri:c.source.url}}return c}function s(c){return c.todos.map(l=>({content:l.content,status:l.status||"pending",priority:"medium"}))}function o(c){let l="```",u=Array.from(c.matchAll(/^```+/gm));for(let[d]of u)for(;d.length>=l.length;)l+="`";return l+`
681
681
  `+c+(c.endsWith(`
@@ -472,7 +472,7 @@ async def list_checkpoints(
472
472
  await store.close()
473
473
 
474
474
 
475
- __version__ = '0.0.55.dev1151'
475
+ __version__ = '0.0.55.dev1159'
476
476
 
477
477
  __all__ = [
478
478
  # Main classes
@@ -1520,7 +1520,9 @@ class Rubric(TypedDict):
1520
1520
  class AnalyzeConfigInput(TypedDict, total=False):
1521
1521
  """Trace-analysis configuration INPUT — Harbor's ``harbor analyze``
1522
1522
  vocabulary (their cli/analyze.py: ``--model``, ``--rubric``,
1523
- ``--prompt``), the spec's ``AnalyzeConfigInput`` schema.
1523
+ ``--prompt``, and the selection and width options ``-n/--n-concurrent``,
1524
+ ``--passing`` / ``--failing``, ``-l/--n-trials``), the spec's
1525
+ ``AnalyzeConfigInput`` schema.
1524
1526
 
1525
1527
  PRESENCE of this object is the switch: on ``jobs().start(analyze=...)``
1526
1528
  it arms the embedded trigger (each trial is analyzed server-side right
@@ -1583,6 +1585,36 @@ class AnalyzeConfigInput(TypedDict, total=False):
1583
1585
  #: enqueue (daytona unless the operator retuned the fleet) — the value
1584
1586
  #: the resolved ``AnalyzeConfig['sandbox_provider']`` echo reports.
1585
1587
  sandbox_provider: EvalSandboxProvider
1588
+ #: How many of this wave's analyses run at once — Harbor's
1589
+ #: ``-n/--n-concurrent`` ("Max concurrent trial analyses", their
1590
+ #: cli/analyze.py:278-280). Bounded by the organization's
1591
+ #: ``max_concurrent_analyses`` at every claim: the job never holds more
1592
+ #: than the smaller of the two RUNNING fleet-wide. Omitted, the
1593
+ #: organization's ceiling alone bounds the wave (its fleet default is 4,
1594
+ #: Harbor's own default) and the resolved echo reads ``None``. An
1595
+ #: integer in ``[1, 150]``; anything else is refused ``invalid_input``
1596
+ #: naming ``analyze.n_concurrent``.
1597
+ n_concurrent: int
1598
+ #: Analyze only the passing trials — Harbor's ``--passing`` ("Only
1599
+ #: analyze passing trials (reward=1.0)", their cli/analyze.py:282-284):
1600
+ #: a trial passes when it is SCORED with a primary reward of exactly 1.
1601
+ #: Mutually exclusive with ``failing``: both true is refused
1602
+ #: ``invalid_input`` — Harbor's own "Cannot use both --passing and
1603
+ #: --failing".
1604
+ passing: bool
1605
+ #: Analyze only the failing trials — Harbor's ``--failing`` ("Only
1606
+ #: analyze failing trials (reward<1.0 or exception)", their
1607
+ #: cli/analyze.py:285-287): every analyzable trial that is not passing —
1608
+ #: a reward below 1 or none, and every error status. CANCELLED trials
1609
+ #: are never analyzed under either filter.
1610
+ failing: bool
1611
+ #: At most this many trials get an analysis — Harbor's ``-l/--n-trials``
1612
+ #: ("Max trials to analyze", their cli/analyze.py:288-290), applied AFTER
1613
+ #: the reward filter: on the manual wave the first ``n_trials`` matching
1614
+ #: trials in the job's trial order; on the embedded trigger the first
1615
+ #: ``n_trials`` matching trials to settle. An integer of at least 1;
1616
+ #: anything else is refused ``invalid_input`` naming ``analyze.n_trials``.
1617
+ n_trials: int
1586
1618
 
1587
1619
 
1588
1620
  class AnalyzeConfig(TypedDict):
@@ -1613,6 +1645,18 @@ class AnalyzeConfig(TypedDict):
1613
1645
  #: resolved-at-accept law above, stated so the echo is never read as
1614
1646
  #: history).
1615
1647
  sandbox_provider: EvalSandboxProvider
1648
+ #: The per-job width this policy's analyses are claimed under
1649
+ #: (``AnalyzeConfigInput['n_concurrent']``, as stored); None = none
1650
+ #: named, the organization's ``max_concurrent_analyses`` alone bounds
1651
+ #: the wave.
1652
+ n_concurrent: Optional[int]
1653
+ #: The reward filter as stored; both ``passing`` and ``failing`` False =
1654
+ #: every analyzable trial.
1655
+ passing: bool
1656
+ failing: bool
1657
+ #: The trial cap as stored (``AnalyzeConfigInput['n_trials']``); None =
1658
+ #: no cap.
1659
+ n_trials: Optional[int]
1616
1660
 
1617
1661
 
1618
1662
  class AnalysisCheck(TypedDict):
@@ -7072,6 +7116,10 @@ class JobsClient:
7072
7116
  prompt: Optional[str] = None,
7073
7117
  sandbox_provider: Optional[EvalSandboxProvider] = None,
7074
7118
  reasoning_effort: Optional[str] = None,
7119
+ n_concurrent: Optional[int] = None,
7120
+ passing: Optional[bool] = None,
7121
+ failing: Optional[bool] = None,
7122
+ n_trials: Optional[int] = None,
7075
7123
  ) -> Job:
7076
7124
  """Analyze a terminal job's trial traces (rubric-driven, Harbor's
7077
7125
  ``harbor analyze``), server-side.
@@ -7102,6 +7150,18 @@ class JobsClient:
7102
7150
  at high over Harbor's default rubric (reward_hacking,
7103
7151
  task_specification), on the platform's analysis default provider.
7104
7152
  CANCELLED trials are never analyzed.
7153
+ Which trials, and how wide, are Harbor's own analyze options with
7154
+ their exact names (their cli/analyze.py:278-290): ``passing`` /
7155
+ ``failing`` analyze only the trials on that side of the reward
7156
+ line (passing = SCORED with reward exactly 1; failing = everything
7157
+ else analyzable — reward below 1 or none, and every error status);
7158
+ ``n_trials`` caps the wave at the first N matching trials in the
7159
+ job's trial order, after the filter (Harbor's ``-l/--n-trials``);
7160
+ ``n_concurrent`` is how many of the wave's analyses run at once,
7161
+ beneath the organization's ``max_concurrent_analyses`` (Harbor's
7162
+ ``-n/--n-concurrent``; omitted = the ceiling alone). ``passing`` and
7163
+ ``failing`` together are refused ``invalid_input`` — Harbor's own
7164
+ "Cannot use both --passing and --failing".
7105
7165
 
7106
7166
  The server owns every acceptance refusal, surfaced typed:
7107
7167
  ``job_not_terminal``, ``invalid_rubric`` (unknown keys named, empty
@@ -7110,7 +7170,8 @@ class JobsClient:
7110
7170
  provider outside the lineup — the message names the roster, the
7111
7171
  bound or the legal values),
7112
7172
  ``analysis_already_running`` (one wave at a time),
7113
- ``no_analyzable_trials`` (every trial CANCELLED).
7173
+ ``no_analyzable_trials`` (every trial CANCELLED, or no trial on the
7174
+ side of the reward filter).
7114
7175
  """
7115
7176
  body: Dict[str, Any] = {}
7116
7177
  if model_name is not None:
@@ -7123,6 +7184,14 @@ class JobsClient:
7123
7184
  body['sandbox_provider'] = sandbox_provider
7124
7185
  if reasoning_effort is not None:
7125
7186
  body['reasoning_effort'] = reasoning_effort
7187
+ if n_concurrent is not None:
7188
+ body['n_concurrent'] = n_concurrent
7189
+ if passing is not None:
7190
+ body['passing'] = passing
7191
+ if failing is not None:
7192
+ body['failing'] = failing
7193
+ if n_trials is not None:
7194
+ body['n_trials'] = n_trials
7126
7195
  raw = await self._http.request_json(
7127
7196
  f'/api/jobs/{urllib.parse.quote(id)}/analyze', method='POST', body=body
7128
7197
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolve-sdk
3
- Version: 0.0.55.dev1151
3
+ Version: 0.0.55.dev1159
4
4
  Summary: Pythonic SDK for multi-agent orchestration in E2B sandboxes
5
5
  Author-email: "Swarmlink, Inc." <brandomagnani@evolvingmachines.ai>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolve-sdk"
7
- version = "0.0.55.dev1151"
7
+ version = "0.0.55.dev1159"
8
8
  description = "Pythonic SDK for multi-agent orchestration in E2B sandboxes"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"