@evolvingmachines/sdk 0.0.51 → 0.0.52-launch-round-1.20260803.cb1be5b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-VGAGB5J5.js +6 -0
- package/dist/hosted/cli.cjs +19 -0
- package/dist/hosted/cli.d.cts +105 -0
- package/dist/hosted/cli.d.ts +105 -0
- package/dist/hosted/cli.js +14 -0
- package/dist/index.cjs +440 -82
- package/dist/index.d.cts +1207 -478
- package/dist/index.d.ts +1207 -478
- package/dist/index.js +429 -79
- package/dist/managed-modal-CRZFDIRG.js +4 -0
- package/dist/tar-PPIAXEGM.js +1 -0
- package/dist/types-B8wdtDC4.d.cts +1602 -0
- package/dist/types-B8wdtDC4.d.ts +1602 -0
- package/harness-capabilities.json +345 -0
- package/hosted-error-codes.json +57 -0
- package/package.json +35 -10
- package/spec/openapi.yaml +4050 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {H as H$1,P,M,L as L$1,O,E,N as N$1,C as C$1,D as D$1}from'../chunk-VGAGB5J5.js';import {realpathSync,readFileSync,existsSync}from'fs';import {pathToFileURL,fileURLToPath}from'url';import {LineCounter,parseDocument,parse}from'yaml';var c=class extends Error{constructor(t){super(t),this.name="CliUsageError";}},X={json:{kind:"boolean",help:"Machine-readable JSON output"},"api-key":{kind:"string",value:"<key>",help:"API key (default: $EVOLVE_API_KEY)"},"base-url":{kind:"string",value:"<url>",help:"API base URL (default: the Evolve dashboard API)"}},T={limit:{kind:"number",short:"l",value:"<n>",help:"Page size"},cursor:{kind:"string",value:"<c>",help:"Resume from a page cursor"},columns:{kind:"string",value:"<keys|all|help>",help:"Choose and order columns (comma-separated keys; 'help' lists them)"},quiet:{kind:"boolean",short:"q",help:"Print only ids, one per line (for piping)"},"no-trunc":{kind:"boolean",help:"Full cell content instead of one-line truncation"},"no-headers":{kind:"boolean",help:"Omit the header row in piped (TSV) output"}},Re={config:{kind:"string",short:"c",value:"<path>",help:"Job config file (YAML or JSON, spec vocabulary); explicit flags override its fields"},"print-config":{kind:"boolean",help:"Print the resolved job body as JSON and exit without running"},"job-name":{kind:"string",value:"<name>",help:"User-facing label (server-generated when omitted)"},dataset:{kind:"repeat",short:"d",value:"<name[@version]>",help:"Dataset to run (repeatable; bare name = active version)"},"include-task-name":{kind:"repeat",short:"i",value:"<glob>",help:"Include filter over task names, applied to every dataset (repeatable)"},"exclude-task-name":{kind:"repeat",short:"x",value:"<glob>",help:"Exclude filter over task names, applied to every dataset (repeatable)"},"n-tasks":{kind:"number",short:"l",value:"<n>",help:"Cap the task count of EACH dataset after filters"},agent:{kind:"string",short:"a",value:"<name[@version]>",help:"Agent (built-in or registered)"},model:{kind:"repeat",short:"m",value:"<name>",help:"Model (repeatable; each model is one arm)"},effort:{kind:"string",value:"<value>",help:"Reasoning effort for EVERY arm (values: GET /api/meta). Applied verbatim \u2014 an agent that cannot honor it is refused by the server, never silently skipped"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env for every agent run (repeatable); a pass-through slot the server owns"},"verifier-env":{kind:"repeat",aliases:["ve"],value:"KEY=VALUE",help:"Env for every verifier run (repeatable); a pass-through slot the server owns"},"n-attempts":{kind:"number",short:"k",value:"<n>",help:"Attempts per task x arm (default 1)"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Parallel trials (default 4)"},"max-trial-spend":{kind:"number",value:"<usd>",help:"Model-spend cap for EACH trial (default: the server's, $200)"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider: e2b | daytona | modal (default e2b)"},watch:{kind:"boolean",help:"Stream events until the job finishes"},quiet:{kind:"boolean",short:"q",help:"With --watch: suppress the event log, print the final block only"},yes:{kind:"boolean",short:"y",help:"Accepted for compatibility; hosted runs have no prompt to confirm"}},C={job:{summary:"Start, follow, and derive jobs",commands:{start:{summary:"Start a job (add --watch to follow it)",flags:Re,minPositionals:0,maxPositionals:0,example:"evolve-evals job start -d deep-swe@1.1 -a codex -m gpt-5.5 -k 2 --watch"},list:{summary:"List your jobs (newest first)",flags:{...T,search:{kind:"string",value:"<text>",help:"Free-text filter over job name and dataset names"}},minPositionals:0,maxPositionals:0,example:"evolve-evals job list --limit 20 -q"},show:{summary:"Show one or more jobs in full",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<id> [id...]",example:"evolve-evals job show cme12ab34"},trials:{summary:"List a job's trials",flags:{...T,status:{kind:"string",value:"<s1,s2,...>",help:"Filter by trial status (e.g. INFRASTRUCTURE_ERROR)"},dataset:{kind:"string",value:"<name>",help:"Filter to one dataset's trials"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job trials cme12ab34 --status FAILED,SCORING_ERROR"},tasks:{summary:"Per-task rollup of a job",flags:{...T},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job tasks cme12ab34"},compare:{summary:"Compare 2-10 jobs side by side",flags:{},minPositionals:2,maxPositionals:10,positionalUsage:"<id> <id> [...]",example:"evolve-evals job compare cme12ab34 cme56cd78"},cancel:{summary:"Request cancellation of a job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job cancel cme12ab34"},stop:{summary:"Stop one dataset's live trials without cancelling the job",flags:{dataset:{kind:"string",value:"<name>",help:"The dataset whose live trials to stop (required)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job stop cme12ab34 --dataset deep-swe"},resume:{summary:"New linked job over a terminal job's failed or stopped trials",flags:{"filter-error-type":{kind:"repeat",short:"f",value:"<type>",help:"Failure types to resume, matched on exception_info.exception_type (repeatable; default: the standard failure set plus stopped trials)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job resume cme12ab34 -f InfrastructureError"},regrade:{summary:"Verifier-only re-run of a terminal job (the result IS a job)",flags:{status:{kind:"string",value:"<s1,s2,...>",help:"Only regrade source trials in these statuses"},task:{kind:"string",value:"<name>",help:"Only regrade source trials of this task"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job regrade cme12ab34 --task tricky-task"},download:{summary:"Download the results archive (gzipped)",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save into (default: current dir)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",example:"evolve-evals job download cme12ab34 -o results/"}}},trial:{summary:"Inspect, download, and act on single trials",commands:{show:{summary:"Show one trial in full detail",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",example:"evolve-evals trial show cmt90ef12"},download:{summary:"Save everything a trial recorded, or stream one artifact",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save under (default: trials/); files land in <dir>/<trial-id>/"},overwrite:{kind:"boolean",help:"Replace an existing <dir>/<trial-id>/"},stream:{kind:"string",value:"<artifact>",help:"Print ONE artifact to stdout instead of saving: trace-parsed | verifier | trace-stdout | trace-stderr | trajectory (not served yet) | agent-home"},cursor:{kind:"string",value:"<seq>",help:"With --stream trace-parsed: resume after this seq"},limit:{kind:"number",value:"<n>",help:"With --stream trace-parsed: max events per page"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",example:"evolve-evals trial download cmt90ef12 --stream trace-stdout"},regrade:{summary:"Verifier-only re-run of one trial (the result IS a job)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",example:"evolve-evals trial regrade cmt90ef12"},stop:{summary:"Stop in-flight trials without cancelling their job",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<trial-id> [trial-id...]",example:"evolve-evals trial stop cmt90ef12 cmt34gh56"}}},dataset:{summary:"Browse and publish the dataset catalog",commands:{list:{summary:"List the dataset catalog",flags:{...T,search:{kind:"string",value:"<text>",help:"Free-text filter over name and description"}},minPositionals:0,maxPositionals:0,example:"evolve-evals dataset list -q"},show:{summary:"Show one dataset (versions + tasks + providers)",flags:{limit:{kind:"number",short:"l",value:"<n>",help:"Task-list page size"},cursor:{kind:"string",value:"<c>",help:"Resume the task list from a cursor"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",example:"evolve-evals dataset show deep-swe@1.1"},publish:{summary:"Publish a dataset version from a git source or a local directory",flags:{git:{kind:"string",value:"<url>",help:"Git repository URL (with --ref)"},ref:{kind:"string",value:"<ref>",help:"Git ref: branch, tag, or commit (with --git)"},dir:{kind:"string",value:"<path>",help:"Local corpus directory (tarred + uploaded)"},name:{kind:"string",value:"<dataset>",help:"Catalog dataset name to create or extend (required)"},version:{kind:"string",value:"<v>",help:"Version label for the published version (required)"},watch:{kind:"boolean",help:"Poll until the publish is COMPLETED or FAILED"}},minPositionals:0,maxPositionals:0,example:"evolve-evals dataset publish --name my-swe --version 1.0 --dir ./corpus --watch"},download:{summary:"Download the original corpus package (owner only)",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save into (default: current dir)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",example:"evolve-evals dataset download my-swe@1.0 -o corpora/"},activate:{summary:"Make a READY version the dataset's active version",flags:{},minPositionals:2,maxPositionals:2,positionalUsage:"<name> <version>",example:"evolve-evals dataset activate my-swe 1.0"}}},agent:{summary:"Register and manage your own agents",commands:{list:{summary:"List your registered agents",flags:{...T},minPositionals:0,maxPositionals:0,example:"evolve-evals agent list"},show:{summary:"Show one registered agent",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",example:"evolve-evals agent show acme-cli"},add:{summary:"Register an agent (install script or local directory)",flags:{"install-script":{kind:"string",value:"<path>",help:"Install script file; its contents are uploaded"},dir:{kind:"string",value:"<path>",help:"Local agent directory (tarred + uploaded)"},run:{kind:"string",value:"<command>",help:"Run command, executed with sh -c (required)"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env injected at run time (repeatable)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",example:'evolve-evals agent add acme-cli --install-script ./install.sh --run "acme-cli --headless"'},remove:{summary:"Delete a registered agent (past jobs keep their record)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",example:"evolve-evals agent remove acme-cli"}}},auth:{summary:"Identity and API keys",commands:{status:{summary:"Who am I: the caller and the API key in use",flags:{},minPositionals:0,maxPositionals:0,example:"evolve-evals auth status"}}}},be={jobs:"job",trials:"trial",datasets:"dataset",agents:"agent"},ve={ls:"list"};function Ne(e,t){return `${[...t.short?[`-${t.short}`]:[],...(t.aliases??[]).map(s=>`--${s}`),`--${e}`].join(", ")}${t.value?` ${t.value}`:""}`}function G(e){let t=Object.entries(e);if(t.length===0)return [];let n=t.map(([r,o])=>Ne(r,o)),s=Math.min(Math.max(...n.map(r=>r.length)),36);return t.map(([,r],o)=>{let a=n[o];return a.length>s?` ${a}
|
|
3
|
+
${"".padEnd(s)} ${r.help}`:` ${a.padEnd(s)} ${r.help}`})}function Le(e,t,n){let s=n.positionalUsage?` ${n.positionalUsage}`:"",r=Object.keys(n.flags).length>0?" [options]":"",o=[`Usage: evolve-evals ${e} ${t}${s}${r}`,"",n.summary];return Object.keys(n.flags).length>0&&o.push("","Options:",...G(n.flags)),o.push("","Global options:",...G(X)),o.push("","Example:",` ${n.example}`),o.join(`
|
|
4
|
+
`)}function se(e){let t=C[e],n=[`Usage: evolve-evals ${e} <command> [options]`,"",t.summary,"","Commands:"],s=Math.max(...Object.keys(t.commands).map(r=>r.length));for(let[r,o]of Object.entries(t.commands))n.push(` ${r.padEnd(s)} ${o.summary}`);return n.push("",`Run "evolve-evals ${e} <command> --help" for flags and an example.`),n.join(`
|
|
5
|
+
`)}function V(){let e=["evolve-evals \u2014 Evolve hosted jobs CLI","","Usage: evolve-evals <command> [options]","","Commands:"," run Start a job \u2014 alias for `job start`"];for(let[t,n]of Object.entries(C)){let s=Object.keys(n.commands).join(" | ");e.push(` ${t.padEnd(22)} ${n.summary}`),e.push(` ${"".padEnd(22)} ${s}`);}return e.push(" help [command] Show help (also -h/--help on any command)","","Global options:",...G(X)," -v, --version Print the CLI version","","Example:"," evolve-evals run -d deep-swe@1.1 -a codex -m gpt-5.5 --watch"),e.join(`
|
|
6
|
+
`)}var tn=V();function Je(){try{return JSON.parse(readFileSync(fileURLToPath(new URL("../../package.json",import.meta.url)),"utf-8")).version??"unknown"}catch{return "unknown"}}function K(e,t){let n=[e.flags,X];for(let s of n)for(let[r,o]of Object.entries(s))if(t.long!==void 0){if(r===t.long||(o.aliases??[]).includes(t.long))return {name:r,flag:o}}else if(t.short!==void 0&&o.short===t.short)return {name:r,flag:o}}function Ue(e,t){if(t==="--help"||t==="-h")return true;if(t.startsWith("--")){let n=t.slice(2).split("=")[0];return K(e,{long:n})!==void 0}if(t.startsWith("-")&&t.length>1){let n=t.slice(1).split("=")[0];return K(e,{short:n})!==void 0}return false}function re(e,t,n){let s={},r=[];for(let o=0;o<n.length;o++){let a=n[o];if(a==="--help"||a==="-h")return {command:"help",positionals:e.split(" "),flags:{}};let i,u;if(a.startsWith("--")){let f=a.slice(2),m=f.indexOf("=");m!==-1&&(u=f.slice(m+1),f=f.slice(0,m)),i={long:f};}else if(a.startsWith("-")&&a.length>1){let f=a.slice(1),m=f.indexOf("=");m!==-1&&(u=f.slice(m+1),f=f.slice(0,m)),i={short:f};}else {r.push(a);continue}let p=K(t,i);if(!p)throw new c(`Unknown option ${a.split("=")[0]} for "${e}"`);let{name:l,flag:h}=p;if(h.kind==="boolean"){if(u!==void 0)throw new c(`Option --${l} takes no value`);s[l]=true;continue}let d=u;if(d===void 0){let f=n[o+1];if(f===void 0||Ue(t,f)){let m=f!==void 0?` (use --${l}=${f} if that is the value)`:"";throw new c(`Option --${l} requires a value${m}`)}d=f,o++;}if(h.kind==="number"){let f=Number(d);if(d.trim()===""||!Number.isFinite(f))throw new c(`Option --${l} expects a number, got "${d}"`);s[l]=f;}else if(h.kind==="repeat"){let f=s[l]??[];f.push(d),s[l]=f;}else s[l]=d;}if(r.length<t.minPositionals)throw new c(`"${e}" requires ${t.positionalUsage??`${t.minPositionals} argument(s)`}`);if(r.length>t.maxPositionals)throw new c(`"${e}" got unexpected argument "${r[t.maxPositionals]}"`);return {command:e,positionals:r,flags:s}}function De(e){if(e.length===0)return {command:"help",positionals:[],flags:{}};let t=e[0];if(t==="--help"||t==="-h"||t==="help")return {command:"help",positionals:e.slice(1),flags:{}};if(t==="--version"||t==="-v")return {command:"version",positionals:[],flags:{}};if(t==="run")return re("job start",C.job.commands.start,e.slice(1));let n=be[t]??t,s=C[n];if(!s)throw new c(`Unknown command "${t}"`);let r=e[1];if(r===void 0||r==="--help"||r==="-h")return {command:"help",positionals:[n],flags:{}};if(r.startsWith("-"))throw new c(`"${n}" requires a command (run "evolve-evals ${n} --help")`);let o=ve[r]??r,a=s.commands[o];if(!a)throw new c(`Unknown command "${n} ${r}" (supported: ${Object.keys(s.commands).join(", ")})`);return re(`${n} ${o}`,a,e.slice(2))}function Fe(e){return e.map(t=>typeof t=="object"&&t.tag==="tag:yaml.org,2002:bool"&&t.test?{...t,test:t.identify?.(true)?/^(?:[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/:/^(?:[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/}:t)}var Me=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)$/,qe=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)[eE][-+][0-9]+$/;function Ye(e){return e.map(t=>typeof t!="object"||t.tag!=="tag:yaml.org,2002:float"||!t.test?t:t.test.test("1.5e+3")?{...t,test:qe}:t.test.test("1.5")?{...t,test:Me}:t)}var Ge=/^[-+]?(?:0|[1-9][0-9_]*)$/,Ve=/^[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+$/;function Ke(e){return e.map(t=>typeof t!="object"||t.tag!=="tag:yaml.org,2002:int"||!t.test?t:t.test.test("1:00")?{...t,test:Ve}:t.test.test("19")?{...t,test:Ge}:t)}function nn(e,t){return we(e,t).value}function we(e,t){let n=new LineCounter,s=parseDocument(e,{version:"1.1",schema:"yaml-1.1",resolveKnownTags:false,lineCounter:n,customTags:i=>Ke(Ye(Fe(i)))}),r=s.errors[0]??s.warnings[0];if(r){let i=r.linePos?.[0]?.line??1,u=r.code==="MULTIPLE_DOCS"?"multi-document YAML is not supported here \u2014 one config per file":r.message.replace(/ at line \d+, column \d+:[\s\S]*$/,"");throw new c(`${t}:${i}: ${u}`)}s.options.logLevel="silent";let o;try{o=s.toJS()??{};}catch(i){throw new c(`${t}: ${i.message}`)}return {value:o,locate:i=>{let p=s.getIn(i,true)?.range?.[0];return p===void 0?void 0:n.linePos(p).line}}}var Be=["../../spec/openapi.yaml","../../../../spec/openapi.yaml"],L;function We(){if(L)return L;let e=[];for(let t of Be){let n=fileURLToPath(new URL(t,import.meta.url));if(e.push(n),!existsSync(n))continue;let r=parse(readFileSync(n,"utf-8"))?.components?.schemas,o=r?.JobCreate;if(!r||!o||typeof o!="object")throw new Error(`${n} carries no components.schemas.JobCreate \u2014 the contract this CLI validates -c against`);return L={root:o,components:r},L}throw new Error(`spec/openapi.yaml not found (tried: ${e.join(", ")}) \u2014 the package ships it; reinstall the SDK`)}function Se(e){let t=e.type;return typeof t=="string"?[t]:Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}function z(e,t,n){let s=e.$ref;if(typeof s!="string")return {schema:e,specName:n};let r=s.replace("#/components/schemas/",""),o=t[r];if(!o)throw new Error(`spec/openapi.yaml: unresolvable $ref "${s}"`);return z(o,t,r)}function He(e){return e.length===1&&typeof e[0]=="string"?`"${e[0]}"`:e.map((t,n)=>typeof t=="number"?`[${t}]`:n===0?t:`.${t}`).join("")}function $e(e,t){let n=t.locate?.(e),s=`${t.source}${n!==void 0?`:${n}`:""}`;return e.length===0?s:`${He(e)} in ${s}`}function v(e,t,n,s){throw new c(`--config: ${$e(e,t)} ${n} [spec: ${s}]`)}function Xe(e){for(let t=e.length-1;t>=0;t--)if(typeof e[t]=="string")return e[t];return "value"}function ze(e,t){if(!e)return "a list";let n=z(e,t.components,""),s=Se(n.schema);return s.includes("string")?"a list of strings":s.includes("object")?"a list of objects":"a list"}function J(e,t,n,s,r,o=false){let{schema:a,specName:i}=z(t,r.components,s),u=Se(a),p=l=>i?`${i}.${l}`:l;if(e===null){if(u.includes("null"))return;v(n,r,`must be a ${u[0]??"value"}, not null`,i);}if(u.includes("object")){let l=x(a.additionalProperties)?a.additionalProperties:void 0;if(!x(e)){let d=l&&!a.properties?`must be a map of KEY: "value" pairs, not ${j(e)}`:`must be an object like {${Qe(a)}: "..."}, not ${j(e)}`;v(n,r,d,i);}let h=x(a.properties)?a.properties:void 0;if(h){if(!o&&Array.isArray(a.required))for(let d of a.required)typeof d=="string"&&e[d]===void 0&&v(n,r,`is missing the required key "${d}"`,i);for(let d of Object.keys(e))if(h[d]===void 0&&!l)throw new c(`--config: unknown key "${d}" in ${$e([...n,d],r)} (allowed: ${Object.keys(h).join(", ")}) [spec: ${i}]`);for(let[d,f]of Object.entries(h)){let m=e[d];m!==void 0&&J(m,f,[...n,d],p(d),r);}}if(l)for(let[d,f]of Object.entries(e))h?.[d]===void 0&&J(f,l,[...n,d],i,r);return}if(u.includes("array")){let l=x(a.items)?a.items:void 0;Array.isArray(e)||v(n,r,`must be ${ze(l,r)}, not ${j(e)}`,i),typeof a.minItems=="number"&&e.length<a.minItems&&v(n,r,`needs at least ${a.minItems} ${a.minItems===1?"entry":"entries"}`,i),typeof a.maxItems=="number"&&e.length>a.maxItems&&v(n,r,`takes at most ${a.maxItems} entries`,i),l&&e.forEach((h,d)=>J(h,l,[...n,d],i,r));return}if(Array.isArray(a.enum)){a.enum.includes(e)||v(n,r,`must be one of: ${a.enum.join(", ")}`,i);return}if(u.includes("string")){typeof e!="string"&&v(n,r,`must be a string, not ${j(e)} \u2014 quote it (${Xe(n)}: "...")`,i),typeof a.maxLength=="number"&&e.length>a.maxLength&&v(n,r,`must be at most ${a.maxLength} characters (got ${e.length})`,i);return}if(u.includes("integer")||u.includes("number")){let l=u.includes("integer");(typeof e!="number"||l&&!Number.isInteger(e))&&v(n,r,`must be ${l?"an integer":"a number"}, not ${j(e)}`,i),typeof a.minimum=="number"&&e<a.minimum&&v(n,r,`must be at least ${a.minimum}`,i),typeof a.maximum=="number"&&e>a.maximum&&v(n,r,`must be at most ${a.maximum}`,i);return}u.includes("boolean")&&typeof e!="boolean"&&v(n,r,`must be a boolean, not ${j(e)}`,i);}function Qe(e){let t=Array.isArray(e.required)?e.required[0]:void 0;return typeof t=="string"?t:(x(e.properties)?Object.keys(e.properties):[])[0]??"name"}function Ze(e,t,n){let{root:s,components:r}=We();J(e,s,[],"JobCreate",{source:t,locate:n,components:r},true);}function j(e){return e===null?"null":Array.isArray(e)?"a list":typeof e=="object"?`a ${e.constructor?.name??"object"}`:`a ${typeof e}`}function x(e){if(typeof e!="object"||e===null||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function B(e,t,n,s=new WeakSet){if(!(e===null||typeof e=="string"||typeof e=="boolean")){if(typeof e=="number"){if(Number.isFinite(e))return;throw new c(`--config: ${t} in ${n} is ${Number.isNaN(e)?".nan":"infinite"} \u2014 a JSON body carries finite numbers only`)}if(Array.isArray(e)||x(e)){if(s.has(e))throw new c(`--config: ${t} in ${n} is an alias of a value that contains it \u2014 a JSON body cannot carry a cycle`);if(s.add(e),Array.isArray(e))e.forEach((r,o)=>B(r,`${t}[${o}]`,n,s));else for(let[r,o]of Object.entries(e))B(o,`${t}.${r}`,n,s);s.delete(e);return}throw new c(`--config: ${t} in ${n} resolved to ${j(e)}, which a JSON body cannot carry \u2014 quote the value to keep it text`)}}function et(e,t){let n;try{n=t(e);}catch(a){throw new c(`--config: cannot read ${e}: ${a.message}`)}let s,r;if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(a){throw new c(`--config: ${e} is not valid JSON: ${a.message}`)}else ({value:s,locate:r}=we(n,e));if(!s||typeof s!="object"||Array.isArray(s))throw new c(`--config: ${e} must contain a JSON/YAML object`);let o=s;for(let[a,i]of Object.entries(o))B(i,a,e);return Ze(o,e,r),s}function oe(e,t){let n=e.indexOf("@");if(n===-1)return {name:e};let s=e.slice(0,n),r=e.slice(n+1);if(!s||!r)throw new c(`Invalid ${t} "${e}": expected name or name@version`);return {name:s,version:r}}function W(e,t){let n={};for(let s of e){let r=s.indexOf("=");if(r<=0)throw new c(`Invalid ${t} "${s}": expected KEY=VALUE`);n[s.slice(0,r)]=s.slice(r+1);}return n}function tt(e,t=n=>readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.config=="string"?et(n.config,t):{},r;if(n.dataset!==void 0)r=n.dataset.map(m=>{let y=oe(m,"--dataset");return {name:y.name,...y.version?{version:y.version}:{}}});else if(Array.isArray(s.datasets)&&s.datasets.length>0)r=s.datasets.map(m=>({...m}));else throw new c('"job start" requires -d/--dataset (or datasets in --config)');if(n["include-task-name"]!==void 0)for(let m of r)m.task_names=n["include-task-name"];if(n["exclude-task-name"]!==void 0)for(let m of r)m.exclude_task_names=n["exclude-task-name"];if(n["n-tasks"]!==void 0)for(let m of r)m.n_tasks=n["n-tasks"];let o;if(n.agent!==void 0||n.model!==void 0){if(n.agent===void 0)throw new c("-m/--model requires -a/--agent");if(n.model===void 0)throw new c("-a/--agent requires at least one -m/--model (the server applies no model default)");let m=oe(String(n.agent),"--agent");o=n.model.map(y=>({name:m.name,model_name:y,...m.version?{version:m.version}:{}}));}else if(Array.isArray(s.agents)&&s.agents.length>0)o=s.agents.map(m=>({...m}));else throw new c('"job start" requires -a/--agent and -m/--model (or agents in --config)');n.effort!==void 0&&(o=o.map(m=>({...m,reasoning_effort:n.effort})));let i=n["agent-env"]!==void 0?W(n["agent-env"],"--agent-env"):s.agent_env,u=n["verifier-env"]!==void 0?W(n["verifier-env"],"--verifier-env"):s.verifier_env,p=n["job-name"]!==void 0?String(n["job-name"]):s.job_name,l=n["n-attempts"]!==void 0?n["n-attempts"]:s.n_attempts,h=n["n-concurrent"]!==void 0?n["n-concurrent"]:s.n_concurrent_trials,d=n["max-trial-spend"]!==void 0?n["max-trial-spend"]:s.max_trial_spend_usd;if(n.env!==void 0&&!D$1.includes(String(n.env)))throw new c(`-e/--env must be one of: ${D$1.join(", ")}`);let f=n.env!==void 0?n.env:s.sandbox_provider;return {...p!==void 0?{job_name:p}:{},datasets:r,agents:o,...l!==void 0?{n_attempts:l}:{},...h!==void 0?{n_concurrent_trials:h}:{},...d!==void 0?{max_trial_spend_usd:d}:{},...f!==void 0?{sandbox_provider:f}:{},...i!==void 0?{agent_env:i}:{},...u!==void 0?{verifier_env:u}:{}}}function nt(e){let t=e.flags,n=typeof t.dir=="string",s=typeof t.git=="string"||typeof t.ref=="string";if(n&&s)throw new c('"dataset publish" takes EITHER --dir OR --git/--ref, not both');if(n){for(let r of ["name","version"])if(typeof t[r]!="string")throw new c(`"dataset publish" requires --${r}`);return {source:{directory:t.dir},name:t.name,version:t.version}}for(let r of ["git","ref","name","version"])if(typeof t[r]!="string"){let o=r==="git"||r==="ref"?" (or --dir for a local corpus directory)":"";throw new c(`"dataset publish" requires --${r}${o}`)}return {source:{git_url:t.git,git_ref:t.ref},name:t.name,version:t.version}}function st(e,t=n=>readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.dir=="string",r=typeof n["install-script"]=="string";if(s&&r)throw new c('"agent add" takes EITHER --dir OR --install-script, not both');if(!s&&!r)throw new c('"agent add" requires --install-script (or --dir for a local agent directory)');if(typeof n.run!="string")throw new c('"agent add" requires --run');let o=W(n["agent-env"]??[],"--agent-env");return {name:e.positionals[0],...s?{directory:n.dir}:{install_script:t(n["install-script"])},run_command:n.run,...Object.keys(o).length>0?{env:o}:{}}}var rt={out:e=>process.stdout.write(e+`
|
|
7
|
+
`),err:e=>process.stderr.write(e+`
|
|
8
|
+
`),tty:process.stdout.isTTY===true&&process.env.TERM!=="dumb"};function S(e){if(e.length===0)return [];let t=[];for(let n of e)n.forEach((s,r)=>{t[r]=Math.max(t[r]??0,s.length);});return e.map(n=>n.map((s,r)=>s.padEnd(t[r])).join(" ").trimEnd())}function k(e){return typeof e=="number"?`$${e.toFixed(2)}`:"-"}function Q(e){let t=`${e.name}:${e.model_name}`;return e.version?`${t}:${e.version}`:t}function D(e){return e.map(t=>`${t.name}@${t.version}`).join(", ")||"-"}function F(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function Y(e){return e.replace(/[\t\n\r]+/g," ")}function R(e,t,n,s,r,o){if(e.flags.quiet===true){for(let u of n)t.out(o(u));return}let a=ot(e,s,r);if(t.tty===true){let u=e.flags["no-trunc"]===true,p=[a.map(l=>l.header)];for(let l of n)p.push(a.map(h=>u?Y(h.cell(l)):F(Y(h.cell(l)),60)));for(let l of S(p))t.out(l);}else {e.flags["no-headers"]!==true&&t.out(a.map(u=>u.header).join(" "));for(let u of n)t.out(a.map(p=>Y(p.cell(u))).join(" "));}}function ot(e,t,n){let s=e.flags.columns;if(s===void 0)return n.map(o=>t.find(a=>a.key===o));if(s==="all")return t;let r=s.split(",").map(o=>o.trim()).filter(Boolean);if(r.length===0)throw new c("--columns got an empty column list");return r.map(o=>{let a=t.find(i=>i.key===o);if(!a)throw new c(`Unknown column "${o}" (available: ${t.map(i=>i.key).join(", ")}, or "all")`);return a})}function N(e,t,n){if(e.flags.columns!=="help")return false;for(let s of n)t.out(s.key);return true}function I(e){let t=[["id",e.id],["status",e.status],["datasets",D(e.datasets)]];t.push(["agents",e.agents.map(Q).join(", ")]),t.push(["size",`${e.counts.agents} agent(s) x ${e.counts.tasks} task(s) = ${e.n_total_trials} trial(s)`]),t.push(["attempts/task",String(e.n_attempts)]),t.push(["concurrency",String(e.n_concurrent_trials)]),t.push(["max spend/trial",k(e.max_trial_spend_usd)]),t.push(["worst case",k(e.worst_case_spend_usd)]),t.push(["provider",e.sandbox_provider]),t.push(["spent",k(e.stats.cost_usd)]);let n=Object.entries(e.trials.byStatus).filter(([,s])=>s>0).map(([s,r])=>`${s} ${r}`).join(" \xB7 ");n&&t.push(["trials",n]);for(let s of e.source_jobs)t.push([s.action==="regrade"?"regrade of":"resume of",s.job_id]);return e.idempotent_replay&&t.push(["note","idempotent replay of an existing job"]),e.failure&&t.push(["failure",`${e.failure.code}: ${e.failure.message}`]),t.push(["started",e.started_at]),t.push(["updated",e.updated_at]),S(t)}var ae=[{key:"id",header:"ID",cell:e=>e.id},{key:"name",header:"NAME",cell:e=>e.job_name??"-"},{key:"status",header:"STATUS",cell:e=>e.status},{key:"datasets",header:"DATASETS",cell:e=>D(e.datasets)},{key:"agents",header:"AGENTS",cell:e=>e.agents.map(Q).join(", ")},{key:"trials",header:"TRIALS",cell:e=>String(e.trials.total)},{key:"spent",header:"SPENT",cell:e=>k(e.stats.cost_usd)},{key:"started",header:"STARTED",cell:e=>e.started_at}],at=["id","status","datasets","trials","spent","started"],ie=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"agent",header:"AGENT",cell:e=>Q({name:e.agent_info.name,model_name:e.agent_info.model_info.name,version:e.agent_info.version,reasoning_effort:e.agent_info.reasoning_effort??null})},{key:"attempt",header:"ATTEMPT",cell:e=>String(e.attempt)},{key:"status",header:"STATUS",cell:e=>e.status},{key:"reward",header:"REWARD",cell:e=>e.reward!==null?String(e.reward):"-"},{key:"spent",header:"SPENT",cell:e=>k(e.agent_result?.cost_usd)},{key:"id",header:"TRIAL ID",cell:e=>e.id}],it=["task","agent","attempt","status","reward","spent","id"],le=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"source",header:"DATASET",cell:e=>e.source},{key:"trials",header:"TRIALS",cell:e=>String(e.trials.total)},{key:"statuses",header:"STATUSES",cell:e=>Object.entries(e.trials.byStatus).filter(([,t])=>t>0).map(([t,n])=>`${t} ${n}`).join(" \xB7 ")||"-"},{key:"reward",header:"MEAN REWARD",cell:e=>H(e.mean_reward)},{key:"spent",header:"SPENT",cell:e=>k(e.cost_usd)}],lt=["task","source","trials","statuses","reward","spent"],ue=[{key:"name",header:"NAME",cell:e=>e.name},{key:"active",header:"ACTIVE",cell:e=>e.active_version?.version??"-"},{key:"state",header:"STATE",cell:e=>e.active_version?.state??"-"},{key:"tasks",header:"TASKS",cell:e=>e.active_version?String(e.active_version.task_count):"-"},{key:"title",header:"TITLE",cell:e=>e.title??"-"}],ut=["name","active","state","tasks","title"],ce=[{key:"name",header:"NAME",cell:e=>e.name},{key:"source",header:"SOURCE",cell:e=>e.source},{key:"run",header:"RUN COMMAND",cell:e=>e.run_command},{key:"updated",header:"UPDATED",cell:e=>e.updated_at}],ct=["name","source","run","updated"];function dt(e){let t=[["trial id",e.id],["job",e.job_id],["task",e.task_name],["dataset",e.source],["agent",`${e.agent_info.name}:${e.agent_info.model_info.name}`],["attempt",String(e.attempt)],["status",e.status],["reward",e.reward!==null?String(e.reward):"-"]],n=e.verifier_result?.rewards;if(n&&Object.keys(n).length>0&&t.push(["rewards",Object.entries(n).map(([s,r])=>`${s}=${r}`).join(" \xB7 ")]),t.push(["spent",k(e.agent_result?.cost_usd)]),(e.status==="RUNNING"||e.status==="SCORING")&&e.live_spent_usd!==null){let s=e.live_spend_at?` as of ${e.live_spend_at}`:"";t.push(["spent (live)",`at least $${e.live_spent_usd.toFixed(4)}${s}`]);}return e.attempt_phase&&t.push(["phase",e.attempt_phase]),e.sandbox_provider&&t.push(["provider",e.sandbox_provider]),e.sandbox_id&&t.push(["sandbox",e.sandbox_id]),e.verifier_environment_mode&&t.push(["verifier",e.verifier_environment_mode]),e.verifier_sandbox_id&&t.push(["verifier sandbox",e.verifier_sandbox_id]),e.agent_info.version&&t.push(["agent version",e.agent_info.version]),e.exception_info&&(t.push(["failure type",e.exception_info.exception_type]),t.push(["failure detail",e.exception_info.exception_message])),e.session_ref&&t.push(["session",e.session_ref]),e.started_at&&t.push(["started",e.started_at]),e.finished_at&&t.push(["finished",e.finished_at]),S(t)}function ke(e){let t=[["name",e.name],["source",e.source],["run command",e.run_command]],n=Object.keys(e.env??{});return n.length>0&&t.push(["env",n.sort().join(", ")]),t.push(["created",e.created_at]),t.push(["updated",e.updated_at]),S(t)}var _e=["e2b","daytona","modal"];function ft(e){return _e.filter(t=>e?.[t]!==void 0).map(t=>`${t} ${e[t].ok?"ok":"NO"}`).join(" \xB7 ")}function H(e){return e!==null?String(Math.round(e*1e3)/1e3):"-"}function mt(e){let t=F(JSON.stringify(e.data??{}),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${t}`.trimEnd()}function je(e){let t=e.failures?.length?` (${e.failures.length} task failure${e.failures.length===1?"":"s"})`:"";return `${e.message}${t}`}function de(e){let t=[["id",e.id],["status",e.status]];e.name!==void 0&&t.push(["dataset",e.name]),e.version!==void 0&&t.push(["version",e.version]),e.task_count!==void 0&&t.push(["tasks",String(e.task_count)]);for(let n of e.warnings)t.push(["warning",n.message??n.code]);if(e.failure){t.push(["failure",je(e.failure)]);for(let n of e.failure.failures??[])t.push([` ${n.task_name}`,n.error]);}return S(t)}function pt(e){let t=[];return e.task_count!==void 0&&t.push(`tasks=${e.task_count}`),e.failure&&t.push(F(je(e.failure),140)),`status ${e.status.padEnd(12)} ${t.join(" ")}`.trimEnd()}function gt(e){let t={...e.data??{}},n=[];typeof t.trial_id=="string"&&n.push(t.trial_id),typeof t.task_name=="string"&&n.push(t.task_name),typeof t.status=="string"&&n.push(t.status),typeof t.reward=="number"&&n.push(`reward=${t.reward}`);let s=new Set(["trial_id","task_name","status","reward"]);for(let[o,a]of Object.entries(t))s.has(o)||n.push(`${o}=${typeof a=="object"?JSON.stringify(a):String(a)}`);let r=F(n.join(" "),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${r}`.trimEnd()}function g(e){let t={};return typeof e.flags["api-key"]=="string"&&(t.apiKey=e.flags["api-key"]),typeof e.flags["base-url"]=="string"&&(t.baseUrl=e.flags["base-url"]),t}var ht=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,yt=/^[0-9a-f][0-9a-f-]{7,34}$/i,fe=8,me=new WeakMap;function bt(e){let t=me.get(e);if(t)return t;let n=(async()=>{let s=N$1(g(e)),r=[],o;do{let a=await s.list({limit:100,...o?{cursor:o}:{}});for(let i of a.items)r.push(i.id);o=a.nextCursor??void 0;}while(o);return r})();return me.set(e,n),n}async function $(e,t){if(t===void 0||ht.test(t))return t;if(/^[0-9a-f][0-9a-f-]*$/i.test(t)&&t.length<fe)throw new c(`"${t}" is too short to name a job \u2014 id prefixes need at least ${fe} characters`);if(!yt.test(t))return t;let n=t.toLowerCase(),s=new Set;for(let o of await bt(e))o.startsWith(n)&&s.add(o);let r=[...s];if(r.length===1)return r[0];throw r.length===0?new c(`no job id starts with "${t}"`):new c(`"${t}" is ambiguous \u2014 it matches ${r.length} jobs: ${r.slice(0,5).join(", ")}${r.length>5?", \u2026":""}`)}function A(e){return {...e.flags.limit!==void 0?{limit:e.flags.limit}:{},...e.flags.cursor!==void 0?{cursor:String(e.flags.cursor)}:{}}}function Ie(e){if(e.flags.status===void 0)return;let t=String(e.flags.status).split(",").map(s=>s.trim()).filter(Boolean);if(t.length===0)throw new c("--status got an empty status list");let n=t.filter(s=>!C$1.includes(s));if(n.length>0)throw new c(`--status must name trial statuses (${C$1.join(", ")}); got: ${n.join(", ")}`);return t}function vt(e){return e.status==="COMPLETED"?0:e.status==="FAILED"||e.status==="CANCELLED"?1:0}async function wt(e,t){let n=tt(e);if(e.flags["print-config"]===true)return t.out(JSON.stringify(n,null,2)),0;let s=e.flags.json===true,r=e.flags.watch===true,o=e.flags.quiet===true,a=N$1(g(e)),i=await a.start(n);if(!r){if(s)t.out(JSON.stringify(i));else {for(let p of I(i))t.out(p);t.out(""),t.out(`Follow it with: evolve-evals job show ${i.id}`);}return 0}s?t.out(JSON.stringify({kind:"job.created",job:i})):t.out(`Job ${i.id} (${D(i.datasets)}) ${i.status} \u2014 watching\u2026`);let u=await a.watch(i.id,{onEvent:p=>{o||t.out(s?JSON.stringify({kind:"event",...p}):gt(p));}});if(s)t.out(JSON.stringify({kind:"job.final",job:u}));else {t.out("");for(let p of I(u))t.out(p);}return vt(u)}async function St(e,t){if(N(e,t,ae))return 0;let s=await N$1(g(e)).list({...A(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{}});return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.items.length===0?(e.flags.quiet!==true&&t.out("No jobs."),0):(R(e,t,s.items,ae,at,r=>r.id),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
|
|
9
|
+
More: evolve-evals job list --cursor ${s.nextCursor}`),0)}async function $t(e,t){let n=N$1(g(e)),s=[];for(let r of e.positionals)s.push(await n.get(await $(e,r)));return e.flags.json===true?(t.out(JSON.stringify(s.length===1?s[0]:s)),0):(s.forEach((r,o)=>{o>0&&t.out("");for(let a of I(r))t.out(a);}),0)}async function kt(e,t){if(N(e,t,ie))return 0;let n=N$1(g(e)),s=Ie(e),r=e.flags.dataset,o=await n.trials(await $(e,e.positionals[0]),{...s!==void 0?{status:s}:{},...r!==void 0?{dataset:r}:{},...A(e)});return e.flags.json===true?(t.out(JSON.stringify(o)),0):o.items.length===0?(e.flags.quiet!==true&&t.out("No trials."),0):(R(e,t,o.items,ie,it,a=>a.id),t.tty===true&&e.flags.quiet!==true&&(t.out(`
|
|
10
|
+
${o.items.length} trial(s) shown`),o.nextCursor&&t.out(`More: evolve-evals job trials ${e.positionals[0]} --cursor ${o.nextCursor}`)),0)}async function _t(e,t){if(N(e,t,le))return 0;let s=await N$1(g(e)).tasks(await $(e,e.positionals[0]),A(e));return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.items.length===0?(e.flags.quiet!==true&&t.out("No tasks."),0):(R(e,t,s.items,le,lt,r=>r.task_name),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
|
|
11
|
+
More: evolve-evals job tasks ${e.positionals[0]} --cursor ${s.nextCursor}`),0)}function jt(e){let t=[],n=[["ID","DATASETS","STATUS","MEAN REWARD","COVERAGE","SPENT"]];for(let s of e.jobs)n.push([s.id,D(s.datasets),s.status,H(s.mean_reward),`${s.coverage.scored}/${s.coverage.total}`,k(s.cost_usd)]);if(t.push(...S(n)),e.taskMatrix.length>0){t.push("","Task matrix (disagreements first; columns in the order above):");let s=[["TASK","DIFF",...e.jobs.map((o,a)=>`JOB ${a+1}`)]],r=e.jobs.map(o=>o.id);for(let o of e.taskMatrix){let a=new Map(o.cells.map(i=>[i.job_id,i]));s.push([o.task_name,o.disagreement?"!":"",...r.map(i=>{let u=a.get(i);return u?u.mean_reward!==null?`${u.status} ${H(u.mean_reward)}`:u.status:"-"})]);}t.push(...S(s));}return t}async function It(e,t){let n=N$1(g(e)),s=[];for(let o of e.positionals)s.push(await $(e,o));let r=await n.compare(s);if(e.flags.json===true)t.out(JSON.stringify(r));else for(let o of jt(r))t.out(o);return 0}async function At(e,t){let s=await N$1(g(e)).cancel(await $(e,e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of I(s))t.out(r);return 0}async function Ot(e,t){let n=e.flags.dataset;if(!n)throw new c("job stop needs --dataset <name> (to stop the whole job, use: evolve-evals job cancel <id>)");let s=N$1(g(e)),r=await s.get(await $(e,e.positionals[0])),o=r.datasets.map(l=>l.name);if(!o.includes(n))throw new Error(`job ${r.id} does not run dataset ${n}; its datasets: ${o.join(", ")}`);let a=[];for await(let l of s.trials(r.id,{dataset:n}))a.push(l.id);if(a.length===0)return e.flags.json===true?t.out(JSON.stringify({stopped:[],already_terminal:[],not_found:[]})):t.out(`No trials in ${n}.`),0;let i=O(g(e)),u={stopped:[],already_terminal:[],not_found:[]},p=0;try{for(let l=0;l<a.length;l+=100){let h=a.slice(l,l+100),d=await i.stop(h);p+=h.length,u.stopped.push(...d.stopped),u.already_terminal.push(...d.already_terminal),u.not_found.push(...d.not_found);}}catch(l){throw pe(u,n,a.length,p,e,t),l}return pe(u,n,a.length,p,e,t),0}function pe(e,t,n,s,r,o){let a=n-s;if(r.flags.json===true){o.out(JSON.stringify(a>0?{...e,partial:true,unreported:a}:e));return}for(let i of e.stopped)o.out(`stopped ${i.id} (${i.task_name}) ${i.status}`);for(let i of e.already_terminal)o.out(`already terminal ${i}`);for(let i of e.not_found)o.out(`not found ${i}`);o.out(`${e.stopped.length} stopped, ${e.already_terminal.length} already terminal, ${e.not_found.length} not found (${t})`),a>0&&o.out(`PARTIAL: ${a} of ${n} trials have no report \u2014 no answer came back for trials ${s+1}-${Math.min(s+100,n)}; rerun the same command to finish the rest.`);}async function Et(e,t){let n=N$1(g(e)),s=e.flags["filter-error-type"],r=await n.resume(await $(e,e.positionals[0]),s!==void 0?{filter_error_types:s}:void 0);if(e.flags.json===true)t.out(JSON.stringify(r));else {for(let o of I(r))t.out(o);t.out(""),t.out(`Follow it with: evolve-evals job show ${r.id}`);}return 0}async function xt(e,t){let n=N$1(g(e)),s={},r=Ie(e);r!==void 0&&(s.statuses=r),e.flags.task!==void 0&&(s.task_name=String(e.flags.task));let o=await n.regrade(await $(e,e.positionals[0]),s);if(e.flags.json===true)t.out(JSON.stringify(o));else {for(let a of I(o))t.out(a);t.out(""),t.out(`Follow it with: evolve-evals job show ${o.id}`);}return 0}async function Pt(e,t){let s=await N$1(g(e)).download(await $(e,e.positionals[0]),{to:e.flags["output-dir"]??process.cwd()});return e.flags.json===true?t.out(JSON.stringify({path:s})):t.out(`Saved ${s}`),0}async function Tt(e,t){let s=await O(g(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of dt(s))t.out(r);return 0}var ge=E;async function Ct(e,t){let n=O(g(e)),s=e.positionals[0],r=e.flags.json===true,o=e.flags.stream;if(o!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new c('"trial download" takes EITHER --stream OR -o/--overwrite, not both');if((o===void 0||o!=="trace-parsed")&&(e.flags.cursor!==void 0||e.flags.limit!==void 0))throw new c("--cursor/--limit page the parsed events; they apply only to --stream trace-parsed");if(o!==void 0){if(!ge.includes(o))throw new c(`--stream must be one of: ${ge.join(", ")}`);if(o==="trace-parsed"){let w=0;for await(let _ of n.traceEvents(s,A(e)))t.out(r?JSON.stringify(_):mt(_)),w+=1;return !r&&w===0&&t.out("No trace events."),0}if(o==="agent-home"){let w=await n.artifact(s,o);if(w===null)return t.out(r?JSON.stringify({files:null}):`No ${o} content was stored for this trial.`),0;if(r)t.out(JSON.stringify({files:w}));else for(let[_,Z]of Object.entries(w))t.out(`===== ${_} (${Buffer.byteLength(Z,"utf8")} bytes) =====`),t.out(Z);return 0}let y=await n.artifact(s,o);return y===null?(t.out(r?JSON.stringify({log:null}):`No ${o} log was stored for this trial.`),0):(t.out(r?JSON.stringify({log:y}):y),0)}let{mkdir:a,writeFile:i}=await import('fs/promises'),{join:u,dirname:p}=await import('path'),l=u(e.flags["output-dir"]??"trials",s);if(existsSync(l)&&e.flags.overwrite!==true)throw new Error(`${l} already exists (pass --overwrite to replace it)`);await a(l,{recursive:true});let h=[],d=y=>{h.push(y),r||t.out(y);},f=[];for await(let y of n.traceEvents(s))f.push(JSON.stringify(y));await i(u(l,"trace-parsed.jsonl"),f.join(`
|
|
12
|
+
`)+(f.length?`
|
|
13
|
+
`:"")),d(`trace-parsed.jsonl (${f.length} events)`);for(let y of ["verifier","trace-stdout","trace-stderr"]){let w=await n.artifact(s,y);w!==null&&(await i(u(l,`${y}.log`),w),d(`${y}.log (${Buffer.byteLength(w,"utf8")} bytes)`));}let m=await n.artifact(s,"agent-home");if(m!==null){for(let[y,w]of Object.entries(m)){let _=u(l,"agent-home",...y.split("/").filter(Boolean));await a(p(_),{recursive:true}),await i(_,w);}d(`agent-home/ (${Object.keys(m).length} files)`);}return r?t.out(JSON.stringify({path:l,saved:h})):t.out(`Saved ${l}`),0}async function Rt(e,t){let n=await O(g(e)).regrade(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of I(n))t.out(s);t.out(""),t.out(`Follow it with: evolve-evals job show ${n.id}`);}return 0}async function Nt(e,t){let s=await O(g(e)).stop(e.positionals);if(e.flags.json===true)return t.out(JSON.stringify(s)),0;for(let r of s.stopped)t.out(`stopped ${r.id} (${r.task_name}) ${r.status}`);for(let r of s.already_terminal)t.out(`already terminal ${r}`);for(let r of s.not_found)t.out(`not found ${r}`);return 0}function Ae(e){let t=S([["name",e.name],["title",e.title??"-"],["description",e.description??"-"],["active version",e.active_version?.version??"-"]]);if(e.versions&&e.versions.length>0){t.push("");let n=e.versions.some(r=>r.gate!=null),s=[["VERSION","STATE","TASKS","CREATED",...n?["GATE"]:[]]];for(let r of e.versions)s.push([r.version,r.state,String(r.task_count),r.created_at??"-",...n?[r.gate?.status??"-"]:[]]);t.push(...S(s));for(let r of e.versions)if(r.gate?.status==="FAILED"){let o=r.gate.message??r.gate.code??"no reason reported";t.push(`version ${r.version} activation gate FAILED: ${o}`);}}if(e.tasks&&e.tasks.items.length>0){t.push("",`Tasks (version ${e.selected_version?.version??"?"}):`);let n=[["TASK","AGENT TIMEOUT","VERIFIER TIMEOUT","PROVIDERS"]];for(let r of e.tasks.items)n.push([r.task_name,`${r.agent_timeout_sec}s`,`${r.verifier_timeout_sec}s`,ft(r.providers)]);t.push(...S(n)),e.tasks.nextCursor&&t.push(`More tasks: evolve-evals dataset show ${e.name} --cursor ${e.tasks.nextCursor}`);let s=new Map;for(let r of e.tasks.items)for(let o of _e){let a=r.providers?.[o];a&&!a.ok&&!s.has(`${o}:${a.reason}`)&&s.set(`${o}:${a.reason}`,`${o}: ${a.reason}`);}if(s.size>0){t.push("","Provider limitations:");for(let r of s.values())t.push(` ${r}`);}}return t}function Oe(e){let t=[];for(let n of e){if(!n.upstream?.moved)continue;let s=n.active_version?`@${n.active_version.version}`:"";t.push(`${n.name}${s} \xB7 upstream ${n.upstream.ref} moved \u2014 run: evolve-evals dataset publish --name ${n.name} --version <new-version> --git <url> --ref ${n.upstream.ref}`);}return t}async function Lt(e,t){if(N(e,t,ue))return 0;let s=await L$1(g(e)).list({...A(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{}});if(e.flags.json===true)return t.out(JSON.stringify(s)),0;if(s.items.length===0)return e.flags.quiet!==true&&t.out("No datasets."),0;if(R(e,t,s.items,ue,ut,r=>r.name),e.flags.quiet!==true)for(let r of Oe(s.items))t.out(r);return 0}async function Jt(e,t){let s=await L$1(g(e)).get(e.positionals[0],A(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of Ae(s))t.out(r);for(let r of Oe([s]))t.out(r);}return 0}async function Ut(e,t){let n=e.flags.json===true,s=L$1(g(e)),r=nt(e),o=await s.publish(r);if(e.flags.watch!==true){if(n)t.out(JSON.stringify(o));else {for(let i of de(o))t.out(i);t.out(""),t.out(`Follow it with: evolve-evals dataset show ${r.name}`);}return 0}n?t.out(JSON.stringify({kind:"import.created",datasetImport:o})):t.out(`Publish ${o.id} (${r.name}) ${o.status} \u2014 watching\u2026`);let a=await s.watchImport(o.id,{onStatus:i=>{t.out(n?JSON.stringify({kind:"import.status",datasetImport:i}):pt(i));}});if(n)t.out(JSON.stringify({kind:"import.final",datasetImport:a}));else {t.out("");for(let i of de(a))t.out(i);}return a.status==="FAILED"?1:0}async function Dt(e,t){let s=await L$1(g(e)).download(e.positionals[0],{to:e.flags["output-dir"]??process.cwd()});return e.flags.json===true?t.out(JSON.stringify({path:s})):t.out(`Saved ${s}`),0}async function Ft(e,t){let n=L$1(g(e)),[s,r]=e.positionals,o=await n.activate(s,r);if(e.flags.json===true)t.out(JSON.stringify(o));else for(let a of Ae(o))t.out(a);return 0}async function Mt(e,t){if(N(e,t,ce))return 0;let s=await M(g(e)).list(A(e));return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.items.length===0?(e.flags.quiet!==true&&t.out("No registered agents."),0):(R(e,t,s.items,ce,ct,r=>r.name),0)}async function qt(e,t){let s=await M(g(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of ke(s))t.out(r);return 0}async function Yt(e,t){let s=await M(g(e)).create(st(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of ke(s))t.out(r);t.out(""),t.out(`Use it with: evolve-evals run -d <dataset> -a ${s.name} -m <model>`);}return 0}async function Gt(e,t){let n=M(g(e)),s=e.positionals[0];return await n.delete(s),e.flags.json===true?t.out(JSON.stringify({name:s,deleted:true})):t.out(`Deleted agent ${s}`),0}function Vt(e){let t=[["user",e.user_id],["email",e.email??"-"],["key",e.key.id]];return e.key.label&&t.push(["key label",e.key.label]),t.push(["key created",e.key.created_at]),e.key.last_used_at&&t.push(["key last used",e.key.last_used_at]),S(t)}async function Kt(e,t){let n=await P(g(e)).status();if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Vt(n))t.out(s);return 0}function Bt(e){if(e.length===0)return {text:V(),code:0};let t=be[e[0]]??e[0],n=C[t];if(!n)return {text:V(),code:0};if(e.length===1)return {text:se(t),code:0};let s=ve[e[1]]??e[1],r=n.commands[s];return r?{text:Le(t,s,r),code:0}:{text:se(t),code:0}}var Wt={"job start":wt,"job list":St,"job show":$t,"job trials":kt,"job tasks":_t,"job compare":It,"job cancel":At,"job stop":Ot,"job resume":Et,"job regrade":xt,"job download":Pt,"trial show":Tt,"trial download":Ct,"trial regrade":Rt,"trial stop":Nt,"dataset list":Lt,"dataset show":Jt,"dataset publish":Ut,"dataset download":Dt,"dataset activate":Ft,"agent list":Mt,"agent show":qt,"agent add":Yt,"agent remove":Gt,"auth status":Kt};async function Ht(e,t=rt){let n;try{n=De(e);}catch(s){if(s instanceof c)return t.err(`Error: ${s.message}`),t.err('Run "evolve-evals help" for usage.'),2;throw s}if(n.command==="help"){let{text:s,code:r}=Bt(n.positionals);return t.out(s),r}if(n.command==="version")return t.out(Je()),0;try{let s=Wt[n.command];return s?await s(n,t):(t.err(`Error: unknown command "${n.command}"`),2)}catch(s){if(s instanceof c)return t.err(`Error: ${s.message}`),t.err(`Run "evolve-evals ${n.command} --help" for usage.`),2;if(s instanceof H$1&&s.status===429){let r=s.retryAfterSec!==void 0?`retry in ${s.retryAfterSec}s`:"retry shortly";return t.err(`Error: rate limited by the server \u2014 ${r}.`),1}return t.err(`Error: ${s.message}`),1}}var Xt=(()=>{let e=process.argv[1];if(!e)return false;let t=n=>{try{return import.meta.url===pathToFileURL(n).href}catch{return false}};if(t(e))return true;try{return t(realpathSync(e))}catch{return false}})();Xt&&Ht(process.argv.slice(2)).then(e=>{process.exitCode=e;},e=>{process.stderr.write(`Error: ${e?.message??e}
|
|
14
|
+
`),process.exitCode=1;});export{c as CliUsageError,tn as USAGE,st as buildAgentInput,tt as buildJobInput,nt as buildPublishInput,gt as eventLine,pt as importStatusLine,De as parseArgs,W as parseEnvPairs,nn as parseYamlConfig,we as parseYamlConfigLocated,Ht as runCli,mt as traceEventLine,dt as trialDetailLines};
|