@rulemetric/cli 0.1.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/bin/dev.js +3 -0
- package/bin/run.js +3 -0
- package/dist/base-command.d.ts +12 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +37 -0
- package/dist/base-command.js.map +1 -0
- package/dist/commands/auth/create-key.d.ts +11 -0
- package/dist/commands/auth/create-key.d.ts.map +1 -0
- package/dist/commands/auth/create-key.js +34 -0
- package/dist/commands/auth/create-key.js.map +1 -0
- package/dist/commands/auth/login.d.ts +11 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +40 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +7 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +13 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/revoke-key.d.ts +10 -0
- package/dist/commands/auth/revoke-key.d.ts.map +1 -0
- package/dist/commands/auth/revoke-key.js +18 -0
- package/dist/commands/auth/revoke-key.js.map +1 -0
- package/dist/commands/auth/status.d.ts +7 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +23 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/catalog/index.d.ts +11 -0
- package/dist/commands/catalog/index.d.ts.map +1 -0
- package/dist/commands/catalog/index.js +35 -0
- package/dist/commands/catalog/index.js.map +1 -0
- package/dist/commands/catalog/recommend.d.ts +9 -0
- package/dist/commands/catalog/recommend.d.ts.map +1 -0
- package/dist/commands/catalog/recommend.js +27 -0
- package/dist/commands/catalog/recommend.js.map +1 -0
- package/dist/commands/convert.d.ts +15 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +55 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/converters.d.ts +12 -0
- package/dist/commands/converters.d.ts.map +1 -0
- package/dist/commands/converters.js +39 -0
- package/dist/commands/converters.js.map +1 -0
- package/dist/commands/dashboard.d.ts +10 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +24 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/eval-targets/create.d.ts +14 -0
- package/dist/commands/eval-targets/create.d.ts.map +1 -0
- package/dist/commands/eval-targets/create.js +40 -0
- package/dist/commands/eval-targets/create.js.map +1 -0
- package/dist/commands/eval-targets/list.d.ts +10 -0
- package/dist/commands/eval-targets/list.d.ts.map +1 -0
- package/dist/commands/eval-targets/list.js +36 -0
- package/dist/commands/eval-targets/list.js.map +1 -0
- package/dist/commands/evals/benchmark.d.ts +13 -0
- package/dist/commands/evals/benchmark.d.ts.map +1 -0
- package/dist/commands/evals/benchmark.js +53 -0
- package/dist/commands/evals/benchmark.js.map +1 -0
- package/dist/commands/evals/compare.d.ts +15 -0
- package/dist/commands/evals/compare.d.ts.map +1 -0
- package/dist/commands/evals/compare.js +101 -0
- package/dist/commands/evals/compare.js.map +1 -0
- package/dist/commands/evals/create.d.ts +17 -0
- package/dist/commands/evals/create.d.ts.map +1 -0
- package/dist/commands/evals/create.js +52 -0
- package/dist/commands/evals/create.js.map +1 -0
- package/dist/commands/evals/listen.d.ts +11 -0
- package/dist/commands/evals/listen.d.ts.map +1 -0
- package/dist/commands/evals/listen.js +54 -0
- package/dist/commands/evals/listen.js.map +1 -0
- package/dist/commands/evals/optimize-description.d.ts +22 -0
- package/dist/commands/evals/optimize-description.d.ts.map +1 -0
- package/dist/commands/evals/optimize-description.js +269 -0
- package/dist/commands/evals/optimize-description.js.map +1 -0
- package/dist/commands/evals/optimize.d.ts +22 -0
- package/dist/commands/evals/optimize.d.ts.map +1 -0
- package/dist/commands/evals/optimize.js +200 -0
- package/dist/commands/evals/optimize.js.map +1 -0
- package/dist/commands/evals/run.d.ts +21 -0
- package/dist/commands/evals/run.d.ts.map +1 -0
- package/dist/commands/evals/run.js +168 -0
- package/dist/commands/evals/run.js.map +1 -0
- package/dist/commands/gateway/ensure.d.ts +7 -0
- package/dist/commands/gateway/ensure.d.ts.map +1 -0
- package/dist/commands/gateway/ensure.js +20 -0
- package/dist/commands/gateway/ensure.js.map +1 -0
- package/dist/commands/hooks/install.d.ts +16 -0
- package/dist/commands/hooks/install.d.ts.map +1 -0
- package/dist/commands/hooks/install.js +248 -0
- package/dist/commands/hooks/install.js.map +1 -0
- package/dist/commands/hooks/run.d.ts +11 -0
- package/dist/commands/hooks/run.d.ts.map +1 -0
- package/dist/commands/hooks/run.js +56 -0
- package/dist/commands/hooks/run.js.map +1 -0
- package/dist/commands/hooks/uninstall.d.ts +7 -0
- package/dist/commands/hooks/uninstall.d.ts.map +1 -0
- package/dist/commands/hooks/uninstall.js +88 -0
- package/dist/commands/hooks/uninstall.js.map +1 -0
- package/dist/commands/import.d.ts +17 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +55 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/insights/sync.d.ts +17 -0
- package/dist/commands/insights/sync.d.ts.map +1 -0
- package/dist/commands/insights/sync.js +477 -0
- package/dist/commands/insights/sync.js.map +1 -0
- package/dist/commands/instructions/create.d.ts +17 -0
- package/dist/commands/instructions/create.d.ts.map +1 -0
- package/dist/commands/instructions/create.js +60 -0
- package/dist/commands/instructions/create.js.map +1 -0
- package/dist/commands/instructions/delete.d.ts +13 -0
- package/dist/commands/instructions/delete.d.ts.map +1 -0
- package/dist/commands/instructions/delete.js +37 -0
- package/dist/commands/instructions/delete.js.map +1 -0
- package/dist/commands/instructions/fork.d.ts +10 -0
- package/dist/commands/instructions/fork.d.ts.map +1 -0
- package/dist/commands/instructions/fork.js +19 -0
- package/dist/commands/instructions/fork.js.map +1 -0
- package/dist/commands/instructions/get.d.ts +15 -0
- package/dist/commands/instructions/get.d.ts.map +1 -0
- package/dist/commands/instructions/get.js +50 -0
- package/dist/commands/instructions/get.js.map +1 -0
- package/dist/commands/instructions/list.d.ts +12 -0
- package/dist/commands/instructions/list.d.ts.map +1 -0
- package/dist/commands/instructions/list.js +47 -0
- package/dist/commands/instructions/list.js.map +1 -0
- package/dist/commands/instructions/promote.d.ts +14 -0
- package/dist/commands/instructions/promote.d.ts.map +1 -0
- package/dist/commands/instructions/promote.js +27 -0
- package/dist/commands/instructions/promote.js.map +1 -0
- package/dist/commands/instructions/pull.d.ts +9 -0
- package/dist/commands/instructions/pull.d.ts.map +1 -0
- package/dist/commands/instructions/pull.js +22 -0
- package/dist/commands/instructions/pull.js.map +1 -0
- package/dist/commands/instructions/upstream.d.ts +9 -0
- package/dist/commands/instructions/upstream.d.ts.map +1 -0
- package/dist/commands/instructions/upstream.js +22 -0
- package/dist/commands/instructions/upstream.js.map +1 -0
- package/dist/commands/instructions/versions.d.ts +12 -0
- package/dist/commands/instructions/versions.d.ts.map +1 -0
- package/dist/commands/instructions/versions.js +34 -0
- package/dist/commands/instructions/versions.js.map +1 -0
- package/dist/commands/packs/add-instruction.d.ts +11 -0
- package/dist/commands/packs/add-instruction.d.ts.map +1 -0
- package/dist/commands/packs/add-instruction.js +22 -0
- package/dist/commands/packs/add-instruction.js.map +1 -0
- package/dist/commands/packs/apply.d.ts +13 -0
- package/dist/commands/packs/apply.d.ts.map +1 -0
- package/dist/commands/packs/apply.js +24 -0
- package/dist/commands/packs/apply.js.map +1 -0
- package/dist/commands/packs/create.d.ts +13 -0
- package/dist/commands/packs/create.d.ts.map +1 -0
- package/dist/commands/packs/create.js +35 -0
- package/dist/commands/packs/create.js.map +1 -0
- package/dist/commands/packs/fork.d.ts +10 -0
- package/dist/commands/packs/fork.d.ts.map +1 -0
- package/dist/commands/packs/fork.js +19 -0
- package/dist/commands/packs/fork.js.map +1 -0
- package/dist/commands/packs/get.d.ts +10 -0
- package/dist/commands/packs/get.d.ts.map +1 -0
- package/dist/commands/packs/get.js +36 -0
- package/dist/commands/packs/get.js.map +1 -0
- package/dist/commands/packs/list.d.ts +22 -0
- package/dist/commands/packs/list.d.ts.map +1 -0
- package/dist/commands/packs/list.js +48 -0
- package/dist/commands/packs/list.js.map +1 -0
- package/dist/commands/packs/remove-instruction.d.ts +11 -0
- package/dist/commands/packs/remove-instruction.d.ts.map +1 -0
- package/dist/commands/packs/remove-instruction.js +20 -0
- package/dist/commands/packs/remove-instruction.js.map +1 -0
- package/dist/commands/proxy/env.d.ts +14 -0
- package/dist/commands/proxy/env.d.ts.map +1 -0
- package/dist/commands/proxy/env.js +118 -0
- package/dist/commands/proxy/env.js.map +1 -0
- package/dist/commands/proxy/logs.d.ts +11 -0
- package/dist/commands/proxy/logs.d.ts.map +1 -0
- package/dist/commands/proxy/logs.js +75 -0
- package/dist/commands/proxy/logs.js.map +1 -0
- package/dist/commands/proxy/setup.d.ts +23 -0
- package/dist/commands/proxy/setup.d.ts.map +1 -0
- package/dist/commands/proxy/setup.js +391 -0
- package/dist/commands/proxy/setup.js.map +1 -0
- package/dist/commands/proxy/start.d.ts +17 -0
- package/dist/commands/proxy/start.d.ts.map +1 -0
- package/dist/commands/proxy/start.js +306 -0
- package/dist/commands/proxy/start.js.map +1 -0
- package/dist/commands/proxy/status.d.ts +7 -0
- package/dist/commands/proxy/status.d.ts.map +1 -0
- package/dist/commands/proxy/status.js +65 -0
- package/dist/commands/proxy/status.js.map +1 -0
- package/dist/commands/proxy/stop.d.ts +8 -0
- package/dist/commands/proxy/stop.d.ts.map +1 -0
- package/dist/commands/proxy/stop.js +77 -0
- package/dist/commands/proxy/stop.js.map +1 -0
- package/dist/commands/service/install.d.ts +17 -0
- package/dist/commands/service/install.d.ts.map +1 -0
- package/dist/commands/service/install.js +383 -0
- package/dist/commands/service/install.js.map +1 -0
- package/dist/commands/service/install.test.d.ts +2 -0
- package/dist/commands/service/install.test.d.ts.map +1 -0
- package/dist/commands/service/install.test.js +345 -0
- package/dist/commands/service/install.test.js.map +1 -0
- package/dist/commands/service/status.d.ts +6 -0
- package/dist/commands/service/status.d.ts.map +1 -0
- package/dist/commands/service/status.js +112 -0
- package/dist/commands/service/status.js.map +1 -0
- package/dist/commands/service/uninstall.d.ts +6 -0
- package/dist/commands/service/uninstall.d.ts.map +1 -0
- package/dist/commands/service/uninstall.js +84 -0
- package/dist/commands/service/uninstall.js.map +1 -0
- package/dist/commands/sessions/analyze.d.ts +10 -0
- package/dist/commands/sessions/analyze.d.ts.map +1 -0
- package/dist/commands/sessions/analyze.js +26 -0
- package/dist/commands/sessions/analyze.js.map +1 -0
- package/dist/commands/sessions/end.d.ts +9 -0
- package/dist/commands/sessions/end.d.ts.map +1 -0
- package/dist/commands/sessions/end.js +82 -0
- package/dist/commands/sessions/end.js.map +1 -0
- package/dist/commands/sessions/import.d.ts +13 -0
- package/dist/commands/sessions/import.d.ts.map +1 -0
- package/dist/commands/sessions/import.js +28 -0
- package/dist/commands/sessions/import.js.map +1 -0
- package/dist/commands/sessions/list.d.ts +11 -0
- package/dist/commands/sessions/list.d.ts.map +1 -0
- package/dist/commands/sessions/list.js +34 -0
- package/dist/commands/sessions/list.js.map +1 -0
- package/dist/commands/sessions/start.d.ts +11 -0
- package/dist/commands/sessions/start.d.ts.map +1 -0
- package/dist/commands/sessions/start.js +83 -0
- package/dist/commands/sessions/start.js.map +1 -0
- package/dist/commands/skills/install.d.ts +15 -0
- package/dist/commands/skills/install.d.ts.map +1 -0
- package/dist/commands/skills/install.js +91 -0
- package/dist/commands/skills/install.js.map +1 -0
- package/dist/commands/skills/list.d.ts +11 -0
- package/dist/commands/skills/list.d.ts.map +1 -0
- package/dist/commands/skills/list.js +47 -0
- package/dist/commands/skills/list.js.map +1 -0
- package/dist/commands/skills/search.d.ts +17 -0
- package/dist/commands/skills/search.d.ts.map +1 -0
- package/dist/commands/skills/search.js +56 -0
- package/dist/commands/skills/search.js.map +1 -0
- package/dist/commands/skills/update.d.ts +7 -0
- package/dist/commands/skills/update.d.ts.map +1 -0
- package/dist/commands/skills/update.js +30 -0
- package/dist/commands/skills/update.js.map +1 -0
- package/dist/dashboard/Dashboard.d.ts +3 -0
- package/dist/dashboard/Dashboard.d.ts.map +1 -0
- package/dist/dashboard/Dashboard.js +132 -0
- package/dist/dashboard/Dashboard.js.map +1 -0
- package/dist/dashboard/data.d.ts +11 -0
- package/dist/dashboard/data.d.ts.map +1 -0
- package/dist/dashboard/data.js +137 -0
- package/dist/dashboard/data.js.map +1 -0
- package/dist/dashboard/panels/friction.d.ts +7 -0
- package/dist/dashboard/panels/friction.d.ts.map +1 -0
- package/dist/dashboard/panels/friction.js +22 -0
- package/dist/dashboard/panels/friction.js.map +1 -0
- package/dist/dashboard/panels/insights.d.ts +8 -0
- package/dist/dashboard/panels/insights.d.ts.map +1 -0
- package/dist/dashboard/panels/insights.js +109 -0
- package/dist/dashboard/panels/insights.js.map +1 -0
- package/dist/dashboard/panels/instructions.d.ts +9 -0
- package/dist/dashboard/panels/instructions.d.ts.map +1 -0
- package/dist/dashboard/panels/instructions.js +17 -0
- package/dist/dashboard/panels/instructions.js.map +1 -0
- package/dist/dashboard/panels/outcomes.d.ts +7 -0
- package/dist/dashboard/panels/outcomes.d.ts.map +1 -0
- package/dist/dashboard/panels/outcomes.js +29 -0
- package/dist/dashboard/panels/outcomes.js.map +1 -0
- package/dist/dashboard/panels/overview.d.ts +8 -0
- package/dist/dashboard/panels/overview.d.ts.map +1 -0
- package/dist/dashboard/panels/overview.js +20 -0
- package/dist/dashboard/panels/overview.js.map +1 -0
- package/dist/dashboard/panels/shared.d.ts +17 -0
- package/dist/dashboard/panels/shared.d.ts.map +1 -0
- package/dist/dashboard/panels/shared.js +62 -0
- package/dist/dashboard/panels/shared.js.map +1 -0
- package/dist/dashboard/types.d.ts +80 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +27 -0
- package/dist/dashboard/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +17 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +92 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/api-client.test.d.ts +2 -0
- package/dist/lib/api-client.test.d.ts.map +1 -0
- package/dist/lib/api-client.test.js +161 -0
- package/dist/lib/api-client.test.js.map +1 -0
- package/dist/lib/auth.d.ts +27 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +137 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/auth.test.d.ts +2 -0
- package/dist/lib/auth.test.d.ts.map +1 -0
- package/dist/lib/auth.test.js +110 -0
- package/dist/lib/auth.test.js.map +1 -0
- package/dist/lib/eval-analyzer.d.ts +23 -0
- package/dist/lib/eval-analyzer.d.ts.map +1 -0
- package/dist/lib/eval-analyzer.js +89 -0
- package/dist/lib/eval-analyzer.js.map +1 -0
- package/dist/lib/eval-benchmark.d.ts +17 -0
- package/dist/lib/eval-benchmark.d.ts.map +1 -0
- package/dist/lib/eval-benchmark.js +92 -0
- package/dist/lib/eval-benchmark.js.map +1 -0
- package/dist/lib/eval-conversation-handler.d.ts +9 -0
- package/dist/lib/eval-conversation-handler.d.ts.map +1 -0
- package/dist/lib/eval-conversation-handler.js +200 -0
- package/dist/lib/eval-conversation-handler.js.map +1 -0
- package/dist/lib/eval-executor.d.ts +21 -0
- package/dist/lib/eval-executor.d.ts.map +1 -0
- package/dist/lib/eval-executor.js +80 -0
- package/dist/lib/eval-executor.js.map +1 -0
- package/dist/lib/eval-executor.test.d.ts +2 -0
- package/dist/lib/eval-executor.test.d.ts.map +1 -0
- package/dist/lib/eval-executor.test.js +8 -0
- package/dist/lib/eval-executor.test.js.map +1 -0
- package/dist/lib/eval-grader.d.ts +38 -0
- package/dist/lib/eval-grader.d.ts.map +1 -0
- package/dist/lib/eval-grader.js +123 -0
- package/dist/lib/eval-grader.js.map +1 -0
- package/dist/lib/eval-grader.test.d.ts +2 -0
- package/dist/lib/eval-grader.test.d.ts.map +1 -0
- package/dist/lib/eval-grader.test.js +8 -0
- package/dist/lib/eval-grader.test.js.map +1 -0
- package/dist/lib/eval-meta-judge.d.ts +28 -0
- package/dist/lib/eval-meta-judge.d.ts.map +1 -0
- package/dist/lib/eval-meta-judge.js +116 -0
- package/dist/lib/eval-meta-judge.js.map +1 -0
- package/dist/lib/eval-trigger-tester.d.ts +19 -0
- package/dist/lib/eval-trigger-tester.d.ts.map +1 -0
- package/dist/lib/eval-trigger-tester.js +96 -0
- package/dist/lib/eval-trigger-tester.js.map +1 -0
- package/dist/lib/eval-worker.d.ts +12 -0
- package/dist/lib/eval-worker.d.ts.map +1 -0
- package/dist/lib/eval-worker.js +395 -0
- package/dist/lib/eval-worker.js.map +1 -0
- package/dist/lib/eval-worktree.d.ts +11 -0
- package/dist/lib/eval-worktree.d.ts.map +1 -0
- package/dist/lib/eval-worktree.js +87 -0
- package/dist/lib/eval-worktree.js.map +1 -0
- package/dist/lib/eval-worktree.test.d.ts +2 -0
- package/dist/lib/eval-worktree.test.d.ts.map +1 -0
- package/dist/lib/eval-worktree.test.js +68 -0
- package/dist/lib/eval-worktree.test.js.map +1 -0
- package/dist/lib/gateway-entry.d.ts +3 -0
- package/dist/lib/gateway-entry.d.ts.map +1 -0
- package/dist/lib/gateway-entry.js +19 -0
- package/dist/lib/gateway-entry.js.map +1 -0
- package/dist/lib/gateway-lifecycle.d.ts +9 -0
- package/dist/lib/gateway-lifecycle.d.ts.map +1 -0
- package/dist/lib/gateway-lifecycle.js +86 -0
- package/dist/lib/gateway-lifecycle.js.map +1 -0
- package/dist/lib/gateway.d.ts +12 -0
- package/dist/lib/gateway.d.ts.map +1 -0
- package/dist/lib/gateway.js +150 -0
- package/dist/lib/gateway.js.map +1 -0
- package/dist/lib/hooks-config.d.ts +95 -0
- package/dist/lib/hooks-config.d.ts.map +1 -0
- package/dist/lib/hooks-config.js +416 -0
- package/dist/lib/hooks-config.js.map +1 -0
- package/dist/lib/hooks-config.test.d.ts +2 -0
- package/dist/lib/hooks-config.test.d.ts.map +1 -0
- package/dist/lib/hooks-config.test.js +231 -0
- package/dist/lib/hooks-config.test.js.map +1 -0
- package/dist/lib/insights-prompts.d.ts +13 -0
- package/dist/lib/insights-prompts.d.ts.map +1 -0
- package/dist/lib/insights-prompts.js +145 -0
- package/dist/lib/insights-prompts.js.map +1 -0
- package/dist/lib/insights-worker.d.ts +10 -0
- package/dist/lib/insights-worker.d.ts.map +1 -0
- package/dist/lib/insights-worker.js +329 -0
- package/dist/lib/insights-worker.js.map +1 -0
- package/dist/lib/llm-client.d.ts +26 -0
- package/dist/lib/llm-client.d.ts.map +1 -0
- package/dist/lib/llm-client.js +142 -0
- package/dist/lib/llm-client.js.map +1 -0
- package/dist/lib/llm-client.test.d.ts +2 -0
- package/dist/lib/llm-client.test.d.ts.map +1 -0
- package/dist/lib/llm-client.test.js +62 -0
- package/dist/lib/llm-client.test.js.map +1 -0
- package/dist/lib/output.d.ts +4 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +36 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/output.test.d.ts +2 -0
- package/dist/lib/output.test.d.ts.map +1 -0
- package/dist/lib/output.test.js +71 -0
- package/dist/lib/output.test.js.map +1 -0
- package/dist/lib/provider-aggregator.d.ts +24 -0
- package/dist/lib/provider-aggregator.d.ts.map +1 -0
- package/dist/lib/provider-aggregator.js +57 -0
- package/dist/lib/provider-aggregator.js.map +1 -0
- package/dist/lib/provider-aggregator.test.d.ts +2 -0
- package/dist/lib/provider-aggregator.test.d.ts.map +1 -0
- package/dist/lib/provider-aggregator.test.js +103 -0
- package/dist/lib/provider-aggregator.test.js.map +1 -0
- package/dist/lib/skills-loader.d.ts +6 -0
- package/dist/lib/skills-loader.d.ts.map +1 -0
- package/dist/lib/skills-loader.js +51 -0
- package/dist/lib/skills-loader.js.map +1 -0
- package/dist/lib/types.d.ts +48 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/test-helpers.d.ts +58 -0
- package/dist/test-helpers.d.ts.map +1 -0
- package/dist/test-helpers.js +58 -0
- package/dist/test-helpers.js.map +1 -0
- package/oclif.manifest.json +3197 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-worker.js","sourceRoot":"","sources":["../../src/lib/eval-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create an isolated git worktree for eval execution.
|
|
3
|
+
* Returns the worktree path and a cleanup function.
|
|
4
|
+
* Falls back to a temp directory copy if not in a git repo.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createEvalWorktree(baseDir?: string): {
|
|
7
|
+
workDir: string;
|
|
8
|
+
cleanup: () => void;
|
|
9
|
+
isWorktree: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=eval-worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-worktree.d.ts","sourceRoot":"","sources":["../../src/lib/eval-worktree.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB,CAgEA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { mkdtempSync, rmSync, existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
/**
|
|
6
|
+
* Create an isolated git worktree for eval execution.
|
|
7
|
+
* Returns the worktree path and a cleanup function.
|
|
8
|
+
* Falls back to a temp directory copy if not in a git repo.
|
|
9
|
+
*/
|
|
10
|
+
export function createEvalWorktree(baseDir) {
|
|
11
|
+
const cwd = baseDir ?? process.cwd();
|
|
12
|
+
const prefix = join(tmpdir(), 'rulemetric-eval-');
|
|
13
|
+
// Check if we're in a git repo
|
|
14
|
+
try {
|
|
15
|
+
execSync('git rev-parse --git-dir', { cwd, stdio: 'pipe' });
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Not a git repo — use a plain temp dir
|
|
19
|
+
const tempDir = mkdtempSync(prefix);
|
|
20
|
+
return {
|
|
21
|
+
workDir: tempDir,
|
|
22
|
+
cleanup: () => safeRm(tempDir),
|
|
23
|
+
isWorktree: false,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Get current branch/commit
|
|
27
|
+
let ref;
|
|
28
|
+
try {
|
|
29
|
+
ref = execSync('git rev-parse HEAD', { cwd, stdio: 'pipe' }).toString().trim();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
const tempDir = mkdtempSync(prefix);
|
|
33
|
+
return {
|
|
34
|
+
workDir: tempDir,
|
|
35
|
+
cleanup: () => safeRm(tempDir),
|
|
36
|
+
isWorktree: false,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Create worktree at a detached HEAD (no branch conflict)
|
|
40
|
+
const worktreePath = mkdtempSync(prefix);
|
|
41
|
+
// mkdtemp creates the dir — git worktree add needs it to not exist
|
|
42
|
+
rmSync(worktreePath, { recursive: true });
|
|
43
|
+
try {
|
|
44
|
+
execSync(`git worktree add --detach "${worktreePath}" ${ref}`, {
|
|
45
|
+
cwd,
|
|
46
|
+
stdio: 'pipe',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Worktree creation failed — fall back to temp dir
|
|
51
|
+
const tempDir = mkdtempSync(prefix);
|
|
52
|
+
return {
|
|
53
|
+
workDir: tempDir,
|
|
54
|
+
cleanup: () => safeRm(tempDir),
|
|
55
|
+
isWorktree: false,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
workDir: worktreePath,
|
|
60
|
+
cleanup: () => {
|
|
61
|
+
try {
|
|
62
|
+
execSync(`git worktree remove --force "${worktreePath}"`, { cwd, stdio: 'pipe' });
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// If git worktree remove fails, just delete the directory
|
|
66
|
+
safeRm(worktreePath);
|
|
67
|
+
// Prune stale worktree refs
|
|
68
|
+
try {
|
|
69
|
+
execSync('git worktree prune', { cwd, stdio: 'pipe' });
|
|
70
|
+
}
|
|
71
|
+
catch { /* ignore */ }
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
isWorktree: true,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function safeRm(dir) {
|
|
78
|
+
try {
|
|
79
|
+
if (existsSync(dir)) {
|
|
80
|
+
rmSync(dir, { recursive: true, force: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Best-effort cleanup
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=eval-worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-worktree.js","sourceRoot":"","sources":["../../src/lib/eval-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-worktree.test.d.ts","sourceRoot":"","sources":["../../src/lib/eval-worktree.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { createEvalWorktree } from './eval-worktree.js';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { existsSync, mkdtempSync, writeFileSync, rmSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
describe('createEvalWorktree', () => {
|
|
8
|
+
let gitRepo;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
// Create a temporary git repo for testing
|
|
11
|
+
gitRepo = mkdtempSync(join(tmpdir(), 'eval-worktree-test-'));
|
|
12
|
+
execSync('git init', { cwd: gitRepo, stdio: 'pipe' });
|
|
13
|
+
execSync('git config user.email "test@test.com"', { cwd: gitRepo, stdio: 'pipe' });
|
|
14
|
+
execSync('git config user.name "Test"', { cwd: gitRepo, stdio: 'pipe' });
|
|
15
|
+
writeFileSync(join(gitRepo, 'test.txt'), 'hello');
|
|
16
|
+
execSync('git add . && git commit -m "init"', { cwd: gitRepo, stdio: 'pipe' });
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
// Clean up worktrees before removing repo
|
|
20
|
+
try {
|
|
21
|
+
execSync('git worktree prune', { cwd: gitRepo, stdio: 'pipe' });
|
|
22
|
+
}
|
|
23
|
+
catch { /* ignore */ }
|
|
24
|
+
rmSync(gitRepo, { recursive: true, force: true });
|
|
25
|
+
});
|
|
26
|
+
it('creates a git worktree in a git repo', () => {
|
|
27
|
+
const { workDir, cleanup, isWorktree } = createEvalWorktree(gitRepo);
|
|
28
|
+
expect(isWorktree).toBe(true);
|
|
29
|
+
expect(existsSync(workDir)).toBe(true);
|
|
30
|
+
expect(existsSync(join(workDir, 'test.txt'))).toBe(true);
|
|
31
|
+
cleanup();
|
|
32
|
+
expect(existsSync(workDir)).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it('falls back to temp dir outside a git repo', () => {
|
|
35
|
+
const nonGitDir = mkdtempSync(join(tmpdir(), 'non-git-'));
|
|
36
|
+
try {
|
|
37
|
+
const { workDir, cleanup, isWorktree } = createEvalWorktree(nonGitDir);
|
|
38
|
+
expect(isWorktree).toBe(false);
|
|
39
|
+
expect(existsSync(workDir)).toBe(true);
|
|
40
|
+
cleanup();
|
|
41
|
+
expect(existsSync(workDir)).toBe(false);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
rmSync(nonGitDir, { recursive: true, force: true });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('creates independent worktrees for parallel use', () => {
|
|
48
|
+
const wt1 = createEvalWorktree(gitRepo);
|
|
49
|
+
const wt2 = createEvalWorktree(gitRepo);
|
|
50
|
+
expect(wt1.workDir).not.toBe(wt2.workDir);
|
|
51
|
+
expect(wt1.isWorktree).toBe(true);
|
|
52
|
+
expect(wt2.isWorktree).toBe(true);
|
|
53
|
+
// Both should have the repo contents
|
|
54
|
+
expect(existsSync(join(wt1.workDir, 'test.txt'))).toBe(true);
|
|
55
|
+
expect(existsSync(join(wt2.workDir, 'test.txt'))).toBe(true);
|
|
56
|
+
// Modifications in one don't affect the other
|
|
57
|
+
writeFileSync(join(wt1.workDir, 'new-file.txt'), 'only in wt1');
|
|
58
|
+
expect(existsSync(join(wt2.workDir, 'new-file.txt'))).toBe(false);
|
|
59
|
+
wt1.cleanup();
|
|
60
|
+
wt2.cleanup();
|
|
61
|
+
});
|
|
62
|
+
it('cleanup is idempotent', () => {
|
|
63
|
+
const { cleanup } = createEvalWorktree(gitRepo);
|
|
64
|
+
cleanup();
|
|
65
|
+
cleanup(); // should not throw
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=eval-worktree.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-worktree.test.js","sourceRoot":"","sources":["../../src/lib/eval-worktree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-entry.d.ts","sourceRoot":"","sources":["../../src/lib/gateway-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standalone entry point for the gateway process.
|
|
4
|
+
* Spawned as a detached child process by the CLI.
|
|
5
|
+
*/
|
|
6
|
+
import { startGateway, GATEWAY_PORT, MITMPROXY_PORT } from './gateway.js';
|
|
7
|
+
const { server, healthInterval } = startGateway(GATEWAY_PORT, MITMPROXY_PORT);
|
|
8
|
+
function shutdown() {
|
|
9
|
+
console.log(`[${new Date().toISOString()}] gateway shutting down`);
|
|
10
|
+
clearInterval(healthInterval);
|
|
11
|
+
server.close(() => {
|
|
12
|
+
process.exit(0);
|
|
13
|
+
});
|
|
14
|
+
// Force exit after 5s if connections don't drain
|
|
15
|
+
setTimeout(() => process.exit(0), 5000).unref();
|
|
16
|
+
}
|
|
17
|
+
process.on('SIGTERM', shutdown);
|
|
18
|
+
process.on('SIGINT', shutdown);
|
|
19
|
+
//# sourceMappingURL=gateway-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-entry.js","sourceRoot":"","sources":["../../src/lib/gateway-entry.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAE9E,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IACnE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,iDAAiD;IACjD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const GATEWAY_PID_FILE: string;
|
|
2
|
+
export declare const GATEWAY_LOG_FILE: string;
|
|
3
|
+
export declare const GATEWAY_PORT = 8787;
|
|
4
|
+
export declare const MITMPROXY_PORT = 8788;
|
|
5
|
+
export declare function isGatewayRunning(): boolean;
|
|
6
|
+
export declare function getGatewayPid(): number | null;
|
|
7
|
+
export declare function spawnGateway(): number;
|
|
8
|
+
export declare function stopGateway(): boolean;
|
|
9
|
+
//# sourceMappingURL=gateway-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-lifecycle.d.ts","sourceRoot":"","sources":["../../src/lib/gateway-lifecycle.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,QAAkC,CAAC;AAChE,eAAO,MAAM,gBAAgB,QAAkC,CAAC;AAChE,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,wBAAgB,gBAAgB,IAAI,OAAO,CAa1C;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAK7C;AAiBD,wBAAgB,YAAY,IAAI,MAAM,CAyBrC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAYrC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway process lifecycle helpers — spawn, stop, check status.
|
|
3
|
+
* Used by hooks install/uninstall, session-start hook, and proxy status.
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { join, resolve } from 'node:path';
|
|
9
|
+
const CONFIG_DIR = join(homedir(), '.config', 'rulemetric');
|
|
10
|
+
export const GATEWAY_PID_FILE = join(CONFIG_DIR, 'gateway.pid');
|
|
11
|
+
export const GATEWAY_LOG_FILE = join(CONFIG_DIR, 'gateway.log');
|
|
12
|
+
export const GATEWAY_PORT = 8787;
|
|
13
|
+
export const MITMPROXY_PORT = 8788;
|
|
14
|
+
export function isGatewayRunning() {
|
|
15
|
+
if (!existsSync(GATEWAY_PID_FILE))
|
|
16
|
+
return false;
|
|
17
|
+
const content = readFileSync(GATEWAY_PID_FILE, 'utf-8').trim();
|
|
18
|
+
const pid = parseInt(content, 10);
|
|
19
|
+
if (isNaN(pid))
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
process.kill(pid, 0);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function getGatewayPid() {
|
|
30
|
+
if (!existsSync(GATEWAY_PID_FILE))
|
|
31
|
+
return null;
|
|
32
|
+
const content = readFileSync(GATEWAY_PID_FILE, 'utf-8').trim();
|
|
33
|
+
const pid = parseInt(content, 10);
|
|
34
|
+
return isNaN(pid) ? null : pid;
|
|
35
|
+
}
|
|
36
|
+
function findGatewayEntry() {
|
|
37
|
+
// Look for the compiled gateway-entry.js relative to this file's location
|
|
38
|
+
const candidates = [
|
|
39
|
+
resolve(import.meta.dirname, './gateway-entry.js'),
|
|
40
|
+
resolve(import.meta.dirname, '../lib/gateway-entry.js'),
|
|
41
|
+
];
|
|
42
|
+
for (const p of candidates) {
|
|
43
|
+
if (existsSync(p))
|
|
44
|
+
return p;
|
|
45
|
+
}
|
|
46
|
+
throw new Error('Could not find gateway-entry.js. Is the CLI built?\n' +
|
|
47
|
+
'Searched:\n' + candidates.map(c => ` ${c}`).join('\n'));
|
|
48
|
+
}
|
|
49
|
+
export function spawnGateway() {
|
|
50
|
+
if (isGatewayRunning()) {
|
|
51
|
+
const pid = getGatewayPid();
|
|
52
|
+
if (pid)
|
|
53
|
+
return pid;
|
|
54
|
+
}
|
|
55
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
56
|
+
const entryPath = findGatewayEntry();
|
|
57
|
+
const logFd = openSync(GATEWAY_LOG_FILE, 'a');
|
|
58
|
+
const child = spawn(process.execPath, [entryPath], {
|
|
59
|
+
detached: true,
|
|
60
|
+
stdio: ['ignore', logFd, logFd],
|
|
61
|
+
env: process.env,
|
|
62
|
+
});
|
|
63
|
+
child.unref();
|
|
64
|
+
if (!child.pid) {
|
|
65
|
+
throw new Error('Failed to spawn gateway process');
|
|
66
|
+
}
|
|
67
|
+
writeFileSync(GATEWAY_PID_FILE, String(child.pid));
|
|
68
|
+
return child.pid;
|
|
69
|
+
}
|
|
70
|
+
export function stopGateway() {
|
|
71
|
+
const pid = getGatewayPid();
|
|
72
|
+
if (pid === null)
|
|
73
|
+
return false;
|
|
74
|
+
try {
|
|
75
|
+
process.kill(pid, 'SIGTERM');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Process already gone
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
unlinkSync(GATEWAY_PID_FILE);
|
|
82
|
+
}
|
|
83
|
+
catch { /* already gone */ }
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=gateway-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-lifecycle.js","sourceRoot":"","sources":["../../src/lib/gateway-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient HTTP proxy gateway that always accepts connections on GATEWAY_PORT.
|
|
3
|
+
* Routes through mitmproxy when it's alive, direct to upstream when it's not.
|
|
4
|
+
*/
|
|
5
|
+
import * as http from 'node:http';
|
|
6
|
+
export declare const GATEWAY_PORT = 8787;
|
|
7
|
+
export declare const MITMPROXY_PORT = 8788;
|
|
8
|
+
export declare function startGateway(port?: number, mitmproxyPort?: number): {
|
|
9
|
+
server: http.Server;
|
|
10
|
+
healthInterval: NodeJS.Timeout;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,cAAc,OAAO,CAAC;AAuJnC,wBAAgB,YAAY,CAC1B,IAAI,GAAE,MAAqB,EAC3B,aAAa,GAAE,MAAuB,GACrC;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CA4BzD"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient HTTP proxy gateway that always accepts connections on GATEWAY_PORT.
|
|
3
|
+
* Routes through mitmproxy when it's alive, direct to upstream when it's not.
|
|
4
|
+
*/
|
|
5
|
+
import * as http from 'node:http';
|
|
6
|
+
import * as net from 'node:net';
|
|
7
|
+
export const GATEWAY_PORT = 8787;
|
|
8
|
+
export const MITMPROXY_PORT = 8788;
|
|
9
|
+
const HEALTH_INTERVAL = 3000;
|
|
10
|
+
const HEALTH_TIMEOUT = 500;
|
|
11
|
+
let isProxyAlive = false;
|
|
12
|
+
let lastState = null;
|
|
13
|
+
function log(msg) {
|
|
14
|
+
const ts = new Date().toISOString();
|
|
15
|
+
console.log(`[${ts}] ${msg}`);
|
|
16
|
+
}
|
|
17
|
+
function checkProxyHealth(mitmproxyPort) {
|
|
18
|
+
const sock = net.connect({ port: mitmproxyPort, timeout: HEALTH_TIMEOUT });
|
|
19
|
+
sock.on('connect', () => {
|
|
20
|
+
sock.destroy();
|
|
21
|
+
if (!isProxyAlive) {
|
|
22
|
+
isProxyAlive = true;
|
|
23
|
+
log(`mitmproxy up on :${mitmproxyPort}, routing through proxy`);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
sock.on('error', () => {
|
|
27
|
+
if (isProxyAlive) {
|
|
28
|
+
isProxyAlive = false;
|
|
29
|
+
log(`mitmproxy down on :${mitmproxyPort}, routing direct`);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
sock.on('timeout', () => {
|
|
33
|
+
sock.destroy();
|
|
34
|
+
if (isProxyAlive) {
|
|
35
|
+
isProxyAlive = false;
|
|
36
|
+
log(`mitmproxy timeout on :${mitmproxyPort}, routing direct`);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function handleConnect(req, clientSocket, head, mitmproxyPort) {
|
|
41
|
+
const [targetHost, targetPortStr] = (req.url ?? '').split(':');
|
|
42
|
+
const targetPort = parseInt(targetPortStr, 10) || 443;
|
|
43
|
+
if (isProxyAlive) {
|
|
44
|
+
// Forward CONNECT to mitmproxy
|
|
45
|
+
const proxySocket = net.connect({ port: mitmproxyPort, host: '127.0.0.1' });
|
|
46
|
+
proxySocket.on('connect', () => {
|
|
47
|
+
// Send the CONNECT request to mitmproxy
|
|
48
|
+
proxySocket.write(`CONNECT ${req.url} HTTP/1.1\r\nHost: ${req.url}\r\n\r\n`);
|
|
49
|
+
});
|
|
50
|
+
// Wait for mitmproxy's 200 response before piping
|
|
51
|
+
let responseBuffer = Buffer.alloc(0);
|
|
52
|
+
const onData = (chunk) => {
|
|
53
|
+
responseBuffer = Buffer.concat([responseBuffer, chunk]);
|
|
54
|
+
const responseStr = responseBuffer.toString();
|
|
55
|
+
if (responseStr.includes('\r\n\r\n')) {
|
|
56
|
+
proxySocket.removeListener('data', onData);
|
|
57
|
+
// Forward the 200 to client
|
|
58
|
+
clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
|
|
59
|
+
// Pipe remaining data and head
|
|
60
|
+
if (head.length > 0)
|
|
61
|
+
proxySocket.write(head);
|
|
62
|
+
clientSocket.pipe(proxySocket);
|
|
63
|
+
proxySocket.pipe(clientSocket);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
proxySocket.on('data', onData);
|
|
67
|
+
proxySocket.on('error', (err) => {
|
|
68
|
+
log(`proxy socket error for ${req.url}: ${err.message}, falling back to direct`);
|
|
69
|
+
// Mitmproxy failed mid-connect, fall back to direct
|
|
70
|
+
connectDirect(req, clientSocket, head, targetHost, targetPort);
|
|
71
|
+
});
|
|
72
|
+
clientSocket.on('error', () => {
|
|
73
|
+
proxySocket.destroy();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
connectDirect(req, clientSocket, head, targetHost, targetPort);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function connectDirect(req, clientSocket, head, targetHost, targetPort) {
|
|
81
|
+
const upstream = net.connect({ port: targetPort, host: targetHost });
|
|
82
|
+
upstream.on('connect', () => {
|
|
83
|
+
clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
|
|
84
|
+
if (head.length > 0)
|
|
85
|
+
upstream.write(head);
|
|
86
|
+
clientSocket.pipe(upstream);
|
|
87
|
+
upstream.pipe(clientSocket);
|
|
88
|
+
});
|
|
89
|
+
upstream.on('error', (err) => {
|
|
90
|
+
log(`upstream error for ${req.url}: ${err.message}`);
|
|
91
|
+
clientSocket.end('HTTP/1.1 502 Bad Gateway\r\n\r\n');
|
|
92
|
+
});
|
|
93
|
+
clientSocket.on('error', () => {
|
|
94
|
+
upstream.destroy();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function handleRequest(req, res, mitmproxyPort) {
|
|
98
|
+
// Plain HTTP proxy (non-CONNECT)
|
|
99
|
+
const targetUrl = req.url ?? '';
|
|
100
|
+
let parsedUrl;
|
|
101
|
+
try {
|
|
102
|
+
parsedUrl = new URL(targetUrl);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
res.writeHead(400);
|
|
106
|
+
res.end('Bad Request');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const options = {
|
|
110
|
+
hostname: isProxyAlive ? '127.0.0.1' : parsedUrl.hostname,
|
|
111
|
+
port: isProxyAlive ? mitmproxyPort : (parseInt(parsedUrl.port, 10) || 80),
|
|
112
|
+
path: isProxyAlive ? targetUrl : parsedUrl.pathname + parsedUrl.search,
|
|
113
|
+
method: req.method,
|
|
114
|
+
headers: req.headers,
|
|
115
|
+
};
|
|
116
|
+
const proxyReq = http.request(options, (proxyRes) => {
|
|
117
|
+
res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);
|
|
118
|
+
proxyRes.pipe(res);
|
|
119
|
+
});
|
|
120
|
+
proxyReq.on('error', (err) => {
|
|
121
|
+
log(`HTTP proxy error for ${targetUrl}: ${err.message}`);
|
|
122
|
+
res.writeHead(502);
|
|
123
|
+
res.end('Bad Gateway');
|
|
124
|
+
});
|
|
125
|
+
req.pipe(proxyReq);
|
|
126
|
+
}
|
|
127
|
+
export function startGateway(port = GATEWAY_PORT, mitmproxyPort = MITMPROXY_PORT) {
|
|
128
|
+
const server = http.createServer((req, res) => {
|
|
129
|
+
handleRequest(req, res, mitmproxyPort);
|
|
130
|
+
});
|
|
131
|
+
server.on('connect', (req, clientSocket, head) => {
|
|
132
|
+
handleConnect(req, clientSocket, head, mitmproxyPort);
|
|
133
|
+
});
|
|
134
|
+
// Don't crash on client socket errors
|
|
135
|
+
server.on('clientError', (_err, socket) => {
|
|
136
|
+
if (socket.writable) {
|
|
137
|
+
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
const healthInterval = setInterval(() => {
|
|
141
|
+
checkProxyHealth(mitmproxyPort);
|
|
142
|
+
}, HEALTH_INTERVAL);
|
|
143
|
+
// Do an immediate check
|
|
144
|
+
checkProxyHealth(mitmproxyPort);
|
|
145
|
+
server.listen(port, '127.0.0.1', () => {
|
|
146
|
+
log(`gateway listening on 127.0.0.1:${port} (mitmproxy target: :${mitmproxyPort})`);
|
|
147
|
+
});
|
|
148
|
+
return { server, healthInterval };
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export type DetectedTool = 'claude_code' | 'cursor' | 'copilot_agent';
|
|
2
|
+
/**
|
|
3
|
+
* Detect which AI coding tools are installed in the project by checking
|
|
4
|
+
* for their config directories.
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectInstalledTools(projectPath: string): DetectedTool[];
|
|
7
|
+
/**
|
|
8
|
+
* Generate Cursor hooks config object.
|
|
9
|
+
*
|
|
10
|
+
* Cursor uses event names like beforeSubmitPrompt, afterFileEdit, etc.
|
|
11
|
+
* Each event maps to an array of hook objects with a `command` field.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateCursorHooksConfig(): object;
|
|
14
|
+
/**
|
|
15
|
+
* Generate Copilot Agent hooks config object.
|
|
16
|
+
*
|
|
17
|
+
* Copilot uses event names like sessionStart, userPromptSubmitted, etc.
|
|
18
|
+
* Each event maps to an array of hook objects with `type` and `bash` fields.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateCopilotHooksConfig(): object;
|
|
21
|
+
/**
|
|
22
|
+
* Write Cursor hooks config to `.cursor/hooks.json`.
|
|
23
|
+
* Merges with existing config — appends rulemetric hooks without duplicating.
|
|
24
|
+
* Returns the config file path, or null if `.cursor/` doesn't exist.
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeCursorHooks(projectPath: string): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Write Copilot Agent hooks config to `.github/hooks/rulemetric.json`.
|
|
29
|
+
* Creates the hooks directory if needed.
|
|
30
|
+
* Returns the config file path, or null if `.github/` doesn't exist.
|
|
31
|
+
*/
|
|
32
|
+
export declare function writeCopilotHooks(projectPath: string): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Remove rulemetric hooks from `.cursor/hooks.json`.
|
|
35
|
+
* Preserves other hooks and removes empty event arrays.
|
|
36
|
+
* Returns true if changes were made.
|
|
37
|
+
*/
|
|
38
|
+
export declare function removeCursorHooks(projectPath: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Write Cursor proxy config to `.cursor/settings.json`.
|
|
41
|
+
* Sets `http.proxy` and `http.proxyStrictSSL` while preserving existing settings.
|
|
42
|
+
* Returns true if `.cursor/` exists and config was written, false otherwise.
|
|
43
|
+
*/
|
|
44
|
+
export declare function writeCursorProxyConfig(projectPath: string, gatewayPort: number, certPath: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Write VS Code proxy config to `.vscode/settings.json` for Copilot capture.
|
|
47
|
+
* Sets `http.proxy`, `http.proxyStrictSSL`, and Copilot-specific override
|
|
48
|
+
* while preserving existing settings.
|
|
49
|
+
* Returns true if config was written, false if `.vscode/` doesn't exist.
|
|
50
|
+
*/
|
|
51
|
+
export declare function writeVSCodeProxyConfig(projectPath: string, gatewayPort: number, certPath: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Remove VS Code proxy config from `.vscode/settings.json`.
|
|
54
|
+
* Removes `http.proxy`, `http.proxyStrictSSL`, and Copilot proxy override.
|
|
55
|
+
* Returns true if changes were made.
|
|
56
|
+
*/
|
|
57
|
+
export declare function removeVSCodeProxyConfig(projectPath: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Remove Copilot Agent hooks by deleting `.github/hooks/rulemetric.json`.
|
|
60
|
+
* Returns true if the file was removed.
|
|
61
|
+
*/
|
|
62
|
+
export declare function removeCopilotHooks(projectPath: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Set HTTPS_PROXY and NODE_EXTRA_CA_CERTS for all GUI apps on macOS.
|
|
65
|
+
*
|
|
66
|
+
* Two layers:
|
|
67
|
+
* 1. `launchctl setenv` — immediate effect for newly launched apps
|
|
68
|
+
* 2. LaunchAgent plist — persists across reboots
|
|
69
|
+
*
|
|
70
|
+
* This ensures VS Code / Copilot / Cursor route LLM traffic through the
|
|
71
|
+
* gateway even when launched from Dock or Spotlight (not a terminal).
|
|
72
|
+
*
|
|
73
|
+
* References:
|
|
74
|
+
* - anthropics/claude-code#30318 (same pattern for Claude Desktop)
|
|
75
|
+
* - Snyk IDE docs recommend launchctl setenv for macOS
|
|
76
|
+
* - Apple QA1067 (archived) — original env var mechanism removed in 10.10
|
|
77
|
+
*/
|
|
78
|
+
export declare function installMacOSProxyEnv(gatewayPort: number, certPath: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Remove the RuleMetric LaunchAgent and unset env vars.
|
|
81
|
+
*/
|
|
82
|
+
export declare function uninstallMacOSProxyEnv(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Set http.proxy in VS Code user settings (not workspace).
|
|
85
|
+
*
|
|
86
|
+
* Workspace-level http.proxy is silently ignored because VS Code restricts
|
|
87
|
+
* it to APPLICATION scope (microsoft/vscode#236932). User-level settings
|
|
88
|
+
* are the only reliable way to configure http.proxy.
|
|
89
|
+
*/
|
|
90
|
+
export declare function writeVSCodeUserProxyConfig(gatewayPort: number): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Remove RuleMetric proxy config from VS Code user settings.
|
|
93
|
+
*/
|
|
94
|
+
export declare function removeVSCodeUserProxyConfig(): boolean;
|
|
95
|
+
//# sourceMappingURL=hooks-config.d.ts.map
|