claude-mux 0.8.0 → 0.9.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 (73) hide show
  1. package/CLAUDE.md +26 -0
  2. package/README.md +52 -2
  3. package/dist/cli.js +2 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/service.d.ts +3 -0
  10. package/dist/commands/service.d.ts.map +1 -0
  11. package/dist/commands/service.js +154 -0
  12. package/dist/commands/service.js.map +1 -0
  13. package/dist/utils/version.d.ts +1 -1
  14. package/dist/utils/version.js +1 -1
  15. package/{web/.svelte-kit/output/client/_app/immutable/chunks/DtqyE18S.js → dist/web/client/_app/immutable/chunks/Bj8d0LuM.js} +1 -1
  16. package/dist/web/client/_app/immutable/chunks/ClwveEwa.js +3 -0
  17. package/dist/web/client/_app/immutable/chunks/{BH3SFRWG.js → Cq1Dbx4Z.js} +1 -1
  18. package/{web/.svelte-kit/output/client/_app/immutable/chunks/BkAy2L0f.js → dist/web/client/_app/immutable/chunks/DJ24Tldm.js} +1 -1
  19. package/dist/web/client/_app/immutable/entry/{app.r0-ETIJN.js → app.--CjzkSO.js} +2 -2
  20. package/dist/web/client/_app/immutable/entry/start.D4AuhR4O.js +1 -0
  21. package/dist/web/client/_app/immutable/nodes/{0.NP7v5jwY.js → 0.BA0ffjuI.js} +1 -1
  22. package/dist/web/client/_app/immutable/nodes/{1.CmX900J8.js → 1.0vn7u2tx.js} +1 -1
  23. package/dist/web/client/_app/immutable/nodes/{2.BQA6OZIp.js → 2.BdBKTxl6.js} +1 -1
  24. package/dist/web/client/_app/immutable/nodes/{3.bY9l1t_h.js → 3.DqYZlAWl.js} +1 -1
  25. package/dist/web/client/_app/version.json +1 -1
  26. package/dist/web/server/chunks/{0-1j1Fe_oa.js → 0-DjVZUt8p.js} +6 -6
  27. package/dist/web/server/chunks/{0-1j1Fe_oa.js.map → 0-DjVZUt8p.js.map} +1 -1
  28. package/dist/web/server/chunks/{1-D1dSc_vl.js → 1-DAqMo8Wb.js} +3 -3
  29. package/dist/web/server/chunks/{1-D1dSc_vl.js.map → 1-DAqMo8Wb.js.map} +1 -1
  30. package/dist/web/server/chunks/{2-CCOk5pX2.js → 2-CR4pAIvi.js} +5 -5
  31. package/dist/web/server/chunks/{2-CCOk5pX2.js.map → 2-CR4pAIvi.js.map} +1 -1
  32. package/dist/web/server/chunks/{3-DFcJIcL4.js → 3-Bkv2-jfN.js} +5 -5
  33. package/dist/web/server/chunks/{3-DFcJIcL4.js.map → 3-Bkv2-jfN.js.map} +1 -1
  34. package/dist/web/server/index.js +1 -1
  35. package/dist/web/server/index.js.map +1 -1
  36. package/dist/web/server/manifest.js +9 -9
  37. package/dist/web/server/manifest.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/cli.ts +2 -0
  40. package/src/commands/index.ts +1 -0
  41. package/src/commands/service.ts +180 -0
  42. package/src/utils/version.ts +1 -1
  43. package/web/.svelte-kit/adapter-bun/chunks/internal.js +1 -1
  44. package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
  45. package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
  46. package/web/.svelte-kit/adapter-bun/nodes/0.js +1 -1
  47. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  48. package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
  49. package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
  50. package/web/.svelte-kit/generated/server/internal.js +1 -1
  51. package/web/.svelte-kit/output/client/.vite/manifest.json +47 -47
  52. package/{dist/web/client/_app/immutable/chunks/DtqyE18S.js → web/.svelte-kit/output/client/_app/immutable/chunks/Bj8d0LuM.js} +1 -1
  53. package/web/.svelte-kit/output/client/_app/immutable/chunks/ClwveEwa.js +3 -0
  54. package/web/.svelte-kit/output/client/_app/immutable/chunks/{BH3SFRWG.js → Cq1Dbx4Z.js} +1 -1
  55. package/{dist/web/client/_app/immutable/chunks/BkAy2L0f.js → web/.svelte-kit/output/client/_app/immutable/chunks/DJ24Tldm.js} +1 -1
  56. package/web/.svelte-kit/output/client/_app/immutable/entry/{app.r0-ETIJN.js → app.--CjzkSO.js} +2 -2
  57. package/web/.svelte-kit/output/client/_app/immutable/entry/start.D4AuhR4O.js +1 -0
  58. package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.NP7v5jwY.js → 0.BA0ffjuI.js} +1 -1
  59. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.CmX900J8.js → 1.0vn7u2tx.js} +1 -1
  60. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.BQA6OZIp.js → 2.BdBKTxl6.js} +1 -1
  61. package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.bY9l1t_h.js → 3.DqYZlAWl.js} +1 -1
  62. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  63. package/web/.svelte-kit/output/server/chunks/internal.js +1 -1
  64. package/web/.svelte-kit/output/server/manifest-full.js +1 -1
  65. package/web/.svelte-kit/output/server/manifest.js +1 -1
  66. package/web/.svelte-kit/output/server/nodes/0.js +1 -1
  67. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  68. package/web/.svelte-kit/output/server/nodes/2.js +1 -1
  69. package/web/.svelte-kit/output/server/nodes/3.js +1 -1
  70. package/dist/web/client/_app/immutable/chunks/e3neaX0M.js +0 -3
  71. package/dist/web/client/_app/immutable/entry/start.C4mVhUwG.js +0 -1
  72. package/web/.svelte-kit/output/client/_app/immutable/chunks/e3neaX0M.js +0 -3
  73. package/web/.svelte-kit/output/client/_app/immutable/entry/start.C4mVhUwG.js +0 -1
