@evolvingmachines/evolve 0.0.65 → 0.0.67

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 (152) hide show
  1. package/dist/{chunk-DK2MGUPB.js → chunk-RFLMRPGK.js} +5 -5
  2. package/dist/cli/index.cjs +39 -39
  3. package/dist/cli/index.d.cts +3 -3
  4. package/dist/cli/index.d.ts +3 -3
  5. package/dist/cli/index.js +30 -30
  6. package/dist/index.cjs +1 -1
  7. package/dist/index.d.cts +4 -4
  8. package/dist/index.d.ts +4 -4
  9. package/dist/index.js +1 -1
  10. package/dist/{types-B_qmzlMk.d.cts → types-84M4J_Vm.d.cts} +11 -44
  11. package/dist/{types-B_qmzlMk.d.ts → types-84M4J_Vm.d.ts} +11 -44
  12. package/package.json +4 -4
  13. package/skills/create-adapter/SKILL.md +71 -26
  14. package/skills/create-task/SKILL.md +124 -66
  15. package/skills/evolve/SKILL.md +37 -20
  16. package/skills/evolve-evals/SKILL.md +142 -69
  17. package/skills/evolve-evals/references/cli-reference/agent.md +76 -0
  18. package/skills/evolve-evals/references/cli-reference/analysis.md +78 -0
  19. package/skills/evolve-evals/references/cli-reference/analyze.md +95 -0
  20. package/skills/evolve-evals/references/cli-reference/auth.md +96 -0
  21. package/skills/evolve-evals/references/cli-reference/check.md +156 -0
  22. package/skills/evolve-evals/references/cli-reference/dataset.md +154 -0
  23. package/skills/evolve-evals/references/cli-reference/filesystem.md +168 -0
  24. package/skills/evolve-evals/references/cli-reference/index.md +149 -0
  25. package/skills/evolve-evals/references/cli-reference/job.md +198 -0
  26. package/skills/evolve-evals/references/cli-reference/run.md +187 -0
  27. package/skills/evolve-evals/references/cli-reference/secrets.md +77 -0
  28. package/skills/evolve-evals/references/cli-reference/session.md +56 -0
  29. package/skills/evolve-evals/references/cli-reference/skill.md +52 -0
  30. package/skills/evolve-evals/references/cli-reference/skills.md +85 -0
  31. package/skills/evolve-evals/references/cli-reference/trial.md +115 -0
  32. package/skills/evolve-evals/references/cli-reference/upload.md +72 -0
  33. package/skills/evolve-evals/references/core-concepts/agents.md +96 -0
  34. package/skills/evolve-evals/references/core-concepts/analyze.md +143 -0
  35. package/skills/evolve-evals/references/core-concepts/check.md +116 -0
  36. package/skills/evolve-evals/references/core-concepts/compatibility.md +39 -0
  37. package/skills/evolve-evals/references/core-concepts/compose.md +103 -0
  38. package/skills/evolve-evals/references/core-concepts/datasets.md +234 -0
  39. package/skills/evolve-evals/references/core-concepts/index.md +52 -0
  40. package/skills/evolve-evals/references/core-concepts/jobs.md +223 -0
  41. package/skills/evolve-evals/references/core-concepts/models.md +73 -0
  42. package/skills/evolve-evals/references/core-concepts/multi-step.md +93 -0
  43. package/skills/evolve-evals/references/core-concepts/rewardkit.md +341 -0
  44. package/skills/evolve-evals/references/core-concepts/sandboxes.md +73 -0
  45. package/skills/evolve-evals/references/core-concepts/secrets.md +86 -0
  46. package/skills/evolve-evals/references/core-concepts/sharing.md +81 -0
  47. package/skills/evolve-evals/references/core-concepts/skills.md +100 -0
  48. package/skills/evolve-evals/references/core-concepts/task-config.md +169 -0
  49. package/skills/evolve-evals/references/core-concepts/task-environment.md +127 -0
  50. package/skills/evolve-evals/references/core-concepts/task-reference.md +191 -0
  51. package/skills/evolve-evals/references/core-concepts/task-verifiers.md +209 -0
  52. package/skills/evolve-evals/references/core-concepts/tasks.md +90 -0
  53. package/skills/evolve-evals/references/core-concepts/teams.md +128 -0
  54. package/skills/evolve-evals/references/core-concepts/trial-outputs.md +225 -0
  55. package/skills/evolve-evals/references/core-concepts/trials.md +129 -0
  56. package/skills/evolve-evals/references/core-concepts/upload-sdk-session.md +240 -0
  57. package/skills/evolve-evals/references/core-concepts/upload.md +166 -0
  58. package/skills/evolve-evals/references/dashboard/checks.md +54 -0
  59. package/skills/evolve-evals/references/dashboard/datasets.md +65 -0
  60. package/skills/evolve-evals/references/dashboard/jobs.md +106 -0
  61. package/skills/evolve-evals/references/dashboard/traces.md +54 -0
  62. package/skills/evolve-evals/references/dashboard/trial-viewer.md +77 -0
  63. package/skills/evolve-evals/references/getting-started/first-task.md +228 -0
  64. package/skills/evolve-evals/references/getting-started/installation.md +79 -0
  65. package/skills/evolve-evals/references/getting-started/quick-start.md +100 -0
  66. package/skills/evolve-evals/references/index.md +58 -0
  67. package/skills/evolve-evals/references/sdk/http.md +110 -0
  68. package/skills/evolve-evals/references/sdk/python.md +108 -0
  69. package/skills/evolve-evals/references/sdk/typescript.md +104 -0
  70. package/skills/evolve-evals/references/sdk-reference/agents.md +75 -0
  71. package/skills/evolve-evals/references/sdk-reference/analyses.md +124 -0
  72. package/skills/evolve-evals/references/sdk-reference/auth.md +171 -0
  73. package/skills/evolve-evals/references/sdk-reference/checks.md +145 -0
  74. package/skills/evolve-evals/references/sdk-reference/datasets.md +170 -0
  75. package/skills/evolve-evals/references/sdk-reference/error-codes.md +231 -0
  76. package/skills/evolve-evals/references/sdk-reference/errors.md +98 -0
  77. package/skills/evolve-evals/references/sdk-reference/filesystem.md +166 -0
  78. package/skills/evolve-evals/references/sdk-reference/index.md +161 -0
  79. package/skills/evolve-evals/references/sdk-reference/jobs.md +250 -0
  80. package/skills/evolve-evals/references/sdk-reference/meta.md +54 -0
  81. package/skills/evolve-evals/references/sdk-reference/methods/agents.md +154 -0
  82. package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +211 -0
  83. package/skills/evolve-evals/references/sdk-reference/methods/auth.md +257 -0
  84. package/skills/evolve-evals/references/sdk-reference/methods/checks.md +460 -0
  85. package/skills/evolve-evals/references/sdk-reference/methods/datasets.md +687 -0
  86. package/skills/evolve-evals/references/sdk-reference/methods/filesystem.md +527 -0
  87. package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +1021 -0
  88. package/skills/evolve-evals/references/sdk-reference/methods/meta.md +209 -0
  89. package/skills/evolve-evals/references/sdk-reference/methods/secrets.md +157 -0
  90. package/skills/evolve-evals/references/sdk-reference/methods/skills.md +125 -0
  91. package/skills/evolve-evals/references/sdk-reference/methods/trials.md +371 -0
  92. package/skills/evolve-evals/references/sdk-reference/secrets.md +104 -0
  93. package/skills/evolve-evals/references/sdk-reference/skills.md +66 -0
  94. package/skills/evolve-evals/references/sdk-reference/trials.md +164 -0
  95. package/skills/evolve-evals/references/sdk-reference/types.md +1249 -0
  96. package/skills/publish/SKILL.md +103 -79
  97. package/skills/rewardkit/SKILL.md +78 -23
  98. package/spec/openapi.yaml +19 -74
  99. package/skills/evolve-evals/references/cli-reference/agent.mdx +0 -79
  100. package/skills/evolve-evals/references/cli-reference/analysis.mdx +0 -160
  101. package/skills/evolve-evals/references/cli-reference/analyze.mdx +0 -84
  102. package/skills/evolve-evals/references/cli-reference/auth.mdx +0 -133
  103. package/skills/evolve-evals/references/cli-reference/check.mdx +0 -263
  104. package/skills/evolve-evals/references/cli-reference/dataset.mdx +0 -151
  105. package/skills/evolve-evals/references/cli-reference/index.mdx +0 -108
  106. package/skills/evolve-evals/references/cli-reference/job.mdx +0 -278
  107. package/skills/evolve-evals/references/cli-reference/run.mdx +0 -204
  108. package/skills/evolve-evals/references/cli-reference/secrets.mdx +0 -95
  109. package/skills/evolve-evals/references/cli-reference/skill.mdx +0 -61
  110. package/skills/evolve-evals/references/cli-reference/skills.mdx +0 -81
  111. package/skills/evolve-evals/references/cli-reference/trial.mdx +0 -181
  112. package/skills/evolve-evals/references/cli-reference/upload.mdx +0 -36
  113. package/skills/evolve-evals/references/core-concepts/agents.mdx +0 -106
  114. package/skills/evolve-evals/references/core-concepts/analyze.mdx +0 -86
  115. package/skills/evolve-evals/references/core-concepts/check.mdx +0 -64
  116. package/skills/evolve-evals/references/core-concepts/datasets.mdx +0 -138
  117. package/skills/evolve-evals/references/core-concepts/index.mdx +0 -42
  118. package/skills/evolve-evals/references/core-concepts/jobs.mdx +0 -151
  119. package/skills/evolve-evals/references/core-concepts/models.mdx +0 -68
  120. package/skills/evolve-evals/references/core-concepts/sandboxes.mdx +0 -52
  121. package/skills/evolve-evals/references/core-concepts/secrets.mdx +0 -41
  122. package/skills/evolve-evals/references/core-concepts/sharing.mdx +0 -35
  123. package/skills/evolve-evals/references/core-concepts/skills.mdx +0 -42
  124. package/skills/evolve-evals/references/core-concepts/tasks.mdx +0 -216
  125. package/skills/evolve-evals/references/core-concepts/teams.mdx +0 -36
  126. package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +0 -117
  127. package/skills/evolve-evals/references/core-concepts/trials.mdx +0 -103
  128. package/skills/evolve-evals/references/core-concepts/upload.mdx +0 -93
  129. package/skills/evolve-evals/references/dashboard/checks.mdx +0 -21
  130. package/skills/evolve-evals/references/dashboard/datasets.mdx +0 -24
  131. package/skills/evolve-evals/references/dashboard/jobs.mdx +0 -65
  132. package/skills/evolve-evals/references/dashboard/traces.mdx +0 -17
  133. package/skills/evolve-evals/references/dashboard/trial-viewer.mdx +0 -30
  134. package/skills/evolve-evals/references/getting-started/installation.mdx +0 -56
  135. package/skills/evolve-evals/references/getting-started/quick-start.mdx +0 -94
  136. package/skills/evolve-evals/references/index.mdx +0 -48
  137. package/skills/evolve-evals/references/sdk/python.mdx +0 -161
  138. package/skills/evolve-evals/references/sdk/typescript.mdx +0 -163
  139. package/skills/evolve-evals/references/sdk-reference/agents.mdx +0 -108
  140. package/skills/evolve-evals/references/sdk-reference/analyses.mdx +0 -222
  141. package/skills/evolve-evals/references/sdk-reference/auth.mdx +0 -116
  142. package/skills/evolve-evals/references/sdk-reference/checks.mdx +0 -300
  143. package/skills/evolve-evals/references/sdk-reference/datasets.mdx +0 -346
  144. package/skills/evolve-evals/references/sdk-reference/errors.mdx +0 -210
  145. package/skills/evolve-evals/references/sdk-reference/index.mdx +0 -60
  146. package/skills/evolve-evals/references/sdk-reference/jobs.mdx +0 -822
  147. package/skills/evolve-evals/references/sdk-reference/meta.mdx +0 -52
  148. package/skills/evolve-evals/references/sdk-reference/skills.mdx +0 -69
  149. package/skills/evolve-evals/references/sdk-reference/trials.mdx +0 -302
  150. package/skills/evolve-evals/references/sdk-reference/types.mdx +0 -274
  151. package/skills/evolve-evals/references/snippets/global-options.mdx +0 -13
  152. package/skills/evolve-evals/references/snippets/list-flags.mdx +0 -23
@@ -1,35 +1,35 @@
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'),ii=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 ii__default=/*#__PURE__*/_interopDefault(ii);var Ja=Object.defineProperty;var at=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ht=(e,t)=>{for(var n in t)Ja(e,n,{get:t[n],enumerable:true});};function Le(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 Gt=at(()=>{});var ks={};Ht(ks,{RESUMABLE_UPLOAD_CHUNK_BYTES:()=>hs,RESUMABLE_UPLOAD_MAX_ATTEMPTS:()=>je,RESUMABLE_UPLOAD_MAX_RATE_LIMIT_WAITS:()=>ys,RESUMABLE_UPLOAD_MAX_RETRY_AFTER_SEC:()=>_s,RESUMABLE_UPLOAD_THRESHOLD_BYTES:()=>De,retryAfterWaitMs:()=>bs,setResumableUploadThresholdBytes:()=>Ba,uploadArchiveResumable:()=>Ga});function Ba(e){De=e;}async function za(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 Wt(e){return Math.min(500*2**(e-1),4e3)}function bs(e,t){let n=e===void 0?0:e*1e3;return Math.min(Math.max(n,Wt(t)),_s*1e3)}async function Kt(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 it(e){for(let t=0;;t+=1){let n=await e();if(!Va(n)||t>=ys)return n;let s=await n.text().catch(()=>"");await Yt(bs(Le(s,n),t+1));}}function Ha(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[f,y]of Object.entries(i.headers))if(typeof y=="string")d.set(f,y);else if(Array.isArray(y))for(let h of y)d.append(f,h);let p=i.statusCode??0,g=p!==204&&p!==205&&p!==304;s(new Response(g?Buffer.concat(u):null,{status:p,statusText:i.statusMessage??"",headers:d}));});}),l.end();})}async function Ga(e){let t=e.timeoutMs??qa,n=e.chunkBytes??hs,{size:s}=await promises.stat(e.file.path),r=await za(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[g,f]of Object.entries(e.fields))f!==void 0&&(l[g]=f);let c=await it(()=>Kt(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 g=await it(()=>Kt(u,{method:"HEAD",headers:e.headers},t));if(!g.ok)throw new Error(`upload session probe failed: HTTP ${g.status}`);let f=Number(g.headers.get("upload-offset"));if(!Number.isInteger(f))throw new Error("upload session probe did not return Upload-Offset");return f},p=await promises.open(e.file.path,"r");try{let g=0,f=0,y=Buffer.alloc(n);for(;g<s;){let w=Math.min(n,s-g),{bytesRead:v}=await p.read(y,0,w,g);if(v!==w)throw new Error(`archive shrank mid-upload: read ${v} of ${w} bytes at offset ${g}`);let b=y.subarray(0,w),S=crypto.createHash("sha256").update(b).digest(),x;try{x=await it(()=>Kt(u,{method:"PATCH",headers:{...e.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":String(g),"Upload-Checksum":`sha256 ${S.toString("base64")}`},body:new Uint8Array(b)},t));}catch(D){if(f+=1,f>=je)throw D;await Yt(Wt(f));try{g=await d();}catch{}continue}if(x.status===409){if(f+=1,f>=je)return x;g=await d();continue}if(!x.ok)return x;let B=Number(x.headers.get("upload-offset"));if(!Number.isInteger(B)||B<=g)throw new Error("resumable upload did not advance Upload-Offset");g=B,f=0,e.onBytes?.(g,s);}let h;for(let w=1;w<=je;w++)try{return await it(()=>Ha(`${u}/complete`,e.headers,t))}catch(v){h=v,w<je&&await Yt(Wt(w));}throw h}finally{await p.close();}}var De,hs,je,ys,_s,qa,Yt,Va,Xt=at(()=>{Gt();De=256*1024*1024;hs=6*1024*1024,je=4,ys=3,_s=60,qa=6e5;Yt=e=>new Promise(t=>setTimeout(t,e));Va=e=>e.status===429||e.status===503;});var Is={};Ht(Is,{EvolveUploadTimeoutError:()=>Be,UPLOAD_TIMEOUT_MS:()=>gn,postMultipartFile:()=>ai});function Ps(e,t){return new Promise((n,s)=>{e.write(t,r=>r?s(r):n());})}async function ai(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'),ai=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 ai__default=/*#__PURE__*/_interopDefault(ai);var Da=Object.defineProperty;var it=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ht=(e,t)=>{for(var s in t)Da(e,s,{get:t[s],enumerable:true});};function Le(e,t){try{let a=JSON.parse(e)?.error?.retryAfterSec;if(typeof a=="number"&&Number.isFinite(a))return a}catch{}let s=t.headers?.get?.("retry-after");if(typeof s!="string"||s.trim()==="")return;let n=Number(s);return Number.isFinite(n)?n:void 0}var Gt=it(()=>{});var bn={};Ht(bn,{RESUMABLE_UPLOAD_CHUNK_BYTES:()=>mn,RESUMABLE_UPLOAD_MAX_ATTEMPTS:()=>je,RESUMABLE_UPLOAD_MAX_RATE_LIMIT_WAITS:()=>hn,RESUMABLE_UPLOAD_MAX_RETRY_AFTER_SEC:()=>yn,RESUMABLE_UPLOAD_THRESHOLD_BYTES:()=>De,retryAfterWaitMs:()=>_n,setResumableUploadThresholdBytes:()=>Ma,uploadArchiveResumable:()=>Ha});function Ma(e){De=e;}async function qa(e){let t=await promises.open(e,"r");try{let s=crypto.createHash("sha256"),n=Buffer.alloc(1024*1024);for(;;){let{bytesRead:r}=await t.read(n,0,n.length);if(r===0)break;s.update(n.subarray(0,r));}return s.digest("hex")}finally{await t.close();}}function Wt(e){return Math.min(500*2**(e-1),4e3)}function _n(e,t){let s=e===void 0?0:e*1e3;return Math.min(Math.max(s,Wt(t)),yn*1e3)}async function Kt(e,t,s){let n=new AbortController,r=setTimeout(()=>n.abort(),s);r.unref?.();try{return await fetch(e,{...t,signal:n.signal})}finally{clearTimeout(r);}}async function ot(e){for(let t=0;;t+=1){let s=await e();if(!za(s)||t>=hn)return s;let n=await s.text().catch(()=>"");await Yt(_n(Le(n,s),t+1));}}function Va(e,t,s){return new Promise((n,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(s/1e3)}s`));},s);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[f,y]of Object.entries(i.headers))if(typeof y=="string")d.set(f,y);else if(Array.isArray(y))for(let h of y)d.append(f,h);let p=i.statusCode??0,g=p!==204&&p!==205&&p!==304;n(new Response(g?Buffer.concat(u):null,{status:p,statusText:i.statusMessage??"",headers:d}));});}),l.end();})}async function Ha(e){let t=e.timeoutMs??Ba,s=e.chunkBytes??mn,{size:n}=await promises.stat(e.file.path),r=await qa(e.file.path),a=`${e.baseUrl}${e.sessionsPath??"/api/datasets/publish/uploads"}`,o={...e.headers,"Content-Type":"application/json"},l={size:n,sha256:r};for(let[g,f]of Object.entries(e.fields))f!==void 0&&(l[g]=f);let c=await ot(()=>Kt(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 g=await ot(()=>Kt(u,{method:"HEAD",headers:e.headers},t));if(!g.ok)throw new Error(`upload session probe failed: HTTP ${g.status}`);let f=Number(g.headers.get("upload-offset"));if(!Number.isInteger(f))throw new Error("upload session probe did not return Upload-Offset");return f},p=await promises.open(e.file.path,"r");try{let g=0,f=0,y=Buffer.alloc(s);for(;g<n;){let w=Math.min(s,n-g),{bytesRead:v}=await p.read(y,0,w,g);if(v!==w)throw new Error(`archive shrank mid-upload: read ${v} of ${w} bytes at offset ${g}`);let b=y.subarray(0,w),S=crypto.createHash("sha256").update(b).digest(),x;try{x=await ot(()=>Kt(u,{method:"PATCH",headers:{...e.headers,"Content-Type":"application/offset+octet-stream","Upload-Offset":String(g),"Upload-Checksum":`sha256 ${S.toString("base64")}`},body:new Uint8Array(b)},t));}catch(D){if(f+=1,f>=je)throw D;await Yt(Wt(f));try{g=await d();}catch{}continue}if(x.status===409){if(f+=1,f>=je)return x;g=await d();continue}if(!x.ok)return x;let B=Number(x.headers.get("upload-offset"));if(!Number.isInteger(B)||B<=g)throw new Error("resumable upload did not advance Upload-Offset");g=B,f=0,e.onBytes?.(g,n);}let h;for(let w=1;w<=je;w++)try{return await ot(()=>Va(`${u}/complete`,e.headers,t))}catch(v){h=v,w<je&&await Yt(Wt(w));}throw h}finally{await p.close();}}var De,mn,je,hn,yn,Ba,Yt,za,Xt=it(()=>{Gt();De=256*1024*1024;mn=6*1024*1024,je=4,hn=3,yn=60,Ba=6e5;Yt=e=>new Promise(t=>setTimeout(t,e));za=e=>e.status===429||e.status===503;});var Pn={};Ht(Pn,{EvolveUploadTimeoutError:()=>Be,UPLOAD_TIMEOUT_MS:()=>ps,postMultipartFile:()=>ri});function En(e,t){return new Promise((s,n)=>{e.write(t,r=>r?n(r):s());})}async function ri(e){let t=`----evolve${crypto.randomUUID().replace(/-/g,"")}`,s=[];for(let[b,S]of Object.entries(e.fields))S!==void 0&&s.push(`--${t}\r
3
3
  Content-Disposition: form-data; name="${b}"\r
4
4
  \r
5
5
  ${S}\r
6
- `);n.push(`--${t}\r
6
+ `);s.push(`--${t}\r
7
7
  Content-Disposition: form-data; name="archive"; filename="${e.file.filename}"\r
8
8
  Content-Type: application/gzip\r
9
9
  \r
10
- `);let s=Buffer.from(n.join(""),"utf8"),r=Buffer.from(`\r
10
+ `);let n=Buffer.from(s.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??gn,u,d,p=new Promise((b,S)=>{d=S;});p.catch(()=>{});let g=b=>Promise.race([b,p]),f,y=()=>{f!==void 0&&clearTimeout(f),f=setTimeout(()=>{u=new Be(e.url,i),c.destroy(u),d(u);},i),f.unref();};c.on("error",b=>d(u??b)),y();let h,w=new Promise((b,S)=>{c.on("response",x=>{h=x,y(),b(x);}),c.on("error",x=>{h===void 0&&S(x);});});w.catch(()=>{});let v=fs.createReadStream(e.file.path);try{let b=(async()=>{await Ps(c,s),y();let A=0;for await(let I of v)await Ps(c,I),y(),A+=I.length,e.onBytes?.(A,a);await new Promise(I=>{c.end(r,I);});})();try{await g(b);}catch(A){if(v.destroy(),h===void 0)throw c.destroy(),u??A}let S=await g(w).catch(A=>{throw u??A}),x=(async()=>{let A=[];for await(let I of S)y(),A.push(I);return Buffer.concat(A)})(),B=await g(x).catch(A=>{throw u??A}),D=S.statusCode??0,ke=new Headers;for(let[A,I]of Object.entries(S.headers))if(typeof I=="string")ke.set(A,I);else if(Array.isArray(I))for(let W of I)ke.append(A,W);let rt=D!==204&&D!==205&&D!==304;return new Response(rt?B:null,{status:D,statusText:S.statusMessage??"",headers:ke})}finally{f!==void 0&&clearTimeout(f);}}var gn,Be,fn=at(()=>{gn=6e5,Be=class extends Error{name="EvolveUploadTimeoutError";constructor(t,n){super(`upload to ${t} timed out: no socket activity for ${Math.round(n/1e3)}s`);}};});var ht={};Ht(ht,{MAX_INLINE_ARCHIVE_BYTES:()=>Ms,crc32Fallback:()=>Us,extractTarGz:()=>Ei,shouldStore:()=>Ns,tarGzTopLevelName:()=>Pi,tarGzipDirectory:()=>Ti,tarGzipDirectoryToFile:()=>Fs});async function ki(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(bi.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 Ns(e,t){if(t<vi)return false;let n=await promises.open(e,"r"),s;try{let a=Buffer.allocUnsafe(Os),{bytesRead:o}=await n.read(a,0,Os,0);s=a.subarray(0,o);}finally{await n.close();}return s.length===0?false:ii.deflateRawSync(s,{level:1}).length*20>=s.length*19}function Us(e,t=0){let n=~t;for(let s=0;s<e.length;s++)n=xi[(n^e[s])&255]^n>>>8;return ~n>>>0}async function Ai(e){let t=Symbol("pending"),n=await Promise.race([e,Promise.resolve(t)]);return n===t?null:n}async function Fs(e,t){let n=await ki(e),s=tarStream.pack(),r=fs.createWriteStream(t);r.on("error",()=>{}),s.on("error",()=>{});let a=new hn(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 Ns(u,p));let g=s.entry({name:i,size:p,mode:d,mtime:new Date(0),uid:0,gid:0,uname:"",gname:"",type:"file"}),f=promises$1.pipeline(fs.createReadStream(u),g),y=!1,h=null;for(f.then(()=>{},()=>{}).then(()=>{y=!0,h?.(Cs);});;){if(!y){let v=await new Promise((b,S)=>{h=b,c().then(b,S);});if(h=null,v===Cs)continue;if(l=null,v.done)break;await a.write(v.value);continue}await new Promise(v=>setImmediate(v));let w=await Ai(c());if(w===null||(l=null,w.done))break;await a.write(w.value);}await f;}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 Ti(e,t=Ms){let n=await promises.mkdtemp(path.join(os$1.tmpdir(),"evolve-tar-"));try{let s=path.join(n,"archive.tar.gz");await Fs(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 Ei(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),ii.createGunzip(),s),a]);}catch(o){throw s.destroy(),o}return r}async function Pi(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),ii.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 bi,vi,Os,wi,Si,mn,xi,Ri,hn,Cs,Ms,yt=at(()=>{bi=new Set([".git",".DS_Store",".venv"]);vi=64*1024,Os=128*1024,wi=65535,Si=1024*1024,mn=32*1024;xi=(()=>{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})(),Ri=ii__default.default.crc32??Us,hn=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?wi:Si;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=Ri(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(ii.deflateRawSync(t,{level:9,finishFlush:ii.constants.Z_SYNC_FLUSH,...this.window?{dictionary:this.window}:{}}));this.window=t.length>=mn?Buffer.from(t.subarray(t.length-mn)):this.window?Buffer.concat([this.window,t]).subarray(-mn):Buffer.from(t);}out(t){return new Promise((n,s)=>{this.sink.write(t,r=>r==null?n():s(r));})}},Cs=Symbol("feed settled");Ms=256*1024*1024;});var ve="EVOLVE_API_KEY";var we=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai";Xt();Gt();var ot=["QUEUED","RUNNING","SCORING","SCORED","SCORING_ERROR","INFRASTRUCTURE_ERROR","BUDGET","INDETERMINATE","CANCELLED"],lt=["e2b","daytona","modal"],ut=["my","shared","org"],ct=["job","check","all"],Je=["queued","running","completed","failed"],Ne=["queued","running","completed"];function Se(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 Qt(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 Zt=["dataset_flag","job_dataset_record","task_hash","none"],en=["hash_mismatch","task_not_in_dataset","no_dataset_named","dataset_ambiguous","no_hash_match","no_task_digest"];function J(e){let t=e.link??{};return {visibility:e.visibility==="LINK"?"LINK":"PRIVATE",link:{enabled:t.enabled===true,...typeof t.url=="string"?{url:t.url}:{}},emails:(Array.isArray(e.emails)?e.emails:[]).map(n=>{let s=n;return {email:String(s.email??""),shared_by:String(s.shared_by??""),created_at:String(s.created_at??"")}})}}var tn=1e9;function Ue(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 Fe(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 nn=["trace-parsed","verifier","trace-stdout","trace-stderr","trace-atif","trajectory","agent-home","filesystem"],dt=["agent","verifier","setup","system","metrics"],pt=["trace-stdout","trace-stderr","agent-home"],vs=["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","session_not_found","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","not_found","not_captured","filesystem_state","feature_unsupported","provider_unreachable","task_package_not_retained","internal_error"];function sn(e){return typeof e=="string"&&vs.includes(e)}function Ka(e,t,n){return e==="measured"&&t===0&&n.every(s=>(s??null)===null)}function ws(e,t,n){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:t==="measured"?Ka(t,e,n)?{lane:"unmeasured"}:{lane:"measured",usd:e}:t==="measured_provisional"?{lane:"floor",usd:e}:{lane:"unmeasured"}}function xe(e){let t=e.agent_result;return ws(t?.cost_usd,e.spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function rn(e){let t=e.judge_result;return ws(t?.cost_usd,e.judge_spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function Me(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 an(e){let t=xe(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 Ss={stdoutFile:"stdout.log",harborCopies:[]},on={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:[]}},Wa={"claude-code":"claude",codex:"codex","gemini-cli":"gemini","qwen-coder":"qwen","kimi-code":"kimi",opencode:"opencode"};function xs(e){let t=e in on?e:Wa[e];return t===void 0?Ss:on[t]}var Ya="/logs/agent",Xa="agent-home.json";function Rs(e){let t=As(Ya,e);if(t!==null)return t;let n=e.replace(/^\/+/,"");if(n===Xa)return n;let s=/^(?:root|home\/[^/]+)\/(.+)$/.exec(n);return s!==null?s[1]:`sessions/${n}`}function As(e,t){return t.startsWith(`${e}/`)?t.slice(e.length+1):null}function Ts(e,t){let n=Rs(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 Es(e,t){for(let n of e.harborCopies){let s=As(n.sandboxRoot,t);if(s!==null)return `${n.agentDir}/${s}`}return null}function Qa(e,t){let n=new Set,s={};for(let r of Object.keys(t).sort()){s[`agent/${Ts(n,r)}`]=t[r];let a=Es(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 gt(e){return JSON.stringify(e,null,2)+`
13
- `}function ft(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 ln(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 Za(e){let t=e.agent_result;return t==null?t??null:xe(e).lane==="measured"?t:{...t,cost_usd:null}}function un(e){let{trial:t}=e,n={};n["config.json"]=gt({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"]=gt({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:Za(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=xs(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(n.length+a+r.length)}}),i=e.timeoutMs??ps,u,d,p=new Promise((b,S)=>{d=S;});p.catch(()=>{});let g=b=>Promise.race([b,p]),f,y=()=>{f!==void 0&&clearTimeout(f),f=setTimeout(()=>{u=new Be(e.url,i),c.destroy(u),d(u);},i),f.unref();};c.on("error",b=>d(u??b)),y();let h,w=new Promise((b,S)=>{c.on("response",x=>{h=x,y(),b(x);}),c.on("error",x=>{h===void 0&&S(x);});});w.catch(()=>{});let v=fs$1.createReadStream(e.file.path);try{let b=(async()=>{await En(c,n),y();let A=0;for await(let I of v)await En(c,I),y(),A+=I.length,e.onBytes?.(A,a);await new Promise(I=>{c.end(r,I);});})();try{await g(b);}catch(A){if(v.destroy(),h===void 0)throw c.destroy(),u??A}let S=await g(w).catch(A=>{throw u??A}),x=(async()=>{let A=[];for await(let I of S)y(),A.push(I);return Buffer.concat(A)})(),B=await g(x).catch(A=>{throw u??A}),D=S.statusCode??0,ke=new Headers;for(let[A,I]of Object.entries(S.headers))if(typeof I=="string")ke.set(A,I);else if(Array.isArray(I))for(let W of I)ke.append(A,W);let at=D!==204&&D!==205&&D!==304;return new Response(at?B:null,{status:D,statusText:S.statusMessage??"",headers:ke})}finally{f!==void 0&&clearTimeout(f);}}var ps,Be,gs=it(()=>{ps=6e5,Be=class extends Error{name="EvolveUploadTimeoutError";constructor(t,s){super(`upload to ${t} timed out: no socket activity for ${Math.round(s/1e3)}s`);}};});var yt={};Ht(yt,{MAX_INLINE_ARCHIVE_BYTES:()=>Fn,crc32Fallback:()=>Nn,extractTarGz:()=>Ti,shouldStore:()=>Jn,tarGzTopLevelName:()=>Ei,tarGzipDirectory:()=>Ai,tarGzipDirectoryToFile:()=>Un});async function bi(e){let t=[],s=async n=>{let r=n===""?e:path.join(e,n),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(_i.has(o.name))continue;let l=n===""?o.name:`${n}/${o.name}`,c=path.join(r,o.name),i=await promises.lstat(c);i.isSymbolicLink()||(i.isDirectory()?await s(l):i.isFile()&&t.push({rel:l,abs:c,mode:i.mode&73?493:420,size:i.size}));}};return await s(""),t.sort((n,r)=>n.rel<r.rel?-1:n.rel>r.rel?1:0)}async function Jn(e,t){if(t<ki)return false;let s=await promises.open(e,"r"),n;try{let a=Buffer.allocUnsafe($n),{bytesRead:o}=await s.read(a,0,$n,0);n=a.subarray(0,o);}finally{await s.close();}return n.length===0?false:ai.deflateRawSync(n,{level:1}).length*20>=n.length*19}function Nn(e,t=0){let s=~t;for(let n=0;n<e.length;n++)s=Si[(s^e[n])&255]^s>>>8;return ~s>>>0}async function Ri(e){let t=Symbol("pending"),s=await Promise.race([e,Promise.resolve(t)]);return s===t?null:s}async function Un(e,t){let s=await bi(e),n=tarStream.pack(),r=fs$1.createWriteStream(t);r.on("error",()=>{}),n.on("error",()=>{});let a=new ms(r),o=n[Symbol.asyncIterator](),l=null,c=()=>l??=o.next();try{for(let{rel:i,abs:u,mode:d,size:p}of s){await a.setStored(await Jn(u,p));let g=n.entry({name:i,size:p,mode:d,mtime:new Date(0),uid:0,gid:0,uname:"",gname:"",type:"file"}),f=promises$1.pipeline(fs$1.createReadStream(u),g),y=!1,h=null;for(f.then(()=>{},()=>{}).then(()=>{y=!0,h?.(On);});;){if(!y){let v=await new Promise((b,S)=>{h=b,c().then(b,S);});if(h=null,v===On)continue;if(l=null,v.done)break;await a.write(v.value);continue}await new Promise(v=>setImmediate(v));let w=await Ri(c());if(w===null||(l=null,w.done))break;await a.write(w.value);}await f;}for(n.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(()=>{}),n.destroy(),r.destroy(),i}}async function Ai(e,t=Fn){let s=await promises.mkdtemp(path.join(os$1.tmpdir(),"evolve-tar-"));try{let n=path.join(s,"archive.tar.gz");await Un(e,n);let{size:r}=await promises.stat(n);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(n)}finally{await promises.rm(s,{recursive:true,force:true});}}async function Ti(e,t,s){let n=tarStream.extract(),r=[],a=(async()=>{for await(let o of n){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]!==s)throw new Error(`refusing to extract "${l}": entry outside ${s}/`);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),ai.createGunzip(),n),a]);}catch(o){throw n.destroy(),o}return r}async function Ei(e){let t=tarStream.extract(),s=null,n=(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(s===null)s=o[0];else if(o[0]!==s)throw new Error(`refusing to extract "${a}": the archive holds more than one top-level directory (${s}/)`);r.resume();}})();try{await Promise.all([promises$1.pipeline(fs$1.createReadStream(e),ai.createGunzip(),t),n]);}catch(r){throw t.destroy(),r}if(s===null)throw new Error("refusing to extract: the archive holds no entries");return s}var _i,ki,$n,vi,wi,fs,Si,xi,ms,On,Fn,_t=it(()=>{_i=new Set([".git",".DS_Store",".venv"]);ki=64*1024,$n=128*1024,vi=65535,wi=1024*1024,fs=32*1024;Si=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let s=t;for(let n=0;n<8;n++)s=s&1?3988292384^s>>>1:s>>>1;e[t]=s;}return e})(),xi=ai__default.default.crc32??Nn,ms=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 s=this.stored?vi:wi;for(;this.heldBytes>=s||t&&this.heldBytes>0;){let n=this.held.length===1?this.held[0]:Buffer.concat(this.held,this.heldBytes),r=Math.min(s,n.length),a=n.subarray(r);this.held=a.length>0?[a]:[],this.heldBytes=a.length,await this.emitBlock(n.subarray(0,r));}}async emitBlock(t){if(this.crc=xi(t,this.crc),this.plainLength+=t.length,this.stored){let s=Buffer.allocUnsafe(5+t.length);s[0]=0,s.writeUInt16LE(t.length,1),s.writeUInt16LE(t.length^65535,3),t.copy(s,5),await this.out(s);}else await this.out(ai.deflateRawSync(t,{level:9,finishFlush:ai.constants.Z_SYNC_FLUSH,...this.window?{dictionary:this.window}:{}}));this.window=t.length>=fs?Buffer.from(t.subarray(t.length-fs)):this.window?Buffer.concat([this.window,t]).subarray(-fs):Buffer.from(t);}out(t){return new Promise((s,n)=>{this.sink.write(t,r=>r==null?s():n(r));})}},On=Symbol("feed settled");Fn=256*1024*1024;});var ve="EVOLVE_API_KEY";var we=process.env.EVOLVE_DASHBOARD_URL||"https://dashboard.evolvingmachines.ai";Xt();Gt();var lt=["QUEUED","RUNNING","SCORING","SCORED","SCORING_ERROR","INFRASTRUCTURE_ERROR","BUDGET","INDETERMINATE","CANCELLED"],ut=["e2b","daytona","modal"],ct=["my","shared","org"],dt=["job","check","all"],Je=["queued","running","completed","failed"],Ne=["queued","running","completed"];function Se(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.provisional!="boolean")return null;let s=n=>typeof n=="number"&&Number.isFinite(n)?n:null;return {provisional:t.provisional,spent_usd:s(t.spent_usd),input_tokens:s(t.input_tokens),cached_input_tokens:s(t.cached_input_tokens),cache_write_tokens:s(t.cache_write_tokens),output_tokens:s(t.output_tokens),as_of:typeof t.as_of=="string"?t.as_of:null}}function Qt(e){let t=e.stats?.evals??{},s=[];for(let n of Object.keys(t).sort()){let r=t[n]?.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),s.push({evals_key:n,points:a}));}return s}var Zt=["dataset_flag","job_dataset_record","task_hash","none"],es=["hash_mismatch","task_not_in_dataset","no_dataset_named","dataset_ambiguous","no_hash_match","no_task_digest"];function J(e){let t=e.link??{};return {visibility:e.visibility==="LINK"?"LINK":"PRIVATE",link:{enabled:t.enabled===true,...typeof t.url=="string"?{url:t.url}:{}},emails:(Array.isArray(e.emails)?e.emails:[]).map(s=>{let n=s;return {email:String(n.email??""),shared_by:String(n.shared_by??""),created_at:String(n.created_at??"")}})}}var ts=1e9;function Ue(e){let t=e.data?.update;if(!t||typeof t!="object"||Array.isArray(t))return null;let s=t;if(s.sessionUpdate!=="usage"||s.source!=="gateway")return null;let n=s.usage;return !n||typeof n!="object"||Array.isArray(n)?null:s}function Fe(e,t,s){if(e!=null){if(!Array.isArray(e)||e.some(n=>typeof n!="string"))throw new Error(`${s} storedAt is not a list of date-time strings`);if(e.length!==t)throw new Error(`${s} storedAt has ${e.length} entries for ${t} events (one per event, index-aligned)`);return e}}var ss=["trace-parsed","verifier","trace-stdout","trace-stderr","trace-atif","trajectory","agent-home","filesystem"],pt=["agent","verifier","setup","system","metrics"],gt=["trace-stdout","trace-stderr","agent-home"],kn=["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","session_not_found","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","not_found","not_captured","filesystem_state","feature_unsupported","provider_unreachable","task_package_not_retained","internal_error"];function ns(e){return typeof e=="string"&&kn.includes(e)}function Ga(e,t,s){return e==="measured"&&t===0&&s.every(n=>(n??null)===null)}function vn(e,t,s){return typeof e!="number"||!Number.isFinite(e)?{lane:"unmeasured"}:t==="measured"?Ga(t,e,s)?{lane:"unmeasured"}:{lane:"measured",usd:e}:t==="measured_provisional"?{lane:"floor",usd:e}:{lane:"unmeasured"}}function xe(e){let t=e.agent_result;return vn(t?.cost_usd,e.spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function rs(e){let t=e.judge_result;return vn(t?.cost_usd,e.judge_spend_source,[t?.n_input_tokens,t?.n_cache_tokens,t?.n_output_tokens])}function Me(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 as(e){let t=xe(e);if(t.lane!=="unmeasured")return t;let s=e.usage;return s&&s.provisional&&typeof s.spent_usd=="number"?{lane:"floor",usd:s.spent_usd}:t}var wn={stdoutFile:"stdout.log",harborCopies:[]},is={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 Sn(e){let t=e in is?e:Ka[e];return t===void 0?wn:is[t]}var Wa="/logs/agent",Ya="agent-home.json";function xn(e){let t=Rn(Wa,e);if(t!==null)return t;let s=e.replace(/^\/+/,"");if(s===Ya)return s;let n=/^(?:root|home\/[^/]+)\/(.+)$/.exec(s);return n!==null?n[1]:`sessions/${s}`}function Rn(e,t){return t.startsWith(`${e}/`)?t.slice(e.length+1):null}function An(e,t){let s=xn(t),n=t.replace(/^\/+/,"");e.has(s)&&(s=n);for(let r=2;e.has(s);r++)s=`${n}.${r}`;return e.add(s),s}function Tn(e,t){for(let s of e.harborCopies){let n=Rn(s.sandboxRoot,t);if(n!==null)return `${s.agentDir}/${n}`}return null}function Xa(e,t){let s=new Set,n={};for(let r of Object.keys(t).sort()){n[`agent/${An(s,r)}`]=t[r];let a=Tn(e,r);a!==null&&!s.has(a)&&(s.add(a),n[`agent/${a}`]=t[r]);}return Object.fromEntries(Object.keys(n).sort().map(r=>[r,n[r]]))}function ft(e){return JSON.stringify(e,null,2)+`
13
+ `}function mt(e,t,s){return {trial_id:e.id,job_id:e.job_id,user_id:s,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 os(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 Qa(e){let t=e.agent_result;return t==null?t??null:xe(e).lane==="measured"?t:{...t,cost_usd:null}}function ls(e){let{trial:t}=e,s={};s["config.json"]=ft({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}}),s["result.json"]=ft({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:Qa(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 n=Sn(t.agent_info.name);return e.atif!==null&&(s["agent/trajectory.json"]=e.atif),e.stdout!==null&&(s[`agent/${n.stdoutFile}`]=e.stdout),e.stderr!==null&&(s["agent/stderr.log"]=e.stderr),e.events.length>0&&(s["agent/trace-parsed.jsonl"]=e.events.map(r=>JSON.stringify(r)).join(`
14
14
  `)+`
15
- `),e.home!==null&&Object.assign(n,Qa(s,e.home)),e.verifierLog!==null&&(n["verifier/test-stdout.txt"]=e.verifierLog),t.verifier_result?.rewards&&(n["verifier/reward.json"]=gt(t.verifier_result.rewards)),t.exception_info&&(n["exception.txt"]=`${t.exception_info.exception_type}: ${t.exception_info.exception_message}
16
- `),n["evolve.json"]=gt(ft(t,e.job,e.userId)),n}function cn(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 dn(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 pn(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}}}fn();var T=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 sn(this.code)}};async function Rt(e){let t=await e.text().catch(()=>""),n=e.headers?.get?.("x-request-id")??void 0,s=Le(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 T(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 T(e.status,"unknown_error",r.error,{retryAfterSec:s,requestId:n})}catch(r){if(r instanceof T)throw r}throw new T(e.status,"unknown_error",t||e.statusText,{retryAfterSec:s,requestId:n})}var bn=class extends Error{dataset;constructor(t){super(`Dataset "${t}" has no active version`),this.name="NoActiveVersionError",this.dataset=t;}},ge=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;}},Ni=1e3,Ve=3e4,Ui=new Set(["COMPLETED","CANCELLED","FAILED"]),Fi=new Set(["job.completed","job.cancelled","job.failed"]),He=2e3,Mi=30*6e4;function Y(e,t){let n=t?.apiKey||process.env[ve];if(!n)throw new Error(`${e}() requires an API key. Set ${ve} or pass { apiKey } in config.`);let s=(t?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||we).replace(/\/$/,"");return {apiKey:n,baseUrl:s,...t?.org?{org:t.org}:{}}}async function _(e,t,n){let s=await fetch(`${e.baseUrl}${t}`,{...n,headers:{Authorization:`Bearer ${e.apiKey}`,...n?.headers}});return s.ok||await Rt(s),s}function _t(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 Vs(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 Bi(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 qi(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 Ae(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:Bi(e.manifest),source:qi(e.source)}}function Hs(e){return {code:e.code??"",step:e.step??"",message:e.message??"",excerpt:e.excerpt??null}}function zi(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>({task_name:t.task_name??"",failure:Hs(t.failure??{})})):[]}function Vi(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 Hi(e){return {action:e.action,type:e.type,job_id:e.job_id}}function Gi(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 Ki(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 ze(e){return typeof e=="number"?e:null}function Wi(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 Yi(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:Ks(t.task_links),datasets:Xi(t.datasets)}}var Gs=e=>typeof e=="string"&&Zt.includes(e),kn=e=>typeof e=="string"&&en.includes(e),vn=e=>Array.isArray(e)&&e.every(t=>typeof t=="string")?[...e]:null;function Ks(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"||!Gs(s.linked_by)||![s.n_trials,s.n_linked,s.n_unlinked].every(c=>Number.isInteger(c)&&c>=0))return null;let a=vn(s.datasets),o=vn(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(!kn(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 Xi(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let n of e){if(typeof n!="object"||n===null)return null;let{name:s,version:r,path:a}=n;if(!(s===void 0&&typeof a=="string")){if(typeof s!="string"||s==="")return null;t.push({name:s,version:typeof r=="string"?r:null});}}return t.length>0?t:null}function Qi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Gs(t.linked_by)||t.link_reason!==null&&t.link_reason!==void 0&&!kn(t.link_reason))return null;let n=t.candidates===void 0?[]:vn(t.candidates);return n===null?null:{linked_by:t.linked_by,link_reason:kn(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}}var Zi=["creator","member","shared","link"];function eo(e){return typeof e=="string"&&Zi.includes(e)}function H(e){let t=e.trials??{};return {kind:"job",id:e.id,job_name:e.job_name,status:e.status,datasets:(e.datasets??[]).map(Sn),agents:(e.agents??[]).map(Vs),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:Gi(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:ze(e.agent_timeout_multiplier),verifier_timeout_multiplier:ze(e.verifier_timeout_multiplier),agent_setup_timeout_multiplier:ze(e.agent_setup_timeout_multiplier),environment_build_timeout_multiplier:ze(e.environment_build_timeout_multiplier),sandbox_provider:e.sandbox_provider??null,org:typeof e.org=="string"?e.org:null,visibility:e.visibility==="LINK"?"LINK":"PRIVATE",viewer:eo(e.viewer)?e.viewer:null,system_log:e.system_log===true,counts:e.counts,build_exclusions:Wi(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(Hi),is_regrade:e.is_regrade===true,upload:Yi(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 C(e,t){let n=e??{};return {items:Array.isArray(n.items)?n.items.map(t):[],nextCursor:n.nextCursor??null,hasMore:n.hasMore===true}}function N(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 ee(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 to(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 wt(e){return !e||typeof e!="object"||Array.isArray(e)?null:{...e,usage:Se(e.usage)}}function no(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 wn(e){return {id:e.id,job_id:e.job_id,task_name:e.task_name,source:e.source,agent_info:to(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:wt(e.analysis),environment_setup:ee(e.environment_setup),agent_setup:ee(e.agent_setup),agent_execution:ee(e.agent_execution),verifier:ee(e.verifier),queue_wait:ee(e.queue_wait),harness_bundle:ee(e.harness_bundle),image_prepare:ee(e.image_prepare),shared_verify_setup:ee(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:Se(e.usage),max_trial_spend_usd:e.max_trial_spend_usd??null,sandbox_provider:e.sandbox_provider??null,sandbox_provider_degrade:no(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(Ki):[],session_ref:e.session_ref??null,upload:so(e.upload),started_at:e.started_at??null,finished_at:e.finished_at??null}}function so(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:Qi(t.link)}}function bt(e){return {name:e.name,org:typeof e.org=="string"?e.org:null,source:e.source,run_command:e.run_command,env:e.env??{},created_at:e.created_at,updated_at:e.updated_at}}function Te(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 qe(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:Ks(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 Ws(e){let t=e??{};return {scored:t.scored??0,total:t.total??0}}function ro(e){return {id:e.id,datasets:(e.datasets??[]).map(Sn),status:e.status,mean_reward:e.mean_reward??null,coverage:Ws(e.coverage),cost_usd:e.cost_usd??0,agents:(e.agents||[]).map(Vs),started_at:e.started_at}}function ao(e){return {job_id:e.job_id,status:e.status,mean_reward:e.mean_reward??null,coverage:Ws(e.coverage)}}function io(e){return {task_name:e.task_name,disagreement:e.disagreement===true,cells:(e.cells||[]).map(ao)}}function Ys(e){return {seq:e.seq,type:e.type,data:e.data??{}}}function Xs(e){return (Array.isArray(e)?e:[]).map((n,s)=>({seq:tn+s,type:"usage",data:n&&typeof n=="object"&&!Array.isArray(n)?n:{}}))}function oo(e){return {trial_id:e.trial_id,task_name:e.task_name??null,match_count:e.match_count,events:(e.events||[]).map(Ys)}}function xn(e){return e?e.suffix!==void 0?`bytes=-${e.suffix}`:e.start===void 0?null:`bytes=${e.start}-${e.end??""}`:null}function te(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 Qs(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(s,Xa(n,e.home)),e.verifierLog!==null&&(s["verifier/test-stdout.txt"]=e.verifierLog),t.verifier_result?.rewards&&(s["verifier/reward.json"]=ft(t.verifier_result.rewards)),t.exception_info&&(s["exception.txt"]=`${t.exception_info.exception_type}: ${t.exception_info.exception_message}
16
+ `),s["evolve.json"]=ft(mt(t,e.job,e.userId)),s}function us(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 cs(e,t,s){return {task_check_id:e.id,check_id:t.id,dataset:t.source.dataset,task_name:e.task_name,user_id:s,provider:t.sandbox_provider,status:e.status,model_name:t.model_name,gateway:{cost_usd:e.cost_usd}}}function ds(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}}}gs();var T=class extends Error{status;code;param;details;retryAfterSec;requestId;constructor(t,s,n,r){super(n),this.name="EvolveApiError",this.status=t,this.code=s,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 ns(this.code)}};async function At(e){let t=await e.text().catch(()=>""),s=e.headers?.get?.("x-request-id")??void 0,n=Le(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 T(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:n,requestId:typeof r.error.requestId=="string"?r.error.requestId:s})}if(typeof r?.error=="string")throw new T(e.status,"unknown_error",r.error,{retryAfterSec:n,requestId:s})}catch(r){if(r instanceof T)throw r}throw new T(e.status,"unknown_error",t||e.statusText,{retryAfterSec:n,requestId:s})}var _s=class extends Error{dataset;constructor(t){super(`Dataset "${t}" has no active version`),this.name="NoActiveVersionError",this.dataset=t;}},ge=class extends Error{name="ImportSettleError";code;importId;dataset;version;state;constructor(t,s,n){super(s),this.code=t,this.importId=n.importId,this.dataset=n.dataset,this.version=n.version,this.state=n.state;}},Ji=1e3,Ve=3e4,Ni=new Set(["COMPLETED","CANCELLED","FAILED"]),Ui=new Set(["job.completed","job.cancelled","job.failed"]),He=2e3,Fi=30*6e4;function Y(e,t){let s=t?.apiKey||process.env[ve];if(!s)throw new Error(`${e}() requires an API key. Set ${ve} or pass { apiKey } in config.`);let n=(t?.baseUrl||process.env.EVOLVE_DASHBOARD_URL||we).replace(/\/$/,"");return {apiKey:s,baseUrl:n,...t?.org?{org:t.org}:{}}}async function _(e,t,s){let n=await fetch(`${e.baseUrl}${t}`,{...s,headers:{Authorization:`Bearer ${e.apiKey}`,...s?.headers}});return n.ok||await At(n),n}function bt(e){let t=e.indexOf("@");if(t===-1)return {name:e.trim()};let s=e.slice(0,t).trim(),n=e.slice(t+1).trim();if(!s||!n)throw new Error(`Invalid dataset ref "${e}": expected "name" or "name@version"`);return {name:s,version:n}}function ws(e){return {name:e.name,version:e.version}}function zn(e){let t=e.kwargs,s=Array.isArray(e.skills)?e.skills.filter(a=>typeof a=="string"):[],n=Array.isArray(e.skill_locks)?e.skill_locks:null,r=n?n.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:s,skill_locks:r}}function Mi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.name!="string")return null;let s=Array.isArray(t.authors)?t.authors.flatMap(n=>{if(!n||typeof n!="object"||Array.isArray(n))return [];let r=n;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:s,keywords:Array.isArray(t.keywords)?t.keywords.filter(n=>typeof n=="string"):[],task_count:typeof t.task_count=="number"?t.task_count:null}}function Bi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,s=r=>typeof t[r]=="string"?t[r]:null;switch(s("kind")??(s("commit")!==null?"git":null)){case "git":{let r=s("ref"),a=s("commit");return r===null||a===null?null:{kind:"git",git_url:s("git_url"),ref:r,commit:a,path:s("path")}}case "archive":{let r=s("digest");return r===null?null:{kind:"archive",digest:r}}case "archive_url":{let r=s("archive_url"),a=s("digest");return r===null||a===null?null:{kind:"archive_url",archive_url:r,digest:a}}case "hub_package":{let r=s("hub_package"),a=s("digest");return r===null||a===null?null:{kind:"hub_package",hub_package:r,digest:a}}default:return null}}function Ae(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:Mi(e.manifest),source:Bi(e.source)}}function Vn(e){return {code:e.code??"",step:e.step??"",message:e.message??"",excerpt:e.excerpt??null}}function qi(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>({task_name:t.task_name??"",failure:Vn(t.failure??{})})):[]}function zi(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 Vi(e){return {action:e.action,type:e.type,job_id:e.job_id}}function Hi(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 Gi(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 ze(e){return typeof e=="number"?e:null}function Ki(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>{let s=typeof t.n_tasks_ran=="number"?t.n_tasks_ran:0;return {dataset:ws(t.dataset??{}),n_tasks_ran:s,n_tasks_selected:typeof t.n_tasks_selected=="number"?t.n_tasks_selected:s,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 Wi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.uploaded_at!="string")return null;let s=t.reported_totals,n=a=>typeof a=="number"&&Number.isFinite(a)?a:null,r=s&&typeof s=="object"&&!Array.isArray(s)&&Number.isInteger(s.n_trials_reporting)?{cost_usd:n(s.cost_usd),n_input_tokens:n(s.n_input_tokens),n_cache_tokens:n(s.n_cache_tokens),n_output_tokens:n(s.n_output_tokens),n_trials_reporting:s.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:Gn(t.task_links),datasets:Yi(t.datasets)}}var Hn=e=>typeof e=="string"&&Zt.includes(e),bs=e=>typeof e=="string"&&es.includes(e),ks=e=>Array.isArray(e)&&e.every(t=>typeof t=="string")?[...e]:null;function Gn(e){if(!Array.isArray(e))return null;let t=[];for(let s of e){if(!s||typeof s!="object"||Array.isArray(s))return null;let n=s;if(typeof n.task_name!="string"||!Hn(n.linked_by)||![n.n_trials,n.n_linked,n.n_unlinked].every(c=>Number.isInteger(c)&&c>=0))return null;let a=ks(n.datasets),o=ks(n.candidates);if(a===null||o===null||!n.link_reasons||typeof n.link_reasons!="object"||Array.isArray(n.link_reasons))return null;let l={};for(let[c,i]of Object.entries(n.link_reasons)){if(!bs(c)||!Number.isInteger(i))return null;l[c]=i;}t.push({task_name:n.task_name,n_trials:n.n_trials,n_linked:n.n_linked,n_unlinked:n.n_unlinked,linked_by:n.linked_by,datasets:a,link_reasons:l,candidates:o});}return t}function Yi(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let s of e){if(typeof s!="object"||s===null)return null;let{name:n,version:r,path:a}=s;if(!(n===void 0&&typeof a=="string")){if(typeof n!="string"||n==="")return null;t.push({name:n,version:typeof r=="string"?r:null});}}return t.length>0?t:null}function Xi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Hn(t.linked_by)||t.link_reason!==null&&t.link_reason!==void 0&&!bs(t.link_reason))return null;let s=t.candidates===void 0?[]:ks(t.candidates);return s===null?null:{linked_by:t.linked_by,link_reason:bs(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:s}}var Qi=["creator","member","shared","link"];function Zi(e){return typeof e=="string"&&Qi.includes(e)}function H(e){let t=e.trials??{};return {kind:"job",id:e.id,job_name:e.job_name,status:e.status,datasets:(e.datasets??[]).map(ws),agents:(e.agents??[]).map(zn),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:Hi(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:ze(e.agent_timeout_multiplier),verifier_timeout_multiplier:ze(e.verifier_timeout_multiplier),agent_setup_timeout_multiplier:ze(e.agent_setup_timeout_multiplier),environment_build_timeout_multiplier:ze(e.environment_build_timeout_multiplier),sandbox_provider:e.sandbox_provider??null,org:typeof e.org=="string"?e.org:null,visibility:e.visibility==="LINK"?"LINK":"PRIVATE",viewer:Zi(e.viewer)?e.viewer:null,system_log:e.system_log===true,counts:e.counts,build_exclusions:Ki(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(Vi),is_regrade:e.is_regrade===true,upload:Wi(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 C(e,t){let s=e??{};return {items:Array.isArray(s.items)?s.items.map(t):[],nextCursor:s.nextCursor??null,hasMore:s.hasMore===true}}function N(e,t){let s=new URLSearchParams;e?.limit!==void 0&&s.set("limit",String(e.limit)),e?.cursor&&s.set("cursor",e.cursor);for(let[r,a]of Object.entries(t??{}))a!==void 0&&s.set(r,a);let n=s.toString();return n?`?${n}`:""}function ee(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 eo(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 St(e){return !e||typeof e!="object"||Array.isArray(e)?null:{...e,usage:Se(e.usage)}}function to(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let{from:t,to:s,reason:n}=e;return typeof t!="string"||typeof s!="string"||typeof n!="string"?null:{from:t,to:s,reason:n}}function vs(e){return {id:e.id,job_id:e.job_id,task_name:e.task_name,source:e.source,agent_info:eo(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:St(e.analysis),environment_setup:ee(e.environment_setup),agent_setup:ee(e.agent_setup),agent_execution:ee(e.agent_execution),verifier:ee(e.verifier),queue_wait:ee(e.queue_wait),harness_bundle:ee(e.harness_bundle),image_prepare:ee(e.image_prepare),shared_verify_setup:ee(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:Se(e.usage),max_trial_spend_usd:e.max_trial_spend_usd??null,sandbox_provider:e.sandbox_provider??null,sandbox_provider_degrade:to(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(Gi):[],session_ref:e.session_ref??null,upload:so(e.upload),started_at:e.started_at??null,finished_at:e.finished_at??null}}function so(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 s=t.reported_agent_result,n=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:s&&typeof s=="object"&&!Array.isArray(s)?{n_input_tokens:n(s.n_input_tokens),n_cache_tokens:n(s.n_cache_tokens),n_output_tokens:n(s.n_output_tokens),cost_usd:n(s.cost_usd)}:null,link:Xi(t.link)}}function kt(e){return {name:e.name,org:typeof e.org=="string"?e.org:null,source:e.source,run_command:e.run_command,env:e.env??{},created_at:e.created_at,updated_at:e.updated_at}}function Te(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 qe(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:Gn(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 Kn(e){let t=e??{};return {scored:t.scored??0,total:t.total??0}}function no(e){return {id:e.id,datasets:(e.datasets??[]).map(ws),status:e.status,mean_reward:e.mean_reward??null,coverage:Kn(e.coverage),cost_usd:e.cost_usd??0,agents:(e.agents||[]).map(zn),started_at:e.started_at}}function ro(e){return {job_id:e.job_id,status:e.status,mean_reward:e.mean_reward??null,coverage:Kn(e.coverage)}}function ao(e){return {task_name:e.task_name,disagreement:e.disagreement===true,cells:(e.cells||[]).map(ro)}}function Wn(e){return {seq:e.seq,type:e.type,data:e.data??{}}}function Yn(e){return (Array.isArray(e)?e:[]).map((s,n)=>({seq:ts+n,type:"usage",data:s&&typeof s=="object"&&!Array.isArray(s)?s:{}}))}function io(e){return {trial_id:e.trial_id,task_name:e.task_name??null,match_count:e.match_count,events:(e.events||[]).map(Wn)}}function Ss(e){return e?e.suffix!==void 0?`bytes=-${e.suffix}`:e.start===void 0?null:`bytes=${e.start}-${e.end??""}`:null}function te(e){if(e?.aborted)throw e.reason instanceof Error?e.reason:new Error("Watch aborted")}function Mn(e,t){return t?.aborted?true:e?.name==="AbortError"}function L(e,t){return new Promise((s,n)=>{let r=setTimeout(()=>{t?.removeEventListener("abort",a),s();},e),a=()=>{clearTimeout(r),n(t?.reason instanceof Error?t.reason:new Error("Watch aborted"));};t?.addEventListener("abort",a,{once:true});})}function Xn(e){let t="",s=false;return {push(n){s&&(n="\r"+n,s=false),n.endsWith("\r")&&(n=n.slice(0,-1),s=true),t+=n.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
- `)});}}}}async function*qs(e,t,n){let s=await _(e,t,{headers:{Accept:"text/event-stream",...n?.lastEventId!==void 0?{"Last-Event-ID":n.lastEventId}:{}},signal:n?.signal});if(!s.body)throw new Error("Event stream response has no body");let r=[],a=Qs(c=>{r.push({event:c.event||"message",...c.id!==void 0?{id:c.id}:{},data:c.data?ir(c.data):{}});}),o=s.body.getReader(),l=new TextDecoder;try{for(;;){let{done:c,value:i}=await o.read();if(c)break;for(a.push(l.decode(i,{stream:!0}));r.length>0;)yield r.shift();}}finally{o.cancel().catch(()=>{});}}function de(e){let t=new URLSearchParams;for(let[s,r]of Object.entries(e))r!==void 0&&t.set(s,String(r));let n=t.toString();return n?`?${n}`:""}function Zs(e){return e.split("/").filter(Boolean).map(encodeURIComponent).join("/")}function Rn(e,t){return {async status(){return await(await _(e,`${t}/filesystem`)).json()},async list(n){return await(await _(e,`${t}/filesystem/files${de({path:n?.path,source:n?.source,cursor:n?.cursor,limit:n?.limit})}`)).json()},async read(n,s){let r=xn(s?.range),a=await _(e,`${t}/filesystem/files/${Zs(n)}${de({source:s?.source})}`,r?{headers:{Range:r}}:void 0);return Buffer.from(await a.arrayBuffer())},async search(n){return await(await _(e,`${t}/filesystem/search${de({q:n.q,path:n.path,regex:n.regex,limit:n.limit,source:n.source})}`)).json()},async changes(n){return await(await _(e,`${t}/filesystem/changes${de({source:n?.source,phase:n?.phase,cursor:n?.cursor,limit:n?.limit})}`)).json()},archive:(async n=>At(e,`${t}/filesystem/archive${de({path:n?.path,source:n?.source})}`,n,"filesystem.tar.gz")),async watch(n){return await(await _(e,`${t}/filesystem/watch`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({paths:n})})).json()},events(n){return qs(e,`${t}/filesystem/events`,n)},async logs(n){return await(await _(e,`${t}/logs${de({stream:n.stream,cursor:n.cursor,limit:n.limit})}`)).json()},logEvents(n){return qs(e,`${t}/logs/events`,n)},async procs(){return await(await _(e,`${t}/procs`)).json()}}}function lo(e,t){return {async status(){return await(await _(e,`${t}/filesystem`)).json()},async list(n){return await(await _(e,`${t}/filesystem/files${de({path:n?.path,cursor:n?.cursor,limit:n?.limit})}`)).json()},async read(n,s){let r=xn(s?.range),a=await _(e,`${t}/filesystem/files/${Zs(n)}`,r?{headers:{Range:r}}:void 0);return Buffer.from(await a.arrayBuffer())}}}function G(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 pe(e){let t=new FormData;for(let[n,s]of Object.entries(e))s!==void 0&&t.set(n,s);return t}async function uo(e){let{readFileSync:t,readdirSync:n,statSync:s}=await import('fs'),{basename:r,join:a,resolve:o}=await import('path'),l=o(e),c=g=>s(g,{throwIfNoEntry:false})?.isFile()===true,i=g=>s(g,{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 g=n(l,{withFileTypes:true}).filter(f=>f.isDirectory()&&!f.name.startsWith(".")).filter(f=>c(a(l,f.name,"task.toml"))).map(f=>f.name);if(i(a(l,"tasks"))||g.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 g of n(d,{withFileTypes:true})){if(!g.isDirectory()||g.name.startsWith("."))continue;let f=a(d,g.name);if(!c(a(f,"task.toml")))throw new Error(`${f} 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:g.name,dir:f});}if(u.length===0)throw new Error(`${d} holds no task directories \u2014 nothing to check`);u.sort((g,f)=>g.name<f.name?-1:g.name>f.name?1:0);}let p=(d===l?[l]:[d,l]).map(g=>a(g,"dataset.toml")).find(c);return {tasks:u.map(({name:g,dir:f})=>({name:g,task_toml:t(a(f,"task.toml"),"utf8")})),...p!==void 0?{dataset_toml:t(p,"utf8")}:{}}}async function co(e,t,n){let{postMultipartFile:s}=await Promise.resolve().then(()=>(fn(),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 Rt(r),r}async function er(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(()=>(Xt(),ks)),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 Rt(l),l}}return await co(e,t,{method:s.method,fields:s.fields,file:{path:n,filename:s.filename},...s.onBytes!==void 0?{onBytes:s.onBytes}:{}})}async function Ee(e,t,n){let{tarGzipDirectoryToFile:s}=await Promise.resolve().then(()=>(yt(),ht)),{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 er(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 tr="x-package-sha256",St=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"},xt=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 nr(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 xt(s,t)}async function sr(e,t){let n=e.headers.get(tr);if(!n)return;let{createHash:s}=await import('crypto'),r=s("sha256").update(t).digest("hex");if(r!==n)throw new St(n,r)}function go(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 rr(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,go(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 xt(Number(u),c);let d=e.headers.get(tr),p=l.digest("hex");if(d&&p!==d)throw new St(d,p);await promises.rename(o,s);}catch(u){throw await promises.rm(o,{force:true}).catch(()=>{}),u}return s}async function At(e,t,n,s){let r=await _(e,t);if(n?.stream){if(!r.body)throw new Error("Download response has no body");return r.body}if(n?.to)return rr(r,n.to,s);let a=Buffer.from(await r.arrayBuffer());return nr(r,a.length),await sr(r,a),a}function X(e){let t=Y("datasets",e);async function n(i){let u=await _(t,`/api/datasets/imports/${encodeURIComponent(i)}`);return Te(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?Ae(i.active_version):null,latest_version:i.latest_version?Ae(i.latest_version):null,versions:(i.versions||[]).map(Ae),selected_version:i.selected_version?Ae(i.selected_version):null,tasks:C(i.tasks,Vi),failed_tasks:zi(i.failed_tasks),upstream:s(i.upstream),created_at:i.created_at,updated_at:i.updated_at}}async function a(i,u){let d=_t(i),p=N(u,{version:d.version}),g=await _(t,`/api/datasets/${encodeURIComponent(d.name)}${p}`);return r(await g.json())}async function o(i,u){let d=u?.pollIntervalMs??He,p=u?.settleTimeoutMs??Mi,g=Date.now()+p,f=`${i.name}@${i.version}`,y=null,h=null,w=()=>h?.state==="FAILED"?new ge("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:h.state}):new ge("settle_timeout",`Import ${i.id} completed, but dataset "${i.name}" version "${i.version}" did not settle within ${p}ms: last observed state ${h?.state??"never observed"}. Keep following with datasets().get("${f}").`,{importId:i.id,dataset:i.name,version:i.version,state:h?.state??null}),v=async b=>{for(;;){te(u?.signal);try{return await b()}catch(S){if(!(S instanceof T)||S.status!==429&&S.status!==503)throw S;let x=g-Date.now();if(x<=0)throw w();await L(Math.min(Math.max((S.retryAfterSec??0)*1e3,d),x),u?.signal);}}};for(;;){te(u?.signal);let b=await v(()=>a(f,{limit:1})),S=b.selected_version;if(S){if(h=S,S.state!==y&&(y=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()>=g)throw w();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?Ae(i.active_version):null,latest_version:i.latest_version?Ae(i.latest_version):null,upstream:s(i.upstream)}}async function c(i){let u=await _(t,`/api/datasets${N(i,{search:i?.search})}`);return C(await u.json(),l)}return {list(i){return G(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 bn(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=_t(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 g=await(await _(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}/build`)).json();return {task_name:g.task_name??u,state:g.state,failure:g.failure&&typeof g.failure=="object"?Hs(g.failure):null,build_log_ref:g.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 uo(u);return await(await _(t,"/api/datasets/preflight",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json()},async publish(i,u){let d=i.source,p=i.org??t.org;if(d?.directory){if(i.name===void 0||i.version===void 0){let{existsSync:f}=await import('fs'),{join:y}=await import('path');if(!(f(y(d.directory,"dataset.toml"))||f(y(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 g=await Ee(t,"/api/datasets/publish",{fields:{name:i.name,version:i.version,org:p},directory:d.directory,filename:"corpus.tar.gz",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{},resumableThreshold:De});return Te(await g.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 g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({name:i.name,version:i.version,archive_url:d.archive_url,org:p})});return Te(await g.json())}if(d&&"hub_package"in d&&d.hub_package){let g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({...i.name!==void 0?{name:i.name}:{},...i.version!==void 0?{version:i.version}:{},hub_package:d.hub_package,org:p})});return Te(await g.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 g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({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}:{},org:p})});return Te(await g.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??He,p=null,g=null;for(;;){te(u?.signal);let f;try{f=await n(i);}catch(h){if(h instanceof T&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,d),u?.signal);continue}throw h}let y=`${f.status}${f.receiving===true?":receiving":""}`;if(y!==p&&(p=y,u?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==g&&(g=h,u?.onProgress?.(f.progress,f));}if(f.status==="FAILED")return f;if(f.status==="COMPLETED")return o(f,u);await L(d,u?.signal);}},download:(async(i,u)=>{let d=_t(i),p=d.version?`?version=${encodeURIComponent(d.version)}`:"",g=await _(t,`/api/datasets/${encodeURIComponent(d.name)}/download${p}`);if(u?.stream){if(!g.body)throw new Error("Package response has no body");return g.body}if(u?.to)return rr(g,u.to,`${d.name}-corpus.tar.gz`);let f=Buffer.from(await g.arrayBuffer());return nr(g,f.length),await sr(g,f),f}),listImports(i){return G(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}`:"",g=await _(t,`/api/datasets/imports${p}`);return C(await g.json(),Te)},i)},async activate(i,u){let d=await _(t,`/api/datasets/${encodeURIComponent(i)}/versions/${encodeURIComponent(u)}/activate`,{method:"POST"});return r(await d.json())},async update(i,u){let d=await _(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 _(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"DELETE"});},taskFiles(i,u){let d=_t(i);if(d.version===void 0)throw new Error(`datasets().taskFiles() needs "name@version" \u2014 a task's files belong to one immutable version (got "${i}")`);return lo(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}`)}}}function Ge(e){let t=Y("agents",e);return {async create(n){let s=zs("agents().create()",{...n,org:n.org??t.org}),r=s.directory?await Ee(t,"/api/agents",{fields:s.fields,directory:s.directory,filename:"source.tar.gz"}):await _(t,"/api/agents",{method:"POST",body:pe(s.fields)});return bt(await r.json())},list(n){return G(async s=>{let r=await _(t,`/api/agents${N(s,{scope:n?.scope})}`);return C(await r.json(),bt)},n)},async get(n){let s=await _(t,`/api/agents/${encodeURIComponent(n)}`);return bt(await s.json())},async delete(n){await _(t,`/api/agents/${encodeURIComponent(n)}`,{method:"DELETE"});},async upsert(n,s){let r=zs("agents().upsert()",{...s,name:n,org:s.org??t.org}),a=r.directory?await Ee(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",fields:r.fields,directory:r.directory,filename:"source.tar.gz"}):await _(t,`/api/agents/${encodeURIComponent(n)}`,{method:"PUT",body:pe(r.fields)});return bt(await a.json())}}}function zs(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,org:t.org,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 _n(e){return {id:e.id,name:e.name,org:typeof e.org=="string"?e.org:null,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 fe(e){let t=Y("skills",e);return {async upload(n,s){if(typeof n!="string"||!n.trim())throw new Error("skills().upload() requires a local skill directory path");let{basename:r,resolve:a}=await import('path'),o=r(a(n)),c=await(await Ee(t,"/api/skills",{fields:{name:o||void 0,org:s?.org??t.org},directory:n,filename:"skill.tar.gz"})).json();return (Array.isArray(c.skills)?c.skills:[c]).map(_n)},list(n){return G(async s=>{let r=await _(t,`/api/skills${N(s,{scope:n?.scope})}`);return C(await r.json(),_n)},n)},async get(n){let r=await(await _(t,`/api/skills/${encodeURIComponent(n)}`)).json();return {..._n(r),skill_md:r.skill_md??null}},async delete(n){await _(t,`/api/skills/${encodeURIComponent(n)}`,{method:"DELETE"});}}}function E(e){let t=Y("jobs",e);async function n(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}`);return H(await u.json())}async function s(i){let u=await _(t,`/api/jobs/imports/${encodeURIComponent(i)}`);return qe(await u.json())}function r(i){return i.kind!=="check"?H(i):{...i,kind:"check",visibility:i.visibility==="LINK"?"LINK":"PRIVATE",cost_usd:ze(i.cost_usd),finished_at:i.finished_at??null}}async function a(i){let u=await _(t,`/api/jobs${N(i,{search:i?.search,scope:i?.scope,kind:i?.kind})}`);return C(await u.json(),r)}function o(i){let u=i.trials??{};return {task_name:i.task_name,source:i.source,trials:{total:u.total??0,byStatus:u.byStatus??{}},mean_reward:i.mean_reward??null,cost_usd:i.cost_usd??null,check:i.check&&typeof i.check=="object"&&!Array.isArray(i.check)?i.check:null}}async function l(i,u){let d=N(u,{status:u?.status?.length?u.status.join(","):void 0,dataset:u?.dataset}),p=await _(t,`/api/jobs/${encodeURIComponent(i)}/trials${d}`);return C(await p.json(),wn)}async function*c(i,u){let{onEvent:d,signal:p}=u??{},g=u?.reconnectDelayMs??Ni,f=u?.maxReconnectDelayMs??Ve,y=null,h=false,w=false,v=g;for(;!h;){te(p);let b;try{b=await fetch(`${t.baseUrl}/api/jobs/${encodeURIComponent(i)}/events`,{headers:{Authorization:`Bearer ${t.apiKey}`,Accept:"text/event-stream",...y!==null?{"Last-Event-ID":String(y)}:{}},signal:p});}catch(A){if(Bs(A,p))throw A;await L(v,p),v=Math.min(v*2,f);continue}if(!b.ok){if(b.status===429||b.status>=500){let A=await b.text().catch(()=>""),I=Le(A,b)??0,W=I>0?Math.max(I*1e3,v):v;await L(W,p),v=Math.min(v*2,f);continue}await Rt(b);}if(!b.body)throw new Error("Event stream response has no body");let S=false,x=[],B=Qs(A=>{let I=Number(A.id),W={seq:Number.isInteger(I)?I:-1,type:A.event||"message",data:A.data?ir(A.data):{}};Number.isInteger(I)&&(y=I),S=true,Fi.has(W.type)&&(h=true),x.push(W);}),D=b.body.getReader(),ke=new TextDecoder;try{for(;!h;){let{done:A,value:I}=await D.read();if(A)break;B.push(ke.decode(I,{stream:!0}));for(let W of x)d?.(W),yield W;x.length=0;}}catch(A){if(Bs(A,p))throw A}finally{await D.cancel().catch(()=>{});}if(h)break;te(p);let rt=await n(i);if(Ui.has(rt.status)){if(w)return rt;w=true;continue}S&&(v=g),await L(v,p),v=Math.min(v*2,f);}return n(i)}return {async start(i,u){let d=i.org??t.org,p=d!==void 0?{...i,org:d}:i,g=await _(t,"/api/jobs",{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(p)});return H(await g.json())},get:n,list(i){return G(u=>a({...u,search:i?.search,scope:i?.scope,kind:i?.kind}),i)},trials(i,u){return G(d=>l(i,{...d,status:u?.status,dataset:u?.dataset}),u)},tasks(i,u){return G(async d=>{let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/tasks${N(d)}`);return C(await p.json(),o)},u)},watch(i,u){return po(c(i,u))},async cancel(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}/cancel`,{method:"POST"});return H(await u.json())},async compare(i){let u=i.map(encodeURIComponent).join(","),p=await(await _(t,`/api/jobs/compare?ids=${u}`)).json();return {jobs:(p.jobs||[]).map(ro),taskMatrix:(p.taskMatrix||[]).map(io)}},async resume(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/resume`,{method:"POST",headers:{"Content-Type":"application/json",...d?.idempotencyKey?{"Idempotency-Key":d.idempotencyKey}:{}},body:JSON.stringify(u??{})});return H(await p.json())},async retry(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/retry`,{method:"POST",headers:{"Content-Type":"application/json",...d?.idempotencyKey?{"Idempotency-Key":d.idempotencyKey}:{}},body:JSON.stringify(u??{})});return H(await p.json())},async regrade(i,u){let d={};u?.statuses?.length&&(d.statuses=u.statuses),u?.task_name!==void 0&&(d.task_name=u.task_name);let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/regrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});return H(await p.json())},async analyze(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/analyze`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u??{})});return H(await d.json())},async watchAnalysis(i,u){let d=u?.pollIntervalMs??He,p=d,g=null;for(;;){te(u?.signal);let f;try{f=await n(i);}catch(v){if(v instanceof T&&(v.status===429||v.status===503)){await L(Math.max((v.retryAfterSec??0)*1e3,p),u?.signal),p=Math.min(p*2,Ve);continue}throw v}let y=f.stats.analysis??null,h=y?JSON.stringify([y.n_completed,y.n_failed,y.n_pending]):null,w=h!==null&&h!==g;if(w&&(g=h,u?.onStats?.(f)),y?.n_pending===0)return f;p=w?d:Math.min(p*2,Ve),await L(p,u?.signal);}},download:(async(i,u)=>At(t,`/api/jobs/${encodeURIComponent(i)}/download`,u,`job-${i}-results.tar.gz`)),async upload(i,u){let d={dataset:u?.dataset};if(typeof i=="object"&&i!==null){if(typeof i.archive_url!="string"||!i.archive_url.trim())throw new Error("jobs().upload() with a URL source requires { archive_url: 'https://\u2026' }");let S=await _(t,"/api/jobs/upload",{method:"POST",body:pe({...d,archive_url:i.archive_url})});return qe(await S.json())}if(typeof i!="string"||!i.trim())throw new Error("jobs().upload() requires a job directory (or .tar.gz archive) path, or { archive_url }");let p={fields:d,filename:"job.tar.gz",resumableThreshold:De,resumablePath:"/api/jobs/upload/uploads",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{}},{stat:g}=await import('fs/promises');if((await g(i).catch(()=>null))?.isFile()){let S=await er(t,"/api/jobs/upload",i,p);return qe(await S.json())}let{existsSync:y}=await import('fs'),{join:h,resolve:w}=await import('path'),v=w(i);for(let S of ["result.json","config.json"])if(!y(h(v,S)))throw new Error(`${v} does not contain ${S}`);let b=await Ee(t,"/api/jobs/upload",{...p,directory:v});return qe(await b.json())},getImport:s,async watchImport(i,u){let d=u?.pollIntervalMs??He,p=null,g=null;for(;;){te(u?.signal);let f;try{f=await s(i);}catch(h){if(h instanceof T&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,d),u?.signal);continue}throw h}let y=`${f.status}${f.receiving?":receiving":""}`;if(y!==p&&(p=y,u?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==g&&(g=h,u?.onProgress?.(f.progress,f));}if(f.status==="COMPLETED"||f.status==="FAILED")return f;await L(d,u?.signal);}},listImports(i){return G(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);let p=d.toString()?`?${d}`:"",g=await _(t,`/api/jobs/imports${p}`);return C(await g.json(),qe)},i)},async delete(i){let d=await(await _(t,`/api/jobs/${encodeURIComponent(i)}`,{method:"DELETE"})).json();return {job_id:d.job_id??i,trials_deleted:d.trials_deleted??0,analyses_deleted:d.analyses_deleted??0}},async share(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async unshare(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async shares(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}/shares`);return J(await u.json())},async grep(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/grep${N(d,{q:u,type:d?.type})}`);return C(await p.json(),oo)}}}function q(e){let t=Y("trials",e);async function n(r,a){let o=await _(t,`/api/trials/${encodeURIComponent(r)}/trace${N(a,{type:a?.type,grep:a?.grep,tail:a?.tail!==void 0?String(a.tail):void 0})}`);return C(await o.json(),Ys)}async function s(r,a){let l=await(await _(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 _(t,`/api/trials/${encodeURIComponent(r)}`);return wn(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 _(t,`/api/trials/${encodeURIComponent(r)}/regrade`,{method:"POST"});return H(await a.json())},async retry(r,a){let o=await _(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 _(t,"/api/trials/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({trial_ids:r})})).json();return {stopped:(o.stopped??[]).map(wn),stopped_analyses:(o.stopped_analyses??[]).map(wt).filter(l=>l!==null),already_terminal:o.already_terminal??[],not_found:o.not_found??[]}},async files(r,a){let o=await _(t,`/api/trials/${encodeURIComponent(r)}/files${N(a)}`);return C(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=xn(o),i=await _(t,`/api/trials/${encodeURIComponent(r)}/files/${l}`,c?{headers:{Range:c}}:void 0);return Buffer.from(await i.arrayBuffer())},filesystem:r=>Rn(t,`/api/trials/${encodeURIComponent(r)}`)}}function ar(e){let t=e?.update;return typeof t?.sessionUpdate=="string"?t.sessionUpdate:"unknown"}function ne(e){let t=Y("analyses",e),n=new Set;async function s(o){if(n.has(o))return;let l;try{l=await _(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`);}catch(c){throw c instanceof T&&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 _(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 _(t,`/api/analyses${N(o,{scope:o?.scope,job:o?.job,status:o?.status&&o.status.length>0?o.status.join(","):void 0})}`);return C(await l.json(),c=>{let i=wt(c);if(i===null)throw new Error("The analyses list served an unreadable analysis object");return i})}return {list(o){return G(l=>a({...l,scope:o?.scope,job:o?.job,status:o?.status}),o)},async get(o){let c=await(await _(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`)).json(),i=wt(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 _(t,`/api/traces/trials/${encodeURIComponent(o)}/events`+(c!==void 0?`?since=${c}`:""))).json(),d=u.session??{};if(d.kind!=="analysis"){let f=typeof d.kind=="string"?d.kind:"trial";throw new Error(`"${o}" is not an analysis run (the feed resolves it as a ${f}) \u2014 for a trial's trace use trials()`)}let p=c??0,g=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+g.length,events:g.map((f,y)=>({seq:p+y,type:ar(f),data:f&&typeof f=="object"&&!Array.isArray(f)?f:{}})),gateway_calls:Xs(u.gatewayCalls),stored_at:Fe(u.storedAt,g.length,"Analysis transcript response")}},artifact:r,download:(async(o,l)=>At(t,`/api/analyses/${encodeURIComponent(o)}/download`,l,`analysis-${o}.tar.gz`)),async defaults(){return await(await _(t,"/api/analyses/defaults")).json()},filesystem:o=>Rn(t,`/api/analyses/${encodeURIComponent(o)}`)}}function kt(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(r=>!!r&&typeof r=="object"&&!Array.isArray(r)):[],s=t.visibility==="LINK"?"LINK":"PRIVATE";return {...t,visibility:s,results:n}}function Q(e){let t=Y("checks",e);async function n(l){let c=await _(t,`/api/checks/${encodeURIComponent(l)}`);return kt(await c.json())}async function s(l){let c=await _(t,`/api/checks${N(l,{scope:l?.scope,status:l?.status&&l.status.length>0?l.status.join(","):void 0,dataset:l?.dataset})}`);return C(await c.json(),kt)}let r=new Set;async function a(l){let c;try{c=await _(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=task-check`);}catch(d){throw d instanceof T&&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 _(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 _(t,"/api/checks",{method:"POST",body:pe({...d,dataset:c.dataset.trim()})});return kt(await v.json())}let{existsSync:p,statSync:g}=await import('fs'),{basename:f,resolve:y}=await import('path'),h=y(c.directory);if(!p(h)||!g(h).isDirectory())throw new Error(`checks().create(): Path '${c.directory}' does not exist or is not a directory`);let w=await Ee(t,"/api/checks",{directory:h,fields:d,filename:`${f(h)||"task"}.tar.gz`,...i!==void 0?{onBytes:i}:{}});return kt(await w.json())},get:n,async defaults(){return await(await _(t,"/api/checks/defaults")).json()},list(l){return G(c=>s({...c,scope:l?.scope,status:l?.status,dataset:l?.dataset}),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 _(t,`/api/traces/trials/${encodeURIComponent(l)}/events`+(i!==void 0?`?since=${i}`:""))).json(),p=d.session??{};if(p.kind!=="check"){let y=typeof p.kind=="string"?p.kind:"trial";throw new Error(`"${l}" is not a task check (the feed resolves it as a ${y}) \u2014 for a trial's trace use trials(), for an analysis's use analyses()`)}let g=i??0,f=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:g+f.length,events:f.map((y,h)=>({seq:g+h,type:ar(y),data:y&&typeof y=="object"&&!Array.isArray(y)?y:{}})),gateway_calls:Xs(d.gatewayCalls),stored_at:Fe(d.storedAt,f.length,"Task check transcript response")}},artifact:o,download:(async(l,c)=>At(t,`/api/checks/${encodeURIComponent(l)}/download`,c,`check-${l}.tar.gz`)),async share(l,c){let i=await _(t,`/api/checks/${encodeURIComponent(l)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return J(await i.json())},async unshare(l,c){let i=await _(t,`/api/checks/${encodeURIComponent(l)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return J(await i.json())},async shares(l){let c=await _(t,`/api/checks/${encodeURIComponent(l)}/shares`);return J(await c.json())},async watch(l,c){let i=c?.pollIntervalMs??He,u=i,d=null;for(;;){te(c?.signal);let p;try{p=await n(l);}catch(y){if(y instanceof T&&(y.status===429||y.status===503)){await L(Math.max((y.retryAfterSec??0)*1e3,u),c?.signal),u=Math.min(u*2,Ve);continue}throw y}let g=JSON.stringify(p.results.map(y=>[y.task_name,y.status])),f=g!==d;if(f&&(d=g,c?.onProgress?.(p)),p.status==="completed")return p;u=f?i:Math.min(u*2,Ve),await L(u,c?.signal);}},taskFilesystem:(l,c)=>Rn(t,`/api/checks/${encodeURIComponent(l)}/tasks/${encodeURIComponent(c)}`)}}function An(e){let t=Y("auth",e);return {async status(){let s=await(await _(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 fo(e){return {user_id:e.user_id,email:e.email,role:e.role==="owner"?"owner":"member",joined_at:e.joined_at}}function mo(e){return {invite_id:e.invite_id,expires_at:typeof e.expires_at=="string"?e.expires_at:null,max_uses:typeof e.max_uses=="number"?e.max_uses:null,uses:typeof e.uses=="number"?e.uses:0,revoked_at:typeof e.revoked_at=="string"?e.revoked_at:null,created_at:e.created_at,token:e.token}}function vt(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 ho(e){let t=e.quota??{},n=e.usage??{},s=r=>typeof r=="number"?r:0;return {...vt(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 Pe(e){let t=Y("orgs",e);return {async list(){let s=await(await _(t,"/api/orgs")).json();return (Array.isArray(s.items)?s.items:[]).map(r=>vt(r))},async get(n){let s=await _(t,`/api/orgs/${encodeURIComponent(n)}`);return ho(await s.json())},async create(n,s){let r=await _(t,"/api/orgs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({slug:n,...s?.displayName!==void 0?{display_name:s.displayName}:{}})});return vt(await r.json())},async invite(n){let s=await _(t,`/api/orgs/${encodeURIComponent(n)}/invites`,{method:"POST"});return mo(await s.json())},async join(n){let r=await(await _(t,"/api/orgs/invites/accept",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:n})})).json();return {org:vt(r.org??{}),already_member:r.already_member===true}},async members(n){let r=await(await _(t,`/api/orgs/${encodeURIComponent(n)}/members`)).json();return (Array.isArray(r.items)?r.items:[]).map(a=>fo(a))}}}function ir(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{value:t}}catch{return {raw:e}}}function yo(e){return (e||process.env.EVOLVE_DASHBOARD_URL||we).replace(/\/$/,"")}function _o(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 bo(e){return await e.text().catch(()=>"")}async function Tn(e,t,n={}){let s=await fetch(`${yo(e.dashboardUrl)}${t}`,{...n,headers:{Authorization:`Bearer ${_o(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 bo(s)}`);return await s.json()}function ko(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 Tt(e={}){return {async list(){return (await Tn(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 Tn(e,"/api/managed-secrets",{method:"POST",body:JSON.stringify(n)});return {status:s.status,secret:ko(s.secret??{})}},async delete(t){let n=await Tn(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 Ao=6e5,To=5e3;function or(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 We(e){let t=e?.apiKey||process.env[ve];if(!t)throw new Error(`sessions() requires an API key. Set ${ve} or pass { apiKey } in config.`);let n=e?.dashboardUrl||we;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,reasoningEffort:typeof i.reasoningEffort=="string"?i.reasoningEffort:null,provider:i.provider,org:typeof i.org=="string"?i.org:null,sandboxId:i.sandboxId||null,state:i.isEnded?"ended":"live",runtimeStatus:i.runtimeStatus||"unknown",cost:typeof i.cost=="number"?i.cost:null,usage:Se(i.usage),createdAt:i.createdAt,endedAt:i.endedAt||null,stepCount:i.stepCount||0,toolStats:i.toolStats||null,visibility:i.visibility==="LINK"?"LINK":"PRIVATE"}}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||Ue({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(),f=await(await s(`/api/sessions/${encodeURIComponent(i)}/events${p?`?${p}`:""}`)).json(),y=f.session;if(!y||typeof y!="object"||Array.isArray(y))throw new Error("Session transcript response missing session");let h=f.events||[];return {session:r(y),events:h,total:typeof f.total=="number"?f.total:(u?.since??0)+h.length,gatewayCalls:l(f.gatewayCalls),storedAt:Fe(f.storedAt,h.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?.scope&&u.set("scope",i.scope),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?.scope&&u.set("scope",i.scope),i?.sort){let g={newest:"desc",oldest:"asc",cost:"desc"};u.set("sortDirection",g[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 g=(await(await s(`/api/sessions/${encodeURIComponent(i)}`)).json()).tag||i,f=await fetch(`${n}/api/sessions/${encodeURIComponent(i)}/download`,{headers:{Authorization:`Bearer ${t}`},redirect:"follow"});if(!f.ok){let v=await f.text().catch(()=>"");throw new Error(`Download failed (${f.status}): ${v||f.statusText}`)}let y=u?.to||process.cwd();await promises.mkdir(y,{recursive:true});let h=path.join(y,`${g}.jsonl`);if(!f.body)throw new Error("Download response has no body");let w=stream.Readable.fromWeb(f.body);return await promises$1.pipeline(w,fs.createWriteStream(h)),h},async browserReplay(i,u){let d=or("timeoutMs",u?.timeoutMs,Ao),p=or("intervalMs",u?.intervalMs,To),g=Date.now()+d,f=`/api/sessions/${encodeURIComponent(i)}/browser-replay`;for(;;){let y=g-Date.now();if(y<=0)throw new Error(`Browser replay timed out after ${d}ms`);let h;try{h=await fetch(`${n}${f}`,{headers:{Authorization:`Bearer ${t}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,y))});}catch(v){let b=v.name;throw b==="AbortError"||b==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):v}let w={};if(h.ok)w=await h.json();else {let v=await h.text().catch(()=>"");throw new Error(`Dashboard API error (${h.status}): ${v||h.statusText}`)}if(w.status==="ready")return a(w,i);if(w.status==="failed"){let v=typeof w.error=="string"?w.error:"unknown error";throw new Error(`Browser replay failed: ${v}`)}if(Date.now()>=g)throw new Error(`Browser replay timed out after ${d}ms`);await o(Math.min(p,Math.max(0,g-Date.now())));}},async share(i,u){let d=await s(`/api/sessions/${encodeURIComponent(i)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async unshare(i,u){let d=await s(`/api/sessions/${encodeURIComponent(i)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async shares(i){let u=await s(`/api/sessions/${encodeURIComponent(i)}/shares`);return J(await u.json())}}}var Pn="evolve",Co="evolve-agents",En="EVOLVE_SKILLS_DIR",cr="evolve-",Lo=["references","templates"],mr=[".mdx",".md"],se=class extends Error{constructor(t){super(t),this.name="SkillsError";}};function Et(e){try{return fs.statSync(e).isDirectory()}catch{return false}}function hr(e){try{return fs.statSync(e).isFile()}catch{return false}}function jo(e,t){return path.relative(e,t).split(path.sep).join("/")}function Do(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 Et(e)&&n(e),t.sort()}function Ye(e,t=process.env){let n=t[En];if(n!==void 0&&n!==""){if(!Et(n))throw new se(`${En} points at nothing: ${n}`);return path.resolve(n)}for(let s of [path.join(e,"skills"),path.join(e,"..","..","skills")])if(Et(s))return path.resolve(s);throw new se(`skills directory not found; set ${En} or reinstall @evolvingmachines/evolve`)}function Jo(e){let t=path.join(e,"SKILL.md"),n=fs.readFileSync(t,"utf8"),s=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(n),r=s?n.slice(s[0].length).replace(/^\r?\n+/,""):n,a=null;if(s)try{a=yaml.parse(s[1]);}catch(i){throw new se(`${t}: front matter does not parse (${i.message})`)}let o=a!==null&&typeof a=="object"&&typeof a.description=="string"?a.description.replace(/\s+/g," ").trim():"",l=e.slice(e.lastIndexOf(path.sep)+1);return {name:l.startsWith(cr)?l.slice(cr.length):l,dir:e,description:o,content:n,body:r}}function $n(e){return fs.readdirSync(e,{withFileTypes:true}).filter(t=>t.isDirectory()&&t.name!==Co&&hr(path.join(e,t.name,"SKILL.md"))).map(t=>Jo(path.join(e,t.name))).sort((t,n)=>t.name.localeCompare(n.name))}function Pt(e){return $n(e).filter(t=>t.name!==Pn)}function yr(e,t){return $n(e).some(n=>n.name===t)}function Xe(e,t){let n=$n(e).find(s=>s.name===t);if(!n){let s=Pt(e).map(r=>r.name);throw new se(`unknown skill "${t}" (skills: ${s.join(", ")})`)}return n}function Qe(e){return Lo.flatMap(t=>Do(path.join(e.dir,t)).map(n=>({path:jo(e.dir,n),content:fs.readFileSync(n,"utf8")})))}function _r(e){return e.startsWith("references/")&&mr.some(t=>e.endsWith(t))}function No(e){return Qe(e).filter(t=>_r(t.path)).map(t=>t.path.slice(11).replace(/\.mdx?$/,""))}function br(e,t){let n=`references/${t.replace(/^\.\//,"")}`,s=new Set([n,...mr.map(a=>n+a)]),r=Qe(e).find(a=>_r(a.path)&&s.has(a.path));if(!r)throw new se(`no page "${t}" in skill ${e.name} (pages: ${No(e).join(", ")})`);return {page:r.path.slice(11).replace(/\.mdx?$/,""),path:r.path,content:r.content}}var Ze=["claude","codex","cursor","copilot","gemini","opencode","agents"];function It(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 Uo(e){let t=e;for(;!fs.existsSync(t);){let n=path.dirname(t);if(n===t)break;t=n;}return t}function kr(e,t,n){let s=Xe(e,Pn).content,r=[],a=[];for(let o of t){let l=path.join(o.skillsDir,Pn,"SKILL.md"),c=Uo(l);if(c===l){if(!hr(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 Et(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 se(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";}},Jt={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"}},On={kind:"repeat",value:"<address>",help:"Share with this address; repeatable"},Cn={kind:"repeat",value:"<address>",help:"Remove this address's share; repeatable"},O={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"}},Ie={kind:"string",value:"<my|shared|org>",help:"What you created, what teammates created, or everything in your organizations",default:"my",group:"Filter"},vr={kind:"string",value:"<name>",help:"Organization it belongs to; else the default from `evolve auth org use`, else your personal org",group:"Organization"},Ln="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.",$t={kind:"number",value:"<n>",help:"Skip the first N events; to resume, pass the count you already hold",group:"Selection"},ta={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"},org:{kind:"string",value:"<name>",help:"Organization the job lands in; else the default from `evolve auth org use`, else your personal org",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"},"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:"2, 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"},"system-log":{kind:"boolean",help:"Record the box's own system log stream beside agent and verifier (read it back with `trial logs --stream system`)",group:"Job"},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 na(e){return [`${e} -d terminal-bench-4@4.0 -a codex -m gpt-6-astra -l 5 --watch`,`${e} \\
21
+ `)});}}}}async function*Bn(e,t,s){let n=await _(e,t,{headers:{Accept:"text/event-stream",...s?.lastEventId!==void 0?{"Last-Event-ID":s.lastEventId}:{}},signal:s?.signal});if(!n.body)throw new Error("Event stream response has no body");let r=[],a=Xn(c=>{r.push({event:c.event||"message",...c.id!==void 0?{id:c.id}:{},data:c.data?ar(c.data):{}});}),o=n.body.getReader(),l=new TextDecoder;try{for(;;){let{done:c,value:i}=await o.read();if(c)break;for(a.push(l.decode(i,{stream:!0}));r.length>0;)yield r.shift();}}finally{o.cancel().catch(()=>{});}}function de(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,String(r));let s=t.toString();return s?`?${s}`:""}function Qn(e){return e.split("/").filter(Boolean).map(encodeURIComponent).join("/")}function xs(e,t){return {async status(){return await(await _(e,`${t}/filesystem`)).json()},async list(s){return await(await _(e,`${t}/filesystem/files${de({path:s?.path,source:s?.source,cursor:s?.cursor,limit:s?.limit})}`)).json()},async read(s,n){let r=Ss(n?.range),a=await _(e,`${t}/filesystem/files/${Qn(s)}${de({source:n?.source})}`,r?{headers:{Range:r}}:void 0);return Buffer.from(await a.arrayBuffer())},async search(s){return await(await _(e,`${t}/filesystem/search${de({q:s.q,path:s.path,regex:s.regex,limit:s.limit,source:s.source})}`)).json()},async changes(s){return await(await _(e,`${t}/filesystem/changes${de({source:s?.source,phase:s?.phase,cursor:s?.cursor,limit:s?.limit})}`)).json()},archive:(async s=>Tt(e,`${t}/filesystem/archive${de({path:s?.path,source:s?.source})}`,s,"filesystem.tar.gz")),async watch(s){return await(await _(e,`${t}/filesystem/watch`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({paths:s})})).json()},events(s){return Bn(e,`${t}/filesystem/events`,s)},async logs(s){return await(await _(e,`${t}/logs${de({stream:s.stream,cursor:s.cursor,limit:s.limit})}`)).json()},logEvents(s){return Bn(e,`${t}/logs/events`,s)},async procs(){return await(await _(e,`${t}/procs`)).json()}}}function oo(e,t){return {async status(){return await(await _(e,`${t}/filesystem`)).json()},async list(s){return await(await _(e,`${t}/filesystem/files${de({path:s?.path,cursor:s?.cursor,limit:s?.limit})}`)).json()},async read(s,n){let r=Ss(n?.range),a=await _(e,`${t}/filesystem/files/${Qn(s)}`,r?{headers:{Range:r}}:void 0);return Buffer.from(await a.arrayBuffer())}}}function G(e,t){let s,n=()=>s??=e({limit:t?.limit,cursor:t?.cursor});return {then(r,a){return n().then(r,a)},catch(r){return n().catch(r)},finally(r){return n().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 pe(e){let t=new FormData;for(let[s,n]of Object.entries(e))n!==void 0&&t.set(s,n);return t}async function lo(e){let{readFileSync:t,readdirSync:s,statSync:n}=await import('fs'),{basename:r,join:a,resolve:o}=await import('path'),l=o(e),c=g=>n(g,{throwIfNoEntry:false})?.isFile()===true,i=g=>n(g,{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 g=s(l,{withFileTypes:true}).filter(f=>f.isDirectory()&&!f.name.startsWith(".")).filter(f=>c(a(l,f.name,"task.toml"))).map(f=>f.name);if(i(a(l,"tasks"))||g.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 g of s(d,{withFileTypes:true})){if(!g.isDirectory()||g.name.startsWith("."))continue;let f=a(d,g.name);if(!c(a(f,"task.toml")))throw new Error(`${f} 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:g.name,dir:f});}if(u.length===0)throw new Error(`${d} holds no task directories \u2014 nothing to check`);u.sort((g,f)=>g.name<f.name?-1:g.name>f.name?1:0);}let p=(d===l?[l]:[d,l]).map(g=>a(g,"dataset.toml")).find(c);return {tasks:u.map(({name:g,dir:f})=>({name:g,task_toml:t(a(f,"task.toml"),"utf8")})),...p!==void 0?{dataset_toml:t(p,"utf8")}:{}}}async function uo(e,t,s){let{postMultipartFile:n}=await Promise.resolve().then(()=>(gs(),Pn)),r=await n({url:`${e.baseUrl}${t}`,method:s.method??"POST",headers:{Authorization:`Bearer ${e.apiKey}`},fields:s.fields,file:s.file,...s.onBytes!==void 0?{onBytes:s.onBytes}:{}});return r.ok||await At(r),r}async function Zn(e,t,s,n){if(n.resumableThreshold!==void 0){let{stat:r}=await import('fs/promises'),{size:a}=await r(s);if(a>n.resumableThreshold){let{uploadArchiveResumable:o}=await Promise.resolve().then(()=>(Xt(),bn)),l=await o({baseUrl:e.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`},file:{path:s},fields:n.fields,...n.resumablePath!==void 0?{sessionsPath:n.resumablePath}:{},...n.onBytes!==void 0?{onBytes:n.onBytes}:{},...n.onRegistered!==void 0?{onRegistered:n.onRegistered}:{}});return l.ok||await At(l),l}}return await uo(e,t,{method:n.method,fields:n.fields,file:{path:s,filename:n.filename},...n.onBytes!==void 0?{onBytes:n.onBytes}:{}})}async function Ee(e,t,s){let{tarGzipDirectoryToFile:n}=await Promise.resolve().then(()=>(_t(),yt)),{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,s.filename);return await n(s.directory,i),await Zn(e,t,i,s)}finally{await a(c,{recursive:true,force:true});}}function co(e){let t,s=()=>(t||(t=(async()=>{let n=await e.next();for(;!n.done;)n=await e.next();return n.value})()),t);return {then(n,r){return s().then(n,r)},catch(n){return s().catch(n)},finally(n){return s().finally(n)},[Symbol.asyncIterator](){return e}}}var er="x-package-sha256",xt=class extends Error{constructor(s,n){super(`downloaded bytes do not match the digest the server stated (expected ${s}, got ${n})`);this.expected=s;this.actual=n;}name="EvolveDigestMismatchError"},Rt=class extends Error{constructor(s,n){super(`download ended early: the server declared ${s} bytes and ${n} arrived`);this.expectedBytes=s;this.receivedBytes=n;}name="EvolveIncompleteDownloadError"};function tr(e,t){let s=e.headers.get("Content-Length");if(s===null)return;let n=Number(s);if(Number.isFinite(n)&&t!==n)throw new Rt(n,t)}async function sr(e,t){let s=e.headers.get(er);if(!s)return;let{createHash:n}=await import('crypto'),r=n("sha256").update(t).digest("hex");if(r!==s)throw new xt(s,r)}function po(e,t){let n=(e.headers.get("Content-Disposition")||"").match(/filename="([^"]+)"/);if(!n)return t;let r=path.basename(n[1]);return r===""||r==="."||r===".."||/[/\\]/.test(r)||/[\u0000-\u001f]/.test(r)?t:r}async function nr(e,t,s){if(!e.body)throw new Error("Download response has no body");await promises.mkdir(t,{recursive:true});let n=path.join(t,po(e,s)),{createHash:r,randomBytes:a}=await import('crypto'),o=`${n}.${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 Rt(Number(u),c);let d=e.headers.get(er),p=l.digest("hex");if(d&&p!==d)throw new xt(d,p);await promises.rename(o,n);}catch(u){throw await promises.rm(o,{force:true}).catch(()=>{}),u}return n}async function Tt(e,t,s,n){let r=await _(e,t);if(s?.stream){if(!r.body)throw new Error("Download response has no body");return r.body}if(s?.to)return nr(r,s.to,n);let a=Buffer.from(await r.arrayBuffer());return tr(r,a.length),await sr(r,a),a}function X(e){let t=Y("datasets",e);async function s(i){let u=await _(t,`/api/datasets/imports/${encodeURIComponent(i)}`);return Te(await u.json())}function n(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?Ae(i.active_version):null,latest_version:i.latest_version?Ae(i.latest_version):null,versions:(i.versions||[]).map(Ae),selected_version:i.selected_version?Ae(i.selected_version):null,tasks:C(i.tasks,zi),failed_tasks:qi(i.failed_tasks),upstream:n(i.upstream),created_at:i.created_at,updated_at:i.updated_at}}async function a(i,u){let d=bt(i),p=N(u,{version:d.version}),g=await _(t,`/api/datasets/${encodeURIComponent(d.name)}${p}`);return r(await g.json())}async function o(i,u){let d=u?.pollIntervalMs??He,p=u?.settleTimeoutMs??Fi,g=Date.now()+p,f=`${i.name}@${i.version}`,y=null,h=null,w=()=>h?.state==="FAILED"?new ge("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:h.state}):new ge("settle_timeout",`Import ${i.id} completed, but dataset "${i.name}" version "${i.version}" did not settle within ${p}ms: last observed state ${h?.state??"never observed"}. Keep following with datasets().get("${f}").`,{importId:i.id,dataset:i.name,version:i.version,state:h?.state??null}),v=async b=>{for(;;){te(u?.signal);try{return await b()}catch(S){if(!(S instanceof T)||S.status!==429&&S.status!==503)throw S;let x=g-Date.now();if(x<=0)throw w();await L(Math.min(Math.max((S.retryAfterSec??0)*1e3,d),x),u?.signal);}}};for(;;){te(u?.signal);let b=await v(()=>a(f,{limit:1})),S=b.selected_version;if(S){if(h=S,S.state!==y&&(y=S.state,u?.onVersion?.(S,b)),S.state==="FAILED")return v(()=>s(i.id));if(S.state==="READY"||S.state==="ARCHIVED")return i}if(Date.now()>=g)throw w();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?Ae(i.active_version):null,latest_version:i.latest_version?Ae(i.latest_version):null,upstream:n(i.upstream)}}async function c(i){let u=await _(t,`/api/datasets${N(i,{search:i?.search})}`);return C(await u.json(),l)}return {list(i){return G(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 _s(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=bt(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 g=await(await _(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}/build`)).json();return {task_name:g.task_name??u,state:g.state,failure:g.failure&&typeof g.failure=="object"?Vn(g.failure):null,build_log_ref:g.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 lo(u);return await(await _(t,"/api/datasets/preflight",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json()},async publish(i,u){let d=i.source,p=i.org??t.org;if(d?.directory){if(i.name===void 0||i.version===void 0){let{existsSync:f}=await import('fs'),{join:y}=await import('path');if(!(f(y(d.directory,"dataset.toml"))||f(y(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 g=await Ee(t,"/api/datasets/publish",{fields:{name:i.name,version:i.version,org:p},directory:d.directory,filename:"corpus.tar.gz",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{},resumableThreshold:De});return Te(await g.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 g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({name:i.name,version:i.version,archive_url:d.archive_url,org:p})});return Te(await g.json())}if(d&&"hub_package"in d&&d.hub_package){let g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({...i.name!==void 0?{name:i.name}:{},...i.version!==void 0?{version:i.version}:{},hub_package:d.hub_package,org:p})});return Te(await g.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 g=await _(t,"/api/datasets/publish",{method:"POST",body:pe({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}:{},org:p})});return Te(await g.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:s,async watchImport(i,u){let d=u?.pollIntervalMs??He,p=null,g=null;for(;;){te(u?.signal);let f;try{f=await s(i);}catch(h){if(h instanceof T&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,d),u?.signal);continue}throw h}let y=`${f.status}${f.receiving===true?":receiving":""}`;if(y!==p&&(p=y,u?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==g&&(g=h,u?.onProgress?.(f.progress,f));}if(f.status==="FAILED")return f;if(f.status==="COMPLETED")return o(f,u);await L(d,u?.signal);}},download:(async(i,u)=>{let d=bt(i),p=d.version?`?version=${encodeURIComponent(d.version)}`:"",g=await _(t,`/api/datasets/${encodeURIComponent(d.name)}/download${p}`);if(u?.stream){if(!g.body)throw new Error("Package response has no body");return g.body}if(u?.to)return nr(g,u.to,`${d.name}-corpus.tar.gz`);let f=Buffer.from(await g.arrayBuffer());return tr(g,f.length),await sr(g,f),f}),listImports(i){return G(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}`:"",g=await _(t,`/api/datasets/imports${p}`);return C(await g.json(),Te)},i)},async activate(i,u){let d=await _(t,`/api/datasets/${encodeURIComponent(i)}/versions/${encodeURIComponent(u)}/activate`,{method:"POST"});return r(await d.json())},async update(i,u){let d=await _(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 _(t,`/api/datasets/${encodeURIComponent(i)}`,{method:"DELETE"});},taskFiles(i,u){let d=bt(i);if(d.version===void 0)throw new Error(`datasets().taskFiles() needs "name@version" \u2014 a task's files belong to one immutable version (got "${i}")`);return oo(t,`/api/datasets/${encodeURIComponent(d.name)}/versions/${encodeURIComponent(d.version)}/tasks/${encodeURIComponent(u)}`)}}}function Ge(e){let t=Y("agents",e);return {async create(s){let n=qn("agents().create()",{...s,org:s.org??t.org}),r=n.directory?await Ee(t,"/api/agents",{fields:n.fields,directory:n.directory,filename:"source.tar.gz"}):await _(t,"/api/agents",{method:"POST",body:pe(n.fields)});return kt(await r.json())},list(s){return G(async n=>{let r=await _(t,`/api/agents${N(n,{scope:s?.scope})}`);return C(await r.json(),kt)},s)},async get(s){let n=await _(t,`/api/agents/${encodeURIComponent(s)}`);return kt(await n.json())},async delete(s){await _(t,`/api/agents/${encodeURIComponent(s)}`,{method:"DELETE"});},async upsert(s,n){let r=qn("agents().upsert()",{...n,name:s,org:n.org??t.org}),a=r.directory?await Ee(t,`/api/agents/${encodeURIComponent(s)}`,{method:"PUT",fields:r.fields,directory:r.directory,filename:"source.tar.gz"}):await _(t,`/api/agents/${encodeURIComponent(s)}`,{method:"PUT",body:pe(r.fields)});return kt(await a.json())}}}function qn(e,t){let s=typeof t.install_script=="string",n=typeof t.directory=="string";if(s&&n)throw new Error(`${e} takes EITHER an install script ({ install_script }) or a local directory ({ directory }), not both`);if(!s&&!n)throw new Error(`${e} requires either an install script ({ install_script }) or a local directory ({ directory }), plus run_command`);let r={name:t.name,org:t.org,run_command:t.run_command,...t.env!==void 0?{env:JSON.stringify(t.env)}:{},...s?{install_script:t.install_script}:{}};return n?{fields:r,directory:t.directory}:{fields:r}}function ys(e){return {id:e.id,name:e.name,org:typeof e.org=="string"?e.org:null,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 fe(e){let t=Y("skills",e);return {async upload(s,n){if(typeof s!="string"||!s.trim())throw new Error("skills().upload() requires a local skill directory path");let{basename:r,resolve:a}=await import('path'),o=r(a(s)),c=await(await Ee(t,"/api/skills",{fields:{name:o||void 0,org:n?.org??t.org},directory:s,filename:"skill.tar.gz"})).json();return (Array.isArray(c.skills)?c.skills:[c]).map(ys)},list(s){return G(async n=>{let r=await _(t,`/api/skills${N(n,{scope:s?.scope})}`);return C(await r.json(),ys)},s)},async get(s){let r=await(await _(t,`/api/skills/${encodeURIComponent(s)}`)).json();return {...ys(r),skill_md:r.skill_md??null}},async delete(s){await _(t,`/api/skills/${encodeURIComponent(s)}`,{method:"DELETE"});}}}function E(e){let t=Y("jobs",e);async function s(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}`);return H(await u.json())}async function n(i){let u=await _(t,`/api/jobs/imports/${encodeURIComponent(i)}`);return qe(await u.json())}function r(i){return i.kind!=="check"?H(i):{...i,kind:"check",visibility:i.visibility==="LINK"?"LINK":"PRIVATE",cost_usd:ze(i.cost_usd),finished_at:i.finished_at??null}}async function a(i){let u=await _(t,`/api/jobs${N(i,{search:i?.search,scope:i?.scope,kind:i?.kind})}`);return C(await u.json(),r)}function o(i){let u=i.trials??{};return {task_name:i.task_name,source:i.source,trials:{total:u.total??0,byStatus:u.byStatus??{}},mean_reward:i.mean_reward??null,cost_usd:i.cost_usd??null,check:i.check&&typeof i.check=="object"&&!Array.isArray(i.check)?i.check:null}}async function l(i,u){let d=N(u,{status:u?.status?.length?u.status.join(","):void 0,dataset:u?.dataset}),p=await _(t,`/api/jobs/${encodeURIComponent(i)}/trials${d}`);return C(await p.json(),vs)}async function*c(i,u){let{onEvent:d,signal:p}=u??{},g=u?.reconnectDelayMs??Ji,f=u?.maxReconnectDelayMs??Ve,y=null,h=false,w=false,v=g;for(;!h;){te(p);let b;try{b=await fetch(`${t.baseUrl}/api/jobs/${encodeURIComponent(i)}/events`,{headers:{Authorization:`Bearer ${t.apiKey}`,Accept:"text/event-stream",...y!==null?{"Last-Event-ID":String(y)}:{}},signal:p});}catch(A){if(Mn(A,p))throw A;await L(v,p),v=Math.min(v*2,f);continue}if(!b.ok){if(b.status===429||b.status>=500){let A=await b.text().catch(()=>""),I=Le(A,b)??0,W=I>0?Math.max(I*1e3,v):v;await L(W,p),v=Math.min(v*2,f);continue}await At(b);}if(!b.body)throw new Error("Event stream response has no body");let S=false,x=[],B=Xn(A=>{let I=Number(A.id),W={seq:Number.isInteger(I)?I:-1,type:A.event||"message",data:A.data?ar(A.data):{}};Number.isInteger(I)&&(y=I),S=true,Ui.has(W.type)&&(h=true),x.push(W);}),D=b.body.getReader(),ke=new TextDecoder;try{for(;!h;){let{done:A,value:I}=await D.read();if(A)break;B.push(ke.decode(I,{stream:!0}));for(let W of x)d?.(W),yield W;x.length=0;}}catch(A){if(Mn(A,p))throw A}finally{await D.cancel().catch(()=>{});}if(h)break;te(p);let at=await s(i);if(Ni.has(at.status)){if(w)return at;w=true;continue}S&&(v=g),await L(v,p),v=Math.min(v*2,f);}return s(i)}return {async start(i,u){let d=i.org??t.org,p=d!==void 0?{...i,org:d}:i,g=await _(t,"/api/jobs",{method:"POST",headers:{"Content-Type":"application/json",...u?.idempotencyKey?{"Idempotency-Key":u.idempotencyKey}:{}},body:JSON.stringify(p)});return H(await g.json())},get:s,list(i){return G(u=>a({...u,search:i?.search,scope:i?.scope,kind:i?.kind}),i)},trials(i,u){return G(d=>l(i,{...d,status:u?.status,dataset:u?.dataset}),u)},tasks(i,u){return G(async d=>{let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/tasks${N(d)}`);return C(await p.json(),o)},u)},watch(i,u){return co(c(i,u))},async cancel(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}/cancel`,{method:"POST"});return H(await u.json())},async compare(i){let u=i.map(encodeURIComponent).join(","),p=await(await _(t,`/api/jobs/compare?ids=${u}`)).json();return {jobs:(p.jobs||[]).map(no),taskMatrix:(p.taskMatrix||[]).map(ao)}},async resume(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/resume`,{method:"POST",headers:{"Content-Type":"application/json",...d?.idempotencyKey?{"Idempotency-Key":d.idempotencyKey}:{}},body:JSON.stringify(u??{})});return H(await p.json())},async retry(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/retry`,{method:"POST",headers:{"Content-Type":"application/json",...d?.idempotencyKey?{"Idempotency-Key":d.idempotencyKey}:{}},body:JSON.stringify(u??{})});return H(await p.json())},async regrade(i,u){let d={};u?.statuses?.length&&(d.statuses=u.statuses),u?.task_name!==void 0&&(d.task_name=u.task_name);let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/regrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});return H(await p.json())},async analyze(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/analyze`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u??{})});return H(await d.json())},async watchAnalysis(i,u){let d=u?.pollIntervalMs??He,p=d,g=null;for(;;){te(u?.signal);let f;try{f=await s(i);}catch(v){if(v instanceof T&&(v.status===429||v.status===503)){await L(Math.max((v.retryAfterSec??0)*1e3,p),u?.signal),p=Math.min(p*2,Ve);continue}throw v}let y=f.stats.analysis??null,h=y?JSON.stringify([y.n_completed,y.n_failed,y.n_pending]):null,w=h!==null&&h!==g;if(w&&(g=h,u?.onStats?.(f)),y?.n_pending===0)return f;p=w?d:Math.min(p*2,Ve),await L(p,u?.signal);}},download:(async(i,u)=>Tt(t,`/api/jobs/${encodeURIComponent(i)}/download`,u,`job-${i}-results.tar.gz`)),async upload(i,u){let d={dataset:u?.dataset};if(typeof i=="object"&&i!==null){if(typeof i.archive_url!="string"||!i.archive_url.trim())throw new Error("jobs().upload() with a URL source requires { archive_url: 'https://\u2026' }");let S=await _(t,"/api/jobs/upload",{method:"POST",body:pe({...d,archive_url:i.archive_url})});return qe(await S.json())}if(typeof i!="string"||!i.trim())throw new Error("jobs().upload() requires a job directory (or .tar.gz archive) path, or { archive_url }");let p={fields:d,filename:"job.tar.gz",resumableThreshold:De,resumablePath:"/api/jobs/upload/uploads",...u?.onUploadProgress!==void 0?{onBytes:u.onUploadProgress}:{},...u?.onRegistered!==void 0?{onRegistered:u.onRegistered}:{}},{stat:g}=await import('fs/promises');if((await g(i).catch(()=>null))?.isFile()){let S=await Zn(t,"/api/jobs/upload",i,p);return qe(await S.json())}let{existsSync:y}=await import('fs'),{join:h,resolve:w}=await import('path'),v=w(i);for(let S of ["result.json","config.json"])if(!y(h(v,S)))throw new Error(`${v} does not contain ${S}`);let b=await Ee(t,"/api/jobs/upload",{...p,directory:v});return qe(await b.json())},getImport:n,async watchImport(i,u){let d=u?.pollIntervalMs??He,p=null,g=null;for(;;){te(u?.signal);let f;try{f=await n(i);}catch(h){if(h instanceof T&&(h.status===429||h.status===503)){await L(Math.max((h.retryAfterSec??0)*1e3,d),u?.signal);continue}throw h}let y=`${f.status}${f.receiving?":receiving":""}`;if(y!==p&&(p=y,u?.onStatus?.(f)),f.progress!==null){let h=JSON.stringify(f.progress);h!==g&&(g=h,u?.onProgress?.(f.progress,f));}if(f.status==="COMPLETED"||f.status==="FAILED")return f;await L(d,u?.signal);}},listImports(i){return G(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);let p=d.toString()?`?${d}`:"",g=await _(t,`/api/jobs/imports${p}`);return C(await g.json(),qe)},i)},async delete(i){let d=await(await _(t,`/api/jobs/${encodeURIComponent(i)}`,{method:"DELETE"})).json();return {job_id:d.job_id??i,trials_deleted:d.trials_deleted??0,analyses_deleted:d.analyses_deleted??0}},async share(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async unshare(i,u){let d=await _(t,`/api/jobs/${encodeURIComponent(i)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async shares(i){let u=await _(t,`/api/jobs/${encodeURIComponent(i)}/shares`);return J(await u.json())},async grep(i,u,d){let p=await _(t,`/api/jobs/${encodeURIComponent(i)}/grep${N(d,{q:u,type:d?.type})}`);return C(await p.json(),io)}}}function q(e){let t=Y("trials",e);async function s(r,a){let o=await _(t,`/api/trials/${encodeURIComponent(r)}/trace${N(a,{type:a?.type,grep:a?.grep,tail:a?.tail!==void 0?String(a.tail):void 0})}`);return C(await o.json(),Wn)}async function n(r,a){let l=await(await _(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 _(t,`/api/trials/${encodeURIComponent(r)}`);return vs(await a.json())},trace:s,artifact:n,async*traceEvents(r,a){let o=a?.cursor;for(;;){let l=await s(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 _(t,`/api/trials/${encodeURIComponent(r)}/regrade`,{method:"POST"});return H(await a.json())},async retry(r,a){let o=await _(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 _(t,"/api/trials/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({trial_ids:r})})).json();return {stopped:(o.stopped??[]).map(vs),stopped_analyses:(o.stopped_analyses??[]).map(St).filter(l=>l!==null),already_terminal:o.already_terminal??[],not_found:o.not_found??[]}},async files(r,a){let o=await _(t,`/api/trials/${encodeURIComponent(r)}/files${N(a)}`);return C(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=Ss(o),i=await _(t,`/api/trials/${encodeURIComponent(r)}/files/${l}`,c?{headers:{Range:c}}:void 0);return Buffer.from(await i.arrayBuffer())},filesystem:r=>xs(t,`/api/trials/${encodeURIComponent(r)}`)}}function rr(e){let t=e?.update;return typeof t?.sessionUpdate=="string"?t.sessionUpdate:"unknown"}function se(e){let t=Y("analyses",e),s=new Set;async function n(o){if(s.has(o))return;let l;try{l=await _(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`);}catch(c){throw c instanceof T&&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(()=>{}),s.add(o);}async function r(o,l){await n(o);let i=await(await _(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 _(t,`/api/analyses${N(o,{scope:o?.scope,job:o?.job,status:o?.status&&o.status.length>0?o.status.join(","):void 0})}`);return C(await l.json(),c=>{let i=St(c);if(i===null)throw new Error("The analyses list served an unreadable analysis object");return i})}return {list(o){return G(l=>a({...l,scope:o?.scope,job:o?.job,status:o?.status}),o)},async get(o){let c=await(await _(t,`/api/traces/trials/${encodeURIComponent(o)}/artifacts?what=analysis`)).json(),i=St(c.analysis);if(i===null)throw new Error(`The analysis feed served no readable analysis object for "${o}"`);return s.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 _(t,`/api/traces/trials/${encodeURIComponent(o)}/events`+(c!==void 0?`?since=${c}`:""))).json(),d=u.session??{};if(d.kind!=="analysis"){let f=typeof d.kind=="string"?d.kind:"trial";throw new Error(`"${o}" is not an analysis run (the feed resolves it as a ${f}) \u2014 for a trial's trace use trials()`)}let p=c??0,g=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+g.length,events:g.map((f,y)=>({seq:p+y,type:rr(f),data:f&&typeof f=="object"&&!Array.isArray(f)?f:{}})),gateway_calls:Yn(u.gatewayCalls),stored_at:Fe(u.storedAt,g.length,"Analysis transcript response")}},artifact:r,download:(async(o,l)=>Tt(t,`/api/analyses/${encodeURIComponent(o)}/download`,l,`analysis-${o}.tar.gz`)),async defaults(){return await(await _(t,"/api/analyses/defaults")).json()},filesystem:o=>xs(t,`/api/analyses/${encodeURIComponent(o)}`)}}function vt(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("The checks surface served an unreadable check object");let t=e,s=Array.isArray(t.results)?t.results.filter(r=>!!r&&typeof r=="object"&&!Array.isArray(r)):[],n=t.visibility==="LINK"?"LINK":"PRIVATE";return {...t,visibility:n,results:s}}function Q(e){let t=Y("checks",e);async function s(l){let c=await _(t,`/api/checks/${encodeURIComponent(l)}`);return vt(await c.json())}async function n(l){let c=await _(t,`/api/checks${N(l,{scope:l?.scope,status:l?.status&&l.status.length>0?l.status.join(","):void 0,dataset:l?.dataset})}`);return C(await c.json(),vt)}let r=new Set;async function a(l){let c;try{c=await _(t,`/api/traces/trials/${encodeURIComponent(l)}/artifacts?what=task-check`);}catch(d){throw d instanceof T&&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 _(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 _(t,"/api/checks",{method:"POST",body:pe({...d,dataset:c.dataset.trim()})});return vt(await v.json())}let{existsSync:p,statSync:g}=await import('fs'),{basename:f,resolve:y}=await import('path'),h=y(c.directory);if(!p(h)||!g(h).isDirectory())throw new Error(`checks().create(): Path '${c.directory}' does not exist or is not a directory`);let w=await Ee(t,"/api/checks",{directory:h,fields:d,filename:`${f(h)||"task"}.tar.gz`,...i!==void 0?{onBytes:i}:{}});return vt(await w.json())},get:s,async defaults(){return await(await _(t,"/api/checks/defaults")).json()},list(l){return G(c=>n({...c,scope:l?.scope,status:l?.status,dataset:l?.dataset}),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 _(t,`/api/traces/trials/${encodeURIComponent(l)}/events`+(i!==void 0?`?since=${i}`:""))).json(),p=d.session??{};if(p.kind!=="check"){let y=typeof p.kind=="string"?p.kind:"trial";throw new Error(`"${l}" is not a task check (the feed resolves it as a ${y}) \u2014 for a trial's trace use trials(), for an analysis's use analyses()`)}let g=i??0,f=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:g+f.length,events:f.map((y,h)=>({seq:g+h,type:rr(y),data:y&&typeof y=="object"&&!Array.isArray(y)?y:{}})),gateway_calls:Yn(d.gatewayCalls),stored_at:Fe(d.storedAt,f.length,"Task check transcript response")}},artifact:o,download:(async(l,c)=>Tt(t,`/api/checks/${encodeURIComponent(l)}/download`,c,`check-${l}.tar.gz`)),async share(l,c){let i=await _(t,`/api/checks/${encodeURIComponent(l)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return J(await i.json())},async unshare(l,c){let i=await _(t,`/api/checks/${encodeURIComponent(l)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return J(await i.json())},async shares(l){let c=await _(t,`/api/checks/${encodeURIComponent(l)}/shares`);return J(await c.json())},async watch(l,c){let i=c?.pollIntervalMs??He,u=i,d=null;for(;;){te(c?.signal);let p;try{p=await s(l);}catch(y){if(y instanceof T&&(y.status===429||y.status===503)){await L(Math.max((y.retryAfterSec??0)*1e3,u),c?.signal),u=Math.min(u*2,Ve);continue}throw y}let g=JSON.stringify(p.results.map(y=>[y.task_name,y.status])),f=g!==d;if(f&&(d=g,c?.onProgress?.(p)),p.status==="completed")return p;u=f?i:Math.min(u*2,Ve),await L(u,c?.signal);}},taskFilesystem:(l,c)=>xs(t,`/api/checks/${encodeURIComponent(l)}/tasks/${encodeURIComponent(c)}`)}}function Rs(e){let t=Y("auth",e);return {async status(){let n=await(await _(t,"/api/auth/status")).json(),r=n.key??{};return {user_id:n.user_id,email:n.email??null,key:{id:r.id,label:r.label??null,created_at:r.created_at,last_used_at:r.last_used_at??null}}}}}function go(e){return {user_id:e.user_id,email:e.email,role:e.role==="owner"?"owner":"member",joined_at:e.joined_at}}function fo(e){return {invite_id:e.invite_id,expires_at:typeof e.expires_at=="string"?e.expires_at:null,max_uses:typeof e.max_uses=="number"?e.max_uses:null,uses:typeof e.uses=="number"?e.uses:0,revoked_at:typeof e.revoked_at=="string"?e.revoked_at:null,created_at:e.created_at,token:e.token}}function wt(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 mo(e){let t=e.quota??{},s=e.usage??{},n=r=>typeof r=="number"?r:0;return {...wt(e),member_count:n(e.member_count),quota:{max_concurrent_trials:n(t.max_concurrent_trials),max_queued_trials:n(t.max_queued_trials),max_concurrent_imports:n(t.max_concurrent_imports),max_concurrent_analyses:n(t.max_concurrent_analyses),max_concurrent_sessions:n(t.max_concurrent_sessions),monthly_budget_usd:typeof t.monthly_budget_usd=="number"?t.monthly_budget_usd:null,max_concurrent_sandboxes_e2b:n(t.max_concurrent_sandboxes_e2b),max_concurrent_sandboxes_daytona:n(t.max_concurrent_sandboxes_daytona),max_concurrent_sandboxes_modal:n(t.max_concurrent_sandboxes_modal)},usage:{in_flight_trials:n(s.in_flight_trials),queued_trials:n(s.queued_trials),in_flight_imports:n(s.in_flight_imports),in_flight_analyses:n(s.in_flight_analyses),active_sessions:n(s.active_sessions),month_spend_usd:typeof s.month_spend_usd=="number"?s.month_spend_usd:null,month_spend_as_of:typeof s.month_spend_as_of=="string"?s.month_spend_as_of:null}}}function Pe(e){let t=Y("orgs",e);return {async list(){let n=await(await _(t,"/api/orgs")).json();return (Array.isArray(n.items)?n.items:[]).map(r=>wt(r))},async get(s){let n=await _(t,`/api/orgs/${encodeURIComponent(s)}`);return mo(await n.json())},async create(s,n){let r=await _(t,"/api/orgs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({slug:s,...n?.displayName!==void 0?{display_name:n.displayName}:{}})});return wt(await r.json())},async invite(s){let n=await _(t,`/api/orgs/${encodeURIComponent(s)}/invites`,{method:"POST"});return fo(await n.json())},async join(s){let r=await(await _(t,"/api/orgs/invites/accept",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:s})})).json();return {org:wt(r.org??{}),already_member:r.already_member===true}},async members(s){let r=await(await _(t,`/api/orgs/${encodeURIComponent(s)}/members`)).json();return (Array.isArray(r.items)?r.items:[]).map(a=>go(a))}}}function ar(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{value:t}}catch{return {raw:e}}}function ho(e){return (e||process.env.EVOLVE_DASHBOARD_URL||we).replace(/\/$/,"")}function yo(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 _o(e){return await e.text().catch(()=>"")}async function As(e,t,s={}){let n=await fetch(`${ho(e.dashboardUrl)}${t}`,{...s,headers:{Authorization:`Bearer ${yo(e)}`,accept:"application/json",...s.body?{"content-type":"application/json"}:{},...s.headers||{}}});if(!n.ok)throw new Error(`Managed secrets request failed (${n.status}): ${await _o(n)}`);return await n.json()}function bo(e){let t=s=>Array.isArray(s)?s.filter(n=>typeof n=="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 Et(e={}){return {async list(){return (await As(e,"/api/managed-secrets")).secrets??[]},async set(t){let s={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}:{}},n=await As(e,"/api/managed-secrets",{method:"POST",body:JSON.stringify(s)});return {status:n.status,secret:bo(n.secret??{})}},async delete(t){let s=await As(e,"/api/managed-secrets",{method:"DELETE",body:JSON.stringify({name:t.name,...t.label!==void 0?{label:t.label}:{}})});return {ok:s.ok,name:s.name,label:s.label}}}}var Ro=6e5,Ao=5e3;function ir(e,t,s){let n=t??s;if(!Number.isFinite(n)||n<=0)throw new Error(`${e} must be a positive number`);return n}function We(e){let t=e?.apiKey||process.env[ve];if(!t)throw new Error(`sessions() requires an API key. Set ${ve} or pass { apiKey } in config.`);let s=e?.dashboardUrl||we;async function n(i,u){let d=await fetch(`${s}${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,reasoningEffort:typeof i.reasoningEffort=="string"?i.reasoningEffort:null,provider:i.provider,org:typeof i.org=="string"?i.org:null,sandboxId:i.sandboxId||null,state:i.isEnded?"ended":"live",runtimeStatus:i.runtimeStatus||"unknown",cost:typeof i.cost=="number"?i.cost:null,usage:Se(i.usage),createdAt:i.createdAt,endedAt:i.endedAt||null,stepCount:i.stepCount||0,toolStats:i.toolStats||null,visibility:i.visibility==="LINK"?"LINK":"PRIVATE"}}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||Ue({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(),f=await(await n(`/api/sessions/${encodeURIComponent(i)}/events${p?`?${p}`:""}`)).json(),y=f.session;if(!y||typeof y!="object"||Array.isArray(y))throw new Error("Session transcript response missing session");let h=f.events||[];return {session:r(y),events:h,total:typeof f.total=="number"?f.total:(u?.since??0)+h.length,gatewayCalls:l(f.gatewayCalls),storedAt:Fe(f.storedAt,h.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?.scope&&u.set("scope",i.scope),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?.scope&&u.set("scope",i.scope),i?.sort){let g={newest:"desc",oldest:"asc",cost:"desc"};u.set("sortDirection",g[i.sort]),i.sort==="cost"?u.set("sortField","cost"):u.set("sortField","timestamp");}let p=await(await n(`/api/sessions?${u}`)).json();return {items:(p.items||[]).map(r),nextCursor:p.nextCursor||null,hasMore:!!p.hasMore}},async get(i){let d=await(await n(`/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 g=(await(await n(`/api/sessions/${encodeURIComponent(i)}`)).json()).tag||i,f=await fetch(`${s}/api/sessions/${encodeURIComponent(i)}/download`,{headers:{Authorization:`Bearer ${t}`},redirect:"follow"});if(!f.ok){let v=await f.text().catch(()=>"");throw new Error(`Download failed (${f.status}): ${v||f.statusText}`)}let y=u?.to||process.cwd();await promises.mkdir(y,{recursive:true});let h=path.join(y,`${g}.jsonl`);if(!f.body)throw new Error("Download response has no body");let w=stream.Readable.fromWeb(f.body);return await promises$1.pipeline(w,fs$1.createWriteStream(h)),h},async browserReplay(i,u){let d=ir("timeoutMs",u?.timeoutMs,Ro),p=ir("intervalMs",u?.intervalMs,Ao),g=Date.now()+d,f=`/api/sessions/${encodeURIComponent(i)}/browser-replay`;for(;;){let y=g-Date.now();if(y<=0)throw new Error(`Browser replay timed out after ${d}ms`);let h;try{h=await fetch(`${s}${f}`,{headers:{Authorization:`Bearer ${t}`,accept:"application/json"},signal:AbortSignal.timeout(Math.max(1,y))});}catch(v){let b=v.name;throw b==="AbortError"||b==="TimeoutError"?new Error(`Browser replay timed out after ${d}ms`):v}let w={};if(h.ok)w=await h.json();else {let v=await h.text().catch(()=>"");throw new Error(`Dashboard API error (${h.status}): ${v||h.statusText}`)}if(w.status==="ready")return a(w,i);if(w.status==="failed"){let v=typeof w.error=="string"?w.error:"unknown error";throw new Error(`Browser replay failed: ${v}`)}if(Date.now()>=g)throw new Error(`Browser replay timed out after ${d}ms`);await o(Math.min(p,Math.max(0,g-Date.now())));}},async share(i,u){let d=await n(`/api/sessions/${encodeURIComponent(i)}/share`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async unshare(i,u){let d=await n(`/api/sessions/${encodeURIComponent(i)}/unshare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});return J(await d.json())},async shares(i){let u=await n(`/api/sessions/${encodeURIComponent(i)}/shares`);return J(await u.json())}}}var Es="evolve",Oo="evolve-agents",Ts="EVOLVE_SKILLS_DIR",ur="evolve-",Co=["references","templates"],fr=[".mdx",".md"],ne=class extends Error{constructor(t){super(t),this.name="SkillsError";}};function Pt(e){try{return fs$1.statSync(e).isDirectory()}catch{return false}}function mr(e){try{return fs$1.statSync(e).isFile()}catch{return false}}function Lo(e,t){return path.relative(e,t).split(path.sep).join("/")}function jo(e){let t=[],s=n=>{for(let r of fs$1.readdirSync(n,{withFileTypes:true})){let a=path.join(n,r.name);r.isDirectory()?s(a):r.isFile()&&t.push(a);}};return Pt(e)&&s(e),t.sort()}function Ye(e,t=process.env){let s=t[Ts];if(s!==void 0&&s!==""){if(!Pt(s))throw new ne(`${Ts} points at nothing: ${s}`);return path.resolve(s)}for(let n of [path.join(e,"skills"),path.join(e,"..","..","skills")])if(Pt(n))return path.resolve(n);throw new ne(`skills directory not found; set ${Ts} or reinstall @evolvingmachines/evolve`)}function Do(e){let t=path.join(e,"SKILL.md"),s=fs$1.readFileSync(t,"utf8"),n=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(s),r=n?s.slice(n[0].length).replace(/^\r?\n+/,""):s,a=null;if(n)try{a=yaml.parse(n[1]);}catch(i){throw new ne(`${t}: front matter does not parse (${i.message})`)}let o=a!==null&&typeof a=="object"&&typeof a.description=="string"?a.description.replace(/\s+/g," ").trim():"",l=e.slice(e.lastIndexOf(path.sep)+1);return {name:l.startsWith(ur)?l.slice(ur.length):l,dir:e,description:o,content:s,body:r}}function Is(e){return fs$1.readdirSync(e,{withFileTypes:true}).filter(t=>t.isDirectory()&&t.name!==Oo&&mr(path.join(e,t.name,"SKILL.md"))).map(t=>Do(path.join(e,t.name))).sort((t,s)=>t.name.localeCompare(s.name))}function It(e){return Is(e).filter(t=>t.name!==Es)}function hr(e,t){return Is(e).some(s=>s.name===t)}function Xe(e,t){let s=Is(e).find(n=>n.name===t);if(!s){let n=It(e).map(r=>r.name);throw new ne(`unknown skill "${t}" (skills: ${n.join(", ")})`)}return s}function Qe(e){return Co.flatMap(t=>jo(path.join(e.dir,t)).map(s=>({path:Lo(e.dir,s),content:fs$1.readFileSync(s,"utf8")})))}function yr(e){return e.startsWith("references/")&&fr.some(t=>e.endsWith(t))}function Jo(e){return Qe(e).filter(t=>yr(t.path)).map(t=>t.path.slice(11).replace(/\.mdx?$/,""))}function _r(e,t){let s=`references/${t.replace(/^\.\//,"")}`,n=new Set([s,...fr.map(a=>s+a)]),r=Qe(e).find(a=>yr(a.path)&&n.has(a.path));if(!r)throw new ne(`no page "${t}" in skill ${e.name} (pages: ${Jo(e).join(", ")})`);return {page:r.path.slice(11).replace(/\.mdx?$/,""),path:r.path,content:r.content}}var Ze=["claude","codex","cursor","copilot","gemini","opencode","agents"];function $t(e,t=process.env){if(e==="opencode"){let s=t.XDG_CONFIG_HOME!==void 0&&t.XDG_CONFIG_HOME!==""?t.XDG_CONFIG_HOME:path.join(os$1.homedir(),".config");return path.join(s,"opencode","skills")}return path.join(os$1.homedir(),`.${e}`,"skills")}function No(e){let t=e;for(;!fs$1.existsSync(t);){let s=path.dirname(t);if(s===t)break;t=s;}return t}function br(e,t,s){let n=Xe(e,Es).content,r=[],a=[];for(let o of t){let l=path.join(o.skillsDir,Es,"SKILL.md"),c=No(l);if(c===l){if(!mr(l)){a.push(`${l} is a directory, not a file`);continue}let i=fs$1.readFileSync(l,"utf8")===n;!i&&!s&&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 ne(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,n)),{target:o.target,path:l,status:c?"written":"unchanged"}))}var m=class extends Error{constructor(t){super(t),this.name="CliUsageError";}},Nt={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"}},$s={kind:"repeat",value:"<address>",help:"Share with this address; repeatable"},Os={kind:"repeat",value:"<address>",help:"Remove this address's share; repeatable"},O={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"}},Ie={kind:"string",value:"<my|shared|org>",help:"What you created, what teammates created, or everything in your organizations",default:"my",group:"Filter"},kr={kind:"string",value:"<name>",help:"Organization it belongs to; else the default from `evolve auth org use`, else your personal org",group:"Organization"},Cs="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.",Ot={kind:"number",value:"<n>",help:"Skip the first N events; to resume, pass the count you already hold",group:"Selection"},ea={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"},org:{kind:"string",value:"<name>",help:"Organization the job lands in; else the default from `evolve auth org use`, else your personal org",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"},"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:"2, 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"},"system-log":{kind:"boolean",help:"Record the box's own system log stream beside agent and verifier (read it back with `trial logs --stream system`)",group:"Job"},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 ta(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 Yo="evolve skills get evals sdk-reference/errors",he={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:`<${[...Ze,"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:ta,minPositionals:0,maxPositionals:0,examples:na("evolve job start")},list:{summary:"List your jobs, newest first",flags:{...O,search:{kind:"string",value:"<text>",help:"Free-text filter over job name and dataset names",group:"Filter"},scope:Ie,kind:{kind:"string",value:"<job|check|all>",help:"Jobs, task quality checks, or both in one list",default:"job",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve job list","evolve job list --kind all --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:{...O,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 INFRASTRUCTURE_ERROR,SCORING_ERROR"]},tasks:{summary:"Show a job's per-task rollup",flags:{...O},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"]},share:{summary:"Share a job you created by link or by email",notes:"--link prints the run's unlisted link (the same one every time). Each --email gets a link to the run by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the job's unlisted link and print it"},email:On},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job share 3e1f9a2c --link","evolve job share 3e1f9a2c --email alice@example.org --email bob@example.org"]},unshare:{summary:"Revoke a job's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the job's link"},email:Cn},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job unshare 3e1f9a2c --link","evolve job unshare 3e1f9a2c --email alice@example.org"]},shares:{summary:"Show who a job is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job shares 3e1f9a2c","evolve job shares 3e1f9a2c --json"]},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:{...O,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), agent-home or filesystem (the run's file system as one .tar.gz, raw bytes)",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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files status d1a10c4e-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<trial-id> [path]",examples:["evolve trial files ls d1a10c4e-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<trial-id> <path>",examples:["evolve trial files cat d1a10c4e-\u2026 /app/work/main.py"]},"files search":{summary:"Search the trial's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<trial-id> <text>",examples:["evolve trial files search d1a10c4e-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files changes d1a10c4e-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files archive d1a10c4e-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial logs d1a10c4e-\u2026 --stream agent --follow"]},procs:{summary:"The trial's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial procs d1a10c4e-\u2026"]}}},analysis:{summary:"List, inspect, and download trace analyses",commands:{list:{summary:"List analysis runs, newest first",flags:{...O,scope:Ie,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: ${Je.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:Ln,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:Ln,flags:{since:$t},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:Ln,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:{...$t,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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files status a0a1b2c3-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<analysis-id> [path]",examples:["evolve analysis files ls a0a1b2c3-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<analysis-id> <path>",examples:["evolve analysis files cat a0a1b2c3-\u2026 /app/work/main.py"]},"files search":{summary:"Search the analysis run's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<analysis-id> <text>",examples:["evolve analysis files search a0a1b2c3-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files changes a0a1b2c3-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files archive a0a1b2c3-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis logs a0a1b2c3-\u2026 --stream agent --follow"]},procs:{summary:"The analysis run's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis procs a0a1b2c3-\u2026"]}}},check:{summary:"Read task quality checks back",commands:{list:{summary:"List your task quality checks, newest first",flags:{...O,scope:Ie,status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Ne.join(", ")}`,group:"Filter"},dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"Only checks on this dataset; a bare name is every version",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve check list","evolve check list --status running","evolve check list --dataset terminal-bench-4@4.0"]},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"]},share:{summary:"Share a check you created by link or by email",notes:"--link prints the check's unlisted link (the same one every time). Each --email gets a link to the check by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the check's unlisted link and print it"},email:On},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check share 5f2c9b1e --link","evolve check share 5f2c9b1e --email alice@example.org"]},unshare:{summary:"Revoke a check's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the check's link"},email:Cn},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check unshare 5f2c9b1e --link","evolve check unshare 5f2c9b1e --email alice@example.org"]},shares:{summary:"Show who a check is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check shares 5f2c9b1e","evolve check shares 5f2c9b1e --json"]},trace:{summary:"Print the checker's transcript for one task check",flags:{since:$t},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:{...$t,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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files status 3f9a1c2e-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<task-check-id> [path]",examples:["evolve check files ls 3f9a1c2e-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<task-check-id> <path>",examples:["evolve check files cat 3f9a1c2e-\u2026 /app/work/main.py"]},"files search":{summary:"Search the task check's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<task-check-id> <text>",examples:["evolve check files search 3f9a1c2e-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files changes 3f9a1c2e-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files archive 3f9a1c2e-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check logs 3f9a1c2e-\u2026 --stream agent --follow"]},procs:{summary:"The task check's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check procs 3f9a1c2e-\u2026"]}}},session:{summary:"List, inspect and share managed-agent sessions",commands:{list:{summary:"List sessions, newest first",flags:{...O,scope:Ie,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 --scope org","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"]},share:{summary:"Share a session you started by link or by email",notes:"--link prints the session's unlisted link (the same one every time); it opens the session, its transcript and its trace file, and nothing else. Each --email gets a link by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the session's unlisted link and print it"},email:On},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session share 5f2c1a0e --link","evolve session share 5f2c1a0e --email alice@example.org"]},unshare:{summary:"Revoke a session's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the session's link"},email:Cn},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session unshare 5f2c1a0e --link","evolve session unshare 5f2c1a0e --email alice@example.org"]},shares:{summary:"Show who a session is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session shares 5f2c1a0e","evolve session shares 5f2c1a0e --json"]}}},dataset:{summary:"Browse and publish the dataset catalog",commands:{list:{summary:"List the dataset catalog",flags:{...O,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"},org:{kind:"string",value:"<name>",help:"Organization a new dataset lands in; else the default from `evolve auth org use`, else your personal org",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 Wo="evolve skills get evals sdk-reference/errors",he={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:`<${[...Ze,"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:ea,minPositionals:0,maxPositionals:0,examples:ta("evolve job start")},list:{summary:"List your jobs, newest first",flags:{...O,search:{kind:"string",value:"<text>",help:"Free-text filter over job name and dataset names",group:"Filter"},scope:Ie,kind:{kind:"string",value:"<job|check|all>",help:"Jobs, task quality checks, or both in one list",default:"job",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve job list","evolve job list --kind all --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:{...O,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 INFRASTRUCTURE_ERROR,SCORING_ERROR"]},tasks:{summary:"Show a job's per-task rollup",flags:{...O},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"]},share:{summary:"Share a job you created by link or by email",notes:"--link prints the run's unlisted link (the same one every time). Each --email gets a link to the run by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the job's unlisted link and print it"},email:$s},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job share 3e1f9a2c --link","evolve job share 3e1f9a2c --email alice@example.org --email bob@example.org"]},unshare:{summary:"Revoke a job's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the job's link"},email:Os},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job unshare 3e1f9a2c --link","evolve job unshare 3e1f9a2c --email alice@example.org"]},shares:{summary:"Show who a job is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve job shares 3e1f9a2c","evolve job shares 3e1f9a2c --json"]},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:{...O,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), agent-home or filesystem (the run's file system as one .tar.gz, raw bytes)",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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files status d1a10c4e-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<trial-id> [path]",examples:["evolve trial files ls d1a10c4e-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<trial-id> <path>",examples:["evolve trial files cat d1a10c4e-\u2026 /app/work/main.py"]},"files search":{summary:"Search the trial's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<trial-id> <text>",examples:["evolve trial files search d1a10c4e-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files changes d1a10c4e-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial files archive d1a10c4e-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial logs d1a10c4e-\u2026 --stream agent --follow"]},procs:{summary:"The trial's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<trial-id>",examples:["evolve trial procs d1a10c4e-\u2026"]}}},analysis:{summary:"List, inspect, and download trace analyses",commands:{list:{summary:"List analysis runs, newest first",flags:{...O,scope:Ie,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: ${Je.join(", ")}`,group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve analysis list","evolve analysis list --job 3e1f9a2c --status failed"]},show:{summary:"Show one analysis run: its result",notes:Cs,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:Cs,flags:{since:Ot},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:Cs,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 result document), trace-parsed, trace-stdout, trace-stderr or agent-home",group:"Stream"},since:{...Ot,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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files status a0a1b2c3-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<analysis-id> [path]",examples:["evolve analysis files ls a0a1b2c3-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<analysis-id> <path>",examples:["evolve analysis files cat a0a1b2c3-\u2026 /app/work/main.py"]},"files search":{summary:"Search the analysis run's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<analysis-id> <text>",examples:["evolve analysis files search a0a1b2c3-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files changes a0a1b2c3-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis files archive a0a1b2c3-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis logs a0a1b2c3-\u2026 --stream agent --follow"]},procs:{summary:"The analysis run's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<analysis-id>",examples:["evolve analysis procs a0a1b2c3-\u2026"]}}},check:{summary:"Read task quality checks back",commands:{list:{summary:"List your task quality checks, newest first",flags:{...O,scope:Ie,status:{kind:"string",value:"<s1,s2,...>",help:`Only these statuses: ${Ne.join(", ")}`,group:"Filter"},dataset:{kind:"string",short:"d",value:"<name[@version]>",help:"Only checks on this dataset; a bare name is every version",group:"Filter"}},minPositionals:0,maxPositionals:0,examples:["evolve check list","evolve check list --status running","evolve check list --dataset terminal-bench-4@4.0"]},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"]},share:{summary:"Share a check you created by link or by email",notes:"--link prints the check's unlisted link (the same one every time). Each --email gets a link to the check by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the check's unlisted link and print it"},email:$s},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check share 5f2c9b1e --link","evolve check share 5f2c9b1e --email alice@example.org"]},unshare:{summary:"Revoke a check's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the check's link"},email:Os},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check unshare 5f2c9b1e --link","evolve check unshare 5f2c9b1e --email alice@example.org"]},shares:{summary:"Show who a check is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<check-id>",examples:["evolve check shares 5f2c9b1e","evolve check shares 5f2c9b1e --json"]},trace:{summary:"Print the checker's transcript for one task check",flags:{since:Ot},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:{...Ot,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"]},"files status":{summary:"File system source: live, captured or none",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files status 3f9a1c2e-\u2026"]},"files list":{summary:"List one folder of the file system (default /)",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:2,positionalUsage:"<task-check-id> [path]",examples:["evolve check files ls 3f9a1c2e-\u2026 /app/work"]},"files cat":{summary:"Print one file, raw bytes",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:2,maxPositionals:2,positionalUsage:"<task-check-id> <path>",examples:["evolve check files cat 3f9a1c2e-\u2026 /app/work/main.py"]},"files search":{summary:"Search the task check's file system for text",flags:{path:{kind:"string",value:"<path>",help:"Folder to search under (default: /, the whole box \u2014 seconds)"},regex:{kind:"boolean",help:"Treat the text as a regular expression"},limit:{kind:"number",short:"l",value:"<n>",help:"Hit cap (default 200, max 1000)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"}},minPositionals:2,maxPositionals:2,positionalUsage:"<task-check-id> <text>",examples:["evolve check files search 3f9a1c2e-\u2026 'permission denied' --path /app/work"]},"files changes":{summary:"Files created, modified or removed, by phase",flags:{source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},phase:{kind:"string",value:"<setup|agent|verifier|all>",help:"Only one phase's changes (default all)"},limit:{kind:"number",short:"l",value:"<n>",help:"Rows per page (default 500, max 1000)"},cursor:{kind:"string",value:"<path>",help:"Resume after this path (the previous page's next_cursor)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files changes 3f9a1c2e-\u2026 --phase agent"]},"files archive":{summary:"Download one subtree as a .tar.gz",flags:{path:{kind:"string",value:"<path>",help:"Subtree to archive (default: /, the whole tree)"},source:{kind:"string",value:"<live|capture>",help:"Read the running box (live) or the kept tree (capture); default: whichever the run has"},"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Save the archive into this directory and print its path (default: raw bytes to stdout)"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check files archive 3f9a1c2e-\u2026 --path /app/work -o archives/"]},logs:{summary:"Read one sandbox log stream of the run",flags:{stream:{kind:"string",value:"<name>",help:"Which stream: agent | verifier | system (when the job asked for it); setup and metrics are named but not recorded today (required)"},follow:{kind:"boolean",short:"f",help:"Keep printing lines as they arrive while the box lives"},limit:{kind:"number",short:"l",value:"<n>",help:"Lines per page (default 1000, max 1000)"},cursor:{kind:"string",value:"<seq>",help:"Resume after this line seq"}},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check logs 3f9a1c2e-\u2026 --stream agent --follow"]},procs:{summary:"The task check's box process list (live only)",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<task-check-id>",examples:["evolve check procs 3f9a1c2e-\u2026"]}}},session:{summary:"List, inspect and share managed-agent sessions",commands:{list:{summary:"List sessions, newest first",flags:{...O,scope:Ie,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 --scope org","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"]},share:{summary:"Share a session you started by link or by email",notes:"--link prints the session's unlisted link (the same one every time); it opens the session, its transcript and its trace file, and nothing else. Each --email gets a link by mail; an address with no account gets a sign-up link, unless it is already waitlisted or invited and keeps that path. Both flags may ride one command.",flags:{link:{kind:"boolean",help:"Enable the session's unlisted link and print it"},email:$s},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session share 5f2c1a0e --link","evolve session share 5f2c1a0e --email alice@example.org"]},unshare:{summary:"Revoke a session's link or email shares",notes:"--link kills the link at once; a later share mints a new one. --email removes that address's share.",flags:{link:{kind:"boolean",help:"Disable the session's link"},email:Os},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session unshare 5f2c1a0e --link","evolve session unshare 5f2c1a0e --email alice@example.org"]},shares:{summary:"Show who a session is shared with",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<session-id>",examples:["evolve session shares 5f2c1a0e","evolve session shares 5f2c1a0e --json"]}}},dataset:{summary:"Browse and publish the dataset catalog",commands:{list:{summary:"List the dataset catalog",flags:{...O,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"},org:{kind:"string",value:"<name>",help:"Organization a new dataset lands in; else the default from `evolve auth org use`, else your personal org",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 \\
32
- --name acme-tasks --version 1.2.0`]},watch:{summary:"Follow a publish until it is READY or FAILED",notes:"The same follow `dataset publish --watch` prints, re-attached later or from another machine.",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name | import-id>",examples:["evolve dataset watch my-swe"]},download:{summary:"Download the original corpus package",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save into",default:"the current directory"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",examples:["evolve dataset download my-swe@1.0 -o corpora/"]},activate:{summary:"Make a READY version the dataset's active version",flags:{},minPositionals:2,maxPositionals:2,positionalUsage:"<name> <version>",examples:["evolve dataset activate my-swe 1.0"]},"files status":{summary:"The task package's file record",flags:{},minPositionals:2,maxPositionals:2,positionalUsage:"<name@version> <task>",examples:["evolve dataset files status my-swe@1.0 abs-1"]},"files list":{summary:"List one folder of the task package (default /)",flags:{limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:2,maxPositionals:3,positionalUsage:"<name@version> <task> [path]",examples:["evolve dataset files ls my-swe@1.0 abs-1 /tests"]},"files cat":{summary:"Print one file of the task's package, raw bytes",flags:{range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:3,maxPositionals:3,positionalUsage:"<name@version> <task> <path>",examples:["evolve dataset files cat my-swe@1.0 abs-1 /instruction.md"]}}},skill:{summary:"Upload and manage platform-stored skills",commands:{list:{summary:"List uploaded skills, newest first",flags:{...O,scope:Ie},minPositionals:0,maxPositionals:0,examples:["evolve skill list","evolve skill list --scope org"]},upload:{summary:"Upload a skill folder; its name becomes a moving pointer",notes:"The record belongs to you and to an organization: its members may reference it from their own jobs, and only you can delete it.",flags:{org:vr},minPositionals:1,maxPositionals:1,positionalUsage:"<dir>",examples:["evolve skill upload ./my-skill","evolve skill upload ./my-skill --org acme"]},show:{summary:"Show one uploaded skill, metadata and SKILL.md",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id | name:<skill-name>>",examples:["evolve skill show name:my-skill"]},delete:{summary:"Delete an uploaded skill record",notes:"Past jobs keep their locks. A skill a running job references is refused with skill_in_use.",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve skill delete 6f6f1f36"]}}},agent:{summary:"Register and manage your own agents",commands:{list:{summary:"List registered agents",flags:{...O,scope:Ie},minPositionals:0,maxPositionals:0,examples:["evolve agent list","evolve agent list --scope org"]},show:{summary:"Show one registered agent",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",examples:["evolve agent show acme-cli"]},add:{summary:"Register an agent from an install script or a directory",notes:"The registration belongs to you and to an organization: its members may name the agent in their own jobs, and only you can change or delete it.",flags:{org:vr,"install-script":{kind:"string",value:"<path>",help:"Install script; its contents are uploaded",group:"Source"},dir:{kind:"string",value:"<path>",help:"Local agent directory, uploaded as an archive",group:"Source"},run:{kind:"string",value:"<command>",help:"Run command, executed with sh -c; required",group:"Run"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env set at run time; repeatable",group:"Run"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",examples:[`evolve agent add acme-cli \\
32
+ --name acme-tasks --version 1.2.0`]},watch:{summary:"Follow a publish until it is READY or FAILED",notes:"The same follow `dataset publish --watch` prints, re-attached later or from another machine.",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name | import-id>",examples:["evolve dataset watch my-swe"]},download:{summary:"Download the original corpus package",flags:{"output-dir":{kind:"string",short:"o",value:"<dir>",help:"Directory to save into",default:"the current directory"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name[@version]>",examples:["evolve dataset download my-swe@1.0 -o corpora/"]},activate:{summary:"Make a READY version the dataset's active version",flags:{},minPositionals:2,maxPositionals:2,positionalUsage:"<name> <version>",examples:["evolve dataset activate my-swe 1.0"]},"files status":{summary:"The task package's file record",flags:{},minPositionals:2,maxPositionals:2,positionalUsage:"<name@version> <task>",examples:["evolve dataset files status my-swe@1.0 abs-1"]},"files list":{summary:"List one folder of the task package (default /)",flags:{limit:{kind:"number",short:"l",value:"<n>",help:"Entries per page (default 500, max 1000)"},cursor:{kind:"string",value:"<name>",help:"Resume after this entry name (the previous page's next_cursor)"}},minPositionals:2,maxPositionals:3,positionalUsage:"<name@version> <task> [path]",examples:["evolve dataset files ls my-swe@1.0 abs-1 /tests"]},"files cat":{summary:"Print one file of the task's package, raw bytes",flags:{range:{kind:"string",value:"<bytes=a-b>",help:"One byte range: bytes=a-b, bytes=a- or bytes=-n"}},minPositionals:3,maxPositionals:3,positionalUsage:"<name@version> <task> <path>",examples:["evolve dataset files cat my-swe@1.0 abs-1 /instruction.md"]}}},skill:{summary:"Upload and manage platform-stored skills",commands:{list:{summary:"List uploaded skills, newest first",flags:{...O,scope:Ie},minPositionals:0,maxPositionals:0,examples:["evolve skill list","evolve skill list --scope org"]},upload:{summary:"Upload a skill folder; its name becomes a moving pointer",notes:"The record belongs to you and to an organization: its members may reference it from their own jobs, and only you can delete it.",flags:{org:kr},minPositionals:1,maxPositionals:1,positionalUsage:"<dir>",examples:["evolve skill upload ./my-skill","evolve skill upload ./my-skill --org acme"]},show:{summary:"Show one uploaded skill, metadata and SKILL.md",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id | name:<skill-name>>",examples:["evolve skill show name:my-skill"]},delete:{summary:"Delete an uploaded skill record",notes:"Past jobs keep their locks. A skill a running job references is refused with skill_in_use.",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<id>",examples:["evolve skill delete 6f6f1f36"]}}},agent:{summary:"Register and manage your own agents",commands:{list:{summary:"List registered agents",flags:{...O,scope:Ie},minPositionals:0,maxPositionals:0,examples:["evolve agent list","evolve agent list --scope org"]},show:{summary:"Show one registered agent",flags:{},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",examples:["evolve agent show acme-cli"]},add:{summary:"Register an agent from an install script or a directory",notes:"The registration belongs to you and to an organization: its members may name the agent in their own jobs, and only you can change or delete it.",flags:{org:kr,"install-script":{kind:"string",value:"<path>",help:"Install script; its contents are uploaded",group:"Source"},dir:{kind:"string",value:"<path>",help:"Local agent directory, uploaded as an archive",group:"Source"},run:{kind:"string",value:"<command>",help:"Run command, executed with sh -c; required",group:"Run"},"agent-env":{kind:"repeat",aliases:["ae"],value:"KEY=VALUE",help:"Env set at run time; repeatable",group:"Run"}},minPositionals:1,maxPositionals:1,positionalUsage:"<name>",examples:[`evolve agent add acme-cli \\
33
33
  --install-script ./install.sh \\
34
34
  --run "acme-cli --headless"`,`evolve agent add acme-cli \\
35
35
  --dir ./acme-agent \\
@@ -39,37 +39,37 @@ 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:O.columns,quiet:{kind:"boolean",short:"q",help:"Print only name[:label], one per line",group:"Output"},"no-trunc":O["no-trunc"],"no-headers":O["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"]}}}},Zn={run:{summary:"Start a job; the short form of job start",flags:ta,minPositionals:0,maxPositionals:0,examples:na("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. --show-defaults prints the platform's analyze defaults and exits.",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"},"show-defaults":{kind:"boolean",help:"Print the built-in prompt, rubric, model, effort and provider, then exit",group:"Analyzer"},trial:{kind:"repeat",short:"t",value:"<trial-id>",help:"Analyze only this trial; repeatable",group:"Selection"},"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:0,maxPositionals:1,positionalUsage:"[<job-id>]",examples:["evolve analyze 3e1f9a2c --watch",`evolve analyze 3e1f9a2c \\
42
+ --delivery direct`]},list:{summary:"List your env secrets",flags:{columns:O.columns,quiet:{kind:"boolean",short:"q",help:"Print only name[:label], one per line",group:"Output"},"no-trunc":O["no-trunc"],"no-headers":O["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"]}}}},Xs={run:{summary:"Start a job; the short form of job start",flags:ea,minPositionals:0,maxPositionals:0,examples:ta("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. --show-defaults prints the platform's analyze defaults and exits.",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"},"show-defaults":{kind:"boolean",help:"Print the built-in prompt, rubric, model, effort and provider, then exit",group:"Analyzer"},trial:{kind:"repeat",short:"t",value:"<trial-id>",help:"Analyze only this trial; repeatable",group:"Selection"},"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:0,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`,"evolve analyze 3e1f9a2c -t d1a10c4e -t d1a10f72"]},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:{name:{kind:"string",value:"<name>",help:"A name for the check; default: the accept timestamp",group:"Checker"},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"},"show-defaults":{kind:"boolean",help:"Print the built-in prompt, rubric, model, effort and provider, then exit",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 -d terminal-bench-4@4.0 -i 'abs-*' -l 10 --watch","evolve check --show-defaults"]},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. What a trial folder must hold, the score included: evolve skills get evals core-concepts/upload",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"]}},sa={jobs:"job",trials:"trial",analyses:"analysis",sessions:"session",datasets:"dataset",secret:"secrets"},ra={agents:'"agents" is reserved for the managed-agents CLI (not released yet) \u2014 for eval agent arms use "evolve agent"'},wr={ls:"list"},Xo=80,Ot=23;function $e(e,t="",n=Xo){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 tt(e,t,n){let s="".padEnd(n),[r,...a]=$e(t,s);return [` ${e.padEnd(n-2)}${r.slice(n)}`,...a]}function Qo(e,t){let n=[...t.short?[`-${t.short}`]:[],...(t.aliases??[]).map(r=>`--${r}`),`--${e}`];return `${t.short?"":" "}${n.join(", ")}${t.value?` ${t.value}`:""}`}function es(e){let t=Object.entries(e),n=t.map(([a,o])=>Qo(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]}`,...$e(l,"".padEnd(s))):r.push(...tt(n[o],l,s));}),r}function Zo(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}:`,...es(r));return n}function el(e){return e.split(`
46
- `).map((t,n)=>n===0?` ${t}`:` ${t}`)}function Sr(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("",...$e(t.notes)),r.push(...Zo(t.flags)),r.push("","Global options:",...es(Jt));let a=he[e];return a!==void 0&&r.push("","Commands:",...aa(a)),r.push("","Examples:",...t.examples.flatMap(el)),r.join(`
47
- `)}function aa(e){let t=Math.max(...Object.keys(e.commands).map(n=>n.length))+4;return Object.entries(e.commands).flatMap(([n,s])=>tt(n,s.summary,t))}function xr(e){let t=he[e],n=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e} <command> [options]`];return t.notes!==void 0&&n.push("",...$e(t.notes)),n.push("","Commands:",...aa(t)),n.push("",`Run "evolve ${e} <command> --help" for its options and examples.`),n.join(`
48
- `)}function qn(){let e=["evolve \u2014 Evolve hosted jobs CLI","","Usage: evolve <command> [options]","","Start here (for AI agents):"," evolve skills get evals","",...$e("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(Zn))e.push(...tt(t,n.summary,Ot));e.push(...tt("help [command]","Show help; also -h/--help on any command",Ot)),e.push("","Command groups (evolve <group> <verb>):");for(let[t,n]of Object.entries(he))e.push(...tt(t,n.summary,Ot)),e.push(...$e(Object.keys(n.commands).join(", "),"".padEnd(Ot)));return e.push("","Global options:",...es({...Jt,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 Rp=qn(),st=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 tl(){try{return JSON.parse(fs.readFileSync(path.join(st,"package.json"),"utf-8")).version??"unknown"}catch{return "unknown"}}function zn(e,t){let n=[e.flags,Jt];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 nl(e,t){if(t==="--help"||t==="-h")return true;if(t.startsWith("--")){let n=t.slice(2).split("=")[0];return zn(e,{long:n})!==void 0}if(t.startsWith("-")&&t.length>1){let n=t.slice(1).split("=")[0];return zn(e,{short:n})!==void 0}return false}function jn(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 g=o.slice(2),f=g.indexOf("=");f!==-1&&(c=g.slice(f+1),g=g.slice(0,f)),l={long:g};}else if(o.startsWith("-")&&o.length>1){let g=o.slice(1),f=g.indexOf("=");f!==-1&&(c=g.slice(f+1),g=g.slice(0,f)),l={short:g};}else {r.push(o);continue}let i=zn(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 g=n[a+1];if(g===void 0||nl(t,g)){let f=g!==void 0?` (use --${u}=${g} if that is the value)`:"";throw new m(`Option --${u} requires a value${f}`)}p=g,a++;}if(d.kind==="number"){let g=Number(p);if(p.trim()===""||!Number.isFinite(g))throw new m(`Option --${u} expects a number, got "${p}"`);s[u]=g;}else if(d.kind==="repeat"){let g=s[u]??[];g.push(p),s[u]=g;}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 sl(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=Zn[t],s=t==="check"&&e[1]!==void 0&&!e[1].startsWith("-")?Vn(he.check,e.slice(1)):null;if(n&&s===null)return jn(t,n,e.slice(1));let r=ra[t];if(r)throw new m(r);let a=sa[t]??t,o=he[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 jn(`${a} ${o.defaultVerb}`,o.commands[o.defaultVerb],e.slice(1))}let c=Vn(o,e.slice(1));if(!c){let i=e[2];if(rl(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 jn(`${a} ${c.verb}`,c.spec,e.slice(1+c.words))}function Vn(e,t){let n=t[0],s=t[1];if(n!==void 0&&s!==void 0&&!s.startsWith("-")){let o=`${n} ${wr[s]??s}`,l=e.commands[o];if(l)return {verb:o,spec:l,words:2}}if(n===void 0)return null;let r=wr[n]??n,a=e.commands[r];return a?{verb:r,spec:a,words:1}:null}function rl(e,t){return Object.keys(e.commands).some(n=>n.startsWith(`${t} `))}function al(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 il=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)$/,ol=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)[eE][-+][0-9]+$/;function ll(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:ol}:t.test.test("1.5")?{...t,test:il}:t)}var ul=/^[-+]?(?:0|[1-9][0-9_]*)$/,cl=/^[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+$/;function dl(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:cl}:t.test.test("19")?{...t,test:ul}:t)}function pl(e,t){return ia(e,t).value}function ia(e,t){let n=new yaml.LineCounter,s=yaml.parseDocument(e,{version:"1.1",schema:"yaml-1.1",resolveKnownTags:false,lineCounter:n,customTags:l=>dl(ll(al(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 gl=["../../spec/openapi.yaml","../../../../spec/openapi.yaml"],Ct;function fl(){if(Ct)return Ct;let e=[],t=gl.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 Ct={root:o,components:a},Ct}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 oa(e){let t=e.type;return typeof t=="string"?[t]:Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}function ts(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 ts(a,t,r)}function ml(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 la(e,t){let n=t.locate?.(e),s=`${t.source}${n!==void 0?`:${n}`:""}`;return e.length===0?s:`${ml(e)} in ${s}`}function j(e,t,n,s){throw new m(`--config: ${la(e,t)} ${n} [spec: ${s}]`)}function hl(e){for(let t=e.length-1;t>=0;t--)if(typeof e[t]=="string")return e[t];return "value"}function yl(e,t){if(!e)return "a list";let n=ts(e,t.components,""),s=oa(n.schema);return s.includes("string")?"a list of strings":s.includes("object")?"a list of objects":"a list"}function Lt(e,t,n,s,r,a=false){let{schema:o,specName:l}=ts(t,r.components,s),c=oa(o),i=u=>l?`${l}.${u}`:u;if(e===null){if(c.includes("null"))return;j(n,r,`must be a ${c[0]??"value"}, not null`,l);}if(c.includes("object")){let u=oe(o.additionalProperties)?o.additionalProperties:void 0;if(!oe(e)){let p=u&&!o.properties?`must be a map of KEY: "value" pairs, not ${me(e)}`:`must be an object like {${_l(o)}: "..."}, not ${me(e)}`;j(n,r,p,l);}let d=oe(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&&j(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 ${la([...n,p],r)} (allowed: ${Object.keys(d).join(", ")}) [spec: ${l}]`);for(let[p,g]of Object.entries(d)){let f=e[p];f!==void 0&&Lt(f,g,[...n,p],i(p),r);}}if(u)for(let[p,g]of Object.entries(e))d?.[p]===void 0&&Lt(g,u,[...n,p],l,r);return}if(c.includes("array")){let u=oe(o.items)?o.items:void 0;Array.isArray(e)||j(n,r,`must be ${yl(u,r)}, not ${me(e)}`,l),typeof o.minItems=="number"&&e.length<o.minItems&&j(n,r,`needs at least ${o.minItems} ${o.minItems===1?"entry":"entries"}`,l),typeof o.maxItems=="number"&&e.length>o.maxItems&&j(n,r,`takes at most ${o.maxItems} entries`,l),u&&e.forEach((d,p)=>Lt(d,u,[...n,p],l,r));return}if(Array.isArray(o.enum)){o.enum.includes(e)||j(n,r,`must be one of: ${o.enum.join(", ")}`,l);return}if(c.includes("string")){typeof e!="string"&&j(n,r,`must be a string, not ${me(e)} \u2014 quote it (${hl(n)}: "...")`,l),typeof o.maxLength=="number"&&e.length>o.maxLength&&j(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))&&j(n,r,`must be ${u?"an integer":"a number"}, not ${me(e)}`,l),typeof o.minimum=="number"&&e<o.minimum&&j(n,r,`must be at least ${o.minimum}`,l),typeof o.maximum=="number"&&e>o.maximum&&j(n,r,`must be at most ${o.maximum}`,l);return}c.includes("boolean")&&typeof e!="boolean"&&j(n,r,`must be a boolean, not ${me(e)}`,l);}function _l(e){let t=Array.isArray(e.required)?e.required[0]:void 0;return typeof t=="string"?t:(oe(e.properties)?Object.keys(e.properties):[])[0]??"name"}function bl(e,t,n){let{root:s,components:r}=fl();Lt(e,s,[],"JobCreate",{source:t,locate:n,components:r},true);}function me(e){return e===null?"null":Array.isArray(e)?"a list":typeof e=="object"?`a ${e.constructor?.name??"object"}`:`a ${typeof e}`}function oe(e){if(typeof e!="object"||e===null||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Hn(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)||oe(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)=>Hn(r,`${t}[${a}]`,n,s));else for(let[r,a]of Object.entries(e))Hn(a,`${t}.${r}`,n,s);s.delete(e);return}throw new m(`--config: ${t} in ${n} resolved to ${me(e)}, which a JSON body cannot carry \u2014 quote the value to keep it text`)}}function kl(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}=ia(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))Hn(l,o,e);return bl(a,e,r),s}function Rr(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 vl(e){let t=e.trim();try{return JSON.parse(t)}catch{return t==="True"?true:t==="False"?false:t==="None"?null:t}}function wl(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=vl(s.slice(r+1));a==="config"&&typeof o=="string"&&(o=Sl(o,t)),n[a]=o;}return n}function Sl(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 ns(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 ss(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=pl(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(!oe(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(!oe(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 xl(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 Rl(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 ua(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 Al(e,t=n=>fs.readFileSync(n,"utf-8")){let n=e.flags,s=typeof n.config=="string"?kl(n.config,t):{},r;if(n.dataset!==void 0)r=n.dataset.map(b=>{let S=Rr(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=Rr(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=wl(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=s.agent_env,c=n["verifier-env"]!==void 0?ua(n["verifier-env"],"--verifier-env"):s.verifier_env,i=n.secret!==void 0||n["secret-inline"]!==void 0?[...n.secret!==void 0?xl(n.secret):[],...n["secret-inline"]!==void 0?Rl(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,g=n["max-trial-spend"]!==void 0?n["max-trial-spend"]:s.max_trial_spend_usd;if(n.env!==void 0&&!lt.includes(String(n.env)))throw new m(`-e/--env must be one of: ${lt.join(", ")}`);let f=n.env!==void 0?n.env:s.sandbox_provider,y={...s.retry??{}};n["max-retries"]!==void 0&&(y.max_retries=n["max-retries"]),n["retry-include"]!==void 0&&(y.include_exceptions=n["retry-include"]),n["retry-exclude"]!==void 0&&(y.exclude_exceptions=n["retry-exclude"]);let h=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,w={...s.analyze??{}};n["analyze-model"]!==void 0&&(w.model_name=String(n["analyze-model"])),n["analyze-rubric"]!==void 0&&(w.rubric=ss(String(n["analyze-rubric"]),t)),n["analyze-prompt"]!==void 0&&(w.prompt=ns(String(n["analyze-prompt"]),t)),n["analyze-provider"]!==void 0&&(w.sandbox_provider=String(n["analyze-provider"])),n["analyze-effort"]!==void 0&&(w.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 x=n[b]!==void 0?n[b]:s[S];x!==void 0&&(v[S]=x);}return {...u!==void 0?{job_name:u}:{},datasets:r,agents:a,...d!==void 0?{n_attempts:d}:{},...p!==void 0?{n_concurrent_trials:p}:{},...g!==void 0?{max_trial_spend_usd:g}:{},...f!==void 0?{sandbox_provider:f}:{},...Object.keys(y).length>0?{retry:y}:{},...h?{analyze:w}:{},...n["system-log"]===true||s.system_log===true?{system_log:true}:{},...v,...l!==void 0?{agent_env:l}:{},...c!==void 0?{verifier_env:c}:{},...i!==void 0?{secrets:i}:{}}}function Tl(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 El(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=ua(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 Pl={out:e=>process.stdout.write(e+`
45
+ --watch`,"evolve analyze 3e1f9a2c -t d1a10c4e -t d1a10f72"]},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:{name:{kind:"string",value:"<name>",help:"A name for the check; default: the accept timestamp",group:"Checker"},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"},"show-defaults":{kind:"boolean",help:"Print the built-in prompt, rubric, model, effort and provider, then exit",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 -d terminal-bench-4@4.0 -i 'abs-*' -l 10 --watch","evolve check --show-defaults"]},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. What a trial folder must hold, the score included: evolve skills get evals core-concepts/upload",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"]}},sa={jobs:"job",trials:"trial",analyses:"analysis",sessions:"session",datasets:"dataset",secret:"secrets"},na={agents:'"agents" is reserved for the managed-agents CLI (not released yet) \u2014 for eval agent arms use "evolve agent"'},vr={ls:"list"},Yo=80,Ct=23;function $e(e,t="",s=Yo){let n=[],r=t;for(let a of e.split(/\s+/).filter(o=>o!==""))r!==t&&r.length+1+a.length>s&&(n.push(r),r=t),r+=(r===t?"":" ")+a;return r!==t&&n.push(r),n}function tt(e,t,s){let n="".padEnd(s),[r,...a]=$e(t,n);return [` ${e.padEnd(s-2)}${r.slice(s)}`,...a]}function Xo(e,t){let s=[...t.short?[`-${t.short}`]:[],...(t.aliases??[]).map(r=>`--${r}`),`--${e}`];return `${t.short?"":" "}${s.join(", ")}${t.value?` ${t.value}`:""}`}function Qs(e){let t=Object.entries(e),s=t.map(([a,o])=>Xo(a,o)),n=Math.min(Math.max(...s.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;s[o].length+4>n?r.push(` ${s[o]}`,...$e(l,"".padEnd(n))):r.push(...tt(s[o],l,n));}),r}function Qo(e){let t=new Map;for(let[n,r]of Object.entries(e)){let a=r.group===void 0?"Options":r.group;t.set(a,{...t.get(a)??{},[n]:r});}let s=[];for(let[n,r]of t)s.push("",`${n}:`,...Qs(r));return s}function Zo(e){return e.split(`
46
+ `).map((t,s)=>s===0?` ${t}`:` ${t}`)}function wr(e,t){let s=t.positionalUsage?` ${t.positionalUsage}`:"",n=Object.keys(t.flags).length>0?" [options]":"",r=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e}${s}${n}`];t.notes!==void 0&&r.push("",...$e(t.notes)),r.push(...Qo(t.flags)),r.push("","Global options:",...Qs(Nt));let a=he[e];return a!==void 0&&r.push("","Commands:",...ra(a)),r.push("","Examples:",...t.examples.flatMap(Zo)),r.join(`
47
+ `)}function ra(e){let t=Math.max(...Object.keys(e.commands).map(s=>s.length))+4;return Object.entries(e.commands).flatMap(([s,n])=>tt(s,n.summary,t))}function Sr(e){let t=he[e],s=[`evolve ${e} \u2014 ${t.summary}`,"",`Usage: evolve ${e} <command> [options]`];return t.notes!==void 0&&s.push("",...$e(t.notes)),s.push("","Commands:",...ra(t)),s.push("",`Run "evolve ${e} <command> --help" for its options and examples.`),s.join(`
48
+ `)}function Bs(){let e=["evolve \u2014 Evolve hosted jobs CLI","","Usage: evolve <command> [options]","","Start here (for AI agents):"," evolve skills get evals","",...$e("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,s]of Object.entries(Xs))e.push(...tt(t,s.summary,Ct));e.push(...tt("help [command]","Show help; also -h/--help on any command",Ct)),e.push("","Command groups (evolve <group> <verb>):");for(let[t,s]of Object.entries(he))e.push(...tt(t,s.summary,Ct)),e.push(...$e(Object.keys(s.commands).join(", "),"".padEnd(Ct)));return e.push("","Global options:",...Qs({...Nt,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 xp=Bs(),nt=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 el(){try{return JSON.parse(fs$1.readFileSync(path.join(nt,"package.json"),"utf-8")).version??"unknown"}catch{return "unknown"}}function qs(e,t){let s=[e.flags,Nt];for(let n of s)for(let[r,a]of Object.entries(n))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 tl(e,t){if(t==="--help"||t==="-h")return true;if(t.startsWith("--")){let s=t.slice(2).split("=")[0];return qs(e,{long:s})!==void 0}if(t.startsWith("-")&&t.length>1){let s=t.slice(1).split("=")[0];return qs(e,{short:s})!==void 0}return false}function Ls(e,t,s){let n={},r=[];for(let a=0;a<s.length;a++){let o=s[a];if(o==="--help"||o==="-h")return {command:"help",positionals:e.split(" "),flags:{}};let l,c;if(o.startsWith("--")){let g=o.slice(2),f=g.indexOf("=");f!==-1&&(c=g.slice(f+1),g=g.slice(0,f)),l={long:g};}else if(o.startsWith("-")&&o.length>1){let g=o.slice(1),f=g.indexOf("=");f!==-1&&(c=g.slice(f+1),g=g.slice(0,f)),l={short:g};}else {r.push(o);continue}let i=qs(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`);n[u]=true;continue}let p=c;if(p===void 0){let g=s[a+1];if(g===void 0||tl(t,g)){let f=g!==void 0?` (use --${u}=${g} if that is the value)`:"";throw new m(`Option --${u} requires a value${f}`)}p=g,a++;}if(d.kind==="number"){let g=Number(p);if(p.trim()===""||!Number.isFinite(g))throw new m(`Option --${u} expects a number, got "${p}"`);n[u]=g;}else if(d.kind==="repeat"){let g=n[u]??[];g.push(p),n[u]=g;}else n[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:n}}function sl(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 s=Xs[t],n=t==="check"&&e[1]!==void 0&&!e[1].startsWith("-")?zs(he.check,e.slice(1)):null;if(s&&n===null)return Ls(t,s,e.slice(1));let r=na[t];if(r)throw new m(r);let a=sa[t]??t,o=he[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 Ls(`${a} ${o.defaultVerb}`,o.commands[o.defaultVerb],e.slice(1))}let c=zs(o,e.slice(1));if(!c){let i=e[2];if(nl(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 Ls(`${a} ${c.verb}`,c.spec,e.slice(1+c.words))}function zs(e,t){let s=t[0],n=t[1];if(s!==void 0&&n!==void 0&&!n.startsWith("-")){let o=`${s} ${vr[n]??n}`,l=e.commands[o];if(l)return {verb:o,spec:l,words:2}}if(s===void 0)return null;let r=vr[s]??s,a=e.commands[r];return a?{verb:r,spec:a,words:1}:null}function nl(e,t){return Object.keys(e.commands).some(s=>s.startsWith(`${t} `))}function rl(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 al=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)$/,il=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*|\.[0-9][0-9_]*)[eE][-+][0-9]+$/;function ol(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:il}:t.test.test("1.5")?{...t,test:al}:t)}var ll=/^[-+]?(?:0|[1-9][0-9_]*)$/,ul=/^[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+$/;function cl(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:ul}:t.test.test("19")?{...t,test:ll}:t)}function dl(e,t){return aa(e,t).value}function aa(e,t){let s=new yaml.LineCounter,n=yaml.parseDocument(e,{version:"1.1",schema:"yaml-1.1",resolveKnownTags:false,lineCounter:s,customTags:l=>cl(ol(rl(l)))}),r=n.errors[0]??n.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}`)}n.options.logLevel="silent";let a;try{a=n.toJS()??{};}catch(l){throw new m(`${t}: ${l.message}`)}return {value:a,locate:l=>{let i=n.getIn(l,true)?.range?.[0];return i===void 0?void 0:s.linePos(i).line}}}var pl=["../../spec/openapi.yaml","../../../../spec/openapi.yaml"],Lt;function gl(){if(Lt)return Lt;let e=[],t=pl.map(n=>url.fileURLToPath(new URL(n,(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))))),s=process.env.EVOLVE_OPENAPI_SPEC_PATH;s&&t.unshift(s);for(let n of t){if(e.push(n),!fs$1.existsSync(n))continue;let a=yaml.parse(fs$1.readFileSync(n,"utf-8"))?.components?.schemas,o=a?.JobCreate;if(!a||!o||typeof o!="object")throw new Error(`${n} carries no components.schemas.JobCreate \u2014 the contract this CLI validates -c against`);return Lt={root:o,components:a},Lt}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 ia(e){let t=e.type;return typeof t=="string"?[t]:Array.isArray(t)?t.filter(s=>typeof s=="string"):[]}function Zs(e,t,s){let n=e.$ref;if(typeof n!="string")return {schema:e,specName:s};let r=n.replace("#/components/schemas/",""),a=t[r];if(!a)throw new Error(`spec/openapi.yaml: unresolvable $ref "${n}"`);return Zs(a,t,r)}function fl(e){return e.length===1&&typeof e[0]=="string"?`"${e[0]}"`:e.map((t,s)=>typeof t=="number"?`[${t}]`:s===0?t:`.${t}`).join("")}function oa(e,t){let s=t.locate?.(e),n=`${t.source}${s!==void 0?`:${s}`:""}`;return e.length===0?n:`${fl(e)} in ${n}`}function j(e,t,s,n){throw new m(`--config: ${oa(e,t)} ${s} [spec: ${n}]`)}function ml(e){for(let t=e.length-1;t>=0;t--)if(typeof e[t]=="string")return e[t];return "value"}function hl(e,t){if(!e)return "a list";let s=Zs(e,t.components,""),n=ia(s.schema);return n.includes("string")?"a list of strings":n.includes("object")?"a list of objects":"a list"}function jt(e,t,s,n,r,a=false){let{schema:o,specName:l}=Zs(t,r.components,n),c=ia(o),i=u=>l?`${l}.${u}`:u;if(e===null){if(c.includes("null"))return;j(s,r,`must be a ${c[0]??"value"}, not null`,l);}if(c.includes("object")){let u=oe(o.additionalProperties)?o.additionalProperties:void 0;if(!oe(e)){let p=u&&!o.properties?`must be a map of KEY: "value" pairs, not ${me(e)}`:`must be an object like {${yl(o)}: "..."}, not ${me(e)}`;j(s,r,p,l);}let d=oe(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&&j(s,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 ${oa([...s,p],r)} (allowed: ${Object.keys(d).join(", ")}) [spec: ${l}]`);for(let[p,g]of Object.entries(d)){let f=e[p];f!==void 0&&jt(f,g,[...s,p],i(p),r);}}if(u)for(let[p,g]of Object.entries(e))d?.[p]===void 0&&jt(g,u,[...s,p],l,r);return}if(c.includes("array")){let u=oe(o.items)?o.items:void 0;Array.isArray(e)||j(s,r,`must be ${hl(u,r)}, not ${me(e)}`,l),typeof o.minItems=="number"&&e.length<o.minItems&&j(s,r,`needs at least ${o.minItems} ${o.minItems===1?"entry":"entries"}`,l),typeof o.maxItems=="number"&&e.length>o.maxItems&&j(s,r,`takes at most ${o.maxItems} entries`,l),u&&e.forEach((d,p)=>jt(d,u,[...s,p],l,r));return}if(Array.isArray(o.enum)){o.enum.includes(e)||j(s,r,`must be one of: ${o.enum.join(", ")}`,l);return}if(c.includes("string")){typeof e!="string"&&j(s,r,`must be a string, not ${me(e)} \u2014 quote it (${ml(s)}: "...")`,l),typeof o.maxLength=="number"&&e.length>o.maxLength&&j(s,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))&&j(s,r,`must be ${u?"an integer":"a number"}, not ${me(e)}`,l),typeof o.minimum=="number"&&e<o.minimum&&j(s,r,`must be at least ${o.minimum}`,l),typeof o.maximum=="number"&&e>o.maximum&&j(s,r,`must be at most ${o.maximum}`,l);return}c.includes("boolean")&&typeof e!="boolean"&&j(s,r,`must be a boolean, not ${me(e)}`,l);}function yl(e){let t=Array.isArray(e.required)?e.required[0]:void 0;return typeof t=="string"?t:(oe(e.properties)?Object.keys(e.properties):[])[0]??"name"}function _l(e,t,s){let{root:n,components:r}=gl();jt(e,n,[],"JobCreate",{source:t,locate:s,components:r},true);}function me(e){return e===null?"null":Array.isArray(e)?"a list":typeof e=="object"?`a ${e.constructor?.name??"object"}`:`a ${typeof e}`}function oe(e){if(typeof e!="object"||e===null||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Vs(e,t,s,n=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 ${s} is ${Number.isNaN(e)?".nan":"infinite"} \u2014 a JSON body carries finite numbers only`)}if(Array.isArray(e)||oe(e)){if(n.has(e))throw new m(`--config: ${t} in ${s} is an alias of a value that contains it \u2014 a JSON body cannot carry a cycle`);if(n.add(e),Array.isArray(e))e.forEach((r,a)=>Vs(r,`${t}[${a}]`,s,n));else for(let[r,a]of Object.entries(e))Vs(a,`${t}.${r}`,s,n);n.delete(e);return}throw new m(`--config: ${t} in ${s} resolved to ${me(e)}, which a JSON body cannot carry \u2014 quote the value to keep it text`)}}function bl(e,t){let s;try{s=t(e);}catch(o){throw new m(`--config: cannot read ${e}: ${o.message}`)}let n,r;if(e.endsWith(".json"))try{n=JSON.parse(s);}catch(o){throw new m(`--config: ${e} is not valid JSON: ${o.message}`)}else ({value:n,locate:r}=aa(s,e));if(!n||typeof n!="object"||Array.isArray(n))throw new m(`--config: ${e} must contain a JSON/YAML object`);let a=n;for(let[o,l]of Object.entries(a))Vs(l,o,e);return _l(a,e,r),n}function xr(e,t){let s=e.indexOf("@");if(s===-1)return {name:e};let n=e.slice(0,s),r=e.slice(s+1);if(!n||!r)throw new m(`Invalid ${t} "${e}": expected name or name@version`);return {name:n,version:r}}function kl(e){let t=e.trim();try{return JSON.parse(t)}catch{return t==="True"?true:t==="False"?false:t==="None"?null:t}}function vl(e,t=s=>fs$1.readFileSync(s,"utf-8")){let s={};for(let n of e){let r=n.indexOf("=");if(r<=0)throw new m(`Invalid --ak "${n}": expected key=value`);let a=n.slice(0,r).trim(),o=kl(n.slice(r+1));a==="config"&&typeof o=="string"&&(o=wl(o,t)),s[a]=o;}return s}function wl(e,t){let s;try{s=t(e);}catch(r){throw new m(`--ak config: cannot read ${e}: ${r.message}`)}let n;if(e.endsWith(".toml"))try{n=smolToml.parse(s);}catch(r){throw new m(`--ak config: ${e} is not valid TOML: ${r.message}`)}else if(e.endsWith(".json"))try{n=JSON.parse(s);}catch(r){throw new m(`--ak config: ${e} is not valid JSON: ${r.message}`)}else try{n=JSON.parse(s);}catch{try{n=smolToml.parse(s);}catch{throw new m(`--ak config: ${e} parses as neither JSON nor TOML; use a .json or .toml settings file`)}}if(!n||typeof n!="object"||Array.isArray(n))throw new m(`--ak config: ${e} must contain a settings object`);return n}function en(e,t=s=>fs$1.readFileSync(s,"utf-8")){let s;try{s=t(e);}catch(n){throw new m(`--prompt: cannot read ${e}: ${n.message}`)}if(s.trim().length===0)throw new m(`--prompt: ${e} is empty \u2014 the analyzer's prompt file must carry the instruction text`);return s}function tn(e,t=s=>fs$1.readFileSync(s,"utf-8")){let s;try{s=t(e);}catch(o){throw new m(`--rubric: cannot read ${e}: ${o.message}`)}let n;if(e.endsWith(".toml"))try{n=smolToml.parse(s);}catch(o){throw new m(`--rubric: ${e} is not valid TOML: ${o.message}`)}else if(e.endsWith(".yaml")||e.endsWith(".yml"))n=dl(s,e);else if(e.endsWith(".json"))try{n=JSON.parse(s);}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(!oe(n))throw new m(`--rubric: ${e} must contain a {criteria: [...]} object`);let r=Object.keys(n).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=n.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(!oe(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 Sl(e){return e.map(t=>{let s=t.indexOf("="),n=s===-1?t:t.slice(0,s),r=s===-1?void 0:t.slice(s+1);if(s!==-1&&!r)throw new m(`Invalid --secret "${t}": expected NAME[@LABEL][=ENVNAME]`);let a=n.indexOf("@"),o=a===-1?n:n.slice(0,a),l=a===-1?void 0:n.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 xl(e){let t="NAME[@LABEL]:brokered|direct=VALUE";return e.map(s=>{let n=s.indexOf("=");if(n===-1)throw new m(`Invalid --secret-inline "${s}": expected ${t}`);let r=s.slice(0,n),a=s.slice(n+1);if(!a)throw new m(`Invalid --secret-inline "${s}": 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 la(e,t){let s={};for(let n of e){let r=n.indexOf("=");if(r<=0)throw new m(`Invalid ${t} "${n}": expected KEY=VALUE`);s[n.slice(0,r)]=n.slice(r+1);}return s}function Rl(e,t=s=>fs$1.readFileSync(s,"utf-8")){let s=e.flags,n=typeof s.config=="string"?bl(s.config,t):{},r;if(s.dataset!==void 0)r=s.dataset.map(b=>{let S=xr(b,"--dataset");return {name:S.name,...S.version?{version:S.version}:{}}});else if(Array.isArray(n.datasets)&&n.datasets.length>0)r=n.datasets.map(b=>({...b}));else throw new m(`"${e.command}" requires -d/--dataset (or datasets in --config)`);if(s["include-task-name"]!==void 0)for(let b of r)b.task_names=s["include-task-name"];if(s["exclude-task-name"]!==void 0)for(let b of r)b.exclude_task_names=s["exclude-task-name"];if(s["n-tasks"]!==void 0)for(let b of r)b.n_tasks=s["n-tasks"];let a;if(s.agent!==void 0||s.model!==void 0){if(s.agent===void 0)throw new m("-m/--model requires -a/--agent");if(s.model===void 0)throw new m("-a/--agent requires at least one -m/--model (the server applies no model default)");let b=xr(String(s.agent),"--agent");a=s.model.map(S=>({name:b.name,model_name:S,...b.version?{version:b.version}:{}}));}else if(Array.isArray(n.agents)&&n.agents.length>0)a=n.agents.map(b=>({...b}));else throw new m(`"${e.command}" requires -a/--agent and -m/--model (or agents in --config)`);if(s.effort!==void 0&&(a=a.map(b=>({...b,reasoning_effort:s.effort}))),s.ak!==void 0){let b=vl(s.ak,t);a=a.map(S=>({...S,kwargs:{...S.kwargs??{},...b}}));}s.preset!==void 0&&(a=a.map(b=>({...b,preset:s.preset}))),s.skill!==void 0&&(a=a.map(b=>({...b,skills:[...s.skill]})));let l=n.agent_env,c=s["verifier-env"]!==void 0?la(s["verifier-env"],"--verifier-env"):n.verifier_env,i=s.secret!==void 0||s["secret-inline"]!==void 0?[...s.secret!==void 0?Sl(s.secret):[],...s["secret-inline"]!==void 0?xl(s["secret-inline"]):[]]:n.secrets,u=s["job-name"]!==void 0?String(s["job-name"]):n.job_name,d=s["n-attempts"]!==void 0?s["n-attempts"]:n.n_attempts,p=s["n-concurrent"]!==void 0?s["n-concurrent"]:n.n_concurrent_trials,g=s["max-trial-spend"]!==void 0?s["max-trial-spend"]:n.max_trial_spend_usd;if(s.env!==void 0&&!ut.includes(String(s.env)))throw new m(`-e/--env must be one of: ${ut.join(", ")}`);let f=s.env!==void 0?s.env:n.sandbox_provider,y={...n.retry??{}};s["max-retries"]!==void 0&&(y.max_retries=s["max-retries"]),s["retry-include"]!==void 0&&(y.include_exceptions=s["retry-include"]),s["retry-exclude"]!==void 0&&(y.exclude_exceptions=s["retry-exclude"]);let h=s.analyze===true||s["analyze-model"]!==void 0||s["analyze-rubric"]!==void 0||s["analyze-prompt"]!==void 0||s["analyze-provider"]!==void 0||s["analyze-effort"]!==void 0||n.analyze!==void 0,w={...n.analyze??{}};s["analyze-model"]!==void 0&&(w.model_name=String(s["analyze-model"])),s["analyze-rubric"]!==void 0&&(w.rubric=tn(String(s["analyze-rubric"]),t)),s["analyze-prompt"]!==void 0&&(w.prompt=en(String(s["analyze-prompt"]),t)),s["analyze-provider"]!==void 0&&(w.sandbox_provider=String(s["analyze-provider"])),s["analyze-effort"]!==void 0&&(w.reasoning_effort=String(s["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 x=s[b]!==void 0?s[b]:n[S];x!==void 0&&(v[S]=x);}return {...u!==void 0?{job_name:u}:{},datasets:r,agents:a,...d!==void 0?{n_attempts:d}:{},...p!==void 0?{n_concurrent_trials:p}:{},...g!==void 0?{max_trial_spend_usd:g}:{},...f!==void 0?{sandbox_provider:f}:{},...Object.keys(y).length>0?{retry:y}:{},...h?{analyze:w}:{},...s["system-log"]===true||n.system_log===true?{system_log:true}:{},...v,...l!==void 0?{agent_env:l}:{},...c!==void 0?{verifier_env:c}:{},...i!==void 0?{secrets:i}:{}}}function Al(e){let t=e.flags,s=typeof t.dir=="string",n=typeof t.git=="string"||typeof t.ref=="string"||typeof t.path=="string",r=typeof t.from=="string";if([s,n,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(s)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 Tl(e,t=s=>fs$1.readFileSync(s,"utf-8")){let s=e.flags,n=typeof s.dir=="string",r=typeof s["install-script"]=="string";if(n&&r)throw new m('"agent add" takes EITHER --dir OR --install-script, not both');if(!n&&!r)throw new m('"agent add" requires --install-script (or --dir for a local agent directory)');if(typeof s.run!="string")throw new m('"agent add" requires --run');let a=la(s["agent-env"]??[],"--agent-env");return {name:e.positionals[0],...n?{directory:s.dir}:{install_script:t(s["install-script"])},run_command:s.run,...Object.keys(a).length>0?{env:a}:{}}}var El={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 P(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 U(e){return typeof e=="number"?`$${e.toFixed(2)}`:"-"}function Oe(e){return e.lane==="measured"?U(e.usd):e.lane==="floor"?`at least ${U(e.usd)}`:"-"}function ca(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 ${U(n.cost_usd)}${s}`}function rs(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 Dt(e){let t=`${e.name}:${e.model_name}`;return e.version?`${t}:${e.version}`:t}function Gn(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 Nt(e){return e.map(t=>`${t.name}@${t.version}`).join(", ")||"-"}function _e(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function le(e){return e.replace(/[\t\n\r]+/g," ")}function F(e,t,n,s,r,a){if(e.flags.quiet===true){for(let c of n)t.out(a(c));return}let o=Il(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?le(d.cell(u)):_e(le(d.cell(u)),60)));for(let u of P(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=>le(i.cell(c))).join(" "));}}function Il(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 V(e,t={}){let n=[["id",e.id],["status",e.status],["datasets",Nt(e.datasets)]];n.push(["agents",e.agents.map(Dt).join(", ")]);for(let l of e.agents){l.skills.length>0&&n.push(["skills",`${Dt(l)}: ${l.skills.join(", ")}`]);for(let c of l.skill_locks??[])n.push(["skill lock",`${c.name} @ ${c.git_commit_id?c.git_commit_id.slice(0,12):ue(c.digest)}`]);}n.push(["size",`${e.counts.agents} agent(s) x ${e.counts.tasks} task(s) = ${e.n_total_trials} trial(s)`]);let s=e.trials.byStatus.SCORED;n.push(["scored",`${s} of ${e.n_total_trials} trial(s)`]),e.upload&&e.n_total_trials>0&&s===0&&n.push(["warning","no uploaded trial carries verifier_result.rewards; see: evolve skills get evals core-concepts/upload"]);for(let l of e.build_exclusions)n.push(["build exclusions",l.note]);n.push(["attempts/task",String(e.n_attempts)]),n.push(["concurrency",String(e.n_concurrent_trials)]),n.push(["max spend/trial",U(e.max_trial_spend_usd)]),n.push(["worst case",U(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 c=[["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(([,i])=>i!=null);(e.timeout_multiplier!==1||c.length>0)&&n.push(["timeouts",`x${e.timeout_multiplier}`+(c.length>0?` (${c.map(([i,u])=>`${i} x${u}`).join(", ")})`:"")]);}n.push(["provider",e.upload?"ported":e.sandbox_provider??"-"]),n.push(["visibility",e.visibility]),n.push(["spent",ca(e,true)??Oe(Me(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 r=e.stats.n_unmeasured_judge_trials;if((e.stats.judge_cost_usd!=null&&e.stats.judge_cost_usd>0||typeof r=="number"&&r>0)&&n.push(["spent (judge)",Oe(Me(e.stats.judge_cost_usd,r))]),e.upload?.reported_totals){let l=e.upload.reported_totals,c=[l.n_input_tokens!==null?`in ${l.n_input_tokens}`:null,l.n_cache_tokens!==null?`cache ${l.n_cache_tokens}`:null,l.n_output_tokens!==null?`out ${l.n_output_tokens}`:null].filter(i=>i!==null);c.length>0&&n.push(["reported tokens",c.join(" \xB7 ")]);}if(e.upload?.datasets&&e.upload.datasets.length>0&&n.push(["archive datasets",e.upload.datasets.map(l=>l.version?`${l.name}@${l.version}`:l.name).join(", ")]),(t.taskLinksRow??true)&&e.upload?.task_links&&e.upload.task_links.length>0){let l=e.upload.task_links,c=l.reduce((d,p)=>d+p.n_linked,0),i=l.reduce((d,p)=>d+p.n_trials,0),u=Array.from(new Set(l.flatMap(d=>d.datasets)));n.push(["task links",`${c} of ${i} ${i===1?"trial":"trials"} linked`+(u.length>0?` to ${u.join(", ")}`:"")+(c<i?` \u2014 ${i-c} without the task folder`:"")]);}if(e.stats.analysis){n.push(["analysis",Gn(e.stats.analysis)]);for(let[l,c]of Object.entries(e.stats.analysis.checks))n.push([` ${l}`,`${c.n_pass} pass \xB7 ${c.n_fail} fail \xB7 ${c.n_not_applicable} n/a`+(typeof c.n_unknown=="number"?` \xB7 ${c.n_unknown} unknown`:"")]);}let o=Object.entries(e.trials.byStatus).filter(([,l])=>l>0).map(([l,c])=>`${l} ${c}`).join(" \xB7 ");o&&n.push(["trials",o]);for(let l of e.source_jobs)n.push([l.action==="regrade"?"regrade of":l.action==="retry"?"retry of":"resume of",l.job_id]);if(e.upload){let l=[e.upload.original_job_name,e.upload.original_job_id].filter(c=>c!==null).join(" \xB7 ");n.push(["uploaded",`${e.upload.uploaded_at}${l?` \u2014 originally ${l}`:""}`]);}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]),[...P(n),...$l(e)]}function $l(e){let t=Qt(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",...P(n)]}function Ol(e){return e.source.dataset??`archive ${e.source.sha256.slice(0,12)}`}var Ar=[{key:"id",header:"ID",cell:e=>e.id},{key:"kind",header:"KIND",cell:e=>e.kind},{key:"name",header:"NAME",cell:e=>e.kind==="check"?e.name:e.job_name??"-"},{key:"status",header:"STATUS",cell:e=>e.status},{key:"datasets",header:"DATASETS",cell:e=>e.kind==="check"?Ol(e):Nt(e.datasets)},{key:"agents",header:"AGENTS",cell:e=>e.kind==="check"?`${e.model_name} (${e.reasoning_effort})`:e.agents.map(Dt).join(", ")},{key:"trials",header:"TRIALS",cell:e=>String(e.kind==="check"?e.tasks.total:e.trials.total)},{key:"spent",header:"SPENT",cell:e=>e.kind==="check"?U(e.cost_usd):ca(e,false)??Oe(Me(e.stats.cost_usd,e.stats.n_unmeasured_trials))},{key:"started",header:"STARTED",cell:e=>e.kind==="check"?e.created_at:e.started_at}],Tr=["id","status","datasets","trials","spent","started"],Er=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"agent",header:"AGENT",cell:e=>Dt({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=>Oe(an(e))},{key:"tokens",header:"TOKENS",cell:e=>e.usage&&rs(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}],Cl=["task","agent","attempt","status","reward","spent","id"],Pr=[{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=>Wn(e.mean_reward)},{key:"spent",header:"SPENT",cell:e=>U(e.cost_usd)},{key:"check",header:"CHECK",cell:e=>jl(e.check)},{key:"check-id",header:"TASK CHECK ID",cell:e=>e.check?.id??"-"}],Ll=["task","source","trials","statuses","reward","spent","check"];function da(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 Ut(e){return e===void 0?null:e===null?"custom rubric":e.replace(/_/g," ").toUpperCase()}function Kn(e){let t=Ut(e.label);return t===null||e.label===null?t:`${t}${e.executed===true?" \xB7 executed":e.executed===false?" \xB7 not executed":""}`}function jl(e){if(e===null)return "-";if(e.status!=="completed")return e.status;let t=da(e.checks),n=`pass ${t.pass} \xB7 fail ${t.fail} \xB7 n/a ${t.not_applicable} \xB7 unknown ${t.unknown}`,s=Kn(e);return s===null?n:`${s} \xB7 ${n}`}var Ir=[{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??"-"}],Dl=["name","active","state","tasks","title"];function ue(e){return e.length>19?`${e.slice(0,19)}\u2026`:e}function ce(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}var $r=[{key:"name",header:"NAME",cell:e=>e.name},{key:"id",header:"ID",cell:e=>e.id},{key:"org",header:"ORG",cell:e=>e.org??"-"},{key:"digest",header:"DIGEST",cell:e=>ue(e.digest)},{key:"size",header:"SIZE",cell:e=>ce(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}],Jl=["name","id","digest","size","created"],Or=[{key:"name",header:"NAME",cell:e=>e.name},{key:"org",header:"ORG",cell:e=>e.org??"-"},{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}],Nl=["name","source","run","updated"],Cr=[{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}],Ul=["name","label","delivery","hosts","updated"];function Fl(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",Oe(xe(e))]),e.judge_result&&t.push(["spent (judge)",Oe(rn(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=rs(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 ${U(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"?Ut(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]),P(t)}function Ml(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"?Ut(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 ${le(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=rs(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]),P(n)}function pa(e){let t=[["name",e.name],["org",e.org??"-"],["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]),P(t)}var ga=["e2b","daytona","modal"];function Bl(e){return ga.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 ql(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 Wn(e){return e!==null?String(Math.round(e*1e3)/1e3):"-"}function fa(e){let t=Ue(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=_e(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=fa(n);s!==null&&e.out(s);}function ma(e){let t=e.failures?.length?` (${e.failures.length} task failure${e.failures.length===1?"":"s"})`:"";return `${e.message}${t}`}function ha(e){let t=[["id",e.id],["status",is(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",ma(e.failure)]);for(let n of e.failure.failures??[])t.push([` ${n.task_name}`,n.error]);}return P(t)}function as(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 zl(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(as(t-r)),`phase ${e.phase}${s.length>0?` ${s.join(" \xB7 ")}`:""}`}function Vl(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)?as(a-o):"unfinished";return `${r.name} ${l}`}),n=e.images,s=e.codebuild;return P([["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 is(e){return e.receiving===true?`${e.status} (receiving)`:e.status}function Hl(e){let t=[];return e.task_count!==void 0&&t.push(`tasks=${e.task_count}`),e.failure&&t.push(_e(ma(e.failure),140)),`status ${is(e).padEnd(12)} ${t.join(" ")}`.trimEnd()}function Gl(e){return `state ${e.state}`}function Kl(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 P(n)}function Wl(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=_e(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 ya=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Yl=/^[0-9a-f][0-9a-f-]{7,34}$/i,Lr=8,Ce=200,Xl={job:"jobs",trial:"trials",analysis:"analyses","analyzed trial":"analyzed trials",check:"checks","task check":"task checks",session:"sessions",skill:"skills"},jr=new WeakMap;function Ft(e,t,n){let s=jr.get(e);s===void 0&&(s=new Map,jr.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 Mt(e){let t=[];for await(let n of e)t.push(n);return t}function os(e){let t=be(e);return t!==void 0?{scope:t}:{}}var _a=e=>Ft(e,"jobs",()=>Mt(E(k(e)).list({limit:Ce,...os(e)}))),Dr=e=>Ft(e,"analyses",()=>Mt(ne(k(e)).list({limit:Ce,...os(e)}))),Jr=e=>Ft(e,"checks",()=>Mt(Q(k(e)).list({limit:Ce,...os(e)})));async function Ql(e){let t=E(k(e)),n=(await _a(e)).map(a=>a.id),s=[],r=0;for(let a of n){try{for await(let o of t.trials(a,{limit:Ce}))s.push(o.id);}catch(o){throw o instanceof T&&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 Zl(e){let t=We(zt(e)),n=[],s;do{let r=await t.list({limit:Ce,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 eu={job:async e=>(await _a(e)).map(t=>t.id),trial:Ql,analysis:async e=>(await Dr(e)).map(t=>t.id),"analyzed trial":async e=>(await Dr(e)).map(t=>t.trial_id),check:async e=>(await Jr(e)).map(t=>t.id),"task check":async e=>(await Jr(e)).flatMap(t=>t.results.map(n=>n.id)),session:Zl,skill:async e=>(await Mt(fe(k(e)).list({limit:Ce}))).map(t=>t.id)},tu=(e,t)=>Ft(e,`ids:${t}`,()=>eu[t](e));function nu(e){return `${/^[aeiou]/.test(e[0])?"an":"a"} ${e.join(" or ")}`}async function ls(e,t,n){if(n===void 0||ya.test(n))return {noun:null,id:n};if(/^[0-9a-f][0-9a-f-]*$/i.test(n)&&n.length<Lr)throw new m(`"${n}" is too short to name ${nu(t)} \u2014 id prefixes need at least ${Lr} characters`);if(!Yl.test(n))return {noun:null,id:n};let s=n.toLowerCase(),r=[];for(let l of t){let c=new Set((await tu(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:Xl[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 R(e,t,n){return (await ls(e,[t],n)).id}async function us(e,t,n){let s=await ls(e,["analysis","analyzed trial"],n);if(s.noun==="analysis")return {id:s.id,analysis:null};if(s.noun==="analyzed trial")return Nr(e,await q(k(e)).get(s.id));if(n===void 0||!ya.test(n))return {id:n,analysis:null};try{return {id:n,analysis:await t.get(n)}}catch(r){if(!(r instanceof T)||r.status!==400)throw r;let a;try{a=await q(k(e)).get(n);}catch(o){throw o instanceof T&&o.status===404?r:o}return Nr(e,a)}}async function Nr(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 Yn(e,t){return t.analysis!==null?Promise.resolve(t.analysis):e.get(t.id)}function $(e){return {...e.flags.limit!==void 0?{limit:e.flags.limit}:{},...e.flags.cursor!==void 0?{cursor:String(e.flags.cursor)}:{}}}function be(e){if(e.flags.scope===void 0)return;let t=String(e.flags.scope);if(!ut.includes(t))throw new m(`--scope must be one of: ${ut.join(", ")}; got: ${t}`+(t==="all"?" (Harbor's all adds public rows \u2014 nothing hosted is public)":""));return t}function su(e){if(e.flags.kind===void 0)return;let t=String(e.flags.kind);if(!ct.includes(t))throw new m(`--kind must be one of: ${ct.join(", ")}; got: ${t}`);return t}function ru(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=>!Je.includes(s));if(n.length>0)throw new m(`--status must name analysis statuses (${Je.join(", ")}); got: ${n.join(", ")}`);return t}function ba(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=>!ot.includes(s));if(n.length>0)throw new m(`--status must name trial statuses (${ot.join(", ")}); got: ${n.join(", ")}`);return t}function au(e){return e.status==="COMPLETED"?0:e.status==="FAILED"||e.status==="CANCELLED"?1:0}function iu(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~")}async function ou(e,t,n){let s=new Set;for(let o of e.agents)for(let l of o.skills??[])iu(l)&&s.add(l);if(s.size===0)return e;let r=fe(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}, ${ue(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 Ur(e,t){let n=Vt(Al(e),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 ou(n,e,t));if(s||t.out(`org ${n.org??"personal"}`),!r){if(s)t.out(JSON.stringify(l));else {for(let i of V(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} (${Nt(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}):Wl(i));}});if(s)t.out(JSON.stringify({kind:"job.final",job:c}));else {t.out("");for(let i of V(c))t.out(i);}return au(c)}async function lu(e,t){if(M(e,t,Ar))return 0;let n=be(e),s=su(e),a=await E(k(e)).list({...$(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{},...n!==void 0?{scope:n}:{},...s!==void 0?{kind:s}:{}});if(e.flags.json===true)return t.out(JSON.stringify(a)),0;if(a.items.length===0)return e.flags.quiet!==true&&t.out(s==="check"?"No checks.":"No jobs."),0;let o=s===void 0||s==="job"?Tr:["kind",...Tr];return F(e,t,a.items,Ar,o,l=>l.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
52
- More: evolve job list --cursor ${a.nextCursor}`),0}async function uu(e,t){let n=E(k(e)),s=[];for(let r of e.positionals)s.push(await n.get(await R(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 V(r))t.out(o);}),0)}async function cu(e,t){if(M(e,t,Er))return 0;let n=E(k(e)),s=ba(e),r=e.flags.dataset,a=await n.trials(await R(e,"job",e.positionals[0]),{...s!==void 0?{status:s}:{},...r!==void 0?{dataset:r}:{},...$(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):(F(e,t,a.items,Er,Cl,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 du(e,t){if(M(e,t,Pr))return 0;let s=await E(k(e)).tasks(await R(e,"job",e.positionals[0]),$(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):(F(e,t,s.items,Pr,Ll,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 pu(e){let t=[],n=[["ID","DATASETS","STATUS","MEAN REWARD","COVERAGE","SPENT"]];for(let s of e.jobs)n.push([s.id,Nt(s.datasets),s.status,Wn(s.mean_reward),`${s.coverage.scored}/${s.coverage.total}`,U(s.cost_usd)]);if(t.push(...P(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} ${Wn(c.mean_reward)}`:c.status:"-"})]);}t.push(...P(s));}return t}async function gu(e,t){let n=E(k(e)),s=[];for(let a of e.positionals)s.push(await R(e,"job",a));let r=await n.compare(s);if(e.flags.json===true)t.out(JSON.stringify(r));else for(let a of pu(r))t.out(a);return 0}async function fu(e,t){let s=await E(k(e)).cancel(await R(e,"job",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of V(s))t.out(r);return 0}async function mu(e,t){let n=E(k(e)),s=await R(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}function Fr(e){let t=e.flags.email??[],n=e.flags.link===true;if(!n&&t.length===0)throw new m("name a grant: --link and/or --email <address>");return {...n?{link:true}:{},...t.length>0?{emails:t}:{}}}function hu(e){let t=[`visibility ${e.visibility}`,e.link.enabled?`link ${e.link.url??"(enabled)"}`:"link off"];if(e.emails.length===0)t.push("emails none");else for(let n of e.emails)t.push(`email ${n.email} (shared by ${n.shared_by}, ${n.created_at})`);return t}function Dn(e,t,n){if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of hu(n))t.out(s);return 0}function cs(e,t){return {share:async(a,o)=>{let l=Fr(a),c=await t(a).share(await R(a,e,a.positionals[0]),l);return Dn(a,o,c)},unshare:async(a,o)=>{let l=Fr(a),c=await t(a).unshare(await R(a,e,a.positionals[0]),l);return Dn(a,o,c)},shares:async(a,o)=>Dn(a,o,await t(a).shares(await R(a,e,a.positionals[0])))}}var Jn=cs("job",e=>E(k(e))),Nn=cs("check",e=>Q(k(e))),Un=cs("session",e=>We(zt(e)));async function yu(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 R(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=q(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 Mr(c,n,o.length,i,e,t),u}return Mr(c,n,o.length,i,e,t),0}function Mr(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 _u(e,t){let n=E(k(e)),s=e.flags["filter-error-type"],r=await n.resume(await R(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 V(r))t.out(a);t.out(""),t.out(`Follow it with: evolve job show ${r.id}`);}return 0}async function bu(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 R(e,"job",e.positionals[0]),r);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of V(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}function ku(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}: ${le(r.failure.message)}`);else {let o=Object.entries(r.checks??{}).map(([c,i])=>`${c} ${i.outcome}`).join(" \xB7 ")||r.status,l=Ut(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?_e(le(r.summary),60):"-"]);}return [...P(t),...n]}async function vu(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true;if(e.flags["show-defaults"]===true)return Sa(e,t,()=>ne(k(e)).defaults(),"analyze","<job-id>");if(e.positionals[0]===void 0)throw new m("analyze takes a <job-id> (or --show-defaults)");let a=E(k(e)),o=await R(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=ss(String(e.flags.rubric))),e.flags.prompt!==void 0&&(l.prompt=ns(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"]),e.flags.trial!==void 0&&(l.trial_ids=e.flags.trial);let c=await a.get(o);if((c.upload?.task_links??[]).some(p=>p.n_unlinked>0))for(let p of ds(c.upload?.task_links??null))t.err(p);else c.upload!==null&&c.upload!==void 0&&c.upload.task_links===null&&t.err(Lu);let i=await a.analyze(o,l);if(!s){if(n)t.out(JSON.stringify(i));else {for(let p of V(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 ${Gn(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 ku(d))t.out(p);u.stats.analysis&&(t.out(""),t.out(`analyses ${Gn(u.stats.analysis)}`)),t.out("Details: evolve trial show <trial-id>");}return (u.stats.analysis?.n_failed??0)>0?1:0}function wu(e){return e.replace(/_/g," ").split(" ").map(t=>t&&t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function ka(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"?Kn(r):null;a!==null&&t.push(`Label: ${a}`);let o=[["CHECK","OUTCOME","EXPLANATION"]];for(let[l,c]of Object.entries(r.checks??{})){o.push([wu(l),c.outcome,le(c.explanation)]);for(let i of c.evidence??[])o.push(["","",`${i.where} \u2014 ${le(i.quote)}`]);}return o.length===1&&o.push(["-",r.status,"-"]),t.push(...P(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=da(r.checks);s.push([r.task_name,Kn(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(...P(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 va(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 wa(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} (${va(e)})`],["model",`${e.model_name} at effort ${e.reasoning_effort}`],["rubric",`${t} criteri${t===1?"on":"a"}`],["provider",e.sandbox_provider],["visibility",e.visibility]];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]),[...P(n),"",...ka(e)]}async function Sa(e,t,n,s,r){let a=new Set(["show-defaults",...Object.keys(Jt)]),o=Object.keys(e.flags).filter(c=>!a.has(c));if(e.positionals[0]!==void 0||o.length>0)throw new m(`--show-defaults prints the platform's ${s} defaults and takes no ${r} and no other ${s} flag`+(o.length>0?` (given: ${o.map(c=>"--"+c).join(", ")})`:""));let l=await n();if(e.flags.json===true)t.out(JSON.stringify(l));else for(let c of Su(l))t.out(c);return 0}function Su(e){let t=e.rubric.criteria.length,n=P([["model",e.model_name],["effort",e.reasoning_effort],["provider",e.sandbox_provider],["rubric",`${t} criteri${t===1?"on":"a"}`]]);n.push("","PROMPT",...e.prompt.split(`
56
- `),"","RUBRIC");for(let s of e.rubric.criteria)n.push(`${s.name}: ${s.description}`),s.guidance&&n.push(` ${s.guidance}`);return n}async function xu(e,t){let n=e.flags.json===true,s=e.flags.watch===true,r=e.flags.quiet===true,a=Q(k(e));if(e.flags["show-defaults"]===true)return Sa(e,t,()=>a.defaults(),"check","<path>");let o={};e.flags.name!==void 0&&(o.name=String(e.flags.name)),e.flags.model!==void 0&&(o.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(o.rubric=ss(String(e.flags.rubric))),e.flags.prompt!==void 0&&(o.prompt=ns(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 wa(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 ${va(p)}`);}});if(n)t.out(JSON.stringify({kind:"check.final",check:d}));else {t.out("");for(let p of ka(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 Ru(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=>!Ne.includes(s));if(n.length>0)throw new m(`--status must name check statuses (${Ne.join(", ")}); got: ${n.join(", ")}`);return t}var Br=[{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??"-"}],Au=["id","status","tasks","model","spent","created"];async function Tu(e,t){if(M(e,t,Br))return 0;let n=be(e),s=Ru(e),r=e.flags.dataset,a=await Q(k(e)).list({...$(e),...n!==void 0?{scope:n}:{},...s!==void 0?{status:s}:{},...r!==void 0?{dataset:r}:{}});return e.flags.json===true?(t.out(JSON.stringify(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No checks."),0):(F(e,t,a.items,Br,Au,o=>o.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
57
- More: evolve check list --cursor ${a.nextCursor}`),0)}async function Eu(e,t){let n=await Q(k(e)).get(await R(e,"check",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of wa(n))t.out(s);return n.results.some(s=>s.status==="failed")?1:0}async function Pu(e,t){let n=e.flags.json===true,s=e.flags.since,r=await Q(k(e)).transcript(await R(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 qr=["task-check","trace-parsed",...pt];async function zr(e,t){try{return await e.task(t)}catch(n){throw n instanceof T&&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 Iu(e,t){let n=Q(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 ls(e,r!==void 0?["task check"]:["check","task check"],e.positionals[0])).id,o=a;if(r!==void 0){if(!qr.includes(r))throw new m(`--stream must be one of: ${qr.join(", ")}`);if(r==="task-check"){let i=await zr(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 zr(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 xa(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 Bt(e),p=fs.existsSync(u(c,"check_report.json")),g=p?(await i(c,{withFileTypes:true})).filter(v=>v.isDirectory()).map(v=>u(c,v.name)):[c],f=new Map;for(let v of g){let b=await $u(v);b!==null&&f.set(v,b);}let y=p?a:f.get(c)?.checkId;if(y===void 0)return [];let h=await n.get(y),w=[];p&&(await Xn(u(c,"evolve.json"),pn(h,d)),w.push("evolve.json"));for(let[v,b]of f){let S=h.results.find(x=>x.id===b.taskCheckId);S!==void 0&&(await Xn(u(v,"evolve.json"),dn(S,h,d)),w.push(p?`${v.slice(c.length+1)}/evolve.json`:"evolve.json"));}return w}})}async function $u(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 Xn(e,t){let{writeFile:n}=await import('fs/promises');await n(e,JSON.stringify(t,null,2)+`
58
- `);}async function xa(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(()=>(yt(),ht)),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 g;try{g=await l(u,n.outputDir,d);}catch(f){throw await r(p,{recursive:!0,force:!0}).catch(()=>{}),f}return g.push(...await n.enrich(p)),e.flags.json===!0?t.out(JSON.stringify({path:p,files:g.length})):t.out(`Saved ${p} (${g.length} files)`),0}finally{await r(i,{recursive:true,force:true}).catch(()=>{});}}async function Ou(e,t){let n=E(k(e)),s={},r=ba(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 R(e,"job",e.positionals[0]),s);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of V(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}async function Cu(e,t){let n=E(k(e)),s=await R(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(()=>(yt(),ht)),p=await c(r(u(),"evolve-job-download-"));try{let g=await n.download(s,{to:p});e.flags.overwrite===!0&&await i(l,{recursive:!0,force:!0});let f;try{f=await d(g,a,o);}catch(x){throw await i(l,{recursive:!0,force:!0}).catch(()=>{}),x}let{readdir:y,readFile:h,writeFile:w}=await import('fs/promises'),v=await n.get(s),b=await Bt(e),S=new Map;for await(let x of n.trials(s))S.set(x.id,x);await w(r(l,"evolve.json"),JSON.stringify(ln(v,b),null,2)+`
59
- `),f.push("evolve.json");for(let x of await y(l,{withFileTypes:!0})){if(!x.isDirectory())continue;let B;try{B=JSON.parse(await h(r(l,x.name,"result.json"),"utf8")).x_evolve?.trialId;}catch{continue}let D=B!==void 0?S.get(B):void 0;D&&(await w(r(l,x.name,"evolve.json"),JSON.stringify(ft(D,v,b),null,2)+`
60
- `),f.push(`${x.name}/evolve.json`));}return e.flags.json===!0?t.out(JSON.stringify({path:l,files:f.length})):t.out(`Saved ${l} (${f.length} files)`),0}finally{await i(p,{recursive:true,force:true}).catch(()=>{});}}function nt(e){return e.receiving?`${e.status} (receiving)`:e.status}function Ra(e){let t=[["id",e.id],["status",nt(e)]];return e.source!==null&&t.push(["source",e.source.type==="archive"?`archive (${ue(`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}`]),[...P(t),...Aa(e.skipped_trials),...ds(e.task_links)]}var Vr={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"},Lu="uploaded before task linking existed: whether its trials carry the task folder is unknown here; each analysis row records it (task_absent_reason)";function ju(e){return e==="dataset_flag"?"by task name, -d":"task hashes equal"}function ds(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,g])=>`${Vr[p]??p}${Object.keys(d.link_reasons).length>1?` ${g}`:""}`).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(g=>Object.keys(g.link_reasons)))).map(g=>Vr[g]??g).join(", "),p=Array.from(new Set(a.flatMap(g=>g.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=ju(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 Aa(e){return e===null||e.length===0?[]:e.map(t=>` skipped ${t.trial}: ${t.code}: ${t.message}`)}function Du(e){let t=e.failure!==null?_e(`${e.failure.code}: ${e.failure.message}`,140):"";return `status ${nt(e).padEnd(20)} ${t}`.trimEnd()}function Ju(e,t=Date.now()){let n=as(t-Date.parse(e.started_at));return `phase ${e.phase.padEnd(20)} ${n} elapsed`}async function Ta(e,t,n,s){let r=E(k(e)),a=e.flags.json===true;a||n.out(s==="accepted"?`Upload accepted: import ${t.id} ${nt(t)} \u2014 watching\u2026`:`Import ${t.id} ${nt(t)} \u2014 watching\u2026`);let o=await r.watchImport(t.id,{onStatus:u=>{a||n.out(Du(u));},onProgress:u=>{a||n.out(Ju(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 Aa(o.skipped_trials))n.err(u);}let c=ds(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 V(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 Nu(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 Ra(c))t.out(i);return t.out(""),t.out(`Follow it with: evolve job import ${c.id} --watch`),0}return Ta(e,c,t,"accepted")}var Hr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:nt},{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??""}],Uu=["id","status","job","trials","skipped","dataset","created"];async function Fu(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({...$(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):(F(e,t,r.items,Hr,Uu,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
61
- More: evolve job imports --cursor ${r.nextCursor}`),0)}async function Mu(e,t){let s=await E(k(e)).getImport(e.positionals[0]);if(e.flags.watch===true)return Ta(e,s,t,"attached");if(e.flags.json===true)return t.out(JSON.stringify(s)),0;for(let r of Ra(s))t.out(r);return 0}async function Bu(e,t){let s=await q(k(e)).get(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of Fl(s))t.out(r);return 0}var Gr=nn;async function qu(e,t){let n=q(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 R(e,"trial",e.positionals[0]);if(r!==void 0){if(!Gr.includes(r))throw new m(`--stream must be one of: ${Gr.join(", ")}`);if(r==="trace-parsed"){let w=0;for await(let v of n.traceEvents(a,$(e)))K(t,s,v),w+=1;return !s&&w===0&&t.out("No trace events."),0}if(r==="agent-home"){let w=await n.artifact(a,r);if(w===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:w}));else for(let[v,b]of Object.entries(w))t.out(`===== ${v} (${Buffer.byteLength(b,"utf8")} bytes) =====`),t.out(b);return 0}if(r==="filesystem"){let w=await n.filesystem(a).archive();return s?t.out(JSON.stringify({stream:"filesystem",bytes:w.length,encoding:"base64",data:w.toString("base64")})):(t.bytes??(v=>process.stdout.write(v)))(w),0}let h=await n.artifact(a,r);return h===null?(t.out(s?JSON.stringify({log:null}):`No ${r} log was stored for this trial.`),0):(t.out(s?JSON.stringify({log:h}):h),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 g=[];for await(let h of n.traceEvents(a))g.push(h);let f=un({trial:d,job:p,events:g,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 Bt(e)});await o(u,{recursive:true});let y=[];for(let h of Object.keys(f).sort()){let w=c(u,...h.split("/"));await o(i(w),{recursive:true}),await l(w,f[h]),y.push(h),s||t.out(h);}return s?t.out(JSON.stringify({path:u,saved:y})):t.out(`Saved ${u}`),0}async function Bt(e){try{return (await An(k(e)).status()).user_id}catch{return null}}async function zu(e,t){let n=q(k(e)),s=e.flags.json===true,r=$(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 R(e,"trial",e.positionals[0]),r))K(t,s,o),a+=1;return !s&&a===0&&t.out("No trace events."),0}async function Vu(e,t){let n=E(k(e)),s=await R(e,"job",e.positionals[0]),r=$(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=fa(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 Hu(e,t){let n=await q(k(e)).retry(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of V(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function Gu(e,t){let n=await q(k(e)).regrade(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let s of V(n))t.out(s);t.out(""),t.out(`Follow it with: evolve job show ${n.id}`);}return 0}async function Ku(e){let t=await R(e,"trial",e.positionals[0]);return {fs:q(k(e)).filesystem(t),label:t,pathAt:1}}async function Wu(e){let t=await R(e,"analysis",e.positionals[0]);return {fs:ne(k(e)).filesystem(t),label:t,pathAt:1}}async function Yu(e){let t=await R(e,"task check",e.positionals[0]),n=Q(k(e)),s=await n.task(t);return {fs:n.taskFilesystem(s.check_id,t),label:t,pathAt:1}}async function Xu(e){let[t,n]=e.positionals,s=X(k(e)),r;try{r=s.taskFiles(t,n);}catch(a){throw new m(a instanceof Error?a.message:String(a))}return {fs:r,label:`${t}/${n}`,pathAt:2}}function et(e){let t=e.flags.source;if(t!==void 0){if(t!=="live"&&t!=="capture")throw new m("--source must be live or capture");return t}}function Kr(e,t){(e.bytes??(n=>process.stdout.write(n)))(t);}function Qu(e){let t=[["state",e.state],["box",e.box?`${e.box.provider} ${e.box.id} (${e.box.role}, since ${e.box.since})`:"-"],["watcher",e.watcher??"-"],["work dir",e.work_dir]];if(e.capture){let n=e.capture;t.push(["capture",`${n.status} \xB7 ${n.phase} \xB7 ${n.entries} entries \xB7 ${n.changed_files} changed (${ce(n.changed_bytes)}) \xB7 ${n.at}`]),n.left_out.length>0&&t.push(["left out",n.left_out.join(", ")]);}return t.map(([n,s])=>`${n.padEnd(10)} ${s}`)}function Zu(e){let t=[e.changed?`${e.changed}${e.phase?` (${e.phase})`:""}`:"",e.captured===false?"image only":""].filter(Boolean).join(", "),n=e.type==="dir"?`${e.name}/`:e.target?`${e.name} -> ${e.target}`:e.name;return `${e.type.padEnd(7)} ${e.mode.padEnd(5)} ${ce(e.size).padStart(8)} ${e.mtime} ${n}${t?` [${t}]`:""}`}function qt(e){let t=n=>n.flags.json===true;return {async status(n,s){let{fs:r}=await e(n),a=await r.status();if(t(n))s.out(JSON.stringify(a));else for(let o of Qu(a))s.out(o);return 0},async list(n,s){let{fs:r,pathAt:a}=await e(n),o=await r.list({path:n.positionals[a]??"/",source:et(n),...$(n)});if(t(n))return s.out(JSON.stringify(o)),0;for(let l of o.entries)s.out(Zu(l));return o.entries.length===0&&s.out(`(empty) ${o.path}`),o.next_cursor!==null&&s.out(`\u2026 more: --cursor ${o.next_cursor}`),0},async cat(n,s){let{fs:r,pathAt:a}=await e(n),o=n.positionals[a];if(o===void 0)throw new m("cat needs a <path>");let l=n.flags.range!==void 0?ec(String(n.flags.range)):void 0,c=await r.read(o,{source:et(n),range:l});return t(n)?s.out(JSON.stringify({path:o,bytes:c.length,encoding:"base64",data:c.toString("base64")})):Kr(s,c),0},async search(n,s){let{fs:r,pathAt:a}=await e(n);if(!r.search)throw new m("this owner has no search");let o=n.positionals[a];if(o===void 0)throw new m("search needs the text to find");let l=await r.search({q:o,path:n.flags.path!==void 0?String(n.flags.path):void 0,regex:n.flags.regex===true,limit:n.flags.limit!==void 0?n.flags.limit:void 0,source:et(n)});if(t(n))return s.out(JSON.stringify(l)),0;for(let c of l.hits)s.out(`${c.path}:${c.line}: ${c.snippet}`);return l.hits.length===0&&s.out("No hits."),l.truncated&&s.out("(truncated \u2014 narrow the path or the text)"),l.image_files_excluded&&s.out("(files the run never touched were not searched)"),0},async changes(n,s){let{fs:r}=await e(n);if(!r.changes)throw new m("this owner has no change list");let a=n.flags.phase!==void 0?String(n.flags.phase):void 0;if(a!==void 0&&!["setup","agent","verifier","all"].includes(a))throw new m("--phase must be setup, agent, verifier or all");let o=await r.changes({source:et(n),phase:a,...$(n)});if(t(n))return s.out(JSON.stringify(o)),0;s.out(`${o.total} changed (${ce(o.changed_bytes)}), ${o.source}`);for(let l of o.items)s.out(`${l.changed.padEnd(8)} ${l.phase.padEnd(8)} ${ce(l.size).padStart(8)} ${l.path}`);return o.next_cursor!==null&&s.out(`\u2026 more: --cursor ${o.next_cursor}`),0},async archive(n,s){let{fs:r,label:a}=await e(n);if(!r.archive)throw new m("this owner has no archive");let o={path:n.flags.path!==void 0?String(n.flags.path):void 0,source:et(n)},l=n.flags["output-dir"];if(l!==void 0){let i=await r.archive({...o,to:String(l)});return s.out(t(n)?JSON.stringify({saved:i}):i),0}let c=await r.archive(o);return t(n)?s.out(JSON.stringify({label:a,bytes:c.length,encoding:"base64",data:c.toString("base64")})):Kr(s,c),0},async logs(n,s){let{fs:r}=await e(n);if(!r.logs||!r.logEvents)throw new m("this owner has no sandbox logs");let a=String(n.flags.stream??"");if(!dt.includes(a))throw new m(`--stream must be one of: ${dt.join(", ")}`);let o=c=>{t(n)?s.out(JSON.stringify(c)):s.out(`${c.t??"-"} ${c.fd==="err"?"!":" "} ${c.line}`);};if(n.flags.follow===true){let c=n.flags.cursor!==void 0?`${a}:${n.flags.cursor}`:void 0;for await(let i of r.logEvents({lastEventId:c}))i.event==="line"&&i.data.stream===a&&o(i.data);return 0}let l=await r.logs({stream:a,...$(n)});if(t(n))return s.out(JSON.stringify(l)),0;for(let c of l.lines)o(c);return l.lines.length===0&&s.out("No lines."),l.next_cursor!==null&&s.out(`\u2026 more: --cursor ${l.next_cursor}`),0},async procs(n,s){let{fs:r}=await e(n);if(!r.procs)throw new m("this owner has no process list");let a=await r.procs();return s.out(t(n)?JSON.stringify(a):a.text),0}}}function ec(e){let t=/^bytes=(\d*)-(\d*)$/.exec(e.trim());if(!t||t[1]===""&&t[2]==="")throw new m("--range must be bytes=start-end, bytes=start- or bytes=-suffix");return t[1]===""?{suffix:Number(t[2])}:t[2]===""?{start:Number(t[1])}:{start:Number(t[1]),end:Number(t[2])}}var re=qt(Ku),ae=qt(Wu),ie=qt(Yu),Fn=qt(Xu);async function tc(e,t){let n=q(k(e)),s=[];for(let a of e.positionals)s.push(await R(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 nc(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 Wr=[{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:nc},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],sc=["id","status","task","model","spent","created"];async function rc(e,t){if(M(e,t,Wr))return 0;let n=be(e),s=ru(e),r=e.flags.job!==void 0?await R(e,"job",String(e.flags.job)):void 0,o=await ne(k(e)).list({...$(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):(F(e,t,o.items,Wr,sc,l=>l.id),o.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
62
- More: evolve analysis list --cursor ${o.nextCursor}`),0)}async function ac(e,t){let n=ne(k(e)),s=await Yn(n,await us(e,n,e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of Ml(s))t.out(r);return 0}async function ic(e,t){let n=ne(k(e)),s=e.flags.json===true,r=e.flags.since,a=await n.transcript((await us(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 Yr=["analysis","trace-parsed",...pt];async function oc(e,t){let n=ne(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 us(e,n,e.positionals[0]),o=a.id;if(r!==void 0){if(!Yr.includes(r))throw new m(`--stream must be one of: ${Yr.join(", ")}`);if(r==="analysis"){let c=await Yn(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 xa(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 Yn(n,a);return await Xn(c(l,"evolve.json"),cn(i,await Bt(e))),["evolve.json"]}})}function lc(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 (${ue(e.digest)})`];case "archive_url":return [`source: ${e.archive_url} (${ue(e.digest)})`];case "hub_package":return [`source: hub:${e.hub_package} (${ue(e.digest)})`]}}function uc(e){return e.kind==="git"?e.commit.slice(0,12):ue(e.digest)}function Ea(e){let t=P([["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(...lc(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?uc(l.source):"-"]:[]]);t.push(...P(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?[ql(c)??"-"]:[],Bl(c.providers),...a?[(c.notes??[]).map(i=>i.code).join(", ")||"-"]:[]]);if(t.push(...P(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 ga){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(...cc(e)),t}function cc(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(...P(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 Pa(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 dc(e,t){if(M(e,t,Ir))return 0;let s=await X(k(e)).list({...$(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(F(e,t,s.items,Ir,Dl,r=>r.name),e.flags.quiet!==true)for(let r of Pa(s.items))t.out(r);return 0}async function pc(e,t){let s=await X(k(e)).get(e.positionals[0],$(e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of Ea(s))t.out(r);for(let r of Pa([s]))t.out(r);}return 0}function Qn(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 gc(e,t){let s=await X(k(e)).preflight({source:{directory:e.positionals[0]}});if(e.flags.json===true)t.out(JSON.stringify(s));else for(let a of Qn(s))t.out(a);let r=s.manifest!==null&&s.manifest.ok===false;return s.tasks_refused>0||r?1:0}async function fc(e,t){let n=e.flags.json===true,s=X(k(e)),r=Vt(Tl(e),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 T&&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 Qn(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 Qn(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 ${ce(u)}/${ce(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 ha(i))t.out(u);t.out(""),t.out(`Follow it with: evolve dataset show ${i.name}`);}return 0}return Ia(s,i,t,n,"created")}async function Ia(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}) ${is(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}):yc(p)));},i;try{i=await e.watchImport(t.id,{onStatus:d=>{n.out(s?JSON.stringify({kind:"import.status",datasetImport:d}):Hl(d));},onProgress:d=>{n.out(s?JSON.stringify({kind:"import.progress",progress:d}):zl(d));},onVersion:(d,p)=>{a=d,o=p,n.out(s?JSON.stringify({kind:"import.version",version:d}):Gl(d)),c(p);}});}catch(d){if(d instanceof ge)return s&&n.out(JSON.stringify({error:ja(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 ha(i))n.out(d);if(i.progress!==null)for(let d of Vl(i.progress))n.out(d);if(a!==null){for(let d of Kl(a,o))n.out(d);for(let d of hc(a,i))n.out(d);}}return i.status==="FAILED"?1:0}async function mc(e,t){let n=e.flags.json===true,s=X(k(e)),r=e.positionals[0],a=null;try{a=await s.getImport(r);}catch(o){if(!(o instanceof T&&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 Ia(s,a,t,n,"attached")}catch(o){if(o instanceof T&&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 hc(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 yc(e){return `task ${e.task_name} FAILED \u2014 ${e.failure.code} (${e.failure.step}): ${_e(e.failure.message,140)}`}async function _c(e,t){let s=await X(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 bc(e,t){let n=X(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 Ea(a))t.out(o);return 0}function $a(e){let t=[["name",e.name],["id",e.id],["org",e.org??"-"],["ref",e.ref],["digest",e.digest],["size",ce(e.size_bytes)]];return e.description&&t.push(["description",e.description]),t.push(["created",e.created_at]),P(t)}async function kc(e,t){if(M(e,t,$r))return 0;let n=fe(k(e)),s=be(e),r=await n.list({...$(e),...s!==void 0?{scope:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No uploaded skills."),0):(F(e,t,r.items,$r,Jl,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
63
- More: evolve skill list --cursor ${r.nextCursor}`),0)}async function vc(e,t){let s=await fe(k(e)).upload(e.positionals[0],Vt({},e));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 $a(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 wc(e,t){let n=await fe(k(e)).get(await R(e,"skill",e.positionals[0]));if(e.flags.json===true)return t.out(JSON.stringify(n)),0;for(let s of $a(n))t.out(s);return n.skill_md&&(t.out(""),t.out(n.skill_md)),0}async function Sc(e,t){let n=await R(e,"skill",e.positionals[0]);return await fe(k(e)).delete(n),e.flags.json===true?t.out(JSON.stringify({id:n,deleted:true})):t.out(`Deleted skill ${n}`),0}async function xc(e,t){if(M(e,t,Or))return 0;let n=Ge(k(e)),s=be(e),r=await n.list({...$(e),...s!==void 0?{scope:s}:{}});return e.flags.json===true?(t.out(JSON.stringify(r)),0):r.items.length===0?(e.flags.quiet!==true&&t.out("No registered agents."),0):(F(e,t,r.items,Or,Nl,a=>a.name),0)}async function Rc(e,t){let s=await Ge(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let r of pa(s))t.out(r);return 0}async function Ac(e,t){let s=await Ge(k(e)).create(Vt(El(e),e));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let r of pa(s))t.out(r);t.out(""),t.out(`Use it with: evolve run -d <dataset> -a ${s.name} -m <model>`);}return 0}async function Tc(e,t){let n=Ge(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 Ec(e){let t=[["user",e.user_id],["email",e.email??"-"],["key id",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]),P(t)}function zt(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 Oa(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)}`:U(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:"org",header:"ORG",cell:e=>e.org??"-"},{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:Oa},{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??"-"}],Pc=["id","tag","agent","model","state","cost","created"];function Ic(e){let t=[["id",e.id],["tag",e.tag],["agent",e.agent],["model",e.model??"-"],["effort",e.reasoningEffort??"-"],["org",e.org??"-"],["provider",e.provider],["sandbox",e.sandboxId??"-"],["state",e.state],["runtime",e.runtimeStatus],["visibility",e.visibility],["cost",Oa(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??"-"]),P(t)}async function $c(e,t){if(M(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 s=be(e),a=await We(zt(e)).list({...$(e),...s!==void 0?{scope:s}:{},...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(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No sessions."),0):(F(e,t,a.items,Xr,Pc,o=>o.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
64
- More: evolve session list --cursor ${a.nextCursor}`),0)}async function Oc(e,t){let n=await We(zt(e)).get(await R(e,"session",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Ic(n))t.out(s);return 0}async function Cc(e,t){let n=await An(k(e)).status();if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Ec(n))t.out(s);return 0}var Qr=[{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}],Lc=["slug","display_name","role","created"];function jc(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 Dc(e,t){if(M(e,t,Qr))return 0;let n=await Pe(k(e)).list(),s=e.flags.search!==void 0?jc(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):(F(e,t,s,Qr,Lc,r=>r.slug),0)}function Jc(e){let{quota:t,usage:n}=e,s=n.month_spend_usd===null?"unavailable":U(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} / ${U(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 P(o)}async function Nc(e,t){let n=await Pe(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(n));else for(let s of Jc(n))t.out(s);return 0}function ps(){let e=process.env.XDG_CONFIG_HOME,t=e&&e.trim()!==""?e:path.join(os$1.homedir(),".config");return path.join(t,"evolve","config.json")}function Ca(){let e=ps();if(!fs.existsSync(e))return {};try{let t=JSON.parse(fs.readFileSync(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{throw new m(`${e} is not valid JSON \u2014 fix or delete it`)}}function La(){let e=Ca().org;return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function Uc(e){let t=ps(),n=Ca();return e===null?delete n.org:n.org=e,fs.mkdirSync(path.dirname(t),{recursive:true,mode:448}),fs.writeFileSync(t,JSON.stringify(n,null,2)+`
65
- `,{mode:384}),fs.chmodSync(t,384),t}function Vt(e,t){let n=typeof t.flags.org=="string"?t.flags.org.trim():void 0;if(n==="personal"){let{org:r,...a}=e;return a}let s=n!==void 0&&n!==""?n:e.org??La();return s!==void 0?{...e,org:s}:e}async function Fc(e,t){let n=typeof e.flags["display-name"]=="string"?String(e.flags["display-name"]):void 0,s=await Pe(k(e)).create(e.positionals[0],{displayName:n});return e.flags.json===true?(t.out(JSON.stringify(s)),0):(t.out(`Created organization ${s.slug}`),t.out(`slug ${s.slug}`),t.out(`display name ${s.display_name}`),t.out(`role ${s.role??"owner"}`),t.out(""),t.out(`Invite a teammate with: evolve auth org invite ${s.slug}`),0)}async function Mc(e,t){let n=await Pe(k(e)).invite(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(n)),0):(t.out(`token ${n.token}`),t.out(`expires ${n.expires_at??"never"}`),t.out(`uses ${n.max_uses===null?"unlimited":String(n.max_uses)}`),t.out(""),t.out(`Send the teammate this command: evolve auth org join ${n.token}`),0)}async function Bc(e,t){let n=await Pe(k(e)).join(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(n)),0):(t.out(n.already_member?`Already a member of ${n.org.slug}`:`Joined ${n.org.slug} as member`),t.out(`Run in it with: evolve run --org ${n.org.slug} ... or set it once: evolve auth org use ${n.org.slug}`),0)}async function qc(e,t){let n=e.flags.json===true,s=e.positionals[0];if(s===void 0){let o=La(),l=ps();return n?t.out(JSON.stringify({org:o??null,source:o!==void 0?"config":"personal",path:l})):t.out(o!==void 0?`org ${o} (from ${l})`:`org personal (no default in ${l})`),0}let r=s.trim();if(r==="")throw new m("org name must not be empty");let a=Uc(r==="personal"?null:r);return n?t.out(JSON.stringify({org:r==="personal"?null:r,path:a})):t.out(r==="personal"?`Default org cleared: personal (${a})`:`Default org: ${r} (${a})`),0}function gs(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 zc(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
66
- `)?n.slice(0,-2):n.endsWith(`
67
- `)?n.slice(0,-1):n;if(s.length===0)throw new m("stdin carried no value");return s}async function Vc(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=zc(e),o=await Tt(gs(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 Hc(e,t){if(M(e,t,Cr))return 0;let s=await Tt(gs(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):(F(e,t,s,Cr,Ul,r=>r.label&&r.label!=="default"?`${r.name}:${r.label}`:r.name),0)}async function Gc(e,t){let n=e.positionals[0],r=await Tt(gs(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 Zr(e,t){e.out(t.endsWith(`
68
- `)?t.slice(0,-1):t);}function Kc(e,t){let n=[e.body];if(t)for(let s of Qe(e))n.push(`
69
- --- ${s.path} ---
51
+ `),tty:process.stdout.isTTY===true&&process.env.TERM!=="dumb",...process.stdin.isTTY===true?{confirm:async e=>{let{createInterface:t}=await import('readline/promises'),s=t({input:process.stdin,output:process.stderr});try{let n=(await s.question(`${e} [y/N] `)).trim().toLowerCase();return n==="y"||n==="yes"}finally{s.close();}}}:{}};function P(e){if(e.length===0)return [];let t=[];for(let s of e)s.forEach((n,r)=>{t[r]=Math.max(t[r]??0,n.length);});return e.map(s=>s.map((n,r)=>n.padEnd(t[r])).join(" ").trimEnd())}function U(e){return typeof e=="number"?`$${e.toFixed(2)}`:"-"}function Oe(e){return e.lane==="measured"?U(e.usd):e.lane==="floor"?`at least ${U(e.usd)}`:"-"}function ua(e,t){if(!e.upload)return null;let s=e.upload.reported_totals;if(!s||s.cost_usd===null)return "-";let n=t?` (${s.n_trials_reporting}/${e.n_total_trials} trials reporting)`:"";return `reported ${U(s.cost_usd)}${n}`}function sn(e){if(e.input_tokens===null&&e.output_tokens===null)return null;let t=r=>r===null?"-":r.toLocaleString("en-US"),s=[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),n=s.length>0?` (${s.join(", ")})`:"";return `in ${t(e.input_tokens)}${n} \xB7 out ${t(e.output_tokens)}`+(e.provisional?" \u2014 provisional":"")}function Jt(e){let t=`${e.name}:${e.model_name}`;return e.version?`${t}:${e.version}`:t}function Hs(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 Ut(e){return e.map(t=>`${t.name}@${t.version}`).join(", ")||"-"}function _e(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}function le(e){return e.replace(/[\t\n\r]+/g," ")}function F(e,t,s,n,r,a){if(e.flags.quiet===true){for(let c of s)t.out(a(c));return}let o=Pl(e,n,r);if(t.tty===true){let c=e.flags["no-trunc"]===true,i=[o.map(u=>u.header)];for(let u of s)i.push(o.map(d=>c?le(d.cell(u)):_e(le(d.cell(u)),60)));for(let u of P(i))t.out(u);}else {e.flags["no-headers"]!==true&&t.out(o.map(c=>c.header).join(" "));for(let c of s)t.out(o.map(i=>le(i.cell(c))).join(" "));}}function Pl(e,t,s){let n=e.flags.columns;if(n===void 0)return s.map(a=>t.find(o=>o.key===a));if(n==="all")return t;let r=n.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,s){if(e.flags.columns!=="help")return false;for(let n of s)t.out(n.key);return true}function V(e,t={}){let s=[["id",e.id],["status",e.status],["datasets",Ut(e.datasets)]];s.push(["agents",e.agents.map(Jt).join(", ")]);for(let l of e.agents){l.skills.length>0&&s.push(["skills",`${Jt(l)}: ${l.skills.join(", ")}`]);for(let c of l.skill_locks??[])s.push(["skill lock",`${c.name} @ ${c.git_commit_id?c.git_commit_id.slice(0,12):ue(c.digest)}`]);}s.push(["size",`${e.counts.agents} agent(s) x ${e.counts.tasks} task(s) = ${e.n_total_trials} trial(s)`]);let n=e.trials.byStatus.SCORED;s.push(["scored",`${n} of ${e.n_total_trials} trial(s)`]),e.upload&&e.n_total_trials>0&&n===0&&s.push(["warning","no uploaded trial carries verifier_result.rewards; see: evolve skills get evals core-concepts/upload"]);for(let l of e.build_exclusions)s.push(["build exclusions",l.note]);s.push(["attempts/task",String(e.n_attempts)]),s.push(["concurrency",String(e.n_concurrent_trials)]),s.push(["max spend/trial",U(e.max_trial_spend_usd)]),s.push(["worst case",U(e.worst_case_spend_usd)]),s.push(["retries",`${e.retry.max_retries}/trial on infrastructure errors`+((e.stats.n_retries??0)>0?` (${e.stats.n_retries} used)`:"")]),e.analyze&&s.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 c=[["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(([,i])=>i!=null);(e.timeout_multiplier!==1||c.length>0)&&s.push(["timeouts",`x${e.timeout_multiplier}`+(c.length>0?` (${c.map(([i,u])=>`${i} x${u}`).join(", ")})`:"")]);}s.push(["provider",e.upload?"ported":e.sandbox_provider??"-"]),s.push(["visibility",e.visibility]),s.push(["spent",ua(e,true)??Oe(Me(e.stats.cost_usd,e.stats.n_unmeasured_trials))]),e.stats.gpu_cost_usd!=null&&s.push(["gpu compute (est.)",`$${e.stats.gpu_cost_usd.toFixed(4)}`]);let r=e.stats.n_unmeasured_judge_trials;if((e.stats.judge_cost_usd!=null&&e.stats.judge_cost_usd>0||typeof r=="number"&&r>0)&&s.push(["spent (judge)",Oe(Me(e.stats.judge_cost_usd,r))]),e.upload?.reported_totals){let l=e.upload.reported_totals,c=[l.n_input_tokens!==null?`in ${l.n_input_tokens}`:null,l.n_cache_tokens!==null?`cache ${l.n_cache_tokens}`:null,l.n_output_tokens!==null?`out ${l.n_output_tokens}`:null].filter(i=>i!==null);c.length>0&&s.push(["reported tokens",c.join(" \xB7 ")]);}if(e.upload?.datasets&&e.upload.datasets.length>0&&s.push(["archive datasets",e.upload.datasets.map(l=>l.version?`${l.name}@${l.version}`:l.name).join(", ")]),(t.taskLinksRow??true)&&e.upload?.task_links&&e.upload.task_links.length>0){let l=e.upload.task_links,c=l.reduce((d,p)=>d+p.n_linked,0),i=l.reduce((d,p)=>d+p.n_trials,0),u=Array.from(new Set(l.flatMap(d=>d.datasets)));s.push(["task links",`${c} of ${i} ${i===1?"trial":"trials"} linked`+(u.length>0?` to ${u.join(", ")}`:"")+(c<i?` \u2014 ${i-c} without the task folder`:"")]);}if(e.stats.analysis){s.push(["analysis",Hs(e.stats.analysis)]);for(let[l,c]of Object.entries(e.stats.analysis.checks))s.push([` ${l}`,`${c.n_pass} pass \xB7 ${c.n_fail} fail \xB7 ${c.n_not_applicable} n/a`+(typeof c.n_unknown=="number"?` \xB7 ${c.n_unknown} unknown`:"")]);}let o=Object.entries(e.trials.byStatus).filter(([,l])=>l>0).map(([l,c])=>`${l} ${c}`).join(" \xB7 ");o&&s.push(["trials",o]);for(let l of e.source_jobs)s.push([l.action==="regrade"?"regrade of":l.action==="retry"?"retry of":"resume of",l.job_id]);if(e.upload){let l=[e.upload.original_job_name,e.upload.original_job_id].filter(c=>c!==null).join(" \xB7 ");s.push(["uploaded",`${e.upload.uploaded_at}${l?` \u2014 originally ${l}`:""}`]);}return e.idempotent_replay&&s.push(["note","idempotent replay of an existing job"]),e.failure&&s.push(["failure",`${e.failure.code}: ${e.failure.message}`]),s.push(["started",e.started_at]),s.push(["updated",e.updated_at]),[...P(s),...Il(e)]}function Il(e){let t=Qt(e);if(t.length===0)return [];let s=t.map(n=>[` ${n.evals_key}`,n.points.map(r=>`pass@${r.k} ${r.value.toFixed(3)}`).join(" ")]);return ["","pass@k",...P(s)]}function $l(e){return e.source.dataset??`archive ${e.source.sha256.slice(0,12)}`}var Rr=[{key:"id",header:"ID",cell:e=>e.id},{key:"kind",header:"KIND",cell:e=>e.kind},{key:"name",header:"NAME",cell:e=>e.kind==="check"?e.name:e.job_name??"-"},{key:"status",header:"STATUS",cell:e=>e.status},{key:"datasets",header:"DATASETS",cell:e=>e.kind==="check"?$l(e):Ut(e.datasets)},{key:"agents",header:"AGENTS",cell:e=>e.kind==="check"?`${e.model_name} (${e.reasoning_effort})`:e.agents.map(Jt).join(", ")},{key:"trials",header:"TRIALS",cell:e=>String(e.kind==="check"?e.tasks.total:e.trials.total)},{key:"spent",header:"SPENT",cell:e=>e.kind==="check"?U(e.cost_usd):ua(e,false)??Oe(Me(e.stats.cost_usd,e.stats.n_unmeasured_trials))},{key:"started",header:"STARTED",cell:e=>e.kind==="check"?e.created_at:e.started_at}],Ar=["id","status","datasets","trials","spent","started"],Tr=[{key:"task",header:"TASK",cell:e=>e.task_name},{key:"agent",header:"AGENT",cell:e=>Jt({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=>Oe(as(e))},{key:"tokens",header:"TOKENS",cell:e=>e.usage&&sn(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}],Ol=["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,s])=>`${t} ${s}`).join(" \xB7 ")||"-"},{key:"reward",header:"MEAN REWARD",cell:e=>Gs(e.mean_reward)},{key:"spent",header:"SPENT",cell:e=>U(e.cost_usd)},{key:"check",header:"CHECK",cell:e=>Ll(e.check)},{key:"check-id",header:"TASK CHECK ID",cell:e=>e.check?.id??"-"}],Cl=["task","source","trials","statuses","reward","spent","check"];function ca(e){let t={pass:0,fail:0,not_applicable:0,unknown:0};for(let s of Object.values(e??{}))t[s.outcome]+=1;return t}function rt(e){let t=ca(e);return `pass ${t.pass} \xB7 fail ${t.fail} \xB7 unknown ${t.unknown} \xB7 n/a ${t.not_applicable}`}function Ll(e){return e===null?"-":e.status!=="completed"?e.status:rt(e.checks)}var Pr=[{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??"-"}],jl=["name","active","state","tasks","title"];function ue(e){return e.length>19?`${e.slice(0,19)}\u2026`:e}function ce(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:"org",header:"ORG",cell:e=>e.org??"-"},{key:"digest",header:"DIGEST",cell:e=>ue(e.digest)},{key:"size",header:"SIZE",cell:e=>ce(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}],Dl=["name","id","digest","size","created"],$r=[{key:"name",header:"NAME",cell:e=>e.name},{key:"org",header:"ORG",cell:e=>e.org??"-"},{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}],Jl=["name","source","run","updated"],Or=[{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}],Nl=["name","label","delivery","hosts","updated"];function Ul(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):"-"]],s=e.verifier_result?.rewards;if(s&&Object.keys(s).length>0&&t.push(["rewards",Object.entries(s).map(([n,r])=>`${n}=${r}`).join(" \xB7 ")]),t.push(["spent",Oe(xe(e))]),e.judge_result&&t.push(["spent (judge)",Oe(rs(e))]),(e.status==="RUNNING"||e.status==="SCORING")&&e.live_spent_usd!==null){let n=e.live_spend_at?` as of ${e.live_spend_at}`:"";t.push(["spent (live)",`at least $${e.live_spent_usd.toFixed(4)}${n}`]);}if(e.usage){let n=sn(e.usage);n&&t.push(["tokens",n]);}if(e.upload){let n=e.upload.reported_agent_result;n&&n.cost_usd!==null&&t.push(["reported cost",`$${n.cost_usd.toFixed(4)} (the original run's own record \u2014 not platform-metered)`]);let r=n?[n.n_input_tokens!==null?`in ${n.n_input_tokens}`:null,n.n_cache_tokens!==null?`cache ${n.n_cache_tokens}`:null,n.n_output_tokens!==null?`out ${n.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 n=e.sandbox_provider_degrade;t.push(["provider degrade",`${n.from} \u2192 ${n.to}: ${n.reason}`]);}if(e.gpu_cost){let n=e.gpu_cost;if(n.estimate_usd!=null){let r=n.gpu_type??"unknown type",a=n.duration_sec!=null?`${Math.round(n.duration_sec)}s`:"unmeasured",o=`rate card v${n.rate_card.version}${n.rate_card.source?`, ${n.rate_card.source} ${n.rate_card.source_date??""}`.trimEnd():""}`;t.push(["gpu compute (est.)",`$${n.estimate_usd.toFixed(4)} \u2014 ${r} x${n.gpu_count}, ${a} on ${n.provider} (${o})`]);}else t.push(["gpu compute (est.)",`not priced \u2014 ${n.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 n of e.retries)t.push([`attempt ${n.attempt_number}`,`${n.exception_info.exception_type} \xB7 spent ${U(n.cost_usd)}`+(n.settled_at?` \xB7 settled ${n.settled_at}`:"")]);}if(e.analysis){let n=e.analysis;t.push(["analysis",`${n.status} \xB7 ${n.model_name} \xB7 ${n.id}`]),n.status==="completed"&&t.push([" outcomes",rt(n.checks)]);for(let[r,a]of Object.entries(n.checks??{}))t.push([` ${r}`,`${a.outcome} \u2014 ${a.explanation}`]);n.summary&&t.push([" summary",n.summary]),n.estimated_cost_usd!==null&&t.push([" analyzer spend",`$${n.estimated_cost_usd.toFixed(4)}`]),n.failure&&t.push([" failure",`${n.failure.phase}: ${n.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]),P(t)}function Fl(e){let t=e.rubric.criteria.length,s=[["analysis id",e.id],["status",e.status],["model",e.model_name],["rubric",`${t} criteri${t===1?"on":"a"}`]];e.status==="completed"&&s.push(["outcomes",rt(e.checks)]);for(let[n,r]of Object.entries(e.checks??{})){s.push([` ${n}`,`${r.outcome} \u2014 ${r.explanation}`]);for(let a of r.evidence??[])s.push(["",`${a.where} \u2014 ${le(a.quote)}`]);}if(e.summary&&s.push(["summary",e.summary]),e.estimated_cost_usd!==null&&s.push(["spent",`$${e.estimated_cost_usd.toFixed(4)}`]),e.usage){let n=sn(e.usage);n&&s.push(["tokens",n]);}return e.failure&&s.push(["failure",`${e.failure.phase}: ${e.failure.message}`]),s.push(["created",e.created_at]),e.finished_at&&s.push(["finished",e.finished_at]),P(s)}function da(e){let t=[["name",e.name],["org",e.org??"-"],["source",e.source],["run command",e.run_command]],s=Object.keys(e.env??{});return s.length>0&&t.push(["env",s.sort().join(", ")]),t.push(["created",e.created_at]),t.push(["updated",e.updated_at]),P(t)}var pa=["e2b","daytona","modal"];function Ml(e){return pa.filter(t=>e?.[t]!==void 0).map(t=>{let s=e[t];return s.ok?s.degrades_to?`${t} \u2192${s.degrades_to}`:`${t} ok`:`${t} NO`}).join(" \xB7 ")}function Bl(e){let t=e.gpus??0;if(t<=0)return null;let s=e.gpu_types&&e.gpu_types.length>0?e.gpu_types.join("|"):"any GPU";return `${t}x ${s}`}function Gs(e){return e!==null?String(Math.round(e*1e3)/1e3):"-"}function ga(e){let t=Ue(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 s=e.data?.update;if(s&&typeof s=="object"&&s.sessionUpdate==="usage")return null;let n=_e(JSON.stringify(e.data??{}),140);return `#${String(e.seq).padStart(4)} ${e.type.padEnd(26)} ${n}`.trimEnd()}function K(e,t,s){if(t){e.out(JSON.stringify(s));return}let n=ga(s);n!==null&&e.out(n);}function fa(e){let t=e.failures?.length?` (${e.failures.length} task failure${e.failures.length===1?"":"s"})`:"";return `${e.message}${t}`}function ma(e){let t=[["id",e.id],["status",rn(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 s of e.warnings)t.push(["warning",s.message??s.code]);if(e.failure){t.push(["failure",fa(e.failure)]);for(let s of e.failure.failures??[])t.push([` ${s.task_name}`,s.error]);}return P(t)}function nn(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return `${t}s`;let s=Math.floor(t/60),n=t%60;return s<60?`${s}m${String(n).padStart(2,"0")}s`:`${Math.floor(s/60)}h${String(s%60).padStart(2,"0")}m`}function ql(e,t=Date.now()){let s=e.phases[e.phases.length-1],n=[];s!==void 0&&s.total>0&&(n.push(`${s.done}/${s.total}`),s.banked!==void 0&&s.banked>0&&n.push(s.name==="copying"?`${s.banked} of ${s.total} images already banked`:`${s.banked} banked`));let r=s!==void 0?Date.parse(s.started_at):NaN;return Number.isFinite(r)&&n.push(nn(t-r)),`phase ${e.phase}${n.length>0?` ${n.join(" \xB7 ")}`:""}`}function zl(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}`}),s=e.images,n=e.codebuild;return P([["phases",t.join(" \xB7 ")],["images",`${s.built} built, ${s.mirrored} mirrored, ${s.banked} banked`],["codebuild",`${n.copy_builds} copy build(s), ${n.billed_minutes} billed minute(s)`]])}function rn(e){return e.receiving===true?`${e.status} (receiving)`:e.status}function Vl(e){let t=[];return e.task_count!==void 0&&t.push(`tasks=${e.task_count}`),e.failure&&t.push(_e(fa(e.failure),140)),`status ${rn(e).padEnd(12)} ${t.join(" ")}`.trimEnd()}function Hl(e){return `state ${e.state}`}function Gl(e,t){let s=[["state",e.state]];if(t){let n=t.active_version?.version??null;s.push(["active",n===e.version?`${n} (this publish)`:n?`${n} (unchanged)`:"none"]);}return P(s)}function Kl(e){let t={...e.data??{}},s=[];typeof t.trial_id=="string"&&s.push(t.trial_id),typeof t.task_name=="string"&&s.push(t.task_name),typeof t.status=="string"&&s.push(t.status),typeof t.reward=="number"&&s.push(`reward=${t.reward}`);let n=new Set(["trial_id","task_name","status","reward"]);for(let[a,o]of Object.entries(t))n.has(a)||s.push(`${a}=${typeof o=="object"?JSON.stringify(o):String(o)}`);let r=_e(s.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 ha=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Wl=/^[0-9a-f][0-9a-f-]{7,34}$/i,Cr=8,Ce=200,Yl={job:"jobs",trial:"trials",analysis:"analyses","analyzed trial":"analyzed trials",check:"checks","task check":"task checks",session:"sessions",skill:"skills"},Lr=new WeakMap;function Ft(e,t,s){let n=Lr.get(e);n===void 0&&(n=new Map,Lr.set(e,n));let r=n.get(t);if(r!==void 0)return r;let a=s();return n.set(t,a),a}async function Mt(e){let t=[];for await(let s of e)t.push(s);return t}function an(e){let t=be(e);return t!==void 0?{scope:t}:{}}var ya=e=>Ft(e,"jobs",()=>Mt(E(k(e)).list({limit:Ce,...an(e)}))),jr=e=>Ft(e,"analyses",()=>Mt(se(k(e)).list({limit:Ce,...an(e)}))),Dr=e=>Ft(e,"checks",()=>Mt(Q(k(e)).list({limit:Ce,...an(e)})));async function Xl(e){let t=E(k(e)),s=(await ya(e)).map(a=>a.id),n=[],r=0;for(let a of s){try{for await(let o of t.trials(a,{limit:Ce}))n.push(o.id);}catch(o){throw o instanceof T&&o.code==="rate_limited"?new m(`trial id prefixes resolve against every trial of your ${s.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 n}async function Ql(e){let t=We(zt(e)),s=[],n;do{let r=await t.list({limit:Ce,state:"all",...n!==void 0?{cursor:n}:{}});for(let a of r.items)s.push(a.id);n=r.nextCursor??void 0;}while(n!==void 0);return s}var Zl={job:async e=>(await ya(e)).map(t=>t.id),trial:Xl,analysis:async e=>(await jr(e)).map(t=>t.id),"analyzed trial":async e=>(await jr(e)).map(t=>t.trial_id),check:async e=>(await Dr(e)).map(t=>t.id),"task check":async e=>(await Dr(e)).flatMap(t=>t.results.map(s=>s.id)),session:Ql,skill:async e=>(await Mt(fe(k(e)).list({limit:Ce}))).map(t=>t.id)},eu=(e,t)=>Ft(e,`ids:${t}`,()=>Zl[t](e));function tu(e){return `${/^[aeiou]/.test(e[0])?"an":"a"} ${e.join(" or ")}`}async function on(e,t,s){if(s===void 0||ha.test(s))return {noun:null,id:s};if(/^[0-9a-f][0-9a-f-]*$/i.test(s)&&s.length<Cr)throw new m(`"${s}" is too short to name ${tu(t)} \u2014 id prefixes need at least ${Cr} characters`);if(!Wl.test(s))return {noun:null,id:s};let n=s.toLowerCase(),r=[];for(let l of t){let c=new Set((await eu(e,l)).filter(i=>i.startsWith(n)));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 "${s}"`);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:Yl[l]}`),o=r.slice(0,5).map(l=>t.length>1?`${l.noun} ${l.id}`:l.id);throw new m(`"${s}" is ambiguous \u2014 it matches ${a.join(" and ")}: ${o.join(", ")}${r.length>5?", \u2026":""}`)}async function R(e,t,s){return (await on(e,[t],s)).id}async function ln(e,t,s){let n=await on(e,["analysis","analyzed trial"],s);if(n.noun==="analysis")return {id:n.id,analysis:null};if(n.noun==="analyzed trial")return Jr(e,await q(k(e)).get(n.id));if(s===void 0||!ha.test(s))return {id:s,analysis:null};try{return {id:s,analysis:await t.get(s)}}catch(r){if(!(r instanceof T)||r.status!==400)throw r;let a;try{a=await q(k(e)).get(s);}catch(o){throw o instanceof T&&o.status===404?r:o}return Jr(e,a)}}async function Jr(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 Ks(e,t){return t.analysis!==null?Promise.resolve(t.analysis):e.get(t.id)}function $(e){return {...e.flags.limit!==void 0?{limit:e.flags.limit}:{},...e.flags.cursor!==void 0?{cursor:String(e.flags.cursor)}:{}}}function be(e){if(e.flags.scope===void 0)return;let t=String(e.flags.scope);if(!ct.includes(t))throw new m(`--scope must be one of: ${ct.join(", ")}; got: ${t}`+(t==="all"?" (Harbor's all adds public rows \u2014 nothing hosted is public)":""));return t}function su(e){if(e.flags.kind===void 0)return;let t=String(e.flags.kind);if(!dt.includes(t))throw new m(`--kind must be one of: ${dt.join(", ")}; got: ${t}`);return t}function nu(e){if(e.flags.status===void 0)return;let t=String(e.flags.status).split(",").map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("--status got an empty status list");let s=t.filter(n=>!Je.includes(n));if(s.length>0)throw new m(`--status must name analysis statuses (${Je.join(", ")}); got: ${s.join(", ")}`);return t}function _a(e){if(e.flags.status===void 0)return;let t=String(e.flags.status).split(",").map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("--status got an empty status list");let s=t.filter(n=>!lt.includes(n));if(s.length>0)throw new m(`--status must name trial statuses (${lt.join(", ")}); got: ${s.join(", ")}`);return t}function ru(e){return e.status==="COMPLETED"?0:e.status==="FAILED"||e.status==="CANCELLED"?1:0}function au(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("/")||e.startsWith("~")}async function iu(e,t,s){let n=new Set;for(let o of e.agents)for(let l of o.skills??[])au(l)&&n.add(l);if(n.size===0)return e;let r=fe(k(t)),a=new Map;for(let o of n){let l=await r.upload(o);if(a.set(o,l.map(c=>c.ref)),t.flags.json!==true)for(let c of l)s.err(`Uploaded skill ${c.name} (${c.ref}, ${ue(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 Nr(e,t){let s=Vt(Rl(e),e);if(e.flags["print-config"]===true)return t.out(JSON.stringify(s,null,2)),0;let n=e.flags.json===true,r=e.flags.watch===true,a=e.flags.quiet===true,o=E(k(e)),l=await o.start(await iu(s,e,t));if(n||t.out(`org ${s.org??"personal"}`),!r){if(n)t.out(JSON.stringify(l));else {for(let i of V(l))t.out(i);t.out(""),t.out(`Follow it with: evolve job show ${l.id}`);}return 0}n?t.out(JSON.stringify({kind:"job.created",job:l})):t.out(`Job ${l.id} (${Ut(l.datasets)}) ${l.status} \u2014 watching\u2026`);let c=await o.watch(l.id,{onEvent:i=>{a||t.out(n?JSON.stringify({kind:"event",...i}):Kl(i));}});if(n)t.out(JSON.stringify({kind:"job.final",job:c}));else {t.out("");for(let i of V(c))t.out(i);}return ru(c)}async function ou(e,t){if(M(e,t,Rr))return 0;let s=be(e),n=su(e),a=await E(k(e)).list({...$(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{},...s!==void 0?{scope:s}:{},...n!==void 0?{kind:n}:{}});if(e.flags.json===true)return t.out(JSON.stringify(a)),0;if(a.items.length===0)return e.flags.quiet!==true&&t.out(n==="check"?"No checks.":"No jobs."),0;let o=n===void 0||n==="job"?Ar:["kind",...Ar];return F(e,t,a.items,Rr,o,l=>l.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
52
+ More: evolve job list --cursor ${a.nextCursor}`),0}async function lu(e,t){let s=E(k(e)),n=[];for(let r of e.positionals)n.push(await s.get(await R(e,"job",r)));return e.flags.json===true?(t.out(JSON.stringify(n.length===1?n[0]:n)),0):(n.forEach((r,a)=>{a>0&&t.out("");for(let o of V(r))t.out(o);}),0)}async function uu(e,t){if(M(e,t,Tr))return 0;let s=E(k(e)),n=_a(e),r=e.flags.dataset,a=await s.trials(await R(e,"job",e.positionals[0]),{...n!==void 0?{status:n}:{},...r!==void 0?{dataset:r}:{},...$(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):(F(e,t,a.items,Tr,Ol,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 cu(e,t){if(M(e,t,Er))return 0;let n=await E(k(e)).tasks(await R(e,"job",e.positionals[0]),$(e));return e.flags.json===true?(t.out(JSON.stringify(n)),0):n.items.length===0?(e.flags.quiet!==true&&t.out("No tasks."),0):(F(e,t,n.items,Er,Cl,r=>r.task_name),n.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
54
+ More: evolve job tasks ${e.positionals[0]} --cursor ${n.nextCursor}`),0)}function du(e){let t=[],s=[["ID","DATASETS","STATUS","MEAN REWARD","COVERAGE","SPENT"]];for(let n of e.jobs)s.push([n.id,Ut(n.datasets),n.status,Gs(n.mean_reward),`${n.coverage.scored}/${n.coverage.total}`,U(n.cost_usd)]);if(t.push(...P(s)),e.taskMatrix.length>0){t.push("","Task matrix (disagreements first; columns in the order above):");let n=[["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]));n.push([a.task_name,a.disagreement?"!":"",...r.map(l=>{let c=o.get(l);return c?c.mean_reward!==null?`${c.status} ${Gs(c.mean_reward)}`:c.status:"-"})]);}t.push(...P(n));}return t}async function pu(e,t){let s=E(k(e)),n=[];for(let a of e.positionals)n.push(await R(e,"job",a));let r=await s.compare(n);if(e.flags.json===true)t.out(JSON.stringify(r));else for(let a of du(r))t.out(a);return 0}async function gu(e,t){let n=await E(k(e)).cancel(await R(e,"job",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let r of V(n))t.out(r);return 0}async function fu(e,t){let s=E(k(e)),n=await R(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 s.get(n);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 s.delete(n);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}function Ur(e){let t=e.flags.email??[],s=e.flags.link===true;if(!s&&t.length===0)throw new m("name a grant: --link and/or --email <address>");return {...s?{link:true}:{},...t.length>0?{emails:t}:{}}}function mu(e){let t=[`visibility ${e.visibility}`,e.link.enabled?`link ${e.link.url??"(enabled)"}`:"link off"];if(e.emails.length===0)t.push("emails none");else for(let s of e.emails)t.push(`email ${s.email} (shared by ${s.shared_by}, ${s.created_at})`);return t}function js(e,t,s){if(e.flags.json===true)t.out(JSON.stringify(s));else for(let n of mu(s))t.out(n);return 0}function un(e,t){return {share:async(a,o)=>{let l=Ur(a),c=await t(a).share(await R(a,e,a.positionals[0]),l);return js(a,o,c)},unshare:async(a,o)=>{let l=Ur(a),c=await t(a).unshare(await R(a,e,a.positionals[0]),l);return js(a,o,c)},shares:async(a,o)=>js(a,o,await t(a).shares(await R(a,e,a.positionals[0])))}}var Ds=un("job",e=>E(k(e))),Js=un("check",e=>Q(k(e))),Ns=un("session",e=>We(zt(e)));async function hu(e,t){let s=e.flags.dataset;if(!s)throw new m("job stop needs --dataset <name> (to stop the whole job, use: evolve job cancel <id>)");let n=E(k(e)),r=await n.get(await R(e,"job",e.positionals[0])),a=r.datasets.map(u=>u.name);if(!a.includes(s))throw new Error(`job ${r.id} does not run dataset ${s}; its datasets: ${a.join(", ")}`);let o=[];for await(let u of n.trials(r.id,{dataset:s}))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 ${s}.`),0;let l=q(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 Fr(c,s,o.length,i,e,t),u}return Fr(c,s,o.length,i,e,t),0}function Fr(e,t,s,n,r,a){let o=s-n;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 ${s} trials have no report \u2014 no answer came back for trials ${n+1}-${Math.min(n+100,s)}; rerun the same command to finish the rest.`);}async function yu(e,t){let s=E(k(e)),n=e.flags["filter-error-type"],r=await s.resume(await R(e,"job",e.positionals[0]),n!==void 0?{filter_error_types:n}:void 0);if(e.flags.json===true)t.out(JSON.stringify(r));else {for(let a of V(r))t.out(a);t.out(""),t.out(`Follow it with: evolve job show ${r.id}`);}return 0}async function _u(e,t){let s=e.flags.trial,n=e.flags["failed-only"]===true;if(s!==void 0&&n)throw new m('"job retry" takes EITHER -t/--trial OR --failed-only, not both \u2014 explicit ids are already a selection');let r={};s!==void 0&&(r.trial_ids=s),n&&(r.failed_only=true);let a=await E(k(e)).retry(await R(e,"job",e.positionals[0]),r);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of V(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}function bu(e){if(e.length===0)return ["No analyzed trials."];let t=[["TRIAL","TASK","CHECKS","COST","SUMMARY"]],s=[];for(let n of e){let r=n.analysis,a;if(r.status==="failed")a=`FAILED${r.failure?` (${r.failure.phase})`:""}`,r.failure&&s.push(`analysis failed ${n.id} (${n.task_name}) \u2014 ${r.failure.phase}: ${le(r.failure.message)}`);else {let o=Object.entries(r.checks??{}).map(([l,c])=>`${l} ${c.outcome}`).join(" \xB7 ")||r.status;a=r.status==="completed"?`${rt(r.checks)} \xB7 ${o}`:o;}t.push([n.id,n.task_name,a,r.estimated_cost_usd!==null?`$${r.estimated_cost_usd.toFixed(4)}`:"-",r.summary?_e(le(r.summary),60):"-"]);}return [...P(t),...s]}async function ku(e,t){let s=e.flags.json===true,n=e.flags.watch===true,r=e.flags.quiet===true;if(e.flags["show-defaults"]===true)return wa(e,t,()=>se(k(e)).defaults(),"analyze","<job-id>");if(e.positionals[0]===void 0)throw new m("analyze takes a <job-id> (or --show-defaults)");let a=E(k(e)),o=await R(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=tn(String(e.flags.rubric))),e.flags.prompt!==void 0&&(l.prompt=en(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"]),e.flags.trial!==void 0&&(l.trial_ids=e.flags.trial);let c=await a.get(o);if((c.upload?.task_links??[]).some(p=>p.n_unlinked>0))for(let p of cn(c.upload?.task_links??null))t.err(p);else c.upload!==null&&c.upload!==void 0&&c.upload.task_links===null&&t.err(Cu);let i=await a.analyze(o,l);if(!n){if(s)t.out(JSON.stringify(i));else {for(let p of V(i))t.out(p);t.out(""),t.out(`Follow it with: evolve job show ${i.id}`);}return 0}s?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(s?JSON.stringify({kind:"analysis.stats",analysis:p.stats.analysis}):`analyses ${Hs(p.stats.analysis)}`);}}),d=[];for await(let p of a.trials(u.id))p.analysis&&d.push(p);if(s)t.out(JSON.stringify({kind:"analysis.final",job:u,trials:d}));else {t.out("");for(let p of bu(d))t.out(p);u.stats.analysis&&(t.out(""),t.out(`analyses ${Hs(u.stats.analysis)}`)),t.out("Details: evolve trial show <trial-id>");}return (u.stats.analysis?.n_failed??0)>0?1:0}function vu(e){return e.replace(/_/g," ").split(" ").map(t=>t&&t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function ba(e){let t=[],s=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}`),r.status==="completed"&&t.push(`Outcomes: ${rt(r.checks)}`);let a=[["CHECK","OUTCOME","EXPLANATION"]];for(let[o,l]of Object.entries(r.checks??{})){a.push([vu(o),l.outcome,le(l.explanation)]);for(let c of l.evidence??[])a.push(["","",`${c.where} \u2014 ${le(c.quote)}`]);}return a.length===1&&a.push(["-",r.status,"-"]),t.push(...P(a)),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 n=[["TASK","PASS","FAIL","N/A","UNKNOWN","COST ($)","TASK CHECK ID"]];for(let r of e.results){if(r.status==="failed"){n.push([r.task_name,"-","-","-","-","-",r.id]);continue}if(r.status!=="completed"){n.push([`${r.task_name} \xB7 ${r.status}`,"-","-","-","-","-",r.id]);continue}let a=ca(r.checks);n.push([r.task_name,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(...P(n));for(let r of s)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 ka(e){let t={};for(let s of e.results)t[s.status]=(t[s.status]??0)+1;return Object.entries(t).map(([s,n])=>`${n} ${s}`).join(" \xB7 ")}function va(e){let t=e.rubric.criteria.length,s=[["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} (${ka(e)})`],["model",`${e.model_name} at effort ${e.reasoning_effort}`],["rubric",`${t} criteri${t===1?"on":"a"}`],["provider",e.sandbox_provider],["visibility",e.visibility]];return e.prompt!==null&&s.push(["prompt","custom (Harbor's -p text)"]),e.n_concurrent!==null&&s.push(["n_concurrent",String(e.n_concurrent)]),e.include_task_names.length>0&&s.push(["include",e.include_task_names.join(", ")]),e.exclude_task_names.length>0&&s.push(["exclude",e.exclude_task_names.join(", ")]),e.n_tasks!==null&&s.push(["n_tasks",String(e.n_tasks)]),s.push(["created",e.created_at]),e.finished_at&&s.push(["finished",e.finished_at]),[...P(s),"",...ba(e)]}async function wa(e,t,s,n,r){let a=new Set(["show-defaults",...Object.keys(Nt)]),o=Object.keys(e.flags).filter(c=>!a.has(c));if(e.positionals[0]!==void 0||o.length>0)throw new m(`--show-defaults prints the platform's ${n} defaults and takes no ${r} and no other ${n} flag`+(o.length>0?` (given: ${o.map(c=>"--"+c).join(", ")})`:""));let l=await s();if(e.flags.json===true)t.out(JSON.stringify(l));else for(let c of wu(l))t.out(c);return 0}function wu(e){let t=e.rubric.criteria.length,s=P([["model",e.model_name],["effort",e.reasoning_effort],["provider",e.sandbox_provider],["rubric",`${t} criteri${t===1?"on":"a"}`]]);s.push("","PROMPT",...e.prompt.split(`
56
+ `),"","RUBRIC");for(let n of e.rubric.criteria)s.push(`${n.name}: ${n.description}`),n.guidance&&s.push(` ${n.guidance}`);return s}async function Su(e,t){let s=e.flags.json===true,n=e.flags.watch===true,r=e.flags.quiet===true,a=Q(k(e));if(e.flags["show-defaults"]===true)return wa(e,t,()=>a.defaults(),"check","<path>");let o={};e.flags.name!==void 0&&(o.name=String(e.flags.name)),e.flags.model!==void 0&&(o.model_name=String(e.flags.model)),e.flags.rubric!==void 0&&(o.rubric=tn(String(e.flags.rubric))),e.flags.prompt!==void 0&&(o.prompt=en(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};!s&&!r&&t.out("\u{1F50E} Checking task quality...");let u=await a.create({source:i,...o});if(!n){if(s)t.out(JSON.stringify(u));else {for(let p of va(u))t.out(p);t.out(""),t.out(`Follow it with: evolve check show ${u.id}`);}return 0}s?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(s?JSON.stringify({kind:"check.progress",check:p}):`tasks ${ka(p)}`);}});if(s)t.out(JSON.stringify({kind:"check.final",check:d}));else {t.out("");for(let p of ba(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 xu(e){if(e.flags.status===void 0)return;let t=String(e.flags.status).split(",").map(n=>n.trim()).filter(Boolean);if(t.length===0)throw new m("--status got an empty status list");let s=t.filter(n=>!Ne.includes(n));if(s.length>0)throw new m(`--status must name check statuses (${Ne.join(", ")}); got: ${s.join(", ")}`);return t}var Mr=[{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??"-"}],Ru=["id","status","tasks","model","spent","created"];async function Au(e,t){if(M(e,t,Mr))return 0;let s=be(e),n=xu(e),r=e.flags.dataset,a=await Q(k(e)).list({...$(e),...s!==void 0?{scope:s}:{},...n!==void 0?{status:n}:{},...r!==void 0?{dataset:r}:{}});return e.flags.json===true?(t.out(JSON.stringify(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No checks."),0):(F(e,t,a.items,Mr,Ru,o=>o.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
57
+ More: evolve check list --cursor ${a.nextCursor}`),0)}async function Tu(e,t){let s=await Q(k(e)).get(await R(e,"check",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let n of va(s))t.out(n);return s.results.some(n=>n.status==="failed")?1:0}async function Eu(e,t){let s=e.flags.json===true,n=e.flags.since,r=await Q(k(e)).transcript(await R(e,"task check",e.positionals[0]),n!==void 0?{since:n}:void 0);for(let a of r.events)K(t,s,a);for(let a of r.gateway_calls)K(t,s,a);return !s&&r.events.length===0&&t.out("No trace events."),0}var Br=["task-check","trace-parsed",...gt];async function qr(e,t){try{return await e.task(t)}catch(s){throw s instanceof T&&s.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`):s}}async function Pu(e,t){let s=Q(k(e)),n=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 on(e,r!==void 0?["task check"]:["check","task check"],e.positionals[0])).id,o=a;if(r!==void 0){if(!Br.includes(r))throw new m(`--stream must be one of: ${Br.join(", ")}`);if(r==="task-check"){let i=await qr(s,o);return t.out(n?JSON.stringify({task_check:i}):JSON.stringify(i,null,2)),0}if(r==="trace-parsed"){let i=e.flags.since,u=await s.transcript(o,i!==void 0?{since:i}:void 0);for(let d of u.events)K(t,n,d);for(let d of u.gateway_calls)K(t,n,d);return !n&&u.events.length===0&&t.out("No trace events."),0}if(await qr(s,o),r==="agent-home"){let i=await s.artifact(o,r);if(i===null)return t.out(n?JSON.stringify({files:null}):`No ${r} content was stored for this task check.`),0;if(n)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 s.artifact(o,r);return c===null?(t.out(n?JSON.stringify({log:null}):`No ${r} log was stored for this task check.`),0):(t.out(n?JSON.stringify({log:c}):c),0)}return await Sa(e,t,{fetch:c=>s.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 Bt(e),p=fs$1.existsSync(u(c,"check_report.json")),g=p?(await i(c,{withFileTypes:true})).filter(v=>v.isDirectory()).map(v=>u(c,v.name)):[c],f=new Map;for(let v of g){let b=await Iu(v);b!==null&&f.set(v,b);}let y=p?a:f.get(c)?.checkId;if(y===void 0)return [];let h=await s.get(y),w=[];p&&(await Ws(u(c,"evolve.json"),ds(h,d)),w.push("evolve.json"));for(let[v,b]of f){let S=h.results.find(x=>x.id===b.taskCheckId);S!==void 0&&(await Ws(u(v,"evolve.json"),cs(S,h,d)),w.push(p?`${v.slice(c.length+1)}/evolve.json`:"evolve.json"));}return w}})}async function Iu(e){let{readFile:t}=await import('fs/promises'),{join:s}=await import('path');try{let n=JSON.parse(await t(s(e,"result.json"),"utf8")),r=n.x_evolve?.taskCheckId,a=n.x_evolve?.checkId;return typeof r=="string"&&typeof a=="string"?{taskCheckId:r,checkId:a}:null}catch{return null}}async function Ws(e,t){let{writeFile:s}=await import('fs/promises');await s(e,JSON.stringify(t,null,2)+`
58
+ `);}async function Sa(e,t,s){let{mkdtemp:n,rm:r}=await import('fs/promises'),{tmpdir:a}=await import('os'),{join:o}=await import('path'),{extractTarGz:l,tarGzTopLevelName:c}=await Promise.resolve().then(()=>(_t(),yt)),i=await n(o(a(),s.scratchPrefix));try{let u=await s.fetch(i),d=await c(u),p=o(s.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 g;try{g=await l(u,s.outputDir,d);}catch(f){throw await r(p,{recursive:!0,force:!0}).catch(()=>{}),f}return g.push(...await s.enrich(p)),e.flags.json===!0?t.out(JSON.stringify({path:p,files:g.length})):t.out(`Saved ${p} (${g.length} files)`),0}finally{await r(i,{recursive:true,force:true}).catch(()=>{});}}async function $u(e,t){let s=E(k(e)),n={},r=_a(e);r!==void 0&&(n.statuses=r),e.flags.task!==void 0&&(n.task_name=String(e.flags.task));let a=await s.regrade(await R(e,"job",e.positionals[0]),n);if(e.flags.json===true)t.out(JSON.stringify(a));else {for(let o of V(a))t.out(o);t.out(""),t.out(`Follow it with: evolve job show ${a.id}`);}return 0}async function Ou(e,t){let s=E(k(e)),n=await R(e,"job",e.positionals[0]),{join:r}=await import('path'),a=e.flags["output-dir"]??process.cwd(),o=`job-${n}`,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(()=>(_t(),yt)),p=await c(r(u(),"evolve-job-download-"));try{let g=await s.download(n,{to:p});e.flags.overwrite===!0&&await i(l,{recursive:!0,force:!0});let f;try{f=await d(g,a,o);}catch(x){throw await i(l,{recursive:!0,force:!0}).catch(()=>{}),x}let{readdir:y,readFile:h,writeFile:w}=await import('fs/promises'),v=await s.get(n),b=await Bt(e),S=new Map;for await(let x of s.trials(n))S.set(x.id,x);await w(r(l,"evolve.json"),JSON.stringify(os(v,b),null,2)+`
59
+ `),f.push("evolve.json");for(let x of await y(l,{withFileTypes:!0})){if(!x.isDirectory())continue;let B;try{B=JSON.parse(await h(r(l,x.name,"result.json"),"utf8")).x_evolve?.trialId;}catch{continue}let D=B!==void 0?S.get(B):void 0;D&&(await w(r(l,x.name,"evolve.json"),JSON.stringify(mt(D,v,b),null,2)+`
60
+ `),f.push(`${x.name}/evolve.json`));}return e.flags.json===!0?t.out(JSON.stringify({path:l,files:f.length})):t.out(`Saved ${l} (${f.length} files)`),0}finally{await i(p,{recursive:true,force:true}).catch(()=>{});}}function st(e){return e.receiving?`${e.status} (receiving)`:e.status}function xa(e){let t=[["id",e.id],["status",st(e)]];return e.source!==null&&t.push(["source",e.source.type==="archive"?`archive (${ue(`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}`]),[...P(t),...Ra(e.skipped_trials),...cn(e.task_links)]}var zr={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"},Cu="uploaded before task linking existed: whether its trials carry the task folder is unknown here; each analysis row records it (task_absent_reason)";function Lu(e){return e==="dataset_flag"?"by task name, -d":"task hashes equal"}function cn(e){if(e===null||e.length===0)return [];let t=e.reduce((d,p)=>d+p.n_trials,0),s=e.reduce((d,p)=>d+p.n_linked,0),n=(d,p)=>`${d} ${p}${d===1?"":"s"}`,r=d=>Object.entries(d.link_reasons).map(([p,g])=>`${zr[p]??p}${Object.keys(d.link_reasons).length>1?` ${g}`:""}`).join(", ")+(d.candidates.length>0?` [${d.candidates.join(", ")}]`:""),a=e.filter(d=>d.n_unlinked>0);if(s===0){let d=Array.from(new Set(a.flatMap(g=>Object.keys(g.link_reasons)))).map(g=>zr[g]??g).join(", "),p=Array.from(new Set(a.flatMap(g=>g.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=Lu(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 ${s} of ${n(t,"trial")} to ${i} (${l})`];return a.length>0&&u.push(`not linked: ${a.map(d=>`${d.task_name} (${n(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 Ra(e){return e===null||e.length===0?[]:e.map(t=>` skipped ${t.trial}: ${t.code}: ${t.message}`)}function ju(e){let t=e.failure!==null?_e(`${e.failure.code}: ${e.failure.message}`,140):"";return `status ${st(e).padEnd(20)} ${t}`.trimEnd()}function Du(e,t=Date.now()){let s=nn(t-Date.parse(e.started_at));return `phase ${e.phase.padEnd(20)} ${s} elapsed`}async function Aa(e,t,s,n){let r=E(k(e)),a=e.flags.json===true;a||s.out(n==="accepted"?`Upload accepted: import ${t.id} ${st(t)} \u2014 watching\u2026`:`Import ${t.id} ${st(t)} \u2014 watching\u2026`);let o=await r.watchImport(t.id,{onStatus:u=>{a||s.out(ju(u));},onProgress:u=>{a||s.out(Du(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&&s.out(JSON.stringify({error:u})),s.err(`Error: ${u.message}`),1}let l=await r.get(o.job_id);if((o.n_trials_skipped??0)>0){s.err(`Skipped ${o.n_trials_skipped} trial(s) \u2014 see: evolve job import ${o.id}`);for(let u of Ra(o.skipped_trials))s.err(u);}let c=cn(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)s.err(u);return s.out(JSON.stringify(l)),0}s.out("");for(let u of V(l,{taskLinksRow:false}))s.out(u);if(c.length>0){s.out("");for(let u of c)s.out(u);}return s.out(""),s.out(`Analyze it with: evolve analyze ${l.id}`),0}async function Ju(e,t){let s=E(k(e)),n=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 s.upload(a!==void 0?{archive_url:a.trim()}:o,{...r!==void 0?{dataset:r}:{},onUploadProgress:(i,u)=>{if(n)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=>{n||t.out(`Registered import ${i} \u2014 re-attach anytime with: evolve job import ${i} --watch`);}});if(e.flags["no-wait"]===true){if(n)return t.out(JSON.stringify(c)),0;for(let i of xa(c))t.out(i);return t.out(""),t.out(`Follow it with: evolve job import ${c.id} --watch`),0}return Aa(e,c,t,"accepted")}var Vr=[{key:"id",header:"ID",cell:e=>e.id},{key:"status",header:"STATUS",cell:st},{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??""}],Nu=["id","status","job","trials","skipped","dataset","created"];async function Uu(e,t){if(M(e,t,Vr))return 0;let s=E(k(e)),n=e.flags.status;if(n!==void 0&&!["QUEUED","RUNNING","COMPLETED","FAILED"].includes(n))throw new m(`"--status" must be one of QUEUED, RUNNING, COMPLETED, FAILED (got "${n}")`);let r=await s.listImports({...$(e),...n!==void 0?{status:n}:{}});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):(F(e,t,r.items,Vr,Nu,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
61
+ More: evolve job imports --cursor ${r.nextCursor}`),0)}async function Fu(e,t){let n=await E(k(e)).getImport(e.positionals[0]);if(e.flags.watch===true)return Aa(e,n,t,"attached");if(e.flags.json===true)return t.out(JSON.stringify(n)),0;for(let r of xa(n))t.out(r);return 0}async function Mu(e,t){let n=await q(k(e)).get(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let r of Ul(n))t.out(r);return 0}var Hr=ss;async function Bu(e,t){let s=q(k(e)),n=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 R(e,"trial",e.positionals[0]);if(r!==void 0){if(!Hr.includes(r))throw new m(`--stream must be one of: ${Hr.join(", ")}`);if(r==="trace-parsed"){let w=0;for await(let v of s.traceEvents(a,$(e)))K(t,n,v),w+=1;return !n&&w===0&&t.out("No trace events."),0}if(r==="agent-home"){let w=await s.artifact(a,r);if(w===null)return t.out(n?JSON.stringify({files:null}):`No ${r} content was stored for this trial.`),0;if(n)t.out(JSON.stringify({files:w}));else for(let[v,b]of Object.entries(w))t.out(`===== ${v} (${Buffer.byteLength(b,"utf8")} bytes) =====`),t.out(b);return 0}if(r==="filesystem"){let w=await s.filesystem(a).archive();return n?t.out(JSON.stringify({stream:"filesystem",bytes:w.length,encoding:"base64",data:w.toString("base64")})):(t.bytes??(v=>process.stdout.write(v)))(w),0}let h=await s.artifact(a,r);return h===null?(t.out(n?JSON.stringify({log:null}):`No ${r} log was stored for this trial.`),0):(t.out(n?JSON.stringify({log:h}):h),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 s.get(a),p=null;try{p=await E(k(e)).get(d.job_id);}catch{p=null;}let g=[];for await(let h of s.traceEvents(a))g.push(h);let f=ls({trial:d,job:p,events:g,atif:await s.artifact(a,"trace-atif"),verifierLog:await s.artifact(a,"verifier"),stdout:await s.artifact(a,"trace-stdout"),stderr:await s.artifact(a,"trace-stderr"),home:await s.artifact(a,"agent-home"),userId:await Bt(e)});await o(u,{recursive:true});let y=[];for(let h of Object.keys(f).sort()){let w=c(u,...h.split("/"));await o(i(w),{recursive:true}),await l(w,f[h]),y.push(h),n||t.out(h);}return n?t.out(JSON.stringify({path:u,saved:y})):t.out(`Saved ${u}`),0}async function Bt(e){try{return (await Rs(k(e)).status()).user_id}catch{return null}}async function qu(e,t){let s=q(k(e)),n=e.flags.json===true,r=$(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 s.traceEvents(await R(e,"trial",e.positionals[0]),r))K(t,n,o),a+=1;return !n&&a===0&&t.out("No trace events."),0}async function zu(e,t){let s=E(k(e)),n=await R(e,"job",e.positionals[0]),r=$(e);e.flags.type!==void 0&&(r.type=String(e.flags.type));let a=await s.grep(n,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=ga(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 Vu(e,t){let s=await q(k(e)).retry(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let n of V(s))t.out(n);t.out(""),t.out(`Follow it with: evolve job show ${s.id}`);}return 0}async function Hu(e,t){let s=await q(k(e)).regrade(await R(e,"trial",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else {for(let n of V(s))t.out(n);t.out(""),t.out(`Follow it with: evolve job show ${s.id}`);}return 0}async function Gu(e){let t=await R(e,"trial",e.positionals[0]);return {fs:q(k(e)).filesystem(t),label:t,pathAt:1}}async function Ku(e){let t=await R(e,"analysis",e.positionals[0]);return {fs:se(k(e)).filesystem(t),label:t,pathAt:1}}async function Wu(e){let t=await R(e,"task check",e.positionals[0]),s=Q(k(e)),n=await s.task(t);return {fs:s.taskFilesystem(n.check_id,t),label:t,pathAt:1}}async function Yu(e){let[t,s]=e.positionals,n=X(k(e)),r;try{r=n.taskFiles(t,s);}catch(a){throw new m(a instanceof Error?a.message:String(a))}return {fs:r,label:`${t}/${s}`,pathAt:2}}function et(e){let t=e.flags.source;if(t!==void 0){if(t!=="live"&&t!=="capture")throw new m("--source must be live or capture");return t}}function Gr(e,t){(e.bytes??(s=>process.stdout.write(s)))(t);}function Xu(e){let t=[["state",e.state],["box",e.box?`${e.box.provider} ${e.box.id} (${e.box.role}, since ${e.box.since})`:"-"],["watcher",e.watcher??"-"],["work dir",e.work_dir]];if(e.capture){let s=e.capture;t.push(["capture",`${s.status} \xB7 ${s.phase} \xB7 ${s.entries} entries \xB7 ${s.changed_files} changed (${ce(s.changed_bytes)}) \xB7 ${s.at}`]),s.left_out.length>0&&t.push(["left out",s.left_out.join(", ")]);}return t.map(([s,n])=>`${s.padEnd(10)} ${n}`)}function Qu(e){let t=[e.changed?`${e.changed}${e.phase?` (${e.phase})`:""}`:"",e.captured===false?"image only":""].filter(Boolean).join(", "),s=e.type==="dir"?`${e.name}/`:e.target?`${e.name} -> ${e.target}`:e.name;return `${e.type.padEnd(7)} ${e.mode.padEnd(5)} ${ce(e.size).padStart(8)} ${e.mtime} ${s}${t?` [${t}]`:""}`}function qt(e){let t=s=>s.flags.json===true;return {async status(s,n){let{fs:r}=await e(s),a=await r.status();if(t(s))n.out(JSON.stringify(a));else for(let o of Xu(a))n.out(o);return 0},async list(s,n){let{fs:r,pathAt:a}=await e(s),o=await r.list({path:s.positionals[a]??"/",source:et(s),...$(s)});if(t(s))return n.out(JSON.stringify(o)),0;for(let l of o.entries)n.out(Qu(l));return o.entries.length===0&&n.out(`(empty) ${o.path}`),o.next_cursor!==null&&n.out(`\u2026 more: --cursor ${o.next_cursor}`),0},async cat(s,n){let{fs:r,pathAt:a}=await e(s),o=s.positionals[a];if(o===void 0)throw new m("cat needs a <path>");let l=s.flags.range!==void 0?Zu(String(s.flags.range)):void 0,c=await r.read(o,{source:et(s),range:l});return t(s)?n.out(JSON.stringify({path:o,bytes:c.length,encoding:"base64",data:c.toString("base64")})):Gr(n,c),0},async search(s,n){let{fs:r,pathAt:a}=await e(s);if(!r.search)throw new m("this owner has no search");let o=s.positionals[a];if(o===void 0)throw new m("search needs the text to find");let l=await r.search({q:o,path:s.flags.path!==void 0?String(s.flags.path):void 0,regex:s.flags.regex===true,limit:s.flags.limit!==void 0?s.flags.limit:void 0,source:et(s)});if(t(s))return n.out(JSON.stringify(l)),0;for(let c of l.hits)n.out(`${c.path}:${c.line}: ${c.snippet}`);return l.hits.length===0&&n.out("No hits."),l.truncated&&n.out("(truncated \u2014 narrow the path or the text)"),l.image_files_excluded&&n.out("(files the run never touched were not searched)"),0},async changes(s,n){let{fs:r}=await e(s);if(!r.changes)throw new m("this owner has no change list");let a=s.flags.phase!==void 0?String(s.flags.phase):void 0;if(a!==void 0&&!["setup","agent","verifier","all"].includes(a))throw new m("--phase must be setup, agent, verifier or all");let o=await r.changes({source:et(s),phase:a,...$(s)});if(t(s))return n.out(JSON.stringify(o)),0;n.out(`${o.total} changed (${ce(o.changed_bytes)}), ${o.source}`);for(let l of o.items)n.out(`${l.changed.padEnd(8)} ${l.phase.padEnd(8)} ${ce(l.size).padStart(8)} ${l.path}`);return o.next_cursor!==null&&n.out(`\u2026 more: --cursor ${o.next_cursor}`),0},async archive(s,n){let{fs:r,label:a}=await e(s);if(!r.archive)throw new m("this owner has no archive");let o={path:s.flags.path!==void 0?String(s.flags.path):void 0,source:et(s)},l=s.flags["output-dir"];if(l!==void 0){let i=await r.archive({...o,to:String(l)});return n.out(t(s)?JSON.stringify({saved:i}):i),0}let c=await r.archive(o);return t(s)?n.out(JSON.stringify({label:a,bytes:c.length,encoding:"base64",data:c.toString("base64")})):Gr(n,c),0},async logs(s,n){let{fs:r}=await e(s);if(!r.logs||!r.logEvents)throw new m("this owner has no sandbox logs");let a=String(s.flags.stream??"");if(!pt.includes(a))throw new m(`--stream must be one of: ${pt.join(", ")}`);let o=c=>{t(s)?n.out(JSON.stringify(c)):n.out(`${c.t??"-"} ${c.fd==="err"?"!":" "} ${c.line}`);};if(s.flags.follow===true){let c=s.flags.cursor!==void 0?`${a}:${s.flags.cursor}`:void 0;for await(let i of r.logEvents({lastEventId:c}))i.event==="line"&&i.data.stream===a&&o(i.data);return 0}let l=await r.logs({stream:a,...$(s)});if(t(s))return n.out(JSON.stringify(l)),0;for(let c of l.lines)o(c);return l.lines.length===0&&n.out("No lines."),l.next_cursor!==null&&n.out(`\u2026 more: --cursor ${l.next_cursor}`),0},async procs(s,n){let{fs:r}=await e(s);if(!r.procs)throw new m("this owner has no process list");let a=await r.procs();return n.out(t(s)?JSON.stringify(a):a.text),0}}}function Zu(e){let t=/^bytes=(\d*)-(\d*)$/.exec(e.trim());if(!t||t[1]===""&&t[2]==="")throw new m("--range must be bytes=start-end, bytes=start- or bytes=-suffix");return t[1]===""?{suffix:Number(t[2])}:t[2]===""?{start:Number(t[1])}:{start:Number(t[1]),end:Number(t[2])}}var re=qt(Gu),ae=qt(Ku),ie=qt(Wu),Us=qt(Yu);async function ec(e,t){let s=q(k(e)),n=[];for(let a of e.positionals)n.push(await R(e,"trial",a));let r=await s.stop(n);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 tc(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 Kr=[{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:tc},{key:"created",header:"CREATED",cell:e=>e.created_at},{key:"finished",header:"FINISHED",cell:e=>e.finished_at??"-"}],sc=["id","status","task","model","spent","created"];async function nc(e,t){if(M(e,t,Kr))return 0;let s=be(e),n=nu(e),r=e.flags.job!==void 0?await R(e,"job",String(e.flags.job)):void 0,o=await se(k(e)).list({...$(e),...s!==void 0?{scope:s}:{},...r!==void 0?{job:r}:{},...n!==void 0?{status:n}:{}});return e.flags.json===true?(t.out(JSON.stringify(o)),0):o.items.length===0?(e.flags.quiet!==true&&t.out("No analyses."),0):(F(e,t,o.items,Kr,sc,l=>l.id),o.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
62
+ More: evolve analysis list --cursor ${o.nextCursor}`),0)}async function rc(e,t){let s=se(k(e)),n=await Ks(s,await ln(e,s,e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(n));else for(let r of Fl(n))t.out(r);return 0}async function ac(e,t){let s=se(k(e)),n=e.flags.json===true,r=e.flags.since,a=await s.transcript((await ln(e,s,e.positionals[0])).id,r!==void 0?{since:r}:void 0);for(let o of a.events)K(t,n,o);for(let o of a.gateway_calls)K(t,n,o);return !n&&a.events.length===0&&t.out("No trace events."),0}var Wr=["analysis","trace-parsed",...gt];async function ic(e,t){let s=se(k(e)),n=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 ln(e,s,e.positionals[0]),o=a.id;if(r!==void 0){if(!Wr.includes(r))throw new m(`--stream must be one of: ${Wr.join(", ")}`);if(r==="analysis"){let c=await Ks(s,a);return t.out(n?JSON.stringify({analysis:c}):JSON.stringify(c,null,2)),0}if(r==="trace-parsed"){let c=e.flags.since,i=await s.transcript(o,c!==void 0?{since:c}:void 0);for(let u of i.events)K(t,n,u);for(let u of i.gateway_calls)K(t,n,u);return !n&&i.events.length===0&&t.out("No trace events."),0}if(r==="agent-home"){let c=await s.artifact(o,r);if(c===null)return t.out(n?JSON.stringify({files:null}):`No ${r} content was stored for this analysis.`),0;if(n)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 s.artifact(o,r);return l===null?(t.out(n?JSON.stringify({log:null}):`No ${r} log was stored for this analysis.`),0):(t.out(n?JSON.stringify({log:l}):l),0)}return Sa(e,t,{fetch:l=>s.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 Ks(s,a);return await Ws(c(l,"evolve.json"),us(i,await Bt(e))),["evolve.json"]}})}function oc(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 (${ue(e.digest)})`];case "archive_url":return [`source: ${e.archive_url} (${ue(e.digest)})`];case "hub_package":return [`source: hub:${e.hub_package} (${ue(e.digest)})`]}}function lc(e){return e.kind==="git"?e.commit.slice(0,12):ue(e.digest)}function Ta(e){let t=P([["name",e.name],["title",e.title??"-"],["description",e.description??"-"],["active version",e.active_version?.version??"-"]]),s=e.selected_version?.source??e.active_version?.source??null;if(s)t.push(...oc(s));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 n=e.active_version?.manifest;if(n&&(t.push(`manifest: ${n.name}${n.version?`@${n.version}`:""}`+(n.task_count!==null?` (${n.task_count} tasks pinned)`:"")),n.authors.length>0&&t.push(` authors: ${n.authors.map(r=>r.email?`${r.name} <${r.email}>`:r.name).join(", ")}`),n.keywords.length>0&&t.push(` keywords: ${n.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?lc(l.source):"-"]:[]]);t.push(...P(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?[Bl(c)??"-"]:[],Ml(c.providers),...a?[(c.notes??[]).map(i=>i.code).join(", ")||"-"]:[]]);if(t.push(...P(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 pa){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(...uc(e)),t}function uc(e){let t=e.failed_tasks??[],s=e.selected_version??e.active_version??null,n=s?.n_failed_tasks??t.length;if(t.length===0&&n===0)return [];let r=["",`Failed tasks (version ${s?.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(...P(a)),n>t.length&&r.push(` \u2026 ${n-t.length} more (${n} failed in total)`),r.push(" Fix: re-publish a new version \u2014 versions are immutable."),r}function Ea(e){let t=[];for(let s of e){if(!s.upstream?.moved)continue;let n=s.active_version?`@${s.active_version.version}`:"",r=s.upstream.latest_commit??s.upstream.ref,a=s.upstream.git_url??"<url>",o=s.upstream.path?` --path ${s.upstream.path}`:"";t.push(`${s.name}${n} \xB7 upstream ${s.upstream.ref} moved \u2014 run: evolve dataset publish --name ${s.name} --version <new-version> --git ${a} --ref ${r}${o}`);}return t}async function cc(e,t){if(M(e,t,Pr))return 0;let n=await X(k(e)).list({...$(e),...e.flags.search!==void 0?{search:String(e.flags.search)}:{}});if(e.flags.json===true)return t.out(JSON.stringify(n)),0;if(n.items.length===0)return e.flags.quiet!==true&&t.out("No datasets."),0;if(F(e,t,n.items,Pr,jl,r=>r.name),e.flags.quiet!==true)for(let r of Ea(n.items))t.out(r);return 0}async function dc(e,t){let n=await X(k(e)).get(e.positionals[0],$(e));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let r of Ta(n))t.out(r);for(let r of Ea([n]))t.out(r);}return 0}function Ys(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 s of e.tasks){if(!s.ok){t.push(` ${s.name} REFUSED: ${s.reason}`);continue}let n=Object.entries(s.providers??{}).filter(([,r])=>r.ok!==true||"degrades_to"in r).map(([r,a])=>a.ok?`${r}: runs via ${a.degrades_to}`:`${r}: ${a.reason}`);n.length>0&&t.push(` ${s.name}: ${n.join(" \xB7 ")}`);for(let r of s.notes??[])t.push(` ${s.name} NOTE ${r.code}: ${r.message}`);}return t.push(`Checked from task.toml alone; the import also checks: ${e.deferred.map(s=>s.name).join(", ")}.`),t}async function pc(e,t){let n=await X(k(e)).preflight({source:{directory:e.positionals[0]}});if(e.flags.json===true)t.out(JSON.stringify(n));else for(let a of Ys(n))t.out(a);let r=n.manifest!==null&&n.manifest.ok===false;return n.tasks_refused>0||r?1:0}async function gc(e,t){let s=e.flags.json===true,n=X(k(e)),r=Vt(Al(e),e);if(r.source.directory!==void 0&&e.flags["skip-preflight"]!==true){let u=null;try{u=await n.preflight({source:{directory:r.source.directory}});}catch(d){if(d instanceof T&&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(s)t.out(JSON.stringify({kind:"preflight.refused",preflight:u}));else {for(let p of Ys(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(s)e.flags.watch===true&&t.out(JSON.stringify({kind:"preflight.ok",preflight:u}));else for(let p of Ys(u))t.out(p);}}let a=u=>{if(s){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,s){t.out(JSON.stringify({kind:"upload.progress",sent_bytes:u,total_bytes:d,elapsed_sec:(Date.now()-o)/1e3}));return}t.out(`upload ${ce(u)}/${ce(d)} (${Math.min(p*10,100)}%)`);}},i=await n.publish(r,{onRegistered:a,...s&&e.flags.watch!==true?{}:{onUploadProgress:c}});if(e.flags.watch!==true){if(s)t.out(JSON.stringify(i));else {for(let u of ma(i))t.out(u);t.out(""),t.out(`Follow it with: evolve dataset show ${i.name}`);}return 0}return Pa(n,i,t,s,"created")}async function Pa(e,t,s,n,r){n?s.out(JSON.stringify({kind:`import.${r}`,datasetImport:t})):s.out(r==="created"?`Publish ${t.id} (${t.name}) ${t.status} \u2014 watching\u2026`:`Import ${t.id} (${t.name}@${t.version}) ${rn(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),s.out(n?JSON.stringify({kind:"task.failed",task:p}):hc(p)));},i;try{i=await e.watchImport(t.id,{onStatus:d=>{s.out(n?JSON.stringify({kind:"import.status",datasetImport:d}):Vl(d));},onProgress:d=>{s.out(n?JSON.stringify({kind:"import.progress",progress:d}):ql(d));},onVersion:(d,p)=>{a=d,o=p,s.out(n?JSON.stringify({kind:"import.version",version:d}):Hl(d)),c(p);}});}catch(d){if(d instanceof ge)return n&&s.out(JSON.stringify({error:La(d)})),s.err(`Error: ${d.message}`),s.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(n)s.out(JSON.stringify({kind:"import.final",datasetImport:i}));else {s.out("");for(let d of ma(i))s.out(d);if(i.progress!==null)for(let d of zl(i.progress))s.out(d);if(a!==null){for(let d of Gl(a,o))s.out(d);for(let d of mc(a,i))s.out(d);}}return i.status==="FAILED"?1:0}async function fc(e,t){let s=e.flags.json===true,n=X(k(e)),r=e.positionals[0],a=null;try{a=await n.getImport(r);}catch(o){if(!(o instanceof T&&o.status===404))throw o}if(a===null){let l=(await n.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 s&&t.out(JSON.stringify({error:{code:"nothing_to_watch",message:u}})),t.err(`Error: ${u}`),1}}try{return await Pa(n,a,t,s,"attached")}catch(o){if(o instanceof T&&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 s&&t.out(JSON.stringify({error:{code:"import_not_found",message:l}})),t.err(`Error: ${l}`),1}throw o}}function mc(e,t){if(e.n_failed_tasks<=0)return [];let s=e.task_count+e.n_failed_tasks;return [`built ${e.task_count} of ${s} 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 hc(e){return `task ${e.task_name} FAILED \u2014 ${e.failure.code} (${e.failure.step}): ${_e(e.failure.message,140)}`}async function yc(e,t){let n=await X(k(e)).download(e.positionals[0],{to:e.flags["output-dir"]??process.cwd()});return e.flags.json===true?t.out(JSON.stringify({path:n})):t.out(`Saved ${n}`),0}async function _c(e,t){let s=X(k(e)),[n,r]=e.positionals,a=await s.activate(n,r);if(e.flags.json===true)t.out(JSON.stringify(a));else for(let o of Ta(a))t.out(o);return 0}function Ia(e){let t=[["name",e.name],["id",e.id],["org",e.org??"-"],["ref",e.ref],["digest",e.digest],["size",ce(e.size_bytes)]];return e.description&&t.push(["description",e.description]),t.push(["created",e.created_at]),P(t)}async function bc(e,t){if(M(e,t,Ir))return 0;let s=fe(k(e)),n=be(e),r=await s.list({...$(e),...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 uploaded skills."),0):(F(e,t,r.items,Ir,Dl,a=>a.id),r.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
63
+ More: evolve skill list --cursor ${r.nextCursor}`),0)}async function kc(e,t){let n=await fe(k(e)).upload(e.positionals[0],Vt({},e));return e.flags.json===true?(t.out(JSON.stringify(n.length===1?n[0]:n)),0):(n.forEach((r,a)=>{a>0&&t.out("");for(let o of Ia(r))t.out(o);}),t.out(""),t.out(`Use it with: evolve run --skill name:${n[0].name} (moving pointer) or --skill ${n[0].ref} (this exact content)`),0)}async function vc(e,t){let s=await fe(k(e)).get(await R(e,"skill",e.positionals[0]));if(e.flags.json===true)return t.out(JSON.stringify(s)),0;for(let n of Ia(s))t.out(n);return s.skill_md&&(t.out(""),t.out(s.skill_md)),0}async function wc(e,t){let s=await R(e,"skill",e.positionals[0]);return await fe(k(e)).delete(s),e.flags.json===true?t.out(JSON.stringify({id:s,deleted:true})):t.out(`Deleted skill ${s}`),0}async function Sc(e,t){if(M(e,t,$r))return 0;let s=Ge(k(e)),n=be(e),r=await s.list({...$(e),...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 registered agents."),0):(F(e,t,r.items,$r,Jl,a=>a.name),0)}async function xc(e,t){let n=await Ge(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(n));else for(let r of da(n))t.out(r);return 0}async function Rc(e,t){let n=await Ge(k(e)).create(Vt(Tl(e),e));if(e.flags.json===true)t.out(JSON.stringify(n));else {for(let r of da(n))t.out(r);t.out(""),t.out(`Use it with: evolve run -d <dataset> -a ${n.name} -m <model>`);}return 0}async function Ac(e,t){let s=Ge(k(e)),n=e.positionals[0];return await s.delete(n),e.flags.json===true?t.out(JSON.stringify({name:n,deleted:true})):t.out(`Deleted agent ${n}`),0}function Tc(e){let t=[["user",e.user_id],["email",e.email??"-"],["key id",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]),P(t)}function zt(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 $a(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)}`:U(e.cost)}var Yr=[{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:"org",header:"ORG",cell:e=>e.org??"-"},{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:$a},{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??"-"}],Ec=["id","tag","agent","model","state","cost","created"];function Pc(e){let t=[["id",e.id],["tag",e.tag],["agent",e.agent],["model",e.model??"-"],["effort",e.reasoningEffort??"-"],["org",e.org??"-"],["provider",e.provider],["sandbox",e.sandboxId??"-"],["state",e.state],["runtime",e.runtimeStatus],["visibility",e.visibility],["cost",$a(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(([s,n])=>`${s} ${n}`).join(", ")]),t.push(["created",e.createdAt]),t.push(["ended",e.endedAt??"-"]),P(t)}async function Ic(e,t){if(M(e,t,Yr))return 0;let s=e.flags.state===void 0?void 0:String(e.flags.state);if(s!==void 0&&s!=="live"&&s!=="ended")throw new m(`--state must be live or ended; got: ${s}`);let n=be(e),a=await We(zt(e)).list({...$(e),...n!==void 0?{scope:n}:{},...s!==void 0?{state:s}:{},...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(a)),0):a.items.length===0?(e.flags.quiet!==true&&t.out("No sessions."),0):(F(e,t,a.items,Yr,Ec,o=>o.id),a.nextCursor&&t.tty===true&&e.flags.quiet!==true&&t.out(`
64
+ More: evolve session list --cursor ${a.nextCursor}`),0)}async function $c(e,t){let s=await We(zt(e)).get(await R(e,"session",e.positionals[0]));if(e.flags.json===true)t.out(JSON.stringify(s));else for(let n of Pc(s))t.out(n);return 0}async function Oc(e,t){let s=await Rs(k(e)).status();if(e.flags.json===true)t.out(JSON.stringify(s));else for(let n of Tc(s))t.out(n);return 0}var Xr=[{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}],Cc=["slug","display_name","role","created"];function Lc(e,t){let s=t.toLowerCase();return e.filter(n=>n.slug.toLowerCase().includes(s)||n.display_name.toLowerCase().includes(s)||(n.role??"").toLowerCase().includes(s))}async function jc(e,t){if(M(e,t,Xr))return 0;let s=await Pe(k(e)).list(),n=e.flags.search!==void 0?Lc(s,String(e.flags.search)):s;return e.flags.json===true?(t.out(JSON.stringify(n)),0):n.length===0?(e.flags.quiet!==true&&t.out("No organizations found."),0):(F(e,t,n,Xr,Cc,r=>r.slug),0)}function Dc(e){let{quota:t,usage:s}=e,n=s.month_spend_usd===null?"unavailable":U(s.month_spend_usd),r=s.month_spend_as_of===null?"":` (as of ${s.month_spend_as_of})`,a=t.monthly_budget_usd===null?`${n} / no budget${r}`:`${n} / ${U(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",`${s.in_flight_trials}/${t.max_concurrent_trials}`],["queued trials",`${s.queued_trials}/${t.max_queued_trials}`],["concurrent imports",`${s.in_flight_imports}/${t.max_concurrent_imports}`],["concurrent analyses",`${s.in_flight_analyses}/${t.max_concurrent_analyses}`],["concurrent sessions",`${s.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 P(o)}async function Jc(e,t){let s=await Pe(k(e)).get(e.positionals[0]);if(e.flags.json===true)t.out(JSON.stringify(s));else for(let n of Dc(s))t.out(n);return 0}function dn(){let e=process.env.XDG_CONFIG_HOME,t=e&&e.trim()!==""?e:path.join(os$1.homedir(),".config");return path.join(t,"evolve","config.json")}function Oa(){let e=dn();if(!fs$1.existsSync(e))return {};try{let t=JSON.parse(fs$1.readFileSync(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{throw new m(`${e} is not valid JSON \u2014 fix or delete it`)}}function Ca(){let e=Oa().org;return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function Nc(e){let t=dn(),s=Oa();return e===null?delete s.org:s.org=e,fs$1.mkdirSync(path.dirname(t),{recursive:true,mode:448}),fs$1.writeFileSync(t,JSON.stringify(s,null,2)+`
65
+ `,{mode:384}),fs$1.chmodSync(t,384),t}function Vt(e,t){let s=typeof t.flags.org=="string"?t.flags.org.trim():void 0;if(s==="personal"){let{org:r,...a}=e;return a}let n=s!==void 0&&s!==""?s:e.org??Ca();return n!==void 0?{...e,org:n}:e}async function Uc(e,t){let s=typeof e.flags["display-name"]=="string"?String(e.flags["display-name"]):void 0,n=await Pe(k(e)).create(e.positionals[0],{displayName:s});return e.flags.json===true?(t.out(JSON.stringify(n)),0):(t.out(`Created organization ${n.slug}`),t.out(`slug ${n.slug}`),t.out(`display name ${n.display_name}`),t.out(`role ${n.role??"owner"}`),t.out(""),t.out(`Invite a teammate with: evolve auth org invite ${n.slug}`),0)}async function Fc(e,t){let s=await Pe(k(e)).invite(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(s)),0):(t.out(`token ${s.token}`),t.out(`expires ${s.expires_at??"never"}`),t.out(`uses ${s.max_uses===null?"unlimited":String(s.max_uses)}`),t.out(""),t.out(`Send the teammate this command: evolve auth org join ${s.token}`),0)}async function Mc(e,t){let s=await Pe(k(e)).join(e.positionals[0]);return e.flags.json===true?(t.out(JSON.stringify(s)),0):(t.out(s.already_member?`Already a member of ${s.org.slug}`:`Joined ${s.org.slug} as member`),t.out(`Run in it with: evolve run --org ${s.org.slug} ... or set it once: evolve auth org use ${s.org.slug}`),0)}async function Bc(e,t){let s=e.flags.json===true,n=e.positionals[0];if(n===void 0){let o=Ca(),l=dn();return s?t.out(JSON.stringify({org:o??null,source:o!==void 0?"config":"personal",path:l})):t.out(o!==void 0?`org ${o} (from ${l})`:`org personal (no default in ${l})`),0}let r=n.trim();if(r==="")throw new m("org name must not be empty");let a=Nc(r==="personal"?null:r);return s?t.out(JSON.stringify({org:r==="personal"?null:r,path:a})):t.out(r==="personal"?`Default org cleared: personal (${a})`:`Default org: ${r} (${a})`),0}function pn(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 qc(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 s=fs$1.readFileSync(0,"utf8"),n=s.endsWith(`\r
66
+ `)?s.slice(0,-2):s.endsWith(`
67
+ `)?s.slice(0,-1):s;if(n.length===0)throw new m("stdin carried no value");return n}async function zc(e,t){let s=e.positionals[0],n=e.flags.delivery;if(n!=="brokered"&&n!=="direct")throw new m("--delivery is required: 'brokered' or 'direct'");let r=qc(e),o=await Et(pn(e)).set({name:s,value:r,delivery:n,...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 Vc(e,t){if(M(e,t,Or))return 0;let n=await Et(pn(e)).list();return e.flags.json===true?(t.out(JSON.stringify({secrets:n})),0):n.length===0?(e.flags.quiet!==true&&t.out("No env secrets stored."),0):(F(e,t,n,Or,Nl,r=>r.label&&r.label!=="default"?`${r.name}:${r.label}`:r.name),0)}async function Hc(e,t){let s=e.positionals[0],r=await Et(pn(e)).delete({name:s,...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 Qr(e,t){e.out(t.endsWith(`
68
+ `)?t.slice(0,-1):t);}function Gc(e,t){let s=[e.body];if(t)for(let n of Qe(e))s.push(`
69
+ --- ${n.path} ---
70
70
 
71
- ${s.content}`);return n.join("")}function Wc(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 Yc(e,t){let n=Pt(Ye(st));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)} ${Wc(r.description,70)}`);return 0}async function Xc(e,t){let n=Ye(st),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&&!yr(n,a[1])){if(s)throw new m("--full applies to a skill; a page is one file");let l=Xe(n,a[0]),c=br(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}])):Zr(t,c.content),0}let o=r?Pt(n):a.map(l=>Xe(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:Qe(l)}:{}})))),0):(Zr(t,o.map(l=>Kc(l,s)).join(`
71
+ ${n.content}`);return s.join("")}function Kc(e,t){if(e.length<=t)return e;let s=e.slice(0,t-3),n=s.lastIndexOf(" ");return `${(n>0?s.slice(0,n):s).trimEnd()}...`}async function Wc(e,t){let s=It(Ye(nt));if(e.flags.json===true)return t.out(JSON.stringify(s.map(r=>({name:r.name,description:r.description,path:r.dir})))),0;let n=Math.max(...s.map(r=>r.name.length));for(let r of s)t.out(` ${r.name.padEnd(n)} ${Kc(r.description,70)}`);return 0}async function Yc(e,t){let s=Ye(nt),n=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&&!hr(s,a[1])){if(n)throw new m("--full applies to a skill; a page is one file");let l=Xe(s,a[0]),c=_r(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}])):Qr(t,c.content),0}let o=r?It(s):a.map(l=>Xe(s,l));return e.flags.json===true?(t.out(JSON.stringify(o.map(l=>({name:l.name,path:l.dir,content:l.content,...n?{files:Qe(l)}:{}})))),0):(Qr(t,o.map(l=>Gc(l,n)).join(`
72
72
  ---
73
73
 
74
- `)),0)}async function Qc(e,t){let n=Ye(st);if(e.positionals.length===0)return t.out(e.flags.json===true?JSON.stringify({path:n}):n),0;let s=Xe(n,e.positionals[0]);return t.out(e.flags.json===true?JSON.stringify({name:s.name,path:s.dir}):s.dir),0}async function Zc(e,t){let n=Ye(st),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"&&!Ze.includes(l))throw new m(`--target must be one of ${[...Ze,"all"].join(", ")}, got "${l}"`);let i=l==="all"?[...Ze]:[l],u=l==="all"?i.filter(d=>fs.existsSync(path.dirname(It(d)))):i;if(l==="all"){for(let d of i.filter(p=>!u.includes(p)))t.err(`skipped ${d}: no ${path.dirname(It(d))}`);u.length===0&&t.err("no agent home found; name one with --target <agent> or a folder with --path <dir>");}a=u.map(d=>({target:d,skillsDir:It(d)}));}let o=kr(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 ed(e){if(e.length===0)return {text:qn(),code:0};let t=Zn[e[0]];if(t&&(e.length===1||!he[e[0]]))return {text:Sr(e[0],t),code:0};let n=ra[e[0]];if(n)return {text:n,code:0};let s=sa[e[0]]??e[0],r=he[s];if(!r)return {text:qn(),code:0};if(e.length===1)return {text:xr(s),code:0};let a=Vn(r,e.slice(1));return a?{text:Sr(`${s} ${a.verb}`,a.spec),code:0}:{text:xr(s),code:0}}var td={run:Ur,analyze:vu,check:xu,upload:Nu,"skills list":Yc,"skills get":Xc,"skills path":Qc,"skills install":Zc,"job start":Ur,"job list":lu,"job show":uu,"job trials":cu,"job tasks":du,"job compare":gu,"job cancel":fu,"job delete":mu,"job share":Jn.share,"job unshare":Jn.unshare,"job shares":Jn.shares,"job stop":yu,"job resume":_u,"job retry":bu,"job regrade":Ou,"job download":Cu,"job imports":Fu,"job import":Mu,"job grep":Vu,"trial show":Bu,"trial trace":zu,"trial download":qu,"trial retry":Hu,"trial regrade":Gu,"trial stop":tc,"trial files status":re.status,"trial files list":re.list,"trial files cat":re.cat,"trial files search":re.search,"trial files changes":re.changes,"trial files archive":re.archive,"trial logs":re.logs,"trial procs":re.procs,"analysis list":rc,"analysis show":ac,"analysis trace":ic,"analysis download":oc,"analysis files status":ae.status,"analysis files list":ae.list,"analysis files cat":ae.cat,"analysis files search":ae.search,"analysis files changes":ae.changes,"analysis files archive":ae.archive,"analysis logs":ae.logs,"analysis procs":ae.procs,"check list":Tu,"check show":Eu,"check share":Nn.share,"check unshare":Nn.unshare,"check shares":Nn.shares,"check trace":Pu,"check download":Iu,"check files status":ie.status,"check files list":ie.list,"check files cat":ie.cat,"check files search":ie.search,"check files changes":ie.changes,"check files archive":ie.archive,"check logs":ie.logs,"check procs":ie.procs,"session list":$c,"session show":Oc,"session share":Un.share,"session unshare":Un.unshare,"session shares":Un.shares,"dataset list":dc,"dataset show":pc,"dataset check":gc,"dataset publish":fc,"dataset watch":mc,"dataset download":_c,"dataset activate":bc,"dataset files status":Fn.status,"dataset files list":Fn.list,"dataset files cat":Fn.cat,"skill list":kc,"skill upload":vc,"skill show":wc,"skill delete":Sc,"agent list":xc,"agent show":Rc,"agent add":Ac,"agent remove":Tc,"auth status":Cc,"auth org list":Dc,"auth org show":Nc,"auth org create":Fc,"auth org invite":Mc,"auth org join":Bc,"auth org use":qc,"secrets set":Vc,"secrets list":Hc,"secrets delete":Gc};function ja(e){return e instanceof T?{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 ge?{code:e.code,message:e.message}:{message:e instanceof Error?e.message:String(e)}}async function nd(e,t=Pl){let n;try{n=sl(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}=ed(n.positionals);return t.out(s),r}if(n.command==="version")return t.out(tl()),0;try{let s=td[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:ja(s)}));let r=sd(s,t);return s instanceof T&&t.err(`Docs: ${Yo}`),r}}function sd(e,t){if(e instanceof T&&e.code==="quota_exceeded")return t.err(`Launch quota exceeded: ${e.message}`),2;if(e instanceof T&&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: ${Da(e.message)}`),e instanceof T&&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 rd=(()=>{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}})();rd&&nd(process.argv.slice(2)).then(e=>{process.exitCode=e;},e=>{process.stderr.write(`Error: ${Da(e?.message??String(e))}
75
- `),process.exitCode=1;});function Da(e){return e.replace(/^\w+\(\) requires an API key\. Set EVOLVE_API_KEY or pass \{ apiKey \} in config\./,"An API key is required. Set EVOLVE_API_KEY or pass --api-key <key>.")}exports.CliUsageError=m;exports.TRIAL_COLUMNS=Er;exports.USAGE=Rp;exports.analysisDetailLines=Ml;exports.analysisResultLines=ku;exports.buildAgentInput=El;exports.buildJobInput=Al;exports.buildPublishInput=Tl;exports.buildSettleSummaryLines=hc;exports.checkDetailLines=wa;exports.checkResultLines=ka;exports.cliConfigPath=ps;exports.cliMessage=Da;exports.eventLine=Wl;exports.failedTaskOutcomeLine=yc;exports.importProgressLine=zl;exports.importStatusLine=Hl;exports.loadPromptFile=ns;exports.loadRubricFile=ss;exports.parseAgentKwargs=wl;exports.parseArgs=sl;exports.parseEnvPairs=ua;exports.parseInlineSecrets=Rl;exports.parseSecretRefs=xl;exports.parseYamlConfig=pl;exports.parseYamlConfigLocated=ia;exports.progressSettleLines=Vl;exports.runCli=nd;exports.traceEventLine=fa;exports.trialDetailLines=Fl;exports.versionStatusLine=Gl;
74
+ `)),0)}async function Xc(e,t){let s=Ye(nt);if(e.positionals.length===0)return t.out(e.flags.json===true?JSON.stringify({path:s}):s),0;let n=Xe(s,e.positionals[0]);return t.out(e.flags.json===true?JSON.stringify({name:n.name,path:n.dir}):n.dir),0}async function Qc(e,t){let s=Ye(nt),n=typeof e.flags.target=="string"?e.flags.target:void 0,r=typeof e.flags.path=="string"?e.flags.path:void 0;if(n!==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=n??"all";if(l!=="all"&&!Ze.includes(l))throw new m(`--target must be one of ${[...Ze,"all"].join(", ")}, got "${l}"`);let i=l==="all"?[...Ze]:[l],u=l==="all"?i.filter(d=>fs$1.existsSync(path.dirname($t(d)))):i;if(l==="all"){for(let d of i.filter(p=>!u.includes(p)))t.err(`skipped ${d}: no ${path.dirname($t(d))}`);u.length===0&&t.err("no agent home found; name one with --target <agent> or a folder with --path <dir>");}a=u.map(d=>({target:d,skillsDir:$t(d)}));}let o=br(s,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 Zc(e){if(e.length===0)return {text:Bs(),code:0};let t=Xs[e[0]];if(t&&(e.length===1||!he[e[0]]))return {text:wr(e[0],t),code:0};let s=na[e[0]];if(s)return {text:s,code:0};let n=sa[e[0]]??e[0],r=he[n];if(!r)return {text:Bs(),code:0};if(e.length===1)return {text:Sr(n),code:0};let a=zs(r,e.slice(1));return a?{text:wr(`${n} ${a.verb}`,a.spec),code:0}:{text:Sr(n),code:0}}var ed={run:Nr,analyze:ku,check:Su,upload:Ju,"skills list":Wc,"skills get":Yc,"skills path":Xc,"skills install":Qc,"job start":Nr,"job list":ou,"job show":lu,"job trials":uu,"job tasks":cu,"job compare":pu,"job cancel":gu,"job delete":fu,"job share":Ds.share,"job unshare":Ds.unshare,"job shares":Ds.shares,"job stop":hu,"job resume":yu,"job retry":_u,"job regrade":$u,"job download":Ou,"job imports":Uu,"job import":Fu,"job grep":zu,"trial show":Mu,"trial trace":qu,"trial download":Bu,"trial retry":Vu,"trial regrade":Hu,"trial stop":ec,"trial files status":re.status,"trial files list":re.list,"trial files cat":re.cat,"trial files search":re.search,"trial files changes":re.changes,"trial files archive":re.archive,"trial logs":re.logs,"trial procs":re.procs,"analysis list":nc,"analysis show":rc,"analysis trace":ac,"analysis download":ic,"analysis files status":ae.status,"analysis files list":ae.list,"analysis files cat":ae.cat,"analysis files search":ae.search,"analysis files changes":ae.changes,"analysis files archive":ae.archive,"analysis logs":ae.logs,"analysis procs":ae.procs,"check list":Au,"check show":Tu,"check share":Js.share,"check unshare":Js.unshare,"check shares":Js.shares,"check trace":Eu,"check download":Pu,"check files status":ie.status,"check files list":ie.list,"check files cat":ie.cat,"check files search":ie.search,"check files changes":ie.changes,"check files archive":ie.archive,"check logs":ie.logs,"check procs":ie.procs,"session list":Ic,"session show":$c,"session share":Ns.share,"session unshare":Ns.unshare,"session shares":Ns.shares,"dataset list":cc,"dataset show":dc,"dataset check":pc,"dataset publish":gc,"dataset watch":fc,"dataset download":yc,"dataset activate":_c,"dataset files status":Us.status,"dataset files list":Us.list,"dataset files cat":Us.cat,"skill list":bc,"skill upload":kc,"skill show":vc,"skill delete":wc,"agent list":Sc,"agent show":xc,"agent add":Rc,"agent remove":Ac,"auth status":Oc,"auth org list":jc,"auth org show":Jc,"auth org create":Uc,"auth org invite":Fc,"auth org join":Mc,"auth org use":Bc,"secrets set":zc,"secrets list":Vc,"secrets delete":Hc};function La(e){return e instanceof T?{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 ge?{code:e.code,message:e.message}:{message:e instanceof Error?e.message:String(e)}}async function td(e,t=El){let s;try{s=sl(e);}catch(n){if(n instanceof m)return t.err(`Error: ${n.message}`),t.err('Run "evolve help" for usage.'),2;throw n}if(s.command==="help"){let{text:n,code:r}=Zc(s.positionals);return t.out(n),r}if(s.command==="version")return t.out(el()),0;try{let n=ed[s.command];return n?await n(s,t):(t.err(`Error: unknown command "${s.command}"`),2)}catch(n){if(n instanceof m)return t.err(`Error: ${n.message}`),t.err(`Run "evolve ${s.command} --help" for usage.`),2;s.flags.json===true&&t.out(JSON.stringify({error:La(n)}));let r=sd(n,t);return n instanceof T&&t.err(`Docs: ${Wo}`),r}}function sd(e,t){if(e instanceof T&&e.code==="quota_exceeded")return t.err(`Launch quota exceeded: ${e.message}`),2;if(e instanceof T&&e.status===429){let s=e.retryAfterSec!==void 0?`retry in ${e.retryAfterSec}s`:"retry shortly";return t.err(`Error: rate limited by the server \u2014 ${s}.`),1}if(t.err(`Error: ${ja(e.message)}`),e instanceof T&&e.code==="task_failed_to_build"){let s=e.details??{},n=Array.isArray(s.failed_tasks)?s.failed_tasks:[];for(let r of n){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 nd=(()=>{let e=process.argv[1];if(!e)return false;let t=s=>{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(s).href}catch{return false}};if(t(e))return true;try{return t(fs$1.realpathSync(e))}catch{return false}})();nd&&td(process.argv.slice(2)).then(e=>{process.exitCode=e;},e=>{process.stderr.write(`Error: ${ja(e?.message??String(e))}
75
+ `),process.exitCode=1;});function ja(e){return e.replace(/^\w+\(\) requires an API key\. Set EVOLVE_API_KEY or pass \{ apiKey \} in config\./,"An API key is required. Set EVOLVE_API_KEY or pass --api-key <key>.")}exports.CliUsageError=m;exports.TRIAL_COLUMNS=Tr;exports.USAGE=xp;exports.analysisDetailLines=Fl;exports.analysisResultLines=bu;exports.buildAgentInput=Tl;exports.buildJobInput=Rl;exports.buildPublishInput=Al;exports.buildSettleSummaryLines=mc;exports.checkDetailLines=va;exports.checkResultLines=ba;exports.cliConfigPath=dn;exports.cliMessage=ja;exports.eventLine=Kl;exports.failedTaskOutcomeLine=hc;exports.importProgressLine=ql;exports.importStatusLine=Vl;exports.loadPromptFile=en;exports.loadRubricFile=tn;exports.parseAgentKwargs=vl;exports.parseArgs=sl;exports.parseEnvPairs=la;exports.parseInlineSecrets=xl;exports.parseSecretRefs=Sl;exports.parseYamlConfig=dl;exports.parseYamlConfigLocated=aa;exports.progressSettleLines=zl;exports.runCli=td;exports.traceEventLine=ga;exports.trialDetailLines=Ul;exports.versionStatusLine=Hl;