@rulemetric/cli 0.7.33 → 0.7.35

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 (77) hide show
  1. package/dist/{chunk-JGYCLDYF.js → chunk-2ZAKZEXW.js} +1 -1
  2. package/dist/chunk-3HSEVXMQ.js +2 -0
  3. package/dist/{chunk-BMGQFKG6.js → chunk-42XJZBQD.js} +1 -1
  4. package/dist/{chunk-7AZKPX2J.js → chunk-4L2ZEIRE.js} +1 -1
  5. package/dist/{chunk-7W6KET2A.js → chunk-6IVMG65E.js} +1 -1
  6. package/dist/{chunk-3FJT6LL4.js → chunk-7A4UVQ7U.js} +1 -1
  7. package/dist/{chunk-MODFTCZY.js → chunk-B3BHB26P.js} +1 -1
  8. package/dist/{chunk-UR6GZGFK.js → chunk-BPQ66YTY.js} +1 -1
  9. package/dist/{chunk-3VYV6ZYB.js → chunk-CNOD6HWU.js} +1 -1
  10. package/dist/{chunk-LEXVC7VH.js → chunk-H7J27U4P.js} +1 -1
  11. package/dist/{chunk-WEF5LPGS.js → chunk-HV45MQSU.js} +1 -1
  12. package/dist/{chunk-E3MQVVH6.js → chunk-IXLDCX7M.js} +1 -1
  13. package/dist/{chunk-BSJBNOJT.js → chunk-KQCAELPN.js} +1 -1
  14. package/dist/{chunk-JR4CWY3J.js → chunk-MLXQCK7V.js} +1 -1
  15. package/dist/{chunk-ZAWAPLIE.js → chunk-NKPLTT7J.js} +1 -1
  16. package/dist/{chunk-OPUI7CM2.js → chunk-NTKO4H2K.js} +1 -1
  17. package/dist/{chunk-OVZZUI33.js → chunk-OPYGOXZM.js} +1 -1
  18. package/dist/{chunk-L5ORQB25.js → chunk-PHALR5JB.js} +1 -1
  19. package/dist/{chunk-H4EVJK4P.js → chunk-PMWVDXTP.js} +1 -1
  20. package/dist/{chunk-ZWKKFAIX.js → chunk-Q4APAZUC.js} +1 -1
  21. package/dist/{chunk-AIEM6VXO.js → chunk-QRPNGXLN.js} +1 -1
  22. package/dist/{chunk-ZERPMWRT.js → chunk-RMDLJN4L.js} +1 -1
  23. package/dist/chunk-RUZ36O55.js +2 -0
  24. package/dist/{chunk-5W55CRBJ.js → chunk-SWSGNEVO.js} +1 -1
  25. package/dist/{chunk-DAGDGAPU.js → chunk-TG6TKU4Y.js} +1 -1
  26. package/dist/{chunk-BZUIMHHT.js → chunk-TVHT6H42.js} +1 -1
  27. package/dist/chunk-UGIUIZ2V.js +2 -0
  28. package/dist/chunk-VX2GJCQ4.js +1 -0
  29. package/dist/{chunk-OZQV5CDT.js → chunk-X64R6JCJ.js} +1 -1
  30. package/dist/{chunk-V5MJ4ICC.js → chunk-XRTZU7IZ.js} +1 -1
  31. package/dist/{chunk-JEBHSV2M.js → chunk-ZYVWALMS.js} +1 -1
  32. package/dist/commands/capture/scope.js +2 -0
  33. package/dist/commands/diagnostics.js +1 -1
  34. package/dist/commands/evals/agent.js +3 -3
  35. package/dist/commands/evals/auto-run.js +1 -1
  36. package/dist/commands/evals/optimize.js +1 -1
  37. package/dist/commands/evals/refine-cases.js +1 -1
  38. package/dist/commands/evals/run.js +1 -1
  39. package/dist/commands/evals/validate-judge.js +1 -1
  40. package/dist/commands/hooks/install.js +1 -1
  41. package/dist/commands/setup.js +1 -1
  42. package/dist/dashboard/Dashboard.js +1 -1
  43. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  44. package/dist/lib/agent-loop.js +1 -1
  45. package/dist/lib/capture-scope-config.js +1 -0
  46. package/dist/lib/codex-capture-scope.js +1 -0
  47. package/dist/lib/codex-exec.js +1 -1
  48. package/dist/lib/eval-candidate-run.js +1 -1
  49. package/dist/lib/eval-case-generator.js +1 -1
  50. package/dist/lib/eval-conversation-handler.js +1 -1
  51. package/dist/lib/eval-grader.js +1 -1
  52. package/dist/lib/eval-run-batch.js +1 -1
  53. package/dist/lib/handlers/cron-eval-autorun.js +1 -1
  54. package/dist/lib/handlers/cron-instruction-evolution.js +1 -1
  55. package/dist/lib/handlers/cron-refresh-pricing.js +1 -1
  56. package/dist/lib/handlers/cron-suggest-instructions.js +1 -1
  57. package/dist/lib/handlers/distill-memories.js +1 -1
  58. package/dist/lib/handlers/process-announcement.js +1 -1
  59. package/dist/lib/handlers/process-changelog.js +1 -1
  60. package/dist/lib/handlers/process-conversation.js +1 -1
  61. package/dist/lib/handlers/process-eval.js +1 -1
  62. package/dist/lib/handlers/process-insights.js +1 -1
  63. package/dist/lib/handlers/process-judge-review.js +1 -1
  64. package/dist/lib/handlers/process-memory-ab.js +1 -1
  65. package/dist/lib/handlers/process-run-cleanup.js +1 -1
  66. package/dist/lib/handlers/process-session-goal.js +1 -1
  67. package/dist/lib/instruction-proposer.js +1 -1
  68. package/dist/lib/judge-review-runner.js +1 -1
  69. package/dist/lib/llm-client.js +1 -1
  70. package/dist/lib/manual-tasks.js +1 -1
  71. package/dist/lib/repo-artifacts.js +1 -0
  72. package/dist/lib/reviewer-detect.js +1 -1
  73. package/dist/lib/setup-steps.js +1 -1
  74. package/dist/lib/transcript-sync.js +1 -1
  75. package/oclif.manifest.json +77 -1
  76. package/package.json +9 -6
  77. package/dist/chunk-47HDPK73.js +0 -2
