@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.
Files changed (241) hide show
  1. package/README.md +14 -0
  2. package/dist/public/assets/TerminalPage-Dr7knYq2.js +55 -0
  3. package/dist/public/assets/index-BpUi6zoT.js +108 -0
  4. package/dist/public/assets/index-NMtdQNda.css +1 -0
  5. package/dist/public/index.html +2 -2
  6. package/dist/server/config/env.js +72 -7
  7. package/dist/server/config/env.js.map +1 -1
  8. package/dist/server/config/opencode-base-url-resolver.d.ts +13 -8
  9. package/dist/server/config/opencode-base-url-resolver.js +117 -147
  10. package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
  11. package/dist/server/config/opencode-system-probe-helper-client.d.ts +18 -0
  12. package/dist/server/config/opencode-system-probe-helper-client.js +127 -0
  13. package/dist/server/config/opencode-system-probe-helper-client.js.map +1 -0
  14. package/dist/server/config/opencode-system-probe-helper-process.d.ts +1 -0
  15. package/dist/server/config/opencode-system-probe-helper-process.js +208 -0
  16. package/dist/server/config/opencode-system-probe-helper-process.js.map +1 -0
  17. package/dist/server/modules/git/git-command-helper-client.d.ts +25 -0
  18. package/dist/server/modules/git/git-command-helper-client.js +143 -0
  19. package/dist/server/modules/git/git-command-helper-client.js.map +1 -0
  20. package/dist/server/modules/git/git-command-helper-process.d.ts +1 -0
  21. package/dist/server/modules/git/git-command-helper-process.js +237 -0
  22. package/dist/server/modules/git/git-command-helper-process.js.map +1 -0
  23. package/dist/server/modules/git/git-command-runner.d.ts +8 -0
  24. package/dist/server/modules/git/git-command-runner.js +77 -6
  25. package/dist/server/modules/git/git-command-runner.js.map +1 -1
  26. package/dist/server/modules/git/git-controller.d.ts +4 -0
  27. package/dist/server/modules/git/git-controller.js +4 -1
  28. package/dist/server/modules/git/git-controller.js.map +1 -1
  29. package/dist/server/modules/git/git-read-service.d.ts +2 -1
  30. package/dist/server/modules/git/git-read-service.js +30 -0
  31. package/dist/server/modules/git/git-read-service.js.map +1 -1
  32. package/dist/server/modules/git/git-write-service.d.ts +1 -1
  33. package/dist/server/modules/git/git-write-service.js +8 -7
  34. package/dist/server/modules/git/git-write-service.js.map +1 -1
  35. package/dist/server/modules/git/types.d.ts +5 -0
  36. package/dist/server/modules/preferences/common.d.ts +2 -0
  37. package/dist/server/modules/preferences/common.js +13 -0
  38. package/dist/server/modules/preferences/common.js.map +1 -0
  39. package/dist/server/modules/preferences/profile-controller.d.ts +11 -0
  40. package/dist/server/modules/preferences/profile-controller.js +14 -0
  41. package/dist/server/modules/preferences/profile-controller.js.map +1 -0
  42. package/dist/server/modules/preferences/profile-service.d.ts +17 -0
  43. package/dist/server/modules/preferences/profile-service.js +213 -0
  44. package/dist/server/modules/preferences/profile-service.js.map +1 -0
  45. package/dist/server/modules/preferences/quick-phrase-controller.js +2 -12
  46. package/dist/server/modules/preferences/quick-phrase-controller.js.map +1 -1
  47. package/dist/server/modules/provider/codex-model-options.js +26 -165
  48. package/dist/server/modules/provider/codex-model-options.js.map +1 -1
  49. package/dist/server/modules/provider/opencode-model-options.js +6 -71
  50. package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
  51. package/dist/server/modules/provider/provider-controller.d.ts +2 -0
  52. package/dist/server/modules/provider/provider-controller.js +21 -1
  53. package/dist/server/modules/provider/provider-controller.js.map +1 -1
  54. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +25 -0
  55. package/dist/server/modules/provider/provider-discovery-helper-client.js +114 -0
  56. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -0
  57. package/dist/server/modules/provider/provider-discovery-helper-process.d.ts +1 -0
  58. package/dist/server/modules/provider/provider-discovery-helper-process.js +296 -0
  59. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -0
  60. package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +28 -0
  61. package/dist/server/modules/sessions/claude-runtime-helper-client.js +221 -0
  62. package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -0
  63. package/dist/server/modules/sessions/claude-runtime-helper-process.d.ts +1 -0
  64. package/dist/server/modules/sessions/claude-runtime-helper-process.js +146 -0
  65. package/dist/server/modules/sessions/claude-runtime-helper-process.js.map +1 -0
  66. package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +16 -0
  67. package/dist/server/modules/sessions/codex-app-server-helper-client.js +237 -0
  68. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -0
  69. package/dist/server/modules/sessions/codex-app-server-helper-process.d.ts +1 -0
  70. package/dist/server/modules/sessions/codex-app-server-helper-process.js +484 -0
  71. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -0
  72. package/dist/server/modules/sessions/session-activity-authority-service.d.ts +52 -0
  73. package/dist/server/modules/sessions/session-activity-authority-service.js +377 -0
  74. package/dist/server/modules/sessions/session-activity-authority-service.js.map +1 -0
  75. package/dist/server/modules/sessions/session-activity-inspector.js +80 -40
  76. package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
  77. package/dist/server/modules/sessions/session-controller.d.ts +15 -1
  78. package/dist/server/modules/sessions/session-controller.js +14 -1
  79. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  80. package/dist/server/modules/sessions/session-history-service.d.ts +8 -3
  81. package/dist/server/modules/sessions/session-history-service.js +303 -64
  82. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  83. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +40 -4
  84. package/dist/server/modules/sessions/session-live-runtime-service.js +334 -44
  85. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  86. package/dist/server/modules/sessions/session-permission-request-service.d.ts +175 -0
  87. package/dist/server/modules/sessions/session-permission-request-service.js +1615 -0
  88. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -0
  89. package/dist/server/modules/sessions/session-provider-error-mapper.js +14 -0
  90. package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
  91. package/dist/server/modules/terminal/command-template-service.d.ts +2 -2
  92. package/dist/server/modules/terminal/command-template-service.js +3 -3
  93. package/dist/server/modules/terminal/command-template-service.js.map +1 -1
  94. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.d.ts +24 -0
  95. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.js +104 -0
  96. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-client.js.map +1 -0
  97. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.d.ts +1 -0
  98. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.js +96 -0
  99. package/dist/server/modules/terminal/runtime/adapters/conpty-control-helper-process.js.map +1 -0
  100. package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.d.ts +37 -0
  101. package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.js +123 -0
  102. package/dist/server/modules/terminal/runtime/adapters/conpty-runtime-adapter.js.map +1 -0
  103. package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.d.ts +12 -5
  104. package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.js +44 -4
  105. package/dist/server/modules/terminal/runtime/adapters/embedded-pty-runtime-adapter.js.map +1 -1
  106. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.d.ts +14 -0
  107. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.js +105 -0
  108. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-client.js.map +1 -0
  109. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.d.ts +1 -0
  110. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.js +67 -0
  111. package/dist/server/modules/terminal/runtime/adapters/tmux-helper-process.js.map +1 -0
  112. package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.d.ts +8 -12
  113. package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.js +112 -21
  114. package/dist/server/modules/terminal/runtime/adapters/tmux-runtime-adapter.js.map +1 -1
  115. package/dist/server/modules/terminal/runtime/conpty-runtime-shared.d.ts +25 -0
  116. package/dist/server/modules/terminal/runtime/conpty-runtime-shared.js +124 -0
  117. package/dist/server/modules/terminal/runtime/conpty-runtime-shared.js.map +1 -0
  118. package/dist/server/modules/terminal/runtime/conpty-session-agent-process.d.ts +1 -0
  119. package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js +205 -0
  120. package/dist/server/modules/terminal/runtime/conpty-session-agent-process.js.map +1 -0
  121. package/dist/server/modules/terminal/runtime/conpty-session-attach-client.d.ts +1 -0
  122. package/dist/server/modules/terminal/runtime/conpty-session-attach-client.js +108 -0
  123. package/dist/server/modules/terminal/runtime/conpty-session-attach-client.js.map +1 -0
  124. package/dist/server/modules/terminal/runtime/conpty-session-control-client.d.ts +1 -0
  125. package/dist/server/modules/terminal/runtime/conpty-session-control-client.js +90 -0
  126. package/dist/server/modules/terminal/runtime/conpty-session-control-client.js.map +1 -0
  127. package/dist/server/modules/terminal/runtime/pty-broker-agent-process.d.ts +1 -0
  128. package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js +179 -0
  129. package/dist/server/modules/terminal/runtime/pty-broker-agent-process.js.map +1 -0
  130. package/dist/server/modules/terminal/runtime/pty-broker-client.d.ts +29 -0
  131. package/dist/server/modules/terminal/runtime/pty-broker-client.js +169 -0
  132. package/dist/server/modules/terminal/runtime/pty-broker-client.js.map +1 -0
  133. package/dist/server/modules/terminal/runtime/pty-broker-shared.d.ts +22 -0
  134. package/dist/server/modules/terminal/runtime/pty-broker-shared.js +123 -0
  135. package/dist/server/modules/terminal/runtime/pty-broker-shared.js.map +1 -0
  136. package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.d.ts +1 -0
  137. package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js +11 -1
  138. package/dist/server/modules/terminal/runtime/pty-host-attachment-manager.js.map +1 -1
  139. package/dist/server/modules/terminal/runtime/terminal-log-file-store.d.ts +1 -0
  140. package/dist/server/modules/terminal/runtime/terminal-log-file-store.js +7 -1
  141. package/dist/server/modules/terminal/runtime/terminal-log-file-store.js.map +1 -1
  142. package/dist/server/modules/terminal/runtime/terminal-log-spooler.js +3 -2
  143. package/dist/server/modules/terminal/runtime/terminal-log-spooler.js.map +1 -1
  144. package/dist/server/modules/terminal/runtime/terminal-runtime-adapter.d.ts +5 -3
  145. package/dist/server/modules/terminal/runtime/terminal-runtime-manager.d.ts +11 -5
  146. package/dist/server/modules/terminal/runtime/terminal-runtime-manager.js +110 -13
  147. package/dist/server/modules/terminal/runtime/terminal-runtime-manager.js.map +1 -1
  148. package/dist/server/modules/terminal/terminal-controller.js +7 -7
  149. package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
  150. package/dist/server/modules/terminal/terminal-service.d.ts +30 -14
  151. package/dist/server/modules/terminal/terminal-service.js +260 -51
  152. package/dist/server/modules/terminal/terminal-service.js.map +1 -1
  153. package/dist/server/modules/terminal/terminal-shell.d.ts +4 -0
  154. package/dist/server/modules/terminal/terminal-shell.js +165 -18
  155. package/dist/server/modules/terminal/terminal-shell.js.map +1 -1
  156. package/dist/server/modules/workbench/workspace-file-watcher.d.ts +30 -0
  157. package/dist/server/modules/workbench/workspace-file-watcher.js +137 -0
  158. package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -0
  159. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +43 -7
  160. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
  161. package/dist/server/routes/git.js +1 -0
  162. package/dist/server/routes/git.js.map +1 -1
  163. package/dist/server/routes/preferences.d.ts +2 -1
  164. package/dist/server/routes/preferences.js +3 -1
  165. package/dist/server/routes/preferences.js.map +1 -1
  166. package/dist/server/routes/sessions.js +2 -0
  167. package/dist/server/routes/sessions.js.map +1 -1
  168. package/dist/server/server/create-server.d.ts +4 -0
  169. package/dist/server/server/create-server.js +22 -5
  170. package/dist/server/server/create-server.js.map +1 -1
  171. package/dist/server/shared/utils/command-launch.d.ts +6 -0
  172. package/dist/server/shared/utils/command-launch.js +39 -0
  173. package/dist/server/shared/utils/command-launch.js.map +1 -0
  174. package/dist/server/shared/utils/perf-log.d.ts +1 -0
  175. package/dist/server/shared/utils/perf-log.js +8 -2
  176. package/dist/server/shared/utils/perf-log.js.map +1 -1
  177. package/dist/server/shared/utils/permission-debug-log.d.ts +2 -0
  178. package/dist/server/shared/utils/permission-debug-log.js +40 -0
  179. package/dist/server/shared/utils/permission-debug-log.js.map +1 -0
  180. package/dist/server/shared/utils/terminal-debug-log.d.ts +4 -0
  181. package/dist/server/shared/utils/terminal-debug-log.js +71 -0
  182. package/dist/server/shared/utils/terminal-debug-log.js.map +1 -0
  183. package/dist/server/storage/repositories/user-preference-profile-repository.d.ts +8 -0
  184. package/dist/server/storage/repositories/user-preference-profile-repository.js +46 -0
  185. package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -0
  186. package/dist/server/storage/sqlite/schema.sql +13 -0
  187. package/dist/server/types/domain.d.ts +28 -1
  188. package/dist/server/ws/terminal-ws-hub.d.ts +2 -0
  189. package/dist/server/ws/terminal-ws-hub.js +42 -5
  190. package/dist/server/ws/terminal-ws-hub.js.map +1 -1
  191. package/dist/server/ws/workbench-ws-hub.d.ts +9 -1
  192. package/dist/server/ws/workbench-ws-hub.js +132 -21
  193. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  194. package/dist/server/ws/ws-server.d.ts +22 -1
  195. package/dist/server/ws/ws-server.js +134 -46
  196. package/dist/server/ws/ws-server.js.map +1 -1
  197. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +4 -1
  198. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +107 -6
  199. package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
  200. package/node_modules/@codingns/session-sync-core/dist/patch-builder.d.ts +30 -0
  201. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js +103 -0
  202. package/node_modules/@codingns/session-sync-core/dist/patch-builder.js.map +1 -0
  203. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +1 -1
  204. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +38 -6
  205. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
  206. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -1
  207. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +1 -1
  208. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  209. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.d.ts +1 -0
  210. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js +8 -0
  211. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-permissions.js.map +1 -0
  212. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +87 -7
  213. package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
  214. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -1
  215. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +8 -4
  216. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  217. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +1 -0
  218. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +5 -0
  219. package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
  220. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -0
  221. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +114 -6
  222. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  223. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +23 -0
  224. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +721 -18
  225. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  226. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
  227. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +106 -23
  228. package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
  229. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.d.ts +1 -0
  230. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js +3 -0
  231. package/node_modules/@codingns/session-sync-core/dist/runtime/provider-runtime-service.js.map +1 -1
  232. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +1 -0
  233. package/node_modules/@codingns/session-sync-core/dist/services.d.ts +1 -1
  234. package/node_modules/@codingns/session-sync-core/dist/services.js +2 -2
  235. package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
  236. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
  237. package/package.json +6 -2
  238. package/scripts/postinstall.mjs +218 -0
  239. package/dist/public/assets/TerminalPage-Dj_VDew3.js +0 -54
  240. package/dist/public/assets/index-C1GZV2wq.js +0 -106
  241. package/dist/public/assets/index-DU7f8NaZ.css +0 -1
