@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.
Files changed (416) hide show
  1. package/bin/dev.js +3 -0
  2. package/bin/run.js +3 -0
  3. package/dist/base-command.d.ts +12 -0
  4. package/dist/base-command.d.ts.map +1 -0
  5. package/dist/base-command.js +37 -0
  6. package/dist/base-command.js.map +1 -0
  7. package/dist/commands/auth/create-key.d.ts +11 -0
  8. package/dist/commands/auth/create-key.d.ts.map +1 -0
  9. package/dist/commands/auth/create-key.js +34 -0
  10. package/dist/commands/auth/create-key.js.map +1 -0
  11. package/dist/commands/auth/login.d.ts +11 -0
  12. package/dist/commands/auth/login.d.ts.map +1 -0
  13. package/dist/commands/auth/login.js +40 -0
  14. package/dist/commands/auth/login.js.map +1 -0
  15. package/dist/commands/auth/logout.d.ts +7 -0
  16. package/dist/commands/auth/logout.d.ts.map +1 -0
  17. package/dist/commands/auth/logout.js +13 -0
  18. package/dist/commands/auth/logout.js.map +1 -0
  19. package/dist/commands/auth/revoke-key.d.ts +10 -0
  20. package/dist/commands/auth/revoke-key.d.ts.map +1 -0
  21. package/dist/commands/auth/revoke-key.js +18 -0
  22. package/dist/commands/auth/revoke-key.js.map +1 -0
  23. package/dist/commands/auth/status.d.ts +7 -0
  24. package/dist/commands/auth/status.d.ts.map +1 -0
  25. package/dist/commands/auth/status.js +23 -0
  26. package/dist/commands/auth/status.js.map +1 -0
  27. package/dist/commands/catalog/index.d.ts +11 -0
  28. package/dist/commands/catalog/index.d.ts.map +1 -0
  29. package/dist/commands/catalog/index.js +35 -0
  30. package/dist/commands/catalog/index.js.map +1 -0
  31. package/dist/commands/catalog/recommend.d.ts +9 -0
  32. package/dist/commands/catalog/recommend.d.ts.map +1 -0
  33. package/dist/commands/catalog/recommend.js +27 -0
  34. package/dist/commands/catalog/recommend.js.map +1 -0
  35. package/dist/commands/convert.d.ts +15 -0
  36. package/dist/commands/convert.d.ts.map +1 -0
  37. package/dist/commands/convert.js +55 -0
  38. package/dist/commands/convert.js.map +1 -0
  39. package/dist/commands/converters.d.ts +12 -0
  40. package/dist/commands/converters.d.ts.map +1 -0
  41. package/dist/commands/converters.js +39 -0
  42. package/dist/commands/converters.js.map +1 -0
  43. package/dist/commands/dashboard.d.ts +10 -0
  44. package/dist/commands/dashboard.d.ts.map +1 -0
  45. package/dist/commands/dashboard.js +24 -0
  46. package/dist/commands/dashboard.js.map +1 -0
  47. package/dist/commands/eval-targets/create.d.ts +14 -0
  48. package/dist/commands/eval-targets/create.d.ts.map +1 -0
  49. package/dist/commands/eval-targets/create.js +40 -0
  50. package/dist/commands/eval-targets/create.js.map +1 -0
  51. package/dist/commands/eval-targets/list.d.ts +10 -0
  52. package/dist/commands/eval-targets/list.d.ts.map +1 -0
  53. package/dist/commands/eval-targets/list.js +36 -0
  54. package/dist/commands/eval-targets/list.js.map +1 -0
  55. package/dist/commands/evals/benchmark.d.ts +13 -0
  56. package/dist/commands/evals/benchmark.d.ts.map +1 -0
  57. package/dist/commands/evals/benchmark.js +53 -0
  58. package/dist/commands/evals/benchmark.js.map +1 -0
  59. package/dist/commands/evals/compare.d.ts +15 -0
  60. package/dist/commands/evals/compare.d.ts.map +1 -0
  61. package/dist/commands/evals/compare.js +101 -0
  62. package/dist/commands/evals/compare.js.map +1 -0
  63. package/dist/commands/evals/create.d.ts +17 -0
  64. package/dist/commands/evals/create.d.ts.map +1 -0
  65. package/dist/commands/evals/create.js +52 -0
  66. package/dist/commands/evals/create.js.map +1 -0
  67. package/dist/commands/evals/listen.d.ts +11 -0
  68. package/dist/commands/evals/listen.d.ts.map +1 -0
  69. package/dist/commands/evals/listen.js +54 -0
  70. package/dist/commands/evals/listen.js.map +1 -0
  71. package/dist/commands/evals/optimize-description.d.ts +22 -0
  72. package/dist/commands/evals/optimize-description.d.ts.map +1 -0
  73. package/dist/commands/evals/optimize-description.js +269 -0
  74. package/dist/commands/evals/optimize-description.js.map +1 -0
  75. package/dist/commands/evals/optimize.d.ts +22 -0
  76. package/dist/commands/evals/optimize.d.ts.map +1 -0
  77. package/dist/commands/evals/optimize.js +200 -0
  78. package/dist/commands/evals/optimize.js.map +1 -0
  79. package/dist/commands/evals/run.d.ts +21 -0
  80. package/dist/commands/evals/run.d.ts.map +1 -0
  81. package/dist/commands/evals/run.js +168 -0
  82. package/dist/commands/evals/run.js.map +1 -0
  83. package/dist/commands/gateway/ensure.d.ts +7 -0
  84. package/dist/commands/gateway/ensure.d.ts.map +1 -0
  85. package/dist/commands/gateway/ensure.js +20 -0
  86. package/dist/commands/gateway/ensure.js.map +1 -0
  87. package/dist/commands/hooks/install.d.ts +16 -0
  88. package/dist/commands/hooks/install.d.ts.map +1 -0
  89. package/dist/commands/hooks/install.js +248 -0
  90. package/dist/commands/hooks/install.js.map +1 -0
  91. package/dist/commands/hooks/run.d.ts +11 -0
  92. package/dist/commands/hooks/run.d.ts.map +1 -0
  93. package/dist/commands/hooks/run.js +56 -0
  94. package/dist/commands/hooks/run.js.map +1 -0
  95. package/dist/commands/hooks/uninstall.d.ts +7 -0
  96. package/dist/commands/hooks/uninstall.d.ts.map +1 -0
  97. package/dist/commands/hooks/uninstall.js +88 -0
  98. package/dist/commands/hooks/uninstall.js.map +1 -0
  99. package/dist/commands/import.d.ts +17 -0
  100. package/dist/commands/import.d.ts.map +1 -0
  101. package/dist/commands/import.js +55 -0
  102. package/dist/commands/import.js.map +1 -0
  103. package/dist/commands/insights/sync.d.ts +17 -0
  104. package/dist/commands/insights/sync.d.ts.map +1 -0
  105. package/dist/commands/insights/sync.js +477 -0
  106. package/dist/commands/insights/sync.js.map +1 -0
  107. package/dist/commands/instructions/create.d.ts +17 -0
  108. package/dist/commands/instructions/create.d.ts.map +1 -0
  109. package/dist/commands/instructions/create.js +60 -0
  110. package/dist/commands/instructions/create.js.map +1 -0
  111. package/dist/commands/instructions/delete.d.ts +13 -0
  112. package/dist/commands/instructions/delete.d.ts.map +1 -0
  113. package/dist/commands/instructions/delete.js +37 -0
  114. package/dist/commands/instructions/delete.js.map +1 -0
  115. package/dist/commands/instructions/fork.d.ts +10 -0
  116. package/dist/commands/instructions/fork.d.ts.map +1 -0
  117. package/dist/commands/instructions/fork.js +19 -0
  118. package/dist/commands/instructions/fork.js.map +1 -0
  119. package/dist/commands/instructions/get.d.ts +15 -0
  120. package/dist/commands/instructions/get.d.ts.map +1 -0
  121. package/dist/commands/instructions/get.js +50 -0
  122. package/dist/commands/instructions/get.js.map +1 -0
  123. package/dist/commands/instructions/list.d.ts +12 -0
  124. package/dist/commands/instructions/list.d.ts.map +1 -0
  125. package/dist/commands/instructions/list.js +47 -0
  126. package/dist/commands/instructions/list.js.map +1 -0
  127. package/dist/commands/instructions/promote.d.ts +14 -0
  128. package/dist/commands/instructions/promote.d.ts.map +1 -0
  129. package/dist/commands/instructions/promote.js +27 -0
  130. package/dist/commands/instructions/promote.js.map +1 -0
  131. package/dist/commands/instructions/pull.d.ts +9 -0
  132. package/dist/commands/instructions/pull.d.ts.map +1 -0
  133. package/dist/commands/instructions/pull.js +22 -0
  134. package/dist/commands/instructions/pull.js.map +1 -0
  135. package/dist/commands/instructions/upstream.d.ts +9 -0
  136. package/dist/commands/instructions/upstream.d.ts.map +1 -0
  137. package/dist/commands/instructions/upstream.js +22 -0
  138. package/dist/commands/instructions/upstream.js.map +1 -0
  139. package/dist/commands/instructions/versions.d.ts +12 -0
  140. package/dist/commands/instructions/versions.d.ts.map +1 -0
  141. package/dist/commands/instructions/versions.js +34 -0
  142. package/dist/commands/instructions/versions.js.map +1 -0
  143. package/dist/commands/packs/add-instruction.d.ts +11 -0
  144. package/dist/commands/packs/add-instruction.d.ts.map +1 -0
  145. package/dist/commands/packs/add-instruction.js +22 -0
  146. package/dist/commands/packs/add-instruction.js.map +1 -0
  147. package/dist/commands/packs/apply.d.ts +13 -0
  148. package/dist/commands/packs/apply.d.ts.map +1 -0
  149. package/dist/commands/packs/apply.js +24 -0
  150. package/dist/commands/packs/apply.js.map +1 -0
  151. package/dist/commands/packs/create.d.ts +13 -0
  152. package/dist/commands/packs/create.d.ts.map +1 -0
  153. package/dist/commands/packs/create.js +35 -0
  154. package/dist/commands/packs/create.js.map +1 -0
  155. package/dist/commands/packs/fork.d.ts +10 -0
  156. package/dist/commands/packs/fork.d.ts.map +1 -0
  157. package/dist/commands/packs/fork.js +19 -0
  158. package/dist/commands/packs/fork.js.map +1 -0
  159. package/dist/commands/packs/get.d.ts +10 -0
  160. package/dist/commands/packs/get.d.ts.map +1 -0
  161. package/dist/commands/packs/get.js +36 -0
  162. package/dist/commands/packs/get.js.map +1 -0
  163. package/dist/commands/packs/list.d.ts +22 -0
  164. package/dist/commands/packs/list.d.ts.map +1 -0
  165. package/dist/commands/packs/list.js +48 -0
  166. package/dist/commands/packs/list.js.map +1 -0
  167. package/dist/commands/packs/remove-instruction.d.ts +11 -0
  168. package/dist/commands/packs/remove-instruction.d.ts.map +1 -0
  169. package/dist/commands/packs/remove-instruction.js +20 -0
  170. package/dist/commands/packs/remove-instruction.js.map +1 -0
  171. package/dist/commands/proxy/env.d.ts +14 -0
  172. package/dist/commands/proxy/env.d.ts.map +1 -0
  173. package/dist/commands/proxy/env.js +118 -0
  174. package/dist/commands/proxy/env.js.map +1 -0
  175. package/dist/commands/proxy/logs.d.ts +11 -0
  176. package/dist/commands/proxy/logs.d.ts.map +1 -0
  177. package/dist/commands/proxy/logs.js +75 -0
  178. package/dist/commands/proxy/logs.js.map +1 -0
  179. package/dist/commands/proxy/setup.d.ts +23 -0
  180. package/dist/commands/proxy/setup.d.ts.map +1 -0
  181. package/dist/commands/proxy/setup.js +391 -0
  182. package/dist/commands/proxy/setup.js.map +1 -0
  183. package/dist/commands/proxy/start.d.ts +17 -0
  184. package/dist/commands/proxy/start.d.ts.map +1 -0
  185. package/dist/commands/proxy/start.js +306 -0
  186. package/dist/commands/proxy/start.js.map +1 -0
  187. package/dist/commands/proxy/status.d.ts +7 -0
  188. package/dist/commands/proxy/status.d.ts.map +1 -0
  189. package/dist/commands/proxy/status.js +65 -0
  190. package/dist/commands/proxy/status.js.map +1 -0
  191. package/dist/commands/proxy/stop.d.ts +8 -0
  192. package/dist/commands/proxy/stop.d.ts.map +1 -0
  193. package/dist/commands/proxy/stop.js +77 -0
  194. package/dist/commands/proxy/stop.js.map +1 -0
  195. package/dist/commands/service/install.d.ts +17 -0
  196. package/dist/commands/service/install.d.ts.map +1 -0
  197. package/dist/commands/service/install.js +383 -0
  198. package/dist/commands/service/install.js.map +1 -0
  199. package/dist/commands/service/install.test.d.ts +2 -0
  200. package/dist/commands/service/install.test.d.ts.map +1 -0
  201. package/dist/commands/service/install.test.js +345 -0
  202. package/dist/commands/service/install.test.js.map +1 -0
  203. package/dist/commands/service/status.d.ts +6 -0
  204. package/dist/commands/service/status.d.ts.map +1 -0
  205. package/dist/commands/service/status.js +112 -0
  206. package/dist/commands/service/status.js.map +1 -0
  207. package/dist/commands/service/uninstall.d.ts +6 -0
  208. package/dist/commands/service/uninstall.d.ts.map +1 -0
  209. package/dist/commands/service/uninstall.js +84 -0
  210. package/dist/commands/service/uninstall.js.map +1 -0
  211. package/dist/commands/sessions/analyze.d.ts +10 -0
  212. package/dist/commands/sessions/analyze.d.ts.map +1 -0
  213. package/dist/commands/sessions/analyze.js +26 -0
  214. package/dist/commands/sessions/analyze.js.map +1 -0
  215. package/dist/commands/sessions/end.d.ts +9 -0
  216. package/dist/commands/sessions/end.d.ts.map +1 -0
  217. package/dist/commands/sessions/end.js +82 -0
  218. package/dist/commands/sessions/end.js.map +1 -0
  219. package/dist/commands/sessions/import.d.ts +13 -0
  220. package/dist/commands/sessions/import.d.ts.map +1 -0
  221. package/dist/commands/sessions/import.js +28 -0
  222. package/dist/commands/sessions/import.js.map +1 -0
  223. package/dist/commands/sessions/list.d.ts +11 -0
  224. package/dist/commands/sessions/list.d.ts.map +1 -0
  225. package/dist/commands/sessions/list.js +34 -0
  226. package/dist/commands/sessions/list.js.map +1 -0
  227. package/dist/commands/sessions/start.d.ts +11 -0
  228. package/dist/commands/sessions/start.d.ts.map +1 -0
  229. package/dist/commands/sessions/start.js +83 -0
  230. package/dist/commands/sessions/start.js.map +1 -0
  231. package/dist/commands/skills/install.d.ts +15 -0
  232. package/dist/commands/skills/install.d.ts.map +1 -0
  233. package/dist/commands/skills/install.js +91 -0
  234. package/dist/commands/skills/install.js.map +1 -0
  235. package/dist/commands/skills/list.d.ts +11 -0
  236. package/dist/commands/skills/list.d.ts.map +1 -0
  237. package/dist/commands/skills/list.js +47 -0
  238. package/dist/commands/skills/list.js.map +1 -0
  239. package/dist/commands/skills/search.d.ts +17 -0
  240. package/dist/commands/skills/search.d.ts.map +1 -0
  241. package/dist/commands/skills/search.js +56 -0
  242. package/dist/commands/skills/search.js.map +1 -0
  243. package/dist/commands/skills/update.d.ts +7 -0
  244. package/dist/commands/skills/update.d.ts.map +1 -0
  245. package/dist/commands/skills/update.js +30 -0
  246. package/dist/commands/skills/update.js.map +1 -0
  247. package/dist/dashboard/Dashboard.d.ts +3 -0
  248. package/dist/dashboard/Dashboard.d.ts.map +1 -0
  249. package/dist/dashboard/Dashboard.js +132 -0
  250. package/dist/dashboard/Dashboard.js.map +1 -0
  251. package/dist/dashboard/data.d.ts +11 -0
  252. package/dist/dashboard/data.d.ts.map +1 -0
  253. package/dist/dashboard/data.js +137 -0
  254. package/dist/dashboard/data.js.map +1 -0
  255. package/dist/dashboard/panels/friction.d.ts +7 -0
  256. package/dist/dashboard/panels/friction.d.ts.map +1 -0
  257. package/dist/dashboard/panels/friction.js +22 -0
  258. package/dist/dashboard/panels/friction.js.map +1 -0
  259. package/dist/dashboard/panels/insights.d.ts +8 -0
  260. package/dist/dashboard/panels/insights.d.ts.map +1 -0
  261. package/dist/dashboard/panels/insights.js +109 -0
  262. package/dist/dashboard/panels/insights.js.map +1 -0
  263. package/dist/dashboard/panels/instructions.d.ts +9 -0
  264. package/dist/dashboard/panels/instructions.d.ts.map +1 -0
  265. package/dist/dashboard/panels/instructions.js +17 -0
  266. package/dist/dashboard/panels/instructions.js.map +1 -0
  267. package/dist/dashboard/panels/outcomes.d.ts +7 -0
  268. package/dist/dashboard/panels/outcomes.d.ts.map +1 -0
  269. package/dist/dashboard/panels/outcomes.js +29 -0
  270. package/dist/dashboard/panels/outcomes.js.map +1 -0
  271. package/dist/dashboard/panels/overview.d.ts +8 -0
  272. package/dist/dashboard/panels/overview.d.ts.map +1 -0
  273. package/dist/dashboard/panels/overview.js +20 -0
  274. package/dist/dashboard/panels/overview.js.map +1 -0
  275. package/dist/dashboard/panels/shared.d.ts +17 -0
  276. package/dist/dashboard/panels/shared.d.ts.map +1 -0
  277. package/dist/dashboard/panels/shared.js +62 -0
  278. package/dist/dashboard/panels/shared.js.map +1 -0
  279. package/dist/dashboard/types.d.ts +80 -0
  280. package/dist/dashboard/types.d.ts.map +1 -0
  281. package/dist/dashboard/types.js +27 -0
  282. package/dist/dashboard/types.js.map +1 -0
  283. package/dist/index.d.ts +2 -0
  284. package/dist/index.d.ts.map +1 -0
  285. package/dist/index.js +2 -0
  286. package/dist/index.js.map +1 -0
  287. package/dist/lib/api-client.d.ts +17 -0
  288. package/dist/lib/api-client.d.ts.map +1 -0
  289. package/dist/lib/api-client.js +92 -0
  290. package/dist/lib/api-client.js.map +1 -0
  291. package/dist/lib/api-client.test.d.ts +2 -0
  292. package/dist/lib/api-client.test.d.ts.map +1 -0
  293. package/dist/lib/api-client.test.js +161 -0
  294. package/dist/lib/api-client.test.js.map +1 -0
  295. package/dist/lib/auth.d.ts +27 -0
  296. package/dist/lib/auth.d.ts.map +1 -0
  297. package/dist/lib/auth.js +137 -0
  298. package/dist/lib/auth.js.map +1 -0
  299. package/dist/lib/auth.test.d.ts +2 -0
  300. package/dist/lib/auth.test.d.ts.map +1 -0
  301. package/dist/lib/auth.test.js +110 -0
  302. package/dist/lib/auth.test.js.map +1 -0
  303. package/dist/lib/eval-analyzer.d.ts +23 -0
  304. package/dist/lib/eval-analyzer.d.ts.map +1 -0
  305. package/dist/lib/eval-analyzer.js +89 -0
  306. package/dist/lib/eval-analyzer.js.map +1 -0
  307. package/dist/lib/eval-benchmark.d.ts +17 -0
  308. package/dist/lib/eval-benchmark.d.ts.map +1 -0
  309. package/dist/lib/eval-benchmark.js +92 -0
  310. package/dist/lib/eval-benchmark.js.map +1 -0
  311. package/dist/lib/eval-conversation-handler.d.ts +9 -0
  312. package/dist/lib/eval-conversation-handler.d.ts.map +1 -0
  313. package/dist/lib/eval-conversation-handler.js +200 -0
  314. package/dist/lib/eval-conversation-handler.js.map +1 -0
  315. package/dist/lib/eval-executor.d.ts +21 -0
  316. package/dist/lib/eval-executor.d.ts.map +1 -0
  317. package/dist/lib/eval-executor.js +80 -0
  318. package/dist/lib/eval-executor.js.map +1 -0
  319. package/dist/lib/eval-executor.test.d.ts +2 -0
  320. package/dist/lib/eval-executor.test.d.ts.map +1 -0
  321. package/dist/lib/eval-executor.test.js +8 -0
  322. package/dist/lib/eval-executor.test.js.map +1 -0
  323. package/dist/lib/eval-grader.d.ts +38 -0
  324. package/dist/lib/eval-grader.d.ts.map +1 -0
  325. package/dist/lib/eval-grader.js +123 -0
  326. package/dist/lib/eval-grader.js.map +1 -0
  327. package/dist/lib/eval-grader.test.d.ts +2 -0
  328. package/dist/lib/eval-grader.test.d.ts.map +1 -0
  329. package/dist/lib/eval-grader.test.js +8 -0
  330. package/dist/lib/eval-grader.test.js.map +1 -0
  331. package/dist/lib/eval-meta-judge.d.ts +28 -0
  332. package/dist/lib/eval-meta-judge.d.ts.map +1 -0
  333. package/dist/lib/eval-meta-judge.js +116 -0
  334. package/dist/lib/eval-meta-judge.js.map +1 -0
  335. package/dist/lib/eval-trigger-tester.d.ts +19 -0
  336. package/dist/lib/eval-trigger-tester.d.ts.map +1 -0
  337. package/dist/lib/eval-trigger-tester.js +96 -0
  338. package/dist/lib/eval-trigger-tester.js.map +1 -0
  339. package/dist/lib/eval-worker.d.ts +12 -0
  340. package/dist/lib/eval-worker.d.ts.map +1 -0
  341. package/dist/lib/eval-worker.js +395 -0
  342. package/dist/lib/eval-worker.js.map +1 -0
  343. package/dist/lib/eval-worktree.d.ts +11 -0
  344. package/dist/lib/eval-worktree.d.ts.map +1 -0
  345. package/dist/lib/eval-worktree.js +87 -0
  346. package/dist/lib/eval-worktree.js.map +1 -0
  347. package/dist/lib/eval-worktree.test.d.ts +2 -0
  348. package/dist/lib/eval-worktree.test.d.ts.map +1 -0
  349. package/dist/lib/eval-worktree.test.js +68 -0
  350. package/dist/lib/eval-worktree.test.js.map +1 -0
  351. package/dist/lib/gateway-entry.d.ts +3 -0
  352. package/dist/lib/gateway-entry.d.ts.map +1 -0
  353. package/dist/lib/gateway-entry.js +19 -0
  354. package/dist/lib/gateway-entry.js.map +1 -0
  355. package/dist/lib/gateway-lifecycle.d.ts +9 -0
  356. package/dist/lib/gateway-lifecycle.d.ts.map +1 -0
  357. package/dist/lib/gateway-lifecycle.js +86 -0
  358. package/dist/lib/gateway-lifecycle.js.map +1 -0
  359. package/dist/lib/gateway.d.ts +12 -0
  360. package/dist/lib/gateway.d.ts.map +1 -0
  361. package/dist/lib/gateway.js +150 -0
  362. package/dist/lib/gateway.js.map +1 -0
  363. package/dist/lib/hooks-config.d.ts +95 -0
  364. package/dist/lib/hooks-config.d.ts.map +1 -0
  365. package/dist/lib/hooks-config.js +416 -0
  366. package/dist/lib/hooks-config.js.map +1 -0
  367. package/dist/lib/hooks-config.test.d.ts +2 -0
  368. package/dist/lib/hooks-config.test.d.ts.map +1 -0
  369. package/dist/lib/hooks-config.test.js +231 -0
  370. package/dist/lib/hooks-config.test.js.map +1 -0
  371. package/dist/lib/insights-prompts.d.ts +13 -0
  372. package/dist/lib/insights-prompts.d.ts.map +1 -0
  373. package/dist/lib/insights-prompts.js +145 -0
  374. package/dist/lib/insights-prompts.js.map +1 -0
  375. package/dist/lib/insights-worker.d.ts +10 -0
  376. package/dist/lib/insights-worker.d.ts.map +1 -0
  377. package/dist/lib/insights-worker.js +329 -0
  378. package/dist/lib/insights-worker.js.map +1 -0
  379. package/dist/lib/llm-client.d.ts +26 -0
  380. package/dist/lib/llm-client.d.ts.map +1 -0
  381. package/dist/lib/llm-client.js +142 -0
  382. package/dist/lib/llm-client.js.map +1 -0
  383. package/dist/lib/llm-client.test.d.ts +2 -0
  384. package/dist/lib/llm-client.test.d.ts.map +1 -0
  385. package/dist/lib/llm-client.test.js +62 -0
  386. package/dist/lib/llm-client.test.js.map +1 -0
  387. package/dist/lib/output.d.ts +4 -0
  388. package/dist/lib/output.d.ts.map +1 -0
  389. package/dist/lib/output.js +36 -0
  390. package/dist/lib/output.js.map +1 -0
  391. package/dist/lib/output.test.d.ts +2 -0
  392. package/dist/lib/output.test.d.ts.map +1 -0
  393. package/dist/lib/output.test.js +71 -0
  394. package/dist/lib/output.test.js.map +1 -0
  395. package/dist/lib/provider-aggregator.d.ts +24 -0
  396. package/dist/lib/provider-aggregator.d.ts.map +1 -0
  397. package/dist/lib/provider-aggregator.js +57 -0
  398. package/dist/lib/provider-aggregator.js.map +1 -0
  399. package/dist/lib/provider-aggregator.test.d.ts +2 -0
  400. package/dist/lib/provider-aggregator.test.d.ts.map +1 -0
  401. package/dist/lib/provider-aggregator.test.js +103 -0
  402. package/dist/lib/provider-aggregator.test.js.map +1 -0
  403. package/dist/lib/skills-loader.d.ts +6 -0
  404. package/dist/lib/skills-loader.d.ts.map +1 -0
  405. package/dist/lib/skills-loader.js +51 -0
  406. package/dist/lib/skills-loader.js.map +1 -0
  407. package/dist/lib/types.d.ts +48 -0
  408. package/dist/lib/types.d.ts.map +1 -0
  409. package/dist/lib/types.js +7 -0
  410. package/dist/lib/types.js.map +1 -0
  411. package/dist/test-helpers.d.ts +58 -0
  412. package/dist/test-helpers.d.ts.map +1 -0
  413. package/dist/test-helpers.js +58 -0
  414. package/dist/test-helpers.js.map +1 -0
  415. package/oclif.manifest.json +3197 -0
  416. package/package.json +76 -0
