@jingyi0605/codingns 0.6.5 → 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/dist/public/assets/AdaptiveButlerPage-B8mg25ze.js +3 -0
- package/dist/public/assets/{App-B9HcTkMT.js → App-C2lNmeKL.js} +6 -6
- package/dist/public/assets/{BootstrapPage-BgLdZEKQ.js → BootstrapPage-CAVA-a8h.js} +1 -1
- package/dist/public/assets/ConversationPage-B6BGOX4C.js +6 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-YCBnyC58.js → DesktopDetachPreviewPage-B37DUL15.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-CrvndE23.js → DesktopWindowPage-CDA6l7lm.js} +1 -1
- package/dist/public/assets/{FileContextPanel-CdC7GGw5.js → FileContextPanel-CMGTtAB6.js} +1 -1
- package/dist/public/assets/{GitSidebar-z2SBinQh.js → GitSidebar--DCqBiGL.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-Cb2HM-y3.js → MobileCreateSessionSheet-THIrIzJ3.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-etF2HKlm.js → MobileTopHeaderFrame-D-X7pVnV.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-CuGJ31kb.js → MobileWorkspaceSwitcherHeader-Cczi7RYu.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-BB6DbGtP.js → RelayConnectEntryPage-D417tgWj.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-Bl1sacZg.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-BOm8Hi_v.js → TerminalManagerPanel-CtldwWz8.js} +1 -1
- package/dist/public/assets/{TerminalPage-B5JNFU6w.js → TerminalPage-DAzQTmQC.js} +18 -18
- package/dist/public/assets/{TerminalRuntimeFallbackModal-CM3LRKOJ.js → TerminalRuntimeFallbackModal-DLOhAvaq.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-GSqKQsj_.js → ToolFilesPage-D7thcDEv.js} +1 -1
- package/dist/public/assets/{ToolGitPage-BVFWMMQp.js → ToolGitPage-uPRsxdcn.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-DZ456fYz.js → ToolProcessesPage-B1uOk0Ef.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-DsJp0y8A.js → ToolsHomePage-rU3V8mmh.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-DyPei0e-.js → WorkbenchLandingPage-BudM2C69.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-Dybarc1V.js +244 -0
- package/dist/public/assets/{WorkbenchModal-LNfB69qx.js → WorkbenchModal-DMQutm1x.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-Cy4WBbzq.js +1 -0
- package/dist/public/assets/{WorkspaceDebugDetailPage-CaXj5zVI.js → WorkspaceDebugDetailPage-CHqo-uDf.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-DOexuuaw.js → WorkspaceDetailPage-CGkAH1W-.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-DkCHNjKD.js → WorkspaceHomePage-CfuPVITd.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-6OoYHXGd.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-CLlYtBRq.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-BCcfYP_d.js → preferences-service-BTKBl5xM.js} +1 -1
- package/dist/public/assets/realtime-client-ww7MnbTD.js +1 -0
- package/dist/public/assets/{relay-entry-BmLkMKuq.js → relay-entry-sdeFnTbY.js} +1 -1
- package/dist/public/assets/styles-BjPytabP.css +1 -0
- package/dist/public/assets/{terminal-runtime-meta-0h-75uRy.js → terminal-runtime-meta-Cvt1ID92.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-rBVmAqh3.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/butler/butler-control-session-service.d.ts +16 -1
- package/dist/server/modules/butler/butler-control-session-service.js +106 -75
- package/dist/server/modules/butler/butler-control-session-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.js +2 -1
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -1
- package/dist/server/modules/provider/provider-catalog-service.d.ts +5 -6
- package/dist/server/modules/provider/provider-catalog-service.js +12 -57
- package/dist/server/modules/provider/provider-catalog-service.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +1 -0
- package/dist/server/modules/provider/provider-controller.js +5 -0
- package/dist/server/modules/provider/provider-controller.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/session-history-service.d.ts +3 -3
- package/dist/server/modules/sessions/session-history-service.js +150 -47
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.js +9 -11
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-provider-config-service.js +28 -7
- 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/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/providers.js +1 -0
- 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 +22 -0
- package/dist/server/server/create-server.js +62 -3
- 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/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/schema.sql +114 -0
- package/dist/server/types/domain.d.ts +82 -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/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-CfsUVZKl.js +0 -3
- package/dist/public/assets/ConversationPage-Cj8go7L0.js +0 -4
- package/dist/public/assets/SessionIndexPage-NbF9gJnp.js +0 -1
- package/dist/public/assets/SettingsPage-DGsmQpLv.js +0 -1
- package/dist/public/assets/WorkbenchLayout-DlbgBT3n.js +0 -4
- package/dist/public/assets/WorkbenchShellRoute-BsxumYx5.js +0 -1
- package/dist/public/assets/file-tree-icon-9pt1OStn.js +0 -31
- package/dist/public/assets/index-BwlbvwaA.css +0 -1
- package/dist/public/assets/index-DSw-TkQL.js +0 -42
- package/dist/public/assets/model-switch-api-C-l8-E1S.js +0 -1
- package/dist/public/assets/session-runtime-machine-DgtvREca.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";
|
|
@@ -18,6 +17,7 @@ import { OpenCodeModelOptionsService, createFallbackOpenCodeModelOptions, enrich
|
|
|
18
17
|
import { getSharedProviderDiscoveryHelperClient } from "../provider/provider-discovery-helper-client.js";
|
|
19
18
|
import { discoverWorkspaceSessionsInRuntime } from "../provider/provider-discovery-runtime.js";
|
|
20
19
|
import { applyProviderDisabledState, createProviderCapabilityBlockedError } from "../provider/provider-disabled.js";
|
|
20
|
+
import { ProviderRuntimeStateService } from "../provider/provider-runtime-state-service.js";
|
|
21
21
|
import { createTaskManager } from "../tasks/task-manager.js";
|
|
22
22
|
import { HOST_TASK_TYPES } from "../tasks/task-types.js";
|
|
23
23
|
import { CodexAppServerHelperClient } from "./codex-app-server-helper-client.js";
|
|
@@ -72,13 +72,12 @@ export class SessionHistoryService {
|
|
|
72
72
|
claudeCodeHomeDir;
|
|
73
73
|
codexModelOptionsService;
|
|
74
74
|
openCodeModelOptionsService;
|
|
75
|
-
providerCliCommandPaths;
|
|
76
|
-
providerCliAvailability;
|
|
77
75
|
parallelSessionGroupRepository;
|
|
78
76
|
parallelSessionMemberRepository;
|
|
79
77
|
sessionIsolatedWorkspaceRepository;
|
|
80
78
|
providerDiscoveryHelperClient = getSharedProviderDiscoveryHelperClient();
|
|
81
79
|
providerSessionDiscoveryConfig;
|
|
80
|
+
providerRuntimeStateService;
|
|
82
81
|
sessionProviderConfigService;
|
|
83
82
|
providerControlRepository;
|
|
84
83
|
taskManager;
|
|
@@ -90,7 +89,7 @@ export class SessionHistoryService {
|
|
|
90
89
|
sessionDeletedObservers = new Set();
|
|
91
90
|
workspaceSessionRelations = new Map();
|
|
92
91
|
workspaceStateRefreshTaskSequence = 0;
|
|
93
|
-
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) {
|
|
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) {
|
|
94
93
|
this.db = db;
|
|
95
94
|
this.workspaceRepository = workspaceRepository;
|
|
96
95
|
this.sessionBindingRepository = sessionBindingRepository;
|
|
@@ -109,6 +108,8 @@ export class SessionHistoryService {
|
|
|
109
108
|
this.parallelSessionMemberRepository = parallelSessionMemberRepository;
|
|
110
109
|
this.sessionIsolatedWorkspaceRepository = sessionIsolatedWorkspaceRepository;
|
|
111
110
|
this.sessionProviderConfigService = sessionProviderConfigService;
|
|
111
|
+
this.providerRuntimeStateService = providerRuntimeStateService
|
|
112
|
+
?? new ProviderRuntimeStateService(config);
|
|
112
113
|
this.providerControlRepository = providerControlRepository ?? {
|
|
113
114
|
get: (providerId) => ({
|
|
114
115
|
providerId: providerId.trim(),
|
|
@@ -117,15 +118,6 @@ export class SessionHistoryService {
|
|
|
117
118
|
})
|
|
118
119
|
};
|
|
119
120
|
this.claudeCodeHomeDir = config.claudeCodeHomeDir;
|
|
120
|
-
this.providerCliCommandPaths = {
|
|
121
|
-
"claude-code": process.platform === "win32" ? "claude.cmd" : "claude",
|
|
122
|
-
"legna-code": config.legnaCodeCliPath,
|
|
123
|
-
codex: config.codexCliPath,
|
|
124
|
-
gemini: config.geminiCliPath,
|
|
125
|
-
kimi: config.kimiCliPath
|
|
126
|
-
};
|
|
127
|
-
// CLI 是否可用只在 Host 启动时探测一次;后续统一读缓存,更新 CLI 后重启 Host 生效。
|
|
128
|
-
this.providerCliAvailability = buildProviderCliAvailabilitySnapshot(this.providerCliCommandPaths);
|
|
129
121
|
this.providerSessionDiscoveryConfig = {
|
|
130
122
|
claudeCodeHomeDir: config.claudeCodeHomeDir,
|
|
131
123
|
legnaCodeHomeDir: config.legnaCodeHomeDir,
|
|
@@ -575,7 +567,7 @@ export class SessionHistoryService {
|
|
|
575
567
|
if (!isProviderCliBacked(capabilities.provider)) {
|
|
576
568
|
return capabilities;
|
|
577
569
|
}
|
|
578
|
-
if (this.
|
|
570
|
+
if (this.providerRuntimeStateService.isProviderCliAvailable(capabilities.provider)) {
|
|
579
571
|
return capabilities;
|
|
580
572
|
}
|
|
581
573
|
const limitation = buildProviderCliUnavailableMessage(capabilities.provider);
|
|
@@ -1565,12 +1557,15 @@ export class SessionHistoryService {
|
|
|
1565
1557
|
annotationSourceText: relation?.annotationSourceText
|
|
1566
1558
|
?? persistedSession.existingIndex?.annotationSourceText
|
|
1567
1559
|
?? null,
|
|
1568
|
-
isSubagent:
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
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
|
+
}),
|
|
1574
1569
|
title: resolvePersistedSessionTitle(persistedSession.session.provider, persistedSession.session.title, persistedSession.existingIndex?.title ?? null, resolvedParentTitle),
|
|
1575
1570
|
messageCount: persistedSession.session.messageCount,
|
|
1576
1571
|
isArchived: resolveDiscoveredArchiveState(persistedSession.session.provider, persistedSession.existingIndex?.isArchived ?? false, persistedSession.session.isArchived),
|
|
@@ -1863,6 +1858,7 @@ export class SessionHistoryService {
|
|
|
1863
1858
|
if (!sessionId) {
|
|
1864
1859
|
continue;
|
|
1865
1860
|
}
|
|
1861
|
+
const existingIndex = this.sessionIndexRepository.findIndexRecordBySessionId(sessionId);
|
|
1866
1862
|
const parentSessionId = session.parentProviderSessionId
|
|
1867
1863
|
? discoveredSessionIds.get(buildProviderSessionKey(session.provider, session.parentProviderSessionId)) ??
|
|
1868
1864
|
this.sessionBindingRepository.findByProviderSession(session.provider, session.parentProviderSessionId)?.sessionId ??
|
|
@@ -1870,14 +1866,18 @@ export class SessionHistoryService {
|
|
|
1870
1866
|
: this.resolvePersistedParentSessionId(sessionId);
|
|
1871
1867
|
relationMap.set(sessionId, {
|
|
1872
1868
|
parentSessionId,
|
|
1873
|
-
sessionKind:
|
|
1874
|
-
annotationSourceMessageId:
|
|
1875
|
-
annotationSourceText:
|
|
1876
|
-
isSubagent:
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
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
|
+
})
|
|
1881
1881
|
});
|
|
1882
1882
|
}
|
|
1883
1883
|
return relationMap;
|
|
@@ -2009,8 +2009,13 @@ export class SessionHistoryService {
|
|
|
2009
2009
|
.listBySourceWorkspaceId(workspaceId)
|
|
2010
2010
|
.filter((record) => record.lifecycleStatus === "active"
|
|
2011
2011
|
|| record.lifecycleStatus === "removing")
|
|
2012
|
-
.
|
|
2013
|
-
.
|
|
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
|
+
})
|
|
2014
2019
|
.filter((item) => !this.isPendingSessionAlias(item));
|
|
2015
2020
|
}
|
|
2016
2021
|
async pullSessionHistory(sessionId, cursor, limit, deliveredMessages, onEnvelope, envelopeType, isClosed = () => false) {
|
|
@@ -2701,15 +2706,15 @@ export class SessionHistoryService {
|
|
|
2701
2706
|
?? targetIndex?.annotationSourceText
|
|
2702
2707
|
?? sourceIndex?.annotationSourceText
|
|
2703
2708
|
?? null,
|
|
2704
|
-
isSubagent:
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
subagentLabel:
|
|
2709
|
-
?? sourceRelation?.
|
|
2710
|
-
??
|
|
2711
|
-
?? sourceIndex?.subagentLabel
|
|
2712
|
-
|
|
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
|
+
})
|
|
2713
2718
|
});
|
|
2714
2719
|
for (const relation of relationMap.values()) {
|
|
2715
2720
|
if (relation.parentSessionId === sourceSessionId) {
|
|
@@ -2758,6 +2763,12 @@ export class SessionHistoryService {
|
|
|
2758
2763
|
return Number(row?.count ?? 0);
|
|
2759
2764
|
}
|
|
2760
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));
|
|
2761
2772
|
this.db
|
|
2762
2773
|
.prepare(`UPDATE session_indices
|
|
2763
2774
|
SET parent_session_id = NULL
|
|
@@ -2768,6 +2779,47 @@ export class SessionHistoryService {
|
|
|
2768
2779
|
WHERE parent_session_id = ?
|
|
2769
2780
|
OR fork_source_session_id = ?`)
|
|
2770
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
|
+
}
|
|
2771
2823
|
this.db
|
|
2772
2824
|
.prepare("DELETE FROM butler_control_sessions WHERE session_id = ?")
|
|
2773
2825
|
.run(sessionId);
|
|
@@ -2999,6 +3051,42 @@ export class SessionHistoryService {
|
|
|
2999
3051
|
});
|
|
3000
3052
|
}
|
|
3001
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
|
+
}
|
|
3002
3090
|
function isProviderCliBacked(provider) {
|
|
3003
3091
|
return provider === "claude-code"
|
|
3004
3092
|
|| provider === "legna-code"
|
|
@@ -3006,12 +3094,6 @@ function isProviderCliBacked(provider) {
|
|
|
3006
3094
|
|| provider === "gemini"
|
|
3007
3095
|
|| provider === "kimi";
|
|
3008
3096
|
}
|
|
3009
|
-
function buildProviderCliAvailabilitySnapshot(commandPaths) {
|
|
3010
|
-
return Object.freeze(Object.fromEntries(Object.entries(commandPaths).map(([provider, commandPath]) => [
|
|
3011
|
-
provider,
|
|
3012
|
-
isCommandAvailable(commandPath)
|
|
3013
|
-
])));
|
|
3014
|
-
}
|
|
3015
3097
|
function buildProviderCliUnavailableMessage(provider) {
|
|
3016
3098
|
switch (provider) {
|
|
3017
3099
|
case "claude-code":
|
|
@@ -3253,8 +3335,13 @@ function mergeSessionIndexRecord(input) {
|
|
|
3253
3335
|
sessionKind: input.target?.sessionKind ?? input.source?.sessionKind ?? "default",
|
|
3254
3336
|
annotationSourceMessageId: input.target?.annotationSourceMessageId ?? input.source?.annotationSourceMessageId ?? null,
|
|
3255
3337
|
annotationSourceText: input.target?.annotationSourceText ?? input.source?.annotationSourceText ?? null,
|
|
3256
|
-
isSubagent:
|
|
3257
|
-
|
|
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
|
+
}),
|
|
3258
3345
|
title: pickPreferredSessionTitle(input.target?.title ?? null, input.source?.title ?? null),
|
|
3259
3346
|
messageCount: Math.max(input.target?.messageCount ?? 0, input.source?.messageCount ?? 0),
|
|
3260
3347
|
isArchived: mergePersistedArchiveState(input.provider, input.target?.isArchived, input.source?.isArchived),
|
|
@@ -3271,6 +3358,22 @@ function mergePersistedArchiveState(provider, targetArchived, sourceArchived) {
|
|
|
3271
3358
|
}
|
|
3272
3359
|
return targetArchived ?? sourceArchived ?? false;
|
|
3273
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
|
+
}
|
|
3274
3377
|
function mergeSessionStatusSnapshot(input) {
|
|
3275
3378
|
if (!input.target && !input.source) {
|
|
3276
3379
|
return null;
|