@rulemetric/cli 0.6.9 → 0.7.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 +4 -3
- package/dist/{chunk-SZ7VDCD6.js → chunk-2HK7RGZB.js} +22 -3
- package/dist/chunk-2HK7RGZB.js.map +7 -0
- package/dist/{chunk-RUCSRN7F.js → chunk-2ORJWTNZ.js} +2 -2
- package/dist/{chunk-SLL3OBKN.js → chunk-37LN5O7M.js} +2 -2
- package/dist/chunk-3S7223UR.js +81 -0
- package/dist/chunk-3S7223UR.js.map +7 -0
- package/dist/{chunk-DAJNO4OI.js → chunk-4LYCDS2N.js} +28 -16
- package/dist/chunk-4LYCDS2N.js.map +7 -0
- package/dist/{chunk-UPXIO7CG.js → chunk-4XAWK6S2.js} +8 -8
- package/dist/{chunk-QD6X4L4L.js → chunk-5BAOGNUH.js} +4 -4
- package/dist/chunk-5EDMGK3W.js +39 -0
- package/dist/chunk-5EDMGK3W.js.map +7 -0
- package/dist/{chunk-5ADHO5QF.js → chunk-6NBS5XFS.js} +6 -6
- package/dist/{chunk-BBLTN35F.js → chunk-7DULPSFU.js} +49 -20
- package/dist/chunk-7DULPSFU.js.map +7 -0
- package/dist/chunk-7LVVKQMZ.js +98 -0
- package/dist/chunk-7LVVKQMZ.js.map +7 -0
- package/dist/{chunk-PXVQLD7S.js → chunk-7NNFYWKK.js} +48 -1
- package/dist/chunk-7NNFYWKK.js.map +7 -0
- package/dist/{chunk-DTFXCHHI.js → chunk-DNKSVWMD.js} +4 -4
- package/dist/{chunk-CNMWYYSV.js → chunk-DUJSRBLP.js} +2 -2
- package/dist/chunk-EARWG4EV.js +22 -0
- package/dist/chunk-EARWG4EV.js.map +7 -0
- package/dist/{chunk-6EMZI4Y3.js → chunk-EI5BHWXA.js} +437 -401
- package/dist/chunk-EI5BHWXA.js.map +7 -0
- package/dist/{chunk-HNZLEEG2.js → chunk-EJ3YAFDP.js} +4 -4
- package/dist/{chunk-HNZLEEG2.js.map → chunk-EJ3YAFDP.js.map} +2 -2
- package/dist/{chunk-YSEQWCN4.js → chunk-EYPAAGN5.js} +2 -2
- package/dist/{chunk-JEJ3J5J6.js → chunk-GIUBARWS.js} +2 -2
- package/dist/chunk-GQNJO2P2.js +102 -0
- package/dist/chunk-GQNJO2P2.js.map +7 -0
- package/dist/chunk-ILYDELUE.js +46 -0
- package/dist/chunk-ILYDELUE.js.map +7 -0
- package/dist/chunk-J6QFW4LD.js +55 -0
- package/dist/chunk-J6QFW4LD.js.map +7 -0
- package/dist/{chunk-OTOWLUOJ.js → chunk-JULOLTZS.js} +2 -2
- package/dist/{chunk-DR5WLIOU.js → chunk-KJKBDQ4D.js} +2 -2
- package/dist/{chunk-XN23W5HL.js → chunk-LXKPNATC.js} +93 -7
- package/dist/chunk-LXKPNATC.js.map +7 -0
- package/dist/{chunk-N5A2IQAK.js → chunk-OK3I555A.js} +2 -2
- package/dist/{chunk-XNNOXGP6.js → chunk-OKWCKCPE.js} +38 -19
- package/dist/chunk-OKWCKCPE.js.map +7 -0
- package/dist/{chunk-AHDRN6NE.js → chunk-OO7JDFS4.js} +5 -5
- package/dist/{chunk-N2X35ITW.js → chunk-OQBBVTDG.js} +11 -1
- package/dist/{chunk-N2X35ITW.js.map → chunk-OQBBVTDG.js.map} +2 -2
- package/dist/{chunk-3QH73QOQ.js → chunk-PED7L5GX.js} +2 -2
- package/dist/{chunk-VBGUNFKY.js → chunk-PMI56ED5.js} +5 -5
- package/dist/{chunk-RCMXTLQF.js → chunk-RMTT4KDY.js} +2 -2
- package/dist/{chunk-W4MZXKZ2.js → chunk-UKMLICWS.js} +2 -2
- package/dist/{chunk-3POYC5NA.js → chunk-XK42ZBDE.js} +3 -3
- package/dist/{chunk-ZSGKRCKD.js → chunk-XUV6DDBF.js} +2 -2
- package/dist/{chunk-LAKZUE35.js → chunk-Y3WD5CSW.js} +2 -2
- package/dist/{chunk-3QVMIJUL.js → chunk-YOBA3NAM.js} +5 -5
- package/dist/{chunk-ZRLYHBPN.js → chunk-ZUJBM6HE.js} +20 -2
- package/dist/chunk-ZUJBM6HE.js.map +7 -0
- package/dist/commands/antigravity/backfill.js +5 -4
- package/dist/commands/antigravity/backfill.js.map +1 -1
- package/dist/commands/auth/create-key.js +4 -3
- package/dist/commands/auth/create-key.js.map +1 -1
- package/dist/commands/auth/login.js +13 -9
- package/dist/commands/auth/login.js.map +2 -2
- package/dist/commands/auth/logout.js +4 -3
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/revoke-key.js +4 -3
- package/dist/commands/auth/revoke-key.js.map +1 -1
- package/dist/commands/auth/signup.js +13 -9
- package/dist/commands/auth/signup.js.map +2 -2
- package/dist/commands/auth/status.js +4 -3
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/catalog/index.js +4 -3
- package/dist/commands/catalog/index.js.map +1 -1
- package/dist/commands/catalog/recommend.js +4 -3
- package/dist/commands/catalog/recommend.js.map +1 -1
- package/dist/commands/convert.js +4 -3
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/converters.js +4 -3
- package/dist/commands/converters.js.map +1 -1
- package/dist/commands/crons/list.js +4 -3
- package/dist/commands/crons/list.js.map +1 -1
- package/dist/commands/crons/run.js +4 -3
- package/dist/commands/crons/run.js.map +1 -1
- package/dist/commands/dashboard.js +4 -3
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/diagnostics.js +117 -0
- package/dist/commands/diagnostics.js.map +7 -0
- package/dist/commands/eval-targets/create.js +4 -3
- package/dist/commands/eval-targets/create.js.map +1 -1
- package/dist/commands/eval-targets/list.js +4 -3
- package/dist/commands/eval-targets/list.js.map +1 -1
- package/dist/commands/evals/agent.js +41 -20
- package/dist/commands/evals/agent.js.map +2 -2
- package/dist/commands/evals/benchmark.js +5 -4
- package/dist/commands/evals/benchmark.js.map +1 -1
- package/dist/commands/evals/compare.js +4 -3
- package/dist/commands/evals/compare.js.map +1 -1
- package/dist/commands/evals/create.js +4 -3
- package/dist/commands/evals/create.js.map +1 -1
- package/dist/commands/evals/optimize-description.js +4 -3
- package/dist/commands/evals/optimize-description.js.map +1 -1
- package/dist/commands/evals/optimize.js +4 -3
- package/dist/commands/evals/optimize.js.map +1 -1
- package/dist/commands/evals/run.js +4 -3
- package/dist/commands/evals/run.js.map +1 -1
- package/dist/commands/gateway/ensure.js +75 -5
- package/dist/commands/gateway/ensure.js.map +2 -2
- package/dist/commands/hooks/install.js +76 -23
- package/dist/commands/hooks/install.js.map +2 -2
- package/dist/commands/hooks/run.js +4 -3
- package/dist/commands/hooks/run.js.map +1 -1
- package/dist/commands/hooks/uninstall.js +31 -40
- package/dist/commands/hooks/uninstall.js.map +2 -2
- package/dist/commands/import.js +4 -3
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/instructions/create.js +4 -3
- package/dist/commands/instructions/create.js.map +1 -1
- package/dist/commands/instructions/delete.js +4 -3
- package/dist/commands/instructions/delete.js.map +1 -1
- package/dist/commands/instructions/fork.js +4 -3
- package/dist/commands/instructions/fork.js.map +1 -1
- package/dist/commands/instructions/get.js +4 -3
- package/dist/commands/instructions/get.js.map +1 -1
- package/dist/commands/instructions/list.js +4 -3
- package/dist/commands/instructions/list.js.map +1 -1
- package/dist/commands/instructions/promote.js +4 -3
- package/dist/commands/instructions/promote.js.map +1 -1
- package/dist/commands/instructions/pull.js +4 -3
- package/dist/commands/instructions/pull.js.map +1 -1
- package/dist/commands/instructions/upstream.js +4 -3
- package/dist/commands/instructions/upstream.js.map +1 -1
- package/dist/commands/instructions/versions.js +4 -3
- package/dist/commands/instructions/versions.js.map +1 -1
- package/dist/commands/launcher.js +4 -3
- package/dist/commands/launcher.js.map +1 -1
- package/dist/commands/org/current.js +4 -3
- package/dist/commands/org/current.js.map +1 -1
- package/dist/commands/org/list.js +4 -3
- package/dist/commands/org/list.js.map +1 -1
- package/dist/commands/org/switch.js +4 -3
- package/dist/commands/org/switch.js.map +1 -1
- package/dist/commands/packs/add-instruction.js +4 -3
- package/dist/commands/packs/add-instruction.js.map +1 -1
- package/dist/commands/packs/apply.js +4 -3
- package/dist/commands/packs/apply.js.map +1 -1
- package/dist/commands/packs/create.js +4 -3
- package/dist/commands/packs/create.js.map +1 -1
- package/dist/commands/packs/fork.js +4 -3
- package/dist/commands/packs/fork.js.map +1 -1
- package/dist/commands/packs/get.js +4 -3
- package/dist/commands/packs/get.js.map +1 -1
- package/dist/commands/packs/list.js +4 -3
- package/dist/commands/packs/list.js.map +1 -1
- package/dist/commands/packs/remove-instruction.js +4 -3
- package/dist/commands/packs/remove-instruction.js.map +1 -1
- package/dist/commands/proxy/env.js +7 -4
- package/dist/commands/proxy/env.js.map +1 -1
- package/dist/commands/proxy/logs.js +4 -3
- package/dist/commands/proxy/logs.js.map +1 -1
- package/dist/commands/proxy/restart.js +4 -3
- package/dist/commands/proxy/restart.js.map +1 -1
- package/dist/commands/proxy/setup.js +20 -14
- package/dist/commands/proxy/setup.js.map +2 -2
- package/dist/commands/proxy/start.js +29 -15
- package/dist/commands/proxy/start.js.map +2 -2
- package/dist/commands/proxy/status.js +16 -13
- package/dist/commands/proxy/status.js.map +2 -2
- package/dist/commands/proxy/stop.js +21 -12
- package/dist/commands/proxy/stop.js.map +2 -2
- package/dist/commands/research/backfill.js +5 -4
- package/dist/commands/research/backfill.js.map +1 -1
- package/dist/commands/research/tail-transcript.js +5 -4
- package/dist/commands/research/tail-transcript.js.map +1 -1
- package/dist/commands/service/install.js +6 -6
- package/dist/commands/service/status.js +4 -3
- package/dist/commands/service/status.js.map +1 -1
- package/dist/commands/service/uninstall.js +4 -3
- package/dist/commands/service/uninstall.js.map +1 -1
- package/dist/commands/sessions/analyze.js +4 -3
- package/dist/commands/sessions/analyze.js.map +1 -1
- package/dist/commands/sessions/end.js +4 -3
- package/dist/commands/sessions/end.js.map +1 -1
- package/dist/commands/sessions/import.js +4 -3
- package/dist/commands/sessions/import.js.map +1 -1
- package/dist/commands/sessions/list.js +4 -3
- package/dist/commands/sessions/list.js.map +1 -1
- package/dist/commands/sessions/start.js +4 -3
- package/dist/commands/sessions/start.js.map +1 -1
- package/dist/commands/setup.js +10 -6
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/skills/export-approved.js +4 -3
- package/dist/commands/skills/export-approved.js.map +1 -1
- package/dist/commands/skills/install.js +4 -3
- package/dist/commands/skills/install.js.map +1 -1
- package/dist/commands/skills/list.js +4 -3
- package/dist/commands/skills/list.js.map +1 -1
- package/dist/commands/skills/publish.js +4 -3
- package/dist/commands/skills/publish.js.map +1 -1
- package/dist/commands/skills/search.js +4 -3
- package/dist/commands/skills/search.js.map +1 -1
- package/dist/commands/skills/update.js +4 -3
- package/dist/commands/skills/update.js.map +1 -1
- package/dist/commands/suggestions/accept.js +4 -3
- package/dist/commands/suggestions/accept.js.map +1 -1
- package/dist/commands/suggestions/dismiss.js +4 -3
- package/dist/commands/suggestions/dismiss.js.map +1 -1
- package/dist/commands/suggestions/list.js +4 -3
- package/dist/commands/suggestions/list.js.map +1 -1
- package/dist/commands/suggestions/refresh.js +4 -3
- package/dist/commands/suggestions/refresh.js.map +1 -1
- package/dist/dashboard/Dashboard.js +16 -16
- package/dist/dashboard/data.js +2 -2
- package/dist/dashboard/launcher/ActiveJobsList.js +2 -2
- package/dist/dashboard/launcher/LauncherOverlay.js +7 -7
- package/dist/dashboard/launcher/NewLaunchForm.js +2 -2
- package/dist/dashboard/launcher/api.js +2 -2
- package/dist/dashboard/launcher/useLaunchJobs.js +3 -3
- package/dist/lib/active-org-refresh.js +2 -2
- package/dist/lib/agent-loop.js +19 -17
- package/dist/lib/antigravity-transcript.js +2 -2
- package/dist/lib/api-client.js +1 -1
- package/dist/lib/capture-hosts.js +8 -0
- package/dist/lib/capture-hosts.js.map +7 -0
- package/dist/lib/diagnostics.js +12 -0
- package/dist/lib/diagnostics.js.map +7 -0
- package/dist/lib/editor-proxy-pins.js +14 -0
- package/dist/lib/editor-proxy-pins.js.map +7 -0
- package/dist/lib/ensure-api-key.js +3 -3
- package/dist/lib/eval-benchmark.js +2 -2
- package/dist/lib/eval-conversation-handler.js +2 -2
- package/dist/lib/gateway-entry.js +39 -1
- package/dist/lib/gateway-entry.js.map +2 -2
- package/dist/lib/gateway-identity.js +16 -0
- package/dist/lib/gateway-identity.js.map +7 -0
- package/dist/lib/gateway-lifecycle.js +9 -3
- package/dist/lib/gateway.js +3 -1
- package/dist/lib/handlers/cron-suggest-instructions.js +3 -3
- package/dist/lib/handlers/process-announcement.js +3 -3
- package/dist/lib/handlers/process-changelog.js +2 -2
- package/dist/lib/handlers/process-conversation.js +3 -3
- package/dist/lib/handlers/process-eval.js +2 -2
- package/dist/lib/handlers/process-insights.js +2 -2
- package/dist/lib/handlers/process-launch.js +2 -2
- package/dist/lib/handlers/process-run-cleanup.js +2 -2
- package/dist/lib/handlers/process-session-goal.js +2 -2
- package/dist/lib/hooks-config.js +18 -1
- package/dist/lib/manual-tasks.js +5 -5
- package/dist/lib/pid-identity.js +14 -0
- package/dist/lib/pid-identity.js.map +7 -0
- package/dist/lib/proxy-respawn.js +12 -0
- package/dist/lib/proxy-respawn.js.map +7 -0
- package/dist/lib/research-client.js +2 -2
- package/dist/lib/setup-steps.js +7 -4
- package/dist/lib/statusline-shim.js +3 -1
- package/dist/lib/telemetry.js +4 -2
- package/dist/lib/terminal-target-heartbeat.js +2 -2
- package/oclif.manifest.json +34 -1
- package/package.json +4 -4
- package/dist/chunk-6EMZI4Y3.js.map +0 -7
- package/dist/chunk-BBLTN35F.js.map +0 -7
- package/dist/chunk-DAJNO4OI.js.map +0 -7
- package/dist/chunk-PXVQLD7S.js.map +0 -7
- package/dist/chunk-SZ7VDCD6.js.map +0 -7
- package/dist/chunk-TX2HKJLA.js +0 -55
- package/dist/chunk-TX2HKJLA.js.map +0 -7
- package/dist/chunk-XN23W5HL.js.map +0 -7
- package/dist/chunk-XNNOXGP6.js.map +0 -7
- package/dist/chunk-ZRLYHBPN.js.map +0 -7
- /package/dist/{chunk-RUCSRN7F.js.map → chunk-2ORJWTNZ.js.map} +0 -0
- /package/dist/{chunk-SLL3OBKN.js.map → chunk-37LN5O7M.js.map} +0 -0
- /package/dist/{chunk-UPXIO7CG.js.map → chunk-4XAWK6S2.js.map} +0 -0
- /package/dist/{chunk-QD6X4L4L.js.map → chunk-5BAOGNUH.js.map} +0 -0
- /package/dist/{chunk-5ADHO5QF.js.map → chunk-6NBS5XFS.js.map} +0 -0
- /package/dist/{chunk-DTFXCHHI.js.map → chunk-DNKSVWMD.js.map} +0 -0
- /package/dist/{chunk-CNMWYYSV.js.map → chunk-DUJSRBLP.js.map} +0 -0
- /package/dist/{chunk-YSEQWCN4.js.map → chunk-EYPAAGN5.js.map} +0 -0
- /package/dist/{chunk-JEJ3J5J6.js.map → chunk-GIUBARWS.js.map} +0 -0
- /package/dist/{chunk-OTOWLUOJ.js.map → chunk-JULOLTZS.js.map} +0 -0
- /package/dist/{chunk-DR5WLIOU.js.map → chunk-KJKBDQ4D.js.map} +0 -0
- /package/dist/{chunk-N5A2IQAK.js.map → chunk-OK3I555A.js.map} +0 -0
- /package/dist/{chunk-AHDRN6NE.js.map → chunk-OO7JDFS4.js.map} +0 -0
- /package/dist/{chunk-3QH73QOQ.js.map → chunk-PED7L5GX.js.map} +0 -0
- /package/dist/{chunk-VBGUNFKY.js.map → chunk-PMI56ED5.js.map} +0 -0
- /package/dist/{chunk-RCMXTLQF.js.map → chunk-RMTT4KDY.js.map} +0 -0
- /package/dist/{chunk-W4MZXKZ2.js.map → chunk-UKMLICWS.js.map} +0 -0
- /package/dist/{chunk-3POYC5NA.js.map → chunk-XK42ZBDE.js.map} +0 -0
- /package/dist/{chunk-ZSGKRCKD.js.map → chunk-XUV6DDBF.js.map} +0 -0
- /package/dist/{chunk-LAKZUE35.js.map → chunk-Y3WD5CSW.js.map} +0 -0
- /package/dist/{chunk-3QVMIJUL.js.map → chunk-YOBA3NAM.js.map} +0 -0
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/auth/logout.ts"],
|
|
4
4
|
"sourcesContent": ["import { BaseCommand } from '../../base-command.js';\nimport { clearToken, clearEnvFile } from '../../lib/auth.js';\n\nexport default class AuthLogout extends BaseCommand {\n static override description = 'Log out of RuleMetric';\n\n static override examples = ['<%= config.bin %> auth logout'];\n\n async run(): Promise<void> {\n await this.parse(AuthLogout);\n clearToken();\n clearEnvFile();\n this.log('Logged out successfully.');\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAGA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW,CAAC,+BAA+B;AAAA,EAE3D,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,WAAU;AAC3B,eAAW;AACX,iBAAa;AACb,SAAK,IAAI,0BAA0B;AAAA,EACrC;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseCommand
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
4
4
|
import "../../chunk-R56PH7YE.js";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-GQNJO2P2.js";
|
|
6
|
+
import "../../chunk-37LN5O7M.js";
|
|
6
7
|
import "../../chunk-EKJ2CABV.js";
|
|
7
8
|
import {
|
|
8
9
|
apiDelete
|
|
9
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
10
11
|
import "../../chunk-W2YERO7E.js";
|
|
11
12
|
import "../../chunk-NSBPE2FW.js";
|
|
12
13
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/auth/revoke-key.ts"],
|
|
4
4
|
"sourcesContent": ["import { Args } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiDelete } from '../../lib/api-client.js';\n\nexport default class AuthRevokeKey extends BaseCommand {\n static override description = 'Revoke an API key';\n\n static override examples = [\n '<%= config.bin %> auth revoke-key <key-id>',\n ];\n\n static override args = {\n id: Args.string({ description: 'API key ID to revoke', required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(AuthRevokeKey);\n\n await apiDelete(`/api/auth/api-keys/${args.id}`);\n this.log(`API key ${args.id} revoked.`);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA,SAAS,YAAY;AAIrB,IAAqB,gBAArB,MAAqB,uBAAsB,YAAY;AAAA,EACrD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,OAAgB,OAAO;AAAA,IACrB,IAAI,KAAK,OAAO,EAAE,aAAa,wBAAwB,UAAU,KAAK,CAAC;AAAA,EACzE;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,cAAa;AAE/C,UAAM,UAAU,sBAAsB,KAAK,EAAE,EAAE;AAC/C,SAAK,IAAI,WAAW,KAAK,EAAE,WAAW;AAAA,EACxC;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureDeviceApiKey
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import {
|
|
5
|
-
emitSetupEvent
|
|
6
|
-
} from "../../chunk-TX2HKJLA.js";
|
|
3
|
+
} from "../../chunk-EJ3YAFDP.js";
|
|
7
4
|
import {
|
|
8
5
|
BaseCommand
|
|
9
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
10
7
|
import "../../chunk-R56PH7YE.js";
|
|
8
|
+
import {
|
|
9
|
+
emitSetupEvent
|
|
10
|
+
} from "../../chunk-GQNJO2P2.js";
|
|
11
11
|
import {
|
|
12
12
|
bootstrapActiveOrg
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-37LN5O7M.js";
|
|
14
14
|
import "../../chunk-EKJ2CABV.js";
|
|
15
15
|
import {
|
|
16
16
|
ApiError,
|
|
17
|
-
|
|
18
|
-
} from "../../chunk-
|
|
17
|
+
api
|
|
18
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
19
19
|
import {
|
|
20
20
|
saveEnvFile,
|
|
21
21
|
saveToken
|
|
@@ -52,7 +52,11 @@ var AuthSignup = class _AuthSignup extends BaseCommand {
|
|
|
52
52
|
}
|
|
53
53
|
let data;
|
|
54
54
|
try {
|
|
55
|
-
data = await
|
|
55
|
+
data = await api("/auth/signup", {
|
|
56
|
+
method: "POST",
|
|
57
|
+
body: { email, password },
|
|
58
|
+
timeoutMs: 2e4
|
|
59
|
+
});
|
|
56
60
|
} catch (err) {
|
|
57
61
|
if (err instanceof ApiError && err.statusCode === 409) {
|
|
58
62
|
this.error(`An account with ${email} already exists. Run: rulemetric auth login -e ${email}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/auth/signup.ts"],
|
|
4
|
-
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { saveToken, saveEnvFile } from '../../lib/auth.js';\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAgBtB,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,OAAO,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,gBAAgB,CAAC;AAAA,IAC/D,UAAU,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,kDAAkD,CAAC;AAAA,EACtG;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,WAAU;AAE7C,QAAI,QAAQ,MAAM;AAClB,QAAI,WAAW,MAAM;AAErB,QAAI,CAAC,SAAS,CAAC,UAAU;AAGvB,UAAI,CAAC,QAAQ,MAAM,OAAO;AACxB,aAAK,MAAM,oFAAoF;AAAA,MACjG;AACA,YAAM,EAAE,OAAO,UAAU,eAAe,IAAI,MAAM,OAAO,mBAAmB;AAE5E,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,MAAM,EAAE,SAAS,SAAS,CAAC;AAAA,MAC3C;AACA,UAAI,CAAC,UAAU;AACb,mBAAW,MAAM,eAAe,EAAE,SAAS,0BAA0B,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;
|
|
4
|
+
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { saveToken, saveEnvFile } from '../../lib/auth.js';\nimport { api, ApiError } from '../../lib/api-client.js';\nimport { bootstrapActiveOrg } from '../../lib/active-org-refresh.js';\nimport { ensureDeviceApiKey } from '../../lib/ensure-api-key.js';\nimport { emitSetupEvent } from '../../lib/telemetry.js';\n\ninterface SignupResponse {\n confirmationRequired: boolean;\n accessToken?: string;\n refreshToken?: string;\n expiresAt?: string | null;\n email: string;\n}\n\nexport default class AuthSignup extends BaseCommand {\n static override description = 'Create a RuleMetric account from the CLI';\n\n static override examples = [\n '<%= config.bin %> auth signup',\n '<%= config.bin %> auth signup -e user@example.com',\n ];\n\n static override flags = {\n email: Flags.string({ char: 'e', description: 'Email address' }),\n password: Flags.string({ char: 'p', description: 'Password (min 8 chars; for non-interactive use)' }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(AuthSignup);\n\n let email = flags.email;\n let password = flags.password;\n\n if (!email || !password) {\n // Interactive prompts hang forever with no output in a non-TTY (CI, SSH\n // pipe, an agent driving the CLI). Fail fast with actionable guidance.\n if (!process.stdin.isTTY) {\n this.error('Missing credentials in a non-interactive shell. Pass --email/-e and --password/-p.');\n }\n const { input, password: passwordPrompt } = await import('@inquirer/prompts');\n\n if (!email) {\n email = await input({ message: 'Email:' });\n }\n if (!password) {\n password = await passwordPrompt({ message: 'Password (min 8 chars):' });\n }\n }\n\n let data: SignupResponse;\n try {\n // Bounded so the first onboarding step fails fast + retryable instead of\n // hanging for minutes on a held/502'd connection or a broken local proxy.\n data = await api<SignupResponse>('/auth/signup', {\n method: 'POST',\n body: { email, password },\n timeoutMs: 20_000,\n });\n } catch (err) {\n // 409 = the email is already registered \u2014 steer to login, not a retry loop.\n if (err instanceof ApiError && err.statusCode === 409) {\n this.error(`An account with ${email} already exists. Run: rulemetric auth login -e ${email}`);\n }\n throw err;\n }\n\n // Email confirmation is ON: no session yet. Tell the user exactly what to do\n // next instead of leaving them at a dead end.\n if (data.confirmationRequired || !data.accessToken || !data.refreshToken) {\n this.log(`Account created for ${data.email}.`);\n this.log('Check your email and click the confirmation link, then run:');\n this.log(` rulemetric auth login -e ${data.email}`);\n return;\n }\n\n // Confirmation OFF: a session came back \u2014 log in immediately.\n const expiresAt = data.expiresAt ?? new Date(Date.now() + 3600 * 1000).toISOString();\n saveToken({\n accessToken: data.accessToken,\n refreshToken: data.refreshToken,\n expiresAt,\n email: data.email,\n });\n saveEnvFile(data.accessToken, process.env.RULEMETRIC_API_URL);\n\n await bootstrapActiveOrg();\n await ensureDeviceApiKey(this.log.bind(this), this.warn.bind(this), this.config.version);\n void emitSetupEvent('auth_signup', {}, this.config.version);\n\n this.log(`Signed up and logged in as ${data.email}`);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAgBtB,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,OAAO,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,gBAAgB,CAAC;AAAA,IAC/D,UAAU,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,kDAAkD,CAAC;AAAA,EACtG;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,WAAU;AAE7C,QAAI,QAAQ,MAAM;AAClB,QAAI,WAAW,MAAM;AAErB,QAAI,CAAC,SAAS,CAAC,UAAU;AAGvB,UAAI,CAAC,QAAQ,MAAM,OAAO;AACxB,aAAK,MAAM,oFAAoF;AAAA,MACjG;AACA,YAAM,EAAE,OAAO,UAAU,eAAe,IAAI,MAAM,OAAO,mBAAmB;AAE5E,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,MAAM,EAAE,SAAS,SAAS,CAAC;AAAA,MAC3C;AACA,UAAI,CAAC,UAAU;AACb,mBAAW,MAAM,eAAe,EAAE,SAAS,0BAA0B,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AAGF,aAAO,MAAM,IAAoB,gBAAgB;AAAA,QAC/C,QAAQ;AAAA,QACR,MAAM,EAAE,OAAO,SAAS;AAAA,QACxB,WAAW;AAAA,MACb,CAAC;AAAA,IACH,SAAS,KAAK;AAEZ,UAAI,eAAe,YAAY,IAAI,eAAe,KAAK;AACrD,aAAK,MAAM,mBAAmB,KAAK,kDAAkD,KAAK,EAAE;AAAA,MAC9F;AACA,YAAM;AAAA,IACR;AAIA,QAAI,KAAK,wBAAwB,CAAC,KAAK,eAAe,CAAC,KAAK,cAAc;AACxE,WAAK,IAAI,uBAAuB,KAAK,KAAK,GAAG;AAC7C,WAAK,IAAI,6DAA6D;AACtE,WAAK,IAAI,8BAA8B,KAAK,KAAK,EAAE;AACnD;AAAA,IACF;AAGA,UAAM,YAAY,KAAK,aAAa,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,GAAI,EAAE,YAAY;AACnF,cAAU;AAAA,MACR,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB;AAAA,MACA,OAAO,KAAK;AAAA,IACd,CAAC;AACD,gBAAY,KAAK,aAAa,QAAQ,IAAI,kBAAkB;AAE5D,UAAM,mBAAmB;AACzB,UAAM,mBAAmB,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,OAAO;AACvF,SAAK,eAAe,eAAe,CAAC,GAAG,KAAK,OAAO,OAAO;AAE1D,SAAK,IAAI,8BAA8B,KAAK,KAAK,EAAE;AAAA,EACrD;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
} from "../../chunk-BZDKEQKU.js";
|
|
4
4
|
import {
|
|
5
5
|
BaseCommand
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
7
7
|
import "../../chunk-R56PH7YE.js";
|
|
8
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-GQNJO2P2.js";
|
|
9
|
+
import "../../chunk-37LN5O7M.js";
|
|
9
10
|
import "../../chunk-EKJ2CABV.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-ZUJBM6HE.js";
|
|
11
12
|
import {
|
|
12
13
|
getDefaultConfigDir,
|
|
13
14
|
isAuthenticated,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/auth/status.ts"],
|
|
4
4
|
"sourcesContent": ["import { BaseCommand } from '../../base-command.js';\nimport { loadToken, isAuthenticated, getDefaultConfigDir } from '../../lib/auth.js';\nimport { formatDate } from '../../lib/output.js';\n\nexport default class AuthStatus extends BaseCommand {\n static override description = 'Show current authentication status';\n\n static override examples = ['<%= config.bin %> auth status'];\n\n async run(): Promise<void> {\n await this.parse(AuthStatus);\n const token = loadToken();\n\n if (!token) {\n this.log('Not logged in. Run `rulemetric auth login` to authenticate.');\n return;\n }\n\n if (!isAuthenticated()) {\n this.log('Session expired. Run `rulemetric auth login` to re-authenticate.');\n return;\n }\n\n this.log(`Logged in as: ${token.email}`);\n this.log(`Session expires: ${formatDate(token.expiresAt)}`);\n this.log(`Config: ${getDefaultConfigDir()}`);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAIA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW,CAAC,+BAA+B;AAAA,EAE3D,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,WAAU;AAC3B,UAAM,QAAQ,UAAU;AAExB,QAAI,CAAC,OAAO;AACV,WAAK,IAAI,6DAA6D;AACtE;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB,GAAG;AACtB,WAAK,IAAI,kEAAkE;AAC3E;AAAA,IACF;AAEA,SAAK,IAAI,iBAAiB,MAAM,KAAK,EAAE;AACvC,SAAK,IAAI,oBAAoB,WAAW,MAAM,SAAS,CAAC,EAAE;AAC1D,SAAK,IAAI,WAAW,oBAAoB,CAAC,EAAE;AAAA,EAC7C;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,13 +5,14 @@ import {
|
|
|
5
5
|
} from "../../chunk-BZDKEQKU.js";
|
|
6
6
|
import {
|
|
7
7
|
BaseCommand
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
9
9
|
import "../../chunk-R56PH7YE.js";
|
|
10
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-GQNJO2P2.js";
|
|
11
|
+
import "../../chunk-37LN5O7M.js";
|
|
11
12
|
import "../../chunk-EKJ2CABV.js";
|
|
12
13
|
import {
|
|
13
14
|
apiGet
|
|
14
|
-
} from "../../chunk-
|
|
15
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
15
16
|
import "../../chunk-W2YERO7E.js";
|
|
16
17
|
import "../../chunk-NSBPE2FW.js";
|
|
17
18
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/catalog/index.ts"],
|
|
4
4
|
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiGet } from '../../lib/api-client.js';\nimport { formatDate, truncate, formatScope } from '../../lib/output.js';\n\ninterface CatalogInstruction {\n id: string;\n name: string;\n scope: string;\n badge: string | null;\n tags: string[];\n version: string;\n updatedAt: string;\n}\n\nexport default class Catalog extends BaseCommand {\n static override description = 'Browse the org instruction catalog';\n\n static override flags = {\n badge: Flags.string({ description: 'Filter by badge', options: ['recommended', 'required'] }),\n scope: Flags.string({ description: 'Filter by scope', options: ['org', 'team'] }),\n search: Flags.string({ description: 'Search by name or description' }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Catalog);\n this.requireAuth();\n\n const params = new URLSearchParams();\n if (flags.badge) params.set('badge', flags.badge);\n if (flags.scope) params.set('scope', flags.scope);\n if (flags.search) params.set('search', flags.search);\n\n const results = await apiGet<CatalogInstruction[]>(`/api/catalog?${params.toString()}`);\n\n if (results.length === 0) {\n this.log('No instructions found in catalog.');\n return;\n }\n\n for (const item of results) {\n const badgeStr = item.badge ? ` [${item.badge}]` : '';\n const tags = item.tags?.length ? ` (${item.tags.join(', ')})` : '';\n this.log(` ${truncate(item.name, 40)} \u2014 ${formatScope(item.scope)}${badgeStr} v${item.version}${tags} ${formatDate(item.updatedAt)}`);\n }\n\n this.log(`\\n${results.length} instruction(s) found.`);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAetB,IAAqB,UAArB,MAAqB,iBAAgB,YAAY;AAAA,EAC7C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,QAAQ;AAAA,IACpB,OAAO,MAAM,OAAO,EAAE,aAAa,mBAAmB,SAAS,CAAC,eAAe,UAAU,EAAE,CAAC;AAAA,IAC5F,OAAO,MAAM,OAAO,EAAE,aAAa,mBAAmB,SAAS,CAAC,OAAO,MAAM,EAAE,CAAC;AAAA,IAChF,QAAQ,MAAM,OAAO,EAAE,aAAa,gCAAgC,CAAC;AAAA,EACzE;AAAA,EAEA,MAAM,MAAqB;AACvB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,QAAO;AAC1C,SAAK,YAAY;AAEjB,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,MAAM,MAAO,QAAO,IAAI,SAAS,MAAM,KAAK;AAChD,QAAI,MAAM,MAAO,QAAO,IAAI,SAAS,MAAM,KAAK;AAChD,QAAI,MAAM,OAAQ,QAAO,IAAI,UAAU,MAAM,MAAM;AAEnD,UAAM,UAAU,MAAM,OAA6B,gBAAgB,OAAO,SAAS,CAAC,EAAE;AAEtF,QAAI,QAAQ,WAAW,GAAG;AACtB,WAAK,IAAI,mCAAmC;AAC5C;AAAA,IACJ;AAEA,eAAW,QAAQ,SAAS;AACxB,YAAM,WAAW,KAAK,QAAQ,KAAK,KAAK,KAAK,MAAM;AACnD,YAAM,OAAO,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM;AAChE,WAAK,IAAI,KAAK,SAAS,KAAK,MAAM,EAAE,CAAC,WAAM,YAAY,KAAK,KAAK,CAAC,GAAG,QAAQ,KAAK,KAAK,OAAO,GAAG,IAAI,KAAK,WAAW,KAAK,SAAS,CAAC,EAAE;AAAA,IAC1I;AAEA,SAAK,IAAI;AAAA,EAAK,QAAQ,MAAM,wBAAwB;AAAA,EACxD;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseCommand
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
4
4
|
import "../../chunk-R56PH7YE.js";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-GQNJO2P2.js";
|
|
6
|
+
import "../../chunk-37LN5O7M.js";
|
|
6
7
|
import "../../chunk-EKJ2CABV.js";
|
|
7
8
|
import {
|
|
8
9
|
apiPost
|
|
9
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
10
11
|
import "../../chunk-W2YERO7E.js";
|
|
11
12
|
import "../../chunk-NSBPE2FW.js";
|
|
12
13
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/catalog/recommend.ts"],
|
|
4
4
|
"sourcesContent": ["import { Args } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiPost } from '../../lib/api-client.js';\n\ninterface RecommendationResult {\n recommendations: Array<{ instructionId: string; score: number; reason: string }>;\n error: string | null;\n}\n\nexport default class CatalogRecommend extends BaseCommand {\n static override description = 'Get AI-powered instruction recommendations for a project';\n\n static override args = {\n projectId: Args.string({ description: 'ID of the project', required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(CatalogRecommend);\n this.requireAuth();\n\n this.log('Analyzing project and generating recommendations...\\n');\n\n const result = await apiPost<RecommendationResult>(`/api/projects/${args.projectId}/recommendations`, {});\n\n if (result.error) {\n this.warn(`Note: ${result.error}`);\n }\n\n if (result.recommendations.length === 0) {\n this.log('No recommendations found.');\n return;\n }\n\n for (const rec of result.recommendations) {\n this.log(` ${(rec.score * 100).toFixed(0)}% \u2014 ${rec.instructionId}`);\n this.log(` ${rec.reason}\\n`);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA,SAAS,YAAY;AASrB,IAAqB,mBAArB,MAAqB,0BAAyB,YAAY;AAAA,EACtD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACnB,WAAW,KAAK,OAAO,EAAE,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,MAAqB;AACvB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,iBAAgB;AAClD,SAAK,YAAY;AAEjB,SAAK,IAAI,uDAAuD;AAEhE,UAAM,SAAS,MAAM,QAA8B,iBAAiB,KAAK,SAAS,oBAAoB,CAAC,CAAC;AAExG,QAAI,OAAO,OAAO;AACd,WAAK,KAAK,SAAS,OAAO,KAAK,EAAE;AAAA,IACrC;AAEA,QAAI,OAAO,gBAAgB,WAAW,GAAG;AACrC,WAAK,IAAI,2BAA2B;AACpC;AAAA,IACJ;AAEA,eAAW,OAAO,OAAO,iBAAiB;AACtC,WAAK,IAAI,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,CAAC,YAAO,IAAI,aAAa,EAAE;AACpE,WAAK,IAAI,UAAU,IAAI,MAAM;AAAA,CAAI;AAAA,IACrC;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/commands/convert.js
CHANGED
|
@@ -3,14 +3,15 @@ import {
|
|
|
3
3
|
} from "../chunk-7NYKWN7U.js";
|
|
4
4
|
import {
|
|
5
5
|
BaseCommand
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-2HK7RGZB.js";
|
|
7
7
|
import "../chunk-R56PH7YE.js";
|
|
8
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-GQNJO2P2.js";
|
|
9
|
+
import "../chunk-37LN5O7M.js";
|
|
9
10
|
import "../chunk-EKJ2CABV.js";
|
|
10
11
|
import {
|
|
11
12
|
DEFAULT_API_URL,
|
|
12
13
|
apiPost
|
|
13
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-ZUJBM6HE.js";
|
|
14
15
|
import "../chunk-W2YERO7E.js";
|
|
15
16
|
import "../chunk-NSBPE2FW.js";
|
|
16
17
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/convert.ts"],
|
|
4
4
|
"sourcesContent": ["import * as fs from 'node:fs';\nimport { Args, Flags } from '@oclif/core';\nimport { BaseCommand } from '../base-command.js';\nimport { apiPost, DEFAULT_API_URL } from '../lib/api-client.js';\nimport { validateUuid } from '../lib/types.js';\nimport type { ConvertResult } from '../lib/types.js';\n\nexport default class Convert extends BaseCommand {\n static override description = 'Convert an instruction to a target format';\n\n static override examples = [\n '<%= config.bin %> convert <id> --format claude-md',\n '<%= config.bin %> convert <id> -f cursorrules --score',\n '<%= config.bin %> convert <id> -f copilot -o .github/copilot-instructions.md',\n ];\n\n static override args = {\n id: Args.string({ description: 'Instruction ID', required: true }),\n };\n\n static override flags = {\n format: Flags.string({\n char: 'f',\n description: 'Target format (e.g., claude-md, cursorrules)',\n required: true,\n }),\n score: Flags.boolean({\n description: 'Include quality score',\n default: false,\n }),\n output: Flags.string({\n char: 'o',\n description: 'Write output to file',\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Convert);\n this.requireAuth();\n validateUuid(args.id, 'instruction ID');\n\n const url = new URL(`${process.env.RULEMETRIC_API_URL ?? DEFAULT_API_URL}/api/instructions/${encodeURIComponent(args.id)}/convert`);\n url.searchParams.set('format', flags.format);\n url.searchParams.set('score', String(flags.score));\n\n const result = await apiPost<ConvertResult>(\n `${url.pathname}${url.search}`,\n {},\n );\n\n if (flags.output) {\n fs.writeFileSync(flags.output, result.output, 'utf-8');\n this.log(`Written to ${flags.output}`);\n } else {\n this.log(result.output);\n }\n\n if (flags.score && result.score) {\n this.log('');\n this.log(`Quality Score: ${result.score.overall}/100`);\n }\n\n if (result.warnings.length > 0) {\n this.warn(`Warnings: ${result.warnings.join(', ')}`);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA,YAAY,QAAQ;AACpB,SAAS,MAAM,aAAa;AAM5B,IAAqB,UAArB,MAAqB,iBAAgB,YAAY;AAAA,EAC/C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,OAAO;AAAA,IACrB,IAAI,KAAK,OAAO,EAAE,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,EACnE;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,QAAQ,MAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,OAAO,MAAM,QAAQ;AAAA,MACnB,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,IACD,QAAQ,MAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,QAAO;AAChD,SAAK,YAAY;AACjB,iBAAa,KAAK,IAAI,gBAAgB;AAEtC,UAAM,MAAM,IAAI,IAAI,GAAG,QAAQ,IAAI,sBAAsB,eAAe,qBAAqB,mBAAmB,KAAK,EAAE,CAAC,UAAU;AAClI,QAAI,aAAa,IAAI,UAAU,MAAM,MAAM;AAC3C,QAAI,aAAa,IAAI,SAAS,OAAO,MAAM,KAAK,CAAC;AAEjD,UAAM,SAAS,MAAM;AAAA,MACnB,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,QAAI,MAAM,QAAQ;AAChB,MAAG,iBAAc,MAAM,QAAQ,OAAO,QAAQ,OAAO;AACrD,WAAK,IAAI,cAAc,MAAM,MAAM,EAAE;AAAA,IACvC,OAAO;AACL,WAAK,IAAI,OAAO,MAAM;AAAA,IACxB;AAEA,QAAI,MAAM,SAAS,OAAO,OAAO;AAC/B,WAAK,IAAI,EAAE;AACX,WAAK,IAAI,kBAAkB,OAAO,MAAM,OAAO,MAAM;AAAA,IACvD;AAEA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,WAAK,KAAK,aAAa,OAAO,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACrD;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseCommand
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-2HK7RGZB.js";
|
|
4
4
|
import "../chunk-R56PH7YE.js";
|
|
5
|
-
import "../chunk-
|
|
5
|
+
import "../chunk-GQNJO2P2.js";
|
|
6
|
+
import "../chunk-37LN5O7M.js";
|
|
6
7
|
import "../chunk-EKJ2CABV.js";
|
|
7
8
|
import {
|
|
8
9
|
apiGet
|
|
9
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-ZUJBM6HE.js";
|
|
10
11
|
import "../chunk-W2YERO7E.js";
|
|
11
12
|
import "../chunk-NSBPE2FW.js";
|
|
12
13
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/converters.ts"],
|
|
4
4
|
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { printTable } from '@oclif/table';\nimport { BaseCommand } from '../base-command.js';\nimport { apiGet } from '../lib/api-client.js';\nimport type { ConverterEntry } from '../lib/types.js';\n\nexport default class Converters extends BaseCommand {\n static override description = 'List all supported conversion formats';\n\n static override examples = [\n '<%= config.bin %> converters',\n '<%= config.bin %> converters --tier 1',\n ];\n\n static override enableJsonFlag = true;\n\n static override flags = {\n tier: Flags.string({\n char: 't',\n description: 'Filter by tier',\n options: ['1', '2', '3'],\n }),\n };\n\n async run(): Promise<ConverterEntry[]> {\n const { flags } = await this.parse(Converters);\n this.requireAuth();\n\n let entries = await apiGet<ConverterEntry[]>('/api/converters');\n\n if (flags.tier) {\n const tierNum = Number.parseInt(flags.tier, 10);\n entries = entries.filter((e) => e.tier === tierNum);\n }\n\n printTable({\n data: entries.map((e) => ({\n ID: e.id,\n Name: e.name,\n Tier: String(e.tier),\n 'Output Path': e.outputPath,\n })),\n columns: ['ID', 'Name', 'Tier', 'Output Path'],\n });\n\n return entries;\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAK3B,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,iBAAiB;AAAA,EAEjC,OAAgB,QAAQ;AAAA,IACtB,MAAM,MAAM,OAAO;AAAA,MACjB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAiC;AACrC,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,WAAU;AAC7C,SAAK,YAAY;AAEjB,QAAI,UAAU,MAAM,OAAyB,iBAAiB;AAE9D,QAAI,MAAM,MAAM;AACd,YAAM,UAAU,OAAO,SAAS,MAAM,MAAM,EAAE;AAC9C,gBAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,IACpD;AAEA,eAAW;AAAA,MACT,MAAM,QAAQ,IAAI,CAAC,OAAO;AAAA,QACxB,IAAI,EAAE;AAAA,QACN,MAAM,EAAE;AAAA,QACR,MAAM,OAAO,EAAE,IAAI;AAAA,QACnB,eAAe,EAAE;AAAA,MACnB,EAAE;AAAA,MACF,SAAS,CAAC,MAAM,QAAQ,QAAQ,aAAa;AAAA,IAC/C,CAAC;AAED,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
} from "../../chunk-JFDWKLQC.js";
|
|
4
4
|
import {
|
|
5
5
|
BaseCommand
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
7
7
|
import "../../chunk-R56PH7YE.js";
|
|
8
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-GQNJO2P2.js";
|
|
9
|
+
import "../../chunk-37LN5O7M.js";
|
|
9
10
|
import "../../chunk-EKJ2CABV.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-ZUJBM6HE.js";
|
|
11
12
|
import "../../chunk-W2YERO7E.js";
|
|
12
13
|
import "../../chunk-NSBPE2FW.js";
|
|
13
14
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/crons/list.ts"],
|
|
4
4
|
"sourcesContent": ["import { printTable } from '@oclif/table';\nimport { BaseCommand } from '../../base-command.js';\n// Metadata-only import: pulling the full manual-tasks module here would drag the\n// heavy worker handlers (postgres/OTel/Sentry) into this command's bundle chunk\n// and crash a standalone npm install at load. See manual-tasks-meta.ts.\nimport { MANUAL_TASK_META } from '../../lib/manual-tasks-meta.js';\n\nexport default class CronsList extends BaseCommand {\n static override description = 'List manually-runnable maintenance tasks';\n\n static override examples = [\n '<%= config.bin %> crons list',\n ];\n\n async run(): Promise<void> {\n await this.parse(CronsList);\n printTable({\n data: MANUAL_TASK_META.map((t) => ({\n Name: t.name,\n 'Scheduled by': t.scheduledBy,\n Description: t.description,\n })),\n columns: ['Name', 'Scheduled by', 'Description'],\n });\n this.log('');\n this.log('Scheduled crons run in Supabase pg_cron \u2014 audit them with:');\n this.log(\" psql \\\"$DATABASE_URL\\\" -c 'select jobname, schedule, active from cron.job;'\");\n this.log('Run any task above on demand with: rulemetric crons run <name>');\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAO3B,IAAqB,YAArB,MAAqB,mBAAkB,YAAY;AAAA,EAC/C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,MAAqB;AACvB,UAAM,KAAK,MAAM,UAAS;AAC1B,eAAW;AAAA,MACP,MAAM,iBAAiB,IAAI,CAAC,OAAO;AAAA,QAC/B,MAAM,EAAE;AAAA,QACR,gBAAgB,EAAE;AAAA,QAClB,aAAa,EAAE;AAAA,MACnB,EAAE;AAAA,MACF,SAAS,CAAC,QAAQ,gBAAgB,aAAa;AAAA,IACnD,CAAC;AACD,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,iEAA4D;AACrE,SAAK,IAAI,6EAA+E;AACxF,SAAK,IAAI,gEAAgE;AAAA,EAC7E;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
} from "../../chunk-JFDWKLQC.js";
|
|
4
4
|
import {
|
|
5
5
|
BaseCommand
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
7
7
|
import "../../chunk-R56PH7YE.js";
|
|
8
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-GQNJO2P2.js";
|
|
9
|
+
import "../../chunk-37LN5O7M.js";
|
|
9
10
|
import "../../chunk-EKJ2CABV.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-ZUJBM6HE.js";
|
|
11
12
|
import "../../chunk-W2YERO7E.js";
|
|
12
13
|
import "../../chunk-NSBPE2FW.js";
|
|
13
14
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/crons/run.ts"],
|
|
4
4
|
"sourcesContent": ["import { Args, Flags } from '@oclif/core';\nimport { BaseCommand } from '../../base-command.js';\n// Metadata-only static import (dependency-free). The executor (runManualTask) and\n// its heavy db/OTel/Sentry handlers are lazy-imported inside run(), so loading\n// this command never pulls `postgres` into its bundle chunk and a standalone\n// npm install no longer crashes at module-load. See manual-tasks-meta.ts.\nimport { MANUAL_TASK_META } from '../../lib/manual-tasks-meta.js';\n\nexport default class CronsRun extends BaseCommand {\n static override description = 'Run a maintenance task synchronously, right now';\n\n static override examples = [\n '<%= config.bin %> crons run cron_check_changelog',\n '<%= config.bin %> crons run cron_suggest_instructions --quiet',\n ];\n\n static override args = {\n name: Args.string({\n description: 'Task name (run `rulemetric crons list` to see all)',\n required: true,\n }),\n };\n\n static override flags = {\n quiet: Flags.boolean({\n char: 'q',\n description: 'Suppress per-line log output; print summary only',\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(CronsRun);\n this.requireAuth();\n\n // Validate against the dependency-free metadata first, so an unknown task\n // never triggers the lazy load of the heavy executor below.\n const def = MANUAL_TASK_META.find((t) => t.name === args.name);\n if (!def) {\n this.error(`Unknown task: ${args.name}\\nRun \\`rulemetric crons list\\` to see available tasks.`);\n }\n\n // Lazy-load the executor only when a task is actually run. This keeps the\n // heavy handler chunk (postgres/OTel/Sentry) out of this command's static\n // import graph. Executing a task still needs the worker runtime\n // (DATABASE_URL + those deps); a standalone npm install lacks them, so\n // turn the raw MODULE_NOT_FOUND into an actionable message.\n let runManualTask: typeof import('../../lib/manual-tasks.js').runManualTask;\n try {\n ({ runManualTask } = await import('../../lib/manual-tasks.js'));\n } catch (err) {\n const code = (err as { code?: string } | null)?.code;\n if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') {\n this.error(\n `\\`crons run\\` needs the worker runtime, which isn't available in this install.\\n` +\n `These maintenance tasks connect to the database directly \u2014 run them from a full ` +\n `RuleMetric checkout with DATABASE_URL and the worker dependencies installed.`,\n );\n }\n throw err;\n }\n\n this.log(`\u25B6 Running ${def.name} \u2026`);\n const startedAt = Date.now();\n const result = await runManualTask(args.name);\n\n if (!flags.quiet) {\n for (const line of result.logs) {\n const prefix = line.level === 'error' || line.level === 'warn' ? `[${line.level}]` : '';\n this.log(` ${prefix} ${line.message}`);\n }\n }\n\n const seconds = ((result.durationMs ?? Date.now() - startedAt) / 1000).toFixed(1);\n if (result.ok) {\n this.log(`\u2713 ${def.name} completed in ${seconds}s (${result.logs.length} log line${result.logs.length === 1 ? '' : 's'})`);\n } else {\n this.error(`\u2717 ${def.name} failed after ${seconds}s: ${result.error}`);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA,SAAS,MAAM,aAAa;AAQ5B,IAAqB,WAArB,MAAqB,kBAAiB,YAAY;AAAA,EAC9C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACvB;AAAA,IACA;AAAA,EACJ;AAAA,EAEA,OAAgB,OAAO;AAAA,IACnB,MAAM,KAAK,OAAO;AAAA,MACd,aAAa;AAAA,MACb,UAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACpB,OAAO,MAAM,QAAQ;AAAA,MACjB,MAAM;AAAA,MACN,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,MAAqB;AACvB,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,SAAQ;AACjD,SAAK,YAAY;AAIjB,UAAM,MAAM,iBAAiB,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI;AAC7D,QAAI,CAAC,KAAK;AACN,WAAK,MAAM,iBAAiB,KAAK,IAAI;AAAA,sDAAyD;AAAA,IAClG;AAOA,QAAI;AACJ,QAAI;AACA,OAAC,EAAE,cAAc,IAAI,MAAM,OAAO,2BAA2B;AAAA,IACjE,SAAS,KAAK;AACV,YAAM,OAAQ,KAAkC;AAChD,UAAI,SAAS,0BAA0B,SAAS,oBAAoB;AAChE,aAAK;AAAA,UACD;AAAA;AAAA,QAGJ;AAAA,MACJ;AACA,YAAM;AAAA,IACV;AAEA,SAAK,IAAI,kBAAa,IAAI,IAAI,SAAI;AAClC,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,SAAS,MAAM,cAAc,KAAK,IAAI;AAE5C,QAAI,CAAC,MAAM,OAAO;AACd,iBAAW,QAAQ,OAAO,MAAM;AAC5B,cAAM,SAAS,KAAK,UAAU,WAAW,KAAK,UAAU,SAAS,IAAI,KAAK,KAAK,MAAM;AACrF,aAAK,IAAI,KAAK,MAAM,IAAI,KAAK,OAAO,EAAE;AAAA,MAC1C;AAAA,IACJ;AAEA,UAAM,YAAY,OAAO,cAAc,KAAK,IAAI,IAAI,aAAa,KAAM,QAAQ,CAAC;AAChF,QAAI,OAAO,IAAI;AACX,WAAK,IAAI,UAAK,IAAI,IAAI,iBAAiB,OAAO,MAAM,OAAO,KAAK,MAAM,YAAY,OAAO,KAAK,WAAW,IAAI,KAAK,GAAG,GAAG;AAAA,IAC5H,OAAO;AACH,WAAK,MAAM,UAAK,IAAI,IAAI,iBAAiB,OAAO,MAAM,OAAO,KAAK,EAAE;AAAA,IACxE;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseCommand
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-2HK7RGZB.js";
|
|
4
4
|
import "../chunk-R56PH7YE.js";
|
|
5
|
-
import "../chunk-
|
|
5
|
+
import "../chunk-GQNJO2P2.js";
|
|
6
|
+
import "../chunk-37LN5O7M.js";
|
|
6
7
|
import "../chunk-EKJ2CABV.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-ZUJBM6HE.js";
|
|
8
9
|
import "../chunk-W2YERO7E.js";
|
|
9
10
|
import "../chunk-NSBPE2FW.js";
|
|
10
11
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/dashboard.ts"],
|
|
4
4
|
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../base-command.js';\n\nexport default class Dashboard extends BaseCommand {\n static override description = 'Interactive TUI dashboard showing session analytics, outcomes, friction, and insights';\n\n static override examples = [\n '<%= config.bin %> dashboard',\n '<%= config.bin %> dashboard --period 30days',\n '<%= config.bin %> dashboard --launcher',\n ];\n\n static override flags = {\n period: Flags.string({\n char: 'p',\n default: 'week',\n options: ['today', 'week', '30days', 'month', 'all'],\n description: 'Initial time period',\n }),\n launcher: Flags.boolean({\n char: 'l',\n default: false,\n description: 'Open the launcher overlay immediately',\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Dashboard);\n const { renderDashboard } = await import('../dashboard/Dashboard.js');\n await renderDashboard(\n flags.period as 'today' | 'week' | '30days' | 'month' | 'all',\n { openLauncher: flags.launcher }\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAAA,SAAS,aAAa;AAGtB,IAAqB,YAArB,MAAqB,mBAAkB,YAAY;AAAA,EACjD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,QAAQ,MAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,SAAS,QAAQ,UAAU,SAAS,KAAK;AAAA,MACnD,aAAa;AAAA,IACf,CAAC;AAAA,IACD,UAAU,MAAM,QAAQ;AAAA,MACtB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,UAAS;AAC5C,UAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,2BAA2B;AACpE,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,EAAE,cAAc,MAAM,SAAS;AAAA,IACjC;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import {
|
|
2
|
+
diagnose,
|
|
3
|
+
isProxyBreakingNode
|
|
4
|
+
} from "../chunk-J6QFW4LD.js";
|
|
5
|
+
import {
|
|
6
|
+
GATEWAY_PORT,
|
|
7
|
+
MITMPROXY_PORT,
|
|
8
|
+
isGatewayListening
|
|
9
|
+
} from "../chunk-4LYCDS2N.js";
|
|
10
|
+
import "../chunk-7LVVKQMZ.js";
|
|
11
|
+
import "../chunk-5EDMGK3W.js";
|
|
12
|
+
import {
|
|
13
|
+
BaseCommand
|
|
14
|
+
} from "../chunk-2HK7RGZB.js";
|
|
15
|
+
import "../chunk-R56PH7YE.js";
|
|
16
|
+
import "../chunk-GQNJO2P2.js";
|
|
17
|
+
import "../chunk-37LN5O7M.js";
|
|
18
|
+
import "../chunk-EKJ2CABV.js";
|
|
19
|
+
import {
|
|
20
|
+
DEFAULT_API_URL
|
|
21
|
+
} from "../chunk-ZUJBM6HE.js";
|
|
22
|
+
import {
|
|
23
|
+
isAuthenticated,
|
|
24
|
+
loadEnvFileAuth
|
|
25
|
+
} from "../chunk-W2YERO7E.js";
|
|
26
|
+
import "../chunk-NSBPE2FW.js";
|
|
27
|
+
|
|
28
|
+
// src/commands/diagnostics.ts
|
|
29
|
+
import { spawnSync } from "node:child_process";
|
|
30
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
31
|
+
import { join } from "node:path";
|
|
32
|
+
var Diagnostics = class _Diagnostics extends BaseCommand {
|
|
33
|
+
static description = 'Diagnose capture / proxy / connectivity problems (e.g. a client-side "502 Bad Gateway")';
|
|
34
|
+
static examples = ["<%= config.bin %> diagnostics"];
|
|
35
|
+
baseUrl() {
|
|
36
|
+
return process.env.RULEMETRIC_API_URL ?? loadEnvFileAuth().apiUrl ?? DEFAULT_API_URL;
|
|
37
|
+
}
|
|
38
|
+
/** GET /health with the proxy bypassed — "is production reachable at all?" */
|
|
39
|
+
async checkDirect() {
|
|
40
|
+
const savedHttps = process.env.HTTPS_PROXY;
|
|
41
|
+
const savedHttp = process.env.HTTP_PROXY;
|
|
42
|
+
delete process.env.HTTPS_PROXY;
|
|
43
|
+
delete process.env.HTTP_PROXY;
|
|
44
|
+
const controller = new AbortController();
|
|
45
|
+
const timer = setTimeout(() => controller.abort(), 8e3);
|
|
46
|
+
try {
|
|
47
|
+
const res = await globalThis.fetch(`${this.baseUrl()}/health`, { signal: controller.signal });
|
|
48
|
+
return res.ok;
|
|
49
|
+
} catch {
|
|
50
|
+
return false;
|
|
51
|
+
} finally {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
if (savedHttps !== void 0) process.env.HTTPS_PROXY = savedHttps;
|
|
54
|
+
if (savedHttp !== void 0) process.env.HTTP_PROXY = savedHttp;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Resolve the configured proxy: env HTTPS_PROXY, else the project settings files. */
|
|
58
|
+
configuredProxy() {
|
|
59
|
+
if (process.env.HTTPS_PROXY) return process.env.HTTPS_PROXY;
|
|
60
|
+
for (const fileName of ["settings.local.json", "settings.json"]) {
|
|
61
|
+
const settingsPath = join(process.cwd(), ".claude", fileName);
|
|
62
|
+
if (!existsSync(settingsPath)) continue;
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
65
|
+
if (parsed.env?.HTTPS_PROXY) return parsed.env.HTTPS_PROXY;
|
|
66
|
+
} catch {
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/** GET /health THROUGH the proxy via curl (Node fetch won't honor HTTPS_PROXY). */
|
|
72
|
+
checkThroughProxy(proxyUrl) {
|
|
73
|
+
const res = spawnSync(
|
|
74
|
+
"curl",
|
|
75
|
+
["-sS", "-x", proxyUrl, "--max-time", "8", "-o", "/dev/null", "-w", "%{http_code}", `${this.baseUrl()}/health`],
|
|
76
|
+
{ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }
|
|
77
|
+
);
|
|
78
|
+
if (res.error || typeof res.stdout !== "string") return null;
|
|
79
|
+
return res.stdout.trim() === "200";
|
|
80
|
+
}
|
|
81
|
+
async run() {
|
|
82
|
+
await this.parse(_Diagnostics);
|
|
83
|
+
const nodeVersion = process.version;
|
|
84
|
+
const proxyUrl = this.configuredProxy();
|
|
85
|
+
const httpsProxySet = proxyUrl != null;
|
|
86
|
+
const [directApiOk, gatewayAlive, mitmproxyAlive] = await Promise.all([
|
|
87
|
+
this.checkDirect(),
|
|
88
|
+
isGatewayListening(GATEWAY_PORT),
|
|
89
|
+
isGatewayListening(MITMPROXY_PORT)
|
|
90
|
+
]);
|
|
91
|
+
const proxyPathOk = httpsProxySet && proxyUrl ? this.checkThroughProxy(proxyUrl) : null;
|
|
92
|
+
const line = (label, ok, detail) => {
|
|
93
|
+
const mark = ok === null ? "\u2013" : ok ? "[OK]" : "[!!]";
|
|
94
|
+
this.log(` ${mark} ${label.padEnd(22)} ${detail}`);
|
|
95
|
+
};
|
|
96
|
+
this.log("RuleMetric diagnostics");
|
|
97
|
+
this.log("");
|
|
98
|
+
line("Node", !isProxyBreakingNode(nodeVersion), `${nodeVersion}${isProxyBreakingNode(nodeVersion) ? " (< 20.11 \u2014 breaks the bundled proxy)" : ""}`);
|
|
99
|
+
line("API (direct)", directApiOk, `${this.baseUrl()}/health ${directApiOk ? "reachable" : "UNREACHABLE"}`);
|
|
100
|
+
line("Authenticated", isAuthenticated(), isAuthenticated() ? "yes" : "no \u2014 run `rulemetric auth login`");
|
|
101
|
+
line("Proxy configured", httpsProxySet ? true : null, httpsProxySet ? proxyUrl : "no HTTPS_PROXY set");
|
|
102
|
+
if (httpsProxySet) {
|
|
103
|
+
line("Gateway :" + GATEWAY_PORT, gatewayAlive, gatewayAlive ? "listening" : "NOT listening");
|
|
104
|
+
line("mitmproxy :" + MITMPROXY_PORT, mitmproxyAlive, mitmproxyAlive ? "listening" : "not listening (gateway should route direct)");
|
|
105
|
+
line("API (via proxy)", proxyPathOk, proxyPathOk === null ? "inconclusive (curl unavailable)" : proxyPathOk ? "reachable" : "FAILED \u2014 502/blocked through your proxy");
|
|
106
|
+
}
|
|
107
|
+
const d = diagnose({ nodeVersion, directApiOk, httpsProxySet, gatewayAlive, mitmproxyAlive, proxyPathOk });
|
|
108
|
+
this.log("");
|
|
109
|
+
const badge = d.severity === "ok" ? "[OK]" : d.severity === "warn" ? "[!!]" : "[XX]";
|
|
110
|
+
this.log(`${badge} ${d.headline}`);
|
|
111
|
+
for (const h of d.hints) this.log(` \u2022 ${h}`);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
export {
|
|
115
|
+
Diagnostics as default
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/diagnostics.ts"],
|
|
4
|
+
"sourcesContent": ["import { spawnSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { BaseCommand } from '../base-command.js';\nimport { DEFAULT_API_URL } from '../lib/api-client.js';\nimport { loadEnvFileAuth, isAuthenticated } from '../lib/auth.js';\nimport { isGatewayListening, GATEWAY_PORT, MITMPROXY_PORT } from '../lib/gateway-lifecycle.js';\nimport { diagnose, isProxyBreakingNode } from '../lib/diagnostics.js';\n\n/**\n * `rulemetric diagnostics` \u2014 a doctor for the \"capture isn't working / API\n * returns 502\" class. Its core move is comparing DIRECT reachability against\n * reachability THROUGH the local proxy: when direct works but the proxy path\n * fails, the user's own gateway (:8787) is producing the 502, not production.\n */\nexport default class Diagnostics extends BaseCommand {\n static override description =\n 'Diagnose capture / proxy / connectivity problems (e.g. a client-side \"502 Bad Gateway\")';\n\n static override examples = ['<%= config.bin %> diagnostics'];\n\n private baseUrl(): string {\n return process.env.RULEMETRIC_API_URL ?? loadEnvFileAuth().apiUrl ?? DEFAULT_API_URL;\n }\n\n /** GET /health with the proxy bypassed \u2014 \"is production reachable at all?\" */\n private async checkDirect(): Promise<boolean> {\n const savedHttps = process.env.HTTPS_PROXY;\n const savedHttp = process.env.HTTP_PROXY;\n delete process.env.HTTPS_PROXY;\n delete process.env.HTTP_PROXY;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 8000);\n try {\n const res = await globalThis.fetch(`${this.baseUrl()}/health`, { signal: controller.signal });\n return res.ok;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n if (savedHttps !== undefined) process.env.HTTPS_PROXY = savedHttps;\n if (savedHttp !== undefined) process.env.HTTP_PROXY = savedHttp;\n }\n }\n\n /** Resolve the configured proxy: env HTTPS_PROXY, else the project settings files. */\n private configuredProxy(): string | null {\n if (process.env.HTTPS_PROXY) return process.env.HTTPS_PROXY;\n // settings.local.json (machine-local, where current installs write the\n // proxy env) wins over the shared settings.json (legacy installs) \u2014\n // mirrors Claude Code's merge order.\n for (const fileName of ['settings.local.json', 'settings.json']) {\n const settingsPath = join(process.cwd(), '.claude', fileName);\n if (!existsSync(settingsPath)) continue;\n try {\n const parsed = JSON.parse(readFileSync(settingsPath, 'utf8')) as {\n env?: { HTTPS_PROXY?: string };\n };\n if (parsed.env?.HTTPS_PROXY) return parsed.env.HTTPS_PROXY;\n } catch {\n /* ignore malformed settings */\n }\n }\n return null;\n }\n\n /** GET /health THROUGH the proxy via curl (Node fetch won't honor HTTPS_PROXY). */\n private checkThroughProxy(proxyUrl: string): boolean | null {\n const res = spawnSync(\n 'curl',\n ['-sS', '-x', proxyUrl, '--max-time', '8', '-o', '/dev/null', '-w', '%{http_code}', `${this.baseUrl()}/health`],\n { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },\n );\n if (res.error || typeof res.stdout !== 'string') return null; // curl missing \u2192 inconclusive\n return res.stdout.trim() === '200';\n }\n\n async run(): Promise<void> {\n await this.parse(Diagnostics);\n\n const nodeVersion = process.version;\n const proxyUrl = this.configuredProxy();\n const httpsProxySet = proxyUrl != null;\n\n const [directApiOk, gatewayAlive, mitmproxyAlive] = await Promise.all([\n this.checkDirect(),\n isGatewayListening(GATEWAY_PORT),\n isGatewayListening(MITMPROXY_PORT),\n ]);\n const proxyPathOk = httpsProxySet && proxyUrl ? this.checkThroughProxy(proxyUrl) : null;\n\n const line = (label: string, ok: boolean | null, detail: string) => {\n const mark = ok === null ? '\u2013' : ok ? '[OK]' : '[!!]';\n this.log(` ${mark} ${label.padEnd(22)} ${detail}`);\n };\n\n this.log('RuleMetric diagnostics');\n this.log('');\n line('Node', !isProxyBreakingNode(nodeVersion), `${nodeVersion}${isProxyBreakingNode(nodeVersion) ? ' (< 20.11 \u2014 breaks the bundled proxy)' : ''}`);\n line('API (direct)', directApiOk, `${this.baseUrl()}/health ${directApiOk ? 'reachable' : 'UNREACHABLE'}`);\n line('Authenticated', isAuthenticated(), isAuthenticated() ? 'yes' : 'no \u2014 run `rulemetric auth login`');\n line('Proxy configured', httpsProxySet ? true : null, httpsProxySet ? (proxyUrl as string) : 'no HTTPS_PROXY set');\n if (httpsProxySet) {\n line('Gateway :' + GATEWAY_PORT, gatewayAlive, gatewayAlive ? 'listening' : 'NOT listening');\n line('mitmproxy :' + MITMPROXY_PORT, mitmproxyAlive, mitmproxyAlive ? 'listening' : 'not listening (gateway should route direct)');\n line('API (via proxy)', proxyPathOk, proxyPathOk === null ? 'inconclusive (curl unavailable)' : proxyPathOk ? 'reachable' : 'FAILED \u2014 502/blocked through your proxy');\n }\n\n const d = diagnose({ nodeVersion, directApiOk, httpsProxySet, gatewayAlive, mitmproxyAlive, proxyPathOk });\n this.log('');\n const badge = d.severity === 'ok' ? '[OK]' : d.severity === 'warn' ? '[!!]' : '[XX]';\n this.log(`${badge} ${d.headline}`);\n for (const h of d.hints) this.log(` \u2022 ${h}`);\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,YAAY,oBAAoB;AACzC,SAAS,YAAY;AAarB,IAAqB,cAArB,MAAqB,qBAAoB,YAAY;AAAA,EACnD,OAAgB,cACd;AAAA,EAEF,OAAgB,WAAW,CAAC,+BAA+B;AAAA,EAEnD,UAAkB;AACxB,WAAO,QAAQ,IAAI,sBAAsB,gBAAgB,EAAE,UAAU;AAAA,EACvE;AAAA;AAAA,EAGA,MAAc,cAAgC;AAC5C,UAAM,aAAa,QAAQ,IAAI;AAC/B,UAAM,YAAY,QAAQ,IAAI;AAC9B,WAAO,QAAQ,IAAI;AACnB,WAAO,QAAQ,IAAI;AACnB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,GAAI;AACvD,QAAI;AACF,YAAM,MAAM,MAAM,WAAW,MAAM,GAAG,KAAK,QAAQ,CAAC,WAAW,EAAE,QAAQ,WAAW,OAAO,CAAC;AAC5F,aAAO,IAAI;AAAA,IACb,QAAQ;AACN,aAAO;AAAA,IACT,UAAE;AACA,mBAAa,KAAK;AAClB,UAAI,eAAe,OAAW,SAAQ,IAAI,cAAc;AACxD,UAAI,cAAc,OAAW,SAAQ,IAAI,aAAa;AAAA,IACxD;AAAA,EACF;AAAA;AAAA,EAGQ,kBAAiC;AACvC,QAAI,QAAQ,IAAI,YAAa,QAAO,QAAQ,IAAI;AAIhD,eAAW,YAAY,CAAC,uBAAuB,eAAe,GAAG;AAC/D,YAAM,eAAe,KAAK,QAAQ,IAAI,GAAG,WAAW,QAAQ;AAC5D,UAAI,CAAC,WAAW,YAAY,EAAG;AAC/B,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;AAG5D,YAAI,OAAO,KAAK,YAAa,QAAO,OAAO,IAAI;AAAA,MACjD,QAAQ;AAAA,MAER;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,kBAAkB,UAAkC;AAC1D,UAAM,MAAM;AAAA,MACV;AAAA,MACA,CAAC,OAAO,MAAM,UAAU,cAAc,KAAK,MAAM,aAAa,MAAM,gBAAgB,GAAG,KAAK,QAAQ,CAAC,SAAS;AAAA,MAC9G,EAAE,UAAU,QAAQ,OAAO,CAAC,UAAU,QAAQ,QAAQ,EAAE;AAAA,IAC1D;AACA,QAAI,IAAI,SAAS,OAAO,IAAI,WAAW,SAAU,QAAO;AACxD,WAAO,IAAI,OAAO,KAAK,MAAM;AAAA,EAC/B;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,YAAW;AAE5B,UAAM,cAAc,QAAQ;AAC5B,UAAM,WAAW,KAAK,gBAAgB;AACtC,UAAM,gBAAgB,YAAY;AAElC,UAAM,CAAC,aAAa,cAAc,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpE,KAAK,YAAY;AAAA,MACjB,mBAAmB,YAAY;AAAA,MAC/B,mBAAmB,cAAc;AAAA,IACnC,CAAC;AACD,UAAM,cAAc,iBAAiB,WAAW,KAAK,kBAAkB,QAAQ,IAAI;AAEnF,UAAM,OAAO,CAAC,OAAe,IAAoB,WAAmB;AAClE,YAAM,OAAO,OAAO,OAAO,WAAM,KAAK,SAAS;AAC/C,WAAK,IAAI,KAAK,IAAI,IAAI,MAAM,OAAO,EAAE,CAAC,IAAI,MAAM,EAAE;AAAA,IACpD;AAEA,SAAK,IAAI,wBAAwB;AACjC,SAAK,IAAI,EAAE;AACX,SAAK,QAAQ,CAAC,oBAAoB,WAAW,GAAG,GAAG,WAAW,GAAG,oBAAoB,WAAW,IAAI,+CAA0C,EAAE,EAAE;AAClJ,SAAK,gBAAgB,aAAa,GAAG,KAAK,QAAQ,CAAC,WAAW,cAAc,cAAc,aAAa,EAAE;AACzG,SAAK,iBAAiB,gBAAgB,GAAG,gBAAgB,IAAI,QAAQ,uCAAkC;AACvG,SAAK,oBAAoB,gBAAgB,OAAO,MAAM,gBAAiB,WAAsB,oBAAoB;AACjH,QAAI,eAAe;AACjB,WAAK,cAAc,cAAc,cAAc,eAAe,cAAc,eAAe;AAC3F,WAAK,gBAAgB,gBAAgB,gBAAgB,iBAAiB,cAAc,6CAA6C;AACjI,WAAK,mBAAmB,aAAa,gBAAgB,OAAO,oCAAoC,cAAc,cAAc,8CAAyC;AAAA,IACvK;AAEA,UAAM,IAAI,SAAS,EAAE,aAAa,aAAa,eAAe,cAAc,gBAAgB,YAAY,CAAC;AACzG,SAAK,IAAI,EAAE;AACX,UAAM,QAAQ,EAAE,aAAa,OAAO,SAAS,EAAE,aAAa,SAAS,SAAS;AAC9E,SAAK,IAAI,GAAG,KAAK,IAAI,EAAE,QAAQ,EAAE;AACjC,eAAW,KAAK,EAAE,MAAO,MAAK,IAAI,aAAQ,CAAC,EAAE;AAAA,EAC/C;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseCommand
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
4
4
|
import "../../chunk-R56PH7YE.js";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-GQNJO2P2.js";
|
|
6
|
+
import "../../chunk-37LN5O7M.js";
|
|
6
7
|
import "../../chunk-EKJ2CABV.js";
|
|
7
8
|
import {
|
|
8
9
|
apiPost
|
|
9
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
10
11
|
import "../../chunk-W2YERO7E.js";
|
|
11
12
|
import "../../chunk-NSBPE2FW.js";
|
|
12
13
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/eval-targets/create.ts"],
|
|
4
4
|
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { readFileSync } from 'node:fs';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiPost } from '../../lib/api-client.js';\n\nexport default class EvalTargetCreate extends BaseCommand {\n static override description = 'Create an eval target (instruction, skill, prompt, or plan to test)';\n\n static override examples = [\n '<%= config.bin %> eval-targets create --name my-rules --type instruction --file ./CLAUDE.md',\n '<%= config.bin %> eval-targets create --name my-prompt --type prompt --content \"Always use TypeScript\"',\n ];\n\n static override flags = {\n name: Flags.string({ char: 'n', description: 'Name for the eval target', required: true }),\n type: Flags.string({ char: 't', description: 'Target type', options: ['instruction', 'skill', 'prompt', 'plan'], required: true }),\n file: Flags.string({ char: 'f', description: 'Path to content file' }),\n content: Flags.string({ char: 'c', description: 'Content string (alternative to --file)' }),\n description: Flags.string({ char: 'd', description: 'Description of the target', default: '' }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(EvalTargetCreate);\n this.requireAuth();\n\n let content: string;\n if (flags.file) {\n content = readFileSync(flags.file, 'utf-8');\n } else if (flags.content) {\n content = flags.content;\n } else {\n this.error('Provide either --file or --content');\n }\n\n const result = await apiPost<{ id: string; name: string; version: number }>('/api/eval-targets', {\n name: flags.name,\n type: flags.type,\n content,\n description: flags.description,\n });\n\n this.log(`Created eval target: ${result.name} (${result.id}) v${result.version}`);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAI7B,IAAqB,mBAArB,MAAqB,0BAAyB,YAAY;AAAA,EACxD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,4BAA4B,UAAU,KAAK,CAAC;AAAA,IACzF,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,eAAe,SAAS,CAAC,eAAe,SAAS,UAAU,MAAM,GAAG,UAAU,KAAK,CAAC;AAAA,IACjI,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,uBAAuB,CAAC;AAAA,IACrE,SAAS,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,yCAAyC,CAAC;AAAA,IAC1F,aAAa,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,6BAA6B,SAAS,GAAG,CAAC;AAAA,EAChG;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,iBAAgB;AACnD,SAAK,YAAY;AAEjB,QAAI;AACJ,QAAI,MAAM,MAAM;AACd,gBAAU,aAAa,MAAM,MAAM,OAAO;AAAA,IAC5C,WAAW,MAAM,SAAS;AACxB,gBAAU,MAAM;AAAA,IAClB,OAAO;AACL,WAAK,MAAM,oCAAoC;AAAA,IACjD;AAEA,UAAM,SAAS,MAAM,QAAuD,qBAAqB;AAAA,MAC/F,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ;AAAA,MACA,aAAa,MAAM;AAAA,IACrB,CAAC;AAED,SAAK,IAAI,wBAAwB,OAAO,IAAI,KAAK,OAAO,EAAE,MAAM,OAAO,OAAO,EAAE;AAAA,EAClF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -4,13 +4,14 @@ import {
|
|
|
4
4
|
} from "../../chunk-BZDKEQKU.js";
|
|
5
5
|
import {
|
|
6
6
|
BaseCommand
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-2HK7RGZB.js";
|
|
8
8
|
import "../../chunk-R56PH7YE.js";
|
|
9
|
-
import "../../chunk-
|
|
9
|
+
import "../../chunk-GQNJO2P2.js";
|
|
10
|
+
import "../../chunk-37LN5O7M.js";
|
|
10
11
|
import "../../chunk-EKJ2CABV.js";
|
|
11
12
|
import {
|
|
12
13
|
apiGet
|
|
13
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-ZUJBM6HE.js";
|
|
14
15
|
import "../../chunk-W2YERO7E.js";
|
|
15
16
|
import "../../chunk-NSBPE2FW.js";
|
|
16
17
|
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/commands/eval-targets/list.ts"],
|
|
4
4
|
"sourcesContent": ["import { Flags } from '@oclif/core';\nimport { printTable } from '@oclif/table';\nimport { BaseCommand } from '../../base-command.js';\nimport { apiGet } from '../../lib/api-client.js';\nimport { formatDate, truncate } from '../../lib/output.js';\n\ninterface EvalTarget {\n id: string;\n name: string;\n type: string;\n version: number;\n description: string;\n updatedAt: string;\n}\n\nexport default class EvalTargetList extends BaseCommand {\n static override description = 'List eval targets';\n\n static override examples = [\n '<%= config.bin %> eval-targets list',\n '<%= config.bin %> eval-targets list --type instruction',\n ];\n\n static override flags = {\n type: Flags.string({ char: 't', description: 'Filter by type', options: ['instruction', 'skill', 'prompt', 'plan'] }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(EvalTargetList);\n this.requireAuth();\n\n const query = flags.type ? `?type=${flags.type}` : '';\n const results = await apiGet<EvalTarget[]>(`/api/eval-targets${query}`);\n\n if (results.length === 0) {\n this.log('No eval targets found. Create one with `rulemetric eval-targets create`.');\n return;\n }\n\n printTable({\n data: results.map((t) => ({\n Name: truncate(t.name, 30),\n Type: t.type,\n Version: `v${t.version}`,\n Description: truncate(t.description, 40),\n Updated: formatDate(t.updatedAt),\n })),\n columns: ['Name', 'Type', 'Version', 'Description', 'Updated'],\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAc3B,IAAqB,iBAArB,MAAqB,wBAAuB,YAAY;AAAA,EACtD,OAAgB,cAAc;AAAA,EAE9B,OAAgB,WAAW;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAAA,EAEA,OAAgB,QAAQ;AAAA,IACtB,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,aAAa,kBAAkB,SAAS,CAAC,eAAe,SAAS,UAAU,MAAM,EAAE,CAAC;AAAA,EACtH;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,eAAc;AACjD,SAAK,YAAY;AAEjB,UAAM,QAAQ,MAAM,OAAO,SAAS,MAAM,IAAI,KAAK;AACnD,UAAM,UAAU,MAAM,OAAqB,oBAAoB,KAAK,EAAE;AAEtE,QAAI,QAAQ,WAAW,GAAG;AACxB,WAAK,IAAI,0EAA0E;AACnF;AAAA,IACF;AAEA,eAAW;AAAA,MACT,MAAM,QAAQ,IAAI,CAAC,OAAO;AAAA,QACxB,MAAM,SAAS,EAAE,MAAM,EAAE;AAAA,QACzB,MAAM,EAAE;AAAA,QACR,SAAS,IAAI,EAAE,OAAO;AAAA,QACtB,aAAa,SAAS,EAAE,aAAa,EAAE;AAAA,QACvC,SAAS,WAAW,EAAE,SAAS;AAAA,MACjC,EAAE;AAAA,MACF,SAAS,CAAC,QAAQ,QAAQ,WAAW,eAAe,SAAS;AAAA,IAC/D,CAAC;AAAA,EACH;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|