@caoruhua/open-claude-remote 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +449 -0
- package/dist/api/auth-routes.d.ts +4 -0
- package/dist/api/auth-routes.d.ts.map +1 -0
- package/dist/api/auth-routes.js +7 -0
- package/dist/api/auth-routes.js.map +1 -0
- package/dist/api/config-routes.d.ts +4 -0
- package/dist/api/config-routes.d.ts.map +1 -0
- package/dist/api/config-routes.js +180 -0
- package/dist/api/config-routes.js.map +1 -0
- package/dist/api/health-routes.d.ts +3 -0
- package/dist/api/health-routes.d.ts.map +1 -0
- package/dist/api/health-routes.js +9 -0
- package/dist/api/health-routes.js.map +1 -0
- package/dist/api/hook-routes.d.ts +4 -0
- package/dist/api/hook-routes.d.ts.map +1 -0
- package/dist/api/hook-routes.js +32 -0
- package/dist/api/hook-routes.js.map +1 -0
- package/dist/api/instance-routes.d.ts +20 -0
- package/dist/api/instance-routes.d.ts.map +1 -0
- package/dist/api/instance-routes.js +128 -0
- package/dist/api/instance-routes.js.map +1 -0
- package/dist/api/push-routes.d.ts +5 -0
- package/dist/api/push-routes.d.ts.map +1 -0
- package/dist/api/push-routes.js +45 -0
- package/dist/api/push-routes.js.map +1 -0
- package/dist/api/router.d.ts +19 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +37 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/status-routes.d.ts +5 -0
- package/dist/api/status-routes.d.ts.map +1 -0
- package/dist/api/status-routes.js +17 -0
- package/dist/api/status-routes.js.map +1 -0
- package/dist/attach.d.ts +9 -0
- package/dist/attach.d.ts.map +1 -0
- package/dist/attach.js +155 -0
- package/dist/attach.js.map +1 -0
- package/dist/auth/auth-middleware.d.ts +52 -0
- package/dist/auth/auth-middleware.d.ts.map +1 -0
- package/dist/auth/auth-middleware.js +124 -0
- package/dist/auth/auth-middleware.js.map +1 -0
- package/dist/auth/rate-limiter.d.ts +37 -0
- package/dist/auth/rate-limiter.d.ts.map +1 -0
- package/dist/auth/rate-limiter.js +81 -0
- package/dist/auth/rate-limiter.js.map +1 -0
- package/dist/auth/token-generator.d.ts +9 -0
- package/dist/auth/token-generator.d.ts.map +1 -0
- package/dist/auth/token-generator.js +15 -0
- package/dist/auth/token-generator.js.map +1 -0
- package/dist/cli-utils.d.ts +19 -0
- package/dist/cli-utils.d.ts.map +1 -0
- package/dist/cli-utils.js +132 -0
- package/dist/cli-utils.js.map +1 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +58 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +146 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +329 -0
- package/dist/config.js.map +1 -0
- package/dist/hooks/hook-receiver.d.ts +39 -0
- package/dist/hooks/hook-receiver.d.ts.map +1 -0
- package/dist/hooks/hook-receiver.js +46 -0
- package/dist/hooks/hook-receiver.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +353 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/logger.d.ts +8 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +90 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/notification/dingtalk-service.d.ts +24 -0
- package/dist/notification/dingtalk-service.d.ts.map +1 -0
- package/dist/notification/dingtalk-service.js +94 -0
- package/dist/notification/dingtalk-service.js.map +1 -0
- package/dist/pty/output-buffer.d.ts +25 -0
- package/dist/pty/output-buffer.d.ts.map +1 -0
- package/dist/pty/output-buffer.js +58 -0
- package/dist/pty/output-buffer.js.map +1 -0
- package/dist/pty/pty-manager.d.ts +45 -0
- package/dist/pty/pty-manager.d.ts.map +1 -0
- package/dist/pty/pty-manager.js +108 -0
- package/dist/pty/pty-manager.js.map +1 -0
- package/dist/pty/types.d.ts +11 -0
- package/dist/pty/types.d.ts.map +1 -0
- package/dist/pty/types.js +2 -0
- package/dist/pty/types.js.map +1 -0
- package/dist/pty/virtual-pty.d.ts +37 -0
- package/dist/pty/virtual-pty.d.ts.map +1 -0
- package/dist/pty/virtual-pty.js +161 -0
- package/dist/pty/virtual-pty.js.map +1 -0
- package/dist/push/push-service.d.ts +87 -0
- package/dist/push/push-service.d.ts.map +1 -0
- package/dist/push/push-service.js +301 -0
- package/dist/push/push-service.js.map +1 -0
- package/dist/registry/instance-registry.d.ts +32 -0
- package/dist/registry/instance-registry.d.ts.map +1 -0
- package/dist/registry/instance-registry.js +115 -0
- package/dist/registry/instance-registry.js.map +1 -0
- package/dist/registry/instance-spawner.d.ts +33 -0
- package/dist/registry/instance-spawner.d.ts.map +1 -0
- package/dist/registry/instance-spawner.js +91 -0
- package/dist/registry/instance-spawner.js.map +1 -0
- package/dist/registry/port-finder.d.ts +8 -0
- package/dist/registry/port-finder.d.ts.map +1 -0
- package/dist/registry/port-finder.js +35 -0
- package/dist/registry/port-finder.js.map +1 -0
- package/dist/registry/shared-token.d.ts +11 -0
- package/dist/registry/shared-token.d.ts.map +1 -0
- package/dist/registry/shared-token.js +82 -0
- package/dist/registry/shared-token.js.map +1 -0
- package/dist/registry/stop-instances.d.ts +27 -0
- package/dist/registry/stop-instances.d.ts.map +1 -0
- package/dist/registry/stop-instances.js +212 -0
- package/dist/registry/stop-instances.js.map +1 -0
- package/dist/session/session-controller.d.ts +58 -0
- package/dist/session/session-controller.d.ts.map +1 -0
- package/dist/session/session-controller.js +273 -0
- package/dist/session/session-controller.js.map +1 -0
- package/dist/terminal/terminal-relay.d.ts +29 -0
- package/dist/terminal/terminal-relay.d.ts.map +1 -0
- package/dist/terminal/terminal-relay.js +106 -0
- package/dist/terminal/terminal-relay.js.map +1 -0
- package/dist/utils/ansi-filter.d.ts +41 -0
- package/dist/utils/ansi-filter.d.ts.map +1 -0
- package/dist/utils/ansi-filter.js +147 -0
- package/dist/utils/ansi-filter.js.map +1 -0
- package/dist/utils/file-lock.d.ts +23 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +125 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/ip-monitor.d.ts +39 -0
- package/dist/utils/ip-monitor.d.ts.map +1 -0
- package/dist/utils/ip-monitor.js +114 -0
- package/dist/utils/ip-monitor.js.map +1 -0
- package/dist/utils/network.d.ts +19 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +54 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/pid-file.d.ts +10 -0
- package/dist/utils/pid-file.d.ts.map +1 -0
- package/dist/utils/pid-file.js +30 -0
- package/dist/utils/pid-file.js.map +1 -0
- package/dist/utils/qrcode-banner.d.ts +6 -0
- package/dist/utils/qrcode-banner.d.ts.map +1 -0
- package/dist/utils/qrcode-banner.js +16 -0
- package/dist/utils/qrcode-banner.js.map +1 -0
- package/dist/ws/ws-handler.d.ts +10 -0
- package/dist/ws/ws-handler.d.ts.map +1 -0
- package/dist/ws/ws-handler.js +36 -0
- package/dist/ws/ws-handler.js.map +1 -0
- package/dist/ws/ws-server.d.ts +78 -0
- package/dist/ws/ws-server.d.ts.map +1 -0
- package/dist/ws/ws-server.js +223 -0
- package/dist/ws/ws-server.js.map +1 -0
- package/frontend-dist/assets/index-BKudo1Dw.css +32 -0
- package/frontend-dist/assets/index-BqqB1hYe.js +141 -0
- package/frontend-dist/index.html +15 -0
- package/frontend-dist/sw.js +46 -0
- package/package.json +79 -0
- package/shared-dist/constants.d.ts +10 -0
- package/shared-dist/constants.d.ts.map +1 -0
- package/shared-dist/constants.js +10 -0
- package/shared-dist/constants.js.map +1 -0
- package/shared-dist/defaults.d.ts +30 -0
- package/shared-dist/defaults.d.ts.map +1 -0
- package/shared-dist/defaults.js +31 -0
- package/shared-dist/defaults.js.map +1 -0
- package/shared-dist/index.d.ts +5 -0
- package/shared-dist/index.d.ts.map +1 -0
- package/shared-dist/index.js +5 -0
- package/shared-dist/index.js.map +1 -0
- package/shared-dist/instance.d.ts +25 -0
- package/shared-dist/instance.d.ts.map +1 -0
- package/shared-dist/instance.js +7 -0
- package/shared-dist/instance.js.map +1 -0
- package/shared-dist/question-utils.d.ts +15 -0
- package/shared-dist/question-utils.d.ts.map +1 -0
- package/shared-dist/question-utils.js +24 -0
- package/shared-dist/question-utils.js.map +1 -0
- package/shared-dist/ws-protocol.d.ts +60 -0
- package/shared-dist/ws-protocol.d.ts.map +1 -0
- package/shared-dist/ws-protocol.js +5 -0
- package/shared-dist/ws-protocol.js.map +1 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, maximum-scale=1.0, user-scalable=no" />
|
|
6
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
7
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
8
|
+
<title>Claude Code Remote</title>
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-BqqB1hYe.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BKudo1Dw.css">
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-globals */
|
|
2
|
+
|
|
3
|
+
// Service Worker for Web Push notifications
|
|
4
|
+
|
|
5
|
+
self.addEventListener('push', (event) => {
|
|
6
|
+
if (!event.data) return;
|
|
7
|
+
|
|
8
|
+
let payload;
|
|
9
|
+
try {
|
|
10
|
+
payload = event.data.json();
|
|
11
|
+
} catch {
|
|
12
|
+
payload = { title: 'Claude Code', body: event.data.text() };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const options = {
|
|
16
|
+
body: payload.body || '',
|
|
17
|
+
icon: '/favicon.ico',
|
|
18
|
+
badge: '/favicon.ico',
|
|
19
|
+
tag: payload.tag || 'claude-notification',
|
|
20
|
+
renotify: payload.renotify || false,
|
|
21
|
+
data: { url: self.location.origin },
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
event.waitUntil(
|
|
25
|
+
self.registration.showNotification(payload.title || 'Claude Code', options)
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
self.addEventListener('notificationclick', (event) => {
|
|
30
|
+
event.notification.close();
|
|
31
|
+
|
|
32
|
+
const url = event.notification.data?.url || self.location.origin;
|
|
33
|
+
|
|
34
|
+
event.waitUntil(
|
|
35
|
+
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
|
|
36
|
+
// Focus existing window if found
|
|
37
|
+
for (const client of clientList) {
|
|
38
|
+
if (client.url.startsWith(url) && 'focus' in client) {
|
|
39
|
+
return client.focus();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Open new window
|
|
43
|
+
return self.clients.openWindow(url);
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@caoruhua/open-claude-remote",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Remote control proxy for Claude Code CLI - control your PC terminal from mobile browser",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude",
|
|
7
|
+
"claude-code",
|
|
8
|
+
"remote",
|
|
9
|
+
"terminal",
|
|
10
|
+
"proxy",
|
|
11
|
+
"mobile"
|
|
12
|
+
],
|
|
13
|
+
"author": "caoruhua",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/StephenTowne/open-claude-remote.git"
|
|
18
|
+
},
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "./dist/index.js",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"bin": {
|
|
23
|
+
"claude-remote": "./dist/cli.js"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/",
|
|
27
|
+
"shared-dist/",
|
|
28
|
+
"frontend-dist/",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"dev": "tsx src/index.ts",
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"build:publish": "node scripts/build-for-publish.js",
|
|
36
|
+
"start": "node dist/index.js",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"test:watch": "vitest"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@claude-remote/shared": "workspace:*",
|
|
42
|
+
"cookie": "^1.0.0",
|
|
43
|
+
"cors": "^2.8.5",
|
|
44
|
+
"express": "^4.21.0",
|
|
45
|
+
"node-pty": "^1.0.0",
|
|
46
|
+
"pino": "^9.6.0",
|
|
47
|
+
"qrcode-terminal": "^0.12.0",
|
|
48
|
+
"web-push": "^3.6.7",
|
|
49
|
+
"ws": "^8.18.0"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@anthropic-ai/claude-code": ">=0.0.1"
|
|
53
|
+
},
|
|
54
|
+
"peerDependenciesMeta": {
|
|
55
|
+
"@anthropic-ai/claude-code": {
|
|
56
|
+
"optional": true
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/cookie": "^0.6.0",
|
|
61
|
+
"@types/cors": "^2.8.17",
|
|
62
|
+
"@types/express": "^5.0.0",
|
|
63
|
+
"@types/node": "^22.0.0",
|
|
64
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
65
|
+
"@types/web-push": "^3.6.4",
|
|
66
|
+
"@types/ws": "^8.5.0",
|
|
67
|
+
"pino-pretty": "^13.0.0",
|
|
68
|
+
"tsx": "^4.19.0",
|
|
69
|
+
"typescript": "^5.7.0",
|
|
70
|
+
"vitest": "^3.0.0"
|
|
71
|
+
},
|
|
72
|
+
"engines": {
|
|
73
|
+
"node": ">=20.0.0"
|
|
74
|
+
},
|
|
75
|
+
"os": [
|
|
76
|
+
"darwin",
|
|
77
|
+
"linux"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const DEFAULT_PORT = 3000;
|
|
2
|
+
export declare const DEFAULT_SESSION_TTL_MS = 86400000;
|
|
3
|
+
export declare const DEFAULT_AUTH_RATE_LIMIT = 20;
|
|
4
|
+
export declare const DEFAULT_MAX_BUFFER_LINES = 10000;
|
|
5
|
+
export declare const WS_HEARTBEAT_INTERVAL_MS = 30000;
|
|
6
|
+
export declare const WS_HEARTBEAT_TIMEOUT_MS = 35000;
|
|
7
|
+
export declare const TOKEN_BYTES = 32;
|
|
8
|
+
export declare const SESSION_ID_BYTES = 32;
|
|
9
|
+
export declare const MAX_WS_MESSAGE_SIZE: number;
|
|
10
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAC/C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAC9C,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAC9C,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,mBAAmB,QAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const DEFAULT_PORT = 3000;
|
|
2
|
+
export const DEFAULT_SESSION_TTL_MS = 86400000; // 24 hours
|
|
3
|
+
export const DEFAULT_AUTH_RATE_LIMIT = 20; // per minute per IP
|
|
4
|
+
export const DEFAULT_MAX_BUFFER_LINES = 10000;
|
|
5
|
+
export const WS_HEARTBEAT_INTERVAL_MS = 30000;
|
|
6
|
+
export const WS_HEARTBEAT_TIMEOUT_MS = 35000;
|
|
7
|
+
export const TOKEN_BYTES = 32;
|
|
8
|
+
export const SESSION_ID_BYTES = 32;
|
|
9
|
+
export const MAX_WS_MESSAGE_SIZE = 1024 * 1024; // 1MB
|
|
10
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,CAAC,WAAW;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,oBAAoB;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 快捷键配置项(存储格式,包含 enabled 字段)
|
|
3
|
+
*/
|
|
4
|
+
export interface ConfigurableShortcut {
|
|
5
|
+
label: string;
|
|
6
|
+
data: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
desc?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 命令配置项(存储格式,包含 enabled 字段)
|
|
12
|
+
*/
|
|
13
|
+
export interface ConfigurableCommand {
|
|
14
|
+
label: string;
|
|
15
|
+
command: string;
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
desc?: string;
|
|
18
|
+
autoSend?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 默认快捷键列表(只包含 enabled: true 的项)
|
|
22
|
+
* 真相源:前后端共用此定义
|
|
23
|
+
*/
|
|
24
|
+
export declare const DEFAULT_SHORTCUTS: ConfigurableShortcut[];
|
|
25
|
+
/**
|
|
26
|
+
* 默认命令列表(只包含 enabled: true 的项)
|
|
27
|
+
* 真相源:前后端共用此定义
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_COMMANDS: ConfigurableCommand[];
|
|
30
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,EASnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,mBAAmB,EAWjD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 默认快捷键列表(只包含 enabled: true 的项)
|
|
3
|
+
* 真相源:前后端共用此定义
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_SHORTCUTS = [
|
|
6
|
+
{ label: 'Esc', data: '\x1b', enabled: true },
|
|
7
|
+
{ label: 'Enter', data: '\r', enabled: true },
|
|
8
|
+
{ label: 'Tab', data: '\t', enabled: true },
|
|
9
|
+
{ label: '↑', data: '\x1b[A', enabled: true },
|
|
10
|
+
{ label: '↓', data: '\x1b[B', enabled: true },
|
|
11
|
+
{ label: '←', data: '\x1b[D', enabled: true },
|
|
12
|
+
{ label: '→', data: '\x1b[C', enabled: true },
|
|
13
|
+
{ label: 'S-Tab', data: '\x1b[Z', enabled: true, desc: 'Shift+Tab, 向前切换' },
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* 默认命令列表(只包含 enabled: true 的项)
|
|
17
|
+
* 真相源:前后端共用此定义
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_COMMANDS = [
|
|
20
|
+
{ label: '/clear', command: '/clear', enabled: true },
|
|
21
|
+
{ label: '/compact', command: '/compact', enabled: true },
|
|
22
|
+
{ label: '/resume', command: '/resume', enabled: true },
|
|
23
|
+
{ label: '/stats', command: '/stats', enabled: true },
|
|
24
|
+
{ label: '/exit', command: '/exit', enabled: true },
|
|
25
|
+
{ label: '/commit-commands:commit', command: '/commit-commands:commit', enabled: true },
|
|
26
|
+
{ label: '/feature-dev:feature-dev', command: '/feature-dev:feature-dev', enabled: true },
|
|
27
|
+
{ label: '/auto-doc', command: '/auto-doc', enabled: true },
|
|
28
|
+
{ label: '/code-review-expert', command: '/code-review-expert', enabled: true },
|
|
29
|
+
{ label: '/systematic-debugging', command: '/systematic-debugging', enabled: true },
|
|
30
|
+
];
|
|
31
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE;CAC3E,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACrD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IACrD,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;IACzD,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IACvD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IACrD,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IACnD,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,IAAI,EAAE;IACvF,EAAE,KAAK,EAAE,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE;IACzF,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3D,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC/E,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE;CACpF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface InstanceInfo {
|
|
2
|
+
instanceId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
host: string;
|
|
5
|
+
port: number;
|
|
6
|
+
pid: number;
|
|
7
|
+
cwd: string;
|
|
8
|
+
startedAt: string;
|
|
9
|
+
/** 是否为无终端模式(web 创建的实例) */
|
|
10
|
+
headless?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface InstanceRegistry {
|
|
13
|
+
version: 1;
|
|
14
|
+
instances: InstanceInfo[];
|
|
15
|
+
}
|
|
16
|
+
export interface InstanceListItem extends InstanceInfo {
|
|
17
|
+
isCurrent: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** ~/.claude-remote 目录名 */
|
|
20
|
+
export declare const CLAUDE_REMOTE_DIR = ".claude-remote";
|
|
21
|
+
/** 注册表文件名 */
|
|
22
|
+
export declare const REGISTRY_FILENAME = "instances.json";
|
|
23
|
+
/** Claude Code settings 目录名 */
|
|
24
|
+
export declare const SETTINGS_DIR = "settings";
|
|
25
|
+
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../src/instance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,2BAA2B;AAC3B,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,aAAa;AACb,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,+BAA+B;AAC/B,eAAO,MAAM,YAAY,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../src/instance.ts"],"names":[],"mappings":"AAqBA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,aAAa;AACb,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { QuestionOption } from './ws-protocol.js';
|
|
2
|
+
/**
|
|
3
|
+
* 检查选项标签是否为自由文本输入类型
|
|
4
|
+
* 匹配规则:忽略大小写 + 忽略末尾标点符号(. ! ? 等)
|
|
5
|
+
* @param label 选项标签
|
|
6
|
+
* @returns 是否为自由文本输入选项
|
|
7
|
+
*/
|
|
8
|
+
export declare function isFreeTextLabel(label: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* 检查选项是否为自由文本输入类型
|
|
11
|
+
* @param option 选项对象
|
|
12
|
+
* @returns 是否为自由文本输入选项
|
|
13
|
+
*/
|
|
14
|
+
export declare function isFreeTextOption(option: QuestionOption): boolean;
|
|
15
|
+
//# sourceMappingURL=question-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-utils.d.ts","sourceRoot":"","sources":["../src/question-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQvD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAEhE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自由文本输入选项的标签列表(不区分大小写,匹配时忽略末尾标点)
|
|
3
|
+
* 选择这些选项后会显示文本输入框
|
|
4
|
+
*/
|
|
5
|
+
const FREE_TEXT_LABELS = ['other', '其他', '输入文字', 'chat about this', 'type something'];
|
|
6
|
+
/**
|
|
7
|
+
* 检查选项标签是否为自由文本输入类型
|
|
8
|
+
* 匹配规则:忽略大小写 + 忽略末尾标点符号(. ! ? 等)
|
|
9
|
+
* @param label 选项标签
|
|
10
|
+
* @returns 是否为自由文本输入选项
|
|
11
|
+
*/
|
|
12
|
+
export function isFreeTextLabel(label) {
|
|
13
|
+
const normalized = label.trim().toLowerCase().replace(/[.!?]+$/, '');
|
|
14
|
+
return FREE_TEXT_LABELS.includes(normalized);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 检查选项是否为自由文本输入类型
|
|
18
|
+
* @param option 选项对象
|
|
19
|
+
* @returns 是否为自由文本输入选项
|
|
20
|
+
*/
|
|
21
|
+
export function isFreeTextOption(option) {
|
|
22
|
+
return isFreeTextLabel(option.label);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=question-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-utils.js","sourceRoot":"","sources":["../src/question-utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,CAAU,CAAC;AAE/F;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,UAA6C,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface TerminalOutputMessage {
|
|
2
|
+
type: 'terminal_output';
|
|
3
|
+
data: string;
|
|
4
|
+
seq: number;
|
|
5
|
+
}
|
|
6
|
+
export type SessionStatus = 'idle' | 'running' | 'waiting_input';
|
|
7
|
+
export interface StatusUpdateMessage {
|
|
8
|
+
type: 'status_update';
|
|
9
|
+
status: SessionStatus;
|
|
10
|
+
detail?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface HistorySyncMessage {
|
|
13
|
+
type: 'history_sync';
|
|
14
|
+
data: string;
|
|
15
|
+
seq: number;
|
|
16
|
+
status: SessionStatus;
|
|
17
|
+
cols?: number;
|
|
18
|
+
rows?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface HeartbeatMessage {
|
|
21
|
+
type: 'heartbeat';
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ErrorMessage {
|
|
25
|
+
type: 'error';
|
|
26
|
+
code: string;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SessionEndedMessage {
|
|
30
|
+
type: 'session_ended';
|
|
31
|
+
exitCode: number;
|
|
32
|
+
reason: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TerminalResizeMessage {
|
|
35
|
+
type: 'terminal_resize';
|
|
36
|
+
cols: number;
|
|
37
|
+
rows: number;
|
|
38
|
+
}
|
|
39
|
+
export interface IpChangedMessage {
|
|
40
|
+
type: 'ip_changed';
|
|
41
|
+
oldIp: string;
|
|
42
|
+
newIp: string;
|
|
43
|
+
newUrl: string;
|
|
44
|
+
}
|
|
45
|
+
export type ServerMessage = TerminalOutputMessage | StatusUpdateMessage | HistorySyncMessage | HeartbeatMessage | ErrorMessage | SessionEndedMessage | TerminalResizeMessage | IpChangedMessage;
|
|
46
|
+
export interface UserInputMessage {
|
|
47
|
+
type: 'user_input';
|
|
48
|
+
data: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ResizeMessage {
|
|
51
|
+
type: 'resize';
|
|
52
|
+
cols: number;
|
|
53
|
+
rows: number;
|
|
54
|
+
}
|
|
55
|
+
export interface ClientHeartbeatMessage {
|
|
56
|
+
type: 'heartbeat';
|
|
57
|
+
timestamp: number;
|
|
58
|
+
}
|
|
59
|
+
export type ClientMessage = UserInputMessage | ResizeMessage | ClientHeartbeatMessage;
|
|
60
|
+
//# sourceMappingURL=ws-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-protocol.d.ts","sourceRoot":"","sources":["../src/ws-protocol.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,YAAY,GACZ,mBAAmB,GACnB,qBAAqB,GACrB,gBAAgB,CAAC;AAMrB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GACrB,gBAAgB,GAChB,aAAa,GACb,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-protocol.js","sourceRoot":"","sources":["../src/ws-protocol.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,2BAA2B;AAC3B,iCAAiC"}
|