@0xmaxma/claude-gateway 1.7.9 → 1.8.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 (258) hide show
  1. package/README.md +178 -44
  2. package/dist/agent/builtin-commands.js +2 -2
  3. package/dist/agent/builtin-commands.js.map +1 -1
  4. package/dist/agent/dreaming/accept.d.ts.map +1 -1
  5. package/dist/agent/dreaming/accept.js +4 -1
  6. package/dist/agent/dreaming/accept.js.map +1 -1
  7. package/dist/agent/dreaming/config.d.ts.map +1 -1
  8. package/dist/agent/dreaming/config.js +2 -0
  9. package/dist/agent/dreaming/config.js.map +1 -1
  10. package/dist/agent/dreaming/reviewer.d.ts.map +1 -1
  11. package/dist/agent/dreaming/reviewer.js +9 -2
  12. package/dist/agent/dreaming/reviewer.js.map +1 -1
  13. package/dist/agent/dreaming/staleness.d.ts +7 -1
  14. package/dist/agent/dreaming/staleness.d.ts.map +1 -1
  15. package/dist/agent/dreaming/staleness.js +17 -2
  16. package/dist/agent/dreaming/staleness.js.map +1 -1
  17. package/dist/agent/dreaming/types.d.ts +17 -1
  18. package/dist/agent/dreaming/types.d.ts.map +1 -1
  19. package/dist/agent/knowledge/archive-db.d.ts +43 -0
  20. package/dist/agent/knowledge/archive-db.d.ts.map +1 -1
  21. package/dist/agent/knowledge/archive-db.js +130 -0
  22. package/dist/agent/knowledge/archive-db.js.map +1 -1
  23. package/dist/agent/knowledge/config.d.ts +3 -1
  24. package/dist/agent/knowledge/config.d.ts.map +1 -1
  25. package/dist/agent/knowledge/config.js +32 -10
  26. package/dist/agent/knowledge/config.js.map +1 -1
  27. package/dist/agent/knowledge/index.d.ts +11 -4
  28. package/dist/agent/knowledge/index.d.ts.map +1 -1
  29. package/dist/agent/knowledge/index.js +22 -1
  30. package/dist/agent/knowledge/index.js.map +1 -1
  31. package/dist/agent/knowledge/indexer.d.ts +0 -7
  32. package/dist/agent/knowledge/indexer.d.ts.map +1 -1
  33. package/dist/agent/knowledge/indexer.js +34 -7
  34. package/dist/agent/knowledge/indexer.js.map +1 -1
  35. package/dist/agent/knowledge/lifecycle.d.ts +20 -4
  36. package/dist/agent/knowledge/lifecycle.d.ts.map +1 -1
  37. package/dist/agent/knowledge/lifecycle.js +33 -4
  38. package/dist/agent/knowledge/lifecycle.js.map +1 -1
  39. package/dist/agent/knowledge/reflection.d.ts +114 -0
  40. package/dist/agent/knowledge/reflection.d.ts.map +1 -0
  41. package/dist/agent/knowledge/reflection.js +447 -0
  42. package/dist/agent/knowledge/reflection.js.map +1 -0
  43. package/dist/agent/knowledge/shared-dedup.d.ts +85 -0
  44. package/dist/agent/knowledge/shared-dedup.d.ts.map +1 -0
  45. package/dist/agent/knowledge/shared-dedup.js +187 -0
  46. package/dist/agent/knowledge/shared-dedup.js.map +1 -0
  47. package/dist/agent/knowledge/shared-promote.d.ts +82 -7
  48. package/dist/agent/knowledge/shared-promote.d.ts.map +1 -1
  49. package/dist/agent/knowledge/shared-promote.js +244 -11
  50. package/dist/agent/knowledge/shared-promote.js.map +1 -1
  51. package/dist/agent/knowledge/shared-staleness.d.ts +51 -0
  52. package/dist/agent/knowledge/shared-staleness.d.ts.map +1 -0
  53. package/dist/agent/knowledge/shared-staleness.js +149 -0
  54. package/dist/agent/knowledge/shared-staleness.js.map +1 -0
  55. package/dist/agent/knowledge/shared-writer.d.ts +19 -0
  56. package/dist/agent/knowledge/shared-writer.d.ts.map +1 -1
  57. package/dist/agent/knowledge/shared-writer.js +42 -0
  58. package/dist/agent/knowledge/shared-writer.js.map +1 -1
  59. package/dist/agent/knowledge/types.d.ts +24 -0
  60. package/dist/agent/knowledge/types.d.ts.map +1 -1
  61. package/dist/agent/model-catalog.d.ts +62 -0
  62. package/dist/agent/model-catalog.d.ts.map +1 -0
  63. package/dist/agent/model-catalog.js +264 -0
  64. package/dist/agent/model-catalog.js.map +1 -0
  65. package/dist/agent/runner.d.ts +83 -0
  66. package/dist/agent/runner.d.ts.map +1 -1
  67. package/dist/agent/runner.js +281 -51
  68. package/dist/agent/runner.js.map +1 -1
  69. package/dist/agent/workspace-loader.d.ts +17 -2
  70. package/dist/agent/workspace-loader.d.ts.map +1 -1
  71. package/dist/agent/workspace-loader.js +17 -1
  72. package/dist/agent/workspace-loader.js.map +1 -1
  73. package/dist/api/cron-router.d.ts +12 -8
  74. package/dist/api/cron-router.d.ts.map +1 -1
  75. package/dist/api/cron-router.js +82 -16
  76. package/dist/api/cron-router.js.map +1 -1
  77. package/dist/api/gateway-router.d.ts +4 -0
  78. package/dist/api/gateway-router.d.ts.map +1 -1
  79. package/dist/api/gateway-router.js +16 -1
  80. package/dist/api/gateway-router.js.map +1 -1
  81. package/dist/api/manifest-sources.d.ts +15 -0
  82. package/dist/api/manifest-sources.d.ts.map +1 -0
  83. package/dist/api/manifest-sources.js +27 -0
  84. package/dist/api/manifest-sources.js.map +1 -0
  85. package/dist/api/meta-router.d.ts +13 -0
  86. package/dist/api/meta-router.d.ts.map +1 -0
  87. package/dist/api/meta-router.js +26 -0
  88. package/dist/api/meta-router.js.map +1 -0
  89. package/dist/api/packages.d.ts.map +1 -1
  90. package/dist/api/packages.js +18 -198
  91. package/dist/api/packages.js.map +1 -1
  92. package/dist/api/route-registry.d.ts +81 -0
  93. package/dist/api/route-registry.d.ts.map +1 -0
  94. package/dist/api/route-registry.js +44 -0
  95. package/dist/api/route-registry.js.map +1 -0
  96. package/dist/api/router.d.ts.map +1 -1
  97. package/dist/api/router.js +21 -3
  98. package/dist/api/router.js.map +1 -1
  99. package/dist/apps/compose-generator.js +7 -4
  100. package/dist/apps/compose-generator.js.map +1 -1
  101. package/dist/apps/installer.d.ts +154 -0
  102. package/dist/apps/installer.d.ts.map +1 -1
  103. package/dist/apps/installer.js +657 -54
  104. package/dist/apps/installer.js.map +1 -1
  105. package/dist/cli/args.d.ts +25 -0
  106. package/dist/cli/args.d.ts.map +1 -0
  107. package/dist/cli/args.js +55 -0
  108. package/dist/cli/args.js.map +1 -0
  109. package/dist/cli/colors.d.ts +37 -0
  110. package/dist/cli/colors.d.ts.map +1 -0
  111. package/dist/cli/colors.js +63 -0
  112. package/dist/cli/colors.js.map +1 -0
  113. package/dist/cli/command-names.d.ts +98 -0
  114. package/dist/cli/command-names.d.ts.map +1 -0
  115. package/dist/cli/command-names.js +109 -0
  116. package/dist/cli/command-names.js.map +1 -0
  117. package/dist/cli/commands/agents.d.ts +28 -0
  118. package/dist/cli/commands/agents.d.ts.map +1 -0
  119. package/dist/cli/commands/agents.js +321 -0
  120. package/dist/cli/commands/agents.js.map +1 -0
  121. package/dist/cli/commands/channels.d.ts +17 -0
  122. package/dist/cli/commands/channels.d.ts.map +1 -0
  123. package/dist/cli/commands/channels.js +101 -0
  124. package/dist/cli/commands/channels.js.map +1 -0
  125. package/dist/cli/commands/debug-bundle.d.ts +6 -0
  126. package/dist/cli/commands/debug-bundle.d.ts.map +1 -0
  127. package/dist/cli/commands/debug-bundle.js +220 -0
  128. package/dist/cli/commands/debug-bundle.js.map +1 -0
  129. package/dist/cli/commands/doctor.d.ts +3 -0
  130. package/dist/cli/commands/doctor.d.ts.map +1 -0
  131. package/dist/cli/commands/doctor.js +104 -0
  132. package/dist/cli/commands/doctor.js.map +1 -0
  133. package/dist/cli/commands/gateway.d.ts +12 -0
  134. package/dist/cli/commands/gateway.d.ts.map +1 -0
  135. package/dist/cli/commands/gateway.js +145 -0
  136. package/dist/cli/commands/gateway.js.map +1 -0
  137. package/dist/cli/commands/service.d.ts +33 -0
  138. package/dist/cli/commands/service.d.ts.map +1 -0
  139. package/dist/cli/commands/service.js +513 -0
  140. package/dist/cli/commands/service.js.map +1 -0
  141. package/dist/cli/commands/update.d.ts +16 -0
  142. package/dist/cli/commands/update.d.ts.map +1 -0
  143. package/dist/cli/commands/update.js +149 -0
  144. package/dist/cli/commands/update.js.map +1 -0
  145. package/dist/cli/commands.generated.d.ts +4 -0
  146. package/dist/cli/commands.generated.d.ts.map +1 -0
  147. package/dist/cli/commands.generated.js +220 -0
  148. package/dist/cli/commands.generated.js.map +1 -0
  149. package/dist/cli/health.d.ts +31 -0
  150. package/dist/cli/health.d.ts.map +1 -0
  151. package/dist/cli/health.js +49 -0
  152. package/dist/cli/health.js.map +1 -0
  153. package/dist/cli/http-client.d.ts +140 -0
  154. package/dist/cli/http-client.d.ts.map +1 -0
  155. package/dist/cli/http-client.js +332 -0
  156. package/dist/cli/http-client.js.map +1 -0
  157. package/dist/cli/index.d.ts +27 -0
  158. package/dist/cli/index.d.ts.map +1 -0
  159. package/dist/cli/index.js +372 -0
  160. package/dist/cli/index.js.map +1 -0
  161. package/dist/cli/manager.d.ts +64 -0
  162. package/dist/cli/manager.d.ts.map +1 -0
  163. package/dist/cli/manager.js +181 -0
  164. package/dist/cli/manager.js.map +1 -0
  165. package/dist/cli/output.d.ts +49 -0
  166. package/dist/cli/output.d.ts.map +1 -0
  167. package/dist/cli/output.js +101 -0
  168. package/dist/cli/output.js.map +1 -0
  169. package/dist/cli/prompt.d.ts +29 -0
  170. package/dist/cli/prompt.d.ts.map +1 -0
  171. package/dist/cli/prompt.js +154 -0
  172. package/dist/cli/prompt.js.map +1 -0
  173. package/dist/cli/redact.d.ts +3 -0
  174. package/dist/cli/redact.d.ts.map +1 -0
  175. package/dist/cli/redact.js +33 -0
  176. package/dist/cli/redact.js.map +1 -0
  177. package/dist/cli/types.d.ts +22 -0
  178. package/dist/cli/types.d.ts.map +1 -0
  179. package/dist/cli/types.js +4 -0
  180. package/dist/cli/types.js.map +1 -0
  181. package/dist/config/bootstrap.d.ts +33 -0
  182. package/dist/config/bootstrap.d.ts.map +1 -0
  183. package/dist/config/bootstrap.js +117 -0
  184. package/dist/config/bootstrap.js.map +1 -0
  185. package/dist/config/loader.d.ts.map +1 -1
  186. package/dist/config/loader.js +5 -1
  187. package/dist/config/loader.js.map +1 -1
  188. package/dist/config/watcher.d.ts.map +1 -1
  189. package/dist/config/watcher.js +2 -35
  190. package/dist/config/watcher.js.map +1 -1
  191. package/dist/discord/receiver.d.ts +6 -1
  192. package/dist/discord/receiver.d.ts.map +1 -1
  193. package/dist/discord/receiver.js +9 -1
  194. package/dist/discord/receiver.js.map +1 -1
  195. package/dist/entry.d.ts +3 -0
  196. package/dist/entry.d.ts.map +1 -0
  197. package/dist/entry.js +83 -0
  198. package/dist/entry.js.map +1 -0
  199. package/dist/index.js +197 -47
  200. package/dist/index.js.map +1 -1
  201. package/dist/load-dotenv.d.ts +2 -0
  202. package/dist/load-dotenv.d.ts.map +1 -0
  203. package/dist/load-dotenv.js +68 -0
  204. package/dist/load-dotenv.js.map +1 -0
  205. package/dist/packages/registry.d.ts +50 -0
  206. package/dist/packages/registry.d.ts.map +1 -0
  207. package/dist/packages/registry.js +209 -0
  208. package/dist/packages/registry.js.map +1 -0
  209. package/dist/session/process.d.ts +20 -3
  210. package/dist/session/process.d.ts.map +1 -1
  211. package/dist/session/process.js +120 -5
  212. package/dist/session/process.js.map +1 -1
  213. package/dist/shell/claude-pty-shell.js +146 -27
  214. package/dist/shell/claude-pty-shell.js.map +1 -1
  215. package/dist/shell/draft-phantom.d.ts +49 -0
  216. package/dist/shell/draft-phantom.d.ts.map +1 -0
  217. package/dist/shell/draft-phantom.js +59 -0
  218. package/dist/shell/draft-phantom.js.map +1 -0
  219. package/dist/shell/submit-diag.d.ts +67 -0
  220. package/dist/shell/submit-diag.d.ts.map +1 -0
  221. package/dist/shell/submit-diag.js +69 -0
  222. package/dist/shell/submit-diag.js.map +1 -0
  223. package/dist/shutdown-signals.d.ts +47 -0
  224. package/dist/shutdown-signals.d.ts.map +1 -0
  225. package/dist/shutdown-signals.js +62 -0
  226. package/dist/shutdown-signals.js.map +1 -0
  227. package/dist/telegram/receiver.d.ts +6 -1
  228. package/dist/telegram/receiver.d.ts.map +1 -1
  229. package/dist/telegram/receiver.js +9 -1
  230. package/dist/telegram/receiver.js.map +1 -1
  231. package/dist/types.d.ts +25 -0
  232. package/dist/types.d.ts.map +1 -1
  233. package/dist/utils/orphan-receivers.d.ts +90 -0
  234. package/dist/utils/orphan-receivers.d.ts.map +1 -0
  235. package/dist/utils/orphan-receivers.js +218 -0
  236. package/dist/utils/orphan-receivers.js.map +1 -0
  237. package/dist/utils/paths.d.ts +16 -0
  238. package/dist/utils/paths.d.ts.map +1 -0
  239. package/dist/utils/paths.js +60 -0
  240. package/dist/utils/paths.js.map +1 -0
  241. package/dist/utils/stop-child.d.ts +21 -0
  242. package/dist/utils/stop-child.d.ts.map +1 -0
  243. package/dist/utils/stop-child.js +64 -0
  244. package/dist/utils/stop-child.js.map +1 -0
  245. package/lib/pairing.ts +1 -1
  246. package/mcp/tools/agent/handlers.ts +1 -1
  247. package/mcp/tools/discord/module.ts +23 -15
  248. package/mcp/tools/discord/receiver-server.ts +4 -0
  249. package/mcp/tools/memory/archive-reader.test.ts +25 -1
  250. package/mcp/tools/memory/archive-reader.ts +70 -12
  251. package/mcp/tools/memory/archive-writer.test.ts +168 -0
  252. package/mcp/tools/memory/archive-writer.ts +137 -0
  253. package/mcp/tools/memory/module.test.ts +187 -0
  254. package/mcp/tools/memory/module.ts +192 -6
  255. package/mcp/tools/telegram/module.ts +10 -2
  256. package/mcp/tools/telegram/receiver-server.ts +15 -6
  257. package/mcp/tools/telegram/typing.ts +178 -34
  258. package/package.json +6 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { CliConfigView } from '../http-client';
