@rulemetric/cli 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/chunk-2UK4DZFW.js +12 -0
  3. package/dist/{chunk-3UPHCQWI.js → chunk-35YVHBLL.js} +1 -1
  4. package/dist/{chunk-VH2EAP4J.js → chunk-3FNTV2TW.js} +1 -1
  5. package/dist/{chunk-WQX4RRBQ.js → chunk-3IMRLHJJ.js} +1 -1
  6. package/dist/chunk-42A4PUW7.js +48 -0
  7. package/dist/chunk-43VKTVM3.js +1 -0
  8. package/dist/{chunk-CYYDQFRY.js → chunk-44TYRMIS.js} +1 -1
  9. package/dist/{chunk-25RDT32M.js → chunk-4FJYVYCU.js} +1 -1
  10. package/dist/{chunk-I3M5VBLT.js → chunk-5BT375C7.js} +1 -1
  11. package/dist/{chunk-7AWFSFR7.js → chunk-5Z3H5JHK.js} +1 -1
  12. package/dist/{chunk-25Q3Y7TC.js → chunk-6ANODRDT.js} +1 -1
  13. package/dist/{chunk-APDRR6FS.js → chunk-76UKAFNM.js} +1 -1
  14. package/dist/{chunk-VXUKXGRX.js → chunk-7MTYUTUN.js} +2 -2
  15. package/dist/{chunk-JWFRI32Y.js → chunk-AGEZAKCC.js} +1 -1
  16. package/dist/chunk-AHLVY52I.js +1 -0
  17. package/dist/{chunk-MNQPCNGQ.js → chunk-AIYFT4P6.js} +1 -1
  18. package/dist/{chunk-UYPBIXF2.js → chunk-B5X6HCBK.js} +1 -1
  19. package/dist/chunk-BAITMD76.js +1 -0
  20. package/dist/{chunk-GJBS6QYC.js → chunk-BFQVAU6N.js} +1 -1
  21. package/dist/{chunk-UE76F2NQ.js → chunk-BMT5WMEV.js} +20 -20
  22. package/dist/chunk-CT6GJQIR.js +1 -0
  23. package/dist/chunk-CT7FWSIU.js +3 -0
  24. package/dist/chunk-DHX4U6EC.js +13 -0
  25. package/dist/chunk-DQYYHX6K.js +1 -0
  26. package/dist/{chunk-WH3IPXXQ.js → chunk-DVU5PHPM.js} +5 -5
  27. package/dist/chunk-E7GQJML3.js +1 -0
  28. package/dist/{chunk-4N43IBXH.js → chunk-EMLLGASZ.js} +1 -1
  29. package/dist/{chunk-Y7QIOPN5.js → chunk-EUHRTEVJ.js} +1 -1
  30. package/dist/chunk-FBSZ6KCM.js +1 -0
  31. package/dist/{chunk-5XK6LB2T.js → chunk-FKTT7A4H.js} +1 -1
  32. package/dist/{chunk-V2USQH27.js → chunk-FYZ6HHCV.js} +1 -1
  33. package/dist/chunk-GH4EZK2O.js +1 -0
  34. package/dist/{chunk-DUBBL57L.js → chunk-GKVHFXUQ.js} +1 -1
  35. package/dist/chunk-GPBN4ROE.js +2 -0
  36. package/dist/chunk-GYNZ3OZF.js +1 -0
  37. package/dist/chunk-H6FVXVGG.js +1 -0
  38. package/dist/{chunk-6GAIYJ6K.js → chunk-HNYHZO2J.js} +1 -1
  39. package/dist/{chunk-RJX75Y7J.js → chunk-I6ZQOMZS.js} +1 -1
  40. package/dist/{chunk-O2HCD6XL.js → chunk-IO46ICZY.js} +1 -1
  41. package/dist/chunk-IQEZ3T5A.js +1 -0
  42. package/dist/{chunk-KV5A77XW.js → chunk-ISFPPDDB.js} +1 -1
  43. package/dist/chunk-J4W6GNCF.js +2 -0
  44. package/dist/chunk-JP6ULOEX.js +2 -0
  45. package/dist/{chunk-J6QMBMC2.js → chunk-JTYVBR5H.js} +1 -1
  46. package/dist/{chunk-BG55WDDX.js → chunk-KOYHJFB3.js} +1 -1
  47. package/dist/chunk-LJRJ2RAC.js +4 -0
  48. package/dist/chunk-MHVHGKDK.js +3 -0
  49. package/dist/{chunk-PVGUDJD7.js → chunk-MMLRWCBW.js} +1 -1
  50. package/dist/chunk-MMM4B3KH.js +1 -0
  51. package/dist/{chunk-ZGW3N3A6.js → chunk-MU7KKU3O.js} +1 -1
  52. package/dist/{chunk-YI2OWO6R.js → chunk-MXHAXY66.js} +1 -1
  53. package/dist/chunk-N4YPDZJF.js +9 -0
  54. package/dist/{chunk-VIQ25ORK.js → chunk-NYNHX7OX.js} +1 -1
  55. package/dist/{chunk-RK663O4M.js → chunk-OP4U3XBZ.js} +6 -6
  56. package/dist/{chunk-6W2GSV4O.js → chunk-OVS7ZDJ4.js} +1 -1
  57. package/dist/chunk-PIVEJTNF.js +1 -0
  58. package/dist/chunk-POEMCITL.js +1 -0
  59. package/dist/chunk-PPAHIVG5.js +1 -0
  60. package/dist/{chunk-NBEZ5FAU.js → chunk-Q36QSFSB.js} +1 -1
  61. package/dist/chunk-Q776YUBD.js +1 -0
  62. package/dist/chunk-QAMHZY2P.js +1 -0
  63. package/dist/chunk-QI3FJKGK.js +1 -0
  64. package/dist/{chunk-WOJ733IB.js → chunk-QRIJ3AHP.js} +1 -1
  65. package/dist/chunk-RAQLVO2X.js +1 -0
  66. package/dist/{chunk-M2VVRQKA.js → chunk-RG3R4EAB.js} +1 -1
  67. package/dist/{chunk-WY3VVX3R.js → chunk-RMRVUI7B.js} +1 -1
  68. package/dist/{chunk-GBWQENAH.js → chunk-RXZLBSDO.js} +1 -1
  69. package/dist/chunk-SCQK52SL.js +1 -0
  70. package/dist/{chunk-BZS5QRWB.js → chunk-SG4UDDHB.js} +1 -1
  71. package/dist/chunk-SWSOEYC7.js +1 -0
  72. package/dist/chunk-T75KAEJO.js +25 -0
  73. package/dist/{chunk-U7TBEC3I.js → chunk-V55ROUNP.js} +1 -1
  74. package/dist/{chunk-SHYP27B7.js → chunk-VALRPZXH.js} +1 -1
  75. package/dist/{chunk-P2WSDHIA.js → chunk-VIFOLTZT.js} +1 -1
  76. package/dist/{chunk-6QLZT7EP.js → chunk-VU24IH5S.js} +1 -1
  77. package/dist/{chunk-6ZPSVZNH.js → chunk-VXL5H3VZ.js} +1 -1
  78. package/dist/{chunk-QFKUSNUB.js → chunk-W23OYQXI.js} +1 -1
  79. package/dist/{chunk-QTCWOIT4.js → chunk-WWQWHC4K.js} +1 -1
  80. package/dist/{chunk-LTQ5BJYL.js → chunk-XGMOVQ5G.js} +1 -1
  81. package/dist/{chunk-4COLIGD7.js → chunk-XJ25HFIT.js} +1 -1
  82. package/dist/{chunk-3MDEGOUG.js → chunk-XMA6SWOT.js} +1 -1
  83. package/dist/{chunk-WJZY5Y22.js → chunk-XMTKP74H.js} +1 -1
  84. package/dist/chunk-XQYAVSUQ.js +1 -0
  85. package/dist/{chunk-2EX27VJ3.js → chunk-YK2IEHLB.js} +1 -1
  86. package/dist/chunk-ZK3ACE4T.js +1 -0
  87. package/dist/commands/antigravity/backfill.js +1 -1
  88. package/dist/commands/auth/create-key.js +1 -1
  89. package/dist/commands/auth/login.js +1 -1
  90. package/dist/commands/auth/logout.js +1 -1
  91. package/dist/commands/auth/revoke-key.js +1 -1
  92. package/dist/commands/auth/signup.js +1 -1
  93. package/dist/commands/auth/status.js +1 -1
  94. package/dist/commands/capture/scope.js +1 -1
  95. package/dist/commands/catalog/index.js +1 -1
  96. package/dist/commands/catalog/recommend.js +1 -1
  97. package/dist/commands/crons/list.js +1 -1
  98. package/dist/commands/crons/run.js +2 -2
  99. package/dist/commands/dashboard.js +1 -1
  100. package/dist/commands/diagnostics.js +1 -1
  101. package/dist/commands/eval-targets/create.js +1 -1
  102. package/dist/commands/eval-targets/list.js +1 -1
  103. package/dist/commands/evals/agent.js +3 -3
  104. package/dist/commands/evals/auto-run.js +1 -1
  105. package/dist/commands/evals/benchmark.js +1 -1
  106. package/dist/commands/evals/compare.js +1 -1
  107. package/dist/commands/evals/create.js +1 -1
  108. package/dist/commands/evals/optimize-description.js +1 -1
  109. package/dist/commands/evals/optimize.js +1 -1
  110. package/dist/commands/evals/refine-cases.js +1 -1
  111. package/dist/commands/evals/run.js +1 -1
  112. package/dist/commands/evals/validate-judge.js +1 -1
  113. package/dist/commands/experiments/list.js +1 -1
  114. package/dist/commands/gateway/ensure.js +1 -1
  115. package/dist/commands/hooks/emit-instructions.js +1 -1
  116. package/dist/commands/hooks/install.js +1 -1
  117. package/dist/commands/hooks/run.js +1 -1
  118. package/dist/commands/hooks/uninstall.js +1 -1
  119. package/dist/commands/instructions/create.js +1 -1
  120. package/dist/commands/instructions/dedupe.js +1 -1
  121. package/dist/commands/instructions/delete.js +1 -1
  122. package/dist/commands/instructions/fork.js +1 -1
  123. package/dist/commands/instructions/get.js +1 -1
  124. package/dist/commands/instructions/list.js +1 -1
  125. package/dist/commands/instructions/promote.js +1 -1
  126. package/dist/commands/instructions/pull.js +1 -1
  127. package/dist/commands/instructions/restore.js +1 -1
  128. package/dist/commands/instructions/retract.js +1 -1
  129. package/dist/commands/instructions/upstream.js +1 -1
  130. package/dist/commands/instructions/versions.js +1 -1
  131. package/dist/commands/launcher.js +1 -1
  132. package/dist/commands/local/down.js +1 -1
  133. package/dist/commands/local/up.js +1 -1
  134. package/dist/commands/org/current.js +1 -1
  135. package/dist/commands/org/list.js +1 -1
  136. package/dist/commands/org/switch.js +1 -1
  137. package/dist/commands/packs/add-instruction.js +1 -1
  138. package/dist/commands/packs/apply.js +1 -1
  139. package/dist/commands/packs/create.js +1 -1
  140. package/dist/commands/packs/fork.js +1 -1
  141. package/dist/commands/packs/get.js +1 -1
  142. package/dist/commands/packs/list.js +1 -1
  143. package/dist/commands/packs/remove-instruction.js +1 -1
  144. package/dist/commands/proxy/env.js +1 -1
  145. package/dist/commands/proxy/logs.js +1 -1
  146. package/dist/commands/proxy/restart.js +1 -1
  147. package/dist/commands/proxy/setup.js +1 -1
  148. package/dist/commands/proxy/start.js +1 -1
  149. package/dist/commands/proxy/status.js +1 -1
  150. package/dist/commands/proxy/stop.js +1 -1
  151. package/dist/commands/research/backfill.js +1 -1
  152. package/dist/commands/research/tail-transcript.js +1 -1
  153. package/dist/commands/service/install.js +18 -18
  154. package/dist/commands/service/status.js +1 -1
  155. package/dist/commands/service/uninstall.js +1 -1
  156. package/dist/commands/sessions/analyze.js +1 -1
  157. package/dist/commands/sessions/delete.js +1 -1
  158. package/dist/commands/sessions/end.js +1 -1
  159. package/dist/commands/sessions/import.js +1 -1
  160. package/dist/commands/sessions/list.js +1 -1
  161. package/dist/commands/sessions/start.js +1 -1
  162. package/dist/commands/setup.js +1 -1
  163. package/dist/commands/skills/export-approved.js +1 -1
  164. package/dist/commands/skills/install.js +1 -1
  165. package/dist/commands/skills/list.js +1 -1
  166. package/dist/commands/skills/publish.js +1 -1
  167. package/dist/commands/skills/search.js +1 -1
  168. package/dist/commands/skills/update.js +1 -1
  169. package/dist/commands/suggestions/accept.js +1 -1
  170. package/dist/commands/suggestions/auto.js +1 -1
  171. package/dist/commands/suggestions/dismiss.js +1 -1
  172. package/dist/commands/suggestions/list.js +1 -1
  173. package/dist/commands/suggestions/refresh.js +1 -1
  174. package/dist/commands/suggestions/undo.js +1 -1
  175. package/dist/dashboard/Dashboard.js +1 -1
  176. package/dist/dashboard/data.js +1 -1
  177. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  178. package/dist/dashboard/launcher/api.js +1 -1
  179. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  180. package/dist/dashboard/panels/measurement.js +1 -0
  181. package/dist/dist-GSHUC7UU.js +1 -0
  182. package/dist/harbor/cost_delta.py +377 -0
  183. package/dist/harbor/mcp_container_shell.py +156 -0
  184. package/dist/harbor/provenance.py +361 -0
  185. package/dist/harbor/rm-batch-task/environment/Dockerfile +6 -0
  186. package/dist/harbor/rm-batch-task/environment/items.jsonl +60 -0
  187. package/dist/harbor/rm-batch-task/inject.md +8 -0
  188. package/dist/harbor/rm-batch-task/instruction.md +8 -0
  189. package/dist/harbor/rm-batch-task/solution/solve.sh +68 -0
  190. package/dist/harbor/rm-batch-task/task.toml +30 -0
  191. package/dist/harbor/rm-batch-task/tests/test.sh +23 -0
  192. package/dist/harbor/rm-batch-task/tests/test_outputs.py +32 -0
  193. package/dist/harbor/rm-locality-task/environment/Dockerfile +8 -0
  194. package/dist/harbor/rm-locality-task/environment/workspace/deploy/prod/ingest.yaml +3 -0
  195. package/dist/harbor/rm-locality-task/environment/workspace/deploy/staging/ingest.yaml +3 -0
  196. package/dist/harbor/rm-locality-task/environment/workspace/docs/architecture/ingest.md +6 -0
  197. package/dist/harbor/rm-locality-task/environment/workspace/legacy/ingest_v1/config.yaml +2 -0
  198. package/dist/harbor/rm-locality-task/environment/workspace/packages/shared/defaults.py +4 -0
  199. package/dist/harbor/rm-locality-task/environment/workspace/services/ingest/config/limits.defaults.yaml +4 -0
  200. package/dist/harbor/rm-locality-task/environment/workspace/services/ingest/config/limits.yaml +3 -0
  201. package/dist/harbor/rm-locality-task/environment/workspace/services/ingest/loader.py +15 -0
  202. package/dist/harbor/rm-locality-task/environment/workspace/tests/fixtures/ingest_config.yaml +3 -0
  203. package/dist/harbor/rm-locality-task/inject.md +12 -0
  204. package/dist/harbor/rm-locality-task/instruction.md +4 -0
  205. package/dist/harbor/rm-locality-task/solution/solve.sh +14 -0
  206. package/dist/harbor/rm-locality-task/task.toml +30 -0
  207. package/dist/harbor/rm-locality-task/tests/test.sh +23 -0
  208. package/dist/harbor/rm-locality-task/tests/test_outputs.py +19 -0
  209. package/dist/harbor/rm-migrations-task/environment/Dockerfile +7 -0
  210. package/dist/harbor/rm-migrations-task/environment/applied.txt +2 -0
  211. package/dist/harbor/rm-migrations-task/environment/migrations/00001_init.sql +1 -0
  212. package/dist/harbor/rm-migrations-task/environment/migrations/00002_add_email.sql +1 -0
  213. package/dist/harbor/rm-migrations-task/inject.md +7 -0
  214. package/dist/harbor/rm-migrations-task/instruction.md +8 -0
  215. package/dist/harbor/rm-migrations-task/solution/solve.sh +8 -0
  216. package/dist/harbor/rm-migrations-task/task.toml +30 -0
  217. package/dist/harbor/rm-migrations-task/tests/test.sh +23 -0
  218. package/dist/harbor/rm-migrations-task/tests/test_outputs.py +36 -0
  219. package/dist/harbor/rm-pagination-task/environment/Dockerfile +6 -0
  220. package/dist/harbor/rm-pagination-task/environment/store.py +29 -0
  221. package/dist/harbor/rm-pagination-task/inject.md +8 -0
  222. package/dist/harbor/rm-pagination-task/instruction.md +5 -0
  223. package/dist/harbor/rm-pagination-task/solution/solve.sh +7 -0
  224. package/dist/harbor/rm-pagination-task/task.toml +30 -0
  225. package/dist/harbor/rm-pagination-task/tests/test.sh +23 -0
  226. package/dist/harbor/rm-pagination-task/tests/test_outputs.py +14 -0
  227. package/dist/harbor/rm_host_claude.py +264 -0
  228. package/dist/harbor/rm_host_codex.py +208 -0
  229. package/dist/harbor/run.sh +268 -0
  230. package/dist/harbor/summarize.py +248 -0
  231. package/dist/lib/active-org-refresh.js +1 -1
  232. package/dist/lib/agent-loop.js +1 -1
  233. package/dist/lib/antigravity-transcript.js +1 -1
  234. package/dist/lib/api-client.js +1 -1
  235. package/dist/lib/autorun-batch.js +1 -0
  236. package/dist/lib/capture-scope-config.js +1 -1
  237. package/dist/lib/codex-capture-scope.js +1 -1
  238. package/dist/lib/codex-exec.js +1 -1
  239. package/dist/lib/ensure-api-key.js +1 -1
  240. package/dist/lib/ensure-fresh-token.js +1 -1
  241. package/dist/lib/eval-accumulation.js +1 -0
  242. package/dist/lib/eval-analyzer.js +1 -1
  243. package/dist/lib/eval-benchmark.js +1 -1
  244. package/dist/lib/eval-candidate-run.js +1 -1
  245. package/dist/lib/eval-case-generator.js +1 -1
  246. package/dist/lib/eval-conversation-handler.js +1 -1
  247. package/dist/lib/eval-executor.js +1 -1
  248. package/dist/lib/eval-grader.js +1 -1
  249. package/dist/lib/eval-meta-judge.js +1 -1
  250. package/dist/lib/eval-resume.js +1 -1
  251. package/dist/lib/eval-run-batch.js +1 -1
  252. package/dist/lib/eval-trigger-tester.js +1 -1
  253. package/dist/lib/evolution-enrolment.js +1 -1
  254. package/dist/lib/harbor-readiness.js +1 -1
  255. package/dist/lib/hooks-capture-gate.js +1 -1
  256. package/dist/lib/insights/generation/installed-asks.js +1 -1
  257. package/dist/lib/insights/nomination/nominate.js +1 -1
  258. package/dist/lib/instruction-proposer.js +1 -1
  259. package/dist/lib/instruction-snapshot.js +1 -1
  260. package/dist/lib/instructions/acceptance/accept-events.js +1 -1
  261. package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
  262. package/dist/lib/instructions/acceptance/agent-instruction-files.js +1 -1
  263. package/dist/lib/instructions/acceptance/hook-install.js +1 -1
  264. package/dist/lib/instructions/acceptance/reverse-applications.js +1 -1
  265. package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
  266. package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
  267. package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -1
  268. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -1
  269. package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -1
  270. package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
  271. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  272. package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -1
  273. package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -1
  274. package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -1
  275. package/dist/lib/jobs/handlers/distill-memories.js +1 -1
  276. package/dist/lib/jobs/handlers/harbor-ab-verdict.js +1 -1
  277. package/dist/lib/jobs/handlers/harbor-ab.js +1 -1
  278. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  279. package/dist/lib/jobs/handlers/process-conversation.js +1 -1
  280. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  281. package/dist/lib/jobs/handlers/process-insights.js +1 -1
  282. package/dist/lib/jobs/handlers/process-judge-review.js +1 -1
  283. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  284. package/dist/lib/jobs/handlers/process-memory-ab.js +1 -1
  285. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  286. package/dist/lib/jobs/handlers/process-session-goal.js +1 -1
  287. package/dist/lib/jobs/shed-retry.js +1 -1
  288. package/dist/lib/judge-review-runner.js +1 -1
  289. package/dist/lib/llm-client.js +1 -1
  290. package/dist/lib/llm-reply-parsers.js +1 -0
  291. package/dist/lib/manual-tasks.js +1 -1
  292. package/dist/lib/measurement-llm.js +1 -0
  293. package/dist/lib/pi-exec.js +1 -0
  294. package/dist/lib/projects/workspace/eval-workspace.js +1 -1
  295. package/dist/lib/projects/workspace/worktree.js +1 -1
  296. package/dist/lib/refine-cases.js +1 -1
  297. package/dist/lib/research-client.js +1 -1
  298. package/dist/lib/retraction.js +1 -1
  299. package/dist/lib/reviewer-detect.js +1 -1
  300. package/dist/lib/service-environment.js +1 -0
  301. package/dist/lib/setup-steps.js +1 -1
  302. package/dist/lib/telemetry.js +1 -1
  303. package/dist/lib/terminal-target-heartbeat.js +1 -1
  304. package/dist/lib/tool-cli-map.js +1 -0
  305. package/dist/lib/transcript-instruction-linking.js +1 -1
  306. package/dist/lib/transcript-sync.js +1 -1
  307. package/dist/lib/work-report.js +1 -1
  308. package/oclif.manifest.json +7 -1
  309. package/package.json +5 -4
  310. package/dist/chunk-4FSQSETR.js +0 -12
  311. package/dist/chunk-6WQG6C7F.js +0 -1
  312. package/dist/chunk-C42NTI2V.js +0 -3
  313. package/dist/chunk-F6DAHCJC.js +0 -20
  314. package/dist/chunk-GN3ZHQ46.js +0 -1
  315. package/dist/chunk-H3BCWSYO.js +0 -1
  316. package/dist/chunk-HLNHBZLI.js +0 -1
  317. package/dist/chunk-HLQZR4XJ.js +0 -13
  318. package/dist/chunk-J5HW45PZ.js +0 -48
  319. package/dist/chunk-JNFB22FD.js +0 -1
  320. package/dist/chunk-KCOJLTVX.js +0 -1
  321. package/dist/chunk-MLV2RHRE.js +0 -1
  322. package/dist/chunk-N7GK33PU.js +0 -1
  323. package/dist/chunk-NRYLYMDM.js +0 -1
  324. package/dist/chunk-OZNKMJ5B.js +0 -1
  325. package/dist/chunk-PPXOC7IV.js +0 -1
  326. package/dist/chunk-QXPYGN7I.js +0 -1
  327. package/dist/chunk-R4QIPG4V.js +0 -2
  328. package/dist/chunk-RGUCR7T6.js +0 -1
  329. package/dist/chunk-RO3ZZVCG.js +0 -1
  330. package/dist/chunk-SBGXIPRN.js +0 -2
  331. package/dist/chunk-SN3CHV66.js +0 -1
  332. package/dist/chunk-U3XKXJ3A.js +0 -5
  333. package/dist/chunk-UM4CBCXI.js +0 -1
  334. package/dist/chunk-WHQ4BDSM.js +0 -4
  335. package/dist/dist-45KJH5M7.js +0 -1
