@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.
- package/README.md +514 -11
- package/dist/backend/src/api/config-routes.d.ts +2 -2
- package/dist/backend/src/api/config-routes.d.ts.map +1 -1
- package/dist/backend/src/api/config-routes.js +21 -6
- package/dist/backend/src/api/config-routes.js.map +1 -1
- package/dist/backend/src/api/health-routes.d.ts +4 -1
- package/dist/backend/src/api/health-routes.d.ts.map +1 -1
- package/dist/backend/src/api/health-routes.js +20 -2
- package/dist/backend/src/api/health-routes.js.map +1 -1
- package/dist/backend/src/api/hook-routes.d.ts +2 -2
- package/dist/backend/src/api/hook-routes.d.ts.map +1 -1
- package/dist/backend/src/api/hook-routes.js +10 -3
- package/dist/backend/src/api/hook-routes.js.map +1 -1
- package/dist/backend/src/api/instance-routes.d.ts +5 -3
- package/dist/backend/src/api/instance-routes.d.ts.map +1 -1
- package/dist/backend/src/api/instance-routes.js +48 -45
- package/dist/backend/src/api/instance-routes.js.map +1 -1
- package/dist/backend/src/api/router.d.ts +4 -12
- package/dist/backend/src/api/router.d.ts.map +1 -1
- package/dist/backend/src/api/router.js +28 -20
- package/dist/backend/src/api/router.js.map +1 -1
- package/dist/backend/src/api/status-routes.d.ts +2 -2
- package/dist/backend/src/api/status-routes.d.ts.map +1 -1
- package/dist/backend/src/api/status-routes.js +11 -6
- package/dist/backend/src/api/status-routes.js.map +1 -1
- package/dist/backend/src/attach.d.ts +1 -1
- package/dist/backend/src/attach.d.ts.map +1 -1
- package/dist/backend/src/attach.js +25 -71
- package/dist/backend/src/attach.js.map +1 -1
- package/dist/backend/src/cli-utils.d.ts +24 -1
- package/dist/backend/src/cli-utils.d.ts.map +1 -1
- package/dist/backend/src/cli-utils.js +73 -37
- package/dist/backend/src/cli-utils.js.map +1 -1
- package/dist/backend/src/cli.d.ts +22 -2
- package/dist/backend/src/cli.d.ts.map +1 -1
- package/dist/backend/src/cli.js +328 -23
- package/dist/backend/src/cli.js.map +1 -1
- package/dist/backend/src/config.d.ts +48 -15
- package/dist/backend/src/config.d.ts.map +1 -1
- package/dist/backend/src/config.js +126 -27
- package/dist/backend/src/config.js.map +1 -1
- package/dist/backend/src/daemon/daemon-client.d.ts +69 -0
- package/dist/backend/src/daemon/daemon-client.d.ts.map +1 -0
- package/dist/backend/src/daemon/daemon-client.js +209 -0
- package/dist/backend/src/daemon/daemon-client.js.map +1 -0
- package/dist/backend/src/daemon/daemon-entry.d.ts +8 -0
- package/dist/backend/src/daemon/daemon-entry.d.ts.map +1 -0
- package/dist/backend/src/daemon/daemon-entry.js +37 -0
- package/dist/backend/src/daemon/daemon-entry.js.map +1 -0
- package/dist/backend/src/daemon/daemon-launcher.d.ts +13 -0
- package/dist/backend/src/daemon/daemon-launcher.d.ts.map +1 -0
- package/dist/backend/src/daemon/daemon-launcher.js +62 -0
- package/dist/backend/src/daemon/daemon-launcher.js.map +1 -0
- package/dist/backend/src/index.d.ts.map +1 -1
- package/dist/backend/src/index.js +115 -251
- package/dist/backend/src/index.js.map +1 -1
- package/dist/backend/src/instance/index.d.ts +4 -0
- package/dist/backend/src/instance/index.d.ts.map +1 -0
- package/dist/backend/src/instance/index.js +3 -0
- package/dist/backend/src/instance/index.js.map +1 -0
- package/dist/backend/src/instance/instance-manager.d.ts +62 -0
- package/dist/backend/src/instance/instance-manager.d.ts.map +1 -0
- package/dist/backend/src/instance/instance-manager.js +194 -0
- package/dist/backend/src/instance/instance-manager.js.map +1 -0
- package/dist/backend/src/instance/instance-session.d.ts +87 -0
- package/dist/backend/src/instance/instance-session.d.ts.map +1 -0
- package/dist/backend/src/instance/instance-session.js +359 -0
- package/dist/backend/src/instance/instance-session.js.map +1 -0
- package/dist/backend/src/instance/types.d.ts +39 -0
- package/dist/backend/src/instance/types.d.ts.map +1 -0
- package/dist/backend/src/instance/types.js +2 -0
- package/dist/backend/src/instance/types.js.map +1 -0
- package/dist/backend/src/notification/notification-manager.js +1 -1
- package/dist/backend/src/notification/notification-manager.js.map +1 -1
- package/dist/backend/src/notification/notification-service-factory.js +1 -1
- package/dist/backend/src/notification/notification-service-factory.js.map +1 -1
- package/dist/backend/src/pty/virtual-pty.d.ts.map +1 -1
- package/dist/backend/src/pty/virtual-pty.js +6 -0
- package/dist/backend/src/pty/virtual-pty.js.map +1 -1
- package/dist/backend/src/registry/shared-token.d.ts +2 -2
- package/dist/backend/src/registry/shared-token.js +11 -11
- package/dist/backend/src/registry/shared-token.js.map +1 -1
- package/dist/backend/src/registry/stop-instances.d.ts +0 -25
- package/dist/backend/src/registry/stop-instances.d.ts.map +1 -1
- package/dist/backend/src/registry/stop-instances.js +6 -206
- package/dist/backend/src/registry/stop-instances.js.map +1 -1
- package/dist/backend/src/skills/index.d.ts +4 -0
- package/dist/backend/src/skills/index.d.ts.map +1 -0
- package/dist/backend/src/skills/index.js +4 -0
- package/dist/backend/src/skills/index.js.map +1 -0
- package/dist/backend/src/skills/skill-command-merger.d.ts +32 -0
- package/dist/backend/src/skills/skill-command-merger.d.ts.map +1 -0
- package/dist/backend/src/skills/skill-command-merger.js +78 -0
- package/dist/backend/src/skills/skill-command-merger.js.map +1 -0
- package/dist/backend/src/skills/skill-commands.d.ts +25 -0
- package/dist/backend/src/skills/skill-commands.d.ts.map +1 -0
- package/dist/backend/src/skills/skill-commands.js +56 -0
- package/dist/backend/src/skills/skill-commands.js.map +1 -0
- package/dist/backend/src/skills/skill-scanner.d.ts +36 -0
- package/dist/backend/src/skills/skill-scanner.d.ts.map +1 -0
- package/dist/backend/src/skills/skill-scanner.js +143 -0
- package/dist/backend/src/skills/skill-scanner.js.map +1 -0
- package/dist/backend/src/terminal/terminal-relay.d.ts +1 -0
- package/dist/backend/src/terminal/terminal-relay.d.ts.map +1 -1
- package/dist/backend/src/terminal/terminal-relay.js +6 -0
- package/dist/backend/src/terminal/terminal-relay.js.map +1 -1
- package/dist/backend/src/update.d.ts.map +1 -1
- package/dist/backend/src/update.js +46 -1
- package/dist/backend/src/update.js.map +1 -1
- package/dist/backend/src/utils/banner.d.ts +15 -0
- package/dist/backend/src/utils/banner.d.ts.map +1 -0
- package/dist/backend/src/utils/banner.js +95 -0
- package/dist/backend/src/utils/banner.js.map +1 -0
- package/dist/backend/src/ws/ws-server.d.ts +13 -54
- package/dist/backend/src/ws/ws-server.d.ts.map +1 -1
- package/dist/backend/src/ws/ws-server.js +57 -155
- package/dist/backend/src/ws/ws-server.js.map +1 -1
- package/dist/shared/constants.d.ts +2 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/defaults.d.ts.map +1 -1
- package/dist/shared/defaults.js +1 -5
- package/dist/shared/defaults.js.map +1 -1
- package/dist/shared/instance.d.ts +4 -9
- package/dist/shared/instance.d.ts.map +1 -1
- package/dist/shared/instance.js +0 -2
- package/dist/shared/instance.js.map +1 -1
- package/frontend-dist/assets/index-CM2xfmS8.js +152 -0
- package/frontend-dist/index.html +1 -1
- package/package.json +2 -2
- package/frontend-dist/assets/index-Cfhr3h3e.js +0 -152
package/dist/backend/src/cli.js
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
7
|
* claude-remote [options] [--] [claude args...]
|
|
8
|
-
* claude-remote attach <
|
|
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
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
*
|
|
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 次数, 默认:
|
|
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
|
-
*
|
|
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
|
|
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
|
|
147
|
+
* @param instanceId 实例 ID,用于路由 hook 到正确的实例
|
|
115
148
|
* @param existingSettings 可选的现有 settings 对象,会与 hooks 合并
|
|
116
149
|
*/
|
|
117
|
-
export declare function createClaudeSettings(
|
|
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/{
|
|
153
|
+
* 文件保存在 ~/.claude-remote/settings/{instanceId}.json
|
|
121
154
|
* 注意:使用同步写入,仅在启动阶段调用
|
|
122
155
|
*/
|
|
123
|
-
export declare function saveClaudeSettings(settings: Record<string, unknown>,
|
|
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":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../backend/src/config.ts"],"names":[],"mappings":"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"}
|