@rulemetric/cli 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/{chunk-LMCICVE7.js → chunk-2UK4DZFW.js} +1 -1
  3. package/dist/{chunk-FK55FXKQ.js → chunk-35YVHBLL.js} +1 -1
  4. package/dist/{chunk-J7UZXRTH.js → chunk-3FNTV2TW.js} +1 -1
  5. package/dist/{chunk-U7BPWFOP.js → chunk-3IMRLHJJ.js} +1 -1
  6. package/dist/{chunk-TWPG3TEQ.js → chunk-42A4PUW7.js} +2 -2
  7. package/dist/{chunk-SV73ASP2.js → chunk-43VKTVM3.js} +1 -1
  8. package/dist/{chunk-MX34N7Y5.js → chunk-44TYRMIS.js} +1 -1
  9. package/dist/{chunk-HAYO6JYI.js → chunk-4FJYVYCU.js} +1 -1
  10. package/dist/{chunk-TTSDPDRH.js → chunk-5BT375C7.js} +1 -1
  11. package/dist/{chunk-N26UEHI3.js → chunk-5Z3H5JHK.js} +1 -1
  12. package/dist/{chunk-EWGE7YTQ.js → chunk-6ANODRDT.js} +1 -1
  13. package/dist/{chunk-ZZHIBOMT.js → chunk-76UKAFNM.js} +1 -1
  14. package/dist/{chunk-IOX4VJPR.js → chunk-7MTYUTUN.js} +1 -1
  15. package/dist/{chunk-JLBQKV4V.js → chunk-AGEZAKCC.js} +1 -1
  16. package/dist/{chunk-XAOLOR4Q.js → chunk-AIYFT4P6.js} +1 -1
  17. package/dist/{chunk-BVOXWAJO.js → chunk-B5X6HCBK.js} +1 -1
  18. package/dist/chunk-BAITMD76.js +1 -0
  19. package/dist/{chunk-AXJAGWZB.js → chunk-BFQVAU6N.js} +1 -1
  20. package/dist/{chunk-2WQUOC6S.js → chunk-BMT5WMEV.js} +1 -1
  21. package/dist/chunk-CT6GJQIR.js +1 -0
  22. package/dist/{chunk-FCTFHY3X.js → chunk-DHX4U6EC.js} +1 -1
  23. package/dist/chunk-DQYYHX6K.js +1 -0
  24. package/dist/{chunk-OO2ZRKZY.js → chunk-DVU5PHPM.js} +1 -1
  25. package/dist/{chunk-ZA6NXNPR.js → chunk-EMLLGASZ.js} +1 -1
  26. package/dist/{chunk-XFLKW6SJ.js → chunk-EUHRTEVJ.js} +1 -1
  27. package/dist/chunk-FBSZ6KCM.js +1 -0
  28. package/dist/{chunk-E5YE25QG.js → chunk-FKTT7A4H.js} +1 -1
  29. package/dist/{chunk-UQDOOQCM.js → chunk-FYZ6HHCV.js} +1 -1
  30. package/dist/{chunk-5XEGRU2R.js → chunk-GKVHFXUQ.js} +1 -1
  31. package/dist/chunk-GPBN4ROE.js +2 -0
  32. package/dist/chunk-H6FVXVGG.js +1 -0
  33. package/dist/{chunk-JKWB6UXA.js → chunk-HNYHZO2J.js} +1 -1
  34. package/dist/{chunk-FJX7WDPG.js → chunk-I6ZQOMZS.js} +1 -1
  35. package/dist/{chunk-AT2MMCOJ.js → chunk-IO46ICZY.js} +1 -1
  36. package/dist/chunk-IQEZ3T5A.js +1 -0
  37. package/dist/{chunk-DDYGA2DS.js → chunk-ISFPPDDB.js} +1 -1
  38. package/dist/chunk-JP6ULOEX.js +2 -0
  39. package/dist/{chunk-N7SZWKCU.js → chunk-JTYVBR5H.js} +1 -1
  40. package/dist/{chunk-GQGGFHX7.js → chunk-KOYHJFB3.js} +1 -1
  41. package/dist/chunk-LJRJ2RAC.js +4 -0
  42. package/dist/{chunk-JRWQJZYQ.js → chunk-MMLRWCBW.js} +1 -1
  43. package/dist/{chunk-N4RJ6CN7.js → chunk-MU7KKU3O.js} +1 -1
  44. package/dist/{chunk-HFSISGCJ.js → chunk-MXHAXY66.js} +1 -1
  45. package/dist/{chunk-GN46S7T4.js → chunk-N4YPDZJF.js} +1 -1
  46. package/dist/{chunk-JRAXWASH.js → chunk-NYNHX7OX.js} +1 -1
  47. package/dist/{chunk-E7RH43OS.js → chunk-OP4U3XBZ.js} +1 -1
  48. package/dist/{chunk-OMRH4JXS.js → chunk-OVS7ZDJ4.js} +1 -1
  49. package/dist/{chunk-YNLHJHUP.js → chunk-PIVEJTNF.js} +1 -1
  50. package/dist/{chunk-S5U76YUI.js → chunk-POEMCITL.js} +1 -1
  51. package/dist/{chunk-UFQ43KXE.js → chunk-Q36QSFSB.js} +1 -1
  52. package/dist/chunk-Q776YUBD.js +1 -0
  53. package/dist/chunk-QAMHZY2P.js +1 -0
  54. package/dist/{chunk-EXVXKJ7Y.js → chunk-QRIJ3AHP.js} +1 -1
  55. package/dist/{chunk-IC6VZHE6.js → chunk-RAQLVO2X.js} +1 -1
  56. package/dist/{chunk-V4PUYPTU.js → chunk-RG3R4EAB.js} +1 -1
  57. package/dist/{chunk-OLJF4K7L.js → chunk-RMRVUI7B.js} +1 -1
  58. package/dist/{chunk-O62OLKQL.js → chunk-RXZLBSDO.js} +1 -1
  59. package/dist/{chunk-RRM4HQG4.js → chunk-SCQK52SL.js} +1 -1
  60. package/dist/{chunk-YP2CBUXH.js → chunk-V55ROUNP.js} +1 -1
  61. package/dist/{chunk-YUIRDBQQ.js → chunk-VIFOLTZT.js} +1 -1
  62. package/dist/{chunk-XAXEZI6Z.js → chunk-VU24IH5S.js} +1 -1
  63. package/dist/{chunk-LDUJWJ6A.js → chunk-VXL5H3VZ.js} +1 -1
  64. package/dist/{chunk-NRYVMGJN.js → chunk-W23OYQXI.js} +1 -1
  65. package/dist/{chunk-S5CQSP35.js → chunk-WWQWHC4K.js} +1 -1
  66. package/dist/{chunk-VLWNSTYW.js → chunk-XGMOVQ5G.js} +1 -1
  67. package/dist/{chunk-NSPDDSRR.js → chunk-XJ25HFIT.js} +1 -1
  68. package/dist/{chunk-PPIZMPNI.js → chunk-XMA6SWOT.js} +1 -1
  69. package/dist/{chunk-H4LUPIHJ.js → chunk-XMTKP74H.js} +1 -1
  70. package/dist/chunk-XQYAVSUQ.js +1 -0
  71. package/dist/{chunk-ET7753IY.js → chunk-YK2IEHLB.js} +1 -1
  72. package/dist/{chunk-7ML2UCI7.js → chunk-ZK3ACE4T.js} +1 -1
  73. package/dist/commands/antigravity/backfill.js +1 -1
  74. package/dist/commands/auth/create-key.js +1 -1
  75. package/dist/commands/auth/login.js +1 -1
  76. package/dist/commands/auth/logout.js +1 -1
  77. package/dist/commands/auth/revoke-key.js +1 -1
  78. package/dist/commands/auth/signup.js +1 -1
  79. package/dist/commands/auth/status.js +1 -1
  80. package/dist/commands/capture/scope.js +1 -1
  81. package/dist/commands/catalog/index.js +1 -1
  82. package/dist/commands/catalog/recommend.js +1 -1
  83. package/dist/commands/crons/list.js +1 -1
  84. package/dist/commands/crons/run.js +1 -1
  85. package/dist/commands/dashboard.js +1 -1
  86. package/dist/commands/diagnostics.js +1 -1
  87. package/dist/commands/eval-targets/create.js +1 -1
  88. package/dist/commands/eval-targets/list.js +1 -1
  89. package/dist/commands/evals/agent.js +1 -1
  90. package/dist/commands/evals/auto-run.js +1 -1
  91. package/dist/commands/evals/benchmark.js +1 -1
  92. package/dist/commands/evals/compare.js +1 -1
  93. package/dist/commands/evals/create.js +1 -1
  94. package/dist/commands/evals/optimize-description.js +1 -1
  95. package/dist/commands/evals/optimize.js +1 -1
  96. package/dist/commands/evals/refine-cases.js +1 -1
  97. package/dist/commands/evals/run.js +1 -1
  98. package/dist/commands/evals/validate-judge.js +1 -1
  99. package/dist/commands/experiments/list.js +1 -1
  100. package/dist/commands/gateway/ensure.js +1 -1
  101. package/dist/commands/hooks/install.js +1 -1
  102. package/dist/commands/hooks/run.js +1 -1
  103. package/dist/commands/hooks/uninstall.js +1 -1
  104. package/dist/commands/instructions/create.js +1 -1
  105. package/dist/commands/instructions/dedupe.js +1 -1
  106. package/dist/commands/instructions/delete.js +1 -1
  107. package/dist/commands/instructions/fork.js +1 -1
  108. package/dist/commands/instructions/get.js +1 -1
  109. package/dist/commands/instructions/list.js +1 -1
  110. package/dist/commands/instructions/promote.js +1 -1
  111. package/dist/commands/instructions/pull.js +1 -1
  112. package/dist/commands/instructions/restore.js +1 -1
  113. package/dist/commands/instructions/retract.js +1 -1
  114. package/dist/commands/instructions/upstream.js +1 -1
  115. package/dist/commands/instructions/versions.js +1 -1
  116. package/dist/commands/launcher.js +1 -1
  117. package/dist/commands/local/down.js +1 -1
  118. package/dist/commands/local/up.js +1 -1
  119. package/dist/commands/org/current.js +1 -1
  120. package/dist/commands/org/list.js +1 -1
  121. package/dist/commands/org/switch.js +1 -1
  122. package/dist/commands/packs/add-instruction.js +1 -1
  123. package/dist/commands/packs/apply.js +1 -1
  124. package/dist/commands/packs/create.js +1 -1
  125. package/dist/commands/packs/fork.js +1 -1
  126. package/dist/commands/packs/get.js +1 -1
  127. package/dist/commands/packs/list.js +1 -1
  128. package/dist/commands/packs/remove-instruction.js +1 -1
  129. package/dist/commands/proxy/env.js +1 -1
  130. package/dist/commands/proxy/logs.js +1 -1
  131. package/dist/commands/proxy/restart.js +1 -1
  132. package/dist/commands/proxy/setup.js +1 -1
  133. package/dist/commands/proxy/start.js +1 -1
  134. package/dist/commands/proxy/status.js +1 -1
  135. package/dist/commands/proxy/stop.js +1 -1
  136. package/dist/commands/research/backfill.js +1 -1
  137. package/dist/commands/research/tail-transcript.js +1 -1
  138. package/dist/commands/service/install.js +1 -1
  139. package/dist/commands/service/status.js +1 -1
  140. package/dist/commands/service/uninstall.js +1 -1
  141. package/dist/commands/sessions/analyze.js +1 -1
  142. package/dist/commands/sessions/delete.js +1 -1
  143. package/dist/commands/sessions/end.js +1 -1
  144. package/dist/commands/sessions/import.js +1 -1
  145. package/dist/commands/sessions/list.js +1 -1
  146. package/dist/commands/sessions/start.js +1 -1
  147. package/dist/commands/setup.js +1 -1
  148. package/dist/commands/skills/export-approved.js +1 -1
  149. package/dist/commands/skills/install.js +1 -1
  150. package/dist/commands/skills/list.js +1 -1
  151. package/dist/commands/skills/publish.js +1 -1
  152. package/dist/commands/skills/search.js +1 -1
  153. package/dist/commands/skills/update.js +1 -1
  154. package/dist/commands/suggestions/accept.js +1 -1
  155. package/dist/commands/suggestions/auto.js +1 -1
  156. package/dist/commands/suggestions/dismiss.js +1 -1
  157. package/dist/commands/suggestions/list.js +1 -1
  158. package/dist/commands/suggestions/refresh.js +1 -1
  159. package/dist/commands/suggestions/undo.js +1 -1
  160. package/dist/dashboard/Dashboard.js +1 -1
  161. package/dist/dashboard/data.js +1 -1
  162. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  163. package/dist/dashboard/launcher/api.js +1 -1
  164. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  165. package/dist/dashboard/panels/measurement.js +1 -0
  166. package/dist/{dist-NHS7HY5Q.js → dist-GSHUC7UU.js} +1 -1
  167. package/dist/lib/active-org-refresh.js +1 -1
  168. package/dist/lib/agent-loop.js +1 -1
  169. package/dist/lib/antigravity-transcript.js +1 -1
  170. package/dist/lib/api-client.js +1 -1
  171. package/dist/lib/autorun-batch.js +1 -0
  172. package/dist/lib/ensure-api-key.js +1 -1
  173. package/dist/lib/ensure-fresh-token.js +1 -1
  174. package/dist/lib/eval-analyzer.js +1 -1
  175. package/dist/lib/eval-benchmark.js +1 -1
  176. package/dist/lib/eval-candidate-run.js +1 -1
  177. package/dist/lib/eval-case-generator.js +1 -1
  178. package/dist/lib/eval-conversation-handler.js +1 -1
  179. package/dist/lib/eval-executor.js +1 -1
  180. package/dist/lib/eval-grader.js +1 -1
  181. package/dist/lib/eval-meta-judge.js +1 -1
  182. package/dist/lib/eval-resume.js +1 -1
  183. package/dist/lib/eval-run-batch.js +1 -1
  184. package/dist/lib/eval-trigger-tester.js +1 -1
  185. package/dist/lib/evolution-enrolment.js +1 -1
  186. package/dist/lib/harbor-readiness.js +1 -1
  187. package/dist/lib/insights/generation/installed-asks.js +1 -1
  188. package/dist/lib/insights/nomination/nominate.js +1 -1
  189. package/dist/lib/instruction-proposer.js +1 -1
  190. package/dist/lib/instructions/acceptance/accept-events.js +1 -1
  191. package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
  192. package/dist/lib/instructions/acceptance/hook-install.js +1 -1
  193. package/dist/lib/instructions/acceptance/reverse-applications.js +1 -1
  194. package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
  195. package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
  196. package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -1
  197. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -1
  198. package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -1
  199. package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
  200. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  201. package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -1
  202. package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -1
  203. package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -1
  204. package/dist/lib/jobs/handlers/distill-memories.js +1 -1
  205. package/dist/lib/jobs/handlers/harbor-ab.js +1 -1
  206. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  207. package/dist/lib/jobs/handlers/process-conversation.js +1 -1
  208. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  209. package/dist/lib/jobs/handlers/process-insights.js +1 -1
  210. package/dist/lib/jobs/handlers/process-judge-review.js +1 -1
  211. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  212. package/dist/lib/jobs/handlers/process-memory-ab.js +1 -1
  213. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  214. package/dist/lib/jobs/handlers/process-session-goal.js +1 -1
  215. package/dist/lib/jobs/shed-retry.js +1 -1
  216. package/dist/lib/judge-review-runner.js +1 -1
  217. package/dist/lib/llm-client.js +1 -1
  218. package/dist/lib/manual-tasks.js +1 -1
  219. package/dist/lib/measurement-llm.js +1 -1
  220. package/dist/lib/pi-exec.js +1 -1
  221. package/dist/lib/projects/workspace/worktree.js +1 -1
  222. package/dist/lib/refine-cases.js +1 -1
  223. package/dist/lib/research-client.js +1 -1
  224. package/dist/lib/retraction.js +1 -1
  225. package/dist/lib/reviewer-detect.js +1 -1
  226. package/dist/lib/setup-steps.js +1 -1
  227. package/dist/lib/telemetry.js +1 -1
  228. package/dist/lib/terminal-target-heartbeat.js +1 -1
  229. package/dist/lib/work-report.js +1 -1
  230. package/oclif.manifest.json +1 -1
  231. package/package.json +4 -4
  232. package/dist/chunk-74QIUVWY.js +0 -1
  233. package/dist/chunk-HRJDKAJ4.js +0 -1
  234. package/dist/chunk-INAZLRY5.js +0 -1
  235. package/dist/chunk-OUK2AWEI.js +0 -1
  236. package/dist/chunk-OYAOLJUH.js +0 -1
  237. package/dist/chunk-PUX6P5KC.js +0 -2
  238. package/dist/chunk-SBGXIPRN.js +0 -2
  239. package/dist/chunk-SPJ73X7A.js +0 -4
  240. package/dist/chunk-UJ7EPLKC.js +0 -1
  241. package/dist/chunk-WSWZPNLG.js +0 -1
  242. /package/dist/{chunk-SE3UKA3M.js → chunk-T75KAEJO.js} +0 -0
