@jingyi0605/codingns 0.1.0 → 0.1.2
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-Dr7knYq2.js +55 -0
- package/dist/public/assets/index-BpUi6zoT.js +108 -0
- package/dist/public/assets/index-NMtdQNda.css +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.js +72 -7
- 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 +16 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +237 -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 +8 -3
- package/dist/server/modules/sessions/session-history-service.js +303 -64
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +40 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +334 -44
- 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 +2 -2
- package/dist/server/modules/terminal/command-template-service.js +3 -3
- 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/terminal-controller.js +7 -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 +43 -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/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 +22 -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/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/schema.sql +13 -0
- package/dist/server/types/domain.d.ts +28 -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 +134 -46
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +4 -1
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +107 -6
- 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 +38 -6
- 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 +87 -7
- 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 +5 -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 +114 -6
- 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 +23 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +721 -18
- 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 +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +3 -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 +1 -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 +6 -2
- package/scripts/postinstall.mjs +218 -0
- package/dist/public/assets/TerminalPage-Dj_VDew3.js +0 -54
- package/dist/public/assets/index-C1GZV2wq.js +0 -106
- package/dist/public/assets/index-DU7f8NaZ.css +0 -1
|
@@ -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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,6BAA6B;AAC7B,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AAC/C,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAE9C,MAAM,UAAU,sBAAsB;IACpC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,SAAkC,EAAE;IAClF,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,0BAA0B,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,kCAAkC,CAAC;IACxE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC;QAE/B,IAAI,KAAK,IAAI,kCAAkC,EAAE,CAAC;YAChD,gBAAgB,CAAC,gBAAgB,EAAE;gBACjC,KAAK;gBACL,UAAU,EAAE,kCAAkC;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,UAAU,GAAG,GAAG,GAAG,kCAAkC,CAAC;IACxD,CAAC,EAAE,kCAAkC,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEhB,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA+B;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAElF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;SAClE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|
|
@@ -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,
|
|
@@ -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;
|
|
@@ -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;
|