@rulemetric/cli 0.7.44 → 0.9.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 (211) hide show
  1. package/README.md +34 -0
  2. package/dist/base-command.js +1 -1
  3. package/dist/{chunk-4Q72B377.js → chunk-2B7Y6JNB.js} +1 -1
  4. package/dist/{chunk-Z2MZOQCD.js → chunk-3AZV7ZPJ.js} +1 -1
  5. package/dist/chunk-3DGL2ZY3.js +1 -0
  6. package/dist/chunk-3PUOJ6F2.js +45 -0
  7. package/dist/{chunk-QFVGUZDO.js → chunk-4PWGV2OW.js} +9 -8
  8. package/dist/{chunk-5ZACMVV3.js → chunk-5EDINFHF.js} +1 -1
  9. package/dist/{chunk-FAXV5AAG.js → chunk-6M74HH6Y.js} +1 -1
  10. package/dist/chunk-7FZB65VH.js +1 -0
  11. package/dist/{chunk-4VZLIGMS.js → chunk-AFYZYXQ3.js} +1 -1
  12. package/dist/{chunk-TU2AR6XO.js → chunk-B22HYCBV.js} +1 -1
  13. package/dist/{chunk-RJLAAKEN.js → chunk-BPP7AEFW.js} +1 -1
  14. package/dist/{chunk-MOAJLSYV.js → chunk-C2275MFP.js} +1 -1
  15. package/dist/{chunk-T4ZIK6RS.js → chunk-CBUTNIJA.js} +1 -1
  16. package/dist/{chunk-ULMEKK7C.js → chunk-CDDICCY2.js} +1 -1
  17. package/dist/chunk-DZ3FBQYD.js +17 -0
  18. package/dist/{chunk-5KD2N2MH.js → chunk-E2NVNLFD.js} +1 -1
  19. package/dist/{chunk-NIRD7ETU.js → chunk-EQHKCGSX.js} +1 -1
  20. package/dist/chunk-FP6QAPNK.js +1 -0
  21. package/dist/chunk-FWTYR36W.js +1 -0
  22. package/dist/chunk-G7V4ZZZ3.js +1 -0
  23. package/dist/chunk-GF76D2DU.js +1 -0
  24. package/dist/chunk-HOQPVOMF.js +2 -0
  25. package/dist/{chunk-ATA4J4ZG.js → chunk-HYDGERWD.js} +1 -1
  26. package/dist/chunk-IVDTORX5.js +1 -0
  27. package/dist/{chunk-4L2ZEIRE.js → chunk-JPUH3V67.js} +1 -1
  28. package/dist/chunk-K4B24SMJ.js +1 -0
  29. package/dist/chunk-KGURGIZ2.js +1 -0
  30. package/dist/{chunk-2DXBC2JQ.js → chunk-KHWG7ZG4.js} +1 -1
  31. package/dist/{chunk-KGQ5W54Y.js → chunk-KWNIKGAE.js} +1 -1
  32. package/dist/{chunk-H7VP4SDO.js → chunk-L54TWWBY.js} +1 -1
  33. package/dist/{chunk-5XUN743A.js → chunk-LLIHRQPH.js} +1 -1
  34. package/dist/chunk-MMPZIZYZ.js +10 -0
  35. package/dist/chunk-MO57LGGK.js +1 -0
  36. package/dist/{chunk-LLNQZ4SZ.js → chunk-PKLXZYBY.js} +1 -1
  37. package/dist/{chunk-5RUEROLC.js → chunk-PQN2GAG4.js} +1 -1
  38. package/dist/chunk-QAV4HW7D.js +1 -0
  39. package/dist/{chunk-YW3JQKGY.js → chunk-QTZPLAYC.js} +1 -1
  40. package/dist/chunk-QWPWY3SW.js +1 -0
  41. package/dist/chunk-R6JXE273.js +13 -0
  42. package/dist/chunk-RZTVYUX4.js +11 -0
  43. package/dist/{chunk-HXZM2UHO.js → chunk-S62MK372.js} +1 -1
  44. package/dist/{chunk-BLCMXTIK.js → chunk-SANYAPBK.js} +1 -1
  45. package/dist/{chunk-AI6FMGKM.js → chunk-SYTQDPPN.js} +1 -1
  46. package/dist/chunk-TZA4HAVF.js +1 -0
  47. package/dist/{chunk-6VKQT2J3.js → chunk-UUZB4IKU.js} +1 -1
  48. package/dist/{chunk-QY3UKLDE.js → chunk-VA5DPQB4.js} +1 -1
  49. package/dist/{chunk-AF3ITIZ4.js → chunk-VFYT3SC5.js} +2 -2
  50. package/dist/{chunk-O2BKBW7Z.js → chunk-WKDXH7NO.js} +1 -1
  51. package/dist/{chunk-NBTC5FNV.js → chunk-X23L2MF6.js} +1 -1
  52. package/dist/{chunk-W76EQSEV.js → chunk-X3RTCN6S.js} +1 -1
  53. package/dist/{chunk-EN43UYBN.js → chunk-X3VL5H24.js} +1 -1
  54. package/dist/{chunk-YQ56FQEO.js → chunk-XFAFMYIP.js} +1 -1
  55. package/dist/{chunk-IQCE4VBP.js → chunk-YFQ4FOAS.js} +1 -1
  56. package/dist/commands/antigravity/backfill.js +1 -1
  57. package/dist/commands/auth/create-key.js +1 -1
  58. package/dist/commands/auth/login.js +1 -1
  59. package/dist/commands/auth/logout.js +1 -1
  60. package/dist/commands/auth/revoke-key.js +1 -1
  61. package/dist/commands/auth/signup.js +1 -1
  62. package/dist/commands/auth/status.js +1 -1
  63. package/dist/commands/capture/scope.js +1 -1
  64. package/dist/commands/catalog/index.js +1 -1
  65. package/dist/commands/catalog/recommend.js +1 -1
  66. package/dist/commands/convert.js +1 -1
  67. package/dist/commands/converters.js +1 -1
  68. package/dist/commands/crons/list.js +1 -1
  69. package/dist/commands/crons/run.js +1 -1
  70. package/dist/commands/dashboard.js +1 -1
  71. package/dist/commands/diagnostics.js +1 -1
  72. package/dist/commands/eval-targets/create.js +1 -1
  73. package/dist/commands/eval-targets/list.js +1 -1
  74. package/dist/commands/evals/agent.js +1 -1
  75. package/dist/commands/evals/auto-run.js +1 -1
  76. package/dist/commands/evals/benchmark.js +1 -1
  77. package/dist/commands/evals/compare.js +1 -1
  78. package/dist/commands/evals/create.js +1 -1
  79. package/dist/commands/evals/optimize-description.js +1 -1
  80. package/dist/commands/evals/optimize.js +1 -1
  81. package/dist/commands/evals/refine-cases.js +1 -1
  82. package/dist/commands/evals/run.js +1 -1
  83. package/dist/commands/evals/validate-judge.js +1 -1
  84. package/dist/commands/experiments/list.js +1 -0
  85. package/dist/commands/gateway/ensure.js +1 -1
  86. package/dist/commands/hooks/install.js +1 -1
  87. package/dist/commands/hooks/run.js +1 -1
  88. package/dist/commands/hooks/uninstall.js +1 -1
  89. package/dist/commands/import.js +1 -1
  90. package/dist/commands/instructions/create.js +1 -1
  91. package/dist/commands/instructions/delete.js +1 -1
  92. package/dist/commands/instructions/fork.js +1 -1
  93. package/dist/commands/instructions/get.js +1 -1
  94. package/dist/commands/instructions/list.js +1 -1
  95. package/dist/commands/instructions/promote.js +1 -1
  96. package/dist/commands/instructions/pull.js +1 -1
  97. package/dist/commands/instructions/restore.js +1 -1
  98. package/dist/commands/instructions/retract.js +1 -0
  99. package/dist/commands/instructions/upstream.js +1 -1
  100. package/dist/commands/instructions/versions.js +1 -1
  101. package/dist/commands/launcher.js +1 -1
  102. package/dist/commands/local/down.js +1 -1
  103. package/dist/commands/local/up.js +1 -1
  104. package/dist/commands/org/current.js +1 -1
  105. package/dist/commands/org/list.js +1 -1
  106. package/dist/commands/org/switch.js +1 -1
  107. package/dist/commands/packs/add-instruction.js +1 -1
  108. package/dist/commands/packs/apply.js +1 -1
  109. package/dist/commands/packs/create.js +1 -1
  110. package/dist/commands/packs/fork.js +1 -1
  111. package/dist/commands/packs/get.js +1 -1
  112. package/dist/commands/packs/list.js +1 -1
  113. package/dist/commands/packs/remove-instruction.js +1 -1
  114. package/dist/commands/proxy/env.js +1 -1
  115. package/dist/commands/proxy/logs.js +1 -1
  116. package/dist/commands/proxy/restart.js +1 -1
  117. package/dist/commands/proxy/setup.js +1 -1
  118. package/dist/commands/proxy/start.js +1 -1
  119. package/dist/commands/proxy/status.js +1 -1
  120. package/dist/commands/proxy/stop.js +1 -1
  121. package/dist/commands/research/backfill.js +1 -1
  122. package/dist/commands/research/tail-transcript.js +1 -1
  123. package/dist/commands/service/install.js +6 -6
  124. package/dist/commands/service/status.js +1 -1
  125. package/dist/commands/service/uninstall.js +1 -1
  126. package/dist/commands/sessions/analyze.js +1 -1
  127. package/dist/commands/sessions/delete.js +1 -1
  128. package/dist/commands/sessions/end.js +1 -1
  129. package/dist/commands/sessions/import.js +1 -1
  130. package/dist/commands/sessions/list.js +1 -1
  131. package/dist/commands/sessions/start.js +1 -1
  132. package/dist/commands/setup.js +1 -1
  133. package/dist/commands/skills/export-approved.js +1 -1
  134. package/dist/commands/skills/install.js +1 -1
  135. package/dist/commands/skills/list.js +1 -1
  136. package/dist/commands/skills/publish.js +1 -1
  137. package/dist/commands/skills/search.js +1 -1
  138. package/dist/commands/skills/update.js +1 -1
  139. package/dist/commands/suggestions/accept.js +1 -11
  140. package/dist/commands/suggestions/auto.js +1 -0
  141. package/dist/commands/suggestions/dismiss.js +1 -1
  142. package/dist/commands/suggestions/list.js +1 -1
  143. package/dist/commands/suggestions/refresh.js +1 -1
  144. package/dist/commands/suggestions/undo.js +1 -0
  145. package/dist/dashboard/Dashboard.js +1 -1
  146. package/dist/dashboard/data.js +1 -1
  147. package/dist/dashboard/launcher/ActiveJobsList.js +1 -1
  148. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  149. package/dist/dashboard/launcher/NewLaunchForm.js +1 -1
  150. package/dist/dashboard/launcher/api.js +1 -1
  151. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  152. package/dist/lib/active-org-refresh.js +1 -1
  153. package/dist/lib/agent-loop.js +1 -1
  154. package/dist/lib/antigravity-transcript.js +1 -1
  155. package/dist/lib/api-client.js +1 -1
  156. package/dist/lib/ensure-api-key.js +1 -1
  157. package/dist/lib/ensure-fresh-token.js +1 -1
  158. package/dist/lib/eval-analyzer.js +1 -1
  159. package/dist/lib/eval-benchmark.js +1 -1
  160. package/dist/lib/eval-candidate-run.js +1 -1
  161. package/dist/lib/eval-conversation-handler.js +1 -1
  162. package/dist/lib/eval-executor.js +1 -1
  163. package/dist/lib/eval-failure-classifier.js +1 -0
  164. package/dist/lib/eval-grader.js +1 -1
  165. package/dist/lib/eval-meta-judge.js +1 -1
  166. package/dist/lib/eval-quota-gate.js +1 -0
  167. package/dist/lib/eval-resume.js +1 -0
  168. package/dist/lib/eval-run-batch.js +1 -1
  169. package/dist/lib/eval-trigger-tester.js +1 -1
  170. package/dist/lib/evolution-enrolment.js +1 -0
  171. package/dist/lib/handlers/cron-auto-accept-suggestions.js +1 -0
  172. package/dist/lib/handlers/cron-eval-autorun.js +1 -1
  173. package/dist/lib/handlers/cron-instruction-evolution.js +1 -1
  174. package/dist/lib/handlers/cron-instruction-training.js +1 -0
  175. package/dist/lib/handlers/cron-refresh-pricing.js +1 -1
  176. package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
  177. package/dist/lib/handlers/distill-memories.js +1 -1
  178. package/dist/lib/handlers/process-changelog.js +1 -1
  179. package/dist/lib/handlers/process-conversation.js +1 -1
  180. package/dist/lib/handlers/process-eval.js +1 -1
  181. package/dist/lib/handlers/process-insights.js +1 -1
  182. package/dist/lib/handlers/process-judge-review.js +1 -1
  183. package/dist/lib/handlers/process-launch.js +1 -1
  184. package/dist/lib/handlers/process-memory-ab.js +1 -1
  185. package/dist/lib/handlers/process-run-cleanup.js +1 -1
  186. package/dist/lib/handlers/process-session-goal.js +1 -1
  187. package/dist/lib/insights-prompts.js +1 -1
  188. package/dist/lib/instruction-proposer.js +1 -1
  189. package/dist/lib/judge-review-runner.js +1 -1
  190. package/dist/lib/manual-tasks.js +1 -1
  191. package/dist/lib/project-context.js +1 -0
  192. package/dist/lib/research-client.js +1 -1
  193. package/dist/lib/retraction.js +1 -0
  194. package/dist/lib/setup-steps.js +1 -1
  195. package/dist/lib/suggestion-accept.js +1 -0
  196. package/dist/lib/telemetry.js +1 -1
  197. package/dist/lib/terminal-target-heartbeat.js +1 -1
  198. package/oclif.manifest.json +237 -1
  199. package/package.json +9 -5
  200. package/dist/chunk-2RCWYVEU.js +0 -1
  201. package/dist/chunk-5R5RGKOW.js +0 -38
  202. package/dist/chunk-ATL4WZBF.js +0 -1
  203. package/dist/chunk-DBELYMDA.js +0 -1
  204. package/dist/chunk-FFI3C3B3.js +0 -1
  205. package/dist/chunk-HMMO27U4.js +0 -1
  206. package/dist/chunk-I7QSMY3Z.js +0 -1
  207. package/dist/chunk-KLEF5D3A.js +0 -1
  208. package/dist/chunk-O7PSLZO6.js +0 -15
  209. package/dist/chunk-RMDLJN4L.js +0 -8
  210. package/dist/chunk-V2IEFHT7.js +0 -1
  211. package/dist/index.js +0 -1