@@ -0,0 +1,306 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { execSync, spawn, spawnSync } from 'node:child_process';
3
+ import { appendFileSync, existsSync, mkdirSync, openSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { join, resolve } from 'node:path';
6
+ import { BaseCommand } from '../../base-command.js';
7
+ import { isAuthenticated } from '../../lib/auth.js';
8
+ const DEFAULT_PORT = 8788;
9
+ const CONFIG_DIR = join(homedir(), '.config', 'rulemetric');
10
+ const PID_FILE = join(CONFIG_DIR, 'proxy.pid');
11
+ const LOG_FILE = join(CONFIG_DIR, 'proxy.log');
12
+ const DOCKER_IMAGE = 'rulemetric/proxy';
13
+ const DOCKER_CONTAINER = 'rulemetric-proxy';
14
+ function findAddonPath() {
15
+ const candidates = [
16
+ resolve(import.meta.dirname, '../../../../../packages/proxy/addon/rulemetric_addon.py'),
17
+ resolve(import.meta.dirname, '../../../node_modules/@rulemetric/proxy/addon/rulemetric_addon.py'),
18
+ resolve(import.meta.dirname, '../../../../../node_modules/@rulemetric/proxy/addon/rulemetric_addon.py'),
19
+ ];
20
+ for (const p of candidates) {
21
+ if (existsSync(p))
22
+ return p;
23
+ }
24
+ throw new Error('Could not find rulemetric_addon.py. Is @rulemetric/proxy installed?\n' +
25
+ 'Searched:\n' + candidates.map(c => ` ${c}`).join('\n'));
26
+ }
27
+ function findDockerfilePath() {
28
+ const candidates = [
29
+ resolve(import.meta.dirname, '../../../../../packages/proxy'),
30
+ resolve(import.meta.dirname, '../../../node_modules/@rulemetric/proxy'),
31
+ resolve(import.meta.dirname, '../../../../../node_modules/@rulemetric/proxy'),
32
+ ];
33
+ for (const p of candidates) {
34
+ if (existsSync(join(p, 'Dockerfile')))
35
+ return p;
36
+ }
37
+ throw new Error('Could not find proxy Dockerfile. Is @rulemetric/proxy installed?');
38
+ }
39
+ function dockerImageExists() {
40
+ const result = spawnSync('docker', ['image', 'inspect', DOCKER_IMAGE], { stdio: 'ignore' });
41
+ return result.status === 0;
42
+ }
43
+ function dockerContainerRunning() {
44
+ const result = spawnSync('docker', ['container', 'inspect', '-f', '{{.State.Running}}', DOCKER_CONTAINER], {
45
+ encoding: 'utf-8',
46
+ stdio: ['ignore', 'pipe', 'ignore'],
47
+ });
48
+ return result.status === 0 && result.stdout?.trim() === 'true';
49
+ }
50
+ export default class ProxyStart extends BaseCommand {
51
+ static description = 'Start context capture proxy';
52
+ static examples = [
53
+ '<%= config.bin %> proxy start',
54
+ '<%= config.bin %> proxy start --docker',
55
+ '<%= config.bin %> proxy start --port 9090',
56
+ '<%= config.bin %> proxy start --web',
57
+ ];
58
+ static flags = {
59
+ port: Flags.integer({ char: 'p', default: DEFAULT_PORT, description: 'Proxy listen port' }),
60
+ docker: Flags.boolean({ char: 'd', default: false, description: 'Run proxy in Docker (no local mitmproxy needed)' }),
61
+ web: Flags.boolean({ default: false, description: 'Launch mitmweb debug UI instead of mitmdump (local mode only)' }),
62
+ 'skip-checks': Flags.boolean({ default: false, description: 'Skip prerequisite checks' }),
63
+ build: Flags.boolean({ default: false, description: 'Force rebuild Docker image' }),
64
+ };
65
+ async run() {
66
+ const { flags } = await this.parse(ProxyStart);
67
+ const port = flags.port;
68
+ if (flags.docker) {
69
+ await this.startDocker(port, flags.build);
70
+ }
71
+ else {
72
+ await this.startLocal(port, flags.web, flags['skip-checks']);
73
+ }
74
+ }
75
+ async startDocker(port, forceBuild) {
76
+ // Check Docker is available
77
+ try {
78
+ execSync('docker info', { stdio: 'ignore' });
79
+ }
80
+ catch {
81
+ this.error('Docker is not running. Start Docker Desktop and try again.');
82
+ }
83
+ // Check if already running
84
+ if (dockerContainerRunning()) {
85
+ this.error(`Proxy container already running. Stop it first: rulemetric proxy stop`);
86
+ }
87
+ // Find the compose file (monorepo root or project root)
88
+ const composeFile = this.findComposeFile();
89
+ // Ensure mount dirs exist
90
+ const certDir = join(homedir(), '.mitmproxy');
91
+ mkdirSync(certDir, { recursive: true });
92
+ const tmpDir = process.env.TMPDIR || '/tmp';
93
+ mkdirSync(join(tmpDir, 'rulemetric'), { recursive: true });
94
+ // Load auth from env file if not in environment
95
+ const envOverrides = {
96
+ PROXY_PORT: String(port),
97
+ RULEMETRIC_PROJECT_PATH: process.cwd(),
98
+ };
99
+ if (!process.env.RULEMETRIC_API_KEY && !process.env.RULEMETRIC_ACCESS_TOKEN) {
100
+ const envFile = join(homedir(), '.config', 'rulemetric', 'env');
101
+ if (existsSync(envFile)) {
102
+ for (const line of readFileSync(envFile, 'utf-8').split('\n')) {
103
+ const trimmed = line.trim();
104
+ if (trimmed && !trimmed.startsWith('#') && trimmed.includes('=')) {
105
+ const [key, ...rest] = trimmed.split('=');
106
+ envOverrides[key] = rest.join('=');
107
+ }
108
+ }
109
+ }
110
+ }
111
+ if (composeFile) {
112
+ // Use docker compose
113
+ const composeEnv = { ...process.env, ...envOverrides };
114
+ const buildFlag = forceBuild ? '--build' : '';
115
+ const args = ['compose', '-f', composeFile, 'up', '-d', 'proxy'];
116
+ if (forceBuild)
117
+ args.splice(4, 0, '--build');
118
+ this.log(forceBuild ? 'Building and starting proxy via Docker Compose...' : 'Starting proxy via Docker Compose...');
119
+ const result = spawnSync('docker', args, {
120
+ env: composeEnv,
121
+ stdio: 'inherit',
122
+ });
123
+ if (result.status !== 0) {
124
+ this.error('Docker Compose failed. Try: docker compose -f docker-compose.yml up proxy');
125
+ }
126
+ }
127
+ else {
128
+ // Fallback: raw docker run
129
+ if (forceBuild || !dockerImageExists()) {
130
+ const proxyDir = findDockerfilePath();
131
+ this.log('Building proxy Docker image...');
132
+ const build = spawnSync('docker', ['build', '-t', DOCKER_IMAGE, proxyDir], { stdio: 'inherit' });
133
+ if (build.status !== 0) {
134
+ this.error('Docker build failed');
135
+ }
136
+ }
137
+ spawnSync('docker', ['rm', '-f', DOCKER_CONTAINER], { stdio: 'ignore' });
138
+ const envArgs = [];
139
+ for (const [key, val] of Object.entries(envOverrides)) {
140
+ envArgs.push('-e', `${key}=${val}`);
141
+ }
142
+ // Pass through from current env
143
+ for (const key of ['RULEMETRIC_API_URL', 'RULEMETRIC_API_KEY', 'RULEMETRIC_ACCESS_TOKEN']) {
144
+ if (process.env[key])
145
+ envArgs.push('-e', `${key}=${process.env[key]}`);
146
+ }
147
+ const dockerArgs = [
148
+ 'run', '-d',
149
+ '--name', DOCKER_CONTAINER,
150
+ '-p', `${port}:8787`,
151
+ '-v', `${certDir}:/root/.mitmproxy`,
152
+ '-v', `${join(tmpDir, 'rulemetric')}:/tmp/rulemetric:ro`,
153
+ ...envArgs,
154
+ DOCKER_IMAGE,
155
+ ];
156
+ const result = spawnSync('docker', dockerArgs, { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] });
157
+ if (result.status !== 0) {
158
+ this.error(`Failed to start container: ${result.stderr}`);
159
+ }
160
+ }
161
+ // Write marker so proxy stop knows it's Docker
162
+ mkdirSync(CONFIG_DIR, { recursive: true });
163
+ writeFileSync(PID_FILE, `docker:${DOCKER_CONTAINER}`);
164
+ // Wait for container to be ready
165
+ await new Promise(resolve => setTimeout(resolve, 2000));
166
+ const inspectResult = spawnSync('docker', ['container', 'inspect', '-f', '{{.Id}}', DOCKER_CONTAINER], {
167
+ encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],
168
+ });
169
+ const containerId = inspectResult.stdout?.trim().slice(0, 12) || 'unknown';
170
+ this.log(`Proxy running in Docker on localhost:${port} (container: ${containerId})`);
171
+ this.log('');
172
+ this.log('View logs: rulemetric proxy logs -f');
173
+ }
174
+ findComposeFile() {
175
+ const candidates = [
176
+ join(process.cwd(), 'docker-compose.yml'),
177
+ resolve(import.meta.dirname, '../../../../../docker-compose.yml'),
178
+ ];
179
+ for (const p of candidates) {
180
+ if (existsSync(p))
181
+ return p;
182
+ }
183
+ return null;
184
+ }
185
+ async startLocal(port, useWeb, skipChecks) {
186
+ // Check if already running
187
+ if (existsSync(PID_FILE)) {
188
+ const content = readFileSync(PID_FILE, 'utf-8').trim();
189
+ if (content.startsWith('docker:')) {
190
+ this.error('Proxy is running in Docker. Stop it first: rulemetric proxy stop');
191
+ }
192
+ const pid = Number.parseInt(content, 10);
193
+ if (!Number.isNaN(pid)) {
194
+ try {
195
+ process.kill(pid, 0);
196
+ this.error(`Proxy already running (PID ${pid}). Stop it first: rulemetric proxy stop`);
197
+ }
198
+ catch { /* stale PID, continue */ }
199
+ }
200
+ }
201
+ // Check mitmproxy is installed
202
+ const binary = useWeb ? 'mitmweb' : 'mitmdump';
203
+ try {
204
+ execSync(`which ${binary}`, { stdio: 'ignore' });
205
+ }
206
+ catch {
207
+ this.error(`${binary} not found. Use Docker mode instead:\n` +
208
+ ' rulemetric proxy start --docker\n\n' +
209
+ 'Or install mitmproxy locally:\n' +
210
+ ' pipx install mitmproxy\n' +
211
+ ' brew install mitmproxy');
212
+ }
213
+ // Prerequisite warnings (non-blocking)
214
+ if (!skipChecks) {
215
+ const warnings = [];
216
+ if (!isAuthenticated() && !process.env.RULEMETRIC_API_KEY) {
217
+ const envFile = join(homedir(), '.config', 'rulemetric', 'env');
218
+ let hasEnvAuth = false;
219
+ if (existsSync(envFile)) {
220
+ const content = readFileSync(envFile, 'utf-8');
221
+ hasEnvAuth = content.includes('RULEMETRIC_API_KEY') || content.includes('RULEMETRIC_ACCESS_TOKEN');
222
+ }
223
+ if (!hasEnvAuth) {
224
+ warnings.push('Not authenticated — snapshots cannot be stored. Run `rulemetric auth login`.');
225
+ }
226
+ }
227
+ const certPath = join(homedir(), '.mitmproxy', 'mitmproxy-ca-cert.pem');
228
+ if (!existsSync(certPath)) {
229
+ warnings.push('CA cert not found — HTTPS interception may fail. Run `rulemetric proxy setup`.');
230
+ }
231
+ const settingsPath = join(process.cwd(), '.claude', 'settings.json');
232
+ if (!existsSync(settingsPath)) {
233
+ warnings.push('Session hooks not installed — snapshots won\'t link to sessions. Run `rulemetric hooks install`.');
234
+ }
235
+ if (warnings.length > 0) {
236
+ for (const w of warnings) {
237
+ this.log(` Warning: ${w}`);
238
+ }
239
+ this.log('');
240
+ }
241
+ }
242
+ // Find addon
243
+ const addonPath = findAddonPath();
244
+ // Build env — pass through auth credentials for the reporter
245
+ const env = {
246
+ ...process.env,
247
+ RULEMETRIC_PROJECT_PATH: process.cwd(),
248
+ };
249
+ // Load auth from env file if not already in environment
250
+ if (!env.RULEMETRIC_API_KEY && !env.RULEMETRIC_ACCESS_TOKEN) {
251
+ const envFile = join(homedir(), '.config', 'rulemetric', 'env');
252
+ if (existsSync(envFile)) {
253
+ for (const line of readFileSync(envFile, 'utf-8').split('\n')) {
254
+ const trimmed = line.trim();
255
+ if (trimmed && !trimmed.startsWith('#') && trimmed.includes('=')) {
256
+ const [key, ...rest] = trimmed.split('=');
257
+ env[key] = rest.join('=');
258
+ }
259
+ }
260
+ }
261
+ }
262
+ // Ensure config dir exists
263
+ mkdirSync(CONFIG_DIR, { recursive: true });
264
+ // Open log file for proxy output (fd for spawn stdio)
265
+ appendFileSync(LOG_FILE, `\n--- Proxy started at ${new Date().toISOString()} (port ${port}) ---\n`);
266
+ const logFd = openSync(LOG_FILE, 'a');
267
+ // Spawn mitmproxy with output redirected to log file
268
+ const args = [
269
+ '--listen-port', String(port),
270
+ '-s', addonPath,
271
+ '--set', 'console_eventlog_verbosity=info',
272
+ ];
273
+ const child = spawn(binary, args, {
274
+ env,
275
+ stdio: ['ignore', logFd, logFd],
276
+ detached: true,
277
+ });
278
+ child.unref();
279
+ if (!child.pid) {
280
+ this.error('Failed to start proxy process');
281
+ }
282
+ // Brief wait to check if process crashes immediately
283
+ await new Promise((resolve) => {
284
+ let exited = false;
285
+ child.once('exit', (code) => {
286
+ exited = true;
287
+ this.error(`Proxy exited immediately with code ${code}. Check logs:\n ${LOG_FILE}`);
288
+ });
289
+ setTimeout(() => {
290
+ if (!exited)
291
+ resolve();
292
+ }, 500);
293
+ });
294
+ // Write PID file
295
+ writeFileSync(PID_FILE, String(child.pid));
296
+ this.log(`Proxy running on localhost:${port} (PID ${child.pid})`);
297
+ this.log(`Log file: ${LOG_FILE}`);
298
+ if (useWeb) {
299
+ this.log('');
300
+ this.log('Debug UI: http://localhost:8081');
301
+ }
302
+ this.log('');
303
+ this.log('View logs: rulemetric proxy logs -f');
304
+ }
305
+ }
306
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/proxy/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ProxyStatus extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/proxy/status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,OAAgB,WAAW,SAAoD;IAE/E,OAAgB,QAAQ,WAAsC;IAExD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}
@@ -0,0 +1,65 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { BaseCommand } from '../../base-command.js';
6
+ import { isGatewayRunning, getGatewayPid, GATEWAY_PORT, MITMPROXY_PORT } from '../../lib/gateway-lifecycle.js';
7
+ const CONFIG_DIR = join(homedir(), '.config', 'rulemetric');
8
+ const PID_FILE = join(CONFIG_DIR, 'proxy.pid');
9
+ export default class ProxyStatus extends BaseCommand {
10
+ static description = 'Check gateway and context capture proxy status';
11
+ static examples = ['<%= config.bin %> proxy status'];
12
+ async run() {
13
+ await this.parse(ProxyStatus);
14
+ // Gateway status
15
+ if (isGatewayRunning()) {
16
+ const pid = getGatewayPid();
17
+ this.log(`Gateway: running (PID ${pid}) on :${GATEWAY_PORT}`);
18
+ }
19
+ else {
20
+ this.log(`Gateway: not running`);
21
+ }
22
+ // Mitmproxy status
23
+ if (!existsSync(PID_FILE)) {
24
+ this.log(`Mitmproxy: not running — routing direct (no capture)`);
25
+ return;
26
+ }
27
+ const content = readFileSync(PID_FILE, 'utf-8').trim();
28
+ // Docker mode
29
+ if (content.startsWith('docker:')) {
30
+ const containerName = content.slice('docker:'.length);
31
+ const result = spawnSync('docker', ['container', 'inspect', '-f', '{{.State.Status}}', containerName], {
32
+ encoding: 'utf-8',
33
+ stdio: ['ignore', 'pipe', 'ignore'],
34
+ });
35
+ const status = result.stdout?.trim();
36
+ if (result.status === 0 && status === 'running') {
37
+ this.log(`Mitmproxy: running in Docker (container: ${containerName}) on :${MITMPROXY_PORT} — capturing context`);
38
+ }
39
+ else {
40
+ this.log(`Mitmproxy: container ${status || 'not running'} (stale)`);
41
+ }
42
+ return;
43
+ }
44
+ // Local mode
45
+ const pid = Number.parseInt(content, 10);
46
+ if (Number.isNaN(pid)) {
47
+ this.log('Mitmproxy: not running (invalid PID file)');
48
+ return;
49
+ }
50
+ try {
51
+ process.kill(pid, 0);
52
+ this.log(`Mitmproxy: running (PID ${pid}) on :${MITMPROXY_PORT} — capturing context`);
53
+ }
54
+ catch (err) {
55
+ const code = err.code;
56
+ if (code === 'EPERM') {
57
+ this.log(`Mitmproxy: running (PID ${pid}, owned by different user) on :${MITMPROXY_PORT}`);
58
+ }
59
+ else {
60
+ this.log('Mitmproxy: not running (stale PID file)');
61
+ }
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/proxy/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ProxyStop extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ private findComposeFile;
7
+ }
8
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/proxy/stop.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAAoC;IAEtD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD1B,OAAO,CAAC,eAAe;CAUxB"}
@@ -0,0 +1,77 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readFileSync, unlinkSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join, resolve } from 'node:path';
5
+ import { BaseCommand } from '../../base-command.js';
6
+ const CONFIG_DIR = join(homedir(), '.config', 'rulemetric');
7
+ const PID_FILE = join(CONFIG_DIR, 'proxy.pid');
8
+ export default class ProxyStop extends BaseCommand {
9
+ static description = 'Stop the context capture proxy';
10
+ static examples = ['<%= config.bin %> proxy stop'];
11
+ async run() {
12
+ await this.parse(ProxyStop);
13
+ if (!existsSync(PID_FILE)) {
14
+ this.log('No proxy process found (no PID file).');
15
+ return;
16
+ }
17
+ const content = readFileSync(PID_FILE, 'utf-8').trim();
18
+ // Docker mode: PID file contains "docker:<container-name>"
19
+ if (content.startsWith('docker:')) {
20
+ const containerName = content.slice('docker:'.length);
21
+ // Try docker compose first, fall back to docker stop
22
+ const composeFile = this.findComposeFile();
23
+ if (composeFile) {
24
+ spawnSync('docker', ['compose', '-f', composeFile, 'stop', 'proxy'], { stdio: 'inherit' });
25
+ spawnSync('docker', ['compose', '-f', composeFile, 'rm', '-f', 'proxy'], { stdio: 'ignore' });
26
+ }
27
+ else {
28
+ spawnSync('docker', ['stop', containerName], { stdio: 'ignore' });
29
+ spawnSync('docker', ['rm', containerName], { stdio: 'ignore' });
30
+ }
31
+ this.log(`Proxy container stopped.`);
32
+ try {
33
+ unlinkSync(PID_FILE);
34
+ }
35
+ catch { /* already gone */ }
36
+ return;
37
+ }
38
+ // Local mode: PID file contains a process ID
39
+ const pid = Number.parseInt(content, 10);
40
+ if (Number.isNaN(pid)) {
41
+ unlinkSync(PID_FILE);
42
+ this.log('Invalid PID file removed.');
43
+ return;
44
+ }
45
+ try {
46
+ process.kill(pid, 'SIGTERM');
47
+ this.log(`Proxy stopped (PID ${pid}).`);
48
+ }
49
+ catch (err) {
50
+ const code = err.code;
51
+ if (code === 'ESRCH') {
52
+ this.log('Proxy process not running (stale PID file removed).');
53
+ }
54
+ else {
55
+ this.error(`Failed to stop proxy: ${err.message}`);
56
+ }
57
+ }
58
+ try {
59
+ unlinkSync(PID_FILE);
60
+ }
61
+ catch { /* already gone */ }
62
+ this.log('');
63
+ this.log('Gateway is still running — Claude Code will route direct until proxy restarts.');
64
+ }
65
+ findComposeFile() {
66
+ const candidates = [
67
+ join(process.cwd(), 'docker-compose.yml'),
68
+ resolve(import.meta.dirname, '../../../../../docker-compose.yml'),
69
+ ];
70
+ for (const p of candidates) {
71
+ if (existsSync(p))
72
+ return p;
73
+ }
74
+ return null;
75
+ }
76
+ }
77
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/proxy/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ServiceInstall extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ port: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ private findProjectRoot;
11
+ private findBinary;
12
+ private loadEnvVars;
13
+ private buildPlist;
14
+ private buildWorkerPlist;
15
+ private waitForApi;
16
+ }
17
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/service/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAoBpD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,OAAgB,WAAW,SAAoE;IAE/F,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;MAWnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8J1B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,UAAU;IAsElB,OAAO,CAAC,gBAAgB;YAsEV,UAAU;CAiBzB"}