@0xmaxma/claude-gateway 1.7.10 → 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 (173) hide show
  1. package/README.md +167 -41
  2. package/dist/agent/builtin-commands.js +2 -2
  3. package/dist/agent/builtin-commands.js.map +1 -1
  4. package/dist/agent/knowledge/config.d.ts.map +1 -1
  5. package/dist/agent/knowledge/config.js +2 -9
  6. package/dist/agent/knowledge/config.js.map +1 -1
  7. package/dist/agent/model-catalog.d.ts +62 -0
  8. package/dist/agent/model-catalog.d.ts.map +1 -0
  9. package/dist/agent/model-catalog.js +264 -0
  10. package/dist/agent/model-catalog.js.map +1 -0
  11. package/dist/agent/runner.d.ts +76 -0
  12. package/dist/agent/runner.d.ts.map +1 -1
  13. package/dist/agent/runner.js +189 -36
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/api/cron-router.d.ts +12 -8
  16. package/dist/api/cron-router.d.ts.map +1 -1
  17. package/dist/api/cron-router.js +82 -16
  18. package/dist/api/cron-router.js.map +1 -1
  19. package/dist/api/gateway-router.d.ts +4 -0
  20. package/dist/api/gateway-router.d.ts.map +1 -1
  21. package/dist/api/gateway-router.js +14 -0
  22. package/dist/api/gateway-router.js.map +1 -1
  23. package/dist/api/manifest-sources.d.ts +15 -0
  24. package/dist/api/manifest-sources.d.ts.map +1 -0
  25. package/dist/api/manifest-sources.js +27 -0
  26. package/dist/api/manifest-sources.js.map +1 -0
  27. package/dist/api/meta-router.d.ts +13 -0
  28. package/dist/api/meta-router.d.ts.map +1 -0
  29. package/dist/api/meta-router.js +26 -0
  30. package/dist/api/meta-router.js.map +1 -0
  31. package/dist/api/packages.d.ts.map +1 -1
  32. package/dist/api/packages.js +18 -198
  33. package/dist/api/packages.js.map +1 -1
  34. package/dist/api/route-registry.d.ts +81 -0
  35. package/dist/api/route-registry.d.ts.map +1 -0
  36. package/dist/api/route-registry.js +44 -0
  37. package/dist/api/route-registry.js.map +1 -0
  38. package/dist/api/router.d.ts.map +1 -1
  39. package/dist/api/router.js +21 -3
  40. package/dist/api/router.js.map +1 -1
  41. package/dist/apps/installer.d.ts +73 -5
  42. package/dist/apps/installer.d.ts.map +1 -1
  43. package/dist/apps/installer.js +237 -22
  44. package/dist/apps/installer.js.map +1 -1
  45. package/dist/cli/args.d.ts +25 -0
  46. package/dist/cli/args.d.ts.map +1 -0
  47. package/dist/cli/args.js +55 -0
  48. package/dist/cli/args.js.map +1 -0
  49. package/dist/cli/colors.d.ts +37 -0
  50. package/dist/cli/colors.d.ts.map +1 -0
  51. package/dist/cli/colors.js +63 -0
  52. package/dist/cli/colors.js.map +1 -0
  53. package/dist/cli/command-names.d.ts +98 -0
  54. package/dist/cli/command-names.d.ts.map +1 -0
  55. package/dist/cli/command-names.js +109 -0
  56. package/dist/cli/command-names.js.map +1 -0
  57. package/dist/cli/commands/agents.d.ts +28 -0
  58. package/dist/cli/commands/agents.d.ts.map +1 -0
  59. package/dist/cli/commands/agents.js +321 -0
  60. package/dist/cli/commands/agents.js.map +1 -0
  61. package/dist/cli/commands/channels.d.ts +17 -0
  62. package/dist/cli/commands/channels.d.ts.map +1 -0
  63. package/dist/cli/commands/channels.js +101 -0
  64. package/dist/cli/commands/channels.js.map +1 -0
  65. package/dist/cli/commands/debug-bundle.d.ts +6 -0
  66. package/dist/cli/commands/debug-bundle.d.ts.map +1 -0
  67. package/dist/cli/commands/debug-bundle.js +220 -0
  68. package/dist/cli/commands/debug-bundle.js.map +1 -0
  69. package/dist/cli/commands/doctor.d.ts +3 -0
  70. package/dist/cli/commands/doctor.d.ts.map +1 -0
  71. package/dist/cli/commands/doctor.js +104 -0
  72. package/dist/cli/commands/doctor.js.map +1 -0
  73. package/dist/cli/commands/gateway.d.ts +12 -0
  74. package/dist/cli/commands/gateway.d.ts.map +1 -0
  75. package/dist/cli/commands/gateway.js +145 -0
  76. package/dist/cli/commands/gateway.js.map +1 -0
  77. package/dist/cli/commands/service.d.ts +33 -0
  78. package/dist/cli/commands/service.d.ts.map +1 -0
  79. package/dist/cli/commands/service.js +513 -0
  80. package/dist/cli/commands/service.js.map +1 -0
  81. package/dist/cli/commands/update.d.ts +16 -0
  82. package/dist/cli/commands/update.d.ts.map +1 -0
  83. package/dist/cli/commands/update.js +149 -0
  84. package/dist/cli/commands/update.js.map +1 -0
  85. package/dist/cli/commands.generated.d.ts +4 -0
  86. package/dist/cli/commands.generated.d.ts.map +1 -0
  87. package/dist/cli/commands.generated.js +220 -0
  88. package/dist/cli/commands.generated.js.map +1 -0
  89. package/dist/cli/health.d.ts +31 -0
  90. package/dist/cli/health.d.ts.map +1 -0
  91. package/dist/cli/health.js +49 -0
  92. package/dist/cli/health.js.map +1 -0
  93. package/dist/cli/http-client.d.ts +140 -0
  94. package/dist/cli/http-client.d.ts.map +1 -0
  95. package/dist/cli/http-client.js +332 -0
  96. package/dist/cli/http-client.js.map +1 -0
  97. package/dist/cli/index.d.ts +27 -0
  98. package/dist/cli/index.d.ts.map +1 -0
  99. package/dist/cli/index.js +372 -0
  100. package/dist/cli/index.js.map +1 -0
  101. package/dist/cli/manager.d.ts +64 -0
  102. package/dist/cli/manager.d.ts.map +1 -0
  103. package/dist/cli/manager.js +181 -0
  104. package/dist/cli/manager.js.map +1 -0
  105. package/dist/cli/output.d.ts +49 -0
  106. package/dist/cli/output.d.ts.map +1 -0
  107. package/dist/cli/output.js +101 -0
  108. package/dist/cli/output.js.map +1 -0
  109. package/dist/cli/prompt.d.ts +29 -0
  110. package/dist/cli/prompt.d.ts.map +1 -0
  111. package/dist/cli/prompt.js +154 -0
  112. package/dist/cli/prompt.js.map +1 -0
  113. package/dist/cli/redact.d.ts +3 -0
  114. package/dist/cli/redact.d.ts.map +1 -0
  115. package/dist/cli/redact.js +33 -0
  116. package/dist/cli/redact.js.map +1 -0
  117. package/dist/cli/types.d.ts +22 -0
  118. package/dist/cli/types.d.ts.map +1 -0
  119. package/dist/cli/types.js +4 -0
  120. package/dist/cli/types.js.map +1 -0
  121. package/dist/config/bootstrap.d.ts +33 -0
  122. package/dist/config/bootstrap.d.ts.map +1 -0
  123. package/dist/config/bootstrap.js +117 -0
  124. package/dist/config/bootstrap.js.map +1 -0
  125. package/dist/config/loader.d.ts.map +1 -1
  126. package/dist/config/loader.js +5 -1
  127. package/dist/config/loader.js.map +1 -1
  128. package/dist/config/watcher.d.ts.map +1 -1
  129. package/dist/config/watcher.js +2 -35
  130. package/dist/config/watcher.js.map +1 -1
  131. package/dist/discord/receiver.d.ts +6 -1
  132. package/dist/discord/receiver.d.ts.map +1 -1
  133. package/dist/discord/receiver.js +9 -1
  134. package/dist/discord/receiver.js.map +1 -1
  135. package/dist/entry.d.ts +3 -0
  136. package/dist/entry.d.ts.map +1 -0
  137. package/dist/entry.js +83 -0
  138. package/dist/entry.js.map +1 -0
  139. package/dist/index.js +160 -46
  140. package/dist/index.js.map +1 -1
  141. package/dist/load-dotenv.d.ts +2 -0
  142. package/dist/load-dotenv.d.ts.map +1 -0
  143. package/dist/load-dotenv.js +68 -0
  144. package/dist/load-dotenv.js.map +1 -0
  145. package/dist/packages/registry.d.ts +50 -0
  146. package/dist/packages/registry.d.ts.map +1 -0
  147. package/dist/packages/registry.js +209 -0
  148. package/dist/packages/registry.js.map +1 -0
  149. package/dist/shutdown-signals.d.ts +47 -0
  150. package/dist/shutdown-signals.d.ts.map +1 -0
  151. package/dist/shutdown-signals.js +62 -0
  152. package/dist/shutdown-signals.js.map +1 -0
  153. package/dist/telegram/receiver.d.ts +6 -1
  154. package/dist/telegram/receiver.d.ts.map +1 -1
  155. package/dist/telegram/receiver.js +9 -1
  156. package/dist/telegram/receiver.js.map +1 -1
  157. package/dist/utils/orphan-receivers.d.ts +90 -0
  158. package/dist/utils/orphan-receivers.d.ts.map +1 -0
  159. package/dist/utils/orphan-receivers.js +218 -0
  160. package/dist/utils/orphan-receivers.js.map +1 -0
  161. package/dist/utils/paths.d.ts +16 -0
  162. package/dist/utils/paths.d.ts.map +1 -0
  163. package/dist/utils/paths.js +60 -0
  164. package/dist/utils/paths.js.map +1 -0
  165. package/dist/utils/stop-child.d.ts +21 -0
  166. package/dist/utils/stop-child.d.ts.map +1 -0
  167. package/dist/utils/stop-child.js +64 -0
  168. package/dist/utils/stop-child.js.map +1 -0
  169. package/lib/pairing.ts +1 -1
  170. package/mcp/tools/agent/handlers.ts +1 -1
  171. package/mcp/tools/discord/receiver-server.ts +4 -0
  172. package/mcp/tools/telegram/receiver-server.ts +6 -4
  173. package/package.json +6 -4
