@rulemetric/cli 0.7.38 → 0.7.40

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 (169) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/{chunk-ZYI66XKV.js → chunk-2RCWYVEU.js} +1 -1
  3. package/dist/{chunk-VLXCQ2DC.js → chunk-3QXRLIGC.js} +1 -1
  4. package/dist/chunk-45DOTNQM.js +1 -0
  5. package/dist/{chunk-G6XGDHGC.js → chunk-4Q72B377.js} +1 -1
  6. package/dist/{chunk-Q4APAZUC.js → chunk-5KD2N2MH.js} +1 -1
  7. package/dist/{chunk-GPTPK6QX.js → chunk-5R5RGKOW.js} +3 -3
  8. package/dist/{chunk-ZR3MUNLS.js → chunk-5RUEROLC.js} +1 -1
  9. package/dist/{chunk-TIOKY2IA.js → chunk-5XUN743A.js} +1 -1
  10. package/dist/{chunk-VSUL3MNG.js → chunk-5ZACMVV3.js} +1 -1
  11. package/dist/{chunk-SNJ2NIIE.js → chunk-6ME5OTS5.js} +1 -1
  12. package/dist/{chunk-V44SRRYR.js → chunk-6VKQT2J3.js} +1 -1
  13. package/dist/{chunk-JIJKIPE6.js → chunk-7UCNONVI.js} +1 -1
  14. package/dist/{chunk-X64R6JCJ.js → chunk-AI6FMGKM.js} +1 -1
  15. package/dist/{chunk-KQCAELPN.js → chunk-ATL4WZBF.js} +1 -1
  16. package/dist/{chunk-W2MOTOQE.js → chunk-BLCMXTIK.js} +1 -1
  17. package/dist/{chunk-2ZAKZEXW.js → chunk-DBELYMDA.js} +1 -1
  18. package/dist/{chunk-WFYQ6SPJ.js → chunk-EF6JLMNH.js} +1 -1
  19. package/dist/{chunk-CYKELSHS.js → chunk-EHNPJJIH.js} +1 -1
  20. package/dist/{chunk-SWSGNEVO.js → chunk-EN43UYBN.js} +1 -1
  21. package/dist/{chunk-BPQ66YTY.js → chunk-FAXV5AAG.js} +1 -1
  22. package/dist/{chunk-7LBD5POI.js → chunk-FNGVEZPD.js} +1 -1
  23. package/dist/{chunk-I2DZGJRR.js → chunk-HFGO5762.js} +8 -2
  24. package/dist/{chunk-ZYVWALMS.js → chunk-HXZM2UHO.js} +1 -1
  25. package/dist/{chunk-RQ424GI6.js → chunk-IQCE4VBP.js} +1 -1
  26. package/dist/chunk-JZ5Z2BRO.js +7 -0
  27. package/dist/{chunk-HUADECKZ.js → chunk-KGQ5W54Y.js} +1 -1
  28. package/dist/chunk-KLEF5D3A.js +1 -0
  29. package/dist/{chunk-42XJZBQD.js → chunk-KUTOHRLK.js} +1 -1
  30. package/dist/{chunk-XXDZJ6YI.js → chunk-LLNQZ4SZ.js} +1 -1
  31. package/dist/{chunk-PPKPCXJD.js → chunk-LWI5K6T4.js} +1 -1
  32. package/dist/{chunk-H7J27U4P.js → chunk-MOAJLSYV.js} +1 -1
  33. package/dist/{chunk-U6XEU573.js → chunk-NIRD7ETU.js} +1 -1
  34. package/dist/{chunk-NKPLTT7J.js → chunk-O2BKBW7Z.js} +1 -1
  35. package/dist/{chunk-7SI6KWSX.js → chunk-O7PSLZO6.js} +1 -1
  36. package/dist/{chunk-5KP66L7P.js → chunk-QDYMIFY4.js} +1 -1
  37. package/dist/{chunk-IQTSUAGM.js → chunk-QUDMK76I.js} +1 -1
  38. package/dist/{chunk-VLOX6KOM.js → chunk-QY3UKLDE.js} +1 -1
  39. package/dist/{chunk-XICLXXRH.js → chunk-RJLAAKEN.js} +1 -1
  40. package/dist/{chunk-RDET7CKR.js → chunk-ULMEKK7C.js} +1 -1
  41. package/dist/{chunk-IXLDCX7M.js → chunk-YW3JQKGY.js} +1 -1
  42. package/dist/{chunk-VTA6HDVW.js → chunk-Z2MZOQCD.js} +1 -1
  43. package/dist/commands/antigravity/backfill.js +1 -1
  44. package/dist/commands/auth/create-key.js +1 -1
  45. package/dist/commands/auth/login.js +1 -1
  46. package/dist/commands/auth/logout.js +1 -1
  47. package/dist/commands/auth/revoke-key.js +1 -1
  48. package/dist/commands/auth/signup.js +1 -1
  49. package/dist/commands/auth/status.js +1 -1
  50. package/dist/commands/capture/scope.js +1 -1
  51. package/dist/commands/catalog/index.js +1 -1
  52. package/dist/commands/catalog/recommend.js +1 -1
  53. package/dist/commands/convert.js +1 -1
  54. package/dist/commands/converters.js +1 -1
  55. package/dist/commands/crons/list.js +1 -1
  56. package/dist/commands/crons/run.js +1 -1
  57. package/dist/commands/dashboard.js +1 -1
  58. package/dist/commands/diagnostics.js +1 -1
  59. package/dist/commands/eval-targets/create.js +1 -1
  60. package/dist/commands/eval-targets/list.js +1 -1
  61. package/dist/commands/evals/agent.js +1 -1
  62. package/dist/commands/evals/auto-run.js +1 -1
  63. package/dist/commands/evals/benchmark.js +1 -1
  64. package/dist/commands/evals/compare.js +1 -1
  65. package/dist/commands/evals/create.js +1 -1
  66. package/dist/commands/evals/optimize-description.js +1 -1
  67. package/dist/commands/evals/optimize.js +1 -1
  68. package/dist/commands/evals/refine-cases.js +1 -1
  69. package/dist/commands/evals/run.js +1 -1
  70. package/dist/commands/evals/validate-judge.js +1 -1
  71. package/dist/commands/gateway/ensure.js +1 -1
  72. package/dist/commands/hooks/install.js +1 -1
  73. package/dist/commands/hooks/run.js +1 -1
  74. package/dist/commands/hooks/uninstall.js +1 -1
  75. package/dist/commands/import.js +1 -1
  76. package/dist/commands/instructions/create.js +1 -1
  77. package/dist/commands/instructions/delete.js +1 -1
  78. package/dist/commands/instructions/fork.js +1 -1
  79. package/dist/commands/instructions/get.js +1 -1
  80. package/dist/commands/instructions/list.js +1 -1
  81. package/dist/commands/instructions/promote.js +1 -1
  82. package/dist/commands/instructions/pull.js +1 -1
  83. package/dist/commands/instructions/upstream.js +1 -1
  84. package/dist/commands/instructions/versions.js +1 -1
  85. package/dist/commands/launcher.js +1 -1
  86. package/dist/commands/org/current.js +1 -1
  87. package/dist/commands/org/list.js +1 -1
  88. package/dist/commands/org/switch.js +1 -1
  89. package/dist/commands/packs/add-instruction.js +1 -1
  90. package/dist/commands/packs/apply.js +1 -1
  91. package/dist/commands/packs/create.js +1 -1
  92. package/dist/commands/packs/fork.js +1 -1
  93. package/dist/commands/packs/get.js +1 -1
  94. package/dist/commands/packs/list.js +1 -1
  95. package/dist/commands/packs/remove-instruction.js +1 -1
  96. package/dist/commands/proxy/env.js +1 -1
  97. package/dist/commands/proxy/logs.js +1 -1
  98. package/dist/commands/proxy/restart.js +1 -1
  99. package/dist/commands/proxy/setup.js +1 -1
  100. package/dist/commands/proxy/start.js +1 -1
  101. package/dist/commands/proxy/status.js +1 -1
  102. package/dist/commands/proxy/stop.js +1 -1
  103. package/dist/commands/research/backfill.js +1 -1
  104. package/dist/commands/research/tail-transcript.js +1 -1
  105. package/dist/commands/service/install.js +1 -1
  106. package/dist/commands/service/status.js +1 -1
  107. package/dist/commands/service/uninstall.js +1 -1
  108. package/dist/commands/sessions/analyze.js +1 -1
  109. package/dist/commands/sessions/delete.js +1 -0
  110. package/dist/commands/sessions/end.js +1 -1
  111. package/dist/commands/sessions/import.js +1 -1
  112. package/dist/commands/sessions/list.js +1 -1
  113. package/dist/commands/sessions/start.js +1 -1
  114. package/dist/commands/setup.js +1 -1
  115. package/dist/commands/skills/export-approved.js +1 -1
  116. package/dist/commands/skills/install.js +1 -1
  117. package/dist/commands/skills/list.js +1 -1
  118. package/dist/commands/skills/publish.js +1 -1
  119. package/dist/commands/skills/search.js +1 -1
  120. package/dist/commands/skills/update.js +1 -1
  121. package/dist/commands/suggestions/accept.js +1 -1
  122. package/dist/commands/suggestions/dismiss.js +1 -1
  123. package/dist/commands/suggestions/list.js +1 -1
  124. package/dist/commands/suggestions/refresh.js +1 -1
  125. package/dist/dashboard/Dashboard.js +1 -1
  126. package/dist/dashboard/data.js +1 -1
  127. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  128. package/dist/dashboard/launcher/api.js +1 -1
  129. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  130. package/dist/lib/active-org-refresh.js +1 -1
  131. package/dist/lib/agent-loop.js +1 -1
  132. package/dist/lib/antigravity-transcript.js +1 -1
  133. package/dist/lib/api-client.js +1 -1
  134. package/dist/lib/auth.js +1 -1
  135. package/dist/lib/editor-proxy-pins.js +1 -1
  136. package/dist/lib/ensure-api-key.js +1 -1
  137. package/dist/lib/ensure-fresh-token.js +1 -1
  138. package/dist/lib/eval-benchmark.js +1 -1
  139. package/dist/lib/eval-candidate-run.js +1 -1
  140. package/dist/lib/eval-conversation-handler.js +1 -1
  141. package/dist/lib/eval-run-batch.js +1 -1
  142. package/dist/lib/handlers/cron-eval-autorun.js +1 -1
  143. package/dist/lib/handlers/cron-instruction-evolution.js +1 -1
  144. package/dist/lib/handlers/cron-refresh-pricing.js +1 -1
  145. package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
  146. package/dist/lib/handlers/distill-memories.js +1 -1
  147. package/dist/lib/handlers/process-announcement.js +1 -1
  148. package/dist/lib/handlers/process-changelog.js +1 -1
  149. package/dist/lib/handlers/process-conversation.js +1 -1
  150. package/dist/lib/handlers/process-eval.js +1 -1
  151. package/dist/lib/handlers/process-insights.js +1 -1
  152. package/dist/lib/handlers/process-judge-review.js +1 -1
  153. package/dist/lib/handlers/process-launch.js +1 -1
  154. package/dist/lib/handlers/process-memory-ab.js +1 -1
  155. package/dist/lib/handlers/process-run-cleanup.js +1 -1
  156. package/dist/lib/handlers/process-session-goal.js +1 -1
  157. package/dist/lib/hooks-config.js +1 -1
  158. package/dist/lib/judge-review-runner.js +1 -1
  159. package/dist/lib/manual-tasks.js +1 -1
  160. package/dist/lib/research-client.js +1 -1
  161. package/dist/lib/setup-steps.js +1 -1
  162. package/dist/lib/statusline-shim.js +1 -1
  163. package/dist/lib/telemetry.js +1 -1
  164. package/dist/lib/terminal-target-heartbeat.js +1 -1
  165. package/oclif.manifest.json +56 -1
  166. package/package.json +5 -5
  167. package/dist/chunk-H2ORWIEY.js +0 -1
  168. package/dist/chunk-JGLVVIEM.js +0 -1
  169. package/dist/chunk-O6C2UGBY.js +0 -7
