@rulemetric/cli 0.14.0 → 0.14.2

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 (251) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/{chunk-S5U76YUI.js → chunk-3NWJ7CZ2.js} +1 -1
  3. package/dist/{chunk-OLJF4K7L.js → chunk-5PMTNNA6.js} +1 -1
  4. package/dist/{chunk-ZA6NXNPR.js → chunk-5TM7AOH2.js} +1 -1
  5. package/dist/chunk-5VNEHPGC.js +1 -0
  6. package/dist/{chunk-JKWB6UXA.js → chunk-6AAAHV2B.js} +1 -1
  7. package/dist/{chunk-J7UZXRTH.js → chunk-6T6YFPBW.js} +1 -1
  8. package/dist/{chunk-VLWNSTYW.js → chunk-6TGFU6RU.js} +1 -1
  9. package/dist/chunk-77FH6UZP.js +111 -0
  10. package/dist/{chunk-GN46S7T4.js → chunk-7BCZDVIU.js} +1 -1
  11. package/dist/{chunk-IOX4VJPR.js → chunk-7MTYUTUN.js} +1 -1
  12. package/dist/{chunk-S5CQSP35.js → chunk-BDQTVYYF.js} +1 -1
  13. package/dist/chunk-CQD2R3BA.js +3 -0
  14. package/dist/{chunk-FJX7WDPG.js → chunk-CVPAKEEZ.js} +1 -1
  15. package/dist/{chunk-EXVXKJ7Y.js → chunk-CYCH2EQC.js} +1 -1
  16. package/dist/{chunk-JLBQKV4V.js → chunk-CZBO3A6B.js} +1 -1
  17. package/dist/{chunk-N7SZWKCU.js → chunk-DANMUHNW.js} +1 -1
  18. package/dist/chunk-DQYYHX6K.js +1 -0
  19. package/dist/{chunk-OO2ZRKZY.js → chunk-DVU5PHPM.js} +1 -1
  20. package/dist/{chunk-HAYO6JYI.js → chunk-DX6IPDED.js} +1 -1
  21. package/dist/{chunk-E7RH43OS.js → chunk-DXNUCWUX.js} +1 -1
  22. package/dist/{chunk-2WQUOC6S.js → chunk-EBWV4SUS.js} +1 -1
  23. package/dist/{chunk-JRAXWASH.js → chunk-F5PJN2EY.js} +1 -1
  24. package/dist/chunk-FBSZ6KCM.js +1 -0
  25. package/dist/{chunk-JRWQJZYQ.js → chunk-FS3TAQAE.js} +1 -1
  26. package/dist/{chunk-O62OLKQL.js → chunk-FXQS7AEZ.js} +1 -1
  27. package/dist/chunk-FZMO7XSN.js +4 -0
  28. package/dist/{chunk-H4LUPIHJ.js → chunk-GDLQNY4V.js} +1 -1
  29. package/dist/{chunk-ZZHIBOMT.js → chunk-GIXHG5FK.js} +1 -1
  30. package/dist/{chunk-NSPDDSRR.js → chunk-GLBWNB2N.js} +1 -1
  31. package/dist/chunk-GPBN4ROE.js +2 -0
  32. package/dist/{chunk-AT2MMCOJ.js → chunk-H2FMAJUJ.js} +1 -1
  33. package/dist/chunk-H33XYL7O.js +1 -0
  34. package/dist/{chunk-EWGE7YTQ.js → chunk-H4QPAEEA.js} +1 -1
  35. package/dist/{chunk-YP2CBUXH.js → chunk-HM63AB2C.js} +1 -1
  36. package/dist/{chunk-DDYGA2DS.js → chunk-ISFPPDDB.js} +1 -1
  37. package/dist/{chunk-BVOXWAJO.js → chunk-ISYU5BMU.js} +1 -1
  38. package/dist/{chunk-XAOLOR4Q.js → chunk-J6RQ5AH2.js} +1 -1
  39. package/dist/chunk-JP6ULOEX.js +2 -0
  40. package/dist/{chunk-ET7753IY.js → chunk-KE5K3F7J.js} +1 -1
  41. package/dist/{chunk-YUIRDBQQ.js → chunk-KEVDLLHT.js} +1 -1
  42. package/dist/{chunk-GQGGFHX7.js → chunk-KOYHJFB3.js} +1 -1
  43. package/dist/{chunk-OMRH4JXS.js → chunk-L562Y4RN.js} +1 -1
  44. package/dist/chunk-MOJY6S5J.js +1 -0
  45. package/dist/chunk-MYGVN6X4.js +1 -0
  46. package/dist/{chunk-MX34N7Y5.js → chunk-NWV66NMA.js} +1 -1
  47. package/dist/{chunk-SV73ASP2.js → chunk-O4K4M5G6.js} +1 -1
  48. package/dist/{chunk-YNLHJHUP.js → chunk-PIVEJTNF.js} +1 -1
  49. package/dist/{chunk-N26UEHI3.js → chunk-PJ4RIUI3.js} +1 -1
  50. package/dist/{chunk-PPIZMPNI.js → chunk-PXYK4MBX.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-XFLKW6SJ.js → chunk-QENSCK77.js} +1 -1
  54. package/dist/{chunk-TTSDPDRH.js → chunk-QNSIBPWG.js} +1 -1
  55. package/dist/{chunk-U7BPWFOP.js → chunk-QPAOX7P2.js} +1 -1
  56. package/dist/{chunk-V4PUYPTU.js → chunk-QPVUGTDP.js} +1 -1
  57. package/dist/{chunk-LMCICVE7.js → chunk-RE7RAZQ5.js} +1 -1
  58. package/dist/{chunk-HFSISGCJ.js → chunk-RR7V5CK5.js} +1 -1
  59. package/dist/{chunk-RRM4HQG4.js → chunk-RSVNQ2XI.js} +1 -1
  60. package/dist/{chunk-FK55FXKQ.js → chunk-RYCVPQYK.js} +1 -1
  61. package/dist/{chunk-XAXEZI6Z.js → chunk-SFZPFNC6.js} +1 -1
  62. package/dist/chunk-T47SFA5X.js +1 -0
  63. package/dist/{chunk-AXJAGWZB.js → chunk-UVCVJKEN.js} +1 -1
  64. package/dist/{chunk-5XEGRU2R.js → chunk-VCUW2NAP.js} +1 -1
  65. package/dist/chunk-VXNICAVG.js +1 -0
  66. package/dist/{chunk-UQDOOQCM.js → chunk-WIKCYUZC.js} +1 -1
  67. package/dist/{chunk-E5YE25QG.js → chunk-WL5ZWQAS.js} +1 -1
  68. package/dist/{chunk-N4RJ6CN7.js → chunk-WUCACPGC.js} +1 -1
  69. package/dist/{chunk-TWPG3TEQ.js → chunk-X6CF5KTW.js} +5 -5
  70. package/dist/{chunk-LDUJWJ6A.js → chunk-XIOYV5A7.js} +1 -1
  71. package/dist/chunk-XQYAVSUQ.js +1 -0
  72. package/dist/{chunk-NRYVMGJN.js → chunk-XXPWPKTD.js} +1 -1
  73. package/dist/chunk-XZW5ZHFC.js +15 -0
  74. package/dist/{chunk-7ML2UCI7.js → chunk-ZK3ACE4T.js} +1 -1
  75. package/dist/{chunk-IC6VZHE6.js → chunk-ZTQUGAZG.js} +1 -1
  76. package/dist/commands/antigravity/backfill.js +1 -1
  77. package/dist/commands/auth/create-key.js +1 -1
  78. package/dist/commands/auth/login.js +1 -1
  79. package/dist/commands/auth/logout.js +1 -1
  80. package/dist/commands/auth/revoke-key.js +1 -1
  81. package/dist/commands/auth/signup.js +1 -1
  82. package/dist/commands/auth/status.js +1 -1
  83. package/dist/commands/capture/scope.js +1 -1
  84. package/dist/commands/catalog/index.js +1 -1
  85. package/dist/commands/catalog/recommend.js +1 -1
  86. package/dist/commands/crons/list.js +1 -1
  87. package/dist/commands/crons/run.js +1 -1
  88. package/dist/commands/dashboard.js +1 -1
  89. package/dist/commands/diagnostics.js +1 -1
  90. package/dist/commands/eval-targets/create.js +1 -1
  91. package/dist/commands/eval-targets/list.js +1 -1
  92. package/dist/commands/evals/agent.js +1 -1
  93. package/dist/commands/evals/auto-run.js +1 -1
  94. package/dist/commands/evals/benchmark.js +1 -1
  95. package/dist/commands/evals/compare.js +1 -1
  96. package/dist/commands/evals/create.js +1 -1
  97. package/dist/commands/evals/optimize-description.js +1 -1
  98. package/dist/commands/evals/optimize.js +1 -1
  99. package/dist/commands/evals/refine-cases.js +1 -1
  100. package/dist/commands/evals/run.js +1 -1
  101. package/dist/commands/evals/validate-judge.js +1 -1
  102. package/dist/commands/experiments/list.js +1 -1
  103. package/dist/commands/gateway/ensure.js +1 -1
  104. package/dist/commands/hooks/install.js +1 -1
  105. package/dist/commands/hooks/run.js +1 -1
  106. package/dist/commands/hooks/uninstall.js +1 -1
  107. package/dist/commands/instructions/create.js +1 -1
  108. package/dist/commands/instructions/dedupe.js +1 -1
  109. package/dist/commands/instructions/delete.js +1 -1
  110. package/dist/commands/instructions/fork.js +1 -1
  111. package/dist/commands/instructions/get.js +1 -1
  112. package/dist/commands/instructions/list.js +1 -1
  113. package/dist/commands/instructions/promote.js +1 -1
  114. package/dist/commands/instructions/pull.js +1 -1
  115. package/dist/commands/instructions/restore.js +1 -1
  116. package/dist/commands/instructions/retract.js +1 -1
  117. package/dist/commands/instructions/upstream.js +1 -1
  118. package/dist/commands/instructions/versions.js +1 -1
  119. package/dist/commands/launcher.js +1 -1
  120. package/dist/commands/local/down.js +1 -1
  121. package/dist/commands/local/up.js +1 -1
  122. package/dist/commands/org/current.js +1 -1
  123. package/dist/commands/org/list.js +1 -1
  124. package/dist/commands/org/switch.js +1 -1
  125. package/dist/commands/packs/add-instruction.js +1 -1
  126. package/dist/commands/packs/apply.js +1 -1
  127. package/dist/commands/packs/create.js +1 -1
  128. package/dist/commands/packs/fork.js +1 -1
  129. package/dist/commands/packs/get.js +1 -1
  130. package/dist/commands/packs/list.js +1 -1
  131. package/dist/commands/packs/remove-instruction.js +1 -1
  132. package/dist/commands/proxy/env.js +1 -1
  133. package/dist/commands/proxy/logs.js +1 -1
  134. package/dist/commands/proxy/restart.js +1 -1
  135. package/dist/commands/proxy/setup.js +1 -1
  136. package/dist/commands/proxy/start.js +1 -1
  137. package/dist/commands/proxy/status.js +1 -1
  138. package/dist/commands/proxy/stop.js +1 -1
  139. package/dist/commands/research/backfill.js +1 -1
  140. package/dist/commands/research/tail-transcript.js +1 -1
  141. package/dist/commands/service/install.js +1 -1
  142. package/dist/commands/service/status.js +1 -1
  143. package/dist/commands/service/uninstall.js +1 -1
  144. package/dist/commands/sessions/analyze.js +1 -1
  145. package/dist/commands/sessions/delete.js +1 -1
  146. package/dist/commands/sessions/end.js +1 -1
  147. package/dist/commands/sessions/import.js +1 -1
  148. package/dist/commands/sessions/list.js +1 -1
  149. package/dist/commands/sessions/start.js +1 -1
  150. package/dist/commands/setup.js +1 -1
  151. package/dist/commands/skills/export-approved.js +1 -1
  152. package/dist/commands/skills/install.js +1 -1
  153. package/dist/commands/skills/list.js +1 -1
  154. package/dist/commands/skills/publish.js +1 -1
  155. package/dist/commands/skills/search.js +1 -1
  156. package/dist/commands/skills/update.js +1 -1
  157. package/dist/commands/suggestions/accept.js +1 -1
  158. package/dist/commands/suggestions/auto.js +1 -1
  159. package/dist/commands/suggestions/dismiss.js +1 -1
  160. package/dist/commands/suggestions/list.js +1 -1
  161. package/dist/commands/suggestions/refresh.js +1 -1
  162. package/dist/commands/suggestions/undo.js +1 -1
  163. package/dist/dashboard/Dashboard.js +1 -1
  164. package/dist/dashboard/data.js +1 -1
  165. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  166. package/dist/dashboard/launcher/api.js +1 -1
  167. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  168. package/dist/dashboard/panels/measurement.js +1 -0
  169. package/dist/{dist-NHS7HY5Q.js → dist-GSHUC7UU.js} +1 -1
  170. package/dist/lib/active-org-refresh.js +1 -1
  171. package/dist/lib/agent-loop.js +1 -1
  172. package/dist/lib/antigravity-transcript.js +1 -1
  173. package/dist/lib/api-client.js +1 -1
  174. package/dist/lib/autorun-batch.js +1 -0
  175. package/dist/lib/ensure-api-key.js +1 -1
  176. package/dist/lib/ensure-fresh-token.js +1 -1
  177. package/dist/lib/eval-analyzer.js +1 -1
  178. package/dist/lib/eval-benchmark.js +1 -1
  179. package/dist/lib/eval-candidate-run.js +1 -1
  180. package/dist/lib/eval-case-generator.js +1 -1
  181. package/dist/lib/eval-conversation-handler.js +1 -1
  182. package/dist/lib/eval-executor.js +1 -1
  183. package/dist/lib/eval-grader.js +1 -1
  184. package/dist/lib/eval-meta-judge.js +1 -1
  185. package/dist/lib/eval-resume.js +1 -1
  186. package/dist/lib/eval-run-batch.js +1 -1
  187. package/dist/lib/eval-trigger-tester.js +1 -1
  188. package/dist/lib/evolution-enrolment.js +1 -1
  189. package/dist/lib/harbor-readiness.js +1 -1
  190. package/dist/lib/insights/generation/installed-asks.js +1 -1
  191. package/dist/lib/insights/generation/project-evidence.js +1 -0
  192. package/dist/lib/insights/generation/prompts.js +1 -1
  193. package/dist/lib/insights/nomination/nominate.js +1 -1
  194. package/dist/lib/instruction-proposer.js +1 -1
  195. package/dist/lib/instructions/acceptance/accept-events.js +1 -1
  196. package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
  197. package/dist/lib/instructions/acceptance/hook-install.js +1 -1
  198. package/dist/lib/instructions/acceptance/reverse-applications.js +1 -1
  199. package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
  200. package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
  201. package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -1
  202. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -1
  203. package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -1
  204. package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
  205. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  206. package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -1
  207. package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -1
  208. package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -1
  209. package/dist/lib/jobs/handlers/distill-memories.js +1 -1
  210. package/dist/lib/jobs/handlers/harbor-ab-verdict.js +1 -1
  211. package/dist/lib/jobs/handlers/harbor-ab.js +1 -1
  212. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  213. package/dist/lib/jobs/handlers/process-conversation.js +1 -1
  214. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  215. package/dist/lib/jobs/handlers/process-insights.js +1 -1
  216. package/dist/lib/jobs/handlers/process-judge-review.js +1 -1
  217. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  218. package/dist/lib/jobs/handlers/process-memory-ab.js +1 -1
  219. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  220. package/dist/lib/jobs/handlers/process-session-goal.js +1 -1
  221. package/dist/lib/jobs/shed-retry.js +1 -1
  222. package/dist/lib/judge-review-runner.js +1 -1
  223. package/dist/lib/llm-client.js +1 -1
  224. package/dist/lib/manual-tasks.js +1 -1
  225. package/dist/lib/measurement-llm.js +1 -1
  226. package/dist/lib/pi-exec.js +1 -1
  227. package/dist/lib/projects/workspace/worktree.js +1 -1
  228. package/dist/lib/refine-cases.js +1 -1
  229. package/dist/lib/research-client.js +1 -1
  230. package/dist/lib/retraction.js +1 -1
  231. package/dist/lib/reviewer-detect.js +1 -1
  232. package/dist/lib/setup-steps.js +1 -1
  233. package/dist/lib/telemetry.js +1 -1
  234. package/dist/lib/terminal-target-heartbeat.js +1 -1
  235. package/dist/lib/work-report.js +1 -1
  236. package/oclif.manifest.json +1 -1
  237. package/package.json +4 -4
  238. package/dist/chunk-74QIUVWY.js +0 -1
  239. package/dist/chunk-E7GQJML3.js +0 -1
  240. package/dist/chunk-FCTFHY3X.js +0 -13
  241. package/dist/chunk-HRJDKAJ4.js +0 -1
  242. package/dist/chunk-INAZLRY5.js +0 -1
  243. package/dist/chunk-OUK2AWEI.js +0 -1
  244. package/dist/chunk-OYAOLJUH.js +0 -1
  245. package/dist/chunk-PUX6P5KC.js +0 -2
  246. package/dist/chunk-SBGXIPRN.js +0 -2
  247. package/dist/chunk-SJKS3PYX.js +0 -109
  248. package/dist/chunk-SPJ73X7A.js +0 -4
  249. package/dist/chunk-UJ7EPLKC.js +0 -1
  250. package/dist/chunk-WSWZPNLG.js +0 -1
  251. /package/dist/{chunk-SE3UKA3M.js → chunk-T75KAEJO.js} +0 -0
