@rulemetric/cli 0.8.0 → 0.10.0

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 (222) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/{chunk-ZE2PGHJQ.js → chunk-3A7RPMNN.js} +1 -1
  3. package/dist/{chunk-EN43UYBN.js → chunk-3IH22LYI.js} +1 -1
  4. package/dist/{chunk-CNOD6HWU.js → chunk-3VYV6ZYB.js} +1 -1
  5. package/dist/chunk-4STKWINN.js +1 -0
  6. package/dist/{chunk-T4ZIK6RS.js → chunk-4T2FJLDA.js} +1 -1
  7. package/dist/{chunk-Z2MZOQCD.js → chunk-553EGRRW.js} +1 -1
  8. package/dist/{chunk-NIRD7ETU.js → chunk-6SUN4NOY.js} +1 -1
  9. package/dist/{chunk-MBHDTW3M.js → chunk-7BYMIHIB.js} +1 -1
  10. package/dist/{chunk-5XUN743A.js → chunk-7L4P7FCK.js} +1 -1
  11. package/dist/chunk-7LXG3DDL.js +1 -0
  12. package/dist/{chunk-4VZLIGMS.js → chunk-AFYZYXQ3.js} +1 -1
  13. package/dist/{chunk-TU2AR6XO.js → chunk-B22HYCBV.js} +1 -1
  14. package/dist/{chunk-KGQ5W54Y.js → chunk-BN54LTXD.js} +1 -1
  15. package/dist/{chunk-W76EQSEV.js → chunk-DAD4YBYC.js} +1 -1
  16. package/dist/chunk-EOJ3LAP6.js +1 -0
  17. package/dist/{chunk-YW3JQKGY.js → chunk-ERNDMEYG.js} +1 -1
  18. package/dist/{chunk-IQCE4VBP.js → chunk-F5WE6JXK.js} +1 -1
  19. package/dist/{chunk-5ZACMVV3.js → chunk-FH55JFUY.js} +1 -1
  20. package/dist/chunk-FK73GD2X.js +2 -0
  21. package/dist/{chunk-ULMEKK7C.js → chunk-FORJT5H6.js} +1 -1
  22. package/dist/chunk-FP6QAPNK.js +1 -0
  23. package/dist/chunk-G7V4ZZZ3.js +1 -0
  24. package/dist/chunk-H6MN2AAF.js +11 -0
  25. package/dist/chunk-HKC224ZO.js +1 -0
  26. package/dist/chunk-HOQPVOMF.js +2 -0
  27. package/dist/chunk-KGURGIZ2.js +1 -0
  28. package/dist/{chunk-H7VP4SDO.js → chunk-L54TWWBY.js} +1 -1
  29. package/dist/{chunk-4Q72B377.js → chunk-MIOMKROL.js} +1 -1
  30. package/dist/{chunk-B3BHB26P.js → chunk-MODFTCZY.js} +1 -1
  31. package/dist/{chunk-LLNQZ4SZ.js → chunk-N7ML6X6Y.js} +1 -1
  32. package/dist/{chunk-AI6FMGKM.js → chunk-NDZVH5QW.js} +1 -1
  33. package/dist/chunk-NTJKAIHS.js +1 -0
  34. package/dist/chunk-OFC7HIBX.js +1 -0
  35. package/dist/chunk-OFSUKSZ2.js +1 -0
  36. package/dist/{chunk-6VKQT2J3.js → chunk-OI7MOALX.js} +1 -1
  37. package/dist/{chunk-NTKO4H2K.js → chunk-OPUI7CM2.js} +1 -1
  38. package/dist/chunk-PZNWH4VQ.js +7 -0
  39. package/dist/{chunk-FAXV5AAG.js → chunk-RSMLOYVJ.js} +1 -1
  40. package/dist/chunk-S7YDBO42.js +1 -0
  41. package/dist/{chunk-LWI5K6T4.js → chunk-SE5SRPIB.js} +1 -1
  42. package/dist/{chunk-4L2ZEIRE.js → chunk-TCR7TSAJ.js} +1 -1
  43. package/dist/chunk-TZA4HAVF.js +1 -0
  44. package/dist/chunk-UC377K7P.js +17 -0
  45. package/dist/chunk-UY5QYCTK.js +1 -0
  46. package/dist/{chunk-XRTZU7IZ.js → chunk-V5MJ4ICC.js} +1 -1
  47. package/dist/chunk-VKVWEG5J.js +11 -0
  48. package/dist/chunk-VXM4PEED.js +46 -0
  49. package/dist/{chunk-MOAJLSYV.js → chunk-W2SG3KND.js} +1 -1
  50. package/dist/{chunk-5KD2N2MH.js → chunk-W65UX4FC.js} +1 -1
  51. package/dist/{chunk-BLCMXTIK.js → chunk-WEBB76XA.js} +1 -1
  52. package/dist/{chunk-QY3UKLDE.js → chunk-WVJEBQYU.js} +1 -1
  53. package/dist/{chunk-NBTC5FNV.js → chunk-X23L2MF6.js} +1 -1
  54. package/dist/{chunk-HXZM2UHO.js → chunk-X4N4MT2I.js} +1 -1
  55. package/dist/{chunk-YQ56FQEO.js → chunk-XFAFMYIP.js} +1 -1
  56. package/dist/{chunk-RJLAAKEN.js → chunk-XILSJP4P.js} +1 -1
  57. package/dist/{chunk-CF7FUQQ4.js → chunk-YVM2CHNV.js} +2 -2
  58. package/dist/{chunk-5RUEROLC.js → chunk-YY53MMH7.js} +1 -1
  59. package/dist/{chunk-O2BKBW7Z.js → chunk-ZJOYLBRU.js} +1 -1
  60. package/dist/commands/antigravity/backfill.js +1 -1
  61. package/dist/commands/auth/create-key.js +1 -1
  62. package/dist/commands/auth/login.js +1 -1
  63. package/dist/commands/auth/logout.js +1 -1
  64. package/dist/commands/auth/revoke-key.js +1 -1
  65. package/dist/commands/auth/signup.js +1 -1
  66. package/dist/commands/auth/status.js +1 -1
  67. package/dist/commands/capture/scope.js +1 -1
  68. package/dist/commands/catalog/index.js +1 -1
  69. package/dist/commands/catalog/recommend.js +1 -1
  70. package/dist/commands/convert.js +1 -1
  71. package/dist/commands/converters.js +1 -1
  72. package/dist/commands/crons/list.js +1 -1
  73. package/dist/commands/crons/run.js +1 -1
  74. package/dist/commands/dashboard.js +1 -1
  75. package/dist/commands/diagnostics.js +1 -1
  76. package/dist/commands/eval-targets/create.js +1 -1
  77. package/dist/commands/eval-targets/list.js +1 -1
  78. package/dist/commands/evals/agent.js +1 -1
  79. package/dist/commands/evals/auto-run.js +1 -1
  80. package/dist/commands/evals/benchmark.js +1 -1
  81. package/dist/commands/evals/compare.js +1 -1
  82. package/dist/commands/evals/create.js +1 -1
  83. package/dist/commands/evals/optimize-description.js +1 -1
  84. package/dist/commands/evals/optimize.js +1 -1
  85. package/dist/commands/evals/refine-cases.js +1 -1
  86. package/dist/commands/evals/run.js +1 -1
  87. package/dist/commands/evals/validate-judge.js +1 -1
  88. package/dist/commands/experiments/list.js +1 -1
  89. package/dist/commands/gateway/ensure.js +1 -1
  90. package/dist/commands/hooks/install.js +1 -1
  91. package/dist/commands/hooks/run.js +1 -1
  92. package/dist/commands/hooks/uninstall.js +1 -1
  93. package/dist/commands/import.js +1 -1
  94. package/dist/commands/instructions/create.js +1 -1
  95. package/dist/commands/instructions/dedupe.js +1 -0
  96. package/dist/commands/instructions/delete.js +1 -1
  97. package/dist/commands/instructions/fork.js +1 -1
  98. package/dist/commands/instructions/get.js +1 -1
  99. package/dist/commands/instructions/list.js +1 -1
  100. package/dist/commands/instructions/promote.js +1 -1
  101. package/dist/commands/instructions/pull.js +1 -1
  102. package/dist/commands/instructions/restore.js +1 -1
  103. package/dist/commands/instructions/retract.js +1 -1
  104. package/dist/commands/instructions/upstream.js +1 -1
  105. package/dist/commands/instructions/versions.js +1 -1
  106. package/dist/commands/launcher.js +1 -1
  107. package/dist/commands/local/down.js +1 -1
  108. package/dist/commands/local/up.js +1 -1
  109. package/dist/commands/org/current.js +1 -1
  110. package/dist/commands/org/list.js +1 -1
  111. package/dist/commands/org/switch.js +1 -1
  112. package/dist/commands/packs/add-instruction.js +1 -1
  113. package/dist/commands/packs/apply.js +1 -1
  114. package/dist/commands/packs/create.js +1 -1
  115. package/dist/commands/packs/fork.js +1 -1
  116. package/dist/commands/packs/get.js +1 -1
  117. package/dist/commands/packs/list.js +1 -1
  118. package/dist/commands/packs/remove-instruction.js +1 -1
  119. package/dist/commands/proxy/env.js +1 -1
  120. package/dist/commands/proxy/logs.js +1 -1
  121. package/dist/commands/proxy/restart.js +1 -1
  122. package/dist/commands/proxy/setup.js +1 -1
  123. package/dist/commands/proxy/start.js +1 -1
  124. package/dist/commands/proxy/status.js +1 -1
  125. package/dist/commands/proxy/stop.js +1 -1
  126. package/dist/commands/research/backfill.js +1 -1
  127. package/dist/commands/research/tail-transcript.js +1 -1
  128. package/dist/commands/service/install.js +6 -6
  129. package/dist/commands/service/status.js +1 -1
  130. package/dist/commands/service/uninstall.js +1 -1
  131. package/dist/commands/sessions/analyze.js +1 -1
  132. package/dist/commands/sessions/delete.js +1 -1
  133. package/dist/commands/sessions/end.js +1 -1
  134. package/dist/commands/sessions/import.js +1 -1
  135. package/dist/commands/sessions/list.js +1 -1
  136. package/dist/commands/sessions/start.js +1 -1
  137. package/dist/commands/setup.js +1 -1
  138. package/dist/commands/skills/export-approved.js +1 -1
  139. package/dist/commands/skills/install.js +1 -1
  140. package/dist/commands/skills/list.js +1 -1
  141. package/dist/commands/skills/publish.js +1 -1
  142. package/dist/commands/skills/search.js +1 -1
  143. package/dist/commands/skills/update.js +1 -1
  144. package/dist/commands/suggestions/accept.js +1 -11
  145. package/dist/commands/suggestions/auto.js +1 -0
  146. package/dist/commands/suggestions/dismiss.js +1 -1
  147. package/dist/commands/suggestions/list.js +1 -1
  148. package/dist/commands/suggestions/refresh.js +1 -1
  149. package/dist/commands/suggestions/undo.js +1 -0
  150. package/dist/dashboard/Dashboard.js +1 -1
  151. package/dist/dashboard/data.js +1 -1
  152. package/dist/dashboard/launcher/ActiveJobsList.js +1 -1
  153. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  154. package/dist/dashboard/launcher/NewLaunchForm.js +1 -1
  155. package/dist/dashboard/launcher/api.js +1 -1
  156. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  157. package/dist/lib/active-org-refresh.js +1 -1
  158. package/dist/lib/agent-loop.js +1 -1
  159. package/dist/lib/antigravity-transcript.js +1 -1
  160. package/dist/lib/api-client.js +1 -1
  161. package/dist/lib/auth.js +1 -1
  162. package/dist/lib/claude-md-blocks.js +1 -0
  163. package/dist/lib/codex-exec.js +1 -1
  164. package/dist/lib/ensure-api-key.js +1 -1
  165. package/dist/lib/ensure-fresh-token.js +1 -1
  166. package/dist/lib/eval-analyzer.js +1 -1
  167. package/dist/lib/eval-benchmark.js +1 -1
  168. package/dist/lib/eval-candidate-run.js +1 -1
  169. package/dist/lib/eval-case-generator.js +1 -1
  170. package/dist/lib/eval-conversation-handler.js +1 -1
  171. package/dist/lib/eval-executor.js +1 -1
  172. package/dist/lib/eval-failure-classifier.js +1 -0
  173. package/dist/lib/eval-grader.js +1 -1
  174. package/dist/lib/eval-meta-judge.js +1 -1
  175. package/dist/lib/eval-quota-gate.js +1 -0
  176. package/dist/lib/eval-resume.js +1 -0
  177. package/dist/lib/eval-run-batch.js +1 -1
  178. package/dist/lib/eval-trigger-tester.js +1 -1
  179. package/dist/lib/evolution-enrolment.js +1 -0
  180. package/dist/lib/handlers/cron-auto-accept-suggestions.js +1 -0
  181. package/dist/lib/handlers/cron-eval-autorun.js +1 -1
  182. package/dist/lib/handlers/cron-instruction-evolution.js +1 -1
  183. package/dist/lib/handlers/cron-instruction-training.js +1 -0
  184. package/dist/lib/handlers/cron-refresh-pricing.js +1 -1
  185. package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
  186. package/dist/lib/handlers/distill-memories.js +1 -1
  187. package/dist/lib/handlers/process-changelog.js +1 -1
  188. package/dist/lib/handlers/process-conversation.js +1 -1
  189. package/dist/lib/handlers/process-eval.js +1 -1
  190. package/dist/lib/handlers/process-insights.js +1 -1
  191. package/dist/lib/handlers/process-judge-review.js +1 -1
  192. package/dist/lib/handlers/process-launch.js +1 -1
  193. package/dist/lib/handlers/process-memory-ab.js +1 -1
  194. package/dist/lib/handlers/process-run-cleanup.js +1 -1
  195. package/dist/lib/handlers/process-session-goal.js +1 -1
  196. package/dist/lib/instruction-proposer.js +1 -1
  197. package/dist/lib/judge-review-runner.js +1 -1
  198. package/dist/lib/llm-client.js +1 -1
  199. package/dist/lib/manual-tasks.js +1 -1
  200. package/dist/lib/project-context.js +1 -0
  201. package/dist/lib/research-client.js +1 -1
  202. package/dist/lib/retraction.js +1 -1
  203. package/dist/lib/reviewer-detect.js +1 -1
  204. package/dist/lib/setup-steps.js +1 -1
  205. package/dist/lib/suggestion-accept.js +1 -0
  206. package/dist/lib/telemetry.js +1 -1
  207. package/dist/lib/terminal-target-heartbeat.js +1 -1
  208. package/oclif.manifest.json +802 -644
  209. package/package.json +7 -6
  210. package/dist/chunk-7QQSYEPT.js +0 -1
  211. package/dist/chunk-A4FYFRN7.js +0 -1
  212. package/dist/chunk-ATL4WZBF.js +0 -1
  213. package/dist/chunk-BAVLNWO4.js +0 -1
  214. package/dist/chunk-DBELYMDA.js +0 -1
  215. package/dist/chunk-EVAQBD5V.js +0 -1
  216. package/dist/chunk-FAZMKMTC.js +0 -45
  217. package/dist/chunk-HMMO27U4.js +0 -1
  218. package/dist/chunk-JZ5Z2BRO.js +0 -7
  219. package/dist/chunk-KLEF5D3A.js +0 -1
  220. package/dist/chunk-UKN2YVY4.js +0 -17
  221. package/dist/chunk-XJYNMJHH.js +0 -9
  222. package/dist/index.js +0 -1
