@jingyi0605/codingns 0.4.0 → 0.5.1
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/bin/codingns.mjs +425 -1
- package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +1 -0
- package/dist/public/assets/AdaptiveButlerPage-SffCV4Vb.js +3 -0
- package/dist/public/assets/App-DUAg5urj.css +1 -0
- package/dist/public/assets/App-WOLwMld_.js +30 -0
- package/dist/public/assets/BootstrapPage--zExdgfM.js +1 -0
- package/dist/public/assets/ConversationPage-D9pzRmOg.js +2 -0
- package/dist/public/assets/DesktopDetachPreviewPage-DvI9CIKi.js +1 -0
- package/dist/public/assets/DesktopWindowPage-D8FpOSLE.js +2 -0
- package/dist/public/assets/FileContextPanel-C8T7oqRN.js +1 -0
- package/dist/public/assets/GitSidebar-Bze7DNnc.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-CXSKMnYn.js +1 -0
- package/dist/public/assets/MobileSheet-Gzc14EpR.js +1 -0
- package/dist/public/assets/MobileTopHeaderFrame-BWorAJ1C.js +1 -0
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-DOr4pTUq.js +1 -0
- package/dist/public/assets/ServerSettingsModal-BYB0GvTl.js +1 -0
- package/dist/public/assets/SessionIndexPage-CR3IARXX.js +1 -0
- package/dist/public/assets/SettingsPage-B_BQtnwE.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-PQ-EM64j.js +1 -0
- package/dist/public/assets/{TerminalPage-6jHZV9Mh.js → TerminalPage-CvnHXBhw.js} +19 -19
- package/dist/public/assets/TerminalRuntimeFallbackModal-D7Aq186N.js +1 -0
- package/dist/public/assets/ToolFilesPage-Qzkc6K2I.js +1 -0
- package/dist/public/assets/ToolGitPage-BdNDN-cV.js +1 -0
- package/dist/public/assets/ToolProcessesPage-EXJ9DHWI.js +1 -0
- package/dist/public/assets/ToolsHomePage-CjF3CWzR.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-DZPk4SmX.js +1 -0
- package/dist/public/assets/WorkbenchLayout-rwQib5In.js +3 -0
- package/dist/public/assets/WorkbenchModal-B09hC9b5.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Cerk5uK7.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-DsW4mBTX.css +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-Bcq8s-Ma.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-DNAa8pKr.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-BoiLuACV.js +1 -0
- package/dist/public/assets/butler-records-events-DgWCG364.js +1 -0
- package/dist/public/assets/client-runtime-manager-CRQ-F5d2.js +1 -0
- package/dist/public/assets/default-session-permission-mode-D0wZ9Jek.js +1 -0
- package/dist/public/assets/event-DvH9tcej.js +1 -0
- package/dist/public/assets/file-tree-icon-Dp_xhVfD.js +31 -0
- package/dist/public/assets/index-C2G8Gmf1.js +42 -0
- package/dist/public/assets/index-CpPTUeA3.css +1 -0
- package/dist/public/assets/preferences-service-gOt2ZjKZ.js +1 -0
- package/dist/public/assets/session-runtime-machine-Dq3pW-UF.js +17 -0
- package/dist/public/assets/styles-BWPBZvze.css +1 -0
- package/dist/public/assets/styles-CSUx5LGe.js +1 -0
- package/dist/public/assets/terminal-runtime-meta-BMT-rSEe.js +1 -0
- package/dist/public/assets/useRegisteredDebugTemplates-zMcEOGca.js +1 -0
- package/dist/public/assets/window-BWqRixxq.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/middlewares/auth-guard.d.ts +4 -0
- package/dist/server/middlewares/auth-guard.js +42 -4
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +62 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +58 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +66 -3
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +173 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/auth/auth-controller.d.ts +11 -1
- package/dist/server/modules/auth/auth-controller.js +61 -2
- package/dist/server/modules/auth/auth-controller.js.map +1 -1
- package/dist/server/modules/auth/auth-device-display-name.d.ts +10 -0
- package/dist/server/modules/auth/auth-device-display-name.js +190 -0
- package/dist/server/modules/auth/auth-device-display-name.js.map +1 -0
- package/dist/server/modules/auth/auth-service.d.ts +80 -5
- package/dist/server/modules/auth/auth-service.js +333 -23
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/butler/assistant-automation-service.d.ts +2 -0
- package/dist/server/modules/butler/assistant-automation-service.js +46 -0
- package/dist/server/modules/butler/assistant-automation-service.js.map +1 -1
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.d.ts +32 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js +93 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js.map +1 -0
- package/dist/server/modules/butler/assistant-sandbox-service.d.ts +16 -2
- package/dist/server/modules/butler/assistant-sandbox-service.js +137 -4
- package/dist/server/modules/butler/assistant-sandbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-auth-service.js +7 -2
- package/dist/server/modules/butler/butler-auth-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-control-session-service.js +20 -1
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +2 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +27 -25
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.d.ts +32 -4
- package/dist/server/modules/butler/butler-follow-up-service.js +436 -331
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-service.js +1 -0
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-session-service.js +15 -1
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +1 -1
- package/dist/server/modules/butler/butler-workspace-context.js +54 -28
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
- package/dist/server/modules/client/client-controller.js +1 -1
- package/dist/server/modules/client/client-controller.js.map +1 -1
- package/dist/server/modules/client/client-service.d.ts +16 -2
- package/dist/server/modules/client/client-service.js +21 -3
- package/dist/server/modules/client/client-service.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +1 -1
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.d.ts +10 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js +11 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +74 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +302 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.d.ts +33 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js +57 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.d.ts +9 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js +25 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +18 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +230 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +41 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +443 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +112 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +966 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +2 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +78 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +84 -2
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/provider-session-delete-cli.d.ts +15 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js +148 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -0
- package/dist/server/modules/sessions/session-controller.d.ts +4 -1
- package/dist/server/modules/sessions/session-controller.js +4 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +17 -0
- package/dist/server/modules/sessions/session-history-service.js +150 -1
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.d.ts +25 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +42 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +34 -18
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js +22 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.js +200 -5
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +32 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-usage-guard-service.d.ts +37 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js +179 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.d.ts +17 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js +465 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.d.ts +8 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js +26 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.d.ts +9 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js +55 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js.map +1 -0
- package/dist/server/modules/skills/builtin-skill-service.js +1 -6
- package/dist/server/modules/skills/builtin-skill-service.js.map +1 -1
- package/dist/server/modules/skills/skill-controller.d.ts +2 -2
- package/dist/server/modules/skills/skill-controller.js +9 -1
- package/dist/server/modules/skills/skill-controller.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +26 -1
- package/dist/server/modules/skills/skill-manager-service.js +346 -90
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/skills/skill-name-policy.d.ts +2 -0
- package/dist/server/modules/skills/skill-name-policy.js +10 -0
- package/dist/server/modules/skills/skill-name-policy.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-service.d.ts +2 -0
- package/dist/server/modules/tailscale/tailscale-service.js +21 -8
- package/dist/server/modules/tailscale/tailscale-service.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +3 -0
- package/dist/server/modules/tasks/task-types.js +3 -0
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/terminal/template-reverse-proxy-service.js +71 -3
- package/dist/server/modules/terminal/template-reverse-proxy-service.js.map +1 -1
- package/dist/server/modules/workbench/snapshot-revision.d.ts +4 -0
- package/dist/server/modules/workbench/snapshot-revision.js +13 -0
- package/dist/server/modules/workbench/snapshot-revision.js.map +1 -0
- package/dist/server/modules/workbench/workbench-service.d.ts +1 -0
- package/dist/server/modules/workbench/workbench-service.js +3 -2
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +6 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +10 -8
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/routes/assistant.js +30 -0
- package/dist/server/routes/assistant.js.map +1 -1
- package/dist/server/routes/auth.js +4 -0
- package/dist/server/routes/auth.js.map +1 -1
- package/dist/server/routes/sessions.js +1 -0
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/system.d.ts +2 -1
- package/dist/server/routes/system.js +13 -1
- package/dist/server/routes/system.js.map +1 -1
- package/dist/server/server/create-server.d.ts +10 -0
- package/dist/server/server/create-server.js +83 -13
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/utils/tokens.d.ts +3 -1
- package/dist/server/shared/utils/tokens.js +9 -2
- package/dist/server/shared/utils/tokens.js.map +1 -1
- package/dist/server/storage/repositories/assistant-automation-task-repository.d.ts +2 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.js +8 -2
- package/dist/server/storage/repositories/assistant-automation-task-repository.js.map +1 -1
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +1 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +27 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +1 -1
- package/dist/server/storage/repositories/auth-device-repository.d.ts +22 -0
- package/dist/server/storage/repositories/auth-device-repository.js +97 -0
- package/dist/server/storage/repositories/auth-device-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-device-session-repository.d.ts +17 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js +82 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-login-event-repository.d.ts +9 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js +53 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-token-repository.d.ts +4 -0
- package/dist/server/storage/repositories/auth-token-repository.js +58 -5
- package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js +21 -3
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -1
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.d.ts +8 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js +52 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.d.ts +10 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js +153 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-tailscale-repository.js +6 -3
- package/dist/server/storage/repositories/instance-tailscale-repository.js.map +1 -1
- package/dist/server/storage/repositories/managed-skill-repository.d.ts +2 -1
- package/dist/server/storage/repositories/managed-skill-repository.js +14 -4
- package/dist/server/storage/repositories/managed-skill-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-message-attachment-repository.d.ts +2 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js +24 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +297 -2
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +122 -4
- package/dist/server/types/domain.d.ts +91 -1
- package/dist/server/ws/workbench-ws-hub.js +225 -99
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-auth-guard.js +1 -4
- package/dist/server/ws/ws-auth-guard.js.map +1 -1
- package/dist/server/ws/ws-server.d.ts +1 -1
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js +80 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +11 -1
- 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 +11 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +132 -21
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +53 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +10 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +30 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +145 -58
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/services.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/services.js +7 -0
- package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +2 -0
- package/package.json +1 -1
- package/scripts/postinstall.mjs +0 -33
- package/dist/public/assets/index-CSVhg7I8.js +0 -123
- package/dist/public/assets/index-Ce1VX19m.css +0 -1
|
@@ -39,69 +39,80 @@ export class WorkbenchWsHub {
|
|
|
39
39
|
const userId = authContext.user.userId;
|
|
40
40
|
const channel = this.getOrCreateChannel(userId);
|
|
41
41
|
this.attachClient(client, userId, channel);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.workbenchService.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
42
|
+
try {
|
|
43
|
+
switch (message.type) {
|
|
44
|
+
case "workbench.subscribe":
|
|
45
|
+
void this.sendWorkbenchSnapshotToClient(client, userId, channel, message.knownRevision);
|
|
46
|
+
if (this.workbenchService.shouldRefreshSnapshot()) {
|
|
47
|
+
this.workbenchService.scheduleSnapshotRefresh(userId);
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
case "workbench.refresh":
|
|
51
|
+
void this.refreshAndBroadcast(userId, true);
|
|
52
|
+
return true;
|
|
53
|
+
case "fileTree.subscribe":
|
|
54
|
+
this.replaceFileTreeSubscription(client, message.workspaceId, message.paths, message.knownRevisions);
|
|
55
|
+
void this.refreshFileTreeSubscriptions(client);
|
|
56
|
+
return true;
|
|
57
|
+
case "fileTree.refresh":
|
|
58
|
+
for (const path of normalizePanelPaths(message.paths)) {
|
|
59
|
+
this.workspacePanelSnapshotService.invalidateFileTree(message.workspaceId.trim(), path);
|
|
60
|
+
}
|
|
61
|
+
this.ensureFileTreeSubscription(client, message.workspaceId, message.paths, message.knownRevisions);
|
|
62
|
+
void this.refreshFileTreeSubscriptions(client, true);
|
|
63
|
+
return true;
|
|
64
|
+
case "git.subscribe":
|
|
65
|
+
this.ensureGitSubscription(client, message.workspaceId, message.knownRevision);
|
|
66
|
+
void this.refreshGitSubscription(client, false, {
|
|
67
|
+
deliverIfUnchanged: true,
|
|
68
|
+
ignoreMinInterval: true
|
|
69
|
+
});
|
|
70
|
+
return true;
|
|
71
|
+
case "git.refresh":
|
|
72
|
+
this.workspacePanelSnapshotService.invalidateGit(message.workspaceId.trim());
|
|
73
|
+
this.ensureGitSubscription(client, message.workspaceId, message.knownRevision);
|
|
74
|
+
this.scheduleGitRefresh(client, {
|
|
75
|
+
force: true
|
|
76
|
+
});
|
|
77
|
+
return true;
|
|
78
|
+
case "terminalManager.subscribe":
|
|
79
|
+
this.ensureTerminalManagerSubscription(client, message.workspaceId, message.knownRevision);
|
|
80
|
+
this.scheduleTerminalManagerRefresh(client);
|
|
81
|
+
return true;
|
|
82
|
+
case "terminalManager.refresh":
|
|
83
|
+
this.workspacePanelSnapshotService.invalidateTerminalManager(message.workspaceId.trim());
|
|
84
|
+
this.ensureTerminalManagerSubscription(client, message.workspaceId, message.knownRevision);
|
|
85
|
+
this.scheduleTerminalManagerRefresh(client, {
|
|
86
|
+
force: true
|
|
87
|
+
});
|
|
88
|
+
return true;
|
|
89
|
+
case "workspaceManagement.subscribe":
|
|
90
|
+
this.clientWorkspaceManagementSubscriptions.set(client, {
|
|
91
|
+
workspaceId: message.workspaceId.trim(),
|
|
92
|
+
lastPayload: null,
|
|
93
|
+
knownRevision: normalizeKnownRevision(message.knownRevision) ?? null
|
|
94
|
+
});
|
|
95
|
+
void this.refreshWorkspaceManagementSubscription(client);
|
|
96
|
+
return true;
|
|
97
|
+
case "workspaceManagement.refresh":
|
|
98
|
+
this.workspacePanelSnapshotService.invalidateWorkspaceManagement(message.workspaceId.trim());
|
|
99
|
+
this.clientWorkspaceManagementSubscriptions.set(client, {
|
|
100
|
+
workspaceId: message.workspaceId.trim(),
|
|
101
|
+
lastPayload: null,
|
|
102
|
+
knownRevision: normalizeKnownRevision(message.knownRevision) ?? null
|
|
103
|
+
});
|
|
104
|
+
void this.refreshWorkspaceManagementSubscription(client, true);
|
|
105
|
+
return true;
|
|
106
|
+
default:
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
this.reportAsyncError("handleMessage", error, {
|
|
112
|
+
userId,
|
|
113
|
+
workspaceId: extractWorkspaceIdFromWorkbenchMessage(message)
|
|
114
|
+
});
|
|
115
|
+
return true;
|
|
105
116
|
}
|
|
106
117
|
}
|
|
107
118
|
cleanupClient(client) {
|
|
@@ -178,11 +189,13 @@ export class WorkbenchWsHub {
|
|
|
178
189
|
channel.realtimeBroadcastTask = (async () => {
|
|
179
190
|
const startedAtMs = terminalDebugNowMs();
|
|
180
191
|
try {
|
|
181
|
-
const
|
|
192
|
+
const snapshot = this.workbenchService.getSnapshot(userId);
|
|
193
|
+
const payload = buildWorkbenchPayload(snapshot);
|
|
182
194
|
if (payload === channel.lastWorkbenchPayload) {
|
|
183
195
|
return;
|
|
184
196
|
}
|
|
185
197
|
channel.lastWorkbenchPayload = payload;
|
|
198
|
+
channel.lastWorkbenchRevision = snapshot.revision;
|
|
186
199
|
for (const client of channel.clients) {
|
|
187
200
|
client.send(payload);
|
|
188
201
|
}
|
|
@@ -254,6 +267,7 @@ export class WorkbenchWsHub {
|
|
|
254
267
|
channel = {
|
|
255
268
|
clients: new Set(),
|
|
256
269
|
lastWorkbenchPayload: null,
|
|
270
|
+
lastWorkbenchRevision: null,
|
|
257
271
|
workbenchTimer: null,
|
|
258
272
|
workspaceManagementTimer: null,
|
|
259
273
|
realtimeBroadcastTimer: null,
|
|
@@ -279,11 +293,12 @@ export class WorkbenchWsHub {
|
|
|
279
293
|
this.userChannels.set(userId, channel);
|
|
280
294
|
return channel;
|
|
281
295
|
}
|
|
282
|
-
async sendWorkbenchSnapshotToClient(client, userId, channel) {
|
|
296
|
+
async sendWorkbenchSnapshotToClient(client, userId, channel, knownRevision) {
|
|
283
297
|
try {
|
|
284
|
-
const
|
|
285
|
-
channel.lastWorkbenchPayload =
|
|
286
|
-
|
|
298
|
+
const snapshot = this.workbenchService.getSnapshot(userId);
|
|
299
|
+
channel.lastWorkbenchPayload = buildWorkbenchPayload(snapshot);
|
|
300
|
+
channel.lastWorkbenchRevision = snapshot.revision;
|
|
301
|
+
client.send(buildWorkbenchPayload(snapshot, knownRevision));
|
|
287
302
|
}
|
|
288
303
|
catch (error) {
|
|
289
304
|
this.reportAsyncError("sendWorkbenchSnapshotToClient", error, { userId });
|
|
@@ -306,6 +321,7 @@ export class WorkbenchWsHub {
|
|
|
306
321
|
return;
|
|
307
322
|
}
|
|
308
323
|
channel.lastWorkbenchPayload = payload;
|
|
324
|
+
channel.lastWorkbenchRevision = snapshot.revision;
|
|
309
325
|
for (const client of channel.clients) {
|
|
310
326
|
client.send(payload);
|
|
311
327
|
}
|
|
@@ -325,30 +341,33 @@ export class WorkbenchWsHub {
|
|
|
325
341
|
});
|
|
326
342
|
return channel.refreshTask;
|
|
327
343
|
}
|
|
328
|
-
ensureFileTreeSubscription(client, workspaceId, paths) {
|
|
344
|
+
ensureFileTreeSubscription(client, workspaceId, paths, knownRevisions) {
|
|
329
345
|
const current = this.clientFileTreeSubscriptions.get(client);
|
|
330
346
|
const normalizedWorkspaceId = workspaceId.trim();
|
|
331
347
|
const normalizedPaths = normalizePanelPaths(paths);
|
|
332
348
|
const nextPaths = normalizedPaths.length > 0 ? normalizedPaths : [""];
|
|
349
|
+
const nextKnownRevisionByPath = buildKnownRevisionByPathMap(nextPaths, knownRevisions);
|
|
333
350
|
if (current &&
|
|
334
351
|
current.workspaceId === normalizedWorkspaceId &&
|
|
335
352
|
areStringArraysEqual(current.paths, nextPaths)) {
|
|
353
|
+
current.knownRevisionByPath = nextKnownRevisionByPath;
|
|
336
354
|
return current;
|
|
337
355
|
}
|
|
338
|
-
if (current) {
|
|
339
|
-
this.fileWatcher.unsubscribeFileTree(current.workspaceId, current.paths);
|
|
340
|
-
}
|
|
341
356
|
const next = {
|
|
342
357
|
workspaceId: normalizedWorkspaceId,
|
|
343
358
|
paths: nextPaths,
|
|
344
|
-
lastPayloadByPath: new Map()
|
|
359
|
+
lastPayloadByPath: new Map(),
|
|
360
|
+
knownRevisionByPath: nextKnownRevisionByPath
|
|
345
361
|
};
|
|
346
|
-
this.clientFileTreeSubscriptions.set(client, next);
|
|
347
362
|
this.fileWatcher.subscribeFileTree(normalizedWorkspaceId, nextPaths);
|
|
363
|
+
this.clientFileTreeSubscriptions.set(client, next);
|
|
364
|
+
if (current) {
|
|
365
|
+
this.fileWatcher.unsubscribeFileTree(current.workspaceId, current.paths);
|
|
366
|
+
}
|
|
348
367
|
return next;
|
|
349
368
|
}
|
|
350
|
-
replaceFileTreeSubscription(client, workspaceId, paths) {
|
|
351
|
-
return this.ensureFileTreeSubscription(client, workspaceId, paths);
|
|
369
|
+
replaceFileTreeSubscription(client, workspaceId, paths, knownRevisions) {
|
|
370
|
+
return this.ensureFileTreeSubscription(client, workspaceId, paths, knownRevisions);
|
|
352
371
|
}
|
|
353
372
|
async refreshFileTreeSubscriptions(client, force = false) {
|
|
354
373
|
const subscription = this.clientFileTreeSubscriptions.get(client);
|
|
@@ -359,11 +378,12 @@ export class WorkbenchWsHub {
|
|
|
359
378
|
const uniquePaths = normalizePanelPaths(subscription.paths);
|
|
360
379
|
for (const path of uniquePaths) {
|
|
361
380
|
const snapshot = await this.workspacePanelSnapshotService.getFileTreeSnapshot(subscription.workspaceId, path, { force });
|
|
362
|
-
const payload = buildFileTreePayload(snapshot);
|
|
381
|
+
const payload = buildFileTreePayload(snapshot, subscription.knownRevisionByPath.get(path) ?? null);
|
|
363
382
|
const lastPayload = subscription.lastPayloadByPath.get(path) ?? null;
|
|
364
383
|
if (payload === lastPayload) {
|
|
365
384
|
continue;
|
|
366
385
|
}
|
|
386
|
+
subscription.knownRevisionByPath.set(path, snapshot.revision);
|
|
367
387
|
subscription.lastPayloadByPath.set(path, payload);
|
|
368
388
|
client.send(payload);
|
|
369
389
|
}
|
|
@@ -413,10 +433,11 @@ export class WorkbenchWsHub {
|
|
|
413
433
|
if (controller.signal.aborted) {
|
|
414
434
|
return;
|
|
415
435
|
}
|
|
416
|
-
const payload = buildGitPayload(snapshot);
|
|
436
|
+
const payload = buildGitPayload(snapshot, subscription.knownRevision);
|
|
417
437
|
if (payload === subscription.lastPayload && !options?.deliverIfUnchanged) {
|
|
418
438
|
return;
|
|
419
439
|
}
|
|
440
|
+
subscription.knownRevision = snapshot.revision;
|
|
420
441
|
subscription.lastPayload = payload;
|
|
421
442
|
client.send(payload);
|
|
422
443
|
logTerminalDebug("workbench.git_refresh.completed", {
|
|
@@ -446,22 +467,18 @@ export class WorkbenchWsHub {
|
|
|
446
467
|
});
|
|
447
468
|
return subscription.refreshTask;
|
|
448
469
|
}
|
|
449
|
-
ensureGitSubscription(client, workspaceId) {
|
|
470
|
+
ensureGitSubscription(client, workspaceId, knownRevision) {
|
|
450
471
|
const normalizedWorkspaceId = workspaceId.trim();
|
|
451
472
|
const current = this.clientGitSubscriptions.get(client);
|
|
473
|
+
const normalizedKnownRevision = normalizeKnownRevision(knownRevision) ?? null;
|
|
452
474
|
if (current && current.workspaceId === normalizedWorkspaceId) {
|
|
475
|
+
current.knownRevision = normalizedKnownRevision;
|
|
453
476
|
return current;
|
|
454
477
|
}
|
|
455
|
-
if (current) {
|
|
456
|
-
current.refreshController?.abort(new Error("git subscription replaced"));
|
|
457
|
-
if (current.refreshTimer) {
|
|
458
|
-
clearTimeout(current.refreshTimer);
|
|
459
|
-
}
|
|
460
|
-
this.fileWatcher.unsubscribeGit(current.workspaceId);
|
|
461
|
-
}
|
|
462
478
|
const next = {
|
|
463
479
|
workspaceId: normalizedWorkspaceId,
|
|
464
480
|
lastPayload: null,
|
|
481
|
+
knownRevision: normalizedKnownRevision,
|
|
465
482
|
lastRequestedAt: 0,
|
|
466
483
|
refreshTask: null,
|
|
467
484
|
refreshController: null,
|
|
@@ -469,8 +486,15 @@ export class WorkbenchWsHub {
|
|
|
469
486
|
queuedRefresh: false,
|
|
470
487
|
queuedForce: false
|
|
471
488
|
};
|
|
472
|
-
this.clientGitSubscriptions.set(client, next);
|
|
473
489
|
this.fileWatcher.subscribeGit(normalizedWorkspaceId);
|
|
490
|
+
this.clientGitSubscriptions.set(client, next);
|
|
491
|
+
if (current) {
|
|
492
|
+
current.refreshController?.abort(new Error("git subscription replaced"));
|
|
493
|
+
if (current.refreshTimer) {
|
|
494
|
+
clearTimeout(current.refreshTimer);
|
|
495
|
+
}
|
|
496
|
+
this.fileWatcher.unsubscribeGit(current.workspaceId);
|
|
497
|
+
}
|
|
474
498
|
return next;
|
|
475
499
|
}
|
|
476
500
|
scheduleGitRefresh(client, options) {
|
|
@@ -514,10 +538,12 @@ export class WorkbenchWsHub {
|
|
|
514
538
|
this.flushQueuedGitRefresh(client);
|
|
515
539
|
}, Math.max(0, delayMs));
|
|
516
540
|
}
|
|
517
|
-
ensureTerminalManagerSubscription(client, workspaceId) {
|
|
541
|
+
ensureTerminalManagerSubscription(client, workspaceId, knownRevision) {
|
|
518
542
|
const normalizedWorkspaceId = workspaceId.trim();
|
|
519
543
|
const current = this.clientTerminalManagerSubscriptions.get(client);
|
|
544
|
+
const normalizedKnownRevision = normalizeKnownRevision(knownRevision) ?? null;
|
|
520
545
|
if (current && current.workspaceId === normalizedWorkspaceId) {
|
|
546
|
+
current.knownRevision = normalizedKnownRevision;
|
|
521
547
|
return current;
|
|
522
548
|
}
|
|
523
549
|
if (current?.refreshTimer) {
|
|
@@ -526,6 +552,7 @@ export class WorkbenchWsHub {
|
|
|
526
552
|
const next = {
|
|
527
553
|
workspaceId: normalizedWorkspaceId,
|
|
528
554
|
lastPayload: null,
|
|
555
|
+
knownRevision: normalizedKnownRevision,
|
|
529
556
|
refreshTask: null,
|
|
530
557
|
refreshTimer: null,
|
|
531
558
|
queuedRefresh: false,
|
|
@@ -593,11 +620,12 @@ export class WorkbenchWsHub {
|
|
|
593
620
|
const startedAtMs = terminalDebugNowMs();
|
|
594
621
|
const snapshot = await this.workspacePanelSnapshotService.getTerminalManagerSnapshot(subscription.workspaceId, { force });
|
|
595
622
|
const payloadStartedAtMs = terminalDebugNowMs();
|
|
596
|
-
const payload = buildTerminalManagerPayload(snapshot);
|
|
623
|
+
const payload = buildTerminalManagerPayload(snapshot, subscription.knownRevision);
|
|
597
624
|
const payloadBuildMs = terminalDebugNowMs() - payloadStartedAtMs;
|
|
598
625
|
if (payload === subscription.lastPayload) {
|
|
599
626
|
return;
|
|
600
627
|
}
|
|
628
|
+
subscription.knownRevision = snapshot.revision;
|
|
601
629
|
subscription.lastPayload = payload;
|
|
602
630
|
const sendStartedAtMs = terminalDebugNowMs();
|
|
603
631
|
client.send(payload);
|
|
@@ -632,10 +660,11 @@ export class WorkbenchWsHub {
|
|
|
632
660
|
}
|
|
633
661
|
try {
|
|
634
662
|
const snapshot = await this.workspacePanelSnapshotService.getWorkspaceManagementSnapshot(subscription.workspaceId, { force });
|
|
635
|
-
const payload = buildWorkspaceManagementPayload(snapshot);
|
|
663
|
+
const payload = buildWorkspaceManagementPayload(snapshot, subscription.knownRevision);
|
|
636
664
|
if (payload === subscription.lastPayload) {
|
|
637
665
|
return;
|
|
638
666
|
}
|
|
667
|
+
subscription.knownRevision = snapshot.revision;
|
|
639
668
|
subscription.lastPayload = payload;
|
|
640
669
|
client.send(payload);
|
|
641
670
|
}
|
|
@@ -691,7 +720,8 @@ function parseWorkbenchMessage(payload) {
|
|
|
691
720
|
case "workbench.subscribe":
|
|
692
721
|
case "workbench.refresh":
|
|
693
722
|
return {
|
|
694
|
-
type: candidate.type
|
|
723
|
+
type: candidate.type,
|
|
724
|
+
knownRevision: normalizeKnownRevision(candidate.knownRevision)
|
|
695
725
|
};
|
|
696
726
|
case "fileTree.subscribe":
|
|
697
727
|
case "fileTree.refresh":
|
|
@@ -701,7 +731,8 @@ function parseWorkbenchMessage(payload) {
|
|
|
701
731
|
workspaceId: candidate.workspaceId,
|
|
702
732
|
paths: Array.isArray(candidate.paths)
|
|
703
733
|
? candidate.paths.filter((value) => typeof value === "string")
|
|
704
|
-
: undefined
|
|
734
|
+
: undefined,
|
|
735
|
+
knownRevisions: normalizeKnownRevisionRecord(candidate.knownRevisions)
|
|
705
736
|
}
|
|
706
737
|
: null;
|
|
707
738
|
case "git.subscribe":
|
|
@@ -709,7 +740,8 @@ function parseWorkbenchMessage(payload) {
|
|
|
709
740
|
return typeof candidate.workspaceId === "string"
|
|
710
741
|
? {
|
|
711
742
|
type: candidate.type,
|
|
712
|
-
workspaceId: candidate.workspaceId
|
|
743
|
+
workspaceId: candidate.workspaceId,
|
|
744
|
+
knownRevision: normalizeKnownRevision(candidate.knownRevision)
|
|
713
745
|
}
|
|
714
746
|
: null;
|
|
715
747
|
case "terminalManager.subscribe":
|
|
@@ -719,13 +751,29 @@ function parseWorkbenchMessage(payload) {
|
|
|
719
751
|
return typeof candidate.workspaceId === "string"
|
|
720
752
|
? {
|
|
721
753
|
type: candidate.type,
|
|
722
|
-
workspaceId: candidate.workspaceId
|
|
754
|
+
workspaceId: candidate.workspaceId,
|
|
755
|
+
knownRevision: normalizeKnownRevision(candidate.knownRevision)
|
|
723
756
|
}
|
|
724
757
|
: null;
|
|
725
758
|
default:
|
|
726
759
|
return null;
|
|
727
760
|
}
|
|
728
761
|
}
|
|
762
|
+
function extractWorkspaceIdFromWorkbenchMessage(message) {
|
|
763
|
+
switch (message.type) {
|
|
764
|
+
case "fileTree.subscribe":
|
|
765
|
+
case "fileTree.refresh":
|
|
766
|
+
case "git.subscribe":
|
|
767
|
+
case "git.refresh":
|
|
768
|
+
case "terminalManager.subscribe":
|
|
769
|
+
case "terminalManager.refresh":
|
|
770
|
+
case "workspaceManagement.subscribe":
|
|
771
|
+
case "workspaceManagement.refresh":
|
|
772
|
+
return message.workspaceId.trim();
|
|
773
|
+
default:
|
|
774
|
+
return undefined;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
729
777
|
function normalizePanelPaths(paths) {
|
|
730
778
|
const uniquePaths = new Set();
|
|
731
779
|
for (const value of paths ?? [""]) {
|
|
@@ -740,34 +788,112 @@ function areStringArraysEqual(left, right) {
|
|
|
740
788
|
}
|
|
741
789
|
return left.every((value, index) => value === right[index]);
|
|
742
790
|
}
|
|
743
|
-
function buildWorkbenchPayload(snapshot) {
|
|
791
|
+
function buildWorkbenchPayload(snapshot, knownRevision) {
|
|
792
|
+
if (knownRevision && knownRevision === snapshot.revision) {
|
|
793
|
+
return JSON.stringify({
|
|
794
|
+
type: "workbench.snapshot",
|
|
795
|
+
revision: snapshot.revision,
|
|
796
|
+
unchanged: true,
|
|
797
|
+
snapshot: null
|
|
798
|
+
});
|
|
799
|
+
}
|
|
744
800
|
return JSON.stringify({
|
|
745
801
|
type: "workbench.snapshot",
|
|
802
|
+
revision: snapshot.revision,
|
|
803
|
+
unchanged: false,
|
|
746
804
|
snapshot
|
|
747
805
|
});
|
|
748
806
|
}
|
|
749
|
-
function buildFileTreePayload(snapshot) {
|
|
807
|
+
function buildFileTreePayload(snapshot, knownRevision) {
|
|
808
|
+
if (knownRevision && knownRevision === snapshot.revision) {
|
|
809
|
+
return JSON.stringify({
|
|
810
|
+
type: "fileTree.snapshot",
|
|
811
|
+
revision: snapshot.revision,
|
|
812
|
+
unchanged: true,
|
|
813
|
+
snapshot: null
|
|
814
|
+
});
|
|
815
|
+
}
|
|
750
816
|
return JSON.stringify({
|
|
751
817
|
type: "fileTree.snapshot",
|
|
818
|
+
revision: snapshot.revision,
|
|
819
|
+
unchanged: false,
|
|
752
820
|
snapshot
|
|
753
821
|
});
|
|
754
822
|
}
|
|
755
|
-
function buildGitPayload(snapshot) {
|
|
823
|
+
function buildGitPayload(snapshot, knownRevision) {
|
|
824
|
+
if (knownRevision && knownRevision === snapshot.revision) {
|
|
825
|
+
return JSON.stringify({
|
|
826
|
+
type: "git.snapshot",
|
|
827
|
+
revision: snapshot.revision,
|
|
828
|
+
unchanged: true,
|
|
829
|
+
snapshot: null
|
|
830
|
+
});
|
|
831
|
+
}
|
|
756
832
|
return JSON.stringify({
|
|
757
833
|
type: "git.snapshot",
|
|
834
|
+
revision: snapshot.revision,
|
|
835
|
+
unchanged: false,
|
|
758
836
|
snapshot
|
|
759
837
|
});
|
|
760
838
|
}
|
|
761
|
-
function buildTerminalManagerPayload(snapshot) {
|
|
839
|
+
function buildTerminalManagerPayload(snapshot, knownRevision) {
|
|
840
|
+
if (knownRevision && knownRevision === snapshot.revision) {
|
|
841
|
+
return JSON.stringify({
|
|
842
|
+
type: "terminalManager.snapshot",
|
|
843
|
+
revision: snapshot.revision,
|
|
844
|
+
unchanged: true,
|
|
845
|
+
snapshot: null
|
|
846
|
+
});
|
|
847
|
+
}
|
|
762
848
|
return JSON.stringify({
|
|
763
849
|
type: "terminalManager.snapshot",
|
|
850
|
+
revision: snapshot.revision,
|
|
851
|
+
unchanged: false,
|
|
764
852
|
snapshot
|
|
765
853
|
});
|
|
766
854
|
}
|
|
767
|
-
function buildWorkspaceManagementPayload(snapshot) {
|
|
855
|
+
function buildWorkspaceManagementPayload(snapshot, knownRevision) {
|
|
856
|
+
if (knownRevision && knownRevision === snapshot.revision) {
|
|
857
|
+
return JSON.stringify({
|
|
858
|
+
type: "workspaceManagement.snapshot",
|
|
859
|
+
revision: snapshot.revision,
|
|
860
|
+
unchanged: true,
|
|
861
|
+
snapshot: null
|
|
862
|
+
});
|
|
863
|
+
}
|
|
768
864
|
return JSON.stringify({
|
|
769
865
|
type: "workspaceManagement.snapshot",
|
|
866
|
+
revision: snapshot.revision,
|
|
867
|
+
unchanged: false,
|
|
770
868
|
snapshot
|
|
771
869
|
});
|
|
772
870
|
}
|
|
871
|
+
function normalizeKnownRevision(value) {
|
|
872
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
873
|
+
}
|
|
874
|
+
function normalizeKnownRevisionRecord(value) {
|
|
875
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
876
|
+
return undefined;
|
|
877
|
+
}
|
|
878
|
+
const normalizedEntries = Object.entries(value)
|
|
879
|
+
.map(([key, candidate]) => [key.trim(), normalizeKnownRevision(candidate)])
|
|
880
|
+
.filter((entry) => Boolean(entry[1]));
|
|
881
|
+
if (normalizedEntries.length === 0) {
|
|
882
|
+
return undefined;
|
|
883
|
+
}
|
|
884
|
+
return Object.fromEntries(normalizedEntries);
|
|
885
|
+
}
|
|
886
|
+
function buildKnownRevisionByPathMap(paths, knownRevisions) {
|
|
887
|
+
const map = new Map();
|
|
888
|
+
if (!knownRevisions) {
|
|
889
|
+
return map;
|
|
890
|
+
}
|
|
891
|
+
for (const path of paths) {
|
|
892
|
+
const knownRevision = knownRevisions[path];
|
|
893
|
+
if (knownRevision) {
|
|
894
|
+
map.set(path, knownRevision);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
return map;
|
|
898
|
+
}
|
|
773
899
|
//# sourceMappingURL=workbench-ws-hub.js.map
|