@rulemetric/cli 0.7.4 → 0.7.6
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/README.md +10 -8
- package/dist/base-command.js +1 -1
- package/dist/{chunk-O7ZMHCMG.js → chunk-2JRDG4LJ.js} +14 -14
- package/dist/{chunk-HOHD5HY2.js → chunk-2XGMDWFF.js} +1 -1
- package/dist/{chunk-F2VP4B4J.js → chunk-32EEBARV.js} +1 -1
- package/dist/chunk-4L5CU7LH.js +1 -0
- package/dist/chunk-CPMKMB7S.js +1 -0
- package/dist/{chunk-VAFAH6QL.js → chunk-DCLWFGEA.js} +1 -1
- package/dist/{chunk-IY5NXR3N.js → chunk-DPFNJZUO.js} +1 -1
- package/dist/{chunk-7XQ4VPLC.js → chunk-EXJLLRZW.js} +1 -1
- package/dist/chunk-FLMBC5E4.js +1 -0
- package/dist/{chunk-T3W5N3BP.js → chunk-G6XGDHGC.js} +1 -1
- package/dist/chunk-GQJKQH3K.js +2 -0
- package/dist/{chunk-TIQ7DQ3M.js → chunk-H2ORWIEY.js} +1 -1
- package/dist/chunk-HS7X43XE.js +24 -0
- package/dist/{chunk-Y65CSJFF.js → chunk-JAPCCEKF.js} +1 -1
- package/dist/{chunk-V5QFOF4F.js → chunk-KAF3CYRW.js} +1 -1
- package/dist/{chunk-EUHNCVJQ.js → chunk-KV325CXF.js} +3 -3
- package/dist/{chunk-FHVBTDBM.js → chunk-N7TGRFVZ.js} +13 -12
- package/dist/{chunk-I4YJ7NTX.js → chunk-NEACEHQD.js} +1 -1
- package/dist/chunk-O2SDD2WW.js +1 -0
- package/dist/chunk-O6C2UGBY.js +7 -0
- package/dist/chunk-PPKPCXJD.js +4 -0
- package/dist/{chunk-VWEXKDWG.js → chunk-QFVGUZDO.js} +1 -1
- package/dist/{chunk-VMWY7KHH.js → chunk-RDET7CKR.js} +1 -1
- package/dist/chunk-RQ424GI6.js +5 -0
- package/dist/chunk-SYQWEAJR.js +1 -0
- package/dist/{chunk-PZS2KOU7.js → chunk-TIOKY2IA.js} +1 -1
- package/dist/chunk-TQMG647B.js +15 -0
- package/dist/{chunk-WJUQBMTF.js → chunk-U6ABMRT3.js} +1 -1
- package/dist/chunk-U6XEU573.js +1 -0
- package/dist/{chunk-CRAKDQ4H.js → chunk-V44SRRYR.js} +1 -1
- package/dist/{chunk-WPJ2BND4.js → chunk-VLOX6KOM.js} +1 -1
- package/dist/chunk-W2MOTOQE.js +1 -0
- package/dist/chunk-XICLXXRH.js +1 -0
- package/dist/{chunk-2UC3ULIG.js → chunk-XXDZJ6YI.js} +1 -1
- package/dist/{chunk-SBILN45P.js → chunk-ZR3MUNLS.js} +1 -1
- package/dist/commands/antigravity/backfill.js +1 -1
- package/dist/commands/auth/create-key.js +1 -1
- package/dist/commands/auth/login.js +1 -1
- package/dist/commands/auth/logout.js +1 -1
- package/dist/commands/auth/revoke-key.js +4 -1
- package/dist/commands/auth/signup.js +1 -1
- package/dist/commands/auth/status.js +1 -1
- package/dist/commands/catalog/index.js +1 -1
- package/dist/commands/catalog/recommend.js +1 -1
- package/dist/commands/convert.js +1 -1
- package/dist/commands/converters.js +1 -1
- package/dist/commands/crons/list.js +1 -1
- package/dist/commands/crons/run.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/diagnostics.js +1 -1
- package/dist/commands/eval-targets/create.js +1 -1
- package/dist/commands/eval-targets/list.js +1 -1
- package/dist/commands/evals/agent.js +1 -1
- package/dist/commands/evals/benchmark.js +6 -6
- package/dist/commands/evals/compare.js +1 -1
- package/dist/commands/evals/create.js +1 -1
- package/dist/commands/evals/optimize-description.js +15 -15
- package/dist/commands/evals/optimize.js +5 -5
- package/dist/commands/evals/run.js +1 -1
- package/dist/commands/gateway/ensure.js +1 -1
- package/dist/commands/hooks/install.js +1 -1
- package/dist/commands/hooks/run.js +1 -1
- package/dist/commands/hooks/uninstall.js +1 -1
- package/dist/commands/import.js +1 -1
- package/dist/commands/instructions/create.js +1 -1
- package/dist/commands/instructions/delete.js +1 -1
- package/dist/commands/instructions/fork.js +1 -1
- package/dist/commands/instructions/get.js +1 -1
- package/dist/commands/instructions/list.js +1 -1
- package/dist/commands/instructions/promote.js +1 -1
- package/dist/commands/instructions/pull.js +1 -1
- package/dist/commands/instructions/upstream.js +1 -1
- package/dist/commands/instructions/versions.js +1 -1
- package/dist/commands/launcher.js +1 -1
- package/dist/commands/org/current.js +1 -1
- package/dist/commands/org/list.js +1 -1
- package/dist/commands/org/switch.js +1 -1
- package/dist/commands/packs/add-instruction.js +1 -1
- package/dist/commands/packs/apply.js +1 -1
- package/dist/commands/packs/create.js +1 -1
- package/dist/commands/packs/fork.js +1 -1
- package/dist/commands/packs/get.js +1 -1
- package/dist/commands/packs/list.js +1 -1
- package/dist/commands/packs/remove-instruction.js +1 -1
- package/dist/commands/proxy/env.js +1 -1
- package/dist/commands/proxy/logs.js +1 -1
- package/dist/commands/proxy/restart.js +1 -1
- package/dist/commands/proxy/setup.js +13 -11
- package/dist/commands/proxy/start.js +1 -1
- package/dist/commands/proxy/status.js +1 -1
- package/dist/commands/proxy/stop.js +1 -1
- package/dist/commands/research/backfill.js +1 -1
- package/dist/commands/research/tail-transcript.js +1 -1
- package/dist/commands/service/install.js +5 -5
- package/dist/commands/service/status.js +1 -1
- package/dist/commands/service/uninstall.js +1 -1
- package/dist/commands/sessions/analyze.js +1 -3
- package/dist/commands/sessions/end.js +2 -2
- package/dist/commands/sessions/import.js +1 -1
- package/dist/commands/sessions/list.js +1 -1
- package/dist/commands/sessions/start.js +1 -1
- package/dist/commands/setup.js +1 -1
- package/dist/commands/skills/export-approved.js +1 -1
- package/dist/commands/skills/install.js +1 -1
- package/dist/commands/skills/list.js +1 -1
- package/dist/commands/skills/publish.js +1 -1
- package/dist/commands/skills/search.js +1 -1
- package/dist/commands/skills/update.js +1 -1
- package/dist/commands/suggestions/accept.js +3 -3
- package/dist/commands/suggestions/dismiss.js +1 -1
- package/dist/commands/suggestions/list.js +2 -1
- package/dist/commands/suggestions/refresh.js +1 -1
- package/dist/dashboard/Dashboard.js +1 -1
- package/dist/dashboard/data.js +1 -1
- package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
- package/dist/dashboard/launcher/api.js +1 -1
- package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
- package/dist/dashboard/panels/insights.js +1 -1
- package/dist/lib/active-org-refresh.js +1 -1
- package/dist/lib/agent-loop.js +1 -1
- package/dist/lib/antigravity-transcript.js +1 -1
- package/dist/lib/api-client.js +1 -1
- package/dist/lib/auth.js +1 -1
- package/dist/lib/editor-proxy-pins.js +1 -1
- package/dist/lib/ensure-api-key.js +1 -1
- package/dist/lib/ensure-fresh-token.js +1 -0
- package/dist/lib/eval-benchmark.js +1 -1
- package/dist/lib/eval-conversation-handler.js +1 -1
- package/dist/lib/eval-trigger-tester.js +1 -1
- package/dist/lib/handlers/cron-refresh-pricing.js +1 -1
- package/dist/lib/handlers/cron-suggest-instructions.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-launch.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/hooks-config.js +1 -1
- package/dist/lib/insights-prompts.js +1 -1
- package/dist/lib/manual-tasks.js +1 -1
- package/dist/lib/research-client.js +1 -1
- package/dist/lib/setup-steps.js +1 -1
- package/dist/lib/telemetry.js +1 -1
- package/dist/lib/terminal-target-heartbeat.js +1 -1
- package/oclif.manifest.json +145 -167
- package/package.json +7 -6
- package/dist/chunk-72XLQE3X.js +0 -2
- package/dist/chunk-AHRHCERJ.js +0 -1
- package/dist/chunk-DT4GKEP5.js +0 -5
- package/dist/chunk-E4SFUPYR.js +0 -15
- package/dist/chunk-FEHM5OKW.js +0 -1
- package/dist/chunk-HP2BUPGS.js +0 -24
- package/dist/chunk-LQRYQE6Q.js +0 -4
- package/dist/chunk-M6AJDVCL.js +0 -5
- package/dist/chunk-ML36XQW7.js +0 -1
- package/dist/chunk-NVOTOQBA.js +0 -1
- package/dist/chunk-RTEATXTP.js +0 -1
- package/dist/chunk-RVO4HV3M.js +0 -1
- package/dist/chunk-WJ3H73G6.js +0 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ user-management release) organizations.
|
|
|
8
8
|
```bash
|
|
9
9
|
rulemetric auth login # interactive — writes ~/.config/rulemetric/env
|
|
10
10
|
rulemetric auth create-key # generate a long-lived API key
|
|
11
|
-
rulemetric auth
|
|
11
|
+
rulemetric auth status # show the current auth state (email / API key)
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
Credentials are read from (first match wins):
|
|
@@ -25,14 +25,14 @@ active org is set will stamp `sessions.org_id` to that org.
|
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
rulemetric org list # list orgs you belong to; star marks the active one
|
|
28
|
-
rulemetric org current # print the active org's slug
|
|
28
|
+
rulemetric org current # print the active org's slug and id
|
|
29
29
|
rulemetric org switch <slug> # set the active org (cached locally)
|
|
30
30
|
rulemetric org switch --clear # clear the active org (back to personal mode)
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
**Active-org resolution order:**
|
|
34
34
|
1. `RULEMETRIC_ORG_ID` environment variable (process-scoped override)
|
|
35
|
-
2. Local cache at `~/.config/rulemetric/active-org
|
|
35
|
+
2. Local cache at `~/.config/rulemetric/active-org` (written by
|
|
36
36
|
`rulemetric org switch`)
|
|
37
37
|
3. None (sessions captured without an org_id)
|
|
38
38
|
|
|
@@ -45,15 +45,17 @@ the active org in the web UI, which the CLI cache picks up).
|
|
|
45
45
|
|
|
46
46
|
## Other top-level commands
|
|
47
47
|
|
|
48
|
-
- `rulemetric instructions ...` — list, get, create,
|
|
48
|
+
- `rulemetric instructions ...` — list, get, create, delete, fork, promote, pull, upstream, versions
|
|
49
49
|
- `rulemetric convert ...` — format conversion (25+ formats)
|
|
50
50
|
- `rulemetric import ...` — bulk import from a project tree
|
|
51
|
-
- `rulemetric sessions ...` — list
|
|
52
|
-
- `rulemetric evals ...` — eval target/case/run/optimize commands
|
|
53
|
-
- `rulemetric insights sync|generate` — push local session-meta + facets up
|
|
51
|
+
- `rulemetric sessions ...` — list, start, end, import, analyze
|
|
52
|
+
- `rulemetric evals ...` — eval target/case/run/optimize commands + `agent` (background worker)
|
|
54
53
|
- `rulemetric hooks install|uninstall|run <name>` — manage tool hook scripts
|
|
55
54
|
- `rulemetric proxy ...` — start/stop the mitmproxy capture layer
|
|
56
|
-
- `rulemetric service install|uninstall` —
|
|
55
|
+
- `rulemetric service install|status|uninstall` — background services (`--worker-only` installs just the worker)
|
|
56
|
+
|
|
57
|
+
Session insights are enriched automatically (hooks + the background worker) —
|
|
58
|
+
there is no manual `insights` command.
|
|
57
59
|
|
|
58
60
|
## Tests
|
|
59
61
|
|
package/dist/base-command.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"./chunk-
|
|
1
|
+
import{a}from"./chunk-PPKPCXJD.js";import"./chunk-IZTIYR5Q.js";import"./chunk-V44SRRYR.js";import"./chunk-U6XEU573.js";import"./chunk-VLOX6KOM.js";import"./chunk-3AV3GTMP.js";import"./chunk-H2ORWIEY.js";import"./chunk-O6C2UGBY.js";import"./chunk-ZLLER3HP.js";export{a as BaseCommand};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{f as x}from"./chunk-I2DZGJRR.js";import{a as r}from"./chunk-ZLLER3HP.js";import{execSync as h}from"node:child_process";import{existsSync as c,mkdirSync as y,readFileSync as
|
|
2
|
-
`),{backupPath:o}}r(b,"writeClaudeSettingsWithBackup");function k(e){if(!c(e))return{};let t=
|
|
3
|
-
`),o}r(R,"writeCursorHooksToDir");function nt(e,t){return R(i(e,".cursor"),t)}r(nt,"writeCursorHooks");function rt(e,t=
|
|
4
|
-
`),s}r(st,"writeCopilotHooks");function A(e){if(!c(e))return!1;let t;try{t=JSON.parse(
|
|
5
|
-
`),o}r(A,"removeCursorHooksFromFile");function it(e){return A(i(e,".cursor","hooks.json"))}r(it,"removeCursorHooks");function ut(){return A(i(
|
|
1
|
+
import{f as x}from"./chunk-I2DZGJRR.js";import{a as r}from"./chunk-ZLLER3HP.js";import{execSync as h}from"node:child_process";import{existsSync as c,mkdirSync as y,readFileSync as p,writeFileSync as a,unlinkSync as S,copyFileSync as $}from"node:fs";import{homedir as d}from"node:os";import{join as i,dirname as N}from"node:path";function q(e){let t=["claude_code"];return c(i(e,".cursor"))&&t.push("cursor"),c(i(e,".github"))&&t.push("copilot_agent"),c(i(e,".agents"))&&t.push("antigravity"),t}r(q,"detectInstalledTools");function U(e){let t=e?`PATH="${e}:$PATH" `:"",o=r(n=>({command:`${t}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],beforeSubmitPrompt:[o("user-prompt")],afterFileEdit:[o("post-tool-use")],beforeShellExecution:[o("post-tool-use")],afterShellExecution:[o("post-tool-use")],beforeMCPExecution:[o("post-tool-use")],afterMCPExecution:[o("post-tool-use")],afterAgentResponse:[o("assistant-response")],stop:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(U,"generateCursorHooksConfig");function L(e){let t=e?`PATH="${e}:$PATH" `:"",o=r(n=>({type:"command",bash:`${t}rulemetric hooks run ${n}`}),"cmd");return{version:1,hooks:{sessionStart:[o("session-start")],userPromptSubmitted:[o("user-prompt")],postToolUse:[o("post-tool-use")],sessionEnd:[o("session-end")]}}}r(L,"generateCopilotHooksConfig");function B(e){let t=e?`PATH="${e}:$PATH" `:"",o=r(n=>({type:"command",command:`${t}rulemetric hooks run ${n}`}),"mk");return{SessionStart:[{hooks:[o("session-start")]}],UserPromptSubmit:[{hooks:[o("user-prompt")]}],PostToolUse:[{matcher:".*",hooks:[o("post-tool-use")]}],SessionEnd:[{hooks:[o("session-end")]}]}}r(B,"generateClaudeCodeHooksConfig");function J(e){if(!c(e))return{settings:{},recoveredBackup:null};let t=p(e,"utf-8");try{return{settings:JSON.parse(t),recoveredBackup:null}}catch{let o=`${e}.corrupt.bak`;return a(o,t),{settings:{},recoveredBackup:o}}}r(J,"readClaudeSettings");function b(e,t){y(N(e),{recursive:!0});let o=null;return c(e)&&(o=`${e}.bak`,$(e,o)),a(e,JSON.stringify(t,null,2)+`
|
|
2
|
+
`),{backupPath:o}}r(b,"writeClaudeSettingsWithBackup");function k(e){if(!c(e))return{};let t=p(e,"utf-8");try{return JSON.parse(t)}catch{try{a(`${e}.corrupt.bak`,t)}catch{}return null}}r(k,"readMergeableJson");function Q(e,t){let o=B(t),n=e.hooks??{};for(let[s,u]of Object.entries(o)){let l=n[s]??[];l.some(m=>m?.hooks?.some(f=>typeof f?.command=="string"&&f.command.includes("rulemetric")))||(n[s]=[...l,...u])}e.hooks=n}r(Q,"mergeClaudeCodeHooks");function Z(e){if(!e.hooks||typeof e.hooks!="object")return!1;let t=e.hooks;return Object.values(t).some(o=>Array.isArray(o)&&o.some(n=>n?.hooks?.some(s=>typeof s?.command=="string"&&s.command.includes("rulemetric"))))}r(Z,"hasRulemetricClaudeHooks");function D(e){if(!e.hooks||typeof e.hooks!="object")return!1;let t=e.hooks,o=0;for(let n of Object.keys(t)){let s=t[n];if(!Array.isArray(s))continue;let u=s.filter(l=>{let g=l?.hooks?.some(m=>typeof m?.command=="string"&&m.command.includes("rulemetric"));return g&&(o+=1),!g});u.length===0?delete t[n]:t[n]=u}return Object.keys(t).length===0&&delete e.hooks,o>0}r(D,"removeClaudeCodeHooks");var X="localhost,127.0.0.1,*.supabase.co,*.supabase.in";function tt(e,t){return i(e,t?"settings.json":"settings.local.json")}r(tt,"claudeSettingsInstallPath");function M(e,t){let o=e.env;if(!o||typeof o!="object")return!1;let n=!1,s=o.HTTPS_PROXY;(s===`http://localhost:${t}`||s===`http://127.0.0.1:${t}`)&&(delete o.HTTPS_PROXY,n=!0),o.NO_PROXY===X&&(delete o.NO_PROXY,n=!0);let u=o.NODE_EXTRA_CA_CERTS;return typeof u=="string"&&u.includes(".mitmproxy")&&u.endsWith("mitmproxy-ca-cert.pem")&&(delete o.NODE_EXTRA_CA_CERTS,n=!0),n&&Object.keys(o).length===0&&delete e.env,n}r(M,"removeRulemetricProxyEnv");function C(e,t){let o=D(e),n=M(e,t),s=x(e);return{removedHooks:o,removedProxyEnv:n,removedStatusline:s,removed:o||n||s}}r(C,"removeRulemetricMachineState");function et(e,t){let o={migrated:!1,backupPath:null,removedHooks:!1,removedProxyEnv:!1,removedStatusline:!1,removed:!1};if(!c(e))return o;let n;try{n=JSON.parse(p(e,"utf-8"))}catch{return o}let s=C(n,t);if(!s.removed)return o;let{backupPath:u}=b(e,n);return{...s,migrated:!0,backupPath:u}}r(et,"migrateSharedClaudeSettings");function ot(e,t){let o=[];for(let n of["settings.json","settings.local.json"]){let s=i(e,n);if(!c(s))continue;let{settings:u,recoveredBackup:l}=J(s),g=C(u,t);g.removed&&b(s,u),o.push({...g,configPath:s,fileName:n,recoveredBackup:l,changed:g.removed})}return o}r(ot,"cleanClaudeSettingsFiles");function R(e,t){if(!c(e))return null;let o=i(e,"hooks.json"),n=U(t),s=k(o);if(s===null)return null;let u=s,l={...u.hooks??{}},g=r(f=>typeof f=="object"&&f!==null&&"command"in f&&typeof f.command=="string"&&f.command.includes("rulemetric"),"isRulemetricHook");for(let[f,w]of Object.entries(n.hooks)){let j=(l[f]??[]).filter(_=>!g(_));l[f]=[...j,...w]}let m={version:u.version??n.version,hooks:l};return a(o,JSON.stringify(m,null,2)+`
|
|
3
|
+
`),o}r(R,"writeCursorHooksToDir");function nt(e,t){return R(i(e,".cursor"),t)}r(nt,"writeCursorHooks");function rt(e,t=d()){let o=i(t,".cursor");return c(o)?R(o,e):null}r(rt,"writeCursorUserHooks");function st(e,t){let o=i(e,".github");if(!c(o))return null;let n=i(o,"hooks");y(n,{recursive:!0});let s=i(n,"rulemetric.json"),u=L(t);return a(s,JSON.stringify(u,null,2)+`
|
|
4
|
+
`),s}r(st,"writeCopilotHooks");function A(e){if(!c(e))return!1;let t;try{t=JSON.parse(p(e,"utf-8"))}catch{return!1}if(!t.hooks)return!1;let o=!1;for(let[n,s]of Object.entries(t.hooks)){let u=s.filter(l=>{if(typeof l!="object"||l===null||!("command"in l))return!0;let g=l.command;return typeof g=="string"&&g.includes("rulemetric")?(o=!0,!1):!0});u.length===0?delete t.hooks[n]:t.hooks[n]=u}return o&&a(e,JSON.stringify(t,null,2)+`
|
|
5
|
+
`),o}r(A,"removeCursorHooksFromFile");function it(e){return A(i(e,".cursor","hooks.json"))}r(it,"removeCursorHooks");function ut(){return A(i(d(),".cursor","hooks.json"))}r(ut,"removeCursorUserHooks");function ct(e,t,o){let n=i(e,".cursor");if(!c(n))return!1;let s=i(n,"settings.json"),u=k(s);return u===null?!1:(u["http.proxy"]=`http://localhost:${t}`,u["http.proxyStrictSSL"]=c(o),a(s,JSON.stringify(u,null,2)+`
|
|
6
6
|
`),!0)}r(ct,"writeCursorProxyConfig");function lt(e,t,o){let n=i(e,".vscode");if(!c(n))return!1;let s=i(n,"settings.json"),u=k(s);if(u===null)return!1;u["http.proxy"]=`http://localhost:${t}`,u["http.proxyStrictSSL"]=c(o);let l=u["github.copilot.advanced"]??{};return l["debug.overrideProxyUrl"]=`http://localhost:${t}`,u["github.copilot.advanced"]=l,a(s,JSON.stringify(u,null,2)+`
|
|
7
|
-
`),!0}r(lt,"writeVSCodeProxyConfig");function at(e){let t=i(e,".vscode","settings.json");if(!c(t))return!1;let o;try{o=JSON.parse(
|
|
8
|
-
`),n}r(at,"removeVSCodeProxyConfig");function gt(e){let t=i(e,".github","hooks","rulemetric.json");return c(t)?(
|
|
7
|
+
`),!0}r(lt,"writeVSCodeProxyConfig");function at(e){let t=i(e,".vscode","settings.json");if(!c(t))return!1;let o;try{o=JSON.parse(p(t,"utf-8"))}catch{return!1}let n=!1;o["http.proxy"]&&(delete o["http.proxy"],delete o["http.proxyStrictSSL"],n=!0);let s=o["github.copilot.advanced"];return s?.["debug.overrideProxyUrl"]&&(delete s["debug.overrideProxyUrl"],Object.keys(s).length===0&&delete o["github.copilot.advanced"],n=!0),n&&a(t,JSON.stringify(o,null,2)+`
|
|
8
|
+
`),n}r(at,"removeVSCodeProxyConfig");function gt(e){let t=i(e,".github","hooks","rulemetric.json");return c(t)?(S(t),!0):!1}r(gt,"removeCopilotHooks");var H="com.rulemetric.env";function P(){return i(d(),"Library","LaunchAgents",`${H}.plist`)}r(P,"getLaunchAgentPath");function ft(e,t){if(process.platform!=="darwin")return!1;let o=`http://localhost:${e}`;try{h(`launchctl setenv HTTPS_PROXY ${o}`,{stdio:"pipe"}),c(t)&&h(`launchctl setenv NODE_EXTRA_CA_CERTS ${t}`,{stdio:"pipe"})}catch{return!1}let n=P(),s=i(d(),"Library","LaunchAgents");y(s,{recursive:!0});let u=c(t)?`launchctl setenv NODE_EXTRA_CA_CERTS ${t};`:"",l=`if nc -z -w 1 127.0.0.1 ${e} 2>/dev/null; then launchctl setenv HTTPS_PROXY ${o};${u} else launchctl unsetenv HTTPS_PROXY; launchctl unsetenv NODE_EXTRA_CA_CERTS; fi`,g=`<?xml version="1.0" encoding="UTF-8"?>
|
|
9
9
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
10
10
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
11
11
|
<plist version="1.0">
|
|
@@ -22,10 +22,10 @@ import{f as x}from"./chunk-I2DZGJRR.js";import{a as r}from"./chunk-ZLLER3HP.js";
|
|
|
22
22
|
<true/>
|
|
23
23
|
</dict>
|
|
24
24
|
</plist>
|
|
25
|
-
`;return a(n,g),!0}r(
|
|
26
|
-
`),!0)}r(
|
|
27
|
-
`),!0):!1}r(mt,"removeVSCodeUserProxyConfig");function T(){return process.platform==="darwin"?i(
|
|
28
|
-
`),!0)}r(kt,"writeCursorUserProxyConfig");function ht(){let e=T();if(!c(e))return!1;let t;try{t=JSON.parse(
|
|
29
|
-
`),!0):!1}r(ht,"removeCursorUserProxyConfig");function F(){let e=process.execPath,t=process.argv[1];return t&&t.endsWith("run.js")?`${e} ${t}`:"rulemetric"}r(F,"getRulemetricCommand");function Y(){let e=F(),t=r(o=>({type:"command",command:`RULEMETRIC_HOOK_TOOL=antigravity ${e} hooks run ${o}`,timeout:30}),"mk");return{rulemetric:{enabled:!0,SessionStart:[{hooks:[t("session-start")]}],
|
|
30
|
-
`),t}r(E,"writeAntigravityHooksToDir");function yt(e){return E(i(e,".agents"))}r(yt,"writeAntigravityHooks");function
|
|
31
|
-
`);return!0}r(
|
|
25
|
+
`;return a(n,g),!0}r(ft,"installMacOSProxyEnv");function dt(){if(process.platform!=="darwin")return!1;let e=!1;try{h("launchctl unsetenv HTTPS_PROXY",{stdio:"pipe"}),h("launchctl unsetenv NODE_EXTRA_CA_CERTS",{stdio:"pipe"})}catch{}let t=P();return c(t)&&(S(t),e=!0),e}r(dt,"uninstallMacOSProxyEnv");function O(){return process.platform==="darwin"?i(d(),"Library","Application Support","Code","User","settings.json"):process.platform==="win32"?i(process.env.APPDATA??"","Code","User","settings.json"):i(d(),".config","Code","User","settings.json")}r(O,"getVSCodeUserSettingsPath");function pt(e){let t=O();if(!c(i(t,"..")))return!1;let o=k(t);return o===null||o["http.proxy"]&&!o["http.proxy"].includes("localhost")?!1:(o["http.proxy"]=`http://localhost:${e}`,o["http.proxyStrictSSL"]=!1,a(t,JSON.stringify(o,null,2)+`
|
|
26
|
+
`),!0)}r(pt,"writeVSCodeUserProxyConfig");function mt(){let e=O();if(!c(e))return!1;let t;try{t=JSON.parse(p(e,"utf-8"))}catch{return!1}return t["http.proxy"]?.includes("localhost")?(delete t["http.proxy"],delete t["http.proxyStrictSSL"],a(e,JSON.stringify(t,null,2)+`
|
|
27
|
+
`),!0):!1}r(mt,"removeVSCodeUserProxyConfig");function T(){return process.platform==="darwin"?i(d(),"Library","Application Support","Cursor","User","settings.json"):process.platform==="win32"?i(process.env.APPDATA??"","Cursor","User","settings.json"):i(d(),".config","Cursor","User","settings.json")}r(T,"getCursorUserSettingsPath");function kt(e){let t=T();if(!c(i(t,"..")))return!1;let o=k(t);return o===null||o["http.proxy"]&&!o["http.proxy"].includes("localhost")?!1:(o["http.proxy"]=`http://localhost:${e}`,o["http.proxyStrictSSL"]=!1,a(t,JSON.stringify(o,null,2)+`
|
|
28
|
+
`),!0)}r(kt,"writeCursorUserProxyConfig");function ht(){let e=T();if(!c(e))return!1;let t;try{t=JSON.parse(p(e,"utf-8"))}catch{return!1}return t["http.proxy"]?.includes("localhost")?(delete t["http.proxy"],delete t["http.proxyStrictSSL"],a(e,JSON.stringify(t,null,2)+`
|
|
29
|
+
`),!0):!1}r(ht,"removeCursorUserProxyConfig");function F(){let e=process.execPath,t=process.argv[1];return t&&t.endsWith("run.js")?`${e} ${t}`:"rulemetric"}r(F,"getRulemetricCommand");function Y(){let e=F(),t=r(o=>({type:"command",command:`RULEMETRIC_HOOK_TOOL=antigravity ${e} hooks run ${o}`,timeout:30}),"mk");return{rulemetric:{enabled:!0,SessionStart:[{hooks:[t("session-start")]}],PostToolUse:[{matcher:".*",hooks:[t("post-tool-use")]}],SessionEnd:[{hooks:[t("session-end")]}]}}}r(Y,"generateAntigravityHooksConfig");function E(e){let t=i(e,"hooks.json"),o=k(t);if(o===null)return null;let n=Y(),s={...o,rulemetric:n.rulemetric};return y(e,{recursive:!0}),a(t,JSON.stringify(s,null,2)+`
|
|
30
|
+
`),t}r(E,"writeAntigravityHooksToDir");function yt(e){return E(i(e,".agents"))}r(yt,"writeAntigravityHooks");function vt(e=d()){let t=i(e,".gemini");return c(t)?E(i(t,"config")):null}r(vt,"writeAntigravityUserHooks");function v(e){if(!c(e))return!1;let t;try{t=JSON.parse(p(e,"utf-8"))}catch{return!1}if(!("rulemetric"in t))return!1;if(delete t.rulemetric,Object.keys(t).length===0)try{S(e)}catch{}else a(e,JSON.stringify(t,null,2)+`
|
|
31
|
+
`);return!0}r(v,"removeAntigravityHooksFromFile");function St(e){return v(i(e,".agents","hooks.json"))}r(St,"removeAntigravityHooks");function xt(){let e=v(i(d(),".gemini","config","hooks.json")),t=v(i(d(),".gemini","hooks.json"));return e||t}r(xt,"removeAntigravityUserHooks");export{q as a,U as b,L as c,B as d,J as e,b as f,Q as g,Z as h,D as i,X as j,tt as k,M as l,C as m,et as n,ot as o,nt as p,rt as q,st as r,it as s,ut as t,ct as u,lt as v,at as w,gt as x,ft as y,dt as z,O as A,pt as B,mt as C,T as D,kt as E,ht as F,Y as G,yt as H,vt as I,St as J,xt as K};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{f as d}from"./chunk-RTWRHIKY.js";import{c as e,d as o,h as y}from"./chunk-4L5CU7LH.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{a as R}from"./chunk-5RBLIVBF.js";import{a as N}from"./chunk-2TC6WCUT.js";import{a as C}from"./chunk-6V4WM73L.js";import{a as I}from"./chunk-CADKBP3D.js";import{a as M}from"./chunk-MGHFDHHM.js";import{
|
|
1
|
+
import{a as R}from"./chunk-5RBLIVBF.js";import{a as N}from"./chunk-2TC6WCUT.js";import{a as C}from"./chunk-6V4WM73L.js";import{a as I}from"./chunk-CADKBP3D.js";import{a as M}from"./chunk-MGHFDHHM.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as m,c as Wn}from"./chunk-ZLLER3HP.js";import{boolean as mo,pgTable as Xn,text as Fe,timestamp as Tt,uuid as po}from"drizzle-orm/pg-core";import{pgTable as He,text as $,timestamp as ye,jsonb as lo,uuid as F,primaryKey as co}from"drizzle-orm/pg-core";var d=He("organizations",{id:F("id").primaryKey().defaultRandom(),name:$("name").unique().notNull(),slug:$("slug").unique().notNull(),metadata:lo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow(),updatedAt:ye("updated_at",{withTimezone:!0}).defaultNow()}),x=He("teams",{id:F("id").primaryKey().defaultRandom(),orgId:F("org_id").references(()=>d.id,{onDelete:"cascade"}),name:$("name").notNull(),slug:$("slug").notNull(),metadata:lo("metadata"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()}),Z=He("user_organizations",{userId:F("user_id").notNull(),orgId:F("org_id").references(()=>d.id,{onDelete:"cascade"}).notNull(),role:$("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[co({columns:[e.userId,e.orgId]})]),ee=He("user_teams",{userId:F("user_id").notNull(),teamId:F("team_id").references(()=>x.id,{onDelete:"cascade"}).notNull(),role:$("role").notNull().default("member"),createdAt:ye("created_at",{withTimezone:!0}).defaultNow()},e=>[co({columns:[e.userId,e.teamId]})]);var o=Xn("profiles",{id:po("id").primaryKey(),email:Fe("email"),displayName:Fe("display_name"),activeOrgId:po("active_org_id").references(()=>d.id,{onDelete:"set null"}),isSuperadmin:mo("is_superadmin").notNull().default(!1),claudeCodePlan:Fe("claude_code_plan"),planSource:Fe("plan_source").notNull().default("detected"),setupCompletedAt:Tt("setup_completed_at",{withTimezone:!0}),liveSendSkipped:mo("live_send_skipped").notNull().default(!1),createdAt:Tt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Tt("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as or,text as oe,timestamp as bt,jsonb as No,uuid as Je,integer as nr,boolean as rr,index as Dt}from"drizzle-orm/pg-core";import{boolean as Zn,jsonb as er,pgTable as zt,primaryKey as xo,text as G,timestamp as Te,uniqueIndex as At,uuid as V}from"drizzle-orm/pg-core";import{sql as tr}from"drizzle-orm";import{pgTable as _o,text as f,timestamp as Ie,jsonb as Ve,uuid as P,integer as wt,boolean as $n,uniqueIndex as fo,index as Ge}from"drizzle-orm/pg-core";var n=_o("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:Ve("frontmatter").notNull(),slots:Ve("slots"),tags:f("tags").array(),compatibility:f("compatibility").array(),createdBy:P("created_by"),createdAt:Ie("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ie("updated_at",{withTimezone:!0}).defaultNow(),archived:$n("archived").default(!1),archivedAt:Ie("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:wt("scan_score"),scanFindings:Ve("scan_findings"),popularityScore:wt("popularity_score"),sourceUpdatedAt:Ie("source_updated_at",{withTimezone:!0})},e=>[fo("instructions_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Ge("idx_instructions_scope").on(e.scope,e.scopeRef),Ge("idx_instructions_created_by").on(e.createdBy),Ge("idx_instructions_context_identity").on(e.createdBy,e.contextIdentity),Ge("idx_instructions_public_recency").on(e.scope,e.sourceUpdatedAt.desc())]),te=_o("instruction_versions",{id:P("id").primaryKey().defaultRandom(),instructionId:P("instruction_id").references(()=>n.id,{onDelete:"cascade"}),versionNumber:wt("version_number").notNull(),content:f("content").notNull(),frontmatter:Ve("frontmatter").notNull(),changeSummary:f("change_summary"),createdBy:P("created_by"),createdAt:Ie("created_at",{withTimezone:!0}).defaultNow()},e=>[fo("instruction_versions_instruction_version_idx").on(e.instructionId,e.versionNumber)]);var u=zt("projects",{id:V("id").primaryKey().defaultRandom(),orgId:V("org_id").references(()=>d.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:er("metadata"),createdBy:V("created_by"),createdAt:Te("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Te("updated_at",{withTimezone:!0}).defaultNow()},e=>[At("projects_org_name_idx").on(e.orgId,e.name),At("projects_git_remote_url_unique").on(e.gitRemoteUrl).where(tr`${e.gitRemoteUrl} IS NOT NULL`)]),K=zt("project_instructions",{projectId:V("project_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),instructionId:V("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),addedAt:Te("added_at",{withTimezone:!0}).defaultNow(),addedBy:V("added_by")},e=>[xo({columns:[e.projectId,e.instructionId]})]),go=zt("project_checkouts",{projectId:V("project_id").references(()=>u.id,{onDelete:"cascade"}).notNull(),path:G("path").notNull(),isWorktree:Zn("is_worktree").notNull().default(!1),firstSeen:Te("first_seen",{withTimezone:!0}).notNull().defaultNow(),lastSeen:Te("last_seen",{withTimezone:!0}).notNull().defaultNow()},e=>[xo({columns:[e.projectId,e.path]}),At("project_checkouts_path_unique").on(e.path)]);var _=or("agent_runs",{id:Je("id").primaryKey().defaultRandom(),userId:Je("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),orgId:Je("org_id").references(()=>d.id,{onDelete:"set null"}),projectId:Je("project_id").references(()=>u.id,{onDelete:"set null"}),projectPath:oe("project_path"),gitRemote:oe("git_remote"),baseBranch:oe("base_branch"),title:oe("title"),prompt:oe("prompt"),toolSpec:No("tool_spec").notNull().default([]),autoWorktree:rr("auto_worktree").notNull().default(!0),status:oe("status").notNull().default("pending"),sessionCount:nr("session_count").notNull().default(0),metadata:No("metadata").notNull().default({}),createdAt:bt("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:bt("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:bt("completed_at",{withTimezone:!0})},e=>[Dt("idx_agent_runs_user").on(e.userId),Dt("idx_agent_runs_org_created").on(e.orgId,e.createdAt),Dt("idx_agent_runs_project").on(e.projectId)]);import{pgTable as Rt,text as N,timestamp as we,jsonb as J,uuid as A,integer as Ye,uniqueIndex as vo,index as y}from"drizzle-orm/pg-core";var a=Rt("sessions",{id:A("id").primaryKey().defaultRandom(),userId:A("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),externalSessionId:N("external_session_id"),projectId:A("project_id").references(()=>u.id,{onDelete:"set null"}),orgId:A("org_id").references(()=>d.id,{onDelete:"set null"}),tool:N("tool").notNull(),projectPath:N("project_path"),gitBranch:N("git_branch"),startedAt:we("started_at",{withTimezone:!0}).notNull(),endedAt:we("ended_at",{withTimezone:!0}),eventCount:Ye("event_count").default(0),tokenUsage:J("token_usage"),analysis:J("analysis"),analyzedAt:we("analyzed_at",{withTimezone:!0}),analyzedEventCount:Ye("analyzed_event_count"),analyzedTurnCount:Ye("analyzed_turn_count"),metadata:J("metadata").default({}),origin:N("origin").notNull().default("unknown"),runId:A("run_id").references(()=>_.id,{onDelete:"set null"}),model:N("model"),harnessVersion:N("harness_version"),createdAt:we("created_at",{withTimezone:!0}).defaultNow()},e=>[y("idx_sessions_user").on(e.userId),y("idx_sessions_tool").on(e.tool),y("idx_sessions_started_at").on(e.startedAt),y("idx_sessions_project").on(e.projectId),y("idx_sessions_org_started_at").on(e.orgId,e.startedAt),y("idx_sessions_run").on(e.runId),vo("idx_sessions_user_external").on(e.userId,e.externalSessionId)]),ne=Rt("session_events",{id:A("id").primaryKey().defaultRandom(),sessionId:A("session_id").notNull().references(()=>a.id,{onDelete:"cascade"}),sequence:Ye("sequence").notNull(),eventType:N("event_type").notNull(),content:N("content"),toolName:N("tool_name"),toolInput:J("tool_input"),toolOutput:J("tool_output"),tokenUsage:J("token_usage"),model:N("model"),timestamp:we("timestamp",{withTimezone:!0}).notNull(),metadata:J("metadata").default({})},e=>[vo("session_events_session_sequence_idx").on(e.sessionId,e.sequence),y("idx_session_events_session_id").on(e.sessionId),y("idx_session_events_event_type").on(e.eventType),y("idx_session_events_model").on(e.model)]),O=Rt("session_instructions",{sessionId:A("session_id").notNull().references(()=>a.id,{onDelete:"cascade"}),instructionId:A("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),linkMethod:N("link_method").notNull()},e=>[y("idx_session_instructions_instruction_id").on(e.instructionId)]);import{boolean as sr,date as ir,index as kt,integer as ar,jsonb as dr,pgTable as Et,text as v,timestamp as C,uniqueIndex as ur,uuid as re}from"drizzle-orm/pg-core";var ho=Et("announcements",{id:re("id").primaryKey().defaultRandom(),version:v("version").notNull().unique(),releaseDate:ir("release_date").notNull(),subject:v("subject").notNull(),htmlBody:v("html_body").notNull(),textBody:v("text_body").notNull(),sections:dr("sections").notNull().default({}),status:v("status").notNull().default("draft"),recipientCount:ar("recipient_count"),sentAt:C("sent_at",{withTimezone:!0}),sentBy:re("sent_by"),error:v("error"),createdAt:C("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:C("updated_at",{withTimezone:!0}).notNull().defaultNow()},e=>[kt("idx_announcements_status").on(e.status),kt("idx_announcements_created").on(e.createdAt)]),yo=Et("announcement_deliveries",{id:re("id").primaryKey().defaultRandom(),announcementId:re("announcement_id").notNull(),userId:re("user_id").notNull(),email:v("email").notNull(),status:v("status").notNull().default("pending"),providerId:v("provider_id"),error:v("error"),sentAt:C("sent_at",{withTimezone:!0}),createdAt:C("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ur("uniq_announcement_deliveries_announcement_user").on(e.announcementId,e.userId),kt("idx_announcement_deliveries_user").on(e.userId,e.createdAt)]),Io=Et("notification_preferences",{userId:re("user_id").primaryKey(),productAnnouncements:sr("product_announcements").notNull().default(!0),unsubscribeToken:v("unsubscribe_token").notNull().unique(),unsubscribedAt:C("unsubscribed_at",{withTimezone:!0}),createdAt:C("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:C("updated_at",{withTimezone:!0}).notNull().defaultNow()});import{pgTable as lr,text as jt,timestamp as Qe,uuid as We,index as To}from"drizzle-orm/pg-core";var z=lr("org_invitations",{id:We("id").primaryKey().defaultRandom(),orgId:We("org_id").notNull().references(()=>d.id,{onDelete:"cascade"}),email:jt("email").notNull(),role:jt("role").notNull().default("member"),teamId:We("team_id").references(()=>x.id,{onDelete:"set null"}),invitedBy:We("invited_by").notNull().references(()=>o.id),token:jt("token").notNull().unique(),expiresAt:Qe("expires_at",{withTimezone:!0}).notNull(),acceptedAt:Qe("accepted_at",{withTimezone:!0}),revokedAt:Qe("revoked_at",{withTimezone:!0}),createdAt:Qe("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[To("idx_org_invitations_token").on(e.token),To("idx_org_invitations_org").on(e.orgId)]);import{pgTable as cr,text as mr,timestamp as pr,jsonb as _r,uuid as St,index as wo}from"drizzle-orm/pg-core";var se=cr("instruction_events",{id:St("id").primaryKey().defaultRandom(),instructionId:St("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),eventType:mr("event_type").notNull(),actorId:St("actor_id").notNull(),metadata:_r("metadata"),createdAt:pr("created_at",{withTimezone:!0}).defaultNow()},e=>[wo("idx_instruction_events_instruction").on(e.instructionId),wo("idx_instruction_events_type").on(e.eventType)]);import{pgTable as Ao,text as Xe,timestamp as zo,uuid as I,integer as bo,index as ie,unique as fr}from"drizzle-orm/pg-core";var b=Ao("treatment_assignments",{id:I("id").primaryKey().defaultRandom(),userId:I("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:Xe("treatment_type").notNull(),treatmentId:I("treatment_id").notNull(),treatmentVersion:bo("treatment_version").notNull().default(1),projectId:I("project_id").references(()=>u.id,{onDelete:"set null"}),assignedBy:I("assigned_by").references(()=>o.id,{onDelete:"set null"}),method:Xe("method").notNull(),assignedAt:zo("assigned_at",{withTimezone:!0}).notNull().defaultNow()},e=>[ie("idx_treatment_assignments_user").on(e.userId),ie("idx_treatment_assignments_treatment").on(e.treatmentType,e.treatmentId),ie("idx_treatment_assignments_project").on(e.projectId)]),D=Ao("treatment_exposures",{id:I("id").primaryKey().defaultRandom(),sessionId:I("session_id").notNull().references(()=>a.id,{onDelete:"cascade"}),userId:I("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),treatmentType:Xe("treatment_type").notNull(),treatmentId:I("treatment_id").notNull(),treatmentVersion:bo("treatment_version").notNull().default(1),assignmentId:I("assignment_id").references(()=>b.id,{onDelete:"set null"}),method:Xe("method").notNull(),exposedAt:zo("exposed_at",{withTimezone:!0}).notNull().defaultNow()},e=>[fr("treatment_exposures_unique").on(e.sessionId,e.treatmentType,e.treatmentId,e.treatmentVersion),ie("idx_treatment_exposures_treatment").on(e.treatmentType,e.treatmentId),ie("idx_treatment_exposures_user").on(e.userId),ie("idx_treatment_exposures_session").on(e.sessionId)]);import{pgTable as xr,text as ae,timestamp as Pt,uuid as Kt,jsonb as gr,uniqueIndex as Nr,index as Do}from"drizzle-orm/pg-core";var $e=xr("session_terminal_targets",{id:Kt("id").primaryKey().defaultRandom(),userId:Kt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sessionId:Kt("session_id").references(()=>a.id,{onDelete:"set null"}),externalSessionId:ae("external_session_id"),kind:ae("kind").notNull(),target:ae("target").notNull(),status:ae("status").notNull().default("active"),attachCommand:ae("attach_command").notNull(),projectPath:ae("project_path"),metadata:gr("metadata").notNull().default({}),lastSeenAt:Pt("last_seen_at",{withTimezone:!0}).defaultNow(),createdAt:Pt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Pt("updated_at",{withTimezone:!0}).defaultNow()},e=>[Nr("idx_session_terminal_targets_user_target").on(e.userId,e.target),Do("idx_session_terminal_targets_session").on(e.sessionId),Do("idx_session_terminal_targets_user_status").on(e.userId,e.status)]);import{boolean as vr,index as Ze,jsonb as Ro,pgTable as hr,text as Y,timestamp as Ae,uuid as et,integer as yr}from"drizzle-orm/pg-core";var ko=hr("session_send_jobs",{id:et("id").primaryKey().defaultRandom(),userId:et("user_id").notNull(),sessionId:et("session_id").notNull().references(()=>a.id,{onDelete:"cascade"}),terminalTargetId:et("terminal_target_id").references(()=>$e.id,{onDelete:"set null"}),target:Y("target").notNull(),message:Y("message").notNull(),submit:vr("submit").notNull().default(!0),delivery:Y("delivery").notNull().default("live"),status:Y("status").notNull().default("pending"),result:Ro("result"),error:Y("error"),attempts:yr("attempts").notNull().default(0),taskKind:Y("task_kind"),payload:Ro("payload"),claimedBy:Y("claimed_by"),claimedAt:Ae("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ae("lease_expires_at",{withTimezone:!0}),createdAt:Ae("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ae("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ae("completed_at",{withTimezone:!0})},e=>[Ze("idx_session_send_jobs_user").on(e.userId),Ze("idx_session_send_jobs_session").on(e.sessionId),Ze("idx_session_send_jobs_status").on(e.status),Ze("idx_session_send_jobs_pending").on(e.userId,e.status)]);import{pgTable as jo,text as Q,timestamp as tt,jsonb as So,uuid as q,integer as Ir,boolean as Tr,uniqueIndex as wr,index as Eo,primaryKey as Ar}from"drizzle-orm/pg-core";var h=jo("packs",{id:q("id").primaryKey().defaultRandom(),name:Q("name").notNull(),description:Q("description").notNull(),scope:Q("scope").notNull(),scopeRef:q("scope_ref"),version:Q("version").notNull().default("1.0.0"),tags:Q("tags").array(),badge:Q("badge"),metadata:So("metadata"),createdBy:q("created_by"),createdAt:tt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:tt("updated_at",{withTimezone:!0}).defaultNow(),archived:Tr("archived").default(!1),archivedAt:tt("archived_at",{withTimezone:!0}),archivedBy:q("archived_by"),forkedFromId:q("forked_from_id").references(()=>h.id,{onDelete:"set null"}),upstreamVersion:Q("upstream_version")},e=>[wr("packs_name_scope_ref_idx").on(e.name,e.scope,e.scopeRef),Eo("idx_packs_scope").on(e.scope,e.scopeRef),Eo("idx_packs_created_by").on(e.createdBy)]),M=jo("pack_instructions",{packId:q("pack_id").references(()=>h.id,{onDelete:"cascade"}).notNull(),instructionId:q("instruction_id").references(()=>n.id,{onDelete:"cascade"}).notNull(),position:Ir("position").notNull().default(0),slotOverrides:So("slot_overrides"),addedAt:tt("added_at",{withTimezone:!0}).defaultNow(),addedBy:q("added_by")},e=>[Ar({columns:[e.packId,e.instructionId]})]);import{pgTable as zr,text as Ot,timestamp as br,jsonb as Dr,uuid as Ct,index as de}from"drizzle-orm/pg-core";var ue=zr("instruction_usage_events",{id:Ct("id").primaryKey().defaultRandom(),instructionId:Ct("instruction_id").references(()=>n.id,{onDelete:"set null"}),userId:Ct("user_id").notNull(),surface:Ot("surface").notNull(),action:Ot("action").notNull(),metadata:Dr("metadata"),traceId:Ot("trace_id"),createdAt:br("created_at",{withTimezone:!0}).defaultNow()},e=>[de("idx_usage_events_instruction").on(e.instructionId),de("idx_usage_events_user").on(e.userId),de("idx_usage_events_surface").on(e.surface),de("idx_usage_events_action").on(e.action),de("idx_usage_events_created_at").on(e.createdAt),de("idx_usage_events_user_created").on(e.userId,e.createdAt)]);import{pgTable as Rr,text as ot,timestamp as Po,jsonb as kr,uuid as Ko,index as qt}from"drizzle-orm/pg-core";var Oo=Rr("worker_connections",{id:Ko("id").primaryKey().defaultRandom(),userId:Ko("user_id").notNull(),workerType:ot("worker_type").notNull().default("mcp"),clientName:ot("client_name").notNull(),clientVersion:ot("client_version"),workerVersion:ot("worker_version"),lastHeartbeat:Po("last_heartbeat",{withTimezone:!0}).notNull().defaultNow(),connectedAt:Po("connected_at",{withTimezone:!0}).notNull().defaultNow(),metadata:kr("metadata")},e=>[qt("idx_worker_connections_user").on(e.userId),qt("idx_worker_connections_heartbeat").on(e.userId,e.lastHeartbeat),qt("idx_worker_connections_type").on(e.userId,e.workerType)]);import{pgTable as Er,text as nt,timestamp as jr,jsonb as Sr,uuid as Co,index as qo}from"drizzle-orm/pg-core";var Mo=Er("cli_setup_events",{id:Co("id").primaryKey().defaultRandom(),userId:Co("user_id").notNull(),deviceId:nt("device_id").notNull(),event:nt("event").notNull(),cliVersion:nt("cli_version"),os:nt("os"),props:Sr("props").notNull().default({}),createdAt:jr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[qo("idx_cli_setup_events_user").on(e.userId,e.createdAt),qo("idx_cli_setup_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as Pr,text as W,integer as Kr,boolean as Or,timestamp as Cr,jsonb as qr,uuid as Mr,index as Lo}from"drizzle-orm/pg-core";var Bo=Pr("cli_error_events",{id:Mr("id").primaryKey().defaultRandom(),deviceId:W("device_id"),event:W("event").notNull(),command:W("command"),statusCode:Kr("status_code"),message:W("message"),cliVersion:W("cli_version"),os:W("os"),nodeVersion:W("node_version"),proxied:Or("proxied"),props:qr("props").notNull().default({}),createdAt:Cr("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Lo("idx_cli_error_events_created").on(e.createdAt),Lo("idx_cli_error_events_device").on(e.deviceId,e.createdAt)]);import{pgTable as rt,text as R,timestamp as le,jsonb as T,uuid as w,integer as ze,index as k}from"drizzle-orm/pg-core";var r=rt("eval_targets",{id:w("id").primaryKey().defaultRandom(),userId:w("user_id").notNull(),name:R("name").notNull(),type:R("type").notNull(),content:R("content").notNull(),description:R("description").notNull().default(""),metadata:T("metadata").notNull().default({}),version:ze("version").notNull().default(1),parentId:w("parent_id").references(()=>r.id,{onDelete:"set null"}),createdAt:le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:le("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=rt("evals",{id:w("id").primaryKey().defaultRandom(),evalTargetId:w("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),name:R("name").notNull(),prompt:R("prompt").notNull(),expectedOutput:R("expected_output").notNull().default(""),files:T("files").notNull().default([]),expectations:T("expectations").notNull().default([]),createdAt:le("created_at",{withTimezone:!0}).defaultNow(),updatedAt:le("updated_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_evals_target").on(e.evalTargetId)]),L=rt("eval_runs",{id:w("id").primaryKey().defaultRandom(),evalId:w("eval_id").notNull().references(()=>E.id,{onDelete:"cascade"}),evalTargetId:w("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),evalTargetVersion:ze("eval_target_version").notNull(),configuration:R("configuration").notNull(),runNumber:ze("run_number").notNull().default(1),iteration:ze("iteration").notNull().default(1),status:R("status").notNull().default("completed"),outputs:T("outputs").notNull().default({}),timing:T("timing").notNull().default({}),grading:T("grading").notNull().default({}),comparison:T("comparison"),createdAt:le("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)]),ce=rt("benchmarks",{id:w("id").primaryKey().defaultRandom(),evalTargetId:w("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),iteration:ze("iteration").notNull().default(1),runSummary:T("run_summary").notNull().default({}),notes:T("notes").notNull().default([]),feedback:T("feedback"),createdAt:le("created_at",{withTimezone:!0}).defaultNow()},e=>[k("idx_benchmarks_target").on(e.evalTargetId)]);import{pgTable as Ho,text as Mt,timestamp as Lt,jsonb as Fo,uuid as me,integer as be,index as st,real as Uo}from"drizzle-orm/pg-core";var pe=Ho("trigger_evals",{id:me("id").primaryKey().defaultRandom(),evalTargetId:me("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),userId:me("user_id").notNull(),queries:Fo("queries").notNull().default([]),status:Mt("status").notNull().default("pending_review"),trainIndices:be("train_indices").array().default([]),testIndices:be("test_indices").array().default([]),createdAt:Lt("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Lt("updated_at",{withTimezone:!0}).defaultNow()},e=>[st("idx_trigger_evals_target").on(e.evalTargetId),st("idx_trigger_evals_user").on(e.userId)]),_e=Ho("optimization_runs",{id:me("id").primaryKey().defaultRandom(),evalTargetId:me("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),userId:me("user_id").notNull(),type:Mt("type").notNull(),iteration:be("iteration").notNull(),inputVersion:be("input_version").notNull(),outputVersion:be("output_version"),trainScore:Uo("train_score"),testScore:Uo("test_score"),analysis:Fo("analysis").notNull().default({}),status:Mt("status").notNull().default("running"),createdAt:Lt("created_at",{withTimezone:!0}).defaultNow()},e=>[st("idx_optimization_runs_target").on(e.evalTargetId),st("idx_optimization_runs_user").on(e.userId)]);import{pgTable as Lr,text as B,timestamp as Br,jsonb as De,uuid as Bt,integer as Ut,real as Ur,index as Re,uniqueIndex as Go}from"drizzle-orm/pg-core";var U=Lr("context_snapshots",{id:Bt("id").primaryKey().defaultRandom(),sessionId:Bt("session_id").references(()=>a.id,{onDelete:"cascade"}),userId:Bt("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),sequence:Ut("sequence").notNull().default(0),provider:B("provider").notNull(),model:B("model").notNull(),systemPrompt:B("system_prompt").notNull(),injectedInstructions:De("injected_instructions").notNull().default([]),messagesSummary:De("messages_summary").notNull(),tools:De("tools").notNull().default([]),systemHash:B("system_hash").notNull(),requestHash:B("request_hash").notNull().default(""),toolsHash:B("tools_hash"),injectedHash:B("injected_hash"),messagesDelta:De("messages_delta").default([]),messagesDeltaRef:B("messages_delta_ref"),maxTokens:Ut("max_tokens"),temperature:Ur("temperature"),estimatedTokens:Ut("estimated_tokens"),capturedAt:Br("captured_at",{withTimezone:!0}).notNull().defaultNow(),metadata:De("metadata").default({})},e=>[Re("idx_context_snapshots_session").on(e.sessionId),Re("idx_context_snapshots_user").on(e.userId),Re("idx_context_snapshots_hash").on(e.systemHash),Re("idx_context_snapshots_request_hash").on(e.requestHash),Go("idx_snapshots_session_request").on(e.sessionId,e.requestHash),Go("idx_snapshots_session_sequence").on(e.sessionId,e.sequence),Re("idx_context_snapshots_user_session_captured").on(e.userId,e.sessionId,e.capturedAt.desc())]);import{pgTable as Hr,text as Vo,timestamp as Fr,jsonb as Gr,integer as Vr,index as Jr}from"drizzle-orm/pg-core";var Jo=Hr("content_blobs",{hash:Vo("hash").primaryKey(),contentType:Vo("content_type").notNull(),content:Gr("content").notNull(),sizeBytes:Vr("size_bytes").notNull().default(0),createdAt:Fr("created_at",{withTimezone:!0}).defaultNow()},e=>[Jr("idx_content_blobs_type").on(e.contentType)]);import{pgTable as Yr,text as it,timestamp as ke,jsonb as at,uuid as Ht,index as dt,integer as Qr}from"drizzle-orm/pg-core";var fe=Yr("eval_jobs",{id:Ht("id").primaryKey().defaultRandom(),userId:Ht("user_id").notNull(),evalTargetId:Ht("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),status:it("status").notNull().default("pending"),config:at("config").notNull().default({}),progress:at("progress").notNull().default({}),result:at("result"),error:it("error"),attempts:Qr("attempts").notNull().default(0),taskKind:it("task_kind"),payload:at("payload"),claimedBy:it("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=>[dt("idx_eval_jobs_user").on(e.userId),dt("idx_eval_jobs_target").on(e.evalTargetId),dt("idx_eval_jobs_status").on(e.status),dt("idx_eval_jobs_pending").on(e.userId,e.status)]);import{pgTable as Wr,text as Ee,timestamp as je,jsonb as Yo,uuid as Qo,integer as Xr,index as Wo}from"drizzle-orm/pg-core";var Xo=Wr("agent_jobs",{id:Qo("id").primaryKey().defaultRandom(),userId:Qo("user_id").notNull(),taskKind:Ee("task_kind").notNull(),status:Ee("status").notNull().default("pending"),payload:Yo("payload").notNull(),dedupeKey:Ee("dedupe_key"),result:Yo("result"),error:Ee("error"),attempts:Xr("attempts").notNull().default(0),claimedBy:Ee("claimed_by"),claimedAt:je("claimed_at",{withTimezone:!0}),leaseExpiresAt:je("lease_expires_at",{withTimezone:!0}),createdAt:je("created_at",{withTimezone:!0}).notNull().defaultNow(),updatedAt:je("updated_at",{withTimezone:!0}).notNull().defaultNow(),completedAt:je("completed_at",{withTimezone:!0})},e=>[Wo("idx_agent_jobs_claim").on(e.userId,e.status,e.taskKind,e.createdAt),Wo("idx_agent_jobs_dedupe").on(e.userId,e.taskKind,e.dedupeKey)]);import{pgTable as $r,text as Se,timestamp as Pe,jsonb as ut,uuid as Ft,index as lt,integer as Zr}from"drizzle-orm/pg-core";var $o=$r("insights_jobs",{id:Ft("id").primaryKey().defaultRandom(),userId:Ft("user_id").notNull(),status:Se("status").notNull().default("pending"),projectPath:Se("project_path"),projectId:Ft("project_id").references(()=>u.id,{onDelete:"set null"}),config:ut("config").notNull().default({}),progress:ut("progress").notNull().default({}),result:ut("result"),error:Se("error"),attempts:Zr("attempts").notNull().default(0),taskKind:Se("task_kind"),payload:ut("payload"),claimedBy:Se("claimed_by"),claimedAt:Pe("claimed_at",{withTimezone:!0}),leaseExpiresAt:Pe("lease_expires_at",{withTimezone:!0}),createdAt:Pe("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Pe("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Pe("completed_at",{withTimezone:!0})},e=>[lt("idx_insights_jobs_user").on(e.userId),lt("idx_insights_jobs_status").on(e.status),lt("idx_insights_jobs_pending").on(e.userId,e.status),lt("idx_insights_jobs_project").on(e.projectId)]);import{pgTable as es,text as Gt,timestamp as ct,uuid as Zo,index as ts,uniqueIndex as os}from"drizzle-orm/pg-core";var xe=es("api_keys",{id:Zo("id").primaryKey().defaultRandom(),userId:Zo("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),name:Gt("name").notNull(),keyHash:Gt("key_hash").notNull(),keyPrefix:Gt("key_prefix").notNull(),lastUsedAt:ct("last_used_at",{withTimezone:!0}),expiresAt:ct("expires_at",{withTimezone:!0}),revokedAt:ct("revoked_at",{withTimezone:!0}),createdAt:ct("created_at",{withTimezone:!0}).defaultNow()},e=>[ts("idx_api_keys_user").on(e.userId),os("idx_api_keys_hash").on(e.keyHash)]);import{pgTable as ns,text as Vt,timestamp as en,uuid as rs,index as ss}from"drizzle-orm/pg-core";var tn=ns("extension_auth_codes",{code:Vt("code").primaryKey(),userId:rs("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),editor:Vt("editor"),email:Vt("email"),expiresAt:en("expires_at",{withTimezone:!0}).notNull(),createdAt:en("created_at",{withTimezone:!0}).defaultNow()},e=>[ss("idx_ext_auth_codes_expiry").on(e.expiresAt)]);import{pgTable as is,text as as,timestamp as on,jsonb as ds,uuid as Jt,index as nn}from"drizzle-orm/pg-core";var ge=is("eval_conversations",{id:Jt("id").primaryKey().defaultRandom(),evalTargetId:Jt("eval_target_id").notNull().references(()=>r.id,{onDelete:"cascade"}),userId:Jt("user_id").notNull(),messages:ds("messages").notNull().default([]),status:as("status").notNull().default("active"),createdAt:on("created_at",{withTimezone:!0}).defaultNow(),updatedAt:on("updated_at",{withTimezone:!0}).defaultNow()},e=>[nn("idx_eval_conversations_target").on(e.evalTargetId),nn("idx_eval_conversations_user").on(e.userId)]);import{pgTable as us,text as j,timestamp as rn,jsonb as ls,uuid as Yt}from"drizzle-orm/pg-core";var sn=us("skill_submissions",{id:Yt("id").primaryKey().defaultRandom(),skillId:j("skill_id").notNull(),name:j("name").notNull(),description:j("description").notNull(),category:j("category").notNull(),tools:j("tools").array().notNull(),tags:j("tags").array().default([]),content:j("content").notNull(),status:j("status").notNull().default("pending"),submittedBy:Yt("submitted_by").notNull(),reviewedBy:Yt("reviewed_by"),reviewNote:j("review_note"),metadata:ls("metadata"),createdAt:rn("created_at",{withTimezone:!0}).defaultNow(),updatedAt:rn("updated_at",{withTimezone:!0}).defaultNow()});import{pgTable as cs,text as Ke,timestamp as an,jsonb as ms,uuid as ps,uniqueIndex as _s,index as dn}from"drizzle-orm/pg-core";var un=cs("harness_releases",{id:ps("id").primaryKey().defaultRandom(),harness:Ke("harness").notNull(),version:Ke("version").notNull(),publishedAt:an("published_at",{withTimezone:!0}).notNull(),title:Ke("title"),body:Ke("body"),categories:ms("categories").default({}),url:Ke("url"),createdAt:an("created_at",{withTimezone:!0}).defaultNow()},e=>[_s("idx_harness_releases_unique").on(e.harness,e.version),dn("idx_harness_releases_harness").on(e.harness),dn("idx_harness_releases_published").on(e.publishedAt)]);import{pgTable as fs,text as Ne,timestamp as ln,jsonb as xs,uuid as cn,index as mn,uniqueIndex as gs}from"drizzle-orm/pg-core";var Qt=fs("notifications",{id:cn("id").primaryKey().defaultRandom(),userId:cn("user_id").notNull(),type:Ne("type").notNull(),title:Ne("title").notNull(),body:Ne("body"),url:Ne("url"),sourceTable:Ne("source_table"),sourceId:Ne("source_id"),metadata:xs("metadata").notNull().default({}),readAt:ln("read_at",{withTimezone:!0}),createdAt:ln("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[mn("idx_notifications_user_created").on(e.userId,e.createdAt),mn("idx_notifications_user_unread").on(e.userId),gs("idx_notifications_source_dedup").on(e.userId,e.sourceTable,e.sourceId)]);import{pgTable as Ns,text as Oe,timestamp as Ce,jsonb as Wt,uuid as Xt,index as mt,integer as vs}from"drizzle-orm/pg-core";var ve=Ns("launch_jobs",{id:Xt("id").primaryKey().defaultRandom(),userId:Xt("user_id").notNull(),tool:Oe("tool").notNull(),status:Oe("status").notNull().default("pending"),config:Wt("config").notNull().default({}),result:Wt("result"),error:Oe("error"),attempts:vs("attempts").notNull().default(0),taskKind:Oe("task_kind"),payload:Wt("payload"),claimedBy:Oe("claimed_by"),claimedAt:Ce("claimed_at",{withTimezone:!0}),leaseExpiresAt:Ce("lease_expires_at",{withTimezone:!0}),createdAt:Ce("created_at",{withTimezone:!0}).defaultNow(),updatedAt:Ce("updated_at",{withTimezone:!0}).defaultNow(),completedAt:Ce("completed_at",{withTimezone:!0}),runId:Xt("run_id").references(()=>_.id,{onDelete:"set null"})},e=>[mt("idx_launch_jobs_user").on(e.userId),mt("idx_launch_jobs_status").on(e.status),mt("idx_launch_jobs_pending").on(e.userId,e.status),mt("idx_launch_jobs_run").on(e.runId)]);import{pgTable as pn,uuid as S,text as qe,real as hs,timestamp as pt,boolean as ys,uniqueIndex as Is,index as Me}from"drizzle-orm/pg-core";var $t=pn("instruction_suggestions",{id:S("id").primaryKey().defaultRandom(),userId:S("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),instructionId:S("instruction_id").notNull().references(()=>n.id,{onDelete:"cascade"}),projectPath:qe("project_path").notNull(),projectId:S("project_id").references(()=>u.id,{onDelete:"set null"}),score:hs("score").notNull(),reason:qe("reason").notNull(),generatedAt:pt("generated_at",{withTimezone:!0}).notNull().defaultNow(),isStale:ys("is_stale").notNull().default(!1),dismissedAt:pt("dismissed_at",{withTimezone:!0}),acceptedAt:pt("accepted_at",{withTimezone:!0}),promotedToInstructionId:S("promoted_to_instruction_id").references(()=>n.id,{onDelete:"set null"})},e=>[Is("idx_instruction_suggestions_user_project_instruction").on(e.userId,e.projectPath,e.instructionId),Me("idx_instruction_suggestions_user_project").on(e.userId,e.projectPath),Me("idx_instruction_suggestions_user_proj_id").on(e.userId,e.projectId),Me("idx_instruction_suggestions_generated_at").on(e.generatedAt)]),_n=pn("instruction_suggestion_events",{id:S("id").primaryKey().defaultRandom(),suggestionId:S("suggestion_id").notNull().references(()=>$t.id,{onDelete:"cascade"}),userId:S("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),eventType:qe("event_type").notNull(),tool:qe("tool"),sessionId:S("session_id"),projectPath:qe("project_path").notNull(),createdAt:pt("created_at",{withTimezone:!0}).notNull().defaultNow()},e=>[Me("idx_instruction_suggestion_events_suggestion_id").on(e.suggestionId),Me("idx_instruction_suggestion_events_user_id").on(e.userId)]);import{pgTable as Ts,text as Zt,integer as ws,numeric as Le,timestamp as eo,index as As,primaryKey as zs}from"drizzle-orm/pg-core";var fn=Ts("model_pricing",{provider:Zt("provider").notNull(),modelId:Zt("model_id").notNull(),inputPerM:Le("input_per_m").notNull(),outputPerM:Le("output_per_m").notNull(),cacheReadPerM:Le("cache_read_per_m").notNull(),cacheWrite5mPerM:Le("cache_write_5m_per_m").notNull(),cacheWrite1hPerM:Le("cache_write_1h_per_m").notNull(),contextWindow:ws("context_window"),effectiveFrom:eo("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:eo("effective_until",{withTimezone:!0}),source:Zt("source").notNull(),verifiedAt:eo("verified_at",{withTimezone:!0})},e=>[zs({columns:[e.provider,e.modelId,e.effectiveFrom]}),As("idx_model_pricing_active").on(e.provider,e.modelId,e.effectiveFrom.desc())]);import{pgTable as bs,text as X,numeric as xn,timestamp as gn,uuid as Nn,jsonb as Ds,index as vn}from"drizzle-orm/pg-core";var hn=bs("limit_observations",{id:Nn("id").primaryKey().defaultRandom(),observedAt:gn("observed_at",{withTimezone:!0}).notNull().defaultNow(),provider:X("provider").notNull(),plan:X("plan").notNull(),limitType:X("limit_type").notNull(),value:xn("value").notNull(),unit:X("unit").notNull(),comparator:X("comparator").notNull().default("="),resetsAt:gn("resets_at",{withTimezone:!0}),sourceType:X("source_type").notNull(),sourceUrl:X("source_url"),sourceEvidence:Ds("source_evidence"),confidence:xn("confidence").notNull(),userId:Nn("user_id")},e=>[vn("idx_limit_obs_lookup").on(e.provider,e.plan,e.limitType,e.observedAt.desc()),vn("idx_limit_obs_user").on(e.userId,e.observedAt.desc())]);import{pgTable as Rs,text as _t,timestamp as ks,uuid as Es,jsonb as js,boolean as Ss,uniqueIndex as Ps}from"drizzle-orm/pg-core";var yn=Rs("provider_docs_snapshots",{id:Es("id").primaryKey().defaultRandom(),fetchedAt:ks("fetched_at",{withTimezone:!0}).notNull().defaultNow(),provider:_t("provider").notNull(),docUrl:_t("doc_url").notNull(),contentHash:_t("content_hash").notNull(),content:_t("content").notNull(),parseSuccess:Ss("parse_success").notNull(),parseErrors:js("parse_errors")},e=>[Ps("idx_docs_dedup").on(e.provider,e.docUrl,e.contentHash)]);import{pgTable as Ks,text as ft,numeric as In,timestamp as Tn,uuid as Os,primaryKey as Cs,index as qs}from"drizzle-orm/pg-core";var wn=Ks("plan_limits_active",{provider:ft("provider").notNull(),plan:ft("plan").notNull(),limitType:ft("limit_type").notNull(),value:In("value").notNull(),unit:ft("unit").notNull(),effectiveFrom:Tn("effective_from",{withTimezone:!0}).notNull(),effectiveUntil:Tn("effective_until",{withTimezone:!0}),confidence:In("confidence").notNull(),sourceObservationIds:Os("source_observation_ids").array().notNull()},e=>[Cs({columns:[e.provider,e.plan,e.limitType,e.effectiveFrom]}),qs("idx_plan_limits_lookup").on(e.provider,e.plan,e.limitType,e.effectiveFrom.desc())]);import{pgTable as Ms,text as to,timestamp as Ls,uuid as An,jsonb as Bs,index as Us}from"drizzle-orm/pg-core";var zn=Ms("alert_dispatches",{id:An("id").primaryKey().defaultRandom(),userId:An("user_id").notNull(),alertKey:to("alert_key").notNull(),severity:to("severity").notNull(),lastDispatchedAt:Ls("last_dispatched_at",{withTimezone:!0}).notNull().defaultNow(),lastState:Bs("last_state").notNull(),channel:to("channel").notNull()},e=>[Us("idx_alert_user_key").on(e.userId,e.alertKey,e.lastDispatchedAt.desc())]);import{drizzle as En}from"drizzle-orm/postgres-js";import jn from"postgres";var xt={};Wn(xt,{agentJobs:()=>Xo,agentRuns:()=>_,agentRunsRelations:()=>oi,alertDispatches:()=>zn,announcementDeliveries:()=>yo,announcements:()=>ho,apiKeys:()=>xe,apiKeysRelations:()=>Fs,benchmarks:()=>ce,benchmarksRelations:()=>_i,cliErrorEvents:()=>Bo,cliSetupEvents:()=>Mo,contentBlobs:()=>Jo,contextSnapshots:()=>U,contextSnapshotsRelations:()=>vi,evalConversations:()=>ge,evalConversationsRelations:()=>Ni,evalJobs:()=>fe,evalJobsRelations:()=>gi,evalRuns:()=>L,evalRunsRelations:()=>pi,evalTargets:()=>r,evalTargetsRelations:()=>ci,evals:()=>E,evalsRelations:()=>mi,extensionAuthCodes:()=>tn,harnessReleases:()=>un,insightsJobs:()=>$o,instructionEvents:()=>se,instructionEventsRelations:()=>Xs,instructionSuggestionEvents:()=>_n,instructionSuggestions:()=>$t,instructionUsageEvents:()=>ue,instructionUsageEventsRelations:()=>li,instructionVersions:()=>te,instructionVersionsRelations:()=>$s,instructions:()=>n,instructionsRelations:()=>Ws,launchJobs:()=>ve,launchJobsRelations:()=>ni,limitObservations:()=>hn,modelPricing:()=>fn,notificationPreferences:()=>Io,notifications:()=>Qt,optimizationRuns:()=>_e,optimizationRunsRelations:()=>xi,orgInvitations:()=>z,orgInvitationsRelations:()=>Js,organizations:()=>d,organizationsRelations:()=>Gs,packInstructions:()=>M,packInstructionsRelations:()=>ui,packs:()=>h,packsRelations:()=>di,planLimitsActive:()=>wn,profiles:()=>o,profilesRelations:()=>Hs,projectCheckouts:()=>go,projectInstructions:()=>K,projectInstructionsRelations:()=>ei,projects:()=>u,projectsRelations:()=>Zs,providerDocsSnapshots:()=>yn,sessionEvents:()=>ne,sessionEventsRelations:()=>ri,sessionInstructions:()=>O,sessionInstructionsRelations:()=>si,sessionSendJobs:()=>ko,sessionTerminalTargets:()=>$e,sessions:()=>a,sessionsRelations:()=>ti,skillSubmissions:()=>sn,teams:()=>x,teamsRelations:()=>Vs,treatmentAssignments:()=>b,treatmentAssignmentsRelations:()=>ii,treatmentExposures:()=>D,treatmentExposuresRelations:()=>ai,triggerEvals:()=>pe,triggerEvalsRelations:()=>fi,userOrganizations:()=>Z,userOrganizationsRelations:()=>Ys,userTeams:()=>ee,userTeamsRelations:()=>Qs,workerConnections:()=>Oo});import{relations as i}from"drizzle-orm";var Hs=i(o,({many:e})=>({sessions:e(a),contextSnapshots:e(U),apiKeys:e(xe)})),Fs=i(xe,({one:e})=>({profile:e(o,{fields:[xe.userId],references:[o.id]})})),Gs=i(d,({many:e})=>({teams:e(x),userOrganizations:e(Z),projects:e(u),invitations:e(z)})),Vs=i(x,({one:e,many:t})=>({organization:e(d,{fields:[x.orgId],references:[d.id]}),userTeams:t(ee),invitations:t(z)})),Js=i(z,({one:e})=>({organization:e(d,{fields:[z.orgId],references:[d.id]}),team:e(x,{fields:[z.teamId],references:[x.id]}),inviter:e(o,{fields:[z.invitedBy],references:[o.id]})})),Ys=i(Z,({one:e})=>({organization:e(d,{fields:[Z.orgId],references:[d.id]})})),Qs=i(ee,({one:e})=>({team:e(x,{fields:[ee.teamId],references:[x.id]})})),Ws=i(n,({one:e,many:t})=>({versions:t(te),projectInstructions:t(K),events:t(se),usageEvents:t(ue),sessionInstructions:t(O),packInstructions:t(M),forkedFrom:e(n,{fields:[n.forkedFromId],references:[n.id]})})),Xs=i(se,({one:e})=>({instruction:e(n,{fields:[se.instructionId],references:[n.id]})})),$s=i(te,({one:e})=>({instruction:e(n,{fields:[te.instructionId],references:[n.id]})})),Zs=i(u,({one:e,many:t})=>({organization:e(d,{fields:[u.orgId],references:[d.id]}),projectInstructions:t(K),sessions:t(a)})),ei=i(K,({one:e})=>({project:e(u,{fields:[K.projectId],references:[u.id]}),instruction:e(n,{fields:[K.instructionId],references:[n.id]})})),ti=i(a,({one:e,many:t})=>({profile:e(o,{fields:[a.userId],references:[o.id]}),project:e(u,{fields:[a.projectId],references:[u.id]}),run:e(_,{fields:[a.runId],references:[_.id]}),events:t(ne),sessionInstructions:t(O),treatmentExposures:t(D),contextSnapshots:t(U)})),oi=i(_,({one:e,many:t})=>({profile:e(o,{fields:[_.userId],references:[o.id]}),organization:e(d,{fields:[_.orgId],references:[d.id]}),project:e(u,{fields:[_.projectId],references:[u.id]}),sessions:t(a),launchJobs:t(ve)})),ni=i(ve,({one:e})=>({run:e(_,{fields:[ve.runId],references:[_.id]})})),ri=i(ne,({one:e})=>({session:e(a,{fields:[ne.sessionId],references:[a.id]})})),si=i(O,({one:e})=>({session:e(a,{fields:[O.sessionId],references:[a.id]}),instruction:e(n,{fields:[O.instructionId],references:[n.id]})})),ii=i(b,({one:e,many:t})=>({owner:e(o,{fields:[b.userId],references:[o.id]}),project:e(u,{fields:[b.projectId],references:[u.id]}),exposures:t(D)})),ai=i(D,({one:e})=>({session:e(a,{fields:[D.sessionId],references:[a.id]}),owner:e(o,{fields:[D.userId],references:[o.id]}),assignment:e(b,{fields:[D.assignmentId],references:[b.id]})})),di=i(h,({one:e,many:t})=>({packInstructions:t(M),forkedFrom:e(h,{fields:[h.forkedFromId],references:[h.id]})})),ui=i(M,({one:e})=>({pack:e(h,{fields:[M.packId],references:[h.id]}),instruction:e(n,{fields:[M.instructionId],references:[n.id]})})),li=i(ue,({one:e})=>({instruction:e(n,{fields:[ue.instructionId],references:[n.id]})})),ci=i(r,({one:e,many:t})=>({parent:e(r,{fields:[r.parentId],references:[r.id]}),evals:t(E),evalRuns:t(L),benchmarks:t(ce),triggerEvals:t(pe),optimizationRuns:t(_e),evalJobs:t(fe),evalConversations:t(ge)})),mi=i(E,({one:e,many:t})=>({evalTarget:e(r,{fields:[E.evalTargetId],references:[r.id]}),runs:t(L)})),pi=i(L,({one:e})=>({eval:e(E,{fields:[L.evalId],references:[E.id]}),evalTarget:e(r,{fields:[L.evalTargetId],references:[r.id]})})),_i=i(ce,({one:e})=>({evalTarget:e(r,{fields:[ce.evalTargetId],references:[r.id]})})),fi=i(pe,({one:e})=>({evalTarget:e(r,{fields:[pe.evalTargetId],references:[r.id]})})),xi=i(_e,({one:e})=>({evalTarget:e(r,{fields:[_e.evalTargetId],references:[r.id]})})),gi=i(fe,({one:e})=>({evalTarget:e(r,{fields:[fe.evalTargetId],references:[r.id]})})),Ni=i(ge,({one:e})=>({evalTarget:e(r,{fields:[ge.evalTargetId],references:[r.id]})})),vi=i(U,({one:e})=>({session:e(a,{fields:[U.sessionId],references:[a.id]}),profile:e(o,{fields:[U.userId],references:[o.id]})}));var Be=0,bn=0,Ue=0,Dn=0;var hi=0;function oo(){Be++,Be>bn&&(bn=Be)}m(oo,"trackDbOpStart");function no(){Be>0&&Be--}m(no,"trackDbOpEnd");function ro(){Ue++,Ue>Dn&&(Dn=Ue)}m(ro,"trackHeavyDbOpStart");function so(){Ue>0&&Ue--}m(so,"trackHeavyDbOpEnd");function Rn(){hi++}m(Rn,"recordQueryDeadline");var Nt,ht,io=!1,gt;var kn,yt,vt;function Sn(e){let t=process.env[e];if(!t)throw new Error(`Missing required env var: ${e}`);return t}m(Sn,"getEnv");function Pn(){if(io)throw new Error("getDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!Nt){let e=process.env.PG_APPLICATION_NAME||"rulemetric",t=Number(process.env.PG_POOL_MAX)||3,s=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;ht=jn(Sn("DATABASE_URL"),{prepare:!1,max:t,connect_timeout:s,idle_timeout:c,keep_alive:p,max_lifetime:300,connection:{application_name:e,...l>0?{statement_timeout:l}:{}}}),Nt=En(ht,{schema:xt})}return Nt}m(Pn,"getDb");function Kn(){if(io)throw new Error("getHeavyDb() called after closeDb(): the connection pool is closed for shutdown. Stop issuing queries (timers/requests) before draining the pool.");if(!vt){let e=(process.env.PG_APPLICATION_NAME||"rulemetric")+":heavy",t=Number(process.env.PG_HEAVY_POOL_MAX)||2;yt=jn(Sn("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}}),vt=En(yt,{schema:xt})}return vt}m(Kn,"getHeavyDb");async function yi(){if(gt)return gt;io=!0;let e=ht,t=kn,s=yt;return ht=void 0,Nt=void 0,kn=void 0,yt=void 0,vt=void 0,gt=Promise.allSettled([e?e.end({timeout:5}):Promise.resolve(),t?t.end({timeout:5}):Promise.resolve(),s?s.end({timeout:5}):Promise.resolve()]).then(()=>{}),gt}m(yi,"closeDb");var Ii=new Set(["CONNECT_TIMEOUT","ETIMEDOUT","ENOTFOUND","ECONNREFUSED","EAI_AGAIN"]);function On(e){let t=e,s=t?.code??t?.cause?.code??t?.errno;return s!==void 0&&Ii.has(s)}m(On,"isRetryableConnectError");var Ti=new Set(["CONNECTION_CLOSED","ECONNRESET","EPIPE"]);function Cn(e){let t=e,s=t?.code??t?.cause?.code??t?.errno;return s!==void 0&&Ti.has(s)}m(Cn,"isRetryableResetError");async function qn(e,t={}){let s=t.attempts??3,l=t.baseMs??100,c;for(let p=0;p<s;p++)try{return await e()}catch(g){c=g;let he=On(g)||t.retryResets===!0&&Cn(g);if(p===s-1||!he)throw g;await new Promise(H=>setTimeout(H,l*2**p))}throw c}m(qn,"withDbRetry");var It=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 Mn(){let e=Number(process.env.PG_QUERY_DEADLINE_MS);return Number.isFinite(e)&&e>=0?e:2e4}m(Mn,"queryDeadlineMs");function wi(e,t){let s,l=new Promise((c,p)=>{s=setTimeout(()=>{Rn(),p(new It(t))},t);let g=s;typeof g.unref=="function"&&g.unref()});return Promise.race([e,l]).finally(()=>clearTimeout(s))}m(wi,"raceWithDeadline");var Ln=new Set(["select","selectDistinct","selectDistinctOn","insert","update","delete","execute","with","$count","refreshMaterializedView"]),Bn=new Set(["select","selectDistinct","selectDistinctOn","$count"]);function ao(e,t=!1,s=0,l=!1){return e===null||typeof e!="object"&&typeof e!="function"?e:new Proxy(e,{get(c,p,g){if(p==="then"){let H=Reflect.get(c,p,g);return typeof H!="function"?H:(Fn,Gn)=>{let Vn=l?ro:oo,Jn=l?so:no;Vn();let uo=qn(()=>new Promise((Yn,Qn)=>H.call(c,Yn,Qn)),{retryResets:t});return(s>0?wi(uo,s):uo).finally(Jn).then(Fn,Gn)}}let he=Reflect.get(c,p,g);return typeof he=="function"?(...H)=>ao(he.apply(c,H),t,s,l):he}})}m(ao,"wrapBuilder");function Un(e,t=!1){let s=t?ro:oo,l=t?so:no;s();try{return Promise.resolve(e()).finally(l)}catch(c){throw l(),c}}m(Un,"gaugeTransaction");var Hn=new Proxy({},{get(e,t){let s=Pn(),l=s[t];if(typeof t=="string"&&Ln.has(t)&&typeof l=="function"){let c=Bn.has(t),p=Mn();return(...g)=>ao(l.apply(s,g),c,p)}return t==="transaction"&&typeof l=="function"?(...c)=>Un(()=>l.apply(s,c)):l}}),Ai=new Proxy({},{get(e,t){let s=Kn(),l=s[t];if(typeof t=="string"&&Ln.has(t)&&typeof l=="function"){let c=Bn.has(t);return(...p)=>ao(l.apply(s,p),c,0,!0)}return t==="transaction"&&typeof l=="function"?(...c)=>Un(()=>l.apply(s,c),!0):l}});export{o as a,_ as b,a as c,ne as d,ho as e,yo as f,Io as g,Pn as h,yi as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as H}from"./chunk-TIOKY2IA.js";import{a as b}from"./chunk-TQMG647B.js";import{b as I}from"./chunk-W2MOTOQE.js";import{a as T}from"./chunk-EXJLLRZW.js";import{a as S}from"./chunk-RSKQRVPJ.js";import{a as A}from"./chunk-2XGMDWFF.js";import{a as y}from"./chunk-KAF3CYRW.js";import{a as k}from"./chunk-UF6US7VU.js";import{a as _}from"./chunk-DPFNJZUO.js";import{a as R}from"./chunk-GQJKQH3K.js";import{a as E}from"./chunk-NEACEHQD.js";import{a as h}from"./chunk-32EEBARV.js";import{b as w}from"./chunk-5RBLIVBF.js";import{b as f,e as v,f as p}from"./chunk-H2ORWIEY.js";import{a as s}from"./chunk-ZLLER3HP.js";var D={process_eval:h,process_insights:b,process_launch:I,process_send_message:S,process_conversation:E,process_session_goal:A,process_announcement:R,process_run_cleanup:T,cron_suggest_instructions:_,cron_refresh_skills:k,cron_refresh_pricing:y},M=Object.keys(D),V=new Set(["process_session_goal","process_announcement","process_run_cleanup"]);function x(e=process.env){return e.DATABASE_URL?M:M.filter(n=>!V.has(n))}s(x,"availableCapabilities");var O=3e4,W=3e4,$=3e4,L=250,N=5e3,B=`thin-agent-${process.pid}`,g=null;function F(e,n,r,l){let a=s(t=>{p("/api/workers/heartbeat",{workerType:"cli-worker",clientName:B,clientVersion:l,workerVersion:"0.1.0",currentJobId:null,inFlightCount:0,lastError:null,status:t,metadata:{capabilities:e,mode:"thin-agent"}}).then(c=>{let u=c?.advisory;u&&u.message!==g?(g=u.message,o(r,{event:"worker_advisory",code:u.code,message:u.message})):u||(g=null)}).catch(c=>{o(r,{event:"presence_heartbeat_error",error:c instanceof Error?c.message:String(c)})})},"send");a("alive");let d=setInterval(()=>a("alive"),$);n.addEventListener("abort",()=>{clearInterval(d),a("shutting_down")},{once:!0})}s(F,"startPresenceHeartbeat");function o(e,n){try{e(JSON.stringify({ts:new Date().toISOString(),...n}))}catch{e(`[agent-loop] log_error event=${n.event}`)}}s(o,"structuredLog");function P(e,n){return n.aborted?Promise.resolve(!1):e<=0?Promise.resolve(!0):new Promise(r=>{let l=setTimeout(()=>{n.removeEventListener("abort",a),r(!0)},e),a=s(()=>{clearTimeout(l),n.removeEventListener("abort",a),r(!1)},"onAbort");n.addEventListener("abort",a,{once:!0})})}s(P,"abortableSleep");async function J(e,n){let r=`capabilities=${encodeURIComponent(e.join(","))}&waitMs=${n}`,l=await v(`/api/work/next?${r}`);return l==null||typeof l=="string"?null:l}s(J,"pollForWork");function U(e,n){return{logger:{info:s(r=>n(r),"info"),warn:s(r=>n(r),"warn"),error:s(r=>n(r),"error")},job:{attempts:e}}}s(U,"makeHelpers");async function K(e,n,r){let l=D[e.kind],a=Date.now();if(o(r,{event:"claim",jobId:e.id,kind:e.kind,attempts:e.attempts}),!l){let t=`unknown kind: ${e.kind}`;o(r,{event:"fail",jobId:e.id,kind:e.kind,terminal:!0,error:t}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:t,terminal:!0}).catch(()=>{});return}let d=setInterval(()=>{o(r,{event:"heartbeat",jobId:e.id}),p(`/api/work/${e.id}/heartbeat`,{leaseToken:e.leaseToken}).catch(t=>{o(r,{event:"heartbeat_error",jobId:e.id,error:t instanceof Error?t.message:String(t)})})},n);try{let t=U(e.attempts,r),c=await l(e.payload,t)??{};clearInterval(d),o(r,{event:"complete",jobId:e.id,kind:e.kind,durationMs:Date.now()-a}),await p(`/api/work/${e.id}/complete`,{leaseToken:e.leaseToken,result:c})}catch(t){clearInterval(d);let c=w(t),u=t instanceof Error?t.message:String(t);o(r,{event:"fail",jobId:e.id,kind:e.kind,durationMs:Date.now()-a,terminal:c,error:u}),await p(`/api/work/${e.id}/fail`,{leaseToken:e.leaseToken,error:u,terminal:c}).catch(i=>{o(r,{event:"fail_post_error",jobId:e.id,error:i instanceof Error?i.message:String(i)})})}}s(K,"runOne");async function ie(e){let n=e.log??(()=>{}),r=e.pollWaitMs??O,l=e.heartbeatIntervalMs??W,a=e.capabilities??x(),d=L;o(n,{event:"agent_start",capabilities:a,pollWaitMs:r,heartbeatIntervalMs:l}),F(a,e.signal,n,e.version),H({signal:e.signal,log:n}).catch(i=>{o(n,{event:"tt_heartbeat_fatal",error:i instanceof Error?i.message:String(i)})});let t=5*6e4,c=0,u=s(()=>{if(!e.readInstalledVersion||!e.version)return!1;let i=Date.now();if(i-c<t)return!1;c=i;let m=e.readInstalledVersion();return!!(m&&m!==e.version)},"versionDrifted");for(;!e.signal.aborted;){if(u()){o(n,{event:"agent_version_drift",bootVersion:e.version,installedVersion:e.readInstalledVersion?.()??null}),e.onVersionDrift?.();break}let i=null;try{i=await J(a,r)}catch(m){let C=m instanceof f?m.statusCode:void 0;if(o(n,{event:"poll_error",status:C,error:m instanceof Error?m.message:String(m)}),!await P(d,e.signal))break;d=Math.min(d*2,N);continue}if(!i){if(o(n,{event:"poll_204"}),!await P(d,e.signal))break;d=Math.min(d*2,N);continue}d=L,await K(i,l,n)}o(n,{event:"agent_stop"})}s(ie,"runAgentLoop");export{D as a,M as b,x as c,J as d,ie as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as E}from"./chunk-NBTC5FNV.js";import{a as J}from"./chunk-TU2AR6XO.js";import{d as T}from"./chunk-NJ5UED3H.js";import{a as j}from"./chunk-
|
|
1
|
+
import{a as E}from"./chunk-NBTC5FNV.js";import{a as J}from"./chunk-TU2AR6XO.js";import{d as T}from"./chunk-NJ5UED3H.js";import{a as j}from"./chunk-RDET7CKR.js";import{b as I,c as P,d as v}from"./chunk-ZR3MUNLS.js";import{a as b}from"./chunk-ZLLER3HP.js";import{useEffect as R,useState as i}from"react";import{Box as l,Text as s,useInput as Z}from"ink";import{jsx as t,jsxs as a}from"react/jsx-runtime";function K({onClose:A,activeOrg:F,defaultProjectPath:y,width:_}){let{jobs:u,error:L,loading:$,refetch:S}=j(20),[M,C]=i([]),[d,m]=i("list"),[f,w]=i(0),[h,g]=i(null),[x,B]=i(null),[p,c]=i(null);R(()=>{v().then(C).catch(o=>{let r=o instanceof Error?o.message:String(o);c(`couldn't load launchers: ${r}`),C([{tool:"claude_code",capabilities:{headless:!0,interactive:!0,remoteSpawn:!0}}])})},[]),R(()=>{if(!p)return;let o=setTimeout(()=>c(null),5e3);return()=>clearTimeout(o)},[p]),Z((o,r)=>{if(h){if(o==="y"||o==="Y"){let e=h.id;g(null),P(e).then(()=>{S(),c(`cancelled ${e.slice(0,8)}`)}).catch(n=>c(`cancel failed: ${n instanceof Error?n.message:String(n)}`))}else(o==="n"||o==="N"||r.escape)&&g(null);return}if(r.escape){if(d!=="none"){m("none");return}A();return}if(r.tab){m(e=>e==="list"?"form":e==="form"?"none":"list");return}if(o!=="q"&&d==="list"){if(r.upArrow)w(e=>Math.max(0,e-1));else if(r.downArrow)w(e=>Math.min(u.length-1,e+1));else if(o==="c"){let e=u[f];e&&(e.status==="running"||e.status==="queued"||e.status==="pending")&&g(e)}else if(o==="r"){let e=u[f],n=e?.result?.externalSessionId;e&&e.tool==="claude_code"&&n?(B({tool:"claude_code",projectPath:e.config.projectPath,resumeSessionId:n}),m("form")):c("resume needs a Claude Code session with a session id")}else if(o==="o"){let n=u[f]?.result?.externalSessionId;if(n){let O=process.env.RULEMETRIC_WEB_URL??"http://localhost:5174";import("node:child_process").then(({spawn:U})=>{U("open",[`${O}/sessions/${n}`],{detached:!0,stdio:"ignore"}).unref()})}}}});async function N(o){await I(o),B(null),m("list"),c("launched"),S()}return b(N,"handleSubmit"),a(l,{flexDirection:"column",borderStyle:"round",borderColor:T,width:_,paddingX:1,children:[a(l,{children:[t(s,{bold:!0,color:T,children:"Launcher"}),t(s,{dimColor:!0,children:" active org: "}),t(s,{children:F??"(none)"}),$&&t(s,{dimColor:!0,children:" loading\u2026"}),L&&a(s,{color:"#F55B5B",children:[" \u26A0 ",L]})]}),t(l,{marginTop:1,children:t(E,{jobs:u,selectedIndex:f,focused:d==="list"})}),t(l,{marginTop:1,children:t(J,{launchers:M,defaultProjectPath:x?.projectPath??y,defaultTool:x?.tool,defaultResumeSessionId:x?.resumeSessionId,focused:d==="form",onSubmit:N})}),h&&t(l,{marginTop:1,children:a(s,{color:"#FFD700",children:["Cancel job ",h.id.slice(0,8),"? (y/n)"]})}),p&&t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\xB7 ",p]})}),t(l,{marginTop:1,children:a(s,{dimColor:!0,children:["\u2191\u2193 select tab focus c cancel r resume o open esc ",d==="none"?"close":"back"]})})]})}b(K,"LauncherOverlay");export{K as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as j,f as y}from"./chunk-RTWRHIKY.js";import{b as R}from"./chunk-ZL4MZMUK.js";import{a as S}from"./chunk-TDD7IOV2.js";import{a as p}from"./chunk-MODXEGCU.js";import{
|
|
1
|
+
import{d as j,f as y}from"./chunk-RTWRHIKY.js";import{b as R}from"./chunk-ZL4MZMUK.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,2 +1,2 @@
|
|
|
1
|
-
import{c as R}from"./chunk-6QKI756T.js";import{b as s,c as r,h as j}from"./chunk-
|
|
1
|
+
import{c as R}from"./chunk-6QKI756T.js";import{b as s,c as r,h as j}from"./chunk-4L5CU7LH.js";import{a as P}from"./chunk-5RBLIVBF.js";import{a as g}from"./chunk-ZLLER3HP.js";import{and as y,eq as l,isNotNull as I}from"drizzle-orm";async function O($,p={}){let k=p.db??j(),b=p.removeWorktreeFn??R,n=p.log??(e=>process.stderr.write(`[process_run_cleanup] ${e}
|
|
2
2
|
`)),{runId:t}=$,[i]=await k.select({id:s.id,userId:s.userId,projectPath:s.projectPath}).from(s).where(l(s.id,t)).limit(1);if(!i)throw new P(`Run ${t} not found`);if(!i.projectPath)throw new P(`Run ${t} has no projectPath; cannot resolve a repo root for worktree cleanup`);let c=i.projectPath,v=await k.select({id:r.id,projectPath:r.projectPath}).from(r).where(y(l(r.runId,t),l(r.userId,i.userId),I(r.endedAt))),a=[],u=0,d=0,h=0,m=0,w=new Set;for(let e of v)if(!(!e.projectPath||e.projectPath===c)&&!w.has(e.projectPath)){w.add(e.projectPath);try{let o=await b({repoRoot:c,worktreePath:e.projectPath});o.removed?(u++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"removed"}),n(`removed worktree ${e.projectPath} (session ${e.id})`)):o.reason==="dirty"?(d++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"skipped-dirty"}),n(`skipped dirty worktree ${e.projectPath} (session ${e.id}) \u2014 uncommitted changes`)):(h++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"absent"}),n(`worktree absent ${e.projectPath} (session ${e.id})`))}catch(o){let f=o instanceof Error?o.message:String(o);m++,a.push({sessionId:e.id,worktreePath:e.projectPath,status:"error",error:f.slice(0,1e3)}),n(`error removing worktree ${e.projectPath} (session ${e.id}): ${f}`)}}return n(`run ${t} cleanup: removed=${u} skippedDirty=${d} absent=${h} errored=${m}`),{runId:t,repoRoot:c,removed:u,skippedDirty:d,absent:h,errored:m,worktrees:a}}g(O,"processRunCleanup");export{O as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as w,f as k}from"./chunk-H2ORWIEY.js";import{a as u}from"./chunk-ZLLER3HP.js";import{buildControlledVerdict as _}from"@rulemetric/effectiveness";function h(e){if(e.length===0)return{mean:0,stddev:0,min:0,max:0};let n=e.reduce((s,a)=>s+a,0)/e.length,o=e.reduce((s,a)=>s+(a-n)**2,0)/e.length;return{mean:Math.round(n*1e3)/1e3,stddev:Math.round(Math.sqrt(o)*1e3)/1e3,min:Math.min(...e),max:Math.max(...e)}}u(h,"computeStats");var x="with_target",E="without_target";function $(e){let n=e.grading.summary?.pass_rate;return typeof n=="number"&&n>=1}u($,"fullPass");function b(e){return e.grading.summary?.pass_rate!=null}u(b,"hasGrading");function R(e){let n=e.timing.total_tokens;return typeof n=="number"&&n>0?n:void 0}u(R,"tokensOf");function v(e){let n=e.timing.duration_ms;return typeof n=="number"&&!isNaN(n)?n/1e3:void 0}u(v,"secondsOf");function y(e,n){let o={};for(let s of e)(o[n(s)]??=[]).push(s);return o}u(y,"groupBy");function T(e,n){let o=y(e.filter(b),i=>i.evalId),s=y(n.filter(b),i=>i.evalId),a=u((i,l)=>i.runNumber-l.runNumber,"byRun"),t=[];for(let i of Object.keys(o)){let l=o[i].sort(a),d=(s[i]??[]).sort(a);for(let r=0;r<Math.min(l.length,d.length);r++){let c={withScore:$(l[r])?1:0,withoutScore:$(d[r])?1:0},f=R(l[r]),g=R(d[r]);f!=null&&g!=null&&(c.withCost=f,c.withoutCost=g);let p=v(l[r]),m=v(d[r]);p!=null&&m!=null&&(c.withLatency=p,c.withoutLatency=m),t.push(c)}}return t}u(T,"pairRunsByEval");function C(e){let n=e.filter(r=>r.status==="completed");if(n.length===0)return{runSummary:{},verdict:null,notes:["No completed runs found"],totalRuns:0};let o=y(n,r=>r.configuration),s={},a=[];for(let[r,c]of Object.entries(o)){let f=c.filter(b).map(m=>m.grading.summary.pass_rate),g=c.map(v).filter(m=>m!=null),p=c.map(R).filter(m=>m!=null);s[r]={},f.length>0&&(s[r].pass_rate=h(f)),g.length>0&&(s[r].time_seconds=h(g)),p.length>0&&(s[r].tokens=h(p))}let t=null,i=o[x]??[],l=o[E]??[],d=T(i,l);if(d.length>0){if(t=_(d),!t.sufficient)a.push(t.insufficientReason??"Insufficient data for a significance verdict.");else if(t.significant){let r=t.delta>=0?"improves":"reduces",c=t.pValue!=null?`, McNemar p=${t.pValue.toFixed(4)}`:"";a.push(`Target ${r} the pass rate by ${Math.abs(t.delta*100).toFixed(0)}% (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}${c}).`)}else a.push(`No significant effect on pass rate (95% CI ${(t.ci.lower*100).toFixed(0)}\u2013${(t.ci.upper*100).toFixed(0)}%, n=${t.nWith}).`);t.costDelta!=null&&Math.round(t.costDelta)!==0&&a.push(`Token cost delta: ${t.costDelta>=0?"+":""}${Math.round(t.costDelta)} tokens/task.`),t.latencyDelta!=null&&Math.abs(t.latencyDelta)>1&&a.push(`Target ${t.latencyDelta>0?"adds":"saves"} ${Math.abs(t.latencyDelta).toFixed(1)}s/task.`)}for(let r of Object.values(s))if(r.pass_rate&&r.pass_rate.stddev>.2){a.push(`High pass-rate variance (stddev=${r.pass_rate.stddev.toFixed(2)}) \u2014 results may be unreliable.`);break}return{runSummary:s,verdict:t,notes:a,totalRuns:n.length}}u(C,"summarizeRuns");async function S(e,n){let o=n?`&iteration=${n}`:"",s=100,a=[];for(let t=0;t<1e5;t+=s){let i=await w(`/api/eval-targets/${e}/runs?limit=${s}&offset=${t}${o}`);if(a.push(...i),i.length<s)break}return C(a)}u(S,"aggregateBenchmark");async function B(e,n,o){return k(`/api/eval-targets/${e}/benchmarks`,{iteration:n,runSummary:o.runSummary,notes:o.notes})}u(B,"postBenchmark");export{C as a,S as b,B as c};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-
|
|
1
|
+
import{c as E,o as m}from"./chunk-7DFNBRLY.js";import{a as d}from"./chunk-H2ORWIEY.js";import{a as c}from"./chunk-ZLLER3HP.js";import*as p from"node:fs";import*as u from"node:path";import*as _ from"node:os";function T(){if(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)return;let s=u.join(_.homedir(),".config","rulemetric","env");C(s)||C(u.join(process.cwd(),".env.local"))}c(T,"ensureEnv");function C(s){try{let t=p.readFileSync(s,"utf-8");for(let n of t.split(`
|
|
2
2
|
`)){let e=n.trim();if(!e||e.startsWith("#"))continue;let o=e.indexOf("=");if(o<0)continue;let r=e.slice(0,o).trim(),i=e.slice(o+1).trim();process.env[r]||(process.env[r]=i)}return!!(process.env.RULEMETRIC_API_KEY||process.env.RULEMETRIC_ACCESS_TOKEN)}catch{return!1}}c(C,"loadEnvFile");T();async function I(s){let t={totalSessions:0,totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalCacheReadTokens:0,totalCacheWriteTokens:0,totalCostUSD:0,providers:{}},n=await m(s);t.providers={};for(let a of n)t.providers[a.provider]=(t.providers[a.provider]||0)+1;let e=new E,o=n.filter(a=>a.provider==="claude");for(let a of o)try{let h=p.readdirSync(a.path).filter(f=>f.endsWith(".jsonl"));t.totalSessions+=h.length;for(let f of h){let v=p.readFileSync(u.join(a.path,f),"utf-8"),R=e.parse(v);for(let l of R.events)l.tokenUsage&&(t.totalCalls++,t.totalInputTokens+=l.tokenUsage.input,t.totalOutputTokens+=l.tokenUsage.output,t.totalCacheReadTokens+=l.tokenUsage.cacheRead??0,t.totalCacheWriteTokens+=l.tokenUsage.cacheWrite??0)}}catch{}let r=15,i=75;return t.totalCostUSD=Math.round((t.totalInputTokens/1e6*r+t.totalOutputTokens/1e6*i+t.totalCacheReadTokens/1e6*(r*.1)+t.totalCacheWriteTokens/1e6*(r*1.25))*100)/100,t}c(I,"loadLocalStats");async function U(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY,e=process.env.RULEMETRIC_ACCESS_TOKEN,o=n??e;if(!o)return null;let r=new URLSearchParams;s&&r.set("projectPath",s);try{let i=await fetch(`${t}/api/insights/compute?${r}`,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(5e3)});return i.ok?await i.json():null}catch{return null}}c(U,"loadApiInsights");async function g(s){let t=process.env.RULEMETRIC_API_URL??d,n=process.env.RULEMETRIC_API_KEY??process.env.RULEMETRIC_ACCESS_TOKEN;if(!n)return null;let e=new URLSearchParams;s&&e.set("projectPath",s);try{let o=await fetch(`${t}/api/insights/linked-instructions?${e}`,{headers:{Authorization:`Bearer ${n}`},signal:AbortSignal.timeout(5e3)});return o.ok?await o.json():null}catch{return null}}c(g,"loadLinkedInstructions");export{I as a,U as b,g as c};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as B}from"./chunk-N7TGRFVZ.js";import{a as v,e as d,f as n,g as m,h as U}from"./chunk-4L5CU7LH.js";import{a as R}from"./chunk-5RBLIVBF.js";import{a as $}from"./chunk-ZLLER3HP.js";import{and as L,asc as j,eq as l,gt as q,isNotNull as F,sql as O}from"drizzle-orm";var _=100,C=10;async function G(I,s={}){let t=s.db??U(),D=s.sendEmail??B,p=s.log??(o=>process.stderr.write(`[process_announcement] ${o}
|
|
2
|
+
`)),b=s.webBaseUrl??process.env.RULEMETRIC_WEB_URL??process.env.WEB_URL??"https://rulemetric.com",{announcementId:r}=I,[i]=await t.select().from(d).where(l(d.id,r)).limit(1);if(!i)throw new R(`Announcement ${r} not found`);if(i.status!=="queued"&&i.status!=="sending")throw new R(`Announcement ${r} is in status='${i.status}'; expected 'queued' or 'sending'.`);await t.update(d).set({status:"sending",updatedAt:new Date}).where(l(d.id,r)),p(`Sending announcement ${r} (${i.subject??""})`);let w=0,f=0,h=0,y=0,k=null;try{for(;;){let c=await t.select({userId:m.userId,email:v.email,displayName:v.displayName,unsubscribeToken:m.unsubscribeToken}).from(m).innerJoin(v,l(v.id,m.userId)).where(L(l(m.productAnnouncements,!0),F(v.email),k?q(m.userId,k):void 0)).orderBy(j(m.userId)).limit(_);if(c.length===0)break;k=c[c.length-1].userId;for(let A=0;A<c.length;A+=C){let P=c.slice(A,A+C),S=await Promise.allSettled(P.map(g=>W({recipient:g,announcement:i,webBaseUrl:b,sendEmail:D,db:t})));for(let g=0;g<S.length;g++){let u=S[g];if(u.status==="fulfilled")u.value.ok==="sent"?w++:u.value.ok==="skipped"?h++:(f++,u.value.provider==="noop"&&y++,p(` recipient ${P[g].userId}: send failed \u2014 ${u.value.error}`));else{f++;let T=u.reason instanceof Error?u.reason.message:String(u.reason);p(` recipient ${P[g].userId}: send failed \u2014 ${T}`)}}}if(c.length<_)break}y>0&&p(`WARNING: ${y} recipient(s) hit the noop email provider and were recorded as FAILED \u2014 no email provider is configured on this worker (set RESEND_API_KEY in ~/.config/rulemetric/env and reinstall the service)`);let o=await t.select({status:n.status,count:O`count(*)::int`}).from(n).where(l(n.announcementId,r)).groupBy(n.status),e={};for(let c of o)e[c.status]=c.count;let a=e.sent??0,E=e.failed??0,N=a===0&&E>0?"failed":"sent",x=E>0?`${E} of ${a+E} recipient(s) failed; see announcement_deliveries`:null;return await t.update(d).set({status:N,recipientCount:a,...N==="sent"?{sentAt:new Date}:{},error:x,updatedAt:new Date}).where(l(d.id,r)),p(`Done: status=${N} sent=${a} failed=${E} (this attempt: sent=${w} failed=${f} skipped=${h})`),{sent:w,failed:f,skipped:h}}catch(o){let e=o instanceof Error?o.message:String(o);throw await t.update(d).set({status:"failed",error:e.slice(0,1e3),updatedAt:new Date}).where(l(d.id,r)).catch(()=>{}),o}}$(G,"processAnnouncement");function K(I){return I.replace(/&/g,"&").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 +1 @@
|
|
|
1
|
-
import{a as T,e as w}from"./chunk-
|
|
1
|
+
import{a as T,e as w}from"./chunk-O6C2UGBY.js";import{a as s}from"./chunk-ZLLER3HP.js";import{fileURLToPath as x}from"node:url";import{existsSync as A,readFileSync as E}from"node:fs";import{dirname as v,join as O}from"node:path";function _(){let e=v(x(import.meta.url));for(let t=0;t<8;t++){let c=O(e,"package.json");if(A(c))try{let i=JSON.parse(E(c,"utf8"));if(i.name==="@rulemetric/cli"&&i.version)return i.version}catch{}let o=v(e);if(o===e)break;e=o}return"0.0.0"}s(_,"readCliVersion");var k=_(),L="https://rulemetric.com",l=class extends Error{constructor(c,o){super(o);this.statusCode=c;this.name="ApiError"}static{s(this,"ApiError")}};function H(){let e=process.env.RULEMETRIC_API_URL??T().apiUrl??L,t=new URL(e);if(t.protocol==="http:"&&t.hostname!=="localhost"&&t.hostname!=="127.0.0.1")throw new Error(`API URL must use HTTPS for non-localhost hosts: ${e}`);return e}s(H,"getBaseUrl");async function a(e,t={}){let o=`${H()}${e}`,i={"Content-Type":"application/json","User-Agent":`rulemetric-cli/${k}`,...t.headers},m=T(),d=process.env.RULEMETRIC_API_KEY||m.apiKey||w()?.accessToken||m.accessToken;d&&(i.Authorization=`Bearer ${d}`);let h=new URL(o),f=h.hostname==="localhost"||h.hostname==="127.0.0.1",P=process.env.HTTPS_PROXY,g=process.env.HTTP_PROXY;f&&(delete process.env.HTTPS_PROXY,delete process.env.HTTP_PROXY);let p=t.timeoutMs?new AbortController:void 0,y=!1,R=p?setTimeout(()=>{y=!0,p.abort()},t.timeoutMs):void 0,r;try{r=await fetch(o,{method:t.method??"GET",headers:i,body:t.body?JSON.stringify(t.body):void 0,signal:p?.signal})}catch(u){if(y){let U=new URL(o).host,b=Math.round(t.timeoutMs/1e3);throw new l(408,`Request to ${U} timed out after ${b}s. This is usually transient or a local proxy/gateway issue \u2014 retry, and if it persists check HTTPS_PROXY / the RuleMetric gateway (:8787).`)}throw u}finally{R&&clearTimeout(R),f&&(P!==void 0&&(process.env.HTTPS_PROXY=P),g!==void 0&&(process.env.HTTP_PROXY=g))}let n;if(r.headers.get("content-type")?.includes("application/json")?n=await r.json():n=await r.text(),!r.ok){let u=n&&typeof n=="object"&&"error"in n?String(n.error):`HTTP ${r.status}`;throw new l(r.status,u)}return n}s(a,"api");var C=s(e=>a(e),"apiGet"),X=s((e,t)=>a(e,{method:"POST",body:t}),"apiPost"),I=s((e,t)=>a(e,{method:"PUT",body:t}),"apiPut"),B=s((e,t)=>a(e,{method:"PATCH",body:t}),"apiPatch"),D=s(e=>a(e,{method:"DELETE"}),"apiDelete");export{L as a,l as b,H as c,a as d,C as e,X as f,I as g,B as h,D as i};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{a as $}from"./chunk-DSO2U4Y6.js";import{a as y}from"./chunk-CADKBP3D.js";import{a as w}from"./chunk-MGHFDHHM.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};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{A as u,D as d}from"./chunk-
|
|
1
|
+
import{A as u,D as d}from"./chunk-2JRDG4LJ.js";import{a as s}from"./chunk-ZLLER3HP.js";import{existsSync as l,readFileSync as p,unlinkSync as y,writeFileSync as a}from"node:fs";import{homedir as h}from"node:os";import{join as S}from"node:path";function f(){return{vscode:u(),cursor:d(),marker:S(h(),".config","rulemetric","editor-proxy-unpinned.json")}}s(f,"defaultEditorPinPaths");function m(r,t){return r===`http://localhost:${t}`||r===`http://127.0.0.1:${t}`}s(m,"isOurProxyValue");function c(r){if(!l(r))return null;try{return JSON.parse(p(r,"utf-8"))}catch{return null}}s(c,"readSettings");function v(r,t=f()){let o=[];for(let e of["vscode","cursor"]){let n=t[e],i=c(n);if(!(!i||!m(i["http.proxy"],r))){delete i["http.proxy"],i["http.proxyStrictSSL"]===!1&&delete i["http.proxyStrictSSL"];try{a(n,JSON.stringify(i,null,2)+`
|
|
2
2
|
`),o.push(e)}catch{}}}if(o.length>0){let e=c(t.marker),n=[...new Set([...e?.editors??[],...o])];try{a(t.marker,JSON.stringify({editors:n,gatewayPort:r,unpinnedAt:new Date().toISOString()},null,2)+`
|
|
3
3
|
`)}catch{}}return o}s(v,"unpinEditorProxies");function A(r,t=f()){let o=c(t.marker);if(!o||!Array.isArray(o.editors))return[];let e=[];for(let n of o.editors)if(!(n!=="vscode"&&n!=="cursor"))try{r(n),e.push(n)}catch{}try{y(t.marker)}catch{}return e}s(A,"repinEditorProxies");export{f as a,v as b,A as c};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as b,f as y}from"./chunk-RTWRHIKY.js";import{
|
|
1
|
+
import{d as b,f as y}from"./chunk-RTWRHIKY.js";import{e as M,f as w}from"./chunk-H2ORWIEY.js";import{a as u}from"./chunk-ZLLER3HP.js";var $={anthropic:["https://platform.claude.com/docs/en/about-claude/pricing.md"],openai:["https://platform.openai.com/docs/pricing"]},R=.7,v=16e3,x=["You extract LLM API pricing from a provider pricing page.","You will be given the page text in <data> tags and, in this system prompt,","a list of model ids to find. For EACH requested model id, return its","published USD price per 1,000,000 tokens.","","Rules:","- Only report a model if you can find its rate ON THE PAGE. If it is not on"," the page, set found=false and omit the numbers \u2014 never guess from memory.","- inputPerM and outputPerM are the standard (non-batch, non-priority) rates.","- cacheReadPerM: the cached/discounted-input rate if published, else omit.","- For Anthropic models ONLY, if cache-write rates are not explicitly listed,"," compute them as cacheWrite5mPerM = inputPerM * 1.25 and"," cacheWrite1hPerM = inputPerM * 2.0. For all other providers, omit them.","- confidence is 0..1: how sure you are the numbers are correct for THIS id.","- contextWindow in tokens if stated, else omit.","","Respond with ONLY a JSON object of the form:",'{"rates":[{"modelId":"...","found":true,"confidence":0.9,"inputPerM":5,"outputPerM":25,"cacheReadPerM":0.5,"contextWindow":1000000}]}'].join(`
|
|
2
2
|
`);async function C(f){try{let n=await fetch(f,{headers:{accept:"text/plain, text/markdown, text/html"}});if(!n.ok)return null;let i=await n.text();return i.length>v?i.slice(0,v):i}catch{return null}}u(C,"fetchPage");var L=u(async(f,n)=>{let i=await M("/api/pricing/coverage"),I=[...i.unpriced,...i.stale],m=new Map;for(let r of I)m.set(`${r.provider}::${r.modelId}`,r);let a=[...m.values()];if(a.length===0)return n.logger.info("[cron-refresh-pricing] coverage clean \u2014 nothing unpriced or stale"),{status:"clean",checked:i.unpriced.length+i.stale.length};if(b()==="none")return n.logger.warn(`[cron-refresh-pricing] ${a.length} model(s) need pricing but no LLM backend (install the claude CLI or set ANTHROPIC_API_KEY) \u2014 skipping`),{status:"no-llm",pending:a.length};let d=new Map;for(let r of a){let o=d.get(r.provider)??[];o.push(r.modelId),d.set(r.provider,o)}let t={written:0,unchanged:0,flagged:0,rejected:0,skipped:0},c=[];for(let[r,o]of d){let h=$[r];if(!h){n.logger.warn(`[cron-refresh-pricing] no pricing source configured for provider '${r}' (${o.length} model(s)) \u2014 skipping`),t.skipped+=o.length;continue}let p="",l="";for(let e of h){let s=await C(e);s&&(p+=`
|
|
3
3
|
|
|
4
4
|
=== ${e} ===
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as u}from"./chunk-MGHFDHHM.js";import{a as l}from"./chunk-ZLLER3HP.js";var w=`You are determining whether an AI assistant's response shows evidence of using a specific skill/instruction.
|
|
1
|
+
import{a as u}from"./chunk-MGHFDHHM.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
2
|
|
|
3
3
|
You will receive:
|
|
4
4
|
1. The skill name and description
|
|
@@ -17,7 +17,7 @@ Respond with ONLY a valid JSON object:
|
|
|
17
17
|
"triggered": true,
|
|
18
18
|
"confidence": 0.85,
|
|
19
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:
|
|
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
21
|
Name: ${m}
|
|
22
22
|
Description: ${T}
|
|
23
23
|
|
|
@@ -30,4 +30,4 @@ ${r}
|
|
|
30
30
|
## AI Response
|
|
31
31
|
${s.output}
|
|
32
32
|
|
|
33
|
-
Did the AI's response show evidence of using this skill? Respond with ONLY valid JSON.`,
|
|
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};
|