@caoruhua/open-claude-remote 0.1.6 → 0.2.3

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 (132) hide show
  1. package/README.md +514 -11
  2. package/dist/backend/src/api/config-routes.d.ts +2 -2
  3. package/dist/backend/src/api/config-routes.d.ts.map +1 -1
  4. package/dist/backend/src/api/config-routes.js +21 -6
  5. package/dist/backend/src/api/config-routes.js.map +1 -1
  6. package/dist/backend/src/api/health-routes.d.ts +4 -1
  7. package/dist/backend/src/api/health-routes.d.ts.map +1 -1
  8. package/dist/backend/src/api/health-routes.js +20 -2
  9. package/dist/backend/src/api/health-routes.js.map +1 -1
  10. package/dist/backend/src/api/hook-routes.d.ts +2 -2
  11. package/dist/backend/src/api/hook-routes.d.ts.map +1 -1
  12. package/dist/backend/src/api/hook-routes.js +10 -3
  13. package/dist/backend/src/api/hook-routes.js.map +1 -1
  14. package/dist/backend/src/api/instance-routes.d.ts +5 -3
  15. package/dist/backend/src/api/instance-routes.d.ts.map +1 -1
  16. package/dist/backend/src/api/instance-routes.js +48 -45
  17. package/dist/backend/src/api/instance-routes.js.map +1 -1
  18. package/dist/backend/src/api/router.d.ts +4 -12
  19. package/dist/backend/src/api/router.d.ts.map +1 -1
  20. package/dist/backend/src/api/router.js +28 -20
  21. package/dist/backend/src/api/router.js.map +1 -1
  22. package/dist/backend/src/api/status-routes.d.ts +2 -2
  23. package/dist/backend/src/api/status-routes.d.ts.map +1 -1
  24. package/dist/backend/src/api/status-routes.js +11 -6
  25. package/dist/backend/src/api/status-routes.js.map +1 -1
  26. package/dist/backend/src/attach.d.ts +1 -1
  27. package/dist/backend/src/attach.d.ts.map +1 -1
  28. package/dist/backend/src/attach.js +25 -71
  29. package/dist/backend/src/attach.js.map +1 -1
  30. package/dist/backend/src/cli-utils.d.ts +24 -1
  31. package/dist/backend/src/cli-utils.d.ts.map +1 -1
  32. package/dist/backend/src/cli-utils.js +73 -37
  33. package/dist/backend/src/cli-utils.js.map +1 -1
  34. package/dist/backend/src/cli.d.ts +22 -2
  35. package/dist/backend/src/cli.d.ts.map +1 -1
  36. package/dist/backend/src/cli.js +328 -23
  37. package/dist/backend/src/cli.js.map +1 -1
  38. package/dist/backend/src/config.d.ts +48 -15
  39. package/dist/backend/src/config.d.ts.map +1 -1
  40. package/dist/backend/src/config.js +126 -27
  41. package/dist/backend/src/config.js.map +1 -1
  42. package/dist/backend/src/daemon/daemon-client.d.ts +69 -0
  43. package/dist/backend/src/daemon/daemon-client.d.ts.map +1 -0
  44. package/dist/backend/src/daemon/daemon-client.js +209 -0
  45. package/dist/backend/src/daemon/daemon-client.js.map +1 -0
  46. package/dist/backend/src/daemon/daemon-entry.d.ts +8 -0
  47. package/dist/backend/src/daemon/daemon-entry.d.ts.map +1 -0
  48. package/dist/backend/src/daemon/daemon-entry.js +37 -0
  49. package/dist/backend/src/daemon/daemon-entry.js.map +1 -0
  50. package/dist/backend/src/daemon/daemon-launcher.d.ts +13 -0
  51. package/dist/backend/src/daemon/daemon-launcher.d.ts.map +1 -0
  52. package/dist/backend/src/daemon/daemon-launcher.js +62 -0
  53. package/dist/backend/src/daemon/daemon-launcher.js.map +1 -0
  54. package/dist/backend/src/index.d.ts.map +1 -1
  55. package/dist/backend/src/index.js +115 -251
  56. package/dist/backend/src/index.js.map +1 -1
  57. package/dist/backend/src/instance/index.d.ts +4 -0
  58. package/dist/backend/src/instance/index.d.ts.map +1 -0
  59. package/dist/backend/src/instance/index.js +3 -0
  60. package/dist/backend/src/instance/index.js.map +1 -0
  61. package/dist/backend/src/instance/instance-manager.d.ts +62 -0
  62. package/dist/backend/src/instance/instance-manager.d.ts.map +1 -0
  63. package/dist/backend/src/instance/instance-manager.js +194 -0
  64. package/dist/backend/src/instance/instance-manager.js.map +1 -0
  65. package/dist/backend/src/instance/instance-session.d.ts +87 -0
  66. package/dist/backend/src/instance/instance-session.d.ts.map +1 -0
  67. package/dist/backend/src/instance/instance-session.js +359 -0
  68. package/dist/backend/src/instance/instance-session.js.map +1 -0
  69. package/dist/backend/src/instance/types.d.ts +39 -0
  70. package/dist/backend/src/instance/types.d.ts.map +1 -0
  71. package/dist/backend/src/instance/types.js +2 -0
  72. package/dist/backend/src/instance/types.js.map +1 -0
  73. package/dist/backend/src/notification/notification-manager.js +1 -1
  74. package/dist/backend/src/notification/notification-manager.js.map +1 -1
  75. package/dist/backend/src/notification/notification-service-factory.js +1 -1
  76. package/dist/backend/src/notification/notification-service-factory.js.map +1 -1
  77. package/dist/backend/src/pty/virtual-pty.d.ts.map +1 -1
  78. package/dist/backend/src/pty/virtual-pty.js +6 -0
  79. package/dist/backend/src/pty/virtual-pty.js.map +1 -1
  80. package/dist/backend/src/registry/shared-token.d.ts +2 -2
  81. package/dist/backend/src/registry/shared-token.js +11 -11
  82. package/dist/backend/src/registry/shared-token.js.map +1 -1
  83. package/dist/backend/src/registry/stop-instances.d.ts +0 -25
  84. package/dist/backend/src/registry/stop-instances.d.ts.map +1 -1
  85. package/dist/backend/src/registry/stop-instances.js +6 -206
  86. package/dist/backend/src/registry/stop-instances.js.map +1 -1
  87. package/dist/backend/src/skills/index.d.ts +4 -0
  88. package/dist/backend/src/skills/index.d.ts.map +1 -0
  89. package/dist/backend/src/skills/index.js +4 -0
  90. package/dist/backend/src/skills/index.js.map +1 -0
  91. package/dist/backend/src/skills/skill-command-merger.d.ts +32 -0
  92. package/dist/backend/src/skills/skill-command-merger.d.ts.map +1 -0
  93. package/dist/backend/src/skills/skill-command-merger.js +78 -0
  94. package/dist/backend/src/skills/skill-command-merger.js.map +1 -0
  95. package/dist/backend/src/skills/skill-commands.d.ts +25 -0
  96. package/dist/backend/src/skills/skill-commands.d.ts.map +1 -0
  97. package/dist/backend/src/skills/skill-commands.js +56 -0
  98. package/dist/backend/src/skills/skill-commands.js.map +1 -0
  99. package/dist/backend/src/skills/skill-scanner.d.ts +36 -0
  100. package/dist/backend/src/skills/skill-scanner.d.ts.map +1 -0
  101. package/dist/backend/src/skills/skill-scanner.js +143 -0
  102. package/dist/backend/src/skills/skill-scanner.js.map +1 -0
  103. package/dist/backend/src/terminal/terminal-relay.d.ts +1 -0
  104. package/dist/backend/src/terminal/terminal-relay.d.ts.map +1 -1
  105. package/dist/backend/src/terminal/terminal-relay.js +6 -0
  106. package/dist/backend/src/terminal/terminal-relay.js.map +1 -1
  107. package/dist/backend/src/update.d.ts.map +1 -1
  108. package/dist/backend/src/update.js +46 -1
  109. package/dist/backend/src/update.js.map +1 -1
  110. package/dist/backend/src/utils/banner.d.ts +15 -0
  111. package/dist/backend/src/utils/banner.d.ts.map +1 -0
  112. package/dist/backend/src/utils/banner.js +95 -0
  113. package/dist/backend/src/utils/banner.js.map +1 -0
  114. package/dist/backend/src/ws/ws-server.d.ts +13 -54
  115. package/dist/backend/src/ws/ws-server.d.ts.map +1 -1
  116. package/dist/backend/src/ws/ws-server.js +57 -155
  117. package/dist/backend/src/ws/ws-server.js.map +1 -1
  118. package/dist/shared/constants.d.ts +2 -1
  119. package/dist/shared/constants.d.ts.map +1 -1
  120. package/dist/shared/constants.js +2 -1
  121. package/dist/shared/constants.js.map +1 -1
  122. package/dist/shared/defaults.d.ts.map +1 -1
  123. package/dist/shared/defaults.js +1 -5
  124. package/dist/shared/defaults.js.map +1 -1
  125. package/dist/shared/instance.d.ts +4 -9
  126. package/dist/shared/instance.d.ts.map +1 -1
  127. package/dist/shared/instance.js +0 -2
  128. package/dist/shared/instance.js.map +1 -1
  129. package/frontend-dist/assets/index-CM2xfmS8.js +152 -0
  130. package/frontend-dist/index.html +1 -1
  131. package/package.json +2 -2
  132. package/frontend-dist/assets/index-Cfhr3h3e.js +0 -152