@@ -0,0 +1 @@
1
+ import{a as m,c as gs}from"./chunk-ZLLER3HP.js";import{boolean as en,date as vs,index as Vt,integer as Is,jsonb as ys,pgTable as Ft,text as D,timestamp as B,uniqueIndex as ws,uuid as ce}from"drizzle-orm/pg-core";var tn=Ft("announcements",{id:ce("id").primaryKey().defaultRandom(),version:D("version").notNull().unique(),releaseDate:vs("release_date").notNull(),subject:D("subject").notNull(),htmlBody:D("html_body").notNull(),textBody:D("text_body").notNull(),sections:ys("sections").notNull().default({}),status:D("status").notNull().default("draft"),recipientCount:Is("recipient_count"),sentAt:B("sent_at",{withTimezone:!0}),sentBy:ce("sent_by"),error:D("error"),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:B("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Vt("idx_announcements_status").on(e.status),Vt("idx_announcements_created").on(e.createdAt)]),on=Ft("announcement_deliveries",{id:ce("id").primaryKey().defaultRandom(),announcementId:ce("announcement_id").notNull(),userId:ce("user_id").notNull(),email:D("email").notNull(),status:D("status").notNull().default("pending"),providerId:D("provider_id"),error:D("error"),sentAt:B("sent_at",{withTimezone:!0}),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ws("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Vt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),nn=Ft("notification_preferences",{userId:ce("user_id").primaryKey(),productAnnouncements:en("product_announcements").notNull().default(!0),weeklyDigest:en("weekly_digest").notNull().default(!0),unsubscribeToken:D("unsubscribe_token").notNull().unique(),unsubscribedAt:B("unsubscribed_at",{withTimezone:!0}),createdAt:B("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:B("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{boolean as at,integer as Pe,jsonb as Ts,pgTable as As,real as an,text as Ke,timestamp as $t,uuid as dn}from"drizzle-orm/pg-core";import{pgTable as it,text as _e,timestamp as be,jsonb as rn,uuid as te,primaryKey as sn}from"drizzle-orm/pg-core";var l=it("organizations",{id:te("id").primaryKey().defaultRandom(),name:_e("name").unique().notNull(),slug:_e("slug").unique().notNull(),metadata:rn("metadata"),createdAt:be("created_at",{withTimezone:!0}).defaultNow(),updatedAt:be("updated_at",{withTimezone:!0}).defaultNow()}),v=it("teams",{id:te("id").primaryKey().defaultRandom(),orgId:te("org_id").references(()=>l.id,{onDelete:"cascade"}),name:_e("name").notNull(),slug:_e("slug").notNull(),metadata:rn("metadata"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()}),pe=it("user_organizations",{userId:te("user_id").notNull(),orgId:te("org_id").references(()=>l.id,{onDelete:"cascade"}).notNull(),role:_e("role").notNull().default("member"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()},e=>[sn({columns:[e.userId,e.orgId]})]),me=it("user_teams",{userId:te("user_id").notNull(),teamId:te("team_id").references(()=>v.id,{onDelete:"cascade"}).notNull(),role:_e("role").notNull().default("member"),createdAt:be("created_at",{withTimezone:!0}).defaultNow()},e=>[sn({columns:[e.userId,e.teamId]})]);var o=As("profiles",{id:dn("id").primaryKey(),email:Ke("email"),measurementPreferences:Ts("measurement_preferences"),displayName:Ke("display_name"),activeOrgId:dn("active_org_id").references(()=>l.id,{onDelete:"set null"}),isSuperadmin:at("is_superadmin").notNull().default(!1),claudeCodePlan:Ke("claude_code_plan"),planSource:Ke("plan_source").notNull().default("detected"),setupCompletedAt:$t("setup_completed_at",{withTimezone:!0}),liveSendSkipped:at("live_send_skipped").notNull().default(!1),autoAcceptSuggestions:at("auto_accept_suggestions").notNull().default(!0),evolutionPaused:at("evolution_paused").notNull().default(!1),suggestionConfidenceThreshold:an("suggestion_confidence_threshold").notNull().default(.7),autoAcceptMinScore:an("auto_accept_min_score"),autoAcceptMaxPerRun:Pe("auto_accept_max_per_run"),autoAcceptMaxPerWindow:Pe("auto_accept_max_per_window"),autoAcceptWindowDays:Pe("auto_accept_window_days"),trialMaxConcurrent:Pe("trial_max_concurrent"),trialMaxPerRun:Pe("trial_max_per_run"),harborAbCadence:Ke("harbor_ab_cadence").notNull().default("off"),createdAt:$t("created_at",{withTimezone:!0}).defaultNow(),updatedAt:$t("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ds,text as Jt,timestamp as dt,uuid as ut,index as un}from"drizzle-orm/pg-core";var b=Ds("org_invitations",{id:ut("id").primaryKey().defaultRandom(),orgId:ut("org_id").notNull().references(()=>l.id,{onDelete:"cascade"}),email:Jt("email").notNull(),role:Jt("role").notNull().default("member"),teamId:ut("team_id").references(()=>v.id,{onDelete:"set null"}),invitedBy:ut("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:Jt("token").notNull().unique(),expiresAt:dt("expires_at",{withTimezone:!0}).notNull(),acceptedAt:dt("accepted_at",{withTimezone:!0}),revokedAt:dt("revoked_at",{withTimezone:!0}),createdAt:dt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[un("idx_org_invitations_token").on(e.token),un("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Qt,text as N,timestamp as G,jsonb as lt,uuid as z,integer as ct,boolean as js,uniqueIndex as _t,index as Ce}from"drizzle-orm/pg-core";var n=Qt("instructions",{id:z("id").primaryKey().defaultRandom(),name:N("name").notNull(),description:N("description").notNull(),type:N("type").notNull().default("instruction"),scope:N("scope").notNull(),scopeRef:z("scope_ref"),version:N("version").notNull(),content:N("content").notNull(),frontmatter:lt("frontmatter").notNull(),slots:lt("slots"),tags:N("tags").array(),compatibility:N("compatibility").array(),createdBy:z("created_by"),createdAt:G("created_at",{withTimezone:!0}).defaultNow(),updatedAt:G("updated_at",{withTimezone:!0}).defaultNow(),archived:js("archived").default(!1),archivedAt:G("archived_at",{withTimezone:!0}),archivedBy:z("archived_by"),forkedFromId:z("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:N("upstream_version"),badge:N("badge"),contentHash:N("content_hash"),contextIdentity:N("context_identity"),scanScore:ct("scan_score"),scanFindings:lt("scan_findings"),popularityScore:ct("popularity_score"),sourceUpdatedAt:G("source_updated_at",{withTimezone:!0})},e=>[_t("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ce("idx_instructions_scope").on(e.scope,e.scopeRef),Ce("idx_instructions_created_by").on(e.createdBy),Ce("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ce("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),ln=Qt("instruction_version_identities",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:N("content_hash").notNull(),versionOrdinal:ct("version_ordinal").notNull(),content:N("content"),firstSeenAt:G("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:G("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:G("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[_t("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),_t("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),Ce("idx_ivi_instruction").on(e.instructionId)]),fe=Qt("instruction_versions",{id:z("id").primaryKey().defaultRandom(),instructionId:z("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:ct("version_number").notNull(),content:N("content").notNull(),frontmatter:lt("frontmatter").notNull(),changeSummary:N("change_summary"),createdBy:z("created_by"),createdAt:G("created_at",{withTimezone:!0}).defaultNow()},e=>[_t("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);import{pgTable as zs,text as Rs,timestamp as ks,jsonb as Es,uuid as Yt,index as cn}from"drizzle-orm/pg-core";var Ne=zs("instruction_events",{id:Yt("id").primaryKey().defaultRandom(),instructionId:Yt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:Rs("event_type").notNull(),actorId:Yt("actor_id").notNull(),metadata:Es("metadata"),createdAt:ks("created_at",{withTimezone:!0}).defaultNow()},e=>[cn("idx_instruction_events_instruction").on(e.instructionId),cn("idx_instruction_events_type").on(e.eventType)]);import{boolean as Ss,jsonb as bs,pgTable as Xt,primaryKey as _n,text as oe,timestamp as Oe,uniqueIndex as Wt,uuid as ne}from"drizzle-orm/pg-core";import{sql as Ps}from"drizzle-orm";var r=Xt("projects",{id:ne("id").primaryKey().defaultRandom(),orgId:ne("org_id").references(()=>l.id,{onDelete:"cascade"}),name:oe("name").notNull(),description:oe("description"),githubRepo:oe("github_repo"),gitRemoteUrl:oe("git_remote_url"),gitRootCommit:oe("git_root_commit"),gitRemoteAliases:oe("git_remote_aliases").array().notNull().default([]),metadata:bs("metadata"),createdBy:ne("created_by"),createdAt:Oe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Oe("updated_at",{withTimezone:!0}).defaultNow()},e=>[Wt("projects_org_name_idx").on(e.orgId,e.name),Wt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Ps`${e.gitRemoteUrl} IS NOT NULL`)]),V=Xt("project_instructions",{projectId:ne("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:ne("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Oe("added_at",{withTimezone:!0}).defaultNow(),addedBy:ne("added_by")},e=>[_n({columns:[e.projectId,e.instructionId]})]),pn=Xt("project_checkouts",{projectId:ne("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:oe("path").notNull(),isWorktree:Ss("is_worktree").notNull().default(!1),firstSeen:Oe("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Oe("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[_n({columns:[e.projectId,e.path]}),Wt("project_checkouts_path_unique").on(e.path)]);import{pgTable as to,text as I,timestamp as qe,jsonb as re,uuid as P,integer as mt,uniqueIndex as fn,index as R}from"drizzle-orm/pg-core";import{pgTable as Ks,text as xe,timestamp as Zt,jsonb as mn,uuid as pt,integer as Cs,boolean as Os,index as eo}from"drizzle-orm/pg-core";var h=Ks("agent_runs",{id:pt("id").primaryKey().defaultRandom(),userId:pt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:pt("org_id").references(()=>l.id,{onDelete:"set null"}),projectId:pt("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:xe("project_path"),gitRemote:xe("git_remote"),baseBranch:xe("base_branch"),title:xe("title"),prompt:xe("prompt"),toolSpec:mn("tool_spec").notNull().default([]),autoWorktree:Os("auto_worktree").notNull().default(!0),status:xe("status").notNull().default("pending"),sessionCount:Cs("session_count").notNull().default(0),metadata:mn("metadata").notNull().default({}),createdAt:Zt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Zt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Zt("completed_at",{withTimezone:!0})},e=>[eo("idx_agent_runs_user").on(e.userId),eo("idx_agent_runs_org_created").on(e.orgId,e.createdAt),eo("idx_agent_runs_project").on(e.projectId)]);var i=to("sessions",{id:P("id").primaryKey().defaultRandom(),userId:P("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:P("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:P("org_id").references(()=>l.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:qe("started_at",{withTimezone:!0}).notNull(),endedAt:qe("ended_at",{withTimezone:!0}),eventCount:mt("event_count").default(0),tokenUsage:re("token_usage"),analysis:re("analysis"),analyzedAt:qe("analyzed_at",{withTimezone:!0}),analyzedEventCount:mt("analyzed_event_count"),analyzedTurnCount:mt("analyzed_turn_count"),metadata:re("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:P("run_id").references(()=>h.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:qe("created_at",{withTimezone:!0}).defaultNow()},e=>[R("idx_sessions_user").on(e.userId),R("idx_sessions_tool").on(e.tool),R("idx_sessions_started_at").on(e.startedAt),R("idx_sessions_project").on(e.projectId),R("idx_sessions_org_started_at").on(e.orgId,e.startedAt),R("idx_sessions_run").on(e.runId),fn("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),he=to("session_events",{id:P("id").primaryKey().defaultRandom(),sessionId:P("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),sequence:mt("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:re("tool_input"),toolOutput:re("tool_output"),tokenUsage:re("token_usage"),model:I("model"),timestamp:qe("timestamp",{withTimezone:!0}).notNull(),metadata:re("metadata").default({})},e=>[fn("session_events_session_sequence_idx").on(e.sessionId,e.sequence),R("idx_session_events_session_id").on(e.sessionId),R("idx_session_events_event_type").on(e.eventType),R("idx_session_events_model").on(e.model)]),F=to("session_instructions",{sessionId:P("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),instructionId:P("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:I("link_method").notNull(),contentHash:I("content_hash")},e=>[R("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as Nn,text as ft,timestamp as xn,uuid as k,integer as hn,index as ge,unique as qs}from"drizzle-orm/pg-core";var K=Nn("treatment_assignments",{id:k("id").primaryKey().defaultRandom(),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ft("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:hn("treatment_version").notNull().default(1),projectId:k("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:k("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:ft("method").notNull(),assignedAt:xn("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ge("idx_treatment_assignments_user").on(e.userId),ge("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),ge("idx_treatment_assignments_project").on(e.projectId)]),C=Nn("treatment_exposures",{id:k("id").primaryKey().defaultRandom(),sessionId:k("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),userId:k("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ft("treatment_type").notNull(),treatmentId:k("treatment_id").notNull(),treatmentVersion:hn("treatment_version").notNull().default(1),assignmentId:k("assignment_id").references(()=>K.id,{onDelete:"set null"}),method:ft("method").notNull(),exposedAt:xn("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[qs("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),ge("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),ge("idx_treatment_exposures_user").on(e.userId),ge("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Ms,text as oo,timestamp as Hs,uuid as Nt,integer as Ls,index as gn,uniqueIndex as Us}from"drizzle-orm/pg-core";var vn=Ms("pending_treatment_exposures",{id:Nt("id").primaryKey().defaultRandom(),userId:Nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:oo("external_session_id").notNull(),treatmentType:oo("treatment_type").notNull(),treatmentId:Nt("treatment_id").notNull(),treatmentVersion:Ls("treatment_version").notNull().default(1),method:oo("method").notNull().default("injected"),projectId:Nt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:Hs("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Us("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),gn("idx_pending_treatment_exposures_ext").on(e.externalSessionId),gn("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as In,text as $,timestamp as yn,uuid as ve,numeric as Bs,index as no,unique as Gs}from"drizzle-orm/pg-core";var Me=In("instruction_experiments",{id:ve("id").primaryKey().defaultRandom(),userId:ve("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:ve("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:$("project_path").notNull(),status:$("status").notNull().default("running"),treatedShare:Bs("treated_share").notNull().default("0.5"),salt:$("salt").notNull(),contentHash:$("content_hash"),source:$("source").notNull().default("manual"),stoppedReason:$("stopped_reason"),createdAt:yn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[no("idx_instruction_experiments_lookup").on(e.userId,e.projectPath)]),wn=In("instruction_experiment_arms",{id:ve("id").primaryKey().defaultRandom(),experimentId:ve("experiment_id").notNull().references(()=>Me.id,{onDelete:"cascade"}),userId:ve("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:$("external_session_id").notNull(),arm:$("arm").notNull(),assignedAt:yn("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Gs("instruction_experiment_arms_unique").on(e.experimentId,e.externalSessionId),no("idx_instruction_experiment_arms_experiment").on(e.experimentId,e.arm),no("idx_instruction_experiment_arms_session").on(e.externalSessionId)]);import{pgTable as Vs,text as ro,timestamp as Fs,uuid as xt,numeric as so,integer as Tn,jsonb as $s,index as Js,unique as Qs}from"drizzle-orm/pg-core";var An=Vs("instruction_verdicts",{id:xt("id").primaryKey().defaultRandom(),userId:xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:xt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),contentHash:ro("content_hash").notNull(),projectPath:ro("project_path").notNull(),segment:$s("segment").notNull().default({}),decision:ro("decision").notNull(),delta:so("delta").notNull(),ciLower:so("ci_lower").notNull(),ciUpper:so("ci_upper").notNull(),nTreated:Tn("n_treated").notNull(),nControl:Tn("n_control").notNull(),experimentId:xt("experiment_id").references(()=>Me.id,{onDelete:"set null"}),decidedAt:Fs("decided_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Qs("instruction_verdicts_unique").on(e.instructionId,e.contentHash,e.projectPath),Js("idx_instruction_verdicts_render").on(e.userId,e.projectPath)]);import{pgTable as Ys,text as ht,timestamp as io,uuid as ao,integer as Ws,unique as Xs,index as Zs}from"drizzle-orm/pg-core";var Dn=Ys("insight_recommendation_log",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),projectPath:ht("project_path").notNull().default(""),category:ht("category").notNull(),contentHash:ht("content_hash").notNull(),label:ht("label").notNull().default(""),firstSeenAt:io("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:io("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),timesGenerated:Ws("times_generated").notNull().default(1),lastJobId:ao("last_job_id"),dismissedAt:io("dismissed_at",{withTimezone:!0})},e=>[Xs("insight_recommendation_log_unique").on(e.userId,e.projectPath,e.contentHash),Zs("idx_insight_recommendation_log_read").on(e.userId,e.projectPath)]);import{pgTable as ei,text as Ie,timestamp as uo,uuid as He,integer as jn,index as gt}from"drizzle-orm/pg-core";var w=ei("memories",{id:He("id").primaryKey().defaultRandom(),userId:He("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:He("org_id"),projectId:He("project_id").references(()=>r.id,{onDelete:"set null"}),version:jn("version").notNull().default(1),parentId:He("parent_id").references(()=>w.id,{onDelete:"set null"}),kind:Ie("kind").notNull(),title:Ie("title").notNull(),body:Ie("body").notNull(),source:Ie("source").notNull(),status:Ie("status").notNull().default("active"),trustClass:Ie("trust_class"),trustVersion:jn("trust_version"),trustComputedAt:uo("trust_computed_at",{withTimezone:!0}),createdAt:uo("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:uo("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[gt("idx_memories_user").on(e.userId),gt("idx_memories_project").on(e.projectId),gt("idx_memories_parent").on(e.parentId),gt("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as ti,text as se,timestamp as lo,uuid as co,integer as zn,jsonb as oi,index as Rn}from"drizzle-orm/pg-core";var kn=ti("memory_experiments",{id:co("id").primaryKey().defaultRandom(),memoryId:co("memory_id").notNull().references(()=>w.id,{onDelete:"cascade"}),userId:co("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:zn("memory_version").notNull().default(1),memoryBody:se("memory_body"),taskPrompt:se("task_prompt").notNull(),expectations:se("expectations").array().notNull().default([]),trials:zn("trials").notNull().default(10),model:se("model"),engine:se("engine").$type().notNull().default("claude"),status:se("status").notNull().default("pending"),result:oi("result").$type(),error:se("error"),createdAt:lo("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:lo("started_at",{withTimezone:!0}),completedAt:lo("completed_at",{withTimezone:!0})},e=>[Rn("idx_memory_experiments_memory").on(e.memoryId),Rn("idx_memory_experiments_user").on(e.userId)]);import{pgTable as ni,text as ye,timestamp as _o,uuid as po,jsonb as ri,uniqueIndex as si,index as En}from"drizzle-orm/pg-core";var vt=ni("session_terminal_targets",{id:po("id").primaryKey().defaultRandom(),userId:po("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:po("session_id").references(()=>i.id,{onDelete:"set null"}),externalSessionId:ye("external_session_id"),kind:ye("kind").notNull(),target:ye("target").notNull(),status:ye("status").notNull().default("active"),attachCommand:ye("attach_command").notNull(),projectPath:ye("project_path"),metadata:ri("metadata").notNull().default({}),lastSeenAt:_o("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:_o("created_at",{withTimezone:!0}).defaultNow(),updatedAt:_o("updated_at",{withTimezone:!0}).defaultNow()},e=>[si("idx_session_terminal_targets_user_target").on(e.userId,e.target),En("idx_session_terminal_targets_session").on(e.sessionId),En("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as ii,index as It,jsonb as Sn,pgTable as ai,text as ie,timestamp as Le,uuid as yt,integer as mo}from"drizzle-orm/pg-core";var bn=ai("session_send_jobs",{id:yt("id").primaryKey().defaultRandom(),userId:yt("user_id").notNull(),sessionId:yt("session_id").notNull().references(()=>i.id,{onDelete:"cascade"}),terminalTargetId:yt("terminal_target_id").references(()=>vt.id,{onDelete:"set null"}),target:ie("target").notNull(),message:ie("message").notNull(),submit:ii("submit").notNull().default(!0),delivery:ie("delivery").notNull().default("live"),status:ie("status").notNull().default("pending"),result:Sn("result"),error:ie("error"),attempts:mo("attempts").notNull().default(0),taskKind:ie("task_kind"),payload:Sn("payload"),claimedBy:ie("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),leaseRecoveries:mo("lease_recoveries").notNull().default(0),hostSuspendRecoveries:mo("host_suspend_recoveries").notNull().default(0),createdAt:Le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Le("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Le("completed_at",{withTimezone:!0})},e=>[It("idx_session_send_jobs_user").on(e.userId),It("idx_session_send_jobs_session").on(e.sessionId),It("idx_session_send_jobs_status").on(e.status),It("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Kn,text as ae,timestamp as wt,jsonb as Cn,uuid as J,integer as di,boolean as ui,uniqueIndex as li,index as Pn,primaryKey as ci}from"drizzle-orm/pg-core";var j=Kn("packs",{id:J("id").primaryKey().defaultRandom(),name:ae("name").notNull(),description:ae("description").notNull(),scope:ae("scope").notNull(),scopeRef:J("scope_ref"),version:ae("version").notNull().default("1.0.0"),tags:ae("tags").array(),badge:ae("badge"),metadata:Cn("metadata"),createdBy:J("created_by"),createdAt:wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:wt("updated_at",{withTimezone:!0}).defaultNow(),archived:ui("archived").default(!1),archivedAt:wt("archived_at",{withTimezone:!0}),archivedBy:J("archived_by"),forkedFromId:J("forked_from_id").references(()=>j.id,{onDelete:"set null"}),upstreamVersion:ae("upstream_version")},e=>[li("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Pn("idx_packs_scope").on(e.scope,e.scopeRef),Pn("idx_packs_created_by").on(e.createdBy)]),Q=Kn("pack_instructions",{packId:J("pack_id").references(()=>j.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:di("position").notNull().default(0),slotOverrides:Cn("slot_overrides"),addedAt:wt("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[ci({columns:[e.packId,e.instructionId]})]);import{pgTable as _i,text as fo,timestamp as pi,jsonb as mi,uuid as No,index as we}from"drizzle-orm/pg-core";var Te=_i("instruction_usage_events",{id:No("id").primaryKey().defaultRandom(),instructionId:No("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:No("user_id").notNull(),surface:fo("surface").notNull(),action:fo("action").notNull(),metadata:mi("metadata"),traceId:fo("trace_id"),createdAt:pi("created_at",{withTimezone:!0}).defaultNow()},e=>[we("idx_usage_events_instruction").on(e.instructionId),we("idx_usage_events_user").on(e.userId),we("idx_usage_events_surface").on(e.surface),we("idx_usage_events_action").on(e.action),we("idx_usage_events_created_at").on(e.createdAt),we("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as fi,text as Tt,timestamp as At,jsonb as Ni,uuid as On,index as xo}from"drizzle-orm/pg-core";var qn=fi("worker_connections",{id:On("id").primaryKey().defaultRandom(),userId:On("user_id").notNull(),workerType:Tt("worker_type").notNull().default("mcp"),clientName:Tt("client_name").notNull(),clientVersion:Tt("client_version"),workerVersion:Tt("worker_version"),lastHeartbeat:At("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),presenceGapStartedAt:At("presence_gap_started_at",{withTimezone:!0}),presenceGapEndedAt:At("presence_gap_ended_at",{withTimezone:!0}),connectedAt:At("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ni("metadata")},e=>[xo("idx_worker_connections_user").on(e.userId),xo("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),xo("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as xi,text as Dt,timestamp as hi,jsonb as gi,uuid as Mn,index as Hn}from"drizzle-orm/pg-core";var Ln=xi("cli_setup_events",{id:Mn("id").primaryKey().defaultRandom(),userId:Mn("user_id").notNull(),deviceId:Dt("device_id").notNull(),event:Dt("event").notNull(),cliVersion:Dt("cli_version"),os:Dt("os"),props:gi("props").notNull().default({}),createdAt:hi("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Hn("idx_cli_setup_events_user").on(e.userId,e.createdAt),Hn("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as vi,text as de,integer as Ii,boolean as yi,timestamp as wi,jsonb as Ti,uuid as Ai,index as Un}from"drizzle-orm/pg-core";var Bn=vi("cli_error_events",{id:Ai("id").primaryKey().defaultRandom(),deviceId:de("device_id"),event:de("event").notNull(),command:de("command"),statusCode:Ii("status_code"),message:de("message"),cliVersion:de("cli_version"),os:de("os"),nodeVersion:de("node_version"),proxied:yi("proxied"),props:Ti("props").notNull().default({}),createdAt:wi("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Un("idx_cli_error_events_created").on(e.createdAt),Un("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as ho}from"drizzle-orm";import{pgTable as ue,text as _,timestamp as g,jsonb as T,uuid as c,integer as O,boolean as Ue,index as f,unique as Gn}from"drizzle-orm/pg-core";var s=ue("eval_targets",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),name:_("name").notNull(),type:_("type").notNull(),content:_("content").notNull(),description:_("description").notNull().default(""),metadata:T("metadata").notNull().default({}),version:O("version").notNull().default(1),parentId:c("parent_id").references(()=>s.id,{onDelete:"set null"}),instructionId:c("instruction_id").references(()=>n.id,{onDelete:"set null"}),projectPath:_("project_path"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("eval_targets_name_user_idx").on(e.name,e.userId),f("idx_eval_targets_user").on(e.userId),f("idx_eval_targets_type").on(e.type),f("idx_eval_targets_parent").on(e.parentId),f("idx_eval_targets_instruction").on(e.instructionId).where(ho`${e.instructionId} IS NOT NULL`),f("idx_eval_targets_project").on(e.projectPath).where(ho`${e.projectPath} IS NOT NULL`)]),q=ue("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:_("name").notNull(),prompt:_("prompt").notNull(),expectedOutput:_("expected_output").notNull().default(""),files:T("files").notNull().default([]),expectations:T("expectations").notNull().default([]),retiredAt:g("retired_at",{withTimezone:!0}),retiredReason:_("retired_reason"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:g("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[f("idx_evals_target").on(e.evalTargetId),f("idx_evals_target_active").on(e.evalTargetId).where(ho`${e.retiredAt} IS NULL`)]),E=ue("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>q.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:O("eval_target_version").notNull(),configuration:_("configuration").notNull(),runNumber:O("run_number").notNull().default(1),iteration:O("iteration").notNull().default(1),status:_("status").notNull().default("completed"),outputs:T("outputs").notNull().default({}),timing:T("timing").notNull().default({}),grading:T("grading").notNull().default({}),comparison:T("comparison"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_runs_eval").on(e.evalId),f("idx_eval_runs_target").on(e.evalTargetId),f("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),Vn=ue("eval_comparisons",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),targetAId:c("target_a_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetBId:c("target_b_id").notNull().references(()=>s.id,{onDelete:"cascade"}),targetAVersion:O("target_a_version").notNull(),targetBVersion:O("target_b_version").notNull(),isSwapped:Ue("is_swapped").notNull().default(!1),winnerTargetId:c("winner_target_id").references(()=>s.id,{onDelete:"set null"}),perEval:T("per_eval").notNull().default([]),overall:T("overall").notNull().default({}),rawOutput:_("raw_output"),model:_("model"),status:_("status").notNull().default("completed"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_comparisons_target_a").on(e.targetAId),f("idx_eval_comparisons_target_b").on(e.targetBId),f("idx_eval_comparisons_user").on(e.userId)]),Fn=ue("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),expectationIndex:O("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ue("judge_passed").notNull(),judgeMethod:_("judge_method").notNull(),judgeModel:_("judge_model"),verdict:_("verdict").notNull(),flag:_("flag"),note:_("note"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_eval_grade_annotations_target").on(e.evalTargetId),f("idx_eval_grade_annotations_run").on(e.evalRunId),Gn("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),$n=ue("judge_reviewer_verdicts",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalRunId:c("eval_run_id").notNull().references(()=>E.id,{onDelete:"cascade"}),expectationIndex:O("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Ue("judge_passed").notNull(),humanPassed:Ue("human_passed").notNull(),reviewerEngine:_("reviewer_engine").notNull(),reviewerModel:_("reviewer_model").notNull(),reviewerPassed:Ue("reviewer_passed").notNull(),resolvedAt:g("resolved_at",{withTimezone:!0}),resolution:_("resolution"),createdAt:g("created_at",{withTimezone:!0}).defaultNow(),updatedAt:g("updated_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_jrv_target").on(e.evalTargetId),Gn("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),Ae=ue("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:O("iteration").notNull().default(1),runSummary:T("run_summary").notNull().default({}),notes:T("notes").notNull().default([]),feedback:T("feedback"),createdAt:g("created_at",{withTimezone:!0}).defaultNow()},e=>[f("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as go}from"drizzle-orm";import{pgTable as Di,text as M,timestamp as ji,jsonb as jt,uuid as zt,boolean as zi,index as Be,uniqueIndex as Ri}from"drizzle-orm/pg-core";var Jn=Di("instruction_promotions",{id:zt("id").primaryKey().defaultRandom(),userId:zt("user_id").notNull(),evalTargetId:zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),instructionId:zt("instruction_id").references(()=>n.id,{onDelete:"set null"}),fromContentHash:M("from_content_hash").notNull(),toContentHash:M("to_content_hash").notNull(),fromContent:M("from_content").notNull(),toContent:M("to_content").notNull(),proposalSource:M("proposal_source").notNull(),proposalRationale:M("proposal_rationale").notNull().default(""),decision:M("decision").notNull(),applied:zi("applied").notNull().default(!1),refusals:jt("refusals").notNull().default([]),rationale:M("rationale").notNull().default(""),effectClass:M("effect_class").notNull(),verdict:jt("verdict").notNull().default({}),gates:jt("gates").notNull().default({}),touchedSections:jt("touched_sections").notNull().default([]),createdAt:ji("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Be("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(go`${e.applied}`),Be("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Be("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Be("idx_instruction_promotions_to_hash").on(e.toContentHash),Ri("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(go`${e.applied}`),Be("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(go`${e.applied}`)]);import{index as Ge,integer as ki,jsonb as Ei,pgTable as Si,text as y,timestamp as De,uniqueIndex as bi,uuid as Ve}from"drizzle-orm/pg-core";var Qn=Si("recommendation_applications",{id:Ve("id").primaryKey().defaultRandom(),userId:Ve("user_id").notNull(),instructionId:Ve("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectId:Ve("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:y("project_path").notNull(),harness:y("harness").notNull(),targetPath:y("target_path").notNull(),status:y("status").notNull().default("proposed"),applyMode:y("apply_mode").notNull(),beforeHash:y("before_hash"),appliedHash:y("applied_hash"),appliedAt:De("applied_at",{withTimezone:!0}),measurementStartedAt:De("measurement_started_at",{withTimezone:!0}),measurementEndedAt:De("measurement_ended_at",{withTimezone:!0}),verdict:y("verdict"),verdictDetail:y("verdict_detail"),revertedAt:De("reverted_at",{withTimezone:!0}),boundaryClass:y("boundary_class"),targets:y("targets").array().notNull().default([]),inverse:Ei("inverse"),requires:y("requires").array().notNull().default([]),provides:y("provides").array().notNull().default([]),applyBatchId:Ve("apply_batch_id"),applySeq:ki("apply_seq"),createdAt:De("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:De("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[bi("uq_recommendation_applications_target").on(e.userId,e.instructionId,e.projectPath,e.harness,e.targetPath),Ge("idx_recommendation_applications_user_status").on(e.userId,e.status,e.updatedAt.desc()),Ge("idx_recommendation_applications_user_harness").on(e.userId,e.harness,e.updatedAt.desc()),Ge("idx_recommendation_applications_project").on(e.projectId,e.updatedAt.desc()),Ge("idx_recommendation_applications_batch").on(e.userId,e.applyBatchId,e.applySeq.desc()),Ge("idx_recommendation_applications_requires").using("gin",e.requires)]);import{pgTable as Pi,text as S,timestamp as Yn,jsonb as Fe,uuid as vo,integer as je,real as Ki,index as Y,uniqueIndex as Wn}from"drizzle-orm/pg-core";import{sql as Io}from"drizzle-orm";var W=Pi("context_snapshots",{id:vo("id").primaryKey().defaultRandom(),sessionId:vo("session_id").references(()=>i.id,{onDelete:"cascade"}),userId:vo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:je("sequence").notNull().default(0),provider:S("provider").notNull(),model:S("model").notNull(),systemPrompt:S("system_prompt").notNull(),injectedInstructions:Fe("injected_instructions").notNull().default([]),messagesSummary:Fe("messages_summary").notNull(),tools:Fe("tools").notNull().default([]),systemHash:S("system_hash").notNull(),requestHash:S("request_hash").notNull().default(""),toolsHash:S("tools_hash"),injectedHash:S("injected_hash"),messagesDelta:Fe("messages_delta").default([]),messagesDeltaRef:S("messages_delta_ref"),messagesBaseLength:je("messages_base_length"),payloadPrunedAt:Yn("payload_pruned_at",{withTimezone:!0}),deltaOffloadState:S("delta_offload_state").notNull().default("inline"),deltaGzipBytes:je("delta_gzip_bytes"),deltaOffloadError:S("delta_offload_error"),deltaOffloadAttempts:je("delta_offload_attempts").notNull().default(0),maxTokens:je("max_tokens"),temperature:Ki("temperature"),estimatedTokens:je("estimated_tokens"),capturedAt:Yn("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Fe("metadata").default({})},e=>[Y("idx_context_snapshots_session").on(e.sessionId),Y("idx_context_snapshots_user").on(e.userId),Y("idx_context_snapshots_hash").on(e.systemHash),Y("idx_context_snapshots_request_hash").on(e.requestHash),Wn("idx_snapshots_session_request").on(e.sessionId,e.requestHash),Wn("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Y("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc()),Y("idx_snapshots_unpruned_captured").on(e.capturedAt,e.id).where(Io`${e.payloadPrunedAt} is null`),Y("idx_snapshots_pending_offload").on(e.deltaOffloadState,e.capturedAt,e.id).where(Io`${e.deltaOffloadState} = 'pending'`),Y("idx_snapshots_delta_ref").on(e.messagesDeltaRef).where(Io`${e.messagesDeltaRef} is not null`)]);import{pgTable as Ci,text as Xn,timestamp as Zn,jsonb as Oi,integer as qi,index as Mi}from"drizzle-orm/pg-core";var er=Ci("content_blobs",{hash:Xn("hash").primaryKey(),contentType:Xn("content_type").notNull(),content:Oi("content").notNull(),sizeBytes:qi("size_bytes").notNull().default(0),createdAt:Zn("created_at",{withTimezone:!0}).defaultNow(),lastReferencedAt:Zn("last_referenced_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Mi("idx_content_blobs_type").on(e.contentType)]);import{integer as tr,jsonb as Hi,pgTable as Li,timestamp as Ui,uuid as Bi}from"drizzle-orm/pg-core";var or=Li("session_capture_heads",{sessionId:Bi("session_id").primaryKey().references(()=>i.id,{onDelete:"cascade"}),sequence:tr("sequence").notNull(),rawMessageHashes:Hi("raw_message_hashes").notNull().$type(),version:tr("version").notNull(),updatedAt:Ui("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{index as Gi,integer as nr,pgTable as Vi,text as yo,timestamp as rr,uniqueIndex as Fi,uuid as $i}from"drizzle-orm/pg-core";import{sql as Ji}from"drizzle-orm";var sr=Vi("snapshot_delta_objects",{ref:yo("ref").primaryKey(),snapshotId:$i("snapshot_id"),compressedBytes:nr("compressed_bytes").notNull(),state:yo("state").notNull(),createdAt:rr("created_at",{withTimezone:!0}).notNull().defaultNow(),lastAttemptAt:rr("last_attempt_at",{withTimezone:!0}),attempts:nr("attempts").notNull().default(0),lastError:yo("last_error")},e=>[Gi("idx_snapshot_delta_objects_state_created").on(e.state,e.createdAt),Fi("snapshot_delta_objects_snapshot_id_unique").on(e.snapshotId).where(Ji`${e.snapshotId} is not null`)]);import{pgTable as Qi,text as Rt,timestamp as $e,jsonb as kt,uuid as wo,index as Et,integer as To}from"drizzle-orm/pg-core";var ze=Qi("eval_jobs",{id:wo("id").primaryKey().defaultRandom(),userId:wo("user_id").notNull(),evalTargetId:wo("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:Rt("status").notNull().default("pending"),config:kt("config").notNull().default({}),progress:kt("progress").notNull().default({}),result:kt("result"),error:Rt("error"),attempts:To("attempts").notNull().default(0),taskKind:Rt("task_kind"),payload:kt("payload"),claimedBy:Rt("claimed_by"),claimedAt:$e("claimed_at",{withTimezone:!0}),leaseExpiresAt:$e("lease_expires_at",{withTimezone:!0}),leaseRecoveries:To("lease_recoveries").notNull().default(0),hostSuspendRecoveries:To("host_suspend_recoveries").notNull().default(0),createdAt:$e("created_at",{withTimezone:!0}).defaultNow(),updatedAt:$e("updated_at",{withTimezone:!0}).defaultNow(),completedAt:$e("completed_at",{withTimezone:!0})},e=>[Et("idx_eval_jobs_user").on(e.userId),Et("idx_eval_jobs_target").on(e.evalTargetId),Et("idx_eval_jobs_status").on(e.status),Et("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as Yi,text as Je,timestamp as Qe,jsonb as ir,uuid as ar,integer as Ao,index as dr}from"drizzle-orm/pg-core";var ur=Yi("agent_jobs",{id:ar("id").primaryKey().defaultRandom(),userId:ar("user_id").notNull(),taskKind:Je("task_kind").notNull(),status:Je("status").notNull().default("pending"),payload:ir("payload").notNull(),dedupeKey:Je("dedupe_key"),result:ir("result"),error:Je("error"),attempts:Ao("attempts").notNull().default(0),claimedBy:Je("claimed_by"),claimedAt:Qe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Qe("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Ao("lease_recoveries").notNull().default(0),hostSuspendRecoveries:Ao("host_suspend_recoveries").notNull().default(0),createdAt:Qe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Qe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Qe("completed_at",{withTimezone:!0})},e=>[dr("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),dr("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as Wi,text as Ye,timestamp as We,jsonb as St,uuid as Do,index as bt,integer as jo}from"drizzle-orm/pg-core";var lr=Wi("insights_jobs",{id:Do("id").primaryKey().defaultRandom(),userId:Do("user_id").notNull(),status:Ye("status").notNull().default("pending"),projectPath:Ye("project_path"),projectId:Do("project_id").references(()=>r.id,{onDelete:"set null"}),config:St("config").notNull().default({}),progress:St("progress").notNull().default({}),result:St("result"),error:Ye("error"),attempts:jo("attempts").notNull().default(0),taskKind:Ye("task_kind"),payload:St("payload"),claimedBy:Ye("claimed_by"),claimedAt:We("claimed_at",{withTimezone:!0}),leaseExpiresAt:We("lease_expires_at",{withTimezone:!0}),leaseRecoveries:jo("lease_recoveries").notNull().default(0),hostSuspendRecoveries:jo("host_suspend_recoveries").notNull().default(0),createdAt:We("created_at",{withTimezone:!0}).defaultNow(),updatedAt:We("updated_at",{withTimezone:!0}).defaultNow(),completedAt:We("completed_at",{withTimezone:!0})},e=>[bt("idx_insights_jobs_user").on(e.userId),bt("idx_insights_jobs_status").on(e.status),bt("idx_insights_jobs_pending").on(e.userId,e.status),bt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Xi,text as zo,timestamp as Pt,uuid as cr,index as Zi,uniqueIndex as ea}from"drizzle-orm/pg-core";var Re=Xi("api_keys",{id:cr("id").primaryKey().defaultRandom(),userId:cr("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:zo("name").notNull(),keyHash:zo("key_hash").notNull(),keyPrefix:zo("key_prefix").notNull(),lastUsedAt:Pt("last_used_at",{withTimezone:!0}),expiresAt:Pt("expires_at",{withTimezone:!0}),revokedAt:Pt("revoked_at",{withTimezone:!0}),createdAt:Pt("created_at",{withTimezone:!0}).defaultNow()},e=>[Zi("idx_api_keys_user").on(e.userId),ea("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as ta,text as Ro,timestamp as _r,uuid as oa,index as na}from"drizzle-orm/pg-core";var pr=ta("extension_auth_codes",{code:Ro("code").primaryKey(),userId:oa("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:Ro("editor"),email:Ro("email"),expiresAt:_r("expires_at",{withTimezone:!0}).notNull(),createdAt:_r("created_at",{withTimezone:!0}).defaultNow()},e=>[na("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as ra,text as sa,timestamp as mr,jsonb as ia,uuid as ko,index as fr}from"drizzle-orm/pg-core";var ke=ra("eval_conversations",{id:ko("id").primaryKey().defaultRandom(),evalTargetId:ko("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:ko("user_id").notNull(),messages:ia("messages").notNull().default([]),status:sa("status").notNull().default("active"),createdAt:mr("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mr("updated_at",{withTimezone:!0}).defaultNow()},e=>[fr("idx_eval_conversations_target").on(e.evalTargetId),fr("idx_eval_conversations_user").on(e.userId)]);import{pgTable as aa,text as H,timestamp as Nr,jsonb as da,uuid as Eo}from"drizzle-orm/pg-core";var xr=aa("skill_submissions",{id:Eo("id").primaryKey().defaultRandom(),skillId:H("skill_id").notNull(),name:H("name").notNull(),description:H("description").notNull(),category:H("category").notNull(),tools:H("tools").array().notNull(),tags:H("tags").array().default([]),content:H("content").notNull(),status:H("status").notNull().default("pending"),submittedBy:Eo("submitted_by").notNull(),reviewedBy:Eo("reviewed_by"),reviewNote:H("review_note"),metadata:da("metadata"),createdAt:Nr("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Nr("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as ua,text as Xe,timestamp as hr,jsonb as la,uuid as ca,uniqueIndex as _a,index as gr}from"drizzle-orm/pg-core";var vr=ua("harness_releases",{id:ca("id").primaryKey().defaultRandom(),harness:Xe("harness").notNull(),version:Xe("version").notNull(),publishedAt:hr("published_at",{withTimezone:!0}).notNull(),title:Xe("title"),body:Xe("body"),categories:la("categories").default({}),url:Xe("url"),createdAt:hr("created_at",{withTimezone:!0}).defaultNow()},e=>[_a("idx_harness_releases_unique").on(e.harness,e.version),gr("idx_harness_releases_harness").on(e.harness),gr("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as pa,text as Ee,timestamp as Ir,jsonb as ma,uuid as yr,index as wr,uniqueIndex as fa}from"drizzle-orm/pg-core";var So=pa("notifications",{id:yr("id").primaryKey().defaultRandom(),userId:yr("user_id").notNull(),type:Ee("type").notNull(),title:Ee("title").notNull(),body:Ee("body"),url:Ee("url"),sourceTable:Ee("source_table"),sourceId:Ee("source_id"),metadata:ma("metadata").notNull().default({}),readAt:Ir("read_at",{withTimezone:!0}),createdAt:Ir("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[wr("idx_notifications_user_created").on(e.userId,e.createdAt),wr("idx_notifications_user_unread").on(e.userId),fa("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Na,text as Ze,timestamp as et,jsonb as bo,uuid as Po,index as Kt,integer as Ko}from"drizzle-orm/pg-core";var Se=Na("launch_jobs",{id:Po("id").primaryKey().defaultRandom(),userId:Po("user_id").notNull(),tool:Ze("tool").notNull(),status:Ze("status").notNull().default("pending"),config:bo("config").notNull().default({}),result:bo("result"),error:Ze("error"),attempts:Ko("attempts").notNull().default(0),taskKind:Ze("task_kind"),payload:bo("payload"),claimedBy:Ze("claimed_by"),claimedAt:et("claimed_at",{withTimezone:!0}),leaseExpiresAt:et("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Ko("lease_recoveries").notNull().default(0),hostSuspendRecoveries:Ko("host_suspend_recoveries").notNull().default(0),createdAt:et("created_at",{withTimezone:!0}).defaultNow(),updatedAt:et("updated_at",{withTimezone:!0}).defaultNow(),completedAt:et("completed_at",{withTimezone:!0}),runId:Po("run_id").references(()=>h.id,{onDelete:"set null"})},e=>[Kt("idx_launch_jobs_user").on(e.userId),Kt("idx_launch_jobs_status").on(e.status),Kt("idx_launch_jobs_pending").on(e.userId,e.status),Kt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as Tr,uuid as L,text as X,real as xa,timestamp as tt,boolean as ha,uniqueIndex as ga,index as ot}from"drizzle-orm/pg-core";var Ar=["add","remove","trim"],Co=Tr("instruction_suggestions",{id:L("id").primaryKey().defaultRandom(),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:L("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:X("project_path").notNull(),projectId:L("project_id").references(()=>r.id,{onDelete:"set null"}),score:xa("score").notNull(),reason:X("reason").notNull(),kind:X("kind").$type().notNull().default("add"),generatedAt:tt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:ha("is_stale").notNull().default(!1),dismissedAt:tt("dismissed_at",{withTimezone:!0}),acceptedAt:tt("accepted_at",{withTimezone:!0}),declinedAt:tt("declined_at",{withTimezone:!0}),declinedReason:X("declined_reason"),promotedToInstructionId:L("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[ga("idx_instruction_suggestions_user_project_instruction_kind").on(e.userId,e.projectPath,e.instructionId,e.kind),ot("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),ot("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),ot("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Dr=Tr("instruction_suggestion_events",{id:L("id").primaryKey().defaultRandom(),suggestionId:L("suggestion_id").notNull().references(()=>Co.id,{onDelete:"cascade"}),userId:L("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:X("event_type").notNull(),tool:X("tool"),sessionId:L("session_id"),projectPath:X("project_path").notNull(),actor:X("actor"),createdAt:tt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ot("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),ot("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as va,text as Oo,integer as Ia,numeric as nt,timestamp as qo,index as ya,primaryKey as wa}from"drizzle-orm/pg-core";var jr=va("model_pricing",{provider:Oo("provider").notNull(),modelId:Oo("model_id").notNull(),inputPerM:nt("input_per_m").notNull(),outputPerM:nt("output_per_m").notNull(),cacheReadPerM:nt("cache_read_per_m").notNull(),cacheWrite5mPerM:nt("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:nt("cache_write_1h_per_m").notNull(),contextWindow:Ia("context_window"),effectiveFrom:qo("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:qo("effective_until",{withTimezone:!0}),source:Oo("source").notNull(),verifiedAt:qo("verified_at",{withTimezone:!0})},e=>[wa({columns:[e.provider,e.modelId,e.effectiveFrom]}),ya("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Ta,text as le,numeric as zr,timestamp as Rr,uuid as kr,jsonb as Aa,index as Er}from"drizzle-orm/pg-core";var Sr=Ta("limit_observations",{id:kr("id").primaryKey().defaultRandom(),observedAt:Rr("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:le("provider").notNull(),plan:le("plan").notNull(),limitType:le("limit_type").notNull(),value:zr("value").notNull(),unit:le("unit").notNull(),comparator:le("comparator").notNull().default("="),resetsAt:Rr("resets_at",{withTimezone:!0}),sourceType:le("source_type").notNull(),sourceUrl:le("source_url"),sourceEvidence:Aa("source_evidence"),confidence:zr("confidence").notNull(),userId:kr("user_id")},e=>[Er("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),Er("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Da,text as Ct,timestamp as ja,uuid as za,jsonb as Ra,boolean as ka,uniqueIndex as Ea}from"drizzle-orm/pg-core";var br=Da("provider_docs_snapshots",{id:za("id").primaryKey().defaultRandom(),fetchedAt:ja("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:Ct("provider").notNull(),docUrl:Ct("doc_url").notNull(),contentHash:Ct("content_hash").notNull(),content:Ct("content").notNull(),parseSuccess:ka("parse_success").notNull(),parseErrors:Ra("parse_errors")},e=>[Ea("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Sa,text as Ot,numeric as Pr,timestamp as Kr,uuid as ba,primaryKey as Pa,index as Ka}from"drizzle-orm/pg-core";var Cr=Sa("plan_limits_active",{provider:Ot("provider").notNull(),plan:Ot("plan").notNull(),limitType:Ot("limit_type").notNull(),value:Pr("value").notNull(),unit:Ot("unit").notNull(),effectiveFrom:Kr("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Kr("effective_until",{withTimezone:!0}),confidence:Pr("confidence").notNull(),sourceObservationIds:ba("source_observation_ids").array().notNull()},e=>[Pa({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Ka("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as Ca,text as Mo,timestamp as Oa,uuid as Or,jsonb as qa,index as Ma}from"drizzle-orm/pg-core";var qr=Ca("alert_dispatches",{id:Or("id").primaryKey().defaultRandom(),userId:Or("user_id").notNull(),alertKey:Mo("alert_key").notNull(),severity:Mo("severity").notNull(),lastDispatchedAt:Oa("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:qa("last_state").notNull(),channel:Mo("channel").notNull()},e=>[Ma("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{date as Mr,integer as Ho,pgTable as Hr,primaryKey as Ha,text as La,timestamp as Lo,uuid as Ua}from"drizzle-orm/pg-core";var Lr=Hr("weekly_digest_deliveries",{userId:Ua("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),weekStart:Mr("week_start").notNull(),sentAt:Lo("sent_at",{withTimezone:!0}).notNull().defaultNow(),providerMessageId:La("provider_message_id")},e=>[Ha({columns:[e.userId,e.weekStart]})]),Ur=Hr("weekly_digest_runs",{weekStart:Mr("week_start").primaryKey(),startedAt:Lo("started_at",{withTimezone:!0}).notNull().defaultNow(),finishedAt:Lo("finished_at",{withTimezone:!0}),sent:Ho("sent"),skipped:Ho("skipped"),failed:Ho("failed")});import{pgTable as Ba,text as Uo,timestamp as Br,uuid as Bo,integer as Ga,index as Va,unique as Fa}from"drizzle-orm/pg-core";var Gr=Ba("scaffolding_fingerprints",{id:Bo("id").primaryKey().defaultRandom(),userId:Bo("user_id").notNull(),harness:Uo("harness").notNull(),model:Uo("model").notNull(),toolsHash:Uo("tools_hash").notNull(),firstSeenAt:Br("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:Br("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:Ga("snapshot_count").notNull().default(1),firstSessionId:Bo("first_session_id")},e=>[Fa("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),Va("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as $a,text as Go,timestamp as Ja,jsonb as Qa,uuid as Vr,integer as Ya,unique as Wa}from"drizzle-orm/pg-core";var Fr=$a("scaffolding_segments",{id:Vr("id").primaryKey().defaultRandom(),userId:Vr("user_id").notNull(),harness:Go("harness").notNull(),model:Go("model").notNull(),coreNames:Qa("core_names").notNull(),coreHash:Go("core_hash").notNull(),activeFingerprints:Ya("active_fingerprints").notNull(),computedAt:Ja("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Wa("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{pgTable as Xa,text as Z,timestamp as $r,uuid as Vo,uniqueIndex as Za,index as ed}from"drizzle-orm/pg-core";var Jr=["blog","docs","changelog"],Fo=Xa("vendor_guidance_snapshots",{id:Vo("id").primaryKey().defaultRandom(),fetchedAt:$r("fetched_at",{withTimezone:!0}).notNull().defaultNow(),sourceId:Z("source_id").notNull(),harness:Z("harness").notNull(),vendor:Z("vendor").notNull(),kind:Z("kind").$type().notNull(),url:Z("url").notNull(),title:Z("title").notNull(),contentHash:Z("content_hash").notNull(),text:Z("text").notNull(),previousSnapshotId:Vo("previous_snapshot_id").references(()=>Fo.id,{onDelete:"set null"}),pitchedAt:$r("pitched_at",{withTimezone:!0}),pitchInstructionId:Vo("pitch_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Za("idx_vendor_guidance_dedup").on(e.sourceId,e.contentHash),ed("idx_vendor_guidance_source_fetched").on(e.sourceId,e.fetchedAt)]);import{drizzle as Zr}from"drizzle-orm/postgres-js";import es from"postgres";var qt={};gs(qt,{GUIDANCE_KINDS:()=>Jr,SUGGESTION_KINDS:()=>Ar,agentJobs:()=>ur,agentRuns:()=>h,agentRunsRelations:()=>fd,alertDispatches:()=>qr,announcementDeliveries:()=>on,announcements:()=>tn,apiKeys:()=>Re,apiKeysRelations:()=>od,benchmarks:()=>Ae,benchmarksRelations:()=>jd,cliErrorEvents:()=>Bn,cliSetupEvents:()=>Ln,contentBlobs:()=>er,contextSnapshots:()=>W,contextSnapshotsRelations:()=>kd,evalComparisons:()=>Vn,evalConversations:()=>ke,evalConversationsRelations:()=>Rd,evalGradeAnnotations:()=>Fn,evalJobs:()=>ze,evalJobsRelations:()=>zd,evalRuns:()=>E,evalRunsRelations:()=>Dd,evalTargets:()=>s,evalTargetsRelations:()=>Td,evals:()=>q,evalsRelations:()=>Ad,extensionAuthCodes:()=>pr,harnessReleases:()=>vr,insightRecommendationLog:()=>Dn,insightsJobs:()=>lr,instructionEvents:()=>Ne,instructionEventsRelations:()=>ud,instructionExperimentArms:()=>wn,instructionExperiments:()=>Me,instructionPromotions:()=>Jn,instructionSuggestionEvents:()=>Dr,instructionSuggestions:()=>Co,instructionUsageEvents:()=>Te,instructionUsageEventsRelations:()=>wd,instructionVerdicts:()=>An,instructionVersionIdentities:()=>ln,instructionVersions:()=>fe,instructionVersionsRelations:()=>cd,instructions:()=>n,instructionsRelations:()=>dd,judgeReviewerVerdicts:()=>$n,launchJobs:()=>Se,launchJobsRelations:()=>Nd,limitObservations:()=>Sr,memories:()=>w,memoriesRelations:()=>ld,memoryExperiments:()=>kn,modelPricing:()=>jr,notificationPreferences:()=>nn,notifications:()=>So,orgInvitations:()=>b,orgInvitationsRelations:()=>sd,organizations:()=>l,organizationsRelations:()=>nd,packInstructions:()=>Q,packInstructionsRelations:()=>yd,packs:()=>j,packsRelations:()=>Id,pendingTreatmentExposures:()=>vn,planLimitsActive:()=>Cr,profiles:()=>o,profilesRelations:()=>td,projectCheckouts:()=>pn,projectInstructions:()=>V,projectInstructionsRelations:()=>pd,projects:()=>r,projectsRelations:()=>_d,providerDocsSnapshots:()=>br,recommendationApplications:()=>Qn,scaffoldingFingerprints:()=>Gr,scaffoldingSegments:()=>Fr,sessionCaptureHeads:()=>or,sessionEvents:()=>he,sessionEventsRelations:()=>xd,sessionInstructions:()=>F,sessionInstructionsRelations:()=>hd,sessionSendJobs:()=>bn,sessionTerminalTargets:()=>vt,sessions:()=>i,sessionsRelations:()=>md,skillSubmissions:()=>xr,snapshotDeltaObjects:()=>sr,teams:()=>v,teamsRelations:()=>rd,treatmentAssignments:()=>K,treatmentAssignmentsRelations:()=>gd,treatmentExposures:()=>C,treatmentExposuresRelations:()=>vd,userOrganizations:()=>pe,userOrganizationsRelations:()=>id,userTeams:()=>me,userTeamsRelations:()=>ad,vendorGuidanceSnapshots:()=>Fo,weeklyDigestDeliveries:()=>Lr,weeklyDigestRuns:()=>Ur,workerConnections:()=>qn});import{relations as a}from"drizzle-orm";var td=a(o,({many:e})=>({sessions:e(i),contextSnapshots:e(W),apiKeys:e(Re)})),od=a(Re,({one:e})=>({profile:e(o,{fields:[Re.userId],references:[o.id]})})),nd=a(l,({many:e})=>({teams:e(v),userOrganizations:e(pe),projects:e(r),invitations:e(b)})),rd=a(v,({one:e,many:t})=>({organization:e(l,{fields:[v.orgId],references:[l.id]}),userTeams:t(me),invitations:t(b)})),sd=a(b,({one:e})=>({organization:e(l,{fields:[b.orgId],references:[l.id]}),team:e(v,{fields:[b.teamId],references:[v.id]}),inviter:e(o,{fields:[b.invitedBy],references:[o.id]})})),id=a(pe,({one:e})=>({organization:e(l,{fields:[pe.orgId],references:[l.id]})})),ad=a(me,({one:e})=>({team:e(v,{fields:[me.teamId],references:[v.id]})})),dd=a(n,({one:e,many:t})=>({versions:t(fe),projectInstructions:t(V),events:t(Ne),usageEvents:t(Te),sessionInstructions:t(F),packInstructions:t(Q),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),ud=a(Ne,({one:e})=>({instruction:e(n,{fields:[Ne.instructionId],references:[n.id]})})),ld=a(w,({one:e,many:t})=>({project:e(r,{fields:[w.projectId],references:[r.id]}),parent:e(w,{fields:[w.parentId],references:[w.id]}),versions:t(w)})),cd=a(fe,({one:e})=>({instruction:e(n,{fields:[fe.instructionId],references:[n.id]})})),_d=a(r,({one:e,many:t})=>({organization:e(l,{fields:[r.orgId],references:[l.id]}),projectInstructions:t(V),sessions:t(i)})),pd=a(V,({one:e})=>({project:e(r,{fields:[V.projectId],references:[r.id]}),instruction:e(n,{fields:[V.instructionId],references:[n.id]})})),md=a(i,({one:e,many:t})=>({profile:e(o,{fields:[i.userId],references:[o.id]}),project:e(r,{fields:[i.projectId],references:[r.id]}),run:e(h,{fields:[i.runId],references:[h.id]}),events:t(he),sessionInstructions:t(F),treatmentExposures:t(C),contextSnapshots:t(W)})),fd=a(h,({one:e,many:t})=>({profile:e(o,{fields:[h.userId],references:[o.id]}),organization:e(l,{fields:[h.orgId],references:[l.id]}),project:e(r,{fields:[h.projectId],references:[r.id]}),sessions:t(i),launchJobs:t(Se)})),Nd=a(Se,({one:e})=>({run:e(h,{fields:[Se.runId],references:[h.id]})})),xd=a(he,({one:e})=>({session:e(i,{fields:[he.sessionId],references:[i.id]})})),hd=a(F,({one:e})=>({session:e(i,{fields:[F.sessionId],references:[i.id]}),instruction:e(n,{fields:[F.instructionId],references:[n.id]})})),gd=a(K,({one:e,many:t})=>({owner:e(o,{fields:[K.userId],references:[o.id]}),project:e(r,{fields:[K.projectId],references:[r.id]}),exposures:t(C)})),vd=a(C,({one:e})=>({session:e(i,{fields:[C.sessionId],references:[i.id]}),owner:e(o,{fields:[C.userId],references:[o.id]}),assignment:e(K,{fields:[C.assignmentId],references:[K.id]})})),Id=a(j,({one:e,many:t})=>({packInstructions:t(Q),forkedFrom:e(j,{fields:[j.forkedFromId],references:[j.id]})})),yd=a(Q,({one:e})=>({pack:e(j,{fields:[Q.packId],references:[j.id]}),instruction:e(n,{fields:[Q.instructionId],references:[n.id]})})),wd=a(Te,({one:e})=>({instruction:e(n,{fields:[Te.instructionId],references:[n.id]})})),Td=a(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(q),evalRuns:t(E),benchmarks:t(Ae),evalJobs:t(ze),evalConversations:t(ke)})),Ad=a(q,({one:e,many:t})=>({evalTarget:e(s,{fields:[q.evalTargetId],references:[s.id]}),runs:t(E)})),Dd=a(E,({one:e})=>({eval:e(q,{fields:[E.evalId],references:[q.id]}),evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]})})),jd=a(Ae,({one:e})=>({evalTarget:e(s,{fields:[Ae.evalTargetId],references:[s.id]})})),zd=a(ze,({one:e})=>({evalTarget:e(s,{fields:[ze.evalTargetId],references:[s.id]})})),Rd=a(ke,({one:e})=>({evalTarget:e(s,{fields:[ke.evalTargetId],references:[s.id]})})),kd=a(W,({one:e})=>({session:e(i,{fields:[W.sessionId],references:[i.id]}),profile:e(o,{fields:[W.userId],references:[o.id]})}));var rt=0,Qr=0,st=0,Yr=0;var Ed=0;function $o(){rt++,rt>Qr&&(Qr=rt)}m($o,"trackDbOpStart");function Jo(){rt>0&&rt--}m(Jo,"trackDbOpEnd");function Qo(){st++,st>Yr&&(Yr=st)}m(Qo,"trackHeavyDbOpStart");function Yo(){st>0&&st--}m(Yo,"trackHeavyDbOpEnd");function Wr(){Ed++}m(Wr,"recordQueryDeadline");var Ht,Ut,Wo=!1,Mt;var Xr,Bt,Lt;function ts(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(ts,"getEnv");function os(){if(Wo)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Ht){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,d=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,u=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,p=Number(process.env.PG_IDLE_TIMEOUT)||5,x=Number(process.env.PG_KEEP_ALIVE_S)||60;Ut=es(ts("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:d,idle_timeout:p,keep_alive:x,max_lifetime:300,connection:{application_name:e,...u>0?{statement_timeout:u}:{}}}),Ht=Zr(Ut,{schema:qt})}return Ht}m(os,"getDb");function ns(){if(Wo)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Lt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Bt=es(ts("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:Number(process.env.PG_CONNECT_TIMEOUT_S)||10,idle_timeout:Number(process.env.PG_IDLE_TIMEOUT)||5,keep_alive:Number(process.env.PG_KEEP_ALIVE_S)||60,max_lifetime:300,connection:{application_name:e}}),Lt=Zr(Bt,{schema:qt})}return Lt}m(ns,"getHeavyDb");async function Sd(){if(Mt)return Mt;Wo=!0;let e=Ut,t=Xr,d=Bt;return Ut=void 0,Ht=void 0,Xr=void 0,Bt=void 0,Lt=void 0,Mt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),d?d.end({timeout:5}):Promise.resolve()]).then(()=>{}),Mt}m(Sd,"closeDb");var bd=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function rs(e){let t=e,d=t?.code??t?.cause?.code??t?.errno;return d!==void 0&&bd.has(d)}m(rs,"isRetryableConnectError");var Pd=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function ss(e){let t=e,d=t?.code??t?.cause?.code??t?.errno;return d!==void 0&&Pd.has(d)}m(ss,"isRetryableResetError");async function is(e,t={}){let d=t.attempts??3,u=t.baseMs??100,p;for(let x=0;x<d;x++)try{return await e()}catch(A){p=A;let U=rs(A)||t.retryResets===!0&&ss(A);if(x===d-1||!U)throw A;await new Promise(ee=>setTimeout(ee,u*2**x))}throw p}m(is,"withDbRetry");var Gt=class extends Error{static{m(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function as(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(as,"queryDeadlineMs");function ds(){let e=Number(process.env.PG_HEAVY_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:6e4}m(ds,"heavyQueryDeadlineMs");function Kd(e,t,d=!0){let u,p=new Promise((x,A)=>{u=setTimeout(()=>{d&&Wr(),A(new Gt(t))},t);let U=u;typeof U.unref=="function"&&U.unref()});return Promise.race([e,p]).finally(()=>clearTimeout(u))}m(Kd,"raceWithDeadline");var us=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),ls=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function Xo(e,t=!1,d=0,u=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(p,x,A){if(x==="then"){let ee=Reflect.get(p,x,A);return typeof ee!="function"?ee:(ps,ms)=>{let fs=u?Qo:$o,Ns=u?Yo:Jo;fs();let Zo=is(()=>new Promise((xs,hs)=>ee.call(p,xs,hs)),{retryResets:t});return(d>0?Kd(Zo,d,!u):Zo).finally(Ns).then(ps,ms)}}let U=Reflect.get(p,x,A);return typeof U=="function"?(...ee)=>Xo(U.apply(p,ee),t,d,u):U}})}m(Xo,"wrapBuilder");function cs(e,t=!1){let d=t?Qo:$o,u=t?Yo:Jo;d();try{return Promise.resolve(e()).finally(u)}catch(p){throw u(),p}}m(cs,"gaugeTransaction");var _s=new Proxy({},{get(e,t){let d=os(),u=d[t];if(typeof t=="string"&&us.has(t)&&typeof u=="function"){let p=ls.has(t),x=as();return(...A)=>Xo(u.apply(d,A),p,x)}return t==="transaction"&&typeof u=="function"?(...p)=>cs(()=>u.apply(d,p)):u}}),Cd=new Proxy({},{get(e,t){let d=ns(),u=d[t];if(typeof t=="string"&&us.has(t)&&typeof u=="function"){let p=ls.has(t);return(...x)=>Xo(u.apply(d,x),p,ds(),!0)}return t==="transaction"&&typeof u=="function"?(...p)=>cs(()=>u.apply(d,p),!0):u}});export{tn as a,os as b,Sd as c};
@@ -0,0 +1 @@
1
+ import{a as G,c as I}from"./chunk-H6FVXVGG.js";import{f as j}from"./chunk-SWSOEYC7.js";import{a as R}from"./chunk-DVU5PHPM.js";import{b as U}from"./chunk-VBXL7XO7.js";import{f as A}from"./chunk-FBSZ6KCM.js";import{b as P,e as C,h as _}from"./chunk-76UKAFNM.js";import{a as x}from"./chunk-ZLLER3HP.js";var J=x(l=>l.summary.pass_rate===1?1:0,"fullPassScore");async function z(l,d={}){let $=d.executeEval??A,M=d.grade??R,q=d.getExperiment??(async o=>{try{return await C(`/api/memory-experiments/${o}`)}catch(e){if(e instanceof P&&e.statusCode===404)return null;throw e}}),B=d.getMemoryBody??(async o=>{try{let e=await C(`/api/memories/${o}`);return t?.memoryVersion!=null&&e.version!==t.memoryVersion?null:e.body}catch(e){if(e instanceof P&&e.statusCode===404)return null;throw e}}),p=d.updateExperiment??(async(o,e)=>{await _(`/api/memory-experiments/${o}`,e)}),t=await q(l.experimentId);if(!t)return{skipped:"not_found"};if(t.status==="completed"||t.status==="failed")return{skipped:"already_terminal",status:t.status};let E=t.memoryBody??await B(t.memoryId);if(E==null)return await p(t.id,{status:"failed",error:"memory no longer exists or its queued version is no longer available"}),{skipped:"memory_gone",status:"failed"};await p(t.id,{status:"running"});let v=t.expectations??[],c=t.model??void 0,i=t.engine??"claude",g=G({engine:i,model:c},{engine:l.graderEngine,model:l.graderModel}),f=x(async o=>{let e=(d.createWorkspace??j)({engine:i,targetType:"prompt",targetContent:o});try{if(e.leakedFiles.length)throw new Error("Contaminated memory trial workspace");return await $({prompt:t.taskPrompt,targetContent:e.systemPrompt,appendTarget:!0,ignoreContextFiles:!0,workDir:e.workDir,model:c,engine:i})}finally{e.cleanup()}},"executeArm"),s=[],u=new Set,b,k,m=[],w=0;try{if(l.measurement){let e=I(l);if(e.engine!==i||e.model!==c)throw new Error("Memory experiment differs from its queued measurement snapshot");g={engine:e.graderEngine,model:e.graderModel}}for(let e=0;e<t.trials;e++){let[r,n]=e%2===0?[await f(E),await f()]:await(async()=>{let y=await f();return[await f(E),y]})();if(r.error||n.error||r.exitCode!==0||n.exitCode!==0||!r.output.trim()||!n.output.trim()){w++,m.push({trial:e+1,reason:(r.error??n.error??"Nonzero exit or empty output").slice(0,500)});continue}if(r.engine!==i||n.engine!==i||!r.model||!n.model||r.model!==n.model||r.provider!==n.provider||r.model&&u.size>0&&!u.has(r.model)||i==="pi"&&c&&r.model!==`pi:${c}`){w++,m.push({trial:e+1,reason:"Harness, provider or model changed within the experiment"});continue}r.model&&u.add(r.model),n.model&&u.add(n.model);let[a,h]=await Promise.all([M({prompt:t.taskPrompt,output:r.output,expectations:v,...g}),M({prompt:t.taskPrompt,output:n.output,expectations:v,...g})]),T=JSON.stringify([a.judge_engine??null,a.judge_model??null]);if([a,h].some(y=>y.summary.pass_rate==null||y.summary.errored||y.summary.total!==v.length)||a.judge_model!==h.judge_model||a.judge_engine!==h.judge_engine||b!==void 0&&b!==T){w++,m.push({trial:e+1,reason:"Grading incomplete or judge changed; not a model failure"});continue}b=T,k={engine:a.judge_engine??null,model:a.judge_model??null},s.push({withScore:J(a),withoutScore:J(h),withLatency:r.durationMs/1e3,withoutLatency:n.durationMs/1e3,withTokens:r.totalTokens,withoutTokens:n.totalTokens,...r.costUsd!==void 0?{withCostUsd:r.costUsd}:{},...n.costUsd!==void 0?{withoutCostUsd:n.costUsd}:{}})}if(s.length===0){let e=`no trials completed (${w}/${t.trials} runs errored \u2014 is the ${i} CLI available?)`;return await p(t.id,{status:"failed",error:e,result:{pairs:s,excluded:m,completedTrials:0,engine:i}}),{status:"failed",requestedTrials:t.trials,completedTrials:0}}let o=U(s.map(e=>({...e,withCost:e.withCostUsd,withoutCost:e.withoutCostUsd})));return await p(t.id,{status:"completed",result:{verdict:o,pairs:s,excluded:m,judge:g,actualJudge:k,methodology:"v2-neutral-appended-memory",completedTrials:s.length,engine:i,model:[...u][0]}}),{status:"completed",requestedTrials:t.trials,completedTrials:s.length,significant:o.significant,delta:o.delta}}catch(o){let e=o instanceof Error?o.message:String(o);return await p(t.id,{status:"failed",error:e.slice(0,500),result:{pairs:s,excluded:m,completedTrials:s.length,engine:i,model:[...u][0]??null,judge:g,actualJudge:k,methodology:"v2-neutral-appended-memory"}}).catch(()=>{}),{status:"failed",requestedTrials:t.trials,completedTrials:s.length}}}x(z,"processMemoryAb");export{z as a};
@@ -0,0 +1 @@
1
+ import{a as t}from"./chunk-ZLLER3HP.js";import{readFile as b,stat as w}from"node:fs/promises";import{homedir as F}from"node:os";import{isAbsolute as y,join as f,resolve as E,sep as v}from"node:path";var p="capture.json",C={codex:{section:"codex",label:"Codex capture",envFlag:"RULEMETRIC_CODEX_CAPTURE",envRoots:"RULEMETRIC_CODEX_ROOTS"},pi:{section:"pi",label:"Pi capture",envFlag:"RULEMETRIC_PI_CAPTURE",envRoots:"RULEMETRIC_PI_ROOTS"},hooks:{section:"hooks",label:"Hook capture",envFlag:"RULEMETRIC_HOOKS_CAPTURE",envRoots:"RULEMETRIC_HOOKS_ROOTS"}};function T(e,r){return e==="~"?r:e.startsWith("~/")?f(r,e.slice(2)):e}t(T,"expandTilde");function R(e,r){return e.map(o=>typeof o=="string"?o.trim():"").filter(Boolean).map(o=>T(o,r)).filter(o=>y(o)).map(o=>E(o))}t(R,"normaliseRoots");function P(e){return{mode:"off",roots:[],source:"config",error:e}}t(P,"failClosed");async function g(e,r){let o=r.env??process.env,n=r.home??F(),i=o[e.envFlag]?.trim().toLowerCase();if(i==="off"||i==="none"||i==="0")return{mode:"off",roots:[],source:"env"};if(i==="all"||i==="1")return{mode:"all",roots:[],source:"env"};let c=o[e.envRoots]?.trim();if(c){let h=R(c.split(","),n);return h.length>0?{mode:"allowlist",roots:h,source:"env"}:{mode:"off",roots:[],source:"env",error:`${e.envRoots} had no absolute paths`}}let s=f(r.configDir,p),l;try{l=await b(s,"utf8")}catch{return{mode:"all",roots:[],source:"default"}}let u;try{u=JSON.parse(l)}catch{return P(`${p} is present but is not valid JSON \u2014 ${e.label} is OFF until it parses.`)}let a=u?.[e.section];if(!a||typeof a!="object")return{mode:"all",roots:[],source:"default"};let d=typeof a.mode=="string"?a.mode.trim().toLowerCase():void 0;if(d==="off")return{mode:"off",roots:[],source:"config"};if(d==="all")return{mode:"all",roots:[],source:"config"};let m=Array.isArray(a.roots)?a.roots:[];if(d===void 0&&m.length===0)return{mode:"all",roots:[],source:"default"};let x=R(m,n);return x.length===0?P(`${p} selects an allowlist but lists no roots (absolute paths required) \u2014 ${e.label} is OFF.`):{mode:"allowlist",roots:x,source:"config"}}t(g,"loadSectionScope");async function _(e){return g(C.codex,e)}t(_,"loadCodexCaptureScope");async function M(e){return g(C.hooks,e)}t(M,"loadHooksCaptureScope");async function k(e){return g(C.pi,e)}t(k,"loadPiCaptureScope");function N(e,r){if(e.mode==="off")return!1;if(e.mode==="all")return!0;if(!r)return!1;let o=E(r);return e.roots.some(n=>o===n||o.startsWith(n.endsWith(v)?n:n+v))}t(N,"isPathInScope");function S(e,r){if(e.error)return`OFF \u2014 ${e.error}`;switch(e.mode){case"off":return`off (${e.source}) \u2014 ${r}`;case"allowlist":return`scoped to ${e.roots.length} path${e.roots.length===1?"":"s"} (${e.source})`;default:return"all projects (unscoped)"}}t(S,"describeCaptureScope");function U(e){return S(e,"no Codex transcripts are swept")}t(U,"describeCodexCaptureScope");function D(e){return S(e,"no hook-captured sessions are uploaded")}t(D,"describeHooksCaptureScope");function L(e){return S(e,"no Pi transcripts are swept")}t(L,"describePiCaptureScope");function O(e,r){let o=null,n=null;return async()=>{let i=f(e.configDir,p),c;try{let u=await w(i);c=`${u.mtimeMs}:${u.size}`}catch{c="absent"}if(o&&n===c)return o;let s=await r(e),l=o===null||o.mode!==s.mode||o.error!==s.error||o.roots.join("\0")!==s.roots.join("\0");return o=s,n=c,l&&e.onChange?.(s),s}}t(O,"createScopeWatcher");function A(e){return O(e,_)}t(A,"createCodexScopeWatcher");function J(e){return O(e,k)}t(J,"createPiScopeWatcher");export{p as a,_ as b,M as c,k as d,N as e,S as f,U as g,D as h,L as i,A as j,J as k};
@@ -1 +1 @@
1
- import{h as $}from"./chunk-RJX75Y7J.js";import{h}from"./chunk-4FSQSETR.js";import{e as b}from"./chunk-APDRR6FS.js";import{a as g}from"./chunk-ZLLER3HP.js";import{existsSync as A,statSync as w}from"node:fs";async function R(y,k){let n=g(s=>k?.logger?.info?.(s)??console.log(s),"log"),{projectPath:o}=y,r=`[cron_auto_accept_suggestions] ${o}`;if(!o)return{skipped:"no-project-path"};if(!A(o)||!w(o).isDirectory())return n(`${r}: project directory no longer exists on this machine \u2014 skipping`),{skipped:"project-path-missing"};let e=await $(()=>b(`/api/instruction-suggestions/auto-acceptable?projectPath=${encodeURIComponent(o)}`),{log:n,label:"auto-acceptable",idempotent:!0});if(!e.consent.allowed)return n(`${r}: ${e.consent.reason??"no consent"} (${e.consent.source})`),{skipped:"no-consent",reason:e.consent.reason};for(let s of e.refused)n(`${r}: refused "${s.name}" \u2014 ${s.reason}`);if(e.eligible.length===0)return n(`${r}: nothing to adopt`+(e.budget?` (rules ${e.budget.used}/${e.budget.max}`+(e.budget.skillsUsed!==void 0?`, skills ${e.budget.skillsUsed}`+(e.budget.skillsMax==null?" (uncapped)":`/${e.budget.skillsMax}`):"")+` used in ${e.budget.windowDays}d)`:"")),{skipped:"nothing-eligible",refused:e.refused.length,adopted:0};let i=0,f=0,a=0,l=0,d=0,u=0,c=0,m=[];for(let s of e.eligible)try{let t=await h({suggestionId:s.id,dir:o,projectPath:o,actor:"auto"});if(t.action==="added")i+=1,m.push(t.name),s.type==="skill"&&(f+=1),n(`${r}: adopted ${s.type==="skill"?"skill":"rule"} "${t.name}" (score ${s.score.toFixed(2)})`);else if(t.action==="redundant"){t.partialOverlap?d+=1:l+=1;for(let p of t.messages)n(`${r}: ${p}`)}else if(t.action==="unresolvable-reference"){u+=1;for(let p of t.messages)n(`${r}: ${p}`)}else a+=1,n(`${r}: "${t.name}" was already in CLAUDE.md`)}catch(t){c+=1,n(`${r}: failed to adopt "${s.name}" \u2014 ${t instanceof Error?t.message:String(t)}`)}return n(`${r}: ${i} adopted, ${a} already present, ${l} already covered in other words, ${d} refused for partial overlap, ${u} refused for naming files this project does not have, ${c} failed, ${e.refused.length} refused upstream. Undo any of them with \`rulemetric suggestions undo <instruction-id>\`.`),{adopted:i,skills:f,alreadyPresent:a,redundant:l,partialOverlaps:d,unresolvableReferences:u,failed:c,refused:e.refused.length,names:m}}g(R,"cronAutoAcceptSuggestions");export{R as a};
1
+ import{h as $}from"./chunk-I6ZQOMZS.js";import{h}from"./chunk-2UK4DZFW.js";import{e as b}from"./chunk-76UKAFNM.js";import{a as g}from"./chunk-ZLLER3HP.js";import{existsSync as A,statSync as w}from"node:fs";async function R(y,k){let n=g(s=>k?.logger?.info?.(s)??console.log(s),"log"),{projectPath:o}=y,r=`[cron_auto_accept_suggestions] ${o}`;if(!o)return{skipped:"no-project-path"};if(!A(o)||!w(o).isDirectory())return n(`${r}: project directory no longer exists on this machine \u2014 skipping`),{skipped:"project-path-missing"};let e=await $(()=>b(`/api/instruction-suggestions/auto-acceptable?projectPath=${encodeURIComponent(o)}`),{log:n,label:"auto-acceptable",idempotent:!0});if(!e.consent.allowed)return n(`${r}: ${e.consent.reason??"no consent"} (${e.consent.source})`),{skipped:"no-consent",reason:e.consent.reason};for(let s of e.refused)n(`${r}: refused "${s.name}" \u2014 ${s.reason}`);if(e.eligible.length===0)return n(`${r}: nothing to adopt`+(e.budget?` (rules ${e.budget.used}/${e.budget.max}`+(e.budget.skillsUsed!==void 0?`, skills ${e.budget.skillsUsed}`+(e.budget.skillsMax==null?" (uncapped)":`/${e.budget.skillsMax}`):"")+` used in ${e.budget.windowDays}d)`:"")),{skipped:"nothing-eligible",refused:e.refused.length,adopted:0};let i=0,f=0,a=0,l=0,d=0,u=0,c=0,m=[];for(let s of e.eligible)try{let t=await h({suggestionId:s.id,dir:o,projectPath:o,actor:"auto"});if(t.action==="added")i+=1,m.push(t.name),s.type==="skill"&&(f+=1),n(`${r}: adopted ${s.type==="skill"?"skill":"rule"} "${t.name}" (score ${s.score.toFixed(2)})`);else if(t.action==="redundant"){t.partialOverlap?d+=1:l+=1;for(let p of t.messages)n(`${r}: ${p}`)}else if(t.action==="unresolvable-reference"){u+=1;for(let p of t.messages)n(`${r}: ${p}`)}else a+=1,n(`${r}: "${t.name}" was already in CLAUDE.md`)}catch(t){c+=1,n(`${r}: failed to adopt "${s.name}" \u2014 ${t instanceof Error?t.message:String(t)}`)}return n(`${r}: ${i} adopted, ${a} already present, ${l} already covered in other words, ${d} refused for partial overlap, ${u} refused for naming files this project does not have, ${c} failed, ${e.refused.length} refused upstream. Undo any of them with \`rulemetric suggestions undo <instruction-id>\`.`),{adopted:i,skills:f,alreadyPresent:a,redundant:l,partialOverlaps:d,unresolvableReferences:u,failed:c,refused:e.refused.length,names:m}}g(R,"cronAutoAcceptSuggestions");export{R as a};
@@ -0,0 +1 @@
1
+ import{a as z}from"./chunk-5RBLIVBF.js";import{a as L}from"./chunk-7MTYUTUN.js";import{b as A}from"./chunk-OP4U3XBZ.js";import{a as j,c as G}from"./chunk-H6FVXVGG.js";import{f as P}from"./chunk-SWSOEYC7.js";import{a as S}from"./chunk-DVU5PHPM.js";import{a as J,f as T}from"./chunk-FBSZ6KCM.js";import{e as y,f as R,h as f}from"./chunk-76UKAFNM.js";import{a as E}from"./chunk-ZLLER3HP.js";async function X(s,v){let{mirrorId:l,evalTargetId:u}=s,o=s.measurement?{...s.config,...G({...s.config,measurement:s.measurement})}:s.config,a=E(e=>v.logger.info(e),"log"),i=await y(`/api/eval-targets/${u}`),b=await y(`/api/eval-targets/${u}/evals`);if(b.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await A({content:i.content,name:i.name,...s.measurement?{measurement:s.measurement}:{}});if(e===null)throw new Error("Case generation requires a local LLM backend (Claude or Codex CLI) \u2014 none available on this worker.");let r=[];for(let t of e)r.push(await R(`/api/eval-targets/${u}/evals`,t));b=r,a(`Generated ${r.length} eval case(s)`)}if(b.length===0)throw new z("No evals defined for target");let F=o.runsPerEval??1,_=o.timeout??12e4,I=o.iteration??1,k=new Set;if(v.job.attempts>1)for(let r=0;;r+=100){let t=await y(`/api/eval-targets/${u}/runs?jobId=${l}&limit=100&offset=${r}`);for(let n of t)k.add(`${n.evalId}|${n.configuration}|${n.runNumber}|${n.iteration}`);if(t.length<100)break}let M=[{name:"with_target",content:i.content}];o.skipBaseline||M.push({name:"without_target"});let d=[];for(let e of b)for(let r of M)for(let t=1;t<=F;t++)k.has(`${e.id}|${r.name}|${t}|${I}`)||d.push({eval_:e,configuration:r.name,targetContent:r.content,runNumber:t});k.size>0&&a(`Resuming attempt ${v.job.attempts}: ${k.size} run(s) already persisted, ${d.length} remaining`);let g=d.length,c=0,$=J(o.engine),p=Math.min(o.parallel??1,4);await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:0,current:null,message:`Starting ${g} eval runs (concurrency: ${p})...`}});let h=[];async function x(e){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${c+1}/${g}] ${r}`);let t=P({targetType:i.type,targetContent:e.targetContent,targetName:i.name,engine:$});t.leakedFiles.length&&a(`\u26A0 CONTAMINATED ${r}: ${t.leakedFiles.join(", ")} survived the strip`);try{let n=await T({prompt:e.eval_.prompt,targetContent:t.systemPrompt,workDir:t.workDir,timeout:_,model:o.model,engine:$}),m={};return!o.skipGrading&&e.eval_.expectations.length>0&&!n.error&&(m=await S({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),prompt:e.eval_.prompt,output:n.output,expectations:e.eval_.expectations,timeout:_})),{jobId:l,evalId:e.eval_.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:e.configuration,runNumber:e.runNumber,iteration:I,status:n.error?"failed":"completed",outputs:{...n.error?{error:n.error}:{transcript:n.output,...n.model?{model:n.model}:{}},methodology:t.methodology,delivery:t.delivery,isolated:t.isWorktree,engine:n.engine??$,model:n.model??null,deliveryRegime:`${i.type}:${$}:${t.methodology}`,...s.measurement?{measurement:s.measurement}:{},...n.provider?{provider:n.provider}:{},...n.costUsd!=null?{costUsd:n.costUsd}:{},...t.leakedFiles.length?{leakedFiles:t.leakedFiles}:{}},timing:{duration_ms:n.durationMs,total_tokens:n.totalTokens},grading:m,worktree:t.isWorktree?!0:void 0}}finally{t.cleanup()}}if(E(x,"processItem"),p<=1)for(let e of d){let r=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Executing ${r}...`}});let t=await x(e);await R("/api/eval-runs",t),h.push(t),c++,await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:r,message:`Completed ${r}`}})}else{a(`Running ${g} evals with concurrency=${p} (worktree isolation)`);for(let e=0;e<d.length;e+=p){let r=d.slice(e,e+p),t=`batch ${Math.floor(e/p)+1}/${Math.ceil(d.length/p)}`;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Executing ${t} (${r.length} parallel)...`}});let n=await Promise.all(r.map(x));for(let m of n)await R("/api/eval-runs",m),h.push(m),c++;await f(`/api/eval-jobs/${l}/progress`,{status:"running",progress:{total:g,completed:c,current:t,message:`Completed ${t}`}})}}let N=O(h),w;if(!o.skipGrading&&h.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${l}...`);let e=b.map(r=>{let n=h.filter(m=>m.evalId===r.id&&m.configuration==="with_target")[0];return{evalName:r.name,prompt:r.prompt,expectations:r.expectations,grading:n?.grading?n.grading:null,output:n?.outputs?.transcript?.slice(0,500)}});w=await L({...j({engine:$,model:o.model},{engine:o.graderEngine,model:o.graderModel}),targetName:i.name,evalResults:e,timeout:6e4}),a(`Meta-judge: quality=${w.quality_score}/5, issues=${w.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let C=w?{...N,meta_judgement:w}:N;return a(`Job ${l} completed: ${c}/${g} runs`),await f(`/api/eval-jobs/${l}/state`,{result:C}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),C}E(X,"processEval");function O(s){let v=s.filter(a=>a.status==="completed"),l=s.filter(a=>a.status==="failed"),u=v.filter(a=>{let i=a.grading;return i&&Object.keys(i).length>0}),o=u.length>0?u.reduce((a,i)=>a+(i.grading?.summary?.pass_rate??0),0)/u.length:null;return{total:s.length,completed:v.length,failed:l.length,avgPassRate:o}}E(O,"buildSummary");export{X as a};
@@ -1 +1 @@
1
- import{c as u}from"./chunk-5XK6LB2T.js";import{b as c,e as y,f as m}from"./chunk-APDRR6FS.js";import{a as n,b as t,i as s,k as p}from"./chunk-PZNWH4VQ.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
1
+ import{c as u}from"./chunk-FKTT7A4H.js";import{b as c,e as y,f as m}from"./chunk-76UKAFNM.js";import{a as n,b as t,i as s,k as p}from"./chunk-PZNWH4VQ.js";import{a}from"./chunk-ZLLER3HP.js";import{hostname as l}from"node:os";async function R(f,r,h){t();let o=process.env.RULEMETRIC_API_KEY,d=n().apiKey;if(o||d)try{await y("/api/profile");return}catch(e){if(!(e instanceof c)||e.statusCode!==401)return;if(o){r('Your exported RULEMETRIC_API_KEY was rejected (revoked?). Unset it or replace it with a fresh key (`rulemetric auth create-key --name "my-laptop"`).');return}p(),t(),r("Stored API key was rejected (revoked?) \u2014 replacing it with a fresh one.")}let i=`${l()} (auto)`;try{let e=await m("/api/auth/api-keys",{name:i});s(e.key,process.env.RULEMETRIC_API_URL),t(),f(`Created API key "${i}" for hooks + proxy auth (saved to your config).`),u("key_created",{},h)}catch(e){let k=e instanceof Error?e.message:String(e);r(`Could not auto-create an API key (${k}). Hooks/proxy will work via your session token for ABOUT AN HOUR \u2014 the token expires, and capture then stops until a key exists. Run \`rulemetric auth create-key --name "my-laptop"\` (or \`rulemetric auth login\` again) to fix this permanently.`)}}a(R,"ensureDeviceApiKey");export{R as a};
@@ -1,2 +1,2 @@
1
- import{c as f}from"./chunk-KV5A77XW.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-APDRR6FS.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
1
+ import{c as f}from"./chunk-ISFPPDDB.js";import{a as l}from"./chunk-5RBLIVBF.js";import{b as g,e as k}from"./chunk-76UKAFNM.js";import{a as m}from"./chunk-ZLLER3HP.js";async function C(w,i={}){let R=i.removeWorktreeFn??f,t=i.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
2
2
  `)),j=i.getRunDetail??(async e=>{try{return await k(`/api/runs/${e}`)}catch(r){if(r instanceof g&&r.statusCode===404)return null;throw r}}),{runId:o}=w,n=await j(o);if(!n)throw new l(`Run ${o} not found`);if(!n.run.projectPath)throw new l(`Run ${o} has no projectPath; cannot resolve a repo root for worktree cleanup`);let a=n.run.projectPath,$=n.sessions.filter(e=>e.endedAt!=null),s=[],u=0,c=0,p=0,d=0,h=new Set;for(let e of $)if(!(!e.projectPath||e.projectPath===a)&&!h.has(e.projectPath)){h.add(e.projectPath);try{let r=await R({repoRoot:a,worktreePath:e.projectPath});r.removed?(u++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),t(`removed worktree ${e.projectPath} (session ${e.id})`)):r.reason==="dirty"?(c++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),t(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(p++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),t(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(r){let P=r instanceof Error?r.message:String(r);d++,s.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:P.slice(0,1e3)}),t(`error removing worktree ${e.projectPath} (session ${e.id}): ${P}`)}}return t(`run ${o} cleanup: removed=${u} skippedDirty=${c} absent=${p} errored=${d}`),{runId:o,repoRoot:a,removed:u,skippedDirty:c,absent:p,errored:d,worktrees:s}}m(C,"processRunCleanup");export{C as a};
@@ -1,4 +1,4 @@
1
- import{a as g,c as w}from"./chunk-UPFH72PF.js";import{g as p,h as m,i as k,j as h,k as y}from"./chunk-J5HW45PZ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as u,readFileSync as f,writeFileSync as v,copyFileSync as R,rmSync as P,statSync as x,readdirSync as $,mkdirSync as j}from"node:fs";import{join as i,dirname as L}from"node:path";import{homedir as c}from"node:os";var I=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function _(e){return I.some(t=>e.includes(t))}s(_,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}s(K,"backupPathFor");function b(e){return e.split(`
1
+ import{a as g,c as w}from"./chunk-UPFH72PF.js";import{g as p,h as m,i as k,j as h,k as y}from"./chunk-42A4PUW7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as u,readFileSync as f,writeFileSync as v,copyFileSync as R,rmSync as P,statSync as x,readdirSync as $,mkdirSync as j}from"node:fs";import{join as i,dirname as L}from"node:path";import{homedir as c}from"node:os";var I=["/plugins/cache/","/plugins/marketplaces/","/node_modules/","/.git/"];function _(e){return I.some(t=>e.includes(t))}s(_,"isUnownedPath");function K(e,t){let n=i(c(),".config","rulemetric","retraction-backups",t),r=e.replace(/^\/+/,"").replace(/\//g,"__");return i(n,r)}s(K,"backupPathFor");function b(e){return e.split(`
2
2
  `).slice(0,40).map(t=>`- ${t}`).join(`
3
3
  `)}s(b,"shortDiff");function d(e,t,n){return{kind:e,path:t,ok:!1,refusal:n,preview:"",warnings:[]}}s(d,"refuse");function B(e){let[t,...n]=e.split("::"),r=n.join("::");if(!r)return null;switch(t){case"claude_md":return{kind:"claude_md_section",target:r};case"memory":return{kind:"memory_section",target:r};case"skill":return{kind:"skill_file",target:r};default:return null}}s(B,"pathFromContextIdentity");function D(e,t){let n=e.replace(/^skills--/,""),r=w(e);return[...(r===n?[n]:[r,n]).flatMap(a=>[i(t,...g.split("/"),a,"SKILL.md"),i(t,".claude","skills",a,"SKILL.md"),i(t,".claude","skills",`${a}.md`),i(c(),...g.split("/"),a,"SKILL.md"),i(c(),".claude","skills",a,"SKILL.md"),i(c(),".claude","skills",`${a}.md`)]),...F(n)]}s(D,"candidateSkillPaths");function F(e){let t=i(c(),".claude","plugins","marketplaces");if(!u(t))return[];let n=[];try{for(let r of $(t))n.push(i(t,r,"skills",e,"SKILL.md"),i(t,r,"plugins",e,"SKILL.md"),i(t,r,"skills",`${e}.md`))}catch{}return n}s(F,"pluginSkillPaths");function H(e){switch(e.kind){case"claude_md_section":case"memory_section":case"claude_md_block":return C(e);case"skill_file":return E(e);case"settings_hook":case"mcp_server":return N(e)}}s(H,"planRetraction");function C(e){let t=e.target;if(!u(t))return d(e.kind,t,`File does not exist: ${t}`);if(_(t))return d(e.kind,t,`Refusing to edit a path this tool does not own: ${t}`);let n=f(t,"utf-8"),r=e.body?m(n,e.body):p(n,e.heading??"");if(!r.removed){let l={"not-found":"The content is not present in this file (already removed, or edited since).",ambiguous:"The content appears more than once \u2014 refusing to guess which copy the verdict was about.","would-empty-file":"Removing it would empty the file. Delete the file by hand if that is really the intent."}[r.reason??"not-found"];return d(e.kind,t,l)}let o=[];return S(t,e.cwd)||o.push("This file is not tracked by git in this repo \u2014 the timestamped backup is your only undo."),{kind:e.kind,path:t,ok:!0,preview:b(r.removedText??""),nextContent:r.content,warnings:o}}s(C,"planFileEdit");function E(e){let t=e.target.startsWith("/")?[e.target]:D(e.target,e.cwd),n=t.find(l=>u(l));if(!n)return d("skill_file",t[0]??e.target,`No local skill file found for "${e.target}". Searched:
4
4
  ${t.join(`
@@ -0,0 +1 @@
1
+ import{d as E}from"./chunk-H6FVXVGG.js";import{b as F,c as x}from"./chunk-KGURGIZ2.js";import{f as R}from"./chunk-76UKAFNM.js";import{a}from"./chunk-ZLLER3HP.js";var _="with_candidate",w="with_prior_version";function S(e){return JSON.stringify([e.outputs.engine??null,e.outputs.model??null,e.outputs.methodology??null,e.outputs.deliveryRegime??null,e.grading.judge_engine??null,e.grading.judge_model??null])}a(S,"observedExecutionKey");function I(e){let r=e.filter(n=>n.status==="completed"),i=new Set(r.map(n=>JSON.stringify([n.outputs.engine??null,n.outputs.model??null,n.outputs.methodology??null,n.outputs.deliveryRegime??null]))),t=new Set(r.filter(n=>n.grading.judge_model!=null).map(n=>JSON.stringify([n.grading.judge_engine??"claude",n.grading.judge_model])));return i.size===1&&t.size<=1?JSON.stringify([[...i][0],[...t][0]??null]):null}a(I,"measurementBatchKey");function A(e){let r=e.filter(t=>t.configuration===_),i=[];for(let t of r){let n=e.find(s=>s.configuration===w&&s.evalId===t.evalId&&s.runNumber===t.runNumber);if(!n||S(n)!==S(t))continue;let l=h(t),m=h(n);l==null||m==null||i.push({withScore:l,withoutScore:m})}return i}a(A,"pairCandidateRuns");function h(e){return e.status!=="completed"?null:e.grading?.summary?.pass_rate??null}a(h,"evidenceOf");function $(e){let r=[],i=0;for(let t of e){if(t.status==="failed"){r.push(t.failure??{kind:"unknown",class:"infrastructure"});continue}h(t)==null&&(i+=1)}return{infrastructureFailed:r.length,ungradeable:i,summary:F(r)}}a($,"accountForFailures");function Q(e){let{pairs:r,minPairs:i,accounting:t}=e;return r>=i?{kind:"proceed"}:t.infrastructureFailed<=0?{kind:"proceed"}:{kind:"infrastructure-incomplete",reason:`${r}/${i} pair(s) \u2014 ${t.infrastructureFailed} run(s) never executed (${t.summary.describe()}). Retry when the environment recovers; this is not a statement about the target.`}}a(Q,"attributeShortfall");function k(e,r,i,t){let n=[];for(let l of e)n.push({eval_:l,configuration:_,targetContent:r,runNumber:t}),n.push({eval_:l,configuration:w,targetContent:i,runNumber:t});return n}a(k,"buildCandidateQueue");async function j(e){let{cases:r,candidateContent:i,priorVersionContent:t,concurrency:n,runNumber:l,opts:m,onLog:s=a(()=>{},"onLog")}=e,g=k(r,i,t,l),o=[],y=Math.max(1,n),p=null;for(let u=0;u<g.length;u+=y){let d=g.slice(u,u+y);o.push(...await Promise.all(d.map(c=>E(c,m,s))));let C=o.find(c=>c.failure&&x(c.failure.kind));if(C?.failure){p=C.failure.kind;let c=g.length-o.length;s(` \u26D4 aborting batch \u2014 ${p}: the account is out of quota. Skipped ${c} remaining run(s) that would certainly have failed.`);break}}for(let u of o)try{await R("/api/eval-runs",u)}catch(d){s(` \u26A0 failed to post a run result: ${d instanceof Error?d.message:String(d)}`)}let b=A(o),f=$(o),v=r.length-b.length;if(v>0){let u=f.infrastructureFailed?` \u2014 ${f.infrastructureFailed} run(s) never executed (${f.summary.describe()})`:"";s(` \u26A0 ${v}/${r.length} case(s) produced no usable pair (failed or ungradeable arm)${u}`)}return{completed:o.filter(u=>u.status==="completed").length,failed:o.filter(u=>u.status==="failed").length,results:o,pairs:b,accounting:f,abortedForQuota:p}}a(j,"runCandidateBatchAndPost");export{_ as a,w as b,S as c,I as d,A as e,$ as f,Q as g,k as h,j as i};
@@ -1,4 +1,4 @@
1
- import{a as y}from"./chunk-6XTLP2G7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawn as v}from"node:child_process";import{mkdtempSync as O,readFileSync as D,rmSync as I}from"node:fs";import{tmpdir as M}from"node:os";import{join as E}from"node:path";var R=s(t=>`codex:${t}`,"codexModelId");function $(t,o){return["exec","--json","--sandbox","read-only","--skip-git-repo-check","--ephemeral","--model",t,"--output-last-message",o,"-"]}s($,"buildCodexArgs");function A(t){let o;for(let m of t.split(`
1
+ import{a as y}from"./chunk-6XTLP2G7.js";import{a as s}from"./chunk-ZLLER3HP.js";import{spawn as v}from"node:child_process";import{mkdtempSync as O,readFileSync as D,rmSync as I}from"node:fs";import{tmpdir as M}from"node:os";import{join as E}from"node:path";var R=s(t=>`codex:${t.replace(/^codex:/,"")}`,"codexModelId");function $(t,o){return["exec","--json","--sandbox","read-only","--skip-git-repo-check","--ephemeral","--model",t.replace(/^codex:/,""),"--output-last-message",o,"-"]}s($,"buildCodexArgs");function A(t){let o;for(let m of t.split(`
2
2
  `)){let u=m.trim();if(!u.startsWith("{"))continue;let n;try{n=JSON.parse(u)}catch{continue}if(typeof n!="object"||n===null)continue;let c=n.usage;if(typeof c!="object"||c===null)continue;let i=s(x=>{let a=c[x];return typeof a=="number"&&Number.isFinite(a)?a:0},"num"),d=i("input_tokens"),l=i("output_tokens");o={inputTokens:d,cachedInputTokens:i("cached_input_tokens"),outputTokens:l,reasoningOutputTokens:i("reasoning_output_tokens"),totalTokens:d+l}}return o}s(A,"parseCodexUsage");async function L(t){let{prompt:o,systemPrompt:m,model:u,timeout:n=12e4,workDir:c=process.cwd()}=t,i=m?`${m}
3
3
 
4
4
  ${o}`:o,d=y("codex");if(!d)return{output:"",exitCode:null,durationMs:0,error:"Codex CLI not found on PATH, well-known install dirs, or the node bin dir \u2014 is it installed?"};let l=O(E(M(),"rulemetric-codex-")),x=E(l,"last-message.txt"),a=Date.now();return new Promise(S=>{let f={...process.env};delete f.HTTPS_PROXY;let _=["/opt/homebrew/bin","/usr/local/bin"],k=(f.PATH??"").split(":").filter(Boolean),C=_.filter(e=>!k.includes(e));C.length&&(f.PATH=[...k,...C].join(":"));let r=v(d,$(u,x),{cwd:c,env:f,stdio:["pipe","pipe","pipe"]}),b="",p="",w=256*1024;r.stdout.on("data",e=>{p+=e.toString(),p.length>w&&(p=p.slice(-w))}),r.stderr.on("data",e=>{b+=e.toString()});let g=s(e=>{I(l,{recursive:!0,force:!0}),S({...e,durationMs:Date.now()-a})},"finish"),h=setTimeout(()=>{r.kill("SIGTERM"),g({output:"",exitCode:null,error:`codex exec timed out after ${n}ms`})},n);r.on("error",e=>{clearTimeout(h),g({output:"",exitCode:null,error:`failed to spawn codex: ${e.message} (is the Codex CLI installed?)`})}),r.on("close",e=>{clearTimeout(h);let T="";try{T=D(x,"utf8").trim()}catch{}let P=A(p);if(e!==0||T===""){g({output:T,exitCode:e,usage:P,error:`codex exec failed (exit ${e}): ${b.trim().slice(-500)||"no last message produced"}`});return}g({output:T,exitCode:e,model:R(u),usage:P})}),r.stdin.write(i),r.stdin.end()})}s(L,"executeCodexEval");export{R as a,$ as b,A as c,L as d};
@@ -0,0 +1 @@
1
+ import{a as v}from"./chunk-U2NT5OSQ.js";import{a as u}from"./chunk-GYNZ3OZF.js";import{c as k,e as E}from"./chunk-UPFH72PF.js";import{a}from"./chunk-ZLLER3HP.js";import{mkdirSync as N,readdirSync as h,rmSync as I,writeFileSync as S}from"node:fs";import{join as p,relative as y,sep as _}from"node:path";var b="v2-neutral-workspace";function C(e){return e==="codex"?"v3-codex-project-neutral":b}a(C,"evalMethodology");var T=["CLAUDE.md","CLAUDE.local.md","AGENTS.md"],A=new Set(["node_modules",".git","dist","build",".next","coverage"]),W={claude:{file:u.claude_code,delivery:"claude_md"},codex:{file:u.codex,delivery:"agents_md"},pi:{file:u.codex,delivery:"agents_md"}};function x(e,s="claude"){let n=[],t=new Set(T);s==="codex"&&t.add("AGENTS.override.md");let d=a(i=>{let r;try{r=h(i,{withFileTypes:!0})}catch{return}for(let o of r){let l=p(i,o.name);if(s==="codex"&&[".codex",".agents"].includes(o.name)){n.push(y(e,l));continue}if(o.isDirectory()){if(A.has(o.name)||o.name.startsWith(".")&&o.name!==".claude")continue;d(l)}else t.has(o.name)&&n.push(y(e,l))}},"walk");return d(e),n}a(x,"findAmbientInstructionFiles");function F(e,s){let n=[];for(let t of x(e,s))try{I(p(e,t),{force:!0,recursive:!0}),n.push(t)}catch{}return n}a(F,"stripAmbientInstructions");function O(e){return/[a-z0-9]/i.test(e??"")?k(e??""):"eval-target-skill"}a(O,"skillSlug");function j(e={}){let{baseDir:s,targetType:n,targetContent:t,targetName:d,engine:i="claude"}=e,r=v(s),o=F(r.workDir,i),l="none",m,f=[];if(t)switch(n){case"prompt":m=t,l="system_prompt";break;case"skill":{if(i!=="claude")throw r.cleanup(),new Error(`createEvalWorkspace: a skill target cannot be measured on ${i} \u2014 .claude/skills is read by Claude Code only, so both arms would run without it.`);let c=O(d),g=E({dirName:c,content:t});D(r.workDir,p(".claude","skills",c,"SKILL.md"),g.text),l="skill";break}default:{let{file:c,delivery:g}=W[i];D(r.workDir,c,t),f.push(c),l=g;break}}let w=x(r.workDir,i).filter(c=>!f.includes(c));return{workDir:r.workDir,systemPrompt:m,delivery:l,methodology:C(i),isWorktree:r.isWorktree,strippedFiles:o,leakedFiles:w,cleanup:r.cleanup}}a(j,"createEvalWorkspace");function D(e,s,n){let t=p(e,s),d=t.slice(0,t.lastIndexOf(_));N(d,{recursive:!0}),S(t,n,"utf8")}a(D,"writeFileInWorkspace");export{b as a,C as b,T as c,x as d,O as e,j as f};
@@ -0,0 +1,25 @@
1
+ import{a as l,b as Mt}from"./chunk-ZLLER3HP.js";var Ve=["claude_code","cursor","vscode_copilot","copilot_agent","rulemetric_mcp","codex","pi","opencode","antigravity"],Ke=["user_message","assistant_message","assistant_response","tool_call","tool_result","thinking","error"];var qt=new Set(["","unknown","<synthetic>"]);function Jt(e){if(typeof e!="string")return null;let t=e.trim();return qt.has(t)?null:t}l(Jt,"resolveEventModel");var A=class{static{l(this,"ClaudeCodeAdapter")}tool="claude_code";parse(t){let n=t.split(`
2
+ `).filter(p=>p.trim()),o=[];for(let p of n)try{o.push(JSON.parse(p))}catch{}let s=o.filter(p=>p.type==="user"||p.type==="assistant"),r=null,i=null,c={},a=o.find(p=>p.type==="user");a&&(r=a.cwd??null,i=a.gitBranch??null,a.version&&(c.claudeCodeVersion=a.version),a.sessionId&&(c.sessionId=a.sessionId));let u=o.find(p=>p.type==="assistant");u?.message?.model&&(c.model=u.message.model);let d=[],f=0;for(let p of s){let y=p.timestamp??new Date().toISOString();if(p.type==="user"){let g=p.message?.content;if(typeof g=="string")d.push({sequence:f++,eventType:"user_message",content:g,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:y,metadata:{}});else if(Array.isArray(g))for(let _ of g)_.type==="tool_result"&&d.push({sequence:f++,eventType:"tool_result",content:typeof _.content=="string"?_.content:JSON.stringify(_.content),toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:y,metadata:{toolUseId:_.tool_use_id}})}else if(p.type==="assistant"){let g=Array.isArray(p.message?.content)?p.message.content:[],_=p.message?.usage,x=_?{input:_.input_tokens??0,output:_.output_tokens??0,cacheRead:_.cache_read_input_tokens??0,cacheWrite:_.cache_creation_input_tokens??0}:null,v={};p.message?.model&&(v.model=p.message.model);let w=Jt(p.message?.model);p.message?.stop_reason&&(v.stopReason=p.message.stop_reason),p.requestId&&(v.requestId=p.requestId),_?.service_tier&&(v.serviceTier=_.service_tier),_?.speed&&(v.speed=_.speed),_?.cache_creation&&(v.cacheCreationDetail=_.cache_creation),_?.server_tool_use&&(v.serverToolUse=_.server_tool_use);for(let S of g)S.type==="text"?d.push({sequence:f++,eventType:"assistant_message",content:S.text??"",toolName:null,toolInput:null,toolOutput:null,tokenUsage:x,model:w,timestamp:y,metadata:v}):S.type==="thinking"?d.push({sequence:f++,eventType:"thinking",content:S.thinking??"",toolName:null,toolInput:null,toolOutput:null,tokenUsage:x,model:w,timestamp:y,metadata:v}):S.type==="tool_use"&&d.push({sequence:f++,eventType:"tool_call",content:null,toolName:S.name??"unknown",toolInput:S.input??null,toolOutput:null,tokenUsage:x,model:w,timestamp:y,metadata:{...v,toolUseId:S.id}})}}let m=d.map(p=>p.timestamp).sort(),h=new Date().toISOString();return{tool:"claude_code",projectPath:r,gitBranch:i,startedAt:m[0]??h,endedAt:m[m.length-1]??null,events:d,metadata:c}}};var N=class{static{l(this,"CursorAdapter")}tool="cursor";parse(t){let n=Mt("better-sqlite3"),o=new n(t,{readonly:!0});try{let s=o.prepare("SELECT value FROM ItemTable WHERE key = 'composer.composerData'").get();return s?this.parseComposerJson(s.value):this.emptySession()}finally{o.close()}}parseComposerJson(t){let n;try{n=JSON.parse(t)}catch{return this.emptySession()}let o=Object.values(n.allComposers??{});if(o.length===0)return this.emptySession();let s=o.sort((u,d)=>{let f=u.createdAt?new Date(u.createdAt).getTime():0;return(d.createdAt?new Date(d.createdAt).getTime():0)-f})[0],r=s.conversation??[],i=[];for(let u=0;u<r.length;u++){let d=r[u],f=d.createdAt??new Date().toISOString();i.push({sequence:u,eventType:d.type===1?"user_message":"assistant_message",content:d.text,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:f,metadata:{}})}let c=i.map(u=>u.timestamp).sort(),a=new Date().toISOString();return{tool:"cursor",projectPath:null,gitBranch:null,startedAt:c[0]??a,endedAt:c[c.length-1]??null,events:i,metadata:{composerId:s.composerId}}}emptySession(){return{tool:"cursor",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var P=class{static{l(this,"VSCodeCopilotAdapter")}tool="vscode_copilot";parse(t){let n;try{n=JSON.parse(t)}catch{return this.emptySession()}let o=n.requests??[],s=[],r=0;for(let a of o){let u=a.timestamp?new Date(a.timestamp).toISOString():new Date().toISOString();if(s.push({sequence:r++,eventType:"user_message",content:a.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:u,metadata:{}}),a.response){let d=a.response.timestamp?new Date(a.response.timestamp).toISOString():u;s.push({sequence:r++,eventType:"assistant_message",content:a.response.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:d,metadata:{}})}}let i=s.map(a=>a.timestamp).sort(),c=new Date().toISOString();return{tool:"vscode_copilot",projectPath:null,gitBranch:null,startedAt:i[0]??c,endedAt:i[i.length-1]??null,events:s,metadata:{...n.requesterUsername&&{username:n.requesterUsername},...n.customTitle&&{title:n.customTitle}}}}emptySession(){return{tool:"vscode_copilot",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var b=class{static{l(this,"CopilotAgentAdapter")}tool="copilot_agent";parse(t){let n;try{n=JSON.parse(t)}catch{return this.emptySession()}let o=n.requests??[],s=[],r=0;for(let a of o){let u=a.timestamp?new Date(a.timestamp).toISOString():new Date().toISOString();if(s.push({sequence:r++,eventType:"user_message",content:a.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:u,metadata:{}}),a.toolCalls)for(let d of a.toolCalls){let f=d.timestamp?new Date(d.timestamp).toISOString():u;s.push({sequence:r++,eventType:"tool_call",content:null,toolName:d.name??"unknown",toolInput:d.input??null,toolOutput:d.output??null,tokenUsage:null,timestamp:f,metadata:{}})}if(a.response){let d=a.response.timestamp?new Date(a.response.timestamp).toISOString():u;s.push({sequence:r++,eventType:"assistant_message",content:a.response.message,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:d,metadata:{}})}}let i=s.map(a=>a.timestamp).sort(),c=new Date().toISOString();return{tool:"copilot_agent",projectPath:null,gitBranch:null,startedAt:i[0]??c,endedAt:i[i.length-1]??null,events:s,metadata:{...n.requesterUsername&&{username:n.requesterUsername},...n.customTitle&&{title:n.customTitle},...n.agentMode!=null&&{agentMode:n.agentMode}}}}emptySession(){return{tool:"copilot_agent",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};var D=class{static{l(this,"RuleMetricMcpAdapter")}tool="rulemetric_mcp";parse(t){let n;try{n=JSON.parse(t)}catch{return this.emptySession()}let s=(n.events??[]).map((i,c)=>({sequence:i.sequence??c,eventType:this.normalizeEventType(i.eventType),content:i.content??null,toolName:i.toolName??null,toolInput:i.toolInput??null,toolOutput:i.toolOutput??null,tokenUsage:i.tokenUsage??null,timestamp:i.timestamp??new Date().toISOString(),metadata:i.metadata??{}})),r=new Date().toISOString();return{tool:"rulemetric_mcp",projectPath:n.projectPath??null,gitBranch:n.gitBranch??null,startedAt:n.startedAt??s[0]?.timestamp??r,endedAt:n.endedAt??s[s.length-1]?.timestamp??null,events:s,metadata:n.metadata??{}}}normalizeEventType(t){return t&&["user_message","assistant_message","tool_call","tool_result","thinking","error"].includes(t)?t:"assistant_message"}emptySession(){return{tool:"rulemetric_mcp",projectPath:null,gitBranch:null,startedAt:new Date().toISOString(),endedAt:null,events:[],metadata:{}}}};function Bt(e){try{return JSON.parse(e)}catch{return e}}l(Bt,"safeJsonParse");function Q(e,t){return Array.isArray(e)?e.filter(n=>n.type&&t.includes(n.type)).map(n=>n.text??"").filter(Boolean).join(`
3
+
4
+ `):""}l(Q,"textFromBlocks");function Gt(e){if(!e)return null;let t=e.cached_input_tokens??0,n=Math.max(0,(e.input_tokens??0)-t),o=(e.output_tokens??0)+(e.reasoning_output_tokens??0);return n===0&&o===0&&t===0?null:{input:n,output:o,cacheRead:t,cacheWrite:0}}l(Gt,"tokenUsageFromCodex");function Lt(e){if(!e)return new Date().toISOString();let t=new Date(e);return Number.isFinite(t.getTime())?t.toISOString():new Date().toISOString()}l(Lt,"normalizeTimestamp");function tt(){return{sequence:0,model:null,prevCumulativeTotal:0,callNames:{}}}l(tt,"freshCodexState");var C=class{static{l(this,"CodexAdapter")}tool="codex";parse(t){let n=tt(),{events:o,projectPath:s,gitBranch:r,metadata:i}=this.parseLines(t,n),c=o.map(u=>u.timestamp).sort(),a=new Date().toISOString();return{tool:"codex",projectPath:s,gitBranch:r,startedAt:c[0]??a,endedAt:c[c.length-1]??null,events:o,metadata:i}}parseAppend(t,n){let o={...n,callNames:{...n.callNames}},{events:s}=this.parseLines(t,o);return{events:s,state:o}}parseLines(t,n){let o=t.split(`
5
+ `).filter(d=>d.trim()),s=[],r={},i=n.callNames,c=null,a=null,u=null;for(let d of o){let f;try{f=JSON.parse(d)}catch{continue}let m=f.payload;if(!m)continue;let h=Lt(f.timestamp);if(f.type==="session_meta"){u=m.session_id??m.id??u,c=m.cwd??c,m.git_branch&&(a=m.git_branch),m.model&&(n.model=m.model),r.sessionId=u,r.codexSessionId=u,r.originator=m.originator,r.source=m.source,r.modelProvider=m.model_provider,r.codexCliVersion=m.cli_version;continue}if(f.type==="turn_context"){c=m.cwd??c,m.model&&(n.model=m.model,r.model=m.model);continue}if(f.type==="response_item"&&m.type==="message"){if(m.role==="user"){let p=Q(m.content,["input_text"]);if(!p)continue;s.push({sequence:n.sequence++,eventType:"user_message",content:p,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:h,metadata:{}})}else if(m.role==="assistant"){let p=Q(m.content,["output_text"]);if(!p)continue;s.push({sequence:n.sequence++,eventType:"assistant_message",content:p,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,model:n.model,timestamp:h,metadata:n.model?{model:n.model}:{}})}continue}if(f.type==="response_item"&&m.type==="function_call"){let p=m.name??"unknown";m.call_id&&(i[m.call_id]=p);let y=typeof m.arguments=="string"?Bt(m.arguments):{};s.push({sequence:n.sequence++,eventType:"tool_call",content:null,toolName:p,toolInput:y&&typeof y=="object"&&!Array.isArray(y)?y:{arguments:y},toolOutput:null,tokenUsage:null,model:n.model,timestamp:h,metadata:{callId:m.call_id}});continue}if(f.type==="response_item"&&m.type==="function_call_output"){let p=m.call_id?i[m.call_id]??null:null;s.push({sequence:n.sequence++,eventType:"tool_result",content:m.output??null,toolName:p,toolInput:null,toolOutput:m.output==null?null:{output:m.output},tokenUsage:null,model:n.model,timestamp:h,metadata:{callId:m.call_id}});continue}if(f.type==="event_msg"&&m.type==="token_count"){let p=m.info,y=p?.total_token_usage?.total_tokens??0;if(y>0&&y===n.prevCumulativeTotal)continue;y>0&&(n.prevCumulativeTotal=y);let g=Gt(p?.last_token_usage??p?.total_token_usage);if(!g)continue;let _=p?.model??p?.model_name??n.model;s.push({sequence:n.sequence++,eventType:"assistant_response",content:null,toolName:null,toolInput:null,toolOutput:null,tokenUsage:g,model:_??null,timestamp:h,metadata:{codexEventType:"token_count",..._?{model:_}:{},reasoningOutputTokens:p?.last_token_usage?.reasoning_output_tokens??0,usage:{input_tokens:g.input,output_tokens:g.output,cache_read_input_tokens:g.cacheRead??0,cache_creation_input_tokens:g.cacheWrite??0}}})}}return{events:s,projectPath:c,gitBranch:a,sessionId:u,metadata:r}}};function et(e,t){let n=e??(typeof t=="number"?new Date(t).toISOString():""),o=new Date(n);return Number.isFinite(o.getTime())?o.toISOString():new Date().toISOString()}l(et,"timestamp");function ot(e){return Array.isArray(e.content)?e.content:[]}l(ot,"blocks");function nt(e){return typeof e.content=="string"?e.content:ot(e).filter(t=>t.type==="text").map(t=>t.text??"").filter(Boolean).join(`
6
+
7
+ `)}l(nt,"messageText");function Ft(e){if(!e)return null;let t={input:Math.max(0,e.input??0),output:Math.max(0,e.output??0),cacheRead:Math.max(0,e.cacheRead??0),cacheWrite:Math.max(0,e.cacheWrite??0)};return Object.values(t).some(n=>n>0)?t:null}l(Ft,"usageOf");var j=class{static{l(this,"PiAdapter")}tool="pi";parse(t){let n=[],o={},s=null,r=null,i=null,c=null,a=l(f=>{n.push({sequence:n.length,...f})},"push");for(let f of t.split(`
8
+ `)){if(!f.trim())continue;let m;try{m=JSON.parse(f)}catch{continue}if(m.type==="session"){r||(r=et(m.timestamp)),s=m.cwd??s,o.sessionId=m.id,o.piSessionId=m.id,o.sessionVersion=m.version;continue}if(m.type==="model_change"){i=m.provider??i,c=m.modelId??c,i&&(o.provider=i),c&&(o.model=c);continue}if(m.type!=="message"||!m.message)continue;let h=m.message,p=et(m.timestamp,h.timestamp);if(i=h.provider??i,c=h.model??c,i&&(o.provider=i),c&&(o.model=c),h.role==="user"){let g=nt(h);if(!g)continue;a({eventType:"user_message",content:g,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,timestamp:p,metadata:{}});continue}if(h.role==="toolResult"){let g=nt(h);a({eventType:"tool_result",content:g||null,toolName:h.toolName??null,toolInput:null,toolOutput:{content:g,details:h.details??null,isError:h.isError??!1},tokenUsage:null,model:c,timestamp:p,metadata:{toolCallId:h.toolCallId,isError:h.isError??!1}});continue}if(h.role!=="assistant")continue;if(h.stopReason==="error"||h.stopReason==="aborted"){a({eventType:"error",content:h.errorMessage??`Pi stopped with ${h.stopReason}`,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,model:c,timestamp:p,metadata:{provider:i,stopReason:h.stopReason}});continue}for(let g of ot(h))g.type==="thinking"&&g.thinking?a({eventType:"thinking",content:g.thinking,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,model:c,timestamp:p,metadata:{provider:i}}):g.type==="text"&&g.text?a({eventType:"assistant_message",content:g.text,toolName:null,toolInput:null,toolOutput:null,tokenUsage:null,model:c,timestamp:p,metadata:{provider:i}}):g.type==="toolCall"&&g.name&&a({eventType:"tool_call",content:null,toolName:g.name,toolInput:g.arguments??{},toolOutput:null,tokenUsage:null,model:c,timestamp:p,metadata:{provider:i,toolCallId:g.id}});let y=Ft(h.usage);y&&a({eventType:"assistant_response",content:null,toolName:null,toolInput:null,toolOutput:null,tokenUsage:y,model:c,timestamp:p,metadata:{piEventType:"assistant_usage",provider:i,responseId:h.responseId,stopReason:h.stopReason,costUsd:h.usage?.cost?.total,usage:{input_tokens:y.input,output_tokens:y.output,cache_read_input_tokens:y.cacheRead??0,cache_creation_input_tokens:y.cacheWrite??0}}})}let u=n.map(f=>f.timestamp).sort(),d=new Date().toISOString();return{tool:"pi",projectPath:s,gitBranch:null,startedAt:r??u[0]??d,endedAt:u[u.length-1]??null,events:n,metadata:o}}};var Wt={claude_code:l(()=>new A,"claude_code"),cursor:l(()=>new N,"cursor"),vscode_copilot:l(()=>new P,"vscode_copilot"),copilot_agent:l(()=>new b,"copilot_agent"),rulemetric_mcp:l(()=>new D,"rulemetric_mcp"),codex:l(()=>new C,"codex"),pi:l(()=>new j,"pi")};function Ht(e){let t=Wt[e];if(!t)throw new Error(`Unknown session tool: ${e}`);return t()}l(Ht,"getAdapter");function zt(e){let t=e.trim();if(t.startsWith("{")){let n=t.split(`
9
+ `)[0],o=null;try{o=JSON.parse(n)}catch{try{o=JSON.parse(t)}catch{}}if(o){if(o.type==="user"||o.type==="assistant")return"claude_code";if(o.type==="session"&&typeof o.id=="string"&&typeof o.cwd=="string"&&typeof o.version=="number")return"pi";if(Array.isArray(o.events)&&!o.requests&&!o.allComposers)return"rulemetric_mcp";if(Array.isArray(o.requests))return o.requests.some(r=>Array.isArray(r.toolCalls))||o.agentMode?"copilot_agent":"vscode_copilot";if(o.allComposers)return"cursor"}if(!o)try{let s=t.split(`
10
+ `).filter(r=>r.trim());if(s.length>1){let r=JSON.parse(s[0]);if(r.type==="user"||r.type==="assistant")return"claude_code"}}catch{}}return null}l(zt,"detectTool");import{readdir as F,stat as W}from"fs/promises";import{basename as Vt,join as I}from"path";import{homedir as $}from"os";var Kt={"claude-opus-4-7":"Opus 4.7","claude-opus-4-6":"Opus 4.6","claude-opus-4-5":"Opus 4.5","claude-opus-4-1":"Opus 4.1","claude-opus-4":"Opus 4","claude-sonnet-4-6":"Sonnet 4.6","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4":"Sonnet 4","claude-3-7-sonnet":"Sonnet 3.7","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-4-5":"Haiku 4.5","claude-3-5-haiku":"Haiku 3.5"};function Xt(){return process.env.CLAUDE_CONFIG_DIR||I($(),".claude")}l(Xt,"getClaudeDir");function Yt(){return I(Xt(),"projects")}l(Yt,"getProjectsDir");function Zt(){return process.platform==="darwin"?I($(),"Library","Application Support","Claude","local-agent-mode-sessions"):process.platform==="win32"?I($(),"AppData","Roaming","Claude","local-agent-mode-sessions"):I($(),".config","Claude","local-agent-mode-sessions")}l(Zt,"getDesktopSessionsDir");async function Qt(e){let t=[];async function n(o,s){if(s>8)return;let r=await F(o).catch(()=>[]);for(let i of r){if(i==="node_modules"||i===".git")continue;let c=I(o,i);if((await W(c).catch(()=>null))?.isDirectory())if(i==="projects"){let u=await F(c).catch(()=>[]);for(let d of u){let f=I(c,d);(await W(f).catch(()=>null))?.isDirectory()&&t.push(f)}}else await n(c,s+1)}}return l(n,"walk"),await n(e,0),t}l(Qt,"findDesktopProjectDirs");var st={name:"claude",displayName:"Claude Code",modelDisplayName(e){let t=e.replace(/@.*$/,"").replace(/-\d{8}$/,"");for(let[n,o]of Object.entries(Kt))if(t.startsWith(n))return o;return t},toolDisplayName(e){return e},async discoverSessions(){let e=[],t=Yt();try{let o=await F(t);for(let s of o){let r=I(t,s);(await W(r).catch(()=>null))?.isDirectory()&&e.push({path:r,project:s,provider:"claude"})}}catch{}let n=await Qt(Zt());for(let o of n)e.push({path:o,project:Vt(o),provider:"claude"});return e},createSessionParser(){return{async*parse(){}}}};import{readdir as U,readFile as rt,stat as te}from"fs/promises";import{basename as ee,join as O}from"path";import{homedir as ne}from"os";var oe={"gpt-5.3-codex":"GPT-5.3 Codex","gpt-5.4-mini":"GPT-5.4 Mini","gpt-5.4":"GPT-5.4","gpt-5":"GPT-5","gpt-4o-mini":"GPT-4o Mini","gpt-4o":"GPT-4o"},at={exec_command:"Bash",read_file:"Read",write_file:"Edit",apply_diff:"Edit",apply_patch:"Edit",spawn_agent:"Agent",close_agent:"Agent",wait_agent:"Agent",read_dir:"Glob"};function se(){return process.env.CODEX_HOME??O(ne(),".codex")}l(se,"getCodexDir");function re(e){return e.replace(/^\//,"").replace(/\//g,"-")}l(re,"sanitizeProject");async function ae(e){try{let n=(await rt(e,"utf-8")).split(`
11
+ `)[0];return n?.trim()?JSON.parse(n):null}catch{return null}}l(ae,"readFirstLine");async function ie(e){let t=await ae(e);if(!t)return{valid:!1};let n=t.type==="session_meta"&&typeof t.payload?.originator=="string"&&t.payload.originator.toLowerCase().startsWith("codex");return{valid:n,meta:n?t:void 0}}l(ie,"isValidCodexSession");async function le(e){let t=O(e,"sessions"),n=[],o;try{o=await U(t)}catch{return n}for(let s of o){if(!/^\d{4}$/.test(s))continue;let r=O(t,s),i=await U(r).catch(()=>[]);for(let c of i){if(!/^\d{2}$/.test(c))continue;let a=O(r,c),u=await U(a).catch(()=>[]);for(let d of u){if(!/^\d{2}$/.test(d))continue;let f=O(a,d),m=await U(f).catch(()=>[]);for(let h of m){if(!h.startsWith("rollout-")||!h.endsWith(".jsonl"))continue;let p=O(f,h);if(!(await te(p).catch(()=>null))?.isFile())continue;let{valid:g,meta:_}=await ie(p);if(!g||!_)continue;let x=_.payload?.cwd??"unknown";n.push({path:p,project:re(x),provider:"codex"})}}}}return n}l(le,"discoverSessionsInDir");function ce(e,t){return e?.info?.model??e?.info?.model_name??t??"gpt-5"}l(ce,"resolveModel");function ue(e,t){return{async*parse(){let n;try{n=await rt(e.path,"utf-8")}catch{return}let o=n.split(`
12
+ `).filter(h=>h.trim()),s,r="",i=0,c=0,a=0,u=0,d=0,f=[],m="";for(let h of o){let p;try{p=JSON.parse(h)}catch{continue}if(p.type==="session_meta"){r=p.payload?.session_id??ee(e.path,".jsonl"),s=p.payload?.model;continue}if(p.type==="response_item"&&p.payload?.type==="function_call"){let y=p.payload.name??"";f.push(at[y]??y);continue}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload?.role==="user"){let y=(p.payload.content??[]).filter(g=>g.type==="input_text").map(g=>g.text??"").filter(Boolean);y.length>0&&(m=y.join(" "));continue}if(p.type==="event_msg"&&p.payload?.type==="token_count"){let y=p.payload.info;if(!y)continue;let g=y.total_token_usage?.total_tokens??0;if(g>0&&g===i)continue;i=g;let _=y.last_token_usage,x=0,v=0,w=0,S=0;if(_)x=_.input_tokens??0,v=_.cached_input_tokens??0,w=_.output_tokens??0,S=_.reasoning_output_tokens??0;else if(g>0){let T=y.total_token_usage;if(!T)continue;x=(T.input_tokens??0)-c,v=(T.cached_input_tokens??0)-a,w=(T.output_tokens??0)-u,S=(T.reasoning_output_tokens??0)-d}if(!_){let T=y.total_token_usage;T&&(c=T.input_tokens??0,a=T.cached_input_tokens??0,u=T.output_tokens??0,d=T.reasoning_output_tokens??0)}if(x+v+w+S===0)continue;let Rt=Math.max(0,x-v),Et=ce(p.payload,s),Z=p.timestamp??"",L=`codex:${e.path}:${Z}:${g}`;if(t.has(L))continue;t.add(L),yield{provider:"codex",model:Et,inputTokens:Rt,outputTokens:w,cacheCreationInputTokens:0,cacheReadInputTokens:v,cachedInputTokens:v,reasoningTokens:S,costUSD:0,tools:f,bashCommands:[],timestamp:Z,speed:"standard",deduplicationKey:L,userMessage:m,sessionId:r},f=[],m=""}}}}}l(ue,"createParser");var it={name:"codex",displayName:"Codex",modelDisplayName(e){for(let[t,n]of Object.entries(oe))if(e.startsWith(t))return n;return e},toolDisplayName(e){return at[e]??e},async discoverSessions(){return le(se())},createSessionParser(e,t){return ue(e,t)}};import{readdir as pe,readFile as lt,stat as me}from"fs/promises";import{basename as ct,dirname as de,join as H}from"path";import{homedir as fe}from"os";var he={"gpt-4.1-nano":"GPT-4.1 Nano","gpt-4.1-mini":"GPT-4.1 Mini","gpt-4.1":"GPT-4.1","gpt-4o-mini":"GPT-4o Mini","gpt-4o":"GPT-4o","gpt-5-mini":"GPT-5 Mini","gpt-5":"GPT-5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4":"Sonnet 4","claude-3-7-sonnet":"Sonnet 3.7","claude-3-5-sonnet":"Sonnet 3.5","o4-mini":"o4-mini",o3:"o3"},ut={bash:"Bash",read_file:"Read",write_file:"Edit",edit_file:"Edit",create_file:"Write",delete_file:"Delete",search_files:"Grep",find_files:"Glob",list_directory:"LS",web_search:"WebSearch",fetch_webpage:"WebFetch",github_repo:"GitHub"},ge=Object.entries(he).sort((e,t)=>t[0].length-e[0].length);function ye(){return H(fe(),".copilot","session-state")}l(ye,"getCopilotSessionStateDir");function _e(e){let t=e.match(/^cwd:\s*(.+)$/m);return t?.[1]&&t[1].replace(/\s*#.*$/,"").replace(/^['"]|['"]$/g,"").trim()||null}l(_e,"parseCwd");function Se(e,t){return{async*parse(){let n;try{n=await lt(e.path,"utf-8")}catch{return}let o=ct(de(e.path)),s=n.split(`
13
+ `).filter(c=>c.trim()),r="",i="";for(let c of s){let a;try{a=JSON.parse(c)}catch{continue}if(a.type==="session.model_change"){r=a.data.newModel??r;continue}if(a.type==="user.message"){i=a.data.content??"";continue}if(a.type==="assistant.message"){let{messageId:u,outputTokens:d,toolRequests:f=[]}=a.data;if(d===0||!r)continue;let m=`copilot:${o}:${u}`;if(t.has(m))continue;t.add(m);let h=f.map(p=>p.name??"").filter(Boolean).map(p=>ut[p]??p);yield{provider:"copilot",model:r,inputTokens:0,outputTokens:d,cacheCreationInputTokens:0,cacheReadInputTokens:0,cachedInputTokens:0,reasoningTokens:0,costUSD:0,tools:h,bashCommands:[],timestamp:a.timestamp??"",speed:"standard",deduplicationKey:m,userMessage:i,sessionId:o},i=""}}}}}l(Se,"createParser");async function ve(e){let t=[],n;try{n=await pe(e)}catch{return t}for(let o of n){let s=H(e,o,"events.jsonl");if(!(await me(s).catch(()=>null))?.isFile())continue;let i=o;try{let c=await lt(H(e,o,"workspace.yaml"),"utf-8"),a=_e(c);a&&(i=ct(a))}catch{}t.push({path:s,project:i,provider:"copilot"})}return t}l(ve,"discoverSessionsInDir");var pt={name:"copilot",displayName:"GitHub Copilot",modelDisplayName(e){for(let[t,n]of ge)if(e===t||e.startsWith(t+"-"))return n;return e},toolDisplayName(e){return ut[e]??e},async discoverSessions(){return ve(ye())},createSessionParser(e,t){return Se(e,t)}};import{readdir as mt,readFile as ft,stat as dt}from"fs/promises";import{basename as ht,join as z}from"path";import{homedir as xe}from"os";var Te={"gpt-5.4":"GPT-5.4","gpt-5.4-mini":"GPT-5.4 Mini","gpt-5":"GPT-5","gpt-4o":"GPT-4o","gpt-4o-mini":"GPT-4o Mini"},gt={bash:"Bash",read:"Read",edit:"Edit",write:"Write",glob:"Glob",grep:"Grep",task:"Agent",dispatch_agent:"Agent",fetch:"WebFetch",search:"WebSearch",todo:"TodoWrite",patch:"Patch"},we=Object.entries(Te).sort((e,t)=>t[0].length-e[0].length);function Ie(){return z(xe(),".pi","agent","sessions")}l(Ie,"getPiSessionsDir");async function ke(e){try{let n=(await ft(e,"utf-8")).split(`
14
+ `)[0];return n?.trim()?JSON.parse(n):null}catch{return null}}l(ke,"readFirstEntry");function Oe(e){return e.split(/[;&|]+/).map(t=>t.trim().split(/\s+/)[0]).filter(Boolean)}l(Oe,"extractBashCommands");async function Ae(e){let t=[],n;try{n=await mt(e)}catch{return t}for(let o of n){let s=z(e,o);if(!(await dt(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await mt(s)}catch{continue}for(let c of i){if(!c.endsWith(".jsonl"))continue;let a=z(s,c);if(!(await dt(a).catch(()=>null))?.isFile())continue;let d=await ke(a);if(!d||d.type!=="session")continue;let f=d.cwd??o;t.push({path:a,project:ht(f),provider:"pi"})}}return t}l(Ae,"discoverSessionsInDir");function Ne(e,t){return{async*parse(){let n;try{n=await ft(e.path,"utf-8")}catch{return}let o=n.split(`
15
+ `).filter(i=>i.trim()),s=ht(e.path,".jsonl"),r="";for(let[i,c]of o.entries()){let a;try{a=JSON.parse(c)}catch{continue}if(a.type==="session"){s=a.id??s;continue}if(a.type!=="message")continue;let u=a.message;if(!u)continue;if(u.role==="user"){let S=(u.content??[]).filter(k=>k.type==="text").map(k=>k.text??"").filter(Boolean);S.length>0&&(r=S.join(" "));continue}if(u.role!=="assistant"||!u.usage)continue;let{input:d,output:f,cacheRead:m,cacheWrite:h}=u.usage;if(d===0&&f===0)continue;let p=u.model??"gpt-5",y=u.responseId??"",g=`pi:${e.path}:${y||a.id||a.timestamp||String(i)}`;if(t.has(g))continue;t.add(g);let _=(u.content??[]).filter(S=>S.type==="toolCall"&&S.name),x=_.map(S=>gt[S.name]??S.name),v=_.filter(S=>S.name==="bash").flatMap(S=>{let k=S.arguments?.command;return typeof k=="string"?Oe(k):[]}),w=a.timestamp??"";yield{provider:"pi",model:p,inputTokens:d,outputTokens:f,cacheCreationInputTokens:h,cacheReadInputTokens:m,cachedInputTokens:m,reasoningTokens:0,costUSD:0,tools:x,bashCommands:v,timestamp:w,speed:"standard",deduplicationKey:g,userMessage:r,sessionId:s},r=""}}}}l(Ne,"createParser");var yt={name:"pi",displayName:"Pi",modelDisplayName(e){for(let[t,n]of we)if(e.startsWith(t))return n;return e},toolDisplayName(e){return gt[e]??e},async discoverSessions(){return Ae(Ie())},createSessionParser(e,t){return Ne(e,t)}};var Tt=[st,it,pt,yt],_t=null,St=!1;async function wt(){if(St)return _t;St=!0;try{let{cursor:e}=await import("./cursor-T7AMCMKS.js");return _t=e,e}catch{return null}}l(wt,"loadCursor");var vt=null,xt=!1;async function It(){if(xt)return vt;xt=!0;try{let{opencode:e}=await import("./opencode-QRJ3BH23.js");return vt=e,e}catch{return null}}l(It,"loadOpenCode");async function kt(){let[e,t]=await Promise.all([wt(),It()]),n=[...Tt];return e&&n.push(e),t&&n.push(t),n}l(kt,"getAllProviders");async function Pe(e){let t=await kt(),n=e&&e!=="all"?t.filter(s=>s.name===e):t,o=[];for(let s of n){let r=await s.discoverSessions();o.push(...r)}return o}l(Pe,"discoverAllSessions");async function be(e){return e==="cursor"?await wt()??void 0:e==="opencode"?await It()??void 0:Tt.find(t=>t.name===e)}l(be,"getProvider");import{spawn as Y}from"node:child_process";import{randomUUID as $e}from"node:crypto";import{writeFile as At}from"node:fs/promises";import{tmpdir as Nt}from"node:os";import{join as Pt}from"node:path";import{spawn as De}from"node:child_process";function V(e){return`rm-${e.trim().replace(/[^A-Za-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"session"}`}l(V,"sanitizeTmuxName");function K(e){let t=e.runId?["env",`RULEMETRIC_RUN_ID=${e.runId}`,"claude"]:["claude"];return e.resumeSessionId&&t.push("--resume",e.resumeSessionId),e.model&&t.push("--model",e.model),["new-session","-d","-s",e.sessionName,"-c",e.projectPath,"--",...t]}l(K,"buildTmuxLaunchArgs");function R(e,t,n={}){return n.literal===!1?["send-keys","-t",e,t]:["send-keys","-t",e,"-l","--",t]}l(R,"buildTmuxSendKeysArgs");function Ce(e){return["has-session","-t",e]}l(Ce,"buildTmuxHasSessionArgs");function E(e){return`tmux attach -t ${e}`}l(E,"buildTmuxAttachCommand");function je(){let e=["/opt/homebrew/bin","/usr/local/bin"],t=(process.env.PATH??"").split(":").filter(Boolean),n=e.filter(o=>!t.includes(o));return n.length===0?process.env:{...process.env,PATH:[...t,...n].join(":")}}l(je,"tmuxSpawnEnv");function X(e){return new Promise(t=>{let n=De("tmux",e,{stdio:["ignore","ignore","pipe"],env:je()}),o="";n.stderr.on("data",s=>{o+=s.toString()}),n.on("close",s=>t({code:s,stderr:o})),n.on("error",s=>t({code:null,stderr:s.message}))})}l(X,"runTmux");async function Ot(){return(await X(["-V"])).code===0}l(Ot,"isTmuxAvailable");var Ue=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Re(e){if(e!==void 0){if(Ue.test(e))return e;console.warn(`[claude-code-launcher] dropping non-uuid runId (RULEMETRIC_RUN_ID not injected): ${JSON.stringify(e)}`)}}l(Re,"validateRunId");function Ee(e){return`'${e.replace(/'/g,"'\\''")}'`}l(Ee,"shellSingleQuote");var M=class{static{l(this,"ClaudeCodeLauncher")}options;tool="claude_code";constructor(t={}){this.options=t}capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(t){let n=$e(),o={...t,runId:Re(t.runId)};return o.mode==="headless"?this.launchHeadless(o,n):this.launchInteractive(o,n)}async launchHeadless(t,n){let o=["-p",t.prompt??"","--output-format","json"];t.systemPrompt&&o.push("--system-prompt",t.systemPrompt),t.model&&o.push("--model",t.model);let s={...process.env};return delete s.CLAUDECODE,delete s.HTTPS_PROXY,t.runId&&(s.RULEMETRIC_RUN_ID=t.runId),new Promise(r=>{let i=Y("claude",o,{cwd:t.projectPath,env:s,stdio:["ignore","pipe","pipe"]}),c="",a="";i.stdout.on("data",d=>{c+=d.toString()}),i.stderr.on("data",d=>{a+=d.toString()});let u=t.timeout?setTimeout(()=>{i.kill("SIGTERM")},t.timeout):null;i.on("close",d=>{u&&clearTimeout(u);let f=c;try{let m=JSON.parse(c);f=m.result??m.content??c}catch{}r({sessionId:n,pid:i.pid,exitCode:d,output:f,error:d!==0?a:void 0})}),i.on("error",d=>{u&&clearTimeout(u),r({sessionId:n,error:`Failed to spawn claude: ${d.message}`})})})}async launchInteractive(t,n){return await(this.options.tmuxAvailable??Ot)().catch(()=>!1)?this.launchInteractiveTmux(t,n):this.launchInteractiveTerminal(t,n,"tmux_not_found")}async launchInteractiveTmux(t,n){let o=this.options.runTmux??X,s=V(`claude-${t.resumeSessionId??n}`),r=await o(K({sessionName:s,projectPath:t.projectPath,resumeSessionId:t.resumeSessionId,model:t.model,runId:t.runId}));if(r.code!==0)return this.launchInteractiveTerminal(t,n,"tmux_launch_failed",`tmux new-session exited ${r.code}: ${r.stderr.trim()||"no stderr"}`);let i=await this.openTerminalAttach(s,n);if(t.prompt){let c=await o(R(s,t.prompt));if(c.code!==0)return{sessionId:n,liveSendAvailable:!1,fallbackReason:"tmux_launch_failed",error:`tmux send-keys exited ${c.code}: ${c.stderr.trim()||"no stderr"}`};let a=await o(R(s,"Enter",{literal:!1}));if(a.code!==0)return{sessionId:n,liveSendAvailable:!1,fallbackReason:"tmux_launch_failed",error:`tmux send Enter exited ${a.code}: ${a.stderr.trim()||"no stderr"}`}}return{sessionId:n,pid:i.pid,liveSendAvailable:!0,...i.error?{error:i.error}:{},terminalTarget:{kind:"tmux",target:s,attachCommand:E(s),live:!0}}}async openTerminalAttach(t,n){let o=Pt(Nt(),`rulemetric-attach-${n}.command`),s=`#!/bin/zsh
16
+ rm -- "$0"
17
+ ${E(t)}
18
+ `;return await At(o,s,{mode:493}),new Promise(r=>{let i=Y("open",["-a","Terminal",o],{stdio:["ignore","pipe","pipe"]}),c="";i.stderr.on("data",a=>{c+=a.toString()}),i.on("close",a=>{r(a===0?{pid:i.pid}:{pid:i.pid,error:`open attach exited ${a}: ${c.trim()||"no stderr"}`})}),i.on("error",a=>{r({error:`Failed to spawn open attach: ${a.message}`})})})}async launchInteractiveTerminal(t,n,o,s){let r=["claude"];t.resumeSessionId?r.push("--resume",t.resumeSessionId):t.prompt&&r.push("-p",JSON.stringify(t.prompt)),t.model&&r.push("--model",t.model);let i=r.join(" "),c=Pt(Nt(),`rulemetric-launch-${n}.command`),a=t.runId?`export RULEMETRIC_RUN_ID=${Ee(t.runId)}
19
+ `:"",u=`#!/bin/zsh
20
+ rm -- "$0"
21
+ cd ${JSON.stringify(t.projectPath)} || exit
22
+ `+a+`${i}
23
+ `;return await At(c,u,{mode:493}),new Promise(d=>{let f=Y("open",["-a","Terminal",c],{stdio:["ignore","pipe","pipe"]}),m="";f.stderr.on("data",h=>{m+=h.toString()}),f.on("close",h=>{if(h===0)d({sessionId:n,pid:f.pid,liveSendAvailable:!1,fallbackReason:o,...s?{error:s}:{}});else{let p=m.trim()||"no stderr";d({sessionId:n,pid:f.pid,liveSendAvailable:!1,fallbackReason:o,error:s?`${s}; open exited ${h}: ${p}`:`open exited ${h}: ${p}`})}}),f.on("error",h=>{d({sessionId:n,liveSendAvailable:!1,fallbackReason:o,error:`Failed to spawn open: ${h.message}`})})})}};import{spawn as bt}from"node:child_process";import{randomUUID as Me}from"node:crypto";var q=class{static{l(this,"CodexLauncher")}tool="codex";capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(t){let n=Me();return t.mode==="headless"?this.launchHeadless(t,n):this.launchInteractive(t,n)}launchHeadless(t,n){let o=["-q",t.prompt??""];return t.model&&o.push("--model",t.model),new Promise(s=>{let r=bt("codex",o,{cwd:t.projectPath,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout.on("data",u=>{i+=u.toString()}),r.stderr.on("data",u=>{c+=u.toString()});let a=t.timeout?setTimeout(()=>{r.kill("SIGTERM")},t.timeout):null;r.on("close",u=>{a&&clearTimeout(a),s({sessionId:n,pid:r.pid,exitCode:u,output:i,error:u!==0?c:void 0})}),r.on("error",u=>{a&&clearTimeout(a),s({sessionId:n,error:`Failed to spawn codex: ${u.message}`})})})}launchInteractive(t,n){let o=["codex"];t.prompt&&o.push(JSON.stringify(t.prompt));let s=`cd ${JSON.stringify(t.projectPath)} && ${o.join(" ")}`,r=bt("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(s)}`],{stdio:"ignore",detached:!0});return r.unref(),Promise.resolve({sessionId:n,pid:r.pid})}};import{spawn as Dt}from"node:child_process";import{randomUUID as qe}from"node:crypto";function Je(e){let t=e.mode==="headless"?["--print","--mode","json","--no-session"]:[];return e.systemPrompt&&t.push("--system-prompt",e.systemPrompt),e.model&&t.push("--model",e.model),e.prompt&&t.push(e.prompt),t}l(Je,"buildPiLaunchArgs");function Be(e){let t;for(let o of e.split(`
24
+ `))if(o.trim())try{let s=JSON.parse(o);if(s.type!=="agent_end"||!Array.isArray(s.messages))continue;t=s.messages.filter(r=>r.role==="assistant").at(-1)}catch{}if(!t)return{output:e};if(t.stopReason==="error"||t.stopReason==="aborted")return{output:"",error:`Pi provider error: ${t.errorMessage??t.stopReason}`};let n=t.content?.filter(o=>o.type==="text"&&typeof o.text=="string").map(o=>o.text).join(`
25
+ `)??"";return n?{output:n}:{output:e}}l(Be,"parsePiLaunchOutput");var J=class{static{l(this,"PiLauncher")}tool="pi";capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(t){let n=qe(),o=Je(t);if(t.mode==="interactive"){let s=["pi",...o].map(c=>JSON.stringify(c)).join(" "),r=`cd ${JSON.stringify(t.projectPath)} && ${s}`,i=Dt("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(r)}`],{stdio:"ignore",detached:!0});return i.unref(),{sessionId:n,pid:i.pid}}return new Promise(s=>{let r=Dt("pi",o,{cwd:t.projectPath,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout.on("data",u=>{i+=u.toString()}),r.stderr.on("data",u=>{c+=u.toString()});let a=t.timeout?setTimeout(()=>r.kill("SIGTERM"),t.timeout):null;r.on("close",u=>{a&&clearTimeout(a);let d=Be(i);s({sessionId:n,pid:r.pid,exitCode:u,output:d.output,error:d.error??(u!==0?c.trim()||i.trim()||`pi exited ${u}`:void 0)})}),r.on("error",u=>{a&&clearTimeout(a),s({sessionId:n,error:`Failed to spawn pi: ${u.message}`})})})}};import{spawn as Ct}from"node:child_process";import{randomUUID as Ge}from"node:crypto";var B=class{static{l(this,"AiderLauncher")}tool="aider";capabilities={headless:!0,interactive:!0,remoteSpawn:!0};async launch(t){let n=Ge();return t.mode==="headless"?this.launchHeadless(t,n):this.launchInteractive(t,n)}launchHeadless(t,n){let o=["--message",t.prompt??"","--yes"];return t.model&&o.push("--model",t.model),new Promise(s=>{let r=Ct("aider",o,{cwd:t.projectPath,stdio:["ignore","pipe","pipe"]}),i="",c="";r.stdout.on("data",u=>{i+=u.toString()}),r.stderr.on("data",u=>{c+=u.toString()});let a=t.timeout?setTimeout(()=>{r.kill("SIGTERM")},t.timeout):null;r.on("close",u=>{a&&clearTimeout(a),s({sessionId:n,pid:r.pid,exitCode:u,output:i,error:u!==0?c:void 0})}),r.on("error",u=>{a&&clearTimeout(a),s({sessionId:n,error:`Failed to spawn aider: ${u.message}`})})})}launchInteractive(t,n){let o=["aider"];t.model&&o.push("--model",t.model);let s=`cd ${JSON.stringify(t.projectPath)} && ${o.join(" ")}`,r=Ct("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(s)}`],{stdio:"ignore",detached:!0});return r.unref(),Promise.resolve({sessionId:n,pid:r.pid})}};import{spawn as Le}from"node:child_process";import{randomUUID as Fe}from"node:crypto";var G=class{static{l(this,"GenericLauncher")}tool;constructor(t){this.tool=t}capabilities={headless:!1,interactive:!0,remoteSpawn:!1};async launch(t){let n=Fe();if(t.mode==="headless")return{sessionId:n,error:`${this.tool} does not support headless mode`};let o=`cd ${JSON.stringify(t.projectPath)} && echo "Session ${n} \u2014 tool: ${this.tool}" && exec $SHELL`,s=Le("osascript",["-e",`tell application "Terminal" to do script ${JSON.stringify(o)}`],{stdio:"ignore",detached:!0});return s.unref(),{sessionId:n,pid:s.pid}}};var jt={claude_code:l(()=>new M,"claude_code"),codex:l(()=>new q,"codex"),pi:l(()=>new J,"pi"),aider:l(()=>new B,"aider")};function We(e){let t=jt[e];return t?t():new G(e)}l(We,"getLauncher");function He(){return Object.entries(jt).map(([e,t])=>({tool:e,capabilities:t().capabilities}))}l(He,"getAvailableLaunchers");import $t from"node:path";function Ut(e){return e.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"")||"worktree"}l(Ut,"sanitizeBranch");function ze(e){return $t.resolve(e.basePath??$t.join(e.repoRoot,"..",".rulemetric-worktrees",Ut(e.branch)))}l(ze,"worktreePathFor");export{Ve as a,Ke as b,A as c,N as d,P as e,b as f,D as g,tt as h,C as i,j,Ht as k,zt as l,kt as m,Pe as n,be as o,V as p,K as q,R as r,Ce as s,E as t,We as u,He as v,Ut as w,ze as x};
@@ -1,4 +1,4 @@
1
- import{h as o}from"./chunk-RJX75Y7J.js";import{f}from"./chunk-U3XKXJ3A.js";import{b as y,e as m,h as d}from"./chunk-APDRR6FS.js";import{a as S}from"./chunk-ZLLER3HP.js";var _=1800*1e3,G=300*1e3,R=10,T=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
1
+ import{h as o}from"./chunk-I6ZQOMZS.js";import{g as f}from"./chunk-N4YPDZJF.js";import{b as y,e as m,h as d}from"./chunk-76UKAFNM.js";import{a as S}from"./chunk-ZLLER3HP.js";var _=1800*1e3,G=300*1e3,R=10,T=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
2
2
 
3
3
  Return strict JSON in the form: {"goalSummary": "..."}`;async function N(n,e={}){let w=e.llm??f,i=e.now??Date.now,v=e.getSession??(async s=>{try{return await o(()=>m(`/api/sessions/${s}`),{label:"session detail",idempotent:!0})}catch(t){if(t instanceof y&&t.statusCode===404)return null;throw t}}),l=e.getEvents??((s,t)=>o(()=>m(`/api/sessions/${s}/events?limit=${t.limit}&sort=${t.sort}`),{label:"session events",idempotent:!0})),P=e.saveGoal??(async(s,t)=>{await o(()=>d(`/api/sessions/${s}/enrich`,{analysis:t}),{label:"session enrich"})}),r=await v(n.sessionId);if(!r)return{skipped:"not_found"};let[A]=await l(n.sessionId,{limit:1,sort:"desc"}),h=new Date(A?.timestamp??r.startedAt).getTime();if(i()-h>_)return{skipped:"stale"};let c=r.analysis??{},g=c.goalSummaryAt?new Date(c.goalSummaryAt).getTime():0;if(g&&i()-g<G)return{skipped:"recent"};let u=(await l(n.sessionId,{limit:R*2,sort:"asc"})).filter(s=>s.content&&(s.eventType==="user_message"||s.eventType==="assistant_response")).map(s=>`${s.eventType==="user_message"?"USER":"ASSISTANT"}: ${s.content}`).join(`
4
4
 
@@ -1,2 +1,2 @@
1
- import{a as m}from"./chunk-QXPYGN7I.js";import{a as n}from"./chunk-ZLLER3HP.js";import{copyFileSync as y,mkdirSync as x,readFileSync as S,writeFileSync as w}from"node:fs";import{homedir as f}from"node:os";import{isAbsolute as h,join as l,resolve as b}from"node:path";function a(e){return l(e,m)}n(a,"captureConfigPath");function v(e){let r;try{r=S(a(e),"utf-8")}catch{return{}}try{let t=JSON.parse(r);if(!t||typeof t!="object"||Array.isArray(t))throw new Error("not a JSON object");return t}catch(t){throw new Error(`${a(e)} is not valid JSON (${t instanceof Error?t.message:String(t)}). Fix or delete it \u2014 refusing to overwrite what you wrote.`)}}n(v,"readCaptureConfig");function F(e,r){x(e,{recursive:!0});let t=a(e);return w(t,JSON.stringify(r,null,2)+`
1
+ import{a as m}from"./chunk-QI3FJKGK.js";import{a as n}from"./chunk-ZLLER3HP.js";import{copyFileSync as y,mkdirSync as x,readFileSync as S,writeFileSync as w}from"node:fs";import{homedir as f}from"node:os";import{isAbsolute as h,join as l,resolve as b}from"node:path";function a(e){return l(e,m)}n(a,"captureConfigPath");function v(e){let r;try{r=S(a(e),"utf-8")}catch{return{}}try{let t=JSON.parse(r);if(!t||typeof t!="object"||Array.isArray(t))throw new Error("not a JSON object");return t}catch(t){throw new Error(`${a(e)} is not valid JSON (${t instanceof Error?t.message:String(t)}). Fix or delete it \u2014 refusing to overwrite what you wrote.`)}}n(v,"readCaptureConfig");function F(e,r){x(e,{recursive:!0});let t=a(e);return w(t,JSON.stringify(r,null,2)+`
2
2
  `),t}n(F,"writeCaptureConfig");function C(e,r=f()){let t=e.trim(),s=t==="~"?r:t.startsWith("~/")?l(r,t.slice(2)):t;return b(s)}n(C,"normaliseRoot");function N(e,r=f()){let t=e.trim();if(!t)return!1;let s=t==="~"?r:t.startsWith("~/")?l(r,t.slice(2)):t;return h(s)}n(N,"isUsableRoot");function j(e,r,t=f(),s="codex"){let o={...e[s]??{}},u=Array.isArray(o.roots)?o.roots.map(i=>C(String(i),t)):[],g=!1;if(r.op==="mode")o.mode=r.mode,r.mode==="all"&&delete o.roots;else if(r.op==="clear")delete o.mode,delete o.roots;else{let i=r.roots.map(c=>C(c,t)),d=r.op==="add"?[...new Set([...u,...i])]:u.filter(c=>!i.includes(c));d.length===0&&r.op==="remove"?(delete o.roots,o.mode="off",g=!0):(o.roots=d.sort(),o.mode="allowlist")}let p={...e};return Object.keys(o).length===0?delete p[s]:p[s]=o,{config:p,emptiedToOff:g}}n(j,"applyScopeEdit");function J(e){let r=a(e),t=`${r}.broken`;try{y(r,t)}catch{}return t}n(J,"backupUnparseableConfig");export{a,v as b,F as c,C as d,N as e,j as f,J as g};
@@ -1 +1 @@
1
- import{c as l}from"./chunk-APDRR6FS.js";import{c as a,l as u}from"./chunk-PZNWH4VQ.js";import{a as o}from"./chunk-ZLLER3HP.js";var c=120*1e3,t=null;async function k(){if(process.env.RULEMETRIC_API_KEY)return!0;let e=a(u());if(!e.isRefreshable(c))return!0;let r=e.loadToken();return r?.refreshToken?t||(t=f(e,r).finally(()=>{t=null}),t):!0}o(k,"ensureFreshToken");async function f(e,r){let s;try{s=await fetch(`${l()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:r.refreshToken})})}catch{return!0}if(s.status===401)return e.clearToken(),!1;if(!s.ok)return!0;let n=await s.json().catch(()=>null);if(!n?.accessToken||!n.refreshToken)return!0;let i={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt??r.expiresAt,email:n.email??r.email};return e.saveToken(i),e.saveEnvFile(i.accessToken),!0}o(f,"doRefresh");export{k as a};
1
+ import{c as l}from"./chunk-76UKAFNM.js";import{c as a,l as u}from"./chunk-PZNWH4VQ.js";import{a as o}from"./chunk-ZLLER3HP.js";var c=120*1e3,t=null;async function k(){if(process.env.RULEMETRIC_API_KEY)return!0;let e=a(u());if(!e.isRefreshable(c))return!0;let r=e.loadToken();return r?.refreshToken?t||(t=f(e,r).finally(()=>{t=null}),t):!0}o(k,"ensureFreshToken");async function f(e,r){let s;try{s=await fetch(`${l()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:r.refreshToken})})}catch{return!0}if(s.status===401)return e.clearToken(),!1;if(!s.ok)return!0;let n=await s.json().catch(()=>null);if(!n?.accessToken||!n.refreshToken)return!0;let i={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt??r.expiresAt,email:n.email??r.email};return e.saveToken(i),e.saveEnvFile(i.accessToken),!0}o(f,"doRefresh");export{k as a};
@@ -1 +1 @@
1
- import{c as g}from"./chunk-J6QMBMC2.js";import{e as h,f}from"./chunk-APDRR6FS.js";import{q as u,r as m}from"./chunk-J5HW45PZ.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as i from"node:fs";import*as d from"node:path";var v=new Set(u);async function w(r){let{applications:l}=await h(`/api/recommendation-applications?instructionId=${encodeURIComponent(r.instructionId)}&projectPath=${encodeURIComponent(r.projectPath)}&limit=200`),t=l.filter(e=>v.has(e.status)&&e.inverse),s=[];for(let e of m(t.map(n=>({...n,appliedAt:n.appliedAt})))){let n=e.inverse;if(n.kind==="delete-paths"){let p=y(r.dir,n.paths);s.push({applicationId:e.id,target:e.targetPath,reversed:p.removed,drifted:!1,reason:p.reason}),(p.removed||p.alreadyGone)&&await f(`/api/recommendation-applications/${encodeURIComponent(e.id)}/transition`,{status:"reverted"});continue}if(n.kind!=="remove-hook-entry"){s.push({applicationId:e.id,target:e.targetPath,reversed:!1,drifted:!1,reason:`no reverser for inverse kind '${n.kind}' \u2014 recorded, not reversed`});continue}let o=g({dir:r.dir,inverse:n});s.push({applicationId:e.id,target:e.targetPath,reversed:o.removed,drifted:o.drifted,reason:o.reason}),(o.removed||o.code==="not-present")&&await f(`/api/recommendation-applications/${encodeURIComponent(e.id)}/transition`,{status:"reverted"})}return s}c(w,"reverseApplications");function y(r,l){let t=d.resolve(r),s=!1,e=0;for(let n of l){let o=d.resolve(t,n);if(o===t||!o.startsWith(t+d.sep))return{removed:!1,alreadyGone:!1,reason:`refused: ${n} does not resolve to a path inside the project`};if(!i.existsSync(o)&&!I(o)){e+=1;continue}try{i.rmSync(o,{recursive:!0,force:!0}),s=!0;let a=d.dirname(o);a.startsWith(t+d.sep)&&i.readdirSync(a).length===0&&i.rmdirSync(a)}catch(a){return{removed:!1,alreadyGone:!1,reason:`could not remove ${n}: ${a instanceof Error?a.message:String(a)}`}}}return!s&&e===l.length?{removed:!1,alreadyGone:!0,reason:"already removed"}:{removed:s,alreadyGone:!1}}c(y,"deletePaths");function I(r){try{return i.lstatSync(r).isSymbolicLink()}catch{return!1}}c(I,"isSymlink");function b(r){let l=r.name??r.instructionId,t=[],s=r.reversals.filter(e=>e.reversed);if(r.stripped.length>0)t.push(`Removed ${l} from ${r.stripped.join(", ")}.`);else if(s.length>0)for(let e of s)t.push(`Removed ${l} from ${e.target}.`),e.drifted&&t.push(" (that file had changed since it was installed; only the recorded entry was removed)");else{let e=r.searched.length>0?` (searched ${r.searched.join(", ")})`:"";t.push(`No rulemetric-managed block for ${r.instructionId} was found in this directory${e}.`)}for(let e of r.reversals.filter(n=>!n.reversed))t.push(`Still installed in ${e.target}: ${e.reason??"the recorded inverse did not apply"}`);return r.dismissalError?(t.push(`Could not record the dismissal: ${r.dismissalError}`),t.push(s.length>0?' What was removed above stays removed \u2014 only the "stop proposing this" record failed.':" Nothing was removed, and the dismissal was not recorded either."),t.push(" This proposal may be suggested again. Re-run this command to retry."),t):(t.push("It will not be proposed again for 30 days."),t.push("Turn auto-adoption off entirely: rulemetric suggestions auto --off"),t)}c(b,"describeUndo");export{w as a,y as b,b as c};
1
+ import{c as g}from"./chunk-JTYVBR5H.js";import{e as h,f}from"./chunk-76UKAFNM.js";import{q as u,r as m}from"./chunk-42A4PUW7.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as i from"node:fs";import*as d from"node:path";var v=new Set(u);async function w(r){let{applications:l}=await h(`/api/recommendation-applications?instructionId=${encodeURIComponent(r.instructionId)}&projectPath=${encodeURIComponent(r.projectPath)}&limit=200`),t=l.filter(e=>v.has(e.status)&&e.inverse),s=[];for(let e of m(t.map(n=>({...n,appliedAt:n.appliedAt})))){let n=e.inverse;if(n.kind==="delete-paths"){let p=y(r.dir,n.paths);s.push({applicationId:e.id,target:e.targetPath,reversed:p.removed,drifted:!1,reason:p.reason}),(p.removed||p.alreadyGone)&&await f(`/api/recommendation-applications/${encodeURIComponent(e.id)}/transition`,{status:"reverted"});continue}if(n.kind!=="remove-hook-entry"){s.push({applicationId:e.id,target:e.targetPath,reversed:!1,drifted:!1,reason:`no reverser for inverse kind '${n.kind}' \u2014 recorded, not reversed`});continue}let o=g({dir:r.dir,inverse:n});s.push({applicationId:e.id,target:e.targetPath,reversed:o.removed,drifted:o.drifted,reason:o.reason}),(o.removed||o.code==="not-present")&&await f(`/api/recommendation-applications/${encodeURIComponent(e.id)}/transition`,{status:"reverted"})}return s}c(w,"reverseApplications");function y(r,l){let t=d.resolve(r),s=!1,e=0;for(let n of l){let o=d.resolve(t,n);if(o===t||!o.startsWith(t+d.sep))return{removed:!1,alreadyGone:!1,reason:`refused: ${n} does not resolve to a path inside the project`};if(!i.existsSync(o)&&!I(o)){e+=1;continue}try{i.rmSync(o,{recursive:!0,force:!0}),s=!0;let a=d.dirname(o);a.startsWith(t+d.sep)&&i.readdirSync(a).length===0&&i.rmdirSync(a)}catch(a){return{removed:!1,alreadyGone:!1,reason:`could not remove ${n}: ${a instanceof Error?a.message:String(a)}`}}}return!s&&e===l.length?{removed:!1,alreadyGone:!0,reason:"already removed"}:{removed:s,alreadyGone:!1}}c(y,"deletePaths");function I(r){try{return i.lstatSync(r).isSymbolicLink()}catch{return!1}}c(I,"isSymlink");function b(r){let l=r.name??r.instructionId,t=[],s=r.reversals.filter(e=>e.reversed);if(r.stripped.length>0)t.push(`Removed ${l} from ${r.stripped.join(", ")}.`);else if(s.length>0)for(let e of s)t.push(`Removed ${l} from ${e.target}.`),e.drifted&&t.push(" (that file had changed since it was installed; only the recorded entry was removed)");else{let e=r.searched.length>0?` (searched ${r.searched.join(", ")})`:"";t.push(`No rulemetric-managed block for ${r.instructionId} was found in this directory${e}.`)}for(let e of r.reversals.filter(n=>!n.reversed))t.push(`Still installed in ${e.target}: ${e.reason??"the recorded inverse did not apply"}`);return r.dismissalError?(t.push(`Could not record the dismissal: ${r.dismissalError}`),t.push(r.stripped.length>0||s.length>0?' What was removed above stays removed \u2014 only the "stop proposing this" record failed.':" Nothing was removed, and the dismissal was not recorded either."),t.push(" This proposal may be suggested again. Re-run this command to retry."),t):(t.push("It will not be proposed again for 30 days."),t.push("Turn auto-adoption off entirely: rulemetric suggestions auto --off"),t)}c(b,"describeUndo");export{w as a,y as b,b as c};
@@ -1 +1 @@
1
- import{b as l}from"./chunk-KV5A77XW.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-APDRR6FS.js";import{a as c}from"./chunk-ZLLER3HP.js";async function g(t){if(!t.worktree?.create)return t;let{branch:e,baseRef:s}=t.worktree,n=await l({repoRoot:t.projectPath,branch:e,baseRef:s});return{...t,projectPath:n.path,gitBranch:n.branch}}c(g,"resolveWorktreeForLaunch");async function L(t,e){let{mirrorId:s,tool:n}=t,{config:r}=t,a=c(o=>e.logger.info(o),"log");if(e.job.attempts>1)throw new p(`process_launch is not safe to retry (attempt ${e.job.attempts}). Re-launch manually.`);r=await g(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${n}...`);let{getLauncher:f}=await import("./dist-45KJH5M7.js"),i=await f(n).launch(r);a(`Launch completed: sessionId=${i.sessionId}`);let u={...i,worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await h(`/api/launch-jobs/${s}/state`,{result:u}).catch(o=>{a(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),u}c(L,"processLaunch");export{g as a,L as b};
1
+ import{b as l}from"./chunk-ISFPPDDB.js";import{a as p}from"./chunk-5RBLIVBF.js";import{h}from"./chunk-76UKAFNM.js";import{a as c}from"./chunk-ZLLER3HP.js";async function g(t){if(!t.worktree?.create)return t;let{branch:e,baseRef:s}=t.worktree,n=await l({repoRoot:t.projectPath,branch:e,baseRef:s});return{...t,projectPath:n.path,gitBranch:n.branch}}c(g,"resolveWorktreeForLaunch");async function L(t,e){let{mirrorId:s,tool:n}=t,{config:r}=t,a=c(o=>e.logger.info(o),"log");if(e.job.attempts>1)throw new p(`process_launch is not safe to retry (attempt ${e.job.attempts}). Re-launch manually.`);r=await g(r),r.worktree?.create&&a(`Worktree resolved: ${r.projectPath} (branch ${r.gitBranch})`),a(`Launching ${n}...`);let{getLauncher:f}=await import("./dist-GSHUC7UU.js"),i=await f(n).launch(r);a(`Launch completed: sessionId=${i.sessionId}`);let u={...i,worktreePath:r.worktree?.create?r.projectPath:void 0,runId:r.runId};return await h(`/api/launch-jobs/${s}/state`,{result:u}).catch(o=>{a(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),u}c(L,"processLaunch");export{g as a,L as b};
@@ -1 +1 @@
1
- import{b as c,f as m}from"./chunk-APDRR6FS.js";import{a as s}from"./chunk-ZLLER3HP.js";var R=new Set([408,429,502,503,504]),_=12e4,T=2e4,b=1e3,l=15e3;function p(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[agent-loop] log_error event=${e.event}`)}}s(p,"structuredLog");function f(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",o),r(!0)},t),o=s(()=>{clearTimeout(a),e.removeEventListener("abort",o),r(!1)},"onAbort");e.addEventListener("abort",o,{once:!0})})}s(f,"abortableSleep");function g(t){return t instanceof c?R.has(t.statusCode):!0}s(g,"isRetryableReportError");async function S(t,e,r){let a=Date.now()+r.budgetMs,o=b;for(let i=1;;i++)try{return await m(t,e),{ok:!0,attempts:i}}catch(n){let u=a-Date.now();if(!g(n)||u<=0||r.signal.aborted)return{ok:!1,attempts:i,error:n};if(p(r.log,{event:`${r.event}_retry`,jobId:r.jobId,attempt:i,status:n instanceof c?n.statusCode:void 0,error:n instanceof Error?n.message:String(n),retryInMs:Math.min(o,u)}),!await f(Math.min(o,u),r.signal))return{ok:!1,attempts:i,error:n};o=Math.min(o*2,l)}}s(S,"postReportWithRetry");export{R as a,_ as b,T as c,b as d,l as e,p as f,f as g,g as h,S as i};
1
+ import{b as c,f as m}from"./chunk-76UKAFNM.js";import{a as s}from"./chunk-ZLLER3HP.js";var R=new Set([408,429,502,503,504]),_=12e4,T=2e4,b=1e3,l=15e3;function p(t,e){try{t(JSON.stringify({ts:new Date().toISOString(),...e}))}catch{t(`[agent-loop] log_error event=${e.event}`)}}s(p,"structuredLog");function f(t,e){return e.aborted?Promise.resolve(!1):t<=0?Promise.resolve(!0):new Promise(r=>{let a=setTimeout(()=>{e.removeEventListener("abort",o),r(!0)},t),o=s(()=>{clearTimeout(a),e.removeEventListener("abort",o),r(!1)},"onAbort");e.addEventListener("abort",o,{once:!0})})}s(f,"abortableSleep");function g(t){return t instanceof c?R.has(t.statusCode):!0}s(g,"isRetryableReportError");async function S(t,e,r){let a=Date.now()+r.budgetMs,o=b;for(let i=1;;i++)try{return await m(t,e),{ok:!0,attempts:i}}catch(n){let u=a-Date.now();if(!g(n)||u<=0||r.signal.aborted)return{ok:!1,attempts:i,error:n};if(p(r.log,{event:`${r.event}_retry`,jobId:r.jobId,attempt:i,status:n instanceof c?n.statusCode:void 0,error:n instanceof Error?n.message:String(n),retryInMs:Math.min(o,u)}),!await f(Math.min(o,u),r.signal))return{ok:!1,attempts:i,error:n};o=Math.min(o*2,l)}}s(S,"postReportWithRetry");export{R as a,_ as b,T as c,b as d,l as e,p as f,f as g,g as h,S as i};
@@ -1,4 +1,4 @@
1
- import{b as E,d as R}from"./chunk-APDRR6FS.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as C}from"node:crypto";import{existsSync as A,mkdirSync as I,readFileSync as p,renameSync as L,rmdirSync as M,writeFileSync as m}from"node:fs";import{homedir as U,tmpdir as x}from"node:os";import{join as c}from"node:path";var $=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function v(t){return $.test(t)?t:`antigravity-${C("sha256").update(t).digest("hex").slice(0,16)}`}o(v,"hookSessionKey");var _=100,F=new Set(["RUN_COMMAND","VIEW_FILE","LIST_DIRECTORY","CODE_ACTION","GREP_SEARCH","SEARCH_WEB"]),H=new Set(["CONVERSATION_HISTORY","KNOWLEDGE_ARTIFACTS","CHECKPOINT"]);function T(){return process.env.RULEMETRIC_CONFIG_DIR??c(U(),".config","rulemetric")}o(T,"configDir");function O(){return c(T(),"antigravity-state")}o(O,"stateDir");function P(t){return c(O(),`${t}.json`)}o(P,"stateFile");function k(){let t=c(T(),"env");if(A(t))try{let n=p(t,"utf-8");for(let r of n.split(/\r?\n/)){let e=r.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);if(!e)continue;let i=e[1];if(process.env[i]!==void 0)continue;let s=e[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),process.env[i]=s}}catch{}}o(k,"loadEnvFile");function b(t){try{let n=p(P(t),"utf-8"),r=JSON.parse(n);if(r&&typeof r=="object"&&"lastStepIdx"in r){let e=r.lastStepIdx;if(typeof e=="number"&&Number.isFinite(e))return{lastStepIdx:e}}}catch{}return null}o(b,"loadState");function g(t,n){I(O(),{recursive:!0});let r=P(t),e=`${r}.tmp`;m(e,JSON.stringify(n),{mode:384});try{L(e,r)}catch{m(r,JSON.stringify(n),{mode:384})}}o(g,"saveState");function N(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=c(r,v(t));try{return p(e,"utf-8").trim()||null}catch{return null}}o(N,"resolveRwSessionId");function W(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=v(t),i=c(r,`${e}.seq`),s=c(r,`${e}.seqlock`),l=Date.now()+5e3;for(;Date.now()<l;)try{I(s);break}catch{}let a=1;try{a=parseInt(p(i,"utf-8").trim(),10)+1,(!Number.isFinite(a)||a<1)&&(a=1)}catch{a=1}try{m(i,String(a))}catch{}try{M(s)}catch{}return a}o(W,"nextSequence");function Y(t,n){let r;try{r=p(t,"utf-8")}catch{return[]}let e=[];for(let i of r.split(/\r?\n/))if(i.trim())try{let s=JSON.parse(i);typeof s.step_index=="number"&&s.step_index>n&&e.push(s)}catch{}return e.sort((i,s)=>i.step_index-s.step_index),e}o(Y,"readNewRecords");function G(t){let n;try{n=p(t,"utf-8")}catch{return-1}let r=-1;for(let e of n.split(/\r?\n/))if(e.trim())try{let i=JSON.parse(e);typeof i.step_index=="number"&&i.step_index>r&&(r=i.step_index)}catch{}return r}o(G,"findMaxStepIndex");function J(t){let n=t.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);return n?n[1].trim():t.trim()}o(J,"extractUserPrompt");function j(t,n){let r=t.created_at??new Date().toISOString(),e={antigravityStepIndex:t.step_index,antigravitySource:t.source,antigravityType:t.type};if(H.has(t.type)||F.has(t.type))return null;if(t.source==="USER_EXPLICIT"&&t.type==="USER_INPUT")return{sequence:n,eventType:"user_message",content:J(t.content??""),timestamp:r,metadata:e};if(t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"){let i=[];return t.thinking&&t.thinking.trim()&&i.push(`[thinking]
1
+ import{b as E,d as R}from"./chunk-76UKAFNM.js";import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as C}from"node:crypto";import{existsSync as A,mkdirSync as I,readFileSync as p,renameSync as L,rmdirSync as M,writeFileSync as m}from"node:fs";import{homedir as U,tmpdir as x}from"node:os";import{join as c}from"node:path";var $=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function v(t){return $.test(t)?t:`antigravity-${C("sha256").update(t).digest("hex").slice(0,16)}`}o(v,"hookSessionKey");var _=100,F=new Set(["RUN_COMMAND","VIEW_FILE","LIST_DIRECTORY","CODE_ACTION","GREP_SEARCH","SEARCH_WEB"]),H=new Set(["CONVERSATION_HISTORY","KNOWLEDGE_ARTIFACTS","CHECKPOINT"]);function T(){return process.env.RULEMETRIC_CONFIG_DIR??c(U(),".config","rulemetric")}o(T,"configDir");function O(){return c(T(),"antigravity-state")}o(O,"stateDir");function P(t){return c(O(),`${t}.json`)}o(P,"stateFile");function k(){let t=c(T(),"env");if(A(t))try{let n=p(t,"utf-8");for(let r of n.split(/\r?\n/)){let e=r.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);if(!e)continue;let i=e[1];if(process.env[i]!==void 0)continue;let s=e[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),process.env[i]=s}}catch{}}o(k,"loadEnvFile");function b(t){try{let n=p(P(t),"utf-8"),r=JSON.parse(n);if(r&&typeof r=="object"&&"lastStepIdx"in r){let e=r.lastStepIdx;if(typeof e=="number"&&Number.isFinite(e))return{lastStepIdx:e}}}catch{}return null}o(b,"loadState");function g(t,n){I(O(),{recursive:!0});let r=P(t),e=`${r}.tmp`;m(e,JSON.stringify(n),{mode:384});try{L(e,r)}catch{m(r,JSON.stringify(n),{mode:384})}}o(g,"saveState");function N(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=c(r,v(t));try{return p(e,"utf-8").trim()||null}catch{return null}}o(N,"resolveRwSessionId");function W(t){let n=process.env.TMPDIR??x(),r=c(n,"rulemetric"),e=v(t),i=c(r,`${e}.seq`),s=c(r,`${e}.seqlock`),l=Date.now()+5e3;for(;Date.now()<l;)try{I(s);break}catch{}let a=1;try{a=parseInt(p(i,"utf-8").trim(),10)+1,(!Number.isFinite(a)||a<1)&&(a=1)}catch{a=1}try{m(i,String(a))}catch{}try{M(s)}catch{}return a}o(W,"nextSequence");function Y(t,n){let r;try{r=p(t,"utf-8")}catch{return[]}let e=[];for(let i of r.split(/\r?\n/))if(i.trim())try{let s=JSON.parse(i);typeof s.step_index=="number"&&s.step_index>n&&e.push(s)}catch{}return e.sort((i,s)=>i.step_index-s.step_index),e}o(Y,"readNewRecords");function G(t){let n;try{n=p(t,"utf-8")}catch{return-1}let r=-1;for(let e of n.split(/\r?\n/))if(e.trim())try{let i=JSON.parse(e);typeof i.step_index=="number"&&i.step_index>r&&(r=i.step_index)}catch{}return r}o(G,"findMaxStepIndex");function J(t){let n=t.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);return n?n[1].trim():t.trim()}o(J,"extractUserPrompt");function j(t,n){let r=t.created_at??new Date().toISOString(),e={antigravityStepIndex:t.step_index,antigravitySource:t.source,antigravityType:t.type};if(H.has(t.type)||F.has(t.type))return null;if(t.source==="USER_EXPLICIT"&&t.type==="USER_INPUT")return{sequence:n,eventType:"user_message",content:J(t.content??""),timestamp:r,metadata:e};if(t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"){let i=[];return t.thinking&&t.thinking.trim()&&i.push(`[thinking]
2
2
  ${t.thinking.trim()}`),t.content&&t.content.trim()&&i.push(t.content.trim()),t.tool_calls&&t.tool_calls.length>0&&(e.antigravityToolCalls=t.tool_calls.map(s=>s.name).filter(Boolean)),{sequence:n,eventType:"assistant_response",content:i.join(`
3
3
 
4
4
  `)||null,timestamp:r,metadata:e}}return t.source==="MODEL"&&t.type==="GENERIC"?{sequence:n,eventType:"tool_result",content:t.content??null,timestamp:r,metadata:e}:t.source==="SYSTEM"&&(t.type==="SYSTEM_MESSAGE"||t.type==="ERROR_MESSAGE")?null:{sequence:n,eventType:`antigravity_${t.type.toLowerCase()}`,content:t.content??null,timestamp:r,metadata:e}}o(j,"classifyRecord");function q(t){try{let n=JSON.parse(t);return n&&typeof n=="object"?n:null}catch{return null}}o(q,"parseHookPayload");async function K(t,n,r,e,i={}){let s=i.errorSink??(u=>process.stderr.write(u)),l=0,a=0,d=0,S=0,f=e;for(let u of t){l++,i.onProgress?.({attempted:l,total:t.length,record:u});let w=W(r),y=j(u,w);if(!y)S++;else try{await R(`/api/sessions/${n}/events`,{method:"POST",body:y}),a++}catch(h){d++;let D=h instanceof E?h.statusCode:"unknown";s(`[antigravity-tailer] failed step=${u.step_index} type=${u.type} status=${D}
@@ -1,4 +1,4 @@
1
- import{g as E}from"./chunk-U3XKXJ3A.js";import{a as r}from"./chunk-ZLLER3HP.js";var g="<<<FILE-CONTENT-BEGIN>>>",m="<<<FILE-CONTENT-END>>>",b="<RATIONALE>",R="</RATIONALE>",u="<PROPOSED_INSTRUCTION>",p="</PROPOSED_INSTRUCTION>",d=.5,f=3;function y(e){let t=e.immutableSections.length>0?e.immutableSections.map(s=>` - ${s}`).join(`
1
+ import{h as E}from"./chunk-N4YPDZJF.js";import{a as r}from"./chunk-ZLLER3HP.js";var g="<<<FILE-CONTENT-BEGIN>>>",m="<<<FILE-CONTENT-END>>>",b="<RATIONALE>",R="</RATIONALE>",u="<PROPOSED_INSTRUCTION>",p="</PROPOSED_INSTRUCTION>",d=.5,f=3;function y(e){let t=e.immutableSections.length>0?e.immutableSections.map(s=>` - ${s}`).join(`
2
2
  `):" (none)",o=e.evidence.priorDecisions.length>0?["6. You have edited this file before. The attempts are listed below with"," how each was judged. Do not re-propose an edit that was MEASURED and"," rejected: it was replayed against this exact file and did not beat it,"," so measuring it again spends the same budget for the same answer. An"," attempt marked NOT MEASURED is different \u2014 the gate stopped it before"," it earned a verdict, so whether it would have helped is still unknown."]:[],n=e.currentContent.trim().length,i=` It is currently ${n} characters. Your proposal must stay between ${Math.ceil(n*d)} and ${Math.floor(n*f)} characters \u2014 outside that it is discarded unmeasured as a truncation or runaway rewrite.`;return["You are improving an AI coding assistant instruction file so that it scores","better on a fixed set of evaluation cases.","",`The file is a ${e.targetType} named "${e.targetName}".`,i,"","RULES",`0. The current file is EXACTLY the text between ${g} and`,` ${m} in the data message. Headings after the closing`," sentinel (underperforming cases, notes, prior attempts) are evidence",' ABOUT the file \u2014 they are not in the file, and "removing" one of them'," is not an edit. Do not include the sentinels in your output.","1. Return the COMPLETE new file, not a diff, not a patch, not a summary,"," and not an excerpt. Everything you omit will be DELETED from the file.","2. Preserve everything you are not deliberately changing, byte for byte.","3. Make a focused edit. You are one step in a measured loop: a small change"," that can be attributed beats a rewrite that cannot.","4. Do not edit these sections or anything nested under them \u2014 an edit that"," touches them is refused downstream and the whole proposal is wasted:",t,"5. Do not add meta-commentary about the evaluation, the loop, or this"," prompt to the file. The file is read by other agents as instructions.",...o,"","OUTPUT FORMAT \u2014 exactly this, with no text before or after:",b,"One or two sentences: what you changed and which evidence motivated it.",R,u,"The complete new file content.",p].join(`
3
3
  `)}r(y,"buildProposerSystemPrompt");var h=r(e=>`${e>=0?"+":"-"}${Math.abs(e*100).toFixed(1)}pp`,"signedPp");function O(e){let t=/^\d{4}-\d{2}-\d{2}/.exec(e.at??"")?.[0]??"undated",o;if(e.measured){let i=e.measured;o=`MEASURED against this exact file and ${e.decision==="promote"?"ACCEPTED":"REJECTED"}: ${h(i.delta)} (CI ${h(i.ciLower)} to ${h(i.ciUpper)}, ${i.nPairs} paired cases)`}else o=`NOT MEASURED \u2014 the gate refused it, so its merit is still unknown: ${e.refusals.length>0?e.refusals.join("; "):"no reason recorded"}`;let n=[`- ${t} \u2014 ${o}`];return e.decision==="promote"&&n.push(e.applied?" The file WAS rewritten by this decision.":" Dry run: the file was NOT rewritten, so this edit is still available."),e.touched.length>0&&n.push(` Sections touched: ${e.touched.join(", ")}`),e.rationale.trim()!==""&&n.push(` You said at the time: ${e.rationale.trim()}`),n.join(`
4
4
  `)}r(O,"describePriorDecision");function P(e){let t=e.evidence,o=["## CURRENT FILE CONTENT","","The file is EXACTLY the text between the two sentinel lines below \u2014","nothing before the first sentinel or after the second is part of it.","Everything after the closing sentinel is evidence ABOUT the file.","",g,e.currentContent,m,""];if(t.weakest.length>0){o.push("## CASES WHERE THIS FILE CURRENTLY UNDERPERFORMS","");for(let n of t.weakest)o.push(`- ${n.name}: passes ${(n.withPassRate*100).toFixed(0)}% with the file vs ${(n.withoutPassRate*100).toFixed(0)}% without it`);o.push("")}return t.nonDiscriminating.length>0&&o.push("## CASES THAT CARRY NO SIGNAL EITHER WAY","","These score the same with and without the file. Changing the file to chase","them is unlikely to move anything.","",...t.nonDiscriminating.map(n=>`- ${n}`),""),t.priorDecisions.length>0&&o.push("## WHAT YOU ALREADY PROPOSED FOR THIS FILE, AND HOW IT WAS JUDGED","","Newest first. Every attempt listed here was made against the file above,","byte for byte. Attempts against a different version of the file are not","shown, because a verdict earned by different text says nothing about this","one.","",...t.priorDecisions.map(O),""),t.notes.length>0&&o.push("## NOTES","",...t.notes.map(n=>`- ${n}`),""),o.join(`
@@ -1,3 +1,3 @@
1
- import{e as p}from"./chunk-LJRE3LZ2.js";import{A as f}from"./chunk-J5HW45PZ.js";import{a as r}from"./chunk-ZLLER3HP.js";var g=80,h=/\b(must|never|always|do not|don'?t|avoid|prefer|require[sd]?|before|after|only|instead of|use|run|add|keep|stop|refuse|check|verify|ask|write|read)\b/i,m=200,k=r(()=>({asks:[],omitted:0}),"empty");function A(s){return s.replace(/\s+/g," ").trim().toLowerCase()}r(A,"key");function I(s){let t=[];for(let o of s.split(`
1
+ import{e as p}from"./chunk-LJRE3LZ2.js";import{C as f}from"./chunk-42A4PUW7.js";import{a as r}from"./chunk-ZLLER3HP.js";var g=80,h=/\b(must|never|always|do not|don'?t|avoid|prefer|require[sd]?|before|after|only|instead of|use|run|add|keep|stop|refuse|check|verify|ask|write|read)\b/i,m=200,k=r(()=>({asks:[],omitted:0}),"empty");function A(s){return s.replace(/\s+/g," ").trim().toLowerCase()}r(A,"key");function I(s){let t=[];for(let o of s.split(`
2
2
  `)){let e=o.trim(),n=t.length>0?t[t.length-1]:"",i=e===""||/^(?:[-*+]|\d+[.)]|#|```|>|\||!)/.test(e);if(n!==""&&!/[.!?:;]$/.test(n)&&!/^(?:#|```)/.test(n)&&!i){t[t.length-1]=`${n} ${e}`;continue}t.push(e)}return t.join(`
3
3
  `)}r(I,"unwrap");function y(s,t=p){if(!s)return k();try{let o=new Set,e=[],n=[];for(let l of t(s))for(let d of f(I(l.content))){let c=A(d);if(c===""||o.has(c))continue;o.add(c);let a=d.replace(/\s+/g," ").trim(),u=a.length>m?`${a.slice(0,m)}\u2026`:a;(h.test(u)?e:n).push(u)}let i=[...e,...n];return{asks:i.slice(0,g),omitted:Math.max(0,i.length-g)}}catch{return k()}}r(y,"readInstalledAsks");export{g as a,m as b,y as c};