2
+ export type ServiceManager = 'systemd' | 'pm2';
3
+ export interface LaunchSpec {
4
+ node: string;
5
+ entry: string;
6
+ cwd: string;
7
+ config: string;
8
+ home: string;
9
+ pathEnv: string;
10
+ }
11
+ /**
12
+ * Build the PATH the service will run with.
13
+ *
14
+ * The inherited PATH is not usable: an interactive shell's PATH is full of
15
+ * session-scoped entries (editor servers, per-project node_modules/.bin) that
16
+ * may not exist when systemd starts the unit at boot. Instead, pin the
17
+ * directories the gateway actually needs — the node that will run it, the
18
+ * `claude` binary it spawns, and the standard system paths — keeping only
19
+ * those that exist.
20
+ */
21
+ export declare function servicePath(): string;
22
+ /** Resolve the absolute launch triple (node, entry, cwd) for a generated unit.
23
+ * Returns null — with a message — when the entry point can't be located, so a
24
+ * broken install never produces a unit that silently fails at boot. */
25
+ export declare function resolveLaunchSpec(flags: Record<string, string | boolean>): LaunchSpec | null;
26
+ /** Pure renderer — exported so `--print` and the tests see the exact bytes that
27
+ * would be written to disk. */
28
+ export declare function renderSystemdUnit(spec: LaunchSpec): string;
29
+ /** The exact argv `service install --manager pm2` would run. Exported for
30
+ * `--print` and tests so the preview can never drift from the real call. */
31
+ export declare function pm2StartArgs(spec: LaunchSpec): string[];
32
+ export declare function runService(positionals: string[], flags: Record<string, string | boolean>, config?: CliConfigView): Promise<number>;
33
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AA0BhE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC;AAG/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAoBpC;AAYD;;wEAEwE;AACxE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,UAAU,GAAG,IAAI,CAwB5F;AAQD;gCACgC;AAChC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAwB1D;AAED;6EAC6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAevD;AAgUD,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,GAAE,aAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -0,0 +1,513 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.servicePath = servicePath;
37
+ exports.resolveLaunchSpec = resolveLaunchSpec;
38
+ exports.renderSystemdUnit = renderSystemdUnit;
39
+ exports.pm2StartArgs = pm2StartArgs;
40
+ exports.runService = runService;
41
+ const child_process_1 = require("child_process");
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const http_client_1 = require("../http-client");
46
+ const prompt_1 = require("../prompt");
47
+ const health_1 = require("../health");
48
+ const output_1 = require("../output");
49
+ const paths_1 = require("../../utils/paths");
50
+ const output_2 = require("../output");
51
+ /**
52
+ * `service install|status|uninstall` — run the gateway under a process manager.
53
+ *
54
+ * systemd installs a *user* unit (`~/.config/systemd/user/`) so no privilege
55
+ * escalation is needed and the service runs as the same user that owns
56
+ * ~/.claude-gateway. PM2 is offered for hosts that already standardise on it.
57
+ *
58
+ * Everything the generated unit references is an absolute path resolved here
59
+ * (node binary, entry point, config, working directory) — a unit that inherits
60
+ * PATH or cwd from an interactive shell breaks the moment systemd starts it at
61
+ * boot. Secrets are never written into the unit: the gateway reads
62
+ * ~/.claude-gateway/.env itself.
63
+ */
64
+ const UNIT_NAME = 'claude-gateway.service';
65
+ const PM2_NAME = 'gateway';
66
+ const HEALTH_ATTEMPTS = 20;
67
+ const HEALTH_INTERVAL_MS = 500;
68
+ function gatewayHome() {
69
+ return path.join(os.homedir(), '.claude-gateway');
70
+ }
71
+ function configPath(flags) {
72
+ const explicit = typeof flags.config === 'string' ? flags.config : process.env.GATEWAY_CONFIG;
73
+ return path.resolve((0, paths_1.expandHome)(explicit ?? path.join(gatewayHome(), 'config.json')));
74
+ }
75
+ /**
76
+ * Build the PATH the service will run with.
77
+ *
78
+ * The inherited PATH is not usable: an interactive shell's PATH is full of
79
+ * session-scoped entries (editor servers, per-project node_modules/.bin) that
80
+ * may not exist when systemd starts the unit at boot. Instead, pin the
81
+ * directories the gateway actually needs — the node that will run it, the
82
+ * `claude` binary it spawns, and the standard system paths — keeping only
83
+ * those that exist.
84
+ */
85
+ function servicePath() {
86
+ const candidates = [
87
+ path.dirname(process.execPath),
88
+ claudeBinDir(),
89
+ path.join(os.homedir(), '.local', 'bin'),
90
+ path.join(os.homedir(), '.bun', 'bin'),
91
+ '/usr/local/sbin',
92
+ '/usr/local/bin',
93
+ '/usr/sbin',
94
+ '/usr/bin',
95
+ '/sbin',
96
+ '/bin',
97
+ ];
98
+ const seen = new Set();
99
+ const dirs = candidates.filter((dir) => {
100
+ if (!dir || seen.has(dir))
101
+ return false;
102
+ seen.add(dir);
103
+ return fs.existsSync(dir);
104
+ });
105
+ return dirs.join(':');
106
+ }
107
+ /** Where the `claude` binary the gateway spawns currently lives, if resolvable. */
108
+ function claudeBinDir() {
109
+ try {
110
+ const resolved = capture('which', ['claude']).trim();
111
+ return resolved ? path.dirname(resolved) : null;
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ }
117
+ /** Resolve the absolute launch triple (node, entry, cwd) for a generated unit.
118
+ * Returns null — with a message — when the entry point can't be located, so a
119
+ * broken install never produces a unit that silently fails at boot. */
120
+ function resolveLaunchSpec(flags) {
121
+ // dist/cli/commands/service.js → dist/entry.js, the thin dispatcher that
122
+ // loads only the side it needs. index.js is still a working boot entry and is
123
+ // used when a partially-updated install predates the split, so a unit is
124
+ // never written pointing at a file that is not there.
125
+ const dir = path.resolve(__dirname, '..', '..');
126
+ const thin = path.join(dir, 'entry.js');
127
+ const entry = fs.existsSync(thin) ? thin : path.join(dir, 'index.js');
128
+ const node = process.execPath;
129
+ if (!path.isAbsolute(node) || !fs.existsSync(entry)) {
130
+ process.stderr.write(`Cannot resolve the installed claude-gateway entry point (looked for ${entry}). ` +
131
+ 'Reinstall the package and try again.\n');
132
+ return null;
133
+ }
134
+ return {
135
+ node,
136
+ entry,
137
+ cwd: gatewayHome(),
138
+ config: configPath(flags),
139
+ home: os.homedir(),
140
+ pathEnv: servicePath(),
141
+ };
142
+ }
143
+ /** systemd unit values are double-quoted here, so backslashes and quotes must
144
+ * be escaped or a path containing them would terminate the value early. */
145
+ function systemdQuote(value) {
146
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
147
+ }
148
+ /** Pure renderer — exported so `--print` and the tests see the exact bytes that
149
+ * would be written to disk. */
150
+ function renderSystemdUnit(spec) {
151
+ const q = systemdQuote;
152
+ return `[Unit]
153
+ Description=Claude Gateway
154
+ Documentation=https://github.com/0xMaxMa/claude-gateway
155
+ Wants=network-online.target
156
+ After=network-online.target
157
+
158
+ [Service]
159
+ Type=simple
160
+ # WorkingDirectory is deliberately unquoted, unlike every other value here:
161
+ # systemd takes the rest of the line as the path, and rejects a quoted one
162
+ # ("path is not absolute"). Escaping is unnecessary for the same reason.
163
+ WorkingDirectory=${spec.cwd}
164
+ Environment="HOME=${q(spec.home)}"
165
+ Environment="PATH=${q(spec.pathEnv)}"
166
+ Environment="GATEWAY_CONFIG=${q(spec.config)}"
167
+ ExecStart="${q(spec.node)}" "${q(spec.entry)}" gateway start --config "${q(spec.config)}"
168
+ Restart=on-failure
169
+ RestartSec=5
170
+
171
+ [Install]
172
+ WantedBy=default.target
173
+ `;
174
+ }
175
+ /** The exact argv `service install --manager pm2` would run. Exported for
176
+ * `--print` and tests so the preview can never drift from the real call. */
177
+ function pm2StartArgs(spec) {
178
+ return [
179
+ 'start',
180
+ spec.node,
181
+ '--name',
182
+ PM2_NAME,
183
+ '--cwd',
184
+ spec.cwd,
185
+ '--',
186
+ spec.entry,
187
+ 'gateway',
188
+ 'start',
189
+ '--config',
190
+ spec.config,
191
+ ];
192
+ }
193
+ function unitPath() {
194
+ return path.join(os.homedir(), '.config', 'systemd', 'user', UNIT_NAME);
195
+ }
196
+ function run(file, args) {
197
+ (0, child_process_1.execFileSync)(file, args, { stdio: ['ignore', 'pipe', 'pipe'] });
198
+ }
199
+ function capture(file, args) {
200
+ return (0, child_process_1.execFileSync)(file, args, { stdio: ['ignore', 'pipe', 'ignore'] }).toString();
201
+ }
202
+ /** True when the failure was "no such binary" rather than the command itself
203
+ * reporting a problem — so "PM2 is not installed" never gets reported as
204
+ * "PM2 refused to save its process list". */
205
+ function isMissingBinary(err) {
206
+ return err?.code === 'ENOENT';
207
+ }
208
+ /**
209
+ * Ask before changing service state — installing one, or stopping and removing
210
+ * one. `--yes` skips the prompt; a non-interactive stdin without `--yes`
211
+ * refuses rather than blocking forever, so this is safe in scripts and CI.
212
+ */
213
+ async function confirm(flags, action, question) {
214
+ if (flags.yes === true)
215
+ return true;
216
+ if (!process.stdin.isTTY) {
217
+ process.stderr.write(`Refusing to ${action} non-interactively without --yes.\n`);
218
+ return false;
219
+ }
220
+ const rl = (0, prompt_1.createRl)();
221
+ try {
222
+ const answer = (await (0, prompt_1.ask)(rl, `${question} (y/N): `)).trim().toLowerCase();
223
+ return answer === 'y' || answer === 'yes';
224
+ }
225
+ finally {
226
+ rl.close();
227
+ }
228
+ }
229
+ /** Poll /health so `service install` reports whether the service actually came
230
+ * up, instead of only whether the manager accepted the unit.
231
+ *
232
+ * Probes the local bind address, never config.publicUrl: a proxy in front of a
233
+ * still-running old instance would answer for a service that never started. */
234
+ async function waitForHealth(config, flags) {
235
+ const baseUrl = (0, http_client_1.resolveLocalUrl)({ flagUrl: typeof flags.url === 'string' ? flags.url : undefined, env: process.env, config });
236
+ for (let attempt = 0; attempt < HEALTH_ATTEMPTS; attempt++) {
237
+ if ((await (0, health_1.probeHealth)(baseUrl, 2000)).ok)
238
+ return true;
239
+ await new Promise((resolve) => setTimeout(resolve, HEALTH_INTERVAL_MS));
240
+ }
241
+ return false;
242
+ }
243
+ // ─── systemd (user scope) ─────────────────────────────────────────────────────
244
+ function systemdState() {
245
+ let enabled = false;
246
+ let active = false;
247
+ try {
248
+ enabled = capture('systemctl', ['--user', 'is-enabled', UNIT_NAME]).trim() === 'enabled';
249
+ }
250
+ catch {
251
+ /* systemctl absent, or the unit is disabled/missing */
252
+ }
253
+ try {
254
+ active = capture('systemctl', ['--user', 'is-active', UNIT_NAME]).trim() === 'active';
255
+ }
256
+ catch {
257
+ /* systemctl absent, or the unit is inactive */
258
+ }
259
+ return { installed: fs.existsSync(unitPath()), enabled, active };
260
+ }
261
+ function systemdStatus(flags) {
262
+ const state = systemdState();
263
+ (0, output_1.printJson)({ manager: 'systemd-user', unit: unitPath(), ...state }, flags);
264
+ return state.active ? 0 : 1;
265
+ }
266
+ async function systemdInstall(flags, config) {
267
+ const spec = resolveLaunchSpec(flags);
268
+ if (!spec)
269
+ return 1;
270
+ const unit = renderSystemdUnit(spec);
271
+ const file = unitPath();
272
+ // stderr, not stdout: stdout carries the JSON result (see printJson).
273
+ (0, prompt_1.printFilePreview)(file, unit, (line) => process.stderr.write(line + '\n'));
274
+ if (flags.print === true)
275
+ return 0;
276
+ if (!(await confirm(flags, 'install', `Install and start ${UNIT_NAME} for user ${os.userInfo().username}?`))) {
277
+ process.stderr.write('Aborted — nothing was written.\n');
278
+ return 1;
279
+ }
280
+ try {
281
+ fs.mkdirSync(spec.cwd, { recursive: true });
282
+ fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
283
+ fs.writeFileSync(file, unit, { encoding: 'utf8', mode: 0o600 });
284
+ run('systemctl', ['--user', 'daemon-reload']);
285
+ run('systemctl', ['--user', 'enable', '--now', UNIT_NAME]);
286
+ }
287
+ catch (err) {
288
+ process.stderr.write(`Could not install or start the user service: ${err.message}\n` +
289
+ `Inspect it with: systemctl --user status ${UNIT_NAME} --no-pager\n`);
290
+ return 1;
291
+ }
292
+ const healthy = await waitForHealth(config, flags);
293
+ (0, output_1.printJson)({ manager: 'systemd-user', unit: file, ...systemdState(), health: healthy ? 'up' : 'down' }, flags);
294
+ process.stderr.write(`Installed ${UNIT_NAME}.\n` +
295
+ `To keep it running after you log out: loginctl enable-linger ${os.userInfo().username}\n`);
296
+ if (!healthy) {
297
+ process.stderr.write(`Service did not answer /health yet — check: journalctl --user -u ${UNIT_NAME} -n 50 --no-pager\n`);
298
+ return 1;
299
+ }
300
+ return 0;
301
+ }
302
+ async function systemdUninstall(flags) {
303
+ const file = unitPath();
304
+ const before = systemdState();
305
+ if (!before.installed && !before.enabled && !before.active) {
306
+ // Nothing to stop — prompting to stop a service that isn't there only
307
+ // teaches people to answer these prompts without reading them.
308
+ (0, output_1.printJson)({ manager: 'systemd-user', unit: file, ...before }, flags);
309
+ process.stderr.write(`${UNIT_NAME} is not installed — nothing to remove.\n`);
310
+ return 0;
311
+ }
312
+ // `disable --now` stops a running gateway, so this asks like install does.
313
+ if (!(await confirm(flags, 'uninstall', `Stop and remove ${UNIT_NAME}?`))) {
314
+ process.stderr.write('Aborted — the service was left in place.\n');
315
+ return 1;
316
+ }
317
+ try {
318
+ run('systemctl', ['--user', 'disable', '--now', UNIT_NAME]);
319
+ }
320
+ catch {
321
+ /* already stopped, or never installed */
322
+ }
323
+ try {
324
+ fs.unlinkSync(file);
325
+ }
326
+ catch (err) {
327
+ if (err.code !== 'ENOENT') {
328
+ process.stderr.write(`Could not remove ${file}: ${err.message}\n`);
329
+ return 1;
330
+ }
331
+ }
332
+ try {
333
+ run('systemctl', ['--user', 'daemon-reload']);
334
+ }
335
+ catch {
336
+ /* nothing to reload without systemd */
337
+ }
338
+ // Report what systemd actually says, not what was intended: the disable above
339
+ // is best-effort, and claiming a stopped service that is still running would
340
+ // be exactly the silent failure this codebase forbids.
341
+ const state = systemdState();
342
+ (0, output_1.printJson)({ manager: 'systemd-user', unit: file, ...state }, flags);
343
+ if (state.active || state.installed) {
344
+ process.stderr.write(`${UNIT_NAME} is still present — check: systemctl --user status ${UNIT_NAME} --no-pager\n`);
345
+ return 1;
346
+ }
347
+ return 0;
348
+ }
349
+ function pm2Entry() {
350
+ const list = JSON.parse(capture('pm2', ['jlist']));
351
+ return list.find((item) => item.name === PM2_NAME);
352
+ }
353
+ function pm2Status(flags) {
354
+ let entry;
355
+ try {
356
+ entry = pm2Entry();
357
+ }
358
+ catch (err) {
359
+ process.stderr.write(isMissingBinary(err)
360
+ ? 'PM2 is not installed or not on PATH.\n'
361
+ : 'Could not read the PM2 process list. Is PM2 running?\n');
362
+ return 1;
363
+ }
364
+ const status = entry?.pm2_env?.status ?? 'absent';
365
+ (0, output_1.printJson)({ manager: 'pm2', name: PM2_NAME, installed: !!entry, active: status === 'online', status }, flags);
366
+ return status === 'online' ? 0 : 1;
367
+ }
368
+ async function pm2Install(flags, config) {
369
+ const spec = resolveLaunchSpec(flags);
370
+ if (!spec)
371
+ return 1;
372
+ const args = pm2StartArgs(spec);
373
+ process.stderr.write(`\nWould run:\n pm2 ${args.join(' ')}\n pm2 save\n`);
374
+ if (flags.print === true)
375
+ return 0;
376
+ if (!(await confirm(flags, 'install', `Register and start the PM2 process "${PM2_NAME}"?`))) {
377
+ process.stderr.write('Aborted — nothing was registered.\n');
378
+ return 1;
379
+ }
380
+ try {
381
+ fs.mkdirSync(spec.cwd, { recursive: true });
382
+ // Replacing an existing entry is the documented way to change its argv.
383
+ try {
384
+ run('pm2', ['delete', PM2_NAME]);
385
+ }
386
+ catch {
387
+ /* first install — nothing to delete */
388
+ }
389
+ run('pm2', args);
390
+ run('pm2', ['save']);
391
+ }
392
+ catch (err) {
393
+ process.stderr.write(isMissingBinary(err)
394
+ ? 'PM2 is not installed. Install it first (`npm install -g pm2`), or use --manager systemd.\n'
395
+ : `Could not install or start the PM2 service: ${err.message}\nCheck: pm2 logs ${PM2_NAME}\n`);
396
+ return 1;
397
+ }
398
+ const healthy = await waitForHealth(config, flags);
399
+ (0, output_1.printJson)({ manager: 'pm2', name: PM2_NAME, installed: true, health: healthy ? 'up' : 'down' }, flags);
400
+ process.stderr.write('PM2 process list saved. Run `pm2 startup` once if you also want start-on-boot.\n');
401
+ if (!healthy) {
402
+ process.stderr.write(`Service did not answer /health yet — check: pm2 logs ${PM2_NAME}\n`);
403
+ return 1;
404
+ }
405
+ return 0;
406
+ }
407
+ async function pm2Uninstall(flags) {
408
+ let before;
409
+ try {
410
+ before = pm2Entry();
411
+ }
412
+ catch (err) {
413
+ if (isMissingBinary(err)) {
414
+ process.stderr.write('PM2 is not installed — nothing to remove.\n');
415
+ return 0;
416
+ }
417
+ process.stderr.write('Could not read the PM2 process list. Is PM2 running?\n');
418
+ return 1;
419
+ }
420
+ if (!before) {
421
+ (0, output_1.printJson)({ manager: 'pm2', name: PM2_NAME, installed: false, active: false }, flags);
422
+ process.stderr.write(`No PM2 process named "${PM2_NAME}" — nothing to remove.\n`);
423
+ return 0;
424
+ }
425
+ // `pm2 delete` stops a running gateway, so this asks like install does.
426
+ if (!(await confirm(flags, 'uninstall', `Stop and remove the PM2 process "${PM2_NAME}"?`))) {
427
+ process.stderr.write('Aborted — the process was left in place.\n');
428
+ return 1;
429
+ }
430
+ try {
431
+ run('pm2', ['delete', PM2_NAME]);
432
+ }
433
+ catch {
434
+ /* already absent */
435
+ }
436
+ try {
437
+ run('pm2', ['save']);
438
+ }
439
+ catch (err) {
440
+ process.stderr.write(isMissingBinary(err)
441
+ ? 'PM2 is not installed — nothing to remove.\n'
442
+ : 'Could not save the PM2 process list — the process may come back on the next PM2 resurrect.\n');
443
+ return isMissingBinary(err) ? 0 : 1;
444
+ }
445
+ // Same reason as the systemd path: report the observed state, not the intent.
446
+ let entry;
447
+ try {
448
+ entry = pm2Entry();
449
+ }
450
+ catch {
451
+ /* PM2 gone entirely — nothing left to report as running */
452
+ }
453
+ (0, output_1.printJson)({ manager: 'pm2', name: PM2_NAME, installed: !!entry, active: entry?.pm2_env?.status === 'online' }, flags);
454
+ return entry ? 1 : 0;
455
+ }
456
+ // ─── entry point ──────────────────────────────────────────────────────────────
457
+ const USAGE_LINE = 'claude-gateway service <install|status|uninstall> [--manager systemd|pm2] [--config <path>] [--yes] [--print]';
458
+ /** Pick the manager to act on when `--manager` is omitted. `status`/`uninstall`
459
+ * act on whatever is actually installed; `install` always defaults to systemd
460
+ * so it can't silently pick a different manager than the one documented. */
461
+ function detectServiceManager(action) {
462
+ if (action === 'install')
463
+ return 'systemd';
464
+ if (fs.existsSync(unitPath()))
465
+ return 'systemd';
466
+ try {
467
+ if (pm2Entry())
468
+ return 'pm2';
469
+ }
470
+ catch {
471
+ /* PM2 not installed */
472
+ }
473
+ return 'systemd';
474
+ }
475
+ function parseManager(flags, action) {
476
+ const raw = flags.manager;
477
+ if (raw === undefined)
478
+ return detectServiceManager(action);
479
+ if (raw === 'systemd' || raw === 'pm2')
480
+ return raw;
481
+ process.stderr.write('Unknown --manager. Expected systemd or pm2.\n');
482
+ return null;
483
+ }
484
+ async function runService(positionals, flags, config = {}) {
485
+ const action = positionals[0];
486
+ if (!action) {
487
+ // `service --help` is a help request (0); a bare `service` is a usage error (1).
488
+ (0, output_2.writeCommandHelp)(flags.help === true, 'service', 'run the gateway as a systemd-user or PM2 service', USAGE_LINE, [' systemd installs a user unit in ~/.config/systemd/user (no sudo).']);
489
+ return flags.help === true ? 0 : 1;
490
+ }
491
+ if (action !== 'install' && action !== 'status' && action !== 'uninstall') {
492
+ process.stderr.write(`Unknown: service ${action} (expected install|status|uninstall)\n`);
493
+ return 1;
494
+ }
495
+ if (flags.print === true && action !== 'install') {
496
+ // Rejected rather than ignored: silently accepting it would let someone
497
+ // believe `service uninstall --print` was a dry run.
498
+ process.stderr.write(`--print only applies to \`service install\` (it previews what would be written).\n`);
499
+ return 1;
500
+ }
501
+ const manager = parseManager(flags, action);
502
+ if (!manager)
503
+ return 1;
504
+ if (manager === 'systemd') {
505
+ if (action === 'install')
506
+ return systemdInstall(flags, config);
507
+ return action === 'status' ? systemdStatus(flags) : await systemdUninstall(flags);
508
+ }
509
+ if (action === 'install')
510
+ return pm2Install(flags, config);
511
+ return action === 'status' ? pm2Status(flags) : await pm2Uninstall(flags);
512
+ }
513
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `update [check]` (the gateway itself) and `claude version|update [check]`
3
+ * (the Claude Code binary the gateway drives).
4
+ *
5
+ * Both delegate to src/packages/registry.ts — the same detect/install strategy
6
+ * the dashboard's Update button uses — so a package updated from the terminal
7
+ * and one updated from the UI end up in exactly the same place. `check` never
8
+ * writes anything; `update` always shows current → target and asks first.
9
+ */
10
+ type PackageId = 'claude-gateway' | 'claude-code';
11
+ /** `claude-gateway update [check]` — the gateway's own package. */
12
+ export declare function runUpdate(id: PackageId, positionals: string[], flags: Record<string, string | boolean>): Promise<number>;
13
+ /** `claude-gateway claude <version|update [check]>` — the Claude Code binary. */
14
+ export declare function runClaude(positionals: string[], flags: Record<string, string | boolean>): Promise<number>;
15
+ export {};
16
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAeA;;;;;;;;GAQG;AAEH,KAAK,SAAS,GAAG,gBAAgB,GAAG,aAAa,CAAC;AA2HlD,mEAAmE;AACnE,wBAAsB,SAAS,CAC7B,EAAE,EAAE,SAAS,EACb,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,iFAAiF;AACjF,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA4BjB"}