@rulemetric/cli 0.1.1 → 0.2.0

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 (251) hide show
  1. package/README.md +66 -0
  2. package/dist/base-command.d.ts.map +1 -1
  3. package/dist/base-command.js +15 -0
  4. package/dist/base-command.js.map +1 -1
  5. package/dist/commands/auth/login.d.ts.map +1 -1
  6. package/dist/commands/auth/login.js +7 -0
  7. package/dist/commands/auth/login.js.map +1 -1
  8. package/dist/commands/crons/list.d.ts +7 -0
  9. package/dist/commands/crons/list.d.ts.map +1 -0
  10. package/dist/commands/crons/list.js +24 -0
  11. package/dist/commands/crons/list.js.map +1 -0
  12. package/dist/commands/crons/run.d.ts +13 -0
  13. package/dist/commands/crons/run.d.ts.map +1 -0
  14. package/dist/commands/crons/run.js +48 -0
  15. package/dist/commands/crons/run.js.map +1 -0
  16. package/dist/commands/evals/listen.d.ts +28 -2
  17. package/dist/commands/evals/listen.d.ts.map +1 -1
  18. package/dist/commands/evals/listen.js +159 -25
  19. package/dist/commands/evals/listen.js.map +1 -1
  20. package/dist/commands/evals/listen.test.d.ts +2 -0
  21. package/dist/commands/evals/listen.test.d.ts.map +1 -0
  22. package/dist/commands/evals/listen.test.js +48 -0
  23. package/dist/commands/evals/listen.test.js.map +1 -0
  24. package/dist/commands/gateway/ensure.js +1 -1
  25. package/dist/commands/gateway/ensure.js.map +1 -1
  26. package/dist/commands/hooks/install.d.ts.map +1 -1
  27. package/dist/commands/hooks/install.js +40 -3
  28. package/dist/commands/hooks/install.js.map +1 -1
  29. package/dist/commands/hooks/run.js +1 -1
  30. package/dist/commands/hooks/run.js.map +1 -1
  31. package/dist/commands/hooks/uninstall.d.ts.map +1 -1
  32. package/dist/commands/hooks/uninstall.js +9 -1
  33. package/dist/commands/hooks/uninstall.js.map +1 -1
  34. package/dist/commands/org/current.d.ts +7 -0
  35. package/dist/commands/org/current.d.ts.map +1 -0
  36. package/dist/commands/org/current.js +70 -0
  37. package/dist/commands/org/current.js.map +1 -0
  38. package/dist/commands/org/list.d.ts +7 -0
  39. package/dist/commands/org/list.d.ts.map +1 -0
  40. package/dist/commands/org/list.js +37 -0
  41. package/dist/commands/org/list.js.map +1 -0
  42. package/dist/commands/org/switch.d.ts +13 -0
  43. package/dist/commands/org/switch.d.ts.map +1 -0
  44. package/dist/commands/org/switch.js +52 -0
  45. package/dist/commands/org/switch.js.map +1 -0
  46. package/dist/commands/proxy/restart.d.ts +11 -0
  47. package/dist/commands/proxy/restart.d.ts.map +1 -0
  48. package/dist/commands/proxy/restart.js +36 -0
  49. package/dist/commands/proxy/restart.js.map +1 -0
  50. package/dist/commands/proxy/start.d.ts.map +1 -1
  51. package/dist/commands/proxy/start.js +4 -0
  52. package/dist/commands/proxy/start.js.map +1 -1
  53. package/dist/commands/service/install.d.ts +16 -0
  54. package/dist/commands/service/install.d.ts.map +1 -1
  55. package/dist/commands/service/install.js +145 -6
  56. package/dist/commands/service/install.js.map +1 -1
  57. package/dist/commands/service/uninstall.d.ts.map +1 -1
  58. package/dist/commands/service/uninstall.js +28 -0
  59. package/dist/commands/service/uninstall.js.map +1 -1
  60. package/dist/commands/sessions/start.d.ts.map +1 -1
  61. package/dist/commands/sessions/start.js +5 -0
  62. package/dist/commands/sessions/start.js.map +1 -1
  63. package/dist/commands/signals/report.d.ts +10 -0
  64. package/dist/commands/signals/report.d.ts.map +1 -0
  65. package/dist/commands/signals/report.js +35 -0
  66. package/dist/commands/signals/report.js.map +1 -0
  67. package/dist/commands/signals/report.test.d.ts +2 -0
  68. package/dist/commands/signals/report.test.d.ts.map +1 -0
  69. package/dist/commands/signals/report.test.js +65 -0
  70. package/dist/commands/signals/report.test.js.map +1 -0
  71. package/dist/commands/skills/export-approved.d.ts +10 -0
  72. package/dist/commands/skills/export-approved.d.ts.map +1 -0
  73. package/dist/commands/skills/export-approved.js +31 -0
  74. package/dist/commands/skills/export-approved.js.map +1 -0
  75. package/dist/commands/skills/publish.d.ts +17 -0
  76. package/dist/commands/skills/publish.d.ts.map +1 -0
  77. package/dist/commands/skills/publish.js +80 -0
  78. package/dist/commands/skills/publish.js.map +1 -0
  79. package/dist/commands/skills/update.d.ts +3 -0
  80. package/dist/commands/skills/update.d.ts.map +1 -1
  81. package/dist/commands/skills/update.js +17 -6
  82. package/dist/commands/skills/update.js.map +1 -1
  83. package/dist/commands/suggestions/accept.d.ts +16 -0
  84. package/dist/commands/suggestions/accept.d.ts.map +1 -0
  85. package/dist/commands/suggestions/accept.js +61 -0
  86. package/dist/commands/suggestions/accept.js.map +1 -0
  87. package/dist/commands/suggestions/accept.test.d.ts +2 -0
  88. package/dist/commands/suggestions/accept.test.d.ts.map +1 -0
  89. package/dist/commands/suggestions/accept.test.js +52 -0
  90. package/dist/commands/suggestions/accept.test.js.map +1 -0
  91. package/dist/commands/suggestions/dismiss.d.ts +10 -0
  92. package/dist/commands/suggestions/dismiss.d.ts.map +1 -0
  93. package/dist/commands/suggestions/dismiss.js +26 -0
  94. package/dist/commands/suggestions/dismiss.js.map +1 -0
  95. package/dist/commands/suggestions/list.d.ts +10 -0
  96. package/dist/commands/suggestions/list.d.ts.map +1 -0
  97. package/dist/commands/suggestions/list.js +40 -0
  98. package/dist/commands/suggestions/list.js.map +1 -0
  99. package/dist/commands/suggestions/refresh.d.ts +7 -0
  100. package/dist/commands/suggestions/refresh.d.ts.map +1 -0
  101. package/dist/commands/suggestions/refresh.js +11 -0
  102. package/dist/commands/suggestions/refresh.js.map +1 -0
  103. package/dist/dashboard/Dashboard.d.ts.map +1 -1
  104. package/dist/dashboard/Dashboard.js +7 -1
  105. package/dist/dashboard/Dashboard.js.map +1 -1
  106. package/dist/lib/active-org-refresh.d.ts +22 -0
  107. package/dist/lib/active-org-refresh.d.ts.map +1 -0
  108. package/dist/lib/active-org-refresh.js +108 -0
  109. package/dist/lib/active-org-refresh.js.map +1 -0
  110. package/dist/lib/active-org-refresh.test.d.ts +2 -0
  111. package/dist/lib/active-org-refresh.test.d.ts.map +1 -0
  112. package/dist/lib/active-org-refresh.test.js +190 -0
  113. package/dist/lib/active-org-refresh.test.js.map +1 -0
  114. package/dist/lib/active-org.d.ts +43 -0
  115. package/dist/lib/active-org.d.ts.map +1 -0
  116. package/dist/lib/active-org.js +96 -0
  117. package/dist/lib/active-org.js.map +1 -0
  118. package/dist/lib/active-org.test.d.ts +2 -0
  119. package/dist/lib/active-org.test.d.ts.map +1 -0
  120. package/dist/lib/active-org.test.js +147 -0
  121. package/dist/lib/active-org.test.js.map +1 -0
  122. package/dist/lib/cron-registry.d.ts +47 -0
  123. package/dist/lib/cron-registry.d.ts.map +1 -0
  124. package/dist/lib/cron-registry.js +102 -0
  125. package/dist/lib/cron-registry.js.map +1 -0
  126. package/dist/lib/cron-registry.test.d.ts +2 -0
  127. package/dist/lib/cron-registry.test.d.ts.map +1 -0
  128. package/dist/lib/cron-registry.test.js +136 -0
  129. package/dist/lib/cron-registry.test.js.map +1 -0
  130. package/dist/lib/cron-runner.d.ts +16 -0
  131. package/dist/lib/cron-runner.d.ts.map +1 -0
  132. package/dist/lib/cron-runner.js +68 -0
  133. package/dist/lib/cron-runner.js.map +1 -0
  134. package/dist/lib/detect-languages.d.ts +7 -0
  135. package/dist/lib/detect-languages.d.ts.map +1 -0
  136. package/dist/lib/detect-languages.js +113 -0
  137. package/dist/lib/detect-languages.js.map +1 -0
  138. package/dist/lib/detect-languages.test.d.ts +2 -0
  139. package/dist/lib/detect-languages.test.d.ts.map +1 -0
  140. package/dist/lib/detect-languages.test.js +29 -0
  141. package/dist/lib/detect-languages.test.js.map +1 -0
  142. package/dist/lib/eval-executor.d.ts.map +1 -1
  143. package/dist/lib/eval-executor.js +5 -2
  144. package/dist/lib/eval-executor.js.map +1 -1
  145. package/dist/lib/gateway-entry.js +4 -1
  146. package/dist/lib/gateway-entry.js.map +1 -1
  147. package/dist/lib/gateway-lifecycle.d.ts +1 -1
  148. package/dist/lib/gateway-lifecycle.d.ts.map +1 -1
  149. package/dist/lib/gateway-lifecycle.js +13 -2
  150. package/dist/lib/gateway-lifecycle.js.map +1 -1
  151. package/dist/lib/gateway.d.ts +4 -5
  152. package/dist/lib/gateway.d.ts.map +1 -1
  153. package/dist/lib/gateway.js +68 -2
  154. package/dist/lib/gateway.js.map +1 -1
  155. package/dist/lib/graphile-worker-runner.d.ts +124 -0
  156. package/dist/lib/graphile-worker-runner.d.ts.map +1 -0
  157. package/dist/lib/graphile-worker-runner.js +526 -0
  158. package/dist/lib/graphile-worker-runner.js.map +1 -0
  159. package/dist/lib/graphile-worker-runner.test.d.ts +2 -0
  160. package/dist/lib/graphile-worker-runner.test.d.ts.map +1 -0
  161. package/dist/lib/graphile-worker-runner.test.js +153 -0
  162. package/dist/lib/graphile-worker-runner.test.js.map +1 -0
  163. package/dist/lib/handlers/cron-close-stale-sessions.d.ts +3 -0
  164. package/dist/lib/handlers/cron-close-stale-sessions.d.ts.map +1 -0
  165. package/dist/lib/handlers/cron-close-stale-sessions.js +8 -0
  166. package/dist/lib/handlers/cron-close-stale-sessions.js.map +1 -0
  167. package/dist/lib/handlers/cron-data-integrity-audit.d.ts +3 -0
  168. package/dist/lib/handlers/cron-data-integrity-audit.d.ts.map +1 -0
  169. package/dist/lib/handlers/cron-data-integrity-audit.js +16 -0
  170. package/dist/lib/handlers/cron-data-integrity-audit.js.map +1 -0
  171. package/dist/lib/handlers/cron-refresh-skills.d.ts +3 -0
  172. package/dist/lib/handlers/cron-refresh-skills.d.ts.map +1 -0
  173. package/dist/lib/handlers/cron-refresh-skills.js +91 -0
  174. package/dist/lib/handlers/cron-refresh-skills.js.map +1 -0
  175. package/dist/lib/handlers/cron-refresh-skills.test.d.ts +2 -0
  176. package/dist/lib/handlers/cron-refresh-skills.test.d.ts.map +1 -0
  177. package/dist/lib/handlers/cron-refresh-skills.test.js +114 -0
  178. package/dist/lib/handlers/cron-refresh-skills.test.js.map +1 -0
  179. package/dist/lib/handlers/cron-regenerate-insights.d.ts +3 -0
  180. package/dist/lib/handlers/cron-regenerate-insights.d.ts.map +1 -0
  181. package/dist/lib/handlers/cron-regenerate-insights.js +6 -0
  182. package/dist/lib/handlers/cron-regenerate-insights.js.map +1 -0
  183. package/dist/lib/handlers/cron-suggest-instructions.d.ts +3 -0
  184. package/dist/lib/handlers/cron-suggest-instructions.d.ts.map +1 -0
  185. package/dist/lib/handlers/cron-suggest-instructions.js +159 -0
  186. package/dist/lib/handlers/cron-suggest-instructions.js.map +1 -0
  187. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts +2 -0
  188. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts.map +1 -0
  189. package/dist/lib/handlers/cron-suggest-instructions.test.js +80 -0
  190. package/dist/lib/handlers/cron-suggest-instructions.test.js.map +1 -0
  191. package/dist/lib/handlers/process-conversation.d.ts +35 -0
  192. package/dist/lib/handlers/process-conversation.d.ts.map +1 -0
  193. package/dist/lib/handlers/process-conversation.js +35 -0
  194. package/dist/lib/handlers/process-conversation.js.map +1 -0
  195. package/dist/lib/handlers/process-eval.d.ts +32 -0
  196. package/dist/lib/handlers/process-eval.d.ts.map +1 -0
  197. package/dist/lib/handlers/process-eval.js +207 -0
  198. package/dist/lib/handlers/process-eval.js.map +1 -0
  199. package/dist/lib/handlers/process-insights.d.ts +39 -0
  200. package/dist/lib/handlers/process-insights.d.ts.map +1 -0
  201. package/dist/lib/handlers/process-insights.js +300 -0
  202. package/dist/lib/handlers/process-insights.js.map +1 -0
  203. package/dist/lib/handlers/process-launch.d.ts +29 -0
  204. package/dist/lib/handlers/process-launch.d.ts.map +1 -0
  205. package/dist/lib/handlers/process-launch.js +41 -0
  206. package/dist/lib/handlers/process-launch.js.map +1 -0
  207. package/dist/lib/hooks-config.d.ts +28 -4
  208. package/dist/lib/hooks-config.d.ts.map +1 -1
  209. package/dist/lib/hooks-config.js +138 -10
  210. package/dist/lib/hooks-config.js.map +1 -1
  211. package/dist/lib/llm-client.d.ts.map +1 -1
  212. package/dist/lib/llm-client.js +149 -16
  213. package/dist/lib/llm-client.js.map +1 -1
  214. package/dist/lib/mirror-writer-db.d.ts +12 -0
  215. package/dist/lib/mirror-writer-db.d.ts.map +1 -0
  216. package/dist/lib/mirror-writer-db.js +51 -0
  217. package/dist/lib/mirror-writer-db.js.map +1 -0
  218. package/dist/lib/mirror-writer.d.ts +35 -0
  219. package/dist/lib/mirror-writer.d.ts.map +1 -0
  220. package/dist/lib/mirror-writer.js +27 -0
  221. package/dist/lib/mirror-writer.js.map +1 -0
  222. package/dist/lib/mirror-writer.test.d.ts +2 -0
  223. package/dist/lib/mirror-writer.test.d.ts.map +1 -0
  224. package/dist/lib/mirror-writer.test.js +47 -0
  225. package/dist/lib/mirror-writer.test.js.map +1 -0
  226. package/dist/lib/permanent-job-error.d.ts +17 -0
  227. package/dist/lib/permanent-job-error.d.ts.map +1 -0
  228. package/dist/lib/permanent-job-error.js +23 -0
  229. package/dist/lib/permanent-job-error.js.map +1 -0
  230. package/dist/lib/permanent-job-error.test.d.ts +2 -0
  231. package/dist/lib/permanent-job-error.test.d.ts.map +1 -0
  232. package/dist/lib/permanent-job-error.test.js +29 -0
  233. package/dist/lib/permanent-job-error.test.js.map +1 -0
  234. package/dist/lib/version-check.d.ts +11 -0
  235. package/dist/lib/version-check.d.ts.map +1 -0
  236. package/dist/lib/version-check.js +106 -0
  237. package/dist/lib/version-check.js.map +1 -0
  238. package/oclif.manifest.json +611 -81
  239. package/package.json +19 -5
  240. package/dist/commands/insights/sync.d.ts +0 -17
  241. package/dist/commands/insights/sync.d.ts.map +0 -1
  242. package/dist/commands/insights/sync.js +0 -477
  243. package/dist/commands/insights/sync.js.map +0 -1
  244. package/dist/lib/eval-worker.d.ts +0 -12
  245. package/dist/lib/eval-worker.d.ts.map +0 -1
  246. package/dist/lib/eval-worker.js +0 -395
  247. package/dist/lib/eval-worker.js.map +0 -1
  248. package/dist/lib/insights-worker.d.ts +0 -10
  249. package/dist/lib/insights-worker.d.ts.map +0 -1
  250. package/dist/lib/insights-worker.js +0 -329
  251. package/dist/lib/insights-worker.js.map +0 -1