@@ -5,10 +5,10 @@
5
5
  *
6
6
  * Usage:
7
7
  * claude-remote [options] [--] [claude args...]
8
- * claude-remote attach <port|name>
8
+ * claude-remote attach <name|id>
9
+ * claude-remote stop
9
10
  *
10
11
  * Options:
11
- * --port <number> Server port (default: 3000, auto-increments if busy)
12
12
  * --host <ip> Bind address (default: auto-detect LAN IP)
13
13
  * --token <string> Auth token (default: shared token)
14
14
  * --name <string> Instance name (default: working directory name)
@@ -48,6 +48,22 @@ void (async () => {
48
48
  await attachInstance({ target: options.attach });
49
49
  return;
50
50
  }
51
+ // Handle stop subcommand
52
+ if (options.stop) {
53
+ const { stopDaemon } = await import('./daemon/daemon-client.js');
54
+ await stopDaemon();
55
+ return;
56
+ }
57
+ // Handle list subcommand
58
+ if (options.list) {
59
+ await handleListCommand();
60
+ return;
61
+ }
62
+ // Handle status subcommand
63
+ if (options.status) {
64
+ await handleStatusCommand();
65
+ return;
66
+ }
51
67
  // Handle update subcommand
52
68
  if (options.update) {
53
69
  const { updatePackage } = await import('./update.js');
@@ -68,31 +84,79 @@ void (async () => {
68
84
  'For more info: https://docs.anthropic.com/en/docs/claude-code\n');
69
85
  process.exit(1);
70
86
  }
71
- // Fix node-pty spawn-helper permissions proactively at startup
72
- try {
73
- const { ensureSpawnHelperPermissions } = await import('./pty/fix-pty-permissions.js');
74
- ensureSpawnHelperPermissions();
75
- }
76
- catch (e) {
77
- const detail = e instanceof Error ? e.message : String(e);
78
- process.stderr.write('\n[ERROR] Failed to fix node-pty permissions.\n' +
79
- ` Reason: ${detail}\n\n` +
80
- ' Try fixing manually:\n' +
81
- ' chmod +x node_modules/node-pty/prebuilds/*/spawn-helper\n\n');
82
- process.exit(1);
87
+ // Ensure daemon is running, then attach as client
88
+ const { isDaemonRunning, checkDaemonVersion, smartRestartDaemon } = await import('./daemon/daemon-client.js');
89
+ const { launchDaemon } = await import('./daemon/daemon-launcher.js');
90
+ const { DEFAULT_PORT } = await import('../../shared/index.js');
91
+ let daemonPid;
92
+ if (!(await isDaemonRunning())) {
93
+ // Fix node-pty spawn-helper permissions proactively at startup
94
+ try {
95
+ const { ensureSpawnHelperPermissions } = await import('./pty/fix-pty-permissions.js');
96
+ ensureSpawnHelperPermissions();
97
+ }
98
+ catch (e) {
99
+ const detail = e instanceof Error ? e.message : String(e);
100
+ process.stderr.write('\n[ERROR] Failed to fix node-pty permissions.\n' +
101
+ ` Reason: ${detail}\n\n` +
102
+ ' Try fixing manually:\n' +
103
+ ' chmod +x node_modules/node-pty/prebuilds/*/spawn-helper\n\n');
104
+ process.exit(1);
105
+ }
106
+ // Launch daemon as a detached subprocess
107
+ const cliOverrides = {
108
+ host: options.host,
109
+ token: options.token,
110
+ instanceName: options.name,
111
+ claudeArgs: options.claudeArgs.length > 0 ? options.claudeArgs : undefined,
112
+ noTerminal: options.noTerminal,
113
+ };
114
+ const result = await launchDaemon(cliOverrides);
115
+ daemonPid = result.pid;
116
+ process.stderr.write(`Daemon started (PID: ${daemonPid}).\n`);
83
117
  }
84
- // Build CLI overrides for config
85
- const cliOverrides = {
86
- port: options.port,
118
+ else {
119
+ // Daemon already running - check version compatibility
120
+ const versionCheck = await checkDaemonVersion();
121
+ if (versionCheck.needsRestart) {
122
+ process.stderr.write(`Daemon version outdated: ${versionCheck.daemonVersion} → ${versionCheck.cliVersion}\n`);
123
+ const result = await smartRestartDaemon();
124
+ if (result.restarted) {
125
+ process.stderr.write('Daemon restarted with latest version.\n');
126
+ // After restart, daemon PID needs to be fetched from status API
127
+ }
128
+ else if (result.reason === 'has_instances') {
129
+ process.stderr.write('\n⚠️ Daemon has running instances. Restart manually with:\n');
130
+ process.stderr.write(' claude-remote stop && claude-remote\n\n');
131
+ }
132
+ else if (result.reason === 'stop_failed') {
133
+ process.stderr.write('\n⚠️ Failed to stop daemon. Please restart manually:\n');
134
+ process.stderr.write(' claude-remote stop && claude-remote\n\n');
135
+ }
136
+ }
137
+ }
138
+ // Get config and daemon PID for banner display
139
+ const { getDaemonStatus } = await import('./daemon/daemon-client.js');
140
+ const { loadConfig } = await import('./config.js');
141
+ const config = loadConfig({
87
142
  host: options.host,
88
143
  token: options.token,
89
144
  instanceName: options.name,
90
- claudeArgs: options.claudeArgs.length > 0 ? options.claudeArgs : undefined,
91
- noTerminal: options.noTerminal,
92
- };
93
- // Dynamically load startServer
94
- const { startServer } = await import('./index.js');
95
- await startServer(cliOverrides);
145
+ });
146
+ // Get daemon PID (from launch result or from status API)
147
+ if (!daemonPid) {
148
+ try {
149
+ const status = await getDaemonStatus();
150
+ daemonPid = status.pid;
151
+ }
152
+ catch { /* ignore */ }
153
+ }
154
+ // Attach as client (create instance + WS connect)
155
+ // Returns instance info for banner display
156
+ await attachToNewInstance(options, {
157
+ config,
158
+ daemonPid: daemonPid ?? 0,
159
+ });
96
160
  }
97
161
  catch (err) {
98
162
  const message = err instanceof Error ? err.message : String(err);
@@ -100,4 +164,245 @@ void (async () => {
100
164
  process.exit(1);
101
165
  }
102
166
  })();
167
+ /**
168
+ * When daemon is already running, create a new instance via API and WS-attach to it.
169
+ * This provides the same terminal experience as the first instance but runs as a client.
170
+ */
171
+ async function attachToNewInstance(options, context) {
172
+ const { DEFAULT_PORT } = await import('../../shared/index.js');
173
+ const { createInstance, getSharedToken } = await import('./daemon/daemon-client.js');
174
+ const { VirtualPtyManager } = await import('./pty/virtual-pty.js');
175
+ const { TerminalRelay } = await import('./terminal/terminal-relay.js');
176
+ const { printBanner } = await import('./utils/banner.js');
177
+ const { basename } = await import('node:path');
178
+ const cwd = process.cwd();
179
+ const name = options.name || basename(cwd);
180
+ const claudeArgs = options.claudeArgs.length > 0 ? options.claudeArgs : undefined;
181
+ // Create instance via daemon API
182
+ let instanceId;
183
+ let instanceName;
184
+ try {
185
+ const result = await createInstance({ cwd, name, claudeArgs, headless: false });
186
+ instanceId = result.instanceId;
187
+ instanceName = result.name;
188
+ }
189
+ catch (err) {
190
+ process.stderr.write(`Failed to create instance: ${err instanceof Error ? err.message : err}\n`);
191
+ process.exit(1);
192
+ }
193
+ // Get shared token for WS auth
194
+ const token = getSharedToken();
195
+ // Print banner with instance info
196
+ printBanner({
197
+ url: `http://${context.config.displayIp}:${DEFAULT_PORT}`,
198
+ token,
199
+ instanceName,
200
+ instanceId,
201
+ logDir: context.config.logDir,
202
+ pid: context.daemonPid,
203
+ });
204
+ // Create VirtualPtyManager and TerminalRelay (client mode)
205
+ const virtualPty = new VirtualPtyManager();
206
+ const relay = new TerminalRelay(virtualPty);
207
+ let stopping = false;
208
+ const cleanup = () => {
209
+ if (stopping)
210
+ return;
211
+ stopping = true;
212
+ relay.stop();
213
+ virtualPty.destroy();
214
+ };
215
+ // PTY output → stdout
216
+ virtualPty.on('data', (data) => {
217
+ process.stdout.write(data);
218
+ });
219
+ // Follow server resize
220
+ virtualPty.on('server_resize', () => {
221
+ const cols = process.stdout.columns ?? 80;
222
+ const rows = process.stdout.rows ?? 24;
223
+ virtualPty.resize(cols, rows);
224
+ });
225
+ // Handle instance exit
226
+ virtualPty.on('exit', (_exitCode) => {
227
+ cleanup();
228
+ process.exit(0);
229
+ });
230
+ virtualPty.on('error', (err) => {
231
+ process.stderr.write(`Connection error: ${err.message}\n`);
232
+ cleanup();
233
+ process.exit(1);
234
+ });
235
+ // Connect to daemon WS
236
+ const wsUrl = `ws://localhost:${DEFAULT_PORT}/ws/${instanceId}`;
237
+ try {
238
+ await virtualPty.connect(wsUrl, token);
239
+ }
240
+ catch (err) {
241
+ process.stderr.write(`Connection failed: ${err instanceof Error ? err.message : err}\n`);
242
+ cleanup();
243
+ process.exit(1);
244
+ }
245
+ // Sync terminal size
246
+ const cols = process.stdout.columns ?? 80;
247
+ const rows = process.stdout.rows ?? 24;
248
+ virtualPty.resize(cols, rows);
249
+ // Start terminal relay
250
+ relay.start();
251
+ // Wait for process exit
252
+ await new Promise((resolve) => {
253
+ process.on('SIGINT', () => {
254
+ cleanup();
255
+ resolve();
256
+ });
257
+ process.on('SIGTERM', () => {
258
+ cleanup();
259
+ resolve();
260
+ });
261
+ });
262
+ }
263
+ /**
264
+ * Handle 'list' subcommand - show all running instances
265
+ */
266
+ async function handleListCommand() {
267
+ const { listInstances, isDaemonRunning } = await import('./daemon/daemon-client.js');
268
+ if (!(await isDaemonRunning())) {
269
+ process.stderr.write('No running daemon found.\n');
270
+ process.exit(1);
271
+ }
272
+ let instances;
273
+ try {
274
+ instances = await listInstances();
275
+ }
276
+ catch (err) {
277
+ process.stderr.write(`Failed to list instances: ${err instanceof Error ? err.message : err}\n`);
278
+ process.exit(1);
279
+ }
280
+ if (instances.length === 0) {
281
+ process.stdout.write('No running instances.\n');
282
+ return;
283
+ }
284
+ // Format output as table
285
+ const formatRelativeTime = (isoString) => {
286
+ const diffMs = Date.now() - new Date(isoString).getTime();
287
+ const diffMins = Math.floor(diffMs / 60000);
288
+ const diffHours = Math.floor(diffMins / 60);
289
+ const diffDays = Math.floor(diffHours / 24);
290
+ if (diffDays > 0)
291
+ return `${diffDays}d ago`;
292
+ if (diffHours > 0)
293
+ return `${diffHours}h ago`;
294
+ if (diffMins > 0)
295
+ return `${diffMins}m ago`;
296
+ return 'just now';
297
+ };
298
+ process.stdout.write(`\nInstances (${instances.length} total):\n\n`);
299
+ // 计算各列动态宽度
300
+ const idWidth = 8;
301
+ const nameWidth = Math.max(12, ...instances.map(i => i.name.length));
302
+ const statusWidth = Math.max(8, ...instances.map(i => (i.status ?? 'unknown').length));
303
+ const clientsWidth = 7;
304
+ const startedWidth = 10;
305
+ // Table header
306
+ const header = [
307
+ 'ID'.padEnd(idWidth),
308
+ 'NAME'.padEnd(nameWidth),
309
+ 'STATUS'.padEnd(statusWidth),
310
+ 'CLIENTS'.padEnd(clientsWidth),
311
+ 'STARTED'.padEnd(startedWidth),
312
+ 'CWD',
313
+ ].join(' ');
314
+ process.stdout.write(` ${header}\n`);
315
+ // Table rows
316
+ for (const inst of instances) {
317
+ const row = [
318
+ inst.instanceId.substring(0, idWidth).padEnd(idWidth),
319
+ inst.name.padEnd(nameWidth),
320
+ (inst.status ?? 'unknown').padEnd(statusWidth),
321
+ String(inst.clientCount ?? 0).padEnd(clientsWidth),
322
+ formatRelativeTime(inst.startedAt).padEnd(startedWidth),
323
+ inst.cwd,
324
+ ].join(' ');
325
+ process.stdout.write(` ${row}\n`);
326
+ }
327
+ process.stdout.write('\n');
328
+ }
329
+ /**
330
+ * Handle 'status' subcommand - show daemon status
331
+ */
332
+ async function handleStatusCommand() {
333
+ const { getDaemonStatus, isDaemonRunning, checkDaemonVersion, smartRestartDaemon } = await import('./daemon/daemon-client.js');
334
+ if (!(await isDaemonRunning())) {
335
+ process.stderr.write('No running daemon found.\n');
336
+ process.exit(1);
337
+ }
338
+ // Check version compatibility first
339
+ const versionCheck = await checkDaemonVersion();
340
+ if (versionCheck.needsRestart) {
341
+ process.stderr.write(`\n⚠️ Daemon version outdated: ${versionCheck.daemonVersion} → ${versionCheck.cliVersion}\n`);
342
+ const result = await smartRestartDaemon();
343
+ if (result.restarted) {
344
+ process.stderr.write('✅ Daemon restarted with latest version.\n\n');
345
+ }
346
+ else if (result.reason === 'has_instances') {
347
+ process.stderr.write('\n⚠️ Daemon has running instances. Restart manually with:\n');
348
+ process.stderr.write(' claude-remote stop && claude-remote\n\n');
349
+ }
350
+ else if (result.reason === 'stop_failed') {
351
+ process.stderr.write('\n⚠️ Failed to stop daemon. Please restart manually:\n');
352
+ process.stderr.write(' claude-remote stop && claude-remote\n\n');
353
+ }
354
+ // After restart attempt, re-fetch status if daemon is running
355
+ if (result.restarted) {
356
+ // Wait briefly for daemon to stabilize
357
+ await new Promise(resolve => setTimeout(resolve, 500));
358
+ }
359
+ }
360
+ let status;
361
+ try {
362
+ status = await getDaemonStatus();
363
+ }
364
+ catch (err) {
365
+ process.stderr.write(`Failed to get daemon status: ${err instanceof Error ? err.message : err}\n`);
366
+ process.exit(1);
367
+ }
368
+ const formatUptime = (seconds) => {
369
+ if (seconds === null)
370
+ return 'unknown';
371
+ const hours = Math.floor(seconds / 3600);
372
+ const mins = Math.floor((seconds % 3600) / 60);
373
+ const secs = seconds % 60;
374
+ return `${hours}h ${mins}m ${secs}s`;
375
+ };
376
+ const formatDateTime = (isoString) => {
377
+ if (!isoString)
378
+ return 'unknown';
379
+ return new Date(isoString).toLocaleString();
380
+ };
381
+ process.stdout.write('\nDaemon Status:\n');
382
+ process.stdout.write(` Status: running\n`);
383
+ process.stdout.write(` Version: ${status.version}\n`);
384
+ process.stdout.write(` PID: ${status.pid}\n`);
385
+ process.stdout.write(` Port: ${status.port}\n`);
386
+ process.stdout.write(` Started: ${formatRelativeTime(status.startedAt)} (${formatDateTime(status.startedAt)})\n`);
387
+ process.stdout.write(` Uptime: ${formatUptime(status.uptime)}\n`);
388
+ process.stdout.write(` Instances: ${status.instanceCount}\n\n`);
389
+ }
390
+ /**
391
+ * Format relative time for status command
392
+ */
393
+ function formatRelativeTime(isoString) {
394
+ if (!isoString)
395
+ return 'unknown';
396
+ const diffMs = Date.now() - new Date(isoString).getTime();
397
+ const diffMins = Math.floor(diffMs / 60000);
398
+ const diffHours = Math.floor(diffMins / 60);
399
+ const diffDays = Math.floor(diffHours / 24);
400
+ if (diffDays > 0)
401
+ return `${diffDays}d ago`;
402
+ if (diffHours > 0)
403
+ return `${diffHours}h ago`;
404
+ if (diffMins > 0)
405
+ return `${diffMins}m ago`;
406
+ return 'just now';
407
+ }
103
408
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../backend/src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../backend/src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  import { type NotificationConfigs, type SettingsFile } from '../../shared/index.js';
2
2
  /**
3
- * 用户配置文件结构 (~/.claude-remote/config.json)
4
- * 这些是用户可以持久化的配置项
3
+ * 全局用户配置文件结构 (~/.claude-remote/settings.json)
4
+ * 公共配置,所有实例共享
5
5
  */
6
6
  export interface UserConfig {
7
- /** 服务端口 (默认: 3000) */
8
- port?: number;
9
7
  /** 绑定地址 (默认: 0.0.0.0) */
10
8
  host?: string;
11
9
  /** 认证 Token (默认: 自动生成共享 Token) */
@@ -18,7 +16,7 @@ export interface UserConfig {
18
16
  claudeCwd?: string;
19
17
  /** Session TTL 毫秒数 (默认: 24小时) */
20
18
  sessionTtlMs?: number;
21
- /** 认证速率限制 (每分钟每 IP 次数, 默认: 5) */
19
+ /** 认证速率限制 (每分钟每 IP 次数, 默认: 20) */
22
20
  authRateLimit?: number;
23
21
  /** 输出缓冲区最大行数 (默认: 10000) */
24
22
  maxBufferLines?: number;
@@ -46,7 +44,30 @@ export interface UserConfig {
46
44
  settingsDirs?: string[];
47
45
  }
48
46
  /**
49
- * 运行时配置结构 (融合用户配置 + CLI 参数 + 默认值)
47
+ * 工作路径配置 (<cwd>/.claude-remote/settings.json)
48
+ * 项目级配置,覆盖公共配置中的对应字段
49
+ * 注意:token、notifications 不在此接口(仅公共配置管理)
50
+ */
51
+ export interface WorkdirConfig {
52
+ claudeCommand?: string;
53
+ claudeArgs?: string[];
54
+ instanceName?: string;
55
+ maxBufferLines?: number;
56
+ shortcuts?: Array<{
57
+ label: string;
58
+ data: string;
59
+ enabled: boolean;
60
+ desc?: string;
61
+ }>;
62
+ commands?: Array<{
63
+ label: string;
64
+ command: string;
65
+ enabled: boolean;
66
+ desc?: string;
67
+ }>;
68
+ }
69
+ /**
70
+ * 运行时配置结构 (融合全局配置 + 工作路径配置 + CLI 参数 + 默认值)
50
71
  */
51
72
  export interface AppConfig {
52
73
  port: number;
@@ -72,31 +93,43 @@ export declare function getUserConfigDir(): string;
72
93
  */
73
94
  export declare function getUserConfigPath(): string;
74
95
  /**
75
- * 加载用户配置文件
96
+ * 加载全局用户配置文件
76
97
  * @param configDir 配置目录路径 (默认: ~/.claude-remote/)
77
98
  * @returns 用户配置对象,文件不存在或解析失败返回空对象
78
99
  */
79
100
  export declare function loadUserConfig(configDir?: string): UserConfig;
101
+ /**
102
+ * 加载工作路径配置 (<cwd>/.claude-remote/settings.json)
103
+ * @param cwd 工作目录路径
104
+ * @returns 工作路径配置对象,文件不存在或解析失败返回空对象
105
+ */
106
+ export declare function loadWorkdirConfig(cwd: string): WorkdirConfig;
107
+ /**
108
+ * 合并全局配置和工作路径配置
109
+ * 标量字段:工作路径覆盖全局
110
+ * 数组字段:合并去重
111
+ */
112
+ export declare function mergeConfigs(global: UserConfig, workdir: WorkdirConfig): UserConfig;
80
113
  /**
81
114
  * CLI 覆盖参数 (优先级最高)
82
115
  */
83
116
  export interface CliOverrides {
84
- port?: number;
85
117
  host?: string;
86
118
  token?: string;
87
119
  instanceName?: string;
88
120
  claudeArgs?: string[];
89
121
  noTerminal?: boolean;
122
+ /** daemon 模式:跳过 firstSession/relay/stdin/banner,仅启动 HTTP+WS 服务 */
123
+ daemonMode?: boolean;
90
124
  }
91
125
  /**
92
126
  * 加载运行时配置
93
- * 优先级: CLI 参数 > 用户配置文件 > 默认值
127
+ * 优先级: CLI 参数 > 工作路径配置 > 全局配置 > 默认值
94
128
  *
95
129
  * @param cliOverrides CLI 传入的覆盖参数
96
- * @param configDir 配置目录路径 (默认: ~/.claude-remote/)
130
+ * @param configDir 全局配置目录路径 (默认: ~/.claude-remote/)
97
131
  */
98
132
  export declare function loadConfig(cliOverrides?: CliOverrides, configDir?: string): AppConfig;
99
- export declare function createSessionCookieName(port: number): string;
100
133
  /** 默认快捷键列表 - 从 shared 包导入 */
101
134
  export declare const DEFAULT_SHORTCUTS: NonNullable<UserConfig['shortcuts']>;
102
135
  /** 默认命令列表 - 从 shared 包导入 */
@@ -111,16 +144,16 @@ export declare function fillDefaultShortcuts(config: UserConfig): UserConfig;
111
144
  export declare function fillDefaultCommands(config: UserConfig): UserConfig;
112
145
  /**
113
146
  * 生成 Claude Code 专属配置(包含 hook URL)
114
- * @param port 服务端口
147
+ * @param instanceId 实例 ID,用于路由 hook 到正确的实例
115
148
  * @param existingSettings 可选的现有 settings 对象,会与 hooks 合并
116
149
  */
117
- export declare function createClaudeSettings(port: number, existingSettings?: Record<string, unknown>): Record<string, unknown>;
150
+ export declare function createClaudeSettings(instanceId: string, existingSettings?: Record<string, unknown>): Record<string, unknown>;
118
151
  /**
119
152
  * 保存 Claude Code settings 到文件,返回文件路径
120
- * 文件保存在 ~/.claude-remote/settings/{port}.json
153
+ * 文件保存在 ~/.claude-remote/settings/{instanceId}.json
121
154
  * 注意:使用同步写入,仅在启动阶段调用
122
155
  */
123
- export declare function saveClaudeSettings(settings: Record<string, unknown>, port: number, sharedConfigDir: string): string;
156
+ export declare function saveClaudeSettings(settings: Record<string, unknown>, instanceId: string, sharedConfigDir: string): string;
124
157
  /**
125
158
  * 确保用户配置文件包含默认的 shortcuts 和 commands
126
159
  * - 配置文件不存在时创建
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../backend/src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../backend/src/config.ts"],"names":[],"mappings":"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"}