@@ -759,6 +759,82 @@
759
759
  "status.js"
760
760
  ]
761
761
  },
762
+ "capture:scope": {
763
+ "aliases": [],
764
+ "args": {},
765
+ "description": "Show or set which projects the worker sweeps for Codex transcripts",
766
+ "examples": [
767
+ "<%= config.bin %> <%= command.id %>",
768
+ "<%= config.bin %> <%= command.id %> --add ~/work/client-a --add ~/work/client-b",
769
+ "<%= config.bin %> <%= command.id %> --remove ~/work/client-a",
770
+ "<%= config.bin %> <%= command.id %> --off",
771
+ "<%= config.bin %> <%= command.id %> --all"
772
+ ],
773
+ "flags": {
774
+ "api-url": {
775
+ "description": "Override API base URL",
776
+ "env": "RULEMETRIC_API_URL",
777
+ "hidden": true,
778
+ "name": "api-url",
779
+ "hasDynamicHelp": false,
780
+ "multiple": false,
781
+ "type": "option"
782
+ },
783
+ "add": {
784
+ "description": "Capture Codex sessions under this path (repeatable). Implies an allowlist.",
785
+ "name": "add",
786
+ "hasDynamicHelp": false,
787
+ "multiple": true,
788
+ "type": "option"
789
+ },
790
+ "remove": {
791
+ "description": "Stop capturing under this path (repeatable).",
792
+ "name": "remove",
793
+ "hasDynamicHelp": false,
794
+ "multiple": true,
795
+ "type": "option"
796
+ },
797
+ "off": {
798
+ "description": "Skip the Codex sweep entirely.",
799
+ "exclusive": [
800
+ "all"
801
+ ],
802
+ "name": "off",
803
+ "allowNo": false,
804
+ "type": "boolean"
805
+ },
806
+ "all": {
807
+ "description": "Capture every project (the default).",
808
+ "exclusive": [
809
+ "off"
810
+ ],
811
+ "name": "all",
812
+ "allowNo": false,
813
+ "type": "boolean"
814
+ },
815
+ "clear": {
816
+ "description": "Remove the codex scope, restoring the default.",
817
+ "name": "clear",
818
+ "allowNo": false,
819
+ "type": "boolean"
820
+ }
821
+ },
822
+ "hasDynamicHelp": false,
823
+ "hiddenAliases": [],
824
+ "id": "capture:scope",
825
+ "pluginAlias": "@rulemetric/cli",
826
+ "pluginName": "@rulemetric/cli",
827
+ "pluginType": "core",
828
+ "strict": true,
829
+ "enableJsonFlag": false,
830
+ "isESM": true,
831
+ "relativePath": [
832
+ "dist",
833
+ "commands",
834
+ "capture",
835
+ "scope.js"
836
+ ]
837
+ },
762
838
  "catalog": {
763
839
  "aliases": [],
764
840
  "args": {},
@@ -4334,5 +4410,5 @@
4334
4410
  ]