@@ -1,3 +1,3 @@
1
- import{e as p}from"./chunk-LJRE3LZ2.js";import{C as f}from"./chunk-TWPG3TEQ.js";import{a as r}from"./chunk-ZLLER3HP.js";var g=80,h=/\b(must|never|always|do not|don'?t|avoid|prefer|require[sd]?|before|after|only|instead of|use|run|add|keep|stop|refuse|check|verify|ask|write|read)\b/i,m=200,k=r(()=>({asks:[],omitted:0}),"empty");function A(s){return s.replace(/\s+/g," ").trim().toLowerCase()}r(A,"key");function I(s){let t=[];for(let o of s.split(`
1
+ import{e as p}from"./chunk-LJRE3LZ2.js";import{C as f}from"./chunk-X6CF5KTW.js";import{a as r}from"./chunk-ZLLER3HP.js";var g=80,h=/\b(must|never|always|do not|don'?t|avoid|prefer|require[sd]?|before|after|only|instead of|use|run|add|keep|stop|refuse|check|verify|ask|write|read)\b/i,m=200,k=r(()=>({asks:[],omitted:0}),"empty");function A(s){return s.replace(/\s+/g," ").trim().toLowerCase()}r(A,"key");function I(s){let t=[];for(let o of s.split(`
2
2
  `)){let e=o.trim(),n=t.length>0?t[t.length-1]:"",i=e===""||/^(?:[-*+]|\d+[.)]|#|```|>|\||!)/.test(e);if(n!==""&&!/[.!?:;]$/.test(n)&&!/^(?:#|```)/.test(n)&&!i){t[t.length-1]=`${n} ${e}`;continue}t.push(e)}return t.join(`
3
3
  `)}r(I,"unwrap");function y(s,t=p){if(!s)return k();try{let o=new Set,e=[],n=[];for(let l of t(s))for(let d of f(I(l.content))){let c=A(d);if(c===""||o.has(c))continue;o.add(c);let a=d.replace(/\s+/g," ").trim(),u=a.length>m?`${a.slice(0,m)}\u2026`:a;(h.test(u)?e:n).push(u)}let i=[...e,...n];return{asks:i.slice(0,g),omitted:Math.max(0,i.length-g)}}catch{return k()}}r(y,"readInstalledAsks");export{g as a,m as b,y as c};
@@ -0,0 +1,2 @@
1
+ import{a as t}from"./chunk-6XTLP2G7.js";import{a as l}from"./chunk-ZLLER3HP.js";import{readFileSync as x}from"node:fs";import{homedir as m}from"node:os";import{join as a}from"node:path";function p(i){for(let n of i.split(`
2
+ `)){let o=n.trim();if(o.startsWith("["))break;let e=/^model\s*=\s*"([^"]+)"/.exec(o);if(e)return e[1]}return null}l(p,"parseCodexConfigModel");function B(i){return/requires a newer version of Codex|is not supported when using Codex/i.test(i)}l(B,"isCodexModelUnsupported");var u="gpt-5.5";function M(i=a(m(),".codex")){let n=null;try{n=p(x(a(i,"config.toml"),"utf8"))}catch{}return{codexBin:t("codex"),claudeBin:t("claude"),piBin:t("pi"),codexConfiguredModel:n}}l(M,"detectEngines");function $(i){let{engineFlag:n,modelFlag:o,availability:e,judgeModels:d}=i,s=o??e.codexConfiguredModel??u,g=o?`--model ${o}`:e.codexConfiguredModel?`model ${e.codexConfiguredModel} from your ~/.codex/config.toml`:`fallback model ${u} (no ~/.codex/config.toml model found)`,r=o??(d.some(f=>/opus/i.test(f))?"sonnet":null),c=o?`--model ${o}`:r?`model ${r} (differs from the ${d.join(", ")} judge)`:"CLI default model";if(n==="codex"||n==="auto"&&e.codexBin){if(!e.codexBin)throw new Error("Codex CLI not found on PATH, well-known install dirs, or the node bin dir \u2014 install it or use --engine claude.");return{engine:"codex",model:s,rationale:`codex at ${e.codexBin} (cross-vendor reviewer), ${g}`}}if(!e.claudeBin)throw new Error("No reviewer CLI found \u2014 neither codex nor claude is installed on this machine.");return{engine:"claude",model:r,rationale:n==="auto"?`claude at ${e.claudeBin} (codex not installed \u2014 same-vendor reviewer, agreement will overstate independence), ${c}`:`claude at ${e.claudeBin}, ${c}`}}l($,"chooseReviewer");export{p as a,B as b,u as c,M as d,$ as e};
@@ -1 +1 @@
1
- import{b as $}from"./chunk-VBXL7XO7.js";import{e as w,f as k}from"./chunk-ZZHIBOMT.js";import{a as u}from"./chunk-ZLLER3HP.js";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function _(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u(_,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function C(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:_(l[r])?1:0,withoutScore:_(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(C,"pairRunsByEval");function T(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=C(i,l);if(d.length>0){if(t=$(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(T,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}&activeCasesOnly=1${o}`);if(a.push(...i),i.length<s)break}return T(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{T as a,S as b,B as c};
1
+ import{b as $}from"./chunk-VBXL7XO7.js";import{e as w,f as k}from"./chunk-GIXHG5FK.js";import{a as u}from"./chunk-ZLLER3HP.js";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function _(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u(_,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function C(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:_(l[r])?1:0,withoutScore:_(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(C,"pairRunsByEval");function T(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=C(i,l);if(d.length>0){if(t=$(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(T,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}&activeCasesOnly=1${o}`);if(a.push(...i),i.length<s)break}return T(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{T as a,S as b,B as c};
@@ -0,0 +1 @@
1
+ import{b as R,c as L,f as s,g as I,i as h}from"./chunk-XXPWPKTD.js";import{c as ne}from"./chunk-5TM7AOH2.js";import{b as re}from"./chunk-IEQDLURA.js";import{d as te,e as oe,f as se}from"./chunk-KINIFUZQ.js";import{a as O}from"./chunk-ZYGBABMZ.js";import{a as U}from"./chunk-HM63AB2C.js";import{a as F}from"./chunk-PXYK4MBX.js";import{a as W}from"./chunk-ZTQUGAZG.js";import{a as $}from"./chunk-XZW5ZHFC.js";import{a as q}from"./chunk-F5PJN2EY.js";import{b as J}from"./chunk-XIOYV5A7.js";import{a as K}from"./chunk-5VNEHPGC.js";import{a as Y}from"./chunk-5PMTNNA6.js";import{b as V}from"./chunk-5RBLIVBF.js";import{a as j}from"./chunk-H4QPAEEA.js";import{a as Q}from"./chunk-J6RQ5AH2.js";import{a as D}from"./chunk-PZS55PW2.js";import{a as ee}from"./chunk-QPAOX7P2.js";import{e as P}from"./chunk-QENSCK77.js";import{b as G}from"./chunk-VCUW2NAP.js";import{c as N}from"./chunk-FZMO7XSN.js";import{a as z}from"./chunk-CYCH2EQC.js";import{a as X}from"./chunk-VXNICAVG.js";import{a as Z}from"./chunk-L562Y4RN.js";import{a as x}from"./chunk-CZBO3A6B.js";import{b as C}from"./chunk-PIVEJTNF.js";import{k as B}from"./chunk-3NWJ7CZ2.js";import{d as S}from"./chunk-GPBN4ROE.js";import{b as M,e as T,f as E}from"./chunk-GIXHG5FK.js";import{a as l}from"./chunk-ZLLER3HP.js";var H=null,w=null,ce={process_eval:W,process_insights:$,process_launch:J,process_send_message:O,process_conversation:F,process_session_goal:U,distill_memories:G,memory_ab:K,process_run_cleanup:Y,cron_refine_cases:j,cron_retire_unused_skills:ee,cron_reconcile_attribution:x,cron_suggest_instructions:P,cron_refresh_skills:D,cron_refresh_pricing:Q,cron_eval_autorun:X,cron_auto_accept_suggestions:z,cron_instruction_training:Z,cron_instruction_evolution:B,process_judge_review:q,harbor_ab:N},ae=Object.keys(ce),me=new Set([]);function pe(e=process.env){return e.DATABASE_URL?ae:ae.filter(t=>!me.has(t))}l(pe,"availableCapabilities");var ge=3e4,_e=3e4,fe=3e4,ie=500,le=1e4,ve=`thin-agent-${process.pid}`,A=null;function ke(e,t,r,p){let d;try{let i=S();d={claude:i.claudeBin!=null,codex:i.codexBin!=null,pi:i.piBin!=null,codexModel:i.codexConfiguredModel}}catch{}let m;try{m=C()}catch{}let g=l(i=>E("/api/workers/heartbeat",{workerType:"cli-worker",clientName:ve,clientVersion:p,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:i,metadata:{capabilities:e,mode:"thin-agent",measurementProtocol:1,memorySnapshots:1,boundedAutorun:1,llmEngines:d,harborReady:m,machine:H?.summary()}}).then(c=>{let u=c?.advisory;u&&u.message!==A?(A=u.message,s(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(A=null)}).catch(c=>{s(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})}),"send");g("alive");let f=setInterval(()=>g("alive"),fe),a=null,n=l(()=>a||(clearInterval(f),a=Promise.race([g("shutting_down"),new Promise(i=>setTimeout(i,2e3).unref())]),a),"sayGoodbye");return t.addEventListener("abort",()=>{n()},{once:!0}),{shutdown:n}}l(ke,"startPresenceHeartbeat");async function be(e,t,r=S()){let p=[...r.claudeBin?["claude"]:[],...r.codexBin?["codex"]:[],...r.piBin?["pi"]:[]],d=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${t}&measurementProtocol=1&memorySnapshots=1&boundedAutorun=1&measurementEngines=${encodeURIComponent(p.join(","))}`,m=await T(`/api/work/next?${d}`);return m==null||typeof m=="string"?null:m}l(be,"pollForWork");function he(e,t){return{logger:{info:l(r=>t(r),"info"),warn:l(r=>t(r),"warn"),error:l(r=>t(r),"error")},job:{attempts:e}}}l(he,"makeHelpers");async function we(e,t,r,p){let d=ce[e.kind],m=Date.now();if(s(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!d){let n=`unknown kind: ${e.kind}`;s(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:n}),await E(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:n,terminal:!0}).catch(()=>{});return}let g=l(()=>{s(r,{event:"heartbeat",jobId:e.id}),h(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken},{budgetMs:Math.min(L,Math.max(0,t-1e3)),signal:p,log:r,event:"heartbeat",jobId:e.id}).then(n=>{n.ok||s(r,{event:"heartbeat_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})})},"beat"),f=setInterval(g,t);w={jobId:e.id,beat:g};let a;try{let n=he(e.attempts,r);a={kind:"complete",result:await d(e.payload,n)??{}}}catch(n){let i=H?.pausesSince(m)??[],c=se(i),u=n instanceof Error?n.message:String(n),v=V(n),o=!v&&oe(i);a={kind:"fail",message:c?`${c}; ${u}`:u,pausedDuringJob:!!c,terminal:v,hostSuspended:o}}try{if(a.kind==="complete"){s(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-m});let n=await h(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:a.result},{budgetMs:R,signal:p,log:r,event:"complete_post",jobId:e.id});n.ok||s(r,{event:"complete_post_error",jobId:e.id,kind:e.kind,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}else{s(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-m,terminal:a.terminal,error:a.message,...a.pausedDuringJob?{pausedDuringJob:!0}:{},...a.hostSuspended?{hostSuspended:!0}:{}});let n=await h(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:a.message,terminal:a.terminal,hostSuspended:a.hostSuspended},{budgetMs:R,signal:p,log:r,event:"fail_post",jobId:e.id});n.ok||s(r,{event:"fail_post_error",jobId:e.id,attempts:n.attempts,error:n.error instanceof Error?n.error.message:String(n.error)})}}finally{clearInterval(f),w=null}}l(we,"runOne");var de=new Set(["process_eval","process_conversation","process_insights","process_session_goal","distill_memories","memory_ab","cron_suggest_instructions","cron_eval_autorun","cron_instruction_evolution","process_judge_review","harbor_ab"]);async function Ze(e){let t=e.log??(()=>{}),r=e.pollWaitMs??ge,p=e.heartbeatIntervalMs??_e,d=e.capabilities??pe();s(t,{event:"agent_start",capabilities:d,pollWaitMs:r,heartbeatIntervalMs:p});try{let o=re();o.removed.length>0&&s(t,{event:"eval_worktrees_swept",removed:o.removed.length})}catch(o){s(t,{event:"eval_worktree_sweep_failed",error:o instanceof Error?o.message:String(o)})}H=te({signal:e.signal,onPause:l(o=>{s(t,{event:"machine_pause",...o,jobId:w?.jobId??null}),w?.beat()},"onPause")});let m=ke(d,e.signal,t,e.version);ne({signal:e.signal,log:t}).catch(o=>{s(t,{event:"tt_heartbeat_fatal",error:o instanceof Error?o.message:String(o)})});let g=5*6e4,f=0,a=l(()=>{if(!e.readInstalledVersion||!e.version)return!1;let o=Date.now();if(o-f<g)return!1;f=o;let b=e.readInstalledVersion();return!!(b&&b!==e.version)},"versionDrifted"),n=new AbortController,i=n.signal;e.signal.aborted?n.abort():e.signal.addEventListener("abort",()=>n.abort(),{once:!0});let c=l(async(o,b)=>{let _=ie;for(;!i.aborted;){if(a()){s(t,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),n.abort(),e.onVersionDrift?.();break}let y=null;try{y=await be([...b],r)}catch(k){let ue=k instanceof M?k.statusCode:void 0;if(s(t,{event:"poll_error",lane:o,status:ue,error:k instanceof Error?k.message:String(k)}),!await I(_,i))break;_=Math.min(_*2,le);continue}if(!y){if(s(t,{event:"poll_204",lane:o}),!await I(_,i))break;_=Math.min(_*2,le);continue}_=ie,await we(y,p,t,i)}},"runLane"),u=d.filter(o=>de.has(o)),v=d.filter(o=>!de.has(o));u.length>0&&v.length>0?(s(t,{event:"agent_lanes",heavy:u.length,fast:v.length}),await Promise.all([c("heavy",u),c("fast",v)])):await c("single",d),await m.shutdown(),s(t,{event:"agent_stop"})}l(Ze,"runAgentLoop");export{ce as a,ae as b,pe as c,be as d,Ze as e};
@@ -1 +1 @@
1
- import{b as u,c as d}from"./chunk-HFSISGCJ.js";import{b as g}from"./chunk-E7RH43OS.js";import{e as m,f as p,h as l}from"./chunk-ZZHIBOMT.js";import{a as s}from"./chunk-ZLLER3HP.js";async function x(f,R){let r=s(e=>R?.logger?.info?.(e)??console.log(e),"log"),{evalTargetId:n}=f,i=`[cron_refine_cases] ${n}`,t=await m(`/api/eval-targets/${n}`);if(!(t.metadata?.autoRefineCases===!0))return r(`${i} not opted in (metadata.autoRefineCases)`),{skipped:"not-opted-in",reason:`"${t.name}" has not opted into automatic case refinement. Set metadata.autoRefineCases=true to let the loop cull cases that carry no treatment signal, or run \`rulemetric evals refine-cases ${n}\` by hand.`,targetName:t.name};let C=await m(`/api/eval-targets/${n}/judge-calibration`),a=u(C.caseDiscrimination);if(a.refused)return r(`${i} ${a.refused}: ${a.summary}`),{skipped:a.refused,reason:a.summary,targetName:t.name};r(`${i} ${a.summary}`);let o=await d(a,{generate:s(e=>g({content:t.content,name:t.name,feedback:e}),"generate"),createCase:s(e=>p(`/api/eval-targets/${n}/evals`,{name:e.name,prompt:e.prompt,expectations:e.expectations}),"createCase"),retireCase:s(async(e,y)=>{await l(`/api/eval-targets/${n}/evals/${e}`,{retire:!0,retiredReason:y})},"retireCase"),log:r});r(`${i} ${o.summary}`);let{skipped:c,...$}=o;return{...$,targetName:t.name,...c?{skipped:c,reason:o.summary}:{}}}s(x,"cronRefineCases");export{x as a};
1
+ import{b as u,c as d}from"./chunk-RR7V5CK5.js";import{b as g}from"./chunk-DXNUCWUX.js";import{e as m,f as p,h as l}from"./chunk-GIXHG5FK.js";import{a as s}from"./chunk-ZLLER3HP.js";async function x(f,R){let r=s(e=>R?.logger?.info?.(e)??console.log(e),"log"),{evalTargetId:n}=f,i=`[cron_refine_cases] ${n}`,t=await m(`/api/eval-targets/${n}`);if(!(t.metadata?.autoRefineCases===!0))return r(`${i} not opted in (metadata.autoRefineCases)`),{skipped:"not-opted-in",reason:`"${t.name}" has not opted into automatic case refinement. Set metadata.autoRefineCases=true to let the loop cull cases that carry no treatment signal, or run \`rulemetric evals refine-cases ${n}\` by hand.`,targetName:t.name};let C=await m(`/api/eval-targets/${n}/judge-calibration`),a=u(C.caseDiscrimination);if(a.refused)return r(`${i} ${a.refused}: ${a.summary}`),{skipped:a.refused,reason:a.summary,targetName:t.name};r(`${i} ${a.summary}`);let o=await d(a,{generate:s(e=>g({content:t.content,name:t.name,feedback:e}),"generate"),createCase:s(e=>p(`/api/eval-targets/${n}/evals`,{name:e.name,prompt:e.prompt,expectations:e.expectations}),"createCase"),retireCase:s(async(e,y)=>{await l(`/api/eval-targets/${n}/evals/${e}`,{retire:!0,retiredReason:y})},"retireCase"),log:r});r(`${i} ${o.summary}`);let{skipped:c,...$}=o;return{...$,targetName:t.name,...c?{skipped:c,reason:o.summary}:{}}}s(x,"cronRefineCases");export{x as a};
@@ -1,4 +1,4 @@
1
- import{h as o}from"./chunk-FJX7WDPG.js";import{g as f}from"./chunk-GN46S7T4.js";import{b as y,e as m,h as d}from"./chunk-ZZHIBOMT.js";import{a as S}from"./chunk-ZLLER3HP.js";var _=1800*1e3,G=300*1e3,R=10,T=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
1
+ import{h as o}from"./chunk-CVPAKEEZ.js";import{g as f}from"./chunk-7BCZDVIU.js";import{b as y,e as m,h as d}from"./chunk-GIXHG5FK.js";import{a as S}from"./chunk-ZLLER3HP.js";var _=1800*1e3,G=300*1e3,R=10,T=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
2
2
 
3
3
  Return strict JSON in the form: {"goalSummary": "..."}`;async function N(n,e={}){let w=e.llm??f,i=e.now??Date.now,v=e.getSession??(async s=>{try{return await o(()=>m(`/api/sessions/${s}`),{label:"session detail",idempotent:!0})}catch(t){if(t instanceof y&&t.statusCode===404)return null;throw t}}),l=e.getEvents??((s,t)=>o(()=>m(`/api/sessions/${s}/events?limit=${t.limit}&sort=${t.sort}`),{label:"session events",idempotent:!0})),P=e.saveGoal??(async(s,t)=>{await o(()=>d(`/api/sessions/${s}/enrich`,{analysis:t}),{label:"session enrich"})}),r=await v(n.sessionId);if(!r)return{skipped:"not_found"};let[A]=await l(n.sessionId,{limit:1,sort:"desc"}),h=new Date(A?.timestamp??r.startedAt).getTime();if(i()-h>_)return{skipped:"stale"};let c=r.analysis??{},g=c.goalSummaryAt?new Date(c.goalSummaryAt).getTime():0;if(g&&i()-g<G)return{skipped:"recent"};let u=(await l(n.sessionId,{limit:R*2,sort:"asc"})).filter(s=>s.content&&(s.eventType==="user_message"||s.eventType==="assistant_response")).map(s=>`${s.eventType==="user_message"?"USER":"ASSISTANT"}: ${s.content}`).join(`
4
4
 
@@ -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};
@@ -1 +1 @@
1
- import{f as r}from"./chunk-ZZHIBOMT.js";import{a as i}from"./chunk-ZLLER3HP.js";async function p(e,t,n,o){await r(`/api/instruction-suggestions/${encodeURIComponent(e)}/events`,{eventType:"accepted",projectPath:t,instructionId:n,actor:o})}i(p,"logAccepted");async function a(e,t,n,o,s="redundant"){await r(`/api/instruction-suggestions/${encodeURIComponent(e)}/events`,{eventType:s,projectPath:t,instructionId:n,actor:o})}i(a,"logRefused");export{p as a,a as b};
1
+ import{f as r}from"./chunk-GIXHG5FK.js";import{a as i}from"./chunk-ZLLER3HP.js";async function p(e,t,n,o){await r(`/api/instruction-suggestions/${encodeURIComponent(e)}/events`,{eventType:"accepted",projectPath:t,instructionId:n,actor:o})}i(p,"logAccepted");async function a(e,t,n,o,s="redundant"){await r(`/api/instruction-suggestions/${encodeURIComponent(e)}/events`,{eventType:s,projectPath:t,instructionId:n,actor:o})}i(a,"logRefused");export{p as a,a as b};
@@ -1,4 +1,4 @@
1
- import{e as b,g as y}from"./chunk-GN46S7T4.js";import{e as M,f as w}from"./chunk-ZZHIBOMT.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
1
+ import{e as b,g as y}from"./chunk-7BCZDVIU.js";import{e as M,f as w}from"./chunk-GIXHG5FK.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
2
2
  `);async function C(f){try{let n=await fetch(f,{headers:{accept:"text/plain, text/markdown, text/html"}});if(!n.ok)return null;let i=await n.text();return i.length>v?i.slice(0,v):i}catch{return null}}u(C,"fetchPage");var L=u(async(f,n)=>{let i=await M("/api/pricing/coverage"),I=[...i.unpriced,...i.stale],m=new Map;for(let r of I)m.set(`${r.provider}::${r.modelId}`,r);let a=[...m.values()];if(a.length===0)return n.logger.info("[cron-refresh-pricing] coverage clean \u2014 nothing unpriced or stale"),{status:"clean",checked:i.unpriced.length+i.stale.length};if(b()==="none")return n.logger.warn(`[cron-refresh-pricing] ${a.length} model(s) need pricing but no LLM backend (install the claude CLI or set ANTHROPIC_API_KEY) \u2014 skipping`),{status:"no-llm",pending:a.length};let d=new Map;for(let r of a){let o=d.get(r.provider)??[];o.push(r.modelId),d.set(r.provider,o)}let t={written:0,unchanged:0,flagged:0,rejected:0,skipped:0},c=[];for(let[r,o]of d){let h=$[r];if(!h){n.logger.warn(`[cron-refresh-pricing] no pricing source configured for provider '${r}' (${o.length} model(s)) \u2014 skipping`),t.skipped+=o.length;continue}let p="",l="";for(let e of h){let s=await C(e);s&&(p+=`
3
3
 
4
4
  === ${e} ===
@@ -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 +1 @@
1
- import{f as u}from"./chunk-ZZHIBOMT.js";import{a as m}from"./chunk-ZLLER3HP.js";async function p(n,a,s){if(a)try{let t=Array.isArray(n.recommendation_candidates)?n.recommendation_candidates.filter(e=>typeof e.title=="string"&&typeof e.artifact=="string"&&typeof e.canonicalBody=="string"&&e.canonicalBody.trim().length>=12).map(e=>({title:String(e.title).trim(),artifact:String(e.artifact),canonicalBody:String(e.canonicalBody).trim(),rationale:String(e.rationale??""),evidence:Array.isArray(e.evidence)?e.evidence:[],outcomeMetric:String(e.outcomeMetric??"session_outcome"),renderings:Array.isArray(e.renderings)?e.renderings:[]})):[],i=n.suggestions,l=Array.isArray(i?.claude_md_additions)?i.claude_md_additions.filter(e=>typeof e?.addition=="string"&&e.addition.trim().length>=12).map(e=>({addition:String(e.addition).trim(),why:String(e.why??"")})):[],d=Array.isArray(n.recommended_skills)?n.recommended_skills.filter(e=>typeof e?.skillId=="string"&&e.skillId.length>0).map(e=>({skillId:String(e.skillId),reason:String(e.reason??"")})):[],g=Array.isArray(i?.features_to_try)?i.features_to_try.filter(e=>typeof e?.feature=="string"&&e.feature.trim().length>=2).map(e=>({feature:String(e.feature).trim(),one_liner:String(e.one_liner??""),why_for_you:String(e.why_for_you??""),example_code:String(e.example_code??"")})):[],c=[...Array.isArray(i?.usage_patterns)?i.usage_patterns.map(e=>({title:String(e.title??"").trim(),lead:String(e.suggestion??""),detail:String(e.detail??""),copyable_prompt:String(e.copyable_prompt??""),origin:"usage_pattern"})):[],...Array.isArray(n.on_the_horizon?.opportunities)?n.on_the_horizon.opportunities.map(e=>({title:String(e.title??"").trim(),lead:String(e.whats_possible??""),detail:String(e.how_to_try??""),copyable_prompt:String(e.copyable_prompt??""),origin:"opportunity"})):[]].filter(e=>e.title.length>=2);if(t.length===0&&l.length===0&&d.length===0&&g.length===0&&c.length===0)return;let r=await u("/api/insights/recommendations/nominate",{projectPath:a,candidates:t.slice(0,40),additions:l.slice(0,20),skills:d.slice(0,20),features:g.slice(0,20),advice:c.slice(0,40)}),o=r.additionsRejected??[];s(` ${r.nominated} recommendation(s) nominated into the suggestion feed (${r.additionsCreated} new instruction(s)`+((r.featuresCreated??0)>0?`, ${r.featuresCreated} feature proposal(s)`:"")+((r.adviceCreated??0)>0?`, ${r.adviceCreated} pattern/opportunity`:"")+(r.skillsUnresolved>0?`, ${r.skillsUnresolved} skill slug(s) unresolved`:"")+(o.length>0?`, ${o.length} rejected as unfilled templates`:"")+")");for(let e of o)s(` rejected "${e.name}" \u2014 unfilled placeholder(s): ${e.placeholders.join(", ")}`);for(let e of r.itemsFailed??[])s(` failed "${e.name}" \u2014 ${e.error}`)}catch(t){s(` nomination skipped (whole batch): ${t instanceof Error?t.message:String(t)}`)}}m(p,"nominateRecommendations");export{p as a};
1
+ import{f as u}from"./chunk-GIXHG5FK.js";import{a as m}from"./chunk-ZLLER3HP.js";async function p(n,a,s){if(a)try{let t=Array.isArray(n.recommendation_candidates)?n.recommendation_candidates.filter(e=>typeof e.title=="string"&&typeof e.artifact=="string"&&typeof e.canonicalBody=="string"&&e.canonicalBody.trim().length>=12).map(e=>({title:String(e.title).trim(),artifact:String(e.artifact),canonicalBody:String(e.canonicalBody).trim(),rationale:String(e.rationale??""),evidence:Array.isArray(e.evidence)?e.evidence:[],outcomeMetric:String(e.outcomeMetric??"session_outcome"),renderings:Array.isArray(e.renderings)?e.renderings:[]})):[],i=n.suggestions,l=Array.isArray(i?.claude_md_additions)?i.claude_md_additions.filter(e=>typeof e?.addition=="string"&&e.addition.trim().length>=12).map(e=>({addition:String(e.addition).trim(),why:String(e.why??"")})):[],d=Array.isArray(n.recommended_skills)?n.recommended_skills.filter(e=>typeof e?.skillId=="string"&&e.skillId.length>0).map(e=>({skillId:String(e.skillId),reason:String(e.reason??"")})):[],g=Array.isArray(i?.features_to_try)?i.features_to_try.filter(e=>typeof e?.feature=="string"&&e.feature.trim().length>=2).map(e=>({feature:String(e.feature).trim(),one_liner:String(e.one_liner??""),why_for_you:String(e.why_for_you??""),example_code:String(e.example_code??"")})):[],c=[...Array.isArray(i?.usage_patterns)?i.usage_patterns.map(e=>({title:String(e.title??"").trim(),lead:String(e.suggestion??""),detail:String(e.detail??""),copyable_prompt:String(e.copyable_prompt??""),origin:"usage_pattern"})):[],...Array.isArray(n.on_the_horizon?.opportunities)?n.on_the_horizon.opportunities.map(e=>({title:String(e.title??"").trim(),lead:String(e.whats_possible??""),detail:String(e.how_to_try??""),copyable_prompt:String(e.copyable_prompt??""),origin:"opportunity"})):[]].filter(e=>e.title.length>=2);if(t.length===0&&l.length===0&&d.length===0&&g.length===0&&c.length===0)return;let r=await u("/api/insights/recommendations/nominate",{projectPath:a,candidates:t.slice(0,40),additions:l.slice(0,20),skills:d.slice(0,20),features:g.slice(0,20),advice:c.slice(0,40)}),o=r.additionsRejected??[];s(` ${r.nominated} recommendation(s) nominated into the suggestion feed (${r.additionsCreated} new instruction(s)`+((r.featuresCreated??0)>0?`, ${r.featuresCreated} feature proposal(s)`:"")+((r.adviceCreated??0)>0?`, ${r.adviceCreated} pattern/opportunity`:"")+(r.skillsUnresolved>0?`, ${r.skillsUnresolved} skill slug(s) unresolved`:"")+(o.length>0?`, ${o.length} rejected as unfilled templates`:"")+")");for(let e of o)s(` rejected "${e.name}" \u2014 unfilled placeholder(s): ${e.placeholders.join(", ")}`);for(let e of r.itemsFailed??[])s(` failed "${e.name}" \u2014 ${e.error}`)}catch(t){s(` nomination skipped (whole batch): ${t instanceof Error?t.message:String(t)}`)}}m(p,"nominateRecommendations");export{p as a};
@@ -1 +1 @@
1
- import{c as l}from"./chunk-ZZHIBOMT.js";import{c as a,l as u}from"./chunk-PZNWH4VQ.js";import{a as o}from"./chunk-ZLLER3HP.js";var c=120*1e3,t=null;async function k(){if(process.env.RULEMETRIC_API_KEY)return!0;let e=a(u());if(!e.isRefreshable(c))return!0;let r=e.loadToken();return r?.refreshToken?t||(t=f(e,r).finally(()=>{t=null}),t):!0}o(k,"ensureFreshToken");async function f(e,r){let s;try{s=await fetch(`${l()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:r.refreshToken})})}catch{return!0}if(s.status===401)return e.clearToken(),!1;if(!s.ok)return!0;let n=await s.json().catch(()=>null);if(!n?.accessToken||!n.refreshToken)return!0;let i={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt??r.expiresAt,email:n.email??r.email};return e.saveToken(i),e.saveEnvFile(i.accessToken),!0}o(f,"doRefresh");export{k as a};
1
+ import{c as l}from"./chunk-GIXHG5FK.js";import{c as a,l as u}from"./chunk-PZNWH4VQ.js";import{a as o}from"./chunk-ZLLER3HP.js";var c=120*1e3,t=null;async function k(){if(process.env.RULEMETRIC_API_KEY)return!0;let e=a(u());if(!e.isRefreshable(c))return!0;let r=e.loadToken();return r?.refreshToken?t||(t=f(e,r).finally(()=>{t=null}),t):!0}o(k,"ensureFreshToken");async function f(e,r){let s;try{s=await fetch(`${l()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:r.refreshToken})})}catch{return!0}if(s.status===401)return e.clearToken(),!1;if(!s.ok)return!0;let n=await s.json().catch(()=>null);if(!n?.accessToken||!n.refreshToken)return!0;let i={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt??r.expiresAt,email:n.email??r.email};return e.saveToken(i),e.saveEnvFile(i.accessToken),!0}o(f,"doRefresh");export{k as a};
@@ -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
@@ -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-GIXHG5FK.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};
@@ -0,0 +1 @@
1
+ import{a as l}from"./chunk-ZLLER3HP.js";var x=25;function w(e,r,n=1.959964){let s=1+n*n/r,c=(e+n*n/(2*r))/s,d=n*Math.sqrt(e*(1-e)/r+n*n/(4*r*r))/s;return[c-d,c+d]}l(w,"wilson");function g(e,r,n,s){let[c,d]=w(e,r),[u,t]=w(n,s);return[u-d,t-c]}l(g,"newcombe");var p=l(e=>`${e>=0?"+":""}${e.toFixed(3)}`,"fmt"),f=l(e=>`${e.passes}/${e.n}`,"counts");function _(e){let r=e.provenance;if(!r)return{decisionSemanticsVersion:2,decision:"incomparable",reason:"harness provenance was not checked; no instruction-effect claim is supported",reward:{delta:null,ci:null}};if(!r.comparable)return{decisionSemanticsVersion:2,decision:"incomparable",reason:`the two arms were not the same harness, so this is not an A/B of the rule: ${r.reasons.join("; ")}. Nothing here is evidence about the instruction \u2014 re-run both arms on one harness before reading anything into the numbers.`,reward:{delta:null,ci:null}};let n={...v(e),decisionSemanticsVersion:2};return r?.pooled_across.length?{...n,reason:`${n.reason} [pooled across ${r.pooled_across.join(", ")} by explicit --allow-cross]`}:n}l(_,"judgeSweep");function v(e){let r=e.minN??25,{baseline:n,with:s}=e;if(n.passes==null||s.passes==null||n.n===0||s.n===0)return{decision:"unmeasured",reason:`no reward recorded for the ${[n.passes==null||n.n===0?"baseline":null,s.passes==null||s.n===0?"with-arm":null].filter(Boolean).join(" and ")} arm \u2014 nothing to decide on; check the job dir for a harness error before reading this as a result`,reward:{delta:null,ci:null}};let c=n.passes/n.n,d=s.passes/s.n,u=d-c,t=g(c,n.n,d,s.n),$=t[0]>0||t[1]<0,m=n.n<r||s.n<r,o=`baseline ${f(n)} \u2192 with ${f(s)}, delta ${p(u)}, 95% CI [${p(t[0])}, ${p(t[1])}]`,i={delta:u,ci:t},b=m?` (n=${n.n}/${s.n}, below the ${r}/arm floor)`:"";if(e.taskClass==="unvalidated")return{decision:m?"undecided":"measured",reason:`calibration on an unvalidated engine/model${b}: ${o}. No regression or graduation claim against another model's catalogue.`,reward:i};if(m)return{decision:"undecided",reason:`calibration below the decision floor${b}: ${o}`,reward:i};if(t[1]<0)return{decision:"reward_harm",reason:`lower reward in this comparison: ${o}. This is not a between-period regression test.`,reward:i};if(e.taskClass==="proven"&&e.axis==="reward")return t[0]>0?{decision:"holds",reason:`calibration effect reproduced on this fixture: ${o}. This does not establish representative project improvement.`,reward:i}:{decision:"replication_alert",reason:`prior calibration effect did not reproduce: ${o}. Investigate the rule, model and harness; a valid between-period comparison is required to establish regression. The interval does not establish equivalence.`,reward:i};let a=e.cost;if(e.axis==="cost"&&!a)return{decision:"unmeasured",reason:`no per-trial cost measured \u2014 cost is UNKNOWN, not $0 (${o})`,reward:i};if(a&&a.decision!=="undecided"){let h=`cost ${a.delta_pct==null?"n/a":`${a.delta_pct>=0?"+":""}${a.delta_pct.toFixed(1)}%`}/trial, 95% CI [${a.ci_usd[0].toFixed(4)}, ${a.ci_usd[1].toFixed(4)}] USD`;return{decision:"cost_signal",reason:`${a.decision} in this comparison: ${h}; reward ${o}. ${a.reward.regressed?"The with-arm solved LESS in the observed sample. ":""}Reliability noninferiority is unestablished: no margin was declared. No performance-adoption claim.`,reward:i}}return e.taskClass==="proven"&&e.axis==="cost"?{decision:"replication_alert",reason:`prior cost saving did not reproduce; cost interval includes zero; reward ${o}. No between-period regression or reward-equivalence claim.`,reward:i}:$?{decision:"now_discriminates",reason:`exploratory calibration finding: ${o}. Validate on frozen tasks before making an improvement claim.`,reward:i}:{decision:"inconclusive",reason:`interval includes zero: ${o}. Neither equivalence nor absence of useful effect is established.`,reward:i}}l(v,"judgeMeasured");export{x as a,w as b,g as c,_ as d};
@@ -0,0 +1 @@
1
+ import{d as w}from"./chunk-NJ5UED3H.js";import{c as $,d as p}from"./chunk-GIXHG5FK.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 +1 @@
1
- import{a}from"./chunk-ZZHIBOMT.js";import{a as e}from"./chunk-ZLLER3HP.js";function i(){return process.env.RULEMETRIC_API_URL??a}e(i,"apiUrl");function u(){let n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)throw new Error("not signed in \u2014 run `rulemetric auth login`");return n}e(u,"authToken");async function t(n,o){let r=await fetch(`${i()}${n}`,{...o,headers:{Authorization:`Bearer ${u()}`,"Content-Type":"application/json",...o?.headers??{}},signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`${r.status} ${r.statusText}`);return await r.json()}e(t,"request");function c({limit:n}){return t(`/api/launch-jobs?limit=${n}`)}e(c,"fetchLaunchJobs");function h(n){return t("/api/launch-jobs",{method:"POST",body:JSON.stringify(n)})}e(h,"createLaunchJob");function l(n){return t(`/api/launch-jobs/${n}/cancel`,{method:"POST"})}e(l,"cancelLaunchJob");function p(){return t("/api/launchers")}e(p,"listLaunchers");export{c as a,h as b,l as c,p as d};
1
+ import{a}from"./chunk-GIXHG5FK.js";import{a as e}from"./chunk-ZLLER3HP.js";function i(){return process.env.RULEMETRIC_API_URL??a}e(i,"apiUrl");function u(){let n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)throw new Error("not signed in \u2014 run `rulemetric auth login`");return n}e(u,"authToken");async function t(n,o){let r=await fetch(`${i()}${n}`,{...o,headers:{Authorization:`Bearer ${u()}`,"Content-Type":"application/json",...o?.headers??{}},signal:AbortSignal.timeout(1e4)});if(!r.ok)throw new Error(`${r.status} ${r.statusText}`);return await r.json()}e(t,"request");function c({limit:n}){return t(`/api/launch-jobs?limit=${n}`)}e(c,"fetchLaunchJobs");function h(n){return t("/api/launch-jobs",{method:"POST",body:JSON.stringify(n)})}e(h,"createLaunchJob");function l(n){return t(`/api/launch-jobs/${n}/cancel`,{method:"POST"})}e(l,"cancelLaunchJob");function p(){return t("/api/launchers")}e(p,"listLaunchers");export{c as a,h as b,l as c,p as d};
@@ -1 +1 @@
1
- import{d as h,e as g}from"./chunk-RRM4HQG4.js";import{e as p,g as f}from"./chunk-ZZHIBOMT.js";import{a as o}from"./chunk-ZLLER3HP.js";var u="openCandidate";function K(n,s,a){let t=(n??{})[u];if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t;return e.executionKey!==a||typeof e.content!="string"||!e.content||typeof e.hash!="string"||!e.hash||typeof e.priorHash!="string"||e.priorHash!==s?null:{...a?{executionKey:a}:{},...typeof e.observedKey=="string"?{observedKey:e.observedKey}:{},content:e.content,hash:e.hash,priorHash:e.priorHash,plannedPairs:typeof e.plannedPairs=="number"?e.plannedPairs:0,updatedAt:typeof e.updatedAt=="string"?e.updatedAt:""}}o(K,"resolveOpenCandidate");function C(n){let{plannedPairs:s,carriedPairs:a,liveCases:t}=n;if(t<=0)return 0;let e=s-a;return e<=0?0:Math.ceil(e/t)}o(C,"owedPasses");var d=100;async function x(n){let{evalTargetId:s,candidateContentHash:a}=n,t=[];for(let e=0;;e+=d){let i=await p(`/api/eval-targets/${s}/runs?candidateContentHash=${encodeURIComponent(a)}&limit=${d}&offset=${e}`);if(!Array.isArray(i)||i.length===0||(t.push(...i.filter(r=>{if(r.outputs?.executionKey!==n.executionKey)return!1;if(!n.executionKey)return!0;if(!n.observedKey)return!1;let l=h([r]);if(!l)return!1;let[y,c]=JSON.parse(l),[b,m]=JSON.parse(n.observedKey);return y===b&&(c===null||c===m)})),i.length<d))break}return g(t)}o(x,"fetchCarriedPairs");async function A(n){let{evalTargetId:s,meta:a,blob:t,log:e,tag:i}=n;try{let r={...a};t?r[u]=t:delete r[u],await f(`/api/eval-targets/${s}`,{metadata:r}),e(t?`${i}: banked candidate ${t.hash.slice(0,8)} \u2014 the next run resumes instead of restarting`:`${i}: cleared the banked candidate (this cycle reached a decision)`)}catch(r){e(`${i}: could not update the candidate bank (${r instanceof Error?r.message:String(r)})`)}}o(A,"bankOpenCandidate");function O(n){return{...n.executionKey?{executionKey:n.executionKey}:{},...n.observedKey?{observedKey:n.observedKey}:{},content:n.content,hash:n.hash,priorHash:n.priorHash,plannedPairs:n.plannedPairs,updatedAt:n.now.toISOString()}}o(O,"buildOpenCandidate");export{u as a,K as b,C as c,x as d,A as e,O as f};
1
+ import{d as h,e as g}from"./chunk-RSVNQ2XI.js";import{e as p,g as f}from"./chunk-GIXHG5FK.js";import{a as o}from"./chunk-ZLLER3HP.js";var u="openCandidate";function K(n,s,a){let t=(n??{})[u];if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t;return e.executionKey!==a||typeof e.content!="string"||!e.content||typeof e.hash!="string"||!e.hash||typeof e.priorHash!="string"||e.priorHash!==s?null:{...a?{executionKey:a}:{},...typeof e.observedKey=="string"?{observedKey:e.observedKey}:{},content:e.content,hash:e.hash,priorHash:e.priorHash,plannedPairs:typeof e.plannedPairs=="number"?e.plannedPairs:0,updatedAt:typeof e.updatedAt=="string"?e.updatedAt:""}}o(K,"resolveOpenCandidate");function C(n){let{plannedPairs:s,carriedPairs:a,liveCases:t}=n;if(t<=0)return 0;let e=s-a;return e<=0?0:Math.ceil(e/t)}o(C,"owedPasses");var d=100;async function x(n){let{evalTargetId:s,candidateContentHash:a}=n,t=[];for(let e=0;;e+=d){let i=await p(`/api/eval-targets/${s}/runs?candidateContentHash=${encodeURIComponent(a)}&limit=${d}&offset=${e}`);if(!Array.isArray(i)||i.length===0||(t.push(...i.filter(r=>{if(r.outputs?.executionKey!==n.executionKey)return!1;if(!n.executionKey)return!0;if(!n.observedKey)return!1;let l=h([r]);if(!l)return!1;let[y,c]=JSON.parse(l),[b,m]=JSON.parse(n.observedKey);return y===b&&(c===null||c===m)})),i.length<d))break}return g(t)}o(x,"fetchCarriedPairs");async function A(n){let{evalTargetId:s,meta:a,blob:t,log:e,tag:i}=n;try{let r={...a};t?r[u]=t:delete r[u],await f(`/api/eval-targets/${s}`,{metadata:r}),e(t?`${i}: banked candidate ${t.hash.slice(0,8)} \u2014 the next run resumes instead of restarting`:`${i}: cleared the banked candidate (this cycle reached a decision)`)}catch(r){e(`${i}: could not update the candidate bank (${r instanceof Error?r.message:String(r)})`)}}o(A,"bankOpenCandidate");function O(n){return{...n.executionKey?{executionKey:n.executionKey}:{},...n.observedKey?{observedKey:n.observedKey}:{},content:n.content,hash:n.hash,priorHash:n.priorHash,plannedPairs:n.plannedPairs,updatedAt:n.now.toISOString()}}o(O,"buildOpenCandidate");export{u as a,K as b,C as c,x as d,A as e,O as f};
@@ -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 i}from"./chunk-MX34N7Y5.js";import{a as f}from"./chunk-ZLLER3HP.js";import{useEffect as J,useState as u,useCallback as m,useRef as s}from"react";var y=5e3;function T(a=20){let[d,b]=u([]),[g,l]=u(null),[h,p]=u(!0),r=s(!1),e=s(null),c=s(0),t=m(async()=>{let o=++c.current;try{let n=await i({limit:a});if(r.current||o!==c.current)return;b(n),l(null)}catch(n){if(r.current||o!==c.current)return;l(n instanceof Error?n.message:String(n))}finally{if(r.current||o!==c.current)return;p(!1),e.current=setTimeout(()=>{t()},y)}},[a]),L=m(()=>{e.current&&clearTimeout(e.current),t()},[t]);return J(()=>(r.current=!1,t(),()=>{r.current=!0,e.current&&clearTimeout(e.current)}),[t]),{jobs:d,error:g,loading:h,refetch:L}}f(T,"useLaunchJobs");export{T as a};
1
+ import{a as i}from"./chunk-NWV66NMA.js";import{a as f}from"./chunk-ZLLER3HP.js";import{useEffect as J,useState as u,useCallback as m,useRef as s}from"react";var y=5e3;function T(a=20){let[d,b]=u([]),[g,l]=u(null),[h,p]=u(!0),r=s(!1),e=s(null),c=s(0),t=m(async()=>{let o=++c.current;try{let n=await i({limit:a});if(r.current||o!==c.current)return;b(n),l(null)}catch(n){if(r.current||o!==c.current)return;l(n instanceof Error?n.message:String(n))}finally{if(r.current||o!==c.current)return;p(!1),e.current=setTimeout(()=>{t()},y)}},[a]),L=m(()=>{e.current&&clearTimeout(e.current),t()},[t]);return J(()=>(r.current=!1,t(),()=>{r.current=!0,e.current&&clearTimeout(e.current)}),[t]),{jobs:d,error:g,loading:h,refetch:L}}f(T,"useLaunchJobs");export{T as a};
@@ -1 +1 @@
1
- import{a as i}from"./chunk-JRWQJZYQ.js";import{h as s}from"./chunk-ZZHIBOMT.js";import{a as n}from"./chunk-ZLLER3HP.js";async function l(a,c){let{mirrorId:g,evalTargetId:p,config:r}=a,e=n(o=>c.logger.info(o),"log");await i(r,p,e);let t={type:"conversation",conversationId:r.conversationId};return await s(`/api/eval-jobs/${g}/state`,{result:t}).catch(o=>{e(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),t}n(l,"processConversation");export{l as a};
1
+ import{a as i}from"./chunk-FS3TAQAE.js";import{h as s}from"./chunk-GIXHG5FK.js";import{a as n}from"./chunk-ZLLER3HP.js";async function l(a,c){let{mirrorId:g,evalTargetId:p,config:r}=a,e=n(o=>c.logger.info(o),"log");await i(r,p,e);let t={type:"conversation",conversationId:r.conversationId};return await s(`/api/eval-jobs/${g}/state`,{result:t}).catch(o=>{e(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),t}n(l,"processConversation");export{l as a};
@@ -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};
@@ -1 +1 @@
1
- import{c as X}from"./chunk-HOQPVOMF.js";import{b as D}from"./chunk-GIRPEMTW.js";import{a as x}from"./chunk-MODXEGCU.js";import{e as J,g as B}from"./chunk-GN46S7T4.js";import{e as w,f as R}from"./chunk-ZZHIBOMT.js";import{c as H,d as U}from"./chunk-TWPG3TEQ.js";import{a as u}from"./chunk-ZLLER3HP.js";import{readFileSync as q,realpathSync as V}from"node:fs";import y from"node:path";import A from"node:os";function Q(s){let n=y.resolve(s);if(n===y.resolve(A.homedir()))return!1;let a=y.parse(n).root;if(n===a)return!1;try{let o=V(A.tmpdir());if(V(n)===o)return!1}catch{}return!0}u(Q,"isScorableProjectPath");var Z=5,ee=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),te=48,ne=.5,O=400,oe=3,re=.6,se=1;function ae(s){let n=s.bloated??[],a=new Set([...s.harmful.map(o=>o.id),...s.candidates.map(o=>o.id)]);return n.filter(o=>!a.has(o.id)).slice(0,se).map(o=>({instructionId:o.id,estimatedTokens:o.estimatedTokens,topProjectId:o.topProjectId??null,score:.55,reason:`Costs ~${o.estimatedTokens} tokens every session and measures neutral across ${o.exposures} exposed session(s) \u2014 enough data to detect an effect, and none found. Consider shortening "${o.name}" rather than removing it.`+(o.containsSafetyLanguage?" CAUTION: it contains guardrail language (destructive-command or credential rules) \u2014 preserve those lines when shortening.":"")}))}u(ae,"buildTrimProposals");async function ie(s,n,a){let o=[],i=0;for(let d of s)try{await a("/api/instruction-experiments",{instructionId:d.instructionId,projectPath:n,source:"groom"}),i++}catch(g){let m=g instanceof Error?g.message:String(g);o.push({...d,reason:`${d.reason} (not measurable by withholding: ${m})`})}return{nominated:i,unmeasurable:o}}u(ie,"nominateRemovals");function ce(s){let n=[];for(let o of s.harmful){let i=o.verdict.delta;n.push({instructionId:o.id,score:Math.min(.95,.75+Math.abs(i)),topProjectId:o.topProjectId??null,reason:`Measured harmful: sessions using "${o.name}" scored ${(i*100).toFixed(1)}pp worse across ${o.exposures} exposed session(s). Observational \u2014 review before archiving.`})}let a=new Set(s.harmful.map(o=>o.id));for(let o of s.candidates)a.has(o.id)||n.push({instructionId:o.id,score:re,topProjectId:o.topProjectId??null,reason:`Unused: "${o.name}" is ${o.reason} (${o.totalExposures} lifetime exposure(s)) but still costs context budget every session.`});return n.slice(0,oe)}u(ce,"buildRemovalProposals");function le(){let s=y.join(A.homedir(),".config","rulemetric","skills-registry.json");try{let n=q(s,"utf-8"),a=JSON.parse(n),o=new Date(a.generatedAt).getTime();return Number.isNaN(o)?"unknown":Date.now()-o>te*60*60*1e3?"stale":"fresh"}catch{return"unknown"}}u(le,"observeSkillsRegistry");var Re=u(async(s,n)=>{let a=J(),o=a!=="none";o?n.logger.info(`Scoring backend: ${a}`):n.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping relevance scoring. Removal/trim proposals still run \u2014 they need no LLM.");let i;try{i=(await w("/api/sessions/project-paths?limit="+ee)).projectPaths}catch(e){n.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(i.length===0){n.logger.info("No recent project paths; nothing to score");return}let d=new Map;try{let e=await w("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&d.set(x(t.primaryCheckoutPath),t.id)}catch(e){n.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let g=new Map;try{let e=await w(`/api/catalog?limit=200&proposable=1&contentPreview=${O}`);for(let t of e)g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.contentPreview??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await w("/api/instructions?limit=100");for(let t of e.instructions??[])g.has(t.id)||g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let m=[],p=[];try{let e=await w("/api/insights/groom-candidates");if(!e.captureHealthy)n.logger.info(`Grooming paused: ${e.reason??"capture unhealthy"}`);else{m=ce(e),p=ae(e);let t=e.safetyGuarded+e.harmfulSafetyGuarded;n.logger.info(`Removal proposals: ${m.length} (${e.harmful.length} measured-harmful, ${e.candidates.length} never-used, ${t} withheld by the safety allowlist); trim proposals: ${p.length} (${(e.bloated??[]).length} measured-neutral and expensive, ${e.trimSafetyFlagged??0} flagged as containing guardrail language)`)}}catch(e){n.logger.warn(`Failed to fetch groom candidates: ${e instanceof Error?e.message:String(e)}`)}let b=[...g.values()];if(b.length===0&&m.length===0&&p.length===0){n.logger.info("No candidate instructions and nothing to retire; nothing to score");return}n.logger.info(`Scoring ${b.length} candidates across ${i.length} project(s)`);let M=0,l=null,I=new Set;for(let e of i)try{let t=x(e);if(!Q(t)){n.logger.info(`Skipping ${t}: not a project directory (home/root)`);continue}let f=D(t),k=o&&f.length>0;f.length===0&&n.logger.info(`${t}: insufficient language signals; removal/trim only`);let v=X(t),z={name:y.basename(t),description:v.description,languages:f,topics:v.topics,dependencies:v.dependencies},E=k?U(b):[];k&&n.logger.info(`Scoring ${b.length} candidates for ${t} in ${E.length} batch(es)`);let C=[],$=0;for(let r of E)try{let c=await B(H(z,r),"",4096);if(!c){$++;continue}let T=c.recommendations??[];for(let P of T)typeof P.instructionId=="string"&&typeof P.score=="number"&&typeof P.reason=="string"&&C.push({instructionId:P.instructionId,score:P.score,reason:P.reason})}catch(c){$++,n.logger.warn(`Batch failed for ${t}: ${c instanceof Error?c.message:String(c)}`)}$>0&&n.logger.warn(`${$}/${E.length} batch(es) failed for ${t} (backend ${a}); suggestions are partial`),k&&C.length===0&&n.logger.warn(`No usable LLM output for ${t} (backend ${a})`);let K=C.filter(r=>r.score>=ne).sort((r,c)=>c.score-r.score).slice(0,Z),_=d.get(t),W=l===null||l===t;l===null&&(l=t);let N=u(r=>r.topProjectId?r.topProjectId===_:W,"placeHere"),F=m.filter(N),{nominated:L,unmeasurable:G}=await ie(F,t,R);L>0&&n.logger.info(`${t}: ${L} removal candidate(s) nominated for randomised withholding instead of the feed`);let h=[...K.map(r=>({instructionId:r.instructionId,score:r.score,reason:r.reason,kind:"add"})),...G.map(({topProjectId:r,...c})=>({...c,kind:"remove"})),...p.filter(N).map(({estimatedTokens:r,topProjectId:c,...T})=>({...T,kind:"trim"}))];if(h.length===0){n.logger.info(`Nothing to suggest for ${t}`);continue}await R("/api/instruction-suggestions/batch-upsert",{projectPath:t,..._?{projectId:_}:{},suggestions:h}),n.logger.info(`${t}: ${h.filter(r=>r.kind==="add").length} add + ${h.filter(r=>r.kind==="remove").length} remove + ${h.filter(r=>r.kind==="trim").length} trim`);for(let r of h)r.kind!=="add"&&I.add(r.instructionId);let Y=new Set(G.map(r=>r.instructionId));for(let r of F)Y.has(r.instructionId)||I.add(r.instructionId);M++}catch(t){n.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}let j=[...m.filter(e=>!I.has(e.instructionId)),...p.filter(e=>!I.has(e.instructionId)).map(({estimatedTokens:e,...t})=>t)];if(j.length>0&&l)try{let e=new Set(p.map(t=>t.instructionId));await R("/api/instruction-suggestions/batch-upsert",{projectPath:l,...d.get(l)?{projectId:d.get(l)}:{},suggestions:j.map(({topProjectId:t,...f})=>({...f,kind:e.has(f.instructionId)?"trim":"remove"}))}),n.logger.info(`Orphan sweep: ${j.length} proposal(s) whose project was not scored this run placed on ${l}`)}catch(e){n.logger.warn(`Orphan sweep failed: ${e instanceof Error?e.message:String(e)}`)}let S=le();if(S==="unknown")n.logger.warn("Skills registry unreadable or has no usable generatedAt; leaving suggestion staleness unchanged");else try{await R("/api/instruction-suggestions/mark-stale",{stale:S==="stale"}),S==="stale"?n.logger.warn("Skills registry is stale (>48h); marked catalog-skill suggestions stale"):n.logger.info("Skills registry is fresh; cleared staleness on catalog-skill suggestions")}catch{}n.logger.info(`Done: scored ${M}/${i.length} projects`)},"cronSuggestInstructions");export{Q as a,ae as b,ie as c,ce as d,Re as e};
1
+ import{c as X}from"./chunk-HOQPVOMF.js";import{b as D}from"./chunk-GIRPEMTW.js";import{a as x}from"./chunk-MODXEGCU.js";import{e as J,g as B}from"./chunk-7BCZDVIU.js";import{e as w,f as R}from"./chunk-GIXHG5FK.js";import{c as H,d as U}from"./chunk-X6CF5KTW.js";import{a as u}from"./chunk-ZLLER3HP.js";import{readFileSync as q,realpathSync as V}from"node:fs";import y from"node:path";import A from"node:os";function Q(s){let n=y.resolve(s);if(n===y.resolve(A.homedir()))return!1;let a=y.parse(n).root;if(n===a)return!1;try{let o=V(A.tmpdir());if(V(n)===o)return!1}catch{}return!0}u(Q,"isScorableProjectPath");var Z=5,ee=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),te=48,ne=.5,O=400,oe=3,re=.6,se=1;function ae(s){let n=s.bloated??[],a=new Set([...s.harmful.map(o=>o.id),...s.candidates.map(o=>o.id)]);return n.filter(o=>!a.has(o.id)).slice(0,se).map(o=>({instructionId:o.id,estimatedTokens:o.estimatedTokens,topProjectId:o.topProjectId??null,score:.55,reason:`Costs ~${o.estimatedTokens} tokens every session and measures neutral across ${o.exposures} exposed session(s) \u2014 enough data to detect an effect, and none found. Consider shortening "${o.name}" rather than removing it.`+(o.containsSafetyLanguage?" CAUTION: it contains guardrail language (destructive-command or credential rules) \u2014 preserve those lines when shortening.":"")}))}u(ae,"buildTrimProposals");async function ie(s,n,a){let o=[],i=0;for(let d of s)try{await a("/api/instruction-experiments",{instructionId:d.instructionId,projectPath:n,source:"groom"}),i++}catch(g){let m=g instanceof Error?g.message:String(g);o.push({...d,reason:`${d.reason} (not measurable by withholding: ${m})`})}return{nominated:i,unmeasurable:o}}u(ie,"nominateRemovals");function ce(s){let n=[];for(let o of s.harmful){let i=o.verdict.delta;n.push({instructionId:o.id,score:Math.min(.95,.75+Math.abs(i)),topProjectId:o.topProjectId??null,reason:`Measured harmful: sessions using "${o.name}" scored ${(i*100).toFixed(1)}pp worse across ${o.exposures} exposed session(s). Observational \u2014 review before archiving.`})}let a=new Set(s.harmful.map(o=>o.id));for(let o of s.candidates)a.has(o.id)||n.push({instructionId:o.id,score:re,topProjectId:o.topProjectId??null,reason:`Unused: "${o.name}" is ${o.reason} (${o.totalExposures} lifetime exposure(s)) but still costs context budget every session.`});return n.slice(0,oe)}u(ce,"buildRemovalProposals");function le(){let s=y.join(A.homedir(),".config","rulemetric","skills-registry.json");try{let n=q(s,"utf-8"),a=JSON.parse(n),o=new Date(a.generatedAt).getTime();return Number.isNaN(o)?"unknown":Date.now()-o>te*60*60*1e3?"stale":"fresh"}catch{return"unknown"}}u(le,"observeSkillsRegistry");var Re=u(async(s,n)=>{let a=J(),o=a!=="none";o?n.logger.info(`Scoring backend: ${a}`):n.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping relevance scoring. Removal/trim proposals still run \u2014 they need no LLM.");let i;try{i=(await w("/api/sessions/project-paths?limit="+ee)).projectPaths}catch(e){n.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(i.length===0){n.logger.info("No recent project paths; nothing to score");return}let d=new Map;try{let e=await w("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&d.set(x(t.primaryCheckoutPath),t.id)}catch(e){n.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let g=new Map;try{let e=await w(`/api/catalog?limit=200&proposable=1&contentPreview=${O}`);for(let t of e)g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.contentPreview??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await w("/api/instructions?limit=100");for(let t of e.instructions??[])g.has(t.id)||g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let m=[],p=[];try{let e=await w("/api/insights/groom-candidates");if(!e.captureHealthy)n.logger.info(`Grooming paused: ${e.reason??"capture unhealthy"}`);else{m=ce(e),p=ae(e);let t=e.safetyGuarded+e.harmfulSafetyGuarded;n.logger.info(`Removal proposals: ${m.length} (${e.harmful.length} measured-harmful, ${e.candidates.length} never-used, ${t} withheld by the safety allowlist); trim proposals: ${p.length} (${(e.bloated??[]).length} measured-neutral and expensive, ${e.trimSafetyFlagged??0} flagged as containing guardrail language)`)}}catch(e){n.logger.warn(`Failed to fetch groom candidates: ${e instanceof Error?e.message:String(e)}`)}let b=[...g.values()];if(b.length===0&&m.length===0&&p.length===0){n.logger.info("No candidate instructions and nothing to retire; nothing to score");return}n.logger.info(`Scoring ${b.length} candidates across ${i.length} project(s)`);let M=0,l=null,I=new Set;for(let e of i)try{let t=x(e);if(!Q(t)){n.logger.info(`Skipping ${t}: not a project directory (home/root)`);continue}let f=D(t),k=o&&f.length>0;f.length===0&&n.logger.info(`${t}: insufficient language signals; removal/trim only`);let v=X(t),z={name:y.basename(t),description:v.description,languages:f,topics:v.topics,dependencies:v.dependencies},E=k?U(b):[];k&&n.logger.info(`Scoring ${b.length} candidates for ${t} in ${E.length} batch(es)`);let C=[],$=0;for(let r of E)try{let c=await B(H(z,r),"",4096);if(!c){$++;continue}let T=c.recommendations??[];for(let P of T)typeof P.instructionId=="string"&&typeof P.score=="number"&&typeof P.reason=="string"&&C.push({instructionId:P.instructionId,score:P.score,reason:P.reason})}catch(c){$++,n.logger.warn(`Batch failed for ${t}: ${c instanceof Error?c.message:String(c)}`)}$>0&&n.logger.warn(`${$}/${E.length} batch(es) failed for ${t} (backend ${a}); suggestions are partial`),k&&C.length===0&&n.logger.warn(`No usable LLM output for ${t} (backend ${a})`);let K=C.filter(r=>r.score>=ne).sort((r,c)=>c.score-r.score).slice(0,Z),_=d.get(t),W=l===null||l===t;l===null&&(l=t);let N=u(r=>r.topProjectId?r.topProjectId===_:W,"placeHere"),F=m.filter(N),{nominated:L,unmeasurable:G}=await ie(F,t,R);L>0&&n.logger.info(`${t}: ${L} removal candidate(s) nominated for randomised withholding instead of the feed`);let h=[...K.map(r=>({instructionId:r.instructionId,score:r.score,reason:r.reason,kind:"add"})),...G.map(({topProjectId:r,...c})=>({...c,kind:"remove"})),...p.filter(N).map(({estimatedTokens:r,topProjectId:c,...T})=>({...T,kind:"trim"}))];if(h.length===0){n.logger.info(`Nothing to suggest for ${t}`);continue}await R("/api/instruction-suggestions/batch-upsert",{projectPath:t,..._?{projectId:_}:{},suggestions:h}),n.logger.info(`${t}: ${h.filter(r=>r.kind==="add").length} add + ${h.filter(r=>r.kind==="remove").length} remove + ${h.filter(r=>r.kind==="trim").length} trim`);for(let r of h)r.kind!=="add"&&I.add(r.instructionId);let Y=new Set(G.map(r=>r.instructionId));for(let r of F)Y.has(r.instructionId)||I.add(r.instructionId);M++}catch(t){n.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}let j=[...m.filter(e=>!I.has(e.instructionId)),...p.filter(e=>!I.has(e.instructionId)).map(({estimatedTokens:e,...t})=>t)];if(j.length>0&&l)try{let e=new Set(p.map(t=>t.instructionId));await R("/api/instruction-suggestions/batch-upsert",{projectPath:l,...d.get(l)?{projectId:d.get(l)}:{},suggestions:j.map(({topProjectId:t,...f})=>({...f,kind:e.has(f.instructionId)?"trim":"remove"}))}),n.logger.info(`Orphan sweep: ${j.length} proposal(s) whose project was not scored this run placed on ${l}`)}catch(e){n.logger.warn(`Orphan sweep failed: ${e instanceof Error?e.message:String(e)}`)}let S=le();if(S==="unknown")n.logger.warn("Skills registry unreadable or has no usable generatedAt; leaving suggestion staleness unchanged");else try{await R("/api/instruction-suggestions/mark-stale",{stale:S==="stale"}),S==="stale"?n.logger.warn("Skills registry is stale (>48h); marked catalog-skill suggestions stale"):n.logger.info("Skills registry is fresh; cleared staleness on catalog-skill suggestions")}catch{}n.logger.info(`Done: scored ${M}/${i.length} projects`)},"cronSuggestInstructions");export{Q as a,ae as b,ie as c,ce as d,Re as e};
@@ -1,4 +1,4 @@
1
- import{e as d}from"./chunk-QWCEZEDO.js";import{a as R,g as v,h as T,j as I,m as C}from"./chunk-OZQNSELV.js";import{d as g}from"./chunk-SBGXIPRN.js";import{e as _}from"./chunk-ZZHIBOMT.js";import{g as m,l as k}from"./chunk-PZNWH4VQ.js";import{a as i}from"./chunk-ZLLER3HP.js";import{execSync as j}from"node:child_process";import{existsSync as p,readFileSync as y}from"node:fs";import{homedir as f}from"node:os";import{join as a}from"node:path";var P=["install","auth","hooks","worker"],O=["judge"],M=[...P,...O];function $(){return{projectPath:process.cwd(),configDir:k()}}i($,"defaultContext");var A=a(f(),".mitmproxy","mitmproxy-ca-cert.pem");function S(e){if(!e)return"";if(e.length<=8)return"*".repeat(e.length);let t=e.slice(0,4),n=e.slice(-4);return`${t}${"*".repeat(Math.max(4,e.length-8))}${n}`}i(S,"maskToken");function te(e,t){let n=e===null?[]:e.replace(/\n$/,"").split(`
1
+ import{e as d}from"./chunk-QWCEZEDO.js";import{a as R,g as v,h as T,j as I,m as C}from"./chunk-OZQNSELV.js";import{d as g}from"./chunk-GPBN4ROE.js";import{e as _}from"./chunk-GIXHG5FK.js";import{g as m,l as k}from"./chunk-PZNWH4VQ.js";import{a as i}from"./chunk-ZLLER3HP.js";import{execSync as j}from"node:child_process";import{existsSync as p,readFileSync as y}from"node:fs";import{homedir as f}from"node:os";import{join as a}from"node:path";var P=["install","auth","hooks","worker"],O=["judge"],M=[...P,...O];function $(){return{projectPath:process.cwd(),configDir:k()}}i($,"defaultContext");var A=a(f(),".mitmproxy","mitmproxy-ca-cert.pem");function S(e){if(!e)return"";if(e.length<=8)return"*".repeat(e.length);let t=e.slice(0,4),n=e.slice(-4);return`${t}${"*".repeat(Math.max(4,e.length-8))}${n}`}i(S,"maskToken");function te(e,t){let n=e===null?[]:e.replace(/\n$/,"").split(`
2
2
  `),o=t===null?[]:t.replace(/\n$/,"").split(`
3
3
  `),s=[],u=Math.max(n.length,o.length);for(let c=0;c<u;c++){let l=n[c],r=o[c];l===r?s.push(` ${l}`):(l!==void 0&&s.push(`-${l}`),r!==void 0&&s.push(`+${r}`))}return s.join(`
4
4
  `)}i(te,"renderDiff");function x(e,t){let n=a(e,"env");if(!p(n))return null;try{let s=y(n,"utf-8").match(new RegExp(`^${t}=(.+)$`,"m"));return s?s[1]:null}catch{return null}}i(x,"readEnvValue");async function b(){if(!m())return!1;try{return(await Promise.race([_("/api/setup/status"),new Promise((t,n)=>setTimeout(()=>n(new Error("setup/status timeout")),2500))]))?.workerActive===!0}catch{return!1}}i(b,"workerActive");function E(e,t){let n=a(e,".claude",t),o={},s=null;if(p(n))try{s=y(n,"utf-8").replace(/\n$/,""),o=JSON.parse(s)}catch{o={}}return{settings:o,before:s}}i(E,"readProjectSettings");function D(e){let{settings:t,before:n}=E(e,"settings.local.json");return v(t),{before:n,after:JSON.stringify(t,null,2)}}i(D,"projectHooksSettings");function N(e){let{settings:t,before:n}=E(e,"settings.local.json"),o={...t.env??{}};return o.HTTPS_PROXY=`http://localhost:${d}`,o.NO_PROXY=I,o.NODE_EXTRA_CA_CERTS=A,{before:n,after:JSON.stringify({...t,env:o},null,2)}}i(N,"projectProxyEnvSettings");function U(e){let{settings:t,before:n}=E(e,"settings.json");if(n===null)return null;let{removed:o}=C(t,d);return o?{before:n,after:JSON.stringify(t,null,2)}:null}i(U,"projectSharedSettingsMigration");var Y=a(f(),"Library","LaunchAgents","com.rulemetric.worker.plist"),G=a(f(),".config","systemd","user","rulemetric-worker.service");function h(e){j(e,{stdio:"inherit"})}i(h,"runCommand");var L=[{id:"install",title:"Install the CLI",command:"npm install -g @rulemetric/cli",async detect(){return m()||await b()},async plan(){return{id:"install",title:"Install the CLI",command:"npm install -g @rulemetric/cli",artifacts:[{path:"npm install -g @rulemetric/cli",kind:"command",before:null,after:"rulemetric --version # verifies the binary is on PATH"}]}},async apply(){h("npm install -g @rulemetric/cli")}},{id:"auth",title:"Authenticate",command:"rulemetric auth login",async detect(){return m()},async plan(e){let t=a(e.configDir,"env"),n=null;if(p(t))try{n=X(y(t,"utf-8"))}catch{n="(unreadable)"}let o=x(e.configDir,"RULEMETRIC_ACCESS_TOKEN"),u=[`RULEMETRIC_ACCESS_TOKEN=${S(o||"<token-from-login>")}`],c=x(e.configDir,"RULEMETRIC_API_KEY");c&&u.push(`RULEMETRIC_API_KEY=${S(c)}`);let l=process.env.RULEMETRIC_API_URL;l&&u.push(`RULEMETRIC_API_URL=${l}`);let r=u.join(`
@@ -1 +1 @@
1
- import{b as g}from"./chunk-3ZHVP3KE.js";import{d as k,e as h}from"./chunk-O62OLKQL.js";import{e as m,i as f}from"./chunk-ZZHIBOMT.js";import{a as c}from"./chunk-ZLLER3HP.js";import{existsSync as b}from"node:fs";async function w($,y){let r=c(t=>y?.logger?.info?.(t)??console.log(t),"log"),{projectPath:s}=$,n=`[cron_retire_unused_skills] ${s}`;if(!s||!b(s))return{skipped:"project-missing",reason:`${s} does not exist on this machine \u2014 refusing to delete files for a project that is not here.`};let o=await m("/api/insights/groom-candidates"),e=g({captureHealthy:o.skillCaptureHealthy===!0,captureReason:o.skillCaptureHealthy===void 0?"API did not report skill capture health (older deployment)":o.skillCaptureReason,candidates:o.unusedSkills??[]});if(e.refused)return r(`${n} ${e.refused}: ${e.summary}`),{skipped:e.refused,reason:e.summary,held:e.held.length};r(`${n} ${e.summary}`);let a=[],d=[],l=0;for(let t of e.retire){let u=k({kind:"skill_file",target:t.name,cwd:s});if(!u.ok){l+=1,r(`${n} could not plan removal of ${t.name}: ${u.refusal??"unresolved"}`);continue}let R=new Date().toISOString().replace(/[:.]/g,"-"),i=h(u,R);if(!i.applied){l+=1,r(`${n} failed to remove ${t.name}: ${i.error??"unknown error"}`);continue}a.push(t.name),i.backupPath&&d.push(i.backupPath),r(`${n} retired ${t.name} (backup: ${i.backupPath??"none"})`);try{await f(`/api/instructions/${t.instructionId}`)}catch(p){r(`${n} removed ${t.name} but could not archive its instruction row: ${p instanceof Error?p.message:String(p)}`)}}return{retired:a.length,failed:l,held:e.held.length,names:a,backups:d,reason:e.summary}}c(w,"cronRetireUnusedSkills");export{w as a};
1
+ import{b as g}from"./chunk-3ZHVP3KE.js";import{d as k,e as h}from"./chunk-FXQS7AEZ.js";import{e as m,i as f}from"./chunk-GIXHG5FK.js";import{a as c}from"./chunk-ZLLER3HP.js";import{existsSync as b}from"node:fs";async function w($,y){let r=c(t=>y?.logger?.info?.(t)??console.log(t),"log"),{projectPath:s}=$,n=`[cron_retire_unused_skills] ${s}`;if(!s||!b(s))return{skipped:"project-missing",reason:`${s} does not exist on this machine \u2014 refusing to delete files for a project that is not here.`};let o=await m("/api/insights/groom-candidates"),e=g({captureHealthy:o.skillCaptureHealthy===!0,captureReason:o.skillCaptureHealthy===void 0?"API did not report skill capture health (older deployment)":o.skillCaptureReason,candidates:o.unusedSkills??[]});if(e.refused)return r(`${n} ${e.refused}: ${e.summary}`),{skipped:e.refused,reason:e.summary,held:e.held.length};r(`${n} ${e.summary}`);let a=[],d=[],l=0;for(let t of e.retire){let u=k({kind:"skill_file",target:t.name,cwd:s});if(!u.ok){l+=1,r(`${n} could not plan removal of ${t.name}: ${u.refusal??"unresolved"}`);continue}let R=new Date().toISOString().replace(/[:.]/g,"-"),i=h(u,R);if(!i.applied){l+=1,r(`${n} failed to remove ${t.name}: ${i.error??"unknown error"}`);continue}a.push(t.name),i.backupPath&&d.push(i.backupPath),r(`${n} retired ${t.name} (backup: ${i.backupPath??"none"})`);try{await f(`/api/instructions/${t.instructionId}`)}catch(p){r(`${n} removed ${t.name} but could not archive its instruction row: ${p instanceof Error?p.message:String(p)}`)}}return{retired:a.length,failed:l,held:e.held.length,names:a,backups:d,reason:e.summary}}c(w,"cronRetireUnusedSkills");export{w 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-WL5ZWQAS.js";import{b as c,e as y,f as m}from"./chunk-GIXHG5FK.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,4 +1,4 @@
1
- import{a as U,b as F}from"./chunk-J7UZXRTH.js";import{a as h,b as I}from"./chunk-BVOXWAJO.js";import{a as w,b as k,e as R}from"./chunk-LJRE3LZ2.js";import{d as $}from"./chunk-GYNZ3OZF.js";import{g as C,i as D,j as P}from"./chunk-UPFH72PF.js";import{e as v,f as x,i as j}from"./chunk-ZZHIBOMT.js";import{D as S,F as b,G as T,o as A}from"./chunk-TWPG3TEQ.js";import{a as l}from"./chunk-ZLLER3HP.js";import*as u from"node:fs";import*as m from"node:path";var O=new Set(["mcp","subagent","feature"]);function ie(e,t,n){return L(m.join(e,"CLAUDE.md"),t,n)}l(ie,"appendToCLAUDEmd");function L(e,t,n){let i=w(t),s=k(t),a=u.existsSync(e)?u.readFileSync(e,"utf8"):"";if(a.includes(i))return!1;let p=`${a.length>0&&!a.endsWith(`
1
+ import{a as U,b as F}from"./chunk-6T6YFPBW.js";import{a as h,b as I}from"./chunk-ISYU5BMU.js";import{a as w,b as k,e as R}from"./chunk-LJRE3LZ2.js";import{d as $}from"./chunk-GYNZ3OZF.js";import{g as C,i as D,j as P}from"./chunk-UPFH72PF.js";import{e as v,f as x,i as j}from"./chunk-GIXHG5FK.js";import{D as S,F as b,G as T,o as A}from"./chunk-X6CF5KTW.js";import{a as l}from"./chunk-ZLLER3HP.js";import*as u from"node:fs";import*as m from"node:path";var O=new Set(["mcp","subagent","feature"]);function ie(e,t,n){return L(m.join(e,"CLAUDE.md"),t,n)}l(ie,"appendToCLAUDEmd");function L(e,t,n){let i=w(t),s=k(t),a=u.existsSync(e)?u.readFileSync(e,"utf8"):"";if(a.includes(i))return!1;let p=`${a.length>0&&!a.endsWith(`
2
2
  `)?`
3
3
 
4
4
  `:a.length>0?`