@@ -0,0 +1 @@
1
+ import{d as w}from"./chunk-NJ5UED3H.js";import{c as $,d as p}from"./chunk-76UKAFNM.js";import{a as H,b as k,c as U,d as L,e as O}from"./chunk-XQYAVSUQ.js";import{a as g}from"./chunk-ZLLER3HP.js";import{useCallback as D,useEffect as G,useRef as y,useState as u}from"react";import{Box as q,Text as r,useInput as N}from"ink";import W from"ink-select-input";import X from"ink-text-input";import{spawn as z}from"node:child_process";import{Fragment as T,jsx as s,jsxs as i}from"react/jsx-runtime";function se({width:_,onClose:S}){let[M,j]=u([]),[c,m]=u("status"),[b,A]=u(null),[R,C]=u(""),[E,o]=u(""),[d,P]=u(!1),h=y(!1),v=y(!1),f=y(!0),l=D(async()=>{if(h.current){v.current=!0;return}h.current=!0;try{let t=await Promise.allSettled([p("/api/settings/measurement",{timeoutMs:5e3}).then(e=>L(k.parse(e))),p("/api/settings/harbor",{timeoutMs:5e3}).then(e=>O(U.parse(e)))]);f.current&&j(t.flatMap((e,n)=>e.status==="fulfilled"?e.value:[{id:`error-${n}`,label:n===0?"Measurement unavailable":"Harbor unavailable",detail:e.reason instanceof Error?e.reason.message:String(e.reason)}]))}finally{h.current=!1,v.current&&f.current&&(v.current=!1,l())}},[]);G(()=>{f.current=!0,l();let t=setInterval(()=>void l(),3e4);return()=>{f.current=!1,clearInterval(t)}},[l]);async function I(t,e){let n=H.safeParse({engine:t,model:e.trim()||null});if(!n.success){o(n.error.issues.map(a=>a.message).join("; "));return}P(!0);try{await p("/api/settings/measurement",{method:"PATCH",body:n.data,timeoutMs:5e3}),o("Saved for future opted-in jobs. Schedules and file permissions are unchanged."),m("status"),await l()}catch(a){o(a instanceof Error?a.message:String(a))}finally{P(!1)}}g(I,"save");function x(t){try{let e=new URL(t,process.env.RULEMETRIC_WEB_URL??$()).toString(),n=process.platform==="darwin"?"open":process.platform==="win32"?"rundll32":"xdg-open",a=process.platform==="win32"?["url.dll,FileProtocolHandler",e]:[e],B=z(n,a,{stdio:"ignore"});B.on("error",()=>o(`Open in your browser: ${e}`)),B.on("exit",F=>{F&&o(`Open in your browser: ${e}`)}),o(`Opening ${e}`)}catch(e){o(e instanceof Error?e.message:String(e))}}return g(x,"openPage"),N((t,e)=>{if(!d){if(e.escape){c==="status"?S():(m("status"),o(""));return}c==="status"&&((t==="q"||t==="m")&&S(),t==="r"&&l(),t==="c"&&(o(""),m("engine")),t==="e"&&x("/eval-targets"),t==="t"&&x("/memories"),t==="h"&&x("/settings"))}}),i(q,{width:_,flexDirection:"column",borderStyle:"round",borderColor:w,paddingX:1,children:[s(r,{bold:!0,color:w,children:"Measurement \xB7 account settings"}),c==="status"&&i(T,{children:[M.length===0?s(r,{children:"Loading measurement status\u2026"}):M.map(t=>i(r,{children:[i(r,{bold:!0,children:[t.label,": "]}),t.detail]},t.id)),s(r,{dimColor:!0,children:"Trials compare with/without an instruction or memory within a fixed harness/model. Inspect exclusions and uncertainty before claiming a gain."}),s(r,{children:"c engine/model \xB7 e nightly trials & eval evidence \xB7 t memory trials"}),s(r,{children:"h Harbor/settings \xB7 r refresh \xB7 Esc back (e/t/h open dashboard)"})]}),c==="engine"&&i(T,{children:[s(r,{children:"Choose actor for future opted-in jobs. This does not enable schedules or file rewrites."}),s(W,{items:[{label:"Claude Code",value:"claude"},{label:"Codex",value:"codex"},{label:"Pi",value:"pi"},{label:"Unset \u2014 existing worker defaults",value:"unset"}],onSelect:t=>{if(!d){if(t.value==="unset"){I(null,"");return}A(t.value),C(""),m("model")}}})]}),c==="model"&&i(T,{children:[s(r,{children:b==="pi"?"Required provider/model (Harbor unsupported)":b==="codex"?"Required supported Codex model":"Claude model (blank uses defaults)"}),i(q,{children:[s(r,{children:"Model: "}),s(X,{value:R,onChange:C,focus:!d,onSubmit:()=>{d||I(b,R)}})]}),s(r,{dimColor:!0,children:"Enter saves \xB7 Esc cancels"})]}),d&&s(r,{children:"Saving\u2026"}),E&&s(r,{children:E})]})}g(se,"MeasurementPanel");export{se as a};
@@ -1,2 +1,2 @@
1
- import{x as w}from"./chunk-SE3UKA3M.js";import{a as m}from"./chunk-N7ODX6PO.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawn as g}from"node:child_process";import d from"node:fs";import b from"node:path";function c(e,t){return new Promise((r,n)=>{let o=g("git",e,{cwd:t,stdio:["ignore","pipe","pipe"],env:m()}),i="",f="";o.stdout.on("data",a=>{i+=a.toString()}),o.stderr.on("data",a=>{f+=a.toString()}),o.on("error",a=>n(new Error(`git ${e.join(" ")} failed to spawn: ${a.message}`))),o.on("close",a=>{a===0?r({code:a,stdout:i,stderr:f}):n(new Error(`git ${e.join(" ")} exited ${a}: ${f.trim()||i.trim()}`))})})}s(c,"runGit");async function k(e,t){if(!t||!t.trim())throw new Error('invalid branch name "": branch must be a non-empty git refname');if(t.startsWith("-"))throw new Error(`invalid branch name "${t}": must not start with "-" (git would parse it as an option)`);if(/\s/.test(t))throw new Error(`invalid branch name "${t}": must not contain whitespace`);try{await c(["check-ref-format","--branch",t],e)}catch{throw new Error(`invalid branch name "${t}": not a valid git refname`)}}s(k,"assertValidBranch");function h(e){let t=b.resolve(e);try{return d.realpathSync(t)}catch{return t}}s(h,"canonical");function y(e){let t=[],r=null;for(let n of e.split(`
1
+ import{x as w}from"./chunk-T75KAEJO.js";import{a as m}from"./chunk-N7ODX6PO.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawn as g}from"node:child_process";import d from"node:fs";import b from"node:path";function c(e,t){return new Promise((r,n)=>{let o=g("git",e,{cwd:t,stdio:["ignore","pipe","pipe"],env:m()}),i="",f="";o.stdout.on("data",a=>{i+=a.toString()}),o.stderr.on("data",a=>{f+=a.toString()}),o.on("error",a=>n(new Error(`git ${e.join(" ")} failed to spawn: ${a.message}`))),o.on("close",a=>{a===0?r({code:a,stdout:i,stderr:f}):n(new Error(`git ${e.join(" ")} exited ${a}: ${f.trim()||i.trim()}`))})})}s(c,"runGit");async function k(e,t){if(!t||!t.trim())throw new Error('invalid branch name "": branch must be a non-empty git refname');if(t.startsWith("-"))throw new Error(`invalid branch name "${t}": must not start with "-" (git would parse it as an option)`);if(/\s/.test(t))throw new Error(`invalid branch name "${t}": must not contain whitespace`);try{await c(["check-ref-format","--branch",t],e)}catch{throw new Error(`invalid branch name "${t}": not a valid git refname`)}}s(k,"assertValidBranch");function h(e){let t=b.resolve(e);try{return d.realpathSync(t)}catch{return t}}s(h,"canonical");function y(e){let t=[],r=null;for(let n of e.split(`
2
2
  `))n.startsWith("worktree ")?(r&&t.push(r),r={path:n.slice(9).trim()}):n.startsWith("branch ")&&r&&(r.branch=n.slice(7).trim().replace(/^refs\/heads\//,""));return r&&t.push(r),t}s(y,"parseWorktreeList");async function v(e,t){try{return await c(["show-ref","--verify","--quiet",`refs/heads/${t}`],e),!0}catch{return!1}}s(v,"branchExists");async function B(e){let{repoRoot:t,branch:r,baseRef:n,allowExistingBranch:o=!1}=e;await k(t,r);let i=w({repoRoot:t,branch:r,basePath:e.basePath}),f=await c(["worktree","list","--porcelain"],t),a=y(f.stdout),p=a.find(u=>u.branch===r);if(p)return{path:h(p.path),branch:r,created:!1};let l=a.find(u=>h(u.path)===i);if(l)return{path:h(l.path),branch:l.branch??r,created:!1};if(await v(t,r)){if(!o)throw new Error(`branch "${r}" already exists with no worktree; refusing to clobber (pass allowExistingBranch:true to attach a worktree onto it)`);return await c(["worktree","add",i,r],t),{path:h(i),branch:r,created:!0}}return await c(["worktree","add",i,"-b",r,n],t),{path:h(i),branch:r,created:!0}}s(B,"ensureWorktree");async function S(e){let{repoRoot:t,worktreePath:r}=e;if(!d.existsSync(r))return{removed:!1,reason:"absent"};let n=!1;try{n=(await c(["status","--porcelain"],r)).stdout.trim().length>0}catch{n=!1}if(n)return{removed:!1,reason:"dirty"};try{return await c(["worktree","remove",r],t),{removed:!0}}catch(o){let i=o instanceof Error?o.message:String(o);if(/not a working tree|No such file or directory|not a valid path|is not a working tree/i.test(i))return{removed:!1,reason:"absent"};throw o}}s(S,"removeWorktree");export{c as a,B as b,S as c};
@@ -0,0 +1,2 @@
1
+ import{a as y}from"./chunk-6XTLP2G7.js";import{a as l}from"./chunk-ZLLER3HP.js";import{spawn as w}from"node:child_process";function b(e){let r=["--print","--mode","json","--no-session","--no-tools","--no-extensions","--no-skills","--no-prompt-templates"];return e.systemPrompt&&r.push("--system-prompt",e.systemPrompt),e.appendSystemPrompt&&r.push("--append-system-prompt",e.appendSystemPrompt),e.ignoreContextFiles&&r.push("--no-context-files"),e.model&&r.push("--model",e.model),r.push(e.prompt),r}l(b,"buildPiArgs");var h=l((e,r)=>`pi:${e}/${r}`,"piModelId");function m(e){return typeof e=="number"&&Number.isFinite(e)?e:0}l(m,"finiteNumber");function v(e){let r=null;for(let i of e.split(`
2
+ `)){if(!i.trim())continue;let s;try{s=JSON.parse(i)}catch{continue}let p=s;p.type==="agent_end"&&Array.isArray(p.messages)&&(r=p.messages)}if(!r)return{ok:!1,reason:"pi exited without an agent_end event in its JSON stream"};let c=r.filter(i=>i.role==="assistant"),t=c[c.length-1];if(!t)return{ok:!1,reason:"pi agent_end carried no assistant message"};if(t.stopReason==="error"||t.stopReason==="aborted")return{ok:!1,reason:`pi provider error: ${String(t.errorMessage??t.stopReason).slice(0,500)}`};let g=(Array.isArray(t.content)?t.content:[]).map(i=>{if(!i||typeof i!="object")return"";let s=i;return s.type==="text"&&typeof s.text=="string"?s.text:""}).join("");if(!g.trim())return{ok:!1,reason:`pi assistant message held no text (stopReason ${String(t.stopReason)})`};let k=typeof t.provider=="string"?t.provider:void 0,f=typeof t.model=="string"?t.model:void 0,u=t.usage&&typeof t.usage=="object"?t.usage:null,d,a;if(u){let i=m(u.input),s=m(u.output),p=m(u.cacheRead),n=m(u.cacheWrite),o=m(u.totalTokens);(i||s||p||n||o)&&(d={inputTokens:i,outputTokens:s,cacheReadTokens:p,cacheWriteTokens:n,totalTokens:o||i+s+p+n});let P=u.cost;if(P&&typeof P=="object"){let x=P.total;typeof x=="number"&&Number.isFinite(x)&&(a=x)}}return{ok:!0,output:g,provider:k,model:f,usage:d,costUsd:a}}l(v,"parsePiAgentEnd");async function E(e){let{timeout:r=12e4,workDir:c=process.cwd()}=e,t=y("pi");if(!t)return{output:"",exitCode:null,durationMs:0,error:"Pi CLI not found on PATH, well-known install dirs, or the node bin dir \u2014 is it installed?"};let g=Date.now();return new Promise(k=>{let f={...process.env};delete f.HTTPS_PROXY;let u=w(t,b(e),{cwd:c,env:f,stdio:["ignore","pipe","pipe"]}),d="",a="",i=!1,s=l(n=>{i||(i=!0,k({...n,durationMs:Date.now()-g}))},"finish");u.stdout.on("data",n=>{d+=n.toString(),d.length>1024*1024&&(d=d.slice(-1024*1024))}),u.stderr.on("data",n=>{a+=n.toString(),a.length>64*1024&&(a=a.slice(-64*1024))});let p=setTimeout(()=>{u.kill("SIGTERM"),s({output:"",exitCode:null,error:`pi timed out after ${r}ms`})},r);u.on("error",n=>{clearTimeout(p),s({output:"",exitCode:null,error:`failed to spawn pi: ${n.message}`})}),u.on("close",n=>{clearTimeout(p);let o=v(d);if(!o.ok){s({output:"",exitCode:n,error:`${o.reason}${a.trim()?`: ${a.trim().slice(-500)}`:""}`});return}if(n!==0){s({output:o.output,exitCode:n,usage:o.usage,costUsd:o.costUsd,error:`pi failed (exit ${n}): ${a.trim().slice(-500)||"no stderr"}`});return}s({output:o.output,exitCode:n,provider:o.provider,model:o.provider&&o.model?h(o.provider,o.model):o.model,usage:o.usage,costUsd:o.costUsd})})})}l(E,"executePiEval");export{b as a,h as b,v as c,E as d};
@@ -1,2 +1,2 @@
1
- import{f as k,k as b}from"./chunk-OZQNSELV.js";import{m as v,s as f,u as y}from"./chunk-TWPG3TEQ.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as D}from"node:crypto";import{existsSync as d,readFileSync as H,writeFileSync as O,mkdirSync as I}from"node:fs";import{delimiter as R,dirname as j,join as m,resolve as w}from"node:path";function P(e){return b(m(e,".claude"),!1)}o(P,"adoptedHookSettingsPath");function B(e){return D("sha256").update(e).digest("hex")}o(B,"sha256");function h(e){return B(d(e)?H(e,"utf-8"):"")}o(h,"fileHash");function x(e){if(!d(e))return{settings:{}};let t=H(e,"utf-8");try{let n=JSON.parse(t);return!n||typeof n!="object"||Array.isArray(n)?{unreadable:!0}:{settings:n}}catch{return{unreadable:!0}}}o(x,"readSettings");function p(e,t){let n=e.hooks;if(!n||typeof n!="object")return[];let r=n[t];return Array.isArray(r)?r:[]}o(p,"hookBlocks");function A(e,t){return p(e,t).flatMap(n=>(n?.hooks??[]).map(r=>r?.command).filter(r=>typeof r=="string"))}o(A,"commandsFor");function W(e){let t=P(e.dir);if(!t.endsWith("settings.local.json"))return{status:"refused",reason:`refusing to write ${t}: adopted hooks are machine-local and only ever land in settings.local.json`};let n=x(t);if("unreadable"in n)return{status:"refused",reason:`${t} exists but is not readable as JSON. Nothing was written \u2014 installing would mean replacing a settings file this command could not read.`};let r=n.settings,s=y(e.spec.command,e.instructionId),a=h(t),l=o((g,S)=>({kind:"remove-hook-entry",file:f,event:e.spec.event,command:s,backupPath:S,hashAtWrite:g}),"inverseFor");if(A(r,e.spec.event).includes(s))return{status:"already-present",target:f,command:s,inverse:l(a,`${t}.bak`),beforeHash:a};let c={...e.spec.matcher?{matcher:e.spec.matcher}:{},hooks:[{type:"command",command:s}]},u=r.hooks&&typeof r.hooks=="object"?r.hooks:{};u[e.spec.event]=[...p(r,e.spec.event),c],r.hooks=u;let{backupPath:i}=k(t,r);return i||(i=`${t}.bak`,I(j(i),{recursive:!0}),O(i,`{}
1
+ import{f as k,k as b}from"./chunk-OZQNSELV.js";import{m as v,s as f,u as y}from"./chunk-42A4PUW7.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as D}from"node:crypto";import{existsSync as d,readFileSync as H,writeFileSync as O,mkdirSync as I}from"node:fs";import{delimiter as R,dirname as j,join as m,resolve as w}from"node:path";function P(e){return b(m(e,".claude"),!1)}o(P,"adoptedHookSettingsPath");function B(e){return D("sha256").update(e).digest("hex")}o(B,"sha256");function h(e){return B(d(e)?H(e,"utf-8"):"")}o(h,"fileHash");function x(e){if(!d(e))return{settings:{}};let t=H(e,"utf-8");try{let n=JSON.parse(t);return!n||typeof n!="object"||Array.isArray(n)?{unreadable:!0}:{settings:n}}catch{return{unreadable:!0}}}o(x,"readSettings");function p(e,t){let n=e.hooks;if(!n||typeof n!="object")return[];let r=n[t];return Array.isArray(r)?r:[]}o(p,"hookBlocks");function A(e,t){return p(e,t).flatMap(n=>(n?.hooks??[]).map(r=>r?.command).filter(r=>typeof r=="string"))}o(A,"commandsFor");function W(e){let t=P(e.dir);if(!t.endsWith("settings.local.json"))return{status:"refused",reason:`refusing to write ${t}: adopted hooks are machine-local and only ever land in settings.local.json`};let n=x(t);if("unreadable"in n)return{status:"refused",reason:`${t} exists but is not readable as JSON. Nothing was written \u2014 installing would mean replacing a settings file this command could not read.`};let r=n.settings,s=y(e.spec.command,e.instructionId),a=h(t),l=o((g,S)=>({kind:"remove-hook-entry",file:f,event:e.spec.event,command:s,backupPath:S,hashAtWrite:g}),"inverseFor");if(A(r,e.spec.event).includes(s))return{status:"already-present",target:f,command:s,inverse:l(a,`${t}.bak`),beforeHash:a};let c={...e.spec.matcher?{matcher:e.spec.matcher}:{},hooks:[{type:"command",command:s}]},u=r.hooks&&typeof r.hooks=="object"?r.hooks:{};u[e.spec.event]=[...p(r,e.spec.event),c],r.hooks=u;let{backupPath:i}=k(t,r);return i||(i=`${t}.bak`,I(j(i),{recursive:!0}),O(i,`{}
2
2
  `)),{status:"installed",target:f,command:s,inverse:l(h(t),i),beforeHash:a}}o(W,"installHook");function _(e){let t=w(e.dir,e.inverse.file);if(!d(t))return{removed:!1,drifted:!0,code:"file-missing",reason:`${e.inverse.file} no longer exists`};let n=x(t);if("unreadable"in n)return{removed:!1,drifted:!0,code:"unreadable",reason:`${e.inverse.file} is not readable as JSON; refusing to rewrite it`};let r=n.settings,s=h(t)!==e.inverse.hashAtWrite,a=A(r,e.inverse.event).filter(i=>i===e.inverse.command);if(a.length===0)return{removed:!1,drifted:s,code:"not-present",reason:"the recorded entry is no longer present \u2014 nothing to remove"};if(a.length>1)return{removed:!1,drifted:s,code:"ambiguous",reason:`${a.length} entries carry this exact command; refusing to guess which one this artifact installed`};let l=p(r,e.inverse.event).map(i=>({...i,hooks:(i?.hooks??[]).filter(g=>g?.command!==e.inverse.command)})).filter(i=>(i.hooks??[]).length>0),c=r.hooks;l.length===0?delete c[e.inverse.event]:c[e.inverse.event]=l,Object.keys(c).length===0&&delete r.hooks;let{backupPath:u}=k(t,r);return{removed:!0,drifted:s,backupPath:u}}o(_,"uninstallHook");function K(e){return(process.env.PATH??"").split(R).filter(Boolean).some(n=>d(m(n,e)))}o(K,"commandOnPath");function $(e,t){return d(m(e,".agents","skills",t))||d(m(e,".claude","skills",t))}o($,"skillInstalled");function z(e,t){let n={satisfied:[],missing:[],unverifiable:[]};for(let r of t){let s=v(r);if(!s)continue;let[a,...l]=s.split(":"),c=l.join(":").trim();if(!c){n.unverifiable.push(s);continue}a==="cmd"?(K(c)?n.satisfied:n.missing).push(s):a==="skill"?($(e,c)?n.satisfied:n.missing).push(s):a==="file"?(d(w(e,c))?n.satisfied:n.missing).push(s):n.unverifiable.push(s)}return n}o(z,"checkDependencies");export{P as a,W as b,_ as c,z as d};
@@ -1,4 +1,4 @@
1
- import{f as p}from"./chunk-UJ7EPLKC.js";import{a as c}from"./chunk-ZLLER3HP.js";var y=`You are an expert at improving AI coding instructions, skills, and prompts. You receive eval results showing how well the current content performs, and your job is to propose specific improvements.
1
+ import{f as p}from"./chunk-FBSZ6KCM.js";import{a as c}from"./chunk-ZLLER3HP.js";var y=`You are an expert at improving AI coding instructions, skills, and prompts. You receive eval results showing how well the current content performs, and your job is to propose specific improvements.
2
2
 
3
3
  You will receive:
4
4
  1. The current content of the eval target
@@ -0,0 +1,4 @@
1
+ import{d as I}from"./chunk-E7GQJML3.js";import{a as O}from"./chunk-PIVEJTNF.js";import{a as J}from"./chunk-6XTLP2G7.js";import{y as T}from"./chunk-42A4PUW7.js";import{f as L}from"./chunk-XQYAVSUQ.js";import{a as t}from"./chunk-ZLLER3HP.js";import{spawn as z}from"node:child_process";import{existsSync as V,mkdirSync as Z,readdirSync as K}from"node:fs";import{homedir as q,tmpdir as G}from"node:os";import{dirname as W,join as d,resolve as F}from"node:path";var Q=10800*1e3,X=/^rm-[a-z0-9-]+-task$/,Y=/^[A-Za-z0-9._-]+(\/[A-Za-z0-9._-]+)*$/,y=/^[A-Za-z0-9._-]+$/;function rr(r,i,n){return new Promise((l,a)=>{let o=z(r,i,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]}),e="",g="",m="",_=setTimeout(()=>o.kill("SIGKILL"),n.timeoutMs);o.stdout.on("data",s=>{let w=s.toString("utf8");if(e+=w,!n.onLine)return;m+=w;let $=m.split(`
2
+ `);m=$.pop()??"";for(let p of $)n.onLine(p)}),o.stderr.on("data",s=>{g+=s.toString("utf8")}),o.on("error",s=>{clearTimeout(_),a(s)}),o.on("close",s=>{clearTimeout(_),m&&n.onLine&&n.onLine(m),l({status:s,stdout:e,stderr:g})})})}t(rr,"defaultRun");var nr={harnessDir:t(()=>O(),"harnessDir"),resolveBin:J,run:rr,exists:V,mkdir:t(r=>Z(r,{recursive:!0}),"mkdir"),readdir:K,jobsRoot:d(G(),"rulemetric-harbor"),now:t(()=>Date.now(),"now")};function er(r){if(r.trials&&r.trials.length>0){let i=r.trials.filter(n=>n.reward!=null);return{n:i.length,passes:i.filter(n=>n.reward>=.5).length}}return r.reward_mean==null||!r.n_trials?{n:r.n_trials??0,passes:null}:{n:r.n_trials,passes:Math.round(r.reward_mean*r.n_trials)}}t(er,"armReward");function sr(r){if(!X.test(r.task??""))throw new Error(`harbor_ab: refusing task "${r.task}" \u2014 not an rm-*-task name; a task is a directory name, never a path`);if(!Y.test(r.instructions??"")||r.instructions.split("/").includes(".."))throw new Error(`harbor_ab: refusing instructions "${r.instructions}" \u2014 must be a plain relative path under scripts/harbor`);if(!y.test(r.model??""))throw new Error(`harbor_ab: refusing model "${r.model}"`);if(!Number.isInteger(r.nTrials)||r.nTrials<1||r.nTrials>200)throw new Error(`harbor_ab: refusing nTrials=${r.nTrials} \u2014 must be an integer in 1..200`);if(r.class!=="proven"&&r.class!=="negative"&&r.class!=="unvalidated")throw new Error(`harbor_ab: unknown task class "${r.class}"`);if(r.axis!=="reward"&&r.axis!=="cost")throw new Error(`harbor_ab: unknown axis "${r.axis}"`)}t(sr,"validate");function tr(r,i){let n=new Set((process.env.PATH??"").split(":").filter(Boolean));for(let l of["harbor","docker","claude","codex","python3"]){let a=r.resolveBin(l);a&&n.add(W(a))}for(let l of[d(q(),".local","bin"),"/opt/homebrew/bin","/usr/local/bin"])n.add(l);return{...process.env,PATH:[...n].join(":"),HARBOR_JOBS_DIR:i}}t(tr,"spawnEnv");function f(r,i=20){return r.trim().split(`
3
+ `).slice(-i).join(`
4
+ `)}t(f,"tail");async function j(r,i,n,l,a,o=[]){let e=await r.run("python3",[d(i,l),...a],{cwd:i,env:n,timeoutMs:3e5});if(e.status!==0&&!o.includes(e.status))return{status:e.status,json:null,stderr:e.stderr};try{return{status:e.status,json:JSON.parse(e.stdout),stderr:e.stderr}}catch{throw new Error(`harbor_ab: ${l} printed something that is not JSON: ${f(e.stdout,5)}`)}}t(j,"readJson");async function wr(r,i,n=nr){let l=t(u=>i?.logger?.info?.(u)??console.log(u),"log"),a=r.measurement?L.parse(r.measurement):null,o=a?.engine??"claude";if(o==="pi")throw new Error("harbor_ab: Pi supports eval trials, not Harbor tasks");if(a){if(r={...r,model:a.model??T,class:o==="claude"&&a.model===T?r.class:"unvalidated"},o==="codex"&&r.axis==="cost")throw new Error("harbor_ab: dollar-cost telemetry is unavailable for Codex");if(!n.resolveBin(o))throw new Error(`harbor_ab: ${o} engine unavailable on this worker`)}sr(r);let e=n.harnessDir();if(!e)throw new Error("harbor_ab: no Harbor harness on this worker \u2014 scripts/harbor/run.sh was not found from the CLI build, the working directory, or RULEMETRIC_HARBOR_DIR. This job should not have been enqueued here: the readiness probe reports harness=false for a worker like this one.");let g=d(e,r.task),m=F(e,r.instructions);if(!n.exists(g))throw new Error(`harbor_ab: task directory not found: ${g}`);if(!n.exists(m))throw new Error(`harbor_ab: instruction file not found: ${m}`);let _=n.now(),s=d(n.jobsRoot,`${r.task}-${_}`);n.mkdir(s);let w=tr(n,s);l(`[harbor_ab] ${r.task} (${r.class}/${r.axis}, lane ${r.lane}): n=${r.nTrials}/arm on ${r.model} \u2192 ${s}`);let $=[d(e,"run.sh"),"ab",g,"--instructions",m,"--engine",o,"-m",r.model,"--n-attempts",String(r.nTrials)],p=await n.run("bash",$,{cwd:e,env:w,timeoutMs:Q,onLine:t(u=>l(`[harbor_ab] ${u}`),"onLine")});if(p.status!==0)throw new Error(`harbor_ab: ${r.task} run.sh exited ${p.status??"by signal"} after ${Math.round((n.now()-_)/1e3)}s: ${f(p.stderr)||f(p.stdout)||"(no output)"}`);let A=n.readdir(s),k=A.find(u=>/^ab-\d+-baseline$/.test(u)),E=A.find(u=>/^ab-\d+-with$/.test(u));if(!k||!E)throw new Error(`harbor_ab: run.sh exited 0 but the arm job dirs are missing under ${s} (found: ${A.join(", ")||"nothing"})`);let x=d(s,k),S=d(s,E),D=t(async u=>{let c=await j(n,e,w,"summarize.py",[u]);if(!c.json)throw new Error(`harbor_ab: summarize.py failed on ${u}: ${f(c.stderr,5)}`);return c.json},"summarize"),[N,U]=await Promise.all([D(x),D(S)]),R=await j(n,e,w,"cost_delta.py",[x,S,"--json"]);if(R.status!==0&&R.status!==3)throw new Error(`harbor_ab: cost_delta.py exited ${R.status}: ${f(R.stderr,5)}`);let b=R.json,h=await j(n,e,w,"provenance.py",["--compare",x,S,"--json"],[1]);if(h.status!==0&&h.status!==1)throw new Error(`harbor_ab: provenance.py exited ${h.status}: ${f(h.stderr,5)}`);if(!h.json)throw new Error(`harbor_ab: provenance.py printed no comparison: ${f(h.stderr,5)}`);let M=h.json,B=t((u,c)=>{let C=er(c);return{job:u,rewardMean:c.reward_mean,n:C.n,passes:C.passes,costUsd:c.cost_usd,tokens:c.tokens??null,durationMs:c.duration_ms,turns:c.turns,agentErrors:c.agent_errors}},"arm"),H=B(k,N),P=B(E,U),v=I({taskClass:r.class,axis:r.axis,baseline:{n:H.n,passes:H.passes},with:{n:P.n,passes:P.passes},cost:b,provenance:M});return l(`[harbor_ab] ${r.task}: ${v.decision} \u2014 ${v.reason}`),{task:r.task,class:r.class,axis:r.axis,lane:r.lane,model:r.model,...a?{measurement:a}:{},nTrials:r.nTrials,decision:v.decision,reason:v.reason,baseline:H,with:P,rewardDelta:v.reward.delta,rewardCi:v.reward.ci,cost:b?{decision:b.decision,deltaUsd:b.delta_usd,deltaPct:b.delta_pct,ciUsd:b.ci_usd,perSuccess:b.per_success?{decision:b.per_success.decision,deltaPct:b.per_success.delta_pct}:null,rewardRegressed:b.reward.regressed}:null,provenance:M,jobsDir:s,durationMs:n.now()-_}}t(wr,"harborAb");export{Q as a,er as b,wr as c};
@@ -1,4 +1,4 @@
1
- import{b as $}from"./chunk-E7RH43OS.js";import{a as C}from"./chunk-GQGGFHX7.js";import{a as y}from"./chunk-OO2ZRKZY.js";import{f}from"./chunk-UJ7EPLKC.js";import{e as h,f as w}from"./chunk-ZZHIBOMT.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{b as $}from"./chunk-OP4U3XBZ.js";import{a as C}from"./chunk-KOYHJFB3.js";import{a as y}from"./chunk-DVU5PHPM.js";import{f}from"./chunk-FBSZ6KCM.js";import{e as h,f as w}from"./chunk-76UKAFNM.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 c,c as d}from"./chunk-IZTIYR5Q.js";import{d as u}from"./chunk-E5YE25QG.js";import{a}from"./chunk-YUIRDBQQ.js";import{a as n}from"./chunk-HAYO6JYI.js";import{b as i}from"./chunk-ZZHIBOMT.js";import{g as r}from"./chunk-PZNWH4VQ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{Command as f,Flags as h}from"@oclif/core";function p(t){return t instanceof i?t.statusCode>=500||t.statusCode===408||t.statusCode===0:/fetch failed|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN|bad gateway|timed out/i.test(t.message??"")}s(p,"isAvailabilityError");var m=class extends f{static{s(this,"BaseCommand")}static baseFlags={"api-url":h.string({description:"Override API base URL",env:"RULEMETRIC_API_URL",hidden:!0})};async init(){await super.init();let{flags:e}=await this.parse(this.constructor);e["api-url"]&&(process.env.RULEMETRIC_API_URL=e["api-url"]);let o=d(this.config.version);o&&!this.argv.includes("--quiet")&&!process.env.RULEMETRIC_QUIET&&process.stderr.write(`
1
+ import{a as c,c as d}from"./chunk-IZTIYR5Q.js";import{d as u}from"./chunk-FKTT7A4H.js";import{a}from"./chunk-VIFOLTZT.js";import{a as n}from"./chunk-4FJYVYCU.js";import{b as i}from"./chunk-76UKAFNM.js";import{g as r}from"./chunk-PZNWH4VQ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{Command as f,Flags as h}from"@oclif/core";function p(t){return t instanceof i?t.statusCode>=500||t.statusCode===408||t.statusCode===0:/fetch failed|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN|bad gateway|timed out/i.test(t.message??"")}s(p,"isAvailabilityError");var m=class extends f{static{s(this,"BaseCommand")}static baseFlags={"api-url":h.string({description:"Override API base URL",env:"RULEMETRIC_API_URL",hidden:!0})};async init(){await super.init();let{flags:e}=await this.parse(this.constructor);e["api-url"]&&(process.env.RULEMETRIC_API_URL=e["api-url"]);let o=d(this.config.version);o&&!this.argv.includes("--quiet")&&!process.env.RULEMETRIC_QUIET&&process.stderr.write(`
2
2
  ${o}
3
3
 
