@rulemetric/cli 0.7.7 → 0.7.8

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.
@@ -1,2 +1,2 @@
1
- import{b as B}from"./chunk-N7TGRFVZ.js";import{a as v,e as d,f as n,g as m,h as U}from"./chunk-6GGVD6RZ.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}
1
+ import{a as R}from"./chunk-5RBLIVBF.js";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-DIUZLGZW.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
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 +1 @@
1
- import{c as m,d as p}from"./chunk-ZL4MZMUK.js";import{a as C}from"./chunk-N7TGRFVZ.js";import{e as c,h as f}from"./chunk-6GGVD6RZ.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
+ import{c as m,d as p}from"./chunk-ZL4MZMUK.js";import{a as C}from"./chunk-N7TGRFVZ.js";import{f as c,i as f}from"./chunk-DIUZLGZW.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,2 +1,2 @@
1
- import{c as R}from"./chunk-6QKI756T.js";import{b as s,c as r,h as j}from"./chunk-6GGVD6RZ.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}
1
+ import{c as R}from"./chunk-6QKI756T.js";import{a as P}from"./chunk-5RBLIVBF.js";import{b as s,c as r,i as j}from"./chunk-DIUZLGZW.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
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};
@@ -0,0 +1,24 @@
1
+ import{f as E}from"./chunk-RTWRHIKY.js";import{a as w,c as i,d as r,e as a,i as v}from"./chunk-DIUZLGZW.js";import{a as g}from"./chunk-ZLLER3HP.js";import{eq as u,and as M,desc as A,inArray as j,isNotNull as D,sql as R}from"drizzle-orm";var x=50,k=24e3,C=3,L=3,O=40,P=new Set(["fact","decision","correction","convention"]),X=`You are distilling DURABLE, PROJECT-SPECIFIC knowledge from an AI coding session so a future agent working on the SAME project starts smarter.
2
+
3
+ Extract ONLY facts / decisions / corrections / conventions that will STILL be true and useful in FUTURE sessions \u2014 architecture facts, deliberate design decisions, corrections of a wrong approach, or project conventions.
4
+
5
+ Do NOT extract:
6
+ - what the user asked for in THIS session, or the step-by-step actions taken
7
+ - anything specific to this one task that will not recur
8
+ - anything already covered by the existing memories listed below
9
+
10
+ Existing memories for this project (do NOT duplicate these):
11
+ {{EXISTING}}
12
+
13
+ Prefer FEWER, higher-quality memories \u2014 most sessions yield 0-2, many yield 0. A weak or redundant memory is worse than none.
14
+
15
+ Each memory has: "kind" (one of: fact, decision, correction, convention), a short "title" (<= 120 chars), and a 1-3 sentence "body".
16
+
17
+ Return STRICT JSON: {"memories": [{"kind": "...", "title": "...", "body": "..."}]} \u2014 use an empty array if nothing durable was learned.`;function N(o){return o.toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}g(N,"normalizeTitle");function $(o,d,t=L){let I=Array.isArray(o?.memories)?o.memories:[],p=new Set(d.map(N)),e=[];for(let f of I){if(e.length>=t)break;if(!f||typeof f!="object")continue;let l=f,y=typeof l.kind=="string"?l.kind.trim().toLowerCase():"",s=typeof l.title=="string"?l.title.trim():"",b=typeof l.body=="string"?l.body.trim():"";if(!P.has(y)||!s||!b||s.length>300)continue;let c=N(s);!c||p.has(c)||(p.add(c),e.push({kind:y,title:s,body:b}))}return e}g($,"selectNewMemories");async function T(o,d,t){await o.update(i).set({analysis:R`COALESCE(${i.analysis}, '{}'::jsonb) || ${JSON.stringify({distilledAt:new Date(t()).toISOString()})}::jsonb`}).where(u(i.id,d))}g(T,"stampDistilled");async function F(o,d={}){let t=d.db??v(),I=d.llm??E,p=d.now??Date.now,[e]=await t.select({id:i.id,userId:i.userId,orgId:i.orgId,projectId:i.projectId,analysis:i.analysis}).from(i).where(u(i.id,o.sessionId)).limit(1);if(!e)return{skipped:"not_found"};if((e.analysis??{}).distilledAt)return{skipped:"already_distilled"};if(!e.projectId)return await T(t,e.id,p),{skipped:"no_project"};let y=(await t.select({eventType:r.eventType,content:r.content}).from(r).where(M(u(r.sessionId,o.sessionId),j(r.eventType,["user_message","assistant_response"]),D(r.content))).orderBy(A(r.timestamp)).limit(x)).reverse().map(n=>`${n.eventType==="user_message"?"USER":"ASSISTANT"}: ${n.content}`);if(y.length<C)return await T(t,e.id,p),{skipped:"too_short"};let s=y.join(`
18
+
19
+ `);if(s.length>k){let n=s.slice(0,Math.floor(k*.45)),m=s.slice(s.length-Math.floor(k*.45));s=`${n}
20
+
21
+ [... middle of session omitted ...]
22
+
23
+ ${m}`}let c=(await t.select({title:a.title}).from(a).where(M(u(a.userId,e.userId),u(a.projectId,e.projectId),u(a.status,"active"))).orderBy(A(a.updatedAt)).limit(O)).map(n=>n.title),_=X.replace("{{EXISTING}}",c.length?c.map(n=>`- ${n}`).join(`
24
+ `):"(none yet)"),S=await I(_,s,700);if(S===null)throw new Error("distill_memories: LLM backend unavailable or returned unparseable output");let h=$(S,c);if(h.length>0){let n=e.orgId??null;if(!n){let[m]=await t.select({orgId:w.activeOrgId}).from(w).where(u(w.id,e.userId)).limit(1);n=m?.orgId??null}await t.insert(a).values(h.map(m=>({userId:e.userId,orgId:n,projectId:e.projectId,kind:m.kind,title:m.title,body:m.body,source:"distilled",status:"active"})))}return await T(t,e.id,p),{created:h.length,candidates:h.length}}g(F,"distillMemories");export{$ as a,F as b};
@@ -1 +1 @@
1
- import{a as m,c as sr}from"./chunk-ZLLER3HP.js";import{boolean as No,pgTable as ir,text as Je,timestamp as bt,uuid as vo}from"drizzle-orm/pg-core";import{pgTable as Ge,text as Z,timestamp as ye,jsonb as xo,uuid as F,primaryKey as go}from"drizzle-orm/pg-core";var u=Ge("organizations",{id:F("id").primaryKey().defaultRandom(),name:Z("name").unique().notNull(),slug:Z("slug").unique().notNull(),metadata:xo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ye("updated_at",{withTimezone:!0}).defaultNow()}),x=Ge("teams",{id:F("id").primaryKey().defaultRandom(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Z("name").notNull(),slug:Z("slug").notNull(),metadata:xo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()}),ee=Ge("user_organizations",{userId:F("user_id").notNull(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[go({columns:[e.userId,e.orgId]})]),te=Ge("user_teams",{userId:F("user_id").notNull(),teamId:F("team_id").references(()=>x.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[go({columns:[e.userId,e.teamId]})]);var o=ir("profiles",{id:vo("id").primaryKey(),email:Je("email"),displayName:Je("display_name"),activeOrgId:vo("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:No("is_superadmin").notNull().default(!1),claudeCodePlan:Je("claude_code_plan"),planSource:Je("plan_source").notNull().default("detected"),setupCompletedAt:bt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:No("live_send_skipped").notNull().default(!1),createdAt:bt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:bt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as cr,text as ne,timestamp as Et,jsonb as wo,uuid as We,integer as mr,boolean as pr,index as St}from"drizzle-orm/pg-core";import{boolean as dr,jsonb as ur,pgTable as kt,primaryKey as yo,text as G,timestamp as we,uniqueIndex as Rt,uuid as J}from"drizzle-orm/pg-core";import{sql as lr}from"drizzle-orm";import{pgTable as ho,text as f,timestamp as Te,jsonb as Qe,uuid as P,integer as jt,boolean as ar,uniqueIndex as Io,index as Ye}from"drizzle-orm/pg-core";var n=ho("instructions",{id:P("id").primaryKey().defaultRandom(),name:f("name").notNull(),description:f("description").notNull(),type:f("type").notNull().default("instruction"),scope:f("scope").notNull(),scopeRef:P("scope_ref"),version:f("version").notNull(),content:f("content").notNull(),frontmatter:Qe("frontmatter").notNull(),slots:Qe("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:P("created_by"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).defaultNow(),archived:ar("archived").default(!1),archivedAt:Te("archived_at",{withTimezone:!0}),archivedBy:P("archived_by"),forkedFromId:P("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:f("upstream_version"),badge:f("badge"),contentHash:f("content_hash"),contextIdentity:f("context_identity"),scanScore:jt("scan_score"),scanFindings:Qe("scan_findings"),popularityScore:jt("popularity_score"),sourceUpdatedAt:Te("source_updated_at",{withTimezone:!0})},e=>[Io("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ye("idx_instructions_scope").on(e.scope,e.scopeRef),Ye("idx_instructions_created_by").on(e.createdBy),Ye("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ye("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),oe=ho("instruction_versions",{id:P("id").primaryKey().defaultRandom(),instructionId:P("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:jt("version_number").notNull(),content:f("content").notNull(),frontmatter:Qe("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:P("created_by"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[Io("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var r=kt("projects",{id:J("id").primaryKey().defaultRandom(),orgId:J("org_id").references(()=>u.id,{onDelete:"cascade"}),name:G("name").notNull(),description:G("description"),githubRepo:G("github_repo"),gitRemoteUrl:G("git_remote_url"),gitRootCommit:G("git_root_commit"),gitRemoteAliases:G("git_remote_aliases").array().notNull().default([]),metadata:ur("metadata"),createdBy:J("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow(),updatedAt:we("updated_at",{withTimezone:!0}).defaultNow()},e=>[Rt("projects_org_name_idx").on(e.orgId,e.name),Rt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(lr`${e.gitRemoteUrl} IS NOT NULL`)]),O=kt("project_instructions",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:we("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[yo({columns:[e.projectId,e.instructionId]})]),To=kt("project_checkouts",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:G("path").notNull(),isWorktree:dr("is_worktree").notNull().default(!1),firstSeen:we("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:we("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[yo({columns:[e.projectId,e.path]}),Rt("project_checkouts_path_unique").on(e.path)]);var _=cr("agent_runs",{id:We("id").primaryKey().defaultRandom(),userId:We("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:We("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:We("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:ne("project_path"),gitRemote:ne("git_remote"),baseBranch:ne("base_branch"),title:ne("title"),prompt:ne("prompt"),toolSpec:wo("tool_spec").notNull().default([]),autoWorktree:pr("auto_worktree").notNull().default(!0),status:ne("status").notNull().default("pending"),sessionCount:mr("session_count").notNull().default(0),metadata:wo("metadata").notNull().default({}),createdAt:Et("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Et("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Et("completed_at",{withTimezone:!0})},e=>[St("idx_agent_runs_user").on(e.userId),St("idx_agent_runs_org_created").on(e.orgId,e.createdAt),St("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Kt,text as N,timestamp as Ae,jsonb as Y,uuid as z,integer as Xe,uniqueIndex as Ao,index as I}from"drizzle-orm/pg-core";var d=Kt("sessions",{id:z("id").primaryKey().defaultRandom(),userId:z("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:N("external_session_id"),projectId:z("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:z("org_id").references(()=>u.id,{onDelete:"set null"}),tool:N("tool").notNull(),projectPath:N("project_path"),gitBranch:N("git_branch"),startedAt:Ae("started_at",{withTimezone:!0}).notNull(),endedAt:Ae("ended_at",{withTimezone:!0}),eventCount:Xe("event_count").default(0),tokenUsage:Y("token_usage"),analysis:Y("analysis"),analyzedAt:Ae("analyzed_at",{withTimezone:!0}),analyzedEventCount:Xe("analyzed_event_count"),analyzedTurnCount:Xe("analyzed_turn_count"),metadata:Y("metadata").default({}),origin:N("origin").notNull().default("unknown"),runId:z("run_id").references(()=>_.id,{onDelete:"set null"}),model:N("model"),harnessVersion:N("harness_version"),createdAt:Ae("created_at",{withTimezone:!0}).defaultNow()},e=>[I("idx_sessions_user").on(e.userId),I("idx_sessions_tool").on(e.tool),I("idx_sessions_started_at").on(e.startedAt),I("idx_sessions_project").on(e.projectId),I("idx_sessions_org_started_at").on(e.orgId,e.startedAt),I("idx_sessions_run").on(e.runId),Ao("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),re=Kt("session_events",{id:z("id").primaryKey().defaultRandom(),sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:Xe("sequence").notNull(),eventType:N("event_type").notNull(),content:N("content"),toolName:N("tool_name"),toolInput:Y("tool_input"),toolOutput:Y("tool_output"),tokenUsage:Y("token_usage"),model:N("model"),timestamp:Ae("timestamp",{withTimezone:!0}).notNull(),metadata:Y("metadata").default({})},e=>[Ao("session_events_session_sequence_idx").on(e.sessionId,e.sequence),I("idx_session_events_session_id").on(e.sessionId),I("idx_session_events_event_type").on(e.eventType),I("idx_session_events_model").on(e.model)]),C=Kt("session_instructions",{sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:N("link_method").notNull()},e=>[I("idx_session_instructions_instruction_id").on(e.instructionId)]);import{boolean as _r,date as fr,index as Pt,integer as xr,jsonb as gr,pgTable as Ot,text as v,timestamp as q,uniqueIndex as Nr,uuid as se}from"drizzle-orm/pg-core";var zo=Ot("announcements",{id:se("id").primaryKey().defaultRandom(),version:v("version").notNull().unique(),releaseDate:fr("release_date").notNull(),subject:v("subject").notNull(),htmlBody:v("html_body").notNull(),textBody:v("text_body").notNull(),sections:gr("sections").notNull().default({}),status:v("status").notNull().default("draft"),recipientCount:xr("recipient_count"),sentAt:q("sent_at",{withTimezone:!0}),sentBy:se("sent_by"),error:v("error"),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Pt("idx_announcements_status").on(e.status),Pt("idx_announcements_created").on(e.createdAt)]),Do=Ot("announcement_deliveries",{id:se("id").primaryKey().defaultRandom(),announcementId:se("announcement_id").notNull(),userId:se("user_id").notNull(),email:v("email").notNull(),status:v("status").notNull().default("pending"),providerId:v("provider_id"),error:v("error"),sentAt:q("sent_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Nr("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Pt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),bo=Ot("notification_preferences",{userId:se("user_id").primaryKey(),productAnnouncements:_r("product_announcements").notNull().default(!0),unsubscribeToken:v("unsubscribe_token").notNull().unique(),unsubscribedAt:q("unsubscribed_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{pgTable as vr,text as Ct,timestamp as $e,uuid as Ze,index as jo}from"drizzle-orm/pg-core";var D=vr("org_invitations",{id:Ze("id").primaryKey().defaultRandom(),orgId:Ze("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:Ct("email").notNull(),role:Ct("role").notNull().default("member"),teamId:Ze("team_id").references(()=>x.id,{onDelete:"set null"}),invitedBy:Ze("invited_by").notNull().references(()=>o.id),token:Ct("token").notNull().unique(),expiresAt:$e("expires_at",{withTimezone:!0}).notNull(),acceptedAt:$e("accepted_at",{withTimezone:!0}),revokedAt:$e("revoked_at",{withTimezone:!0}),createdAt:$e("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 hr,text as Ir,timestamp as yr,jsonb as Tr,uuid as qt,index as Ro}from"drizzle-orm/pg-core";var ie=hr("instruction_events",{id:qt("id").primaryKey().defaultRandom(),instructionId:qt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:Ir("event_type").notNull(),actorId:qt("actor_id").notNull(),metadata:Tr("metadata"),createdAt:yr("created_at",{withTimezone:!0}).defaultNow()},e=>[Ro("idx_instruction_events_instruction").on(e.instructionId),Ro("idx_instruction_events_type").on(e.eventType)]);import{pgTable as ko,text as et,timestamp as Eo,uuid as y,integer as So,index as ae,unique as wr}from"drizzle-orm/pg-core";var b=ko("treatment_assignments",{id:y("id").primaryKey().defaultRandom(),userId:y("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:et("treatment_type").notNull(),treatmentId:y("treatment_id").notNull(),treatmentVersion:So("treatment_version").notNull().default(1),projectId:y("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:y("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:et("method").notNull(),assignedAt:Eo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ae("idx_treatment_assignments_user").on(e.userId),ae("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),ae("idx_treatment_assignments_project").on(e.projectId)]),j=ko("treatment_exposures",{id:y("id").primaryKey().defaultRandom(),sessionId:y("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),userId:y("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:et("treatment_type").notNull(),treatmentId:y("treatment_id").notNull(),treatmentVersion:So("treatment_version").notNull().default(1),assignmentId:y("assignment_id").references(()=>b.id,{onDelete:"set null"}),method:et("method").notNull(),exposedAt:Eo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[wr("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),ae("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),ae("idx_treatment_exposures_user").on(e.userId),ae("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Ar,text as Mt,timestamp as zr,uuid as tt,integer as Dr,index as Ko,uniqueIndex as br}from"drizzle-orm/pg-core";var Po=Ar("pending_treatment_exposures",{id:tt("id").primaryKey().defaultRandom(),userId:tt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Mt("external_session_id").notNull(),treatmentType:Mt("treatment_type").notNull(),treatmentId:tt("treatment_id").notNull(),treatmentVersion:Dr("treatment_version").notNull().default(1),method:Mt("method").notNull().default("injected"),projectId:tt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:zr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[br("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Ko("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Ko("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as jr,text as ze,timestamp as Oo,uuid as De,integer as Rr,index as ot}from"drizzle-orm/pg-core";var T=jr("memories",{id:De("id").primaryKey().defaultRandom(),userId:De("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:De("org_id"),projectId:De("project_id").references(()=>r.id,{onDelete:"set null"}),version:Rr("version").notNull().default(1),parentId:De("parent_id").references(()=>T.id,{onDelete:"set null"}),kind:ze("kind").notNull(),title:ze("title").notNull(),body:ze("body").notNull(),source:ze("source").notNull(),status:ze("status").notNull().default("active"),createdAt:Oo("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Oo("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ot("idx_memories_user").on(e.userId),ot("idx_memories_project").on(e.projectId),ot("idx_memories_parent").on(e.parentId),ot("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as kr,text as de,timestamp as Lt,uuid as Bt,jsonb as Er,uniqueIndex as Sr,index as Co}from"drizzle-orm/pg-core";var nt=kr("session_terminal_targets",{id:Bt("id").primaryKey().defaultRandom(),userId:Bt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Bt("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:de("external_session_id"),kind:de("kind").notNull(),target:de("target").notNull(),status:de("status").notNull().default("active"),attachCommand:de("attach_command").notNull(),projectPath:de("project_path"),metadata:Er("metadata").notNull().default({}),lastSeenAt:Lt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Lt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Lt("updated_at",{withTimezone:!0}).defaultNow()},e=>[Sr("idx_session_terminal_targets_user_target").on(e.userId,e.target),Co("idx_session_terminal_targets_session").on(e.sessionId),Co("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as Kr,index as rt,jsonb as qo,pgTable as Pr,text as Q,timestamp as be,uuid as st,integer as Or}from"drizzle-orm/pg-core";var Mo=Pr("session_send_jobs",{id:st("id").primaryKey().defaultRandom(),userId:st("user_id").notNull(),sessionId:st("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:st("terminal_target_id").references(()=>nt.id,{onDelete:"set null"}),target:Q("target").notNull(),message:Q("message").notNull(),submit:Kr("submit").notNull().default(!0),delivery:Q("delivery").notNull().default("live"),status:Q("status").notNull().default("pending"),result:qo("result"),error:Q("error"),attempts:Or("attempts").notNull().default(0),taskKind:Q("task_kind"),payload:qo("payload"),claimedBy:Q("claimed_by"),claimedAt:be("claimed_at",{withTimezone:!0}),leaseExpiresAt:be("lease_expires_at",{withTimezone:!0}),createdAt:be("created_at",{withTimezone:!0}).defaultNow(),updatedAt:be("updated_at",{withTimezone:!0}).defaultNow(),completedAt:be("completed_at",{withTimezone:!0})},e=>[rt("idx_session_send_jobs_user").on(e.userId),rt("idx_session_send_jobs_session").on(e.sessionId),rt("idx_session_send_jobs_status").on(e.status),rt("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Bo,text as W,timestamp as it,jsonb as Uo,uuid as M,integer as Cr,boolean as qr,uniqueIndex as Mr,index as Lo,primaryKey as Lr}from"drizzle-orm/pg-core";var h=Bo("packs",{id:M("id").primaryKey().defaultRandom(),name:W("name").notNull(),description:W("description").notNull(),scope:W("scope").notNull(),scopeRef:M("scope_ref"),version:W("version").notNull().default("1.0.0"),tags:W("tags").array(),badge:W("badge"),metadata:Uo("metadata"),createdBy:M("created_by"),createdAt:it("created_at",{withTimezone:!0}).defaultNow(),updatedAt:it("updated_at",{withTimezone:!0}).defaultNow(),archived:qr("archived").default(!1),archivedAt:it("archived_at",{withTimezone:!0}),archivedBy:M("archived_by"),forkedFromId:M("forked_from_id").references(()=>h.id,{onDelete:"set null"}),upstreamVersion:W("upstream_version")},e=>[Mr("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Lo("idx_packs_scope").on(e.scope,e.scopeRef),Lo("idx_packs_created_by").on(e.createdBy)]),L=Bo("pack_instructions",{packId:M("pack_id").references(()=>h.id,{onDelete:"cascade"}).notNull(),instructionId:M("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Cr("position").notNull().default(0),slotOverrides:Uo("slot_overrides"),addedAt:it("added_at",{withTimezone:!0}).defaultNow(),addedBy:M("added_by")},e=>[Lr({columns:[e.packId,e.instructionId]})]);import{pgTable as Br,text as Ut,timestamp as Ur,jsonb as Hr,uuid as Ht,index as ue}from"drizzle-orm/pg-core";var le=Br("instruction_usage_events",{id:Ht("id").primaryKey().defaultRandom(),instructionId:Ht("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:Ht("user_id").notNull(),surface:Ut("surface").notNull(),action:Ut("action").notNull(),metadata:Hr("metadata"),traceId:Ut("trace_id"),createdAt:Ur("created_at",{withTimezone:!0}).defaultNow()},e=>[ue("idx_usage_events_instruction").on(e.instructionId),ue("idx_usage_events_user").on(e.userId),ue("idx_usage_events_surface").on(e.surface),ue("idx_usage_events_action").on(e.action),ue("idx_usage_events_created_at").on(e.createdAt),ue("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as Vr,text as at,timestamp as Ho,jsonb as Fr,uuid as Vo,index as Vt}from"drizzle-orm/pg-core";var Fo=Vr("worker_connections",{id:Vo("id").primaryKey().defaultRandom(),userId:Vo("user_id").notNull(),workerType:at("worker_type").notNull().default("mcp"),clientName:at("client_name").notNull(),clientVersion:at("client_version"),workerVersion:at("worker_version"),lastHeartbeat:Ho("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Ho("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Fr("metadata")},e=>[Vt("idx_worker_connections_user").on(e.userId),Vt("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),Vt("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Gr,text as dt,timestamp as Jr,jsonb as Yr,uuid as Go,index as Jo}from"drizzle-orm/pg-core";var Yo=Gr("cli_setup_events",{id:Go("id").primaryKey().defaultRandom(),userId:Go("user_id").notNull(),deviceId:dt("device_id").notNull(),event:dt("event").notNull(),cliVersion:dt("cli_version"),os:dt("os"),props:Yr("props").notNull().default({}),createdAt:Jr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jo("idx_cli_setup_events_user").on(e.userId,e.createdAt),Jo("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Qr,text as X,integer as Wr,boolean as Xr,timestamp as $r,jsonb as Zr,uuid as es,index as Qo}from"drizzle-orm/pg-core";var Wo=Qr("cli_error_events",{id:es("id").primaryKey().defaultRandom(),deviceId:X("device_id"),event:X("event").notNull(),command:X("command"),statusCode:Wr("status_code"),message:X("message"),cliVersion:X("cli_version"),os:X("os"),nodeVersion:X("node_version"),proxied:Xr("proxied"),props:Zr("props").notNull().default({}),createdAt:$r("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Qo("idx_cli_error_events_created").on(e.createdAt),Qo("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as ut,text as R,timestamp as ce,jsonb as w,uuid as A,integer as je,index as k}from"drizzle-orm/pg-core";var s=ut("eval_targets",{id:A("id").primaryKey().defaultRandom(),userId:A("user_id").notNull(),name:R("name").notNull(),type:R("type").notNull(),content:R("content").notNull(),description:R("description").notNull().default(""),metadata:w("metadata").notNull().default({}),version:je("version").notNull().default(1),parentId:A("parent_id").references(()=>s.id,{onDelete:"set null"}),createdAt:ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ce("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("eval_targets_name_user_idx").on(e.name,e.userId),k("idx_eval_targets_user").on(e.userId),k("idx_eval_targets_type").on(e.type),k("idx_eval_targets_parent").on(e.parentId)]),E=ut("evals",{id:A("id").primaryKey().defaultRandom(),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:R("name").notNull(),prompt:R("prompt").notNull(),expectedOutput:R("expected_output").notNull().default(""),files:w("files").notNull().default([]),expectations:w("expectations").notNull().default([]),createdAt:ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ce("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_evals_target").on(e.evalTargetId)]),B=ut("eval_runs",{id:A("id").primaryKey().defaultRandom(),evalId:A("eval_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:je("eval_target_version").notNull(),configuration:R("configuration").notNull(),runNumber:je("run_number").notNull().default(1),iteration:je("iteration").notNull().default(1),status:R("status").notNull().default("completed"),outputs:w("outputs").notNull().default({}),timing:w("timing").notNull().default({}),grading:w("grading").notNull().default({}),comparison:w("comparison"),createdAt:ce("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_eval_runs_eval").on(e.evalId),k("idx_eval_runs_target").on(e.evalTargetId),k("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),me=ut("benchmarks",{id:A("id").primaryKey().defaultRandom(),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:je("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:ce("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_benchmarks_target").on(e.evalTargetId)]);import{pgTable as $o,text as Ft,timestamp as Gt,jsonb as Zo,uuid as pe,integer as Re,index as lt,real as Xo}from"drizzle-orm/pg-core";var _e=$o("trigger_evals",{id:pe("id").primaryKey().defaultRandom(),evalTargetId:pe("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:pe("user_id").notNull(),queries:Zo("queries").notNull().default([]),status:Ft("status").notNull().default("pending_review"),trainIndices:Re("train_indices").array().default([]),testIndices:Re("test_indices").array().default([]),createdAt:Gt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Gt("updated_at",{withTimezone:!0}).defaultNow()},e=>[lt("idx_trigger_evals_target").on(e.evalTargetId),lt("idx_trigger_evals_user").on(e.userId)]),fe=$o("optimization_runs",{id:pe("id").primaryKey().defaultRandom(),evalTargetId:pe("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:pe("user_id").notNull(),type:Ft("type").notNull(),iteration:Re("iteration").notNull(),inputVersion:Re("input_version").notNull(),outputVersion:Re("output_version"),trainScore:Xo("train_score"),testScore:Xo("test_score"),analysis:Zo("analysis").notNull().default({}),status:Ft("status").notNull().default("running"),createdAt:Gt("created_at",{withTimezone:!0}).defaultNow()},e=>[lt("idx_optimization_runs_target").on(e.evalTargetId),lt("idx_optimization_runs_user").on(e.userId)]);import{pgTable as ts,text as U,timestamp as os,jsonb as ke,uuid as Jt,integer as Yt,real as ns,index as Ee,uniqueIndex as en}from"drizzle-orm/pg-core";var H=ts("context_snapshots",{id:Jt("id").primaryKey().defaultRandom(),sessionId:Jt("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:Jt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:Yt("sequence").notNull().default(0),provider:U("provider").notNull(),model:U("model").notNull(),systemPrompt:U("system_prompt").notNull(),injectedInstructions:ke("injected_instructions").notNull().default([]),messagesSummary:ke("messages_summary").notNull(),tools:ke("tools").notNull().default([]),systemHash:U("system_hash").notNull(),requestHash:U("request_hash").notNull().default(""),toolsHash:U("tools_hash"),injectedHash:U("injected_hash"),messagesDelta:ke("messages_delta").default([]),messagesDeltaRef:U("messages_delta_ref"),maxTokens:Yt("max_tokens"),temperature:ns("temperature"),estimatedTokens:Yt("estimated_tokens"),capturedAt:os("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:ke("metadata").default({})},e=>[Ee("idx_context_snapshots_session").on(e.sessionId),Ee("idx_context_snapshots_user").on(e.userId),Ee("idx_context_snapshots_hash").on(e.systemHash),Ee("idx_context_snapshots_request_hash").on(e.requestHash),en("idx_snapshots_session_request").on(e.sessionId,e.requestHash),en("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Ee("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as rs,text as tn,timestamp as ss,jsonb as is,integer as as,index as ds}from"drizzle-orm/pg-core";var on=rs("content_blobs",{hash:tn("hash").primaryKey(),contentType:tn("content_type").notNull(),content:is("content").notNull(),sizeBytes:as("size_bytes").notNull().default(0),createdAt:ss("created_at",{withTimezone:!0}).defaultNow()},e=>[ds("idx_content_blobs_type").on(e.contentType)]);import{pgTable as us,text as ct,timestamp as Se,jsonb as mt,uuid as Qt,index as pt,integer as ls}from"drizzle-orm/pg-core";var xe=us("eval_jobs",{id:Qt("id").primaryKey().defaultRandom(),userId:Qt("user_id").notNull(),evalTargetId:Qt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:ct("status").notNull().default("pending"),config:mt("config").notNull().default({}),progress:mt("progress").notNull().default({}),result:mt("result"),error:ct("error"),attempts:ls("attempts").notNull().default(0),taskKind:ct("task_kind"),payload:mt("payload"),claimedBy:ct("claimed_by"),claimedAt:Se("claimed_at",{withTimezone:!0}),leaseExpiresAt:Se("lease_expires_at",{withTimezone:!0}),createdAt:Se("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Se("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Se("completed_at",{withTimezone:!0})},e=>[pt("idx_eval_jobs_user").on(e.userId),pt("idx_eval_jobs_target").on(e.evalTargetId),pt("idx_eval_jobs_status").on(e.status),pt("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as cs,text as Ke,timestamp as Pe,jsonb as nn,uuid as rn,integer as ms,index as sn}from"drizzle-orm/pg-core";var an=cs("agent_jobs",{id:rn("id").primaryKey().defaultRandom(),userId:rn("user_id").notNull(),taskKind:Ke("task_kind").notNull(),status:Ke("status").notNull().default("pending"),payload:nn("payload").notNull(),dedupeKey:Ke("dedupe_key"),result:nn("result"),error:Ke("error"),attempts:ms("attempts").notNull().default(0),claimedBy:Ke("claimed_by"),claimedAt:Pe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Pe("lease_expires_at",{withTimezone:!0}),createdAt:Pe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Pe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Pe("completed_at",{withTimezone:!0})},e=>[sn("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),sn("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as ps,text as Oe,timestamp as Ce,jsonb as _t,uuid as Wt,index as ft,integer as _s}from"drizzle-orm/pg-core";var dn=ps("insights_jobs",{id:Wt("id").primaryKey().defaultRandom(),userId:Wt("user_id").notNull(),status:Oe("status").notNull().default("pending"),projectPath:Oe("project_path"),projectId:Wt("project_id").references(()=>r.id,{onDelete:"set null"}),config:_t("config").notNull().default({}),progress:_t("progress").notNull().default({}),result:_t("result"),error:Oe("error"),attempts:_s("attempts").notNull().default(0),taskKind:Oe("task_kind"),payload:_t("payload"),claimedBy:Oe("claimed_by"),claimedAt:Ce("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ce("lease_expires_at",{withTimezone:!0}),createdAt:Ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ce("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ce("completed_at",{withTimezone:!0})},e=>[ft("idx_insights_jobs_user").on(e.userId),ft("idx_insights_jobs_status").on(e.status),ft("idx_insights_jobs_pending").on(e.userId,e.status),ft("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as fs,text as Xt,timestamp as xt,uuid as un,index as xs,uniqueIndex as gs}from"drizzle-orm/pg-core";var ge=fs("api_keys",{id:un("id").primaryKey().defaultRandom(),userId:un("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:Xt("name").notNull(),keyHash:Xt("key_hash").notNull(),keyPrefix:Xt("key_prefix").notNull(),lastUsedAt:xt("last_used_at",{withTimezone:!0}),expiresAt:xt("expires_at",{withTimezone:!0}),revokedAt:xt("revoked_at",{withTimezone:!0}),createdAt:xt("created_at",{withTimezone:!0}).defaultNow()},e=>[xs("idx_api_keys_user").on(e.userId),gs("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Ns,text as $t,timestamp as ln,uuid as vs,index as hs}from"drizzle-orm/pg-core";var cn=Ns("extension_auth_codes",{code:$t("code").primaryKey(),userId:vs("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:$t("editor"),email:$t("email"),expiresAt:ln("expires_at",{withTimezone:!0}).notNull(),createdAt:ln("created_at",{withTimezone:!0}).defaultNow()},e=>[hs("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as Is,text as ys,timestamp as mn,jsonb as Ts,uuid as Zt,index as pn}from"drizzle-orm/pg-core";var Ne=Is("eval_conversations",{id:Zt("id").primaryKey().defaultRandom(),evalTargetId:Zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:Zt("user_id").notNull(),messages:Ts("messages").notNull().default([]),status:ys("status").notNull().default("active"),createdAt:mn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mn("updated_at",{withTimezone:!0}).defaultNow()},e=>[pn("idx_eval_conversations_target").on(e.evalTargetId),pn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as ws,text as S,timestamp as _n,jsonb as As,uuid as eo}from"drizzle-orm/pg-core";var fn=ws("skill_submissions",{id:eo("id").primaryKey().defaultRandom(),skillId:S("skill_id").notNull(),name:S("name").notNull(),description:S("description").notNull(),category:S("category").notNull(),tools:S("tools").array().notNull(),tags:S("tags").array().default([]),content:S("content").notNull(),status:S("status").notNull().default("pending"),submittedBy:eo("submitted_by").notNull(),reviewedBy:eo("reviewed_by"),reviewNote:S("review_note"),metadata:As("metadata"),createdAt:_n("created_at",{withTimezone:!0}).defaultNow(),updatedAt:_n("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as zs,text as qe,timestamp as xn,jsonb as Ds,uuid as bs,uniqueIndex as js,index as gn}from"drizzle-orm/pg-core";var Nn=zs("harness_releases",{id:bs("id").primaryKey().defaultRandom(),harness:qe("harness").notNull(),version:qe("version").notNull(),publishedAt:xn("published_at",{withTimezone:!0}).notNull(),title:qe("title"),body:qe("body"),categories:Ds("categories").default({}),url:qe("url"),createdAt:xn("created_at",{withTimezone:!0}).defaultNow()},e=>[js("idx_harness_releases_unique").on(e.harness,e.version),gn("idx_harness_releases_harness").on(e.harness),gn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as Rs,text as ve,timestamp as vn,jsonb as ks,uuid as hn,index as In,uniqueIndex as Es}from"drizzle-orm/pg-core";var to=Rs("notifications",{id:hn("id").primaryKey().defaultRandom(),userId:hn("user_id").notNull(),type:ve("type").notNull(),title:ve("title").notNull(),body:ve("body"),url:ve("url"),sourceTable:ve("source_table"),sourceId:ve("source_id"),metadata:ks("metadata").notNull().default({}),readAt:vn("read_at",{withTimezone:!0}),createdAt:vn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[In("idx_notifications_user_created").on(e.userId,e.createdAt),In("idx_notifications_user_unread").on(e.userId),Es("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Ss,text as Me,timestamp as Le,jsonb as oo,uuid as no,index as gt,integer as Ks}from"drizzle-orm/pg-core";var he=Ss("launch_jobs",{id:no("id").primaryKey().defaultRandom(),userId:no("user_id").notNull(),tool:Me("tool").notNull(),status:Me("status").notNull().default("pending"),config:oo("config").notNull().default({}),result:oo("result"),error:Me("error"),attempts:Ks("attempts").notNull().default(0),taskKind:Me("task_kind"),payload:oo("payload"),claimedBy:Me("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),createdAt:Le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Le("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Le("completed_at",{withTimezone:!0}),runId:no("run_id").references(()=>_.id,{onDelete:"set null"})},e=>[gt("idx_launch_jobs_user").on(e.userId),gt("idx_launch_jobs_status").on(e.status),gt("idx_launch_jobs_pending").on(e.userId,e.status),gt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as yn,uuid as K,text as Be,real as Ps,timestamp as Nt,boolean as Os,uniqueIndex as Cs,index as Ue}from"drizzle-orm/pg-core";var ro=yn("instruction_suggestions",{id:K("id").primaryKey().defaultRandom(),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:K("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:Be("project_path").notNull(),projectId:K("project_id").references(()=>r.id,{onDelete:"set null"}),score:Ps("score").notNull(),reason:Be("reason").notNull(),generatedAt:Nt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Os("is_stale").notNull().default(!1),dismissedAt:Nt("dismissed_at",{withTimezone:!0}),acceptedAt:Nt("accepted_at",{withTimezone:!0}),promotedToInstructionId:K("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Cs("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),Ue("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Ue("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Ue("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Tn=yn("instruction_suggestion_events",{id:K("id").primaryKey().defaultRandom(),suggestionId:K("suggestion_id").notNull().references(()=>ro.id,{onDelete:"cascade"}),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:Be("event_type").notNull(),tool:Be("tool"),sessionId:K("session_id"),projectPath:Be("project_path").notNull(),createdAt:Nt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ue("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Ue("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as qs,text as so,integer as Ms,numeric as He,timestamp as io,index as Ls,primaryKey as Bs}from"drizzle-orm/pg-core";var wn=qs("model_pricing",{provider:so("provider").notNull(),modelId:so("model_id").notNull(),inputPerM:He("input_per_m").notNull(),outputPerM:He("output_per_m").notNull(),cacheReadPerM:He("cache_read_per_m").notNull(),cacheWrite5mPerM:He("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:He("cache_write_1h_per_m").notNull(),contextWindow:Ms("context_window"),effectiveFrom:io("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:io("effective_until",{withTimezone:!0}),source:so("source").notNull(),verifiedAt:io("verified_at",{withTimezone:!0})},e=>[Bs({columns:[e.provider,e.modelId,e.effectiveFrom]}),Ls("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Us,text as $,numeric as An,timestamp as zn,uuid as Dn,jsonb as Hs,index as bn}from"drizzle-orm/pg-core";var jn=Us("limit_observations",{id:Dn("id").primaryKey().defaultRandom(),observedAt:zn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:$("provider").notNull(),plan:$("plan").notNull(),limitType:$("limit_type").notNull(),value:An("value").notNull(),unit:$("unit").notNull(),comparator:$("comparator").notNull().default("="),resetsAt:zn("resets_at",{withTimezone:!0}),sourceType:$("source_type").notNull(),sourceUrl:$("source_url"),sourceEvidence:Hs("source_evidence"),confidence:An("confidence").notNull(),userId:Dn("user_id")},e=>[bn("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),bn("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Vs,text as vt,timestamp as Fs,uuid as Gs,jsonb as Js,boolean as Ys,uniqueIndex as Qs}from"drizzle-orm/pg-core";var Rn=Vs("provider_docs_snapshots",{id:Gs("id").primaryKey().defaultRandom(),fetchedAt:Fs("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:vt("provider").notNull(),docUrl:vt("doc_url").notNull(),contentHash:vt("content_hash").notNull(),content:vt("content").notNull(),parseSuccess:Ys("parse_success").notNull(),parseErrors:Js("parse_errors")},e=>[Qs("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Ws,text as ht,numeric as kn,timestamp as En,uuid as Xs,primaryKey as $s,index as Zs}from"drizzle-orm/pg-core";var Sn=Ws("plan_limits_active",{provider:ht("provider").notNull(),plan:ht("plan").notNull(),limitType:ht("limit_type").notNull(),value:kn("value").notNull(),unit:ht("unit").notNull(),effectiveFrom:En("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:En("effective_until",{withTimezone:!0}),confidence:kn("confidence").notNull(),sourceObservationIds:Xs("source_observation_ids").array().notNull()},e=>[$s({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Zs("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as ei,text as ao,timestamp as ti,uuid as Kn,jsonb as oi,index as ni}from"drizzle-orm/pg-core";var Pn=ei("alert_dispatches",{id:Kn("id").primaryKey().defaultRandom(),userId:Kn("user_id").notNull(),alertKey:ao("alert_key").notNull(),severity:ao("severity").notNull(),lastDispatchedAt:ti("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:oi("last_state").notNull(),channel:ao("channel").notNull()},e=>[ni("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{drizzle as Ln}from"drizzle-orm/postgres-js";import Bn from"postgres";var It={};sr(It,{agentJobs:()=>an,agentRuns:()=>_,agentRunsRelations:()=>Ni,alertDispatches:()=>Pn,announcementDeliveries:()=>Do,announcements:()=>zo,apiKeys:()=>ge,apiKeysRelations:()=>si,benchmarks:()=>me,benchmarksRelations:()=>Ri,cliErrorEvents:()=>Wo,cliSetupEvents:()=>Yo,contentBlobs:()=>on,contextSnapshots:()=>H,contextSnapshotsRelations:()=>Pi,evalConversations:()=>Ne,evalConversationsRelations:()=>Ki,evalJobs:()=>xe,evalJobsRelations:()=>Si,evalRuns:()=>B,evalRunsRelations:()=>ji,evalTargets:()=>s,evalTargetsRelations:()=>Di,evals:()=>E,evalsRelations:()=>bi,extensionAuthCodes:()=>cn,harnessReleases:()=>Nn,insightsJobs:()=>dn,instructionEvents:()=>ie,instructionEventsRelations:()=>mi,instructionSuggestionEvents:()=>Tn,instructionSuggestions:()=>ro,instructionUsageEvents:()=>le,instructionUsageEventsRelations:()=>zi,instructionVersions:()=>oe,instructionVersionsRelations:()=>_i,instructions:()=>n,instructionsRelations:()=>ci,launchJobs:()=>he,launchJobsRelations:()=>vi,limitObservations:()=>jn,memories:()=>T,memoriesRelations:()=>pi,modelPricing:()=>wn,notificationPreferences:()=>bo,notifications:()=>to,optimizationRuns:()=>fe,optimizationRunsRelations:()=>Ei,orgInvitations:()=>D,orgInvitationsRelations:()=>di,organizations:()=>u,organizationsRelations:()=>ii,packInstructions:()=>L,packInstructionsRelations:()=>Ai,packs:()=>h,packsRelations:()=>wi,pendingTreatmentExposures:()=>Po,planLimitsActive:()=>Sn,profiles:()=>o,profilesRelations:()=>ri,projectCheckouts:()=>To,projectInstructions:()=>O,projectInstructionsRelations:()=>xi,projects:()=>r,projectsRelations:()=>fi,providerDocsSnapshots:()=>Rn,sessionEvents:()=>re,sessionEventsRelations:()=>hi,sessionInstructions:()=>C,sessionInstructionsRelations:()=>Ii,sessionSendJobs:()=>Mo,sessionTerminalTargets:()=>nt,sessions:()=>d,sessionsRelations:()=>gi,skillSubmissions:()=>fn,teams:()=>x,teamsRelations:()=>ai,treatmentAssignments:()=>b,treatmentAssignmentsRelations:()=>yi,treatmentExposures:()=>j,treatmentExposuresRelations:()=>Ti,triggerEvals:()=>_e,triggerEvalsRelations:()=>ki,userOrganizations:()=>ee,userOrganizationsRelations:()=>ui,userTeams:()=>te,userTeamsRelations:()=>li,workerConnections:()=>Fo});import{relations as i}from"drizzle-orm";var ri=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(H),apiKeys:e(ge)})),si=i(ge,({one:e})=>({profile:e(o,{fields:[ge.userId],references:[o.id]})})),ii=i(u,({many:e})=>({teams:e(x),userOrganizations:e(ee),projects:e(r),invitations:e(D)})),ai=i(x,({one:e,many:t})=>({organization:e(u,{fields:[x.orgId],references:[u.id]}),userTeams:t(te),invitations:t(D)})),di=i(D,({one:e})=>({organization:e(u,{fields:[D.orgId],references:[u.id]}),team:e(x,{fields:[D.teamId],references:[x.id]}),inviter:e(o,{fields:[D.invitedBy],references:[o.id]})})),ui=i(ee,({one:e})=>({organization:e(u,{fields:[ee.orgId],references:[u.id]})})),li=i(te,({one:e})=>({team:e(x,{fields:[te.teamId],references:[x.id]})})),ci=i(n,({one:e,many:t})=>({versions:t(oe),projectInstructions:t(O),events:t(ie),usageEvents:t(le),sessionInstructions:t(C),packInstructions:t(L),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),mi=i(ie,({one:e})=>({instruction:e(n,{fields:[ie.instructionId],references:[n.id]})})),pi=i(T,({one:e,many:t})=>({project:e(r,{fields:[T.projectId],references:[r.id]}),parent:e(T,{fields:[T.parentId],references:[T.id]}),versions:t(T)})),_i=i(oe,({one:e})=>({instruction:e(n,{fields:[oe.instructionId],references:[n.id]})})),fi=i(r,({one:e,many:t})=>({organization:e(u,{fields:[r.orgId],references:[u.id]}),projectInstructions:t(O),sessions:t(d)})),xi=i(O,({one:e})=>({project:e(r,{fields:[O.projectId],references:[r.id]}),instruction:e(n,{fields:[O.instructionId],references:[n.id]})})),gi=i(d,({one:e,many:t})=>({profile:e(o,{fields:[d.userId],references:[o.id]}),project:e(r,{fields:[d.projectId],references:[r.id]}),run:e(_,{fields:[d.runId],references:[_.id]}),events:t(re),sessionInstructions:t(C),treatmentExposures:t(j),contextSnapshots:t(H)})),Ni=i(_,({one:e,many:t})=>({profile:e(o,{fields:[_.userId],references:[o.id]}),organization:e(u,{fields:[_.orgId],references:[u.id]}),project:e(r,{fields:[_.projectId],references:[r.id]}),sessions:t(d),launchJobs:t(he)})),vi=i(he,({one:e})=>({run:e(_,{fields:[he.runId],references:[_.id]})})),hi=i(re,({one:e})=>({session:e(d,{fields:[re.sessionId],references:[d.id]})})),Ii=i(C,({one:e})=>({session:e(d,{fields:[C.sessionId],references:[d.id]}),instruction:e(n,{fields:[C.instructionId],references:[n.id]})})),yi=i(b,({one:e,many:t})=>({owner:e(o,{fields:[b.userId],references:[o.id]}),project:e(r,{fields:[b.projectId],references:[r.id]}),exposures:t(j)})),Ti=i(j,({one:e})=>({session:e(d,{fields:[j.sessionId],references:[d.id]}),owner:e(o,{fields:[j.userId],references:[o.id]}),assignment:e(b,{fields:[j.assignmentId],references:[b.id]})})),wi=i(h,({one:e,many:t})=>({packInstructions:t(L),forkedFrom:e(h,{fields:[h.forkedFromId],references:[h.id]})})),Ai=i(L,({one:e})=>({pack:e(h,{fields:[L.packId],references:[h.id]}),instruction:e(n,{fields:[L.instructionId],references:[n.id]})})),zi=i(le,({one:e})=>({instruction:e(n,{fields:[le.instructionId],references:[n.id]})})),Di=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(E),evalRuns:t(B),benchmarks:t(me),triggerEvals:t(_e),optimizationRuns:t(fe),evalJobs:t(xe),evalConversations:t(Ne)})),bi=i(E,({one:e,many:t})=>({evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]}),runs:t(B)})),ji=i(B,({one:e})=>({eval:e(E,{fields:[B.evalId],references:[E.id]}),evalTarget:e(s,{fields:[B.evalTargetId],references:[s.id]})})),Ri=i(me,({one:e})=>({evalTarget:e(s,{fields:[me.evalTargetId],references:[s.id]})})),ki=i(_e,({one:e})=>({evalTarget:e(s,{fields:[_e.evalTargetId],references:[s.id]})})),Ei=i(fe,({one:e})=>({evalTarget:e(s,{fields:[fe.evalTargetId],references:[s.id]})})),Si=i(xe,({one:e})=>({evalTarget:e(s,{fields:[xe.evalTargetId],references:[s.id]})})),Ki=i(Ne,({one:e})=>({evalTarget:e(s,{fields:[Ne.evalTargetId],references:[s.id]})})),Pi=i(H,({one:e})=>({session:e(d,{fields:[H.sessionId],references:[d.id]}),profile:e(o,{fields:[H.userId],references:[o.id]})}));var Ve=0,On=0,Fe=0,Cn=0;var Oi=0;function uo(){Ve++,Ve>On&&(On=Ve)}m(uo,"trackDbOpStart");function lo(){Ve>0&&Ve--}m(lo,"trackDbOpEnd");function co(){Fe++,Fe>Cn&&(Cn=Fe)}m(co,"trackHeavyDbOpStart");function mo(){Fe>0&&Fe--}m(mo,"trackHeavyDbOpEnd");function qn(){Oi++}m(qn,"recordQueryDeadline");var Tt,At,po=!1,yt;var Mn,zt,wt;function Un(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(Un,"getEnv");function Hn(){if(po)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Tt){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,c=Number(process.env.PG_IDLE_TIMEOUT)||5,p=Number(process.env.PG_KEEP_ALIVE_S)||60;At=Bn(Un("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:c,keep_alive:p,max_lifetime:300,connection:{application_name:e,...l>0?{statement_timeout:l}:{}}}),Tt=Ln(At,{schema:It})}return Tt}m(Hn,"getDb");function Vn(){if(po)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!wt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;zt=Bn(Un("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}}),wt=Ln(zt,{schema:It})}return wt}m(Vn,"getHeavyDb");async function Ci(){if(yt)return yt;po=!0;let e=At,t=Mn,a=zt;return At=void 0,Tt=void 0,Mn=void 0,zt=void 0,wt=void 0,yt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),yt}m(Ci,"closeDb");var qi=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function Fn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&qi.has(a)}m(Fn,"isRetryableConnectError");var Mi=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Gn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Mi.has(a)}m(Gn,"isRetryableResetError");async function Jn(e,t={}){let a=t.attempts??3,l=t.baseMs??100,c;for(let p=0;p<a;p++)try{return await e()}catch(g){c=g;let Ie=Fn(g)||t.retryResets===!0&&Gn(g);if(p===a-1||!Ie)throw g;await new Promise(V=>setTimeout(V,l*2**p))}throw c}m(Jn,"withDbRetry");var Dt=class extends Error{static{m(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function Yn(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(Yn,"queryDeadlineMs");function Li(e,t){let a,l=new Promise((c,p)=>{a=setTimeout(()=>{qn(),p(new Dt(t))},t);let g=a;typeof g.unref=="function"&&g.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}m(Li,"raceWithDeadline");var Qn=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Wn=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function _o(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(c,p,g){if(p==="then"){let V=Reflect.get(c,p,g);return typeof V!="function"?V:(Zn,er)=>{let tr=l?co:uo,or=l?mo:lo;tr();let fo=Jn(()=>new Promise((nr,rr)=>V.call(c,nr,rr)),{retryResets:t});return(a>0?Li(fo,a):fo).finally(or).then(Zn,er)}}let Ie=Reflect.get(c,p,g);return typeof Ie=="function"?(...V)=>_o(Ie.apply(c,V),t,a,l):Ie}})}m(_o,"wrapBuilder");function Xn(e,t=!1){let a=t?co:uo,l=t?mo:lo;a();try{return Promise.resolve(e()).finally(l)}catch(c){throw l(),c}}m(Xn,"gaugeTransaction");var $n=new Proxy({},{get(e,t){let a=Hn(),l=a[t];if(typeof t=="string"&&Qn.has(t)&&typeof l=="function"){let c=Wn.has(t),p=Yn();return(...g)=>_o(l.apply(a,g),c,p)}return t==="transaction"&&typeof l=="function"?(...c)=>Xn(()=>l.apply(a,c)):l}}),Bi=new Proxy({},{get(e,t){let a=Vn(),l=a[t];if(typeof t=="string"&&Qn.has(t)&&typeof l=="function"){let c=Wn.has(t);return(...p)=>_o(l.apply(a,p),c,0,!0)}return t==="transaction"&&typeof l=="function"?(...c)=>Xn(()=>l.apply(a,c),!0):l}});export{o as a,_ as b,d as c,re as d,zo as e,Do as f,bo as g,Hn as h,Ci as i};
1
+ import{a as m,c as sr}from"./chunk-ZLLER3HP.js";import{boolean as No,pgTable as ir,text as Je,timestamp as bt,uuid as vo}from"drizzle-orm/pg-core";import{pgTable as Ge,text as Z,timestamp as ye,jsonb as xo,uuid as F,primaryKey as go}from"drizzle-orm/pg-core";var u=Ge("organizations",{id:F("id").primaryKey().defaultRandom(),name:Z("name").unique().notNull(),slug:Z("slug").unique().notNull(),metadata:xo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ye("updated_at",{withTimezone:!0}).defaultNow()}),x=Ge("teams",{id:F("id").primaryKey().defaultRandom(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Z("name").notNull(),slug:Z("slug").notNull(),metadata:xo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()}),ee=Ge("user_organizations",{userId:F("user_id").notNull(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[go({columns:[e.userId,e.orgId]})]),te=Ge("user_teams",{userId:F("user_id").notNull(),teamId:F("team_id").references(()=>x.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[go({columns:[e.userId,e.teamId]})]);var o=ir("profiles",{id:vo("id").primaryKey(),email:Je("email"),displayName:Je("display_name"),activeOrgId:vo("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:No("is_superadmin").notNull().default(!1),claudeCodePlan:Je("claude_code_plan"),planSource:Je("plan_source").notNull().default("detected"),setupCompletedAt:bt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:No("live_send_skipped").notNull().default(!1),createdAt:bt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:bt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as cr,text as ne,timestamp as Et,jsonb as wo,uuid as We,integer as mr,boolean as pr,index as St}from"drizzle-orm/pg-core";import{boolean as dr,jsonb as ur,pgTable as kt,primaryKey as yo,text as G,timestamp as we,uniqueIndex as Rt,uuid as J}from"drizzle-orm/pg-core";import{sql as lr}from"drizzle-orm";import{pgTable as ho,text as f,timestamp as Te,jsonb as Qe,uuid as P,integer as jt,boolean as ar,uniqueIndex as Io,index as Ye}from"drizzle-orm/pg-core";var n=ho("instructions",{id:P("id").primaryKey().defaultRandom(),name:f("name").notNull(),description:f("description").notNull(),type:f("type").notNull().default("instruction"),scope:f("scope").notNull(),scopeRef:P("scope_ref"),version:f("version").notNull(),content:f("content").notNull(),frontmatter:Qe("frontmatter").notNull(),slots:Qe("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:P("created_by"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).defaultNow(),archived:ar("archived").default(!1),archivedAt:Te("archived_at",{withTimezone:!0}),archivedBy:P("archived_by"),forkedFromId:P("forked_from_id").references(()=>n.id,{onDelete:"set null"}),upstreamVersion:f("upstream_version"),badge:f("badge"),contentHash:f("content_hash"),contextIdentity:f("context_identity"),scanScore:jt("scan_score"),scanFindings:Qe("scan_findings"),popularityScore:jt("popularity_score"),sourceUpdatedAt:Te("source_updated_at",{withTimezone:!0})},e=>[Io("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ye("idx_instructions_scope").on(e.scope,e.scopeRef),Ye("idx_instructions_created_by").on(e.createdBy),Ye("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ye("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),oe=ho("instruction_versions",{id:P("id").primaryKey().defaultRandom(),instructionId:P("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:jt("version_number").notNull(),content:f("content").notNull(),frontmatter:Qe("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:P("created_by"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[Io("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var r=kt("projects",{id:J("id").primaryKey().defaultRandom(),orgId:J("org_id").references(()=>u.id,{onDelete:"cascade"}),name:G("name").notNull(),description:G("description"),githubRepo:G("github_repo"),gitRemoteUrl:G("git_remote_url"),gitRootCommit:G("git_root_commit"),gitRemoteAliases:G("git_remote_aliases").array().notNull().default([]),metadata:ur("metadata"),createdBy:J("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow(),updatedAt:we("updated_at",{withTimezone:!0}).defaultNow()},e=>[Rt("projects_org_name_idx").on(e.orgId,e.name),Rt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(lr`${e.gitRemoteUrl} IS NOT NULL`)]),O=kt("project_instructions",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:we("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[yo({columns:[e.projectId,e.instructionId]})]),To=kt("project_checkouts",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:G("path").notNull(),isWorktree:dr("is_worktree").notNull().default(!1),firstSeen:we("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:we("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[yo({columns:[e.projectId,e.path]}),Rt("project_checkouts_path_unique").on(e.path)]);var _=cr("agent_runs",{id:We("id").primaryKey().defaultRandom(),userId:We("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:We("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:We("project_id").references(()=>r.id,{onDelete:"set null"}),projectPath:ne("project_path"),gitRemote:ne("git_remote"),baseBranch:ne("base_branch"),title:ne("title"),prompt:ne("prompt"),toolSpec:wo("tool_spec").notNull().default([]),autoWorktree:pr("auto_worktree").notNull().default(!0),status:ne("status").notNull().default("pending"),sessionCount:mr("session_count").notNull().default(0),metadata:wo("metadata").notNull().default({}),createdAt:Et("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Et("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Et("completed_at",{withTimezone:!0})},e=>[St("idx_agent_runs_user").on(e.userId),St("idx_agent_runs_org_created").on(e.orgId,e.createdAt),St("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Kt,text as N,timestamp as Ae,jsonb as Y,uuid as z,integer as Xe,uniqueIndex as Ao,index as I}from"drizzle-orm/pg-core";var d=Kt("sessions",{id:z("id").primaryKey().defaultRandom(),userId:z("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:N("external_session_id"),projectId:z("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:z("org_id").references(()=>u.id,{onDelete:"set null"}),tool:N("tool").notNull(),projectPath:N("project_path"),gitBranch:N("git_branch"),startedAt:Ae("started_at",{withTimezone:!0}).notNull(),endedAt:Ae("ended_at",{withTimezone:!0}),eventCount:Xe("event_count").default(0),tokenUsage:Y("token_usage"),analysis:Y("analysis"),analyzedAt:Ae("analyzed_at",{withTimezone:!0}),analyzedEventCount:Xe("analyzed_event_count"),analyzedTurnCount:Xe("analyzed_turn_count"),metadata:Y("metadata").default({}),origin:N("origin").notNull().default("unknown"),runId:z("run_id").references(()=>_.id,{onDelete:"set null"}),model:N("model"),harnessVersion:N("harness_version"),createdAt:Ae("created_at",{withTimezone:!0}).defaultNow()},e=>[I("idx_sessions_user").on(e.userId),I("idx_sessions_tool").on(e.tool),I("idx_sessions_started_at").on(e.startedAt),I("idx_sessions_project").on(e.projectId),I("idx_sessions_org_started_at").on(e.orgId,e.startedAt),I("idx_sessions_run").on(e.runId),Ao("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),re=Kt("session_events",{id:z("id").primaryKey().defaultRandom(),sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:Xe("sequence").notNull(),eventType:N("event_type").notNull(),content:N("content"),toolName:N("tool_name"),toolInput:Y("tool_input"),toolOutput:Y("tool_output"),tokenUsage:Y("token_usage"),model:N("model"),timestamp:Ae("timestamp",{withTimezone:!0}).notNull(),metadata:Y("metadata").default({})},e=>[Ao("session_events_session_sequence_idx").on(e.sessionId,e.sequence),I("idx_session_events_session_id").on(e.sessionId),I("idx_session_events_event_type").on(e.eventType),I("idx_session_events_model").on(e.model)]),C=Kt("session_instructions",{sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:N("link_method").notNull()},e=>[I("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as _r,text as ze,timestamp as zo,uuid as De,integer as fr,index as $e}from"drizzle-orm/pg-core";var y=_r("memories",{id:De("id").primaryKey().defaultRandom(),userId:De("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:De("org_id"),projectId:De("project_id").references(()=>r.id,{onDelete:"set null"}),version:fr("version").notNull().default(1),parentId:De("parent_id").references(()=>y.id,{onDelete:"set null"}),kind:ze("kind").notNull(),title:ze("title").notNull(),body:ze("body").notNull(),source:ze("source").notNull(),status:ze("status").notNull().default("active"),createdAt:zo("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:zo("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[$e("idx_memories_user").on(e.userId),$e("idx_memories_project").on(e.projectId),$e("idx_memories_parent").on(e.parentId),$e("idx_memories_user_status").on(e.userId,e.status)]);import{boolean as xr,date as gr,index as Pt,integer as Nr,jsonb as vr,pgTable as Ot,text as v,timestamp as q,uniqueIndex as hr,uuid as se}from"drizzle-orm/pg-core";var Do=Ot("announcements",{id:se("id").primaryKey().defaultRandom(),version:v("version").notNull().unique(),releaseDate:gr("release_date").notNull(),subject:v("subject").notNull(),htmlBody:v("html_body").notNull(),textBody:v("text_body").notNull(),sections:vr("sections").notNull().default({}),status:v("status").notNull().default("draft"),recipientCount:Nr("recipient_count"),sentAt:q("sent_at",{withTimezone:!0}),sentBy:se("sent_by"),error:v("error"),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Pt("idx_announcements_status").on(e.status),Pt("idx_announcements_created").on(e.createdAt)]),bo=Ot("announcement_deliveries",{id:se("id").primaryKey().defaultRandom(),announcementId:se("announcement_id").notNull(),userId:se("user_id").notNull(),email:v("email").notNull(),status:v("status").notNull().default("pending"),providerId:v("provider_id"),error:v("error"),sentAt:q("sent_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[hr("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Pt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),jo=Ot("notification_preferences",{userId:se("user_id").primaryKey(),productAnnouncements:xr("product_announcements").notNull().default(!0),unsubscribeToken:v("unsubscribe_token").notNull().unique(),unsubscribedAt:q("unsubscribed_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{pgTable as Ir,text as Ct,timestamp as Ze,uuid as et,index as Ro}from"drizzle-orm/pg-core";var D=Ir("org_invitations",{id:et("id").primaryKey().defaultRandom(),orgId:et("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:Ct("email").notNull(),role:Ct("role").notNull().default("member"),teamId:et("team_id").references(()=>x.id,{onDelete:"set null"}),invitedBy:et("invited_by").notNull().references(()=>o.id),token:Ct("token").notNull().unique(),expiresAt:Ze("expires_at",{withTimezone:!0}).notNull(),acceptedAt:Ze("accepted_at",{withTimezone:!0}),revokedAt:Ze("revoked_at",{withTimezone:!0}),createdAt:Ze("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ro("idx_org_invitations_token").on(e.token),Ro("idx_org_invitations_org").on(e.orgId)]);import{pgTable as yr,text as Tr,timestamp as wr,jsonb as Ar,uuid as qt,index as ko}from"drizzle-orm/pg-core";var ie=yr("instruction_events",{id:qt("id").primaryKey().defaultRandom(),instructionId:qt("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:Tr("event_type").notNull(),actorId:qt("actor_id").notNull(),metadata:Ar("metadata"),createdAt:wr("created_at",{withTimezone:!0}).defaultNow()},e=>[ko("idx_instruction_events_instruction").on(e.instructionId),ko("idx_instruction_events_type").on(e.eventType)]);import{pgTable as Eo,text as tt,timestamp as So,uuid as T,integer as Ko,index as ae,unique as zr}from"drizzle-orm/pg-core";var b=Eo("treatment_assignments",{id:T("id").primaryKey().defaultRandom(),userId:T("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:tt("treatment_type").notNull(),treatmentId:T("treatment_id").notNull(),treatmentVersion:Ko("treatment_version").notNull().default(1),projectId:T("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:T("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:tt("method").notNull(),assignedAt:So("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ae("idx_treatment_assignments_user").on(e.userId),ae("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),ae("idx_treatment_assignments_project").on(e.projectId)]),j=Eo("treatment_exposures",{id:T("id").primaryKey().defaultRandom(),sessionId:T("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),userId:T("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:tt("treatment_type").notNull(),treatmentId:T("treatment_id").notNull(),treatmentVersion:Ko("treatment_version").notNull().default(1),assignmentId:T("assignment_id").references(()=>b.id,{onDelete:"set null"}),method:tt("method").notNull(),exposedAt:So("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[zr("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),ae("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),ae("idx_treatment_exposures_user").on(e.userId),ae("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Dr,text as Mt,timestamp as br,uuid as ot,integer as jr,index as Po,uniqueIndex as Rr}from"drizzle-orm/pg-core";var Oo=Dr("pending_treatment_exposures",{id:ot("id").primaryKey().defaultRandom(),userId:ot("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Mt("external_session_id").notNull(),treatmentType:Mt("treatment_type").notNull(),treatmentId:ot("treatment_id").notNull(),treatmentVersion:jr("treatment_version").notNull().default(1),method:Mt("method").notNull().default("injected"),projectId:ot("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:br("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Rr("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Po("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Po("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as kr,text as de,timestamp as Lt,uuid as Bt,jsonb as Er,uniqueIndex as Sr,index as Co}from"drizzle-orm/pg-core";var nt=kr("session_terminal_targets",{id:Bt("id").primaryKey().defaultRandom(),userId:Bt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Bt("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:de("external_session_id"),kind:de("kind").notNull(),target:de("target").notNull(),status:de("status").notNull().default("active"),attachCommand:de("attach_command").notNull(),projectPath:de("project_path"),metadata:Er("metadata").notNull().default({}),lastSeenAt:Lt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Lt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Lt("updated_at",{withTimezone:!0}).defaultNow()},e=>[Sr("idx_session_terminal_targets_user_target").on(e.userId,e.target),Co("idx_session_terminal_targets_session").on(e.sessionId),Co("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as Kr,index as rt,jsonb as qo,pgTable as Pr,text as Q,timestamp as be,uuid as st,integer as Or}from"drizzle-orm/pg-core";var Mo=Pr("session_send_jobs",{id:st("id").primaryKey().defaultRandom(),userId:st("user_id").notNull(),sessionId:st("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:st("terminal_target_id").references(()=>nt.id,{onDelete:"set null"}),target:Q("target").notNull(),message:Q("message").notNull(),submit:Kr("submit").notNull().default(!0),delivery:Q("delivery").notNull().default("live"),status:Q("status").notNull().default("pending"),result:qo("result"),error:Q("error"),attempts:Or("attempts").notNull().default(0),taskKind:Q("task_kind"),payload:qo("payload"),claimedBy:Q("claimed_by"),claimedAt:be("claimed_at",{withTimezone:!0}),leaseExpiresAt:be("lease_expires_at",{withTimezone:!0}),createdAt:be("created_at",{withTimezone:!0}).defaultNow(),updatedAt:be("updated_at",{withTimezone:!0}).defaultNow(),completedAt:be("completed_at",{withTimezone:!0})},e=>[rt("idx_session_send_jobs_user").on(e.userId),rt("idx_session_send_jobs_session").on(e.sessionId),rt("idx_session_send_jobs_status").on(e.status),rt("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Bo,text as W,timestamp as it,jsonb as Uo,uuid as M,integer as Cr,boolean as qr,uniqueIndex as Mr,index as Lo,primaryKey as Lr}from"drizzle-orm/pg-core";var h=Bo("packs",{id:M("id").primaryKey().defaultRandom(),name:W("name").notNull(),description:W("description").notNull(),scope:W("scope").notNull(),scopeRef:M("scope_ref"),version:W("version").notNull().default("1.0.0"),tags:W("tags").array(),badge:W("badge"),metadata:Uo("metadata"),createdBy:M("created_by"),createdAt:it("created_at",{withTimezone:!0}).defaultNow(),updatedAt:it("updated_at",{withTimezone:!0}).defaultNow(),archived:qr("archived").default(!1),archivedAt:it("archived_at",{withTimezone:!0}),archivedBy:M("archived_by"),forkedFromId:M("forked_from_id").references(()=>h.id,{onDelete:"set null"}),upstreamVersion:W("upstream_version")},e=>[Mr("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Lo("idx_packs_scope").on(e.scope,e.scopeRef),Lo("idx_packs_created_by").on(e.createdBy)]),L=Bo("pack_instructions",{packId:M("pack_id").references(()=>h.id,{onDelete:"cascade"}).notNull(),instructionId:M("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Cr("position").notNull().default(0),slotOverrides:Uo("slot_overrides"),addedAt:it("added_at",{withTimezone:!0}).defaultNow(),addedBy:M("added_by")},e=>[Lr({columns:[e.packId,e.instructionId]})]);import{pgTable as Br,text as Ut,timestamp as Ur,jsonb as Hr,uuid as Ht,index as ue}from"drizzle-orm/pg-core";var le=Br("instruction_usage_events",{id:Ht("id").primaryKey().defaultRandom(),instructionId:Ht("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:Ht("user_id").notNull(),surface:Ut("surface").notNull(),action:Ut("action").notNull(),metadata:Hr("metadata"),traceId:Ut("trace_id"),createdAt:Ur("created_at",{withTimezone:!0}).defaultNow()},e=>[ue("idx_usage_events_instruction").on(e.instructionId),ue("idx_usage_events_user").on(e.userId),ue("idx_usage_events_surface").on(e.surface),ue("idx_usage_events_action").on(e.action),ue("idx_usage_events_created_at").on(e.createdAt),ue("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as Vr,text as at,timestamp as Ho,jsonb as Fr,uuid as Vo,index as Vt}from"drizzle-orm/pg-core";var Fo=Vr("worker_connections",{id:Vo("id").primaryKey().defaultRandom(),userId:Vo("user_id").notNull(),workerType:at("worker_type").notNull().default("mcp"),clientName:at("client_name").notNull(),clientVersion:at("client_version"),workerVersion:at("worker_version"),lastHeartbeat:Ho("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Ho("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Fr("metadata")},e=>[Vt("idx_worker_connections_user").on(e.userId),Vt("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),Vt("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Gr,text as dt,timestamp as Jr,jsonb as Yr,uuid as Go,index as Jo}from"drizzle-orm/pg-core";var Yo=Gr("cli_setup_events",{id:Go("id").primaryKey().defaultRandom(),userId:Go("user_id").notNull(),deviceId:dt("device_id").notNull(),event:dt("event").notNull(),cliVersion:dt("cli_version"),os:dt("os"),props:Yr("props").notNull().default({}),createdAt:Jr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Jo("idx_cli_setup_events_user").on(e.userId,e.createdAt),Jo("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Qr,text as X,integer as Wr,boolean as Xr,timestamp as $r,jsonb as Zr,uuid as es,index as Qo}from"drizzle-orm/pg-core";var Wo=Qr("cli_error_events",{id:es("id").primaryKey().defaultRandom(),deviceId:X("device_id"),event:X("event").notNull(),command:X("command"),statusCode:Wr("status_code"),message:X("message"),cliVersion:X("cli_version"),os:X("os"),nodeVersion:X("node_version"),proxied:Xr("proxied"),props:Zr("props").notNull().default({}),createdAt:$r("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Qo("idx_cli_error_events_created").on(e.createdAt),Qo("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as ut,text as R,timestamp as ce,jsonb as w,uuid as A,integer as je,index as k}from"drizzle-orm/pg-core";var s=ut("eval_targets",{id:A("id").primaryKey().defaultRandom(),userId:A("user_id").notNull(),name:R("name").notNull(),type:R("type").notNull(),content:R("content").notNull(),description:R("description").notNull().default(""),metadata:w("metadata").notNull().default({}),version:je("version").notNull().default(1),parentId:A("parent_id").references(()=>s.id,{onDelete:"set null"}),createdAt:ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ce("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("eval_targets_name_user_idx").on(e.name,e.userId),k("idx_eval_targets_user").on(e.userId),k("idx_eval_targets_type").on(e.type),k("idx_eval_targets_parent").on(e.parentId)]),E=ut("evals",{id:A("id").primaryKey().defaultRandom(),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:R("name").notNull(),prompt:R("prompt").notNull(),expectedOutput:R("expected_output").notNull().default(""),files:w("files").notNull().default([]),expectations:w("expectations").notNull().default([]),createdAt:ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ce("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_evals_target").on(e.evalTargetId)]),B=ut("eval_runs",{id:A("id").primaryKey().defaultRandom(),evalId:A("eval_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:je("eval_target_version").notNull(),configuration:R("configuration").notNull(),runNumber:je("run_number").notNull().default(1),iteration:je("iteration").notNull().default(1),status:R("status").notNull().default("completed"),outputs:w("outputs").notNull().default({}),timing:w("timing").notNull().default({}),grading:w("grading").notNull().default({}),comparison:w("comparison"),createdAt:ce("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_eval_runs_eval").on(e.evalId),k("idx_eval_runs_target").on(e.evalTargetId),k("idx_eval_runs_iteration").on(e.evalTargetId,e.iteration)]),me=ut("benchmarks",{id:A("id").primaryKey().defaultRandom(),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:je("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:ce("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_benchmarks_target").on(e.evalTargetId)]);import{pgTable as $o,text as Ft,timestamp as Gt,jsonb as Zo,uuid as pe,integer as Re,index as lt,real as Xo}from"drizzle-orm/pg-core";var _e=$o("trigger_evals",{id:pe("id").primaryKey().defaultRandom(),evalTargetId:pe("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:pe("user_id").notNull(),queries:Zo("queries").notNull().default([]),status:Ft("status").notNull().default("pending_review"),trainIndices:Re("train_indices").array().default([]),testIndices:Re("test_indices").array().default([]),createdAt:Gt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Gt("updated_at",{withTimezone:!0}).defaultNow()},e=>[lt("idx_trigger_evals_target").on(e.evalTargetId),lt("idx_trigger_evals_user").on(e.userId)]),fe=$o("optimization_runs",{id:pe("id").primaryKey().defaultRandom(),evalTargetId:pe("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:pe("user_id").notNull(),type:Ft("type").notNull(),iteration:Re("iteration").notNull(),inputVersion:Re("input_version").notNull(),outputVersion:Re("output_version"),trainScore:Xo("train_score"),testScore:Xo("test_score"),analysis:Zo("analysis").notNull().default({}),status:Ft("status").notNull().default("running"),createdAt:Gt("created_at",{withTimezone:!0}).defaultNow()},e=>[lt("idx_optimization_runs_target").on(e.evalTargetId),lt("idx_optimization_runs_user").on(e.userId)]);import{pgTable as ts,text as U,timestamp as os,jsonb as ke,uuid as Jt,integer as Yt,real as ns,index as Ee,uniqueIndex as en}from"drizzle-orm/pg-core";var H=ts("context_snapshots",{id:Jt("id").primaryKey().defaultRandom(),sessionId:Jt("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:Jt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:Yt("sequence").notNull().default(0),provider:U("provider").notNull(),model:U("model").notNull(),systemPrompt:U("system_prompt").notNull(),injectedInstructions:ke("injected_instructions").notNull().default([]),messagesSummary:ke("messages_summary").notNull(),tools:ke("tools").notNull().default([]),systemHash:U("system_hash").notNull(),requestHash:U("request_hash").notNull().default(""),toolsHash:U("tools_hash"),injectedHash:U("injected_hash"),messagesDelta:ke("messages_delta").default([]),messagesDeltaRef:U("messages_delta_ref"),maxTokens:Yt("max_tokens"),temperature:ns("temperature"),estimatedTokens:Yt("estimated_tokens"),capturedAt:os("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:ke("metadata").default({})},e=>[Ee("idx_context_snapshots_session").on(e.sessionId),Ee("idx_context_snapshots_user").on(e.userId),Ee("idx_context_snapshots_hash").on(e.systemHash),Ee("idx_context_snapshots_request_hash").on(e.requestHash),en("idx_snapshots_session_request").on(e.sessionId,e.requestHash),en("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Ee("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as rs,text as tn,timestamp as ss,jsonb as is,integer as as,index as ds}from"drizzle-orm/pg-core";var on=rs("content_blobs",{hash:tn("hash").primaryKey(),contentType:tn("content_type").notNull(),content:is("content").notNull(),sizeBytes:as("size_bytes").notNull().default(0),createdAt:ss("created_at",{withTimezone:!0}).defaultNow()},e=>[ds("idx_content_blobs_type").on(e.contentType)]);import{pgTable as us,text as ct,timestamp as Se,jsonb as mt,uuid as Qt,index as pt,integer as ls}from"drizzle-orm/pg-core";var xe=us("eval_jobs",{id:Qt("id").primaryKey().defaultRandom(),userId:Qt("user_id").notNull(),evalTargetId:Qt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:ct("status").notNull().default("pending"),config:mt("config").notNull().default({}),progress:mt("progress").notNull().default({}),result:mt("result"),error:ct("error"),attempts:ls("attempts").notNull().default(0),taskKind:ct("task_kind"),payload:mt("payload"),claimedBy:ct("claimed_by"),claimedAt:Se("claimed_at",{withTimezone:!0}),leaseExpiresAt:Se("lease_expires_at",{withTimezone:!0}),createdAt:Se("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Se("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Se("completed_at",{withTimezone:!0})},e=>[pt("idx_eval_jobs_user").on(e.userId),pt("idx_eval_jobs_target").on(e.evalTargetId),pt("idx_eval_jobs_status").on(e.status),pt("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as cs,text as Ke,timestamp as Pe,jsonb as nn,uuid as rn,integer as ms,index as sn}from"drizzle-orm/pg-core";var an=cs("agent_jobs",{id:rn("id").primaryKey().defaultRandom(),userId:rn("user_id").notNull(),taskKind:Ke("task_kind").notNull(),status:Ke("status").notNull().default("pending"),payload:nn("payload").notNull(),dedupeKey:Ke("dedupe_key"),result:nn("result"),error:Ke("error"),attempts:ms("attempts").notNull().default(0),claimedBy:Ke("claimed_by"),claimedAt:Pe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Pe("lease_expires_at",{withTimezone:!0}),createdAt:Pe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Pe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Pe("completed_at",{withTimezone:!0})},e=>[sn("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),sn("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as ps,text as Oe,timestamp as Ce,jsonb as _t,uuid as Wt,index as ft,integer as _s}from"drizzle-orm/pg-core";var dn=ps("insights_jobs",{id:Wt("id").primaryKey().defaultRandom(),userId:Wt("user_id").notNull(),status:Oe("status").notNull().default("pending"),projectPath:Oe("project_path"),projectId:Wt("project_id").references(()=>r.id,{onDelete:"set null"}),config:_t("config").notNull().default({}),progress:_t("progress").notNull().default({}),result:_t("result"),error:Oe("error"),attempts:_s("attempts").notNull().default(0),taskKind:Oe("task_kind"),payload:_t("payload"),claimedBy:Oe("claimed_by"),claimedAt:Ce("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ce("lease_expires_at",{withTimezone:!0}),createdAt:Ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ce("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ce("completed_at",{withTimezone:!0})},e=>[ft("idx_insights_jobs_user").on(e.userId),ft("idx_insights_jobs_status").on(e.status),ft("idx_insights_jobs_pending").on(e.userId,e.status),ft("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as fs,text as Xt,timestamp as xt,uuid as un,index as xs,uniqueIndex as gs}from"drizzle-orm/pg-core";var ge=fs("api_keys",{id:un("id").primaryKey().defaultRandom(),userId:un("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:Xt("name").notNull(),keyHash:Xt("key_hash").notNull(),keyPrefix:Xt("key_prefix").notNull(),lastUsedAt:xt("last_used_at",{withTimezone:!0}),expiresAt:xt("expires_at",{withTimezone:!0}),revokedAt:xt("revoked_at",{withTimezone:!0}),createdAt:xt("created_at",{withTimezone:!0}).defaultNow()},e=>[xs("idx_api_keys_user").on(e.userId),gs("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as Ns,text as $t,timestamp as ln,uuid as vs,index as hs}from"drizzle-orm/pg-core";var cn=Ns("extension_auth_codes",{code:$t("code").primaryKey(),userId:vs("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:$t("editor"),email:$t("email"),expiresAt:ln("expires_at",{withTimezone:!0}).notNull(),createdAt:ln("created_at",{withTimezone:!0}).defaultNow()},e=>[hs("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as Is,text as ys,timestamp as mn,jsonb as Ts,uuid as Zt,index as pn}from"drizzle-orm/pg-core";var Ne=Is("eval_conversations",{id:Zt("id").primaryKey().defaultRandom(),evalTargetId:Zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:Zt("user_id").notNull(),messages:Ts("messages").notNull().default([]),status:ys("status").notNull().default("active"),createdAt:mn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:mn("updated_at",{withTimezone:!0}).defaultNow()},e=>[pn("idx_eval_conversations_target").on(e.evalTargetId),pn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as ws,text as S,timestamp as _n,jsonb as As,uuid as eo}from"drizzle-orm/pg-core";var fn=ws("skill_submissions",{id:eo("id").primaryKey().defaultRandom(),skillId:S("skill_id").notNull(),name:S("name").notNull(),description:S("description").notNull(),category:S("category").notNull(),tools:S("tools").array().notNull(),tags:S("tags").array().default([]),content:S("content").notNull(),status:S("status").notNull().default("pending"),submittedBy:eo("submitted_by").notNull(),reviewedBy:eo("reviewed_by"),reviewNote:S("review_note"),metadata:As("metadata"),createdAt:_n("created_at",{withTimezone:!0}).defaultNow(),updatedAt:_n("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as zs,text as qe,timestamp as xn,jsonb as Ds,uuid as bs,uniqueIndex as js,index as gn}from"drizzle-orm/pg-core";var Nn=zs("harness_releases",{id:bs("id").primaryKey().defaultRandom(),harness:qe("harness").notNull(),version:qe("version").notNull(),publishedAt:xn("published_at",{withTimezone:!0}).notNull(),title:qe("title"),body:qe("body"),categories:Ds("categories").default({}),url:qe("url"),createdAt:xn("created_at",{withTimezone:!0}).defaultNow()},e=>[js("idx_harness_releases_unique").on(e.harness,e.version),gn("idx_harness_releases_harness").on(e.harness),gn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as Rs,text as ve,timestamp as vn,jsonb as ks,uuid as hn,index as In,uniqueIndex as Es}from"drizzle-orm/pg-core";var to=Rs("notifications",{id:hn("id").primaryKey().defaultRandom(),userId:hn("user_id").notNull(),type:ve("type").notNull(),title:ve("title").notNull(),body:ve("body"),url:ve("url"),sourceTable:ve("source_table"),sourceId:ve("source_id"),metadata:ks("metadata").notNull().default({}),readAt:vn("read_at",{withTimezone:!0}),createdAt:vn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[In("idx_notifications_user_created").on(e.userId,e.createdAt),In("idx_notifications_user_unread").on(e.userId),Es("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Ss,text as Me,timestamp as Le,jsonb as oo,uuid as no,index as gt,integer as Ks}from"drizzle-orm/pg-core";var he=Ss("launch_jobs",{id:no("id").primaryKey().defaultRandom(),userId:no("user_id").notNull(),tool:Me("tool").notNull(),status:Me("status").notNull().default("pending"),config:oo("config").notNull().default({}),result:oo("result"),error:Me("error"),attempts:Ks("attempts").notNull().default(0),taskKind:Me("task_kind"),payload:oo("payload"),claimedBy:Me("claimed_by"),claimedAt:Le("claimed_at",{withTimezone:!0}),leaseExpiresAt:Le("lease_expires_at",{withTimezone:!0}),createdAt:Le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Le("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Le("completed_at",{withTimezone:!0}),runId:no("run_id").references(()=>_.id,{onDelete:"set null"})},e=>[gt("idx_launch_jobs_user").on(e.userId),gt("idx_launch_jobs_status").on(e.status),gt("idx_launch_jobs_pending").on(e.userId,e.status),gt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as yn,uuid as K,text as Be,real as Ps,timestamp as Nt,boolean as Os,uniqueIndex as Cs,index as Ue}from"drizzle-orm/pg-core";var ro=yn("instruction_suggestions",{id:K("id").primaryKey().defaultRandom(),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:K("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:Be("project_path").notNull(),projectId:K("project_id").references(()=>r.id,{onDelete:"set null"}),score:Ps("score").notNull(),reason:Be("reason").notNull(),generatedAt:Nt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Os("is_stale").notNull().default(!1),dismissedAt:Nt("dismissed_at",{withTimezone:!0}),acceptedAt:Nt("accepted_at",{withTimezone:!0}),promotedToInstructionId:K("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Cs("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),Ue("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Ue("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Ue("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Tn=yn("instruction_suggestion_events",{id:K("id").primaryKey().defaultRandom(),suggestionId:K("suggestion_id").notNull().references(()=>ro.id,{onDelete:"cascade"}),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:Be("event_type").notNull(),tool:Be("tool"),sessionId:K("session_id"),projectPath:Be("project_path").notNull(),createdAt:Nt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ue("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Ue("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as qs,text as so,integer as Ms,numeric as He,timestamp as io,index as Ls,primaryKey as Bs}from"drizzle-orm/pg-core";var wn=qs("model_pricing",{provider:so("provider").notNull(),modelId:so("model_id").notNull(),inputPerM:He("input_per_m").notNull(),outputPerM:He("output_per_m").notNull(),cacheReadPerM:He("cache_read_per_m").notNull(),cacheWrite5mPerM:He("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:He("cache_write_1h_per_m").notNull(),contextWindow:Ms("context_window"),effectiveFrom:io("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:io("effective_until",{withTimezone:!0}),source:so("source").notNull(),verifiedAt:io("verified_at",{withTimezone:!0})},e=>[Bs({columns:[e.provider,e.modelId,e.effectiveFrom]}),Ls("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Us,text as $,numeric as An,timestamp as zn,uuid as Dn,jsonb as Hs,index as bn}from"drizzle-orm/pg-core";var jn=Us("limit_observations",{id:Dn("id").primaryKey().defaultRandom(),observedAt:zn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:$("provider").notNull(),plan:$("plan").notNull(),limitType:$("limit_type").notNull(),value:An("value").notNull(),unit:$("unit").notNull(),comparator:$("comparator").notNull().default("="),resetsAt:zn("resets_at",{withTimezone:!0}),sourceType:$("source_type").notNull(),sourceUrl:$("source_url"),sourceEvidence:Hs("source_evidence"),confidence:An("confidence").notNull(),userId:Dn("user_id")},e=>[bn("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),bn("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Vs,text as vt,timestamp as Fs,uuid as Gs,jsonb as Js,boolean as Ys,uniqueIndex as Qs}from"drizzle-orm/pg-core";var Rn=Vs("provider_docs_snapshots",{id:Gs("id").primaryKey().defaultRandom(),fetchedAt:Fs("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:vt("provider").notNull(),docUrl:vt("doc_url").notNull(),contentHash:vt("content_hash").notNull(),content:vt("content").notNull(),parseSuccess:Ys("parse_success").notNull(),parseErrors:Js("parse_errors")},e=>[Qs("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Ws,text as ht,numeric as kn,timestamp as En,uuid as Xs,primaryKey as $s,index as Zs}from"drizzle-orm/pg-core";var Sn=Ws("plan_limits_active",{provider:ht("provider").notNull(),plan:ht("plan").notNull(),limitType:ht("limit_type").notNull(),value:kn("value").notNull(),unit:ht("unit").notNull(),effectiveFrom:En("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:En("effective_until",{withTimezone:!0}),confidence:kn("confidence").notNull(),sourceObservationIds:Xs("source_observation_ids").array().notNull()},e=>[$s({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),Zs("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as ei,text as ao,timestamp as ti,uuid as Kn,jsonb as oi,index as ni}from"drizzle-orm/pg-core";var Pn=ei("alert_dispatches",{id:Kn("id").primaryKey().defaultRandom(),userId:Kn("user_id").notNull(),alertKey:ao("alert_key").notNull(),severity:ao("severity").notNull(),lastDispatchedAt:ti("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:oi("last_state").notNull(),channel:ao("channel").notNull()},e=>[ni("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{drizzle as Ln}from"drizzle-orm/postgres-js";import Bn from"postgres";var It={};sr(It,{agentJobs:()=>an,agentRuns:()=>_,agentRunsRelations:()=>Ni,alertDispatches:()=>Pn,announcementDeliveries:()=>bo,announcements:()=>Do,apiKeys:()=>ge,apiKeysRelations:()=>si,benchmarks:()=>me,benchmarksRelations:()=>Ri,cliErrorEvents:()=>Wo,cliSetupEvents:()=>Yo,contentBlobs:()=>on,contextSnapshots:()=>H,contextSnapshotsRelations:()=>Pi,evalConversations:()=>Ne,evalConversationsRelations:()=>Ki,evalJobs:()=>xe,evalJobsRelations:()=>Si,evalRuns:()=>B,evalRunsRelations:()=>ji,evalTargets:()=>s,evalTargetsRelations:()=>Di,evals:()=>E,evalsRelations:()=>bi,extensionAuthCodes:()=>cn,harnessReleases:()=>Nn,insightsJobs:()=>dn,instructionEvents:()=>ie,instructionEventsRelations:()=>mi,instructionSuggestionEvents:()=>Tn,instructionSuggestions:()=>ro,instructionUsageEvents:()=>le,instructionUsageEventsRelations:()=>zi,instructionVersions:()=>oe,instructionVersionsRelations:()=>_i,instructions:()=>n,instructionsRelations:()=>ci,launchJobs:()=>he,launchJobsRelations:()=>vi,limitObservations:()=>jn,memories:()=>y,memoriesRelations:()=>pi,modelPricing:()=>wn,notificationPreferences:()=>jo,notifications:()=>to,optimizationRuns:()=>fe,optimizationRunsRelations:()=>Ei,orgInvitations:()=>D,orgInvitationsRelations:()=>di,organizations:()=>u,organizationsRelations:()=>ii,packInstructions:()=>L,packInstructionsRelations:()=>Ai,packs:()=>h,packsRelations:()=>wi,pendingTreatmentExposures:()=>Oo,planLimitsActive:()=>Sn,profiles:()=>o,profilesRelations:()=>ri,projectCheckouts:()=>To,projectInstructions:()=>O,projectInstructionsRelations:()=>xi,projects:()=>r,projectsRelations:()=>fi,providerDocsSnapshots:()=>Rn,sessionEvents:()=>re,sessionEventsRelations:()=>hi,sessionInstructions:()=>C,sessionInstructionsRelations:()=>Ii,sessionSendJobs:()=>Mo,sessionTerminalTargets:()=>nt,sessions:()=>d,sessionsRelations:()=>gi,skillSubmissions:()=>fn,teams:()=>x,teamsRelations:()=>ai,treatmentAssignments:()=>b,treatmentAssignmentsRelations:()=>yi,treatmentExposures:()=>j,treatmentExposuresRelations:()=>Ti,triggerEvals:()=>_e,triggerEvalsRelations:()=>ki,userOrganizations:()=>ee,userOrganizationsRelations:()=>ui,userTeams:()=>te,userTeamsRelations:()=>li,workerConnections:()=>Fo});import{relations as i}from"drizzle-orm";var ri=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(H),apiKeys:e(ge)})),si=i(ge,({one:e})=>({profile:e(o,{fields:[ge.userId],references:[o.id]})})),ii=i(u,({many:e})=>({teams:e(x),userOrganizations:e(ee),projects:e(r),invitations:e(D)})),ai=i(x,({one:e,many:t})=>({organization:e(u,{fields:[x.orgId],references:[u.id]}),userTeams:t(te),invitations:t(D)})),di=i(D,({one:e})=>({organization:e(u,{fields:[D.orgId],references:[u.id]}),team:e(x,{fields:[D.teamId],references:[x.id]}),inviter:e(o,{fields:[D.invitedBy],references:[o.id]})})),ui=i(ee,({one:e})=>({organization:e(u,{fields:[ee.orgId],references:[u.id]})})),li=i(te,({one:e})=>({team:e(x,{fields:[te.teamId],references:[x.id]})})),ci=i(n,({one:e,many:t})=>({versions:t(oe),projectInstructions:t(O),events:t(ie),usageEvents:t(le),sessionInstructions:t(C),packInstructions:t(L),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),mi=i(ie,({one:e})=>({instruction:e(n,{fields:[ie.instructionId],references:[n.id]})})),pi=i(y,({one:e,many:t})=>({project:e(r,{fields:[y.projectId],references:[r.id]}),parent:e(y,{fields:[y.parentId],references:[y.id]}),versions:t(y)})),_i=i(oe,({one:e})=>({instruction:e(n,{fields:[oe.instructionId],references:[n.id]})})),fi=i(r,({one:e,many:t})=>({organization:e(u,{fields:[r.orgId],references:[u.id]}),projectInstructions:t(O),sessions:t(d)})),xi=i(O,({one:e})=>({project:e(r,{fields:[O.projectId],references:[r.id]}),instruction:e(n,{fields:[O.instructionId],references:[n.id]})})),gi=i(d,({one:e,many:t})=>({profile:e(o,{fields:[d.userId],references:[o.id]}),project:e(r,{fields:[d.projectId],references:[r.id]}),run:e(_,{fields:[d.runId],references:[_.id]}),events:t(re),sessionInstructions:t(C),treatmentExposures:t(j),contextSnapshots:t(H)})),Ni=i(_,({one:e,many:t})=>({profile:e(o,{fields:[_.userId],references:[o.id]}),organization:e(u,{fields:[_.orgId],references:[u.id]}),project:e(r,{fields:[_.projectId],references:[r.id]}),sessions:t(d),launchJobs:t(he)})),vi=i(he,({one:e})=>({run:e(_,{fields:[he.runId],references:[_.id]})})),hi=i(re,({one:e})=>({session:e(d,{fields:[re.sessionId],references:[d.id]})})),Ii=i(C,({one:e})=>({session:e(d,{fields:[C.sessionId],references:[d.id]}),instruction:e(n,{fields:[C.instructionId],references:[n.id]})})),yi=i(b,({one:e,many:t})=>({owner:e(o,{fields:[b.userId],references:[o.id]}),project:e(r,{fields:[b.projectId],references:[r.id]}),exposures:t(j)})),Ti=i(j,({one:e})=>({session:e(d,{fields:[j.sessionId],references:[d.id]}),owner:e(o,{fields:[j.userId],references:[o.id]}),assignment:e(b,{fields:[j.assignmentId],references:[b.id]})})),wi=i(h,({one:e,many:t})=>({packInstructions:t(L),forkedFrom:e(h,{fields:[h.forkedFromId],references:[h.id]})})),Ai=i(L,({one:e})=>({pack:e(h,{fields:[L.packId],references:[h.id]}),instruction:e(n,{fields:[L.instructionId],references:[n.id]})})),zi=i(le,({one:e})=>({instruction:e(n,{fields:[le.instructionId],references:[n.id]})})),Di=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(E),evalRuns:t(B),benchmarks:t(me),triggerEvals:t(_e),optimizationRuns:t(fe),evalJobs:t(xe),evalConversations:t(Ne)})),bi=i(E,({one:e,many:t})=>({evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]}),runs:t(B)})),ji=i(B,({one:e})=>({eval:e(E,{fields:[B.evalId],references:[E.id]}),evalTarget:e(s,{fields:[B.evalTargetId],references:[s.id]})})),Ri=i(me,({one:e})=>({evalTarget:e(s,{fields:[me.evalTargetId],references:[s.id]})})),ki=i(_e,({one:e})=>({evalTarget:e(s,{fields:[_e.evalTargetId],references:[s.id]})})),Ei=i(fe,({one:e})=>({evalTarget:e(s,{fields:[fe.evalTargetId],references:[s.id]})})),Si=i(xe,({one:e})=>({evalTarget:e(s,{fields:[xe.evalTargetId],references:[s.id]})})),Ki=i(Ne,({one:e})=>({evalTarget:e(s,{fields:[Ne.evalTargetId],references:[s.id]})})),Pi=i(H,({one:e})=>({session:e(d,{fields:[H.sessionId],references:[d.id]}),profile:e(o,{fields:[H.userId],references:[o.id]})}));var Ve=0,On=0,Fe=0,Cn=0;var Oi=0;function uo(){Ve++,Ve>On&&(On=Ve)}m(uo,"trackDbOpStart");function lo(){Ve>0&&Ve--}m(lo,"trackDbOpEnd");function co(){Fe++,Fe>Cn&&(Cn=Fe)}m(co,"trackHeavyDbOpStart");function mo(){Fe>0&&Fe--}m(mo,"trackHeavyDbOpEnd");function qn(){Oi++}m(qn,"recordQueryDeadline");var Tt,At,po=!1,yt;var Mn,zt,wt;function Un(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(Un,"getEnv");function Hn(){if(po)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Tt){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,c=Number(process.env.PG_IDLE_TIMEOUT)||5,p=Number(process.env.PG_KEEP_ALIVE_S)||60;At=Bn(Un("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:a,idle_timeout:c,keep_alive:p,max_lifetime:300,connection:{application_name:e,...l>0?{statement_timeout:l}:{}}}),Tt=Ln(At,{schema:It})}return Tt}m(Hn,"getDb");function Vn(){if(po)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!wt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;zt=Bn(Un("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}}),wt=Ln(zt,{schema:It})}return wt}m(Vn,"getHeavyDb");async function Ci(){if(yt)return yt;po=!0;let e=At,t=Mn,a=zt;return At=void 0,Tt=void 0,Mn=void 0,zt=void 0,wt=void 0,yt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),yt}m(Ci,"closeDb");var qi=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function Fn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&qi.has(a)}m(Fn,"isRetryableConnectError");var Mi=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Gn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Mi.has(a)}m(Gn,"isRetryableResetError");async function Jn(e,t={}){let a=t.attempts??3,l=t.baseMs??100,c;for(let p=0;p<a;p++)try{return await e()}catch(g){c=g;let Ie=Fn(g)||t.retryResets===!0&&Gn(g);if(p===a-1||!Ie)throw g;await new Promise(V=>setTimeout(V,l*2**p))}throw c}m(Jn,"withDbRetry");var Dt=class extends Error{static{m(this,"QueryDeadlineError")}code="QUERY_DEADLINE";constructor(t){super(`Query exceeded the client-side deadline of ${t}ms \u2014 the DB pool is likely saturated (acquire-wait) or holding a dead socket; failing fast to avoid pinning the caller. See client.ts.`),this.name="QueryDeadlineError"}};function Yn(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(Yn,"queryDeadlineMs");function Li(e,t){let a,l=new Promise((c,p)=>{a=setTimeout(()=>{qn(),p(new Dt(t))},t);let g=a;typeof g.unref=="function"&&g.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}m(Li,"raceWithDeadline");var Qn=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Wn=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function _o(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(c,p,g){if(p==="then"){let V=Reflect.get(c,p,g);return typeof V!="function"?V:(Zn,er)=>{let tr=l?co:uo,or=l?mo:lo;tr();let fo=Jn(()=>new Promise((nr,rr)=>V.call(c,nr,rr)),{retryResets:t});return(a>0?Li(fo,a):fo).finally(or).then(Zn,er)}}let Ie=Reflect.get(c,p,g);return typeof Ie=="function"?(...V)=>_o(Ie.apply(c,V),t,a,l):Ie}})}m(_o,"wrapBuilder");function Xn(e,t=!1){let a=t?co:uo,l=t?mo:lo;a();try{return Promise.resolve(e()).finally(l)}catch(c){throw l(),c}}m(Xn,"gaugeTransaction");var $n=new Proxy({},{get(e,t){let a=Hn(),l=a[t];if(typeof t=="string"&&Qn.has(t)&&typeof l=="function"){let c=Wn.has(t),p=Yn();return(...g)=>_o(l.apply(a,g),c,p)}return t==="transaction"&&typeof l=="function"?(...c)=>Xn(()=>l.apply(a,c)):l}}),Bi=new Proxy({},{get(e,t){let a=Vn(),l=a[t];if(typeof t=="string"&&Qn.has(t)&&typeof l=="function"){let c=Wn.has(t);return(...p)=>_o(l.apply(a,p),c,0,!0)}return t==="transaction"&&typeof l=="function"?(...c)=>Xn(()=>l.apply(a,c),!0):l}});export{o as a,_ as b,d as c,re as d,y as e,Do as f,bo as g,jo as h,Hn as i,Ci as j};
@@ -1,4 +1,4 @@
1
- import{f as d}from"./chunk-RTWRHIKY.js";import{c as e,d as o,h as y}from"./chunk-6GGVD6RZ.js";import{a as g}from"./chunk-ZLLER3HP.js";import{eq as c,asc as P,sql as R}from"drizzle-orm";var T=1800*1e3,I=300*1e3,h=10,D=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
1
+ import{f as d}from"./chunk-RTWRHIKY.js";import{c as e,d as o,i as y}from"./chunk-DIUZLGZW.js";import{a as g}from"./chunk-ZLLER3HP.js";import{eq as c,asc as P,sql as R}from"drizzle-orm";var T=1800*1e3,I=300*1e3,h=10,D=`Given these messages from an AI coding session, write a 1-2 sentence summary of what the user is trying to accomplish. Focus on the goal, not the steps. No preamble.
2
2
 
3
3
  Return strict JSON in the form: {"goalSummary": "..."}`;async function b(t,a={}){let n=a.db??y(),f=a.llm??d,r=a.now??Date.now,[i]=await n.select().from(e).where(c(e.id,t.sessionId)).limit(1);if(!i)return{skipped:"not_found"};let w=(await n.execute(R`SELECT MAX(timestamp) AS last_at FROM session_events WHERE session_id = ${t.sessionId}`))?.[0]?.last_at??i.startedAt,_=new Date(w).getTime();if(r()-_>T)return{skipped:"stale"};let m=i.analysis??{},p=m.goalSummaryAt?new Date(m.goalSummaryAt).getTime():0;if(p&&r()-p<I)return{skipped:"recent"};let u=(await n.select().from(o).where(c(o.sessionId,t.sessionId)).orderBy(P(o.timestamp)).limit(h*2)).filter(s=>s.content&&(s.eventType==="user_message"||s.eventType==="assistant_response")).map(s=>`${s.eventType==="user_message"?"USER":"ASSISTANT"}: ${s.content}`).join(`
4
4
 
@@ -1,4 +1,4 @@
1
- import{a as S,b as z,c as T}from"./chunk-QFVGUZDO.js";import{c as A,d as C,f as b}from"./chunk-RTWRHIKY.js";import{a as O}from"./chunk-ZL4MZMUK.js";import{a as j}from"./chunk-5RBLIVBF.js";import{e as _,f as I,h as u}from"./chunk-H2ORWIEY.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(`
1
+ import{a as S,b as z,c as T}from"./chunk-QFVGUZDO.js";import{c as A,d as C,f as b}from"./chunk-RTWRHIKY.js";import{a as j}from"./chunk-5RBLIVBF.js";import{a as O}from"./chunk-ZL4MZMUK.js";import{e as _,f as I,h as u}from"./chunk-H2ORWIEY.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
2
  ---
3
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
4
  ## What Works
@@ -0,0 +1 @@
1
+ import{c as M}from"./chunk-TIOKY2IA.js";import{a as h}from"./chunk-32EEBARV.js";import{a as b}from"./chunk-MUURX7WZ.js";import{b as I}from"./chunk-W2MOTOQE.js";import{a as y}from"./chunk-CZJ6FRZ4.js";import{a as S}from"./chunk-RSKQRVPJ.js";import{a as A}from"./chunk-L2WTWIOS.js";import{a as H}from"./chunk-KAF3CYRW.js";import{a as k}from"./chunk-UF6US7VU.js";import{a as _}from"./chunk-DPFNJZUO.js";import{b as R}from"./chunk-D3X7FLC7.js";import{a as T}from"./chunk-2BBWRDXU.js";import{b as w}from"./chunk-5RBLIVBF.js";import{a as E}from"./chunk-NEACEHQD.js";import{b as f,e as v,f as p}from"./chunk-H2ORWIEY.js";import{a as s}from"./chunk-ZLLER3HP.js";var C={process_eval:h,process_insights:b,process_launch:I,process_send_message:S,process_conversation:E,process_session_goal:A,distill_memories:R,process_announcement:T,process_run_cleanup:y,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:H},L=Object.keys(C),x=new Set(["process_session_goal","process_announcement","process_run_cleanup","distill_memories"]);function O(e=process.env){return e.DATABASE_URL?L:L.filter(n=>!x.has(n))}s(O,"availableCapabilities");var W=3e4,$=3e4,B=3e4,N=250,P=5e3,F=`thin-agent-${process.pid}`,g=null;function J(e,n,r,l){let a=s(t=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:F,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:t,metadata:{capabilities:e,mode:"thin-agent"}}).then(c=>{let m=c?.advisory;m&&m.message!==g?(g=m.message,o(r,{event:"worker_advisory",code:m.code,message:m.message})):m||(g=null)}).catch(c=>{o(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})})},"send");a("alive");let d=setInterval(()=>a("alive"),B);n.addEventListener("abort",()=>{clearInterval(d),a("shutting_down")},{once:!0})}s(J,"startPresenceHeartbeat");function o(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(o,"structuredLog");function D(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",a),r(!0)},e),a=s(()=>{clearTimeout(l),n.removeEventListener("abort",a),r(!1)},"onAbort");n.addEventListener("abort",a,{once:!0})})}s(D,"abortableSleep");async function U(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(U,"pollForWork");function K(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(K,"makeHelpers");async function G(e,n,r){let l=C[e.kind],a=Date.now();if(o(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let t=`unknown kind: ${e.kind}`;o(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:t}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:t,terminal:!0}).catch(()=>{});return}let d=setInterval(()=>{o(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(t=>{o(r,{event:"heartbeat_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})},n);try{let t=K(e.attempts,r),c=await l(e.payload,t)??{};clearInterval(d),o(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-a}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:c})}catch(t){clearInterval(d);let c=w(t),m=t instanceof Error?t.message:String(t);o(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-a,terminal:c,error:m}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:m,terminal:c}).catch(i=>{o(r,{event:"fail_post_error",jobId:e.id,error:i instanceof Error?i.message:String(i)})})}}s(G,"runOne");async function ce(e){let n=e.log??(()=>{}),r=e.pollWaitMs??W,l=e.heartbeatIntervalMs??$,a=e.capabilities??O(),d=N;o(n,{event:"agent_start",capabilities:a,pollWaitMs:r,heartbeatIntervalMs:l}),J(a,e.signal,n,e.version),M({signal:e.signal,log:n}).catch(i=>{o(n,{event:"tt_heartbeat_fatal",error:i instanceof Error?i.message:String(i)})});let t=5*6e4,c=0,m=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let i=Date.now();if(i-c<t)return!1;c=i;let u=e.readInstalledVersion();return!!(u&&u!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(m()){o(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let i=null;try{i=await U(a,r)}catch(u){let V=u instanceof f?u.statusCode:void 0;if(o(n,{event:"poll_error",status:V,error:u instanceof Error?u.message:String(u)}),!await D(d,e.signal))break;d=Math.min(d*2,P);continue}if(!i){if(o(n,{event:"poll_204"}),!await D(d,e.signal))break;d=Math.min(d*2,P);continue}d=N,await G(i,l,n)}o(n,{event:"agent_stop"})}s(ce,"runAgentLoop");export{C as a,L as b,O as c,U as d,ce as e};
@@ -1,3 +1,3 @@
1
- import{e as N}from"../../chunk-D7D523MK.js";import"../../chunk-TIOKY2IA.js";import"../../chunk-TQMG647B.js";import"../../chunk-W2MOTOQE.js";import"../../chunk-DL6OUTPW.js";import"../../chunk-6QKI756T.js";import"../../chunk-RSKQRVPJ.js";import"../../chunk-6FG5HXM3.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-KAF3CYRW.js";import"../../chunk-UF6US7VU.js";import"../../chunk-DPFNJZUO.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-XMJT7BXQ.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7TGRFVZ.js";import{i as f}from"../../chunk-6GGVD6RZ.js";import"../../chunk-NEACEHQD.js";import"../../chunk-32EEBARV.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-2TC6WCUT.js";import"../../chunk-6V4WM73L.js";import"../../chunk-HS7X43XE.js";import"../../chunk-TDD7IOV2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-DSO2U4Y6.js";import"../../chunk-CADKBP3D.js";import"../../chunk-MGHFDHHM.js";import{a as _}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import{e as R,l as w}from"../../chunk-O6C2UGBY.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as z,context as Q}from"@opentelemetry/api";import{NodeSDK as A}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as I}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as L,ConsoleSpanExporter as C,SimpleSpanProcessor as D}from"@opentelemetry/sdk-trace-node";import{Resource as M}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as V,ATTR_SERVICE_VERSION as q}from"@opentelemetry/semantic-conventions";function b(t){if(!t)return{};let r={};for(let n of t.split(",")){let o=n.indexOf("=");if(o===-1)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();s&&(r[s]=i)}return r}e(b,"parseOtlpHeaders");var c=null;function g(){return process.env.TELEMETRY_ENABLED!=="false"}e(g,"isTelemetryEnabled");function E(t){if(!g()||c!==null)return"off";let r=new M({[V]:t.serviceName,[q]:t.serviceVersion??"0.1.0"}),n=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,o,s;if(n){let i=b(process.env.OTEL_EXPORTER_OTLP_HEADERS),u=new I({url:`${n}/v1/traces`,headers:i});s=new L(u),o="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")s=void 0,o="silent";else{let i=new C;s=new D(i),o="console"}return c=new A({resource:r,spanProcessors:s?[s]:[]}),c.start(),o}e(E,"initTelemetry");async function d(){c&&(await c.shutdown(),c=null)}e(d,"shutdownTelemetry");import{SpanKind as ae,SpanStatusCode as ce}from"@opentelemetry/api";import{trace as de,context as me}from"@opentelemetry/api";import*as l from"@sentry/node";var h=!1;function y(t){if(h)return!1;let r=process.env.SENTRY_DSN;return r?(l.init({dsn:r,serverName:t.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),h=!0,!0):!1}e(y,"initSentry");async function m(t){h&&await l.flush(t)}e(m,"flushSentry");import{existsSync as G,mkdirSync as U,readFileSync as v,unlinkSync as k,writeFileSync as O}from"node:fs";import{dirname as X,join as P}from"node:path";import{execFileSync as $}from"node:child_process";var a=P(w(),"evals-agent.lock");function j(t){try{return process.kill(t,0),!0}catch(r){return r.code==="EPERM"}}e(j,"pidAlive");function B(t){if(!j(t))return!1;try{let r=$("ps",["-p",String(t),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(r)}catch{return!0}}e(B,"isLiveAgent");function H(){try{U(X(a),{recursive:!0})}catch{}for(let t=0;t<2;t++)try{return O(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(r){if(r.code!=="EEXIST")throw r;let n=0;try{n=Number(v(a,"utf-8").trim())}catch{}if(n&&n!==process.pid&&B(n))return{ok:!1,holder:n};try{k(a)}catch{}}try{O(a,String(process.pid))}catch{}return{ok:!0}}e(H,"acquireAgentLock");function S(){try{G(a)&&Number(v(a,"utf-8").trim())===process.pid&&k(a)}catch{}}e(S,"releaseAgentLock");var T=class t extends _{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(t),this.requireAuth();let r=H();if(!r.ok){this.log(`Another rulemetric evals agent is already running (pid ${r.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",y({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let o=E({serviceName:"rulemetric-agent"});o==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):o==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!R()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
1
+ import{e as N}from"../../chunk-NLBZ4FX2.js";import"../../chunk-TIOKY2IA.js";import"../../chunk-32EEBARV.js";import"../../chunk-MUURX7WZ.js";import"../../chunk-W2MOTOQE.js";import"../../chunk-CZJ6FRZ4.js";import"../../chunk-6QKI756T.js";import"../../chunk-RSKQRVPJ.js";import"../../chunk-L2WTWIOS.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-KAF3CYRW.js";import"../../chunk-UF6US7VU.js";import"../../chunk-DPFNJZUO.js";import"../../chunk-D3X7FLC7.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-2BBWRDXU.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7TGRFVZ.js";import{j as f}from"../../chunk-DIUZLGZW.js";import"../../chunk-NEACEHQD.js";import"../../chunk-2TC6WCUT.js";import"../../chunk-6V4WM73L.js";import"../../chunk-HS7X43XE.js";import"../../chunk-TDD7IOV2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-DSO2U4Y6.js";import"../../chunk-CADKBP3D.js";import"../../chunk-MGHFDHHM.js";import{a as _}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import{e as R,l as w}from"../../chunk-O6C2UGBY.js";import{a as e}from"../../chunk-ZLLER3HP.js";import{trace as z,context as Q}from"@opentelemetry/api";import{NodeSDK as A}from"@opentelemetry/sdk-node";import{OTLPTraceExporter as I}from"@opentelemetry/exporter-trace-otlp-http";import{BatchSpanProcessor as L,ConsoleSpanExporter as C,SimpleSpanProcessor as D}from"@opentelemetry/sdk-trace-node";import{Resource as M}from"@opentelemetry/resources";import{ATTR_SERVICE_NAME as V,ATTR_SERVICE_VERSION as q}from"@opentelemetry/semantic-conventions";function b(t){if(!t)return{};let r={};for(let n of t.split(",")){let o=n.indexOf("=");if(o===-1)continue;let s=n.slice(0,o).trim(),i=n.slice(o+1).trim();s&&(r[s]=i)}return r}e(b,"parseOtlpHeaders");var c=null;function g(){return process.env.TELEMETRY_ENABLED!=="false"}e(g,"isTelemetryEnabled");function E(t){if(!g()||c!==null)return"off";let r=new M({[V]:t.serviceName,[q]:t.serviceVersion??"0.1.0"}),n=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,o,s;if(n){let i=b(process.env.OTEL_EXPORTER_OTLP_HEADERS),u=new I({url:`${n}/v1/traces`,headers:i});s=new L(u),o="otlp"}else if(process.env.OTEL_SPAN_EXPORT==="none")s=void 0,o="silent";else{let i=new C;s=new D(i),o="console"}return c=new A({resource:r,spanProcessors:s?[s]:[]}),c.start(),o}e(E,"initTelemetry");async function d(){c&&(await c.shutdown(),c=null)}e(d,"shutdownTelemetry");import{SpanKind as ae,SpanStatusCode as ce}from"@opentelemetry/api";import{trace as de,context as me}from"@opentelemetry/api";import*as l from"@sentry/node";var h=!1;function y(t){if(h)return!1;let r=process.env.SENTRY_DSN;return r?(l.init({dsn:r,serverName:t.serviceName,environment:process.env.NODE_ENV??"development",tracesSampleRate:0}),h=!0,!0):!1}e(y,"initSentry");async function m(t){h&&await l.flush(t)}e(m,"flushSentry");import{existsSync as G,mkdirSync as U,readFileSync as v,unlinkSync as k,writeFileSync as O}from"node:fs";import{dirname as X,join as P}from"node:path";import{execFileSync as $}from"node:child_process";var a=P(w(),"evals-agent.lock");function j(t){try{return process.kill(t,0),!0}catch(r){return r.code==="EPERM"}}e(j,"pidAlive");function B(t){if(!j(t))return!1;try{let r=$("ps",["-p",String(t),"-o","command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return/run\.js\s+evals\s+agent|evals\s+agent/.test(r)}catch{return!0}}e(B,"isLiveAgent");function H(){try{U(X(a),{recursive:!0})}catch{}for(let t=0;t<2;t++)try{return O(a,String(process.pid),{flag:"wx"}),{ok:!0}}catch(r){if(r.code!=="EEXIST")throw r;let n=0;try{n=Number(v(a,"utf-8").trim())}catch{}if(n&&n!==process.pid&&B(n))return{ok:!1,holder:n};try{k(a)}catch{}}try{O(a,String(process.pid))}catch{}return{ok:!0}}e(H,"acquireAgentLock");function S(){try{G(a)&&Number(v(a,"utf-8").trim())===process.pid&&k(a)}catch{}}e(S,"releaseAgentLock");var T=class t extends _{static{e(this,"EvalAgentCommand")}static description="The worker daemon: long-polls /api/work/next, claims jobs, and runs them locally. Installed as a launchd service by `rulemetric service install`.";static examples=["<%= config.bin %> evals agent"];async run(){await this.parse(t),this.requireAuth();let r=H();if(!r.ok){this.log(`Another rulemetric evals agent is already running (pid ${r.holder}). Refusing to start a second instance.`);return}process.env.PG_APPLICATION_NAME||="rulemetric-agent",y({serviceName:"rulemetric-agent"})&&this.log("[sentry] error capture enabled");let o=E({serviceName:"rulemetric-agent"});o==="otlp"?this.log(`[otel] traces exporting to ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}`):o==="console"?this.log("[otel] cron spans printing to stdout (set OTEL_EXPORTER_OTLP_ENDPOINT to ship to a backend)"):this.log("[otel] disabled (TELEMETRY_ENABLED=false)"),!R()&&!process.env.RULEMETRIC_API_KEY&&this.error("No auth token found. Run `rulemetric auth login` first."),this.log("Starting thin agent (Phase 4b parallel-run)..."),this.log(`Long-polling /api/work/next. Press Ctrl+C to stop.
2
2
  `);let i=new AbortController,u=e(async p=>{this.log(`
3
3
  [${p}] shutting down agent...`),i.abort(),await Promise.allSettled([m(2e3),d(),f()]),S(),process.exit(0)},"shutdown");process.on("SIGINT",()=>{u("SIGINT")}),process.on("SIGTERM",()=>{u("SIGTERM")});let x=!1;try{await N({signal:i.signal,log:e(p=>this.log(p),"log"),version:this.config.version,readInstalledVersion:e(()=>{try{return JSON.parse(v(P(this.config.root,"package.json"),"utf-8")).version??null}catch{return null}},"readInstalledVersion"),onVersionDrift:e(()=>{x=!0},"onVersionDrift")}),x&&(this.log("[upgrade] Installed CLI version changed \u2014 restarting worker onto the new code."),await Promise.allSettled([m(2e3),d(),f()]),S(),process.exit(1))}finally{S(),await f()}}};export{T as default};
@@ -1 +1 @@
1
- import{b as n}from"../../chunk-XXDZJ6YI.js";import{e as a}from"../../chunk-NVKX36YN.js";import{a as s}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as o}from"../../chunk-ZLLER3HP.js";import{Flags as d}from"@oclif/core";import l from"node:path";import u from"node:os";var i=class c extends s{static{o(this,"ResearchBackfill")}static description="Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset \u2014 forward-only tail is the default capture path.";static examples=["<%= config.bin %> research backfill","<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"];static flags={"claude-dir":d.string({description:"Override the Claude Code projects directory",default:l.join(u.homedir(),".claude")}),"dry-run":d.boolean({description:"Print observation count without POSTing",default:!1})};async run(){let{flags:r}=await this.parse(c);this.requireAuth(),this.log(`Scanning ${l.join(r["claude-dir"],"projects")} for rate-limit events...`);let e=await a(r["claude-dir"]);if(this.log(`Found ${e.length} rate-limit observation(s).`),e.length===0)return;if(r["dry-run"]){this.log("Dry run \u2014 nothing posted.");return}let t=await n(e);if(this.log(`Posted ${t.posted} observation(s); ${t.failed} failed.`),t.failed>0)for(let f of t.errors)this.warn(f)}};export{i as default};
1
+ import{e as a}from"../../chunk-NVKX36YN.js";import{b as n}from"../../chunk-XXDZJ6YI.js";import{a as s}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as o}from"../../chunk-ZLLER3HP.js";import{Flags as d}from"@oclif/core";import l from"node:path";import u from"node:os";var i=class c extends s{static{o(this,"ResearchBackfill")}static description="Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset \u2014 forward-only tail is the default capture path.";static examples=["<%= config.bin %> research backfill","<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"];static flags={"claude-dir":d.string({description:"Override the Claude Code projects directory",default:l.join(u.homedir(),".claude")}),"dry-run":d.boolean({description:"Print observation count without POSTing",default:!1})};async run(){let{flags:r}=await this.parse(c);this.requireAuth(),this.log(`Scanning ${l.join(r["claude-dir"],"projects")} for rate-limit events...`);let e=await a(r["claude-dir"]);if(this.log(`Found ${e.length} rate-limit observation(s).`),e.length===0)return;if(r["dry-run"]){this.log("Dry run \u2014 nothing posted.");return}let t=await n(e);if(this.log(`Posted ${t.posted} observation(s); ${t.failed} failed.`),t.failed>0)for(let f of t.errors)this.warn(f)}};export{i as default};
@@ -1 +1 @@
1
- import{b as l}from"../../chunk-XXDZJ6YI.js";import{d,g as c,h as p}from"../../chunk-NVKX36YN.js";import{a as f}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Args as v,Flags as g}from"@oclif/core";import w from"node:path";var r=class h extends f{static{n(this,"ResearchTailTranscript")}static description="Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook \u2014 safe to re-run.";static hidden=!0;static args={transcript:v.string({description:"Absolute path to a Claude Code .jsonl transcript",required:!0})};static flags={"no-post":g.boolean({description:"Parse and advance the offset without POSTing (debug)",default:!1})};async run(){let{args:u,flags:m}=await this.parse(h),e=w.resolve(u.transcript);try{this.requireAuth()}catch{return}let s=await c(),o=s[e]??0,{observations:a,newOffset:i}=await d(e,o);if(a.length>0&&!m["no-post"])try{let t=await l(a);process.env.RULEMETRIC_DEBUG&&this.log(`tail-transcript: posted ${t.posted}, failed ${t.failed}`)}catch(t){process.env.RULEMETRIC_DEBUG&&this.warn(`tail-transcript POST error: ${String(t)}`)}i!==o&&(s[e]=i,await p(s))}};export{r as default};
1
+ import{d,g as c,h as p}from"../../chunk-NVKX36YN.js";import{b as l}from"../../chunk-XXDZJ6YI.js";import{a as f}from"../../chunk-PPKPCXJD.js";import"../../chunk-IZTIYR5Q.js";import"../../chunk-V44SRRYR.js";import"../../chunk-U6XEU573.js";import"../../chunk-VLOX6KOM.js";import"../../chunk-3AV3GTMP.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as n}from"../../chunk-ZLLER3HP.js";import{Args as v,Flags as g}from"@oclif/core";import w from"node:path";var r=class h extends f{static{n(this,"ResearchTailTranscript")}static description="Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook \u2014 safe to re-run.";static hidden=!0;static args={transcript:v.string({description:"Absolute path to a Claude Code .jsonl transcript",required:!0})};static flags={"no-post":g.boolean({description:"Parse and advance the offset without POSTing (debug)",default:!1})};async run(){let{args:u,flags:m}=await this.parse(h),e=w.resolve(u.transcript);try{this.requireAuth()}catch{return}let s=await c(),o=s[e]??0,{observations:a,newOffset:i}=await d(e,o);if(a.length>0&&!m["no-post"])try{let t=await l(a);process.env.RULEMETRIC_DEBUG&&this.log(`tail-transcript: posted ${t.posted}, failed ${t.failed}`)}catch(t){process.env.RULEMETRIC_DEBUG&&this.warn(`tail-transcript POST error: ${String(t)}`)}i!==o&&(s[e]=i,await p(s))}};export{r as default};
@@ -1 +1 @@
1
- import{a,b,c,d,e}from"../chunk-D7D523MK.js";import"../chunk-TIOKY2IA.js";import"../chunk-TQMG647B.js";import"../chunk-W2MOTOQE.js";import"../chunk-DL6OUTPW.js";import"../chunk-6QKI756T.js";import"../chunk-RSKQRVPJ.js";import"../chunk-6FG5HXM3.js";import"../chunk-QFVGUZDO.js";import"../chunk-KAF3CYRW.js";import"../chunk-UF6US7VU.js";import"../chunk-DPFNJZUO.js";import"../chunk-RTWRHIKY.js";import"../chunk-XMJT7BXQ.js";import"../chunk-ZL4MZMUK.js";import"../chunk-N7TGRFVZ.js";import"../chunk-6GGVD6RZ.js";import"../chunk-NEACEHQD.js";import"../chunk-32EEBARV.js";import"../chunk-5RBLIVBF.js";import"../chunk-2TC6WCUT.js";import"../chunk-6V4WM73L.js";import"../chunk-HS7X43XE.js";import"../chunk-TDD7IOV2.js";import"../chunk-MODXEGCU.js";import"../chunk-7DFNBRLY.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import"../chunk-DSO2U4Y6.js";import"../chunk-CADKBP3D.js";import"../chunk-MGHFDHHM.js";import"../chunk-H2ORWIEY.js";import"../chunk-O6C2UGBY.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
1
+ import{a,b,c,d,e}from"../chunk-NLBZ4FX2.js";import"../chunk-TIOKY2IA.js";import"../chunk-32EEBARV.js";import"../chunk-MUURX7WZ.js";import"../chunk-W2MOTOQE.js";import"../chunk-CZJ6FRZ4.js";import"../chunk-6QKI756T.js";import"../chunk-RSKQRVPJ.js";import"../chunk-L2WTWIOS.js";import"../chunk-QFVGUZDO.js";import"../chunk-KAF3CYRW.js";import"../chunk-UF6US7VU.js";import"../chunk-DPFNJZUO.js";import"../chunk-D3X7FLC7.js";import"../chunk-RTWRHIKY.js";import"../chunk-2BBWRDXU.js";import"../chunk-5RBLIVBF.js";import"../chunk-ZL4MZMUK.js";import"../chunk-N7TGRFVZ.js";import"../chunk-DIUZLGZW.js";import"../chunk-NEACEHQD.js";import"../chunk-2TC6WCUT.js";import"../chunk-6V4WM73L.js";import"../chunk-HS7X43XE.js";import"../chunk-TDD7IOV2.js";import"../chunk-MODXEGCU.js";import"../chunk-7DFNBRLY.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import"../chunk-DSO2U4Y6.js";import"../chunk-CADKBP3D.js";import"../chunk-MGHFDHHM.js";import"../chunk-H2ORWIEY.js";import"../chunk-O6C2UGBY.js";import"../chunk-ZLLER3HP.js";export{b as CAPABILITIES,a as HANDLERS,c as availableCapabilities,d as pollForWork,e as runAgentLoop};
@@ -0,0 +1 @@
1
+ import{a,b}from"../../chunk-D3X7FLC7.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-DIUZLGZW.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-ZLLER3HP.js";export{b as distillMemories,a as selectNewMemories};
@@ -1 +1 @@
1
- import{a}from"../../chunk-XMJT7BXQ.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-6GGVD6RZ.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-ZLLER3HP.js";export{a as processAnnouncement};
1
+ import{a}from"../../chunk-2BBWRDXU.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-DIUZLGZW.js";import"../../chunk-ZLLER3HP.js";export{a as processAnnouncement};
@@ -1 +1 @@
1
- import{a}from"../../chunk-SCKD37NC.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-6GGVD6RZ.js";import"../../chunk-ZLLER3HP.js";export{a as processChangelog};
1
+ import{a}from"../../chunk-BZP7YKDK.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-DIUZLGZW.js";import"../../chunk-ZLLER3HP.js";export{a as processChangelog};
@@ -1 +1 @@
1
- import{a}from"../../chunk-TQMG647B.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import"../../chunk-ZLLER3HP.js";export{a as processInsights};
1
+ import{a}from"../../chunk-MUURX7WZ.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import"../../chunk-ZLLER3HP.js";export{a as processInsights};
@@ -1 +1 @@
1
- import{a}from"../../chunk-DL6OUTPW.js";import"../../chunk-6QKI756T.js";import"../../chunk-6GGVD6RZ.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
1
+ import{a}from"../../chunk-CZJ6FRZ4.js";import"../../chunk-6QKI756T.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-DIUZLGZW.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
@@ -1 +1 @@
1
- import{a}from"../../chunk-6FG5HXM3.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-6GGVD6RZ.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-ZLLER3HP.js";export{a as processSessionGoal};
1
+ import{a}from"../../chunk-L2WTWIOS.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-DIUZLGZW.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-ZLLER3HP.js";export{a as processSessionGoal};
@@ -1 +1 @@
1
- import{a as l}from"../chunk-SCKD37NC.js";import{a as u}from"../chunk-UF6US7VU.js";import{a as g}from"../chunk-DPFNJZUO.js";import"../chunk-RTWRHIKY.js";import"../chunk-ZL4MZMUK.js";import"../chunk-N7TGRFVZ.js";import"../chunk-6GGVD6RZ.js";import"../chunk-TDD7IOV2.js";import"../chunk-MODXEGCU.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import{a as i}from"../chunk-GY5IJ4RS.js";import"../chunk-H2ORWIEY.js";import"../chunk-O6C2UGBY.js";import{a as o}from"../chunk-ZLLER3HP.js";var c={cron_check_changelog:o(async(r,e)=>{let s=await l({logger:{info:o(t=>e.logger.info(t),"info"),warn:o(t=>e.logger.warn(t),"warn")}});e.logger.info(`[cron_check_changelog] result: created=${s.createdCount} skipped=${s.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:o((r,e)=>g(r,e),"cron_suggest_instructions"),cron_refresh_skills:o((r,e)=>u(r,e),"cron_refresh_skills")},p=i.map(r=>{let e=c[r.name];if(!e)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:e}});async function m(r){let e=p.find(n=>n.name===r);if(!e)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let s=[],t={logger:{info:o(n=>s.push({level:"info",message:n}),"info"),warn:o(n=>s.push({level:"warn",message:n}),"warn"),error:o(n=>s.push({level:"error",message:n}),"error")},job:{attempts:0}},a=Date.now();try{return await e.handler({},t),{name:r,durationMs:Date.now()-a,ok:!0,logs:s}}catch(n){return{name:r,durationMs:Date.now()-a,ok:!1,error:n instanceof Error?n.message:String(n),logs:s}}}o(m,"runManualTask");export{p as MANUAL_TASKS,m as runManualTask};
1
+ import{a as l}from"../chunk-BZP7YKDK.js";import{a as u}from"../chunk-UF6US7VU.js";import{a as g}from"../chunk-DPFNJZUO.js";import"../chunk-RTWRHIKY.js";import"../chunk-ZL4MZMUK.js";import"../chunk-N7TGRFVZ.js";import"../chunk-DIUZLGZW.js";import"../chunk-TDD7IOV2.js";import"../chunk-MODXEGCU.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import{a as i}from"../chunk-GY5IJ4RS.js";import"../chunk-H2ORWIEY.js";import"../chunk-O6C2UGBY.js";import{a as o}from"../chunk-ZLLER3HP.js";var c={cron_check_changelog:o(async(r,e)=>{let s=await l({logger:{info:o(t=>e.logger.info(t),"info"),warn:o(t=>e.logger.warn(t),"warn")}});e.logger.info(`[cron_check_changelog] result: created=${s.createdCount} skipped=${s.skippedCount}`)},"cron_check_changelog"),cron_suggest_instructions:o((r,e)=>g(r,e),"cron_suggest_instructions"),cron_refresh_skills:o((r,e)=>u(r,e),"cron_refresh_skills")},p=i.map(r=>{let e=c[r.name];if(!e)throw new Error(`manual-tasks: no handler registered for "${r.name}"`);return{...r,handler:e}});async function m(r){let e=p.find(n=>n.name===r);if(!e)return{name:r,durationMs:0,ok:!1,error:`Unknown task: ${r}`,logs:[]};let s=[],t={logger:{info:o(n=>s.push({level:"info",message:n}),"info"),warn:o(n=>s.push({level:"warn",message:n}),"warn"),error:o(n=>s.push({level:"error",message:n}),"error")},job:{attempts:0}},a=Date.now();try{return await e.handler({},t),{name:r,durationMs:Date.now()-a,ok:!0,logs:s}}catch(n){return{name:r,durationMs:Date.now()-a,ok:!1,error:n instanceof Error?n.message:String(n),logs:s}}}o(m,"runManualTask");export{p as MANUAL_TASKS,m as runManualTask};
@@ -4077,5 +4077,5 @@
4077
4077
  ]
4078
4078
  }
4079
4079
  },
4080
- "version": "0.7.7"
4080
+ "version": "0.7.8"
4081
4081
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.7.7",
3
+ "version": "0.7.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -74,9 +74,9 @@
74
74
  "postgres": "^3.4.0",
75
75
  "react": "^19.0.0",
76
76
  "zod": "^3.24.0",
77
- "@rulemetric/proxy": "0.7.7",
78
- "@rulemetric/hooks": "0.7.7",
79
- "@rulemetric/skills-registry": "0.7.7"
77
+ "@rulemetric/hooks": "0.7.8",
78
+ "@rulemetric/proxy": "0.7.8",
79
+ "@rulemetric/skills-registry": "0.7.8"
80
80
  },
81
81
  "//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.",
82
82
  "optionalDependencies": {
@@ -95,13 +95,13 @@
95
95
  "typescript": "^5.9.0",
96
96
  "vitest": "^3.2.0",
97
97
  "@rulemetric/api": "0.0.1",
98
- "@rulemetric/core": "0.0.1",
99
98
  "@rulemetric/db": "0.0.1",
100
99
  "@rulemetric/effectiveness": "0.0.1",
101
100
  "@rulemetric/email": "0.0.1",
102
101
  "@rulemetric/session": "0.2.1",
103
- "@rulemetric/telemetry": "0.0.1",
104
- "@rulemetric/typescript-config": "0.0.0"
102
+ "@rulemetric/typescript-config": "0.0.0",
103
+ "@rulemetric/core": "0.0.1",
104
+ "@rulemetric/telemetry": "0.0.1"
105
105
  },
106
106
  "scripts": {
107
107
  "build": "node scripts/build.mjs",
@@ -1 +0,0 @@
1
- import{c as H}from"./chunk-TIOKY2IA.js";import{a as b}from"./chunk-TQMG647B.js";import{b as I}from"./chunk-W2MOTOQE.js";import{a as T}from"./chunk-DL6OUTPW.js";import{a as S}from"./chunk-RSKQRVPJ.js";import{a as A}from"./chunk-6FG5HXM3.js";import{a as y}from"./chunk-KAF3CYRW.js";import{a as k}from"./chunk-UF6US7VU.js";import{a as _}from"./chunk-DPFNJZUO.js";import{a as R}from"./chunk-XMJT7BXQ.js";import{a as E}from"./chunk-NEACEHQD.js";import{a as h}from"./chunk-32EEBARV.js";import{b as w}from"./chunk-5RBLIVBF.js";import{b as f,e as v,f as p}from"./chunk-H2ORWIEY.js";import{a as s}from"./chunk-ZLLER3HP.js";var D={process_eval:h,process_insights:b,process_launch:I,process_send_message:S,process_conversation:E,process_session_goal:A,process_announcement:R,process_run_cleanup:T,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:y},M=Object.keys(D),V=new Set(["process_session_goal","process_announcement","process_run_cleanup"]);function x(e=process.env){return e.DATABASE_URL?M:M.filter(n=>!V.has(n))}s(x,"availableCapabilities");var O=3e4,W=3e4,$=3e4,L=250,N=5e3,B=`thin-agent-${process.pid}`,g=null;function F(e,n,r,l){let a=s(t=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:B,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:t,metadata:{capabilities:e,mode:"thin-agent"}}).then(c=>{let u=c?.advisory;u&&u.message!==g?(g=u.message,o(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(g=null)}).catch(c=>{o(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})})},"send");a("alive");let d=setInterval(()=>a("alive"),$);n.addEventListener("abort",()=>{clearInterval(d),a("shutting_down")},{once:!0})}s(F,"startPresenceHeartbeat");function o(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(o,"structuredLog");function P(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",a),r(!0)},e),a=s(()=>{clearTimeout(l),n.removeEventListener("abort",a),r(!1)},"onAbort");n.addEventListener("abort",a,{once:!0})})}s(P,"abortableSleep");async function J(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(J,"pollForWork");function U(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(U,"makeHelpers");async function K(e,n,r){let l=D[e.kind],a=Date.now();if(o(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let t=`unknown kind: ${e.kind}`;o(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:t}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:t,terminal:!0}).catch(()=>{});return}let d=setInterval(()=>{o(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(t=>{o(r,{event:"heartbeat_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})},n);try{let t=U(e.attempts,r),c=await l(e.payload,t)??{};clearInterval(d),o(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-a}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:c})}catch(t){clearInterval(d);let c=w(t),u=t instanceof Error?t.message:String(t);o(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-a,terminal:c,error:u}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:u,terminal:c}).catch(i=>{o(r,{event:"fail_post_error",jobId:e.id,error:i instanceof Error?i.message:String(i)})})}}s(K,"runOne");async function ie(e){let n=e.log??(()=>{}),r=e.pollWaitMs??O,l=e.heartbeatIntervalMs??W,a=e.capabilities??x(),d=L;o(n,{event:"agent_start",capabilities:a,pollWaitMs:r,heartbeatIntervalMs:l}),F(a,e.signal,n,e.version),H({signal:e.signal,log:n}).catch(i=>{o(n,{event:"tt_heartbeat_fatal",error:i instanceof Error?i.message:String(i)})});let t=5*6e4,c=0,u=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let i=Date.now();if(i-c<t)return!1;c=i;let m=e.readInstalledVersion();return!!(m&&m!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(u()){o(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let i=null;try{i=await J(a,r)}catch(m){let C=m instanceof f?m.statusCode:void 0;if(o(n,{event:"poll_error",status:C,error:m instanceof Error?m.message:String(m)}),!await P(d,e.signal))break;d=Math.min(d*2,N);continue}if(!i){if(o(n,{event:"poll_204"}),!await P(d,e.signal))break;d=Math.min(d*2,N);continue}d=L,await K(i,l,n)}o(n,{event:"agent_stop"})}s(ie,"runAgentLoop");export{D as a,M as b,x as c,J as d,ie as e};