@@ -0,0 +1,145 @@
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.runGatewayLifecycle = runGatewayLifecycle;
37
+ const child_process_1 = require("child_process");
38
+ const fs = __importStar(require("fs"));
39
+ const http_client_1 = require("../http-client");
40
+ const health_1 = require("../health");
41
+ const manager_1 = require("../manager");
42
+ const output_1 = require("../output");
43
+ const output_2 = require("../output");
44
+ /**
45
+ * `gateway start|status|restart|stop` — whole-process lifecycle.
46
+ *
47
+ * `start` is handled by the boot entry point (src/index.ts), which recognises
48
+ * it before the CLI is ever imported; it is listed here only so the usage text
49
+ * and an unknown-verb error stay honest. Restart/stop must be performed by
50
+ * whatever manager owns the process (it has to stop the very process serving
51
+ * HTTP), so detection resolves the manager and the action is delegated to it.
52
+ */
53
+ async function runGatewayLifecycle(positionals, flags, config) {
54
+ const verb = positionals[0];
55
+ if (!verb) {
56
+ // `gateway --help` is a help request (0); a bare `gateway` is a usage error (1).
57
+ (0, output_2.writeCommandHelp)(flags.help === true, 'gateway', 'manage the gateway process on this host', 'claude-gateway gateway <start|status|restart|stop>', [' start is the only command that boots a server; the rest are manager-aware.']);
58
+ return flags.help === true ? 0 : 1;
59
+ }
60
+ switch (verb) {
61
+ case 'start':
62
+ // Only reachable when runCli() is called directly (tests, embedding) —
63
+ // the installed binary routes `gateway start` straight into the server.
64
+ process.stderr.write('`gateway start` is handled by the claude-gateway entry point, not the CLI runner.\n');
65
+ return 1;
66
+ case 'status':
67
+ return gatewayStatus(flags, config);
68
+ case 'restart':
69
+ return gatewayAction('restart');
70
+ case 'stop':
71
+ return gatewayAction('stop');
72
+ default:
73
+ process.stderr.write(`Unknown: gateway ${verb} (expected start|status|restart|stop)\n`);
74
+ return 1;
75
+ }
76
+ }
77
+ async function gatewayStatus(flags, config) {
78
+ const manager = (0, manager_1.detectManager)();
79
+ // `manager` describes the process on this host, so `health` must too:
80
+ // probing config.publicUrl would report a reverse proxy (possibly fronting a
81
+ // different instance) rather than the gateway this command just detected.
82
+ const baseUrl = (0, http_client_1.resolveLocalUrl)({ flagUrl: typeof flags.url === 'string' ? flags.url : undefined, env: process.env, config });
83
+ // `detail` carries what `health` cannot: an address answering 401 or 500 is
84
+ // not the same failure as one answering nothing, and collapsing both into
85
+ // "down" throws away the only clue about which one it is.
86
+ const probe = await (0, health_1.probeHealth)(baseUrl);
87
+ (0, output_1.printJson)({ manager, url: baseUrl, health: probe.ok ? 'up' : 'down', detail: probe.detail }, flags);
88
+ return probe.ok ? 0 : 1;
89
+ }
90
+ function gatewayAction(action) {
91
+ const manager = (0, manager_1.detectManager)();
92
+ try {
93
+ switch (manager) {
94
+ case 'systemd-user':
95
+ (0, child_process_1.execFileSync)('systemctl', ['--user', action, 'claude-gateway.service'], { stdio: 'inherit' });
96
+ return Promise.resolve(0);
97
+ case 'systemd-system': {
98
+ // A system-scoped unit needs root; announce the escalation instead of
99
+ // silently invoking sudo, and skip it entirely when already root.
100
+ const needsSudo = typeof process.getuid === 'function' && process.getuid() !== 0;
101
+ if (needsSudo) {
102
+ process.stderr.write(`Using the system service (may require sudo): systemctl ${action} claude-gateway.service\n`);
103
+ (0, child_process_1.execFileSync)('sudo', ['systemctl', action, 'claude-gateway.service'], { stdio: 'inherit' });
104
+ }
105
+ else {
106
+ (0, child_process_1.execFileSync)('systemctl', [action, 'claude-gateway.service'], { stdio: 'inherit' });
107
+ }
108
+ return Promise.resolve(0);
109
+ }
110
+ case 'pm2':
111
+ (0, child_process_1.execFileSync)('pm2', [action, 'gateway'], { stdio: 'inherit' });
112
+ return Promise.resolve(0);
113
+ case 'foreground': {
114
+ const pid = parseInt(fs.readFileSync((0, manager_1.defaultPidfilePath)(), 'utf8').trim(), 10);
115
+ // The pidfile only proves some process holds this pid. A gateway lost
116
+ // to SIGKILL or the OOM killer leaves the file behind, and once the pid
117
+ // is recycled this branch would SIGTERM an unrelated process and report
118
+ // success. Confirm it is a gateway before signalling it.
119
+ if (!(0, manager_1.pidLooksLikeGateway)(pid)) {
120
+ process.stderr.write(`Pidfile names pid ${pid}, but that process does not look like a gateway — refusing to signal it. ` +
121
+ `The gateway likely died without cleaning up; remove ${(0, manager_1.defaultPidfilePath)()} if it is stale.\n`);
122
+ return Promise.resolve(1);
123
+ }
124
+ process.kill(pid, 'SIGTERM');
125
+ if (action === 'restart') {
126
+ process.stderr.write('Stopped the foreground gateway (SIGTERM) but a bare foreground process has no supervisor to respawn it — ' +
127
+ 'start it again with `claude-gateway gateway start`, or install a service with `claude-gateway service install`.\n');
128
+ // Only the "stop" half of restart happened — a caller/script checking
129
+ // the exit code should see this as incomplete, not a successful restart.
130
+ return Promise.resolve(1);
131
+ }
132
+ process.stderr.write(`Sent SIGTERM to gateway (pid ${pid}).\n`);
133
+ return Promise.resolve(0);
134
+ }
135
+ default:
136
+ process.stderr.write('Could not detect how the gateway is running (systemd-user/systemd-system/pm2/foreground). Nothing done.\n');
137
+ return Promise.resolve(1);
138
+ }
139
+ }
140
+ catch (err) {
141
+ process.stderr.write(`gateway ${action} failed: ${err.message}\n`);
142
+ return Promise.resolve(1);
143
+ }
144
+ }
145
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,kDAkCC;AAnDD,iDAA6C;AAC7C,uCAAyB;AACzB,gDAAgE;AAChE,sCAAwC;AACxC,wCAAoF;AACpF,sCAAsC;AACtC,sCAA6C;AAE7C;;;;;;;;GAQG;AACI,KAAK,UAAU,mBAAmB,CACvC,WAAqB,EACrB,KAAuC,EACvC,MAAqB;IAErB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,iFAAiF;QACjF,IAAA,yBAAgB,EACd,KAAK,CAAC,IAAI,KAAK,IAAI,EACnB,SAAS,EACT,yCAAyC,EACzC,oDAAoD,EACpD,CAAC,8EAA8E,CAAC,CACjF,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,uEAAuE;YACvE,wEAAwE;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;YAC5G,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,yCAAyC,CAAC,CAAC;YACxF,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAuC,EAAE,MAAqB;IACzF,MAAM,OAAO,GAAG,IAAA,uBAAa,GAAE,CAAC;IAChC,sEAAsE;IACtE,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,IAAA,6BAAe,EAAC,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9H,4EAA4E;IAC5E,0EAA0E;IAC1E,0DAA0D;IAC1D,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IACzC,IAAA,kBAAS,EAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,MAA0B;IAC/C,MAAM,OAAO,GAAG,IAAA,uBAAa,GAAE,CAAC;IAChC,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,cAAc;gBACjB,IAAA,4BAAY,EAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9F,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,sEAAsE;gBACtE,kEAAkE;gBAClE,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACjF,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,MAAM,2BAA2B,CAAC,CAAC;oBAClH,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9F,CAAC;qBAAM,CAAC;oBACN,IAAA,4BAAY,EAAC,WAAW,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,KAAK;gBACR,IAAA,4BAAY,EAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC/D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAA,4BAAkB,GAAE,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/E,sEAAsE;gBACtE,wEAAwE;gBACxE,wEAAwE;gBACxE,yDAAyD;gBACzD,IAAI,CAAC,IAAA,6BAAmB,EAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,GAAG,2EAA2E;wBACjG,uDAAuD,IAAA,4BAAkB,GAAE,oBAAoB,CAClG,CAAC;oBACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2GAA2G;wBACzG,mHAAmH,CACtH,CAAC;oBACF,sEAAsE;oBACtE,yEAAyE;oBACzE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,MAAM,CAAC,CAAC;gBAChE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD;gBACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2GAA2G,CAAC,CAAC;gBAClI,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,YAAa,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC9E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -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"}