@@ -4,7 +4,10 @@
4
4
  * Spawned as a detached child process by the CLI.
5
5
  */
6
6
  import { startGateway, GATEWAY_PORT, MITMPROXY_PORT } from './gateway.js';
7
- const { server, healthInterval } = startGateway(GATEWAY_PORT, MITMPROXY_PORT);
7
+ const { server, healthInterval } = startGateway(GATEWAY_PORT, MITMPROXY_PORT, {
8
+ cliVersion: process.env.RULEMETRIC_CLI_VERSION,
9
+ cliEntry: process.env.RULEMETRIC_CLI_ENTRY,
10
+ });
8
11
  function shutdown() {
9
12
  console.log(`[${new Date().toISOString()}] gateway shutting down`);
10
13
  clearInterval(healthInterval);
@@ -1 +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"}
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,EAAE;IAC5E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;CAC3C,CAAC,CAAC;AAEH,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"}
@@ -4,6 +4,6 @@ export declare const GATEWAY_PORT = 8787;
4
4
  export declare const MITMPROXY_PORT = 8788;
5
5
  export declare function isGatewayRunning(): boolean;
6
6
  export declare function getGatewayPid(): number | null;
7
- export declare function spawnGateway(): number;
7
+ export declare function spawnGateway(cliVersion?: string): number;
8
8
  export declare function stopGateway(): boolean;
9
9
  //# sourceMappingURL=gateway-lifecycle.d.ts.map
@@ -1 +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"}
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,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAoCxD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAYrC"}
@@ -46,7 +46,7 @@ function findGatewayEntry() {
46
46
  throw new Error('Could not find gateway-entry.js. Is the CLI built?\n' +
47
47
  'Searched:\n' + candidates.map(c => ` ${c}`).join('\n'));
48
48
  }
49
- export function spawnGateway() {
49
+ export function spawnGateway(cliVersion) {
50
50
  if (isGatewayRunning()) {
51
51
  const pid = getGatewayPid();
52
52
  if (pid)
@@ -58,7 +58,18 @@ export function spawnGateway() {
58
58
  const child = spawn(process.execPath, [entryPath], {
59
59
  detached: true,
60
60
  stdio: ['ignore', logFd, logFd],
61
- env: process.env,
61
+ // The gateway inherits the spawning CLI's env. RULEMETRIC_CLI_VERSION
62
+ // identifies the CLI version that started this gateway — used to
63
+ // detect drift when a newer CLI starts mitmproxy with a different
64
+ // version. RULEMETRIC_CLI_ENTRY is the path to the oclif entry point
65
+ // (process.argv[1]) so the gateway can re-invoke the CLI for
66
+ // `proxy restart` without needing the binary in PATH. Falls back to
67
+ // "unknown" if the caller didn't pass them.
68
+ env: {
69
+ ...process.env,
70
+ RULEMETRIC_CLI_VERSION: cliVersion ?? 'unknown',
71
+ RULEMETRIC_CLI_ENTRY: process.argv[1] ?? '',
72
+ },
62
73
  });
63
74
  child.unref();
64
75
  if (!child.pid) {
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-lifecycle.js","sourceRoot":"","sources":["../../src/lib/gateway-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-lifecycle.js","sourceRoot":"","sources":["../../src/lib/gateway-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
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
1
  import * as http from 'node:http';
6
2
  export declare const GATEWAY_PORT = 8787;
7
3
  export declare const MITMPROXY_PORT = 8788;
8
- export declare function startGateway(port?: number, mitmproxyPort?: number): {
4
+ export declare function startGateway(port?: number, mitmproxyPort?: number, options?: {
5
+ cliVersion?: string;
6
+ cliEntry?: string;
7
+ }): {
9
8
  server: http.Server;
10
9
  healthInterval: NodeJS.Timeout;
11
10
  };
@@ -1 +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"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAKlC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,cAAc,OAAO,CAAC;AAoNnC,wBAAgB,YAAY,CAC1B,IAAI,GAAE,MAAqB,EAC3B,aAAa,GAAE,MAAuB,EACtC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAmCzD"}
@@ -2,18 +2,79 @@
2
2
  * Resilient HTTP proxy gateway that always accepts connections on GATEWAY_PORT.
3
3
  * Routes through mitmproxy when it's alive, direct to upstream when it's not.
4
4
  */
5
+ import { spawn } from 'node:child_process';
6
+ import * as fs from 'node:fs';
5
7
  import * as http from 'node:http';
6
8
  import * as net from 'node:net';
9
+ import * as os from 'node:os';
10
+ import * as path from 'node:path';
7
11
  export const GATEWAY_PORT = 8787;
8
12
  export const MITMPROXY_PORT = 8788;
9
13
  const HEALTH_INTERVAL = 3000;
10
14
  const HEALTH_TIMEOUT = 500;
15
+ // Floor on auto-restarts so a misconfigured drift can't trigger a restart
16
+ // loop. Plenty long for the user to fix any underlying problem manually.
17
+ const RESTART_COOLDOWN_MS = 60_000;
18
+ const VERSION_FILE = path.join(os.homedir(), '.config', 'rulemetric', 'proxy-addon.version');
11
19
  let isProxyAlive = false;
12
20
  let lastState = null;
21
+ // Drift state — tracked across health-check ticks. lastSeenAddonVersion is
22
+ // what the file said last time we read it; lastRestartAt prevents loops.
23
+ let lastSeenAddonVersion = null;
24
+ let lastRestartAt = 0;
13
25
  function log(msg) {
14
26
  const ts = new Date().toISOString();
15
27
  console.log(`[${ts}] ${msg}`);
16
28
  }
29
+ function readAddonVersion() {
30
+ try {
31
+ return fs.readFileSync(VERSION_FILE, 'utf-8').trim() || null;
32
+ }
33
+ catch {
34
+ // File may not exist yet (proxy not started, or older addon that doesn't
35
+ // write the file). Returning null disables drift checks for this tick.
36
+ return null;
37
+ }
38
+ }
39
+ function maybeRestartOnDrift(gatewayCliVersion, cliEntry) {
40
+ // No reference version means we can't compare — skip.
41
+ if (gatewayCliVersion === 'unknown' || !cliEntry)
42
+ return;
43
+ const addonVersion = readAddonVersion();
44
+ if (!addonVersion || addonVersion === 'unknown')
45
+ return;
46
+ // Same as last tick — nothing changed, no need to log or act.
47
+ if (addonVersion === lastSeenAddonVersion)
48
+ return;
49
+ lastSeenAddonVersion = addonVersion;
50
+ if (addonVersion === gatewayCliVersion) {
51
+ // Drift cleared (e.g. proxy was just restarted). Quiet log, no action.
52
+ log(`addon version matches gateway (${gatewayCliVersion})`);
53
+ return;
54
+ }
55
+ const sinceLast = Date.now() - lastRestartAt;
56
+ if (sinceLast < RESTART_COOLDOWN_MS) {
57
+ log(`addon version drift (gateway=${gatewayCliVersion}, addon=${addonVersion}); ` +
58
+ `restart cooldown active (${Math.round((RESTART_COOLDOWN_MS - sinceLast) / 1000)}s left)`);
59
+ return;
60
+ }
61
+ log(`addon version drift detected (gateway=${gatewayCliVersion}, addon=${addonVersion}). ` +
62
+ `Restarting proxy to pick up latest code.`);
63
+ lastRestartAt = Date.now();
64
+ // Detached spawn — we don't want the gateway to block on the restart
65
+ // completing. Output goes to /dev/null; the proxy.log captures the
66
+ // restart events from mitmproxy itself.
67
+ try {
68
+ const child = spawn(process.execPath, [cliEntry, 'proxy', 'restart'], {
69
+ detached: true,
70
+ stdio: 'ignore',
71
+ });
72
+ child.unref();
73
+ }
74
+ catch (err) {
75
+ log(`restart spawn failed: ${err.message}`);
76
+ }
77
+ }
17
78
  function checkProxyHealth(mitmproxyPort) {
18
79
  const sock = net.connect({ port: mitmproxyPort, timeout: HEALTH_TIMEOUT });
19
80
  sock.on('connect', () => {
@@ -124,7 +185,9 @@ function handleRequest(req, res, mitmproxyPort) {
124
185
  });
125
186
  req.pipe(proxyReq);
126
187
  }
127
- export function startGateway(port = GATEWAY_PORT, mitmproxyPort = MITMPROXY_PORT) {
188
+ export function startGateway(port = GATEWAY_PORT, mitmproxyPort = MITMPROXY_PORT, options = {}) {
189
+ const cliVersion = options.cliVersion ?? process.env.RULEMETRIC_CLI_VERSION ?? 'unknown';
190
+ const cliEntry = options.cliEntry ?? process.env.RULEMETRIC_CLI_ENTRY ?? null;
128
191
  const server = http.createServer((req, res) => {
129
192
  handleRequest(req, res, mitmproxyPort);
130
193
  });
@@ -139,11 +202,14 @@ export function startGateway(port = GATEWAY_PORT, mitmproxyPort = MITMPROXY_PORT
139
202
  });
140
203
  const healthInterval = setInterval(() => {
141
204
  checkProxyHealth(mitmproxyPort);
205
+ maybeRestartOnDrift(cliVersion, cliEntry);
142
206
  }, HEALTH_INTERVAL);
143
207
  // Do an immediate check
144
208
  checkProxyHealth(mitmproxyPort);
209
+ maybeRestartOnDrift(cliVersion, cliEntry);
145
210
  server.listen(port, '127.0.0.1', () => {
146
- log(`gateway listening on 127.0.0.1:${port} (mitmproxy target: :${mitmproxyPort})`);
211
+ log(`gateway listening on 127.0.0.1:${port} (mitmproxy target: :${mitmproxyPort}, ` +
212
+ `cli version: ${cliVersion})`);
147
213
  });
148
214
  return { server, healthInterval };
149
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/lib/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import { type JobHelpers, type Task } from 'graphile-worker';
2
+ export interface WorkerOptions {
3
+ connectionString: string;
4
+ log: (msg: string) => void;
5
+ /**
6
+ * The user this worker belongs to. Drives per-user task name suffixes
7
+ * (`process_eval__<userId>` etc.) so this laptop only claims its own
8
+ * user's jobs from the shared Graphile queue. The API enqueues with the
9
+ * matching suffix in `enqueueJob`. See docs/audits/2026-05-07-worker-audit.md.
10
+ */
11
+ userId: string;
12
+ /**
13
+ * Called when the watchdog has decided the worker is wedged and the
14
+ * process should die so launchd can relaunch it. Default: `process.exit(1)`.
15
+ * Injectable so tests can assert the watchdog fires without killing the
16
+ * test runner.
17
+ */
18
+ onFatal?: (reason: string) => void;
19
+ /** Override `Date.now` for deterministic watchdog tests. */
20
+ now?: () => number;
21
+ }
22
+ export interface WatchdogState {
23
+ consecutiveHeartbeatFailures: number;
24
+ /** ms timestamp of last successful pool:listen, or null if none yet. */
25
+ lastListenSuccessAt: number | null;
26
+ /** ms timestamp of last pool:listen:error, or null if none yet. */
27
+ lastListenErrorAt: number | null;
28
+ }
29
+ /**
30
+ * Pure decision function: given watchdog state and "now", return a fatal
31
+ * reason string if the worker should exit, or null if it's healthy. Extracted
32
+ * so the threshold logic can be unit-tested without booting graphile-worker
33
+ * or stubbing process.exit.
34
+ */
35
+ export declare function watchdogVerdict(_state: WatchdogState, _now: number): string | null;
36
+ /**
37
+ * Derive a short status string from watchdog state for `lastError` reporting.
38
+ * Returns null when nothing notable; otherwise a human-readable signal the
39
+ * dashboard can surface (e.g. "pg listen has been failing for 240s"). This is
40
+ * the logged-signal replacement for the old exit paths.
41
+ */
42
+ export declare function watchdogStatus(state: WatchdogState, now: number): string | null;
43
+ /**
44
+ * Parse `lsof -i TCP -P -n` output into a count of established sockets to the
45
+ * Supabase pooler, grouped by remote host.
46
+ *
47
+ * Matches BOTH pooler ports: 6543 (transaction mode) and 5432 (session mode).
48
+ * The worker connects through the session pooler — see deriveSessionPoolerUrl
49
+ * in commands/evals/listen.ts — while the API uses the transaction pooler; a
50
+ * counter that matched only :6543 would silently report 0 sockets for every
51
+ * worker. The `->` anchor is load-bearing: it matches the REMOTE port, not a
52
+ * local source port that happens to share those digits.
53
+ */
54
+ export declare function parsePoolerSockets(lsofStdout: string): {
55
+ total: number;
56
+ byNode: Record<string, number>;
57
+ };
58
+ /**
59
+ * Row shape returned by `reclaimStaleLocks`'s SQL — exported only so the
60
+ * unit test can build a matching fake without duplicating the type.
61
+ */
62
+ export interface StaleLockRow {
63
+ id: number;
64
+ identifier: string;
65
+ }
66
+ /**
67
+ * Executor abstraction used by `reclaimStaleLocks`: a function that runs a
68
+ * parameterised query and returns rows. The unit test passes a `vi.fn()`; the
69
+ * production wrapper (`reclaimStaleLocksWithConnection`) wraps a postgres-js
70
+ * client. Dependency injection keeps the SQL logic testable without a live DB.
71
+ */
72
+ export type SqlExecutor = <T = Record<string, unknown>>(sql: string, params: ReadonlyArray<unknown>) => Promise<ReadonlyArray<T>>;
73
+ /**
74
+ * Release stale Graphile job locks owned by this worker's user.
75
+ *
76
+ * The graphile_worker._private_jobs table tracks in-flight jobs via
77
+ * `locked_at`/`locked_by`. When a worker crashes mid-job (SIGKILL, OOM, the
78
+ * 10s graceful-shutdown timeout in evals/listen.ts forcing exit before
79
+ * graphile can release locks) those fields stay populated — and graphile's
80
+ * built-in lock-timeout sweeper only reclaims them after a 4-hour TTL by
81
+ * default. Until that fires, the job is invisible to every worker: it's not
82
+ * `available`, but no one is actually running it.
83
+ *
84
+ * At worker BOOT we know that no jobs belonging to OUR user are legitimately
85
+ * in flight (the previous instance is dead — that's why we're starting). Any
86
+ * lock on a task identifier ending `__<userId>` is therefore stale and safe
87
+ * to clear. We scope by suffix so multiple users on a shared pooler don't
88
+ * accidentally release each other's live locks.
89
+ *
90
+ * Best-effort: a thrown executor error is logged but swallowed. If reclaim
91
+ * fails, graphile's 4h timeout still kicks in eventually, and crippling
92
+ * worker startup over a transient DB hiccup is worse than waiting it out.
93
+ *
94
+ * Returns the count of rows released (0 on error or no-op).
95
+ */
96
+ export declare function reclaimStaleLocks(exec: SqlExecutor, userId: string, log: (msg: string) => void): Promise<number>;
97
+ /**
98
+ * Wrap a typed handler so it conforms to graphile-worker's `Task` shape AND
99
+ * intercepts `PermanentJobError` to skip retry waste.
100
+ *
101
+ * How the skip works: graphile-worker decides retry-vs-permanent-fail by
102
+ * comparing `job.attempts >= job.max_attempts` on the in-memory `Job` object
103
+ * AFTER the handler throws (see graphile-worker dist/worker.js). We mutate
104
+ * `helpers.job.max_attempts` to equal the current attempt count just before
105
+ * re-throwing — that flips the inequality so Graphile emits `job:failed`
106
+ * instead of scheduling another retry. The mutation is purely in JS memory;
107
+ * Graphile uses the in-memory `Job` object for its decision and never re-reads
108
+ * `max_attempts` from the DB on this code path, so a SQL update isn't needed.
109
+ *
110
+ * Exported for use in integration tests that want the same retry-skip behavior
111
+ * the runner applies in production.
112
+ */
113
+ export declare function makeTask<P>(handler: (payload: P, helpers: JobHelpers) => Promise<unknown>): Task;
114
+ /**
115
+ * Boot a graphile-worker runner with the four task handlers wired up.
116
+ *
117
+ * Returns a cleanup function that:
118
+ * 1. clears the heartbeat interval
119
+ * 2. fires a final `status: 'shutting_down'` heartbeat so the dashboard
120
+ * can show a clean shutdown rather than a missed-heartbeat timeout
121
+ * 3. awaits `runner.stop()` for graceful drain (in-flight jobs finish)
122
+ */
123
+ export declare function startWorker(options: WorkerOptions): Promise<() => Promise<void>>;
124
+ //# sourceMappingURL=graphile-worker-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphile-worker-runner.d.ts","sourceRoot":"","sources":["../../src/lib/graphile-worker-runner.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAiB,KAAK,UAAU,EAAsB,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAahG,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAWD,MAAM,WAAW,aAAa;IAC5B,4BAA4B,EAAE,MAAM,CAAC;IACrC,wEAAwE;IACxE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAalF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW/E;AAuBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAYA;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,KAC3B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAoWtF"}