4335
4411
  }
4336
4412
  },
4337
- "version": "0.7.33"
4413
+ "version": "0.7.35"
4338
4414
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.7.33",
3
+ "version": "0.7.35",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -47,6 +47,9 @@
47
47
  },
48
48
  "crons": {
49
49
  "description": "List and run scheduled background tasks"
50
+ },
51
+ "capture": {
52
+ "description": "Control what the worker captures"
50
53
  }
51
54
  }
52
55
  },
@@ -74,9 +77,9 @@
74
77
  "postgres": "^3.4.0",
75
78
  "react": "^19.0.0",
76
79
  "zod": "^3.24.0",
77
- "@rulemetric/hooks": "0.7.33",
78
- "@rulemetric/proxy": "0.7.33",
79
- "@rulemetric/skills-registry": "0.7.33"
80
+ "@rulemetric/skills-registry": "0.7.35",
81
+ "@rulemetric/hooks": "0.7.35",
82
+ "@rulemetric/proxy": "0.7.35"
80
83
  },
81
84
  "//deps": "Worker (`evals agent`) runtime deps: the @opentelemetry/* set, @sentry/node, and postgres are STATIC top-level imports loaded at worker startup (via bundled @rulemetric/{telemetry,db}) — they MUST be runtime deps or a clean `npm i -g` crashes with ModuleLoadError. `better-sqlite3` is optionalDependencies (below): it's a native module, lazy `require()`'d inside a try/catch (packages/session providers cursor/opencode) so a missing binary degrades gracefully — making it a hard dep would break `npm i -g` on platforms without prebuilt binaries. `resend` stays a devDep: lazy `await import('resend')` guarded by RESEND_API_KEY, which end-user workers never set (provider falls back to noop). Classification verified via import-graph scan of dist/commands/evals/agent.js + per-importer static/lazy check.",
82
85
  "optionalDependencies": {
@@ -97,11 +100,11 @@
97
100
  "@rulemetric/api": "0.0.1",
98
101
  "@rulemetric/core": "0.0.1",
99
102
  "@rulemetric/db": "0.0.1",
103
+ "@rulemetric/effectiveness": "0.0.1",
100
104
  "@rulemetric/email": "0.0.1",
101
105
  "@rulemetric/session": "0.2.1",
102
106
  "@rulemetric/telemetry": "0.0.1",
103
- "@rulemetric/typescript-config": "0.0.0",
104
- "@rulemetric/effectiveness": "0.0.1"
107
+ "@rulemetric/typescript-config": "0.0.0"
105
108
  },
