@jingyi0605/codingns 0.1.1 → 0.1.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 +14 -0
- package/dist/public/assets/{TerminalPage-CVG1cGAJ.js → TerminalPage-Nq5sPc5c.js} +19 -19
- package/dist/public/assets/index-9hnprhO7.css +1 -0
- package/dist/public/assets/index-BTpmuKhG.js +108 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.js +24 -3
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-base-url-resolver.d.ts +13 -8
- package/dist/server/config/opencode-base-url-resolver.js +117 -147
- package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
- package/dist/server/config/opencode-system-probe-helper-client.d.ts +18 -0
- package/dist/server/config/opencode-system-probe-helper-client.js +127 -0
- package/dist/server/config/opencode-system-probe-helper-client.js.map +1 -0
- package/dist/server/config/opencode-system-probe-helper-process.d.ts +1 -0
- package/dist/server/config/opencode-system-probe-helper-process.js +208 -0
- package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -0
- package/dist/server/modules/git/git-command-helper-client.d.ts +25 -0
- package/dist/server/modules/git/git-command-helper-client.js +143 -0
- package/dist/server/modules/git/git-command-helper-client.js.map +1 -0
- package/dist/server/modules/git/git-command-helper-process.d.ts +1 -0
- package/dist/server/modules/git/git-command-helper-process.js +237 -0
- package/dist/server/modules/git/git-command-helper-process.js.map +1 -0
- package/dist/server/modules/git/git-command-runner.d.ts +8 -0
- package/dist/server/modules/git/git-command-runner.js +77 -6
- package/dist/server/modules/git/git-command-runner.js.map +1 -1
- package/dist/server/modules/git/git-controller.d.ts +4 -0
- package/dist/server/modules/git/git-controller.js +4 -1
- package/dist/server/modules/git/git-controller.js.map +1 -1
- package/dist/server/modules/git/git-read-service.d.ts +2 -1
- package/dist/server/modules/git/git-read-service.js +30 -0
- package/dist/server/modules/git/git-read-service.js.map +1 -1
- package/dist/server/modules/git/git-write-service.d.ts +1 -1
- package/dist/server/modules/git/git-write-service.js +8 -7
- package/dist/server/modules/git/git-write-service.js.map +1 -1
- package/dist/server/modules/git/types.d.ts +5 -0
- package/dist/server/modules/preferences/common.d.ts +2 -0
- package/dist/server/modules/preferences/common.js +13 -0
- package/dist/server/modules/preferences/common.js.map +1 -0
- package/dist/server/modules/preferences/profile-controller.d.ts +11 -0
- package/dist/server/modules/preferences/profile-controller.js +14 -0
- package/dist/server/modules/preferences/profile-controller.js.map +1 -0
- package/dist/server/modules/preferences/profile-service.d.ts +17 -0
- package/dist/server/modules/preferences/profile-service.js +213 -0
- package/dist/server/modules/preferences/profile-service.js.map +1 -0
- package/dist/server/modules/preferences/quick-phrase-controller.js +2 -12
- package/dist/server/modules/preferences/quick-phrase-controller.js.map +1 -1
- package/dist/server/modules/provider/codex-model-options.js +26 -165
- package/dist/server/modules/provider/codex-model-options.js.map +1 -1
- package/dist/server/modules/provider/opencode-model-options.js +6 -71
- package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +2 -0
- package/dist/server/modules/provider/provider-controller.js +21 -1
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +25 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js +114 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-process.d.ts +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-process.js +296 -0
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +28 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js +221 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-process.d.ts +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-process.js +146 -0
- package/dist/server/modules/sessions/claude-runtime-helper-process.js.map +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +17 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +260 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.d.ts +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +484 -0
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -0
- package/dist/server/modules/sessions/session-activity-authority-service.d.ts +52 -0
- package/dist/server/modules/sessions/session-activity-authority-service.js +377 -0
- package/dist/server/modules/sessions/session-activity-authority-service.js.map +1 -0
- package/dist/server/modules/sessions/session-activity-inspector.js +80 -40
- package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +15 -1
- package/dist/server/modules/sessions/session-controller.js +14 -1
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +4 -2
- package/dist/server/modules/sessions/session-history-service.js +167 -44
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +42 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +343 -51
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +175 -0
- package/dist/server/modules/sessions/session-permission-request-service.js +1615 -0
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js +14 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/terminal/command-template-service.d.ts +6 -2
- package/dist/server/modules/terminal/command-template-service.js +91 -5
- package/dist/server/modules/terminal/command-template-service.js.map +1 -1
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.d.ts +24 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.js +104 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.js.map +1 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.js +96 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.js.map +1 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.d.ts +37 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.js +123 -0
- package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.js.map +1 -0
- package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.d.ts +12 -5
- package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.js +44 -4
- package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.js.map +1 -1
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.d.ts +14 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.js +105 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.js.map +1 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.js +67 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.js.map +1 -0
- package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.d.ts +8 -12
- package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.js +112 -21
- package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.js.map +1 -1
- package/dist/server/modules/terminal/runtime/conpty-runtime-shared.d.ts +25 -0
- package/dist/server/modules/terminal/runtime/conpty-runtime-shared.js +124 -0
- package/dist/server/modules/terminal/runtime/conpty-runtime-shared.js.map +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-agent-process.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js +205 -0
- package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js.map +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-attach-client.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-attach-client.js +108 -0
- package/dist/server/modules/terminal/runtime/conpty-session-attach-client.js.map +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-control-client.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/conpty-session-control-client.js +90 -0
- package/dist/server/modules/terminal/runtime/conpty-session-control-client.js.map +1 -0
- package/dist/server/modules/terminal/runtime/pty-broker-agent-process.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js +179 -0
- package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js.map +1 -0
- package/dist/server/modules/terminal/runtime/pty-broker-client.d.ts +29 -0
- package/dist/server/modules/terminal/runtime/pty-broker-client.js +169 -0
- package/dist/server/modules/terminal/runtime/pty-broker-client.js.map +1 -0
- package/dist/server/modules/terminal/runtime/pty-broker-shared.d.ts +22 -0
- package/dist/server/modules/terminal/runtime/pty-broker-shared.js +123 -0
- package/dist/server/modules/terminal/runtime/pty-broker-shared.js.map +1 -0
- package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js +11 -1
- package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js.map +1 -1
- package/dist/server/modules/terminal/runtime/terminal-log-file-store.d.ts +1 -0
- package/dist/server/modules/terminal/runtime/terminal-log-file-store.js +7 -1
- package/dist/server/modules/terminal/runtime/terminal-log-file-store.js.map +1 -1
- package/dist/server/modules/terminal/runtime/terminal-log-spooler.js +3 -2
- package/dist/server/modules/terminal/runtime/terminal-log-spooler.js.map +1 -1
- package/dist/server/modules/terminal/runtime/terminal-runtime-adapter.d.ts +5 -3
- package/dist/server/modules/terminal/runtime/terminal-runtime-manager.d.ts +11 -5
- package/dist/server/modules/terminal/runtime/terminal-runtime-manager.js +110 -13
- package/dist/server/modules/terminal/runtime/terminal-runtime-manager.js.map +1 -1
- package/dist/server/modules/terminal/template-reverse-proxy-service.d.ts +10 -0
- package/dist/server/modules/terminal/template-reverse-proxy-service.js +320 -0
- package/dist/server/modules/terminal/template-reverse-proxy-service.js.map +1 -0
- package/dist/server/modules/terminal/terminal-controller.d.ts +1 -0
- package/dist/server/modules/terminal/terminal-controller.js +23 -7
- package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
- package/dist/server/modules/terminal/terminal-service.d.ts +30 -14
- package/dist/server/modules/terminal/terminal-service.js +260 -51
- package/dist/server/modules/terminal/terminal-service.js.map +1 -1
- package/dist/server/modules/terminal/terminal-shell.d.ts +4 -0
- package/dist/server/modules/terminal/terminal-shell.js +165 -18
- package/dist/server/modules/terminal/terminal-shell.js.map +1 -1
- package/dist/server/modules/workbench/workspace-file-watcher.d.ts +30 -0
- package/dist/server/modules/workbench/workspace-file-watcher.js +137 -0
- package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -0
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +48 -7
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/routes/git.js +1 -0
- package/dist/server/routes/git.js.map +1 -1
- package/dist/server/routes/preferences.d.ts +2 -1
- package/dist/server/routes/preferences.js +3 -1
- package/dist/server/routes/preferences.js.map +1 -1
- package/dist/server/routes/proxy.d.ts +3 -0
- package/dist/server/routes/proxy.js +24 -0
- package/dist/server/routes/proxy.js.map +1 -0
- package/dist/server/routes/sessions.js +2 -0
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/server/create-server.d.ts +4 -0
- package/dist/server/server/create-server.js +29 -5
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/utils/command-launch.d.ts +6 -0
- package/dist/server/shared/utils/command-launch.js +39 -0
- package/dist/server/shared/utils/command-launch.js.map +1 -0
- package/dist/server/shared/utils/perf-log.d.ts +1 -0
- package/dist/server/shared/utils/perf-log.js +8 -2
- package/dist/server/shared/utils/perf-log.js.map +1 -1
- package/dist/server/shared/utils/permission-debug-log.d.ts +2 -0
- package/dist/server/shared/utils/permission-debug-log.js +40 -0
- package/dist/server/shared/utils/permission-debug-log.js.map +1 -0
- package/dist/server/shared/utils/terminal-debug-log.d.ts +4 -0
- package/dist/server/shared/utils/terminal-debug-log.js +71 -0
- package/dist/server/shared/utils/terminal-debug-log.js.map +1 -0
- package/dist/server/storage/repositories/terminal-command-template-repository.d.ts +1 -0
- package/dist/server/storage/repositories/terminal-command-template-repository.js +34 -3
- package/dist/server/storage/repositories/terminal-command-template-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-preference-profile-repository.d.ts +8 -0
- package/dist/server/storage/repositories/user-preference-profile-repository.js +46 -0
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +27 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +15 -0
- package/dist/server/types/domain.d.ts +30 -1
- package/dist/server/ws/terminal-ws-hub.d.ts +2 -0
- package/dist/server/ws/terminal-ws-hub.js +42 -5
- package/dist/server/ws/terminal-ws-hub.js.map +1 -1
- package/dist/server/ws/workbench-ws-hub.d.ts +9 -1
- package/dist/server/ws/workbench-ws-hub.js +132 -21
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-server.d.ts +22 -1
- package/dist/server/ws/ws-server.js +82 -44
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +42 -0
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +30 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +103 -0
- package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +167 -7
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js +8 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +31 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +8 -4
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +15 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +85 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +25 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +718 -17
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +106 -23
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +19 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/services.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/services.js +2 -2
- package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
- package/package.json +3 -2
- package/scripts/postinstall.mjs +15 -8
- package/dist/public/assets/index-BUPByQPG.css +0 -1
- package/dist/public/assets/index-D1CwTkI2.js +0 -106
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isTerminalDebugEnabled(): boolean;
|
|
2
|
+
export declare function terminalDebugNowMs(): number;
|
|
3
|
+
export declare function logTerminalDebug(scope: string, detail?: Record<string, unknown>): void;
|
|
4
|
+
export declare function startTerminalDebugEventLoopLagMonitor(): () => void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
// 调试日志已停用,保留工具函数便于后续需要时快速恢复。
|
|
3
|
+
// const TERMINAL_DEBUG_ENABLED = process.env.CODINGNS_TERMINAL_DEBUG === "1";
|
|
4
|
+
const TERMINAL_DEBUG_ENABLED = false;
|
|
5
|
+
const EVENT_LOOP_LAG_MONITOR_INTERVAL_MS = 100;
|
|
6
|
+
const EVENT_LOOP_LAG_REPORT_THRESHOLD_MS = 50;
|
|
7
|
+
export function isTerminalDebugEnabled() {
|
|
8
|
+
return TERMINAL_DEBUG_ENABLED;
|
|
9
|
+
}
|
|
10
|
+
export function terminalDebugNowMs() {
|
|
11
|
+
return performance.now();
|
|
12
|
+
}
|
|
13
|
+
export function logTerminalDebug(scope, detail = {}) {
|
|
14
|
+
if (!TERMINAL_DEBUG_ENABLED) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const suffix = formatTerminalDebugDetail(detail);
|
|
18
|
+
const message = `[terminal-debug][host] ${scope}${suffix ? ` ${suffix}` : ""}`;
|
|
19
|
+
console.info(message);
|
|
20
|
+
}
|
|
21
|
+
export function startTerminalDebugEventLoopLagMonitor() {
|
|
22
|
+
if (!TERMINAL_DEBUG_ENABLED) {
|
|
23
|
+
return () => { };
|
|
24
|
+
}
|
|
25
|
+
let expectedAt = performance.now() + EVENT_LOOP_LAG_MONITOR_INTERVAL_MS;
|
|
26
|
+
const timer = setInterval(() => {
|
|
27
|
+
const now = performance.now();
|
|
28
|
+
const lagMs = now - expectedAt;
|
|
29
|
+
if (lagMs >= EVENT_LOOP_LAG_REPORT_THRESHOLD_MS) {
|
|
30
|
+
logTerminalDebug("event_loop.lag", {
|
|
31
|
+
lagMs,
|
|
32
|
+
intervalMs: EVENT_LOOP_LAG_MONITOR_INTERVAL_MS
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
expectedAt = now + EVENT_LOOP_LAG_MONITOR_INTERVAL_MS;
|
|
36
|
+
}, EVENT_LOOP_LAG_MONITOR_INTERVAL_MS);
|
|
37
|
+
timer.unref?.();
|
|
38
|
+
return () => {
|
|
39
|
+
clearInterval(timer);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function formatTerminalDebugDetail(detail) {
|
|
43
|
+
const entries = Object.entries(detail).filter(([, value]) => value !== undefined);
|
|
44
|
+
if (entries.length === 0) {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
return entries
|
|
48
|
+
.map(([key, value]) => `${key}=${formatTerminalDebugValue(value)}`)
|
|
49
|
+
.join(" ");
|
|
50
|
+
}
|
|
51
|
+
function formatTerminalDebugValue(value) {
|
|
52
|
+
if (value === null) {
|
|
53
|
+
return "null";
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === "string") {
|
|
56
|
+
return JSON.stringify(value);
|
|
57
|
+
}
|
|
58
|
+
if (typeof value === "number") {
|
|
59
|
+
return Number.isFinite(value) ? value.toFixed(1) : String(value);
|
|
60
|
+
}
|
|
61
|
+
if (typeof value === "boolean") {
|
|
62
|
+
return value ? "true" : "false";
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return JSON.stringify(value);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return String(value);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=terminal-debug-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-debug-log.js","sourceRoot":"","sources":["../../../../src/shared/utils/terminal-debug-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare class TerminalCommandTemplateRepository {
|
|
|
6
6
|
create(record: TerminalCommandTemplate): TerminalCommandTemplate;
|
|
7
7
|
findById(id: string): TerminalCommandTemplate | null;
|
|
8
8
|
listByWorkspace(workspaceId: string): TerminalCommandTemplate[];
|
|
9
|
+
findByProxySlug(proxySlug: string): TerminalCommandTemplate | null;
|
|
9
10
|
update(record: TerminalCommandTemplate): TerminalCommandTemplate;
|
|
10
11
|
delete(id: string): boolean;
|
|
11
12
|
}
|
|
@@ -14,11 +14,13 @@ export class TerminalCommandTemplateRepository {
|
|
|
14
14
|
args_json,
|
|
15
15
|
env_json,
|
|
16
16
|
port,
|
|
17
|
+
proxy_enabled,
|
|
18
|
+
proxy_slug,
|
|
17
19
|
runtime_type,
|
|
18
20
|
created_at,
|
|
19
21
|
updated_at
|
|
20
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
21
|
-
.run(record.id, record.workspaceId, record.name, record.cwd, record.command, JSON.stringify(record.args), JSON.stringify(record.env), record.port, record.runtimeType, record.createdAt, record.updatedAt);
|
|
22
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
23
|
+
.run(record.id, record.workspaceId, record.name, record.cwd, record.command, JSON.stringify(record.args), JSON.stringify(record.env), record.port, record.proxyEnabled ? 1 : 0, record.proxySlug, record.runtimeType, record.createdAt, record.updatedAt);
|
|
22
24
|
return record;
|
|
23
25
|
}
|
|
24
26
|
findById(id) {
|
|
@@ -32,6 +34,8 @@ export class TerminalCommandTemplateRepository {
|
|
|
32
34
|
args_json,
|
|
33
35
|
env_json,
|
|
34
36
|
port,
|
|
37
|
+
proxy_enabled,
|
|
38
|
+
proxy_slug,
|
|
35
39
|
runtime_type,
|
|
36
40
|
created_at,
|
|
37
41
|
updated_at
|
|
@@ -51,6 +55,8 @@ export class TerminalCommandTemplateRepository {
|
|
|
51
55
|
args_json,
|
|
52
56
|
env_json,
|
|
53
57
|
port,
|
|
58
|
+
proxy_enabled,
|
|
59
|
+
proxy_slug,
|
|
54
60
|
runtime_type,
|
|
55
61
|
created_at,
|
|
56
62
|
updated_at
|
|
@@ -60,6 +66,27 @@ export class TerminalCommandTemplateRepository {
|
|
|
60
66
|
.all(workspaceId)
|
|
61
67
|
.map((row) => mapTemplateRow(row));
|
|
62
68
|
}
|
|
69
|
+
findByProxySlug(proxySlug) {
|
|
70
|
+
const row = this.db
|
|
71
|
+
.prepare(`SELECT
|
|
72
|
+
id,
|
|
73
|
+
workspace_id,
|
|
74
|
+
name,
|
|
75
|
+
cwd,
|
|
76
|
+
command,
|
|
77
|
+
args_json,
|
|
78
|
+
env_json,
|
|
79
|
+
port,
|
|
80
|
+
proxy_enabled,
|
|
81
|
+
proxy_slug,
|
|
82
|
+
runtime_type,
|
|
83
|
+
created_at,
|
|
84
|
+
updated_at
|
|
85
|
+
FROM terminal_command_templates
|
|
86
|
+
WHERE proxy_slug = ?`)
|
|
87
|
+
.get(proxySlug);
|
|
88
|
+
return row ? mapTemplateRow(row) : null;
|
|
89
|
+
}
|
|
63
90
|
update(record) {
|
|
64
91
|
this.db
|
|
65
92
|
.prepare(`UPDATE terminal_command_templates
|
|
@@ -69,10 +96,12 @@ export class TerminalCommandTemplateRepository {
|
|
|
69
96
|
args_json = ?,
|
|
70
97
|
env_json = ?,
|
|
71
98
|
port = ?,
|
|
99
|
+
proxy_enabled = ?,
|
|
100
|
+
proxy_slug = ?,
|
|
72
101
|
runtime_type = ?,
|
|
73
102
|
updated_at = ?
|
|
74
103
|
WHERE id = ?`)
|
|
75
|
-
.run(record.name, record.cwd, record.command, JSON.stringify(record.args), JSON.stringify(record.env), record.port, record.runtimeType, record.updatedAt, record.id);
|
|
104
|
+
.run(record.name, record.cwd, record.command, JSON.stringify(record.args), JSON.stringify(record.env), record.port, record.proxyEnabled ? 1 : 0, record.proxySlug, record.runtimeType, record.updatedAt, record.id);
|
|
76
105
|
return record;
|
|
77
106
|
}
|
|
78
107
|
delete(id) {
|
|
@@ -91,6 +120,8 @@ function mapTemplateRow(row) {
|
|
|
91
120
|
args: JSON.parse(row.args_json),
|
|
92
121
|
env: JSON.parse(row.env_json),
|
|
93
122
|
port: row.port,
|
|
123
|
+
proxyEnabled: row.proxy_enabled === 1,
|
|
124
|
+
proxySlug: row.proxy_slug,
|
|
94
125
|
runtimeType: row.runtime_type ?? null,
|
|
95
126
|
createdAt: row.created_at,
|
|
96
127
|
updatedAt: row.updated_at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-command-template-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/terminal-command-template-repository.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,iCAAiC;IACf;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,MAAM,CAAC,MAA+B;QACpC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN
|
|
1
|
+
{"version":3,"file":"terminal-command-template-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/terminal-command-template-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { UserPreferenceProfileRecord } from "../../types/domain.js";
|
|
3
|
+
export declare class UserPreferenceProfileRepository {
|
|
4
|
+
private readonly db;
|
|
5
|
+
constructor(db: Database.Database);
|
|
6
|
+
findByUserId(userId: string): UserPreferenceProfileRecord | null;
|
|
7
|
+
upsert(record: UserPreferenceProfileRecord): UserPreferenceProfileRecord;
|
|
8
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class UserPreferenceProfileRepository {
|
|
2
|
+
db;
|
|
3
|
+
constructor(db) {
|
|
4
|
+
this.db = db;
|
|
5
|
+
}
|
|
6
|
+
findByUserId(userId) {
|
|
7
|
+
const row = this.db
|
|
8
|
+
.prepare(`SELECT language, theme, default_permission_mode, providers_json, created_at, updated_at
|
|
9
|
+
FROM user_preference_profiles
|
|
10
|
+
WHERE user_id = ?`)
|
|
11
|
+
.get(userId);
|
|
12
|
+
if (!row) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
userId,
|
|
17
|
+
language: row.language,
|
|
18
|
+
theme: row.theme,
|
|
19
|
+
defaultPermissionMode: row.default_permission_mode,
|
|
20
|
+
providers: JSON.parse(row.providers_json),
|
|
21
|
+
createdAt: row.created_at,
|
|
22
|
+
updatedAt: row.updated_at
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
upsert(record) {
|
|
26
|
+
this.db
|
|
27
|
+
.prepare(`INSERT INTO user_preference_profiles (
|
|
28
|
+
user_id,
|
|
29
|
+
language,
|
|
30
|
+
theme,
|
|
31
|
+
default_permission_mode,
|
|
32
|
+
providers_json,
|
|
33
|
+
created_at,
|
|
34
|
+
updated_at
|
|
35
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
36
|
+
ON CONFLICT(user_id) DO UPDATE SET
|
|
37
|
+
language = excluded.language,
|
|
38
|
+
theme = excluded.theme,
|
|
39
|
+
default_permission_mode = excluded.default_permission_mode,
|
|
40
|
+
providers_json = excluded.providers_json,
|
|
41
|
+
updated_at = excluded.updated_at`)
|
|
42
|
+
.run(record.userId, record.language, record.theme, record.defaultPermissionMode, JSON.stringify(record.providers), record.createdAt, record.updatedAt);
|
|
43
|
+
return record;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=user-preference-profile-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-preference-profile-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/user-preference-profile-repository.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,+BAA+B;IACb;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,YAAY,CAAC,MAAc;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;2BAEmB,CACpB;aACA,GAAG,CAAC,MAAM,CAAyC,CAAC;QAEvD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,GAAG,CAAC,QAAmD;YACjE,KAAK,EAAE,GAAG,CAAC,KAA6C;YACxD,qBAAqB,EAAE,GAAG,CAAC,uBAA+E;YAC1G,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAA6C;YACrF,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAmC;QACxC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;;;2CAcmC,CACpC;aACA,GAAG,CACF,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,qBAAqB,EAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAChC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,CACjB,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -20,6 +20,7 @@ export function createDatabaseClient(databasePath) {
|
|
|
20
20
|
ensureTerminalLogSchema(db);
|
|
21
21
|
ensureTerminalCommandTemplatePortColumn(db);
|
|
22
22
|
ensureTerminalCommandTemplateRuntimeTypeColumn(db);
|
|
23
|
+
ensureTerminalCommandTemplateProxySchema(db);
|
|
23
24
|
return {
|
|
24
25
|
db,
|
|
25
26
|
close: () => db.close()
|
|
@@ -276,6 +277,32 @@ function ensureTerminalCommandTemplateRuntimeTypeColumn(db) {
|
|
|
276
277
|
}
|
|
277
278
|
db.exec("ALTER TABLE terminal_command_templates ADD COLUMN runtime_type TEXT");
|
|
278
279
|
}
|
|
280
|
+
function ensureTerminalCommandTemplateProxySchema(db) {
|
|
281
|
+
const columns = db
|
|
282
|
+
.prepare("PRAGMA table_info(terminal_command_templates)")
|
|
283
|
+
.all();
|
|
284
|
+
const columnNames = new Set(columns.map((column) => column.name));
|
|
285
|
+
if (!columnNames.has("proxy_enabled")) {
|
|
286
|
+
db.exec("ALTER TABLE terminal_command_templates ADD COLUMN proxy_enabled INTEGER NOT NULL DEFAULT 0 CHECK (proxy_enabled IN (0, 1))");
|
|
287
|
+
}
|
|
288
|
+
if (!columnNames.has("proxy_slug")) {
|
|
289
|
+
db.exec("ALTER TABLE terminal_command_templates ADD COLUMN proxy_slug TEXT");
|
|
290
|
+
}
|
|
291
|
+
// 索引放在迁移阶段创建,避免旧库缺少 proxy_slug 列时在 schema 初始化阶段直接失败。
|
|
292
|
+
db.exec(`
|
|
293
|
+
UPDATE terminal_command_templates
|
|
294
|
+
SET proxy_enabled = 0
|
|
295
|
+
WHERE proxy_enabled IS NULL OR proxy_enabled NOT IN (0, 1);
|
|
296
|
+
|
|
297
|
+
UPDATE terminal_command_templates
|
|
298
|
+
SET proxy_slug = NULL
|
|
299
|
+
WHERE proxy_enabled = 0;
|
|
300
|
+
|
|
301
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_terminal_templates_proxy_slug
|
|
302
|
+
ON terminal_command_templates(proxy_slug)
|
|
303
|
+
WHERE proxy_slug IS NOT NULL;
|
|
304
|
+
`);
|
|
305
|
+
}
|
|
279
306
|
function ensureTerminalInstanceProcessIdColumn(db) {
|
|
280
307
|
const columns = db
|
|
281
308
|
.prepare("PRAGMA table_info(terminal_instances)")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAOtC,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEnD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACjC,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAChC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7B,+BAA+B,CAAC,EAAE,CAAC,CAAC;IACpC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACjC,8BAA8B,CAAC,EAAE,CAAC,CAAC;IACnC,qCAAqC,CAAC,EAAE,CAAC,CAAC;IAC1C,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5B,uCAAuC,CAAC,EAAE,CAAC,CAAC;IAC5C,8CAA8C,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -210,6 +210,19 @@ CREATE TABLE IF NOT EXISTS user_quick_phrase_preferences (
|
|
|
210
210
|
FOREIGN KEY (user_id) REFERENCES auth_users(id)
|
|
211
211
|
);
|
|
212
212
|
|
|
213
|
+
CREATE TABLE IF NOT EXISTS user_preference_profiles (
|
|
214
|
+
user_id TEXT PRIMARY KEY,
|
|
215
|
+
language TEXT NOT NULL CHECK (language IN ('zh-CN', 'en-US')),
|
|
216
|
+
theme TEXT NOT NULL CHECK (theme IN ('light', 'dark', 'sky-blue', 'eye-green')),
|
|
217
|
+
default_permission_mode TEXT NOT NULL CHECK (
|
|
218
|
+
default_permission_mode IN ('default', 'acceptEdits', 'bypassPermissions')
|
|
219
|
+
),
|
|
220
|
+
providers_json TEXT NOT NULL,
|
|
221
|
+
created_at TEXT NOT NULL,
|
|
222
|
+
updated_at TEXT NOT NULL,
|
|
223
|
+
FOREIGN KEY (user_id) REFERENCES auth_users(id)
|
|
224
|
+
);
|
|
225
|
+
|
|
213
226
|
CREATE TABLE IF NOT EXISTS session_file_context_bindings (
|
|
214
227
|
id TEXT PRIMARY KEY,
|
|
215
228
|
session_id TEXT NOT NULL,
|
|
@@ -334,6 +347,8 @@ CREATE TABLE IF NOT EXISTS terminal_command_templates (
|
|
|
334
347
|
args_json TEXT NOT NULL,
|
|
335
348
|
env_json TEXT NOT NULL,
|
|
336
349
|
port INTEGER,
|
|
350
|
+
proxy_enabled INTEGER NOT NULL DEFAULT 0 CHECK (proxy_enabled IN (0, 1)),
|
|
351
|
+
proxy_slug TEXT,
|
|
337
352
|
runtime_type TEXT CHECK (
|
|
338
353
|
runtime_type IS NULL OR runtime_type IN (
|
|
339
354
|
'embedded-pty',
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ProviderId, SyncStatus } from "@codingns/session-sync-core";
|
|
2
2
|
export type SessionRunningState = "idle" | "starting" | "running" | "completed" | "interrupted" | "failed";
|
|
3
|
+
export type SessionResolvedRunningState = SessionRunningState | "stale" | "unknown";
|
|
3
4
|
export type SessionActivityState = "idle" | "running" | "completed_unread";
|
|
4
5
|
export type SessionActivitySource = "none" | "runtime" | "inferred";
|
|
6
|
+
export type SessionActivityResolutionSource = "authoritative_runtime" | "authoritative_provider_event" | "inferred_log" | "unknown";
|
|
7
|
+
export type SessionActivityConfidence = "authoritative" | "strong" | "weak";
|
|
5
8
|
export interface BootstrapState {
|
|
6
9
|
id: "default";
|
|
7
10
|
initialized: boolean;
|
|
@@ -143,11 +146,15 @@ export interface SessionListItem {
|
|
|
143
146
|
lastErrorCode: string | null;
|
|
144
147
|
lastErrorDetail: string | null;
|
|
145
148
|
resumedAt: string | null;
|
|
146
|
-
runningState:
|
|
149
|
+
runningState: SessionResolvedRunningState | null;
|
|
147
150
|
activitySource: SessionActivitySource;
|
|
151
|
+
activityResolutionSource?: SessionActivityResolutionSource;
|
|
152
|
+
activityConfidence?: SessionActivityConfidence;
|
|
153
|
+
runId?: string | null;
|
|
148
154
|
lastEventAt: string | null;
|
|
149
155
|
completedAt: string | null;
|
|
150
156
|
lastSeenAt: string | null;
|
|
157
|
+
watchdogTriggeredAt?: string | null;
|
|
151
158
|
activityState: SessionActivityState;
|
|
152
159
|
}
|
|
153
160
|
export interface FileNode {
|
|
@@ -191,6 +198,26 @@ export interface UserQuickPhrasePreferenceRecord {
|
|
|
191
198
|
createdAt: string;
|
|
192
199
|
updatedAt: string;
|
|
193
200
|
}
|
|
201
|
+
export type PreferenceProviderId = "claude-code" | "codex" | "opencode";
|
|
202
|
+
export type UserPreferenceLanguage = "zh-CN" | "en-US";
|
|
203
|
+
export type UserPreferenceTheme = "light" | "dark" | "sky-blue" | "eye-green";
|
|
204
|
+
export type UserPreferencePermissionMode = "default" | "acceptEdits" | "bypassPermissions";
|
|
205
|
+
export interface UserPreferenceProviderProfile {
|
|
206
|
+
defaultModel: string | null;
|
|
207
|
+
defaultReasoningLevel: string | null;
|
|
208
|
+
}
|
|
209
|
+
export type UserPreferenceProviders = Record<PreferenceProviderId, UserPreferenceProviderProfile>;
|
|
210
|
+
export interface UserPreferenceProfile {
|
|
211
|
+
language: UserPreferenceLanguage;
|
|
212
|
+
theme: UserPreferenceTheme;
|
|
213
|
+
defaultPermissionMode: UserPreferencePermissionMode;
|
|
214
|
+
providers: UserPreferenceProviders;
|
|
215
|
+
}
|
|
216
|
+
export interface UserPreferenceProfileRecord extends UserPreferenceProfile {
|
|
217
|
+
userId: string;
|
|
218
|
+
createdAt: string;
|
|
219
|
+
updatedAt: string;
|
|
220
|
+
}
|
|
194
221
|
export interface FileContextBinding {
|
|
195
222
|
id: string;
|
|
196
223
|
sessionId: string;
|
|
@@ -292,6 +319,8 @@ export interface TerminalCommandTemplate {
|
|
|
292
319
|
args: string[];
|
|
293
320
|
env: Record<string, string>;
|
|
294
321
|
port: number | null;
|
|
322
|
+
proxyEnabled: boolean;
|
|
323
|
+
proxySlug: string | null;
|
|
295
324
|
runtimeType: TerminalRuntimeType | null;
|
|
296
325
|
createdAt: string;
|
|
297
326
|
updatedAt: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AppError } from "../shared/errors/app-error.js";
|
|
2
|
+
import { logTerminalDebug, terminalDebugNowMs } from "../shared/utils/terminal-debug-log.js";
|
|
2
3
|
export class TerminalWsHub {
|
|
3
4
|
terminalService;
|
|
4
5
|
clientSubscriptions = new WeakMap();
|
|
@@ -35,8 +36,17 @@ export class TerminalWsHub {
|
|
|
35
36
|
subscriptions.get(payload.terminalId)?.close();
|
|
36
37
|
subscriptions.delete(payload.terminalId);
|
|
37
38
|
try {
|
|
38
|
-
const subscription = this.terminalService.subscribeTerminal(payload.terminalId, payload.lastCursor ?? null, {
|
|
39
|
+
const subscription = await this.terminalService.subscribeTerminal(payload.terminalId, payload.lastCursor ?? null, {
|
|
39
40
|
onBackfill: async (backfill) => {
|
|
41
|
+
if (backfill.cursorReset) {
|
|
42
|
+
client.send(JSON.stringify({
|
|
43
|
+
type: "terminal.error",
|
|
44
|
+
terminalId: payload.terminalId,
|
|
45
|
+
error_code: "RECONNECT_CURSOR_INVALID",
|
|
46
|
+
detail: "重连游标已失效,已自动重置为最新输出",
|
|
47
|
+
timestamp: new Date().toISOString()
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
40
50
|
client.send(JSON.stringify({
|
|
41
51
|
type: "terminal.backfill",
|
|
42
52
|
terminalId: payload.terminalId,
|
|
@@ -47,6 +57,11 @@ export class TerminalWsHub {
|
|
|
47
57
|
}));
|
|
48
58
|
},
|
|
49
59
|
onOutput: async (chunk) => {
|
|
60
|
+
logTerminalDebug("terminal.output.ws_sent", {
|
|
61
|
+
terminalId: payload.terminalId,
|
|
62
|
+
cursor: chunk.cursor,
|
|
63
|
+
charCount: chunk.content.length
|
|
64
|
+
});
|
|
50
65
|
client.send(JSON.stringify({
|
|
51
66
|
type: "terminal.output",
|
|
52
67
|
terminalId: payload.terminalId,
|
|
@@ -95,10 +110,30 @@ export class TerminalWsHub {
|
|
|
95
110
|
}
|
|
96
111
|
async handleTerminalInput(client, payload) {
|
|
97
112
|
try {
|
|
98
|
-
|
|
113
|
+
const wsReceivedAtMs = terminalDebugNowMs();
|
|
114
|
+
logTerminalDebug("terminal.input.ws_received", {
|
|
115
|
+
terminalId: payload.terminalId,
|
|
116
|
+
traceId: payload.clientTraceId ?? null,
|
|
117
|
+
charCount: payload.content.length,
|
|
118
|
+
clientToWsMs: typeof payload.clientSentAtMs === "number"
|
|
119
|
+
? wsReceivedAtMs - payload.clientSentAtMs
|
|
120
|
+
: null
|
|
121
|
+
});
|
|
122
|
+
await this.terminalService.writeInput(payload.terminalId, payload.content, {
|
|
123
|
+
clientTraceId: payload.clientTraceId,
|
|
124
|
+
clientSentAtMs: typeof payload.clientSentAtMs === "number" ? payload.clientSentAtMs : null,
|
|
125
|
+
wsReceivedAtMs
|
|
126
|
+
});
|
|
127
|
+
logTerminalDebug("terminal.input.ack_sent", {
|
|
128
|
+
terminalId: payload.terminalId,
|
|
129
|
+
traceId: payload.clientTraceId ?? null,
|
|
130
|
+
charCount: payload.content.length,
|
|
131
|
+
wsToAckMs: terminalDebugNowMs() - wsReceivedAtMs
|
|
132
|
+
});
|
|
99
133
|
client.send(JSON.stringify({
|
|
100
134
|
type: "terminal.input.accepted",
|
|
101
|
-
terminalId: payload.terminalId
|
|
135
|
+
terminalId: payload.terminalId,
|
|
136
|
+
...(payload.clientTraceId ? { clientTraceId: payload.clientTraceId } : {})
|
|
102
137
|
}));
|
|
103
138
|
}
|
|
104
139
|
catch (error) {
|
|
@@ -120,7 +155,7 @@ export class TerminalWsHub {
|
|
|
120
155
|
}
|
|
121
156
|
async handleTerminalResize(client, payload) {
|
|
122
157
|
try {
|
|
123
|
-
this.terminalService.resizeTerminal(payload.terminalId, payload.cols, payload.rows);
|
|
158
|
+
await this.terminalService.resizeTerminal(payload.terminalId, payload.cols, payload.rows);
|
|
124
159
|
client.send(JSON.stringify({
|
|
125
160
|
type: "terminal.resize.accepted",
|
|
126
161
|
terminalId: payload.terminalId,
|
|
@@ -167,7 +202,9 @@ function isTerminalInputMessage(payload) {
|
|
|
167
202
|
payload !== null &&
|
|
168
203
|
candidate?.type === "terminal.input" &&
|
|
169
204
|
typeof candidate?.terminalId === "string" &&
|
|
170
|
-
typeof candidate?.content === "string"
|
|
205
|
+
typeof candidate?.content === "string" &&
|
|
206
|
+
(candidate?.clientTraceId === undefined || typeof candidate?.clientTraceId === "string") &&
|
|
207
|
+
(candidate?.clientSentAtMs === undefined || typeof candidate?.clientSentAtMs === "number"));
|
|
171
208
|
}
|
|
172
209
|
function isTerminalResizeMessage(payload) {
|
|
173
210
|
const candidate = payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-ws-hub.js","sourceRoot":"","sources":["../../../src/ws/terminal-ws-hub.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-ws-hub.js","sourceRoot":"","sources":["../../../src/ws/terminal-ws-hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,20 +2,28 @@ import type { WebSocket } from "ws";
|
|
|
2
2
|
import type { AuthContext } from "../modules/auth/auth-service.js";
|
|
3
3
|
import type { WorkbenchService } from "../modules/workbench/workbench-service.js";
|
|
4
4
|
import type { WorkspacePanelSnapshotService } from "../modules/workbench/workspace-panel-snapshot-service.js";
|
|
5
|
+
import type { WorkspaceFileWatcher } from "../modules/workbench/workspace-file-watcher.js";
|
|
5
6
|
export declare class WorkbenchWsHub {
|
|
6
7
|
private readonly workbenchService;
|
|
7
8
|
private readonly workspacePanelSnapshotService;
|
|
9
|
+
private readonly fileWatcher;
|
|
8
10
|
private readonly clientUsers;
|
|
9
11
|
private readonly userChannels;
|
|
10
12
|
private readonly clientFileTreeSubscriptions;
|
|
11
13
|
private readonly clientGitSubscriptions;
|
|
12
14
|
private readonly clientTerminalManagerSubscriptions;
|
|
13
15
|
private readonly clientWorkspaceManagementSubscriptions;
|
|
14
|
-
constructor(workbenchService: WorkbenchService, workspacePanelSnapshotService: WorkspacePanelSnapshotService);
|
|
16
|
+
constructor(workbenchService: WorkbenchService, workspacePanelSnapshotService: WorkspacePanelSnapshotService, fileWatcher: WorkspaceFileWatcher);
|
|
15
17
|
handleMessage(client: WebSocket, payload: unknown, authContext: AuthContext): boolean;
|
|
16
18
|
cleanupClient(client: WebSocket): void;
|
|
17
19
|
broadcastSnapshot(userId: string): Promise<void>;
|
|
20
|
+
private scheduleRealtimeBroadcast;
|
|
21
|
+
private flushRealtimeBroadcast;
|
|
18
22
|
private attachClient;
|
|
23
|
+
/**
|
|
24
|
+
* 文件变化回调:chokidar 检测到工作区文件变化后,失效缓存并推送更新给订阅了该工作区的客户端。
|
|
25
|
+
*/
|
|
26
|
+
private handleWorkspaceFileChange;
|
|
19
27
|
private getOrCreateChannel;
|
|
20
28
|
private syncTitlesAndBroadcast;
|
|
21
29
|
private sendWorkbenchSnapshotToClient;
|