@rulemetric/cli 0.18.1 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-command.js +1 -1
- package/dist/{chunk-WLLIFRRE.js → chunk-2EXQM3UF.js} +1 -1
- package/dist/chunk-2RZDFKX4.js +1 -0
- package/dist/{chunk-NSO2EBYE.js → chunk-2WRP6ZJF.js} +1 -1
- package/dist/chunk-35NZJWFC.js +4 -0
- package/dist/{chunk-3ZHBOILE.js → chunk-45CCW25C.js} +1 -1
- package/dist/{chunk-NMCQ7JZZ.js → chunk-52RILE5M.js} +1 -1
- package/dist/{chunk-O7ZQEKND.js → chunk-5O62P6KC.js} +1 -1
- package/dist/chunk-6WX3AXMI.js +1 -0
- package/dist/{chunk-ENW5SUQJ.js → chunk-6XCD343D.js} +1 -1
- package/dist/chunk-6Z4JNHBO.js +1 -0
- package/dist/{chunk-MJLW5KN2.js → chunk-75H3CKWA.js} +1 -1
- package/dist/{chunk-XAGNGQL3.js → chunk-7CQBFCHP.js} +1 -1
- package/dist/{chunk-ZFEDOPRU.js → chunk-AEIKPNLG.js} +1 -1
- package/dist/{chunk-XCN2YPWI.js → chunk-ANPGOUIO.js} +1 -1
- package/dist/chunk-B56GMANB.js +1 -0
- package/dist/{chunk-CXENLSMR.js → chunk-B5FBLLKT.js} +1 -1
- package/dist/{chunk-KIQK7NVF.js → chunk-CLPIN7TY.js} +1 -1
- package/dist/{chunk-4LVSD2XZ.js → chunk-DRX65ZLX.js} +1 -1
- package/dist/{chunk-5VWVQCNR.js → chunk-E5FI5YHO.js} +1 -1
- package/dist/{chunk-7MQZPDDZ.js → chunk-E6O2IFOK.js} +1 -1
- package/dist/{chunk-BOYWPUV2.js → chunk-EA3X4TAE.js} +1 -1
- package/dist/{chunk-AZWY2DOT.js → chunk-EBGVDX3Z.js} +1 -1
- package/dist/{chunk-FGGESTXG.js → chunk-EYRM7BT4.js} +1 -1
- package/dist/chunk-FD272ZXG.js +2 -0
- package/dist/chunk-FKUFJWII.js +1 -0
- package/dist/chunk-G2MRNA45.js +1 -0
- package/dist/{chunk-C3XWDYZJ.js → chunk-G2UGWEMO.js} +1 -1
- package/dist/chunk-GRTEWHXU.js +5 -0
- package/dist/{chunk-RRBFKVCI.js → chunk-HEO56SKT.js} +1 -1
- package/dist/chunk-HRU6WGCG.js +1 -0
- package/dist/{chunk-MHLHLJ5T.js → chunk-I2U5GNNM.js} +2 -2
- package/dist/{chunk-AZRGURHR.js → chunk-ICULHHNZ.js} +1 -1
- package/dist/{chunk-BRYURAUN.js → chunk-ID47WFUP.js} +1 -1
- package/dist/chunk-IQOBKWVY.js +5 -0
- package/dist/chunk-JE2JX7IJ.js +4 -0
- package/dist/chunk-JVTSJFFI.js +1 -0
- package/dist/{chunk-D7L7IMJQ.js → chunk-K2PI3OGV.js} +1 -1
- package/dist/chunk-K4LO27GG.js +1 -0
- package/dist/chunk-KCX2YDC3.js +1 -0
- package/dist/{chunk-5LTJNYCP.js → chunk-KTLRSRHF.js} +1 -1
- package/dist/{chunk-K65DDLTZ.js → chunk-LKOUL3IF.js} +1 -1
- package/dist/{chunk-GWQ24FQP.js → chunk-LQRXWLFJ.js} +1 -1
- package/dist/{chunk-A2JFQUDW.js → chunk-NI6RDOZ5.js} +1 -1
- package/dist/{chunk-JCZOEIL7.js → chunk-NJKPUZNM.js} +1 -1
- package/dist/{chunk-PPQFN62M.js → chunk-NN4M476J.js} +1 -1
- package/dist/chunk-NX3PF3EQ.js +1 -0
- package/dist/{chunk-7J7H7YFQ.js → chunk-O662MWOR.js} +1 -1
- package/dist/{chunk-UROUVE3D.js → chunk-OHMVGDWQ.js} +1 -1
- package/dist/{chunk-RQBN7WNS.js → chunk-OLOECA5V.js} +7 -7
- package/dist/{chunk-IYX65N6T.js → chunk-ONDOPTSL.js} +1 -1
- package/dist/chunk-ONSRPEUQ.js +7 -0
- package/dist/{chunk-UQJNUESP.js → chunk-OT7ZUHJF.js} +1 -1
- package/dist/{chunk-CAQLSYOK.js → chunk-PCSSIYH6.js} +1 -1
- package/dist/chunk-PD4BUQ2X.js +1 -0
- package/dist/{chunk-WSUKOU3X.js → chunk-PRC5N4NB.js} +1 -1
- package/dist/chunk-Q37D6V2G.js +2 -0
- package/dist/chunk-Q42RXJ4R.js +1 -0
- package/dist/{chunk-3EZZGA72.js → chunk-RFLO7L5X.js} +1 -1
- package/dist/{chunk-QRKMRG6W.js → chunk-RR5EE23Q.js} +1 -1
- package/dist/{chunk-5U5SHJJA.js → chunk-RYMQMJ7O.js} +1 -1
- package/dist/chunk-S7ZQTZNB.js +3 -0
- package/dist/{chunk-LELSVLNK.js → chunk-SFZSHNZZ.js} +1 -1
- package/dist/{chunk-7N55TWYQ.js → chunk-T7DAU6DV.js} +1 -1
- package/dist/{chunk-HNPC5U3C.js → chunk-TUSFCQBL.js} +1 -1
- package/dist/chunk-UFRJ75FW.js +1 -0
- package/dist/{chunk-I2FPXRA6.js → chunk-VGBATQZ3.js} +1 -1
- package/dist/{chunk-NAS7FIGM.js → chunk-WLLSWFAJ.js} +1 -1
- package/dist/chunk-WUDHDZOG.js +1 -0
- package/dist/{chunk-A6JUIZ3H.js → chunk-WYDRKFXO.js} +1 -1
- package/dist/{chunk-LSZ32DUR.js → chunk-XPVI6H2L.js} +1 -1
- package/dist/{chunk-IPNBW7ZW.js → chunk-XQEI7NOC.js} +1 -1
- package/dist/{chunk-EKTNI6RV.js → chunk-Y6VBAURK.js} +1 -1
- package/dist/chunk-YMIO3CVV.js +2 -0
- package/dist/{chunk-RAMQVEJB.js → chunk-YRGNBYZZ.js} +1 -1
- package/dist/{chunk-TQFHRD5B.js → chunk-Z7LBSVG3.js} +1 -1
- package/dist/{chunk-ANLPPIMS.js → chunk-ZFIGOHQ6.js} +1 -1
- package/dist/chunk-ZVCKDNBT.js +1 -0
- 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 +1 -1
- package/dist/commands/auth/signup.js +1 -1
- package/dist/commands/auth/status.js +1 -1
- package/dist/commands/capture/scope.js +1 -1
- package/dist/commands/catalog/index.js +1 -1
- package/dist/commands/catalog/recommend.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 +3 -3
- package/dist/commands/evals/auto-run.js +1 -5
- package/dist/commands/evals/benchmark.js +1 -1
- package/dist/commands/evals/compare.js +1 -31
- package/dist/commands/evals/create.js +1 -1
- package/dist/commands/evals/optimize-description.js +1 -59
- package/dist/commands/evals/optimize.js +1 -5
- package/dist/commands/evals/refine-cases.js +1 -1
- package/dist/commands/evals/run.js +1 -3
- package/dist/commands/evals/validate-judge.js +1 -1
- package/dist/commands/experiments/enroll.js +1 -0
- package/dist/commands/experiments/list.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/instructions/create.js +1 -1
- package/dist/commands/instructions/dedupe.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/restore.js +1 -1
- package/dist/commands/instructions/retract.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/local/down.js +1 -1
- package/dist/commands/local/up.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 +1 -1
- 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/resume-scoped-outcomes.js +1 -1
- package/dist/commands/research/tail-transcript.js +1 -1
- package/dist/commands/service/install.js +37 -37
- package/dist/commands/service/status.js +1 -1
- package/dist/commands/service/uninstall.js +1 -1
- package/dist/commands/service/updates.js +1 -0
- package/dist/commands/sessions/analyze.js +1 -1
- package/dist/commands/sessions/delete.js +1 -1
- package/dist/commands/sessions/end.js +1 -1
- 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 +1 -1
- package/dist/commands/suggestions/auto.js +1 -1
- package/dist/commands/suggestions/dismiss.js +1 -1
- package/dist/commands/suggestions/list.js +1 -1
- package/dist/commands/suggestions/refresh.js +1 -1
- package/dist/commands/suggestions/undo.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/measurement.js +1 -1
- package/dist/dashboard/telemetry.js +1 -1
- package/dist/{dist-ZJY72TUD.js → dist-TNM2RNPT.js} +1 -1
- package/dist/lib/active-org-refresh.js +1 -1
- package/dist/lib/agent-loop.js +1 -1
- package/dist/lib/agent-presence.js +1 -1
- package/dist/lib/antigravity-transcript.js +1 -1
- package/dist/lib/api-client.js +1 -1
- package/dist/lib/case-refinement-policy.js +1 -0
- package/dist/lib/discovery-evidence.js +1 -0
- package/dist/lib/discovery-repository.js +1 -0
- package/dist/lib/ensure-api-key.js +1 -1
- package/dist/lib/ensure-fresh-token.js +1 -1
- package/dist/lib/eval-benchmark.js +1 -1
- package/dist/lib/eval-candidate-run.js +1 -1
- package/dist/lib/eval-case-generator.js +1 -1
- package/dist/lib/eval-compare.js +1 -1
- package/dist/lib/eval-conversation-handler.js +1 -1
- package/dist/lib/eval-quota-gate.js +1 -1
- package/dist/lib/eval-resume.js +1 -1
- package/dist/lib/eval-run-batch.js +1 -1
- package/dist/lib/eval-trigger-tester.js +8 -1
- package/dist/lib/insights/generation/installed-asks.js +1 -1
- package/dist/lib/insights/generation/project-evidence.js +1 -1
- package/dist/lib/insights/generation/quality-review.js +1 -1
- package/dist/lib/insights/nomination/nominate.js +1 -1
- package/dist/lib/instruction-proposer.js +16 -1
- package/dist/lib/instruction-restoration.js +1 -1
- package/dist/lib/instructions/acceptance/accept-events.js +1 -1
- package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
- package/dist/lib/instructions/acceptance/hook-install.js +1 -1
- package/dist/lib/instructions/acceptance/reverse-applications.js +1 -1
- package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
- package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
- package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -1
- package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -1
- package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
- package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
- package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -1
- package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -1
- package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -1
- package/dist/lib/jobs/handlers/distill-memories.js +1 -1
- package/dist/lib/jobs/handlers/finalize-scoped-launch.js +1 -1
- package/dist/lib/jobs/handlers/harbor-ab.js +1 -1
- package/dist/lib/jobs/handlers/prepare-isolated-launch.js +1 -0
- package/dist/lib/jobs/handlers/prepare-suggestion-live.js +1 -1
- package/dist/lib/jobs/handlers/process-changelog.js +1 -1
- package/dist/lib/jobs/handlers/process-conversation.js +1 -1
- package/dist/lib/jobs/handlers/process-eval.js +1 -1
- package/dist/lib/jobs/handlers/process-insights.js +1 -1
- package/dist/lib/jobs/handlers/process-judge-review.js +1 -1
- package/dist/lib/jobs/handlers/process-launch.js +1 -1
- package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
- package/dist/lib/jobs/handlers/process-session-goal.js +1 -1
- package/dist/lib/jobs/handlers/process-suggestion-adoption.js +1 -1
- package/dist/lib/jobs/handlers/process-suggestion-discovery.js +1 -1
- package/dist/lib/jobs/handlers/process-suggestion-eval.js +1 -1
- package/dist/lib/jobs/handlers/restore-instruction.js +1 -0
- package/dist/lib/jobs/shed-retry.js +1 -1
- package/dist/lib/judge-review-runner.js +1 -1
- package/dist/lib/llm-client.js +1 -1
- package/dist/lib/manual-tasks.js +1 -1
- package/dist/lib/projects/workspace/worktree.js +1 -1
- package/dist/lib/refine-cases.js +1 -1
- package/dist/lib/research-client.js +1 -1
- package/dist/lib/retraction.js +1 -1
- package/dist/lib/session-updates.js +1 -1
- package/dist/lib/setup-steps.js +1 -1
- package/dist/lib/study-result-store.js +1 -0
- package/dist/lib/suggestion-discovery.js +1 -1
- package/dist/lib/telemetry.js +1 -1
- package/dist/lib/terminal-target-heartbeat.js +1 -1
- package/dist/lib/transcript-sync.js +1 -1
- package/dist/lib/work-report.js +1 -1
- package/dist/lib/worker-updates.js +1 -0
- package/oclif.manifest.json +322 -199
- package/package.json +7 -7
- package/dist/chunk-2C7CFCMM.js +0 -1
- package/dist/chunk-647M2I2Y.js +0 -1
- package/dist/chunk-7OTOAC6C.js +0 -8
- package/dist/chunk-A6XQSO62.js +0 -4
- package/dist/chunk-AHLVY52I.js +0 -1
- package/dist/chunk-BDWQ6J4V.js +0 -1
- package/dist/chunk-BU3ZGLQG.js +0 -1
- package/dist/chunk-CJ2WSSHD.js +0 -1
- package/dist/chunk-DTTR4EUJ.js +0 -1
- package/dist/chunk-DZRBB34J.js +0 -16
- package/dist/chunk-FLJTAD2R.js +0 -1
- package/dist/chunk-G7V4ZZZ3.js +0 -1
- package/dist/chunk-GHUW7P55.js +0 -2
- package/dist/chunk-GYKYJJNF.js +0 -1
- package/dist/chunk-KFNFLMUR.js +0 -3
- package/dist/chunk-KOIFFSYW.js +0 -2
- package/dist/chunk-KR32Y5Q5.js +0 -1
- package/dist/chunk-L5ILEWHH.js +0 -1
- package/dist/chunk-LZPE6424.js +0 -5
- package/dist/chunk-MRQIYIQE.js +0 -1
- package/dist/chunk-NLUHMHPM.js +0 -1
- package/dist/chunk-NVOYP4HX.js +0 -1
- package/dist/chunk-P577DWWL.js +0 -1
- package/dist/chunk-PMMHMRFS.js +0 -1
- package/dist/chunk-R26SQ3BE.js +0 -5
- package/dist/chunk-RITL4NU3.js +0 -1
- package/dist/chunk-RWQG25JU.js +0 -1
- package/dist/chunk-YZQZD2E6.js +0 -1
- package/dist/chunk-ZJABRHIP.js +0 -1
- package/dist/lib/eval-accumulation.js +0 -1
- package/dist/lib/evolution-cost.js +0 -1
- package/dist/lib/evolution-enrolment.js +0 -1
- package/dist/lib/jobs/handlers/cron-instruction-evolution.js +0 -1
- package/dist/lib/jobs/handlers/process-memory-ab.js +0 -1
- package/dist/lib/optimize-compare.js +0 -1
package/oclif.manifest.json
CHANGED
|
@@ -937,6 +937,120 @@
|
|
|
937
937
|
"list.js"
|
|
938
938
|
]
|
|
939
939
|
},
|
|
940
|
+
"experiments:enroll": {
|
|
941
|
+
"aliases": [],
|
|
942
|
+
"args": {},
|
|
943
|
+
"description": "Submit a fresh work request to an eligible project experiment",
|
|
944
|
+
"examples": [
|
|
945
|
+
"<%= config.bin %> experiments enroll --project /repo --family parser-repair --prompt-file task.txt"
|
|
946
|
+
],
|
|
947
|
+
"flags": {
|
|
948
|
+
"api-url": {
|
|
949
|
+
"description": "Override API base URL",
|
|
950
|
+
"env": "RULEMETRIC_API_URL",
|
|
951
|
+
"hidden": true,
|
|
952
|
+
"name": "api-url",
|
|
953
|
+
"hasDynamicHelp": false,
|
|
954
|
+
"multiple": false,
|
|
955
|
+
"type": "option"
|
|
956
|
+
},
|
|
957
|
+
"project": {
|
|
958
|
+
"char": "p",
|
|
959
|
+
"description": "Project path (defaults to current directory)",
|
|
960
|
+
"name": "project",
|
|
961
|
+
"hasDynamicHelp": false,
|
|
962
|
+
"multiple": false,
|
|
963
|
+
"type": "option"
|
|
964
|
+
},
|
|
965
|
+
"family": {
|
|
966
|
+
"description": "Task family shown by the waiting experiment",
|
|
967
|
+
"name": "family",
|
|
968
|
+
"required": true,
|
|
969
|
+
"hasDynamicHelp": false,
|
|
970
|
+
"multiple": false,
|
|
971
|
+
"type": "option"
|
|
972
|
+
},
|
|
973
|
+
"prompt-file": {
|
|
974
|
+
"description": "UTF-8 file containing a real, fresh work request",
|
|
975
|
+
"name": "prompt-file",
|
|
976
|
+
"required": true,
|
|
977
|
+
"hasDynamicHelp": false,
|
|
978
|
+
"multiple": false,
|
|
979
|
+
"type": "option"
|
|
980
|
+
},
|
|
981
|
+
"model": {
|
|
982
|
+
"description": "Optional model constraint; must match the experiment pin",
|
|
983
|
+
"name": "model",
|
|
984
|
+
"hasDynamicHelp": false,
|
|
985
|
+
"multiple": false,
|
|
986
|
+
"type": "option"
|
|
987
|
+
}
|
|
988
|
+
},
|
|
989
|
+
"hasDynamicHelp": false,
|
|
990
|
+
"hiddenAliases": [],
|
|
991
|
+
"id": "experiments:enroll",
|
|
992
|
+
"pluginAlias": "@rulemetric/cli",
|
|
993
|
+
"pluginName": "@rulemetric/cli",
|
|
994
|
+
"pluginType": "core",
|
|
995
|
+
"strict": true,
|
|
996
|
+
"enableJsonFlag": false,
|
|
997
|
+
"isESM": true,
|
|
998
|
+
"relativePath": [
|
|
999
|
+
"dist",
|
|
1000
|
+
"commands",
|
|
1001
|
+
"experiments",
|
|
1002
|
+
"enroll.js"
|
|
1003
|
+
]
|
|
1004
|
+
},
|
|
1005
|
+
"experiments:list": {
|
|
1006
|
+
"aliases": [],
|
|
1007
|
+
"args": {},
|
|
1008
|
+
"description": "List experiments with execution, metric finding, and application separately",
|
|
1009
|
+
"examples": [
|
|
1010
|
+
"<%= config.bin %> experiments list",
|
|
1011
|
+
"<%= config.bin %> experiments list --all"
|
|
1012
|
+
],
|
|
1013
|
+
"flags": {
|
|
1014
|
+
"api-url": {
|
|
1015
|
+
"description": "Override API base URL",
|
|
1016
|
+
"env": "RULEMETRIC_API_URL",
|
|
1017
|
+
"hidden": true,
|
|
1018
|
+
"name": "api-url",
|
|
1019
|
+
"hasDynamicHelp": false,
|
|
1020
|
+
"multiple": false,
|
|
1021
|
+
"type": "option"
|
|
1022
|
+
},
|
|
1023
|
+
"project": {
|
|
1024
|
+
"char": "p",
|
|
1025
|
+
"description": "Project path (defaults to current directory)",
|
|
1026
|
+
"name": "project",
|
|
1027
|
+
"hasDynamicHelp": false,
|
|
1028
|
+
"multiple": false,
|
|
1029
|
+
"type": "option"
|
|
1030
|
+
},
|
|
1031
|
+
"all": {
|
|
1032
|
+
"description": "Every project",
|
|
1033
|
+
"name": "all",
|
|
1034
|
+
"allowNo": false,
|
|
1035
|
+
"type": "boolean"
|
|
1036
|
+
}
|
|
1037
|
+
},
|
|
1038
|
+
"hasDynamicHelp": false,
|
|
1039
|
+
"hiddenAliases": [],
|
|
1040
|
+
"id": "experiments:list",
|
|
1041
|
+
"pluginAlias": "@rulemetric/cli",
|
|
1042
|
+
"pluginName": "@rulemetric/cli",
|
|
1043
|
+
"pluginType": "core",
|
|
1044
|
+
"strict": true,
|
|
1045
|
+
"enableJsonFlag": false,
|
|
1046
|
+
"isESM": true,
|
|
1047
|
+
"relativePath": [
|
|
1048
|
+
"dist",
|
|
1049
|
+
"commands",
|
|
1050
|
+
"experiments",
|
|
1051
|
+
"list.js"
|
|
1052
|
+
]
|
|
1053
|
+
},
|
|
940
1054
|
"evals:agent": {
|
|
941
1055
|
"aliases": [],
|
|
942
1056
|
"args": {},
|
|
@@ -980,11 +1094,9 @@
|
|
|
980
1094
|
"required": true
|
|
981
1095
|
}
|
|
982
1096
|
},
|
|
983
|
-
"description": "
|
|
1097
|
+
"description": "Retired adaptive loop; use evals run for one bounded experiment",
|
|
984
1098
|
"examples": [
|
|
985
|
-
"<%= config.bin %> evals
|
|
986
|
-
"<%= config.bin %> evals auto-run <target-id> --yes # run until powered / budget",
|
|
987
|
-
"<%= config.bin %> evals auto-run <target-id> --yes --max-runs 120 --batch-parallel 4"
|
|
1099
|
+
"<%= config.bin %> evals run <target-id>"
|
|
988
1100
|
],
|
|
989
1101
|
"flags": {
|
|
990
1102
|
"api-url": {
|
|
@@ -1127,9 +1239,9 @@
|
|
|
1127
1239
|
"required": true
|
|
1128
1240
|
}
|
|
1129
1241
|
},
|
|
1130
|
-
"description": "
|
|
1242
|
+
"description": "Retired blind comparison; use evals run for recorded task outcomes",
|
|
1131
1243
|
"examples": [
|
|
1132
|
-
"<%= config.bin %> evals
|
|
1244
|
+
"<%= config.bin %> evals run <target-id>"
|
|
1133
1245
|
],
|
|
1134
1246
|
"flags": {
|
|
1135
1247
|
"api-url": {
|
|
@@ -1254,10 +1366,9 @@
|
|
|
1254
1366
|
"required": true
|
|
1255
1367
|
}
|
|
1256
1368
|
},
|
|
1257
|
-
"description": "
|
|
1369
|
+
"description": "Retired optimization workflow; use canonical experiments",
|
|
1258
1370
|
"examples": [
|
|
1259
|
-
"<%= config.bin %> evals
|
|
1260
|
-
"<%= config.bin %> evals optimize-description <target-id> --queries 10"
|
|
1371
|
+
"<%= config.bin %> evals run <target-id>"
|
|
1261
1372
|
],
|
|
1262
1373
|
"flags": {
|
|
1263
1374
|
"api-url": {
|
|
@@ -1342,10 +1453,9 @@
|
|
|
1342
1453
|
"required": true
|
|
1343
1454
|
}
|
|
1344
1455
|
},
|
|
1345
|
-
"description": "
|
|
1456
|
+
"description": "Retired optimization workflow; use canonical experiments",
|
|
1346
1457
|
"examples": [
|
|
1347
|
-
"<%= config.bin %> evals
|
|
1348
|
-
"<%= config.bin %> evals optimize <target-id> --auto --max-iterations 3"
|
|
1458
|
+
"<%= config.bin %> evals run <target-id>"
|
|
1349
1459
|
],
|
|
1350
1460
|
"flags": {
|
|
1351
1461
|
"api-url": {
|
|
@@ -1482,7 +1592,7 @@
|
|
|
1482
1592
|
"required": true
|
|
1483
1593
|
}
|
|
1484
1594
|
},
|
|
1485
|
-
"description": "
|
|
1595
|
+
"description": "Queue an experiment against a target using the configured worker",
|
|
1486
1596
|
"examples": [
|
|
1487
1597
|
"<%= config.bin %> evals run <target-id>",
|
|
1488
1598
|
"<%= config.bin %> evals run <target-id> --parallel 3 --runs-per-eval 2",
|
|
@@ -1671,56 +1781,6 @@
|
|
|
1671
1781
|
"validate-judge.js"
|
|
1672
1782
|
]
|
|
1673
1783
|
},
|
|
1674
|
-
"experiments:list": {
|
|
1675
|
-
"aliases": [],
|
|
1676
|
-
"args": {},
|
|
1677
|
-
"description": "Show instructions under randomised test and what each sample supports",
|
|
1678
|
-
"examples": [
|
|
1679
|
-
"<%= config.bin %> experiments list",
|
|
1680
|
-
"<%= config.bin %> experiments list --project /path/to/project",
|
|
1681
|
-
"<%= config.bin %> experiments list --all"
|
|
1682
|
-
],
|
|
1683
|
-
"flags": {
|
|
1684
|
-
"api-url": {
|
|
1685
|
-
"description": "Override API base URL",
|
|
1686
|
-
"env": "RULEMETRIC_API_URL",
|
|
1687
|
-
"hidden": true,
|
|
1688
|
-
"name": "api-url",
|
|
1689
|
-
"hasDynamicHelp": false,
|
|
1690
|
-
"multiple": false,
|
|
1691
|
-
"type": "option"
|
|
1692
|
-
},
|
|
1693
|
-
"project": {
|
|
1694
|
-
"char": "p",
|
|
1695
|
-
"description": "Project path (defaults to current directory)",
|
|
1696
|
-
"name": "project",
|
|
1697
|
-
"hasDynamicHelp": false,
|
|
1698
|
-
"multiple": false,
|
|
1699
|
-
"type": "option"
|
|
1700
|
-
},
|
|
1701
|
-
"all": {
|
|
1702
|
-
"description": "Every project, not just this one",
|
|
1703
|
-
"name": "all",
|
|
1704
|
-
"allowNo": false,
|
|
1705
|
-
"type": "boolean"
|
|
1706
|
-
}
|
|
1707
|
-
},
|
|
1708
|
-
"hasDynamicHelp": false,
|
|
1709
|
-
"hiddenAliases": [],
|
|
1710
|
-
"id": "experiments:list",
|
|
1711
|
-
"pluginAlias": "@rulemetric/cli",
|
|
1712
|
-
"pluginName": "@rulemetric/cli",
|
|
1713
|
-
"pluginType": "core",
|
|
1714
|
-
"strict": true,
|
|
1715
|
-
"enableJsonFlag": false,
|
|
1716
|
-
"isESM": true,
|
|
1717
|
-
"relativePath": [
|
|
1718
|
-
"dist",
|
|
1719
|
-
"commands",
|
|
1720
|
-
"experiments",
|
|
1721
|
-
"list.js"
|
|
1722
|
-
]
|
|
1723
|
-
},
|
|
1724
1784
|
"gateway:ensure": {
|
|
1725
1785
|
"aliases": [],
|
|
1726
1786
|
"args": {},
|
|
@@ -2833,6 +2893,141 @@
|
|
|
2833
2893
|
"switch.js"
|
|
2834
2894
|
]
|
|
2835
2895
|
},
|
|
2896
|
+
"research:backfill": {
|
|
2897
|
+
"aliases": [],
|
|
2898
|
+
"args": {},
|
|
2899
|
+
"description": "Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset — forward-only tail is the default capture path.",
|
|
2900
|
+
"examples": [
|
|
2901
|
+
"<%= config.bin %> research backfill",
|
|
2902
|
+
"<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"
|
|
2903
|
+
],
|
|
2904
|
+
"flags": {
|
|
2905
|
+
"api-url": {
|
|
2906
|
+
"description": "Override API base URL",
|
|
2907
|
+
"env": "RULEMETRIC_API_URL",
|
|
2908
|
+
"hidden": true,
|
|
2909
|
+
"name": "api-url",
|
|
2910
|
+
"hasDynamicHelp": false,
|
|
2911
|
+
"multiple": false,
|
|
2912
|
+
"type": "option"
|
|
2913
|
+
},
|
|
2914
|
+
"claude-dir": {
|
|
2915
|
+
"description": "Override the Claude Code projects directory (defaults to ~/.claude)",
|
|
2916
|
+
"name": "claude-dir",
|
|
2917
|
+
"noCacheDefault": true,
|
|
2918
|
+
"hasDynamicHelp": false,
|
|
2919
|
+
"multiple": false,
|
|
2920
|
+
"type": "option"
|
|
2921
|
+
},
|
|
2922
|
+
"dry-run": {
|
|
2923
|
+
"description": "Print observation count without POSTing",
|
|
2924
|
+
"name": "dry-run",
|
|
2925
|
+
"allowNo": false,
|
|
2926
|
+
"type": "boolean"
|
|
2927
|
+
}
|
|
2928
|
+
},
|
|
2929
|
+
"hasDynamicHelp": false,
|
|
2930
|
+
"hiddenAliases": [],
|
|
2931
|
+
"id": "research:backfill",
|
|
2932
|
+
"pluginAlias": "@rulemetric/cli",
|
|
2933
|
+
"pluginName": "@rulemetric/cli",
|
|
2934
|
+
"pluginType": "core",
|
|
2935
|
+
"strict": true,
|
|
2936
|
+
"enableJsonFlag": false,
|
|
2937
|
+
"isESM": true,
|
|
2938
|
+
"relativePath": [
|
|
2939
|
+
"dist",
|
|
2940
|
+
"commands",
|
|
2941
|
+
"research",
|
|
2942
|
+
"backfill.js"
|
|
2943
|
+
]
|
|
2944
|
+
},
|
|
2945
|
+
"research:resume-scoped-outcomes": {
|
|
2946
|
+
"aliases": [],
|
|
2947
|
+
"args": {},
|
|
2948
|
+
"description": "Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.",
|
|
2949
|
+
"examples": [
|
|
2950
|
+
"<%= config.bin %> research resume-scoped-outcomes",
|
|
2951
|
+
"<%= config.bin %> research resume-scoped-outcomes --list"
|
|
2952
|
+
],
|
|
2953
|
+
"flags": {
|
|
2954
|
+
"api-url": {
|
|
2955
|
+
"description": "Override API base URL",
|
|
2956
|
+
"env": "RULEMETRIC_API_URL",
|
|
2957
|
+
"hidden": true,
|
|
2958
|
+
"name": "api-url",
|
|
2959
|
+
"hasDynamicHelp": false,
|
|
2960
|
+
"multiple": false,
|
|
2961
|
+
"type": "option"
|
|
2962
|
+
},
|
|
2963
|
+
"list": {
|
|
2964
|
+
"description": "Show the outcome store without uploading anything",
|
|
2965
|
+
"name": "list",
|
|
2966
|
+
"allowNo": false,
|
|
2967
|
+
"type": "boolean"
|
|
2968
|
+
}
|
|
2969
|
+
},
|
|
2970
|
+
"hasDynamicHelp": false,
|
|
2971
|
+
"hidden": true,
|
|
2972
|
+
"hiddenAliases": [],
|
|
2973
|
+
"id": "research:resume-scoped-outcomes",
|
|
2974
|
+
"pluginAlias": "@rulemetric/cli",
|
|
2975
|
+
"pluginName": "@rulemetric/cli",
|
|
2976
|
+
"pluginType": "core",
|
|
2977
|
+
"strict": true,
|
|
2978
|
+
"enableJsonFlag": false,
|
|
2979
|
+
"isESM": true,
|
|
2980
|
+
"relativePath": [
|
|
2981
|
+
"dist",
|
|
2982
|
+
"commands",
|
|
2983
|
+
"research",
|
|
2984
|
+
"resume-scoped-outcomes.js"
|
|
2985
|
+
]
|
|
2986
|
+
},
|
|
2987
|
+
"research:tail-transcript": {
|
|
2988
|
+
"aliases": [],
|
|
2989
|
+
"args": {
|
|
2990
|
+
"transcript": {
|
|
2991
|
+
"description": "Absolute path to a Claude Code .jsonl transcript",
|
|
2992
|
+
"name": "transcript",
|
|
2993
|
+
"required": true
|
|
2994
|
+
}
|
|
2995
|
+
},
|
|
2996
|
+
"description": "Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook — safe to re-run.",
|
|
2997
|
+
"flags": {
|
|
2998
|
+
"api-url": {
|
|
2999
|
+
"description": "Override API base URL",
|
|
3000
|
+
"env": "RULEMETRIC_API_URL",
|
|
3001
|
+
"hidden": true,
|
|
3002
|
+
"name": "api-url",
|
|
3003
|
+
"hasDynamicHelp": false,
|
|
3004
|
+
"multiple": false,
|
|
3005
|
+
"type": "option"
|
|
3006
|
+
},
|
|
3007
|
+
"no-post": {
|
|
3008
|
+
"description": "Parse and advance the offset without POSTing (debug)",
|
|
3009
|
+
"name": "no-post",
|
|
3010
|
+
"allowNo": false,
|
|
3011
|
+
"type": "boolean"
|
|
3012
|
+
}
|
|
3013
|
+
},
|
|
3014
|
+
"hasDynamicHelp": false,
|
|
3015
|
+
"hidden": true,
|
|
3016
|
+
"hiddenAliases": [],
|
|
3017
|
+
"id": "research:tail-transcript",
|
|
3018
|
+
"pluginAlias": "@rulemetric/cli",
|
|
3019
|
+
"pluginName": "@rulemetric/cli",
|
|
3020
|
+
"pluginType": "core",
|
|
3021
|
+
"strict": true,
|
|
3022
|
+
"enableJsonFlag": false,
|
|
3023
|
+
"isESM": true,
|
|
3024
|
+
"relativePath": [
|
|
3025
|
+
"dist",
|
|
3026
|
+
"commands",
|
|
3027
|
+
"research",
|
|
3028
|
+
"tail-transcript.js"
|
|
3029
|
+
]
|
|
3030
|
+
},
|
|
2836
3031
|
"packs:add-instruction": {
|
|
2837
3032
|
"aliases": [],
|
|
2838
3033
|
"args": {
|
|
@@ -3560,141 +3755,6 @@
|
|
|
3560
3755
|
"stop.js"
|
|
3561
3756
|
]
|
|
3562
3757
|
},
|
|
3563
|
-
"research:backfill": {
|
|
3564
|
-
"aliases": [],
|
|
3565
|
-
"args": {},
|
|
3566
|
-
"description": "Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset — forward-only tail is the default capture path.",
|
|
3567
|
-
"examples": [
|
|
3568
|
-
"<%= config.bin %> research backfill",
|
|
3569
|
-
"<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"
|
|
3570
|
-
],
|
|
3571
|
-
"flags": {
|
|
3572
|
-
"api-url": {
|
|
3573
|
-
"description": "Override API base URL",
|
|
3574
|
-
"env": "RULEMETRIC_API_URL",
|
|
3575
|
-
"hidden": true,
|
|
3576
|
-
"name": "api-url",
|
|
3577
|
-
"hasDynamicHelp": false,
|
|
3578
|
-
"multiple": false,
|
|
3579
|
-
"type": "option"
|
|
3580
|
-
},
|
|
3581
|
-
"claude-dir": {
|
|
3582
|
-
"description": "Override the Claude Code projects directory (defaults to ~/.claude)",
|
|
3583
|
-
"name": "claude-dir",
|
|
3584
|
-
"noCacheDefault": true,
|
|
3585
|
-
"hasDynamicHelp": false,
|
|
3586
|
-
"multiple": false,
|
|
3587
|
-
"type": "option"
|
|
3588
|
-
},
|
|
3589
|
-
"dry-run": {
|
|
3590
|
-
"description": "Print observation count without POSTing",
|
|
3591
|
-
"name": "dry-run",
|
|
3592
|
-
"allowNo": false,
|
|
3593
|
-
"type": "boolean"
|
|
3594
|
-
}
|
|
3595
|
-
},
|
|
3596
|
-
"hasDynamicHelp": false,
|
|
3597
|
-
"hiddenAliases": [],
|
|
3598
|
-
"id": "research:backfill",
|
|
3599
|
-
"pluginAlias": "@rulemetric/cli",
|
|
3600
|
-
"pluginName": "@rulemetric/cli",
|
|
3601
|
-
"pluginType": "core",
|
|
3602
|
-
"strict": true,
|
|
3603
|
-
"enableJsonFlag": false,
|
|
3604
|
-
"isESM": true,
|
|
3605
|
-
"relativePath": [
|
|
3606
|
-
"dist",
|
|
3607
|
-
"commands",
|
|
3608
|
-
"research",
|
|
3609
|
-
"backfill.js"
|
|
3610
|
-
]
|
|
3611
|
-
},
|
|
3612
|
-
"research:resume-scoped-outcomes": {
|
|
3613
|
-
"aliases": [],
|
|
3614
|
-
"args": {},
|
|
3615
|
-
"description": "Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.",
|
|
3616
|
-
"examples": [
|
|
3617
|
-
"<%= config.bin %> research resume-scoped-outcomes",
|
|
3618
|
-
"<%= config.bin %> research resume-scoped-outcomes --list"
|
|
3619
|
-
],
|
|
3620
|
-
"flags": {
|
|
3621
|
-
"api-url": {
|
|
3622
|
-
"description": "Override API base URL",
|
|
3623
|
-
"env": "RULEMETRIC_API_URL",
|
|
3624
|
-
"hidden": true,
|
|
3625
|
-
"name": "api-url",
|
|
3626
|
-
"hasDynamicHelp": false,
|
|
3627
|
-
"multiple": false,
|
|
3628
|
-
"type": "option"
|
|
3629
|
-
},
|
|
3630
|
-
"list": {
|
|
3631
|
-
"description": "Show the outcome store without uploading anything",
|
|
3632
|
-
"name": "list",
|
|
3633
|
-
"allowNo": false,
|
|
3634
|
-
"type": "boolean"
|
|
3635
|
-
}
|
|
3636
|
-
},
|
|
3637
|
-
"hasDynamicHelp": false,
|
|
3638
|
-
"hidden": true,
|
|
3639
|
-
"hiddenAliases": [],
|
|
3640
|
-
"id": "research:resume-scoped-outcomes",
|
|
3641
|
-
"pluginAlias": "@rulemetric/cli",
|
|
3642
|
-
"pluginName": "@rulemetric/cli",
|
|
3643
|
-
"pluginType": "core",
|
|
3644
|
-
"strict": true,
|
|
3645
|
-
"enableJsonFlag": false,
|
|
3646
|
-
"isESM": true,
|
|
3647
|
-
"relativePath": [
|
|
3648
|
-
"dist",
|
|
3649
|
-
"commands",
|
|
3650
|
-
"research",
|
|
3651
|
-
"resume-scoped-outcomes.js"
|
|
3652
|
-
]
|
|
3653
|
-
},
|
|
3654
|
-
"research:tail-transcript": {
|
|
3655
|
-
"aliases": [],
|
|
3656
|
-
"args": {
|
|
3657
|
-
"transcript": {
|
|
3658
|
-
"description": "Absolute path to a Claude Code .jsonl transcript",
|
|
3659
|
-
"name": "transcript",
|
|
3660
|
-
"required": true
|
|
3661
|
-
}
|
|
3662
|
-
},
|
|
3663
|
-
"description": "Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook — safe to re-run.",
|
|
3664
|
-
"flags": {
|
|
3665
|
-
"api-url": {
|
|
3666
|
-
"description": "Override API base URL",
|
|
3667
|
-
"env": "RULEMETRIC_API_URL",
|
|
3668
|
-
"hidden": true,
|
|
3669
|
-
"name": "api-url",
|
|
3670
|
-
"hasDynamicHelp": false,
|
|
3671
|
-
"multiple": false,
|
|
3672
|
-
"type": "option"
|
|
3673
|
-
},
|
|
3674
|
-
"no-post": {
|
|
3675
|
-
"description": "Parse and advance the offset without POSTing (debug)",
|
|
3676
|
-
"name": "no-post",
|
|
3677
|
-
"allowNo": false,
|
|
3678
|
-
"type": "boolean"
|
|
3679
|
-
}
|
|
3680
|
-
},
|
|
3681
|
-
"hasDynamicHelp": false,
|
|
3682
|
-
"hidden": true,
|
|
3683
|
-
"hiddenAliases": [],
|
|
3684
|
-
"id": "research:tail-transcript",
|
|
3685
|
-
"pluginAlias": "@rulemetric/cli",
|
|
3686
|
-
"pluginName": "@rulemetric/cli",
|
|
3687
|
-
"pluginType": "core",
|
|
3688
|
-
"strict": true,
|
|
3689
|
-
"enableJsonFlag": false,
|
|
3690
|
-
"isESM": true,
|
|
3691
|
-
"relativePath": [
|
|
3692
|
-
"dist",
|
|
3693
|
-
"commands",
|
|
3694
|
-
"research",
|
|
3695
|
-
"tail-transcript.js"
|
|
3696
|
-
]
|
|
3697
|
-
},
|
|
3698
3758
|
"service:install": {
|
|
3699
3759
|
"aliases": [],
|
|
3700
3760
|
"args": {},
|
|
@@ -3744,6 +3804,15 @@
|
|
|
3744
3804
|
"allowNo": false,
|
|
3745
3805
|
"type": "boolean"
|
|
3746
3806
|
},
|
|
3807
|
+
"auto-update": {
|
|
3808
|
+
"dependsOn": [
|
|
3809
|
+
"worker-only"
|
|
3810
|
+
],
|
|
3811
|
+
"description": "Opt this machine into automatic stable CLI updates after active worker jobs finish (requires --worker-only)",
|
|
3812
|
+
"name": "auto-update",
|
|
3813
|
+
"allowNo": false,
|
|
3814
|
+
"type": "boolean"
|
|
3815
|
+
},
|
|
3747
3816
|
"worker-only": {
|
|
3748
3817
|
"description": "Install ONLY the job worker as a persistent service, targeting the globally-installed CLI (no repo checkout, no build, no API/gateway/proxy). Sources auth from ~/.config/rulemetric/env. macOS (launchd) + Linux (systemd --user).",
|
|
3749
3818
|
"name": "worker-only",
|
|
@@ -3829,6 +3898,60 @@
|
|
|
3829
3898
|
"uninstall.js"
|
|
3830
3899
|
]
|
|
3831
3900
|
},
|
|
3901
|
+
"service:updates": {
|
|
3902
|
+
"aliases": [],
|
|
3903
|
+
"args": {},
|
|
3904
|
+
"description": "Show or change automatic worker updates on this machine (off by default)",
|
|
3905
|
+
"examples": [
|
|
3906
|
+
"<%= config.bin %> service updates",
|
|
3907
|
+
"<%= config.bin %> service updates --enable",
|
|
3908
|
+
"<%= config.bin %> service updates --disable"
|
|
3909
|
+
],
|
|
3910
|
+
"flags": {
|
|
3911
|
+
"api-url": {
|
|
3912
|
+
"description": "Override API base URL",
|
|
3913
|
+
"env": "RULEMETRIC_API_URL",
|
|
3914
|
+
"hidden": true,
|
|
3915
|
+
"name": "api-url",
|
|
3916
|
+
"hasDynamicHelp": false,
|
|
3917
|
+
"multiple": false,
|
|
3918
|
+
"type": "option"
|
|
3919
|
+
},
|
|
3920
|
+
"enable": {
|
|
3921
|
+
"description": "Install stable npm releases automatically after active jobs finish",
|
|
3922
|
+
"exclusive": [
|
|
3923
|
+
"disable"
|
|
3924
|
+
],
|
|
3925
|
+
"name": "enable",
|
|
3926
|
+
"allowNo": false,
|
|
3927
|
+
"type": "boolean"
|
|
3928
|
+
},
|
|
3929
|
+
"disable": {
|
|
3930
|
+
"description": "Stop future automatic updates",
|
|
3931
|
+
"exclusive": [
|
|
3932
|
+
"enable"
|
|
3933
|
+
],
|
|
3934
|
+
"name": "disable",
|
|
3935
|
+
"allowNo": false,
|
|
3936
|
+
"type": "boolean"
|
|
3937
|
+
}
|
|
3938
|
+
},
|
|
3939
|
+
"hasDynamicHelp": false,
|
|
3940
|
+
"hiddenAliases": [],
|
|
3941
|
+
"id": "service:updates",
|
|
3942
|
+
"pluginAlias": "@rulemetric/cli",
|
|
3943
|
+
"pluginName": "@rulemetric/cli",
|
|
3944
|
+
"pluginType": "core",
|
|
3945
|
+
"strict": true,
|
|
3946
|
+
"enableJsonFlag": false,
|
|
3947
|
+
"isESM": true,
|
|
3948
|
+
"relativePath": [
|
|
3949
|
+
"dist",
|
|
3950
|
+
"commands",
|
|
3951
|
+
"service",
|
|
3952
|
+
"updates.js"
|
|
3953
|
+
]
|
|
3954
|
+
},
|
|
3832
3955
|
"sessions:analyze": {
|
|
3833
3956
|
"aliases": [],
|
|
3834
3957
|
"args": {
|
|
@@ -4815,5 +4938,5 @@
|
|
|
4815
4938
|
]
|
|
4816
4939
|
}
|
|
4817
4940
|
},
|
|
4818
|
-
"version": "0.
|
|
4941
|
+
"version": "0.19.1"
|
|
4819
4942
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rulemetric/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.1",
|
|
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/hooks": "0.
|
|
84
|
-
"@rulemetric/
|
|
85
|
-
"@rulemetric/
|
|
83
|
+
"@rulemetric/hooks": "0.19.1",
|
|
84
|
+
"@rulemetric/skills-registry": "0.19.1",
|
|
85
|
+
"@rulemetric/proxy": "0.19.1"
|
|
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": {
|
|
@@ -102,15 +102,15 @@
|
|
|
102
102
|
"tsx": "^4.19.0",
|
|
103
103
|
"typescript": "^5.9.0",
|
|
104
104
|
"vitest": "^3.2.0",
|
|
105
|
-
"@rulemetric/contracts": "0.0.1",
|
|
106
|
-
"@rulemetric/api": "0.0.1",
|
|
107
105
|
"@rulemetric/core": "0.0.1",
|
|
106
|
+
"@rulemetric/contracts": "0.0.1",
|
|
107
|
+
"@rulemetric/db": "0.0.1",
|
|
108
108
|
"@rulemetric/effectiveness": "0.0.1",
|
|
109
109
|
"@rulemetric/email": "0.0.1",
|
|
110
110
|
"@rulemetric/session": "0.2.1",
|
|
111
111
|
"@rulemetric/telemetry": "0.0.1",
|
|
112
112
|
"@rulemetric/typescript-config": "0.0.0",
|
|
113
|
-
"@rulemetric/
|
|
113
|
+
"@rulemetric/api": "0.0.1"
|
|
114
114
|
},
|
|
115
115
|
"scripts": {
|
|
116
116
|
"build": "node scripts/build.mjs",
|
package/dist/chunk-2C7CFCMM.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as X}from"./chunk-HOQPVOMF.js";import{b as D}from"./chunk-GIRPEMTW.js";import{a as x}from"./chunk-MODXEGCU.js";import{e as J,g as B}from"./chunk-GWQ24FQP.js";import{e as w,f as R}from"./chunk-5VWVQCNR.js";import{c as H,d as U}from"./chunk-MHLHLJ5T.js";import{a as u}from"./chunk-ZLLER3HP.js";import{readFileSync as q,realpathSync as V}from"node:fs";import y from"node:path";import A from"node:os";function Q(s){let n=y.resolve(s);if(n===y.resolve(A.homedir()))return!1;let a=y.parse(n).root;if(n===a)return!1;try{let o=V(A.tmpdir());if(V(n)===o)return!1}catch{}return!0}u(Q,"isScorableProjectPath");var Z=5,ee=Number(process.env.RULEMETRIC_MAX_SUGGESTION_PROJECTS??10),te=48,ne=.5,O=400,oe=3,re=.6,se=1;function ae(s){let n=s.bloated??[],a=new Set([...s.harmful.map(o=>o.id),...s.candidates.map(o=>o.id)]);return n.filter(o=>!a.has(o.id)).slice(0,se).map(o=>({instructionId:o.id,estimatedTokens:o.estimatedTokens,topProjectId:o.topProjectId??null,score:.55,reason:`Costs ~${o.estimatedTokens} tokens every session and measures neutral across ${o.exposures} exposed session(s) \u2014 enough data to detect an effect, and none found. Consider shortening "${o.name}" rather than removing it.`+(o.containsSafetyLanguage?" CAUTION: it contains guardrail language (destructive-command or credential rules) \u2014 preserve those lines when shortening.":"")}))}u(ae,"buildTrimProposals");async function ie(s,n,a){let o=[],i=0;for(let d of s)try{await a("/api/instruction-experiments",{instructionId:d.instructionId,projectPath:n,source:"groom"}),i++}catch(g){let m=g instanceof Error?g.message:String(g);o.push({...d,reason:`${d.reason} (not measurable by withholding: ${m})`})}return{nominated:i,unmeasurable:o}}u(ie,"nominateRemovals");function ce(s){let n=[];for(let o of s.harmful){let i=o.verdict.delta;n.push({instructionId:o.id,score:Math.min(.95,.75+Math.abs(i)),topProjectId:o.topProjectId??null,reason:`Measured harmful: sessions using "${o.name}" scored ${(i*100).toFixed(1)}pp worse across ${o.exposures} exposed session(s). Observational \u2014 review before archiving.`})}let a=new Set(s.harmful.map(o=>o.id));for(let o of s.candidates)a.has(o.id)||n.push({instructionId:o.id,score:re,topProjectId:o.topProjectId??null,reason:`Unused: "${o.name}" is ${o.reason} (${o.totalExposures} lifetime exposure(s)) but still costs context budget every session.`});return n.slice(0,oe)}u(ce,"buildRemovalProposals");function le(){let s=y.join(A.homedir(),".config","rulemetric","skills-registry.json");try{let n=q(s,"utf-8"),a=JSON.parse(n),o=new Date(a.generatedAt).getTime();return Number.isNaN(o)?"unknown":Date.now()-o>te*60*60*1e3?"stale":"fresh"}catch{return"unknown"}}u(le,"observeSkillsRegistry");var Re=u(async(s,n)=>{let a=J(),o=a!=="none";o?n.logger.info(`Scoring backend: ${a}`):n.logger.warn("No LLM backend available (claude CLI missing and ANTHROPIC_API_KEY unset); skipping relevance scoring. Removal/trim proposals still run \u2014 they need no LLM.");let i;try{i=(await w("/api/sessions/project-paths?limit="+ee)).projectPaths}catch(e){n.logger.warn(`Failed to fetch project paths: ${e instanceof Error?e.message:String(e)}`);return}if(i.length===0){n.logger.info("No recent project paths; nothing to score");return}let d=new Map;try{let e=await w("/api/projects?limit=200");for(let t of e.projects??[])t.primaryCheckoutPath&&d.set(x(t.primaryCheckoutPath),t.id)}catch(e){n.logger.warn(`Failed to fetch projects for id resolution: ${e instanceof Error?e.message:String(e)}`)}let g=new Map;try{let e=await w(`/api/catalog?limit=200&proposable=1&contentPreview=${O}`);for(let t of e)g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.contentPreview??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch catalog: ${e instanceof Error?e.message:String(e)}`)}try{let e=await w("/api/instructions?limit=100");for(let t of e.instructions??[])g.has(t.id)||g.set(t.id,{id:t.id,name:t.name,description:t.description??"",tags:t.tags??[],contentPreview:(t.content??"").slice(0,O)})}catch(e){n.logger.warn(`Failed to fetch personal instructions: ${e instanceof Error?e.message:String(e)}`)}let m=[],p=[];try{let e=await w("/api/insights/groom-candidates");if(!e.captureHealthy)n.logger.info(`Grooming paused: ${e.reason??"capture unhealthy"}`);else{m=ce(e),p=ae(e);let t=e.safetyGuarded+e.harmfulSafetyGuarded;n.logger.info(`Removal proposals: ${m.length} (${e.harmful.length} measured-harmful, ${e.candidates.length} never-used, ${t} withheld by the safety allowlist); trim proposals: ${p.length} (${(e.bloated??[]).length} measured-neutral and expensive, ${e.trimSafetyFlagged??0} flagged as containing guardrail language)`)}}catch(e){n.logger.warn(`Failed to fetch groom candidates: ${e instanceof Error?e.message:String(e)}`)}let b=[...g.values()];if(b.length===0&&m.length===0&&p.length===0){n.logger.info("No candidate instructions and nothing to retire; nothing to score");return}n.logger.info(`Scoring ${b.length} candidates across ${i.length} project(s)`);let M=0,l=null,I=new Set;for(let e of i)try{let t=x(e);if(!Q(t)){n.logger.info(`Skipping ${t}: not a project directory (home/root)`);continue}let f=D(t),k=o&&f.length>0;f.length===0&&n.logger.info(`${t}: insufficient language signals; removal/trim only`);let v=X(t),z={name:y.basename(t),description:v.description,languages:f,topics:v.topics,dependencies:v.dependencies},E=k?U(b):[];k&&n.logger.info(`Scoring ${b.length} candidates for ${t} in ${E.length} batch(es)`);let C=[],$=0;for(let r of E)try{let c=await B(H(z,r),"",4096);if(!c){$++;continue}let T=c.recommendations??[];for(let P of T)typeof P.instructionId=="string"&&typeof P.score=="number"&&typeof P.reason=="string"&&C.push({instructionId:P.instructionId,score:P.score,reason:P.reason})}catch(c){$++,n.logger.warn(`Batch failed for ${t}: ${c instanceof Error?c.message:String(c)}`)}$>0&&n.logger.warn(`${$}/${E.length} batch(es) failed for ${t} (backend ${a}); suggestions are partial`),k&&C.length===0&&n.logger.warn(`No usable LLM output for ${t} (backend ${a})`);let K=C.filter(r=>r.score>=ne).sort((r,c)=>c.score-r.score).slice(0,Z),_=d.get(t),W=l===null||l===t;l===null&&(l=t);let N=u(r=>r.topProjectId?r.topProjectId===_:W,"placeHere"),F=m.filter(N),{nominated:L,unmeasurable:G}=await ie(F,t,R);L>0&&n.logger.info(`${t}: ${L} removal candidate(s) nominated for randomised withholding instead of the feed`);let h=[...K.map(r=>({instructionId:r.instructionId,score:r.score,reason:r.reason,kind:"add"})),...G.map(({topProjectId:r,...c})=>({...c,kind:"remove"})),...p.filter(N).map(({estimatedTokens:r,topProjectId:c,...T})=>({...T,kind:"trim"}))];if(h.length===0){n.logger.info(`Nothing to suggest for ${t}`);continue}await R("/api/instruction-suggestions/batch-upsert",{projectPath:t,..._?{projectId:_}:{},suggestions:h}),n.logger.info(`${t}: ${h.filter(r=>r.kind==="add").length} add + ${h.filter(r=>r.kind==="remove").length} remove + ${h.filter(r=>r.kind==="trim").length} trim`);for(let r of h)r.kind!=="add"&&I.add(r.instructionId);let Y=new Set(G.map(r=>r.instructionId));for(let r of F)Y.has(r.instructionId)||I.add(r.instructionId);M++}catch(t){n.logger.warn(`Failed to score ${e}: ${t instanceof Error?t.message:String(t)}`)}let j=[...m.filter(e=>!I.has(e.instructionId)),...p.filter(e=>!I.has(e.instructionId)).map(({estimatedTokens:e,...t})=>t)];if(j.length>0&&l)try{let e=new Set(p.map(t=>t.instructionId));await R("/api/instruction-suggestions/batch-upsert",{projectPath:l,...d.get(l)?{projectId:d.get(l)}:{},suggestions:j.map(({topProjectId:t,...f})=>({...f,kind:e.has(f.instructionId)?"trim":"remove"}))}),n.logger.info(`Orphan sweep: ${j.length} proposal(s) whose project was not scored this run placed on ${l}`)}catch(e){n.logger.warn(`Orphan sweep failed: ${e instanceof Error?e.message:String(e)}`)}let S=le();if(S==="unknown")n.logger.warn("Skills registry unreadable or has no usable generatedAt; leaving suggestion staleness unchanged");else try{await R("/api/instruction-suggestions/mark-stale",{stale:S==="stale"}),S==="stale"?n.logger.warn("Skills registry is stale (>48h); marked catalog-skill suggestions stale"):n.logger.info("Skills registry is fresh; cleared staleness on catalog-skill suggestions")}catch{}n.logger.info(`Done: scored ${M}/${i.length} projects`)},"cronSuggestInstructions");export{Q as a,ae as b,ie as c,ce as d,Re as e};
|
package/dist/chunk-647M2I2Y.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as s}from"./chunk-ZLLER3HP.js";function w(r){if(typeof r!="string")return null;let n=r.toUpperCase();return n==="A"||n==="B"||n==="TIE"?n:null}s(w,"normalizeWinner");function v(r){return Array.isArray(r)?r.filter(n=>typeof n=="string"):[]}s(v,"stringList");function d(r){let n=r.trim(),a=n.match(/```(?:json)?\s*([\s\S]*?)```/);a&&(n=a[1].trim());let e=n.match(/\{[\s\S]*\}/);e&&(n=e[0]);let t;try{t=JSON.parse(n)}catch{return null}if(typeof t!="object"||t===null)return null;let{per_eval:l,overall:g}=t,i=typeof g=="object"&&g!==null?g:{},u=w(i.winner);return u?{perEval:(Array.isArray(l)?l:[]).flatMap(p=>{if(typeof p!="object"||p===null)return[];let o=p,c=w(o.winner);return!c||typeof o.eval_name!="string"?[]:[{evalName:o.eval_name,winner:c,reasoning:typeof o.reasoning=="string"?o.reasoning:""}]}),overall:{winner:u,reasoning:typeof i.reasoning=="string"?i.reasoning:"",strengthsWinner:v(i.strengths_winner),weaknessesLoser:v(i.weaknesses_loser)}}:null}s(d,"parseComparatorOutput");function m(r,n){let a=s(e=>{if(e==="TIE")return null;let t=n.isSwapped?n.targetBId:n.targetAId,l=n.isSwapped?n.targetAId:n.targetBId;return e==="A"?t:l},"resolve");return{winnerTargetId:a(r.overall.winner),perEval:r.perEval.map(e=>({evalName:e.evalName,winnerTargetId:a(e.winner),reasoning:e.reasoning})),overall:{reasoning:r.overall.reasoning,strengthsWinner:r.overall.strengthsWinner,weaknessesLoser:r.overall.weaknessesLoser}}}s(m,"resolveComparison");export{d as a,m as b};
|