package/CLAUDE.md CHANGED
@@ -37,6 +37,32 @@ Run a single test file:
37
37
  bun vitest run tests/db/sessions.test.ts
38
38
  ```
39
39
 
40
+ ## Releasing
41
+
42
+ Releases are fully automated. **Do not `npm publish` manually.**
43
+
44
+ ```bash
45
+ npm version minor # bumps package.json + src/utils/version.ts, commits, tags vX.Y.Z
46
+ git push origin main
47
+ git push origin vX.Y.Z # tag push triggers .github/workflows/release.yml
48
+ ```
49
+
50
+ The workflow builds CLI + web, publishes to npm via **OIDC trusted publishing** (no token, no MFA — the trust anchor is `christinoleo/claude-mux` + `release.yml` registered on npmjs.com), and creates a GitHub release. Publish runs as `npx -y npm@latest publish --access public --provenance` because the runner's bundled npm is too old for OIDC.
51
+
52
+ After release, other machines update with: `claude-mux update`.
53
+
54
+ ## Service management on remote hosts
55
+
56
+ For machines that should run claude-mux as a long-lived service (e.g. `engage`):
57
+
58
+ ```bash
59
+ claude-mux service install # ~/.config/systemd/user/claude-mux.service, enabled + started
60
+ sudo loginctl enable-linger $USER # one-time: survive logout, start on boot
61
+ journalctl --user -u claude-mux -f # logs
62
+ ```
63
+
64
+ `update` restarts a `nohup`-launched server it finds on :3456, but it does **not** restart a systemd-managed instance. On systemd hosts, after `claude-mux update` run `systemctl --user restart claude-mux.service` (or use `--skip-restart` on update and restart explicitly).
65
+
40
66
  ## Architecture
41
67
 
42
68
  claude-mux has three main components:
package/README.md CHANGED
@@ -66,9 +66,28 @@
66
66
 
67
67
  ## Installation
68
68
 
69
+ **One-liner (recommended)** — installs bun, claude-mux, hooks, and starts the server on `127.0.0.1:3456`:
70
+
69
71
  ```bash