@@ -1 +1 @@
1
- import{a}from"./chunk-PPKPCXJD.js";import"./chunk-IZTIYR5Q.js";import"./chunk-V44SRRYR.js";import"./chunk-U6XEU573.js";import"./chunk-VLOX6KOM.js";import"./chunk-3AV3GTMP.js";import"./chunk-H2ORWIEY.js";import"./chunk-O6C2UGBY.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
1
+ import{a}from"./chunk-LWI5K6T4.js";import"./chunk-IZTIYR5Q.js";import"./chunk-6VKQT2J3.js";import"./chunk-NIRD7ETU.js";import"./chunk-QY3UKLDE.js";import"./chunk-3AV3GTMP.js";import"./chunk-KLEF5D3A.js";import"./chunk-JZ5Z2BRO.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
@@ -1 +1 @@
1
- import{f as Z}from"./chunk-RMDLJN4L.js";import{b as B,i as V,j as X,k as J,l as Y,m as z,n as K}from"./chunk-BL4BN6RU.js";import{e as Q}from"./chunk-2ZAKZEXW.js";import{d as G,e as S,f as W}from"./chunk-G5BXZT6F.js";import{e as $,f as q}from"./chunk-H2ORWIEY.js";import{a as c}from"./chunk-ZLLER3HP.js";import{createHash as ie}from"node:crypto";var _=c(e=>ie("sha256").update(e).digest("hex"),"sha256"),ee=1.3,H=4,le=20;function ue(e,r){if(!e.configured||r<=0)return H;let n=Math.ceil(e.minPairs*ee/r);return Math.min(le,Math.max(H,n))}c(ue,"passCapFor");function ce(e,r=10,n=H){if(e<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let s=Math.ceil(r*ee),t=Math.min(n,Math.ceil(s/e)),a=t*e;return a<r?{passes:t,expectedPairs:a,feasible:!1,reason:`${e} live case(s) x ${n} passes = ${e*n} pairs at best, below the ${r} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:t,expectedPairs:a,feasible:!0}}c(ce,"planPasses");var pe=60,de=c(e=>typeof e=="object"&&e!==null&&typeof e.withScore=="number"&&typeof e.withoutScore=="number","isPair");function ge(e,r,n){let s=[...e].sort((t,a)=>Date.parse(a.createdAt)-Date.parse(t.createdAt));for(let t of s){if(t.applied)continue;let a=t.gates?.accumulation;if(!a||typeof a!="object"||a.priorContentHash!==r||a.targetPairs!==n||typeof a.candidateContentHash!="string"||!Array.isArray(a.pairs))continue;let p=a.pairs.filter(de);if(p.length===a.pairs.length&&!(p.length>=n))return{promotionId:t.id,candidateContentHash:a.candidateContentHash,pairs:p,runs:typeof a.runs=="number"?a.runs:1}}return null}c(ge,"findOpenAccumulation");function me(e,r){let n=r.accumulate??(e.autoEvolveAccumulate===!0||e.autoEvolveAccumulate==="true"),s=r.accumulateTargetPairs??e.autoEvolveAccumulateTarget,t=typeof s=="string"?Number.parseInt(s,10):s,a=typeof t=="number"&&Number.isInteger(t)&&t>0?t:pe;return{enabled:n,targetPairs:a}}c(me,"readAccumulateConfig");function fe(e){let r=e.accumulateEnabled&&e.pairCount<e.targetPairs;return{apply:e.consented&&!r,peeking:r}}c(fe,"resolveApply");async function Ae(e,r){let n=c(o=>r?.logger?.info?.(o)??console.log(o),"log"),{evalTargetId:s}=e,t=`[cron_instruction_evolution] ${s}`,a=await $(`/api/eval-targets/${s}`),p=a.metadata??{};if(X(p))return n(`${t}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let y=be(p);if(y==null)return n(`${t}: 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"};let f=(await $(`/api/eval-targets/${s}/evals`)).filter(o=>!o.retiredAt);if(f.length===0)return{skipped:"no-live-cases"};let R=V(p);R.note&&n(`${t}: ${R.note}`);let d=ce(f.length,R.minPairs,ue(R,f.length));if(!d.feasible)return n(`${t}: cannot reach a sufficient verdict \u2014 ${d.reason}`),{skipped:"cannot-reach-min-n",reason:d.reason};let te=J({liveCases:f.length,passes:d.passes});n(`${t}: budget for this run \u2014 ${K(te)}`);let E=await $(`/api/eval-targets/${s}/judge-calibration`);if(!E.powerCheck.adequate){let o=(E.powerCheck.reasons??[]).join("; ");return n(`${t}: not adequately powered, skipping before spending budget \u2014 ${o}`),{skipped:"not-adequate",reason:o}}let M=W,ne=Date.now()-M*24*60*60*1e3,T=await $(`/api/eval-targets/${s}/promotions?limit=200`),O=T.promotions.filter(o=>o.applied&&Date.parse(o.createdAt)>=ne).length;if(O>=S)return n(`${t}: change budget looks exhausted (${O}/${S} applied in ${M}d), skipping before spending budget`),{skipped:"budget-exhausted"};let A=G();if(!A.green)return n(`${t}: A/A canary is RED \u2014 halting. ${A.failures.join(" | ")}`),{skipped:"canary-red",reason:A.failures.join(" | ")};let L=a.content,k=_(L),l=me(p,e),b=l.enabled?ge(T.promotions,k,l.targetPairs):null,v,x,w=[],C=0,N=B;if(b){let o=await $(`/api/promotions/${b.promotionId}`);if(_(o.toContent)!==b.candidateContentHash)return n(`${t}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:b.promotionId};v=o.toContent,x=o.proposalRationale??"",w=b.pairs,C=b.runs,N=0,n(`${t}: continuing accumulation ${b.promotionId} \u2014 ${w.length}/${l.targetPairs} pair(s) carried from ${C} prior run(s)`)}else{let o=E.caseDiscrimination?.cases??[],u=await Z({currentContent:a.content,targetType:a.type,targetName:a.name,immutableSections:y,evidence:{nonDiscriminating:o.filter(i=>!i.discriminating).map(i=>`${i.name??i.assertion??"unnamed"} \u2014 ${i.note}`),weakest:o.filter(i=>i.discriminating&&i.withPassRate<i.withoutPassRate).map(i=>({name:i.name??i.assertion??"unnamed",withPassRate:i.withPassRate,withoutPassRate:i.withoutPassRate})),notes:[]}});if(!u.ok)return n(`${t}: no usable proposal \u2014 ${u.reason}`),{skipped:"no-proposal",reason:u.reason};v=u.proposal.candidateContent,x=u.proposal.rationale}n(`${t}: measuring ${f.length} case(s) x ${d.passes} pass(es) = up to ${d.expectedPairs} pairs, candidate vs prior version`);let h=[],j=[],ae=Date.now(),U=0,I=0;for(let o=1;o<=d.passes;o++){let u=await Q({cases:f,candidateContent:v,priorVersionContent:L,concurrency:e.concurrency??2,runNumber:o,opts:{targetId:s,targetVersion:a.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:a.type,targetName:a.name},onLog:n});h.push(...u.pairs),j.push(...u.results),U+=u.completed,I+=u.failed,n(`${t}: pass ${o}/${d.passes} \u2014 ${u.pairs.length} pair(s), running total ${h.length}`)}let P=[...w,...h],D=h.length>0,g=Y({runs:j,plannedPairs:d.expectedPairs,usablePairs:h.length,verdictPairs:D?P.length:h.length,proposalCalls:N,passes:d.passes,liveCases:f.length,wallMs:Date.now()-ae});if(n(`${t}: ${U} completed, ${I} failed, ${h.length} usable pair(s) \u2014 spent ~${g.modelCalls} model calls (${g.proposalCalls} proposal + ${g.executorCalls} executor + >=${g.graderCalls} grader) in ${(g.wallMs/6e4).toFixed(1)} min`+(D?`; the ${g.verdictPairs} pair(s) behind this verdict resolve +/-${z(g.mde)} at 80% power`:"")),!D)return{skipped:"no-pairs",reason:`${I} run(s) failed or were ungradeable`,cost:g};l.enabled&&n(`${t}: accumulated ${P.length}/${l.targetPairs} pair(s) over ${C+1} run(s) on one candidate`);let F=e.apply??(p.autoEvolveApply===!0||p.autoEvolveApply==="true"),{apply:oe,peeking:re}=fe({consented:F,accumulateEnabled:l.enabled,pairCount:P.length,targetPairs:l.targetPairs});F&&re&&n(`${t}: interim readout at ${P.length}/${l.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let m=await q(`/api/eval-targets/${s}/promotions`,{candidateContent:v,proposalSource:"llm",proposalRationale:x,pairs:P,canaryGreen:A.green,measuredAgainstContentHash:k,immutableSections:y,apply:oe,measurementCost:g,...l.enabled?{accumulation:{candidateContentHash:_(v),priorContentHash:k,targetPairs:l.targetPairs,carriedPairs:w.length,runs:C+1}}:{}});return n(`${t}: ${m.decision}${m.applied?" (APPLIED)":""} \u2014 ${m.rationale}`+(m.refusals.length>0?` | refusals: ${m.refusals.join("; ")}`:"")),{decision:m.decision,applied:m.applied,nPairs:P.length,promotionId:m.id,cost:g,...l.enabled?{carriedPairs:w.length,accumulationRuns:C+1}:{}}}c(Ae,"cronInstructionEvolution");function be(e){let r=e.immutableSections;return r==null||!Array.isArray(r)?null:r.filter(n=>typeof n=="string")}c(be,"readImmutableSections");export{ee as a,H as b,le as c,ue as d,ce as e,pe as f,ge as g,me as h,fe as i,Ae as j,be as k};
1
+ import{f as Z}from"./chunk-RMDLJN4L.js";import{b as B,i as V,j as X,k as J,l as Y,m as z,n as K}from"./chunk-BL4BN6RU.js";import{e as Q}from"./chunk-DBELYMDA.js";import{d as G,e as S,f as W}from"./chunk-G5BXZT6F.js";import{e as $,f as q}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";import{createHash as ie}from"node:crypto";var _=c(e=>ie("sha256").update(e).digest("hex"),"sha256"),ee=1.3,H=4,le=20;function ue(e,r){if(!e.configured||r<=0)return H;let n=Math.ceil(e.minPairs*ee/r);return Math.min(le,Math.max(H,n))}c(ue,"passCapFor");function ce(e,r=10,n=H){if(e<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let s=Math.ceil(r*ee),t=Math.min(n,Math.ceil(s/e)),a=t*e;return a<r?{passes:t,expectedPairs:a,feasible:!1,reason:`${e} live case(s) x ${n} passes = ${e*n} pairs at best, below the ${r} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:t,expectedPairs:a,feasible:!0}}c(ce,"planPasses");var pe=60,de=c(e=>typeof e=="object"&&e!==null&&typeof e.withScore=="number"&&typeof e.withoutScore=="number","isPair");function ge(e,r,n){let s=[...e].sort((t,a)=>Date.parse(a.createdAt)-Date.parse(t.createdAt));for(let t of s){if(t.applied)continue;let a=t.gates?.accumulation;if(!a||typeof a!="object"||a.priorContentHash!==r||a.targetPairs!==n||typeof a.candidateContentHash!="string"||!Array.isArray(a.pairs))continue;let p=a.pairs.filter(de);if(p.length===a.pairs.length&&!(p.length>=n))return{promotionId:t.id,candidateContentHash:a.candidateContentHash,pairs:p,runs:typeof a.runs=="number"?a.runs:1}}return null}c(ge,"findOpenAccumulation");function me(e,r){let n=r.accumulate??(e.autoEvolveAccumulate===!0||e.autoEvolveAccumulate==="true"),s=r.accumulateTargetPairs??e.autoEvolveAccumulateTarget,t=typeof s=="string"?Number.parseInt(s,10):s,a=typeof t=="number"&&Number.isInteger(t)&&t>0?t:pe;return{enabled:n,targetPairs:a}}c(me,"readAccumulateConfig");function fe(e){let r=e.accumulateEnabled&&e.pairCount<e.targetPairs;return{apply:e.consented&&!r,peeking:r}}c(fe,"resolveApply");async function Ae(e,r){let n=c(o=>r?.logger?.info?.(o)??console.log(o),"log"),{evalTargetId:s}=e,t=`[cron_instruction_evolution] ${s}`,a=await $(`/api/eval-targets/${s}`),p=a.metadata??{};if(X(p))return n(`${t}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let y=be(p);if(y==null)return n(`${t}: 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"};let f=(await $(`/api/eval-targets/${s}/evals`)).filter(o=>!o.retiredAt);if(f.length===0)return{skipped:"no-live-cases"};let R=V(p);R.note&&n(`${t}: ${R.note}`);let d=ce(f.length,R.minPairs,ue(R,f.length));if(!d.feasible)return n(`${t}: cannot reach a sufficient verdict \u2014 ${d.reason}`),{skipped:"cannot-reach-min-n",reason:d.reason};let te=J({liveCases:f.length,passes:d.passes});n(`${t}: budget for this run \u2014 ${K(te)}`);let E=await $(`/api/eval-targets/${s}/judge-calibration`);if(!E.powerCheck.adequate){let o=(E.powerCheck.reasons??[]).join("; ");return n(`${t}: not adequately powered, skipping before spending budget \u2014 ${o}`),{skipped:"not-adequate",reason:o}}let M=W,ne=Date.now()-M*24*60*60*1e3,T=await $(`/api/eval-targets/${s}/promotions?limit=200`),O=T.promotions.filter(o=>o.applied&&Date.parse(o.createdAt)>=ne).length;if(O>=S)return n(`${t}: change budget looks exhausted (${O}/${S} applied in ${M}d), skipping before spending budget`),{skipped:"budget-exhausted"};let A=G();if(!A.green)return n(`${t}: A/A canary is RED \u2014 halting. ${A.failures.join(" | ")}`),{skipped:"canary-red",reason:A.failures.join(" | ")};let L=a.content,k=_(L),l=me(p,e),b=l.enabled?ge(T.promotions,k,l.targetPairs):null,v,x,w=[],C=0,N=B;if(b){let o=await $(`/api/promotions/${b.promotionId}`);if(_(o.toContent)!==b.candidateContentHash)return n(`${t}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:b.promotionId};v=o.toContent,x=o.proposalRationale??"",w=b.pairs,C=b.runs,N=0,n(`${t}: continuing accumulation ${b.promotionId} \u2014 ${w.length}/${l.targetPairs} pair(s) carried from ${C} prior run(s)`)}else{let o=E.caseDiscrimination?.cases??[],u=await Z({currentContent:a.content,targetType:a.type,targetName:a.name,immutableSections:y,evidence:{nonDiscriminating:o.filter(i=>!i.discriminating).map(i=>`${i.name??i.assertion??"unnamed"} \u2014 ${i.note}`),weakest:o.filter(i=>i.discriminating&&i.withPassRate<i.withoutPassRate).map(i=>({name:i.name??i.assertion??"unnamed",withPassRate:i.withPassRate,withoutPassRate:i.withoutPassRate})),notes:[]}});if(!u.ok)return n(`${t}: no usable proposal \u2014 ${u.reason}`),{skipped:"no-proposal",reason:u.reason};v=u.proposal.candidateContent,x=u.proposal.rationale}n(`${t}: measuring ${f.length} case(s) x ${d.passes} pass(es) = up to ${d.expectedPairs} pairs, candidate vs prior version`);let h=[],j=[],ae=Date.now(),U=0,I=0;for(let o=1;o<=d.passes;o++){let u=await Q({cases:f,candidateContent:v,priorVersionContent:L,concurrency:e.concurrency??2,runNumber:o,opts:{targetId:s,targetVersion:a.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:a.type,targetName:a.name},onLog:n});h.push(...u.pairs),j.push(...u.results),U+=u.completed,I+=u.failed,n(`${t}: pass ${o}/${d.passes} \u2014 ${u.pairs.length} pair(s), running total ${h.length}`)}let P=[...w,...h],D=h.length>0,g=Y({runs:j,plannedPairs:d.expectedPairs,usablePairs:h.length,verdictPairs:D?P.length:h.length,proposalCalls:N,passes:d.passes,liveCases:f.length,wallMs:Date.now()-ae});if(n(`${t}: ${U} completed, ${I} failed, ${h.length} usable pair(s) \u2014 spent ~${g.modelCalls} model calls (${g.proposalCalls} proposal + ${g.executorCalls} executor + >=${g.graderCalls} grader) in ${(g.wallMs/6e4).toFixed(1)} min`+(D?`; the ${g.verdictPairs} pair(s) behind this verdict resolve +/-${z(g.mde)} at 80% power`:"")),!D)return{skipped:"no-pairs",reason:`${I} run(s) failed or were ungradeable`,cost:g};l.enabled&&n(`${t}: accumulated ${P.length}/${l.targetPairs} pair(s) over ${C+1} run(s) on one candidate`);let F=e.apply??(p.autoEvolveApply===!0||p.autoEvolveApply==="true"),{apply:oe,peeking:re}=fe({consented:F,accumulateEnabled:l.enabled,pairCount:P.length,targetPairs:l.targetPairs});F&&re&&n(`${t}: interim readout at ${P.length}/${l.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let m=await q(`/api/eval-targets/${s}/promotions`,{candidateContent:v,proposalSource:"llm",proposalRationale:x,pairs:P,canaryGreen:A.green,measuredAgainstContentHash:k,immutableSections:y,apply:oe,measurementCost:g,...l.enabled?{accumulation:{candidateContentHash:_(v),priorContentHash:k,targetPairs:l.targetPairs,carriedPairs:w.length,runs:C+1}}:{}});return n(`${t}: ${m.decision}${m.applied?" (APPLIED)":""} \u2014 ${m.rationale}`+(m.refusals.length>0?` | refusals: ${m.refusals.join("; ")}`:"")),{decision:m.decision,applied:m.applied,nPairs:P.length,promotionId:m.id,cost:g,...l.enabled?{carriedPairs:w.length,accumulationRuns:C+1}:{}}}c(Ae,"cronInstructionEvolution");function be(e){let r=e.immutableSections;return r==null||!Array.isArray(r)?null:r.filter(n=>typeof n=="string")}c(be,"readImmutableSections");export{ee as a,H as b,le as c,ue as d,ce as e,pe as f,ge as g,me as h,fe as i,Ae as j,be as k};
@@ -1,4 +1,4 @@
1
- import{f as x}from"./chunk-I2DZGJRR.js";import{a as r}from"./chunk-ZLLER3HP.js";import{execSync as h}from"node:child_process";import{existsSync as c,mkdirSync as y,readFileSync as p,writeFileSync as a,unlinkSync as S,copyFileSync as $}from"node:fs";import{homedir as f}from"node:os";import{join as i,dirname as N}from"node:path";function q(t,e=f()){let o=["claude_code"];return c(i(e,".codex"))&&o.push("codex"),c(i(t,".cursor"))&&o.push("cursor"),c(i(t,".github"))&&o.push("copilot_agent"),c(i(t,".agents"))&&o.push("antigravity"),o}r(q,"detectInstalledTools");function U(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({command:`${e}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],beforeSubmitPrompt:[o("user-prompt")],afterFileEdit:[o("post-tool-use")],beforeShellExecution:[o("post-tool-use")],afterShellExecution:[o("post-tool-use")],beforeMCPExecution:[o("post-tool-use")],afterMCPExecution:[o("post-tool-use")],afterAgentResponse:[o("assistant-response")],stop:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(U,"generateCursorHooksConfig");function L(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({type:"command",bash:`${e}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],userPromptSubmitted:[o("user-prompt")],postToolUse:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(L,"generateCopilotHooksConfig");function B(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({type:"command",command:`${e}rulemetric hooks run ${n}`}),"mk");return{SessionStart:[{hooks:[o("session-start")]}],UserPromptSubmit:[{hooks:[o("user-prompt")]}],PostToolUse:[{matcher:".*",hooks:[o("post-tool-use")]}],SessionEnd:[{hooks:[o("session-end")]}]}}r(B,"generateClaudeCodeHooksConfig");function J(t){if(!c(t))return{settings:{},recoveredBackup:null};let e=p(t,"utf-8");try{return{settings:JSON.parse(e),recoveredBackup:null}}catch{let o=`${t}.corrupt.bak`;return a(o,e),{settings:{},recoveredBackup:o}}}r(J,"readClaudeSettings");function b(t,e){y(N(t),{recursive:!0});let o=null;return c(t)&&(o=`${t}.bak`,$(t,o)),a(t,JSON.stringify(e,null,2)+`
1
+ import{f as x}from"./chunk-HFGO5762.js";import{a as r}from"./chunk-ZLLER3HP.js";import{execSync as h}from"node:child_process";import{existsSync as c,mkdirSync as y,readFileSync as p,writeFileSync as a,unlinkSync as S,copyFileSync as $}from"node:fs";import{homedir as f}from"node:os";import{join as i,dirname as N}from"node:path";function q(t,e=f()){let o=["claude_code"];return c(i(e,".codex"))&&o.push("codex"),c(i(t,".cursor"))&&o.push("cursor"),c(i(t,".github"))&&o.push("copilot_agent"),c(i(t,".agents"))&&o.push("antigravity"),o}r(q,"detectInstalledTools");function U(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({command:`${e}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],beforeSubmitPrompt:[o("user-prompt")],afterFileEdit:[o("post-tool-use")],beforeShellExecution:[o("post-tool-use")],afterShellExecution:[o("post-tool-use")],beforeMCPExecution:[o("post-tool-use")],afterMCPExecution:[o("post-tool-use")],afterAgentResponse:[o("assistant-response")],stop:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(U,"generateCursorHooksConfig");function L(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({type:"command",bash:`${e}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],userPromptSubmitted:[o("user-prompt")],postToolUse:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(L,"generateCopilotHooksConfig");function B(t){let e=t?`PATH="${t}:$PATH" `:"",o=r(n=>({type:"command",command:`${e}rulemetric hooks run ${n}`}),"mk");return{SessionStart:[{hooks:[o("session-start")]}],UserPromptSubmit:[{hooks:[o("user-prompt")]}],PostToolUse:[{matcher:".*",hooks:[o("post-tool-use")]}],SessionEnd:[{hooks:[o("session-end")]}]}}r(B,"generateClaudeCodeHooksConfig");function J(t){if(!c(t))return{settings:{},recoveredBackup:null};let e=p(t,"utf-8");try{return{settings:JSON.parse(e),recoveredBackup:null}}catch{let o=`${t}.corrupt.bak`;return a(o,e),{settings:{},recoveredBackup:o}}}r(J,"readClaudeSettings");function b(t,e){y(N(t),{recursive:!0});let o=null;return c(t)&&(o=`${t}.bak`,$(t,o)),a(t,JSON.stringify(e,null,2)+`
2
2
  `),{backupPath:o}}r(b,"writeClaudeSettingsWithBackup");function k(t){if(!c(t))return{};let e=p(t,"utf-8");try{return JSON.parse(e)}catch{try{a(`${t}.corrupt.bak`,e)}catch{}return null}}r(k,"readMergeableJson");function Q(t,e){let o=B(e),n=t.hooks??{};for(let[s,u]of Object.entries(o)){let l=n[s]??[];l.some(m=>m?.hooks?.some(d=>typeof d?.command=="string"&&d.command.includes("rulemetric")))||(n[s]=[...l,...u])}t.hooks=n}r(Q,"mergeClaudeCodeHooks");function Z(t){if(!t.hooks||typeof t.hooks!="object")return!1;let e=t.hooks;return Object.values(e).some(o=>Array.isArray(o)&&o.some(n=>n?.hooks?.some(s=>typeof s?.command=="string"&&s.command.includes("rulemetric"))))}r(Z,"hasRulemetricClaudeHooks");function D(t){if(!t.hooks||typeof t.hooks!="object")return!1;let e=t.hooks,o=0;for(let n of Object.keys(e)){let s=e[n];if(!Array.isArray(s))continue;let u=s.filter(l=>{let g=l?.hooks?.some(m=>typeof m?.command=="string"&&m.command.includes("rulemetric"));return g&&(o+=1),!g});u.length===0?delete e[n]:e[n]=u}return Object.keys(e).length===0&&delete t.hooks,o>0}r(D,"removeClaudeCodeHooks");var X="localhost,127.0.0.1,*.supabase.co,*.supabase.in";function tt(t,e){return i(t,e?"settings.json":"settings.local.json")}r(tt,"claudeSettingsInstallPath");function M(t,e){let o=t.env;if(!o||typeof o!="object")return!1;let n=!1,s=o.HTTPS_PROXY;(s===`http://localhost:${e}`||s===`http://127.0.0.1:${e}`)&&(delete o.HTTPS_PROXY,n=!0),o.NO_PROXY===X&&(delete o.NO_PROXY,n=!0);let u=o.NODE_EXTRA_CA_CERTS;return typeof u=="string"&&u.includes(".mitmproxy")&&u.endsWith("mitmproxy-ca-cert.pem")&&(delete o.NODE_EXTRA_CA_CERTS,n=!0),n&&Object.keys(o).length===0&&delete t.env,n}r(M,"removeRulemetricProxyEnv");function C(t,e){let o=D(t),n=M(t,e),s=x(t);return{removedHooks:o,removedProxyEnv:n,removedStatusline:s,removed:o||n||s}}r(C,"removeRulemetricMachineState");function et(t,e){let o={migrated:!1,backupPath:null,removedHooks:!1,removedProxyEnv:!1,removedStatusline:!1,removed:!1};if(!c(t))return o;let n;try{n=JSON.parse(p(t,"utf-8"))}catch{return o}let s=C(n,e);if(!s.removed)return o;let{backupPath:u}=b(t,n);return{...s,migrated:!0,backupPath:u}}r(et,"migrateSharedClaudeSettings");function ot(t,e){let o=[];for(let n of["settings.json","settings.local.json"]){let s=i(t,n);if(!c(s))continue;let{settings:u,recoveredBackup:l}=J(s),g=C(u,e);g.removed&&b(s,u),o.push({...g,configPath:s,fileName:n,recoveredBackup:l,changed:g.removed})}return o}r(ot,"cleanClaudeSettingsFiles");function R(t,e){if(!c(t))return null;let o=i(t,"hooks.json"),n=U(e),s=k(o);if(s===null)return null;let u=s,l={...u.hooks??{}},g=r(d=>typeof d=="object"&&d!==null&&"command"in d&&typeof d.command=="string"&&d.command.includes("rulemetric"),"isRulemetricHook");for(let[d,w]of Object.entries(n.hooks)){let j=(l[d]??[]).filter(_=>!g(_));l[d]=[...j,...w]}let m={version:u.version??n.version,hooks:l};return a(o,JSON.stringify(m,null,2)+`
3
3
  `),o}r(R,"writeCursorHooksToDir");function nt(t,e){return R(i(t,".cursor"),e)}r(nt,"writeCursorHooks");function rt(t,e=f()){let o=i(e,".cursor");return c(o)?R(o,t):null}r(rt,"writeCursorUserHooks");function st(t,e){let o=i(t,".github");if(!c(o))return null;let n=i(o,"hooks");y(n,{recursive:!0});let s=i(n,"rulemetric.json"),u=L(e);return a(s,JSON.stringify(u,null,2)+`
4
4
  `),s}r(st,"writeCopilotHooks");function A(t){if(!c(t))return!1;let e;try{e=JSON.parse(p(t,"utf-8"))}catch{return!1}if(!e.hooks)return!1;let o=!1;for(let[n,s]of Object.entries(e.hooks)){let u=s.filter(l=>{if(typeof l!="object"||l===null||!("command"in l))return!0;let g=l.command;return typeof g=="string"&&g.includes("rulemetric")?(o=!0,!1):!0});u.length===0?delete e.hooks[n]:e.hooks[n]=u}return o&&a(t,JSON.stringify(e,null,2)+`
@@ -0,0 +1 @@
1
+ import{a as p,c as Cr}from"./chunk-ZLLER3HP.js";import{boolean as So,pgTable as Or,text as Ze,timestamp as Ct,uuid as Ko}from"drizzle-orm/pg-core";import{pgTable as Xe,text as re,timestamp as Re,jsonb as Eo,uuid as $,primaryKey as bo}from"drizzle-orm/pg-core";var u=Xe("organizations",{id:$("id").primaryKey().defaultRandom(),name:re("name").unique().notNull(),slug:re("slug").unique().notNull(),metadata:Eo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Re("updated_at",{withTimezone:!0}).defaultNow()}),h=Xe("teams",{id:$("id").primaryKey().defaultRandom(),orgId:$("org_id").references(()=>u.id,{onDelete:"cascade"}),name:re("name").notNull(),slug:re("slug").notNull(),metadata:Eo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()}),se=Xe("user_organizations",{userId:$("user_id").notNull(),orgId:$("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:re("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[bo({columns:[e.userId,e.orgId]})]),ie=Xe("user_teams",{userId:$("user_id").notNull(),teamId:$("team_id").references(()=>h.id,{onDelete:"cascade"}).notNull(),role:re("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[bo({columns:[e.userId,e.teamId]})]);var o=Or("profiles",{id:Ko("id").primaryKey(),email:Ze("email"),displayName:Ze("display_name"),activeOrgId:Ko("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:So("is_superadmin").notNull().default(!1),claudeCodePlan:Ze("claude_code_plan"),planSource:Ze("plan_source").notNull().default("detected"),setupCompletedAt:Ct("setup_completed_at",{withTimezone:!0}),liveSendSkipped:So("live_send_skipped").notNull().default(!1),createdAt:Ct("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ct("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Hr,text as de,timestamp as Lt,jsonb as qo,uuid as nt,integer as Ur,boolean as Vr,index as Bt}from"drizzle-orm/pg-core";import{boolean as Mr,jsonb as Lr,pgTable as Mt,primaryKey as Co,text as Q,timestamp as je,uniqueIndex as qt,uuid as W}from"drizzle-orm/pg-core";import{sql as Br}from"drizzle-orm";import{pgTable as Ot,text as x,timestamp as L,jsonb as et,uuid as R,integer as tt,boolean as qr,uniqueIndex as ot,index as De}from"drizzle-orm/pg-core";var r=Ot("instructions",{id:R("id").primaryKey().defaultRandom(),name:x("name").notNull(),description:x("description").notNull(),type:x("type").notNull().default("instruction"),scope:x("scope").notNull(),scopeRef:R("scope_ref"),version:x("version").notNull(),content:x("content").notNull(),frontmatter:et("frontmatter").notNull(),slots:et("slots"),tags:x("tags").array(),compatibility:x("compatibility").array(),createdBy:R("created_by"),createdAt:L("created_at",{withTimezone:!0}).defaultNow(),updatedAt:L("updated_at",{withTimezone:!0}).defaultNow(),archived:qr("archived").default(!1),archivedAt:L("archived_at",{withTimezone:!0}),archivedBy:R("archived_by"),forkedFromId:R("forked_from_id").references(()=>r.id,{onDelete:"set null"}),upstreamVersion:x("upstream_version"),badge:x("badge"),contentHash:x("content_hash"),contextIdentity:x("context_identity"),scanScore:tt("scan_score"),scanFindings:et("scan_findings"),popularityScore:tt("popularity_score"),sourceUpdatedAt:L("source_updated_at",{withTimezone:!0})},e=>[ot("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),De("idx_instructions_scope").on(e.scope,e.scopeRef),De("idx_instructions_created_by").on(e.createdBy),De("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),De("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),Po=Ot("instruction_version_identities",{id:R("id").primaryKey().defaultRandom(),instructionId:R("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),contentHash:x("content_hash").notNull(),versionOrdinal:tt("version_ordinal").notNull(),content:x("content"),firstSeenAt:L("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:L("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:L("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ot("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),ot("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),De("idx_ivi_instruction").on(e.instructionId)]),ae=Ot("instruction_versions",{id:R("id").primaryKey().defaultRandom(),instructionId:R("instruction_id").references(()=>r.id,{onDelete:"cascade"}),versionNumber:tt("version_number").notNull(),content:x("content").notNull(),frontmatter:et("frontmatter").notNull(),changeSummary:x("change_summary"),createdBy:R("created_by"),createdAt:L("created_at",{withTimezone:!0}).defaultNow()},e=>[ot("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var s=Mt("projects",{id:W("id").primaryKey().defaultRandom(),orgId:W("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Q("name").notNull(),description:Q("description"),githubRepo:Q("github_repo"),gitRemoteUrl:Q("git_remote_url"),gitRootCommit:Q("git_root_commit"),gitRemoteAliases:Q("git_remote_aliases").array().notNull().default([]),metadata:Lr("metadata"),createdBy:W("created_by"),createdAt:je("created_at",{withTimezone:!0}).defaultNow(),updatedAt:je("updated_at",{withTimezone:!0}).defaultNow()},e=>[qt("projects_org_name_idx").on(e.orgId,e.name),qt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Br`${e.gitRemoteUrl} IS NOT NULL`)]),B=Mt("project_instructions",{projectId:W("project_id").references(()=>s.id,{onDelete:"cascade"}).notNull(),instructionId:W("instruction_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),addedAt:je("added_at",{withTimezone:!0}).defaultNow(),addedBy:W("added_by")},e=>[Co({columns:[e.projectId,e.instructionId]})]),Oo=Mt("project_checkouts",{projectId:W("project_id").references(()=>s.id,{onDelete:"cascade"}).notNull(),path:Q("path").notNull(),isWorktree:Mr("is_worktree").notNull().default(!1),firstSeen:je("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:je("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[Co({columns:[e.projectId,e.path]}),qt("project_checkouts_path_unique").on(e.path)]);var g=Hr("agent_runs",{id:nt("id").primaryKey().defaultRandom(),userId:nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:nt("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:nt("project_id").references(()=>s.id,{onDelete:"set null"}),projectPath:de("project_path"),gitRemote:de("git_remote"),baseBranch:de("base_branch"),title:de("title"),prompt:de("prompt"),toolSpec:qo("tool_spec").notNull().default([]),autoWorktree:Vr("auto_worktree").notNull().default(!0),status:de("status").notNull().default("pending"),sessionCount:Ur("session_count").notNull().default(0),metadata:qo("metadata").notNull().default({}),createdAt:Lt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Lt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Lt("completed_at",{withTimezone:!0})},e=>[Bt("idx_agent_runs_user").on(e.userId),Bt("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Bt("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Ht,text as I,timestamp as ke,jsonb as X,uuid as E,integer as rt,uniqueIndex as Mo,index as D}from"drizzle-orm/pg-core";var d=Ht("sessions",{id:E("id").primaryKey().defaultRandom(),userId:E("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:E("project_id").references(()=>s.id,{onDelete:"set null"}),orgId:E("org_id").references(()=>u.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:ke("started_at",{withTimezone:!0}).notNull(),endedAt:ke("ended_at",{withTimezone:!0}),eventCount:rt("event_count").default(0),tokenUsage:X("token_usage"),analysis:X("analysis"),analyzedAt:ke("analyzed_at",{withTimezone:!0}),analyzedEventCount:rt("analyzed_event_count"),analyzedTurnCount:rt("analyzed_turn_count"),metadata:X("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:E("run_id").references(()=>g.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:ke("created_at",{withTimezone:!0}).defaultNow()},e=>[D("idx_sessions_user").on(e.userId),D("idx_sessions_tool").on(e.tool),D("idx_sessions_started_at").on(e.startedAt),D("idx_sessions_project").on(e.projectId),D("idx_sessions_org_started_at").on(e.orgId,e.startedAt),D("idx_sessions_run").on(e.runId),Mo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),ue=Ht("session_events",{id:E("id").primaryKey().defaultRandom(),sessionId:E("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:rt("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:X("tool_input"),toolOutput:X("tool_output"),tokenUsage:X("token_usage"),model:I("model"),timestamp:ke("timestamp",{withTimezone:!0}).notNull(),metadata:X("metadata").default({})},e=>[Mo("session_events_session_sequence_idx").on(e.sessionId,e.sequence),D("idx_session_events_session_id").on(e.sessionId),D("idx_session_events_event_type").on(e.eventType),D("idx_session_events_model").on(e.model)]),H=Ht("session_instructions",{sessionId:E("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:E("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),linkMethod:I("link_method").notNull(),contentHash:I("content_hash")},e=>[D("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as Fr,text as le,timestamp as Ut,uuid as Ee,integer as Lo,index as st}from"drizzle-orm/pg-core";var T=Fr("memories",{id:Ee("id").primaryKey().defaultRandom(),userId:Ee("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:Ee("org_id"),projectId:Ee("project_id").references(()=>s.id,{onDelete:"set null"}),version:Lo("version").notNull().default(1),parentId:Ee("parent_id").references(()=>T.id,{onDelete:"set null"}),kind:le("kind").notNull(),title:le("title").notNull(),body:le("body").notNull(),source:le("source").notNull(),status:le("status").notNull().default("active"),trustClass:le("trust_class"),trustVersion:Lo("trust_version"),trustComputedAt:Ut("trust_computed_at",{withTimezone:!0}),createdAt:Ut("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Ut("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[st("idx_memories_user").on(e.userId),st("idx_memories_project").on(e.projectId),st("idx_memories_parent").on(e.parentId),st("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as Gr,text as be,timestamp as Vt,uuid as Ft,integer as Bo,jsonb as Jr,index as Ho}from"drizzle-orm/pg-core";var Uo=Gr("memory_experiments",{id:Ft("id").primaryKey().defaultRandom(),memoryId:Ft("memory_id").notNull().references(()=>T.id,{onDelete:"cascade"}),userId:Ft("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:Bo("memory_version").notNull().default(1),taskPrompt:be("task_prompt").notNull(),expectations:be("expectations").array().notNull().default([]),trials:Bo("trials").notNull().default(10),model:be("model"),status:be("status").notNull().default("pending"),result:Jr("result").$type(),error:be("error"),createdAt:Vt("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:Vt("started_at",{withTimezone:!0}),completedAt:Vt("completed_at",{withTimezone:!0})},e=>[Ho("idx_memory_experiments_memory").on(e.memoryId),Ho("idx_memory_experiments_user").on(e.userId)]);import{boolean as Yr,date as $r,index as Gt,integer as Qr,jsonb as Wr,pgTable as Jt,text as A,timestamp as U,uniqueIndex as Xr,uuid as ce}from"drizzle-orm/pg-core";var Vo=Jt("announcements",{id:ce("id").primaryKey().defaultRandom(),version:A("version").notNull().unique(),releaseDate:$r("release_date").notNull(),subject:A("subject").notNull(),htmlBody:A("html_body").notNull(),textBody:A("text_body").notNull(),sections:Wr("sections").notNull().default({}),status:A("status").notNull().default("draft"),recipientCount:Qr("recipient_count"),sentAt:U("sent_at",{withTimezone:!0}),sentBy:ce("sent_by"),error:A("error"),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:U("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Gt("idx_announcements_status").on(e.status),Gt("idx_announcements_created").on(e.createdAt)]),Fo=Jt("announcement_deliveries",{id:ce("id").primaryKey().defaultRandom(),announcementId:ce("announcement_id").notNull(),userId:ce("user_id").notNull(),email:A("email").notNull(),status:A("status").notNull().default("pending"),providerId:A("provider_id"),error:A("error"),sentAt:U("sent_at",{withTimezone:!0}),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Xr("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Gt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Go=Jt("notification_preferences",{userId:ce("user_id").primaryKey(),productAnnouncements:Yr("product_announcements").notNull().default(!0),unsubscribeToken:A("unsubscribe_token").notNull().unique(),unsubscribedAt:U("unsubscribed_at",{withTimezone:!0}),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:U("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{pgTable as Zr,text as Yt,timestamp as it,uuid as at,index as Jo}from"drizzle-orm/pg-core";var b=Zr("org_invitations",{id:at("id").primaryKey().defaultRandom(),orgId:at("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:Yt("email").notNull(),role:Yt("role").notNull().default("member"),teamId:at("team_id").references(()=>h.id,{onDelete:"set null"}),invitedBy:at("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:Yt("token").notNull().unique(),expiresAt:it("expires_at",{withTimezone:!0}).notNull(),acceptedAt:it("accepted_at",{withTimezone:!0}),revokedAt:it("revoked_at",{withTimezone:!0}),createdAt:it("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jo("idx_org_invitations_token").on(e.token),Jo("idx_org_invitations_org").on(e.orgId)]);import{pgTable as es,text as ts,timestamp as os,jsonb as ns,uuid as $t,index as Yo}from"drizzle-orm/pg-core";var _e=es("instruction_events",{id:$t("id").primaryKey().defaultRandom(),instructionId:$t("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),eventType:ts("event_type").notNull(),actorId:$t("actor_id").notNull(),metadata:ns("metadata"),createdAt:os("created_at",{withTimezone:!0}).defaultNow()},e=>[Yo("idx_instruction_events_instruction").on(e.instructionId),Yo("idx_instruction_events_type").on(e.eventType)]);import{pgTable as $o,text as dt,timestamp as Qo,uuid as j,integer as Wo,index as me,unique as rs}from"drizzle-orm/pg-core";var S=$o("treatment_assignments",{id:j("id").primaryKey().defaultRandom(),userId:j("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:j("treatment_id").notNull(),treatmentVersion:Wo("treatment_version").notNull().default(1),projectId:j("project_id").references(()=>s.id,{onDelete:"set null"}),assignedBy:j("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:dt("method").notNull(),assignedAt:Qo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[me("idx_treatment_assignments_user").on(e.userId),me("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),me("idx_treatment_assignments_project").on(e.projectId)]),K=$o("treatment_exposures",{id:j("id").primaryKey().defaultRandom(),sessionId:j("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),userId:j("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:j("treatment_id").notNull(),treatmentVersion:Wo("treatment_version").notNull().default(1),assignmentId:j("assignment_id").references(()=>S.id,{onDelete:"set null"}),method:dt("method").notNull(),exposedAt:Qo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[rs("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),me("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),me("idx_treatment_exposures_user").on(e.userId),me("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as ss,text as Qt,timestamp as is,uuid as ut,integer as as,index as Xo,uniqueIndex as ds}from"drizzle-orm/pg-core";var Zo=ss("pending_treatment_exposures",{id:ut("id").primaryKey().defaultRandom(),userId:ut("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Qt("external_session_id").notNull(),treatmentType:Qt("treatment_type").notNull(),treatmentId:ut("treatment_id").notNull(),treatmentVersion:as("treatment_version").notNull().default(1),method:Qt("method").notNull().default("injected"),projectId:ut("project_id").references(()=>s.id,{onDelete:"set null"}),createdAt:is("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ds("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Xo("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Xo("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as us,text as pe,timestamp as Wt,uuid as Xt,jsonb as ls,uniqueIndex as cs,index as en}from"drizzle-orm/pg-core";var lt=us("session_terminal_targets",{id:Xt("id").primaryKey().defaultRandom(),userId:Xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Xt("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:pe("external_session_id"),kind:pe("kind").notNull(),target:pe("target").notNull(),status:pe("status").notNull().default("active"),attachCommand:pe("attach_command").notNull(),projectPath:pe("project_path"),metadata:ls("metadata").notNull().default({}),lastSeenAt:Wt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Wt("updated_at",{withTimezone:!0}).defaultNow()},e=>[cs("idx_session_terminal_targets_user_target").on(e.userId,e.target),en("idx_session_terminal_targets_session").on(e.sessionId),en("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as _s,index as ct,jsonb as tn,pgTable as ms,text as Z,timestamp as Se,uuid as _t,integer as on}from"drizzle-orm/pg-core";var nn=ms("session_send_jobs",{id:_t("id").primaryKey().defaultRandom(),userId:_t("user_id").notNull(),sessionId:_t("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:_t("terminal_target_id").references(()=>lt.id,{onDelete:"set null"}),target:Z("target").notNull(),message:Z("message").notNull(),submit:_s("submit").notNull().default(!0),delivery:Z("delivery").notNull().default("live"),status:Z("status").notNull().default("pending"),result:tn("result"),error:Z("error"),attempts:on("attempts").notNull().default(0),taskKind:Z("task_kind"),payload:tn("payload"),claimedBy:Z("claimed_by"),claimedAt:Se("claimed_at",{withTimezone:!0}),leaseExpiresAt:Se("lease_expires_at",{withTimezone:!0}),leaseRecoveries:on("lease_recoveries").notNull().default(0),createdAt:Se("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Se("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Se("completed_at",{withTimezone:!0})},e=>[ct("idx_session_send_jobs_user").on(e.userId),ct("idx_session_send_jobs_session").on(e.sessionId),ct("idx_session_send_jobs_status").on(e.status),ct("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as sn,text as ee,timestamp as mt,jsonb as an,uuid as V,integer as ps,boolean as fs,uniqueIndex as xs,index as rn,primaryKey as Ns}from"drizzle-orm/pg-core";var z=sn("packs",{id:V("id").primaryKey().defaultRandom(),name:ee("name").notNull(),description:ee("description").notNull(),scope:ee("scope").notNull(),scopeRef:V("scope_ref"),version:ee("version").notNull().default("1.0.0"),tags:ee("tags").array(),badge:ee("badge"),metadata:an("metadata"),createdBy:V("created_by"),createdAt:mt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mt("updated_at",{withTimezone:!0}).defaultNow(),archived:fs("archived").default(!1),archivedAt:mt("archived_at",{withTimezone:!0}),archivedBy:V("archived_by"),forkedFromId:V("forked_from_id").references(()=>z.id,{onDelete:"set null"}),upstreamVersion:ee("upstream_version")},e=>[xs("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),rn("idx_packs_scope").on(e.scope,e.scopeRef),rn("idx_packs_created_by").on(e.createdBy)]),F=sn("pack_instructions",{packId:V("pack_id").references(()=>z.id,{onDelete:"cascade"}).notNull(),instructionId:V("instruction_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),position:ps("position").notNull().default(0),slotOverrides:an("slot_overrides"),addedAt:mt("added_at",{withTimezone:!0}).defaultNow(),addedBy:V("added_by")},e=>[Ns({columns:[e.packId,e.instructionId]})]);import{pgTable as gs,text as Zt,timestamp as vs,jsonb as hs,uuid as eo,index as fe}from"drizzle-orm/pg-core";var xe=gs("instruction_usage_events",{id:eo("id").primaryKey().defaultRandom(),instructionId:eo("instruction_id").references(()=>r.id,{onDelete:"set null"}),userId:eo("user_id").notNull(),surface:Zt("surface").notNull(),action:Zt("action").notNull(),metadata:hs("metadata"),traceId:Zt("trace_id"),createdAt:vs("created_at",{withTimezone:!0}).defaultNow()},e=>[fe("idx_usage_events_instruction").on(e.instructionId),fe("idx_usage_events_user").on(e.userId),fe("idx_usage_events_surface").on(e.surface),fe("idx_usage_events_action").on(e.action),fe("idx_usage_events_created_at").on(e.createdAt),fe("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as Is,text as pt,timestamp as dn,jsonb as ys,uuid as un,index as to}from"drizzle-orm/pg-core";var ln=Is("worker_connections",{id:un("id").primaryKey().defaultRandom(),userId:un("user_id").notNull(),workerType:pt("worker_type").notNull().default("mcp"),clientName:pt("client_name").notNull(),clientVersion:pt("client_version"),workerVersion:pt("worker_version"),lastHeartbeat:dn("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:dn("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:ys("metadata")},e=>[to("idx_worker_connections_user").on(e.userId),to("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),to("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Ts,text as ft,timestamp as ws,jsonb as As,uuid as cn,index as _n}from"drizzle-orm/pg-core";var mn=Ts("cli_setup_events",{id:cn("id").primaryKey().defaultRandom(),userId:cn("user_id").notNull(),deviceId:ft("device_id").notNull(),event:ft("event").notNull(),cliVersion:ft("cli_version"),os:ft("os"),props:As("props").notNull().default({}),createdAt:ws("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[_n("idx_cli_setup_events_user").on(e.userId,e.createdAt),_n("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as zs,text as te,integer as Rs,boolean as Ds,timestamp as js,jsonb as ks,uuid as Es,index as pn}from"drizzle-orm/pg-core";var fn=zs("cli_error_events",{id:Es("id").primaryKey().defaultRandom(),deviceId:te("device_id"),event:te("event").notNull(),command:te("command"),statusCode:Rs("status_code"),message:te("message"),cliVersion:te("cli_version"),os:te("os"),nodeVersion:te("node_version"),proxied:Ds("proxied"),props:ks("props").notNull().default({}),createdAt:js("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[pn("idx_cli_error_events_created").on(e.createdAt),pn("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as bs}from"drizzle-orm";import{pgTable as oe,text as _,timestamp as v,jsonb as w,uuid as c,integer as P,boolean as Ke,index as N,unique as xn}from"drizzle-orm/pg-core";var n=oe("eval_targets",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),name:_("name").notNull(),type:_("type").notNull(),content:_("content").notNull(),description:_("description").notNull().default(""),metadata:w("metadata").notNull().default({}),version:P("version").notNull().default(1),parentId:c("parent_id").references(()=>n.id,{onDelete:"set null"}),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("eval_targets_name_user_idx").on(e.name,e.userId),N("idx_eval_targets_user").on(e.userId),N("idx_eval_targets_type").on(e.type),N("idx_eval_targets_parent").on(e.parentId)]),C=oe("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),name:_("name").notNull(),prompt:_("prompt").notNull(),expectedOutput:_("expected_output").notNull().default(""),files:w("files").notNull().default([]),expectations:w("expectations").notNull().default([]),retiredAt:v("retired_at",{withTimezone:!0}),retiredReason:_("retired_reason"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:v("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[N("idx_evals_target").on(e.evalTargetId),N("idx_evals_target_active").on(e.evalTargetId).where(bs`${e.retiredAt} IS NULL`)]),k=oe("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>C.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),evalTargetVersion:P("eval_target_version").notNull(),configuration:_("configuration").notNull(),runNumber:P("run_number").notNull().default(1),iteration:P("iteration").notNull().default(1),status:_("status").notNull().default("completed"),outputs:w("outputs").notNull().default({}),timing:w("timing").notNull().default({}),grading:w("grading").notNull().default({}),comparison:w("comparison"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_runs_eval").on(e.evalId),N("idx_eval_runs_target").on(e.evalTargetId),N("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),Nn=oe("eval_comparisons",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),targetAId:c("target_a_id").notNull().references(()=>n.id,{onDelete:"cascade"}),targetBId:c("target_b_id").notNull().references(()=>n.id,{onDelete:"cascade"}),targetAVersion:P("target_a_version").notNull(),targetBVersion:P("target_b_version").notNull(),isSwapped:Ke("is_swapped").notNull().default(!1),winnerTargetId:c("winner_target_id").references(()=>n.id,{onDelete:"set null"}),perEval:w("per_eval").notNull().default([]),overall:w("overall").notNull().default({}),rawOutput:_("raw_output"),model:_("model"),status:_("status").notNull().default("completed"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_comparisons_target_a").on(e.targetAId),N("idx_eval_comparisons_target_b").on(e.targetBId),N("idx_eval_comparisons_user").on(e.userId)]),gn=oe("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>k.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),expectationIndex:P("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ke("judge_passed").notNull(),judgeMethod:_("judge_method").notNull(),judgeModel:_("judge_model"),verdict:_("verdict").notNull(),flag:_("flag"),note:_("note"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_grade_annotations_target").on(e.evalTargetId),N("idx_eval_grade_annotations_run").on(e.evalRunId),xn("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),vn=oe("judge_reviewer_verdicts",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),evalRunId:c("eval_run_id").notNull().references(()=>k.id,{onDelete:"cascade"}),expectationIndex:P("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ke("judge_passed").notNull(),humanPassed:Ke("human_passed").notNull(),reviewerEngine:_("reviewer_engine").notNull(),reviewerModel:_("reviewer_model").notNull(),reviewerPassed:Ke("reviewer_passed").notNull(),resolvedAt:v("resolved_at",{withTimezone:!0}),resolution:_("resolution"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_jrv_target").on(e.evalTargetId),xn("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),Ne=oe("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),iteration:P("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as oo}from"drizzle-orm";import{pgTable as Ss,text as O,timestamp as Ks,jsonb as xt,uuid as Nt,boolean as Ps,index as Pe,uniqueIndex as Cs}from"drizzle-orm/pg-core";var hn=Ss("instruction_promotions",{id:Nt("id").primaryKey().defaultRandom(),userId:Nt("user_id").notNull(),evalTargetId:Nt("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),instructionId:Nt("instruction_id").references(()=>r.id,{onDelete:"set null"}),fromContentHash:O("from_content_hash").notNull(),toContentHash:O("to_content_hash").notNull(),fromContent:O("from_content").notNull(),toContent:O("to_content").notNull(),proposalSource:O("proposal_source").notNull(),proposalRationale:O("proposal_rationale").notNull().default(""),decision:O("decision").notNull(),applied:Ps("applied").notNull().default(!1),refusals:xt("refusals").notNull().default([]),rationale:O("rationale").notNull().default(""),effectClass:O("effect_class").notNull(),verdict:xt("verdict").notNull().default({}),gates:xt("gates").notNull().default({}),touchedSections:xt("touched_sections").notNull().default([]),createdAt:Ks("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Pe("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(oo`${e.applied}`),Pe("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Pe("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Pe("idx_instruction_promotions_to_hash").on(e.toContentHash),Cs("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(oo`${e.applied}`),Pe("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(oo`${e.applied}`)]);import{pgTable as yn,text as no,timestamp as ro,jsonb as Tn,uuid as ge,integer as Ce,index as gt,real as In}from"drizzle-orm/pg-core";var ve=yn("trigger_evals",{id:ge("id").primaryKey().defaultRandom(),evalTargetId:ge("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:ge("user_id").notNull(),queries:Tn("queries").notNull().default([]),status:no("status").notNull().default("pending_review"),trainIndices:Ce("train_indices").array().default([]),testIndices:Ce("test_indices").array().default([]),createdAt:ro("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ro("updated_at",{withTimezone:!0}).defaultNow()},e=>[gt("idx_trigger_evals_target").on(e.evalTargetId),gt("idx_trigger_evals_user").on(e.userId)]),he=yn("optimization_runs",{id:ge("id").primaryKey().defaultRandom(),evalTargetId:ge("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:ge("user_id").notNull(),type:no("type").notNull(),iteration:Ce("iteration").notNull(),inputVersion:Ce("input_version").notNull(),outputVersion:Ce("output_version"),trainScore:In("train_score"),testScore:In("test_score"),analysis:Tn("analysis").notNull().default({}),status:no("status").notNull().default("running"),createdAt:ro("created_at",{withTimezone:!0}).defaultNow()},e=>[gt("idx_optimization_runs_target").on(e.evalTargetId),gt("idx_optimization_runs_user").on(e.userId)]);import{pgTable as Os,text as G,timestamp as qs,jsonb as Oe,uuid as so,integer as io,real as Ms,index as qe,uniqueIndex as wn}from"drizzle-orm/pg-core";var J=Os("context_snapshots",{id:so("id").primaryKey().defaultRandom(),sessionId:so("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:so("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:io("sequence").notNull().default(0),provider:G("provider").notNull(),model:G("model").notNull(),systemPrompt:G("system_prompt").notNull(),injectedInstructions:Oe("injected_instructions").notNull().default([]),messagesSummary:Oe("messages_summary").notNull(),tools:Oe("tools").notNull().default([]),systemHash:G("system_hash").notNull(),requestHash:G("request_hash").notNull().default(""),toolsHash:G("tools_hash"),injectedHash:G("injected_hash"),messagesDelta:Oe("messages_delta").default([]),messagesDeltaRef:G("messages_delta_ref"),maxTokens:io("max_tokens"),temperature:Ms("temperature"),estimatedTokens:io("estimated_tokens"),capturedAt:qs("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Oe("metadata").default({})},e=>[qe("idx_context_snapshots_session").on(e.sessionId),qe("idx_context_snapshots_user").on(e.userId),qe("idx_context_snapshots_hash").on(e.systemHash),qe("idx_context_snapshots_request_hash").on(e.requestHash),wn("idx_snapshots_session_request").on(e.sessionId,e.requestHash),wn("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),qe("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as Ls,text as An,timestamp as Bs,jsonb as Hs,integer as Us,index as Vs}from"drizzle-orm/pg-core";var zn=Ls("content_blobs",{hash:An("hash").primaryKey(),contentType:An("content_type").notNull(),content:Hs("content").notNull(),sizeBytes:Us("size_bytes").notNull().default(0),createdAt:Bs("created_at",{withTimezone:!0}).defaultNow()},e=>[Vs("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Fs,text as vt,timestamp as Me,jsonb as ht,uuid as ao,index as It,integer as Rn}from"drizzle-orm/pg-core";var Ie=Fs("eval_jobs",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull(),evalTargetId:ao("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),status:vt("status").notNull().default("pending"),config:ht("config").notNull().default({}),progress:ht("progress").notNull().default({}),result:ht("result"),error:vt("error"),attempts:Rn("attempts").notNull().default(0),taskKind:vt("task_kind"),payload:ht("payload"),claimedBy:vt("claimed_by"),claimedAt:Me("claimed_at",{withTimezone:!0}),leaseExpiresAt:Me("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Rn("lease_recoveries").notNull().default(0),createdAt:Me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Me("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Me("completed_at",{withTimezone:!0})},e=>[It("idx_eval_jobs_user").on(e.userId),It("idx_eval_jobs_target").on(e.evalTargetId),It("idx_eval_jobs_status").on(e.status),It("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as Gs,text as Le,timestamp as Be,jsonb as Dn,uuid as jn,integer as kn,index as En}from"drizzle-orm/pg-core";var bn=Gs("agent_jobs",{id:jn("id").primaryKey().defaultRandom(),userId:jn("user_id").notNull(),taskKind:Le("task_kind").notNull(),status:Le("status").notNull().default("pending"),payload:Dn("payload").notNull(),dedupeKey:Le("dedupe_key"),result:Dn("result"),error:Le("error"),attempts:kn("attempts").notNull().default(0),claimedBy:Le("claimed_by"),claimedAt:Be("claimed_at",{withTimezone:!0}),leaseExpiresAt:Be("lease_expires_at",{withTimezone:!0}),leaseRecoveries:kn("lease_recoveries").notNull().default(0),createdAt:Be("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Be("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Be("completed_at",{withTimezone:!0})},e=>[En("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),En("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as Js,text as He,timestamp as Ue,jsonb as yt,uuid as uo,index as Tt,integer as Sn}from"drizzle-orm/pg-core";var Kn=Js("insights_jobs",{id:uo("id").primaryKey().defaultRandom(),userId:uo("user_id").notNull(),status:He("status").notNull().default("pending"),projectPath:He("project_path"),projectId:uo("project_id").references(()=>s.id,{onDelete:"set null"}),config:yt("config").notNull().default({}),progress:yt("progress").notNull().default({}),result:yt("result"),error:He("error"),attempts:Sn("attempts").notNull().default(0),taskKind:He("task_kind"),payload:yt("payload"),claimedBy:He("claimed_by"),claimedAt:Ue("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ue("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Sn("lease_recoveries").notNull().default(0),createdAt:Ue("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ue("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ue("completed_at",{withTimezone:!0})},e=>[Tt("idx_insights_jobs_user").on(e.userId),Tt("idx_insights_jobs_status").on(e.status),Tt("idx_insights_jobs_pending").on(e.userId,e.status),Tt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Ys,text as lo,timestamp as wt,uuid as Pn,index as $s,uniqueIndex as Qs}from"drizzle-orm/pg-core";var ye=Ys("api_keys",{id:Pn("id").primaryKey().defaultRandom(),userId:Pn("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:lo("name").notNull(),keyHash:lo("key_hash").notNull(),keyPrefix:lo("key_prefix").notNull(),lastUsedAt:wt("last_used_at",{withTimezone:!0}),expiresAt:wt("expires_at",{withTimezone:!0}),revokedAt:wt("revoked_at",{withTimezone:!0}),createdAt:wt("created_at",{withTimezone:!0}).defaultNow()},e=>[$s("idx_api_keys_user").on(e.userId),Qs("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Ws,text as co,timestamp as Cn,uuid as Xs,index as Zs}from"drizzle-orm/pg-core";var On=Ws("extension_auth_codes",{code:co("code").primaryKey(),userId:Xs("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:co("editor"),email:co("email"),expiresAt:Cn("expires_at",{withTimezone:!0}).notNull(),createdAt:Cn("created_at",{withTimezone:!0}).defaultNow()},e=>[Zs("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as ei,text as ti,timestamp as qn,jsonb as oi,uuid as _o,index as Mn}from"drizzle-orm/pg-core";var Te=ei("eval_conversations",{id:_o("id").primaryKey().defaultRandom(),evalTargetId:_o("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:_o("user_id").notNull(),messages:oi("messages").notNull().default([]),status:ti("status").notNull().default("active"),createdAt:qn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:qn("updated_at",{withTimezone:!0}).defaultNow()},e=>[Mn("idx_eval_conversations_target").on(e.evalTargetId),Mn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as ni,text as q,timestamp as Ln,jsonb as ri,uuid as mo}from"drizzle-orm/pg-core";var Bn=ni("skill_submissions",{id:mo("id").primaryKey().defaultRandom(),skillId:q("skill_id").notNull(),name:q("name").notNull(),description:q("description").notNull(),category:q("category").notNull(),tools:q("tools").array().notNull(),tags:q("tags").array().default([]),content:q("content").notNull(),status:q("status").notNull().default("pending"),submittedBy:mo("submitted_by").notNull(),reviewedBy:mo("reviewed_by"),reviewNote:q("review_note"),metadata:ri("metadata"),createdAt:Ln("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ln("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as si,text as Ve,timestamp as Hn,jsonb as ii,uuid as ai,uniqueIndex as di,index as Un}from"drizzle-orm/pg-core";var Vn=si("harness_releases",{id:ai("id").primaryKey().defaultRandom(),harness:Ve("harness").notNull(),version:Ve("version").notNull(),publishedAt:Hn("published_at",{withTimezone:!0}).notNull(),title:Ve("title"),body:Ve("body"),categories:ii("categories").default({}),url:Ve("url"),createdAt:Hn("created_at",{withTimezone:!0}).defaultNow()},e=>[di("idx_harness_releases_unique").on(e.harness,e.version),Un("idx_harness_releases_harness").on(e.harness),Un("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as ui,text as we,timestamp as Fn,jsonb as li,uuid as Gn,index as Jn,uniqueIndex as ci}from"drizzle-orm/pg-core";var po=ui("notifications",{id:Gn("id").primaryKey().defaultRandom(),userId:Gn("user_id").notNull(),type:we("type").notNull(),title:we("title").notNull(),body:we("body"),url:we("url"),sourceTable:we("source_table"),sourceId:we("source_id"),metadata:li("metadata").notNull().default({}),readAt:Fn("read_at",{withTimezone:!0}),createdAt:Fn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jn("idx_notifications_user_created").on(e.userId,e.createdAt),Jn("idx_notifications_user_unread").on(e.userId),ci("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as _i,text as Fe,timestamp as Ge,jsonb as fo,uuid as xo,index as At,integer as Yn}from"drizzle-orm/pg-core";var Ae=_i("launch_jobs",{id:xo("id").primaryKey().defaultRandom(),userId:xo("user_id").notNull(),tool:Fe("tool").notNull(),status:Fe("status").notNull().default("pending"),config:fo("config").notNull().default({}),result:fo("result"),error:Fe("error"),attempts:Yn("attempts").notNull().default(0),taskKind:Fe("task_kind"),payload:fo("payload"),claimedBy:Fe("claimed_by"),claimedAt:Ge("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ge("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Yn("lease_recoveries").notNull().default(0),createdAt:Ge("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ge("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ge("completed_at",{withTimezone:!0}),runId:xo("run_id").references(()=>g.id,{onDelete:"set null"})},e=>[At("idx_launch_jobs_user").on(e.userId),At("idx_launch_jobs_status").on(e.status),At("idx_launch_jobs_pending").on(e.userId,e.status),At("idx_launch_jobs_run").on(e.runId)]);import{pgTable as $n,uuid as M,text as Je,real as mi,timestamp as zt,boolean as pi,uniqueIndex as fi,index as Ye}from"drizzle-orm/pg-core";var No=$n("instruction_suggestions",{id:M("id").primaryKey().defaultRandom(),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:M("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),projectPath:Je("project_path").notNull(),projectId:M("project_id").references(()=>s.id,{onDelete:"set null"}),score:mi("score").notNull(),reason:Je("reason").notNull(),generatedAt:zt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:pi("is_stale").notNull().default(!1),dismissedAt:zt("dismissed_at",{withTimezone:!0}),acceptedAt:zt("accepted_at",{withTimezone:!0}),promotedToInstructionId:M("promoted_to_instruction_id").references(()=>r.id,{onDelete:"set null"})},e=>[fi("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),Ye("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Ye("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Ye("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Qn=$n("instruction_suggestion_events",{id:M("id").primaryKey().defaultRandom(),suggestionId:M("suggestion_id").notNull().references(()=>No.id,{onDelete:"cascade"}),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:Je("event_type").notNull(),tool:Je("tool"),sessionId:M("session_id"),projectPath:Je("project_path").notNull(),createdAt:zt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ye("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Ye("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as xi,text as go,integer as Ni,numeric as $e,timestamp as vo,index as gi,primaryKey as vi}from"drizzle-orm/pg-core";var Wn=xi("model_pricing",{provider:go("provider").notNull(),modelId:go("model_id").notNull(),inputPerM:$e("input_per_m").notNull(),outputPerM:$e("output_per_m").notNull(),cacheReadPerM:$e("cache_read_per_m").notNull(),cacheWrite5mPerM:$e("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:$e("cache_write_1h_per_m").notNull(),contextWindow:Ni("context_window"),effectiveFrom:vo("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:vo("effective_until",{withTimezone:!0}),source:go("source").notNull(),verifiedAt:vo("verified_at",{withTimezone:!0})},e=>[vi({columns:[e.provider,e.modelId,e.effectiveFrom]}),gi("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as hi,text as ne,numeric as Xn,timestamp as Zn,uuid as er,jsonb as Ii,index as tr}from"drizzle-orm/pg-core";var or=hi("limit_observations",{id:er("id").primaryKey().defaultRandom(),observedAt:Zn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:ne("provider").notNull(),plan:ne("plan").notNull(),limitType:ne("limit_type").notNull(),value:Xn("value").notNull(),unit:ne("unit").notNull(),comparator:ne("comparator").notNull().default("="),resetsAt:Zn("resets_at",{withTimezone:!0}),sourceType:ne("source_type").notNull(),sourceUrl:ne("source_url"),sourceEvidence:Ii("source_evidence"),confidence:Xn("confidence").notNull(),userId:er("user_id")},e=>[tr("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),tr("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as yi,text as Rt,timestamp as Ti,uuid as wi,jsonb as Ai,boolean as zi,uniqueIndex as Ri}from"drizzle-orm/pg-core";var nr=yi("provider_docs_snapshots",{id:wi("id").primaryKey().defaultRandom(),fetchedAt:Ti("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:Rt("provider").notNull(),docUrl:Rt("doc_url").notNull(),contentHash:Rt("content_hash").notNull(),content:Rt("content").notNull(),parseSuccess:zi("parse_success").notNull(),parseErrors:Ai("parse_errors")},e=>[Ri("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Di,text as Dt,numeric as rr,timestamp as sr,uuid as ji,primaryKey as ki,index as Ei}from"drizzle-orm/pg-core";var ir=Di("plan_limits_active",{provider:Dt("provider").notNull(),plan:Dt("plan").notNull(),limitType:Dt("limit_type").notNull(),value:rr("value").notNull(),unit:Dt("unit").notNull(),effectiveFrom:sr("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:sr("effective_until",{withTimezone:!0}),confidence:rr("confidence").notNull(),sourceObservationIds:ji("source_observation_ids").array().notNull()},e=>[ki({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Ei("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as bi,text as ho,timestamp as Si,uuid as ar,jsonb as Ki,index as Pi}from"drizzle-orm/pg-core";var dr=bi("alert_dispatches",{id:ar("id").primaryKey().defaultRandom(),userId:ar("user_id").notNull(),alertKey:ho("alert_key").notNull(),severity:ho("severity").notNull(),lastDispatchedAt:Si("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:Ki("last_state").notNull(),channel:ho("channel").notNull()},e=>[Pi("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{pgTable as Ci,text as Io,timestamp as ur,uuid as yo,integer as Oi,index as qi,unique as Mi}from"drizzle-orm/pg-core";var lr=Ci("scaffolding_fingerprints",{id:yo("id").primaryKey().defaultRandom(),userId:yo("user_id").notNull(),harness:Io("harness").notNull(),model:Io("model").notNull(),toolsHash:Io("tools_hash").notNull(),firstSeenAt:ur("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:ur("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:Oi("snapshot_count").notNull().default(1),firstSessionId:yo("first_session_id")},e=>[Mi("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),qi("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as Li,text as To,timestamp as Bi,jsonb as Hi,uuid as cr,integer as Ui,unique as Vi}from"drizzle-orm/pg-core";var _r=Li("scaffolding_segments",{id:cr("id").primaryKey().defaultRandom(),userId:cr("user_id").notNull(),harness:To("harness").notNull(),model:To("model").notNull(),coreNames:Hi("core_names").notNull(),coreHash:To("core_hash").notNull(),activeFingerprints:Ui("active_fingerprints").notNull(),computedAt:Bi("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Vi("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{drizzle as Nr}from"drizzle-orm/postgres-js";import gr from"postgres";var jt={};Cr(jt,{agentJobs:()=>bn,agentRuns:()=>g,agentRunsRelations:()=>sa,alertDispatches:()=>dr,announcementDeliveries:()=>Fo,announcements:()=>Vo,apiKeys:()=>ye,apiKeysRelations:()=>Gi,benchmarks:()=>Ne,benchmarksRelations:()=>Na,cliErrorEvents:()=>fn,cliSetupEvents:()=>mn,contentBlobs:()=>zn,contextSnapshots:()=>J,contextSnapshotsRelations:()=>ya,evalComparisons:()=>Nn,evalConversations:()=>Te,evalConversationsRelations:()=>Ia,evalGradeAnnotations:()=>gn,evalJobs:()=>Ie,evalJobsRelations:()=>ha,evalRuns:()=>k,evalRunsRelations:()=>xa,evalTargets:()=>n,evalTargetsRelations:()=>pa,evals:()=>C,evalsRelations:()=>fa,extensionAuthCodes:()=>On,harnessReleases:()=>Vn,insightsJobs:()=>Kn,instructionEvents:()=>_e,instructionEventsRelations:()=>Zi,instructionPromotions:()=>hn,instructionSuggestionEvents:()=>Qn,instructionSuggestions:()=>No,instructionUsageEvents:()=>xe,instructionUsageEventsRelations:()=>ma,instructionVersionIdentities:()=>Po,instructionVersions:()=>ae,instructionVersionsRelations:()=>ta,instructions:()=>r,instructionsRelations:()=>Xi,judgeReviewerVerdicts:()=>vn,launchJobs:()=>Ae,launchJobsRelations:()=>ia,limitObservations:()=>or,memories:()=>T,memoriesRelations:()=>ea,memoryExperiments:()=>Uo,modelPricing:()=>Wn,notificationPreferences:()=>Go,notifications:()=>po,optimizationRuns:()=>he,optimizationRunsRelations:()=>va,orgInvitations:()=>b,orgInvitationsRelations:()=>$i,organizations:()=>u,organizationsRelations:()=>Ji,packInstructions:()=>F,packInstructionsRelations:()=>_a,packs:()=>z,packsRelations:()=>ca,pendingTreatmentExposures:()=>Zo,planLimitsActive:()=>ir,profiles:()=>o,profilesRelations:()=>Fi,projectCheckouts:()=>Oo,projectInstructions:()=>B,projectInstructionsRelations:()=>na,projects:()=>s,projectsRelations:()=>oa,providerDocsSnapshots:()=>nr,scaffoldingFingerprints:()=>lr,scaffoldingSegments:()=>_r,sessionEvents:()=>ue,sessionEventsRelations:()=>aa,sessionInstructions:()=>H,sessionInstructionsRelations:()=>da,sessionSendJobs:()=>nn,sessionTerminalTargets:()=>lt,sessions:()=>d,sessionsRelations:()=>ra,skillSubmissions:()=>Bn,teams:()=>h,teamsRelations:()=>Yi,treatmentAssignments:()=>S,treatmentAssignmentsRelations:()=>ua,treatmentExposures:()=>K,treatmentExposuresRelations:()=>la,triggerEvals:()=>ve,triggerEvalsRelations:()=>ga,userOrganizations:()=>se,userOrganizationsRelations:()=>Qi,userTeams:()=>ie,userTeamsRelations:()=>Wi,workerConnections:()=>ln});import{relations as i}from"drizzle-orm";var Fi=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(J),apiKeys:e(ye)})),Gi=i(ye,({one:e})=>({profile:e(o,{fields:[ye.userId],references:[o.id]})})),Ji=i(u,({many:e})=>({teams:e(h),userOrganizations:e(se),projects:e(s),invitations:e(b)})),Yi=i(h,({one:e,many:t})=>({organization:e(u,{fields:[h.orgId],references:[u.id]}),userTeams:t(ie),invitations:t(b)})),$i=i(b,({one:e})=>({organization:e(u,{fields:[b.orgId],references:[u.id]}),team:e(h,{fields:[b.teamId],references:[h.id]}),inviter:e(o,{fields:[b.invitedBy],references:[o.id]})})),Qi=i(se,({one:e})=>({organization:e(u,{fields:[se.orgId],references:[u.id]})})),Wi=i(ie,({one:e})=>({team:e(h,{fields:[ie.teamId],references:[h.id]})})),Xi=i(r,({one:e,many:t})=>({versions:t(ae),projectInstructions:t(B),events:t(_e),usageEvents:t(xe),sessionInstructions:t(H),packInstructions:t(F),forkedFrom:e(r,{fields:[r.forkedFromId],references:[r.id]})})),Zi=i(_e,({one:e})=>({instruction:e(r,{fields:[_e.instructionId],references:[r.id]})})),ea=i(T,({one:e,many:t})=>({project:e(s,{fields:[T.projectId],references:[s.id]}),parent:e(T,{fields:[T.parentId],references:[T.id]}),versions:t(T)})),ta=i(ae,({one:e})=>({instruction:e(r,{fields:[ae.instructionId],references:[r.id]})})),oa=i(s,({one:e,many:t})=>({organization:e(u,{fields:[s.orgId],references:[u.id]}),projectInstructions:t(B),sessions:t(d)})),na=i(B,({one:e})=>({project:e(s,{fields:[B.projectId],references:[s.id]}),instruction:e(r,{fields:[B.instructionId],references:[r.id]})})),ra=i(d,({one:e,many:t})=>({profile:e(o,{fields:[d.userId],references:[o.id]}),project:e(s,{fields:[d.projectId],references:[s.id]}),run:e(g,{fields:[d.runId],references:[g.id]}),events:t(ue),sessionInstructions:t(H),treatmentExposures:t(K),contextSnapshots:t(J)})),sa=i(g,({one:e,many:t})=>({profile:e(o,{fields:[g.userId],references:[o.id]}),organization:e(u,{fields:[g.orgId],references:[u.id]}),project:e(s,{fields:[g.projectId],references:[s.id]}),sessions:t(d),launchJobs:t(Ae)})),ia=i(Ae,({one:e})=>({run:e(g,{fields:[Ae.runId],references:[g.id]})})),aa=i(ue,({one:e})=>({session:e(d,{fields:[ue.sessionId],references:[d.id]})})),da=i(H,({one:e})=>({session:e(d,{fields:[H.sessionId],references:[d.id]}),instruction:e(r,{fields:[H.instructionId],references:[r.id]})})),ua=i(S,({one:e,many:t})=>({owner:e(o,{fields:[S.userId],references:[o.id]}),project:e(s,{fields:[S.projectId],references:[s.id]}),exposures:t(K)})),la=i(K,({one:e})=>({session:e(d,{fields:[K.sessionId],references:[d.id]}),owner:e(o,{fields:[K.userId],references:[o.id]}),assignment:e(S,{fields:[K.assignmentId],references:[S.id]})})),ca=i(z,({one:e,many:t})=>({packInstructions:t(F),forkedFrom:e(z,{fields:[z.forkedFromId],references:[z.id]})})),_a=i(F,({one:e})=>({pack:e(z,{fields:[F.packId],references:[z.id]}),instruction:e(r,{fields:[F.instructionId],references:[r.id]})})),ma=i(xe,({one:e})=>({instruction:e(r,{fields:[xe.instructionId],references:[r.id]})})),pa=i(n,({one:e,many:t})=>({parent:e(n,{fields:[n.parentId],references:[n.id]}),evals:t(C),evalRuns:t(k),benchmarks:t(Ne),triggerEvals:t(ve),optimizationRuns:t(he),evalJobs:t(Ie),evalConversations:t(Te)})),fa=i(C,({one:e,many:t})=>({evalTarget:e(n,{fields:[C.evalTargetId],references:[n.id]}),runs:t(k)})),xa=i(k,({one:e})=>({eval:e(C,{fields:[k.evalId],references:[C.id]}),evalTarget:e(n,{fields:[k.evalTargetId],references:[n.id]})})),Na=i(Ne,({one:e})=>({evalTarget:e(n,{fields:[Ne.evalTargetId],references:[n.id]})})),ga=i(ve,({one:e})=>({evalTarget:e(n,{fields:[ve.evalTargetId],references:[n.id]})})),va=i(he,({one:e})=>({evalTarget:e(n,{fields:[he.evalTargetId],references:[n.id]})})),ha=i(Ie,({one:e})=>({evalTarget:e(n,{fields:[Ie.evalTargetId],references:[n.id]})})),Ia=i(Te,({one:e})=>({evalTarget:e(n,{fields:[Te.evalTargetId],references:[n.id]})})),ya=i(J,({one:e})=>({session:e(d,{fields:[J.sessionId],references:[d.id]}),profile:e(o,{fields:[J.userId],references:[o.id]})}));var Qe=0,mr=0,We=0,pr=0;var Ta=0;function wo(){Qe++,Qe>mr&&(mr=Qe)}p(wo,"trackDbOpStart");function Ao(){Qe>0&&Qe--}p(Ao,"trackDbOpEnd");function zo(){We++,We>pr&&(pr=We)}p(zo,"trackHeavyDbOpStart");function Ro(){We>0&&We--}p(Ro,"trackHeavyDbOpEnd");function fr(){Ta++}p(fr,"recordQueryDeadline");var Et,St,Do=!1,kt;var xr,Kt,bt;function vr(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}p(vr,"getEnv");function hr(){if(Do)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Et){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,a=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,l=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,m=Number(process.env.PG_IDLE_TIMEOUT)||5,f=Number(process.env.PG_KEEP_ALIVE_S)||60;St=gr(vr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:m,keep_alive:f,max_lifetime:300,connection:{application_name:e,...l>0?{statement_timeout:l}:{}}}),Et=Nr(St,{schema:jt})}return Et}p(hr,"getDb");function Ir(){if(Do)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!bt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Kt=gr(vr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:Number(process.env.PG_CONNECT_TIMEOUT_S)||10,idle_timeout:Number(process.env.PG_IDLE_TIMEOUT)||5,keep_alive:Number(process.env.PG_KEEP_ALIVE_S)||60,max_lifetime:300,connection:{application_name:e}}),bt=Nr(Kt,{schema:jt})}return bt}p(Ir,"getHeavyDb");async function wa(){if(kt)return kt;Do=!0;let e=St,t=xr,a=Kt;return St=void 0,Et=void 0,xr=void 0,Kt=void 0,bt=void 0,kt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),kt}p(wa,"closeDb");var Aa=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function yr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Aa.has(a)}p(yr,"isRetryableConnectError");var za=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Tr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&za.has(a)}p(Tr,"isRetryableResetError");async function wr(e,t={}){let a=t.attempts??3,l=t.baseMs??100,m;for(let f=0;f<a;f++)try{return await e()}catch(y){m=y;let ze=yr(y)||t.retryResets===!0&&Tr(y);if(f===a-1||!ze)throw y;await new Promise(Y=>setTimeout(Y,l*2**f))}throw m}p(wr,"withDbRetry");var Pt=class extends Error{static{p(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function Ar(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}p(Ar,"queryDeadlineMs");function Ra(e,t){let a,l=new Promise((m,f)=>{a=setTimeout(()=>{fr(),f(new Pt(t))},t);let y=a;typeof y.unref=="function"&&y.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}p(Ra,"raceWithDeadline");var zr=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Rr=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function jo(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(m,f,y){if(f==="then"){let Y=Reflect.get(m,f,y);return typeof Y!="function"?Y:(kr,Er)=>{let br=l?zo:wo,Sr=l?Ro:Ao;br();let ko=wr(()=>new Promise((Kr,Pr)=>Y.call(m,Kr,Pr)),{retryResets:t});return(a>0?Ra(ko,a):ko).finally(Sr).then(kr,Er)}}let ze=Reflect.get(m,f,y);return typeof ze=="function"?(...Y)=>jo(ze.apply(m,Y),t,a,l):ze}})}p(jo,"wrapBuilder");function Dr(e,t=!1){let a=t?zo:wo,l=t?Ro:Ao;a();try{return Promise.resolve(e()).finally(l)}catch(m){throw l(),m}}p(Dr,"gaugeTransaction");var jr=new Proxy({},{get(e,t){let a=hr(),l=a[t];if(typeof t=="string"&&zr.has(t)&&typeof l=="function"){let m=Rr.has(t),f=Ar();return(...y)=>jo(l.apply(a,y),m,f)}return t==="transaction"&&typeof l=="function"?(...m)=>Dr(()=>l.apply(a,m)):l}}),Da=new Proxy({},{get(e,t){let a=Ir(),l=a[t];if(typeof t=="string"&&zr.has(t)&&typeof l=="function"){let m=Rr.has(t);return(...f)=>jo(l.apply(a,f),m,0,!0)}return t==="transaction"&&typeof l=="function"?(...m)=>Dr(()=>l.apply(a,m),!0):l}});export{o as a,g as b,d as c,T as d,Uo as e,Vo as f,Fo as g,Go as h,hr as i,wa as j};
@@ -1,2 +1,2 @@
1
- import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-H2ORWIEY.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
1
+ import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith("#"))continue;let o=e.indexOf("=");if(o<0)continue;let r=e.slice(0,o).trim(),i=e.slice(o+1).trim();process.env[r]||(process.env[r]=i)}return!!(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)}catch{return!1}}c(C,"loadEnvFile");T();async function I(s){let t={totalSessions:0,totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalCacheReadTokens:0,totalCacheWriteTokens:0,totalCostUSD:0,providers:{}},n=await m(s);t.providers={};for(let a of n)t.providers[a.provider]=(t.providers[a.provider]||0)+1;let e=new E,o=n.filter(a=>a.provider==="claude");for(let a of o)try{let h=p.readdirSync(a.path).filter(f=>f.endsWith(".jsonl"));t.totalSessions+=h.length;for(let f of h){let v=p.readFileSync(u.join(a.path,f),"utf-8"),R=e.parse(v);for(let l of R.events)l.tokenUsage&&(t.totalCalls++,t.totalInputTokens+=l.tokenUsage.input,t.totalOutputTokens+=l.tokenUsage.output,t.totalCacheReadTokens+=l.tokenUsage.cacheRead??0,t.totalCacheWriteTokens+=l.tokenUsage.cacheWrite??0)}}catch{}let r=15,i=75;return t.totalCostUSD=Math.round((t.totalInputTokens/1e6*r+t.totalOutputTokens/1e6*i+t.totalCacheReadTokens/1e6*(r*.1)+t.totalCacheWriteTokens/1e6*(r*1.25))*100)/100,t}c(I,"loadLocalStats");async function U(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY,e=process.env.RULEMETRIC_ACCESS_TOKEN,o=n??e;if(!o)return null;let r=new URLSearchParams;s&&r.set("projectPath",s);try{let i=await fetch(`${t}/api/insights/compute?${r}`,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(5e3)});return i.ok?await i.json():null}catch{return null}}c(U,"loadApiInsights");async function g(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)return null;let e=new URLSearchParams;s&&e.set("projectPath",s);try{let o=await fetch(`${t}/api/insights/linked-instructions?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(5e3)});return o.ok?await o.json():null}catch{return null}}c(g,"loadLinkedInstructions");export{I as a,U as b,g as c};
@@ -1,4 +1,4 @@
1
- import{a as C}from"./chunk-4VZLIGMS.js";import{b as $}from"./chunk-CNOD6HWU.js";import{a as y}from"./chunk-4L2ZEIRE.js";import{c as f}from"./chunk-HMMO27U4.js";import{e as h,f as w}from"./chunk-H2ORWIEY.js";import{a as v}from"./chunk-ZLLER3HP.js";async function N(n,i,p){let{conversationId:a,messageId:g,messageContent:r}=n,o=await h(`/api/eval-targets/${i}`),c=await h(`/api/eval-targets/${i}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),t=e.findIndex(l=>l.id===g);if(t>=0&&e.slice(t+1).some(u=>u.role==="assistant"&&(u.type==="results"||u.type==="proposal"||u.type==="generated"||u.type==="text"))){p(`Message ${g} already processed \u2014 skipping (idempotency guard)`);return}let s=v(async(l,u,m)=>{await w(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:u,data:m})},"postMessage"),d=await _(o,c,e,r,p);p(`Action: ${d.action}`);try{switch(d.action){case"run_evals":await x(o,c,a,s,p);break;case"generate_cases":await k(o,i,a,s,p);break;case"analyze_results":case"propose_changes":await E(o,c,e,r,a,s,p);break;case"respond":await s(d.response,"text");break}}catch(l){let u=l instanceof Error?l.message:String(l);throw await s(`Something went wrong: ${u}`,"text").catch(()=>{}),l}}v(N,"processConversationJob");async function _(n,i,p,a,g){let r=p.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
1
+ import{a as C}from"./chunk-4VZLIGMS.js";import{b as $}from"./chunk-CNOD6HWU.js";import{a as y}from"./chunk-4L2ZEIRE.js";import{c as f}from"./chunk-HMMO27U4.js";import{e as h,f as w}from"./chunk-KLEF5D3A.js";import{a as v}from"./chunk-ZLLER3HP.js";async function N(n,i,p){let{conversationId:a,messageId:g,messageContent:r}=n,o=await h(`/api/eval-targets/${i}`),c=await h(`/api/eval-targets/${i}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),t=e.findIndex(l=>l.id===g);if(t>=0&&e.slice(t+1).some(u=>u.role==="assistant"&&(u.type==="results"||u.type==="proposal"||u.type==="generated"||u.type==="text"))){p(`Message ${g} already processed \u2014 skipping (idempotency guard)`);return}let s=v(async(l,u,m)=>{await w(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:u,data:m})},"postMessage"),d=await _(o,c,e,r,p);p(`Action: ${d.action}`);try{switch(d.action){case"run_evals":await x(o,c,a,s,p);break;case"generate_cases":await k(o,i,a,s,p);break;case"analyze_results":case"propose_changes":await E(o,c,e,r,a,s,p);break;case"respond":await s(d.response,"text");break}}catch(l){let u=l instanceof Error?l.message:String(l);throw await s(`Something went wrong: ${u}`,"text").catch(()=>{}),l}}v(N,"processConversationJob");async function _(n,i,p,a,g){let r=p.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
2
2
  `),o=`You are an eval assistant. Decide what action to take based on the user's message.
3
3
 
4
4
  ## Current State
@@ -1,4 +1,4 @@
1
- import{a as e}from"./chunk-ZLLER3HP.js";function b(n){if(!n||typeof n!="object")return n;let c=n,r=c.project_areas;if(r!==void 0&&!Array.isArray(r)){let o=r&&typeof r=="object"?r.areas:void 0;c.project_areas=Array.isArray(o)?o:void 0}return n}e(b,"normalizeRecommendations");import{z as i}from"zod";var w=["org","team","project","personal"],v=i.object({name:i.string().min(1),description:i.string().min(1),type:i.literal("instruction").default("instruction"),scope:i.enum(w),version:i.string().min(1),tags:i.array(i.string()).optional(),compatibility:i.array(i.string()).optional(),slots:i.record(i.string(),i.string()).optional(),metadata:i.record(i.string(),i.unknown()).optional()});import{z as a}from"zod";var y=a.object({name:a.string().min(1),description:a.string().min(1),type:a.literal("prompt"),version:a.string().min(1),tags:a.array(a.string()).optional(),variables:a.array(a.string()).optional(),metadata:a.record(a.string(),a.unknown()).optional()});function f(n,c){let r=c.map(o=>`- ID: ${o.id}
1
+ import{a as e}from"./chunk-ZLLER3HP.js";function b(n){if(!n||typeof n!="object")return n;let c=n,r=c.project_areas;if(r!==void 0&&!Array.isArray(r)){let o=r&&typeof r=="object"?r.areas:void 0;c.project_areas=Array.isArray(o)?o:void 0}return n}e(b,"normalizeRecommendations");import{z as s}from"zod";var w=["org","team","project","personal"],v=s.object({name:s.string().min(1),description:s.string().min(1),type:s.literal("instruction").default("instruction"),scope:s.enum(w),version:s.string().min(1),tags:s.array(s.string()).optional(),compatibility:s.array(s.string()).optional(),slots:s.record(s.string(),s.string()).optional(),metadata:s.record(s.string(),s.unknown()).optional()});import{z as a}from"zod";var y=a.object({name:a.string().min(1),description:a.string().min(1),type:a.literal("prompt"),version:a.string().min(1),tags:a.array(a.string()).optional(),variables:a.array(a.string()).optional(),metadata:a.record(a.string(),a.unknown()).optional()});function f(n,c){let r=c.map(o=>`- ID: ${o.id}
2
2
  Name: ${o.name}
3
3
  Description: ${o.description}
4
4
  Tags: ${o.tags.join(", ")}
@@ -31,8 +31,8 @@ Return your response as JSON in this exact format:
31
31
  ]
32
32
  }
33
33
 
34
- Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`}e(f,"buildRecommendationPrompt");var x=32e3,k={name:"x".repeat(64),description:"x".repeat(256),languages:["TypeScript","Python","Go"],topics:["x".repeat(32)],dependencies:["x".repeat(32)]};function _(n,c={}){if(n.length===0)return[];let r=c.charBudget??x,o=f(k,[]).length,l=[],s=[],d=0;for(let u of n){let p=T(u);s.length>0&&o+d+p>r&&(l.push(s),s=[],d=0),s.push(u),d+=p}return s.length>0&&l.push(s),l}e(_,"batchCandidatesForPrompt");function T(n){return`- ID: ${n.id}
34
+ Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`}e(f,"buildRecommendationPrompt");var x=32e3,T={name:"x".repeat(64),description:"x".repeat(256),languages:["TypeScript","Python","Go"],topics:["x".repeat(32)],dependencies:["x".repeat(32)]};function _(n,c={}){if(n.length===0)return[];let r=c.charBudget??x,o=f(T,[]).length,l=[],i=[],d=0;for(let u of n){let p=k(u);i.length>0&&o+d+p>r&&(l.push(i),i=[],d=0),i.push(u),d+=p}return i.length>0&&l.push(i),l}e(_,"batchCandidatesForPrompt");function k(n){return`- ID: ${n.id}
35
35
  Name: ${n.name}
36
36
  Description: ${n.description}
37
37
  Tags: ${n.tags.join(", ")}
38
- Preview: ${n.contentPreview}`.length+2}e(T,"renderedSize");var C=["Added","Changed","Fixed","Removed","Deprecated","Security"],S=/^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/,I=/^###\s+(.+?)\s*$/,P=/^[-*]\s+(.*\S)\s*$/,L=/^ {2,}(\S.*)$/;function O(n){let c=n.split(/\r?\n/),r=[],o=null,l=null,s=null;for(let d of c){let u=d.match(S);if(u){o&&r.push(o);let m=u[1].trim();o={version:m,date:u[2]??null,unreleased:m.toLowerCase()==="unreleased",sections:{}},l=null,s=null;continue}if(!o)continue;let p=d.match(I);if(p){let m=p[1].trim();C.includes(m)?(l=m,o.sections[l]||(o.sections[l]=[]),s=o.sections[l]):(l=null,s=null);continue}if(!l||!s)continue;let h=d.match(P);if(h){s.push(h[1]);continue}let g=d.match(L);if(g&&s.length>0){s[s.length-1]+=" "+g[1].trim();continue}}return o&&r.push(o),{entries:r}}e(O,"parseChangelog");function j(n){return n.entries.filter(c=>c.unreleased?!1:Object.values(c.sections).some(r=>r&&r.length>0))}e(j,"announceableEntries");import ue from"gray-matter";import{z as R}from"zod";var he=R.object({type:R.enum(["instruction","prompt"])});export{b as a,f as b,_ as c,O as d,j as e};
38
+ Preview: ${n.contentPreview}`.length+2}e(k,"renderedSize");var C=["Added","Changed","Fixed","Removed","Deprecated","Security"],S=/^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/,I=/^###\s+(.+?)\s*$/,P=/^[-*]\s+(.*\S)\s*$/,L=/^ {2,}(\S.*)$/;function O(n){let c=n.split(/\r?\n/),r=[],o=null,l=null,i=null;for(let d of c){let u=d.match(S);if(u){o&&r.push(o);let m=u[1].trim();o={version:m,date:u[2]??null,unreleased:m.toLowerCase()==="unreleased",sections:{}},l=null,i=null;continue}if(!o)continue;let p=d.match(I);if(p){let m=p[1].trim();C.includes(m)?(l=m,o.sections[l]||(o.sections[l]=[]),i=o.sections[l]):(l=null,i=null);continue}if(!l||!i)continue;let h=d.match(P);if(h){i.push(h[1]);continue}let g=d.match(L);if(g&&i.length>0){i[i.length-1]+=" "+g[1].trim();continue}}return o&&r.push(o),{entries:r}}e(O,"parseChangelog");function j(n){return n.entries.filter(c=>c.unreleased?!1:Object.values(c.sections).some(r=>r&&r.length>0))}e(j,"announceableEntries");import ue from"gray-matter";import{z as R}from"zod";var he=R.object({type:R.enum(["instruction","prompt"])});export{b as a,f as b,_ as c,O as d,j as e};
@@ -1 +1 @@
1
- import{a}from"./chunk-H2ORWIEY.js";import{a as e}from"./chunk-ZLLER3HP.js";function i(){return process.env.RULEMETRIC_API_URL??a}e(i,"apiUrl");function u(){let n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)throw new Error("not signed in \u2014 run `rulemetric auth login`");return n}e(u,"authToken");async function t(n,o){let r=await fetch(`${i()}${n}`,{...o,headers:{Authorization:`Bearer ${u()}`,"Content-Type":"application/json",...o?.headers??{}},signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`${r.status} ${r.statusText}`);return await r.json()}e(t,"request");function c({limit:n}){return t(`/api/launch-jobs?limit=${n}`)}e(c,"fetchLaunchJobs");function h(n){return t("/api/launch-jobs",{method:"POST",body:JSON.stringify(n)})}e(h,"createLaunchJob");function l(n){return t(`/api/launch-jobs/${n}/cancel`,{method:"POST"})}e(l,"cancelLaunchJob");function p(){return t("/api/launchers")}e(p,"listLaunchers");export{c as a,h as b,l as c,p as d};
1
+ import{a}from"./chunk-KLEF5D3A.js";import{a as e}from"./chunk-ZLLER3HP.js";function i(){return process.env.RULEMETRIC_API_URL??a}e(i,"apiUrl");function u(){let n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)throw new Error("not signed in \u2014 run `rulemetric auth login`");return n}e(u,"authToken");async function t(n,o){let r=await fetch(`${i()}${n}`,{...o,headers:{Authorization:`Bearer ${u()}`,"Content-Type":"application/json",...o?.headers??{}},signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`${r.status} ${r.statusText}`);return await r.json()}e(t,"request");function c({limit:n}){return t(`/api/launch-jobs?limit=${n}`)}e(c,"fetchLaunchJobs");function h(n){return t("/api/launch-jobs",{method:"POST",body:JSON.stringify(n)})}e(h,"createLaunchJob");function l(n){return t(`/api/launch-jobs/${n}/cancel`,{method:"POST"})}e(l,"cancelLaunchJob");function p(){return t("/api/launchers")}e(p,"listLaunchers");export{c as a,h as b,l as c,p as d};
@@ -1 +1 @@
1
- import{b as g,c as m}from"./chunk-N7ODX6PO.js";import{e as s,h as c}from"./chunk-H2ORWIEY.js";import{a as i}from"./chunk-ZLLER3HP.js";var u=6e4;function o(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[tt-heartbeat] log_error event=${e.event}`)}}i(o,"structuredLog");function d(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",n),r(!0)},t),n=i(()=>{clearTimeout(a),e.removeEventListener("abort",n),r(!1)},"onAbort");e.addEventListener("abort",n,{once:!0})})}i(d,"abortableSleep");async function l(t,e){if(t.kind!=="tmux")return;let a=(await g(m(t.target))).code===0?"active":"missing";try{await c(`/api/terminal-targets/${t.id}/status`,{status:a,lastSeenAt:new Date().toISOString()}),o(e,{event:"tt_heartbeat",targetId:t.id,target:t.target,status:a})}catch(n){o(e,{event:"tt_heartbeat_error",targetId:t.id,target:t.target,error:n instanceof Error?n.message:String(n)})}}i(l,"probeAndReport");async function b(t){let e;try{e=await s("/api/terminal-targets?status=active")}catch(r){o(t,{event:"tt_heartbeat_list_error",error:r instanceof Error?r.message:String(r)});return}for(let r of e.targets??[])try{await l(r,t)}catch(a){o(t,{event:"tt_heartbeat_probe_error",targetId:r.id,error:a instanceof Error?a.message:String(a)})}}i(b,"runOneHeartbeatCycle");async function p(t){let e=t.log??(()=>{}),r=t.intervalMs??u;for(o(e,{event:"tt_heartbeat_start",intervalMs:r});!t.signal.aborted&&(await b(e),!!await d(r,t.signal)););o(e,{event:"tt_heartbeat_stop"})}i(p,"startTerminalTargetHeartbeat");export{l as a,b,p as c};
1
+ import{b as g,c as m}from"./chunk-N7ODX6PO.js";import{e as s,h as c}from"./chunk-KLEF5D3A.js";import{a as i}from"./chunk-ZLLER3HP.js";var u=6e4;function o(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[tt-heartbeat] log_error event=${e.event}`)}}i(o,"structuredLog");function d(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",n),r(!0)},t),n=i(()=>{clearTimeout(a),e.removeEventListener("abort",n),r(!1)},"onAbort");e.addEventListener("abort",n,{once:!0})})}i(d,"abortableSleep");async function l(t,e){if(t.kind!=="tmux")return;let a=(await g(m(t.target))).code===0?"active":"missing";try{await c(`/api/terminal-targets/${t.id}/status`,{status:a,lastSeenAt:new Date().toISOString()}),o(e,{event:"tt_heartbeat",targetId:t.id,target:t.target,status:a})}catch(n){o(e,{event:"tt_heartbeat_error",targetId:t.id,target:t.target,error:n instanceof Error?n.message:String(n)})}}i(l,"probeAndReport");async function b(t){let e;try{e=await s("/api/terminal-targets?status=active")}catch(r){o(t,{event:"tt_heartbeat_list_error",error:r instanceof Error?r.message:String(r)});return}for(let r of e.targets??[])try{await l(r,t)}catch(a){o(t,{event:"tt_heartbeat_probe_error",targetId:r.id,error:a instanceof Error?a.message:String(a)})}}i(b,"runOneHeartbeatCycle");async function p(t){let e=t.log??(()=>{}),r=t.intervalMs??u;for(o(e,{event:"tt_heartbeat_start",intervalMs:r});!t.signal.aborted&&(await b(e),!!await d(r,t.signal)););o(e,{event:"tt_heartbeat_stop"})}i(p,"startTerminalTargetHeartbeat");export{l as a,b,p as c};
@@ -1 +1 @@
1
- import{b as $}from"./chunk-G5BXZT6F.js";import{e as w,f as k}from"./chunk-H2ORWIEY.js";import{a as u}from"./chunk-ZLLER3HP.js";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function _(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u(_,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function C(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:_(l[r])?1:0,withoutScore:_(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(C,"pairRunsByEval");function T(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=C(i,l);if(d.length>0){if(t=$(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(T,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}&activeCasesOnly=1${o}`);if(a.push(...i),i.length<s)break}return T(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{T as a,S as b,B as c};
1
+ import{b as $}from"./chunk-G5BXZT6F.js";import{e as w,f as k}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function _(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u(_,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function C(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:_(l[r])?1:0,withoutScore:_(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(C,"pairRunsByEval");function T(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=C(i,l);if(d.length>0){if(t=$(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(T,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}&activeCasesOnly=1${o}`);if(a.push(...i),i.length<s)break}return T(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{T as a,S as b,B as c};
@@ -1 +1 @@
1
- import{b as E,c as C}from"./chunk-GPTPK6QX.js";import{b as N}from"./chunk-GIRPEMTW.js";import{a as R}from"./chunk-MODXEGCU.js";import{d as I,f as _}from"./chunk-B3BHB26P.js";import{e as c,f as w}from"./chunk-H2ORWIEY.js";import{a as m}from"./chunk-ZLLER3HP.js";import{readFileSync as M,realpathSync as v}from"node:fs";import g from"node:path";import y from"node:os";function O(l){let o=g.resolve(l);if(o===g.resolve(y.homedir()))return!1;let r=g.parse(o).root;if(o===r)return!1;try{let s=v(y.tmpdir());if(v(o)===s)return!1}catch{}return!0}m(O,"isScorableProjectPath");var A=5,F=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),H=48,U=.5,S=400;async function B(){let l=g.join(y.homedir(),".config","rulemetric","skills-registry.json");try{let o=M(l,"utf-8"),r=JSON.parse(o);return Date.now()-new Date(r.generatedAt).getTime()>H*60*60*1e3}catch{return!0}}m(B,"checkSkillsRegistryStale");var W=m(async(l,o)=>{let r=I();if(r==="none"){o.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping suggestion compute");return}o.logger.info(`Scoring backend: ${r}`);let s;try{s=(await c("/api/sessions/project-paths?limit="+F)).projectPaths}catch(e){o.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(s.length===0){o.logger.info("No recent project paths; nothing to score");return}let u=new Map;try{let e=await c("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&u.set(R(t.primaryCheckoutPath),t.id)}catch(e){o.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let f=new Map;try{let e=await c(`/api/catalog?limit=200&contentPreview=${S}`);for(let t of e)f.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.contentPreview??"").slice(0,S)})}catch(e){o.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await c("/api/instructions?limit=100");for(let t of e.instructions??[])f.has(t.id)||f.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,S)})}catch(e){o.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let d=[...f.values()];if(d.length===0){o.logger.info("No candidate instructions; nothing to score");return}o.logger.info(`Scoring ${d.length} candidates across ${s.length} project(s)`);let j=0;for(let e of s)try{let t=R(e);if(!O(t)){o.logger.info(`Skipping ${t}: not a project directory (home/root)`);continue}let $=N(t);if($.length===0){o.logger.info(`Skipping ${t}: insufficient language signals`);continue}let L={name:g.basename(t),description:null,languages:$,topics:[],dependencies:[]},h=C(d);o.logger.info(`Scoring ${d.length} candidates for ${t} in ${h.length} batch(es)`);let P=[],p=0;for(let n of h)try{let i=await _(E(L,n),"",4096);if(!i){p++;continue}let T=i.recommendations??[];for(let a of T)typeof a.instructionId=="string"&&typeof a.score=="number"&&typeof a.reason=="string"&&P.push({instructionId:a.instructionId,score:a.score,reason:a.reason})}catch(i){p++,o.logger.warn(`Batch failed for ${t}: ${i instanceof Error?i.message:String(i)}`)}if(p>0&&o.logger.warn(`${p}/${h.length} batch(es) failed for ${t} (backend ${r}); suggestions are partial`),P.length===0){o.logger.warn(`No usable LLM output for ${t} (backend ${r})`);continue}let b=P.filter(n=>n.score>=U).sort((n,i)=>i.score-n.score).slice(0,A);if(b.length===0){o.logger.info(`No suggestions over threshold for ${t}`);continue}let k=u.get(t);await w("/api/instruction-suggestions/batch-upsert",{projectPath:t,...k?{projectId:k}:{},suggestions:b.map(n=>({instructionId:n.instructionId,score:n.score,reason:n.reason}))}),j++}catch(t){o.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}if(await B())try{await w("/api/instruction-suggestions/mark-stale",{}),o.logger.warn("Skills registry is stale (>48h); marked all suggestions stale")}catch{}o.logger.info(`Done: scored ${j}/${s.length} projects`)},"cronSuggestInstructions");export{O as a,W as b};
1
+ import{b as E,c as C}from"./chunk-5R5RGKOW.js";import{b as N}from"./chunk-GIRPEMTW.js";import{a as R}from"./chunk-MODXEGCU.js";import{d as I,f as _}from"./chunk-B3BHB26P.js";import{e as c,f as w}from"./chunk-KLEF5D3A.js";import{a as m}from"./chunk-ZLLER3HP.js";import{readFileSync as M,realpathSync as v}from"node:fs";import g from"node:path";import y from"node:os";function O(l){let o=g.resolve(l);if(o===g.resolve(y.homedir()))return!1;let r=g.parse(o).root;if(o===r)return!1;try{let s=v(y.tmpdir());if(v(o)===s)return!1}catch{}return!0}m(O,"isScorableProjectPath");var A=5,F=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),H=48,U=.5,S=400;async function B(){let l=g.join(y.homedir(),".config","rulemetric","skills-registry.json");try{let o=M(l,"utf-8"),r=JSON.parse(o);return Date.now()-new Date(r.generatedAt).getTime()>H*60*60*1e3}catch{return!0}}m(B,"checkSkillsRegistryStale");var W=m(async(l,o)=>{let r=I();if(r==="none"){o.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping suggestion compute");return}o.logger.info(`Scoring backend: ${r}`);let s;try{s=(await c("/api/sessions/project-paths?limit="+F)).projectPaths}catch(e){o.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(s.length===0){o.logger.info("No recent project paths; nothing to score");return}let u=new Map;try{let e=await c("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&u.set(R(t.primaryCheckoutPath),t.id)}catch(e){o.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let f=new Map;try{let e=await c(`/api/catalog?limit=200&contentPreview=${S}`);for(let t of e)f.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.contentPreview??"").slice(0,S)})}catch(e){o.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await c("/api/instructions?limit=100");for(let t of e.instructions??[])f.has(t.id)||f.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,S)})}catch(e){o.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let d=[...f.values()];if(d.length===0){o.logger.info("No candidate instructions; nothing to score");return}o.logger.info(`Scoring ${d.length} candidates across ${s.length} project(s)`);let j=0;for(let e of s)try{let t=R(e);if(!O(t)){o.logger.info(`Skipping ${t}: not a project directory (home/root)`);continue}let $=N(t);if($.length===0){o.logger.info(`Skipping ${t}: insufficient language signals`);continue}let L={name:g.basename(t),description:null,languages:$,topics:[],dependencies:[]},h=C(d);o.logger.info(`Scoring ${d.length} candidates for ${t} in ${h.length} batch(es)`);let P=[],p=0;for(let n of h)try{let i=await _(E(L,n),"",4096);if(!i){p++;continue}let T=i.recommendations??[];for(let a of T)typeof a.instructionId=="string"&&typeof a.score=="number"&&typeof a.reason=="string"&&P.push({instructionId:a.instructionId,score:a.score,reason:a.reason})}catch(i){p++,o.logger.warn(`Batch failed for ${t}: ${i instanceof Error?i.message:String(i)}`)}if(p>0&&o.logger.warn(`${p}/${h.length} batch(es) failed for ${t} (backend ${r}); suggestions are partial`),P.length===0){o.logger.warn(`No usable LLM output for ${t} (backend ${r})`);continue}let b=P.filter(n=>n.score>=U).sort((n,i)=>i.score-n.score).slice(0,A);if(b.length===0){o.logger.info(`No suggestions over threshold for ${t}`);continue}let k=u.get(t);await w("/api/instruction-suggestions/batch-upsert",{projectPath:t,...k?{projectId:k}:{},suggestions:b.map(n=>({instructionId:n.instructionId,score:n.score,reason:n.reason}))}),j++}catch(t){o.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}if(await B())try{await w("/api/instruction-suggestions/mark-stale",{}),o.logger.warn("Skills registry is stale (>48h); marked all suggestions stale")}catch{}o.logger.info(`Done: scored ${j}/${s.length} projects`)},"cronSuggestInstructions");export{O as a,W as b};
@@ -1 +1 @@
1
- import{a as d,d as m}from"./chunk-H2ORWIEY.js";import{a as c,l as a}from"./chunk-O6C2UGBY.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as g,randomUUID as v}from"node:crypto";import{hostname as y,platform as p}from"node:os";import{existsSync as P,mkdirSync as _,readFileSync as h,writeFileSync as R}from"node:fs";import{join as E}from"node:path";var O="device-id";function u(){let e=o(t=>t==="1"||t==="true","off");return e(process.env.RULEMETRIC_NO_TELEMETRY)||e(process.env.DO_NOT_TRACK)}o(u,"telemetryDisabled");function l(){let e=a(),t=E(e,O);try{if(P(t)){let r=h(t,"utf-8").trim();if(r)return r}}catch{}let n=g("sha256").update(`${v()}:${y()}`).digest("hex").slice(0,32);try{_(e,{recursive:!0}),R(t,n,{mode:384})}catch{}return n}o(l,"getDeviceId");async function U(e,t={},n){if(!u())try{await m("/api/telemetry/cli-events",{method:"POST",body:{event:e,deviceId:l(),cliVersion:n,os:p(),props:t},timeoutMs:5e3})}catch{}}o(U,"emitSetupEvent");async function w(e){if(u())return;let n=`${process.env.RULEMETRIC_API_URL??c().apiUrl??d}/api/telemetry/cli-error`,r=process.env.HTTPS_PROXY,s=process.env.HTTP_PROXY,T=r!==void 0||s!==void 0;delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY;let i=new AbortController,f=setTimeout(()=>i.abort(),4e3);try{await globalThis.fetch(n,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`rulemetric-cli/${e.cliVersion??"unknown"}`},body:JSON.stringify({event:e.event??"onboarding_error",deviceId:l(),command:e.command,statusCode:e.statusCode,message:e.message?e.message.slice(0,500):void 0,cliVersion:e.cliVersion,os:p(),nodeVersion:process.version,proxied:T,props:e.props}),signal:i.signal})}catch{}finally{clearTimeout(f),r!==void 0&&(process.env.HTTPS_PROXY=r),s!==void 0&&(process.env.HTTP_PROXY=s)}}o(w,"emitErrorBeacon");export{u as a,l as b,U as c,w as d};
1
+ import{a as d,d as m}from"./chunk-KLEF5D3A.js";import{a as c,l as a}from"./chunk-JZ5Z2BRO.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as g,randomUUID as v}from"node:crypto";import{hostname as y,platform as p}from"node:os";import{existsSync as P,mkdirSync as _,readFileSync as h,writeFileSync as R}from"node:fs";import{join as E}from"node:path";var O="device-id";function u(){let e=o(t=>t==="1"||t==="true","off");return e(process.env.RULEMETRIC_NO_TELEMETRY)||e(process.env.DO_NOT_TRACK)}o(u,"telemetryDisabled");function l(){let e=a(),t=E(e,O);try{if(P(t)){let r=h(t,"utf-8").trim();if(r)return r}}catch{}let n=g("sha256").update(`${v()}:${y()}`).digest("hex").slice(0,32);try{_(e,{recursive:!0}),R(t,n,{mode:384})}catch{}return n}o(l,"getDeviceId");async function U(e,t={},n){if(!u())try{await m("/api/telemetry/cli-events",{method:"POST",body:{event:e,deviceId:l(),cliVersion:n,os:p(),props:t},timeoutMs:5e3})}catch{}}o(U,"emitSetupEvent");async function w(e){if(u())return;let n=`${process.env.RULEMETRIC_API_URL??c().apiUrl??d}/api/telemetry/cli-error`,r=process.env.HTTPS_PROXY,s=process.env.HTTP_PROXY,T=r!==void 0||s!==void 0;delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY;let i=new AbortController,f=setTimeout(()=>i.abort(),4e3);try{await globalThis.fetch(n,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`rulemetric-cli/${e.cliVersion??"unknown"}`},body:JSON.stringify({event:e.event??"onboarding_error",deviceId:l(),command:e.command,statusCode:e.statusCode,message:e.message?e.message.slice(0,500):void 0,cliVersion:e.cliVersion,os:p(),nodeVersion:process.version,proxied:T,props:e.props}),signal:i.signal})}catch{}finally{clearTimeout(f),r!==void 0&&(process.env.HTTPS_PROXY=r),s!==void 0&&(process.env.HTTP_PROXY=s)}}o(w,"emitErrorBeacon");export{u as a,l as b,U as c,w as d};
@@ -1,2 +1,2 @@
1
- import{a as R}from"./chunk-5RBLIVBF.js";import{b as B}from"./chunk-N7TGRFVZ.js";import{a as v,f as d,g as n,h as m,i as U}from"./chunk-JGLVVIEM.js";import{a as $}from"./chunk-ZLLER3HP.js";import{and as L,asc as j,eq as l,gt as q,isNotNull as F,sql as O}from"drizzle-orm";var _=100,C=10;async function G(I,s={}){let t=s.db??U(),D=s.sendEmail??B,p=s.log??(o=>process.stderr.write(`[process_announcement] ${o}
1
+ import{b as B}from"./chunk-N7TGRFVZ.js";import{a as R}from"./chunk-5RBLIVBF.js";import{a as v,f as d,g as n,h as m,i as U}from"./chunk-45DOTNQM.js";import{a as $}from"./chunk-ZLLER3HP.js";import{and as L,asc as j,eq as l,gt as q,isNotNull as F,sql as O}from"drizzle-orm";var _=100,C=10;async function G(I,s={}){let t=s.db??U(),D=s.sendEmail??B,p=s.log??(o=>process.stderr.write(`[process_announcement] ${o}
2
2
  `)),b=s.webBaseUrl??process.env.RULEMETRIC_WEB_URL??process.env.WEB_URL??"https://rulemetric.com",{announcementId:r}=I,[i]=await t.select().from(d).where(l(d.id,r)).limit(1);if(!i)throw new R(`Announcement ${r} not found`);if(i.status!=="queued"&&i.status!=="sending")throw new R(`Announcement ${r} is in status='${i.status}'; expected 'queued' or 'sending'.`);await t.update(d).set({status:"sending",updatedAt:new Date}).where(l(d.id,r)),p(`Sending announcement ${r} (${i.subject??""})`);let w=0,f=0,h=0,y=0,k=null;try{for(;;){let c=await t.select({userId:m.userId,email:v.email,displayName:v.displayName,unsubscribeToken:m.unsubscribeToken}).from(m).innerJoin(v,l(v.id,m.userId)).where(L(l(m.productAnnouncements,!0),F(v.email),k?q(m.userId,k):void 0)).orderBy(j(m.userId)).limit(_);if(c.length===0)break;k=c[c.length-1].userId;for(let A=0;A<c.length;A+=C){let P=c.slice(A,A+C),S=await Promise.allSettled(P.map(g=>W({recipient:g,announcement:i,webBaseUrl:b,sendEmail:D,db:t})));for(let g=0;g<S.length;g++){let u=S[g];if(u.status==="fulfilled")u.value.ok==="sent"?w++:u.value.ok==="skipped"?h++:(f++,u.value.provider==="noop"&&y++,p(` recipient ${P[g].userId}: send failed \u2014 ${u.value.error}`));else{f++;let T=u.reason instanceof Error?u.reason.message:String(u.reason);p(` recipient ${P[g].userId}: send failed \u2014 ${T}`)}}}if(c.length<_)break}y>0&&p(`WARNING: ${y} recipient(s) hit the noop email provider and were recorded as FAILED \u2014 no email provider is configured on this worker (set RESEND_API_KEY in ~/.config/rulemetric/env and reinstall the service)`);let o=await t.select({status:n.status,count:O`count(*)::int`}).from(n).where(l(n.announcementId,r)).groupBy(n.status),e={};for(let c of o)e[c.status]=c.count;let a=e.sent??0,E=e.failed??0,N=a===0&&E>0?"failed":"sent",x=E>0?`${E} of ${a+E} recipient(s) failed; see announcement_deliveries`:null;return await t.update(d).set({status:N,recipientCount:a,...N==="sent"?{sentAt:new Date}:{},error:x,updatedAt:new Date}).where(l(d.id,r)),p(`Done: status=${N} sent=${a} failed=${E} (this attempt: sent=${w} failed=${f} skipped=${h})`),{sent:w,failed:f,skipped:h}}catch(o){let e=o instanceof Error?o.message:String(o);throw await t.update(d).set({status:"failed",error:e.slice(0,1e3),updatedAt:new Date}).where(l(d.id,r)).catch(()=>{}),o}}$(G,"processAnnouncement");function K(I){return I.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}$(K,"escapeHtml");async function W(I){let{recipient:s,announcement:t,webBaseUrl:D,sendEmail:p,db:b}=I;if(!s.email)return{ok:"skipped",reason:"no-email"};let r=await b.insert(n).values({announcementId:t.id,userId:s.userId,email:s.email,status:"pending"}).onConflictDoNothing({target:[n.announcementId,n.userId]}).returning({id:n.id});if(r.length===0)return{ok:"skipped",reason:"already-claimed"};let i=r[0].id,w=D.replace(/\/$/,""),f=encodeURIComponent(s.unsubscribeToken),h=`${w}/unsubscribe/${f}`,y=s.displayName?.trim().split(/\s+/)[0]||"there",k=t.htmlBody.replaceAll("{{unsubscribe_url}}",h).replaceAll("{{recipient_name}}",K(y)),o=t.textBody.replaceAll("{{unsubscribe_url}}",h).replaceAll("{{recipient_name}}",y);try{let e=await p({to:s.email,subject:t.subject,html:k,text:o,fromName:"RuleMetric",idempotencyKey:i,headers:{"List-Unsubscribe":`<${w}/api/unsubscribe/${f}>`,"List-Unsubscribe-Post":"List-Unsubscribe=One-Click"}});if(e.provider==="noop"){let a="no email provider configured (RESEND_API_KEY unset on the worker)";return await b.update(n).set({status:"failed",error:a}).where(l(n.id,i)),{ok:"failed",error:a,provider:e.provider}}return await b.update(n).set({status:"sent",providerId:e.id,sentAt:new Date}).where(l(n.id,i)),{ok:"sent",providerId:e.id,provider:e.provider}}catch(e){let a=e instanceof Error?e.message:String(e);return await b.update(n).set({status:"failed",error:a.slice(0,1e3)}).where(l(n.id,i)).catch(()=>{}),{ok:"failed",error:a}}}$(W,"sendOne");export{G as a};
@@ -1 +1 @@
1
- import{b as D,c as j}from"./chunk-6UEFCMR2.js";import{b as B,c as R,d as N,e as z}from"./chunk-NTKO4H2K.js";import{a as G}from"./chunk-4L2ZEIRE.js";import{c as J}from"./chunk-XRTZU7IZ.js";import{e as f,g as T}from"./chunk-H2ORWIEY.js";import{a as p}from"./chunk-ZLLER3HP.js";function W(r,a,s){return s?r.reviewerModel===s||r.reviewerModel===`${a}:${s}`:r.reviewerEngine===a}p(W,"reviewMatchesReviewer");var C=100;function Z(r){let a=new Set;return r.forEach((s,d)=>{s.method!=="deterministic"&&a.add(d)}),a}p(Z,"llmExpectationIndexes");var w=class extends Error{constructor(s,d){super(d);this.reason=s}static{p(this,"JudgeReviewSkip")}};async function oe(r){let a=r.log??(()=>{}),s=r.warn??a,d=r.targetId,K=r.parallel??3,U=r.timeoutMs??12e4,v=await f(`/api/eval-targets/${d}`),u=(await f(`/api/eval-targets/${d}/annotations?limit=500`)).filter(e=>e.judgeMethod==="llm");if(u.length===0)throw new w("no-labels",`No human labels on "${v.name}" yet \u2014 label some runs in the Review tab first.`);let n;try{n=z({engineFlag:r.engineFlag??"auto",modelFlag:r.modelFlag,availability:N(),judgeModels:[...new Set(u.map(e=>e.judgeModel).filter(e=>e!=null))]})}catch(e){throw new w("no-engine",e instanceof Error?e.message:String(e))}a(`Reviewer: ${n.rationale}`);let c=0,b=u;if(r.skipReviewed){let e=await f(`/api/eval-targets/${d}/judge-reviews`),t=new Set(e.filter(i=>W(i,n.engine,r.modelFlag)).map(i=>`${i.evalRunId}:${i.expectationIndex}`));if(b=u.filter(i=>!t.has(`${i.evalRunId}:${i.expectationIndex}`)),c=u.length-b.length,b.length===0)return{targetName:v.name,reviewer:n,judgeModels:[],reviewerModel:n.model??`${n.engine} (CLI default)`,report:j([],0),persisted:0,alreadyReviewed:c,deferredPartialRuns:0}}let y=new Map;for(let e=0;;e+=C){let t=await f(`/api/eval-targets/${d}/runs?limit=${C}&offset=${e}`);for(let i of t)y.set(i.id,i);if(t.length<C)break}let q=await f(`/api/eval-targets/${d}/evals`),X=new Map(q.map(e=>[e.id,e.prompt])),o=new Map;for(let e of b){let t=o.get(e.evalRunId)??[];t.push(e),o.set(e.evalRunId,t)}let P=new Map;for(let e of u){let t=P.get(e.evalRunId)??new Set;t.add(e.expectationIndex),P.set(e.evalRunId,t)}let x=0;for(let[e]of[...o]){let t=y.get(e)?.grading?.expectations;if(!t)continue;let i=Z(t),g=P.get(e)??new Set;[...i].every(h=>g.has(h))||(o.delete(e),x+=1)}if(x>0&&a(`${x} partially-labeled run(s) deferred \u2014 a run is re-graded once, after all its assertions are labeled.`),o.size===0)return{targetName:v.name,reviewer:n,judgeModels:[],reviewerModel:n.model??`${n.engine} (CLI default)`,report:j([],0),persisted:0,alreadyReviewed:c,deferredPartialRuns:x};if(n.engine==="codex"&&n.model){let e=await J({prompt:"Reply with exactly: OK",model:n.model,timeout:6e4});if(e.error&&B(e.error)){if(n.model===R)throw new w("preflight-failed",`Codex fallback model ${R} is also unrunnable: ${e.error}`);s(`Your codex model "${n.model}" can't run on the installed CLI/account \u2014 falling back to ${R}.`),n={...n,model:R}}else if(e.error)throw new w("preflight-failed",`Codex preflight failed: ${e.error}`)}let S=[...o.values()].flat(),Y=[...new Set(S.map(e=>e.judgeModel).filter(e=>e!=null))];a(`Re-grading ${o.size} annotated run(s) / ${S.length} assertion(s) on "${v.name}"`+(c?` (${c} already reviewed \u2014 skipped)`:"")+".");let $=[],I=0,k=new Set,m=r.limit!=null?[...o.entries()].slice(0,Math.max(1,r.limit)):[...o.entries()];m.length<o.size&&a(`Sampling ${m.length} of ${o.size} annotated runs (limit).`);let H=0,Q=p(async()=>{for(;;){let e=H++;if(e>=m.length)return;let[t,i]=m[e],g=y.get(t),h=g?.grading?.expectations,O=g?.outputs?.transcript,F=g?X.get(g.evalId):void 0;if(!g||!h?.length||!O||!F){I+=i.length,s(`run ${t.slice(0,8)}: missing output/expectations/prompt \u2014 skipped`);continue}let M=await G({prompt:F,output:O,expectations:h.map(l=>l.text),model:n.model??void 0,timeout:U,engine:n.engine});M.judge_model&&k.add(M.judge_model);for(let l of i){let L=h[l.expectationIndex],A=M.expectations[l.expectationIndex];if(!L||!A||L.text!==l.expectationText){I+=1;continue}if(M.judge_model==null&&A.method==="llm"){I+=1;continue}$.push({runId:t,expectationIndex:l.expectationIndex,text:l.expectationText,humanPassed:D(l.verdict,l.judgePassed),judgeAPassed:l.judgePassed,judgeBPassed:A.passed})}a(` ${e+1}/${m.length} re-graded`)}},"workerFn");await Promise.all(Array.from({length:Math.max(1,Math.min(K,m.length))},Q));let V=j($,I),_=[...k][0]??n.model??`${n.engine} (CLI default)`,E=0;if($.length>0)try{E=(await T(`/api/eval-targets/${d}/judge-reviews`,{reviewerEngine:n.engine,reviewerModel:_,verdicts:$.map(t=>({evalRunId:t.runId,expectationIndex:t.expectationIndex,expectationText:t.text,judgePassed:t.judgeAPassed,humanPassed:t.humanPassed,reviewerPassed:t.judgeBPassed}))})).upserted,a(`Persisted ${E} reviewer verdict(s) \u2014 disagreements appear on the Review tab.`)}catch(e){s(`Could not persist reviewer verdicts: ${e instanceof Error?e.message:e}`)}return{targetName:v.name,reviewer:n,judgeModels:Y,reviewerModel:_,report:V,persisted:E,alreadyReviewed:c,deferredPartialRuns:x}}p(oe,"runJudgeReviewPass");export{W as a,Z as b,w as c,oe as d};
1
+ import{b as D,c as j}from"./chunk-6UEFCMR2.js";import{b as B,c as R,d as N,e as z}from"./chunk-NTKO4H2K.js";import{a as G}from"./chunk-4L2ZEIRE.js";import{c as J}from"./chunk-XRTZU7IZ.js";import{e as f,g as T}from"./chunk-KLEF5D3A.js";import{a as p}from"./chunk-ZLLER3HP.js";function W(r,a,s){return s?r.reviewerModel===s||r.reviewerModel===`${a}:${s}`:r.reviewerEngine===a}p(W,"reviewMatchesReviewer");var C=100;function Z(r){let a=new Set;return r.forEach((s,d)=>{s.method!=="deterministic"&&a.add(d)}),a}p(Z,"llmExpectationIndexes");var w=class extends Error{constructor(s,d){super(d);this.reason=s}static{p(this,"JudgeReviewSkip")}};async function oe(r){let a=r.log??(()=>{}),s=r.warn??a,d=r.targetId,K=r.parallel??3,U=r.timeoutMs??12e4,v=await f(`/api/eval-targets/${d}`),u=(await f(`/api/eval-targets/${d}/annotations?limit=500`)).filter(e=>e.judgeMethod==="llm");if(u.length===0)throw new w("no-labels",`No human labels on "${v.name}" yet \u2014 label some runs in the Review tab first.`);let n;try{n=z({engineFlag:r.engineFlag??"auto",modelFlag:r.modelFlag,availability:N(),judgeModels:[...new Set(u.map(e=>e.judgeModel).filter(e=>e!=null))]})}catch(e){throw new w("no-engine",e instanceof Error?e.message:String(e))}a(`Reviewer: ${n.rationale}`);let c=0,b=u;if(r.skipReviewed){let e=await f(`/api/eval-targets/${d}/judge-reviews`),t=new Set(e.filter(i=>W(i,n.engine,r.modelFlag)).map(i=>`${i.evalRunId}:${i.expectationIndex}`));if(b=u.filter(i=>!t.has(`${i.evalRunId}:${i.expectationIndex}`)),c=u.length-b.length,b.length===0)return{targetName:v.name,reviewer:n,judgeModels:[],reviewerModel:n.model??`${n.engine} (CLI default)`,report:j([],0),persisted:0,alreadyReviewed:c,deferredPartialRuns:0}}let y=new Map;for(let e=0;;e+=C){let t=await f(`/api/eval-targets/${d}/runs?limit=${C}&offset=${e}`);for(let i of t)y.set(i.id,i);if(t.length<C)break}let q=await f(`/api/eval-targets/${d}/evals`),X=new Map(q.map(e=>[e.id,e.prompt])),o=new Map;for(let e of b){let t=o.get(e.evalRunId)??[];t.push(e),o.set(e.evalRunId,t)}let P=new Map;for(let e of u){let t=P.get(e.evalRunId)??new Set;t.add(e.expectationIndex),P.set(e.evalRunId,t)}let x=0;for(let[e]of[...o]){let t=y.get(e)?.grading?.expectations;if(!t)continue;let i=Z(t),g=P.get(e)??new Set;[...i].every(h=>g.has(h))||(o.delete(e),x+=1)}if(x>0&&a(`${x} partially-labeled run(s) deferred \u2014 a run is re-graded once, after all its assertions are labeled.`),o.size===0)return{targetName:v.name,reviewer:n,judgeModels:[],reviewerModel:n.model??`${n.engine} (CLI default)`,report:j([],0),persisted:0,alreadyReviewed:c,deferredPartialRuns:x};if(n.engine==="codex"&&n.model){let e=await J({prompt:"Reply with exactly: OK",model:n.model,timeout:6e4});if(e.error&&B(e.error)){if(n.model===R)throw new w("preflight-failed",`Codex fallback model ${R} is also unrunnable: ${e.error}`);s(`Your codex model "${n.model}" can't run on the installed CLI/account \u2014 falling back to ${R}.`),n={...n,model:R}}else if(e.error)throw new w("preflight-failed",`Codex preflight failed: ${e.error}`)}let S=[...o.values()].flat(),Y=[...new Set(S.map(e=>e.judgeModel).filter(e=>e!=null))];a(`Re-grading ${o.size} annotated run(s) / ${S.length} assertion(s) on "${v.name}"`+(c?` (${c} already reviewed \u2014 skipped)`:"")+".");let $=[],I=0,k=new Set,m=r.limit!=null?[...o.entries()].slice(0,Math.max(1,r.limit)):[...o.entries()];m.length<o.size&&a(`Sampling ${m.length} of ${o.size} annotated runs (limit).`);let H=0,Q=p(async()=>{for(;;){let e=H++;if(e>=m.length)return;let[t,i]=m[e],g=y.get(t),h=g?.grading?.expectations,O=g?.outputs?.transcript,F=g?X.get(g.evalId):void 0;if(!g||!h?.length||!O||!F){I+=i.length,s(`run ${t.slice(0,8)}: missing output/expectations/prompt \u2014 skipped`);continue}let M=await G({prompt:F,output:O,expectations:h.map(l=>l.text),model:n.model??void 0,timeout:U,engine:n.engine});M.judge_model&&k.add(M.judge_model);for(let l of i){let L=h[l.expectationIndex],A=M.expectations[l.expectationIndex];if(!L||!A||L.text!==l.expectationText){I+=1;continue}if(M.judge_model==null&&A.method==="llm"){I+=1;continue}$.push({runId:t,expectationIndex:l.expectationIndex,text:l.expectationText,humanPassed:D(l.verdict,l.judgePassed),judgeAPassed:l.judgePassed,judgeBPassed:A.passed})}a(` ${e+1}/${m.length} re-graded`)}},"workerFn");await Promise.all(Array.from({length:Math.max(1,Math.min(K,m.length))},Q));let V=j($,I),_=[...k][0]??n.model??`${n.engine} (CLI default)`,E=0;if($.length>0)try{E=(await T(`/api/eval-targets/${d}/judge-reviews`,{reviewerEngine:n.engine,reviewerModel:_,verdicts:$.map(t=>({evalRunId:t.runId,expectationIndex:t.expectationIndex,expectationText:t.text,judgePassed:t.judgeAPassed,humanPassed:t.humanPassed,reviewerPassed:t.judgeBPassed}))})).upserted,a(`Persisted ${E} reviewer verdict(s) \u2014 disagreements appear on the Review tab.`)}catch(e){s(`Could not persist reviewer verdicts: ${e instanceof Error?e.message:e}`)}return{targetName:v.name,reviewer:n,judgeModels:Y,reviewerModel:_,report:V,persisted:E,alreadyReviewed:c,deferredPartialRuns:x}}p(oe,"runJudgeReviewPass");export{W as a,Z as b,w as c,oe as d};
@@ -1 +1 @@
1
- import{e as $}from"./chunk-L2CFSMBC.js";import{a as v}from"./chunk-4L2ZEIRE.js";import{c as f}from"./chunk-HMMO27U4.js";import{f as p}from"./chunk-H2ORWIEY.js";import{a as m}from"./chunk-ZLLER3HP.js";async function x(c,e,s=()=>{}){let{eval_:r,configuration:i,targetContent:g,runNumber:o}=c;s(`[${i}] ${r.name} run#${o} \u2014 executing...`);let n=$({targetType:e.targetType,targetContent:g,targetName:e.targetName}),d={methodology:n.methodology,delivery:n.delivery,isolated:n.isWorktree,...n.leakedFiles.length?{leakedFiles:n.leakedFiles}:{}};n.isWorktree||s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 no git worktree; running without repo context`),n.leakedFiles.length&&s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 CONTAMINATED: ${n.leakedFiles.join(", ")} survived the strip`);try{let a=await f({prompt:r.prompt,targetContent:n.systemPrompt,workDir:n.workDir,timeout:e.timeout,model:e.model});if(a.error)return s(`[${i}] ${r.name} run#${o} \u2014 FAILED: ${a.error}`),{evalId:r.id,evalTargetId:e.targetId,evalTargetVersion:e.targetVersion,configuration:i,runNumber:o,iteration:e.iteration,status:"failed",outputs:{error:a.error,...d},timing:{duration_ms:a.durationMs,total_tokens:a.totalTokens},grading:{}};s(`[${i}] ${r.name} run#${o} \u2014 completed in ${(a.durationMs/1e3).toFixed(1)}s`);let u={};if(!e.skipGrading&&r.expectations.length>0){s(`[${i}] ${r.name} run#${o} \u2014 grading...`);let t=await v({prompt:r.prompt,output:a.output,expectations:r.expectations,model:e.graderModel??e.model,timeout:e.timeout});u=t,s(`[${i}] ${r.name} run#${o} \u2014 grading done: pass_rate=${t.summary.pass_rate==null?"n/a (all assertions errored)":`${(t.summary.pass_rate*100).toFixed(0)}%`}`)}return{evalId:r.id,evalTargetId:e.targetId,evalTargetVersion:e.targetVersion,configuration:i,runNumber:o,iteration:e.iteration,status:"completed",outputs:{transcript:a.output,...d},timing:{duration_ms:a.durationMs,total_tokens:a.totalTokens,total_duration_seconds:a.durationMs/1e3},grading:u}}finally{n.cleanup()}}m(x,"executeAndGradeCase");async function _(c){let{cases:e,targetContent:s,concurrency:r,runNumber:i,opts:g,skipBaseline:o,onLog:n=m(()=>{},"onLog")}=c,d=o?["with_target"]:["with_target","without_target"],a=[];for(let t of e)for(let l of d)a.push({eval_:t,configuration:l,targetContent:l==="with_target"?s:void 0,runNumber:i});let u=[];for(let t=0;t<a.length;t+=Math.max(1,r)){let l=a.slice(t,t+Math.max(1,r)),k=await Promise.all(l.map(b=>x(b,g,n)));u.push(...k)}for(let t of u)try{await p("/api/eval-runs",t)}catch(l){n(` \u26A0 failed to post a run result: ${l instanceof Error?l.message:String(l)}`)}try{await p(`/api/eval-targets/${g.targetId}/label-state`,{})}catch(t){n(` \u26A0 label-state notification skipped: ${t instanceof Error?t.message:String(t)}`)}return{completed:u.filter(t=>t.status==="completed").length,failed:u.filter(t=>t.status==="failed").length,results:u}}m(_,"runBatchAndPost");export{x as a,_ as b};
1
+ import{e as $}from"./chunk-L2CFSMBC.js";import{a as v}from"./chunk-4L2ZEIRE.js";import{c as f}from"./chunk-HMMO27U4.js";import{f as p}from"./chunk-KLEF5D3A.js";import{a as m}from"./chunk-ZLLER3HP.js";async function x(c,e,s=()=>{}){let{eval_:r,configuration:i,targetContent:g,runNumber:o}=c;s(`[${i}] ${r.name} run#${o} \u2014 executing...`);let n=$({targetType:e.targetType,targetContent:g,targetName:e.targetName}),d={methodology:n.methodology,delivery:n.delivery,isolated:n.isWorktree,...n.leakedFiles.length?{leakedFiles:n.leakedFiles}:{}};n.isWorktree||s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 no git worktree; running without repo context`),n.leakedFiles.length&&s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 CONTAMINATED: ${n.leakedFiles.join(", ")} survived the strip`);try{let a=await f({prompt:r.prompt,targetContent:n.systemPrompt,workDir:n.workDir,timeout:e.timeout,model:e.model});if(a.error)return s(`[${i}] ${r.name} run#${o} \u2014 FAILED: ${a.error}`),{evalId:r.id,evalTargetId:e.targetId,evalTargetVersion:e.targetVersion,configuration:i,runNumber:o,iteration:e.iteration,status:"failed",outputs:{error:a.error,...d},timing:{duration_ms:a.durationMs,total_tokens:a.totalTokens},grading:{}};s(`[${i}] ${r.name} run#${o} \u2014 completed in ${(a.durationMs/1e3).toFixed(1)}s`);let u={};if(!e.skipGrading&&r.expectations.length>0){s(`[${i}] ${r.name} run#${o} \u2014 grading...`);let t=await v({prompt:r.prompt,output:a.output,expectations:r.expectations,model:e.graderModel??e.model,timeout:e.timeout});u=t,s(`[${i}] ${r.name} run#${o} \u2014 grading done: pass_rate=${t.summary.pass_rate==null?"n/a (all assertions errored)":`${(t.summary.pass_rate*100).toFixed(0)}%`}`)}return{evalId:r.id,evalTargetId:e.targetId,evalTargetVersion:e.targetVersion,configuration:i,runNumber:o,iteration:e.iteration,status:"completed",outputs:{transcript:a.output,...d},timing:{duration_ms:a.durationMs,total_tokens:a.totalTokens,total_duration_seconds:a.durationMs/1e3},grading:u}}finally{n.cleanup()}}m(x,"executeAndGradeCase");async function _(c){let{cases:e,targetContent:s,concurrency:r,runNumber:i,opts:g,skipBaseline:o,onLog:n=m(()=>{},"onLog")}=c,d=o?["with_target"]:["with_target","without_target"],a=[];for(let t of e)for(let l of d)a.push({eval_:t,configuration:l,targetContent:l==="with_target"?s:void 0,runNumber:i});let u=[];for(let t=0;t<a.length;t+=Math.max(1,r)){let l=a.slice(t,t+Math.max(1,r)),k=await Promise.all(l.map(b=>x(b,g,n)));u.push(...k)}for(let t of u)try{await p("/api/eval-runs",t)}catch(l){n(` \u26A0 failed to post a run result: ${l instanceof Error?l.message:String(l)}`)}try{await p(`/api/eval-targets/${g.targetId}/label-state`,{})}catch(t){n(` \u26A0 label-state notification skipped: ${t instanceof Error?t.message:String(t)}`)}return{completed:u.filter(t=>t.status==="completed").length,failed:u.filter(t=>t.status==="failed").length,results:u}}m(_,"runBatchAndPost");export{x as a,_ as b};
@@ -1 +1 @@
1
- import{b as l}from"./chunk-6QKI756T.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-H2ORWIEY.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-FAVALJ5C.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-6QKI756T.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-KLEF5D3A.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-FAVALJ5C.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 h}from"./chunk-KQCAELPN.js";import{f as C}from"./chunk-H2ORWIEY.js";import{a as l}from"./chunk-ZLLER3HP.js";var R="with_candidate",b="with_prior_version";function y(n){let r=n.filter(e=>e.configuration===R),i=[];for(let e of r){let o=n.find(s=>s.configuration===b&&s.evalId===e.evalId&&s.runNumber===e.runNumber);if(!o)continue;let a=v(e),d=v(o);a==null||d==null||i.push({withScore:a,withoutScore:d})}return i}l(y,"pairCandidateRuns");function v(n){return n.status!=="completed"?null:n.grading?.summary?.pass_rate??null}l(v,"evidenceOf");function x(n,r,i,e){let o=[];for(let a of n)o.push({eval_:a,configuration:R,targetContent:r,runNumber:e}),o.push({eval_:a,configuration:b,targetContent:i,runNumber:e});return o}l(x,"buildCandidateQueue");async function I(n){let{cases:r,candidateContent:i,priorVersionContent:e,concurrency:o,runNumber:a,opts:d,onLog:s=l(()=>{},"onLog")}=n,p=x(r,i,e,a),u=[],m=Math.max(1,o);for(let t=0;t<p.length;t+=m){let c=p.slice(t,t+m);u.push(...await Promise.all(c.map(E=>h(E,d,s))))}for(let t of u)try{await C("/api/eval-runs",t)}catch(c){s(` \u26A0 failed to post a run result: ${c instanceof Error?c.message:String(c)}`)}let f=y(u),g=r.length-f.length;return g>0&&s(` \u26A0 ${g}/${r.length} case(s) produced no usable pair (failed or ungradeable arm)`),{completed:u.filter(t=>t.status==="completed").length,failed:u.filter(t=>t.status==="failed").length,results:u,pairs:f}}l(I,"runCandidateBatchAndPost");export{R as a,b,y as c,x as d,I as e};
1
+ import{a as h}from"./chunk-ATL4WZBF.js";import{f as C}from"./chunk-KLEF5D3A.js";import{a as l}from"./chunk-ZLLER3HP.js";var R="with_candidate",b="with_prior_version";function y(n){let r=n.filter(e=>e.configuration===R),i=[];for(let e of r){let o=n.find(s=>s.configuration===b&&s.evalId===e.evalId&&s.runNumber===e.runNumber);if(!o)continue;let a=v(e),d=v(o);a==null||d==null||i.push({withScore:a,withoutScore:d})}return i}l(y,"pairCandidateRuns");function v(n){return n.status!=="completed"?null:n.grading?.summary?.pass_rate??null}l(v,"evidenceOf");function x(n,r,i,e){let o=[];for(let a of n)o.push({eval_:a,configuration:R,targetContent:r,runNumber:e}),o.push({eval_:a,configuration:b,targetContent:i,runNumber:e});return o}l(x,"buildCandidateQueue");async function I(n){let{cases:r,candidateContent:i,priorVersionContent:e,concurrency:o,runNumber:a,opts:d,onLog:s=l(()=>{},"onLog")}=n,p=x(r,i,e,a),u=[],m=Math.max(1,o);for(let t=0;t<p.length;t+=m){let c=p.slice(t,t+m);u.push(...await Promise.all(c.map(E=>h(E,d,s))))}for(let t of u)try{await C("/api/eval-runs",t)}catch(c){s(` \u26A0 failed to post a run result: ${c instanceof Error?c.message:String(c)}`)}let f=y(u),g=r.length-f.length;return g>0&&s(` \u26A0 ${g}/${r.length} case(s) produced no usable pair (failed or ungradeable arm)`),{completed:u.filter(t=>t.status==="completed").length,failed:u.filter(t=>t.status==="failed").length,results:u,pairs:f}}l(I,"runCandidateBatchAndPost");export{R as a,b,y as c,x as d,I as e};
@@ -1,2 +1,2 @@
1
- import{c as R}from"./chunk-6QKI756T.js";import{a as P}from"./chunk-5RBLIVBF.js";import{b as s,c as r,i as j}from"./chunk-JGLVVIEM.js";import{a as g}from"./chunk-ZLLER3HP.js";import{and as y,eq as l,isNotNull as I}from"drizzle-orm";async function O($,p={}){let k=p.db??j(),b=p.removeWorktreeFn??R,n=p.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
1
+ import{c as R}from"./chunk-6QKI756T.js";import{a as P}from"./chunk-5RBLIVBF.js";import{b as s,c as r,i as j}from"./chunk-45DOTNQM.js";import{a as g}from"./chunk-ZLLER3HP.js";import{and as y,eq as l,isNotNull as I}from"drizzle-orm";async function O($,p={}){let k=p.db??j(),b=p.removeWorktreeFn??R,n=p.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
2
2
  `)),{runId:t}=$,[i]=await k.select({id:s.id,userId:s.userId,projectPath:s.projectPath}).from(s).where(l(s.id,t)).limit(1);if(!i)throw new P(`Run ${t} not found`);if(!i.projectPath)throw new P(`Run ${t} has no projectPath; cannot resolve a repo root for worktree cleanup`);let c=i.projectPath,v=await k.select({id:r.id,projectPath:r.projectPath}).from(r).where(y(l(r.runId,t),l(r.userId,i.userId),I(r.endedAt))),a=[],u=0,d=0,h=0,m=0,w=new Set;for(let e of v)if(!(!e.projectPath||e.projectPath===c)&&!w.has(e.projectPath)){w.add(e.projectPath);try{let o=await b({repoRoot:c,worktreePath:e.projectPath});o.removed?(u++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),n(`removed worktree ${e.projectPath} (session ${e.id})`)):o.reason==="dirty"?(d++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),n(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(h++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),n(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(o){let f=o instanceof Error?o.message:String(o);m++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:f.slice(0,1e3)}),n(`error removing worktree ${e.projectPath} (session ${e.id}): ${f}`)}}return n(`run ${t} cleanup: removed=${u} skippedDirty=${d} absent=${h} errored=${m}`),{runId:t,repoRoot:c,removed:u,skippedDirty:d,absent:h,errored:m,worktrees:a}}g(O,"processRunCleanup");export{O as a};
@@ -1,3 +1,3 @@
1
- import{A as u,D as d}from"./chunk-VLXCQ2DC.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as l,readFileSync as p,unlinkSync as y,writeFileSync as a}from"node:fs";import{homedir as h}from"node:os";import{join as S}from"node:path";function f(){return{vscode:u(),cursor:d(),marker:S(h(),".config","rulemetric","editor-proxy-unpinned.json")}}s(f,"defaultEditorPinPaths");function m(r,t){return r===`http://localhost:${t}`||r===`http://127.0.0.1:${t}`}s(m,"isOurProxyValue");function c(r){if(!l(r))return null;try{return JSON.parse(p(r,"utf-8"))}catch{return null}}s(c,"readSettings");function v(r,t=f()){let o=[];for(let e of["vscode","cursor"]){let n=t[e],i=c(n);if(!(!i||!m(i["http.proxy"],r))){delete i["http.proxy"],i["http.proxyStrictSSL"]===!1&&delete i["http.proxyStrictSSL"];try{a(n,JSON.stringify(i,null,2)+`
1
+ import{A as u,D as d}from"./chunk-3QXRLIGC.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as l,readFileSync as p,unlinkSync as y,writeFileSync as a}from"node:fs";import{homedir as h}from"node:os";import{join as S}from"node:path";function f(){return{vscode:u(),cursor:d(),marker:S(h(),".config","rulemetric","editor-proxy-unpinned.json")}}s(f,"defaultEditorPinPaths");function m(r,t){return r===`http://localhost:${t}`||r===`http://127.0.0.1:${t}`}s(m,"isOurProxyValue");function c(r){if(!l(r))return null;try{return JSON.parse(p(r,"utf-8"))}catch{return null}}s(c,"readSettings");function v(r,t=f()){let o=[];for(let e of["vscode","cursor"]){let n=t[e],i=c(n);if(!(!i||!m(i["http.proxy"],r))){delete i["http.proxy"],i["http.proxyStrictSSL"]===!1&&delete i["http.proxyStrictSSL"];try{a(n,JSON.stringify(i,null,2)+`
2
2
  `),o.push(e)}catch{}}}if(o.length>0){let e=c(t.marker),n=[...new Set([...e?.editors??[],...o])];try{a(t.marker,JSON.stringify({editors:n,gatewayPort:r,unpinnedAt:new Date().toISOString()},null,2)+`
3
3
  `)}catch{}}return o}s(v,"unpinEditorProxies");function A(r,t=f()){let o=c(t.marker);if(!o||!Array.isArray(o.editors))return[];let e=[];for(let n of o.editors)if(!(n!=="vscode"&&n!=="cursor"))try{r(n),e.push(n)}catch{}try{y(t.marker)}catch{}return e}s(A,"repinEditorProxies");export{f as a,v as b,A as c};
@@ -1 +1 @@
1
- import{a as d}from"./chunk-CJRYYV76.js";import{b as u}from"./chunk-KQCAELPN.js";import{e as o}from"./chunk-H2ORWIEY.js";import{a as c}from"./chunk-ZLLER3HP.js";async function w(e,g){let i=c(a=>g?.logger?.info?.(a)??console.log(a),"log"),{evalTargetId:n}=e,s=await o(`/api/eval-targets/${n}/judge-calibration`),t=d({powered:s.powerCheck.powered,mde:s.powerCheck.mde??Number.POSITIVE_INFINITY},s.caseDiscrimination??{total:0,discriminating:0,nonDiscriminating:0,unpaired:0},{runsCompleted:0,maxRuns:e.maxRuns??24,batchesRun:0,maxBatches:1});if(t.action==="stop")return i(`[cron_eval_autorun] ${n}: ${t.reason}`),{skipped:t.code,reason:t.reason};let r=await o(`/api/eval-targets/${n}`),l=(await o(`/api/eval-targets/${n}/evals`)).filter(a=>!a.retiredAt);if(l.length===0)return{skipped:"no-live-cases"};let{completed:m,failed:p}=await u({cases:l,targetContent:r.content,concurrency:2,runNumber:1,opts:{targetId:n,targetVersion:r.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:r.type,targetName:r.name},onLog:i});return i(`[cron_eval_autorun] ${r.name}: ${m} completed, ${p} failed`),{ranRuns:m,reason:t.reason}}c(w,"cronEvalAutorun");export{w as a};
1
+ import{a as d}from"./chunk-CJRYYV76.js";import{b as u}from"./chunk-ATL4WZBF.js";import{e as o}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";async function w(e,g){let i=c(a=>g?.logger?.info?.(a)??console.log(a),"log"),{evalTargetId:n}=e,s=await o(`/api/eval-targets/${n}/judge-calibration`),t=d({powered:s.powerCheck.powered,mde:s.powerCheck.mde??Number.POSITIVE_INFINITY},s.caseDiscrimination??{total:0,discriminating:0,nonDiscriminating:0,unpaired:0},{runsCompleted:0,maxRuns:e.maxRuns??24,batchesRun:0,maxBatches:1});if(t.action==="stop")return i(`[cron_eval_autorun] ${n}: ${t.reason}`),{skipped:t.code,reason:t.reason};let r=await o(`/api/eval-targets/${n}`),l=(await o(`/api/eval-targets/${n}/evals`)).filter(a=>!a.retiredAt);if(l.length===0)return{skipped:"no-live-cases"};let{completed:m,failed:p}=await u({cases:l,targetContent:r.content,concurrency:2,runNumber:1,opts:{targetId:n,targetVersion:r.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:r.type,targetName:r.name},onLog:i});return i(`[cron_eval_autorun] ${r.name}: ${m} completed, ${p} failed`),{ranRuns:m,reason:t.reason}}c(w,"cronEvalAutorun");export{w as a};
@@ -1,4 +1,4 @@
1
- import{d as b,f as y}from"./chunk-B3BHB26P.js";import{e as M,f as w}from"./chunk-H2ORWIEY.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
1
+ import{d as b,f as y}from"./chunk-B3BHB26P.js";import{e as M,f as w}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
2
2
  `);async function C(f){try{let n=await fetch(f,{headers:{accept:"text/plain, text/markdown, text/html"}});if(!n.ok)return null;let i=await n.text();return i.length>v?i.slice(0,v):i}catch{return null}}u(C,"fetchPage");var L=u(async(f,n)=>{let i=await M("/api/pricing/coverage"),I=[...i.unpriced,...i.stale],m=new Map;for(let r of I)m.set(`${r.provider}::${r.modelId}`,r);let a=[...m.values()];if(a.length===0)return n.logger.info("[cron-refresh-pricing] coverage clean \u2014 nothing unpriced or stale"),{status:"clean",checked:i.unpriced.length+i.stale.length};if(b()==="none")return n.logger.warn(`[cron-refresh-pricing] ${a.length} model(s) need pricing but no LLM backend (install the claude CLI or set ANTHROPIC_API_KEY) \u2014 skipping`),{status:"no-llm",pending:a.length};let d=new Map;for(let r of a){let o=d.get(r.provider)??[];o.push(r.modelId),d.set(r.provider,o)}let t={written:0,unchanged:0,flagged:0,rejected:0,skipped:0},c=[];for(let[r,o]of d){let h=$[r];if(!h){n.logger.warn(`[cron-refresh-pricing] no pricing source configured for provider '${r}' (${o.length} model(s)) \u2014 skipping`),t.skipped+=o.length;continue}let p="",l="";for(let e of h){let s=await C(e);s&&(p+=`
3
3
 
4
4
  === ${e} ===
@@ -1 +1 @@
1
- import{c as C}from"./chunk-TIOKY2IA.js";import{a as H}from"./chunk-ZYVWALMS.js";import{a as A}from"./chunk-NKPLTT7J.js";import{a as E}from"./chunk-HUADECKZ.js";import{a as I}from"./chunk-7SI6KWSX.js";import{a as x}from"./chunk-H7J27U4P.js";import{b as S}from"./chunk-W2MOTOQE.js";import{a as M}from"./chunk-IQTSUAGM.js";import{a as L}from"./chunk-WFYQ6SPJ.js";import{a as y}from"./chunk-RSKQRVPJ.js";import{a as P}from"./chunk-SWSGNEVO.js";import{a as N}from"./chunk-BPQ66YTY.js";import{a as k}from"./chunk-UF6US7VU.js";import{b as _}from"./chunk-SNJ2NIIE.js";import{b as R}from"./chunk-IXLDCX7M.js";import{a as T}from"./chunk-JIJKIPE6.js";import{b as h}from"./chunk-5RBLIVBF.js";import{j as b}from"./chunk-ZYI66XKV.js";import{d as w}from"./chunk-NTKO4H2K.js";import{b as f,e as v,f as p}from"./chunk-H2ORWIEY.js";import{a as s}from"./chunk-ZLLER3HP.js";var W={process_eval:E,process_insights:I,process_launch:S,process_send_message:y,process_conversation:A,process_session_goal:H,distill_memories:R,memory_ab:M,process_announcement:T,process_run_cleanup:L,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:N,cron_eval_autorun:P,cron_instruction_evolution:b,process_judge_review:x},D=Object.keys(W),F=new Set(["process_announcement","process_run_cleanup","memory_ab"]);function J(e=process.env){return e.DATABASE_URL?D:D.filter(n=>!F.has(n))}s(J,"availableCapabilities");var U=3e4,K=3e4,G=3e4,V=250,B=5e3,q=`thin-agent-${process.pid}`,g=null;function Q(e,n,r,l){let c;try{let d=w();c={claude:d.claudeBin!=null,codex:d.codexBin!=null,codexModel:d.codexConfiguredModel}}catch{}let i=s(d=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:q,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:d,metadata:{capabilities:e,mode:"thin-agent",llmEngines:c}}).then(u=>{let t=u?.advisory;t&&t.message!==g?(g=t.message,a(r,{event:"worker_advisory",code:t.code,message:t.message})):t||(g=null)}).catch(u=>{a(r,{event:"presence_heartbeat_error",error:u instanceof Error?u.message:String(u)})})},"send");i("alive");let o=setInterval(()=>i("alive"),G);n.addEventListener("abort",()=>{clearInterval(o),i("shutting_down")},{once:!0})}s(Q,"startPresenceHeartbeat");function a(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(a,"structuredLog");function O(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",c),r(!0)},e),c=s(()=>{clearTimeout(l),n.removeEventListener("abort",c),r(!1)},"onAbort");n.addEventListener("abort",c,{once:!0})})}s(O,"abortableSleep");async function X(e,n){let r=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${n}`,l=await v(`/api/work/next?${r}`);return l==null||typeof l=="string"?null:l}s(X,"pollForWork");function z(e,n){return{logger:{info:s(r=>n(r),"info"),warn:s(r=>n(r),"warn"),error:s(r=>n(r),"error")},job:{attempts:e}}}s(z,"makeHelpers");async function Y(e,n,r){let l=W[e.kind],c=Date.now();if(a(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let o=`unknown kind: ${e.kind}`;a(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:o}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:o,terminal:!0}).catch(()=>{});return}let i=setInterval(()=>{a(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(o=>{a(r,{event:"heartbeat_error",jobId:e.id,error:o instanceof Error?o.message:String(o)})})},n);try{let o=z(e.attempts,r),d=await l(e.payload,o)??{};clearInterval(i),a(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-c}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:d})}catch(o){clearInterval(i);let d=h(o),u=o instanceof Error?o.message:String(o);a(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-c,terminal:d,error:u}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:u,terminal:d}).catch(t=>{a(r,{event:"fail_post_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})}}s(Y,"runOne");async function we(e){let n=e.log??(()=>{}),r=e.pollWaitMs??U,l=e.heartbeatIntervalMs??K,c=e.capabilities??J(),i=V;a(n,{event:"agent_start",capabilities:c,pollWaitMs:r,heartbeatIntervalMs:l}),Q(c,e.signal,n,e.version),C({signal:e.signal,log:n}).catch(t=>{a(n,{event:"tt_heartbeat_fatal",error:t instanceof Error?t.message:String(t)})});let o=5*6e4,d=0,u=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let t=Date.now();if(t-d<o)return!1;d=t;let m=e.readInstalledVersion();return!!(m&&m!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(u()){a(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let t=null;try{t=await X(c,r)}catch(m){let $=m instanceof f?m.statusCode:void 0;if(a(n,{event:"poll_error",status:$,error:m instanceof Error?m.message:String(m)}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}if(!t){if(a(n,{event:"poll_204"}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}i=V,await Y(t,l,n)}a(n,{event:"agent_stop"})}s(we,"runAgentLoop");export{W as a,D as b,J as c,X as d,we as e};
1
+ import{c as C}from"./chunk-5XUN743A.js";import{a as y}from"./chunk-RSKQRVPJ.js";import{a as H}from"./chunk-HXZM2UHO.js";import{a as A}from"./chunk-O2BKBW7Z.js";import{a as E}from"./chunk-KGQ5W54Y.js";import{a as I}from"./chunk-O7PSLZO6.js";import{a as x}from"./chunk-MOAJLSYV.js";import{b as S}from"./chunk-BLCMXTIK.js";import{a as M}from"./chunk-QUDMK76I.js";import{a as L}from"./chunk-EF6JLMNH.js";import{a as P}from"./chunk-EN43UYBN.js";import{a as N}from"./chunk-FAXV5AAG.js";import{a as k}from"./chunk-UF6US7VU.js";import{b as _}from"./chunk-6ME5OTS5.js";import{b as R}from"./chunk-YW3JQKGY.js";import{a as T}from"./chunk-7UCNONVI.js";import{b as h}from"./chunk-5RBLIVBF.js";import{j as b}from"./chunk-2RCWYVEU.js";import{d as w}from"./chunk-NTKO4H2K.js";import{b as f,e as v,f as p}from"./chunk-KLEF5D3A.js";import{a as s}from"./chunk-ZLLER3HP.js";var W={process_eval:E,process_insights:I,process_launch:S,process_send_message:y,process_conversation:A,process_session_goal:H,distill_memories:R,memory_ab:M,process_announcement:T,process_run_cleanup:L,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:N,cron_eval_autorun:P,cron_instruction_evolution:b,process_judge_review:x},D=Object.keys(W),F=new Set(["process_announcement","process_run_cleanup","memory_ab"]);function J(e=process.env){return e.DATABASE_URL?D:D.filter(n=>!F.has(n))}s(J,"availableCapabilities");var U=3e4,K=3e4,G=3e4,V=250,B=5e3,q=`thin-agent-${process.pid}`,g=null;function Q(e,n,r,l){let c;try{let d=w();c={claude:d.claudeBin!=null,codex:d.codexBin!=null,codexModel:d.codexConfiguredModel}}catch{}let i=s(d=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:q,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:d,metadata:{capabilities:e,mode:"thin-agent",llmEngines:c}}).then(u=>{let t=u?.advisory;t&&t.message!==g?(g=t.message,a(r,{event:"worker_advisory",code:t.code,message:t.message})):t||(g=null)}).catch(u=>{a(r,{event:"presence_heartbeat_error",error:u instanceof Error?u.message:String(u)})})},"send");i("alive");let o=setInterval(()=>i("alive"),G);n.addEventListener("abort",()=>{clearInterval(o),i("shutting_down")},{once:!0})}s(Q,"startPresenceHeartbeat");function a(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(a,"structuredLog");function O(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",c),r(!0)},e),c=s(()=>{clearTimeout(l),n.removeEventListener("abort",c),r(!1)},"onAbort");n.addEventListener("abort",c,{once:!0})})}s(O,"abortableSleep");async function X(e,n){let r=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${n}`,l=await v(`/api/work/next?${r}`);return l==null||typeof l=="string"?null:l}s(X,"pollForWork");function z(e,n){return{logger:{info:s(r=>n(r),"info"),warn:s(r=>n(r),"warn"),error:s(r=>n(r),"error")},job:{attempts:e}}}s(z,"makeHelpers");async function Y(e,n,r){let l=W[e.kind],c=Date.now();if(a(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let o=`unknown kind: ${e.kind}`;a(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:o}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:o,terminal:!0}).catch(()=>{});return}let i=setInterval(()=>{a(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(o=>{a(r,{event:"heartbeat_error",jobId:e.id,error:o instanceof Error?o.message:String(o)})})},n);try{let o=z(e.attempts,r),d=await l(e.payload,o)??{};clearInterval(i),a(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-c}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:d})}catch(o){clearInterval(i);let d=h(o),u=o instanceof Error?o.message:String(o);a(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-c,terminal:d,error:u}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:u,terminal:d}).catch(t=>{a(r,{event:"fail_post_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})}}s(Y,"runOne");async function we(e){let n=e.log??(()=>{}),r=e.pollWaitMs??U,l=e.heartbeatIntervalMs??K,c=e.capabilities??J(),i=V;a(n,{event:"agent_start",capabilities:c,pollWaitMs:r,heartbeatIntervalMs:l}),Q(c,e.signal,n,e.version),C({signal:e.signal,log:n}).catch(t=>{a(n,{event:"tt_heartbeat_fatal",error:t instanceof Error?t.message:String(t)})});let o=5*6e4,d=0,u=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let t=Date.now();if(t-d<o)return!1;d=t;let m=e.readInstalledVersion();return!!(m&&m!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(u()){a(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let t=null;try{t=await X(c,r)}catch(m){let $=m instanceof f?m.statusCode:void 0;if(a(n,{event:"poll_error",status:$,error:m instanceof Error?m.message:String(m)}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}if(!t){if(a(n,{event:"poll_204"}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}i=V,await Y(t,l,n)}a(n,{event:"agent_stop"})}s(we,"runAgentLoop");export{W as a,D as b,J as c,X as d,we as e};
@@ -1,4 +1,4 @@
1
- import{a as i}from"./chunk-ZLLER3HP.js";import{writeFileSync as s,chmodSync as o}from"node:fs";import{homedir as u}from"node:os";import{join as a}from"node:path";var r=a(u(),".claude","statusline-rulemetric.sh");function h(t){let e=t?`
1
+ import{a as i}from"./chunk-ZLLER3HP.js";import{writeFileSync as s,chmodSync as o}from"node:fs";import{homedir as u}from"node:os";import{join as a}from"node:path";var r=a(u(),".claude","statusline-rulemetric.sh");function p(t){let e=t?`
2
2
  # Chain to the original statusLine command so the user's prompt is preserved.
3
3
  echo "$STDIN_PAYLOAD" | ${t}`:"",n=`#!/usr/bin/env bash
4
4
  # RuleMetric statusline shim \u2014 auto-generated by \`rulemetric hooks install --statusline-usage\`
@@ -17,6 +17,12 @@ if [ -f "$CONFIG_ENV" ]; then
17
17
  source "$CONFIG_ENV"
18
18
  fi
19
19
 
20
+ # L1.2: strict-local refuses the cloud default \u2014 chain to the user's own
21
+ # statusline and send nothing.
22
+ if [ "\${RULEMETRIC_STRICT_LOCAL:-0}" = "1" ] && [ -z "\${RULEMETRIC_API_URL:-}" ]; then
23
+ ${e}
24
+ exit 0
25
+ fi
20
26
  API_URL="\${RULEMETRIC_API_URL:-https://rulemetric.com}"
21
27
  AUTH_TOKEN="\${RULEMETRIC_ACCESS_TOKEN:-\${RULEMETRIC_API_KEY:-}}"
22
28
 
@@ -126,4 +132,4 @@ done
126
132
 
127
133
  ${e}
128
134
  exit 0
129
- `;return s(r,n,{encoding:"utf-8"}),o(r,493),r}i(h,"writeStatuslineShim");var S={type:"command",command:r,refreshInterval:30};function m(t){let e=t.statusLine;if(e){if(typeof e=="string")return e===r?void 0:e;if(typeof e=="object"&&e!==null){let n=e.command;return typeof n!="string"||n===r?void 0:n}}}i(m,"readCurrentStatusLine");function $(t){return c(t)?(delete t.statusLine,!0):!1}i($,"removeStatuslineShim");var l="/.claude/statusline-rulemetric.sh";function C(t){let e=t.statusLine,n=typeof e=="string"?e:typeof e=="object"&&e!==null?e.command:void 0;return typeof n=="string"&&(n===r||n.endsWith(l))?(delete t.statusLine,!0):!1}i(C,"removeStatuslineShimAnyHome");function c(t){let e=t.statusLine;return e?typeof e=="string"?e===r:typeof e=="object"&&e!==null?e.command===r:!1:!1}i(c,"isStatuslineShimInstalled");export{r as a,h as b,S as c,m as d,$ as e,C as f,c as g};
135
+ `;return s(r,n,{encoding:"utf-8"}),o(r,493),r}i(p,"writeStatuslineShim");var S={type:"command",command:r,refreshInterval:30};function $(t){let e=t.statusLine;if(e){if(typeof e=="string")return e===r?void 0:e;if(typeof e=="object"&&e!==null){let n=e.command;return typeof n!="string"||n===r?void 0:n}}}i($,"readCurrentStatusLine");function C(t){return c(t)?(delete t.statusLine,!0):!1}i(C,"removeStatuslineShim");var l="/.claude/statusline-rulemetric.sh";function m(t){let e=t.statusLine,n=typeof e=="string"?e:typeof e=="object"&&e!==null?e.command:void 0;return typeof n=="string"&&(n===r||n.endsWith(l))?(delete t.statusLine,!0):!1}i(m,"removeStatuslineShimAnyHome");function c(t){let e=t.statusLine;return e?typeof e=="string"?e===r:typeof e=="object"&&e!==null?e.command===r:!1:!1}i(c,"isStatuslineShimInstalled");export{r as a,p as b,S as c,$ as d,C as e,m as f,c as g};