@rulemetric/cli 0.15.0 → 0.15.1

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 (49) hide show
  1. package/dist/{chunk-5PMTNNA6.js → chunk-2U6PAYCD.js} +1 -1
  2. package/dist/{chunk-JUBXWTJA.js → chunk-5GFEEYHM.js} +1 -1
  3. package/dist/{chunk-RYCVPQYK.js → chunk-5IL3EEIE.js} +1 -1
  4. package/dist/{chunk-QFTAU33Y.js → chunk-7LE2W3WP.js} +1 -1
  5. package/dist/{chunk-AFEJYDUK.js → chunk-BU3ZGLQG.js} +1 -1
  6. package/dist/{chunk-ISFPPDDB.js → chunk-D5XLTSRV.js} +1 -1
  7. package/dist/{chunk-EJY5GK6A.js → chunk-EE4TZAZI.js} +1 -1
  8. package/dist/chunk-GJHFIQVO.js +28 -0
  9. package/dist/{chunk-TWPD3ICV.js → chunk-GYKYJJNF.js} +1 -1
  10. package/dist/{chunk-CMDOLJ23.js → chunk-ISEUEYSC.js} +1 -1
  11. package/dist/chunk-JIW2PCHU.js +1 -0
  12. package/dist/{chunk-HT6R6KR3.js → chunk-KFNFLMUR.js} +1 -1
  13. package/dist/{chunk-74KE4VOX.js → chunk-OAETRNTE.js} +1 -1
  14. package/dist/{chunk-JSGXFD42.js → chunk-TQM7MF5C.js} +1 -1
  15. package/dist/{chunk-RDL4HXFL.js → chunk-U3PIBPHT.js} +1 -1
  16. package/dist/chunk-UNVURR4E.js +1 -0
  17. package/dist/{chunk-N2PP2A7M.js → chunk-WVNTUKED.js} +1 -1
  18. package/dist/{chunk-XIOYV5A7.js → chunk-X3BBFDRD.js} +1 -1
  19. package/dist/{chunk-DYET4EYU.js → chunk-ZMVTSYD4.js} +1 -1
  20. package/dist/commands/diagnostics.js +1 -1
  21. package/dist/commands/evals/agent.js +1 -1
  22. package/dist/commands/evals/benchmark.js +1 -1
  23. package/dist/commands/evals/optimize.js +1 -1
  24. package/dist/commands/evals/refine-cases.js +1 -1
  25. package/dist/commands/sessions/list.js +1 -1
  26. package/dist/dashboard/Dashboard.js +1 -1
  27. package/dist/dashboard/data.js +1 -1
  28. package/dist/{dist-GSHUC7UU.js → dist-OVXV2FFO.js} +1 -1
  29. package/dist/lib/agent-loop.js +1 -1
  30. package/dist/lib/eval-benchmark.js +1 -1
  31. package/dist/lib/evolution-cost.js +1 -1
  32. package/dist/lib/evolution-enrolment.js +1 -1
  33. package/dist/lib/instruction-restoration.js +1 -1
  34. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -1
  35. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  36. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  37. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  38. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  39. package/dist/lib/jobs/handlers/process-memory-ab.js +1 -1
  40. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  41. package/dist/lib/manual-tasks.js +1 -1
  42. package/dist/lib/optimize-compare.js +1 -1
  43. package/dist/lib/projects/workspace/worktree.js +1 -1
  44. package/dist/lib/refine-cases.js +1 -1
  45. package/oclif.manifest.json +1 -1
  46. package/package.json +6 -6
  47. package/dist/chunk-4DA6L7KL.js +0 -1
  48. package/dist/chunk-T75KAEJO.js +0 -25
  49. package/dist/chunk-V576KKH6.js +0 -1
