@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.
- package/README.md +178 -44
- package/dist/agent/builtin-commands.js +2 -2
- package/dist/agent/builtin-commands.js.map +1 -1
- package/dist/agent/dreaming/accept.d.ts.map +1 -1
- package/dist/agent/dreaming/accept.js +4 -1
- package/dist/agent/dreaming/accept.js.map +1 -1
- package/dist/agent/dreaming/config.d.ts.map +1 -1
- package/dist/agent/dreaming/config.js +2 -0
- package/dist/agent/dreaming/config.js.map +1 -1
- package/dist/agent/dreaming/reviewer.d.ts.map +1 -1
- package/dist/agent/dreaming/reviewer.js +9 -2
- package/dist/agent/dreaming/reviewer.js.map +1 -1
- package/dist/agent/dreaming/staleness.d.ts +7 -1
- package/dist/agent/dreaming/staleness.d.ts.map +1 -1
- package/dist/agent/dreaming/staleness.js +17 -2
- package/dist/agent/dreaming/staleness.js.map +1 -1
- package/dist/agent/dreaming/types.d.ts +17 -1
- package/dist/agent/dreaming/types.d.ts.map +1 -1
- package/dist/agent/knowledge/archive-db.d.ts +43 -0
- package/dist/agent/knowledge/archive-db.d.ts.map +1 -1
- package/dist/agent/knowledge/archive-db.js +130 -0
- package/dist/agent/knowledge/archive-db.js.map +1 -1
- package/dist/agent/knowledge/config.d.ts +3 -1
- package/dist/agent/knowledge/config.d.ts.map +1 -1
- package/dist/agent/knowledge/config.js +32 -10
- package/dist/agent/knowledge/config.js.map +1 -1
- package/dist/agent/knowledge/index.d.ts +11 -4
- package/dist/agent/knowledge/index.d.ts.map +1 -1
- package/dist/agent/knowledge/index.js +22 -1
- package/dist/agent/knowledge/index.js.map +1 -1
- package/dist/agent/knowledge/indexer.d.ts +0 -7
- package/dist/agent/knowledge/indexer.d.ts.map +1 -1
- package/dist/agent/knowledge/indexer.js +34 -7
- package/dist/agent/knowledge/indexer.js.map +1 -1
- package/dist/agent/knowledge/lifecycle.d.ts +20 -4
- package/dist/agent/knowledge/lifecycle.d.ts.map +1 -1
- package/dist/agent/knowledge/lifecycle.js +33 -4
- package/dist/agent/knowledge/lifecycle.js.map +1 -1
- package/dist/agent/knowledge/reflection.d.ts +114 -0
- package/dist/agent/knowledge/reflection.d.ts.map +1 -0
- package/dist/agent/knowledge/reflection.js +447 -0
- package/dist/agent/knowledge/reflection.js.map +1 -0
- package/dist/agent/knowledge/shared-dedup.d.ts +85 -0
- package/dist/agent/knowledge/shared-dedup.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-dedup.js +187 -0
- package/dist/agent/knowledge/shared-dedup.js.map +1 -0
- package/dist/agent/knowledge/shared-promote.d.ts +82 -7
- package/dist/agent/knowledge/shared-promote.d.ts.map +1 -1
- package/dist/agent/knowledge/shared-promote.js +244 -11
- package/dist/agent/knowledge/shared-promote.js.map +1 -1
- package/dist/agent/knowledge/shared-staleness.d.ts +51 -0
- package/dist/agent/knowledge/shared-staleness.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-staleness.js +149 -0
- package/dist/agent/knowledge/shared-staleness.js.map +1 -0
- package/dist/agent/knowledge/shared-writer.d.ts +19 -0
- package/dist/agent/knowledge/shared-writer.d.ts.map +1 -1
- package/dist/agent/knowledge/shared-writer.js +42 -0
- package/dist/agent/knowledge/shared-writer.js.map +1 -1
- package/dist/agent/knowledge/types.d.ts +24 -0
- package/dist/agent/knowledge/types.d.ts.map +1 -1
- package/dist/agent/model-catalog.d.ts +62 -0
- package/dist/agent/model-catalog.d.ts.map +1 -0
- package/dist/agent/model-catalog.js +264 -0
- package/dist/agent/model-catalog.js.map +1 -0
- package/dist/agent/runner.d.ts +83 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +281 -51
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/workspace-loader.d.ts +17 -2
- package/dist/agent/workspace-loader.d.ts.map +1 -1
- package/dist/agent/workspace-loader.js +17 -1
- package/dist/agent/workspace-loader.js.map +1 -1
- package/dist/api/cron-router.d.ts +12 -8
- package/dist/api/cron-router.d.ts.map +1 -1
- package/dist/api/cron-router.js +82 -16
- package/dist/api/cron-router.js.map +1 -1
- package/dist/api/gateway-router.d.ts +4 -0
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +16 -1
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/manifest-sources.d.ts +15 -0
- package/dist/api/manifest-sources.d.ts.map +1 -0
- package/dist/api/manifest-sources.js +27 -0
- package/dist/api/manifest-sources.js.map +1 -0
- package/dist/api/meta-router.d.ts +13 -0
- package/dist/api/meta-router.d.ts.map +1 -0
- package/dist/api/meta-router.js +26 -0
- package/dist/api/meta-router.js.map +1 -0
- package/dist/api/packages.d.ts.map +1 -1
- package/dist/api/packages.js +18 -198
- package/dist/api/packages.js.map +1 -1
- package/dist/api/route-registry.d.ts +81 -0
- package/dist/api/route-registry.d.ts.map +1 -0
- package/dist/api/route-registry.js +44 -0
- package/dist/api/route-registry.js.map +1 -0
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +21 -3
- package/dist/api/router.js.map +1 -1
- package/dist/apps/compose-generator.js +7 -4
- package/dist/apps/compose-generator.js.map +1 -1
- package/dist/apps/installer.d.ts +154 -0
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +657 -54
- package/dist/apps/installer.js.map +1 -1
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +55 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/colors.d.ts +37 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +63 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/command-names.d.ts +98 -0
- package/dist/cli/command-names.d.ts.map +1 -0
- package/dist/cli/command-names.js +109 -0
- package/dist/cli/command-names.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +28 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +321 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/channels.d.ts +17 -0
- package/dist/cli/commands/channels.d.ts.map +1 -0
- package/dist/cli/commands/channels.js +101 -0
- package/dist/cli/commands/channels.js.map +1 -0
- package/dist/cli/commands/debug-bundle.d.ts +6 -0
- package/dist/cli/commands/debug-bundle.d.ts.map +1 -0
- package/dist/cli/commands/debug-bundle.js +220 -0
- package/dist/cli/commands/debug-bundle.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +104 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +12 -0
- package/dist/cli/commands/gateway.d.ts.map +1 -0
- package/dist/cli/commands/gateway.js +145 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/service.d.ts +33 -0
- package/dist/cli/commands/service.d.ts.map +1 -0
- package/dist/cli/commands/service.js +513 -0
- package/dist/cli/commands/service.js.map +1 -0
- package/dist/cli/commands/update.d.ts +16 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +149 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands.generated.d.ts +4 -0
- package/dist/cli/commands.generated.d.ts.map +1 -0
- package/dist/cli/commands.generated.js +220 -0
- package/dist/cli/commands.generated.js.map +1 -0
- package/dist/cli/health.d.ts +31 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +49 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/http-client.d.ts +140 -0
- package/dist/cli/http-client.d.ts.map +1 -0
- package/dist/cli/http-client.js +332 -0
- package/dist/cli/http-client.js.map +1 -0
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +372 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/manager.d.ts +64 -0
- package/dist/cli/manager.d.ts.map +1 -0
- package/dist/cli/manager.js +181 -0
- package/dist/cli/manager.js.map +1 -0
- package/dist/cli/output.d.ts +49 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +101 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/prompt.d.ts +29 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +154 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/redact.d.ts +3 -0
- package/dist/cli/redact.d.ts.map +1 -0
- package/dist/cli/redact.js +33 -0
- package/dist/cli/redact.js.map +1 -0
- package/dist/cli/types.d.ts +22 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/bootstrap.d.ts +33 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +117 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +5 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +2 -35
- package/dist/config/watcher.js.map +1 -1
- package/dist/discord/receiver.d.ts +6 -1
- package/dist/discord/receiver.d.ts.map +1 -1
- package/dist/discord/receiver.js +9 -1
- package/dist/discord/receiver.js.map +1 -1
- package/dist/entry.d.ts +3 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +83 -0
- package/dist/entry.js.map +1 -0
- package/dist/index.js +197 -47
- package/dist/index.js.map +1 -1
- package/dist/load-dotenv.d.ts +2 -0
- package/dist/load-dotenv.d.ts.map +1 -0
- package/dist/load-dotenv.js +68 -0
- package/dist/load-dotenv.js.map +1 -0
- package/dist/packages/registry.d.ts +50 -0
- package/dist/packages/registry.d.ts.map +1 -0
- package/dist/packages/registry.js +209 -0
- package/dist/packages/registry.js.map +1 -0
- package/dist/session/process.d.ts +20 -3
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +120 -5
- package/dist/session/process.js.map +1 -1
- package/dist/shell/claude-pty-shell.js +146 -27
- package/dist/shell/claude-pty-shell.js.map +1 -1
- package/dist/shell/draft-phantom.d.ts +49 -0
- package/dist/shell/draft-phantom.d.ts.map +1 -0
- package/dist/shell/draft-phantom.js +59 -0
- package/dist/shell/draft-phantom.js.map +1 -0
- package/dist/shell/submit-diag.d.ts +67 -0
- package/dist/shell/submit-diag.d.ts.map +1 -0
- package/dist/shell/submit-diag.js +69 -0
- package/dist/shell/submit-diag.js.map +1 -0
- package/dist/shutdown-signals.d.ts +47 -0
- package/dist/shutdown-signals.d.ts.map +1 -0
- package/dist/shutdown-signals.js +62 -0
- package/dist/shutdown-signals.js.map +1 -0
- package/dist/telegram/receiver.d.ts +6 -1
- package/dist/telegram/receiver.d.ts.map +1 -1
- package/dist/telegram/receiver.js +9 -1
- package/dist/telegram/receiver.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/orphan-receivers.d.ts +90 -0
- package/dist/utils/orphan-receivers.d.ts.map +1 -0
- package/dist/utils/orphan-receivers.js +218 -0
- package/dist/utils/orphan-receivers.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +60 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/stop-child.d.ts +21 -0
- package/dist/utils/stop-child.d.ts.map +1 -0
- package/dist/utils/stop-child.js +64 -0
- package/dist/utils/stop-child.js.map +1 -0
- package/lib/pairing.ts +1 -1
- package/mcp/tools/agent/handlers.ts +1 -1
- package/mcp/tools/discord/module.ts +23 -15
- package/mcp/tools/discord/receiver-server.ts +4 -0
- package/mcp/tools/memory/archive-reader.test.ts +25 -1
- package/mcp/tools/memory/archive-reader.ts +70 -12
- package/mcp/tools/memory/archive-writer.test.ts +168 -0
- package/mcp/tools/memory/archive-writer.ts +137 -0
- package/mcp/tools/memory/module.test.ts +187 -0
- package/mcp/tools/memory/module.ts +192 -6
- package/mcp/tools/telegram/module.ts +10 -2
- package/mcp/tools/telegram/receiver-server.ts +15 -6
- package/mcp/tools/telegram/typing.ts +178 -34
- 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"}
|