@@ -1 +1 @@
1
- import{a}from"./chunk-LWI5K6T4.js";import"./chunk-IZTIYR5Q.js";import"./chunk-6VKQT2J3.js";import"./chunk-NIRD7ETU.js";import"./chunk-QY3UKLDE.js";import"./chunk-3AV3GTMP.js";import"./chunk-KLEF5D3A.js";import"./chunk-JZ5Z2BRO.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
1
+ import{a}from"./chunk-SE5SRPIB.js";import"./chunk-IZTIYR5Q.js";import"./chunk-OI7MOALX.js";import"./chunk-6SUN4NOY.js";import"./chunk-WVJEBQYU.js";import"./chunk-3AV3GTMP.js";import"./chunk-OFC7HIBX.js";import"./chunk-VXM4PEED.js";import"./chunk-PZNWH4VQ.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
@@ -1,4 +1,4 @@
1
- import{f as g,g as f,h as p,i as m,j as k}from"./chunk-FAZMKMTC.js";import{a as o}from"./chunk-ZLLER3HP.js";import{existsSync as d,readFileSync as u,writeFileSync as _,copyFileSync as v,rmSync as S,statSync as P,readdirSync as x,mkdirSync as R}from"node:fs";import{join as i,dirname as $}from"node:path";import{homedir as c}from"node:os";var j=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function h(e){return j.some(t=>e.includes(t))}o(h,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}o(K,"backupPathFor");function y(e){return e.split(`
1
+ import{f as g,g as f,h as p,i as m,j as k}from"./chunk-VXM4PEED.js";import{a as o}from"./chunk-ZLLER3HP.js";import{existsSync as d,readFileSync as u,writeFileSync as _,copyFileSync as v,rmSync as S,statSync as P,readdirSync as x,mkdirSync as R}from"node:fs";import{join as i,dirname as $}from"node:path";import{homedir as c}from"node:os";var j=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function h(e){return j.some(t=>e.includes(t))}o(h,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}o(K,"backupPathFor");function y(e){return e.split(`
2
2
  `).slice(0,40).map(t=>`- ${t}`).join(`
3
3
  `)}o(y,"shortDiff");function a(e,t,n){return{kind:e,path:t,ok:!1,refusal:n,preview:"",warnings:[]}}o(a,"refuse");function M(e){let[t,...n]=e.split("::"),r=n.join("::");if(!r)return null;switch(t){case"claude_md":return{kind:"claude_md_section",target:r};case"memory":return{kind:"memory_section",target:r};case"skill":return{kind:"skill_file",target:r};default:return null}}o(M,"pathFromContextIdentity");function F(e,t){let n=e.replace(/^skills--/,"");return[...[i(t,".claude","skills",n,"SKILL.md"),i(t,".claude","skills",`${n}.md`),i(c(),".claude","skills",n,"SKILL.md"),i(c(),".claude","skills",`${n}.md`)],...I(n)]}o(F,"candidateSkillPaths");function I(e){let t=i(c(),".claude","plugins","marketplaces");if(!d(t))return[];let n=[];try{for(let r of x(t))n.push(i(t,r,"skills",e,"SKILL.md"),i(t,r,"plugins",e,"SKILL.md"),i(t,r,"skills",`${e}.md`))}catch{}return n}o(I,"pluginSkillPaths");function O(e){switch(e.kind){case"claude_md_section":case"memory_section":case"claude_md_block":return C(e);case"skill_file":return D(e);case"settings_hook":case"mcp_server":return L(e)}}o(O,"planRetraction");function C(e){let t=e.target;if(!d(t))return a(e.kind,t,`File does not exist: ${t}`);if(h(t))return a(e.kind,t,`Refusing to edit a path this tool does not own: ${t}`);let n=u(t,"utf-8"),r=e.body?f(n,e.body):g(n,e.heading??"");if(!r.removed){let l={"not-found":"The content is not present in this file (already removed, or edited since).",ambiguous:"The content appears more than once \u2014 refusing to guess which copy the verdict was about.","would-empty-file":"Removing it would empty the file. Delete the file by hand if that is really the intent."}[r.reason??"not-found"];return a(e.kind,t,l)}let s=[];return w(t,e.cwd)||s.push("This file is not tracked by git in this repo \u2014 the timestamped backup is your only undo."),{kind:e.kind,path:t,ok:!0,preview:y(r.removedText??""),nextContent:r.content,warnings:s}}o(C,"planFileEdit");function D(e){let t=e.target.startsWith("/")?[e.target]:F(e.target,e.cwd),n=t.find(l=>d(l));if(!n)return a("skill_file",t[0]??e.target,`No local skill file found for "${e.target}". Searched:
4
4
  ${t.join(`
@@ -1 +1 @@
1
- import{a as d}from"./chunk-CJRYYV76.js";import{b as u}from"./chunk-ATL4WZBF.js";import{e as o}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";async function w(e,g){let i=c(a=>g?.logger?.info?.(a)??console.log(a),"log"),{evalTargetId:n}=e,s=await o(`/api/eval-targets/${n}/judge-calibration`),t=d({powered:s.powerCheck.powered,mde:s.powerCheck.mde??Number.POSITIVE_INFINITY},s.caseDiscrimination??{total:0,discriminating:0,nonDiscriminating:0,unpaired:0},{runsCompleted:0,maxRuns:e.maxRuns??24,batchesRun:0,maxBatches:1});if(t.action==="stop")return i(`[cron_eval_autorun] ${n}: ${t.reason}`),{skipped:t.code,reason:t.reason};let r=await o(`/api/eval-targets/${n}`),l=(await o(`/api/eval-targets/${n}/evals`)).filter(a=>!a.retiredAt);if(l.length===0)return{skipped:"no-live-cases"};let{completed:m,failed:p}=await u({cases:l,targetContent:r.content,concurrency:2,runNumber:1,opts:{targetId:n,targetVersion:r.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:r.type,targetName:r.name},onLog:i});return i(`[cron_eval_autorun] ${r.name}: ${m} completed, ${p} failed`),{ranRuns:m,reason:t.reason}}c(w,"cronEvalAutorun");export{w as a};
1
+ import{a as d}from"./chunk-CJRYYV76.js";import{b as u}from"./chunk-EOJ3LAP6.js";import{e as o}from"./chunk-OFC7HIBX.js";import{a as c}from"./chunk-ZLLER3HP.js";async function w(e,g){let i=c(a=>g?.logger?.info?.(a)??console.log(a),"log"),{evalTargetId:n}=e,s=await o(`/api/eval-targets/${n}/judge-calibration`),t=d({powered:s.powerCheck.powered,mde:s.powerCheck.mde??Number.POSITIVE_INFINITY},s.caseDiscrimination??{total:0,discriminating:0,nonDiscriminating:0,unpaired:0},{runsCompleted:0,maxRuns:e.maxRuns??24,batchesRun:0,maxBatches:1});if(t.action==="stop")return i(`[cron_eval_autorun] ${n}: ${t.reason}`),{skipped:t.code,reason:t.reason};let r=await o(`/api/eval-targets/${n}`),l=(await o(`/api/eval-targets/${n}/evals`)).filter(a=>!a.retiredAt);if(l.length===0)return{skipped:"no-live-cases"};let{completed:m,failed:p}=await u({cases:l,targetContent:r.content,concurrency:2,runNumber:1,opts:{targetId:n,targetVersion:r.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:r.type,targetName:r.name},onLog:i});return i(`[cron_eval_autorun] ${r.name}: ${m} completed, ${p} failed`),{ranRuns:m,reason:t.reason}}c(w,"cronEvalAutorun");export{w as a};
@@ -1,4 +1,4 @@
1
- import{f as u}from"./chunk-B3BHB26P.js";import{a}from"./chunk-ZLLER3HP.js";var h=5,l=a(t=>t==null?"n/a":`${Math.round(t*100)}%`,"pct");function d(t){return!t||t.length===0?"":`
1
+ import{f as u}from"./chunk-MODFTCZY.js";import{a}from"./chunk-ZLLER3HP.js";var h=5,l=a(t=>t==null?"n/a":`${Math.round(t*100)}%`,"pct");function d(t){return!t||t.length===0?"":`
2
2
 
3
3
  ## Prior cases that FAILED to discriminate \u2014 do NOT reproduce these
4
4
  The cases below were run WITH and WITHOUT the instruction and did NOT separate the two
@@ -0,0 +1 @@
1
+ import{c as D}from"./chunk-HOQPVOMF.js";import{b as B}from"./chunk-GIRPEMTW.js";import{a as T}from"./chunk-MODXEGCU.js";import{d as U,f as J}from"./chunk-MODFTCZY.js";import{e as w,f as R}from"./chunk-OFC7HIBX.js";import{b as G,c as H}from"./chunk-VXM4PEED.js";import{a as u}from"./chunk-ZLLER3HP.js";import{readFileSync as Y,realpathSync as X}from"node:fs";import y from"node:path";import O from"node:os";function q(s){let o=y.resolve(s);if(o===y.resolve(O.homedir()))return!1;let a=y.parse(o).root;if(o===a)return!1;try{let n=X(O.tmpdir());if(X(o)===n)return!1}catch{}return!0}u(q,"isScorableProjectPath");var Q=5,Z=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),tt=48,et=.5,x=400,ot=3,nt=.6,rt=1;function st(s){let o=s.bloated??[],a=new Set([...s.harmful.map(n=>n.id),...s.candidates.map(n=>n.id)]);return o.filter(n=>!a.has(n.id)).slice(0,rt).map(n=>({instructionId:n.id,estimatedTokens:n.estimatedTokens,topProjectId:n.topProjectId??null,score:.55,reason:`Costs ~${n.estimatedTokens} tokens every session and measures neutral across ${n.exposures} exposed session(s) \u2014 enough data to detect an effect, and none found. Consider shortening "${n.name}" rather than removing it.`+(n.containsSafetyLanguage?" CAUTION: it contains guardrail language (destructive-command or credential rules) \u2014 preserve those lines when shortening.":"")}))}u(st,"buildTrimProposals");async function at(s,o,a){let n=[],i=0;for(let d of s)try{await a("/api/instruction-experiments",{instructionId:d.instructionId,projectPath:o,source:"groom"}),i++}catch(g){let m=g instanceof Error?g.message:String(g);n.push({...d,reason:`${d.reason} (not measurable by withholding: ${m})`})}return{nominated:i,unmeasurable:n}}u(at,"nominateRemovals");function it(s){let o=[];for(let n of s.harmful){let i=n.verdict.delta;o.push({instructionId:n.id,score:Math.min(.95,.75+Math.abs(i)),topProjectId:n.topProjectId??null,reason:`Measured harmful: sessions using "${n.name}" scored ${(i*100).toFixed(1)}pp worse across ${n.exposures} exposed session(s). Observational \u2014 review before archiving.`})}let a=new Set(s.harmful.map(n=>n.id));for(let n of s.candidates)a.has(n.id)||o.push({instructionId:n.id,score:nt,topProjectId:n.topProjectId??null,reason:`Unused: "${n.name}" is ${n.reason} (${n.totalExposures} lifetime exposure(s)) but still costs context budget every session.`});return o.slice(0,ot)}u(it,"buildRemovalProposals");async function ct(){let s=y.join(O.homedir(),".config","rulemetric","skills-registry.json");try{let o=Y(s,"utf-8"),a=JSON.parse(o);return Date.now()-new Date(a.generatedAt).getTime()>tt*60*60*1e3}catch{return!0}}u(ct,"checkSkillsRegistryStale");var wt=u(async(s,o)=>{let a=U(),n=a!=="none";n?o.logger.info(`Scoring backend: ${a}`):o.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="+Z)).projectPaths}catch(t){o.logger.warn(`Failed to fetch project paths: ${t instanceof Error?t.message:String(t)}`);return}if(i.length===0){o.logger.info("No recent project paths; nothing to score");return}let d=new Map;try{let t=await w("/api/projects?limit=200");for(let e of t.projects??[])e.primaryCheckoutPath&&d.set(T(e.primaryCheckoutPath),e.id)}catch(t){o.logger.warn(`Failed to fetch projects for id resolution: ${t instanceof Error?t.message:String(t)}`)}let g=new Map;try{let t=await w(`/api/catalog?limit=200&contentPreview=${x}`);for(let e of t)g.set(e.id,{id:e.id,name:e.name,description:e.description??"",tags:e.tags??[],contentPreview:(e.contentPreview??"").slice(0,x)})}catch(t){o.logger.warn(`Failed to fetch catalog: ${t instanceof Error?t.message:String(t)}`)}try{let t=await w("/api/instructions?limit=100");for(let e of t.instructions??[])g.has(e.id)||g.set(e.id,{id:e.id,name:e.name,description:e.description??"",tags:e.tags??[],contentPreview:(e.content??"").slice(0,x)})}catch(t){o.logger.warn(`Failed to fetch personal instructions: ${t instanceof Error?t.message:String(t)}`)}let m=[],p=[];try{let t=await w("/api/insights/groom-candidates");if(!t.captureHealthy)o.logger.info(`Grooming paused: ${t.reason??"capture unhealthy"}`);else{m=it(t),p=st(t);let e=t.safetyGuarded+t.harmfulSafetyGuarded;o.logger.info(`Removal proposals: ${m.length} (${t.harmful.length} measured-harmful, ${t.candidates.length} never-used, ${e} withheld by the safety allowlist); trim proposals: ${p.length} (${(t.bloated??[]).length} measured-neutral and expensive, ${t.trimSafetyFlagged??0} flagged as containing guardrail language)`)}}catch(t){o.logger.warn(`Failed to fetch groom candidates: ${t instanceof Error?t.message:String(t)}`)}let I=[...g.values()];if(I.length===0&&m.length===0&&p.length===0){o.logger.info("No candidate instructions and nothing to retire; nothing to score");return}o.logger.info(`Scoring ${I.length} candidates across ${i.length} project(s)`);let M=0,l=null,$=new Set;for(let t of i)try{let e=T(t);if(!q(e)){o.logger.info(`Skipping ${e}: not a project directory (home/root)`);continue}let f=B(e),S=n&&f.length>0;f.length===0&&o.logger.info(`${e}: insufficient language signals; removal/trim only`);let v=D(e),V={name:y.basename(e),description:v.description,languages:f,topics:v.topics,dependencies:v.dependencies},k=S?H(I):[];S&&o.logger.info(`Scoring ${I.length} candidates for ${e} in ${k.length} batch(es)`);let E=[],b=0;for(let r of k)try{let c=await J(G(V,r),"",4096);if(!c){b++;continue}let _=c.recommendations??[];for(let P of _)typeof P.instructionId=="string"&&typeof P.score=="number"&&typeof P.reason=="string"&&E.push({instructionId:P.instructionId,score:P.score,reason:P.reason})}catch(c){b++,o.logger.warn(`Batch failed for ${e}: ${c instanceof Error?c.message:String(c)}`)}b>0&&o.logger.warn(`${b}/${k.length} batch(es) failed for ${e} (backend ${a}); suggestions are partial`),S&&E.length===0&&o.logger.warn(`No usable LLM output for ${e} (backend ${a})`);let z=E.filter(r=>r.score>=et).sort((r,c)=>c.score-r.score).slice(0,Q),C=d.get(e),K=l===null||l===e;l===null&&(l=e);let A=u(r=>r.topProjectId?r.topProjectId===C:K,"placeHere"),L=m.filter(A),{nominated:N,unmeasurable:F}=await at(L,e,R);N>0&&o.logger.info(`${e}: ${N} removal candidate(s) nominated for randomised withholding instead of the feed`);let h=[...z.map(r=>({instructionId:r.instructionId,score:r.score,reason:r.reason,kind:"add"})),...F.map(({topProjectId:r,...c})=>({...c,kind:"remove"})),...p.filter(A).map(({estimatedTokens:r,topProjectId:c,..._})=>({..._,kind:"trim"}))];if(h.length===0){o.logger.info(`Nothing to suggest for ${e}`);continue}await R("/api/instruction-suggestions/batch-upsert",{projectPath:e,...C?{projectId:C}:{},suggestions:h}),o.logger.info(`${e}: ${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"&&$.add(r.instructionId);let W=new Set(F.map(r=>r.instructionId));for(let r of L)W.has(r.instructionId)||$.add(r.instructionId);M++}catch(e){o.logger.warn(`Failed to score ${t}: ${e instanceof Error?e.message:String(e)}`)}let j=[...m.filter(t=>!$.has(t.instructionId)),...p.filter(t=>!$.has(t.instructionId)).map(({estimatedTokens:t,...e})=>e)];if(j.length>0&&l)try{let t=new Set(p.map(e=>e.instructionId));await R("/api/instruction-suggestions/batch-upsert",{projectPath:l,...d.get(l)?{projectId:d.get(l)}:{},suggestions:j.map(({topProjectId:e,...f})=>({...f,kind:t.has(f.instructionId)?"trim":"remove"}))}),o.logger.info(`Orphan sweep: ${j.length} proposal(s) whose project was not scored this run placed on ${l}`)}catch(t){o.logger.warn(`Orphan sweep failed: ${t instanceof Error?t.message:String(t)}`)}if(await ct())try{await R("/api/instruction-suggestions/mark-stale",{}),o.logger.warn("Skills registry is stale (>48h); marked all suggestions stale")}catch{}o.logger.info(`Done: scored ${M}/${i.length} projects`)},"cronSuggestInstructions");export{q as a,st as b,at as c,it as d,wt as e};
@@ -1 +1 @@
1
- import{a as h}from"./chunk-4L2ZEIRE.js";import{b as E}from"./chunk-G5BXZT6F.js";import{c as P}from"./chunk-HMMO27U4.js";import{b as d,e as p,h as w}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";var b=u(n=>(n.summary.pass_rate??0)>=1?1:0,"fullPassScore");async function G(n,i={}){let c=i.executeEval??P,g=i.grade??h,v=i.getExperiment??(async r=>{try{return await p(`/api/memory-experiments/${r}`)}catch(t){if(t instanceof d&&t.statusCode===404)return null;throw t}}),M=i.getMemoryBody??(async r=>{try{return(await p(`/api/memories/${r}`)).body}catch(t){if(t instanceof d&&t.statusCode===404)return null;throw t}}),s=i.updateExperiment??(async(r,t)=>{await w(`/api/memory-experiments/${r}`,t)}),e=await v(n.experimentId);if(!e)return{skipped:"not_found"};if(e.status==="completed"||e.status==="failed")return{skipped:"already_terminal",status:e.status};let y=await M(e.memoryId);if(y==null)return await s(e.id,{status:"failed",error:"memory no longer exists"}),{skipped:"memory_gone",status:"failed"};await s(e.id,{status:"running"});let f=e.expectations??[],o=e.model??void 0,a=[],x=0;try{for(let t=0;t<e.trials;t++){let l=await c({prompt:e.taskPrompt,targetContent:y,model:o}),m=await c({prompt:e.taskPrompt,model:o});if(l.error||m.error){x++;continue}let[k,R]=await Promise.all([g({prompt:e.taskPrompt,output:l.output,expectations:f,model:o}),g({prompt:e.taskPrompt,output:m.output,expectations:f,model:o})]);a.push({withScore:b(k),withoutScore:b(R),withLatency:l.durationMs/1e3,withoutLatency:m.durationMs/1e3})}if(a.length===0){let t=`no trials completed (${x}/${e.trials} runs errored \u2014 is the claude CLI available?)`;return await s(e.id,{status:"failed",error:t}),{status:"failed",requestedTrials:e.trials,completedTrials:0}}let r=E(a);return await s(e.id,{status:"completed",result:{verdict:r,pairs:a,completedTrials:a.length,model:o??null}}),{status:"completed",requestedTrials:e.trials,completedTrials:a.length,significant:r.significant,delta:r.delta}}catch(r){let t=r instanceof Error?r.message:String(r);return await s(e.id,{status:"failed",error:t.slice(0,500)}).catch(()=>{}),{status:"failed",requestedTrials:e.trials,completedTrials:a.length}}}u(G,"processMemoryAb");export{G as a};
1
+ import{a as h}from"./chunk-TCR7TSAJ.js";import{b as E}from"./chunk-G5BXZT6F.js";import{d as P}from"./chunk-TZA4HAVF.js";import{b as d,e as p,h as w}from"./chunk-OFC7HIBX.js";import{a as u}from"./chunk-ZLLER3HP.js";var b=u(n=>(n.summary.pass_rate??0)>=1?1:0,"fullPassScore");async function G(n,i={}){let c=i.executeEval??P,g=i.grade??h,v=i.getExperiment??(async r=>{try{return await p(`/api/memory-experiments/${r}`)}catch(t){if(t instanceof d&&t.statusCode===404)return null;throw t}}),M=i.getMemoryBody??(async r=>{try{return(await p(`/api/memories/${r}`)).body}catch(t){if(t instanceof d&&t.statusCode===404)return null;throw t}}),s=i.updateExperiment??(async(r,t)=>{await w(`/api/memory-experiments/${r}`,t)}),e=await v(n.experimentId);if(!e)return{skipped:"not_found"};if(e.status==="completed"||e.status==="failed")return{skipped:"already_terminal",status:e.status};let y=await M(e.memoryId);if(y==null)return await s(e.id,{status:"failed",error:"memory no longer exists"}),{skipped:"memory_gone",status:"failed"};await s(e.id,{status:"running"});let f=e.expectations??[],o=e.model??void 0,a=[],x=0;try{for(let t=0;t<e.trials;t++){let l=await c({prompt:e.taskPrompt,targetContent:y,model:o}),m=await c({prompt:e.taskPrompt,model:o});if(l.error||m.error){x++;continue}let[k,R]=await Promise.all([g({prompt:e.taskPrompt,output:l.output,expectations:f,model:o}),g({prompt:e.taskPrompt,output:m.output,expectations:f,model:o})]);a.push({withScore:b(k),withoutScore:b(R),withLatency:l.durationMs/1e3,withoutLatency:m.durationMs/1e3})}if(a.length===0){let t=`no trials completed (${x}/${e.trials} runs errored \u2014 is the claude CLI available?)`;return await s(e.id,{status:"failed",error:t}),{status:"failed",requestedTrials:e.trials,completedTrials:0}}let r=E(a);return await s(e.id,{status:"completed",result:{verdict:r,pairs:a,completedTrials:a.length,model:o??null}}),{status:"completed",requestedTrials:e.trials,completedTrials:a.length,significant:r.significant,delta:r.delta}}catch(r){let t=r instanceof Error?r.message:String(r);return await s(e.id,{status:"failed",error:t.slice(0,500)}).catch(()=>{}),{status:"failed",requestedTrials:e.trials,completedTrials:a.length}}}u(G,"processMemoryAb");export{G as a};
@@ -1,4 +1,4 @@
1
- import{a as R,g as v,h as T,j as I,m as C}from"./chunk-3QXRLIGC.js";import{e as d}from"./chunk-QWCEZEDO.js";import{d as g}from"./chunk-NTKO4H2K.js";import{e as _}from"./chunk-KLEF5D3A.js";import{g as m,l as k}from"./chunk-JZ5Z2BRO.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{a as R,g as v,h as T,j as I,m as C}from"./chunk-3QXRLIGC.js";import{e as d}from"./chunk-QWCEZEDO.js";import{d as g}from"./chunk-OPUI7CM2.js";import{e as _}from"./chunk-OFC7HIBX.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{c as l}from"./chunk-KLEF5D3A.js";import{c as a,l as u}from"./chunk-JZ5Z2BRO.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-OFC7HIBX.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 +1 @@
1
- import{a as j}from"./chunk-ULMEKK7C.js";import{a as E}from"./chunk-NBTC5FNV.js";import{a as J}from"./chunk-TU2AR6XO.js";import{d as T}from"./chunk-NJ5UED3H.js";import{b as I,c as P,d as v}from"./chunk-5RUEROLC.js";import{a as b}from"./chunk-ZLLER3HP.js";import{useEffect as R,useState as i}from"react";import{Box as l,Text as s,useInput as Z}from"ink";import{jsx as t,jsxs as a}from"react/jsx-runtime";function K({onClose:A,activeOrg:F,defaultProjectPath:y,width:_}){let{jobs:u,error:L,loading:$,refetch:S}=j(20),[M,C]=i([]),[d,m]=i("list"),[f,w]=i(0),[h,g]=i(null),[x,B]=i(null),[p,c]=i(null);R(()=>{v().then(C).catch(o=>{let r=o instanceof Error?o.message:String(o);c(`couldn't load launchers: ${r}`),C([{tool:"claude_code",capabilities:{headless:!0,interactive:!0,remoteSpawn:!0}}])})},[]),R(()=>{if(!p)return;let o=setTimeout(()=>c(null),5e3);return()=>clearTimeout(o)},[p]),Z((o,r)=>{if(h){if(o==="y"||o==="Y"){let e=h.id;g(null),P(e).then(()=>{S(),c(`cancelled ${e.slice(0,8)}`)}).catch(n=>c(`cancel failed: ${n instanceof Error?n.message:String(n)}`))}else(o==="n"||o==="N"||r.escape)&&g(null);return}if(r.escape){if(d!=="none"){m("none");return}A();return}if(r.tab){m(e=>e==="list"?"form":e==="form"?"none":"list");return}if(o!=="q"&&d==="list"){if(r.upArrow)w(e=>Math.max(0,e-1));else if(r.downArrow)w(e=>Math.min(u.length-1,e+1));else if(o==="c"){let e=u[f];e&&(e.status==="running"||e.status==="queued"||e.status==="pending")&&g(e)}else if(o==="r"){let e=u[f],n=e?.result?.externalSessionId;e&&e.tool==="claude_code"&&n?(B({tool:"claude_code",projectPath:e.config.projectPath,resumeSessionId:n}),m("form")):c("resume needs a Claude Code session with a session id")}else if(o==="o"){let n=u[f]?.result?.externalSessionId;if(n){let O=process.env.RULEMETRIC_WEB_URL??"http://localhost:5174";import("node:child_process").then(({spawn:U})=>{U("open",[`${O}/sessions/${n}`],{detached:!0,stdio:"ignore"}).unref()})}}}});async function N(o){await I(o),B(null),m("list"),c("launched"),S()}return b(N,"handleSubmit"),a(l,{flexDirection:"column",borderStyle:"round",borderColor:T,width:_,paddingX:1,children:[a(l,{children:[t(s,{bold:!0,color:T,children:"Launcher"}),t(s,{dimColor:!0,children:" active org: "}),t(s,{children:F??"(none)"}),$&&t(s,{dimColor:!0,children:" loading\u2026"}),L&&a(s,{color:"#F55B5B",children:[" \u26A0 ",L]})]}),t(l,{marginTop:1,children:t(E,{jobs:u,selectedIndex:f,focused:d==="list"})}),t(l,{marginTop:1,children:t(J,{launchers:M,defaultProjectPath:x?.projectPath??y,defaultTool:x?.tool,defaultResumeSessionId:x?.resumeSessionId,focused:d==="form",onSubmit:N})}),h&&t(l,{marginTop:1,children:a(s,{color:"#FFD700",children:["Cancel job ",h.id.slice(0,8),"? (y/n)"]})}),p&&t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\xB7 ",p]})}),t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\u2191\u2193 select tab focus c cancel r resume o open esc ",d==="none"?"close":"back"]})})]})}b(K,"LauncherOverlay");export{K as a};
1
+ import{a as J}from"./chunk-B22HYCBV.js";import{a as j}from"./chunk-FORJT5H6.js";import{b as I,c as P,d as v}from"./chunk-YY53MMH7.js";import{a as E}from"./chunk-X23L2MF6.js";import{d as T}from"./chunk-NJ5UED3H.js";import{a as b}from"./chunk-ZLLER3HP.js";import{useEffect as R,useState as i}from"react";import{Box as l,Text as s,useInput as Z}from"ink";import{jsx as t,jsxs as a}from"react/jsx-runtime";function K({onClose:A,activeOrg:F,defaultProjectPath:y,width:_}){let{jobs:u,error:L,loading:$,refetch:S}=j(20),[M,C]=i([]),[d,m]=i("list"),[f,w]=i(0),[h,g]=i(null),[x,B]=i(null),[p,c]=i(null);R(()=>{v().then(C).catch(o=>{let r=o instanceof Error?o.message:String(o);c(`couldn't load launchers: ${r}`),C([{tool:"claude_code",capabilities:{headless:!0,interactive:!0,remoteSpawn:!0}}])})},[]),R(()=>{if(!p)return;let o=setTimeout(()=>c(null),5e3);return()=>clearTimeout(o)},[p]),Z((o,r)=>{if(h){if(o==="y"||o==="Y"){let e=h.id;g(null),P(e).then(()=>{S(),c(`cancelled ${e.slice(0,8)}`)}).catch(n=>c(`cancel failed: ${n instanceof Error?n.message:String(n)}`))}else(o==="n"||o==="N"||r.escape)&&g(null);return}if(r.escape){if(d!=="none"){m("none");return}A();return}if(r.tab){m(e=>e==="list"?"form":e==="form"?"none":"list");return}if(o!=="q"&&d==="list"){if(r.upArrow)w(e=>Math.max(0,e-1));else if(r.downArrow)w(e=>Math.min(u.length-1,e+1));else if(o==="c"){let e=u[f];e&&(e.status==="running"||e.status==="queued"||e.status==="pending")&&g(e)}else if(o==="r"){let e=u[f],n=e?.result?.externalSessionId;e&&e.tool==="claude_code"&&n?(B({tool:"claude_code",projectPath:e.config.projectPath,resumeSessionId:n}),m("form")):c("resume needs a Claude Code session with a session id")}else if(o==="o"){let n=u[f]?.result?.externalSessionId;if(n){let O=process.env.RULEMETRIC_WEB_URL??"http://localhost:5174";import("node:child_process").then(({spawn:U})=>{U("open",[`${O}/sessions/${n}`],{detached:!0,stdio:"ignore"}).unref()})}}}});async function N(o){await I(o),B(null),m("list"),c("launched"),S()}return b(N,"handleSubmit"),a(l,{flexDirection:"column",borderStyle:"round",borderColor:T,width:_,paddingX:1,children:[a(l,{children:[t(s,{bold:!0,color:T,children:"Launcher"}),t(s,{dimColor:!0,children:" active org: "}),t(s,{children:F??"(none)"}),$&&t(s,{dimColor:!0,children:" loading\u2026"}),L&&a(s,{color:"#F55B5B",children:[" \u26A0 ",L]})]}),t(l,{marginTop:1,children:t(E,{jobs:u,selectedIndex:f,focused:d==="list"})}),t(l,{marginTop:1,children:t(J,{launchers:M,defaultProjectPath:x?.projectPath??y,defaultTool:x?.tool,defaultResumeSessionId:x?.resumeSessionId,focused:d==="form",onSubmit:N})}),h&&t(l,{marginTop:1,children:a(s,{color:"#FFD700",children:["Cancel job ",h.id.slice(0,8),"? (y/n)"]})}),p&&t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\xB7 ",p]})}),t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\u2191\u2193 select tab focus c cancel r resume o open esc ",d==="none"?"close":"back"]})})]})}b(K,"LauncherOverlay");export{K as a};
@@ -1 +1 @@
1
- import{b as g,c as m}from"./chunk-N7ODX6PO.js";import{e as s,h as c}from"./chunk-KLEF5D3A.js";import{a as i}from"./chunk-ZLLER3HP.js";var u=6e4;function o(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[tt-heartbeat] log_error event=${e.event}`)}}i(o,"structuredLog");function d(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",n),r(!0)},t),n=i(()=>{clearTimeout(a),e.removeEventListener("abort",n),r(!1)},"onAbort");e.addEventListener("abort",n,{once:!0})})}i(d,"abortableSleep");async function l(t,e){if(t.kind!=="tmux")return;let a=(await g(m(t.target))).code===0?"active":"missing";try{await c(`/api/terminal-targets/${t.id}/status`,{status:a,lastSeenAt:new Date().toISOString()}),o(e,{event:"tt_heartbeat",targetId:t.id,target:t.target,status:a})}catch(n){o(e,{event:"tt_heartbeat_error",targetId:t.id,target:t.target,error:n instanceof Error?n.message:String(n)})}}i(l,"probeAndReport");async function b(t){let e;try{e=await s("/api/terminal-targets?status=active")}catch(r){o(t,{event:"tt_heartbeat_list_error",error:r instanceof Error?r.message:String(r)});return}for(let r of e.targets??[])try{await l(r,t)}catch(a){o(t,{event:"tt_heartbeat_probe_error",targetId:r.id,error:a instanceof Error?a.message:String(a)})}}i(b,"runOneHeartbeatCycle");async function p(t){let e=t.log??(()=>{}),r=t.intervalMs??u;for(o(e,{event:"tt_heartbeat_start",intervalMs:r});!t.signal.aborted&&(await b(e),!!await d(r,t.signal)););o(e,{event:"tt_heartbeat_stop"})}i(p,"startTerminalTargetHeartbeat");export{l as a,b,p as c};
1
+ import{b as g,c as m}from"./chunk-N7ODX6PO.js";import{e as s,h as c}from"./chunk-OFC7HIBX.js";import{a as i}from"./chunk-ZLLER3HP.js";var u=6e4;function o(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[tt-heartbeat] log_error event=${e.event}`)}}i(o,"structuredLog");function d(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",n),r(!0)},t),n=i(()=>{clearTimeout(a),e.removeEventListener("abort",n),r(!1)},"onAbort");e.addEventListener("abort",n,{once:!0})})}i(d,"abortableSleep");async function l(t,e){if(t.kind!=="tmux")return;let a=(await g(m(t.target))).code===0?"active":"missing";try{await c(`/api/terminal-targets/${t.id}/status`,{status:a,lastSeenAt:new Date().toISOString()}),o(e,{event:"tt_heartbeat",targetId:t.id,target:t.target,status:a})}catch(n){o(e,{event:"tt_heartbeat_error",targetId:t.id,target:t.target,error:n instanceof Error?n.message:String(n)})}}i(l,"probeAndReport");async function b(t){let e;try{e=await s("/api/terminal-targets?status=active")}catch(r){o(t,{event:"tt_heartbeat_list_error",error:r instanceof Error?r.message:String(r)});return}for(let r of e.targets??[])try{await l(r,t)}catch(a){o(t,{event:"tt_heartbeat_probe_error",targetId:r.id,error:a instanceof Error?a.message:String(a)})}}i(b,"runOneHeartbeatCycle");async function p(t){let e=t.log??(()=>{}),r=t.intervalMs??u;for(o(e,{event:"tt_heartbeat_start",intervalMs:r});!t.signal.aborted&&(await b(e),!!await d(r,t.signal)););o(e,{event:"tt_heartbeat_stop"})}i(p,"startTerminalTargetHeartbeat");export{l as a,b,p as c};
@@ -0,0 +1 @@
1
+ import{a as E}from"./chunk-EOJ3LAP6.js";import{b as R,c as x}from"./chunk-KGURGIZ2.js";import{f as F}from"./chunk-OFC7HIBX.js";import{a as s}from"./chunk-ZLLER3HP.js";var A="with_candidate",$="with_prior_version";function k(n){let t=n.filter(e=>e.configuration===A),r=[];for(let e of t){let u=n.find(o=>o.configuration===$&&o.evalId===e.evalId&&o.runNumber===e.runNumber);if(!u)continue;let l=h(e),f=h(u);l==null||f==null||r.push({withScore:l,withoutScore:f})}return r}s(k,"pairCandidateRuns");function h(n){return n.status!=="completed"?null:n.grading?.summary?.pass_rate??null}s(h,"evidenceOf");function P(n){let t=[],r=0;for(let e of n){if(e.status==="failed"){t.push(e.failure??{kind:"unknown",class:"infrastructure"});continue}h(e)==null&&(r+=1)}return{infrastructureFailed:t.length,ungradeable:r,summary:R(t)}}s(P,"accountForFailures");function Q(n){let{pairs:t,minPairs:r,accounting:e}=n;return t>=r?{kind:"proceed"}:e.infrastructureFailed<=0?{kind:"proceed"}:{kind:"infrastructure-incomplete",reason:`${t}/${r} pair(s) \u2014 ${e.infrastructureFailed} run(s) never executed (${e.summary.describe()}). Retry when the environment recovers; this is not a statement about the target.`}}s(Q,"attributeShortfall");function w(n,t,r,e){let u=[];for(let l of n)u.push({eval_:l,configuration:A,targetContent:t,runNumber:e}),u.push({eval_:l,configuration:$,targetContent:r,runNumber:e});return u}s(w,"buildCandidateQueue");async function N(n){let{cases:t,candidateContent:r,priorVersionContent:e,concurrency:u,runNumber:l,opts:f,onLog:o=s(()=>{},"onLog")}=n,p=w(t,r,e,l),i=[],b=Math.max(1,u),g=null;for(let a=0;a<p.length;a+=b){let d=p.slice(a,a+b);i.push(...await Promise.all(d.map(c=>E(c,f,o))));let y=i.find(c=>c.failure&&x(c.failure.kind));if(y?.failure){g=y.failure.kind;let c=p.length-i.length;o(` \u26D4 aborting batch \u2014 ${g}: the account is out of quota. Skipped ${c} remaining run(s) that would certainly have failed.`);break}}for(let a of i)try{await F("/api/eval-runs",a)}catch(d){o(` \u26A0 failed to post a run result: ${d instanceof Error?d.message:String(d)}`)}let C=k(i),m=P(i),v=t.length-C.length;if(v>0){let a=m.infrastructureFailed?` \u2014 ${m.infrastructureFailed} run(s) never executed (${m.summary.describe()})`:"";o(` \u26A0 ${v}/${t.length} case(s) produced no usable pair (failed or ungradeable arm)${a}`)}return{completed:i.filter(a=>a.status==="completed").length,failed:i.filter(a=>a.status==="failed").length,results:i,pairs:C,accounting:m,abortedForQuota:g}}s(N,"runCandidateBatchAndPost");export{A as a,$ as b,k as c,P as d,Q as e,w as f,N as g};
@@ -1,4 +1,4 @@
1
- import{c as p}from"./chunk-HMMO27U4.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{d as p}from"./chunk-TZA4HAVF.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{d as l,e as s,h as E}from"./chunk-NJ5UED3H.js";import{b as T}from"./chunk-ZXF5NE54.js";import{a as g}from"./chunk-ZLLER3HP.js";import{useState as a}from"react";import{Box as c,Text as r,useInput as _}from"ink";import L from"ink-text-input";import G from"ink-select-input";import{jsx as t,jsxs as m}from"react/jsx-runtime";var p=["tool","project","mode","prompt","submit"];function U({launchers:f,defaultProjectPath:w,defaultTool:A,defaultPrompt:D,defaultResumeSessionId:v,focused:i,onSubmit:R}){let[b,C]=a(A??f[0]?.tool??"claude_code"),[u,M]=a(w),[P,O]=a("interactive"),[d,S]=a(D??""),[o,F]=a("tool"),[j,I]=a(!1),[y,h]=a(null),B=d.trim().length>0&&u.trim().length>0&&!j;_((e,x)=>{if(i)if(x.upArrow){let n=p.indexOf(o);n>0&&F(p[n-1])}else if(x.downArrow){let n=p.indexOf(o);n<p.length-1&&F(p[n+1])}else x.return&&o==="submit"&&B?N():o==="mode"&&(e===" "||x.return)&&O(n=>n==="interactive"?"headless":"interactive")});async function N(){I(!0),h(null);try{await R({tool:b,config:{projectPath:u,prompt:d,mode:P,...v?{resumeSessionId:v}:{}}}),S(""),h(null)}catch(e){h(e instanceof Error?e.message:String(e))}finally{I(!1)}}return g(N,"doSubmit"),m(c,{flexDirection:"column",paddingX:1,children:[t(r,{bold:!0,color:l,children:"\u25BC New launch"}),m(c,{children:[t(r,{color:o==="tool"&&i?l:s,children:" Tool: "}),o==="tool"&&i?t(G,{items:f.map(e=>({label:T(e.tool),value:e.tool})),initialIndex:Math.max(0,f.findIndex(e=>e.tool===b)),onSelect:e=>C(e.value)}):t(r,{children:T(b)})]}),m(c,{children:[t(r,{color:o==="project"&&i?l:s,children:" Project: "}),o==="project"&&i?t(L,{value:u,onChange:M}):t(r,{children:u})]}),m(c,{children:[t(r,{color:o==="mode"&&i?l:s,children:" Mode: "}),t(r,{children:P==="interactive"?"(\u2022) interactive ( ) headless":"( ) interactive (\u2022) headless"})]}),m(c,{children:[t(r,{color:o==="prompt"&&i?l:s,children:" Prompt: "}),o==="prompt"&&i?t(L,{value:d,onChange:S}):t(r,{children:d||"(empty)"})]}),t(c,{marginTop:1,children:m(r,{color:o==="submit"&&i?l:s,children:[B?" [ Submit ]":" [ Submit (disabled) ]",j?" \u2026submitting":""]})}),y&&m(r,{color:E,children:[" \u2717 ",y]})]})}g(U,"NewLaunchForm");export{U as a};
1
+ import{b as T}from"./chunk-ZXF5NE54.js";import{d as l,e as s,h as E}from"./chunk-NJ5UED3H.js";import{a as g}from"./chunk-ZLLER3HP.js";import{useState as a}from"react";import{Box as c,Text as r,useInput as _}from"ink";import L from"ink-text-input";import G from"ink-select-input";import{jsx as t,jsxs as m}from"react/jsx-runtime";var p=["tool","project","mode","prompt","submit"];function U({launchers:f,defaultProjectPath:w,defaultTool:A,defaultPrompt:D,defaultResumeSessionId:v,focused:i,onSubmit:R}){let[b,C]=a(A??f[0]?.tool??"claude_code"),[u,M]=a(w),[P,O]=a("interactive"),[d,S]=a(D??""),[o,F]=a("tool"),[j,I]=a(!1),[y,h]=a(null),B=d.trim().length>0&&u.trim().length>0&&!j;_((e,x)=>{if(i)if(x.upArrow){let n=p.indexOf(o);n>0&&F(p[n-1])}else if(x.downArrow){let n=p.indexOf(o);n<p.length-1&&F(p[n+1])}else x.return&&o==="submit"&&B?N():o==="mode"&&(e===" "||x.return)&&O(n=>n==="interactive"?"headless":"interactive")});async function N(){I(!0),h(null);try{await R({tool:b,config:{projectPath:u,prompt:d,mode:P,...v?{resumeSessionId:v}:{}}}),S(""),h(null)}catch(e){h(e instanceof Error?e.message:String(e))}finally{I(!1)}}return g(N,"doSubmit"),m(c,{flexDirection:"column",paddingX:1,children:[t(r,{bold:!0,color:l,children:"\u25BC New launch"}),m(c,{children:[t(r,{color:o==="tool"&&i?l:s,children:" Tool: "}),o==="tool"&&i?t(G,{items:f.map(e=>({label:T(e.tool),value:e.tool})),initialIndex:Math.max(0,f.findIndex(e=>e.tool===b)),onSelect:e=>C(e.value)}):t(r,{children:T(b)})]}),m(c,{children:[t(r,{color:o==="project"&&i?l:s,children:" Project: "}),o==="project"&&i?t(L,{value:u,onChange:M}):t(r,{children:u})]}),m(c,{children:[t(r,{color:o==="mode"&&i?l:s,children:" Mode: "}),t(r,{children:P==="interactive"?"(\u2022) interactive ( ) headless":"( ) interactive (\u2022) headless"})]}),m(c,{children:[t(r,{color:o==="prompt"&&i?l:s,children:" Prompt: "}),o==="prompt"&&i?t(L,{value:d,onChange:S}):t(r,{children:d||"(empty)"})]}),t(c,{marginTop:1,children:m(r,{color:o==="submit"&&i?l:s,children:[B?" [ Submit ]":" [ Submit (disabled) ]",j?" \u2026submitting":""]})}),y&&m(r,{color:E,children:[" \u2717 ",y]})]})}g(U,"NewLaunchForm");export{U as a};
@@ -1 +1 @@
1
- import{a as T}from"./chunk-5RBLIVBF.js";import{a as S}from"./chunk-YQ56FQEO.js";import{b as A}from"./chunk-CNOD6HWU.js";import{e as x}from"./chunk-L2CFSMBC.js";import{a as C}from"./chunk-4L2ZEIRE.js";import{c as M}from"./chunk-HMMO27U4.js";import{e as k,f as E,h as p}from"./chunk-KLEF5D3A.js";import{a as w}from"./chunk-ZLLER3HP.js";async function W(v,f){let{mirrorId:i,evalTargetId:g,config:o}=v,a=w(e=>f.logger.info(e),"log"),s=await k(`/api/eval-targets/${g}`),$=await k(`/api/eval-targets/${g}/evals`);if($.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await A({content:s.content,name:s.name});if(e===null)throw new Error("Case generation requires an LLM backend (claude CLI on PATH or ANTHROPIC_API_KEY) \u2014 none available on this worker.");let n=[];for(let t of e)n.push(await E(`/api/eval-targets/${g}/evals`,t));$=n,a(`Generated ${n.length} eval case(s)`)}if($.length===0)throw new T("No evals defined for target");let G=o.runsPerEval??1,R=o.timeout??12e4,j=o.iteration??1,y=new Set;if(f.job.attempts>1)for(let n=0;;n+=100){let t=await k(`/api/eval-targets/${g}/runs?jobId=${i}&limit=100&offset=${n}`);for(let r of t)y.add(`${r.evalId}|${r.configuration}|${r.runNumber}|${r.iteration}`);if(t.length<100)break}let _=[{name:"with_target",content:s.content}];o.skipBaseline||_.push({name:"without_target"});let d=[];for(let e of $)for(let n of _)for(let t=1;t<=G;t++)y.has(`${e.id}|${n.name}|${t}|${j}`)||d.push({eval_:e,configuration:n.name,targetContent:n.content,runNumber:t});y.size>0&&a(`Resuming attempt ${f.job.attempts}: ${y.size} run(s) already persisted, ${d.length} remaining`);let l=d.length,u=0,m=Math.min(o.parallel??1,4);await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:0,current:null,message:`Starting ${l} eval runs (concurrency: ${m})...`}});let b=[];async function I(e){let n=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${u+1}/${l}] ${n}`);let t=x({targetType:s.type,targetContent:e.targetContent,targetName:s.name});t.leakedFiles.length&&a(`\u26A0 CONTAMINATED ${n}: ${t.leakedFiles.join(", ")} survived the strip`);try{let r=await M({prompt:e.eval_.prompt,targetContent:t.systemPrompt,workDir:t.workDir,timeout:R,model:o.model}),c={};return!o.skipGrading&&e.eval_.expectations.length>0&&!r.error&&(c=await C({prompt:e.eval_.prompt,output:r.output,expectations:e.eval_.expectations,model:o.graderModel??o.model,timeout:R})),{jobId:i,evalId:e.eval_.id,evalTargetId:s.id,evalTargetVersion:s.version,configuration:e.configuration,runNumber:e.runNumber,iteration:j,status:r.error?"failed":"completed",outputs:{...r.error?{error:r.error}:{transcript:r.output,...r.model?{model:r.model}:{}},methodology:t.methodology,delivery:t.delivery,isolated:t.isWorktree,...t.leakedFiles.length?{leakedFiles:t.leakedFiles}:{}},timing:{duration_ms:r.durationMs,total_tokens:r.totalTokens},grading:c,worktree:t.isWorktree?!0:void 0}}finally{t.cleanup()}}if(w(I,"processItem"),m<=1)for(let e of d){let n=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Executing ${n}...`}});let t=await I(e);await E("/api/eval-runs",t),b.push(t),u++,await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Completed ${n}`}})}else{a(`Running ${l} evals with concurrency=${m} (worktree isolation)`);for(let e=0;e<d.length;e+=m){let n=d.slice(e,e+m),t=`batch ${Math.floor(e/m)+1}/${Math.ceil(d.length/m)}`;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Executing ${t} (${n.length} parallel)...`}});let r=await Promise.all(n.map(I));for(let c of r)await E("/api/eval-runs",c),b.push(c),u++;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Completed ${t}`}})}}let P=J(b),h;if(!o.skipGrading&&b.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${i}...`);let e=$.map(n=>{let r=b.filter(c=>c.evalId===n.id&&c.configuration==="with_target")[0];return{evalName:n.name,prompt:n.prompt,expectations:n.expectations,grading:r?.grading?r.grading:null,output:r?.outputs?.transcript?.slice(0,500)}});h=await S({targetName:s.name,evalResults:e,model:o.graderModel??o.model,timeout:6e4}),a(`Meta-judge: quality=${h.quality_score}/5, issues=${h.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let N=h?{...P,meta_judgement:h}:P;return a(`Job ${i} completed: ${u}/${l} runs`),await p(`/api/eval-jobs/${i}/state`,{result:N}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),N}w(W,"processEval");function J(v){let f=v.filter(a=>a.status==="completed"),i=v.filter(a=>a.status==="failed"),g=f.filter(a=>{let s=a.grading;return s&&Object.keys(s).length>0}),o=g.length>0?g.reduce((a,s)=>a+(s.grading?.summary?.pass_rate??0),0)/g.length:null;return{total:v.length,completed:f.length,failed:i.length,avgPassRate:o}}w(J,"buildSummary");export{W as a};
1
+ import{a as T}from"./chunk-5RBLIVBF.js";import{a as S}from"./chunk-XFAFMYIP.js";import{b as A}from"./chunk-3VYV6ZYB.js";import{e as x}from"./chunk-L2CFSMBC.js";import{a as C}from"./chunk-TCR7TSAJ.js";import{d as M}from"./chunk-TZA4HAVF.js";import{e as k,f as E,h as p}from"./chunk-OFC7HIBX.js";import{a as w}from"./chunk-ZLLER3HP.js";async function W(v,f){let{mirrorId:i,evalTargetId:g,config:o}=v,a=w(e=>f.logger.info(e),"log"),s=await k(`/api/eval-targets/${g}`),$=await k(`/api/eval-targets/${g}/evals`);if($.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await A({content:s.content,name:s.name});if(e===null)throw new Error("Case generation requires an LLM backend (claude CLI on PATH or ANTHROPIC_API_KEY) \u2014 none available on this worker.");let n=[];for(let t of e)n.push(await E(`/api/eval-targets/${g}/evals`,t));$=n,a(`Generated ${n.length} eval case(s)`)}if($.length===0)throw new T("No evals defined for target");let G=o.runsPerEval??1,R=o.timeout??12e4,j=o.iteration??1,y=new Set;if(f.job.attempts>1)for(let n=0;;n+=100){let t=await k(`/api/eval-targets/${g}/runs?jobId=${i}&limit=100&offset=${n}`);for(let r of t)y.add(`${r.evalId}|${r.configuration}|${r.runNumber}|${r.iteration}`);if(t.length<100)break}let _=[{name:"with_target",content:s.content}];o.skipBaseline||_.push({name:"without_target"});let d=[];for(let e of $)for(let n of _)for(let t=1;t<=G;t++)y.has(`${e.id}|${n.name}|${t}|${j}`)||d.push({eval_:e,configuration:n.name,targetContent:n.content,runNumber:t});y.size>0&&a(`Resuming attempt ${f.job.attempts}: ${y.size} run(s) already persisted, ${d.length} remaining`);let l=d.length,u=0,m=Math.min(o.parallel??1,4);await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:0,current:null,message:`Starting ${l} eval runs (concurrency: ${m})...`}});let b=[];async function I(e){let n=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${u+1}/${l}] ${n}`);let t=x({targetType:s.type,targetContent:e.targetContent,targetName:s.name});t.leakedFiles.length&&a(`\u26A0 CONTAMINATED ${n}: ${t.leakedFiles.join(", ")} survived the strip`);try{let r=await M({prompt:e.eval_.prompt,targetContent:t.systemPrompt,workDir:t.workDir,timeout:R,model:o.model}),c={};return!o.skipGrading&&e.eval_.expectations.length>0&&!r.error&&(c=await C({prompt:e.eval_.prompt,output:r.output,expectations:e.eval_.expectations,model:o.graderModel??o.model,timeout:R})),{jobId:i,evalId:e.eval_.id,evalTargetId:s.id,evalTargetVersion:s.version,configuration:e.configuration,runNumber:e.runNumber,iteration:j,status:r.error?"failed":"completed",outputs:{...r.error?{error:r.error}:{transcript:r.output,...r.model?{model:r.model}:{}},methodology:t.methodology,delivery:t.delivery,isolated:t.isWorktree,...t.leakedFiles.length?{leakedFiles:t.leakedFiles}:{}},timing:{duration_ms:r.durationMs,total_tokens:r.totalTokens},grading:c,worktree:t.isWorktree?!0:void 0}}finally{t.cleanup()}}if(w(I,"processItem"),m<=1)for(let e of d){let n=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Executing ${n}...`}});let t=await I(e);await E("/api/eval-runs",t),b.push(t),u++,await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Completed ${n}`}})}else{a(`Running ${l} evals with concurrency=${m} (worktree isolation)`);for(let e=0;e<d.length;e+=m){let n=d.slice(e,e+m),t=`batch ${Math.floor(e/m)+1}/${Math.ceil(d.length/m)}`;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Executing ${t} (${n.length} parallel)...`}});let r=await Promise.all(n.map(I));for(let c of r)await E("/api/eval-runs",c),b.push(c),u++;await p(`/api/eval-jobs/${i}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Completed ${t}`}})}}let P=J(b),h;if(!o.skipGrading&&b.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${i}...`);let e=$.map(n=>{let r=b.filter(c=>c.evalId===n.id&&c.configuration==="with_target")[0];return{evalName:n.name,prompt:n.prompt,expectations:n.expectations,grading:r?.grading?r.grading:null,output:r?.outputs?.transcript?.slice(0,500)}});h=await S({targetName:s.name,evalResults:e,model:o.graderModel??o.model,timeout:6e4}),a(`Meta-judge: quality=${h.quality_score}/5, issues=${h.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let N=h?{...P,meta_judgement:h}:P;return a(`Job ${i} completed: ${u}/${l} runs`),await p(`/api/eval-jobs/${i}/state`,{result:N}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),N}w(W,"processEval");function J(v){let f=v.filter(a=>a.status==="completed"),i=v.filter(a=>a.status==="failed"),g=f.filter(a=>{let s=a.grading;return s&&Object.keys(s).length>0}),o=g.length>0?g.reduce((a,s)=>a+(s.grading?.summary?.pass_rate??0),0)/g.length:null;return{total:v.length,completed:f.length,failed:i.length,avgPassRate:o}}w(J,"buildSummary");export{W as a};
@@ -1,2 +1,2 @@
1
- import{c as f}from"./chunk-6QKI756T.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-KLEF5D3A.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
1
+ import{c as f}from"./chunk-6QKI756T.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-OFC7HIBX.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
2
2
  `)),j=i.getRunDetail??(async e=>{try{return await k(`/api/runs/${e}`)}catch(r){if(r instanceof g&&r.statusCode===404)return null;throw r}}),{runId:o}=w,n=await j(o);if(!n)throw new l(`Run ${o} not found`);if(!n.run.projectPath)throw new l(`Run ${o} has no projectPath; cannot resolve a repo root for worktree cleanup`);let a=n.run.projectPath,$=n.sessions.filter(e=>e.endedAt!=null),s=[],u=0,c=0,p=0,d=0,h=new Set;for(let e of $)if(!(!e.projectPath||e.projectPath===a)&&!h.has(e.projectPath)){h.add(e.projectPath);try{let r=await R({repoRoot:a,worktreePath:e.projectPath});r.removed?(u++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),t(`removed worktree ${e.projectPath} (session ${e.id})`)):r.reason==="dirty"?(c++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),t(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(p++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),t(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(r){let P=r instanceof Error?r.message:String(r);d++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:P.slice(0,1e3)}),t(`error removing worktree ${e.projectPath} (session ${e.id}): ${P}`)}}return t(`run ${o} cleanup: removed=${u} skippedDirty=${c} absent=${p} errored=${d}`),{runId:o,repoRoot:a,removed:u,skippedDirty:c,absent:p,errored:d,worktrees:s}}m(C,"processRunCleanup");export{C as a};