@@ -0,0 +1 @@
1
+ import{a as Y,b as N,c as A,d as Z,e as ee}from"./chunk-JU5ZNXPK.js";import{a as I}from"./chunk-5RBLIVBF.js";import{a as te}from"./chunk-KR36ZDGN.js";import{b as ne}from"./chunk-HXOQUYG3.js";import{a as T,c as X}from"./chunk-FADINV4H.js";import{f as z}from"./chunk-SWSOEYC7.js";import{a as K}from"./chunk-FG343JM3.js";import{a as B,f as Q}from"./chunk-4GOXEEXZ.js";import{e as C,f as R,h as E}from"./chunk-GIXHG5FK.js";import{a as $}from"./chunk-ZLLER3HP.js";import{execFileSync as de}from"node:child_process";import{tmpdir as se}from"node:os";import{z as e}from"zod";var k=e.string().regex(/^[a-f0-9]{64}$/),u=e.string().min(1).max(2e4),ie=e.string().min(1).max(240).refine(i=>!i.startsWith("/")&&!i.includes("\\")&&i.split("/").every(g=>g!==".."&&g!=="."&&g!==""&&!g.startsWith(".")),"fixture paths must be relative, without traversal or hidden configuration"),P=e.object({path:ie,content:e.string().max(1e5)}).strict(),re=e.object({name:u,path:ie,kind:e.enum(["text_equals","json_equals","file_absent"]),expected:e.string().max(1e5),primary:e.boolean()}).strict(),le=e.object({evalId:e.string().uuid(),taskId:u,family:u,lineage:u,split:e.enum(["exploration","validation"]),incidentSessionIds:e.array(e.string().uuid()).min(1),opportunity:e.enum(["failure","success","costly_success","should_not_trigger"]),prompt:u,fixtureVersion:u,verifierVersion:u,files:e.array(P).max(100),checks:e.array(re).min(1).max(30),oracleFiles:e.array(P).max(100)}).strict(),ce=e.object({version:e.literal(1),revision:e.number().int().positive(),question:u,hypotheses:e.array(u).min(2),interventionType:e.enum(["instruction","retrieval","tool","executable_check","workflow","removal","none"]),baseline:e.object({content:e.string().max(16e3),files:e.array(P).max(30)}).strict(),treatment:e.object({content:e.string().max(16e3),files:e.array(P).max(30)}).strict(),scope:e.object({projectPath:u,harnessVersion:u,deliveryMode:e.literal("explicit-system-and-fixture-file"),engine:e.enum(["claude","codex"]),model:u,provider:e.enum(["anthropic","openai"]),repositoryRevision:e.string().regex(/^[a-f0-9]{40}$/),ambientContext:e.literal("frozen-fixture"),permissions:e.literal("isolated-fixture-write"),tools:e.array(u).min(1),expiresAt:e.string().datetime()}).strict(),sampling:e.object({rationale:u,exclusions:e.array(u),eligibleOpportunities:e.number().int().positive(),sampledOpportunities:e.number().int().positive()}).strict(),analysis:e.object({role:e.enum(["diagnostic","exploration","frozen_validation"]),primaryOutcome:u,safeguards:e.array(u).min(1),eligibility:u,assignmentUnit:e.literal("task"),weighting:e.literal("equal-task"),method:e.literal("paired-task-bootstrap"),stopping:e.literal("fixed-final"),primaryComparison:e.literal("treatment-minus-baseline"),repetitions:e.number().int().min(1).max(10),usefulEffect:e.number().positive().max(1),reliabilityMargin:e.number().min(0).max(1),maxCalls:e.number().int().min(2).max(200),maxSecondsPerCall:e.number().int().min(10).max(600),humanReviewMinutes:e.number().nonnegative().nullable(),reviewNote:u}).strict(),tasks:e.array(le).min(1).max(50),supersedes:e.string().uuid().nullable()}).strict().superRefine((i,g)=>{let l=$(r=>g.addIssue({code:"custom",message:r}),"fail");(new Set(i.tasks.map(r=>r.evalId)).size!==i.tasks.length||new Set(i.tasks.map(r=>r.taskId)).size!==i.tasks.length)&&l("task identity must be unique, not repetition"),i.scope.engine==="claude"!=(i.scope.provider==="anthropic")&&l("engine/provider mismatch"),i.scope.engine==="claude"&&[...i.scope.tools].sort().join(",")!=="Bash,Edit,Read,Write"&&l("Claude fixture execution supports exactly Read, Write, Edit and Bash");for(let r of[i.baseline,i.treatment])Array.from(r.content).reduce((n,p)=>{let f=p.codePointAt(0);return n+(f<128?1:f<2048?2:f<65536?3:4)},0)>16e3&&l("Instruction delivery exceeds the UTF-8 byte budget");let d=new Map;for(let r of i.tasks){for(let n of[r.lineage,r.family])d.has(n)&&d.get(n)!==r.split&&l("family or incident lineage leaks across splits"),d.set(n,r.split);[...r.files,...i.baseline.files,...i.treatment.files].some(n=>["CLAUDE.md","CLAUDE.local.md","AGENTS.md"].includes(n.path.split("/").at(-1)))&&l("Fixture files cannot introduce ambient instruction files"),new Set(r.checks.map(n=>n.name)).size!==r.checks.length&&l("Check names must be unique"),r.checks.some(n=>n.primary)||l("each task needs an independent primary artifact check"),new Set(r.files.map(n=>n.path)).size!==r.files.length&&l("duplicate fixture file path");for(let n of[i.baseline,i.treatment])new Set(n.files.map(p=>p.path)).size!==n.files.length&&l("duplicate intervention file path"),n.files.some(p=>r.files.some(f=>f.path===p.path))&&l("intervention must not overwrite common fixture files")}let o=i.tasks.filter(r=>r.split===(i.analysis.role==="frozen_validation"?"validation":"exploration"));o.length||l("no tasks in the selected split"),o.length*2*i.analysis.repetitions>i.analysis.maxCalls&&l("planned calls exceed resource ceiling"),i.sampling.sampledOpportunities>i.sampling.eligibleOpportunities&&l("sampled opportunities exceed eligible opportunities")}),ae=e.object({version:e.literal(1),id:e.string().uuid(),protocolHash:k,protocol:ce}).strict(),fe=e.object({studyId:e.string().uuid(),protocolHash:k,taskId:u,arm:e.enum(["baseline","treatment"]),repetition:e.number().int().positive(),eligible:e.boolean(),exclusion:e.string().nullable(),primaryPassed:e.boolean(),safeguardsPassed:e.boolean(),checks:e.array(e.object({name:u,passed:e.boolean(),actual:e.string().nullable()})),deliveryHash:k,fixtureHash:k,harnessVersion:e.string().nullable(),engine:e.string().nullable(),model:e.string().nullable(),provider:e.string().nullable(),durationMs:e.number().nonnegative(),tokens:e.number().nonnegative().nullable(),costUsd:e.number().nonnegative().nullable()}).strict(),ue=e.object({harnessVersion:u,repositoryRevision:e.string().regex(/^[a-f0-9]{40}$/),contextHashes:e.record(k.nullable())}).strict(),me=e.object({version:e.literal(1),kind:e.literal("artifact-checks"),environment:ue,tasks:e.array(e.object({taskId:e.string().min(1).max(500),checks:e.array(re).min(1).max(30)}).strict()).min(4).max(200)}).strict(),he=e.object({version:e.literal(1),projectPath:u,taskFamily:u,harness:e.literal("claude_code"),model:u,configurationHash:k,baselineDeliveryHash:k,treatmentDeliveryHash:k,primaryOutcome:u,verification:me.optional(),outcomeRule:e.object({source:e.literal("session_analysis"),completedValues:e.array(e.string().min(1)).min(1),failedValues:e.array(e.string().min(1)).min(1)}).strict(),eligibleTaskIds:e.array(e.string().min(1).max(500)).min(4).max(200),maxAssignments:e.number().int().min(4).max(200),decisionRule:e.object({method:e.literal("fisher-exact-two-sided-v1").default("fisher-exact-two-sided-v1"),alpha:e.literal(.05).default(.05),minCompletedPerArm:e.number().int().min(2).max(100),minimumAbsoluteEffect:e.number().min(.01).max(1)}).strict(),expiresAt:e.string().datetime()}).strict().superRefine((i,g)=>{if(new Set(i.eligibleTaskIds).size!==i.eligibleTaskIds.length&&g.addIssue({code:"custom",path:["eligibleTaskIds"],message:"Eligible task IDs must be unique"}),i.maxAssignments>i.eligibleTaskIds.length&&g.addIssue({code:"custom",path:["maxAssignments"],message:"Assignment ceiling exceeds the pre-registered eligible task set"}),i.verification){let d=i.verification.tasks;(new Set(d.map(o=>o.taskId)).size!==d.length||d.length!==i.eligibleTaskIds.length||d.some(o=>!i.eligibleTaskIds.includes(o.taskId)||!o.checks.some(r=>r.primary)||new Set(o.checks.map(r=>r.name)).size!==o.checks.length))&&g.addIssue({code:"custom",path:["verification"],message:"Every eligible task needs one frozen verifier with unique checks and a primary outcome"})}i.outcomeRule.completedValues.some(d=>i.outcomeRule.failedValues.includes(d))&&g.addIssue({code:"custom",path:["outcomeRule"],message:"Outcome values must map to exactly one result"})});async function Pe(i,g){let{mirrorId:l,evalTargetId:d}=i,o=i.measurement?{...i.config,...X({...i.config,measurement:i.measurement})}:i.config,r=$(t=>g.logger.info(t),"log"),n=i.study?ae.parse(i.study):null;if(n&&n.protocol.scope.engine!=="claude")throw new I("Frozen study isolation is currently verified only for Claude");if(n&&Y(n.protocol)!==n.protocolHash)throw new I("Study snapshot hash mismatch");let p=await C(`/api/eval-targets/${d}`),f=await C(`/api/eval-targets/${d}/evals`);if(n&&(f=n.protocol.tasks.filter(t=>t.split===(n.protocol.analysis.role==="frozen_validation"?"validation":"exploration")).map(t=>({id:t.evalId,name:t.taskId,prompt:t.prompt,expectedOutput:"",expectations:[]}))),f.length===0&&o.generateIfEmpty){r("No eval cases on target \u2014 generating from content via local LLM...");let t=await ne({content:p.content,name:p.name,...i.measurement?{measurement:i.measurement}:{}});if(t===null)throw new Error("Case generation requires a local LLM backend (Claude or Codex CLI) \u2014 none available on this worker.");let s=[];for(let a of t)s.push(await R(`/api/eval-targets/${d}/evals`,a));f=s,r(`Generated ${s.length} eval case(s)`)}if(f.length===0)throw new I("No evals defined for target");let M=null;if(n&&(M=de(n.protocol.scope.engine,["--version"],{encoding:"utf8",timeout:1e4}).trim(),M!==n.protocol.scope.harnessVersion))throw new I("Observed harness version differs from frozen protocol");if(n){if(o.engine!==n.protocol.scope.engine||o.model!==n.protocol.scope.model||o.runsPerEval!==n.protocol.analysis.repetitions||o.timeout!==n.protocol.analysis.maxSecondsPerCall*1e3||o.skipBaseline||new Date(n.protocol.scope.expiresAt)<=new Date)throw new I("Study execution configuration differs from frozen protocol or scope expired");for(let t of n.protocol.tasks.filter(s=>f.some(a=>a.id===s.evalId))){let s=z({baseDir:se(),engine:n.protocol.scope.engine});try{N(s.workDir,[...t.files,...t.oracleFiles]);let a=A(s.workDir,t);if(!a.primaryPassed||!a.safeguardsPassed)throw new I(`Oracle failed for ${t.taskId}; no actor calls started`)}finally{s.cleanup()}}}let oe=o.runsPerEval??1,D=o.timeout??12e4,H=n?1:o.iteration??1,_=new Set;if(g.job.attempts>1)for(let s=0;;s+=100){let a=await C(`/api/eval-targets/${d}/runs?jobId=${l}&limit=100&offset=${s}`);for(let m of a)_.add(`${m.evalId}|${m.configuration}|${m.runNumber}|${m.iteration}`);if(a.length<100)break}let F=[{name:"with_target",content:n?.protocol.treatment.content??p.content}];o.skipBaseline||F.push({name:"without_target",...n?{content:n.protocol.baseline.content}:{}});let b=[];for(let t of f)for(let s of F)for(let a=1;a<=oe;a++)_.has(`${t.id}|${s.name}|${a}|${H}`)||b.push({eval_:t,configuration:s.name,targetContent:s.content,runNumber:a});n&&b.sort((t,s)=>t.eval_.id.localeCompare(s.eval_.id)||t.runNumber-s.runNumber||((f.findIndex(a=>a.id===t.eval_.id)+t.runNumber)%2?t.configuration.localeCompare(s.configuration):s.configuration.localeCompare(t.configuration))),_.size>0&&r(`Resuming attempt ${g.job.attempts}: ${_.size} run(s) already persisted, ${b.length} remaining`);let v=b.length,y=0,x=B(o.engine),w=Math.min(o.parallel??1,4);await E(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:v,completed:0,current:null,message:`Starting ${v} eval runs (concurrency: ${w})...`}});let S=[];async function O(t){let s=`${t.configuration} \xB7 ${t.eval_.name} \xB7 run#${t.runNumber}`;r(`[${y+1}/${v}] ${s}`);let a=z({...n?{baseDir:se()}:{},targetType:n?"instruction":p.type,targetContent:t.targetContent,targetName:p.name,engine:x});a.leakedFiles.length&&r(`\u26A0 CONTAMINATED ${s}: ${a.leakedFiles.join(", ")} survived the strip`);try{let m=n?.protocol.tasks.find(W=>W.evalId===t.eval_.id),h=t.configuration==="with_target"?"treatment":"baseline";n&&m&&N(a.workDir,[...m.files,...n.protocol[h].files]);let J=n&&m?ee(a.workDir,m,n.protocol[h],x):null;n&&m&&await R(`/api/studies/${n.id}/calls`,{jobId:l,taskId:m.taskId,arm:h,repetition:t.runNumber});let c=await Q({prompt:t.eval_.prompt,targetContent:n?t.targetContent:a.systemPrompt,...n?{appendTarget:!0}:{},workDir:a.workDir,timeout:D,model:o.model,engine:x,...n?{writableFixture:!0}:{}}),U={};!o.skipGrading&&t.eval_.expectations.length>0&&!c.error&&(U=await K({...T({engine:x,model:o.model},{engine:o.graderEngine,model:o.graderModel}),prompt:t.eval_.prompt,output:c.output,expectations:t.eval_.expectations,timeout:D}));let L=n?Z(n.protocol,c):null,G=n&&m?{studyId:n.id,protocolHash:n.protocolHash,taskId:m.taskId,arm:h,repetition:t.runNumber,eligible:L===null,exclusion:L,...A(a.workDir,m),deliveryHash:J.deliveryHash,fixtureHash:J.fixtureHash,harnessVersion:M,engine:c.engine??null,model:c.model??null,provider:c.engine==="claude"?"anthropic":c.provider??null,durationMs:c.durationMs,tokens:c.totalTokens||null,costUsd:c.costUsd??null}:null;return{jobId:l,evalId:t.eval_.id,evalTargetId:p.id,evalTargetVersion:p.version,configuration:t.configuration,runNumber:t.runNumber,iteration:H,status:c.error?"failed":"completed",outputs:{...G?{study:G}:{},...c.usage?{usage:c.usage}:{},...c.error?{error:c.error}:{transcript:c.output,...c.model?{model:c.model}:{}},methodology:a.methodology,delivery:a.delivery,isolated:a.isWorktree,engine:c.engine??x,model:c.model??null,deliveryRegime:`${p.type}:${x}:${a.methodology}`,...i.measurement?{measurement:i.measurement}:{},...c.provider?{provider:c.provider}:{},...c.costUsd!=null?{costUsd:c.costUsd}:{},...a.leakedFiles.length?{leakedFiles:a.leakedFiles}:{}},timing:{duration_ms:c.durationMs,total_tokens:c.totalTokens},grading:U,worktree:a.isWorktree?!0:void 0}}finally{a.cleanup()}}if($(O,"processItem"),w<=1)for(let t of b){let s=`${t.configuration} \xB7 ${t.eval_.name} \xB7 run#${t.runNumber}`;await E(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:v,completed:y,current:s,message:`Executing ${s}...`}});let a=await O(t);await R("/api/eval-runs",a),S.push(a),y++,await E(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:v,completed:y,current:s,message:`Completed ${s}`}})}else{r(`Running ${v} evals with concurrency=${w} (worktree isolation)`);for(let t=0;t<b.length;t+=w){let s=b.slice(t,t+w),a=`batch ${Math.floor(t/w)+1}/${Math.ceil(b.length/w)}`;await E(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:v,completed:y,current:a,message:`Executing ${a} (${s.length} parallel)...`}});let m=await Promise.all(s.map(O));for(let h of m)await R("/api/eval-runs",h),S.push(h),y++;await E(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:v,completed:y,current:a,message:`Completed ${a}`}})}}let V=ge(S),j;if(!o.skipGrading&&S.some(t=>t.grading&&Object.keys(t.grading).length>0))try{r(`Running meta-judge for job ${l}...`);let t=f.map(s=>{let m=S.filter(h=>h.evalId===s.id&&h.configuration==="with_target")[0];return{evalName:s.name,prompt:s.prompt,expectations:s.expectations,grading:m?.grading?m.grading:null,output:m?.outputs?.transcript?.slice(0,500)}});j=await te({...T({engine:x,model:o.model},{engine:o.graderEngine,model:o.graderModel}),targetName:p.name,evalResults:t,timeout:6e4}),r(`Meta-judge: quality=${j.quality_score}/5, issues=${j.issues.length}`)}catch(t){r(`Meta-judge failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}let q=j?{...V,meta_judgement:j}:V;return r(`Job ${l} completed: ${y}/${v} runs`),await E(`/api/eval-jobs/${l}/state`,{result:q}).catch(t=>{r(`result persist failed: ${t instanceof Error?t.message:String(t)}`)}),q}$(Pe,"processEval");function ge(i){let g=i.filter(r=>r.status==="completed"),l=i.filter(r=>r.status==="failed"),d=g.filter(r=>{let n=r.grading;return n&&Object.keys(n).length>0}),o=d.length>0?d.reduce((r,n)=>r+(n.grading?.summary?.pass_rate??0),0)/d.length:null;return{total:i.length,completed:g.length,failed:l.length,avgPassRate:o}}$(ge,"buildSummary");export{Pe as a};
@@ -1 +1 @@
1
- import{b as R,c as L,f as s,g as I,i as h}from"./chunk-XXPWPKTD.js";import{c as ne}from"./chunk-5TM7AOH2.js";import{b as re}from"./chunk-IEQDLURA.js";import{d as te,e as oe,f as se}from"./chunk-KINIFUZQ.js";import{a as Y}from"./chunk-5PMTNNA6.js";import{a as O}from"./chunk-ZYGBABMZ.js";import{a as U}from"./chunk-IFIWDL7G.js";import{c as N}from"./chunk-FZMO7XSN.js";import{a as F}from"./chunk-LLXC5SRC.js";import{a as W}from"./chunk-4DA6L7KL.js";import{a as $}from"./chunk-WQFR2LOY.js";import{a as q}from"./chunk-Q7IDLOSP.js";import{b as J}from"./chunk-XIOYV5A7.js";import{b as V}from"./chunk-5RBLIVBF.js";import{a as K}from"./chunk-JSGXFD42.js";import{a as x}from"./chunk-CZBO3A6B.js";import{a as j}from"./chunk-JUBXWTJA.js";import{a as Q}from"./chunk-W6MMJRFZ.js";import{a as D}from"./chunk-PZS55PW2.js";import{a as ee}from"./chunk-QPAOX7P2.js";import{e as P}from"./chunk-CIKQXFQ2.js";import{b as G}from"./chunk-5Z6XXOJL.js";import{a as z}from"./chunk-CYCH2EQC.js";import{a as X}from"./chunk-VUNJGZPP.js";import{a as Z}from"./chunk-L562Y4RN.js";import{b as C}from"./chunk-PIVEJTNF.js";import{k as B}from"./chunk-DYET4EYU.js";import{d as S}from"./chunk-GPBN4ROE.js";import{b as M,e as T,f as E}from"./chunk-GIXHG5FK.js";import{a as l}from"./chunk-ZLLER3HP.js";var H=null,w=null,ce={process_eval:W,process_insights:$,process_launch:J,process_send_message:O,process_conversation:F,process_session_goal:U,distill_memories:G,memory_ab:K,process_run_cleanup:Y,cron_refine_cases:j,cron_retire_unused_skills:ee,cron_reconcile_attribution:x,cron_suggest_instructions:P,cron_refresh_skills:D,cron_refresh_pricing:Q,cron_eval_autorun:X,cron_auto_accept_suggestions:z,cron_instruction_training:Z,cron_instruction_evolution:B,process_judge_review:q,harbor_ab:N},ae=Object.keys(ce),me=new Set([]);function pe(e=process.env){return e.DATABASE_URL?ae:ae.filter(t=>!me.has(t))}l(pe,"availableCapabilities");var ge=3e4,_e=3e4,fe=3e4,ie=500,le=1e4,ve=`thin-agent-${process.pid}`,A=null;function ke(e,t,r,p){let d;try{let i=S();d={claude:i.claudeBin!=null,codex:i.codexBin!=null,pi:i.piBin!=null,codexModel:i.codexConfiguredModel}}catch{}let m;try{m=C()}catch{}let g=l(i=>E("/api/workers/heartbeat",{workerType:"cli-worker",clientName:ve,clientVersion:p,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:i,metadata:{capabilities:e,mode:"thin-agent",measurementProtocol:1,studyProtocol:1,memorySnapshots:1,boundedAutorun:1,llmEngines:d,harborReady:m,machine:H?.summary()}}).then(c=>{let u=c?.advisory;u&&u.message!==A?(A=u.message,s(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(A=null)}).catch(c=>{s(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})}),"send");g("alive");let f=setInterval(()=>g("alive"),fe),a=null,n=l(()=>a||(clearInterval(f),a=Promise.race([g("shutting_down"),new Promise(i=>setTimeout(i,2e3).unref())]),a),"sayGoodbye");return t.addEventListener("abort",()=>{n()},{once:!0}),{shutdown:n}}l(ke,"startPresenceHeartbeat");async function be(e,t,r=S()){let p=[...r.claudeBin?["claude"]:[],...r.codexBin?["codex"]:[],...r.piBin?["pi"]:[]],d=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${t}&measurementProtocol=1&studyProtocol=1&memorySnapshots=1&boundedAutorun=1&measurementEngines=${encodeURIComponent(p.join(","))}`,m=await T(`/api/work/next?${d}`);return m==null||typeof m=="string"?null:m}l(be,"pollForWork");function he(e,t){return{logger:{info:l(r=>t(r),"info"),warn:l(r=>t(r),"warn"),error:l(r=>t(r),"error")},job:{attempts:e}}}l(he,"makeHelpers");async function we(e,t,r,p){let d=ce[e.kind],m=Date.now();if(s(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!d){let n=`unknown kind: ${e.kind}`;s(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:n}),await E(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:n,terminal:!0}).catch(()=>{});return}let g=l(()=>{s(r,{event:"heartbeat",jobId:e.id}),h(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken},{budgetMs:Math.min(L,Math.max(0,t-1e3)),signal:p,log:r,event:"heartbeat",jobId:e.id}).then(n=>{n.ok||s(r,{event:"heartbeat_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})})},"beat"),f=setInterval(g,t);w={jobId:e.id,beat:g};let a;try{let n=he(e.attempts,r);a={kind:"complete",result:await d(e.payload,n)??{}}}catch(n){let i=H?.pausesSince(m)??[],c=se(i),u=n instanceof Error?n.message:String(n),v=V(n),o=!v&&oe(i);a={kind:"fail",message:c?`${c}; ${u}`:u,pausedDuringJob:!!c,terminal:v,hostSuspended:o}}try{if(a.kind==="complete"){s(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-m});let n=await h(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:a.result},{budgetMs:R,signal:p,log:r,event:"complete_post",jobId:e.id});n.ok||s(r,{event:"complete_post_error",jobId:e.id,kind:e.kind,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}else{s(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-m,terminal:a.terminal,error:a.message,...a.pausedDuringJob?{pausedDuringJob:!0}:{},...a.hostSuspended?{hostSuspended:!0}:{}});let n=await h(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:a.message,terminal:a.terminal,hostSuspended:a.hostSuspended},{budgetMs:R,signal:p,log:r,event:"fail_post",jobId:e.id});n.ok||s(r,{event:"fail_post_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}}finally{clearInterval(f),w=null}}l(we,"runOne");var de=new Set(["process_eval","process_conversation","process_insights","process_session_goal","distill_memories","memory_ab","cron_suggest_instructions","cron_eval_autorun","cron_instruction_evolution","process_judge_review","harbor_ab"]);async function Ze(e){let t=e.log??(()=>{}),r=e.pollWaitMs??ge,p=e.heartbeatIntervalMs??_e,d=e.capabilities??pe();s(t,{event:"agent_start",capabilities:d,pollWaitMs:r,heartbeatIntervalMs:p});try{let o=re();o.removed.length>0&&s(t,{event:"eval_worktrees_swept",removed:o.removed.length})}catch(o){s(t,{event:"eval_worktree_sweep_failed",error:o instanceof Error?o.message:String(o)})}H=te({signal:e.signal,onPause:l(o=>{s(t,{event:"machine_pause",...o,jobId:w?.jobId??null}),w?.beat()},"onPause")});let m=ke(d,e.signal,t,e.version);ne({signal:e.signal,log:t}).catch(o=>{s(t,{event:"tt_heartbeat_fatal",error:o instanceof Error?o.message:String(o)})});let g=5*6e4,f=0,a=l(()=>{if(!e.readInstalledVersion||!e.version)return!1;let o=Date.now();if(o-f<g)return!1;f=o;let b=e.readInstalledVersion();return!!(b&&b!==e.version)},"versionDrifted"),n=new AbortController,i=n.signal;e.signal.aborted?n.abort():e.signal.addEventListener("abort",()=>n.abort(),{once:!0});let c=l(async(o,b)=>{let _=ie;for(;!i.aborted;){if(a()){s(t,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),n.abort(),e.onVersionDrift?.();break}let y=null;try{y=await be([...b],r)}catch(k){let ue=k instanceof M?k.statusCode:void 0;if(s(t,{event:"poll_error",lane:o,status:ue,error:k instanceof Error?k.message:String(k)}),!await I(_,i))break;_=Math.min(_*2,le);continue}if(!y){if(s(t,{event:"poll_204",lane:o}),!await I(_,i))break;_=Math.min(_*2,le);continue}_=ie,await we(y,p,t,i)}},"runLane"),u=d.filter(o=>de.has(o)),v=d.filter(o=>!de.has(o));u.length>0&&v.length>0?(s(t,{event:"agent_lanes",heavy:u.length,fast:v.length}),await Promise.all([c("heavy",u),c("fast",v)])):await c("single",d),await m.shutdown(),s(t,{event:"agent_stop"})}l(Ze,"runAgentLoop");export{ce as a,ae as b,pe as c,be as d,Ze as e};
1
+ import{b as R,c as L,f as s,g as I,i as h}from"./chunk-XXPWPKTD.js";import{c as ne}from"./chunk-5TM7AOH2.js";import{b as re}from"./chunk-IEQDLURA.js";import{d as te,e as oe,f as se}from"./chunk-KINIFUZQ.js";import{a as Y}from"./chunk-2U6PAYCD.js";import{a as O}from"./chunk-ZYGBABMZ.js";import{a as U}from"./chunk-IFIWDL7G.js";import{c as N}from"./chunk-FZMO7XSN.js";import{a as F}from"./chunk-LLXC5SRC.js";import{a as W}from"./chunk-UNVURR4E.js";import{a as $}from"./chunk-WQFR2LOY.js";import{a as q}from"./chunk-Q7IDLOSP.js";import{b as J}from"./chunk-X3BBFDRD.js";import{b as V}from"./chunk-5RBLIVBF.js";import{a as K}from"./chunk-TQM7MF5C.js";import{a as x}from"./chunk-CZBO3A6B.js";import{a as j}from"./chunk-5GFEEYHM.js";import{a as Q}from"./chunk-W6MMJRFZ.js";import{a as D}from"./chunk-PZS55PW2.js";import{a as ee}from"./chunk-QPAOX7P2.js";import{e as P}from"./chunk-CIKQXFQ2.js";import{b as G}from"./chunk-5Z6XXOJL.js";import{a as z}from"./chunk-CYCH2EQC.js";import{a as X}from"./chunk-VUNJGZPP.js";import{a as Z}from"./chunk-L562Y4RN.js";import{b as C}from"./chunk-PIVEJTNF.js";import{k as B}from"./chunk-ZMVTSYD4.js";import{d as S}from"./chunk-GPBN4ROE.js";import{b as M,e as T,f as E}from"./chunk-GIXHG5FK.js";import{a as l}from"./chunk-ZLLER3HP.js";var H=null,w=null,ce={process_eval:W,process_insights:$,process_launch:J,process_send_message:O,process_conversation:F,process_session_goal:U,distill_memories:G,memory_ab:K,process_run_cleanup:Y,cron_refine_cases:j,cron_retire_unused_skills:ee,cron_reconcile_attribution:x,cron_suggest_instructions:P,cron_refresh_skills:D,cron_refresh_pricing:Q,cron_eval_autorun:X,cron_auto_accept_suggestions:z,cron_instruction_training:Z,cron_instruction_evolution:B,process_judge_review:q,harbor_ab:N},ae=Object.keys(ce),me=new Set([]);function pe(e=process.env){return e.DATABASE_URL?ae:ae.filter(t=>!me.has(t))}l(pe,"availableCapabilities");var ge=3e4,_e=3e4,fe=3e4,ie=500,le=1e4,ve=`thin-agent-${process.pid}`,A=null;function ke(e,t,r,p){let d;try{let i=S();d={claude:i.claudeBin!=null,codex:i.codexBin!=null,pi:i.piBin!=null,codexModel:i.codexConfiguredModel}}catch{}let m;try{m=C()}catch{}let g=l(i=>E("/api/workers/heartbeat",{workerType:"cli-worker",clientName:ve,clientVersion:p,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:i,metadata:{capabilities:e,mode:"thin-agent",measurementProtocol:1,studyProtocol:1,memorySnapshots:1,boundedAutorun:1,llmEngines:d,harborReady:m,machine:H?.summary()}}).then(c=>{let u=c?.advisory;u&&u.message!==A?(A=u.message,s(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(A=null)}).catch(c=>{s(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})}),"send");g("alive");let f=setInterval(()=>g("alive"),fe),a=null,n=l(()=>a||(clearInterval(f),a=Promise.race([g("shutting_down"),new Promise(i=>setTimeout(i,2e3).unref())]),a),"sayGoodbye");return t.addEventListener("abort",()=>{n()},{once:!0}),{shutdown:n}}l(ke,"startPresenceHeartbeat");async function be(e,t,r=S()){let p=[...r.claudeBin?["claude"]:[],...r.codexBin?["codex"]:[],...r.piBin?["pi"]:[]],d=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${t}&measurementProtocol=1&studyProtocol=1&memorySnapshots=1&boundedAutorun=1&measurementEngines=${encodeURIComponent(p.join(","))}`,m=await T(`/api/work/next?${d}`);return m==null||typeof m=="string"?null:m}l(be,"pollForWork");function he(e,t){return{logger:{info:l(r=>t(r),"info"),warn:l(r=>t(r),"warn"),error:l(r=>t(r),"error")},job:{attempts:e}}}l(he,"makeHelpers");async function we(e,t,r,p){let d=ce[e.kind],m=Date.now();if(s(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!d){let n=`unknown kind: ${e.kind}`;s(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:n}),await E(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:n,terminal:!0}).catch(()=>{});return}let g=l(()=>{s(r,{event:"heartbeat",jobId:e.id}),h(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken},{budgetMs:Math.min(L,Math.max(0,t-1e3)),signal:p,log:r,event:"heartbeat",jobId:e.id}).then(n=>{n.ok||s(r,{event:"heartbeat_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})})},"beat"),f=setInterval(g,t);w={jobId:e.id,beat:g};let a;try{let n=he(e.attempts,r);a={kind:"complete",result:await d(e.payload,n)??{}}}catch(n){let i=H?.pausesSince(m)??[],c=se(i),u=n instanceof Error?n.message:String(n),v=V(n),o=!v&&oe(i);a={kind:"fail",message:c?`${c}; ${u}`:u,pausedDuringJob:!!c,terminal:v,hostSuspended:o}}try{if(a.kind==="complete"){s(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-m});let n=await h(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:a.result},{budgetMs:R,signal:p,log:r,event:"complete_post",jobId:e.id});n.ok||s(r,{event:"complete_post_error",jobId:e.id,kind:e.kind,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}else{s(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-m,terminal:a.terminal,error:a.message,...a.pausedDuringJob?{pausedDuringJob:!0}:{},...a.hostSuspended?{hostSuspended:!0}:{}});let n=await h(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:a.message,terminal:a.terminal,hostSuspended:a.hostSuspended},{budgetMs:R,signal:p,log:r,event:"fail_post",jobId:e.id});n.ok||s(r,{event:"fail_post_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}}finally{clearInterval(f),w=null}}l(we,"runOne");var de=new Set(["process_eval","process_conversation","process_insights","process_session_goal","distill_memories","memory_ab","cron_suggest_instructions","cron_eval_autorun","cron_instruction_evolution","process_judge_review","harbor_ab"]);async function Ze(e){let t=e.log??(()=>{}),r=e.pollWaitMs??ge,p=e.heartbeatIntervalMs??_e,d=e.capabilities??pe();s(t,{event:"agent_start",capabilities:d,pollWaitMs:r,heartbeatIntervalMs:p});try{let o=re();o.removed.length>0&&s(t,{event:"eval_worktrees_swept",removed:o.removed.length})}catch(o){s(t,{event:"eval_worktree_sweep_failed",error:o instanceof Error?o.message:String(o)})}H=te({signal:e.signal,onPause:l(o=>{s(t,{event:"machine_pause",...o,jobId:w?.jobId??null}),w?.beat()},"onPause")});let m=ke(d,e.signal,t,e.version);ne({signal:e.signal,log:t}).catch(o=>{s(t,{event:"tt_heartbeat_fatal",error:o instanceof Error?o.message:String(o)})});let g=5*6e4,f=0,a=l(()=>{if(!e.readInstalledVersion||!e.version)return!1;let o=Date.now();if(o-f<g)return!1;f=o;let b=e.readInstalledVersion();return!!(b&&b!==e.version)},"versionDrifted"),n=new AbortController,i=n.signal;e.signal.aborted?n.abort():e.signal.addEventListener("abort",()=>n.abort(),{once:!0});let c=l(async(o,b)=>{let _=ie;for(;!i.aborted;){if(a()){s(t,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),n.abort(),e.onVersionDrift?.();break}let y=null;try{y=await be([...b],r)}catch(k){let ue=k instanceof M?k.statusCode:void 0;if(s(t,{event:"poll_error",lane:o,status:ue,error:k instanceof Error?k.message:String(k)}),!await I(_,i))break;_=Math.min(_*2,le);continue}if(!y){if(s(t,{event:"poll_204",lane:o}),!await I(_,i))break;_=Math.min(_*2,le);continue}_=ie,await we(y,p,t,i)}},"runLane"),u=d.filter(o=>de.has(o)),v=d.filter(o=>!de.has(o));u.length>0&&v.length>0?(s(t,{event:"agent_lanes",heavy:u.length,fast:v.length}),await Promise.all([c("heavy",u),c("fast",v)])):await c("single",d),await m.shutdown(),s(t,{event:"agent_stop"})}l(Ze,"runAgentLoop");export{ce as a,ae as b,pe as c,be as d,Ze as e};
@@ -1 +1 @@
1
- import{b as l}from"./chunk-ISFPPDDB.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-GIXHG5FK.js";import{a as c}from"./chunk-ZLLER3HP.js";async function g(t){if(!t.worktree?.create)return t;let{branch:e,baseRef:s}=t.worktree,n=await l({repoRoot:t.projectPath,branch:e,baseRef:s});return{...t,projectPath:n.path,gitBranch:n.branch}}c(g,"resolveWorktreeForLaunch");async function L(t,e){let{mirrorId:s,tool:n}=t,{config:r}=t,a=c(o=>e.logger.info(o),"log");if(e.job.attempts>1)throw new p(`process_launch is not safe to retry (attempt ${e.job.attempts}). Re-launch manually.`);r=await g(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${n}...`);let{getLauncher:f}=await import("./dist-GSHUC7UU.js"),i=await f(n).launch(r);a(`Launch completed: sessionId=${i.sessionId}`);let u={...i,worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await h(`/api/launch-jobs/${s}/state`,{result:u}).catch(o=>{a(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),u}c(L,"processLaunch");export{g as a,L as b};
1
+ import{b as l}from"./chunk-D5XLTSRV.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-GIXHG5FK.js";import{a as c}from"./chunk-ZLLER3HP.js";async function g(t){if(!t.worktree?.create)return t;let{branch:e,baseRef:s}=t.worktree,n=await l({repoRoot:t.projectPath,branch:e,baseRef:s});return{...t,projectPath:n.path,gitBranch:n.branch}}c(g,"resolveWorktreeForLaunch");async function L(t,e){let{mirrorId:s,tool:n}=t,{config:r}=t,a=c(o=>e.logger.info(o),"log");if(e.job.attempts>1)throw new p(`process_launch is not safe to retry (attempt ${e.job.attempts}). Re-launch manually.`);r=await g(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${n}...`);let{getLauncher:f}=await import("./dist-OVXV2FFO.js"),i=await f(n).launch(r);a(`Launch completed: sessionId=${i.sessionId}`);let u={...i,worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await h(`/api/launch-jobs/${s}/state`,{result:u}).catch(o=>{a(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),u}c(L,"processLaunch");export{g as a,L as b};
@@ -1 +1 @@
1
- import{a as _e}from"./chunk-M7QSC64D.js";import{i as Me}from"./chunk-7LFCZI64.js";import{a as Pe}from"./chunk-CMDOLJ23.js";import{b as pe,i as me,j as ge,k as fe,l as he,m as be,n as $e}from"./chunk-TWPD3ICV.js";import{c as Re}from"./chunk-G7V4ZZZ3.js";import{a as xe,b as Se,c as De,d as Ie,e as se,f as Oe}from"./chunk-LJE5J3EW.js";import{a as re}from"./chunk-AHLVY52I.js";import{d as ke,f as Ce,g as Ee,i as Ae}from"./chunk-YXMAGC53.js";import{a as we}from"./chunk-T7HZZ4DJ.js";import{c as ye}from"./chunk-FADINV4H.js";import{b as ve}from"./chunk-SWSOEYC7.js";import{d as ue,e as ne,f as de}from"./chunk-HT6R6KR3.js";import{e as y,f as te}from"./chunk-GIXHG5FK.js";import{a as g}from"./chunk-ZLLER3HP.js";import{createHash as Ge}from"node:crypto";import{existsSync as Te,readFileSync as Ne,writeFileSync as Xe}from"node:fs";var H=g(t=>Ge("sha256").update(t).digest("hex"),"sha256"),Le=1.3,ae=4,ze=20;function Be(t,o){if(!t.configured||o<=0)return ae;let e=Math.ceil(t.minPairs*Le/o);return Math.min(ze,Math.max(ae,e))}g(Be,"passCapFor");function Qe(t,o=10,e=ae){if(t<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let i=Math.ceil(o*Le),l=Math.min(e,Math.ceil(i/t)),r=l*t;return r<o?{passes:l,expectedPairs:r,feasible:!1,reason:`${t} live case(s) x ${e} passes = ${t*e} pairs at best, below the ${o} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:l,expectedPairs:r,feasible:!0}}g(Qe,"planPasses");var Ve=60,Ye=5,We=g(t=>Array.isArray(t)?t.filter(o=>typeof o=="string"):[],"stringList"),J=g(t=>typeof t=="number"&&Number.isFinite(t)?t:null,"finite");function Ze(t,o,e=Ye){let i=[...t].filter(s=>s.fromContentHash===o).sort((s,c)=>Date.parse(c.createdAt)-Date.parse(s.createdAt)),l=[],r=new Set;for(let s of i){let c=s.toContentHash??s.id;if(r.has(c))continue;r.add(c);let d=s.verdict??null,k=J(d?.delta),M=J(d?.ci?.lower),x=J(d?.ci?.upper),S=J(d?.nWith),L=d?.sufficient===!0&&k!=null&&M!=null&&x!=null&&S!=null?{delta:k,ciLower:M,ciUpper:x,nPairs:S}:null;if(l.push({decision:typeof s.decision=="string"?s.decision:"unknown",applied:s.applied===!0,at:typeof s.createdAt=="string"?s.createdAt:"",rationale:typeof s.proposalRationale=="string"?s.proposalRationale:"",touched:We(s.touchedSections),refusals:We(s.refusals),measured:L}),l.length>=e)break}return l}g(Ze,"summarisePriorDecisions");function et(t,o){let e=o.accumulate??(t.autoEvolveAccumulate===!0||t.autoEvolveAccumulate==="true"),i=o.accumulateTargetPairs??t.autoEvolveAccumulateTarget,l=typeof i=="string"?Number.parseInt(i,10):i,r=typeof l=="number"&&Number.isInteger(l)&&l>0?l:Ve;return{enabled:e,targetPairs:r}}g(et,"readAccumulateConfig");function tt(t){let o=t.accumulateEnabled&&t.pairCount<t.targetPairs;return{apply:t.consented&&!o,peeking:o}}g(tt,"resolveApply");async function Pt(t,o){if(t.restoration)return Pe(t.evalTargetId,t.restoration);let e=g(n=>o?.logger?.info?.(n)??console.log(n),"log"),{evalTargetId:i}=t,l=t.measurement?ye(t):{},r=`[cron_instruction_evolution] ${i}`,s=await y(`/api/eval-targets/${i}`),c=s.metadata??{},d=t.measurement?JSON.stringify([l.engine,l.model,l.graderEngine,l.graderModel,s.type,ve(t.measurement.engine)]):void 0,k=null,M=!1;if(s.name.startsWith("/")&&Te(s.name))try{if(k=Ne(s.name,"utf8"),k!==s.content){let n=await te(`/api/eval-targets/${i}/sync-content`,{content:k});M=n.synced,e(`${r}: target content drifted from disk by ${Math.abs(k.length-s.content.length)} chars \u2014 synced to disk truth (v${n.version}). Prior verdicts against the old text dissolve via content-hash keying.`),s={...s,content:k,version:n.version}}}catch(n){e(`${r}: disk sync failed (${n instanceof Error?n.message:String(n)}) \u2014 measuring the stored snapshot`)}let x=!1;try{x=(await y("/api/settings/evolution-account")).paused}catch(n){e(`${r}: could not read the account switch (${n instanceof Error?n.message:String(n)}) \u2014 pausing to be safe`),x=!0}if(x)return e(`${r}: PAUSED for the whole account (profiles.evolution_paused) \u2014 no model budget spent.`),{skipped:"paused-account"};if(ge(c))return e(`${r}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let S=_e(s);if(S)return e(`${r}: ${S.reason}`),S;let L=t.apply??(c.autoEvolveApply===!0||c.autoEvolveApply==="true"),F=nt(c);if(F==null){if(L)return e(`${r}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};e(`${r}: metadata.immutableSections unset \u2014 measure-only cycle proceeds with [] (nothing protected). Writing still requires setting it explicitly.`),F=[]}let v=(await y(`/api/eval-targets/${i}/evals`)).filter(n=>!n.retiredAt);if(v.length===0)return{skipped:"no-live-cases"};let j=me(c);j.note&&e(`${r}: ${j.note}`);let C=Qe(v.length,j.minPairs,Be(j,v.length));if(!C.feasible)return e(`${r}: cannot reach a sufficient verdict \u2014 ${C.reason}`),{skipped:"cannot-reach-min-n",reason:C.reason};let Fe=fe({liveCases:v.length,passes:C.passes});e(`${r}: budget for this run \u2014 ${$e(Fe)}`);let G=await y(`/api/eval-targets/${i}/judge-calibration`);if(!G.powerCheck.adequate){let n=(G.powerCheck.reasons??[]).join("; ");return e(`${r}: not adequately powered, skipping before spending budget \u2014 ${n}`),{skipped:"not-adequate",reason:n}}let oe=de,je=Date.now()-oe*24*60*60*1e3,X=await y(`/api/eval-targets/${i}/promotions?limit=200`),ie=X.promotions.filter(n=>n.applied&&Date.parse(n.createdAt)>=je).length;if(ie>=ne)return e(`${r}: change budget looks exhausted (${ie}/${ne} applied in ${oe}d), skipping before spending budget`),{skipped:"budget-exhausted"};try{let n=await y("/api/usage/current-limits"),u=Re({limits:n,now:new Date});if(!u.ok)return e(`${r}: deferring before spending budget \u2014 ${u.reason}`),{skipped:"quota-exhausted",reason:u.reason}}catch(n){e(`${r}: quota unknown (${n instanceof Error?n.message:String(n)}) \u2014 proceeding`)}let U=ue();if(!U.green)return e(`${r}: A/A canary is RED \u2014 halting. ${U.failures.join(" | ")}`),{skipped:"canary-red",reason:U.failures.join(" | ")};let z=s.content,D=H(z),f=et(c,t),w=f.enabled?re(X.promotions,D,f.targetPairs,d):null,b,q,$=[],_=0,B=pe,p=w?null:Se(c,D,d);if(p){b=p.content,q="",B=0;try{$=await Ie({evalTargetId:i,candidateContentHash:p.hash,executionKey:d,observedKey:p.observedKey})}catch(n){return e(`${r}: could not rebuild banked pairs (${n instanceof Error?n.message:String(n)})`),{skipped:"resume-read-failed",reason:p.hash}}e(`${r}: resuming interrupted cycle \u2014 ${$.length}/${p.plannedPairs} pair(s) rebuilt from eval_runs, no proposal call spent`)}else if(w){let n=await y(`/api/promotions/${w.promotionId}`);if(H(n.toContent)!==w.candidateContentHash)return e(`${r}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:w.promotionId};b=n.toContent,q=n.proposalRationale??"",$=w.pairs,_=w.runs,B=0,e(`${r}: continuing accumulation ${w.promotionId} \u2014 ${$.length}/${f.targetPairs} pair(s) carried from ${_} prior run(s)`)}else{let n=G.caseDiscrimination?.cases??[],u=[];if(s.name.startsWith("/")){let a=s.name.slice(0,s.name.lastIndexOf("/"));try{let m=await y(`/api/insights/evidence?projectPath=${encodeURIComponent(a)}`);m.analyzedAt&&(u=[...m.friction.map(ee=>`Real-session friction (insights, ${m.analyzedAt.slice(0,10)}): ${ee}`),...m.whatWorks.map(ee=>`Working well in real sessions \u2014 do not break: ${ee}`)],u.length>0&&e(`${r}: proposer sees ${m.friction.length} friction + ${m.whatWorks.length} what-works item(s) from insights`))}catch(m){e(`${r}: insights evidence unavailable (${m instanceof Error?m.message:String(m)}) \u2014 proposing without it`)}}let N=[];try{N=Ze(X.promotions,D)}catch(a){e(`${r}: could not summarise prior decisions (${a instanceof Error?a.message:String(a)}) \u2014 proposing without them`)}N.length>0&&e(`${r}: proposer sees ${N.length} prior decision(s) against this exact body (${N.map(a=>`${a.decision}${a.measured?"/measured":""}`).join(", ")})`);let W=await Me({currentContent:s.content,targetType:s.type,targetName:s.name,immutableSections:F,evidence:{nonDiscriminating:n.filter(a=>!a.discriminating).map(a=>`${a.name??a.assertion??"unnamed"} \u2014 ${a.note}`),weakest:n.filter(a=>a.discriminating&&a.withPassRate<a.withoutPassRate).map(a=>({name:a.name??a.assertion??"unnamed",withPassRate:a.withPassRate,withoutPassRate:a.withoutPassRate})),priorDecisions:N,notes:u}},void 0,t.measurement?(a,m)=>we(t.measurement,a,m):void 0);if(!W.ok)return e(`${r}: no usable proposal \u2014 ${W.reason}`),{skipped:"no-proposal",reason:W.reason};b=W.proposal.candidateContent,q=W.proposal.rationale}let I=p?De({plannedPairs:p.plannedPairs||C.expectedPairs,carriedPairs:$.length,liveCases:v.length}):C.passes;e(`${r}: measuring ${v.length} case(s) x ${I} pass(es) = up to ${v.length*I} pairs, candidate vs prior version`+(p?` (resumed; ${$.length} pair(s) already banked)`:""));let E=[],K=[],Ue=Date.now(),le=0,Q=0;for(let n=1;n<=I;n++){let u=await Ae({cases:v,candidateContent:b,priorVersionContent:z,concurrency:t.concurrency??2,runNumber:n,opts:{targetId:i,targetVersion:s.version??1,iteration:1,timeout:t.timeout??24e4,model:t.model,graderModel:t.graderModel,graderEngine:t.graderEngine,...l,executionKey:d,skipGrading:!1,targetType:s.type,targetName:s.name,candidateContentHash:H(b)},onLog:e});if(E.push(...u.pairs),K.push(...u.results),le+=u.completed,Q+=u.failed,e(`${r}: pass ${n}/${I} \u2014 ${u.pairs.length} pair(s), running total ${E.length}`),u.abortedForQuota){e(`${r}: stopping after pass ${n}/${I} \u2014 ${u.abortedForQuota}. Remaining passes would spend against an exhausted account.`);break}}let O=ke(K),qe=p?.observedKey??w?.observedKey;if(t.measurement&&E.length>0&&(!O||$.length>0&&qe!==O))return{skipped:"incomparable-execution",reason:"Actual actor/judge models or delivery changed; recorded runs are retained, but incompatible evidence cannot be pooled or promoted."};let A=[...$,...E],T=Ce(K),V=E.length>0,h=he({runs:K,plannedPairs:C.expectedPairs,usablePairs:E.length,verdictPairs:V?A.length:E.length,proposalCalls:B,passes:I,liveCases:v.length,wallMs:Date.now()-Ue});if(e(`${r}: ${le} completed, ${Q} failed, ${E.length} usable pair(s) \u2014 spent ~${h.modelCalls} model calls (${h.proposalCalls} proposal + ${h.executorCalls} executor + >=${h.graderCalls} grader) in ${(h.wallMs/6e4).toFixed(1)} min`+(V?`; the ${h.verdictPairs} pair(s) behind this verdict resolve +/-${be(h.mde)} at 80% power`:"")),!V)return{skipped:T.infrastructureFailed?"infrastructure-failure":"no-pairs",reason:T.infrastructureFailed?`${T.infrastructureFailed} run(s) never executed (${T.summary.describe()}) \u2014 the environment failed, not the target`:`${Q} run(s) failed or were ungradeable`,cost:h};let Y=Ee({pairs:A.length,minPairs:10,accounting:T});if(Y.kind==="infrastructure-incomplete")return e(`${r}: not posting a verdict \u2014 ${Y.reason}`),await se({evalTargetId:i,meta:c,blob:Oe({executionKey:d,...O?{observedKey:O}:{},content:b,hash:H(b),priorHash:D,plannedPairs:p?.plannedPairs||C.expectedPairs,now:new Date}),log:e,tag:r}),{skipped:"infrastructure-incomplete",reason:Y.reason,cost:h};f.enabled&&e(`${r}: accumulated ${A.length}/${f.targetPairs} pair(s) over ${_+1} run(s) on one candidate`);let ce=L,{apply:Ke,peeking:Je}=tt({consented:ce,accumulateEnabled:f.enabled,pairCount:A.length,targetPairs:f.targetPairs});ce&&Je&&e(`${r}: interim readout at ${A.length}/${f.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let P=await te(`/api/eval-targets/${i}/promotions`,{candidateContent:b,proposalSource:"llm",proposalRationale:q,pairs:A,canaryGreen:U.green,measuredAgainstContentHash:D,immutableSections:F,apply:Ke,measurementCost:h,...f.enabled?{accumulation:{executionKey:d,...O?{observedKey:O}:{},candidateContentHash:H(b),priorContentHash:D,targetPairs:f.targetPairs,carriedPairs:$.length,runs:_+1}}:{}});e(`${r}: ${P.decision}${P.applied?" (APPLIED)":""} \u2014 ${P.rationale}`+(P.refusals.length>0?` | refusals: ${P.refusals.join("; ")}`:"")),(p||c[xe])&&await se({evalTargetId:i,meta:c,blob:null,log:e,tag:r});let Z=!1,R;if(P.applied&&s.name.startsWith("/"))try{Te(s.name)?Ne(s.name,"utf8")!==z?R="file changed since measurement started \u2014 refusing to clobber; next cycle re-syncs":(Xe(s.name,b,"utf8"),Z=!0):R="file no longer exists on disk",e(Z?`${r}: measured improvement written to ${s.name} (undo: git checkout -- ${s.name})`:`${r}: NOT written to disk \u2014 ${R}`)}catch(n){R=n instanceof Error?n.message:String(n),e(`${r}: disk write-back failed \u2014 ${R}. The eval target is updated; the file is not.`)}return{decision:P.decision,applied:P.applied,nPairs:A.length,promotionId:P.id,cost:h,diskSynced:M,...P.applied?{fileWritten:Z,...R?{fileWriteSkipped:R}:{}}:{},...f.enabled?{carriedPairs:$.length,accumulationRuns:_+1}:{}}}g(Pt,"cronInstructionEvolution");function nt(t){let o=t.immutableSections;return o==null||!Array.isArray(o)?null:o.filter(e=>typeof e=="string")}g(nt,"readImmutableSections");export{Le as a,ae as b,ze as c,Be as d,Qe as e,Ve as f,Ye as g,Ze as h,et as i,tt as j,Pt as k,nt as l};
1
+ import{a as _e}from"./chunk-M7QSC64D.js";import{i as Me}from"./chunk-7LFCZI64.js";import{a as Pe}from"./chunk-ISEUEYSC.js";import{b as pe,i as me,j as ge,k as fe,l as he,m as be,n as $e}from"./chunk-GYKYJJNF.js";import{c as Re}from"./chunk-G7V4ZZZ3.js";import{a as xe,b as Se,c as De,d as Ie,e as se,f as Oe}from"./chunk-LJE5J3EW.js";import{a as re}from"./chunk-AHLVY52I.js";import{d as ke,f as Ce,g as Ee,i as Ae}from"./chunk-YXMAGC53.js";import{a as we}from"./chunk-T7HZZ4DJ.js";import{c as ye}from"./chunk-FADINV4H.js";import{b as ve}from"./chunk-SWSOEYC7.js";import{d as ue,e as ne,f as de}from"./chunk-KFNFLMUR.js";import{e as y,f as te}from"./chunk-GIXHG5FK.js";import{a as g}from"./chunk-ZLLER3HP.js";import{createHash as Ge}from"node:crypto";import{existsSync as Te,readFileSync as Ne,writeFileSync as Xe}from"node:fs";var H=g(t=>Ge("sha256").update(t).digest("hex"),"sha256"),Le=1.3,ae=4,ze=20;function Be(t,o){if(!t.configured||o<=0)return ae;let e=Math.ceil(t.minPairs*Le/o);return Math.min(ze,Math.max(ae,e))}g(Be,"passCapFor");function Qe(t,o=10,e=ae){if(t<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let i=Math.ceil(o*Le),l=Math.min(e,Math.ceil(i/t)),r=l*t;return r<o?{passes:l,expectedPairs:r,feasible:!1,reason:`${t} live case(s) x ${e} passes = ${t*e} pairs at best, below the ${o} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:l,expectedPairs:r,feasible:!0}}g(Qe,"planPasses");var Ve=60,Ye=5,We=g(t=>Array.isArray(t)?t.filter(o=>typeof o=="string"):[],"stringList"),J=g(t=>typeof t=="number"&&Number.isFinite(t)?t:null,"finite");function Ze(t,o,e=Ye){let i=[...t].filter(s=>s.fromContentHash===o).sort((s,c)=>Date.parse(c.createdAt)-Date.parse(s.createdAt)),l=[],r=new Set;for(let s of i){let c=s.toContentHash??s.id;if(r.has(c))continue;r.add(c);let d=s.verdict??null,k=J(d?.delta),M=J(d?.ci?.lower),x=J(d?.ci?.upper),S=J(d?.nWith),L=d?.sufficient===!0&&k!=null&&M!=null&&x!=null&&S!=null?{delta:k,ciLower:M,ciUpper:x,nPairs:S}:null;if(l.push({decision:typeof s.decision=="string"?s.decision:"unknown",applied:s.applied===!0,at:typeof s.createdAt=="string"?s.createdAt:"",rationale:typeof s.proposalRationale=="string"?s.proposalRationale:"",touched:We(s.touchedSections),refusals:We(s.refusals),measured:L}),l.length>=e)break}return l}g(Ze,"summarisePriorDecisions");function et(t,o){let e=o.accumulate??(t.autoEvolveAccumulate===!0||t.autoEvolveAccumulate==="true"),i=o.accumulateTargetPairs??t.autoEvolveAccumulateTarget,l=typeof i=="string"?Number.parseInt(i,10):i,r=typeof l=="number"&&Number.isInteger(l)&&l>0?l:Ve;return{enabled:e,targetPairs:r}}g(et,"readAccumulateConfig");function tt(t){let o=t.accumulateEnabled&&t.pairCount<t.targetPairs;return{apply:t.consented&&!o,peeking:o}}g(tt,"resolveApply");async function Pt(t,o){if(t.restoration)return Pe(t.evalTargetId,t.restoration);let e=g(n=>o?.logger?.info?.(n)??console.log(n),"log"),{evalTargetId:i}=t,l=t.measurement?ye(t):{},r=`[cron_instruction_evolution] ${i}`,s=await y(`/api/eval-targets/${i}`),c=s.metadata??{},d=t.measurement?JSON.stringify([l.engine,l.model,l.graderEngine,l.graderModel,s.type,ve(t.measurement.engine)]):void 0,k=null,M=!1;if(s.name.startsWith("/")&&Te(s.name))try{if(k=Ne(s.name,"utf8"),k!==s.content){let n=await te(`/api/eval-targets/${i}/sync-content`,{content:k});M=n.synced,e(`${r}: target content drifted from disk by ${Math.abs(k.length-s.content.length)} chars \u2014 synced to disk truth (v${n.version}). Prior verdicts against the old text dissolve via content-hash keying.`),s={...s,content:k,version:n.version}}}catch(n){e(`${r}: disk sync failed (${n instanceof Error?n.message:String(n)}) \u2014 measuring the stored snapshot`)}let x=!1;try{x=(await y("/api/settings/evolution-account")).paused}catch(n){e(`${r}: could not read the account switch (${n instanceof Error?n.message:String(n)}) \u2014 pausing to be safe`),x=!0}if(x)return e(`${r}: PAUSED for the whole account (profiles.evolution_paused) \u2014 no model budget spent.`),{skipped:"paused-account"};if(ge(c))return e(`${r}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let S=_e(s);if(S)return e(`${r}: ${S.reason}`),S;let L=t.apply??(c.autoEvolveApply===!0||c.autoEvolveApply==="true"),F=nt(c);if(F==null){if(L)return e(`${r}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};e(`${r}: metadata.immutableSections unset \u2014 measure-only cycle proceeds with [] (nothing protected). Writing still requires setting it explicitly.`),F=[]}let v=(await y(`/api/eval-targets/${i}/evals`)).filter(n=>!n.retiredAt);if(v.length===0)return{skipped:"no-live-cases"};let j=me(c);j.note&&e(`${r}: ${j.note}`);let C=Qe(v.length,j.minPairs,Be(j,v.length));if(!C.feasible)return e(`${r}: cannot reach a sufficient verdict \u2014 ${C.reason}`),{skipped:"cannot-reach-min-n",reason:C.reason};let Fe=fe({liveCases:v.length,passes:C.passes});e(`${r}: budget for this run \u2014 ${$e(Fe)}`);let G=await y(`/api/eval-targets/${i}/judge-calibration`);if(!G.powerCheck.adequate){let n=(G.powerCheck.reasons??[]).join("; ");return e(`${r}: not adequately powered, skipping before spending budget \u2014 ${n}`),{skipped:"not-adequate",reason:n}}let oe=de,je=Date.now()-oe*24*60*60*1e3,X=await y(`/api/eval-targets/${i}/promotions?limit=200`),ie=X.promotions.filter(n=>n.applied&&Date.parse(n.createdAt)>=je).length;if(ie>=ne)return e(`${r}: change budget looks exhausted (${ie}/${ne} applied in ${oe}d), skipping before spending budget`),{skipped:"budget-exhausted"};try{let n=await y("/api/usage/current-limits"),u=Re({limits:n,now:new Date});if(!u.ok)return e(`${r}: deferring before spending budget \u2014 ${u.reason}`),{skipped:"quota-exhausted",reason:u.reason}}catch(n){e(`${r}: quota unknown (${n instanceof Error?n.message:String(n)}) \u2014 proceeding`)}let U=ue();if(!U.green)return e(`${r}: A/A canary is RED \u2014 halting. ${U.failures.join(" | ")}`),{skipped:"canary-red",reason:U.failures.join(" | ")};let z=s.content,D=H(z),f=et(c,t),w=f.enabled?re(X.promotions,D,f.targetPairs,d):null,b,q,$=[],_=0,B=pe,p=w?null:Se(c,D,d);if(p){b=p.content,q="",B=0;try{$=await Ie({evalTargetId:i,candidateContentHash:p.hash,executionKey:d,observedKey:p.observedKey})}catch(n){return e(`${r}: could not rebuild banked pairs (${n instanceof Error?n.message:String(n)})`),{skipped:"resume-read-failed",reason:p.hash}}e(`${r}: resuming interrupted cycle \u2014 ${$.length}/${p.plannedPairs} pair(s) rebuilt from eval_runs, no proposal call spent`)}else if(w){let n=await y(`/api/promotions/${w.promotionId}`);if(H(n.toContent)!==w.candidateContentHash)return e(`${r}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:w.promotionId};b=n.toContent,q=n.proposalRationale??"",$=w.pairs,_=w.runs,B=0,e(`${r}: continuing accumulation ${w.promotionId} \u2014 ${$.length}/${f.targetPairs} pair(s) carried from ${_} prior run(s)`)}else{let n=G.caseDiscrimination?.cases??[],u=[];if(s.name.startsWith("/")){let a=s.name.slice(0,s.name.lastIndexOf("/"));try{let m=await y(`/api/insights/evidence?projectPath=${encodeURIComponent(a)}`);m.analyzedAt&&(u=[...m.friction.map(ee=>`Real-session friction (insights, ${m.analyzedAt.slice(0,10)}): ${ee}`),...m.whatWorks.map(ee=>`Working well in real sessions \u2014 do not break: ${ee}`)],u.length>0&&e(`${r}: proposer sees ${m.friction.length} friction + ${m.whatWorks.length} what-works item(s) from insights`))}catch(m){e(`${r}: insights evidence unavailable (${m instanceof Error?m.message:String(m)}) \u2014 proposing without it`)}}let N=[];try{N=Ze(X.promotions,D)}catch(a){e(`${r}: could not summarise prior decisions (${a instanceof Error?a.message:String(a)}) \u2014 proposing without them`)}N.length>0&&e(`${r}: proposer sees ${N.length} prior decision(s) against this exact body (${N.map(a=>`${a.decision}${a.measured?"/measured":""}`).join(", ")})`);let W=await Me({currentContent:s.content,targetType:s.type,targetName:s.name,immutableSections:F,evidence:{nonDiscriminating:n.filter(a=>!a.discriminating).map(a=>`${a.name??a.assertion??"unnamed"} \u2014 ${a.note}`),weakest:n.filter(a=>a.discriminating&&a.withPassRate<a.withoutPassRate).map(a=>({name:a.name??a.assertion??"unnamed",withPassRate:a.withPassRate,withoutPassRate:a.withoutPassRate})),priorDecisions:N,notes:u}},void 0,t.measurement?(a,m)=>we(t.measurement,a,m):void 0);if(!W.ok)return e(`${r}: no usable proposal \u2014 ${W.reason}`),{skipped:"no-proposal",reason:W.reason};b=W.proposal.candidateContent,q=W.proposal.rationale}let I=p?De({plannedPairs:p.plannedPairs||C.expectedPairs,carriedPairs:$.length,liveCases:v.length}):C.passes;e(`${r}: measuring ${v.length} case(s) x ${I} pass(es) = up to ${v.length*I} pairs, candidate vs prior version`+(p?` (resumed; ${$.length} pair(s) already banked)`:""));let E=[],K=[],Ue=Date.now(),le=0,Q=0;for(let n=1;n<=I;n++){let u=await Ae({cases:v,candidateContent:b,priorVersionContent:z,concurrency:t.concurrency??2,runNumber:n,opts:{targetId:i,targetVersion:s.version??1,iteration:1,timeout:t.timeout??24e4,model:t.model,graderModel:t.graderModel,graderEngine:t.graderEngine,...l,executionKey:d,skipGrading:!1,targetType:s.type,targetName:s.name,candidateContentHash:H(b)},onLog:e});if(E.push(...u.pairs),K.push(...u.results),le+=u.completed,Q+=u.failed,e(`${r}: pass ${n}/${I} \u2014 ${u.pairs.length} pair(s), running total ${E.length}`),u.abortedForQuota){e(`${r}: stopping after pass ${n}/${I} \u2014 ${u.abortedForQuota}. Remaining passes would spend against an exhausted account.`);break}}let O=ke(K),qe=p?.observedKey??w?.observedKey;if(t.measurement&&E.length>0&&(!O||$.length>0&&qe!==O))return{skipped:"incomparable-execution",reason:"Actual actor/judge models or delivery changed; recorded runs are retained, but incompatible evidence cannot be pooled or promoted."};let A=[...$,...E],T=Ce(K),V=E.length>0,h=he({runs:K,plannedPairs:C.expectedPairs,usablePairs:E.length,verdictPairs:V?A.length:E.length,proposalCalls:B,passes:I,liveCases:v.length,wallMs:Date.now()-Ue});if(e(`${r}: ${le} completed, ${Q} failed, ${E.length} usable pair(s) \u2014 spent ~${h.modelCalls} model calls (${h.proposalCalls} proposal + ${h.executorCalls} executor + >=${h.graderCalls} grader) in ${(h.wallMs/6e4).toFixed(1)} min`+(V?`; the ${h.verdictPairs} pair(s) behind this verdict resolve +/-${be(h.mde)} at 80% power`:"")),!V)return{skipped:T.infrastructureFailed?"infrastructure-failure":"no-pairs",reason:T.infrastructureFailed?`${T.infrastructureFailed} run(s) never executed (${T.summary.describe()}) \u2014 the environment failed, not the target`:`${Q} run(s) failed or were ungradeable`,cost:h};let Y=Ee({pairs:A.length,minPairs:10,accounting:T});if(Y.kind==="infrastructure-incomplete")return e(`${r}: not posting a verdict \u2014 ${Y.reason}`),await se({evalTargetId:i,meta:c,blob:Oe({executionKey:d,...O?{observedKey:O}:{},content:b,hash:H(b),priorHash:D,plannedPairs:p?.plannedPairs||C.expectedPairs,now:new Date}),log:e,tag:r}),{skipped:"infrastructure-incomplete",reason:Y.reason,cost:h};f.enabled&&e(`${r}: accumulated ${A.length}/${f.targetPairs} pair(s) over ${_+1} run(s) on one candidate`);let ce=L,{apply:Ke,peeking:Je}=tt({consented:ce,accumulateEnabled:f.enabled,pairCount:A.length,targetPairs:f.targetPairs});ce&&Je&&e(`${r}: interim readout at ${A.length}/${f.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let P=await te(`/api/eval-targets/${i}/promotions`,{candidateContent:b,proposalSource:"llm",proposalRationale:q,pairs:A,canaryGreen:U.green,measuredAgainstContentHash:D,immutableSections:F,apply:Ke,measurementCost:h,...f.enabled?{accumulation:{executionKey:d,...O?{observedKey:O}:{},candidateContentHash:H(b),priorContentHash:D,targetPairs:f.targetPairs,carriedPairs:$.length,runs:_+1}}:{}});e(`${r}: ${P.decision}${P.applied?" (APPLIED)":""} \u2014 ${P.rationale}`+(P.refusals.length>0?` | refusals: ${P.refusals.join("; ")}`:"")),(p||c[xe])&&await se({evalTargetId:i,meta:c,blob:null,log:e,tag:r});let Z=!1,R;if(P.applied&&s.name.startsWith("/"))try{Te(s.name)?Ne(s.name,"utf8")!==z?R="file changed since measurement started \u2014 refusing to clobber; next cycle re-syncs":(Xe(s.name,b,"utf8"),Z=!0):R="file no longer exists on disk",e(Z?`${r}: measured improvement written to ${s.name} (undo: git checkout -- ${s.name})`:`${r}: NOT written to disk \u2014 ${R}`)}catch(n){R=n instanceof Error?n.message:String(n),e(`${r}: disk write-back failed \u2014 ${R}. The eval target is updated; the file is not.`)}return{decision:P.decision,applied:P.applied,nPairs:A.length,promotionId:P.id,cost:h,diskSynced:M,...P.applied?{fileWritten:Z,...R?{fileWriteSkipped:R}:{}}:{},...f.enabled?{carriedPairs:$.length,accumulationRuns:_+1}:{}}}g(Pt,"cronInstructionEvolution");function nt(t){let o=t.immutableSections;return o==null||!Array.isArray(o)?null:o.filter(e=>typeof e=="string")}g(nt,"readImmutableSections");export{Le as a,ae as b,ze as c,Be as d,Qe as e,Ve as f,Ye as g,Ze as h,et as i,tt as j,Pt as k,nt as l};
@@ -1 +1 @@
1
- import{c as q,d as K}from"../chunk-TYFEWLYZ.js";import{b as L,c as W}from"../chunk-V5U3E4BZ.js";import{a as J}from"../chunk-2TJ7Q2OU.js";import{e as O,f as _,g as M}from"../chunk-QWCEZEDO.js";import"../chunk-KKDHD4XA.js";import"../chunk-SZ62CP55.js";import{d as oe,e as ne}from"../chunk-DYET4EYU.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-CMDOLJ23.js";import{i as z,j as Q,k as Z,m as ee,n as te}from"../chunk-TWPD3ICV.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import{a as V}from"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-HT6R6KR3.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import{d as F}from"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import{a as X,b as D,c as Y,g as j,h as G}from"../chunk-QI3FJKGK.js";import{a as B}from"../chunk-WUCACPGC.js";import"../chunk-IZTIYR5Q.js";import"../chunk-WL5ZWQAS.js";import"../chunk-KEVDLLHT.js";import"../chunk-DX6IPDED.js";import"../chunk-3AV3GTMP.js";import{a as U,e as y}from"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import{a as N,g as v,l as x}from"../chunk-PZNWH4VQ.js";import{a as S}from"../chunk-ZLLER3HP.js";import{spawnSync as le}from"node:child_process";import{existsSync as ce,readFileSync as ue}from"node:fs";import{join as se}from"node:path";var I=class h extends B{static{S(this,"Diagnostics")}static description='Diagnose capture / proxy / connectivity problems (e.g. a client-side "502 Bad Gateway")';static examples=["<%= config.bin %> diagnostics"];baseUrl(){return process.env.RULEMETRIC_API_URL??N().apiUrl??U}async checkDirect(){let r=process.env.HTTPS_PROXY,i=process.env.HTTP_PROXY;delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY;let s=new AbortController,l=setTimeout(()=>s.abort(),8e3);try{return(await globalThis.fetch(`${this.baseUrl()}/health`,{signal:s.signal})).ok}catch{return!1}finally{clearTimeout(l),r!==void 0&&(process.env.HTTPS_PROXY=r),i!==void 0&&(process.env.HTTP_PROXY=i)}}configuredProxy(){if(process.env.HTTPS_PROXY)return process.env.HTTPS_PROXY;for(let r of["settings.local.json","settings.json"]){let i=se(process.cwd(),".claude",r);if(ce(i))try{let s=JSON.parse(ue(i,"utf8"));if(s.env?.HTTPS_PROXY)return s.env.HTTPS_PROXY}catch{}}return null}checkThroughProxy(r){let i=le("curl",["-sS","-x",r,"--max-time","8","-o","/dev/null","-w","%{http_code}",`${this.baseUrl()}/health`],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return i.error||typeof i.stdout!="string"?null:i.stdout.trim()==="200"}async run(){await this.parse(h);let r=process.version,i=this.configuredProxy(),s=i!=null,[l,m,d]=await Promise.all([this.checkDirect(),M(O),M(_)]),p=s&&i?this.checkThroughProxy(i):null,t=S((e,c,T)=>{let u=c===null?"\u2013":c?"[OK]":"[!!]";this.log(` ${u} ${e.padEnd(22)} ${T}`)},"line");this.log("RuleMetric diagnostics"),this.log(""),t("Node",!L(r),`${r}${L(r)?" (< 20.11 \u2014 breaks the bundled proxy)":""}`),t("API (direct)",l,`${this.baseUrl()}/health ${l?"reachable":"UNREACHABLE"}`),t("Authenticated",v(),v()?"yes":"no \u2014 run `rulemetric auth login`"),t("Proxy configured",s?!0:null,s?i:"no HTTPS_PROXY set"),s&&(t("Gateway :"+O,m,m?"listening":"NOT listening"),t("mitmproxy :"+_,d,d?"listening":"not listening (gateway should route direct)"),t("API (via proxy)",p,p===null?"inconclusive (curl unavailable)":p?"reachable":"FAILED \u2014 502/blocked through your proxy"));let a=F();t("claude CLI",a.claudeBin!=null,a.claudeBin??"not found \u2014 LLM features (grading, distill) will no-op"),t("codex CLI",a.codexBin!=null?!0:null,a.codexBin?`${a.codexBin}${a.codexConfiguredModel?` (model ${a.codexConfiguredModel})`:""}`:"not found \u2014 optional; enables the cross-vendor reviewer (evals validate-judge)");let o=null;if(v()&&l)try{o=await y("/api/workers/health")}catch{o=null}if(o){let e=o.worker;t("Worker",!!e.active,e.present?e.active?`online (last heartbeat ${e.ageSeconds??"?"}s ago${e.clientVersion?`, v${e.clientVersion}`:""})`:`NOT RUNNING \u2014 last heartbeat ${A(e.ageSeconds)} ago`:"never connected \u2014 no worker has ever reported in");let c=o.worker.engines;if(c!=null){let u=[c.claude&&"claude",c.codex&&"codex"].filter(Boolean);t("LLM engine",u.length>0,u.length>0?`${u.join(" + ")} available to the worker`:"NONE \u2014 the worker found no `claude` and no `codex`. LLM jobs will complete with empty output rather than failing.")}let T=o.pending.reduce((u,E)=>u+E.count,0);if(T>0){let u=o.verdict.stuck.reduce(($,k)=>$+k.count,0),E=o.verdict.unclaimable.reduce(($,k)=>$+k.count,0),R=(o.verdict.engineBlocked??[]).reduce(($,k)=>$+k.count,0);t("Job queue",u===0&&R===0,`${T} pending`+(u>0?` \u2014 ${u} waiting on this worker`:"")+(R>0?` \u2014 ${R} need a local LLM engine`:"")+(E>0?` \u2014 ${E} need a worker with DATABASE_URL`:""))}else t("Job queue",!0,"empty")}else v()&&l&&t("Worker",null,"could not read /workers/health (older API?)");let n=o?.worker.machine;if(n){let e=n.suspends+n.stalls,c=n.lastPause;t("Worker pauses",e===0?!0:null,e===0?`none since ${n.since} \u2014 no sleep or stall seen by the worker`:`${n.suspends} suspend${n.suspends===1?"":"s"}`+(n.stalls>0?` + ${n.stalls} event-loop stall${n.stalls===1?"":"s"}`:"")+` since ${n.since}, ${A(Math.round(n.pausedMs/1e3))} paused total`+(c?`; last: ${c.kind} of ${A(Math.round(c.wallGapMs/1e3))} ending ${c.detectedAt}`:"")+" \u2014 jobs in flight during a suspend lose their lease and are redone on wake")}let f=await q();if(f){t("Machine sleep (pmset)",f.sleeps===0?!0:null,K(f));for(let e of f.recent.slice(-3)){let c=e.seconds!=null?` (${A(e.seconds)})`:"";this.log(` \u21B3 ${e.at.toISOString()} ${e.kind}${c}: ${e.reason.slice(0,80)}`)}}let C=V(process.cwd()),g=await D({configDir:x()}),re=await Y({configDir:x()}),w=` \u2014 ${G(re)}`,b=J(process.cwd()),H=[b.user&&`user hooks (${b.user})`,b.workspace&&`workspace hooks (${b.workspace})`].filter(Boolean),ie={claude_code:`session hooks (+ proxy for instruction linking)${w}`,codex:`worker transcript sync of ~/.codex/sessions \u2014 ${j(g)}`,cursor:`user hooks (~/.cursor/hooks.json)${w}`,copilot_agent:`workspace hooks${w}`,antigravity:H.length>0?`${H.join(" + ")}${w}`:"NOT CAPTURED \u2014 no rulemetric block in ~/.gemini/config/hooks.json or .agents/hooks.json; run `rulemetric hooks install` (user hooks are on by default)"};this.log(""),this.log(" Capture coverage (agents found on this machine):");for(let e of C)this.log(` \u2022 ${e.padEnd(15)} ${ie[e]??"captured"}`);if(C.includes("codex"))if(g.error)this.log(` ! ${g.error}`);else if(g.mode==="allowlist")for(let e of g.roots)this.log(` \u21B3 ${e}`);else g.mode==="all"&&this.log(` \u21B3 scope it with ${se(x(),X)} ({"codex":{"roots":["/path/to/repo"]}}) or RULEMETRIC_CODEX_CAPTURE=off`);o&&!o.worker.active&&C.includes("codex")&&g.mode!=="off"&&this.log(" ! Codex capture runs INSIDE the worker \u2014 it is stopped while the worker is down."),v()&&l&&await this.reportEvolutionSpend();let P=W({nodeVersion:r,directApiOk:l,httpsProxySet:s,gatewayAlive:m,mitmproxyAlive:d,proxyPathOk:p});this.log("");let ae=P.severity==="ok"?"[OK]":P.severity==="warn"?"[!!]":"[XX]";this.log(`${ae} ${P.headline}`);for(let e of P.hints)this.log(` \u2022 ${e}`);if(o&&o.verdict.severity!=="ok"){let e=o.verdict.severity==="warn"?"[!!]":"[XX]";this.log(""),this.log(`${e} ${o.verdict.headline}`);for(let c of o.verdict.hints)this.log(` \u2022 ${c}`)}}async reportEvolutionSpend(){let r;try{r=await y("/api/eval-targets?type=instruction&limit=200")}catch{return}let i=r.filter(s=>{let l=s.metadata??{};return l.autoEvolveEnabled===!0||l.autoEvolveEnabled==="true"});if(i.length!==0){this.log(""),this.log(" Nightly instruction evolution (cron_instruction_evolution, 07:30 UTC):");for(let s of i){let l=s.metadata??{},m=Q(l),d=z(l);if(m){this.log(` \u2022 ${s.name} \u2014 PAUSED (metadata.autoEvolvePaused). Opt-in preserved.`),this.log(" \u21B3 resume: set autoEvolvePaused=false");continue}let p=null;try{p=(await y(`/api/eval-targets/${s.id}/evals`)).filter(a=>!a.retiredAt).length}catch{}if(this.log(` \u2022 ${s.name}`),p!=null){let t=ne(p,d.minPairs,oe(d,p));if(!t.feasible)this.log(` \u21B3 cannot reach a verdict \u2014 ${t.reason}`);else{let a=Z({liveCases:p,passes:t.passes});this.log(` \u21B3 each night: ${te(a)}`)}}this.log(` \u21B3 pairs budget ${d.minPairs}`+(d.configured?" (metadata.autoEvolvePairs)":" (default)")+` \xB7 writes ${l.autoEvolveApply===!0||l.autoEvolveApply==="true"?"ENABLED":"off (dry run)"}`),d.note&&this.log(` ! ${d.note}`);try{let t=await y(`/api/eval-targets/${s.id}/promotions?limit=1`),a=t.promotions[0];if(a){let n=a.gates?.cost,f=n?.modelCalls?`${n.modelCalls} model calls, ${n.usablePairs??"?"} usable pair(s)`+(n.mde!=null?`, resolved +/-${ee(n.mde)}`:"")+(n.wallMs?`, ${(n.wallMs/6e4).toFixed(0)} min`:""):"cost not recorded (decision predates cost tracking)";this.log(` \u21B3 last run ${new Date(a.createdAt).toISOString().slice(0,10)}: ${a.decision}${a.applied?" (APPLIED)":""} \u2014 ${f}`)}let o=t.counts??{};this.log(` \u21B3 lifetime: ${o.promote??0} promote / ${o.revert??0} revert / ${o.refuse??0} refuse`)}catch{}}this.log(" \u21B3 pause the spend: metadata.autoEvolvePaused=true (keeps the opt-in)")}}};function A(h){if(h===null)return"never";if(h<90)return`${Math.round(h)}s`;let r=Math.round(h/60);return r<90?`${r}m`:`${Math.round(r/60)}h`}S(A,"formatAge");export{I as default};
1
+ import{c as q,d as K}from"../chunk-TYFEWLYZ.js";import{b as L,c as W}from"../chunk-V5U3E4BZ.js";import{a as J}from"../chunk-2TJ7Q2OU.js";import{e as O,f as _,g as M}from"../chunk-QWCEZEDO.js";import"../chunk-KKDHD4XA.js";import"../chunk-SZ62CP55.js";import{d as oe,e as ne}from"../chunk-ZMVTSYD4.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-ISEUEYSC.js";import{i as z,j as Q,k as Z,m as ee,n as te}from"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import{a as V}from"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import{d as F}from"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import{a as X,b as D,c as Y,g as j,h as G}from"../chunk-QI3FJKGK.js";import{a as B}from"../chunk-WUCACPGC.js";import"../chunk-IZTIYR5Q.js";import"../chunk-WL5ZWQAS.js";import"../chunk-KEVDLLHT.js";import"../chunk-DX6IPDED.js";import"../chunk-3AV3GTMP.js";import{a as U,e as y}from"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import{a as N,g as v,l as x}from"../chunk-PZNWH4VQ.js";import{a as S}from"../chunk-ZLLER3HP.js";import{spawnSync as le}from"node:child_process";import{existsSync as ce,readFileSync as ue}from"node:fs";import{join as se}from"node:path";var I=class h extends B{static{S(this,"Diagnostics")}static description='Diagnose capture / proxy / connectivity problems (e.g. a client-side "502 Bad Gateway")';static examples=["<%= config.bin %> diagnostics"];baseUrl(){return process.env.RULEMETRIC_API_URL??N().apiUrl??U}async checkDirect(){let r=process.env.HTTPS_PROXY,i=process.env.HTTP_PROXY;delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY;let s=new AbortController,l=setTimeout(()=>s.abort(),8e3);try{return(await globalThis.fetch(`${this.baseUrl()}/health`,{signal:s.signal})).ok}catch{return!1}finally{clearTimeout(l),r!==void 0&&(process.env.HTTPS_PROXY=r),i!==void 0&&(process.env.HTTP_PROXY=i)}}configuredProxy(){if(process.env.HTTPS_PROXY)return process.env.HTTPS_PROXY;for(let r of["settings.local.json","settings.json"]){let i=se(process.cwd(),".claude",r);if(ce(i))try{let s=JSON.parse(ue(i,"utf8"));if(s.env?.HTTPS_PROXY)return s.env.HTTPS_PROXY}catch{}}return null}checkThroughProxy(r){let i=le("curl",["-sS","-x",r,"--max-time","8","-o","/dev/null","-w","%{http_code}",`${this.baseUrl()}/health`],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return i.error||typeof i.stdout!="string"?null:i.stdout.trim()==="200"}async run(){await this.parse(h);let r=process.version,i=this.configuredProxy(),s=i!=null,[l,m,d]=await Promise.all([this.checkDirect(),M(O),M(_)]),p=s&&i?this.checkThroughProxy(i):null,t=S((e,c,T)=>{let u=c===null?"\u2013":c?"[OK]":"[!!]";this.log(` ${u} ${e.padEnd(22)} ${T}`)},"line");this.log("RuleMetric diagnostics"),this.log(""),t("Node",!L(r),`${r}${L(r)?" (< 20.11 \u2014 breaks the bundled proxy)":""}`),t("API (direct)",l,`${this.baseUrl()}/health ${l?"reachable":"UNREACHABLE"}`),t("Authenticated",v(),v()?"yes":"no \u2014 run `rulemetric auth login`"),t("Proxy configured",s?!0:null,s?i:"no HTTPS_PROXY set"),s&&(t("Gateway :"+O,m,m?"listening":"NOT listening"),t("mitmproxy :"+_,d,d?"listening":"not listening (gateway should route direct)"),t("API (via proxy)",p,p===null?"inconclusive (curl unavailable)":p?"reachable":"FAILED \u2014 502/blocked through your proxy"));let a=F();t("claude CLI",a.claudeBin!=null,a.claudeBin??"not found \u2014 LLM features (grading, distill) will no-op"),t("codex CLI",a.codexBin!=null?!0:null,a.codexBin?`${a.codexBin}${a.codexConfiguredModel?` (model ${a.codexConfiguredModel})`:""}`:"not found \u2014 optional; enables the cross-vendor reviewer (evals validate-judge)");let o=null;if(v()&&l)try{o=await y("/api/workers/health")}catch{o=null}if(o){let e=o.worker;t("Worker",!!e.active,e.present?e.active?`online (last heartbeat ${e.ageSeconds??"?"}s ago${e.clientVersion?`, v${e.clientVersion}`:""})`:`NOT RUNNING \u2014 last heartbeat ${A(e.ageSeconds)} ago`:"never connected \u2014 no worker has ever reported in");let c=o.worker.engines;if(c!=null){let u=[c.claude&&"claude",c.codex&&"codex"].filter(Boolean);t("LLM engine",u.length>0,u.length>0?`${u.join(" + ")} available to the worker`:"NONE \u2014 the worker found no `claude` and no `codex`. LLM jobs will complete with empty output rather than failing.")}let T=o.pending.reduce((u,E)=>u+E.count,0);if(T>0){let u=o.verdict.stuck.reduce(($,k)=>$+k.count,0),E=o.verdict.unclaimable.reduce(($,k)=>$+k.count,0),R=(o.verdict.engineBlocked??[]).reduce(($,k)=>$+k.count,0);t("Job queue",u===0&&R===0,`${T} pending`+(u>0?` \u2014 ${u} waiting on this worker`:"")+(R>0?` \u2014 ${R} need a local LLM engine`:"")+(E>0?` \u2014 ${E} need a worker with DATABASE_URL`:""))}else t("Job queue",!0,"empty")}else v()&&l&&t("Worker",null,"could not read /workers/health (older API?)");let n=o?.worker.machine;if(n){let e=n.suspends+n.stalls,c=n.lastPause;t("Worker pauses",e===0?!0:null,e===0?`none since ${n.since} \u2014 no sleep or stall seen by the worker`:`${n.suspends} suspend${n.suspends===1?"":"s"}`+(n.stalls>0?` + ${n.stalls} event-loop stall${n.stalls===1?"":"s"}`:"")+` since ${n.since}, ${A(Math.round(n.pausedMs/1e3))} paused total`+(c?`; last: ${c.kind} of ${A(Math.round(c.wallGapMs/1e3))} ending ${c.detectedAt}`:"")+" \u2014 jobs in flight during a suspend lose their lease and are redone on wake")}let f=await q();if(f){t("Machine sleep (pmset)",f.sleeps===0?!0:null,K(f));for(let e of f.recent.slice(-3)){let c=e.seconds!=null?` (${A(e.seconds)})`:"";this.log(` \u21B3 ${e.at.toISOString()} ${e.kind}${c}: ${e.reason.slice(0,80)}`)}}let C=V(process.cwd()),g=await D({configDir:x()}),re=await Y({configDir:x()}),w=` \u2014 ${G(re)}`,b=J(process.cwd()),H=[b.user&&`user hooks (${b.user})`,b.workspace&&`workspace hooks (${b.workspace})`].filter(Boolean),ie={claude_code:`session hooks (+ proxy for instruction linking)${w}`,codex:`worker transcript sync of ~/.codex/sessions \u2014 ${j(g)}`,cursor:`user hooks (~/.cursor/hooks.json)${w}`,copilot_agent:`workspace hooks${w}`,antigravity:H.length>0?`${H.join(" + ")}${w}`:"NOT CAPTURED \u2014 no rulemetric block in ~/.gemini/config/hooks.json or .agents/hooks.json; run `rulemetric hooks install` (user hooks are on by default)"};this.log(""),this.log(" Capture coverage (agents found on this machine):");for(let e of C)this.log(` \u2022 ${e.padEnd(15)} ${ie[e]??"captured"}`);if(C.includes("codex"))if(g.error)this.log(` ! ${g.error}`);else if(g.mode==="allowlist")for(let e of g.roots)this.log(` \u21B3 ${e}`);else g.mode==="all"&&this.log(` \u21B3 scope it with ${se(x(),X)} ({"codex":{"roots":["/path/to/repo"]}}) or RULEMETRIC_CODEX_CAPTURE=off`);o&&!o.worker.active&&C.includes("codex")&&g.mode!=="off"&&this.log(" ! Codex capture runs INSIDE the worker \u2014 it is stopped while the worker is down."),v()&&l&&await this.reportEvolutionSpend();let P=W({nodeVersion:r,directApiOk:l,httpsProxySet:s,gatewayAlive:m,mitmproxyAlive:d,proxyPathOk:p});this.log("");let ae=P.severity==="ok"?"[OK]":P.severity==="warn"?"[!!]":"[XX]";this.log(`${ae} ${P.headline}`);for(let e of P.hints)this.log(` \u2022 ${e}`);if(o&&o.verdict.severity!=="ok"){let e=o.verdict.severity==="warn"?"[!!]":"[XX]";this.log(""),this.log(`${e} ${o.verdict.headline}`);for(let c of o.verdict.hints)this.log(` \u2022 ${c}`)}}async reportEvolutionSpend(){let r;try{r=await y("/api/eval-targets?type=instruction&limit=200")}catch{return}let i=r.filter(s=>{let l=s.metadata??{};return l.autoEvolveEnabled===!0||l.autoEvolveEnabled==="true"});if(i.length!==0){this.log(""),this.log(" Nightly instruction evolution (cron_instruction_evolution, 07:30 UTC):");for(let s of i){let l=s.metadata??{},m=Q(l),d=z(l);if(m){this.log(` \u2022 ${s.name} \u2014 PAUSED (metadata.autoEvolvePaused). Opt-in preserved.`),this.log(" \u21B3 resume: set autoEvolvePaused=false");continue}let p=null;try{p=(await y(`/api/eval-targets/${s.id}/evals`)).filter(a=>!a.retiredAt).length}catch{}if(this.log(` \u2022 ${s.name}`),p!=null){let t=ne(p,d.minPairs,oe(d,p));if(!t.feasible)this.log(` \u21B3 cannot reach a verdict \u2014 ${t.reason}`);else{let a=Z({liveCases:p,passes:t.passes});this.log(` \u21B3 each night: ${te(a)}`)}}this.log(` \u21B3 pairs budget ${d.minPairs}`+(d.configured?" (metadata.autoEvolvePairs)":" (default)")+` \xB7 writes ${l.autoEvolveApply===!0||l.autoEvolveApply==="true"?"ENABLED":"off (dry run)"}`),d.note&&this.log(` ! ${d.note}`);try{let t=await y(`/api/eval-targets/${s.id}/promotions?limit=1`),a=t.promotions[0];if(a){let n=a.gates?.cost,f=n?.modelCalls?`${n.modelCalls} model calls, ${n.usablePairs??"?"} usable pair(s)`+(n.mde!=null?`, resolved +/-${ee(n.mde)}`:"")+(n.wallMs?`, ${(n.wallMs/6e4).toFixed(0)} min`:""):"cost not recorded (decision predates cost tracking)";this.log(` \u21B3 last run ${new Date(a.createdAt).toISOString().slice(0,10)}: ${a.decision}${a.applied?" (APPLIED)":""} \u2014 ${f}`)}let o=t.counts??{};this.log(` \u21B3 lifetime: ${o.promote??0} promote / ${o.revert??0} revert / ${o.refuse??0} refuse`)}catch{}}this.log(" \u21B3 pause the spend: metadata.autoEvolvePaused=true (keeps the opt-in)")}}};function A(h){if(h===null)return"never";if(h<90)return`${Math.round(h)}s`;let r=Math.round(h/60);return r<90?`${r}m`:`${Math.round(r/60)}h`}S(A,"formatAge");export{I as default};
@@ -1,3 +1,3 @@
1
- import{a as G,b as V,c as j,d as q}from"../../chunk-J4W6GNCF.js";import{b as M}from"../../chunk-GH4EZK2O.js";import{c as g}from"../../chunk-V576KKH6.js";import{e as D}from"../../chunk-N2PP2A7M.js";import"../../chunk-XXPWPKTD.js";import"../../chunk-5TM7AOH2.js";import"../../chunk-IEQDLURA.js";import"../../chunk-KINIFUZQ.js";import"../../chunk-5PMTNNA6.js";import"../../chunk-ZYGBABMZ.js";import"../../chunk-IFIWDL7G.js";import"../../chunk-FZMO7XSN.js";import"../../chunk-LLXC5SRC.js";import"../../chunk-4DA6L7KL.js";import"../../chunk-JU5ZNXPK.js";import"../../chunk-WQFR2LOY.js";import"../../chunk-Q7IDLOSP.js";import"../../chunk-XIOYV5A7.js";import"../../chunk-ISFPPDDB.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-JSGXFD42.js";import"../../chunk-CZBO3A6B.js";import"../../chunk-JUBXWTJA.js";import"../../chunk-W6MMJRFZ.js";import"../../chunk-PZS55PW2.js";import"../../chunk-QPAOX7P2.js";import"../../chunk-3ZHVP3KE.js";import"../../chunk-CIKQXFQ2.js";import"../../chunk-HOQPVOMF.js";import"../../chunk-5Z6XXOJL.js";import"../../chunk-MOJY6S5J.js";import"../../chunk-CYCH2EQC.js";import"../../chunk-CVPAKEEZ.js";import"../../chunk-VUNJGZPP.js";import"../../chunk-L562Y4RN.js";import"../../chunk-GLBWNB2N.js";import"../../chunk-CQD2R3BA.js";import"../../chunk-3UKZJAFS.js";import"../../chunk-77FH6UZP.js";import"../../chunk-KE5K3F7J.js";import"../../chunk-PIVEJTNF.js";import"../../chunk-KR36ZDGN.js";import"../../chunk-JOXTWLLK.js";import"../../chunk-GIRPEMTW.js";import"../../chunk-SIGZEQ3K.js";import"../../chunk-DQYYHX6K.js";import"../../chunk-RE7RAZQ5.js";import"../../chunk-6T6YFPBW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-DANMUHNW.js";import"../../chunk-T75KAEJO.js";import"../../chunk-FXQS7AEZ.js";import"../../chunk-LJRE3LZ2.js";import"../../chunk-EJY5GK6A.js";import"../../chunk-74KE4VOX.js";import"../../chunk-HXOQUYG3.js";import"../../chunk-3H44B6PB.js";import"../../chunk-6UEFCMR2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-MHVHGKDK.js";import"../../chunk-RBSEE2Z6.js";import"../../chunk-PDXHRF4E.js";import"../../chunk-DYET4EYU.js";import"../../chunk-M7QSC64D.js";import"../../chunk-7LFCZI64.js";import"../../chunk-CMDOLJ23.js";import"../../chunk-TWPD3ICV.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-XCH4HPEZ.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-HT6R6KR3.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{b as A,d as C,g as S,i as E,j as L,k as $}from"../../chunk-QI3FJKGK.js";import{a as O}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as m}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import{e as I,l as p}from"../../chunk-PZNWH4VQ.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as de,context as me}from"@opentelemetry/api";import{NodeSDK as W}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as J,ConsoleSpanExporter as z,SimpleSpanProcessor as Q}from"@opentelemetry/sdk-trace-node";import{Resource as Z}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as ee,ATTR_SERVICE_VERSION as te}from"@opentelemetry/semantic-conventions";function F(r){if(!r)return{};let n={};for(let o of r.split(",")){let s=o.indexOf("=");if(s===-1)continue;let i=o.slice(0,s).trim(),c=o.slice(s+1).trim();i&&(n[i]=c)}return n}e(F,"parseOtlpHeaders");var u=null;function T(){return process.env.TELEMETRY_ENABLED!=="false"}e(T,"isTelemetryEnabled");function x(r){if(!T()||u!==null)return"off";let n=new Z({[ee]:r.serviceName,[te]:r.serviceVersion??"0.1.0"}),o=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,s,i;if(o){let c=F(process.env.OTEL_EXPORTER_OTLP_HEADERS),l=new Y({url:`${o}/v1/traces`,headers:c});i=new J(l),s="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")i=void 0,s="silent";else{let c=new z;i=new Q(c),s="console"}return u=new W({resource:n,spanProcessors:i?[i]:[]}),u.start(),s}e(x,"initTelemetry");async function h(){u&&(await u.shutdown(),u=null)}e(h,"shutdownTelemetry");import{SpanKind as Pe,SpanStatusCode as Re}from"@opentelemetry/api";import{trace as Ie,context as Oe}from"@opentelemetry/api";import*as f from"@sentry/node";var v=!1;function w(r){if(v)return!1;let n=process.env.SENTRY_DSN;return n?(f.init({dsn:n,serverName:r.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),v=!0,!0):!1}e(w,"initSentry");async function y(r){v&&await f.flush(r)}e(y,"flushSentry");import{existsSync as ne,mkdirSync as oe,readFileSync as k,unlinkSync as X,writeFileSync as U}from"node:fs";import{dirname as se,join as R}from"node:path";import{execFileSync as ie}from"node:child_process";var a=R(p(),"evals-agent.lock");function ce(r){try{return process.kill(r,0),!0}catch(n){return n.code==="EPERM"}}e(ce,"pidAlive");function ae(r){if(!ce(r))return!1;try{let n=ie("ps",["-p",String(r),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(n)}catch{return!0}}e(ae,"isLiveAgent");function le(){try{oe(se(a),{recursive:!0})}catch{}for(let r=0;r<2;r++)try{return U(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(n){if(n.code!=="EEXIST")throw n;let o=0;try{o=Number(k(a,"utf-8").trim())}catch{}if(o&&o!==process.pid&&ae(o))return{ok:!1,holder:o};try{X(a)}catch{}}try{U(a,String(process.pid))}catch{}return{ok:!0}}e(le,"acquireAgentLock");function P(){try{ne(a)&&Number(k(a,"utf-8").trim())===process.pid&&X(a)}catch{}}e(P,"releaseAgentLock");var N=class r extends O{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(r),this.requireAuth();let n=le();if(!n.ok){this.log(`Another rulemetric evals agent is already running (pid ${n.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",w({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let s=x({serviceName:"rulemetric-agent"});s==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):s==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!I()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
1
+ import{a as G,b as V,c as j,d as q}from"../../chunk-J4W6GNCF.js";import{b as M}from"../../chunk-GH4EZK2O.js";import{c as g}from"../../chunk-JIW2PCHU.js";import{e as D}from"../../chunk-WVNTUKED.js";import"../../chunk-XXPWPKTD.js";import"../../chunk-5TM7AOH2.js";import"../../chunk-IEQDLURA.js";import"../../chunk-KINIFUZQ.js";import"../../chunk-2U6PAYCD.js";import"../../chunk-ZYGBABMZ.js";import"../../chunk-IFIWDL7G.js";import"../../chunk-FZMO7XSN.js";import"../../chunk-LLXC5SRC.js";import"../../chunk-UNVURR4E.js";import"../../chunk-JU5ZNXPK.js";import"../../chunk-WQFR2LOY.js";import"../../chunk-Q7IDLOSP.js";import"../../chunk-X3BBFDRD.js";import"../../chunk-D5XLTSRV.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-TQM7MF5C.js";import"../../chunk-CZBO3A6B.js";import"../../chunk-5GFEEYHM.js";import"../../chunk-W6MMJRFZ.js";import"../../chunk-PZS55PW2.js";import"../../chunk-QPAOX7P2.js";import"../../chunk-3ZHVP3KE.js";import"../../chunk-CIKQXFQ2.js";import"../../chunk-HOQPVOMF.js";import"../../chunk-5Z6XXOJL.js";import"../../chunk-MOJY6S5J.js";import"../../chunk-CYCH2EQC.js";import"../../chunk-CVPAKEEZ.js";import"../../chunk-VUNJGZPP.js";import"../../chunk-L562Y4RN.js";import"../../chunk-GLBWNB2N.js";import"../../chunk-CQD2R3BA.js";import"../../chunk-3UKZJAFS.js";import"../../chunk-77FH6UZP.js";import"../../chunk-KE5K3F7J.js";import"../../chunk-PIVEJTNF.js";import"../../chunk-KR36ZDGN.js";import"../../chunk-JOXTWLLK.js";import"../../chunk-GIRPEMTW.js";import"../../chunk-SIGZEQ3K.js";import"../../chunk-DQYYHX6K.js";import"../../chunk-RE7RAZQ5.js";import"../../chunk-6T6YFPBW.js";import"../../chunk-ISYU5BMU.js";import"../../chunk-DANMUHNW.js";import"../../chunk-GJHFIQVO.js";import"../../chunk-FXQS7AEZ.js";import"../../chunk-LJRE3LZ2.js";import"../../chunk-EE4TZAZI.js";import"../../chunk-OAETRNTE.js";import"../../chunk-HXOQUYG3.js";import"../../chunk-3H44B6PB.js";import"../../chunk-6UEFCMR2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-MHVHGKDK.js";import"../../chunk-RBSEE2Z6.js";import"../../chunk-PDXHRF4E.js";import"../../chunk-ZMVTSYD4.js";import"../../chunk-M7QSC64D.js";import"../../chunk-7LFCZI64.js";import"../../chunk-ISEUEYSC.js";import"../../chunk-GYKYJJNF.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-XCH4HPEZ.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-OZQNSELV.js";import"../../chunk-HFGO5762.js";import"../../chunk-VS5ROGDP.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-KFNFLMUR.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{b as A,d as C,g as S,i as E,j as L,k as $}from"../../chunk-QI3FJKGK.js";import{a as O}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{f as m}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import{e as I,l as p}from"../../chunk-PZNWH4VQ.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as de,context as me}from"@opentelemetry/api";import{NodeSDK as W}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as Y}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as J,ConsoleSpanExporter as z,SimpleSpanProcessor as Q}from"@opentelemetry/sdk-trace-node";import{Resource as Z}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as ee,ATTR_SERVICE_VERSION as te}from"@opentelemetry/semantic-conventions";function F(r){if(!r)return{};let n={};for(let o of r.split(",")){let s=o.indexOf("=");if(s===-1)continue;let i=o.slice(0,s).trim(),c=o.slice(s+1).trim();i&&(n[i]=c)}return n}e(F,"parseOtlpHeaders");var u=null;function T(){return process.env.TELEMETRY_ENABLED!=="false"}e(T,"isTelemetryEnabled");function x(r){if(!T()||u!==null)return"off";let n=new Z({[ee]:r.serviceName,[te]:r.serviceVersion??"0.1.0"}),o=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,s,i;if(o){let c=F(process.env.OTEL_EXPORTER_OTLP_HEADERS),l=new Y({url:`${o}/v1/traces`,headers:c});i=new J(l),s="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")i=void 0,s="silent";else{let c=new z;i=new Q(c),s="console"}return u=new W({resource:n,spanProcessors:i?[i]:[]}),u.start(),s}e(x,"initTelemetry");async function h(){u&&(await u.shutdown(),u=null)}e(h,"shutdownTelemetry");import{SpanKind as Pe,SpanStatusCode as Re}from"@opentelemetry/api";import{trace as Ie,context as Oe}from"@opentelemetry/api";import*as f from"@sentry/node";var v=!1;function w(r){if(v)return!1;let n=process.env.SENTRY_DSN;return n?(f.init({dsn:n,serverName:r.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),v=!0,!0):!1}e(w,"initSentry");async function y(r){v&&await f.flush(r)}e(y,"flushSentry");import{existsSync as ne,mkdirSync as oe,readFileSync as k,unlinkSync as X,writeFileSync as U}from"node:fs";import{dirname as se,join as R}from"node:path";import{execFileSync as ie}from"node:child_process";var a=R(p(),"evals-agent.lock");function ce(r){try{return process.kill(r,0),!0}catch(n){return n.code==="EPERM"}}e(ce,"pidAlive");function ae(r){if(!ce(r))return!1;try{let n=ie("ps",["-p",String(r),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(n)}catch{return!0}}e(ae,"isLiveAgent");function le(){try{oe(se(a),{recursive:!0})}catch{}for(let r=0;r<2;r++)try{return U(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(n){if(n.code!=="EEXIST")throw n;let o=0;try{o=Number(k(a,"utf-8").trim())}catch{}if(o&&o!==process.pid&&ae(o))return{ok:!1,holder:o};try{X(a)}catch{}}try{U(a,String(process.pid))}catch{}return{ok:!0}}e(le,"acquireAgentLock");function P(){try{ne(a)&&Number(k(a,"utf-8").trim())===process.pid&&X(a)}catch{}}e(P,"releaseAgentLock");var N=class r extends O{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(r),this.requireAuth();let n=le();if(!n.ok){this.log(`Another rulemetric evals agent is already running (pid ${n.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",w({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let s=x({serviceName:"rulemetric-agent"});s==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):s==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!I()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
2
2
  `);let c=new AbortController,l=await A({configDir:p()});if(this.log(`[transcript-sync] Codex capture: ${S(l)}`),l.error)this.log(`[transcript-sync] WARNING: ${l.error}`);else if(l.mode==="allowlist")for(let t of l.roots)this.log(`[transcript-sync] \u2022 ${t}`);let d=await C({configDir:p()});if(this.log(`[transcript-sync] Pi capture: ${E(d)}`),d.error)this.log(`[transcript-sync] WARNING: ${d.error}`);else if(d.mode==="allowlist")for(let t of d.roots)this.log(`[transcript-sync] \u2022 ${t}`);let B=new M({postSnapshot:e((t,K)=>m(`/api/sessions/${t}/context-snapshots`,K),"postSnapshot"),linkInstructions:e(t=>m("/api/sessions/link-instructions",{sessionId:t}),"linkInstructions"),log:e(t=>this.log(`[transcript-sync] ${t}`),"log")}),H=new G({providers:[V(void 0,void 0,L({configDir:p(),onChange:e(t=>this.log(`[transcript-sync] Codex capture changed: ${S(t)}`),"onChange")})),j(void 0,void 0,$({configDir:p(),onChange:e(t=>this.log(`[transcript-sync] Pi capture changed: ${E(t)}`),"onChange")}))],statePath:R(p(),"transcript-sync-state.json"),importTranscript:e(t=>m("/api/sessions/import",t),"importTranscript"),emitInstructions:e(t=>B.emit(t),"emitInstructions"),log:e(t=>this.log(`[transcript-sync] ${t}`),"log")});q(H,{signal:c.signal,log:e(t=>this.log(`[transcript-sync] ${t}`),"log")});let _=e(async t=>{this.log(`
3
3
  [${t}] shutting down agent...`),c.abort(),await Promise.allSettled([y(2e3),h(),g()]),P(),process.exit(0)},"shutdown");process.on("SIGINT",()=>{_("SIGINT")}),process.on("SIGTERM",()=>{_("SIGTERM")});let b=!1;try{await D({signal:c.signal,log:e(t=>this.log(t),"log"),version:this.config.version,readInstalledVersion:e(()=>{try{return JSON.parse(k(R(this.config.root,"package.json"),"utf-8")).version??null}catch{return null}},"readInstalledVersion"),onVersionDrift:e(()=>{b=!0},"onVersionDrift")}),b&&(this.log("[upgrade] Installed CLI version changed \u2014 restarting worker onto the new code."),await Promise.allSettled([y(2e3),h(),g()]),P(),process.exit(1))}finally{P(),await g()}}};export{N as default};
@@ -1,4 +1,4 @@
1
- import{b as h,c as f}from"../../chunk-QFTAU33Y.js";import"../../chunk-HT6R6KR3.js";import{a as m}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as c}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as u}from"../../chunk-ZLLER3HP.js";import{Args as p,Flags as v}from"@oclif/core";var d=class b extends m{static{u(this,"EvalBenchmarkCommand")}static description="Aggregate eval runs into a benchmark for a target";static examples=["<%= config.bin %> evals benchmark <target-id>","<%= config.bin %> evals benchmark <target-id> --iteration 2"];static args={targetId:p.string({description:"Eval target ID",required:!0})};static flags={iteration:v.integer({description:"Filter runs by iteration",default:1})};async run(){let{args:o,flags:l}=await this.parse(b);this.requireAuth();let g=await c(`/api/eval-targets/${o.targetId}`);this.log(`Aggregating benchmark for "${g.name}" v${g.version}, iteration ${l.iteration}`);let a=await h(o.targetId,l.iteration);a.totalRuns===0&&this.error("No completed runs found. Run evals first with `rulemetric evals run`."),this.log(`
1
+ import{b as h,c as f}from"../../chunk-7LE2W3WP.js";import"../../chunk-KFNFLMUR.js";import{a as m}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as c}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as u}from"../../chunk-ZLLER3HP.js";import{Args as p,Flags as v}from"@oclif/core";var d=class b extends m{static{u(this,"EvalBenchmarkCommand")}static description="Aggregate eval runs into a benchmark for a target";static examples=["<%= config.bin %> evals benchmark <target-id>","<%= config.bin %> evals benchmark <target-id> --iteration 2"];static args={targetId:p.string({description:"Eval target ID",required:!0})};static flags={iteration:v.integer({description:"Filter runs by iteration",default:1})};async run(){let{args:o,flags:l}=await this.parse(b);this.requireAuth();let g=await c(`/api/eval-targets/${o.targetId}`);this.log(`Aggregating benchmark for "${g.name}" v${g.version}, iteration ${l.iteration}`);let a=await h(o.targetId,l.iteration);a.totalRuns===0&&this.error("No completed runs found. Run evals first with `rulemetric evals run`."),this.log(`
2
2
  Aggregated ${a.totalRuns} runs
3
3
  `);for(let[e,n]of Object.entries(a.runSummary)){this.log(`${e}:`);for(let[r,i]of Object.entries(n)){let s=i;this.log(` ${r}: mean=${s.mean} stddev=${s.stddev} [${s.min}, ${s.max}]`)}}let t=a.verdict;if(t)if(this.log(`
4
4
  Verdict (${t.mode}, baseline=${t.baseline}):`),!t.sufficient)this.log(` ${t.insufficientReason??"insufficient data"} \u2014 no effect claimed`);else{let e=t.delta>=0?"+":"";this.log(` pass-rate delta: ${e}${(t.delta*100).toFixed(0)}% (n=${t.nWith} paired)`),this.log(` 95% CI: ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%`),t.pValue!=null&&this.log(` McNemar p: ${t.pValue.toFixed(4)}`),this.log(` significant: ${t.significant?"YES":"no"}`)}if(a.notes.length>0){this.log(`
@@ -1,4 +1,4 @@
1
- import{b as P,c as C}from"../../chunk-AFEJYDUK.js";import{a as V}from"../../chunk-PDXHRF4E.js";import{a as N}from"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-HT6R6KR3.js";import{f as F}from"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{a as A}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as w,f as m,g as S}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as k}from"../../chunk-ZLLER3HP.js";import{createInterface as _}from"node:readline/promises";import{Args as q,Flags as g}from"@oclif/core";var $=class O extends A{static{k(this,"EvalOptimizeCommand")}static description="Iteratively optimize eval target content using eval results as feedback";static examples=["<%= config.bin %> evals optimize <target-id>","<%= config.bin %> evals optimize <target-id> --auto --max-iterations 3"];static args={targetId:q.string({description:"Eval target ID",required:!0})};static flags={auto:g.boolean({description:"Skip interactive review, apply suggestions automatically",default:!1}),"max-iterations":g.integer({description:"Maximum optimization iterations",default:5}),threshold:g.string({description:"Stop if pass rate reaches this threshold (0-1)",default:"0.95"}),model:g.string({description:"Model for eval execution"}),"analyzer-model":g.string({description:"Model for analysis/suggestions"}),timeout:g.integer({description:"Timeout per eval in ms",default:12e4})};async run(){let{args:n,flags:e}=await this.parse(O);this.requireAuth();let t=await w(`/api/eval-targets/${n.targetId}`),i=await w(`/api/eval-targets/${n.targetId}/evals`);i.length===0&&this.error("No evals found. Create some first with `rulemetric evals create`.");let s=[...i].sort(()=>Math.random()-.5),c=Math.ceil(s.length*.6),u=s.slice(0,c),d=s.slice(c);this.log(`Optimizing "${t.name}" v${t.version}`),this.log(`Evals: ${u.length} train, ${d.length} test`);let h=parseFloat(e.threshold);this.log(`Config: max ${e["max-iterations"]} iterations, threshold ${(h*100).toFixed(0)}%`),e.auto&&this.log("Mode: auto (no interactive review)"),this.log("");let T=t.version,f=0,x=0;for(let l=1;l<=e["max-iterations"];l++){this.log(`
1
+ import{b as P,c as C}from"../../chunk-BU3ZGLQG.js";import{a as V}from"../../chunk-PDXHRF4E.js";import{a as N}from"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-KFNFLMUR.js";import{f as F}from"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{a as A}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as w,f as m,g as S}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as k}from"../../chunk-ZLLER3HP.js";import{createInterface as _}from"node:readline/promises";import{Args as q,Flags as g}from"@oclif/core";var $=class O extends A{static{k(this,"EvalOptimizeCommand")}static description="Iteratively optimize eval target content using eval results as feedback";static examples=["<%= config.bin %> evals optimize <target-id>","<%= config.bin %> evals optimize <target-id> --auto --max-iterations 3"];static args={targetId:q.string({description:"Eval target ID",required:!0})};static flags={auto:g.boolean({description:"Skip interactive review, apply suggestions automatically",default:!1}),"max-iterations":g.integer({description:"Maximum optimization iterations",default:5}),threshold:g.string({description:"Stop if pass rate reaches this threshold (0-1)",default:"0.95"}),model:g.string({description:"Model for eval execution"}),"analyzer-model":g.string({description:"Model for analysis/suggestions"}),timeout:g.integer({description:"Timeout per eval in ms",default:12e4})};async run(){let{args:n,flags:e}=await this.parse(O);this.requireAuth();let t=await w(`/api/eval-targets/${n.targetId}`),i=await w(`/api/eval-targets/${n.targetId}/evals`);i.length===0&&this.error("No evals found. Create some first with `rulemetric evals create`.");let s=[...i].sort(()=>Math.random()-.5),c=Math.ceil(s.length*.6),u=s.slice(0,c),d=s.slice(c);this.log(`Optimizing "${t.name}" v${t.version}`),this.log(`Evals: ${u.length} train, ${d.length} test`);let h=parseFloat(e.threshold);this.log(`Config: max ${e["max-iterations"]} iterations, threshold ${(h*100).toFixed(0)}%`),e.auto&&this.log("Mode: auto (no interactive review)"),this.log("");let T=t.version,f=0,x=0;for(let l=1;l<=e["max-iterations"];l++){this.log(`
2
2
  === Iteration ${l} ===`),this.log("Running train evals...");let b=await this.runEvalsOnTarget(t,u,e),p=this.computePassRate(b);if(this.log(`Train pass rate: ${(p*100).toFixed(1)}%`),p>=h){this.log(`Train score ${(p*100).toFixed(1)}% >= threshold ${(h*100).toFixed(0)}%. Stopping.`);let o=await this.runEvalsOnTarget(t,d,e),z=this.computePassRate(o);this.log(`Final test score: ${(z*100).toFixed(1)}%`),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:l,inputVersion:t.version,trainScore:p,testScore:z,analysis:{reason:"threshold_reached"},status:"completed"});break}this.log("Analyzing results...");let M=b.map(o=>({evalName:o.evalName,prompt:o.prompt,expectations:o.expectations,grading:o.grading})),a=await V({content:t.content,evalResults:M,model:e["analyzer-model"]??e.model,timeout:e.timeout});this.log(`
3
3
  Assessment: ${a.overallAssessment}`),this.log(`Suggestions: ${a.suggestions.length}`);for(let o of a.suggestions)this.log(` - [${o.section}] ${o.reasoning}`);if(a.proposedContent===t.content){this.log("No changes proposed. Stopping."),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:l,inputVersion:t.version,trainScore:p,analysis:{reason:"no_changes"},status:"completed"});break}if(!e.auto&&!await this.confirm(`
4
4
  Apply the proposed changes as a new version? [y/N] `)){this.log("Changes not applied. Stopping."),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:l,inputVersion:t.version,trainScore:p,analysis:{reason:"user_declined",suggestions:a.suggestions},status:"completed"});break}let r=await S(`/api/eval-targets/${t.id}`,{content:a.proposedContent});this.log(`Created v${r.version}`),this.log(`Running test evals on v${t.version} (baseline) and v${r.version}...`);let E=await this.runEvalsOnTarget(t,d,e),R=await this.runEvalsOnTarget(r,d,e),v=this.computePassRate(R),I=this.computePassRate(E);this.log(`Test pass rate: v${t.version} ${(I*100).toFixed(1)}% \u2192 v${r.version} ${(v*100).toFixed(1)}%`);let y=P(E,R);if(y&&this.log(C(y,t.version,r.version)),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:l,inputVersion:t.version,outputVersion:r.version,trainScore:p,testScore:v,analysis:{suggestions:a.suggestions,overallAssessment:a.overallAssessment,priorTestScore:I,verdict:y},status:"completed"}),v>f)f=v,T=r.version,x=0;else if(x++,x>=2){this.log("No improvement for 2 consecutive iterations. Stopping.");break}t=r}this.log(`
@@ -1,4 +1,4 @@
1
- import{b as w,c as $}from"../../chunk-EJY5GK6A.js";import"../../chunk-74KE4VOX.js";import{b as v}from"../../chunk-HXOQUYG3.js";import"../../chunk-DYET4EYU.js";import"../../chunk-M7QSC64D.js";import"../../chunk-7LFCZI64.js";import"../../chunk-CMDOLJ23.js";import"../../chunk-TWPD3ICV.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-XCH4HPEZ.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-HT6R6KR3.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{a as f}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as d,f as p,h}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a}from"../../chunk-ZLLER3HP.js";import{Args as P,Flags as y}from"@oclif/core";var c=a(s=>s==null?"n/a":`${Math.round(s*100)}%`,"pct"),g=class s extends f{static{a(this,"EvalRefineCases")}static description="Retire non-discriminating eval cases and regenerate discriminating replacements (\xA76e)";static examples=["<%= config.bin %> evals refine-cases <target-id> # preview","<%= config.bin %> evals refine-cases <target-id> --yes # apply: retire + regenerate","<%= config.bin %> evals refine-cases <target-id> --yes --no-generate"];static args={targetId:P.string({description:"Eval target ID",required:!0})};static flags={yes:y.boolean({char:"y",description:"Apply (retire + regenerate). Without this, only previews."}),"no-generate":y.boolean({description:"Retire dead cases but do not regenerate replacements."})};async run(){let{args:b,flags:l}=await this.parse(s);this.requireAuth();let n=b.targetId,o=await d(`/api/eval-targets/${n}`),m=await d(`/api/eval-targets/${n}/judge-calibration`),i=m.caseDiscrimination,t=w(i);if(this.log(`Target "${o.name}" v${o.version} \u2014 judge ${m.judge.currentModel??"(unstamped)"}`),t.refused==="no-discrimination-data"){this.log("No case-discrimination data yet \u2014 run some evals with AND without the target first (`evals run` / the web Run Evals button), then refine.");return}if(this.log(`${i.total} diagnosable case(s): ${i.discriminating} discriminate, ${i.nonDiscriminating} flat/wrong-sign, ${i.unpaired} unpaired.`),t.refused==="all-discriminating"){this.log("Every case discriminates \u2014 nothing to retire. \u{1F389}");return}let C=i.cases.filter(e=>!e.discriminating),u=new Set(t.retire.map(e=>e.evalId));this.log(`
1
+ import{b as w,c as $}from"../../chunk-EE4TZAZI.js";import"../../chunk-OAETRNTE.js";import{b as v}from"../../chunk-HXOQUYG3.js";import"../../chunk-ZMVTSYD4.js";import"../../chunk-M7QSC64D.js";import"../../chunk-7LFCZI64.js";import"../../chunk-ISEUEYSC.js";import"../../chunk-GYKYJJNF.js";import"../../chunk-G7V4ZZZ3.js";import"../../chunk-LJE5J3EW.js";import"../../chunk-AHLVY52I.js";import"../../chunk-YXMAGC53.js";import"../../chunk-T7HZZ4DJ.js";import"../../chunk-XCH4HPEZ.js";import"../../chunk-PPAHIVG5.js";import"../../chunk-CT7FWSIU.js";import"../../chunk-5MXZJWQS.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-FADINV4H.js";import"../../chunk-SWSOEYC7.js";import"../../chunk-U2NT5OSQ.js";import"../../chunk-KGURGIZ2.js";import"../../chunk-GYNZ3OZF.js";import"../../chunk-UPFH72PF.js";import"../../chunk-FG343JM3.js";import"../../chunk-CDY7TQFZ.js";import"../../chunk-KFNFLMUR.js";import"../../chunk-4GOXEEXZ.js";import"../../chunk-JP6ULOEX.js";import"../../chunk-JNLDISBA.js";import"../../chunk-GPBN4ROE.js";import"../../chunk-6XTLP2G7.js";import"../../chunk-PJ3WHQ67.js";import{a as f}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as d,f as p,h}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a}from"../../chunk-ZLLER3HP.js";import{Args as P,Flags as y}from"@oclif/core";var c=a(s=>s==null?"n/a":`${Math.round(s*100)}%`,"pct"),g=class s extends f{static{a(this,"EvalRefineCases")}static description="Retire non-discriminating eval cases and regenerate discriminating replacements (\xA76e)";static examples=["<%= config.bin %> evals refine-cases <target-id> # preview","<%= config.bin %> evals refine-cases <target-id> --yes # apply: retire + regenerate","<%= config.bin %> evals refine-cases <target-id> --yes --no-generate"];static args={targetId:P.string({description:"Eval target ID",required:!0})};static flags={yes:y.boolean({char:"y",description:"Apply (retire + regenerate). Without this, only previews."}),"no-generate":y.boolean({description:"Retire dead cases but do not regenerate replacements."})};async run(){let{args:b,flags:l}=await this.parse(s);this.requireAuth();let n=b.targetId,o=await d(`/api/eval-targets/${n}`),m=await d(`/api/eval-targets/${n}/judge-calibration`),i=m.caseDiscrimination,t=w(i);if(this.log(`Target "${o.name}" v${o.version} \u2014 judge ${m.judge.currentModel??"(unstamped)"}`),t.refused==="no-discrimination-data"){this.log("No case-discrimination data yet \u2014 run some evals with AND without the target first (`evals run` / the web Run Evals button), then refine.");return}if(this.log(`${i.total} diagnosable case(s): ${i.discriminating} discriminate, ${i.nonDiscriminating} flat/wrong-sign, ${i.unpaired} unpaired.`),t.refused==="all-discriminating"){this.log("Every case discriminates \u2014 nothing to retire. \u{1F389}");return}let C=i.cases.filter(e=>!e.discriminating),u=new Set(t.retire.map(e=>e.evalId));this.log(`
2
2
  Would retire ${t.retire.length} non-discriminating case(s):`);for(let e of C)u.has(e.evalId)&&this.log(` \u2717 ${e.name} \u2014 ${c(e.withPassRate)} with vs ${c(e.withoutPassRate)} without (\u0394${(e.separation*100).toFixed(0)}pp) \u2014 ${e.note}`);for(let e of i.unpairedCases)u.has(e.evalId)&&this.log(` \u2717 ${e.name} \u2014 ${c(e.withPassRate)} with vs ${c(e.withoutPassRate)} without \u2014 unpaired`);if(t.replacementsRequired&&this.log(`
3
3
  ${t.summary}. Replacements are generated and created BEFORE anything is retired \u2014 a target left under the floor drops out of the nightly evolution rotation with no error anywhere.`),!l.yes){this.log(`
4
4
  Preview only. Re-run with --yes to retire ${t.retire.length} case(s)${l["no-generate"]?"":" and generate replacements"}.`);return}let r=await $(t,{generate:a(e=>l["no-generate"]?Promise.resolve([]):v({content:o.content,name:o.name,feedback:e}),"generate"),createCase:a(e=>p(`/api/eval-targets/${n}/evals`,{name:e.name,prompt:e.prompt,expectations:e.expectations}),"createCase"),retireCase:a(async(e,R)=>{await h(`/api/eval-targets/${n}/evals/${e}`,{retire:!0,retiredReason:R})},"retireCase"),log:a(e=>this.log(e),"log")});if(r.skipped==="no-llm-backend"){this.warn(r.summary+" Install the `claude` CLI (or set ANTHROPIC_API_KEY), then run `evals refine-cases` again.");return}if(r.skipped==="no-replacements-generated"){this.warn(r.summary);return}this.log(`
@@ -1 +1 @@
1
- import{a as l}from"../../chunk-T75KAEJO.js";import{a}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as r}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Flags as c}from"@oclif/core";var o=class d extends a{static{n(this,"SessionsList")}static description="List captured sessions";static examples=["<%= config.bin %> sessions list","<%= config.bin %> sessions list --tool claude_code","<%= config.bin %> sessions list --tool codex"];static flags={tool:c.string({description:`Filter by tool (${l.join(", ")})`}),limit:c.integer({description:"Max results",default:20})};async run(){let{flags:e}=await this.parse(d);this.requireAuth();let s=new URLSearchParams;e.tool&&s.set("tool",e.tool),s.set("limit",String(e.limit));let i=await r(`/api/sessions?${s}`);if(i.length===0){this.log("No sessions found.");return}for(let t of i){let p=t.projectPath?.split("/").pop()??"\u2014",m=t.analysis?.adherenceScore!=null?`${t.analysis.adherenceScore}%`:"\u2014",u=new Date(t.startedAt).toLocaleDateString();this.log(`${t.id.slice(0,8)} ${t.tool.padEnd(15)} ${p.padEnd(20)} ${String(t.eventCount).padStart(5)} events ${m.padStart(4)} adherence ${u}`)}}};export{o as default};
1
+ import{a as l}from"../../chunk-GJHFIQVO.js";import{a}from"../../chunk-WUCACPGC.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-WL5ZWQAS.js";import"../../chunk-KEVDLLHT.js";import"../../chunk-DX6IPDED.js";import"../../chunk-3AV3GTMP.js";import{e as r}from"../../chunk-GIXHG5FK.js";import"../../chunk-X6CF5KTW.js";import"../../chunk-XQYAVSUQ.js";import"../../chunk-PZNWH4VQ.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Flags as c}from"@oclif/core";var o=class d extends a{static{n(this,"SessionsList")}static description="List captured sessions";static examples=["<%= config.bin %> sessions list","<%= config.bin %> sessions list --tool claude_code","<%= config.bin %> sessions list --tool codex"];static flags={tool:c.string({description:`Filter by tool (${l.join(", ")})`}),limit:c.integer({description:"Max results",default:20})};async run(){let{flags:e}=await this.parse(d);this.requireAuth();let s=new URLSearchParams;e.tool&&s.set("tool",e.tool),s.set("limit",String(e.limit));let i=await r(`/api/sessions?${s}`);if(i.length===0){this.log("No sessions found.");return}for(let t of i){let p=t.projectPath?.split("/").pop()??"\u2014",m=t.analysis?.adherenceScore!=null?`${t.analysis.adherenceScore}%`:"\u2014",u=new Date(t.startedAt).toLocaleDateString();this.log(`${t.id.slice(0,8)} ${t.tool.padEnd(15)} ${p.padEnd(20)} ${String(t.eventCount).padStart(5)} events ${m.padStart(4)} adherence ${u}`)}}};export{o as default};
@@ -1 +1 @@
1
- import{a as O}from"../chunk-DVN7GFJG.js";import{a as E}from"../chunk-O2SDD2WW.js";import{a as M}from"../chunk-GBMF3TP6.js";import{a as U}from"../chunk-MYGVN6X4.js";import{a as D}from"../chunk-WSCK4WNK.js";import{a as R}from"../chunk-4Z5ECCJE.js";import"../chunk-ARNZQBMX.js";import{a as B,b as S,c as F}from"../chunk-RYCVPQYK.js";import{a as z}from"../chunk-GDLQNY4V.js";import"../chunk-PJ4RIUI3.js";import"../chunk-NBTC5FNV.js";import"../chunk-TU2AR6XO.js";import{a as u,b as T,d as a,e as v}from"../chunk-NJ5UED3H.js";import"../chunk-NWV66NMA.js";import"../chunk-ZXF5NE54.js";import"../chunk-T75KAEJO.js";import{a as G}from"../chunk-3AV3GTMP.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a as b}from"../chunk-ZLLER3HP.js";import{useState as h,useEffect as lt,useCallback as H,useRef as dt}from"react";import{render as J,Box as c,Text as e,useInput as ct,useApp as ut}from"ink";import{Fragment as wt,jsx as t,jsxs as f}from"react/jsx-runtime";var ht=90;function V(){let s=process.stdout.columns||80,n=Math.min(160,s),r=n>=ht,d=r?Math.floor(n/2):n,x=Math.max(6,Math.min(10,d-34));return{dashWidth:n,wide:r,halfWidth:d,barWidth:x}}b(V,"getLayout");function K({active:s,providerName:n}){return f(c,{justifyContent:"space-between",paddingX:1,children:[t(c,{gap:1,children:u.map(r=>t(e,{bold:s===r,color:s===r?a:v,children:s===r?`[ ${T[r]} ]`:` ${T[r]} `},r))}),n&&t(e,{color:a,bold:!0,children:n})]})}b(K,"PeriodTabs");function Q({width:s,insightsFocused:n=!1}){return t(c,{borderStyle:"round",borderColor:v,width:s,justifyContent:"center",paddingX:1,children:f(e,{children:[t(e,{color:a,bold:!0,children:"<"}),t(e,{color:a,children:">"}),t(e,{dimColor:!0,children:" switch "}),t(e,{color:a,bold:!0,children:"q"}),t(e,{dimColor:!0,children:" quit "}),t(e,{color:a,bold:!0,children:"s"}),f(e,{dimColor:!0,children:[" ",n?"back":"suggestions"," "]}),t(e,{color:a,bold:!0,children:"1"}),t(e,{dimColor:!0,children:"-"}),t(e,{color:a,bold:!0,children:"5"}),t(e,{dimColor:!0,children:" period "}),t(e,{color:a,bold:!0,children:"r"}),t(e,{dimColor:!0,children:" refresh "}),t(e,{color:a,bold:!0,children:"n"}),t(e,{dimColor:!0,children:" new session "}),t(e,{color:a,bold:!0,children:"m"}),t(e,{dimColor:!0,children:" measurement "}),t(e,{color:a,bold:!0,children:"l"}),t(e,{dimColor:!0,children:" launcher"})]})})}b(Q,"StatusBar");function ft({wide:s,width:n,children:r}){return s?t(c,{width:n,children:r}):t(wt,{children:r})}b(ft,"Row");function mt({initialLocal:s,initialApi:n,initialInstructions:r,initialPeriod:d,initialLauncherFocused:x=!1}){let{exit:j}=ut(),[o,L]=h(d),[Z,tt]=h(s),[W,et]=h(n),[ot,it]=h(r),[rt,k]=h(!1),[Y,_]=h(!1),[m,I]=h(!1),[q,N]=h(x),nt=G()?.orgSlug??null,y=dt(null),st=V(),g=H(async()=>{k(!0);let[i,p,P]=await Promise.all([B(),S(),F()]);tt(i),et(p),it(P),k(!1)},[]);lt(()=>{let i=setInterval(g,3e4);return()=>clearInterval(i)},[g]);let w=H(i=>{i!==o&&(L(i),y.current&&clearTimeout(y.current),y.current=setTimeout(g,300))},[o,g]);ct((i,p)=>{if(q||Y)return;if(i==="q"){if(m){I(!1);return}j();return}if(i==="s"){I(A=>!A);return}if(p.escape&&m){I(!1);return}if(i==="m"&&!m){_(!0);return}if(i==="l"&&!m){N(!0);return}if(m)return;if(i==="r"){g();return}if(i==="n"){import("../dist-GSHUC7UU.js").then(({getLauncher:A})=>{A("claude_code").launch({projectPath:process.cwd(),mode:"interactive"})});return}let P=u.indexOf(o);p.leftArrow?w(u[(P-1+u.length)%u.length]):p.rightArrow||p.tab?w(u[(P+1)%u.length]):i==="1"?w("today"):i==="2"?w("week"):i==="3"?w("30days"):i==="4"?w("month"):i==="5"&&w("all")});let{dashWidth:l,wide:X,halfWidth:at,barWidth:C}=st,$=X?at:l;return Y?t(U,{width:l,onClose:()=>_(!1)}):rt?f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(c,{borderStyle:"round",borderColor:a,paddingX:1,width:l,children:f(e,{dimColor:!0,children:["Loading ",T[o],"..."]})}),t(Q,{width:l})]}):q?t(c,{flexDirection:"column",width:l,children:t(z,{onClose:()=>N(!1),activeOrg:nt,defaultProjectPath:process.cwd(),width:l})}):f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(R,{local:Z,api:W,label:T[o],width:l}),f(ft,{wide:X,width:l,children:[t(D,{api:W,width:$,barWidth:C}),t(O,{api:W,width:$,barWidth:C})]}),t(M,{instructions:ot,width:l,barWidth:C}),t(E,{api:W,width:l,focused:m}),t(Q,{width:l,insightsFocused:m})]})}b(mt,"InteractiveDashboard");async function Bt(s="week",n={}){let[r,d,x]=await Promise.all([B(),S(),F()]);if(process.stdin.isTTY&&process.stdout.isTTY){let{waitUntilExit:o}=J(t(mt,{initialLocal:r,initialApi:d,initialInstructions:x,initialPeriod:s,initialLauncherFocused:n.openLauncher??!1}));await o()}else{let o=V(),{unmount:L}=J(f(c,{flexDirection:"column",width:o.dashWidth,children:[t(R,{local:r,api:d,label:T[s],width:o.dashWidth}),t(D,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(O,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(M,{instructions:x,width:o.dashWidth,barWidth:o.barWidth}),t(E,{api:d,width:o.dashWidth})]}),{patchConsole:!1});L()}}b(Bt,"renderDashboard");export{Bt as renderDashboard};
1
+ import{a as O}from"../chunk-DVN7GFJG.js";import{a as E}from"../chunk-O2SDD2WW.js";import{a as M}from"../chunk-GBMF3TP6.js";import{a as U}from"../chunk-MYGVN6X4.js";import{a as D}from"../chunk-WSCK4WNK.js";import{a as R}from"../chunk-4Z5ECCJE.js";import"../chunk-ARNZQBMX.js";import{a as B,b as S,c as F}from"../chunk-5IL3EEIE.js";import{a as z}from"../chunk-GDLQNY4V.js";import"../chunk-PJ4RIUI3.js";import"../chunk-NBTC5FNV.js";import"../chunk-TU2AR6XO.js";import{a as u,b as T,d as a,e as v}from"../chunk-NJ5UED3H.js";import"../chunk-NWV66NMA.js";import"../chunk-ZXF5NE54.js";import"../chunk-GJHFIQVO.js";import{a as G}from"../chunk-3AV3GTMP.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a as b}from"../chunk-ZLLER3HP.js";import{useState as h,useEffect as lt,useCallback as H,useRef as dt}from"react";import{render as J,Box as c,Text as e,useInput as ct,useApp as ut}from"ink";import{Fragment as wt,jsx as t,jsxs as f}from"react/jsx-runtime";var ht=90;function V(){let s=process.stdout.columns||80,n=Math.min(160,s),r=n>=ht,d=r?Math.floor(n/2):n,x=Math.max(6,Math.min(10,d-34));return{dashWidth:n,wide:r,halfWidth:d,barWidth:x}}b(V,"getLayout");function K({active:s,providerName:n}){return f(c,{justifyContent:"space-between",paddingX:1,children:[t(c,{gap:1,children:u.map(r=>t(e,{bold:s===r,color:s===r?a:v,children:s===r?`[ ${T[r]} ]`:` ${T[r]} `},r))}),n&&t(e,{color:a,bold:!0,children:n})]})}b(K,"PeriodTabs");function Q({width:s,insightsFocused:n=!1}){return t(c,{borderStyle:"round",borderColor:v,width:s,justifyContent:"center",paddingX:1,children:f(e,{children:[t(e,{color:a,bold:!0,children:"<"}),t(e,{color:a,children:">"}),t(e,{dimColor:!0,children:" switch "}),t(e,{color:a,bold:!0,children:"q"}),t(e,{dimColor:!0,children:" quit "}),t(e,{color:a,bold:!0,children:"s"}),f(e,{dimColor:!0,children:[" ",n?"back":"suggestions"," "]}),t(e,{color:a,bold:!0,children:"1"}),t(e,{dimColor:!0,children:"-"}),t(e,{color:a,bold:!0,children:"5"}),t(e,{dimColor:!0,children:" period "}),t(e,{color:a,bold:!0,children:"r"}),t(e,{dimColor:!0,children:" refresh "}),t(e,{color:a,bold:!0,children:"n"}),t(e,{dimColor:!0,children:" new session "}),t(e,{color:a,bold:!0,children:"m"}),t(e,{dimColor:!0,children:" measurement "}),t(e,{color:a,bold:!0,children:"l"}),t(e,{dimColor:!0,children:" launcher"})]})})}b(Q,"StatusBar");function ft({wide:s,width:n,children:r}){return s?t(c,{width:n,children:r}):t(wt,{children:r})}b(ft,"Row");function mt({initialLocal:s,initialApi:n,initialInstructions:r,initialPeriod:d,initialLauncherFocused:x=!1}){let{exit:j}=ut(),[o,L]=h(d),[Z,tt]=h(s),[W,et]=h(n),[ot,it]=h(r),[rt,k]=h(!1),[Y,_]=h(!1),[m,I]=h(!1),[q,N]=h(x),nt=G()?.orgSlug??null,y=dt(null),st=V(),g=H(async()=>{k(!0);let[i,p,P]=await Promise.all([B(),S(),F()]);tt(i),et(p),it(P),k(!1)},[]);lt(()=>{let i=setInterval(g,3e4);return()=>clearInterval(i)},[g]);let w=H(i=>{i!==o&&(L(i),y.current&&clearTimeout(y.current),y.current=setTimeout(g,300))},[o,g]);ct((i,p)=>{if(q||Y)return;if(i==="q"){if(m){I(!1);return}j();return}if(i==="s"){I(A=>!A);return}if(p.escape&&m){I(!1);return}if(i==="m"&&!m){_(!0);return}if(i==="l"&&!m){N(!0);return}if(m)return;if(i==="r"){g();return}if(i==="n"){import("../dist-OVXV2FFO.js").then(({getLauncher:A})=>{A("claude_code").launch({projectPath:process.cwd(),mode:"interactive"})});return}let P=u.indexOf(o);p.leftArrow?w(u[(P-1+u.length)%u.length]):p.rightArrow||p.tab?w(u[(P+1)%u.length]):i==="1"?w("today"):i==="2"?w("week"):i==="3"?w("30days"):i==="4"?w("month"):i==="5"&&w("all")});let{dashWidth:l,wide:X,halfWidth:at,barWidth:C}=st,$=X?at:l;return Y?t(U,{width:l,onClose:()=>_(!1)}):rt?f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(c,{borderStyle:"round",borderColor:a,paddingX:1,width:l,children:f(e,{dimColor:!0,children:["Loading ",T[o],"..."]})}),t(Q,{width:l})]}):q?t(c,{flexDirection:"column",width:l,children:t(z,{onClose:()=>N(!1),activeOrg:nt,defaultProjectPath:process.cwd(),width:l})}):f(c,{flexDirection:"column",width:l,children:[t(K,{active:o}),t(R,{local:Z,api:W,label:T[o],width:l}),f(ft,{wide:X,width:l,children:[t(D,{api:W,width:$,barWidth:C}),t(O,{api:W,width:$,barWidth:C})]}),t(M,{instructions:ot,width:l,barWidth:C}),t(E,{api:W,width:l,focused:m}),t(Q,{width:l,insightsFocused:m})]})}b(mt,"InteractiveDashboard");async function Bt(s="week",n={}){let[r,d,x]=await Promise.all([B(),S(),F()]);if(process.stdin.isTTY&&process.stdout.isTTY){let{waitUntilExit:o}=J(t(mt,{initialLocal:r,initialApi:d,initialInstructions:x,initialPeriod:s,initialLauncherFocused:n.openLauncher??!1}));await o()}else{let o=V(),{unmount:L}=J(f(c,{flexDirection:"column",width:o.dashWidth,children:[t(R,{local:r,api:d,label:T[s],width:o.dashWidth}),t(D,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(O,{api:d,width:o.dashWidth,barWidth:o.barWidth}),t(M,{instructions:x,width:o.dashWidth,barWidth:o.barWidth}),t(E,{api:d,width:o.dashWidth})]}),{patchConsole:!1});L()}}b(Bt,"renderDashboard");export{Bt as renderDashboard};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-RYCVPQYK.js";import"../chunk-T75KAEJO.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as loadApiInsights,c as loadLinkedInstructions,a as loadLocalStats};
1
+ import{a,b,c}from"../chunk-5IL3EEIE.js";import"../chunk-GJHFIQVO.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as loadApiInsights,c as loadLinkedInstructions,a as loadLocalStats};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x}from"./chunk-T75KAEJO.js";import"./chunk-ZLLER3HP.js";export{c as ClaudeCodeAdapter,i as CodexAdapter,f as CopilotAgentAdapter,d as CursorAdapter,j as PiAdapter,g as RuleMetricMcpAdapter,b as SESSION_EVENT_TYPES,a as SESSION_TOOLS,e as VSCodeCopilotAdapter,t as buildTmuxAttachCommand,s as buildTmuxHasSessionArgs,q as buildTmuxLaunchArgs,r as buildTmuxSendKeysArgs,l as detectTool,n as discoverAllSessions,h as freshCodexState,k as getAdapter,m as getAllProviders,v as getAvailableLaunchers,u as getLauncher,o as getProvider,w as sanitizeBranch,p as sanitizeTmuxName,x as worktreePathFor};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x}from"./chunk-GJHFIQVO.js";import"./chunk-ZLLER3HP.js";export{c as ClaudeCodeAdapter,i as CodexAdapter,f as CopilotAgentAdapter,d as CursorAdapter,j as PiAdapter,g as RuleMetricMcpAdapter,b as SESSION_EVENT_TYPES,a as SESSION_TOOLS,e as VSCodeCopilotAdapter,t as buildTmuxAttachCommand,s as buildTmuxHasSessionArgs,q as buildTmuxLaunchArgs,r as buildTmuxSendKeysArgs,l as detectTool,n as discoverAllSessions,h as freshCodexState,k as getAdapter,m as getAllProviders,v as getAvailableLaunchers,u as getLauncher,o as getProvider,w as sanitizeBranch,p as sanitizeTmuxName,x as worktreePathFor};
@@ -1 +1 @@
1
- import{a,b,c,d,e}from"../chunk-N2PP2A7M.js";import"../chunk-XXPWPKTD.js";import"../chunk-5TM7AOH2.js";import"../chunk-IEQDLURA.js";import"../chunk-KINIFUZQ.js";import"../chunk-5PMTNNA6.js";import"../chunk-ZYGBABMZ.js";import"../chunk-IFIWDL7G.js";import"../chunk-FZMO7XSN.js";import"../chunk-LLXC5SRC.js";import"../chunk-4DA6L7KL.js";import"../chunk-JU5ZNXPK.js";import"../chunk-WQFR2LOY.js";import"../chunk-Q7IDLOSP.js";import"../chunk-XIOYV5A7.js";import"../chunk-ISFPPDDB.js";import"../chunk-5RBLIVBF.js";import"../chunk-JSGXFD42.js";import"../chunk-CZBO3A6B.js";import"../chunk-JUBXWTJA.js";import"../chunk-W6MMJRFZ.js";import"../chunk-PZS55PW2.js";import"../chunk-QPAOX7P2.js";import"../chunk-3ZHVP3KE.js";import"../chunk-CIKQXFQ2.js";import"../chunk-HOQPVOMF.js";import"../chunk-5Z6XXOJL.js";import"../chunk-MOJY6S5J.js";import"../chunk-CYCH2EQC.js";import"../chunk-CVPAKEEZ.js";import"../chunk-VUNJGZPP.js";import"../chunk-L562Y4RN.js";import"../chunk-GLBWNB2N.js";import"../chunk-CQD2R3BA.js";import"../chunk-3UKZJAFS.js";import"../chunk-77FH6UZP.js";import"../chunk-KE5K3F7J.js";import"../chunk-PIVEJTNF.js";import"../chunk-KR36ZDGN.js";import"../chunk-JOXTWLLK.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-DQYYHX6K.js";import"../chunk-RE7RAZQ5.js";import"../chunk-6T6YFPBW.js";import"../chunk-ISYU5BMU.js";import"../chunk-DANMUHNW.js";import"../chunk-T75KAEJO.js";import"../chunk-FXQS7AEZ.js";import"../chunk-LJRE3LZ2.js";import"../chunk-EJY5GK6A.js";import"../chunk-74KE4VOX.js";import"../chunk-HXOQUYG3.js";import"../chunk-3H44B6PB.js";import"../chunk-6UEFCMR2.js";import"../chunk-MODXEGCU.js";import"../chunk-RBSEE2Z6.js";import"../chunk-PDXHRF4E.js";import"../chunk-DYET4EYU.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-CMDOLJ23.js";import"../chunk-TWPD3ICV.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-HT6R6KR3.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
1
+ import{a,b,c,d,e}from"../chunk-WVNTUKED.js";import"../chunk-XXPWPKTD.js";import"../chunk-5TM7AOH2.js";import"../chunk-IEQDLURA.js";import"../chunk-KINIFUZQ.js";import"../chunk-2U6PAYCD.js";import"../chunk-ZYGBABMZ.js";import"../chunk-IFIWDL7G.js";import"../chunk-FZMO7XSN.js";import"../chunk-LLXC5SRC.js";import"../chunk-UNVURR4E.js";import"../chunk-JU5ZNXPK.js";import"../chunk-WQFR2LOY.js";import"../chunk-Q7IDLOSP.js";import"../chunk-X3BBFDRD.js";import"../chunk-D5XLTSRV.js";import"../chunk-5RBLIVBF.js";import"../chunk-TQM7MF5C.js";import"../chunk-CZBO3A6B.js";import"../chunk-5GFEEYHM.js";import"../chunk-W6MMJRFZ.js";import"../chunk-PZS55PW2.js";import"../chunk-QPAOX7P2.js";import"../chunk-3ZHVP3KE.js";import"../chunk-CIKQXFQ2.js";import"../chunk-HOQPVOMF.js";import"../chunk-5Z6XXOJL.js";import"../chunk-MOJY6S5J.js";import"../chunk-CYCH2EQC.js";import"../chunk-CVPAKEEZ.js";import"../chunk-VUNJGZPP.js";import"../chunk-L562Y4RN.js";import"../chunk-GLBWNB2N.js";import"../chunk-CQD2R3BA.js";import"../chunk-3UKZJAFS.js";import"../chunk-77FH6UZP.js";import"../chunk-KE5K3F7J.js";import"../chunk-PIVEJTNF.js";import"../chunk-KR36ZDGN.js";import"../chunk-JOXTWLLK.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-DQYYHX6K.js";import"../chunk-RE7RAZQ5.js";import"../chunk-6T6YFPBW.js";import"../chunk-ISYU5BMU.js";import"../chunk-DANMUHNW.js";import"../chunk-GJHFIQVO.js";import"../chunk-FXQS7AEZ.js";import"../chunk-LJRE3LZ2.js";import"../chunk-EE4TZAZI.js";import"../chunk-OAETRNTE.js";import"../chunk-HXOQUYG3.js";import"../chunk-3H44B6PB.js";import"../chunk-6UEFCMR2.js";import"../chunk-MODXEGCU.js";import"../chunk-RBSEE2Z6.js";import"../chunk-PDXHRF4E.js";import"../chunk-ZMVTSYD4.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-ISEUEYSC.js";import"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-OZQNSELV.js";import"../chunk-HFGO5762.js";import"../chunk-VS5ROGDP.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-QFTAU33Y.js";import"../chunk-HT6R6KR3.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as aggregateBenchmark,c as postBenchmark,a as summarizeRuns};
1
+ import{a,b,c}from"../chunk-7LE2W3WP.js";import"../chunk-KFNFLMUR.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as aggregateBenchmark,c as postBenchmark,a as summarizeRuns};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n}from"../chunk-TWPD3ICV.js";import"../chunk-HT6R6KR3.js";import"../chunk-ZLLER3HP.js";export{g as DEFAULT_AUTO_EVOLVE_PAIRS,h as MAX_AUTO_EVOLVE_PAIRS,c as MAX_GRADER_ATTEMPTS,a as MODEL_CALLS_PER_PAIR,d as OBSERVED_PAIRED_DELTA_VARIANCE,b as PROPOSAL_CALLS,n as describeEvolutionCost,k as estimateEvolutionCost,j as isEvolutionPaused,e as mdeForPairs,l as observedEvolutionCost,f as pairsForMde,m as pp,i as readPairBudget};
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n}from"../chunk-GYKYJJNF.js";import"../chunk-KFNFLMUR.js";import"../chunk-ZLLER3HP.js";export{g as DEFAULT_AUTO_EVOLVE_PAIRS,h as MAX_AUTO_EVOLVE_PAIRS,c as MAX_GRADER_ATTEMPTS,a as MODEL_CALLS_PER_PAIR,d as OBSERVED_PAIRED_DELTA_VARIANCE,b as PROPOSAL_CALLS,n as describeEvolutionCost,k as estimateEvolutionCost,j as isEvolutionPaused,e as mdeForPairs,l as observedEvolutionCost,f as pairsForMde,m as pp,i as readPairBudget};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-74KE4VOX.js";import"../chunk-DYET4EYU.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-CMDOLJ23.js";import"../chunk-TWPD3ICV.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-HT6R6KR3.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as MIN_LIVE_CASES,c as RULE_ENROLMENT_CAP_PER_USER,a as minFeasibleLiveCases};
1
+ import{a,b,c}from"../chunk-OAETRNTE.js";import"../chunk-ZMVTSYD4.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-ISEUEYSC.js";import"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{b as MIN_LIVE_CASES,c as RULE_ENROLMENT_CAP_PER_USER,a as minFeasibleLiveCases};
@@ -1 +1 @@
1
- import{a}from"../chunk-CMDOLJ23.js";import"../chunk-HT6R6KR3.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{a as restoreInstruction};
1
+ import{a}from"../chunk-ISEUEYSC.js";import"../chunk-KFNFLMUR.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{a as restoreInstruction};
@@ -1 +1 @@
1
- import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m}from"../../../chunk-DYET4EYU.js";import"../../../chunk-M7QSC64D.js";import"../../../chunk-7LFCZI64.js";import"../../../chunk-CMDOLJ23.js";import"../../../chunk-TWPD3ICV.js";import"../../../chunk-G7V4ZZZ3.js";import"../../../chunk-LJE5J3EW.js";import{a}from"../../../chunk-AHLVY52I.js";import"../../../chunk-YXMAGC53.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-HT6R6KR3.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{g as DEFAULT_ACCUMULATE_TARGET_PAIRS,c as MAX_PASSES,d as MAX_PASSES_CEILING,h as MAX_PRIOR_DECISIONS,b as PAIR_HEADROOM,l as cronInstructionEvolution,a as findOpenAccumulation,e as passCapFor,f as planPasses,j as readAccumulateConfig,m as readImmutableSections,k as resolveApply,i as summarisePriorDecisions};
1
+ import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m}from"../../../chunk-ZMVTSYD4.js";import"../../../chunk-M7QSC64D.js";import"../../../chunk-7LFCZI64.js";import"../../../chunk-ISEUEYSC.js";import"../../../chunk-GYKYJJNF.js";import"../../../chunk-G7V4ZZZ3.js";import"../../../chunk-LJE5J3EW.js";import{a}from"../../../chunk-AHLVY52I.js";import"../../../chunk-YXMAGC53.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-KFNFLMUR.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{g as DEFAULT_ACCUMULATE_TARGET_PAIRS,c as MAX_PASSES,d as MAX_PASSES_CEILING,h as MAX_PRIOR_DECISIONS,b as PAIR_HEADROOM,l as cronInstructionEvolution,a as findOpenAccumulation,e as passCapFor,f as planPasses,j as readAccumulateConfig,m as readImmutableSections,k as resolveApply,i as summarisePriorDecisions};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-JUBXWTJA.js";import"../../../chunk-EJY5GK6A.js";import"../../../chunk-74KE4VOX.js";import"../../../chunk-HXOQUYG3.js";import"../../../chunk-DYET4EYU.js";import"../../../chunk-M7QSC64D.js";import"../../../chunk-7LFCZI64.js";import"../../../chunk-CMDOLJ23.js";import"../../../chunk-TWPD3ICV.js";import"../../../chunk-G7V4ZZZ3.js";import"../../../chunk-LJE5J3EW.js";import"../../../chunk-AHLVY52I.js";import"../../../chunk-YXMAGC53.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-HT6R6KR3.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronRefineCases};
1
+ import{a}from"../../../chunk-5GFEEYHM.js";import"../../../chunk-EE4TZAZI.js";import"../../../chunk-OAETRNTE.js";import"../../../chunk-HXOQUYG3.js";import"../../../chunk-ZMVTSYD4.js";import"../../../chunk-M7QSC64D.js";import"../../../chunk-7LFCZI64.js";import"../../../chunk-ISEUEYSC.js";import"../../../chunk-GYKYJJNF.js";import"../../../chunk-G7V4ZZZ3.js";import"../../../chunk-LJE5J3EW.js";import"../../../chunk-AHLVY52I.js";import"../../../chunk-YXMAGC53.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-KFNFLMUR.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as cronRefineCases};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-RDL4HXFL.js";import"../../../chunk-V576KKH6.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processChangelog};
1
+ import{a}from"../../../chunk-U3PIBPHT.js";import"../../../chunk-JIW2PCHU.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processChangelog};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-4DA6L7KL.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HXOQUYG3.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processEval};
1
+ import{a}from"../../../chunk-UNVURR4E.js";import"../../../chunk-JU5ZNXPK.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-KR36ZDGN.js";import"../../../chunk-HXOQUYG3.js";import"../../../chunk-T7HZZ4DJ.js";import"../../../chunk-XCH4HPEZ.js";import"../../../chunk-PPAHIVG5.js";import"../../../chunk-CT7FWSIU.js";import"../../../chunk-5MXZJWQS.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processEval};
@@ -1 +1 @@
1
- import{a,b}from"../../../chunk-XIOYV5A7.js";import"../../../chunk-ISFPPDDB.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-T75KAEJO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as processLaunch,a as resolveWorktreeForLaunch};
1
+ import{a,b}from"../../../chunk-X3BBFDRD.js";import"../../../chunk-D5XLTSRV.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-GJHFIQVO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{b as processLaunch,a as resolveWorktreeForLaunch};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-JSGXFD42.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-HT6R6KR3.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processMemoryAb};
1
+ import{a}from"../../../chunk-TQM7MF5C.js";import"../../../chunk-FADINV4H.js";import"../../../chunk-SWSOEYC7.js";import"../../../chunk-U2NT5OSQ.js";import"../../../chunk-KGURGIZ2.js";import"../../../chunk-GYNZ3OZF.js";import"../../../chunk-UPFH72PF.js";import"../../../chunk-FG343JM3.js";import"../../../chunk-CDY7TQFZ.js";import"../../../chunk-KFNFLMUR.js";import"../../../chunk-4GOXEEXZ.js";import"../../../chunk-JP6ULOEX.js";import"../../../chunk-JNLDISBA.js";import"../../../chunk-GPBN4ROE.js";import"../../../chunk-6XTLP2G7.js";import"../../../chunk-PJ3WHQ67.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processMemoryAb};
@@ -1 +1 @@
1
- import{a}from"../../../chunk-5PMTNNA6.js";import"../../../chunk-ISFPPDDB.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-T75KAEJO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
1
+ import{a}from"../../../chunk-2U6PAYCD.js";import"../../../chunk-D5XLTSRV.js";import"../../../chunk-5RBLIVBF.js";import"../../../chunk-GJHFIQVO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-GIXHG5FK.js";import"../../../chunk-X6CF5KTW.js";import"../../../chunk-XQYAVSUQ.js";import"../../../chunk-PZNWH4VQ.js";import"../../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
@@ -1 +1 @@
1
- import{a as m}from"../chunk-RDL4HXFL.js";import"../chunk-V576KKH6.js";import{c as h}from"../chunk-FZMO7XSN.js";import{a as d}from"../chunk-CZBO3A6B.js";import{a as k}from"../chunk-PZS55PW2.js";import{e as p}from"../chunk-CIKQXFQ2.js";import"../chunk-HOQPVOMF.js";import"../chunk-MOJY6S5J.js";import"../chunk-CVPAKEEZ.js";import"../chunk-PIVEJTNF.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-MODXEGCU.js";import{a as f}from"../chunk-4VN5PG2S.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import{A as c,B as g,z as u}from"../chunk-X6CF5KTW.js";import{f as l}from"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a}from"../chunk-ZLLER3HP.js";var b={cron_check_changelog:a(async(r,n)=>{let t=await m({logger:{info:a(e=>n.logger.info(e),"info"),warn:a(e=>n.logger.warn(e),"warn")}});n.logger.info(`[cron_check_changelog] result: created=${t.createdCount} skipped=${t.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:a((r,n)=>p(r,n),"cron_suggest_instructions"),cron_reconcile_attribution:a((r,n)=>d(r,n).then(()=>{}),"cron_reconcile_attribution"),cron_refresh_skills:a((r,n)=>k(r,n),"cron_refresh_skills"),harbor_ab:a(async(r,n)=>{let t=r.measurement,e=t?l.parse(t):null;for(let s of u("proven")){let i=c(s,e);if(i){n.logger.warn(i);continue}let o=await h(g(s,"manual",e),n);n.logger.info(`[harbor_ab] ${s.task}: ${o.decision} \u2014 ${o.reason}`)}},"harbor_ab")},w=f.map(r=>{let n=b[r.name];if(!n)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:n}});async function v(r,n={}){let t=w.find(o=>o.name===r);if(!t)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let e=[],s={logger:{info:a(o=>e.push({level:"info",message:o}),"info"),warn:a(o=>e.push({level:"warn",message:o}),"warn"),error:a(o=>e.push({level:"error",message:o}),"error")},job:{attempts:0}},i=Date.now();try{return await t.handler(n,s),{name:r,durationMs:Date.now()-i,ok:!0,logs:e}}catch(o){return{name:r,durationMs:Date.now()-i,ok:!1,error:o instanceof Error?o.message:String(o),logs:e}}}a(v,"runManualTask");export{w as MANUAL_TASKS,v as runManualTask};
1
+ import{a as m}from"../chunk-U3PIBPHT.js";import"../chunk-JIW2PCHU.js";import{c as h}from"../chunk-FZMO7XSN.js";import{a as d}from"../chunk-CZBO3A6B.js";import{a as k}from"../chunk-PZS55PW2.js";import{e as p}from"../chunk-CIKQXFQ2.js";import"../chunk-HOQPVOMF.js";import"../chunk-MOJY6S5J.js";import"../chunk-CVPAKEEZ.js";import"../chunk-PIVEJTNF.js";import"../chunk-GIRPEMTW.js";import"../chunk-SIGZEQ3K.js";import"../chunk-MODXEGCU.js";import{a as f}from"../chunk-4VN5PG2S.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import{A as c,B as g,z as u}from"../chunk-X6CF5KTW.js";import{f as l}from"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import{a}from"../chunk-ZLLER3HP.js";var b={cron_check_changelog:a(async(r,n)=>{let t=await m({logger:{info:a(e=>n.logger.info(e),"info"),warn:a(e=>n.logger.warn(e),"warn")}});n.logger.info(`[cron_check_changelog] result: created=${t.createdCount} skipped=${t.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:a((r,n)=>p(r,n),"cron_suggest_instructions"),cron_reconcile_attribution:a((r,n)=>d(r,n).then(()=>{}),"cron_reconcile_attribution"),cron_refresh_skills:a((r,n)=>k(r,n),"cron_refresh_skills"),harbor_ab:a(async(r,n)=>{let t=r.measurement,e=t?l.parse(t):null;for(let s of u("proven")){let i=c(s,e);if(i){n.logger.warn(i);continue}let o=await h(g(s,"manual",e),n);n.logger.info(`[harbor_ab] ${s.task}: ${o.decision} \u2014 ${o.reason}`)}},"harbor_ab")},w=f.map(r=>{let n=b[r.name];if(!n)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:n}});async function v(r,n={}){let t=w.find(o=>o.name===r);if(!t)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let e=[],s={logger:{info:a(o=>e.push({level:"info",message:o}),"info"),warn:a(o=>e.push({level:"warn",message:o}),"warn"),error:a(o=>e.push({level:"error",message:o}),"error")},job:{attempts:0}},i=Date.now();try{return await t.handler(n,s),{name:r,durationMs:Date.now()-i,ok:!0,logs:e}}catch(o){return{name:r,durationMs:Date.now()-i,ok:!1,error:o instanceof Error?o.message:String(o),logs:e}}}a(v,"runManualTask");export{w as MANUAL_TASKS,v as runManualTask};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-AFEJYDUK.js";import"../chunk-HT6R6KR3.js";import"../chunk-ZLLER3HP.js";export{b as buildVersionVerdict,c as formatVersionVerdict,a as pairVersionResults};
1
+ import{a,b,c}from"../chunk-BU3ZGLQG.js";import"../chunk-KFNFLMUR.js";import"../chunk-ZLLER3HP.js";export{b as buildVersionVerdict,c as formatVersionVerdict,a as pairVersionResults};
@@ -1 +1 @@
1
- import{a as b,b as c,c as d}from"../../../chunk-ISFPPDDB.js";import{w as a}from"../../../chunk-T75KAEJO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-ZLLER3HP.js";export{c as ensureWorktree,d as removeWorktree,b as runGit,a as sanitizeBranch};
1
+ import{a as b,b as c,c as d}from"../../../chunk-D5XLTSRV.js";import{w as a}from"../../../chunk-GJHFIQVO.js";import"../../../chunk-N7ODX6PO.js";import"../../../chunk-ZLLER3HP.js";export{c as ensureWorktree,d as removeWorktree,b as runGit,a as sanitizeBranch};
@@ -1 +1 @@
1
- import{a,b,c}from"../chunk-EJY5GK6A.js";import"../chunk-74KE4VOX.js";import"../chunk-DYET4EYU.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-CMDOLJ23.js";import"../chunk-TWPD3ICV.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-HT6R6KR3.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{a as MAX_RETIREMENTS_PER_REFINEMENT,c as executeCaseRefinement,b as planCaseRefinement};
1
+ import{a,b,c}from"../chunk-EE4TZAZI.js";import"../chunk-OAETRNTE.js";import"../chunk-ZMVTSYD4.js";import"../chunk-M7QSC64D.js";import"../chunk-7LFCZI64.js";import"../chunk-ISEUEYSC.js";import"../chunk-GYKYJJNF.js";import"../chunk-G7V4ZZZ3.js";import"../chunk-LJE5J3EW.js";import"../chunk-AHLVY52I.js";import"../chunk-YXMAGC53.js";import"../chunk-T7HZZ4DJ.js";import"../chunk-XCH4HPEZ.js";import"../chunk-PPAHIVG5.js";import"../chunk-CT7FWSIU.js";import"../chunk-5MXZJWQS.js";import"../chunk-N7ODX6PO.js";import"../chunk-FADINV4H.js";import"../chunk-SWSOEYC7.js";import"../chunk-U2NT5OSQ.js";import"../chunk-KGURGIZ2.js";import"../chunk-GYNZ3OZF.js";import"../chunk-UPFH72PF.js";import"../chunk-FG343JM3.js";import"../chunk-CDY7TQFZ.js";import"../chunk-KFNFLMUR.js";import"../chunk-4GOXEEXZ.js";import"../chunk-JP6ULOEX.js";import"../chunk-JNLDISBA.js";import"../chunk-GPBN4ROE.js";import"../chunk-6XTLP2G7.js";import"../chunk-PJ3WHQ67.js";import"../chunk-GIXHG5FK.js";import"../chunk-X6CF5KTW.js";import"../chunk-XQYAVSUQ.js";import"../chunk-PZNWH4VQ.js";import"../chunk-ZLLER3HP.js";export{a as MAX_RETIREMENTS_PER_REFINEMENT,c as executeCaseRefinement,b as planCaseRefinement};