package/README.md CHANGED
@@ -17,6 +17,40 @@ Credentials are read from (first match wins):
17
17
  3. `~/.config/rulemetric/auth.json` (JSON fallback, requires `jq`)
18
18
  4. `.env.local` in the project root (development)
19
19
 
20
+ ## Local mode (all data on your machine)
21
+
22
+ By default the CLI talks to the hosted service at `rulemetric.com`. `local up`
23
+ runs the whole product on your own machine instead — API, dashboard, and
24
+ database — with no cloud contact at all.
25
+
26
+ ```bash
27
+ rulemetric local up # start (downloads the local runtime on first run)
28
+ rulemetric local up --foreground # run in this terminal instead of as a service
29
+ rulemetric local up --port 3210 # non-default port
30
+ rulemetric local up --email you@example.com --password '<pw>' # provision the first user
31
+ rulemetric local down # stop; data is preserved
32
+ rulemetric local down --delete-data # stop and wipe the local database (irreversible)
33
+ ```
34
+
35
+ **Requires Docker** (the database runs in it) and the
36
+ [Supabase CLI](https://supabase.com/docs/guides/cli) —
37
+ `brew install supabase/tap/supabase`. First run downloads `@rulemetric/local`
38
+ (~10 MB: bundled API server, dashboard, and migrations) at a version locked to
39
+ your CLI; add `--yes` to skip the confirmation. Cloud-only users never download it.
40
+
41
+ The dashboard is then at `http://localhost:3000` (or your `--port`), and
42
+ `rulemetric hooks install` points capture at it like any other API URL.
43
+
44
+ To guarantee nothing ever reaches the cloud — including implicit fallbacks —
45
+ set strict mode, which turns every unconfigured cloud call into a loud failure
46
+ instead of a silent upload:
47
+
48
+ ```bash
49
+ echo 'RULEMETRIC_STRICT_LOCAL=1' >> ~/.config/rulemetric/env
50
+ ```
51
+
52
+ `local down` leaves your data on disk; `local up` picks it back up.
53
+
20
54
  ## Org commands
21
55
 
22
56
  The org commands let you list and switch the "active org" used by every
@@ -1 +1 @@
1
- import{a}from"./chunk-2DXBC2JQ.js";import"./chunk-IZTIYR5Q.js";import"./chunk-NIRD7ETU.js";import"./chunk-6VKQT2J3.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-KHWG7ZG4.js";import"./chunk-IZTIYR5Q.js";import"./chunk-UUZB4IKU.js";import"./chunk-EQHKCGSX.js";import"./chunk-VA5DPQB4.js";import"./chunk-3AV3GTMP.js";import"./chunk-QAV4HW7D.js";import"./chunk-3PUOJ6F2.js";import"./chunk-JZ5Z2BRO.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
@@ -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-QAV4HW7D.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith("#"))continue;let o=e.indexOf("=");if(o<0)continue;let r=e.slice(0,o).trim(),i=e.slice(o+1).trim();process.env[r]||(process.env[r]=i)}return!!(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)}catch{return!1}}c(C,"loadEnvFile");T();async function I(s){let t={totalSessions:0,totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalCacheReadTokens:0,totalCacheWriteTokens:0,totalCostUSD:0,providers:{}},n=await m(s);t.providers={};for(let a of n)t.providers[a.provider]=(t.providers[a.provider]||0)+1;let e=new E,o=n.filter(a=>a.provider==="claude");for(let a of o)try{let h=p.readdirSync(a.path).filter(f=>f.endsWith(".jsonl"));t.totalSessions+=h.length;for(let f of h){let v=p.readFileSync(u.join(a.path,f),"utf-8"),R=e.parse(v);for(let l of R.events)l.tokenUsage&&(t.totalCalls++,t.totalInputTokens+=l.tokenUsage.input,t.totalOutputTokens+=l.tokenUsage.output,t.totalCacheReadTokens+=l.tokenUsage.cacheRead??0,t.totalCacheWriteTokens+=l.tokenUsage.cacheWrite??0)}}catch{}let r=15,i=75;return t.totalCostUSD=Math.round((t.totalInputTokens/1e6*r+t.totalOutputTokens/1e6*i+t.totalCacheReadTokens/1e6*(r*.1)+t.totalCacheWriteTokens/1e6*(r*1.25))*100)/100,t}c(I,"loadLocalStats");async function U(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY,e=process.env.RULEMETRIC_ACCESS_TOKEN,o=n??e;if(!o)return null;let r=new URLSearchParams;s&&r.set("projectPath",s);try{let i=await fetch(`${t}/api/insights/compute?${r}`,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(5e3)});return i.ok?await i.json():null}catch{return null}}c(U,"loadApiInsights");async function g(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)return null;let e=new URLSearchParams;s&&e.set("projectPath",s);try{let o=await fetch(`${t}/api/insights/linked-instructions?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(5e3)});return o.ok?await o.json():null}catch{return null}}c(g,"loadLinkedInstructions");export{I as a,U as b,g as c};
@@ -1,4 +1,4 @@
1
- import{a as 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-NTKO4H2K.js";import{e as _}from"./chunk-QAV4HW7D.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(`
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(`
@@ -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-B3BHB26P.js";import{e as w,f as R}from"./chunk-QAV4HW7D.js";import{b as G,c as H}from"./chunk-3PUOJ6F2.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};
@@ -0,0 +1,45 @@
1
+ import{a as o}from"./chunk-ZLLER3HP.js";function I(e){if(!e||typeof e!="object")return e;let r=e,n=r.project_areas;if(n!==void 0&&!Array.isArray(n)){let t=n&&typeof n=="object"?n.areas:void 0;r.project_areas=Array.isArray(t)?t:void 0}return e}o(I,"normalizeRecommendations");import{z as l}from"zod";var x=["org","team","project","personal"],_=l.object({name:l.string().min(1),description:l.string().min(1),type:l.literal("instruction").default("instruction"),scope:l.enum(x),version:l.string().min(1),tags:l.array(l.string()).optional(),compatibility:l.array(l.string()).optional(),slots:l.record(l.string(),l.string()).optional(),metadata:l.record(l.string(),l.unknown()).optional()});import{z as p}from"zod";var C=p.object({name:p.string().min(1),description:p.string().min(1),type:p.literal("prompt"),version:p.string().min(1),tags:p.array(p.string()).optional(),variables:p.array(p.string()).optional(),metadata:p.record(p.string(),p.unknown()).optional()});function h(e,r){let n=r.map(t=>`- ID: ${t.id}
2
+ Name: ${t.name}
3
+ Description: ${t.description}
4
+ Tags: ${t.tags.join(", ")}
5
+ Preview: ${t.contentPreview}`).join(`
6
+
7
+ `);return`You are an expert at matching AI coding instructions to software projects.
8
+
9
+ ## Project
10
+ - Name: ${e.name}
11
+ - Description: ${e.description??"No description"}
12
+ - Languages: ${e.languages.join(", ")||"Unknown"}
13
+ - Topics: ${e.topics.join(", ")||"None"}
14
+ - Dependencies: ${e.dependencies.join(", ")||"None"}
15
+
16
+ ## Available Instructions
17
+
18
+ ${n}
19
+
20
+ ## Task
21
+
22
+ Analyze the project and recommend which instructions would be most useful. Consider:
23
+ 1. Language and framework alignment
24
+ 2. Project purpose and what standards/practices would help
25
+ 3. Security, testing, and quality needs based on the project type
26
+
27
+ Return your response as JSON in this exact format:
28
+ {
29
+ "recommendations": [
30
+ { "instructionId": "<id>", "score": <0.0-1.0>, "reason": "<one sentence explanation>" }
31
+ ]
32
+ }
33
+
34
+ Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`}o(h,"buildRecommendationPrompt");var R=32e3,O={name:"x".repeat(64),description:"x".repeat(256),languages:["TypeScript","Python","Go"],topics:["x".repeat(32)],dependencies:["x".repeat(32)]};function T(e,r={}){if(e.length===0)return[];let n=r.charBudget??R,t=h(O,[]).length,s=[],i=[],u=0;for(let d of e){let m=L(d);i.length>0&&t+u+m>n&&(s.push(i),i=[],u=0),i.push(d),u+=m}return i.length>0&&s.push(i),s}o(T,"batchCandidatesForPrompt");function L(e){return`- ID: ${e.id}
35
+ Name: ${e.name}
36
+ Description: ${e.description}
37
+ Tags: ${e.tags.join(", ")}
38
+ Preview: ${e.contentPreview}`.length+2}o(L,"renderedSize");var b=["Added","Changed","Fixed","Removed","Deprecated","Security"],j=/^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/,A=/^###\s+(.+?)\s*$/,N=/^[-*]\s+(.*\S)\s*$/,E=/^ {2,}(\S.*)$/;function F(e){let r=e.split(/\r?\n/),n=[],t=null,s=null,i=null;for(let u of r){let d=u.match(j);if(d){t&&n.push(t);let c=d[1].trim();t={version:c,date:d[2]??null,unreleased:c.toLowerCase()==="unreleased",sections:{}},s=null,i=null;continue}if(!t)continue;let m=u.match(A);if(m){let c=m[1].trim();b.includes(c)?(s=c,t.sections[s]||(t.sections[s]=[]),i=t.sections[s]):(s=null,i=null);continue}if(!s||!i)continue;let f=u.match(N);if(f){i.push(f[1]);continue}let g=u.match(E);if(g&&i.length>0){i[i.length-1]+=" "+g[1].trim();continue}}return t&&n.push(t),{entries:n}}o(F,"parseChangelog");function D(e){return e.entries.filter(r=>r.unreleased?!1:Object.values(r.sections).some(n=>n&&n.length>0))}o(D,"announceableEntries");function w(e){let r=/^(#{1,6})\s+/.exec(e);return r?r[1].length:0}o(w,"headingLevel");function M(e){return e.replace(/^#{1,6}\s+/,"").replace(/[`*_~]/g,"").trim().toLowerCase()}o(M,"normaliseHeading");function $(e,r){let n=M(r);if(n.length===0)return{content:e,removed:!1,removedText:null,reason:"not-found"};let t=e.split(`
39
+ `),s=[];for(let c=0;c<t.length;c+=1)w(t[c])>0&&M(t[c])===n&&s.push(c);if(s.length===0)return{content:e,removed:!1,removedText:null,reason:"not-found"};if(s.length>1)return{content:e,removed:!1,removedText:null,reason:"ambiguous"};let i=s[0],u=w(t[i]),d=t.length;for(let c=i+1;c<t.length;c+=1){let v=w(t[c]);if(v>0&&v<=u){d=c;break}}let m=t.slice(i,d).join(`
40
+ `),f=[...t.slice(0,i),...t.slice(d)];return f.join("").trim().length===0?{content:e,removed:!1,removedText:null,reason:"would-empty-file"}:{content:f.join(`
41
+ `).replace(/\n{3,}/g,`
42
+
43
+ `),removed:!0,removedText:m}}o($,"removeMarkdownSection");function G(e,r){let n=r.trim();if(n.length===0)return{content:e,removed:!1,removedText:null,reason:"not-found"};let t=e.indexOf(n);if(t===-1)return{content:e,removed:!1,removedText:null,reason:"not-found"};if(e.indexOf(n,t+1)!==-1)return{content:e,removed:!1,removedText:null,reason:"ambiguous"};let s=(e.slice(0,t)+e.slice(t+n.length)).replace(/\n{3,}/g,`
44
+
45
+ `);return s.trim().length===0?{content:e,removed:!1,removedText:null,reason:"would-empty-file"}:{content:s,removed:!0,removedText:n}}o(G,"removeExactBlock");var k=["HTTPS_PROXY","HTTP_PROXY","NODE_EXTRA_CA_CERTS"];function U(e,r){if(!e||typeof e!="object")return{value:e,removed:!1,removedDescriptions:[],reason:"not-found"};let n=structuredClone(e);if(!n.hooks)return{value:n,removed:!1,removedDescriptions:[],reason:"not-found"};let t=[];for(let[s,i]of Object.entries(n.hooks)){if(!Array.isArray(i))continue;let u=i.filter(d=>{let m=(d.hooks??[]).some(f=>typeof f.command=="string"&&f.command.includes(r));return m&&t.push(`${s}: ${d.matcher??"*"} \u2192 ${(d.hooks??[]).map(f=>f.command).join(", ")}`),!m});u.length===0?delete n.hooks[s]:n.hooks[s]=u}return Object.keys(n.hooks).length===0&&delete n.hooks,{value:n,removed:t.length>0,removedDescriptions:t,...t.length===0?{reason:"not-found"}:{}}}o(U,"removeHookByCommand");function H(e,r){if(!e||typeof e!="object")return{value:e,removed:!1,removedDescriptions:[],reason:"not-found"};let n=structuredClone(e);return!n.mcpServers||!(r in n.mcpServers)?{value:n,removed:!1,removedDescriptions:[],reason:"not-found"}:(delete n.mcpServers[r],Object.keys(n.mcpServers).length===0&&delete n.mcpServers,{value:n,removed:!0,removedDescriptions:[`mcpServers.${r}`]})}o(H,"removeMcpServer");function y(e){if(!e||typeof e!="object")return[];let r=e.env;return r?k.filter(n=>n in r):[]}o(y,"protectedEnvKeysPresent");function z(e,r){let n=y(e),t=new Set(y(r));return n.filter(s=>!t.has(s))}o(z,"lostProtectedEnvKeys");function B(e,r){let n=`HTTP ${e}`;if(!r||typeof r!="object")return{message:n};let t=r,s=typeof t.error=="string"&&t.error?t.error:t.error?JSON.stringify(t.error):n,i=typeof t.code=="string"&&t.code?t.code:void 0;return i?{message:s,code:i}:{message:s}}o(B,"parseApiError");import Me from"gray-matter";import{z as S}from"zod";var Ie=S.object({type:S.enum(["instruction","prompt"])});export{I as a,h as b,T as c,F as d,D as e,$ as f,G as g,U as h,H as i,z as j,B as k};
@@ -1,4 +1,5 @@
1
- var e=[{name:"project_areas",prompt:`Analyze this Claude Code usage data and identify project areas.
1
+ import{a}from"./chunk-ZLLER3HP.js";function i(n){let t=n.dismissed.filter(e=>e.label.trim()!==""),o=n.repeated.filter(e=>e.label.trim()!=="");if(t.length===0&&o.length===0)return"";let s=["","## ADVICE YOU HAVE ALREADY GIVEN THIS USER","This is your own prior output for this project. Use it to say something NEW."];return t.length>0&&s.push("","DISMISSED by the user \u2014 do NOT propose these again, and do not propose a","reworded version of them. A paraphrase of a dismissed suggestion is still","the dismissed suggestion:",...t.map(e=>`- [${e.category}] ${e.label}`)),o.length>0&&s.push("","ALREADY GENERATED, sometimes repeatedly. Repeat one ONLY if it is still","the single most important finding in the data \u2014 otherwise prefer a new","observation over restating these:",...o.map(e=>`- [${e.category}] ${e.label} (generated ${e.timesGenerated}x)`)),s.join(`
2
+ `)}a(i,"renderGeneratorMemory");var r=[{name:"project_areas",usesGeneratorMemory:!0,prompt:`Analyze this Claude Code usage data and identify project areas.
2
3
  RESPOND WITH ONLY A VALID JSON OBJECT:
3
4
  {
4
5
  "areas": [
@@ -10,7 +11,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
10
11
  {
11
12
  "narrative": "2-3 paragraphs analyzing HOW the user interacts with Claude Code. Use second person 'you'. Describe patterns: iterate quickly vs detailed upfront specs? Interrupt often or let Claude run? Include specific examples. Use **bold** for key insights.",
12
13
  "key_pattern": "One sentence summary of most distinctive interaction style"
13
- }`,maxTokens:8192},{name:"what_works",prompt:`Analyze this Claude Code usage data and identify what's working well for this user. Use second person ("you").
14
+ }`,maxTokens:8192},{name:"what_works",usesGeneratorMemory:!0,prompt:`Analyze this Claude Code usage data and identify what's working well for this user. Use second person ("you").
14
15
  RESPOND WITH ONLY A VALID JSON OBJECT:
15
16
  {
16
17
  "intro": "1 sentence of context",
@@ -18,7 +19,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
18
19
  {"title": "Short title (3-6 words)", "description": "2-3 sentences describing the impressive workflow or approach. Use 'you' not 'the user'."}
19
20
  ]
20
21
  }
21
- Include 3 impressive workflows.`,maxTokens:8192},{name:"friction_analysis",prompt:`Analyze this Claude Code usage data and identify friction points for this user. Use second person ("you").
22
+ Include 3 impressive workflows.`,maxTokens:8192},{name:"friction_analysis",usesGeneratorMemory:!0,prompt:`Analyze this Claude Code usage data and identify friction points for this user. Use second person ("you").
22
23
  RESPOND WITH ONLY A VALID JSON OBJECT:
23
24
  {
24
25
  "intro": "1 sentence summarizing friction patterns",
@@ -26,7 +27,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
26
27
  {"category": "Concrete category name", "description": "1-2 sentences explaining this category and what could be done differently. Use 'you' not 'the user'.", "examples": ["Specific example with consequence", "Another example"]}
27
28
  ]
28
29
  }
29
- Include 3 friction categories with 2 examples each.`,maxTokens:8192},{name:"suggestions",prompt:`Analyze this Claude Code usage data and suggest improvements.
30
+ Include 3 friction categories with 2 examples each.`,maxTokens:8192},{name:"suggestions",usesGeneratorMemory:!0,prompt:`Analyze this Claude Code usage data and suggest improvements.
30
31
  ## CC FEATURES REFERENCE (pick from these for features_to_try):
31
32
  1. **MCP Servers**: Connect Claude to external tools, databases, and APIs via Model Context Protocol.
32
33
  - How to use: Run \`claude mcp add <server-name> -- <command>\`
@@ -50,7 +51,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
50
51
  {"title": "Short title", "suggestion": "1-2 sentence summary", "detail": "3-4 sentences explaining how this applies", "copyable_prompt": "A specific prompt to copy and try"}
51
52
  ]
52
53
  }
53
- Include 2-3 items for each category.`,maxTokens:8192},{name:"on_the_horizon",prompt:`Analyze this Claude Code usage data and identify future opportunities.
54
+ Include 2-3 items for each category.`,maxTokens:8192},{name:"on_the_horizon",usesGeneratorMemory:!0,prompt:`Analyze this Claude Code usage data and identify future opportunities.
54
55
  RESPOND WITH ONLY A VALID JSON OBJECT:
55
56
  {
56
57
  "intro": "1 sentence about evolving AI-assisted development",
@@ -64,7 +65,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
64
65
  "headline": "A memorable QUALITATIVE moment from the transcripts - not a statistic. Something human, funny, or surprising.",
65
66
  "detail": "Brief context about when/where this happened"
66
67
  }
67
- Find something genuinely interesting or amusing from the session summaries.`,maxTokens:8192}],t=`You're writing an "At a Glance" summary for a Claude Code usage insights report.
68
+ Find something genuinely interesting or amusing from the session summaries.`,maxTokens:8192}],d=`You're writing an "At a Glance" summary for a Claude Code usage insights report.
68
69
  Use this 4-part structure:
69
70
  1. **What's working** - What is the user's unique style and what impactful things have they done? Don't be fluffy.
70
71
  2. **What's hindering you** - Split into (a) Claude's fault and (b) user-side friction. Be honest but constructive.
@@ -77,7 +78,7 @@ RESPOND WITH ONLY A VALID JSON OBJECT:
77
78
  "whats_hindering": "(refer to instructions above)",
78
79
  "quick_wins": "(refer to instructions above)",
79
80
  "ambitious_workflows": "(refer to instructions above)"
80
- }`,o=`Analyze this coding session and produce a structured analysis.
81
+ }`,l=`Analyze this coding session and produce a structured analysis.
81
82
  The session is from a non-Claude-Code tool, so analyze the conversation and tool usage patterns.
82
83
 
83
84
  RESPOND WITH ONLY A VALID JSON OBJECT:
@@ -99,4 +100,4 @@ Outcome guide:
99
100
  - mostly_achieved: Main goal done but minor items remain
100
101
  - partially_achieved: Some progress but significant work left
101
102
  - not_achieved: Attempted but failed
102
- - abandoned: User gave up or switched tasks`;export{e as a,t as b,o as c};
103
+ - abandoned: User gave up or switched tasks`;export{i as a,r as b,d as c,l as 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-QAV4HW7D.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,4 +1,4 @@
1
- import{d as b,f as y}from"./chunk-B3BHB26P.js";import{e as M,f as w}from"./chunk-KLEF5D3A.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
1
+ import{d as b,f as y}from"./chunk-B3BHB26P.js";import{e as M,f as w}from"./chunk-QAV4HW7D.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
2
2
  `);async function C(f){try{let n=await fetch(f,{headers:{accept:"text/plain, text/markdown, text/html"}});if(!n.ok)return null;let i=await n.text();return i.length>v?i.slice(0,v):i}catch{return null}}u(C,"fetchPage");var L=u(async(f,n)=>{let i=await M("/api/pricing/coverage"),I=[...i.unpriced,...i.stale],m=new Map;for(let r of I)m.set(`${r.provider}::${r.modelId}`,r);let a=[...m.values()];if(a.length===0)return n.logger.info("[cron-refresh-pricing] coverage clean \u2014 nothing unpriced or stale"),{status:"clean",checked:i.unpriced.length+i.stale.length};if(b()==="none")return n.logger.warn(`[cron-refresh-pricing] ${a.length} model(s) need pricing but no LLM backend (install the claude CLI or set ANTHROPIC_API_KEY) \u2014 skipping`),{status:"no-llm",pending:a.length};let d=new Map;for(let r of a){let o=d.get(r.provider)??[];o.push(r.modelId),d.set(r.provider,o)}let t={written:0,unchanged:0,flagged:0,rejected:0,skipped:0},c=[];for(let[r,o]of d){let h=$[r];if(!h){n.logger.warn(`[cron-refresh-pricing] no pricing source configured for provider '${r}' (${o.length} model(s)) \u2014 skipping`),t.skipped+=o.length;continue}let p="",l="";for(let e of h){let s=await C(e);s&&(p+=`
3
3
 
4
4
  === ${e} ===
@@ -0,0 +1 @@
1
+ import{a as E}from"./chunk-MO57LGGK.js";import{b as R,c as x}from"./chunk-KGURGIZ2.js";import{f as F}from"./chunk-QAV4HW7D.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{c as u}from"./chunk-6VKQT2J3.js";import{b as c,e as y,f as m}from"./chunk-KLEF5D3A.js";import{a as n,b as t,i as s,k as p}from"./chunk-JZ5Z2BRO.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
1
+ import{c as u}from"./chunk-UUZB4IKU.js";import{b as c,e as y,f as m}from"./chunk-QAV4HW7D.js";import{a as n,b as t,i as s,k as p}from"./chunk-JZ5Z2BRO.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
@@ -1 +1 @@
1
- import{c as d,d as t}from"./chunk-AI6FMGKM.js";import{a as r}from"./chunk-ZLLER3HP.js";async function g(o,i){let{evalTargetId:s}=o;try{let e=await t({targetId:s,engineFlag:"auto",skipReviewed:!0,log:r(a=>i.logger.info(`[judge-review] ${a}`),"log"),warn:r(a=>i.logger.warn(`[judge-review] ${a}`),"warn")});return{evalTargetId:s,reviewerModel:e.reviewerModel,comparedPairs:e.report.pairs,disagreements:e.report.disagreements.length,persisted:e.persisted,alreadyReviewed:e.alreadyReviewed,deferredPartialRuns:e.deferredPartialRuns}}catch(e){if(e instanceof d)return i.logger.info(`[judge-review] skipped (${e.reason}): ${e.message}`),{evalTargetId:s,skipped:e.reason};throw e}}r(g,"processJudgeReview");export{g as a};
1
+ import{c as d,d as t}from"./chunk-SYTQDPPN.js";import{a as r}from"./chunk-ZLLER3HP.js";async function g(o,i){let{evalTargetId:s}=o;try{let e=await t({targetId:s,engineFlag:"auto",skipReviewed:!0,log:r(a=>i.logger.info(`[judge-review] ${a}`),"log"),warn:r(a=>i.logger.warn(`[judge-review] ${a}`),"warn")});return{evalTargetId:s,reviewerModel:e.reviewerModel,comparedPairs:e.report.pairs,disagreements:e.report.disagreements.length,persisted:e.persisted,alreadyReviewed:e.alreadyReviewed,deferredPartialRuns:e.deferredPartialRuns}}catch(e){if(e instanceof d)return i.logger.info(`[judge-review] skipped (${e.reason}): ${e.message}`),{evalTargetId:s,skipped:e.reason};throw e}}r(g,"processJudgeReview");export{g as a};
@@ -1 +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-JPUH3V67.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-QAV4HW7D.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 +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-PQN2GAG4.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,17 @@
1
+ import{a as M,b as j,c as N,d as v}from"./chunk-4PWGV2OW.js";import{a as S}from"./chunk-5RBLIVBF.js";import{c as O,d as z,f as b}from"./chunk-B3BHB26P.js";import{e as _,f as A,h as p}from"./chunk-QAV4HW7D.js";import{a as E}from"./chunk-3PUOJ6F2.js";import{a as h}from"./chunk-ZLLER3HP.js";async function Z(g,c){let{mirrorId:o,projectPath:e,projectId:a,config:d}=g,s=h(t=>c.logger.info(t),"log");if(d?.sessionId)return L({mirrorId:o,sessionId:d.sessionId},s);s(`Processing insights job ${o}...`),await p(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"reading_data"}});try{let{repaired:t}=await A("/api/sessions/repair-analyzed-at",{});t>0&&s(` Repaired analyzed_at on ${t} orphan session(s).`)}catch(t){s(` Warning: analyzed_at repair failed: ${t instanceof Error?t.message:String(t)}`)}let r=await H(e,a);if(!r)throw new S("No session data found \u2014 ensure sessions are captured and enriched.");s(` Found ${r.stats.sessions} sessions, generating recommendations...`);let f=20,n=200;if(z()!=="none"){let t=0,i=0;try{for(;t<n;){let m=await _(`/api/sessions?hasAnalysis=false&limit=${f}&offset=${i}`);if(m.length===0)break;s(` Generating facets for ${m.length} un-analyzed sessions (drained ${t} so far)...`);for(let y of m){if(t>=n)break;try{let u=await _(`/api/sessions/${y.id}/events?limit=100`);if(u.length<2){t++,i++;continue}let I=u.filter(w=>w.eventType==="user_message"||w.eventType==="human").map(w=>w.content?.slice(0,200)??"").filter(Boolean).join(`
2
+ ---
3
+ `);if(!I){t++,i++;continue}let P=await b(v,I,4096);if(P){let w=u.filter(C=>C.eventType==="user_message"||C.eventType==="human").length;await p(`/api/sessions/${y.id}/enrich`,{analysis:{source:"generated_facets",...P},analyzedEventCount:u.length,analyzedTurnCount:w}),s(` Generated facets for session ${y.id} (${y.tool})`)}else i++;t++}catch(u){s(` Failed to generate facets for session ${y.id}: ${u instanceof Error?u.message:String(u)}`),t++,i++}}if(m.length<f)break}}catch(m){s(` Warning: facet generation failed after ${t} sessions: ${m instanceof Error?m.message:String(m)}`)}}let k=await F(e,s);k&&s(` Generator memory: ${k.split(`
4
+ `).length} lines of prior-advice context`);let l={},$=j.length+1;for(let t=0;t<j.length;t++){let i=j[t];s(` [${t+1}/${$}] Generating ${i.name}...`);try{await p(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:i.name,current:t+1,total:$,partial:{...l}}})}catch(u){s(` Warning: progress update failed for ${i.name}: ${u instanceof Error?u.message:String(u)}`)}s(` Running LLM prompt for ${i.name}...`);let m=i.usesGeneratorMemory&&k?`${r.summary}
5
+ ${k}`:r.summary,y=await b(i.prompt,m,i.maxTokens);y?(l[i.name]=y,s(` Got result for ${i.name}`)):s(` No result for ${i.name} (LLM returned null)`)}s(` [${$}/${$}] Generating at_a_glance...`),await p(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"at_a_glance",current:$,total:$,partial:{...l}}});let G=[r.summary,l.what_works?`
6
+ ## What Works
7
+ ${JSON.stringify(l.what_works)}`:"",l.friction_analysis?`
8
+ ## Friction
9
+ ${JSON.stringify(l.friction_analysis)}`:"",l.suggestions?`
10
+ ## Suggestions
11
+ ${JSON.stringify(l.suggestions)}`:"",l.on_the_horizon?`
12
+ ## On the Horizon
13
+ ${JSON.stringify(l.on_the_horizon)}`:""].join(`
14
+ `),R=await b(N,G,8192);R&&(l.at_a_glance=R),s(" Uploading results..."),s(` Done! Recommendations generated for job ${o}`),E(l);let T={recommendations:l};return await p(`/api/insights-jobs/${o}/state`,{result:T}).catch(t=>{s(`result persist failed: ${t instanceof Error?t.message:String(t)}`)}),await J(l,e,s),T}h(Z,"processInsights");async function J(g,c,o){if(c)try{let e=g.suggestions,a=Array.isArray(e?.claude_md_additions)?e.claude_md_additions.filter(n=>typeof n?.addition=="string"&&n.addition.trim().length>=12).map(n=>({addition:String(n.addition).trim(),why:String(n.why??"")})):[],d=Array.isArray(g.recommended_skills)?g.recommended_skills.filter(n=>typeof n?.skillId=="string"&&n.skillId.length>0).map(n=>({skillId:String(n.skillId),reason:String(n.reason??"")})):[],s=Array.isArray(e?.features_to_try)?e.features_to_try.filter(n=>typeof n?.feature=="string"&&n.feature.trim().length>=2).map(n=>({feature:String(n.feature).trim(),one_liner:String(n.one_liner??""),why_for_you:String(n.why_for_you??""),example_code:String(n.example_code??"")})):[];if(a.length===0&&d.length===0&&s.length===0)return;let r=await A("/api/insights/recommendations/nominate",{projectPath:c,additions:a.slice(0,20),skills:d.slice(0,20),features:s.slice(0,20)}),f=r.additionsRejected??[];o(` ${r.nominated} recommendation(s) nominated into the suggestion feed (${r.additionsCreated} new instruction(s)`+((r.featuresCreated??0)>0?`, ${r.featuresCreated} feature proposal(s)`:"")+(r.skillsUnresolved>0?`, ${r.skillsUnresolved} skill slug(s) unresolved`:"")+(f.length>0?`, ${f.length} rejected as unfilled templates`:"")+")");for(let n of f)o(` rejected "${n.name}" \u2014 unfilled placeholder(s): ${n.placeholders.join(", ")}`)}catch(e){o(` nomination skipped: ${e instanceof Error?e.message:String(e)}`)}}h(J,"nominateRecommendations");async function L(g,c){let{mirrorId:o,sessionId:e}=g;c(`Analyzing session ${e} via tool CLI...`),await p(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"fetching_session"}});let a=await _(`/api/sessions/${e}`);if(a.analysis&&a.analysis.source==="session_analysis")return c(` Session ${e} already analyzed \u2014 skipping (idempotency guard)`),{sessionId:e,skipped:!0,reason:"already_analyzed"};let d=await _(`/api/sessions/${e}/events?limit=100`);if(d.length<2)throw new S("Session has too few events to analyze");let s=d.filter(n=>n.eventType==="user_message"||n.eventType==="human").map(n=>n.content?.slice(0,200)??"").filter(Boolean).join(`
15
+ ---
16
+ `);if(!s)throw new S("No user messages found in session");await p(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"running_analysis",tool:a.tool}});let r=await O(a.tool,v,s);if(!r)throw new Error(`Analysis failed \u2014 ${a.tool} CLI returned no result`);let f=d.filter(n=>n.eventType==="user_message"||n.eventType==="human").length;return await p(`/api/sessions/${e}/enrich`,{analysis:{source:"session_analysis",tool:a.tool,...r},analyzedEventCount:d.length,analyzedTurnCount:f}),c(` Session ${e} analyzed via ${a.tool}`),{sessionId:e,tool:a.tool,facets:r}}h(L,"processSessionAnalysisInline");async function F(g,c,o=_){try{let e=await o(`/api/insights/recommendations/history?projectPath=${encodeURIComponent(g??"")}`);return!e||!Array.isArray(e.dismissed)||!Array.isArray(e.repeated)?"":M(e)}catch(e){return c(` Warning: generator memory unavailable (${e instanceof Error?e.message:String(e)}) \u2014 generating without it`),""}}h(F,"fetchGeneratorMemory");async function H(g,c){try{let o=new URLSearchParams;c?o.set("projectId",c):g&&o.set("projectPath",g);let e=await _(`/api/insights/compute?${o}`);if(!e||e.total_sessions===0)return null;let a=Object.entries(e.tool_counts??{}).sort((s,r)=>r[1]-s[1]).slice(0,10).map(([s,r])=>`${s}: ${r}`).join(", ");return{summary:[`Sessions: ${e.total_sessions}, Messages: ${e.total_messages}, Hours: ${Math.round(e.total_duration_hours)}`,`Top tools: ${a}`,e.goal_categories&&Object.keys(e.goal_categories).length>0?`Goals: ${JSON.stringify(e.goal_categories)}`:"",e.friction&&Object.keys(e.friction).length>0?`Friction: ${JSON.stringify(e.friction)}`:"",e.outcomes&&Object.keys(e.outcomes).length>0?`Outcomes: ${JSON.stringify(e.outcomes)}`:"",e.projects&&Object.keys(e.projects).length>0?`Projects: ${JSON.stringify(e.projects)}`:""].filter(Boolean).join(`
17
+ `),stats:{sessions:e.total_sessions,totalMessages:e.total_messages,totalHours:e.total_duration_hours,toolCounts:e.tool_counts,goalCounts:e.goal_categories,frictionCounts:e.friction}}}catch{return null}}h(H,"buildDataSummaryFromApi");export{Z as a,F as b};
@@ -1,4 +1,4 @@
1
- import{a as C}from"./chunk-4VZLIGMS.js";import{b as $}from"./chunk-CNOD6HWU.js";import{a as y}from"./chunk-4L2ZEIRE.js";import{c as f}from"./chunk-HMMO27U4.js";import{e as h,f as w}from"./chunk-KLEF5D3A.js";import{a as v}from"./chunk-ZLLER3HP.js";async function N(n,i,p){let{conversationId:a,messageId:g,messageContent:r}=n,o=await h(`/api/eval-targets/${i}`),c=await h(`/api/eval-targets/${i}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),t=e.findIndex(l=>l.id===g);if(t>=0&&e.slice(t+1).some(u=>u.role==="assistant"&&(u.type==="results"||u.type==="proposal"||u.type==="generated"||u.type==="text"))){p(`Message ${g} already processed \u2014 skipping (idempotency guard)`);return}let s=v(async(l,u,m)=>{await w(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:u,data:m})},"postMessage"),d=await _(o,c,e,r,p);p(`Action: ${d.action}`);try{switch(d.action){case"run_evals":await x(o,c,a,s,p);break;case"generate_cases":await k(o,i,a,s,p);break;case"analyze_results":case"propose_changes":await E(o,c,e,r,a,s,p);break;case"respond":await s(d.response,"text");break}}catch(l){let u=l instanceof Error?l.message:String(l);throw await s(`Something went wrong: ${u}`,"text").catch(()=>{}),l}}v(N,"processConversationJob");async function _(n,i,p,a,g){let r=p.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
1
+ import{a as C}from"./chunk-AFYZYXQ3.js";import{b as $}from"./chunk-CNOD6HWU.js";import{a as y}from"./chunk-JPUH3V67.js";import{d as f}from"./chunk-TZA4HAVF.js";import{e as h,f as w}from"./chunk-QAV4HW7D.js";import{a as v}from"./chunk-ZLLER3HP.js";async function N(n,i,p){let{conversationId:a,messageId:g,messageContent:r}=n,o=await h(`/api/eval-targets/${i}`),c=await h(`/api/eval-targets/${i}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),t=e.findIndex(l=>l.id===g);if(t>=0&&e.slice(t+1).some(u=>u.role==="assistant"&&(u.type==="results"||u.type==="proposal"||u.type==="generated"||u.type==="text"))){p(`Message ${g} already processed \u2014 skipping (idempotency guard)`);return}let s=v(async(l,u,m)=>{await w(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:u,data:m})},"postMessage"),d=await _(o,c,e,r,p);p(`Action: ${d.action}`);try{switch(d.action){case"run_evals":await x(o,c,a,s,p);break;case"generate_cases":await k(o,i,a,s,p);break;case"analyze_results":case"propose_changes":await E(o,c,e,r,a,s,p);break;case"respond":await s(d.response,"text");break}}catch(l){let u=l instanceof Error?l.message:String(l);throw await s(`Something went wrong: ${u}`,"text").catch(()=>{}),l}}v(N,"processConversationJob");async function _(n,i,p,a,g){let r=p.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
2
2
  `),o=`You are an eval assistant. Decide what action to take based on the user's message.
3
3
 
4
4
  ## Current State
@@ -1 +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-QAV4HW7D.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};
@@ -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{c}from"./chunk-7FZB65VH.js";import{e as p,g as u}from"./chunk-QAV4HW7D.js";import{a as o}from"./chunk-ZLLER3HP.js";var l="openCandidate";function g(n,i){let t=(n??{})[l];if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t;return typeof e.content!="string"||!e.content||typeof e.hash!="string"||!e.hash||typeof e.priorHash!="string"||e.priorHash!==i?null:{content:e.content,hash:e.hash,priorHash:e.priorHash,plannedPairs:typeof e.plannedPairs=="number"?e.plannedPairs:0,updatedAt:typeof e.updatedAt=="string"?e.updatedAt:""}}o(g,"resolveOpenCandidate");function m(n){let{plannedPairs:i,carriedPairs:t,liveCases:e}=n;if(e<=0)return 0;let a=i-t;return a<=0?0:Math.ceil(a/e)}o(m,"owedPasses");var d=100;async function b(n){let{evalTargetId:i,candidateContentHash:t}=n,e=[];for(let a=0;;a+=d){let r=await p(`/api/eval-targets/${i}/runs?candidateContentHash=${encodeURIComponent(t)}&limit=${d}&offset=${a}`);if(!Array.isArray(r)||r.length===0||(e.push(...r),r.length<d))break}return c(e)}o(b,"fetchCarriedPairs");async function P(n){let{evalTargetId:i,meta:t,blob:e,log:a,tag:r}=n;try{let s={...t};e?s[l]=e:delete s[l],await u(`/api/eval-targets/${i}`,{metadata:s}),a(e?`${r}: banked candidate ${e.hash.slice(0,8)} \u2014 the next run resumes instead of restarting`:`${r}: cleared the banked candidate (this cycle reached a decision)`)}catch(s){a(`${r}: could not update the candidate bank (${s instanceof Error?s.message:String(s)})`)}}o(P,"bankOpenCandidate");function C(n){return{content:n.content,hash:n.hash,priorHash:n.priorHash,plannedPairs:n.plannedPairs,updatedAt:n.now.toISOString()}}o(C,"buildOpenCandidate");export{l as a,g as b,m as c,b as d,P as e,C as f};
@@ -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};