70
- bun install -g claude-mux
71
- # or: npm install -g claude-mux
72
+ curl -fsSL https://raw.githubusercontent.com/christinoleo/claude-mux/main/scripts/install.sh | bash
73
+ ```
74
+
75
+ Override defaults with env vars: `CLAUDE_MUX_VERSION`, `CLAUDE_MUX_PORT`, `CLAUDE_MUX_NO_SETUP=1`, `CLAUDE_MUX_NO_SERVE=1`.
76
+
77
+ **Manual** — if you already have a Node/Bun toolchain:
78
+
79
+ ```bash
80
+ npm install -g claude-mux # or: bun install -g claude-mux
81
+ claude-mux setup # install Claude Code hooks
82
+ ```
83
+
84
+ If `npm install -g` fails with `EACCES`, your npm prefix is a system path. Switch to a user prefix (one-time):
85
+
86
+ ```bash
87
+ mkdir -p ~/.npm-global
88
+ npm config set prefix ~/.npm-global
89
+ echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
90
+ exec $SHELL -l
72
91
  ```
73
92
 
74
93
  <details>
@@ -84,6 +103,33 @@ bun link # makes 'claude-mux' available globally
84
103
 
85
104
  ---
86
105
 
106
+ ## Updating
107
+
108
+ ```bash
109
+ claude-mux update # npm i -g latest, re-syncs hooks, restarts prod server if running
110
+ claude-mux update --force # reinstall even when already on latest
111
+ ```
112
+
113
+ `update` stops the prod server before reinstalling so live module files aren't clobbered, then re-runs `setup --yes` so hook paths stay current.
114
+
115
+ ---
116
+
117
+ ## Running as a service (boot autostart)
118
+
119
+ `claude-mux service install` writes a **systemd user unit** (no root needed for install):
120
+
121
+ ```bash
122
+ claude-mux service install # writes ~/.config/systemd/user/claude-mux.service, enables + starts
123
+ claude-mux service status # systemctl --user status …
124
+ claude-mux service uninstall --purge # disable + remove unit
125
+
126
+ sudo loginctl enable-linger $USER # ONE-TIME sudo: keeps service running after logout / starts on boot
127
+ ```
128
+
129
+ Logs: `journalctl --user -u claude-mux.service -f`
130
+
131
+ ---
132
+
87
133
  ## Quick Start
88
134
 
89
135
  ```bash
@@ -105,6 +151,10 @@ claude-mux serve --port 3456 --host 0.0.0.0
105
151
  |---------|-------------|
106
152
  | `claude-mux serve` | Start web server (`--port`, `--host`, `--auth <password>`) |
107
153
  | `claude-mux setup` | Install Claude Code hooks |
154
+ | `claude-mux update` | `npm i -g` latest, re-sync hooks, restart prod server |
155
+ | `claude-mux service install` | Install systemd user unit (boot autostart, no root) |
156
+ | `claude-mux service uninstall` | Disable systemd user unit (`--purge` removes the file) |
157
+ | `claude-mux service status` | Show systemd service status |
108
158
  | `claude-mux uninstall` | Remove hooks and configuration |
109
159
  | `claude-mux send <target> [text]` | Send text or `--keys` to a session |
110
160
  | `claude-mux status <target>` | Get session state as JSON |
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  import { program } from "commander";
3
- import { createServeCommand, createSetupCommand, createUninstallCommand, createSendCommand, createWaitIdleCommand, createStatusCommand, createCaptureCommand, createNewSessionCommand, createUpdateCommand, runTui, runServe, } from "./commands/index.js";
3
+ import { createServeCommand, createSetupCommand, createUninstallCommand, createSendCommand, createWaitIdleCommand, createStatusCommand, createCaptureCommand, createNewSessionCommand, createUpdateCommand, createServiceCommand, runTui, runServe, } from "./commands/index.js";
4
4
  import { runSetup, runCleanup } from "./setup/index.js";
5
5
  import { DEFAULT_SERVER_PORT, migrateLegacyDataDir } from "./utils/paths.js";
6
6
  import { VERSION } from "./utils/version.js";
@@ -24,6 +24,7 @@ program.addCommand(createStatusCommand());
24
24
  program.addCommand(createCaptureCommand());