4
4
  `),c();try{await a()}catch{}}requireAuth(){r()||this.error("Not logged in. Run `rulemetric auth login` to authenticate."),n()}async catch(e){throw p(e)&&await u({command:this.id,statusCode:e instanceof i?e.statusCode:void 0,message:e.message,cliVersion:this.config.version}),e instanceof i&&(e.statusCode===401&&this.error("Session expired. Run `rulemetric auth login` to re-authenticate."),this.error(e.message)),(e.message?.includes("fetch failed")||e.message?.includes("ECONNREFUSED"))&&this.error("Could not connect to the API server. Is it running?"),e}};export{m as a};
@@ -1 +1 @@
1
- import{b as m}from"./chunk-UQDOOQCM.js";import{a as g}from"./chunk-ZLLER3HP.js";var p=5;function b(t){let r=g((e,f)=>({retire:[],survivingCases:0,replacementsRequired:!1,refused:e,summary:f}),"none");if(!t||t.cases.length===0&&t.unpairedCases.length===0)return r("no-discrimination-data","No case-discrimination data yet \u2014 the target needs runs in BOTH cohorts before any case can be judged dead.");let c=[...t.cases.filter(e=>!e.discriminating).map(e=>({evalId:e.evalId,name:e.name,feedback:{name:e.name,withPassRate:e.withPassRate,withoutPassRate:e.withoutPassRate,reason:e.note}})),...t.unpairedCases.map(e=>({evalId:e.evalId,name:e.name,feedback:{name:e.name,withPassRate:e.withPassRate??0,withoutPassRate:e.withoutPassRate,reason:"runs in only one cohort (no with-vs-without comparison possible)"}}))];if(c.length===0)return r("all-discriminating","Every case discriminates \u2014 nothing to retire.");let s=new Map(t.cases.map(e=>[e.evalId,e.separation])),o=[...c].sort((e,f)=>(s.get(e.evalId)??-1)-(s.get(f.evalId)??-1)).slice(0,p),u=c.length-o.length,d=t.total+t.unpaired,l=d-o.length,i=l<m,n=`${o.length} of ${d} live case(s) carry no treatment signal`+(u>0?` (${u} more over the ${p}-per-run cap)`:"")+(i?`; retiring them leaves ${l}, below the ${m}-case evolution floor, so replacements must be generated first`:"");return{retire:o,survivingCases:l,replacementsRequired:i,refused:null,summary:n}}g(b,"planCaseRefinement");async function v(t,r){let h=r.log??(()=>{}),c=g((n,e)=>({retired:0,generated:0,skipped:n,summary:e,retiredNames:[],generatedNames:[]}),"empty");if(t.refused)return c(t.refused,t.summary);let s=await r.generate(t.retire.map(n=>n.feedback)),a=[];for(let n of s??[]){let e=await r.createCase(n);a.push(e.name),h(` + ${e.name} (${e.id})`)}let o=t.survivingCases+t.retire.length+a.length,u=Math.max(0,o-m),d=t.retire.slice(0,Math.min(t.retire.length,u)),l=t.retire.length-d.length;if(d.length===0)return{retired:0,generated:a.length,skipped:s===null?"no-llm-backend":"no-replacements-generated",summary:`${t.summary}. `+(s===null?"No local LLM backend available, so nothing was retired":`The generator produced ${a.length} usable replacement(s), not enough to retire anything`)+` \u2014 dropping below the ${m}-case floor would silently disenrol the target from the nightly loop.`,retiredNames:[],generatedNames:a};let i=[];for(let n of d)await r.retireCase(n.evalId,n.feedback.reason),i.push(n.name),h(` retired ${n.name}`);return{retired:i.length,generated:a.length,skipped:null,summary:`Retired ${i.length} non-discriminating case(s), added ${a.length} replacement(s)`+(l>0?`; held ${l} back to stay at the ${m}-case floor (they remain condemned and will be retired once replacements exist)`:"")+". The replacements have no runs yet \u2014 the next autorun batch builds their depth.",retiredNames:i,generatedNames:a}}g(v,"executeCaseRefinement");export{p as a,b,v as c};
1
+ import{b as m}from"./chunk-FYZ6HHCV.js";import{a as g}from"./chunk-ZLLER3HP.js";var p=5;function b(t){let r=g((e,f)=>({retire:[],survivingCases:0,replacementsRequired:!1,refused:e,summary:f}),"none");if(!t||t.cases.length===0&&t.unpairedCases.length===0)return r("no-discrimination-data","No case-discrimination data yet \u2014 the target needs runs in BOTH cohorts before any case can be judged dead.");let c=[...t.cases.filter(e=>!e.discriminating).map(e=>({evalId:e.evalId,name:e.name,feedback:{name:e.name,withPassRate:e.withPassRate,withoutPassRate:e.withoutPassRate,reason:e.note}})),...t.unpairedCases.map(e=>({evalId:e.evalId,name:e.name,feedback:{name:e.name,withPassRate:e.withPassRate??0,withoutPassRate:e.withoutPassRate,reason:"runs in only one cohort (no with-vs-without comparison possible)"}}))];if(c.length===0)return r("all-discriminating","Every case discriminates \u2014 nothing to retire.");let s=new Map(t.cases.map(e=>[e.evalId,e.separation])),o=[...c].sort((e,f)=>(s.get(e.evalId)??-1)-(s.get(f.evalId)??-1)).slice(0,p),u=c.length-o.length,d=t.total+t.unpaired,l=d-o.length,i=l<m,n=`${o.length} of ${d} live case(s) carry no treatment signal`+(u>0?` (${u} more over the ${p}-per-run cap)`:"")+(i?`; retiring them leaves ${l}, below the ${m}-case evolution floor, so replacements must be generated first`:"");return{retire:o,survivingCases:l,replacementsRequired:i,refused:null,summary:n}}g(b,"planCaseRefinement");async function v(t,r){let h=r.log??(()=>{}),c=g((n,e)=>({retired:0,generated:0,skipped:n,summary:e,retiredNames:[],generatedNames:[]}),"empty");if(t.refused)return c(t.refused,t.summary);let s=await r.generate(t.retire.map(n=>n.feedback)),a=[];for(let n of s??[]){let e=await r.createCase(n);a.push(e.name),h(` + ${e.name} (${e.id})`)}let o=t.survivingCases+t.retire.length+a.length,u=Math.max(0,o-m),d=t.retire.slice(0,Math.min(t.retire.length,u)),l=t.retire.length-d.length;if(d.length===0)return{retired:0,generated:a.length,skipped:s===null?"no-llm-backend":"no-replacements-generated",summary:`${t.summary}. `+(s===null?"No local LLM backend available, so nothing was retired":`The generator produced ${a.length} usable replacement(s), not enough to retire anything`)+` \u2014 dropping below the ${m}-case floor would silently disenrol the target from the nightly loop.`,retiredNames:[],generatedNames:a};let i=[];for(let n of d)await r.retireCase(n.evalId,n.feedback.reason),i.push(n.name),h(` retired ${n.name}`);return{retired:i.length,generated:a.length,skipped:null,summary:`Retired ${i.length} non-discriminating case(s), added ${a.length} replacement(s)`+(l>0?`; held ${l} back to stay at the ${m}-case floor (they remain condemned and will be retired once replacements exist)`:"")+". The replacements have no runs yet \u2014 the next autorun batch builds their depth.",retiredNames:i,generatedNames:a}}g(v,"executeCaseRefinement");export{p as a,b,v as c};
@@ -1,4 +1,4 @@
1
- import{a as S,b as P}from"./chunk-PPAHIVG5.js";import{a as V,b as v,c as T}from"./chunk-5MXZJWQS.js";import{a as E,b as C,c as _}from"./chunk-CT7FWSIU.js";import{a as b}from"./chunk-N7ODX6PO.js";import{d as K}from"./chunk-SG4UDDHB.js";import{c as z,d as H}from"./chunk-SBGXIPRN.js";import{a as g,b as U}from"./chunk-6XTLP2G7.js";import{a as c}from"./chunk-ZLLER3HP.js";import{execSync as M,spawn as ee}from"node:child_process";import{tmpdir as B}from"node:os";import{mkdtempSync as te,rmSync as ne,writeFileSync as re}from"node:fs";import{join as Y}from"node:path";function oe(t,o){let{available:r,backend:n}=o??{available:c(l=>g(l)!==null,"available"),backend:A()},e=P(t);if(r(e.bin))return{bin:e.bin,args:e.args,delivery:e.delivery??"stdin",substitutedFrom:null};let i=n==="codex-cli"?S.codex:n==="claude-cli"?S.claude_code:n==="copilot-cli"?S.copilot:null;return!i||!r(i.bin)?null:{bin:i.bin,args:i.args,delivery:i.delivery??"stdin",substitutedFrom:e.bin}}c(oe,"planToolExecution");function X(t,o=300){let r=t.trim().replace(/\s+/g," ");return r.length>o?`${r.slice(0,o)}\u2026`:r}c(X,"excerpt");async function ye(t,o,r){let n=oe(t);if(!n){let s=`no engine can run ${t}'s prompt: ${P(t).bin} is not installed and no substitutable backend was detected`;return console.warn(`[llm-client] ${s}`),{ok:!1,reason:s}}let{bin:e,args:i,delivery:l}=n;n.substitutedFrom&&console.warn(`[llm-client] ${n.substitutedFrom} is not installed \u2014 running ${t}'s analysis prompt on ${e} instead`);let a=g(e);if(!a){let s=`${e} not found on PATH, well-known dirs, or the node bin dir`;return console.warn(`[llm-client] ${s}`),{ok:!1,reason:s}}let u=`${o}
1
+ import{a as S,b as P}from"./chunk-PPAHIVG5.js";import{a as V,b as v,c as T}from"./chunk-5MXZJWQS.js";import{a as E,b as C,c as _}from"./chunk-CT7FWSIU.js";import{a as b}from"./chunk-N7ODX6PO.js";import{d as K}from"./chunk-SG4UDDHB.js";import{c as z,d as H}from"./chunk-GPBN4ROE.js";import{a as g,b as U}from"./chunk-6XTLP2G7.js";import{a as c}from"./chunk-ZLLER3HP.js";import{execSync as M,spawn as ee}from"node:child_process";import{tmpdir as B}from"node:os";import{mkdtempSync as te,rmSync as ne,writeFileSync as re}from"node:fs";import{join as Y}from"node:path";function oe(t,o){let{available:r,backend:n}=o??{available:c(l=>g(l)!==null,"available"),backend:A()},e=P(t);if(r(e.bin))return{bin:e.bin,args:e.args,delivery:e.delivery??"stdin",substitutedFrom:null};let i=n==="codex-cli"?S.codex:n==="claude-cli"?S.claude_code:n==="copilot-cli"?S.copilot:null;return!i||!r(i.bin)?null:{bin:i.bin,args:i.args,delivery:i.delivery??"stdin",substitutedFrom:e.bin}}c(oe,"planToolExecution");function X(t,o=300){let r=t.trim().replace(/\s+/g," ");return r.length>o?`${r.slice(0,o)}\u2026`:r}c(X,"excerpt");async function ye(t,o,r){let n=oe(t);if(!n){let s=`no engine can run ${t}'s prompt: ${P(t).bin} is not installed and no substitutable backend was detected`;return console.warn(`[llm-client] ${s}`),{ok:!1,reason:s}}let{bin:e,args:i,delivery:l}=n;n.substitutedFrom&&console.warn(`[llm-client] ${n.substitutedFrom} is not installed \u2014 running ${t}'s analysis prompt on ${e} instead`);let a=g(e);if(!a){let s=`${e} not found on PATH, well-known dirs, or the node bin dir`;return console.warn(`[llm-client] ${s}`),{ok:!1,reason:s}}let u=`${o}
2
2
 
3
3
  SESSION DATA:
4
4
  ${r}`,m={...b()};delete m.HTTPS_PROXY;let p=null,y=i,$=u;if(l==="argv-file"){p=te(Y(B(),"rulemetric-tool-prompt-"));let s=Y(p,"session-data.txt");re(s,r),y=[...i,`@${s}`,`${o}
@@ -1 +1 @@
1
- import{c as d,d as t}from"./chunk-JKWB6UXA.js";import{a as r}from"./chunk-ZLLER3HP.js";async function g(o,i){let{evalTargetId:s}=o;try{let e=await t({targetId:s,engineFlag:"auto",skipReviewed:!0,log:r(a=>i.logger.info(`[judge-review] ${a}`),"log"),warn:r(a=>i.logger.warn(`[judge-review] ${a}`),"warn")});return{evalTargetId:s,reviewerModel:e.reviewerModel,comparedPairs:e.report.pairs,disagreements:e.report.disagreements.length,persisted:e.persisted,alreadyReviewed:e.alreadyReviewed,deferredPartialRuns:e.deferredPartialRuns}}catch(e){if(e instanceof d)return i.logger.info(`[judge-review] skipped (${e.reason}): ${e.message}`),{evalTargetId:s,skipped:e.reason};throw e}}r(g,"processJudgeReview");export{g as a};
1
+ import{c as d,d as t}from"./chunk-HNYHZO2J.js";import{a as r}from"./chunk-ZLLER3HP.js";async function g(o,i){let{evalTargetId:s}=o;try{let e=await t({targetId:s,engineFlag:"auto",skipReviewed:!0,log:r(a=>i.logger.info(`[judge-review] ${a}`),"log"),warn:r(a=>i.logger.warn(`[judge-review] ${a}`),"warn")});return{evalTargetId:s,reviewerModel:e.reviewerModel,comparedPairs:e.report.pairs,disagreements:e.report.disagreements.length,persisted:e.persisted,alreadyReviewed:e.alreadyReviewed,deferredPartialRuns:e.deferredPartialRuns}}catch(e){if(e instanceof d)return i.logger.info(`[judge-review] skipped (${e.reason}): ${e.message}`),{evalTargetId:s,skipped:e.reason};throw e}}r(g,"processJudgeReview");export{g as a};
@@ -1,4 +1,4 @@
1
- import{b as p}from"./chunk-7ML2UCI7.js";import{g as l}from"./chunk-GN46S7T4.js";import{a}from"./chunk-ZLLER3HP.js";var g=5,h=a(e=>e==null?"n/a":`${Math.round(e*100)}%`,"pct");function b(e){return!e||e.length===0?"":`
1
+ import{b as p}from"./chunk-ZK3ACE4T.js";import{g as l}from"./chunk-N4YPDZJF.js";import{a}from"./chunk-ZLLER3HP.js";var g=5,h=a(e=>e==null?"n/a":`${Math.round(e*100)}%`,"pct");function b(e){return!e||e.length===0?"":`
2
2
 
3
3
  ## Prior cases that FAILED to discriminate \u2014 do NOT reproduce these
4
4
  The cases below were run WITH and WITHOUT the instruction and did NOT separate the two
@@ -1 +1 @@
1
- import{e as c,f as d}from"./chunk-ZZHIBOMT.js";import{a as m}from"./chunk-ZLLER3HP.js";async function f(g,p){let r=m(e=>p?.logger?.info?.(e)??console.log(e),"log"),{projectPath:s}=g,i=`[cron_instruction_training] ${s}`;if(!s)return{skipped:"no-project-path"};let n=await d("/api/instruction-experiments/settle",{projectPath:s}),o=n.settled.map(e=>e.outcome),a=o.filter(e=>e==="graduated").length;for(let e of n.settled)r(`${i}: experiment ${e.experimentId} \u2192 ${e.outcome}`);n.examined>0&&r(`${i}: examined ${n.examined} running experiment(s) \u2014 ${n.settled.length} settled (${a} graduated), ${n.stillRunning} still gathering`);let t=await c(`/api/instruction-suggestions/trialable?projectPath=${encodeURIComponent(s)}`);for(let e of t.refused)r(`${i}: not trialling "${e.name}" \u2014 ${e.reason}`);if(t.candidates.length===0)return r(`${i}: no new trial started (${t.running}/${t.limits.maxConcurrent} running, ${t.slots} slot(s) free)`),{examined:n.examined,settled:n.settled.length,graduated:a,nominated:0,running:t.running,outcomes:o};let u=0;for(let e of t.candidates)try{await d("/api/instruction-experiments",{instructionId:e.instructionId,projectPath:s,source:"trial"}),u+=1,r(`${i}: now measuring "${e.name}" (score ${e.score.toFixed(2)})`)}catch(l){r(`${i}: could not measure "${e.name}" \u2014 ${l instanceof Error?l.message:String(l)}`)}return{examined:n.examined,settled:n.settled.length,graduated:a,nominated:u,running:t.running+u,outcomes:o}}m(f,"cronInstructionTraining");export{f as a};
1
+ import{e as c,f as d}from"./chunk-76UKAFNM.js";import{a as m}from"./chunk-ZLLER3HP.js";async function f(g,p){let r=m(e=>p?.logger?.info?.(e)??console.log(e),"log"),{projectPath:s}=g,i=`[cron_instruction_training] ${s}`;if(!s)return{skipped:"no-project-path"};let n=await d("/api/instruction-experiments/settle",{projectPath:s}),o=n.settled.map(e=>e.outcome),a=o.filter(e=>e==="graduated").length;for(let e of n.settled)r(`${i}: experiment ${e.experimentId} \u2192 ${e.outcome}`);n.examined>0&&r(`${i}: examined ${n.examined} running experiment(s) \u2014 ${n.settled.length} settled (${a} graduated), ${n.stillRunning} still gathering`);let t=await c(`/api/instruction-suggestions/trialable?projectPath=${encodeURIComponent(s)}`);for(let e of t.refused)r(`${i}: not trialling "${e.name}" \u2014 ${e.reason}`);if(t.candidates.length===0)return r(`${i}: no new trial started (${t.running}/${t.limits.maxConcurrent} running, ${t.slots} slot(s) free)`),{examined:n.examined,settled:n.settled.length,graduated:a,nominated:0,running:t.running,outcomes:o};let u=0;for(let e of t.candidates)try{await d("/api/instruction-experiments",{instructionId:e.instructionId,projectPath:s,source:"trial"}),u+=1,r(`${i}: now measuring "${e.name}" (score ${e.score.toFixed(2)})`)}catch(l){r(`${i}: could not measure "${e.name}" \u2014 ${l instanceof Error?l.message:String(l)}`)}return{examined:n.examined,settled:n.settled.length,graduated:a,nominated:u,running:t.running+u,outcomes:o}}m(f,"cronInstructionTraining");export{f as a};
@@ -1 +1 @@
1
- import{d as g}from"./chunk-SBGXIPRN.js";import{a as p}from"./chunk-6XTLP2G7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawnSync as f}from"node:child_process";import{existsSync as h}from"node:fs";import{dirname as b,join as m,resolve as y}from"node:path";import{fileURLToPath as _}from"node:url";var d=["run.sh","rm_host_claude.py","rm_host_codex.py","summarize.py","cost_delta.py","provenance.py","mcp_container_shell.py","rm-batch-task/environment/Dockerfile","rm-batch-task/environment/items.jsonl","rm-batch-task/inject.md","rm-batch-task/instruction.md","rm-batch-task/solution/solve.sh","rm-batch-task/task.toml","rm-batch-task/tests/test.sh","rm-batch-task/tests/test_outputs.py","rm-locality-task/environment/Dockerfile","rm-locality-task/environment/workspace/deploy/prod/ingest.yaml","rm-locality-task/environment/workspace/deploy/staging/ingest.yaml","rm-locality-task/environment/workspace/docs/architecture/ingest.md","rm-locality-task/environment/workspace/legacy/ingest_v1/config.yaml","rm-locality-task/environment/workspace/packages/shared/defaults.py","rm-locality-task/environment/workspace/services/ingest/config/limits.defaults.yaml","rm-locality-task/environment/workspace/services/ingest/config/limits.yaml","rm-locality-task/environment/workspace/services/ingest/loader.py","rm-locality-task/environment/workspace/tests/fixtures/ingest_config.yaml","rm-locality-task/inject.md","rm-locality-task/instruction.md","rm-locality-task/solution/solve.sh","rm-locality-task/task.toml","rm-locality-task/tests/test.sh","rm-locality-task/tests/test_outputs.py","rm-migrations-task/environment/Dockerfile","rm-migrations-task/environment/applied.txt","rm-migrations-task/environment/migrations/00001_init.sql","rm-migrations-task/environment/migrations/00002_add_email.sql","rm-migrations-task/inject.md","rm-migrations-task/instruction.md","rm-migrations-task/solution/solve.sh","rm-migrations-task/task.toml","rm-migrations-task/tests/test.sh","rm-migrations-task/tests/test_outputs.py","rm-pagination-task/environment/Dockerfile","rm-pagination-task/environment/store.py","rm-pagination-task/inject.md","rm-pagination-task/instruction.md","rm-pagination-task/solution/solve.sh","rm-pagination-task/task.toml","rm-pagination-task/tests/test.sh","rm-pagination-task/tests/test_outputs.py"];var D=5e3,l=b(_(import.meta.url));function R(t={}){let r=t.env??process.env,n=t.exists??h,o=s(e=>d.every(i=>n(m(e,i))),"isHarness"),a=r.RULEMETRIC_HARBOR_DIR;if(a)return o(a)?y(a):null;for(let e of[m(t.moduleDir??l,"harbor"),m(t.moduleDir??l,"..","harbor")])if(o(e))return y(e);for(let e of[t.moduleDir??l,t.cwd??process.cwd()]){let i=e;for(let c=0;c<8;c++){let u=m(i,"scripts","harbor");if(o(u))return u;let k=b(i);if(k===i)break;i=k}}return null}s(R,"resolveHarborHarnessDir");var x={resolveBin:p,run:s((t,r)=>{let n=f(t,r,{encoding:"utf8",timeout:D});return{status:n.status,stdout:n.stdout??""}},"run"),hasEngine:s(()=>{let t=g();return t.claudeBin!=null||t.codexBin!=null},"hasEngine"),harnessDir:s(()=>R(),"harnessDir")};function v(t,r,n){let o=t.resolveBin(r);if(!o)return!1;let{status:a,stdout:e}=t.run(o,n);return a===0&&e.trim().length>0}s(v,"runnable");function O(t=x){let r=s(n=>{try{return n()}catch{return!1}},"safe");return{docker:r(()=>v(t,"docker",["info","--format","{{.ServerVersion}}"])),harbor:r(()=>v(t,"harbor",["--version"])),engine:r(()=>t.hasEngine()),harness:r(()=>t.harnessDir()!=null)}}s(O,"probeHarborReady");export{R as a,O as b};
1
+ import{d as g}from"./chunk-GPBN4ROE.js";import{a as p}from"./chunk-6XTLP2G7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawnSync as f}from"node:child_process";import{existsSync as h}from"node:fs";import{dirname as b,join as m,resolve as y}from"node:path";import{fileURLToPath as _}from"node:url";var d=["run.sh","rm_host_claude.py","rm_host_codex.py","summarize.py","cost_delta.py","provenance.py","mcp_container_shell.py","rm-batch-task/environment/Dockerfile","rm-batch-task/environment/items.jsonl","rm-batch-task/inject.md","rm-batch-task/instruction.md","rm-batch-task/solution/solve.sh","rm-batch-task/task.toml","rm-batch-task/tests/test.sh","rm-batch-task/tests/test_outputs.py","rm-locality-task/environment/Dockerfile","rm-locality-task/environment/workspace/deploy/prod/ingest.yaml","rm-locality-task/environment/workspace/deploy/staging/ingest.yaml","rm-locality-task/environment/workspace/docs/architecture/ingest.md","rm-locality-task/environment/workspace/legacy/ingest_v1/config.yaml","rm-locality-task/environment/workspace/packages/shared/defaults.py","rm-locality-task/environment/workspace/services/ingest/config/limits.defaults.yaml","rm-locality-task/environment/workspace/services/ingest/config/limits.yaml","rm-locality-task/environment/workspace/services/ingest/loader.py","rm-locality-task/environment/workspace/tests/fixtures/ingest_config.yaml","rm-locality-task/inject.md","rm-locality-task/instruction.md","rm-locality-task/solution/solve.sh","rm-locality-task/task.toml","rm-locality-task/tests/test.sh","rm-locality-task/tests/test_outputs.py","rm-migrations-task/environment/Dockerfile","rm-migrations-task/environment/applied.txt","rm-migrations-task/environment/migrations/00001_init.sql","rm-migrations-task/environment/migrations/00002_add_email.sql","rm-migrations-task/inject.md","rm-migrations-task/instruction.md","rm-migrations-task/solution/solve.sh","rm-migrations-task/task.toml","rm-migrations-task/tests/test.sh","rm-migrations-task/tests/test_outputs.py","rm-pagination-task/environment/Dockerfile","rm-pagination-task/environment/store.py","rm-pagination-task/inject.md","rm-pagination-task/instruction.md","rm-pagination-task/solution/solve.sh","rm-pagination-task/task.toml","rm-pagination-task/tests/test.sh","rm-pagination-task/tests/test_outputs.py"];var D=5e3,l=b(_(import.meta.url));function R(t={}){let r=t.env??process.env,n=t.exists??h,o=s(e=>d.every(i=>n(m(e,i))),"isHarness"),a=r.RULEMETRIC_HARBOR_DIR;if(a)return o(a)?y(a):null;for(let e of[m(t.moduleDir??l,"harbor"),m(t.moduleDir??l,"..","harbor")])if(o(e))return y(e);for(let e of[t.moduleDir??l,t.cwd??process.cwd()]){let i=e;for(let c=0;c<8;c++){let u=m(i,"scripts","harbor");if(o(u))return u;let k=b(i);if(k===i)break;i=k}}return null}s(R,"resolveHarborHarnessDir");var x={resolveBin:p,run:s((t,r)=>{let n=f(t,r,{encoding:"utf8",timeout:D});return{status:n.status,stdout:n.stdout??""}},"run"),hasEngine:s(()=>{let t=g();return t.claudeBin!=null||t.codexBin!=null},"hasEngine"),harnessDir:s(()=>R(),"harnessDir")};function v(t,r,n){let o=t.resolveBin(r);if(!o)return!1;let{status:a,stdout:e}=t.run(o,n);return a===0&&e.trim().length>0}s(v,"runnable");function O(t=x){let r=s(n=>{try{return n()}catch{return!1}},"safe");return{docker:r(()=>v(t,"docker",["info","--format","{{.ServerVersion}}"])),harbor:r(()=>v(t,"harbor",["--version"])),engine:r(()=>t.hasEngine()),harness:r(()=>t.harnessDir()!=null)}}s(O,"probeHarborReady");export{R as a,O as b};
@@ -1 +1 @@
1
- import{a as Me}from"./chunk-M7QSC64D.js";import{i as Ie}from"./chunk-VLWNSTYW.js";import{c as Ae}from"./chunk-G7V4ZZZ3.js";import{a as Re,b as xe,c as Se,d as De,e as ae,f as Oe}from"./chunk-SV73ASP2.js";import{b as pe,i as me,j as ge,k as fe,l as he,m as be,n as $e}from"./chunk-LB24UKHZ.js";import{d as ye,f as ke,g as Ce,i as Ee}from"./chunk-RRM4HQG4.js";import{a as we}from"./chunk-7ML2UCI7.js";import{a as re}from"./chunk-AHLVY52I.js";import{c as ve}from"./chunk-OUK2AWEI.js";import{b as Pe}from"./chunk-SWSOEYC7.js";import{d as ue,e as ne,f as de}from"./chunk-VBXL7XO7.js";import{e as y,f as te}from"./chunk-ZZHIBOMT.js";import{a as g}from"./chunk-ZLLER3HP.js";import{createHash as Je}from"node:crypto";import{existsSync as _e,readFileSync as Te,writeFileSync as Ge}from"node:fs";var H=g(r=>Je("sha256").update(r).digest("hex"),"sha256"),He=1.3,se=4,Xe=20;function ze(r,i){if(!r.configured||i<=0)return se;let e=Math.ceil(r.minPairs*He/i);return Math.min(Xe,Math.max(se,e))}g(ze,"passCapFor");function Be(r,i=10,e=se){if(r<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let o=Math.ceil(i*He),l=Math.min(e,Math.ceil(o/r)),n=l*r;return n<i?{passes:l,expectedPairs:n,feasible:!1,reason:`${r} live case(s) x ${e} passes = ${r*e} pairs at best, below the ${i} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:l,expectedPairs:n,feasible:!0}}g(Be,"planPasses");var Qe=60,Ve=5,Ne=g(r=>Array.isArray(r)?r.filter(i=>typeof i=="string"):[],"stringList"),J=g(r=>typeof r=="number"&&Number.isFinite(r)?r:null,"finite");function Ye(r,i,e=Ve){let o=[...r].filter(a=>a.fromContentHash===i).sort((a,c)=>Date.parse(c.createdAt)-Date.parse(a.createdAt)),l=[],n=new Set;for(let a of o){let c=a.toContentHash??a.id;if(n.has(c))continue;n.add(c);let d=a.verdict??null,k=J(d?.delta),M=J(d?.ci?.lower),x=J(d?.ci?.upper),S=J(d?.nWith),L=d?.sufficient===!0&&k!=null&&M!=null&&x!=null&&S!=null?{delta:k,ciLower:M,ciUpper:x,nPairs:S}:null;if(l.push({decision:typeof a.decision=="string"?a.decision:"unknown",applied:a.applied===!0,at:typeof a.createdAt=="string"?a.createdAt:"",rationale:typeof a.proposalRationale=="string"?a.proposalRationale:"",touched:Ne(a.touchedSections),refusals:Ne(a.refusals),measured:L}),l.length>=e)break}return l}g(Ye,"summarisePriorDecisions");function Ze(r,i){let e=i.accumulate??(r.autoEvolveAccumulate===!0||r.autoEvolveAccumulate==="true"),o=i.accumulateTargetPairs??r.autoEvolveAccumulateTarget,l=typeof o=="string"?Number.parseInt(o,10):o,n=typeof l=="number"&&Number.isInteger(l)&&l>0?l:Qe;return{enabled:e,targetPairs:n}}g(Ze,"readAccumulateConfig");function et(r){let i=r.accumulateEnabled&&r.pairCount<r.targetPairs;return{apply:r.consented&&!i,peeking:i}}g(et,"resolveApply");async function bt(r,i){let e=g(t=>i?.logger?.info?.(t)??console.log(t),"log"),{evalTargetId:o}=r,l=r.measurement?ve(r):{},n=`[cron_instruction_evolution] ${o}`,a=await y(`/api/eval-targets/${o}`),c=a.metadata??{},d=r.measurement?JSON.stringify([l.engine,l.model,l.graderEngine,l.graderModel,a.type,Pe(r.measurement.engine)]):void 0,k=null,M=!1;if(a.name.startsWith("/")&&_e(a.name))try{if(k=Te(a.name,"utf8"),k!==a.content){let t=await te(`/api/eval-targets/${o}/sync-content`,{content:k});M=t.synced,e(`${n}: target content drifted from disk by ${Math.abs(k.length-a.content.length)} chars \u2014 synced to disk truth (v${t.version}). Prior verdicts against the old text dissolve via content-hash keying.`),a={...a,content:k,version:t.version}}}catch(t){e(`${n}: disk sync failed (${t instanceof Error?t.message:String(t)}) \u2014 measuring the stored snapshot`)}let x=!1;try{x=(await y("/api/settings/evolution-account")).paused}catch(t){e(`${n}: could not read the account switch (${t instanceof Error?t.message:String(t)}) \u2014 pausing to be safe`),x=!0}if(x)return e(`${n}: PAUSED for the whole account (profiles.evolution_paused) \u2014 no model budget spent.`),{skipped:"paused-account"};if(ge(c))return e(`${n}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let S=Me(a);if(S)return e(`${n}: ${S.reason}`),S;let L=r.apply??(c.autoEvolveApply===!0||c.autoEvolveApply==="true"),F=tt(c);if(F==null){if(L)return e(`${n}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};e(`${n}: metadata.immutableSections unset \u2014 measure-only cycle proceeds with [] (nothing protected). Writing still requires setting it explicitly.`),F=[]}let w=(await y(`/api/eval-targets/${o}/evals`)).filter(t=>!t.retiredAt);if(w.length===0)return{skipped:"no-live-cases"};let j=me(c);j.note&&e(`${n}: ${j.note}`);let C=Be(w.length,j.minPairs,ze(j,w.length));if(!C.feasible)return e(`${n}: cannot reach a sufficient verdict \u2014 ${C.reason}`),{skipped:"cannot-reach-min-n",reason:C.reason};let Le=fe({liveCases:w.length,passes:C.passes});e(`${n}: budget for this run \u2014 ${$e(Le)}`);let G=await y(`/api/eval-targets/${o}/judge-calibration`);if(!G.powerCheck.adequate){let t=(G.powerCheck.reasons??[]).join("; ");return e(`${n}: not adequately powered, skipping before spending budget \u2014 ${t}`),{skipped:"not-adequate",reason:t}}let ie=de,Fe=Date.now()-ie*24*60*60*1e3,X=await y(`/api/eval-targets/${o}/promotions?limit=200`),oe=X.promotions.filter(t=>t.applied&&Date.parse(t.createdAt)>=Fe).length;if(oe>=ne)return e(`${n}: change budget looks exhausted (${oe}/${ne} applied in ${ie}d), skipping before spending budget`),{skipped:"budget-exhausted"};try{let t=await y("/api/usage/current-limits"),u=Ae({limits:t,now:new Date});if(!u.ok)return e(`${n}: deferring before spending budget \u2014 ${u.reason}`),{skipped:"quota-exhausted",reason:u.reason}}catch(t){e(`${n}: quota unknown (${t instanceof Error?t.message:String(t)}) \u2014 proceeding`)}let U=ue();if(!U.green)return e(`${n}: A/A canary is RED \u2014 halting. ${U.failures.join(" | ")}`),{skipped:"canary-red",reason:U.failures.join(" | ")};let z=a.content,D=H(z),f=Ze(c,r),v=f.enabled?re(X.promotions,D,f.targetPairs,d):null,b,q,$=[],_=0,B=pe,p=v?null:xe(c,D,d);if(p){b=p.content,q="",B=0;try{$=await De({evalTargetId:o,candidateContentHash:p.hash,executionKey:d,observedKey:p.observedKey})}catch(t){return e(`${n}: could not rebuild banked pairs (${t instanceof Error?t.message:String(t)})`),{skipped:"resume-read-failed",reason:p.hash}}e(`${n}: resuming interrupted cycle \u2014 ${$.length}/${p.plannedPairs} pair(s) rebuilt from eval_runs, no proposal call spent`)}else if(v){let t=await y(`/api/promotions/${v.promotionId}`);if(H(t.toContent)!==v.candidateContentHash)return e(`${n}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:v.promotionId};b=t.toContent,q=t.proposalRationale??"",$=v.pairs,_=v.runs,B=0,e(`${n}: continuing accumulation ${v.promotionId} \u2014 ${$.length}/${f.targetPairs} pair(s) carried from ${_} prior run(s)`)}else{let t=G.caseDiscrimination?.cases??[],u=[];if(a.name.startsWith("/")){let s=a.name.slice(0,a.name.lastIndexOf("/"));try{let m=await y(`/api/insights/evidence?projectPath=${encodeURIComponent(s)}`);m.analyzedAt&&(u=[...m.friction.map(ee=>`Real-session friction (insights, ${m.analyzedAt.slice(0,10)}): ${ee}`),...m.whatWorks.map(ee=>`Working well in real sessions \u2014 do not break: ${ee}`)],u.length>0&&e(`${n}: proposer sees ${m.friction.length} friction + ${m.whatWorks.length} what-works item(s) from insights`))}catch(m){e(`${n}: insights evidence unavailable (${m instanceof Error?m.message:String(m)}) \u2014 proposing without it`)}}let N=[];try{N=Ye(X.promotions,D)}catch(s){e(`${n}: could not summarise prior decisions (${s instanceof Error?s.message:String(s)}) \u2014 proposing without them`)}N.length>0&&e(`${n}: proposer sees ${N.length} prior decision(s) against this exact body (${N.map(s=>`${s.decision}${s.measured?"/measured":""}`).join(", ")})`);let W=await Ie({currentContent:a.content,targetType:a.type,targetName:a.name,immutableSections:F,evidence:{nonDiscriminating:t.filter(s=>!s.discriminating).map(s=>`${s.name??s.assertion??"unnamed"} \u2014 ${s.note}`),weakest:t.filter(s=>s.discriminating&&s.withPassRate<s.withoutPassRate).map(s=>({name:s.name??s.assertion??"unnamed",withPassRate:s.withPassRate,withoutPassRate:s.withoutPassRate})),priorDecisions:N,notes:u}},void 0,r.measurement?(s,m)=>we(r.measurement,s,m):void 0);if(!W.ok)return e(`${n}: no usable proposal \u2014 ${W.reason}`),{skipped:"no-proposal",reason:W.reason};b=W.proposal.candidateContent,q=W.proposal.rationale}let O=p?Se({plannedPairs:p.plannedPairs||C.expectedPairs,carriedPairs:$.length,liveCases:w.length}):C.passes;e(`${n}: measuring ${w.length} case(s) x ${O} pass(es) = up to ${w.length*O} pairs, candidate vs prior version`+(p?` (resumed; ${$.length} pair(s) already banked)`:""));let E=[],K=[],je=Date.now(),le=0,Q=0;for(let t=1;t<=O;t++){let u=await Ee({cases:w,candidateContent:b,priorVersionContent:z,concurrency:r.concurrency??2,runNumber:t,opts:{targetId:o,targetVersion:a.version??1,iteration:1,timeout:r.timeout??24e4,model:r.model,graderModel:r.graderModel,graderEngine:r.graderEngine,...l,executionKey:d,skipGrading:!1,targetType:a.type,targetName:a.name,candidateContentHash:H(b)},onLog:e});if(E.push(...u.pairs),K.push(...u.results),le+=u.completed,Q+=u.failed,e(`${n}: pass ${t}/${O} \u2014 ${u.pairs.length} pair(s), running total ${E.length}`),u.abortedForQuota){e(`${n}: stopping after pass ${t}/${O} \u2014 ${u.abortedForQuota}. Remaining passes would spend against an exhausted account.`);break}}let I=ye(K),Ue=p?.observedKey??v?.observedKey;if(r.measurement&&E.length>0&&(!I||$.length>0&&Ue!==I))return{skipped:"incomparable-execution",reason:"Actual actor/judge models or delivery changed; recorded runs are retained, but incompatible evidence cannot be pooled or promoted."};let A=[...$,...E],T=ke(K),V=E.length>0,h=he({runs:K,plannedPairs:C.expectedPairs,usablePairs:E.length,verdictPairs:V?A.length:E.length,proposalCalls:B,passes:O,liveCases:w.length,wallMs:Date.now()-je});if(e(`${n}: ${le} completed, ${Q} failed, ${E.length} usable pair(s) \u2014 spent ~${h.modelCalls} model calls (${h.proposalCalls} proposal + ${h.executorCalls} executor + >=${h.graderCalls} grader) in ${(h.wallMs/6e4).toFixed(1)} min`+(V?`; the ${h.verdictPairs} pair(s) behind this verdict resolve +/-${be(h.mde)} at 80% power`:"")),!V)return{skipped:T.infrastructureFailed?"infrastructure-failure":"no-pairs",reason:T.infrastructureFailed?`${T.infrastructureFailed} run(s) never executed (${T.summary.describe()}) \u2014 the environment failed, not the target`:`${Q} run(s) failed or were ungradeable`,cost:h};let Y=Ce({pairs:A.length,minPairs:10,accounting:T});if(Y.kind==="infrastructure-incomplete")return e(`${n}: not posting a verdict \u2014 ${Y.reason}`),await ae({evalTargetId:o,meta:c,blob:Oe({executionKey:d,...I?{observedKey:I}:{},content:b,hash:H(b),priorHash:D,plannedPairs:p?.plannedPairs||C.expectedPairs,now:new Date}),log:e,tag:n}),{skipped:"infrastructure-incomplete",reason:Y.reason,cost:h};f.enabled&&e(`${n}: accumulated ${A.length}/${f.targetPairs} pair(s) over ${_+1} run(s) on one candidate`);let ce=L,{apply:qe,peeking:Ke}=et({consented:ce,accumulateEnabled:f.enabled,pairCount:A.length,targetPairs:f.targetPairs});ce&&Ke&&e(`${n}: interim readout at ${A.length}/${f.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let P=await te(`/api/eval-targets/${o}/promotions`,{candidateContent:b,proposalSource:"llm",proposalRationale:q,pairs:A,canaryGreen:U.green,measuredAgainstContentHash:D,immutableSections:F,apply:qe,measurementCost:h,...f.enabled?{accumulation:{executionKey:d,...I?{observedKey:I}:{},candidateContentHash:H(b),priorContentHash:D,targetPairs:f.targetPairs,carriedPairs:$.length,runs:_+1}}:{}});e(`${n}: ${P.decision}${P.applied?" (APPLIED)":""} \u2014 ${P.rationale}`+(P.refusals.length>0?` | refusals: ${P.refusals.join("; ")}`:"")),(p||c[Re])&&await ae({evalTargetId:o,meta:c,blob:null,log:e,tag:n});let Z=!1,R;if(P.applied&&a.name.startsWith("/"))try{_e(a.name)?Te(a.name,"utf8")!==z?R="file changed since measurement started \u2014 refusing to clobber; next cycle re-syncs":(Ge(a.name,b,"utf8"),Z=!0):R="file no longer exists on disk",e(Z?`${n}: measured improvement written to ${a.name} (undo: git checkout -- ${a.name})`:`${n}: NOT written to disk \u2014 ${R}`)}catch(t){R=t instanceof Error?t.message:String(t),e(`${n}: disk write-back failed \u2014 ${R}. The eval target is updated; the file is not.`)}return{decision:P.decision,applied:P.applied,nPairs:A.length,promotionId:P.id,cost:h,diskSynced:M,...P.applied?{fileWritten:Z,...R?{fileWriteSkipped:R}:{}}:{},...f.enabled?{carriedPairs:$.length,accumulationRuns:_+1}:{}}}g(bt,"cronInstructionEvolution");function tt(r){let i=r.immutableSections;return i==null||!Array.isArray(i)?null:i.filter(e=>typeof e=="string")}g(tt,"readImmutableSections");export{He as a,se as b,Xe as c,ze as d,Be as e,Qe as f,Ve as g,Ye as h,Ze as i,et as j,bt as k,tt as l};
1
+ import{a as Me}from"./chunk-M7QSC64D.js";import{i as Ie}from"./chunk-XGMOVQ5G.js";import{b as pe,i as me,j as ge,k as fe,l as he,m as be,n as $e}from"./chunk-LB24UKHZ.js";import{c as Ae}from"./chunk-G7V4ZZZ3.js";import{a as Re,b as xe,c as Se,d as De,e as ae,f as Oe}from"./chunk-43VKTVM3.js";import{a as re}from"./chunk-AHLVY52I.js";import{d as ye,f as ke,g as Ce,i as Ee}from"./chunk-SCQK52SL.js";import{a as we}from"./chunk-ZK3ACE4T.js";import{c as ve}from"./chunk-H6FVXVGG.js";import{b as Pe}from"./chunk-SWSOEYC7.js";import{d as ue,e as ne,f as de}from"./chunk-VBXL7XO7.js";import{e as y,f as te}from"./chunk-76UKAFNM.js";import{a as g}from"./chunk-ZLLER3HP.js";import{createHash as Je}from"node:crypto";import{existsSync as _e,readFileSync as Te,writeFileSync as Ge}from"node:fs";var H=g(r=>Je("sha256").update(r).digest("hex"),"sha256"),He=1.3,se=4,Xe=20;function ze(r,i){if(!r.configured||i<=0)return se;let e=Math.ceil(r.minPairs*He/i);return Math.min(Xe,Math.max(se,e))}g(ze,"passCapFor");function Be(r,i=10,e=se){if(r<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let o=Math.ceil(i*He),l=Math.min(e,Math.ceil(o/r)),n=l*r;return n<i?{passes:l,expectedPairs:n,feasible:!1,reason:`${r} live case(s) x ${e} passes = ${r*e} pairs at best, below the ${i} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:l,expectedPairs:n,feasible:!0}}g(Be,"planPasses");var Qe=60,Ve=5,Ne=g(r=>Array.isArray(r)?r.filter(i=>typeof i=="string"):[],"stringList"),J=g(r=>typeof r=="number"&&Number.isFinite(r)?r:null,"finite");function Ye(r,i,e=Ve){let o=[...r].filter(a=>a.fromContentHash===i).sort((a,c)=>Date.parse(c.createdAt)-Date.parse(a.createdAt)),l=[],n=new Set;for(let a of o){let c=a.toContentHash??a.id;if(n.has(c))continue;n.add(c);let d=a.verdict??null,k=J(d?.delta),M=J(d?.ci?.lower),x=J(d?.ci?.upper),S=J(d?.nWith),L=d?.sufficient===!0&&k!=null&&M!=null&&x!=null&&S!=null?{delta:k,ciLower:M,ciUpper:x,nPairs:S}:null;if(l.push({decision:typeof a.decision=="string"?a.decision:"unknown",applied:a.applied===!0,at:typeof a.createdAt=="string"?a.createdAt:"",rationale:typeof a.proposalRationale=="string"?a.proposalRationale:"",touched:Ne(a.touchedSections),refusals:Ne(a.refusals),measured:L}),l.length>=e)break}return l}g(Ye,"summarisePriorDecisions");function Ze(r,i){let e=i.accumulate??(r.autoEvolveAccumulate===!0||r.autoEvolveAccumulate==="true"),o=i.accumulateTargetPairs??r.autoEvolveAccumulateTarget,l=typeof o=="string"?Number.parseInt(o,10):o,n=typeof l=="number"&&Number.isInteger(l)&&l>0?l:Qe;return{enabled:e,targetPairs:n}}g(Ze,"readAccumulateConfig");function et(r){let i=r.accumulateEnabled&&r.pairCount<r.targetPairs;return{apply:r.consented&&!i,peeking:i}}g(et,"resolveApply");async function bt(r,i){let e=g(t=>i?.logger?.info?.(t)??console.log(t),"log"),{evalTargetId:o}=r,l=r.measurement?ve(r):{},n=`[cron_instruction_evolution] ${o}`,a=await y(`/api/eval-targets/${o}`),c=a.metadata??{},d=r.measurement?JSON.stringify([l.engine,l.model,l.graderEngine,l.graderModel,a.type,Pe(r.measurement.engine)]):void 0,k=null,M=!1;if(a.name.startsWith("/")&&_e(a.name))try{if(k=Te(a.name,"utf8"),k!==a.content){let t=await te(`/api/eval-targets/${o}/sync-content`,{content:k});M=t.synced,e(`${n}: target content drifted from disk by ${Math.abs(k.length-a.content.length)} chars \u2014 synced to disk truth (v${t.version}). Prior verdicts against the old text dissolve via content-hash keying.`),a={...a,content:k,version:t.version}}}catch(t){e(`${n}: disk sync failed (${t instanceof Error?t.message:String(t)}) \u2014 measuring the stored snapshot`)}let x=!1;try{x=(await y("/api/settings/evolution-account")).paused}catch(t){e(`${n}: could not read the account switch (${t instanceof Error?t.message:String(t)}) \u2014 pausing to be safe`),x=!0}if(x)return e(`${n}: PAUSED for the whole account (profiles.evolution_paused) \u2014 no model budget spent.`),{skipped:"paused-account"};if(ge(c))return e(`${n}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let S=Me(a);if(S)return e(`${n}: ${S.reason}`),S;let L=r.apply??(c.autoEvolveApply===!0||c.autoEvolveApply==="true"),F=tt(c);if(F==null){if(L)return e(`${n}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};e(`${n}: metadata.immutableSections unset \u2014 measure-only cycle proceeds with [] (nothing protected). Writing still requires setting it explicitly.`),F=[]}let w=(await y(`/api/eval-targets/${o}/evals`)).filter(t=>!t.retiredAt);if(w.length===0)return{skipped:"no-live-cases"};let j=me(c);j.note&&e(`${n}: ${j.note}`);let C=Be(w.length,j.minPairs,ze(j,w.length));if(!C.feasible)return e(`${n}: cannot reach a sufficient verdict \u2014 ${C.reason}`),{skipped:"cannot-reach-min-n",reason:C.reason};let Le=fe({liveCases:w.length,passes:C.passes});e(`${n}: budget for this run \u2014 ${$e(Le)}`);let G=await y(`/api/eval-targets/${o}/judge-calibration`);if(!G.powerCheck.adequate){let t=(G.powerCheck.reasons??[]).join("; ");return e(`${n}: not adequately powered, skipping before spending budget \u2014 ${t}`),{skipped:"not-adequate",reason:t}}let ie=de,Fe=Date.now()-ie*24*60*60*1e3,X=await y(`/api/eval-targets/${o}/promotions?limit=200`),oe=X.promotions.filter(t=>t.applied&&Date.parse(t.createdAt)>=Fe).length;if(oe>=ne)return e(`${n}: change budget looks exhausted (${oe}/${ne} applied in ${ie}d), skipping before spending budget`),{skipped:"budget-exhausted"};try{let t=await y("/api/usage/current-limits"),u=Ae({limits:t,now:new Date});if(!u.ok)return e(`${n}: deferring before spending budget \u2014 ${u.reason}`),{skipped:"quota-exhausted",reason:u.reason}}catch(t){e(`${n}: quota unknown (${t instanceof Error?t.message:String(t)}) \u2014 proceeding`)}let U=ue();if(!U.green)return e(`${n}: A/A canary is RED \u2014 halting. ${U.failures.join(" | ")}`),{skipped:"canary-red",reason:U.failures.join(" | ")};let z=a.content,D=H(z),f=Ze(c,r),v=f.enabled?re(X.promotions,D,f.targetPairs,d):null,b,q,$=[],_=0,B=pe,p=v?null:xe(c,D,d);if(p){b=p.content,q="",B=0;try{$=await De({evalTargetId:o,candidateContentHash:p.hash,executionKey:d,observedKey:p.observedKey})}catch(t){return e(`${n}: could not rebuild banked pairs (${t instanceof Error?t.message:String(t)})`),{skipped:"resume-read-failed",reason:p.hash}}e(`${n}: resuming interrupted cycle \u2014 ${$.length}/${p.plannedPairs} pair(s) rebuilt from eval_runs, no proposal call spent`)}else if(v){let t=await y(`/api/promotions/${v.promotionId}`);if(H(t.toContent)!==v.candidateContentHash)return e(`${n}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:v.promotionId};b=t.toContent,q=t.proposalRationale??"",$=v.pairs,_=v.runs,B=0,e(`${n}: continuing accumulation ${v.promotionId} \u2014 ${$.length}/${f.targetPairs} pair(s) carried from ${_} prior run(s)`)}else{let t=G.caseDiscrimination?.cases??[],u=[];if(a.name.startsWith("/")){let s=a.name.slice(0,a.name.lastIndexOf("/"));try{let m=await y(`/api/insights/evidence?projectPath=${encodeURIComponent(s)}`);m.analyzedAt&&(u=[...m.friction.map(ee=>`Real-session friction (insights, ${m.analyzedAt.slice(0,10)}): ${ee}`),...m.whatWorks.map(ee=>`Working well in real sessions \u2014 do not break: ${ee}`)],u.length>0&&e(`${n}: proposer sees ${m.friction.length} friction + ${m.whatWorks.length} what-works item(s) from insights`))}catch(m){e(`${n}: insights evidence unavailable (${m instanceof Error?m.message:String(m)}) \u2014 proposing without it`)}}let N=[];try{N=Ye(X.promotions,D)}catch(s){e(`${n}: could not summarise prior decisions (${s instanceof Error?s.message:String(s)}) \u2014 proposing without them`)}N.length>0&&e(`${n}: proposer sees ${N.length} prior decision(s) against this exact body (${N.map(s=>`${s.decision}${s.measured?"/measured":""}`).join(", ")})`);let W=await Ie({currentContent:a.content,targetType:a.type,targetName:a.name,immutableSections:F,evidence:{nonDiscriminating:t.filter(s=>!s.discriminating).map(s=>`${s.name??s.assertion??"unnamed"} \u2014 ${s.note}`),weakest:t.filter(s=>s.discriminating&&s.withPassRate<s.withoutPassRate).map(s=>({name:s.name??s.assertion??"unnamed",withPassRate:s.withPassRate,withoutPassRate:s.withoutPassRate})),priorDecisions:N,notes:u}},void 0,r.measurement?(s,m)=>we(r.measurement,s,m):void 0);if(!W.ok)return e(`${n}: no usable proposal \u2014 ${W.reason}`),{skipped:"no-proposal",reason:W.reason};b=W.proposal.candidateContent,q=W.proposal.rationale}let O=p?Se({plannedPairs:p.plannedPairs||C.expectedPairs,carriedPairs:$.length,liveCases:w.length}):C.passes;e(`${n}: measuring ${w.length} case(s) x ${O} pass(es) = up to ${w.length*O} pairs, candidate vs prior version`+(p?` (resumed; ${$.length} pair(s) already banked)`:""));let E=[],K=[],je=Date.now(),le=0,Q=0;for(let t=1;t<=O;t++){let u=await Ee({cases:w,candidateContent:b,priorVersionContent:z,concurrency:r.concurrency??2,runNumber:t,opts:{targetId:o,targetVersion:a.version??1,iteration:1,timeout:r.timeout??24e4,model:r.model,graderModel:r.graderModel,graderEngine:r.graderEngine,...l,executionKey:d,skipGrading:!1,targetType:a.type,targetName:a.name,candidateContentHash:H(b)},onLog:e});if(E.push(...u.pairs),K.push(...u.results),le+=u.completed,Q+=u.failed,e(`${n}: pass ${t}/${O} \u2014 ${u.pairs.length} pair(s), running total ${E.length}`),u.abortedForQuota){e(`${n}: stopping after pass ${t}/${O} \u2014 ${u.abortedForQuota}. Remaining passes would spend against an exhausted account.`);break}}let I=ye(K),Ue=p?.observedKey??v?.observedKey;if(r.measurement&&E.length>0&&(!I||$.length>0&&Ue!==I))return{skipped:"incomparable-execution",reason:"Actual actor/judge models or delivery changed; recorded runs are retained, but incompatible evidence cannot be pooled or promoted."};let A=[...$,...E],T=ke(K),V=E.length>0,h=he({runs:K,plannedPairs:C.expectedPairs,usablePairs:E.length,verdictPairs:V?A.length:E.length,proposalCalls:B,passes:O,liveCases:w.length,wallMs:Date.now()-je});if(e(`${n}: ${le} completed, ${Q} failed, ${E.length} usable pair(s) \u2014 spent ~${h.modelCalls} model calls (${h.proposalCalls} proposal + ${h.executorCalls} executor + >=${h.graderCalls} grader) in ${(h.wallMs/6e4).toFixed(1)} min`+(V?`; the ${h.verdictPairs} pair(s) behind this verdict resolve +/-${be(h.mde)} at 80% power`:"")),!V)return{skipped:T.infrastructureFailed?"infrastructure-failure":"no-pairs",reason:T.infrastructureFailed?`${T.infrastructureFailed} run(s) never executed (${T.summary.describe()}) \u2014 the environment failed, not the target`:`${Q} run(s) failed or were ungradeable`,cost:h};let Y=Ce({pairs:A.length,minPairs:10,accounting:T});if(Y.kind==="infrastructure-incomplete")return e(`${n}: not posting a verdict \u2014 ${Y.reason}`),await ae({evalTargetId:o,meta:c,blob:Oe({executionKey:d,...I?{observedKey:I}:{},content:b,hash:H(b),priorHash:D,plannedPairs:p?.plannedPairs||C.expectedPairs,now:new Date}),log:e,tag:n}),{skipped:"infrastructure-incomplete",reason:Y.reason,cost:h};f.enabled&&e(`${n}: accumulated ${A.length}/${f.targetPairs} pair(s) over ${_+1} run(s) on one candidate`);let ce=L,{apply:qe,peeking:Ke}=et({consented:ce,accumulateEnabled:f.enabled,pairCount:A.length,targetPairs:f.targetPairs});ce&&Ke&&e(`${n}: interim readout at ${A.length}/${f.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let P=await te(`/api/eval-targets/${o}/promotions`,{candidateContent:b,proposalSource:"llm",proposalRationale:q,pairs:A,canaryGreen:U.green,measuredAgainstContentHash:D,immutableSections:F,apply:qe,measurementCost:h,...f.enabled?{accumulation:{executionKey:d,...I?{observedKey:I}:{},candidateContentHash:H(b),priorContentHash:D,targetPairs:f.targetPairs,carriedPairs:$.length,runs:_+1}}:{}});e(`${n}: ${P.decision}${P.applied?" (APPLIED)":""} \u2014 ${P.rationale}`+(P.refusals.length>0?` | refusals: ${P.refusals.join("; ")}`:"")),(p||c[Re])&&await ae({evalTargetId:o,meta:c,blob:null,log:e,tag:n});let Z=!1,R;if(P.applied&&a.name.startsWith("/"))try{_e(a.name)?Te(a.name,"utf8")!==z?R="file changed since measurement started \u2014 refusing to clobber; next cycle re-syncs":(Ge(a.name,b,"utf8"),Z=!0):R="file no longer exists on disk",e(Z?`${n}: measured improvement written to ${a.name} (undo: git checkout -- ${a.name})`:`${n}: NOT written to disk \u2014 ${R}`)}catch(t){R=t instanceof Error?t.message:String(t),e(`${n}: disk write-back failed \u2014 ${R}. The eval target is updated; the file is not.`)}return{decision:P.decision,applied:P.applied,nPairs:A.length,promotionId:P.id,cost:h,diskSynced:M,...P.applied?{fileWritten:Z,...R?{fileWriteSkipped:R}:{}}:{},...f.enabled?{carriedPairs:$.length,accumulationRuns:_+1}:{}}}g(bt,"cronInstructionEvolution");function tt(r){let i=r.immutableSections;return i==null||!Array.isArray(i)?null:i.filter(e=>typeof e=="string")}g(tt,"readImmutableSections");export{He as a,se as b,Xe as c,ze as d,Be as e,Qe as f,Ve as g,Ye as h,Ze as i,et as j,bt as k,tt as l};
@@ -1,4 +1,4 @@
1
- import{f as p}from"./chunk-UJ7EPLKC.js";import{a as l}from"./chunk-ZLLER3HP.js";var k=[{name:"git-commit-helper",description:"Writes conventional commit messages and PR descriptions from a diff"},{name:"sql-query-optimizer",description:"Analyzes slow SQL queries and proposes indexes and rewrites"},{name:"i18n-string-extractor",description:"Finds hardcoded UI strings and extracts them into translation files"}],T=`You are an AI coding assistant with access to a set of optional skills. When a user request matches a skill's description, you invoke that skill before answering; when no skill applies, you answer directly without one. Descriptions are your ONLY information about each skill.
1
+ import{f as p}from"./chunk-FBSZ6KCM.js";import{a as l}from"./chunk-ZLLER3HP.js";var k=[{name:"git-commit-helper",description:"Writes conventional commit messages and PR descriptions from a diff"},{name:"sql-query-optimizer",description:"Analyzes slow SQL queries and proposes indexes and rewrites"},{name:"i18n-string-extractor",description:"Finds hardcoded UI strings and extracts them into translation files"}],T=`You are an AI coding assistant with access to a set of optional skills. When a user request matches a skill's description, you invoke that skill before answering; when no skill applies, you answer directly without one. Descriptions are your ONLY information about each skill.
2
2
 
3
3
  {{CATALOG}}
4
4
 
@@ -0,0 +1 @@
1
+ import{a as m,c as gs}from"./chunk-ZLLER3HP.js";import{boolean as en,date as vs,index as Vt,integer as Is,jsonb as ys,pgTable as Ft,text as D,timestamp as B,uniqueIndex as ws,uuid as ce}from"drizzle-orm/pg-core";var tn=Ft("announcements",{id:ce("id").primaryKey().defaultRandom(),version:D("version").notNull().unique(),releaseDate:vs("release_date").notNull(),subject:D("subject").notNull(),htmlBody:D("html_body").notNull(),textBody:D("text_body").notNull(),sections:ys("sections").notNull().default({}),status:D("status").notNull().default("draft"),recipientCount:Is("recipient_count"),sentAt:B("sent_at",{withTimezone:!0}),sentBy:ce("sent_by"),error:D("error"),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:B("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Vt("idx_announcements_status").on(e.status),Vt("idx_announcements_created").on(e.createdAt)]),on=Ft("announcement_deliveries",{id:ce("id").primaryKey().defaultRandom(),announcementId:ce("announcement_id").notNull(),userId:ce("user_id").notNull(),email:D("email").notNull(),status:D("status").notNull().default("pending"),providerId:D("provider_id"),error:D("error"),sentAt:B("sent_at",{withTimezone:!0}),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ws("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Vt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),nn=Ft("notification_preferences",{userId:ce("user_id").primaryKey(),productAnnouncements:en("product_announcements").notNull().default(!0),weeklyDigest:en("weekly_digest").notNull().default(!0),unsubscribeToken:D("unsubscribe_token").notNull().unique(),unsubscribedAt:B("unsubscribed_at",{withTimezone:!0}),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:B("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{boolean as at,integer as Pe,jsonb as Ts,pgTable as As,real as an,text as Ke,timestamp as $t,uuid as dn}from"drizzle-orm/pg-core";import{pgTable as it,text as _e,timestamp as be,jsonb as rn,uuid as te,primaryKey as sn}from"drizzle-orm/pg-core";var l=it("organizations",{id:te("id").primaryKey().defaultRandom(),name:_e("name").unique().notNull(),slug:_e("slug").unique().notNull(),metadata:rn("metadata"),createdAt:be("created_at",{withTimezone:!0}).defaultNow(),updatedAt:be("updated_at",{withTimezone:!0}).defaultNow()}),v=it("teams",{id:te("id").primaryKey().defaultRandom(),orgId:te("org_id").references(()=>l.id,{onDelete:"cascade"}),name:_e("name").notNull(),slug:_e("slug").notNull(),metadata:rn("metadata"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()}),pe=it("user_organizations",{userId:te("user_id").notNull(),orgId:te("org_id").references(()=>l.id,{onDelete:"cascade"}).notNull(),role:_e("role").notNull().default("member"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()},e=>[sn({columns:[e.userId,e.orgId]})]),me=it("user_teams",{userId:te("user_id").notNull(),teamId:te("team_id").references(()=>v.id,{onDelete:"cascade"}).notNull(),role:_e("role").notNull().default("member"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()},e=>[sn({columns:[e.userId,e.teamId]})]);var o=As("profiles",{id:dn("id").primaryKey(),email:Ke("email"),measurementPreferences:Ts("measurement_preferences"),displayName:Ke("display_name"),activeOrgId:dn("active_org_id").references(()=>l.id,{onDelete:"set null"}),isSuperadmin:at("is_superadmin").notNull().default(!1),claudeCodePlan:Ke("claude_code_plan"),planSource:Ke("plan_source").notNull().default("detected"),setupCompletedAt:$t("setup_completed_at",{withTimezone:!0}),liveSendSkipped:at("live_send_skipped").notNull().default(!1),autoAcceptSuggestions:at("auto_accept_suggestions").notNull().default(!0),evolutionPaused:at("evolution_paused").notNull().default(!1),suggestionConfidenceThreshold:an("suggestion_confidence_threshold").notNull().default(.7),autoAcceptMinScore:an("auto_accept_min_score"),autoAcceptMaxPerRun:Pe("auto_accept_max_per_run"),autoAcceptMaxPerWindow:Pe("auto_accept_max_per_window"),autoAcceptWindowDays:Pe("auto_accept_window_days"),trialMaxConcurrent:Pe("trial_max_concurrent"),trialMaxPerRun:Pe("trial_max_per_run"),harborAbCadence:Ke("harbor_ab_cadence").notNull().default("off"),createdAt:$t("created_at",{withTimezone:!0}).defaultNow(),updatedAt:$t("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ds,text as Jt,timestamp as dt,uuid as ut,index as un}from"drizzle-orm/pg-core";var b=Ds("org_invitations",{id:ut("id").primaryKey().defaultRandom(),orgId:ut("org_id").notNull().references(()=>l.id,{onDelete:"cascade"}),email:Jt("email").notNull(),role:Jt("role").notNull().default("member"),teamId:ut("team_id").references(()=>v.id,{onDelete:"set null"}),invitedBy:ut("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:Jt("token").notNull().unique(),expiresAt:dt("expires_at",{withTimezone:!0}).notNull(),acceptedAt:dt("accepted_at",{withTimezone:!0}),revokedAt:dt("revoked_at",{withTimezone:!0}),createdAt:dt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[un("idx_org_invitations_token").on(e.token),un("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Qt,text as N,timestamp as G,jsonb as lt,uuid as z,integer as ct,boolean as js,uniqueIndex as _t,index as Ce}from"drizzle-orm/pg-core";var n=Qt("instructions",{id:z("id").primaryKey().defaultRandom(),name:N("name").notNull(),description:N("description").notNull(),type:N("type").notNull().default("instruction"),scope:N("scope").notNull(),scopeRef:z("scope_ref"),version:N("version").notNull(),content:N("content").notNull(),frontmatter:lt("frontmatter").notNull(),slots:lt("slots"),tags:N("tags").array(),compatibility:N("compatibility").array(),createdBy:z("created_by"),createdAt:G("created_at",{withTimezone:!0}).defaultNow(),updatedAt:G("updated_at",{withTimezone:!0}).defaultNow(),archived:js("archived").default(!1),archivedAt:G("archived_at",{withTimezone:!0}),archivedBy:z("archived_by"),forkedFromId:z("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:N("upstream_version"),badge:N("badge"),contentHash:N("content_hash"),contextIdentity:N("context_identity"),scanScore:ct("scan_score"),scanFindings:lt("scan_findings"),popularityScore:ct("popularity_score"),sourceUpdatedAt:G("source_updated_at",{withTimezone:!0})},e=>[_t("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ce("idx_instructions_scope").on(e.scope,e.scopeRef),Ce("idx_instructions_created_by").on(e.createdBy),Ce("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ce("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),ln=Qt("instruction_version_identities",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:N("content_hash").notNull(),versionOrdinal:ct("version_ordinal").notNull(),content:N("content"),firstSeenAt:G("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:G("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:G("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[_t("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),_t("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),Ce("idx_ivi_instruction").on(e.instructionId)]),fe=Qt("instruction_versions",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:ct("version_number").notNull(),content:N("content").notNull(),frontmatter:lt("frontmatter").notNull(),changeSummary:N("change_summary"),createdBy:z("created_by"),createdAt:G("created_at",{withTimezone:!0}).defaultNow()},e=>[_t("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);import{pgTable as zs,text as Rs,timestamp as ks,jsonb as Es,uuid as Yt,index as cn}from"drizzle-orm/pg-core";var Ne=zs("instruction_events",{id:Yt("id").primaryKey().defaultRandom(),instructionId:Yt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:Rs("event_type").notNull(),actorId:Yt("actor_id").notNull(),metadata:Es("metadata"),createdAt:ks("created_at",{withTimezone:!0}).defaultNow()},e=>[cn("idx_instruction_events_instruction").on(e.instructionId),cn("idx_instruction_events_type").on(e.eventType)]);import{boolean as Ss,jsonb as bs,pgTable as Xt,primaryKey as _n,text as oe,timestamp as Oe,uniqueIndex as Wt,uuid as ne}from"drizzle-orm/pg-core";import{sql as Ps}from"drizzle-orm";var r=Xt("projects",{id:ne("id").primaryKey().defaultRandom(),orgId:ne("org_id").references(()=>l.id,{onDelete:"cascade"}),name:oe("name").notNull(),description:oe("description"),githubRepo:oe("github_repo"),gitRemoteUrl:oe("git_remote_url"),gitRootCommit:oe("git_root_commit"),gitRemoteAliases:oe("git_remote_aliases").array().notNull().default([]),metadata:bs("metadata"),createdBy:ne("created_by"),createdAt:Oe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Oe("updated_at",{withTimezone:!0}).defaultNow()},e=>[Wt("projects_org_name_idx").on(e.orgId,e.name),Wt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Ps`${e.gitRemoteUrl} IS NOT NULL`)]),V=Xt("project_instructions",{projectId:ne("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:ne("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Oe("added_at",{withTimezone:!0}).defaultNow(),addedBy:ne("added_by")},e=>[_n({columns:[e.projectId,e.instructionId]})]),pn=Xt("project_checkouts",{projectId:ne("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:oe("path").notNull(),isWorktree:Ss("is_worktree").notNull().default(!1),firstSeen:Oe("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Oe("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[_n({columns:[e.projectId,e.path]}),Wt("project_checkouts_path_unique").on(e.path)]);import{pgTable as to,text as I,timestamp as qe,jsonb as re,uuid as P,integer as mt,uniqueIndex as fn,index as R}from"drizzle-orm/pg-core";import{pgTable as Ks,text as xe,timestamp as Zt,jsonb as mn,uuid as pt,integer as Cs,boolean as Os,index as eo}from"drizzle-orm/pg-core";var h=Ks("agent_runs",{id:pt("id").primaryKey().defaultRandom(),userId:pt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:pt("org_id").references(()=>l.id,{onDelete:"set null"}),projectId:pt("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:xe("project_path"),gitRemote:xe("git_remote"),baseBranch:xe("base_branch"),title:xe("title"),prompt:xe("prompt"),toolSpec:mn("tool_spec").notNull().default([]),autoWorktree:Os("auto_worktree").notNull().default(!0),status:xe("status").notNull().default("pending"),sessionCount:Cs("session_count").notNull().default(0),metadata:mn("metadata").notNull().default({}),createdAt:Zt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Zt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Zt("completed_at",{withTimezone:!0})},e=>[eo("idx_agent_runs_user").on(e.userId),eo("idx_agent_runs_org_created").on(e.orgId,e.createdAt),eo("idx_agent_runs_project").on(e.projectId)]);var i=to("sessions",{id:P("id").primaryKey().defaultRandom(),userId:P("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:P("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:P("org_id").references(()=>l.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:qe("started_at",{withTimezone:!0}).notNull(),endedAt:qe("ended_at",{withTimezone:!0}),eventCount:mt("event_count").default(0),tokenUsage:re("token_usage"),analysis:re("analysis"),analyzedAt:qe("analyzed_at",{withTimezone:!0}),analyzedEventCount:mt("analyzed_event_count"),analyzedTurnCount:mt("analyzed_turn_count"),metadata:re("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:P("run_id").references(()=>h.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:qe("created_at",{withTimezone:!0}).defaultNow()},e=>[R("idx_sessions_user").on(e.userId),R("idx_sessions_tool").on(e.tool),R("idx_sessions_started_at").on(e.startedAt),R("idx_sessions_project").on(e.projectId),R("idx_sessions_org_started_at").on(e.orgId,e.startedAt),R("idx_sessions_run").on(e.runId),fn("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),he=to("session_events",{id:P("id").primaryKey().defaultRandom(),sessionId:P("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),sequence:mt("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:re("tool_input"),toolOutput:re("tool_output"),tokenUsage:re("token_usage"),model:I("model"),timestamp:qe("timestamp",{withTimezone:!0}).notNull(),metadata:re("metadata").default({})},e=>[fn("session_events_session_sequence_idx").on(e.sessionId,e.sequence),R("idx_session_events_session_id").on(e.sessionId),R("idx_session_events_event_type").on(e.eventType),R("idx_session_events_model").on(e.model)]),F=to("session_instructions",{sessionId:P("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),instructionId:P("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:I("link_method").notNull(),contentHash:I("content_hash")},e=>[R("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as Nn,text as ft,timestamp as xn,uuid as k,integer as hn,index as ge,unique as qs}from"drizzle-orm/pg-core";var K=Nn("treatment_assignments",{id:k("id").primaryKey().defaultRandom(),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ft("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:hn("treatment_version").notNull().default(1),projectId:k("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:k("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:ft("method").notNull(),assignedAt:xn("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ge("idx_treatment_assignments_user").on(e.userId),ge("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),ge("idx_treatment_assignments_project").on(e.projectId)]),C=Nn("treatment_exposures",{id:k("id").primaryKey().defaultRandom(),sessionId:k("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ft("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:hn("treatment_version").notNull().default(1),assignmentId:k("assignment_id").references(()=>K.id,{onDelete:"set null"}),method:ft("method").notNull(),exposedAt:xn("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[qs("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),ge("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),ge("idx_treatment_exposures_user").on(e.userId),ge("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Ms,text as oo,timestamp as Hs,uuid as Nt,integer as Ls,index as gn,uniqueIndex as Us}from"drizzle-orm/pg-core";var vn=Ms("pending_treatment_exposures",{id:Nt("id").primaryKey().defaultRandom(),userId:Nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:oo("external_session_id").notNull(),treatmentType:oo("treatment_type").notNull(),treatmentId:Nt("treatment_id").notNull(),treatmentVersion:Ls("treatment_version").notNull().default(1),method:oo("method").notNull().default("injected"),projectId:Nt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:Hs("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Us("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),gn("idx_pending_treatment_exposures_ext").on(e.externalSessionId),gn("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as In,text as $,timestamp as yn,uuid as ve,numeric as Bs,index as no,unique as Gs}from"drizzle-orm/pg-core";var Me=In("instruction_experiments",{id:ve("id").primaryKey().defaultRandom(),userId:ve("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:ve("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:$("project_path").notNull(),status:$("status").notNull().default("running"),treatedShare:Bs("treated_share").notNull().default("0.5"),salt:$("salt").notNull(),contentHash:$("content_hash"),source:$("source").notNull().default("manual"),stoppedReason:$("stopped_reason"),createdAt:yn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[no("idx_instruction_experiments_lookup").on(e.userId,e.projectPath)]),wn=In("instruction_experiment_arms",{id:ve("id").primaryKey().defaultRandom(),experimentId:ve("experiment_id").notNull().references(()=>Me.id,{onDelete:"cascade"}),userId:ve("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:$("external_session_id").notNull(),arm:$("arm").notNull(),assignedAt:yn("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Gs("instruction_experiment_arms_unique").on(e.experimentId,e.externalSessionId),no("idx_instruction_experiment_arms_experiment").on(e.experimentId,e.arm),no("idx_instruction_experiment_arms_session").on(e.externalSessionId)]);import{pgTable as Vs,text as ro,timestamp as Fs,uuid as xt,numeric as so,integer as Tn,jsonb as $s,index as Js,unique as Qs}from"drizzle-orm/pg-core";var An=Vs("instruction_verdicts",{id:xt("id").primaryKey().defaultRandom(),userId:xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:xt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:ro("content_hash").notNull(),projectPath:ro("project_path").notNull(),segment:$s("segment").notNull().default({}),decision:ro("decision").notNull(),delta:so("delta").notNull(),ciLower:so("ci_lower").notNull(),ciUpper:so("ci_upper").notNull(),nTreated:Tn("n_treated").notNull(),nControl:Tn("n_control").notNull(),experimentId:xt("experiment_id").references(()=>Me.id,{onDelete:"set null"}),decidedAt:Fs("decided_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Qs("instruction_verdicts_unique").on(e.instructionId,e.contentHash,e.projectPath),Js("idx_instruction_verdicts_render").on(e.userId,e.projectPath)]);import{pgTable as Ys,text as ht,timestamp as io,uuid as ao,integer as Ws,unique as Xs,index as Zs}from"drizzle-orm/pg-core";var Dn=Ys("insight_recommendation_log",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),projectPath:ht("project_path").notNull().default(""),category:ht("category").notNull(),contentHash:ht("content_hash").notNull(),label:ht("label").notNull().default(""),firstSeenAt:io("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:io("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),timesGenerated:Ws("times_generated").notNull().default(1),lastJobId:ao("last_job_id"),dismissedAt:io("dismissed_at",{withTimezone:!0})},e=>[Xs("insight_recommendation_log_unique").on(e.userId,e.projectPath,e.contentHash),Zs("idx_insight_recommendation_log_read").on(e.userId,e.projectPath)]);import{pgTable as ei,text as Ie,timestamp as uo,uuid as He,integer as jn,index as gt}from"drizzle-orm/pg-core";var w=ei("memories",{id:He("id").primaryKey().defaultRandom(),userId:He("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:He("org_id"),projectId:He("project_id").references(()=>r.id,{onDelete:"set null"}),version:jn("version").notNull().default(1),parentId:He("parent_id").references(()=>w.id,{onDelete:"set null"}),kind:Ie("kind").notNull(),title:Ie("title").notNull(),body:Ie("body").notNull(),source:Ie("source").notNull(),status:Ie("status").notNull().default("active"),trustClass:Ie("trust_class"),trustVersion:jn("trust_version"),trustComputedAt:uo("trust_computed_at",{withTimezone:!0}),createdAt:uo("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:uo("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[gt("idx_memories_user").on(e.userId),gt("idx_memories_project").on(e.projectId),gt("idx_memories_parent").on(e.parentId),gt("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as ti,text as se,timestamp as lo,uuid as co,integer as zn,jsonb as oi,index as Rn}from"drizzle-orm/pg-core";var kn=ti("memory_experiments",{id:co("id").primaryKey().defaultRandom(),memoryId:co("memory_id").notNull().references(()=>w.id,{onDelete:"cascade"}),userId:co("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:zn("memory_version").notNull().default(1),memoryBody:se("memory_body"),taskPrompt:se("task_prompt").notNull(),expectations:se("expectations").array().notNull().default([]),trials:zn("trials").notNull().default(10),model:se("model"),engine:se("engine").$type().notNull().default("claude"),status:se("status").notNull().default("pending"),result:oi("result").$type(),error:se("error"),createdAt:lo("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:lo("started_at",{withTimezone:!0}),completedAt:lo("completed_at",{withTimezone:!0})},e=>[Rn("idx_memory_experiments_memory").on(e.memoryId),Rn("idx_memory_experiments_user").on(e.userId)]);import{pgTable as ni,text as ye,timestamp as _o,uuid as po,jsonb as ri,uniqueIndex as si,index as En}from"drizzle-orm/pg-core";var vt=ni("session_terminal_targets",{id:po("id").primaryKey().defaultRandom(),userId:po("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:po("session_id").references(()=>i.id,{onDelete:"set null"}),externalSessionId:ye("external_session_id"),kind:ye("kind").notNull(),target:ye("target").notNull(),status:ye("status").notNull().default("active"),attachCommand:ye("attach_command").notNull(),projectPath:ye("project_path"),metadata:ri("metadata").notNull().default({}),lastSeenAt:_o("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:_o("created_at",{withTimezone:!0}).defaultNow(),updatedAt:_o("updated_at",{withTimezone:!0}).defaultNow()},e=>[si("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 ii,index as It,jsonb as Sn,pgTable as ai,text as ie,timestamp as Le,uuid as yt,integer as mo}from"drizzle-orm/pg-core";var bn=ai("session_send_jobs",{id:yt("id").primaryKey().defaultRandom(),userId:yt("user_id").notNull(),sessionId:yt("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),terminalTargetId:yt("terminal_target_id").references(()=>vt.id,{onDelete:"set null"}),target:ie("target").notNull(),message:ie("message").notNull(),submit:ii("submit").notNull().default(!0),delivery:ie("delivery").notNull().default("live"),status:ie("status").notNull().default("pending"),result:Sn("result"),error:ie("error"),attempts:mo("attempts").notNull().default(0),taskKind:ie("task_kind"),payload:Sn("payload"),claimedBy:ie("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),leaseRecoveries:mo("lease_recoveries").notNull().default(0),hostSuspendRecoveries:mo("host_suspend_recoveries").notNull().default(0),createdAt:Le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Le("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Le("completed_at",{withTimezone:!0})},e=>[It("idx_session_send_jobs_user").on(e.userId),It("idx_session_send_jobs_session").on(e.sessionId),It("idx_session_send_jobs_status").on(e.status),It("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Kn,text as ae,timestamp as wt,jsonb as Cn,uuid as J,integer as di,boolean as ui,uniqueIndex as li,index as Pn,primaryKey as ci}from"drizzle-orm/pg-core";var j=Kn("packs",{id:J("id").primaryKey().defaultRandom(),name:ae("name").notNull(),description:ae("description").notNull(),scope:ae("scope").notNull(),scopeRef:J("scope_ref"),version:ae("version").notNull().default("1.0.0"),tags:ae("tags").array(),badge:ae("badge"),metadata:Cn("metadata"),createdBy:J("created_by"),createdAt:wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:wt("updated_at",{withTimezone:!0}).defaultNow(),archived:ui("archived").default(!1),archivedAt:wt("archived_at",{withTimezone:!0}),archivedBy:J("archived_by"),forkedFromId:J("forked_from_id").references(()=>j.id,{onDelete:"set null"}),upstreamVersion:ae("upstream_version")},e=>[li("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Pn("idx_packs_scope").on(e.scope,e.scopeRef),Pn("idx_packs_created_by").on(e.createdBy)]),Q=Kn("pack_instructions",{packId:J("pack_id").references(()=>j.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:di("position").notNull().default(0),slotOverrides:Cn("slot_overrides"),addedAt:wt("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[ci({columns:[e.packId,e.instructionId]})]);import{pgTable as _i,text as fo,timestamp as pi,jsonb as mi,uuid as No,index as we}from"drizzle-orm/pg-core";var Te=_i("instruction_usage_events",{id:No("id").primaryKey().defaultRandom(),instructionId:No("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:No("user_id").notNull(),surface:fo("surface").notNull(),action:fo("action").notNull(),metadata:mi("metadata"),traceId:fo("trace_id"),createdAt:pi("created_at",{withTimezone:!0}).defaultNow()},e=>[we("idx_usage_events_instruction").on(e.instructionId),we("idx_usage_events_user").on(e.userId),we("idx_usage_events_surface").on(e.surface),we("idx_usage_events_action").on(e.action),we("idx_usage_events_created_at").on(e.createdAt),we("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as fi,text as Tt,timestamp as At,jsonb as Ni,uuid as On,index as xo}from"drizzle-orm/pg-core";var qn=fi("worker_connections",{id:On("id").primaryKey().defaultRandom(),userId:On("user_id").notNull(),workerType:Tt("worker_type").notNull().default("mcp"),clientName:Tt("client_name").notNull(),clientVersion:Tt("client_version"),workerVersion:Tt("worker_version"),lastHeartbeat:At("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),presenceGapStartedAt:At("presence_gap_started_at",{withTimezone:!0}),presenceGapEndedAt:At("presence_gap_ended_at",{withTimezone:!0}),connectedAt:At("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ni("metadata")},e=>[xo("idx_worker_connections_user").on(e.userId),xo("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),xo("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as xi,text as Dt,timestamp as hi,jsonb as gi,uuid as Mn,index as Hn}from"drizzle-orm/pg-core";var Ln=xi("cli_setup_events",{id:Mn("id").primaryKey().defaultRandom(),userId:Mn("user_id").notNull(),deviceId:Dt("device_id").notNull(),event:Dt("event").notNull(),cliVersion:Dt("cli_version"),os:Dt("os"),props:gi("props").notNull().default({}),createdAt:hi("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Hn("idx_cli_setup_events_user").on(e.userId,e.createdAt),Hn("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as vi,text as de,integer as Ii,boolean as yi,timestamp as wi,jsonb as Ti,uuid as Ai,index as Un}from"drizzle-orm/pg-core";var Bn=vi("cli_error_events",{id:Ai("id").primaryKey().defaultRandom(),deviceId:de("device_id"),event:de("event").notNull(),command:de("command"),statusCode:Ii("status_code"),message:de("message"),cliVersion:de("cli_version"),os:de("os"),nodeVersion:de("node_version"),proxied:yi("proxied"),props:Ti("props").notNull().default({}),createdAt:wi("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Un("idx_cli_error_events_created").on(e.createdAt),Un("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as ho}from"drizzle-orm";import{pgTable as ue,text as _,timestamp as g,jsonb as T,uuid as c,integer as O,boolean as Ue,index as f,unique as Gn}from"drizzle-orm/pg-core";var s=ue("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:T("metadata").notNull().default({}),version:O("version").notNull().default(1),parentId:c("parent_id").references(()=>s.id,{onDelete:"set null"}),instructionId:c("instruction_id").references(()=>n.id,{onDelete:"set null"}),projectPath:_("project_path"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("eval_targets_name_user_idx").on(e.name,e.userId),f("idx_eval_targets_user").on(e.userId),f("idx_eval_targets_type").on(e.type),f("idx_eval_targets_parent").on(e.parentId),f("idx_eval_targets_instruction").on(e.instructionId).where(ho`${e.instructionId} IS NOT NULL`),f("idx_eval_targets_project").on(e.projectPath).where(ho`${e.projectPath} IS NOT NULL`)]),q=ue("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:_("name").notNull(),prompt:_("prompt").notNull(),expectedOutput:_("expected_output").notNull().default(""),files:T("files").notNull().default([]),expectations:T("expectations").notNull().default([]),retiredAt:g("retired_at",{withTimezone:!0}),retiredReason:_("retired_reason"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:g("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[f("idx_evals_target").on(e.evalTargetId),f("idx_evals_target_active").on(e.evalTargetId).where(ho`${e.retiredAt} IS NULL`)]),E=ue("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>q.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:O("eval_target_version").notNull(),configuration:_("configuration").notNull(),runNumber:O("run_number").notNull().default(1),iteration:O("iteration").notNull().default(1),status:_("status").notNull().default("completed"),outputs:T("outputs").notNull().default({}),timing:T("timing").notNull().default({}),grading:T("grading").notNull().default({}),comparison:T("comparison"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_runs_eval").on(e.evalId),f("idx_eval_runs_target").on(e.evalTargetId),f("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),Vn=ue("eval_comparisons",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),targetAId:c("target_a_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetBId:c("target_b_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetAVersion:O("target_a_version").notNull(),targetBVersion:O("target_b_version").notNull(),isSwapped:Ue("is_swapped").notNull().default(!1),winnerTargetId:c("winner_target_id").references(()=>s.id,{onDelete:"set null"}),perEval:T("per_eval").notNull().default([]),overall:T("overall").notNull().default({}),rawOutput:_("raw_output"),model:_("model"),status:_("status").notNull().default("completed"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_comparisons_target_a").on(e.targetAId),f("idx_eval_comparisons_target_b").on(e.targetBId),f("idx_eval_comparisons_user").on(e.userId)]),Fn=ue("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),expectationIndex:O("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ue("judge_passed").notNull(),judgeMethod:_("judge_method").notNull(),judgeModel:_("judge_model"),verdict:_("verdict").notNull(),flag:_("flag"),note:_("note"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_grade_annotations_target").on(e.evalTargetId),f("idx_eval_grade_annotations_run").on(e.evalRunId),Gn("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),$n=ue("judge_reviewer_verdicts",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),expectationIndex:O("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ue("judge_passed").notNull(),humanPassed:Ue("human_passed").notNull(),reviewerEngine:_("reviewer_engine").notNull(),reviewerModel:_("reviewer_model").notNull(),reviewerPassed:Ue("reviewer_passed").notNull(),resolvedAt:g("resolved_at",{withTimezone:!0}),resolution:_("resolution"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_jrv_target").on(e.evalTargetId),Gn("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),Ae=ue("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:O("iteration").notNull().default(1),runSummary:T("run_summary").notNull().default({}),notes:T("notes").notNull().default([]),feedback:T("feedback"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as go}from"drizzle-orm";import{pgTable as Di,text as M,timestamp as ji,jsonb as jt,uuid as zt,boolean as zi,index as Be,uniqueIndex as Ri}from"drizzle-orm/pg-core";var Jn=Di("instruction_promotions",{id:zt("id").primaryKey().defaultRandom(),userId:zt("user_id").notNull(),evalTargetId:zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),instructionId:zt("instruction_id").references(()=>n.id,{onDelete:"set null"}),fromContentHash:M("from_content_hash").notNull(),toContentHash:M("to_content_hash").notNull(),fromContent:M("from_content").notNull(),toContent:M("to_content").notNull(),proposalSource:M("proposal_source").notNull(),proposalRationale:M("proposal_rationale").notNull().default(""),decision:M("decision").notNull(),applied:zi("applied").notNull().default(!1),refusals:jt("refusals").notNull().default([]),rationale:M("rationale").notNull().default(""),effectClass:M("effect_class").notNull(),verdict:jt("verdict").notNull().default({}),gates:jt("gates").notNull().default({}),touchedSections:jt("touched_sections").notNull().default([]),createdAt:ji("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Be("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(go`${e.applied}`),Be("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Be("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Be("idx_instruction_promotions_to_hash").on(e.toContentHash),Ri("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(go`${e.applied}`),Be("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(go`${e.applied}`)]);import{index as Ge,integer as ki,jsonb as Ei,pgTable as Si,text as y,timestamp as De,uniqueIndex as bi,uuid as Ve}from"drizzle-orm/pg-core";var Qn=Si("recommendation_applications",{id:Ve("id").primaryKey().defaultRandom(),userId:Ve("user_id").notNull(),instructionId:Ve("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectId:Ve("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:y("project_path").notNull(),harness:y("harness").notNull(),targetPath:y("target_path").notNull(),status:y("status").notNull().default("proposed"),applyMode:y("apply_mode").notNull(),beforeHash:y("before_hash"),appliedHash:y("applied_hash"),appliedAt:De("applied_at",{withTimezone:!0}),measurementStartedAt:De("measurement_started_at",{withTimezone:!0}),measurementEndedAt:De("measurement_ended_at",{withTimezone:!0}),verdict:y("verdict"),verdictDetail:y("verdict_detail"),revertedAt:De("reverted_at",{withTimezone:!0}),boundaryClass:y("boundary_class"),targets:y("targets").array().notNull().default([]),inverse:Ei("inverse"),requires:y("requires").array().notNull().default([]),provides:y("provides").array().notNull().default([]),applyBatchId:Ve("apply_batch_id"),applySeq:ki("apply_seq"),createdAt:De("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:De("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[bi("uq_recommendation_applications_target").on(e.userId,e.instructionId,e.projectPath,e.harness,e.targetPath),Ge("idx_recommendation_applications_user_status").on(e.userId,e.status,e.updatedAt.desc()),Ge("idx_recommendation_applications_user_harness").on(e.userId,e.harness,e.updatedAt.desc()),Ge("idx_recommendation_applications_project").on(e.projectId,e.updatedAt.desc()),Ge("idx_recommendation_applications_batch").on(e.userId,e.applyBatchId,e.applySeq.desc()),Ge("idx_recommendation_applications_requires").using("gin",e.requires)]);import{pgTable as Pi,text as S,timestamp as Yn,jsonb as Fe,uuid as vo,integer as je,real as Ki,index as Y,uniqueIndex as Wn}from"drizzle-orm/pg-core";import{sql as Io}from"drizzle-orm";var W=Pi("context_snapshots",{id:vo("id").primaryKey().defaultRandom(),sessionId:vo("session_id").references(()=>i.id,{onDelete:"cascade"}),userId:vo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:je("sequence").notNull().default(0),provider:S("provider").notNull(),model:S("model").notNull(),systemPrompt:S("system_prompt").notNull(),injectedInstructions:Fe("injected_instructions").notNull().default([]),messagesSummary:Fe("messages_summary").notNull(),tools:Fe("tools").notNull().default([]),systemHash:S("system_hash").notNull(),requestHash:S("request_hash").notNull().default(""),toolsHash:S("tools_hash"),injectedHash:S("injected_hash"),messagesDelta:Fe("messages_delta").default([]),messagesDeltaRef:S("messages_delta_ref"),messagesBaseLength:je("messages_base_length"),payloadPrunedAt:Yn("payload_pruned_at",{withTimezone:!0}),deltaOffloadState:S("delta_offload_state").notNull().default("inline"),deltaGzipBytes:je("delta_gzip_bytes"),deltaOffloadError:S("delta_offload_error"),deltaOffloadAttempts:je("delta_offload_attempts").notNull().default(0),maxTokens:je("max_tokens"),temperature:Ki("temperature"),estimatedTokens:je("estimated_tokens"),capturedAt:Yn("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Fe("metadata").default({})},e=>[Y("idx_context_snapshots_session").on(e.sessionId),Y("idx_context_snapshots_user").on(e.userId),Y("idx_context_snapshots_hash").on(e.systemHash),Y("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),Y("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc()),Y("idx_snapshots_unpruned_captured").on(e.capturedAt,e.id).where(Io`${e.payloadPrunedAt} is null`),Y("idx_snapshots_pending_offload").on(e.deltaOffloadState,e.capturedAt,e.id).where(Io`${e.deltaOffloadState} = 'pending'`),Y("idx_snapshots_delta_ref").on(e.messagesDeltaRef).where(Io`${e.messagesDeltaRef} is not null`)]);import{pgTable as Ci,text as Xn,timestamp as Zn,jsonb as Oi,integer as qi,index as Mi}from"drizzle-orm/pg-core";var er=Ci("content_blobs",{hash:Xn("hash").primaryKey(),contentType:Xn("content_type").notNull(),content:Oi("content").notNull(),sizeBytes:qi("size_bytes").notNull().default(0),createdAt:Zn("created_at",{withTimezone:!0}).defaultNow(),lastReferencedAt:Zn("last_referenced_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Mi("idx_content_blobs_type").on(e.contentType)]);import{integer as tr,jsonb as Hi,pgTable as Li,timestamp as Ui,uuid as Bi}from"drizzle-orm/pg-core";var or=Li("session_capture_heads",{sessionId:Bi("session_id").primaryKey().references(()=>i.id,{onDelete:"cascade"}),sequence:tr("sequence").notNull(),rawMessageHashes:Hi("raw_message_hashes").notNull().$type(),version:tr("version").notNull(),updatedAt:Ui("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{index as Gi,integer as nr,pgTable as Vi,text as yo,timestamp as rr,uniqueIndex as Fi,uuid as $i}from"drizzle-orm/pg-core";import{sql as Ji}from"drizzle-orm";var sr=Vi("snapshot_delta_objects",{ref:yo("ref").primaryKey(),snapshotId:$i("snapshot_id"),compressedBytes:nr("compressed_bytes").notNull(),state:yo("state").notNull(),createdAt:rr("created_at",{withTimezone:!0}).notNull().defaultNow(),lastAttemptAt:rr("last_attempt_at",{withTimezone:!0}),attempts:nr("attempts").notNull().default(0),lastError:yo("last_error")},e=>[Gi("idx_snapshot_delta_objects_state_created").on(e.state,e.createdAt),Fi("snapshot_delta_objects_snapshot_id_unique").on(e.snapshotId).where(Ji`${e.snapshotId} is not null`)]);import{pgTable as Qi,text as Rt,timestamp as $e,jsonb as kt,uuid as wo,index as Et,integer as To}from"drizzle-orm/pg-core";var ze=Qi("eval_jobs",{id:wo("id").primaryKey().defaultRandom(),userId:wo("user_id").notNull(),evalTargetId:wo("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:Rt("status").notNull().default("pending"),config:kt("config").notNull().default({}),progress:kt("progress").notNull().default({}),result:kt("result"),error:Rt("error"),attempts:To("attempts").notNull().default(0),taskKind:Rt("task_kind"),payload:kt("payload"),claimedBy:Rt("claimed_by"),claimedAt:$e("claimed_at",{withTimezone:!0}),leaseExpiresAt:$e("lease_expires_at",{withTimezone:!0}),leaseRecoveries:To("lease_recoveries").notNull().default(0),hostSuspendRecoveries:To("host_suspend_recoveries").notNull().default(0),createdAt:$e("created_at",{withTimezone:!0}).defaultNow(),updatedAt:$e("updated_at",{withTimezone:!0}).defaultNow(),completedAt:$e("completed_at",{withTimezone:!0})},e=>[Et("idx_eval_jobs_user").on(e.userId),Et("idx_eval_jobs_target").on(e.evalTargetId),Et("idx_eval_jobs_status").on(e.status),Et("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as Yi,text as Je,timestamp as Qe,jsonb as ir,uuid as ar,integer as Ao,index as dr}from"drizzle-orm/pg-core";var ur=Yi("agent_jobs",{id:ar("id").primaryKey().defaultRandom(),userId:ar("user_id").notNull(),taskKind:Je("task_kind").notNull(),status:Je("status").notNull().default("pending"),payload:ir("payload").notNull(),dedupeKey:Je("dedupe_key"),result:ir("result"),error:Je("error"),attempts:Ao("attempts").notNull().default(0),claimedBy:Je("claimed_by"),claimedAt:Qe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Qe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Ao("lease_recoveries").notNull().default(0),hostSuspendRecoveries:Ao("host_suspend_recoveries").notNull().default(0),createdAt:Qe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Qe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Qe("completed_at",{withTimezone:!0})},e=>[dr("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),dr("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as Wi,text as Ye,timestamp as We,jsonb as St,uuid as Do,index as bt,integer as jo}from"drizzle-orm/pg-core";var lr=Wi("insights_jobs",{id:Do("id").primaryKey().defaultRandom(),userId:Do("user_id").notNull(),status:Ye("status").notNull().default("pending"),projectPath:Ye("project_path"),projectId:Do("project_id").references(()=>r.id,{onDelete:"set null"}),config:St("config").notNull().default({}),progress:St("progress").notNull().default({}),result:St("result"),error:Ye("error"),attempts:jo("attempts").notNull().default(0),taskKind:Ye("task_kind"),payload:St("payload"),claimedBy:Ye("claimed_by"),claimedAt:We("claimed_at",{withTimezone:!0}),leaseExpiresAt:We("lease_expires_at",{withTimezone:!0}),leaseRecoveries:jo("lease_recoveries").notNull().default(0),hostSuspendRecoveries:jo("host_suspend_recoveries").notNull().default(0),createdAt:We("created_at",{withTimezone:!0}).defaultNow(),updatedAt:We("updated_at",{withTimezone:!0}).defaultNow(),completedAt:We("completed_at",{withTimezone:!0})},e=>[bt("idx_insights_jobs_user").on(e.userId),bt("idx_insights_jobs_status").on(e.status),bt("idx_insights_jobs_pending").on(e.userId,e.status),bt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Xi,text as zo,timestamp as Pt,uuid as cr,index as Zi,uniqueIndex as ea}from"drizzle-orm/pg-core";var Re=Xi("api_keys",{id:cr("id").primaryKey().defaultRandom(),userId:cr("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:zo("name").notNull(),keyHash:zo("key_hash").notNull(),keyPrefix:zo("key_prefix").notNull(),lastUsedAt:Pt("last_used_at",{withTimezone:!0}),expiresAt:Pt("expires_at",{withTimezone:!0}),revokedAt:Pt("revoked_at",{withTimezone:!0}),createdAt:Pt("created_at",{withTimezone:!0}).defaultNow()},e=>[Zi("idx_api_keys_user").on(e.userId),ea("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as ta,text as Ro,timestamp as _r,uuid as oa,index as na}from"drizzle-orm/pg-core";var pr=ta("extension_auth_codes",{code:Ro("code").primaryKey(),userId:oa("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:Ro("editor"),email:Ro("email"),expiresAt:_r("expires_at",{withTimezone:!0}).notNull(),createdAt:_r("created_at",{withTimezone:!0}).defaultNow()},e=>[na("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as ra,text as sa,timestamp as mr,jsonb as ia,uuid as ko,index as fr}from"drizzle-orm/pg-core";var ke=ra("eval_conversations",{id:ko("id").primaryKey().defaultRandom(),evalTargetId:ko("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:ko("user_id").notNull(),messages:ia("messages").notNull().default([]),status:sa("status").notNull().default("active"),createdAt:mr("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mr("updated_at",{withTimezone:!0}).defaultNow()},e=>[fr("idx_eval_conversations_target").on(e.evalTargetId),fr("idx_eval_conversations_user").on(e.userId)]);import{pgTable as aa,text as H,timestamp as Nr,jsonb as da,uuid as Eo}from"drizzle-orm/pg-core";var xr=aa("skill_submissions",{id:Eo("id").primaryKey().defaultRandom(),skillId:H("skill_id").notNull(),name:H("name").notNull(),description:H("description").notNull(),category:H("category").notNull(),tools:H("tools").array().notNull(),tags:H("tags").array().default([]),content:H("content").notNull(),status:H("status").notNull().default("pending"),submittedBy:Eo("submitted_by").notNull(),reviewedBy:Eo("reviewed_by"),reviewNote:H("review_note"),metadata:da("metadata"),createdAt:Nr("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Nr("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as ua,text as Xe,timestamp as hr,jsonb as la,uuid as ca,uniqueIndex as _a,index as gr}from"drizzle-orm/pg-core";var vr=ua("harness_releases",{id:ca("id").primaryKey().defaultRandom(),harness:Xe("harness").notNull(),version:Xe("version").notNull(),publishedAt:hr("published_at",{withTimezone:!0}).notNull(),title:Xe("title"),body:Xe("body"),categories:la("categories").default({}),url:Xe("url"),createdAt:hr("created_at",{withTimezone:!0}).defaultNow()},e=>[_a("idx_harness_releases_unique").on(e.harness,e.version),gr("idx_harness_releases_harness").on(e.harness),gr("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as pa,text as Ee,timestamp as Ir,jsonb as ma,uuid as yr,index as wr,uniqueIndex as fa}from"drizzle-orm/pg-core";var So=pa("notifications",{id:yr("id").primaryKey().defaultRandom(),userId:yr("user_id").notNull(),type:Ee("type").notNull(),title:Ee("title").notNull(),body:Ee("body"),url:Ee("url"),sourceTable:Ee("source_table"),sourceId:Ee("source_id"),metadata:ma("metadata").notNull().default({}),readAt:Ir("read_at",{withTimezone:!0}),createdAt:Ir("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[wr("idx_notifications_user_created").on(e.userId,e.createdAt),wr("idx_notifications_user_unread").on(e.userId),fa("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Na,text as Ze,timestamp as et,jsonb as bo,uuid as Po,index as Kt,integer as Ko}from"drizzle-orm/pg-core";var Se=Na("launch_jobs",{id:Po("id").primaryKey().defaultRandom(),userId:Po("user_id").notNull(),tool:Ze("tool").notNull(),status:Ze("status").notNull().default("pending"),config:bo("config").notNull().default({}),result:bo("result"),error:Ze("error"),attempts:Ko("attempts").notNull().default(0),taskKind:Ze("task_kind"),payload:bo("payload"),claimedBy:Ze("claimed_by"),claimedAt:et("claimed_at",{withTimezone:!0}),leaseExpiresAt:et("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Ko("lease_recoveries").notNull().default(0),hostSuspendRecoveries:Ko("host_suspend_recoveries").notNull().default(0),createdAt:et("created_at",{withTimezone:!0}).defaultNow(),updatedAt:et("updated_at",{withTimezone:!0}).defaultNow(),completedAt:et("completed_at",{withTimezone:!0}),runId:Po("run_id").references(()=>h.id,{onDelete:"set null"})},e=>[Kt("idx_launch_jobs_user").on(e.userId),Kt("idx_launch_jobs_status").on(e.status),Kt("idx_launch_jobs_pending").on(e.userId,e.status),Kt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as Tr,uuid as L,text as X,real as xa,timestamp as tt,boolean as ha,uniqueIndex as ga,index as ot}from"drizzle-orm/pg-core";var Ar=["add","remove","trim"],Co=Tr("instruction_suggestions",{id:L("id").primaryKey().defaultRandom(),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:L("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:X("project_path").notNull(),projectId:L("project_id").references(()=>r.id,{onDelete:"set null"}),score:xa("score").notNull(),reason:X("reason").notNull(),kind:X("kind").$type().notNull().default("add"),generatedAt:tt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:ha("is_stale").notNull().default(!1),dismissedAt:tt("dismissed_at",{withTimezone:!0}),acceptedAt:tt("accepted_at",{withTimezone:!0}),declinedAt:tt("declined_at",{withTimezone:!0}),declinedReason:X("declined_reason"),promotedToInstructionId:L("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[ga("idx_instruction_suggestions_user_project_instruction_kind").on(e.userId,e.projectPath,e.instructionId,e.kind),ot("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),ot("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),ot("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Dr=Tr("instruction_suggestion_events",{id:L("id").primaryKey().defaultRandom(),suggestionId:L("suggestion_id").notNull().references(()=>Co.id,{onDelete:"cascade"}),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:X("event_type").notNull(),tool:X("tool"),sessionId:L("session_id"),projectPath:X("project_path").notNull(),actor:X("actor"),createdAt:tt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ot("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),ot("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as va,text as Oo,integer as Ia,numeric as nt,timestamp as qo,index as ya,primaryKey as wa}from"drizzle-orm/pg-core";var jr=va("model_pricing",{provider:Oo("provider").notNull(),modelId:Oo("model_id").notNull(),inputPerM:nt("input_per_m").notNull(),outputPerM:nt("output_per_m").notNull(),cacheReadPerM:nt("cache_read_per_m").notNull(),cacheWrite5mPerM:nt("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:nt("cache_write_1h_per_m").notNull(),contextWindow:Ia("context_window"),effectiveFrom:qo("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:qo("effective_until",{withTimezone:!0}),source:Oo("source").notNull(),verifiedAt:qo("verified_at",{withTimezone:!0})},e=>[wa({columns:[e.provider,e.modelId,e.effectiveFrom]}),ya("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Ta,text as le,numeric as zr,timestamp as Rr,uuid as kr,jsonb as Aa,index as Er}from"drizzle-orm/pg-core";var Sr=Ta("limit_observations",{id:kr("id").primaryKey().defaultRandom(),observedAt:Rr("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:le("provider").notNull(),plan:le("plan").notNull(),limitType:le("limit_type").notNull(),value:zr("value").notNull(),unit:le("unit").notNull(),comparator:le("comparator").notNull().default("="),resetsAt:Rr("resets_at",{withTimezone:!0}),sourceType:le("source_type").notNull(),sourceUrl:le("source_url"),sourceEvidence:Aa("source_evidence"),confidence:zr("confidence").notNull(),userId:kr("user_id")},e=>[Er("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),Er("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Da,text as Ct,timestamp as ja,uuid as za,jsonb as Ra,boolean as ka,uniqueIndex as Ea}from"drizzle-orm/pg-core";var br=Da("provider_docs_snapshots",{id:za("id").primaryKey().defaultRandom(),fetchedAt:ja("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:Ct("provider").notNull(),docUrl:Ct("doc_url").notNull(),contentHash:Ct("content_hash").notNull(),content:Ct("content").notNull(),parseSuccess:ka("parse_success").notNull(),parseErrors:Ra("parse_errors")},e=>[Ea("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Sa,text as Ot,numeric as Pr,timestamp as Kr,uuid as ba,primaryKey as Pa,index as Ka}from"drizzle-orm/pg-core";var Cr=Sa("plan_limits_active",{provider:Ot("provider").notNull(),plan:Ot("plan").notNull(),limitType:Ot("limit_type").notNull(),value:Pr("value").notNull(),unit:Ot("unit").notNull(),effectiveFrom:Kr("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Kr("effective_until",{withTimezone:!0}),confidence:Pr("confidence").notNull(),sourceObservationIds:ba("source_observation_ids").array().notNull()},e=>[Pa({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Ka("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as Ca,text as Mo,timestamp as Oa,uuid as Or,jsonb as qa,index as Ma}from"drizzle-orm/pg-core";var qr=Ca("alert_dispatches",{id:Or("id").primaryKey().defaultRandom(),userId:Or("user_id").notNull(),alertKey:Mo("alert_key").notNull(),severity:Mo("severity").notNull(),lastDispatchedAt:Oa("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:qa("last_state").notNull(),channel:Mo("channel").notNull()},e=>[Ma("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{date as Mr,integer as Ho,pgTable as Hr,primaryKey as Ha,text as La,timestamp as Lo,uuid as Ua}from"drizzle-orm/pg-core";var Lr=Hr("weekly_digest_deliveries",{userId:Ua("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),weekStart:Mr("week_start").notNull(),sentAt:Lo("sent_at",{withTimezone:!0}).notNull().defaultNow(),providerMessageId:La("provider_message_id")},e=>[Ha({columns:[e.userId,e.weekStart]})]),Ur=Hr("weekly_digest_runs",{weekStart:Mr("week_start").primaryKey(),startedAt:Lo("started_at",{withTimezone:!0}).notNull().defaultNow(),finishedAt:Lo("finished_at",{withTimezone:!0}),sent:Ho("sent"),skipped:Ho("skipped"),failed:Ho("failed")});import{pgTable as Ba,text as Uo,timestamp as Br,uuid as Bo,integer as Ga,index as Va,unique as Fa}from"drizzle-orm/pg-core";var Gr=Ba("scaffolding_fingerprints",{id:Bo("id").primaryKey().defaultRandom(),userId:Bo("user_id").notNull(),harness:Uo("harness").notNull(),model:Uo("model").notNull(),toolsHash:Uo("tools_hash").notNull(),firstSeenAt:Br("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:Br("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:Ga("snapshot_count").notNull().default(1),firstSessionId:Bo("first_session_id")},e=>[Fa("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),Va("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as $a,text as Go,timestamp as Ja,jsonb as Qa,uuid as Vr,integer as Ya,unique as Wa}from"drizzle-orm/pg-core";var Fr=$a("scaffolding_segments",{id:Vr("id").primaryKey().defaultRandom(),userId:Vr("user_id").notNull(),harness:Go("harness").notNull(),model:Go("model").notNull(),coreNames:Qa("core_names").notNull(),coreHash:Go("core_hash").notNull(),activeFingerprints:Ya("active_fingerprints").notNull(),computedAt:Ja("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Wa("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{pgTable as Xa,text as Z,timestamp as $r,uuid as Vo,uniqueIndex as Za,index as ed}from"drizzle-orm/pg-core";var Jr=["blog","docs","changelog"],Fo=Xa("vendor_guidance_snapshots",{id:Vo("id").primaryKey().defaultRandom(),fetchedAt:$r("fetched_at",{withTimezone:!0}).notNull().defaultNow(),sourceId:Z("source_id").notNull(),harness:Z("harness").notNull(),vendor:Z("vendor").notNull(),kind:Z("kind").$type().notNull(),url:Z("url").notNull(),title:Z("title").notNull(),contentHash:Z("content_hash").notNull(),text:Z("text").notNull(),previousSnapshotId:Vo("previous_snapshot_id").references(()=>Fo.id,{onDelete:"set null"}),pitchedAt:$r("pitched_at",{withTimezone:!0}),pitchInstructionId:Vo("pitch_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Za("idx_vendor_guidance_dedup").on(e.sourceId,e.contentHash),ed("idx_vendor_guidance_source_fetched").on(e.sourceId,e.fetchedAt)]);import{drizzle as Zr}from"drizzle-orm/postgres-js";import es from"postgres";var qt={};gs(qt,{GUIDANCE_KINDS:()=>Jr,SUGGESTION_KINDS:()=>Ar,agentJobs:()=>ur,agentRuns:()=>h,agentRunsRelations:()=>fd,alertDispatches:()=>qr,announcementDeliveries:()=>on,announcements:()=>tn,apiKeys:()=>Re,apiKeysRelations:()=>od,benchmarks:()=>Ae,benchmarksRelations:()=>jd,cliErrorEvents:()=>Bn,cliSetupEvents:()=>Ln,contentBlobs:()=>er,contextSnapshots:()=>W,contextSnapshotsRelations:()=>kd,evalComparisons:()=>Vn,evalConversations:()=>ke,evalConversationsRelations:()=>Rd,evalGradeAnnotations:()=>Fn,evalJobs:()=>ze,evalJobsRelations:()=>zd,evalRuns:()=>E,evalRunsRelations:()=>Dd,evalTargets:()=>s,evalTargetsRelations:()=>Td,evals:()=>q,evalsRelations:()=>Ad,extensionAuthCodes:()=>pr,harnessReleases:()=>vr,insightRecommendationLog:()=>Dn,insightsJobs:()=>lr,instructionEvents:()=>Ne,instructionEventsRelations:()=>ud,instructionExperimentArms:()=>wn,instructionExperiments:()=>Me,instructionPromotions:()=>Jn,instructionSuggestionEvents:()=>Dr,instructionSuggestions:()=>Co,instructionUsageEvents:()=>Te,instructionUsageEventsRelations:()=>wd,instructionVerdicts:()=>An,instructionVersionIdentities:()=>ln,instructionVersions:()=>fe,instructionVersionsRelations:()=>cd,instructions:()=>n,instructionsRelations:()=>dd,judgeReviewerVerdicts:()=>$n,launchJobs:()=>Se,launchJobsRelations:()=>Nd,limitObservations:()=>Sr,memories:()=>w,memoriesRelations:()=>ld,memoryExperiments:()=>kn,modelPricing:()=>jr,notificationPreferences:()=>nn,notifications:()=>So,orgInvitations:()=>b,orgInvitationsRelations:()=>sd,organizations:()=>l,organizationsRelations:()=>nd,packInstructions:()=>Q,packInstructionsRelations:()=>yd,packs:()=>j,packsRelations:()=>Id,pendingTreatmentExposures:()=>vn,planLimitsActive:()=>Cr,profiles:()=>o,profilesRelations:()=>td,projectCheckouts:()=>pn,projectInstructions:()=>V,projectInstructionsRelations:()=>pd,projects:()=>r,projectsRelations:()=>_d,providerDocsSnapshots:()=>br,recommendationApplications:()=>Qn,scaffoldingFingerprints:()=>Gr,scaffoldingSegments:()=>Fr,sessionCaptureHeads:()=>or,sessionEvents:()=>he,sessionEventsRelations:()=>xd,sessionInstructions:()=>F,sessionInstructionsRelations:()=>hd,sessionSendJobs:()=>bn,sessionTerminalTargets:()=>vt,sessions:()=>i,sessionsRelations:()=>md,skillSubmissions:()=>xr,snapshotDeltaObjects:()=>sr,teams:()=>v,teamsRelations:()=>rd,treatmentAssignments:()=>K,treatmentAssignmentsRelations:()=>gd,treatmentExposures:()=>C,treatmentExposuresRelations:()=>vd,userOrganizations:()=>pe,userOrganizationsRelations:()=>id,userTeams:()=>me,userTeamsRelations:()=>ad,vendorGuidanceSnapshots:()=>Fo,weeklyDigestDeliveries:()=>Lr,weeklyDigestRuns:()=>Ur,workerConnections:()=>qn});import{relations as a}from"drizzle-orm";var td=a(o,({many:e})=>({sessions:e(i),contextSnapshots:e(W),apiKeys:e(Re)})),od=a(Re,({one:e})=>({profile:e(o,{fields:[Re.userId],references:[o.id]})})),nd=a(l,({many:e})=>({teams:e(v),userOrganizations:e(pe),projects:e(r),invitations:e(b)})),rd=a(v,({one:e,many:t})=>({organization:e(l,{fields:[v.orgId],references:[l.id]}),userTeams:t(me),invitations:t(b)})),sd=a(b,({one:e})=>({organization:e(l,{fields:[b.orgId],references:[l.id]}),team:e(v,{fields:[b.teamId],references:[v.id]}),inviter:e(o,{fields:[b.invitedBy],references:[o.id]})})),id=a(pe,({one:e})=>({organization:e(l,{fields:[pe.orgId],references:[l.id]})})),ad=a(me,({one:e})=>({team:e(v,{fields:[me.teamId],references:[v.id]})})),dd=a(n,({one:e,many:t})=>({versions:t(fe),projectInstructions:t(V),events:t(Ne),usageEvents:t(Te),sessionInstructions:t(F),packInstructions:t(Q),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),ud=a(Ne,({one:e})=>({instruction:e(n,{fields:[Ne.instructionId],references:[n.id]})})),ld=a(w,({one:e,many:t})=>({project:e(r,{fields:[w.projectId],references:[r.id]}),parent:e(w,{fields:[w.parentId],references:[w.id]}),versions:t(w)})),cd=a(fe,({one:e})=>({instruction:e(n,{fields:[fe.instructionId],references:[n.id]})})),_d=a(r,({one:e,many:t})=>({organization:e(l,{fields:[r.orgId],references:[l.id]}),projectInstructions:t(V),sessions:t(i)})),pd=a(V,({one:e})=>({project:e(r,{fields:[V.projectId],references:[r.id]}),instruction:e(n,{fields:[V.instructionId],references:[n.id]})})),md=a(i,({one:e,many:t})=>({profile:e(o,{fields:[i.userId],references:[o.id]}),project:e(r,{fields:[i.projectId],references:[r.id]}),run:e(h,{fields:[i.runId],references:[h.id]}),events:t(he),sessionInstructions:t(F),treatmentExposures:t(C),contextSnapshots:t(W)})),fd=a(h,({one:e,many:t})=>({profile:e(o,{fields:[h.userId],references:[o.id]}),organization:e(l,{fields:[h.orgId],references:[l.id]}),project:e(r,{fields:[h.projectId],references:[r.id]}),sessions:t(i),launchJobs:t(Se)})),Nd=a(Se,({one:e})=>({run:e(h,{fields:[Se.runId],references:[h.id]})})),xd=a(he,({one:e})=>({session:e(i,{fields:[he.sessionId],references:[i.id]})})),hd=a(F,({one:e})=>({session:e(i,{fields:[F.sessionId],references:[i.id]}),instruction:e(n,{fields:[F.instructionId],references:[n.id]})})),gd=a(K,({one:e,many:t})=>({owner:e(o,{fields:[K.userId],references:[o.id]}),project:e(r,{fields:[K.projectId],references:[r.id]}),exposures:t(C)})),vd=a(C,({one:e})=>({session:e(i,{fields:[C.sessionId],references:[i.id]}),owner:e(o,{fields:[C.userId],references:[o.id]}),assignment:e(K,{fields:[C.assignmentId],references:[K.id]})})),Id=a(j,({one:e,many:t})=>({packInstructions:t(Q),forkedFrom:e(j,{fields:[j.forkedFromId],references:[j.id]})})),yd=a(Q,({one:e})=>({pack:e(j,{fields:[Q.packId],references:[j.id]}),instruction:e(n,{fields:[Q.instructionId],references:[n.id]})})),wd=a(Te,({one:e})=>({instruction:e(n,{fields:[Te.instructionId],references:[n.id]})})),Td=a(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(q),evalRuns:t(E),benchmarks:t(Ae),evalJobs:t(ze),evalConversations:t(ke)})),Ad=a(q,({one:e,many:t})=>({evalTarget:e(s,{fields:[q.evalTargetId],references:[s.id]}),runs:t(E)})),Dd=a(E,({one:e})=>({eval:e(q,{fields:[E.evalId],references:[q.id]}),evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]})})),jd=a(Ae,({one:e})=>({evalTarget:e(s,{fields:[Ae.evalTargetId],references:[s.id]})})),zd=a(ze,({one:e})=>({evalTarget:e(s,{fields:[ze.evalTargetId],references:[s.id]})})),Rd=a(ke,({one:e})=>({evalTarget:e(s,{fields:[ke.evalTargetId],references:[s.id]})})),kd=a(W,({one:e})=>({session:e(i,{fields:[W.sessionId],references:[i.id]}),profile:e(o,{fields:[W.userId],references:[o.id]})}));var rt=0,Qr=0,st=0,Yr=0;var Ed=0;function $o(){rt++,rt>Qr&&(Qr=rt)}m($o,"trackDbOpStart");function Jo(){rt>0&&rt--}m(Jo,"trackDbOpEnd");function Qo(){st++,st>Yr&&(Yr=st)}m(Qo,"trackHeavyDbOpStart");function Yo(){st>0&&st--}m(Yo,"trackHeavyDbOpEnd");function Wr(){Ed++}m(Wr,"recordQueryDeadline");var Ht,Ut,Wo=!1,Mt;var Xr,Bt,Lt;function ts(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(ts,"getEnv");function os(){if(Wo)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Ht){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,d=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,u=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,p=Number(process.env.PG_IDLE_TIMEOUT)||5,x=Number(process.env.PG_KEEP_ALIVE_S)||60;Ut=es(ts("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:d,idle_timeout:p,keep_alive:x,max_lifetime:300,connection:{application_name:e,...u>0?{statement_timeout:u}:{}}}),Ht=Zr(Ut,{schema:qt})}return Ht}m(os,"getDb");function ns(){if(Wo)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Lt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Bt=es(ts("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}}),Lt=Zr(Bt,{schema:qt})}return Lt}m(ns,"getHeavyDb");async function Sd(){if(Mt)return Mt;Wo=!0;let e=Ut,t=Xr,d=Bt;return Ut=void 0,Ht=void 0,Xr=void 0,Bt=void 0,Lt=void 0,Mt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),d?d.end({timeout:5}):Promise.resolve()]).then(()=>{}),Mt}m(Sd,"closeDb");var bd=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function rs(e){let t=e,d=t?.code??t?.cause?.code??t?.errno;return d!==void 0&&bd.has(d)}m(rs,"isRetryableConnectError");var Pd=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function ss(e){let t=e,d=t?.code??t?.cause?.code??t?.errno;return d!==void 0&&Pd.has(d)}m(ss,"isRetryableResetError");async function is(e,t={}){let d=t.attempts??3,u=t.baseMs??100,p;for(let x=0;x<d;x++)try{return await e()}catch(A){p=A;let U=rs(A)||t.retryResets===!0&&ss(A);if(x===d-1||!U)throw A;await new Promise(ee=>setTimeout(ee,u*2**x))}throw p}m(is,"withDbRetry");var Gt=class extends Error{static{m(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 as(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(as,"queryDeadlineMs");function ds(){let e=Number(process.env.PG_HEAVY_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:6e4}m(ds,"heavyQueryDeadlineMs");function Kd(e,t,d=!0){let u,p=new Promise((x,A)=>{u=setTimeout(()=>{d&&Wr(),A(new Gt(t))},t);let U=u;typeof U.unref=="function"&&U.unref()});return Promise.race([e,p]).finally(()=>clearTimeout(u))}m(Kd,"raceWithDeadline");var us=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),ls=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function Xo(e,t=!1,d=0,u=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(p,x,A){if(x==="then"){let ee=Reflect.get(p,x,A);return typeof ee!="function"?ee:(ps,ms)=>{let fs=u?Qo:$o,Ns=u?Yo:Jo;fs();let Zo=is(()=>new Promise((xs,hs)=>ee.call(p,xs,hs)),{retryResets:t});return(d>0?Kd(Zo,d,!u):Zo).finally(Ns).then(ps,ms)}}let U=Reflect.get(p,x,A);return typeof U=="function"?(...ee)=>Xo(U.apply(p,ee),t,d,u):U}})}m(Xo,"wrapBuilder");function cs(e,t=!1){let d=t?Qo:$o,u=t?Yo:Jo;d();try{return Promise.resolve(e()).finally(u)}catch(p){throw u(),p}}m(cs,"gaugeTransaction");var _s=new Proxy({},{get(e,t){let d=os(),u=d[t];if(typeof t=="string"&&us.has(t)&&typeof u=="function"){let p=ls.has(t),x=as();return(...A)=>Xo(u.apply(d,A),p,x)}return t==="transaction"&&typeof u=="function"?(...p)=>cs(()=>u.apply(d,p)):u}}),Cd=new Proxy({},{get(e,t){let d=ns(),u=d[t];if(typeof t=="string"&&us.has(t)&&typeof u=="function"){let p=ls.has(t);return(...x)=>Xo(u.apply(d,x),p,ds(),!0)}return t==="transaction"&&typeof u=="function"?(...p)=>cs(()=>u.apply(d,p),!0):u}});export{tn as a,os as b,Sd as c};
@@ -0,0 +1 @@
1
+ import{a as G,c as I}from"./chunk-H6FVXVGG.js";import{f as j}from"./chunk-SWSOEYC7.js";import{a as R}from"./chunk-DVU5PHPM.js";import{b as U}from"./chunk-VBXL7XO7.js";import{f as A}from"./chunk-FBSZ6KCM.js";import{b as P,e as C,h as _}from"./chunk-76UKAFNM.js";import{a as x}from"./chunk-ZLLER3HP.js";var J=x(l=>l.summary.pass_rate===1?1:0,"fullPassScore");async function z(l,d={}){let $=d.executeEval??A,M=d.grade??R,q=d.getExperiment??(async o=>{try{return await C(`/api/memory-experiments/${o}`)}catch(e){if(e instanceof P&&e.statusCode===404)return null;throw e}}),B=d.getMemoryBody??(async o=>{try{let e=await C(`/api/memories/${o}`);return t?.memoryVersion!=null&&e.version!==t.memoryVersion?null:e.body}catch(e){if(e instanceof P&&e.statusCode===404)return null;throw e}}),p=d.updateExperiment??(async(o,e)=>{await _(`/api/memory-experiments/${o}`,e)}),t=await q(l.experimentId);if(!t)return{skipped:"not_found"};if(t.status==="completed"||t.status==="failed")return{skipped:"already_terminal",status:t.status};let E=t.memoryBody??await B(t.memoryId);if(E==null)return await p(t.id,{status:"failed",error:"memory no longer exists or its queued version is no longer available"}),{skipped:"memory_gone",status:"failed"};await p(t.id,{status:"running"});let v=t.expectations??[],c=t.model??void 0,i=t.engine??"claude",g=G({engine:i,model:c},{engine:l.graderEngine,model:l.graderModel}),f=x(async o=>{let e=(d.createWorkspace??j)({engine:i,targetType:"prompt",targetContent:o});try{if(e.leakedFiles.length)throw new Error("Contaminated memory trial workspace");return await $({prompt:t.taskPrompt,targetContent:e.systemPrompt,appendTarget:!0,ignoreContextFiles:!0,workDir:e.workDir,model:c,engine:i})}finally{e.cleanup()}},"executeArm"),s=[],u=new Set,b,k,m=[],w=0;try{if(l.measurement){let e=I(l);if(e.engine!==i||e.model!==c)throw new Error("Memory experiment differs from its queued measurement snapshot");g={engine:e.graderEngine,model:e.graderModel}}for(let e=0;e<t.trials;e++){let[r,n]=e%2===0?[await f(E),await f()]:await(async()=>{let y=await f();return[await f(E),y]})();if(r.error||n.error||r.exitCode!==0||n.exitCode!==0||!r.output.trim()||!n.output.trim()){w++,m.push({trial:e+1,reason:(r.error??n.error??"Nonzero exit or empty output").slice(0,500)});continue}if(r.engine!==i||n.engine!==i||!r.model||!n.model||r.model!==n.model||r.provider!==n.provider||r.model&&u.size>0&&!u.has(r.model)||i==="pi"&&c&&r.model!==`pi:${c}`){w++,m.push({trial:e+1,reason:"Harness, provider or model changed within the experiment"});continue}r.model&&u.add(r.model),n.model&&u.add(n.model);let[a,h]=await Promise.all([M({prompt:t.taskPrompt,output:r.output,expectations:v,...g}),M({prompt:t.taskPrompt,output:n.output,expectations:v,...g})]),T=JSON.stringify([a.judge_engine??null,a.judge_model??null]);if([a,h].some(y=>y.summary.pass_rate==null||y.summary.errored||y.summary.total!==v.length)||a.judge_model!==h.judge_model||a.judge_engine!==h.judge_engine||b!==void 0&&b!==T){w++,m.push({trial:e+1,reason:"Grading incomplete or judge changed; not a model failure"});continue}b=T,k={engine:a.judge_engine??null,model:a.judge_model??null},s.push({withScore:J(a),withoutScore:J(h),withLatency:r.durationMs/1e3,withoutLatency:n.durationMs/1e3,withTokens:r.totalTokens,withoutTokens:n.totalTokens,...r.costUsd!==void 0?{withCostUsd:r.costUsd}:{},...n.costUsd!==void 0?{withoutCostUsd:n.costUsd}:{}})}if(s.length===0){let e=`no trials completed (${w}/${t.trials} runs errored \u2014 is the ${i} CLI available?)`;return await p(t.id,{status:"failed",error:e,result:{pairs:s,excluded:m,completedTrials:0,engine:i}}),{status:"failed",requestedTrials:t.trials,completedTrials:0}}let o=U(s.map(e=>({...e,withCost:e.withCostUsd,withoutCost:e.withoutCostUsd})));return await p(t.id,{status:"completed",result:{verdict:o,pairs:s,excluded:m,judge:g,actualJudge:k,methodology:"v2-neutral-appended-memory",completedTrials:s.length,engine:i,model:[...u][0]}}),{status:"completed",requestedTrials:t.trials,completedTrials:s.length,significant:o.significant,delta:o.delta}}catch(o){let e=o instanceof Error?o.message:String(o);return await p(t.id,{status:"failed",error:e.slice(0,500),result:{pairs:s,excluded:m,completedTrials:s.length,engine:i,model:[...u][0]??null,judge:g,actualJudge:k,methodology:"v2-neutral-appended-memory"}}).catch(()=>{}),{status:"failed",requestedTrials:t.trials,completedTrials:s.length}}}x(z,"processMemoryAb");export{z as a};
@@ -1 +1 @@
1
- import{h as $}from"./chunk-FJX7WDPG.js";import{h}from"./chunk-LMCICVE7.js";import{e as b}from"./chunk-ZZHIBOMT.js";import{a as g}from"./chunk-ZLLER3HP.js";import{existsSync as A,statSync as w}from"node:fs";async function R(y,k){let n=g(s=>k?.logger?.info?.(s)??console.log(s),"log"),{projectPath:o}=y,r=`[cron_auto_accept_suggestions] ${o}`;if(!o)return{skipped:"no-project-path"};if(!A(o)||!w(o).isDirectory())return n(`${r}: project directory no longer exists on this machine \u2014 skipping`),{skipped:"project-path-missing"};let e=await $(()=>b(`/api/instruction-suggestions/auto-acceptable?projectPath=${encodeURIComponent(o)}`),{log:n,label:"auto-acceptable",idempotent:!0});if(!e.consent.allowed)return n(`${r}: ${e.consent.reason??"no consent"} (${e.consent.source})`),{skipped:"no-consent",reason:e.consent.reason};for(let s of e.refused)n(`${r}: refused "${s.name}" \u2014 ${s.reason}`);if(e.eligible.length===0)return n(`${r}: nothing to adopt`+(e.budget?` (rules ${e.budget.used}/${e.budget.max}`+(e.budget.skillsUsed!==void 0?`, skills ${e.budget.skillsUsed}`+(e.budget.skillsMax==null?" (uncapped)":`/${e.budget.skillsMax}`):"")+` used in ${e.budget.windowDays}d)`:"")),{skipped:"nothing-eligible",refused:e.refused.length,adopted:0};let i=0,f=0,a=0,l=0,d=0,u=0,c=0,m=[];for(let s of e.eligible)try{let t=await h({suggestionId:s.id,dir:o,projectPath:o,actor:"auto"});if(t.action==="added")i+=1,m.push(t.name),s.type==="skill"&&(f+=1),n(`${r}: adopted ${s.type==="skill"?"skill":"rule"} "${t.name}" (score ${s.score.toFixed(2)})`);else if(t.action==="redundant"){t.partialOverlap?d+=1:l+=1;for(let p of t.messages)n(`${r}: ${p}`)}else if(t.action==="unresolvable-reference"){u+=1;for(let p of t.messages)n(`${r}: ${p}`)}else a+=1,n(`${r}: "${t.name}" was already in CLAUDE.md`)}catch(t){c+=1,n(`${r}: failed to adopt "${s.name}" \u2014 ${t instanceof Error?t.message:String(t)}`)}return n(`${r}: ${i} adopted, ${a} already present, ${l} already covered in other words, ${d} refused for partial overlap, ${u} refused for naming files this project does not have, ${c} failed, ${e.refused.length} refused upstream. Undo any of them with \`rulemetric suggestions undo <instruction-id>\`.`),{adopted:i,skills:f,alreadyPresent:a,redundant:l,partialOverlaps:d,unresolvableReferences:u,failed:c,refused:e.refused.length,names:m}}g(R,"cronAutoAcceptSuggestions");export{R as a};
1
+ import{h as $}from"./chunk-I6ZQOMZS.js";import{h}from"./chunk-2UK4DZFW.js";import{e as b}from"./chunk-76UKAFNM.js";import{a as g}from"./chunk-ZLLER3HP.js";import{existsSync as A,statSync as w}from"node:fs";async function R(y,k){let n=g(s=>k?.logger?.info?.(s)??console.log(s),"log"),{projectPath:o}=y,r=`[cron_auto_accept_suggestions] ${o}`;if(!o)return{skipped:"no-project-path"};if(!A(o)||!w(o).isDirectory())return n(`${r}: project directory no longer exists on this machine \u2014 skipping`),{skipped:"project-path-missing"};let e=await $(()=>b(`/api/instruction-suggestions/auto-acceptable?projectPath=${encodeURIComponent(o)}`),{log:n,label:"auto-acceptable",idempotent:!0});if(!e.consent.allowed)return n(`${r}: ${e.consent.reason??"no consent"} (${e.consent.source})`),{skipped:"no-consent",reason:e.consent.reason};for(let s of e.refused)n(`${r}: refused "${s.name}" \u2014 ${s.reason}`);if(e.eligible.length===0)return n(`${r}: nothing to adopt`+(e.budget?` (rules ${e.budget.used}/${e.budget.max}`+(e.budget.skillsUsed!==void 0?`, skills ${e.budget.skillsUsed}`+(e.budget.skillsMax==null?" (uncapped)":`/${e.budget.skillsMax}`):"")+` used in ${e.budget.windowDays}d)`:"")),{skipped:"nothing-eligible",refused:e.refused.length,adopted:0};let i=0,f=0,a=0,l=0,d=0,u=0,c=0,m=[];for(let s of e.eligible)try{let t=await h({suggestionId:s.id,dir:o,projectPath:o,actor:"auto"});if(t.action==="added")i+=1,m.push(t.name),s.type==="skill"&&(f+=1),n(`${r}: adopted ${s.type==="skill"?"skill":"rule"} "${t.name}" (score ${s.score.toFixed(2)})`);else if(t.action==="redundant"){t.partialOverlap?d+=1:l+=1;for(let p of t.messages)n(`${r}: ${p}`)}else if(t.action==="unresolvable-reference"){u+=1;for(let p of t.messages)n(`${r}: ${p}`)}else a+=1,n(`${r}: "${t.name}" was already in CLAUDE.md`)}catch(t){c+=1,n(`${r}: failed to adopt "${s.name}" \u2014 ${t instanceof Error?t.message:String(t)}`)}return n(`${r}: ${i} adopted, ${a} already present, ${l} already covered in other words, ${d} refused for partial overlap, ${u} refused for naming files this project does not have, ${c} failed, ${e.refused.length} refused upstream. Undo any of them with \`rulemetric suggestions undo <instruction-id>\`.`),{adopted:i,skills:f,alreadyPresent:a,redundant:l,partialOverlaps:d,unresolvableReferences:u,failed:c,refused:e.refused.length,names:m}}g(R,"cronAutoAcceptSuggestions");export{R as a};
@@ -1 +1 @@
1
- import{a as z}from"./chunk-5RBLIVBF.js";import{a as L}from"./chunk-IOX4VJPR.js";import{b as A}from"./chunk-E7RH43OS.js";import{a as j,c as G}from"./chunk-OUK2AWEI.js";import{f as P}from"./chunk-SWSOEYC7.js";import{a as S}from"./chunk-OO2ZRKZY.js";import{a as J,f as T}from"./chunk-UJ7EPLKC.js";import{e as y,f as R,h as f}from"./chunk-ZZHIBOMT.js";import{a as E}from"./chunk-ZLLER3HP.js";async function X(s,v){let{mirrorId:l,evalTargetId:u}=s,o=s.measurement?{...s.config,...G({...s.config,measurement:s.measurement})}:s.config,a=E(e=>v.logger.info(e),"log"),i=await y(`/api/eval-targets/${u}`),b=await y(`/api/eval-targets/${u}/evals`);if(b.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await A({content:i.content,name:i.name,...s.measurement?{measurement:s.measurement}:{}});if(e===null)throw new Error("Case generation requires a local LLM backend (Claude or Codex CLI) \u2014 none available on this worker.");let r=[];for(let t of e)r.push(await R(`/api/eval-targets/${u}/evals`,t));b=r,a(`Generated ${r.length} eval case(s)`)}if(b.length===0)throw new z("No evals defined for target");let F=o.runsPerEval??1,_=o.timeout??12e4,I=o.iteration??1,k=new Set;if(v.job.attempts>1)for(let r=0;;r+=100){let t=await y(`/api/eval-targets/${u}/runs?jobId=${l}&limit=100&offset=${r}`);for(let n of t)k.add(`${n.evalId}|${n.configuration}|${n.runNumber}|${n.iteration}`);if(t.length<100)break}let M=[{name:"with_target",content:i.content}];o.skipBaseline||M.push({name:"without_target"});let d=[];for(let e of b)for(let r of M)for(let t=1;t<=F;t++)k.has(`${e.id}|${r.name}|${t}|${I}`)||d.push({eval_:e,configuration:r.name,targetContent:r.content,runNumber:t});k.size>0&&a(`Resuming attempt ${v.job.attempts}: ${k.size} run(s) already persisted, ${d.length} remaining`);let g=d.length,c=0,$=J(o.engine),p=Math.min(o.parallel??1,4);await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:0,current:null,message:`Starting ${g} eval runs (concurrency: ${p})...`}});let h=[];async function x(e){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${c+1}/${g}] ${r}`);let t=P({targetType:i.type,targetContent:e.targetContent,targetName:i.name,engine:$});t.leakedFiles.length&&a(`\u26A0 CONTAMINATED ${r}: ${t.leakedFiles.join(", ")} survived the strip`);try{let n=await T({prompt:e.eval_.prompt,targetContent:t.systemPrompt,workDir:t.workDir,timeout:_,model:o.model,engine:$}),m={};return!o.skipGrading&&e.eval_.expectations.length>0&&!n.error&&(m=await S({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),prompt:e.eval_.prompt,output:n.output,expectations:e.eval_.expectations,timeout:_})),{jobId:l,evalId:e.eval_.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:e.configuration,runNumber:e.runNumber,iteration:I,status:n.error?"failed":"completed",outputs:{...n.error?{error:n.error}:{transcript:n.output,...n.model?{model:n.model}:{}},methodology:t.methodology,delivery:t.delivery,isolated:t.isWorktree,engine:n.engine??$,model:n.model??null,deliveryRegime:`${i.type}:${$}:${t.methodology}`,...s.measurement?{measurement:s.measurement}:{},...n.provider?{provider:n.provider}:{},...n.costUsd!=null?{costUsd:n.costUsd}:{},...t.leakedFiles.length?{leakedFiles:t.leakedFiles}:{}},timing:{duration_ms:n.durationMs,total_tokens:n.totalTokens},grading:m,worktree:t.isWorktree?!0:void 0}}finally{t.cleanup()}}if(E(x,"processItem"),p<=1)for(let e of d){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Executing ${r}...`}});let t=await x(e);await R("/api/eval-runs",t),h.push(t),c++,await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Completed ${r}`}})}else{a(`Running ${g} evals with concurrency=${p} (worktree isolation)`);for(let e=0;e<d.length;e+=p){let r=d.slice(e,e+p),t=`batch ${Math.floor(e/p)+1}/${Math.ceil(d.length/p)}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Executing ${t} (${r.length} parallel)...`}});let n=await Promise.all(r.map(x));for(let m of n)await R("/api/eval-runs",m),h.push(m),c++;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Completed ${t}`}})}}let N=O(h),w;if(!o.skipGrading&&h.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${l}...`);let e=b.map(r=>{let n=h.filter(m=>m.evalId===r.id&&m.configuration==="with_target")[0];return{evalName:r.name,prompt:r.prompt,expectations:r.expectations,grading:n?.grading?n.grading:null,output:n?.outputs?.transcript?.slice(0,500)}});w=await L({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),targetName:i.name,evalResults:e,timeout:6e4}),a(`Meta-judge: quality=${w.quality_score}/5, issues=${w.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let C=w?{...N,meta_judgement:w}:N;return a(`Job ${l} completed: ${c}/${g} runs`),await f(`/api/eval-jobs/${l}/state`,{result:C}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),C}E(X,"processEval");function O(s){let v=s.filter(a=>a.status==="completed"),l=s.filter(a=>a.status==="failed"),u=v.filter(a=>{let i=a.grading;return i&&Object.keys(i).length>0}),o=u.length>0?u.reduce((a,i)=>a+(i.grading?.summary?.pass_rate??0),0)/u.length:null;return{total:s.length,completed:v.length,failed:l.length,avgPassRate:o}}E(O,"buildSummary");export{X as a};
1
+ import{a as z}from"./chunk-5RBLIVBF.js";import{a as L}from"./chunk-7MTYUTUN.js";import{b as A}from"./chunk-OP4U3XBZ.js";import{a as j,c as G}from"./chunk-H6FVXVGG.js";import{f as P}from"./chunk-SWSOEYC7.js";import{a as S}from"./chunk-DVU5PHPM.js";import{a as J,f as T}from"./chunk-FBSZ6KCM.js";import{e as y,f as R,h as f}from"./chunk-76UKAFNM.js";import{a as E}from"./chunk-ZLLER3HP.js";async function X(s,v){let{mirrorId:l,evalTargetId:u}=s,o=s.measurement?{...s.config,...G({...s.config,measurement:s.measurement})}:s.config,a=E(e=>v.logger.info(e),"log"),i=await y(`/api/eval-targets/${u}`),b=await y(`/api/eval-targets/${u}/evals`);if(b.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await A({content:i.content,name:i.name,...s.measurement?{measurement:s.measurement}:{}});if(e===null)throw new Error("Case generation requires a local LLM backend (Claude or Codex CLI) \u2014 none available on this worker.");let r=[];for(let t of e)r.push(await R(`/api/eval-targets/${u}/evals`,t));b=r,a(`Generated ${r.length} eval case(s)`)}if(b.length===0)throw new z("No evals defined for target");let F=o.runsPerEval??1,_=o.timeout??12e4,I=o.iteration??1,k=new Set;if(v.job.attempts>1)for(let r=0;;r+=100){let t=await y(`/api/eval-targets/${u}/runs?jobId=${l}&limit=100&offset=${r}`);for(let n of t)k.add(`${n.evalId}|${n.configuration}|${n.runNumber}|${n.iteration}`);if(t.length<100)break}let M=[{name:"with_target",content:i.content}];o.skipBaseline||M.push({name:"without_target"});let d=[];for(let e of b)for(let r of M)for(let t=1;t<=F;t++)k.has(`${e.id}|${r.name}|${t}|${I}`)||d.push({eval_:e,configuration:r.name,targetContent:r.content,runNumber:t});k.size>0&&a(`Resuming attempt ${v.job.attempts}: ${k.size} run(s) already persisted, ${d.length} remaining`);let g=d.length,c=0,$=J(o.engine),p=Math.min(o.parallel??1,4);await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:0,current:null,message:`Starting ${g} eval runs (concurrency: ${p})...`}});let h=[];async function x(e){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${c+1}/${g}] ${r}`);let t=P({targetType:i.type,targetContent:e.targetContent,targetName:i.name,engine:$});t.leakedFiles.length&&a(`\u26A0 CONTAMINATED ${r}: ${t.leakedFiles.join(", ")} survived the strip`);try{let n=await T({prompt:e.eval_.prompt,targetContent:t.systemPrompt,workDir:t.workDir,timeout:_,model:o.model,engine:$}),m={};return!o.skipGrading&&e.eval_.expectations.length>0&&!n.error&&(m=await S({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),prompt:e.eval_.prompt,output:n.output,expectations:e.eval_.expectations,timeout:_})),{jobId:l,evalId:e.eval_.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:e.configuration,runNumber:e.runNumber,iteration:I,status:n.error?"failed":"completed",outputs:{...n.error?{error:n.error}:{transcript:n.output,...n.model?{model:n.model}:{}},methodology:t.methodology,delivery:t.delivery,isolated:t.isWorktree,engine:n.engine??$,model:n.model??null,deliveryRegime:`${i.type}:${$}:${t.methodology}`,...s.measurement?{measurement:s.measurement}:{},...n.provider?{provider:n.provider}:{},...n.costUsd!=null?{costUsd:n.costUsd}:{},...t.leakedFiles.length?{leakedFiles:t.leakedFiles}:{}},timing:{duration_ms:n.durationMs,total_tokens:n.totalTokens},grading:m,worktree:t.isWorktree?!0:void 0}}finally{t.cleanup()}}if(E(x,"processItem"),p<=1)for(let e of d){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Executing ${r}...`}});let t=await x(e);await R("/api/eval-runs",t),h.push(t),c++,await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Completed ${r}`}})}else{a(`Running ${g} evals with concurrency=${p} (worktree isolation)`);for(let e=0;e<d.length;e+=p){let r=d.slice(e,e+p),t=`batch ${Math.floor(e/p)+1}/${Math.ceil(d.length/p)}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Executing ${t} (${r.length} parallel)...`}});let n=await Promise.all(r.map(x));for(let m of n)await R("/api/eval-runs",m),h.push(m),c++;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Completed ${t}`}})}}let N=O(h),w;if(!o.skipGrading&&h.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${l}...`);let e=b.map(r=>{let n=h.filter(m=>m.evalId===r.id&&m.configuration==="with_target")[0];return{evalName:r.name,prompt:r.prompt,expectations:r.expectations,grading:n?.grading?n.grading:null,output:n?.outputs?.transcript?.slice(0,500)}});w=await L({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),targetName:i.name,evalResults:e,timeout:6e4}),a(`Meta-judge: quality=${w.quality_score}/5, issues=${w.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let C=w?{...N,meta_judgement:w}:N;return a(`Job ${l} completed: ${c}/${g} runs`),await f(`/api/eval-jobs/${l}/state`,{result:C}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),C}E(X,"processEval");function O(s){let v=s.filter(a=>a.status==="completed"),l=s.filter(a=>a.status==="failed"),u=v.filter(a=>{let i=a.grading;return i&&Object.keys(i).length>0}),o=u.length>0?u.reduce((a,i)=>a+(i.grading?.summary?.pass_rate??0),0)/u.length:null;return{total:s.length,completed:v.length,failed:l.length,avgPassRate:o}}E(O,"buildSummary");export{X as a};
@@ -1 +1 @@
1
- import{c as u}from"./chunk-E5YE25QG.js";import{b as c,e as y,f as m}from"./chunk-ZZHIBOMT.js";import{a as n,b as t,i as s,k as p}from"./chunk-PZNWH4VQ.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
1
+ import{c as u}from"./chunk-FKTT7A4H.js";import{b as c,e as y,f as m}from"./chunk-76UKAFNM.js";import{a as n,b as t,i as s,k as p}from"./chunk-PZNWH4VQ.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
@@ -1,2 +1,2 @@
1
- import{c as f}from"./chunk-DDYGA2DS.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-ZZHIBOMT.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
1
+ import{c as f}from"./chunk-ISFPPDDB.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-76UKAFNM.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
2
2
  `)),j=i.getRunDetail??(async e=>{try{return await k(`/api/runs/${e}`)}catch(r){if(r instanceof g&&r.statusCode===404)return null;throw r}}),{runId:o}=w,n=await j(o);if(!n)throw new l(`Run ${o} not found`);if(!n.run.projectPath)throw new l(`Run ${o} has no projectPath; cannot resolve a repo root for worktree cleanup`);let a=n.run.projectPath,$=n.sessions.filter(e=>e.endedAt!=null),s=[],u=0,c=0,p=0,d=0,h=new Set;for(let e of $)if(!(!e.projectPath||e.projectPath===a)&&!h.has(e.projectPath)){h.add(e.projectPath);try{let r=await R({repoRoot:a,worktreePath:e.projectPath});r.removed?(u++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),t(`removed worktree ${e.projectPath} (session ${e.id})`)):r.reason==="dirty"?(c++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),t(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(p++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),t(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(r){let P=r instanceof Error?r.message:String(r);d++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:P.slice(0,1e3)}),t(`error removing worktree ${e.projectPath} (session ${e.id}): ${P}`)}}return t(`run ${o} cleanup: removed=${u} skippedDirty=${c} absent=${p} errored=${d}`),{runId:o,repoRoot:a,removed:u,skippedDirty:c,absent:p,errored:d,worktrees:s}}m(C,"processRunCleanup");export{C as a};
@@ -1,4 +1,4 @@
1
- import{a as g,c as w}from"./chunk-UPFH72PF.js";import{g as p,h as m,i as k,j as h,k as y}from"./chunk-TWPG3TEQ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as u,readFileSync as f,writeFileSync as v,copyFileSync as R,rmSync as P,statSync as x,readdirSync as $,mkdirSync as j}from"node:fs";import{join as i,dirname as L}from"node:path";import{homedir as c}from"node:os";var I=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function _(e){return I.some(t=>e.includes(t))}s(_,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}s(K,"backupPathFor");function b(e){return e.split(`
1
+ import{a as g,c as w}from"./chunk-UPFH72PF.js";import{g as p,h as m,i as k,j as h,k as y}from"./chunk-42A4PUW7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as u,readFileSync as f,writeFileSync as v,copyFileSync as R,rmSync as P,statSync as x,readdirSync as $,mkdirSync as j}from"node:fs";import{join as i,dirname as L}from"node:path";import{homedir as c}from"node:os";var I=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function _(e){return I.some(t=>e.includes(t))}s(_,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}s(K,"backupPathFor");function b(e){return e.split(`
2
2
  `).slice(0,40).map(t=>`- ${t}`).join(`
3
3
  `)}s(b,"shortDiff");function d(e,t,n){return{kind:e,path:t,ok:!1,refusal:n,preview:"",warnings:[]}}s(d,"refuse");function B(e){let[t,...n]=e.split("::"),r=n.join("::");if(!r)return null;switch(t){case"claude_md":return{kind:"claude_md_section",target:r};case"memory":return{kind:"memory_section",target:r};case"skill":return{kind:"skill_file",target:r};default:return null}}s(B,"pathFromContextIdentity");function D(e,t){let n=e.replace(/^skills--/,""),r=w(e);return[...(r===n?[n]:[r,n]).flatMap(a=>[i(t,...g.split("/"),a,"SKILL.md"),i(t,".claude","skills",a,"SKILL.md"),i(t,".claude","skills",`${a}.md`),i(c(),...g.split("/"),a,"SKILL.md"),i(c(),".claude","skills",a,"SKILL.md"),i(c(),".claude","skills",`${a}.md`)]),...F(n)]}s(D,"candidateSkillPaths");function F(e){let t=i(c(),".claude","plugins","marketplaces");if(!u(t))return[];let n=[];try{for(let r of $(t))n.push(i(t,r,"skills",e,"SKILL.md"),i(t,r,"plugins",e,"SKILL.md"),i(t,r,"skills",`${e}.md`))}catch{}return n}s(F,"pluginSkillPaths");function H(e){switch(e.kind){case"claude_md_section":case"memory_section":case"claude_md_block":return C(e);case"skill_file":return E(e);case"settings_hook":case"mcp_server":return N(e)}}s(H,"planRetraction");function C(e){let t=e.target;if(!u(t))return d(e.kind,t,`File does not exist: ${t}`);if(_(t))return d(e.kind,t,`Refusing to edit a path this tool does not own: ${t}`);let n=f(t,"utf-8"),r=e.body?m(n,e.body):p(n,e.heading??"");if(!r.removed){let l={"not-found":"The content is not present in this file (already removed, or edited since).",ambiguous:"The content appears more than once \u2014 refusing to guess which copy the verdict was about.","would-empty-file":"Removing it would empty the file. Delete the file by hand if that is really the intent."}[r.reason??"not-found"];return d(e.kind,t,l)}let o=[];return S(t,e.cwd)||o.push("This file is not tracked by git in this repo \u2014 the timestamped backup is your only undo."),{kind:e.kind,path:t,ok:!0,preview:b(r.removedText??""),nextContent:r.content,warnings:o}}s(C,"planFileEdit");function E(e){let t=e.target.startsWith("/")?[e.target]:D(e.target,e.cwd),n=t.find(l=>u(l));if(!n)return d("skill_file",t[0]??e.target,`No local skill file found for "${e.target}". Searched:
4
4
  ${t.join(`