@rulemetric/cli 0.7.12 → 0.7.13
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.
- package/dist/chunk-3UBCK2FS.js +8 -0
- package/dist/{chunk-2DRBNTIQ.js → chunk-42HTXLNB.js} +1 -1
- package/dist/chunk-5BMBVTAE.js +61 -0
- package/dist/chunk-5XP7WWJR.js +20 -0
- package/dist/chunk-7574DMOC.js +1 -0
- package/dist/{chunk-2HWXJBL3.js → chunk-7SZX7C7U.js} +1 -1
- package/dist/chunk-AIGR5AYV.js +1 -0
- package/dist/{chunk-7PSSAJYL.js → chunk-AN4DKFLK.js} +1 -1
- package/dist/{chunk-2PZGG3OF.js → chunk-ANKSEQQT.js} +1 -1
- package/dist/chunk-FJJ54GK3.js +24 -0
- package/dist/{chunk-WHCRHMYJ.js → chunk-HA77SJ4C.js} +1 -1
- package/dist/{chunk-L3VLVAP6.js → chunk-HIDJIABB.js} +1 -1
- package/dist/{chunk-6RANV2QJ.js → chunk-LMHLQ2RB.js} +1 -1
- package/dist/{chunk-DPFNJZUO.js → chunk-O3C5IV2Y.js} +1 -1
- package/dist/{chunk-MUURX7WZ.js → chunk-RFMFABN2.js} +1 -1
- package/dist/chunk-S6B2R2LL.js +1 -0
- package/dist/{chunk-A372U5BM.js → chunk-XD64BT77.js} +1 -1
- package/dist/commands/evals/agent.js +1 -1
- package/dist/commands/evals/optimize-description.js +11 -11
- package/dist/commands/evals/optimize.js +1 -1
- package/dist/commands/evals/run.js +1 -1
- package/dist/lib/agent-loop.js +1 -1
- package/dist/lib/eval-case-generator.js +1 -0
- package/dist/lib/eval-conversation-handler.js +1 -1
- package/dist/lib/eval-deterministic.js +1 -0
- package/dist/lib/eval-grader.js +1 -1
- package/dist/lib/eval-trigger-tester.js +1 -1
- package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
- package/dist/lib/handlers/distill-memories.js +1 -1
- package/dist/lib/handlers/process-announcement.js +1 -1
- package/dist/lib/handlers/process-changelog.js +1 -1
- package/dist/lib/handlers/process-conversation.js +1 -1
- package/dist/lib/handlers/process-eval.js +1 -1
- package/dist/lib/handlers/process-insights.js +1 -1
- package/dist/lib/handlers/process-memory-ab.js +1 -1
- package/dist/lib/handlers/process-run-cleanup.js +1 -1
- package/dist/lib/handlers/process-session-goal.js +1 -1
- package/dist/lib/manual-tasks.js +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +6 -6
- package/dist/chunk-3C373UMW.js +0 -58
- package/dist/chunk-6D7PUPHT.js +0 -1
- package/dist/chunk-MTB4DSSX.js +0 -1
- package/dist/chunk-T4Z53J7B.js +0 -24
- package/dist/chunk-W2MZ4XZ6.js +0 -33
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{a as p}from"./chunk-QH7VY5HJ.js";import{a as l}from"./chunk-ZLLER3HP.js";var k=[{name:"git-commit-helper",description:"Writes conventional commit messages and PR descriptions from a diff"},{name:"sql-query-optimizer",description:"Analyzes slow SQL queries and proposes indexes and rewrites"},{name:"i18n-string-extractor",description:"Finds hardcoded UI strings and extracts them into translation files"}],T=`You are an AI coding assistant with access to a set of optional skills. When a user request matches a skill's description, you invoke that skill before answering; when no skill applies, you answer directly without one. Descriptions are your ONLY information about each skill.
|
|
2
|
+
|
|
3
|
+
{{CATALOG}}
|
|
4
|
+
|
|
5
|
+
Decide which single skill (if any) you would invoke for the user's request. Respond with ONLY a valid JSON object:
|
|
6
|
+
{"skill": "<exact skill name>" or null, "confidence": 0.0-1.0, "reason": "one sentence"}`;function b(n,t,e){let i=k.filter(s=>s.name!==n).map(s=>`- ${s.name}: ${s.description}`),d=(e%(i.length+1)+i.length+1)%(i.length+1);return i.splice(d,0,`- ${n}: ${t}`),`Available skills:
|
|
7
|
+
${i.join(`
|
|
8
|
+
`)}`}l(b,"buildCatalog");async function v(n){let{query:t,shouldTrigger:e,skillName:a,skillDescription:i,model:d,timeout:s=6e4,variant:f=0}=n,h=T.replace("{{CATALOG}}",b(a,i,f)),c=await p({prompt:t,targetContent:h,timeout:s,model:d});if(c.error)return{query:t,shouldTrigger:e,didTrigger:!1,correct:!e,confidence:0,evidence:`Execution failed: ${c.error}`};try{let o=c.output.trim(),u=o.match(/```(?:json)?\s*([\s\S]*?)```/);u&&(o=u[1].trim());let g=o.match(/\{[\s\S]*\}/);g&&(o=g[0]);let r=JSON.parse(o),m=r.skill===a;return{query:t,shouldTrigger:e,didTrigger:m,correct:m===e,confidence:typeof r.confidence=="number"?r.confidence:0,evidence:`Chose ${r.skill===null||r.skill===void 0?"no skill":`"${r.skill}"`}${r.reason?`: ${r.reason}`:""}`}}catch{return{query:t,shouldTrigger:e,didTrigger:!1,correct:!e,confidence:0,evidence:`Model returned unparseable output: ${c.output.slice(0,200)}`}}}l(v,"testTrigger");function w(n){return n.length===0?0:n.filter(e=>e.correct).length/n.length}l(w,"computeTriggerScore");export{v as a,w as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as u,f as t,j as x}from"./chunk-
|
|
1
|
+
import{e as u,f as t,j as x}from"./chunk-7574DMOC.js";import{a as E}from"./chunk-5BMBVTAE.js";import{a as P}from"./chunk-QH7VY5HJ.js";import{a as f}from"./chunk-ZLLER3HP.js";import{eq as s}from"drizzle-orm";import{buildControlledVerdict as M}from"@rulemetric/effectiveness";var A=f(m=>m.summary.pass_rate>=1?1:0,"fullPassScore");async function q(m,d={}){let r=d.db??x(),w=d.executeEval??P,y=d.grade??E,n=d.now??Date.now,[e]=await r.select().from(t).where(s(t.id,m.experimentId)).limit(1);if(!e)return{skipped:"not_found"};if(e.status==="completed"||e.status==="failed")return{skipped:"already_terminal",status:e.status};let[g]=await r.select({body:u.body}).from(u).where(s(u.id,e.memoryId)).limit(1);if(!g)return await r.update(t).set({status:"failed",error:"memory no longer exists",completedAt:new Date(n())}).where(s(t.id,e.id)),{skipped:"memory_gone",status:"failed"};await r.update(t).set({status:"running",startedAt:new Date(n())}).where(s(t.id,e.id));let b=e.expectations??[],l=e.model??void 0,a=[],h=0;try{for(let i=0;i<e.trials;i++){let c=await w({prompt:e.taskPrompt,targetContent:g.body,model:l}),p=await w({prompt:e.taskPrompt,model:l});if(c.error||p.error){h++;continue}let[v,D]=await Promise.all([y({prompt:e.taskPrompt,output:c.output,expectations:b,model:l}),y({prompt:e.taskPrompt,output:p.output,expectations:b,model:l})]);a.push({withScore:A(v),withoutScore:A(D),withLatency:c.durationMs/1e3,withoutLatency:p.durationMs/1e3})}if(a.length===0){let i=`no trials completed (${h}/${e.trials} runs errored \u2014 is the claude CLI available?)`;return await r.update(t).set({status:"failed",error:i,completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"failed",requestedTrials:e.trials,completedTrials:0}}let o=M(a);return await r.update(t).set({status:"completed",result:{verdict:o,pairs:a,completedTrials:a.length,model:l??null},completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"completed",requestedTrials:e.trials,completedTrials:a.length,significant:o.significant,delta:o.delta}}catch(o){let i=o instanceof Error?o.message:String(o);return await r.update(t).set({status:"failed",error:i.slice(0,500),completedAt:new Date(n())}).where(s(t.id,e.id)),{status:"failed",requestedTrials:e.trials,completedTrials:a.length}}}f(q,"processMemoryAb");export{q as a};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import{a as h,b as v}from"./chunk-S6B2R2LL.js";import{a as f}from"./chunk-QH7VY5HJ.js";import{a as l}from"./chunk-ZLLER3HP.js";var G=`You are a rigorous eval grader. Your job is to evaluate whether an AI assistant's output meets a set of expectations.
|
|
2
|
+
|
|
3
|
+
You will receive:
|
|
4
|
+
1. The original prompt that was given to the AI
|
|
5
|
+
2. The AI's output/response
|
|
6
|
+
3. A list of expectations (assertions) to evaluate
|
|
7
|
+
|
|
8
|
+
For each expectation:
|
|
9
|
+
- Search the output for evidence that the expectation is met
|
|
10
|
+
- Determine PASS or FAIL (no partial credit)
|
|
11
|
+
- Cite specific evidence (quote or description)
|
|
12
|
+
|
|
13
|
+
PASS criteria:
|
|
14
|
+
- Clear evidence the assertion is true
|
|
15
|
+
- Evidence reflects genuine completion, not surface compliance
|
|
16
|
+
|
|
17
|
+
FAIL criteria:
|
|
18
|
+
- No evidence found
|
|
19
|
+
- Evidence contradicts the expectation
|
|
20
|
+
- Cannot verify from available information
|
|
21
|
+
|
|
22
|
+
Beyond the predefined expectations, extract implicit claims from the output:
|
|
23
|
+
- Factual claims ("uses TypeScript", "has 3 parameters")
|
|
24
|
+
- Process claims ("used async/await pattern")
|
|
25
|
+
- Quality claims ("handles edge cases")
|
|
26
|
+
|
|
27
|
+
Verify each claim against the actual output.
|
|
28
|
+
|
|
29
|
+
Finally, critique the eval itself. For each assertion, ask two questions and set "flag" when the answer is yes:
|
|
30
|
+
- Would this assertion ALSO pass for a clearly wrong or useless output? Then it is worthless as a test \u2014 flag it "non_discriminating". (An assertion that cannot fail tells you nothing; passing it is false confidence.)
|
|
31
|
+
- Is this assertion impossible to verify from the prompt and output text alone (it references files, runtime state, or facts not present)? Flag it "unverifiable". Grade it FAIL per the criteria above, and the flag tells the eval author the assertion needs rewriting, not the output fixing.
|
|
32
|
+
Omit "flag" entirely for healthy assertions. Also suggest important outcomes that no assertion covers.
|
|
33
|
+
|
|
34
|
+
You MUST respond with ONLY a valid JSON object matching this exact structure (no markdown, no explanation, just JSON):
|
|
35
|
+
|
|
36
|
+
{
|
|
37
|
+
"expectations": [
|
|
38
|
+
{ "text": "assertion text", "passed": true, "evidence": "specific quote or description", "flag": "non_discriminating | unverifiable \u2014 OMIT this key for healthy assertions" }
|
|
39
|
+
],
|
|
40
|
+
"summary": { "passed": 2, "failed": 1, "total": 3, "pass_rate": 0.67 },
|
|
41
|
+
"claims": [
|
|
42
|
+
{ "claim": "statement", "type": "factual", "verified": true, "evidence": "..." }
|
|
43
|
+
],
|
|
44
|
+
"eval_feedback": {
|
|
45
|
+
"suggestions": [{ "assertion": "suggested new assertion", "reason": "why it matters" }],
|
|
46
|
+
"overall": "brief summary assessment"
|
|
47
|
+
}
|
|
48
|
+
}`;async function _(x){let{prompt:y,output:d,expectations:p,model:b,timeout:w=12e4}=x,a=new Array(p.length),r=[];p.forEach((e,s)=>{let t=h(e);if(t){let i=v(t,d);a[s]={text:e,passed:i.passed,evidence:i.evidence,method:"deterministic"}}else r.push({text:e,index:s})});let u=l((e,s)=>{let t=a.filter(c=>c.passed).length,i=a.length;return{expectations:a,summary:{passed:t,failed:i-t,total:i,pass_rate:i>0?t/i:0},claims:e,eval_feedback:s}},"finish"),m=l((e,s)=>{for(let t of r)a[t.index]={text:t.text,passed:!1,evidence:e,method:"llm"};return u([],{suggestions:[],overall:s})},"failSubjective");if(r.length===0)return u([],{suggestions:[],overall:"All expectations verified deterministically \u2014 LLM judge skipped."});let A=`## Original Prompt
|
|
49
|
+
|
|
50
|
+
${y}
|
|
51
|
+
|
|
52
|
+
## AI Output
|
|
53
|
+
|
|
54
|
+
${d}
|
|
55
|
+
|
|
56
|
+
## Expectations to Evaluate
|
|
57
|
+
|
|
58
|
+
${r.map((e,s)=>`${s+1}. ${e.text}`).join(`
|
|
59
|
+
`)}
|
|
60
|
+
|
|
61
|
+
Grade the output against each expectation. Respond with ONLY valid JSON.`,o=await f({prompt:A,targetContent:G,timeout:w,model:b});if(o.error)return m(`Grader error: ${o.error}`,`Grading failed: ${o.error}`);try{let e=o.output.trim(),s=e.match(/```(?:json)?\s*([\s\S]*?)```/);s&&(e=s[1].trim());let t=e.match(/\{[\s\S]*\}/);t&&(e=t[0]);let i=JSON.parse(e);return r.forEach((c,S)=>{let n=i.expectations?.[S],g=n?.flag==="non_discriminating"||n?.flag==="unverifiable"?n.flag:void 0;a[c.index]=n?{text:c.text,passed:n.passed,evidence:n.evidence??"",method:"llm",...g?{flag:g}:{}}:{text:c.text,passed:!1,evidence:"Judge did not return a grade for this expectation",method:"llm"}}),u(i.claims??[],i.eval_feedback??{suggestions:[],overall:""})}catch{return m("Grader output was not valid JSON",`Grader returned unparseable output: ${o.output.slice(0,200)}`)}}l(_,"gradeEvalOutput");export{_ as a};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import{f as r}from"./chunk-RTWRHIKY.js";import{a as o}from"./chunk-ZLLER3HP.js";var i=5,g=`You are designing eval test cases for an AI-coding-agent instruction (a CLAUDE.md rule, skill, or prompt). Your cases will be executed by running the prompt through an agent WITH and WITHOUT the instruction, then grading the outputs \u2014 so every case must be able to tell those two conditions apart.
|
|
2
|
+
|
|
3
|
+
Requirements for the set:
|
|
4
|
+
- Each case: a realistic task prompt a developer would give an agent, plus 1-3 expectations.
|
|
5
|
+
- Expectations must be DISCRIMINATING: they should pass when the instruction is followed and fail when it is not. An expectation that passes for any reasonable output is worthless.
|
|
6
|
+
- Prefer DETERMINISTIC expectations wherever the outcome is objectively checkable, using these exact prefixes (they are graded programmatically, not by an LLM judge):
|
|
7
|
+
- "contains: <substring>" \u2014 output must contain the substring (case-sensitive)
|
|
8
|
+
- "icontains: <substring>" \u2014 case-insensitive contains
|
|
9
|
+
- "not-contains: <substring>" \u2014 output must NOT contain the substring
|
|
10
|
+
- "regex: <pattern>" \u2014 output must match the pattern
|
|
11
|
+
- "json-valid" \u2014 output must parse as JSON
|
|
12
|
+
Use plain free-text expectations only for genuinely subjective outcomes.
|
|
13
|
+
- Include exactly ONE "violation-attempt" case: a prompt that subtly encourages breaking the instruction's strongest prohibition; expectations assert the instruction still holds. Name it starting with "violation-attempt:".
|
|
14
|
+
- Name compliance cases starting with "compliance:".
|
|
15
|
+
- At most ${i} cases.
|
|
16
|
+
|
|
17
|
+
Respond with ONLY a valid JSON object:
|
|
18
|
+
{"cases": [{"name": "...", "prompt": "...", "expectations": ["..."]}]}`;async function d(c){let{content:p,name:l}=c,u=`## Instruction under test: ${l}
|
|
19
|
+
|
|
20
|
+
${p}`,e=await r(g,u,4e3);if(e===null)return null;let n=e.cases;if(!Array.isArray(n))throw new Error(`Case generator returned invalid shape (no cases array): ${JSON.stringify(e).slice(0,200)}`);let s=[];for(let m of n){let t=m;typeof t.name=="string"&&t.name.length>0&&typeof t.prompt=="string"&&t.prompt.length>0&&Array.isArray(t.expectations)&&t.expectations.length>0&&t.expectations.every(a=>typeof a=="string"&&a.length>0)&&s.push({name:t.name,prompt:t.prompt,expectations:t.expectations})}if(s.length===0)throw new Error(`Case generator produced no usable cases (${n.length} row(s), all malformed or empty)`);return s.slice(0,i)}o(d,"generateEvalCases");export{d as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as m,c as mr}from"./chunk-ZLLER3HP.js";import{boolean as Io,pgTable as pr,text as Ye,timestamp as jt,uuid as To}from"drizzle-orm/pg-core";import{pgTable as Je,text as Z,timestamp as Te,jsonb as ho,uuid as F,primaryKey as yo}from"drizzle-orm/pg-core";var u=Je("organizations",{id:F("id").primaryKey().defaultRandom(),name:Z("name").unique().notNull(),slug:Z("slug").unique().notNull(),metadata:ho("metadata"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).defaultNow()}),x=Je("teams",{id:F("id").primaryKey().defaultRandom(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Z("name").notNull(),slug:Z("slug").notNull(),metadata:ho("metadata"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()}),ee=Je("user_organizations",{userId:F("user_id").notNull(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[yo({columns:[e.userId,e.orgId]})]),te=Je("user_teams",{userId:F("user_id").notNull(),teamId:F("team_id").references(()=>x.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[yo({columns:[e.userId,e.teamId]})]);var o=pr("profiles",{id:To("id").primaryKey(),email:Ye("email"),displayName:Ye("display_name"),activeOrgId:To("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:Io("is_superadmin").notNull().default(!1),claudeCodePlan:Ye("claude_code_plan"),planSource:Ye("plan_source").notNull().default("detected"),setupCompletedAt:jt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:Io("live_send_skipped").notNull().default(!1),createdAt:jt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:jt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as gr,text as ne,timestamp as St,jsonb as bo,uuid as Xe,integer as vr,boolean as hr,index as Kt}from"drizzle-orm/pg-core";import{boolean as fr,jsonb as xr,pgTable as Et,primaryKey as zo,text as G,timestamp as Ae,uniqueIndex as kt,uuid as J}from"drizzle-orm/pg-core";import{sql as Nr}from"drizzle-orm";import{pgTable as wo,text as f,timestamp as we,jsonb as We,uuid as P,integer as Rt,boolean as _r,uniqueIndex as Ao,index as Qe}from"drizzle-orm/pg-core";var n=wo("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:We("frontmatter").notNull(),slots:We("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:P("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow(),updatedAt:we("updated_at",{withTimezone:!0}).defaultNow(),archived:_r("archived").default(!1),archivedAt:we("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:Rt("scan_score"),scanFindings:We("scan_findings"),popularityScore:Rt("popularity_score"),sourceUpdatedAt:we("source_updated_at",{withTimezone:!0})},e=>[Ao("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Qe("idx_instructions_scope").on(e.scope,e.scopeRef),Qe("idx_instructions_created_by").on(e.createdBy),Qe("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Qe("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),oe=wo("instruction_versions",{id:P("id").primaryKey().defaultRandom(),instructionId:P("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:Rt("version_number").notNull(),content:f("content").notNull(),frontmatter:We("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:P("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow()},e=>[Ao("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var r=Et("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:xr("metadata"),createdBy:J("created_by"),createdAt:Ae("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ae("updated_at",{withTimezone:!0}).defaultNow()},e=>[kt("projects_org_name_idx").on(e.orgId,e.name),kt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Nr`${e.gitRemoteUrl} IS NOT NULL`)]),O=Et("project_instructions",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Ae("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[zo({columns:[e.projectId,e.instructionId]})]),Do=Et("project_checkouts",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:G("path").notNull(),isWorktree:fr("is_worktree").notNull().default(!1),firstSeen:Ae("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Ae("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[zo({columns:[e.projectId,e.path]}),kt("project_checkouts_path_unique").on(e.path)]);var _=gr("agent_runs",{id:Xe("id").primaryKey().defaultRandom(),userId:Xe("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:Xe("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:Xe("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:bo("tool_spec").notNull().default([]),autoWorktree:hr("auto_worktree").notNull().default(!0),status:ne("status").notNull().default("pending"),sessionCount:vr("session_count").notNull().default(0),metadata:bo("metadata").notNull().default({}),createdAt:St("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:St("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:St("completed_at",{withTimezone:!0})},e=>[Kt("idx_agent_runs_user").on(e.userId),Kt("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Kt("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Pt,text as g,timestamp as ze,jsonb as Y,uuid as z,integer as $e,uniqueIndex as jo,index as T}from"drizzle-orm/pg-core";var d=Pt("sessions",{id:z("id").primaryKey().defaultRandom(),userId:z("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:g("external_session_id"),projectId:z("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:z("org_id").references(()=>u.id,{onDelete:"set null"}),tool:g("tool").notNull(),projectPath:g("project_path"),gitBranch:g("git_branch"),startedAt:ze("started_at",{withTimezone:!0}).notNull(),endedAt:ze("ended_at",{withTimezone:!0}),eventCount:$e("event_count").default(0),tokenUsage:Y("token_usage"),analysis:Y("analysis"),analyzedAt:ze("analyzed_at",{withTimezone:!0}),analyzedEventCount:$e("analyzed_event_count"),analyzedTurnCount:$e("analyzed_turn_count"),metadata:Y("metadata").default({}),origin:g("origin").notNull().default("unknown"),runId:z("run_id").references(()=>_.id,{onDelete:"set null"}),model:g("model"),harnessVersion:g("harness_version"),createdAt:ze("created_at",{withTimezone:!0}).defaultNow()},e=>[T("idx_sessions_user").on(e.userId),T("idx_sessions_tool").on(e.tool),T("idx_sessions_started_at").on(e.startedAt),T("idx_sessions_project").on(e.projectId),T("idx_sessions_org_started_at").on(e.orgId,e.startedAt),T("idx_sessions_run").on(e.runId),jo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),re=Pt("session_events",{id:z("id").primaryKey().defaultRandom(),sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:$e("sequence").notNull(),eventType:g("event_type").notNull(),content:g("content"),toolName:g("tool_name"),toolInput:Y("tool_input"),toolOutput:Y("tool_output"),tokenUsage:Y("token_usage"),model:g("model"),timestamp:ze("timestamp",{withTimezone:!0}).notNull(),metadata:Y("metadata").default({})},e=>[jo("session_events_session_sequence_idx").on(e.sessionId,e.sequence),T("idx_session_events_session_id").on(e.sessionId),T("idx_session_events_event_type").on(e.eventType),T("idx_session_events_model").on(e.model)]),C=Pt("session_instructions",{sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:g("link_method").notNull()},e=>[T("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as yr,text as se,timestamp as Ot,uuid as De,integer as Ro,index as Ze}from"drizzle-orm/pg-core";var v=yr("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:Ro("version").notNull().default(1),parentId:De("parent_id").references(()=>v.id,{onDelete:"set null"}),kind:se("kind").notNull(),title:se("title").notNull(),body:se("body").notNull(),source:se("source").notNull(),status:se("status").notNull().default("active"),trustClass:se("trust_class"),trustVersion:Ro("trust_version"),trustComputedAt:Ot("trust_computed_at",{withTimezone:!0}),createdAt:Ot("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Ot("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ze("idx_memories_user").on(e.userId),Ze("idx_memories_project").on(e.projectId),Ze("idx_memories_parent").on(e.parentId),Ze("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as Ir,text as be,timestamp as Ct,uuid as qt,integer as ko,jsonb as Tr,index as Eo}from"drizzle-orm/pg-core";var So=Ir("memory_experiments",{id:qt("id").primaryKey().defaultRandom(),memoryId:qt("memory_id").notNull().references(()=>v.id,{onDelete:"cascade"}),userId:qt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:ko("memory_version").notNull().default(1),taskPrompt:be("task_prompt").notNull(),expectations:be("expectations").array().notNull().default([]),trials:ko("trials").notNull().default(10),model:be("model"),status:be("status").notNull().default("pending"),result:Tr("result").$type(),error:be("error"),createdAt:Ct("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:Ct("started_at",{withTimezone:!0}),completedAt:Ct("completed_at",{withTimezone:!0})},e=>[Eo("idx_memory_experiments_memory").on(e.memoryId),Eo("idx_memory_experiments_user").on(e.userId)]);import{boolean as wr,date as Ar,index as Mt,integer as zr,jsonb as Dr,pgTable as Lt,text as h,timestamp as q,uniqueIndex as br,uuid as ie}from"drizzle-orm/pg-core";var Ko=Lt("announcements",{id:ie("id").primaryKey().defaultRandom(),version:h("version").notNull().unique(),releaseDate:Ar("release_date").notNull(),subject:h("subject").notNull(),htmlBody:h("html_body").notNull(),textBody:h("text_body").notNull(),sections:Dr("sections").notNull().default({}),status:h("status").notNull().default("draft"),recipientCount:zr("recipient_count"),sentAt:q("sent_at",{withTimezone:!0}),sentBy:ie("sent_by"),error:h("error"),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Mt("idx_announcements_status").on(e.status),Mt("idx_announcements_created").on(e.createdAt)]),Po=Lt("announcement_deliveries",{id:ie("id").primaryKey().defaultRandom(),announcementId:ie("announcement_id").notNull(),userId:ie("user_id").notNull(),email:h("email").notNull(),status:h("status").notNull().default("pending"),providerId:h("provider_id"),error:h("error"),sentAt:q("sent_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[br("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Mt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Oo=Lt("notification_preferences",{userId:ie("user_id").primaryKey(),productAnnouncements:wr("product_announcements").notNull().default(!0),unsubscribeToken:h("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 jr,text as Bt,timestamp as et,uuid as tt,index as Co}from"drizzle-orm/pg-core";var D=jr("org_invitations",{id:tt("id").primaryKey().defaultRandom(),orgId:tt("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:Bt("email").notNull(),role:Bt("role").notNull().default("member"),teamId:tt("team_id").references(()=>x.id,{onDelete:"set null"}),invitedBy:tt("invited_by").notNull().references(()=>o.id),token:Bt("token").notNull().unique(),expiresAt:et("expires_at",{withTimezone:!0}).notNull(),acceptedAt:et("accepted_at",{withTimezone:!0}),revokedAt:et("revoked_at",{withTimezone:!0}),createdAt:et("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Co("idx_org_invitations_token").on(e.token),Co("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Rr,text as kr,timestamp as Er,jsonb as Sr,uuid as Ut,index as qo}from"drizzle-orm/pg-core";var ae=Rr("instruction_events",{id:Ut("id").primaryKey().defaultRandom(),instructionId:Ut("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:kr("event_type").notNull(),actorId:Ut("actor_id").notNull(),metadata:Sr("metadata"),createdAt:Er("created_at",{withTimezone:!0}).defaultNow()},e=>[qo("idx_instruction_events_instruction").on(e.instructionId),qo("idx_instruction_events_type").on(e.eventType)]);import{pgTable as Mo,text as ot,timestamp as Lo,uuid as w,integer as Bo,index as de,unique as Kr}from"drizzle-orm/pg-core";var b=Mo("treatment_assignments",{id:w("id").primaryKey().defaultRandom(),userId:w("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ot("treatment_type").notNull(),treatmentId:w("treatment_id").notNull(),treatmentVersion:Bo("treatment_version").notNull().default(1),projectId:w("project_id").references(()=>r.id,{onDelete:"set null"}),assignedBy:w("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:ot("method").notNull(),assignedAt:Lo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[de("idx_treatment_assignments_user").on(e.userId),de("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),de("idx_treatment_assignments_project").on(e.projectId)]),j=Mo("treatment_exposures",{id:w("id").primaryKey().defaultRandom(),sessionId:w("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),userId:w("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ot("treatment_type").notNull(),treatmentId:w("treatment_id").notNull(),treatmentVersion:Bo("treatment_version").notNull().default(1),assignmentId:w("assignment_id").references(()=>b.id,{onDelete:"set null"}),method:ot("method").notNull(),exposedAt:Lo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Kr("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),de("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),de("idx_treatment_exposures_user").on(e.userId),de("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Pr,text as Ht,timestamp as Or,uuid as nt,integer as Cr,index as Uo,uniqueIndex as qr}from"drizzle-orm/pg-core";var Ho=Pr("pending_treatment_exposures",{id:nt("id").primaryKey().defaultRandom(),userId:nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Ht("external_session_id").notNull(),treatmentType:Ht("treatment_type").notNull(),treatmentId:nt("treatment_id").notNull(),treatmentVersion:Cr("treatment_version").notNull().default(1),method:Ht("method").notNull().default("injected"),projectId:nt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:Or("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[qr("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Uo("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Uo("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as Mr,text as ue,timestamp as Vt,uuid as Ft,jsonb as Lr,uniqueIndex as Br,index as Vo}from"drizzle-orm/pg-core";var rt=Mr("session_terminal_targets",{id:Ft("id").primaryKey().defaultRandom(),userId:Ft("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Ft("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:ue("external_session_id"),kind:ue("kind").notNull(),target:ue("target").notNull(),status:ue("status").notNull().default("active"),attachCommand:ue("attach_command").notNull(),projectPath:ue("project_path"),metadata:Lr("metadata").notNull().default({}),lastSeenAt:Vt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Vt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Vt("updated_at",{withTimezone:!0}).defaultNow()},e=>[Br("idx_session_terminal_targets_user_target").on(e.userId,e.target),Vo("idx_session_terminal_targets_session").on(e.sessionId),Vo("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as Ur,index as st,jsonb as Fo,pgTable as Hr,text as Q,timestamp as je,uuid as it,integer as Vr}from"drizzle-orm/pg-core";var Go=Hr("session_send_jobs",{id:it("id").primaryKey().defaultRandom(),userId:it("user_id").notNull(),sessionId:it("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:it("terminal_target_id").references(()=>rt.id,{onDelete:"set null"}),target:Q("target").notNull(),message:Q("message").notNull(),submit:Ur("submit").notNull().default(!0),delivery:Q("delivery").notNull().default("live"),status:Q("status").notNull().default("pending"),result:Fo("result"),error:Q("error"),attempts:Vr("attempts").notNull().default(0),taskKind:Q("task_kind"),payload:Fo("payload"),claimedBy:Q("claimed_by"),claimedAt:je("claimed_at",{withTimezone:!0}),leaseExpiresAt:je("lease_expires_at",{withTimezone:!0}),createdAt:je("created_at",{withTimezone:!0}).defaultNow(),updatedAt:je("updated_at",{withTimezone:!0}).defaultNow(),completedAt:je("completed_at",{withTimezone:!0})},e=>[st("idx_session_send_jobs_user").on(e.userId),st("idx_session_send_jobs_session").on(e.sessionId),st("idx_session_send_jobs_status").on(e.status),st("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Yo,text as W,timestamp as at,jsonb as Qo,uuid as M,integer as Fr,boolean as Gr,uniqueIndex as Jr,index as Jo,primaryKey as Yr}from"drizzle-orm/pg-core";var y=Yo("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:Qo("metadata"),createdBy:M("created_by"),createdAt:at("created_at",{withTimezone:!0}).defaultNow(),updatedAt:at("updated_at",{withTimezone:!0}).defaultNow(),archived:Gr("archived").default(!1),archivedAt:at("archived_at",{withTimezone:!0}),archivedBy:M("archived_by"),forkedFromId:M("forked_from_id").references(()=>y.id,{onDelete:"set null"}),upstreamVersion:W("upstream_version")},e=>[Jr("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Jo("idx_packs_scope").on(e.scope,e.scopeRef),Jo("idx_packs_created_by").on(e.createdBy)]),L=Yo("pack_instructions",{packId:M("pack_id").references(()=>y.id,{onDelete:"cascade"}).notNull(),instructionId:M("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Fr("position").notNull().default(0),slotOverrides:Qo("slot_overrides"),addedAt:at("added_at",{withTimezone:!0}).defaultNow(),addedBy:M("added_by")},e=>[Yr({columns:[e.packId,e.instructionId]})]);import{pgTable as Qr,text as Gt,timestamp as Wr,jsonb as Xr,uuid as Jt,index as le}from"drizzle-orm/pg-core";var ce=Qr("instruction_usage_events",{id:Jt("id").primaryKey().defaultRandom(),instructionId:Jt("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:Jt("user_id").notNull(),surface:Gt("surface").notNull(),action:Gt("action").notNull(),metadata:Xr("metadata"),traceId:Gt("trace_id"),createdAt:Wr("created_at",{withTimezone:!0}).defaultNow()},e=>[le("idx_usage_events_instruction").on(e.instructionId),le("idx_usage_events_user").on(e.userId),le("idx_usage_events_surface").on(e.surface),le("idx_usage_events_action").on(e.action),le("idx_usage_events_created_at").on(e.createdAt),le("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as $r,text as dt,timestamp as Wo,jsonb as Zr,uuid as Xo,index as Yt}from"drizzle-orm/pg-core";var $o=$r("worker_connections",{id:Xo("id").primaryKey().defaultRandom(),userId:Xo("user_id").notNull(),workerType:dt("worker_type").notNull().default("mcp"),clientName:dt("client_name").notNull(),clientVersion:dt("client_version"),workerVersion:dt("worker_version"),lastHeartbeat:Wo("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Wo("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Zr("metadata")},e=>[Yt("idx_worker_connections_user").on(e.userId),Yt("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),Yt("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as es,text as ut,timestamp as ts,jsonb as os,uuid as Zo,index as en}from"drizzle-orm/pg-core";var tn=es("cli_setup_events",{id:Zo("id").primaryKey().defaultRandom(),userId:Zo("user_id").notNull(),deviceId:ut("device_id").notNull(),event:ut("event").notNull(),cliVersion:ut("cli_version"),os:ut("os"),props:os("props").notNull().default({}),createdAt:ts("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[en("idx_cli_setup_events_user").on(e.userId,e.createdAt),en("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as ns,text as X,integer as rs,boolean as ss,timestamp as is,jsonb as as,uuid as ds,index as on}from"drizzle-orm/pg-core";var nn=ns("cli_error_events",{id:ds("id").primaryKey().defaultRandom(),deviceId:X("device_id"),event:X("event").notNull(),command:X("command"),statusCode:rs("status_code"),message:X("message"),cliVersion:X("cli_version"),os:X("os"),nodeVersion:X("node_version"),proxied:ss("proxied"),props:as("props").notNull().default({}),createdAt:is("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[on("idx_cli_error_events_created").on(e.createdAt),on("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as lt,text as R,timestamp as me,jsonb as A,uuid as I,integer as Re,index as k}from"drizzle-orm/pg-core";var s=lt("eval_targets",{id:I("id").primaryKey().defaultRandom(),userId:I("user_id").notNull(),name:R("name").notNull(),type:R("type").notNull(),content:R("content").notNull(),description:R("description").notNull().default(""),metadata:A("metadata").notNull().default({}),version:Re("version").notNull().default(1),parentId:I("parent_id").references(()=>s.id,{onDelete:"set null"}),createdAt:me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:me("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=lt("evals",{id:I("id").primaryKey().defaultRandom(),evalTargetId:I("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),name:R("name").notNull(),prompt:R("prompt").notNull(),expectedOutput:R("expected_output").notNull().default(""),files:A("files").notNull().default([]),expectations:A("expectations").notNull().default([]),createdAt:me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:me("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_evals_target").on(e.evalTargetId)]),B=lt("eval_runs",{id:I("id").primaryKey().defaultRandom(),jobId:I("job_id"),evalId:I("eval_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:I("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),evalTargetVersion:Re("eval_target_version").notNull(),configuration:R("configuration").notNull(),runNumber:Re("run_number").notNull().default(1),iteration:Re("iteration").notNull().default(1),status:R("status").notNull().default("completed"),outputs:A("outputs").notNull().default({}),timing:A("timing").notNull().default({}),grading:A("grading").notNull().default({}),comparison:A("comparison"),createdAt:me("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)]),pe=lt("benchmarks",{id:I("id").primaryKey().defaultRandom(),evalTargetId:I("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:Re("iteration").notNull().default(1),runSummary:A("run_summary").notNull().default({}),notes:A("notes").notNull().default([]),feedback:A("feedback"),createdAt:me("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_benchmarks_target").on(e.evalTargetId)]);import{pgTable as sn,text as Qt,timestamp as Wt,jsonb as an,uuid as _e,integer as ke,index as ct,real as rn}from"drizzle-orm/pg-core";var fe=sn("trigger_evals",{id:_e("id").primaryKey().defaultRandom(),evalTargetId:_e("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:_e("user_id").notNull(),queries:an("queries").notNull().default([]),status:Qt("status").notNull().default("pending_review"),trainIndices:ke("train_indices").array().default([]),testIndices:ke("test_indices").array().default([]),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Wt("updated_at",{withTimezone:!0}).defaultNow()},e=>[ct("idx_trigger_evals_target").on(e.evalTargetId),ct("idx_trigger_evals_user").on(e.userId)]),xe=sn("optimization_runs",{id:_e("id").primaryKey().defaultRandom(),evalTargetId:_e("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:_e("user_id").notNull(),type:Qt("type").notNull(),iteration:ke("iteration").notNull(),inputVersion:ke("input_version").notNull(),outputVersion:ke("output_version"),trainScore:rn("train_score"),testScore:rn("test_score"),analysis:an("analysis").notNull().default({}),status:Qt("status").notNull().default("running"),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow()},e=>[ct("idx_optimization_runs_target").on(e.evalTargetId),ct("idx_optimization_runs_user").on(e.userId)]);import{pgTable as us,text as U,timestamp as ls,jsonb as Ee,uuid as Xt,integer as $t,real as cs,index as Se,uniqueIndex as dn}from"drizzle-orm/pg-core";var H=us("context_snapshots",{id:Xt("id").primaryKey().defaultRandom(),sessionId:Xt("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:Xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:$t("sequence").notNull().default(0),provider:U("provider").notNull(),model:U("model").notNull(),systemPrompt:U("system_prompt").notNull(),injectedInstructions:Ee("injected_instructions").notNull().default([]),messagesSummary:Ee("messages_summary").notNull(),tools:Ee("tools").notNull().default([]),systemHash:U("system_hash").notNull(),requestHash:U("request_hash").notNull().default(""),toolsHash:U("tools_hash"),injectedHash:U("injected_hash"),messagesDelta:Ee("messages_delta").default([]),messagesDeltaRef:U("messages_delta_ref"),maxTokens:$t("max_tokens"),temperature:cs("temperature"),estimatedTokens:$t("estimated_tokens"),capturedAt:ls("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ee("metadata").default({})},e=>[Se("idx_context_snapshots_session").on(e.sessionId),Se("idx_context_snapshots_user").on(e.userId),Se("idx_context_snapshots_hash").on(e.systemHash),Se("idx_context_snapshots_request_hash").on(e.requestHash),dn("idx_snapshots_session_request").on(e.sessionId,e.requestHash),dn("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Se("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as ms,text as un,timestamp as ps,jsonb as _s,integer as fs,index as xs}from"drizzle-orm/pg-core";var ln=ms("content_blobs",{hash:un("hash").primaryKey(),contentType:un("content_type").notNull(),content:_s("content").notNull(),sizeBytes:fs("size_bytes").notNull().default(0),createdAt:ps("created_at",{withTimezone:!0}).defaultNow()},e=>[xs("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Ns,text as mt,timestamp as Ke,jsonb as pt,uuid as Zt,index as _t,integer as gs}from"drizzle-orm/pg-core";var Ne=Ns("eval_jobs",{id:Zt("id").primaryKey().defaultRandom(),userId:Zt("user_id").notNull(),evalTargetId:Zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:mt("status").notNull().default("pending"),config:pt("config").notNull().default({}),progress:pt("progress").notNull().default({}),result:pt("result"),error:mt("error"),attempts:gs("attempts").notNull().default(0),taskKind:mt("task_kind"),payload:pt("payload"),claimedBy:mt("claimed_by"),claimedAt:Ke("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ke("lease_expires_at",{withTimezone:!0}),createdAt:Ke("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ke("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ke("completed_at",{withTimezone:!0})},e=>[_t("idx_eval_jobs_user").on(e.userId),_t("idx_eval_jobs_target").on(e.evalTargetId),_t("idx_eval_jobs_status").on(e.status),_t("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as vs,text as Pe,timestamp as Oe,jsonb as cn,uuid as mn,integer as hs,index as pn}from"drizzle-orm/pg-core";var _n=vs("agent_jobs",{id:mn("id").primaryKey().defaultRandom(),userId:mn("user_id").notNull(),taskKind:Pe("task_kind").notNull(),status:Pe("status").notNull().default("pending"),payload:cn("payload").notNull(),dedupeKey:Pe("dedupe_key"),result:cn("result"),error:Pe("error"),attempts:hs("attempts").notNull().default(0),claimedBy:Pe("claimed_by"),claimedAt:Oe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Oe("lease_expires_at",{withTimezone:!0}),createdAt:Oe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Oe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Oe("completed_at",{withTimezone:!0})},e=>[pn("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),pn("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as ys,text as Ce,timestamp as qe,jsonb as ft,uuid as eo,index as xt,integer as Is}from"drizzle-orm/pg-core";var fn=ys("insights_jobs",{id:eo("id").primaryKey().defaultRandom(),userId:eo("user_id").notNull(),status:Ce("status").notNull().default("pending"),projectPath:Ce("project_path"),projectId:eo("project_id").references(()=>r.id,{onDelete:"set null"}),config:ft("config").notNull().default({}),progress:ft("progress").notNull().default({}),result:ft("result"),error:Ce("error"),attempts:Is("attempts").notNull().default(0),taskKind:Ce("task_kind"),payload:ft("payload"),claimedBy:Ce("claimed_by"),claimedAt:qe("claimed_at",{withTimezone:!0}),leaseExpiresAt:qe("lease_expires_at",{withTimezone:!0}),createdAt:qe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:qe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:qe("completed_at",{withTimezone:!0})},e=>[xt("idx_insights_jobs_user").on(e.userId),xt("idx_insights_jobs_status").on(e.status),xt("idx_insights_jobs_pending").on(e.userId,e.status),xt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Ts,text as to,timestamp as Nt,uuid as xn,index as ws,uniqueIndex as As}from"drizzle-orm/pg-core";var ge=Ts("api_keys",{id:xn("id").primaryKey().defaultRandom(),userId:xn("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:to("name").notNull(),keyHash:to("key_hash").notNull(),keyPrefix:to("key_prefix").notNull(),lastUsedAt:Nt("last_used_at",{withTimezone:!0}),expiresAt:Nt("expires_at",{withTimezone:!0}),revokedAt:Nt("revoked_at",{withTimezone:!0}),createdAt:Nt("created_at",{withTimezone:!0}).defaultNow()},e=>[ws("idx_api_keys_user").on(e.userId),As("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as zs,text as oo,timestamp as Nn,uuid as Ds,index as bs}from"drizzle-orm/pg-core";var gn=zs("extension_auth_codes",{code:oo("code").primaryKey(),userId:Ds("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:oo("editor"),email:oo("email"),expiresAt:Nn("expires_at",{withTimezone:!0}).notNull(),createdAt:Nn("created_at",{withTimezone:!0}).defaultNow()},e=>[bs("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as js,text as Rs,timestamp as vn,jsonb as ks,uuid as no,index as hn}from"drizzle-orm/pg-core";var ve=js("eval_conversations",{id:no("id").primaryKey().defaultRandom(),evalTargetId:no("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:no("user_id").notNull(),messages:ks("messages").notNull().default([]),status:Rs("status").notNull().default("active"),createdAt:vn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:vn("updated_at",{withTimezone:!0}).defaultNow()},e=>[hn("idx_eval_conversations_target").on(e.evalTargetId),hn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as Es,text as S,timestamp as yn,jsonb as Ss,uuid as ro}from"drizzle-orm/pg-core";var In=Es("skill_submissions",{id:ro("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:ro("submitted_by").notNull(),reviewedBy:ro("reviewed_by"),reviewNote:S("review_note"),metadata:Ss("metadata"),createdAt:yn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:yn("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ks,text as Me,timestamp as Tn,jsonb as Ps,uuid as Os,uniqueIndex as Cs,index as wn}from"drizzle-orm/pg-core";var An=Ks("harness_releases",{id:Os("id").primaryKey().defaultRandom(),harness:Me("harness").notNull(),version:Me("version").notNull(),publishedAt:Tn("published_at",{withTimezone:!0}).notNull(),title:Me("title"),body:Me("body"),categories:Ps("categories").default({}),url:Me("url"),createdAt:Tn("created_at",{withTimezone:!0}).defaultNow()},e=>[Cs("idx_harness_releases_unique").on(e.harness,e.version),wn("idx_harness_releases_harness").on(e.harness),wn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as qs,text as he,timestamp as zn,jsonb as Ms,uuid as Dn,index as bn,uniqueIndex as Ls}from"drizzle-orm/pg-core";var so=qs("notifications",{id:Dn("id").primaryKey().defaultRandom(),userId:Dn("user_id").notNull(),type:he("type").notNull(),title:he("title").notNull(),body:he("body"),url:he("url"),sourceTable:he("source_table"),sourceId:he("source_id"),metadata:Ms("metadata").notNull().default({}),readAt:zn("read_at",{withTimezone:!0}),createdAt:zn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[bn("idx_notifications_user_created").on(e.userId,e.createdAt),bn("idx_notifications_user_unread").on(e.userId),Ls("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Bs,text as Le,timestamp as Be,jsonb as io,uuid as ao,index as gt,integer as Us}from"drizzle-orm/pg-core";var ye=Bs("launch_jobs",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull(),tool:Le("tool").notNull(),status:Le("status").notNull().default("pending"),config:io("config").notNull().default({}),result:io("result"),error:Le("error"),attempts:Us("attempts").notNull().default(0),taskKind:Le("task_kind"),payload:io("payload"),claimedBy:Le("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}),runId:ao("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 jn,uuid as K,text as Ue,real as Hs,timestamp as vt,boolean as Vs,uniqueIndex as Fs,index as He}from"drizzle-orm/pg-core";var uo=jn("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:Ue("project_path").notNull(),projectId:K("project_id").references(()=>r.id,{onDelete:"set null"}),score:Hs("score").notNull(),reason:Ue("reason").notNull(),generatedAt:vt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Vs("is_stale").notNull().default(!1),dismissedAt:vt("dismissed_at",{withTimezone:!0}),acceptedAt:vt("accepted_at",{withTimezone:!0}),promotedToInstructionId:K("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Fs("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),He("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),He("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),He("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Rn=jn("instruction_suggestion_events",{id:K("id").primaryKey().defaultRandom(),suggestionId:K("suggestion_id").notNull().references(()=>uo.id,{onDelete:"cascade"}),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:Ue("event_type").notNull(),tool:Ue("tool"),sessionId:K("session_id"),projectPath:Ue("project_path").notNull(),createdAt:vt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[He("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),He("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Gs,text as lo,integer as Js,numeric as Ve,timestamp as co,index as Ys,primaryKey as Qs}from"drizzle-orm/pg-core";var kn=Gs("model_pricing",{provider:lo("provider").notNull(),modelId:lo("model_id").notNull(),inputPerM:Ve("input_per_m").notNull(),outputPerM:Ve("output_per_m").notNull(),cacheReadPerM:Ve("cache_read_per_m").notNull(),cacheWrite5mPerM:Ve("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:Ve("cache_write_1h_per_m").notNull(),contextWindow:Js("context_window"),effectiveFrom:co("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:co("effective_until",{withTimezone:!0}),source:lo("source").notNull(),verifiedAt:co("verified_at",{withTimezone:!0})},e=>[Qs({columns:[e.provider,e.modelId,e.effectiveFrom]}),Ys("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Ws,text as $,numeric as En,timestamp as Sn,uuid as Kn,jsonb as Xs,index as Pn}from"drizzle-orm/pg-core";var On=Ws("limit_observations",{id:Kn("id").primaryKey().defaultRandom(),observedAt:Sn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:$("provider").notNull(),plan:$("plan").notNull(),limitType:$("limit_type").notNull(),value:En("value").notNull(),unit:$("unit").notNull(),comparator:$("comparator").notNull().default("="),resetsAt:Sn("resets_at",{withTimezone:!0}),sourceType:$("source_type").notNull(),sourceUrl:$("source_url"),sourceEvidence:Xs("source_evidence"),confidence:En("confidence").notNull(),userId:Kn("user_id")},e=>[Pn("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),Pn("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as $s,text as ht,timestamp as Zs,uuid as ei,jsonb as ti,boolean as oi,uniqueIndex as ni}from"drizzle-orm/pg-core";var Cn=$s("provider_docs_snapshots",{id:ei("id").primaryKey().defaultRandom(),fetchedAt:Zs("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:ht("provider").notNull(),docUrl:ht("doc_url").notNull(),contentHash:ht("content_hash").notNull(),content:ht("content").notNull(),parseSuccess:oi("parse_success").notNull(),parseErrors:ti("parse_errors")},e=>[ni("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as ri,text as yt,numeric as qn,timestamp as Mn,uuid as si,primaryKey as ii,index as ai}from"drizzle-orm/pg-core";var Ln=ri("plan_limits_active",{provider:yt("provider").notNull(),plan:yt("plan").notNull(),limitType:yt("limit_type").notNull(),value:qn("value").notNull(),unit:yt("unit").notNull(),effectiveFrom:Mn("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Mn("effective_until",{withTimezone:!0}),confidence:qn("confidence").notNull(),sourceObservationIds:si("source_observation_ids").array().notNull()},e=>[ii({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),ai("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as di,text as mo,timestamp as ui,uuid as Bn,jsonb as li,index as ci}from"drizzle-orm/pg-core";var Un=di("alert_dispatches",{id:Bn("id").primaryKey().defaultRandom(),userId:Bn("user_id").notNull(),alertKey:mo("alert_key").notNull(),severity:mo("severity").notNull(),lastDispatchedAt:ui("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:li("last_state").notNull(),channel:mo("channel").notNull()},e=>[ci("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{drizzle as Jn}from"drizzle-orm/postgres-js";import Yn from"postgres";var It={};mr(It,{agentJobs:()=>_n,agentRuns:()=>_,agentRunsRelations:()=>zi,alertDispatches:()=>Un,announcementDeliveries:()=>Po,announcements:()=>Ko,apiKeys:()=>ge,apiKeysRelations:()=>pi,benchmarks:()=>pe,benchmarksRelations:()=>qi,cliErrorEvents:()=>nn,cliSetupEvents:()=>tn,contentBlobs:()=>ln,contextSnapshots:()=>H,contextSnapshotsRelations:()=>Hi,evalConversations:()=>ve,evalConversationsRelations:()=>Ui,evalJobs:()=>Ne,evalJobsRelations:()=>Bi,evalRuns:()=>B,evalRunsRelations:()=>Ci,evalTargets:()=>s,evalTargetsRelations:()=>Pi,evals:()=>E,evalsRelations:()=>Oi,extensionAuthCodes:()=>gn,harnessReleases:()=>An,insightsJobs:()=>fn,instructionEvents:()=>ae,instructionEventsRelations:()=>hi,instructionSuggestionEvents:()=>Rn,instructionSuggestions:()=>uo,instructionUsageEvents:()=>ce,instructionUsageEventsRelations:()=>Ki,instructionVersions:()=>oe,instructionVersionsRelations:()=>Ii,instructions:()=>n,instructionsRelations:()=>vi,launchJobs:()=>ye,launchJobsRelations:()=>Di,limitObservations:()=>On,memories:()=>v,memoriesRelations:()=>yi,memoryExperiments:()=>So,modelPricing:()=>kn,notificationPreferences:()=>Oo,notifications:()=>so,optimizationRuns:()=>xe,optimizationRunsRelations:()=>Li,orgInvitations:()=>D,orgInvitationsRelations:()=>xi,organizations:()=>u,organizationsRelations:()=>_i,packInstructions:()=>L,packInstructionsRelations:()=>Si,packs:()=>y,packsRelations:()=>Ei,pendingTreatmentExposures:()=>Ho,planLimitsActive:()=>Ln,profiles:()=>o,profilesRelations:()=>mi,projectCheckouts:()=>Do,projectInstructions:()=>O,projectInstructionsRelations:()=>wi,projects:()=>r,projectsRelations:()=>Ti,providerDocsSnapshots:()=>Cn,sessionEvents:()=>re,sessionEventsRelations:()=>bi,sessionInstructions:()=>C,sessionInstructionsRelations:()=>ji,sessionSendJobs:()=>Go,sessionTerminalTargets:()=>rt,sessions:()=>d,sessionsRelations:()=>Ai,skillSubmissions:()=>In,teams:()=>x,teamsRelations:()=>fi,treatmentAssignments:()=>b,treatmentAssignmentsRelations:()=>Ri,treatmentExposures:()=>j,treatmentExposuresRelations:()=>ki,triggerEvals:()=>fe,triggerEvalsRelations:()=>Mi,userOrganizations:()=>ee,userOrganizationsRelations:()=>Ni,userTeams:()=>te,userTeamsRelations:()=>gi,workerConnections:()=>$o});import{relations as i}from"drizzle-orm";var mi=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(H),apiKeys:e(ge)})),pi=i(ge,({one:e})=>({profile:e(o,{fields:[ge.userId],references:[o.id]})})),_i=i(u,({many:e})=>({teams:e(x),userOrganizations:e(ee),projects:e(r),invitations:e(D)})),fi=i(x,({one:e,many:t})=>({organization:e(u,{fields:[x.orgId],references:[u.id]}),userTeams:t(te),invitations:t(D)})),xi=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]})})),Ni=i(ee,({one:e})=>({organization:e(u,{fields:[ee.orgId],references:[u.id]})})),gi=i(te,({one:e})=>({team:e(x,{fields:[te.teamId],references:[x.id]})})),vi=i(n,({one:e,many:t})=>({versions:t(oe),projectInstructions:t(O),events:t(ae),usageEvents:t(ce),sessionInstructions:t(C),packInstructions:t(L),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),hi=i(ae,({one:e})=>({instruction:e(n,{fields:[ae.instructionId],references:[n.id]})})),yi=i(v,({one:e,many:t})=>({project:e(r,{fields:[v.projectId],references:[r.id]}),parent:e(v,{fields:[v.parentId],references:[v.id]}),versions:t(v)})),Ii=i(oe,({one:e})=>({instruction:e(n,{fields:[oe.instructionId],references:[n.id]})})),Ti=i(r,({one:e,many:t})=>({organization:e(u,{fields:[r.orgId],references:[u.id]}),projectInstructions:t(O),sessions:t(d)})),wi=i(O,({one:e})=>({project:e(r,{fields:[O.projectId],references:[r.id]}),instruction:e(n,{fields:[O.instructionId],references:[n.id]})})),Ai=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)})),zi=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(ye)})),Di=i(ye,({one:e})=>({run:e(_,{fields:[ye.runId],references:[_.id]})})),bi=i(re,({one:e})=>({session:e(d,{fields:[re.sessionId],references:[d.id]})})),ji=i(C,({one:e})=>({session:e(d,{fields:[C.sessionId],references:[d.id]}),instruction:e(n,{fields:[C.instructionId],references:[n.id]})})),Ri=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)})),ki=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]})})),Ei=i(y,({one:e,many:t})=>({packInstructions:t(L),forkedFrom:e(y,{fields:[y.forkedFromId],references:[y.id]})})),Si=i(L,({one:e})=>({pack:e(y,{fields:[L.packId],references:[y.id]}),instruction:e(n,{fields:[L.instructionId],references:[n.id]})})),Ki=i(ce,({one:e})=>({instruction:e(n,{fields:[ce.instructionId],references:[n.id]})})),Pi=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(E),evalRuns:t(B),benchmarks:t(pe),triggerEvals:t(fe),optimizationRuns:t(xe),evalJobs:t(Ne),evalConversations:t(ve)})),Oi=i(E,({one:e,many:t})=>({evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]}),runs:t(B)})),Ci=i(B,({one:e})=>({eval:e(E,{fields:[B.evalId],references:[E.id]}),evalTarget:e(s,{fields:[B.evalTargetId],references:[s.id]})})),qi=i(pe,({one:e})=>({evalTarget:e(s,{fields:[pe.evalTargetId],references:[s.id]})})),Mi=i(fe,({one:e})=>({evalTarget:e(s,{fields:[fe.evalTargetId],references:[s.id]})})),Li=i(xe,({one:e})=>({evalTarget:e(s,{fields:[xe.evalTargetId],references:[s.id]})})),Bi=i(Ne,({one:e})=>({evalTarget:e(s,{fields:[Ne.evalTargetId],references:[s.id]})})),Ui=i(ve,({one:e})=>({evalTarget:e(s,{fields:[ve.evalTargetId],references:[s.id]})})),Hi=i(H,({one:e})=>({session:e(d,{fields:[H.sessionId],references:[d.id]}),profile:e(o,{fields:[H.userId],references:[o.id]})}));var Fe=0,Hn=0,Ge=0,Vn=0;var Vi=0;function po(){Fe++,Fe>Hn&&(Hn=Fe)}m(po,"trackDbOpStart");function _o(){Fe>0&&Fe--}m(_o,"trackDbOpEnd");function fo(){Ge++,Ge>Vn&&(Vn=Ge)}m(fo,"trackHeavyDbOpStart");function xo(){Ge>0&&Ge--}m(xo,"trackHeavyDbOpEnd");function Fn(){Vi++}m(Fn,"recordQueryDeadline");var wt,zt,No=!1,Tt;var Gn,Dt,At;function Qn(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(Qn,"getEnv");function Wn(){if(No)throw new Error("getDb() 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",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;zt=Yn(Qn("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}:{}}}),wt=Jn(zt,{schema:It})}return wt}m(Wn,"getDb");function Xn(){if(No)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!At){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Dt=Yn(Qn("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}}),At=Jn(Dt,{schema:It})}return At}m(Xn,"getHeavyDb");async function Fi(){if(Tt)return Tt;No=!0;let e=zt,t=Gn,a=Dt;return zt=void 0,wt=void 0,Gn=void 0,Dt=void 0,At=void 0,Tt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),Tt}m(Fi,"closeDb");var Gi=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function $n(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Gi.has(a)}m($n,"isRetryableConnectError");var Ji=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Zn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Ji.has(a)}m(Zn,"isRetryableResetError");async function er(e,t={}){let a=t.attempts??3,l=t.baseMs??100,c;for(let p=0;p<a;p++)try{return await e()}catch(N){c=N;let Ie=$n(N)||t.retryResets===!0&&Zn(N);if(p===a-1||!Ie)throw N;await new Promise(V=>setTimeout(V,l*2**p))}throw c}m(er,"withDbRetry");var bt=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 tr(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(tr,"queryDeadlineMs");function Yi(e,t){let a,l=new Promise((c,p)=>{a=setTimeout(()=>{Fn(),p(new bt(t))},t);let N=a;typeof N.unref=="function"&&N.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}m(Yi,"raceWithDeadline");var or=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),nr=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function go(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(c,p,N){if(p==="then"){let V=Reflect.get(c,p,N);return typeof V!="function"?V:(ir,ar)=>{let dr=l?fo:po,ur=l?xo:_o;dr();let vo=er(()=>new Promise((lr,cr)=>V.call(c,lr,cr)),{retryResets:t});return(a>0?Yi(vo,a):vo).finally(ur).then(ir,ar)}}let Ie=Reflect.get(c,p,N);return typeof Ie=="function"?(...V)=>go(Ie.apply(c,V),t,a,l):Ie}})}m(go,"wrapBuilder");function rr(e,t=!1){let a=t?fo:po,l=t?xo:_o;a();try{return Promise.resolve(e()).finally(l)}catch(c){throw l(),c}}m(rr,"gaugeTransaction");var sr=new Proxy({},{get(e,t){let a=Wn(),l=a[t];if(typeof t=="string"&&or.has(t)&&typeof l=="function"){let c=nr.has(t),p=tr();return(...N)=>go(l.apply(a,N),c,p)}return t==="transaction"&&typeof l=="function"?(...c)=>rr(()=>l.apply(a,c)):l}}),Qi=new Proxy({},{get(e,t){let a=Xn(),l=a[t];if(typeof t=="string"&&or.has(t)&&typeof l=="function"){let c=nr.has(t);return(...p)=>go(l.apply(a,p),c,0,!0)}return t==="transaction"&&typeof l=="function"?(...c)=>rr(()=>l.apply(a,c),!0):l}});export{o as a,_ as b,d as c,re as d,v as e,So as f,Ko as g,Po as h,Oo as i,Wn as j,Fi as k};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as i}from"./chunk-
|
|
1
|
+
import{a as i}from"./chunk-FJJ54GK3.js";import{h as s}from"./chunk-H2ORWIEY.js";import{a as n}from"./chunk-ZLLER3HP.js";async function l(a,c){let{mirrorId:g,evalTargetId:p,config:r}=a,e=n(o=>c.logger.info(o),"log");await i(r,p,e);let t={type:"conversation",conversationId:r.conversationId};return await s(`/api/eval-jobs/${g}/state`,{result:t}).catch(o=>{e(`result persist failed: ${o instanceof Error?o.message:String(o)}`)}),t}n(l,"processConversation");export{l as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as N}from"./chunk-5RBLIVBF.js";import{a as S}from"./chunk-QUUN6A7E.js";import{a as T}from"./chunk-6V4WM73L.js";import{a as G}from"./chunk-5XP7WWJR.js";import{a as C}from"./chunk-5BMBVTAE.js";import{a as x}from"./chunk-QH7VY5HJ.js";import{e as k,f as E,h as d}from"./chunk-H2ORWIEY.js";import{a as h}from"./chunk-ZLLER3HP.js";async function W(v,f){let{mirrorId:s,evalTargetId:g,config:o}=v,a=h(e=>f.logger.info(e),"log"),i=await k(`/api/eval-targets/${g}`),$=await k(`/api/eval-targets/${g}/evals`);if($.length===0&&o.generateIfEmpty){a("No eval cases on target \u2014 generating from content via local LLM...");let e=await G({content:i.content,name:i.name});if(e===null)throw new Error("Case generation requires an LLM backend (claude CLI on PATH or ANTHROPIC_API_KEY) \u2014 none available on this worker.");let t=[];for(let n of e)t.push(await E(`/api/eval-targets/${g}/evals`,n));$=t,a(`Generated ${t.length} eval case(s)`)}if($.length===0)throw new N("No evals defined for target");let J=o.runsPerEval??1,R=o.timeout??12e4,j=o.iteration??1,y=new Set;if(f.job.attempts>1)for(let t=0;;t+=100){let n=await k(`/api/eval-targets/${g}/runs?jobId=${s}&limit=100&offset=${t}`);for(let r of n)y.add(`${r.evalId}|${r.configuration}|${r.runNumber}|${r.iteration}`);if(n.length<100)break}let _=[{name:"with_target",content:i.content}];o.skipBaseline||_.push({name:"without_target"});let m=[];for(let e of $)for(let t of _)for(let n=1;n<=J;n++)y.has(`${e.id}|${t.name}|${n}|${j}`)||m.push({eval_:e,configuration:t.name,targetContent:t.content,runNumber:n});y.size>0&&a(`Resuming attempt ${f.job.attempts}: ${y.size} run(s) already persisted, ${m.length} remaining`);let l=m.length,u=0,c=Math.min(o.parallel??1,4);await d(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:0,current:null,message:`Starting ${l} eval runs (concurrency: ${c})...`}});let b=[];async function I(e){let t=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;a(`[${u+1}/${l}] ${t}`);let n=c>1?T():null;try{let r=await x({prompt:e.eval_.prompt,targetContent:e.targetContent,workDir:n?.workDir,timeout:R,model:o.model}),p={};return!o.skipGrading&&e.eval_.expectations.length>0&&!r.error&&(p=await C({prompt:e.eval_.prompt,output:r.output,expectations:e.eval_.expectations,model:o.graderModel??o.model,timeout:R})),{jobId:s,evalId:e.eval_.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:e.configuration,runNumber:e.runNumber,iteration:j,status:r.error?"failed":"completed",outputs:r.error?{error:r.error}:{transcript:r.output},timing:{duration_ms:r.durationMs,total_tokens:r.totalTokens},grading:p,worktree:n?.isWorktree?!0:void 0}}finally{n?.cleanup()}}if(h(I,"processItem"),c<=1)for(let e of m){let t=`${e.configuration} \xB7 ${e.eval_.name} \xB7 run#${e.runNumber}`;await d(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Executing ${t}...`}});let n=await I(e);await E("/api/eval-runs",n),b.push(n),u++,await d(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:t,message:`Completed ${t}`}})}else{a(`Running ${l} evals with concurrency=${c} (worktree isolation)`);for(let e=0;e<m.length;e+=c){let t=m.slice(e,e+c),n=`batch ${Math.floor(e/c)+1}/${Math.ceil(m.length/c)}`;await d(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Executing ${n} (${t.length} parallel)...`}});let r=await Promise.all(t.map(I));for(let p of r)await E("/api/eval-runs",p),b.push(p),u++;await d(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Completed ${n}`}})}}let P=z(b),w;if(!o.skipGrading&&b.some(e=>e.grading&&Object.keys(e.grading).length>0))try{a(`Running meta-judge for job ${s}...`);let e=$.map(t=>{let r=b.filter(p=>p.evalId===t.id&&p.configuration==="with_target")[0];return{evalName:t.name,prompt:t.prompt,expectations:t.expectations,grading:r?.grading?r.grading:null,output:r?.outputs?.transcript?.slice(0,500)}});w=await S({targetName:i.name,evalResults:e,model:o.graderModel??o.model,timeout:6e4}),a(`Meta-judge: quality=${w.quality_score}/5, issues=${w.issues.length}`)}catch(e){a(`Meta-judge failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}let M=w?{...P,meta_judgement:w}:P;return a(`Job ${s} completed: ${u}/${l} runs`),await d(`/api/eval-jobs/${s}/state`,{result:M}).catch(e=>{a(`result persist failed: ${e instanceof Error?e.message:String(e)}`)}),M}h(W,"processEval");function z(v){let f=v.filter(a=>a.status==="completed"),s=v.filter(a=>a.status==="failed"),g=f.filter(a=>{let i=a.grading;return i&&Object.keys(i).length>0}),o=g.length>0?g.reduce((a,i)=>a+(i.grading?.summary?.pass_rate??0),0)/g.length:null;return{total:v.length,completed:f.length,failed:s.length,avgPassRate:o}}h(z,"buildSummary");export{W as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as R}from"./chunk-6QKI756T.js";import{a as P}from"./chunk-5RBLIVBF.js";import{b as s,c as r,j}from"./chunk-
|
|
1
|
+
import{c as R}from"./chunk-6QKI756T.js";import{a as P}from"./chunk-5RBLIVBF.js";import{b as s,c as r,j}from"./chunk-7574DMOC.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as m,d as p}from"./chunk-ZL4MZMUK.js";import{a as C}from"./chunk-N7TGRFVZ.js";import{g as c,j as f}from"./chunk-
|
|
1
|
+
import{c as m,d as p}from"./chunk-ZL4MZMUK.js";import{a as C}from"./chunk-N7TGRFVZ.js";import{g as c,j as f}from"./chunk-7574DMOC.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};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{a as $}from"./chunk-5XP7WWJR.js";import{a as C}from"./chunk-PTPDOYWP.js";import{a as y}from"./chunk-5BMBVTAE.js";import{a as f}from"./chunk-QH7VY5HJ.js";import{e as h,f as w}from"./chunk-H2ORWIEY.js";import{a as v}from"./chunk-ZLLER3HP.js";async function N(n,i,p){let{conversationId:a,messageId:g,messageContent:r}=n,o=await h(`/api/eval-targets/${i}`),c=await h(`/api/eval-targets/${i}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),t=e.findIndex(l=>l.id===g);if(t>=0&&e.slice(t+1).some(u=>u.role==="assistant"&&(u.type==="results"||u.type==="proposal"||u.type==="generated"||u.type==="text"))){p(`Message ${g} already processed \u2014 skipping (idempotency guard)`);return}let s=v(async(l,u,m)=>{await w(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:u,data:m})},"postMessage"),d=await _(o,c,e,r,p);p(`Action: ${d.action}`);try{switch(d.action){case"run_evals":await x(o,c,a,s,p);break;case"generate_cases":await k(o,i,a,s,p);break;case"analyze_results":case"propose_changes":await E(o,c,e,r,a,s,p);break;case"respond":await s(d.response,"text");break}}catch(l){let u=l instanceof Error?l.message:String(l);throw await s(`Something went wrong: ${u}`,"text").catch(()=>{}),l}}v(N,"processConversationJob");async function _(n,i,p,a,g){let r=p.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
|
|
2
|
+
`),o=`You are an eval assistant. Decide what action to take based on the user's message.
|
|
3
|
+
|
|
4
|
+
## Current State
|
|
5
|
+
- Eval target: "${n.name}" v${n.version} (${n.type})
|
|
6
|
+
- Eval cases: ${i.length} defined${i.length>0?` (${i.map(e=>e.name).join(", ")})`:""}
|
|
7
|
+
- Content length: ${n.content.length} chars
|
|
8
|
+
|
|
9
|
+
## Recent Conversation
|
|
10
|
+
${r}
|
|
11
|
+
|
|
12
|
+
## User's Latest Message
|
|
13
|
+
${a}
|
|
14
|
+
|
|
15
|
+
## Available Actions
|
|
16
|
+
- run_evals: Run all eval cases against the current version (target content injected; no baseline arm). Choose this when the user wants to test, evaluate, or see how the instruction performs.
|
|
17
|
+
- generate_cases: Auto-generate eval test cases from the instruction content. Choose this when there are no eval cases (${i.length} currently) or user asks to create/generate tests.
|
|
18
|
+
- analyze_results: Analyze recent eval failures and propose improvements based on user feedback. Choose this when user gives qualitative feedback like "this is wrong", "missing X", etc.
|
|
19
|
+
- propose_changes: Propose specific content edits based on conversation. Choose this when user asks for improvements or changes.
|
|
20
|
+
- respond: Just answer a question without running any evals. Choose this for informational questions.
|
|
21
|
+
|
|
22
|
+
Respond with ONLY valid JSON:
|
|
23
|
+
{"action": "run_evals", "response": "What you want to say to the user", "params": {}}`,c=await f({prompt:o,timeout:3e4});try{let e=c.output.trim(),t=e.match(/\{[\s\S]*\}/);return t&&(e=t[0]),JSON.parse(e)}catch{g("Failed to parse action decision, defaulting to respond");let e=a.toLowerCase();return e.includes("run")||e.includes("test")||e.includes("eval")?{action:"run_evals",response:"Running evals now..."}:e.includes("generate")||e.includes("create")||i.length===0&&e.includes("start")?{action:"generate_cases",response:"Generating test cases..."}:{action:"respond",response:"I can help you run evals, generate test cases, or analyze results. What would you like to do?"}}}v(_,"decideAction");async function x(n,i,p,a,g){if(i.length===0){await a("No eval cases exist yet. Would you like me to generate some from the instruction content?","text");return}await a(`Running ${i.length} evals against "${n.name}" v${n.version}...`,"status");let r=[];for(let e of i){g(`Running: ${e.name} (with_target)`);let t=await f({prompt:e.prompt,targetContent:n.content,timeout:12e4}),s=!1,d="",l={};!t.error&&e.expectations.length>0&&(l=await y({prompt:e.prompt,output:t.output,expectations:e.expectations,timeout:12e4}),s=l?.summary?.pass_rate>=1,d=l?.expectations?.map(m=>`${m.passed?"PASS":"FAIL"}: ${m.text} \u2014 ${m.evidence}`).join(`
|
|
24
|
+
`)??"");try{await w("/api/eval-runs",{evalId:e.id,evalTargetId:n.id,evalTargetVersion:n.version,configuration:"with_target",status:t.error?"failed":"completed",outputs:t.error?{error:t.error}:{transcript:t.output},timing:{duration_ms:t.durationMs,total_tokens:t.totalTokens},grading:l})}catch(u){g(`eval-run persist failed (non-fatal): ${u instanceof Error?u.message:String(u)}`)}r.push({evalName:e.name,passed:s,output:t.error??t.output.slice(0,2e3),expectations:e.expectations,evidence:d,configuration:"with_target"})}let o=r.filter(e=>e.passed).length,c=r.length;await a(`${o} of ${c} evals passed (${Math.round(o/c*100)}%)`,"results",{summary:{passed:o,failed:c-o,total:c,passRate:o/c},results:r.map(e=>({evalName:e.evalName,passed:e.passed,output:e.output,expectations:e.expectations,evidence:e.evidence}))})}v(x,"handleRunEvals");async function k(n,i,p,a,g){let r=v(t=>t.map(s=>({id:s.id,name:s.name,prompt:s.prompt,expectations:s.expectations})),"showCases"),o=await h(`/api/eval-targets/${n.id}/evals`);if(o.length>0){await a(`This target already has ${o.length} eval case${o.length===1?"":"s"}:`,"generated",{cases:r(o)});return}await a("Generating eval cases from instruction content...","status"),g("Generating cases via local LLM");let c=await $({content:n.content,name:n.name});if(c===null){await a("Case generation needs an LLM backend (claude CLI on PATH or ANTHROPIC_API_KEY) and none is available on this worker \u2014 no cases were created.","text");return}let e=[];for(let t of c)e.push(await w(`/api/eval-targets/${n.id}/evals`,t));await a(`Generated ${e.length} eval cases. Review them below:`,"generated",{cases:r(e)})}v(k,"handleGenerateCases");async function E(n,i,p,a,g,r,o){await r("Analyzing results and preparing improvements...","status");let e=[...p].reverse().find(s=>s.type==="results")?.data?.results?.map(s=>({evalName:s.evalName,prompt:"",expectations:s.expectations??[],grading:{summary:{pass_rate:s.passed?1:0},expectations:s.expectations?.map(d=>({text:d,passed:s.passed,evidence:s.evidence??""}))}}))??[];o(`Analyzing ${e.length} eval results with user feedback`);let t=await C({content:n.content,evalResults:e,model:void 0,timeout:12e4,userFeedback:a});await r(t.overallAssessment,"proposal",{suggestions:t.suggestions,proposedContent:t.proposedContent,fromVersion:n.version})}v(E,"handleAnalyzeAndPropose");export{N as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as B}from"./chunk-N7TGRFVZ.js";import{a as R}from"./chunk-5RBLIVBF.js";import{a as v,g as d,h as n,i as m,j as U}from"./chunk-7574DMOC.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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}$(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,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as I,c as i,d as r,e as a,j as M}from"./chunk-7574DMOC.js";import{f as v}from"./chunk-RTWRHIKY.js";import{a as y}from"./chunk-ZLLER3HP.js";import{eq as u,and as A,desc as E,inArray as j,isNotNull as D,sql as R}from"drizzle-orm";var x=50,k=24e3,C=3,L=3,O=40,P=4e3,X=new Set(["fact","decision","correction","convention"]),$=`You are distilling DURABLE, PROJECT-SPECIFIC knowledge from an AI coding session so a future agent working on the SAME project starts smarter.
|
|
2
2
|
|
|
3
3
|
Extract ONLY facts / decisions / corrections / conventions that will STILL be true and useful in FUTURE sessions \u2014 architecture facts, deliberate design decisions, corrections of a wrong approach, or project conventions.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as e,d as o,j as y}from"./chunk-7574DMOC.js";import{f as d}from"./chunk-RTWRHIKY.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 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as R}from"./chunk-ZL4MZMUK.js";import{d as j,f as y}from"./chunk-RTWRHIKY.js";import{a as S}from"./chunk-TDD7IOV2.js";import{a as p}from"./chunk-MODXEGCU.js";import{e as i,f as l}from"./chunk-H2ORWIEY.js";import{a as g}from"./chunk-ZLLER3HP.js";import{readFileSync as b}from"node:fs";import E from"node:path";import $ from"node:os";var N=5,L=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),T=48,M=.5,k=400;async function O(){let d=E.join($.homedir(),".config","rulemetric","skills-registry.json");try{let o=b(d,"utf-8"),s=JSON.parse(o);return Date.now()-new Date(s.generatedAt).getTime()>T*60*60*1e3}catch{return!0}}g(O,"checkSkillsRegistryStale");var X=g(async(d,o)=>{let s=j();if(s==="none"){o.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping suggestion compute");return}o.logger.info(`Scoring backend: ${s}`);let r;try{r=(await i("/api/sessions/project-paths?limit="+L)).projectPaths}catch(e){o.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(r.length===0){o.logger.info("No recent project paths; nothing to score");return}let m=new Map;try{let e=await i("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&m.set(p(t.primaryCheckoutPath),t.id)}catch(e){o.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let a=new Map;try{let e=await i("/api/catalog?limit=200");for(let t of e)a.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,k)})}catch(e){o.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await i("/api/instructions?limit=100");for(let t of e.instructions??[])a.has(t.id)||a.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,k)})}catch(e){o.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let c=[...a.values()];if(c.length===0){o.logger.info("No candidate instructions; nothing to score");return}o.logger.info(`Scoring ${c.length} candidates across ${r.length} project(s)`);let u=0;for(let e of r)try{let t=p(e),f=S(t);if(f.length===0){o.logger.info(`Skipping ${t}: insufficient language signals`);continue}let C={name:E.basename(t),description:null,languages:f,topics:[],dependencies:[]},I=R(C,c),w=await y(I,"",4096);if(!w){o.logger.warn(`LLM returned null for ${t} (backend ${s})`);continue}let P=(w.recommendations??[]).filter(n=>typeof n.instructionId=="string"&&typeof n.score=="number"&&typeof n.reason=="string").map(n=>({instructionId:n.instructionId,score:n.score,reason:n.reason})).filter(n=>n.score>=M).sort((n,_)=>_.score-n.score).slice(0,N);if(P.length===0){o.logger.info(`No suggestions over threshold for ${t}`);continue}let h=m.get(t);await l("/api/instruction-suggestions/batch-upsert",{projectPath:t,...h?{projectId:h}:{},suggestions:P.map(n=>({instructionId:n.instructionId,score:n.score,reason:n.reason}))}),u++}catch(t){o.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}if(await O())try{await l("/api/instruction-suggestions/mark-stale",{}),o.logger.warn("Skills registry is stale (>48h); marked all suggestions stale")}catch{}o.logger.info(`Done: scored ${u}/${r.length} projects`)},"cronSuggestInstructions");export{X as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as S,b as z,c as T}from"./chunk-QFVGUZDO.js";import{
|
|
1
|
+
import{a as S,b as z,c as T}from"./chunk-QFVGUZDO.js";import{a as O}from"./chunk-ZL4MZMUK.js";import{a as j}from"./chunk-5RBLIVBF.js";import{c as A,d as C,f as b}from"./chunk-RTWRHIKY.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{a as r}from"./chunk-ZLLER3HP.js";var a=[{prefix:"contains:",kind:"contains"},{prefix:"icontains:",kind:"icontains"},{prefix:"not-contains:",kind:"not-contains"},{prefix:"regex:",kind:"regex"}];function o(e){if(e.trim()==="json-valid")return{kind:"json-valid",arg:""};for(let{prefix:n,kind:i}of a)if(e.startsWith(n))return{kind:i,arg:e.slice(n.length).trim()};return null}r(o,"parseDeterministicExpectation");function d(e,n){switch(e.kind){case"contains":return n.includes(e.arg)?{passed:!0,evidence:`Output contains "${e.arg}"`}:{passed:!1,evidence:`"${e.arg}" not found in output`};case"icontains":return n.toLowerCase().includes(e.arg.toLowerCase())?{passed:!0,evidence:`Output contains "${e.arg}" (case-insensitive)`}:{passed:!1,evidence:`"${e.arg}" not found in output (case-insensitive)`};case"not-contains":return n.includes(e.arg)?{passed:!1,evidence:`Forbidden substring "${e.arg}" is present in output`}:{passed:!0,evidence:`"${e.arg}" is absent from output`};case"regex":{let i;try{i=new RegExp(e.arg)}catch(s){return{passed:!1,evidence:`Invalid regex "${e.arg}": ${s instanceof Error?s.message:String(s)}`}}let t=n.match(i);return t?{passed:!0,evidence:`Pattern matched: "${t[0]}"`}:{passed:!1,evidence:`Pattern /${e.arg}/ did not match output`}}case"json-valid":{let i=[n.trim()],t=n.match(/```(?:json)?\s*([\s\S]*?)```/);t&&i.push(t[1].trim());for(let s of i)try{return JSON.parse(s),{passed:!0,evidence:"Output parses as valid JSON"}}catch{}return{passed:!1,evidence:"No parseable JSON found in output (checked whole output and fenced blocks)"}}}}r(d,"runDeterministicCheck");export{o as a,d as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as L}from"./chunk-TIOKY2IA.js";import{a as
|
|
1
|
+
import{c as L}from"./chunk-TIOKY2IA.js";import{a as A}from"./chunk-LMHLQ2RB.js";import{a as E}from"./chunk-7SZX7C7U.js";import{a as b}from"./chunk-AIGR5AYV.js";import{a as h}from"./chunk-RFMFABN2.js";import{b as I}from"./chunk-W2MOTOQE.js";import{a as R}from"./chunk-42HTXLNB.js";import{a as H}from"./chunk-AN4DKFLK.js";import{a as S}from"./chunk-RSKQRVPJ.js";import{a as M}from"./chunk-KAF3CYRW.js";import{a as k}from"./chunk-UF6US7VU.js";import{a as v}from"./chunk-O3C5IV2Y.js";import{b as y}from"./chunk-HIDJIABB.js";import{a as T}from"./chunk-HA77SJ4C.js";import{b as w}from"./chunk-5RBLIVBF.js";import{b as f,e as _,f as p}from"./chunk-H2ORWIEY.js";import{a as s}from"./chunk-ZLLER3HP.js";var V={process_eval:b,process_insights:h,process_launch:I,process_send_message:S,process_conversation:E,process_session_goal:A,distill_memories:y,memory_ab:R,process_announcement:T,process_run_cleanup:H,cron_suggest_instructions:v,cron_refresh_skills:k,cron_refresh_pricing:M},N=Object.keys(V),O=new Set(["process_session_goal","process_announcement","process_run_cleanup","distill_memories","memory_ab"]);function W(e=process.env){return e.DATABASE_URL?N:N.filter(n=>!O.has(n))}s(W,"availableCapabilities");var $=3e4,B=3e4,F=3e4,P=250,D=5e3,J=`thin-agent-${process.pid}`,g=null;function U(e,n,r,l){let a=s(t=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:J,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"),F);n.addEventListener("abort",()=>{clearInterval(d),a("shutting_down")},{once:!0})}s(U,"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 C(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(C,"abortableSleep");async function K(e,n){let r=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${n}`,l=await _(`/api/work/next?${r}`);return l==null||typeof l=="string"?null:l}s(K,"pollForWork");function G(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(G,"makeHelpers");async function q(e,n,r){let l=V[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=G(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(q,"runOne");async function me(e){let n=e.log??(()=>{}),r=e.pollWaitMs??$,l=e.heartbeatIntervalMs??B,a=e.capabilities??W(),d=P;o(n,{event:"agent_start",capabilities:a,pollWaitMs:r,heartbeatIntervalMs:l}),U(a,e.signal,n,e.version),L({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 K(a,r)}catch(u){let x=u instanceof f?u.statusCode:void 0;if(o(n,{event:"poll_error",status:x,error:u instanceof Error?u.message:String(u)}),!await C(d,e.signal))break;d=Math.min(d*2,D);continue}if(!i){if(o(n,{event:"poll_204"}),!await C(d,e.signal))break;d=Math.min(d*2,D);continue}d=P,await q(i,l,n)}o(n,{event:"agent_stop"})}s(me,"runAgentLoop");export{V as a,N as b,W as c,K as d,me as e};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{e as N}from"../../chunk-
|
|
1
|
+
import{e as N}from"../../chunk-XD64BT77.js";import"../../chunk-TIOKY2IA.js";import"../../chunk-LMHLQ2RB.js";import"../../chunk-7SZX7C7U.js";import"../../chunk-AIGR5AYV.js";import"../../chunk-RFMFABN2.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-W2MOTOQE.js";import"../../chunk-42HTXLNB.js";import"../../chunk-AN4DKFLK.js";import"../../chunk-6QKI756T.js";import"../../chunk-RSKQRVPJ.js";import"../../chunk-KAF3CYRW.js";import"../../chunk-UF6US7VU.js";import"../../chunk-O3C5IV2Y.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-HIDJIABB.js";import"../../chunk-HA77SJ4C.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-5RBLIVBF.js";import{k as f}from"../../chunk-7574DMOC.js";import"../../chunk-FJJ54GK3.js";import"../../chunk-QUUN6A7E.js";import"../../chunk-6V4WM73L.js";import"../../chunk-5XP7WWJR.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-TDD7IOV2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-PTPDOYWP.js";import"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import"../../chunk-QH7VY5HJ.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,16 +1,16 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as P,b as S}from"../../chunk-3UBCK2FS.js";import{a as b}from"../../chunk-QH7VY5HJ.js";import{a as N}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{e as y,f as q,g as w}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as E}from"../../chunk-ZLLER3HP.js";import{Args as Q,Flags as v}from"@oclif/core";var C=process.env.RULEMETRIC_WEB_URL??"https://rulemetric.com",_=30*6e4,R=class k extends N{static{E(this,"EvalOptimizeDescriptionCommand")}static description="Optimize eval target description for better triggering accuracy";static examples=["<%= config.bin %> evals optimize-description <target-id>","<%= config.bin %> evals optimize-description <target-id> --queries 10"];static args={targetId:Q.string({description:"Eval target ID",required:!0})};static flags={"max-iterations":v.integer({description:"Maximum optimization iterations",default:5}),model:v.string({description:"Model for trigger testing and improvement"}),queries:v.integer({description:"Number of trigger queries to generate",default:20}),"runs-per-query":v.integer({description:"Runs per query for reliability",default:3}),"poll-interval":v.integer({description:"Ms between approval polls",default:5e3}),timeout:v.integer({description:"Timeout per eval in ms",default:12e4})};async run(){let{args:i,flags:t}=await this.parse(k);this.requireAuth();let e=await y(`/api/eval-targets/${i.targetId}`);this.log(`Optimizing description for "${e.name}" v${e.version}`),this.log(`Current description: "${e.description}"`),this.log("Scores measure description-gated invocation choice (catalog decision protocol)."),this.log(""),this.log("Generating trigger queries...");let r=await this.generateTriggerQueries(e,t.queries,t),a=await q(`/api/eval-targets/${i.targetId}/trigger-evals`,{queries:r}),g=`${C}/eval-targets/${i.targetId}`;this.log(`
|
|
2
2
|
Generated ${r.length} trigger queries.`),this.log("Review and approve them at:"),this.log(` ${g}`),this.log(" (Triggers tab \u2192 click to review)"),this.log(`
|
|
3
|
-
Waiting for approval...`);let
|
|
4
|
-
Split: ${
|
|
5
|
-
=== Iteration ${
|
|
6
|
-
=== Optimization Complete ===`),this.log(`Best test accuracy: ${($*100).toFixed(1)}%`),this.log(
|
|
7
|
-
Before: "${e.description}"`),this.log(`After: "${
|
|
3
|
+
Waiting for approval...`);let c=Date.now(),d=!1;for(;!d;){Date.now()-c>_&&this.error(`Timed out after ${_/6e4} minutes waiting for approval. Approve the trigger set at ${g} (Triggers tab) and re-run this command.`),await new Promise(h=>setTimeout(h,t["poll-interval"]));let p=(await y(`/api/eval-targets/${i.targetId}/trigger-evals?status=approved`)).find(h=>h.id===a.id);p&&(d=!0,r.length=0,r.push(...p.queries),this.log("Trigger queries approved!"))}let n=r.map((u,p)=>p).sort(()=>Math.random()-.5),s=Math.ceil(n.length*.6),o=n.slice(0,s),I=n.slice(s);await w(`/api/trigger-evals/${a.id}`,{trainIndices:o,testIndices:I});let x=o.map(u=>r[u]),D=I.map(u=>r[u]);this.log(`
|
|
4
|
+
Split: ${x.length} train, ${D.length} test`);let m=e.description,T=m,$=0;for(let u=1;u<=t["max-iterations"];u++){this.log(`
|
|
5
|
+
=== Iteration ${u} ===`),this.log(`Description: "${m}"`),this.log("Testing train set...");let p=await this.testQuerySet(x,e,m,t),h=S(p);this.log(`Train accuracy: ${(h*100).toFixed(1)}%`),this.printTriggerResults(p),this.log("Testing test set...");let O=await this.testQuerySet(D,e,m,t),f=S(O);if(this.log(`Test accuracy: ${(f*100).toFixed(1)}%`),await q("/api/optimization-runs",{evalTargetId:e.id,type:"description",iteration:u,inputVersion:e.version,trainScore:h,testScore:f,analysis:{description:m,trainResults:p.map(l=>({query:l.query,shouldTrigger:l.shouldTrigger,didTrigger:l.didTrigger,correct:l.correct})),testResults:O.map(l=>({query:l.query,shouldTrigger:l.shouldTrigger,didTrigger:l.didTrigger,correct:l.correct}))},status:"completed"}),f>$&&($=f,T=m),h>=1){this.log("Perfect train score. Stopping.");break}this.log("Generating improved description...");let M=p.filter(l=>!l.correct);m=await this.improveDescription(e,m,M,t)}this.log(`
|
|
6
|
+
=== Optimization Complete ===`),this.log(`Best test accuracy: ${($*100).toFixed(1)}%`),this.log(`
|
|
7
|
+
Before: "${e.description}"`),this.log(`After: "${T}"`),T!==e.description?(await w(`/api/eval-targets/${e.id}`,{description:T}),this.log(`
|
|
8
8
|
Description updated.`)):this.log(`
|
|
9
|
-
No improvement found. Description unchanged.`)}async generateTriggerQueries(i,t,e){let r="";try{let
|
|
9
|
+
No improvement found. Description unchanged.`)}async generateTriggerQueries(i,t,e){let r="";try{let s=(await y("/api/sessions?limit=10")).map(o=>o.firstUserPrompt??o.lastMessagePreview??"").filter(o=>o.trim().length>0).slice(0,5);s.length>0&&(r=`
|
|
10
10
|
|
|
11
11
|
Real user prompts from recent sessions (use as inspiration for realistic queries):
|
|
12
|
-
`+
|
|
13
|
-
`))}catch{}let a=Math.ceil(t/2),g=t-a,
|
|
12
|
+
`+s.map(o=>`- ${o}`).join(`
|
|
13
|
+
`))}catch{}let a=Math.ceil(t/2),g=t-a,c=`Generate ${t} trigger eval queries for a skill/instruction.
|
|
14
14
|
|
|
15
15
|
## Skill Name
|
|
16
16
|
${i.name}
|
|
@@ -35,7 +35,7 @@ Respond with ONLY a valid JSON array:
|
|
|
35
35
|
[
|
|
36
36
|
{"query": "realistic user prompt...", "should_trigger": true},
|
|
37
37
|
{"query": "another prompt...", "should_trigger": false}
|
|
38
|
-
]`,d=await b({prompt:
|
|
38
|
+
]`,d=await b({prompt:c,timeout:e.timeout,model:e.model});try{let n=d.output.trim(),s=n.match(/```(?:json)?\s*([\s\S]*?)```/);s&&(n=s[1].trim());let o=n.match(/\[[\s\S]*\]/);return o&&(n=o[0]),JSON.parse(n)}catch{return[{query:`Help me use ${i.name}`,should_trigger:!0},{query:"Write a hello world program",should_trigger:!1}]}}async testQuerySet(i,t,e,r){let a=[];for(let g of i){let c=[];for(let s=0;s<r["runs-per-query"];s++){let o=await P({query:g.query,shouldTrigger:g.should_trigger,skillName:t.name,skillDescription:e,model:r.model,timeout:r.timeout,variant:s});c.push(o)}let n=c.filter(s=>s.didTrigger).length>r["runs-per-query"]/2;a.push({query:g.query,shouldTrigger:g.should_trigger,didTrigger:n,correct:n===g.should_trigger,confidence:c.reduce((s,o)=>s+o.confidence,0)/c.length,evidence:c[0].evidence})}return a}printTriggerResults(i){for(let t of i){let e=t.correct?"OK":"FAIL",r=t.shouldTrigger?"should trigger":"should NOT trigger",a=t.didTrigger?"triggered":"did NOT trigger";this.log(` [${e}] ${r} / ${a}: "${t.query.slice(0,60)}..."`)}}async improveDescription(i,t,e,r){let a=e.map(d=>`- ${d.shouldTrigger?"SHOULD trigger but DID NOT":"SHOULD NOT trigger but DID"}: "${d.query}"`).join(`
|
|
39
39
|
`),g=`You are optimizing a skill description for better triggering accuracy.
|
|
40
40
|
|
|
41
41
|
## Skill Name
|
|
@@ -56,4 +56,4 @@ Propose an improved description that:
|
|
|
56
56
|
- Uses specific keywords and contexts for when to trigger
|
|
57
57
|
- Includes "Use PROACTIVELY" phrasing for important trigger contexts
|
|
58
58
|
|
|
59
|
-
Respond with ONLY the new description text (no JSON, no explanation, just the description string).`;return(await b({prompt:g,timeout:r.timeout,model:r.model})).output.trim().replace(/^["']|["']$/g,"")}};export{
|
|
59
|
+
Respond with ONLY the new description text (no JSON, no explanation, just the description string).`;return(await b({prompt:g,timeout:r.timeout,model:r.model})).output.trim().replace(/^["']|["']$/g,"")}};export{R as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as A}from"../../chunk-PTPDOYWP.js";import{a as k}from"../../chunk-
|
|
1
|
+
import{a as A}from"../../chunk-PTPDOYWP.js";import{a as k}from"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import{a as z}from"../../chunk-QH7VY5HJ.js";import{a as I}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{e as y,f as m,g as R}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as b}from"../../chunk-ZLLER3HP.js";import{createInterface as C}from"node:readline/promises";import{Args as P,Flags as p}from"@oclif/core";var w=class N extends I{static{b(this,"EvalOptimizeCommand")}static description="Iteratively optimize eval target content using eval results as feedback";static examples=["<%= config.bin %> evals optimize <target-id>","<%= config.bin %> evals optimize <target-id> --auto --max-iterations 3"];static args={targetId:P.string({description:"Eval target ID",required:!0})};static flags={auto:p.boolean({description:"Skip interactive review, apply suggestions automatically",default:!1}),"max-iterations":p.integer({description:"Maximum optimization iterations",default:5}),threshold:p.string({description:"Stop if pass rate reaches this threshold (0-1)",default:"0.95"}),model:p.string({description:"Model for eval execution"}),"analyzer-model":p.string({description:"Model for analysis/suggestions"}),timeout:p.integer({description:"Timeout per eval in ms",default:12e4})};async run(){let{args:a,flags:e}=await this.parse(N);this.requireAuth();let t=await y(`/api/eval-targets/${a.targetId}`),i=await y(`/api/eval-targets/${a.targetId}/evals`);i.length===0&&this.error("No evals found. Create some first with `rulemetric evals create`.");let s=[...i].sort(()=>Math.random()-.5),g=Math.ceil(s.length*.6),u=s.slice(0,g),v=s.slice(g);this.log(`Optimizing "${t.name}" v${t.version}`),this.log(`Evals: ${u.length} train, ${v.length} test`);let h=parseFloat(e.threshold);this.log(`Config: max ${e["max-iterations"]} iterations, threshold ${(h*100).toFixed(0)}%`),e.auto&&this.log("Mode: auto (no interactive review)"),this.log("");let $=t.version,f=0,x=0;for(let r=1;r<=e["max-iterations"];r++){this.log(`
|
|
2
2
|
=== Iteration ${r} ===`),this.log("Running train evals...");let T=await this.runEvalsOnTarget(t,u,e),l=this.computePassRate(T);if(this.log(`Train pass rate: ${(l*100).toFixed(1)}%`),l>=h){this.log(`Train score ${(l*100).toFixed(1)}% >= threshold ${(h*100).toFixed(0)}%. Stopping.`);let o=await this.runEvalsOnTarget(t,v,e),E=this.computePassRate(o);this.log(`Final test score: ${(E*100).toFixed(1)}%`),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:r,inputVersion:t.version,trainScore:l,testScore:E,analysis:{reason:"threshold_reached"},status:"completed"});break}this.log("Analyzing results...");let S=T.map(o=>({evalName:o.evalName,prompt:o.prompt,expectations:o.expectations,grading:o.grading})),n=await A({content:t.content,evalResults:S,model:e["analyzer-model"]??e.model,timeout:e.timeout});this.log(`
|
|
3
3
|
Assessment: ${n.overallAssessment}`),this.log(`Suggestions: ${n.suggestions.length}`);for(let o of n.suggestions)this.log(` - [${o.section}] ${o.reasoning}`);if(n.proposedContent===t.content){this.log("No changes proposed. Stopping."),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:r,inputVersion:t.version,trainScore:l,analysis:{reason:"no_changes"},status:"completed"});break}if(!e.auto&&!await this.confirm(`
|
|
4
4
|
Apply the proposed changes as a new version? [y/N] `)){this.log("Changes not applied. Stopping."),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:r,inputVersion:t.version,trainScore:l,analysis:{reason:"user_declined",suggestions:n.suggestions},status:"completed"});break}let c=await R(`/api/eval-targets/${t.id}`,{content:n.proposedContent});this.log(`Created v${c.version}`),this.log("Running test evals...");let F=await this.runEvalsOnTarget(c,v,e),d=this.computePassRate(F);if(this.log(`Test pass rate: ${(d*100).toFixed(1)}%`),await m("/api/optimization-runs",{evalTargetId:t.id,type:"content",iteration:r,inputVersion:t.version,outputVersion:c.version,trainScore:l,testScore:d,analysis:{suggestions:n.suggestions,overallAssessment:n.overallAssessment},status:"completed"}),d>f)f=d,$=c.version,x=0;else if(x++,x>=2){this.log("No improvement for 2 consecutive iterations. Stopping.");break}t=c}this.log(`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as w}from"../../chunk-
|
|
1
|
+
import{a as w}from"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import{a as _}from"../../chunk-QH7VY5HJ.js";import{a as R}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{e as h,f as k}from"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import{a as $}from"../../chunk-ZLLER3HP.js";import{Args as T,Flags as c}from"@oclif/core";var b=class x extends R{static{$(this,"EvalRunCommand")}static description="Run evals against a target, optionally grade results, and post to API";static examples=["<%= config.bin %> evals run <target-id>","<%= config.bin %> evals run <target-id> --parallel 3 --runs-per-eval 2","<%= config.bin %> evals run <target-id> --skip-baseline --skip-grading"];static args={targetId:T.string({description:"Eval target ID",required:!0})};static flags={parallel:c.integer({description:"Number of parallel eval executions",default:1}),"runs-per-eval":c.integer({description:"Number of runs per eval for variance analysis",default:1}),iteration:c.integer({description:"Iteration number for tracking",default:1}),"skip-baseline":c.boolean({description:"Skip baseline (without_target) runs",default:!1}),"skip-grading":c.boolean({description:"Skip LLM grading step",default:!1}),model:c.string({description:"Model for eval execution (default: user configured)"}),"grader-model":c.string({description:"Model for grading (default: same as execution model)"}),timeout:c.integer({description:"Timeout per eval in ms",default:12e4})};async run(){let{args:f,flags:i}=await this.parse(x);this.requireAuth();let s=await h(`/api/eval-targets/${f.targetId}`),r=await h(`/api/eval-targets/${f.targetId}/evals`);r.length===0&&this.error(`No evals found for target "${s.name}". Create some with \`rulemetric evals create\`.`),this.log(`Running ${r.length} eval(s) for "${s.name}" v${s.version}`),this.log(`Config: ${i["runs-per-eval"]} run(s) per eval, parallel=${i.parallel}, iteration=${i.iteration}`),i["skip-baseline"]&&this.log("Skipping baseline runs"),i["skip-grading"]&&this.log("Skipping grading"),this.log("");let l=[{name:"with_target",content:s.content}];i["skip-baseline"]||l.push({name:"without_target"});let p=[];for(let e of r)for(let a of l)for(let n=1;n<=i["runs-per-eval"];n++)p.push({eval_:e,configuration:a.name,targetContent:a.content,runNumber:n});let o=[],g=i.parallel;for(let e=0;e<p.length;e+=g){let a=p.slice(e,e+g),n=await Promise.all(a.map(m=>this.executeAndGrade(m,s,i)));o.push(...n)}this.log(""),this.log("Posting results to API...");for(let e of o)await k("/api/eval-runs",e);this.log(""),this.log("=== Results Summary ===");for(let e of l){let a=o.filter(t=>t.configuration===e.name),n=a.filter(t=>t.status==="completed"),m=n.filter(t=>Object.keys(t.grading).length>0);if(this.log(`
|
|
2
2
|
${e.name}:`),this.log(` Runs: ${n.length}/${a.length} completed`),m.length>0){let t=m.map(d=>d.grading.summary?.pass_rate??0),u=t.reduce((d,v)=>d+v,0)/t.length;this.log(` Avg pass_rate: ${(u*100).toFixed(1)}%`)}for(let t of a){let u=r.find(I=>I.id===t.evalId)?.name??t.evalId,d=t.grading.summary?.pass_rate,v=d!==void 0?` pass_rate=${(d*100).toFixed(0)}%`:"",y=t.timing.duration_ms?` ${(t.timing.duration_ms/1e3).toFixed(1)}s`:"";this.log(` [${t.status}] ${u} run#${t.runNumber}${v}${y}`)}}if(!i["skip-baseline"]&&o.length>0){let e=o.filter(n=>n.configuration==="with_target"&&Object.keys(n.grading).length>0),a=o.filter(n=>n.configuration==="without_target"&&Object.keys(n.grading).length>0);if(e.length>0&&a.length>0){let n=e.map(u=>u.grading.summary?.pass_rate??0).reduce((u,d)=>u+d,0)/e.length,m=a.map(u=>u.grading.summary?.pass_rate??0).reduce((u,d)=>u+d,0)/a.length,t=n-m;this.log(`
|
|
3
3
|
Delta: ${t>0?"+":""}${(t*100).toFixed(1)}% (with_target vs without_target)`)}}}async executeAndGrade(f,i,s){let{eval_:r,configuration:l,targetContent:p,runNumber:o}=f;this.log(`[${l}] ${r.name} run#${o} \u2014 executing...`);let g=await _({prompt:r.prompt,targetContent:p,timeout:s.timeout,model:s.model});if(g.error)return this.log(`[${l}] ${r.name} run#${o} \u2014 FAILED: ${g.error}`),{evalId:r.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:l,runNumber:o,iteration:s.iteration,status:"failed",outputs:{error:g.error},timing:{duration_ms:g.durationMs,total_tokens:g.totalTokens},grading:{}};this.log(`[${l}] ${r.name} run#${o} \u2014 completed in ${(g.durationMs/1e3).toFixed(1)}s`);let e={};if(!s["skip-grading"]&&r.expectations.length>0){this.log(`[${l}] ${r.name} run#${o} \u2014 grading...`);let a=await w({prompt:r.prompt,output:g.output,expectations:r.expectations,model:s["grader-model"]??s.model,timeout:s.timeout});e=a;let n=a.summary.pass_rate;this.log(`[${l}] ${r.name} run#${o} \u2014 grading done: pass_rate=${(n*100).toFixed(0)}%`)}return{evalId:r.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:l,runNumber:o,iteration:s.iteration,status:"completed",outputs:{transcript:g.output},timing:{duration_ms:g.durationMs,total_tokens:g.totalTokens,total_duration_seconds:g.durationMs/1e3},grading:e}}};export{b as default};
|
package/dist/lib/agent-loop.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"../chunk-
|
|
1
|
+
import{a,b,c,d,e}from"../chunk-XD64BT77.js";import"../chunk-TIOKY2IA.js";import"../chunk-LMHLQ2RB.js";import"../chunk-7SZX7C7U.js";import"../chunk-AIGR5AYV.js";import"../chunk-RFMFABN2.js";import"../chunk-QFVGUZDO.js";import"../chunk-W2MOTOQE.js";import"../chunk-42HTXLNB.js";import"../chunk-AN4DKFLK.js";import"../chunk-6QKI756T.js";import"../chunk-RSKQRVPJ.js";import"../chunk-KAF3CYRW.js";import"../chunk-UF6US7VU.js";import"../chunk-O3C5IV2Y.js";import"../chunk-ZL4MZMUK.js";import"../chunk-HIDJIABB.js";import"../chunk-HA77SJ4C.js";import"../chunk-N7TGRFVZ.js";import"../chunk-5RBLIVBF.js";import"../chunk-7574DMOC.js";import"../chunk-FJJ54GK3.js";import"../chunk-QUUN6A7E.js";import"../chunk-6V4WM73L.js";import"../chunk-5XP7WWJR.js";import"../chunk-RTWRHIKY.js";import"../chunk-TDD7IOV2.js";import"../chunk-MODXEGCU.js";import"../chunk-7DFNBRLY.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import"../chunk-PTPDOYWP.js";import"../chunk-5BMBVTAE.js";import"../chunk-S6B2R2LL.js";import"../chunk-QH7VY5HJ.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}from"../chunk-5XP7WWJR.js";import"../chunk-RTWRHIKY.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import"../chunk-ZLLER3HP.js";export{a as generateEvalCases};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-FJJ54GK3.js";import"../chunk-5XP7WWJR.js";import"../chunk-RTWRHIKY.js";import"../chunk-N7ODX6PO.js";import"../chunk-67QCYUJU.js";import"../chunk-PTPDOYWP.js";import"../chunk-5BMBVTAE.js";import"../chunk-S6B2R2LL.js";import"../chunk-QH7VY5HJ.js";import"../chunk-H2ORWIEY.js";import"../chunk-O6C2UGBY.js";import"../chunk-ZLLER3HP.js";export{a as processConversationJob};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b}from"../chunk-S6B2R2LL.js";import"../chunk-ZLLER3HP.js";export{a as parseDeterministicExpectation,b as runDeterministicCheck};
|
package/dist/lib/eval-grader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-5BMBVTAE.js";import"../chunk-S6B2R2LL.js";import"../chunk-QH7VY5HJ.js";import"../chunk-ZLLER3HP.js";export{a as gradeEvalOutput};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b
|
|
1
|
+
import{a,b}from"../chunk-3UBCK2FS.js";import"../chunk-QH7VY5HJ.js";import"../chunk-ZLLER3HP.js";export{b as computeTriggerScore,a as testTrigger};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-O3C5IV2Y.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-TDD7IOV2.js";import"../../chunk-MODXEGCU.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import"../../chunk-ZLLER3HP.js";export{a as cronSuggestInstructions};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b}from"../../chunk-
|
|
1
|
+
import{a,b}from"../../chunk-HIDJIABB.js";import"../../chunk-7574DMOC.js";import"../../chunk-RTWRHIKY.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-
|
|
1
|
+
import{a}from"../../chunk-HA77SJ4C.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-7574DMOC.js";import"../../chunk-ZLLER3HP.js";export{a as processAnnouncement};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-ANKSEQQT.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-N7TGRFVZ.js";import"../../chunk-7574DMOC.js";import"../../chunk-ZLLER3HP.js";export{a as processChangelog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-7SZX7C7U.js";import"../../chunk-FJJ54GK3.js";import"../../chunk-5XP7WWJR.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-PTPDOYWP.js";import"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import"../../chunk-QH7VY5HJ.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import"../../chunk-ZLLER3HP.js";export{a as processConversation};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-AIGR5AYV.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-QUUN6A7E.js";import"../../chunk-6V4WM73L.js";import"../../chunk-5XP7WWJR.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import"../../chunk-QH7VY5HJ.js";import"../../chunk-H2ORWIEY.js";import"../../chunk-O6C2UGBY.js";import"../../chunk-ZLLER3HP.js";export{a as processEval};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-RFMFABN2.js";import"../../chunk-QFVGUZDO.js";import"../../chunk-ZL4MZMUK.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-RTWRHIKY.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-
|
|
1
|
+
import{a}from"../../chunk-42HTXLNB.js";import"../../chunk-7574DMOC.js";import"../../chunk-5BMBVTAE.js";import"../../chunk-S6B2R2LL.js";import"../../chunk-QH7VY5HJ.js";import"../../chunk-ZLLER3HP.js";export{a as processMemoryAb};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-AN4DKFLK.js";import"../../chunk-6QKI756T.js";import"../../chunk-5RBLIVBF.js";import"../../chunk-7574DMOC.js";import"../../chunk-7DFNBRLY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-ZLLER3HP.js";export{a as processRunCleanup};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"../../chunk-
|
|
1
|
+
import{a}from"../../chunk-LMHLQ2RB.js";import"../../chunk-7574DMOC.js";import"../../chunk-RTWRHIKY.js";import"../../chunk-N7ODX6PO.js";import"../../chunk-67QCYUJU.js";import"../../chunk-ZLLER3HP.js";export{a as processSessionGoal};
|
package/dist/lib/manual-tasks.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as l}from"../chunk-
|
|
1
|
+
import{a as l}from"../chunk-ANKSEQQT.js";import{a as u}from"../chunk-UF6US7VU.js";import{a as g}from"../chunk-O3C5IV2Y.js";import"../chunk-ZL4MZMUK.js";import"../chunk-N7TGRFVZ.js";import"../chunk-7574DMOC.js";import"../chunk-RTWRHIKY.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};
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rulemetric/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.13",
|
|
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/hooks": "0.7.
|
|
78
|
-
"@rulemetric/
|
|
79
|
-
"@rulemetric/
|
|
77
|
+
"@rulemetric/hooks": "0.7.13",
|
|
78
|
+
"@rulemetric/proxy": "0.7.13",
|
|
79
|
+
"@rulemetric/skills-registry": "0.7.13"
|
|
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": {
|
|
@@ -97,11 +97,11 @@
|
|
|
97
97
|
"@rulemetric/api": "0.0.1",
|
|
98
98
|
"@rulemetric/core": "0.0.1",
|
|
99
99
|
"@rulemetric/db": "0.0.1",
|
|
100
|
-
"@rulemetric/effectiveness": "0.0.1",
|
|
101
100
|
"@rulemetric/email": "0.0.1",
|
|
102
101
|
"@rulemetric/session": "0.2.1",
|
|
103
102
|
"@rulemetric/telemetry": "0.0.1",
|
|
104
|
-
"@rulemetric/typescript-config": "0.0.0"
|
|
103
|
+
"@rulemetric/typescript-config": "0.0.0",
|
|
104
|
+
"@rulemetric/effectiveness": "0.0.1"
|
|
105
105
|
},
|
|
106
106
|
"scripts": {
|
|
107
107
|
"build": "node scripts/build.mjs",
|
package/dist/chunk-3C373UMW.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import{a as p}from"./chunk-QH7VY5HJ.js";import{a as c}from"./chunk-ZLLER3HP.js";var v=`You are a rigorous eval grader. Your job is to evaluate whether an AI assistant's output meets a set of expectations.
|
|
2
|
-
|
|
3
|
-
You will receive:
|
|
4
|
-
1. The original prompt that was given to the AI
|
|
5
|
-
2. The AI's output/response
|
|
6
|
-
3. A list of expectations (assertions) to evaluate
|
|
7
|
-
|
|
8
|
-
For each expectation:
|
|
9
|
-
- Search the output for evidence that the expectation is met
|
|
10
|
-
- Determine PASS or FAIL (no partial credit)
|
|
11
|
-
- Cite specific evidence (quote or description)
|
|
12
|
-
|
|
13
|
-
PASS criteria:
|
|
14
|
-
- Clear evidence the assertion is true
|
|
15
|
-
- Evidence reflects genuine completion, not surface compliance
|
|
16
|
-
|
|
17
|
-
FAIL criteria:
|
|
18
|
-
- No evidence found
|
|
19
|
-
- Evidence contradicts the expectation
|
|
20
|
-
- Cannot verify from available information
|
|
21
|
-
|
|
22
|
-
Beyond the predefined expectations, extract implicit claims from the output:
|
|
23
|
-
- Factual claims ("uses TypeScript", "has 3 parameters")
|
|
24
|
-
- Process claims ("used async/await pattern")
|
|
25
|
-
- Quality claims ("handles edge cases")
|
|
26
|
-
|
|
27
|
-
Verify each claim against the actual output.
|
|
28
|
-
|
|
29
|
-
Finally, critique the eval itself \u2014 identify assertions that are too weak (pass for wrong outputs) or important outcomes that no assertion covers.
|
|
30
|
-
|
|
31
|
-
You MUST respond with ONLY a valid JSON object matching this exact structure (no markdown, no explanation, just JSON):
|
|
32
|
-
|
|
33
|
-
{
|
|
34
|
-
"expectations": [
|
|
35
|
-
{ "text": "assertion text", "passed": true, "evidence": "specific quote or description" }
|
|
36
|
-
],
|
|
37
|
-
"summary": { "passed": 2, "failed": 1, "total": 3, "pass_rate": 0.67 },
|
|
38
|
-
"claims": [
|
|
39
|
-
{ "claim": "statement", "type": "factual", "verified": true, "evidence": "..." }
|
|
40
|
-
],
|
|
41
|
-
"eval_feedback": {
|
|
42
|
-
"suggestions": [{ "assertion": "suggested new assertion", "reason": "why it matters" }],
|
|
43
|
-
"overall": "brief summary assessment"
|
|
44
|
-
}
|
|
45
|
-
}`;async function y(l){let{prompt:u,output:d,expectations:t,model:m,timeout:g=12e4}=l,f=`## Original Prompt
|
|
46
|
-
|
|
47
|
-
${u}
|
|
48
|
-
|
|
49
|
-
## AI Output
|
|
50
|
-
|
|
51
|
-
${d}
|
|
52
|
-
|
|
53
|
-
## Expectations to Evaluate
|
|
54
|
-
|
|
55
|
-
${t.map((e,s)=>`${s+1}. ${e}`).join(`
|
|
56
|
-
`)}
|
|
57
|
-
|
|
58
|
-
Grade the output against each expectation. Respond with ONLY valid JSON.`,a=await p({prompt:f,targetContent:v,timeout:g,model:m});if(a.error)return{expectations:t.map(e=>({text:e,passed:!1,evidence:`Grader error: ${a.error}`})),summary:{passed:0,failed:t.length,total:t.length,pass_rate:0},claims:[],eval_feedback:{suggestions:[],overall:`Grading failed: ${a.error}`}};try{let e=a.output.trim(),s=e.match(/```(?:json)?\s*([\s\S]*?)```/);s&&(e=s[1].trim());let n=e.match(/\{[\s\S]*\}/);n&&(e=n[0]);let r=JSON.parse(e),o=r.expectations.filter(h=>h.passed).length,i=r.expectations.length;return r.summary={passed:o,failed:i-o,total:i,pass_rate:i>0?o/i:0},r}catch{return{expectations:t.map(e=>({text:e,passed:!1,evidence:"Grader output was not valid JSON"})),summary:{passed:0,failed:t.length,total:t.length,pass_rate:0},claims:[],eval_feedback:{suggestions:[],overall:`Grader returned unparseable output: ${a.output.slice(0,200)}`}}}}c(y,"gradeEvalOutput");export{y as a};
|
package/dist/chunk-6D7PUPHT.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as R}from"./chunk-5RBLIVBF.js";import{a as N}from"./chunk-QUUN6A7E.js";import{a as C}from"./chunk-6V4WM73L.js";import{a as I}from"./chunk-3C373UMW.js";import{a as M}from"./chunk-QH7VY5HJ.js";import{e as k,f as y,h as p}from"./chunk-H2ORWIEY.js";import{a as h}from"./chunk-ZLLER3HP.js";async function H(v,m){let{mirrorId:s,evalTargetId:d,config:a}=v,r=h(t=>m.logger.info(t),"log");if(m.job.attempts>1)throw new R(`process_eval is not safe to retry (attempt ${m.job.attempts}). Re-trigger the eval run from the UI.`);let i=await k(`/api/eval-targets/${d}`),$=await k(`/api/eval-targets/${d}/evals`);if($.length===0)throw new R("No evals defined for target");let J=a.runsPerEval??1,E=a.timeout??12e4,T=a.iteration??1,_=[{name:"with_target",content:i.content}];a.skipBaseline||_.push({name:"without_target"});let f=[];for(let t of $)for(let e of _)for(let n=1;n<=J;n++)f.push({eval_:t,configuration:e.name,targetContent:e.content,runNumber:n});let l=f.length,u=0,g=Math.min(a.parallel??1,4);await p(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:0,current:null,message:`Starting ${l} eval runs (concurrency: ${g})...`}});let w=[];async function j(t){let e=`${t.configuration} \xB7 ${t.eval_.name} \xB7 run#${t.runNumber}`;r(`[${u+1}/${l}] ${e}`);let n=g>1?C():null;try{let o=await M({prompt:t.eval_.prompt,targetContent:t.targetContent,workDir:n?.workDir,timeout:E,model:a.model}),c={};return!a.skipGrading&&t.eval_.expectations.length>0&&!o.error&&(c=await I({prompt:t.eval_.prompt,output:o.output,expectations:t.eval_.expectations,model:a.graderModel??a.model,timeout:E})),{evalId:t.eval_.id,evalTargetId:i.id,evalTargetVersion:i.version,configuration:t.configuration,runNumber:t.runNumber,iteration:T,status:o.error?"failed":"completed",outputs:o.error?{error:o.error}:{transcript:o.output},timing:{duration_ms:o.durationMs,total_tokens:o.totalTokens},grading:c,worktree:n?.isWorktree?!0:void 0}}finally{n?.cleanup()}}if(h(j,"processItem"),g<=1)for(let t of f){let e=`${t.configuration} \xB7 ${t.eval_.name} \xB7 run#${t.runNumber}`;await p(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:e,message:`Executing ${e}...`}});let n=await j(t);await y("/api/eval-runs",n),w.push(n),u++,await p(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:e,message:`Completed ${e}`}})}else{r(`Running ${l} evals with concurrency=${g} (worktree isolation)`);for(let t=0;t<f.length;t+=g){let e=f.slice(t,t+g),n=`batch ${Math.floor(t/g)+1}/${Math.ceil(f.length/g)}`;await p(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Executing ${n} (${e.length} parallel)...`}});let o=await Promise.all(e.map(j));for(let c of o)await y("/api/eval-runs",c),w.push(c),u++;await p(`/api/eval-jobs/${s}/progress`,{status:"running",progress:{total:l,completed:u,current:n,message:`Completed ${n}`}})}}let x=G(w),b;if(!a.skipGrading&&w.some(t=>t.grading&&Object.keys(t.grading).length>0))try{r(`Running meta-judge for job ${s}...`);let t=$.map(e=>{let o=w.filter(c=>c.evalId===e.id&&c.configuration==="with_target")[0];return{evalName:e.name,prompt:e.prompt,expectations:e.expectations,grading:o?.grading?o.grading:null,output:o?.outputs?.transcript?.slice(0,500)}});b=await N({targetName:i.name,evalResults:t,model:a.graderModel??a.model,timeout:6e4}),r(`Meta-judge: quality=${b.quality_score}/5, issues=${b.issues.length}`)}catch(t){r(`Meta-judge failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}let P=b?{...x,meta_judgement:b}:x;return r(`Job ${s} completed: ${u}/${l} runs`),await p(`/api/eval-jobs/${s}/state`,{result:P}).catch(t=>{r(`result persist failed: ${t instanceof Error?t.message:String(t)}`)}),P}h(H,"processEval");function G(v){let m=v.filter(r=>r.status==="completed"),s=v.filter(r=>r.status==="failed"),d=m.filter(r=>{let i=r.grading;return i&&Object.keys(i).length>0}),a=d.length>0?d.reduce((r,i)=>r+(i.grading?.summary?.pass_rate??0),0)/d.length:null;return{total:v.length,completed:m.length,failed:s.length,avgPassRate:a}}h(G,"buildSummary");export{H as a};
|
package/dist/chunk-MTB4DSSX.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as m,c as mr}from"./chunk-ZLLER3HP.js";import{boolean as Io,pgTable as pr,text as Ye,timestamp as jt,uuid as To}from"drizzle-orm/pg-core";import{pgTable as Je,text as Z,timestamp as Te,jsonb as ho,uuid as F,primaryKey as yo}from"drizzle-orm/pg-core";var u=Je("organizations",{id:F("id").primaryKey().defaultRandom(),name:Z("name").unique().notNull(),slug:Z("slug").unique().notNull(),metadata:ho("metadata"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).defaultNow()}),x=Je("teams",{id:F("id").primaryKey().defaultRandom(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}),name:Z("name").notNull(),slug:Z("slug").notNull(),metadata:ho("metadata"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()}),ee=Je("user_organizations",{userId:F("user_id").notNull(),orgId:F("org_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[yo({columns:[e.userId,e.orgId]})]),te=Je("user_teams",{userId:F("user_id").notNull(),teamId:F("team_id").references(()=>x.id,{onDelete:"cascade"}).notNull(),role:Z("role").notNull().default("member"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow()},e=>[yo({columns:[e.userId,e.teamId]})]);var o=pr("profiles",{id:To("id").primaryKey(),email:Ye("email"),displayName:Ye("display_name"),activeOrgId:To("active_org_id").references(()=>u.id,{onDelete:"set null"}),isSuperadmin:Io("is_superadmin").notNull().default(!1),claudeCodePlan:Ye("claude_code_plan"),planSource:Ye("plan_source").notNull().default("detected"),setupCompletedAt:jt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:Io("live_send_skipped").notNull().default(!1),createdAt:jt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:jt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as gr,text as ne,timestamp as St,jsonb as bo,uuid as Xe,integer as vr,boolean as hr,index as Kt}from"drizzle-orm/pg-core";import{boolean as fr,jsonb as xr,pgTable as Et,primaryKey as zo,text as G,timestamp as Ae,uniqueIndex as kt,uuid as J}from"drizzle-orm/pg-core";import{sql as Nr}from"drizzle-orm";import{pgTable as wo,text as f,timestamp as we,jsonb as We,uuid as P,integer as Rt,boolean as _r,uniqueIndex as Ao,index as Qe}from"drizzle-orm/pg-core";var n=wo("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:We("frontmatter").notNull(),slots:We("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:P("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow(),updatedAt:we("updated_at",{withTimezone:!0}).defaultNow(),archived:_r("archived").default(!1),archivedAt:we("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:Rt("scan_score"),scanFindings:We("scan_findings"),popularityScore:Rt("popularity_score"),sourceUpdatedAt:we("source_updated_at",{withTimezone:!0})},e=>[Ao("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Qe("idx_instructions_scope").on(e.scope,e.scopeRef),Qe("idx_instructions_created_by").on(e.createdBy),Qe("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Qe("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),oe=wo("instruction_versions",{id:P("id").primaryKey().defaultRandom(),instructionId:P("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:Rt("version_number").notNull(),content:f("content").notNull(),frontmatter:We("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:P("created_by"),createdAt:we("created_at",{withTimezone:!0}).defaultNow()},e=>[Ao("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var r=Et("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:xr("metadata"),createdBy:J("created_by"),createdAt:Ae("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ae("updated_at",{withTimezone:!0}).defaultNow()},e=>[kt("projects_org_name_idx").on(e.orgId,e.name),kt("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(Nr`${e.gitRemoteUrl} IS NOT NULL`)]),O=Et("project_instructions",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),instructionId:J("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Ae("added_at",{withTimezone:!0}).defaultNow(),addedBy:J("added_by")},e=>[zo({columns:[e.projectId,e.instructionId]})]),Do=Et("project_checkouts",{projectId:J("project_id").references(()=>r.id,{onDelete:"cascade"}).notNull(),path:G("path").notNull(),isWorktree:fr("is_worktree").notNull().default(!1),firstSeen:Ae("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Ae("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[zo({columns:[e.projectId,e.path]}),kt("project_checkouts_path_unique").on(e.path)]);var _=gr("agent_runs",{id:Xe("id").primaryKey().defaultRandom(),userId:Xe("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:Xe("org_id").references(()=>u.id,{onDelete:"set null"}),projectId:Xe("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:bo("tool_spec").notNull().default([]),autoWorktree:hr("auto_worktree").notNull().default(!0),status:ne("status").notNull().default("pending"),sessionCount:vr("session_count").notNull().default(0),metadata:bo("metadata").notNull().default({}),createdAt:St("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:St("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:St("completed_at",{withTimezone:!0})},e=>[Kt("idx_agent_runs_user").on(e.userId),Kt("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Kt("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Pt,text as g,timestamp as ze,jsonb as Y,uuid as z,integer as $e,uniqueIndex as jo,index as I}from"drizzle-orm/pg-core";var d=Pt("sessions",{id:z("id").primaryKey().defaultRandom(),userId:z("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:g("external_session_id"),projectId:z("project_id").references(()=>r.id,{onDelete:"set null"}),orgId:z("org_id").references(()=>u.id,{onDelete:"set null"}),tool:g("tool").notNull(),projectPath:g("project_path"),gitBranch:g("git_branch"),startedAt:ze("started_at",{withTimezone:!0}).notNull(),endedAt:ze("ended_at",{withTimezone:!0}),eventCount:$e("event_count").default(0),tokenUsage:Y("token_usage"),analysis:Y("analysis"),analyzedAt:ze("analyzed_at",{withTimezone:!0}),analyzedEventCount:$e("analyzed_event_count"),analyzedTurnCount:$e("analyzed_turn_count"),metadata:Y("metadata").default({}),origin:g("origin").notNull().default("unknown"),runId:z("run_id").references(()=>_.id,{onDelete:"set null"}),model:g("model"),harnessVersion:g("harness_version"),createdAt:ze("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),jo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),re=Pt("session_events",{id:z("id").primaryKey().defaultRandom(),sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),sequence:$e("sequence").notNull(),eventType:g("event_type").notNull(),content:g("content"),toolName:g("tool_name"),toolInput:Y("tool_input"),toolOutput:Y("tool_output"),tokenUsage:Y("token_usage"),model:g("model"),timestamp:ze("timestamp",{withTimezone:!0}).notNull(),metadata:Y("metadata").default({})},e=>[jo("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=Pt("session_instructions",{sessionId:z("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),instructionId:z("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:g("link_method").notNull()},e=>[I("idx_session_instructions_instruction_id").on(e.instructionId)]);import{pgTable as yr,text as se,timestamp as Ot,uuid as De,integer as Ro,index as Ze}from"drizzle-orm/pg-core";var v=yr("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:Ro("version").notNull().default(1),parentId:De("parent_id").references(()=>v.id,{onDelete:"set null"}),kind:se("kind").notNull(),title:se("title").notNull(),body:se("body").notNull(),source:se("source").notNull(),status:se("status").notNull().default("active"),trustClass:se("trust_class"),trustVersion:Ro("trust_version"),trustComputedAt:Ot("trust_computed_at",{withTimezone:!0}),createdAt:Ot("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Ot("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Ze("idx_memories_user").on(e.userId),Ze("idx_memories_project").on(e.projectId),Ze("idx_memories_parent").on(e.parentId),Ze("idx_memories_user_status").on(e.userId,e.status)]);import{pgTable as Ir,text as be,timestamp as Ct,uuid as qt,integer as ko,jsonb as Tr,index as Eo}from"drizzle-orm/pg-core";var So=Ir("memory_experiments",{id:qt("id").primaryKey().defaultRandom(),memoryId:qt("memory_id").notNull().references(()=>v.id,{onDelete:"cascade"}),userId:qt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),memoryVersion:ko("memory_version").notNull().default(1),taskPrompt:be("task_prompt").notNull(),expectations:be("expectations").array().notNull().default([]),trials:ko("trials").notNull().default(10),model:be("model"),status:be("status").notNull().default("pending"),result:Tr("result").$type(),error:be("error"),createdAt:Ct("created_at",{withTimezone:!0}).notNull().defaultNow(),startedAt:Ct("started_at",{withTimezone:!0}),completedAt:Ct("completed_at",{withTimezone:!0})},e=>[Eo("idx_memory_experiments_memory").on(e.memoryId),Eo("idx_memory_experiments_user").on(e.userId)]);import{boolean as wr,date as Ar,index as Mt,integer as zr,jsonb as Dr,pgTable as Lt,text as h,timestamp as q,uniqueIndex as br,uuid as ie}from"drizzle-orm/pg-core";var Ko=Lt("announcements",{id:ie("id").primaryKey().defaultRandom(),version:h("version").notNull().unique(),releaseDate:Ar("release_date").notNull(),subject:h("subject").notNull(),htmlBody:h("html_body").notNull(),textBody:h("text_body").notNull(),sections:Dr("sections").notNull().default({}),status:h("status").notNull().default("draft"),recipientCount:zr("recipient_count"),sentAt:q("sent_at",{withTimezone:!0}),sentBy:ie("sent_by"),error:h("error"),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:q("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Mt("idx_announcements_status").on(e.status),Mt("idx_announcements_created").on(e.createdAt)]),Po=Lt("announcement_deliveries",{id:ie("id").primaryKey().defaultRandom(),announcementId:ie("announcement_id").notNull(),userId:ie("user_id").notNull(),email:h("email").notNull(),status:h("status").notNull().default("pending"),providerId:h("provider_id"),error:h("error"),sentAt:q("sent_at",{withTimezone:!0}),createdAt:q("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[br("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),Mt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Oo=Lt("notification_preferences",{userId:ie("user_id").primaryKey(),productAnnouncements:wr("product_announcements").notNull().default(!0),unsubscribeToken:h("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 jr,text as Bt,timestamp as et,uuid as tt,index as Co}from"drizzle-orm/pg-core";var D=jr("org_invitations",{id:tt("id").primaryKey().defaultRandom(),orgId:tt("org_id").notNull().references(()=>u.id,{onDelete:"cascade"}),email:Bt("email").notNull(),role:Bt("role").notNull().default("member"),teamId:tt("team_id").references(()=>x.id,{onDelete:"set null"}),invitedBy:tt("invited_by").notNull().references(()=>o.id),token:Bt("token").notNull().unique(),expiresAt:et("expires_at",{withTimezone:!0}).notNull(),acceptedAt:et("accepted_at",{withTimezone:!0}),revokedAt:et("revoked_at",{withTimezone:!0}),createdAt:et("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Co("idx_org_invitations_token").on(e.token),Co("idx_org_invitations_org").on(e.orgId)]);import{pgTable as Rr,text as kr,timestamp as Er,jsonb as Sr,uuid as Ut,index as qo}from"drizzle-orm/pg-core";var ae=Rr("instruction_events",{id:Ut("id").primaryKey().defaultRandom(),instructionId:Ut("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:kr("event_type").notNull(),actorId:Ut("actor_id").notNull(),metadata:Sr("metadata"),createdAt:Er("created_at",{withTimezone:!0}).defaultNow()},e=>[qo("idx_instruction_events_instruction").on(e.instructionId),qo("idx_instruction_events_type").on(e.eventType)]);import{pgTable as Mo,text as ot,timestamp as Lo,uuid as T,integer as Bo,index as de,unique as Kr}from"drizzle-orm/pg-core";var b=Mo("treatment_assignments",{id:T("id").primaryKey().defaultRandom(),userId:T("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:ot("treatment_type").notNull(),treatmentId:T("treatment_id").notNull(),treatmentVersion:Bo("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:ot("method").notNull(),assignedAt:Lo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[de("idx_treatment_assignments_user").on(e.userId),de("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),de("idx_treatment_assignments_project").on(e.projectId)]),j=Mo("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:ot("treatment_type").notNull(),treatmentId:T("treatment_id").notNull(),treatmentVersion:Bo("treatment_version").notNull().default(1),assignmentId:T("assignment_id").references(()=>b.id,{onDelete:"set null"}),method:ot("method").notNull(),exposedAt:Lo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Kr("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),de("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),de("idx_treatment_exposures_user").on(e.userId),de("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as Pr,text as Ht,timestamp as Or,uuid as nt,integer as Cr,index as Uo,uniqueIndex as qr}from"drizzle-orm/pg-core";var Ho=Pr("pending_treatment_exposures",{id:nt("id").primaryKey().defaultRandom(),userId:nt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:Ht("external_session_id").notNull(),treatmentType:Ht("treatment_type").notNull(),treatmentId:nt("treatment_id").notNull(),treatmentVersion:Cr("treatment_version").notNull().default(1),method:Ht("method").notNull().default("injected"),projectId:nt("project_id").references(()=>r.id,{onDelete:"set null"}),createdAt:Or("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[qr("pending_treatment_exposures_unique").on(e.externalSessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),Uo("idx_pending_treatment_exposures_ext").on(e.externalSessionId),Uo("idx_pending_treatment_exposures_user").on(e.userId)]);import{pgTable as Mr,text as ue,timestamp as Vt,uuid as Ft,jsonb as Lr,uniqueIndex as Br,index as Vo}from"drizzle-orm/pg-core";var rt=Mr("session_terminal_targets",{id:Ft("id").primaryKey().defaultRandom(),userId:Ft("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Ft("session_id").references(()=>d.id,{onDelete:"set null"}),externalSessionId:ue("external_session_id"),kind:ue("kind").notNull(),target:ue("target").notNull(),status:ue("status").notNull().default("active"),attachCommand:ue("attach_command").notNull(),projectPath:ue("project_path"),metadata:Lr("metadata").notNull().default({}),lastSeenAt:Vt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Vt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Vt("updated_at",{withTimezone:!0}).defaultNow()},e=>[Br("idx_session_terminal_targets_user_target").on(e.userId,e.target),Vo("idx_session_terminal_targets_session").on(e.sessionId),Vo("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as Ur,index as st,jsonb as Fo,pgTable as Hr,text as Q,timestamp as je,uuid as it,integer as Vr}from"drizzle-orm/pg-core";var Go=Hr("session_send_jobs",{id:it("id").primaryKey().defaultRandom(),userId:it("user_id").notNull(),sessionId:it("session_id").notNull().references(()=>d.id,{onDelete:"cascade"}),terminalTargetId:it("terminal_target_id").references(()=>rt.id,{onDelete:"set null"}),target:Q("target").notNull(),message:Q("message").notNull(),submit:Ur("submit").notNull().default(!0),delivery:Q("delivery").notNull().default("live"),status:Q("status").notNull().default("pending"),result:Fo("result"),error:Q("error"),attempts:Vr("attempts").notNull().default(0),taskKind:Q("task_kind"),payload:Fo("payload"),claimedBy:Q("claimed_by"),claimedAt:je("claimed_at",{withTimezone:!0}),leaseExpiresAt:je("lease_expires_at",{withTimezone:!0}),createdAt:je("created_at",{withTimezone:!0}).defaultNow(),updatedAt:je("updated_at",{withTimezone:!0}).defaultNow(),completedAt:je("completed_at",{withTimezone:!0})},e=>[st("idx_session_send_jobs_user").on(e.userId),st("idx_session_send_jobs_session").on(e.sessionId),st("idx_session_send_jobs_status").on(e.status),st("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as Yo,text as W,timestamp as at,jsonb as Qo,uuid as M,integer as Fr,boolean as Gr,uniqueIndex as Jr,index as Jo,primaryKey as Yr}from"drizzle-orm/pg-core";var y=Yo("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:Qo("metadata"),createdBy:M("created_by"),createdAt:at("created_at",{withTimezone:!0}).defaultNow(),updatedAt:at("updated_at",{withTimezone:!0}).defaultNow(),archived:Gr("archived").default(!1),archivedAt:at("archived_at",{withTimezone:!0}),archivedBy:M("archived_by"),forkedFromId:M("forked_from_id").references(()=>y.id,{onDelete:"set null"}),upstreamVersion:W("upstream_version")},e=>[Jr("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Jo("idx_packs_scope").on(e.scope,e.scopeRef),Jo("idx_packs_created_by").on(e.createdBy)]),L=Yo("pack_instructions",{packId:M("pack_id").references(()=>y.id,{onDelete:"cascade"}).notNull(),instructionId:M("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Fr("position").notNull().default(0),slotOverrides:Qo("slot_overrides"),addedAt:at("added_at",{withTimezone:!0}).defaultNow(),addedBy:M("added_by")},e=>[Yr({columns:[e.packId,e.instructionId]})]);import{pgTable as Qr,text as Gt,timestamp as Wr,jsonb as Xr,uuid as Jt,index as le}from"drizzle-orm/pg-core";var ce=Qr("instruction_usage_events",{id:Jt("id").primaryKey().defaultRandom(),instructionId:Jt("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:Jt("user_id").notNull(),surface:Gt("surface").notNull(),action:Gt("action").notNull(),metadata:Xr("metadata"),traceId:Gt("trace_id"),createdAt:Wr("created_at",{withTimezone:!0}).defaultNow()},e=>[le("idx_usage_events_instruction").on(e.instructionId),le("idx_usage_events_user").on(e.userId),le("idx_usage_events_surface").on(e.surface),le("idx_usage_events_action").on(e.action),le("idx_usage_events_created_at").on(e.createdAt),le("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as $r,text as dt,timestamp as Wo,jsonb as Zr,uuid as Xo,index as Yt}from"drizzle-orm/pg-core";var $o=$r("worker_connections",{id:Xo("id").primaryKey().defaultRandom(),userId:Xo("user_id").notNull(),workerType:dt("worker_type").notNull().default("mcp"),clientName:dt("client_name").notNull(),clientVersion:dt("client_version"),workerVersion:dt("worker_version"),lastHeartbeat:Wo("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Wo("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Zr("metadata")},e=>[Yt("idx_worker_connections_user").on(e.userId),Yt("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),Yt("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as es,text as ut,timestamp as ts,jsonb as os,uuid as Zo,index as en}from"drizzle-orm/pg-core";var tn=es("cli_setup_events",{id:Zo("id").primaryKey().defaultRandom(),userId:Zo("user_id").notNull(),deviceId:ut("device_id").notNull(),event:ut("event").notNull(),cliVersion:ut("cli_version"),os:ut("os"),props:os("props").notNull().default({}),createdAt:ts("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[en("idx_cli_setup_events_user").on(e.userId,e.createdAt),en("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as ns,text as X,integer as rs,boolean as ss,timestamp as is,jsonb as as,uuid as ds,index as on}from"drizzle-orm/pg-core";var nn=ns("cli_error_events",{id:ds("id").primaryKey().defaultRandom(),deviceId:X("device_id"),event:X("event").notNull(),command:X("command"),statusCode:rs("status_code"),message:X("message"),cliVersion:X("cli_version"),os:X("os"),nodeVersion:X("node_version"),proxied:ss("proxied"),props:as("props").notNull().default({}),createdAt:is("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[on("idx_cli_error_events_created").on(e.createdAt),on("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as lt,text as R,timestamp as me,jsonb as w,uuid as A,integer as Re,index as k}from"drizzle-orm/pg-core";var s=lt("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:Re("version").notNull().default(1),parentId:A("parent_id").references(()=>s.id,{onDelete:"set null"}),createdAt:me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:me("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=lt("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:me("created_at",{withTimezone:!0}).defaultNow(),updatedAt:me("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_evals_target").on(e.evalTargetId)]),B=lt("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:Re("eval_target_version").notNull(),configuration:R("configuration").notNull(),runNumber:Re("run_number").notNull().default(1),iteration:Re("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:me("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)]),pe=lt("benchmarks",{id:A("id").primaryKey().defaultRandom(),evalTargetId:A("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),iteration:Re("iteration").notNull().default(1),runSummary:w("run_summary").notNull().default({}),notes:w("notes").notNull().default([]),feedback:w("feedback"),createdAt:me("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_benchmarks_target").on(e.evalTargetId)]);import{pgTable as sn,text as Qt,timestamp as Wt,jsonb as an,uuid as _e,integer as ke,index as ct,real as rn}from"drizzle-orm/pg-core";var fe=sn("trigger_evals",{id:_e("id").primaryKey().defaultRandom(),evalTargetId:_e("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:_e("user_id").notNull(),queries:an("queries").notNull().default([]),status:Qt("status").notNull().default("pending_review"),trainIndices:ke("train_indices").array().default([]),testIndices:ke("test_indices").array().default([]),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Wt("updated_at",{withTimezone:!0}).defaultNow()},e=>[ct("idx_trigger_evals_target").on(e.evalTargetId),ct("idx_trigger_evals_user").on(e.userId)]),xe=sn("optimization_runs",{id:_e("id").primaryKey().defaultRandom(),evalTargetId:_e("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:_e("user_id").notNull(),type:Qt("type").notNull(),iteration:ke("iteration").notNull(),inputVersion:ke("input_version").notNull(),outputVersion:ke("output_version"),trainScore:rn("train_score"),testScore:rn("test_score"),analysis:an("analysis").notNull().default({}),status:Qt("status").notNull().default("running"),createdAt:Wt("created_at",{withTimezone:!0}).defaultNow()},e=>[ct("idx_optimization_runs_target").on(e.evalTargetId),ct("idx_optimization_runs_user").on(e.userId)]);import{pgTable as us,text as U,timestamp as ls,jsonb as Ee,uuid as Xt,integer as $t,real as cs,index as Se,uniqueIndex as dn}from"drizzle-orm/pg-core";var H=us("context_snapshots",{id:Xt("id").primaryKey().defaultRandom(),sessionId:Xt("session_id").references(()=>d.id,{onDelete:"cascade"}),userId:Xt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:$t("sequence").notNull().default(0),provider:U("provider").notNull(),model:U("model").notNull(),systemPrompt:U("system_prompt").notNull(),injectedInstructions:Ee("injected_instructions").notNull().default([]),messagesSummary:Ee("messages_summary").notNull(),tools:Ee("tools").notNull().default([]),systemHash:U("system_hash").notNull(),requestHash:U("request_hash").notNull().default(""),toolsHash:U("tools_hash"),injectedHash:U("injected_hash"),messagesDelta:Ee("messages_delta").default([]),messagesDeltaRef:U("messages_delta_ref"),maxTokens:$t("max_tokens"),temperature:cs("temperature"),estimatedTokens:$t("estimated_tokens"),capturedAt:ls("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:Ee("metadata").default({})},e=>[Se("idx_context_snapshots_session").on(e.sessionId),Se("idx_context_snapshots_user").on(e.userId),Se("idx_context_snapshots_hash").on(e.systemHash),Se("idx_context_snapshots_request_hash").on(e.requestHash),dn("idx_snapshots_session_request").on(e.sessionId,e.requestHash),dn("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Se("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as ms,text as un,timestamp as ps,jsonb as _s,integer as fs,index as xs}from"drizzle-orm/pg-core";var ln=ms("content_blobs",{hash:un("hash").primaryKey(),contentType:un("content_type").notNull(),content:_s("content").notNull(),sizeBytes:fs("size_bytes").notNull().default(0),createdAt:ps("created_at",{withTimezone:!0}).defaultNow()},e=>[xs("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Ns,text as mt,timestamp as Ke,jsonb as pt,uuid as Zt,index as _t,integer as gs}from"drizzle-orm/pg-core";var Ne=Ns("eval_jobs",{id:Zt("id").primaryKey().defaultRandom(),userId:Zt("user_id").notNull(),evalTargetId:Zt("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),status:mt("status").notNull().default("pending"),config:pt("config").notNull().default({}),progress:pt("progress").notNull().default({}),result:pt("result"),error:mt("error"),attempts:gs("attempts").notNull().default(0),taskKind:mt("task_kind"),payload:pt("payload"),claimedBy:mt("claimed_by"),claimedAt:Ke("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ke("lease_expires_at",{withTimezone:!0}),createdAt:Ke("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ke("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ke("completed_at",{withTimezone:!0})},e=>[_t("idx_eval_jobs_user").on(e.userId),_t("idx_eval_jobs_target").on(e.evalTargetId),_t("idx_eval_jobs_status").on(e.status),_t("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as vs,text as Pe,timestamp as Oe,jsonb as cn,uuid as mn,integer as hs,index as pn}from"drizzle-orm/pg-core";var _n=vs("agent_jobs",{id:mn("id").primaryKey().defaultRandom(),userId:mn("user_id").notNull(),taskKind:Pe("task_kind").notNull(),status:Pe("status").notNull().default("pending"),payload:cn("payload").notNull(),dedupeKey:Pe("dedupe_key"),result:cn("result"),error:Pe("error"),attempts:hs("attempts").notNull().default(0),claimedBy:Pe("claimed_by"),claimedAt:Oe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Oe("lease_expires_at",{withTimezone:!0}),createdAt:Oe("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:Oe("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:Oe("completed_at",{withTimezone:!0})},e=>[pn("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),pn("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as ys,text as Ce,timestamp as qe,jsonb as ft,uuid as eo,index as xt,integer as Is}from"drizzle-orm/pg-core";var fn=ys("insights_jobs",{id:eo("id").primaryKey().defaultRandom(),userId:eo("user_id").notNull(),status:Ce("status").notNull().default("pending"),projectPath:Ce("project_path"),projectId:eo("project_id").references(()=>r.id,{onDelete:"set null"}),config:ft("config").notNull().default({}),progress:ft("progress").notNull().default({}),result:ft("result"),error:Ce("error"),attempts:Is("attempts").notNull().default(0),taskKind:Ce("task_kind"),payload:ft("payload"),claimedBy:Ce("claimed_by"),claimedAt:qe("claimed_at",{withTimezone:!0}),leaseExpiresAt:qe("lease_expires_at",{withTimezone:!0}),createdAt:qe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:qe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:qe("completed_at",{withTimezone:!0})},e=>[xt("idx_insights_jobs_user").on(e.userId),xt("idx_insights_jobs_status").on(e.status),xt("idx_insights_jobs_pending").on(e.userId,e.status),xt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as Ts,text as to,timestamp as Nt,uuid as xn,index as ws,uniqueIndex as As}from"drizzle-orm/pg-core";var ge=Ts("api_keys",{id:xn("id").primaryKey().defaultRandom(),userId:xn("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:to("name").notNull(),keyHash:to("key_hash").notNull(),keyPrefix:to("key_prefix").notNull(),lastUsedAt:Nt("last_used_at",{withTimezone:!0}),expiresAt:Nt("expires_at",{withTimezone:!0}),revokedAt:Nt("revoked_at",{withTimezone:!0}),createdAt:Nt("created_at",{withTimezone:!0}).defaultNow()},e=>[ws("idx_api_keys_user").on(e.userId),As("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as zs,text as oo,timestamp as Nn,uuid as Ds,index as bs}from"drizzle-orm/pg-core";var gn=zs("extension_auth_codes",{code:oo("code").primaryKey(),userId:Ds("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:oo("editor"),email:oo("email"),expiresAt:Nn("expires_at",{withTimezone:!0}).notNull(),createdAt:Nn("created_at",{withTimezone:!0}).defaultNow()},e=>[bs("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as js,text as Rs,timestamp as vn,jsonb as ks,uuid as no,index as hn}from"drizzle-orm/pg-core";var ve=js("eval_conversations",{id:no("id").primaryKey().defaultRandom(),evalTargetId:no("eval_target_id").notNull().references(()=>s.id,{onDelete:"cascade"}),userId:no("user_id").notNull(),messages:ks("messages").notNull().default([]),status:Rs("status").notNull().default("active"),createdAt:vn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:vn("updated_at",{withTimezone:!0}).defaultNow()},e=>[hn("idx_eval_conversations_target").on(e.evalTargetId),hn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as Es,text as S,timestamp as yn,jsonb as Ss,uuid as ro}from"drizzle-orm/pg-core";var In=Es("skill_submissions",{id:ro("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:ro("submitted_by").notNull(),reviewedBy:ro("reviewed_by"),reviewNote:S("review_note"),metadata:Ss("metadata"),createdAt:yn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:yn("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as Ks,text as Me,timestamp as Tn,jsonb as Ps,uuid as Os,uniqueIndex as Cs,index as wn}from"drizzle-orm/pg-core";var An=Ks("harness_releases",{id:Os("id").primaryKey().defaultRandom(),harness:Me("harness").notNull(),version:Me("version").notNull(),publishedAt:Tn("published_at",{withTimezone:!0}).notNull(),title:Me("title"),body:Me("body"),categories:Ps("categories").default({}),url:Me("url"),createdAt:Tn("created_at",{withTimezone:!0}).defaultNow()},e=>[Cs("idx_harness_releases_unique").on(e.harness,e.version),wn("idx_harness_releases_harness").on(e.harness),wn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as qs,text as he,timestamp as zn,jsonb as Ms,uuid as Dn,index as bn,uniqueIndex as Ls}from"drizzle-orm/pg-core";var so=qs("notifications",{id:Dn("id").primaryKey().defaultRandom(),userId:Dn("user_id").notNull(),type:he("type").notNull(),title:he("title").notNull(),body:he("body"),url:he("url"),sourceTable:he("source_table"),sourceId:he("source_id"),metadata:Ms("metadata").notNull().default({}),readAt:zn("read_at",{withTimezone:!0}),createdAt:zn("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[bn("idx_notifications_user_created").on(e.userId,e.createdAt),bn("idx_notifications_user_unread").on(e.userId),Ls("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Bs,text as Le,timestamp as Be,jsonb as io,uuid as ao,index as gt,integer as Us}from"drizzle-orm/pg-core";var ye=Bs("launch_jobs",{id:ao("id").primaryKey().defaultRandom(),userId:ao("user_id").notNull(),tool:Le("tool").notNull(),status:Le("status").notNull().default("pending"),config:io("config").notNull().default({}),result:io("result"),error:Le("error"),attempts:Us("attempts").notNull().default(0),taskKind:Le("task_kind"),payload:io("payload"),claimedBy:Le("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}),runId:ao("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 jn,uuid as K,text as Ue,real as Hs,timestamp as vt,boolean as Vs,uniqueIndex as Fs,index as He}from"drizzle-orm/pg-core";var uo=jn("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:Ue("project_path").notNull(),projectId:K("project_id").references(()=>r.id,{onDelete:"set null"}),score:Hs("score").notNull(),reason:Ue("reason").notNull(),generatedAt:vt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:Vs("is_stale").notNull().default(!1),dismissedAt:vt("dismissed_at",{withTimezone:!0}),acceptedAt:vt("accepted_at",{withTimezone:!0}),promotedToInstructionId:K("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Fs("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),He("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),He("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),He("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),Rn=jn("instruction_suggestion_events",{id:K("id").primaryKey().defaultRandom(),suggestionId:K("suggestion_id").notNull().references(()=>uo.id,{onDelete:"cascade"}),userId:K("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:Ue("event_type").notNull(),tool:Ue("tool"),sessionId:K("session_id"),projectPath:Ue("project_path").notNull(),createdAt:vt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[He("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),He("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Gs,text as lo,integer as Js,numeric as Ve,timestamp as co,index as Ys,primaryKey as Qs}from"drizzle-orm/pg-core";var kn=Gs("model_pricing",{provider:lo("provider").notNull(),modelId:lo("model_id").notNull(),inputPerM:Ve("input_per_m").notNull(),outputPerM:Ve("output_per_m").notNull(),cacheReadPerM:Ve("cache_read_per_m").notNull(),cacheWrite5mPerM:Ve("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:Ve("cache_write_1h_per_m").notNull(),contextWindow:Js("context_window"),effectiveFrom:co("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:co("effective_until",{withTimezone:!0}),source:lo("source").notNull(),verifiedAt:co("verified_at",{withTimezone:!0})},e=>[Qs({columns:[e.provider,e.modelId,e.effectiveFrom]}),Ys("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as Ws,text as $,numeric as En,timestamp as Sn,uuid as Kn,jsonb as Xs,index as Pn}from"drizzle-orm/pg-core";var On=Ws("limit_observations",{id:Kn("id").primaryKey().defaultRandom(),observedAt:Sn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:$("provider").notNull(),plan:$("plan").notNull(),limitType:$("limit_type").notNull(),value:En("value").notNull(),unit:$("unit").notNull(),comparator:$("comparator").notNull().default("="),resetsAt:Sn("resets_at",{withTimezone:!0}),sourceType:$("source_type").notNull(),sourceUrl:$("source_url"),sourceEvidence:Xs("source_evidence"),confidence:En("confidence").notNull(),userId:Kn("user_id")},e=>[Pn("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),Pn("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as $s,text as ht,timestamp as Zs,uuid as ei,jsonb as ti,boolean as oi,uniqueIndex as ni}from"drizzle-orm/pg-core";var Cn=$s("provider_docs_snapshots",{id:ei("id").primaryKey().defaultRandom(),fetchedAt:Zs("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:ht("provider").notNull(),docUrl:ht("doc_url").notNull(),contentHash:ht("content_hash").notNull(),content:ht("content").notNull(),parseSuccess:oi("parse_success").notNull(),parseErrors:ti("parse_errors")},e=>[ni("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as ri,text as yt,numeric as qn,timestamp as Mn,uuid as si,primaryKey as ii,index as ai}from"drizzle-orm/pg-core";var Ln=ri("plan_limits_active",{provider:yt("provider").notNull(),plan:yt("plan").notNull(),limitType:yt("limit_type").notNull(),value:qn("value").notNull(),unit:yt("unit").notNull(),effectiveFrom:Mn("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Mn("effective_until",{withTimezone:!0}),confidence:qn("confidence").notNull(),sourceObservationIds:si("source_observation_ids").array().notNull()},e=>[ii({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),ai("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as di,text as mo,timestamp as ui,uuid as Bn,jsonb as li,index as ci}from"drizzle-orm/pg-core";var Un=di("alert_dispatches",{id:Bn("id").primaryKey().defaultRandom(),userId:Bn("user_id").notNull(),alertKey:mo("alert_key").notNull(),severity:mo("severity").notNull(),lastDispatchedAt:ui("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:li("last_state").notNull(),channel:mo("channel").notNull()},e=>[ci("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{drizzle as Jn}from"drizzle-orm/postgres-js";import Yn from"postgres";var It={};mr(It,{agentJobs:()=>_n,agentRuns:()=>_,agentRunsRelations:()=>zi,alertDispatches:()=>Un,announcementDeliveries:()=>Po,announcements:()=>Ko,apiKeys:()=>ge,apiKeysRelations:()=>pi,benchmarks:()=>pe,benchmarksRelations:()=>qi,cliErrorEvents:()=>nn,cliSetupEvents:()=>tn,contentBlobs:()=>ln,contextSnapshots:()=>H,contextSnapshotsRelations:()=>Hi,evalConversations:()=>ve,evalConversationsRelations:()=>Ui,evalJobs:()=>Ne,evalJobsRelations:()=>Bi,evalRuns:()=>B,evalRunsRelations:()=>Ci,evalTargets:()=>s,evalTargetsRelations:()=>Pi,evals:()=>E,evalsRelations:()=>Oi,extensionAuthCodes:()=>gn,harnessReleases:()=>An,insightsJobs:()=>fn,instructionEvents:()=>ae,instructionEventsRelations:()=>hi,instructionSuggestionEvents:()=>Rn,instructionSuggestions:()=>uo,instructionUsageEvents:()=>ce,instructionUsageEventsRelations:()=>Ki,instructionVersions:()=>oe,instructionVersionsRelations:()=>Ii,instructions:()=>n,instructionsRelations:()=>vi,launchJobs:()=>ye,launchJobsRelations:()=>Di,limitObservations:()=>On,memories:()=>v,memoriesRelations:()=>yi,memoryExperiments:()=>So,modelPricing:()=>kn,notificationPreferences:()=>Oo,notifications:()=>so,optimizationRuns:()=>xe,optimizationRunsRelations:()=>Li,orgInvitations:()=>D,orgInvitationsRelations:()=>xi,organizations:()=>u,organizationsRelations:()=>_i,packInstructions:()=>L,packInstructionsRelations:()=>Si,packs:()=>y,packsRelations:()=>Ei,pendingTreatmentExposures:()=>Ho,planLimitsActive:()=>Ln,profiles:()=>o,profilesRelations:()=>mi,projectCheckouts:()=>Do,projectInstructions:()=>O,projectInstructionsRelations:()=>wi,projects:()=>r,projectsRelations:()=>Ti,providerDocsSnapshots:()=>Cn,sessionEvents:()=>re,sessionEventsRelations:()=>bi,sessionInstructions:()=>C,sessionInstructionsRelations:()=>ji,sessionSendJobs:()=>Go,sessionTerminalTargets:()=>rt,sessions:()=>d,sessionsRelations:()=>Ai,skillSubmissions:()=>In,teams:()=>x,teamsRelations:()=>fi,treatmentAssignments:()=>b,treatmentAssignmentsRelations:()=>Ri,treatmentExposures:()=>j,treatmentExposuresRelations:()=>ki,triggerEvals:()=>fe,triggerEvalsRelations:()=>Mi,userOrganizations:()=>ee,userOrganizationsRelations:()=>Ni,userTeams:()=>te,userTeamsRelations:()=>gi,workerConnections:()=>$o});import{relations as i}from"drizzle-orm";var mi=i(o,({many:e})=>({sessions:e(d),contextSnapshots:e(H),apiKeys:e(ge)})),pi=i(ge,({one:e})=>({profile:e(o,{fields:[ge.userId],references:[o.id]})})),_i=i(u,({many:e})=>({teams:e(x),userOrganizations:e(ee),projects:e(r),invitations:e(D)})),fi=i(x,({one:e,many:t})=>({organization:e(u,{fields:[x.orgId],references:[u.id]}),userTeams:t(te),invitations:t(D)})),xi=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]})})),Ni=i(ee,({one:e})=>({organization:e(u,{fields:[ee.orgId],references:[u.id]})})),gi=i(te,({one:e})=>({team:e(x,{fields:[te.teamId],references:[x.id]})})),vi=i(n,({one:e,many:t})=>({versions:t(oe),projectInstructions:t(O),events:t(ae),usageEvents:t(ce),sessionInstructions:t(C),packInstructions:t(L),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),hi=i(ae,({one:e})=>({instruction:e(n,{fields:[ae.instructionId],references:[n.id]})})),yi=i(v,({one:e,many:t})=>({project:e(r,{fields:[v.projectId],references:[r.id]}),parent:e(v,{fields:[v.parentId],references:[v.id]}),versions:t(v)})),Ii=i(oe,({one:e})=>({instruction:e(n,{fields:[oe.instructionId],references:[n.id]})})),Ti=i(r,({one:e,many:t})=>({organization:e(u,{fields:[r.orgId],references:[u.id]}),projectInstructions:t(O),sessions:t(d)})),wi=i(O,({one:e})=>({project:e(r,{fields:[O.projectId],references:[r.id]}),instruction:e(n,{fields:[O.instructionId],references:[n.id]})})),Ai=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)})),zi=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(ye)})),Di=i(ye,({one:e})=>({run:e(_,{fields:[ye.runId],references:[_.id]})})),bi=i(re,({one:e})=>({session:e(d,{fields:[re.sessionId],references:[d.id]})})),ji=i(C,({one:e})=>({session:e(d,{fields:[C.sessionId],references:[d.id]}),instruction:e(n,{fields:[C.instructionId],references:[n.id]})})),Ri=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)})),ki=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]})})),Ei=i(y,({one:e,many:t})=>({packInstructions:t(L),forkedFrom:e(y,{fields:[y.forkedFromId],references:[y.id]})})),Si=i(L,({one:e})=>({pack:e(y,{fields:[L.packId],references:[y.id]}),instruction:e(n,{fields:[L.instructionId],references:[n.id]})})),Ki=i(ce,({one:e})=>({instruction:e(n,{fields:[ce.instructionId],references:[n.id]})})),Pi=i(s,({one:e,many:t})=>({parent:e(s,{fields:[s.parentId],references:[s.id]}),evals:t(E),evalRuns:t(B),benchmarks:t(pe),triggerEvals:t(fe),optimizationRuns:t(xe),evalJobs:t(Ne),evalConversations:t(ve)})),Oi=i(E,({one:e,many:t})=>({evalTarget:e(s,{fields:[E.evalTargetId],references:[s.id]}),runs:t(B)})),Ci=i(B,({one:e})=>({eval:e(E,{fields:[B.evalId],references:[E.id]}),evalTarget:e(s,{fields:[B.evalTargetId],references:[s.id]})})),qi=i(pe,({one:e})=>({evalTarget:e(s,{fields:[pe.evalTargetId],references:[s.id]})})),Mi=i(fe,({one:e})=>({evalTarget:e(s,{fields:[fe.evalTargetId],references:[s.id]})})),Li=i(xe,({one:e})=>({evalTarget:e(s,{fields:[xe.evalTargetId],references:[s.id]})})),Bi=i(Ne,({one:e})=>({evalTarget:e(s,{fields:[Ne.evalTargetId],references:[s.id]})})),Ui=i(ve,({one:e})=>({evalTarget:e(s,{fields:[ve.evalTargetId],references:[s.id]})})),Hi=i(H,({one:e})=>({session:e(d,{fields:[H.sessionId],references:[d.id]}),profile:e(o,{fields:[H.userId],references:[o.id]})}));var Fe=0,Hn=0,Ge=0,Vn=0;var Vi=0;function po(){Fe++,Fe>Hn&&(Hn=Fe)}m(po,"trackDbOpStart");function _o(){Fe>0&&Fe--}m(_o,"trackDbOpEnd");function fo(){Ge++,Ge>Vn&&(Vn=Ge)}m(fo,"trackHeavyDbOpStart");function xo(){Ge>0&&Ge--}m(xo,"trackHeavyDbOpEnd");function Fn(){Vi++}m(Fn,"recordQueryDeadline");var wt,zt,No=!1,Tt;var Gn,Dt,At;function Qn(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(Qn,"getEnv");function Wn(){if(No)throw new Error("getDb() 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",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;zt=Yn(Qn("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}:{}}}),wt=Jn(zt,{schema:It})}return wt}m(Wn,"getDb");function Xn(){if(No)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!At){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;Dt=Yn(Qn("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}}),At=Jn(Dt,{schema:It})}return At}m(Xn,"getHeavyDb");async function Fi(){if(Tt)return Tt;No=!0;let e=zt,t=Gn,a=Dt;return zt=void 0,wt=void 0,Gn=void 0,Dt=void 0,At=void 0,Tt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),a?a.end({timeout:5}):Promise.resolve()]).then(()=>{}),Tt}m(Fi,"closeDb");var Gi=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function $n(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Gi.has(a)}m($n,"isRetryableConnectError");var Ji=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Zn(e){let t=e,a=t?.code??t?.cause?.code??t?.errno;return a!==void 0&&Ji.has(a)}m(Zn,"isRetryableResetError");async function er(e,t={}){let a=t.attempts??3,l=t.baseMs??100,c;for(let p=0;p<a;p++)try{return await e()}catch(N){c=N;let Ie=$n(N)||t.retryResets===!0&&Zn(N);if(p===a-1||!Ie)throw N;await new Promise(V=>setTimeout(V,l*2**p))}throw c}m(er,"withDbRetry");var bt=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 tr(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(tr,"queryDeadlineMs");function Yi(e,t){let a,l=new Promise((c,p)=>{a=setTimeout(()=>{Fn(),p(new bt(t))},t);let N=a;typeof N.unref=="function"&&N.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(a))}m(Yi,"raceWithDeadline");var or=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),nr=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function go(e,t=!1,a=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(c,p,N){if(p==="then"){let V=Reflect.get(c,p,N);return typeof V!="function"?V:(ir,ar)=>{let dr=l?fo:po,ur=l?xo:_o;dr();let vo=er(()=>new Promise((lr,cr)=>V.call(c,lr,cr)),{retryResets:t});return(a>0?Yi(vo,a):vo).finally(ur).then(ir,ar)}}let Ie=Reflect.get(c,p,N);return typeof Ie=="function"?(...V)=>go(Ie.apply(c,V),t,a,l):Ie}})}m(go,"wrapBuilder");function rr(e,t=!1){let a=t?fo:po,l=t?xo:_o;a();try{return Promise.resolve(e()).finally(l)}catch(c){throw l(),c}}m(rr,"gaugeTransaction");var sr=new Proxy({},{get(e,t){let a=Wn(),l=a[t];if(typeof t=="string"&&or.has(t)&&typeof l=="function"){let c=nr.has(t),p=tr();return(...N)=>go(l.apply(a,N),c,p)}return t==="transaction"&&typeof l=="function"?(...c)=>rr(()=>l.apply(a,c)):l}}),Qi=new Proxy({},{get(e,t){let a=Xn(),l=a[t];if(typeof t=="string"&&or.has(t)&&typeof l=="function"){let c=nr.has(t);return(...p)=>go(l.apply(a,p),c,0,!0)}return t==="transaction"&&typeof l=="function"?(...c)=>rr(()=>l.apply(a,c),!0):l}});export{o as a,_ as b,d as c,re as d,v as e,So as f,Ko as g,Po as h,Oo as i,Wn as j,Fi as k};
|
package/dist/chunk-T4Z53J7B.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import{a as $}from"./chunk-PTPDOYWP.js";import{a as y}from"./chunk-3C373UMW.js";import{a as w}from"./chunk-QH7VY5HJ.js";import{e as h,f}from"./chunk-H2ORWIEY.js";import{a as v}from"./chunk-ZLLER3HP.js";async function I(t,r,u){let{conversationId:a,messageId:d,messageContent:c}=t,n=await h(`/api/eval-targets/${r}`),o=await h(`/api/eval-targets/${r}/evals`),e=await h(`/api/eval-conversations/${a}/messages`),s=e.findIndex(l=>l.id===d);if(s>=0&&e.slice(s+1).some(p=>p.role==="assistant"&&(p.type==="results"||p.type==="proposal"||p.type==="generated"||p.type==="text"))){u(`Message ${d} already processed \u2014 skipping (idempotency guard)`);return}let i=v(async(l,p,m)=>{await f(`/api/eval-conversations/${a}/messages/assistant`,{content:l,type:p,data:m})},"postMessage"),g=await C(n,o,e,c,u);u(`Action: ${g.action}`);try{switch(g.action){case"run_evals":await x(n,o,a,i,u);break;case"generate_cases":await _(n,r,a,i,u);break;case"analyze_results":case"propose_changes":await k(n,o,e,c,a,i,u);break;case"respond":await i(g.response,"text");break}}catch(l){let p=l instanceof Error?l.message:String(l);throw await i(`Something went wrong: ${p}`,"text").catch(()=>{}),l}}v(I,"processConversationJob");async function C(t,r,u,a,d){let c=u.slice(-10).map(e=>`${e.role}: ${e.content.slice(0,200)}`).join(`
|
|
2
|
-
`),n=`You are an eval assistant. Decide what action to take based on the user's message.
|
|
3
|
-
|
|
4
|
-
## Current State
|
|
5
|
-
- Eval target: "${t.name}" v${t.version} (${t.type})
|
|
6
|
-
- Eval cases: ${r.length} defined${r.length>0?` (${r.map(e=>e.name).join(", ")})`:""}
|
|
7
|
-
- Content length: ${t.content.length} chars
|
|
8
|
-
|
|
9
|
-
## Recent Conversation
|
|
10
|
-
${c}
|
|
11
|
-
|
|
12
|
-
## User's Latest Message
|
|
13
|
-
${a}
|
|
14
|
-
|
|
15
|
-
## Available Actions
|
|
16
|
-
- run_evals: Run all eval cases against the current version (target content injected; no baseline arm). Choose this when the user wants to test, evaluate, or see how the instruction performs.
|
|
17
|
-
- generate_cases: Auto-generate eval test cases from the instruction content. Choose this when there are no eval cases (${r.length} currently) or user asks to create/generate tests.
|
|
18
|
-
- analyze_results: Analyze recent eval failures and propose improvements based on user feedback. Choose this when user gives qualitative feedback like "this is wrong", "missing X", etc.
|
|
19
|
-
- propose_changes: Propose specific content edits based on conversation. Choose this when user asks for improvements or changes.
|
|
20
|
-
- respond: Just answer a question without running any evals. Choose this for informational questions.
|
|
21
|
-
|
|
22
|
-
Respond with ONLY valid JSON:
|
|
23
|
-
{"action": "run_evals", "response": "What you want to say to the user", "params": {}}`,o=await w({prompt:n,timeout:3e4});try{let e=o.output.trim(),s=e.match(/\{[\s\S]*\}/);return s&&(e=s[0]),JSON.parse(e)}catch{d("Failed to parse action decision, defaulting to respond");let e=a.toLowerCase();return e.includes("run")||e.includes("test")||e.includes("eval")?{action:"run_evals",response:"Running evals now..."}:e.includes("generate")||e.includes("create")||r.length===0&&e.includes("start")?{action:"generate_cases",response:"Generating test cases..."}:{action:"respond",response:"I can help you run evals, generate test cases, or analyze results. What would you like to do?"}}}v(C,"decideAction");async function x(t,r,u,a,d){if(r.length===0){await a("No eval cases exist yet. Would you like me to generate some from the instruction content?","text");return}await a(`Running ${r.length} evals against "${t.name}" v${t.version}...`,"status");let c=[];for(let e of r){d(`Running: ${e.name} (with_target)`);let s=await w({prompt:e.prompt,targetContent:t.content,timeout:12e4}),i=!1,g="",l={};!s.error&&e.expectations.length>0&&(l=await y({prompt:e.prompt,output:s.output,expectations:e.expectations,timeout:12e4}),i=l?.summary?.pass_rate>=1,g=l?.expectations?.map(m=>`${m.passed?"PASS":"FAIL"}: ${m.text} \u2014 ${m.evidence}`).join(`
|
|
24
|
-
`)??"");try{await f("/api/eval-runs",{evalId:e.id,evalTargetId:t.id,evalTargetVersion:t.version,configuration:"with_target",status:s.error?"failed":"completed",outputs:s.error?{error:s.error}:{transcript:s.output},timing:{duration_ms:s.durationMs,total_tokens:s.totalTokens},grading:l})}catch(p){d(`eval-run persist failed (non-fatal): ${p instanceof Error?p.message:String(p)}`)}c.push({evalName:e.name,passed:i,output:s.error??s.output.slice(0,2e3),expectations:e.expectations,evidence:g,configuration:"with_target"})}let n=c.filter(e=>e.passed).length,o=c.length;await a(`${n} of ${o} evals passed (${Math.round(n/o*100)}%)`,"results",{summary:{passed:n,failed:o-n,total:o,passRate:n/o},results:c.map(e=>({evalName:e.evalName,passed:e.passed,output:e.output,expectations:e.expectations,evidence:e.evidence}))})}v(x,"handleRunEvals");async function _(t,r,u,a,d){await a("Generating eval cases from instruction content...","status"),d("Calling eval-from-context endpoint");let c=await f("/api/eval-from-context",{evalTargetId:t.id,name:t.name,type:t.type,content:t.content,config:{skipBaseline:!1,skipGrading:!1}}),n=await h(`/api/eval-targets/${t.id}/evals`);await a(c.evalCasesCreated>0?`Generated ${c.evalCasesCreated} eval cases. Review them below:`:`This target already has ${n.length} eval case${n.length===1?"":"s"}:`,"generated",{cases:n.map(o=>({id:o.id,name:o.name,prompt:o.prompt,expectations:o.expectations}))})}v(_,"handleGenerateCases");async function k(t,r,u,a,d,c,n){await c("Analyzing results and preparing improvements...","status");let e=[...u].reverse().find(i=>i.type==="results")?.data?.results?.map(i=>({evalName:i.evalName,prompt:"",expectations:i.expectations??[],grading:{summary:{pass_rate:i.passed?1:0},expectations:i.expectations?.map(g=>({text:g,passed:i.passed,evidence:i.evidence??""}))}}))??[];n(`Analyzing ${e.length} eval results with user feedback`);let s=await $({content:t.content,evalResults:e,model:void 0,timeout:12e4,userFeedback:a});await c(s.overallAssessment,"proposal",{suggestions:s.suggestions,proposedContent:s.proposedContent,fromVersion:t.version})}v(k,"handleAnalyzeAndPropose");export{I as a};
|
package/dist/chunk-W2MZ4XZ6.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import{a as u}from"./chunk-QH7VY5HJ.js";import{a as l}from"./chunk-ZLLER3HP.js";var y='Warning: trigger "accuracy" is heuristic \u2014 the skill content is always injected during execution, so scores measure detectable influence on the output, not real description-gated triggering.',w=`You are determining whether an AI assistant's response shows evidence of using a specific skill/instruction.
|
|
2
|
-
|
|
3
|
-
You will receive:
|
|
4
|
-
1. The skill name and description
|
|
5
|
-
2. Key content from the skill (to know what it teaches)
|
|
6
|
-
3. The user's query
|
|
7
|
-
4. The AI's response
|
|
8
|
-
|
|
9
|
-
Determine if the response shows clear signs of the skill being used:
|
|
10
|
-
- Does the response follow patterns/approaches described in the skill?
|
|
11
|
-
- Does it use terminology or structures specific to the skill?
|
|
12
|
-
- Would the response be noticeably different without the skill?
|
|
13
|
-
|
|
14
|
-
Respond with ONLY a valid JSON object:
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
"triggered": true,
|
|
18
|
-
"confidence": 0.85,
|
|
19
|
-
"evidence": "The response follows the X pattern described in the skill..."
|
|
20
|
-
}`;async function v(t){let{query:r,shouldTrigger:e,skillName:m,skillDescription:T,skillContent:a,model:g,timeout:k=12e4}=t,s=await u({prompt:r,targetContent:a,timeout:k,model:g});if(s.error)return{query:r,shouldTrigger:e,didTrigger:!1,correct:!e,confidence:0,evidence:`Execution failed: ${s.error}`};let b=`## Skill
|
|
21
|
-
Name: ${m}
|
|
22
|
-
Description: ${T}
|
|
23
|
-
|
|
24
|
-
## Key Skill Content (first 500 chars)
|
|
25
|
-
${a.slice(0,500)}
|
|
26
|
-
|
|
27
|
-
## User Query
|
|
28
|
-
${r}
|
|
29
|
-
|
|
30
|
-
## AI Response
|
|
31
|
-
${s.output}
|
|
32
|
-
|
|
33
|
-
Did the AI's response show evidence of using this skill? Respond with ONLY valid JSON.`,d=await u({prompt:b,targetContent:w,timeout:6e4,model:g}),n=!1,h=0,o="";try{let i=d.output.trim(),p=i.match(/```(?:json)?\s*([\s\S]*?)```/);p&&(i=p[1].trim());let f=i.match(/\{[\s\S]*\}/);f&&(i=f[0]);let c=JSON.parse(i);n=c.triggered===!0,h=c.confidence??0,o=c.evidence??""}catch{o=`Detector returned unparseable output: ${d.output.slice(0,200)}`}return{query:r,shouldTrigger:e,didTrigger:n,correct:n===e,confidence:h,evidence:o}}l(v,"testTrigger");function D(t){return t.length===0?0:t.filter(e=>e.correct).length/t.length}l(D,"computeTriggerScore");export{y as a,v as b,D as c};
|