25
25
  program.addCommand(createNewSessionCommand());
26
26
  program.addCommand(createUpdateCommand());
27
+ program.addCommand(createServiceCommand());
27
28
  // BACKWARD COMPATIBILITY: Support old flags on root command
28
29
  program
29
30
  .option("--setup", "Run interactive setup wizard (deprecated: use 'setup' command)")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,5 @@ export { createStatusCommand } from "./status.js";
9
9
  export { createCaptureCommand } from "./capture.js";
10
10
  export { createNewSessionCommand } from "./new-session.js";
11
11
  export { createUpdateCommand, runUpdate } from "./update.js";
12
+ export { createServiceCommand } from "./service.js";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -9,4 +9,5 @@ export { createStatusCommand } from "./status.js";
9
9
  export { createCaptureCommand } from "./capture.js";
10
10
  export { createNewSessionCommand } from "./new-session.js";
11
11
  export { createUpdateCommand, runUpdate } from "./update.js";
12
+ export { createServiceCommand } from "./service.js";
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createServiceCommand(): Command;
3
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmJpC,wBAAgB,oBAAoB,IAAI,OAAO,CAgC9C"}
@@ -0,0 +1,154 @@
1
+ import { Command } from "commander";
2
+ import { execSync, spawnSync } from "child_process";
3
+ import { existsSync, mkdirSync, writeFileSync, unlinkSync } from "fs";
4
+ import { join, dirname } from "path";
5
+ import { homedir } from "os";
6
+ import { DEFAULT_SERVER_PORT } from "../utils/paths.js";
7
+ const SERVICE_NAME = "claude-mux.service";
8
+ const USER_UNIT_DIR = join(homedir(), ".config", "systemd", "user");
9
+ const UNIT_PATH = join(USER_UNIT_DIR, SERVICE_NAME);
10
+ function which(cmd) {
11
+ try {
12
+ const out = execSync(`command -v ${cmd}`, {
13
+ encoding: "utf-8",
14
+ stdio: ["pipe", "pipe", "pipe"],
15
+ }).trim();
16
+ return out || null;
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ function hasSystemd() {
23
+ return which("systemctl") !== null;
24
+ }
25
+ function buildUnit(port, host) {
26
+ const claudeMuxBin = which("claude-mux");
27
+ if (!claudeMuxBin) {
28
+ throw new Error("`claude-mux` not on PATH; install it first.");
29
+ }
30
+ const bunBin = which("bun");
31
+ const extraPath = bunBin ? `${dirname(bunBin)}:` : "";
32
+ return `[Unit]
33
+ Description=claude-mux serve (web dashboard + WebSocket)
34
+ After=network-online.target
35
+ Wants=network-online.target
36
+
37
+ [Service]
38
+ Type=simple
39
+ Environment=PATH=${extraPath}%h/.npm-global/bin:/usr/local/bin:/usr/bin:/bin
40
+ ExecStart=${claudeMuxBin} serve --port ${port} --host ${host}
41
+ Restart=on-failure
42
+ RestartSec=3
43
+ StandardOutput=journal
44
+ StandardError=journal
45
+
46
+ [Install]
47
+ WantedBy=default.target
48
+ `;
49
+ }
50
+ function systemctlUser(...args) {
51
+ const r = spawnSync("systemctl", ["--user", ...args], { stdio: "inherit" });
52
+ return r.status ?? 1;
53
+ }
54
+ function lingerEnabled() {
55
+ try {
56
+ const user = process.env.USER ?? execSync("whoami", { encoding: "utf-8" }).trim();
57
+ const out = execSync(`loginctl show-user ${user} -p Linger --value 2>/dev/null || true`, {
58
+ encoding: "utf-8",
59
+ }).trim();
60
+ return out === "yes";
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ async function runInstall(opts) {
67
+ if (!hasSystemd()) {
68
+ console.error("systemctl not found. This command requires systemd (Linux).");
69
+ process.exit(1);
70
+ }
71
+ const port = Number(opts.port ?? DEFAULT_SERVER_PORT);
72
+ const host = opts.host ?? "127.0.0.1";
73
+ if (!existsSync(USER_UNIT_DIR))
74
+ mkdirSync(USER_UNIT_DIR, { recursive: true });
75
+ const unit = buildUnit(port, host);
76
+ writeFileSync(UNIT_PATH, unit, "utf-8");
77
+ console.log(`Wrote ${UNIT_PATH}`);
78
+ if (systemctlUser("daemon-reload") !== 0) {
79
+ console.error("systemctl --user daemon-reload failed.");
80
+ process.exit(1);
81
+ }
82
+ const cmd = opts.noStart ? ["enable"] : ["enable", "--now"];
83
+ if (systemctlUser(...cmd, SERVICE_NAME) !== 0) {
84
+ console.error("Failed to enable service.");
85
+ process.exit(1);
86
+ }
87
+ console.log(`\nService installed. Listening on ${host}:${port}.`);
88
+ console.log("Logs: journalctl --user -u claude-mux.service -f");
89
+ console.log("Status: systemctl --user status claude-mux.service");
90
+ if (!lingerEnabled()) {
91
+ const user = process.env.USER ?? "$USER";
92
+ console.log("");
93
+ console.log("⚠ Linger is OFF — service stops when you log out and does NOT start on boot.");
94
+ console.log(" To survive reboot/logout, run ONCE (requires sudo):");
95
+ console.log(` sudo loginctl enable-linger ${user}`);
96
+ }
97
+ }
98
+ async function runUninstall(opts) {
99
+ if (!hasSystemd()) {
100
+ console.error("systemctl not found.");
101
+ process.exit(1);
102
+ }
103
+ if (existsSync(UNIT_PATH)) {
104
+ systemctlUser("disable", "--now", SERVICE_NAME);
105
+ if (opts.purge) {
106
+ unlinkSync(UNIT_PATH);
107
+ console.log(`Removed ${UNIT_PATH}`);
108
+ systemctlUser("daemon-reload");
109
+ }
110
+ else {
111
+ console.log(`Disabled ${SERVICE_NAME}. Unit file kept at ${UNIT_PATH} (use --purge to remove).`);
112
+ }
113
+ }
114
+ else {
115
+ console.log(`No unit file at ${UNIT_PATH}; nothing to uninstall.`);
116
+ }
117
+ }
118
+ async function runStatus() {
119
+ if (!hasSystemd()) {
120
+ console.error("systemctl not found.");
121
+ process.exit(1);
122
+ }
123
+ systemctlUser("status", SERVICE_NAME, "--no-pager");
124
+ }
125
+ export function createServiceCommand() {
126
+ const svc = new Command("service").description("Manage claude-mux as a systemd user service");
127
+ svc
128
+ .command("install")
129
+ .description("Install systemd user unit and enable it (does not require sudo)")
130
+ .option("--port <number>", "Listen port", String(DEFAULT_SERVER_PORT))
131
+ .option("--host <address>", "Listen host", "127.0.0.1")
132
+ .option("--no-start", "Enable for boot but do not start now")
133
+ .action(async (opts) => {
134
+ await runInstall(opts);
135
+ process.exit(0);
136
+ });
137
+ svc
138
+ .command("uninstall")
139
+ .description("Disable the systemd user service")
140
+ .option("--purge", "Also remove the unit file")
141
+ .action(async (opts) => {
142
+ await runUninstall(opts);
143
+ process.exit(0);
144
+ });
145
+ svc
146
+ .command("status")
147
+ .description("Show systemd service status")
148
+ .action(async () => {
149
+ await runStatus();
150
+ process.exit(0);
151
+ });
152
+ return svc;
153
+ }
154
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  * Central version constant for claude-watch.
3
3
  * Keep in sync with package.json version.
4
4
  */
5
- export declare const VERSION = "0.8.0";
5
+ export declare const VERSION = "0.9.0";
6
6
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  * Central version constant for claude-watch.
3
3
  * Keep in sync with package.json version.
4
4
  */
5
- export const VERSION = "0.8.0";
5
+ export const VERSION = "0.9.0";
6
6
  //# sourceMappingURL=version.js.map