@evolvingmachines/evolve 0.0.55-project-sable.20260916.db0bc0bb → 0.0.55-project-sable.20260917.b6daf17f

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 (73) hide show
  1. package/dist/cli/index.cjs +32 -32
  2. package/dist/cli/index.js +27 -27
  3. package/package.json +4 -6
  4. package/skills/evolve/SKILL.md +4 -3
  5. package/skills/evolve-evals/SKILL.md +112 -0
  6. package/{docs-evals → skills/evolve-evals/references}/cli-reference/run.mdx +1 -1
  7. package/{docs-evals → skills/evolve-evals/references}/cli-reference/skills.mdx +4 -4
  8. package/{docs-evals → skills/evolve-evals/references}/core-concepts/agents.mdx +2 -2
  9. package/{docs-evals → skills/evolve-evals/references}/core-concepts/analyze.mdx +1 -1
  10. package/{docs-evals → skills/evolve-evals/references}/core-concepts/jobs.mdx +3 -3
  11. package/{docs-evals → skills/evolve-evals/references}/core-concepts/models.mdx +1 -1
  12. package/{docs-evals → skills/evolve-evals/references}/core-concepts/sandboxes.mdx +2 -2
  13. package/{docs-evals → skills/evolve-evals/references}/core-concepts/secrets.mdx +1 -1
  14. package/{docs-evals → skills/evolve-evals/references}/core-concepts/trial-outputs.mdx +1 -1
  15. package/{docs-evals → skills/evolve-evals/references}/getting-started/quick-start.mdx +1 -1
  16. package/{docs-evals → skills/evolve-evals/references}/index.mdx +1 -1
  17. package/{docs-evals → skills/evolve-evals/references}/sdk/python.mdx +1 -1
  18. package/{docs-evals → skills/evolve-evals/references}/sdk/typescript.mdx +1 -1
  19. package/{docs-evals → skills/evolve-evals/references}/sdk-reference/errors.mdx +2 -2
  20. package/{docs-evals → skills/evolve-evals/references}/sdk-reference/jobs.mdx +2 -2
  21. package/docs-agents/SKILL.md +0 -138
  22. package/docs-agents/index.md +0 -81
  23. package/docs-agents/python/01-getting-started.md +0 -511
  24. package/docs-agents/python/02-configuration.md +0 -855
  25. package/docs-agents/python/03-runtime.md +0 -899
  26. package/docs-agents/python/04-streaming.md +0 -451
  27. package/docs-agents/python/05-swarm-pipeline.md +0 -953
  28. package/docs-agents/python/index.md +0 -122
  29. package/docs-agents/typescript/01-getting-started.md +0 -494
  30. package/docs-agents/typescript/02-configuration.md +0 -841
  31. package/docs-agents/typescript/03-runtime.md +0 -864
  32. package/docs-agents/typescript/04-streaming.md +0 -478
  33. package/docs-agents/typescript/05-swarm-pipeline.md +0 -957
  34. package/docs-agents/typescript/index.md +0 -121
  35. package/docs-evals/SKILL.md +0 -112
  36. package/docs-evals/docs.json +0 -180
  37. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/agent.mdx +0 -0
  38. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/analysis.mdx +0 -0
  39. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/analyze.mdx +0 -0
  40. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/auth.mdx +0 -0
  41. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/check.mdx +0 -0
  42. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/dataset.mdx +0 -0
  43. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/index.mdx +0 -0
  44. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/job.mdx +0 -0
  45. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/secrets.mdx +0 -0
  46. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/skill.mdx +0 -0
  47. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/trial.mdx +0 -0
  48. /package/{docs-evals → skills/evolve-evals/references}/cli-reference/upload.mdx +0 -0
  49. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/check.mdx +0 -0
  50. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/datasets.mdx +0 -0
  51. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/index.mdx +0 -0
  52. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/skills.mdx +0 -0
  53. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/tasks.mdx +0 -0
  54. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/trials.mdx +0 -0
  55. /package/{docs-evals → skills/evolve-evals/references}/core-concepts/upload.mdx +0 -0
  56. /package/{docs-evals → skills/evolve-evals/references}/dashboard/checks.mdx +0 -0
  57. /package/{docs-evals → skills/evolve-evals/references}/dashboard/datasets.mdx +0 -0
  58. /package/{docs-evals → skills/evolve-evals/references}/dashboard/jobs.mdx +0 -0
  59. /package/{docs-evals → skills/evolve-evals/references}/dashboard/traces.mdx +0 -0
  60. /package/{docs-evals → skills/evolve-evals/references}/dashboard/trial-viewer.mdx +0 -0
  61. /package/{docs-evals → skills/evolve-evals/references}/getting-started/installation.mdx +0 -0
  62. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/agents.mdx +0 -0
  63. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/analyses.mdx +0 -0
  64. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/auth.mdx +0 -0
  65. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/checks.mdx +0 -0
  66. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/datasets.mdx +0 -0
  67. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/index.mdx +0 -0
  68. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/meta.mdx +0 -0
  69. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/skills.mdx +0 -0
  70. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/trials.mdx +0 -0
  71. /package/{docs-evals → skills/evolve-evals/references}/sdk-reference/types.mdx +0 -0
  72. /package/{docs-evals → skills/evolve-evals/references}/snippets/global-options.mdx +0 -0
  73. /package/{docs-evals → skills/evolve-evals/references}/snippets/list-flags.mdx +0 -0
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var crypto=require('crypto'),promises=require('fs/promises'),http=require('http'),https=require('https'),fs=require('fs'),$a=require('zlib'),os$1=require('os'),path=require('path'),promises$1=require('stream/promises'),tarStream=require('tar-stream'),url=require('url'),yaml=require('yaml'),smolToml=require('smol-toml'),stream=require('stream');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var $a__default=/*#__PURE__*/_interopDefault($a);var la=Object.defineProperty;var Ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var Rt=(e,t)=>{for(var n in t)la(e,n,{get:t[n],enumerable:true});};function Ae(e,t){try{let a=JSON.parse(e)?.error?.retryAfterSec;if(typeof a=="number"&&Number.isFinite(a))return a}catch{}let n=t.headers?.get?.("retry-after");if(typeof n!="string"||n.trim()==="")return;let s=Number(n);return Number.isFinite(s)?s:void 0}var Et=Ge(()=>{});var Xn={};Rt(Xn,{RESUMABLE_UPLOAD_CHUNK_BYTES:()=>Gn,RESUMABLE_UPLOAD_MAX_ATTEMPTS:()=>xe,RESUMABLE_UPLOAD_MAX_RATE_LIMIT_WAITS:()=>Kn,RESUMABLE_UPLOAD_MAX_RETRY_AFTER_SEC:()=>Wn,RESUMABLE_UPLOAD_THRESHOLD_BYTES:()=>Te,retryAfterWaitMs:()=>Yn,setResumableUploadThresholdBytes:()=>fa,uploadArchiveResumable:()=>ya});function fa(e){Te=e;}async function ma(e){let t=await promises.open(e,"r");try{let n=crypto.createHash("sha256"),s=Buffer.alloc(1024*1024);for(;;){let{bytesRead:r}=await t.read(s,0,s.length);if(r===0)break;n.update(s.subarray(0,r));}return n.digest("hex")}finally{await t.close();}}function Pt(e){return Math.min(500*2**(e-1),4e3)}function Yn(e,t){let n=e===void 0?0:e*1e3;return Math.min(Math.max(n,Pt(t)),Wn*1e3)}async function It(e,t,n){let s=new AbortController,r=setTimeout(()=>s.abort(),n);r.unref?.();try{return await fetch(e,{...t,signal:s.signal})}finally{clearTimeout(r);}}async function Ke(e){for(let t=0;;t+=1){let n=await e();if(!ha(n)||t>=Kn)return n;let s=await n.text().catch(()=>"");await $t(Yn(Ae(s,n),t+1));}}function _a(e,t,n){return new Promise((s,r)=>{let a=new URL(e),l=(a.protocol==="https:"?https.request:http.request)(a,{method:"POST",headers:t}),c=setTimeout(()=>{l.destroy(new Error(`finalize timed out: no response for ${Math.round(n/1e3)}s`));},n);c.unref?.(),l.on("error",i=>{clearTimeout(c),r(i);}),l.on("response",i=>{let u=[];i.on("data",d=>u.push(d)),i.on("error",d=>{clearTimeout(c),r(d);}),i.on("end",()=>{clearTimeout(c);let d=new Headers;for(let[g,h]of Object.entries(i.headers))if(typeof h=="string")d.set(g,h);else if(Array.isArray(h))for(let y of h)d.append(g,y);let p=i.statusCode??0,f=p!==204&&p!==205&&p!==304;s(new Response(f?Buffer.concat(u):null,{status:p,statusText:i.statusMessage??"",headers:d}));});}),l.end();})}async function ya(e){let t=e.timeoutMs??ga,n=e.chunkBytes??Gn,{size:s}=await promises.stat(e.file.path),r=await ma(e.file.path),a=`${e.baseUrl}${e.sessionsPath??"/api/datasets/publish/uploads"}`,o={...e.headers,"Content-Type":"application/json"},l={size:s,sha256:r};for(let[f,g]of Object.entries(e.fields))g!==void 0&&(l[f]=g);let c=await Ke(()=>It(a,{method:"POST",headers:o,body:JSON.stringify(l)},t));if(!c.ok)return c;let i=await c.json(),u=`${a}/${i.id}`;typeof i.import_id=="string"&&i.import_id!==""&&e.onRegistered?.(i.import_id);let d=async()=>{let f=await Ke(()=>It(u,{method:"HEAD",headers:e.headers},t));if(!f.ok)throw new Error(`upload session probe failed: HTTP ${f.status}`);let g=Number(f.headers.get("upload-offset"));if(!Number.isInteger(g))throw new Error("upload session probe did not return Upload-Offset");return g},p=await promises.open(e.file.path,"r");try{let f=0,g=0,h=Buffer.alloc(n);for(;f<s;){let _=Math.min(n,s-f),{bytesRead:v}=await p.read(h,0,_,f);if(v!==_)throw new Error(`archive shrank mid-upload: read ${v} of ${_} bytes at offset ${f}`);let b=h.subarray(0,_),S=crypto.createHash("sha256").update(b).digest(),A;try{A=await Ke(()=>It(u,{method:"PATCH",headers:{...e.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":String(f),"Upload-Checksum":`sha256 ${S.toString("base64")}`},body:new Uint8Array(b)},t));}catch(B){if(g+=1,g>=xe)throw B;await $t(Pt(g));try{f=await d();}catch{}continue}if(A.status===409){if(g+=1,g>=xe)return A;f=await d();continue}if(!A.ok)return A;let U=Number(A.headers.get("upload-offset"));if(!Number.isInteger(U)||U<=f)throw new Error("resumable upload did not advance Upload-Offset");f=U,g=0,e.onBytes?.(f,s);}let y;for(let _=1;_<=xe;_++)try{return await Ke(()=>_a(`${u}/complete`,e.headers,t))}catch(v){y=v,_<xe&&await $t(Pt(_));}throw y}finally{await p.close();}}var Te,Gn,xe,Kn,Wn,ga,$t,ha,Ct=Ge(()=>{Et();Te=256*1024*1024;Gn=6*1024*1024,xe=4,Kn=3,Wn=60,ga=6e5;$t=e=>new Promise(t=>setTimeout(t,e));ha=e=>e.status===429||e.status===503;});var is={};Rt(is,{EvolveUploadTimeoutError:()=>Ce,UPLOAD_TIMEOUT_MS:()=>Gt,postMultipartFile:()=>Pa});function os(e,t){return new Promise((n,s)=>{e.write(t,r=>r?s(r):n());})}async function Pa(e){let t=`----evolve${crypto.randomUUID().replace(/-/g,"")}`,n=[];for(let[b,S]of Object.entries(e.fields))S!==void 0&&n.push(`--${t}\r
2
+ 'use strict';var crypto=require('crypto'),promises=require('fs/promises'),http=require('http'),https=require('https'),fs$1=require('fs'),Ta=require('zlib'),os=require('os'),path=require('path'),promises$1=require('stream/promises'),tarStream=require('tar-stream'),url=require('url'),yaml=require('yaml'),smolToml=require('smol-toml'),stream=require('stream');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ta__default=/*#__PURE__*/_interopDefault(Ta);var sa=Object.defineProperty;var Ve=(e,t)=>()=>(e&&(t=e(e=0)),t);var Tt=(e,t)=>{for(var n in t)sa(e,n,{get:t[n],enumerable:true});};function Ae(e,t){try{let a=JSON.parse(e)?.error?.retryAfterSec;if(typeof a=="number"&&Number.isFinite(a))return a}catch{}let n=t.headers?.get?.("retry-after");if(typeof n!="string"||n.trim()==="")return;let s=Number(n);return Number.isFinite(s)?s:void 0}var Rt=Ve(()=>{});var Wn={};Tt(Wn,{RESUMABLE_UPLOAD_CHUNK_BYTES:()=>Hn,RESUMABLE_UPLOAD_MAX_ATTEMPTS:()=>xe,RESUMABLE_UPLOAD_MAX_RATE_LIMIT_WAITS:()=>Vn,RESUMABLE_UPLOAD_MAX_RETRY_AFTER_SEC:()=>Gn,RESUMABLE_UPLOAD_THRESHOLD_BYTES:()=>Te,retryAfterWaitMs:()=>Kn,setResumableUploadThresholdBytes:()=>la,uploadArchiveResumable:()=>fa});function la(e){Te=e;}async function ca(e){let t=await promises.open(e,"r");try{let n=crypto.createHash("sha256"),s=Buffer.alloc(1024*1024);for(;;){let{bytesRead:r}=await t.read(s,0,s.length);if(r===0)break;n.update(s.subarray(0,r));}return n.digest("hex")}finally{await t.close();}}function It(e){return Math.min(500*2**(e-1),4e3)}function Kn(e,t){let n=e===void 0?0:e*1e3;return Math.min(Math.max(n,It(t)),Gn*1e3)}async function Et(e,t,n){let s=new AbortController,r=setTimeout(()=>s.abort(),n);r.unref?.();try{return await fetch(e,{...t,signal:s.signal})}finally{clearTimeout(r);}}async function Ge(e){for(let t=0;;t+=1){let n=await e();if(!da(n)||t>=Vn)return n;let s=await n.text().catch(()=>"");await Pt(Kn(Ae(s,n),t+1));}}function pa(e,t,n){return new Promise((s,r)=>{let a=new URL(e),l=(a.protocol==="https:"?https.request:http.request)(a,{method:"POST",headers:t}),c=setTimeout(()=>{l.destroy(new Error(`finalize timed out: no response for ${Math.round(n/1e3)}s`));},n);c.unref?.(),l.on("error",i=>{clearTimeout(c),r(i);}),l.on("response",i=>{let u=[];i.on("data",d=>u.push(d)),i.on("error",d=>{clearTimeout(c),r(d);}),i.on("end",()=>{clearTimeout(c);let d=new Headers;for(let[g,h]of Object.entries(i.headers))if(typeof h=="string")d.set(g,h);else if(Array.isArray(h))for(let y of h)d.append(g,y);let p=i.statusCode??0,f=p!==204&&p!==205&&p!==304;s(new Response(f?Buffer.concat(u):null,{status:p,statusText:i.statusMessage??"",headers:d}));});}),l.end();})}async function fa(e){let t=e.timeoutMs??ua,n=e.chunkBytes??Hn,{size:s}=await promises.stat(e.file.path),r=await ca(e.file.path),a=`${e.baseUrl}${e.sessionsPath??"/api/datasets/publish/uploads"}`,o={...e.headers,"Content-Type":"application/json"},l={size:s,sha256:r};for(let[f,g]of Object.entries(e.fields))g!==void 0&&(l[f]=g);let c=await Ge(()=>Et(a,{method:"POST",headers:o,body:JSON.stringify(l)},t));if(!c.ok)return c;let i=await c.json(),u=`${a}/${i.id}`;typeof i.import_id=="string"&&i.import_id!==""&&e.onRegistered?.(i.import_id);let d=async()=>{let f=await Ge(()=>Et(u,{method:"HEAD",headers:e.headers},t));if(!f.ok)throw new Error(`upload session probe failed: HTTP ${f.status}`);let g=Number(f.headers.get("upload-offset"));if(!Number.isInteger(g))throw new Error("upload session probe did not return Upload-Offset");return g},p=await promises.open(e.file.path,"r");try{let f=0,g=0,h=Buffer.alloc(n);for(;f<s;){let _=Math.min(n,s-f),{bytesRead:v}=await p.read(h,0,_,f);if(v!==_)throw new Error(`archive shrank mid-upload: read ${v} of ${_} bytes at offset ${f}`);let b=h.subarray(0,_),S=crypto.createHash("sha256").update(b).digest(),A;try{A=await Ge(()=>Et(u,{method:"PATCH",headers:{...e.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":String(f),"Upload-Checksum":`sha256 ${S.toString("base64")}`},body:new Uint8Array(b)},t));}catch(F){if(g+=1,g>=xe)throw F;await Pt(It(g));try{f=await d();}catch{}continue}if(A.status===409){if(g+=1,g>=xe)return A;f=await d();continue}if(!A.ok)return A;let N=Number(A.headers.get("upload-offset"));if(!Number.isInteger(N)||N<=f)throw new Error("resumable upload did not advance Upload-Offset");f=N,g=0,e.onBytes?.(f,s);}let y;for(let _=1;_<=xe;_++)try{return await Ge(()=>pa(`${u}/complete`,e.headers,t))}catch(v){y=v,_<xe&&await Pt(It(_));}throw y}finally{await p.close();}}var Te,Hn,xe,Vn,Gn,ua,Pt,da,$t=Ve(()=>{Rt();Te=256*1024*1024;Hn=6*1024*1024,xe=4,Vn=3,Gn=60,ua=6e5;Pt=e=>new Promise(t=>setTimeout(t,e));da=e=>e.status===429||e.status===503;});var as={};Tt(as,{EvolveUploadTimeoutError:()=>Ce,UPLOAD_TIMEOUT_MS:()=>Vt,postMultipartFile:()=>xa});function rs(e,t){return new Promise((n,s)=>{e.write(t,r=>r?s(r):n());})}async function xa(e){let t=`----evolve${crypto.randomUUID().replace(/-/g,"")}`,n=[];for(let[b,S]of Object.entries(e.fields))S!==void 0&&n.push(`--${t}\r
3
3
  Content-Disposition: form-data; name="${b}"\r
4
4
  \r
5
5
  ${S}\r
@@ -9,23 +9,23 @@ Content-Type: application/gzip\r
9
9
  \r
10
10
  `);let s=Buffer.from(n.join(""),"utf8"),r=Buffer.from(`\r
11
11
  --${t}--\r
12
- `,"utf8"),{size:a}=await promises.stat(e.file.path),o=new URL(e.url),c=(o.protocol==="https:"?https.request:http.request)(o,{method:e.method,headers:{...e.headers,"Content-Type":`multipart/form-data; boundary=${t}`,"Content-Length":String(s.length+a+r.length)}}),i=e.timeoutMs??Gt,u,d,p=new Promise((b,S)=>{d=S;});p.catch(()=>{});let f=b=>Promise.race([b,p]),g,h=()=>{g!==void 0&&clearTimeout(g),g=setTimeout(()=>{u=new Ce(e.url,i),c.destroy(u),d(u);},i),g.unref();};c.on("error",b=>d(u??b)),h();let y,_=new Promise((b,S)=>{c.on("response",A=>{y=A,h(),b(A);}),c.on("error",A=>{y===void 0&&S(A);});});_.catch(()=>{});let v=fs.createReadStream(e.file.path);try{let b=(async()=>{await os(c,s),h();let R=0;for await(let P of v)await os(c,P),h(),R+=P.length,e.onBytes?.(R,a);await new Promise(P=>{c.end(r,P);});})();try{await f(b);}catch(R){if(v.destroy(),y===void 0)throw c.destroy(),u??R}let S=await f(_).catch(R=>{throw u??R}),A=(async()=>{let R=[];for await(let P of S)h(),R.push(P);return Buffer.concat(R)})(),U=await f(A).catch(R=>{throw u??R}),B=S.statusCode??0,re=new Headers;for(let[R,P]of Object.entries(S.headers))if(typeof P=="string")re.set(R,P);else if(Array.isArray(P))for(let ia of P)re.append(R,ia);let $=B!==204&&B!==205&&B!==304;return new Response($?U:null,{status:B,statusText:S.statusMessage??"",headers:re})}finally{g!==void 0&&clearTimeout(g);}}var Gt,Ce,Kt=Ge(()=>{Gt=6e5,Ce=class extends Error{name="EvolveUploadTimeoutError";constructor(t,n){super(`upload to ${t} timed out: no socket activity for ${Math.round(n/1e3)}s`);}};});var nt={};Rt(nt,{MAX_INLINE_ARCHIVE_BYTES:()=>ys,crc32Fallback:()=>hs,extractTarGz:()=>Za,shouldStore:()=>ms,tarGzTopLevelName:()=>eo,tarGzipDirectory:()=>Qa,tarGzipDirectoryToFile:()=>_s});async function Ha(e){let t=[],n=async s=>{let r=s===""?e:path.join(e,s),a=await promises.readdir(r,{withFileTypes:true});a.sort((o,l)=>o.name<l.name?-1:o.name>l.name?1:0);for(let o of a){if(za.has(o.name))continue;let l=s===""?o.name:`${s}/${o.name}`,c=path.join(r,o.name),i=await promises.lstat(c);i.isSymbolicLink()||(i.isDirectory()?await n(l):i.isFile()&&t.push({rel:l,abs:c,mode:i.mode&73?493:420,size:i.size}));}};return await n(""),t.sort((s,r)=>s.rel<r.rel?-1:s.rel>r.rel?1:0)}async function ms(e,t){if(t<Va)return false;let n=await promises.open(e,"r"),s;try{let a=Buffer.allocUnsafe(us),{bytesRead:o}=await n.read(a,0,us,0);s=a.subarray(0,o);}finally{await n.close();}return s.length===0?false:$a.deflateRawSync(s,{level:1}).length*20>=s.length*19}function hs(e,t=0){let n=~t;for(let s=0;s<e.length;s++)n=Wa[(n^e[s])&255]^n>>>8;return ~n>>>0}async function Xa(e){let t=Symbol("pending"),n=await Promise.race([e,Promise.resolve(t)]);return n===t?null:n}async function _s(e,t){let n=await Ha(e),s=tarStream.pack(),r=fs.createWriteStream(t);r.on("error",()=>{}),s.on("error",()=>{});let a=new Yt(r),o=s[Symbol.asyncIterator](),l=null,c=()=>l??=o.next();try{for(let{rel:i,abs:u,mode:d,size:p}of n){await a.setStored(await ms(u,p));let f=s.entry({name:i,size:p,mode:d,mtime:new Date(0),uid:0,gid:0,uname:"",gname:"",type:"file"}),g=promises$1.pipeline(fs.createReadStream(u),f),h=!1,y=null;for(g.then(()=>{},()=>{}).then(()=>{h=!0,y?.(cs);});;){if(!h){let v=await new Promise((b,S)=>{y=b,c().then(b,S);});if(y=null,v===cs)continue;if(l=null,v.done)break;await a.write(v.value);continue}await new Promise(v=>setImmediate(v));let _=await Xa(c());if(_===null||(l=null,_.done))break;await a.write(_.value);}await g;}for(s.finalize();;){let i=await c();if(l=null,i.done)break;await a.write(i.value);}await a.close(),r.end(),await promises$1.finished(r);}catch(i){throw l?.catch(()=>{}),s.destroy(),r.destroy(),i}}async function Qa(e,t=ys){let n=await promises.mkdtemp(path.join(os$1.tmpdir(),"evolve-tar-"));try{let s=path.join(n,"archive.tar.gz");await _s(e,s);let{size:r}=await promises.stat(s);if(r>t)throw new Error(`directory ${e} tars to ${r} bytes compressed \u2014 over the ${t}-byte cap for in-memory archives. Only the sandbox skill mount uses this path; a skill folder this large is not mountable.`);return await promises.readFile(s)}finally{await promises.rm(n,{recursive:true,force:true});}}async function Za(e,t,n){let s=tarStream.extract(),r=[],a=(async()=>{for await(let o of s){let l=o.header.name,c=l.split("/").filter(u=>u!==""&&u!==".");if(l.startsWith("/")||l.includes("\\")||c.length===0||c.some(u=>u===".."))throw new Error(`refusing to extract "${l}": the path escapes the target directory`);if(c[0]!==n)throw new Error(`refusing to extract "${l}": entry outside ${n}/`);if(o.header.type==="directory"){await promises.mkdir(path.join(t,...c),{recursive:true}),o.resume();continue}if(o.header.type!=="file")throw new Error(`refusing to extract "${l}": unsupported entry type "${o.header.type}"`);let i=path.join(t,...c);await promises.mkdir(path.dirname(i),{recursive:true}),await promises$1.pipeline(o,fs.createWriteStream(i)),r.push(c.join("/"));}})();try{await Promise.all([promises$1.pipeline(fs.createReadStream(e),$a.createGunzip(),s),a]);}catch(o){throw s.destroy(),o}return r}async function eo(e){let t=tarStream.extract(),n=null,s=(async()=>{for await(let r of t){let a=r.header.name,o=a.split("/").filter(l=>l!==""&&l!==".");if(a.startsWith("/")||a.includes("\\")||o.length===0||o.some(l=>l===".."))throw new Error(`refusing to extract "${a}": the path escapes the target directory`);if(n===null)n=o[0];else if(o[0]!==n)throw new Error(`refusing to extract "${a}": the archive holds more than one top-level directory (${n}/)`);r.resume();}})();try{await Promise.all([promises$1.pipeline(fs.createReadStream(e),$a.createGunzip(),t),s]);}catch(r){throw t.destroy(),r}if(n===null)throw new Error("refusing to extract: the archive holds no entries");return n}var za,Va,us,Ga,Ka,Wt,Wa,Ya,Yt,cs,ys,st=Ge(()=>{za=new Set([".git",".DS_Store",".venv"]);Va=64*1024,us=128*1024,Ga=65535,Ka=1024*1024,Wt=32*1024;Wa=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let s=0;s<8;s++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n;}return e})(),Ya=$a__default.default.crc32??hs,Yt=class e{constructor(t){this.sink=t;}static HEADER=Buffer.from([31,139,8,0,0,0,0,0,0,255]);static FINAL_BLOCK=Buffer.from([1,0,0,255,255]);crc=0;plainLength=0;held=[];heldBytes=0;window=null;stored=false;started=false;async setStored(t){t!==this.stored&&(await this.drainHeld(true),this.stored=t);}async write(t){this.started||(this.started=true,await this.out(e.HEADER)),this.held.push(t),this.heldBytes+=t.length,await this.drainHeld(false);}async close(){this.started||(this.started=true,await this.out(e.HEADER)),await this.drainHeld(true),await this.out(e.FINAL_BLOCK);let t=Buffer.allocUnsafe(8);t.writeUInt32LE(this.crc>>>0,0),t.writeUInt32LE(this.plainLength%4294967296,4),await this.out(t);}async drainHeld(t){let n=this.stored?Ga:Ka;for(;this.heldBytes>=n||t&&this.heldBytes>0;){let s=this.held.length===1?this.held[0]:Buffer.concat(this.held,this.heldBytes),r=Math.min(n,s.length),a=s.subarray(r);this.held=a.length>0?[a]:[],this.heldBytes=a.length,await this.emitBlock(s.subarray(0,r));}}async emitBlock(t){if(this.crc=Ya(t,this.crc),this.plainLength+=t.length,this.stored){let n=Buffer.allocUnsafe(5+t.length);n[0]=0,n.writeUInt16LE(t.length,1),n.writeUInt16LE(t.length^65535,3),t.copy(n,5),await this.out(n);}else await this.out($a.deflateRawSync(t,{level:9,finishFlush:$a.constants.Z_SYNC_FLUSH,...this.window?{dictionary:this.window}:{}}));this.window=t.length>=Wt?Buffer.from(t.subarray(t.length-Wt)):this.window?Buffer.concat([this.window,t]).subarray(-Wt):Buffer.from(t);}out(t){return new Promise((n,s)=>{this.sink.write(t,r=>r==null?n():s(r));})}},cs=Symbol("feed settled");ys=256*1024*1024;});var pe="EVOLVE_API_KEY";var fe=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai";Ct();Et();var We=["QUEUED","RUNNING","SCORING","SCORED","SCORING_ERROR","INFRASTRUCTURE_ERROR","BUDGET","INDETERMINATE","CANCELLED"],Ye=["e2b","daytona","modal"],Xe=["my","shared"],Re=["queued","running","completed","failed"],Ee=["queued","running","completed"];function ge(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.provisional!="boolean")return null;let n=s=>typeof s=="number"&&Number.isFinite(s)?s:null;return {provisional:t.provisional,spent_usd:n(t.spent_usd),input_tokens:n(t.input_tokens),cached_input_tokens:n(t.cached_input_tokens),cache_write_tokens:n(t.cache_write_tokens),output_tokens:n(t.output_tokens),as_of:typeof t.as_of=="string"?t.as_of:null}}function Ot(e){let t=e.stats?.evals??{},n=[];for(let s of Object.keys(t).sort()){let r=t[s]?.pass_at_k??{},a=[];for(let o of Object.keys(r)){let l=Number(o),c=r[o];!Number.isFinite(l)||typeof c!="number"||!Number.isFinite(c)||a.push({k:l,value:c});}a.length!==0&&(a.sort((o,l)=>o.k-l.k),n.push({evals_key:s,points:a}));}return n}var Dt=["dataset_flag","job_dataset_record","task_hash","none"],jt=["hash_mismatch","task_not_in_dataset","no_dataset_named","dataset_ambiguous","no_hash_match","no_task_digest"],Lt=1e9;function Ie(e){let t=e.data?.update;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t;if(n.sessionUpdate!=="usage"||n.source!=="gateway")return null;let s=n.usage;return !s||typeof s!="object"||Array.isArray(s)?null:n}function Pe(e,t,n){if(e!=null){if(!Array.isArray(e)||e.some(s=>typeof s!="string"))throw new Error(`${n} storedAt is not a list of date-time strings`);if(e.length!==t)throw new Error(`${n} storedAt has ${e.length} entries for ${t} events (one per event, index-aligned)`);return e}}var Nt=["trace-parsed","verifier","trace-stdout","trace-stderr","trace-atif","trajectory","agent-home"],Qe=["trace-stdout","trace-stderr","agent-home"],Qn=["missing_authorization","invalid_api_key","read_only_key","credential_service_unavailable","rate_limited","insufficient_credits","quota_exceeded","invalid_json","invalid_input","invalid_limit","invalid_status","invalid_visibility","invalid_cursor","invalid_after","invalid_format","invalid_ids","invalid_multipart","idempotency_key_reused","dataset_not_found","dataset_version_not_found","dataset_name_taken","dataset_in_use","dataset_not_owned","dataset_import_in_progress","upstream_not_watchable","no_active_version","version_not_ready","version_not_activatable","unknown_task_names","no_tasks","task_not_found","task_failed_to_build","upload_session_not_found","upload_offset_mismatch","upload_chunk_digest_mismatch","upload_incomplete","upload_archive_digest_mismatch","upload_session_failed","too_many_concurrent_upload_chunks","agent_not_found","agent_name_taken","agent_name_reserved","agent_invalid_name","agent_source_required","agent_source_conflict","agent_invalid_env","agent_too_large","agent_limit_reached","skill_not_found","skill_name_not_found","skill_ref_invalid","skill_unresolvable","skill_invalid","skill_in_use","skill_too_large","skill_limit_reached","too_many_concurrent_skill_uploads","secret_not_found","secret_ambiguous","secret_brokered_unsupported","secret_exists","secret_not_attached","agent_version_not_found","agent_version_unresolvable","agent_kwarg_unsupported","agent_config_unsupported","agent_config_key_refused","agent_preset_unsupported","provider_unsupported","job_not_found","job_not_terminal","no_failed_trials","trial_not_found","trial_not_settled","concurrent_update","regrade_source_ineligible","no_regradable_trials","invalid_rubric","analysis_already_running","analysis_not_found","analysis_not_terminal","check_not_found","check_not_terminal","no_checkable_tasks","too_many_concurrent_check_uploads","no_analyzable_trials","not_a_job_dir","invalid_trial","trial_too_large","upload_too_large","job_uploaded","job_already_uploaded","too_many_concurrent_job_uploads","job_import_not_found","import_not_found","import_too_large","too_many_concurrent_imports","invalid_archive","unpinned_git_ref","hub_package_not_found","hub_unreachable","package_not_retained","package_corrupt","package_missing","too_many_concurrent_package_downloads","org_not_found","org_slug_taken","org_forbidden","org_personal_immutable","org_last_owner","org_in_use","org_member_not_found","invite_not_found","invite_invalid","internal_error"];function Ut(e){return typeof e=="string"&&Qn.includes(e)}function ba(e,t,n){return e==="measured"&&t===0&&n.every(s=>(s??null)===null)}function Zn(e,t,n){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:t==="measured"?ba(t,e,n)?{lane:"unmeasured"}:{lane:"measured",usd:e}:t==="measured_provisional"?{lane:"floor",usd:e}:{lane:"unmeasured"}}function me(e){let t=e.agent_result;return Zn(t?.cost_usd,e.spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function Jt(e){let t=e.judge_result;return Zn(t?.cost_usd,e.judge_spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function $e(e,t){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:typeof t=="number"&&t>0?{lane:"floor",usd:e}:{lane:"measured",usd:e}}function Mt(e){let t=me(e);if(t.lane!=="unmeasured")return t;let n=e.usage;return n&&n.provisional&&typeof n.spent_usd=="number"?{lane:"floor",usd:n.spent_usd}:t}var es={stdoutFile:"stdout.log",harborCopies:[]},Ft={claude:{stdoutFile:"claude-code.txt",harborCopies:[{sandboxRoot:"/root/.claude",agentDir:"sessions"}]},codex:{stdoutFile:"codex.txt",harborCopies:[{sandboxRoot:"/root/.codex/sessions",agentDir:"sessions"}]},gemini:{stdoutFile:"gemini-cli.txt",harborCopies:[]},qwen:{stdoutFile:"qwen-code.txt",harborCopies:[{sandboxRoot:"/root/.qwen/projects",agentDir:"qwen-sessions"}]},kimi:{stdoutFile:"kimi-code.txt",harborCopies:[]},opencode:{stdoutFile:"opencode.txt",harborCopies:[{sandboxRoot:"/root/.local/share/opencode",agentDir:"opencode/xdg-data/opencode"}]},droid:{stdoutFile:"droid.txt",harborCopies:[]}},ka={"claude-code":"claude",codex:"codex","gemini-cli":"gemini","qwen-coder":"qwen","kimi-code":"kimi",opencode:"opencode"};function ts(e){let t=e in Ft?e:ka[e];return t===void 0?es:Ft[t]}var wa="/logs/agent",va="agent-home.json";function ns(e){let t=ss(wa,e);if(t!==null)return t;let n=e.replace(/^\/+/,"");if(n===va)return n;let s=/^(?:root|home\/[^/]+)\/(.+)$/.exec(n);return s!==null?s[1]:`sessions/${n}`}function ss(e,t){return t.startsWith(`${e}/`)?t.slice(e.length+1):null}function rs(e,t){let n=ns(t),s=t.replace(/^\/+/,"");e.has(n)&&(n=s);for(let r=2;e.has(n);r++)n=`${s}.${r}`;return e.add(n),n}function as(e,t){for(let n of e.harborCopies){let s=ss(n.sandboxRoot,t);if(s!==null)return `${n.agentDir}/${s}`}return null}function Sa(e,t){let n=new Set,s={};for(let r of Object.keys(t).sort()){s[`agent/${rs(n,r)}`]=t[r];let a=as(e,r);a!==null&&!n.has(a)&&(n.add(a),s[`agent/${a}`]=t[r]);}return Object.fromEntries(Object.keys(s).sort().map(r=>[r,s[r]]))}function Ze(e){return JSON.stringify(e,null,2)+`
13
- `}function et(e,t,n){return {trial_id:e.id,job_id:e.job_id,user_id:n,provider:e.sandbox_provider,gateway:{cost_usd:e.agent_result?.cost_usd??null,n_input_tokens:e.agent_result?.n_input_tokens??null,n_cache_tokens:e.agent_result?.n_cache_tokens??null,n_output_tokens:e.agent_result?.n_output_tokens??null,spend_source:e.spend_source,max_trial_spend_usd:e.max_trial_spend_usd,judge:e.judge_result?{cost_usd:e.judge_result.cost_usd,n_input_tokens:e.judge_result.n_input_tokens,n_cache_tokens:e.judge_result.n_cache_tokens,n_output_tokens:e.judge_result.n_output_tokens,spend_source:e.judge_spend_source??null}:null},regrade_lineage:{is_regrade:t?.is_regrade??false,source_jobs:t?.source_jobs??[],n_retries:e.n_retries,retries:e.retries}}}function Bt(e,t){return {job_id:e.id,user_id:t,provider:e.sandbox_provider,gateway:{cost_usd:e.stats.cost_usd??null,judge_cost_usd:e.stats.judge_cost_usd??null,n_unmeasured_trials:e.stats.n_unmeasured_trials??null,n_unmeasured_judge_trials:e.stats.n_unmeasured_judge_trials??null,n_input_tokens:e.stats.n_input_tokens??null,n_cache_tokens:e.stats.n_cache_tokens??null,n_output_tokens:e.stats.n_output_tokens??null,max_trial_spend_usd:e.max_trial_spend_usd,worst_case_spend_usd:e.worst_case_spend_usd},regrade_lineage:{is_regrade:e.is_regrade,source_jobs:e.source_jobs}}}function Aa(e){let t=e.agent_result;return t==null?t??null:me(e).lane==="measured"?t:{...t,cost_usd:null}}function qt(e){let{trial:t}=e,n={};n["config.json"]=Ze({trial_name:t.id,task:{name:t.task_name,source:t.source},agent:{name:t.agent_info.name,version:t.agent_info.version,model_name:t.agent_info.model_info.name,reasoning_effort:t.agent_info.reasoning_effort}}),n["result.json"]=Ze({trial_name:t.id,task_name:t.task_name,status:t.status,reward:t.reward,verifier_result:t.verifier_result,exception_info:t.exception_info,agent_result:Aa(t),started_at:t.started_at,finished_at:t.finished_at,environment_setup:t.environment_setup,agent_setup:t.agent_setup,agent_execution:t.agent_execution,verifier:t.verifier});let s=ts(t.agent_info.name);return e.atif!==null&&(n["agent/trajectory.json"]=e.atif),e.stdout!==null&&(n[`agent/${s.stdoutFile}`]=e.stdout),e.stderr!==null&&(n["agent/stderr.log"]=e.stderr),e.events.length>0&&(n["agent/trace-parsed.jsonl"]=e.events.map(r=>JSON.stringify(r)).join(`
12
+ `,"utf8"),{size:a}=await promises.stat(e.file.path),o=new URL(e.url),c=(o.protocol==="https:"?https.request:http.request)(o,{method:e.method,headers:{...e.headers,"Content-Type":`multipart/form-data; boundary=${t}`,"Content-Length":String(s.length+a+r.length)}}),i=e.timeoutMs??Vt,u,d,p=new Promise((b,S)=>{d=S;});p.catch(()=>{});let f=b=>Promise.race([b,p]),g,h=()=>{g!==void 0&&clearTimeout(g),g=setTimeout(()=>{u=new Ce(e.url,i),c.destroy(u),d(u);},i),g.unref();};c.on("error",b=>d(u??b)),h();let y,_=new Promise((b,S)=>{c.on("response",A=>{y=A,h(),b(A);}),c.on("error",A=>{y===void 0&&S(A);});});_.catch(()=>{});let v=fs$1.createReadStream(e.file.path);try{let b=(async()=>{await rs(c,s),h();let R=0;for await(let P of v)await rs(c,P),h(),R+=P.length,e.onBytes?.(R,a);await new Promise(P=>{c.end(r,P);});})();try{await f(b);}catch(R){if(v.destroy(),y===void 0)throw c.destroy(),u??R}let S=await f(_).catch(R=>{throw u??R}),A=(async()=>{let R=[];for await(let P of S)h(),R.push(P);return Buffer.concat(R)})(),N=await f(A).catch(R=>{throw u??R}),F=S.statusCode??0,re=new Headers;for(let[R,P]of Object.entries(S.headers))if(typeof P=="string")re.set(R,P);else if(Array.isArray(P))for(let na of P)re.append(R,na);let $=F!==204&&F!==205&&F!==304;return new Response($?N:null,{status:F,statusText:S.statusMessage??"",headers:re})}finally{g!==void 0&&clearTimeout(g);}}var Vt,Ce,Gt=Ve(()=>{Vt=6e5,Ce=class extends Error{name="EvolveUploadTimeoutError";constructor(t,n){super(`upload to ${t} timed out: no socket activity for ${Math.round(n/1e3)}s`);}};});var tt={};Tt(tt,{MAX_INLINE_ARCHIVE_BYTES:()=>hs,crc32Fallback:()=>gs,extractTarGz:()=>Ka,shouldStore:()=>fs,tarGzTopLevelName:()=>Wa,tarGzipDirectory:()=>Ga,tarGzipDirectoryToFile:()=>ms});async function Ma(e){let t=[],n=async s=>{let r=s===""?e:path.join(e,s),a=await promises.readdir(r,{withFileTypes:true});a.sort((o,l)=>o.name<l.name?-1:o.name>l.name?1:0);for(let o of a){if(Ja.has(o.name))continue;let l=s===""?o.name:`${s}/${o.name}`,c=path.join(r,o.name),i=await promises.lstat(c);i.isSymbolicLink()||(i.isDirectory()?await n(l):i.isFile()&&t.push({rel:l,abs:c,mode:i.mode&73?493:420,size:i.size}));}};return await n(""),t.sort((s,r)=>s.rel<r.rel?-1:s.rel>r.rel?1:0)}async function fs(e,t){if(t<Fa)return false;let n=await promises.open(e,"r"),s;try{let a=Buffer.allocUnsafe(is),{bytesRead:o}=await n.read(a,0,is,0);s=a.subarray(0,o);}finally{await n.close();}return s.length===0?false:Ta.deflateRawSync(s,{level:1}).length*20>=s.length*19}function gs(e,t=0){let n=~t;for(let s=0;s<e.length;s++)n=za[(n^e[s])&255]^n>>>8;return ~n>>>0}async function Va(e){let t=Symbol("pending"),n=await Promise.race([e,Promise.resolve(t)]);return n===t?null:n}async function ms(e,t){let n=await Ma(e),s=tarStream.pack(),r=fs$1.createWriteStream(t);r.on("error",()=>{}),s.on("error",()=>{});let a=new Wt(r),o=s[Symbol.asyncIterator](),l=null,c=()=>l??=o.next();try{for(let{rel:i,abs:u,mode:d,size:p}of n){await a.setStored(await fs(u,p));let f=s.entry({name:i,size:p,mode:d,mtime:new Date(0),uid:0,gid:0,uname:"",gname:"",type:"file"}),g=promises$1.pipeline(fs$1.createReadStream(u),f),h=!1,y=null;for(g.then(()=>{},()=>{}).then(()=>{h=!0,y?.(ls);});;){if(!h){let v=await new Promise((b,S)=>{y=b,c().then(b,S);});if(y=null,v===ls)continue;if(l=null,v.done)break;await a.write(v.value);continue}await new Promise(v=>setImmediate(v));let _=await Va(c());if(_===null||(l=null,_.done))break;await a.write(_.value);}await g;}for(s.finalize();;){let i=await c();if(l=null,i.done)break;await a.write(i.value);}await a.close(),r.end(),await promises$1.finished(r);}catch(i){throw l?.catch(()=>{}),s.destroy(),r.destroy(),i}}async function Ga(e,t=hs){let n=await promises.mkdtemp(path.join(os.tmpdir(),"evolve-tar-"));try{let s=path.join(n,"archive.tar.gz");await ms(e,s);let{size:r}=await promises.stat(s);if(r>t)throw new Error(`directory ${e} tars to ${r} bytes compressed \u2014 over the ${t}-byte cap for in-memory archives. Only the sandbox skill mount uses this path; a skill folder this large is not mountable.`);return await promises.readFile(s)}finally{await promises.rm(n,{recursive:true,force:true});}}async function Ka(e,t,n){let s=tarStream.extract(),r=[],a=(async()=>{for await(let o of s){let l=o.header.name,c=l.split("/").filter(u=>u!==""&&u!==".");if(l.startsWith("/")||l.includes("\\")||c.length===0||c.some(u=>u===".."))throw new Error(`refusing to extract "${l}": the path escapes the target directory`);if(c[0]!==n)throw new Error(`refusing to extract "${l}": entry outside ${n}/`);if(o.header.type==="directory"){await promises.mkdir(path.join(t,...c),{recursive:true}),o.resume();continue}if(o.header.type!=="file")throw new Error(`refusing to extract "${l}": unsupported entry type "${o.header.type}"`);let i=path.join(t,...c);await promises.mkdir(path.dirname(i),{recursive:true}),await promises$1.pipeline(o,fs$1.createWriteStream(i)),r.push(c.join("/"));}})();try{await Promise.all([promises$1.pipeline(fs$1.createReadStream(e),Ta.createGunzip(),s),a]);}catch(o){throw s.destroy(),o}return r}async function Wa(e){let t=tarStream.extract(),n=null,s=(async()=>{for await(let r of t){let a=r.header.name,o=a.split("/").filter(l=>l!==""&&l!==".");if(a.startsWith("/")||a.includes("\\")||o.length===0||o.some(l=>l===".."))throw new Error(`refusing to extract "${a}": the path escapes the target directory`);if(n===null)n=o[0];else if(o[0]!==n)throw new Error(`refusing to extract "${a}": the archive holds more than one top-level directory (${n}/)`);r.resume();}})();try{await Promise.all([promises$1.pipeline(fs$1.createReadStream(e),Ta.createGunzip(),t),s]);}catch(r){throw t.destroy(),r}if(n===null)throw new Error("refusing to extract: the archive holds no entries");return n}var Ja,Fa,is,Ba,qa,Kt,za,Ha,Wt,ls,hs,nt=Ve(()=>{Ja=new Set([".git",".DS_Store",".venv"]);Fa=64*1024,is=128*1024,Ba=65535,qa=1024*1024,Kt=32*1024;za=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let s=0;s<8;s++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n;}return e})(),Ha=Ta__default.default.crc32??gs,Wt=class e{constructor(t){this.sink=t;}static HEADER=Buffer.from([31,139,8,0,0,0,0,0,0,255]);static FINAL_BLOCK=Buffer.from([1,0,0,255,255]);crc=0;plainLength=0;held=[];heldBytes=0;window=null;stored=false;started=false;async setStored(t){t!==this.stored&&(await this.drainHeld(true),this.stored=t);}async write(t){this.started||(this.started=true,await this.out(e.HEADER)),this.held.push(t),this.heldBytes+=t.length,await this.drainHeld(false);}async close(){this.started||(this.started=true,await this.out(e.HEADER)),await this.drainHeld(true),await this.out(e.FINAL_BLOCK);let t=Buffer.allocUnsafe(8);t.writeUInt32LE(this.crc>>>0,0),t.writeUInt32LE(this.plainLength%4294967296,4),await this.out(t);}async drainHeld(t){let n=this.stored?Ba:qa;for(;this.heldBytes>=n||t&&this.heldBytes>0;){let s=this.held.length===1?this.held[0]:Buffer.concat(this.held,this.heldBytes),r=Math.min(n,s.length),a=s.subarray(r);this.held=a.length>0?[a]:[],this.heldBytes=a.length,await this.emitBlock(s.subarray(0,r));}}async emitBlock(t){if(this.crc=Ha(t,this.crc),this.plainLength+=t.length,this.stored){let n=Buffer.allocUnsafe(5+t.length);n[0]=0,n.writeUInt16LE(t.length,1),n.writeUInt16LE(t.length^65535,3),t.copy(n,5),await this.out(n);}else await this.out(Ta.deflateRawSync(t,{level:9,finishFlush:Ta.constants.Z_SYNC_FLUSH,...this.window?{dictionary:this.window}:{}}));this.window=t.length>=Kt?Buffer.from(t.subarray(t.length-Kt)):this.window?Buffer.concat([this.window,t]).subarray(-Kt):Buffer.from(t);}out(t){return new Promise((n,s)=>{this.sink.write(t,r=>r==null?n():s(r));})}},ls=Symbol("feed settled");hs=256*1024*1024;});var pe="EVOLVE_API_KEY";var fe=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai";$t();Rt();var Ke=["QUEUED","RUNNING","SCORING","SCORED","SCORING_ERROR","INFRASTRUCTURE_ERROR","BUDGET","INDETERMINATE","CANCELLED"],We=["e2b","daytona","modal"],Ye=["my","shared"],Re=["queued","running","completed","failed"],Ee=["queued","running","completed"];function ge(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.provisional!="boolean")return null;let n=s=>typeof s=="number"&&Number.isFinite(s)?s:null;return {provisional:t.provisional,spent_usd:n(t.spent_usd),input_tokens:n(t.input_tokens),cached_input_tokens:n(t.cached_input_tokens),cache_write_tokens:n(t.cache_write_tokens),output_tokens:n(t.output_tokens),as_of:typeof t.as_of=="string"?t.as_of:null}}function Ct(e){let t=e.stats?.evals??{},n=[];for(let s of Object.keys(t).sort()){let r=t[s]?.pass_at_k??{},a=[];for(let o of Object.keys(r)){let l=Number(o),c=r[o];!Number.isFinite(l)||typeof c!="number"||!Number.isFinite(c)||a.push({k:l,value:c});}a.length!==0&&(a.sort((o,l)=>o.k-l.k),n.push({evals_key:s,points:a}));}return n}var Ot=["dataset_flag","job_dataset_record","task_hash","none"],Dt=["hash_mismatch","task_not_in_dataset","no_dataset_named","dataset_ambiguous","no_hash_match","no_task_digest"],jt=1e9;function Ie(e){let t=e.data?.update;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t;if(n.sessionUpdate!=="usage"||n.source!=="gateway")return null;let s=n.usage;return !s||typeof s!="object"||Array.isArray(s)?null:n}function Pe(e,t,n){if(e!=null){if(!Array.isArray(e)||e.some(s=>typeof s!="string"))throw new Error(`${n} storedAt is not a list of date-time strings`);if(e.length!==t)throw new Error(`${n} storedAt has ${e.length} entries for ${t} events (one per event, index-aligned)`);return e}}var Lt=["trace-parsed","verifier","trace-stdout","trace-stderr","trace-atif","trajectory","agent-home"],Xe=["trace-stdout","trace-stderr","agent-home"],Yn=["missing_authorization","invalid_api_key","read_only_key","credential_service_unavailable","rate_limited","insufficient_credits","quota_exceeded","invalid_json","invalid_input","invalid_limit","invalid_status","invalid_visibility","invalid_cursor","invalid_after","invalid_format","invalid_ids","invalid_multipart","idempotency_key_reused","dataset_not_found","dataset_version_not_found","dataset_name_taken","dataset_in_use","dataset_not_owned","dataset_import_in_progress","upstream_not_watchable","no_active_version","version_not_ready","version_not_activatable","unknown_task_names","no_tasks","task_not_found","task_failed_to_build","upload_session_not_found","upload_offset_mismatch","upload_chunk_digest_mismatch","upload_incomplete","upload_archive_digest_mismatch","upload_session_failed","too_many_concurrent_upload_chunks","agent_not_found","agent_name_taken","agent_name_reserved","agent_invalid_name","agent_source_required","agent_source_conflict","agent_invalid_env","agent_too_large","agent_limit_reached","skill_not_found","skill_name_not_found","skill_ref_invalid","skill_unresolvable","skill_invalid","skill_in_use","skill_too_large","skill_limit_reached","too_many_concurrent_skill_uploads","secret_not_found","secret_ambiguous","secret_brokered_unsupported","secret_exists","secret_not_attached","agent_version_not_found","agent_version_unresolvable","agent_kwarg_unsupported","agent_config_unsupported","agent_config_key_refused","agent_preset_unsupported","provider_unsupported","job_not_found","job_not_terminal","no_failed_trials","trial_not_found","trial_not_settled","concurrent_update","regrade_source_ineligible","no_regradable_trials","invalid_rubric","analysis_already_running","analysis_not_found","analysis_not_terminal","check_not_found","check_not_terminal","no_checkable_tasks","too_many_concurrent_check_uploads","no_analyzable_trials","not_a_job_dir","invalid_trial","trial_too_large","upload_too_large","job_uploaded","job_already_uploaded","too_many_concurrent_job_uploads","job_import_not_found","import_not_found","import_too_large","too_many_concurrent_imports","invalid_archive","unpinned_git_ref","hub_package_not_found","hub_unreachable","package_not_retained","package_corrupt","package_missing","too_many_concurrent_package_downloads","org_not_found","org_slug_taken","org_forbidden","org_personal_immutable","org_last_owner","org_in_use","org_member_not_found","invite_not_found","invite_invalid","internal_error"];function Nt(e){return typeof e=="string"&&Yn.includes(e)}function ga(e,t,n){return e==="measured"&&t===0&&n.every(s=>(s??null)===null)}function Xn(e,t,n){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:t==="measured"?ga(t,e,n)?{lane:"unmeasured"}:{lane:"measured",usd:e}:t==="measured_provisional"?{lane:"floor",usd:e}:{lane:"unmeasured"}}function me(e){let t=e.agent_result;return Xn(t?.cost_usd,e.spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function Ut(e){let t=e.judge_result;return Xn(t?.cost_usd,e.judge_spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function $e(e,t){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:typeof t=="number"&&t>0?{lane:"floor",usd:e}:{lane:"measured",usd:e}}function Jt(e){let t=me(e);if(t.lane!=="unmeasured")return t;let n=e.usage;return n&&n.provisional&&typeof n.spent_usd=="number"?{lane:"floor",usd:n.spent_usd}:t}var Qn={stdoutFile:"stdout.log",harborCopies:[]},Mt={claude:{stdoutFile:"claude-code.txt",harborCopies:[{sandboxRoot:"/root/.claude",agentDir:"sessions"}]},codex:{stdoutFile:"codex.txt",harborCopies:[{sandboxRoot:"/root/.codex/sessions",agentDir:"sessions"}]},gemini:{stdoutFile:"gemini-cli.txt",harborCopies:[]},qwen:{stdoutFile:"qwen-code.txt",harborCopies:[{sandboxRoot:"/root/.qwen/projects",agentDir:"qwen-sessions"}]},kimi:{stdoutFile:"kimi-code.txt",harborCopies:[]},opencode:{stdoutFile:"opencode.txt",harborCopies:[{sandboxRoot:"/root/.local/share/opencode",agentDir:"opencode/xdg-data/opencode"}]},droid:{stdoutFile:"droid.txt",harborCopies:[]}},ma={"claude-code":"claude",codex:"codex","gemini-cli":"gemini","qwen-coder":"qwen","kimi-code":"kimi",opencode:"opencode"};function Zn(e){let t=e in Mt?e:ma[e];return t===void 0?Qn:Mt[t]}var ha="/logs/agent",_a="agent-home.json";function es(e){let t=ts(ha,e);if(t!==null)return t;let n=e.replace(/^\/+/,"");if(n===_a)return n;let s=/^(?:root|home\/[^/]+)\/(.+)$/.exec(n);return s!==null?s[1]:`sessions/${n}`}function ts(e,t){return t.startsWith(`${e}/`)?t.slice(e.length+1):null}function ns(e,t){let n=es(t),s=t.replace(/^\/+/,"");e.has(n)&&(n=s);for(let r=2;e.has(n);r++)n=`${s}.${r}`;return e.add(n),n}function ss(e,t){for(let n of e.harborCopies){let s=ts(n.sandboxRoot,t);if(s!==null)return `${n.agentDir}/${s}`}return null}function ya(e,t){let n=new Set,s={};for(let r of Object.keys(t).sort()){s[`agent/${ns(n,r)}`]=t[r];let a=ss(e,r);a!==null&&!n.has(a)&&(n.add(a),s[`agent/${a}`]=t[r]);}return Object.fromEntries(Object.keys(s).sort().map(r=>[r,s[r]]))}function Qe(e){return JSON.stringify(e,null,2)+`
13
+ `}function Ze(e,t,n){return {trial_id:e.id,job_id:e.job_id,user_id:n,provider:e.sandbox_provider,gateway:{cost_usd:e.agent_result?.cost_usd??null,n_input_tokens:e.agent_result?.n_input_tokens??null,n_cache_tokens:e.agent_result?.n_cache_tokens??null,n_output_tokens:e.agent_result?.n_output_tokens??null,spend_source:e.spend_source,max_trial_spend_usd:e.max_trial_spend_usd,judge:e.judge_result?{cost_usd:e.judge_result.cost_usd,n_input_tokens:e.judge_result.n_input_tokens,n_cache_tokens:e.judge_result.n_cache_tokens,n_output_tokens:e.judge_result.n_output_tokens,spend_source:e.judge_spend_source??null}:null},regrade_lineage:{is_regrade:t?.is_regrade??false,source_jobs:t?.source_jobs??[],n_retries:e.n_retries,retries:e.retries}}}function Ft(e,t){return {job_id:e.id,user_id:t,provider:e.sandbox_provider,gateway:{cost_usd:e.stats.cost_usd??null,judge_cost_usd:e.stats.judge_cost_usd??null,n_unmeasured_trials:e.stats.n_unmeasured_trials??null,n_unmeasured_judge_trials:e.stats.n_unmeasured_judge_trials??null,n_input_tokens:e.stats.n_input_tokens??null,n_cache_tokens:e.stats.n_cache_tokens??null,n_output_tokens:e.stats.n_output_tokens??null,max_trial_spend_usd:e.max_trial_spend_usd,worst_case_spend_usd:e.worst_case_spend_usd},regrade_lineage:{is_regrade:e.is_regrade,source_jobs:e.source_jobs}}}function ba(e){let t=e.agent_result;return t==null?t??null:me(e).lane==="measured"?t:{...t,cost_usd:null}}function Bt(e){let{trial:t}=e,n={};n["config.json"]=Qe({trial_name:t.id,task:{name:t.task_name,source:t.source},agent:{name:t.agent_info.name,version:t.agent_info.version,model_name:t.agent_info.model_info.name,reasoning_effort:t.agent_info.reasoning_effort}}),n["result.json"]=Qe({trial_name:t.id,task_name:t.task_name,status:t.status,reward:t.reward,verifier_result:t.verifier_result,exception_info:t.exception_info,agent_result:ba(t),started_at:t.started_at,finished_at:t.finished_at,environment_setup:t.environment_setup,agent_setup:t.agent_setup,agent_execution:t.agent_execution,verifier:t.verifier});let s=Zn(t.agent_info.name);return e.atif!==null&&(n["agent/trajectory.json"]=e.atif),e.stdout!==null&&(n[`agent/${s.stdoutFile}`]=e.stdout),e.stderr!==null&&(n["agent/stderr.log"]=e.stderr),e.events.length>0&&(n["agent/trace-parsed.jsonl"]=e.events.map(r=>JSON.stringify(r)).join(`
14
14
  `)+`
15
- `),e.home!==null&&Object.assign(n,Sa(s,e.home)),e.verifierLog!==null&&(n["verifier/test-stdout.txt"]=e.verifierLog),t.verifier_result?.rewards&&(n["verifier/reward.json"]=Ze(t.verifier_result.rewards)),t.exception_info&&(n["exception.txt"]=`${t.exception_info.exception_type}: ${t.exception_info.exception_message}
16
- `),n["evolve.json"]=Ze(et(t,e.job,e.userId)),n}function zt(e,t){return {analysis_id:e.id,analyzed_trial_id:e.trial_id,job_id:e.job_id,task_name:e.task_name,user_id:t,status:e.status,model_name:e.model_name,gateway:{cost_usd:e.estimated_cost_usd,n_input_tokens:e.usage?.input_tokens??null,n_cache_tokens:e.usage?.cached_input_tokens??null,n_output_tokens:e.usage?.output_tokens??null}}}function Ht(e,t,n){return {task_check_id:e.id,check_id:t.id,dataset:t.source.dataset,task_name:e.task_name,user_id:n,provider:t.sandbox_provider,status:e.status,model_name:t.model_name,gateway:{cost_usd:e.cost_usd}}}function Vt(e,t){return {check_id:e.id,user_id:t,source:e.source,provider:e.sandbox_provider,status:e.status,model_name:e.model_name,gateway:{cost_usd:e.cost_usd}}}Kt();var x=class extends Error{status;code;param;details;retryAfterSec;requestId;constructor(t,n,s,r){super(s),this.name="EvolveApiError",this.status=t,this.code=n,r?.param!==void 0&&(this.param=r.param),r?.details!==void 0&&(this.details=r.details),r?.retryAfterSec!==void 0&&(this.retryAfterSec=r.retryAfterSec),r?.requestId!==void 0&&(this.requestId=r.requestId);}isKnownCode(){return Ut(this.code)}};async function ct(e){let t=await e.text().catch(()=>""),n=e.headers?.get?.("x-request-id")??void 0,s=Ae(t,e);try{let r=JSON.parse(t);if(r?.error&&typeof r.error=="object"){let a=typeof r.error.code=="string"?r.error.code:"unknown_error",o=typeof r.error.message=="string"?r.error.message:e.statusText;throw new x(e.status,a,o,{param:typeof r.error.param=="string"?r.error.param:void 0,details:r.error.details&&typeof r.error.details=="object"?r.error.details:void 0,retryAfterSec:s,requestId:typeof r.error.requestId=="string"?r.error.requestId:n})}if(typeof r?.error=="string")throw new x(e.status,"unknown_error",r.error,{retryAfterSec:s,requestId:n})}catch(r){if(r instanceof x)throw r}throw new x(e.status,"unknown_error",t||e.statusText,{retryAfterSec:s,requestId:n})}var en=class extends Error{dataset;constructor(t){super(`Dataset "${t}" has no active version`),this.name="NoActiveVersionError",this.dataset=t;}},oe=class extends Error{name="ImportSettleError";code;importId;dataset;version;state;constructor(t,n,s){super(n),this.code=t,this.importId=s.importId,this.dataset=s.dataset,this.version=s.version,this.state=s.state;}},uo=1e3,De=3e4,co=new Set(["COMPLETED","CANCELLED","FAILED"]),po=new Set(["job.completed","job.cancelled","job.failed"]),je=2e3,fo=30*6e4;function W(e,t){let n=t?.apiKey||process.env[pe];if(!n)throw new Error(`${e}() requires an API key. Set ${pe} or pass { apiKey } in config.`);let s=(t?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||fe).replace(/\/$/,"");return {apiKey:n,baseUrl:s}}async function w(e,t,n){let s=await fetch(`${e.baseUrl}${t}`,{...n,headers:{Authorization:`Bearer ${e.apiKey}`,...n?.headers}});return s.ok||await ct(s),s}function Qt(e){let t=e.indexOf("@");if(t===-1)return {name:e.trim()};let n=e.slice(0,t).trim(),s=e.slice(t+1).trim();if(!n||!s)throw new Error(`Invalid dataset ref "${e}": expected "name" or "name@version"`);return {name:n,version:s}}function rn(e){return {name:e.name,version:e.version}}function ws(e){let t=e.kwargs,n=Array.isArray(e.skills)?e.skills.filter(a=>typeof a=="string"):[],s=Array.isArray(e.skill_locks)?e.skill_locks:null,r=s?s.flatMap(a=>{if(!a||typeof a!="object")return [];let o=a;return typeof o.name!="string"||typeof o.digest!="string"?[]:[{name:o.name,source:typeof o.source=="string"?o.source:"",digest:o.digest,git_url:typeof o.git_url=="string"?o.git_url:null,git_commit_id:typeof o.git_commit_id=="string"?o.git_commit_id:null}]}):null;return {name:e.name,model_name:e.model_name,version:e.version??null,reasoning_effort:e.reasoning_effort??null,kwargs:t&&typeof t=="object"&&!Array.isArray(t)?t:null,preset:typeof e.preset=="string"?e.preset:null,skills:n,skill_locks:r}}function go(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.name!="string")return null;let n=Array.isArray(t.authors)?t.authors.flatMap(s=>{if(!s||typeof s!="object"||Array.isArray(s))return [];let r=s;return typeof r.name!="string"?[]:[{name:r.name,email:typeof r.email=="string"?r.email:null}]}):[];return {name:t.name,version:typeof t.version=="string"?t.version:null,description:typeof t.description=="string"?t.description:"",authors:n,keywords:Array.isArray(t.keywords)?t.keywords.filter(s=>typeof s=="string"):[],task_count:typeof t.task_count=="number"?t.task_count:null}}function mo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=r=>typeof t[r]=="string"?t[r]:null;switch(n("kind")??(n("commit")!==null?"git":null)){case "git":{let r=n("ref"),a=n("commit");return r===null||a===null?null:{kind:"git",git_url:n("git_url"),ref:r,commit:a,path:n("path")}}case "archive":{let r=n("digest");return r===null?null:{kind:"archive",digest:r}}case "archive_url":{let r=n("archive_url"),a=n("digest");return r===null||a===null?null:{kind:"archive_url",archive_url:r,digest:a}}case "hub_package":{let r=n("hub_package"),a=n("digest");return r===null||a===null?null:{kind:"hub_package",hub_package:r,digest:a}}default:return null}}function _e(e){return {version:e.version,state:e.state,created_at:e.created_at,task_count:e.task_count??0,n_failed_tasks:typeof e.n_failed_tasks=="number"?e.n_failed_tasks:0,manifest:go(e.manifest),source:mo(e.source)}}function vs(e){return {code:e.code??"",step:e.step??"",message:e.message??"",excerpt:e.excerpt??null}}function ho(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>({task_name:t.task_name??"",failure:vs(t.failure??{})})):[]}function _o(e){return {task_name:e.task_name,agent_timeout_sec:e.agent_timeout_sec,verifier_timeout_sec:e.verifier_timeout_sec,gpus:typeof e.gpus=="number"&&e.gpus>0?e.gpus:0,gpu_types:Array.isArray(e.gpu_types)&&e.gpu_types.length>0?e.gpu_types.map(String):null,providers:e.providers,notes:Array.isArray(e.notes)?e.notes:[]}}function yo(e){return {action:e.action,type:e.type,job_id:e.job_id}}function bo(e){let t=e&&typeof e=="object"?e:{};return {max_retries:typeof t.max_retries=="number"?t.max_retries:0,include_exceptions:Array.isArray(t.include_exceptions)?t.include_exceptions:null,exclude_exceptions:Array.isArray(t.exclude_exceptions)?t.exclude_exceptions:[],wait_multiplier:typeof t.wait_multiplier=="number"?t.wait_multiplier:1,min_wait_sec:typeof t.min_wait_sec=="number"?t.min_wait_sec:1,max_wait_sec:typeof t.max_wait_sec=="number"?t.max_wait_sec:60}}function ko(e){return {attempt_number:e.attempt_number,exception_info:e.exception_info??{exception_type:"InfrastructureError",exception_message:""},cost_usd:e.cost_usd??null,started_at:e.started_at??null,settled_at:e.settled_at??null}}function rt(e){return typeof e=="number"?e:null}function wo(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>{let n=typeof t.n_tasks_ran=="number"?t.n_tasks_ran:0;return {dataset:rn(t.dataset??{}),n_tasks_ran:n,n_tasks_selected:typeof t.n_tasks_selected=="number"?t.n_tasks_selected:n,n_tasks_failed_to_build:typeof t.n_tasks_failed_to_build=="number"?t.n_tasks_failed_to_build:0,failed_task_names:Array.isArray(t.failed_task_names)?t.failed_task_names.map(String):[],note:t.note??""}}):[]}function vo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.uploaded_at!="string")return null;let n=t.reported_totals,s=a=>typeof a=="number"&&Number.isFinite(a)?a:null,r=n&&typeof n=="object"&&!Array.isArray(n)&&Number.isInteger(n.n_trials_reporting)?{cost_usd:s(n.cost_usd),n_input_tokens:s(n.n_input_tokens),n_cache_tokens:s(n.n_cache_tokens),n_output_tokens:s(n.n_output_tokens),n_trials_reporting:n.n_trials_reporting}:null;return {original_job_id:typeof t.original_job_id=="string"?t.original_job_id:null,original_job_name:typeof t.original_job_name=="string"?t.original_job_name:null,uploaded_at:t.uploaded_at,reported_totals:r,task_links:As(t.task_links)}}var Ss=e=>typeof e=="string"&&Dt.includes(e),tn=e=>typeof e=="string"&&jt.includes(e),nn=e=>Array.isArray(e)&&e.every(t=>typeof t=="string")?[...e]:null;function As(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(!n||typeof n!="object"||Array.isArray(n))return null;let s=n;if(typeof s.task_name!="string"||!Ss(s.linked_by)||![s.n_trials,s.n_linked,s.n_unlinked].every(c=>Number.isInteger(c)&&c>=0))return null;let a=nn(s.datasets),o=nn(s.candidates);if(a===null||o===null||!s.link_reasons||typeof s.link_reasons!="object"||Array.isArray(s.link_reasons))return null;let l={};for(let[c,i]of Object.entries(s.link_reasons)){if(!tn(c)||!Number.isInteger(i))return null;l[c]=i;}t.push({task_name:s.task_name,n_trials:s.n_trials,n_linked:s.n_linked,n_unlinked:s.n_unlinked,linked_by:s.linked_by,datasets:a,link_reasons:l,candidates:o});}return t}function So(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Ss(t.linked_by)||t.link_reason!==null&&t.link_reason!==void 0&&!tn(t.link_reason))return null;let n=t.candidates===void 0?[]:nn(t.candidates);return n===null?null:{linked_by:t.linked_by,link_reason:tn(t.link_reason)?t.link_reason:null,dataset:typeof t.dataset=="string"?t.dataset:null,version:typeof t.version=="string"?t.version:null,task_digest:typeof t.task_digest=="string"?t.task_digest:null,candidates:n}}function H(e){let t=e.trials??{};return {id:e.id,job_name:e.job_name,status:e.status,datasets:(e.datasets??[]).map(rn),agents:(e.agents??[]).map(ws),n_attempts:e.n_attempts,n_concurrent_trials:e.n_concurrent_trials,max_trial_spend_usd:e.max_trial_spend_usd,worst_case_spend_usd:e.worst_case_spend_usd,retry:bo(e.retry),analyze:e.analyze&&typeof e.analyze=="object"&&!Array.isArray(e.analyze)?e.analyze:null,timeout_multiplier:typeof e.timeout_multiplier=="number"?e.timeout_multiplier:1,agent_timeout_multiplier:rt(e.agent_timeout_multiplier),verifier_timeout_multiplier:rt(e.verifier_timeout_multiplier),agent_setup_timeout_multiplier:rt(e.agent_setup_timeout_multiplier),environment_build_timeout_multiplier:rt(e.environment_build_timeout_multiplier),sandbox_provider:e.sandbox_provider??null,counts:e.counts,build_exclusions:wo(e.build_exclusions),n_total_trials:e.n_total_trials??0,trials:{total:t.total??0,byStatus:t.byStatus??{}},stats:e.stats??{},failure:e.failure??null,source_jobs:(e.source_jobs??[]).map(yo),is_regrade:e.is_regrade===true,upload:vo(e.upload),idempotent_replay:e.idempotent_replay===true,started_at:e.started_at,updated_at:e.updated_at,finished_at:e.finished_at??null}}function O(e,t){let n=e??{};return {items:Array.isArray(n.items)?n.items.map(t):[],nextCursor:n.nextCursor??null,hasMore:n.hasMore===true}}function J(e,t){let n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.cursor&&n.set("cursor",e.cursor);for(let[r,a]of Object.entries(t??{}))a!==void 0&&n.set(r,a);let s=n.toString();return s?`?${s}`:""}function X(e){if(!e||typeof e!="object")return null;let t=e;return {started_at:t.started_at??null,finished_at:t.finished_at??null}}function Ao(e){let t=e.model_info??{};return {name:e.name,version:e.version??null,model_info:{name:t.name,provider:t.provider??null},reasoning_effort:e.reasoning_effort??null}}function it(e){return !e||typeof e!="object"||Array.isArray(e)?null:{...e,usage:ge(e.usage)}}function xo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let{from:t,to:n,reason:s}=e;return typeof t!="string"||typeof n!="string"||typeof s!="string"?null:{from:t,to:n,reason:s}}function sn(e){return {id:e.id,job_id:e.job_id,task_name:e.task_name,source:e.source,agent_info:Ao(e.agent_info||{}),attempt:e.attempt,status:e.status,reward:e.reward??null,verifier_result:e.verifier_result??null,exception_info:e.exception_info??null,agent_result:e.agent_result??null,judge_result:e.judge_result??null,analysis:it(e.analysis),environment_setup:X(e.environment_setup),agent_setup:X(e.agent_setup),agent_execution:X(e.agent_execution),verifier:X(e.verifier),queue_wait:X(e.queue_wait),harness_bundle:X(e.harness_bundle),image_prepare:X(e.image_prepare),shared_verify_setup:X(e.shared_verify_setup),harness_bundle_cache_hit:typeof e.harness_bundle_cache_hit=="boolean"?e.harness_bundle_cache_hit:null,step_results:e.step_results??null,spend_source:e.spend_source??null,judge_spend_source:e.judge_spend_source??null,live_spent_usd:e.live_spent_usd??null,live_spend_at:e.live_spend_at??null,usage:ge(e.usage),max_trial_spend_usd:e.max_trial_spend_usd??null,sandbox_provider:e.sandbox_provider??null,sandbox_provider_degrade:xo(e.sandbox_provider_degrade),gpu_cost:e.gpu_cost&&typeof e.gpu_cost=="object"&&!Array.isArray(e.gpu_cost)?e.gpu_cost:null,sandbox_id:e.sandbox_id??null,verifier_sandbox_id:e.verifier_sandbox_id??null,verifier_environment_mode:e.verifier_environment_mode??null,attempt_phase:e.attempt_phase??null,n_retries:e.n_retries??0,retries:Array.isArray(e.retries)?e.retries.map(ko):[],session_ref:e.session_ref??null,upload:To(e.upload),started_at:e.started_at??null,finished_at:e.finished_at??null}}function To(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.original_trial_name!="string"||typeof t.original_task_name!="string")return null;let n=t.reported_agent_result,s=r=>typeof r=="number"&&Number.isFinite(r)?r:null;return {original_trial_id:typeof t.original_trial_id=="string"?t.original_trial_id:null,original_trial_name:t.original_trial_name,original_task_name:t.original_task_name,reported_agent_result:n&&typeof n=="object"&&!Array.isArray(n)?{n_input_tokens:s(n.n_input_tokens),n_cache_tokens:s(n.n_cache_tokens),n_output_tokens:s(n.n_output_tokens),cost_usd:s(n.cost_usd)}:null,link:So(t.link)}}function at(e){return {name:e.name,source:e.source,run_command:e.run_command,env:e.env??{},created_at:e.created_at,updated_at:e.updated_at}}function ye(e){let t={id:e.id,status:e.status,name:e.name,version:e.version,failure:e.failure??null,warnings:e.warnings??[],progress:e.progress??null};return typeof e.receiving=="boolean"&&(t.receiving=e.receiving),typeof e.task_count=="number"&&(t.task_count=e.task_count),typeof e.created_at=="string"&&(t.created_at=e.created_at),typeof e.updated_at=="string"&&(t.updated_at=e.updated_at),t}function Oe(e){let t={id:e.id,status:e.status,receiving:e.receiving===true,source:e.source??null,dataset:e.dataset??null,job_id:e.job_id??null,n_trials_uploaded:e.n_trials_uploaded??null,n_trials_skipped:e.n_trials_skipped??null,skipped_trials:Array.isArray(e.skipped_trials)?e.skipped_trials:null,task_links:As(e.task_links),failure:e.failure??null,progress:e.progress??null};return typeof e.created_at=="string"&&(t.created_at=e.created_at),typeof e.updated_at=="string"&&(t.updated_at=e.updated_at),t}function xs(e){let t=e??{};return {scored:t.scored??0,total:t.total??0}}function Ro(e){return {id:e.id,datasets:(e.datasets??[]).map(rn),status:e.status,mean_reward:e.mean_reward??null,coverage:xs(e.coverage),cost_usd:e.cost_usd??0,agents:(e.agents||[]).map(ws),started_at:e.started_at}}function Eo(e){return {job_id:e.job_id,status:e.status,mean_reward:e.mean_reward??null,coverage:xs(e.coverage)}}function Io(e){return {task_name:e.task_name,disagreement:e.disagreement===true,cells:(e.cells||[]).map(Eo)}}function Ts(e){return {seq:e.seq,type:e.type,data:e.data??{}}}function Rs(e){return (Array.isArray(e)?e:[]).map((n,s)=>({seq:Lt+s,type:"usage",data:n&&typeof n=="object"&&!Array.isArray(n)?n:{}}))}function Po(e){return {trial_id:e.trial_id,task_name:e.task_name??null,match_count:e.match_count,events:(e.events||[]).map(Ts)}}function $o(e){return e?e.suffix!==void 0?`bytes=-${e.suffix}`:e.start===void 0?null:`bytes=${e.start}-${e.end??""}`:null}function Q(e){if(e?.aborted)throw e.reason instanceof Error?e.reason:new Error("Watch aborted")}function bs(e,t){return t?.aborted?true:e?.name==="AbortError"}function L(e,t){return new Promise((n,s)=>{let r=setTimeout(()=>{t?.removeEventListener("abort",a),n();},e),a=()=>{clearTimeout(r),s(t?.reason instanceof Error?t.reason:new Error("Watch aborted"));};t?.addEventListener("abort",a,{once:true});})}function Co(e){let t="",n=false;return {push(s){n&&(s="\r"+s,n=false),s.endsWith("\r")&&(s=s.slice(0,-1),n=true),t+=s.replace(/\r\n|\r/g,`
15
+ `),e.home!==null&&Object.assign(n,ya(s,e.home)),e.verifierLog!==null&&(n["verifier/test-stdout.txt"]=e.verifierLog),t.verifier_result?.rewards&&(n["verifier/reward.json"]=Qe(t.verifier_result.rewards)),t.exception_info&&(n["exception.txt"]=`${t.exception_info.exception_type}: ${t.exception_info.exception_message}
16
+ `),n["evolve.json"]=Qe(Ze(t,e.job,e.userId)),n}function qt(e,t){return {analysis_id:e.id,analyzed_trial_id:e.trial_id,job_id:e.job_id,task_name:e.task_name,user_id:t,status:e.status,model_name:e.model_name,gateway:{cost_usd:e.estimated_cost_usd,n_input_tokens:e.usage?.input_tokens??null,n_cache_tokens:e.usage?.cached_input_tokens??null,n_output_tokens:e.usage?.output_tokens??null}}}function zt(e,t,n){return {task_check_id:e.id,check_id:t.id,dataset:t.source.dataset,task_name:e.task_name,user_id:n,provider:t.sandbox_provider,status:e.status,model_name:t.model_name,gateway:{cost_usd:e.cost_usd}}}function Ht(e,t){return {check_id:e.id,user_id:t,source:e.source,provider:e.sandbox_provider,status:e.status,model_name:e.model_name,gateway:{cost_usd:e.cost_usd}}}Gt();var x=class extends Error{status;code;param;details;retryAfterSec;requestId;constructor(t,n,s,r){super(s),this.name="EvolveApiError",this.status=t,this.code=n,r?.param!==void 0&&(this.param=r.param),r?.details!==void 0&&(this.details=r.details),r?.retryAfterSec!==void 0&&(this.retryAfterSec=r.retryAfterSec),r?.requestId!==void 0&&(this.requestId=r.requestId);}isKnownCode(){return Nt(this.code)}};async function ut(e){let t=await e.text().catch(()=>""),n=e.headers?.get?.("x-request-id")??void 0,s=Ae(t,e);try{let r=JSON.parse(t);if(r?.error&&typeof r.error=="object"){let a=typeof r.error.code=="string"?r.error.code:"unknown_error",o=typeof r.error.message=="string"?r.error.message:e.statusText;throw new x(e.status,a,o,{param:typeof r.error.param=="string"?r.error.param:void 0,details:r.error.details&&typeof r.error.details=="object"?r.error.details:void 0,retryAfterSec:s,requestId:typeof r.error.requestId=="string"?r.error.requestId:n})}if(typeof r?.error=="string")throw new x(e.status,"unknown_error",r.error,{retryAfterSec:s,requestId:n})}catch(r){if(r instanceof x)throw r}throw new x(e.status,"unknown_error",t||e.statusText,{retryAfterSec:s,requestId:n})}var Zt=class extends Error{dataset;constructor(t){super(`Dataset "${t}" has no active version`),this.name="NoActiveVersionError",this.dataset=t;}},oe=class extends Error{name="ImportSettleError";code;importId;dataset;version;state;constructor(t,n,s){super(n),this.code=t,this.importId=s.importId,this.dataset=s.dataset,this.version=s.version,this.state=s.state;}},ro=1e3,De=3e4,ao=new Set(["COMPLETED","CANCELLED","FAILED"]),oo=new Set(["job.completed","job.cancelled","job.failed"]),je=2e3,io=30*6e4;function W(e,t){let n=t?.apiKey||process.env[pe];if(!n)throw new Error(`${e}() requires an API key. Set ${pe} or pass { apiKey } in config.`);let s=(t?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||fe).replace(/\/$/,"");return {apiKey:n,baseUrl:s}}async function w(e,t,n){let s=await fetch(`${e.baseUrl}${t}`,{...n,headers:{Authorization:`Bearer ${e.apiKey}`,...n?.headers}});return s.ok||await ut(s),s}function Xt(e){let t=e.indexOf("@");if(t===-1)return {name:e.trim()};let n=e.slice(0,t).trim(),s=e.slice(t+1).trim();if(!n||!s)throw new Error(`Invalid dataset ref "${e}": expected "name" or "name@version"`);return {name:n,version:s}}function sn(e){return {name:e.name,version:e.version}}function bs(e){let t=e.kwargs,n=Array.isArray(e.skills)?e.skills.filter(a=>typeof a=="string"):[],s=Array.isArray(e.skill_locks)?e.skill_locks:null,r=s?s.flatMap(a=>{if(!a||typeof a!="object")return [];let o=a;return typeof o.name!="string"||typeof o.digest!="string"?[]:[{name:o.name,source:typeof o.source=="string"?o.source:"",digest:o.digest,git_url:typeof o.git_url=="string"?o.git_url:null,git_commit_id:typeof o.git_commit_id=="string"?o.git_commit_id:null}]}):null;return {name:e.name,model_name:e.model_name,version:e.version??null,reasoning_effort:e.reasoning_effort??null,kwargs:t&&typeof t=="object"&&!Array.isArray(t)?t:null,preset:typeof e.preset=="string"?e.preset:null,skills:n,skill_locks:r}}function lo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.name!="string")return null;let n=Array.isArray(t.authors)?t.authors.flatMap(s=>{if(!s||typeof s!="object"||Array.isArray(s))return [];let r=s;return typeof r.name!="string"?[]:[{name:r.name,email:typeof r.email=="string"?r.email:null}]}):[];return {name:t.name,version:typeof t.version=="string"?t.version:null,description:typeof t.description=="string"?t.description:"",authors:n,keywords:Array.isArray(t.keywords)?t.keywords.filter(s=>typeof s=="string"):[],task_count:typeof t.task_count=="number"?t.task_count:null}}function uo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=r=>typeof t[r]=="string"?t[r]:null;switch(n("kind")??(n("commit")!==null?"git":null)){case "git":{let r=n("ref"),a=n("commit");return r===null||a===null?null:{kind:"git",git_url:n("git_url"),ref:r,commit:a,path:n("path")}}case "archive":{let r=n("digest");return r===null?null:{kind:"archive",digest:r}}case "archive_url":{let r=n("archive_url"),a=n("digest");return r===null||a===null?null:{kind:"archive_url",archive_url:r,digest:a}}case "hub_package":{let r=n("hub_package"),a=n("digest");return r===null||a===null?null:{kind:"hub_package",hub_package:r,digest:a}}default:return null}}function _e(e){return {version:e.version,state:e.state,created_at:e.created_at,task_count:e.task_count??0,n_failed_tasks:typeof e.n_failed_tasks=="number"?e.n_failed_tasks:0,manifest:lo(e.manifest),source:uo(e.source)}}function ks(e){return {code:e.code??"",step:e.step??"",message:e.message??"",excerpt:e.excerpt??null}}function co(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>({task_name:t.task_name??"",failure:ks(t.failure??{})})):[]}function po(e){return {task_name:e.task_name,agent_timeout_sec:e.agent_timeout_sec,verifier_timeout_sec:e.verifier_timeout_sec,gpus:typeof e.gpus=="number"&&e.gpus>0?e.gpus:0,gpu_types:Array.isArray(e.gpu_types)&&e.gpu_types.length>0?e.gpu_types.map(String):null,providers:e.providers,notes:Array.isArray(e.notes)?e.notes:[]}}function fo(e){return {action:e.action,type:e.type,job_id:e.job_id}}function go(e){let t=e&&typeof e=="object"?e:{};return {max_retries:typeof t.max_retries=="number"?t.max_retries:0,include_exceptions:Array.isArray(t.include_exceptions)?t.include_exceptions:null,exclude_exceptions:Array.isArray(t.exclude_exceptions)?t.exclude_exceptions:[],wait_multiplier:typeof t.wait_multiplier=="number"?t.wait_multiplier:1,min_wait_sec:typeof t.min_wait_sec=="number"?t.min_wait_sec:1,max_wait_sec:typeof t.max_wait_sec=="number"?t.max_wait_sec:60}}function mo(e){return {attempt_number:e.attempt_number,exception_info:e.exception_info??{exception_type:"InfrastructureError",exception_message:""},cost_usd:e.cost_usd??null,started_at:e.started_at??null,settled_at:e.settled_at??null}}function st(e){return typeof e=="number"?e:null}function ho(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>{let n=typeof t.n_tasks_ran=="number"?t.n_tasks_ran:0;return {dataset:sn(t.dataset??{}),n_tasks_ran:n,n_tasks_selected:typeof t.n_tasks_selected=="number"?t.n_tasks_selected:n,n_tasks_failed_to_build:typeof t.n_tasks_failed_to_build=="number"?t.n_tasks_failed_to_build:0,failed_task_names:Array.isArray(t.failed_task_names)?t.failed_task_names.map(String):[],note:t.note??""}}):[]}function _o(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.uploaded_at!="string")return null;let n=t.reported_totals,s=a=>typeof a=="number"&&Number.isFinite(a)?a:null,r=n&&typeof n=="object"&&!Array.isArray(n)&&Number.isInteger(n.n_trials_reporting)?{cost_usd:s(n.cost_usd),n_input_tokens:s(n.n_input_tokens),n_cache_tokens:s(n.n_cache_tokens),n_output_tokens:s(n.n_output_tokens),n_trials_reporting:n.n_trials_reporting}:null;return {original_job_id:typeof t.original_job_id=="string"?t.original_job_id:null,original_job_name:typeof t.original_job_name=="string"?t.original_job_name:null,uploaded_at:t.uploaded_at,reported_totals:r,task_links:vs(t.task_links)}}var ws=e=>typeof e=="string"&&Ot.includes(e),en=e=>typeof e=="string"&&Dt.includes(e),tn=e=>Array.isArray(e)&&e.every(t=>typeof t=="string")?[...e]:null;function vs(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(!n||typeof n!="object"||Array.isArray(n))return null;let s=n;if(typeof s.task_name!="string"||!ws(s.linked_by)||![s.n_trials,s.n_linked,s.n_unlinked].every(c=>Number.isInteger(c)&&c>=0))return null;let a=tn(s.datasets),o=tn(s.candidates);if(a===null||o===null||!s.link_reasons||typeof s.link_reasons!="object"||Array.isArray(s.link_reasons))return null;let l={};for(let[c,i]of Object.entries(s.link_reasons)){if(!en(c)||!Number.isInteger(i))return null;l[c]=i;}t.push({task_name:s.task_name,n_trials:s.n_trials,n_linked:s.n_linked,n_unlinked:s.n_unlinked,linked_by:s.linked_by,datasets:a,link_reasons:l,candidates:o});}return t}function yo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!ws(t.linked_by)||t.link_reason!==null&&t.link_reason!==void 0&&!en(t.link_reason))return null;let n=t.candidates===void 0?[]:tn(t.candidates);return n===null?null:{linked_by:t.linked_by,link_reason:en(t.link_reason)?t.link_reason:null,dataset:typeof t.dataset=="string"?t.dataset:null,version:typeof t.version=="string"?t.version:null,task_digest:typeof t.task_digest=="string"?t.task_digest:null,candidates:n}}function H(e){let t=e.trials??{};return {id:e.id,job_name:e.job_name,status:e.status,datasets:(e.datasets??[]).map(sn),agents:(e.agents??[]).map(bs),n_attempts:e.n_attempts,n_concurrent_trials:e.n_concurrent_trials,max_trial_spend_usd:e.max_trial_spend_usd,worst_case_spend_usd:e.worst_case_spend_usd,retry:go(e.retry),analyze:e.analyze&&typeof e.analyze=="object"&&!Array.isArray(e.analyze)?e.analyze:null,timeout_multiplier:typeof e.timeout_multiplier=="number"?e.timeout_multiplier:1,agent_timeout_multiplier:st(e.agent_timeout_multiplier),verifier_timeout_multiplier:st(e.verifier_timeout_multiplier),agent_setup_timeout_multiplier:st(e.agent_setup_timeout_multiplier),environment_build_timeout_multiplier:st(e.environment_build_timeout_multiplier),sandbox_provider:e.sandbox_provider??null,counts:e.counts,build_exclusions:ho(e.build_exclusions),n_total_trials:e.n_total_trials??0,trials:{total:t.total??0,byStatus:t.byStatus??{}},stats:e.stats??{},failure:e.failure??null,source_jobs:(e.source_jobs??[]).map(fo),is_regrade:e.is_regrade===true,upload:_o(e.upload),idempotent_replay:e.idempotent_replay===true,started_at:e.started_at,updated_at:e.updated_at,finished_at:e.finished_at??null}}function O(e,t){let n=e??{};return {items:Array.isArray(n.items)?n.items.map(t):[],nextCursor:n.nextCursor??null,hasMore:n.hasMore===true}}function U(e,t){let n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.cursor&&n.set("cursor",e.cursor);for(let[r,a]of Object.entries(t??{}))a!==void 0&&n.set(r,a);let s=n.toString();return s?`?${s}`:""}function Y(e){if(!e||typeof e!="object")return null;let t=e;return {started_at:t.started_at??null,finished_at:t.finished_at??null}}function bo(e){let t=e.model_info??{};return {name:e.name,version:e.version??null,model_info:{name:t.name,provider:t.provider??null},reasoning_effort:e.reasoning_effort??null}}function ot(e){return !e||typeof e!="object"||Array.isArray(e)?null:{...e,usage:ge(e.usage)}}function ko(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let{from:t,to:n,reason:s}=e;return typeof t!="string"||typeof n!="string"||typeof s!="string"?null:{from:t,to:n,reason:s}}function nn(e){return {id:e.id,job_id:e.job_id,task_name:e.task_name,source:e.source,agent_info:bo(e.agent_info||{}),attempt:e.attempt,status:e.status,reward:e.reward??null,verifier_result:e.verifier_result??null,exception_info:e.exception_info??null,agent_result:e.agent_result??null,judge_result:e.judge_result??null,analysis:ot(e.analysis),environment_setup:Y(e.environment_setup),agent_setup:Y(e.agent_setup),agent_execution:Y(e.agent_execution),verifier:Y(e.verifier),queue_wait:Y(e.queue_wait),harness_bundle:Y(e.harness_bundle),image_prepare:Y(e.image_prepare),shared_verify_setup:Y(e.shared_verify_setup),harness_bundle_cache_hit:typeof e.harness_bundle_cache_hit=="boolean"?e.harness_bundle_cache_hit:null,step_results:e.step_results??null,spend_source:e.spend_source??null,judge_spend_source:e.judge_spend_source??null,live_spent_usd:e.live_spent_usd??null,live_spend_at:e.live_spend_at??null,usage:ge(e.usage),max_trial_spend_usd:e.max_trial_spend_usd??null,sandbox_provider:e.sandbox_provider??null,sandbox_provider_degrade:ko(e.sandbox_provider_degrade),gpu_cost:e.gpu_cost&&typeof e.gpu_cost=="object"&&!Array.isArray(e.gpu_cost)?e.gpu_cost:null,sandbox_id:e.sandbox_id??null,verifier_sandbox_id:e.verifier_sandbox_id??null,verifier_environment_mode:e.verifier_environment_mode??null,attempt_phase:e.attempt_phase??null,n_retries:e.n_retries??0,retries:Array.isArray(e.retries)?e.retries.map(mo):[],session_ref:e.session_ref??null,upload:wo(e.upload),started_at:e.started_at??null,finished_at:e.finished_at??null}}function wo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.original_trial_name!="string"||typeof t.original_task_name!="string")return null;let n=t.reported_agent_result,s=r=>typeof r=="number"&&Number.isFinite(r)?r:null;return {original_trial_id:typeof t.original_trial_id=="string"?t.original_trial_id:null,original_trial_name:t.original_trial_name,original_task_name:t.original_task_name,reported_agent_result:n&&typeof n=="object"&&!Array.isArray(n)?{n_input_tokens:s(n.n_input_tokens),n_cache_tokens:s(n.n_cache_tokens),n_output_tokens:s(n.n_output_tokens),cost_usd:s(n.cost_usd)}:null,link:yo(t.link)}}function rt(e){return {name:e.name,source:e.source,run_command:e.run_command,env:e.env??{},created_at:e.created_at,updated_at:e.updated_at}}function ye(e){let t={id:e.id,status:e.status,name:e.name,version:e.version,failure:e.failure??null,warnings:e.warnings??[],progress:e.progress??null};return typeof e.receiving=="boolean"&&(t.receiving=e.receiving),typeof e.task_count=="number"&&(t.task_count=e.task_count),typeof e.created_at=="string"&&(t.created_at=e.created_at),typeof e.updated_at=="string"&&(t.updated_at=e.updated_at),t}function Oe(e){let t={id:e.id,status:e.status,receiving:e.receiving===true,source:e.source??null,dataset:e.dataset??null,job_id:e.job_id??null,n_trials_uploaded:e.n_trials_uploaded??null,n_trials_skipped:e.n_trials_skipped??null,skipped_trials:Array.isArray(e.skipped_trials)?e.skipped_trials:null,task_links:vs(e.task_links),failure:e.failure??null,progress:e.progress??null};return typeof e.created_at=="string"&&(t.created_at=e.created_at),typeof e.updated_at=="string"&&(t.updated_at=e.updated_at),t}function Ss(e){let t=e??{};return {scored:t.scored??0,total:t.total??0}}function vo(e){return {id:e.id,datasets:(e.datasets??[]).map(sn),status:e.status,mean_reward:e.mean_reward??null,coverage:Ss(e.coverage),cost_usd:e.cost_usd??0,agents:(e.agents||[]).map(bs),started_at:e.started_at}}function So(e){return {job_id:e.job_id,status:e.status,mean_reward:e.mean_reward??null,coverage:Ss(e.coverage)}}function Ao(e){return {task_name:e.task_name,disagreement:e.disagreement===true,cells:(e.cells||[]).map(So)}}function As(e){return {seq:e.seq,type:e.type,data:e.data??{}}}function xs(e){return (Array.isArray(e)?e:[]).map((n,s)=>({seq:jt+s,type:"usage",data:n&&typeof n=="object"&&!Array.isArray(n)?n:{}}))}function xo(e){return {trial_id:e.trial_id,task_name:e.task_name??null,match_count:e.match_count,events:(e.events||[]).map(As)}}function To(e){return e?e.suffix!==void 0?`bytes=-${e.suffix}`:e.start===void 0?null:`bytes=${e.start}-${e.end??""}`:null}function X(e){if(e?.aborted)throw e.reason instanceof Error?e.reason:new Error("Watch aborted")}function _s(e,t){return t?.aborted?true:e?.name==="AbortError"}function j(e,t){return new Promise((n,s)=>{let r=setTimeout(()=>{t?.removeEventListener("abort",a),n();},e),a=()=>{clearTimeout(r),s(t?.reason instanceof Error?t.reason:new Error("Watch aborted"));};t?.addEventListener("abort",a,{once:true});})}function Ro(e){let t="",n=false;return {push(s){n&&(s="\r"+s,n=false),s.endsWith("\r")&&(s=s.slice(0,-1),n=true),t+=s.replace(/\r\n|\r/g,`
17
17
  `);let r;for(;(r=t.indexOf(`
18
18
 
19
19
  `))!==-1;){let a=t.slice(0,r);t=t.slice(r+2);let o,l,c=[];for(let i of a.split(`
20
20
  `)){if(!i||i.startsWith(":"))continue;let u=i.indexOf(":"),d=u===-1?i:i.slice(0,u),p=u===-1?"":i.slice(u+1);p.startsWith(" ")&&(p=p.slice(1)),d==="id"?o=p:d==="event"?l=p:d==="data"&&c.push(p);}(o!==void 0||l!==void 0||c.length>0)&&e({id:o,event:l,data:c.join(`
21
- `)});}}}}function V(e,t){let n,s=()=>n??=e({limit:t?.limit,cursor:t?.cursor});return {then(r,a){return s().then(r,a)},catch(r){return s().catch(r)},finally(r){return s().finally(r)},async*[Symbol.asyncIterator](){let r=t?.cursor;for(;;){let a=await e({limit:t?.limit,cursor:r});for(let o of a.items)yield o;if(!a.nextCursor)return;r=a.nextCursor;}}}}function ae(e){let t=new FormData;for(let[n,s]of Object.entries(e))s!==void 0&&t.set(n,s);return t}async function Oo(e){let{readFileSync:t,readdirSync:n,statSync:s}=await import('fs'),{basename:r,join:a,resolve:o}=await import('path'),l=o(e),c=f=>s(f,{throwIfNoEntry:false})?.isFile()===true,i=f=>s(f,{throwIfNoEntry:false})?.isDirectory()===true;if(!i(l))throw new Error(`datasets().preflight(): not a directory: ${l}`);let u=[],d=l;if(c(a(l,"task.toml"))){let f=n(l,{withFileTypes:true}).filter(g=>g.isDirectory()&&!g.name.startsWith(".")).filter(g=>c(a(l,g.name,"task.toml"))).map(g=>g.name);if(i(a(l,"tasks"))||f.length>0)throw new Error(`${l} is ambiguous: it carries task.toml at its root (a single-task shape) AND corpus-shaped content \u2014 the import refuses this too; point at the one task directory or at a corpus of task directories, not a mix`);u.push({name:r(l),dir:l});}else {d=i(a(l,"tasks"))?a(l,"tasks"):l;for(let f of n(d,{withFileTypes:true})){if(!f.isDirectory()||f.name.startsWith("."))continue;let g=a(d,f.name);if(!c(a(g,"task.toml")))throw new Error(`${g} has no task.toml \u2014 every directory of a corpus must be a task directory (the import fails on it rather than skipping it)`);u.push({name:f.name,dir:g});}if(u.length===0)throw new Error(`${d} holds no task directories \u2014 nothing to check`);u.sort((f,g)=>f.name<g.name?-1:f.name>g.name?1:0);}let p=(d===l?[l]:[d,l]).map(f=>a(f,"dataset.toml")).find(c);return {tasks:u.map(({name:f,dir:g})=>({name:f,task_toml:t(a(g,"task.toml"),"utf8")})),...p!==void 0?{dataset_toml:t(p,"utf8")}:{}}}async function Do(e,t,n){let{postMultipartFile:s}=await Promise.resolve().then(()=>(Kt(),is)),r=await s({url:`${e.baseUrl}${t}`,method:n.method??"POST",headers:{Authorization:`Bearer ${e.apiKey}`},fields:n.fields,file:n.file,...n.onBytes!==void 0?{onBytes:n.onBytes}:{}});return r.ok||await ct(r),r}async function Es(e,t,n,s){if(s.resumableThreshold!==void 0){let{stat:r}=await import('fs/promises'),{size:a}=await r(n);if(a>s.resumableThreshold){let{uploadArchiveResumable:o}=await Promise.resolve().then(()=>(Ct(),Xn)),l=await o({baseUrl:e.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`},file:{path:n},fields:s.fields,...s.resumablePath!==void 0?{sessionsPath:s.resumablePath}:{},...s.onBytes!==void 0?{onBytes:s.onBytes}:{},...s.onRegistered!==void 0?{onRegistered:s.onRegistered}:{}});return l.ok||await ct(l),l}}return await Do(e,t,{method:s.method,fields:s.fields,file:{path:n,filename:s.filename},...s.onBytes!==void 0?{onBytes:s.onBytes}:{}})}async function be(e,t,n){let{tarGzipDirectoryToFile:s}=await Promise.resolve().then(()=>(st(),nt)),{mkdtemp:r,rm:a}=await import('fs/promises'),{tmpdir:o}=await import('os'),{join:l}=await import('path'),c=await r(l(o(),"evolve-upload-"));try{let i=l(c,n.filename);return await s(n.directory,i),await Es(e,t,i,n)}finally{await a(c,{recursive:true,force:true});}}function jo(e){let t,n=()=>(t||(t=(async()=>{let s=await e.next();for(;!s.done;)s=await e.next();return s.value})()),t);return {then(s,r){return n().then(s,r)},catch(s){return n().catch(s)},finally(s){return n().finally(s)},[Symbol.asyncIterator](){return e}}}var Is="x-package-sha256",lt=class extends Error{constructor(n,s){super(`downloaded bytes do not match the digest the server stated (expected ${n}, got ${s})`);this.expected=n;this.actual=s;}name="EvolveDigestMismatchError"},ut=class extends Error{constructor(n,s){super(`download ended early: the server declared ${n} bytes and ${s} arrived`);this.expectedBytes=n;this.receivedBytes=s;}name="EvolveIncompleteDownloadError"};function Ps(e,t){let n=e.headers.get("Content-Length");if(n===null)return;let s=Number(n);if(Number.isFinite(s)&&t!==s)throw new ut(s,t)}async function $s(e,t){let n=e.headers.get(Is);if(!n)return;let{createHash:s}=await import('crypto'),r=s("sha256").update(t).digest("hex");if(r!==n)throw new lt(n,r)}function Lo(e,t){let s=(e.headers.get("Content-Disposition")||"").match(/filename="([^"]+)"/);if(!s)return t;let r=path.basename(s[1]);return r===""||r==="."||r===".."||/[/\\]/.test(r)||/[\u0000-\u001f]/.test(r)?t:r}async function Cs(e,t,n){if(!e.body)throw new Error("Download response has no body");await promises.mkdir(t,{recursive:true});let s=path.join(t,Lo(e,n)),{createHash:r,randomBytes:a}=await import('crypto'),o=`${s}.${a(8).toString("hex")}.part`,l=r("sha256"),c=0,i=stream.Readable.fromWeb(e.body);i.on("data",u=>{l.update(u),c+=u.length;});try{await promises$1.pipeline(i,fs.createWriteStream(o));let u=e.headers.get("Content-Length");if(u!==null&&c!==Number(u))throw new ut(Number(u),c);let d=e.headers.get(Is),p=l.digest("hex");if(d&&p!==d)throw new lt(d,p);await promises.rename(o,s);}catch(u){throw await promises.rm(o,{force:true}).catch(()=>{}),u}return s}async function an(e,t,n,s){let r=await w(e,t);if(n?.stream){if(!r.body)throw new Error("Download response has no body");return r.body}if(n?.to)return Cs(r,n.to,s);let a=Buffer.from(await r.arrayBuffer());return Ps(r,a.length),await $s(r,a),a}function Z(e){let t=W("datasets",e);async function n(i){let u=await w(t,`/api/datasets/imports/${encodeURIComponent(i)}`);return ye(await u.json())}function s(i){if(!i||typeof i!="object")return null;let u=i;return {git_url:u.git_url??null,ref:u.ref,current_commit:u.current_commit,path:u.path??null,latest_commit:u.latest_commit??null,acked_commit:u.acked_commit??null,moved:u.moved===true,behind_by:typeof u.behind_by=="number"?u.behind_by:null,checked_at:u.checked_at??null,error:u.error??null,auto_import:u.auto_import===true}}function r(i){return {name:i.name,title:i.title??null,description:i.description??null,active_version:i.active_version?_e(i.active_version):null,latest_version:i.latest_version?_e(i.latest_version):null,versions:(i.versions||[]).map(_e),selected_version:i.selected_version?_e(i.selected_version):null,tasks:O(i.tasks,_o),failed_tasks:ho(i.failed_tasks),upstream:s(i.upstream),created_at:i.created_at,updated_at:i.updated_at}}async function a(i,u){let d=Qt(i),p=J(u,{version:d.version}),f=await w(t,`/api/datasets/${encodeURIComponent(d.name)}${p}`);return r(await f.json())}async function o(i,u){let d=u?.pollIntervalMs??je,p=u?.settleTimeoutMs??fo,f=Date.now()+p,g=`${i.name}@${i.version}`,h=null,y=null,_=()=>y?.state==="FAILED"?new oe("settle_timeout",`Import ${i.id}'s dataset "${i.name}" version "${i.version}" settled FAILED, but the final import read kept answering rate-limited/unavailable past the ${p}ms settle budget. Read the failure with datasets().getImport("${i.id}").`,{importId:i.id,dataset:i.name,version:i.version,state:y.state}):new oe("settle_timeout",`Import ${i.id} completed, but dataset "${i.name}" version "${i.version}" did not settle within ${p}ms: last observed state ${y?.state??"never observed"}. Keep following with datasets().get("${g}").`,{importId:i.id,dataset:i.name,version:i.version,state:y?.state??null}),v=async b=>{for(;;){Q(u?.signal);try{return await b()}catch(S){if(!(S instanceof x)||S.status!==429&&S.status!==503)throw S;let A=f-Date.now();if(A<=0)throw _();await L(Math.min(Math.max((S.retryAfterSec??0)*1e3,d),A),u?.signal);}}};for(;;){Q(u?.signal);let b=await v(()=>a(g,{limit:1})),S=b.selected_version;if(S){if(y=S,S.state!==h&&(h=S.state,u?.onVersion?.(S,b)),S.state==="FAILED")return v(()=>n(i.id));if(S.state==="READY"||S.state==="ARCHIVED")return i}if(Date.now()>=f)throw _();await L(d,u?.signal);}}function l(i){return {name:i.name,title:i.title??null,description:i.description??null,active_version:i.active_version?_e(i.active_version):null,latest_version:i.latest_version?_e(i.latest_version):null,upstream:s(i.upstream)}}async function c(i){let u=await w(t,`/api/datasets${J(i,{search:i?.search})}`);return O(await u.json(),l)}return {list(i){return V(u=>c({...u,search:i?.search}),i)},get:a,async getActive(i,u){let d=await a(i,u);if(d.active_version===null)throw new en(i);return {name:d.name,title:d.title,description:d.description,active_version:d.active_version,version:d.active_version.version,tasks:d.tasks??{items:[],nextCursor:null,hasMore:false},versions:d.versions??[],created_at:d.created_at,updated_at:d.updated_at}},async getTaskBuild(i,u){let d=Qt(i);if(d.version===void 0)throw new Error(`datasets().getTaskBuild() needs "name@version" \u2014 a task's build outcome belongs to one immutable version (got "${i}")`);let f=await(await w(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}/build`)).json();return {task_name:f.task_name??u,state:f.state,failure:f.failure&&typeof f.failure=="object"?vs(f.failure):null,build_log_ref:f.build_log_ref??null}},async preflight(i){let u=i?.source?.directory;if(typeof u!="string"||u==="")throw new Error("datasets().preflight() requires { source: { directory } } \u2014 a local corpus directory whose task.toml files are checked server-side before any upload");let d=await Oo(u);return await(await w(t,"/api/datasets/preflight",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json()},async publish(i,u){let d=i.source;if(d?.directory){if(i.name===void 0||i.version===void 0){let{existsSync:f}=await import('fs'),{join:g}=await import('path');if(!(f(g(d.directory,"dataset.toml"))||f(g(d.directory,"tasks","dataset.toml"))))throw new Error(`datasets().publish() needs ${i.name===void 0?"a name":"a version"} \u2014 pass it explicitly, or add a dataset.toml manifest to the corpus directory (the server then derives name and version from it)`)}let p=await be(t,"/api/datasets/publish",{fields:{name:i.name,version:i.version},directory:d.directory,filename:"corpus.tar.gz",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{},resumableThreshold:Te});return ye(await p.json())}if(d&&"archive_url"in d&&d.archive_url){if(i.name===void 0||i.version===void 0)throw new Error("datasets().publish() requires name and version for an archive_url source \u2014 the server fetches the tarball only after the publish is accepted, so a manifest cannot supply them");let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({name:i.name,version:i.version,archive_url:d.archive_url})});return ye(await p.json())}if(d&&"hub_package"in d&&d.hub_package){let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({...i.name!==void 0?{name:i.name}:{},...i.version!==void 0?{version:i.version}:{},hub_package:d.hub_package})});return ye(await p.json())}if(d&&"git_url"in d&&d.git_url){if(i.name===void 0||i.version===void 0)throw new Error("datasets().publish() requires name and version for a git source \u2014 a dataset.toml manifest can only supply them for a directory source, because a git repository is cloned server-side after the publish is accepted");let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({name:i.name,version:i.version,git_url:d.git_url,git_ref:d.git_ref,...d.git_path!==void 0?{git_path:d.git_path}:{}})});return ye(await p.json())}throw new Error("datasets().publish() requires a source: a git source ({ source: { git_url, git_ref } }), a local corpus directory ({ source: { directory } }), a public tarball url ({ source: { archive_url } }), or a Harbor hub package ({ source: { hub_package } }); plus name and version (optional for a directory whose corpus carries a dataset.toml manifest, and for a hub package, which supplies its own defaults)")},getImport:n,async watchImport(i,u){let d=u?.pollIntervalMs??je,p=null,f=null;for(;;){Q(u?.signal);let g;try{g=await n(i);}catch(y){if(y instanceof x&&(y.status===429||y.status===503)){await L(Math.max((y.retryAfterSec??0)*1e3,d),u?.signal);continue}throw y}let h=`${g.status}${g.receiving===true?":receiving":""}`;if(h!==p&&(p=h,u?.onStatus?.(g)),g.progress!==null){let y=JSON.stringify(g.progress);y!==f&&(f=y,u?.onProgress?.(g.progress,g));}if(g.status==="FAILED")return g;if(g.status==="COMPLETED")return o(g,u);await L(d,u?.signal);}},download:(async(i,u)=>{let d=Qt(i),p=d.version?`?version=${encodeURIComponent(d.version)}`:"",f=await w(t,`/api/datasets/${encodeURIComponent(d.name)}/download${p}`);if(u?.stream){if(!f.body)throw new Error("Package response has no body");return f.body}if(u?.to)return Cs(f,u.to,`${d.name}-corpus.tar.gz`);let g=Buffer.from(await f.arrayBuffer());return Ps(f,g.length),await $s(f,g),g}),listImports(i){return V(async u=>{let d=new URLSearchParams;u.limit!==void 0&&d.set("limit",String(u.limit)),u.cursor!==void 0&&d.set("cursor",u.cursor),i?.status!==void 0&&d.set("status",i.status),i?.dataset!==void 0&&d.set("dataset",i.dataset);let p=d.toString()?`?${d}`:"",f=await w(t,`/api/datasets/imports${p}`);return O(await f.json(),ye)},i)},async activate(i,u){let d=await w(t,`/api/datasets/${encodeURIComponent(i)}/versions/${encodeURIComponent(u)}/activate`,{method:"POST"});return r(await d.json())},async update(i,u){let d=await w(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return l(await d.json())},async delete(i){await w(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"DELETE"});}}}function Le(e){let t=W("agents",e);return {async create(n){let s=ks("agents().create()",n),r=s.directory?await be(t,"/api/agents",{fields:s.fields,directory:s.directory,filename:"source.tar.gz"}):await w(t,"/api/agents",{method:"POST",body:ae(s.fields)});return at(await r.json())},list(n){return V(async s=>{let r=await w(t,`/api/agents${J(s)}`);return O(await r.json(),at)},n)},async get(n){let s=await w(t,`/api/agents/${encodeURIComponent(n)}`);return at(await s.json())},async delete(n){await w(t,`/api/agents/${encodeURIComponent(n)}`,{method:"DELETE"});},async upsert(n,s){let r=ks("agents().upsert()",{...s,name:n}),a=r.directory?await be(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",fields:r.fields,directory:r.directory,filename:"source.tar.gz"}):await w(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",body:ae(r.fields)});return at(await a.json())}}}function ks(e,t){let n=typeof t.install_script=="string",s=typeof t.directory=="string";if(n&&s)throw new Error(`${e} takes EITHER an install script ({ install_script }) or a local directory ({ directory }), not both`);if(!n&&!s)throw new Error(`${e} requires either an install script ({ install_script }) or a local directory ({ directory }), plus run_command`);let r={name:t.name,run_command:t.run_command,...t.env!==void 0?{env:JSON.stringify(t.env)}:{},...n?{install_script:t.install_script}:{}};return s?{fields:r,directory:t.directory}:{fields:r}}function Zt(e){return {id:e.id,name:e.name,digest:e.digest,size_bytes:e.size_bytes??0,description:e.description??null,ref:e.ref??`upload:${e.id}`,created_at:e.created_at}}function ie(e){let t=W("skills",e);return {async upload(n){if(typeof n!="string"||!n.trim())throw new Error("skills().upload() requires a local skill directory path");let{basename:s,resolve:r}=await import('path'),a=s(r(n)),l=await(await be(t,"/api/skills",{fields:{name:a||void 0},directory:n,filename:"skill.tar.gz"})).json();return (Array.isArray(l.skills)?l.skills:[l]).map(Zt)},list(n){return V(async s=>{let r=await w(t,`/api/skills${J(s)}`);return O(await r.json(),Zt)},n)},async get(n){let r=await(await w(t,`/api/skills/${encodeURIComponent(n)}`)).json();return {...Zt(r),skill_md:r.skill_md??null}},async delete(n){await w(t,`/api/skills/${encodeURIComponent(n)}`,{method:"DELETE"});}}}function E(e){let t=W("jobs",e);async function n(c){let i=await w(t,`/api/jobs/${encodeURIComponent(c)}`);return H(await i.json())}async function s(c){let i=await w(t,`/api/jobs/imports/${encodeURIComponent(c)}`);return Oe(await i.json())}async function r(c){let i=await w(t,`/api/jobs${J(c,{search:c?.search,scope:c?.scope})}`);return O(await i.json(),H)}function a(c){let i=c.trials??{};return {task_name:c.task_name,source:c.source,trials:{total:i.total??0,byStatus:i.byStatus??{}},mean_reward:c.mean_reward??null,cost_usd:c.cost_usd??null,check:c.check&&typeof c.check=="object"&&!Array.isArray(c.check)?c.check:null}}async function o(c,i){let u=J(i,{status:i?.status?.length?i.status.join(","):void 0,dataset:i?.dataset}),d=await w(t,`/api/jobs/${encodeURIComponent(c)}/trials${u}`);return O(await d.json(),sn)}async function*l(c,i){let{onEvent:u,signal:d}=i??{},p=i?.reconnectDelayMs??uo,f=i?.maxReconnectDelayMs??De,g=null,h=false,y=false,_=p;for(;!h;){Q(d);let v;try{v=await fetch(`${t.baseUrl}/api/jobs/${encodeURIComponent(c)}/events`,{headers:{Authorization:`Bearer ${t.apiKey}`,Accept:"text/event-stream",...g!==null?{"Last-Event-ID":String(g)}:{}},signal:d});}catch($){if(bs($,d))throw $;await L(_,d),_=Math.min(_*2,f);continue}if(!v.ok){if(v.status===429||v.status>=500){let $=await v.text().catch(()=>""),R=Ae($,v)??0,P=R>0?Math.max(R*1e3,_):_;await L(P,d),_=Math.min(_*2,f);continue}await ct(v);}if(!v.body)throw new Error("Event stream response has no body");let b=false,S=[],A=Co($=>{let R=Number($.id),P={seq:Number.isInteger(R)?R:-1,type:$.event||"message",data:$.data?Uo($.data):{}};Number.isInteger(R)&&(g=R),b=true,po.has(P.type)&&(h=true),S.push(P);}),U=v.body.getReader(),B=new TextDecoder;try{for(;!h;){let{done:$,value:R}=await U.read();if($)break;A.push(B.decode(R,{stream:!0}));for(let P of S)u?.(P),yield P;S.length=0;}}catch($){if(bs($,d))throw $}finally{await U.cancel().catch(()=>{});}if(h)break;Q(d);let re=await n(c);if(co.has(re.status)){if(y)return re;y=true;continue}b&&(_=p),await L(_,d),_=Math.min(_*2,f);}return n(c)}return {async start(c,i){let u=await w(t,"/api/jobs",{method:"POST",headers:{"Content-Type":"application/json",...i?.idempotencyKey?{"Idempotency-Key":i.idempotencyKey}:{}},body:JSON.stringify(c)});return H(await u.json())},get:n,list(c){return V(i=>r({...i,search:c?.search,scope:c?.scope}),c)},trials(c,i){return V(u=>o(c,{...u,status:i?.status,dataset:i?.dataset}),i)},tasks(c,i){return V(async u=>{let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/tasks${J(u)}`);return O(await d.json(),a)},i)},watch(c,i){return jo(l(c,i))},async cancel(c){let i=await w(t,`/api/jobs/${encodeURIComponent(c)}/cancel`,{method:"POST"});return H(await i.json())},async compare(c){let i=c.map(encodeURIComponent).join(","),d=await(await w(t,`/api/jobs/compare?ids=${i}`)).json();return {jobs:(d.jobs||[]).map(Ro),taskMatrix:(d.taskMatrix||[]).map(Io)}},async resume(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/resume`,{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(i??{})});return H(await d.json())},async retry(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/retry`,{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(i??{})});return H(await d.json())},async regrade(c,i){let u={};i?.statuses?.length&&(u.statuses=i.statuses),i?.task_name!==void 0&&(u.task_name=i.task_name);let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/regrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return H(await d.json())},async analyze(c,i){let u=await w(t,`/api/jobs/${encodeURIComponent(c)}/analyze`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i??{})});return H(await u.json())},async watchAnalysis(c,i){let u=i?.pollIntervalMs??je,d=u,p=null;for(;;){Q(i?.signal);let f;try{f=await n(c);}catch(_){if(_ instanceof x&&(_.status===429||_.status===503)){await L(Math.max((_.retryAfterSec??0)*1e3,d),i?.signal),d=Math.min(d*2,De);continue}throw _}let g=f.stats.analysis??null,h=g?JSON.stringify([g.n_completed,g.n_failed,g.n_pending]):null,y=h!==null&&h!==p;if(y&&(p=h,i?.onStats?.(f)),g?.n_pending===0)return f;d=y?u:Math.min(d*2,De),await L(d,i?.signal);}},download:(async(c,i)=>an(t,`/api/jobs/${encodeURIComponent(c)}/download`,i,`job-${c}-results.tar.gz`)),async upload(c,i){let u={dataset:i?.dataset};if(typeof c=="object"&&c!==null){if(typeof c.archive_url!="string"||!c.archive_url.trim())throw new Error("jobs().upload() with a URL source requires { archive_url: 'https://\u2026' }");let b=await w(t,"/api/jobs/upload",{method:"POST",body:ae({...u,archive_url:c.archive_url})});return Oe(await b.json())}if(typeof c!="string"||!c.trim())throw new Error("jobs().upload() requires a job directory (or .tar.gz archive) path, or { archive_url }");let d={fields:u,filename:"job.tar.gz",resumableThreshold:Te,resumablePath:"/api/jobs/upload/uploads",...i?.onUploadProgress!==void 0?{onBytes:i.onUploadProgress}:{},...i?.onRegistered!==void 0?{onRegistered:i.onRegistered}:{}},{stat:p}=await import('fs/promises');if((await p(c).catch(()=>null))?.isFile()){let b=await Es(t,"/api/jobs/upload",c,d);return Oe(await b.json())}let{existsSync:g}=await import('fs'),{join:h,resolve:y}=await import('path'),_=y(c);for(let b of ["result.json","config.json"])if(!g(h(_,b)))throw new Error(`${_} does not contain ${b}`);let v=await be(t,"/api/jobs/upload",{...d,directory:_});return Oe(await v.json())},getImport:s,async watchImport(c,i){let u=i?.pollIntervalMs??je,d=null,p=null;for(;;){Q(i?.signal);let f;try{f=await s(c);}catch(h){if(h instanceof x&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,u),i?.signal);continue}throw h}let g=`${f.status}${f.receiving?":receiving":""}`;if(g!==d&&(d=g,i?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==p&&(p=h,i?.onProgress?.(f.progress,f));}if(f.status==="COMPLETED"||f.status==="FAILED")return f;await L(u,i?.signal);}},listImports(c){return V(async i=>{let u=new URLSearchParams;i.limit!==void 0&&u.set("limit",String(i.limit)),i.cursor!==void 0&&u.set("cursor",i.cursor),c?.status!==void 0&&u.set("status",c.status);let d=u.toString()?`?${u}`:"",p=await w(t,`/api/jobs/imports${d}`);return O(await p.json(),Oe)},c)},async delete(c){let u=await(await w(t,`/api/jobs/${encodeURIComponent(c)}`,{method:"DELETE"})).json();return {job_id:u.job_id??c,trials_deleted:u.trials_deleted??0,analyses_deleted:u.analyses_deleted??0}},async grep(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/grep${J(u,{q:i,type:u?.type})}`);return O(await d.json(),Po)}}}function G(e){let t=W("trials",e);async function n(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/trace${J(a,{type:a?.type,grep:a?.grep,tail:a?.tail!==void 0?String(a.tail):void 0})}`);return O(await o.json(),Ts)}async function s(r,a){let l=await(await w(t,`/api/trials/${encodeURIComponent(r)}/trace?stream=${a}`)).json();return a==="agent-home"?l.files??null:l.log??null}return {async get(r){let a=await w(t,`/api/trials/${encodeURIComponent(r)}`);return sn(await a.json())},trace:n,artifact:s,async*traceEvents(r,a){let o=a?.cursor;for(;;){let l=await n(r,{...a,cursor:o});for(let c of l.items)yield c;if(!l.nextCursor)return;o=l.nextCursor;}},async regrade(r){let a=await w(t,`/api/trials/${encodeURIComponent(r)}/regrade`,{method:"POST"});return H(await a.json())},async retry(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/retry`,{method:"POST",...a?.idempotencyKey?{headers:{"Idempotency-Key":a.idempotencyKey}}:{}});return H(await o.json())},async stop(r){let o=await(await w(t,"/api/trials/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({trial_ids:r})})).json();return {stopped:(o.stopped??[]).map(sn),stopped_analyses:(o.stopped_analyses??[]).map(it).filter(l=>l!==null),already_terminal:o.already_terminal??[],not_found:o.not_found??[]}},async files(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/files${J(a)}`);return O(await o.json(),l=>({path:l.path,size_bytes:l.size_bytes}))},async file(r,a,o){let l=a.split("/").filter(Boolean).map(encodeURIComponent).join("/"),c=$o(o),i=await w(t,`/api/trials/${encodeURIComponent(r)}/files/${l}`,c?{headers:{Range:c}}:void 0);return Buffer.from(await i.arrayBuffer())}}}function Os(e){let t=e?.update;return typeof t?.sessionUpdate=="string"?t.sessionUpdate:"unknown"}function ke(e){let t=W("analyses",e),n=new Set;async function s(o){if(n.has(o))return;let l;try{l=await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`);}catch(c){throw c instanceof x&&c.status===400?new Error(`"${o}" is not an analysis run (the artifacts door refuses it typed) \u2014 for a trial's artifacts use trials()`):c}await l.text().catch(()=>{}),n.add(o);}async function r(o,l){await s(o);let i=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=${l}`)).json();return l==="agent-home"?i.files??null:i.log??null}async function a(o){let l=await w(t,`/api/analyses${J(o,{scope:o?.scope,job:o?.job,status:o?.status&&o.status.length>0?o.status.join(","):void 0})}`);return O(await l.json(),c=>{let i=it(c);if(i===null)throw new Error("The analyses list served an unreadable analysis object");return i})}return {list(o){return V(l=>a({...l,scope:o?.scope,job:o?.job,status:o?.status}),o)},async get(o){let c=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`)).json(),i=it(c.analysis);if(i===null)throw new Error(`The analysis feed served no readable verdict object for "${o}"`);return n.add(o),i},async transcript(o,l){let c=l?.since;if(c!==void 0&&(!Number.isInteger(c)||c<0))throw new Error(`transcript() since must be a non-negative integer, got ${c}`);let u=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/events`+(c!==void 0?`?since=${c}`:""))).json(),d=u.session??{};if(d.kind!=="analysis"){let g=typeof d.kind=="string"?d.kind:"trial";throw new Error(`"${o}" is not an analysis run (the feed resolves it as a ${g}) \u2014 for a trial's trace use trials()`)}let p=c??0,f=Array.isArray(u.events)?u.events:[];return {id:typeof d.id=="string"?d.id:o,analyzed_trial_id:typeof d.analyzedTrialId=="string"?d.analyzedTrialId:null,job_id:typeof d.jobId=="string"?d.jobId:null,task_name:typeof d.tag=="string"?d.tag:null,model_name:typeof d.model=="string"?d.model:null,sandbox_provider:typeof d.provider=="string"?d.provider:null,sandbox_id:typeof d.sandboxId=="string"?d.sandboxId:null,is_ended:d.isEnded===true,total:typeof u.total=="number"?u.total:p+f.length,events:f.map((g,h)=>({seq:p+h,type:Os(g),data:g&&typeof g=="object"&&!Array.isArray(g)?g:{}})),gateway_calls:Rs(u.gatewayCalls),stored_at:Pe(u.storedAt,f.length,"Analysis transcript response")}},artifact:r,download:(async(o,l)=>an(t,`/api/analyses/${encodeURIComponent(o)}/download`,l,`analysis-${o}.tar.gz`))}}function ot(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("The checks surface served an unreadable check object");let t=e,n=Array.isArray(t.results)?t.results.filter(s=>!!s&&typeof s=="object"&&!Array.isArray(s)):[];return {...t,results:n}}function le(e){let t=W("checks",e);async function n(l){let c=await w(t,`/api/checks/${encodeURIComponent(l)}`);return ot(await c.json())}async function s(l){let c=await w(t,`/api/checks${J(l,{scope:l?.scope,status:l?.status&&l.status.length>0?l.status.join(","):void 0})}`);return O(await c.json(),ot)}let r=new Set;async function a(l){let c;try{c=await w(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=task-check`);}catch(d){throw d instanceof x&&d.status===400?new Error(`"${l}" is not a task check (the artifacts door refuses it typed) \u2014 for a trial's artifacts use trials(), for an analysis's use analyses()`):d}let u=(await c.json()).task_check;if(!u||typeof u!="object"||Array.isArray(u))throw new Error(`The traces feed served no readable task check for "${l}"`);return r.add(l),u}async function o(l,c){r.has(l)||await a(l);let u=await(await w(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=${c}`)).json();return c==="agent-home"?u.files??null:u.log??null}return {async create(l){let{source:c,onUploadProgress:i,...u}=l,d={config:JSON.stringify(u)};if("dataset"in c){if(typeof c.dataset!="string"||c.dataset.trim()==="")throw new Error('checks().create(): source.dataset must be "name" or "name@version"');let v=await w(t,"/api/checks",{method:"POST",body:ae({...d,dataset:c.dataset.trim()})});return ot(await v.json())}let{existsSync:p,statSync:f}=await import('fs'),{basename:g,resolve:h}=await import('path'),y=h(c.directory);if(!p(y)||!f(y).isDirectory())throw new Error(`checks().create(): Path '${c.directory}' does not exist or is not a directory`);let _=await be(t,"/api/checks",{directory:y,fields:d,filename:`${g(y)||"task"}.tar.gz`,...i!==void 0?{onBytes:i}:{}});return ot(await _.json())},get:n,list(l){return V(c=>s({...c,scope:l?.scope,status:l?.status}),l)},task:a,async transcript(l,c){let i=c?.since;if(i!==void 0&&(!Number.isInteger(i)||i<0))throw new Error(`transcript() since must be a non-negative integer, got ${i}`);let d=await(await w(t,`/api/traces/trials/${encodeURIComponent(l)}/events`+(i!==void 0?`?since=${i}`:""))).json(),p=d.session??{};if(p.kind!=="check"){let h=typeof p.kind=="string"?p.kind:"trial";throw new Error(`"${l}" is not a task check (the feed resolves it as a ${h}) \u2014 for a trial's trace use trials(), for an analysis's use analyses()`)}let f=i??0,g=Array.isArray(d.events)?d.events:[];return {id:typeof p.id=="string"?p.id:l,check_id:typeof p.checkId=="string"?p.checkId:null,dataset:typeof p.datasetRef=="string"?p.datasetRef:null,task_name:typeof p.tag=="string"?p.tag:null,model_name:typeof p.model=="string"?p.model:null,sandbox_provider:typeof p.provider=="string"?p.provider:null,sandbox_id:typeof p.sandboxId=="string"?p.sandboxId:null,is_ended:p.isEnded===true,total:typeof d.total=="number"?d.total:f+g.length,events:g.map((h,y)=>({seq:f+y,type:Os(h),data:h&&typeof h=="object"&&!Array.isArray(h)?h:{}})),gateway_calls:Rs(d.gatewayCalls),stored_at:Pe(d.storedAt,g.length,"Task check transcript response")}},artifact:o,download:(async(l,c)=>an(t,`/api/checks/${encodeURIComponent(l)}/download`,c,`check-${l}.tar.gz`)),async watch(l,c){let i=c?.pollIntervalMs??je,u=i,d=null;for(;;){Q(c?.signal);let p;try{p=await n(l);}catch(h){if(h instanceof x&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,u),c?.signal),u=Math.min(u*2,De);continue}throw h}let f=JSON.stringify(p.results.map(h=>[h.task_name,h.status])),g=f!==d;if(g&&(d=f,c?.onProgress?.(p)),p.status==="completed")return p;u=g?i:Math.min(u*2,De),await L(u,c?.signal);}}}}function on(e){let t=W("auth",e);return {async status(){let s=await(await w(t,"/api/auth/status")).json(),r=s.key??{};return {user_id:s.user_id,email:s.email??null,key:{id:r.id,label:r.label??null,created_at:r.created_at,last_used_at:r.last_used_at??null}}}}}function Ds(e){return {org_id:e.org_id,slug:e.slug,display_name:e.display_name,personal:e.personal===true,...e.role==="owner"||e.role==="member"?{role:e.role}:{},created_at:e.created_at}}function No(e){let t=e.quota??{},n=e.usage??{},s=r=>typeof r=="number"?r:0;return {...Ds(e),member_count:s(e.member_count),quota:{max_concurrent_trials:s(t.max_concurrent_trials),max_queued_trials:s(t.max_queued_trials),max_concurrent_imports:s(t.max_concurrent_imports),max_concurrent_analyses:s(t.max_concurrent_analyses),max_concurrent_sessions:s(t.max_concurrent_sessions),monthly_budget_usd:typeof t.monthly_budget_usd=="number"?t.monthly_budget_usd:null,max_concurrent_sandboxes_e2b:s(t.max_concurrent_sandboxes_e2b),max_concurrent_sandboxes_daytona:s(t.max_concurrent_sandboxes_daytona),max_concurrent_sandboxes_modal:s(t.max_concurrent_sandboxes_modal)},usage:{in_flight_trials:s(n.in_flight_trials),queued_trials:s(n.queued_trials),in_flight_imports:s(n.in_flight_imports),in_flight_analyses:s(n.in_flight_analyses),active_sessions:s(n.active_sessions),month_spend_usd:typeof n.month_spend_usd=="number"?n.month_spend_usd:null,month_spend_as_of:typeof n.month_spend_as_of=="string"?n.month_spend_as_of:null}}}function ln(e){let t=W("orgs",e);return {async list(){let s=await(await w(t,"/api/orgs")).json();return (Array.isArray(s.items)?s.items:[]).map(r=>Ds(r))},async get(n){let s=await w(t,`/api/orgs/${encodeURIComponent(n)}`);return No(await s.json())}}}function Uo(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{value:t}}catch{return {raw:e}}}function Jo(e){return (e||process.env.EVOLVE_DASHBOARD_URL||fe).replace(/\/$/,"")}function Mo(e){let t=e.apiKey||process.env.EVOLVE_API_KEY;if(!t)throw new Error("EVOLVE_API_KEY is required for managed secrets");return t}async function Fo(e){return await e.text().catch(()=>"")}async function un(e,t,n={}){let s=await fetch(`${Jo(e.dashboardUrl)}${t}`,{...n,headers:{Authorization:`Bearer ${Mo(e)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!s.ok)throw new Error(`Managed secrets request failed (${s.status}): ${await Fo(s)}`);return await s.json()}function Bo(e){let t=n=>Array.isArray(n)?n.filter(s=>typeof s=="string"):[];return {id:String(e.id??""),name:String(e.name??""),...typeof e.label=="string"?{label:e.label}:{},...e.delivery==="brokered"||e.delivery==="direct"?{delivery:e.delivery}:{},allowedHosts:t(e.allowed_hosts??e.allowedHosts),allowedPathPrefixes:t(e.allowed_path_prefixes??e.allowedPathPrefixes),allowedMethods:t(e.allowed_methods??e.allowedMethods),createdAt:String(e.created_at??e.createdAt??""),updatedAt:String(e.updated_at??e.updatedAt??""),lastUsedAt:typeof(e.last_used_at??e.lastUsedAt)=="string"?e.last_used_at??e.lastUsedAt:null}}function dt(e={}){return {async list(){return (await un(e,"/api/managed-secrets")).secrets??[]},async set(t){let n={name:t.name,value:t.value,delivery:t.delivery,...t.label!==void 0?{label:t.label}:{},...t.allowedHosts!==void 0?{allowed_hosts:t.allowedHosts}:{},...t.allowedPathPrefixes!==void 0?{allowed_path_prefixes:t.allowedPathPrefixes}:{},...t.allowedMethods!==void 0?{allowed_methods:t.allowedMethods}:{}},s=await un(e,"/api/managed-secrets",{method:"POST",body:JSON.stringify(n)});return {status:s.status,secret:Bo(s.secret??{})}},async delete(t){let n=await un(e,"/api/managed-secrets",{method:"DELETE",body:JSON.stringify({name:t.name,...t.label!==void 0?{label:t.label}:{}})});return {ok:n.ok,name:n.name,label:n.label}}}}var Ko=6e5,Wo=5e3;function js(e,t,n){let s=t??n;if(!Number.isFinite(s)||s<=0)throw new Error(`${e} must be a positive number`);return s}function pt(e){let t=e?.apiKey||process.env[pe];if(!t)throw new Error(`sessions() requires an API key. Set ${pe} or pass { apiKey } in config.`);let n=e?.dashboardUrl||fe;async function s(i,u){let d=await fetch(`${n}${i}`,{...u,headers:{Authorization:`Bearer ${t}`,...u?.headers}});if(!d.ok){let p=await d.text().catch(()=>"");throw new Error(`Dashboard API error (${d.status}): ${p||d.statusText}`)}return d}function r(i){return {id:i.id,tag:i.tag,agent:i.agent,model:i.model||null,provider:i.provider,sandboxId:i.sandboxId||null,state:i.isEnded?"ended":"live",runtimeStatus:i.runtimeStatus||"unknown",cost:typeof i.cost=="number"?i.cost:null,usage:ge(i.usage),createdAt:i.createdAt,endedAt:i.endedAt||null,stepCount:i.stepCount||0,toolStats:i.toolStats||null}}function a(i,u){if(i.status!=="ready")throw new Error(`Browser replay is not ready (status: ${String(i.status||"unknown")})`);if(typeof i.replayUrl!="string"||typeof i.downloadUrl!="string")throw new Error("Browser replay response missing replayUrl or downloadUrl");return {sessionId:i.sessionId||u,status:"ready",replayUrl:i.replayUrl,downloadUrl:i.downloadUrl,suggestedStartSeconds:typeof i.suggestedStartSeconds=="number"?i.suggestedStartSeconds:void 0,sizeBytes:typeof i.sizeBytes=="number"?i.sizeBytes:void 0,readyAt:typeof i.readyAt=="string"?i.readyAt:void 0}}let o=i=>new Promise(u=>setTimeout(u,i));function l(i){if(i==null)return [];if(!Array.isArray(i))throw new Error("Session transcript response gatewayCalls is not a list");return i.map((u,d)=>{let p=u&&typeof u=="object"&&!Array.isArray(u)?u:null;if(!p||Ie({data:p})===null)throw new Error(`Session transcript response gatewayCalls[${d}] is not a gateway usage event`);return p})}async function c(i,u){let d=new URLSearchParams;u?.since!=null&&d.set("since",String(u.since));let p=d.toString(),g=await(await s(`/api/sessions/${encodeURIComponent(i)}/events${p?`?${p}`:""}`)).json(),h=g.session;if(!h||typeof h!="object"||Array.isArray(h))throw new Error("Session transcript response missing session");let y=g.events||[];return {session:r(h),events:y,total:typeof g.total=="number"?g.total:(u?.since??0)+y.length,gatewayCalls:l(g.gatewayCalls),storedAt:Pe(g.storedAt,y.length,"Session transcript response")}}return {async list(i){let u=new URLSearchParams({paginationMode:"cursor",pageSize:String(Math.min(i?.limit??20,200)),paginated:"true"});if(i?.cursor&&u.set("cursor",i.cursor),i?.state&&i.state!=="all"&&u.set("state",i.state),i?.agent&&u.set("agent",i.agent),i?.tagPrefix&&u.set("tagPrefix",i.tagPrefix),i?.sort){let f={newest:"desc",oldest:"asc",cost:"desc"};u.set("sortDirection",f[i.sort]),i.sort==="cost"?u.set("sortField","cost"):u.set("sortField","timestamp");}let p=await(await s(`/api/sessions?${u}`)).json();return {items:(p.items||[]).map(r),nextCursor:p.nextCursor||null,hasMore:!!p.hasMore}},async get(i){let d=await(await s(`/api/sessions/${encodeURIComponent(i)}`)).json();return r(d)},async events(i,u){return (await c(i,u)).events},transcript:c,async download(i,u){let f=(await(await s(`/api/sessions/${encodeURIComponent(i)}`)).json()).tag||i,g=await fetch(`${n}/api/sessions/${encodeURIComponent(i)}/download`,{headers:{Authorization:`Bearer ${t}`},redirect:"follow"});if(!g.ok){let v=await g.text().catch(()=>"");throw new Error(`Download failed (${g.status}): ${v||g.statusText}`)}let h=u?.to||process.cwd();await promises.mkdir(h,{recursive:true});let y=path.join(h,`${f}.jsonl`);if(!g.body)throw new Error("Download response has no body");let _=stream.Readable.fromWeb(g.body);return await promises$1.pipeline(_,fs.createWriteStream(y)),y},async browserReplay(i,u){let d=js("timeoutMs",u?.timeoutMs,Ko),p=js("intervalMs",u?.intervalMs,Wo),f=Date.now()+d,g=`/api/sessions/${encodeURIComponent(i)}/browser-replay`;for(;;){let h=f-Date.now();if(h<=0)throw new Error(`Browser replay timed out after ${d}ms`);let y;try{y=await fetch(`${n}${g}`,{headers:{Authorization:`Bearer ${t}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,h))});}catch(v){let b=v.name;throw b==="AbortError"||b==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):v}let _={};if(y.ok)_=await y.json();else {let v=await y.text().catch(()=>"");throw new Error(`Dashboard API error (${y.status}): ${v||y.statusText}`)}if(_.status==="ready")return a(_,i);if(_.status==="failed"){let v=typeof _.error=="string"?_.error:"unknown error";throw new Error(`Browser replay failed: ${v}`)}if(Date.now()>=f)throw new Error(`Browser replay timed out after ${d}ms`);await o(Math.min(p,Math.max(0,f-Date.now())));}}}}var cn="evolve",ft="EVOLVE_SKILLS_DIR",Vs={evals:"docs-evals",agents:"docs-agents"},Gs="skills",ti="SKILL.source.md",ni=["references","templates"],Ks=[".mdx",".md"],Y=class extends Error{constructor(t){super(t),this.name="SkillsError";}};function Ue(e){try{return fs.statSync(e).isDirectory()}catch{return false}}function Us(e,t){return path.relative(e,t).split(path.sep).join("/")}function dn(e){let t=[],n=s=>{for(let r of fs.readdirSync(s,{withFileTypes:true})){let a=path.join(s,r.name);r.isDirectory()?n(a):r.isFile()&&t.push(a);}};return Ue(e)&&n(e),t.sort()}function Js(e){return [...Object.values(Vs),Gs].every(t=>Ue(path.join(e,t)))}function Je(e,t=process.env){let n=t[ft];if(n!==void 0&&n!==""){if(!Ue(n))throw new Y(`${ft} points at nothing: ${n}`);if(!Js(n))throw new Y(`${ft} must hold docs-evals/, docs-agents/ and skills/: ${n}`);return path.resolve(n)}for(let s of [e,path.join(e,"..","..")])if(Js(s))return path.resolve(s);throw new Y(`skills directory not found; set ${ft} or reinstall @evolvingmachines/evolve`)}function Ms(e,t,n){let s=path.join(t,"SKILL.md"),r=fs.readFileSync(s,"utf8"),a=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(r),o=null;if(a)try{o=yaml.parse(a[1]);}catch(c){throw new Y(`${s}: front matter does not parse (${c.message})`)}let l=o!==null&&typeof o=="object"&&typeof o.description=="string"?o.description.replace(/\s+/g," ").trim():"";return {name:e,dir:t,description:l,content:r,docs:n}}function Fs(e){return dn(e).length>0&&fs.existsSync(path.join(e,"SKILL.md"))&&!Ue(path.join(e,"SKILL.md"))}function fn(e){let t=[];for(let[s,r]of Object.entries(Vs)){let a=path.join(e,r);Fs(a)&&t.push(Ms(s,a,true));}let n=path.join(e,Gs);for(let s of fs.readdirSync(n,{withFileTypes:true})){let r=path.join(n,s.name);s.isDirectory()&&Fs(r)&&t.push(Ms(s.name,r,false));}return t.sort((s,r)=>s.name.localeCompare(r.name))}function gt(e){return fn(e).filter(t=>t.name!==cn)}function Ws(e,t){return fn(e).some(n=>n.name===t)}function Me(e,t){let n=fn(e).find(s=>s.name===t);if(!n){let s=gt(e).map(r=>r.name);throw new Y(`unknown skill "${t}" (skills: ${s.join(", ")})`)}return n}function gn(e){return Ks.some(t=>e.endsWith(t))}function Fe(e){return (e.docs?dn(e.dir).filter(n=>gn(n)&&!["SKILL.md",ti].includes(Us(e.dir,n))):ni.flatMap(n=>dn(path.join(e.dir,n)))).map(n=>({path:Us(e.dir,n),content:fs.readFileSync(n,"utf8")}))}function si(e){return Fe(e).filter(t=>gn(t.path)).map(t=>t.path.replace(/\.mdx?$/,""))}function Ys(e,t){let n=t.replace(/^\.\//,""),s=new Set([n,...Ks.map(a=>n+a)]),r=Fe(e).find(a=>gn(a.path)&&s.has(a.path));if(!r)throw new Y(`no page "${t}" in skill ${e.name} (pages: ${si(e).join(", ")})`);return {page:r.path.replace(/\.mdx?$/,""),path:r.path,content:r.content}}var Be=["claude","codex","cursor","copilot","gemini","opencode","agents"];function Xs(e,t=process.env){if(e==="opencode"){let n=t.XDG_CONFIG_HOME!==void 0&&t.XDG_CONFIG_HOME!==""?t.XDG_CONFIG_HOME:path.join(os$1.homedir(),".config");return path.join(n,"opencode","skills")}return path.join(os$1.homedir(),`.${e}`,"skills")}function ri(e){let t=e;for(;!fs.existsSync(t);){let n=path.dirname(t);if(n===t)break;t=n;}return t}function ai(e){try{return fs.statSync(e).isFile()}catch{return false}}function Qs(e,t,n){let s=Me(e,cn).content,r=[],a=[];for(let o of t){let l=path.join(o.skillsDir,cn,"SKILL.md"),c=ri(l);if(c===l){if(!ai(l)){a.push(`${l} is a directory, not a file`);continue}let i=fs.readFileSync(l,"utf8")===s;!i&&!n&&a.push(`${l} exists with different content; pass --force to overwrite it`),r.push({destination:o,path:l,write:!i});}else Ue(c)?r.push({destination:o,path:l,write:true}):a.push(`${c} is a file, so ${l} cannot be created`);}if(a.length>0)throw new Y(a.join(`
22
- `));return r.map(({destination:o,path:l,write:c})=>(c&&(fs.mkdirSync(path.dirname(l),{recursive:true}),fs.writeFileSync(l,s)),{target:o.target,path:l,status:c?"written":"unchanged"}))}var m=class extends Error{constructor(t){super(t),this.name="CliUsageError";}},Pn={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"}},C={limit:{kind:"number",short:"l",value:"<n>",help:"Page size",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume from a page cursor",group:"Paging"},columns:{kind:"string",value:"<keys|all|help>",help:"Choose and order columns; 'help' lists them",group:"Output"},quiet:{kind:"boolean",short:"q",help:"Print only ids, one per line",group:"Output"},"no-trunc":{kind:"boolean",help:"Full cell content instead of one-line truncation",group:"Output"},"no-headers":{kind:"boolean",help:"Omit the header row in piped output",group:"Output"}},mn={kind:"string",value:"<my|shared>",help:"What you created, or your organizations' rows that teammates created",default:"my",group:"Filter"},hn="An analysis id, or its unambiguous prefix, names that run. A trial id, or its prefix, names the trial's latest analysis, the one `trial show` prints on its analysis row. A prefix matching both an analysis and a trial is refused as ambiguous.",mt={kind:"number",value:"<n>",help:"Skip the first N events; to resume, pass the count you already hold",group:"Selection"},Pr={config:{kind:"string",short:"c",value:"<path>",help:"Job config file, YAML or JSON; flags override its fields",group:"Config"},"print-config":{kind:"boolean",help:"Print the resolved job body as JSON and exit",group:"Config"},"job-name":{kind:"string",value:"<name>",help:"Label for the job",default:"generated",group:"Job"},"n-attempts":{kind:"number",short:"k",value:"<n>",help:"Attempts per task and arm",default:"1",group:"Job"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Parallel trials",default:"4",group:"Job"},yes:{kind:"boolean",short:"y",help:"Accepted for compatibility; a hosted run has nothing to confirm",group:"Job"},dataset:{kind:"repeat",short:"d",value:"<name[@version]>",help:"Dataset to run; repeatable; a bare name is the active version",group:"Datasets"},"include-task-name":{kind:"repeat",short:"i",value:"<glob>",help:"Only tasks matching the glob, in every dataset; repeatable",group:"Datasets"},"exclude-task-name":{kind:"repeat",short:"x",value:"<glob>",help:"Skip tasks matching the glob, in every dataset; repeatable",group:"Datasets"},"n-tasks":{kind:"number",short:"l",value:"<n>",help:"Cap the task count of each dataset, after the filters",group:"Datasets"},agent:{kind:"string",short:"a",value:"<name[@version]>",help:"Agent harness, built-in or registered",group:"Agent"},model:{kind:"repeat",short:"m",value:"<name>",help:"Model; repeatable, one arm per model",group:"Agent"},effort:{kind:"string",value:"<value>",help:"Reasoning effort for every arm; an agent that cannot honor it is refused",default:"the agent's own",group:"Agent"},preset:{kind:"string",value:"<name>",help:"Settings preset for every arm: no-internet or pinned-context",group:"Agent"},ak:{kind:"repeat",aliases:["agent-kwarg"],value:"key=value",help:"Agent kwarg for every arm; repeatable; config=<path|JSON> is the native settings file",group:"Agent"},skill:{kind:"repeat",aliases:["skills"],value:"<ref|path>",help:"Skill for every arm; repeatable: skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], a git URL, upload:<id>, name:<skill-name>, or a local folder",group:"Agent"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env for every agent run; repeatable",group:"Agent"},"verifier-env":{kind:"repeat",aliases:["ve"],value:"KEY=VALUE",help:"Env for every verifier run; repeatable; only REWARDKIT_JUDGE and REWARDKIT_MODEL",group:"Verifier"},secret:{kind:"repeat",value:"NAME[@LABEL][=ENVNAME]",help:"Attach a stored env secret to every agent run; repeatable; @LABEL picks a row, =ENVNAME renames it",group:"Secrets"},"secret-inline":{kind:"repeat",value:"NAME[@LABEL]:DELIVERY=VALUE",help:"Store VALUE as an env secret and attach it in one step; repeatable; DELIVERY is brokered or direct",group:"Secrets"},"max-trial-spend":{kind:"number",value:"<usd>",help:"Model-spend cap for each trial, in USD",default:"200",group:"Spend and retries"},"max-retries":{kind:"number",short:"r",value:"<n>",help:"Automatic retries per trial on infrastructure errors; 0 turns them off",default:"the platform default",group:"Spend and retries"},"retry-include":{kind:"repeat",value:"<exception>",help:"Exception types to retry on; repeatable",default:"everything --retry-exclude admits",group:"Spend and retries"},"retry-exclude":{kind:"repeat",value:"<exception>",help:"Exception types never retried; repeatable; wins over --retry-include",default:"Harbor's non-retryable set",group:"Spend and retries"},analyze:{kind:"boolean",help:"Analyze each trial's trace against a rubric as it settles",group:"Analysis"},"analyze-model":{kind:"string",value:"<name>",help:"Model for the analyzer; implies --analyze",default:"the analyze default",group:"Analysis"},"analyze-rubric":{kind:"string",value:"<path>",help:"Rubric file for the analyzer, TOML, YAML or JSON; implies --analyze",default:"the built-in rubric",group:"Analysis"},"analyze-prompt":{kind:"string",value:"<path>",help:"Prompt file for the analyzer, replacing the built-in prompt; implies --analyze",group:"Analysis"},"analyze-provider":{kind:"string",value:"<provider>",help:"Sandbox provider for the analyzer; implies --analyze",default:"the analysis default",group:"Analysis"},"analyze-effort":{kind:"string",value:"<value>",help:"Reasoning effort for the analyzer; implies --analyze",default:"the model's own",group:"Analysis"},"timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for every task timeout, this job only",default:"1.0",group:"Timeouts"},"agent-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the agent execution timeout; overrides --timeout-multiplier",group:"Timeouts"},"verifier-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the verifier timeout; overrides --timeout-multiplier",group:"Timeouts"},"agent-setup-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the agent setup timeout; overrides --timeout-multiplier",group:"Timeouts"},"environment-build-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the environment build timeout; overrides --timeout-multiplier",group:"Timeouts"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider: e2b, daytona or modal",default:"daytona",group:"Environment"},watch:{kind:"boolean",help:"Stream the job's events until it finishes",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final block",group:"Output"}};function $r(e){return [`${e} -d terminal-bench-4@4.0 -a codex -m gpt-5.5 -l 5 --watch`,`${e} \\
21
+ `)});}}}}function V(e,t){let n,s=()=>n??=e({limit:t?.limit,cursor:t?.cursor});return {then(r,a){return s().then(r,a)},catch(r){return s().catch(r)},finally(r){return s().finally(r)},async*[Symbol.asyncIterator](){let r=t?.cursor;for(;;){let a=await e({limit:t?.limit,cursor:r});for(let o of a.items)yield o;if(!a.nextCursor)return;r=a.nextCursor;}}}}function ae(e){let t=new FormData;for(let[n,s]of Object.entries(e))s!==void 0&&t.set(n,s);return t}async function Eo(e){let{readFileSync:t,readdirSync:n,statSync:s}=await import('fs'),{basename:r,join:a,resolve:o}=await import('path'),l=o(e),c=f=>s(f,{throwIfNoEntry:false})?.isFile()===true,i=f=>s(f,{throwIfNoEntry:false})?.isDirectory()===true;if(!i(l))throw new Error(`datasets().preflight(): not a directory: ${l}`);let u=[],d=l;if(c(a(l,"task.toml"))){let f=n(l,{withFileTypes:true}).filter(g=>g.isDirectory()&&!g.name.startsWith(".")).filter(g=>c(a(l,g.name,"task.toml"))).map(g=>g.name);if(i(a(l,"tasks"))||f.length>0)throw new Error(`${l} is ambiguous: it carries task.toml at its root (a single-task shape) AND corpus-shaped content \u2014 the import refuses this too; point at the one task directory or at a corpus of task directories, not a mix`);u.push({name:r(l),dir:l});}else {d=i(a(l,"tasks"))?a(l,"tasks"):l;for(let f of n(d,{withFileTypes:true})){if(!f.isDirectory()||f.name.startsWith("."))continue;let g=a(d,f.name);if(!c(a(g,"task.toml")))throw new Error(`${g} has no task.toml \u2014 every directory of a corpus must be a task directory (the import fails on it rather than skipping it)`);u.push({name:f.name,dir:g});}if(u.length===0)throw new Error(`${d} holds no task directories \u2014 nothing to check`);u.sort((f,g)=>f.name<g.name?-1:f.name>g.name?1:0);}let p=(d===l?[l]:[d,l]).map(f=>a(f,"dataset.toml")).find(c);return {tasks:u.map(({name:f,dir:g})=>({name:f,task_toml:t(a(g,"task.toml"),"utf8")})),...p!==void 0?{dataset_toml:t(p,"utf8")}:{}}}async function Io(e,t,n){let{postMultipartFile:s}=await Promise.resolve().then(()=>(Gt(),as)),r=await s({url:`${e.baseUrl}${t}`,method:n.method??"POST",headers:{Authorization:`Bearer ${e.apiKey}`},fields:n.fields,file:n.file,...n.onBytes!==void 0?{onBytes:n.onBytes}:{}});return r.ok||await ut(r),r}async function Ts(e,t,n,s){if(s.resumableThreshold!==void 0){let{stat:r}=await import('fs/promises'),{size:a}=await r(n);if(a>s.resumableThreshold){let{uploadArchiveResumable:o}=await Promise.resolve().then(()=>($t(),Wn)),l=await o({baseUrl:e.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`},file:{path:n},fields:s.fields,...s.resumablePath!==void 0?{sessionsPath:s.resumablePath}:{},...s.onBytes!==void 0?{onBytes:s.onBytes}:{},...s.onRegistered!==void 0?{onRegistered:s.onRegistered}:{}});return l.ok||await ut(l),l}}return await Io(e,t,{method:s.method,fields:s.fields,file:{path:n,filename:s.filename},...s.onBytes!==void 0?{onBytes:s.onBytes}:{}})}async function be(e,t,n){let{tarGzipDirectoryToFile:s}=await Promise.resolve().then(()=>(nt(),tt)),{mkdtemp:r,rm:a}=await import('fs/promises'),{tmpdir:o}=await import('os'),{join:l}=await import('path'),c=await r(l(o(),"evolve-upload-"));try{let i=l(c,n.filename);return await s(n.directory,i),await Ts(e,t,i,n)}finally{await a(c,{recursive:true,force:true});}}function Po(e){let t,n=()=>(t||(t=(async()=>{let s=await e.next();for(;!s.done;)s=await e.next();return s.value})()),t);return {then(s,r){return n().then(s,r)},catch(s){return n().catch(s)},finally(s){return n().finally(s)},[Symbol.asyncIterator](){return e}}}var Rs="x-package-sha256",it=class extends Error{constructor(n,s){super(`downloaded bytes do not match the digest the server stated (expected ${n}, got ${s})`);this.expected=n;this.actual=s;}name="EvolveDigestMismatchError"},lt=class extends Error{constructor(n,s){super(`download ended early: the server declared ${n} bytes and ${s} arrived`);this.expectedBytes=n;this.receivedBytes=s;}name="EvolveIncompleteDownloadError"};function Es(e,t){let n=e.headers.get("Content-Length");if(n===null)return;let s=Number(n);if(Number.isFinite(s)&&t!==s)throw new lt(s,t)}async function Is(e,t){let n=e.headers.get(Rs);if(!n)return;let{createHash:s}=await import('crypto'),r=s("sha256").update(t).digest("hex");if(r!==n)throw new it(n,r)}function $o(e,t){let s=(e.headers.get("Content-Disposition")||"").match(/filename="([^"]+)"/);if(!s)return t;let r=path.basename(s[1]);return r===""||r==="."||r===".."||/[/\\]/.test(r)||/[\u0000-\u001f]/.test(r)?t:r}async function Ps(e,t,n){if(!e.body)throw new Error("Download response has no body");await promises.mkdir(t,{recursive:true});let s=path.join(t,$o(e,n)),{createHash:r,randomBytes:a}=await import('crypto'),o=`${s}.${a(8).toString("hex")}.part`,l=r("sha256"),c=0,i=stream.Readable.fromWeb(e.body);i.on("data",u=>{l.update(u),c+=u.length;});try{await promises$1.pipeline(i,fs$1.createWriteStream(o));let u=e.headers.get("Content-Length");if(u!==null&&c!==Number(u))throw new lt(Number(u),c);let d=e.headers.get(Rs),p=l.digest("hex");if(d&&p!==d)throw new it(d,p);await promises.rename(o,s);}catch(u){throw await promises.rm(o,{force:true}).catch(()=>{}),u}return s}async function rn(e,t,n,s){let r=await w(e,t);if(n?.stream){if(!r.body)throw new Error("Download response has no body");return r.body}if(n?.to)return Ps(r,n.to,s);let a=Buffer.from(await r.arrayBuffer());return Es(r,a.length),await Is(r,a),a}function Q(e){let t=W("datasets",e);async function n(i){let u=await w(t,`/api/datasets/imports/${encodeURIComponent(i)}`);return ye(await u.json())}function s(i){if(!i||typeof i!="object")return null;let u=i;return {git_url:u.git_url??null,ref:u.ref,current_commit:u.current_commit,path:u.path??null,latest_commit:u.latest_commit??null,acked_commit:u.acked_commit??null,moved:u.moved===true,behind_by:typeof u.behind_by=="number"?u.behind_by:null,checked_at:u.checked_at??null,error:u.error??null,auto_import:u.auto_import===true}}function r(i){return {name:i.name,title:i.title??null,description:i.description??null,active_version:i.active_version?_e(i.active_version):null,latest_version:i.latest_version?_e(i.latest_version):null,versions:(i.versions||[]).map(_e),selected_version:i.selected_version?_e(i.selected_version):null,tasks:O(i.tasks,po),failed_tasks:co(i.failed_tasks),upstream:s(i.upstream),created_at:i.created_at,updated_at:i.updated_at}}async function a(i,u){let d=Xt(i),p=U(u,{version:d.version}),f=await w(t,`/api/datasets/${encodeURIComponent(d.name)}${p}`);return r(await f.json())}async function o(i,u){let d=u?.pollIntervalMs??je,p=u?.settleTimeoutMs??io,f=Date.now()+p,g=`${i.name}@${i.version}`,h=null,y=null,_=()=>y?.state==="FAILED"?new oe("settle_timeout",`Import ${i.id}'s dataset "${i.name}" version "${i.version}" settled FAILED, but the final import read kept answering rate-limited/unavailable past the ${p}ms settle budget. Read the failure with datasets().getImport("${i.id}").`,{importId:i.id,dataset:i.name,version:i.version,state:y.state}):new oe("settle_timeout",`Import ${i.id} completed, but dataset "${i.name}" version "${i.version}" did not settle within ${p}ms: last observed state ${y?.state??"never observed"}. Keep following with datasets().get("${g}").`,{importId:i.id,dataset:i.name,version:i.version,state:y?.state??null}),v=async b=>{for(;;){X(u?.signal);try{return await b()}catch(S){if(!(S instanceof x)||S.status!==429&&S.status!==503)throw S;let A=f-Date.now();if(A<=0)throw _();await j(Math.min(Math.max((S.retryAfterSec??0)*1e3,d),A),u?.signal);}}};for(;;){X(u?.signal);let b=await v(()=>a(g,{limit:1})),S=b.selected_version;if(S){if(y=S,S.state!==h&&(h=S.state,u?.onVersion?.(S,b)),S.state==="FAILED")return v(()=>n(i.id));if(S.state==="READY"||S.state==="ARCHIVED")return i}if(Date.now()>=f)throw _();await j(d,u?.signal);}}function l(i){return {name:i.name,title:i.title??null,description:i.description??null,active_version:i.active_version?_e(i.active_version):null,latest_version:i.latest_version?_e(i.latest_version):null,upstream:s(i.upstream)}}async function c(i){let u=await w(t,`/api/datasets${U(i,{search:i?.search})}`);return O(await u.json(),l)}return {list(i){return V(u=>c({...u,search:i?.search}),i)},get:a,async getActive(i,u){let d=await a(i,u);if(d.active_version===null)throw new Zt(i);return {name:d.name,title:d.title,description:d.description,active_version:d.active_version,version:d.active_version.version,tasks:d.tasks??{items:[],nextCursor:null,hasMore:false},versions:d.versions??[],created_at:d.created_at,updated_at:d.updated_at}},async getTaskBuild(i,u){let d=Xt(i);if(d.version===void 0)throw new Error(`datasets().getTaskBuild() needs "name@version" \u2014 a task's build outcome belongs to one immutable version (got "${i}")`);let f=await(await w(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}/build`)).json();return {task_name:f.task_name??u,state:f.state,failure:f.failure&&typeof f.failure=="object"?ks(f.failure):null,build_log_ref:f.build_log_ref??null}},async preflight(i){let u=i?.source?.directory;if(typeof u!="string"||u==="")throw new Error("datasets().preflight() requires { source: { directory } } \u2014 a local corpus directory whose task.toml files are checked server-side before any upload");let d=await Eo(u);return await(await w(t,"/api/datasets/preflight",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json()},async publish(i,u){let d=i.source;if(d?.directory){if(i.name===void 0||i.version===void 0){let{existsSync:f}=await import('fs'),{join:g}=await import('path');if(!(f(g(d.directory,"dataset.toml"))||f(g(d.directory,"tasks","dataset.toml"))))throw new Error(`datasets().publish() needs ${i.name===void 0?"a name":"a version"} \u2014 pass it explicitly, or add a dataset.toml manifest to the corpus directory (the server then derives name and version from it)`)}let p=await be(t,"/api/datasets/publish",{fields:{name:i.name,version:i.version},directory:d.directory,filename:"corpus.tar.gz",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{},resumableThreshold:Te});return ye(await p.json())}if(d&&"archive_url"in d&&d.archive_url){if(i.name===void 0||i.version===void 0)throw new Error("datasets().publish() requires name and version for an archive_url source \u2014 the server fetches the tarball only after the publish is accepted, so a manifest cannot supply them");let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({name:i.name,version:i.version,archive_url:d.archive_url})});return ye(await p.json())}if(d&&"hub_package"in d&&d.hub_package){let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({...i.name!==void 0?{name:i.name}:{},...i.version!==void 0?{version:i.version}:{},hub_package:d.hub_package})});return ye(await p.json())}if(d&&"git_url"in d&&d.git_url){if(i.name===void 0||i.version===void 0)throw new Error("datasets().publish() requires name and version for a git source \u2014 a dataset.toml manifest can only supply them for a directory source, because a git repository is cloned server-side after the publish is accepted");let p=await w(t,"/api/datasets/publish",{method:"POST",body:ae({name:i.name,version:i.version,git_url:d.git_url,git_ref:d.git_ref,...d.git_path!==void 0?{git_path:d.git_path}:{}})});return ye(await p.json())}throw new Error("datasets().publish() requires a source: a git source ({ source: { git_url, git_ref } }), a local corpus directory ({ source: { directory } }), a public tarball url ({ source: { archive_url } }), or a Harbor hub package ({ source: { hub_package } }); plus name and version (optional for a directory whose corpus carries a dataset.toml manifest, and for a hub package, which supplies its own defaults)")},getImport:n,async watchImport(i,u){let d=u?.pollIntervalMs??je,p=null,f=null;for(;;){X(u?.signal);let g;try{g=await n(i);}catch(y){if(y instanceof x&&(y.status===429||y.status===503)){await j(Math.max((y.retryAfterSec??0)*1e3,d),u?.signal);continue}throw y}let h=`${g.status}${g.receiving===true?":receiving":""}`;if(h!==p&&(p=h,u?.onStatus?.(g)),g.progress!==null){let y=JSON.stringify(g.progress);y!==f&&(f=y,u?.onProgress?.(g.progress,g));}if(g.status==="FAILED")return g;if(g.status==="COMPLETED")return o(g,u);await j(d,u?.signal);}},download:(async(i,u)=>{let d=Xt(i),p=d.version?`?version=${encodeURIComponent(d.version)}`:"",f=await w(t,`/api/datasets/${encodeURIComponent(d.name)}/download${p}`);if(u?.stream){if(!f.body)throw new Error("Package response has no body");return f.body}if(u?.to)return Ps(f,u.to,`${d.name}-corpus.tar.gz`);let g=Buffer.from(await f.arrayBuffer());return Es(f,g.length),await Is(f,g),g}),listImports(i){return V(async u=>{let d=new URLSearchParams;u.limit!==void 0&&d.set("limit",String(u.limit)),u.cursor!==void 0&&d.set("cursor",u.cursor),i?.status!==void 0&&d.set("status",i.status),i?.dataset!==void 0&&d.set("dataset",i.dataset);let p=d.toString()?`?${d}`:"",f=await w(t,`/api/datasets/imports${p}`);return O(await f.json(),ye)},i)},async activate(i,u){let d=await w(t,`/api/datasets/${encodeURIComponent(i)}/versions/${encodeURIComponent(u)}/activate`,{method:"POST"});return r(await d.json())},async update(i,u){let d=await w(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return l(await d.json())},async delete(i){await w(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"DELETE"});}}}function Le(e){let t=W("agents",e);return {async create(n){let s=ys("agents().create()",n),r=s.directory?await be(t,"/api/agents",{fields:s.fields,directory:s.directory,filename:"source.tar.gz"}):await w(t,"/api/agents",{method:"POST",body:ae(s.fields)});return rt(await r.json())},list(n){return V(async s=>{let r=await w(t,`/api/agents${U(s)}`);return O(await r.json(),rt)},n)},async get(n){let s=await w(t,`/api/agents/${encodeURIComponent(n)}`);return rt(await s.json())},async delete(n){await w(t,`/api/agents/${encodeURIComponent(n)}`,{method:"DELETE"});},async upsert(n,s){let r=ys("agents().upsert()",{...s,name:n}),a=r.directory?await be(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",fields:r.fields,directory:r.directory,filename:"source.tar.gz"}):await w(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",body:ae(r.fields)});return rt(await a.json())}}}function ys(e,t){let n=typeof t.install_script=="string",s=typeof t.directory=="string";if(n&&s)throw new Error(`${e} takes EITHER an install script ({ install_script }) or a local directory ({ directory }), not both`);if(!n&&!s)throw new Error(`${e} requires either an install script ({ install_script }) or a local directory ({ directory }), plus run_command`);let r={name:t.name,run_command:t.run_command,...t.env!==void 0?{env:JSON.stringify(t.env)}:{},...n?{install_script:t.install_script}:{}};return s?{fields:r,directory:t.directory}:{fields:r}}function Qt(e){return {id:e.id,name:e.name,digest:e.digest,size_bytes:e.size_bytes??0,description:e.description??null,ref:e.ref??`upload:${e.id}`,created_at:e.created_at}}function ie(e){let t=W("skills",e);return {async upload(n){if(typeof n!="string"||!n.trim())throw new Error("skills().upload() requires a local skill directory path");let{basename:s,resolve:r}=await import('path'),a=s(r(n)),l=await(await be(t,"/api/skills",{fields:{name:a||void 0},directory:n,filename:"skill.tar.gz"})).json();return (Array.isArray(l.skills)?l.skills:[l]).map(Qt)},list(n){return V(async s=>{let r=await w(t,`/api/skills${U(s)}`);return O(await r.json(),Qt)},n)},async get(n){let r=await(await w(t,`/api/skills/${encodeURIComponent(n)}`)).json();return {...Qt(r),skill_md:r.skill_md??null}},async delete(n){await w(t,`/api/skills/${encodeURIComponent(n)}`,{method:"DELETE"});}}}function E(e){let t=W("jobs",e);async function n(c){let i=await w(t,`/api/jobs/${encodeURIComponent(c)}`);return H(await i.json())}async function s(c){let i=await w(t,`/api/jobs/imports/${encodeURIComponent(c)}`);return Oe(await i.json())}async function r(c){let i=await w(t,`/api/jobs${U(c,{search:c?.search,scope:c?.scope})}`);return O(await i.json(),H)}function a(c){let i=c.trials??{};return {task_name:c.task_name,source:c.source,trials:{total:i.total??0,byStatus:i.byStatus??{}},mean_reward:c.mean_reward??null,cost_usd:c.cost_usd??null,check:c.check&&typeof c.check=="object"&&!Array.isArray(c.check)?c.check:null}}async function o(c,i){let u=U(i,{status:i?.status?.length?i.status.join(","):void 0,dataset:i?.dataset}),d=await w(t,`/api/jobs/${encodeURIComponent(c)}/trials${u}`);return O(await d.json(),nn)}async function*l(c,i){let{onEvent:u,signal:d}=i??{},p=i?.reconnectDelayMs??ro,f=i?.maxReconnectDelayMs??De,g=null,h=false,y=false,_=p;for(;!h;){X(d);let v;try{v=await fetch(`${t.baseUrl}/api/jobs/${encodeURIComponent(c)}/events`,{headers:{Authorization:`Bearer ${t.apiKey}`,Accept:"text/event-stream",...g!==null?{"Last-Event-ID":String(g)}:{}},signal:d});}catch($){if(_s($,d))throw $;await j(_,d),_=Math.min(_*2,f);continue}if(!v.ok){if(v.status===429||v.status>=500){let $=await v.text().catch(()=>""),R=Ae($,v)??0,P=R>0?Math.max(R*1e3,_):_;await j(P,d),_=Math.min(_*2,f);continue}await ut(v);}if(!v.body)throw new Error("Event stream response has no body");let b=false,S=[],A=Ro($=>{let R=Number($.id),P={seq:Number.isInteger(R)?R:-1,type:$.event||"message",data:$.data?Oo($.data):{}};Number.isInteger(R)&&(g=R),b=true,oo.has(P.type)&&(h=true),S.push(P);}),N=v.body.getReader(),F=new TextDecoder;try{for(;!h;){let{done:$,value:R}=await N.read();if($)break;A.push(F.decode(R,{stream:!0}));for(let P of S)u?.(P),yield P;S.length=0;}}catch($){if(_s($,d))throw $}finally{await N.cancel().catch(()=>{});}if(h)break;X(d);let re=await n(c);if(ao.has(re.status)){if(y)return re;y=true;continue}b&&(_=p),await j(_,d),_=Math.min(_*2,f);}return n(c)}return {async start(c,i){let u=await w(t,"/api/jobs",{method:"POST",headers:{"Content-Type":"application/json",...i?.idempotencyKey?{"Idempotency-Key":i.idempotencyKey}:{}},body:JSON.stringify(c)});return H(await u.json())},get:n,list(c){return V(i=>r({...i,search:c?.search,scope:c?.scope}),c)},trials(c,i){return V(u=>o(c,{...u,status:i?.status,dataset:i?.dataset}),i)},tasks(c,i){return V(async u=>{let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/tasks${U(u)}`);return O(await d.json(),a)},i)},watch(c,i){return Po(l(c,i))},async cancel(c){let i=await w(t,`/api/jobs/${encodeURIComponent(c)}/cancel`,{method:"POST"});return H(await i.json())},async compare(c){let i=c.map(encodeURIComponent).join(","),d=await(await w(t,`/api/jobs/compare?ids=${i}`)).json();return {jobs:(d.jobs||[]).map(vo),taskMatrix:(d.taskMatrix||[]).map(Ao)}},async resume(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/resume`,{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(i??{})});return H(await d.json())},async retry(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/retry`,{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(i??{})});return H(await d.json())},async regrade(c,i){let u={};i?.statuses?.length&&(u.statuses=i.statuses),i?.task_name!==void 0&&(u.task_name=i.task_name);let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/regrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return H(await d.json())},async analyze(c,i){let u=await w(t,`/api/jobs/${encodeURIComponent(c)}/analyze`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i??{})});return H(await u.json())},async watchAnalysis(c,i){let u=i?.pollIntervalMs??je,d=u,p=null;for(;;){X(i?.signal);let f;try{f=await n(c);}catch(_){if(_ instanceof x&&(_.status===429||_.status===503)){await j(Math.max((_.retryAfterSec??0)*1e3,d),i?.signal),d=Math.min(d*2,De);continue}throw _}let g=f.stats.analysis??null,h=g?JSON.stringify([g.n_completed,g.n_failed,g.n_pending]):null,y=h!==null&&h!==p;if(y&&(p=h,i?.onStats?.(f)),g?.n_pending===0)return f;d=y?u:Math.min(d*2,De),await j(d,i?.signal);}},download:(async(c,i)=>rn(t,`/api/jobs/${encodeURIComponent(c)}/download`,i,`job-${c}-results.tar.gz`)),async upload(c,i){let u={dataset:i?.dataset};if(typeof c=="object"&&c!==null){if(typeof c.archive_url!="string"||!c.archive_url.trim())throw new Error("jobs().upload() with a URL source requires { archive_url: 'https://\u2026' }");let b=await w(t,"/api/jobs/upload",{method:"POST",body:ae({...u,archive_url:c.archive_url})});return Oe(await b.json())}if(typeof c!="string"||!c.trim())throw new Error("jobs().upload() requires a job directory (or .tar.gz archive) path, or { archive_url }");let d={fields:u,filename:"job.tar.gz",resumableThreshold:Te,resumablePath:"/api/jobs/upload/uploads",...i?.onUploadProgress!==void 0?{onBytes:i.onUploadProgress}:{},...i?.onRegistered!==void 0?{onRegistered:i.onRegistered}:{}},{stat:p}=await import('fs/promises');if((await p(c).catch(()=>null))?.isFile()){let b=await Ts(t,"/api/jobs/upload",c,d);return Oe(await b.json())}let{existsSync:g}=await import('fs'),{join:h,resolve:y}=await import('path'),_=y(c);for(let b of ["result.json","config.json"])if(!g(h(_,b)))throw new Error(`${_} does not contain ${b}`);let v=await be(t,"/api/jobs/upload",{...d,directory:_});return Oe(await v.json())},getImport:s,async watchImport(c,i){let u=i?.pollIntervalMs??je,d=null,p=null;for(;;){X(i?.signal);let f;try{f=await s(c);}catch(h){if(h instanceof x&&(h.status===429||h.status===503)){await j(Math.max((h.retryAfterSec??0)*1e3,u),i?.signal);continue}throw h}let g=`${f.status}${f.receiving?":receiving":""}`;if(g!==d&&(d=g,i?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==p&&(p=h,i?.onProgress?.(f.progress,f));}if(f.status==="COMPLETED"||f.status==="FAILED")return f;await j(u,i?.signal);}},listImports(c){return V(async i=>{let u=new URLSearchParams;i.limit!==void 0&&u.set("limit",String(i.limit)),i.cursor!==void 0&&u.set("cursor",i.cursor),c?.status!==void 0&&u.set("status",c.status);let d=u.toString()?`?${u}`:"",p=await w(t,`/api/jobs/imports${d}`);return O(await p.json(),Oe)},c)},async delete(c){let u=await(await w(t,`/api/jobs/${encodeURIComponent(c)}`,{method:"DELETE"})).json();return {job_id:u.job_id??c,trials_deleted:u.trials_deleted??0,analyses_deleted:u.analyses_deleted??0}},async grep(c,i,u){let d=await w(t,`/api/jobs/${encodeURIComponent(c)}/grep${U(u,{q:i,type:u?.type})}`);return O(await d.json(),xo)}}}function G(e){let t=W("trials",e);async function n(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/trace${U(a,{type:a?.type,grep:a?.grep,tail:a?.tail!==void 0?String(a.tail):void 0})}`);return O(await o.json(),As)}async function s(r,a){let l=await(await w(t,`/api/trials/${encodeURIComponent(r)}/trace?stream=${a}`)).json();return a==="agent-home"?l.files??null:l.log??null}return {async get(r){let a=await w(t,`/api/trials/${encodeURIComponent(r)}`);return nn(await a.json())},trace:n,artifact:s,async*traceEvents(r,a){let o=a?.cursor;for(;;){let l=await n(r,{...a,cursor:o});for(let c of l.items)yield c;if(!l.nextCursor)return;o=l.nextCursor;}},async regrade(r){let a=await w(t,`/api/trials/${encodeURIComponent(r)}/regrade`,{method:"POST"});return H(await a.json())},async retry(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/retry`,{method:"POST",...a?.idempotencyKey?{headers:{"Idempotency-Key":a.idempotencyKey}}:{}});return H(await o.json())},async stop(r){let o=await(await w(t,"/api/trials/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({trial_ids:r})})).json();return {stopped:(o.stopped??[]).map(nn),stopped_analyses:(o.stopped_analyses??[]).map(ot).filter(l=>l!==null),already_terminal:o.already_terminal??[],not_found:o.not_found??[]}},async files(r,a){let o=await w(t,`/api/trials/${encodeURIComponent(r)}/files${U(a)}`);return O(await o.json(),l=>({path:l.path,size_bytes:l.size_bytes}))},async file(r,a,o){let l=a.split("/").filter(Boolean).map(encodeURIComponent).join("/"),c=To(o),i=await w(t,`/api/trials/${encodeURIComponent(r)}/files/${l}`,c?{headers:{Range:c}}:void 0);return Buffer.from(await i.arrayBuffer())}}}function $s(e){let t=e?.update;return typeof t?.sessionUpdate=="string"?t.sessionUpdate:"unknown"}function ke(e){let t=W("analyses",e),n=new Set;async function s(o){if(n.has(o))return;let l;try{l=await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`);}catch(c){throw c instanceof x&&c.status===400?new Error(`"${o}" is not an analysis run (the artifacts door refuses it typed) \u2014 for a trial's artifacts use trials()`):c}await l.text().catch(()=>{}),n.add(o);}async function r(o,l){await s(o);let i=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=${l}`)).json();return l==="agent-home"?i.files??null:i.log??null}async function a(o){let l=await w(t,`/api/analyses${U(o,{scope:o?.scope,job:o?.job,status:o?.status&&o.status.length>0?o.status.join(","):void 0})}`);return O(await l.json(),c=>{let i=ot(c);if(i===null)throw new Error("The analyses list served an unreadable analysis object");return i})}return {list(o){return V(l=>a({...l,scope:o?.scope,job:o?.job,status:o?.status}),o)},async get(o){let c=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`)).json(),i=ot(c.analysis);if(i===null)throw new Error(`The analysis feed served no readable verdict object for "${o}"`);return n.add(o),i},async transcript(o,l){let c=l?.since;if(c!==void 0&&(!Number.isInteger(c)||c<0))throw new Error(`transcript() since must be a non-negative integer, got ${c}`);let u=await(await w(t,`/api/traces/trials/${encodeURIComponent(o)}/events`+(c!==void 0?`?since=${c}`:""))).json(),d=u.session??{};if(d.kind!=="analysis"){let g=typeof d.kind=="string"?d.kind:"trial";throw new Error(`"${o}" is not an analysis run (the feed resolves it as a ${g}) \u2014 for a trial's trace use trials()`)}let p=c??0,f=Array.isArray(u.events)?u.events:[];return {id:typeof d.id=="string"?d.id:o,analyzed_trial_id:typeof d.analyzedTrialId=="string"?d.analyzedTrialId:null,job_id:typeof d.jobId=="string"?d.jobId:null,task_name:typeof d.tag=="string"?d.tag:null,model_name:typeof d.model=="string"?d.model:null,sandbox_provider:typeof d.provider=="string"?d.provider:null,sandbox_id:typeof d.sandboxId=="string"?d.sandboxId:null,is_ended:d.isEnded===true,total:typeof u.total=="number"?u.total:p+f.length,events:f.map((g,h)=>({seq:p+h,type:$s(g),data:g&&typeof g=="object"&&!Array.isArray(g)?g:{}})),gateway_calls:xs(u.gatewayCalls),stored_at:Pe(u.storedAt,f.length,"Analysis transcript response")}},artifact:r,download:(async(o,l)=>rn(t,`/api/analyses/${encodeURIComponent(o)}/download`,l,`analysis-${o}.tar.gz`))}}function at(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("The checks surface served an unreadable check object");let t=e,n=Array.isArray(t.results)?t.results.filter(s=>!!s&&typeof s=="object"&&!Array.isArray(s)):[];return {...t,results:n}}function le(e){let t=W("checks",e);async function n(l){let c=await w(t,`/api/checks/${encodeURIComponent(l)}`);return at(await c.json())}async function s(l){let c=await w(t,`/api/checks${U(l,{scope:l?.scope,status:l?.status&&l.status.length>0?l.status.join(","):void 0})}`);return O(await c.json(),at)}let r=new Set;async function a(l){let c;try{c=await w(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=task-check`);}catch(d){throw d instanceof x&&d.status===400?new Error(`"${l}" is not a task check (the artifacts door refuses it typed) \u2014 for a trial's artifacts use trials(), for an analysis's use analyses()`):d}let u=(await c.json()).task_check;if(!u||typeof u!="object"||Array.isArray(u))throw new Error(`The traces feed served no readable task check for "${l}"`);return r.add(l),u}async function o(l,c){r.has(l)||await a(l);let u=await(await w(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=${c}`)).json();return c==="agent-home"?u.files??null:u.log??null}return {async create(l){let{source:c,onUploadProgress:i,...u}=l,d={config:JSON.stringify(u)};if("dataset"in c){if(typeof c.dataset!="string"||c.dataset.trim()==="")throw new Error('checks().create(): source.dataset must be "name" or "name@version"');let v=await w(t,"/api/checks",{method:"POST",body:ae({...d,dataset:c.dataset.trim()})});return at(await v.json())}let{existsSync:p,statSync:f}=await import('fs'),{basename:g,resolve:h}=await import('path'),y=h(c.directory);if(!p(y)||!f(y).isDirectory())throw new Error(`checks().create(): Path '${c.directory}' does not exist or is not a directory`);let _=await be(t,"/api/checks",{directory:y,fields:d,filename:`${g(y)||"task"}.tar.gz`,...i!==void 0?{onBytes:i}:{}});return at(await _.json())},get:n,list(l){return V(c=>s({...c,scope:l?.scope,status:l?.status}),l)},task:a,async transcript(l,c){let i=c?.since;if(i!==void 0&&(!Number.isInteger(i)||i<0))throw new Error(`transcript() since must be a non-negative integer, got ${i}`);let d=await(await w(t,`/api/traces/trials/${encodeURIComponent(l)}/events`+(i!==void 0?`?since=${i}`:""))).json(),p=d.session??{};if(p.kind!=="check"){let h=typeof p.kind=="string"?p.kind:"trial";throw new Error(`"${l}" is not a task check (the feed resolves it as a ${h}) \u2014 for a trial's trace use trials(), for an analysis's use analyses()`)}let f=i??0,g=Array.isArray(d.events)?d.events:[];return {id:typeof p.id=="string"?p.id:l,check_id:typeof p.checkId=="string"?p.checkId:null,dataset:typeof p.datasetRef=="string"?p.datasetRef:null,task_name:typeof p.tag=="string"?p.tag:null,model_name:typeof p.model=="string"?p.model:null,sandbox_provider:typeof p.provider=="string"?p.provider:null,sandbox_id:typeof p.sandboxId=="string"?p.sandboxId:null,is_ended:p.isEnded===true,total:typeof d.total=="number"?d.total:f+g.length,events:g.map((h,y)=>({seq:f+y,type:$s(h),data:h&&typeof h=="object"&&!Array.isArray(h)?h:{}})),gateway_calls:xs(d.gatewayCalls),stored_at:Pe(d.storedAt,g.length,"Task check transcript response")}},artifact:o,download:(async(l,c)=>rn(t,`/api/checks/${encodeURIComponent(l)}/download`,c,`check-${l}.tar.gz`)),async watch(l,c){let i=c?.pollIntervalMs??je,u=i,d=null;for(;;){X(c?.signal);let p;try{p=await n(l);}catch(h){if(h instanceof x&&(h.status===429||h.status===503)){await j(Math.max((h.retryAfterSec??0)*1e3,u),c?.signal),u=Math.min(u*2,De);continue}throw h}let f=JSON.stringify(p.results.map(h=>[h.task_name,h.status])),g=f!==d;if(g&&(d=f,c?.onProgress?.(p)),p.status==="completed")return p;u=g?i:Math.min(u*2,De),await j(u,c?.signal);}}}}function an(e){let t=W("auth",e);return {async status(){let s=await(await w(t,"/api/auth/status")).json(),r=s.key??{};return {user_id:s.user_id,email:s.email??null,key:{id:r.id,label:r.label??null,created_at:r.created_at,last_used_at:r.last_used_at??null}}}}}function Cs(e){return {org_id:e.org_id,slug:e.slug,display_name:e.display_name,personal:e.personal===true,...e.role==="owner"||e.role==="member"?{role:e.role}:{},created_at:e.created_at}}function Co(e){let t=e.quota??{},n=e.usage??{},s=r=>typeof r=="number"?r:0;return {...Cs(e),member_count:s(e.member_count),quota:{max_concurrent_trials:s(t.max_concurrent_trials),max_queued_trials:s(t.max_queued_trials),max_concurrent_imports:s(t.max_concurrent_imports),max_concurrent_analyses:s(t.max_concurrent_analyses),max_concurrent_sessions:s(t.max_concurrent_sessions),monthly_budget_usd:typeof t.monthly_budget_usd=="number"?t.monthly_budget_usd:null,max_concurrent_sandboxes_e2b:s(t.max_concurrent_sandboxes_e2b),max_concurrent_sandboxes_daytona:s(t.max_concurrent_sandboxes_daytona),max_concurrent_sandboxes_modal:s(t.max_concurrent_sandboxes_modal)},usage:{in_flight_trials:s(n.in_flight_trials),queued_trials:s(n.queued_trials),in_flight_imports:s(n.in_flight_imports),in_flight_analyses:s(n.in_flight_analyses),active_sessions:s(n.active_sessions),month_spend_usd:typeof n.month_spend_usd=="number"?n.month_spend_usd:null,month_spend_as_of:typeof n.month_spend_as_of=="string"?n.month_spend_as_of:null}}}function on(e){let t=W("orgs",e);return {async list(){let s=await(await w(t,"/api/orgs")).json();return (Array.isArray(s.items)?s.items:[]).map(r=>Cs(r))},async get(n){let s=await w(t,`/api/orgs/${encodeURIComponent(n)}`);return Co(await s.json())}}}function Oo(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{value:t}}catch{return {raw:e}}}function Do(e){return (e||process.env.EVOLVE_DASHBOARD_URL||fe).replace(/\/$/,"")}function jo(e){let t=e.apiKey||process.env.EVOLVE_API_KEY;if(!t)throw new Error("EVOLVE_API_KEY is required for managed secrets");return t}async function Lo(e){return await e.text().catch(()=>"")}async function ln(e,t,n={}){let s=await fetch(`${Do(e.dashboardUrl)}${t}`,{...n,headers:{Authorization:`Bearer ${jo(e)}`,accept:"application/json",...n.body?{"content-type":"application/json"}:{},...n.headers||{}}});if(!s.ok)throw new Error(`Managed secrets request failed (${s.status}): ${await Lo(s)}`);return await s.json()}function No(e){let t=n=>Array.isArray(n)?n.filter(s=>typeof s=="string"):[];return {id:String(e.id??""),name:String(e.name??""),...typeof e.label=="string"?{label:e.label}:{},...e.delivery==="brokered"||e.delivery==="direct"?{delivery:e.delivery}:{},allowedHosts:t(e.allowed_hosts??e.allowedHosts),allowedPathPrefixes:t(e.allowed_path_prefixes??e.allowedPathPrefixes),allowedMethods:t(e.allowed_methods??e.allowedMethods),createdAt:String(e.created_at??e.createdAt??""),updatedAt:String(e.updated_at??e.updatedAt??""),lastUsedAt:typeof(e.last_used_at??e.lastUsedAt)=="string"?e.last_used_at??e.lastUsedAt:null}}function ct(e={}){return {async list(){return (await ln(e,"/api/managed-secrets")).secrets??[]},async set(t){let n={name:t.name,value:t.value,delivery:t.delivery,...t.label!==void 0?{label:t.label}:{},...t.allowedHosts!==void 0?{allowed_hosts:t.allowedHosts}:{},...t.allowedPathPrefixes!==void 0?{allowed_path_prefixes:t.allowedPathPrefixes}:{},...t.allowedMethods!==void 0?{allowed_methods:t.allowedMethods}:{}},s=await ln(e,"/api/managed-secrets",{method:"POST",body:JSON.stringify(n)});return {status:s.status,secret:No(s.secret??{})}},async delete(t){let n=await ln(e,"/api/managed-secrets",{method:"DELETE",body:JSON.stringify({name:t.name,...t.label!==void 0?{label:t.label}:{}})});return {ok:n.ok,name:n.name,label:n.label}}}}var qo=6e5,zo=5e3;function Os(e,t,n){let s=t??n;if(!Number.isFinite(s)||s<=0)throw new Error(`${e} must be a positive number`);return s}function dt(e){let t=e?.apiKey||process.env[pe];if(!t)throw new Error(`sessions() requires an API key. Set ${pe} or pass { apiKey } in config.`);let n=e?.dashboardUrl||fe;async function s(i,u){let d=await fetch(`${n}${i}`,{...u,headers:{Authorization:`Bearer ${t}`,...u?.headers}});if(!d.ok){let p=await d.text().catch(()=>"");throw new Error(`Dashboard API error (${d.status}): ${p||d.statusText}`)}return d}function r(i){return {id:i.id,tag:i.tag,agent:i.agent,model:i.model||null,provider:i.provider,sandboxId:i.sandboxId||null,state:i.isEnded?"ended":"live",runtimeStatus:i.runtimeStatus||"unknown",cost:typeof i.cost=="number"?i.cost:null,usage:ge(i.usage),createdAt:i.createdAt,endedAt:i.endedAt||null,stepCount:i.stepCount||0,toolStats:i.toolStats||null}}function a(i,u){if(i.status!=="ready")throw new Error(`Browser replay is not ready (status: ${String(i.status||"unknown")})`);if(typeof i.replayUrl!="string"||typeof i.downloadUrl!="string")throw new Error("Browser replay response missing replayUrl or downloadUrl");return {sessionId:i.sessionId||u,status:"ready",replayUrl:i.replayUrl,downloadUrl:i.downloadUrl,suggestedStartSeconds:typeof i.suggestedStartSeconds=="number"?i.suggestedStartSeconds:void 0,sizeBytes:typeof i.sizeBytes=="number"?i.sizeBytes:void 0,readyAt:typeof i.readyAt=="string"?i.readyAt:void 0}}let o=i=>new Promise(u=>setTimeout(u,i));function l(i){if(i==null)return [];if(!Array.isArray(i))throw new Error("Session transcript response gatewayCalls is not a list");return i.map((u,d)=>{let p=u&&typeof u=="object"&&!Array.isArray(u)?u:null;if(!p||Ie({data:p})===null)throw new Error(`Session transcript response gatewayCalls[${d}] is not a gateway usage event`);return p})}async function c(i,u){let d=new URLSearchParams;u?.since!=null&&d.set("since",String(u.since));let p=d.toString(),g=await(await s(`/api/sessions/${encodeURIComponent(i)}/events${p?`?${p}`:""}`)).json(),h=g.session;if(!h||typeof h!="object"||Array.isArray(h))throw new Error("Session transcript response missing session");let y=g.events||[];return {session:r(h),events:y,total:typeof g.total=="number"?g.total:(u?.since??0)+y.length,gatewayCalls:l(g.gatewayCalls),storedAt:Pe(g.storedAt,y.length,"Session transcript response")}}return {async list(i){let u=new URLSearchParams({paginationMode:"cursor",pageSize:String(Math.min(i?.limit??20,200)),paginated:"true"});if(i?.cursor&&u.set("cursor",i.cursor),i?.state&&i.state!=="all"&&u.set("state",i.state),i?.agent&&u.set("agent",i.agent),i?.tagPrefix&&u.set("tagPrefix",i.tagPrefix),i?.sort){let f={newest:"desc",oldest:"asc",cost:"desc"};u.set("sortDirection",f[i.sort]),i.sort==="cost"?u.set("sortField","cost"):u.set("sortField","timestamp");}let p=await(await s(`/api/sessions?${u}`)).json();return {items:(p.items||[]).map(r),nextCursor:p.nextCursor||null,hasMore:!!p.hasMore}},async get(i){let d=await(await s(`/api/sessions/${encodeURIComponent(i)}`)).json();return r(d)},async events(i,u){return (await c(i,u)).events},transcript:c,async download(i,u){let f=(await(await s(`/api/sessions/${encodeURIComponent(i)}`)).json()).tag||i,g=await fetch(`${n}/api/sessions/${encodeURIComponent(i)}/download`,{headers:{Authorization:`Bearer ${t}`},redirect:"follow"});if(!g.ok){let v=await g.text().catch(()=>"");throw new Error(`Download failed (${g.status}): ${v||g.statusText}`)}let h=u?.to||process.cwd();await promises.mkdir(h,{recursive:true});let y=path.join(h,`${f}.jsonl`);if(!g.body)throw new Error("Download response has no body");let _=stream.Readable.fromWeb(g.body);return await promises$1.pipeline(_,fs$1.createWriteStream(y)),y},async browserReplay(i,u){let d=Os("timeoutMs",u?.timeoutMs,qo),p=Os("intervalMs",u?.intervalMs,zo),f=Date.now()+d,g=`/api/sessions/${encodeURIComponent(i)}/browser-replay`;for(;;){let h=f-Date.now();if(h<=0)throw new Error(`Browser replay timed out after ${d}ms`);let y;try{y=await fetch(`${n}${g}`,{headers:{Authorization:`Bearer ${t}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,h))});}catch(v){let b=v.name;throw b==="AbortError"||b==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):v}let _={};if(y.ok)_=await y.json();else {let v=await y.text().catch(()=>"");throw new Error(`Dashboard API error (${y.status}): ${v||y.statusText}`)}if(_.status==="ready")return a(_,i);if(_.status==="failed"){let v=typeof _.error=="string"?_.error:"unknown error";throw new Error(`Browser replay failed: ${v}`)}if(Date.now()>=f)throw new Error(`Browser replay timed out after ${d}ms`);await o(Math.min(p,Math.max(0,f-Date.now())));}}}}var cn="evolve",Yo="evolve-agents",un="EVOLVE_SKILLS_DIR",Ls="evolve-",Xo=["references","templates"],Fs=[".mdx",".md"],Z=class extends Error{constructor(t){super(t),this.name="SkillsError";}};function pt(e){try{return fs$1.statSync(e).isDirectory()}catch{return false}}function Bs(e){try{return fs$1.statSync(e).isFile()}catch{return false}}function Qo(e,t){return path.relative(e,t).split(path.sep).join("/")}function Zo(e){let t=[],n=s=>{for(let r of fs$1.readdirSync(s,{withFileTypes:true})){let a=path.join(s,r.name);r.isDirectory()?n(a):r.isFile()&&t.push(a);}};return pt(e)&&n(e),t.sort()}function Ue(e,t=process.env){let n=t[un];if(n!==void 0&&n!==""){if(!pt(n))throw new Z(`${un} points at nothing: ${n}`);return path.resolve(n)}for(let s of [path.join(e,"skills"),path.join(e,"..","..","skills")])if(pt(s))return path.resolve(s);throw new Z(`skills directory not found; set ${un} or reinstall @evolvingmachines/evolve`)}function ei(e){let t=path.join(e,"SKILL.md"),n=fs$1.readFileSync(t,"utf8"),s=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(n),r=null;if(s)try{r=yaml.parse(s[1]);}catch(c){throw new Z(`${t}: front matter does not parse (${c.message})`)}let a=r!==null&&typeof r=="object"&&typeof r.description=="string"?r.description.replace(/\s+/g," ").trim():"",o=e.slice(e.lastIndexOf(path.sep)+1);return {name:o.startsWith(Ls)?o.slice(Ls.length):o,dir:e,description:a,content:n}}function pn(e){return fs$1.readdirSync(e,{withFileTypes:true}).filter(t=>t.isDirectory()&&t.name!==Yo&&Bs(path.join(e,t.name,"SKILL.md"))).map(t=>ei(path.join(e,t.name))).sort((t,n)=>t.name.localeCompare(n.name))}function ft(e){return pn(e).filter(t=>t.name!==cn)}function qs(e,t){return pn(e).some(n=>n.name===t)}function Je(e,t){let n=pn(e).find(s=>s.name===t);if(!n){let s=ft(e).map(r=>r.name);throw new Z(`unknown skill "${t}" (skills: ${s.join(", ")})`)}return n}function Me(e){return Xo.flatMap(t=>Zo(path.join(e.dir,t)).map(n=>({path:Qo(e.dir,n),content:fs$1.readFileSync(n,"utf8")})))}function zs(e){return e.startsWith("references/")&&Fs.some(t=>e.endsWith(t))}function ti(e){return Me(e).filter(t=>zs(t.path)).map(t=>t.path.slice(11).replace(/\.mdx?$/,""))}function Hs(e,t){let n=`references/${t.replace(/^\.\//,"")}`,s=new Set([n,...Fs.map(a=>n+a)]),r=Me(e).find(a=>zs(a.path)&&s.has(a.path));if(!r)throw new Z(`no page "${t}" in skill ${e.name} (pages: ${ti(e).join(", ")})`);return {page:r.path.slice(11).replace(/\.mdx?$/,""),path:r.path,content:r.content}}var Fe=["claude","codex","cursor","copilot","gemini","opencode","agents"];function Vs(e,t=process.env){if(e==="opencode"){let n=t.XDG_CONFIG_HOME!==void 0&&t.XDG_CONFIG_HOME!==""?t.XDG_CONFIG_HOME:path.join(os.homedir(),".config");return path.join(n,"opencode","skills")}return path.join(os.homedir(),`.${e}`,"skills")}function ni(e){let t=e;for(;!fs$1.existsSync(t);){let n=path.dirname(t);if(n===t)break;t=n;}return t}function Gs(e,t,n){let s=Je(e,cn).content,r=[],a=[];for(let o of t){let l=path.join(o.skillsDir,cn,"SKILL.md"),c=ni(l);if(c===l){if(!Bs(l)){a.push(`${l} is a directory, not a file`);continue}let i=fs$1.readFileSync(l,"utf8")===s;!i&&!n&&a.push(`${l} exists with different content; pass --force to overwrite it`),r.push({destination:o,path:l,write:!i});}else pt(c)?r.push({destination:o,path:l,write:true}):a.push(`${c} is a file, so ${l} cannot be created`);}if(a.length>0)throw new Z(a.join(`
22
+ `));return r.map(({destination:o,path:l,write:c})=>(c&&(fs$1.mkdirSync(path.dirname(l),{recursive:true}),fs$1.writeFileSync(l,s)),{target:o.target,path:l,status:c?"written":"unchanged"}))}var m=class extends Error{constructor(t){super(t),this.name="CliUsageError";}},En={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"}},C={limit:{kind:"number",short:"l",value:"<n>",help:"Page size",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume from a page cursor",group:"Paging"},columns:{kind:"string",value:"<keys|all|help>",help:"Choose and order columns; 'help' lists them",group:"Output"},quiet:{kind:"boolean",short:"q",help:"Print only ids, one per line",group:"Output"},"no-trunc":{kind:"boolean",help:"Full cell content instead of one-line truncation",group:"Output"},"no-headers":{kind:"boolean",help:"Omit the header row in piped output",group:"Output"}},fn={kind:"string",value:"<my|shared>",help:"What you created, or your organizations' rows that teammates created",default:"my",group:"Filter"},gn="An analysis id, or its unambiguous prefix, names that run. A trial id, or its prefix, names the trial's latest analysis, the one `trial show` prints on its analysis row. A prefix matching both an analysis and a trial is refused as ambiguous.",gt={kind:"number",value:"<n>",help:"Skip the first N events; to resume, pass the count you already hold",group:"Selection"},xr={config:{kind:"string",short:"c",value:"<path>",help:"Job config file, YAML or JSON; flags override its fields",group:"Config"},"print-config":{kind:"boolean",help:"Print the resolved job body as JSON and exit",group:"Config"},"job-name":{kind:"string",value:"<name>",help:"Label for the job",default:"generated",group:"Job"},"n-attempts":{kind:"number",short:"k",value:"<n>",help:"Attempts per task and arm",default:"1",group:"Job"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Parallel trials",default:"4",group:"Job"},yes:{kind:"boolean",short:"y",help:"Accepted for compatibility; a hosted run has nothing to confirm",group:"Job"},dataset:{kind:"repeat",short:"d",value:"<name[@version]>",help:"Dataset to run; repeatable; a bare name is the active version",group:"Datasets"},"include-task-name":{kind:"repeat",short:"i",value:"<glob>",help:"Only tasks matching the glob, in every dataset; repeatable",group:"Datasets"},"exclude-task-name":{kind:"repeat",short:"x",value:"<glob>",help:"Skip tasks matching the glob, in every dataset; repeatable",group:"Datasets"},"n-tasks":{kind:"number",short:"l",value:"<n>",help:"Cap the task count of each dataset, after the filters",group:"Datasets"},agent:{kind:"string",short:"a",value:"<name[@version]>",help:"Agent harness, built-in or registered",group:"Agent"},model:{kind:"repeat",short:"m",value:"<name>",help:"Model; repeatable, one arm per model",group:"Agent"},effort:{kind:"string",value:"<value>",help:"Reasoning effort for every arm; an agent that cannot honor it is refused",default:"the agent's own",group:"Agent"},preset:{kind:"string",value:"<name>",help:"Settings preset for every arm: no-internet or pinned-context",group:"Agent"},ak:{kind:"repeat",aliases:["agent-kwarg"],value:"key=value",help:"Agent kwarg for every arm; repeatable; config=<path|JSON> is the native settings file",group:"Agent"},skill:{kind:"repeat",aliases:["skills"],value:"<ref|path>",help:"Skill for every arm; repeatable: skills.sh/<owner>/<repo>[/<skill>], org/repo[@ref], a git URL, upload:<id>, name:<skill-name>, or a local folder",group:"Agent"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env for every agent run; repeatable",group:"Agent"},"verifier-env":{kind:"repeat",aliases:["ve"],value:"KEY=VALUE",help:"Env for every verifier run; repeatable; only REWARDKIT_JUDGE and REWARDKIT_MODEL",group:"Verifier"},secret:{kind:"repeat",value:"NAME[@LABEL][=ENVNAME]",help:"Attach a stored env secret to every agent run; repeatable; @LABEL picks a row, =ENVNAME renames it",group:"Secrets"},"secret-inline":{kind:"repeat",value:"NAME[@LABEL]:DELIVERY=VALUE",help:"Store VALUE as an env secret and attach it in one step; repeatable; DELIVERY is brokered or direct",group:"Secrets"},"max-trial-spend":{kind:"number",value:"<usd>",help:"Model-spend cap for each trial, in USD",default:"200",group:"Spend and retries"},"max-retries":{kind:"number",short:"r",value:"<n>",help:"Automatic retries per trial on infrastructure errors; 0 turns them off",default:"the platform default",group:"Spend and retries"},"retry-include":{kind:"repeat",value:"<exception>",help:"Exception types to retry on; repeatable",default:"everything --retry-exclude admits",group:"Spend and retries"},"retry-exclude":{kind:"repeat",value:"<exception>",help:"Exception types never retried; repeatable; wins over --retry-include",default:"Harbor's non-retryable set",group:"Spend and retries"},analyze:{kind:"boolean",help:"Analyze each trial's trace against a rubric as it settles",group:"Analysis"},"analyze-model":{kind:"string",value:"<name>",help:"Model for the analyzer; implies --analyze",default:"the analyze default",group:"Analysis"},"analyze-rubric":{kind:"string",value:"<path>",help:"Rubric file for the analyzer, TOML, YAML or JSON; implies --analyze",default:"the built-in rubric",group:"Analysis"},"analyze-prompt":{kind:"string",value:"<path>",help:"Prompt file for the analyzer, replacing the built-in prompt; implies --analyze",group:"Analysis"},"analyze-provider":{kind:"string",value:"<provider>",help:"Sandbox provider for the analyzer; implies --analyze",default:"the analysis default",group:"Analysis"},"analyze-effort":{kind:"string",value:"<value>",help:"Reasoning effort for the analyzer; implies --analyze",default:"the model's own",group:"Analysis"},"timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for every task timeout, this job only",default:"1.0",group:"Timeouts"},"agent-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the agent execution timeout; overrides --timeout-multiplier",group:"Timeouts"},"verifier-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the verifier timeout; overrides --timeout-multiplier",group:"Timeouts"},"agent-setup-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the agent setup timeout; overrides --timeout-multiplier",group:"Timeouts"},"environment-build-timeout-multiplier":{kind:"number",value:"<x>",help:"Multiplier for the environment build timeout; overrides --timeout-multiplier",group:"Timeouts"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider: e2b, daytona or modal",default:"daytona",group:"Environment"},watch:{kind:"boolean",help:"Stream the job's events until it finishes",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final block",group:"Output"}};function Tr(e){return [`${e} -d terminal-bench-4@4.0 -a codex -m gpt-6-astra -l 5 --watch`,`${e} \\
23
23
  -d deep-swe@1.1 \\
24
24
  -a claude -m fable \\
25
25
  --skills skills.sh/acme/skills/pdf \\
26
26
  --secret GITHUB_TOKEN \\
27
27
  -k 2 -n 8 \\
28
- --analyze --watch`,`${e} -c job.yaml --print-config`]}var pi="evolve skills get evals sdk-reference/errors",ce={skills:{summary:"The skills the CLI serves to coding agents",notes:"The skills ship with the CLI and match its version. `skills get evals` is the index of the documentation and `skills get evals <page>` one page of it; the `evolve` pointer skill that `skills install` writes is served but never listed. EVOLVE_SKILLS_DIR names another checkout or package root to serve.",defaultVerb:"list",commands:{list:{summary:"List the skills the installed version serves",flags:{},minPositionals:0,maxPositionals:0,examples:["evolve skills","evolve skills list --json"]},get:{summary:"Print one or more skills, or one reference page",notes:"A second word that is not a skill name is a page of the first skill: the docs site's own path without the suffix (`core-concepts/tasks`), or a file under references/ for a task-authoring skill.",flags:{full:{kind:"boolean",help:"Also print every page of the skill (a docs folder's pages, or references/ and templates/), each behind a `--- <path> ---` line"},all:{kind:"boolean",help:"Every skill, instead of naming them"}},minPositionals:0,maxPositionals:1/0,positionalUsage:"<name> [name...] | <name> <page>",examples:["evolve skills get evals","evolve skills get evals core-concepts/tasks","evolve skills get create-task --full"]},path:{summary:"Print the skills root, or one skill's folder",flags:{},minPositionals:0,maxPositionals:1,positionalUsage:"[name]",examples:["evolve skills path","evolve skills path evals"]},install:{summary:"Install the evolve pointer skill for your agents",notes:"Each target gets <folder>/evolve/SKILL.md; the path written is printed. A file already there with different content is left alone unless --force.",flags:{target:{kind:"string",value:`<${[...Be,"all"].join("|")}>`,help:"Which agent home: ~/.claude, ~/.codex, ~/.cursor, ~/.copilot, ~/.gemini, ~/.config/opencode or ~/.agents, each under skills/",default:"all",group:"Destination"},path:{kind:"string",value:"<dir>",help:"A skills directory of your own instead of --target",group:"Destination"},force:{kind:"boolean",help:"Overwrite an installed SKILL.md whose content differs"}},minPositionals:0,maxPositionals:0,examples:["evolve skills install","evolve skills install --target claude","evolve skills install --path ./skills"]}}},job:{summary:"Start, follow, and derive jobs",commands:{start:{summary:"Start a job",flags:Pr,minPositionals:0,maxPositionals:0,examples:$r("evolve job start")},list:{summary:"List your jobs, newest first",flags:{...C,search:{kind:"string",value:"<text>",help:"Free-text filter over job name and dataset names",group:"Filter"},scope:mn},minPositionals:0,maxPositionals:0,examples:["evolve job list","evolve job list --scope shared --search deep-swe","evolve job list -l 20 -q"]},show:{summary:"Show one or more jobs in full",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<id> [id...]",examples:["evolve job show 3e1f9a2c","evolve job show 3e1f9a2c 9b7d4e10 --json"]},trials:{summary:"List a job's trials",flags:{...C,status:{kind:"string",value:"<s1,s2,...>",help:"Only trials in these statuses",group:"Filter"},dataset:{kind:"string",value:"<name>",help:"Only one dataset's trials",group:"Filter"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job trials 3e1f9a2c","evolve job trials 3e1f9a2c --status FAILED,SCORING_ERROR"]},tasks:{summary:"Show a job's per-task rollup",flags:{...C},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job tasks 3e1f9a2c"]},compare:{summary:"Compare 2 to 10 jobs side by side",flags:{},minPositionals:2,maxPositionals:10,positionalUsage:"<id> <id> [...]",examples:["evolve job compare 3e1f9a2c 9b7d4e10"]},cancel:{summary:"Cancel a job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job cancel 3e1f9a2c"]},delete:{summary:"Delete a job you created, with everything it stored",flags:{yes:{kind:"boolean",short:"y",help:"Delete without a confirmation prompt"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job delete 3e1f9a2c","evolve job delete 3e1f9a2c --yes"]},stop:{summary:"Stop one dataset's live trials, keeping the job",flags:{dataset:{kind:"string",value:"<name>",help:"The dataset whose live trials to stop; required"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job stop 3e1f9a2c --dataset deep-swe"]},resume:{summary:"Start a linked job over failed or stopped trials",flags:{"filter-error-type":{kind:"repeat",short:"f",value:"<type>",help:"Failure types to resume, by exception type; repeatable",default:"the standard failure set plus stopped trials"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job resume 3e1f9a2c","evolve job resume 3e1f9a2c -f InfrastructureError"]},retry:{summary:"Start a linked job re-running chosen trials",notes:"Without a flag every trial runs again. --failed-only and --trial do not combine.",flags:{"failed-only":{kind:"boolean",help:"Only failed trials: SCORING_ERROR, INFRASTRUCTURE_ERROR, BUDGET, INDETERMINATE",group:"Selection"},trial:{kind:"repeat",short:"t",value:"<trial-id>",help:"Exactly this settled trial; repeatable, all or nothing",group:"Selection"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job retry 3e1f9a2c --failed-only","evolve job retry 3e1f9a2c -t d1a10c4e -t d1a10f72"]},regrade:{summary:"Re-run only the verifier over a finished job",notes:"The result is a new job linked to the source; the source is never changed.",flags:{status:{kind:"string",value:"<s1,s2,...>",help:"Only source trials in these statuses",group:"Selection"},task:{kind:"string",value:"<name>",help:"Only source trials of this task",group:"Selection"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job regrade 3e1f9a2c","evolve job regrade 3e1f9a2c --task tricky-task"]},imports:{summary:"List your job uploads, newest first",flags:{...C,status:{kind:"string",value:"<QUEUED|RUNNING|COMPLETED|FAILED>",help:"Only uploads in this status",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve job imports","evolve job imports --status RUNNING"]},import:{summary:"Show one job upload, or follow it with --watch",flags:{watch:{kind:"boolean",help:"Poll until the upload is COMPLETED, printing the job, or FAILED"}},minPositionals:1,maxPositionals:1,positionalUsage:"<import-id>",examples:["evolve job import cmfl2q8r30001v4kx9zd1h7wa --watch"]},download:{summary:"Download a job as a Harbor job directory",notes:"The tree lands in <dir>/job-<id>/, with an evolve.json record beside each Harbor file.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to unpack into",default:"the current directory"},overwrite:{kind:"boolean",help:"Replace an existing <dir>/job-<id>/"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job download 3e1f9a2c -o results/"]},grep:{summary:"Search every trial's trace for a pattern",flags:{type:{kind:"string",value:"<event-type>",help:"Only events of exactly this type",group:"Selection"},limit:{kind:"number",short:"l",value:"<n>",help:"Per-trial match groups per page, at most 200",default:"50",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume after this trial id, the previous page's nextCursor",group:"Paging"}},minPositionals:2,maxPositionals:2,positionalUsage:"<id> <pattern>",examples:["evolve job grep 3e1f9a2c 'permission denied'","evolve job grep 3e1f9a2c 'rm -rf' --type tool_call"]}}},trial:{summary:"Inspect, download, and act on single trials",commands:{show:{summary:"Show one trial in full",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial show d1a10c4e"]},trace:{summary:"Print a trial's parsed trace",flags:{type:{kind:"string",value:"<event-type>",help:"Only events of exactly this type",group:"Selection"},grep:{kind:"string",value:"<pattern>",help:"Only events matching this case-insensitive regex over type and content",group:"Selection"},tail:{kind:"number",value:"<n>",help:"Only the last N matching events",group:"Selection"},cursor:{kind:"string",value:"<seq>",help:"Resume after this seq",group:"Paging"},limit:{kind:"number",short:"l",value:"<n>",help:"Events per page, at most 1000",default:"200",group:"Paging"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial trace d1a10c4e","evolve trial trace d1a10c4e --grep 'permission denied' --tail 50"]},download:{summary:"Save a trial's tree, or stream one artifact",notes:"The tree is Harbor's trial directory, with an evolve.json record, under <dir>/<trial-id>/.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save under",default:"trials/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing <dir>/<trial-id>/",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact to stdout instead: trace-parsed, verifier, trace-stdout, trace-stderr, trace-atif (the ATIF trajectory), trajectory (reserved: the harness-native session file) or agent-home",group:"Stream"},cursor:{kind:"string",value:"<seq>",help:"With --stream trace-parsed: resume after this seq",group:"Stream"},limit:{kind:"number",value:"<n>",help:"With --stream trace-parsed: max events per page",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial download d1a10c4e -o trials/","evolve trial download d1a10c4e --stream trace-stdout"]},retry:{summary:"Run one settled trial again, as a new job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial retry d1a10c4e"]},regrade:{summary:"Re-run only the verifier over one trial, as a new job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial regrade d1a10c4e"]},stop:{summary:"Stop running trials, keeping their job",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<trial-id> [trial-id...]",examples:["evolve trial stop d1a10c4e d1a10f72"]}}},analysis:{summary:"List, inspect, and download trace analyses",commands:{list:{summary:"List analysis runs, newest first",flags:{...C,scope:mn,job:{kind:"string",value:"<job-id>",help:"Only analyses of this job's trials; a prefix works",group:"Filter"},status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Re.join(", ")}`,group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve analysis list","evolve analysis list --job 3e1f9a2c --status failed"]},show:{summary:"Show one analysis run: the verdict",notes:hn,flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis show a0a1b2c3","evolve analysis show d1a10c4e"]},trace:{summary:"Print the analyzer's own transcript",notes:hn,flags:{since:mt},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis trace a0a1b2c3","evolve analysis trace a0a1b2c3 --since 200"]},download:{summary:"Save an analysis run, or stream one artifact",notes:hn,flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save the run's trial folder under",default:"analyses/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing folder of the same name",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact to stdout instead: analysis (the verdict), trace-parsed, trace-stdout, trace-stderr or agent-home",group:"Stream"},since:{...mt,help:"With --stream trace-parsed: skip the first N events",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis download a0a1b2c3 -o analyses/","evolve analysis download a0a1b2c3 --stream trace-stdout"]}}},check:{summary:"Read task quality checks back",commands:{list:{summary:"List your task quality checks, newest first",flags:{...C,scope:mn,status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Ee.join(", ")}`,group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve check list","evolve check list --status running"]},show:{summary:"Show one check: Harbor's check report, one row per task",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check show 5f2c9b1e"]},trace:{summary:"Print the checker's transcript for one task check",flags:{since:mt},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check trace 7c1d2e3f","evolve check trace 7c1d2e3f --since 200"]},download:{summary:"Save a check, one task check, or stream an artifact",notes:"A check id saves Harbor's check job folder, check_report.json and one folder per task, under <dir>/check-<id>/. A task check id saves that task's folder alone.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save under",default:"checks/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing folder of the same name",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact of a task check to stdout instead: task-check (the result), trace-parsed, trace-stdout, trace-stderr or agent-home",group:"Stream"},since:{...mt,help:"With --stream trace-parsed: skip the first N events",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id | task-check-id>",examples:["evolve check download 3f9a1c2e -o checks/","evolve check download 7c1d2e3f --stream trace-stdout"]}}},session:{summary:"List and inspect managed-agent sessions",commands:{list:{summary:"List your sessions, newest first",flags:{...C,state:{kind:"string",value:"<live|ended>",help:"Only live or only ended sessions",group:"Filter"},agent:{kind:"string",value:"<name>",help:"Only sessions of this agent harness",group:"Filter"},"tag-prefix":{kind:"string",value:"<prefix>",help:"Only sessions whose tag starts with this prefix",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve session list","evolve session list --state ended --tag-prefix qa- -q"]},show:{summary:"Show one session in full",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session show 5f2c1a0e"]}}},dataset:{summary:"Browse and publish the dataset catalog",commands:{list:{summary:"List the dataset catalog",flags:{...C,search:{kind:"string",value:"<text>",help:"Free-text filter over name and description",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve dataset list","evolve dataset list --search swe -q"]},show:{summary:"Show a dataset's versions, tasks and providers",flags:{limit:{kind:"number",short:"l",value:"<n>",help:"Task-list page size",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume the task list from a cursor",group:"Paging"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",examples:["evolve dataset show terminal-bench-4@4.0"]},check:{summary:"Pre-flight a local corpus without uploading anything",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<dir>",examples:["evolve dataset check ./corpus"]},publish:{summary:"Publish a dataset version",notes:"One source per publish: a pinned git ref, a local directory, or a public tarball or Harbor hub package. --name and --version are required with --git and with --from <url>; a local dataset.toml or a hub package can supply them.",flags:{git:{kind:"string",value:"<url>",help:"Git repository URL, with --ref",group:"Source"},ref:{kind:"string",value:"<ref>",help:"Pinned git ref, a full commit sha or a tag; a branch is refused",group:"Source"},path:{kind:"string",value:"<subfolder>",help:"Repository subfolder holding the corpus, with --git",group:"Source"},dir:{kind:"string",value:"<path>",help:"Local corpus directory, pre-flighted then uploaded",group:"Source"},from:{kind:"string",value:"<url|hub:org/name[@ref]>",help:"A public https tarball URL, or a public Harbor hub package",group:"Source"},name:{kind:"string",value:"<dataset>",help:"Catalog dataset name to create or extend",group:"Version"},version:{kind:"string",value:"<v>",help:"Version label for the published version",group:"Version"},watch:{kind:"boolean",help:"Poll until the version is READY or FAILED",group:"Output"},"skip-preflight":{kind:"boolean",help:"Upload a --dir without the pre-flight check",group:"Source"}},minPositionals:0,maxPositionals:0,examples:["evolve dataset publish --from hub:cookbook/hello-world --watch","evolve dataset publish --dir ./corpus --name my-swe --version 1.0 --watch",`evolve dataset publish \\
28
+ --analyze --watch`,`${e} -c job.yaml --print-config`]}var ui="evolve skills get evals sdk-reference/errors",ce={skills:{summary:"The skills the CLI serves to coding agents",notes:"The skills ship with the CLI and match its version. `skills get evals` is the index of the documentation and `skills get evals <page>` one page of it; the `evolve` pointer skill that `skills install` writes is served but never listed. EVOLVE_SKILLS_DIR names another skills directory to serve.",defaultVerb:"list",commands:{list:{summary:"List the skills the installed version serves",flags:{},minPositionals:0,maxPositionals:0,examples:["evolve skills","evolve skills list --json"]},get:{summary:"Print one or more skills, or one reference page",notes:"A second word that is not a skill name is a page of the first skill: its path under references/ without the suffix, as the docs site spells it (`core-concepts/tasks`).",flags:{full:{kind:"boolean",help:"Also print every file under references/ and templates/, each behind a `--- <path> ---` line"},all:{kind:"boolean",help:"Every skill, instead of naming them"}},minPositionals:0,maxPositionals:1/0,positionalUsage:"<name> [name...] | <name> <page>",examples:["evolve skills get evals","evolve skills get evals core-concepts/tasks","evolve skills get create-task --full"]},path:{summary:"Print the skills directory, or one skill's folder",flags:{},minPositionals:0,maxPositionals:1,positionalUsage:"[name]",examples:["evolve skills path","evolve skills path evals"]},install:{summary:"Install the evolve pointer skill for your agents",notes:"Each target gets <folder>/evolve/SKILL.md; the path written is printed. A file already there with different content is left alone unless --force.",flags:{target:{kind:"string",value:`<${[...Fe,"all"].join("|")}>`,help:"Which agent home: ~/.claude, ~/.codex, ~/.cursor, ~/.copilot, ~/.gemini, ~/.config/opencode or ~/.agents, each under skills/",default:"all",group:"Destination"},path:{kind:"string",value:"<dir>",help:"A skills directory of your own instead of --target",group:"Destination"},force:{kind:"boolean",help:"Overwrite an installed SKILL.md whose content differs"}},minPositionals:0,maxPositionals:0,examples:["evolve skills install","evolve skills install --target claude","evolve skills install --path ./skills"]}}},job:{summary:"Start, follow, and derive jobs",commands:{start:{summary:"Start a job",flags:xr,minPositionals:0,maxPositionals:0,examples:Tr("evolve job start")},list:{summary:"List your jobs, newest first",flags:{...C,search:{kind:"string",value:"<text>",help:"Free-text filter over job name and dataset names",group:"Filter"},scope:fn},minPositionals:0,maxPositionals:0,examples:["evolve job list","evolve job list --scope shared --search deep-swe","evolve job list -l 20 -q"]},show:{summary:"Show one or more jobs in full",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<id> [id...]",examples:["evolve job show 3e1f9a2c","evolve job show 3e1f9a2c 9b7d4e10 --json"]},trials:{summary:"List a job's trials",flags:{...C,status:{kind:"string",value:"<s1,s2,...>",help:"Only trials in these statuses",group:"Filter"},dataset:{kind:"string",value:"<name>",help:"Only one dataset's trials",group:"Filter"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job trials 3e1f9a2c","evolve job trials 3e1f9a2c --status FAILED,SCORING_ERROR"]},tasks:{summary:"Show a job's per-task rollup",flags:{...C},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job tasks 3e1f9a2c"]},compare:{summary:"Compare 2 to 10 jobs side by side",flags:{},minPositionals:2,maxPositionals:10,positionalUsage:"<id> <id> [...]",examples:["evolve job compare 3e1f9a2c 9b7d4e10"]},cancel:{summary:"Cancel a job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job cancel 3e1f9a2c"]},delete:{summary:"Delete a job you created, with everything it stored",flags:{yes:{kind:"boolean",short:"y",help:"Delete without a confirmation prompt"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job delete 3e1f9a2c","evolve job delete 3e1f9a2c --yes"]},stop:{summary:"Stop one dataset's live trials, keeping the job",flags:{dataset:{kind:"string",value:"<name>",help:"The dataset whose live trials to stop; required"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job stop 3e1f9a2c --dataset deep-swe"]},resume:{summary:"Start a linked job over failed or stopped trials",flags:{"filter-error-type":{kind:"repeat",short:"f",value:"<type>",help:"Failure types to resume, by exception type; repeatable",default:"the standard failure set plus stopped trials"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job resume 3e1f9a2c","evolve job resume 3e1f9a2c -f InfrastructureError"]},retry:{summary:"Start a linked job re-running chosen trials",notes:"Without a flag every trial runs again. --failed-only and --trial do not combine.",flags:{"failed-only":{kind:"boolean",help:"Only failed trials: SCORING_ERROR, INFRASTRUCTURE_ERROR, BUDGET, INDETERMINATE",group:"Selection"},trial:{kind:"repeat",short:"t",value:"<trial-id>",help:"Exactly this settled trial; repeatable, all or nothing",group:"Selection"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job retry 3e1f9a2c --failed-only","evolve job retry 3e1f9a2c -t d1a10c4e -t d1a10f72"]},regrade:{summary:"Re-run only the verifier over a finished job",notes:"The result is a new job linked to the source; the source is never changed.",flags:{status:{kind:"string",value:"<s1,s2,...>",help:"Only source trials in these statuses",group:"Selection"},task:{kind:"string",value:"<name>",help:"Only source trials of this task",group:"Selection"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job regrade 3e1f9a2c","evolve job regrade 3e1f9a2c --task tricky-task"]},imports:{summary:"List your job uploads, newest first",flags:{...C,status:{kind:"string",value:"<QUEUED|RUNNING|COMPLETED|FAILED>",help:"Only uploads in this status",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve job imports","evolve job imports --status RUNNING"]},import:{summary:"Show one job upload, or follow it with --watch",flags:{watch:{kind:"boolean",help:"Poll until the upload is COMPLETED, printing the job, or FAILED"}},minPositionals:1,maxPositionals:1,positionalUsage:"<import-id>",examples:["evolve job import cmfl2q8r30001v4kx9zd1h7wa --watch"]},download:{summary:"Download a job as a Harbor job directory",notes:"The tree lands in <dir>/job-<id>/, with an evolve.json record beside each Harbor file.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to unpack into",default:"the current directory"},overwrite:{kind:"boolean",help:"Replace an existing <dir>/job-<id>/"}},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job download 3e1f9a2c -o results/"]},grep:{summary:"Search every trial's trace for a pattern",flags:{type:{kind:"string",value:"<event-type>",help:"Only events of exactly this type",group:"Selection"},limit:{kind:"number",short:"l",value:"<n>",help:"Per-trial match groups per page, at most 200",default:"50",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume after this trial id, the previous page's nextCursor",group:"Paging"}},minPositionals:2,maxPositionals:2,positionalUsage:"<id> <pattern>",examples:["evolve job grep 3e1f9a2c 'permission denied'","evolve job grep 3e1f9a2c 'rm -rf' --type tool_call"]}}},trial:{summary:"Inspect, download, and act on single trials",commands:{show:{summary:"Show one trial in full",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial show d1a10c4e"]},trace:{summary:"Print a trial's parsed trace",flags:{type:{kind:"string",value:"<event-type>",help:"Only events of exactly this type",group:"Selection"},grep:{kind:"string",value:"<pattern>",help:"Only events matching this case-insensitive regex over type and content",group:"Selection"},tail:{kind:"number",value:"<n>",help:"Only the last N matching events",group:"Selection"},cursor:{kind:"string",value:"<seq>",help:"Resume after this seq",group:"Paging"},limit:{kind:"number",short:"l",value:"<n>",help:"Events per page, at most 1000",default:"200",group:"Paging"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial trace d1a10c4e","evolve trial trace d1a10c4e --grep 'permission denied' --tail 50"]},download:{summary:"Save a trial's tree, or stream one artifact",notes:"The tree is Harbor's trial directory, with an evolve.json record, under <dir>/<trial-id>/.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save under",default:"trials/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing <dir>/<trial-id>/",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact to stdout instead: trace-parsed, verifier, trace-stdout, trace-stderr, trace-atif (the ATIF trajectory), trajectory (reserved: the harness-native session file) or agent-home",group:"Stream"},cursor:{kind:"string",value:"<seq>",help:"With --stream trace-parsed: resume after this seq",group:"Stream"},limit:{kind:"number",value:"<n>",help:"With --stream trace-parsed: max events per page",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial download d1a10c4e -o trials/","evolve trial download d1a10c4e --stream trace-stdout"]},retry:{summary:"Run one settled trial again, as a new job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial retry d1a10c4e"]},regrade:{summary:"Re-run only the verifier over one trial, as a new job",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial regrade d1a10c4e"]},stop:{summary:"Stop running trials, keeping their job",flags:{},minPositionals:1,maxPositionals:1/0,positionalUsage:"<trial-id> [trial-id...]",examples:["evolve trial stop d1a10c4e d1a10f72"]}}},analysis:{summary:"List, inspect, and download trace analyses",commands:{list:{summary:"List analysis runs, newest first",flags:{...C,scope:fn,job:{kind:"string",value:"<job-id>",help:"Only analyses of this job's trials; a prefix works",group:"Filter"},status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Re.join(", ")}`,group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve analysis list","evolve analysis list --job 3e1f9a2c --status failed"]},show:{summary:"Show one analysis run: the verdict",notes:gn,flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis show a0a1b2c3","evolve analysis show d1a10c4e"]},trace:{summary:"Print the analyzer's own transcript",notes:gn,flags:{since:gt},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis trace a0a1b2c3","evolve analysis trace a0a1b2c3 --since 200"]},download:{summary:"Save an analysis run, or stream one artifact",notes:gn,flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save the run's trial folder under",default:"analyses/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing folder of the same name",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact to stdout instead: analysis (the verdict), trace-parsed, trace-stdout, trace-stderr or agent-home",group:"Stream"},since:{...gt,help:"With --stream trace-parsed: skip the first N events",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id | trial-id>",examples:["evolve analysis download a0a1b2c3 -o analyses/","evolve analysis download a0a1b2c3 --stream trace-stdout"]}}},check:{summary:"Read task quality checks back",commands:{list:{summary:"List your task quality checks, newest first",flags:{...C,scope:fn,status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Ee.join(", ")}`,group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve check list","evolve check list --status running"]},show:{summary:"Show one check: Harbor's check report, one row per task",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check show 5f2c9b1e"]},trace:{summary:"Print the checker's transcript for one task check",flags:{since:gt},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check trace 7c1d2e3f","evolve check trace 7c1d2e3f --since 200"]},download:{summary:"Save a check, one task check, or stream an artifact",notes:"A check id saves Harbor's check job folder, check_report.json and one folder per task, under <dir>/check-<id>/. A task check id saves that task's folder alone.",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save under",default:"checks/",group:"Save"},overwrite:{kind:"boolean",help:"Replace an existing folder of the same name",group:"Save"},stream:{kind:"string",value:"<artifact>",help:"Print one artifact of a task check to stdout instead: task-check (the result), trace-parsed, trace-stdout, trace-stderr or agent-home",group:"Stream"},since:{...gt,help:"With --stream trace-parsed: skip the first N events",group:"Stream"}},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id | task-check-id>",examples:["evolve check download 3f9a1c2e -o checks/","evolve check download 7c1d2e3f --stream trace-stdout"]}}},session:{summary:"List and inspect managed-agent sessions",commands:{list:{summary:"List your sessions, newest first",flags:{...C,state:{kind:"string",value:"<live|ended>",help:"Only live or only ended sessions",group:"Filter"},agent:{kind:"string",value:"<name>",help:"Only sessions of this agent harness",group:"Filter"},"tag-prefix":{kind:"string",value:"<prefix>",help:"Only sessions whose tag starts with this prefix",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve session list","evolve session list --state ended --tag-prefix qa- -q"]},show:{summary:"Show one session in full",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session show 5f2c1a0e"]}}},dataset:{summary:"Browse and publish the dataset catalog",commands:{list:{summary:"List the dataset catalog",flags:{...C,search:{kind:"string",value:"<text>",help:"Free-text filter over name and description",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve dataset list","evolve dataset list --search swe -q"]},show:{summary:"Show a dataset's versions, tasks and providers",flags:{limit:{kind:"number",short:"l",value:"<n>",help:"Task-list page size",group:"Paging"},cursor:{kind:"string",value:"<c>",help:"Resume the task list from a cursor",group:"Paging"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",examples:["evolve dataset show terminal-bench-4@4.0"]},check:{summary:"Pre-flight a local corpus without uploading anything",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<dir>",examples:["evolve dataset check ./corpus"]},publish:{summary:"Publish a dataset version",notes:"One source per publish: a pinned git ref, a local directory, or a public tarball or Harbor hub package. --name and --version are required with --git and with --from <url>; a local dataset.toml or a hub package can supply them.",flags:{git:{kind:"string",value:"<url>",help:"Git repository URL, with --ref",group:"Source"},ref:{kind:"string",value:"<ref>",help:"Pinned git ref, a full commit sha or a tag; a branch is refused",group:"Source"},path:{kind:"string",value:"<subfolder>",help:"Repository subfolder holding the corpus, with --git",group:"Source"},dir:{kind:"string",value:"<path>",help:"Local corpus directory, pre-flighted then uploaded",group:"Source"},from:{kind:"string",value:"<url|hub:org/name[@ref]>",help:"A public https tarball URL, or a public Harbor hub package",group:"Source"},name:{kind:"string",value:"<dataset>",help:"Catalog dataset name to create or extend",group:"Version"},version:{kind:"string",value:"<v>",help:"Version label for the published version",group:"Version"},watch:{kind:"boolean",help:"Poll until the version is READY or FAILED",group:"Output"},"skip-preflight":{kind:"boolean",help:"Upload a --dir without the pre-flight check",group:"Source"}},minPositionals:0,maxPositionals:0,examples:["evolve dataset publish --from hub:cookbook/hello-world --watch","evolve dataset publish --dir ./corpus --name my-swe --version 1.0 --watch",`evolve dataset publish \\
29
29
  --git https://github.com/acme/tasks \\
30
30
  --ref v1.2.0 \\
31
31
  --path corpus \\
@@ -39,35 +39,35 @@ Content-Type: application/gzip\r
39
39
  --allowed-host api.github.com \\
40
40
  --allowed-path-prefix / \\
41
41
  --allowed-method GET`,`printf %s "$OPENAI_API_KEY" | evolve secrets set OPENAI_API_KEY \\
42
- --delivery direct`]},list:{summary:"List your env secrets",flags:{columns:C.columns,quiet:{kind:"boolean",short:"q",help:"Print only name[:label], one per line",group:"Output"},"no-trunc":C["no-trunc"],"no-headers":C["no-headers"]},minPositionals:0,maxPositionals:0,examples:["evolve secrets list"]},delete:{summary:"Delete an env secret",notes:"Every runtime grant riding the row is revoked with it.",flags:{label:{kind:"string",value:"<label>",help:"The row to delete, when several share the name"}},minPositionals:1,maxPositionals:1,positionalUsage:"<NAME>",examples:["evolve secrets delete GITHUB_TOKEN","evolve secrets delete GITHUB_TOKEN --label staging"]}}}},$n={run:{summary:"Start a job; the short form of job start",flags:Pr,minPositionals:0,maxPositionals:0,examples:$r("evolve run")},analyze:{summary:"Judge a finished job's trial traces against a rubric",notes:"Each trial gets its own analysis run; `analysis list --job <id>` finds them again.",flags:{model:{kind:"string",short:"m",value:"<name>",help:"Model the analyzer runs",default:"openrouter/deepseek/deepseek-v4.1-flash",group:"Analyzer"},effort:{kind:"string",value:"<value>",help:"Reasoning effort the analyzer runs at",default:"the model's own",group:"Analyzer"},rubric:{kind:"string",short:"r",value:"<path>",help:"Rubric file, TOML, YAML or JSON, in Harbor's criteria shape",default:"the built-in analyze rubric",group:"Analyzer"},prompt:{kind:"string",short:"p",value:"<path>",help:"Prompt file for the analyzer, replacing the built-in prompt",group:"Analyzer"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider the analyzer runs on",default:"the analysis default",group:"Analyzer"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Max concurrent trial analyses",default:"your organization's ceiling",group:"Selection"},passing:{kind:"boolean",help:"Only passing trials, reward 1.0",group:"Selection"},failing:{kind:"boolean",help:"Only failing trials, reward below 1.0 or an error",group:"Selection"},"n-trials":{kind:"number",short:"l",value:"<n>",help:"Max trials to analyze, after --passing or --failing",group:"Selection"},watch:{kind:"boolean",help:"Poll until every analysis settles",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final block",group:"Output"}},minPositionals:1,maxPositionals:1,positionalUsage:"<job-id>",examples:["evolve analyze 3e1f9a2c --watch",`evolve analyze 3e1f9a2c \\
42
+ --delivery direct`]},list:{summary:"List your env secrets",flags:{columns:C.columns,quiet:{kind:"boolean",short:"q",help:"Print only name[:label], one per line",group:"Output"},"no-trunc":C["no-trunc"],"no-headers":C["no-headers"]},minPositionals:0,maxPositionals:0,examples:["evolve secrets list"]},delete:{summary:"Delete an env secret",notes:"Every runtime grant riding the row is revoked with it.",flags:{label:{kind:"string",value:"<label>",help:"The row to delete, when several share the name"}},minPositionals:1,maxPositionals:1,positionalUsage:"<NAME>",examples:["evolve secrets delete GITHUB_TOKEN","evolve secrets delete GITHUB_TOKEN --label staging"]}}}},In={run:{summary:"Start a job; the short form of job start",flags:xr,minPositionals:0,maxPositionals:0,examples:Tr("evolve run")},analyze:{summary:"Judge a finished job's trial traces against a rubric",notes:"Each trial gets its own analysis run; `analysis list --job <id>` finds them again.",flags:{model:{kind:"string",short:"m",value:"<name>",help:"Model the analyzer runs",default:"openrouter/deepseek/deepseek-v4.1-flash",group:"Analyzer"},effort:{kind:"string",value:"<value>",help:"Reasoning effort the analyzer runs at",default:"the model's own",group:"Analyzer"},rubric:{kind:"string",short:"r",value:"<path>",help:"Rubric file, TOML, YAML or JSON, in Harbor's criteria shape",default:"the built-in analyze rubric",group:"Analyzer"},prompt:{kind:"string",short:"p",value:"<path>",help:"Prompt file for the analyzer, replacing the built-in prompt",group:"Analyzer"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider the analyzer runs on",default:"the analysis default",group:"Analyzer"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Max concurrent trial analyses",default:"your organization's ceiling",group:"Selection"},passing:{kind:"boolean",help:"Only passing trials, reward 1.0",group:"Selection"},failing:{kind:"boolean",help:"Only failing trials, reward below 1.0 or an error",group:"Selection"},"n-trials":{kind:"number",short:"l",value:"<n>",help:"Max trials to analyze, after --passing or --failing",group:"Selection"},watch:{kind:"boolean",help:"Poll until every analysis settles",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final block",group:"Output"}},minPositionals:1,maxPositionals:1,positionalUsage:"<job-id>",examples:["evolve analyze 3e1f9a2c --watch",`evolve analyze 3e1f9a2c \\
43
43
  -r rubric.toml -p prompt.txt \\
44
44
  --failing -l 20 -n 2 \\
45
- --watch`]},check:{summary:"Check task quality against a rubric",notes:"Checks a local task directory, a directory of them, or with -d a published dataset. Results are read back with the verbs below.",flags:{model:{kind:"string",short:"m",value:"<name>",help:"Model the checker runs",default:"openrouter/deepseek/deepseek-v4.1-flash",group:"Checker"},effort:{kind:"string",value:"<value>",help:"Reasoning effort the checker runs at",default:"the model's own",group:"Checker"},rubric:{kind:"string",short:"r",value:"<path>",help:"Rubric file, TOML, YAML or JSON, in Harbor's criteria shape",default:"the built-in check rubric",group:"Checker"},prompt:{kind:"string",short:"p",value:"<path>",help:"Prompt file for the checker, replacing the built-in prompt",group:"Checker"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider the checker runs on",default:"the analysis default",group:"Checker"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Max concurrent task checks",default:"your organization's ceiling",group:"Selection"},"include-task-name":{kind:"repeat",short:"i",value:"<glob>",help:"Only tasks matching the glob; repeatable",group:"Selection"},"exclude-task-name":{kind:"repeat",short:"x",value:"<glob>",help:"Skip tasks matching the glob; repeatable",group:"Selection"},"n-tasks":{kind:"number",short:"l",value:"<n>",help:"Max tasks to check, after the globs, in sorted order",group:"Selection"},dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"A published dataset's tasks instead of a local <path>; not both",group:"Source"},watch:{kind:"boolean",help:"Poll until every task check settles",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final report",group:"Output"}},minPositionals:0,maxPositionals:1,positionalUsage:"[<path>]",examples:["evolve check ./tasks --watch","evolve check ./tasks -i 'abs-*' -l 5 --watch","evolve check -d terminal-bench-4@4.0 -l 10 --watch"]},upload:{summary:"Upload a Harbor job directory as a finished job",notes:"Takes the directory, its .tar.gz, or with --from a public URL of one, and follows the upload to the job it becomes.",flags:{dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"Link the uploaded trials to a published dataset version by task name",group:"Link"},from:{kind:"string",value:"<url>",help:"A public https URL of the job archive, instead of <job_dir>",group:"Source"},"no-wait":{kind:"boolean",help:"Return with the import id instead of following it; re-attach with job import <id> --watch",group:"Output"}},minPositionals:0,maxPositionals:1,positionalUsage:"<job_dir>",examples:["evolve upload ./job-2026-08-27__12-00-00 -d deep-swe@1.1","evolve upload --from https://example.com/job.tar.gz --no-wait"]}},Cr={jobs:"job",trials:"trial",analyses:"analysis",sessions:"session",datasets:"dataset",secret:"secrets"},Or={agents:'"agents" is reserved for the managed-agents CLI (not released yet) \u2014 for eval agent arms use "evolve agent"'},Zs={ls:"list"},fi=80,ht=23;function we(e,t="",n=fi){let s=[],r=t;for(let a of e.split(/\s+/).filter(o=>o!==""))r!==t&&r.length+1+a.length>n&&(s.push(r),r=t),r+=(r===t?"":" ")+a;return r!==t&&s.push(r),s}function qe(e,t,n){let s="".padEnd(n),[r,...a]=we(t,s);return [` ${e.padEnd(n-2)}${r.slice(n)}`,...a]}function gi(e,t){let n=[...t.short?[`-${t.short}`]:[],...(t.aliases??[]).map(r=>`--${r}`),`--${e}`];return `${t.short?"":" "}${n.join(", ")}${t.value?` ${t.value}`:""}`}function Cn(e){let t=Object.entries(e),n=t.map(([a,o])=>gi(a,o)),s=Math.min(Math.max(...n.map(a=>a.length))+4,34),r=[];return t.forEach(([,a],o)=>{let l=a.default!==void 0?`${a.help} (default: ${a.default})`:a.help;n[o].length+4>s?r.push(` ${n[o]}`,...we(l,"".padEnd(s))):r.push(...qe(n[o],l,s));}),r}function mi(e){let t=new Map;for(let[s,r]of Object.entries(e)){let a=r.group===void 0?"Options":r.group;t.set(a,{...t.get(a)??{},[s]:r});}let n=[];for(let[s,r]of t)n.push("",`${s}:`,...Cn(r));return n}function hi(e){return e.split(`
46
- `).map((t,n)=>n===0?` ${t}`:` ${t}`)}function er(e,t){let n=t.positionalUsage?` ${t.positionalUsage}`:"",s=Object.keys(t.flags).length>0?" [options]":"",r=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e}${n}${s}`];t.notes!==void 0&&r.push("",...we(t.notes)),r.push(...mi(t.flags)),r.push("","Global options:",...Cn(Pn));let a=ce[e];return a!==void 0&&r.push("","Commands:",...Dr(a)),r.push("","Examples:",...t.examples.flatMap(hi)),r.join(`
47
- `)}function Dr(e){let t=Math.max(...Object.keys(e.commands).map(n=>n.length))+4;return Object.entries(e.commands).flatMap(([n,s])=>qe(n,s.summary,t))}function tr(e){let t=ce[e],n=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e} <command> [options]`];return t.notes!==void 0&&n.push("",...we(t.notes)),n.push("","Commands:",...Dr(t)),n.push("",`Run "evolve ${e} <command> --help" for its options and examples.`),n.join(`
48
- `)}function bn(){let e=["evolve \u2014 Evolve hosted jobs CLI","","Usage: evolve <command> [options]","","Start here (for AI agents):"," evolve skills get evals","",...we("Skills ship with the CLI and match its version. `skills get evals` is the index of the documentation; `skills get evals <page>` prints one page; `--full` prints every page. Task authoring: `skills get create-task`, `rewardkit`, `create-adapter`, `publish`."," "),"","Commands:"];for(let[t,n]of Object.entries($n))e.push(...qe(t,n.summary,ht));e.push(...qe("help [command]","Show help; also -h/--help on any command",ht)),e.push("","Command groups (evolve <group> <verb>):");for(let[t,n]of Object.entries(ce))e.push(...qe(t,n.summary,ht)),e.push(...we(Object.keys(n.commands).join(", "),"".padEnd(ht)));return e.push("","Global options:",...Cn({...Pn,version:{kind:"boolean",short:"v",help:"Print the CLI version"}}),"","Examples:"," evolve run -d terminal-bench-4@4.0 -a codex -m gpt-5.5 -l 5 --watch"," evolve job list"," evolve skills get evals core-concepts/jobs"),e.join(`
49
- `)}var Ad=bn(),Ve=url.fileURLToPath(new URL("../..",(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));function _i(){try{return JSON.parse(fs.readFileSync(path.join(Ve,"package.json"),"utf-8")).version??"unknown"}catch{return "unknown"}}function kn(e,t){let n=[e.flags,Pn];for(let s of n)for(let[r,a]of Object.entries(s))if(t.long!==void 0){if(r===t.long||(a.aliases??[]).includes(t.long))return {name:r,flag:a}}else if(t.short!==void 0&&a.short===t.short)return {name:r,flag:a}}function yi(e,t){if(t==="--help"||t==="-h")return true;if(t.startsWith("--")){let n=t.slice(2).split("=")[0];return kn(e,{long:n})!==void 0}if(t.startsWith("-")&&t.length>1){let n=t.slice(1).split("=")[0];return kn(e,{short:n})!==void 0}return false}function _n(e,t,n){let s={},r=[];for(let a=0;a<n.length;a++){let o=n[a];if(o==="--help"||o==="-h")return {command:"help",positionals:e.split(" "),flags:{}};let l,c;if(o.startsWith("--")){let f=o.slice(2),g=f.indexOf("=");g!==-1&&(c=f.slice(g+1),f=f.slice(0,g)),l={long:f};}else if(o.startsWith("-")&&o.length>1){let f=o.slice(1),g=f.indexOf("=");g!==-1&&(c=f.slice(g+1),f=f.slice(0,g)),l={short:f};}else {r.push(o);continue}let i=kn(t,l);if(!i)throw new m(`Unknown option ${o.split("=")[0]} for "${e}"`);let{name:u,flag:d}=i;if(d.kind==="boolean"){if(c!==void 0)throw new m(`Option --${u} takes no value`);s[u]=true;continue}let p=c;if(p===void 0){let f=n[a+1];if(f===void 0||yi(t,f)){let g=f!==void 0?` (use --${u}=${f} if that is the value)`:"";throw new m(`Option --${u} requires a value${g}`)}p=f,a++;}if(d.kind==="number"){let f=Number(p);if(p.trim()===""||!Number.isFinite(f))throw new m(`Option --${u} expects a number, got "${p}"`);s[u]=f;}else if(d.kind==="repeat"){let f=s[u]??[];f.push(p),s[u]=f;}else s[u]=p;}if(r.length<t.minPositionals)throw new m(`"${e}" requires ${t.positionalUsage??`${t.minPositionals} argument(s)`}`);if(r.length>t.maxPositionals)throw new m(`"${e}" got unexpected argument "${r[t.maxPositionals]}"`);return {command:e,positionals:r,flags:s}}function bi(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:{}};let n=$n[t],s=t==="check"&&e[1]!==void 0&&!e[1].startsWith("-")?wn(ce.check,e.slice(1)):null;if(n&&s===null)return _n(t,n,e.slice(1));let r=Or[t];if(r)throw new m(r);let a=Cr[t]??t,o=ce[a];if(!o)throw new m(`Unknown command "${t}"`);let l=e[1];if(l==="--help"||l==="-h")return {command:"help",positionals:[a],flags:{}};if(l===void 0||l.startsWith("-")){if(o.defaultVerb===void 0){if(l===void 0)return {command:"help",positionals:[a],flags:{}};throw new m(`"${a}" requires a command (run "evolve ${a} --help")`)}return _n(`${a} ${o.defaultVerb}`,o.commands[o.defaultVerb],e.slice(1))}let c=wn(o,e.slice(1));if(!c){let i=e[2];if(ki(o,l)&&(i===void 0||i==="--help"||i==="-h"))return {command:"help",positionals:[a,l],flags:{}};throw new m(`Unknown command "${a} ${l}" (supported: ${Object.keys(o.commands).join(", ")})`)}return _n(`${a} ${c.verb}`,c.spec,e.slice(1+c.words))}function wn(e,t){let n=t[0],s=t[1];if(n!==void 0&&s!==void 0&&!s.startsWith("-")){let o=`${n} ${Zs[s]??s}`,l=e.commands[o];if(l)return {verb:o,spec:l,words:2}}if(n===void 0)return null;let r=Zs[n]??n,a=e.commands[r];return a?{verb:r,spec:a,words:1}:null}function ki(e,t){return Object.keys(e.commands).some(n=>n.startsWith(`${t} `))}function wi(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 vi=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)$/,Si=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)[eE][-+][0-9]+$/;function Ai(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:Si}:t.test.test("1.5")?{...t,test:vi}:t)}var xi=/^[-+]?(?:0|[1-9][0-9_]*)$/,Ti=/^[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+$/;function Ri(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:Ti}:t.test.test("19")?{...t,test:xi}:t)}function Ei(e,t){return jr(e,t).value}function jr(e,t){let n=new yaml.LineCounter,s=yaml.parseDocument(e,{version:"1.1",schema:"yaml-1.1",resolveKnownTags:false,lineCounter:n,customTags:l=>Ri(Ai(wi(l)))}),r=s.errors[0]??s.warnings[0];if(r){let l=r.linePos?.[0]?.line??1,c=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 m(`${t}:${l}: ${c}`)}s.options.logLevel="silent";let a;try{a=s.toJS()??{};}catch(l){throw new m(`${t}: ${l.message}`)}return {value:a,locate:l=>{let i=s.getIn(l,true)?.range?.[0];return i===void 0?void 0:n.linePos(i).line}}}var Ii=["../../spec/openapi.yaml","../../../../spec/openapi.yaml"],_t;function Pi(){if(_t)return _t;let e=[],t=Ii.map(s=>url.fileURLToPath(new URL(s,(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))))),n=process.env.EVOLVE_OPENAPI_SPEC_PATH;n&&t.unshift(n);for(let s of t){if(e.push(s),!fs.existsSync(s))continue;let a=yaml.parse(fs.readFileSync(s,"utf-8"))?.components?.schemas,o=a?.JobCreate;if(!a||!o||typeof o!="object")throw new Error(`${s} carries no components.schemas.JobCreate \u2014 the contract this CLI validates -c against`);return _t={root:o,components:a},_t}throw new Error(`spec/openapi.yaml not found (tried: ${e.join(", ")}) \u2014 the package ships it; reinstall the SDK, or point EVOLVE_OPENAPI_SPEC_PATH at a contract checkout`)}function Lr(e){let t=e.type;return typeof t=="string"?[t]:Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}function On(e,t,n){let s=e.$ref;if(typeof s!="string")return {schema:e,specName:n};let r=s.replace("#/components/schemas/",""),a=t[r];if(!a)throw new Error(`spec/openapi.yaml: unresolvable $ref "${s}"`);return On(a,t,r)}function $i(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 Nr(e,t){let n=t.locate?.(e),s=`${t.source}${n!==void 0?`:${n}`:""}`;return e.length===0?s:`${$i(e)} in ${s}`}function N(e,t,n,s){throw new m(`--config: ${Nr(e,t)} ${n} [spec: ${s}]`)}function Ci(e){for(let t=e.length-1;t>=0;t--)if(typeof e[t]=="string")return e[t];return "value"}function Oi(e,t){if(!e)return "a list";let n=On(e,t.components,""),s=Lr(n.schema);return s.includes("string")?"a list of strings":s.includes("object")?"a list of objects":"a list"}function yt(e,t,n,s,r,a=false){let{schema:o,specName:l}=On(t,r.components,s),c=Lr(o),i=u=>l?`${l}.${u}`:u;if(e===null){if(c.includes("null"))return;N(n,r,`must be a ${c[0]??"value"}, not null`,l);}if(c.includes("object")){let u=ee(o.additionalProperties)?o.additionalProperties:void 0;if(!ee(e)){let p=u&&!o.properties?`must be a map of KEY: "value" pairs, not ${ue(e)}`:`must be an object like {${Di(o)}: "..."}, not ${ue(e)}`;N(n,r,p,l);}let d=ee(o.properties)?o.properties:void 0;if(d){if(!a&&Array.isArray(o.required))for(let p of o.required)typeof p=="string"&&e[p]===void 0&&N(n,r,`is missing the required key "${p}"`,l);for(let p of Object.keys(e))if(d[p]===void 0&&!u)throw new m(`--config: unknown key "${p}" in ${Nr([...n,p],r)} (allowed: ${Object.keys(d).join(", ")}) [spec: ${l}]`);for(let[p,f]of Object.entries(d)){let g=e[p];g!==void 0&&yt(g,f,[...n,p],i(p),r);}}if(u)for(let[p,f]of Object.entries(e))d?.[p]===void 0&&yt(f,u,[...n,p],l,r);return}if(c.includes("array")){let u=ee(o.items)?o.items:void 0;Array.isArray(e)||N(n,r,`must be ${Oi(u,r)}, not ${ue(e)}`,l),typeof o.minItems=="number"&&e.length<o.minItems&&N(n,r,`needs at least ${o.minItems} ${o.minItems===1?"entry":"entries"}`,l),typeof o.maxItems=="number"&&e.length>o.maxItems&&N(n,r,`takes at most ${o.maxItems} entries`,l),u&&e.forEach((d,p)=>yt(d,u,[...n,p],l,r));return}if(Array.isArray(o.enum)){o.enum.includes(e)||N(n,r,`must be one of: ${o.enum.join(", ")}`,l);return}if(c.includes("string")){typeof e!="string"&&N(n,r,`must be a string, not ${ue(e)} \u2014 quote it (${Ci(n)}: "...")`,l),typeof o.maxLength=="number"&&e.length>o.maxLength&&N(n,r,`must be at most ${o.maxLength} characters (got ${e.length})`,l);return}if(c.includes("integer")||c.includes("number")){let u=c.includes("integer");(typeof e!="number"||u&&!Number.isInteger(e))&&N(n,r,`must be ${u?"an integer":"a number"}, not ${ue(e)}`,l),typeof o.minimum=="number"&&e<o.minimum&&N(n,r,`must be at least ${o.minimum}`,l),typeof o.maximum=="number"&&e>o.maximum&&N(n,r,`must be at most ${o.maximum}`,l);return}c.includes("boolean")&&typeof e!="boolean"&&N(n,r,`must be a boolean, not ${ue(e)}`,l);}function Di(e){let t=Array.isArray(e.required)?e.required[0]:void 0;return typeof t=="string"?t:(ee(e.properties)?Object.keys(e.properties):[])[0]??"name"}function ji(e,t,n){let{root:s,components:r}=Pi();yt(e,s,[],"JobCreate",{source:t,locate:n,components:r},true);}function ue(e){return e===null?"null":Array.isArray(e)?"a list":typeof e=="object"?`a ${e.constructor?.name??"object"}`:`a ${typeof e}`}function ee(e){if(typeof e!="object"||e===null||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function vn(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 m(`--config: ${t} in ${n} is ${Number.isNaN(e)?".nan":"infinite"} \u2014 a JSON body carries finite numbers only`)}if(Array.isArray(e)||ee(e)){if(s.has(e))throw new m(`--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,a)=>vn(r,`${t}[${a}]`,n,s));else for(let[r,a]of Object.entries(e))vn(a,`${t}.${r}`,n,s);s.delete(e);return}throw new m(`--config: ${t} in ${n} resolved to ${ue(e)}, which a JSON body cannot carry \u2014 quote the value to keep it text`)}}function Li(e,t){let n;try{n=t(e);}catch(o){throw new m(`--config: cannot read ${e}: ${o.message}`)}let s,r;if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(o){throw new m(`--config: ${e} is not valid JSON: ${o.message}`)}else ({value:s,locate:r}=jr(n,e));if(!s||typeof s!="object"||Array.isArray(s))throw new m(`--config: ${e} must contain a JSON/YAML object`);let a=s;for(let[o,l]of Object.entries(a))vn(l,o,e);return ji(a,e,r),s}function nr(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 m(`Invalid ${t} "${e}": expected name or name@version`);return {name:s,version:r}}function Ni(e){let t=e.trim();try{return JSON.parse(t)}catch{return t==="True"?true:t==="False"?false:t==="None"?null:t}}function Ui(e,t=n=>fs.readFileSync(n,"utf-8")){let n={};for(let s of e){let r=s.indexOf("=");if(r<=0)throw new m(`Invalid --ak "${s}": expected key=value`);let a=s.slice(0,r).trim(),o=Ni(s.slice(r+1));a==="config"&&typeof o=="string"&&(o=Ji(o,t)),n[a]=o;}return n}function Ji(e,t){let n;try{n=t(e);}catch(r){throw new m(`--ak config: cannot read ${e}: ${r.message}`)}let s;if(e.endsWith(".toml"))try{s=smolToml.parse(n);}catch(r){throw new m(`--ak config: ${e} is not valid TOML: ${r.message}`)}else if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(r){throw new m(`--ak config: ${e} is not valid JSON: ${r.message}`)}else try{s=JSON.parse(n);}catch{try{s=smolToml.parse(n);}catch{throw new m(`--ak config: ${e} parses as neither JSON nor TOML; use a .json or .toml settings file`)}}if(!s||typeof s!="object"||Array.isArray(s))throw new m(`--ak config: ${e} must contain a settings object`);return s}function Dn(e,t=n=>fs.readFileSync(n,"utf-8")){let n;try{n=t(e);}catch(s){throw new m(`--prompt: cannot read ${e}: ${s.message}`)}if(n.trim().length===0)throw new m(`--prompt: ${e} is empty \u2014 the analyzer's prompt file must carry the instruction text`);return n}function jn(e,t=n=>fs.readFileSync(n,"utf-8")){let n;try{n=t(e);}catch(o){throw new m(`--rubric: cannot read ${e}: ${o.message}`)}let s;if(e.endsWith(".toml"))try{s=smolToml.parse(n);}catch(o){throw new m(`--rubric: ${e} is not valid TOML: ${o.message}`)}else if(e.endsWith(".yaml")||e.endsWith(".yml"))s=Ei(n,e);else if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(o){throw new m(`--rubric: ${e} is not valid JSON: ${o.message}`)}else throw new m(`--rubric: unsupported rubric format "${e}" \u2014 use a .toml, .yaml, .yml, or .json file (Harbor's own set)`);if(!ee(s))throw new m(`--rubric: ${e} must contain a {criteria: [...]} object`);let r=Object.keys(s).filter(o=>o!=="criteria");if(r.length>0)throw new m(`--rubric: unknown key${r.length===1?"":"s"} ${r.map(o=>`"${o}"`).join(", ")} in ${e} \u2014 a rubric is {criteria: [{name, description, guidance}]}`);let a=s.criteria;if(!Array.isArray(a)||a.length===0)throw new m(`--rubric: ${e} needs a non-empty criteria list ([[criteria]] entries in TOML)`);return {criteria:a.map((o,l)=>{let c=`criteria[${l}] in ${e}`;if(!ee(o))throw new m(`--rubric: ${c} must be a {name, description, guidance} object`);let i=Object.keys(o).filter(u=>u!=="name"&&u!=="description"&&u!=="guidance");if(i.length>0)throw new m(`--rubric: unknown key${i.length===1?"":"s"} ${i.map(u=>`"${u}"`).join(", ")} in ${c} \u2014 a criterion is {name, description, guidance}`);for(let u of ["name","description","guidance"])if(typeof o[u]!="string"||o[u].length===0)throw new m(`--rubric: ${c} needs a non-empty string "${u}"`);return {name:o.name,description:o.description,guidance:o.guidance}})}}function Mi(e){return e.map(t=>{let n=t.indexOf("="),s=n===-1?t:t.slice(0,n),r=n===-1?void 0:t.slice(n+1);if(n!==-1&&!r)throw new m(`Invalid --secret "${t}": expected NAME[@LABEL][=ENVNAME]`);let a=s.indexOf("@"),o=a===-1?s:s.slice(0,a),l=a===-1?void 0:s.slice(a+1);if(!o||a!==-1&&!l)throw new m(`Invalid --secret "${t}": expected NAME[@LABEL][=ENVNAME]`);return {name:o,...l!==void 0?{label:l}:{},...r!==void 0?{as:r}:{}}})}function Fi(e){let t="NAME[@LABEL]:brokered|direct=VALUE";return e.map(n=>{let s=n.indexOf("=");if(s===-1)throw new m(`Invalid --secret-inline "${n}": expected ${t}`);let r=n.slice(0,s),a=n.slice(s+1);if(!a)throw new m(`Invalid --secret-inline "${n}": the value must not be empty`);let o=r.lastIndexOf(":");if(o===-1)throw new m(`Invalid --secret-inline "${r}=...": a delivery mode is required \u2014 ${t}`);let l=r.slice(0,o),c=r.slice(o+1);if(c!=="brokered"&&c!=="direct")throw new m(`Invalid --secret-inline delivery "${c}": expected brokered or direct`);let i=l.indexOf("@"),u=i===-1?l:l.slice(0,i),d=i===-1?void 0:l.slice(i+1);if(!u||i!==-1&&!d)throw new m(`Invalid --secret-inline "${r}=...": expected ${t}`);return {name:u,value:a,delivery:c,...d!==void 0?{label:d}:{}}})}function Sn(e,t){let n={};for(let s of e){let r=s.indexOf("=");if(r<=0)throw new m(`Invalid ${t} "${s}": expected KEY=VALUE`);n[s.slice(0,r)]=s.slice(r+1);}return n}function Bi(e,t=n=>fs.readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.config=="string"?Li(n.config,t):{},r;if(n.dataset!==void 0)r=n.dataset.map(b=>{let S=nr(b,"--dataset");return {name:S.name,...S.version?{version:S.version}:{}}});else if(Array.isArray(s.datasets)&&s.datasets.length>0)r=s.datasets.map(b=>({...b}));else throw new m(`"${e.command}" requires -d/--dataset (or datasets in --config)`);if(n["include-task-name"]!==void 0)for(let b of r)b.task_names=n["include-task-name"];if(n["exclude-task-name"]!==void 0)for(let b of r)b.exclude_task_names=n["exclude-task-name"];if(n["n-tasks"]!==void 0)for(let b of r)b.n_tasks=n["n-tasks"];let a;if(n.agent!==void 0||n.model!==void 0){if(n.agent===void 0)throw new m("-m/--model requires -a/--agent");if(n.model===void 0)throw new m("-a/--agent requires at least one -m/--model (the server applies no model default)");let b=nr(String(n.agent),"--agent");a=n.model.map(S=>({name:b.name,model_name:S,...b.version?{version:b.version}:{}}));}else if(Array.isArray(s.agents)&&s.agents.length>0)a=s.agents.map(b=>({...b}));else throw new m(`"${e.command}" requires -a/--agent and -m/--model (or agents in --config)`);if(n.effort!==void 0&&(a=a.map(b=>({...b,reasoning_effort:n.effort}))),n.ak!==void 0){let b=Ui(n.ak,t);a=a.map(S=>({...S,kwargs:{...S.kwargs??{},...b}}));}n.preset!==void 0&&(a=a.map(b=>({...b,preset:n.preset}))),n.skill!==void 0&&(a=a.map(b=>({...b,skills:[...n.skill]})));let l=n["agent-env"]!==void 0?Sn(n["agent-env"],"--agent-env"):s.agent_env,c=n["verifier-env"]!==void 0?Sn(n["verifier-env"],"--verifier-env"):s.verifier_env,i=n.secret!==void 0||n["secret-inline"]!==void 0?[...n.secret!==void 0?Mi(n.secret):[],...n["secret-inline"]!==void 0?Fi(n["secret-inline"]):[]]:s.secrets,u=n["job-name"]!==void 0?String(n["job-name"]):s.job_name,d=n["n-attempts"]!==void 0?n["n-attempts"]:s.n_attempts,p=n["n-concurrent"]!==void 0?n["n-concurrent"]:s.n_concurrent_trials,f=n["max-trial-spend"]!==void 0?n["max-trial-spend"]:s.max_trial_spend_usd;if(n.env!==void 0&&!Ye.includes(String(n.env)))throw new m(`-e/--env must be one of: ${Ye.join(", ")}`);let g=n.env!==void 0?n.env:s.sandbox_provider,h={...s.retry??{}};n["max-retries"]!==void 0&&(h.max_retries=n["max-retries"]),n["retry-include"]!==void 0&&(h.include_exceptions=n["retry-include"]),n["retry-exclude"]!==void 0&&(h.exclude_exceptions=n["retry-exclude"]);let y=n.analyze===true||n["analyze-model"]!==void 0||n["analyze-rubric"]!==void 0||n["analyze-prompt"]!==void 0||n["analyze-provider"]!==void 0||n["analyze-effort"]!==void 0||s.analyze!==void 0,_={...s.analyze??{}};n["analyze-model"]!==void 0&&(_.model_name=String(n["analyze-model"])),n["analyze-rubric"]!==void 0&&(_.rubric=jn(String(n["analyze-rubric"]),t)),n["analyze-prompt"]!==void 0&&(_.prompt=Dn(String(n["analyze-prompt"]),t)),n["analyze-provider"]!==void 0&&(_.sandbox_provider=String(n["analyze-provider"])),n["analyze-effort"]!==void 0&&(_.reasoning_effort=String(n["analyze-effort"]));let v={};for(let[b,S]of [["timeout-multiplier","timeout_multiplier"],["agent-timeout-multiplier","agent_timeout_multiplier"],["verifier-timeout-multiplier","verifier_timeout_multiplier"],["agent-setup-timeout-multiplier","agent_setup_timeout_multiplier"],["environment-build-timeout-multiplier","environment_build_timeout_multiplier"]]){let A=n[b]!==void 0?n[b]:s[S];A!==void 0&&(v[S]=A);}return {...u!==void 0?{job_name:u}:{},datasets:r,agents:a,...d!==void 0?{n_attempts:d}:{},...p!==void 0?{n_concurrent_trials:p}:{},...f!==void 0?{max_trial_spend_usd:f}:{},...g!==void 0?{sandbox_provider:g}:{},...Object.keys(h).length>0?{retry:h}:{},...y?{analyze:_}:{},...v,...l!==void 0?{agent_env:l}:{},...c!==void 0?{verifier_env:c}:{},...i!==void 0?{secrets:i}:{}}}function qi(e){let t=e.flags,n=typeof t.dir=="string",s=typeof t.git=="string"||typeof t.ref=="string"||typeof t.path=="string",r=typeof t.from=="string";if([n,s,r].filter(Boolean).length>1)throw new m('"dataset publish" takes EXACTLY ONE source: --dir, --git/--ref/--path, or --from');if(r){let o=t.from.trim();if(o.startsWith("hub:")){let l=o.slice(4);if(l==="")throw new m('"--from hub:" needs a package reference \u2014 hub:org/name[@ref], e.g. hub:cookbook/hello-world');return {source:{hub_package:l},...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{}}}if(!o.startsWith("https://"))throw new m(`"--from" takes a public https tarball url or hub:org/name[@ref] (got "${o}")`);for(let l of ["name","version"])if(typeof t[l]!="string")throw new m(`"dataset publish" requires --${l} with --from <url> \u2014 the server fetches the tarball only after the publish is accepted, so nothing can supply it later`);return {source:{archive_url:o},name:t.name,version:t.version}}if(n)return {source:{directory:t.dir},...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{}};for(let o of ["git","ref","name","version"])if(typeof t[o]!="string"){let l=o==="git"||o==="ref"?" (or --dir for a local corpus directory)":" (a git source cannot take it from dataset.toml \u2014 the repository is only cloned after the publish is accepted)";throw new m(`"dataset publish" requires --${o}${l}`)}return {source:{git_url:t.git,git_ref:t.ref,...typeof t.path=="string"?{git_path:t.path}:{}},name:t.name,version:t.version}}function zi(e,t=n=>fs.readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.dir=="string",r=typeof n["install-script"]=="string";if(s&&r)throw new m('"agent add" takes EITHER --dir OR --install-script, not both');if(!s&&!r)throw new m('"agent add" requires --install-script (or --dir for a local agent directory)');if(typeof n.run!="string")throw new m('"agent add" requires --run');let a=Sn(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(a).length>0?{env:a}:{}}}var Hi={out:e=>process.stdout.write(e+`
45
+ --watch`]},check:{summary:"Check task quality against a rubric",notes:"Checks a local task directory, a directory of them, or with -d a published dataset. Results are read back with the verbs below.",flags:{model:{kind:"string",short:"m",value:"<name>",help:"Model the checker runs",default:"openrouter/deepseek/deepseek-v4.1-flash",group:"Checker"},effort:{kind:"string",value:"<value>",help:"Reasoning effort the checker runs at",default:"the model's own",group:"Checker"},rubric:{kind:"string",short:"r",value:"<path>",help:"Rubric file, TOML, YAML or JSON, in Harbor's criteria shape",default:"the built-in check rubric",group:"Checker"},prompt:{kind:"string",short:"p",value:"<path>",help:"Prompt file for the checker, replacing the built-in prompt",group:"Checker"},env:{kind:"string",short:"e",value:"<provider>",help:"Sandbox provider the checker runs on",default:"the analysis default",group:"Checker"},"n-concurrent":{kind:"number",short:"n",value:"<n>",help:"Max concurrent task checks",default:"your organization's ceiling",group:"Selection"},"include-task-name":{kind:"repeat",short:"i",value:"<glob>",help:"Only tasks matching the glob; repeatable",group:"Selection"},"exclude-task-name":{kind:"repeat",short:"x",value:"<glob>",help:"Skip tasks matching the glob; repeatable",group:"Selection"},"n-tasks":{kind:"number",short:"l",value:"<n>",help:"Max tasks to check, after the globs, in sorted order",group:"Selection"},dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"A published dataset's tasks instead of a local <path>; not both",group:"Source"},watch:{kind:"boolean",help:"Poll until every task check settles",group:"Output"},quiet:{kind:"boolean",short:"q",help:"With --watch, print only the final report",group:"Output"}},minPositionals:0,maxPositionals:1,positionalUsage:"[<path>]",examples:["evolve check ./tasks --watch","evolve check ./tasks -i 'abs-*' -l 5 --watch","evolve check -d terminal-bench-4@4.0 -l 10 --watch"]},upload:{summary:"Upload a Harbor job directory as a finished job",notes:"Takes the directory, its .tar.gz, or with --from a public URL of one, and follows the upload to the job it becomes.",flags:{dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"Link the uploaded trials to a published dataset version by task name",group:"Link"},from:{kind:"string",value:"<url>",help:"A public https URL of the job archive, instead of <job_dir>",group:"Source"},"no-wait":{kind:"boolean",help:"Return with the import id instead of following it; re-attach with job import <id> --watch",group:"Output"}},minPositionals:0,maxPositionals:1,positionalUsage:"<job_dir>",examples:["evolve upload ./job-2026-08-27__12-00-00 -d deep-swe@1.1","evolve upload --from https://example.com/job.tar.gz --no-wait"]}},Rr={jobs:"job",trials:"trial",analyses:"analysis",sessions:"session",datasets:"dataset",secret:"secrets"},Er={agents:'"agents" is reserved for the managed-agents CLI (not released yet) \u2014 for eval agent arms use "evolve agent"'},Ks={ls:"list"},ci=80,mt=23;function we(e,t="",n=ci){let s=[],r=t;for(let a of e.split(/\s+/).filter(o=>o!==""))r!==t&&r.length+1+a.length>n&&(s.push(r),r=t),r+=(r===t?"":" ")+a;return r!==t&&s.push(r),s}function Be(e,t,n){let s="".padEnd(n),[r,...a]=we(t,s);return [` ${e.padEnd(n-2)}${r.slice(n)}`,...a]}function di(e,t){let n=[...t.short?[`-${t.short}`]:[],...(t.aliases??[]).map(r=>`--${r}`),`--${e}`];return `${t.short?"":" "}${n.join(", ")}${t.value?` ${t.value}`:""}`}function Pn(e){let t=Object.entries(e),n=t.map(([a,o])=>di(a,o)),s=Math.min(Math.max(...n.map(a=>a.length))+4,34),r=[];return t.forEach(([,a],o)=>{let l=a.default!==void 0?`${a.help} (default: ${a.default})`:a.help;n[o].length+4>s?r.push(` ${n[o]}`,...we(l,"".padEnd(s))):r.push(...Be(n[o],l,s));}),r}function pi(e){let t=new Map;for(let[s,r]of Object.entries(e)){let a=r.group===void 0?"Options":r.group;t.set(a,{...t.get(a)??{},[s]:r});}let n=[];for(let[s,r]of t)n.push("",`${s}:`,...Pn(r));return n}function fi(e){return e.split(`
46
+ `).map((t,n)=>n===0?` ${t}`:` ${t}`)}function Ws(e,t){let n=t.positionalUsage?` ${t.positionalUsage}`:"",s=Object.keys(t.flags).length>0?" [options]":"",r=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e}${n}${s}`];t.notes!==void 0&&r.push("",...we(t.notes)),r.push(...pi(t.flags)),r.push("","Global options:",...Pn(En));let a=ce[e];return a!==void 0&&r.push("","Commands:",...Ir(a)),r.push("","Examples:",...t.examples.flatMap(fi)),r.join(`
47
+ `)}function Ir(e){let t=Math.max(...Object.keys(e.commands).map(n=>n.length))+4;return Object.entries(e.commands).flatMap(([n,s])=>Be(n,s.summary,t))}function Ys(e){let t=ce[e],n=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e} <command> [options]`];return t.notes!==void 0&&n.push("",...we(t.notes)),n.push("","Commands:",...Ir(t)),n.push("",`Run "evolve ${e} <command> --help" for its options and examples.`),n.join(`
48
+ `)}function _n(){let e=["evolve \u2014 Evolve hosted jobs CLI","","Usage: evolve <command> [options]","","Start here (for AI agents):"," evolve skills get evals","",...we("Skills ship with the CLI and match its version. `skills get evals` is the index of the documentation; `skills get evals <page>` prints one page; `--full` prints every page. Task authoring: `skills get create-task`, `rewardkit`, `create-adapter`, `publish`."," "),"","Commands:"];for(let[t,n]of Object.entries(In))e.push(...Be(t,n.summary,mt));e.push(...Be("help [command]","Show help; also -h/--help on any command",mt)),e.push("","Command groups (evolve <group> <verb>):");for(let[t,n]of Object.entries(ce))e.push(...Be(t,n.summary,mt)),e.push(...we(Object.keys(n.commands).join(", "),"".padEnd(mt)));return e.push("","Global options:",...Pn({...En,version:{kind:"boolean",short:"v",help:"Print the CLI version"}}),"","Examples:"," evolve run -d terminal-bench-4@4.0 -a codex -m gpt-6-astra -l 5 --watch"," evolve job list"," evolve skills get evals core-concepts/jobs"),e.join(`
49
+ `)}var wd=_n(),He=url.fileURLToPath(new URL("../..",(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));function gi(){try{return JSON.parse(fs$1.readFileSync(path.join(He,"package.json"),"utf-8")).version??"unknown"}catch{return "unknown"}}function yn(e,t){let n=[e.flags,En];for(let s of n)for(let[r,a]of Object.entries(s))if(t.long!==void 0){if(r===t.long||(a.aliases??[]).includes(t.long))return {name:r,flag:a}}else if(t.short!==void 0&&a.short===t.short)return {name:r,flag:a}}function mi(e,t){if(t==="--help"||t==="-h")return true;if(t.startsWith("--")){let n=t.slice(2).split("=")[0];return yn(e,{long:n})!==void 0}if(t.startsWith("-")&&t.length>1){let n=t.slice(1).split("=")[0];return yn(e,{short:n})!==void 0}return false}function mn(e,t,n){let s={},r=[];for(let a=0;a<n.length;a++){let o=n[a];if(o==="--help"||o==="-h")return {command:"help",positionals:e.split(" "),flags:{}};let l,c;if(o.startsWith("--")){let f=o.slice(2),g=f.indexOf("=");g!==-1&&(c=f.slice(g+1),f=f.slice(0,g)),l={long:f};}else if(o.startsWith("-")&&o.length>1){let f=o.slice(1),g=f.indexOf("=");g!==-1&&(c=f.slice(g+1),f=f.slice(0,g)),l={short:f};}else {r.push(o);continue}let i=yn(t,l);if(!i)throw new m(`Unknown option ${o.split("=")[0]} for "${e}"`);let{name:u,flag:d}=i;if(d.kind==="boolean"){if(c!==void 0)throw new m(`Option --${u} takes no value`);s[u]=true;continue}let p=c;if(p===void 0){let f=n[a+1];if(f===void 0||mi(t,f)){let g=f!==void 0?` (use --${u}=${f} if that is the value)`:"";throw new m(`Option --${u} requires a value${g}`)}p=f,a++;}if(d.kind==="number"){let f=Number(p);if(p.trim()===""||!Number.isFinite(f))throw new m(`Option --${u} expects a number, got "${p}"`);s[u]=f;}else if(d.kind==="repeat"){let f=s[u]??[];f.push(p),s[u]=f;}else s[u]=p;}if(r.length<t.minPositionals)throw new m(`"${e}" requires ${t.positionalUsage??`${t.minPositionals} argument(s)`}`);if(r.length>t.maxPositionals)throw new m(`"${e}" got unexpected argument "${r[t.maxPositionals]}"`);return {command:e,positionals:r,flags:s}}function hi(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:{}};let n=In[t],s=t==="check"&&e[1]!==void 0&&!e[1].startsWith("-")?bn(ce.check,e.slice(1)):null;if(n&&s===null)return mn(t,n,e.slice(1));let r=Er[t];if(r)throw new m(r);let a=Rr[t]??t,o=ce[a];if(!o)throw new m(`Unknown command "${t}"`);let l=e[1];if(l==="--help"||l==="-h")return {command:"help",positionals:[a],flags:{}};if(l===void 0||l.startsWith("-")){if(o.defaultVerb===void 0){if(l===void 0)return {command:"help",positionals:[a],flags:{}};throw new m(`"${a}" requires a command (run "evolve ${a} --help")`)}return mn(`${a} ${o.defaultVerb}`,o.commands[o.defaultVerb],e.slice(1))}let c=bn(o,e.slice(1));if(!c){let i=e[2];if(_i(o,l)&&(i===void 0||i==="--help"||i==="-h"))return {command:"help",positionals:[a,l],flags:{}};throw new m(`Unknown command "${a} ${l}" (supported: ${Object.keys(o.commands).join(", ")})`)}return mn(`${a} ${c.verb}`,c.spec,e.slice(1+c.words))}function bn(e,t){let n=t[0],s=t[1];if(n!==void 0&&s!==void 0&&!s.startsWith("-")){let o=`${n} ${Ks[s]??s}`,l=e.commands[o];if(l)return {verb:o,spec:l,words:2}}if(n===void 0)return null;let r=Ks[n]??n,a=e.commands[r];return a?{verb:r,spec:a,words:1}:null}function _i(e,t){return Object.keys(e.commands).some(n=>n.startsWith(`${t} `))}function yi(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 bi=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)$/,ki=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)[eE][-+][0-9]+$/;function wi(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:ki}:t.test.test("1.5")?{...t,test:bi}:t)}var vi=/^[-+]?(?:0|[1-9][0-9_]*)$/,Si=/^[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+$/;function Ai(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:Si}:t.test.test("19")?{...t,test:vi}:t)}function xi(e,t){return Pr(e,t).value}function Pr(e,t){let n=new yaml.LineCounter,s=yaml.parseDocument(e,{version:"1.1",schema:"yaml-1.1",resolveKnownTags:false,lineCounter:n,customTags:l=>Ai(wi(yi(l)))}),r=s.errors[0]??s.warnings[0];if(r){let l=r.linePos?.[0]?.line??1,c=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 m(`${t}:${l}: ${c}`)}s.options.logLevel="silent";let a;try{a=s.toJS()??{};}catch(l){throw new m(`${t}: ${l.message}`)}return {value:a,locate:l=>{let i=s.getIn(l,true)?.range?.[0];return i===void 0?void 0:n.linePos(i).line}}}var Ti=["../../spec/openapi.yaml","../../../../spec/openapi.yaml"],ht;function Ri(){if(ht)return ht;let e=[],t=Ti.map(s=>url.fileURLToPath(new URL(s,(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))))),n=process.env.EVOLVE_OPENAPI_SPEC_PATH;n&&t.unshift(n);for(let s of t){if(e.push(s),!fs$1.existsSync(s))continue;let a=yaml.parse(fs$1.readFileSync(s,"utf-8"))?.components?.schemas,o=a?.JobCreate;if(!a||!o||typeof o!="object")throw new Error(`${s} carries no components.schemas.JobCreate \u2014 the contract this CLI validates -c against`);return ht={root:o,components:a},ht}throw new Error(`spec/openapi.yaml not found (tried: ${e.join(", ")}) \u2014 the package ships it; reinstall the SDK, or point EVOLVE_OPENAPI_SPEC_PATH at a contract checkout`)}function $r(e){let t=e.type;return typeof t=="string"?[t]:Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}function $n(e,t,n){let s=e.$ref;if(typeof s!="string")return {schema:e,specName:n};let r=s.replace("#/components/schemas/",""),a=t[r];if(!a)throw new Error(`spec/openapi.yaml: unresolvable $ref "${s}"`);return $n(a,t,r)}function Ei(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 Cr(e,t){let n=t.locate?.(e),s=`${t.source}${n!==void 0?`:${n}`:""}`;return e.length===0?s:`${Ei(e)} in ${s}`}function L(e,t,n,s){throw new m(`--config: ${Cr(e,t)} ${n} [spec: ${s}]`)}function Ii(e){for(let t=e.length-1;t>=0;t--)if(typeof e[t]=="string")return e[t];return "value"}function Pi(e,t){if(!e)return "a list";let n=$n(e,t.components,""),s=$r(n.schema);return s.includes("string")?"a list of strings":s.includes("object")?"a list of objects":"a list"}function _t(e,t,n,s,r,a=false){let{schema:o,specName:l}=$n(t,r.components,s),c=$r(o),i=u=>l?`${l}.${u}`:u;if(e===null){if(c.includes("null"))return;L(n,r,`must be a ${c[0]??"value"}, not null`,l);}if(c.includes("object")){let u=ee(o.additionalProperties)?o.additionalProperties:void 0;if(!ee(e)){let p=u&&!o.properties?`must be a map of KEY: "value" pairs, not ${ue(e)}`:`must be an object like {${$i(o)}: "..."}, not ${ue(e)}`;L(n,r,p,l);}let d=ee(o.properties)?o.properties:void 0;if(d){if(!a&&Array.isArray(o.required))for(let p of o.required)typeof p=="string"&&e[p]===void 0&&L(n,r,`is missing the required key "${p}"`,l);for(let p of Object.keys(e))if(d[p]===void 0&&!u)throw new m(`--config: unknown key "${p}" in ${Cr([...n,p],r)} (allowed: ${Object.keys(d).join(", ")}) [spec: ${l}]`);for(let[p,f]of Object.entries(d)){let g=e[p];g!==void 0&&_t(g,f,[...n,p],i(p),r);}}if(u)for(let[p,f]of Object.entries(e))d?.[p]===void 0&&_t(f,u,[...n,p],l,r);return}if(c.includes("array")){let u=ee(o.items)?o.items:void 0;Array.isArray(e)||L(n,r,`must be ${Pi(u,r)}, not ${ue(e)}`,l),typeof o.minItems=="number"&&e.length<o.minItems&&L(n,r,`needs at least ${o.minItems} ${o.minItems===1?"entry":"entries"}`,l),typeof o.maxItems=="number"&&e.length>o.maxItems&&L(n,r,`takes at most ${o.maxItems} entries`,l),u&&e.forEach((d,p)=>_t(d,u,[...n,p],l,r));return}if(Array.isArray(o.enum)){o.enum.includes(e)||L(n,r,`must be one of: ${o.enum.join(", ")}`,l);return}if(c.includes("string")){typeof e!="string"&&L(n,r,`must be a string, not ${ue(e)} \u2014 quote it (${Ii(n)}: "...")`,l),typeof o.maxLength=="number"&&e.length>o.maxLength&&L(n,r,`must be at most ${o.maxLength} characters (got ${e.length})`,l);return}if(c.includes("integer")||c.includes("number")){let u=c.includes("integer");(typeof e!="number"||u&&!Number.isInteger(e))&&L(n,r,`must be ${u?"an integer":"a number"}, not ${ue(e)}`,l),typeof o.minimum=="number"&&e<o.minimum&&L(n,r,`must be at least ${o.minimum}`,l),typeof o.maximum=="number"&&e>o.maximum&&L(n,r,`must be at most ${o.maximum}`,l);return}c.includes("boolean")&&typeof e!="boolean"&&L(n,r,`must be a boolean, not ${ue(e)}`,l);}function $i(e){let t=Array.isArray(e.required)?e.required[0]:void 0;return typeof t=="string"?t:(ee(e.properties)?Object.keys(e.properties):[])[0]??"name"}function Ci(e,t,n){let{root:s,components:r}=Ri();_t(e,s,[],"JobCreate",{source:t,locate:n,components:r},true);}function ue(e){return e===null?"null":Array.isArray(e)?"a list":typeof e=="object"?`a ${e.constructor?.name??"object"}`:`a ${typeof e}`}function ee(e){if(typeof e!="object"||e===null||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function kn(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 m(`--config: ${t} in ${n} is ${Number.isNaN(e)?".nan":"infinite"} \u2014 a JSON body carries finite numbers only`)}if(Array.isArray(e)||ee(e)){if(s.has(e))throw new m(`--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,a)=>kn(r,`${t}[${a}]`,n,s));else for(let[r,a]of Object.entries(e))kn(a,`${t}.${r}`,n,s);s.delete(e);return}throw new m(`--config: ${t} in ${n} resolved to ${ue(e)}, which a JSON body cannot carry \u2014 quote the value to keep it text`)}}function Oi(e,t){let n;try{n=t(e);}catch(o){throw new m(`--config: cannot read ${e}: ${o.message}`)}let s,r;if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(o){throw new m(`--config: ${e} is not valid JSON: ${o.message}`)}else ({value:s,locate:r}=Pr(n,e));if(!s||typeof s!="object"||Array.isArray(s))throw new m(`--config: ${e} must contain a JSON/YAML object`);let a=s;for(let[o,l]of Object.entries(a))kn(l,o,e);return Ci(a,e,r),s}function Xs(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 m(`Invalid ${t} "${e}": expected name or name@version`);return {name:s,version:r}}function Di(e){let t=e.trim();try{return JSON.parse(t)}catch{return t==="True"?true:t==="False"?false:t==="None"?null:t}}function ji(e,t=n=>fs$1.readFileSync(n,"utf-8")){let n={};for(let s of e){let r=s.indexOf("=");if(r<=0)throw new m(`Invalid --ak "${s}": expected key=value`);let a=s.slice(0,r).trim(),o=Di(s.slice(r+1));a==="config"&&typeof o=="string"&&(o=Li(o,t)),n[a]=o;}return n}function Li(e,t){let n;try{n=t(e);}catch(r){throw new m(`--ak config: cannot read ${e}: ${r.message}`)}let s;if(e.endsWith(".toml"))try{s=smolToml.parse(n);}catch(r){throw new m(`--ak config: ${e} is not valid TOML: ${r.message}`)}else if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(r){throw new m(`--ak config: ${e} is not valid JSON: ${r.message}`)}else try{s=JSON.parse(n);}catch{try{s=smolToml.parse(n);}catch{throw new m(`--ak config: ${e} parses as neither JSON nor TOML; use a .json or .toml settings file`)}}if(!s||typeof s!="object"||Array.isArray(s))throw new m(`--ak config: ${e} must contain a settings object`);return s}function Cn(e,t=n=>fs$1.readFileSync(n,"utf-8")){let n;try{n=t(e);}catch(s){throw new m(`--prompt: cannot read ${e}: ${s.message}`)}if(n.trim().length===0)throw new m(`--prompt: ${e} is empty \u2014 the analyzer's prompt file must carry the instruction text`);return n}function On(e,t=n=>fs$1.readFileSync(n,"utf-8")){let n;try{n=t(e);}catch(o){throw new m(`--rubric: cannot read ${e}: ${o.message}`)}let s;if(e.endsWith(".toml"))try{s=smolToml.parse(n);}catch(o){throw new m(`--rubric: ${e} is not valid TOML: ${o.message}`)}else if(e.endsWith(".yaml")||e.endsWith(".yml"))s=xi(n,e);else if(e.endsWith(".json"))try{s=JSON.parse(n);}catch(o){throw new m(`--rubric: ${e} is not valid JSON: ${o.message}`)}else throw new m(`--rubric: unsupported rubric format "${e}" \u2014 use a .toml, .yaml, .yml, or .json file (Harbor's own set)`);if(!ee(s))throw new m(`--rubric: ${e} must contain a {criteria: [...]} object`);let r=Object.keys(s).filter(o=>o!=="criteria");if(r.length>0)throw new m(`--rubric: unknown key${r.length===1?"":"s"} ${r.map(o=>`"${o}"`).join(", ")} in ${e} \u2014 a rubric is {criteria: [{name, description, guidance}]}`);let a=s.criteria;if(!Array.isArray(a)||a.length===0)throw new m(`--rubric: ${e} needs a non-empty criteria list ([[criteria]] entries in TOML)`);return {criteria:a.map((o,l)=>{let c=`criteria[${l}] in ${e}`;if(!ee(o))throw new m(`--rubric: ${c} must be a {name, description, guidance} object`);let i=Object.keys(o).filter(u=>u!=="name"&&u!=="description"&&u!=="guidance");if(i.length>0)throw new m(`--rubric: unknown key${i.length===1?"":"s"} ${i.map(u=>`"${u}"`).join(", ")} in ${c} \u2014 a criterion is {name, description, guidance}`);for(let u of ["name","description","guidance"])if(typeof o[u]!="string"||o[u].length===0)throw new m(`--rubric: ${c} needs a non-empty string "${u}"`);return {name:o.name,description:o.description,guidance:o.guidance}})}}function Ni(e){return e.map(t=>{let n=t.indexOf("="),s=n===-1?t:t.slice(0,n),r=n===-1?void 0:t.slice(n+1);if(n!==-1&&!r)throw new m(`Invalid --secret "${t}": expected NAME[@LABEL][=ENVNAME]`);let a=s.indexOf("@"),o=a===-1?s:s.slice(0,a),l=a===-1?void 0:s.slice(a+1);if(!o||a!==-1&&!l)throw new m(`Invalid --secret "${t}": expected NAME[@LABEL][=ENVNAME]`);return {name:o,...l!==void 0?{label:l}:{},...r!==void 0?{as:r}:{}}})}function Ui(e){let t="NAME[@LABEL]:brokered|direct=VALUE";return e.map(n=>{let s=n.indexOf("=");if(s===-1)throw new m(`Invalid --secret-inline "${n}": expected ${t}`);let r=n.slice(0,s),a=n.slice(s+1);if(!a)throw new m(`Invalid --secret-inline "${n}": the value must not be empty`);let o=r.lastIndexOf(":");if(o===-1)throw new m(`Invalid --secret-inline "${r}=...": a delivery mode is required \u2014 ${t}`);let l=r.slice(0,o),c=r.slice(o+1);if(c!=="brokered"&&c!=="direct")throw new m(`Invalid --secret-inline delivery "${c}": expected brokered or direct`);let i=l.indexOf("@"),u=i===-1?l:l.slice(0,i),d=i===-1?void 0:l.slice(i+1);if(!u||i!==-1&&!d)throw new m(`Invalid --secret-inline "${r}=...": expected ${t}`);return {name:u,value:a,delivery:c,...d!==void 0?{label:d}:{}}})}function wn(e,t){let n={};for(let s of e){let r=s.indexOf("=");if(r<=0)throw new m(`Invalid ${t} "${s}": expected KEY=VALUE`);n[s.slice(0,r)]=s.slice(r+1);}return n}function Ji(e,t=n=>fs$1.readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.config=="string"?Oi(n.config,t):{},r;if(n.dataset!==void 0)r=n.dataset.map(b=>{let S=Xs(b,"--dataset");return {name:S.name,...S.version?{version:S.version}:{}}});else if(Array.isArray(s.datasets)&&s.datasets.length>0)r=s.datasets.map(b=>({...b}));else throw new m(`"${e.command}" requires -d/--dataset (or datasets in --config)`);if(n["include-task-name"]!==void 0)for(let b of r)b.task_names=n["include-task-name"];if(n["exclude-task-name"]!==void 0)for(let b of r)b.exclude_task_names=n["exclude-task-name"];if(n["n-tasks"]!==void 0)for(let b of r)b.n_tasks=n["n-tasks"];let a;if(n.agent!==void 0||n.model!==void 0){if(n.agent===void 0)throw new m("-m/--model requires -a/--agent");if(n.model===void 0)throw new m("-a/--agent requires at least one -m/--model (the server applies no model default)");let b=Xs(String(n.agent),"--agent");a=n.model.map(S=>({name:b.name,model_name:S,...b.version?{version:b.version}:{}}));}else if(Array.isArray(s.agents)&&s.agents.length>0)a=s.agents.map(b=>({...b}));else throw new m(`"${e.command}" requires -a/--agent and -m/--model (or agents in --config)`);if(n.effort!==void 0&&(a=a.map(b=>({...b,reasoning_effort:n.effort}))),n.ak!==void 0){let b=ji(n.ak,t);a=a.map(S=>({...S,kwargs:{...S.kwargs??{},...b}}));}n.preset!==void 0&&(a=a.map(b=>({...b,preset:n.preset}))),n.skill!==void 0&&(a=a.map(b=>({...b,skills:[...n.skill]})));let l=n["agent-env"]!==void 0?wn(n["agent-env"],"--agent-env"):s.agent_env,c=n["verifier-env"]!==void 0?wn(n["verifier-env"],"--verifier-env"):s.verifier_env,i=n.secret!==void 0||n["secret-inline"]!==void 0?[...n.secret!==void 0?Ni(n.secret):[],...n["secret-inline"]!==void 0?Ui(n["secret-inline"]):[]]:s.secrets,u=n["job-name"]!==void 0?String(n["job-name"]):s.job_name,d=n["n-attempts"]!==void 0?n["n-attempts"]:s.n_attempts,p=n["n-concurrent"]!==void 0?n["n-concurrent"]:s.n_concurrent_trials,f=n["max-trial-spend"]!==void 0?n["max-trial-spend"]:s.max_trial_spend_usd;if(n.env!==void 0&&!We.includes(String(n.env)))throw new m(`-e/--env must be one of: ${We.join(", ")}`);let g=n.env!==void 0?n.env:s.sandbox_provider,h={...s.retry??{}};n["max-retries"]!==void 0&&(h.max_retries=n["max-retries"]),n["retry-include"]!==void 0&&(h.include_exceptions=n["retry-include"]),n["retry-exclude"]!==void 0&&(h.exclude_exceptions=n["retry-exclude"]);let y=n.analyze===true||n["analyze-model"]!==void 0||n["analyze-rubric"]!==void 0||n["analyze-prompt"]!==void 0||n["analyze-provider"]!==void 0||n["analyze-effort"]!==void 0||s.analyze!==void 0,_={...s.analyze??{}};n["analyze-model"]!==void 0&&(_.model_name=String(n["analyze-model"])),n["analyze-rubric"]!==void 0&&(_.rubric=On(String(n["analyze-rubric"]),t)),n["analyze-prompt"]!==void 0&&(_.prompt=Cn(String(n["analyze-prompt"]),t)),n["analyze-provider"]!==void 0&&(_.sandbox_provider=String(n["analyze-provider"])),n["analyze-effort"]!==void 0&&(_.reasoning_effort=String(n["analyze-effort"]));let v={};for(let[b,S]of [["timeout-multiplier","timeout_multiplier"],["agent-timeout-multiplier","agent_timeout_multiplier"],["verifier-timeout-multiplier","verifier_timeout_multiplier"],["agent-setup-timeout-multiplier","agent_setup_timeout_multiplier"],["environment-build-timeout-multiplier","environment_build_timeout_multiplier"]]){let A=n[b]!==void 0?n[b]:s[S];A!==void 0&&(v[S]=A);}return {...u!==void 0?{job_name:u}:{},datasets:r,agents:a,...d!==void 0?{n_attempts:d}:{},...p!==void 0?{n_concurrent_trials:p}:{},...f!==void 0?{max_trial_spend_usd:f}:{},...g!==void 0?{sandbox_provider:g}:{},...Object.keys(h).length>0?{retry:h}:{},...y?{analyze:_}:{},...v,...l!==void 0?{agent_env:l}:{},...c!==void 0?{verifier_env:c}:{},...i!==void 0?{secrets:i}:{}}}function Mi(e){let t=e.flags,n=typeof t.dir=="string",s=typeof t.git=="string"||typeof t.ref=="string"||typeof t.path=="string",r=typeof t.from=="string";if([n,s,r].filter(Boolean).length>1)throw new m('"dataset publish" takes EXACTLY ONE source: --dir, --git/--ref/--path, or --from');if(r){let o=t.from.trim();if(o.startsWith("hub:")){let l=o.slice(4);if(l==="")throw new m('"--from hub:" needs a package reference \u2014 hub:org/name[@ref], e.g. hub:cookbook/hello-world');return {source:{hub_package:l},...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{}}}if(!o.startsWith("https://"))throw new m(`"--from" takes a public https tarball url or hub:org/name[@ref] (got "${o}")`);for(let l of ["name","version"])if(typeof t[l]!="string")throw new m(`"dataset publish" requires --${l} with --from <url> \u2014 the server fetches the tarball only after the publish is accepted, so nothing can supply it later`);return {source:{archive_url:o},name:t.name,version:t.version}}if(n)return {source:{directory:t.dir},...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{}};for(let o of ["git","ref","name","version"])if(typeof t[o]!="string"){let l=o==="git"||o==="ref"?" (or --dir for a local corpus directory)":" (a git source cannot take it from dataset.toml \u2014 the repository is only cloned after the publish is accepted)";throw new m(`"dataset publish" requires --${o}${l}`)}return {source:{git_url:t.git,git_ref:t.ref,...typeof t.path=="string"?{git_path:t.path}:{}},name:t.name,version:t.version}}function Fi(e,t=n=>fs$1.readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.dir=="string",r=typeof n["install-script"]=="string";if(s&&r)throw new m('"agent add" takes EITHER --dir OR --install-script, not both');if(!s&&!r)throw new m('"agent add" requires --install-script (or --dir for a local agent directory)');if(typeof n.run!="string")throw new m('"agent add" requires --run');let a=wn(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(a).length>0?{env:a}:{}}}var Bi={out:e=>process.stdout.write(e+`
50
50
  `),err:e=>process.stderr.write(e+`
51
- `),tty:process.stdout.isTTY===true&&process.env.TERM!=="dumb",...process.stdin.isTTY===true?{confirm:async e=>{let{createInterface:t}=await import('readline/promises'),n=t({input:process.stdin,output:process.stderr});try{let s=(await n.question(`${e} [y/N] `)).trim().toLowerCase();return s==="y"||s==="yes"}finally{n.close();}}}:{}};function I(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 q(e){return typeof e=="number"?`$${e.toFixed(2)}`:"-"}function ve(e){return e.lane==="measured"?q(e.usd):e.lane==="floor"?`at least ${q(e.usd)}`:"-"}function Ur(e,t){if(!e.upload)return null;let n=e.upload.reported_totals;if(!n||n.cost_usd===null)return "-";let s=t?` (${n.n_trials_reporting}/${e.n_total_trials} trials reporting)`:"";return `reported ${q(n.cost_usd)}${s}`}function Ln(e){if(e.input_tokens===null&&e.output_tokens===null)return null;let t=r=>r===null?"-":r.toLocaleString("en-US"),n=[e.cached_input_tokens!==null?`${t(e.cached_input_tokens)} cached`:null,e.cache_write_tokens!==null?`${t(e.cache_write_tokens)} written to cache`:null].filter(r=>r!==null),s=n.length>0?` (${n.join(", ")})`:"";return `in ${t(e.input_tokens)}${s} \xB7 out ${t(e.output_tokens)}`+(e.provisional?" \u2014 provisional":"")}function bt(e){let t=`${e.name}:${e.model_name}`;return e.version?`${t}:${e.version}`:t}function An(e){let t=[`${e.n_completed} completed`,`${e.n_failed} failed`,`${e.n_pending} pending`];return e.cost_usd!=null&&t.push(`spent $${e.cost_usd.toFixed(4)}`),t.join(" \xB7 ")}function wt(e){return e.map(t=>`${t.name}@${t.version}`).join(", ")||"-"}function de(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function te(e){return e.replace(/[\t\n\r]+/g," ")}function M(e,t,n,s,r,a){if(e.flags.quiet===true){for(let c of n)t.out(a(c));return}let o=Vi(e,s,r);if(t.tty===true){let c=e.flags["no-trunc"]===true,i=[o.map(u=>u.header)];for(let u of n)i.push(o.map(d=>c?te(d.cell(u)):de(te(d.cell(u)),60)));for(let u of I(i))t.out(u);}else {e.flags["no-headers"]!==true&&t.out(o.map(c=>c.header).join(" "));for(let c of n)t.out(o.map(i=>te(i.cell(c))).join(" "));}}function Vi(e,t,n){let s=e.flags.columns;if(s===void 0)return n.map(a=>t.find(o=>o.key===a));if(s==="all")return t;let r=s.split(",").map(a=>a.trim()).filter(Boolean);if(r.length===0)throw new m("--columns got an empty column list");return r.map(a=>{let o=t.find(l=>l.key===a);if(!o)throw new m(`Unknown column "${a}" (available: ${t.map(l=>l.key).join(", ")}, or "all")`);return o})}function F(e,t,n){if(e.flags.columns!=="help")return false;for(let s of n)t.out(s.key);return true}function z(e,t={}){let n=[["id",e.id],["status",e.status],["datasets",wt(e.datasets)]];n.push(["agents",e.agents.map(bt).join(", ")]);for(let o of e.agents){o.skills.length>0&&n.push(["skills",`${bt(o)}: ${o.skills.join(", ")}`]);for(let l of o.skill_locks??[])n.push(["skill lock",`${l.name} @ ${l.git_commit_id?l.git_commit_id.slice(0,12):ne(l.digest)}`]);}n.push(["size",`${e.counts.agents} agent(s) x ${e.counts.tasks} task(s) = ${e.n_total_trials} trial(s)`]);for(let o of e.build_exclusions)n.push(["build exclusions",o.note]);n.push(["attempts/task",String(e.n_attempts)]),n.push(["concurrency",String(e.n_concurrent_trials)]),n.push(["max spend/trial",q(e.max_trial_spend_usd)]),n.push(["worst case",q(e.worst_case_spend_usd)]),n.push(["retries",`${e.retry.max_retries}/trial on infrastructure errors`+((e.stats.n_retries??0)>0?` (${e.stats.n_retries} used)`:"")]),e.analyze&&n.push(["analyze",`${e.analyze.model_name} \xB7 ${e.analyze.rubric.criteria.length} criteri${e.analyze.rubric.criteria.length===1?"on":"a"}`+(e.analyze.sandbox_provider?` \xB7 ${e.analyze.sandbox_provider}`:"")]);{let l=[["agent",e.agent_timeout_multiplier],["verifier",e.verifier_timeout_multiplier],["agent setup",e.agent_setup_timeout_multiplier],["environment build",e.environment_build_timeout_multiplier]].filter(([,c])=>c!=null);(e.timeout_multiplier!==1||l.length>0)&&n.push(["timeouts",`x${e.timeout_multiplier}`+(l.length>0?` (${l.map(([c,i])=>`${c} x${i}`).join(", ")})`:"")]);}n.push(["provider",e.upload?"ported":e.sandbox_provider??"-"]),n.push(["spent",Ur(e,true)??ve($e(e.stats.cost_usd,e.stats.n_unmeasured_trials))]),e.stats.gpu_cost_usd!=null&&n.push(["gpu compute (est.)",`$${e.stats.gpu_cost_usd.toFixed(4)}`]);let s=e.stats.n_unmeasured_judge_trials;if((e.stats.judge_cost_usd!=null&&e.stats.judge_cost_usd>0||typeof s=="number"&&s>0)&&n.push(["spent (judge)",ve($e(e.stats.judge_cost_usd,s))]),e.upload?.reported_totals){let o=e.upload.reported_totals,l=[o.n_input_tokens!==null?`in ${o.n_input_tokens}`:null,o.n_cache_tokens!==null?`cache ${o.n_cache_tokens}`:null,o.n_output_tokens!==null?`out ${o.n_output_tokens}`:null].filter(c=>c!==null);l.length>0&&n.push(["reported tokens",l.join(" \xB7 ")]);}if((t.taskLinksRow??true)&&e.upload?.task_links&&e.upload.task_links.length>0){let o=e.upload.task_links,l=o.reduce((u,d)=>u+d.n_linked,0),c=o.reduce((u,d)=>u+d.n_trials,0),i=Array.from(new Set(o.flatMap(u=>u.datasets)));n.push(["task links",`${l} of ${c} ${c===1?"trial":"trials"} linked`+(i.length>0?` to ${i.join(", ")}`:"")+(l<c?` \u2014 ${c-l} without the task folder`:"")]);}if(e.stats.analysis){n.push(["analysis",An(e.stats.analysis)]);for(let[o,l]of Object.entries(e.stats.analysis.checks))n.push([` ${o}`,`${l.n_pass} pass \xB7 ${l.n_fail} fail \xB7 ${l.n_not_applicable} n/a`+(typeof l.n_unknown=="number"?` \xB7 ${l.n_unknown} unknown`:"")]);}let a=Object.entries(e.trials.byStatus).filter(([,o])=>o>0).map(([o,l])=>`${o} ${l}`).join(" \xB7 ");a&&n.push(["trials",a]);for(let o of e.source_jobs)n.push([o.action==="regrade"?"regrade of":o.action==="retry"?"retry of":"resume of",o.job_id]);if(e.upload){let o=[e.upload.original_job_name,e.upload.original_job_id].filter(l=>l!==null).join(" \xB7 ");n.push(["uploaded",`${e.upload.uploaded_at}${o?` \u2014 originally ${o}`:""}`]);}return e.idempotent_replay&&n.push(["note","idempotent replay of an existing job"]),e.failure&&n.push(["failure",`${e.failure.code}: ${e.failure.message}`]),n.push(["started",e.started_at]),n.push(["updated",e.updated_at]),[...I(n),...Gi(e)]}function Gi(e){let t=Ot(e);if(t.length===0)return [];let n=t.map(s=>[` ${s.evals_key}`,s.points.map(r=>`pass@${r.k} ${r.value.toFixed(3)}`).join(" ")]);return ["","pass@k",...I(n)]}var sr=[{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=>wt(e.datasets)},{key:"agents",header:"AGENTS",cell:e=>e.agents.map(bt).join(", ")},{key:"trials",header:"TRIALS",cell:e=>String(e.trials.total)},{key:"spent",header:"SPENT",cell:e=>Ur(e,false)??ve($e(e.stats.cost_usd,e.stats.n_unmeasured_trials))},{key:"started",header:"STARTED",cell:e=>e.started_at}],Ki=["id","status","datasets","trials","spent","started"],rr=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"agent",header:"AGENT",cell:e=>bt({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=>ve(Mt(e))},{key:"tokens",header:"TOKENS",cell:e=>e.usage&&Ln(e.usage)||"-"},{key:"gpu",header:"GPU (EST)",cell:e=>e.gpu_cost?.estimate_usd!=null?`$${e.gpu_cost.estimate_usd.toFixed(4)}`:"-"},{key:"id",header:"TRIAL ID",cell:e=>e.id}],Wi=["task","agent","attempt","status","reward","spent","id"],ar=[{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=>Tn(e.mean_reward)},{key:"spent",header:"SPENT",cell:e=>q(e.cost_usd)},{key:"check",header:"CHECK",cell:e=>Xi(e.check)},{key:"check-id",header:"TASK CHECK ID",cell:e=>e.check?.id??"-"}],Yi=["task","source","trials","statuses","reward","spent","check"];function Jr(e){let t={pass:0,fail:0,not_applicable:0,unknown:0};for(let n of Object.values(e??{}))t[n.outcome]+=1;return t}function vt(e){return e===void 0?null:e===null?"custom rubric":e.replace(/_/g," ").toUpperCase()}function xn(e){let t=vt(e.label);return t===null||e.label===null?t:`${t}${e.executed===true?" \xB7 executed":e.executed===false?" \xB7 not executed":""}`}function Xi(e){if(e===null)return "-";if(e.status!=="completed")return e.status;let t=Jr(e.checks),n=`pass ${t.pass} \xB7 fail ${t.fail} \xB7 n/a ${t.not_applicable} \xB7 unknown ${t.unknown}`,s=xn(e);return s===null?n:`${s} \xB7 ${n}`}var or=[{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??"-"}],Qi=["name","active","state","tasks","title"];function ne(e){return e.length>19?`${e.slice(0,19)}\u2026`:e}function kt(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}var ir=[{key:"name",header:"NAME",cell:e=>e.name},{key:"id",header:"ID",cell:e=>e.id},{key:"digest",header:"DIGEST",cell:e=>ne(e.digest)},{key:"size",header:"SIZE",cell:e=>kt(e.size_bytes)},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"description",header:"DESCRIPTION",cell:e=>e.description??"-"},{key:"ref",header:"REF",cell:e=>e.ref}],Zi=["name","id","digest","size","created"],lr=[{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}],el=["name","source","run","updated"],ur=[{key:"name",header:"NAME",cell:e=>e.name},{key:"label",header:"LABEL",cell:e=>e.label??"default"},{key:"delivery",header:"DELIVERY",cell:e=>e.delivery??"brokered"},{key:"hosts",header:"ALLOWED HOSTS",cell:e=>e.allowedHosts.join(", ")||"-"},{key:"updated",header:"UPDATED",cell:e=>e.updatedAt},{key:"last-used",header:"LAST USED",cell:e=>e.lastUsedAt??"-"},{key:"id",header:"ID",cell:e=>e.id}],tl=["name","label","delivery","hosts","updated"];function nl(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",ve(me(e))]),e.judge_result&&t.push(["spent (judge)",ve(Jt(e))]),(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}`]);}if(e.usage){let s=Ln(e.usage);s&&t.push(["tokens",s]);}if(e.upload){let s=e.upload.reported_agent_result;s&&s.cost_usd!==null&&t.push(["reported cost",`$${s.cost_usd.toFixed(4)} (the original run's own record \u2014 not platform-metered)`]);let r=s?[s.n_input_tokens!==null?`in ${s.n_input_tokens}`:null,s.n_cache_tokens!==null?`cache ${s.n_cache_tokens}`:null,s.n_output_tokens!==null?`out ${s.n_output_tokens}`:null].filter(a=>a!==null):[];r.length>0&&t.push(["reported tokens",r.join(" \xB7 ")]),t.push(["uploaded from",`${e.upload.original_trial_name} \xB7 task ${e.upload.original_task_name}`+(e.upload.original_trial_id?` \xB7 ${e.upload.original_trial_id}`:"")]);}if(e.attempt_phase&&t.push(["phase",e.attempt_phase]),e.upload?t.push(["provider","ported"]):e.sandbox_provider&&t.push(["provider",e.sandbox_provider]),e.sandbox_provider_degrade){let s=e.sandbox_provider_degrade;t.push(["provider degrade",`${s.from} \u2192 ${s.to}: ${s.reason}`]);}if(e.gpu_cost){let s=e.gpu_cost;if(s.estimate_usd!=null){let r=s.gpu_type??"unknown type",a=s.duration_sec!=null?`${Math.round(s.duration_sec)}s`:"unmeasured",o=`rate card v${s.rate_card.version}${s.rate_card.source?`, ${s.rate_card.source} ${s.rate_card.source_date??""}`.trimEnd():""}`;t.push(["gpu compute (est.)",`$${s.estimate_usd.toFixed(4)} \u2014 ${r} x${s.gpu_count}, ${a} on ${s.provider} (${o})`]);}else t.push(["gpu compute (est.)",`not priced \u2014 ${s.unpriced_reason??"no reason recorded"}`]);}if(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.n_retries>0){t.push(["auto-retries",String(e.n_retries)]);for(let s of e.retries)t.push([`attempt ${s.attempt_number}`,`${s.exception_info.exception_type} \xB7 spent ${q(s.cost_usd)}`+(s.settled_at?` \xB7 settled ${s.settled_at}`:"")]);}if(e.analysis){let s=e.analysis;t.push(["analysis",`${s.status} \xB7 ${s.model_name} \xB7 ${s.id}`]);let r=s.status==="completed"?vt(s.label):null;r!==null&&t.push([" label",r]);for(let[a,o]of Object.entries(s.checks??{}))t.push([` ${a}`,`${o.outcome} \u2014 ${o.explanation}`]);s.summary&&t.push([" summary",s.summary]),s.estimated_cost_usd!==null&&t.push([" analyzer spend",`$${s.estimated_cost_usd.toFixed(4)}`]),s.failure&&t.push([" failure",`${s.failure.phase}: ${s.failure.message}`]);}return 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]),I(t)}function sl(e){let t=e.rubric.criteria.length,n=[["analysis id",e.id],["status",e.status],["model",e.model_name],["rubric",`${t} criteri${t===1?"on":"a"}`]],s=e.status==="completed"?vt(e.label):null;s!==null&&n.push(["label",s]);for(let[r,a]of Object.entries(e.checks??{})){n.push([` ${r}`,`${a.outcome} \u2014 ${a.explanation}`]);for(let o of a.evidence??[])n.push(["",`${o.where} \u2014 ${te(o.quote)}`]);}if(e.summary&&n.push(["summary",e.summary]),e.estimated_cost_usd!==null&&n.push(["spent",`$${e.estimated_cost_usd.toFixed(4)}`]),e.usage){let r=Ln(e.usage);r&&n.push(["tokens",r]);}return e.failure&&n.push(["failure",`${e.failure.phase}: ${e.failure.message}`]),n.push(["created",e.created_at]),e.finished_at&&n.push(["finished",e.finished_at]),I(n)}function Mr(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]),I(t)}var Fr=["e2b","daytona","modal"];function rl(e){return Fr.filter(t=>e?.[t]!==void 0).map(t=>{let n=e[t];return n.ok?n.degrades_to?`${t} \u2192${n.degrades_to}`:`${t} ok`:`${t} NO`}).join(" \xB7 ")}function al(e){let t=e.gpus??0;if(t<=0)return null;let n=e.gpu_types&&e.gpu_types.length>0?e.gpu_types.join("|"):"any GPU";return `${t}x ${n}`}function Tn(e){return e!==null?String(Math.round(e*1e3)/1e3):"-"}function Br(e){let t=Ie(e);if(t!==null){let r=typeof e.data.model=="string"&&e.data.model!==""?e.data.model:"-",a=t.usage,o=`gateway ${r} in=${a.promptTokens} out=${a.completionTokens} cached=${a.cachedTokens} $${a.costUsd.toFixed(6)}${t.startedAt?` ${t.startedAt}`:""}`;return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${o}`.trimEnd()}let n=e.data?.update;if(n&&typeof n=="object"&&n.sessionUpdate==="usage")return null;let s=de(JSON.stringify(e.data??{}),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${s}`.trimEnd()}function K(e,t,n){if(t){e.out(JSON.stringify(n));return}let s=Br(n);s!==null&&e.out(s);}function qr(e){let t=e.failures?.length?` (${e.failures.length} task failure${e.failures.length===1?"":"s"})`:"";return `${e.message}${t}`}function zr(e){let t=[["id",e.id],["status",Un(e)]];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",qr(e.failure)]);for(let n of e.failure.failures??[])t.push([` ${n.task_name}`,n.error]);}return I(t)}function Nn(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return `${t}s`;let n=Math.floor(t/60),s=t%60;return n<60?`${n}m${String(s).padStart(2,"0")}s`:`${Math.floor(n/60)}h${String(n%60).padStart(2,"0")}m`}function ol(e,t=Date.now()){let n=e.phases[e.phases.length-1],s=[];n!==void 0&&n.total>0&&(s.push(`${n.done}/${n.total}`),n.banked!==void 0&&n.banked>0&&s.push(n.name==="copying"?`${n.banked} of ${n.total} images already banked`:`${n.banked} banked`));let r=n!==void 0?Date.parse(n.started_at):NaN;return Number.isFinite(r)&&s.push(Nn(t-r)),`phase ${e.phase}${s.length>0?` ${s.join(" \xB7 ")}`:""}`}function il(e){let t=e.phases.map(r=>{let a=r.completed_at!==void 0?Date.parse(r.completed_at):NaN,o=Date.parse(r.started_at),l=Number.isFinite(a)&&Number.isFinite(o)?Nn(a-o):"unfinished";return `${r.name} ${l}`}),n=e.images,s=e.codebuild;return I([["phases",t.join(" \xB7 ")],["images",`${n.built} built, ${n.mirrored} mirrored, ${n.banked} banked`],["codebuild",`${s.copy_builds} copy build(s), ${s.billed_minutes} billed minute(s)`]])}function Un(e){return e.receiving===true?`${e.status} (receiving)`:e.status}function ll(e){let t=[];return e.task_count!==void 0&&t.push(`tasks=${e.task_count}`),e.failure&&t.push(de(qr(e.failure),140)),`status ${Un(e).padEnd(12)} ${t.join(" ")}`.trimEnd()}function ul(e){return `state ${e.state}`}function cl(e,t){let n=[["state",e.state]];if(t){let s=t.active_version?.version??null;n.push(["active",s===e.version?`${s} (this publish)`:s?`${s} (unchanged)`:"none"]);}return I(n)}function dl(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[a,o]of Object.entries(t))s.has(a)||n.push(`${a}=${typeof o=="object"?JSON.stringify(o):String(o)}`);let r=de(n.join(" "),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${r}`.trimEnd()}function k(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 Hr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,pl=/^[0-9a-f][0-9a-f-]{7,34}$/i,cr=8,Se=200,fl={job:"jobs",trial:"trials",analysis:"analyses","analyzed trial":"analyzed trials",check:"checks","task check":"task checks",session:"sessions",skill:"skills"},dr=new WeakMap;function St(e,t,n){let s=dr.get(e);s===void 0&&(s=new Map,dr.set(e,s));let r=s.get(t);if(r!==void 0)return r;let a=n();return s.set(t,a),a}async function At(e){let t=[];for await(let n of e)t.push(n);return t}function Jn(e){let t=xt(e);return t!==void 0?{scope:t}:{}}var Vr=e=>St(e,"jobs",()=>At(E(k(e)).list({limit:Se,...Jn(e)}))),pr=e=>St(e,"analyses",()=>At(ke(k(e)).list({limit:Se,...Jn(e)}))),fr=e=>St(e,"checks",()=>At(le(k(e)).list({limit:Se,...Jn(e)})));async function gl(e){let t=E(k(e)),n=(await Vr(e)).map(a=>a.id),s=[],r=0;for(let a of n){try{for await(let o of t.trials(a,{limit:Se}))s.push(o.id);}catch(o){throw o instanceof x&&o.code==="rate_limited"?new m(`trial id prefixes resolve against every trial of your ${n.length} jobs (one read per job); the API's rate limit refused the walk after ${r} \u2014 pass the full trial id (evolve job trials <job> prints them)`):o}r+=1;}return s}async function ml(e){let t=pt(qn(e)),n=[],s;do{let r=await t.list({limit:Se,state:"all",...s!==void 0?{cursor:s}:{}});for(let a of r.items)n.push(a.id);s=r.nextCursor??void 0;}while(s!==void 0);return n}var hl={job:async e=>(await Vr(e)).map(t=>t.id),trial:gl,analysis:async e=>(await pr(e)).map(t=>t.id),"analyzed trial":async e=>(await pr(e)).map(t=>t.trial_id),check:async e=>(await fr(e)).map(t=>t.id),"task check":async e=>(await fr(e)).flatMap(t=>t.results.map(n=>n.id)),session:ml,skill:async e=>(await At(ie(k(e)).list({limit:Se}))).map(t=>t.id)},_l=(e,t)=>St(e,`ids:${t}`,()=>hl[t](e));function yl(e){return `${/^[aeiou]/.test(e[0])?"an":"a"} ${e.join(" or ")}`}async function Mn(e,t,n){if(n===void 0||Hr.test(n))return {noun:null,id:n};if(/^[0-9a-f][0-9a-f-]*$/i.test(n)&&n.length<cr)throw new m(`"${n}" is too short to name ${yl(t)} \u2014 id prefixes need at least ${cr} characters`);if(!pl.test(n))return {noun:null,id:n};let s=n.toLowerCase(),r=[];for(let l of t){let c=new Set((await _l(e,l)).filter(i=>i.startsWith(s)));for(let i of c)r.push({noun:l,id:i});}if(r.length===1)return r[0];if(r.length===0)throw new m(`no ${t.join(" or ")} id starts with "${n}"`);let a=t.map(l=>({noun:l,n:r.filter(c=>c.noun===l).length})).filter(({n:l})=>l>0).map(({noun:l,n:c})=>`${c} ${c===1?l:fl[l]}`),o=r.slice(0,5).map(l=>t.length>1?`${l.noun} ${l.id}`:l.id);throw new m(`"${n}" is ambiguous \u2014 it matches ${a.join(" and ")}: ${o.join(", ")}${r.length>5?", \u2026":""}`)}async function T(e,t,n){return (await Mn(e,[t],n)).id}async function Fn(e,t,n){let s=await Mn(e,["analysis","analyzed trial"],n);if(s.noun==="analysis")return {id:s.id,analysis:null};if(s.noun==="analyzed trial")return gr(e,await G(k(e)).get(s.id));if(n===void 0||!Hr.test(n))return {id:n,analysis:null};try{return {id:n,analysis:await t.get(n)}}catch(r){if(!(r instanceof x)||r.status!==400)throw r;let a;try{a=await G(k(e)).get(n);}catch(o){throw o instanceof x&&o.status===404?r:o}return gr(e,a)}}async function gr(e,t){if(t.analysis)return {id:t.analysis.id,analysis:t.analysis};throw (await E(k(e)).get(t.job_id)).is_regrade?new Error(`${t.id} is a regrade result \u2014 a regrade is never analyzed; analyses belong to its source trial`):new Error(`trial ${t.id} has no analysis yet \u2014 run: evolve analyze ${t.job_id}`)}function Rn(e,t){return t.analysis!==null?Promise.resolve(t.analysis):e.get(t.id)}function j(e){return {...e.flags.limit!==void 0?{limit:e.flags.limit}:{},...e.flags.cursor!==void 0?{cursor:String(e.flags.cursor)}:{}}}function xt(e){if(e.flags.scope===void 0)return;let t=String(e.flags.scope);if(!Xe.includes(t))throw new m(`--scope must be one of: ${Xe.join(", ")}; got: ${t}`+(t==="all"?" (Harbor's all adds public rows \u2014 nothing hosted is public)":""));return t}function bl(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 m("--status got an empty status list");let n=t.filter(s=>!Re.includes(s));if(n.length>0)throw new m(`--status must name analysis statuses (${Re.join(", ")}); got: ${n.join(", ")}`);return t}function Gr(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 m("--status got an empty status list");let n=t.filter(s=>!We.includes(s));if(n.length>0)throw new m(`--status must name trial statuses (${We.join(", ")}); got: ${n.join(", ")}`);return t}function kl(e){return e.status==="COMPLETED"?0:e.status==="FAILED"||e.status==="CANCELLED"?1:0}function wl(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~")}async function vl(e,t,n){let s=new Set;for(let o of e.agents)for(let l of o.skills??[])wl(l)&&s.add(l);if(s.size===0)return e;let r=ie(k(t)),a=new Map;for(let o of s){let l=await r.upload(o);if(a.set(o,l.map(c=>c.ref)),t.flags.json!==true)for(let c of l)n.err(`Uploaded skill ${c.name} (${c.ref}, ${ne(c.digest)})`);}return {...e,agents:e.agents.map(o=>({...o,...o.skills!==void 0&&o.skills!==null?{skills:o.skills.flatMap(l=>a.get(l)??[l])}:{}}))}}async function mr(e,t){let n=Bi(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,a=e.flags.quiet===true,o=E(k(e)),l=await o.start(await vl(n,e,t));if(!r){if(s)t.out(JSON.stringify(l));else {for(let i of z(l))t.out(i);t.out(""),t.out(`Follow it with: evolve job show ${l.id}`);}return 0}s?t.out(JSON.stringify({kind:"job.created",job:l})):t.out(`Job ${l.id} (${wt(l.datasets)}) ${l.status} \u2014 watching\u2026`);let c=await o.watch(l.id,{onEvent:i=>{a||t.out(s?JSON.stringify({kind:"event",...i}):dl(i));}});if(s)t.out(JSON.stringify({kind:"job.final",job:c}));else {t.out("");for(let i of z(c))t.out(i);}return kl(c)}async function Sl(e,t){if(F(e,t,sr))return 0;let n=xt(e),r=await E(k(e)).list({...j(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{},...n!==void 0?{scope:n}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No jobs."),0):(M(e,t,r.items,sr,Ki,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
52
- More: evolve job list --cursor ${r.nextCursor}`),0)}async function Al(e,t){let n=E(k(e)),s=[];for(let r of e.positionals)s.push(await n.get(await T(e,"job",r)));return e.flags.json===true?(t.out(JSON.stringify(s.length===1?s[0]:s)),0):(s.forEach((r,a)=>{a>0&&t.out("");for(let o of z(r))t.out(o);}),0)}async function xl(e,t){if(F(e,t,rr))return 0;let n=E(k(e)),s=Gr(e),r=e.flags.dataset,a=await n.trials(await T(e,"job",e.positionals[0]),{...s!==void 0?{status:s}:{},...r!==void 0?{dataset:r}:{},...j(e)});return e.flags.json===true?(t.out(JSON.stringify(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No trials."),0):(M(e,t,a.items,rr,Wi,o=>o.id),t.tty===true&&e.flags.quiet!==true&&(t.out(`
53
- ${a.items.length} trial(s) shown`),a.nextCursor&&t.out(`More: evolve job trials ${e.positionals[0]} --cursor ${a.nextCursor}`)),0)}async function Tl(e,t){if(F(e,t,ar))return 0;let s=await E(k(e)).tasks(await T(e,"job",e.positionals[0]),j(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):(M(e,t,s.items,ar,Yi,r=>r.task_name),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
54
- More: evolve job tasks ${e.positionals[0]} --cursor ${s.nextCursor}`),0)}function Rl(e){let t=[],n=[["ID","DATASETS","STATUS","MEAN REWARD","COVERAGE","SPENT"]];for(let s of e.jobs)n.push([s.id,wt(s.datasets),s.status,Tn(s.mean_reward),`${s.coverage.scored}/${s.coverage.total}`,q(s.cost_usd)]);if(t.push(...I(n)),e.taskMatrix.length>0){t.push("","Task matrix (disagreements first; columns in the order above):");let s=[["TASK","DIFF",...e.jobs.map((a,o)=>`JOB ${o+1}`)]],r=e.jobs.map(a=>a.id);for(let a of e.taskMatrix){let o=new Map(a.cells.map(l=>[l.job_id,l]));s.push([a.task_name,a.disagreement?"!":"",...r.map(l=>{let c=o.get(l);return c?c.mean_reward!==null?`${c.status} ${Tn(c.mean_reward)}`:c.status:"-"})]);}t.push(...I(s));}return t}async function El(e,t){let n=E(k(e)),s=[];for(let a of e.positionals)s.push(await T(e,"job",a));let r=await n.compare(s);if(e.flags.json===true)t.out(JSON.stringify(r));else for(let a of Rl(r))t.out(a);return 0}async function Il(e,t){let s=await E(k(e)).cancel(await T(e,"job",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of z(s))t.out(r);return 0}async function Pl(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]);if(e.flags.yes!==true){if(t.confirm===void 0)throw new Error("deleting a job is permanent \u2014 trials, traces, analyses and stored files. Re-run with --yes to confirm.");let a=await n.get(s);if(t.err(` ${a.id} ${a.job_name||"\u2014"}`),!await t.confirm("Permanently delete this job and all associated trials?"))return t.err("Delete cancelled."),1}let r=await n.delete(s);return e.flags.json===true?t.out(JSON.stringify(r)):t.out(`Deleted job ${r.job_id}: ${r.trials_deleted} trials, ${r.analyses_deleted} analyses destroyed.`),0}async function $l(e,t){let n=e.flags.dataset;if(!n)throw new m("job stop needs --dataset <name> (to stop the whole job, use: evolve job cancel <id>)");let s=E(k(e)),r=await s.get(await T(e,"job",e.positionals[0])),a=r.datasets.map(u=>u.name);if(!a.includes(n))throw new Error(`job ${r.id} does not run dataset ${n}; its datasets: ${a.join(", ")}`);let o=[];for await(let u of s.trials(r.id,{dataset:n}))o.push(u.id);if(o.length===0)return e.flags.json===true?t.out(JSON.stringify({stopped:[],stopped_analyses:[],already_terminal:[],not_found:[]})):t.out(`No trials in ${n}.`),0;let l=G(k(e)),c={stopped:[],stopped_analyses:[],already_terminal:[],not_found:[]},i=0;try{for(let u=0;u<o.length;u+=100){let d=o.slice(u,u+100),p=await l.stop(d);i+=d.length,c.stopped.push(...p.stopped),c.stopped_analyses.push(...p.stopped_analyses),c.already_terminal.push(...p.already_terminal),c.not_found.push(...p.not_found);}}catch(u){throw hr(c,n,o.length,i,e,t),u}return hr(c,n,o.length,i,e,t),0}function hr(e,t,n,s,r,a){let o=n-s;if(r.flags.json===true){a.out(JSON.stringify(o>0?{...e,partial:true,unreported:o}:e));return}for(let l of e.stopped)a.out(`stopped ${l.id} (${l.task_name}) ${l.status}`);for(let l of e.already_terminal)a.out(`already terminal ${l}`);for(let l of e.not_found)a.out(`not found ${l}`);a.out(`${e.stopped.length} stopped, ${e.already_terminal.length} already terminal, ${e.not_found.length} not found (${t})`),o>0&&a.out(`PARTIAL: ${o} 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 Cl(e,t){let n=E(k(e)),s=e.flags["filter-error-type"],r=await n.resume(await T(e,"job",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 a of z(r))t.out(a);t.out(""),t.out(`Follow it with: evolve job show ${r.id}`);}return 0}async function Ol(e,t){let n=e.flags.trial,s=e.flags["failed-only"]===true;if(n!==void 0&&s)throw new m('"job retry" takes EITHER -t/--trial OR --failed-only, not both \u2014 explicit ids are already a selection');let r={};n!==void 0&&(r.trial_ids=n),s&&(r.failed_only=true);let a=await E(k(e)).retry(await T(e,"job",e.positionals[0]),r);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of z(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}function Dl(e){if(e.length===0)return ["No analyzed trials."];let t=[["TRIAL","TASK","CHECKS","COST","SUMMARY"]],n=[];for(let s of e){let r=s.analysis,a;if(r.status==="failed")a=`FAILED${r.failure?` (${r.failure.phase})`:""}`,r.failure&&n.push(`analysis failed ${s.id} (${s.task_name}) \u2014 ${r.failure.phase}: ${te(r.failure.message)}`);else {let o=Object.entries(r.checks??{}).map(([c,i])=>`${c} ${i.outcome}`).join(" \xB7 ")||r.status,l=vt(r.label);a=l?`${l} \xB7 ${o}`:o;}t.push([s.id,s.task_name,a,r.estimated_cost_usd!==null?`$${r.estimated_cost_usd.toFixed(4)}`:"-",r.summary?de(te(r.summary),60):"-"]);}return [...I(t),...n]}async function jl(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true,a=E(k(e)),o=await T(e,"job",e.positionals[0]),l={};e.flags.model!==void 0&&(l.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(l.rubric=jn(String(e.flags.rubric))),e.flags.prompt!==void 0&&(l.prompt=Dn(String(e.flags.prompt))),e.flags.env!==void 0&&(l.sandbox_provider=String(e.flags.env)),e.flags.effort!==void 0&&(l.reasoning_effort=String(e.flags.effort)),e.flags["n-concurrent"]!==void 0&&(l.n_concurrent=e.flags["n-concurrent"]),e.flags.passing===true&&(l.passing=true),e.flags.failing===true&&(l.failing=true),e.flags["n-trials"]!==void 0&&(l.n_trials=e.flags["n-trials"]);let c=await a.get(o);if((c.upload?.task_links??[]).some(p=>p.n_unlinked>0))for(let p of Bn(c.upload?.task_links??null))t.err(p);else c.upload!==null&&c.upload!==void 0&&c.upload.task_links===null&&t.err(Gl);let i=await a.analyze(o,l);if(!s){if(n)t.out(JSON.stringify(i));else {for(let p of z(i))t.out(p);t.out(""),t.out(`Follow it with: evolve job show ${i.id}`);}return 0}n?t.out(JSON.stringify({kind:"analysis.accepted",job:i})):r||t.out(`Job ${i.id} \u2014 analyses enqueued, watching\u2026`);let u=await a.watchAnalysis(i.id,{onStats:p=>{r||p.stats.analysis&&t.out(n?JSON.stringify({kind:"analysis.stats",analysis:p.stats.analysis}):`analyses ${An(p.stats.analysis)}`);}}),d=[];for await(let p of a.trials(u.id))p.analysis&&d.push(p);if(n)t.out(JSON.stringify({kind:"analysis.final",job:u,trials:d}));else {t.out("");for(let p of Dl(d))t.out(p);u.stats.analysis&&(t.out(""),t.out(`analyses ${An(u.stats.analysis)}`)),t.out("Details: evolve trial show <trial-id>");}return (u.stats.analysis?.n_failed??0)>0?1:0}function Ll(e){return e.replace(/_/g," ").split(" ").map(t=>t&&t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function Kr(e){let t=[],n=e.results.filter(r=>r.status==="failed");if(e.results.length===1){let r=e.results[0];if(r.status==="failed"&&r.failure)return t.push(`\u274C ${r.task_name}: ${r.failure.phase}: ${r.failure.message}`),t;t.push(`Task Quality Checks: ${r.task_name}`);let a=r.status==="completed"?xn(r):null;a!==null&&t.push(`Label: ${a}`);let o=[["CHECK","OUTCOME","EXPLANATION"]];for(let[l,c]of Object.entries(r.checks??{})){o.push([Ll(l),c.outcome,te(c.explanation)]);for(let i of c.evidence??[])o.push(["","",`${i.where} \u2014 ${te(i.quote)}`]);}return o.length===1&&o.push(["-",r.status,"-"]),t.push(...I(o)),r.cost_usd!==null&&t.push(`Agent cost: $${r.cost_usd.toFixed(4)}`),t.push(`Task check id: ${r.id}`),t}t.push("Task Quality Checks");let s=[["TASK","LABEL","PASS","FAIL","N/A","UNKNOWN","COST ($)","TASK CHECK ID"]];for(let r of e.results){if(r.status==="failed"){s.push([r.task_name,"-","-","-","-","-","-",r.id]);continue}if(r.status!=="completed"){s.push([r.task_name,r.status,"","","","","-",r.id]);continue}let a=Jr(r.checks);s.push([r.task_name,xn(r)??"-",String(a.pass),String(a.fail),String(a.not_applicable),String(a.unknown),r.cost_usd!==null?r.cost_usd.toFixed(4):"-",r.id]);}t.push(...I(s));for(let r of n)r.failure&&t.push(`\u274C ${r.task_name}: ${r.failure.phase}: ${r.failure.message.split(`
55
- `)[0]}`);return e.cost_usd!==null&&t.push(`Total agent cost: $${e.cost_usd.toFixed(4)}`),t}function Wr(e){let t={};for(let n of e.results)t[n.status]=(t[n.status]??0)+1;return Object.entries(t).map(([n,s])=>`${s} ${n}`).join(" \xB7 ")}function Yr(e){let t=e.rubric.criteria.length,n=[["check id",e.id],["status",e.status],["source",e.source.type==="dataset"?`dataset ${e.source.dataset} (package sha256 ${e.source.sha256.slice(0,12)}\u2026)`:`archive ${e.source.bytes} bytes sha256 ${e.source.sha256.slice(0,12)}\u2026`],["tasks",`${e.results.length} (${Wr(e)})`],["model",`${e.model_name} at effort ${e.reasoning_effort}`],["rubric",`${t} criteri${t===1?"on":"a"}`],["provider",e.sandbox_provider]];return e.prompt!==null&&n.push(["prompt","custom (Harbor's -p text)"]),e.n_concurrent!==null&&n.push(["n_concurrent",String(e.n_concurrent)]),e.include_task_names.length>0&&n.push(["include",e.include_task_names.join(", ")]),e.exclude_task_names.length>0&&n.push(["exclude",e.exclude_task_names.join(", ")]),e.n_tasks!==null&&n.push(["n_tasks",String(e.n_tasks)]),n.push(["created",e.created_at]),e.finished_at&&n.push(["finished",e.finished_at]),[...I(n),"",...Kr(e)]}async function Nl(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true,a=le(k(e)),o={};e.flags.model!==void 0&&(o.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(o.rubric=jn(String(e.flags.rubric))),e.flags.prompt!==void 0&&(o.prompt=Dn(String(e.flags.prompt))),e.flags.env!==void 0&&(o.sandbox_provider=String(e.flags.env)),e.flags.effort!==void 0&&(o.reasoning_effort=String(e.flags.effort)),e.flags["n-concurrent"]!==void 0&&(o.n_concurrent=e.flags["n-concurrent"]),e.flags["include-task-name"]!==void 0&&(o.include_task_names=e.flags["include-task-name"]),e.flags["exclude-task-name"]!==void 0&&(o.exclude_task_names=e.flags["exclude-task-name"]),e.flags["n-tasks"]!==void 0&&(o.n_tasks=e.flags["n-tasks"]);let l=e.positionals[0],c=e.flags.dataset;if(l===void 0&&c===void 0)throw new m("check takes a <path> (a task directory, or a directory of them) or -d/--dataset <name[@version]>");if(l!==void 0&&c!==void 0)throw new m("check takes EITHER a <path> OR -d/--dataset, not both");let i=c!==void 0?{dataset:c}:{directory:l};!n&&!r&&t.out("\u{1F50E} Checking task quality...");let u=await a.create({source:i,...o});if(!s){if(n)t.out(JSON.stringify(u));else {for(let p of Yr(u))t.out(p);t.out(""),t.out(`Follow it with: evolve check show ${u.id}`);}return 0}n?t.out(JSON.stringify({kind:"check.accepted",check:u})):r||t.out(`Check ${u.id} \u2014 ${u.results.length} task${u.results.length===1?"":"s"} queued, watching\u2026`);let d=await a.watch(u.id,{onProgress:p=>{r||t.out(n?JSON.stringify({kind:"check.progress",check:p}):`tasks ${Wr(p)}`);}});if(n)t.out(JSON.stringify({kind:"check.final",check:d}));else {t.out("");for(let p of Kr(d))t.out(p);t.out(""),t.out(`Report: evolve check show ${d.id}`);}return d.results.some(p=>p.status==="failed")?1:0}function Ul(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 m("--status got an empty status list");let n=t.filter(s=>!Ee.includes(s));if(n.length>0)throw new m(`--status must name check statuses (${Ee.join(", ")}); got: ${n.join(", ")}`);return t}var _r=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:e=>e.status},{key:"tasks",header:"TASKS",cell:e=>String(e.results.length)},{key:"model",header:"MODEL",cell:e=>e.model_name},{key:"spent",header:"SPENT",cell:e=>e.cost_usd!==null?`$${e.cost_usd.toFixed(4)}`:"-"},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],Jl=["id","status","tasks","model","spent","created"];async function Ml(e,t){if(F(e,t,_r))return 0;let n=xt(e),s=Ul(e),r=await le(k(e)).list({...j(e),...n!==void 0?{scope:n}:{},...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No checks."),0):(M(e,t,r.items,_r,Jl,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
56
- More: evolve check list --cursor ${r.nextCursor}`),0)}async function Fl(e,t){let n=await le(k(e)).get(await T(e,"check",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Yr(n))t.out(s);return n.results.some(s=>s.status==="failed")?1:0}async function Bl(e,t){let n=e.flags.json===true,s=e.flags.since,r=await le(k(e)).transcript(await T(e,"task check",e.positionals[0]),s!==void 0?{since:s}:void 0);for(let a of r.events)K(t,n,a);for(let a of r.gateway_calls)K(t,n,a);return !n&&r.events.length===0&&t.out("No trace events."),0}var yr=["task-check","trace-parsed",...Qe];async function br(e,t){try{return await e.task(t)}catch(n){throw n instanceof x&&n.status===404?new Error(`'${t}' is not a task check \u2014 --stream reads one task check's artifacts (results[].id on \`evolve check show\`); to save the whole check by its check id, drop --stream`):n}}async function ql(e,t){let n=le(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"check download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&e.flags.since!==void 0)throw new m("--since pages the parsed events; it applies only to --stream trace-parsed");let a=(await Mn(e,r!==void 0?["task check"]:["check","task check"],e.positionals[0])).id,o=a;if(r!==void 0){if(!yr.includes(r))throw new m(`--stream must be one of: ${yr.join(", ")}`);if(r==="task-check"){let i=await br(n,o);return t.out(s?JSON.stringify({task_check:i}):JSON.stringify(i,null,2)),0}if(r==="trace-parsed"){let i=e.flags.since,u=await n.transcript(o,i!==void 0?{since:i}:void 0);for(let d of u.events)K(t,s,d);for(let d of u.gateway_calls)K(t,s,d);return !s&&u.events.length===0&&t.out("No trace events."),0}if(await br(n,o),r==="agent-home"){let i=await n.artifact(o,r);if(i===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this task check.`),0;if(s)t.out(JSON.stringify({files:i}));else for(let[u,d]of Object.entries(i))t.out(`===== ${u} (${Buffer.byteLength(d,"utf8")} bytes) =====`),t.out(d);return 0}let c=await n.artifact(o,r);return c===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this task check.`),0):(t.out(s?JSON.stringify({log:c}):c),0)}return await Xr(e,t,{fetch:c=>n.download(a,{to:c}),outputDir:e.flags["output-dir"]??"checks",scratchPrefix:"evolve-check-download-",enrich:async c=>{let{readdir:i}=await import('fs/promises'),{join:u}=await import('path'),d=await Tt(e),p=fs.existsSync(u(c,"check_report.json")),f=p?(await i(c,{withFileTypes:true})).filter(v=>v.isDirectory()).map(v=>u(c,v.name)):[c],g=new Map;for(let v of f){let b=await zl(v);b!==null&&g.set(v,b);}let h=p?a:g.get(c)?.checkId;if(h===void 0)return [];let y=await n.get(h),_=[];p&&(await En(u(c,"evolve.json"),Vt(y,d)),_.push("evolve.json"));for(let[v,b]of g){let S=y.results.find(A=>A.id===b.taskCheckId);S!==void 0&&(await En(u(v,"evolve.json"),Ht(S,y,d)),_.push(p?`${v.slice(c.length+1)}/evolve.json`:"evolve.json"));}return _}})}async function zl(e){let{readFile:t}=await import('fs/promises'),{join:n}=await import('path');try{let s=JSON.parse(await t(n(e,"result.json"),"utf8")),r=s.x_evolve?.taskCheckId,a=s.x_evolve?.checkId;return typeof r=="string"&&typeof a=="string"?{taskCheckId:r,checkId:a}:null}catch{return null}}async function En(e,t){let{writeFile:n}=await import('fs/promises');await n(e,JSON.stringify(t,null,2)+`
57
- `);}async function Xr(e,t,n){let{mkdtemp:s,rm:r}=await import('fs/promises'),{tmpdir:a}=await import('os'),{join:o}=await import('path'),{extractTarGz:l,tarGzTopLevelName:c}=await Promise.resolve().then(()=>(st(),nt)),i=await s(o(a(),n.scratchPrefix));try{let u=await n.fetch(i),d=await c(u),p=o(n.outputDir,d);if(fs.existsSync(p)){if(e.flags.overwrite!==!0)throw new Error(`${p} already exists (pass --overwrite to replace it)`);await r(p,{recursive:!0,force:!0});}let f;try{f=await l(u,n.outputDir,d);}catch(g){throw await r(p,{recursive:!0,force:!0}).catch(()=>{}),g}return f.push(...await n.enrich(p)),e.flags.json===!0?t.out(JSON.stringify({path:p,files:f.length})):t.out(`Saved ${p} (${f.length} files)`),0}finally{await r(i,{recursive:true,force:true}).catch(()=>{});}}async function Hl(e,t){let n=E(k(e)),s={},r=Gr(e);r!==void 0&&(s.statuses=r),e.flags.task!==void 0&&(s.task_name=String(e.flags.task));let a=await n.regrade(await T(e,"job",e.positionals[0]),s);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of z(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}async function Vl(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]),{join:r}=await import('path'),a=e.flags["output-dir"]??process.cwd(),o=`job-${s}`,l=r(a,o);if(fs.existsSync(l)&&e.flags.overwrite!==true)throw new Error(`${l} already exists (pass --overwrite to replace it)`);let{mkdtemp:c,rm:i}=await import('fs/promises'),{tmpdir:u}=await import('os'),{extractTarGz:d}=await Promise.resolve().then(()=>(st(),nt)),p=await c(r(u(),"evolve-job-download-"));try{let f=await n.download(s,{to:p});e.flags.overwrite===!0&&await i(l,{recursive:!0,force:!0});let g;try{g=await d(f,a,o);}catch(A){throw await i(l,{recursive:!0,force:!0}).catch(()=>{}),A}let{readdir:h,readFile:y,writeFile:_}=await import('fs/promises'),v=await n.get(s),b=await Tt(e),S=new Map;for await(let A of n.trials(s))S.set(A.id,A);await _(r(l,"evolve.json"),JSON.stringify(Bt(v,b),null,2)+`
58
- `),g.push("evolve.json");for(let A of await h(l,{withFileTypes:!0})){if(!A.isDirectory())continue;let U;try{U=JSON.parse(await y(r(l,A.name,"result.json"),"utf8")).x_evolve?.trialId;}catch{continue}let B=U!==void 0?S.get(U):void 0;B&&(await _(r(l,A.name,"evolve.json"),JSON.stringify(et(B,v,b),null,2)+`
59
- `),g.push(`${A.name}/evolve.json`));}return e.flags.json===!0?t.out(JSON.stringify({path:l,files:g.length})):t.out(`Saved ${l} (${g.length} files)`),0}finally{await i(p,{recursive:true,force:true}).catch(()=>{});}}function ze(e){return e.receiving?`${e.status} (receiving)`:e.status}function Qr(e){let t=[["id",e.id],["status",ze(e)]];return e.source!==null&&t.push(["source",e.source.type==="archive"?`archive (${ne(`sha256:${e.source.sha256}`)})`:e.source.type==="archive_url"?`url ${e.source.url}`:`hub job ${e.source.job_id}`]),e.dataset!==null&&t.push(["dataset",e.dataset]),e.job_id!==null&&t.push(["job",e.job_id]),e.n_trials_uploaded!==null&&t.push(["trials",String(e.n_trials_uploaded)]),e.n_trials_skipped!==null&&t.push(["skipped",String(e.n_trials_skipped)]),e.progress!==null&&t.push(["phase",e.progress.phase]),e.failure!==null&&t.push(["failure",`${e.failure.code}: ${e.failure.message}`]),[...I(t),...Zr(e.skipped_trials),...Bn(e.task_links)]}var kr={hash_mismatch:"hash mismatch",task_not_in_dataset:"task not in the dataset",no_dataset_named:"no dataset named",dataset_ambiguous:"same task in two datasets",no_hash_match:"no task with this hash",no_task_digest:"no task digest in the archive"},Gl="uploaded before task linking existed: whether its trials carry the task folder is unknown here; each analysis row records it (task_absent_reason)";function Kl(e){return e==="dataset_flag"?"by task name, -d":"task hashes equal"}function Bn(e){if(e===null||e.length===0)return [];let t=e.reduce((d,p)=>d+p.n_trials,0),n=e.reduce((d,p)=>d+p.n_linked,0),s=(d,p)=>`${d} ${p}${d===1?"":"s"}`,r=d=>Object.entries(d.link_reasons).map(([p,f])=>`${kr[p]??p}${Object.keys(d.link_reasons).length>1?` ${f}`:""}`).join(", ")+(d.candidates.length>0?` [${d.candidates.join(", ")}]`:""),a=e.filter(d=>d.n_unlinked>0);if(n===0){let d=Array.from(new Set(a.flatMap(f=>Object.keys(f.link_reasons)))).map(f=>kr[f]??f).join(", "),p=Array.from(new Set(a.flatMap(f=>f.candidates)));return [`no dataset matched (${d}${p.length>0?`: ${p.join(", ")}`:""}); analyses of this job will run without the task folder \u2014 link explicitly with -d`]}let o=new Map,l="";for(let d of e)if(d.n_linked!==0){l=Kl(d.linked_by);for(let p of d.datasets)o.set(p,(o.get(p)??0)+d.n_linked);}let c=Array.from(o.entries()),i=c.length===1?c[0][0]:c.map(([d,p])=>`${d} (${p})`).join(", "),u=[`linked ${n} of ${s(t,"trial")} to ${i} (${l})`];return a.length>0&&u.push(`not linked: ${a.map(d=>`${d.task_name} (${s(d.n_unlinked,"trial")}, ${r(d)})`).join(", ")} \u2014 analyses of those trials run without the task folder; link explicitly: evolve upload <dir> -d <name[@version]>`),u}function Zr(e){return e===null||e.length===0?[]:e.map(t=>` skipped ${t.trial}: ${t.code}: ${t.message}`)}function Wl(e){let t=e.failure!==null?de(`${e.failure.code}: ${e.failure.message}`,140):"";return `status ${ze(e).padEnd(20)} ${t}`.trimEnd()}function Yl(e,t=Date.now()){let n=Nn(t-Date.parse(e.started_at));return `phase ${e.phase.padEnd(20)} ${n} elapsed`}async function ea(e,t,n,s){let r=E(k(e)),a=e.flags.json===true;a||n.out(s==="accepted"?`Upload accepted: import ${t.id} ${ze(t)} \u2014 watching\u2026`:`Import ${t.id} ${ze(t)} \u2014 watching\u2026`);let o=await r.watchImport(t.id,{onStatus:u=>{a||n.out(Wl(u));},onProgress:u=>{a||n.out(Yl(u));}});if(o.status==="FAILED"||o.job_id===null){let u=o.failure??{code:"import_failed",message:"the import settled without a job and without a recorded failure"};return a&&n.out(JSON.stringify({error:u})),n.err(`Error: ${u.message}`),1}let l=await r.get(o.job_id);if((o.n_trials_skipped??0)>0){n.err(`Skipped ${o.n_trials_skipped} trial(s) \u2014 see: evolve job import ${o.id}`);for(let u of Zr(o.skipped_trials))n.err(u);}let c=Bn(l.upload?.task_links??null),i=(l.upload?.task_links??[]).some(u=>u.n_unlinked>0);if(a){if(i)for(let u of c)n.err(u);return n.out(JSON.stringify(l)),0}n.out("");for(let u of z(l,{taskLinksRow:false}))n.out(u);if(c.length>0){n.out("");for(let u of c)n.out(u);}return n.out(""),n.out(`Analyze it with: evolve analyze ${l.id}`),0}async function Xl(e,t){let n=E(k(e)),s=e.flags.json===true,r=e.flags.dataset,a=e.flags.from,o=e.positionals[0];if(a!==void 0&&o!==void 0)throw new m('"upload" takes EXACTLY ONE source: <job_dir>, or --from <url>');if(a===void 0&&o===void 0)throw new m('"upload" needs a source: <job_dir> (or its .tar.gz), or --from <url>');if(a!==void 0&&!a.trim().startsWith("https://"))throw new m(`"--from" takes a public https url of a job archive (got "${a}")`);let l=-1,c=await n.upload(a!==void 0?{archive_url:a.trim()}:o,{...r!==void 0?{dataset:r}:{},onUploadProgress:(i,u)=>{if(s)return;let d=u>0?Math.floor(i/u*10):10;d!==l&&(l=d,t.out(`upload ${i}/${u} (${Math.min(100,d*10)}%)`));},onRegistered:i=>{s||t.out(`Registered import ${i} \u2014 re-attach anytime with: evolve job import ${i} --watch`);}});if(e.flags["no-wait"]===true){if(s)return t.out(JSON.stringify(c)),0;for(let i of Qr(c))t.out(i);return t.out(""),t.out(`Follow it with: evolve job import ${c.id} --watch`),0}return ea(e,c,t,"accepted")}var wr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:ze},{key:"job",header:"JOB",cell:e=>e.job_id??"-"},{key:"trials",header:"TRIALS",cell:e=>e.n_trials_uploaded===null?"-":String(e.n_trials_uploaded)},{key:"skipped",header:"SKIPPED",cell:e=>e.n_trials_skipped===null?"-":String(e.n_trials_skipped)},{key:"dataset",header:"DATASET",cell:e=>e.dataset??"-"},{key:"created",header:"CREATED",cell:e=>e.created_at??""}],Ql=["id","status","job","trials","skipped","dataset","created"];async function Zl(e,t){if(F(e,t,wr))return 0;let n=E(k(e)),s=e.flags.status;if(s!==void 0&&!["QUEUED","RUNNING","COMPLETED","FAILED"].includes(s))throw new m(`"--status" must be one of QUEUED, RUNNING, COMPLETED, FAILED (got "${s}")`);let r=await n.listImports({...j(e),...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No job imports."),0):(M(e,t,r.items,wr,Ql,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
60
- More: evolve job imports --cursor ${r.nextCursor}`),0)}async function eu(e,t){let s=await E(k(e)).getImport(e.positionals[0]);if(e.flags.watch===true)return ea(e,s,t,"attached");if(e.flags.json===true)return t.out(JSON.stringify(s)),0;for(let r of Qr(s))t.out(r);return 0}async function tu(e,t){let s=await G(k(e)).get(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of nl(s))t.out(r);return 0}var vr=Nt;async function nu(e,t){let n=G(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"trial download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&(e.flags.cursor!==void 0||e.flags.limit!==void 0))throw new m("--cursor/--limit page the parsed events; they apply only to --stream trace-parsed");let a=await T(e,"trial",e.positionals[0]);if(r!==void 0){if(!vr.includes(r))throw new m(`--stream must be one of: ${vr.join(", ")}`);if(r==="trace-parsed"){let _=0;for await(let v of n.traceEvents(a,j(e)))K(t,s,v),_+=1;return !s&&_===0&&t.out("No trace events."),0}if(r==="agent-home"){let _=await n.artifact(a,r);if(_===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this trial.`),0;if(s)t.out(JSON.stringify({files:_}));else for(let[v,b]of Object.entries(_))t.out(`===== ${v} (${Buffer.byteLength(b,"utf8")} bytes) =====`),t.out(b);return 0}let y=await n.artifact(a,r);return y===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this trial.`),0):(t.out(s?JSON.stringify({log:y}):y),0)}let{mkdir:o,writeFile:l}=await import('fs/promises'),{join:c,dirname:i}=await import('path'),u=c(e.flags["output-dir"]??"trials",a);if(fs.existsSync(u)&&e.flags.overwrite!==true)throw new Error(`${u} already exists (pass --overwrite to replace it)`);let d=await n.get(a),p=null;try{p=await E(k(e)).get(d.job_id);}catch{p=null;}let f=[];for await(let y of n.traceEvents(a))f.push(y);let g=qt({trial:d,job:p,events:f,atif:await n.artifact(a,"trace-atif"),verifierLog:await n.artifact(a,"verifier"),stdout:await n.artifact(a,"trace-stdout"),stderr:await n.artifact(a,"trace-stderr"),home:await n.artifact(a,"agent-home"),userId:await Tt(e)});await o(u,{recursive:true});let h=[];for(let y of Object.keys(g).sort()){let _=c(u,...y.split("/"));await o(i(_),{recursive:true}),await l(_,g[y]),h.push(y),s||t.out(y);}return s?t.out(JSON.stringify({path:u,saved:h})):t.out(`Saved ${u}`),0}async function Tt(e){try{return (await on(k(e)).status()).user_id}catch{return null}}async function su(e,t){let n=G(k(e)),s=e.flags.json===true,r=j(e);e.flags.type!==void 0&&(r.type=String(e.flags.type)),e.flags.grep!==void 0&&(r.grep=String(e.flags.grep)),e.flags.tail!==void 0&&(r.tail=e.flags.tail);let a=0;for await(let o of n.traceEvents(await T(e,"trial",e.positionals[0]),r))K(t,s,o),a+=1;return !s&&a===0&&t.out("No trace events."),0}async function ru(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]),r=j(e);e.flags.type!==void 0&&(r.type=String(e.flags.type));let a=await n.grep(s,e.positionals[1],r);if(e.flags.json===true)return t.out(JSON.stringify(a)),0;if(a.items.length===0)return t.out("No matches."),0;for(let o of a.items){let l=o.match_count===1?"match":"matches";t.out(`${o.trial_id} ${o.task_name??"-"} ${o.match_count} ${l}`);for(let c of o.events){let i=Br(c);i!==null&&t.out(` ${i}`);}}return a.hasMore&&a.nextCursor&&(t.out(""),t.out(`More trials match \u2014 resume with --cursor ${a.nextCursor}`)),0}async function au(e,t){let n=await G(k(e)).retry(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of z(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function ou(e,t){let n=await G(k(e)).regrade(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of z(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function iu(e,t){let n=G(k(e)),s=[];for(let a of e.positionals)s.push(await T(e,"trial",a));let r=await n.stop(s);if(e.flags.json===true)return t.out(JSON.stringify(r)),0;for(let a of r.stopped)t.out(`stopped ${a.id} (${a.task_name}) ${a.status}`);for(let a of r.stopped_analyses)t.out(`stopped analysis ${a.id} ${a.status}`);for(let a of r.already_terminal)t.out(`already terminal ${a}`);for(let a of r.not_found)t.out(`not found ${a}`);return 0}function lu(e){if(typeof e.estimated_cost_usd=="number")return `$${e.estimated_cost_usd.toFixed(4)}`;let t=e.usage?.spent_usd;return typeof t=="number"&&e.usage?.provisional?`at least $${t.toFixed(4)}`:"-"}var Sr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:e=>e.status},{key:"task",header:"TASK",cell:e=>e.task_name},{key:"job",header:"JOB",cell:e=>e.job_id},{key:"trial",header:"TRIAL",cell:e=>e.trial_id},{key:"model",header:"MODEL",cell:e=>e.model_name},{key:"attempts",header:"ATTEMPTS",cell:e=>String(e.attempts??1)},{key:"spent",header:"SPENT",cell:lu},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],uu=["id","status","task","model","spent","created"];async function cu(e,t){if(F(e,t,Sr))return 0;let n=xt(e),s=bl(e),r=e.flags.job!==void 0?await T(e,"job",String(e.flags.job)):void 0,o=await ke(k(e)).list({...j(e),...n!==void 0?{scope:n}:{},...r!==void 0?{job:r}:{},...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(o)),0):o.items.length===0?(e.flags.quiet!==true&&t.out("No analyses."),0):(M(e,t,o.items,Sr,uu,l=>l.id),o.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
61
- More: evolve analysis list --cursor ${o.nextCursor}`),0)}async function du(e,t){let n=ke(k(e)),s=await Rn(n,await Fn(e,n,e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of sl(s))t.out(r);return 0}async function pu(e,t){let n=ke(k(e)),s=e.flags.json===true,r=e.flags.since,a=await n.transcript((await Fn(e,n,e.positionals[0])).id,r!==void 0?{since:r}:void 0);for(let o of a.events)K(t,s,o);for(let o of a.gateway_calls)K(t,s,o);return !s&&a.events.length===0&&t.out("No trace events."),0}var Ar=["analysis","trace-parsed",...Qe];async function fu(e,t){let n=ke(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"analysis download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&e.flags.since!==void 0)throw new m("--since pages the parsed events; it applies only to --stream trace-parsed");let a=await Fn(e,n,e.positionals[0]),o=a.id;if(r!==void 0){if(!Ar.includes(r))throw new m(`--stream must be one of: ${Ar.join(", ")}`);if(r==="analysis"){let c=await Rn(n,a);return t.out(s?JSON.stringify({analysis:c}):JSON.stringify(c,null,2)),0}if(r==="trace-parsed"){let c=e.flags.since,i=await n.transcript(o,c!==void 0?{since:c}:void 0);for(let u of i.events)K(t,s,u);for(let u of i.gateway_calls)K(t,s,u);return !s&&i.events.length===0&&t.out("No trace events."),0}if(r==="agent-home"){let c=await n.artifact(o,r);if(c===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this analysis.`),0;if(s)t.out(JSON.stringify({files:c}));else for(let[i,u]of Object.entries(c))t.out(`===== ${i} (${Buffer.byteLength(u,"utf8")} bytes) =====`),t.out(u);return 0}let l=await n.artifact(o,r);return l===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this analysis.`),0):(t.out(s?JSON.stringify({log:l}):l),0)}return Xr(e,t,{fetch:l=>n.download(o,{to:l}),outputDir:e.flags["output-dir"]??"analyses",scratchPrefix:"evolve-analysis-download-",enrich:async l=>{let{join:c}=await import('path'),i=await Rn(n,a);return await En(c(l,"evolve.json"),zt(i,await Tt(e))),["evolve.json"]}})}function gu(e){switch(e.kind){case "git":{let t=e.ref===e.commit?"":` @ ${e.ref}`;return [`source: ${e.git_url??"?"}${t} (commit ${e.commit.slice(0,12)})`,...e.path?[` subfolder: ${e.path}`]:[]]}case "archive":return [`source: uploaded archive (${ne(e.digest)})`];case "archive_url":return [`source: ${e.archive_url} (${ne(e.digest)})`];case "hub_package":return [`source: hub:${e.hub_package} (${ne(e.digest)})`]}}function mu(e){return e.kind==="git"?e.commit.slice(0,12):ne(e.digest)}function ta(e){let t=I([["name",e.name],["title",e.title??"-"],["description",e.description??"-"],["active version",e.active_version?.version??"-"]]),n=e.selected_version?.source??e.active_version?.source??null;if(n)t.push(...gu(n));else if(e.upstream){let r=e.upstream,a=r.ref===r.current_commit?"":` @ ${r.ref}`;t.push(`source: ${r.git_url??"?"}${a} (commit ${r.current_commit.slice(0,12)})`),r.path&&t.push(` subfolder: ${r.path}`);}let s=e.active_version?.manifest;if(s&&(t.push(`manifest: ${s.name}${s.version?`@${s.version}`:""}`+(s.task_count!==null?` (${s.task_count} tasks pinned)`:"")),s.authors.length>0&&t.push(` authors: ${s.authors.map(r=>r.email?`${r.name} <${r.email}>`:r.name).join(", ")}`),s.keywords.length>0&&t.push(` keywords: ${s.keywords.join(", ")}`)),e.versions&&e.versions.length>0){t.push("");let r=e.versions.some(l=>l.source!=null),a=e.versions.some(l=>l.n_failed_tasks>0),o=[["VERSION","STATE","TASKS",...a?["FAILED"]:[],"CREATED",...r?["SOURCE"]:[]]];for(let l of e.versions)o.push([l.version,l.state,String(l.task_count),...a?[l.n_failed_tasks>0?String(l.n_failed_tasks):"-"]:[],l.created_at??"-",...r?[l.source?mu(l.source):"-"]:[]]);t.push(...I(o));}if(e.tasks&&e.tasks.items.length>0){t.push("",`Tasks (version ${e.selected_version?.version??"?"}):`);let r=e.tasks.items.some(c=>(c.gpus??0)>0),a=e.tasks.items.some(c=>(c.notes??[]).length>0),o=[["TASK","AGENT TIMEOUT","VERIFIER TIMEOUT",...r?["GPU"]:[],"PROVIDERS",...a?["NOTES"]:[]]];for(let c of e.tasks.items)o.push([c.task_name,`${c.agent_timeout_sec}s`,`${c.verifier_timeout_sec}s`,...r?[al(c)??"-"]:[],rl(c.providers),...a?[(c.notes??[]).map(i=>i.code).join(", ")||"-"]:[]]);if(t.push(...I(o)),a){let c=new Map;for(let i of e.tasks.items)for(let u of i.notes??[]){let d=c.get(u.message)??{code:u.code,tasks:[]};d.tasks.push(i.task_name),c.set(u.message,d);}t.push("","Task notes:");for(let[i,u]of c)t.push(` ${u.code} (${u.tasks.length} task${u.tasks.length===1?"":"s"}): ${i}`);}e.tasks.nextCursor&&t.push(`More tasks: evolve dataset show ${e.name} --cursor ${e.tasks.nextCursor}`);let l=new Map;for(let c of e.tasks.items)for(let i of Fr){let u=c.providers?.[i];if(u){if(!u.ok)l.has(`${i}:${u.reason}`)||l.set(`${i}:${u.reason}`,`${i}: ${u.reason}`);else if(u.degrades_to&&u.reason){let d=`${i}:degrade:${u.reason}`;l.has(d)||l.set(d,`${i}: runs on ${u.degrades_to} \u2014 ${u.reason}`);}}}if(l.size>0){t.push("","Provider limitations:");for(let c of l.values())t.push(` ${c}`);}}return t.push(...hu(e)),t}function hu(e){let t=e.failed_tasks??[],n=e.selected_version??e.active_version??null,s=n?.n_failed_tasks??t.length;if(t.length===0&&s===0)return [];let r=["",`Failed tasks (version ${n?.version??"?"}) \u2014 not runnable in this version:`],a=[];for(let o of t)a.push([` ${o.task_name}`,`${o.failure.code} (${o.failure.step}): ${o.failure.message}`]);return r.push(...I(a)),s>t.length&&r.push(` \u2026 ${s-t.length} more (${s} failed in total)`),r.push(" Fix: re-publish a new version \u2014 versions are immutable."),r}function na(e){let t=[];for(let n of e){if(!n.upstream?.moved)continue;let s=n.active_version?`@${n.active_version.version}`:"",r=n.upstream.latest_commit??n.upstream.ref,a=n.upstream.git_url??"<url>",o=n.upstream.path?` --path ${n.upstream.path}`:"";t.push(`${n.name}${s} \xB7 upstream ${n.upstream.ref} moved \u2014 run: evolve dataset publish --name ${n.name} --version <new-version> --git ${a} --ref ${r}${o}`);}return t}async function _u(e,t){if(F(e,t,or))return 0;let s=await Z(k(e)).list({...j(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(M(e,t,s.items,or,Qi,r=>r.name),e.flags.quiet!==true)for(let r of na(s.items))t.out(r);return 0}async function yu(e,t){let s=await Z(k(e)).get(e.positionals[0],j(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of ta(s))t.out(r);for(let r of na([s]))t.out(r);}return 0}function In(e){let t=[`Pre-flight (importer ${e.importer_version}): ${e.tasks_total} task${e.tasks_total===1?"":"s"} \u2014 ${e.tasks_ok} ok, ${e.tasks_refused} refused`];e.manifest!==null&&e.manifest.ok===false&&t.push(` dataset.toml REFUSED: ${e.manifest.reason}`);for(let n of e.tasks){if(!n.ok){t.push(` ${n.name} REFUSED: ${n.reason}`);continue}let s=Object.entries(n.providers??{}).filter(([,r])=>r.ok!==true||"degrades_to"in r).map(([r,a])=>a.ok?`${r}: runs via ${a.degrades_to}`:`${r}: ${a.reason}`);s.length>0&&t.push(` ${n.name}: ${s.join(" \xB7 ")}`);for(let r of n.notes??[])t.push(` ${n.name} NOTE ${r.code}: ${r.message}`);}return t.push(`Checked from task.toml alone; the import also checks: ${e.deferred.map(n=>n.name).join(", ")}.`),t}async function bu(e,t){let s=await Z(k(e)).preflight({source:{directory:e.positionals[0]}});if(e.flags.json===true)t.out(JSON.stringify(s));else for(let a of In(s))t.out(a);let r=s.manifest!==null&&s.manifest.ok===false;return s.tasks_refused>0||r?1:0}async function ku(e,t){let n=e.flags.json===true,s=Z(k(e)),r=qi(e);if(r.source.directory!==void 0&&e.flags["skip-preflight"]!==true){let u=null;try{u=await s.preflight({source:{directory:r.source.directory}});}catch(d){if(d instanceof x&&d.status===404)t.err("Pre-flight unavailable on this server \u2014 publishing without it.");else throw d}if(u!==null){let d=u.manifest!==null&&u.manifest.ok===false;if(u.tasks_refused>0||d){if(n)t.out(JSON.stringify({kind:"preflight.refused",preflight:u}));else {for(let p of In(u))t.out(p);t.out(""),t.out("Nothing was uploaded. Fix the refused tasks, or pass --skip-preflight to publish anyway (a refused task then lands FAILED at import).");}return 1}if(n)e.flags.watch===true&&t.out(JSON.stringify({kind:"preflight.ok",preflight:u}));else for(let p of In(u))t.out(p);}}let a=u=>{if(n){e.flags.watch===true&&t.out(JSON.stringify({kind:"import.registered",import_id:u}));return}t.out(`Registered import ${u} \u2014 re-attach anytime with: evolve dataset watch ${u}`);},o=Date.now(),l=-1,c=(u,d)=>{let p=d>0?Math.floor(u/d*10):10;if(!(p<=l)){if(l=p,n){t.out(JSON.stringify({kind:"upload.progress",sent_bytes:u,total_bytes:d,elapsed_sec:(Date.now()-o)/1e3}));return}t.out(`upload ${kt(u)}/${kt(d)} (${Math.min(p*10,100)}%)`);}},i=await s.publish(r,{onRegistered:a,...n&&e.flags.watch!==true?{}:{onUploadProgress:c}});if(e.flags.watch!==true){if(n)t.out(JSON.stringify(i));else {for(let u of zr(i))t.out(u);t.out(""),t.out(`Follow it with: evolve dataset show ${i.name}`);}return 0}return sa(s,i,t,n,"created")}async function sa(e,t,n,s,r){s?n.out(JSON.stringify({kind:`import.${r}`,datasetImport:t})):n.out(r==="created"?`Publish ${t.id} (${t.name}) ${t.status} \u2014 watching\u2026`:`Import ${t.id} (${t.name}@${t.version}) ${Un(t)} \u2014 watching\u2026`);let a=null,o=null,l=new Set,c=d=>{for(let p of d.failed_tasks??[])l.has(p.task_name)||(l.add(p.task_name),n.out(s?JSON.stringify({kind:"task.failed",task:p}):Su(p)));},i;try{i=await e.watchImport(t.id,{onStatus:d=>{n.out(s?JSON.stringify({kind:"import.status",datasetImport:d}):ll(d));},onProgress:d=>{n.out(s?JSON.stringify({kind:"import.progress",progress:d}):ol(d));},onVersion:(d,p)=>{a=d,o=p,n.out(s?JSON.stringify({kind:"import.version",version:d}):ul(d)),c(p);}});}catch(d){if(d instanceof oe)return s&&n.out(JSON.stringify({error:oa(d)})),n.err(`Error: ${d.message}`),n.err(`Follow it with: evolve dataset show ${d.dataset}@${d.version}`),1;throw d}let u=a;if(u!==null&&u.n_failed_tasks>0)try{let d=await e.get(`${i.name}@${i.version}`);o=d,c(d);}catch{}if(s)n.out(JSON.stringify({kind:"import.final",datasetImport:i}));else {n.out("");for(let d of zr(i))n.out(d);if(i.progress!==null)for(let d of il(i.progress))n.out(d);if(a!==null){for(let d of cl(a,o))n.out(d);for(let d of vu(a,i))n.out(d);}}return i.status==="FAILED"?1:0}async function wu(e,t){let n=e.flags.json===true,s=Z(k(e)),r=e.positionals[0],a=null;try{a=await s.getImport(r);}catch(o){if(!(o instanceof x&&o.status===404))throw o}if(a===null){let l=(await s.listImports({dataset:r,limit:50})).items;if(a=l.find(c=>c.status==="QUEUED"||c.status==="RUNNING")??null,a===null){let c=l[0],i=c!==void 0?`its newest import ${c.id} is ${c.status} \u2014 see it with: evolve dataset show ${r}`:"no import id and no dataset of yours carries that name",u=`Nothing to watch for "${r}": ${i}`;return n&&t.out(JSON.stringify({error:{code:"nothing_to_watch",message:u}})),t.err(`Error: ${u}`),1}}try{return await sa(s,a,t,n,"attached")}catch(o){if(o instanceof x&&o.code==="import_not_found"){let l=`Import ${a.id} no longer exists \u2014 its upload was abandoned or refused before the corpus arrived, so the publish never happened. Re-run the publish to start a new one.`;return n&&t.out(JSON.stringify({error:{code:"import_not_found",message:l}})),t.err(`Error: ${l}`),1}throw o}}function vu(e,t){if(e.n_failed_tasks<=0)return [];let n=e.task_count+e.n_failed_tasks;return [`built ${e.task_count} of ${n} tasks \u2014 ${e.n_failed_tasks} failed to build`,`Reasons: evolve dataset show ${t.name}@${t.version}`,"Fix: re-publish a new version \u2014 versions are immutable."]}function Su(e){return `task ${e.task_name} FAILED \u2014 ${e.failure.code} (${e.failure.step}): ${de(e.failure.message,140)}`}async function Au(e,t){let s=await Z(k(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 xu(e,t){let n=Z(k(e)),[s,r]=e.positionals,a=await n.activate(s,r);if(e.flags.json===true)t.out(JSON.stringify(a));else for(let o of ta(a))t.out(o);return 0}function ra(e){let t=[["name",e.name],["id",e.id],["ref",e.ref],["digest",e.digest],["size",kt(e.size_bytes)]];return e.description&&t.push(["description",e.description]),t.push(["created",e.created_at]),I(t)}async function Tu(e,t){if(F(e,t,ir))return 0;let s=await ie(k(e)).list(j(e));return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.items.length===0?(e.flags.quiet!==true&&t.out("No uploaded skills."),0):(M(e,t,s.items,ir,Zi,r=>r.id),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
62
- More: evolve skill list --cursor ${s.nextCursor}`),0)}async function Ru(e,t){let s=await ie(k(e)).upload(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(s.length===1?s[0]:s)),0):(s.forEach((r,a)=>{a>0&&t.out("");for(let o of ra(r))t.out(o);}),t.out(""),t.out(`Use it with: evolve run --skill name:${s[0].name} (moving pointer) or --skill ${s[0].ref} (this exact content)`),0)}async function Eu(e,t){let n=await ie(k(e)).get(await T(e,"skill",e.positionals[0]));if(e.flags.json===true)return t.out(JSON.stringify(n)),0;for(let s of ra(n))t.out(s);return n.skill_md&&(t.out(""),t.out(n.skill_md)),0}async function Iu(e,t){let n=await T(e,"skill",e.positionals[0]);return await ie(k(e)).delete(n),e.flags.json===true?t.out(JSON.stringify({id:n,deleted:true})):t.out(`Deleted skill ${n}`),0}async function Pu(e,t){if(F(e,t,lr))return 0;let s=await Le(k(e)).list(j(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):(M(e,t,s.items,lr,el,r=>r.name),0)}async function $u(e,t){let s=await Le(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of Mr(s))t.out(r);return 0}async function Cu(e,t){let s=await Le(k(e)).create(zi(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of Mr(s))t.out(r);t.out(""),t.out(`Use it with: evolve run -d <dataset> -a ${s.name} -m <model>`);}return 0}async function Ou(e,t){let n=Le(k(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 Du(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]),I(t)}function qn(e){let t={};return typeof e.flags["api-key"]=="string"&&(t.apiKey=e.flags["api-key"]),typeof e.flags["base-url"]=="string"&&(t.dashboardUrl=e.flags["base-url"]),t}function aa(e){let t=e.usage;return t&&typeof t.spent_usd=="number"?t.provisional?`at least $${t.spent_usd.toFixed(2)}`:`$${t.spent_usd.toFixed(2)}`:q(e.cost)}var xr=[{key:"id",header:"ID",cell:e=>e.id},{key:"tag",header:"TAG",cell:e=>e.tag},{key:"agent",header:"AGENT",cell:e=>e.agent},{key:"model",header:"MODEL",cell:e=>e.model??"-"},{key:"provider",header:"PROVIDER",cell:e=>e.provider},{key:"sandbox",header:"SANDBOX",cell:e=>e.sandboxId??"-"},{key:"state",header:"STATE",cell:e=>e.state},{key:"runtime",header:"RUNTIME",cell:e=>e.runtimeStatus},{key:"cost",header:"COST",cell:aa},{key:"steps",header:"STEPS",cell:e=>String(e.stepCount)},{key:"created",header:"CREATED",cell:e=>e.createdAt},{key:"ended",header:"ENDED",cell:e=>e.endedAt??"-"}],ju=["id","tag","agent","model","state","cost","created"];function Lu(e){let t=[["id",e.id],["tag",e.tag],["agent",e.agent],["model",e.model??"-"],["provider",e.provider],["sandbox",e.sandboxId??"-"],["state",e.state],["runtime",e.runtimeStatus],["cost",aa(e)]];return e.usage&&t.push(["tokens",`${e.usage.input_tokens??"-"} in / ${e.usage.cached_input_tokens??"-"} cached / `+(e.usage.cache_write_tokens!==null?`${e.usage.cache_write_tokens} written to cache / `:"")+`${e.usage.output_tokens??"-"} out`+(e.usage.provisional?" (provisional)":"")]),t.push(["steps",String(e.stepCount)]),e.toolStats&&Object.keys(e.toolStats).length>0&&t.push(["tools",Object.entries(e.toolStats).map(([n,s])=>`${n} ${s}`).join(", ")]),t.push(["created",e.createdAt]),t.push(["ended",e.endedAt??"-"]),I(t)}async function Nu(e,t){if(F(e,t,xr))return 0;let n=e.flags.state===void 0?void 0:String(e.flags.state);if(n!==void 0&&n!=="live"&&n!=="ended")throw new m(`--state must be live or ended; got: ${n}`);let r=await pt(qn(e)).list({...j(e),...n!==void 0?{state:n}:{},...e.flags.agent!==void 0?{agent:String(e.flags.agent)}:{},...e.flags["tag-prefix"]!==void 0?{tagPrefix:String(e.flags["tag-prefix"])}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No sessions."),0):(M(e,t,r.items,xr,ju,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
63
- More: evolve session list --cursor ${r.nextCursor}`),0)}async function Uu(e,t){let n=await pt(qn(e)).get(await T(e,"session",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Lu(n))t.out(s);return 0}async function Ju(e,t){let n=await on(k(e)).status();if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Du(n))t.out(s);return 0}var Tr=[{key:"slug",header:"SLUG",cell:e=>e.slug},{key:"display_name",header:"DISPLAY NAME",cell:e=>e.display_name},{key:"role",header:"ROLE",cell:e=>e.role??"-"},{key:"personal",header:"PERSONAL",cell:e=>e.personal?"yes":"no"},{key:"created",header:"CREATED",cell:e=>e.created_at}],Mu=["slug","display_name","role","created"];function Fu(e,t){let n=t.toLowerCase();return e.filter(s=>s.slug.toLowerCase().includes(n)||s.display_name.toLowerCase().includes(n)||(s.role??"").toLowerCase().includes(n))}async function Bu(e,t){if(F(e,t,Tr))return 0;let n=await ln(k(e)).list(),s=e.flags.search!==void 0?Fu(n,String(e.flags.search)):n;return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.length===0?(e.flags.quiet!==true&&t.out("No organizations found."),0):(M(e,t,s,Tr,Mu,r=>r.slug),0)}function qu(e){let{quota:t,usage:n}=e,s=n.month_spend_usd===null?"unavailable":q(n.month_spend_usd),r=n.month_spend_as_of===null?"":` (as of ${n.month_spend_as_of})`,a=t.monthly_budget_usd===null?`${s} / no budget${r}`:`${s} / ${q(t.monthly_budget_usd)}${r}`,o=[["slug",e.slug],["display name",e.display_name],["personal",e.personal?"yes":"no"],["role",e.role??"-"],["members",String(e.member_count)],["created",e.created_at],["concurrent trials",`${n.in_flight_trials}/${t.max_concurrent_trials}`],["queued trials",`${n.queued_trials}/${t.max_queued_trials}`],["concurrent imports",`${n.in_flight_imports}/${t.max_concurrent_imports}`],["concurrent analyses",`${n.in_flight_analyses}/${t.max_concurrent_analyses}`],["concurrent sessions",`${n.active_sessions}/${t.max_concurrent_sessions}`],["e2b sandbox ceiling",String(t.max_concurrent_sandboxes_e2b)],["daytona sandbox ceiling",String(t.max_concurrent_sandboxes_daytona)],["modal sandbox ceiling",String(t.max_concurrent_sandboxes_modal)],["month spend",a]];return I(o)}async function zu(e,t){let n=await ln(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of qu(n))t.out(s);return 0}function zn(e){let t={};return typeof e.flags["api-key"]=="string"&&(t.apiKey=e.flags["api-key"]),typeof e.flags["base-url"]=="string"&&(t.dashboardUrl=e.flags["base-url"]),t}function Hu(e){let t=e.flags.value;if(typeof t=="string"){if(t.length===0)throw new m("--value must not be empty");return t}if(process.stdin.isTTY)throw new m('no value given: pass --value <value> or pipe the value on stdin (e.g. printf %s "$TOKEN" | evolve secrets set NAME --delivery ...)');let n=fs.readFileSync(0,"utf8"),s=n.endsWith(`\r
51
+ `),tty:process.stdout.isTTY===true&&process.env.TERM!=="dumb",...process.stdin.isTTY===true?{confirm:async e=>{let{createInterface:t}=await import('readline/promises'),n=t({input:process.stdin,output:process.stderr});try{let s=(await n.question(`${e} [y/N] `)).trim().toLowerCase();return s==="y"||s==="yes"}finally{n.close();}}}:{}};function I(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 q(e){return typeof e=="number"?`$${e.toFixed(2)}`:"-"}function ve(e){return e.lane==="measured"?q(e.usd):e.lane==="floor"?`at least ${q(e.usd)}`:"-"}function Or(e,t){if(!e.upload)return null;let n=e.upload.reported_totals;if(!n||n.cost_usd===null)return "-";let s=t?` (${n.n_trials_reporting}/${e.n_total_trials} trials reporting)`:"";return `reported ${q(n.cost_usd)}${s}`}function Dn(e){if(e.input_tokens===null&&e.output_tokens===null)return null;let t=r=>r===null?"-":r.toLocaleString("en-US"),n=[e.cached_input_tokens!==null?`${t(e.cached_input_tokens)} cached`:null,e.cache_write_tokens!==null?`${t(e.cache_write_tokens)} written to cache`:null].filter(r=>r!==null),s=n.length>0?` (${n.join(", ")})`:"";return `in ${t(e.input_tokens)}${s} \xB7 out ${t(e.output_tokens)}`+(e.provisional?" \u2014 provisional":"")}function yt(e){let t=`${e.name}:${e.model_name}`;return e.version?`${t}:${e.version}`:t}function vn(e){let t=[`${e.n_completed} completed`,`${e.n_failed} failed`,`${e.n_pending} pending`];return e.cost_usd!=null&&t.push(`spent $${e.cost_usd.toFixed(4)}`),t.join(" \xB7 ")}function kt(e){return e.map(t=>`${t.name}@${t.version}`).join(", ")||"-"}function de(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function te(e){return e.replace(/[\t\n\r]+/g," ")}function J(e,t,n,s,r,a){if(e.flags.quiet===true){for(let c of n)t.out(a(c));return}let o=qi(e,s,r);if(t.tty===true){let c=e.flags["no-trunc"]===true,i=[o.map(u=>u.header)];for(let u of n)i.push(o.map(d=>c?te(d.cell(u)):de(te(d.cell(u)),60)));for(let u of I(i))t.out(u);}else {e.flags["no-headers"]!==true&&t.out(o.map(c=>c.header).join(" "));for(let c of n)t.out(o.map(i=>te(i.cell(c))).join(" "));}}function qi(e,t,n){let s=e.flags.columns;if(s===void 0)return n.map(a=>t.find(o=>o.key===a));if(s==="all")return t;let r=s.split(",").map(a=>a.trim()).filter(Boolean);if(r.length===0)throw new m("--columns got an empty column list");return r.map(a=>{let o=t.find(l=>l.key===a);if(!o)throw new m(`Unknown column "${a}" (available: ${t.map(l=>l.key).join(", ")}, or "all")`);return o})}function M(e,t,n){if(e.flags.columns!=="help")return false;for(let s of n)t.out(s.key);return true}function z(e,t={}){let n=[["id",e.id],["status",e.status],["datasets",kt(e.datasets)]];n.push(["agents",e.agents.map(yt).join(", ")]);for(let o of e.agents){o.skills.length>0&&n.push(["skills",`${yt(o)}: ${o.skills.join(", ")}`]);for(let l of o.skill_locks??[])n.push(["skill lock",`${l.name} @ ${l.git_commit_id?l.git_commit_id.slice(0,12):ne(l.digest)}`]);}n.push(["size",`${e.counts.agents} agent(s) x ${e.counts.tasks} task(s) = ${e.n_total_trials} trial(s)`]);for(let o of e.build_exclusions)n.push(["build exclusions",o.note]);n.push(["attempts/task",String(e.n_attempts)]),n.push(["concurrency",String(e.n_concurrent_trials)]),n.push(["max spend/trial",q(e.max_trial_spend_usd)]),n.push(["worst case",q(e.worst_case_spend_usd)]),n.push(["retries",`${e.retry.max_retries}/trial on infrastructure errors`+((e.stats.n_retries??0)>0?` (${e.stats.n_retries} used)`:"")]),e.analyze&&n.push(["analyze",`${e.analyze.model_name} \xB7 ${e.analyze.rubric.criteria.length} criteri${e.analyze.rubric.criteria.length===1?"on":"a"}`+(e.analyze.sandbox_provider?` \xB7 ${e.analyze.sandbox_provider}`:"")]);{let l=[["agent",e.agent_timeout_multiplier],["verifier",e.verifier_timeout_multiplier],["agent setup",e.agent_setup_timeout_multiplier],["environment build",e.environment_build_timeout_multiplier]].filter(([,c])=>c!=null);(e.timeout_multiplier!==1||l.length>0)&&n.push(["timeouts",`x${e.timeout_multiplier}`+(l.length>0?` (${l.map(([c,i])=>`${c} x${i}`).join(", ")})`:"")]);}n.push(["provider",e.upload?"ported":e.sandbox_provider??"-"]),n.push(["spent",Or(e,true)??ve($e(e.stats.cost_usd,e.stats.n_unmeasured_trials))]),e.stats.gpu_cost_usd!=null&&n.push(["gpu compute (est.)",`$${e.stats.gpu_cost_usd.toFixed(4)}`]);let s=e.stats.n_unmeasured_judge_trials;if((e.stats.judge_cost_usd!=null&&e.stats.judge_cost_usd>0||typeof s=="number"&&s>0)&&n.push(["spent (judge)",ve($e(e.stats.judge_cost_usd,s))]),e.upload?.reported_totals){let o=e.upload.reported_totals,l=[o.n_input_tokens!==null?`in ${o.n_input_tokens}`:null,o.n_cache_tokens!==null?`cache ${o.n_cache_tokens}`:null,o.n_output_tokens!==null?`out ${o.n_output_tokens}`:null].filter(c=>c!==null);l.length>0&&n.push(["reported tokens",l.join(" \xB7 ")]);}if((t.taskLinksRow??true)&&e.upload?.task_links&&e.upload.task_links.length>0){let o=e.upload.task_links,l=o.reduce((u,d)=>u+d.n_linked,0),c=o.reduce((u,d)=>u+d.n_trials,0),i=Array.from(new Set(o.flatMap(u=>u.datasets)));n.push(["task links",`${l} of ${c} ${c===1?"trial":"trials"} linked`+(i.length>0?` to ${i.join(", ")}`:"")+(l<c?` \u2014 ${c-l} without the task folder`:"")]);}if(e.stats.analysis){n.push(["analysis",vn(e.stats.analysis)]);for(let[o,l]of Object.entries(e.stats.analysis.checks))n.push([` ${o}`,`${l.n_pass} pass \xB7 ${l.n_fail} fail \xB7 ${l.n_not_applicable} n/a`+(typeof l.n_unknown=="number"?` \xB7 ${l.n_unknown} unknown`:"")]);}let a=Object.entries(e.trials.byStatus).filter(([,o])=>o>0).map(([o,l])=>`${o} ${l}`).join(" \xB7 ");a&&n.push(["trials",a]);for(let o of e.source_jobs)n.push([o.action==="regrade"?"regrade of":o.action==="retry"?"retry of":"resume of",o.job_id]);if(e.upload){let o=[e.upload.original_job_name,e.upload.original_job_id].filter(l=>l!==null).join(" \xB7 ");n.push(["uploaded",`${e.upload.uploaded_at}${o?` \u2014 originally ${o}`:""}`]);}return e.idempotent_replay&&n.push(["note","idempotent replay of an existing job"]),e.failure&&n.push(["failure",`${e.failure.code}: ${e.failure.message}`]),n.push(["started",e.started_at]),n.push(["updated",e.updated_at]),[...I(n),...zi(e)]}function zi(e){let t=Ct(e);if(t.length===0)return [];let n=t.map(s=>[` ${s.evals_key}`,s.points.map(r=>`pass@${r.k} ${r.value.toFixed(3)}`).join(" ")]);return ["","pass@k",...I(n)]}var Qs=[{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=>kt(e.datasets)},{key:"agents",header:"AGENTS",cell:e=>e.agents.map(yt).join(", ")},{key:"trials",header:"TRIALS",cell:e=>String(e.trials.total)},{key:"spent",header:"SPENT",cell:e=>Or(e,false)??ve($e(e.stats.cost_usd,e.stats.n_unmeasured_trials))},{key:"started",header:"STARTED",cell:e=>e.started_at}],Hi=["id","status","datasets","trials","spent","started"],Zs=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"agent",header:"AGENT",cell:e=>yt({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=>ve(Jt(e))},{key:"tokens",header:"TOKENS",cell:e=>e.usage&&Dn(e.usage)||"-"},{key:"gpu",header:"GPU (EST)",cell:e=>e.gpu_cost?.estimate_usd!=null?`$${e.gpu_cost.estimate_usd.toFixed(4)}`:"-"},{key:"id",header:"TRIAL ID",cell:e=>e.id}],Vi=["task","agent","attempt","status","reward","spent","id"],er=[{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=>An(e.mean_reward)},{key:"spent",header:"SPENT",cell:e=>q(e.cost_usd)},{key:"check",header:"CHECK",cell:e=>Ki(e.check)},{key:"check-id",header:"TASK CHECK ID",cell:e=>e.check?.id??"-"}],Gi=["task","source","trials","statuses","reward","spent","check"];function Dr(e){let t={pass:0,fail:0,not_applicable:0,unknown:0};for(let n of Object.values(e??{}))t[n.outcome]+=1;return t}function wt(e){return e===void 0?null:e===null?"custom rubric":e.replace(/_/g," ").toUpperCase()}function Sn(e){let t=wt(e.label);return t===null||e.label===null?t:`${t}${e.executed===true?" \xB7 executed":e.executed===false?" \xB7 not executed":""}`}function Ki(e){if(e===null)return "-";if(e.status!=="completed")return e.status;let t=Dr(e.checks),n=`pass ${t.pass} \xB7 fail ${t.fail} \xB7 n/a ${t.not_applicable} \xB7 unknown ${t.unknown}`,s=Sn(e);return s===null?n:`${s} \xB7 ${n}`}var tr=[{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??"-"}],Wi=["name","active","state","tasks","title"];function ne(e){return e.length>19?`${e.slice(0,19)}\u2026`:e}function bt(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}var nr=[{key:"name",header:"NAME",cell:e=>e.name},{key:"id",header:"ID",cell:e=>e.id},{key:"digest",header:"DIGEST",cell:e=>ne(e.digest)},{key:"size",header:"SIZE",cell:e=>bt(e.size_bytes)},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"description",header:"DESCRIPTION",cell:e=>e.description??"-"},{key:"ref",header:"REF",cell:e=>e.ref}],Yi=["name","id","digest","size","created"],sr=[{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}],Xi=["name","source","run","updated"],rr=[{key:"name",header:"NAME",cell:e=>e.name},{key:"label",header:"LABEL",cell:e=>e.label??"default"},{key:"delivery",header:"DELIVERY",cell:e=>e.delivery??"brokered"},{key:"hosts",header:"ALLOWED HOSTS",cell:e=>e.allowedHosts.join(", ")||"-"},{key:"updated",header:"UPDATED",cell:e=>e.updatedAt},{key:"last-used",header:"LAST USED",cell:e=>e.lastUsedAt??"-"},{key:"id",header:"ID",cell:e=>e.id}],Qi=["name","label","delivery","hosts","updated"];function Zi(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",ve(me(e))]),e.judge_result&&t.push(["spent (judge)",ve(Ut(e))]),(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}`]);}if(e.usage){let s=Dn(e.usage);s&&t.push(["tokens",s]);}if(e.upload){let s=e.upload.reported_agent_result;s&&s.cost_usd!==null&&t.push(["reported cost",`$${s.cost_usd.toFixed(4)} (the original run's own record \u2014 not platform-metered)`]);let r=s?[s.n_input_tokens!==null?`in ${s.n_input_tokens}`:null,s.n_cache_tokens!==null?`cache ${s.n_cache_tokens}`:null,s.n_output_tokens!==null?`out ${s.n_output_tokens}`:null].filter(a=>a!==null):[];r.length>0&&t.push(["reported tokens",r.join(" \xB7 ")]),t.push(["uploaded from",`${e.upload.original_trial_name} \xB7 task ${e.upload.original_task_name}`+(e.upload.original_trial_id?` \xB7 ${e.upload.original_trial_id}`:"")]);}if(e.attempt_phase&&t.push(["phase",e.attempt_phase]),e.upload?t.push(["provider","ported"]):e.sandbox_provider&&t.push(["provider",e.sandbox_provider]),e.sandbox_provider_degrade){let s=e.sandbox_provider_degrade;t.push(["provider degrade",`${s.from} \u2192 ${s.to}: ${s.reason}`]);}if(e.gpu_cost){let s=e.gpu_cost;if(s.estimate_usd!=null){let r=s.gpu_type??"unknown type",a=s.duration_sec!=null?`${Math.round(s.duration_sec)}s`:"unmeasured",o=`rate card v${s.rate_card.version}${s.rate_card.source?`, ${s.rate_card.source} ${s.rate_card.source_date??""}`.trimEnd():""}`;t.push(["gpu compute (est.)",`$${s.estimate_usd.toFixed(4)} \u2014 ${r} x${s.gpu_count}, ${a} on ${s.provider} (${o})`]);}else t.push(["gpu compute (est.)",`not priced \u2014 ${s.unpriced_reason??"no reason recorded"}`]);}if(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.n_retries>0){t.push(["auto-retries",String(e.n_retries)]);for(let s of e.retries)t.push([`attempt ${s.attempt_number}`,`${s.exception_info.exception_type} \xB7 spent ${q(s.cost_usd)}`+(s.settled_at?` \xB7 settled ${s.settled_at}`:"")]);}if(e.analysis){let s=e.analysis;t.push(["analysis",`${s.status} \xB7 ${s.model_name} \xB7 ${s.id}`]);let r=s.status==="completed"?wt(s.label):null;r!==null&&t.push([" label",r]);for(let[a,o]of Object.entries(s.checks??{}))t.push([` ${a}`,`${o.outcome} \u2014 ${o.explanation}`]);s.summary&&t.push([" summary",s.summary]),s.estimated_cost_usd!==null&&t.push([" analyzer spend",`$${s.estimated_cost_usd.toFixed(4)}`]),s.failure&&t.push([" failure",`${s.failure.phase}: ${s.failure.message}`]);}return 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]),I(t)}function el(e){let t=e.rubric.criteria.length,n=[["analysis id",e.id],["status",e.status],["model",e.model_name],["rubric",`${t} criteri${t===1?"on":"a"}`]],s=e.status==="completed"?wt(e.label):null;s!==null&&n.push(["label",s]);for(let[r,a]of Object.entries(e.checks??{})){n.push([` ${r}`,`${a.outcome} \u2014 ${a.explanation}`]);for(let o of a.evidence??[])n.push(["",`${o.where} \u2014 ${te(o.quote)}`]);}if(e.summary&&n.push(["summary",e.summary]),e.estimated_cost_usd!==null&&n.push(["spent",`$${e.estimated_cost_usd.toFixed(4)}`]),e.usage){let r=Dn(e.usage);r&&n.push(["tokens",r]);}return e.failure&&n.push(["failure",`${e.failure.phase}: ${e.failure.message}`]),n.push(["created",e.created_at]),e.finished_at&&n.push(["finished",e.finished_at]),I(n)}function jr(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]),I(t)}var Lr=["e2b","daytona","modal"];function tl(e){return Lr.filter(t=>e?.[t]!==void 0).map(t=>{let n=e[t];return n.ok?n.degrades_to?`${t} \u2192${n.degrades_to}`:`${t} ok`:`${t} NO`}).join(" \xB7 ")}function nl(e){let t=e.gpus??0;if(t<=0)return null;let n=e.gpu_types&&e.gpu_types.length>0?e.gpu_types.join("|"):"any GPU";return `${t}x ${n}`}function An(e){return e!==null?String(Math.round(e*1e3)/1e3):"-"}function Nr(e){let t=Ie(e);if(t!==null){let r=typeof e.data.model=="string"&&e.data.model!==""?e.data.model:"-",a=t.usage,o=`gateway ${r} in=${a.promptTokens} out=${a.completionTokens} cached=${a.cachedTokens} $${a.costUsd.toFixed(6)}${t.startedAt?` ${t.startedAt}`:""}`;return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${o}`.trimEnd()}let n=e.data?.update;if(n&&typeof n=="object"&&n.sessionUpdate==="usage")return null;let s=de(JSON.stringify(e.data??{}),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${s}`.trimEnd()}function K(e,t,n){if(t){e.out(JSON.stringify(n));return}let s=Nr(n);s!==null&&e.out(s);}function Ur(e){let t=e.failures?.length?` (${e.failures.length} task failure${e.failures.length===1?"":"s"})`:"";return `${e.message}${t}`}function Jr(e){let t=[["id",e.id],["status",Ln(e)]];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",Ur(e.failure)]);for(let n of e.failure.failures??[])t.push([` ${n.task_name}`,n.error]);}return I(t)}function jn(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return `${t}s`;let n=Math.floor(t/60),s=t%60;return n<60?`${n}m${String(s).padStart(2,"0")}s`:`${Math.floor(n/60)}h${String(n%60).padStart(2,"0")}m`}function sl(e,t=Date.now()){let n=e.phases[e.phases.length-1],s=[];n!==void 0&&n.total>0&&(s.push(`${n.done}/${n.total}`),n.banked!==void 0&&n.banked>0&&s.push(n.name==="copying"?`${n.banked} of ${n.total} images already banked`:`${n.banked} banked`));let r=n!==void 0?Date.parse(n.started_at):NaN;return Number.isFinite(r)&&s.push(jn(t-r)),`phase ${e.phase}${s.length>0?` ${s.join(" \xB7 ")}`:""}`}function rl(e){let t=e.phases.map(r=>{let a=r.completed_at!==void 0?Date.parse(r.completed_at):NaN,o=Date.parse(r.started_at),l=Number.isFinite(a)&&Number.isFinite(o)?jn(a-o):"unfinished";return `${r.name} ${l}`}),n=e.images,s=e.codebuild;return I([["phases",t.join(" \xB7 ")],["images",`${n.built} built, ${n.mirrored} mirrored, ${n.banked} banked`],["codebuild",`${s.copy_builds} copy build(s), ${s.billed_minutes} billed minute(s)`]])}function Ln(e){return e.receiving===true?`${e.status} (receiving)`:e.status}function al(e){let t=[];return e.task_count!==void 0&&t.push(`tasks=${e.task_count}`),e.failure&&t.push(de(Ur(e.failure),140)),`status ${Ln(e).padEnd(12)} ${t.join(" ")}`.trimEnd()}function ol(e){return `state ${e.state}`}function il(e,t){let n=[["state",e.state]];if(t){let s=t.active_version?.version??null;n.push(["active",s===e.version?`${s} (this publish)`:s?`${s} (unchanged)`:"none"]);}return I(n)}function ll(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[a,o]of Object.entries(t))s.has(a)||n.push(`${a}=${typeof o=="object"?JSON.stringify(o):String(o)}`);let r=de(n.join(" "),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${r}`.trimEnd()}function k(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 Mr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ul=/^[0-9a-f][0-9a-f-]{7,34}$/i,ar=8,Se=200,cl={job:"jobs",trial:"trials",analysis:"analyses","analyzed trial":"analyzed trials",check:"checks","task check":"task checks",session:"sessions",skill:"skills"},or=new WeakMap;function vt(e,t,n){let s=or.get(e);s===void 0&&(s=new Map,or.set(e,s));let r=s.get(t);if(r!==void 0)return r;let a=n();return s.set(t,a),a}async function St(e){let t=[];for await(let n of e)t.push(n);return t}function Nn(e){let t=At(e);return t!==void 0?{scope:t}:{}}var Fr=e=>vt(e,"jobs",()=>St(E(k(e)).list({limit:Se,...Nn(e)}))),ir=e=>vt(e,"analyses",()=>St(ke(k(e)).list({limit:Se,...Nn(e)}))),lr=e=>vt(e,"checks",()=>St(le(k(e)).list({limit:Se,...Nn(e)})));async function dl(e){let t=E(k(e)),n=(await Fr(e)).map(a=>a.id),s=[],r=0;for(let a of n){try{for await(let o of t.trials(a,{limit:Se}))s.push(o.id);}catch(o){throw o instanceof x&&o.code==="rate_limited"?new m(`trial id prefixes resolve against every trial of your ${n.length} jobs (one read per job); the API's rate limit refused the walk after ${r} \u2014 pass the full trial id (evolve job trials <job> prints them)`):o}r+=1;}return s}async function pl(e){let t=dt(Fn(e)),n=[],s;do{let r=await t.list({limit:Se,state:"all",...s!==void 0?{cursor:s}:{}});for(let a of r.items)n.push(a.id);s=r.nextCursor??void 0;}while(s!==void 0);return n}var fl={job:async e=>(await Fr(e)).map(t=>t.id),trial:dl,analysis:async e=>(await ir(e)).map(t=>t.id),"analyzed trial":async e=>(await ir(e)).map(t=>t.trial_id),check:async e=>(await lr(e)).map(t=>t.id),"task check":async e=>(await lr(e)).flatMap(t=>t.results.map(n=>n.id)),session:pl,skill:async e=>(await St(ie(k(e)).list({limit:Se}))).map(t=>t.id)},gl=(e,t)=>vt(e,`ids:${t}`,()=>fl[t](e));function ml(e){return `${/^[aeiou]/.test(e[0])?"an":"a"} ${e.join(" or ")}`}async function Un(e,t,n){if(n===void 0||Mr.test(n))return {noun:null,id:n};if(/^[0-9a-f][0-9a-f-]*$/i.test(n)&&n.length<ar)throw new m(`"${n}" is too short to name ${ml(t)} \u2014 id prefixes need at least ${ar} characters`);if(!ul.test(n))return {noun:null,id:n};let s=n.toLowerCase(),r=[];for(let l of t){let c=new Set((await gl(e,l)).filter(i=>i.startsWith(s)));for(let i of c)r.push({noun:l,id:i});}if(r.length===1)return r[0];if(r.length===0)throw new m(`no ${t.join(" or ")} id starts with "${n}"`);let a=t.map(l=>({noun:l,n:r.filter(c=>c.noun===l).length})).filter(({n:l})=>l>0).map(({noun:l,n:c})=>`${c} ${c===1?l:cl[l]}`),o=r.slice(0,5).map(l=>t.length>1?`${l.noun} ${l.id}`:l.id);throw new m(`"${n}" is ambiguous \u2014 it matches ${a.join(" and ")}: ${o.join(", ")}${r.length>5?", \u2026":""}`)}async function T(e,t,n){return (await Un(e,[t],n)).id}async function Jn(e,t,n){let s=await Un(e,["analysis","analyzed trial"],n);if(s.noun==="analysis")return {id:s.id,analysis:null};if(s.noun==="analyzed trial")return ur(e,await G(k(e)).get(s.id));if(n===void 0||!Mr.test(n))return {id:n,analysis:null};try{return {id:n,analysis:await t.get(n)}}catch(r){if(!(r instanceof x)||r.status!==400)throw r;let a;try{a=await G(k(e)).get(n);}catch(o){throw o instanceof x&&o.status===404?r:o}return ur(e,a)}}async function ur(e,t){if(t.analysis)return {id:t.analysis.id,analysis:t.analysis};throw (await E(k(e)).get(t.job_id)).is_regrade?new Error(`${t.id} is a regrade result \u2014 a regrade is never analyzed; analyses belong to its source trial`):new Error(`trial ${t.id} has no analysis yet \u2014 run: evolve analyze ${t.job_id}`)}function xn(e,t){return t.analysis!==null?Promise.resolve(t.analysis):e.get(t.id)}function D(e){return {...e.flags.limit!==void 0?{limit:e.flags.limit}:{},...e.flags.cursor!==void 0?{cursor:String(e.flags.cursor)}:{}}}function At(e){if(e.flags.scope===void 0)return;let t=String(e.flags.scope);if(!Ye.includes(t))throw new m(`--scope must be one of: ${Ye.join(", ")}; got: ${t}`+(t==="all"?" (Harbor's all adds public rows \u2014 nothing hosted is public)":""));return t}function hl(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 m("--status got an empty status list");let n=t.filter(s=>!Re.includes(s));if(n.length>0)throw new m(`--status must name analysis statuses (${Re.join(", ")}); got: ${n.join(", ")}`);return t}function Br(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 m("--status got an empty status list");let n=t.filter(s=>!Ke.includes(s));if(n.length>0)throw new m(`--status must name trial statuses (${Ke.join(", ")}); got: ${n.join(", ")}`);return t}function _l(e){return e.status==="COMPLETED"?0:e.status==="FAILED"||e.status==="CANCELLED"?1:0}function yl(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~")}async function bl(e,t,n){let s=new Set;for(let o of e.agents)for(let l of o.skills??[])yl(l)&&s.add(l);if(s.size===0)return e;let r=ie(k(t)),a=new Map;for(let o of s){let l=await r.upload(o);if(a.set(o,l.map(c=>c.ref)),t.flags.json!==true)for(let c of l)n.err(`Uploaded skill ${c.name} (${c.ref}, ${ne(c.digest)})`);}return {...e,agents:e.agents.map(o=>({...o,...o.skills!==void 0&&o.skills!==null?{skills:o.skills.flatMap(l=>a.get(l)??[l])}:{}}))}}async function cr(e,t){let n=Ji(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,a=e.flags.quiet===true,o=E(k(e)),l=await o.start(await bl(n,e,t));if(!r){if(s)t.out(JSON.stringify(l));else {for(let i of z(l))t.out(i);t.out(""),t.out(`Follow it with: evolve job show ${l.id}`);}return 0}s?t.out(JSON.stringify({kind:"job.created",job:l})):t.out(`Job ${l.id} (${kt(l.datasets)}) ${l.status} \u2014 watching\u2026`);let c=await o.watch(l.id,{onEvent:i=>{a||t.out(s?JSON.stringify({kind:"event",...i}):ll(i));}});if(s)t.out(JSON.stringify({kind:"job.final",job:c}));else {t.out("");for(let i of z(c))t.out(i);}return _l(c)}async function kl(e,t){if(M(e,t,Qs))return 0;let n=At(e),r=await E(k(e)).list({...D(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{},...n!==void 0?{scope:n}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No jobs."),0):(J(e,t,r.items,Qs,Hi,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
52
+ More: evolve job list --cursor ${r.nextCursor}`),0)}async function wl(e,t){let n=E(k(e)),s=[];for(let r of e.positionals)s.push(await n.get(await T(e,"job",r)));return e.flags.json===true?(t.out(JSON.stringify(s.length===1?s[0]:s)),0):(s.forEach((r,a)=>{a>0&&t.out("");for(let o of z(r))t.out(o);}),0)}async function vl(e,t){if(M(e,t,Zs))return 0;let n=E(k(e)),s=Br(e),r=e.flags.dataset,a=await n.trials(await T(e,"job",e.positionals[0]),{...s!==void 0?{status:s}:{},...r!==void 0?{dataset:r}:{},...D(e)});return e.flags.json===true?(t.out(JSON.stringify(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No trials."),0):(J(e,t,a.items,Zs,Vi,o=>o.id),t.tty===true&&e.flags.quiet!==true&&(t.out(`
53
+ ${a.items.length} trial(s) shown`),a.nextCursor&&t.out(`More: evolve job trials ${e.positionals[0]} --cursor ${a.nextCursor}`)),0)}async function Sl(e,t){if(M(e,t,er))return 0;let s=await E(k(e)).tasks(await T(e,"job",e.positionals[0]),D(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):(J(e,t,s.items,er,Gi,r=>r.task_name),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
54
+ More: evolve job tasks ${e.positionals[0]} --cursor ${s.nextCursor}`),0)}function Al(e){let t=[],n=[["ID","DATASETS","STATUS","MEAN REWARD","COVERAGE","SPENT"]];for(let s of e.jobs)n.push([s.id,kt(s.datasets),s.status,An(s.mean_reward),`${s.coverage.scored}/${s.coverage.total}`,q(s.cost_usd)]);if(t.push(...I(n)),e.taskMatrix.length>0){t.push("","Task matrix (disagreements first; columns in the order above):");let s=[["TASK","DIFF",...e.jobs.map((a,o)=>`JOB ${o+1}`)]],r=e.jobs.map(a=>a.id);for(let a of e.taskMatrix){let o=new Map(a.cells.map(l=>[l.job_id,l]));s.push([a.task_name,a.disagreement?"!":"",...r.map(l=>{let c=o.get(l);return c?c.mean_reward!==null?`${c.status} ${An(c.mean_reward)}`:c.status:"-"})]);}t.push(...I(s));}return t}async function xl(e,t){let n=E(k(e)),s=[];for(let a of e.positionals)s.push(await T(e,"job",a));let r=await n.compare(s);if(e.flags.json===true)t.out(JSON.stringify(r));else for(let a of Al(r))t.out(a);return 0}async function Tl(e,t){let s=await E(k(e)).cancel(await T(e,"job",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of z(s))t.out(r);return 0}async function Rl(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]);if(e.flags.yes!==true){if(t.confirm===void 0)throw new Error("deleting a job is permanent \u2014 trials, traces, analyses and stored files. Re-run with --yes to confirm.");let a=await n.get(s);if(t.err(` ${a.id} ${a.job_name||"\u2014"}`),!await t.confirm("Permanently delete this job and all associated trials?"))return t.err("Delete cancelled."),1}let r=await n.delete(s);return e.flags.json===true?t.out(JSON.stringify(r)):t.out(`Deleted job ${r.job_id}: ${r.trials_deleted} trials, ${r.analyses_deleted} analyses destroyed.`),0}async function El(e,t){let n=e.flags.dataset;if(!n)throw new m("job stop needs --dataset <name> (to stop the whole job, use: evolve job cancel <id>)");let s=E(k(e)),r=await s.get(await T(e,"job",e.positionals[0])),a=r.datasets.map(u=>u.name);if(!a.includes(n))throw new Error(`job ${r.id} does not run dataset ${n}; its datasets: ${a.join(", ")}`);let o=[];for await(let u of s.trials(r.id,{dataset:n}))o.push(u.id);if(o.length===0)return e.flags.json===true?t.out(JSON.stringify({stopped:[],stopped_analyses:[],already_terminal:[],not_found:[]})):t.out(`No trials in ${n}.`),0;let l=G(k(e)),c={stopped:[],stopped_analyses:[],already_terminal:[],not_found:[]},i=0;try{for(let u=0;u<o.length;u+=100){let d=o.slice(u,u+100),p=await l.stop(d);i+=d.length,c.stopped.push(...p.stopped),c.stopped_analyses.push(...p.stopped_analyses),c.already_terminal.push(...p.already_terminal),c.not_found.push(...p.not_found);}}catch(u){throw dr(c,n,o.length,i,e,t),u}return dr(c,n,o.length,i,e,t),0}function dr(e,t,n,s,r,a){let o=n-s;if(r.flags.json===true){a.out(JSON.stringify(o>0?{...e,partial:true,unreported:o}:e));return}for(let l of e.stopped)a.out(`stopped ${l.id} (${l.task_name}) ${l.status}`);for(let l of e.already_terminal)a.out(`already terminal ${l}`);for(let l of e.not_found)a.out(`not found ${l}`);a.out(`${e.stopped.length} stopped, ${e.already_terminal.length} already terminal, ${e.not_found.length} not found (${t})`),o>0&&a.out(`PARTIAL: ${o} 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 Il(e,t){let n=E(k(e)),s=e.flags["filter-error-type"],r=await n.resume(await T(e,"job",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 a of z(r))t.out(a);t.out(""),t.out(`Follow it with: evolve job show ${r.id}`);}return 0}async function Pl(e,t){let n=e.flags.trial,s=e.flags["failed-only"]===true;if(n!==void 0&&s)throw new m('"job retry" takes EITHER -t/--trial OR --failed-only, not both \u2014 explicit ids are already a selection');let r={};n!==void 0&&(r.trial_ids=n),s&&(r.failed_only=true);let a=await E(k(e)).retry(await T(e,"job",e.positionals[0]),r);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of z(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}function $l(e){if(e.length===0)return ["No analyzed trials."];let t=[["TRIAL","TASK","CHECKS","COST","SUMMARY"]],n=[];for(let s of e){let r=s.analysis,a;if(r.status==="failed")a=`FAILED${r.failure?` (${r.failure.phase})`:""}`,r.failure&&n.push(`analysis failed ${s.id} (${s.task_name}) \u2014 ${r.failure.phase}: ${te(r.failure.message)}`);else {let o=Object.entries(r.checks??{}).map(([c,i])=>`${c} ${i.outcome}`).join(" \xB7 ")||r.status,l=wt(r.label);a=l?`${l} \xB7 ${o}`:o;}t.push([s.id,s.task_name,a,r.estimated_cost_usd!==null?`$${r.estimated_cost_usd.toFixed(4)}`:"-",r.summary?de(te(r.summary),60):"-"]);}return [...I(t),...n]}async function Cl(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true,a=E(k(e)),o=await T(e,"job",e.positionals[0]),l={};e.flags.model!==void 0&&(l.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(l.rubric=On(String(e.flags.rubric))),e.flags.prompt!==void 0&&(l.prompt=Cn(String(e.flags.prompt))),e.flags.env!==void 0&&(l.sandbox_provider=String(e.flags.env)),e.flags.effort!==void 0&&(l.reasoning_effort=String(e.flags.effort)),e.flags["n-concurrent"]!==void 0&&(l.n_concurrent=e.flags["n-concurrent"]),e.flags.passing===true&&(l.passing=true),e.flags.failing===true&&(l.failing=true),e.flags["n-trials"]!==void 0&&(l.n_trials=e.flags["n-trials"]);let c=await a.get(o);if((c.upload?.task_links??[]).some(p=>p.n_unlinked>0))for(let p of Mn(c.upload?.task_links??null))t.err(p);else c.upload!==null&&c.upload!==void 0&&c.upload.task_links===null&&t.err(zl);let i=await a.analyze(o,l);if(!s){if(n)t.out(JSON.stringify(i));else {for(let p of z(i))t.out(p);t.out(""),t.out(`Follow it with: evolve job show ${i.id}`);}return 0}n?t.out(JSON.stringify({kind:"analysis.accepted",job:i})):r||t.out(`Job ${i.id} \u2014 analyses enqueued, watching\u2026`);let u=await a.watchAnalysis(i.id,{onStats:p=>{r||p.stats.analysis&&t.out(n?JSON.stringify({kind:"analysis.stats",analysis:p.stats.analysis}):`analyses ${vn(p.stats.analysis)}`);}}),d=[];for await(let p of a.trials(u.id))p.analysis&&d.push(p);if(n)t.out(JSON.stringify({kind:"analysis.final",job:u,trials:d}));else {t.out("");for(let p of $l(d))t.out(p);u.stats.analysis&&(t.out(""),t.out(`analyses ${vn(u.stats.analysis)}`)),t.out("Details: evolve trial show <trial-id>");}return (u.stats.analysis?.n_failed??0)>0?1:0}function Ol(e){return e.replace(/_/g," ").split(" ").map(t=>t&&t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function qr(e){let t=[],n=e.results.filter(r=>r.status==="failed");if(e.results.length===1){let r=e.results[0];if(r.status==="failed"&&r.failure)return t.push(`\u274C ${r.task_name}: ${r.failure.phase}: ${r.failure.message}`),t;t.push(`Task Quality Checks: ${r.task_name}`);let a=r.status==="completed"?Sn(r):null;a!==null&&t.push(`Label: ${a}`);let o=[["CHECK","OUTCOME","EXPLANATION"]];for(let[l,c]of Object.entries(r.checks??{})){o.push([Ol(l),c.outcome,te(c.explanation)]);for(let i of c.evidence??[])o.push(["","",`${i.where} \u2014 ${te(i.quote)}`]);}return o.length===1&&o.push(["-",r.status,"-"]),t.push(...I(o)),r.cost_usd!==null&&t.push(`Agent cost: $${r.cost_usd.toFixed(4)}`),t.push(`Task check id: ${r.id}`),t}t.push("Task Quality Checks");let s=[["TASK","LABEL","PASS","FAIL","N/A","UNKNOWN","COST ($)","TASK CHECK ID"]];for(let r of e.results){if(r.status==="failed"){s.push([r.task_name,"-","-","-","-","-","-",r.id]);continue}if(r.status!=="completed"){s.push([r.task_name,r.status,"","","","","-",r.id]);continue}let a=Dr(r.checks);s.push([r.task_name,Sn(r)??"-",String(a.pass),String(a.fail),String(a.not_applicable),String(a.unknown),r.cost_usd!==null?r.cost_usd.toFixed(4):"-",r.id]);}t.push(...I(s));for(let r of n)r.failure&&t.push(`\u274C ${r.task_name}: ${r.failure.phase}: ${r.failure.message.split(`
55
+ `)[0]}`);return e.cost_usd!==null&&t.push(`Total agent cost: $${e.cost_usd.toFixed(4)}`),t}function zr(e){let t={};for(let n of e.results)t[n.status]=(t[n.status]??0)+1;return Object.entries(t).map(([n,s])=>`${s} ${n}`).join(" \xB7 ")}function Hr(e){let t=e.rubric.criteria.length,n=[["check id",e.id],["status",e.status],["source",e.source.type==="dataset"?`dataset ${e.source.dataset} (package sha256 ${e.source.sha256.slice(0,12)}\u2026)`:`archive ${e.source.bytes} bytes sha256 ${e.source.sha256.slice(0,12)}\u2026`],["tasks",`${e.results.length} (${zr(e)})`],["model",`${e.model_name} at effort ${e.reasoning_effort}`],["rubric",`${t} criteri${t===1?"on":"a"}`],["provider",e.sandbox_provider]];return e.prompt!==null&&n.push(["prompt","custom (Harbor's -p text)"]),e.n_concurrent!==null&&n.push(["n_concurrent",String(e.n_concurrent)]),e.include_task_names.length>0&&n.push(["include",e.include_task_names.join(", ")]),e.exclude_task_names.length>0&&n.push(["exclude",e.exclude_task_names.join(", ")]),e.n_tasks!==null&&n.push(["n_tasks",String(e.n_tasks)]),n.push(["created",e.created_at]),e.finished_at&&n.push(["finished",e.finished_at]),[...I(n),"",...qr(e)]}async function Dl(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true,a=le(k(e)),o={};e.flags.model!==void 0&&(o.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(o.rubric=On(String(e.flags.rubric))),e.flags.prompt!==void 0&&(o.prompt=Cn(String(e.flags.prompt))),e.flags.env!==void 0&&(o.sandbox_provider=String(e.flags.env)),e.flags.effort!==void 0&&(o.reasoning_effort=String(e.flags.effort)),e.flags["n-concurrent"]!==void 0&&(o.n_concurrent=e.flags["n-concurrent"]),e.flags["include-task-name"]!==void 0&&(o.include_task_names=e.flags["include-task-name"]),e.flags["exclude-task-name"]!==void 0&&(o.exclude_task_names=e.flags["exclude-task-name"]),e.flags["n-tasks"]!==void 0&&(o.n_tasks=e.flags["n-tasks"]);let l=e.positionals[0],c=e.flags.dataset;if(l===void 0&&c===void 0)throw new m("check takes a <path> (a task directory, or a directory of them) or -d/--dataset <name[@version]>");if(l!==void 0&&c!==void 0)throw new m("check takes EITHER a <path> OR -d/--dataset, not both");let i=c!==void 0?{dataset:c}:{directory:l};!n&&!r&&t.out("\u{1F50E} Checking task quality...");let u=await a.create({source:i,...o});if(!s){if(n)t.out(JSON.stringify(u));else {for(let p of Hr(u))t.out(p);t.out(""),t.out(`Follow it with: evolve check show ${u.id}`);}return 0}n?t.out(JSON.stringify({kind:"check.accepted",check:u})):r||t.out(`Check ${u.id} \u2014 ${u.results.length} task${u.results.length===1?"":"s"} queued, watching\u2026`);let d=await a.watch(u.id,{onProgress:p=>{r||t.out(n?JSON.stringify({kind:"check.progress",check:p}):`tasks ${zr(p)}`);}});if(n)t.out(JSON.stringify({kind:"check.final",check:d}));else {t.out("");for(let p of qr(d))t.out(p);t.out(""),t.out(`Report: evolve check show ${d.id}`);}return d.results.some(p=>p.status==="failed")?1:0}function jl(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 m("--status got an empty status list");let n=t.filter(s=>!Ee.includes(s));if(n.length>0)throw new m(`--status must name check statuses (${Ee.join(", ")}); got: ${n.join(", ")}`);return t}var pr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:e=>e.status},{key:"tasks",header:"TASKS",cell:e=>String(e.results.length)},{key:"model",header:"MODEL",cell:e=>e.model_name},{key:"spent",header:"SPENT",cell:e=>e.cost_usd!==null?`$${e.cost_usd.toFixed(4)}`:"-"},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],Ll=["id","status","tasks","model","spent","created"];async function Nl(e,t){if(M(e,t,pr))return 0;let n=At(e),s=jl(e),r=await le(k(e)).list({...D(e),...n!==void 0?{scope:n}:{},...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No checks."),0):(J(e,t,r.items,pr,Ll,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
56
+ More: evolve check list --cursor ${r.nextCursor}`),0)}async function Ul(e,t){let n=await le(k(e)).get(await T(e,"check",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Hr(n))t.out(s);return n.results.some(s=>s.status==="failed")?1:0}async function Jl(e,t){let n=e.flags.json===true,s=e.flags.since,r=await le(k(e)).transcript(await T(e,"task check",e.positionals[0]),s!==void 0?{since:s}:void 0);for(let a of r.events)K(t,n,a);for(let a of r.gateway_calls)K(t,n,a);return !n&&r.events.length===0&&t.out("No trace events."),0}var fr=["task-check","trace-parsed",...Xe];async function gr(e,t){try{return await e.task(t)}catch(n){throw n instanceof x&&n.status===404?new Error(`'${t}' is not a task check \u2014 --stream reads one task check's artifacts (results[].id on \`evolve check show\`); to save the whole check by its check id, drop --stream`):n}}async function Ml(e,t){let n=le(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"check download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&e.flags.since!==void 0)throw new m("--since pages the parsed events; it applies only to --stream trace-parsed");let a=(await Un(e,r!==void 0?["task check"]:["check","task check"],e.positionals[0])).id,o=a;if(r!==void 0){if(!fr.includes(r))throw new m(`--stream must be one of: ${fr.join(", ")}`);if(r==="task-check"){let i=await gr(n,o);return t.out(s?JSON.stringify({task_check:i}):JSON.stringify(i,null,2)),0}if(r==="trace-parsed"){let i=e.flags.since,u=await n.transcript(o,i!==void 0?{since:i}:void 0);for(let d of u.events)K(t,s,d);for(let d of u.gateway_calls)K(t,s,d);return !s&&u.events.length===0&&t.out("No trace events."),0}if(await gr(n,o),r==="agent-home"){let i=await n.artifact(o,r);if(i===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this task check.`),0;if(s)t.out(JSON.stringify({files:i}));else for(let[u,d]of Object.entries(i))t.out(`===== ${u} (${Buffer.byteLength(d,"utf8")} bytes) =====`),t.out(d);return 0}let c=await n.artifact(o,r);return c===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this task check.`),0):(t.out(s?JSON.stringify({log:c}):c),0)}return await Vr(e,t,{fetch:c=>n.download(a,{to:c}),outputDir:e.flags["output-dir"]??"checks",scratchPrefix:"evolve-check-download-",enrich:async c=>{let{readdir:i}=await import('fs/promises'),{join:u}=await import('path'),d=await xt(e),p=fs$1.existsSync(u(c,"check_report.json")),f=p?(await i(c,{withFileTypes:true})).filter(v=>v.isDirectory()).map(v=>u(c,v.name)):[c],g=new Map;for(let v of f){let b=await Fl(v);b!==null&&g.set(v,b);}let h=p?a:g.get(c)?.checkId;if(h===void 0)return [];let y=await n.get(h),_=[];p&&(await Tn(u(c,"evolve.json"),Ht(y,d)),_.push("evolve.json"));for(let[v,b]of g){let S=y.results.find(A=>A.id===b.taskCheckId);S!==void 0&&(await Tn(u(v,"evolve.json"),zt(S,y,d)),_.push(p?`${v.slice(c.length+1)}/evolve.json`:"evolve.json"));}return _}})}async function Fl(e){let{readFile:t}=await import('fs/promises'),{join:n}=await import('path');try{let s=JSON.parse(await t(n(e,"result.json"),"utf8")),r=s.x_evolve?.taskCheckId,a=s.x_evolve?.checkId;return typeof r=="string"&&typeof a=="string"?{taskCheckId:r,checkId:a}:null}catch{return null}}async function Tn(e,t){let{writeFile:n}=await import('fs/promises');await n(e,JSON.stringify(t,null,2)+`
57
+ `);}async function Vr(e,t,n){let{mkdtemp:s,rm:r}=await import('fs/promises'),{tmpdir:a}=await import('os'),{join:o}=await import('path'),{extractTarGz:l,tarGzTopLevelName:c}=await Promise.resolve().then(()=>(nt(),tt)),i=await s(o(a(),n.scratchPrefix));try{let u=await n.fetch(i),d=await c(u),p=o(n.outputDir,d);if(fs$1.existsSync(p)){if(e.flags.overwrite!==!0)throw new Error(`${p} already exists (pass --overwrite to replace it)`);await r(p,{recursive:!0,force:!0});}let f;try{f=await l(u,n.outputDir,d);}catch(g){throw await r(p,{recursive:!0,force:!0}).catch(()=>{}),g}return f.push(...await n.enrich(p)),e.flags.json===!0?t.out(JSON.stringify({path:p,files:f.length})):t.out(`Saved ${p} (${f.length} files)`),0}finally{await r(i,{recursive:true,force:true}).catch(()=>{});}}async function Bl(e,t){let n=E(k(e)),s={},r=Br(e);r!==void 0&&(s.statuses=r),e.flags.task!==void 0&&(s.task_name=String(e.flags.task));let a=await n.regrade(await T(e,"job",e.positionals[0]),s);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of z(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}async function ql(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]),{join:r}=await import('path'),a=e.flags["output-dir"]??process.cwd(),o=`job-${s}`,l=r(a,o);if(fs$1.existsSync(l)&&e.flags.overwrite!==true)throw new Error(`${l} already exists (pass --overwrite to replace it)`);let{mkdtemp:c,rm:i}=await import('fs/promises'),{tmpdir:u}=await import('os'),{extractTarGz:d}=await Promise.resolve().then(()=>(nt(),tt)),p=await c(r(u(),"evolve-job-download-"));try{let f=await n.download(s,{to:p});e.flags.overwrite===!0&&await i(l,{recursive:!0,force:!0});let g;try{g=await d(f,a,o);}catch(A){throw await i(l,{recursive:!0,force:!0}).catch(()=>{}),A}let{readdir:h,readFile:y,writeFile:_}=await import('fs/promises'),v=await n.get(s),b=await xt(e),S=new Map;for await(let A of n.trials(s))S.set(A.id,A);await _(r(l,"evolve.json"),JSON.stringify(Ft(v,b),null,2)+`
58
+ `),g.push("evolve.json");for(let A of await h(l,{withFileTypes:!0})){if(!A.isDirectory())continue;let N;try{N=JSON.parse(await y(r(l,A.name,"result.json"),"utf8")).x_evolve?.trialId;}catch{continue}let F=N!==void 0?S.get(N):void 0;F&&(await _(r(l,A.name,"evolve.json"),JSON.stringify(Ze(F,v,b),null,2)+`
59
+ `),g.push(`${A.name}/evolve.json`));}return e.flags.json===!0?t.out(JSON.stringify({path:l,files:g.length})):t.out(`Saved ${l} (${g.length} files)`),0}finally{await i(p,{recursive:true,force:true}).catch(()=>{});}}function qe(e){return e.receiving?`${e.status} (receiving)`:e.status}function Gr(e){let t=[["id",e.id],["status",qe(e)]];return e.source!==null&&t.push(["source",e.source.type==="archive"?`archive (${ne(`sha256:${e.source.sha256}`)})`:e.source.type==="archive_url"?`url ${e.source.url}`:`hub job ${e.source.job_id}`]),e.dataset!==null&&t.push(["dataset",e.dataset]),e.job_id!==null&&t.push(["job",e.job_id]),e.n_trials_uploaded!==null&&t.push(["trials",String(e.n_trials_uploaded)]),e.n_trials_skipped!==null&&t.push(["skipped",String(e.n_trials_skipped)]),e.progress!==null&&t.push(["phase",e.progress.phase]),e.failure!==null&&t.push(["failure",`${e.failure.code}: ${e.failure.message}`]),[...I(t),...Kr(e.skipped_trials),...Mn(e.task_links)]}var mr={hash_mismatch:"hash mismatch",task_not_in_dataset:"task not in the dataset",no_dataset_named:"no dataset named",dataset_ambiguous:"same task in two datasets",no_hash_match:"no task with this hash",no_task_digest:"no task digest in the archive"},zl="uploaded before task linking existed: whether its trials carry the task folder is unknown here; each analysis row records it (task_absent_reason)";function Hl(e){return e==="dataset_flag"?"by task name, -d":"task hashes equal"}function Mn(e){if(e===null||e.length===0)return [];let t=e.reduce((d,p)=>d+p.n_trials,0),n=e.reduce((d,p)=>d+p.n_linked,0),s=(d,p)=>`${d} ${p}${d===1?"":"s"}`,r=d=>Object.entries(d.link_reasons).map(([p,f])=>`${mr[p]??p}${Object.keys(d.link_reasons).length>1?` ${f}`:""}`).join(", ")+(d.candidates.length>0?` [${d.candidates.join(", ")}]`:""),a=e.filter(d=>d.n_unlinked>0);if(n===0){let d=Array.from(new Set(a.flatMap(f=>Object.keys(f.link_reasons)))).map(f=>mr[f]??f).join(", "),p=Array.from(new Set(a.flatMap(f=>f.candidates)));return [`no dataset matched (${d}${p.length>0?`: ${p.join(", ")}`:""}); analyses of this job will run without the task folder \u2014 link explicitly with -d`]}let o=new Map,l="";for(let d of e)if(d.n_linked!==0){l=Hl(d.linked_by);for(let p of d.datasets)o.set(p,(o.get(p)??0)+d.n_linked);}let c=Array.from(o.entries()),i=c.length===1?c[0][0]:c.map(([d,p])=>`${d} (${p})`).join(", "),u=[`linked ${n} of ${s(t,"trial")} to ${i} (${l})`];return a.length>0&&u.push(`not linked: ${a.map(d=>`${d.task_name} (${s(d.n_unlinked,"trial")}, ${r(d)})`).join(", ")} \u2014 analyses of those trials run without the task folder; link explicitly: evolve upload <dir> -d <name[@version]>`),u}function Kr(e){return e===null||e.length===0?[]:e.map(t=>` skipped ${t.trial}: ${t.code}: ${t.message}`)}function Vl(e){let t=e.failure!==null?de(`${e.failure.code}: ${e.failure.message}`,140):"";return `status ${qe(e).padEnd(20)} ${t}`.trimEnd()}function Gl(e,t=Date.now()){let n=jn(t-Date.parse(e.started_at));return `phase ${e.phase.padEnd(20)} ${n} elapsed`}async function Wr(e,t,n,s){let r=E(k(e)),a=e.flags.json===true;a||n.out(s==="accepted"?`Upload accepted: import ${t.id} ${qe(t)} \u2014 watching\u2026`:`Import ${t.id} ${qe(t)} \u2014 watching\u2026`);let o=await r.watchImport(t.id,{onStatus:u=>{a||n.out(Vl(u));},onProgress:u=>{a||n.out(Gl(u));}});if(o.status==="FAILED"||o.job_id===null){let u=o.failure??{code:"import_failed",message:"the import settled without a job and without a recorded failure"};return a&&n.out(JSON.stringify({error:u})),n.err(`Error: ${u.message}`),1}let l=await r.get(o.job_id);if((o.n_trials_skipped??0)>0){n.err(`Skipped ${o.n_trials_skipped} trial(s) \u2014 see: evolve job import ${o.id}`);for(let u of Kr(o.skipped_trials))n.err(u);}let c=Mn(l.upload?.task_links??null),i=(l.upload?.task_links??[]).some(u=>u.n_unlinked>0);if(a){if(i)for(let u of c)n.err(u);return n.out(JSON.stringify(l)),0}n.out("");for(let u of z(l,{taskLinksRow:false}))n.out(u);if(c.length>0){n.out("");for(let u of c)n.out(u);}return n.out(""),n.out(`Analyze it with: evolve analyze ${l.id}`),0}async function Kl(e,t){let n=E(k(e)),s=e.flags.json===true,r=e.flags.dataset,a=e.flags.from,o=e.positionals[0];if(a!==void 0&&o!==void 0)throw new m('"upload" takes EXACTLY ONE source: <job_dir>, or --from <url>');if(a===void 0&&o===void 0)throw new m('"upload" needs a source: <job_dir> (or its .tar.gz), or --from <url>');if(a!==void 0&&!a.trim().startsWith("https://"))throw new m(`"--from" takes a public https url of a job archive (got "${a}")`);let l=-1,c=await n.upload(a!==void 0?{archive_url:a.trim()}:o,{...r!==void 0?{dataset:r}:{},onUploadProgress:(i,u)=>{if(s)return;let d=u>0?Math.floor(i/u*10):10;d!==l&&(l=d,t.out(`upload ${i}/${u} (${Math.min(100,d*10)}%)`));},onRegistered:i=>{s||t.out(`Registered import ${i} \u2014 re-attach anytime with: evolve job import ${i} --watch`);}});if(e.flags["no-wait"]===true){if(s)return t.out(JSON.stringify(c)),0;for(let i of Gr(c))t.out(i);return t.out(""),t.out(`Follow it with: evolve job import ${c.id} --watch`),0}return Wr(e,c,t,"accepted")}var hr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:qe},{key:"job",header:"JOB",cell:e=>e.job_id??"-"},{key:"trials",header:"TRIALS",cell:e=>e.n_trials_uploaded===null?"-":String(e.n_trials_uploaded)},{key:"skipped",header:"SKIPPED",cell:e=>e.n_trials_skipped===null?"-":String(e.n_trials_skipped)},{key:"dataset",header:"DATASET",cell:e=>e.dataset??"-"},{key:"created",header:"CREATED",cell:e=>e.created_at??""}],Wl=["id","status","job","trials","skipped","dataset","created"];async function Yl(e,t){if(M(e,t,hr))return 0;let n=E(k(e)),s=e.flags.status;if(s!==void 0&&!["QUEUED","RUNNING","COMPLETED","FAILED"].includes(s))throw new m(`"--status" must be one of QUEUED, RUNNING, COMPLETED, FAILED (got "${s}")`);let r=await n.listImports({...D(e),...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No job imports."),0):(J(e,t,r.items,hr,Wl,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
60
+ More: evolve job imports --cursor ${r.nextCursor}`),0)}async function Xl(e,t){let s=await E(k(e)).getImport(e.positionals[0]);if(e.flags.watch===true)return Wr(e,s,t,"attached");if(e.flags.json===true)return t.out(JSON.stringify(s)),0;for(let r of Gr(s))t.out(r);return 0}async function Ql(e,t){let s=await G(k(e)).get(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of Zi(s))t.out(r);return 0}var _r=Lt;async function Zl(e,t){let n=G(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"trial download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&(e.flags.cursor!==void 0||e.flags.limit!==void 0))throw new m("--cursor/--limit page the parsed events; they apply only to --stream trace-parsed");let a=await T(e,"trial",e.positionals[0]);if(r!==void 0){if(!_r.includes(r))throw new m(`--stream must be one of: ${_r.join(", ")}`);if(r==="trace-parsed"){let _=0;for await(let v of n.traceEvents(a,D(e)))K(t,s,v),_+=1;return !s&&_===0&&t.out("No trace events."),0}if(r==="agent-home"){let _=await n.artifact(a,r);if(_===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this trial.`),0;if(s)t.out(JSON.stringify({files:_}));else for(let[v,b]of Object.entries(_))t.out(`===== ${v} (${Buffer.byteLength(b,"utf8")} bytes) =====`),t.out(b);return 0}let y=await n.artifact(a,r);return y===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this trial.`),0):(t.out(s?JSON.stringify({log:y}):y),0)}let{mkdir:o,writeFile:l}=await import('fs/promises'),{join:c,dirname:i}=await import('path'),u=c(e.flags["output-dir"]??"trials",a);if(fs$1.existsSync(u)&&e.flags.overwrite!==true)throw new Error(`${u} already exists (pass --overwrite to replace it)`);let d=await n.get(a),p=null;try{p=await E(k(e)).get(d.job_id);}catch{p=null;}let f=[];for await(let y of n.traceEvents(a))f.push(y);let g=Bt({trial:d,job:p,events:f,atif:await n.artifact(a,"trace-atif"),verifierLog:await n.artifact(a,"verifier"),stdout:await n.artifact(a,"trace-stdout"),stderr:await n.artifact(a,"trace-stderr"),home:await n.artifact(a,"agent-home"),userId:await xt(e)});await o(u,{recursive:true});let h=[];for(let y of Object.keys(g).sort()){let _=c(u,...y.split("/"));await o(i(_),{recursive:true}),await l(_,g[y]),h.push(y),s||t.out(y);}return s?t.out(JSON.stringify({path:u,saved:h})):t.out(`Saved ${u}`),0}async function xt(e){try{return (await an(k(e)).status()).user_id}catch{return null}}async function eu(e,t){let n=G(k(e)),s=e.flags.json===true,r=D(e);e.flags.type!==void 0&&(r.type=String(e.flags.type)),e.flags.grep!==void 0&&(r.grep=String(e.flags.grep)),e.flags.tail!==void 0&&(r.tail=e.flags.tail);let a=0;for await(let o of n.traceEvents(await T(e,"trial",e.positionals[0]),r))K(t,s,o),a+=1;return !s&&a===0&&t.out("No trace events."),0}async function tu(e,t){let n=E(k(e)),s=await T(e,"job",e.positionals[0]),r=D(e);e.flags.type!==void 0&&(r.type=String(e.flags.type));let a=await n.grep(s,e.positionals[1],r);if(e.flags.json===true)return t.out(JSON.stringify(a)),0;if(a.items.length===0)return t.out("No matches."),0;for(let o of a.items){let l=o.match_count===1?"match":"matches";t.out(`${o.trial_id} ${o.task_name??"-"} ${o.match_count} ${l}`);for(let c of o.events){let i=Nr(c);i!==null&&t.out(` ${i}`);}}return a.hasMore&&a.nextCursor&&(t.out(""),t.out(`More trials match \u2014 resume with --cursor ${a.nextCursor}`)),0}async function nu(e,t){let n=await G(k(e)).retry(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of z(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function su(e,t){let n=await G(k(e)).regrade(await T(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of z(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function ru(e,t){let n=G(k(e)),s=[];for(let a of e.positionals)s.push(await T(e,"trial",a));let r=await n.stop(s);if(e.flags.json===true)return t.out(JSON.stringify(r)),0;for(let a of r.stopped)t.out(`stopped ${a.id} (${a.task_name}) ${a.status}`);for(let a of r.stopped_analyses)t.out(`stopped analysis ${a.id} ${a.status}`);for(let a of r.already_terminal)t.out(`already terminal ${a}`);for(let a of r.not_found)t.out(`not found ${a}`);return 0}function au(e){if(typeof e.estimated_cost_usd=="number")return `$${e.estimated_cost_usd.toFixed(4)}`;let t=e.usage?.spent_usd;return typeof t=="number"&&e.usage?.provisional?`at least $${t.toFixed(4)}`:"-"}var yr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:e=>e.status},{key:"task",header:"TASK",cell:e=>e.task_name},{key:"job",header:"JOB",cell:e=>e.job_id},{key:"trial",header:"TRIAL",cell:e=>e.trial_id},{key:"model",header:"MODEL",cell:e=>e.model_name},{key:"attempts",header:"ATTEMPTS",cell:e=>String(e.attempts??1)},{key:"spent",header:"SPENT",cell:au},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],ou=["id","status","task","model","spent","created"];async function iu(e,t){if(M(e,t,yr))return 0;let n=At(e),s=hl(e),r=e.flags.job!==void 0?await T(e,"job",String(e.flags.job)):void 0,o=await ke(k(e)).list({...D(e),...n!==void 0?{scope:n}:{},...r!==void 0?{job:r}:{},...s!==void 0?{status:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(o)),0):o.items.length===0?(e.flags.quiet!==true&&t.out("No analyses."),0):(J(e,t,o.items,yr,ou,l=>l.id),o.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
61
+ More: evolve analysis list --cursor ${o.nextCursor}`),0)}async function lu(e,t){let n=ke(k(e)),s=await xn(n,await Jn(e,n,e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of el(s))t.out(r);return 0}async function uu(e,t){let n=ke(k(e)),s=e.flags.json===true,r=e.flags.since,a=await n.transcript((await Jn(e,n,e.positionals[0])).id,r!==void 0?{since:r}:void 0);for(let o of a.events)K(t,s,o);for(let o of a.gateway_calls)K(t,s,o);return !s&&a.events.length===0&&t.out("No trace events."),0}var br=["analysis","trace-parsed",...Xe];async function cu(e,t){let n=ke(k(e)),s=e.flags.json===true,r=e.flags.stream;if(r!==void 0&&(e.flags["output-dir"]!==void 0||e.flags.overwrite===true))throw new m('"analysis download" takes EITHER --stream OR -o/--overwrite, not both');if((r===void 0||r!=="trace-parsed")&&e.flags.since!==void 0)throw new m("--since pages the parsed events; it applies only to --stream trace-parsed");let a=await Jn(e,n,e.positionals[0]),o=a.id;if(r!==void 0){if(!br.includes(r))throw new m(`--stream must be one of: ${br.join(", ")}`);if(r==="analysis"){let c=await xn(n,a);return t.out(s?JSON.stringify({analysis:c}):JSON.stringify(c,null,2)),0}if(r==="trace-parsed"){let c=e.flags.since,i=await n.transcript(o,c!==void 0?{since:c}:void 0);for(let u of i.events)K(t,s,u);for(let u of i.gateway_calls)K(t,s,u);return !s&&i.events.length===0&&t.out("No trace events."),0}if(r==="agent-home"){let c=await n.artifact(o,r);if(c===null)return t.out(s?JSON.stringify({files:null}):`No ${r} content was stored for this analysis.`),0;if(s)t.out(JSON.stringify({files:c}));else for(let[i,u]of Object.entries(c))t.out(`===== ${i} (${Buffer.byteLength(u,"utf8")} bytes) =====`),t.out(u);return 0}let l=await n.artifact(o,r);return l===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this analysis.`),0):(t.out(s?JSON.stringify({log:l}):l),0)}return Vr(e,t,{fetch:l=>n.download(o,{to:l}),outputDir:e.flags["output-dir"]??"analyses",scratchPrefix:"evolve-analysis-download-",enrich:async l=>{let{join:c}=await import('path'),i=await xn(n,a);return await Tn(c(l,"evolve.json"),qt(i,await xt(e))),["evolve.json"]}})}function du(e){switch(e.kind){case "git":{let t=e.ref===e.commit?"":` @ ${e.ref}`;return [`source: ${e.git_url??"?"}${t} (commit ${e.commit.slice(0,12)})`,...e.path?[` subfolder: ${e.path}`]:[]]}case "archive":return [`source: uploaded archive (${ne(e.digest)})`];case "archive_url":return [`source: ${e.archive_url} (${ne(e.digest)})`];case "hub_package":return [`source: hub:${e.hub_package} (${ne(e.digest)})`]}}function pu(e){return e.kind==="git"?e.commit.slice(0,12):ne(e.digest)}function Yr(e){let t=I([["name",e.name],["title",e.title??"-"],["description",e.description??"-"],["active version",e.active_version?.version??"-"]]),n=e.selected_version?.source??e.active_version?.source??null;if(n)t.push(...du(n));else if(e.upstream){let r=e.upstream,a=r.ref===r.current_commit?"":` @ ${r.ref}`;t.push(`source: ${r.git_url??"?"}${a} (commit ${r.current_commit.slice(0,12)})`),r.path&&t.push(` subfolder: ${r.path}`);}let s=e.active_version?.manifest;if(s&&(t.push(`manifest: ${s.name}${s.version?`@${s.version}`:""}`+(s.task_count!==null?` (${s.task_count} tasks pinned)`:"")),s.authors.length>0&&t.push(` authors: ${s.authors.map(r=>r.email?`${r.name} <${r.email}>`:r.name).join(", ")}`),s.keywords.length>0&&t.push(` keywords: ${s.keywords.join(", ")}`)),e.versions&&e.versions.length>0){t.push("");let r=e.versions.some(l=>l.source!=null),a=e.versions.some(l=>l.n_failed_tasks>0),o=[["VERSION","STATE","TASKS",...a?["FAILED"]:[],"CREATED",...r?["SOURCE"]:[]]];for(let l of e.versions)o.push([l.version,l.state,String(l.task_count),...a?[l.n_failed_tasks>0?String(l.n_failed_tasks):"-"]:[],l.created_at??"-",...r?[l.source?pu(l.source):"-"]:[]]);t.push(...I(o));}if(e.tasks&&e.tasks.items.length>0){t.push("",`Tasks (version ${e.selected_version?.version??"?"}):`);let r=e.tasks.items.some(c=>(c.gpus??0)>0),a=e.tasks.items.some(c=>(c.notes??[]).length>0),o=[["TASK","AGENT TIMEOUT","VERIFIER TIMEOUT",...r?["GPU"]:[],"PROVIDERS",...a?["NOTES"]:[]]];for(let c of e.tasks.items)o.push([c.task_name,`${c.agent_timeout_sec}s`,`${c.verifier_timeout_sec}s`,...r?[nl(c)??"-"]:[],tl(c.providers),...a?[(c.notes??[]).map(i=>i.code).join(", ")||"-"]:[]]);if(t.push(...I(o)),a){let c=new Map;for(let i of e.tasks.items)for(let u of i.notes??[]){let d=c.get(u.message)??{code:u.code,tasks:[]};d.tasks.push(i.task_name),c.set(u.message,d);}t.push("","Task notes:");for(let[i,u]of c)t.push(` ${u.code} (${u.tasks.length} task${u.tasks.length===1?"":"s"}): ${i}`);}e.tasks.nextCursor&&t.push(`More tasks: evolve dataset show ${e.name} --cursor ${e.tasks.nextCursor}`);let l=new Map;for(let c of e.tasks.items)for(let i of Lr){let u=c.providers?.[i];if(u){if(!u.ok)l.has(`${i}:${u.reason}`)||l.set(`${i}:${u.reason}`,`${i}: ${u.reason}`);else if(u.degrades_to&&u.reason){let d=`${i}:degrade:${u.reason}`;l.has(d)||l.set(d,`${i}: runs on ${u.degrades_to} \u2014 ${u.reason}`);}}}if(l.size>0){t.push("","Provider limitations:");for(let c of l.values())t.push(` ${c}`);}}return t.push(...fu(e)),t}function fu(e){let t=e.failed_tasks??[],n=e.selected_version??e.active_version??null,s=n?.n_failed_tasks??t.length;if(t.length===0&&s===0)return [];let r=["",`Failed tasks (version ${n?.version??"?"}) \u2014 not runnable in this version:`],a=[];for(let o of t)a.push([` ${o.task_name}`,`${o.failure.code} (${o.failure.step}): ${o.failure.message}`]);return r.push(...I(a)),s>t.length&&r.push(` \u2026 ${s-t.length} more (${s} failed in total)`),r.push(" Fix: re-publish a new version \u2014 versions are immutable."),r}function Xr(e){let t=[];for(let n of e){if(!n.upstream?.moved)continue;let s=n.active_version?`@${n.active_version.version}`:"",r=n.upstream.latest_commit??n.upstream.ref,a=n.upstream.git_url??"<url>",o=n.upstream.path?` --path ${n.upstream.path}`:"";t.push(`${n.name}${s} \xB7 upstream ${n.upstream.ref} moved \u2014 run: evolve dataset publish --name ${n.name} --version <new-version> --git ${a} --ref ${r}${o}`);}return t}async function gu(e,t){if(M(e,t,tr))return 0;let s=await Q(k(e)).list({...D(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(J(e,t,s.items,tr,Wi,r=>r.name),e.flags.quiet!==true)for(let r of Xr(s.items))t.out(r);return 0}async function mu(e,t){let s=await Q(k(e)).get(e.positionals[0],D(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of Yr(s))t.out(r);for(let r of Xr([s]))t.out(r);}return 0}function Rn(e){let t=[`Pre-flight (importer ${e.importer_version}): ${e.tasks_total} task${e.tasks_total===1?"":"s"} \u2014 ${e.tasks_ok} ok, ${e.tasks_refused} refused`];e.manifest!==null&&e.manifest.ok===false&&t.push(` dataset.toml REFUSED: ${e.manifest.reason}`);for(let n of e.tasks){if(!n.ok){t.push(` ${n.name} REFUSED: ${n.reason}`);continue}let s=Object.entries(n.providers??{}).filter(([,r])=>r.ok!==true||"degrades_to"in r).map(([r,a])=>a.ok?`${r}: runs via ${a.degrades_to}`:`${r}: ${a.reason}`);s.length>0&&t.push(` ${n.name}: ${s.join(" \xB7 ")}`);for(let r of n.notes??[])t.push(` ${n.name} NOTE ${r.code}: ${r.message}`);}return t.push(`Checked from task.toml alone; the import also checks: ${e.deferred.map(n=>n.name).join(", ")}.`),t}async function hu(e,t){let s=await Q(k(e)).preflight({source:{directory:e.positionals[0]}});if(e.flags.json===true)t.out(JSON.stringify(s));else for(let a of Rn(s))t.out(a);let r=s.manifest!==null&&s.manifest.ok===false;return s.tasks_refused>0||r?1:0}async function _u(e,t){let n=e.flags.json===true,s=Q(k(e)),r=Mi(e);if(r.source.directory!==void 0&&e.flags["skip-preflight"]!==true){let u=null;try{u=await s.preflight({source:{directory:r.source.directory}});}catch(d){if(d instanceof x&&d.status===404)t.err("Pre-flight unavailable on this server \u2014 publishing without it.");else throw d}if(u!==null){let d=u.manifest!==null&&u.manifest.ok===false;if(u.tasks_refused>0||d){if(n)t.out(JSON.stringify({kind:"preflight.refused",preflight:u}));else {for(let p of Rn(u))t.out(p);t.out(""),t.out("Nothing was uploaded. Fix the refused tasks, or pass --skip-preflight to publish anyway (a refused task then lands FAILED at import).");}return 1}if(n)e.flags.watch===true&&t.out(JSON.stringify({kind:"preflight.ok",preflight:u}));else for(let p of Rn(u))t.out(p);}}let a=u=>{if(n){e.flags.watch===true&&t.out(JSON.stringify({kind:"import.registered",import_id:u}));return}t.out(`Registered import ${u} \u2014 re-attach anytime with: evolve dataset watch ${u}`);},o=Date.now(),l=-1,c=(u,d)=>{let p=d>0?Math.floor(u/d*10):10;if(!(p<=l)){if(l=p,n){t.out(JSON.stringify({kind:"upload.progress",sent_bytes:u,total_bytes:d,elapsed_sec:(Date.now()-o)/1e3}));return}t.out(`upload ${bt(u)}/${bt(d)} (${Math.min(p*10,100)}%)`);}},i=await s.publish(r,{onRegistered:a,...n&&e.flags.watch!==true?{}:{onUploadProgress:c}});if(e.flags.watch!==true){if(n)t.out(JSON.stringify(i));else {for(let u of Jr(i))t.out(u);t.out(""),t.out(`Follow it with: evolve dataset show ${i.name}`);}return 0}return Qr(s,i,t,n,"created")}async function Qr(e,t,n,s,r){s?n.out(JSON.stringify({kind:`import.${r}`,datasetImport:t})):n.out(r==="created"?`Publish ${t.id} (${t.name}) ${t.status} \u2014 watching\u2026`:`Import ${t.id} (${t.name}@${t.version}) ${Ln(t)} \u2014 watching\u2026`);let a=null,o=null,l=new Set,c=d=>{for(let p of d.failed_tasks??[])l.has(p.task_name)||(l.add(p.task_name),n.out(s?JSON.stringify({kind:"task.failed",task:p}):ku(p)));},i;try{i=await e.watchImport(t.id,{onStatus:d=>{n.out(s?JSON.stringify({kind:"import.status",datasetImport:d}):al(d));},onProgress:d=>{n.out(s?JSON.stringify({kind:"import.progress",progress:d}):sl(d));},onVersion:(d,p)=>{a=d,o=p,n.out(s?JSON.stringify({kind:"import.version",version:d}):ol(d)),c(p);}});}catch(d){if(d instanceof oe)return s&&n.out(JSON.stringify({error:ta(d)})),n.err(`Error: ${d.message}`),n.err(`Follow it with: evolve dataset show ${d.dataset}@${d.version}`),1;throw d}let u=a;if(u!==null&&u.n_failed_tasks>0)try{let d=await e.get(`${i.name}@${i.version}`);o=d,c(d);}catch{}if(s)n.out(JSON.stringify({kind:"import.final",datasetImport:i}));else {n.out("");for(let d of Jr(i))n.out(d);if(i.progress!==null)for(let d of rl(i.progress))n.out(d);if(a!==null){for(let d of il(a,o))n.out(d);for(let d of bu(a,i))n.out(d);}}return i.status==="FAILED"?1:0}async function yu(e,t){let n=e.flags.json===true,s=Q(k(e)),r=e.positionals[0],a=null;try{a=await s.getImport(r);}catch(o){if(!(o instanceof x&&o.status===404))throw o}if(a===null){let l=(await s.listImports({dataset:r,limit:50})).items;if(a=l.find(c=>c.status==="QUEUED"||c.status==="RUNNING")??null,a===null){let c=l[0],i=c!==void 0?`its newest import ${c.id} is ${c.status} \u2014 see it with: evolve dataset show ${r}`:"no import id and no dataset of yours carries that name",u=`Nothing to watch for "${r}": ${i}`;return n&&t.out(JSON.stringify({error:{code:"nothing_to_watch",message:u}})),t.err(`Error: ${u}`),1}}try{return await Qr(s,a,t,n,"attached")}catch(o){if(o instanceof x&&o.code==="import_not_found"){let l=`Import ${a.id} no longer exists \u2014 its upload was abandoned or refused before the corpus arrived, so the publish never happened. Re-run the publish to start a new one.`;return n&&t.out(JSON.stringify({error:{code:"import_not_found",message:l}})),t.err(`Error: ${l}`),1}throw o}}function bu(e,t){if(e.n_failed_tasks<=0)return [];let n=e.task_count+e.n_failed_tasks;return [`built ${e.task_count} of ${n} tasks \u2014 ${e.n_failed_tasks} failed to build`,`Reasons: evolve dataset show ${t.name}@${t.version}`,"Fix: re-publish a new version \u2014 versions are immutable."]}function ku(e){return `task ${e.task_name} FAILED \u2014 ${e.failure.code} (${e.failure.step}): ${de(e.failure.message,140)}`}async function wu(e,t){let s=await Q(k(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 vu(e,t){let n=Q(k(e)),[s,r]=e.positionals,a=await n.activate(s,r);if(e.flags.json===true)t.out(JSON.stringify(a));else for(let o of Yr(a))t.out(o);return 0}function Zr(e){let t=[["name",e.name],["id",e.id],["ref",e.ref],["digest",e.digest],["size",bt(e.size_bytes)]];return e.description&&t.push(["description",e.description]),t.push(["created",e.created_at]),I(t)}async function Su(e,t){if(M(e,t,nr))return 0;let s=await ie(k(e)).list(D(e));return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.items.length===0?(e.flags.quiet!==true&&t.out("No uploaded skills."),0):(J(e,t,s.items,nr,Yi,r=>r.id),s.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
62
+ More: evolve skill list --cursor ${s.nextCursor}`),0)}async function Au(e,t){let s=await ie(k(e)).upload(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(s.length===1?s[0]:s)),0):(s.forEach((r,a)=>{a>0&&t.out("");for(let o of Zr(r))t.out(o);}),t.out(""),t.out(`Use it with: evolve run --skill name:${s[0].name} (moving pointer) or --skill ${s[0].ref} (this exact content)`),0)}async function xu(e,t){let n=await ie(k(e)).get(await T(e,"skill",e.positionals[0]));if(e.flags.json===true)return t.out(JSON.stringify(n)),0;for(let s of Zr(n))t.out(s);return n.skill_md&&(t.out(""),t.out(n.skill_md)),0}async function Tu(e,t){let n=await T(e,"skill",e.positionals[0]);return await ie(k(e)).delete(n),e.flags.json===true?t.out(JSON.stringify({id:n,deleted:true})):t.out(`Deleted skill ${n}`),0}async function Ru(e,t){if(M(e,t,sr))return 0;let s=await Le(k(e)).list(D(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):(J(e,t,s.items,sr,Xi,r=>r.name),0)}async function Eu(e,t){let s=await Le(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of jr(s))t.out(r);return 0}async function Iu(e,t){let s=await Le(k(e)).create(Fi(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of jr(s))t.out(r);t.out(""),t.out(`Use it with: evolve run -d <dataset> -a ${s.name} -m <model>`);}return 0}async function Pu(e,t){let n=Le(k(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 $u(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]),I(t)}function Fn(e){let t={};return typeof e.flags["api-key"]=="string"&&(t.apiKey=e.flags["api-key"]),typeof e.flags["base-url"]=="string"&&(t.dashboardUrl=e.flags["base-url"]),t}function ea(e){let t=e.usage;return t&&typeof t.spent_usd=="number"?t.provisional?`at least $${t.spent_usd.toFixed(2)}`:`$${t.spent_usd.toFixed(2)}`:q(e.cost)}var kr=[{key:"id",header:"ID",cell:e=>e.id},{key:"tag",header:"TAG",cell:e=>e.tag},{key:"agent",header:"AGENT",cell:e=>e.agent},{key:"model",header:"MODEL",cell:e=>e.model??"-"},{key:"provider",header:"PROVIDER",cell:e=>e.provider},{key:"sandbox",header:"SANDBOX",cell:e=>e.sandboxId??"-"},{key:"state",header:"STATE",cell:e=>e.state},{key:"runtime",header:"RUNTIME",cell:e=>e.runtimeStatus},{key:"cost",header:"COST",cell:ea},{key:"steps",header:"STEPS",cell:e=>String(e.stepCount)},{key:"created",header:"CREATED",cell:e=>e.createdAt},{key:"ended",header:"ENDED",cell:e=>e.endedAt??"-"}],Cu=["id","tag","agent","model","state","cost","created"];function Ou(e){let t=[["id",e.id],["tag",e.tag],["agent",e.agent],["model",e.model??"-"],["provider",e.provider],["sandbox",e.sandboxId??"-"],["state",e.state],["runtime",e.runtimeStatus],["cost",ea(e)]];return e.usage&&t.push(["tokens",`${e.usage.input_tokens??"-"} in / ${e.usage.cached_input_tokens??"-"} cached / `+(e.usage.cache_write_tokens!==null?`${e.usage.cache_write_tokens} written to cache / `:"")+`${e.usage.output_tokens??"-"} out`+(e.usage.provisional?" (provisional)":"")]),t.push(["steps",String(e.stepCount)]),e.toolStats&&Object.keys(e.toolStats).length>0&&t.push(["tools",Object.entries(e.toolStats).map(([n,s])=>`${n} ${s}`).join(", ")]),t.push(["created",e.createdAt]),t.push(["ended",e.endedAt??"-"]),I(t)}async function Du(e,t){if(M(e,t,kr))return 0;let n=e.flags.state===void 0?void 0:String(e.flags.state);if(n!==void 0&&n!=="live"&&n!=="ended")throw new m(`--state must be live or ended; got: ${n}`);let r=await dt(Fn(e)).list({...D(e),...n!==void 0?{state:n}:{},...e.flags.agent!==void 0?{agent:String(e.flags.agent)}:{},...e.flags["tag-prefix"]!==void 0?{tagPrefix:String(e.flags["tag-prefix"])}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No sessions."),0):(J(e,t,r.items,kr,Cu,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
63
+ More: evolve session list --cursor ${r.nextCursor}`),0)}async function ju(e,t){let n=await dt(Fn(e)).get(await T(e,"session",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Ou(n))t.out(s);return 0}async function Lu(e,t){let n=await an(k(e)).status();if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of $u(n))t.out(s);return 0}var wr=[{key:"slug",header:"SLUG",cell:e=>e.slug},{key:"display_name",header:"DISPLAY NAME",cell:e=>e.display_name},{key:"role",header:"ROLE",cell:e=>e.role??"-"},{key:"personal",header:"PERSONAL",cell:e=>e.personal?"yes":"no"},{key:"created",header:"CREATED",cell:e=>e.created_at}],Nu=["slug","display_name","role","created"];function Uu(e,t){let n=t.toLowerCase();return e.filter(s=>s.slug.toLowerCase().includes(n)||s.display_name.toLowerCase().includes(n)||(s.role??"").toLowerCase().includes(n))}async function Ju(e,t){if(M(e,t,wr))return 0;let n=await on(k(e)).list(),s=e.flags.search!==void 0?Uu(n,String(e.flags.search)):n;return e.flags.json===true?(t.out(JSON.stringify(s)),0):s.length===0?(e.flags.quiet!==true&&t.out("No organizations found."),0):(J(e,t,s,wr,Nu,r=>r.slug),0)}function Mu(e){let{quota:t,usage:n}=e,s=n.month_spend_usd===null?"unavailable":q(n.month_spend_usd),r=n.month_spend_as_of===null?"":` (as of ${n.month_spend_as_of})`,a=t.monthly_budget_usd===null?`${s} / no budget${r}`:`${s} / ${q(t.monthly_budget_usd)}${r}`,o=[["slug",e.slug],["display name",e.display_name],["personal",e.personal?"yes":"no"],["role",e.role??"-"],["members",String(e.member_count)],["created",e.created_at],["concurrent trials",`${n.in_flight_trials}/${t.max_concurrent_trials}`],["queued trials",`${n.queued_trials}/${t.max_queued_trials}`],["concurrent imports",`${n.in_flight_imports}/${t.max_concurrent_imports}`],["concurrent analyses",`${n.in_flight_analyses}/${t.max_concurrent_analyses}`],["concurrent sessions",`${n.active_sessions}/${t.max_concurrent_sessions}`],["e2b sandbox ceiling",String(t.max_concurrent_sandboxes_e2b)],["daytona sandbox ceiling",String(t.max_concurrent_sandboxes_daytona)],["modal sandbox ceiling",String(t.max_concurrent_sandboxes_modal)],["month spend",a]];return I(o)}async function Fu(e,t){let n=await on(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Mu(n))t.out(s);return 0}function Bn(e){let t={};return typeof e.flags["api-key"]=="string"&&(t.apiKey=e.flags["api-key"]),typeof e.flags["base-url"]=="string"&&(t.dashboardUrl=e.flags["base-url"]),t}function Bu(e){let t=e.flags.value;if(typeof t=="string"){if(t.length===0)throw new m("--value must not be empty");return t}if(process.stdin.isTTY)throw new m('no value given: pass --value <value> or pipe the value on stdin (e.g. printf %s "$TOKEN" | evolve secrets set NAME --delivery ...)');let n=fs$1.readFileSync(0,"utf8"),s=n.endsWith(`\r
64
64
  `)?n.slice(0,-2):n.endsWith(`
65
- `)?n.slice(0,-1):n;if(s.length===0)throw new m("stdin carried no value");return s}async function Vu(e,t){let n=e.positionals[0],s=e.flags.delivery;if(s!=="brokered"&&s!=="direct")throw new m("--delivery is required: 'brokered' or 'direct'");let r=Hu(e),o=await dt(zn(e)).set({name:n,value:r,delivery:s,...typeof e.flags.label=="string"?{label:e.flags.label}:{},...e.flags["allowed-host"]!==void 0?{allowedHosts:e.flags["allowed-host"]}:{},...e.flags["allowed-path-prefix"]!==void 0?{allowedPathPrefixes:e.flags["allowed-path-prefix"]}:{},...e.flags["allowed-method"]!==void 0?{allowedMethods:e.flags["allowed-method"]}:{}});if(e.flags.json===true)return t.out(JSON.stringify(o)),0;let l=o.secret;return t.out(`${o.status==="created"?"Stored":"Updated"} env secret ${l.name} (label ${l.label??"default"}, delivery ${l.delivery??"brokered"})`),0}async function Gu(e,t){if(F(e,t,ur))return 0;let s=await dt(zn(e)).list();return e.flags.json===true?(t.out(JSON.stringify({secrets:s})),0):s.length===0?(e.flags.quiet!==true&&t.out("No env secrets stored."),0):(M(e,t,s,ur,tl,r=>r.label&&r.label!=="default"?`${r.name}:${r.label}`:r.name),0)}async function Ku(e,t){let n=e.positionals[0],r=await dt(zn(e)).delete({name:n,...typeof e.flags.label=="string"?{label:e.flags.label}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):(t.out(`Deleted env secret ${r.name} (label ${r.label})`),0)}function Rr(e,t){e.out(t.endsWith(`
66
- `)?t.slice(0,-1):t);}function Wu(e,t){let n=[e.content];if(t)for(let s of Fe(e))n.push(`
65
+ `)?n.slice(0,-1):n;if(s.length===0)throw new m("stdin carried no value");return s}async function qu(e,t){let n=e.positionals[0],s=e.flags.delivery;if(s!=="brokered"&&s!=="direct")throw new m("--delivery is required: 'brokered' or 'direct'");let r=Bu(e),o=await ct(Bn(e)).set({name:n,value:r,delivery:s,...typeof e.flags.label=="string"?{label:e.flags.label}:{},...e.flags["allowed-host"]!==void 0?{allowedHosts:e.flags["allowed-host"]}:{},...e.flags["allowed-path-prefix"]!==void 0?{allowedPathPrefixes:e.flags["allowed-path-prefix"]}:{},...e.flags["allowed-method"]!==void 0?{allowedMethods:e.flags["allowed-method"]}:{}});if(e.flags.json===true)return t.out(JSON.stringify(o)),0;let l=o.secret;return t.out(`${o.status==="created"?"Stored":"Updated"} env secret ${l.name} (label ${l.label??"default"}, delivery ${l.delivery??"brokered"})`),0}async function zu(e,t){if(M(e,t,rr))return 0;let s=await ct(Bn(e)).list();return e.flags.json===true?(t.out(JSON.stringify({secrets:s})),0):s.length===0?(e.flags.quiet!==true&&t.out("No env secrets stored."),0):(J(e,t,s,rr,Qi,r=>r.label&&r.label!=="default"?`${r.name}:${r.label}`:r.name),0)}async function Hu(e,t){let n=e.positionals[0],r=await ct(Bn(e)).delete({name:n,...typeof e.flags.label=="string"?{label:e.flags.label}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):(t.out(`Deleted env secret ${r.name} (label ${r.label})`),0)}function vr(e,t){e.out(t.endsWith(`
66
+ `)?t.slice(0,-1):t);}function Vu(e,t){let n=[e.content];if(t)for(let s of Me(e))n.push(`
67
67
  --- ${s.path} ---
68
68
 
69
- ${s.content}`);return n.join("")}function Yu(e,t){if(e.length<=t)return e;let n=e.slice(0,t-3),s=n.lastIndexOf(" ");return `${(s>0?n.slice(0,s):n).trimEnd()}...`}async function Xu(e,t){let n=gt(Je(Ve));if(e.flags.json===true)return t.out(JSON.stringify(n.map(r=>({name:r.name,description:r.description,path:r.dir})))),0;let s=Math.max(...n.map(r=>r.name.length));for(let r of n)t.out(` ${r.name.padEnd(s)} ${Yu(r.description,70)}`);return 0}async function Qu(e,t){let n=Je(Ve),s=e.flags.full===true,r=e.flags.all===true,a=e.positionals;if(r&&a.length>0)throw new m('"skills get" takes either names or --all, not both');if(!r&&a.length===0)throw new m('"skills get" requires <name> [name...] or --all');if(!r&&a.length===2&&!Ws(n,a[1])){if(s)throw new m("--full applies to a skill; a page is one file");let l=Me(n,a[0]),c=Ys(l,a[1]);return e.flags.json===true?t.out(JSON.stringify([{name:l.name,page:c.page,path:path.join(l.dir,c.path),content:c.content}])):Rr(t,c.content),0}let o=r?gt(n):a.map(l=>Me(n,l));return e.flags.json===true?(t.out(JSON.stringify(o.map(l=>({name:l.name,path:l.dir,content:l.content,...s?{files:Fe(l)}:{}})))),0):(Rr(t,o.map(l=>Wu(l,s)).join(`
69
+ ${s.content}`);return n.join("")}function Gu(e,t){if(e.length<=t)return e;let n=e.slice(0,t-3),s=n.lastIndexOf(" ");return `${(s>0?n.slice(0,s):n).trimEnd()}...`}async function Ku(e,t){let n=ft(Ue(He));if(e.flags.json===true)return t.out(JSON.stringify(n.map(r=>({name:r.name,description:r.description,path:r.dir})))),0;let s=Math.max(...n.map(r=>r.name.length));for(let r of n)t.out(` ${r.name.padEnd(s)} ${Gu(r.description,70)}`);return 0}async function Wu(e,t){let n=Ue(He),s=e.flags.full===true,r=e.flags.all===true,a=e.positionals;if(r&&a.length>0)throw new m('"skills get" takes either names or --all, not both');if(!r&&a.length===0)throw new m('"skills get" requires <name> [name...] or --all');if(!r&&a.length===2&&!qs(n,a[1])){if(s)throw new m("--full applies to a skill; a page is one file");let l=Je(n,a[0]),c=Hs(l,a[1]);return e.flags.json===true?t.out(JSON.stringify([{name:l.name,page:c.page,path:path.join(l.dir,c.path),content:c.content}])):vr(t,c.content),0}let o=r?ft(n):a.map(l=>Je(n,l));return e.flags.json===true?(t.out(JSON.stringify(o.map(l=>({name:l.name,path:l.dir,content:l.content,...s?{files:Me(l)}:{}})))),0):(vr(t,o.map(l=>Vu(l,s)).join(`
70
70
  ---
71
71
 
72
- `)),0)}async function Zu(e,t){let n=Je(Ve);if(e.positionals.length===0)return t.out(e.flags.json===true?JSON.stringify({path:n}):n),0;let s=Me(n,e.positionals[0]);return t.out(e.flags.json===true?JSON.stringify({name:s.name,path:s.dir}):s.dir),0}async function ec(e,t){let n=Je(Ve),s=typeof e.flags.target=="string"?e.flags.target:void 0,r=typeof e.flags.path=="string"?e.flags.path:void 0;if(s!==void 0&&r!==void 0)throw new m("--target and --path both name the destination; pass one of them");let a;if(r!==void 0)a=[{target:"path",skillsDir:path.resolve(r)}];else {let l=s??"all";if(l!=="all"&&!Be.includes(l))throw new m(`--target must be one of ${[...Be,"all"].join(", ")}, got "${l}"`);a=(l==="all"?[...Be]:[l]).map(u=>({target:u,skillsDir:Xs(u)}));}let o=Qs(n,a,e.flags.force===true);if(e.flags.json===true)t.out(JSON.stringify(o));else for(let l of o)t.out(l.path);return 0}function tc(e){if(e.length===0)return {text:bn(),code:0};let t=$n[e[0]];if(t&&(e.length===1||!ce[e[0]]))return {text:er(e[0],t),code:0};let n=Or[e[0]];if(n)return {text:n,code:0};let s=Cr[e[0]]??e[0],r=ce[s];if(!r)return {text:bn(),code:0};if(e.length===1)return {text:tr(s),code:0};let a=wn(r,e.slice(1));return a?{text:er(`${s} ${a.verb}`,a.spec),code:0}:{text:tr(s),code:0}}var nc={run:mr,analyze:jl,check:Nl,upload:Xl,"skills list":Xu,"skills get":Qu,"skills path":Zu,"skills install":ec,"job start":mr,"job list":Sl,"job show":Al,"job trials":xl,"job tasks":Tl,"job compare":El,"job cancel":Il,"job delete":Pl,"job stop":$l,"job resume":Cl,"job retry":Ol,"job regrade":Hl,"job download":Vl,"job imports":Zl,"job import":eu,"job grep":ru,"trial show":tu,"trial trace":su,"trial download":nu,"trial retry":au,"trial regrade":ou,"trial stop":iu,"analysis list":cu,"analysis show":du,"analysis trace":pu,"analysis download":fu,"check list":Ml,"check show":Fl,"check trace":Bl,"check download":ql,"session list":Nu,"session show":Uu,"dataset list":_u,"dataset show":yu,"dataset check":bu,"dataset publish":ku,"dataset watch":wu,"dataset download":Au,"dataset activate":xu,"skill list":Tu,"skill upload":Ru,"skill show":Eu,"skill delete":Iu,"agent list":Pu,"agent show":$u,"agent add":Cu,"agent remove":Ou,"auth status":Ju,"auth org list":Bu,"auth org show":zu,"secrets set":Vu,"secrets list":Gu,"secrets delete":Ku};function oa(e){return e instanceof x?{code:e.code,message:e.message,...e.param!==void 0?{param:e.param}:{},...e.details!==void 0?{details:e.details}:{},...e.retryAfterSec!==void 0?{retryAfterSec:e.retryAfterSec}:{},...e.requestId!==void 0?{request_id:e.requestId}:{}}:e instanceof oe?{code:e.code,message:e.message}:{message:e instanceof Error?e.message:String(e)}}async function sc(e,t=Hi){let n;try{n=bi(e);}catch(s){if(s instanceof m)return t.err(`Error: ${s.message}`),t.err('Run "evolve help" for usage.'),2;throw s}if(n.command==="help"){let{text:s,code:r}=tc(n.positionals);return t.out(s),r}if(n.command==="version")return t.out(_i()),0;try{let s=nc[n.command];return s?await s(n,t):(t.err(`Error: unknown command "${n.command}"`),2)}catch(s){if(s instanceof m)return t.err(`Error: ${s.message}`),t.err(`Run "evolve ${n.command} --help" for usage.`),2;n.flags.json===true&&t.out(JSON.stringify({error:oa(s)}));let r=rc(s,t);return s instanceof x&&t.err(`Docs: ${pi}`),r}}function rc(e,t){if(e instanceof x&&e.code==="quota_exceeded")return t.err(`Launch quota exceeded: ${e.message}`),2;if(e instanceof x&&e.status===429){let n=e.retryAfterSec!==void 0?`retry in ${e.retryAfterSec}s`:"retry shortly";return t.err(`Error: rate limited by the server \u2014 ${n}.`),1}if(t.err(`Error: ${e.message}`),e instanceof x&&e.code==="task_failed_to_build"){let n=e.details??{},s=Array.isArray(n.failed_tasks)?n.failed_tasks:[];for(let r of s){if(!r||typeof r!="object")continue;let a=r.failure??{},o=typeof a.message=="string"&&a.message?`${a.code??"?"} (${a.step??"?"}): ${a.message}`:"build failed (reason not recorded)";t.err(` ${r.task_name}: ${o}`);}t.err(" Fix: re-publish a new version, or drop the failed task(s) from --include-task-name.");}return 1}var ac=(()=>{let e=process.argv[1];if(!e)return false;let t=n=>{try{return (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))===url.pathToFileURL(n).href}catch{return false}};if(t(e))return true;try{return t(fs.realpathSync(e))}catch{return false}})();ac&&sc(process.argv.slice(2)).then(e=>{process.exitCode=e;},e=>{process.stderr.write(`Error: ${e?.message??e}
73
- `),process.exitCode=1;});exports.CliUsageError=m;exports.TRIAL_COLUMNS=rr;exports.USAGE=Ad;exports.analysisDetailLines=sl;exports.analysisResultLines=Dl;exports.buildAgentInput=zi;exports.buildJobInput=Bi;exports.buildPublishInput=qi;exports.buildSettleSummaryLines=vu;exports.checkDetailLines=Yr;exports.checkResultLines=Kr;exports.eventLine=dl;exports.failedTaskOutcomeLine=Su;exports.importProgressLine=ol;exports.importStatusLine=ll;exports.loadPromptFile=Dn;exports.loadRubricFile=jn;exports.parseAgentKwargs=Ui;exports.parseArgs=bi;exports.parseEnvPairs=Sn;exports.parseInlineSecrets=Fi;exports.parseSecretRefs=Mi;exports.parseYamlConfig=Ei;exports.parseYamlConfigLocated=jr;exports.progressSettleLines=il;exports.runCli=sc;exports.traceEventLine=Br;exports.trialDetailLines=nl;exports.versionStatusLine=ul;
72
+ `)),0)}async function Yu(e,t){let n=Ue(He);if(e.positionals.length===0)return t.out(e.flags.json===true?JSON.stringify({path:n}):n),0;let s=Je(n,e.positionals[0]);return t.out(e.flags.json===true?JSON.stringify({name:s.name,path:s.dir}):s.dir),0}async function Xu(e,t){let n=Ue(He),s=typeof e.flags.target=="string"?e.flags.target:void 0,r=typeof e.flags.path=="string"?e.flags.path:void 0;if(s!==void 0&&r!==void 0)throw new m("--target and --path both name the destination; pass one of them");let a;if(r!==void 0)a=[{target:"path",skillsDir:path.resolve(r)}];else {let l=s??"all";if(l!=="all"&&!Fe.includes(l))throw new m(`--target must be one of ${[...Fe,"all"].join(", ")}, got "${l}"`);a=(l==="all"?[...Fe]:[l]).map(u=>({target:u,skillsDir:Vs(u)}));}let o=Gs(n,a,e.flags.force===true);if(e.flags.json===true)t.out(JSON.stringify(o));else for(let l of o)t.out(l.path);return 0}function Qu(e){if(e.length===0)return {text:_n(),code:0};let t=In[e[0]];if(t&&(e.length===1||!ce[e[0]]))return {text:Ws(e[0],t),code:0};let n=Er[e[0]];if(n)return {text:n,code:0};let s=Rr[e[0]]??e[0],r=ce[s];if(!r)return {text:_n(),code:0};if(e.length===1)return {text:Ys(s),code:0};let a=bn(r,e.slice(1));return a?{text:Ws(`${s} ${a.verb}`,a.spec),code:0}:{text:Ys(s),code:0}}var Zu={run:cr,analyze:Cl,check:Dl,upload:Kl,"skills list":Ku,"skills get":Wu,"skills path":Yu,"skills install":Xu,"job start":cr,"job list":kl,"job show":wl,"job trials":vl,"job tasks":Sl,"job compare":xl,"job cancel":Tl,"job delete":Rl,"job stop":El,"job resume":Il,"job retry":Pl,"job regrade":Bl,"job download":ql,"job imports":Yl,"job import":Xl,"job grep":tu,"trial show":Ql,"trial trace":eu,"trial download":Zl,"trial retry":nu,"trial regrade":su,"trial stop":ru,"analysis list":iu,"analysis show":lu,"analysis trace":uu,"analysis download":cu,"check list":Nl,"check show":Ul,"check trace":Jl,"check download":Ml,"session list":Du,"session show":ju,"dataset list":gu,"dataset show":mu,"dataset check":hu,"dataset publish":_u,"dataset watch":yu,"dataset download":wu,"dataset activate":vu,"skill list":Su,"skill upload":Au,"skill show":xu,"skill delete":Tu,"agent list":Ru,"agent show":Eu,"agent add":Iu,"agent remove":Pu,"auth status":Lu,"auth org list":Ju,"auth org show":Fu,"secrets set":qu,"secrets list":zu,"secrets delete":Hu};function ta(e){return e instanceof x?{code:e.code,message:e.message,...e.param!==void 0?{param:e.param}:{},...e.details!==void 0?{details:e.details}:{},...e.retryAfterSec!==void 0?{retryAfterSec:e.retryAfterSec}:{},...e.requestId!==void 0?{request_id:e.requestId}:{}}:e instanceof oe?{code:e.code,message:e.message}:{message:e instanceof Error?e.message:String(e)}}async function ec(e,t=Bi){let n;try{n=hi(e);}catch(s){if(s instanceof m)return t.err(`Error: ${s.message}`),t.err('Run "evolve help" for usage.'),2;throw s}if(n.command==="help"){let{text:s,code:r}=Qu(n.positionals);return t.out(s),r}if(n.command==="version")return t.out(gi()),0;try{let s=Zu[n.command];return s?await s(n,t):(t.err(`Error: unknown command "${n.command}"`),2)}catch(s){if(s instanceof m)return t.err(`Error: ${s.message}`),t.err(`Run "evolve ${n.command} --help" for usage.`),2;n.flags.json===true&&t.out(JSON.stringify({error:ta(s)}));let r=tc(s,t);return s instanceof x&&t.err(`Docs: ${ui}`),r}}function tc(e,t){if(e instanceof x&&e.code==="quota_exceeded")return t.err(`Launch quota exceeded: ${e.message}`),2;if(e instanceof x&&e.status===429){let n=e.retryAfterSec!==void 0?`retry in ${e.retryAfterSec}s`:"retry shortly";return t.err(`Error: rate limited by the server \u2014 ${n}.`),1}if(t.err(`Error: ${e.message}`),e instanceof x&&e.code==="task_failed_to_build"){let n=e.details??{},s=Array.isArray(n.failed_tasks)?n.failed_tasks:[];for(let r of s){if(!r||typeof r!="object")continue;let a=r.failure??{},o=typeof a.message=="string"&&a.message?`${a.code??"?"} (${a.step??"?"}): ${a.message}`:"build failed (reason not recorded)";t.err(` ${r.task_name}: ${o}`);}t.err(" Fix: re-publish a new version, or drop the failed task(s) from --include-task-name.");}return 1}var nc=(()=>{let e=process.argv[1];if(!e)return false;let t=n=>{try{return (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))===url.pathToFileURL(n).href}catch{return false}};if(t(e))return true;try{return t(fs$1.realpathSync(e))}catch{return false}})();nc&&ec(process.argv.slice(2)).then(e=>{process.exitCode=e;},e=>{process.stderr.write(`Error: ${e?.message??e}
73
+ `),process.exitCode=1;});exports.CliUsageError=m;exports.TRIAL_COLUMNS=Zs;exports.USAGE=wd;exports.analysisDetailLines=el;exports.analysisResultLines=$l;exports.buildAgentInput=Fi;exports.buildJobInput=Ji;exports.buildPublishInput=Mi;exports.buildSettleSummaryLines=bu;exports.checkDetailLines=Hr;exports.checkResultLines=qr;exports.eventLine=ll;exports.failedTaskOutcomeLine=ku;exports.importProgressLine=sl;exports.importStatusLine=al;exports.loadPromptFile=Cn;exports.loadRubricFile=On;exports.parseAgentKwargs=ji;exports.parseArgs=hi;exports.parseEnvPairs=wn;exports.parseInlineSecrets=Ui;exports.parseSecretRefs=Ni;exports.parseYamlConfig=xi;exports.parseYamlConfigLocated=Pr;exports.progressSettleLines=rl;exports.runCli=ec;exports.traceEventLine=Nr;exports.trialDetailLines=Zi;exports.versionStatusLine=ol;