@rulemetric/cli 0.7.43 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +34 -0
  2. package/dist/base-command.js +1 -1
  3. package/dist/{chunk-QFVGUZDO.js → chunk-4PWGV2OW.js} +9 -8
  4. package/dist/chunk-7QQSYEPT.js +1 -0
  5. package/dist/chunk-A4FYFRN7.js +1 -0
  6. package/dist/chunk-BAVLNWO4.js +1 -0
  7. package/dist/chunk-CF7FUQQ4.js +66 -0
  8. package/dist/chunk-EVAQBD5V.js +1 -0
  9. package/dist/chunk-FAZMKMTC.js +45 -0
  10. package/dist/{chunk-2DXBC2JQ.js → chunk-LWI5K6T4.js} +1 -1
  11. package/dist/{chunk-ATA4J4ZG.js → chunk-MBHDTW3M.js} +1 -1
  12. package/dist/chunk-T4ZIK6RS.js +1 -0
  13. package/dist/chunk-UKN2YVY4.js +17 -0
  14. package/dist/chunk-W76EQSEV.js +2 -0
  15. package/dist/chunk-XJYNMJHH.js +9 -0
  16. package/dist/chunk-ZE2PGHJQ.js +13 -0
  17. package/dist/commands/antigravity/backfill.js +1 -1
  18. package/dist/commands/auth/create-key.js +1 -1
  19. package/dist/commands/auth/login.js +1 -1
  20. package/dist/commands/auth/logout.js +1 -1
  21. package/dist/commands/auth/revoke-key.js +1 -1
  22. package/dist/commands/auth/signup.js +1 -1
  23. package/dist/commands/auth/status.js +1 -1
  24. package/dist/commands/capture/scope.js +1 -1
  25. package/dist/commands/catalog/index.js +1 -1
  26. package/dist/commands/catalog/recommend.js +1 -1
  27. package/dist/commands/convert.js +1 -1
  28. package/dist/commands/converters.js +1 -1
  29. package/dist/commands/crons/list.js +1 -1
  30. package/dist/commands/crons/run.js +1 -1
  31. package/dist/commands/dashboard.js +1 -1
  32. package/dist/commands/diagnostics.js +1 -1
  33. package/dist/commands/eval-targets/create.js +1 -1
  34. package/dist/commands/eval-targets/list.js +1 -1
  35. package/dist/commands/evals/agent.js +1 -1
  36. package/dist/commands/evals/auto-run.js +1 -1
  37. package/dist/commands/evals/benchmark.js +1 -1
  38. package/dist/commands/evals/compare.js +1 -1
  39. package/dist/commands/evals/create.js +1 -1
  40. package/dist/commands/evals/optimize-description.js +1 -1
  41. package/dist/commands/evals/optimize.js +1 -1
  42. package/dist/commands/evals/refine-cases.js +1 -1
  43. package/dist/commands/evals/run.js +1 -1
  44. package/dist/commands/evals/validate-judge.js +1 -1
  45. package/dist/commands/experiments/list.js +1 -0
  46. package/dist/commands/gateway/ensure.js +1 -1
  47. package/dist/commands/hooks/install.js +1 -1
  48. package/dist/commands/hooks/run.js +1 -1
  49. package/dist/commands/hooks/uninstall.js +1 -1
  50. package/dist/commands/import.js +1 -1
  51. package/dist/commands/instructions/create.js +1 -1
  52. package/dist/commands/instructions/delete.js +1 -1
  53. package/dist/commands/instructions/fork.js +1 -1
  54. package/dist/commands/instructions/get.js +1 -1
  55. package/dist/commands/instructions/list.js +1 -1
  56. package/dist/commands/instructions/promote.js +1 -1
  57. package/dist/commands/instructions/pull.js +1 -1
  58. package/dist/commands/instructions/restore.js +1 -1
  59. package/dist/commands/instructions/retract.js +1 -0
  60. package/dist/commands/instructions/upstream.js +1 -1
  61. package/dist/commands/instructions/versions.js +1 -1
  62. package/dist/commands/launcher.js +1 -1
  63. package/dist/commands/local/down.js +1 -1
  64. package/dist/commands/local/up.js +1 -1
  65. package/dist/commands/org/current.js +1 -1
  66. package/dist/commands/org/list.js +1 -1
  67. package/dist/commands/org/switch.js +1 -1
  68. package/dist/commands/packs/add-instruction.js +1 -1
  69. package/dist/commands/packs/apply.js +1 -1
  70. package/dist/commands/packs/create.js +1 -1
  71. package/dist/commands/packs/fork.js +1 -1
  72. package/dist/commands/packs/get.js +1 -1
  73. package/dist/commands/packs/list.js +1 -1
  74. package/dist/commands/packs/remove-instruction.js +1 -1
  75. package/dist/commands/proxy/env.js +1 -1
  76. package/dist/commands/proxy/logs.js +1 -1
  77. package/dist/commands/proxy/restart.js +1 -1
  78. package/dist/commands/proxy/setup.js +1 -1
  79. package/dist/commands/proxy/start.js +1 -1
  80. package/dist/commands/proxy/status.js +1 -1
  81. package/dist/commands/proxy/stop.js +1 -1
  82. package/dist/commands/research/backfill.js +1 -1
  83. package/dist/commands/research/tail-transcript.js +1 -1
  84. package/dist/commands/service/install.js +1 -1
  85. package/dist/commands/service/status.js +1 -1
  86. package/dist/commands/service/uninstall.js +1 -1
  87. package/dist/commands/sessions/analyze.js +1 -1
  88. package/dist/commands/sessions/delete.js +1 -1
  89. package/dist/commands/sessions/end.js +1 -1
  90. package/dist/commands/sessions/import.js +1 -1
  91. package/dist/commands/sessions/list.js +1 -1
  92. package/dist/commands/sessions/start.js +1 -1
  93. package/dist/commands/setup.js +1 -1
  94. package/dist/commands/skills/export-approved.js +1 -1
  95. package/dist/commands/skills/install.js +1 -1
  96. package/dist/commands/skills/list.js +1 -1
  97. package/dist/commands/skills/publish.js +1 -1
  98. package/dist/commands/skills/search.js +1 -1
  99. package/dist/commands/skills/update.js +1 -1
  100. package/dist/commands/suggestions/accept.js +1 -1
  101. package/dist/commands/suggestions/dismiss.js +1 -1
  102. package/dist/commands/suggestions/list.js +1 -1
  103. package/dist/commands/suggestions/refresh.js +1 -1
  104. package/dist/dashboard/Dashboard.js +1 -1
  105. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  106. package/dist/lib/agent-loop.js +1 -1
  107. package/dist/lib/handlers/cron-instruction-evolution.js +1 -1
  108. package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
  109. package/dist/lib/handlers/process-changelog.js +1 -1
  110. package/dist/lib/handlers/process-insights.js +1 -1
  111. package/dist/lib/handlers/process-memory-ab.js +1 -1
  112. package/dist/lib/handlers/process-run-cleanup.js +1 -1
  113. package/dist/lib/insights-prompts.js +1 -1
  114. package/dist/lib/instruction-proposer.js +1 -1
  115. package/dist/lib/manual-tasks.js +1 -1
  116. package/dist/lib/retraction.js +1 -0
  117. package/oclif.manifest.json +434 -300
  118. package/package.json +9 -6
  119. package/dist/chunk-2RCWYVEU.js +0 -1
  120. package/dist/chunk-3BZPEN5H.js +0 -1
  121. package/dist/chunk-5R5RGKOW.js +0 -38
  122. package/dist/chunk-7G6T5C7J.js +0 -1
  123. package/dist/chunk-DGH4FBMM.js +0 -2
  124. package/dist/chunk-KZZ2MUQQ.js +0 -1
  125. package/dist/chunk-N7TGRFVZ.js +0 -70
  126. package/dist/chunk-O7PSLZO6.js +0 -15
  127. package/dist/chunk-RMDLJN4L.js +0 -8
  128. package/dist/chunk-RWF75MTD.js +0 -2
  129. package/dist/chunk-V2IEFHT7.js +0 -1
  130. package/dist/chunk-W74LSQ6Y.js +0 -1
  131. package/dist/lib/handlers/process-announcement.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.7.43",
3
+ "version": "0.8.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -50,6 +50,9 @@
50
50
  },
51
51
  "capture": {
52
52
  "description": "Control what the worker captures"
53
+ },
54
+ "experiments": {
55
+ "description": "Instructions under randomised test and their verdicts"
53
56
  }
54
57
  }
55
58
  },
@@ -77,9 +80,9 @@
77
80
  "postgres": "^3.4.0",
78
81
  "react": "^19.0.0",
79
82
  "zod": "^3.24.0",
80
- "@rulemetric/hooks": "0.7.43",
81
- "@rulemetric/proxy": "0.7.43",
82
- "@rulemetric/skills-registry": "0.7.43"
83
+ "@rulemetric/hooks": "0.8.0",
84
+ "@rulemetric/skills-registry": "0.8.0",
85
+ "@rulemetric/proxy": "0.8.0"
83
86
  },
84
87
  "//deps": "Worker (`evals agent`) runtime deps: the @opentelemetry/* set, @sentry/node, and postgres are STATIC top-level imports loaded at worker startup (via bundled @rulemetric/{telemetry,db}) — they MUST be runtime deps or a clean `npm i -g` crashes with ModuleLoadError. `better-sqlite3` is optionalDependencies (below): it's a native module, lazy `require()`'d inside a try/catch (packages/session providers cursor/opencode) so a missing binary degrades gracefully — making it a hard dep would break `npm i -g` on platforms without prebuilt binaries. `resend` stays a devDep: lazy `await import('resend')` guarded by RESEND_API_KEY, which end-user workers never set (provider falls back to noop). Classification verified via import-graph scan of dist/commands/evals/agent.js + per-importer static/lazy check.",
85
88
  "optionalDependencies": {
@@ -100,11 +103,11 @@
100
103
  "@rulemetric/api": "0.0.1",
101
104
  "@rulemetric/core": "0.0.1",
102
105
  "@rulemetric/db": "0.0.1",
103
- "@rulemetric/effectiveness": "0.0.1",
104
106
  "@rulemetric/email": "0.0.1",
105
107
  "@rulemetric/session": "0.2.1",
106
108
  "@rulemetric/telemetry": "0.0.1",
107
- "@rulemetric/typescript-config": "0.0.0"
109
+ "@rulemetric/typescript-config": "0.0.0",
110
+ "@rulemetric/effectiveness": "0.0.1"
108
111
  },
