@caoruhua/open-claude-remote 0.2.4 → 0.3.4
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 +52 -2
- package/dist/backend/src/api/config-routes.d.ts.map +1 -1
- package/dist/backend/src/api/config-routes.js +120 -57
- package/dist/backend/src/api/config-routes.js.map +1 -1
- package/dist/backend/src/api/router.d.ts +4 -0
- package/dist/backend/src/api/router.d.ts.map +1 -1
- package/dist/backend/src/api/router.js +6 -1
- package/dist/backend/src/api/router.js.map +1 -1
- package/dist/backend/src/api/status-routes.d.ts +7 -1
- package/dist/backend/src/api/status-routes.d.ts.map +1 -1
- package/dist/backend/src/api/status-routes.js +22 -1
- package/dist/backend/src/api/status-routes.js.map +1 -1
- package/dist/backend/src/cli.d.ts.map +1 -1
- package/dist/backend/src/cli.js +3 -17
- package/dist/backend/src/cli.js.map +1 -1
- package/dist/backend/src/config.d.ts +20 -0
- package/dist/backend/src/config.d.ts.map +1 -1
- package/dist/backend/src/config.js +45 -0
- package/dist/backend/src/config.js.map +1 -1
- package/dist/backend/src/daemon/daemon-entry.d.ts +1 -0
- package/dist/backend/src/daemon/daemon-entry.js +2 -1
- package/dist/backend/src/daemon/daemon-entry.js.map +1 -1
- package/dist/backend/src/daemon/daemon-guard.d.ts +17 -0
- package/dist/backend/src/daemon/daemon-guard.d.ts.map +1 -0
- package/dist/backend/src/daemon/daemon-guard.js +78 -0
- package/dist/backend/src/daemon/daemon-guard.js.map +1 -0
- package/dist/backend/src/index.d.ts.map +1 -1
- package/dist/backend/src/index.js +70 -4
- package/dist/backend/src/index.js.map +1 -1
- package/dist/backend/src/instance/instance-session.d.ts +26 -0
- package/dist/backend/src/instance/instance-session.d.ts.map +1 -1
- package/dist/backend/src/instance/instance-session.js +118 -13
- package/dist/backend/src/instance/instance-session.js.map +1 -1
- package/dist/backend/src/skills/skill-command-merger.d.ts.map +1 -1
- package/dist/backend/src/skills/skill-command-merger.js +6 -0
- package/dist/backend/src/skills/skill-command-merger.js.map +1 -1
- package/dist/backend/src/terminal/terminal-relay.d.ts +2 -1
- package/dist/backend/src/terminal/terminal-relay.d.ts.map +1 -1
- package/dist/backend/src/terminal/terminal-relay.js +9 -4
- package/dist/backend/src/terminal/terminal-relay.js.map +1 -1
- package/dist/backend/src/utils/banner.d.ts +9 -0
- package/dist/backend/src/utils/banner.d.ts.map +1 -1
- package/dist/backend/src/utils/banner.js +26 -2
- package/dist/backend/src/utils/banner.js.map +1 -1
- package/dist/backend/src/utils/file-lock.d.ts.map +1 -1
- package/dist/backend/src/utils/file-lock.js +21 -2
- package/dist/backend/src/utils/file-lock.js.map +1 -1
- package/dist/backend/src/utils/ip-monitor.d.ts +17 -1
- package/dist/backend/src/utils/ip-monitor.d.ts.map +1 -1
- package/dist/backend/src/utils/ip-monitor.js +78 -3
- package/dist/backend/src/utils/ip-monitor.js.map +1 -1
- package/dist/backend/src/utils/network.d.ts +36 -0
- package/dist/backend/src/utils/network.d.ts.map +1 -1
- package/dist/backend/src/utils/network.js +125 -0
- package/dist/backend/src/utils/network.js.map +1 -1
- package/dist/shared/defaults.d.ts.map +1 -1
- package/dist/shared/defaults.js +0 -1
- package/dist/shared/defaults.js.map +1 -1
- package/dist/shared/ws-protocol.d.ts +17 -2
- package/dist/shared/ws-protocol.d.ts.map +1 -1
- package/frontend-dist/assets/index-DlG_4fGj.css +32 -0
- package/frontend-dist/assets/index-FfUR0j1j.js +152 -0
- package/frontend-dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend-dist/assets/index-BKudo1Dw.css +0 -32
- package/frontend-dist/assets/index-CM2xfmS8.js +0 -152
package/README.md
CHANGED
|
@@ -49,8 +49,22 @@ Scan the QR code shown in your terminal with your phone. The auth token is auto-
|
|
|
49
49
|
- Real-time terminal output streamed to your phone
|
|
50
50
|
- Full ANSI color rendering via xterm.js
|
|
51
51
|
- 10K-line scrollback buffer, auto-restored on reconnect
|
|
52
|
+
- **Multi-network support** — displays all available IPs (WiFi, VPN, Ethernet) on startup
|
|
52
53
|
- LAN IP change notification with new connection URL
|
|
53
|
-
- Smart auto-scroll with a "scroll to bottom" floating button
|
|
54
|
+
- Smart auto-scroll with a "scroll to bottom" floating button — respects your scroll position when browsing history
|
|
55
|
+
- **Tap-to-focus** — clicking anywhere in the terminal automatically focuses the input bar for a seamless typing experience
|
|
56
|
+
|
|
57
|
+
### Multi-Network Access (WiFi + VPN)
|
|
58
|
+
|
|
59
|
+
Access Claude Code Remote from multiple network interfaces simultaneously:
|
|
60
|
+
|
|
61
|
+
- **Automatic network detection** — discovers all available IPv4 interfaces on startup
|
|
62
|
+
- **VPN support** — detects common VPN interfaces (WireGuard, Tailscale, ZeroTier, PPP, etc.)
|
|
63
|
+
- **Custom CIDR ranges** — configure `customPrivateRanges` to add company-specific networks
|
|
64
|
+
- **Network change notifications** — WebSocket `network_changed` events notify clients when interfaces change
|
|
65
|
+
- **Unified CORS** — all detected IPs are automatically added to the CORS allowlist
|
|
66
|
+
|
|
67
|
+
Example: When connected to both WiFi (192.168.x.x) and company VPN (30.x.x.x), both addresses are displayed on startup and accessible via the web UI.
|
|
54
68
|
|
|
55
69
|
### Quick Actions
|
|
56
70
|
- One-tap keys: Esc, Enter, Tab, arrows, Shift+Tab
|
|
@@ -209,6 +223,7 @@ Config file: `~/.claude-remote/settings.json` (legacy `config.json` is auto-migr
|
|
|
209
223
|
| `workspaces` | string[] | [] | Allowed working directories for web-spawned instances |
|
|
210
224
|
| `settingsDirs` | string[] | ["~/.claude/", "~/.claude-remote/settings/"] | Directories to scan for settings files |
|
|
211
225
|
| `notifications` | object | — | Notification channels config (see below) |
|
|
226
|
+
| `customPrivateRanges` | string[] | [] | Custom CIDR ranges for CORS allowlist (e.g., `["30.0.0.0/8"]` for VPN networks) |
|
|
212
227
|
|
|
213
228
|
> **Note**: Port is fixed at 8866. All instances run in a single daemon process.
|
|
214
229
|
|
|
@@ -222,6 +237,16 @@ Config file: `~/.claude-remote/settings.json` (legacy `config.json` is auto-migr
|
|
|
222
237
|
|
|
223
238
|
**Priority**: CLI args > config file > defaults (except `claudeArgs` which is merged)
|
|
224
239
|
|
|
240
|
+
### Project-level Configuration
|
|
241
|
+
|
|
242
|
+
Shortcuts and commands are automatically saved per-project when configured through the Web UI with an active instance:
|
|
243
|
+
|
|
244
|
+
- Configuration is stored in `<project-dir>/.claude-remote/settings.json`
|
|
245
|
+
- When opening settings from an instance view, `shortcuts` and `commands` changes are saved to the project directory
|
|
246
|
+
- When opening settings without an active instance, changes are saved to the global config (`~/.claude-remote/settings.json`)
|
|
247
|
+
|
|
248
|
+
This allows each project to have its own set of commands while sharing global settings like notifications.
|
|
249
|
+
|
|
225
250
|
### Shortcuts
|
|
226
251
|
|
|
227
252
|
Quick-input buttons displayed below the terminal.
|
|
@@ -533,8 +558,22 @@ claude-remote
|
|
|
533
558
|
- 实时终端输出推送到手机
|
|
534
559
|
- 通过 xterm.js 完整渲染 ANSI 颜色
|
|
535
560
|
- 1万行滚动缓冲区,重连时自动恢复
|
|
561
|
+
- **多网络支持** — 启动时显示所有可用 IP(WiFi、VPN、以太网)
|
|
536
562
|
- 局域网 IP 变更通知,附带新连接地址
|
|
537
|
-
- 智能自动滚动,配有"滚动到底部"悬浮按钮
|
|
563
|
+
- 智能自动滚动,配有"滚动到底部"悬浮按钮 — 浏览历史时尊重你的滚动位置
|
|
564
|
+
- **点击聚焦** — 点击终端任意位置自动聚焦输入框,打字体验更流畅
|
|
565
|
+
|
|
566
|
+
### 多网络访问(WiFi + VPN)
|
|
567
|
+
|
|
568
|
+
同时从多个网络接口访问 Claude Code Remote:
|
|
569
|
+
|
|
570
|
+
- **自动网络检测** — 启动时自动发现所有可用的 IPv4 接口
|
|
571
|
+
- **VPN 支持** — 自动识别常见 VPN 接口(WireGuard、Tailscale、ZeroTier、PPP 等)
|
|
572
|
+
- **自定义 CIDR 网段** — 配置 `customPrivateRanges` 添加公司特定网络
|
|
573
|
+
- **网络变更通知** — WebSocket `network_changed` 事件在接口变化时通知客户端
|
|
574
|
+
- **统一 CORS** — 所有检测到的 IP 自动添加到 CORS 白名单
|
|
575
|
+
|
|
576
|
+
示例:当同时连接 WiFi(192.168.x.x)和公司 VPN(30.x.x.x)时,启动时会显示两个地址,都可以通过 Web UI 访问。
|
|
538
577
|
|
|
539
578
|
### 快捷操作
|
|
540
579
|
- 一键发送:Esc、Enter、Tab、方向键、Shift+Tab
|
|
@@ -693,6 +732,7 @@ claude-remote update
|
|
|
693
732
|
| `workspaces` | string[] | [] | Web 生成实例允许的工作目录 |
|
|
694
733
|
| `settingsDirs` | string[] | ["~/.claude/", "~/.claude-remote/settings/"] | 设置文件扫描目录 |
|
|
695
734
|
| `notifications` | object | — | 通知渠道配置(见下文) |
|
|
735
|
+
| `customPrivateRanges` | string[] | [] | CORS 白名单的自定义 CIDR 网段(如 `["30.0.0.0/8"]` 用于 VPN 网络) |
|
|
696
736
|
|
|
697
737
|
> **注意**:端口固定为 8866。所有实例运行在单个守护进程中。
|
|
698
738
|
|
|
@@ -706,6 +746,16 @@ claude-remote update
|
|
|
706
746
|
|
|
707
747
|
**优先级**:CLI 参数 > 配置文件 > 默认值(`claudeArgs` 除外,它是合并的)
|
|
708
748
|
|
|
749
|
+
### 项目级配置
|
|
750
|
+
|
|
751
|
+
通过 Web UI 配置时,快捷键和命令会自动按项目保存:
|
|
752
|
+
|
|
753
|
+
- 配置存储在 `<项目目录>/.claude-remote/settings.json`
|
|
754
|
+
- 从实例视图打开设置时,`shortcuts` 和 `commands` 的变更会保存到项目目录
|
|
755
|
+
- 没有活跃实例时打开设置,变更会保存到全局配置(`~/.claude-remote/settings.json`)
|
|
756
|
+
|
|
757
|
+
这样每个项目可以有自己的一组命令,同时共享通知等全局设置。
|
|
758
|
+
|
|
709
759
|
### 快捷键
|
|
710
760
|
|
|
711
761
|
终端下方显示的快捷输入按钮。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-routes.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/config-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"config-routes.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/config-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AA0BxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAgHvE,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,0BAA0B,CAAC,EAAE,0BAA0B,EACvD,eAAe,CAAC,EAAE,eAAe,GAChC,MAAM,CAiRR"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { writeFile } from 'fs/promises';
|
|
3
3
|
import { existsSync, mkdirSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
5
|
-
import { homedir } from 'os';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
6
|
import { createAuthRoutes } from './auth-routes.js';
|
|
7
7
|
import { logger } from '../logger/logger.js';
|
|
8
8
|
import { withFileLockAsync } from '../utils/file-lock.js';
|
|
9
|
-
import { fillDefaultShortcuts, fillDefaultCommands, } from '../config.js';
|
|
9
|
+
import { fillDefaultShortcuts, fillDefaultCommands, loadUserConfig as loadUserConfigSync, loadWorkdirConfig, mergeConfigs, saveWorkdirConfig, getWorkdirConfigLock, } from '../config.js';
|
|
10
10
|
import { scanSkills, convertSkillsToCommands, mergeSkillCommands, } from '../skills/index.js';
|
|
11
11
|
import { getNotificationStatus, } from '../../../shared/index.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
function getGlobalConfigLock() {
|
|
13
|
+
return getGlobalConfigFile() + '.lock';
|
|
14
|
+
}
|
|
15
15
|
/**
|
|
16
16
|
* 验证配置结构
|
|
17
17
|
*/
|
|
@@ -100,31 +100,29 @@ function validateConfigStructure(config) {
|
|
|
100
100
|
return true;
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
103
|
+
* 获取全局配置目录路径
|
|
104
104
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error({ error, path: CONFIG_FILE }, 'Failed to load user config');
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
105
|
+
function getGlobalConfigDir() {
|
|
106
|
+
return join(homedir(), '.claude-remote');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 获取全局配置文件路径
|
|
110
|
+
*/
|
|
111
|
+
function getGlobalConfigFile() {
|
|
112
|
+
return join(getGlobalConfigDir(), 'settings.json');
|
|
117
113
|
}
|
|
118
114
|
/**
|
|
119
115
|
* 保存配置文件
|
|
120
116
|
*/
|
|
121
117
|
async function saveUserConfig(config) {
|
|
118
|
+
const configDir = getGlobalConfigDir();
|
|
119
|
+
const configFile = getGlobalConfigFile();
|
|
122
120
|
// 确保目录存在
|
|
123
|
-
if (!existsSync(
|
|
124
|
-
mkdirSync(
|
|
121
|
+
if (!existsSync(configDir)) {
|
|
122
|
+
mkdirSync(configDir, { recursive: true, mode: 0o700 });
|
|
125
123
|
}
|
|
126
124
|
// 直接写入文件
|
|
127
|
-
await writeFile(
|
|
125
|
+
await writeFile(configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
128
126
|
}
|
|
129
127
|
export function createConfigRoutes(authModule, notificationManager, notificationServiceFactory, instanceManager) {
|
|
130
128
|
const router = Router();
|
|
@@ -132,50 +130,83 @@ export function createConfigRoutes(authModule, notificationManager, notification
|
|
|
132
130
|
router.use(createAuthRoutes(authModule));
|
|
133
131
|
/**
|
|
134
132
|
* GET /api/config - 获取用户配置
|
|
133
|
+
* 支持实例隔离:查询哪个实例就返回该实例对应的合并配置(全局 + 项目配置)
|
|
135
134
|
*/
|
|
136
135
|
router.get('/config', authModule.requireAuth.bind(authModule), async (req, res) => {
|
|
137
136
|
try {
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
const instanceId = req.query.instanceId;
|
|
138
|
+
// 1. 加载全局配置
|
|
139
|
+
const globalConfig = loadUserConfigSync();
|
|
140
|
+
// 2. 确定工作目录和项目配置
|
|
141
|
+
let cwd;
|
|
142
|
+
let workdirConfig = {};
|
|
143
|
+
if (instanceId) {
|
|
144
|
+
// 传入 instanceId,使用该实例的 cwd
|
|
145
|
+
const instance = instanceManager?.getInstance(instanceId);
|
|
146
|
+
if (instance) {
|
|
147
|
+
cwd = instance.cwd;
|
|
148
|
+
workdirConfig = loadWorkdirConfig(cwd);
|
|
149
|
+
logger.debug({ instanceId, cwd }, 'Using specified instance for config');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// 实例不存在,fallback 到全局配置的 claudeCwd
|
|
153
|
+
cwd = globalConfig.claudeCwd ?? process.cwd();
|
|
154
|
+
workdirConfig = loadWorkdirConfig(cwd);
|
|
155
|
+
logger.warn({ instanceId, fallbackCwd: cwd }, 'Instance not found, using fallback cwd');
|
|
156
|
+
}
|
|
143
157
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
158
|
+
else {
|
|
159
|
+
// 没有指定实例,检查活跃实例
|
|
160
|
+
const activeInstances = instanceManager?.listInstances() ?? [];
|
|
161
|
+
if (activeInstances.length > 0) {
|
|
162
|
+
// 使用第一个实例的 cwd
|
|
163
|
+
cwd = activeInstances[0].cwd;
|
|
164
|
+
workdirConfig = loadWorkdirConfig(cwd);
|
|
165
|
+
logger.debug({ instanceId: activeInstances[0].instanceId, cwd }, 'Using first instance for config');
|
|
166
|
+
}
|
|
167
|
+
else if (globalConfig.claudeCwd) {
|
|
168
|
+
// 无实例但有全局配置的 claudeCwd
|
|
169
|
+
cwd = globalConfig.claudeCwd;
|
|
170
|
+
workdirConfig = loadWorkdirConfig(cwd);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// 最后 fallback
|
|
174
|
+
cwd = process.cwd();
|
|
175
|
+
logger.warn({ fallbackCwd: cwd }, 'No instance, falling back to process.cwd()');
|
|
176
|
+
}
|
|
149
177
|
}
|
|
150
|
-
|
|
151
|
-
|
|
178
|
+
// 3. 合并全局配置和项目配置
|
|
179
|
+
let mergedConfig = mergeConfigs(globalConfig, workdirConfig);
|
|
180
|
+
// 4. 填充默认值
|
|
181
|
+
if (!mergedConfig.shortcuts) {
|
|
182
|
+
mergedConfig = fillDefaultShortcuts(mergedConfig);
|
|
152
183
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (!filledConfig.claudeCwd) {
|
|
156
|
-
logger.warn({ fallbackCwd: claudeCwd }, 'claudeCwd not set in config, falling back to process.cwd() for skill scan');
|
|
184
|
+
if (!mergedConfig.commands) {
|
|
185
|
+
mergedConfig = fillDefaultCommands(mergedConfig);
|
|
157
186
|
}
|
|
158
|
-
|
|
187
|
+
// 5. 扫描项目目录下的 skills(使用正确的 cwd)
|
|
188
|
+
const skills = scanSkills(cwd);
|
|
159
189
|
const skillCommands = convertSkillsToCommands(skills);
|
|
160
|
-
const mergeResult = mergeSkillCommands(
|
|
161
|
-
|
|
190
|
+
const mergeResult = mergeSkillCommands(mergedConfig.commands ?? [], skillCommands);
|
|
191
|
+
mergedConfig = { ...mergedConfig, commands: mergeResult.commands };
|
|
162
192
|
if (mergeResult.added > 0 || mergeResult.removed > 0) {
|
|
163
193
|
logger.info({
|
|
164
194
|
added: mergeResult.added,
|
|
165
195
|
removed: mergeResult.removed,
|
|
166
196
|
preserved: mergeResult.preserved,
|
|
167
197
|
total: mergeResult.total,
|
|
198
|
+
cwd,
|
|
168
199
|
}, 'Skill commands merged');
|
|
169
200
|
}
|
|
170
201
|
// 安全处理:不暴露敏感字段(token、webhook URL 等)
|
|
171
|
-
const { token: _, notifications: _notif, ...safeConfig } =
|
|
202
|
+
const { token: _, notifications: _notif, ...safeConfig } = mergedConfig;
|
|
172
203
|
// 构建通知配置的安全视图
|
|
173
|
-
const safeNotifications = getNotificationStatus(
|
|
204
|
+
const safeNotifications = getNotificationStatus(mergedConfig.notifications);
|
|
174
205
|
const responseConfig = {
|
|
175
206
|
...safeConfig,
|
|
176
207
|
notifications: safeNotifications,
|
|
177
208
|
};
|
|
178
|
-
res.json({ config: responseConfig, configPath:
|
|
209
|
+
res.json({ config: responseConfig, configPath: getGlobalConfigFile() });
|
|
179
210
|
}
|
|
180
211
|
catch (error) {
|
|
181
212
|
logger.error({ error }, 'Failed to get config');
|
|
@@ -184,35 +215,67 @@ export function createConfigRoutes(authModule, notificationManager, notification
|
|
|
184
215
|
});
|
|
185
216
|
/**
|
|
186
217
|
* PUT /api/config - 更新用户配置
|
|
218
|
+
* 支持实例隔离:项目级配置保存到项目目录,全局配置保存到用户目录
|
|
187
219
|
*/
|
|
188
220
|
router.put('/config', authModule.requireAuth.bind(authModule), async (req, res) => {
|
|
189
221
|
try {
|
|
222
|
+
const instanceId = req.query.instanceId;
|
|
190
223
|
const newConfig = req.body;
|
|
191
224
|
// 验证配置结构
|
|
192
225
|
if (!validateConfigStructure(newConfig)) {
|
|
193
226
|
res.status(400).json({ error: 'Invalid config structure' });
|
|
194
227
|
return;
|
|
195
228
|
}
|
|
196
|
-
//
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
229
|
+
// 分离项目级配置和全局配置
|
|
230
|
+
const { shortcuts, commands, ...globalFields } = newConfig;
|
|
231
|
+
// 判断 shortcuts/commands 的保存位置:
|
|
232
|
+
// - 有 instanceId 且实例存在 → 保存到项目配置
|
|
233
|
+
// - 无 instanceId 或实例不存在 → 保存到全局配置(向后兼容)
|
|
234
|
+
const instance = instanceId ? instanceManager?.getInstance(instanceId) : undefined;
|
|
235
|
+
const hasProjectFields = shortcuts !== undefined || commands !== undefined;
|
|
236
|
+
// 1. 保存全局配置
|
|
237
|
+
await withFileLockAsync(getGlobalConfigLock(), async () => {
|
|
238
|
+
const existingGlobal = loadUserConfigSync();
|
|
239
|
+
const mergedGlobal = {
|
|
240
|
+
...existingGlobal,
|
|
241
|
+
...globalFields,
|
|
242
|
+
};
|
|
243
|
+
// 无实例时,shortcuts/commands 保存到全局配置(向后兼容)
|
|
244
|
+
if (!(instance && hasProjectFields)) {
|
|
245
|
+
if (shortcuts !== undefined)
|
|
246
|
+
mergedGlobal.shortcuts = shortcuts;
|
|
247
|
+
if (commands !== undefined)
|
|
248
|
+
mergedGlobal.commands = commands;
|
|
249
|
+
}
|
|
201
250
|
// 处理通知配置:逐渠道深合并,保留已有字段(如 enabled)
|
|
202
251
|
if (newConfig.notifications) {
|
|
203
|
-
const existingNotif =
|
|
252
|
+
const existingNotif = existingGlobal.notifications ?? {};
|
|
204
253
|
const merged = { ...existingNotif };
|
|
205
|
-
// 逐渠道合并:新值覆盖,但保留已有字段
|
|
206
254
|
if (newConfig.notifications.dingtalk) {
|
|
207
255
|
merged.dingtalk = { ...existingNotif.dingtalk, ...newConfig.notifications.dingtalk };
|
|
208
256
|
}
|
|
209
257
|
if (newConfig.notifications.wechat_work) {
|
|
210
258
|
merged.wechat_work = { ...existingNotif.wechat_work, ...newConfig.notifications.wechat_work };
|
|
211
259
|
}
|
|
212
|
-
|
|
260
|
+
mergedGlobal.notifications = merged;
|
|
213
261
|
}
|
|
214
|
-
await saveUserConfig(
|
|
262
|
+
await saveUserConfig(mergedGlobal);
|
|
215
263
|
});
|
|
264
|
+
// 2. 保存项目级配置(有实例时保存 shortcuts/commands)
|
|
265
|
+
let projectConfigPath;
|
|
266
|
+
if (instance && hasProjectFields) {
|
|
267
|
+
const projectLock = getWorkdirConfigLock(instance.cwd);
|
|
268
|
+
await withFileLockAsync(projectLock, async () => {
|
|
269
|
+
const existingProject = loadWorkdirConfig(instance.cwd);
|
|
270
|
+
const mergedProject = {
|
|
271
|
+
...existingProject,
|
|
272
|
+
...(shortcuts !== undefined && { shortcuts }),
|
|
273
|
+
...(commands !== undefined && { commands }),
|
|
274
|
+
};
|
|
275
|
+
await saveWorkdirConfig(instance.cwd, mergedProject);
|
|
276
|
+
projectConfigPath = instance.cwd;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
216
279
|
// 触发服务缓存刷新(当前实例即时生效)
|
|
217
280
|
if (notificationServiceFactory) {
|
|
218
281
|
notificationServiceFactory.refresh();
|
|
@@ -224,8 +287,8 @@ export function createConfigRoutes(authModule, notificationManager, notification
|
|
|
224
287
|
source: 'config_update',
|
|
225
288
|
});
|
|
226
289
|
}
|
|
227
|
-
logger.info({ configPath:
|
|
228
|
-
res.json({ success: true, configPath:
|
|
290
|
+
logger.info({ configPath: getGlobalConfigFile(), instanceId, projectConfigPath }, 'User config updated');
|
|
291
|
+
res.json({ success: true, configPath: getGlobalConfigFile() });
|
|
229
292
|
}
|
|
230
293
|
catch (error) {
|
|
231
294
|
logger.error({ error }, 'Failed to update config');
|
|
@@ -250,8 +313,8 @@ export function createConfigRoutes(authModule, notificationManager, notification
|
|
|
250
313
|
return;
|
|
251
314
|
}
|
|
252
315
|
// 文件锁保护 read-modify-write,返回结果供外部统一处理响应
|
|
253
|
-
const result = await withFileLockAsync(
|
|
254
|
-
const config = (
|
|
316
|
+
const result = await withFileLockAsync(getGlobalConfigLock(), async () => {
|
|
317
|
+
const config = loadUserConfigSync() ?? {};
|
|
255
318
|
const notifications = config.notifications ?? {};
|
|
256
319
|
// 检查渠道是否已配置
|
|
257
320
|
if (channel === 'dingtalk') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-routes.js","sourceRoot":"","sources":["../../../../backend/src/api/config-routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-routes.js","sourceRoot":"","sources":["../../../../backend/src/api/config-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,10 @@ export interface ApiRouterOptions {
|
|
|
10
10
|
pushService?: PushService;
|
|
11
11
|
notificationManager?: NotificationManager;
|
|
12
12
|
notificationServiceFactory?: NotificationServiceFactory;
|
|
13
|
+
/** 服务监听端口 */
|
|
14
|
+
port: number;
|
|
15
|
+
/** 自定义私有网段(CIDR 格式) */
|
|
16
|
+
customPrivateRanges?: string[];
|
|
13
17
|
/** 关闭 daemon 的回调 */
|
|
14
18
|
onShutdown?: () => void;
|
|
15
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAGlG,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAGlG,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAmD9D"}
|
|
@@ -11,7 +11,12 @@ export function createApiRouter(opts) {
|
|
|
11
11
|
const router = Router();
|
|
12
12
|
router.use(createHealthRoutes(opts.instanceManager));
|
|
13
13
|
router.use(createAuthRoutes(opts.authModule));
|
|
14
|
-
router.use(createStatusRoutes(
|
|
14
|
+
router.use(createStatusRoutes({
|
|
15
|
+
authModule: opts.authModule,
|
|
16
|
+
instanceManager: opts.instanceManager,
|
|
17
|
+
port: opts.port,
|
|
18
|
+
customPrivateRanges: opts.customPrivateRanges,
|
|
19
|
+
}));
|
|
15
20
|
router.use(createHookRoutes(opts.instanceManager));
|
|
16
21
|
router.use(createConfigRoutes(opts.authModule, opts.notificationManager, opts.notificationServiceFactory, opts.instanceManager));
|
|
17
22
|
if (opts.pushService) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../backend/src/api/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../backend/src/api/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { AuthModule } from '../auth/auth-middleware.js';
|
|
3
3
|
import type { InstanceManager } from '../instance/instance-manager.js';
|
|
4
|
-
export
|
|
4
|
+
export interface StatusRoutesOptions {
|
|
5
|
+
authModule: AuthModule;
|
|
6
|
+
instanceManager: InstanceManager;
|
|
7
|
+
port: number;
|
|
8
|
+
customPrivateRanges?: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function createStatusRoutes(opts: StatusRoutesOptions): Router;
|
|
5
11
|
//# sourceMappingURL=status-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-routes.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/status-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"status-routes.d.ts","sourceRoot":"","sources":["../../../../backend/src/api/status-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIvE,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA+CpE"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
|
|
2
|
+
import { getAllNetworkInterfaces, isInCidrRange } from '../utils/network.js';
|
|
3
|
+
export function createStatusRoutes(opts) {
|
|
4
|
+
const { authModule, instanceManager, port, customPrivateRanges: customRanges = [] } = opts;
|
|
3
5
|
const router = Router();
|
|
4
6
|
// Session validation endpoint - checks if user is authenticated
|
|
5
7
|
router.get('/status', authModule.requireAuth, (_req, res) => {
|
|
@@ -17,6 +19,25 @@ export function createStatusRoutes(authModule, instanceManager) {
|
|
|
17
19
|
connectedClients: session.clientCount,
|
|
18
20
|
});
|
|
19
21
|
});
|
|
22
|
+
// Network information endpoint - returns all available network interfaces
|
|
23
|
+
router.get('/network', authModule.requireAuth, (_req, res) => {
|
|
24
|
+
const interfaces = getAllNetworkInterfaces();
|
|
25
|
+
const networkInfo = interfaces.map(iface => {
|
|
26
|
+
const isCustom = customRanges.some(range => isInCidrRange(iface.address, range));
|
|
27
|
+
return {
|
|
28
|
+
name: iface.name,
|
|
29
|
+
address: iface.address,
|
|
30
|
+
type: iface.isVpn ? 'vpn' : iface.isPrivate ? 'private' : isCustom ? 'custom' : 'public',
|
|
31
|
+
isVpn: iface.isVpn,
|
|
32
|
+
isPrivate: iface.isPrivate,
|
|
33
|
+
url: `http://${iface.address}:${port}`,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
res.json({
|
|
37
|
+
interfaces: networkInfo,
|
|
38
|
+
preferredUrl: `http://127.0.0.1:${port}`,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
20
41
|
return router;
|
|
21
42
|
}
|
|
22
43
|
//# sourceMappingURL=status-routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-routes.js","sourceRoot":"","sources":["../../../../backend/src/api/status-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"status-routes.js","sourceRoot":"","sources":["../../../../backend/src/api/status-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAU7E,MAAM,UAAU,kBAAkB,CAAC,IAAyB;IAC1D,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3F,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,gEAAgE;IAChE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACrE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAoB,CAAC;QACnD,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB,EAAE,OAAO,CAAC,WAAW;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3D,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;QAE7C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjF,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACxF,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,GAAG,EAAE,UAAU,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;aACvC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC;YACP,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,oBAAoB,IAAI,EAAE;SACzC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../backend/src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../backend/src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAqKH;;;GAGG;AACH,iBAAe,mBAAmB,CAChC,OAAO,EAAE,OAAO,gBAAgB,EAAE,UAAU,EAC5C,OAAO,EAAE;IACP,MAAM,EAAE,OAAO,aAAa,EAAE,SAAS,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,GACA,OAAO,CAAC,IAAI,CAAC,CAmHf;AAED;;GAEG;AACH,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoEhD;AAED;;GAEG;AACH,iBAAe,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyElD;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAW5D"}
|
package/dist/backend/src/cli.js
CHANGED
|
@@ -85,7 +85,7 @@ void (async () => {
|
|
|
85
85
|
process.exit(1);
|
|
86
86
|
}
|
|
87
87
|
// Ensure daemon is running, then attach as client
|
|
88
|
-
const { isDaemonRunning, checkDaemonVersion
|
|
88
|
+
const { isDaemonRunning, checkDaemonVersion } = await import('./daemon/daemon-client.js');
|
|
89
89
|
const { launchDaemon } = await import('./daemon/daemon-launcher.js');
|
|
90
90
|
const { DEFAULT_PORT } = await import('../../shared/index.js');
|
|
91
91
|
let daemonPid;
|
|
@@ -121,22 +121,8 @@ void (async () => {
|
|
|
121
121
|
// Collect warnings to display in banner
|
|
122
122
|
const versionWarnings = [];
|
|
123
123
|
if (versionCheck.needsRestart) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (result.restarted) {
|
|
127
|
-
process.stderr.write('Daemon restarted with latest version.\n');
|
|
128
|
-
// After restart, daemon PID needs to be fetched from status API
|
|
129
|
-
}
|
|
130
|
-
else if (result.reason === 'has_instances') {
|
|
131
|
-
versionWarnings.push(versionMsg);
|
|
132
|
-
versionWarnings.push('Instances are running on old version.');
|
|
133
|
-
versionWarnings.push('Run: claude-remote stop');
|
|
134
|
-
}
|
|
135
|
-
else if (result.reason === 'stop_failed') {
|
|
136
|
-
versionWarnings.push(versionMsg);
|
|
137
|
-
versionWarnings.push('Failed to stop daemon.');
|
|
138
|
-
versionWarnings.push('Run: claude-remote stop');
|
|
139
|
-
}
|
|
124
|
+
versionWarnings.push(`Daemon outdated: ${versionCheck.daemonVersion} → ${versionCheck.cliVersion}`);
|
|
125
|
+
versionWarnings.push('Run `claude-remote stop && claude-remote` to restart.');
|
|
140
126
|
}
|
|
141
127
|
// Store warnings for banner display
|
|
142
128
|
process.env.CLI_VERSION_WARNINGS = JSON.stringify(versionWarnings);
|