@rulemetric/cli 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/chunk-A6JUIZ3H.js +1 -0
  2. package/dist/{chunk-GBSIOACS.js → chunk-B45MMFZ4.js} +15 -15
  3. package/dist/{chunk-TG4C4ENM.js → chunk-CXENLSMR.js} +1 -1
  4. package/dist/{chunk-BTKVLLV2.js → chunk-FLJTAD2R.js} +1 -1
  5. package/dist/chunk-I2FPXRA6.js +2 -0
  6. package/dist/{chunk-MGT5FZJ4.js → chunk-L5ILEWHH.js} +1 -1
  7. package/dist/{chunk-JLX2D3QL.js → chunk-NVOYP4HX.js} +1 -1
  8. package/dist/{chunk-MBP5OJKE.js → chunk-RAMQVEJB.js} +1 -1
  9. package/dist/chunk-YALBJNHO.js +1 -0
  10. package/dist/{chunk-EQ2O6DSN.js → chunk-YZQZD2E6.js} +1 -1
  11. package/dist/chunk-ZFEDOPRU.js +7 -0
  12. package/dist/commands/dashboard.js +1 -1
  13. package/dist/commands/diagnostics.js +1 -1
  14. package/dist/commands/evals/agent.js +1 -1
  15. package/dist/commands/evals/refine-cases.js +1 -1
  16. package/dist/commands/hooks/run.js +3 -3
  17. package/dist/commands/launcher.js +1 -1
  18. package/dist/dashboard/Dashboard.js +1 -1
  19. package/dist/dashboard/data.js +1 -1
  20. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  21. package/dist/dashboard/panels/telemetry.js +1 -0
  22. package/dist/dashboard/telemetry.js +1 -0
  23. package/dist/lib/agent-loop.js +1 -1
  24. package/dist/lib/evolution-enrolment.js +1 -1
  25. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +1 -1
  26. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  27. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  28. package/dist/lib/jobs/handlers/process-insights.js +1 -1
  29. package/dist/lib/manual-tasks.js +1 -1
  30. package/dist/lib/refine-cases.js +1 -1
  31. package/dist/lib/session-updates.js +1 -0
  32. package/oclif.manifest.json +228 -255
  33. package/package.json +4 -4
  34. package/dist/chunk-GBMF3TP6.js +0 -1
  35. package/dist/chunk-OWXGXKK7.js +0 -2
  36. package/dist/chunk-TBLUJ6AW.js +0 -1
  37. package/dist/dashboard/panels/instructions.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.17.3",
3
+ "version": "0.18.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -80,9 +80,9 @@
80
80
  "postgres": "^3.4.0",
81
81
  "react": "^19.0.0",
82
82
  "zod": "^3.24.0",
83
- "@rulemetric/proxy": "0.17.3",
84
- "@rulemetric/hooks": "0.17.3",
85
- "@rulemetric/skills-registry": "0.17.3"
83
+ "@rulemetric/hooks": "0.18.0",
84
+ "@rulemetric/proxy": "0.18.0",
85
+ "@rulemetric/skills-registry": "0.18.0"
86
86
  },
87
87
  "//deps": "Worker (`evals agent`) runtime deps: the @opentelemetry/* set, @sentry/node, and postgres are STATIC top-level imports loaded at worker startup (via bundled @rulemetric/{telemetry,db}) — they MUST be runtime deps or a clean `npm i -g` crashes with ModuleLoadError. `better-sqlite3` is optionalDependencies (below): it's a native module, lazy `require()`'d inside a try/catch (packages/session providers cursor/opencode) so a missing binary degrades gracefully — making it a hard dep would break `npm i -g` on platforms without prebuilt binaries. `resend` stays a devDep: lazy `await import('resend')` guarded by RESEND_API_KEY, which end-user workers never set (provider falls back to noop). Classification verified via import-graph scan of dist/commands/evals/agent.js + per-importer static/lazy check.",
88
88
  "optionalDependencies": {
@@ -1 +0,0 @@
1
- import{a as s,b as p,c as f}from"./chunk-ARNZQBMX.js";import{e as u,i}from"./chunk-NJ5UED3H.js";import{a as c}from"./chunk-ZLLER3HP.js";import{Text as t}from"ink";import{jsx as n,jsxs as l}from"react/jsx-runtime";function P({instructions:o,width:r,barWidth:a}){if(!o)return n(s,{title:"Active Instructions",color:i,width:r,children:n(t,{dimColor:!0,children:"API offline \u2014 no instruction data"})});if(o.length===0)return n(s,{title:"Active Instructions",color:i,width:r,children:n(t,{dimColor:!0,children:"No instructions linked to sessions yet"})});let m=[...o].sort((e,S)=>S.linkedSessions-e.linkedSessions).slice(0,10),x=m[0].linkedSessions,d=Math.max(8,r-a-15);return l(s,{title:`Active Instructions (${o.length})`,color:i,width:r,children:[l(t,{dimColor:!0,wrap:"truncate-end",children:["".padEnd(a+1+d),"sessions".padStart(9)]}),m.map(e=>l(t,{wrap:"truncate-end",children:[n(p,{value:e.linkedSessions,max:x,width:a}),l(t,{color:u,children:[" ",f(e.name,d)]}),n(t,{children:String(e.linkedSessions).padStart(9)})]},e.name))]})}c(P,"InstructionsPanel");export{P as a};
@@ -1,2 +0,0 @@
1
- import{c as E,o as m}from"./chunk-RQBN7WNS.js";import{a as d}from"./chunk-5VWVQCNR.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
- `)){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};
@@ -1 +0,0 @@
1
- import{a as j}from"./chunk-EKTNI6RV.js";import{a as E}from"./chunk-X23L2MF6.js";import{a as J}from"./chunk-B22HYCBV.js";import{d as T}from"./chunk-NJ5UED3H.js";import{b as I,c as P,d as v}from"./chunk-NMCQ7JZZ.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 +0,0 @@
1
- import{a}from"../../chunk-GBMF3TP6.js";import"../../chunk-ARNZQBMX.js";import"../../chunk-NJ5UED3H.js";import"../../chunk-ZLLER3HP.js";export{a as InstructionsPanel};