@jingyi0605/codingns 0.6.1 → 0.7.0
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 +225 -0
- package/dist/public/assets/AdaptiveButlerPage-B8mg25ze.js +3 -0
- package/dist/public/assets/{App-Dsf3ooXU.js → App-C2lNmeKL.js} +6 -6
- package/dist/public/assets/{BootstrapPage-CE0m1qSR.js → BootstrapPage-CAVA-a8h.js} +1 -1
- package/dist/public/assets/ConversationPage-B6BGOX4C.js +6 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-Dxarr_Wf.js → DesktopDetachPreviewPage-B37DUL15.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-VytPwJ4c.js → DesktopWindowPage-CDA6l7lm.js} +1 -1
- package/dist/public/assets/{FileContextPanel-DwFzLsOp.js → FileContextPanel-CMGTtAB6.js} +1 -1
- package/dist/public/assets/{GitSidebar-CH6WqTrM.js → GitSidebar--DCqBiGL.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-DcxKM00P.js → MobileCreateSessionSheet-THIrIzJ3.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-C5rIKQT6.js → MobileTopHeaderFrame-D-X7pVnV.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-CfUnHgv_.js → MobileWorkspaceSwitcherHeader-Cczi7RYu.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-CgMvVZwa.js → RelayConnectEntryPage-D417tgWj.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-CFul__z1.js → ServerSettingsModal-BdTxbRbU.js} +1 -1
- package/dist/public/assets/SessionIndexPage-D5iefVcc.js +1 -0
- package/dist/public/assets/SettingsPage-iCFe_DHP.js +2 -0
- package/dist/public/assets/{TerminalManagerPanel-BbORd-ee.js → TerminalManagerPanel-CtldwWz8.js} +1 -1
- package/dist/public/assets/{TerminalPage-DWHv6mlu.js → TerminalPage-DAzQTmQC.js} +19 -19
- package/dist/public/assets/{TerminalRuntimeFallbackModal-B29YxbQe.js → TerminalRuntimeFallbackModal-DLOhAvaq.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-Dx9cv9hu.js → ToolFilesPage-D7thcDEv.js} +1 -1
- package/dist/public/assets/{ToolGitPage-D7H3vAia.js → ToolGitPage-uPRsxdcn.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-PqQWxsy-.js → ToolProcessesPage-B1uOk0Ef.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-CX05Pe_4.js → ToolsHomePage-rU3V8mmh.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-CchkAC75.js → WorkbenchLandingPage-BudM2C69.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-Dybarc1V.js +244 -0
- package/dist/public/assets/WorkbenchModal-DMQutm1x.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Cy4WBbzq.js +1 -0
- package/dist/public/assets/{WorkbenchShellRoute-RGZpA0_J.css → WorkbenchShellRoute-DhQo_0vu.css} +1 -1
- package/dist/public/assets/{WorkspaceDebugDetailPage-Deqy2_pO.js → WorkspaceDebugDetailPage-CHqo-uDf.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-Cvf-ZdlB.js → WorkspaceDetailPage-CGkAH1W-.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-Dsyvqyk1.js → WorkspaceHomePage-CfuPVITd.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-DROQJ9v3.js → client-runtime-manager-CKbtaemV.js} +1 -1
- package/dist/public/assets/file-tree-icon-Bc0KADEl.js +3 -0
- package/dist/public/assets/index-DNRyROOG.css +1 -0
- package/dist/public/assets/index-oGylLBIX.js +42 -0
- package/dist/public/assets/{login-direct-candidate-resolver-DotM530R.js → login-direct-candidate-resolver-DjJMbqB7.js} +1 -1
- package/dist/public/assets/model-switch-api-T55eW6D4.js +1 -0
- package/dist/public/assets/{preferences-service-BG6GKG29.js → preferences-service-BTKBl5xM.js} +1 -1
- package/dist/public/assets/realtime-client-ww7MnbTD.js +1 -0
- package/dist/public/assets/{relay-entry-pmr-c42O.js → relay-entry-sdeFnTbY.js} +1 -1
- package/dist/public/assets/styles-BjPytabP.css +1 -0
- package/dist/public/assets/{terminal-runtime-meta-8_uRZf7h.js → terminal-runtime-meta-Cvt1ID92.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-DWX7LXQu.js → useRegisteredDebugTemplates-O-ymgLd9.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.js +21 -1
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-base-url-resolver.d.ts +16 -0
- package/dist/server/config/opencode-base-url-resolver.js +154 -0
- package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
- package/dist/server/helpers/wechat-claw-runtime/main.d.ts +1 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js +38 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js +32 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.d.ts +16 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js +209 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.d.ts +18 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js +135 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js +394 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js +64 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.d.ts +167 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js +3 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js +160 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js +24 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/server.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js +36 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js.map +1 -0
- package/dist/server/middlewares/auth-guard.js +4 -1
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +20 -2
- package/dist/server/modules/butler/butler-control-session-service.js +121 -74
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-profile-service.js +16 -4
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.js +44 -15
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/channels/channel-bridge-service.d.ts +55 -0
- package/dist/server/modules/channels/channel-bridge-service.js +340 -0
- package/dist/server/modules/channels/channel-bridge-service.js.map +1 -0
- package/dist/server/modules/channels/channel-controller.d.ts +52 -0
- package/dist/server/modules/channels/channel-controller.js +54 -0
- package/dist/server/modules/channels/channel-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-delivery-service.d.ts +63 -0
- package/dist/server/modules/channels/channel-delivery-service.js +429 -0
- package/dist/server/modules/channels/channel-delivery-service.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-controller.d.ts +15 -0
- package/dist/server/modules/channels/channel-gateway-controller.js +16 -0
- package/dist/server/modules/channels/channel-gateway-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-service.d.ts +24 -0
- package/dist/server/modules/channels/channel-gateway-service.js +56 -0
- package/dist/server/modules/channels/channel-gateway-service.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-adapters.d.ts +46 -0
- package/dist/server/modules/channels/channel-platform-adapters.js +315 -0
- package/dist/server/modules/channels/channel-platform-adapters.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-catalog.d.ts +3 -0
- package/dist/server/modules/channels/channel-platform-catalog.js +42 -0
- package/dist/server/modules/channels/channel-platform-catalog.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-scheduler.d.ts +31 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js +93 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-service.d.ts +46 -0
- package/dist/server/modules/channels/channel-polling-service.js +176 -0
- package/dist/server/modules/channels/channel-polling-service.js.map +1 -0
- package/dist/server/modules/channels/channel-service.d.ts +108 -0
- package/dist/server/modules/channels/channel-service.js +397 -0
- package/dist/server/modules/channels/channel-service.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-client.d.ts +51 -0
- package/dist/server/modules/channels/wechat-claw-client.js +245 -0
- package/dist/server/modules/channels/wechat-claw-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.d.ts +4 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js +13 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.d.ts +14 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js +95 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.d.ts +16 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js +133 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.d.ts +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js +2 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js.map +1 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js +125 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
- package/dist/server/modules/opencli/opencli-controller.js +30 -0
- package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
- package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
- package/dist/server/modules/opencli/opencli-health-service.js +106 -0
- package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
- package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
- package/dist/server/modules/opencli/opencli-management-service.js +152 -0
- package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
- package/dist/server/modules/provider/provider-catalog-service.d.ts +45 -0
- package/dist/server/modules/provider/provider-catalog-service.js +204 -0
- package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
- package/dist/server/modules/provider/provider-controller.d.ts +16 -2
- package/dist/server/modules/provider/provider-controller.js +49 -6
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
- package/dist/server/modules/provider/provider-disabled.js +45 -0
- package/dist/server/modules/provider/provider-disabled.js.map +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +3 -3
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +12 -8
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/provider/provider-runtime-state-service.d.ts +24 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js +141 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js.map +1 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
- package/dist/server/modules/sessions/session-history-service.d.ts +9 -3
- package/dist/server/modules/sessions/session-history-service.js +198 -62
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +8 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +99 -88
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
- package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +18 -1
- package/dist/server/modules/sessions/session-provider-config-service.js +142 -17
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
- package/dist/server/modules/skills/skill-manager-service.js +26 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +2 -0
- package/dist/server/modules/tasks/task-types.js +2 -0
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/routes/channels.d.ts +3 -0
- package/dist/server/routes/channels.js +16 -0
- package/dist/server/routes/channels.js.map +1 -0
- package/dist/server/routes/opencli.d.ts +3 -0
- package/dist/server/routes/opencli.js +7 -0
- package/dist/server/routes/opencli.js.map +1 -0
- package/dist/server/routes/providers.js +5 -2
- package/dist/server/routes/providers.js.map +1 -1
- package/dist/server/routes/public.d.ts +2 -1
- package/dist/server/routes/public.js +3 -1
- package/dist/server/routes/public.js.map +1 -1
- package/dist/server/server/create-server.d.ts +30 -0
- package/dist/server/server/create-server.js +104 -12
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/http/error-handler.js +59 -3
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/storage/repositories/channel-account-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-account-repository.js +153 -0
- package/dist/server/storage/repositories/channel-account-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-delivery-repository.d.ts +13 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js +156 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js +144 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-thread-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-thread-repository.js +152 -0
- package/dist/server/storage/repositories/channel-thread-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-control-repository.js +51 -0
- package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js +50 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +53 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +180 -0
- package/dist/server/types/domain.d.ts +132 -0
- package/dist/server/ws/workbench-ws-hub.js +8 -2
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +28 -11
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +61 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +5 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +94 -21
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-Dw72U3hG.js +0 -3
- package/dist/public/assets/ConversationPage-8wOY7SX-.js +0 -4
- package/dist/public/assets/SessionIndexPage-B-tRhBXC.js +0 -1
- package/dist/public/assets/SettingsPage-C9LGxSQZ.js +0 -1
- package/dist/public/assets/WorkbenchLayout-pOZvEqp7.js +0 -3
- package/dist/public/assets/WorkbenchModal-ColqvV6a.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-C0_h4lP6.js +0 -1
- package/dist/public/assets/file-tree-icon-Bp3Ntt7u.js +0 -31
- package/dist/public/assets/index-B84Po2NA.css +0 -1
- package/dist/public/assets/index-C-0oeG_5.js +0 -42
- package/dist/public/assets/model-switch-api-Bh9nYslz.js +0 -1
- package/dist/public/assets/session-runtime-machine-YN84QBlr.js +0 -21
- package/dist/public/assets/styles-CsEMfdaS.css +0 -1
- /package/dist/public/assets/{styles-DRVvx_kv.js → styles-lhQGDlPF.js} +0 -0
|
@@ -6,7 +6,6 @@ import { createId } from "../../shared/utils/id.js";
|
|
|
6
6
|
import { logPerformance } from "../../shared/utils/perf-log.js";
|
|
7
7
|
import { isTerminalDebugEnabled, logTerminalDebug, terminalDebugNowMs } from "../../shared/utils/terminal-debug-log.js";
|
|
8
8
|
import { nowIso } from "../../shared/utils/time.js";
|
|
9
|
-
import { isCommandAvailable } from "../../shared/utils/command-availability.js";
|
|
10
9
|
import { inspectSessionActivity } from "./session-activity-inspector.js";
|
|
11
10
|
import { SessionActivityAuthorityService } from "./session-activity-authority-service.js";
|
|
12
11
|
import { mapSessionProviderError } from "./session-provider-error-mapper.js";
|
|
@@ -17,6 +16,8 @@ import { CodexModelOptionsService, createFallbackCodexModelOptions, enrichCodexC
|
|
|
17
16
|
import { OpenCodeModelOptionsService, createFallbackOpenCodeModelOptions, enrichOpenCodeCapabilities } from "../provider/opencode-model-options.js";
|
|
18
17
|
import { getSharedProviderDiscoveryHelperClient } from "../provider/provider-discovery-helper-client.js";
|
|
19
18
|
import { discoverWorkspaceSessionsInRuntime } from "../provider/provider-discovery-runtime.js";
|
|
19
|
+
import { applyProviderDisabledState, createProviderCapabilityBlockedError } from "../provider/provider-disabled.js";
|
|
20
|
+
import { ProviderRuntimeStateService } from "../provider/provider-runtime-state-service.js";
|
|
20
21
|
import { createTaskManager } from "../tasks/task-manager.js";
|
|
21
22
|
import { HOST_TASK_TYPES } from "../tasks/task-types.js";
|
|
22
23
|
import { CodexAppServerHelperClient } from "./codex-app-server-helper-client.js";
|
|
@@ -71,14 +72,14 @@ export class SessionHistoryService {
|
|
|
71
72
|
claudeCodeHomeDir;
|
|
72
73
|
codexModelOptionsService;
|
|
73
74
|
openCodeModelOptionsService;
|
|
74
|
-
providerCliCommandPaths;
|
|
75
|
-
providerCliAvailability;
|
|
76
75
|
parallelSessionGroupRepository;
|
|
77
76
|
parallelSessionMemberRepository;
|
|
78
77
|
sessionIsolatedWorkspaceRepository;
|
|
79
78
|
providerDiscoveryHelperClient = getSharedProviderDiscoveryHelperClient();
|
|
80
79
|
providerSessionDiscoveryConfig;
|
|
80
|
+
providerRuntimeStateService;
|
|
81
81
|
sessionProviderConfigService;
|
|
82
|
+
providerControlRepository;
|
|
82
83
|
taskManager;
|
|
83
84
|
workspaceDiscoveryStatuses = new Map();
|
|
84
85
|
workspaceStateRefreshStatuses = new Map();
|
|
@@ -88,7 +89,7 @@ export class SessionHistoryService {
|
|
|
88
89
|
sessionDeletedObservers = new Set();
|
|
89
90
|
workspaceSessionRelations = new Map();
|
|
90
91
|
workspaceStateRefreshTaskSequence = 0;
|
|
91
|
-
constructor(db, workspaceRepository, sessionBindingRepository, sessionChangedFileService, sessionIndexRepository, sessionMessageAttachmentService, sessionStateRepository, sessionStatusSnapshotRepository, config, sessionActivityAuthorityService = new SessionActivityAuthorityService(), sessionMessageOriginRepository = null, sessionForkRepository = null, adapterOverrides = {}, taskManager = createTaskManager(), parallelSessionGroupRepository = null, parallelSessionMemberRepository = null, sessionIsolatedWorkspaceRepository = null, sessionProviderConfigService = null) {
|
|
92
|
+
constructor(db, workspaceRepository, sessionBindingRepository, sessionChangedFileService, sessionIndexRepository, sessionMessageAttachmentService, sessionStateRepository, sessionStatusSnapshotRepository, config, sessionActivityAuthorityService = new SessionActivityAuthorityService(), sessionMessageOriginRepository = null, sessionForkRepository = null, adapterOverrides = {}, taskManager = createTaskManager(), parallelSessionGroupRepository = null, parallelSessionMemberRepository = null, sessionIsolatedWorkspaceRepository = null, sessionProviderConfigService = null, providerControlRepository = null, providerRuntimeStateService = null) {
|
|
92
93
|
this.db = db;
|
|
93
94
|
this.workspaceRepository = workspaceRepository;
|
|
94
95
|
this.sessionBindingRepository = sessionBindingRepository;
|
|
@@ -107,16 +108,16 @@ export class SessionHistoryService {
|
|
|
107
108
|
this.parallelSessionMemberRepository = parallelSessionMemberRepository;
|
|
108
109
|
this.sessionIsolatedWorkspaceRepository = sessionIsolatedWorkspaceRepository;
|
|
109
110
|
this.sessionProviderConfigService = sessionProviderConfigService;
|
|
110
|
-
this.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
111
|
+
this.providerRuntimeStateService = providerRuntimeStateService
|
|
112
|
+
?? new ProviderRuntimeStateService(config);
|
|
113
|
+
this.providerControlRepository = providerControlRepository ?? {
|
|
114
|
+
get: (providerId) => ({
|
|
115
|
+
providerId: providerId.trim(),
|
|
116
|
+
enabled: true,
|
|
117
|
+
updatedAt: ""
|
|
118
|
+
})
|
|
117
119
|
};
|
|
118
|
-
|
|
119
|
-
this.providerCliAvailability = buildProviderCliAvailabilitySnapshot(this.providerCliCommandPaths);
|
|
120
|
+
this.claudeCodeHomeDir = config.claudeCodeHomeDir;
|
|
120
121
|
this.providerSessionDiscoveryConfig = {
|
|
121
122
|
claudeCodeHomeDir: config.claudeCodeHomeDir,
|
|
122
123
|
legnaCodeHomeDir: config.legnaCodeHomeDir,
|
|
@@ -208,7 +209,7 @@ export class SessionHistoryService {
|
|
|
208
209
|
executionLane: "helper_process",
|
|
209
210
|
concurrency: WORKSPACE_DISCOVERY_SCAN_CONCURRENCY,
|
|
210
211
|
helperProcessHandler: "session.workspace_discovery",
|
|
211
|
-
run: async ({ config, workspacePath, knownSessions }, context) => await discoverWorkspaceSessionsInRuntime(config, workspacePath, knownSessions, context.signal)
|
|
212
|
+
run: async ({ config, workspacePath, knownSessions, enabledProviders }, context) => await discoverWorkspaceSessionsInRuntime(config, workspacePath, knownSessions, enabledProviders, context.signal)
|
|
212
213
|
});
|
|
213
214
|
}
|
|
214
215
|
if (!this.taskManager.has(HOST_TASK_TYPES.providerCapabilityRefresh)) {
|
|
@@ -453,11 +454,11 @@ export class SessionHistoryService {
|
|
|
453
454
|
.listByWorkspace(workspaceId, userId)
|
|
454
455
|
.filter((item) => !this.isPendingSessionAlias(item));
|
|
455
456
|
const projectedItems = this.listProjectedIsolatedWorkspaceSessions(workspaceId, userId);
|
|
456
|
-
return this.enrichSessionItems(workspaceId, sortSessionListItemsByRecentActivity(mergeSessionListItemsBySessionId([...directItems, ...projectedItems])));
|
|
457
|
+
return this.filterDisabledProviderSessions(this.enrichSessionItems(workspaceId, sortSessionListItemsByRecentActivity(mergeSessionListItemsBySessionId([...directItems, ...projectedItems]))));
|
|
457
458
|
}
|
|
458
459
|
getProviderCapabilitiesSnapshot(provider) {
|
|
459
460
|
try {
|
|
460
|
-
return this.resolveProviderCapabilitiesImmediate(this.applyProviderCliAvailability(this.capabilityService.getProviderCapabilities(provider)), null);
|
|
461
|
+
return this.applyProviderEnabledState(this.resolveProviderCapabilitiesImmediate(this.applyProviderCliAvailability(this.capabilityService.getProviderCapabilities(provider)), null));
|
|
461
462
|
}
|
|
462
463
|
catch (error) {
|
|
463
464
|
throw mapSessionProviderError(error);
|
|
@@ -474,10 +475,10 @@ export class SessionHistoryService {
|
|
|
474
475
|
refreshedAt: Date.now(),
|
|
475
476
|
value: refreshed
|
|
476
477
|
});
|
|
477
|
-
return refreshed;
|
|
478
|
+
return this.applyProviderEnabledState(refreshed);
|
|
478
479
|
}
|
|
479
480
|
this.scheduleProviderCapabilityRefresh(baseCapabilities, workspacePath);
|
|
480
|
-
return this.resolveProviderCapabilitiesImmediate(baseCapabilities, workspacePath);
|
|
481
|
+
return this.applyProviderEnabledState(this.resolveProviderCapabilitiesImmediate(baseCapabilities, workspacePath));
|
|
481
482
|
}
|
|
482
483
|
catch (error) {
|
|
483
484
|
throw mapSessionProviderError(error);
|
|
@@ -499,11 +500,11 @@ export class SessionHistoryService {
|
|
|
499
500
|
refreshedAt: Date.now(),
|
|
500
501
|
value: refreshed
|
|
501
502
|
});
|
|
502
|
-
return refreshed;
|
|
503
|
+
return this.applyProviderEnabledState(refreshed);
|
|
503
504
|
});
|
|
504
505
|
}
|
|
505
506
|
this.scheduleProviderCapabilityRefresh(normalizedCapabilities, workspacePath);
|
|
506
|
-
return this.resolveProviderCapabilitiesImmediate(normalizedCapabilities, workspacePath);
|
|
507
|
+
return this.applyProviderEnabledState(this.resolveProviderCapabilitiesImmediate(normalizedCapabilities, workspacePath));
|
|
507
508
|
})
|
|
508
509
|
.catch((error) => {
|
|
509
510
|
throw mapSessionProviderError(error);
|
|
@@ -531,6 +532,9 @@ export class SessionHistoryService {
|
|
|
531
532
|
return applyImmediateModelOptionFallbacks(claudeEnriched, this.codexModelOptionsService.peekSnapshot(), this.openCodeModelOptionsService.peekSnapshot(workspacePath));
|
|
532
533
|
}
|
|
533
534
|
scheduleProviderCapabilityRefresh(capabilities, workspacePath) {
|
|
535
|
+
if (!this.isProviderEnabled(capabilities.provider)) {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
534
538
|
const cacheKey = buildProviderCapabilityCacheKey(capabilities.provider, workspacePath);
|
|
535
539
|
const cached = this.providerCapabilityCache.get(cacheKey);
|
|
536
540
|
if (cached &&
|
|
@@ -563,7 +567,7 @@ export class SessionHistoryService {
|
|
|
563
567
|
if (!isProviderCliBacked(capabilities.provider)) {
|
|
564
568
|
return capabilities;
|
|
565
569
|
}
|
|
566
|
-
if (this.
|
|
570
|
+
if (this.providerRuntimeStateService.isProviderCliAvailable(capabilities.provider)) {
|
|
567
571
|
return capabilities;
|
|
568
572
|
}
|
|
569
573
|
const limitation = buildProviderCliUnavailableMessage(capabilities.provider);
|
|
@@ -582,17 +586,31 @@ export class SessionHistoryService {
|
|
|
582
586
|
limitations
|
|
583
587
|
};
|
|
584
588
|
}
|
|
589
|
+
applyProviderEnabledState(capabilities) {
|
|
590
|
+
if (this.isProviderEnabled(capabilities.provider)) {
|
|
591
|
+
return capabilities;
|
|
592
|
+
}
|
|
593
|
+
return applyProviderDisabledState(capabilities);
|
|
594
|
+
}
|
|
595
|
+
isProviderEnabled(provider) {
|
|
596
|
+
return this.providerControlRepository.get(provider.trim()).enabled;
|
|
597
|
+
}
|
|
598
|
+
filterDisabledProviderSessions(items) {
|
|
599
|
+
return items.filter((item) => this.isProviderEnabled(item.provider));
|
|
600
|
+
}
|
|
585
601
|
assertProviderCapabilityEnabled(provider, capability, fallbackDetail) {
|
|
586
602
|
const capabilities = this.getProviderCapabilitiesSnapshot(provider);
|
|
587
603
|
if (capabilities[capability]) {
|
|
588
604
|
return;
|
|
589
605
|
}
|
|
590
|
-
throw
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
606
|
+
throw createProviderCapabilityBlockedError(capabilities, "provider", fallbackDetail);
|
|
607
|
+
}
|
|
608
|
+
assertProviderSendEnabled(provider, field, fallbackDetail) {
|
|
609
|
+
const capabilities = this.getProviderCapabilitiesSnapshot(provider);
|
|
610
|
+
if (capabilities.canSendMessage) {
|
|
611
|
+
return;
|
|
612
|
+
}
|
|
613
|
+
throw createProviderCapabilityBlockedError(capabilities, field, fallbackDetail);
|
|
596
614
|
}
|
|
597
615
|
async getSessionContextUsage(sessionId) {
|
|
598
616
|
const binding = this.getBindingOrThrow(sessionId);
|
|
@@ -629,6 +647,7 @@ export class SessionHistoryService {
|
|
|
629
647
|
}
|
|
630
648
|
}
|
|
631
649
|
async startSession(input) {
|
|
650
|
+
this.assertProviderCapabilityEnabled(input.provider, "canStartSession", "当前 provider 不支持创建会话");
|
|
632
651
|
if (SESSION_START_DEFERRED_PROVIDERS.has(input.provider)) {
|
|
633
652
|
throw new AppError({
|
|
634
653
|
statusCode: 409,
|
|
@@ -1008,6 +1027,7 @@ export class SessionHistoryService {
|
|
|
1008
1027
|
}
|
|
1009
1028
|
async sendMessage(sessionId, content, clientRequestId, permissionMode = null) {
|
|
1010
1029
|
const binding = this.getBindingOrThrow(sessionId);
|
|
1030
|
+
this.assertProviderSendEnabled(binding.provider, "sessionId", "当前 provider 不支持继续发送消息");
|
|
1011
1031
|
const result = await this.sessionSyncService
|
|
1012
1032
|
.sendMessage(binding.provider, binding.providerSessionId, binding.rawStoreRef, content, clientRequestId, permissionMode)
|
|
1013
1033
|
.catch((error) => {
|
|
@@ -1383,14 +1403,19 @@ export class SessionHistoryService {
|
|
|
1383
1403
|
try {
|
|
1384
1404
|
const discoverStartedAt = Date.now();
|
|
1385
1405
|
const existingWorkspaceSessions = this.sessionIndexRepository.listByWorkspace(workspaceId, userId);
|
|
1386
|
-
const
|
|
1406
|
+
const enabledProviders = this.providerRegistry
|
|
1407
|
+
.list()
|
|
1408
|
+
.map((adapter) => adapter.providerId)
|
|
1409
|
+
.filter((providerId) => this.isProviderEnabled(providerId));
|
|
1410
|
+
const knownSessions = this.buildKnownSessionSummaries(existingWorkspaceSessions.filter((session) => enabledProviders.includes(session.provider)), workspace.path);
|
|
1387
1411
|
const discoveryHandle = this.taskManager.enqueue(HOST_TASK_TYPES.workspaceDiscoveryScan, {
|
|
1388
1412
|
key: workspaceId,
|
|
1389
1413
|
source: "session_history.workspace_discovery.scan",
|
|
1390
1414
|
input: {
|
|
1391
1415
|
config: this.providerSessionDiscoveryConfig,
|
|
1392
1416
|
workspacePath: workspace.path,
|
|
1393
|
-
knownSessions
|
|
1417
|
+
knownSessions,
|
|
1418
|
+
enabledProviders
|
|
1394
1419
|
}
|
|
1395
1420
|
});
|
|
1396
1421
|
const discovery = await awaitTaskHandleWithSignal(discoveryHandle, signal).catch((error) => {
|
|
@@ -1532,12 +1557,15 @@ export class SessionHistoryService {
|
|
|
1532
1557
|
annotationSourceText: relation?.annotationSourceText
|
|
1533
1558
|
?? persistedSession.existingIndex?.annotationSourceText
|
|
1534
1559
|
?? null,
|
|
1535
|
-
isSubagent:
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1560
|
+
isSubagent: resolvePersistedSubagentState({
|
|
1561
|
+
discoveredIsSubagent: relation?.isSubagent,
|
|
1562
|
+
existingIsSubagent: persistedSession.existingIndex?.isSubagent
|
|
1563
|
+
}),
|
|
1564
|
+
subagentLabel: resolvePersistedSubagentLabel({
|
|
1565
|
+
discoveredIsSubagent: relation?.isSubagent,
|
|
1566
|
+
discoveredSubagentLabel: relation?.subagentLabel ?? null,
|
|
1567
|
+
existingSubagentLabel: persistedSession.existingIndex?.subagentLabel ?? null
|
|
1568
|
+
}),
|
|
1541
1569
|
title: resolvePersistedSessionTitle(persistedSession.session.provider, persistedSession.session.title, persistedSession.existingIndex?.title ?? null, resolvedParentTitle),
|
|
1542
1570
|
messageCount: persistedSession.session.messageCount,
|
|
1543
1571
|
isArchived: resolveDiscoveredArchiveState(persistedSession.session.provider, persistedSession.existingIndex?.isArchived ?? false, persistedSession.session.isArchived),
|
|
@@ -1830,6 +1858,7 @@ export class SessionHistoryService {
|
|
|
1830
1858
|
if (!sessionId) {
|
|
1831
1859
|
continue;
|
|
1832
1860
|
}
|
|
1861
|
+
const existingIndex = this.sessionIndexRepository.findIndexRecordBySessionId(sessionId);
|
|
1833
1862
|
const parentSessionId = session.parentProviderSessionId
|
|
1834
1863
|
? discoveredSessionIds.get(buildProviderSessionKey(session.provider, session.parentProviderSessionId)) ??
|
|
1835
1864
|
this.sessionBindingRepository.findByProviderSession(session.provider, session.parentProviderSessionId)?.sessionId ??
|
|
@@ -1837,14 +1866,18 @@ export class SessionHistoryService {
|
|
|
1837
1866
|
: this.resolvePersistedParentSessionId(sessionId);
|
|
1838
1867
|
relationMap.set(sessionId, {
|
|
1839
1868
|
parentSessionId,
|
|
1840
|
-
sessionKind:
|
|
1841
|
-
annotationSourceMessageId:
|
|
1842
|
-
annotationSourceText:
|
|
1843
|
-
isSubagent:
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1869
|
+
sessionKind: existingIndex?.sessionKind ?? "default",
|
|
1870
|
+
annotationSourceMessageId: existingIndex?.annotationSourceMessageId ?? null,
|
|
1871
|
+
annotationSourceText: existingIndex?.annotationSourceText ?? null,
|
|
1872
|
+
isSubagent: resolvePersistedSubagentState({
|
|
1873
|
+
discoveredIsSubagent: session.isSubagent,
|
|
1874
|
+
existingIsSubagent: existingIndex?.isSubagent
|
|
1875
|
+
}),
|
|
1876
|
+
subagentLabel: resolvePersistedSubagentLabel({
|
|
1877
|
+
discoveredIsSubagent: session.isSubagent,
|
|
1878
|
+
discoveredSubagentLabel: session.subagentLabel ?? null,
|
|
1879
|
+
existingSubagentLabel: existingIndex?.subagentLabel ?? null
|
|
1880
|
+
})
|
|
1848
1881
|
});
|
|
1849
1882
|
}
|
|
1850
1883
|
return relationMap;
|
|
@@ -1976,8 +2009,13 @@ export class SessionHistoryService {
|
|
|
1976
2009
|
.listBySourceWorkspaceId(workspaceId)
|
|
1977
2010
|
.filter((record) => record.lifecycleStatus === "active"
|
|
1978
2011
|
|| record.lifecycleStatus === "removing")
|
|
1979
|
-
.
|
|
1980
|
-
.
|
|
2012
|
+
.flatMap((record) => {
|
|
2013
|
+
const isolatedWorkspaceItems = this.sessionIndexRepository.listByWorkspace(record.workspaceId, userId);
|
|
2014
|
+
if (isolatedWorkspaceItems.length === 0) {
|
|
2015
|
+
return [];
|
|
2016
|
+
}
|
|
2017
|
+
return filterProjectedIsolatedWorkspaceSessionTree(isolatedWorkspaceItems, record.ownerSessionId);
|
|
2018
|
+
})
|
|
1981
2019
|
.filter((item) => !this.isPendingSessionAlias(item));
|
|
1982
2020
|
}
|
|
1983
2021
|
async pullSessionHistory(sessionId, cursor, limit, deliveredMessages, onEnvelope, envelopeType, isClosed = () => false) {
|
|
@@ -2668,15 +2706,15 @@ export class SessionHistoryService {
|
|
|
2668
2706
|
?? targetIndex?.annotationSourceText
|
|
2669
2707
|
?? sourceIndex?.annotationSourceText
|
|
2670
2708
|
?? null,
|
|
2671
|
-
isSubagent:
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
subagentLabel:
|
|
2676
|
-
?? sourceRelation?.
|
|
2677
|
-
??
|
|
2678
|
-
?? sourceIndex?.subagentLabel
|
|
2679
|
-
|
|
2709
|
+
isSubagent: resolvePersistedSubagentState({
|
|
2710
|
+
discoveredIsSubagent: targetRelation?.isSubagent ?? sourceRelation?.isSubagent,
|
|
2711
|
+
existingIsSubagent: targetIndex?.isSubagent ?? sourceIndex?.isSubagent
|
|
2712
|
+
}),
|
|
2713
|
+
subagentLabel: resolvePersistedSubagentLabel({
|
|
2714
|
+
discoveredIsSubagent: targetRelation?.isSubagent ?? sourceRelation?.isSubagent,
|
|
2715
|
+
discoveredSubagentLabel: targetRelation?.subagentLabel ?? sourceRelation?.subagentLabel ?? null,
|
|
2716
|
+
existingSubagentLabel: targetIndex?.subagentLabel ?? sourceIndex?.subagentLabel ?? null
|
|
2717
|
+
})
|
|
2680
2718
|
});
|
|
2681
2719
|
for (const relation of relationMap.values()) {
|
|
2682
2720
|
if (relation.parentSessionId === sourceSessionId) {
|
|
@@ -2725,6 +2763,12 @@ export class SessionHistoryService {
|
|
|
2725
2763
|
return Number(row?.count ?? 0);
|
|
2726
2764
|
}
|
|
2727
2765
|
detachSessionRelationsBeforeDelete(sessionId) {
|
|
2766
|
+
const controlSessionIds = this.db
|
|
2767
|
+
.prepare(`SELECT id
|
|
2768
|
+
FROM butler_control_sessions
|
|
2769
|
+
WHERE session_id = ?`)
|
|
2770
|
+
.all(sessionId)
|
|
2771
|
+
.map((row) => String(row.id));
|
|
2728
2772
|
this.db
|
|
2729
2773
|
.prepare(`UPDATE session_indices
|
|
2730
2774
|
SET parent_session_id = NULL
|
|
@@ -2735,6 +2779,47 @@ export class SessionHistoryService {
|
|
|
2735
2779
|
WHERE parent_session_id = ?
|
|
2736
2780
|
OR fork_source_session_id = ?`)
|
|
2737
2781
|
.run(sessionId, sessionId);
|
|
2782
|
+
if (controlSessionIds.length > 0) {
|
|
2783
|
+
const controlSessionPlaceholders = controlSessionIds.map(() => "?").join(", ");
|
|
2784
|
+
this.db
|
|
2785
|
+
.prepare(`UPDATE channel_threads
|
|
2786
|
+
SET control_session_id = NULL,
|
|
2787
|
+
session_id = NULL
|
|
2788
|
+
WHERE session_id = ?
|
|
2789
|
+
OR control_session_id IN (${controlSessionPlaceholders})`)
|
|
2790
|
+
.run(sessionId, ...controlSessionIds);
|
|
2791
|
+
this.db
|
|
2792
|
+
.prepare(`UPDATE channel_inbound_events
|
|
2793
|
+
SET control_session_id = NULL,
|
|
2794
|
+
session_id = NULL
|
|
2795
|
+
WHERE session_id = ?
|
|
2796
|
+
OR control_session_id IN (${controlSessionPlaceholders})`)
|
|
2797
|
+
.run(sessionId, ...controlSessionIds);
|
|
2798
|
+
this.db
|
|
2799
|
+
.prepare(`UPDATE channel_deliveries
|
|
2800
|
+
SET control_session_id = NULL,
|
|
2801
|
+
session_id = NULL
|
|
2802
|
+
WHERE session_id = ?
|
|
2803
|
+
OR control_session_id IN (${controlSessionPlaceholders})`)
|
|
2804
|
+
.run(sessionId, ...controlSessionIds);
|
|
2805
|
+
}
|
|
2806
|
+
else {
|
|
2807
|
+
this.db
|
|
2808
|
+
.prepare(`UPDATE channel_threads
|
|
2809
|
+
SET session_id = NULL
|
|
2810
|
+
WHERE session_id = ?`)
|
|
2811
|
+
.run(sessionId);
|
|
2812
|
+
this.db
|
|
2813
|
+
.prepare(`UPDATE channel_inbound_events
|
|
2814
|
+
SET session_id = NULL
|
|
2815
|
+
WHERE session_id = ?`)
|
|
2816
|
+
.run(sessionId);
|
|
2817
|
+
this.db
|
|
2818
|
+
.prepare(`UPDATE channel_deliveries
|
|
2819
|
+
SET session_id = NULL
|
|
2820
|
+
WHERE session_id = ?`)
|
|
2821
|
+
.run(sessionId);
|
|
2822
|
+
}
|
|
2738
2823
|
this.db
|
|
2739
2824
|
.prepare("DELETE FROM butler_control_sessions WHERE session_id = ?")
|
|
2740
2825
|
.run(sessionId);
|
|
@@ -2966,6 +3051,42 @@ export class SessionHistoryService {
|
|
|
2966
3051
|
});
|
|
2967
3052
|
}
|
|
2968
3053
|
}
|
|
3054
|
+
function filterProjectedIsolatedWorkspaceSessionTree(items, ownerSessionId) {
|
|
3055
|
+
const normalizedOwnerSessionId = ownerSessionId.trim();
|
|
3056
|
+
if (!normalizedOwnerSessionId) {
|
|
3057
|
+
return [];
|
|
3058
|
+
}
|
|
3059
|
+
const itemBySessionId = new Map(items.map((item) => [item.sessionId, item]));
|
|
3060
|
+
const ownerItem = itemBySessionId.get(normalizedOwnerSessionId);
|
|
3061
|
+
if (!ownerItem) {
|
|
3062
|
+
return [];
|
|
3063
|
+
}
|
|
3064
|
+
const childSessionIdsByParentId = new Map();
|
|
3065
|
+
for (const item of items) {
|
|
3066
|
+
const parentSessionId = item.parentSessionId?.trim();
|
|
3067
|
+
if (!parentSessionId) {
|
|
3068
|
+
continue;
|
|
3069
|
+
}
|
|
3070
|
+
const sessionIds = childSessionIdsByParentId.get(parentSessionId) ?? [];
|
|
3071
|
+
sessionIds.push(item.sessionId);
|
|
3072
|
+
childSessionIdsByParentId.set(parentSessionId, sessionIds);
|
|
3073
|
+
}
|
|
3074
|
+
const projectedSessionIds = new Set();
|
|
3075
|
+
const queue = [normalizedOwnerSessionId];
|
|
3076
|
+
while (queue.length > 0) {
|
|
3077
|
+
const currentSessionId = queue.shift();
|
|
3078
|
+
if (!currentSessionId || projectedSessionIds.has(currentSessionId)) {
|
|
3079
|
+
continue;
|
|
3080
|
+
}
|
|
3081
|
+
projectedSessionIds.add(currentSessionId);
|
|
3082
|
+
for (const childSessionId of childSessionIdsByParentId.get(currentSessionId) ?? []) {
|
|
3083
|
+
if (!projectedSessionIds.has(childSessionId)) {
|
|
3084
|
+
queue.push(childSessionId);
|
|
3085
|
+
}
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
return items.filter((item) => projectedSessionIds.has(item.sessionId));
|
|
3089
|
+
}
|
|
2969
3090
|
function isProviderCliBacked(provider) {
|
|
2970
3091
|
return provider === "claude-code"
|
|
2971
3092
|
|| provider === "legna-code"
|
|
@@ -2973,12 +3094,6 @@ function isProviderCliBacked(provider) {
|
|
|
2973
3094
|
|| provider === "gemini"
|
|
2974
3095
|
|| provider === "kimi";
|
|
2975
3096
|
}
|
|
2976
|
-
function buildProviderCliAvailabilitySnapshot(commandPaths) {
|
|
2977
|
-
return Object.freeze(Object.fromEntries(Object.entries(commandPaths).map(([provider, commandPath]) => [
|
|
2978
|
-
provider,
|
|
2979
|
-
isCommandAvailable(commandPath)
|
|
2980
|
-
])));
|
|
2981
|
-
}
|
|
2982
3097
|
function buildProviderCliUnavailableMessage(provider) {
|
|
2983
3098
|
switch (provider) {
|
|
2984
3099
|
case "claude-code":
|
|
@@ -3220,8 +3335,13 @@ function mergeSessionIndexRecord(input) {
|
|
|
3220
3335
|
sessionKind: input.target?.sessionKind ?? input.source?.sessionKind ?? "default",
|
|
3221
3336
|
annotationSourceMessageId: input.target?.annotationSourceMessageId ?? input.source?.annotationSourceMessageId ?? null,
|
|
3222
3337
|
annotationSourceText: input.target?.annotationSourceText ?? input.source?.annotationSourceText ?? null,
|
|
3223
|
-
isSubagent:
|
|
3224
|
-
|
|
3338
|
+
isSubagent: resolvePersistedSubagentState({
|
|
3339
|
+
discoveredIsSubagent: input.target?.isSubagent ?? input.source?.isSubagent
|
|
3340
|
+
}),
|
|
3341
|
+
subagentLabel: resolvePersistedSubagentLabel({
|
|
3342
|
+
discoveredIsSubagent: input.target?.isSubagent ?? input.source?.isSubagent,
|
|
3343
|
+
discoveredSubagentLabel: input.target?.subagentLabel ?? input.source?.subagentLabel ?? null
|
|
3344
|
+
}),
|
|
3225
3345
|
title: pickPreferredSessionTitle(input.target?.title ?? null, input.source?.title ?? null),
|
|
3226
3346
|
messageCount: Math.max(input.target?.messageCount ?? 0, input.source?.messageCount ?? 0),
|
|
3227
3347
|
isArchived: mergePersistedArchiveState(input.provider, input.target?.isArchived, input.source?.isArchived),
|
|
@@ -3238,6 +3358,22 @@ function mergePersistedArchiveState(provider, targetArchived, sourceArchived) {
|
|
|
3238
3358
|
}
|
|
3239
3359
|
return targetArchived ?? sourceArchived ?? false;
|
|
3240
3360
|
}
|
|
3361
|
+
function resolvePersistedSubagentState(input) {
|
|
3362
|
+
if (typeof input.discoveredIsSubagent === "boolean") {
|
|
3363
|
+
return input.discoveredIsSubagent;
|
|
3364
|
+
}
|
|
3365
|
+
return input.existingIsSubagent === true;
|
|
3366
|
+
}
|
|
3367
|
+
function resolvePersistedSubagentLabel(input) {
|
|
3368
|
+
if (input.discoveredIsSubagent === false) {
|
|
3369
|
+
return null;
|
|
3370
|
+
}
|
|
3371
|
+
const discoveredSubagentLabel = input.discoveredSubagentLabel?.trim() || null;
|
|
3372
|
+
if (discoveredSubagentLabel) {
|
|
3373
|
+
return discoveredSubagentLabel;
|
|
3374
|
+
}
|
|
3375
|
+
return input.existingSubagentLabel ?? null;
|
|
3376
|
+
}
|
|
3241
3377
|
function mergeSessionStatusSnapshot(input) {
|
|
3242
3378
|
if (!input.target && !input.source) {
|
|
3243
3379
|
return null;
|