109
112
  "scripts": {
110
113
  "build": "node scripts/build.mjs",
@@ -1 +0,0 @@
1
- import{f as Z}from"./chunk-RMDLJN4L.js";import{b as B,i as V,j as X,k as J,l as Y,m as z,n as K}from"./chunk-BL4BN6RU.js";import{e as Q}from"./chunk-DBELYMDA.js";import{d as G,e as S,f as W}from"./chunk-G5BXZT6F.js";import{e as $,f as q}from"./chunk-KLEF5D3A.js";import{a as c}from"./chunk-ZLLER3HP.js";import{createHash as ie}from"node:crypto";var _=c(e=>ie("sha256").update(e).digest("hex"),"sha256"),ee=1.3,H=4,le=20;function ue(e,r){if(!e.configured||r<=0)return H;let n=Math.ceil(e.minPairs*ee/r);return Math.min(le,Math.max(H,n))}c(ue,"passCapFor");function ce(e,r=10,n=H){if(e<=0)return{passes:0,expectedPairs:0,feasible:!1,reason:"no live cases"};let s=Math.ceil(r*ee),t=Math.min(n,Math.ceil(s/e)),a=t*e;return a<r?{passes:t,expectedPairs:a,feasible:!1,reason:`${e} live case(s) x ${n} passes = ${e*n} pairs at best, below the ${r} a controlled verdict requires \u2014 add cases rather than replaying these`}:{passes:t,expectedPairs:a,feasible:!0}}c(ce,"planPasses");var pe=60,de=c(e=>typeof e=="object"&&e!==null&&typeof e.withScore=="number"&&typeof e.withoutScore=="number","isPair");function ge(e,r,n){let s=[...e].sort((t,a)=>Date.parse(a.createdAt)-Date.parse(t.createdAt));for(let t of s){if(t.applied)continue;let a=t.gates?.accumulation;if(!a||typeof a!="object"||a.priorContentHash!==r||a.targetPairs!==n||typeof a.candidateContentHash!="string"||!Array.isArray(a.pairs))continue;let p=a.pairs.filter(de);if(p.length===a.pairs.length&&!(p.length>=n))return{promotionId:t.id,candidateContentHash:a.candidateContentHash,pairs:p,runs:typeof a.runs=="number"?a.runs:1}}return null}c(ge,"findOpenAccumulation");function me(e,r){let n=r.accumulate??(e.autoEvolveAccumulate===!0||e.autoEvolveAccumulate==="true"),s=r.accumulateTargetPairs??e.autoEvolveAccumulateTarget,t=typeof s=="string"?Number.parseInt(s,10):s,a=typeof t=="number"&&Number.isInteger(t)&&t>0?t:pe;return{enabled:n,targetPairs:a}}c(me,"readAccumulateConfig");function fe(e){let r=e.accumulateEnabled&&e.pairCount<e.targetPairs;return{apply:e.consented&&!r,peeking:r}}c(fe,"resolveApply");async function Ae(e,r){let n=c(o=>r?.logger?.info?.(o)??console.log(o),"log"),{evalTargetId:s}=e,t=`[cron_instruction_evolution] ${s}`,a=await $(`/api/eval-targets/${s}`),p=a.metadata??{};if(X(p))return n(`${t}: PAUSED (metadata.autoEvolvePaused) \u2014 no model budget spent. Opt-in is intact.`),{skipped:"paused"};let y=be(p);if(y==null)return n(`${t}: refusing \u2014 metadata.immutableSections is unset. Set it (use [] to explicitly protect nothing) before letting the loop edit this target unattended.`),{skipped:"immutable-sections-unset"};let f=(await $(`/api/eval-targets/${s}/evals`)).filter(o=>!o.retiredAt);if(f.length===0)return{skipped:"no-live-cases"};let R=V(p);R.note&&n(`${t}: ${R.note}`);let d=ce(f.length,R.minPairs,ue(R,f.length));if(!d.feasible)return n(`${t}: cannot reach a sufficient verdict \u2014 ${d.reason}`),{skipped:"cannot-reach-min-n",reason:d.reason};let te=J({liveCases:f.length,passes:d.passes});n(`${t}: budget for this run \u2014 ${K(te)}`);let E=await $(`/api/eval-targets/${s}/judge-calibration`);if(!E.powerCheck.adequate){let o=(E.powerCheck.reasons??[]).join("; ");return n(`${t}: not adequately powered, skipping before spending budget \u2014 ${o}`),{skipped:"not-adequate",reason:o}}let M=W,ne=Date.now()-M*24*60*60*1e3,T=await $(`/api/eval-targets/${s}/promotions?limit=200`),O=T.promotions.filter(o=>o.applied&&Date.parse(o.createdAt)>=ne).length;if(O>=S)return n(`${t}: change budget looks exhausted (${O}/${S} applied in ${M}d), skipping before spending budget`),{skipped:"budget-exhausted"};let A=G();if(!A.green)return n(`${t}: A/A canary is RED \u2014 halting. ${A.failures.join(" | ")}`),{skipped:"canary-red",reason:A.failures.join(" | ")};let L=a.content,k=_(L),l=me(p,e),b=l.enabled?ge(T.promotions,k,l.targetPairs):null,v,x,w=[],C=0,N=B;if(b){let o=await $(`/api/promotions/${b.promotionId}`);if(_(o.toContent)!==b.candidateContentHash)return n(`${t}: stored candidate does not match its recorded hash \u2014 refusing to continue`),{skipped:"accumulation-hash-mismatch",reason:b.promotionId};v=o.toContent,x=o.proposalRationale??"",w=b.pairs,C=b.runs,N=0,n(`${t}: continuing accumulation ${b.promotionId} \u2014 ${w.length}/${l.targetPairs} pair(s) carried from ${C} prior run(s)`)}else{let o=E.caseDiscrimination?.cases??[],u=await Z({currentContent:a.content,targetType:a.type,targetName:a.name,immutableSections:y,evidence:{nonDiscriminating:o.filter(i=>!i.discriminating).map(i=>`${i.name??i.assertion??"unnamed"} \u2014 ${i.note}`),weakest:o.filter(i=>i.discriminating&&i.withPassRate<i.withoutPassRate).map(i=>({name:i.name??i.assertion??"unnamed",withPassRate:i.withPassRate,withoutPassRate:i.withoutPassRate})),notes:[]}});if(!u.ok)return n(`${t}: no usable proposal \u2014 ${u.reason}`),{skipped:"no-proposal",reason:u.reason};v=u.proposal.candidateContent,x=u.proposal.rationale}n(`${t}: measuring ${f.length} case(s) x ${d.passes} pass(es) = up to ${d.expectedPairs} pairs, candidate vs prior version`);let h=[],j=[],ae=Date.now(),U=0,I=0;for(let o=1;o<=d.passes;o++){let u=await Q({cases:f,candidateContent:v,priorVersionContent:L,concurrency:e.concurrency??2,runNumber:o,opts:{targetId:s,targetVersion:a.version??1,iteration:1,timeout:e.timeout??24e4,model:e.model,graderModel:e.graderModel,skipGrading:!1,targetType:a.type,targetName:a.name},onLog:n});h.push(...u.pairs),j.push(...u.results),U+=u.completed,I+=u.failed,n(`${t}: pass ${o}/${d.passes} \u2014 ${u.pairs.length} pair(s), running total ${h.length}`)}let P=[...w,...h],D=h.length>0,g=Y({runs:j,plannedPairs:d.expectedPairs,usablePairs:h.length,verdictPairs:D?P.length:h.length,proposalCalls:N,passes:d.passes,liveCases:f.length,wallMs:Date.now()-ae});if(n(`${t}: ${U} completed, ${I} failed, ${h.length} usable pair(s) \u2014 spent ~${g.modelCalls} model calls (${g.proposalCalls} proposal + ${g.executorCalls} executor + >=${g.graderCalls} grader) in ${(g.wallMs/6e4).toFixed(1)} min`+(D?`; the ${g.verdictPairs} pair(s) behind this verdict resolve +/-${z(g.mde)} at 80% power`:"")),!D)return{skipped:"no-pairs",reason:`${I} run(s) failed or were ungradeable`,cost:g};l.enabled&&n(`${t}: accumulated ${P.length}/${l.targetPairs} pair(s) over ${C+1} run(s) on one candidate`);let F=e.apply??(p.autoEvolveApply===!0||p.autoEvolveApply==="true"),{apply:oe,peeking:re}=fe({consented:F,accumulateEnabled:l.enabled,pairCount:P.length,targetPairs:l.targetPairs});F&&re&&n(`${t}: interim readout at ${P.length}/${l.targetPairs} pairs \u2014 recording the decision but not acting until the target is reached`);let m=await q(`/api/eval-targets/${s}/promotions`,{candidateContent:v,proposalSource:"llm",proposalRationale:x,pairs:P,canaryGreen:A.green,measuredAgainstContentHash:k,immutableSections:y,apply:oe,measurementCost:g,...l.enabled?{accumulation:{candidateContentHash:_(v),priorContentHash:k,targetPairs:l.targetPairs,carriedPairs:w.length,runs:C+1}}:{}});return n(`${t}: ${m.decision}${m.applied?" (APPLIED)":""} \u2014 ${m.rationale}`+(m.refusals.length>0?` | refusals: ${m.refusals.join("; ")}`:"")),{decision:m.decision,applied:m.applied,nPairs:P.length,promotionId:m.id,cost:g,...l.enabled?{carriedPairs:w.length,accumulationRuns:C+1}:{}}}c(Ae,"cronInstructionEvolution");function be(e){let r=e.immutableSections;return r==null||!Array.isArray(r)?null:r.filter(n=>typeof n=="string")}c(be,"readImmutableSections");export{ee as a,H as b,le as c,ue as d,ce as e,pe as f,ge as g,me as h,fe as i,Ae as j,be as k};
@@ -1 +0,0 @@
1
- import{a as C}from"./chunk-N7TGRFVZ.js";import{f as c,i as f}from"./chunk-7G6T5C7J.js";import{d as m,e as p}from"./chunk-5R5RGKOW.js";import{a as r}from"./chunk-ZLLER3HP.js";import*as a from"node:fs/promises";import*as g from"node:path";import{eq as b}from"drizzle-orm";async function v(e){let n=e;for(let t=0;t<50;t++){try{return await a.stat(g.join(n,"pnpm-workspace.yaml")),n}catch{}let i=g.dirname(n);if(i===n)return null;n=i}return null}r(v,"findRepoRoot");async function k(e){if(e)try{return await a.readFile(e,"utf-8")}catch{return null}let n=await v(process.cwd())??process.cwd(),t=g.join(n,"CHANGELOG.md");try{return await a.readFile(t,"utf-8")}catch{return null}}r(k,"readChangelog");var _="https://rulemetric.com";function D(e){let n=e.date??new Date().toISOString().slice(0,10),t=C({version:e.version,date:n,sections:e.sections,unsubscribeUrl:"{{unsubscribe_url}}",recipientName:"{{recipient_name}}",productUrl:_});return{version:e.version,releaseDate:n,subject:t.subject,htmlBody:t.html,textBody:t.text,sections:e.sections}}r(D,"renderRow");async function R(e={}){let n=e.db??f(),t=e.logger??{info:r(s=>console.log(s),"info"),warn:r(s=>console.warn(s),"warn")},i=await k(e.changelogPath);if(i===null)return t.info("[cron_check_changelog] CHANGELOG.md not found; nothing to do"),{createdCount:0,skippedCount:0};let y=m(i),h=p(y);if(h.length===0)return t.info("[cron_check_changelog] No announceable entries; nothing to do"),{createdCount:0,skippedCount:0};let d=0,l=0;for(let s of h){if((await n.select({id:c.id}).from(c).where(b(c.version,s.version)).limit(1)).length>0){l++;continue}let o=D(s);try{await n.insert(c).values({version:o.version,releaseDate:o.releaseDate,subject:o.subject,htmlBody:o.htmlBody,textBody:o.textBody,sections:o.sections,status:"draft"}),d++,t.info(`[cron_check_changelog] Created draft announcement for ${o.version}`)}catch(u){let w=u instanceof Error?u.message:String(u);if(/duplicate key|unique/i.test(w)){l++;continue}throw u}}return t.info(`[cron_check_changelog] Done: created ${d}, skipped ${l}`),{createdCount:d,skippedCount:l}}r(R,"processChangelog");export{R as a};
@@ -1,38 +0,0 @@
1
- import{a as e}from"./chunk-ZLLER3HP.js";function b(n){if(!n||typeof n!="object")return n;let c=n,r=c.project_areas;if(r!==void 0&&!Array.isArray(r)){let o=r&&typeof r=="object"?r.areas:void 0;c.project_areas=Array.isArray(o)?o:void 0}return n}e(b,"normalizeRecommendations");import{z as s}from"zod";var w=["org","team","project","personal"],v=s.object({name:s.string().min(1),description:s.string().min(1),type:s.literal("instruction").default("instruction"),scope:s.enum(w),version:s.string().min(1),tags:s.array(s.string()).optional(),compatibility:s.array(s.string()).optional(),slots:s.record(s.string(),s.string()).optional(),metadata:s.record(s.string(),s.unknown()).optional()});import{z as a}from"zod";var y=a.object({name:a.string().min(1),description:a.string().min(1),type:a.literal("prompt"),version:a.string().min(1),tags:a.array(a.string()).optional(),variables:a.array(a.string()).optional(),metadata:a.record(a.string(),a.unknown()).optional()});function f(n,c){let r=c.map(o=>`- ID: ${o.id}
2
- Name: ${o.name}
3
- Description: ${o.description}
4
- Tags: ${o.tags.join(", ")}
5
- Preview: ${o.contentPreview}`).join(`
6
-
7
- `);return`You are an expert at matching AI coding instructions to software projects.
8
-
9
- ## Project
10
- - Name: ${n.name}
11
- - Description: ${n.description??"No description"}
12
- - Languages: ${n.languages.join(", ")||"Unknown"}
13
- - Topics: ${n.topics.join(", ")||"None"}
14
- - Dependencies: ${n.dependencies.join(", ")||"None"}
15
-
16
- ## Available Instructions
17
-
18
- ${r}
19
-
20
- ## Task
21
-
22
- Analyze the project and recommend which instructions would be most useful. Consider:
23
- 1. Language and framework alignment
24
- 2. Project purpose and what standards/practices would help
25
- 3. Security, testing, and quality needs based on the project type
26
-
27
- Return your response as JSON in this exact format:
28
- {
29
- "recommendations": [
30
- { "instructionId": "<id>", "score": <0.0-1.0>, "reason": "<one sentence explanation>" }
31
- ]
32
- }
33
-
34
- Only include instructions with a relevance score >= 0.5. Order by score descending. Return valid JSON only, no markdown fences.`}e(f,"buildRecommendationPrompt");var x=32e3,T={name:"x".repeat(64),description:"x".repeat(256),languages:["TypeScript","Python","Go"],topics:["x".repeat(32)],dependencies:["x".repeat(32)]};function _(n,c={}){if(n.length===0)return[];let r=c.charBudget??x,o=f(T,[]).length,l=[],i=[],d=0;for(let u of n){let p=k(u);i.length>0&&o+d+p>r&&(l.push(i),i=[],d=0),i.push(u),d+=p}return i.length>0&&l.push(i),l}e(_,"batchCandidatesForPrompt");function k(n){return`- ID: ${n.id}
35
- Name: ${n.name}
36
- Description: ${n.description}
37
- Tags: ${n.tags.join(", ")}
38
- Preview: ${n.contentPreview}`.length+2}e(k,"renderedSize");var C=["Added","Changed","Fixed","Removed","Deprecated","Security"],S=/^##\s+\[([^\]]+)\](?:\s*[-–]\s*(\d{4}-\d{2}-\d{2}))?\s*$/,I=/^###\s+(.+?)\s*$/,P=/^[-*]\s+(.*\S)\s*$/,L=/^ {2,}(\S.*)$/;function O(n){let c=n.split(/\r?\n/),r=[],o=null,l=null,i=null;for(let d of c){let u=d.match(S);if(u){o&&r.push(o);let m=u[1].trim();o={version:m,date:u[2]??null,unreleased:m.toLowerCase()==="unreleased",sections:{}},l=null,i=null;continue}if(!o)continue;let p=d.match(I);if(p){let m=p[1].trim();C.includes(m)?(l=m,o.sections[l]||(o.sections[l]=[]),i=o.sections[l]):(l=null,i=null);continue}if(!l||!i)continue;let h=d.match(P);if(h){i.push(h[1]);continue}let g=d.match(L);if(g&&i.length>0){i[i.length-1]+=" "+g[1].trim();continue}}return o&&r.push(o),{entries:r}}e(O,"parseChangelog");function j(n){return n.entries.filter(c=>c.unreleased?!1:Object.values(c.sections).some(r=>r&&r.length>0))}e(j,"announceableEntries");import ue from"gray-matter";import{z as R}from"zod";var he=R.object({type:R.enum(["instruction","prompt"])});export{b as a,f as b,_ as c,O as d,j as e};
@@ -1 +0,0 @@
1
- import{a as p,c as Or}from"./chunk-ZLLER3HP.js";import{boolean as So,pgTable as qr,text as Ze,timestamp as Ct,uuid as Ko}from"drizzle-orm/pg-core";import{pgTable as Xe,text as re,timestamp as Re,jsonb as Eo,uuid as Y,primaryKey as bo}from"drizzle-orm/pg-core";var u=Xe("organizations",{id:Y("id").primaryKey().defaultRandom(),name:re("name").unique().notNull(),slug:re("slug").unique().notNull(),metadata:Eo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Re("updated_at",{withTimezone:!0}).defaultNow()}),h=Xe("teams",{id:Y("id").primaryKey().defaultRandom(),orgId:Y("org_id").references(()=>u.id,{onDelete:"cascade"}),name:re("name").notNull(),slug:re("slug").notNull(),metadata:Eo("metadata"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()}),se=Xe("user_organizations",{userId:Y("user_id").notNull(),orgId:Y("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:re("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[bo({columns:[e.userId,e.orgId]})]),ie=Xe("user_teams",{userId:Y("user_id").notNull(),teamId:Y("team_id").references(()=>h.id,{onDelete:"cascade"}).notNull(),role:re("role").notNull().default("member"),createdAt:Re("created_at",{withTimezone:!0}).defaultNow()},e=>[bo({columns:[e.userId,e.teamId]})]);var o=qr("profiles",{id:Ko("id").primaryKey(),email:Ze("email"),displayName:Ze("display_name"),activeOrgId:Ko("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:So("is_superadmin").notNull().default(!1),claudeCodePlan:Ze("claude_code_plan"),planSource:Ze("plan_source").notNull().default("detected"),setupCompletedAt:Ct("setup_completed_at",{withTimezone:!0}),liveSendSkipped:So("live_send_skipped").notNull().default(!1),createdAt:Ct("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ct("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Hr,text as de,timestamp as Lt,jsonb as qo,uuid as nt,integer as Vr,boolean as Gr,index as Ut}from"drizzle-orm/pg-core";import{boolean as Lr,jsonb as Ur,pgTable as Mt,primaryKey as Co,text as Q,timestamp as ke,uniqueIndex as qt,uuid as W}from"drizzle-orm/pg-core";import{sql as Br}from"drizzle-orm";import{pgTable as Ot,text as x,timestamp as L,jsonb as et,uuid as D,integer as tt,boolean as Mr,uniqueIndex as ot,index as je}from"drizzle-orm/pg-core";var r=Ot("instructions",{id:D("id").primaryKey().defaultRandom(),name:x("name").notNull(),description:x("description").notNull(),type:x("type").notNull().default("instruction"),scope:x("scope").notNull(),scopeRef:D("scope_ref"),version:x("version").notNull(),content:x("content").notNull(),frontmatter:et("frontmatter").notNull(),slots:et("slots"),tags:x("tags").array(),compatibility:x("compatibility").array(),createdBy:D("created_by"),createdAt:L("created_at",{withTimezone:!0}).defaultNow(),updatedAt:L("updated_at",{withTimezone:!0}).defaultNow(),archived:Mr("archived").default(!1),archivedAt:L("archived_at",{withTimezone:!0}),archivedBy:D("archived_by"),forkedFromId:D("forked_from_id").references(()=>r.id,{onDelete:"set null"}),upstreamVersion:x("upstream_version"),badge:x("badge"),contentHash:x("content_hash"),contextIdentity:x("context_identity"),scanScore:tt("scan_score"),scanFindings:et("scan_findings"),popularityScore:tt("popularity_score"),sourceUpdatedAt:L("source_updated_at",{withTimezone:!0})},e=>[ot("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),je("idx_instructions_scope").on(e.scope,e.scopeRef),je("idx_instructions_created_by").on(e.createdBy),je("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),je("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),Po=Ot("instruction_version_identities",{id:D("id").primaryKey().defaultRandom(),instructionId:D("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),contentHash:x("content_hash").notNull(),versionOrdinal:tt("version_ordinal").notNull(),content:x("content"),firstSeenAt:L("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:L("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),createdAt:L("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ot("instruction_version_identities_hash_unique").on(e.instructionId,e.contentHash),ot("instruction_version_identities_ordinal_unique").on(e.instructionId,e.versionOrdinal),je("idx_ivi_instruction").on(e.instructionId)]),ae=Ot("instruction_versions",{id:D("id").primaryKey().defaultRandom(),instructionId:D("instruction_id").references(()=>r.id,{onDelete:"cascade"}),versionNumber:tt("version_number").notNull(),content:x("content").notNull(),frontmatter:et("frontmatter").notNull(),changeSummary:x("change_summary"),createdBy:D("created_by"),createdAt:L("created_at",{withTimezone:!0}).defaultNow()},e=>[ot("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var s=Mt("projects",{id:W("id").primaryKey().defaultRandom(),orgId:W("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Q("name").notNull(),description:Q("description"),githubRepo:Q("github_repo"),gitRemoteUrl:Q("git_remote_url"),gitRootCommit:Q("git_root_commit"),gitRemoteAliases:Q("git_remote_aliases").array().notNull().default([]),metadata:Ur("metadata"),createdBy:W("created_by"),createdAt:ke("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ke("updated_at",{withTimezone:!0}).defaultNow()},e=>[qt("projects_org_name_idx").on(e.orgId,e.name),qt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Br`${e.gitRemoteUrl} IS NOT NULL`)]),U=Mt("project_instructions",{projectId:W("project_id").references(()=>s.id,{onDelete:"cascade"}).notNull(),instructionId:W("instruction_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),addedAt:ke("added_at",{withTimezone:!0}).defaultNow(),addedBy:W("added_by")},e=>[Co({columns:[e.projectId,e.instructionId]})]),Oo=Mt("project_checkouts",{projectId:W("project_id").references(()=>s.id,{onDelete:"cascade"}).notNull(),path:Q("path").notNull(),isWorktree:Lr("is_worktree").notNull().default(!1),firstSeen:ke("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:ke("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[Co({columns:[e.projectId,e.path]}),qt("project_checkouts_path_unique").on(e.path)]);var g=Hr("agent_runs",{id:nt("id").primaryKey().defaultRandom(),userId:nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:nt("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:nt("project_id").references(()=>s.id,{onDelete:"set null"}),projectPath:de("project_path"),gitRemote:de("git_remote"),baseBranch:de("base_branch"),title:de("title"),prompt:de("prompt"),toolSpec:qo("tool_spec").notNull().default([]),autoWorktree:Gr("auto_worktree").notNull().default(!0),status:de("status").notNull().default("pending"),sessionCount:Vr("session_count").notNull().default(0),metadata:qo("metadata").notNull().default({}),createdAt:Lt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Lt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Lt("completed_at",{withTimezone:!0})},e=>[Ut("idx_agent_runs_user").on(e.userId),Ut("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Ut("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Bt,text as I,timestamp as Ee,jsonb as X,uuid as E,integer as rt,uniqueIndex as Mo,index as R}from"drizzle-orm/pg-core";var d=Bt("sessions",{id:E("id").primaryKey().defaultRandom(),userId:E("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:I("external_session_id"),projectId:E("project_id").references(()=>s.id,{onDelete:"set null"}),orgId:E("org_id").references(()=>u.id,{onDelete:"set null"}),tool:I("tool").notNull(),projectPath:I("project_path"),gitBranch:I("git_branch"),startedAt:Ee("started_at",{withTimezone:!0}).notNull(),endedAt:Ee("ended_at",{withTimezone:!0}),eventCount:rt("event_count").default(0),tokenUsage:X("token_usage"),analysis:X("analysis"),analyzedAt:Ee("analyzed_at",{withTimezone:!0}),analyzedEventCount:rt("analyzed_event_count"),analyzedTurnCount:rt("analyzed_turn_count"),metadata:X("metadata").default({}),origin:I("origin").notNull().default("unknown"),runId:E("run_id").references(()=>g.id,{onDelete:"set null"}),model:I("model"),harnessVersion:I("harness_version"),createdAt:Ee("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),Mo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),ue=Bt("session_events",{id:E("id").primaryKey().defaultRandom(),sessionId:E("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:rt("sequence").notNull(),eventType:I("event_type").notNull(),content:I("content"),toolName:I("tool_name"),toolInput:X("tool_input"),toolOutput:X("tool_output"),tokenUsage:X("token_usage"),model:I("model"),timestamp:Ee("timestamp",{withTimezone:!0}).notNull(),metadata:X("metadata").default({})},e=>[Mo("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)]),B=Bt("session_instructions",{sessionId:E("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:E("instruction_id").notNull().references(()=>r.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 Fr,text as le,timestamp as Ht,uuid as be,integer as Lo,index as st}from"drizzle-orm/pg-core";var T=Fr("memories",{id:be("id").primaryKey().defaultRandom(),userId:be("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:be("org_id"),projectId:be("project_id").references(()=>s.id,{onDelete:"set null"}),version:Lo("version").notNull().default(1),parentId:be("parent_id").references(()=>T.id,{onDelete:"set null"}),kind:le("kind").notNull(),title:le("title").notNull(),body:le("body").notNull(),source:le("source").notNull(),status:le("status").notNull().default("active"),trustClass:le("trust_class"),trustVersion:Lo("trust_version"),trustComputedAt:Ht("trust_computed_at",{withTimezone:!0}),createdAt:Ht("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Ht("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[st("idx_memories_user").on(e.userId),st("idx_memories_project").on(e.projectId),st("idx_memories_parent").on(e.parentId),st("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as Jr,text as Se,timestamp as Vt,uuid as Gt,integer as Uo,jsonb as $r,index as Bo}from"drizzle-orm/pg-core";var Ho=Jr("memory_experiments",{id:Gt("id").primaryKey().defaultRandom(),memoryId:Gt("memory_id").notNull().references(()=>T.id,{onDelete:"cascade"}),userId:Gt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:Uo("memory_version").notNull().default(1),taskPrompt:Se("task_prompt").notNull(),expectations:Se("expectations").array().notNull().default([]),trials:Uo("trials").notNull().default(10),model:Se("model"),status:Se("status").notNull().default("pending"),result:$r("result").$type(),error:Se("error"),createdAt:Vt("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:Vt("started_at",{withTimezone:!0}),completedAt:Vt("completed_at",{withTimezone:!0})},e=>[Bo("idx_memory_experiments_memory").on(e.memoryId),Bo("idx_memory_experiments_user").on(e.userId)]);import{boolean as Yr,date as Qr,index as Ft,integer as Wr,jsonb as Xr,pgTable as Jt,text as A,timestamp as H,uniqueIndex as Zr,uuid as ce}from"drizzle-orm/pg-core";var Vo=Jt("announcements",{id:ce("id").primaryKey().defaultRandom(),version:A("version").notNull().unique(),releaseDate:Qr("release_date").notNull(),subject:A("subject").notNull(),htmlBody:A("html_body").notNull(),textBody:A("text_body").notNull(),sections:Xr("sections").notNull().default({}),status:A("status").notNull().default("draft"),recipientCount:Wr("recipient_count"),sentAt:H("sent_at",{withTimezone:!0}),sentBy:ce("sent_by"),error:A("error"),createdAt:H("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:H("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ft("idx_announcements_status").on(e.status),Ft("idx_announcements_created").on(e.createdAt)]),Go=Jt("announcement_deliveries",{id:ce("id").primaryKey().defaultRandom(),announcementId:ce("announcement_id").notNull(),userId:ce("user_id").notNull(),email:A("email").notNull(),status:A("status").notNull().default("pending"),providerId:A("provider_id"),error:A("error"),sentAt:H("sent_at",{withTimezone:!0}),createdAt:H("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Zr("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Ft("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Fo=Jt("notification_preferences",{userId:ce("user_id").primaryKey(),productAnnouncements:Yr("product_announcements").notNull().default(!0),unsubscribeToken:A("unsubscribe_token").notNull().unique(),unsubscribedAt:H("unsubscribed_at",{withTimezone:!0}),createdAt:H("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:H("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{pgTable as es,text as $t,timestamp as it,uuid as at,index as Jo}from"drizzle-orm/pg-core";var b=es("org_invitations",{id:at("id").primaryKey().defaultRandom(),orgId:at("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:$t("email").notNull(),role:$t("role").notNull().default("member"),teamId:at("team_id").references(()=>h.id,{onDelete:"set null"}),invitedBy:at("invited_by").notNull().references(()=>o.id,{onDelete:"cascade"}),token:$t("token").notNull().unique(),expiresAt:it("expires_at",{withTimezone:!0}).notNull(),acceptedAt:it("accepted_at",{withTimezone:!0}),revokedAt:it("revoked_at",{withTimezone:!0}),createdAt:it("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jo("idx_org_invitations_token").on(e.token),Jo("idx_org_invitations_org").on(e.orgId)]);import{pgTable as ts,text as os,timestamp as ns,jsonb as rs,uuid as Yt,index as $o}from"drizzle-orm/pg-core";var _e=ts("instruction_events",{id:Yt("id").primaryKey().defaultRandom(),instructionId:Yt("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),eventType:os("event_type").notNull(),actorId:Yt("actor_id").notNull(),metadata:rs("metadata"),createdAt:ns("created_at",{withTimezone:!0}).defaultNow()},e=>[$o("idx_instruction_events_instruction").on(e.instructionId),$o("idx_instruction_events_type").on(e.eventType)]);import{pgTable as Yo,text as dt,timestamp as Qo,uuid as j,integer as Wo,index as me,unique as ss}from"drizzle-orm/pg-core";var S=Yo("treatment_assignments",{id:j("id").primaryKey().defaultRandom(),userId:j("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:j("treatment_id").notNull(),treatmentVersion:Wo("treatment_version").notNull().default(1),projectId:j("project_id").references(()=>s.id,{onDelete:"set null"}),assignedBy:j("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:dt("method").notNull(),assignedAt:Qo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[me("idx_treatment_assignments_user").on(e.userId),me("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),me("idx_treatment_assignments_project").on(e.projectId)]),K=Yo("treatment_exposures",{id:j("id").primaryKey().defaultRandom(),sessionId:j("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),userId:j("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:dt("treatment_type").notNull(),treatmentId:j("treatment_id").notNull(),treatmentVersion:Wo("treatment_version").notNull().default(1),assignmentId:j("assignment_id").references(()=>S.id,{onDelete:"set null"}),method:dt("method").notNull(),exposedAt:Qo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ss("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),me("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),me("idx_treatment_exposures_user").on(e.userId),me("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as is,text as Qt,timestamp as as,uuid as ut,integer as ds,index as Xo,uniqueIndex as us}from"drizzle-orm/pg-core";var Zo=is("pending_treatment_exposures",{id:ut("id").primaryKey().defaultRandom(),userId:ut("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Qt("external_session_id").notNull(),treatmentType:Qt("treatment_type").notNull(),treatmentId:ut("treatment_id").notNull(),treatmentVersion:ds("treatment_version").notNull().default(1),method:Qt("method").notNull().default("injected"),projectId:ut("project_id").references(()=>s.id,{onDelete:"set null"}),createdAt:as("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[us("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Xo("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Xo("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as ls,text as pe,timestamp as Wt,uuid as Xt,jsonb as cs,uniqueIndex as _s,index as en}from"drizzle-orm/pg-core";var lt=ls("session_terminal_targets",{id:Xt("id").primaryKey().defaultRandom(),userId:Xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Xt("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:pe("external_session_id"),kind:pe("kind").notNull(),target:pe("target").notNull(),status:pe("status").notNull().default("active"),attachCommand:pe("attach_command").notNull(),projectPath:pe("project_path"),metadata:cs("metadata").notNull().default({}),lastSeenAt:Wt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Wt("updated_at",{withTimezone:!0}).defaultNow()},e=>[_s("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 ms,index as ct,jsonb as tn,pgTable as ps,text as Z,timestamp as Ke,uuid as _t,integer as on}from"drizzle-orm/pg-core";var nn=ps("session_send_jobs",{id:_t("id").primaryKey().defaultRandom(),userId:_t("user_id").notNull(),sessionId:_t("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:_t("terminal_target_id").references(()=>lt.id,{onDelete:"set null"}),target:Z("target").notNull(),message:Z("message").notNull(),submit:ms("submit").notNull().default(!0),delivery:Z("delivery").notNull().default("live"),status:Z("status").notNull().default("pending"),result:tn("result"),error:Z("error"),attempts:on("attempts").notNull().default(0),taskKind:Z("task_kind"),payload:tn("payload"),claimedBy:Z("claimed_by"),claimedAt:Ke("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ke("lease_expires_at",{withTimezone:!0}),leaseRecoveries:on("lease_recoveries").notNull().default(0),createdAt:Ke("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ke("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ke("completed_at",{withTimezone:!0})},e=>[ct("idx_session_send_jobs_user").on(e.userId),ct("idx_session_send_jobs_session").on(e.sessionId),ct("idx_session_send_jobs_status").on(e.status),ct("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as sn,text as ee,timestamp as mt,jsonb as an,uuid as V,integer as fs,boolean as xs,uniqueIndex as Ns,index as rn,primaryKey as gs}from"drizzle-orm/pg-core";var z=sn("packs",{id:V("id").primaryKey().defaultRandom(),name:ee("name").notNull(),description:ee("description").notNull(),scope:ee("scope").notNull(),scopeRef:V("scope_ref"),version:ee("version").notNull().default("1.0.0"),tags:ee("tags").array(),badge:ee("badge"),metadata:an("metadata"),createdBy:V("created_by"),createdAt:mt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mt("updated_at",{withTimezone:!0}).defaultNow(),archived:xs("archived").default(!1),archivedAt:mt("archived_at",{withTimezone:!0}),archivedBy:V("archived_by"),forkedFromId:V("forked_from_id").references(()=>z.id,{onDelete:"set null"}),upstreamVersion:ee("upstream_version")},e=>[Ns("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),rn("idx_packs_scope").on(e.scope,e.scopeRef),rn("idx_packs_created_by").on(e.createdBy)]),G=sn("pack_instructions",{packId:V("pack_id").references(()=>z.id,{onDelete:"cascade"}).notNull(),instructionId:V("instruction_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),position:fs("position").notNull().default(0),slotOverrides:an("slot_overrides"),addedAt:mt("added_at",{withTimezone:!0}).defaultNow(),addedBy:V("added_by")},e=>[gs({columns:[e.packId,e.instructionId]})]);import{pgTable as vs,text as Zt,timestamp as hs,jsonb as Is,uuid as eo,index as fe}from"drizzle-orm/pg-core";var xe=vs("instruction_usage_events",{id:eo("id").primaryKey().defaultRandom(),instructionId:eo("instruction_id").references(()=>r.id,{onDelete:"set null"}),userId:eo("user_id").notNull(),surface:Zt("surface").notNull(),action:Zt("action").notNull(),metadata:Is("metadata"),traceId:Zt("trace_id"),createdAt:hs("created_at",{withTimezone:!0}).defaultNow()},e=>[fe("idx_usage_events_instruction").on(e.instructionId),fe("idx_usage_events_user").on(e.userId),fe("idx_usage_events_surface").on(e.surface),fe("idx_usage_events_action").on(e.action),fe("idx_usage_events_created_at").on(e.createdAt),fe("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as ys,text as pt,timestamp as dn,jsonb as Ts,uuid as un,index as to}from"drizzle-orm/pg-core";var ln=ys("worker_connections",{id:un("id").primaryKey().defaultRandom(),userId:un("user_id").notNull(),workerType:pt("worker_type").notNull().default("mcp"),clientName:pt("client_name").notNull(),clientVersion:pt("client_version"),workerVersion:pt("worker_version"),lastHeartbeat:dn("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:dn("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ts("metadata")},e=>[to("idx_worker_connections_user").on(e.userId),to("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),to("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as ws,text as ft,timestamp as As,jsonb as zs,uuid as cn,index as _n}from"drizzle-orm/pg-core";var mn=ws("cli_setup_events",{id:cn("id").primaryKey().defaultRandom(),userId:cn("user_id").notNull(),deviceId:ft("device_id").notNull(),event:ft("event").notNull(),cliVersion:ft("cli_version"),os:ft("os"),props:zs("props").notNull().default({}),createdAt:As("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[_n("idx_cli_setup_events_user").on(e.userId,e.createdAt),_n("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Ds,text as te,integer as Rs,boolean as js,timestamp as ks,jsonb as Es,uuid as bs,index as pn}from"drizzle-orm/pg-core";var fn=Ds("cli_error_events",{id:bs("id").primaryKey().defaultRandom(),deviceId:te("device_id"),event:te("event").notNull(),command:te("command"),statusCode:Rs("status_code"),message:te("message"),cliVersion:te("cli_version"),os:te("os"),nodeVersion:te("node_version"),proxied:js("proxied"),props:Es("props").notNull().default({}),createdAt:ks("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[pn("idx_cli_error_events_created").on(e.createdAt),pn("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{sql as Ss}from"drizzle-orm";import{pgTable as oe,text as _,timestamp as v,jsonb as w,uuid as c,integer as P,boolean as Pe,index as N,unique as xn}from"drizzle-orm/pg-core";var n=oe("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:w("metadata").notNull().default({}),version:P("version").notNull().default(1),parentId:c("parent_id").references(()=>n.id,{onDelete:"set null"}),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("eval_targets_name_user_idx").on(e.name,e.userId),N("idx_eval_targets_user").on(e.userId),N("idx_eval_targets_type").on(e.type),N("idx_eval_targets_parent").on(e.parentId)]),C=oe("evals",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),name:_("name").notNull(),prompt:_("prompt").notNull(),expectedOutput:_("expected_output").notNull().default(""),files:w("files").notNull().default([]),expectations:w("expectations").notNull().default([]),retiredAt:v("retired_at",{withTimezone:!0}),retiredReason:_("retired_reason"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow(),contentUpdatedAt:v("content_updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[N("idx_evals_target").on(e.evalTargetId),N("idx_evals_target_active").on(e.evalTargetId).where(Ss`${e.retiredAt} IS NULL`)]),k=oe("eval_runs",{id:c("id").primaryKey().defaultRandom(),jobId:c("job_id"),evalId:c("eval_id").notNull().references(()=>C.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),evalTargetVersion:P("eval_target_version").notNull(),configuration:_("configuration").notNull(),runNumber:P("run_number").notNull().default(1),iteration:P("iteration").notNull().default(1),status:_("status").notNull().default("completed"),outputs:w("outputs").notNull().default({}),timing:w("timing").notNull().default({}),grading:w("grading").notNull().default({}),comparison:w("comparison"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_runs_eval").on(e.evalId),N("idx_eval_runs_target").on(e.evalTargetId),N("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),Nn=oe("eval_comparisons",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),targetAId:c("target_a_id").notNull().references(()=>n.id,{onDelete:"cascade"}),targetBId:c("target_b_id").notNull().references(()=>n.id,{onDelete:"cascade"}),targetAVersion:P("target_a_version").notNull(),targetBVersion:P("target_b_version").notNull(),isSwapped:Pe("is_swapped").notNull().default(!1),winnerTargetId:c("winner_target_id").references(()=>n.id,{onDelete:"set null"}),perEval:w("per_eval").notNull().default([]),overall:w("overall").notNull().default({}),rawOutput:_("raw_output"),model:_("model"),status:_("status").notNull().default("completed"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_comparisons_target_a").on(e.targetAId),N("idx_eval_comparisons_target_b").on(e.targetBId),N("idx_eval_comparisons_user").on(e.userId)]),gn=oe("eval_grade_annotations",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalRunId:c("eval_run_id").notNull().references(()=>k.id,{onDelete:"cascade"}),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),expectationIndex:P("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Pe("judge_passed").notNull(),judgeMethod:_("judge_method").notNull(),judgeModel:_("judge_model"),verdict:_("verdict").notNull(),flag:_("flag"),note:_("note"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_eval_grade_annotations_target").on(e.evalTargetId),N("idx_eval_grade_annotations_run").on(e.evalRunId),xn("eval_grade_annotations_eval_run_id_expectation_index_key").on(e.evalRunId,e.expectationIndex)]),vn=oe("judge_reviewer_verdicts",{id:c("id").primaryKey().defaultRandom(),userId:c("user_id").notNull(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),evalRunId:c("eval_run_id").notNull().references(()=>k.id,{onDelete:"cascade"}),expectationIndex:P("expectation_index").notNull(),expectationText:_("expectation_text").notNull(),judgePassed:Pe("judge_passed").notNull(),humanPassed:Pe("human_passed").notNull(),reviewerEngine:_("reviewer_engine").notNull(),reviewerModel:_("reviewer_model").notNull(),reviewerPassed:Pe("reviewer_passed").notNull(),resolvedAt:v("resolved_at",{withTimezone:!0}),resolution:_("resolution"),createdAt:v("created_at",{withTimezone:!0}).defaultNow(),updatedAt:v("updated_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_jrv_target").on(e.evalTargetId),xn("judge_reviewer_verdicts_eval_run_id_expectation_index_review_key").on(e.evalRunId,e.expectationIndex,e.reviewerModel)]),Ne=oe("benchmarks",{id:c("id").primaryKey().defaultRandom(),evalTargetId:c("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),iteration:P("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:v("created_at",{withTimezone:!0}).defaultNow()},e=>[N("idx_benchmarks_target").on(e.evalTargetId)]);import{sql as oo}from"drizzle-orm";import{pgTable as Ks,text as O,timestamp as Ps,jsonb as xt,uuid as Nt,boolean as Cs,index as Ce,uniqueIndex as Os}from"drizzle-orm/pg-core";var hn=Ks("instruction_promotions",{id:Nt("id").primaryKey().defaultRandom(),userId:Nt("user_id").notNull(),evalTargetId:Nt("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),instructionId:Nt("instruction_id").references(()=>r.id,{onDelete:"set null"}),fromContentHash:O("from_content_hash").notNull(),toContentHash:O("to_content_hash").notNull(),fromContent:O("from_content").notNull(),toContent:O("to_content").notNull(),proposalSource:O("proposal_source").notNull(),proposalRationale:O("proposal_rationale").notNull().default(""),decision:O("decision").notNull(),applied:Cs("applied").notNull().default(!1),refusals:xt("refusals").notNull().default([]),rationale:O("rationale").notNull().default(""),effectClass:O("effect_class").notNull(),verdict:xt("verdict").notNull().default({}),gates:xt("gates").notNull().default({}),touchedSections:xt("touched_sections").notNull().default([]),createdAt:Ps("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ce("idx_instruction_promotions_budget").on(e.evalTargetId,e.createdAt.desc()).where(oo`${e.applied}`),Ce("idx_instruction_promotions_target").on(e.evalTargetId,e.createdAt.desc()),Ce("idx_instruction_promotions_user").on(e.userId,e.createdAt.desc()),Ce("idx_instruction_promotions_to_hash").on(e.toContentHash),Os("uq_instruction_promotions_applied").on(e.evalTargetId,e.fromContentHash,e.toContentHash).where(oo`${e.applied}`),Ce("idx_instruction_promotions_applied_hash").on(e.toContentHash,e.createdAt.desc()).where(oo`${e.applied}`)]);import{pgTable as yn,text as no,timestamp as ro,jsonb as Tn,uuid as ge,integer as Oe,index as gt,real as In}from"drizzle-orm/pg-core";var ve=yn("trigger_evals",{id:ge("id").primaryKey().defaultRandom(),evalTargetId:ge("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:ge("user_id").notNull(),queries:Tn("queries").notNull().default([]),status:no("status").notNull().default("pending_review"),trainIndices:Oe("train_indices").array().default([]),testIndices:Oe("test_indices").array().default([]),createdAt:ro("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ro("updated_at",{withTimezone:!0}).defaultNow()},e=>[gt("idx_trigger_evals_target").on(e.evalTargetId),gt("idx_trigger_evals_user").on(e.userId)]),he=yn("optimization_runs",{id:ge("id").primaryKey().defaultRandom(),evalTargetId:ge("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:ge("user_id").notNull(),type:no("type").notNull(),iteration:Oe("iteration").notNull(),inputVersion:Oe("input_version").notNull(),outputVersion:Oe("output_version"),trainScore:In("train_score"),testScore:In("test_score"),analysis:Tn("analysis").notNull().default({}),status:no("status").notNull().default("running"),createdAt:ro("created_at",{withTimezone:!0}).defaultNow()},e=>[gt("idx_optimization_runs_target").on(e.evalTargetId),gt("idx_optimization_runs_user").on(e.userId)]);import{pgTable as qs,text as F,timestamp as Ms,jsonb as qe,uuid as so,integer as io,real as Ls,index as Me,uniqueIndex as wn}from"drizzle-orm/pg-core";var J=qs("context_snapshots",{id:so("id").primaryKey().defaultRandom(),sessionId:so("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:so("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:io("sequence").notNull().default(0),provider:F("provider").notNull(),model:F("model").notNull(),systemPrompt:F("system_prompt").notNull(),injectedInstructions:qe("injected_instructions").notNull().default([]),messagesSummary:qe("messages_summary").notNull(),tools:qe("tools").notNull().default([]),systemHash:F("system_hash").notNull(),requestHash:F("request_hash").notNull().default(""),toolsHash:F("tools_hash"),injectedHash:F("injected_hash"),messagesDelta:qe("messages_delta").default([]),messagesDeltaRef:F("messages_delta_ref"),maxTokens:io("max_tokens"),temperature:Ls("temperature"),estimatedTokens:io("estimated_tokens"),capturedAt:Ms("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:qe("metadata").default({})},e=>[Me("idx_context_snapshots_session").on(e.sessionId),Me("idx_context_snapshots_user").on(e.userId),Me("idx_context_snapshots_hash").on(e.systemHash),Me("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),Me("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as Us,text as An,timestamp as Bs,jsonb as Hs,integer as Vs,index as Gs}from"drizzle-orm/pg-core";var zn=Us("content_blobs",{hash:An("hash").primaryKey(),contentType:An("content_type").notNull(),content:Hs("content").notNull(),sizeBytes:Vs("size_bytes").notNull().default(0),createdAt:Bs("created_at",{withTimezone:!0}).defaultNow()},e=>[Gs("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Fs,text as vt,timestamp as Le,jsonb as ht,uuid as ao,index as It,integer as Dn}from"drizzle-orm/pg-core";var Ie=Fs("eval_jobs",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull(),evalTargetId:ao("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),status:vt("status").notNull().default("pending"),config:ht("config").notNull().default({}),progress:ht("progress").notNull().default({}),result:ht("result"),error:vt("error"),attempts:Dn("attempts").notNull().default(0),taskKind:vt("task_kind"),payload:ht("payload"),claimedBy:vt("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Dn("lease_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_eval_jobs_user").on(e.userId),It("idx_eval_jobs_target").on(e.evalTargetId),It("idx_eval_jobs_status").on(e.status),It("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as Js,text as Ue,timestamp as Be,jsonb as Rn,uuid as jn,integer as kn,index as En}from"drizzle-orm/pg-core";var bn=Js("agent_jobs",{id:jn("id").primaryKey().defaultRandom(),userId:jn("user_id").notNull(),taskKind:Ue("task_kind").notNull(),status:Ue("status").notNull().default("pending"),payload:Rn("payload").notNull(),dedupeKey:Ue("dedupe_key"),result:Rn("result"),error:Ue("error"),attempts:kn("attempts").notNull().default(0),claimedBy:Ue("claimed_by"),claimedAt:Be("claimed_at",{withTimezone:!0}),leaseExpiresAt:Be("lease_expires_at",{withTimezone:!0}),leaseRecoveries:kn("lease_recoveries").notNull().default(0),createdAt:Be("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Be("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Be("completed_at",{withTimezone:!0})},e=>[En("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),En("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as $s,text as He,timestamp as Ve,jsonb as yt,uuid as uo,index as Tt,integer as Sn}from"drizzle-orm/pg-core";var Kn=$s("insights_jobs",{id:uo("id").primaryKey().defaultRandom(),userId:uo("user_id").notNull(),status:He("status").notNull().default("pending"),projectPath:He("project_path"),projectId:uo("project_id").references(()=>s.id,{onDelete:"set null"}),config:yt("config").notNull().default({}),progress:yt("progress").notNull().default({}),result:yt("result"),error:He("error"),attempts:Sn("attempts").notNull().default(0),taskKind:He("task_kind"),payload:yt("payload"),claimedBy:He("claimed_by"),claimedAt:Ve("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ve("lease_expires_at",{withTimezone:!0}),leaseRecoveries:Sn("lease_recoveries").notNull().default(0),createdAt:Ve("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ve("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ve("completed_at",{withTimezone:!0})},e=>[Tt("idx_insights_jobs_user").on(e.userId),Tt("idx_insights_jobs_status").on(e.status),Tt("idx_insights_jobs_pending").on(e.userId,e.status),Tt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Ys,text as lo,timestamp as wt,uuid as Pn,index as Qs,uniqueIndex as Ws}from"drizzle-orm/pg-core";var ye=Ys("api_keys",{id:Pn("id").primaryKey().defaultRandom(),userId:Pn("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:lo("name").notNull(),keyHash:lo("key_hash").notNull(),keyPrefix:lo("key_prefix").notNull(),lastUsedAt:wt("last_used_at",{withTimezone:!0}),expiresAt:wt("expires_at",{withTimezone:!0}),revokedAt:wt("revoked_at",{withTimezone:!0}),createdAt:wt("created_at",{withTimezone:!0}).defaultNow()},e=>[Qs("idx_api_keys_user").on(e.userId),Ws("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Xs,text as co,timestamp as Cn,uuid as Zs,index as ei}from"drizzle-orm/pg-core";var On=Xs("extension_auth_codes",{code:co("code").primaryKey(),userId:Zs("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:co("editor"),email:co("email"),expiresAt:Cn("expires_at",{withTimezone:!0}).notNull(),createdAt:Cn("created_at",{withTimezone:!0}).defaultNow()},e=>[ei("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as ti,text as oi,timestamp as qn,jsonb as ni,uuid as _o,index as Mn}from"drizzle-orm/pg-core";var Te=ti("eval_conversations",{id:_o("id").primaryKey().defaultRandom(),evalTargetId:_o("eval_target_id").notNull().references(()=>n.id,{onDelete:"cascade"}),userId:_o("user_id").notNull(),messages:ni("messages").notNull().default([]),status:oi("status").notNull().default("active"),createdAt:qn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:qn("updated_at",{withTimezone:!0}).defaultNow()},e=>[Mn("idx_eval_conversations_target").on(e.evalTargetId),Mn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as ri,text as q,timestamp as Ln,jsonb as si,uuid as mo}from"drizzle-orm/pg-core";var Un=ri("skill_submissions",{id:mo("id").primaryKey().defaultRandom(),skillId:q("skill_id").notNull(),name:q("name").notNull(),description:q("description").notNull(),category:q("category").notNull(),tools:q("tools").array().notNull(),tags:q("tags").array().default([]),content:q("content").notNull(),status:q("status").notNull().default("pending"),submittedBy:mo("submitted_by").notNull(),reviewedBy:mo("reviewed_by"),reviewNote:q("review_note"),metadata:si("metadata"),createdAt:Ln("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ln("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as ii,text as Ge,timestamp as Bn,jsonb as ai,uuid as di,uniqueIndex as ui,index as Hn}from"drizzle-orm/pg-core";var Vn=ii("harness_releases",{id:di("id").primaryKey().defaultRandom(),harness:Ge("harness").notNull(),version:Ge("version").notNull(),publishedAt:Bn("published_at",{withTimezone:!0}).notNull(),title:Ge("title"),body:Ge("body"),categories:ai("categories").default({}),url:Ge("url"),createdAt:Bn("created_at",{withTimezone:!0}).defaultNow()},e=>[ui("idx_harness_releases_unique").on(e.harness,e.version),Hn("idx_harness_releases_harness").on(e.harness),Hn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as li,text as we,timestamp as Gn,jsonb as ci,uuid as Fn,index as Jn,uniqueIndex as _i}from"drizzle-orm/pg-core";var po=li("notifications",{id:Fn("id").primaryKey().defaultRandom(),userId:Fn("user_id").notNull(),type:we("type").notNull(),title:we("title").notNull(),body:we("body"),url:we("url"),sourceTable:we("source_table"),sourceId:we("source_id"),metadata:ci("metadata").notNull().default({}),readAt:Gn("read_at",{withTimezone:!0}),createdAt:Gn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jn("idx_notifications_user_created").on(e.userId,e.createdAt),Jn("idx_notifications_user_unread").on(e.userId),_i("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as mi,text as Fe,timestamp as Je,jsonb as fo,uuid as xo,index as At,integer as $n}from"drizzle-orm/pg-core";var Ae=mi("launch_jobs",{id:xo("id").primaryKey().defaultRandom(),userId:xo("user_id").notNull(),tool:Fe("tool").notNull(),status:Fe("status").notNull().default("pending"),config:fo("config").notNull().default({}),result:fo("result"),error:Fe("error"),attempts:$n("attempts").notNull().default(0),taskKind:Fe("task_kind"),payload:fo("payload"),claimedBy:Fe("claimed_by"),claimedAt:Je("claimed_at",{withTimezone:!0}),leaseExpiresAt:Je("lease_expires_at",{withTimezone:!0}),leaseRecoveries:$n("lease_recoveries").notNull().default(0),createdAt:Je("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Je("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Je("completed_at",{withTimezone:!0}),runId:xo("run_id").references(()=>g.id,{onDelete:"set null"})},e=>[At("idx_launch_jobs_user").on(e.userId),At("idx_launch_jobs_status").on(e.status),At("idx_launch_jobs_pending").on(e.userId,e.status),At("idx_launch_jobs_run").on(e.runId)]);import{pgTable as Yn,uuid as M,text as ze,real as pi,timestamp as zt,boolean as fi,uniqueIndex as xi,index as $e}from"drizzle-orm/pg-core";var Qn=["add","remove","trim"],No=Yn("instruction_suggestions",{id:M("id").primaryKey().defaultRandom(),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:M("instruction_id").notNull().references(()=>r.id,{onDelete:"cascade"}),projectPath:ze("project_path").notNull(),projectId:M("project_id").references(()=>s.id,{onDelete:"set null"}),score:pi("score").notNull(),reason:ze("reason").notNull(),kind:ze("kind").$type().notNull().default("add"),generatedAt:zt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:fi("is_stale").notNull().default(!1),dismissedAt:zt("dismissed_at",{withTimezone:!0}),acceptedAt:zt("accepted_at",{withTimezone:!0}),promotedToInstructionId:M("promoted_to_instruction_id").references(()=>r.id,{onDelete:"set null"})},e=>[xi("idx_instruction_suggestions_user_project_instruction_kind").on(e.userId,e.projectPath,e.instructionId,e.kind),$e("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),$e("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),$e("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Wn=Yn("instruction_suggestion_events",{id:M("id").primaryKey().defaultRandom(),suggestionId:M("suggestion_id").notNull().references(()=>No.id,{onDelete:"cascade"}),userId:M("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:ze("event_type").notNull(),tool:ze("tool"),sessionId:M("session_id"),projectPath:ze("project_path").notNull(),createdAt:zt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[$e("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),$e("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Ni,text as go,integer as gi,numeric as Ye,timestamp as vo,index as vi,primaryKey as hi}from"drizzle-orm/pg-core";var Xn=Ni("model_pricing",{provider:go("provider").notNull(),modelId:go("model_id").notNull(),inputPerM:Ye("input_per_m").notNull(),outputPerM:Ye("output_per_m").notNull(),cacheReadPerM:Ye("cache_read_per_m").notNull(),cacheWrite5mPerM:Ye("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:Ye("cache_write_1h_per_m").notNull(),contextWindow:gi("context_window"),effectiveFrom:vo("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:vo("effective_until",{withTimezone:!0}),source:go("source").notNull(),verifiedAt:vo("verified_at",{withTimezone:!0})},e=>[hi({columns:[e.provider,e.modelId,e.effectiveFrom]}),vi("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Ii,text as ne,numeric as Zn,timestamp as er,uuid as tr,jsonb as yi,index as or}from"drizzle-orm/pg-core";var nr=Ii("limit_observations",{id:tr("id").primaryKey().defaultRandom(),observedAt:er("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:ne("provider").notNull(),plan:ne("plan").notNull(),limitType:ne("limit_type").notNull(),value:Zn("value").notNull(),unit:ne("unit").notNull(),comparator:ne("comparator").notNull().default("="),resetsAt:er("resets_at",{withTimezone:!0}),sourceType:ne("source_type").notNull(),sourceUrl:ne("source_url"),sourceEvidence:yi("source_evidence"),confidence:Zn("confidence").notNull(),userId:tr("user_id")},e=>[or("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),or("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Ti,text as Dt,timestamp as wi,uuid as Ai,jsonb as zi,boolean as Di,uniqueIndex as Ri}from"drizzle-orm/pg-core";var rr=Ti("provider_docs_snapshots",{id:Ai("id").primaryKey().defaultRandom(),fetchedAt:wi("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:Dt("provider").notNull(),docUrl:Dt("doc_url").notNull(),contentHash:Dt("content_hash").notNull(),content:Dt("content").notNull(),parseSuccess:Di("parse_success").notNull(),parseErrors:zi("parse_errors")},e=>[Ri("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as ji,text as Rt,numeric as sr,timestamp as ir,uuid as ki,primaryKey as Ei,index as bi}from"drizzle-orm/pg-core";var ar=ji("plan_limits_active",{provider:Rt("provider").notNull(),plan:Rt("plan").notNull(),limitType:Rt("limit_type").notNull(),value:sr("value").notNull(),unit:Rt("unit").notNull(),effectiveFrom:ir("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:ir("effective_until",{withTimezone:!0}),confidence:sr("confidence").notNull(),sourceObservationIds:ki("source_observation_ids").array().notNull()},e=>[Ei({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),bi("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as Si,text as ho,timestamp as Ki,uuid as dr,jsonb as Pi,index as Ci}from"drizzle-orm/pg-core";var ur=Si("alert_dispatches",{id:dr("id").primaryKey().defaultRandom(),userId:dr("user_id").notNull(),alertKey:ho("alert_key").notNull(),severity:ho("severity").notNull(),lastDispatchedAt:Ki("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:Pi("last_state").notNull(),channel:ho("channel").notNull()},e=>[Ci("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{pgTable as Oi,text as Io,timestamp as lr,uuid as yo,integer as qi,index as Mi,unique as Li}from"drizzle-orm/pg-core";var cr=Oi("scaffolding_fingerprints",{id:yo("id").primaryKey().defaultRandom(),userId:yo("user_id").notNull(),harness:Io("harness").notNull(),model:Io("model").notNull(),toolsHash:Io("tools_hash").notNull(),firstSeenAt:lr("first_seen_at",{withTimezone:!0}).notNull().defaultNow(),lastSeenAt:lr("last_seen_at",{withTimezone:!0}).notNull().defaultNow(),snapshotCount:qi("snapshot_count").notNull().default(1),firstSessionId:yo("first_session_id")},e=>[Li("scaffolding_fingerprints_user_id_harness_model_tools_hash_key").on(e.userId,e.harness,e.model,e.toolsHash),Mi("idx_scaffolding_fp_segment").on(e.userId,e.harness,e.model)]);import{pgTable as Ui,text as To,timestamp as Bi,jsonb as Hi,uuid as _r,integer as Vi,unique as Gi}from"drizzle-orm/pg-core";var mr=Ui("scaffolding_segments",{id:_r("id").primaryKey().defaultRandom(),userId:_r("user_id").notNull(),harness:To("harness").notNull(),model:To("model").notNull(),coreNames:Hi("core_names").notNull(),coreHash:To("core_hash").notNull(),activeFingerprints:Vi("active_fingerprints").notNull(),computedAt:Bi("computed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Gi("scaffolding_segments_user_id_harness_model_key").on(e.userId,e.harness,e.model)]);import{drizzle as gr}from"drizzle-orm/postgres-js";import vr from"postgres";var jt={};Or(jt,{SUGGESTION_KINDS:()=>Qn,agentJobs:()=>bn,agentRuns:()=>g,agentRunsRelations:()=>ia,alertDispatches:()=>ur,announcementDeliveries:()=>Go,announcements:()=>Vo,apiKeys:()=>ye,apiKeysRelations:()=>Ji,benchmarks:()=>Ne,benchmarksRelations:()=>ga,cliErrorEvents:()=>fn,cliSetupEvents:()=>mn,contentBlobs:()=>zn,contextSnapshots:()=>J,contextSnapshotsRelations:()=>Ta,evalComparisons:()=>Nn,evalConversations:()=>Te,evalConversationsRelations:()=>ya,evalGradeAnnotations:()=>gn,evalJobs:()=>Ie,evalJobsRelations:()=>Ia,evalRuns:()=>k,evalRunsRelations:()=>Na,evalTargets:()=>n,evalTargetsRelations:()=>fa,evals:()=>C,evalsRelations:()=>xa,extensionAuthCodes:()=>On,harnessReleases:()=>Vn,insightsJobs:()=>Kn,instructionEvents:()=>_e,instructionEventsRelations:()=>ea,instructionPromotions:()=>hn,instructionSuggestionEvents:()=>Wn,instructionSuggestions:()=>No,instructionUsageEvents:()=>xe,instructionUsageEventsRelations:()=>pa,instructionVersionIdentities:()=>Po,instructionVersions:()=>ae,instructionVersionsRelations:()=>oa,instructions:()=>r,instructionsRelations:()=>Zi,judgeReviewerVerdicts:()=>vn,launchJobs:()=>Ae,launchJobsRelations:()=>aa,limitObservations:()=>nr,memories:()=>T,memoriesRelations:()=>ta,memoryExperiments:()=>Ho,modelPricing:()=>Xn,notificationPreferences:()=>Fo,notifications:()=>po,optimizationRuns:()=>he,optimizationRunsRelations:()=>ha,orgInvitations:()=>b,orgInvitationsRelations:()=>Qi,organizations:()=>u,organizationsRelations:()=>$i,packInstructions:()=>G,packInstructionsRelations:()=>ma,packs:()=>z,packsRelations:()=>_a,pendingTreatmentExposures:()=>Zo,planLimitsActive:()=>ar,profiles:()=>o,profilesRelations:()=>Fi,projectCheckouts:()=>Oo,projectInstructions:()=>U,projectInstructionsRelations:()=>ra,projects:()=>s,projectsRelations:()=>na,providerDocsSnapshots:()=>rr,scaffoldingFingerprints:()=>cr,scaffoldingSegments:()=>mr,sessionEvents:()=>ue,sessionEventsRelations:()=>da,sessionInstructions:()=>B,sessionInstructionsRelations:()=>ua,sessionSendJobs:()=>nn,sessionTerminalTargets:()=>lt,sessions:()=>d,sessionsRelations:()=>sa,skillSubmissions:()=>Un,teams:()=>h,teamsRelations:()=>Yi,treatmentAssignments:()=>S,treatmentAssignmentsRelations:()=>la,treatmentExposures:()=>K,treatmentExposuresRelations:()=>ca,triggerEvals:()=>ve,triggerEvalsRelations:()=>va,userOrganizations:()=>se,userOrganizationsRelations:()=>Wi,userTeams:()=>ie,userTeamsRelations:()=>Xi,workerConnections:()=>ln});import{relations as i}from"drizzle-orm";var Fi=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(J),apiKeys:e(ye)})),Ji=i(ye,({one:e})=>({profile:e(o,{fields:[ye.userId],references:[o.id]})})),$i=i(u,({many:e})=>({teams:e(h),userOrganizations:e(se),projects:e(s),invitations:e(b)})),Yi=i(h,({one:e,many:t})=>({organization:e(u,{fields:[h.orgId],references:[u.id]}),userTeams:t(ie),invitations:t(b)})),Qi=i(b,({one:e})=>({organization:e(u,{fields:[b.orgId],references:[u.id]}),team:e(h,{fields:[b.teamId],references:[h.id]}),inviter:e(o,{fields:[b.invitedBy],references:[o.id]})})),Wi=i(se,({one:e})=>({organization:e(u,{fields:[se.orgId],references:[u.id]})})),Xi=i(ie,({one:e})=>({team:e(h,{fields:[ie.teamId],references:[h.id]})})),Zi=i(r,({one:e,many:t})=>({versions:t(ae),projectInstructions:t(U),events:t(_e),usageEvents:t(xe),sessionInstructions:t(B),packInstructions:t(G),forkedFrom:e(r,{fields:[r.forkedFromId],references:[r.id]})})),ea=i(_e,({one:e})=>({instruction:e(r,{fields:[_e.instructionId],references:[r.id]})})),ta=i(T,({one:e,many:t})=>({project:e(s,{fields:[T.projectId],references:[s.id]}),parent:e(T,{fields:[T.parentId],references:[T.id]}),versions:t(T)})),oa=i(ae,({one:e})=>({instruction:e(r,{fields:[ae.instructionId],references:[r.id]})})),na=i(s,({one:e,many:t})=>({organization:e(u,{fields:[s.orgId],references:[u.id]}),projectInstructions:t(U),sessions:t(d)})),ra=i(U,({one:e})=>({project:e(s,{fields:[U.projectId],references:[s.id]}),instruction:e(r,{fields:[U.instructionId],references:[r.id]})})),sa=i(d,({one:e,many:t})=>({profile:e(o,{fields:[d.userId],references:[o.id]}),project:e(s,{fields:[d.projectId],references:[s.id]}),run:e(g,{fields:[d.runId],references:[g.id]}),events:t(ue),sessionInstructions:t(B),treatmentExposures:t(K),contextSnapshots:t(J)})),ia=i(g,({one:e,many:t})=>({profile:e(o,{fields:[g.userId],references:[o.id]}),organization:e(u,{fields:[g.orgId],references:[u.id]}),project:e(s,{fields:[g.projectId],references:[s.id]}),sessions:t(d),launchJobs:t(Ae)})),aa=i(Ae,({one:e})=>({run:e(g,{fields:[Ae.runId],references:[g.id]})})),da=i(ue,({one:e})=>({session:e(d,{fields:[ue.sessionId],references:[d.id]})})),ua=i(B,({one:e})=>({session:e(d,{fields:[B.sessionId],references:[d.id]}),instruction:e(r,{fields:[B.instructionId],references:[r.id]})})),la=i(S,({one:e,many:t})=>({owner:e(o,{fields:[S.userId],references:[o.id]}),project:e(s,{fields:[S.projectId],references:[s.id]}),exposures:t(K)})),ca=i(K,({one:e})=>({session:e(d,{fields:[K.sessionId],references:[d.id]}),owner:e(o,{fields:[K.userId],references:[o.id]}),assignment:e(S,{fields:[K.assignmentId],references:[S.id]})})),_a=i(z,({one:e,many:t})=>({packInstructions:t(G),forkedFrom:e(z,{fields:[z.forkedFromId],references:[z.id]})})),ma=i(G,({one:e})=>({pack:e(z,{fields:[G.packId],references:[z.id]}),instruction:e(r,{fields:[G.instructionId],references:[r.id]})})),pa=i(xe,({one:e})=>({instruction:e(r,{fields:[xe.instructionId],references:[r.id]})})),fa=i(n,({one:e,many:t})=>({parent:e(n,{fields:[n.parentId],references:[n.id]}),evals:t(C),evalRuns:t(k),benchmarks:t(Ne),triggerEvals:t(ve),optimizationRuns:t(he),evalJobs:t(Ie),evalConversations:t(Te)})),xa=i(C,({one:e,many:t})=>({evalTarget:e(n,{fields:[C.evalTargetId],references:[n.id]}),runs:t(k)})),Na=i(k,({one:e})=>({eval:e(C,{fields:[k.evalId],references:[C.id]}),evalTarget:e(n,{fields:[k.evalTargetId],references:[n.id]})})),ga=i(Ne,({one:e})=>({evalTarget:e(n,{fields:[Ne.evalTargetId],references:[n.id]})})),va=i(ve,({one:e})=>({evalTarget:e(n,{fields:[ve.evalTargetId],references:[n.id]})})),ha=i(he,({one:e})=>({evalTarget:e(n,{fields:[he.evalTargetId],references:[n.id]})})),Ia=i(Ie,({one:e})=>({evalTarget:e(n,{fields:[Ie.evalTargetId],references:[n.id]})})),ya=i(Te,({one:e})=>({evalTarget:e(n,{fields:[Te.evalTargetId],references:[n.id]})})),Ta=i(J,({one:e})=>({session:e(d,{fields:[J.sessionId],references:[d.id]}),profile:e(o,{fields:[J.userId],references:[o.id]})}));var Qe=0,pr=0,We=0,fr=0;var wa=0;function wo(){Qe++,Qe>pr&&(pr=Qe)}p(wo,"trackDbOpStart");function Ao(){Qe>0&&Qe--}p(Ao,"trackDbOpEnd");function zo(){We++,We>fr&&(fr=We)}p(zo,"trackHeavyDbOpStart");function Do(){We>0&&We--}p(Do,"trackHeavyDbOpEnd");function xr(){wa++}p(xr,"recordQueryDeadline");var Et,St,Ro=!1,kt;var Nr,Kt,bt;function hr(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}p(hr,"getEnv");function Ir(){if(Ro)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Et){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,a=Number(process.env.PG_CONNECT_TIMEOUT_S)||10,l=Number(process.env.PG_STATEMENT_TIMEOUT_MS)||0,m=Number(process.env.PG_IDLE_TIMEOUT)||5,f=Number(process.env.PG_KEEP_ALIVE_S)||60;St=vr(hr("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:m,keep_alive:f,max_lifetime:300,connection:{application_name:e,...l>0?{statement_timeout:l}:{}}}),Et=gr(St,{schema:jt})}return Et}p(Ir,"getDb");function yr(){if(Ro)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!bt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Kt=vr(hr("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}}),bt=gr(Kt,{schema:jt})}return bt}p(yr,"getHeavyDb");async function Aa(){if(kt)return kt;Ro=!0;let e=St,t=Nr,a=Kt;return St=void 0,Et=void 0,Nr=void 0,Kt=void 0,bt=void 0,kt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),kt}p(Aa,"closeDb");var za=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function Tr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&za.has(a)}p(Tr,"isRetryableConnectError");var Da=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function wr(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Da.has(a)}p(wr,"isRetryableResetError");async function Ar(e,t={}){let a=t.attempts??3,l=t.baseMs??100,m;for(let f=0;f<a;f++)try{return await e()}catch(y){m=y;let De=Tr(y)||t.retryResets===!0&&wr(y);if(f===a-1||!De)throw y;await new Promise($=>setTimeout($,l*2**f))}throw m}p(Ar,"withDbRetry");var Pt=class extends Error{static{p(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function zr(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}p(zr,"queryDeadlineMs");function Ra(e,t){let a,l=new Promise((m,f)=>{a=setTimeout(()=>{xr(),f(new Pt(t))},t);let y=a;typeof y.unref=="function"&&y.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}p(Ra,"raceWithDeadline");var Dr=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Rr=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function jo(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(m,f,y){if(f==="then"){let $=Reflect.get(m,f,y);return typeof $!="function"?$:(Er,br)=>{let Sr=l?zo:wo,Kr=l?Do:Ao;Sr();let ko=Ar(()=>new Promise((Pr,Cr)=>$.call(m,Pr,Cr)),{retryResets:t});return(a>0?Ra(ko,a):ko).finally(Kr).then(Er,br)}}let De=Reflect.get(m,f,y);return typeof De=="function"?(...$)=>jo(De.apply(m,$),t,a,l):De}})}p(jo,"wrapBuilder");function jr(e,t=!1){let a=t?zo:wo,l=t?Do:Ao;a();try{return Promise.resolve(e()).finally(l)}catch(m){throw l(),m}}p(jr,"gaugeTransaction");var kr=new Proxy({},{get(e,t){let a=Ir(),l=a[t];if(typeof t=="string"&&Dr.has(t)&&typeof l=="function"){let m=Rr.has(t),f=zr();return(...y)=>jo(l.apply(a,y),m,f)}return t==="transaction"&&typeof l=="function"?(...m)=>jr(()=>l.apply(a,m)):l}}),ja=new Proxy({},{get(e,t){let a=yr(),l=a[t];if(typeof t=="string"&&Dr.has(t)&&typeof l=="function"){let m=Rr.has(t);return(...f)=>jo(l.apply(a,f),m,0,!0)}return t==="transaction"&&typeof l=="function"?(...m)=>jr(()=>l.apply(a,m),!0):l}});export{o as a,g as b,d as c,T as d,Ho as e,Vo as f,Go as g,Fo as h,Ir as i,Aa as j};
@@ -1,2 +0,0 @@
1
- import{c as R}from"./chunk-6QKI756T.js";import{b as s,c as r,i as j}from"./chunk-7G6T5C7J.js";import{a as P}from"./chunk-5RBLIVBF.js";import{a as g}from"./chunk-ZLLER3HP.js";import{and as y,eq as l,isNotNull as I}from"drizzle-orm";async function O($,p={}){let k=p.db??j(),b=p.removeWorktreeFn??R,n=p.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
2
- `)),{runId:t}=$,[i]=await k.select({id:s.id,userId:s.userId,projectPath:s.projectPath}).from(s).where(l(s.id,t)).limit(1);if(!i)throw new P(`Run ${t} not found`);if(!i.projectPath)throw new P(`Run ${t} has no projectPath; cannot resolve a repo root for worktree cleanup`);let c=i.projectPath,v=await k.select({id:r.id,projectPath:r.projectPath}).from(r).where(y(l(r.runId,t),l(r.userId,i.userId),I(r.endedAt))),a=[],u=0,d=0,h=0,m=0,w=new Set;for(let e of v)if(!(!e.projectPath||e.projectPath===c)&&!w.has(e.projectPath)){w.add(e.projectPath);try{let o=await b({repoRoot:c,worktreePath:e.projectPath});o.removed?(u++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),n(`removed worktree ${e.projectPath} (session ${e.id})`)):o.reason==="dirty"?(d++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),n(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(h++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),n(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(o){let f=o instanceof Error?o.message:String(o);m++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:f.slice(0,1e3)}),n(`error removing worktree ${e.projectPath} (session ${e.id}): ${f}`)}}return n(`run ${t} cleanup: removed=${u} skippedDirty=${d} absent=${h} errored=${m}`),{runId:t,repoRoot:c,removed:u,skippedDirty:d,absent:h,errored:m,worktrees:a}}g(O,"processRunCleanup");export{O as a};
@@ -1 +0,0 @@
1
- import{d as u,e as t,i as x}from"./chunk-7G6T5C7J.js";import{a as A}from"./chunk-4L2ZEIRE.js";import{b as P}from"./chunk-G5BXZT6F.js";import{c as E}from"./chunk-HMMO27U4.js";import{a as f}from"./chunk-ZLLER3HP.js";import{eq as s}from"drizzle-orm";var v=f(m=>(m.summary.pass_rate??0)>=1?1:0,"fullPassScore");async function q(m,d={}){let r=d.db??x(),w=d.executeEval??E,y=d.grade??A,n=d.now??Date.now,[e]=await r.select().from(t).where(s(t.id,m.experimentId)).limit(1);if(!e)return{skipped:"not_found"};if(e.status==="completed"||e.status==="failed")return{skipped:"already_terminal",status:e.status};let[g]=await r.select({body:u.body}).from(u).where(s(u.id,e.memoryId)).limit(1);if(!g)return await r.update(t).set({status:"failed",error:"memory no longer exists",completedAt:new Date(n())}).where(s(t.id,e.id)),{skipped:"memory_gone",status:"failed"};await r.update(t).set({status:"running",startedAt:new Date(n())}).where(s(t.id,e.id));let b=e.expectations??[],l=e.model??void 0,a=[],h=0;try{for(let i=0;i<e.trials;i++){let c=await w({prompt:e.taskPrompt,targetContent:g.body,model:l}),p=await w({prompt:e.taskPrompt,model:l});if(c.error||p.error){h++;continue}let[D,M]=await Promise.all([y({prompt:e.taskPrompt,output:c.output,expectations:b,model:l}),y({prompt:e.taskPrompt,output:p.output,expectations:b,model:l})]);a.push({withScore:v(D),withoutScore:v(M),withLatency:c.durationMs/1e3,withoutLatency:p.durationMs/1e3})}if(a.length===0){let i=`no trials completed (${h}/${e.trials} runs errored \u2014 is the claude CLI available?)`;return await r.update(t).set({status:"failed",error:i,completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"failed",requestedTrials:e.trials,completedTrials:0}}let o=P(a);return await r.update(t).set({status:"completed",result:{verdict:o,pairs:a,completedTrials:a.length,model:l??null},completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"completed",requestedTrials:e.trials,completedTrials:a.length,significant:o.significant,delta:o.delta}}catch(o){let i=o instanceof Error?o.message:String(o);return await r.update(t).set({status:"failed",error:i.slice(0,500),completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"failed",requestedTrials:e.trials,completedTrials:a.length}}}f(q,"processMemoryAb");export{q as a};
@@ -1,70 +0,0 @@
1
- import{a as n}from"./chunk-ZLLER3HP.js";var R="#0d9488",l="#1a1a1a",d="#666666",w="#f5f5f7",C="#ffffff",v="#e5e5e9",O=["Added","Changed","Fixed","Removed","Deprecated","Security"];function z(e){let t=["January","February","March","April","May","June","July","August","September","October","November","December"],[r,o,i]=e.split("-").map(p=>parseInt(p,10));return!r||!o||!i||o<1||o>12?e:`${t[o-1]} ${i}, ${r}`}n(z,"formatIsoDate");function s(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}n(s,"escapeHtml");function U(e){let t=[];for(let r of O){let o=e[r];o&&o.length>0&&t.push({name:r,items:o})}return t}n(U,"orderedSections");function k(e){let{version:t,date:r,sections:o,unsubscribeUrl:i,productUrl:p,recipientName:a}=e,f=z(r),y=`What's new in RuleMetric \u2014 ${f}`,$=a?`Hi ${a},`:"Hi there,",E=U(o),b=new Date().getUTCFullYear(),I=E.map(({name:h,items:m})=>{let g=m.map(S=>` <li style="margin:0 0 6px 0;font-size:15px;line-height:1.5;color:${l};">${s(S)}</li>`).join(`
2
- `);return` <h3 style="margin:24px 0 8px 0;font-size:16px;line-height:1.3;font-weight:600;color:${l};">${h}</h3>
3
- <ul style="margin:0 0 8px 0;padding-left:20px;">
4
- ${g}
5
- </ul>`}).join(`
6
- `),T=`<!doctype html>
7
- <html lang="en">
8
- <head>
9
- <meta charset="utf-8" />
10
- <meta name="viewport" content="width=device-width, initial-scale=1" />
11
- <title>${s(y)}</title>
12
- </head>
13
- <body style="margin:0;padding:0;background:${w};font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:${l};">
14
- <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background:${w};padding:32px 16px;">
15
- <tr>
16
- <td align="center">
17
- <table role="presentation" width="560" cellspacing="0" cellpadding="0" border="0" style="max-width:560px;background:${C};border:1px solid ${v};border-radius:8px;overflow:hidden;">
18
- <tr>
19
- <td style="padding:24px 32px 8px 32px;">
20
- <a href="${s(p)}" style="text-decoration:none;color:${R};font-size:14px;font-weight:600;">RuleMetric</a>
21
- </td>
22
- </tr>
23
- <tr>
24
- <td style="padding:8px 32px 8px 32px;">
25
- <h1 style="margin:0 0 8px 0;font-size:22px;line-height:1.3;font-weight:600;color:${l};">
26
- What's new \u2014 ${s(f)}
27
- </h1>
28
- <p style="margin:0 0 8px 0;font-size:13px;line-height:1.5;color:${d};">
29
- Release ${s(t)}
30
- </p>
31
- <p style="margin:16px 0 0 0;font-size:15px;line-height:1.5;color:${l};">
32
- ${s($)}
33
- </p>
34
- <p style="margin:8px 0 0 0;font-size:15px;line-height:1.5;color:${l};">
35
- Here's what shipped in the latest RuleMetric release.
36
- </p>
37
- </td>
38
- </tr>
39
- <tr>
40
- <td style="padding:0 32px 16px 32px;">
41
- ${I}
42
- </td>
43
- </tr>
44
- <tr>
45
- <td style="padding:16px 32px 24px 32px;border-top:1px solid ${v};">
46
- <p style="margin:0 0 8px 0;font-size:12px;line-height:1.5;color:${d};">
47
- You're receiving this because you signed up for RuleMetric product updates. If you'd rather not hear about new releases, you can unsubscribe at any time.
48
- </p>
49
- <p style="margin:0 0 4px 0;font-size:12px;line-height:1.5;">
50
- <a href="${s(i)}" style="color:${R};text-decoration:underline;">Unsubscribe</a>
51
- </p>
52
- <p style="margin:0 0 12px 0;font-size:12px;line-height:1.5;color:${d};word-break:break-all;">
53
- ${s(i)}
54
- </p>
55
- <p style="margin:0;font-size:11px;line-height:1.5;color:${d};">
56
- RuleMetric \u2022 ${b}
57
- </p>
58
- </td>
59
- </tr>
60
- </table>
61
- </td>
62
- </tr>
63
- </table>
64
- </body>
65
- </html>`,c=[`What's new in RuleMetric \u2014 ${f}`,`Release ${t}`,"",$,"","Here's what shipped in the latest RuleMetric release.",""];for(let{name:h,items:m}of E){c.push(`${h}:`);for(let g of m)c.push(` - ${g}`);c.push("")}c.push("--","You're receiving this because you signed up for RuleMetric product updates.",`Unsubscribe: ${i}`,"",`RuleMetric \u2022 ${b}`);let N=c.join(`
66
- `);return{subject:y,html:T,text:N}}n(k,"renderChangelogAnnouncement");import{randomBytes as L}from"node:crypto";async function x(e){let t=e.idempotencyKey?` idempotencyKey=${e.idempotencyKey}`:"";return process.stderr.write(`[email:noop] would send to=${e.to} subject=${JSON.stringify(e.subject)}${t}
67
- `),{id:`noop-${L(8).toString("hex")}`,provider:"noop"}}n(x,"sendNoopEmail");var u=null;async function P(){if(u)return u;let e=process.env.RESEND_API_KEY;if(!e)throw new Error("RESEND_API_KEY is not set");let{Resend:t}=await import("resend");return u=new t(e),u}n(P,"getClient");var _=!1;function F(){let e=process.env.RESEND_FROM_EMAIL;if(e)return e;if(!_){_=!0;let t=process.env.NODE_ENV==="production"?"PRODUCTION":"dev";process.stderr.write(`[email:resend] ${t}: RESEND_FROM_EMAIL not set \u2014 sending from the shared sandbox sender onboarding@resend.dev, which Gmail spam-filters. Set RESEND_FROM_EMAIL to an address on a verified domain.
68
- `)}return"onboarding@resend.dev"}n(F,"resolveFromEmail");async function M(e){let t=e.fromName??"RuleMetric",r=F(),o=`${t} <${r}>`,i=await P(),p=e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:void 0,a=await i.emails.send({from:o,to:e.to,subject:e.subject,html:e.html,text:e.text,...e.headers?{headers:e.headers}:{}},p);if(a.error)throw new Error(`Resend send failed: ${a.error.message}`);if(!a.data)throw new Error("Resend send returned no data and no error");return{id:a.data.id,provider:"resend"}}n(M,"sendResendEmail");async function A(e){throw new Error("SMTP provider not implemented. Set RESEND_API_KEY to use Resend, or unset RULEMETRIC_EMAIL_PROVIDER to fall back to noop.")}n(A,"sendSmtpEmail");function K(){let e=process.env.RULEMETRIC_EMAIL_PROVIDER;return e==="resend"||e==="smtp"||e==="noop"?e:process.env.RESEND_API_KEY?"resend":"noop"}n(K,"selectEmailProvider");var Y=new Set(["test","example","invalid","localhost"]),j=/^example\.(com|net|org)$/;function B(e){let t=e.trim().toLowerCase(),r=t.lastIndexOf("@");if(r<0)return!1;let o=t.slice(r+1);if(!o)return!1;let i=o.slice(o.lastIndexOf(".")+1);return!!(Y.has(i)||j.test(o))}n(B,"isUndeliverableRecipient");var D=!1;async function se(e){let t=K();switch(D||(D=!0,process.stderr.write(`[email] active provider: ${t}
69
- `)),t){case"resend":return B(e.to)?(process.stderr.write(`[email] skipping real send to reserved/undeliverable address ${e.to} (RFC 2606/6761) \u2014 routed to noop to protect sender reputation
70
- `),x(e)):M(e);case"smtp":return A(e);case"noop":if(process.env.NODE_ENV==="production"&&process.env.RULEMETRIC_EMAIL_PROVIDER!=="noop")throw new Error("email provider unconfigured in production: RESEND_API_KEY is not set (set it, or force RULEMETRIC_EMAIL_PROVIDER=noop to intentionally disable email)");return x(e)}}n(se,"sendEmail");export{k as a,se as b};
@@ -1,15 +0,0 @@
1
- import{a as S,b as z,c as T}from"./chunk-QFVGUZDO.js";import{a as O}from"./chunk-5R5RGKOW.js";import{a as j}from"./chunk-5RBLIVBF.js";import{c as A,d as C,f as b}from"./chunk-B3BHB26P.js";import{e as _,f as I,h as u}from"./chunk-KLEF5D3A.js";import{a as $}from"./chunk-ZLLER3HP.js";async function D(f,m){let{mirrorId:o,projectPath:s,projectId:i,config:p}=f,e=$(n=>m.logger.info(n),"log");if(p?.sessionId)return M({mirrorId:o,sessionId:p.sessionId},e);e(`Processing insights job ${o}...`),await u(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"reading_data"}});try{let{repaired:n}=await I("/api/sessions/repair-analyzed-at",{});n>0&&e(` Repaired analyzed_at on ${n} orphan session(s).`)}catch(n){e(` Warning: analyzed_at repair failed: ${n instanceof Error?n.message:String(n)}`)}let a=await J(s,i);if(!a)throw new j("No session data found \u2014 ensure sessions are captured and enriched.");e(` Found ${a.stats.sessions} sessions, generating recommendations...`);let w=20,c=200;if(C()!=="none"){let n=0,t=0;try{for(;n<c;){let l=await _(`/api/sessions?hasAnalysis=false&limit=${w}&offset=${t}`);if(l.length===0)break;e(` Generating facets for ${l.length} un-analyzed sessions (drained ${n} so far)...`);for(let g of l){if(n>=c)break;try{let d=await _(`/api/sessions/${g.id}/events?limit=100`);if(d.length<2){n++,t++;continue}let P=d.filter(h=>h.eventType==="user_message"||h.eventType==="human").map(h=>h.content?.slice(0,200)??"").filter(Boolean).join(`
2
- ---
3
- `);if(!P){n++,t++;continue}let E=await b(T,P,4096);if(E){let h=d.filter(R=>R.eventType==="user_message"||R.eventType==="human").length;await u(`/api/sessions/${g.id}/enrich`,{analysis:{source:"generated_facets",...E},analyzedEventCount:d.length,analyzedTurnCount:h}),e(` Generated facets for session ${g.id} (${g.tool})`)}else t++;n++}catch(d){e(` Failed to generate facets for session ${g.id}: ${d instanceof Error?d.message:String(d)}`),n++,t++}}if(l.length<w)break}}catch(l){e(` Warning: facet generation failed after ${n} sessions: ${l instanceof Error?l.message:String(l)}`)}}let r={},y=S.length+1;for(let n=0;n<S.length;n++){let t=S[n];e(` [${n+1}/${y}] Generating ${t.name}...`);try{await u(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:t.name,current:n+1,total:y,partial:{...r}}})}catch(g){e(` Warning: progress update failed for ${t.name}: ${g instanceof Error?g.message:String(g)}`)}e(` Running LLM prompt for ${t.name}...`);let l=await b(t.prompt,a.summary,t.maxTokens);l?(r[t.name]=l,e(` Got result for ${t.name}`)):e(` No result for ${t.name} (LLM returned null)`)}e(` [${y}/${y}] Generating at_a_glance...`),await u(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"at_a_glance",current:y,total:y,partial:{...r}}});let N=[a.summary,r.what_works?`
4
- ## What Works
5
- ${JSON.stringify(r.what_works)}`:"",r.friction_analysis?`
6
- ## Friction
7
- ${JSON.stringify(r.friction_analysis)}`:"",r.suggestions?`
8
- ## Suggestions
9
- ${JSON.stringify(r.suggestions)}`:"",r.on_the_horizon?`
10
- ## On the Horizon
11
- ${JSON.stringify(r.on_the_horizon)}`:""].join(`
12
- `),k=await b(z,N,8192);k&&(r.at_a_glance=k),e(" Uploading results..."),e(` Done! Recommendations generated for job ${o}`),O(r);let v={recommendations:r};return await u(`/api/insights-jobs/${o}/state`,{result:v}).catch(n=>{e(`result persist failed: ${n instanceof Error?n.message:String(n)}`)}),v}$(D,"processInsights");async function M(f,m){let{mirrorId:o,sessionId:s}=f;m(`Analyzing session ${s} via tool CLI...`),await u(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"fetching_session"}});let i=await _(`/api/sessions/${s}`);if(i.analysis&&i.analysis.source==="session_analysis")return m(` Session ${s} already analyzed \u2014 skipping (idempotency guard)`),{sessionId:s,skipped:!0,reason:"already_analyzed"};let p=await _(`/api/sessions/${s}/events?limit=100`);if(p.length<2)throw new j("Session has too few events to analyze");let e=p.filter(c=>c.eventType==="user_message"||c.eventType==="human").map(c=>c.content?.slice(0,200)??"").filter(Boolean).join(`
13
- ---
14
- `);if(!e)throw new j("No user messages found in session");await u(`/api/insights-jobs/${o}/progress`,{status:"running",progress:{step:"running_analysis",tool:i.tool}});let a=await A(i.tool,T,e);if(!a)throw new Error(`Analysis failed \u2014 ${i.tool} CLI returned no result`);let w=p.filter(c=>c.eventType==="user_message"||c.eventType==="human").length;return await u(`/api/sessions/${s}/enrich`,{analysis:{source:"session_analysis",tool:i.tool,...a},analyzedEventCount:p.length,analyzedTurnCount:w}),m(` Session ${s} analyzed via ${i.tool}`),{sessionId:s,tool:i.tool,facets:a}}$(M,"processSessionAnalysisInline");async function J(f,m){try{let o=new URLSearchParams;m?o.set("projectId",m):f&&o.set("projectPath",f);let s=await _(`/api/insights/compute?${o}`);if(!s||s.total_sessions===0)return null;let i=Object.entries(s.tool_counts??{}).sort((e,a)=>a[1]-e[1]).slice(0,10).map(([e,a])=>`${e}: ${a}`).join(", ");return{summary:[`Sessions: ${s.total_sessions}, Messages: ${s.total_messages}, Hours: ${Math.round(s.total_duration_hours)}`,`Top tools: ${i}`,s.goal_categories&&Object.keys(s.goal_categories).length>0?`Goals: ${JSON.stringify(s.goal_categories)}`:"",s.friction&&Object.keys(s.friction).length>0?`Friction: ${JSON.stringify(s.friction)}`:"",s.outcomes&&Object.keys(s.outcomes).length>0?`Outcomes: ${JSON.stringify(s.outcomes)}`:"",s.projects&&Object.keys(s.projects).length>0?`Projects: ${JSON.stringify(s.projects)}`:""].filter(Boolean).join(`
15
- `),stats:{sessions:s.total_sessions,totalMessages:s.total_messages,totalHours:s.total_duration_hours,toolCounts:s.tool_counts,goalCounts:s.goal_categories,frictionCounts:s.friction}}}catch{return null}}$(J,"buildDataSummaryFromApi");export{D as a};
@@ -1,8 +0,0 @@
1
- import{g as p}from"./chunk-B3BHB26P.js";import{a as s}from"./chunk-ZLLER3HP.js";var f="<RATIONALE>",g="</RATIONALE>",a="<PROPOSED_INSTRUCTION>",l="</PROPOSED_INSTRUCTION>",c=.5,u=3;function m(e){let t=e.immutableSections.length>0?e.immutableSections.map(n=>` - ${n}`).join(`
2
- `):" (none)";return["You are improving an AI coding assistant instruction file so that it scores","better on a fixed set of evaluation cases.","",`The file is a ${e.targetType} named "${e.targetName}".`,"","RULES","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.","","OUTPUT FORMAT \u2014 exactly this, with no text before or after:",f,"One or two sentences: what you changed and which evidence motivated it.",g,a,"The complete new file content.",l].join(`
3
- `)}s(m,"buildProposerSystemPrompt");function d(e){let t=e.evidence,n=["## CURRENT FILE CONTENT","",e.currentContent,""];if(t.weakest.length>0){n.push("## CASES WHERE THIS FILE CURRENTLY UNDERPERFORMS","");for(let o of t.weakest)n.push(`- ${o.name}: passes ${(o.withPassRate*100).toFixed(0)}% with the file vs ${(o.withoutPassRate*100).toFixed(0)}% without it`);n.push("")}return t.nonDiscriminating.length>0&&n.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(o=>`- ${o}`),""),t.notes.length>0&&n.push("## NOTES","",...t.notes.map(o=>`- ${o}`),""),n.join(`
4
- `)}s(d,"buildProposerData");function h(e,t,n){let o=e.lastIndexOf(n);if(o<0)return null;let r=e.lastIndexOf(t,o);return r<0?null:e.slice(r+t.length,o)}s(h,"between");function E(e){let t=e.split(`
5
- `);for(;t.length>0&&t[0].trim()==="";)t.shift();for(;t.length>0&&t[t.length-1].trim()==="";)t.pop();if(t.length<2)return t.join(`
6
- `);let n=t[0].trim(),o=t[t.length-1].trim(),r=/^(`{3,}|~{3,})[a-zA-Z0-9_-]*$/.test(n),i=/^(`{3,}|~{3,})$/.test(o);return r&&i?t.slice(1,-1).join(`
7
- `):t.join(`
8
- `)}s(E,"stripWrappingFence");function T(e,t){if(!e||e.trim()==="")return{ok:!1,reason:"proposer returned nothing"};let n=h(e,a,l);if(n==null)return{ok:!1,reason:`proposer reply had no ${a}\u2026${l} block`};let o=E(n).trim();if(o==="")return{ok:!1,reason:"proposed content was empty"};if(o===t.trim())return{ok:!1,reason:"proposal is identical to the current version"};let r=o.length/Math.max(1,t.trim().length);if(r<c)return{ok:!1,reason:`proposal retains only ${(r*100).toFixed(0)}% of the predecessor's length (floor ${(c*100).toFixed(0)}%) \u2014 treating it as a truncated or summarised reply rather than an edit`};if(r>u)return{ok:!1,reason:`proposal is ${r.toFixed(1)}x the predecessor's length (ceiling ${u}x) \u2014 treating it as runaway generation`};let i=(h(e,f,g)??"").trim();return{ok:!0,proposal:{candidateContent:o,rationale:i===""?"(proposer supplied no rationale)":i}}}s(T,"parseProposalResponse");async function O(e,t=16e3){let n=await p(m(e),d(e),t);return n==null?{ok:!1,reason:"no LLM backend available, or the proposer call failed"}:T(n,e.currentContent)}s(O,"proposeInstructionEdit");export{c as a,u as b,m as c,d,T as e,O as f};
@@ -1,2 +0,0 @@
1
- import{b as B}from"./chunk-N7TGRFVZ.js";import{a as v,f as d,g as n,h as m,i as U}from"./chunk-7G6T5C7J.js";import{a as R}from"./chunk-5RBLIVBF.js";import{a as $}from"./chunk-ZLLER3HP.js";import{and as L,asc as j,eq as l,gt as q,isNotNull as F,sql as O}from"drizzle-orm";var _=100,C=10;async function G(I,s={}){let t=s.db??U(),D=s.sendEmail??B,p=s.log??(o=>process.stderr.write(`[process_announcement] ${o}
2
- `)),b=s.webBaseUrl??process.env.RULEMETRIC_WEB_URL??process.env.WEB_URL??"https://rulemetric.com",{announcementId:r}=I,[i]=await t.select().from(d).where(l(d.id,r)).limit(1);if(!i)throw new R(`Announcement ${r} not found`);if(i.status!=="queued"&&i.status!=="sending")throw new R(`Announcement ${r} is in status='${i.status}'; expected 'queued' or 'sending'.`);await t.update(d).set({status:"sending",updatedAt:new Date}).where(l(d.id,r)),p(`Sending announcement ${r} (${i.subject??""})`);let w=0,f=0,h=0,y=0,k=null;try{for(;;){let c=await t.select({userId:m.userId,email:v.email,displayName:v.displayName,unsubscribeToken:m.unsubscribeToken}).from(m).innerJoin(v,l(v.id,m.userId)).where(L(l(m.productAnnouncements,!0),F(v.email),k?q(m.userId,k):void 0)).orderBy(j(m.userId)).limit(_);if(c.length===0)break;k=c[c.length-1].userId;for(let A=0;A<c.length;A+=C){let P=c.slice(A,A+C),S=await Promise.allSettled(P.map(g=>W({recipient:g,announcement:i,webBaseUrl:b,sendEmail:D,db:t})));for(let g=0;g<S.length;g++){let u=S[g];if(u.status==="fulfilled")u.value.ok==="sent"?w++:u.value.ok==="skipped"?h++:(f++,u.value.provider==="noop"&&y++,p(` recipient ${P[g].userId}: send failed \u2014 ${u.value.error}`));else{f++;let T=u.reason instanceof Error?u.reason.message:String(u.reason);p(` recipient ${P[g].userId}: send failed \u2014 ${T}`)}}}if(c.length<_)break}y>0&&p(`WARNING: ${y} recipient(s) hit the noop email provider and were recorded as FAILED \u2014 no email provider is configured on this worker (set RESEND_API_KEY in ~/.config/rulemetric/env and reinstall the service)`);let o=await t.select({status:n.status,count:O`count(*)::int`}).from(n).where(l(n.announcementId,r)).groupBy(n.status),e={};for(let c of o)e[c.status]=c.count;let a=e.sent??0,E=e.failed??0,N=a===0&&E>0?"failed":"sent",x=E>0?`${E} of ${a+E} recipient(s) failed; see announcement_deliveries`:null;return await t.update(d).set({status:N,recipientCount:a,...N==="sent"?{sentAt:new Date}:{},error:x,updatedAt:new Date}).where(l(d.id,r)),p(`Done: status=${N} sent=${a} failed=${E} (this attempt: sent=${w} failed=${f} skipped=${h})`),{sent:w,failed:f,skipped:h}}catch(o){let e=o instanceof Error?o.message:String(o);throw await t.update(d).set({status:"failed",error:e.slice(0,1e3),updatedAt:new Date}).where(l(d.id,r)).catch(()=>{}),o}}$(G,"processAnnouncement");function K(I){return I.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}$(K,"escapeHtml");async function W(I){let{recipient:s,announcement:t,webBaseUrl:D,sendEmail:p,db:b}=I;if(!s.email)return{ok:"skipped",reason:"no-email"};let r=await b.insert(n).values({announcementId:t.id,userId:s.userId,email:s.email,status:"pending"}).onConflictDoNothing({target:[n.announcementId,n.userId]}).returning({id:n.id});if(r.length===0)return{ok:"skipped",reason:"already-claimed"};let i=r[0].id,w=D.replace(/\/$/,""),f=encodeURIComponent(s.unsubscribeToken),h=`${w}/unsubscribe/${f}`,y=s.displayName?.trim().split(/\s+/)[0]||"there",k=t.htmlBody.replaceAll("{{unsubscribe_url}}",h).replaceAll("{{recipient_name}}",K(y)),o=t.textBody.replaceAll("{{unsubscribe_url}}",h).replaceAll("{{recipient_name}}",y);try{let e=await p({to:s.email,subject:t.subject,html:k,text:o,fromName:"RuleMetric",idempotencyKey:i,headers:{"List-Unsubscribe":`<${w}/api/unsubscribe/${f}>`,"List-Unsubscribe-Post":"List-Unsubscribe=One-Click"}});if(e.provider==="noop"){let a="no email provider configured (RESEND_API_KEY unset on the worker)";return await b.update(n).set({status:"failed",error:a}).where(l(n.id,i)),{ok:"failed",error:a,provider:e.provider}}return await b.update(n).set({status:"sent",providerId:e.id,sentAt:new Date}).where(l(n.id,i)),{ok:"sent",providerId:e.id,provider:e.provider}}catch(e){let a=e instanceof Error?e.message:String(e);return await b.update(n).set({status:"failed",error:a.slice(0,1e3)}).where(l(n.id,i)).catch(()=>{}),{ok:"failed",error:a}}}$(W,"sendOne");export{G as a};
@@ -1 +0,0 @@
1
- import{b as A,c as L}from"./chunk-5R5RGKOW.js";import{b as G}from"./chunk-GIRPEMTW.js";import{a as _}from"./chunk-MODXEGCU.js";import{d as N,f as F}from"./chunk-B3BHB26P.js";import{e as f,f as $}from"./chunk-KLEF5D3A.js";import{a as d}from"./chunk-ZLLER3HP.js";import{readFileSync as D,realpathSync as U}from"node:fs";import P from"node:path";import O from"node:os";function X(s){let o=P.resolve(s);if(o===P.resolve(O.homedir()))return!1;let a=P.parse(o).root;if(o===a)return!1;try{let n=U(O.tmpdir());if(U(o)===n)return!1}catch{}return!0}d(X,"isScorableProjectPath");var V=5,z=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),K=48,W=.5,T=400,Y=3,q=.6,Q=1;function Z(s){let o=s.bloated??[],a=new Set([...s.harmful.map(n=>n.id),...s.candidates.map(n=>n.id)]);return o.filter(n=>!a.has(n.id)).slice(0,Q).map(n=>({instructionId:n.id,estimatedTokens:n.estimatedTokens,topProjectId:n.topProjectId??null,score:.55,reason:`Costs ~${n.estimatedTokens} tokens every session and measures neutral across ${n.exposures} exposed session(s) \u2014 enough data to detect an effect, and none found. Consider shortening "${n.name}" rather than removing it.`+(n.containsSafetyLanguage?" CAUTION: it contains guardrail language (destructive-command or credential rules) \u2014 preserve those lines when shortening.":"")}))}d(Z,"buildTrimProposals");function tt(s){let o=[];for(let n of s.harmful){let c=n.verdict.delta;o.push({instructionId:n.id,score:Math.min(.95,.75+Math.abs(c)),topProjectId:n.topProjectId??null,reason:`Measured harmful: sessions using "${n.name}" scored ${(c*100).toFixed(1)}pp worse across ${n.exposures} exposed session(s). Observational \u2014 review before archiving.`})}let a=new Set(s.harmful.map(n=>n.id));for(let n of s.candidates)a.has(n.id)||o.push({instructionId:n.id,score:q,topProjectId:n.topProjectId??null,reason:`Unused: "${n.name}" is ${n.reason} (${n.totalExposures} lifetime exposure(s)) but still costs context budget every session.`});return o.slice(0,Y)}d(tt,"buildRemovalProposals");async function et(){let s=P.join(O.homedir(),".config","rulemetric","skills-registry.json");try{let o=D(s,"utf-8"),a=JSON.parse(o);return Date.now()-new Date(a.generatedAt).getTime()>K*60*60*1e3}catch{return!0}}d(et,"checkSkillsRegistryStale");var dt=d(async(s,o)=>{let a=N(),n=a!=="none";n?o.logger.info(`Scoring backend: ${a}`):o.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping relevance scoring. Removal/trim proposals still run \u2014 they need no LLM.");let c;try{c=(await f("/api/sessions/project-paths?limit="+z)).projectPaths}catch(t){o.logger.warn(`Failed to fetch project paths: ${t instanceof Error?t.message:String(t)}`);return}if(c.length===0){o.logger.info("No recent project paths; nothing to score");return}let R=new Map;try{let t=await f("/api/projects?limit=200");for(let e of t.projects??[])e.primaryCheckoutPath&&R.set(_(e.primaryCheckoutPath),e.id)}catch(t){o.logger.warn(`Failed to fetch projects for id resolution: ${t instanceof Error?t.message:String(t)}`)}let w=new Map;try{let t=await f(`/api/catalog?limit=200&contentPreview=${T}`);for(let e of t)w.set(e.id,{id:e.id,name:e.name,description:e.description??"",tags:e.tags??[],contentPreview:(e.contentPreview??"").slice(0,T)})}catch(t){o.logger.warn(`Failed to fetch catalog: ${t instanceof Error?t.message:String(t)}`)}try{let t=await f("/api/instructions?limit=100");for(let e of t.instructions??[])w.has(e.id)||w.set(e.id,{id:e.id,name:e.name,description:e.description??"",tags:e.tags??[],contentPreview:(e.content??"").slice(0,T)})}catch(t){o.logger.warn(`Failed to fetch personal instructions: ${t instanceof Error?t.message:String(t)}`)}let h=[],g=[];try{let t=await f("/api/insights/groom-candidates");if(!t.captureHealthy)o.logger.info(`Grooming paused: ${t.reason??"capture unhealthy"}`);else{h=tt(t),g=Z(t);let e=t.safetyGuarded+t.harmfulSafetyGuarded;o.logger.info(`Removal proposals: ${h.length} (${t.harmful.length} measured-harmful, ${t.candidates.length} never-used, ${e} withheld by the safety allowlist); trim proposals: ${g.length} (${(t.bloated??[]).length} measured-neutral and expensive, ${t.trimSafetyFlagged??0} flagged as containing guardrail language)`)}}catch(t){o.logger.warn(`Failed to fetch groom candidates: ${t instanceof Error?t.message:String(t)}`)}let y=[...w.values()];if(y.length===0&&h.length===0&&g.length===0){o.logger.info("No candidate instructions and nothing to retire; nothing to score");return}o.logger.info(`Scoring ${y.length} candidates across ${c.length} project(s)`);let x=0,l=null,S=new Set;for(let t of c)try{let e=_(t);if(!X(e)){o.logger.info(`Skipping ${e}: not a project directory (home/root)`);continue}let u=G(e),b=n&&u.length>0;u.length===0&&o.logger.info(`${e}: insufficient language signals; removal/trim only`);let H={name:P.basename(e),description:null,languages:u,topics:[],dependencies:[]},k=b?L(y):[];b&&o.logger.info(`Scoring ${y.length} candidates for ${e} in ${k.length} batch(es)`);let v=[],j=0;for(let r of k)try{let i=await F(A(H,r),"",4096);if(!i){j++;continue}let C=i.recommendations??[];for(let m of C)typeof m.instructionId=="string"&&typeof m.score=="number"&&typeof m.reason=="string"&&v.push({instructionId:m.instructionId,score:m.score,reason:m.reason})}catch(i){j++,o.logger.warn(`Batch failed for ${e}: ${i instanceof Error?i.message:String(i)}`)}j>0&&o.logger.warn(`${j}/${k.length} batch(es) failed for ${e} (backend ${a}); suggestions are partial`),b&&v.length===0&&o.logger.warn(`No usable LLM output for ${e} (backend ${a})`);let J=v.filter(r=>r.score>=W).sort((r,i)=>i.score-r.score).slice(0,V),E=R.get(e),B=l===null||l===e;l===null&&(l=e);let M=d(r=>r.topProjectId?r.topProjectId===E:B,"placeHere"),p=[...J.map(r=>({instructionId:r.instructionId,score:r.score,reason:r.reason,kind:"add"})),...h.filter(M).map(({topProjectId:r,...i})=>({...i,kind:"remove"})),...g.filter(M).map(({estimatedTokens:r,topProjectId:i,...C})=>({...C,kind:"trim"}))];if(p.length===0){o.logger.info(`Nothing to suggest for ${e}`);continue}await $("/api/instruction-suggestions/batch-upsert",{projectPath:e,...E?{projectId:E}:{},suggestions:p}),o.logger.info(`${e}: ${p.filter(r=>r.kind==="add").length} add + ${p.filter(r=>r.kind==="remove").length} remove + ${p.filter(r=>r.kind==="trim").length} trim`);for(let r of p)r.kind!=="add"&&S.add(r.instructionId);x++}catch(e){o.logger.warn(`Failed to score ${t}: ${e instanceof Error?e.message:String(e)}`)}let I=[...h.filter(t=>!S.has(t.instructionId)),...g.filter(t=>!S.has(t.instructionId)).map(({estimatedTokens:t,...e})=>e)];if(I.length>0&&l)try{let t=new Set(g.map(e=>e.instructionId));await $("/api/instruction-suggestions/batch-upsert",{projectPath:l,...R.get(l)?{projectId:R.get(l)}:{},suggestions:I.map(({topProjectId:e,...u})=>({...u,kind:t.has(u.instructionId)?"trim":"remove"}))}),o.logger.info(`Orphan sweep: ${I.length} proposal(s) whose project was not scored this run placed on ${l}`)}catch(t){o.logger.warn(`Orphan sweep failed: ${t instanceof Error?t.message:String(t)}`)}if(await et())try{await $("/api/instruction-suggestions/mark-stale",{}),o.logger.warn("Skills registry is stale (>48h); marked all suggestions stale")}catch{}o.logger.info(`Done: scored ${x}/${c.length} projects`)},"cronSuggestInstructions");export{X as a,Z as b,tt as c,dt as d};
@@ -1 +0,0 @@
1
- import{c as C}from"./chunk-5XUN743A.js";import{b as S}from"./chunk-BLCMXTIK.js";import{a as M}from"./chunk-KZZ2MUQQ.js";import{a as L}from"./chunk-DGH4FBMM.js";import{a as y}from"./chunk-RSKQRVPJ.js";import{a as H}from"./chunk-HXZM2UHO.js";import{d as _}from"./chunk-V2IEFHT7.js";import{b as R}from"./chunk-YW3JQKGY.js";import{a as T}from"./chunk-RWF75MTD.js";import{a as A}from"./chunk-O2BKBW7Z.js";import{a as E}from"./chunk-KGQ5W54Y.js";import{a as I}from"./chunk-O7PSLZO6.js";import{b as h}from"./chunk-5RBLIVBF.js";import{a as x}from"./chunk-MOAJLSYV.js";import{a as P}from"./chunk-EN43UYBN.js";import{a as N}from"./chunk-FAXV5AAG.js";import{a as k}from"./chunk-UF6US7VU.js";import{j as b}from"./chunk-2RCWYVEU.js";import{d as w}from"./chunk-NTKO4H2K.js";import{b as f,e as v,f as p}from"./chunk-KLEF5D3A.js";import{a as s}from"./chunk-ZLLER3HP.js";var W={process_eval:E,process_insights:I,process_launch:S,process_send_message:y,process_conversation:A,process_session_goal:H,distill_memories:R,memory_ab:M,process_announcement:T,process_run_cleanup:L,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:N,cron_eval_autorun:P,cron_instruction_evolution:b,process_judge_review:x},D=Object.keys(W),F=new Set(["process_announcement","process_run_cleanup","memory_ab"]);function J(e=process.env){return e.DATABASE_URL?D:D.filter(n=>!F.has(n))}s(J,"availableCapabilities");var U=3e4,K=3e4,G=3e4,V=250,B=5e3,q=`thin-agent-${process.pid}`,g=null;function Q(e,n,r,l){let c;try{let d=w();c={claude:d.claudeBin!=null,codex:d.codexBin!=null,codexModel:d.codexConfiguredModel}}catch{}let i=s(d=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:q,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:d,metadata:{capabilities:e,mode:"thin-agent",llmEngines:c}}).then(u=>{let t=u?.advisory;t&&t.message!==g?(g=t.message,a(r,{event:"worker_advisory",code:t.code,message:t.message})):t||(g=null)}).catch(u=>{a(r,{event:"presence_heartbeat_error",error:u instanceof Error?u.message:String(u)})})},"send");i("alive");let o=setInterval(()=>i("alive"),G);n.addEventListener("abort",()=>{clearInterval(o),i("shutting_down")},{once:!0})}s(Q,"startPresenceHeartbeat");function a(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(a,"structuredLog");function O(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",c),r(!0)},e),c=s(()=>{clearTimeout(l),n.removeEventListener("abort",c),r(!1)},"onAbort");n.addEventListener("abort",c,{once:!0})})}s(O,"abortableSleep");async function X(e,n){let r=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${n}`,l=await v(`/api/work/next?${r}`);return l==null||typeof l=="string"?null:l}s(X,"pollForWork");function z(e,n){return{logger:{info:s(r=>n(r),"info"),warn:s(r=>n(r),"warn"),error:s(r=>n(r),"error")},job:{attempts:e}}}s(z,"makeHelpers");async function Y(e,n,r){let l=W[e.kind],c=Date.now();if(a(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let o=`unknown kind: ${e.kind}`;a(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:o}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:o,terminal:!0}).catch(()=>{});return}let i=setInterval(()=>{a(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(o=>{a(r,{event:"heartbeat_error",jobId:e.id,error:o instanceof Error?o.message:String(o)})})},n);try{let o=z(e.attempts,r),d=await l(e.payload,o)??{};clearInterval(i),a(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-c}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:d})}catch(o){clearInterval(i);let d=h(o),u=o instanceof Error?o.message:String(o);a(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-c,terminal:d,error:u}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:u,terminal:d}).catch(t=>{a(r,{event:"fail_post_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})}}s(Y,"runOne");async function we(e){let n=e.log??(()=>{}),r=e.pollWaitMs??U,l=e.heartbeatIntervalMs??K,c=e.capabilities??J(),i=V;a(n,{event:"agent_start",capabilities:c,pollWaitMs:r,heartbeatIntervalMs:l}),Q(c,e.signal,n,e.version),C({signal:e.signal,log:n}).catch(t=>{a(n,{event:"tt_heartbeat_fatal",error:t instanceof Error?t.message:String(t)})});let o=5*6e4,d=0,u=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let t=Date.now();if(t-d<o)return!1;d=t;let m=e.readInstalledVersion();return!!(m&&m!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(u()){a(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let t=null;try{t=await X(c,r)}catch(m){let $=m instanceof f?m.statusCode:void 0;if(a(n,{event:"poll_error",status:$,error:m instanceof Error?m.message:String(m)}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}if(!t){if(a(n,{event:"poll_204"}),!await O(i,e.signal))break;i=Math.min(i*2,B);continue}i=V,await Y(t,l,n)}a(n,{event:"agent_stop"})}s(we,"runAgentLoop");export{W as a,D as b,J as c,X as d,we as e};
@@ -1 +0,0 @@
1
- import{a}from"../../chunk-RWF75MTD.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-7G6T5C7J.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-ZLLER3HP.js";export{a as processAnnouncement};