@cloudcli-ai/cloudcli 1.37.2 → 1.37.4
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 +269 -0
- package/dist/assets/{abnfDiagram-N423BO3Z-C4UAoHJb.js → abnfDiagram-N423BO3Z-Dmkwx38H.js} +1 -1
- package/dist/assets/{arc-B8jF-ja9.js → arc-DLe9AYuO.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-C_Wur_CU.js → architectureDiagram-T3A2C74G-CBbbbNUW.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-Cq4P1i8t.js → blockDiagram-VBNYF7ZC-CaMEaWu4.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-C1wG4eUj.js → c4Diagram-5PPSVZJV-DhjMgNnR.js} +1 -1
- package/dist/assets/channel-CWrmwsir.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-B8fnBG6E.js → chunk-2GRJ4B5K-yjl3-F-i.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-WdfPooPJ.js → chunk-2Q5K7J3B-DsAYaWEP.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-DhZJuG2E.js → chunk-5RXB4S5H-Bt5qmqOX.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-B0rjslal.js → chunk-5VM5RSS4-yWrWVvUt.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-CG2Oj4jL.js → chunk-6Q2QTUOP-Dt66K5xb.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-rrl2lRxY.js → chunk-GF5L2VYU-DA0vzaj4.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CjVbrVMA.js → chunk-JWPE2WC7-CUkbx96V.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-CRzKgU8S.js → chunk-KBJHAD2P-DWKxx1WH.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DBz4GTZF.js → chunk-RYQCIY6F-BqluplN0.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-wHxalsXk.js → chunk-XXDRQBXY-DelKg3Xf.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-COAGCC6w.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-COAGCC6w.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-s1hygY8e.js → cose-bilkent-JH36ORCC-DHV93-Em.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-C4LGV15i.js → cynefin-VYW2F7L2-B9HZgoGX.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-C5uhu7B3.js → cynefinDiagram-MW4NZA55-hFjjEQg8.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-B-OBTewm.js → dagre-VZM6K2ZE-CpeVOC7V.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-BjGKQxih.js → diagram-7IWD3JNH-D0H1UoRA.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-BMKz1X2L.js → diagram-B4RE2ZJO-6Y7BQUup.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-DNh-GhKC.js → diagram-LBJQPF4R-C0nNOwht.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-BaTG9jPT.js → diagram-Q27KOJAE-En6QlOVX.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-BUwo2OvJ.js → diagram-UB23O5K3-CmPiNeGD.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-DAZgfzX2.js → ebnfDiagram-BXEA7PRR-Bygzp1Qt.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-1w1CcGEb.js → erDiagram-JOGREHBK-CwScRfzl.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-D4EII8Jj.js → flowDiagram-UKHOOZJN-bKX-0xP6.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-ChvJZAgB.js → ganttDiagram-PKOTCBZU-DtZPKXGd.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DtOn41S8.js → gitGraphDiagram-DS77QQ5N-CUOtdL1o.js} +1 -1
- package/dist/assets/index-CdjIFxM2.js +5004 -0
- package/dist/assets/index-DgafhGTF.css +32 -0
- package/dist/assets/{infoDiagram-6WML65LV-DN_PVEJZ.js → infoDiagram-6WML65LV-ciRQTS0h.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-DbkF1kXb.js → ishikawaDiagram-WSZJBQD7-CgjhQZ84.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-pJwmhddE.js → journeyDiagram-NVQOT4AX-BsbQSeIW.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-PPAPgNp5.js → kanban-definition-27J2QSJJ-CrwzY9Jw.js} +1 -1
- package/dist/assets/{linear-iPR-J9f7.js → linear-BUaCDr6l.js} +1 -1
- package/dist/assets/{mermaid.core-BEUL86Z6.js → mermaid.core-ClgdUU0j.js} +5 -5
- package/dist/assets/{mindmap-definition-FAOFIHXS-BvZoBib7.js → mindmap-definition-FAOFIHXS-BictljY1.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-DhYreaUd.js → pegDiagram-VL7TDLO6-BXdByy_U.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-CrOHlyD0.js → pieDiagram-7S7Q4E2Y-uZsMfkRX.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-D4g5yH3t.js → quadrantDiagram-CIZ2JOQS-7lCv4QIj.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-Dj39lHlf.js → railroadDiagram-AXF67PYL-07dxIWbi.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-1AS4Zgm_.js → requirementDiagram-LRYGKXZP-Cb31Yv1_.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-CKlMn19P.js → sankeyDiagram-W5VNT64P-X0YPSyF9.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-B_j3qyvo.js → sequenceDiagram-SI44F4Z6-BdBxSIlP.js} +1 -1
- package/dist/assets/server.browser-CtX3Hdl5.js +27 -0
- package/dist/assets/{sizeCapture-X5ZJPWSS-Bp2Op16v.js → sizeCapture-X5ZJPWSS-DQM5xAyD.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-C0cN6DoY.js → stateDiagram-OKZ733FA-DJ3xkLUF.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-vAaE4zNo.js +1 -0
- package/dist/assets/{swimlanes-SLNWSIFB-BEvXOV9b.js → swimlanes-SLNWSIFB-rjfYdW0w.js} +2 -2
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-TV2IF4Nq.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-zdJQinvZ.js → timeline-definition-Z64GVDOM-DZMra5do.js} +1 -1
- package/dist/assets/{vendor-codemirror-OwyKSvPE.js → vendor-codemirror-CYrSt7-U.js} +18 -18
- package/dist/assets/{vennDiagram-T6HMQDX7-DuF1uZMY.js → vennDiagram-T6HMQDX7-BevD8uu0.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-B9AlLQup.js → wardleyDiagram-T6FBY63Y-DsIyXB7z.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-DTJX48Qg.js → xychartDiagram-ELKLHX3M-G3PlF3ko.js} +1 -1
- package/dist/index.html +3 -3
- package/dist-server/server/index.js +11 -4
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/agent/agent.module.js +9 -2
- package/dist-server/server/modules/agent/agent.module.js.map +1 -1
- package/dist-server/server/modules/agent/agent.routes.js +177 -130
- package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
- package/dist-server/server/modules/agent/tests/agent-run-registration.test.js +306 -0
- package/dist-server/server/modules/agent/tests/agent-run-registration.test.js.map +1 -0
- package/dist-server/server/modules/agent/tests/agent.routes.test.js +48 -2
- package/dist-server/server/modules/agent/tests/agent.routes.test.js.map +1 -1
- package/dist-server/server/modules/browser-use/browser-use.routes.js +39 -33
- package/dist-server/server/modules/browser-use/browser-use.routes.js.map +1 -1
- package/dist-server/server/modules/database/connection.js +1 -1
- package/dist-server/server/modules/database/connection.js.map +1 -1
- package/dist-server/server/modules/database/index.js +5 -0
- package/dist-server/server/modules/database/index.js.map +1 -1
- package/dist-server/server/modules/database/migrations.js +45 -1
- package/dist-server/server/modules/database/migrations.js.map +1 -1
- package/dist-server/server/modules/database/repositories/provider-models.js +60 -6
- package/dist-server/server/modules/database/repositories/provider-models.js.map +1 -1
- package/dist-server/server/modules/database/repositories/scheduled-messages.db.js +71 -0
- package/dist-server/server/modules/database/repositories/scheduled-messages.db.js.map +1 -0
- package/dist-server/server/modules/database/repositories/session-drafts.db.js +105 -0
- package/dist-server/server/modules/database/repositories/session-drafts.db.js.map +1 -0
- package/dist-server/server/modules/database/repositories/sessions.db.js +144 -5
- package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
- package/dist-server/server/modules/database/repositories/user-preferences.db.js +65 -0
- package/dist-server/server/modules/database/repositories/user-preferences.db.js.map +1 -0
- package/dist-server/server/modules/database/schema.js +99 -0
- package/dist-server/server/modules/database/schema.js.map +1 -1
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +99 -0
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +39 -0
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js +105 -0
- package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js.map +1 -0
- package/dist-server/server/modules/file-tree/file-tree.module.js +2 -1
- package/dist-server/server/modules/file-tree/file-tree.module.js.map +1 -1
- package/dist-server/server/modules/file-tree/file-tree.service.js +44 -7
- package/dist-server/server/modules/file-tree/file-tree.service.js.map +1 -1
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js +126 -1
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js.map +1 -1
- package/dist-server/server/modules/git/git-branch-diff.service.js +142 -0
- package/dist-server/server/modules/git/git-branch-diff.service.js.map +1 -0
- package/dist-server/server/modules/git/git-branch.service.js.map +1 -1
- package/dist-server/server/modules/git/git.routes.js +92 -5
- package/dist-server/server/modules/git/git.routes.js.map +1 -1
- package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js +160 -0
- package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js.map +1 -0
- package/dist-server/server/modules/projects/project-clone.routes.js +108 -0
- package/dist-server/server/modules/projects/project-clone.routes.js.map +1 -0
- package/dist-server/server/modules/projects/projects.routes.js +13 -66
- package/dist-server/server/modules/projects/projects.routes.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-clone-request.service.js +36 -0
- package/dist-server/server/modules/projects/services/project-clone-request.service.js.map +1 -0
- package/dist-server/server/modules/projects/services/project-clone.service.js +86 -32
- package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-delete.service.js +12 -1
- package/dist-server/server/modules/projects/services/project-delete.service.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-star.service.js +2 -2
- package/dist-server/server/modules/projects/services/project-star.service.js.map +1 -1
- package/dist-server/server/modules/projects/tests/project-clone.routes.test.js +191 -0
- package/dist-server/server/modules/projects/tests/project-clone.routes.test.js.map +1 -0
- package/dist-server/server/modules/projects/tests/project-clone.service.test.js +275 -0
- package/dist-server/server/modules/projects/tests/project-clone.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/index.js +3 -0
- package/dist-server/server/modules/providers/index.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +62 -9
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js +46 -0
- package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +31 -12
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js +472 -53
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +38 -11
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +1007 -60
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js +4 -1
- package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
- package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +204 -0
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js +32 -0
- package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +47 -0
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +71 -53
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +8 -0
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +1621 -431
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
- package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js +9 -2
- package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js +16 -8
- package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +274 -9
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +19 -2
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +134 -2
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js +100 -0
- package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js +97 -0
- package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js +23 -1
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +59 -5
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-runtime.service.js +8 -0
- package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js +139 -35
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js +2 -4
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-history-cache.service.js +91 -0
- package/dist-server/server/modules/providers/services/session-history-cache.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js +105 -32
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js +3 -60
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions.service.js +252 -12
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-auth.test.js +183 -0
- package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-background-work.test.js +172 -0
- package/dist-server/server/modules/providers/tests/claude-background-work.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-compaction.test.js +84 -0
- package/dist-server/server/modules/providers/tests/claude-compaction.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-message-model.test.js +123 -0
- package/dist-server/server/modules/providers/tests/claude-message-model.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-models.test.js +39 -0
- package/dist-server/server/modules/providers/tests/claude-models.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js +265 -0
- package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js +1815 -33
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js +228 -0
- package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js +16 -0
- package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-token-budget.test.js +85 -0
- package/dist-server/server/modules/providers/tests/claude-token-budget.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-message-editing.test.js +338 -0
- package/dist-server/server/modules/providers/tests/codex-message-editing.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-models.test.js +25 -0
- package/dist-server/server/modules/providers/tests/codex-models.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-runtime.test.js +83 -0
- package/dist-server/server/modules/providers/tests/codex-runtime.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-session-fork.test.js +54 -0
- package/dist-server/server/modules/providers/tests/codex-session-fork.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js +354 -15
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/cursor-auth.test.js +167 -0
- package/dist-server/server/modules/providers/tests/cursor-auth.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/opencode-models.test.js +196 -4
- package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +19 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js +30 -0
- package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +79 -1
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +164 -1
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js +190 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/session-fork.test.js +113 -0
- package/dist-server/server/modules/providers/tests/session-fork.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js +139 -0
- package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js +90 -0
- package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js +122 -0
- package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/sessions.service.test.js +219 -1
- package/dist-server/server/modules/providers/tests/sessions.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/skills.test.js +15 -3
- package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
- package/dist-server/server/modules/scheduled-messages/index.js +5 -0
- package/dist-server/server/modules/scheduled-messages/index.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js +47 -0
- package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js +175 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js +95 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js +290 -0
- package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js.map +1 -0
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js +23 -23
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -1
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js +48 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js.map +1 -1
- package/dist-server/server/modules/user/tests/user.service.test.js +70 -0
- package/dist-server/server/modules/user/tests/user.service.test.js.map +1 -1
- package/dist-server/server/modules/user/user.module.js +10 -1
- package/dist-server/server/modules/user/user.module.js.map +1 -1
- package/dist-server/server/modules/user/user.routes.js +44 -0
- package/dist-server/server/modules/user/user.routes.js.map +1 -1
- package/dist-server/server/modules/user/user.service.js +75 -0
- package/dist-server/server/modules/user/user.service.js.map +1 -1
- package/dist-server/server/modules/voice/tests/voice.service.test.js +3 -2
- package/dist-server/server/modules/voice/tests/voice.service.test.js.map +1 -1
- package/dist-server/server/modules/websocket/index.js +7 -0
- package/dist-server/server/modules/websocket/index.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-run-registry.service.js +37 -49
- package/dist-server/server/modules/websocket/services/chat-run-registry.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-session-writer.service.js +35 -5
- package/dist-server/server/modules/websocket/services/chat-session-writer.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +204 -10
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js +94 -0
- package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js.map +1 -0
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js +236 -20
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js +137 -0
- package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js +263 -0
- package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js +29 -3
- package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +96 -0
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js +106 -0
- package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js +500 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js.map +1 -1
- package/dist-server/server/shared/claude-cli-path.js +22 -5
- package/dist-server/server/shared/claude-cli-path.js.map +1 -1
- package/dist-server/server/shared/index.js +3 -0
- package/dist-server/server/shared/index.js.map +1 -0
- package/dist-server/server/shared/message-unification.js +376 -0
- package/dist-server/server/shared/message-unification.js.map +1 -0
- package/dist-server/server/shared/tests/claude-cli-path.test.js +45 -1
- package/dist-server/server/shared/tests/claude-cli-path.test.js.map +1 -1
- package/dist-server/server/shared/tests/message-unification.test.js +174 -0
- package/dist-server/server/shared/tests/message-unification.test.js.map +1 -0
- package/dist-server/server/shared/tests/read-only-roots.test.js +124 -0
- package/dist-server/server/shared/tests/read-only-roots.test.js.map +1 -0
- package/dist-server/server/shared/tests/strip-ansi-sequences.test.js +31 -0
- package/dist-server/server/shared/tests/strip-ansi-sequences.test.js.map +1 -0
- package/dist-server/server/shared/utils.js +160 -0
- package/dist-server/server/shared/utils.js.map +1 -1
- package/electron/desktopWindow.js +6 -0
- package/electron/viewHost.js +25 -2
- package/package.json +20 -17
- package/server/index.ts +16 -5
- package/server/modules/agent/agent.module.ts +11 -1
- package/server/modules/agent/agent.routes.ts +200 -142
- package/server/modules/agent/tests/agent-run-registration.test.ts +348 -0
- package/server/modules/agent/tests/agent.routes.test.ts +51 -2
- package/server/modules/browser-use/browser-use.routes.ts +96 -33
- package/server/modules/database/connection.ts +2 -1
- package/server/modules/database/index.ts +10 -0
- package/server/modules/database/migrations.ts +51 -0
- package/server/modules/database/repositories/provider-models.ts +79 -6
- package/server/modules/database/repositories/scheduled-messages.db.ts +127 -0
- package/server/modules/database/repositories/session-drafts.db.ts +171 -0
- package/server/modules/database/repositories/sessions.db.ts +204 -3
- package/server/modules/database/repositories/user-preferences.db.ts +80 -0
- package/server/modules/database/schema.ts +103 -0
- package/server/modules/database/tests/provider-models.db.integration.test.ts +113 -0
- package/server/modules/database/tests/sessions.db.integration.test.ts +52 -0
- package/server/modules/database/tests/user-preferences.db.integration.test.ts +135 -0
- package/server/modules/file-tree/file-tree.module.ts +2 -1
- package/server/modules/file-tree/file-tree.service.ts +49 -7
- package/server/modules/file-tree/tests/file-tree.service.test.ts +163 -1
- package/server/modules/git/git-branch-diff.service.ts +204 -0
- package/server/modules/git/git-branch.service.ts +2 -12
- package/server/modules/git/git.routes.ts +100 -6
- package/server/modules/git/tests/git-branch-diff.service.test.ts +210 -0
- package/server/modules/projects/project-clone.routes.ts +142 -0
- package/server/modules/projects/projects.routes.ts +16 -81
- package/server/modules/projects/services/project-clone-request.service.ts +56 -0
- package/server/modules/projects/services/project-clone.service.ts +102 -34
- package/server/modules/projects/services/project-delete.service.ts +13 -1
- package/server/modules/projects/services/project-star.service.ts +2 -2
- package/server/modules/projects/tests/project-clone.routes.test.ts +246 -0
- package/server/modules/projects/tests/project-clone.service.test.ts +376 -0
- package/server/modules/providers/index.ts +4 -0
- package/server/modules/providers/list/claude/claude-auth.provider.ts +81 -11
- package/server/modules/providers/list/claude/claude-fork.provider.ts +57 -0
- package/server/modules/providers/list/claude/claude-models.provider.ts +37 -17
- package/server/modules/providers/list/claude/claude-runtime.provider.js +510 -54
- package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +40 -14
- package/server/modules/providers/list/claude/claude-sessions.provider.ts +1195 -63
- package/server/modules/providers/list/claude/claude-skills.provider.ts +4 -1
- package/server/modules/providers/list/claude/claude.provider.ts +3 -0
- package/server/modules/providers/list/codex/codex-app-server.client.ts +243 -0
- package/server/modules/providers/list/codex/codex-fork.provider.ts +40 -0
- package/server/modules/providers/list/codex/codex-models.provider.ts +47 -0
- package/server/modules/providers/list/codex/{codex-runtime.provider.js → codex-runtime.provider.ts} +105 -70
- package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +9 -0
- package/server/modules/providers/list/codex/codex-sessions.provider.ts +1847 -455
- package/server/modules/providers/list/codex/codex.provider.ts +3 -0
- package/server/modules/providers/list/cursor/cursor-auth.provider.ts +10 -2
- package/server/modules/providers/list/cursor/cursor-runtime.provider.js +17 -8
- package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +0 -1
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +297 -9
- package/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
- package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +30 -2
- package/server/modules/providers/provider.routes.ts +162 -2
- package/server/modules/providers/services/claude-cli-liveness.service.ts +121 -0
- package/server/modules/providers/services/claude-settings-permissions.service.ts +127 -0
- package/server/modules/providers/services/provider-capabilities.service.ts +40 -1
- package/server/modules/providers/services/provider-models.service.ts +71 -4
- package/server/modules/providers/services/provider-runtime.service.ts +11 -0
- package/server/modules/providers/services/provider-token-usage.service.ts +166 -39
- package/server/modules/providers/services/session-conversations-search.service.ts +2 -5
- package/server/modules/providers/services/session-history-cache.service.ts +150 -0
- package/server/modules/providers/services/session-synchronizer.service.ts +125 -38
- package/server/modules/providers/services/sessions-watcher.service.ts +3 -64
- package/server/modules/providers/services/sessions.service.ts +309 -17
- package/server/modules/providers/tests/claude-auth.test.ts +208 -0
- package/server/modules/providers/tests/claude-background-work.test.ts +213 -0
- package/server/modules/providers/tests/claude-compaction.test.ts +101 -0
- package/server/modules/providers/tests/claude-message-model.test.ts +160 -0
- package/server/modules/providers/tests/claude-models.test.ts +87 -0
- package/server/modules/providers/tests/claude-runtime-hold.test.ts +309 -0
- package/server/modules/providers/tests/claude-sessions.test.ts +2167 -37
- package/server/modules/providers/tests/claude-settings-permissions.test.ts +271 -0
- package/server/modules/providers/tests/claude-subagent-echo.test.ts +25 -0
- package/server/modules/providers/tests/claude-token-budget.test.ts +104 -0
- package/server/modules/providers/tests/codex-message-editing.test.ts +419 -0
- package/server/modules/providers/tests/codex-models.test.ts +37 -0
- package/server/modules/providers/tests/codex-runtime.test.ts +94 -0
- package/server/modules/providers/tests/codex-session-fork.test.ts +59 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +396 -15
- package/server/modules/providers/tests/cursor-auth.test.ts +187 -0
- package/server/modules/providers/tests/opencode-models.test.ts +266 -8
- package/server/modules/providers/tests/opencode-sessions.test.ts +40 -1
- package/server/modules/providers/tests/provider-capabilities.service.test.ts +37 -0
- package/server/modules/providers/tests/provider-models.service.test.ts +99 -1
- package/server/modules/providers/tests/provider-token-usage.service.test.ts +188 -1
- package/server/modules/providers/tests/provider.routes.test.ts +230 -1
- package/server/modules/providers/tests/session-fork.test.ts +173 -0
- package/server/modules/providers/tests/session-history-cache.service.test.ts +165 -0
- package/server/modules/providers/tests/session-orphan-prune.test.ts +107 -0
- package/server/modules/providers/tests/session-synchronizer-coalescing.test.ts +136 -0
- package/server/modules/providers/tests/sessions.service.test.ts +303 -1
- package/server/modules/providers/tests/skills.test.ts +21 -5
- package/server/modules/scheduled-messages/index.ts +8 -0
- package/server/modules/scheduled-messages/scheduled-messages.routes.ts +68 -0
- package/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.ts +216 -0
- package/server/modules/scheduled-messages/services/scheduled-messages.service.ts +121 -0
- package/server/modules/scheduled-messages/tests/scheduled-messages.test.ts +354 -0
- package/server/modules/taskmaster/taskmaster.routes.ts +23 -33
- package/server/modules/taskmaster/tests/taskmaster.routes.test.ts +57 -0
- package/server/modules/user/tests/user.service.test.ts +90 -0
- package/server/modules/user/user.module.ts +10 -1
- package/server/modules/user/user.routes.ts +44 -0
- package/server/modules/user/user.service.ts +105 -0
- package/server/modules/voice/tests/voice.service.test.ts +3 -2
- package/server/modules/websocket/README.md +4 -2
- package/server/modules/websocket/index.ts +8 -0
- package/server/modules/websocket/services/chat-run-registry.service.ts +45 -54
- package/server/modules/websocket/services/chat-session-writer.service.ts +36 -6
- package/server/modules/websocket/services/chat-websocket.service.ts +302 -16
- package/server/modules/websocket/services/session-upsert-broadcast.service.ts +108 -0
- package/server/modules/websocket/services/shell-websocket.service.ts +276 -22
- package/server/modules/websocket/tests/chat-background-subscribe.test.ts +167 -0
- package/server/modules/websocket/tests/chat-edit-send.test.ts +309 -0
- package/server/modules/websocket/tests/chat-run-registry.test.ts +34 -3
- package/server/modules/websocket/tests/chat-stop-task.test.ts +127 -0
- package/server/modules/websocket/tests/session-upsert-broadcast.test.ts +138 -0
- package/server/modules/websocket/tests/shell-websocket.service.test.ts +629 -0
- package/server/shared/claude-cli-path.ts +24 -6
- package/server/shared/index.ts +3 -0
- package/server/shared/interfaces.ts +91 -0
- package/server/shared/message-unification.ts +449 -0
- package/server/shared/tests/claude-cli-path.test.ts +58 -1
- package/server/shared/tests/message-unification.test.ts +218 -0
- package/server/shared/tests/read-only-roots.test.ts +139 -0
- package/server/shared/tests/strip-ansi-sequences.test.ts +42 -0
- package/server/shared/types.ts +382 -7
- package/server/shared/utils.ts +176 -0
- package/dist/assets/channel-_falYbU1.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-Dn-3CfpR.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-Dn-3CfpR.js +0 -1
- package/dist/assets/index-CzPLBvXT.css +0 -32
- package/dist/assets/index-DFkBBuSA.js +0 -1549
- package/dist/assets/stateDiagram-v2-UEYNNEHI-BvBxUUrZ.js +0 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CsE-x4YK.js +0 -8
|
@@ -3,15 +3,11 @@ import os from 'node:os';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import pty from 'node-pty';
|
|
5
5
|
import { WebSocket } from 'ws';
|
|
6
|
-
import { parseIncomingJsonObject } from '../../../shared/utils.js';
|
|
6
|
+
import { parseIncomingJsonObject, stripAnsiSequences } from '../../../shared/utils.js';
|
|
7
7
|
const ptySessionsMap = new Map();
|
|
8
8
|
const PTY_SESSION_TIMEOUT = 30 * 60 * 1000;
|
|
9
9
|
const SHELL_URL_PARSE_BUFFER_LIMIT = 32768;
|
|
10
|
-
const ANSI_ESCAPE_SEQUENCE_REGEX = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1B\\))/g;
|
|
11
10
|
const TRAILING_URL_PUNCTUATION_REGEX = /[)\]}>.,;:!?]+$/;
|
|
12
|
-
function stripAnsiSequences(value) {
|
|
13
|
-
return value.replace(ANSI_ESCAPE_SEQUENCE_REGEX, '');
|
|
14
|
-
}
|
|
15
11
|
function normalizeDetectedUrl(url) {
|
|
16
12
|
const cleanedUrl = url.trim().replace(TRAILING_URL_PUNCTUATION_REGEX, '');
|
|
17
13
|
if (!cleanedUrl) {
|
|
@@ -55,6 +51,16 @@ function extractUrlsFromText(value) {
|
|
|
55
51
|
}
|
|
56
52
|
return Array.from(new Set([...directMatches, ...wrappedMatches]));
|
|
57
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Tells the client which app theme the Claude CLI in its pty was launched for,
|
|
56
|
+
* so the Shell can suggest a restart once the app theme no longer matches it.
|
|
57
|
+
* Clients that predate this frame ignore unknown frame types.
|
|
58
|
+
*/
|
|
59
|
+
function sendClaudeColorScheme(ws, colorScheme) {
|
|
60
|
+
if (colorScheme && ws.readyState === WebSocket.OPEN) {
|
|
61
|
+
ws.send(JSON.stringify({ type: 'claude_theme', colorScheme }));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
58
64
|
function shouldAutoOpenUrlFromOutput(value) {
|
|
59
65
|
const normalizedOutput = value.toLowerCase();
|
|
60
66
|
return (normalizedOutput.includes("browser didn't open") ||
|
|
@@ -81,6 +87,13 @@ function readBoolean(value, fallback = false) {
|
|
|
81
87
|
function readNumber(value, fallback) {
|
|
82
88
|
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
83
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Reads the app theme the Shell tab is painted in. Older clients send none and
|
|
92
|
+
* anything unexpected is ignored, which keeps the launch exactly as before.
|
|
93
|
+
*/
|
|
94
|
+
function readColorScheme(value) {
|
|
95
|
+
return value === 'light' || value === 'dark' ? value : null;
|
|
96
|
+
}
|
|
84
97
|
/**
|
|
85
98
|
* Parses incoming websocket shell messages and keeps processing safe when
|
|
86
99
|
* malformed payloads are received.
|
|
@@ -117,7 +130,7 @@ function resolveResumeSessionId(message, dependencies) {
|
|
|
117
130
|
/**
|
|
118
131
|
* Resolves provider command line for plain shell and agent-backed shell modes.
|
|
119
132
|
*/
|
|
120
|
-
function buildShellCommand(message, dependencies) {
|
|
133
|
+
function buildShellCommand(message, dependencies, projectPath) {
|
|
121
134
|
const hasSession = readBoolean(message.hasSession);
|
|
122
135
|
const initialCommand = readString(message.initialCommand);
|
|
123
136
|
const provider = readString(message.provider, 'claude');
|
|
@@ -125,38 +138,232 @@ function buildShellCommand(message, dependencies) {
|
|
|
125
138
|
const isPlainShell = readBoolean(message.isPlainShell) ||
|
|
126
139
|
(!!initialCommand && !hasSession) ||
|
|
127
140
|
provider === 'plain-shell';
|
|
141
|
+
const otherProgram = (command) => ({ command, claudeFollowsAppTheme: false });
|
|
128
142
|
if (isPlainShell) {
|
|
129
|
-
return initialCommand;
|
|
143
|
+
return otherProgram(initialCommand);
|
|
130
144
|
}
|
|
131
145
|
if (provider === 'cursor') {
|
|
132
146
|
if (resumeSessionId) {
|
|
133
|
-
return `cursor-agent --resume="${resumeSessionId}"
|
|
147
|
+
return otherProgram(`cursor-agent --resume="${resumeSessionId}"`);
|
|
134
148
|
}
|
|
135
|
-
return 'cursor-agent';
|
|
149
|
+
return otherProgram('cursor-agent');
|
|
136
150
|
}
|
|
137
151
|
if (provider === 'codex') {
|
|
138
152
|
if (resumeSessionId) {
|
|
139
153
|
if (os.platform() === 'win32') {
|
|
140
|
-
return `codex resume "${resumeSessionId}"; if ($LASTEXITCODE -ne 0) { codex }
|
|
154
|
+
return otherProgram(`codex resume "${resumeSessionId}"; if ($LASTEXITCODE -ne 0) { codex }`);
|
|
141
155
|
}
|
|
142
|
-
return `codex resume "${resumeSessionId}" || codex
|
|
156
|
+
return otherProgram(`codex resume "${resumeSessionId}" || codex`);
|
|
143
157
|
}
|
|
144
|
-
return 'codex';
|
|
158
|
+
return otherProgram('codex');
|
|
145
159
|
}
|
|
146
160
|
if (provider === 'opencode') {
|
|
147
161
|
if (resumeSessionId) {
|
|
148
|
-
return `opencode --session "${resumeSessionId}"
|
|
162
|
+
return otherProgram(`opencode --session "${resumeSessionId}"`);
|
|
149
163
|
}
|
|
150
|
-
return initialCommand || 'opencode';
|
|
164
|
+
return otherProgram(initialCommand || 'opencode');
|
|
151
165
|
}
|
|
152
|
-
|
|
166
|
+
// Launching with the flag is what unlocks "bypass permissions" in the CLI's
|
|
167
|
+
// shift+tab permission-mode cycle; it cannot be enabled from inside a
|
|
168
|
+
// session started without it.
|
|
169
|
+
const bypassFlag = readBoolean(message.bypassPermissions)
|
|
170
|
+
? ' --dangerously-skip-permissions'
|
|
171
|
+
: '';
|
|
172
|
+
const theme = buildClaudeThemeLaunch(readColorScheme(message.colorScheme), projectPath);
|
|
173
|
+
const launchFlags = `${bypassFlag}${theme.flag}`;
|
|
153
174
|
if (resumeSessionId) {
|
|
154
|
-
|
|
155
|
-
|
|
175
|
+
const command = os.platform() === 'win32'
|
|
176
|
+
? `claude --resume "${resumeSessionId}"${launchFlags}; if ($LASTEXITCODE -ne 0) { claude${launchFlags} }`
|
|
177
|
+
: `claude --resume "${resumeSessionId}"${launchFlags} || claude${launchFlags}`;
|
|
178
|
+
return { command, claudeFollowsAppTheme: theme.followsAppTheme };
|
|
179
|
+
}
|
|
180
|
+
if (initialCommand) {
|
|
181
|
+
// A caller's own command (e.g. `claude /login`) is launched as given.
|
|
182
|
+
return otherProgram(initialCommand);
|
|
183
|
+
}
|
|
184
|
+
return { command: `claude${launchFlags}`, claudeFollowsAppTheme: theme.followsAppTheme };
|
|
185
|
+
}
|
|
186
|
+
// Claude Code's built-in theme ids (the `/theme` picker of CLI 2.1.280). A
|
|
187
|
+
// `custom:<slug>` theme is valid too; any other value is ignored by the CLI.
|
|
188
|
+
const CLAUDE_THEME_IDS = new Set([
|
|
189
|
+
'auto',
|
|
190
|
+
'dark',
|
|
191
|
+
'light',
|
|
192
|
+
'dark-daltonized',
|
|
193
|
+
'light-daltonized',
|
|
194
|
+
'dark-ansi',
|
|
195
|
+
'light-ansi',
|
|
196
|
+
]);
|
|
197
|
+
// Dark themes and their light counterparts. A light theme, `auto` (it asks the
|
|
198
|
+
// terminal for its background, which xterm answers from the live theme) or a
|
|
199
|
+
// custom theme is the user's own choice and is left alone.
|
|
200
|
+
const LIGHT_CLAUDE_THEME_BY_DARK_THEME = new Map([
|
|
201
|
+
['dark', 'light'],
|
|
202
|
+
['dark-daltonized', 'light-daltonized'],
|
|
203
|
+
['dark-ansi', 'light-ansi'],
|
|
204
|
+
]);
|
|
205
|
+
// The CLI refuses settings files over 2 MiB, so a bigger one holds no theme it
|
|
206
|
+
// would use. The legacy global config (`~/.claude.json`) is not a settings file
|
|
207
|
+
// and can grow to several MB; its cap is only there so a huge file is never
|
|
208
|
+
// pulled into the server's memory.
|
|
209
|
+
const MAX_CLAUDE_SETTINGS_FILE_BYTES = 2 * 1024 * 1024;
|
|
210
|
+
const MAX_CLAUDE_GLOBAL_CONFIG_FILE_BYTES = 64 * 1024 * 1024;
|
|
211
|
+
/**
|
|
212
|
+
* Reads a config file only when it is a regular, non-empty file of sane size,
|
|
213
|
+
* else returns null. The project can be a cloned repository whose
|
|
214
|
+
* `.claude/settings.local.json` is a symlink to a FIFO or to a device such as
|
|
215
|
+
* /dev/zero: reading one would stall the server's event loop or exhaust its
|
|
216
|
+
* memory. `statSync` follows the symlink without opening the target. Empty
|
|
217
|
+
* files are skipped too: they hold no theme, and kernel pseudo-files (procfs,
|
|
218
|
+
* tracefs) report a size of 0 even when a read would block.
|
|
219
|
+
*/
|
|
220
|
+
function readRegularConfigFile(filePath, maxBytes = MAX_CLAUDE_SETTINGS_FILE_BYTES) {
|
|
221
|
+
try {
|
|
222
|
+
const stats = fs.statSync(filePath);
|
|
223
|
+
if (!stats.isFile() || stats.size === 0 || stats.size > maxBytes) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
return fs.readFileSync(filePath, 'utf8');
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Reads the `theme` key of one Claude config file. A missing, unreadable,
|
|
234
|
+
* special (FIFO, device) or unparsable file, or a value the CLI would reject,
|
|
235
|
+
* counts as unset.
|
|
236
|
+
*/
|
|
237
|
+
function readClaudeThemeFile(filePath, maxBytes) {
|
|
238
|
+
const text = readRegularConfigFile(filePath, maxBytes);
|
|
239
|
+
if (text === null) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
const config = JSON.parse(text);
|
|
244
|
+
const theme = config && typeof config === 'object' ? config.theme : undefined;
|
|
245
|
+
if (typeof theme !== 'string') {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
return CLAUDE_THEME_IDS.has(theme) || theme.startsWith('custom:') ? theme : null;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Finds the theme Claude Code would start with in `projectPath`, read-only and
|
|
256
|
+
* in the CLI's own order: local, project and user settings, then the legacy
|
|
257
|
+
* global config key, then its "dark" default. Managed settings are not read:
|
|
258
|
+
* they outrank `--settings`, so no flag could change their theme anyway.
|
|
259
|
+
*/
|
|
260
|
+
function resolveClaudeTheme(projectPath) {
|
|
261
|
+
const configDirOverride = process.env.CLAUDE_CONFIG_DIR;
|
|
262
|
+
const configHome = configDirOverride || path.join(os.homedir(), '.claude');
|
|
263
|
+
const legacyGlobalConfigPath = path.join(configHome, '.config.json');
|
|
264
|
+
const configFiles = [
|
|
265
|
+
[path.join(projectPath, '.claude', 'settings.local.json'), MAX_CLAUDE_SETTINGS_FILE_BYTES],
|
|
266
|
+
[path.join(projectPath, '.claude', 'settings.json'), MAX_CLAUDE_SETTINGS_FILE_BYTES],
|
|
267
|
+
[path.join(configHome, 'settings.json'), MAX_CLAUDE_SETTINGS_FILE_BYTES],
|
|
268
|
+
[
|
|
269
|
+
fs.existsSync(legacyGlobalConfigPath)
|
|
270
|
+
? legacyGlobalConfigPath
|
|
271
|
+
: path.join(configDirOverride || os.homedir(), '.claude.json'),
|
|
272
|
+
MAX_CLAUDE_GLOBAL_CONFIG_FILE_BYTES,
|
|
273
|
+
],
|
|
274
|
+
];
|
|
275
|
+
for (const [filePath, maxBytes] of configFiles) {
|
|
276
|
+
const theme = readClaudeThemeFile(filePath, maxBytes);
|
|
277
|
+
if (theme) {
|
|
278
|
+
return theme;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return 'dark';
|
|
282
|
+
}
|
|
283
|
+
let hasLoggedThemeSettingsFileError = false;
|
|
284
|
+
/**
|
|
285
|
+
* Returns a settings file that holds only `{"theme": theme}`, writing it when
|
|
286
|
+
* it is missing or differs. It lives in the app's own data folder
|
|
287
|
+
* (`~/.cloudcli`, like the chat assets); the user's Claude config is never
|
|
288
|
+
* written. The write goes through a temp file and a rename, so a CLI starting
|
|
289
|
+
* at the same time never reads half a file. Returns null, and logs once, when
|
|
290
|
+
* the file cannot be written (a read-only home, say): the launch then simply
|
|
291
|
+
* goes ahead without a theme.
|
|
292
|
+
*/
|
|
293
|
+
function ensureClaudeThemeSettingsFile(theme) {
|
|
294
|
+
const contents = `${JSON.stringify({ theme })}\n`;
|
|
295
|
+
let tempPath = null;
|
|
296
|
+
try {
|
|
297
|
+
const filePath = path.join(os.homedir(), '.cloudcli', `claude-shell-theme-${theme}.json`);
|
|
298
|
+
// Anything but the expected regular file is replaced; the rename never
|
|
299
|
+
// opens what it replaces.
|
|
300
|
+
if (readRegularConfigFile(filePath) !== contents) {
|
|
301
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
302
|
+
tempPath = `${filePath}.${process.pid}.tmp`;
|
|
303
|
+
fs.writeFileSync(tempPath, contents);
|
|
304
|
+
fs.renameSync(tempPath, filePath);
|
|
305
|
+
}
|
|
306
|
+
return filePath;
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
if (tempPath) {
|
|
310
|
+
// Asynchronous and unchecked: cleaning up must not throw into the launch.
|
|
311
|
+
fs.rm(tempPath, { force: true }, () => undefined);
|
|
156
312
|
}
|
|
157
|
-
|
|
313
|
+
if (!hasLoggedThemeSettingsFileError) {
|
|
314
|
+
hasLoggedThemeSettingsFileError = true;
|
|
315
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
316
|
+
console.warn(`[WARN] Shell: cannot write the Claude theme settings file, launching without it: ${message}`);
|
|
317
|
+
}
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Quotes one argument for the shell that runs the launch command. bash takes
|
|
323
|
+
* everything between single quotes literally, so a `'` closes the quote, adds
|
|
324
|
+
* an escaped one and reopens it. PowerShell (win32) single quotes are literal
|
|
325
|
+
* too, backslashes included; a quote is doubled, and PowerShell also treats
|
|
326
|
+
* the typographic single quotes as quote characters.
|
|
327
|
+
*/
|
|
328
|
+
function quoteShellArgument(value) {
|
|
329
|
+
if (os.platform() === 'win32') {
|
|
330
|
+
return `'${value.replace(/['\u2018\u2019\u201A\u201B]/g, '$&$&')}'`;
|
|
331
|
+
}
|
|
332
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Claude Code paints its own colours in its own theme, dark by default, so in
|
|
336
|
+
* a light Shell tab its prompt rows became dark bands. Only a light tab gets a
|
|
337
|
+
* flag, and only when the user's theme is a dark one: it is swapped for the
|
|
338
|
+
* matching light variant. `--settings` applies it to this launch only. It is
|
|
339
|
+
* given a file path rather than inline JSON because PowerShell strips the
|
|
340
|
+
* JSON's double quotes when it passes an argument to a native program.
|
|
341
|
+
*
|
|
342
|
+
* The CLI follows the app theme when it gets that flag, when a dark tab runs a
|
|
343
|
+
* dark theme, and with `auto` (it asks the terminal, which xterm answers from
|
|
344
|
+
* the live theme). A light or custom theme the user chose, or a flag that
|
|
345
|
+
* could not be written, paints the same in either app theme, so restarting
|
|
346
|
+
* after a toggle would change nothing.
|
|
347
|
+
*/
|
|
348
|
+
function buildClaudeThemeLaunch(colorScheme, projectPath) {
|
|
349
|
+
if (!colorScheme) {
|
|
350
|
+
return { flag: '', followsAppTheme: false };
|
|
351
|
+
}
|
|
352
|
+
const userTheme = resolveClaudeTheme(projectPath);
|
|
353
|
+
if (userTheme === 'auto') {
|
|
354
|
+
return { flag: '', followsAppTheme: true };
|
|
355
|
+
}
|
|
356
|
+
const lightTheme = LIGHT_CLAUDE_THEME_BY_DARK_THEME.get(userTheme);
|
|
357
|
+
if (!lightTheme) {
|
|
358
|
+
return { flag: '', followsAppTheme: false };
|
|
359
|
+
}
|
|
360
|
+
if (colorScheme === 'dark') {
|
|
361
|
+
return { flag: '', followsAppTheme: true };
|
|
158
362
|
}
|
|
159
|
-
|
|
363
|
+
const settingsPath = ensureClaudeThemeSettingsFile(lightTheme);
|
|
364
|
+
return settingsPath
|
|
365
|
+
? { flag: ` --settings ${quoteShellArgument(settingsPath)}`, followsAppTheme: true }
|
|
366
|
+
: { flag: '', followsAppTheme: false };
|
|
160
367
|
}
|
|
161
368
|
function readEnvValue(env, key) {
|
|
162
369
|
const resolvedKey = Object.keys(env).find((envKey) => envKey.toLowerCase() === key.toLowerCase());
|
|
@@ -224,6 +431,7 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
224
431
|
const provider = readString(data.provider, 'claude');
|
|
225
432
|
const initialCommand = readString(data.initialCommand);
|
|
226
433
|
const forceRestart = readBoolean(data.forceRestart);
|
|
434
|
+
const colorScheme = readColorScheme(data.colorScheme);
|
|
227
435
|
const isPlainShell = readBoolean(data.isPlainShell) ||
|
|
228
436
|
(!!initialCommand && !hasSession) ||
|
|
229
437
|
provider === 'plain-shell';
|
|
@@ -267,6 +475,7 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
267
475
|
});
|
|
268
476
|
}
|
|
269
477
|
existingSession.ws = ws;
|
|
478
|
+
sendClaudeColorScheme(ws, existingSession.claudeColorScheme);
|
|
270
479
|
return;
|
|
271
480
|
}
|
|
272
481
|
const resolvedProjectPath = path.resolve(projectPath);
|
|
@@ -285,8 +494,9 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
285
494
|
ws.send(JSON.stringify({ type: 'error', message: 'Invalid session ID' }));
|
|
286
495
|
return;
|
|
287
496
|
}
|
|
288
|
-
const shellCommand = buildShellCommand(data, dependencies);
|
|
497
|
+
const { command: shellCommand, claudeFollowsAppTheme } = buildShellCommand(data, dependencies, resolvedProjectPath);
|
|
289
498
|
const resumeSessionId = resolveResumeSessionId(data, dependencies);
|
|
499
|
+
const claudeColorScheme = claudeFollowsAppTheme ? colorScheme : null;
|
|
290
500
|
const shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';
|
|
291
501
|
const shellArgs = os.platform() === 'win32' ? ['-Command', shellCommand] : ['-c', shellCommand];
|
|
292
502
|
const termCols = readNumber(data.cols, 80);
|
|
@@ -303,6 +513,10 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
303
513
|
TERM: 'xterm-256color',
|
|
304
514
|
COLORTERM: 'truecolor',
|
|
305
515
|
FORCE_COLOR: '3',
|
|
516
|
+
// rxvt's "foreground;background" palette indices (15 = white, 0 = black).
|
|
517
|
+
// Programs that cannot query the terminal (vim, Claude Code's "auto"
|
|
518
|
+
// theme before its OSC 11 reply arrives) read it to pick light or dark.
|
|
519
|
+
...(colorScheme ? { COLORFGBG: colorScheme === 'light' ? '0;15' : '15;0' } : {}),
|
|
306
520
|
},
|
|
307
521
|
});
|
|
308
522
|
ptySessionsMap.set(ptySessionKey, {
|
|
@@ -312,6 +526,7 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
312
526
|
timeoutId: null,
|
|
313
527
|
projectPath,
|
|
314
528
|
sessionId,
|
|
529
|
+
claudeColorScheme,
|
|
315
530
|
});
|
|
316
531
|
shellProcess.onData((chunk) => {
|
|
317
532
|
if (!ptySessionKey) {
|
|
@@ -401,6 +616,7 @@ export function handleShellConnection(ws, dependencies) {
|
|
|
401
616
|
type: 'output',
|
|
402
617
|
data: welcomeMsg,
|
|
403
618
|
}));
|
|
619
|
+
sendClaudeColorScheme(ws, claudeColorScheme);
|
|
404
620
|
return;
|
|
405
621
|
}
|
|
406
622
|
if (data.type === 'input') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-websocket.service.js","sourceRoot":"","sources":["../../../../../server/modules/websocket/services/shell-websocket.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shell-websocket.service.js","sourceRoot":"","sources":["../../../../../server/modules/websocket/services/shell-websocket.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
3
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import test, { mock } from 'node:test';
|
|
7
|
+
import { closeConnection, initializeDatabase, sessionsDb } from '../../../modules/database/index.js';
|
|
8
|
+
import { handleChatConnection } from '../../../modules/websocket/services/chat-websocket.service.js';
|
|
9
|
+
import { chatRunRegistry } from '../../../modules/websocket/services/chat-run-registry.service.js';
|
|
10
|
+
import { connectedClients } from '../../../modules/websocket/services/websocket-state.service.js';
|
|
11
|
+
/**
|
|
12
|
+
* A session's turn ends while its agents, workflow or backgrounded command are
|
|
13
|
+
* still going. The run registry marks the run completed at the turn's
|
|
14
|
+
* `complete`, but the runtime keeps producing events through that run's
|
|
15
|
+
* writer — task progress, and the turn the CLI pushes when the task reports.
|
|
16
|
+
* A tab opened during that work has to attach to the run to see them, and the
|
|
17
|
+
* run has to still be there to attach to.
|
|
18
|
+
*/
|
|
19
|
+
const SESSION_ID = 'held-session';
|
|
20
|
+
const FIVE_MINUTES = 5 * 60 * 1000;
|
|
21
|
+
function createFakeSocket() {
|
|
22
|
+
const socket = new EventEmitter();
|
|
23
|
+
socket.readyState = 1;
|
|
24
|
+
socket.frames = [];
|
|
25
|
+
socket.send = (data) => socket.frames.push(JSON.parse(data));
|
|
26
|
+
return socket;
|
|
27
|
+
}
|
|
28
|
+
async function withIsolatedDatabase(runTest) {
|
|
29
|
+
const previousDatabasePath = process.env.DATABASE_PATH;
|
|
30
|
+
const tempDirectory = await mkdtemp(path.join(os.tmpdir(), 'chat-background-subscribe-'));
|
|
31
|
+
closeConnection();
|
|
32
|
+
process.env.DATABASE_PATH = path.join(tempDirectory, 'auth.db');
|
|
33
|
+
await initializeDatabase();
|
|
34
|
+
try {
|
|
35
|
+
sessionsDb.createAppSession(SESSION_ID, 'claude', tempDirectory);
|
|
36
|
+
await runTest();
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
connectedClients.clear();
|
|
40
|
+
chatRunRegistry.clearAll();
|
|
41
|
+
chatRunRegistry.setRetentionGuard(() => false);
|
|
42
|
+
closeConnection();
|
|
43
|
+
if (previousDatabasePath === undefined) {
|
|
44
|
+
delete process.env.DATABASE_PATH;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
process.env.DATABASE_PATH = previousDatabasePath;
|
|
48
|
+
}
|
|
49
|
+
await rm(tempDirectory, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Starts a run for the session and ends its turn, leaving the run completed but registered. */
|
|
53
|
+
function startAndCompleteRun(connection) {
|
|
54
|
+
const run = chatRunRegistry.startRun({
|
|
55
|
+
appSessionId: SESSION_ID,
|
|
56
|
+
provider: 'claude',
|
|
57
|
+
providerSessionId: 'native-1',
|
|
58
|
+
connection: connection,
|
|
59
|
+
userId: 1,
|
|
60
|
+
});
|
|
61
|
+
assert.ok(run);
|
|
62
|
+
run.writer.send({ kind: 'complete', provider: 'claude', sessionId: 'native-1', exitCode: 0 });
|
|
63
|
+
assert.equal(chatRunRegistry.isProcessing(SESSION_ID), false);
|
|
64
|
+
return run;
|
|
65
|
+
}
|
|
66
|
+
const settle = () => new Promise((resolve) => { setTimeout(resolve, 30); });
|
|
67
|
+
test('a tab that subscribes during background work receives the run\'s later events', async () => {
|
|
68
|
+
await withIsolatedDatabase(async () => {
|
|
69
|
+
const run = startAndCompleteRun(createFakeSocket());
|
|
70
|
+
const newTab = createFakeSocket();
|
|
71
|
+
handleChatConnection(newTab, { user: { id: 1 } }, { runtime: { hasBackgroundWork: (sessionId) => sessionId === SESSION_ID, getPendingApprovalsForSession: () => [] } });
|
|
72
|
+
newTab.emit('message', JSON.stringify({ type: 'chat.subscribe', sessions: [{ sessionId: SESSION_ID, lastSeq: 0 }] }));
|
|
73
|
+
await settle();
|
|
74
|
+
// Not processing — the composer stays usable — but attached.
|
|
75
|
+
assert.equal(newTab.frames[0]?.kind, 'chat_subscribed');
|
|
76
|
+
assert.equal(newTab.frames[0]?.isProcessing, false);
|
|
77
|
+
run.writer.send({ kind: 'task_status', provider: 'claude', sessionId: 'native-1', event: 'notification', taskId: 't1', status: 'completed' });
|
|
78
|
+
assert.ok(newTab.frames.some((frame) => frame.kind === 'task_status'), 'the task event must reach the tab that subscribed after the turn ended');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
test('a tab that subscribes to an idle session is not attached to its old run', async () => {
|
|
82
|
+
await withIsolatedDatabase(async () => {
|
|
83
|
+
const run = startAndCompleteRun(createFakeSocket());
|
|
84
|
+
const newTab = createFakeSocket();
|
|
85
|
+
handleChatConnection(newTab, { user: { id: 1 } }, { runtime: { hasBackgroundWork: () => false, getPendingApprovalsForSession: () => [] } });
|
|
86
|
+
newTab.emit('message', JSON.stringify({ type: 'chat.subscribe', sessions: [{ sessionId: SESSION_ID, lastSeq: 0 }] }));
|
|
87
|
+
await settle();
|
|
88
|
+
run.writer.send({ kind: 'task_status', provider: 'claude', sessionId: 'native-1', event: 'notification', taskId: 't1', status: 'completed' });
|
|
89
|
+
assert.ok(!newTab.frames.some((frame) => frame.kind === 'task_status'));
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
test('a completed run stays registered while its session still has background work', async () => {
|
|
93
|
+
mock.timers.enable({ apis: ['setTimeout'] });
|
|
94
|
+
try {
|
|
95
|
+
await withIsolatedDatabase(async () => {
|
|
96
|
+
let working = true;
|
|
97
|
+
chatRunRegistry.setRetentionGuard((sessionId) => sessionId === SESSION_ID && working);
|
|
98
|
+
startAndCompleteRun(createFakeSocket());
|
|
99
|
+
mock.timers.tick(FIVE_MINUTES);
|
|
100
|
+
assert.ok(chatRunRegistry.getRun(SESSION_ID), 'the run must outlive the retention window while work is outstanding');
|
|
101
|
+
working = false;
|
|
102
|
+
mock.timers.tick(FIVE_MINUTES);
|
|
103
|
+
assert.equal(chatRunRegistry.getRun(SESSION_ID), undefined, 'once the work is gone the run is evicted as before');
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
mock.timers.reset();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
test('a retained run\'s eviction timer cannot evict the session\'s next run early', async () => {
|
|
111
|
+
// Run one completes with work outstanding and is re-armed at five minutes;
|
|
112
|
+
// run two takes the slot and completes with two minutes of retention to
|
|
113
|
+
// go. Run one's timer firing on the slot alone would evict run two.
|
|
114
|
+
mock.timers.enable({ apis: ['setTimeout'] });
|
|
115
|
+
try {
|
|
116
|
+
await withIsolatedDatabase(async () => {
|
|
117
|
+
let working = true;
|
|
118
|
+
chatRunRegistry.setRetentionGuard((sessionId) => sessionId === SESSION_ID && working);
|
|
119
|
+
const first = startAndCompleteRun(createFakeSocket());
|
|
120
|
+
mock.timers.tick(FIVE_MINUTES);
|
|
121
|
+
assert.equal(chatRunRegistry.getRun(SESSION_ID), first);
|
|
122
|
+
working = false;
|
|
123
|
+
mock.timers.tick(FIVE_MINUTES - 2 * 60 * 1000);
|
|
124
|
+
const second = startAndCompleteRun(createFakeSocket());
|
|
125
|
+
assert.equal(chatRunRegistry.getRun(SESSION_ID), second);
|
|
126
|
+
// Run one's re-armed timer fires now; run two's has two minutes left.
|
|
127
|
+
mock.timers.tick(2 * 60 * 1000);
|
|
128
|
+
assert.equal(chatRunRegistry.getRun(SESSION_ID), second, 'run two keeps its own retention window');
|
|
129
|
+
mock.timers.tick(FIVE_MINUTES);
|
|
130
|
+
assert.equal(chatRunRegistry.getRun(SESSION_ID), undefined);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
mock.timers.reset();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=chat-background-subscribe.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-background-subscribe.test.js","sourceRoot":"","sources":["../../../../../server/modules/websocket/tests/chat-background-subscribe.test.ts"],"names":[],"mappings":"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"}
|