@@ -1,19 +1,26 @@
1
1
  import { AppError } from "../shared/errors/app-error.js";
2
+ import { logTerminalDebug, terminalDebugNowMs } from "../shared/utils/terminal-debug-log.js";
2
3
  const WORKBENCH_REFRESH_INTERVAL_MS = 60_000;
3
4
  const SIDEBAR_REFRESH_INTERVAL_MS = 5_000;
4
5
  const GIT_SUBSCRIPTION_MIN_REFRESH_INTERVAL_MS = 15_000;
6
+ const WORKBENCH_REALTIME_BROADCAST_DEBOUNCE_MS = 120;
5
7
  export class WorkbenchWsHub {
6
8
  workbenchService;
7
9
  workspacePanelSnapshotService;
10
+ fileWatcher;
8
11
  clientUsers = new WeakMap();
9
12
  userChannels = new Map();
10
13
  clientFileTreeSubscriptions = new WeakMap();
11
14
  clientGitSubscriptions = new WeakMap();
12
15
  clientTerminalManagerSubscriptions = new WeakMap();
13
16
  clientWorkspaceManagementSubscriptions = new WeakMap();
14
- constructor(workbenchService, workspacePanelSnapshotService) {
17
+ constructor(workbenchService, workspacePanelSnapshotService, fileWatcher) {
15
18
  this.workbenchService = workbenchService;
16
19
  this.workspacePanelSnapshotService = workspacePanelSnapshotService;
20
+ this.fileWatcher = fileWatcher;
21
+ this.fileWatcher.setOnChange((workspaceId) => {
22
+ this.handleWorkspaceFileChange(workspaceId);
23
+ });
17
24
  }
18
25
  handleMessage(client, payload, authContext) {
19
26
  const message = parseWorkbenchMessage(payload);
@@ -28,7 +35,10 @@ export class WorkbenchWsHub {
28
35
  void this.sendWorkbenchSnapshotToClient(client, userId, channel);
29
36
  return true;
30
37
  case "workbench.refresh":
31
- void this.refreshAndBroadcast(userId, true);
38
+ void Promise.all([
39
+ this.syncTitlesAndBroadcast(userId),
40
+ this.refreshAndBroadcast(userId, true)
41
+ ]);
32
42
  return true;
33
43
  case "fileTree.subscribe":
34
44
  this.clientFileTreeSubscriptions.set(client, {
@@ -36,6 +46,7 @@ export class WorkbenchWsHub {
36
46
  paths: normalizePanelPaths(message.paths),
37
47
  lastPayloadByPath: new Map()
38
48
  });
49
+ this.fileWatcher.subscribe(message.workspaceId.trim());
39
50
  void this.refreshFileTreeSubscriptions(client);
40
51
  return true;
41
52
  case "fileTree.refresh":
@@ -52,6 +63,7 @@ export class WorkbenchWsHub {
52
63
  lastRequestedAt: 0,
53
64
  refreshTask: null
54
65
  });
66
+ this.fileWatcher.subscribe(message.workspaceId.trim());
55
67
  void this.refreshGitSubscription(client);
56
68
  return true;
57
69
  case "git.refresh":
@@ -110,6 +122,15 @@ export class WorkbenchWsHub {
110
122
  }
111
123
  channel.clients.delete(client);
112
124
  this.clientUsers.delete(client);
125
+ // 文件监听器引用计数递减
126
+ const fileTreeSub = this.clientFileTreeSubscriptions.get(client);
127
+ if (fileTreeSub) {
128
+ this.fileWatcher.unsubscribe(fileTreeSub.workspaceId);
129
+ }
130
+ const gitSub = this.clientGitSubscriptions.get(client);
131
+ if (gitSub) {
132
+ this.fileWatcher.unsubscribe(gitSub.workspaceId);
133
+ }
113
134
  this.clientFileTreeSubscriptions.delete(client);
114
135
  this.clientGitSubscriptions.delete(client);
115
136
  this.clientTerminalManagerSubscriptions.delete(client);
@@ -123,31 +144,86 @@ export class WorkbenchWsHub {
123
144
  if (channel.sidebarTimer) {
124
145
  clearInterval(channel.sidebarTimer);
125
146
  }
147
+ if (channel.realtimeBroadcastTimer) {
148
+ clearTimeout(channel.realtimeBroadcastTimer);
149
+ }
126
150
  this.userChannels.delete(userId);
127
151
  }
128
152
  async broadcastSnapshot(userId) {
129
- try {
130
- const channel = this.userChannels.get(userId);
131
- if (!channel) {
132
- return;
153
+ const channel = this.userChannels.get(userId);
154
+ if (!channel) {
155
+ return;
156
+ }
157
+ channel.realtimeBroadcastQueued = true;
158
+ this.scheduleRealtimeBroadcast(userId, channel);
159
+ }
160
+ scheduleRealtimeBroadcast(userId, channel) {
161
+ if (channel.realtimeBroadcastTimer ||
162
+ channel.realtimeBroadcastTask ||
163
+ channel.clients.size === 0) {
164
+ return;
165
+ }
166
+ channel.realtimeBroadcastTimer = setTimeout(() => {
167
+ channel.realtimeBroadcastTimer = null;
168
+ void this.flushRealtimeBroadcast(userId, channel);
169
+ }, WORKBENCH_REALTIME_BROADCAST_DEBOUNCE_MS);
170
+ }
171
+ async flushRealtimeBroadcast(userId, channel) {
172
+ if (channel.realtimeBroadcastTask || !channel.realtimeBroadcastQueued || channel.clients.size === 0) {
173
+ return;
174
+ }
175
+ channel.realtimeBroadcastQueued = false;
176
+ channel.realtimeBroadcastTask = (async () => {
177
+ const startedAtMs = terminalDebugNowMs();
178
+ try {
179
+ const payload = buildWorkbenchPayload(this.workbenchService.getSnapshot(userId));
180
+ if (payload === channel.lastWorkbenchPayload) {
181
+ return;
182
+ }
183
+ channel.lastWorkbenchPayload = payload;
184
+ for (const client of channel.clients) {
185
+ client.send(payload);
186
+ }
187
+ logTerminalDebug("workbench.realtime_broadcast.completed", {
188
+ userId,
189
+ clientCount: channel.clients.size,
190
+ durationMs: terminalDebugNowMs() - startedAtMs
191
+ });
133
192
  }
134
- const payload = buildWorkbenchPayload(this.workbenchService.getSnapshot(userId));
135
- if (payload === channel.lastWorkbenchPayload) {
136
- return;
193
+ catch (error) {
194
+ this.reportAsyncError("broadcastSnapshot", error, { userId });
137
195
  }
138
- channel.lastWorkbenchPayload = payload;
139
- for (const client of channel.clients) {
140
- client.send(payload);
196
+ })().finally(() => {
197
+ channel.realtimeBroadcastTask = null;
198
+ if (channel.realtimeBroadcastQueued && channel.clients.size > 0) {
199
+ this.scheduleRealtimeBroadcast(userId, channel);
141
200
  }
142
- }
143
- catch (error) {
144
- this.reportAsyncError("broadcastSnapshot", error, { userId });
145
- }
201
+ });
202
+ return channel.realtimeBroadcastTask;
146
203
  }
147
204
  attachClient(client, userId, channel) {
148
205
  channel.clients.add(client);
149
206
  this.clientUsers.set(client, userId);
150
207
  }
208
+ /**
209
+ * 文件变化回调:chokidar 检测到工作区文件变化后,失效缓存并推送更新给订阅了该工作区的客户端。
210
+ */
211
+ handleWorkspaceFileChange(workspaceId) {
212
+ this.workspacePanelSnapshotService.invalidateFileTree(workspaceId);
213
+ this.workspacePanelSnapshotService.invalidateGit(workspaceId);
214
+ for (const [, channel] of this.userChannels) {
215
+ for (const client of channel.clients) {
216
+ const fileTreeSub = this.clientFileTreeSubscriptions.get(client);
217
+ if (fileTreeSub && fileTreeSub.workspaceId === workspaceId) {
218
+ void this.refreshFileTreeSubscriptions(client, true);
219
+ }
220
+ const gitSub = this.clientGitSubscriptions.get(client);
221
+ if (gitSub && gitSub.workspaceId === workspaceId) {
222
+ void this.refreshGitSubscription(client, true);
223
+ }
224
+ }
225
+ }
226
+ }
151
227
  getOrCreateChannel(userId) {
152
228
  let channel = this.userChannels.get(userId);
153
229
  if (channel) {
@@ -158,6 +234,9 @@ export class WorkbenchWsHub {
158
234
  lastWorkbenchPayload: null,
159
235
  workbenchTimer: null,
160
236
  sidebarTimer: null,
237
+ realtimeBroadcastTimer: null,
238
+ realtimeBroadcastQueued: false,
239
+ realtimeBroadcastTask: null,
161
240
  refreshTask: null,
162
241
  titleSyncTask: null
163
242
  };
@@ -170,10 +249,7 @@ export class WorkbenchWsHub {
170
249
  });
171
250
  }, WORKBENCH_REFRESH_INTERVAL_MS);
172
251
  channel.sidebarTimer = setInterval(() => {
173
- void Promise.all([
174
- this.syncTitlesAndBroadcast(userId),
175
- this.refreshSidebarSubscriptions(userId)
176
- ]).catch((error) => {
252
+ void this.refreshSidebarSubscriptions(userId).catch((error) => {
177
253
  this.reportAsyncError("sidebarTimer", error, { userId });
178
254
  });
179
255
  }, SIDEBAR_REFRESH_INTERVAL_MS);
@@ -186,6 +262,7 @@ export class WorkbenchWsHub {
186
262
  return channel.titleSyncTask;
187
263
  }
188
264
  channel.titleSyncTask = (async () => {
265
+ const startedAtMs = terminalDebugNowMs();
189
266
  try {
190
267
  const payload = buildWorkbenchPayload(await this.workbenchService.syncSessionTitles(userId));
191
268
  if (payload === channel.lastWorkbenchPayload) {
@@ -195,6 +272,11 @@ export class WorkbenchWsHub {
195
272
  for (const client of channel.clients) {
196
273
  client.send(payload);
197
274
  }
275
+ logTerminalDebug("workbench.sync_titles.completed", {
276
+ userId,
277
+ clientCount: channel.clients.size,
278
+ durationMs: terminalDebugNowMs() - startedAtMs
279
+ });
198
280
  }
199
281
  catch (error) {
200
282
  this.reportAsyncError("syncTitlesAndBroadcast", error, { userId });
@@ -223,6 +305,7 @@ export class WorkbenchWsHub {
223
305
  await channel.refreshTask;
224
306
  }
225
307
  channel.refreshTask = (async () => {
308
+ const startedAtMs = terminalDebugNowMs();
226
309
  try {
227
310
  const snapshot = await this.workbenchService.refreshSnapshot(userId);
228
311
  const payload = buildWorkbenchPayload(snapshot);
@@ -233,6 +316,13 @@ export class WorkbenchWsHub {
233
316
  for (const client of channel.clients) {
234
317
  client.send(payload);
235
318
  }
319
+ logTerminalDebug("workbench.refresh.completed", {
320
+ userId,
321
+ force,
322
+ clientCount: channel.clients.size,
323
+ workspaceCount: snapshot.items.length,
324
+ durationMs: terminalDebugNowMs() - startedAtMs
325
+ });
236
326
  }
237
327
  catch (error) {
238
328
  this.reportAsyncError("refreshAndBroadcast", error, { userId });
@@ -247,14 +337,19 @@ export class WorkbenchWsHub {
247
337
  if (!channel) {
248
338
  return;
249
339
  }
340
+ const startedAtMs = terminalDebugNowMs();
250
341
  await Promise.all([...channel.clients].map(async (client) => {
251
342
  await Promise.allSettled([
252
- this.refreshFileTreeSubscriptions(client),
253
343
  this.refreshGitSubscription(client),
254
344
  this.refreshTerminalManagerSubscription(client),
255
345
  this.refreshWorkspaceManagementSubscription(client)
256
346
  ]);
257
347
  }));
348
+ logTerminalDebug("workbench.sidebar_refresh.completed", {
349
+ userId,
350
+ clientCount: channel.clients.size,
351
+ durationMs: terminalDebugNowMs() - startedAtMs
352
+ });
258
353
  }
259
354
  ensureFileTreeSubscription(client, workspaceId, paths) {
260
355
  const current = this.clientFileTreeSubscriptions.get(client);
@@ -319,6 +414,7 @@ export class WorkbenchWsHub {
319
414
  }
320
415
  subscription.lastRequestedAt = now;
321
416
  subscription.refreshTask = (async () => {
417
+ const startedAtMs = terminalDebugNowMs();
322
418
  try {
323
419
  const snapshot = await this.workspacePanelSnapshotService.getGitPanelSnapshot(subscription.workspaceId, { force });
324
420
  const payload = buildGitPayload(snapshot);
@@ -327,6 +423,13 @@ export class WorkbenchWsHub {
327
423
  }
328
424
  subscription.lastPayload = payload;
329
425
  client.send(payload);
426
+ logTerminalDebug("workbench.git_refresh.completed", {
427
+ workspaceId: subscription.workspaceId,
428
+ force,
429
+ changeCount: snapshot.status.changes.length,
430
+ historyCount: snapshot.history.length,
431
+ durationMs: terminalDebugNowMs() - startedAtMs
432
+ });
330
433
  }
331
434
  catch (error) {
332
435
  this.reportAsyncError("refreshGitSubscription", error, {
@@ -344,6 +447,7 @@ export class WorkbenchWsHub {
344
447
  return;
345
448
  }
346
449
  try {
450
+ const startedAtMs = terminalDebugNowMs();
347
451
  const snapshot = await this.workspacePanelSnapshotService.getTerminalManagerSnapshot(subscription.workspaceId, { force });
348
452
  const payload = buildTerminalManagerPayload(snapshot);
349
453
  if (payload === subscription.lastPayload) {
@@ -351,6 +455,13 @@ export class WorkbenchWsHub {
351
455
  }
352
456
  subscription.lastPayload = payload;
353
457
  client.send(payload);
458
+ logTerminalDebug("workbench.terminal_manager_refresh.completed", {
459
+ workspaceId: subscription.workspaceId,
460
+ force,
461
+ terminalCount: snapshot.terminals.length,
462
+ templateCount: snapshot.templates.length,
463
+ durationMs: terminalDebugNowMs() - startedAtMs
464
+ });
354
465
  }
355
466
  catch (error) {
356
467
  this.reportAsyncError("refreshTerminalManagerSubscription", error, {
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-ws-hub.js","sourceRoot":"","sources":["../../../src/ws/workbench-ws-hub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workbench-ws-hub.js","sourceRoot":"","sources":["../../../src/ws/workbench-ws-hub.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,32 @@
1
1
  import type { IncomingMessage, Server } from "node:http";
2
2
  import { type WebSocket } from "ws";
3
- import type { SessionHistoryService } from "../modules/sessions/session-history-service.js";
3
+ import type { SessionHistoryEnvelope, SessionHistoryService } from "../modules/sessions/session-history-service.js";
4
4
  import type { SessionLiveRuntimeService } from "../modules/sessions/session-live-runtime-service.js";
5
5
  import type { TerminalWsHub } from "./terminal-ws-hub.js";
6
6
  import type { WorkbenchWsHub } from "./workbench-ws-hub.js";
7
7
  import type { WsAuthGuard } from "./ws-auth-guard.js";
8
+ interface SeenMessageEntry {
9
+ signature: string;
10
+ source: "history" | "runtime";
11
+ timestamp: string;
12
+ contentLength: number;
13
+ contentPreview: string;
14
+ toolCallStatus: "running" | "completed" | "failed" | null;
15
+ }
8
16
  export declare function createWsServer(server: Server, wsAuthGuard: WsAuthGuard, sessionHistoryService: SessionHistoryService, sessionLiveRuntimeService: SessionLiveRuntimeService, terminalWsHub: TerminalWsHub, workbenchWsHub: WorkbenchWsHub): {
9
17
  wss: import("ws").Server<typeof WebSocket, typeof IncomingMessage>;
10
18
  close: () => Promise<void>;
11
19
  };
20
+ declare function shouldForwardMessage(message: SessionHistoryEnvelope["messages"][number], source: "history" | "runtime", seenMessages: Map<string, SeenMessageEntry>): boolean;
21
+ declare function buildMessageSignature(message: SessionHistoryEnvelope["messages"][number]): string;
22
+ declare function buildSeenMessageEntry(message: SessionHistoryEnvelope["messages"][number], source: "history" | "runtime"): SeenMessageEntry;
23
+ declare function isOlderMessageVersion(message: SessionHistoryEnvelope["messages"][number], previous: SeenMessageEntry): boolean;
24
+ export declare const __internal__: {
25
+ MAX_TRACKED_MESSAGES_PER_SUBSCRIPTION: number;
26
+ MAX_STORED_MESSAGE_PREVIEW_CHARS: number;
27
+ buildMessageSignature: typeof buildMessageSignature;
28
+ buildSeenMessageEntry: typeof buildSeenMessageEntry;
29
+ isOlderMessageVersion: typeof isOlderMessageVersion;
30
+ shouldForwardMessage: typeof shouldForwardMessage;
31
+ };
32
+ export {};
@@ -1,5 +1,8 @@
1
1
  import { WebSocketServer } from "ws";
2
2
  import { AppError } from "../shared/errors/app-error.js";
3
+ import { hashContent } from "../shared/utils/hash.js";
4
+ const MAX_TRACKED_MESSAGES_PER_SUBSCRIPTION = 2_048;
5
+ const MAX_STORED_MESSAGE_PREVIEW_CHARS = 2_048;
3
6
  export function createWsServer(server, wsAuthGuard, sessionHistoryService, sessionLiveRuntimeService, terminalWsHub, workbenchWsHub) {
4
7
  const wss = new WebSocketServer({
5
8
  noServer: true
@@ -53,6 +56,34 @@ export function createWsServer(server, wsAuthGuard, sessionHistoryService, sessi
53
56
  if (workbenchWsHub.handleMessage(client, payload, authContext)) {
54
57
  return;
55
58
  }
59
+ if (isSessionLoadOlderMessage(payload)) {
60
+ const subscription = subscriptions.get(payload.sessionId);
61
+ if (!subscription) {
62
+ sendWsError(client, payload.sessionId, "SESSION_NOT_SUBSCRIBED", "会话尚未订阅,不能加载更早消息");
63
+ return;
64
+ }
65
+ try {
66
+ const page = await sessionHistoryService.readSessionHistory(payload.sessionId, payload.cursor ?? null, typeof payload.limit === "number" ? payload.limit : 50, "backward", authContext.user.userId);
67
+ await subscription.forwardEnvelope({
68
+ type: "session.history_older",
69
+ sessionId: payload.sessionId,
70
+ cursor: null,
71
+ olderCursor: page.nextCursor,
72
+ messages: page.messages
73
+ });
74
+ }
75
+ catch (error) {
76
+ const appError = error instanceof AppError
77
+ ? error
78
+ : new AppError({
79
+ statusCode: 500,
80
+ errorCode: "INTERNAL_ERROR",
81
+ detail: "加载更早消息失败"
82
+ });
83
+ sendWsError(client, payload.sessionId, appError.errorCode, appError.message);
84
+ }
85
+ return;
86
+ }
56
87
  if (!isSessionSubscribeMessage(payload)) {
57
88
  sendWsError(client, null, "INVALID_INPUT", "不支持的 WebSocket 消息类型");
58
89
  return;
@@ -71,6 +102,7 @@ export function createWsServer(server, wsAuthGuard, sessionHistoryService, sessi
71
102
  client.send(JSON.stringify(deduped));
72
103
  if (deduped.type === "session.backfill" ||
73
104
  deduped.type === "session.delta" ||
105
+ deduped.type === "session.activity" ||
74
106
  deduped.type === "session.runtime_message" ||
75
107
  deduped.type === "session.runtime_status" ||
76
108
  deduped.type === "session.runtime_error" ||
@@ -80,8 +112,23 @@ export function createWsServer(server, wsAuthGuard, sessionHistoryService, sessi
80
112
  };
81
113
  const runtimeSubscription = sessionLiveRuntimeService.subscribeRuntime(payload.sessionId, forwardEnvelope);
82
114
  try {
83
- const historySubscription = await sessionHistoryService.subscribeSession(payload.sessionId, payload.cursor ?? null, typeof payload.limit === "number" ? payload.limit : 50, forwardEnvelope);
115
+ let currentCursor = payload.cursor ?? null;
116
+ const safeLimit = typeof payload.limit === "number" ? payload.limit : 50;
117
+ if (currentCursor === null) {
118
+ const page = await sessionHistoryService.readSessionHistory(payload.sessionId, null, safeLimit, "backward", authContext.user.userId);
119
+ currentCursor = page.cursor;
120
+ await forwardEnvelope({
121
+ type: "session.backfill",
122
+ sessionId: payload.sessionId,
123
+ cursor: page.cursor,
124
+ olderCursor: page.nextCursor,
125
+ messages: page.messages
126
+ });
127
+ }
128
+ const historySubscription = await sessionHistoryService.subscribeSession(payload.sessionId, currentCursor, safeLimit, forwardEnvelope);
84
129
  subscriptions.set(payload.sessionId, {
130
+ sessionId: payload.sessionId,
131
+ forwardEnvelope,
85
132
  close() {
86
133
  historySubscription.close();
87
134
  runtimeSubscription.close();
@@ -128,17 +175,26 @@ function isSessionSubscribeMessage(payload) {
128
175
  candidate?.type === "session.subscribe" &&
129
176
  typeof candidate?.sessionId === "string");
130
177
  }
178
+ function isSessionLoadOlderMessage(payload) {
179
+ const candidate = payload;
180
+ return (typeof payload === "object" &&
181
+ payload !== null &&
182
+ candidate?.type === "session.load_older" &&
183
+ typeof candidate?.sessionId === "string");
184
+ }
131
185
  function dedupeEnvelopeMessages(envelope, seenMessages) {
132
186
  if (envelope.type === "session.runtime_message") {
133
187
  return shouldForwardMessage(envelope.message, "runtime", seenMessages) ? envelope : null;
134
188
  }
135
- if (envelope.type !== "session.backfill" && envelope.type !== "session.delta") {
189
+ if (envelope.type !== "session.backfill"
190
+ && envelope.type !== "session.delta"
191
+ && envelope.type !== "session.history_older") {
136
192
  return envelope;
137
193
  }
138
194
  const messages = envelope.messages.filter((message) => {
139
195
  return shouldForwardMessage(message, "history", seenMessages);
140
196
  });
141
- if (messages.length === 0) {
197
+ if (messages.length === 0 && envelope.type !== "session.history_older") {
142
198
  return null;
143
199
  }
144
200
  return {
@@ -147,63 +203,87 @@ function dedupeEnvelopeMessages(envelope, seenMessages) {
147
203
  };
148
204
  }
149
205
  function shouldForwardMessage(message, source, seenMessages) {
150
- const signature = buildMessageSignature(message);
206
+ const nextEntry = buildSeenMessageEntry(message, source);
151
207
  const previous = seenMessages.get(message.messageId);
152
- if (previous && previous.signature === signature) {
208
+ if (previous && previous.signature === nextEntry.signature) {
153
209
  return false;
154
210
  }
155
211
  if (previous &&
156
212
  previous.source === "runtime" &&
157
213
  source === "history" &&
158
- isOlderMessageVersion(message, previous.signature)) {
214
+ isOlderMessageVersion(message, previous)) {
159
215
  return false;
160
216
  }
161
- seenMessages.set(message.messageId, {
162
- signature,
163
- source
164
- });
217
+ rememberSeenMessage(seenMessages, message.messageId, nextEntry);
165
218
  return true;
166
219
  }
167
220
  function buildMessageSignature(message) {
168
- return JSON.stringify({
169
- provider: message.provider,
170
- providerSessionId: message.providerSessionId,
171
- role: message.role,
172
- kind: message.kind ?? null,
173
- content: message.content,
221
+ const attachments = message.attachments ?? [];
222
+ const toolCall = message.toolCall;
223
+ return hashContent([
224
+ message.provider,
225
+ message.providerSessionId,
226
+ message.role,
227
+ message.kind ?? "",
228
+ message.timestamp,
229
+ message.rawRef,
230
+ hashContent(message.content),
231
+ String(message.content.length),
232
+ hashContent(JSON.stringify(attachments)),
233
+ String(attachments.length),
234
+ toolCall?.callId ?? "",
235
+ toolCall?.name ?? "",
236
+ toolCall?.status ?? "",
237
+ toolCall ? hashContent(toolCall.input) : "",
238
+ toolCall ? String(toolCall.input.length) : "0",
239
+ toolCall?.output === null || toolCall?.output === undefined ? "" : hashContent(toolCall.output),
240
+ toolCall?.output === null || toolCall?.output === undefined ? "0" : String(toolCall.output.length),
241
+ toolCall?.error === null || toolCall?.error === undefined ? "" : hashContent(toolCall.error),
242
+ toolCall?.error === null || toolCall?.error === undefined ? "0" : String(toolCall.error.length)
243
+ ].join("\u001f"));
244
+ }
245
+ function buildSeenMessageEntry(message, source) {
246
+ return {
247
+ signature: buildMessageSignature(message),
248
+ source,
174
249
  timestamp: message.timestamp,
175
- rawRef: message.rawRef,
176
- attachments: message.attachments ?? [],
177
- toolCall: message.toolCall
178
- ? {
179
- callId: message.toolCall.callId,
180
- status: message.toolCall.status,
181
- input: message.toolCall.input,
182
- output: message.toolCall.output,
183
- error: message.toolCall.error
184
- }
185
- : null
186
- });
250
+ contentLength: message.content.length,
251
+ contentPreview: createStoredPreview(message.content),
252
+ toolCallStatus: message.toolCall?.status ?? null
253
+ };
187
254
  }
188
- function isOlderMessageVersion(message, previousSignature) {
189
- try {
190
- const previous = JSON.parse(previousSignature);
191
- const previousContent = typeof previous.content === "string" ? previous.content : "";
192
- const nextContent = typeof message.content === "string" ? message.content : "";
193
- if (previousContent.length > nextContent.length && previousContent.includes(nextContent)) {
194
- return true;
195
- }
196
- const previousTimestamp = typeof previous.timestamp === "string" ? previous.timestamp : "";
197
- if (previousTimestamp && message.timestamp < previousTimestamp) {
198
- return true;
199
- }
200
- const previousStatus = previous.toolCall?.status ?? null;
201
- const nextStatus = message.toolCall?.status ?? null;
202
- return ((previousStatus === "completed" || previousStatus === "failed")
203
- && nextStatus === "running");
255
+ function isOlderMessageVersion(message, previous) {
256
+ const nextContent = message.content;
257
+ if (previous.contentLength > nextContent.length &&
258
+ nextContent.length > 0 &&
259
+ nextContent.length <= MAX_STORED_MESSAGE_PREVIEW_CHARS &&
260
+ previous.contentPreview.includes(nextContent)) {
261
+ return true;
204
262
  }
205
- catch {
206
- return false;
263
+ if (previous.timestamp && message.timestamp < previous.timestamp) {
264
+ return true;
265
+ }
266
+ const nextStatus = message.toolCall?.status ?? null;
267
+ return ((previous.toolCallStatus === "completed" || previous.toolCallStatus === "failed") &&
268
+ nextStatus === "running");
269
+ }
270
+ function createStoredPreview(value) {
271
+ if (value.length <= MAX_STORED_MESSAGE_PREVIEW_CHARS) {
272
+ return value;
273
+ }
274
+ return value.slice(0, MAX_STORED_MESSAGE_PREVIEW_CHARS);
275
+ }
276
+ function rememberSeenMessage(seenMessages, messageId, entry) {
277
+ if (seenMessages.has(messageId)) {
278
+ seenMessages.delete(messageId);
279
+ }
280
+ seenMessages.set(messageId, entry);
281
+ while (seenMessages.size > MAX_TRACKED_MESSAGES_PER_SUBSCRIPTION) {
282
+ const oldestMessageId = seenMessages.keys().next().value;
283
+ if (typeof oldestMessageId !== "string") {
284
+ break;
285
+ }
286
+ seenMessages.delete(oldestMessageId);
207
287
  }
208
288
  }
209
289
  function sendWsError(client, sessionId, errorCode, detail) {
@@ -215,4 +295,12 @@ function sendWsError(client, sessionId, errorCode, detail) {
215
295
  timestamp: new Date().toISOString()
216
296
  }));
217
297
  }
298
+ export const __internal__ = {
299
+ MAX_TRACKED_MESSAGES_PER_SUBSCRIPTION,
300
+ MAX_STORED_MESSAGE_PREVIEW_CHARS,
301
+ buildMessageSignature,
302
+ buildSeenMessageEntry,
303
+ isOlderMessageVersion,
304
+ shouldForwardMessage
305
+ };
218
306
  //# sourceMappingURL=ws-server.js.map