106
109
  "scripts": {
107
110
  "build": "node scripts/build.mjs",
@@ -1,2 +0,0 @@
1
- import{a as o}from"./chunk-ZLLER3HP.js";import{createHash as T}from"node:crypto";import{mkdir as w,open as M,readFile as h,readdir as b,rename as x,stat as P,writeFile as C}from"node:fs/promises";import{homedir as _}from"node:os";import{basename as A,dirname as z,join as l}from"node:path";var F=3e4,$=5,E=8*1024*1024;function f(i){return T("sha256").update(`${i.externalSessionId}:${Math.round(i.mtimeMs)}:${i.size}`).digest("hex")}o(f,"fingerprint");async function I(i){try{return{fingerprints:JSON.parse(await h(i,"utf8")).fingerprints??{}}}catch{return{fingerprints:{}}}}o(I,"readState");async function O(i,e){let s=`${i}.${process.pid}.tmp`;await w(z(i),{recursive:!0}),await C(s,JSON.stringify(e)),await x(s,i)}o(O,"persistState");var g=class{constructor(e){this.options=e}static{o(this,"TranscriptSync")}lastSeenSize=new Map;lastSyncAt=new Map;inFlight=!1;async scan(){if(this.inFlight)return{discovered:0,imported:0,skipped:0};this.inFlight=!0;try{let e=await I(this.options.statePath),s=(await Promise.all(this.options.providers.map(t=>t.discover()))).flat().sort((t,c)=>c.mtimeMs-t.mtimeMs),r=Date.now(),n=[],a=0;for(let t of s){let c=f(t),d=this.lastSeenSize.get(t.path);if(this.lastSeenSize.set(t.path,t.size),e.fingerprints[t.path]===c){a++;continue}let m=this.options.minStableAgeMs??3e3;if(m>0&&r-t.mtimeMs<m){a++;continue}let S=d!==void 0&&d===t.size,u=this.lastSyncAt.get(t.path),v=u===void 0||r-u>=(this.options.activeResyncMs??F);if(!S&&!v){a++;continue}if(n.push(t),n.length>=(this.options.maxImportsPerScan??$))break}let p=0;for(let t of n){let c=f(t);if(t.size>(this.options.maxContentBytes??E)){e.fingerprints[t.path]=c,a++,this.options.log?.(`Transcript sync skipped oversized file: ${t.path}`);continue}let d=await h(t.path,"utf8");await this.options.importTranscript({content:d,tool:t.tool}),e.fingerprints[t.path]=c,this.lastSyncAt.set(t.path,Date.now()),p++,this.options.log?.(`Transcript sync imported ${t.tool} ${A(t.path)} (${t.externalSessionId}).`)}return n.length>0&&await O(this.options.statePath,e),{discovered:s.length,imported:p,skipped:a}}finally{this.inFlight=!1}}};async function k(i){let e;try{e=await M(i,"r");let s=Buffer.alloc(64*1024),{bytesRead:r}=await e.read(s,0,s.length,0),n=s.subarray(0,r).toString("utf8").split(`
2
- `)[0];return n?JSON.parse(n):null}catch{return null}finally{await e?.close()}}o(k,"readFirstJsonLine");async function y(i,e,s){let r=await b(i,{withFileTypes:!0}).catch(()=>[]);for(let n of r){let a=l(i,n.name);if(n.isDirectory()){await y(a,e,s);continue}if(!n.isFile()||!n.name.startsWith("rollout-")||!n.name.endsWith(".jsonl"))continue;let[p,t]=await Promise.all([P(a).catch(()=>null),k(a)]);if(!p||p.mtimeMs<s||t?.type!=="session_meta")continue;let c=t.payload?.originator,d=t.payload?.id??t.payload?.session_id;!c?.toLowerCase().startsWith("codex")||!d||e.push({path:a,tool:"codex",externalSessionId:d,projectPath:t.payload?.cwd??null,mtimeMs:p.mtimeMs,size:p.size})}}o(y,"walkCodexSessions");function j(i=process.env.CODEX_HOME??l(_(),".codex"),e=14){return{name:"codex",async discover(){let s=[],r=Date.now()-Math.max(1,e)*24*60*60*1e3;return await y(l(i,"sessions"),s,r),s}}}o(j,"createCodexTranscriptProvider");function B(i,e){let s=o(async()=>{try{let n=await i.scan();n.imported>0&&e.log?.(`Transcript sync imported/updated ${n.imported} session${n.imported===1?"":"s"}.`)}catch(n){e.log?.(`Transcript sync failed: ${n instanceof Error?n.message:String(n)}`)}},"run"),r=setInterval(()=>void s(),e.intervalMs??3e4);e.signal.addEventListener("abort",()=>clearInterval(r),{once:!0}),s()}o(B,"startTranscriptSync");export{g as a,j as b,B as c};