@@ -0,0 +1 @@
1
+ import{e as k}from"./chunk-L2CFSMBC.js";import{a as f}from"./chunk-KGURGIZ2.js";import{a as $}from"./chunk-TCR7TSAJ.js";import{d as v}from"./chunk-TZA4HAVF.js";import{f as p}from"./chunk-OFC7HIBX.js";import{a as c}from"./chunk-ZLLER3HP.js";async function x(m,t,s=()=>{}){let{eval_:r,configuration:i,targetContent:g,runNumber:o}=m;s(`[${i}] ${r.name} run#${o} \u2014 executing...`);let a=k({targetType:t.targetType,targetContent:g,targetName:t.targetName}),d={methodology:a.methodology,delivery:a.delivery,isolated:a.isWorktree,...t.candidateContentHash?{candidateContentHash:t.candidateContentHash}:{},...a.leakedFiles.length?{leakedFiles:a.leakedFiles}:{}};a.isWorktree||s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 no git worktree; running without repo context`),a.leakedFiles.length&&s(`[${i}] ${r.name} run#${o} \u2014 \u26A0 CONTAMINATED: ${a.leakedFiles.join(", ")} survived the strip`);try{let n=await v({prompt:r.prompt,targetContent:a.systemPrompt,workDir:a.workDir,timeout:t.timeout,model:t.model});if(n.error){let e=f(n.error);return s(`[${i}] ${r.name} run#${o} \u2014 FAILED (${e.kind}): ${n.error}`),{evalId:r.id,evalTargetId:t.targetId,evalTargetVersion:t.targetVersion,configuration:i,runNumber:o,iteration:t.iteration,status:"failed",outputs:{error:n.error,failureKind:e.kind,failureClass:e.class,...d},timing:{duration_ms:n.durationMs,total_tokens:n.totalTokens},grading:{},failure:e}}s(`[${i}] ${r.name} run#${o} \u2014 completed in ${(n.durationMs/1e3).toFixed(1)}s`);let u={};if(!t.skipGrading&&r.expectations.length>0){s(`[${i}] ${r.name} run#${o} \u2014 grading...`);let e=await $({prompt:r.prompt,output:n.output,expectations:r.expectations,model:t.graderModel??t.model,timeout:t.timeout});u=e,s(`[${i}] ${r.name} run#${o} \u2014 grading done: pass_rate=${e.summary.pass_rate==null?"n/a (all assertions errored)":`${(e.summary.pass_rate*100).toFixed(0)}%`}`)}return{evalId:r.id,evalTargetId:t.targetId,evalTargetVersion:t.targetVersion,configuration:i,runNumber:o,iteration:t.iteration,status:"completed",outputs:{transcript:n.output,...d},timing:{duration_ms:n.durationMs,total_tokens:n.totalTokens,total_duration_seconds:n.durationMs/1e3},grading:u}}finally{a.cleanup()}}c(x,"executeAndGradeCase");async function R(m){let{cases:t,targetContent:s,concurrency:r,runNumber:i,opts:g,skipBaseline:o,onLog:a=c(()=>{},"onLog")}=m,d=o?["with_target"]:["with_target","without_target"],n=[];for(let e of t)for(let l of d)n.push({eval_:e,configuration:l,targetContent:l==="with_target"?s:void 0,runNumber:i});let u=[];for(let e=0;e<n.length;e+=Math.max(1,r)){let l=n.slice(e,e+Math.max(1,r)),h=await Promise.all(l.map(b=>x(b,g,a)));u.push(...h)}for(let e of u)try{await p("/api/eval-runs",e)}catch(l){a(` \u26A0 failed to post a run result: ${l instanceof Error?l.message:String(l)}`)}try{await p(`/api/eval-targets/${g.targetId}/label-state`,{})}catch(e){a(` \u26A0 label-state notification skipped: ${e instanceof Error?e.message:String(e)}`)}return{completed:u.filter(e=>e.status==="completed").length,failed:u.filter(e=>e.status==="failed").length,results:u}}c(R,"runBatchAndPost");export{x as a,R as b};
@@ -1,4 +1,4 @@
1
- import{f as E}from"./chunk-B3BHB26P.js";import{b,e as y,f as k,h as M}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";var v=50,I=24e3,P=3,R=3,C=40,N=4e3,x=new Set(["fact","decision","correction","convention"]),L=`You are distilling DURABLE, PROJECT-SPECIFIC knowledge from an AI coding session so a future agent working on the SAME project starts smarter.
1
+ import{f as E}from"./chunk-MODFTCZY.js";import{b,e as y,f as k,h as M}from"./chunk-OFC7HIBX.js";import{a as u}from"./chunk-ZLLER3HP.js";var v=50,I=24e3,P=3,R=3,C=40,N=4e3,x=new Set(["fact","decision","correction","convention"]),L=`You are distilling DURABLE, PROJECT-SPECIFIC knowledge from an AI coding session so a future agent working on the SAME project starts smarter.
2
2
 
3
3
  Extract ONLY facts / decisions / corrections / conventions that will STILL be true and useful in FUTURE sessions \u2014 architecture facts, deliberate design decisions, corrections of a wrong approach, or project conventions.
4
4
 
@@ -1,4 +1,4 @@
1
- import{b as E,d as R}from"./chunk-KLEF5D3A.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as C}from"node:crypto";import{existsSync as A,mkdirSync as I,readFileSync as p,renameSync as L,rmdirSync as M,writeFileSync as m}from"node:fs";import{homedir as U,tmpdir as x}from"node:os";import{join as c}from"node:path";var $=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function v(t){return $.test(t)?t:`antigravity-${C("sha256").update(t).digest("hex").slice(0,16)}`}o(v,"hookSessionKey");var _=100,F=new Set(["RUN_COMMAND","VIEW_FILE","LIST_DIRECTORY","CODE_ACTION","GREP_SEARCH","SEARCH_WEB"]),H=new Set(["CONVERSATION_HISTORY","KNOWLEDGE_ARTIFACTS","CHECKPOINT"]);function T(){return process.env.RULEMETRIC_CONFIG_DIR??c(U(),".config","rulemetric")}o(T,"configDir");function O(){return c(T(),"antigravity-state")}o(O,"stateDir");function P(t){return c(O(),`${t}.json`)}o(P,"stateFile");function k(){let t=c(T(),"env");if(A(t))try{let n=p(t,"utf-8");for(let r of n.split(/\r?\n/)){let e=r.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);if(!e)continue;let i=e[1];if(process.env[i]!==void 0)continue;let s=e[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),process.env[i]=s}}catch{}}o(k,"loadEnvFile");function b(t){try{let n=p(P(t),"utf-8"),r=JSON.parse(n);if(r&&typeof r=="object"&&"lastStepIdx"in r){let e=r.lastStepIdx;if(typeof e=="number"&&Number.isFinite(e))return{lastStepIdx:e}}}catch{}return null}o(b,"loadState");function g(t,n){I(O(),{recursive:!0});let r=P(t),e=`${r}.tmp`;m(e,JSON.stringify(n),{mode:384});try{L(e,r)}catch{m(r,JSON.stringify(n),{mode:384})}}o(g,"saveState");function N(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=c(r,v(t));try{return p(e,"utf-8").trim()||null}catch{return null}}o(N,"resolveRwSessionId");function W(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=v(t),i=c(r,`${e}.seq`),s=c(r,`${e}.seqlock`),l=Date.now()+5e3;for(;Date.now()<l;)try{I(s);break}catch{}let a=1;try{a=parseInt(p(i,"utf-8").trim(),10)+1,(!Number.isFinite(a)||a<1)&&(a=1)}catch{a=1}try{m(i,String(a))}catch{}try{M(s)}catch{}return a}o(W,"nextSequence");function Y(t,n){let r;try{r=p(t,"utf-8")}catch{return[]}let e=[];for(let i of r.split(/\r?\n/))if(i.trim())try{let s=JSON.parse(i);typeof s.step_index=="number"&&s.step_index>n&&e.push(s)}catch{}return e.sort((i,s)=>i.step_index-s.step_index),e}o(Y,"readNewRecords");function G(t){let n;try{n=p(t,"utf-8")}catch{return-1}let r=-1;for(let e of n.split(/\r?\n/))if(e.trim())try{let i=JSON.parse(e);typeof i.step_index=="number"&&i.step_index>r&&(r=i.step_index)}catch{}return r}o(G,"findMaxStepIndex");function J(t){let n=t.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);return n?n[1].trim():t.trim()}o(J,"extractUserPrompt");function j(t,n){let r=t.created_at??new Date().toISOString(),e={antigravityStepIndex:t.step_index,antigravitySource:t.source,antigravityType:t.type};if(H.has(t.type)||F.has(t.type))return null;if(t.source==="USER_EXPLICIT"&&t.type==="USER_INPUT")return{sequence:n,eventType:"user_message",content:J(t.content??""),timestamp:r,metadata:e};if(t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"){let i=[];return t.thinking&&t.thinking.trim()&&i.push(`[thinking]
1
+ import{b as E,d as R}from"./chunk-OFC7HIBX.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as C}from"node:crypto";import{existsSync as A,mkdirSync as I,readFileSync as p,renameSync as L,rmdirSync as M,writeFileSync as m}from"node:fs";import{homedir as U,tmpdir as x}from"node:os";import{join as c}from"node:path";var $=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function v(t){return $.test(t)?t:`antigravity-${C("sha256").update(t).digest("hex").slice(0,16)}`}o(v,"hookSessionKey");var _=100,F=new Set(["RUN_COMMAND","VIEW_FILE","LIST_DIRECTORY","CODE_ACTION","GREP_SEARCH","SEARCH_WEB"]),H=new Set(["CONVERSATION_HISTORY","KNOWLEDGE_ARTIFACTS","CHECKPOINT"]);function T(){return process.env.RULEMETRIC_CONFIG_DIR??c(U(),".config","rulemetric")}o(T,"configDir");function O(){return c(T(),"antigravity-state")}o(O,"stateDir");function P(t){return c(O(),`${t}.json`)}o(P,"stateFile");function k(){let t=c(T(),"env");if(A(t))try{let n=p(t,"utf-8");for(let r of n.split(/\r?\n/)){let e=r.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);if(!e)continue;let i=e[1];if(process.env[i]!==void 0)continue;let s=e[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),process.env[i]=s}}catch{}}o(k,"loadEnvFile");function b(t){try{let n=p(P(t),"utf-8"),r=JSON.parse(n);if(r&&typeof r=="object"&&"lastStepIdx"in r){let e=r.lastStepIdx;if(typeof e=="number"&&Number.isFinite(e))return{lastStepIdx:e}}}catch{}return null}o(b,"loadState");function g(t,n){I(O(),{recursive:!0});let r=P(t),e=`${r}.tmp`;m(e,JSON.stringify(n),{mode:384});try{L(e,r)}catch{m(r,JSON.stringify(n),{mode:384})}}o(g,"saveState");function N(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=c(r,v(t));try{return p(e,"utf-8").trim()||null}catch{return null}}o(N,"resolveRwSessionId");function W(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=v(t),i=c(r,`${e}.seq`),s=c(r,`${e}.seqlock`),l=Date.now()+5e3;for(;Date.now()<l;)try{I(s);break}catch{}let a=1;try{a=parseInt(p(i,"utf-8").trim(),10)+1,(!Number.isFinite(a)||a<1)&&(a=1)}catch{a=1}try{m(i,String(a))}catch{}try{M(s)}catch{}return a}o(W,"nextSequence");function Y(t,n){let r;try{r=p(t,"utf-8")}catch{return[]}let e=[];for(let i of r.split(/\r?\n/))if(i.trim())try{let s=JSON.parse(i);typeof s.step_index=="number"&&s.step_index>n&&e.push(s)}catch{}return e.sort((i,s)=>i.step_index-s.step_index),e}o(Y,"readNewRecords");function G(t){let n;try{n=p(t,"utf-8")}catch{return-1}let r=-1;for(let e of n.split(/\r?\n/))if(e.trim())try{let i=JSON.parse(e);typeof i.step_index=="number"&&i.step_index>r&&(r=i.step_index)}catch{}return r}o(G,"findMaxStepIndex");function J(t){let n=t.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);return n?n[1].trim():t.trim()}o(J,"extractUserPrompt");function j(t,n){let r=t.created_at??new Date().toISOString(),e={antigravityStepIndex:t.step_index,antigravitySource:t.source,antigravityType:t.type};if(H.has(t.type)||F.has(t.type))return null;if(t.source==="USER_EXPLICIT"&&t.type==="USER_INPUT")return{sequence:n,eventType:"user_message",content:J(t.content??""),timestamp:r,metadata:e};if(t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"){let i=[];return t.thinking&&t.thinking.trim()&&i.push(`[thinking]
2
2
  ${t.thinking.trim()}`),t.content&&t.content.trim()&&i.push(t.content.trim()),t.tool_calls&&t.tool_calls.length>0&&(e.antigravityToolCalls=t.tool_calls.map(s=>s.name).filter(Boolean)),{sequence:n,eventType:"assistant_response",content:i.join(`
3
3
 
4
4
  `)||null,timestamp:r,metadata:e}}return t.source==="MODEL"&&t.type==="GENERIC"?{sequence:n,eventType:"tool_result",content:t.content??null,timestamp:r,metadata:e}:t.source==="SYSTEM"&&(t.type==="SYSTEM_MESSAGE"||t.type==="ERROR_MESSAGE")?null:{sequence:n,eventType:`antigravity_${t.type.toLowerCase()}`,content:t.content??null,timestamp:r,metadata:e}}o(j,"classifyRecord");function q(t){try{let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}o(q,"parseHookPayload");async function K(t,n,r,e,i={}){let s=i.errorSink??(u=>process.stderr.write(u)),l=0,a=0,d=0,S=0,f=e;for(let u of t){l++,i.onProgress?.({attempted:l,total:t.length,record:u});let w=W(r),y=j(u,w);if(!y)S++;else try{await R(`/api/sessions/${n}/events`,{method:"POST",body:y}),a++}catch(h){d++;let D=h instanceof E?h.statusCode:"unknown";s(`[antigravity-tailer] failed step=${u.step_index} type=${u.type} status=${D}
@@ -1 +1 @@
1
- import{b as $}from"./chunk-G5BXZT6F.js";import{e as w,f as k}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function _(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u(_,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function C(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:_(l[r])?1:0,withoutScore:_(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(C,"pairRunsByEval");function T(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=C(i,l);if(d.length>0){if(t=$(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(T,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}&activeCasesOnly=1${o}`);if(a.push(...i),i.length<s)break}return T(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{T as a,S as b,B as c};
1
+ import{b as $}from"./chunk-G5BXZT6F.js";import{e as w,f as k}from"./chunk-OFC7HIBX.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,2 @@
1
+ import{a}from"./chunk-ZLLER3HP.js";import*as c from"node:fs";import*as s from"node:path";var f=a(t=>`<!-- rulemetric:start ${t} -->`,"BLOCK_START"),g=a(t=>`<!-- rulemetric:end ${t} -->`,"BLOCK_END"),u=/<!-- rulemetric:start ([^\s>]+) -->\n?([\s\S]*?)<!-- rulemetric:end \1 -->/g,d=12;function l(t,o){let r=[],e=t;for(let n of t.matchAll(u))r.push({id:n[1],content:n[2],source:o}),e=e.replace(n[0],`
2
+ `);let i=e.trim();return{managed:r,handwritten:i.length>0?{id:`${o}#handwritten`,content:i,source:o}:null}}a(l,"parseClaudeMd");function p(t){if(!c.existsSync(t))return null;try{return l(c.readFileSync(t,"utf8"),t)}catch{return null}}a(p,"readClaudeMd");function m(t){let o=[],r=s.resolve(t);for(let i=0;i<d&&(o.push(s.join(r,"CLAUDE.md")),!c.existsSync(s.join(r,".git")));i+=1){let n=s.dirname(r);if(n===r)break;r=n}let e=[];for(let i of o.reverse()){let n=p(i);n&&(n.handwritten&&e.push(n.handwritten),e.push(...n.managed))}return e}a(m,"readInstructionContext");export{f as a,g as b,l as c,p as d,m as e};
@@ -1 +1 @@
1
- import{a as i}from"./chunk-5RUEROLC.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-YY53MMH7.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};
@@ -0,0 +1 @@
1
+ import{a as p,c as Vr}from"./chunk-ZLLER3HP.js";import{boolean as Gr,date as Fr,index as Ot,integer as Jr,jsonb as Qr,pgTable as qt,text as A,timestamp as L,uniqueIndex as Yr,uuid as ae}from"drizzle-orm/pg-core";var Ko=qt("announcements",{id:ae("id").primaryKey().defaultRandom(),version:A("version").notNull().unique(),releaseDate:Fr("release_date").notNull(),subject:A("subject").notNull(),htmlBody:A("html_body").notNull(),textBody:A("text_body").notNull(),sections:Qr("sections").notNull().default({}),status:A("status").notNull().default("draft"),recipientCount:Jr("recipient_count"),sentAt:L("sent_at",{withTimezone:!0}),sentBy:ae("sent_by"),error:A("error"),createdAt:L("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:L("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ot("idx_announcements_status").on(e.status),Ot("idx_announcements_created").on(e.createdAt)]),Co=qt("announcement_deliveries",{id:ae("id").primaryKey().defaultRandom(),announcementId:ae("announcement_id").notNull(),userId:ae("user_id").notNull(),email:A("email").notNull(),status:A("status").notNull().default("pending"),providerId:A("provider_id"),error:A("error"),sentAt:L("sent_at",{withTimezone:!0}),createdAt:L("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Yr("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Ot("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Oo=qt("notification_preferences",{userId:ae("user_id").primaryKey(),productAnnouncements:Gr("product_announcements").notNull().default(!0),unsubscribeToken:A("unsubscribe_token").notNull().unique(),unsubscribedAt:L("unsubscribed_at",{withTimezone:!0}),createdAt:L("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:L("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{boolean as Ze,pgTable as $r,real as Wr,text as et,timestamp as Mt,uuid as Ho}from"drizzle-orm/pg-core";import{pgTable as Xe,text as de,timestamp as je,jsonb as qo,uuid as X,primaryKey as Mo}from"drizzle-orm/pg-core";var l=Xe("organizations",{id:X("id").primaryKey().defaultRandom(),name:de("name").unique().notNull(),slug:de("slug").unique().notNull(),metadata:qo("metadata"),createdAt:je("created_at",{withTimezone:!0}).defaultNow(),updatedAt:je("updated_at",{withTimezone:!0}).defaultNow()}),v=Xe("teams",{id:X("id").primaryKey().defaultRandom(),orgId:X("org_id").references(()=>l.id,{onDelete:"cascade"}),name:de("name").notNull(),slug:de("slug").notNull(),metadata:qo("metadata"),createdAt:je("created_at",{withTimezone:!0}).defaultNow()}),ue=Xe("user_organizations",{userId:X("user_id").notNull(),orgId:X("org_id").references(()=>l.id,{onDelete:"cascade"}).notNull(),role:de("role").notNull().default("member"),createdAt:je("created_at",{withTimezone:!0}).defaultNow()},e=>[Mo({columns:[e.userId,e.orgId]})]),le=Xe("user_teams",{userId:X("user_id").notNull(),teamId:X("team_id").references(()=>v.id,{onDelete:"cascade"}).notNull(),role:de("role").notNull().default("member"),createdAt:je("created_at",{withTimezone:!0}).defaultNow()},e=>[Mo({columns:[e.userId,e.teamId]})]);var o=$r("profiles",{id:Ho("id").primaryKey(),email:et("email"),displayName:et("display_name"),activeOrgId:Ho("active_org_id").references(()=>l.id,{onDelete:"set null"}),isSuperadmin:Ze("is_superadmin").notNull().default(!1),claudeCodePlan:et("claude_code_plan"),planSource:et("plan_source").notNull().default("detected"),setupCompletedAt:Mt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:Ze("live_send_skipped").notNull().default(!1),autoAcceptSuggestions:Ze("auto_accept_suggestions").notNull().default(!0),evolutionPaused:Ze("evolution_paused").notNull().default(!1),suggestionConfidenceThreshold:Wr("suggestion_confidence_threshold").notNull().default(.7),createdAt:Mt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Mt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Xr,text as Ht,timestamp as tt,uuid as ot,index as Lo}from"drizzle-orm/pg-core";var E=Xr("org_invitations",{id:ot("id").primaryKey().defaultRandom(),orgId:ot("org_id").notNull().references(()=>l.id,{onDelete:"cascade"}),email:Ht("email").notNull(),role:Ht("role").notNull().default("member"),teamId:ot("team_id").references(()=>v.id,{onDelete:"set null"}),invitedBy:ot("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:Ht("token").notNull().unique(),expiresAt:tt("expires_at",{withTimezone:!0}).notNull(),acceptedAt:tt("accepted_at",{withTimezone:!0}),revokedAt:tt("revoked_at",{withTimezone:!0}),createdAt:tt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Lo("idx_org_invitations_token").on(e.token),Lo("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Lt,text as f,timestamp as U,jsonb as nt,uuid as j,integer as rt,boolean as Zr,uniqueIndex as st,index as ze}from"drizzle-orm/pg-core";var n=Lt("instructions",{id:j("id").primaryKey().defaultRandom(),name:f("name").notNull(),description:f("description").notNull(),type:f("type").notNull().default("instruction"),scope:f("scope").notNull(),scopeRef:j("scope_ref"),version:f("version").notNull(),content:f("content").notNull(),frontmatter:nt("frontmatter").notNull(),slots:nt("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:j("created_by"),createdAt:U("created_at",{withTimezone:!0}).defaultNow(),updatedAt:U("updated_at",{withTimezone:!0}).defaultNow(),archived:Zr("archived").default(!1),archivedAt:U("archived_at",{withTimezone:!0}),archivedBy:j("archived_by"),forkedFromId:j("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:f("upstream_version"),badge:f("badge"),contentHash:f("content_hash"),contextIdentity:f("context_identity"),scanScore:rt("scan_score"),scanFindings:nt("scan_findings"),popularityScore:rt("popularity_score"),sourceUpdatedAt:U("source_updated_at",{withTimezone:!0})},e=>[st("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),ze("idx_instructions_scope").on(e.scope,e.scopeRef),ze("idx_instructions_created_by").on(e.createdBy),ze("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),ze("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),Uo=Lt("instruction_version_identities",{id:j("id").primaryKey().defaultRandom(),instructionId:j("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:f("content_hash").notNull(),versionOrdinal:rt("version_ordinal").notNull(),content:f("content"),firstSeenAt:U("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:U("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:U("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[st("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),st("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),ze("idx_ivi_instruction").on(e.instructionId)]),ce=Lt("instruction_versions",{id:j("id").primaryKey().defaultRandom(),instructionId:j("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:rt("version_number").notNull(),content:f("content").notNull(),frontmatter:nt("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:j("created_by"),createdAt:U("created_at",{withTimezone:!0}).defaultNow()},e=>[st("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);import{pgTable as es,text as ts,timestamp as os,jsonb as ns,uuid as Ut,index as Bo}from"drizzle-orm/pg-core";var me=es("instruction_events",{id:Ut("id").primaryKey().defaultRandom(),instructionId:Ut("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:ts("event_type").notNull(),actorId:Ut("actor_id").notNull(),metadata:ns("metadata"),createdAt:os("created_at",{withTimezone:!0}).defaultNow()},e=>[Bo("idx_instruction_events_instruction").on(e.instructionId),Bo("idx_instruction_events_type").on(e.eventType)]);import{boolean as rs,jsonb as ss,pgTable as Vt,primaryKey as Vo,text as Z,timestamp as Re,uniqueIndex as Bt,uuid as ee}from"drizzle-orm/pg-core";import{sql as is}from"drizzle-orm";var r=Vt("projects",{id:ee("id").primaryKey().defaultRandom(),orgId:ee("org_id").references(()=>l.id,{onDelete:"cascade"}),name:Z("name").notNull(),description:Z("description"),githubRepo:Z("github_repo"),gitRemoteUrl:Z("git_remote_url"),gitRootCommit:Z("git_root_commit"),gitRemoteAliases:Z("git_remote_aliases").array().notNull().default([]),metadata:ss("metadata"),createdBy:ee("created_by"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Re("updated_at",{withTimezone:!0}).defaultNow()},e=>[Bt("projects_org_name_idx").on(e.orgId,e.name),Bt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(is`${e.gitRemoteUrl} IS NOT NULL`)]),B=Vt("project_instructions",{projectId:ee("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:ee("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Re("added_at",{withTimezone:!0}).defaultNow(),addedBy:ee("added_by")},e=>[Vo({columns:[e.projectId,e.instructionId]})]),Go=Vt("project_checkouts",{projectId:ee("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:Z("path").notNull(),isWorktree:rs("is_worktree").notNull().default(!1),firstSeen:Re("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Re("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[Vo({columns:[e.projectId,e.path]}),Bt("project_checkouts_path_unique").on(e.path)]);import{pgTable as Jt,text as I,timestamp as ke,jsonb as te,uuid as b,integer as at,uniqueIndex as Jo,index as z}from"drizzle-orm/pg-core";import{pgTable as as,text as _e,timestamp as Gt,jsonb as Fo,uuid as it,integer as ds,boolean as us,index as Ft}from"drizzle-orm/pg-core";var g=as("agent_runs",{id:it("id").primaryKey().defaultRandom(),userId:it("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:it("org_id").references(()=>l.id,{onDelete:"set null"}),projectId:it("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:_e("project_path"),gitRemote:_e("git_remote"),baseBranch:_e("base_branch"),title:_e("title"),prompt:_e("prompt"),toolSpec:Fo("tool_spec").notNull().default([]),autoWorktree:us("auto_worktree").notNull().default(!0),status:_e("status").notNull().default("pending"),sessionCount:ds("session_count").notNull().default(0),metadata:Fo("metadata").notNull().default({}),createdAt:Gt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Gt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Gt("completed_at",{withTimezone:!0})},e=>[Ft("idx_agent_runs_user").on(e.userId),Ft("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Ft("idx_agent_runs_project").on(e.projectId)]);var u=Jt("sessions",{id:b("id").primaryKey().defaultRandom(),userId:b("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:b("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:b("org_id").references(()=>l.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:ke("started_at",{withTimezone:!0}).notNull(),endedAt:ke("ended_at",{withTimezone:!0}),eventCount:at("event_count").default(0),tokenUsage:te("token_usage"),analysis:te("analysis"),analyzedAt:ke("analyzed_at",{withTimezone:!0}),analyzedEventCount:at("analyzed_event_count"),analyzedTurnCount:at("analyzed_turn_count"),metadata:te("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:b("run_id").references(()=>g.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:ke("created_at",{withTimezone:!0}).defaultNow()},e=>[z("idx_sessions_user").on(e.userId),z("idx_sessions_tool").on(e.tool),z("idx_sessions_started_at").on(e.startedAt),z("idx_sessions_project").on(e.projectId),z("idx_sessions_org_started_at").on(e.orgId,e.startedAt),z("idx_sessions_run").on(e.runId),Jo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),pe=Jt("session_events",{id:b("id").primaryKey().defaultRandom(),sessionId:b("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),sequence:at("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:te("tool_input"),toolOutput:te("tool_output"),tokenUsage:te("token_usage"),model:I("model"),timestamp:ke("timestamp",{withTimezone:!0}).notNull(),metadata:te("metadata").default({})},e=>[Jo("session_events_session_sequence_idx").on(e.sessionId,e.sequence),z("idx_session_events_session_id").on(e.sessionId),z("idx_session_events_event_type").on(e.eventType),z("idx_session_events_model").on(e.model)]),V=Jt("session_instructions",{sessionId:b("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),instructionId:b("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:I("link_method").notNull(),contentHash:I("content_hash")},e=>[z("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as Qo,text as dt,timestamp as Yo,uuid as R,integer as $o,index as fe,unique as ls}from"drizzle-orm/pg-core";var S=Qo("treatment_assignments",{id:R("id").primaryKey().defaultRandom(),userId:R("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:R("treatment_id").notNull(),treatmentVersion:$o("treatment_version").notNull().default(1),projectId:R("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:R("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:dt("method").notNull(),assignedAt:Yo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[fe("idx_treatment_assignments_user").on(e.userId),fe("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),fe("idx_treatment_assignments_project").on(e.projectId)]),P=Qo("treatment_exposures",{id:R("id").primaryKey().defaultRandom(),sessionId:R("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),userId:R("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:R("treatment_id").notNull(),treatmentVersion:$o("treatment_version").notNull().default(1),assignmentId:R("assignment_id").references(()=>S.id,{onDelete:"set null"}),method:dt("method").notNull(),exposedAt:Yo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ls("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),fe("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),fe("idx_treatment_exposures_user").on(e.userId),fe("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as cs,text as Qt,timestamp as ms,uuid as ut,integer as _s,index as Wo,uniqueIndex as ps}from"drizzle-orm/pg-core";var Xo=cs("pending_treatment_exposures",{id:ut("id").primaryKey().defaultRandom(),userId:ut("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Qt("external_session_id").notNull(),treatmentType:Qt("treatment_type").notNull(),treatmentId:ut("treatment_id").notNull(),treatmentVersion:_s("treatment_version").notNull().default(1),method:Qt("method").notNull().default("injected"),projectId:ut("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:ms("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ps("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Wo("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Wo("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as Zo,text as G,timestamp as en,uuid as xe,numeric as fs,index as Yt,unique as xs}from"drizzle-orm/pg-core";var Ee=Zo("instruction_experiments",{id:xe("id").primaryKey().defaultRandom(),userId:xe("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:xe("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:G("project_path").notNull(),status:G("status").notNull().default("running"),treatedShare:fs("treated_share").notNull().default("0.5"),salt:G("salt").notNull(),contentHash:G("content_hash"),source:G("source").notNull().default("manual"),stoppedReason:G("stopped_reason"),createdAt:en("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Yt("idx_instruction_experiments_lookup").on(e.userId,e.projectPath)]),tn=Zo("instruction_experiment_arms",{id:xe("id").primaryKey().defaultRandom(),experimentId:xe("experiment_id").notNull().references(()=>Ee.id,{onDelete:"cascade"}),userId:xe("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:G("external_session_id").notNull(),arm:G("arm").notNull(),assignedAt:en("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[xs("instruction_experiment_arms_unique").on(e.experimentId,e.externalSessionId),Yt("idx_instruction_experiment_arms_experiment").on(e.experimentId,e.arm),Yt("idx_instruction_experiment_arms_session").on(e.externalSessionId)]);import{pgTable as Ns,text as $t,timestamp as gs,uuid as lt,numeric as Wt,integer as on,jsonb as hs,index as vs,unique as Is}from"drizzle-orm/pg-core";var nn=Ns("instruction_verdicts",{id:lt("id").primaryKey().defaultRandom(),userId:lt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:lt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:$t("content_hash").notNull(),projectPath:$t("project_path").notNull(),segment:hs("segment").notNull().default({}),decision:$t("decision").notNull(),delta:Wt("delta").notNull(),ciLower:Wt("ci_lower").notNull(),ciUpper:Wt("ci_upper").notNull(),nTreated:on("n_treated").notNull(),nControl:on("n_control").notNull(),experimentId:lt("experiment_id").references(()=>Ee.id,{onDelete:"set null"}),decidedAt:gs("decided_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Is("instruction_verdicts_unique").on(e.instructionId,e.contentHash,e.projectPath),vs("idx_instruction_verdicts_render").on(e.userId,e.projectPath)]);import{pgTable as ys,text as ct,timestamp as Xt,uuid as Zt,integer as Ts,unique as ws,index as As}from"drizzle-orm/pg-core";var rn=ys("insight_recommendation_log",{id:Zt("id").primaryKey().defaultRandom(),userId:Zt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),projectPath:ct("project_path").notNull().default(""),category:ct("category").notNull(),contentHash:ct("content_hash").notNull(),label:ct("label").notNull().default(""),firstSeenAt:Xt("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:Xt("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),timesGenerated:Ts("times_generated").notNull().default(1),lastJobId:Zt("last_job_id"),dismissedAt:Xt("dismissed_at",{withTimezone:!0})},e=>[ws("insight_recommendation_log_unique").on(e.userId,e.projectPath,e.contentHash),As("idx_insight_recommendation_log_read").on(e.userId,e.projectPath)]);import{pgTable as Ds,text as Ne,timestamp as eo,uuid as be,integer as sn,index as mt}from"drizzle-orm/pg-core";var y=Ds("memories",{id:be("id").primaryKey().defaultRandom(),userId:be("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:be("org_id"),projectId:be("project_id").references(()=>r.id,{onDelete:"set null"}),version:sn("version").notNull().default(1),parentId:be("parent_id").references(()=>y.id,{onDelete:"set null"}),kind:Ne("kind").notNull(),title:Ne("title").notNull(),body:Ne("body").notNull(),source:Ne("source").notNull(),status:Ne("status").notNull().default("active"),trustClass:Ne("trust_class"),trustVersion:sn("trust_version"),trustComputedAt:eo("trust_computed_at",{withTimezone:!0}),createdAt:eo("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:eo("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[mt("idx_memories_user").on(e.userId),mt("idx_memories_project").on(e.projectId),mt("idx_memories_parent").on(e.parentId),mt("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as js,text as Se,timestamp as to,uuid as oo,integer as an,jsonb as zs,index as dn}from"drizzle-orm/pg-core";var un=js("memory_experiments",{id:oo("id").primaryKey().defaultRandom(),memoryId:oo("memory_id").notNull().references(()=>y.id,{onDelete:"cascade"}),userId:oo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:an("memory_version").notNull().default(1),taskPrompt:Se("task_prompt").notNull(),expectations:Se("expectations").array().notNull().default([]),trials:an("trials").notNull().default(10),model:Se("model"),status:Se("status").notNull().default("pending"),result:zs("result").$type(),error:Se("error"),createdAt:to("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:to("started_at",{withTimezone:!0}),completedAt:to("completed_at",{withTimezone:!0})},e=>[dn("idx_memory_experiments_memory").on(e.memoryId),dn("idx_memory_experiments_user").on(e.userId)]);import{pgTable as Rs,text as ge,timestamp as no,uuid as ro,jsonb as ks,uniqueIndex as Es,index as ln}from"drizzle-orm/pg-core";var _t=Rs("session_terminal_targets",{id:ro("id").primaryKey().defaultRandom(),userId:ro("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:ro("session_id").references(()=>u.id,{onDelete:"set null"}),externalSessionId:ge("external_session_id"),kind:ge("kind").notNull(),target:ge("target").notNull(),status:ge("status").notNull().default("active"),attachCommand:ge("attach_command").notNull(),projectPath:ge("project_path"),metadata:ks("metadata").notNull().default({}),lastSeenAt:no("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:no("created_at",{withTimezone:!0}).defaultNow(),updatedAt:no("updated_at",{withTimezone:!0}).defaultNow()},e=>[Es("idx_session_terminal_targets_user_target").on(e.userId,e.target),ln("idx_session_terminal_targets_session").on(e.sessionId),ln("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as bs,index as pt,jsonb as cn,pgTable as Ss,text as oe,timestamp as Pe,uuid as ft,integer as mn}from"drizzle-orm/pg-core";var _n=Ss("session_send_jobs",{id:ft("id").primaryKey().defaultRandom(),userId:ft("user_id").notNull(),sessionId:ft("session_id").notNull().references(()=>u.id,{onDelete:"cascade"}),terminalTargetId:ft("terminal_target_id").references(()=>_t.id,{onDelete:"set null"}),target:oe("target").notNull(),message:oe("message").notNull(),submit:bs("submit").notNull().default(!0),delivery:oe("delivery").notNull().default("live"),status:oe("status").notNull().default("pending"),result:cn("result"),error:oe("error"),attempts:mn("attempts").notNull().default(0),taskKind:oe("task_kind"),payload:cn("payload"),claimedBy:oe("claimed_by"),claimedAt:Pe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Pe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:mn("lease_recoveries").notNull().default(0),createdAt:Pe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Pe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Pe("completed_at",{withTimezone:!0})},e=>[pt("idx_session_send_jobs_user").on(e.userId),pt("idx_session_send_jobs_session").on(e.sessionId),pt("idx_session_send_jobs_status").on(e.status),pt("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as fn,text as ne,timestamp as xt,jsonb as xn,uuid as F,integer as Ps,boolean as Ks,uniqueIndex as Cs,index as pn,primaryKey as Os}from"drizzle-orm/pg-core";var D=fn("packs",{id:F("id").primaryKey().defaultRandom(),name:ne("name").notNull(),description:ne("description").notNull(),scope:ne("scope").notNull(),scopeRef:F("scope_ref"),version:ne("version").notNull().default("1.0.0"),tags:ne("tags").array(),badge:ne("badge"),metadata:xn("metadata"),createdBy:F("created_by"),createdAt:xt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:xt("updated_at",{withTimezone:!0}).defaultNow(),archived:Ks("archived").default(!1),archivedAt:xt("archived_at",{withTimezone:!0}),archivedBy:F("archived_by"),forkedFromId:F("forked_from_id").references(()=>D.id,{onDelete:"set null"}),upstreamVersion:ne("upstream_version")},e=>[Cs("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)]),J=fn("pack_instructions",{packId:F("pack_id").references(()=>D.id,{onDelete:"cascade"}).notNull(),instructionId:F("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Ps("position").notNull().default(0),slotOverrides:xn("slot_overrides"),addedAt:xt("added_at",{withTimezone:!0}).defaultNow(),addedBy:F("added_by")},e=>[Os({columns:[e.packId,e.instructionId]})]);import{pgTable as qs,text as so,timestamp as Ms,jsonb as Hs,uuid as io,index as he}from"drizzle-orm/pg-core";var ve=qs("instruction_usage_events",{id:io("id").primaryKey().defaultRandom(),instructionId:io("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:io("user_id").notNull(),surface:so("surface").notNull(),action:so("action").notNull(),metadata:Hs("metadata"),traceId:so("trace_id"),createdAt:Ms("created_at",{withTimezone:!0}).defaultNow()},e=>[he("idx_usage_events_instruction").on(e.instructionId),he("idx_usage_events_user").on(e.userId),he("idx_usage_events_surface").on(e.surface),he("idx_usage_events_action").on(e.action),he("idx_usage_events_created_at").on(e.createdAt),he("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as Ls,text as Nt,timestamp as Nn,jsonb as Us,uuid as gn,index as ao}from"drizzle-orm/pg-core";var hn=Ls("worker_connections",{id:gn("id").primaryKey().defaultRandom(),userId:gn("user_id").notNull(),workerType:Nt("worker_type").notNull().default("mcp"),clientName:Nt("client_name").notNull(),clientVersion:Nt("client_version"),workerVersion:Nt("worker_version"),lastHeartbeat:Nn("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Nn("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Us("metadata")},e=>[ao("idx_worker_connections_user").on(e.userId),ao("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),ao("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Bs,text as gt,timestamp as Vs,jsonb as Gs,uuid as vn,index as In}from"drizzle-orm/pg-core";var yn=Bs("cli_setup_events",{id:vn("id").primaryKey().defaultRandom(),userId:vn("user_id").notNull(),deviceId:gt("device_id").notNull(),event:gt("event").notNull(),cliVersion:gt("cli_version"),os:gt("os"),props:Gs("props").notNull().default({}),createdAt:Vs("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[In("idx_cli_setup_events_user").on(e.userId,e.createdAt),In("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Fs,text as re,integer as Js,boolean as Qs,timestamp as Ys,jsonb as $s,uuid as Ws,index as Tn}from"drizzle-orm/pg-core";var wn=Fs("cli_error_events",{id:Ws("id").primaryKey().defaultRandom(),deviceId:re("device_id"),event:re("event").notNull(),command:re("command"),statusCode:Js("status_code"),message:re("message"),cliVersion:re("cli_version"),os:re("os"),nodeVersion:re("node_version"),proxied:Qs("proxied"),props:$s("props").notNull().default({}),createdAt:Ys("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Tn("idx_cli_error_events_created").on(e.createdAt),Tn("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as Xs}from"drizzle-orm";import{pgTable as se,text as m,timestamp as h,jsonb as T,uuid as c,integer as K,boolean as Ke,index as x,unique as An}from"drizzle-orm/pg-core";var s=se("eval_targets",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),name:m("name").notNull(),type:m("type").notNull(),content:m("content").notNull(),description:m("description").notNull().default(""),metadata:T("metadata").notNull().default({}),version:K("version").notNull().default(1),parentId:c("parent_id").references(()=>s.id,{onDelete:"set null"}),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[x("eval_targets_name_user_idx").on(e.name,e.userId),x("idx_eval_targets_user").on(e.userId),x("idx_eval_targets_type").on(e.type),x("idx_eval_targets_parent").on(e.parentId)]),C=se("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:m("name").notNull(),prompt:m("prompt").notNull(),expectedOutput:m("expected_output").notNull().default(""),files:T("files").notNull().default([]),expectations:T("expectations").notNull().default([]),retiredAt:h("retired_at",{withTimezone:!0}),retiredReason:m("retired_reason"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:h("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[x("idx_evals_target").on(e.evalTargetId),x("idx_evals_target_active").on(e.evalTargetId).where(Xs`${e.retiredAt} IS NULL`)]),k=se("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>C.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:K("eval_target_version").notNull(),configuration:m("configuration").notNull(),runNumber:K("run_number").notNull().default(1),iteration:K("iteration").notNull().default(1),status:m("status").notNull().default("completed"),outputs:T("outputs").notNull().default({}),timing:T("timing").notNull().default({}),grading:T("grading").notNull().default({}),comparison:T("comparison"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[x("idx_eval_runs_eval").on(e.evalId),x("idx_eval_runs_target").on(e.evalTargetId),x("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),Dn=se("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:K("target_a_version").notNull(),targetBVersion:K("target_b_version").notNull(),isSwapped:Ke("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:m("raw_output"),model:m("model"),status:m("status").notNull().default("completed"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[x("idx_eval_comparisons_target_a").on(e.targetAId),x("idx_eval_comparisons_target_b").on(e.targetBId),x("idx_eval_comparisons_user").on(e.userId)]),jn=se("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>k.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),expectationIndex:K("expectation_index").notNull(),expectationText:m("expectation_text").notNull(),judgePassed:Ke("judge_passed").notNull(),judgeMethod:m("judge_method").notNull(),judgeModel:m("judge_model"),verdict:m("verdict").notNull(),flag:m("flag"),note:m("note"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[x("idx_eval_grade_annotations_target").on(e.evalTargetId),x("idx_eval_grade_annotations_run").on(e.evalRunId),An("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),zn=se("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(()=>k.id,{onDelete:"cascade"}),expectationIndex:K("expectation_index").notNull(),expectationText:m("expectation_text").notNull(),judgePassed:Ke("judge_passed").notNull(),humanPassed:Ke("human_passed").notNull(),reviewerEngine:m("reviewer_engine").notNull(),reviewerModel:m("reviewer_model").notNull(),reviewerPassed:Ke("reviewer_passed").notNull(),resolvedAt:h("resolved_at",{withTimezone:!0}),resolution:m("resolution"),createdAt:h("created_at",{withTimezone:!0}).defaultNow(),updatedAt:h("updated_at",{withTimezone:!0}).defaultNow()},e=>[x("idx_jrv_target").on(e.evalTargetId),An("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),Ie=se("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:K("iteration").notNull().default(1),runSummary:T("run_summary").notNull().default({}),notes:T("notes").notNull().default([]),feedback:T("feedback"),createdAt:h("created_at",{withTimezone:!0}).defaultNow()},e=>[x("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as uo}from"drizzle-orm";import{pgTable as Zs,text as O,timestamp as ei,jsonb as ht,uuid as vt,boolean as ti,index as Ce,uniqueIndex as oi}from"drizzle-orm/pg-core";var Rn=Zs("instruction_promotions",{id:vt("id").primaryKey().defaultRandom(),userId:vt("user_id").notNull(),evalTargetId:vt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),instructionId:vt("instruction_id").references(()=>n.id,{onDelete:"set null"}),fromContentHash:O("from_content_hash").notNull(),toContentHash:O("to_content_hash").notNull(),fromContent:O("from_content").notNull(),toContent:O("to_content").notNull(),proposalSource:O("proposal_source").notNull(),proposalRationale:O("proposal_rationale").notNull().default(""),decision:O("decision").notNull(),applied:ti("applied").notNull().default(!1),refusals:ht("refusals").notNull().default([]),rationale:O("rationale").notNull().default(""),effectClass:O("effect_class").notNull(),verdict:ht("verdict").notNull().default({}),gates:ht("gates").notNull().default({}),touchedSections:ht("touched_sections").notNull().default([]),createdAt:ei("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ce("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(uo`${e.applied}`),Ce("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Ce("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Ce("idx_instruction_promotions_to_hash").on(e.toContentHash),oi("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(uo`${e.applied}`),Ce("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(uo`${e.applied}`)]);import{pgTable as ni,text as Q,timestamp as ri,jsonb as Oe,uuid as lo,integer as co,real as si,index as qe,uniqueIndex as kn}from"drizzle-orm/pg-core";var Y=ni("context_snapshots",{id:lo("id").primaryKey().defaultRandom(),sessionId:lo("session_id").references(()=>u.id,{onDelete:"cascade"}),userId:lo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:co("sequence").notNull().default(0),provider:Q("provider").notNull(),model:Q("model").notNull(),systemPrompt:Q("system_prompt").notNull(),injectedInstructions:Oe("injected_instructions").notNull().default([]),messagesSummary:Oe("messages_summary").notNull(),tools:Oe("tools").notNull().default([]),systemHash:Q("system_hash").notNull(),requestHash:Q("request_hash").notNull().default(""),toolsHash:Q("tools_hash"),injectedHash:Q("injected_hash"),messagesDelta:Oe("messages_delta").default([]),messagesDeltaRef:Q("messages_delta_ref"),maxTokens:co("max_tokens"),temperature:si("temperature"),estimatedTokens:co("estimated_tokens"),capturedAt:ri("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Oe("metadata").default({})},e=>[qe("idx_context_snapshots_session").on(e.sessionId),qe("idx_context_snapshots_user").on(e.userId),qe("idx_context_snapshots_hash").on(e.systemHash),qe("idx_context_snapshots_request_hash").on(e.requestHash),kn("idx_snapshots_session_request").on(e.sessionId,e.requestHash),kn("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),qe("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as ii,text as En,timestamp as ai,jsonb as di,integer as ui,index as li}from"drizzle-orm/pg-core";var bn=ii("content_blobs",{hash:En("hash").primaryKey(),contentType:En("content_type").notNull(),content:di("content").notNull(),sizeBytes:ui("size_bytes").notNull().default(0),createdAt:ai("created_at",{withTimezone:!0}).defaultNow()},e=>[li("idx_content_blobs_type").on(e.contentType)]);import{pgTable as ci,text as It,timestamp as Me,jsonb as yt,uuid as mo,index as Tt,integer as Sn}from"drizzle-orm/pg-core";var ye=ci("eval_jobs",{id:mo("id").primaryKey().defaultRandom(),userId:mo("user_id").notNull(),evalTargetId:mo("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:It("status").notNull().default("pending"),config:yt("config").notNull().default({}),progress:yt("progress").notNull().default({}),result:yt("result"),error:It("error"),attempts:Sn("attempts").notNull().default(0),taskKind:It("task_kind"),payload:yt("payload"),claimedBy:It("claimed_by"),claimedAt:Me("claimed_at",{withTimezone:!0}),leaseExpiresAt:Me("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Sn("lease_recoveries").notNull().default(0),createdAt:Me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Me("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Me("completed_at",{withTimezone:!0})},e=>[Tt("idx_eval_jobs_user").on(e.userId),Tt("idx_eval_jobs_target").on(e.evalTargetId),Tt("idx_eval_jobs_status").on(e.status),Tt("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as mi,text as He,timestamp as Le,jsonb as Pn,uuid as Kn,integer as Cn,index as On}from"drizzle-orm/pg-core";var qn=mi("agent_jobs",{id:Kn("id").primaryKey().defaultRandom(),userId:Kn("user_id").notNull(),taskKind:He("task_kind").notNull(),status:He("status").notNull().default("pending"),payload:Pn("payload").notNull(),dedupeKey:He("dedupe_key"),result:Pn("result"),error:He("error"),attempts:Cn("attempts").notNull().default(0),claimedBy:He("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Cn("lease_recoveries").notNull().default(0),createdAt:Le("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Le("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Le("completed_at",{withTimezone:!0})},e=>[On("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),On("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as _i,text as Ue,timestamp as Be,jsonb as wt,uuid as _o,index as At,integer as Mn}from"drizzle-orm/pg-core";var Hn=_i("insights_jobs",{id:_o("id").primaryKey().defaultRandom(),userId:_o("user_id").notNull(),status:Ue("status").notNull().default("pending"),projectPath:Ue("project_path"),projectId:_o("project_id").references(()=>r.id,{onDelete:"set null"}),config:wt("config").notNull().default({}),progress:wt("progress").notNull().default({}),result:wt("result"),error:Ue("error"),attempts:Mn("attempts").notNull().default(0),taskKind:Ue("task_kind"),payload:wt("payload"),claimedBy:Ue("claimed_by"),claimedAt:Be("claimed_at",{withTimezone:!0}),leaseExpiresAt:Be("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Mn("lease_recoveries").notNull().default(0),createdAt:Be("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Be("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Be("completed_at",{withTimezone:!0})},e=>[At("idx_insights_jobs_user").on(e.userId),At("idx_insights_jobs_status").on(e.status),At("idx_insights_jobs_pending").on(e.userId,e.status),At("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as pi,text as po,timestamp as Dt,uuid as Ln,index as fi,uniqueIndex as xi}from"drizzle-orm/pg-core";var Te=pi("api_keys",{id:Ln("id").primaryKey().defaultRandom(),userId:Ln("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:po("name").notNull(),keyHash:po("key_hash").notNull(),keyPrefix:po("key_prefix").notNull(),lastUsedAt:Dt("last_used_at",{withTimezone:!0}),expiresAt:Dt("expires_at",{withTimezone:!0}),revokedAt:Dt("revoked_at",{withTimezone:!0}),createdAt:Dt("created_at",{withTimezone:!0}).defaultNow()},e=>[fi("idx_api_keys_user").on(e.userId),xi("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Ni,text as fo,timestamp as Un,uuid as gi,index as hi}from"drizzle-orm/pg-core";var Bn=Ni("extension_auth_codes",{code:fo("code").primaryKey(),userId:gi("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:fo("editor"),email:fo("email"),expiresAt:Un("expires_at",{withTimezone:!0}).notNull(),createdAt:Un("created_at",{withTimezone:!0}).defaultNow()},e=>[hi("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as vi,text as Ii,timestamp as Vn,jsonb as yi,uuid as xo,index as Gn}from"drizzle-orm/pg-core";var we=vi("eval_conversations",{id:xo("id").primaryKey().defaultRandom(),evalTargetId:xo("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:xo("user_id").notNull(),messages:yi("messages").notNull().default([]),status:Ii("status").notNull().default("active"),createdAt:Vn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Vn("updated_at",{withTimezone:!0}).defaultNow()},e=>[Gn("idx_eval_conversations_target").on(e.evalTargetId),Gn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as Ti,text as q,timestamp as Fn,jsonb as wi,uuid as No}from"drizzle-orm/pg-core";var Jn=Ti("skill_submissions",{id:No("id").primaryKey().defaultRandom(),skillId:q("skill_id").notNull(),name:q("name").notNull(),description:q("description").notNull(),category:q("category").notNull(),tools:q("tools").array().notNull(),tags:q("tags").array().default([]),content:q("content").notNull(),status:q("status").notNull().default("pending"),submittedBy:No("submitted_by").notNull(),reviewedBy:No("reviewed_by"),reviewNote:q("review_note"),metadata:wi("metadata"),createdAt:Fn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Fn("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ai,text as Ve,timestamp as Qn,jsonb as Di,uuid as ji,uniqueIndex as zi,index as Yn}from"drizzle-orm/pg-core";var $n=Ai("harness_releases",{id:ji("id").primaryKey().defaultRandom(),harness:Ve("harness").notNull(),version:Ve("version").notNull(),publishedAt:Qn("published_at",{withTimezone:!0}).notNull(),title:Ve("title"),body:Ve("body"),categories:Di("categories").default({}),url:Ve("url"),createdAt:Qn("created_at",{withTimezone:!0}).defaultNow()},e=>[zi("idx_harness_releases_unique").on(e.harness,e.version),Yn("idx_harness_releases_harness").on(e.harness),Yn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as Ri,text as Ae,timestamp as Wn,jsonb as ki,uuid as Xn,index as Zn,uniqueIndex as Ei}from"drizzle-orm/pg-core";var go=Ri("notifications",{id:Xn("id").primaryKey().defaultRandom(),userId:Xn("user_id").notNull(),type:Ae("type").notNull(),title:Ae("title").notNull(),body:Ae("body"),url:Ae("url"),sourceTable:Ae("source_table"),sourceId:Ae("source_id"),metadata:ki("metadata").notNull().default({}),readAt:Wn("read_at",{withTimezone:!0}),createdAt:Wn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Zn("idx_notifications_user_created").on(e.userId,e.createdAt),Zn("idx_notifications_user_unread").on(e.userId),Ei("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as bi,text as Ge,timestamp as Fe,jsonb as ho,uuid as vo,index as jt,integer as er}from"drizzle-orm/pg-core";var De=bi("launch_jobs",{id:vo("id").primaryKey().defaultRandom(),userId:vo("user_id").notNull(),tool:Ge("tool").notNull(),status:Ge("status").notNull().default("pending"),config:ho("config").notNull().default({}),result:ho("result"),error:Ge("error"),attempts:er("attempts").notNull().default(0),taskKind:Ge("task_kind"),payload:ho("payload"),claimedBy:Ge("claimed_by"),claimedAt:Fe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Fe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:er("lease_recoveries").notNull().default(0),createdAt:Fe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Fe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Fe("completed_at",{withTimezone:!0}),runId:vo("run_id").references(()=>g.id,{onDelete:"set null"})},e=>[jt("idx_launch_jobs_user").on(e.userId),jt("idx_launch_jobs_status").on(e.status),jt("idx_launch_jobs_pending").on(e.userId,e.status),jt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as tr,uuid as M,text as $,real as Si,timestamp as Je,boolean as Pi,uniqueIndex as Ki,index as Qe}from"drizzle-orm/pg-core";var or=["add","remove","trim"],Io=tr("instruction_suggestions",{id:M("id").primaryKey().defaultRandom(),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:M("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:$("project_path").notNull(),projectId:M("project_id").references(()=>r.id,{onDelete:"set null"}),score:Si("score").notNull(),reason:$("reason").notNull(),kind:$("kind").$type().notNull().default("add"),generatedAt:Je("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Pi("is_stale").notNull().default(!1),dismissedAt:Je("dismissed_at",{withTimezone:!0}),acceptedAt:Je("accepted_at",{withTimezone:!0}),declinedAt:Je("declined_at",{withTimezone:!0}),declinedReason:$("declined_reason"),promotedToInstructionId:M("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Ki("idx_instruction_suggestions_user_project_instruction_kind").on(e.userId,e.projectPath,e.instructionId,e.kind),Qe("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Qe("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Qe("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),nr=tr("instruction_suggestion_events",{id:M("id").primaryKey().defaultRandom(),suggestionId:M("suggestion_id").notNull().references(()=>Io.id,{onDelete:"cascade"}),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:$("event_type").notNull(),tool:$("tool"),sessionId:M("session_id"),projectPath:$("project_path").notNull(),actor:$("actor"),createdAt:Je("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Qe("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Qe("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Ci,text as yo,integer as Oi,numeric as Ye,timestamp as To,index as qi,primaryKey as Mi}from"drizzle-orm/pg-core";var rr=Ci("model_pricing",{provider:yo("provider").notNull(),modelId:yo("model_id").notNull(),inputPerM:Ye("input_per_m").notNull(),outputPerM:Ye("output_per_m").notNull(),cacheReadPerM:Ye("cache_read_per_m").notNull(),cacheWrite5mPerM:Ye("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:Ye("cache_write_1h_per_m").notNull(),contextWindow:Oi("context_window"),effectiveFrom:To("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:To("effective_until",{withTimezone:!0}),source:yo("source").notNull(),verifiedAt:To("verified_at",{withTimezone:!0})},e=>[Mi({columns:[e.provider,e.modelId,e.effectiveFrom]}),qi("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Hi,text as ie,numeric as sr,timestamp as ir,uuid as ar,jsonb as Li,index as dr}from"drizzle-orm/pg-core";var ur=Hi("limit_observations",{id:ar("id").primaryKey().defaultRandom(),observedAt:ir("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:ie("provider").notNull(),plan:ie("plan").notNull(),limitType:ie("limit_type").notNull(),value:sr("value").notNull(),unit:ie("unit").notNull(),comparator:ie("comparator").notNull().default("="),resetsAt:ir("resets_at",{withTimezone:!0}),sourceType:ie("source_type").notNull(),sourceUrl:ie("source_url"),sourceEvidence:Li("source_evidence"),confidence:sr("confidence").notNull(),userId:ar("user_id")},e=>[dr("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),dr("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Ui,text as zt,timestamp as Bi,uuid as Vi,jsonb as Gi,boolean as Fi,uniqueIndex as Ji}from"drizzle-orm/pg-core";var lr=Ui("provider_docs_snapshots",{id:Vi("id").primaryKey().defaultRandom(),fetchedAt:Bi("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:zt("provider").notNull(),docUrl:zt("doc_url").notNull(),contentHash:zt("content_hash").notNull(),content:zt("content").notNull(),parseSuccess:Fi("parse_success").notNull(),parseErrors:Gi("parse_errors")},e=>[Ji("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Qi,text as Rt,numeric as cr,timestamp as mr,uuid as Yi,primaryKey as $i,index as Wi}from"drizzle-orm/pg-core";var _r=Qi("plan_limits_active",{provider:Rt("provider").notNull(),plan:Rt("plan").notNull(),limitType:Rt("limit_type").notNull(),value:cr("value").notNull(),unit:Rt("unit").notNull(),effectiveFrom:mr("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:mr("effective_until",{withTimezone:!0}),confidence:cr("confidence").notNull(),sourceObservationIds:Yi("source_observation_ids").array().notNull()},e=>[$i({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Wi("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as Xi,text as wo,timestamp as Zi,uuid as pr,jsonb as ea,index as ta}from"drizzle-orm/pg-core";var fr=Xi("alert_dispatches",{id:pr("id").primaryKey().defaultRandom(),userId:pr("user_id").notNull(),alertKey:wo("alert_key").notNull(),severity:wo("severity").notNull(),lastDispatchedAt:Zi("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:ea("last_state").notNull(),channel:wo("channel").notNull()},e=>[ta("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{pgTable as oa,text as Ao,timestamp as xr,uuid as Do,integer as na,index as ra,unique as sa}from"drizzle-orm/pg-core";var Nr=oa("scaffolding_fingerprints",{id:Do("id").primaryKey().defaultRandom(),userId:Do("user_id").notNull(),harness:Ao("harness").notNull(),model:Ao("model").notNull(),toolsHash:Ao("tools_hash").notNull(),firstSeenAt:xr("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:xr("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:na("snapshot_count").notNull().default(1),firstSessionId:Do("first_session_id")},e=>[sa("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),ra("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as ia,text as jo,timestamp as aa,jsonb as da,uuid as gr,integer as ua,unique as la}from"drizzle-orm/pg-core";var hr=ia("scaffolding_segments",{id:gr("id").primaryKey().defaultRandom(),userId:gr("user_id").notNull(),harness:jo("harness").notNull(),model:jo("model").notNull(),coreNames:da("core_names").notNull(),coreHash:jo("core_hash").notNull(),activeFingerprints:ua("active_fingerprints").notNull(),computedAt:aa("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[la("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{drizzle as wr}from"drizzle-orm/postgres-js";import Ar from"postgres";var kt={};Vr(kt,{SUGGESTION_KINDS:()=>or,agentJobs:()=>qn,agentRuns:()=>g,agentRunsRelations:()=>Aa,alertDispatches:()=>fr,announcementDeliveries:()=>Co,announcements:()=>Ko,apiKeys:()=>Te,apiKeysRelations:()=>ma,benchmarks:()=>Ie,benchmarksRelations:()=>Oa,cliErrorEvents:()=>wn,cliSetupEvents:()=>yn,contentBlobs:()=>bn,contextSnapshots:()=>Y,contextSnapshotsRelations:()=>Ha,evalComparisons:()=>Dn,evalConversations:()=>we,evalConversationsRelations:()=>Ma,evalGradeAnnotations:()=>jn,evalJobs:()=>ye,evalJobsRelations:()=>qa,evalRuns:()=>k,evalRunsRelations:()=>Ca,evalTargets:()=>s,evalTargetsRelations:()=>Pa,evals:()=>C,evalsRelations:()=>Ka,extensionAuthCodes:()=>Bn,harnessReleases:()=>$n,insightRecommendationLog:()=>rn,insightsJobs:()=>Hn,instructionEvents:()=>me,instructionEventsRelations:()=>ha,instructionExperimentArms:()=>tn,instructionExperiments:()=>Ee,instructionPromotions:()=>Rn,instructionSuggestionEvents:()=>nr,instructionSuggestions:()=>Io,instructionUsageEvents:()=>ve,instructionUsageEventsRelations:()=>Sa,instructionVerdicts:()=>nn,instructionVersionIdentities:()=>Uo,instructionVersions:()=>ce,instructionVersionsRelations:()=>Ia,instructions:()=>n,instructionsRelations:()=>ga,judgeReviewerVerdicts:()=>zn,launchJobs:()=>De,launchJobsRelations:()=>Da,limitObservations:()=>ur,memories:()=>y,memoriesRelations:()=>va,memoryExperiments:()=>un,modelPricing:()=>rr,notificationPreferences:()=>Oo,notifications:()=>go,orgInvitations:()=>E,orgInvitationsRelations:()=>fa,organizations:()=>l,organizationsRelations:()=>_a,packInstructions:()=>J,packInstructionsRelations:()=>ba,packs:()=>D,packsRelations:()=>Ea,pendingTreatmentExposures:()=>Xo,planLimitsActive:()=>_r,profiles:()=>o,profilesRelations:()=>ca,projectCheckouts:()=>Go,projectInstructions:()=>B,projectInstructionsRelations:()=>Ta,projects:()=>r,projectsRelations:()=>ya,providerDocsSnapshots:()=>lr,scaffoldingFingerprints:()=>Nr,scaffoldingSegments:()=>hr,sessionEvents:()=>pe,sessionEventsRelations:()=>ja,sessionInstructions:()=>V,sessionInstructionsRelations:()=>za,sessionSendJobs:()=>_n,sessionTerminalTargets:()=>_t,sessions:()=>u,sessionsRelations:()=>wa,skillSubmissions:()=>Jn,teams:()=>v,teamsRelations:()=>pa,treatmentAssignments:()=>S,treatmentAssignmentsRelations:()=>Ra,treatmentExposures:()=>P,treatmentExposuresRelations:()=>ka,userOrganizations:()=>ue,userOrganizationsRelations:()=>xa,userTeams:()=>le,userTeamsRelations:()=>Na,workerConnections:()=>hn});import{relations as i}from"drizzle-orm";var ca=i(o,({many:e})=>({sessions:e(u),contextSnapshots:e(Y),apiKeys:e(Te)})),ma=i(Te,({one:e})=>({profile:e(o,{fields:[Te.userId],references:[o.id]})})),_a=i(l,({many:e})=>({teams:e(v),userOrganizations:e(ue),projects:e(r),invitations:e(E)})),pa=i(v,({one:e,many:t})=>({organization:e(l,{fields:[v.orgId],references:[l.id]}),userTeams:t(le),invitations:t(E)})),fa=i(E,({one:e})=>({organization:e(l,{fields:[E.orgId],references:[l.id]}),team:e(v,{fields:[E.teamId],references:[v.id]}),inviter:e(o,{fields:[E.invitedBy],references:[o.id]})})),xa=i(ue,({one:e})=>({organization:e(l,{fields:[ue.orgId],references:[l.id]})})),Na=i(le,({one:e})=>({team:e(v,{fields:[le.teamId],references:[v.id]})})),ga=i(n,({one:e,many:t})=>({versions:t(ce),projectInstructions:t(B),events:t(me),usageEvents:t(ve),sessionInstructions:t(V),packInstructions:t(J),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),ha=i(me,({one:e})=>({instruction:e(n,{fields:[me.instructionId],references:[n.id]})})),va=i(y,({one:e,many:t})=>({project:e(r,{fields:[y.projectId],references:[r.id]}),parent:e(y,{fields:[y.parentId],references:[y.id]}),versions:t(y)})),Ia=i(ce,({one:e})=>({instruction:e(n,{fields:[ce.instructionId],references:[n.id]})})),ya=i(r,({one:e,many:t})=>({organization:e(l,{fields:[r.orgId],references:[l.id]}),projectInstructions:t(B),sessions:t(u)})),Ta=i(B,({one:e})=>({project:e(r,{fields:[B.projectId],references:[r.id]}),instruction:e(n,{fields:[B.instructionId],references:[n.id]})})),wa=i(u,({one:e,many:t})=>({profile:e(o,{fields:[u.userId],references:[o.id]}),project:e(r,{fields:[u.projectId],references:[r.id]}),run:e(g,{fields:[u.runId],references:[g.id]}),events:t(pe),sessionInstructions:t(V),treatmentExposures:t(P),contextSnapshots:t(Y)})),Aa=i(g,({one:e,many:t})=>({profile:e(o,{fields:[g.userId],references:[o.id]}),organization:e(l,{fields:[g.orgId],references:[l.id]}),project:e(r,{fields:[g.projectId],references:[r.id]}),sessions:t(u),launchJobs:t(De)})),Da=i(De,({one:e})=>({run:e(g,{fields:[De.runId],references:[g.id]})})),ja=i(pe,({one:e})=>({session:e(u,{fields:[pe.sessionId],references:[u.id]})})),za=i(V,({one:e})=>({session:e(u,{fields:[V.sessionId],references:[u.id]}),instruction:e(n,{fields:[V.instructionId],references:[n.id]})})),Ra=i(S,({one:e,many:t})=>({owner:e(o,{fields:[S.userId],references:[o.id]}),project:e(r,{fields:[S.projectId],references:[r.id]}),exposures:t(P)})),ka=i(P,({one:e})=>({session:e(u,{fields:[P.sessionId],references:[u.id]}),owner:e(o,{fields:[P.userId],references:[o.id]}),assignment:e(S,{fields:[P.assignmentId],references:[S.id]})})),Ea=i(D,({one:e,many:t})=>({packInstructions:t(J),forkedFrom:e(D,{fields:[D.forkedFromId],references:[D.id]})})),ba=i(J,({one:e})=>({pack:e(D,{fields:[J.packId],references:[D.id]}),instruction:e(n,{fields:[J.instructionId],references:[n.id]})})),Sa=i(ve,({one:e})=>({instruction:e(n,{fields:[ve.instructionId],references:[n.id]})})),Pa=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(C),evalRuns:t(k),benchmarks:t(Ie),evalJobs:t(ye),evalConversations:t(we)})),Ka=i(C,({one:e,many:t})=>({evalTarget:e(s,{fields:[C.evalTargetId],references:[s.id]}),runs:t(k)})),Ca=i(k,({one:e})=>({eval:e(C,{fields:[k.evalId],references:[C.id]}),evalTarget:e(s,{fields:[k.evalTargetId],references:[s.id]})})),Oa=i(Ie,({one:e})=>({evalTarget:e(s,{fields:[Ie.evalTargetId],references:[s.id]})})),qa=i(ye,({one:e})=>({evalTarget:e(s,{fields:[ye.evalTargetId],references:[s.id]})})),Ma=i(we,({one:e})=>({evalTarget:e(s,{fields:[we.evalTargetId],references:[s.id]})})),Ha=i(Y,({one:e})=>({session:e(u,{fields:[Y.sessionId],references:[u.id]}),profile:e(o,{fields:[Y.userId],references:[o.id]})}));var $e=0,vr=0,We=0,Ir=0;var La=0;function zo(){$e++,$e>vr&&(vr=$e)}p(zo,"trackDbOpStart");function Ro(){$e>0&&$e--}p(Ro,"trackDbOpEnd");function ko(){We++,We>Ir&&(Ir=We)}p(ko,"trackHeavyDbOpStart");function Eo(){We>0&&We--}p(Eo,"trackHeavyDbOpEnd");function yr(){La++}p(yr,"recordQueryDeadline");var bt,Pt,bo=!1,Et;var Tr,Kt,St;function Dr(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}p(Dr,"getEnv");function jr(){if(bo)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!bt){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,a=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,d=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,_=Number(process.env.PG_IDLE_TIMEOUT)||5,N=Number(process.env.PG_KEEP_ALIVE_S)||60;Pt=Ar(Dr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:_,keep_alive:N,max_lifetime:300,connection:{application_name:e,...d>0?{statement_timeout:d}:{}}}),bt=wr(Pt,{schema:kt})}return bt}p(jr,"getDb");function zr(){if(bo)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!St){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Kt=Ar(Dr("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}}),St=wr(Kt,{schema:kt})}return St}p(zr,"getHeavyDb");async function Ua(){if(Et)return Et;bo=!0;let e=Pt,t=Tr,a=Kt;return Pt=void 0,bt=void 0,Tr=void 0,Kt=void 0,St=void 0,Et=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),Et}p(Ua,"closeDb");var Ba=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function Rr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Ba.has(a)}p(Rr,"isRetryableConnectError");var Va=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function kr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Va.has(a)}p(kr,"isRetryableResetError");async function Er(e,t={}){let a=t.attempts??3,d=t.baseMs??100,_;for(let N=0;N<a;N++)try{return await e()}catch(w){_=w;let H=Rr(w)||t.retryResets===!0&&kr(w);if(N===a-1||!H)throw w;await new Promise(W=>setTimeout(W,d*2**N))}throw _}p(Er,"withDbRetry");var Ct=class extends Error{static{p(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function br(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}p(br,"queryDeadlineMs");function Sr(){let e=Number(process.env.PG_HEAVY_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:6e4}p(Sr,"heavyQueryDeadlineMs");function Ga(e,t,a=!0){let d,_=new Promise((N,w)=>{d=setTimeout(()=>{a&&yr(),w(new Ct(t))},t);let H=d;typeof H.unref=="function"&&H.unref()});return Promise.race([e,_]).finally(()=>clearTimeout(d))}p(Ga,"raceWithDeadline");var Pr=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Kr=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function So(e,t=!1,a=0,d=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(_,N,w){if(N==="then"){let W=Reflect.get(_,N,w);return typeof W!="function"?W:(qr,Mr)=>{let Hr=d?ko:zo,Lr=d?Eo:Ro;Hr();let Po=Er(()=>new Promise((Ur,Br)=>W.call(_,Ur,Br)),{retryResets:t});return(a>0?Ga(Po,a,!d):Po).finally(Lr).then(qr,Mr)}}let H=Reflect.get(_,N,w);return typeof H=="function"?(...W)=>So(H.apply(_,W),t,a,d):H}})}p(So,"wrapBuilder");function Cr(e,t=!1){let a=t?ko:zo,d=t?Eo:Ro;a();try{return Promise.resolve(e()).finally(d)}catch(_){throw d(),_}}p(Cr,"gaugeTransaction");var Or=new Proxy({},{get(e,t){let a=jr(),d=a[t];if(typeof t=="string"&&Pr.has(t)&&typeof d=="function"){let _=Kr.has(t),N=br();return(...w)=>So(d.apply(a,w),_,N)}return t==="transaction"&&typeof d=="function"?(..._)=>Cr(()=>d.apply(a,_)):d}}),Fa=new Proxy({},{get(e,t){let a=zr(),d=a[t];if(typeof t=="string"&&Pr.has(t)&&typeof d=="function"){let _=Kr.has(t);return(...N)=>So(d.apply(a,N),_,Sr(),!0)}return t==="transaction"&&typeof d=="function"?(..._)=>Cr(()=>d.apply(a,_),!0):d}});export{Ko as a,jr as b,Ua as c};
@@ -0,0 +1 @@
1
+ import{a as n}from"./chunk-ZLLER3HP.js";var c=25,d=54e5;function f(i){let{limits:a,now:t,requiredHeadroomPct:r=25,maxAgeMs:u=54e5}=i,e=a?.five_hour;if(!e||typeof e.used_percentage!="number")return{ok:!0};let s=Date.parse(e.observed_at);if(!Number.isFinite(s))return{ok:!0};if(t.getTime()-s>u)return{ok:!0};if(e.resets_at){let o=Date.parse(e.resets_at);if(Number.isFinite(o)&&o<=t.getTime())return{ok:!0}}if(100-e.used_percentage>=r)return{ok:!0};let _=e.resets_at?` \u2014 resets at ${new Date(e.resets_at).toISOString().slice(11,16)}Z`:"";return{ok:!1,reason:`five-hour window ${e.used_percentage}% used, below the ${r}% headroom a full cycle needs${_}`}}n(f,"assessQuotaHeadroom");export{c as a,d as b,f as c};
@@ -0,0 +1,11 @@
1
+ import{g as d}from"./chunk-MODFTCZY.js";import{a as s}from"./chunk-ZLLER3HP.js";var c="<<<FILE-CONTENT-BEGIN>>>",p="<<<FILE-CONTENT-END>>>",E="<RATIONALE>",T="</RATIONALE>",l="<PROPOSED_INSTRUCTION>",h="</PROPOSED_INSTRUCTION>",f=.5,m=3;function b(e){let t=e.immutableSections.length>0?e.immutableSections.map(n=>` - ${n}`).join(`
2
+ `):" (none)",i=e.evidence.priorDecisions.length>0?["6. You have edited this file before. The attempts are listed below with"," how each was judged. Do not re-propose an edit that was MEASURED and"," rejected: it was replayed against this exact file and did not beat it,"," so measuring it again spends the same budget for the same answer. An"," attempt marked NOT MEASURED is different \u2014 the gate stopped it before"," it earned a verdict, so whether it would have helped is still unknown."]:[];return["You are improving an AI coding assistant instruction file so that it scores","better on a fixed set of evaluation cases.","",`The file is a ${e.targetType} named "${e.targetName}".`,"","RULES",`0. The current file is EXACTLY the text between ${c} and`,` ${p} in the data message. Headings after the closing`," sentinel (underperforming cases, notes, prior attempts) are evidence",' ABOUT the file \u2014 they are not in the file, and "removing" one of them'," is not an edit. Do not include the sentinels in your output.","1. Return the COMPLETE new file, not a diff, not a patch, not a summary,"," and not an excerpt. Everything you omit will be DELETED from the file.","2. Preserve everything you are not deliberately changing, byte for byte.","3. Make a focused edit. You are one step in a measured loop: a small change"," that can be attributed beats a rewrite that cannot.","4. Do not edit these sections or anything nested under them \u2014 an edit that"," touches them is refused downstream and the whole proposal is wasted:",t,"5. Do not add meta-commentary about the evaluation, the loop, or this"," prompt to the file. The file is read by other agents as instructions.",...i,"","OUTPUT FORMAT \u2014 exactly this, with no text before or after:",E,"One or two sentences: what you changed and which evidence motivated it.",T,l,"The complete new file content.",h].join(`
3
+ `)}s(b,"buildProposerSystemPrompt");var a=s(e=>`${e>=0?"+":"-"}${Math.abs(e*100).toFixed(1)}pp`,"signedPp");function O(e){let t=/^\d{4}-\d{2}-\d{2}/.exec(e.at??"")?.[0]??"undated",i;if(e.measured){let o=e.measured;i=`MEASURED against this exact file and ${e.decision==="promote"?"ACCEPTED":"REJECTED"}: ${a(o.delta)} (CI ${a(o.ciLower)} to ${a(o.ciUpper)}, ${o.nPairs} paired cases)`}else i=`NOT MEASURED \u2014 the gate refused it, so its merit is still unknown: ${e.refusals.length>0?e.refusals.join("; "):"no reason recorded"}`;let n=[`- ${t} \u2014 ${i}`];return e.decision==="promote"&&n.push(e.applied?" The file WAS rewritten by this decision.":" Dry run: the file was NOT rewritten, so this edit is still available."),e.touched.length>0&&n.push(` Sections touched: ${e.touched.join(", ")}`),e.rationale.trim()!==""&&n.push(` You said at the time: ${e.rationale.trim()}`),n.join(`
4
+ `)}s(O,"describePriorDecision");function N(e){let t=e.evidence,i=["## CURRENT FILE CONTENT","","The file is EXACTLY the text between the two sentinel lines below \u2014","nothing before the first sentinel or after the second is part of it.","Everything after the closing sentinel is evidence ABOUT the file.","",c,e.currentContent,p,""];if(t.weakest.length>0){i.push("## CASES WHERE THIS FILE CURRENTLY UNDERPERFORMS","");for(let n of t.weakest)i.push(`- ${n.name}: passes ${(n.withPassRate*100).toFixed(0)}% with the file vs ${(n.withoutPassRate*100).toFixed(0)}% without it`);i.push("")}return t.nonDiscriminating.length>0&&i.push("## CASES THAT CARRY NO SIGNAL EITHER WAY","","These score the same with and without the file. Changing the file to chase","them is unlikely to move anything.","",...t.nonDiscriminating.map(n=>`- ${n}`),""),t.priorDecisions.length>0&&i.push("## WHAT YOU ALREADY PROPOSED FOR THIS FILE, AND HOW IT WAS JUDGED","","Newest first. Every attempt listed here was made against the file above,","byte for byte. Attempts against a different version of the file are not","shown, because a verdict earned by different text says nothing about this","one.","",...t.priorDecisions.map(O),""),t.notes.length>0&&i.push("## NOTES","",...t.notes.map(n=>`- ${n}`),""),i.join(`
5
+ `)}s(N,"buildProposerData");function g(e,t,i){let n=e.lastIndexOf(i);if(n<0)return null;let o=e.lastIndexOf(t,n);return o<0?null:e.slice(o+t.length,n)}s(g,"between");function R(e){let t=e.split(`
6
+ `);for(;t.length>0&&t[0].trim()==="";)t.shift();for(;t.length>0&&t[t.length-1].trim()==="";)t.pop();if(t.length<2)return t.join(`
7
+ `);let i=t[0].trim(),n=t[t.length-1].trim(),o=/^(`{3,}|~{3,})[a-zA-Z0-9_-]*$/.test(i),r=/^(`{3,}|~{3,})$/.test(n);return o&&r?t.slice(1,-1).join(`
8
+ `):t.join(`
9
+ `)}s(R,"stripWrappingFence");function P(e,t){if(!e||e.trim()==="")return{ok:!1,reason:"proposer returned nothing"};let i=g(e,l,h);if(i==null)return{ok:!1,reason:`proposer reply had no ${l}\u2026${h} block`};let n=R(i).split(`
10
+ `).filter(w=>{let u=w.trim();return u!==c&&u!==p}).join(`
11
+ `).trim();if(n==="")return{ok:!1,reason:"proposed content was empty"};if(n===t.trim())return{ok:!1,reason:"proposal is identical to the current version"};let o=n.length/Math.max(1,t.trim().length);if(o<f)return{ok:!1,reason:`proposal retains only ${(o*100).toFixed(0)}% of the predecessor's length (floor ${(f*100).toFixed(0)}%) \u2014 treating it as a truncated or summarised reply rather than an edit`};if(o>m)return{ok:!1,reason:`proposal is ${o.toFixed(1)}x the predecessor's length (ceiling ${m}x) \u2014 treating it as runaway generation`};let r=(g(e,E,T)??"").trim();return{ok:!0,proposal:{candidateContent:n,rationale:r===""?"(proposer supplied no rationale)":r}}}s(P,"parseProposalResponse");async function y(e,t=16e3){let i=await d(b(e),N(e),t);return i==null?{ok:!1,reason:"no LLM backend available, or the proposer call failed"}:P(i,e.currentContent)}s(y,"proposeInstructionEdit");export{c as a,p as b,f as c,m as d,b as e,O as f,N as g,P as h,y as i};
@@ -0,0 +1 @@
1
+ import{i as Ce}from"./chunk-H6MN2AAF.js";import{c as $e}from"./chunk-G7V4ZZZ3.js";import{a as we,b as Pe,c as ye,d as ve,e as ee,f as ke}from"./chunk-NTJKAIHS.js";import{b as le,i as ce,j as ue,k as pe,l as de,m as ge,n as me}from"./chunk-BL4BN6RU.js";import{d as fe,e as he,g as be}from"./chunk-7LXG3DDL.js";import{d as oe,e as Z,f as se}from"./chunk-G5BXZT6F.js";import{e as P,f as K}from"./chunk-OFC7HIBX.js";import{a as u}from"./chunk-ZLLER3HP.js";import{createHash as Te}from"node:crypto";import{existsSync as Ae,readFileSync as Re,writeFileSync as Me}from"node:fs";var M=u(a=>Te("sha256").update(a).digest("hex"),"sha256"),xe=1.3,te=4,We=20;function Ne(a,o){if(!a.configured||o<=0)return te;let t=Math.ceil(a.minPairs*xe/o);return Math.min(We,Math.max(te,t))}u(Ne,"passCapFor");function Le(a,o=10,t=te){if(a<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let l=Math.ceil(o*xe),e=Math.min(t,Math.ceil(l/a)),r=e*a;return r<o?{passes:e,expectedPairs:r,feasible:!1,reason:`${a} live case(s) x ${t} passes = ${a*t} pairs at best, below the ${o} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:e,expectedPairs:r,feasible:!0}}u(Le,"planPasses");var Fe=60,je=u(a=>typeof a=="object"&&a!==null&&typeof a.withScore=="number"&&typeof a.withoutScore=="number","isPair");function Ue(a,o,t){let l=[...a].sort((e,r)=>Date.parse(r.createdAt)-Date.parse(e.createdAt));for(let e of l){if(e.applied)continue;let r=e.gates?.accumulation;if(!r||typeof r!="object"||r.priorContentHash!==o||r.targetPairs!==t||typeof r.candidateContentHash!="string"||!Array.isArray(r.pairs))continue;let i=r.pairs.filter(je);if(i.length===r.pairs.length&&!(i.length>=t))return{promotionId:e.id,candidateContentHash:r.candidateContentHash,pairs:i,runs:typeof r.runs=="number"?r.runs:1}}return null}u(Ue,"findOpenAccumulation");var qe=5,Ee=u(a=>Array.isArray(a)?a.filter(o=>typeof o=="string"):[],"stringList"),F=u(a=>typeof a=="number"&&Number.isFinite(a)?a:null,"finite");function Ge(a,o,t=qe){let l=[...a].filter(i=>i.fromContentHash===o).sort((i,m)=>Date.parse(m.createdAt)-Date.parse(i.createdAt)),e=[],r=new Set;for(let i of l){let m=i.toContentHash??i.id;if(r.has(m))continue;r.add(m);let y=i.verdict??null,S=F(y?.delta),I=F(y?.ci?.lower),C=F(y?.ci?.upper),j=F(y?.nWith),p=y?.sufficient===!0&&S!=null&&I!=null&&C!=null&&j!=null?{delta:S,ciLower:I,ciUpper:C,nPairs:j}:null;if(e.push({decision:typeof i.decision=="string"?i.decision:"unknown",applied:i.applied===!0,at:typeof i.createdAt=="string"?i.createdAt:"",rationale:typeof i.proposalRationale=="string"?i.proposalRationale:"",touched:Ee(i.touchedSections),refusals:Ee(i.refusals),measured:p}),e.length>=t)break}return e}u(Ge,"summarisePriorDecisions");function Be(a,o){let t=o.accumulate??(a.autoEvolveAccumulate===!0||a.autoEvolveAccumulate==="true"),l=o.accumulateTargetPairs??a.autoEvolveAccumulateTarget,e=typeof l=="string"?Number.parseInt(l,10):l,r=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Fe;return{enabled:t,targetPairs:r}}u(Be,"readAccumulateConfig");function Xe(a){let o=a.accumulateEnabled&&a.pairCount<a.targetPairs;return{apply:a.consented&&!o,peeking:o}}u(Xe,"resolveApply");async function rt(a,o){let t=u(n=>o?.logger?.info?.(n)??console.log(n),"log"),{evalTargetId:l}=a,e=`[cron_instruction_evolution] ${l}`,r=await P(`/api/eval-targets/${l}`),i=r.metadata??{},m=null,y=!1;if(r.name.startsWith("/")&&Ae(r.name))try{if(m=Re(r.name,"utf8"),m!==r.content){let n=await K(`/api/eval-targets/${l}/sync-content`,{content:m});y=n.synced,t(`${e}: target content drifted from disk by ${Math.abs(m.length-r.content.length)} chars \u2014 synced to disk truth (v${n.version}). Prior verdicts against the old text dissolve via content-hash keying.`),r={...r,content:m,version:n.version}}}catch(n){t(`${e}: disk sync failed (${n instanceof Error?n.message:String(n)}) \u2014 measuring the stored snapshot`)}let S=!1;try{S=(await P("/api/settings/evolution-account")).paused}catch(n){t(`${e}: could not read the account switch (${n instanceof Error?n.message:String(n)}) \u2014 pausing to be safe`),S=!0}if(S)return t(`${e}: PAUSED for the whole account (profiles.evolution_paused) \u2014 no model budget spent.`),{skipped:"paused-account"};if(ue(i))return t(`${e}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let I=a.apply??(i.autoEvolveApply===!0||i.autoEvolveApply==="true"),C=ze(i);if(C==null){if(I)return t(`${e}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};t(`${e}: metadata.immutableSections unset \u2014 measure-only cycle proceeds with [] (nothing protected). Writing still requires setting it explicitly.`),C=[]}let p=(await P(`/api/eval-targets/${l}/evals`)).filter(n=>!n.retiredAt);if(p.length===0)return{skipped:"no-live-cases"};let W=ce(i);W.note&&t(`${e}: ${W.note}`);let v=Le(p.length,W.minPairs,Ne(W,p.length));if(!v.feasible)return t(`${e}: cannot reach a sufficient verdict \u2014 ${v.reason}`),{skipped:"cannot-reach-min-n",reason:v.reason};let De=pe({liveCases:p.length,passes:v.passes});t(`${e}: budget for this run \u2014 ${me(De)}`);let U=await P(`/api/eval-targets/${l}/judge-calibration`);if(!U.powerCheck.adequate){let n=(U.powerCheck.reasons??[]).join("; ");return t(`${e}: not adequately powered, skipping before spending budget \u2014 ${n}`),{skipped:"not-adequate",reason:n}}let ne=se,Ie=Date.now()-ne*24*60*60*1e3,q=await P(`/api/eval-targets/${l}/promotions?limit=200`),re=q.promotions.filter(n=>n.applied&&Date.parse(n.createdAt)>=Ie).length;if(re>=Z)return t(`${e}: change budget looks exhausted (${re}/${Z} applied in ${ne}d), skipping before spending budget`),{skipped:"budget-exhausted"};try{let n=await P("/api/usage/current-limits"),c=$e({limits:n,now:new Date});if(!c.ok)return t(`${e}: deferring before spending budget \u2014 ${c.reason}`),{skipped:"quota-exhausted",reason:c.reason}}catch(n){t(`${e}: quota unknown (${n instanceof Error?n.message:String(n)}) \u2014 proceeding`)}let N=oe();if(!N.green)return t(`${e}: A/A canary is RED \u2014 halting. ${N.failures.join(" | ")}`),{skipped:"canary-red",reason:N.failures.join(" | ")};let G=r.content,x=M(G),d=Be(i,a),k=d.enabled?Ue(q.promotions,x,d.targetPairs):null,f,L,w=[],H=0,B=le,h=k?null:Pe(i,x);if(h){f=h.content,L="",B=0;try{w=await ve({evalTargetId:l,candidateContentHash:h.hash})}catch(n){return t(`${e}: could not rebuild banked pairs (${n instanceof Error?n.message:String(n)})`),{skipped:"resume-read-failed",reason:h.hash}}t(`${e}: resuming interrupted cycle \u2014 ${w.length}/${h.plannedPairs} pair(s) rebuilt from eval_runs, no proposal call spent`)}else if(k){let n=await P(`/api/promotions/${k.promotionId}`);if(M(n.toContent)!==k.candidateContentHash)return t(`${e}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:k.promotionId};f=n.toContent,L=n.proposalRationale??"",w=k.pairs,H=k.runs,B=0,t(`${e}: continuing accumulation ${k.promotionId} \u2014 ${w.length}/${d.targetPairs} pair(s) carried from ${H} prior run(s)`)}else{let n=U.caseDiscrimination?.cases??[],c=[];if(r.name.startsWith("/")){let s=r.name.slice(0,r.name.lastIndexOf("/"));try{let $=await P(`/api/insights/evidence?projectPath=${encodeURIComponent(s)}`);$.analyzedAt&&(c=[...$.friction.map(Y=>`Real-session friction (insights, ${$.analyzedAt.slice(0,10)}): ${Y}`),...$.whatWorks.map(Y=>`Working well in real sessions \u2014 do not break: ${Y}`)],c.length>0&&t(`${e}: proposer sees ${$.friction.length} friction + ${$.whatWorks.length} what-works item(s) from insights`))}catch($){t(`${e}: insights evidence unavailable (${$ instanceof Error?$.message:String($)}) \u2014 proposing without it`)}}let O=[];try{O=Ge(q.promotions,x)}catch(s){t(`${e}: could not summarise prior decisions (${s instanceof Error?s.message:String(s)}) \u2014 proposing without them`)}O.length>0&&t(`${e}: proposer sees ${O.length} prior decision(s) against this exact body (${O.map(s=>`${s.decision}${s.measured?"/measured":""}`).join(", ")})`);let T=await Ce({currentContent:r.content,targetType:r.type,targetName:r.name,immutableSections:C,evidence:{nonDiscriminating:n.filter(s=>!s.discriminating).map(s=>`${s.name??s.assertion??"unnamed"} \u2014 ${s.note}`),weakest:n.filter(s=>s.discriminating&&s.withPassRate<s.withoutPassRate).map(s=>({name:s.name??s.assertion??"unnamed",withPassRate:s.withPassRate,withoutPassRate:s.withoutPassRate})),priorDecisions:O,notes:c}});if(!T.ok)return t(`${e}: no usable proposal \u2014 ${T.reason}`),{skipped:"no-proposal",reason:T.reason};f=T.proposal.candidateContent,L=T.proposal.rationale}let D=h?ye({plannedPairs:h.plannedPairs||v.expectedPairs,carriedPairs:w.length,liveCases:p.length}):v.passes;t(`${e}: measuring ${p.length} case(s) x ${D} pass(es) = up to ${p.length*D} pairs, candidate vs prior version`+(h?` (resumed; ${w.length} pair(s) already banked)`:""));let A=[],X=[],He=Date.now(),ae=0,z=0;for(let n=1;n<=D;n++){let c=await be({cases:p,candidateContent:f,priorVersionContent:G,concurrency:a.concurrency??2,runNumber:n,opts:{targetId:l,targetVersion:r.version??1,iteration:1,timeout:a.timeout??24e4,model:a.model,graderModel:a.graderModel,skipGrading:!1,targetType:r.type,targetName:r.name,candidateContentHash:M(f)},onLog:t});if(A.push(...c.pairs),X.push(...c.results),ae+=c.completed,z+=c.failed,t(`${e}: pass ${n}/${D} \u2014 ${c.pairs.length} pair(s), running total ${A.length}`),c.abortedForQuota){t(`${e}: stopping after pass ${n}/${D} \u2014 ${c.abortedForQuota}. Remaining passes would spend against an exhausted account.`);break}}let R=[...w,...A],_=fe(X),Q=A.length>0,g=de({runs:X,plannedPairs:v.expectedPairs,usablePairs:A.length,verdictPairs:Q?R.length:A.length,proposalCalls:B,passes:D,liveCases:p.length,wallMs:Date.now()-He});if(t(`${e}: ${ae} completed, ${z} failed, ${A.length} usable pair(s) \u2014 spent ~${g.modelCalls} model calls (${g.proposalCalls} proposal + ${g.executorCalls} executor + >=${g.graderCalls} grader) in ${(g.wallMs/6e4).toFixed(1)} min`+(Q?`; the ${g.verdictPairs} pair(s) behind this verdict resolve +/-${ge(g.mde)} at 80% power`:"")),!Q)return{skipped:_.infrastructureFailed?"infrastructure-failure":"no-pairs",reason:_.infrastructureFailed?`${_.infrastructureFailed} run(s) never executed (${_.summary.describe()}) \u2014 the environment failed, not the target`:`${z} run(s) failed or were ungradeable`,cost:g};let V=he({pairs:R.length,minPairs:10,accounting:_});if(V.kind==="infrastructure-incomplete")return t(`${e}: not posting a verdict \u2014 ${V.reason}`),await ee({evalTargetId:l,meta:i,blob:ke({content:f,hash:M(f),priorHash:x,plannedPairs:h?.plannedPairs||v.expectedPairs,now:new Date}),log:t,tag:e}),{skipped:"infrastructure-incomplete",reason:V.reason,cost:g};d.enabled&&t(`${e}: accumulated ${R.length}/${d.targetPairs} pair(s) over ${H+1} run(s) on one candidate`);let ie=I,{apply:_e,peeking:Oe}=Xe({consented:ie,accumulateEnabled:d.enabled,pairCount:R.length,targetPairs:d.targetPairs});ie&&Oe&&t(`${e}: interim readout at ${R.length}/${d.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let b=await K(`/api/eval-targets/${l}/promotions`,{candidateContent:f,proposalSource:"llm",proposalRationale:L,pairs:R,canaryGreen:N.green,measuredAgainstContentHash:x,immutableSections:C,apply:_e,measurementCost:g,...d.enabled?{accumulation:{candidateContentHash:M(f),priorContentHash:x,targetPairs:d.targetPairs,carriedPairs:w.length,runs:H+1}}:{}});t(`${e}: ${b.decision}${b.applied?" (APPLIED)":""} \u2014 ${b.rationale}`+(b.refusals.length>0?` | refusals: ${b.refusals.join("; ")}`:"")),(h||i[we])&&await ee({evalTargetId:l,meta:i,blob:null,log:t,tag:e});let J=!1,E;if(b.applied&&r.name.startsWith("/"))try{Ae(r.name)?Re(r.name,"utf8")!==G?E="file changed since measurement started \u2014 refusing to clobber; next cycle re-syncs":(Me(r.name,f,"utf8"),J=!0):E="file no longer exists on disk",t(J?`${e}: measured improvement written to ${r.name} (undo: git checkout -- ${r.name})`:`${e}: NOT written to disk \u2014 ${E}`)}catch(n){E=n instanceof Error?n.message:String(n),t(`${e}: disk write-back failed \u2014 ${E}. The eval target is updated; the file is not.`)}return{decision:b.decision,applied:b.applied,nPairs:R.length,promotionId:b.id,cost:g,diskSynced:y,...b.applied?{fileWritten:J,...E?{fileWriteSkipped:E}:{}}:{},...d.enabled?{carriedPairs:w.length,accumulationRuns:H+1}:{}}}u(rt,"cronInstructionEvolution");function ze(a){let o=a.immutableSections;return o==null||!Array.isArray(o)?null:o.filter(t=>typeof t=="string")}u(ze,"readImmutableSections");export{xe as a,te as b,We as c,Ne as d,Le as e,Fe as f,Ue as g,qe as h,Ge as i,Be as j,Xe as k,rt as l,ze as m};
@@ -0,0 +1,2 @@
1
+ import{a as c}from"./chunk-ZLLER3HP.js";import{closeSync as m,existsSync as y,openSync as h,readSync as k,statSync as w}from"node:fs";import u from"node:path";var A=16e3,l=300,E=25,R=12;function a(e){let t=null;try{if(!y(e))return null;let n=w(e);if(!n.isFile())return null;let i=Math.min(n.size,A);if(i===0)return"";let o=Buffer.allocUnsafe(i);t=h(e,"r");let f=k(t,o,0,i,0);return o.subarray(0,f).toString("utf8")}catch{return null}finally{if(t!==null)try{m(t)}catch{}}}c(a,"readCapped");function S(e){for(let t of e.split(`
2
+ `)){let n=t.trim();if(n&&!n.startsWith("#")&&!n.startsWith("<")&&!n.startsWith("!")&&!n.startsWith("[!")&&!/^[-*=_]{3,}$/.test(n)&&!n.startsWith("```")&&!n.startsWith(">")&&!/^(\[[^\]]*\]\([^)]*\)\s*)+$/.test(n))return n.slice(0,l)}return null}c(S,"firstProseLine");function d(e){return!e||typeof e!="object"||Array.isArray(e)?[]:Object.keys(e)}c(d,"depNames");function D(e,t){let n=new Set,i=[];for(let o of[...e,...t])if(!n.has(o)&&(n.add(o),i.push(o),i.length>=E))break;return i}c(D,"rankDependencies");function M(e){let t=null,n=[],i=[],o=[],f=a(u.join(e,"package.json"));if(f)try{let s=JSON.parse(f);if(typeof s.description=="string"&&s.description.trim()&&(t=s.description.trim().slice(0,l)),Array.isArray(s.keywords))for(let r of s.keywords)typeof r=="string"&&r.trim()&&n.length<R&&n.push(r.trim());i=d(s.dependencies),o=d(s.devDependencies)}catch{}if(!t||i.length===0){let s=a(u.join(e,"pyproject.toml"));if(s){if(!t){let r=s.match(/^\s*description\s*=\s*["']([^"'\n]+)["']/m);r?.[1]&&(t=r[1].trim().slice(0,l))}if(i.length===0){let r=s.match(/dependencies\s*=\s*\[([^\]]*)\]/);if(r?.[1])for(let g of r[1].split(",")){let p=g.trim().replace(/^["']|["']$/g,"").split(/[<>=!~[\s]/)[0];p&&i.push(p)}}}}if(!t)for(let s of["README.md","readme.md","README.rst","README.txt"]){let r=a(u.join(e,s));if(r&&(t=S(r),t))break}return{description:t,topics:n,dependencies:D(i,o)}}c(M,"readProjectContext");export{S as a,D as b,M as c};
@@ -0,0 +1 @@
1
+ import{a as s}from"./chunk-ZLLER3HP.js";var c=[{kind:"usage_credits",test:/out of (?:usage )?credits|\/usage-credits|out of extra usage/i},{kind:"rate_limit",test:/rate[_ ]limit|\b429\b|exceed your account's rate limit/i},{kind:"timeout",test:/timed out after/i},{kind:"spawn",test:/failed to spawn/i}];function d(t){let i=t??"";for(let n of c)if(n.test.test(i))return{kind:n.kind,class:"infrastructure"};return{kind:"unknown",class:"infrastructure"}}s(d,"classifyEvalFailure");function f(t){let i={},n=0,u=0;for(let e of t)e.class==="infrastructure"?n+=1:u+=1,i[e.kind]=(i[e.kind]??0)+1;let o=null,l=0;for(let e of t){if(e.class!=="infrastructure")continue;let r=i[e.kind]??0;r>l&&(l=r,o=e.kind)}return{infrastructure:n,measurement:u,byKind:i,dominantKind:o,describe(){return Object.entries(i).sort((r,a)=>a[1]-r[1]).map(([r,a])=>`${a} ${r}`).join(", ")}}}s(f,"summarizeFailures");function m(t){return t==="rate_limit"||t==="usage_credits"}s(m,"isQuotaExhaustion");export{d as a,f as b,m as c};
@@ -1,4 +1,4 @@
1
- import{c as p}from"./chunk-HMMO27U4.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{d as p}from"./chunk-TZA4HAVF.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
 
@@ -1,2 +1,2 @@
1
- import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
1
+ import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-OFC7HIBX.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith("#"))continue;let o=e.indexOf("=");if(o<0)continue;let r=e.slice(0,o).trim(),i=e.slice(o+1).trim();process.env[r]||(process.env[r]=i)}return!!(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)}catch{return!1}}c(C,"loadEnvFile");T();async function I(s){let t={totalSessions:0,totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalCacheReadTokens:0,totalCacheWriteTokens:0,totalCostUSD:0,providers:{}},n=await m(s);t.providers={};for(let a of n)t.providers[a.provider]=(t.providers[a.provider]||0)+1;let e=new E,o=n.filter(a=>a.provider==="claude");for(let a of o)try{let h=p.readdirSync(a.path).filter(f=>f.endsWith(".jsonl"));t.totalSessions+=h.length;for(let f of h){let v=p.readFileSync(u.join(a.path,f),"utf-8"),R=e.parse(v);for(let l of R.events)l.tokenUsage&&(t.totalCalls++,t.totalInputTokens+=l.tokenUsage.input,t.totalOutputTokens+=l.tokenUsage.output,t.totalCacheReadTokens+=l.tokenUsage.cacheRead??0,t.totalCacheWriteTokens+=l.tokenUsage.cacheWrite??0)}}catch{}let r=15,i=75;return t.totalCostUSD=Math.round((t.totalInputTokens/1e6*r+t.totalOutputTokens/1e6*i+t.totalCacheReadTokens/1e6*(r*.1)+t.totalCacheWriteTokens/1e6*(r*1.25))*100)/100,t}c(I,"loadLocalStats");async function U(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY,e=process.env.RULEMETRIC_ACCESS_TOKEN,o=n??e;if(!o)return null;let r=new URLSearchParams;s&&r.set("projectPath",s);try{let i=await fetch(`${t}/api/insights/compute?${r}`,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(5e3)});return i.ok?await i.json():null}catch{return null}}c(U,"loadApiInsights");async function g(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)return null;let e=new URLSearchParams;s&&e.set("projectPath",s);try{let o=await fetch(`${t}/api/insights/linked-instructions?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(5e3)});return o.ok?await o.json():null}catch{return null}}c(g,"loadLinkedInstructions");export{I as a,U as b,g as c};