From 5b09a639ef60b30cfc069992e7ec5590f099b9f7 Mon Sep 17 00:00:00 2001 From: testikun Date: Thu, 3 Sep 2026 15:56:05 +0800 Subject: [PATCH 01/13] feat(desktop): preserve Side Conversations across linked sessions Generated-by: OpenAI Codex --- .../__tests__/quote-companion-retry.test.ts | 2 + .../main/__tests__/workbar-controller.test.ts | 145 +++++++++++++++++- apps/desktop/src/renderer/app-shell.tsx | 3 +- .../src/renderer/features/workbar/README.md | 4 +- .../tools/side-chat/quote-companion-panel.tsx | 2 + .../side-conversation-session-family.ts | 89 +++++++++++ .../tools/side-chat/use-quote-companion.ts | 11 +- .../features/workbar/ui/workbar-host.tsx | 5 +- .../features/workbar/ui/workbar-surface.tsx | 10 +- 9 files changed, 260 insertions(+), 11 deletions(-) create mode 100644 apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts diff --git a/apps/desktop/src/main/__tests__/quote-companion-retry.test.ts b/apps/desktop/src/main/__tests__/quote-companion-retry.test.ts index 159cbb3311..a3db9c2c7b 100644 --- a/apps/desktop/src/main/__tests__/quote-companion-retry.test.ts +++ b/apps/desktop/src/main/__tests__/quote-companion-retry.test.ts @@ -1996,6 +1996,7 @@ function QuoteCompanionProbe(props: { const sourceSession = props.sourceSession ?? SOURCE_SESSION; const companion = useQuoteCompanion({ panelId: 'retry-panel', + sourceSessionId: sourceSession.id, pendingQuotes: [], sourceSession, modelChoices: props.modelChoices ?? [choiceFor(sourceSession)], @@ -2024,6 +2025,7 @@ function QuoteCompanionOwnershipProbe(props: { const sourceSession = props.sourceSession ?? SOURCE_SESSION; const companion = useQuoteCompanion({ panelId: 'ownership-panel', + sourceSessionId: sourceSession.id, pendingQuotes: props.pendingQuotes ?? [], sourceSession, modelChoices: props.modelChoices ?? [choiceFor(sourceSession)], diff --git a/apps/desktop/src/main/__tests__/workbar-controller.test.ts b/apps/desktop/src/main/__tests__/workbar-controller.test.ts index c44f0a7ccc..e922cd1fdc 100644 --- a/apps/desktop/src/main/__tests__/workbar-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workbar-controller.test.ts @@ -118,13 +118,16 @@ function controller(): WorkbarController { function input( activeSession: SessionSummary | undefined, errors: string[] = [], + sessionCatalog?: readonly SessionSummary[], ): UseWorkbarControllerInput { + const sessions = sessionCatalog ?? (activeSession ? [activeSession] : []); return { available: true, activeSession, + sessions, projectId: activeSession?.projectId, projectAliases: [], - authoritativeSessionIds: new Set(activeSession ? [activeSession.id] : []), + authoritativeSessionIds: new Set(sessions.map((session) => session.id)), shellObscured: false, modelChoices: [], reportError: (title, description) => errors.push(`${title}: ${description}`), @@ -576,6 +579,146 @@ describe('useWorkbarController', () => { ); }); + it('preserves Side Chat across linked child navigation and restores its tabs', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const child = session('child'); + child.subagent = { parentSessionId: parent.id }; + const services = createFakeWorkbarServices(); + const sessions = [parent, child]; + + await act(async () => renderController(root, services, input(parent, [], sessions))); + await act(async () => controller().commands.openTool('side-chat')); + const panel = controller().host.quotes?.[0]; + assert.ok(panel); + const tab = controller().host.panelsState.right.tabs.find( + (candidate) => candidate.id === `side-chat:${panel.id}`, + ); + assert.ok(tab); + await act(async () => controller().host.onActivityStateChange?.(panel.id, true)); + + await act(async () => renderController(root, services, input(child, [], sessions))); + + assert.equal(controller().host.surfaceKey, parent.id); + assert.equal(controller().host.quotes?.[0], panel); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === tab.id, + ), + true, + ); + assert.equal(controller().host.activeSideChatPanelIds?.has(panel.id), true); + + await act(async () => renderController(root, services, input(parent, [], sessions))); + assert.equal(controller().host.surfaceKey, parent.id); + assert.equal(controller().host.quotes?.[0], panel); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === tab.id, + ), + true, + ); + }); + + it('keeps Side Chat while the active source awaits its catalog row', async () => { + const { root } = installReactRenderer(); + const source = session('pending-source'); + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(source, [], []))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(source, [], []))); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + true, + ); + }); + + it('keeps the family surface mounted when one of multiple source panels closes', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const child = session('child'); + child.subagent = { parentSessionId: parent.id }; + const sessions = [parent, child]; + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(parent, [], sessions))); + await act(async () => controller().commands.openTool('side-chat')); + const parentPanelId = controller().host.quotes?.[0]?.id; + assert.ok(parentPanelId); + + await act(async () => renderController(root, services, input(child, [], sessions))); + await act(async () => controller().commands.openTool('side-chat')); + const childPanel = controller().host.quotes?.find( + (panel) => panel.sourceSessionId === child.id, + ); + assert.ok(childPanel); + assert.equal(controller().host.surfaceKey, parent.id); + + const parentTab = controller().host.panelsState.right.tabs.find( + (tab) => tab.id === `side-chat:${parentPanelId}`, + ); + assert.ok(parentTab); + await act(async () => controller().host.onCloseTab('right', parentTab)); + + assert.equal(controller().host.surfaceKey, parent.id); + assert.equal( + controller().host.quotes?.some((panel) => panel.id === childPanel.id), + true, + ); + }); + + it('cleans Side Chat when its source Session is removed', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const child = session('child'); + child.subagent = { parentSessionId: parent.id }; + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(parent, [], [parent, child]))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(child, [], [child]))); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), false); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + false, + ); + }); + + it('cleans a child-owned Side Chat when navigating back to its parent', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const child = session('child'); + child.subagent = { parentSessionId: parent.id }; + const sessions = [parent, child]; + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(child, [], sessions))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(parent, [], sessions))); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), false); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + false, + ); + }); + it('hides created companion Sessions until cleanup or reconciliation', async () => { const { root } = installReactRenderer(); const services = createFakeWorkbarServices(); diff --git a/apps/desktop/src/renderer/app-shell.tsx b/apps/desktop/src/renderer/app-shell.tsx index 24518aa030..43277dcb10 100644 --- a/apps/desktop/src/renderer/app-shell.tsx +++ b/apps/desktop/src/renderer/app-shell.tsx @@ -1478,9 +1478,10 @@ function AppShellContent({ const workbar = useWorkbarController({ available: workbarAvailable, activeSession: activeSessionForView, + sessions, projectId: currentProjectId, projectAliases: currentProject?.aliases ?? [], - authoritativeSessionIds: authoritativeSessionIds ?? undefined, + authoritativeSessionIds, shellObscured, modelChoices: chatModelChoices, reportError: reportWorkbarError, diff --git a/apps/desktop/src/renderer/features/workbar/README.md b/apps/desktop/src/renderer/features/workbar/README.md index 85c141f985..35e8543429 100644 --- a/apps/desktop/src/renderer/features/workbar/README.md +++ b/apps/desktop/src/renderer/features/workbar/README.md @@ -71,8 +71,8 @@ remounted when the active session changes. - Terminal ownership is registered as soon as `start` returns, before the tab state commits. Host projection excludes resources owned by another Session, so a Session switch cannot briefly reattach an old Terminal. -- Side Chat survives panel collapse and is cleaned only when its tab closes or - when navigation leaves its source session. +- Side Chat survives panel collapse and navigation within its linked Session + family; it is cleaned when its tab closes or navigation leaves that family. - Disposed Side Chat operations are fenced at every fork/send boundary; a late fork is cleaned and a late send cannot write back into an abandoned panel. - Inactive tabs stay mounted; their hooks receive the existing active/hidden diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx b/apps/desktop/src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx index d49fafb4a0..e44a67def4 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx @@ -90,6 +90,7 @@ function useDelayedFlag(condition: boolean, delayMs: number): boolean { */ export function QuoteCompanionPanel(props: { panelId: string; + sourceSessionId: string; active: boolean; /** Excerpts staged for the next send (accumulated as the user adds more). */ quotes: readonly StagedCompanionQuote[]; @@ -143,6 +144,7 @@ export function QuoteCompanionPanel(props: { }); const companion = useQuoteCompanion({ panelId: props.panelId, + sourceSessionId: props.sourceSessionId, pendingQuotes: props.quotes, sourceSession: props.sourceSession, modelChoices: props.modelChoices, diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts new file mode 100644 index 0000000000..0941021393 --- /dev/null +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + linkedSubagentParentSessionId, + type SessionSummary, +} from '@maka/core/session'; + +type LinkedSession = Pick; + +/** + * Whether the active Session is the source itself or a linked descendant of + * the source. Ordinary branches deliberately do not participate: + * their `parentSessionId` is a different lineage concept. + */ +export function isLinkedSideConversationSessionFamily( + sourceSessionId: string, + activeSession: LinkedSession | undefined, + sessions: readonly LinkedSession[], +): boolean { + if (!activeSession) return false; + // The active source may be represented by the shell's pending Session view + // before its catalog row arrives. Keep the panel through that refresh; a + // missing source is only destructive once navigation has left its id. + if (sourceSessionId === activeSession.id) return true; + const sourceSession = sessions.find((session) => session.id === sourceSessionId); + if (!sourceSession) return false; + + const sessionsById = new Map(sessions.map((session) => [session.id, session])); + return reachesSession(activeSession, sourceSessionId, sessionsById); +} + +/** + * Stable key for a linked Session family. Using the active Session's root, + * rather than whichever panel happens to be listed first, keeps the mounted + * Workbar surface stable when one of several retained panels is closed. + */ +export function linkedSideConversationFamilyRootId( + activeSession: LinkedSession | undefined, + sessions: readonly LinkedSession[], +): string | undefined { + if (!activeSession) return undefined; + const sessionsById = new Map(sessions.map((session) => [session.id, session])); + const visited = new Set(); + let current = activeSession; + while (!visited.has(current.id)) { + visited.add(current.id); + const parentSessionId = linkedSubagentParentSessionId(current); + if (!parentSessionId) return current.id; + const parent = sessionsById.get(parentSessionId); + if (!parent) return current.id; + current = parent; + } + return current.id; +} + +function reachesSession( + start: LinkedSession, + targetSessionId: string, + sessionsById: ReadonlyMap, +): boolean { + const visited = new Set(); + let current: LinkedSession | undefined = start; + while (current) { + if (current.id === targetSessionId) return true; + if (visited.has(current.id)) return false; + visited.add(current.id); + const parentSessionId = linkedSubagentParentSessionId(current); + if (!parentSessionId) return false; + current = sessionsById.get(parentSessionId); + } + return false; +} diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/use-quote-companion.ts b/apps/desktop/src/renderer/features/workbar/tools/side-chat/use-quote-companion.ts index 1a65ba4024..698fecb60d 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/side-chat/use-quote-companion.ts +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/use-quote-companion.ts @@ -116,6 +116,8 @@ function admissionOutcomeForMessage( export interface UseQuoteCompanionInput { /** Stable owner for the currently mounted panel generation. */ panelId: string; + /** Immutable source id used for cleanup even if the source leaves the catalog. */ + sourceSessionId: string; /** Excerpts staged for the next send; accumulates as the user adds more from * the main transcript. Attached to the next turn, then cleared by the host. */ pendingQuotes: readonly StagedCompanionQuote[]; @@ -215,13 +217,14 @@ function requiredAssistantMessageId(projection: LiveTurnProjection | undefined): * inherited history is hidden from the side transcript. The subscription is * established the moment the fork commits — before the run starts — so no * prompt/complete is missed. Reset only by unmount (tab close or switching away - * from the owning source session), which removes the ephemeral fork. Workbar + * from the owning source Session family), which removes the ephemeral fork. Workbar * collapse and New Tab navigation keep the panel mounted. */ export function useQuoteCompanion(input: UseQuoteCompanionInput): UseQuoteCompanionResult { const { sideChat } = useWorkbarServices(); const { panelId, + sourceSessionId, locale, sourceSession, modelChoices, @@ -246,9 +249,7 @@ export function useQuoteCompanion(input: UseQuoteCompanionInput): UseQuoteCompan const confirmBypassRef = useRef(input.confirmBypass); confirmBypassRef.current = input.confirmBypass; const sourceModelReady = sessionHasExactModelChoice(sourceSession, modelChoices); - const sourceSessionId = sourceSession?.id; - const sourceSessionIdRef = useRef(sourceSession?.id); - sourceSessionIdRef.current = sourceSessionId; + const sourceSessionIdRef = useRef(sourceSessionId); const forkSetupPromiseRef = useRef | null>(null); const stopRequestRef = useRef | null>(null); const activeTurnIdRef = useRef(null); @@ -759,7 +760,7 @@ export function useQuoteCompanion(input: UseQuoteCompanionInput): UseQuoteCompan sessionHasExactModelChoice(companion, modelChoices); // The fork is ephemeral (用完即弃): when the panel is dismissed — 退出, - // switching source session — unsubscribe and remove the fork so it never + // leaving the linked source Session family — unsubscribe and remove the fork so it never // lingers in the session list. Collapsing keeps the panel mounted and alive. useEffect(() => { const shouldDismiss = dismissalGuardRef.current.beginMount(); diff --git a/apps/desktop/src/renderer/features/workbar/ui/workbar-host.tsx b/apps/desktop/src/renderer/features/workbar/ui/workbar-host.tsx index 2cce85524e..bdadb29c77 100644 --- a/apps/desktop/src/renderer/features/workbar/ui/workbar-host.tsx +++ b/apps/desktop/src/renderer/features/workbar/ui/workbar-host.tsx @@ -88,6 +88,7 @@ export interface WorkbarHostModel { rightWidth: number; bottomHeight: number; panelsState: SessionWorkbarPanelsState; + surfaceKey?: string; onActivateTab: (placement: SessionWorkbarPlacement, tabId: string) => void; onCloseTab: (placement: SessionWorkbarPlacement, tab: SessionWorkbarTab) => void; onCloseTabs: ( @@ -103,6 +104,7 @@ export interface WorkbarHostModel { rightResizable: ResizableProps; bottomResizable: ResizableProps; quotes?: readonly QuoteCompanionPanelState[]; + sessions?: readonly SessionSummary[]; onQuotesConsumed?: (snapshot: CompanionQuoteSnapshot) => void; onRemoveQuote?: (target: CompanionQuoteTarget) => void; onForkVisibilityChange?: (event: CompanionForkVisibilityEvent) => void; @@ -166,7 +168,7 @@ export function WorkbarHost({ model: props }: { model: WorkbarHostModel }) { } > void; quotes?: readonly QuoteCompanionPanelState[]; + sessions?: readonly SessionSummary[]; onQuotesConsumed?: (snapshot: CompanionQuoteSnapshot) => void; onRemoveQuote?: (target: CompanionQuoteTarget) => void; onForkVisibilityChange?: (event: CompanionForkVisibilityEvent) => void; @@ -545,13 +546,20 @@ export function WorkbarSurface(props: { const panelId = tab.id.slice('side-chat:'.length); const quote = props.quotes?.find((candidate) => candidate.id === panelId); if (quote) { + const sourceSession = props.sessions?.find( + (session) => session.id === quote.sourceSessionId, + ) ?? + (props.sourceSession?.id === quote.sourceSessionId + ? props.sourceSession + : undefined); content = ( {})} From aee45b4a5b6a005ac24718db18ccaf403df46647 Mon Sep 17 00:00:00 2001 From: testikun Date: Thu, 3 Sep 2026 22:33:24 +0800 Subject: [PATCH 02/13] feat(desktop): preserve Side Conversations across linked sessions Generated-by: OpenAI Codex --- .../src/renderer/features/workbar/README.md | 10 ++++++---- .../tools/review/session-review-panel.tsx | 17 ++++++++++------- .../side-conversation-session-family.ts | 4 ++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/apps/desktop/src/renderer/features/workbar/README.md b/apps/desktop/src/renderer/features/workbar/README.md index 35e8543429..67c2f23b7c 100644 --- a/apps/desktop/src/renderer/features/workbar/README.md +++ b/apps/desktop/src/renderer/features/workbar/README.md @@ -21,8 +21,9 @@ Workbar is a vertical renderer feature. Its application-level model owns the right/bottom panel topology, active tabs, dimensions and persisted collapse -state. Tool data remains session-scoped, and the session content surface is -remounted when the active session changes. +state. Tool data remains session-scoped. The content surface is remounted when +navigation leaves the linked Session scope; within that scope tools receive a +new `sessionId` in place and must reset any session-derived data themselves. ## Dependency direction @@ -71,8 +72,9 @@ remounted when the active session changes. - Terminal ownership is registered as soon as `start` returns, before the tab state commits. Host projection excludes resources owned by another Session, so a Session switch cannot briefly reattach an old Terminal. -- Side Chat survives panel collapse and navigation within its linked Session - family; it is cleaned when its tab closes or navigation leaves that family. +- Side Chat survives panel collapse and navigation from its source Session to + linked descendants; it is cleaned when its tab closes or navigation leaves + that source/descendant scope. - Disposed Side Chat operations are fenced at every fork/send boundary; a late fork is cleaned and a late send cannot write back into an abandoned panel. - Inactive tabs stay mounted; their hooks receive the existing active/hidden diff --git a/apps/desktop/src/renderer/features/workbar/tools/review/session-review-panel.tsx b/apps/desktop/src/renderer/features/workbar/tools/review/session-review-panel.tsx index a31b9f34cf..5c6a929596 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/review/session-review-panel.tsx +++ b/apps/desktop/src/renderer/features/workbar/tools/review/session-review-panel.tsx @@ -57,6 +57,7 @@ export function SessionReviewPanel(props: { const locale = useUiLocale(); const copy = getDesktopConversationCopy(locale).reviewPanel; const [gitResult, setGitResult] = useState(null); + const [gitResultSessionId, setGitResultSessionId] = useState(undefined); const [loading, setLoading] = useState(false); const [visibleFileCount, setVisibleFileCount] = useState(REVIEW_FILE_PAGE_SIZE); const [error, setError] = useState(null); @@ -73,6 +74,7 @@ export function SessionReviewPanel(props: { }); if (revision !== revisionRef.current) return; setGitResult(nextGit); + setGitResultSessionId(props.sessionId); } catch (nextError) { if (revision === revisionRef.current) { setError( @@ -111,7 +113,8 @@ export function SessionReviewPanel(props: { }; }, [load, props.active, props.sessionId, review]); - const gitSnapshot = gitResult?.ok ? gitResult.snapshot : null; + const currentGitResult = gitResultSessionId === props.sessionId ? gitResult : null; + const gitSnapshot = currentGitResult?.ok ? currentGitResult.snapshot : null; const gitFiles = gitSnapshot?.files ?? []; const visibleGitFiles = gitFiles.slice(0, visibleFileCount); const remainingGitFiles = Math.max(0, gitFiles.length - visibleGitFiles.length); @@ -121,21 +124,21 @@ export function SessionReviewPanel(props: { deletions: gitSnapshot?.deletions ?? 0, }; const sourceError = - gitResult?.ok !== false + currentGitResult?.ok !== false ? null - : gitResult.reason === 'not_git_repository' + : currentGitResult.reason === 'not_git_repository' ? copy.notGitRepository - : gitResult.reason === 'workspace_unavailable' + : currentGitResult.reason === 'workspace_unavailable' ? copy.workspaceUnavailable - : gitResult.reason === 'unborn_repository' + : currentGitResult.reason === 'unborn_repository' ? copy.unbornRepository - : gitResult.reason === 'invalid_base_branch' + : currentGitResult.reason === 'invalid_base_branch' ? copy.invalidBaseBranch : copy.gitFailed; const empty = !loading && !error && !sourceError && gitFiles.length === 0; useEffect(() => { setVisibleFileCount(REVIEW_FILE_PAGE_SIZE); - }, [gitSnapshot?.revision]); + }, [props.sessionId, gitSnapshot?.revision]); return (
session.id === activeSession.id)) return true; const sourceSession = sessions.find((session) => session.id === sourceSessionId); if (!sourceSession) return false; From ef1c67471a885db83a20ccf132df7bd24fd4dfd1 Mon Sep 17 00:00:00 2001 From: testikun Date: Fri, 4 Sep 2026 09:49:49 +0800 Subject: [PATCH 03/13] fix(desktop): refresh renderer architecture token baseline Generated-by: OpenAI Codex --- apps/desktop/renderer-architecture.json | 994 +++++++++++++++++------- 1 file changed, 719 insertions(+), 275 deletions(-) diff --git a/apps/desktop/renderer-architecture.json b/apps/desktop/renderer-architecture.json index 51b23b7387..618dfa39c5 100644 --- a/apps/desktop/renderer-architecture.json +++ b/apps/desktop/renderer-architecture.json @@ -4,6 +4,7 @@ "src/renderer/agent-graph-panel-visibility.ts", "src/renderer/agent-graph-panel.tsx", "src/renderer/agent-graph-refresh.ts", + "src/renderer/app-shell-app-update.ts", "src/renderer/app-shell-chat-actions.ts", "src/renderer/app-shell-chrome-actions.tsx", "src/renderer/app-shell-command-actions.ts", @@ -22,6 +23,7 @@ "src/renderer/app-shell-turn-actions.ts", "src/renderer/app-shell-turn-view-model.ts", "src/renderer/app-shell.tsx", + "src/renderer/app-update-install.ts", "src/renderer/app.tsx", "src/renderer/astryx-theme-mode.ts", "src/renderer/astryx-theme/maka.js", @@ -60,18 +62,15 @@ "src/renderer/live-turn-reconciler.tsx", "src/renderer/live-turn-snapshot.ts", "src/renderer/local-memory-digest.ts", - "src/renderer/locales/agent-graph-copy.ts", "src/renderer/locales/artifact-copy.ts", "src/renderer/locales/browser-copy.ts", "src/renderer/locales/conversation-copy.ts", "src/renderer/locales/external-session-import-copy.ts", "src/renderer/locales/mcp-copy.ts", "src/renderer/locales/onboarding-copy.ts", - "src/renderer/locales/peer-mesh-copy.ts", "src/renderer/locales/permission-center-copy.ts", "src/renderer/locales/plan-mode-copy.ts", "src/renderer/locales/session-collaboration-copy.ts", - "src/renderer/locales/session-local-copy.ts", "src/renderer/locales/settings-bot-copy.ts", "src/renderer/locales/settings-daily-review-copy.ts", "src/renderer/locales/settings-data-copy.ts", @@ -88,8 +87,6 @@ "src/renderer/locales/settings-web-search-copy.ts", "src/renderer/locales/shell-copy.ts", "src/renderer/locales/shell-remaining-copy.ts", - "src/renderer/locales/task-readiness-copy.ts", - "src/renderer/locales/workhub-copy.ts", "src/renderer/main.tsx", "src/renderer/mcp-brand-contrast.ts", "src/renderer/mcp-brand-marks.tsx", @@ -123,6 +120,7 @@ "src/renderer/session-message-settlement.ts", "src/renderer/session-read-state.ts", "src/renderer/session-status-presentation.ts", + "src/renderer/session-trace-refresh.ts", "src/renderer/session-workspace-actions.ts", "src/renderer/session-workspace-errors.ts", "src/renderer/settings/about-settings-page.tsx", @@ -248,6 +246,7 @@ "src/renderer/workhub-coordination-host-scope.ts", "src/renderer/workhub-coordination-lifecycle.ts", "src/renderer/workhub-coordination-port.ts", + "src/renderer/workhub-route-policy.ts", "src/renderer/workhub-send-lease.ts", "src/renderer/workhub-session-port.ts", "src/renderer/workhub-surface.tsx", @@ -274,6 +273,7 @@ "src/renderer/features/workbar/model/workbar-layout.ts -> src/renderer/browser-storage", "src/renderer/features/workbar/model/workbar-tabs.ts -> src/renderer/browser-storage", "src/renderer/features/workbar/tools/artifacts/artifact-pane.tsx -> src/renderer/open-path", + "src/renderer/features/workbar/tools/inspector/use-session-trace.ts -> src/renderer/session-trace-refresh", "src/renderer/features/workbar/tools/side-chat/quote-companion-core.ts -> src/renderer/model-connection-errors", "src/renderer/features/workbar/tools/side-chat/quote-companion-core.ts -> src/renderer/session-copy-attempt", "src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx -> src/renderer/attachment-preflight", @@ -289,33 +289,25 @@ "legacyPlatformImports": [ "src/renderer/platform/desktop/create-workbar-services.ts -> src/renderer/session-message-settlement" ], - "controllerOwners": [ - { - "implementation": "src/renderer/features/app-update/controller/use-app-update-controller.ts", - "symbol": "useAppUpdateController", - "owner": "src/renderer/features/app-update/ui/app-update-provider.tsx", - "ownerSymbol": "AppUpdateProvider", - "count": 1 - }, - { - "implementation": "src/renderer/features/module-hub/controller/use-module-hub-controller.ts", - "symbol": "useModuleHubController", - "owner": "src/renderer/features/module-hub/ui/module-hub-provider.tsx", - "ownerSymbol": "ModuleHubProvider", - "count": 1 - }, - { - "implementation": "src/renderer/features/task-entry/controller/use-task-entry-controller.ts", - "symbol": "useTaskEntryController", - "owner": "src/renderer/features/task-entry/ui/task-entry-provider.tsx", - "ownerSymbol": "TaskEntryRoot", - "count": 1 - } - ], "legacyAppShell": { "files": { + "src/renderer/app-shell-app-update.ts": { + "importDeclarations": 2, + "bridgePaths": {}, + "environmentCapabilities": {}, + "hookCalls": {}, + "lifecycleMethods": {}, + "unresolvedDependencies": 0, + "actionFactories": [], + "dependencyPaths": { + "../preload/bridge-contract.js": 1, + "@maka/ui": 1 + }, + "importSpecifiers": 2, + "nonTriviaTokens": 92 + }, "src/renderer/app-shell-chat-actions.ts": { - "importDeclarations": 8, + "importDeclarations": 25, "bridgePaths": { "window.maka.newTasks.create": 1, "window.maka.sessions.remove": 1, @@ -331,22 +323,37 @@ "createAppShellChatActions" ], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app-shell-copy.js": 1, + "./app-shell-session-ui-state.js": 1, "./attachment-preflight.js": 1, "./composer-attachments.js": 1, - "./features/conversation/index.js": 1, + "./desktop-transcript-range-store.js": 1, "./locales/shell-copy.js": 1, "./model-connection-errors.js": 1, + "./session-message-settlement.js": 1, + "./session-workspace-actions.js": 1, "./session-workspace-errors.js": 1, "./skill-invocation-feedback.js": 1, + "@maka/core/collaboration": 1, + "@maka/core/events": 2, + "@maka/core/model-thinking": 1, + "@maka/core/orchestration": 1, + "@maka/core/runtime-inputs": 1, + "@maka/core/sandbox-boundary": 1, + "@maka/core/session": 1, "@maka/core/session-name": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/core/user-question": 1, + "@maka/runtime/skill-invocation": 1, "@maka/ui": 1 }, - "importSpecifiers": 13, - "nonTriviaTokens": 4076 + "importSpecifiers": 38, + "nonTriviaTokens": 4086 }, "src/renderer/app-shell-chrome-actions.tsx": { - "importDeclarations": 4, + "importDeclarations": 5, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -362,11 +369,11 @@ "@maka/ui": 1, "@maka/ui/icons": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 8, "nonTriviaTokens": 408 }, "src/renderer/app-shell-command-actions.ts": { - "importDeclarations": 5, + "importDeclarations": 16, "bridgePaths": { "window.maka.connections.setDefault": 1, "window.maka.connections.test": 1, @@ -385,19 +392,28 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/diagnostics-contract.js": 1, "./app-shell-copy.js": 1, + "./application/contracts/session-start-mode.js": 1, "./command-palette-commands.js": 1, + "./command-palette-types.js": 1, "./conversation-markdown.js": 1, "./default-runtime-host-operation.js": 1, "./locales/settings-test-result-copy.js": 1, "./locales/shell-copy.js": 1, + "@maka/core/llm-connections": 1, + "@maka/core/permission": 1, + "@maka/core/session": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 9, + "importSpecifiers": 22, "nonTriviaTokens": 2307 }, "src/renderer/app-shell-context-compaction.ts": { - "importDeclarations": 0, + "importDeclarations": 4, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, @@ -405,13 +421,16 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1 + "./locales/shell-copy.js": 1, + "@maka/core/events": 1, + "@maka/core/ui-locale": 1, + "@maka/runtime-host/protocol": 1 }, - "importSpecifiers": 0, - "nonTriviaTokens": 610 + "importSpecifiers": 4, + "nonTriviaTokens": 612 }, "src/renderer/app-shell-copy.ts": { - "importDeclarations": 1, + "importDeclarations": 5, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, @@ -420,30 +439,35 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-copy.js": 1, - "@maka/core/redaction": 1 + "@maka/core/llm-connections": 1, + "@maka/core/redaction": 1, + "@maka/core/text-file-import": 1, + "@maka/core/ui-locale": 1 }, - "importSpecifiers": 1, - "nonTriviaTokens": 504 + "importSpecifiers": 6, + "nonTriviaTokens": 515 }, "src/renderer/app-shell-detail-panel.tsx": { - "importDeclarations": 0, + "importDeclarations": 1, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {}, - "importSpecifiers": 0, + "dependencyPaths": { + "react": 1 + }, + "importSpecifiers": 1, "nonTriviaTokens": 87 }, "src/renderer/app-shell-e2e-fixture.ts": { - "importDeclarations": 1, + "importDeclarations": 6, "bridgePaths": { "window.maka.e2eFixture.getState": 1 }, "environmentCapabilities": { - "document.documentElement.setAttribute": 3 + "document.documentElement.setAttribute": 4 }, "hookCalls": {}, "lifecycleMethods": {}, @@ -452,13 +476,18 @@ "createAppShellE2eFixtureActions" ], "dependencyPaths": { - "./theme": 1 + "./features/workbar": 1, + "./theme": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1, + "react": 1 }, "importSpecifiers": 1, - "nonTriviaTokens": 642 + "nonTriviaTokens": 666 }, "src/renderer/app-shell-effects.ts": { - "importDeclarations": 11, + "importDeclarations": 23, "bridgePaths": { "window.maka.app.info": 1, "window.maka.appWindow.subscribeCommand": 1, @@ -494,24 +523,33 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "../shared/runtime-host-identity.js": 1, "./app-shell-copy": 1, "./browser-storage": 1, "./desktop-transcript-range-store.js": 1, "./locales/conversation-copy.js": 1, + "./nav-selection.js": 1, "./session-event-health": 1, "./shell-run-update-state.js": 1, "./theme": 1, "./titlebar-modal-sync": 1, "@astryxdesign/core/hooks": 1, - "@maka/core/session-event-health": 1, + "@maka/core/connections": 1, + "@maka/core/events": 2, + "@maka/core/redaction": 1, + "@maka/core/session": 1, + "@maka/core/session-event-health": 2, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 19, - "nonTriviaTokens": 3816 + "importSpecifiers": 37, + "nonTriviaTokens": 3823 }, "src/renderer/app-shell-overlays.tsx": { - "importDeclarations": 7, + "importDeclarations": 14, "bridgePaths": {}, "environmentCapabilities": { "window": 2, @@ -529,21 +567,27 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app-shell-command-actions": 1, "./command-palette": 1, "./keyboard-help": 1, "./locales/shell-remaining-copy.js": 1, "./settings/settings-modal": 1, + "./settings/tasks-settings-page": 1, + "./settings/ui-locale-update-gate": 1, "@astryxdesign/core/hooks": 1, "@astryxdesign/core/Spinner": 1, + "@maka/core/llm-connections": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 11, + "importSpecifiers": 22, "nonTriviaTokens": 977 }, "src/renderer/app-shell-project-actions.ts": { - "importDeclarations": 4, + "importDeclarations": 9, "bridgePaths": { "window.maka.app.openPath": 4, "window.maka.app.resolveProjectGitInfo": 1, @@ -563,17 +607,21 @@ "createAppShellProjectActions" ], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app-shell-copy": 1, "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, "./open-path": 1, - "./session-workspace-errors": 1 + "./session-workspace-errors": 1, + "@maka/core/project": 1, + "@maka/core/ui-locale": 1, + "react": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 15, "nonTriviaTokens": 2284 }, "src/renderer/app-shell-revision-actions.ts": { - "importDeclarations": 4, + "importDeclarations": 11, "bridgePaths": { "window.maka.sessions.abandonSessionCopy": 2, "window.maka.sessions.reviseBeforeTurn": 1 @@ -586,18 +634,22 @@ "createAppShellRevisionActions" ], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, "./session-copy-attempt.js": 1, "./session-message-settlement.js": 1, + "./session-workspace-actions.js": 1, "./session-workspace-errors.js": 1, - "@maka/core/session": 1 + "@maka/core/session": 2, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 }, - "importSpecifiers": 8, + "importSpecifiers": 17, "nonTriviaTokens": 2316 }, "src/renderer/app-shell-session-events.ts": { - "importDeclarations": 2, + "importDeclarations": 8, "bridgePaths": {}, "environmentCapabilities": { "requestAnimationFrame": 1, @@ -611,15 +663,20 @@ "createAppShellSessionEventHandlers" ], "dependencyPaths": { + "./app-shell-chat-actions.js": 1, + "./app-shell-session-ui-state.js": 1, "./locales/conversation-copy.js": 1, "./model-connection-errors.js": 1, + "@maka/core/events": 1, + "@maka/core/session": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1 }, - "importSpecifiers": 11, + "importSpecifiers": 21, "nonTriviaTokens": 2974 }, "src/renderer/app-shell-session-start-actions.ts": { - "importDeclarations": 2, + "importDeclarations": 7, "bridgePaths": { "window.maka.newTasks.create": 1, "window.maka.onboarding.setMilestone": 1 @@ -632,11 +689,15 @@ "createAppShellSessionStartActions" ], "dependencyPaths": { + "../preload/bridge-contract.js": 1, + "./application/contracts/session-start-mode.js": 1, "./locales/shell-copy.js": 1, "./model-connection-errors.js": 1, - "./session-workspace-errors.js": 1 + "./session-workspace-errors.js": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 }, - "importSpecifiers": 5, + "importSpecifiers": 11, "nonTriviaTokens": 650 }, "src/renderer/app-shell-session-ui-state.ts": { @@ -654,7 +715,7 @@ "nonTriviaTokens": 7 }, "src/renderer/app-shell-stop-action.ts": { - "importDeclarations": 0, + "importDeclarations": 4, "bridgePaths": { "window.maka.sessions.stop": 1 }, @@ -666,14 +727,16 @@ "createAppShellStopAction" ], "dependencyPaths": { + "./app-shell-session-ui-state.js": 1, "./locales/conversation-copy.js": 1, - "./locales/shell-copy.js": 1 + "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1 }, - "importSpecifiers": 0, + "importSpecifiers": 4, "nonTriviaTokens": 302 }, "src/renderer/app-shell-turn-actions.ts": { - "importDeclarations": 2, + "importDeclarations": 9, "bridgePaths": { "window.maka.sessions.branchFromTurn": 1, "window.maka.sessions.regenerateTurn": 1 @@ -686,16 +749,21 @@ "createAppShellTurnActions" ], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, "./session-copy-attempt.js": 1, - "./session-workspace-errors.js": 1 + "./session-workspace-actions.js": 1, + "./session-workspace-errors.js": 1, + "@maka/core/session": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 }, - "importSpecifiers": 3, + "importSpecifiers": 10, "nonTriviaTokens": 650 }, "src/renderer/app-shell-turn-view-model.ts": { - "importDeclarations": 6, + "importDeclarations": 7, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -711,15 +779,20 @@ "./interrupted-resume.js": 1, "./session-status-presentation.js": 1, "./turn-footer-actions.js": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 11, - "nonTriviaTokens": 1395 + "importSpecifiers": 18, + "nonTriviaTokens": 1408 }, "src/renderer/app-shell.tsx": { - "importDeclarations": 79, + "importDeclarations": 102, "bridgePaths": { + "window.maka.app.installUpdate": 1, + "window.maka.app.retryUpdateDownload": 1, + "window.maka.app.subscribeUpdateStatus": 1, + "window.maka.app.updateStatus": 1, "window.maka.attachments": 1, "window.maka.attachments.readBytes": 1, "window.maka.connections.subscribeEvents": 1, @@ -752,9 +825,9 @@ "environmentCapabilities": { "document.querySelector": 1, "requestAnimationFrame": 1, - "window.clearTimeout": 1, + "window.clearTimeout": 4, "window.requestAnimationFrame": 4, - "window.setTimeout": 1 + "window.setTimeout": 2 }, "hookCalls": { "useActiveExecutionBoundary": 1, @@ -770,13 +843,14 @@ "useAppShellTurnPresentation": 1, "useCommandPalette": 1, "useComposerAttachments": 1, - "useEffect": 10, + "useEffect": 14, "useKeyboardHelp": 1, "useLayoutEffect": 2, + "useModuleHubController": 1, "useNewTaskChoice": 1, "useOnboardingSnapshot": 1, "usePlanModeState": 1, - "useRef": 20, + "useRef": 24, "useSessionCollaborationDialog": 1, "useSessionEventHealthPolling": 1, "useSessionNavigationReads": 1, @@ -791,8 +865,9 @@ "useShellRunUpdates": 1, "useShellSearch": 1, "useStableActions": 6, - "useState": 16, + "useState": 17, "useSystemUiLocale": 1, + "useTaskEntryController": 1, "useTaskSubmissionReadiness": 1, "useToast": 1, "useTurnActionRegistry": 1, @@ -802,10 +877,13 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "../preload/transcript-contract.js": 1, "./agent-graph-panel": 1, + "./app-shell-app-update": 1, "./app-shell-chat-actions": 1, "./app-shell-chrome-actions": 1, + "./app-shell-command-actions": 1, "./app-shell-context-compaction": 1, "./app-shell-detail-panel": 1, "./app-shell-e2e-fixture": 1, @@ -817,6 +895,7 @@ "./app-shell-stop-action": 1, "./app-shell-turn-actions": 1, "./app-shell-turn-view-model": 1, + "./app-update-install": 1, "./chat-composer-region": 1, "./chat-message-surface": 1, "./command-palette": 1, @@ -828,7 +907,6 @@ "./desktop-execution-boundary-surface": 1, "./desktop-slash-command": 1, "./error-boundary": 1, - "./features/app-update/index.js": 1, "./features/conversation": 1, "./features/goals": 1, "./features/module-hub": 1, @@ -855,6 +933,7 @@ "./settings/provider-brand-marks": 1, "./settings/provider-display": 1, "./settings/runtime-host-ssh-terminal-dialog.js": 1, + "./settings/tasks-settings-page": 1, "./stale-sessions": 1, "./use-active-execution-boundary": 1, "./use-app-shell-composer-quotes": 1, @@ -885,20 +964,25 @@ "./workspace-readiness-recovery": 1, "@astryxdesign/core/AppShell": 1, "@astryxdesign/core/Button": 1, + "@maka/core/connections": 1, + "@maka/core/events": 1, "@maka/core/onboarding-milestone": 1, + "@maka/core/orchestration": 1, + "@maka/core/project": 1, "@maka/core/session": 1, "@maka/core/session-revisions": 1, - "@maka/core/slash-command-catalog": 1, - "@maka/core/ui-locale": 1, + "@maka/core/settings": 1, + "@maka/core/slash-command-catalog": 2, + "@maka/core/ui-locale": 2, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 }, - "importSpecifiers": 121, - "nonTriviaTokens": 14630 + "importSpecifiers": 184, + "nonTriviaTokens": 15684 }, "src/renderer/use-app-shell-composer-quotes.ts": { - "importDeclarations": 2, + "importDeclarations": 3, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -909,13 +993,14 @@ "actionFactories": [], "dependencyPaths": { "./pending-items.js": 1, + "@maka/core/events": 1, "react": 1 }, - "importSpecifiers": 5, + "importSpecifiers": 7, "nonTriviaTokens": 360 }, "src/renderer/use-app-shell-session-list.ts": { - "importDeclarations": 8, + "importDeclarations": 11, "bridgePaths": { "window.maka.sessions.list": 1 }, @@ -929,6 +1014,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./live-turn-snapshot.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, @@ -940,11 +1026,11 @@ "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 11, + "importSpecifiers": 17, "nonTriviaTokens": 581 }, "src/renderer/use-app-shell-session-ui-reads.ts": { - "importDeclarations": 2, + "importDeclarations": 3, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -954,14 +1040,15 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./app-shell-session-ui-state.js": 1, "./live-turn-snapshot.js": 1, "./use-external-store-selector.js": 1 }, - "importSpecifiers": 5, + "importSpecifiers": 7, "nonTriviaTokens": 322 }, "src/renderer/use-app-shell-session-workspace.ts": { - "importDeclarations": 8, + "importDeclarations": 11, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -978,14 +1065,17 @@ "dependencyPaths": { "./app-shell-session-ui-state.js": 1, "./bootstrap-selection-lease.js": 1, + "./desktop-transcript-range-store.js": 1, "./new-task-reload-intent.js": 1, "./session-catalog-state.js": 1, "./session-workspace-actions.js": 1, "./use-app-shell-session-list.js": 1, "./use-external-store-selector.js": 1, + "@maka/core/session": 1, + "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 10, + "importSpecifiers": 14, "nonTriviaTokens": 480 } }, @@ -1007,7 +1097,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../shared/runtime-host-identity.js": 1 + "../shared/runtime-host-identity.js": 1, + "@maka/runtime-host/protocol": 1 } }, "src/preload/external-session-import-result.ts": { @@ -1017,7 +1108,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session": 1 + } }, "src/preload/runtime-host-renderer-operations.ts": { "bridgePaths": {}, @@ -1026,7 +1119,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/runtime-host/protocol": 1 + } }, "src/preload/transcript-contract.ts": { "bridgePaths": {}, @@ -1066,11 +1161,14 @@ "dependencyPaths": { "./agent-graph-panel-visibility.js": 1, "./agent-graph-refresh.js": 1, - "./locales/agent-graph-copy.js": 1, "@astryxdesign/core/Banner": 1, "@astryxdesign/core/Button": 1, "@astryxdesign/core/EmptyState": 1, "@astryxdesign/core/Spinner": 1, + "@maka/core/ui-locale": 1, + "@maka/runtime-host/client": 1, + "@maka/runtime-host/protocol": 1, + "@maka/runtime/stream-graph-read-model": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -1085,6 +1183,17 @@ "actionFactories": [], "dependencyPaths": {} }, + "src/renderer/app-update-install.ts": { + "bridgePaths": {}, + "environmentCapabilities": {}, + "hookCalls": {}, + "lifecycleMethods": {}, + "unresolvedDependencies": 0, + "actionFactories": [], + "dependencyPaths": { + "../preload/bridge-contract.js": 1 + } + }, "src/renderer/astryx-theme/type-scale.ts": { "bridgePaths": {}, "environmentCapabilities": {}, @@ -1103,7 +1212,8 @@ "actionFactories": [], "dependencyPaths": { "./locales/conversation-copy.js": 1, - "@maka/core/attachments": 1 + "@maka/core/attachments": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/bootstrap-selection-lease.ts": { @@ -1141,7 +1251,7 @@ "dependencyPaths": { "./composer-mentions.js": 1, "./new-task-reload-intent.js": 1, - "@maka/ui": 1, + "@maka/ui": 2, "react": 1 } }, @@ -1158,14 +1268,22 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./app-shell-session-ui-state": 1, "./chat-recovery-notice": 1, + "./locales/conversation-copy": 1, "./locales/shell-copy": 1, "./onboarding-hero": 1, + "./task-readiness-notice": 1, "./use-app-shell-session-ui-reads": 1, "./use-deep-research-run": 1, "./use-external-store-selector": 1, + "./use-shell-chat-model": 1, + "./workspace-readiness-recovery": 1, "@astryxdesign/core": 1, "@maka/core/deep-research": 1, + "@maka/core/llm-connections": 1, + "@maka/core/onboarding": 1, + "@maka/core/settings": 1, "@maka/ui": 1, "react": 1 } @@ -1178,7 +1296,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/ui": 1 + "./use-shell-chat-model": 1, + "@maka/ui": 1, + "react": 1 } }, "src/renderer/command-palette-commands.ts": { @@ -1189,9 +1309,16 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./command-palette-types.js": 1, "./locales/shell-copy.js": 1, "./settings/settings-nav.js": 1, + "@maka/core/llm-connections": 1, + "@maka/core/permission": 1, "@maka/core/provider-registry": 1, + "@maka/core/session": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1, "@maka/ui/icons": 1 } }, @@ -1202,7 +1329,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/ui/icons": 1 + } }, "src/renderer/command-palette.tsx": { "bridgePaths": {}, @@ -1221,6 +1350,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./command-palette-types": 2, "./locales/shell-copy": 1, "@astryxdesign/core/EmptyState": 1, "@astryxdesign/core/hooks": 1, @@ -1237,7 +1367,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/events": 1 + } }, "src/renderer/composer-defaults.ts": { "bridgePaths": {}, @@ -1269,6 +1401,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, + "@maka/core/settings": 1, + "@maka/runtime/skill-invocation": 1, "react": 1 } }, @@ -1281,7 +1416,8 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-remaining-copy.js": 1, - "@maka/core/session": 1, + "@maka/core/session": 2, + "@maka/core/ui-locale": 1, "@maka/ui": 1 } }, @@ -1292,7 +1428,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/pet": 1, + "@maka/core/session": 1 + } }, "src/renderer/custom-pet-companion.tsx": { "bridgePaths": { @@ -1334,8 +1473,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/daily-review": 1, - "@maka/core/redaction": 1 + "@maka/core/daily-review": 2, + "@maka/core/redaction": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/default-runtime-host-operation.ts": { @@ -1347,7 +1487,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../preload/bridge-contract.js": 1 + } }, "src/renderer/derive-turn-lineage-badges.ts": { "bridgePaths": {}, @@ -1357,7 +1499,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1 + "./locales/conversation-copy.js": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 } }, "src/renderer/desktop-execution-boundary-surface.ts": { @@ -1368,7 +1512,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/sandbox-boundary": 1 + "@maka/core/permission": 1, + "@maka/core/sandbox-boundary": 2 } }, "src/renderer/desktop-slash-command.ts": { @@ -1395,6 +1540,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/transcript-contract.js": 1, "../shared/desktop-session-projection.js": 1, "../shared/runtime-host-identity.js": 1, "@maka/core/persisted-value": 1, @@ -1428,6 +1574,7 @@ "dependencyPaths": { "./locales/shell-copy.js": 1, "@maka/core/diagnostic-log": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -1440,7 +1587,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/events": 1 + } }, "src/renderer/interrupted-resume.ts": { "bridgePaths": {}, @@ -1494,8 +1643,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./app-shell-session-ui-state": 1, "./use-app-shell-session-ui-reads": 1, "./use-external-store-selector": 1, + "@maka/core/session": 1, "react": 1 } }, @@ -1507,7 +1658,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./session-event-health.js": 1 + "./model-wait-state.js": 1, + "./session-event-health.js": 1, + "@maka/ui": 1 } }, "src/renderer/local-memory-digest.ts": { @@ -1520,16 +1673,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} - }, - "src/renderer/locales/agent-graph-copy.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/local-memory": 1 + } }, "src/renderer/locales/artifact-copy.ts": { "bridgePaths": {}, @@ -1538,7 +1684,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/browser-copy.ts": { "bridgePaths": {}, @@ -1547,7 +1695,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/conversation-copy.ts": { "bridgePaths": {}, @@ -1556,7 +1706,12 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/connection-readiness": 1, + "@maka/core/model-call-attempt": 1, + "@maka/core/session-send-projection": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/external-session-import-copy.ts": { "bridgePaths": {}, @@ -1565,7 +1720,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/mcp-copy.ts": { "bridgePaths": {}, @@ -1574,7 +1731,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/onboarding-copy.ts": { "bridgePaths": {}, @@ -1583,16 +1742,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} - }, - "src/renderer/locales/peer-mesh-copy.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../onboarding-hero-copy.js": 1, + "@maka/core/onboarding": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/permission-center-copy.ts": { "bridgePaths": {}, @@ -1601,7 +1755,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/capabilities": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 + } }, "src/renderer/locales/plan-mode-copy.ts": { "bridgePaths": {}, @@ -1610,7 +1768,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/plan": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/session-collaboration-copy.ts": { "bridgePaths": {}, @@ -1619,16 +1780,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} - }, - "src/renderer/locales/session-local-copy.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-bot-copy.ts": { "bridgePaths": {}, @@ -1638,7 +1792,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/ui-locale": 1 + "@maka/core/bot-chat-settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 } }, "src/renderer/locales/settings-daily-review-copy.ts": { @@ -1648,7 +1804,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-data-copy.ts": { "bridgePaths": {}, @@ -1657,7 +1815,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1, + "@maka/storage/config-transfer": 1 + } }, "src/renderer/locales/settings-health-copy.ts": { "bridgePaths": {}, @@ -1666,7 +1827,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/health": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 + } }, "src/renderer/locales/settings-memory-copy.ts": { "bridgePaths": {}, @@ -1675,7 +1840,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/local-memory": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-navigation-copy.ts": { "bridgePaths": {}, @@ -1684,7 +1852,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../settings/nav-group-summary.js": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-preferences-copy.ts": { "bridgePaths": {}, @@ -1693,7 +1865,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-projects-copy.ts": { "bridgePaths": {}, @@ -1703,7 +1878,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/ui-locale": 1 + "../../preload/bridge-contract.js": 2, + "@maka/core/ui-locale": 1, + "@maka/runtime-host/operator": 1 } }, "src/renderer/locales/settings-shared-copy.ts": { @@ -1713,7 +1890,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-subagents-copy.ts": { "bridgePaths": {}, @@ -1722,7 +1901,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/model-thinking": 1, + "@maka/core/subagent-settings": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-tasks-copy.ts": { "bridgePaths": {}, @@ -1731,7 +1914,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-test-result-copy.ts": { "bridgePaths": {}, @@ -1741,6 +1926,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "@maka/core/settings": 1, "@maka/core/ui-locale": 1 } }, @@ -1751,7 +1937,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/locales/settings-web-search-copy.ts": { "bridgePaths": {}, @@ -1760,7 +1948,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1, + "@maka/core/web-search": 1 + } }, "src/renderer/locales/shell-copy.ts": { "bridgePaths": {}, @@ -1770,7 +1961,12 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/redaction": 1 + "@maka/core/goal": 1, + "@maka/core/permission": 1, + "@maka/core/redaction": 1, + "@maka/core/settings": 1, + "@maka/core/slash-command-catalog": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/locales/shell-remaining-copy.ts": { @@ -1780,25 +1976,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} - }, - "src/renderer/locales/task-readiness-copy.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": {} - }, - "src/renderer/locales/workhub-copy.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/mcp-brand-contrast.ts": { "bridgePaths": {}, @@ -1818,8 +1998,11 @@ "actionFactories": [], "dependencyPaths": { "./mcp-brand-contrast.js": 1, + "./mcp-catalog": 1, "@ant-design/icons-svg/es/asn/DingtalkOutlined.js": 1, - "simple-icons": 1 + "@ant-design/icons-svg/es/types.js": 1, + "react": 1, + "simple-icons": 2 } }, "src/renderer/mcp-catalog.ts": { @@ -1829,7 +2012,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/mcp": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/mcp-command-line.ts": { "bridgePaths": {}, @@ -1859,8 +2045,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./locales/mcp-copy.js": 1, "./mcp-command-line.js": 1, - "@maka/core/mcp": 1 + "@maka/core/mcp": 2 } }, "src/renderer/mcp-page.tsx": { @@ -1906,7 +2093,7 @@ "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, "@astryxdesign/core/MetadataList": 1, - "@maka/core/mcp": 1, + "@maka/core/mcp": 2, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -1921,8 +2108,9 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-remaining-copy.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/model-catalog": 1 + "@maka/core/llm-connections": 2, + "@maka/core/model-catalog": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/model-connection-errors.ts": { @@ -1936,7 +2124,10 @@ "./application/contracts/connection-error-cleaner.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, - "./session-error-presentation.js": 1 + "./session-error-presentation.js": 1, + "@maka/core/connection-readiness": 1, + "@maka/core/events": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/model-wait-state.ts": { @@ -1956,7 +2147,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./browser-storage.js": 1 + "./browser-storage.js": 1, + "@maka/ui": 1 } }, "src/renderer/new-task-reload-intent.ts": { @@ -1987,7 +2179,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/onboarding-copy.js": 1 + "./locales/onboarding-copy.js": 1, + "@maka/core/onboarding": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/onboarding-hero.tsx": { @@ -2005,8 +2199,12 @@ "./onboarding-provider-types": 1, "./settings/provider-display": 1, "@astryxdesign/core": 1, + "@maka/core/llm-connections": 1, + "@maka/core/onboarding": 1, + "@maka/core/settings": 1, "@maka/ui": 1, - "@maka/ui/icons": 1 + "@maka/ui/icons": 1, + "react": 1 } }, "src/renderer/onboarding-provider-types.ts": { @@ -2016,7 +2214,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/llm-connections": 1 + } }, "src/renderer/open-path.ts": { "bridgePaths": {}, @@ -2026,7 +2226,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1 + "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/pending-items.ts": { @@ -2045,7 +2246,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/permission": 1, + "@maka/core/session": 1 + } }, "src/renderer/plan-mode-panel.tsx": { "bridgePaths": { @@ -2072,6 +2276,9 @@ "./locales/plan-mode-copy.js": 1, "@astryxdesign/core/Banner": 1, "@astryxdesign/core/Collapsible": 1, + "@maka/core/events": 1, + "@maka/core/plan": 1, + "@maka/core/session": 1, "@maka/ui": 1, "react": 1 } @@ -2105,6 +2312,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./locales/shell-copy.js": 1, "@astryxdesign/core/Button": 1, "@astryxdesign/core/Dialog": 1, @@ -2112,6 +2320,7 @@ "@astryxdesign/core/Layout": 1, "@astryxdesign/core/Stack": 1, "@astryxdesign/core/Text": 1, + "@maka/core/project": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2123,6 +2332,7 @@ "document.documentElement": 2, "document.documentElement.dataset.makaE2eFixture": 1, "document.documentElement.dataset.makaReducedMotion": 1, + "document.documentElement.dataset.makaScrollMotion": 5, "window.matchMedia": 2 }, "hookCalls": {}, @@ -2141,6 +2351,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./observable-state.js": 1, "react": 1 } @@ -2175,6 +2386,7 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, + "@maka/runtime-host/protocol": 1, "@maka/ui": 1, "react": 1 } @@ -2198,7 +2410,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1 + "./locales/conversation-copy.js": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/session-event-health.ts": { @@ -2209,8 +2422,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/session-event-health": 1, - "@maka/core/tool-result-status": 1 + "@maka/core/session": 1, + "@maka/core/session-event-health": 2, + "@maka/core/tool-result-status": 1, + "@maka/ui": 1 } }, "src/renderer/session-health-notice.ts": { @@ -2221,7 +2436,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1 + "./locales/conversation-copy.js": 1, + "@maka/core/llm-connections": 1, + "@maka/core/session-send-projection": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/session-message-settlement.ts": { @@ -2237,7 +2455,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./desktop-transcript-range-store.js": 1 + "../preload/bridge-contract.js": 1, + "./desktop-transcript-range-store.js": 1, + "@maka/core/session": 1 } }, "src/renderer/session-read-state.ts": { @@ -2247,7 +2467,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session": 1 + } }, "src/renderer/session-status-presentation.ts": { "bridgePaths": {}, @@ -2259,7 +2481,20 @@ "dependencyPaths": { "./locales/conversation-copy.js": 1, "./session-error-presentation.js": 1, - "@maka/core/sandbox-boundary": 1 + "@maka/core/sandbox-boundary": 1, + "@maka/core/session": 1, + "@maka/core/ui-locale": 1 + } + }, + "src/renderer/session-trace-refresh.ts": { + "bridgePaths": {}, + "environmentCapabilities": {}, + "hookCalls": {}, + "lifecycleMethods": {}, + "unresolvedDependencies": 0, + "actionFactories": [], + "dependencyPaths": { + "@maka/core/events": 1 } }, "src/renderer/session-workspace-actions.ts": { @@ -2272,9 +2507,12 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./desktop-transcript-range-store.js": 1, "./new-task-reload-intent.js": 1, "./transient-message-projection.js": 1, - "@maka/runtime-host/protocol": 1 + "@maka/core/session": 1, + "@maka/runtime-host/protocol": 1, + "@maka/ui": 1 } }, "src/renderer/session-workspace-errors.ts": { @@ -2285,20 +2523,25 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1 + "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 } }, "src/renderer/settings/about-settings-page.tsx": { "bridgePaths": { + "window.maka.app.checkForUpdates": 1, "window.maka.app.info": 1, + "window.maka.app.subscribeUpdateStatus": 1, + "window.maka.app.updateStatus": 1, "window.maka.diagnostics.copyReport": 1 }, "environmentCapabilities": {}, "hookCalls": { "useActionGuard": 2, - "useEffect": 1, + "useEffect": 2, "useMountedRef": 1, - "useState": 3, + "useState": 5, "useToast": 1, "useUiLocale": 1 }, @@ -2306,8 +2549,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../default-runtime-host-operation.js": 1, - "../features/app-update/index.js": 1, "../locales/settings-preferences-copy.js": 1, "./about-update-status.js": 1, "./settings-error-copy.js": 1, @@ -2315,6 +2558,7 @@ "./settings-skeleton.js": 1, "./use-action-guard.js": 1, "@astryxdesign/core": 1, + "@astryxdesign/core/Kbd": 1, "@maka/ui": 1, "react": 1 } @@ -2326,7 +2570,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../../preload/bridge-contract.js": 1, + "../locales/settings-preferences-copy.js": 1 + } }, "src/renderer/settings/action-guard.ts": { "bridgePaths": {}, @@ -2393,8 +2640,10 @@ "./password-input": 1, "./settings-section": 1, "@astryxdesign/core": 1, + "@maka/core/bot-chat-settings": 1, "@maka/core/bot-onboarding": 1, "@maka/core/settings": 1, + "@maka/runtime/bots": 1, "@maka/ui": 2, "@maka/ui/icons": 1, "react": 1 @@ -2415,9 +2664,12 @@ "./bot-settings-view-model": 1, "./settings-section": 1, "@astryxdesign/core": 1, + "@maka/core/bot-chat-settings": 1, "@maka/core/settings": 1, + "@maka/runtime/bots": 1, "@maka/ui": 2, - "@maka/ui/icons": 1 + "@maka/ui/icons": 1, + "react": 1 } }, "src/renderer/settings/bot-chat-settings-page.tsx": { @@ -2447,6 +2699,10 @@ "./bot-chat-overview": 1, "./bot-chat-shared": 1, "./settings-error-copy": 1, + "@maka/core/bot-chat-settings": 1, + "@maka/core/bot-onboarding": 1, + "@maka/core/settings": 1, + "@maka/runtime/bots": 1, "@maka/ui": 1, "react": 1 } @@ -2460,6 +2716,9 @@ "actionFactories": [], "dependencyPaths": { "../locales/settings-bot-copy": 1, + "@maka/core/bot-chat-settings": 1, + "@maka/core/ui-locale": 1, + "@maka/runtime/bots": 1, "@maka/ui": 1 } }, @@ -2491,6 +2750,7 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, + "@maka/core/bot-onboarding": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2504,7 +2764,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/bot-events": 1 + "@maka/core/bot-chat-settings": 1, + "@maka/core/bot-events": 1, + "@maka/runtime/bots": 1 } }, "src/renderer/settings/bot-wechat-login.tsx": { @@ -2531,6 +2793,8 @@ "@astryxdesign/core/Collapsible": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, + "@maka/core/bot-chat-settings": 1, + "@maka/runtime/bots": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2552,7 +2816,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/pet": 1 + } }, "src/renderer/settings/custom-pet-settings-section.tsx": { "bridgePaths": { @@ -2613,6 +2879,8 @@ "./settings-skeleton": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, + "@maka/core/daily-review": 1, + "@maka/core/llm-connections": 1, "@maka/ui": 1, "react": 1 } @@ -2648,6 +2916,7 @@ "./settings-rows": 1, "./settings-section": 1, "./use-action-guard": 1, + "@maka/storage/config-transfer": 1, "@maka/ui": 1, "react": 1 } @@ -2671,6 +2940,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../features/connection-settings": 1, "../features/network-proxy/index.js": 1, "../locales/settings-preferences-copy.js": 1, "../locales/settings-shared-copy.js": 1, @@ -2681,12 +2951,15 @@ "./provider-brand-marks": 1, "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, + "./settings-resource-state.js": 1, "./settings-section": 1, "./settings-skeleton.js": 1, "./use-action-guard": 1, "./use-optimistic-settings-draft": 1, "@maka/core/chat-model-choice": 1, + "@maka/core/llm-connections": 1, "@maka/core/model-thinking": 1, + "@maka/core/settings": 3, "@maka/ui": 2, "react": 1 } @@ -2706,7 +2979,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../locales/settings-bot-copy": 1, "../locales/settings-health-copy": 1, "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, @@ -2714,7 +2986,7 @@ "./settings-skeleton": 1, "./settings-status-summary-filter": 1, "@astryxdesign/core": 1, - "@maka/core/health": 1, + "@maka/core/health": 2, "@maka/ui": 2, "react": 1 } @@ -2741,6 +3013,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, + "../../preload/external-session-catalog.js": 1, "../locales/external-session-import-copy.js": 1, "../locales/shell-copy.js": 1, "./runtime-host-settings-target.js": 1, @@ -2768,8 +3042,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../locales/settings-memory-copy": 1, "./memory-settings-labels": 1, "@astryxdesign/core": 1, + "@maka/core/local-memory": 1, "@maka/ui": 1 } }, @@ -2780,7 +3056,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../locales/settings-memory-copy": 1, + "@maka/core/local-memory": 1, + "@maka/ui": 1 + } }, "src/renderer/settings/memory-settings-page.tsx": { "bridgePaths": {}, @@ -2801,6 +3081,7 @@ "./memory-settings-sections": 1, "./settings-section": 1, "./use-memory-settings-controller": 1, + "@maka/core/settings": 1, "@maka/ui": 2, "@maka/ui/icons": 1, "react": 1 @@ -2814,6 +3095,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../locales/settings-memory-copy": 1, "./settings-section": 1, "@maka/ui": 1 } @@ -2828,7 +3110,8 @@ "dependencyPaths": { "../locales/settings-memory-copy.js": 1, "./memory-settings-labels.js": 1, - "@maka/core/local-memory": 1, + "@maka/core/local-memory": 2, + "@maka/core/settings": 1, "@maka/ui": 1 } }, @@ -2915,7 +3198,6 @@ "actionFactories": [], "dependencyPaths": { "../locales/permission-center-copy": 1, - "../locales/settings-bot-copy": 1, "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, "./settings-section": 1, @@ -2923,8 +3205,9 @@ "./settings-status-summary-filter": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, - "@maka/core/capabilities": 1, - "@maka/ui": 2, + "@maka/core/capabilities": 2, + "@maka/core/ui-locale": 1, + "@maka/ui": 3, "@maka/ui/icons": 1, "react": 1 } @@ -2955,6 +3238,9 @@ "./settings-expandable-row": 1, "./settings-section": 1, "./settings-skeleton.js": 1, + "@astryxdesign/core": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -2985,6 +3271,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../locales/settings-projects-copy.js": 1, "../locales/settings-shared-copy.js": 1, "../project-path-display.js": 1, @@ -2996,6 +3283,8 @@ "./settings-section": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, + "@maka/core/project": 1, + "@maka/core/settings": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -3023,7 +3312,7 @@ "./use-action-guard": 1, "@astryxdesign/core": 1, "@astryxdesign/core/Collapsible": 1, - "@maka/core/llm-connections": 2, + "@maka/core/llm-connections": 3, "@maka/ui": 1, "react": 1 } @@ -3055,7 +3344,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/llm-connections": 1 + "@maka/core/llm-connections": 2 } }, "src/renderer/settings/provider-brand-marks.tsx": { @@ -3090,7 +3379,8 @@ "../assets/provider-brands/xiaomimimo.svg": 1, "../assets/provider-brands/zai.svg": 1, "../assets/provider-brands/zenmux.svg": 1, - "../features/connection-settings": 1, + "@maka/core/llm-connections": 1, + "react": 1, "simple-icons": 1 } }, @@ -3121,11 +3411,11 @@ "environmentCapabilities": {}, "hookCalls": { "useConnectionDetail": 1, - "useEffect": 1, + "useEffect": 2, "useMountedRef": 2, "useOAuthLoginFlow": 1, "useRuntimeHostSettingsErrorReporter": 2, - "useState": 7, + "useState": 8, "useToast": 2, "useUiLocale": 3 }, @@ -3161,7 +3451,10 @@ "actionFactories": [], "dependencyPaths": { "../features/connection-settings/index.js": 1, - "@maka/core/provider-registry": 1 + "@maka/core/llm-connections": 1, + "@maka/core/provider-registry": 1, + "@maka/core/ui-locale": 1, + "@maka/ui": 1 } }, "src/renderer/settings/provider-display-copy.ts": { @@ -3171,7 +3464,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/llm-connections": 1, + "@maka/core/ui-locale": 1 + } }, "src/renderer/settings/provider-display.tsx": { "bridgePaths": {}, @@ -3182,7 +3478,8 @@ "actionFactories": [], "dependencyPaths": { "./provider-brand-marks": 1, - "./provider-display-copy": 1 + "./provider-display-copy": 1, + "@maka/core/llm-connections": 1 } }, "src/renderer/settings/provider-endpoint-presentation.ts": { @@ -3212,10 +3509,12 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../features/connection-settings": 1, "./runtime-host-settings-target.js": 1, "./use-oauth-login-flow": 1, "@astryxdesign/core": 1, + "@maka/core/llm-connections": 1, "@maka/ui": 1, "react": 1 } @@ -3238,7 +3537,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/connection-settings": 1, + "../features/connection-settings": 2, "./provider-catalog-page": 1, "./provider-connection-detail": 1, "./provider-connection-status": 1, @@ -3274,7 +3573,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/model-thinking": 1 + } }, "src/renderer/settings/request-customization-editor.tsx": { "bridgePaths": {}, @@ -3286,6 +3587,7 @@ "dependencyPaths": { "./password-input": 1, "@astryxdesign/core": 1, + "@maka/core/llm-connections": 1, "@maka/core/runtime-policy": 1, "@maka/ui": 1, "@maka/ui/icons": 1 @@ -3298,7 +3600,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "react": 1 + } }, "src/renderer/settings/runtime-host-management-dialog.tsx": { "bridgePaths": { @@ -3328,6 +3632,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../../shared/runtime-host-project-directory-policy.js": 1, "../features/runtime-host-management": 1, "../locales/settings-projects-copy.js": 1, @@ -3362,6 +3667,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../../shared/runtime-host-project-directory-policy.js": 1, "../locales/settings-projects-copy.js": 1, "./runtime-host-project-directory-editor.js": 1, @@ -3398,9 +3704,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../features/runtime-host-management": 1, "../features/session-collaboration": 1, - "../locales/peer-mesh-copy.js": 1, "../locales/session-collaboration-copy.js": 1, "../locales/settings-projects-copy.js": 1, "./password-input.js": 1, @@ -3409,6 +3715,7 @@ "./settings-error-copy.js": 1, "./settings-section.js": 1, "@astryxdesign/core": 1, + "@maka/runtime-host/client": 1, "@maka/runtime-host/protocol": 1, "@maka/ui": 1, "@maka/ui/icons": 1, @@ -3423,6 +3730,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../locales/settings-projects-copy.js": 1, "@maka/runtime-host/protocol": 1, "@maka/ui": 1 } @@ -3437,6 +3745,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "@maka/ui": 1, "react": 1 } @@ -3463,6 +3772,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../locales/settings-projects-copy.js": 1, "../theme": 1, "@astryxdesign/core/Dialog": 1, @@ -3483,6 +3793,7 @@ "dependencyPaths": { "../locales/settings-shared-copy.js": 1, "@maka/core/redaction": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1 } }, @@ -3513,9 +3824,15 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../locales/settings-shared-copy": 1, - "./settings-nav": 1, + "./settings-nav": 2, "./settings-surface": 1, + "./tasks-settings-page": 1, + "./ui-locale-update-gate": 1, + "@maka/core/llm-connections": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -3531,7 +3848,10 @@ "../browser-storage.js": 1, "../locales/settings-navigation-copy.js": 1, "./nav-group-summary.js": 1, - "@maka/ui/icons": 1 + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, + "@maka/ui/icons": 1, + "react": 1 } }, "src/renderer/settings/settings-request-authority.ts": { @@ -3578,7 +3898,8 @@ "actionFactories": [], "dependencyPaths": { "@astryxdesign/core": 1, - "@maka/ui/icons": 1 + "@maka/ui/icons": 1, + "react": 1 } }, "src/renderer/settings/settings-rows.tsx": { @@ -3589,7 +3910,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./settings-section.js": 1 + "./settings-section.js": 1, + "react": 1 } }, "src/renderer/settings/settings-section.tsx": { @@ -3601,7 +3923,8 @@ "actionFactories": [], "dependencyPaths": { "@astryxdesign/core": 1, - "@maka/ui": 1 + "@maka/ui": 1, + "react": 1 } }, "src/renderer/settings/settings-skeleton.tsx": { @@ -3617,7 +3940,8 @@ "../locales/settings-shared-copy.js": 1, "./settings-section.js": 1, "@astryxdesign/core": 1, - "@maka/ui": 1 + "@maka/ui": 1, + "react": 1 } }, "src/renderer/settings/settings-snapshot-cache.ts": { @@ -3627,7 +3951,11 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "../../preload/bridge-contract.js": 1, + "@maka/core/llm-connections": 1, + "@maka/core/settings": 1 + } }, "src/renderer/settings/settings-status-badge.ts": { "bridgePaths": {}, @@ -3680,6 +4008,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, "../../shared/settings-ownership.js": 1, "../browser-storage": 1, "../features/connection-settings": 1, @@ -3709,10 +4038,13 @@ "./settings-snapshot-cache.js": 1, "./subagent-settings-page": 1, "./tasks-settings-page": 1, + "./ui-locale-update-gate": 1, "./usage-settings-page": 1, "./web-search-settings-page": 1, "@astryxdesign/core": 1, - "@maka/core/settings": 1, + "@maka/core/llm-connections": 1, + "@maka/core/settings": 2, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -3726,8 +4058,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/llm-connections": 1, - "@maka/core/provider-registry": 1 + "./settings-status-badge.js": 1, + "@maka/core/llm-connections": 2, + "@maka/core/provider-registry": 1, + "@maka/core/subagent-settings": 1 } }, "src/renderer/settings/subagent-settings-page.tsx": { @@ -3758,6 +4092,8 @@ "./subagent-preset-presentation.js": 1, "@astryxdesign/core": 1, "@maka/core/llm-connections": 1, + "@maka/core/model-thinking": 1, + "@maka/core/settings": 1, "@maka/core/subagent-settings": 1, "@maka/ui": 1, "@maka/ui/icons": 1, @@ -3772,7 +4108,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/session-navigation/index.js": 1 + "../features/session-navigation/index.js": 1, + "@maka/core/session": 1 } }, "src/renderer/settings/tasks-settings-page.tsx": { @@ -3788,6 +4125,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../../preload/bridge-contract.js": 1, + "../features/session-navigation": 1, "../locales/settings-shared-copy.js": 1, "../locales/settings-tasks-copy.js": 1, "./settings-error-copy": 1, @@ -3796,6 +4135,7 @@ "@astryxdesign/core": 1, "@astryxdesign/core/List": 1, "@astryxdesign/core/TextInput": 1, + "@maka/core/project": 1, "@maka/core/relative-time": 1, "@maka/runtime-host/profile-kind": 1, "@maka/ui": 1, @@ -3810,7 +4150,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/ui-locale": 1 + } }, "src/renderer/settings/usage-settings-page.tsx": { "bridgePaths": {}, @@ -3822,9 +4164,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/usage": 2, + "../features/usage": 3, "./settings-error-copy": 1, "./settings-section": 1, + "@maka/core/settings": 1, "@maka/ui": 1 } }, @@ -3868,7 +4211,8 @@ "./relay-thinking-bulk": 1, "./runtime-host-settings-target.js": 1, "./use-action-guard": 1, - "@maka/core/llm-connections": 2, + "./use-oauth-login-flow": 1, + "@maka/core/llm-connections": 3, "@maka/core/model-catalog": 1, "@maka/core/model-thinking": 1, "@maka/core/provider-registry": 1, @@ -3917,7 +4261,9 @@ "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, "./use-action-guard": 1, - "@maka/core/local-memory": 1, + "@maka/core/local-memory": 2, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -3941,6 +4287,8 @@ "../features/connection-settings": 1, "./oauth-login-flow-guard": 1, "./runtime-host-settings-target.js": 1, + "@maka/core/redaction": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -3960,7 +4308,7 @@ "dependencyPaths": { "./optimistic-settings-draft-controller": 1, "@maka/ui": 1, - "react": 1 + "react": 2 } }, "src/renderer/settings/web-search-settings-page.tsx": { @@ -3992,7 +4340,8 @@ "./use-action-guard": 1, "@astryxdesign/core": 1, "@maka/core/search": 1, - "@maka/core/web-search": 1, + "@maka/core/settings": 1, + "@maka/core/web-search": 2, "@maka/ui": 2, "react": 1 } @@ -4004,7 +4353,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session": 1 + } }, "src/renderer/settled-session-transients.ts": { "bridgePaths": {}, @@ -4013,7 +4364,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session": 1, + "@maka/ui": 1 + } }, "src/renderer/shell-chat-model-selection.ts": { "bridgePaths": {}, @@ -4022,7 +4376,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/chat-model-choice": 1 + } }, "src/renderer/shell-run-update-state.ts": { "bridgePaths": {}, @@ -4032,6 +4388,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "@maka/core/events": 1, "@maka/core/shell-run-result": 1 } }, @@ -4052,7 +4409,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1 + "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1, + "@maka/runtime/skill-invocation": 1 } }, "src/renderer/stale-sessions.ts": { @@ -4062,7 +4421,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session-send-projection": 1 + } }, "src/renderer/task-readiness-notice.ts": { "bridgePaths": {}, @@ -4135,7 +4496,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/session": 1, + "@maka/ui": 1 + } }, "src/renderer/turn-footer-actions.ts": { "bridgePaths": {}, @@ -4145,7 +4509,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1 + "./locales/conversation-copy.js": 1, + "@maka/core/session": 1, + "@maka/core/ui-locale": 1 } }, "src/renderer/use-active-execution-boundary.ts": { @@ -4165,6 +4531,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "@maka/core/sandbox-boundary": 1, "react": 1 } }, @@ -4205,6 +4572,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "@maka/core/deep-research-run": 1, "react": 1 } }, @@ -4272,9 +4640,13 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./locales/onboarding-copy.js": 1, + "@maka/core/llm-connections": 1, "@maka/core/onboarding-milestone": 1, "@maka/core/redaction": 1, + "@maka/core/session": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4299,9 +4671,13 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app-shell-project-actions": 1, "./default-runtime-host-operation.js": 1, "./use-stable-actions.js": 1, + "@maka/core/project": 1, + "@maka/core/ui-locale": 1, + "@maka/runtime-host/profile-kind": 1, "react": 1 } }, @@ -4319,6 +4695,8 @@ "actionFactories": [], "dependencyPaths": { "./browser-storage": 1, + "@maka/core/llm-connections": 1, + "@maka/core/settings": 1, "react": 1 } }, @@ -4339,7 +4717,9 @@ "./locales/shell-copy": 1, "./settings/ui-locale-update-gate": 1, "./theme": 1, + "@maka/core/model-thinking": 1, "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4353,10 +4733,18 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./composer-defaults.js": 1, "./locales/conversation-copy.js": 1, "./session-health-notice.js": 1, - "./shell-chat-model-selection.js": 1, + "./shell-chat-model-selection.js": 2, "./use-new-task-choice.js": 1, + "@maka/core/chat-model-choice": 1, + "@maka/core/llm-connections": 1, + "@maka/core/model-thinking": 1, + "@maka/core/session": 1, + "@maka/core/session-send-projection": 1, + "@maka/core/settings": 1, + "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4375,10 +4763,14 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, + "../shared/desktop-connection-snapshot.js": 1, "../shared/runtime-host-identity.js": 1, "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, "./locales/shell-remaining-copy.js": 1, + "@maka/core/connections": 1, + "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4392,8 +4784,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "./live-turn-snapshot.js": 1, "./model-wait-state.js": 1, - "./use-delayed-flag.js": 1 + "./use-delayed-flag.js": 1, + "@maka/core/session": 1 } }, "src/renderer/use-shell-memory-pill.ts": { @@ -4412,6 +4806,7 @@ "dependencyPaths": { "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4428,6 +4823,7 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-copy.js": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4498,6 +4894,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, + "@maka/core/task-submission-readiness": 1, "react": 1 } }, @@ -4538,7 +4936,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../shared/work-board-ipc.js": 1, "@maka/core/work-board": 1, + "@maka/storage/work-board-store": 1, "react": 1 } }, @@ -4561,6 +4961,7 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Button": 1, "@astryxdesign/core/TextInput": 1, + "@maka/core/work-board": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -4574,7 +4975,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./features/workhub/index.js": 1 + "./workhub-route-policy.js": 1, + "@maka/runtime-host/protocol": 1 } }, "src/renderer/workhub-coordination-host-scope.ts": { @@ -4585,7 +4987,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../shared/runtime-host-identity.js": 1 + "../shared/runtime-host-identity.js": 1, + "./workhub-session-port.js": 1 } }, "src/renderer/workhub-coordination-lifecycle.ts": { @@ -4596,6 +4999,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "../shared/runtime-host-identity.js": 1 } }, @@ -4608,8 +5012,21 @@ "actionFactories": [], "dependencyPaths": { "./desktop-transcript-range-store.js": 1, - "./workhub-controller.js": 1, - "@maka/core/session": 1 + "./workhub-controller.js": 2, + "./workhub-session-port.js": 1, + "@maka/core/session": 1, + "@maka/runtime-host/protocol": 1 + } + }, + "src/renderer/workhub-route-policy.ts": { + "bridgePaths": {}, + "environmentCapabilities": {}, + "hookCalls": {}, + "lifecycleMethods": {}, + "unresolvedDependencies": 0, + "actionFactories": [], + "dependencyPaths": { + "./application/contracts/workhub-request-intent.js": 1 } }, "src/renderer/workhub-send-lease.ts": { @@ -4636,9 +5053,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/transcript-contract.js": 1, "../shared/runtime-host-identity.js": 1, "./desktop-transcript-range-store.js": 1, - "./workhub-controller.js": 1, + "./workhub-controller.js": 2, "@maka/core/session": 1 } }, @@ -4654,12 +5072,12 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./features/workhub/index.js": 1, - "./locales/workhub-copy.js": 1, + "./workhub-controller.js": 1, "./workhub-coordination-port.js": 1, "./workhub-send-lease.js": 1, "@astryxdesign/core": 1, "@astryxdesign/core/Button": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4672,7 +5090,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./onboarding-hero-copy.js": 1 + "./onboarding-hero-copy.js": 1, + "@maka/core/onboarding": 1, + "@maka/core/ui-locale": 1 } }, "src/shared/desktop-connection-snapshot.ts": { @@ -4682,7 +5102,10 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/chat-model-choice": 1, + "@maka/core/llm-connections": 1 + } }, "src/shared/desktop-session-projection.ts": { "bridgePaths": {}, @@ -4692,7 +5115,12 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./runtime-host-identity.js": 1 + "./runtime-host-identity.js": 1, + "@maka/core/daily-review": 1, + "@maka/core/events": 1, + "@maka/core/session": 1, + "@maka/core/settings": 1, + "@maka/runtime-host/profile-kind": 1 } }, "src/shared/goal-arm.ts": { @@ -4702,7 +5130,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/runtime/goal-state": 1 + } }, "src/shared/runtime-host-identity.ts": { "bridgePaths": {}, @@ -4731,7 +5161,9 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/core/settings": 1 + } }, "src/shared/work-board-ipc.ts": { "bridgePaths": {}, @@ -4740,13 +5172,15 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": {} + "dependencyPaths": { + "@maka/storage/work-board-store": 1 + } } } }, "rootDebt": { "src/renderer/app.tsx": { - "importDeclarations": 5, + "importDeclarations": 6, "bridgePaths": { "window.maka.appWindow.notifyRendererReady": 1 }, @@ -4762,17 +5196,18 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app-shell": 1, "./astryx-theme-mode": 1, "./astryx-theme/maka": 1, "@astryxdesign/core/theme": 1, "react": 1 }, - "importSpecifiers": 6, + "importSpecifiers": 7, "nonTriviaTokens": 206 }, "src/renderer/main.tsx": { - "importDeclarations": 7, + "importDeclarations": 8, "bridgePaths": { "window.maka.onboarding.getSnapshot": 2 }, @@ -4785,6 +5220,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "../preload/bridge-contract.js": 1, "./app": 1, "./cached-theme-bootstrap": 1, "./composition/desktop-feature-services": 1, @@ -4793,7 +5229,7 @@ "@maka/ui": 1, "react-dom/client": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 8, "nonTriviaTokens": 268 } }, @@ -4813,6 +5249,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { + "@astryxdesign/core/theme": 1, "react": 1 } }, @@ -4875,6 +5312,13 @@ "src/renderer/app-shell.tsx" ] }, + { + "capability": "app-lifecycle", + "targetZone": "application/app-lifecycle", + "legacyPaths": [ + "src/renderer/app-shell-app-update.ts" + ] + }, { "capability": "task-submission-and-composer-drafts", "targetZone": "features/conversation", From 63bc6723a0b6304fb638f7fd06c41fa06208424f Mon Sep 17 00:00:00 2001 From: testikun Date: Fri, 4 Sep 2026 11:43:08 +0800 Subject: [PATCH 04/13] fix(desktop): preserve side chat through pending linked sessions --- .../main/__tests__/workbar-controller.test.ts | 27 +++++++ .../side-conversation-session-family.ts | 80 ++++++++++++------- 2 files changed, 77 insertions(+), 30 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workbar-controller.test.ts b/apps/desktop/src/main/__tests__/workbar-controller.test.ts index e922cd1fdc..453623d2ae 100644 --- a/apps/desktop/src/main/__tests__/workbar-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workbar-controller.test.ts @@ -640,6 +640,33 @@ describe('useWorkbarController', () => { ); }); + it('keeps the previous family surface through a pending child catalog gap', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const child = session('child'); + child.subagent = { parentSessionId: parent.id }; + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(parent, [], [parent]))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(child, [], []))); + assert.equal(controller().host.surfaceKey, parent.id); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + true, + ); + + await act(async () => renderController(root, services, input(child, [], [parent, child]))); + assert.equal(controller().host.surfaceKey, parent.id); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); + }); + it('keeps the family surface mounted when one of multiple source panels closes', async () => { const { root } = installReactRenderer(); const parent = session('parent'); diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts index 4d9d3528cd..18fd59eb3a 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts @@ -17,12 +17,14 @@ * under the License. */ +import type { SessionSummary } from '@maka/core/session'; import { - linkedSubagentParentSessionId, - type SessionSummary, -} from '@maka/core/session'; + collapseSessionRevisions, + projectRevisionLinkedSessionTree, + sessionRevisionFamilyId, +} from '@maka/core/session-revisions'; -type LinkedSession = Pick; +type LinkedSession = SessionSummary; /** * Whether the active Session is the source itself or a linked descendant of @@ -39,15 +41,27 @@ export function isLinkedSideConversationSessionFamily( // before its catalog row arrives. Keep the panel through that refresh; a // missing source is only destructive once navigation has left its id. if (sourceSessionId === activeSession.id) return true; - // A pending active Session has no lineage metadata yet. Do not destroy a - // live Side Chat during that short catalog gap; once the row arrives the - // normal descendant check below decides whether it belongs to this scope. - if (!sessions.some((session) => session.id === activeSession.id)) return true; + // A pending active Session has no catalog lineage yet. The controller keeps + // the previous known family alive during that short gap; this helper itself + // must not retain every panel for an unrelated unknown Session. + if (!sessions.some((session) => session.id === activeSession.id)) return false; const sourceSession = sessions.find((session) => session.id === sourceSessionId); if (!sourceSession) return false; - const sessionsById = new Map(sessions.map((session) => [session.id, session])); - return reachesSession(activeSession, sourceSessionId, sessionsById); + const logicalSessions = collapseSessionRevisions(sessions, activeSession.id); + const representativeByFamilyId = new Map( + logicalSessions.map((session) => [sessionRevisionFamilyId(session), session.id]), + ); + const sourceId = + representativeByFamilyId.get(sessionRevisionFamilyId(sourceSession)) ?? sourceSession.id; + const activeId = + representativeByFamilyId.get(sessionRevisionFamilyId(activeSession)) ?? activeSession.id; + const tree = projectRevisionLinkedSessionTree(sessions, activeSession.id); + const parentByChildId = new Map(); + for (const [parentId, children] of tree.childrenByParentId) { + for (const child of children) parentByChildId.set(child.id, parentId); + } + return reachesSession(activeId, sourceId, parentByChildId); } /** @@ -60,34 +74,40 @@ export function linkedSideConversationFamilyRootId( sessions: readonly LinkedSession[], ): string | undefined { if (!activeSession) return undefined; - const sessionsById = new Map(sessions.map((session) => [session.id, session])); + if (!sessions.some((session) => session.id === activeSession.id)) return undefined; + const logicalSessions = collapseSessionRevisions(sessions, activeSession.id); + const activeRepresentative = + logicalSessions.find( + (session) => sessionRevisionFamilyId(session) === sessionRevisionFamilyId(activeSession), + ) ?? activeSession; + const tree = projectRevisionLinkedSessionTree(sessions, activeSession.id); + const parentByChildId = new Map(); + for (const [parentId, children] of tree.childrenByParentId) { + for (const child of children) parentByChildId.set(child.id, parentId); + } const visited = new Set(); - let current = activeSession; - while (!visited.has(current.id)) { - visited.add(current.id); - const parentSessionId = linkedSubagentParentSessionId(current); - if (!parentSessionId) return current.id; - const parent = sessionsById.get(parentSessionId); - if (!parent) return current.id; - current = parent; + let currentId = activeRepresentative.id; + while (!visited.has(currentId)) { + visited.add(currentId); + const parentId = parentByChildId.get(currentId); + if (!parentId) return currentId; + currentId = parentId; } - return current.id; + return currentId; } function reachesSession( - start: LinkedSession, + startId: string, targetSessionId: string, - sessionsById: ReadonlyMap, + parentByChildId: ReadonlyMap, ): boolean { const visited = new Set(); - let current: LinkedSession | undefined = start; - while (current) { - if (current.id === targetSessionId) return true; - if (visited.has(current.id)) return false; - visited.add(current.id); - const parentSessionId = linkedSubagentParentSessionId(current); - if (!parentSessionId) return false; - current = sessionsById.get(parentSessionId); + let currentId: string | undefined = startId; + while (currentId) { + if (currentId === targetSessionId) return true; + if (visited.has(currentId)) return false; + visited.add(currentId); + currentId = parentByChildId.get(currentId); } return false; } From ebb28895dc9931c5a8b59457aac674f329517576 Mon Sep 17 00:00:00 2001 From: testikun Date: Fri, 4 Sep 2026 12:07:26 +0800 Subject: [PATCH 05/13] test(desktop): refresh renderer architecture baseline --- apps/desktop/renderer-architecture.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/desktop/renderer-architecture.json b/apps/desktop/renderer-architecture.json index 618dfa39c5..17faa6e65f 100644 --- a/apps/desktop/renderer-architecture.json +++ b/apps/desktop/renderer-architecture.json @@ -978,8 +978,8 @@ "@maka/ui/icons": 1, "react": 1 }, - "importSpecifiers": 184, - "nonTriviaTokens": 15684 + "importSpecifiers": 180, + "nonTriviaTokens": 15618 }, "src/renderer/use-app-shell-composer-quotes.ts": { "importDeclarations": 3, From ef15f5fbf1be2922eb0befaf45e948fa730b69bc Mon Sep 17 00:00:00 2001 From: testikun Date: Fri, 4 Sep 2026 12:09:00 +0800 Subject: [PATCH 06/13] fix(desktop): cache linked session family projection --- .../side-conversation-session-family.ts | 67 ++++++++++++++----- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts index 18fd59eb3a..f12d62a82a 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts @@ -26,6 +26,50 @@ import { type LinkedSession = SessionSummary; +interface SessionFamilyProjection { + logicalSessions: readonly LinkedSession[]; + representativeByFamilyId: ReadonlyMap; + parentByChildId: ReadonlyMap; +} + +// Both the stale-panel effect and the active-tab projection ask the same +// family questions during a render. Cache the immutable projection by the +// catalog array and active id so a streaming catalog revision builds the +// revision-aware maps once, rather than once per panel. +const sessionFamilyProjectionCache = new WeakMap< + readonly LinkedSession[], + Map +>(); + +function projectSessionFamily( + sessions: readonly LinkedSession[], + activeId: string, +): SessionFamilyProjection { + const cacheKey = activeId; + const cachedByActiveId = sessionFamilyProjectionCache.get(sessions); + const cached = cachedByActiveId?.get(cacheKey); + if (cached) return cached; + + const logicalSessions = collapseSessionRevisions(sessions, activeId); + const representativeByFamilyId = new Map( + logicalSessions.map((session) => [sessionRevisionFamilyId(session), session.id]), + ); + const tree = projectRevisionLinkedSessionTree(sessions, activeId); + const parentByChildId = new Map(); + for (const [parentId, children] of tree.childrenByParentId) { + for (const child of children) parentByChildId.set(child.id, parentId); + } + const projection: SessionFamilyProjection = { + logicalSessions, + representativeByFamilyId, + parentByChildId, + }; + const nextCache = cachedByActiveId ?? new Map(); + nextCache.set(cacheKey, projection); + if (!cachedByActiveId) sessionFamilyProjectionCache.set(sessions, nextCache); + return projection; +} + /** * Whether the active Session is the source itself or a linked descendant of * the source. Ordinary branches deliberately do not participate: @@ -48,19 +92,14 @@ export function isLinkedSideConversationSessionFamily( const sourceSession = sessions.find((session) => session.id === sourceSessionId); if (!sourceSession) return false; - const logicalSessions = collapseSessionRevisions(sessions, activeSession.id); - const representativeByFamilyId = new Map( - logicalSessions.map((session) => [sessionRevisionFamilyId(session), session.id]), - ); + const { + representativeByFamilyId, + parentByChildId, + } = projectSessionFamily(sessions, activeSession.id); const sourceId = representativeByFamilyId.get(sessionRevisionFamilyId(sourceSession)) ?? sourceSession.id; const activeId = representativeByFamilyId.get(sessionRevisionFamilyId(activeSession)) ?? activeSession.id; - const tree = projectRevisionLinkedSessionTree(sessions, activeSession.id); - const parentByChildId = new Map(); - for (const [parentId, children] of tree.childrenByParentId) { - for (const child of children) parentByChildId.set(child.id, parentId); - } return reachesSession(activeId, sourceId, parentByChildId); } @@ -75,16 +114,14 @@ export function linkedSideConversationFamilyRootId( ): string | undefined { if (!activeSession) return undefined; if (!sessions.some((session) => session.id === activeSession.id)) return undefined; - const logicalSessions = collapseSessionRevisions(sessions, activeSession.id); + const { logicalSessions, parentByChildId } = projectSessionFamily( + sessions, + activeSession.id, + ); const activeRepresentative = logicalSessions.find( (session) => sessionRevisionFamilyId(session) === sessionRevisionFamilyId(activeSession), ) ?? activeSession; - const tree = projectRevisionLinkedSessionTree(sessions, activeSession.id); - const parentByChildId = new Map(); - for (const [parentId, children] of tree.childrenByParentId) { - for (const child of children) parentByChildId.set(child.id, parentId); - } const visited = new Set(); let currentId = activeRepresentative.id; while (!visited.has(currentId)) { From 490e0fa637520a00a7fe0f014bb27a4fa69c9ef0 Mon Sep 17 00:00:00 2001 From: testikun Date: Fri, 4 Sep 2026 14:48:49 +0800 Subject: [PATCH 07/13] test(desktop): cover linked-session side chat continuity --- apps/desktop/e2e/fixtures.ts | 90 +++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 7 deletions(-) diff --git a/apps/desktop/e2e/fixtures.ts b/apps/desktop/e2e/fixtures.ts index 82f06d0436..13f9073c41 100644 --- a/apps/desktop/e2e/fixtures.ts +++ b/apps/desktop/e2e/fixtures.ts @@ -126,7 +126,7 @@ export async function waitForInvocableSkills( * backend (BackendRegistry override in main); this only satisfies the UI * readiness gates. Kept in the fixture so test data stays out of production main. */ -async function seedE2eConnection(userDataDir: string): Promise { +async function seedE2eConnection(userDataDir: string): Promise { const workspaceRoot = path.join(userDataDir, 'workspaces', 'default'); const capability = await resolveStorageRoot({ path: workspaceRoot, kind: 'interactive' }); const owner = await tryAcquireInteractiveRootOwner(capability); @@ -183,6 +183,7 @@ async function seedE2eConnection(userDataDir: string): Promise { if (defaultTarget.kind !== 'committed') { throw new Error(`E2E default target seed was not committed: ${defaultTarget.kind}`); } + return connection.connectionId; } finally { await owner.close(); } @@ -217,20 +218,28 @@ async function seedRailRenderSessions(userDataDir: string): Promise { } } -async function seedParentRemovalSessions(userDataDir: string): Promise { +async function seedParentRemovalSessions( + userDataDir: string, + connectionId: string, +): Promise { const workspaceRoot = path.join(userDataDir, 'workspaces', 'default'); + const projectRoot = path.join(userDataDir, 'project'); + const now = Date.UTC(2026, 4, 22, 3, 0, 0); + await mkdir(projectRoot, { recursive: true }); const store = createSessionStore(workspaceRoot); try { const parent = await store.create({ - cwd: path.join(userDataDir, 'project'), + cwd: projectRoot, + llmConnectionId: connectionId, llmConnectionSlug: 'e2e', model: 'claude-sonnet-4-5-20250929', permissionMode: 'ask', name: PARENT_REMOVAL_PARENT_NAME, labels: [], }); - await store.createSubagent({ - cwd: path.join(userDataDir, 'project'), + const child = await store.createSubagent({ + cwd: projectRoot, + llmConnectionId: connectionId, llmConnectionSlug: 'e2e', model: 'claude-sonnet-4-5-20250929', permissionMode: 'ask', @@ -263,6 +272,70 @@ async function seedParentRemovalSessions(userDataDir: string): Promise { initialRunId: 'e2e-child-run', }, }); + await store.appendMessages(parent.id, [ + { + type: 'user', + id: 'e2e-parent-user', + turnId: 'e2e-parent-turn', + ts: now - 2_000, + text: '请让实现子任务检查侧边对话的保留行为。', + }, + { + type: 'tool_call', + id: 'e2e-spawn-call', + turnId: 'e2e-parent-turn', + ts: now - 1_900, + toolName: 'spawn_subagent', + displayName: 'Implementation', + intent: '检查侧边对话在父子任务间的连续性', + args: {}, + }, + { + type: 'tool_result', + id: 'e2e-spawn-result', + turnId: 'e2e-parent-turn', + ts: now - 1_800, + toolUseId: 'e2e-spawn-call', + isError: false, + content: { + kind: 'subagent', + childSessionId: child.header.id, + agentId: 'implementation', + agentName: 'Implementation', + turnId: 'e2e-child-turn', + runId: 'e2e-child-run', + status: 'completed', + permissionMode: 'ask', + summary: '已完成侧边对话连续性检查', + artifactIds: [], + }, + }, + { + type: 'assistant', + id: 'e2e-parent-assistant', + turnId: 'e2e-parent-turn', + ts: now - 1_700, + text: '实现子任务已完成检查。', + modelId: 'claude-sonnet-4-5-20250929', + }, + ]); + await store.appendMessages(child.header.id, [ + { + type: 'user', + id: 'e2e-child-user', + turnId: 'e2e-child-turn', + ts: now - 1_600, + text: '检查父任务中打开的侧边对话。', + }, + { + type: 'assistant', + id: 'e2e-child-assistant', + turnId: 'e2e-child-turn', + ts: now - 1_500, + text: '已确认切换到子任务后,父任务的侧边对话应继续保留。', + modelId: 'claude-sonnet-4-5-20250929', + }, + ]); } finally { await store.close?.(); } @@ -433,8 +506,11 @@ async function withE2eWindow( const mainLogs: string[] = []; const rendererLogs: string[] = []; try { - if (seed) await seedE2eConnection(userDataDir); - if (parentRemovalSessions) await seedParentRemovalSessions(userDataDir); + const e2eConnectionId = seed ? await seedE2eConnection(userDataDir) : undefined; + if (parentRemovalSessions) { + if (!e2eConnectionId) throw new Error('Parent-removal fixture requires a seeded connection'); + await seedParentRemovalSessions(userDataDir, e2eConnectionId); + } if (railRenderSessions) await seedRailRenderSessions(userDataDir); if (invocableSkills) await seedE2eInvocableSkills(userDataDir); if (gitReviewExtraFiles !== undefined) { From 5d216a6fec8f0cb56578f6e920537b4eb314df3d Mon Sep 17 00:00:00 2001 From: testikun Date: Sat, 5 Sep 2026 09:57:30 +0800 Subject: [PATCH 08/13] chore(desktop): refresh renderer architecture ledger after rebase --- apps/desktop/renderer-architecture.json | 855 ++++++------------------ 1 file changed, 193 insertions(+), 662 deletions(-) diff --git a/apps/desktop/renderer-architecture.json b/apps/desktop/renderer-architecture.json index 17faa6e65f..1434149400 100644 --- a/apps/desktop/renderer-architecture.json +++ b/apps/desktop/renderer-architecture.json @@ -120,7 +120,6 @@ "src/renderer/session-message-settlement.ts", "src/renderer/session-read-state.ts", "src/renderer/session-status-presentation.ts", - "src/renderer/session-trace-refresh.ts", "src/renderer/session-workspace-actions.ts", "src/renderer/session-workspace-errors.ts", "src/renderer/settings/about-settings-page.tsx", @@ -273,7 +272,6 @@ "src/renderer/features/workbar/model/workbar-layout.ts -> src/renderer/browser-storage", "src/renderer/features/workbar/model/workbar-tabs.ts -> src/renderer/browser-storage", "src/renderer/features/workbar/tools/artifacts/artifact-pane.tsx -> src/renderer/open-path", - "src/renderer/features/workbar/tools/inspector/use-session-trace.ts -> src/renderer/session-trace-refresh", "src/renderer/features/workbar/tools/side-chat/quote-companion-core.ts -> src/renderer/model-connection-errors", "src/renderer/features/workbar/tools/side-chat/quote-companion-core.ts -> src/renderer/session-copy-attempt", "src/renderer/features/workbar/tools/side-chat/quote-companion-panel.tsx -> src/renderer/attachment-preflight", @@ -289,25 +287,31 @@ "legacyPlatformImports": [ "src/renderer/platform/desktop/create-workbar-services.ts -> src/renderer/session-message-settlement" ], + "controllerOwners": [ + { + "implementation": "src/renderer/features/module-hub/controller/use-module-hub-controller.ts", + "symbol": "useModuleHubController", + "owner": "src/renderer/features/module-hub/ui/module-hub-provider.tsx", + "ownerSymbol": "ModuleHubProvider", + "count": 1 + } + ], "legacyAppShell": { "files": { "src/renderer/app-shell-app-update.ts": { - "importDeclarations": 2, + "importDeclarations": 0, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "@maka/ui": 1 - }, - "importSpecifiers": 2, + "dependencyPaths": {}, + "importSpecifiers": 0, "nonTriviaTokens": 92 }, "src/renderer/app-shell-chat-actions.ts": { - "importDeclarations": 25, + "importDeclarations": 9, "bridgePaths": { "window.maka.newTasks.create": 1, "window.maka.sessions.remove": 1, @@ -323,33 +327,17 @@ "createAppShellChatActions" ], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app-shell-copy.js": 1, - "./app-shell-session-ui-state.js": 1, "./attachment-preflight.js": 1, "./composer-attachments.js": 1, - "./desktop-transcript-range-store.js": 1, "./locales/shell-copy.js": 1, "./model-connection-errors.js": 1, - "./session-message-settlement.js": 1, - "./session-workspace-actions.js": 1, "./session-workspace-errors.js": 1, "./skill-invocation-feedback.js": 1, - "@maka/core/collaboration": 1, - "@maka/core/events": 2, - "@maka/core/model-thinking": 1, - "@maka/core/orchestration": 1, - "@maka/core/runtime-inputs": 1, - "@maka/core/sandbox-boundary": 1, - "@maka/core/session": 1, "@maka/core/session-name": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/core/user-question": 1, - "@maka/runtime/skill-invocation": 1, "@maka/ui": 1 }, - "importSpecifiers": 38, + "importSpecifiers": 16, "nonTriviaTokens": 4086 }, "src/renderer/app-shell-chrome-actions.tsx": { @@ -373,7 +361,7 @@ "nonTriviaTokens": 408 }, "src/renderer/app-shell-command-actions.ts": { - "importDeclarations": 16, + "importDeclarations": 7, "bridgePaths": { "window.maka.connections.setDefault": 1, "window.maka.connections.test": 1, @@ -392,28 +380,19 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/diagnostics-contract.js": 1, "./app-shell-copy.js": 1, - "./application/contracts/session-start-mode.js": 1, "./command-palette-commands.js": 1, - "./command-palette-types.js": 1, "./conversation-markdown.js": 1, "./default-runtime-host-operation.js": 1, "./locales/settings-test-result-copy.js": 1, "./locales/shell-copy.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/permission": 1, - "@maka/core/session": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 22, + "importSpecifiers": 11, "nonTriviaTokens": 2307 }, "src/renderer/app-shell-context-compaction.ts": { - "importDeclarations": 4, + "importDeclarations": 1, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, @@ -421,16 +400,13 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1, - "@maka/core/events": 1, - "@maka/core/ui-locale": 1, - "@maka/runtime-host/protocol": 1 + "./locales/shell-copy.js": 1 }, - "importSpecifiers": 4, + "importSpecifiers": 1, "nonTriviaTokens": 612 }, "src/renderer/app-shell-copy.ts": { - "importDeclarations": 5, + "importDeclarations": 2, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, @@ -439,30 +415,25 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-copy.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/redaction": 1, - "@maka/core/text-file-import": 1, - "@maka/core/ui-locale": 1 + "@maka/core/redaction": 1 }, - "importSpecifiers": 6, - "nonTriviaTokens": 515 + "importSpecifiers": 2, + "nonTriviaTokens": 504 }, "src/renderer/app-shell-detail-panel.tsx": { - "importDeclarations": 1, + "importDeclarations": 0, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": {}, "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "react": 1 - }, - "importSpecifiers": 1, + "dependencyPaths": {}, + "importSpecifiers": 0, "nonTriviaTokens": 87 }, "src/renderer/app-shell-e2e-fixture.ts": { - "importDeclarations": 6, + "importDeclarations": 1, "bridgePaths": { "window.maka.e2eFixture.getState": 1 }, @@ -476,18 +447,13 @@ "createAppShellE2eFixtureActions" ], "dependencyPaths": { - "./features/workbar": 1, - "./theme": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1, - "react": 1 + "./theme": 1 }, "importSpecifiers": 1, "nonTriviaTokens": 666 }, "src/renderer/app-shell-effects.ts": { - "importDeclarations": 23, + "importDeclarations": 12, "bridgePaths": { "window.maka.app.info": 1, "window.maka.appWindow.subscribeCommand": 1, @@ -523,33 +489,24 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "../shared/runtime-host-identity.js": 1, "./app-shell-copy": 1, "./browser-storage": 1, "./desktop-transcript-range-store.js": 1, "./locales/conversation-copy.js": 1, - "./nav-selection.js": 1, "./session-event-health": 1, "./shell-run-update-state.js": 1, "./theme": 1, "./titlebar-modal-sync": 1, "@astryxdesign/core/hooks": 1, - "@maka/core/connections": 1, - "@maka/core/events": 2, - "@maka/core/redaction": 1, - "@maka/core/session": 1, - "@maka/core/session-event-health": 2, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1, + "@maka/core/session-event-health": 1, "react": 1 }, - "importSpecifiers": 37, - "nonTriviaTokens": 3823 + "importSpecifiers": 20, + "nonTriviaTokens": 3816 }, "src/renderer/app-shell-overlays.tsx": { - "importDeclarations": 14, + "importDeclarations": 8, "bridgePaths": {}, "environmentCapabilities": { "window": 2, @@ -567,27 +524,21 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app-shell-command-actions": 1, "./command-palette": 1, "./keyboard-help": 1, "./locales/shell-remaining-copy.js": 1, "./settings/settings-modal": 1, - "./settings/tasks-settings-page": 1, - "./settings/ui-locale-update-gate": 1, "@astryxdesign/core/hooks": 1, "@astryxdesign/core/Spinner": 1, - "@maka/core/llm-connections": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 22, + "importSpecifiers": 12, "nonTriviaTokens": 977 }, "src/renderer/app-shell-project-actions.ts": { - "importDeclarations": 9, + "importDeclarations": 5, "bridgePaths": { "window.maka.app.openPath": 4, "window.maka.app.resolveProjectGitInfo": 1, @@ -607,21 +558,17 @@ "createAppShellProjectActions" ], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app-shell-copy": 1, "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, "./open-path": 1, - "./session-workspace-errors": 1, - "@maka/core/project": 1, - "@maka/core/ui-locale": 1, - "react": 1 + "./session-workspace-errors": 1 }, - "importSpecifiers": 15, + "importSpecifiers": 9, "nonTriviaTokens": 2284 }, "src/renderer/app-shell-revision-actions.ts": { - "importDeclarations": 11, + "importDeclarations": 6, "bridgePaths": { "window.maka.sessions.abandonSessionCopy": 2, "window.maka.sessions.reviseBeforeTurn": 1 @@ -634,22 +581,18 @@ "createAppShellRevisionActions" ], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, "./session-copy-attempt.js": 1, "./session-message-settlement.js": 1, - "./session-workspace-actions.js": 1, "./session-workspace-errors.js": 1, - "@maka/core/session": 2, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "@maka/core/session": 1 }, - "importSpecifiers": 17, + "importSpecifiers": 10, "nonTriviaTokens": 2316 }, "src/renderer/app-shell-session-events.ts": { - "importDeclarations": 8, + "importDeclarations": 3, "bridgePaths": {}, "environmentCapabilities": { "requestAnimationFrame": 1, @@ -663,20 +606,15 @@ "createAppShellSessionEventHandlers" ], "dependencyPaths": { - "./app-shell-chat-actions.js": 1, - "./app-shell-session-ui-state.js": 1, "./locales/conversation-copy.js": 1, "./model-connection-errors.js": 1, - "@maka/core/events": 1, - "@maka/core/session": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1 }, - "importSpecifiers": 21, + "importSpecifiers": 12, "nonTriviaTokens": 2974 }, "src/renderer/app-shell-session-start-actions.ts": { - "importDeclarations": 7, + "importDeclarations": 3, "bridgePaths": { "window.maka.newTasks.create": 1, "window.maka.onboarding.setMilestone": 1 @@ -689,15 +627,11 @@ "createAppShellSessionStartActions" ], "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "./application/contracts/session-start-mode.js": 1, "./locales/shell-copy.js": 1, "./model-connection-errors.js": 1, - "./session-workspace-errors.js": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "./session-workspace-errors.js": 1 }, - "importSpecifiers": 11, + "importSpecifiers": 7, "nonTriviaTokens": 650 }, "src/renderer/app-shell-session-ui-state.ts": { @@ -715,7 +649,7 @@ "nonTriviaTokens": 7 }, "src/renderer/app-shell-stop-action.ts": { - "importDeclarations": 4, + "importDeclarations": 2, "bridgePaths": { "window.maka.sessions.stop": 1 }, @@ -727,16 +661,14 @@ "createAppShellStopAction" ], "dependencyPaths": { - "./app-shell-session-ui-state.js": 1, "./locales/conversation-copy.js": 1, - "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1 + "./locales/shell-copy.js": 1 }, - "importSpecifiers": 4, + "importSpecifiers": 2, "nonTriviaTokens": 302 }, "src/renderer/app-shell-turn-actions.ts": { - "importDeclarations": 9, + "importDeclarations": 4, "bridgePaths": { "window.maka.sessions.branchFromTurn": 1, "window.maka.sessions.regenerateTurn": 1 @@ -749,21 +681,16 @@ "createAppShellTurnActions" ], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, "./session-copy-attempt.js": 1, - "./session-workspace-actions.js": 1, - "./session-workspace-errors.js": 1, - "@maka/core/session": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "./session-workspace-errors.js": 1 }, - "importSpecifiers": 10, + "importSpecifiers": 5, "nonTriviaTokens": 650 }, "src/renderer/app-shell-turn-view-model.ts": { - "importDeclarations": 7, + "importDeclarations": 6, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -779,15 +706,14 @@ "./interrupted-resume.js": 1, "./session-status-presentation.js": 1, "./turn-footer-actions.js": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 18, + "importSpecifiers": 11, "nonTriviaTokens": 1408 }, "src/renderer/app-shell.tsx": { - "importDeclarations": 102, + "importDeclarations": 92, "bridgePaths": { "window.maka.app.installUpdate": 1, "window.maka.app.retryUpdateDownload": 1, @@ -846,11 +772,10 @@ "useEffect": 14, "useKeyboardHelp": 1, "useLayoutEffect": 2, - "useModuleHubController": 1, "useNewTaskChoice": 1, "useOnboardingSnapshot": 1, "usePlanModeState": 1, - "useRef": 24, + "useRef": 23, "useSessionCollaborationDialog": 1, "useSessionEventHealthPolling": 1, "useSessionNavigationReads": 1, @@ -877,13 +802,11 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "../preload/transcript-contract.js": 1, "./agent-graph-panel": 1, "./app-shell-app-update": 1, "./app-shell-chat-actions": 1, "./app-shell-chrome-actions": 1, - "./app-shell-command-actions": 1, "./app-shell-context-compaction": 1, "./app-shell-detail-panel": 1, "./app-shell-e2e-fixture": 1, @@ -933,7 +856,6 @@ "./settings/provider-brand-marks": 1, "./settings/provider-display": 1, "./settings/runtime-host-ssh-terminal-dialog.js": 1, - "./settings/tasks-settings-page": 1, "./stale-sessions": 1, "./use-active-execution-boundary": 1, "./use-app-shell-composer-quotes": 1, @@ -964,25 +886,20 @@ "./workspace-readiness-recovery": 1, "@astryxdesign/core/AppShell": 1, "@astryxdesign/core/Button": 1, - "@maka/core/connections": 1, - "@maka/core/events": 1, "@maka/core/onboarding-milestone": 1, - "@maka/core/orchestration": 1, - "@maka/core/project": 1, "@maka/core/session": 1, "@maka/core/session-revisions": 1, - "@maka/core/settings": 1, - "@maka/core/slash-command-catalog": 2, - "@maka/core/ui-locale": 2, + "@maka/core/slash-command-catalog": 1, + "@maka/core/ui-locale": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 }, - "importSpecifiers": 180, - "nonTriviaTokens": 15618 + "importSpecifiers": 147, + "nonTriviaTokens": 15586 }, "src/renderer/use-app-shell-composer-quotes.ts": { - "importDeclarations": 3, + "importDeclarations": 2, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -993,14 +910,13 @@ "actionFactories": [], "dependencyPaths": { "./pending-items.js": 1, - "@maka/core/events": 1, "react": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 5, "nonTriviaTokens": 360 }, "src/renderer/use-app-shell-session-list.ts": { - "importDeclarations": 11, + "importDeclarations": 10, "bridgePaths": { "window.maka.sessions.list": 1 }, @@ -1014,7 +930,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./live-turn-snapshot.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, @@ -1026,11 +941,11 @@ "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 17, + "importSpecifiers": 13, "nonTriviaTokens": 581 }, "src/renderer/use-app-shell-session-ui-reads.ts": { - "importDeclarations": 3, + "importDeclarations": 2, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -1040,15 +955,14 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./app-shell-session-ui-state.js": 1, "./live-turn-snapshot.js": 1, "./use-external-store-selector.js": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 5, "nonTriviaTokens": 322 }, "src/renderer/use-app-shell-session-workspace.ts": { - "importDeclarations": 11, + "importDeclarations": 8, "bridgePaths": {}, "environmentCapabilities": {}, "hookCalls": { @@ -1065,17 +979,14 @@ "dependencyPaths": { "./app-shell-session-ui-state.js": 1, "./bootstrap-selection-lease.js": 1, - "./desktop-transcript-range-store.js": 1, "./new-task-reload-intent.js": 1, "./session-catalog-state.js": 1, "./session-workspace-actions.js": 1, "./use-app-shell-session-list.js": 1, "./use-external-store-selector.js": 1, - "@maka/core/session": 1, - "@maka/ui": 1, "react": 1 }, - "importSpecifiers": 14, + "importSpecifiers": 10, "nonTriviaTokens": 480 } }, @@ -1097,8 +1008,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../shared/runtime-host-identity.js": 1, - "@maka/runtime-host/protocol": 1 + "../shared/runtime-host-identity.js": 1 } }, "src/preload/external-session-import-result.ts": { @@ -1108,9 +1018,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session": 1 - } + "dependencyPaths": {} }, "src/preload/runtime-host-renderer-operations.ts": { "bridgePaths": {}, @@ -1119,9 +1027,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/runtime-host/protocol": 1 - } + "dependencyPaths": {} }, "src/preload/transcript-contract.ts": { "bridgePaths": {}, @@ -1165,10 +1071,6 @@ "@astryxdesign/core/Button": 1, "@astryxdesign/core/EmptyState": 1, "@astryxdesign/core/Spinner": 1, - "@maka/core/ui-locale": 1, - "@maka/runtime-host/client": 1, - "@maka/runtime-host/protocol": 1, - "@maka/runtime/stream-graph-read-model": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -1190,9 +1092,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../preload/bridge-contract.js": 1 - } + "dependencyPaths": {} }, "src/renderer/astryx-theme/type-scale.ts": { "bridgePaths": {}, @@ -1212,8 +1112,7 @@ "actionFactories": [], "dependencyPaths": { "./locales/conversation-copy.js": 1, - "@maka/core/attachments": 1, - "@maka/core/ui-locale": 1 + "@maka/core/attachments": 1 } }, "src/renderer/bootstrap-selection-lease.ts": { @@ -1251,7 +1150,7 @@ "dependencyPaths": { "./composer-mentions.js": 1, "./new-task-reload-intent.js": 1, - "@maka/ui": 2, + "@maka/ui": 1, "react": 1 } }, @@ -1268,22 +1167,15 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./app-shell-session-ui-state": 1, "./chat-recovery-notice": 1, "./locales/conversation-copy": 1, "./locales/shell-copy": 1, "./onboarding-hero": 1, - "./task-readiness-notice": 1, "./use-app-shell-session-ui-reads": 1, "./use-deep-research-run": 1, "./use-external-store-selector": 1, - "./use-shell-chat-model": 1, - "./workspace-readiness-recovery": 1, "@astryxdesign/core": 1, "@maka/core/deep-research": 1, - "@maka/core/llm-connections": 1, - "@maka/core/onboarding": 1, - "@maka/core/settings": 1, "@maka/ui": 1, "react": 1 } @@ -1296,9 +1188,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./use-shell-chat-model": 1, - "@maka/ui": 1, - "react": 1 + "@maka/ui": 1 } }, "src/renderer/command-palette-commands.ts": { @@ -1309,16 +1199,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./command-palette-types.js": 1, "./locales/shell-copy.js": 1, "./settings/settings-nav.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/permission": 1, "@maka/core/provider-registry": 1, - "@maka/core/session": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1, "@maka/ui/icons": 1 } }, @@ -1329,9 +1212,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/ui/icons": 1 - } + "dependencyPaths": {} }, "src/renderer/command-palette.tsx": { "bridgePaths": {}, @@ -1350,7 +1231,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./command-palette-types": 2, "./locales/shell-copy": 1, "@astryxdesign/core/EmptyState": 1, "@astryxdesign/core/hooks": 1, @@ -1367,9 +1247,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/events": 1 - } + "dependencyPaths": {} }, "src/renderer/composer-defaults.ts": { "bridgePaths": {}, @@ -1401,9 +1279,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "@maka/core/settings": 1, - "@maka/runtime/skill-invocation": 1, "react": 1 } }, @@ -1416,8 +1291,7 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-remaining-copy.js": 1, - "@maka/core/session": 2, - "@maka/core/ui-locale": 1, + "@maka/core/session": 1, "@maka/ui": 1 } }, @@ -1428,10 +1302,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/pet": 1, - "@maka/core/session": 1 - } + "dependencyPaths": {} }, "src/renderer/custom-pet-companion.tsx": { "bridgePaths": { @@ -1473,9 +1344,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/daily-review": 2, - "@maka/core/redaction": 1, - "@maka/core/ui-locale": 1 + "@maka/core/daily-review": 1, + "@maka/core/redaction": 1 } }, "src/renderer/default-runtime-host-operation.ts": { @@ -1487,9 +1357,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../preload/bridge-contract.js": 1 - } + "dependencyPaths": {} }, "src/renderer/derive-turn-lineage-badges.ts": { "bridgePaths": {}, @@ -1499,9 +1367,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "./locales/conversation-copy.js": 1 } }, "src/renderer/desktop-execution-boundary-surface.ts": { @@ -1512,8 +1378,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/permission": 1, - "@maka/core/sandbox-boundary": 2 + "@maka/core/sandbox-boundary": 1 } }, "src/renderer/desktop-slash-command.ts": { @@ -1540,7 +1405,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/transcript-contract.js": 1, "../shared/desktop-session-projection.js": 1, "../shared/runtime-host-identity.js": 1, "@maka/core/persisted-value": 1, @@ -1574,7 +1438,6 @@ "dependencyPaths": { "./locales/shell-copy.js": 1, "@maka/core/diagnostic-log": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -1587,9 +1450,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/events": 1 - } + "dependencyPaths": {} }, "src/renderer/interrupted-resume.ts": { "bridgePaths": {}, @@ -1643,10 +1504,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./app-shell-session-ui-state": 1, "./use-app-shell-session-ui-reads": 1, "./use-external-store-selector": 1, - "@maka/core/session": 1, "react": 1 } }, @@ -1658,9 +1517,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./model-wait-state.js": 1, - "./session-event-health.js": 1, - "@maka/ui": 1 + "./session-event-health.js": 1 } }, "src/renderer/local-memory-digest.ts": { @@ -1673,9 +1530,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/local-memory": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/artifact-copy.ts": { "bridgePaths": {}, @@ -1684,9 +1539,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/browser-copy.ts": { "bridgePaths": {}, @@ -1695,9 +1548,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/conversation-copy.ts": { "bridgePaths": {}, @@ -1706,12 +1557,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/connection-readiness": 1, - "@maka/core/model-call-attempt": 1, - "@maka/core/session-send-projection": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/external-session-import-copy.ts": { "bridgePaths": {}, @@ -1720,9 +1566,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/mcp-copy.ts": { "bridgePaths": {}, @@ -1731,9 +1575,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/onboarding-copy.ts": { "bridgePaths": {}, @@ -1742,11 +1584,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../onboarding-hero-copy.js": 1, - "@maka/core/onboarding": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/permission-center-copy.ts": { "bridgePaths": {}, @@ -1755,11 +1593,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/capabilities": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/plan-mode-copy.ts": { "bridgePaths": {}, @@ -1768,10 +1602,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/plan": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/session-collaboration-copy.ts": { "bridgePaths": {}, @@ -1780,9 +1611,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-bot-copy.ts": { "bridgePaths": {}, @@ -1791,11 +1620,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/bot-chat-settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-daily-review-copy.ts": { "bridgePaths": {}, @@ -1804,9 +1629,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-data-copy.ts": { "bridgePaths": {}, @@ -1815,10 +1638,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1, - "@maka/storage/config-transfer": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-health-copy.ts": { "bridgePaths": {}, @@ -1827,11 +1647,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/health": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-memory-copy.ts": { "bridgePaths": {}, @@ -1840,10 +1656,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/local-memory": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-navigation-copy.ts": { "bridgePaths": {}, @@ -1852,11 +1665,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../settings/nav-group-summary.js": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-preferences-copy.ts": { "bridgePaths": {}, @@ -1865,10 +1674,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-projects-copy.ts": { "bridgePaths": {}, @@ -1877,11 +1683,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../../preload/bridge-contract.js": 2, - "@maka/core/ui-locale": 1, - "@maka/runtime-host/operator": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-shared-copy.ts": { "bridgePaths": {}, @@ -1890,9 +1692,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-subagents-copy.ts": { "bridgePaths": {}, @@ -1901,11 +1701,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/model-thinking": 1, - "@maka/core/subagent-settings": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-tasks-copy.ts": { "bridgePaths": {}, @@ -1914,9 +1710,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-test-result-copy.ts": { "bridgePaths": {}, @@ -1925,10 +1719,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-usage-copy.ts": { "bridgePaths": {}, @@ -1937,9 +1728,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/settings-web-search-copy.ts": { "bridgePaths": {}, @@ -1948,10 +1737,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1, - "@maka/core/web-search": 1 - } + "dependencyPaths": {} }, "src/renderer/locales/shell-copy.ts": { "bridgePaths": {}, @@ -1961,12 +1747,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/goal": 1, - "@maka/core/permission": 1, - "@maka/core/redaction": 1, - "@maka/core/settings": 1, - "@maka/core/slash-command-catalog": 1, - "@maka/core/ui-locale": 1 + "@maka/core/redaction": 1 } }, "src/renderer/locales/shell-remaining-copy.ts": { @@ -1976,9 +1757,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/mcp-brand-contrast.ts": { "bridgePaths": {}, @@ -1998,11 +1777,8 @@ "actionFactories": [], "dependencyPaths": { "./mcp-brand-contrast.js": 1, - "./mcp-catalog": 1, "@ant-design/icons-svg/es/asn/DingtalkOutlined.js": 1, - "@ant-design/icons-svg/es/types.js": 1, - "react": 1, - "simple-icons": 2 + "simple-icons": 1 } }, "src/renderer/mcp-catalog.ts": { @@ -2012,10 +1788,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/mcp": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/mcp-command-line.ts": { "bridgePaths": {}, @@ -2045,9 +1818,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/mcp-copy.js": 1, "./mcp-command-line.js": 1, - "@maka/core/mcp": 2 + "@maka/core/mcp": 1 } }, "src/renderer/mcp-page.tsx": { @@ -2093,7 +1865,7 @@ "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, "@astryxdesign/core/MetadataList": 1, - "@maka/core/mcp": 2, + "@maka/core/mcp": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2108,9 +1880,8 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-remaining-copy.js": 1, - "@maka/core/llm-connections": 2, - "@maka/core/model-catalog": 1, - "@maka/core/ui-locale": 1 + "@maka/core/llm-connections": 1, + "@maka/core/model-catalog": 1 } }, "src/renderer/model-connection-errors.ts": { @@ -2124,10 +1895,7 @@ "./application/contracts/connection-error-cleaner.js": 1, "./locales/conversation-copy.js": 1, "./locales/shell-copy.js": 1, - "./session-error-presentation.js": 1, - "@maka/core/connection-readiness": 1, - "@maka/core/events": 1, - "@maka/core/ui-locale": 1 + "./session-error-presentation.js": 1 } }, "src/renderer/model-wait-state.ts": { @@ -2147,8 +1915,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./browser-storage.js": 1, - "@maka/ui": 1 + "./browser-storage.js": 1 } }, "src/renderer/new-task-reload-intent.ts": { @@ -2179,9 +1946,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/onboarding-copy.js": 1, - "@maka/core/onboarding": 1, - "@maka/core/ui-locale": 1 + "./locales/onboarding-copy.js": 1 } }, "src/renderer/onboarding-hero.tsx": { @@ -2199,12 +1964,8 @@ "./onboarding-provider-types": 1, "./settings/provider-display": 1, "@astryxdesign/core": 1, - "@maka/core/llm-connections": 1, - "@maka/core/onboarding": 1, - "@maka/core/settings": 1, "@maka/ui": 1, - "@maka/ui/icons": 1, - "react": 1 + "@maka/ui/icons": 1 } }, "src/renderer/onboarding-provider-types.ts": { @@ -2214,9 +1975,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/llm-connections": 1 - } + "dependencyPaths": {} }, "src/renderer/open-path.ts": { "bridgePaths": {}, @@ -2226,8 +1985,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1 + "./locales/shell-copy.js": 1 } }, "src/renderer/pending-items.ts": { @@ -2246,10 +2004,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/permission": 1, - "@maka/core/session": 1 - } + "dependencyPaths": {} }, "src/renderer/plan-mode-panel.tsx": { "bridgePaths": { @@ -2276,9 +2031,6 @@ "./locales/plan-mode-copy.js": 1, "@astryxdesign/core/Banner": 1, "@astryxdesign/core/Collapsible": 1, - "@maka/core/events": 1, - "@maka/core/plan": 1, - "@maka/core/session": 1, "@maka/ui": 1, "react": 1 } @@ -2312,7 +2064,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./locales/shell-copy.js": 1, "@astryxdesign/core/Button": 1, "@astryxdesign/core/Dialog": 1, @@ -2320,7 +2071,6 @@ "@astryxdesign/core/Layout": 1, "@astryxdesign/core/Stack": 1, "@astryxdesign/core/Text": 1, - "@maka/core/project": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2351,7 +2101,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./observable-state.js": 1, "react": 1 } @@ -2386,7 +2135,6 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, - "@maka/runtime-host/protocol": 1, "@maka/ui": 1, "react": 1 } @@ -2410,8 +2158,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1, - "@maka/core/ui-locale": 1 + "./locales/conversation-copy.js": 1 } }, "src/renderer/session-event-health.ts": { @@ -2422,10 +2169,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/session": 1, - "@maka/core/session-event-health": 2, - "@maka/core/tool-result-status": 1, - "@maka/ui": 1 + "@maka/core/session-event-health": 1, + "@maka/core/tool-result-status": 1 } }, "src/renderer/session-health-notice.ts": { @@ -2436,10 +2181,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/session-send-projection": 1, - "@maka/core/ui-locale": 1 + "./locales/conversation-copy.js": 1 } }, "src/renderer/session-message-settlement.ts": { @@ -2455,9 +2197,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "./desktop-transcript-range-store.js": 1, - "@maka/core/session": 1 + "./desktop-transcript-range-store.js": 1 } }, "src/renderer/session-read-state.ts": { @@ -2467,9 +2207,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session": 1 - } + "dependencyPaths": {} }, "src/renderer/session-status-presentation.ts": { "bridgePaths": {}, @@ -2481,20 +2219,7 @@ "dependencyPaths": { "./locales/conversation-copy.js": 1, "./session-error-presentation.js": 1, - "@maka/core/sandbox-boundary": 1, - "@maka/core/session": 1, - "@maka/core/ui-locale": 1 - } - }, - "src/renderer/session-trace-refresh.ts": { - "bridgePaths": {}, - "environmentCapabilities": {}, - "hookCalls": {}, - "lifecycleMethods": {}, - "unresolvedDependencies": 0, - "actionFactories": [], - "dependencyPaths": { - "@maka/core/events": 1 + "@maka/core/sandbox-boundary": 1 } }, "src/renderer/session-workspace-actions.ts": { @@ -2507,12 +2232,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./desktop-transcript-range-store.js": 1, "./new-task-reload-intent.js": 1, "./transient-message-projection.js": 1, - "@maka/core/session": 1, - "@maka/runtime-host/protocol": 1, - "@maka/ui": 1 + "@maka/runtime-host/protocol": 1 } }, "src/renderer/session-workspace-errors.ts": { @@ -2523,9 +2245,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "./locales/shell-copy.js": 1 } }, "src/renderer/settings/about-settings-page.tsx": { @@ -2549,7 +2269,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../default-runtime-host-operation.js": 1, "../locales/settings-preferences-copy.js": 1, "./about-update-status.js": 1, @@ -2570,10 +2289,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../../preload/bridge-contract.js": 1, - "../locales/settings-preferences-copy.js": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/action-guard.ts": { "bridgePaths": {}, @@ -2640,10 +2356,8 @@ "./password-input": 1, "./settings-section": 1, "@astryxdesign/core": 1, - "@maka/core/bot-chat-settings": 1, "@maka/core/bot-onboarding": 1, "@maka/core/settings": 1, - "@maka/runtime/bots": 1, "@maka/ui": 2, "@maka/ui/icons": 1, "react": 1 @@ -2664,12 +2378,9 @@ "./bot-settings-view-model": 1, "./settings-section": 1, "@astryxdesign/core": 1, - "@maka/core/bot-chat-settings": 1, "@maka/core/settings": 1, - "@maka/runtime/bots": 1, "@maka/ui": 2, - "@maka/ui/icons": 1, - "react": 1 + "@maka/ui/icons": 1 } }, "src/renderer/settings/bot-chat-settings-page.tsx": { @@ -2699,10 +2410,6 @@ "./bot-chat-overview": 1, "./bot-chat-shared": 1, "./settings-error-copy": 1, - "@maka/core/bot-chat-settings": 1, - "@maka/core/bot-onboarding": 1, - "@maka/core/settings": 1, - "@maka/runtime/bots": 1, "@maka/ui": 1, "react": 1 } @@ -2716,9 +2423,6 @@ "actionFactories": [], "dependencyPaths": { "../locales/settings-bot-copy": 1, - "@maka/core/bot-chat-settings": 1, - "@maka/core/ui-locale": 1, - "@maka/runtime/bots": 1, "@maka/ui": 1 } }, @@ -2750,7 +2454,6 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, - "@maka/core/bot-onboarding": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2764,9 +2467,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/bot-chat-settings": 1, - "@maka/core/bot-events": 1, - "@maka/runtime/bots": 1 + "@maka/core/bot-events": 1 } }, "src/renderer/settings/bot-wechat-login.tsx": { @@ -2793,8 +2494,6 @@ "@astryxdesign/core/Collapsible": 1, "@astryxdesign/core/Dialog": 1, "@astryxdesign/core/Layout": 1, - "@maka/core/bot-chat-settings": 1, - "@maka/runtime/bots": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -2816,9 +2515,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/pet": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/custom-pet-settings-section.tsx": { "bridgePaths": { @@ -2879,8 +2576,6 @@ "./settings-skeleton": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, - "@maka/core/daily-review": 1, - "@maka/core/llm-connections": 1, "@maka/ui": 1, "react": 1 } @@ -2916,7 +2611,6 @@ "./settings-rows": 1, "./settings-section": 1, "./use-action-guard": 1, - "@maka/storage/config-transfer": 1, "@maka/ui": 1, "react": 1 } @@ -2940,7 +2634,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/connection-settings": 1, "../features/network-proxy/index.js": 1, "../locales/settings-preferences-copy.js": 1, "../locales/settings-shared-copy.js": 1, @@ -2951,15 +2644,12 @@ "./provider-brand-marks": 1, "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, - "./settings-resource-state.js": 1, "./settings-section": 1, "./settings-skeleton.js": 1, "./use-action-guard": 1, "./use-optimistic-settings-draft": 1, "@maka/core/chat-model-choice": 1, - "@maka/core/llm-connections": 1, "@maka/core/model-thinking": 1, - "@maka/core/settings": 3, "@maka/ui": 2, "react": 1 } @@ -2986,7 +2676,7 @@ "./settings-skeleton": 1, "./settings-status-summary-filter": 1, "@astryxdesign/core": 1, - "@maka/core/health": 2, + "@maka/core/health": 1, "@maka/ui": 2, "react": 1 } @@ -3013,8 +2703,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, - "../../preload/external-session-catalog.js": 1, "../locales/external-session-import-copy.js": 1, "../locales/shell-copy.js": 1, "./runtime-host-settings-target.js": 1, @@ -3042,10 +2730,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../locales/settings-memory-copy": 1, "./memory-settings-labels": 1, "@astryxdesign/core": 1, - "@maka/core/local-memory": 1, "@maka/ui": 1 } }, @@ -3056,11 +2742,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../locales/settings-memory-copy": 1, - "@maka/core/local-memory": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/memory-settings-page.tsx": { "bridgePaths": {}, @@ -3081,7 +2763,6 @@ "./memory-settings-sections": 1, "./settings-section": 1, "./use-memory-settings-controller": 1, - "@maka/core/settings": 1, "@maka/ui": 2, "@maka/ui/icons": 1, "react": 1 @@ -3095,7 +2776,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../locales/settings-memory-copy": 1, "./settings-section": 1, "@maka/ui": 1 } @@ -3110,8 +2790,7 @@ "dependencyPaths": { "../locales/settings-memory-copy.js": 1, "./memory-settings-labels.js": 1, - "@maka/core/local-memory": 2, - "@maka/core/settings": 1, + "@maka/core/local-memory": 1, "@maka/ui": 1 } }, @@ -3205,9 +2884,8 @@ "./settings-status-summary-filter": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, - "@maka/core/capabilities": 2, - "@maka/core/ui-locale": 1, - "@maka/ui": 3, + "@maka/core/capabilities": 1, + "@maka/ui": 2, "@maka/ui/icons": 1, "react": 1 } @@ -3238,9 +2916,6 @@ "./settings-expandable-row": 1, "./settings-section": 1, "./settings-skeleton.js": 1, - "@astryxdesign/core": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -3271,7 +2946,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../locales/settings-projects-copy.js": 1, "../locales/settings-shared-copy.js": 1, "../project-path-display.js": 1, @@ -3283,8 +2957,6 @@ "./settings-section": 1, "./use-action-guard": 1, "@astryxdesign/core": 1, - "@maka/core/project": 1, - "@maka/core/settings": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -3312,7 +2984,7 @@ "./use-action-guard": 1, "@astryxdesign/core": 1, "@astryxdesign/core/Collapsible": 1, - "@maka/core/llm-connections": 3, + "@maka/core/llm-connections": 2, "@maka/ui": 1, "react": 1 } @@ -3344,7 +3016,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/llm-connections": 2 + "@maka/core/llm-connections": 1 } }, "src/renderer/settings/provider-brand-marks.tsx": { @@ -3379,8 +3051,6 @@ "../assets/provider-brands/xiaomimimo.svg": 1, "../assets/provider-brands/zai.svg": 1, "../assets/provider-brands/zenmux.svg": 1, - "@maka/core/llm-connections": 1, - "react": 1, "simple-icons": 1 } }, @@ -3411,11 +3081,11 @@ "environmentCapabilities": {}, "hookCalls": { "useConnectionDetail": 1, - "useEffect": 2, + "useEffect": 1, "useMountedRef": 2, "useOAuthLoginFlow": 1, "useRuntimeHostSettingsErrorReporter": 2, - "useState": 8, + "useState": 7, "useToast": 2, "useUiLocale": 3 }, @@ -3451,10 +3121,7 @@ "actionFactories": [], "dependencyPaths": { "../features/connection-settings/index.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/provider-registry": 1, - "@maka/core/ui-locale": 1, - "@maka/ui": 1 + "@maka/core/provider-registry": 1 } }, "src/renderer/settings/provider-display-copy.ts": { @@ -3464,10 +3131,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/llm-connections": 1, - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/provider-display.tsx": { "bridgePaths": {}, @@ -3478,8 +3142,7 @@ "actionFactories": [], "dependencyPaths": { "./provider-brand-marks": 1, - "./provider-display-copy": 1, - "@maka/core/llm-connections": 1 + "./provider-display-copy": 1 } }, "src/renderer/settings/provider-endpoint-presentation.ts": { @@ -3509,12 +3172,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../features/connection-settings": 1, "./runtime-host-settings-target.js": 1, "./use-oauth-login-flow": 1, "@astryxdesign/core": 1, - "@maka/core/llm-connections": 1, "@maka/ui": 1, "react": 1 } @@ -3537,7 +3198,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/connection-settings": 2, + "../features/connection-settings": 1, "./provider-catalog-page": 1, "./provider-connection-detail": 1, "./provider-connection-status": 1, @@ -3573,9 +3234,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/model-thinking": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/request-customization-editor.tsx": { "bridgePaths": {}, @@ -3587,7 +3246,6 @@ "dependencyPaths": { "./password-input": 1, "@astryxdesign/core": 1, - "@maka/core/llm-connections": 1, "@maka/core/runtime-policy": 1, "@maka/ui": 1, "@maka/ui/icons": 1 @@ -3600,9 +3258,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "react": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/runtime-host-management-dialog.tsx": { "bridgePaths": { @@ -3632,7 +3288,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../../shared/runtime-host-project-directory-policy.js": 1, "../features/runtime-host-management": 1, "../locales/settings-projects-copy.js": 1, @@ -3667,7 +3322,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../../shared/runtime-host-project-directory-policy.js": 1, "../locales/settings-projects-copy.js": 1, "./runtime-host-project-directory-editor.js": 1, @@ -3704,7 +3358,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../features/runtime-host-management": 1, "../features/session-collaboration": 1, "../locales/session-collaboration-copy.js": 1, @@ -3715,7 +3368,6 @@ "./settings-error-copy.js": 1, "./settings-section.js": 1, "@astryxdesign/core": 1, - "@maka/runtime-host/client": 1, "@maka/runtime-host/protocol": 1, "@maka/ui": 1, "@maka/ui/icons": 1, @@ -3730,7 +3382,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../locales/settings-projects-copy.js": 1, "@maka/runtime-host/protocol": 1, "@maka/ui": 1 } @@ -3745,7 +3396,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "@maka/ui": 1, "react": 1 } @@ -3772,7 +3422,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../locales/settings-projects-copy.js": 1, "../theme": 1, "@astryxdesign/core/Dialog": 1, @@ -3793,7 +3442,6 @@ "dependencyPaths": { "../locales/settings-shared-copy.js": 1, "@maka/core/redaction": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1 } }, @@ -3824,15 +3472,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../locales/settings-shared-copy": 1, - "./settings-nav": 2, + "./settings-nav": 1, "./settings-surface": 1, - "./tasks-settings-page": 1, - "./ui-locale-update-gate": 1, - "@maka/core/llm-connections": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -3848,10 +3490,7 @@ "../browser-storage.js": 1, "../locales/settings-navigation-copy.js": 1, "./nav-group-summary.js": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, - "@maka/ui/icons": 1, - "react": 1 + "@maka/ui/icons": 1 } }, "src/renderer/settings/settings-request-authority.ts": { @@ -3898,8 +3537,7 @@ "actionFactories": [], "dependencyPaths": { "@astryxdesign/core": 1, - "@maka/ui/icons": 1, - "react": 1 + "@maka/ui/icons": 1 } }, "src/renderer/settings/settings-rows.tsx": { @@ -3910,8 +3548,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./settings-section.js": 1, - "react": 1 + "./settings-section.js": 1 } }, "src/renderer/settings/settings-section.tsx": { @@ -3923,8 +3560,7 @@ "actionFactories": [], "dependencyPaths": { "@astryxdesign/core": 1, - "@maka/ui": 1, - "react": 1 + "@maka/ui": 1 } }, "src/renderer/settings/settings-skeleton.tsx": { @@ -3940,8 +3576,7 @@ "../locales/settings-shared-copy.js": 1, "./settings-section.js": 1, "@astryxdesign/core": 1, - "@maka/ui": 1, - "react": 1 + "@maka/ui": 1 } }, "src/renderer/settings/settings-snapshot-cache.ts": { @@ -3951,11 +3586,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "../../preload/bridge-contract.js": 1, - "@maka/core/llm-connections": 1, - "@maka/core/settings": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/settings-status-badge.ts": { "bridgePaths": {}, @@ -4008,7 +3639,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, "../../shared/settings-ownership.js": 1, "../browser-storage": 1, "../features/connection-settings": 1, @@ -4038,13 +3668,10 @@ "./settings-snapshot-cache.js": 1, "./subagent-settings-page": 1, "./tasks-settings-page": 1, - "./ui-locale-update-gate": 1, "./usage-settings-page": 1, "./web-search-settings-page": 1, "@astryxdesign/core": 1, - "@maka/core/llm-connections": 1, - "@maka/core/settings": 2, - "@maka/core/ui-locale": 1, + "@maka/core/settings": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -4058,10 +3685,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./settings-status-badge.js": 1, - "@maka/core/llm-connections": 2, - "@maka/core/provider-registry": 1, - "@maka/core/subagent-settings": 1 + "@maka/core/llm-connections": 1, + "@maka/core/provider-registry": 1 } }, "src/renderer/settings/subagent-settings-page.tsx": { @@ -4092,8 +3717,6 @@ "./subagent-preset-presentation.js": 1, "@astryxdesign/core": 1, "@maka/core/llm-connections": 1, - "@maka/core/model-thinking": 1, - "@maka/core/settings": 1, "@maka/core/subagent-settings": 1, "@maka/ui": 1, "@maka/ui/icons": 1, @@ -4108,8 +3731,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/session-navigation/index.js": 1, - "@maka/core/session": 1 + "../features/session-navigation/index.js": 1 } }, "src/renderer/settings/tasks-settings-page.tsx": { @@ -4125,8 +3747,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../../preload/bridge-contract.js": 1, - "../features/session-navigation": 1, "../locales/settings-shared-copy.js": 1, "../locales/settings-tasks-copy.js": 1, "./settings-error-copy": 1, @@ -4135,7 +3755,6 @@ "@astryxdesign/core": 1, "@astryxdesign/core/List": 1, "@astryxdesign/core/TextInput": 1, - "@maka/core/project": 1, "@maka/core/relative-time": 1, "@maka/runtime-host/profile-kind": 1, "@maka/ui": 1, @@ -4150,9 +3769,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/ui-locale": 1 - } + "dependencyPaths": {} }, "src/renderer/settings/usage-settings-page.tsx": { "bridgePaths": {}, @@ -4164,10 +3781,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../features/usage": 3, + "../features/usage": 2, "./settings-error-copy": 1, "./settings-section": 1, - "@maka/core/settings": 1, "@maka/ui": 1 } }, @@ -4211,8 +3827,7 @@ "./relay-thinking-bulk": 1, "./runtime-host-settings-target.js": 1, "./use-action-guard": 1, - "./use-oauth-login-flow": 1, - "@maka/core/llm-connections": 3, + "@maka/core/llm-connections": 2, "@maka/core/model-catalog": 1, "@maka/core/model-thinking": 1, "@maka/core/provider-registry": 1, @@ -4261,9 +3876,7 @@ "./runtime-host-settings-target.js": 1, "./settings-error-copy": 1, "./use-action-guard": 1, - "@maka/core/local-memory": 2, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, + "@maka/core/local-memory": 1, "@maka/ui": 1, "react": 1 } @@ -4287,8 +3900,6 @@ "../features/connection-settings": 1, "./oauth-login-flow-guard": 1, "./runtime-host-settings-target.js": 1, - "@maka/core/redaction": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4308,7 +3919,7 @@ "dependencyPaths": { "./optimistic-settings-draft-controller": 1, "@maka/ui": 1, - "react": 2 + "react": 1 } }, "src/renderer/settings/web-search-settings-page.tsx": { @@ -4340,8 +3951,7 @@ "./use-action-guard": 1, "@astryxdesign/core": 1, "@maka/core/search": 1, - "@maka/core/settings": 1, - "@maka/core/web-search": 2, + "@maka/core/web-search": 1, "@maka/ui": 2, "react": 1 } @@ -4353,9 +3963,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session": 1 - } + "dependencyPaths": {} }, "src/renderer/settled-session-transients.ts": { "bridgePaths": {}, @@ -4364,10 +3972,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/shell-chat-model-selection.ts": { "bridgePaths": {}, @@ -4376,9 +3981,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/chat-model-choice": 1 - } + "dependencyPaths": {} }, "src/renderer/shell-run-update-state.ts": { "bridgePaths": {}, @@ -4388,7 +3991,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/events": 1, "@maka/core/shell-run-result": 1 } }, @@ -4409,9 +4011,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1, - "@maka/runtime/skill-invocation": 1 + "./locales/shell-copy.js": 1 } }, "src/renderer/stale-sessions.ts": { @@ -4421,9 +4021,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session-send-projection": 1 - } + "dependencyPaths": {} }, "src/renderer/task-readiness-notice.ts": { "bridgePaths": {}, @@ -4496,10 +4094,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/session": 1, - "@maka/ui": 1 - } + "dependencyPaths": {} }, "src/renderer/turn-footer-actions.ts": { "bridgePaths": {}, @@ -4509,9 +4104,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./locales/conversation-copy.js": 1, - "@maka/core/session": 1, - "@maka/core/ui-locale": 1 + "./locales/conversation-copy.js": 1 } }, "src/renderer/use-active-execution-boundary.ts": { @@ -4531,7 +4124,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/sandbox-boundary": 1, "react": 1 } }, @@ -4572,7 +4164,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@maka/core/deep-research-run": 1, "react": 1 } }, @@ -4640,13 +4231,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./locales/onboarding-copy.js": 1, - "@maka/core/llm-connections": 1, "@maka/core/onboarding-milestone": 1, "@maka/core/redaction": 1, - "@maka/core/session": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4671,13 +4258,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app-shell-project-actions": 1, "./default-runtime-host-operation.js": 1, "./use-stable-actions.js": 1, - "@maka/core/project": 1, - "@maka/core/ui-locale": 1, - "@maka/runtime-host/profile-kind": 1, "react": 1 } }, @@ -4695,8 +4278,6 @@ "actionFactories": [], "dependencyPaths": { "./browser-storage": 1, - "@maka/core/llm-connections": 1, - "@maka/core/settings": 1, "react": 1 } }, @@ -4717,9 +4298,7 @@ "./locales/shell-copy": 1, "./settings/ui-locale-update-gate": 1, "./theme": 1, - "@maka/core/model-thinking": 1, "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4733,18 +4312,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./composer-defaults.js": 1, "./locales/conversation-copy.js": 1, "./session-health-notice.js": 1, - "./shell-chat-model-selection.js": 2, + "./shell-chat-model-selection.js": 1, "./use-new-task-choice.js": 1, - "@maka/core/chat-model-choice": 1, - "@maka/core/llm-connections": 1, - "@maka/core/model-thinking": 1, - "@maka/core/session": 1, - "@maka/core/session-send-projection": 1, - "@maka/core/settings": 1, - "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4763,14 +4334,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "../shared/desktop-connection-snapshot.js": 1, "../shared/runtime-host-identity.js": 1, "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, "./locales/shell-remaining-copy.js": 1, - "@maka/core/connections": 1, - "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4784,10 +4351,8 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./live-turn-snapshot.js": 1, "./model-wait-state.js": 1, - "./use-delayed-flag.js": 1, - "@maka/core/session": 1 + "./use-delayed-flag.js": 1 } }, "src/renderer/use-shell-memory-pill.ts": { @@ -4806,7 +4371,6 @@ "dependencyPaths": { "./default-runtime-host-operation.js": 1, "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1, "react": 1 } }, @@ -4823,7 +4387,6 @@ "actionFactories": [], "dependencyPaths": { "./locales/shell-copy.js": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -4894,8 +4457,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, - "@maka/core/task-submission-readiness": 1, "react": 1 } }, @@ -4936,9 +4497,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../shared/work-board-ipc.js": 1, "@maka/core/work-board": 1, - "@maka/storage/work-board-store": 1, "react": 1 } }, @@ -4961,7 +4520,6 @@ "@astryxdesign/core": 1, "@astryxdesign/core/Button": 1, "@astryxdesign/core/TextInput": 1, - "@maka/core/work-board": 1, "@maka/ui": 1, "@maka/ui/icons": 1, "react": 1 @@ -4975,8 +4533,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./workhub-route-policy.js": 1, - "@maka/runtime-host/protocol": 1 + "./workhub-route-policy.js": 1 } }, "src/renderer/workhub-coordination-host-scope.ts": { @@ -4987,8 +4544,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../shared/runtime-host-identity.js": 1, - "./workhub-session-port.js": 1 + "../shared/runtime-host-identity.js": 1 } }, "src/renderer/workhub-coordination-lifecycle.ts": { @@ -4999,7 +4555,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "../shared/runtime-host-identity.js": 1 } }, @@ -5012,10 +4567,8 @@ "actionFactories": [], "dependencyPaths": { "./desktop-transcript-range-store.js": 1, - "./workhub-controller.js": 2, - "./workhub-session-port.js": 1, - "@maka/core/session": 1, - "@maka/runtime-host/protocol": 1 + "./workhub-controller.js": 1, + "@maka/core/session": 1 } }, "src/renderer/workhub-route-policy.ts": { @@ -5053,10 +4606,9 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/transcript-contract.js": 1, "../shared/runtime-host-identity.js": 1, "./desktop-transcript-range-store.js": 1, - "./workhub-controller.js": 2, + "./workhub-controller.js": 1, "@maka/core/session": 1 } }, @@ -5072,12 +4624,10 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./workhub-controller.js": 1, "./workhub-coordination-port.js": 1, "./workhub-send-lease.js": 1, "@astryxdesign/core": 1, "@astryxdesign/core/Button": 1, - "@maka/core/ui-locale": 1, "@maka/ui": 1, "react": 1 } @@ -5090,9 +4640,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./onboarding-hero-copy.js": 1, - "@maka/core/onboarding": 1, - "@maka/core/ui-locale": 1 + "./onboarding-hero-copy.js": 1 } }, "src/shared/desktop-connection-snapshot.ts": { @@ -5102,10 +4650,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/chat-model-choice": 1, - "@maka/core/llm-connections": 1 - } + "dependencyPaths": {} }, "src/shared/desktop-session-projection.ts": { "bridgePaths": {}, @@ -5115,12 +4660,7 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "./runtime-host-identity.js": 1, - "@maka/core/daily-review": 1, - "@maka/core/events": 1, - "@maka/core/session": 1, - "@maka/core/settings": 1, - "@maka/runtime-host/profile-kind": 1 + "./runtime-host-identity.js": 1 } }, "src/shared/goal-arm.ts": { @@ -5130,9 +4670,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/runtime/goal-state": 1 - } + "dependencyPaths": {} }, "src/shared/runtime-host-identity.ts": { "bridgePaths": {}, @@ -5161,9 +4699,7 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/core/settings": 1 - } + "dependencyPaths": {} }, "src/shared/work-board-ipc.ts": { "bridgePaths": {}, @@ -5172,15 +4708,13 @@ "lifecycleMethods": {}, "unresolvedDependencies": 0, "actionFactories": [], - "dependencyPaths": { - "@maka/storage/work-board-store": 1 - } + "dependencyPaths": {} } } }, "rootDebt": { "src/renderer/app.tsx": { - "importDeclarations": 6, + "importDeclarations": 5, "bridgePaths": { "window.maka.appWindow.notifyRendererReady": 1 }, @@ -5196,18 +4730,17 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app-shell": 1, "./astryx-theme-mode": 1, "./astryx-theme/maka": 1, "@astryxdesign/core/theme": 1, "react": 1 }, - "importSpecifiers": 7, + "importSpecifiers": 6, "nonTriviaTokens": 206 }, "src/renderer/main.tsx": { - "importDeclarations": 8, + "importDeclarations": 7, "bridgePaths": { "window.maka.onboarding.getSnapshot": 2 }, @@ -5220,7 +4753,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "../preload/bridge-contract.js": 1, "./app": 1, "./cached-theme-bootstrap": 1, "./composition/desktop-feature-services": 1, @@ -5229,7 +4761,7 @@ "@maka/ui": 1, "react-dom/client": 1 }, - "importSpecifiers": 8, + "importSpecifiers": 7, "nonTriviaTokens": 268 } }, @@ -5249,7 +4781,6 @@ "unresolvedDependencies": 0, "actionFactories": [], "dependencyPaths": { - "@astryxdesign/core/theme": 1, "react": 1 } }, From f0219b2465c6f923290c0282fbefb4120a9c8549 Mon Sep 17 00:00:00 2001 From: testikun Date: Sat, 5 Sep 2026 12:50:53 +0800 Subject: [PATCH 09/13] fix(desktop): clean side chat on unrelated navigation --- .../main/__tests__/workbar-controller.test.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/apps/desktop/src/main/__tests__/workbar-controller.test.ts b/apps/desktop/src/main/__tests__/workbar-controller.test.ts index 453623d2ae..b33e8b0592 100644 --- a/apps/desktop/src/main/__tests__/workbar-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workbar-controller.test.ts @@ -667,6 +667,51 @@ describe('useWorkbarController', () => { assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); }); + it('cleans Side Chat when a new task clears the active Session', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(parent, [], [parent]))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(undefined, [], [parent]))); + + assert.equal(controller().host.activeId, undefined); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), false); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + false, + ); + }); + + it('cleans Side Chat for an uncataloged unrelated Session', async () => { + const { root } = installReactRenderer(); + const parent = session('parent'); + const unrelated = session('unrelated'); + const services = createFakeWorkbarServices(); + + await act(async () => renderController(root, services, input(parent, [], [parent]))); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + + await act(async () => renderController(root, services, input(unrelated, [], [parent]))); + + assert.equal(controller().host.activeId, unrelated.id); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), false); + assert.equal( + controller().host.panelsState.right.tabs.some( + (candidate) => candidate.id === `side-chat:${panelId}`, + ), + false, + ); + }); + it('keeps the family surface mounted when one of multiple source panels closes', async () => { const { root } = installReactRenderer(); const parent = session('parent'); From 3f96508226bc7908310b54b24ee1aaee6594fb5b Mon Sep 17 00:00:00 2001 From: testikun Date: Sat, 5 Sep 2026 13:15:29 +0800 Subject: [PATCH 10/13] ci: retry flaky Storybook smoke check From f7cc2985daa5fae1cd65a208b185f54398e923e7 Mon Sep 17 00:00:00 2001 From: testikun <320479488+testikun@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:43:27 +0800 Subject: [PATCH 11/13] fix: treat pending session view as known side-chat family anchor --- .../workbar/controller/use-workbar-controller.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts b/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts index 1ec9769211..01b0970f37 100644 --- a/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts +++ b/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts @@ -136,6 +136,22 @@ function terminalResourceKey(sessionId: string, ref: string): string { return `${sessionId}\u0000${ref}`; } +function pendingActiveSessionBelongsToKnownFamily( + activeSession: SessionSummary | undefined, + knownSessions: readonly SessionSummary[], +): boolean { + if (!activeSession) return false; + const isPlaceholderSessionView = + activeSession.model === '' && activeSession.llmConnectionSlug === ''; + if (isPlaceholderSessionView) return knownSessions.length > 0; + if (knownSessions.some((session) => session.id === activeSession.id)) { + return false; + } + const parentSessionId = + activeSession.subagent?.parentSessionId ?? activeSession.subagentParent?.parentSessionId; + return parentSessionId !== undefined && knownSessions.some((session) => session.id === parentSessionId); +} + function projectWorkbarPanelsForSession( panels: SessionWorkbarPanelsState, activeSessionId: string | undefined, From bff6929aa0bd5c37aa5440e27c98441c6e7341c6 Mon Sep 17 00:00:00 2001 From: testikun <320479488+testikun@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:47:34 +0800 Subject: [PATCH 12/13] fix: preserve side-chat retention across pending and revision transitions --- .../main/__tests__/workbar-controller.test.ts | 57 +++++++++++- .../controller/use-workbar-controller.ts | 92 +++++++++++++++---- .../side-conversation-session-family.ts | 19 ++-- 3 files changed, 142 insertions(+), 26 deletions(-) diff --git a/apps/desktop/src/main/__tests__/workbar-controller.test.ts b/apps/desktop/src/main/__tests__/workbar-controller.test.ts index b33e8b0592..bc8d433e7a 100644 --- a/apps/desktop/src/main/__tests__/workbar-controller.test.ts +++ b/apps/desktop/src/main/__tests__/workbar-controller.test.ts @@ -24,6 +24,7 @@ import { act, createElement, StrictMode, useLayoutEffect } from 'react'; import type { ShellRunUpdate } from '@maka/core/events'; import type { SessionSummary } from '@maka/core/session'; import { LocaleProvider } from '@maka/ui'; +import { pendingSessionView } from '../../renderer/pending-session-view.js'; import { cleanupFakeDom, installReactRenderer } from './fake-dom.js'; import { createFakeWorkbarServices, @@ -60,6 +61,15 @@ function shellUpdate(sessionId: string, ref: string): ShellRunUpdate { result: { ref }, } as ShellRunUpdate; } + +function pendingSession(sessionId: string): SessionSummary { + return pendingSessionView({ + sessionId, + name: sessionId, + permissionMode: 'ask', + }); +} + let latestController: WorkbarController | undefined; let controllerRenderSnapshots: Array<{ activeId: string | undefined; @@ -623,14 +633,20 @@ describe('useWorkbarController', () => { it('keeps Side Chat while the active source awaits its catalog row', async () => { const { root } = installReactRenderer(); const source = session('pending-source'); + const placeholderChild = pendingSession('pending-child'); + const child = session('pending-child'); + child.subagent = { parentSessionId: source.id }; const services = createFakeWorkbarServices(); - await act(async () => renderController(root, services, input(source, [], []))); + await act(async () => renderController(root, services, input(source, [], [source]))); await act(async () => controller().commands.openTool('side-chat')); const panelId = controller().host.quotes?.[0]?.id; assert.ok(panelId); - await act(async () => renderController(root, services, input(source, [], []))); + await act(async () => + renderController(root, services, input(placeholderChild, [], [source])), + ); + assert.equal(controller().host.surfaceKey, source.id); assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); assert.equal( controller().host.panelsState.right.tabs.some( @@ -638,6 +654,43 @@ describe('useWorkbarController', () => { ), true, ); + + await act(async () => + renderController(root, services, input(child, [], [source, child])), + ); + assert.equal(controller().host.surfaceKey, source.id); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); + }); + + it('keeps the family surface key stable across source revision updates', async () => { + const { root } = installReactRenderer(); + const services = createFakeWorkbarServices(); + const source = session('source-a'); + source.revisionRootSessionId = 'source-root'; + const sourceRevision = session('source-a-revision'); + sourceRevision.revisionRootSessionId = 'source-root'; + const child = session('child-a'); + child.subagent = { parentSessionId: sourceRevision.id }; + + await act(async () => + renderController(root, services, input(source, [], [source])), + ); + await act(async () => controller().commands.openTool('side-chat')); + const panelId = controller().host.quotes?.[0]?.id; + assert.ok(panelId); + assert.equal(controller().host.surfaceKey, 'source-root'); + + await act(async () => + renderController(root, services, input(sourceRevision, [], [source, sourceRevision, child])), + ); + assert.equal(controller().host.surfaceKey, 'source-root'); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); + + await act(async () => + renderController(root, services, input(child, [], [source, sourceRevision, child])), + ); + assert.equal(controller().host.surfaceKey, 'source-root'); + assert.equal(controller().host.quotes?.some((panel) => panel.id === panelId), true); }); it('keeps the previous family surface through a pending child catalog gap', async () => { diff --git a/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts b/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts index 01b0970f37..f74ea58410 100644 --- a/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts +++ b/apps/desktop/src/renderer/features/workbar/controller/use-workbar-controller.ts @@ -63,6 +63,10 @@ import { } from '../tools/side-chat/quote-companion-visibility.js'; import { recoverOrphanedCompanionCopies } from '../tools/side-chat/quote-companion-core.js'; import { useSideConversationWorkspace } from '../tools/side-chat/use-side-conversation-workspace.js'; +import { + isLinkedSideConversationSessionFamily, + linkedSideConversationFamilyRootId, +} from '../tools/side-chat/side-conversation-session-family.js'; import { useWorkbarLayoutState } from './use-workbar-layout-state.js'; import { LiveContextUsageProbe } from '../tools/inspector/live-context-usage-probe.js'; @@ -91,6 +95,7 @@ export interface UseWorkbarControllerInput { /** Whether the Session workspace (rather than a module page) owns the shell. */ available: boolean; activeSession: SessionSummary | undefined; + sessions: readonly SessionSummary[]; projectId: string | null | undefined; projectAliases: readonly string[]; authoritativeSessionIds: ReadonlySet | undefined; @@ -140,13 +145,15 @@ function pendingActiveSessionBelongsToKnownFamily( activeSession: SessionSummary | undefined, knownSessions: readonly SessionSummary[], ): boolean { - if (!activeSession) return false; - const isPlaceholderSessionView = - activeSession.model === '' && activeSession.llmConnectionSlug === ''; - if (isPlaceholderSessionView) return knownSessions.length > 0; - if (knownSessions.some((session) => session.id === activeSession.id)) { + if (!activeSession || knownSessions.some((session) => session.id === activeSession.id)) { return false; } + // Pending catalog views (from `pendingSessionView`) carry no lineage metadata. + // Keep the previous catalog family through that boundary so we don't dismiss a live + // Side Conversation while the actual linked child row is still loading. + if (activeSession.model === '' && activeSession.llmConnectionSlug === '') { + return knownSessions.length > 0; + } const parentSessionId = activeSession.subagent?.parentSessionId ?? activeSession.subagentParent?.parentSessionId; return parentSessionId !== undefined && knownSessions.some((session) => session.id === parentSessionId); @@ -201,6 +208,31 @@ export function useWorkbarController( const [, setLiveBrowserSessionIds] = useState([]); const activeSessionIdRef = useRef(undefined); + const lastKnownFamilySessionRef = useRef(undefined); + const lastKnownFamilySessionsRef = useRef([]); + const activeSessionIsCataloged = Boolean( + input.activeSession && input.sessions.some((session) => session.id === input.activeSession!.id), + ); + if (activeSessionIsCataloged) { + lastKnownFamilySessionRef.current = input.activeSession; + lastKnownFamilySessionsRef.current = input.sessions; + } + const canUseLastKnownFamily = pendingActiveSessionBelongsToKnownFamily( + input.activeSession, + lastKnownFamilySessionsRef.current, + ); + const familySessionForSideChat = + activeSessionIsCataloged || canUseLastKnownFamily + ? activeSessionIsCataloged + ? input.activeSession + : lastKnownFamilySessionRef.current + : input.activeSession; + const familySessionsForSideChat = + activeSessionIsCataloged || canUseLastKnownFamily + ? activeSessionIsCataloged + ? input.sessions + : lastKnownFamilySessionsRef.current + : input.sessions; const resourceGenerationRef = useRef(0); useLayoutEffect(() => { resourceGenerationRef.current += 1; @@ -447,7 +479,8 @@ export function useWorkbarController( id: `side-chat:${panel.id}`, kind: 'side-chat', ordinal: - activeTab?.ordinal ?? reserveOrdinal('side-chat'), + (activePanel ? activeTab?.ordinal : undefined) ?? + reserveOrdinal('side-chat'), }, placement, ); @@ -574,7 +607,12 @@ export function useWorkbarController( useLayoutEffect(() => { const stalePanels = sideConversations.panels.filter( - (panel) => panel.sourceSessionId !== activeSessionId, + (panel) => + !isLinkedSideConversationSessionFamily( + panel.sourceSessionId, + familySessionForSideChat, + familySessionsForSideChat, + ), ); if (stalePanels.length === 0) return; const staleIds = new Set(stalePanels.map((panel) => panel.id)); @@ -593,6 +631,8 @@ export function useWorkbarController( }, [ activeSessionId, layout.closeWorkbarTabs, + familySessionForSideChat, + familySessionsForSideChat, layout.workbarPanelsState, sideConversations.panels, sideConversations.removePanels, @@ -703,15 +743,34 @@ export function useWorkbarController( ], ); - const activeSideChatTabIds = useMemo( + const activeSideConversationPanels = useMemo( () => - new Set( - sideConversations.panels - .filter((panel) => panel.sourceSessionId === activeSessionId) - .map((panel) => `side-chat:${panel.id}`), + sideConversations.panels.filter((panel) => + isLinkedSideConversationSessionFamily( + panel.sourceSessionId, + familySessionForSideChat, + familySessionsForSideChat, + ), ), - [activeSessionId, sideConversations.panels], + [familySessionForSideChat, familySessionsForSideChat, sideConversations.panels], + ); + const activeSideChatTabIds = useMemo( + () => new Set(activeSideConversationPanels.map((panel) => `side-chat:${panel.id}`)), + [activeSideConversationPanels], ); + // Keep one WorkbarSurface mounted for the whole linked Session scope. This + // avoids remounting every tool when the first/last Side Chat tab appears and + // lets each tool receive the new sessionId and reset its own session data. + const sideConversationSurfaceKey = useMemo(() => { + const familyRoot = linkedSideConversationFamilyRootId( + familySessionForSideChat, + familySessionsForSideChat, + ); + if (familyRoot !== undefined) { + return familyRoot; + } + return activeSessionId; + }, [activeSessionId, familySessionForSideChat, familySessionsForSideChat]); const hostPanelsState = useMemo( () => projectWorkbarPanelsForSession( @@ -721,7 +780,6 @@ export function useWorkbarController( ), [activeSessionId, activeSideChatTabIds, layout.workbarPanelsState], ); - return { commands, LiveContextUsageProbe, @@ -739,6 +797,7 @@ export function useWorkbarController( rightWidth: layout.workbarWidth, bottomHeight: layout.bottomPanelHeight, panelsState: hostPanelsState, + surfaceKey: sideConversationSurfaceKey, onActivateTab: layout.activateWorkbarTab, onCloseTab: closeTab, onCloseTabs: closeTabs, @@ -753,9 +812,8 @@ export function useWorkbarController( }, rightResizable: layout.workbarResizable, bottomResizable: layout.bottomPanelResizable, - quotes: sideConversations.panels.filter( - (panel) => panel.sourceSessionId === activeSessionId, - ), + quotes: activeSideConversationPanels, + sessions: input.sessions, onQuotesConsumed: (snapshot) => sideConversations.updatePanel(snapshot.panelId, (panel) => consumeCompanionQuoteSnapshot(panel, snapshot) ?? panel, diff --git a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts index f12d62a82a..578001485c 100644 --- a/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts +++ b/apps/desktop/src/renderer/features/workbar/tools/side-chat/side-conversation-session-family.ts @@ -118,19 +118,24 @@ export function linkedSideConversationFamilyRootId( sessions, activeSession.id, ); + const logicalSessionsById = new Map( + logicalSessions.map((session) => [session.id, session]), + ); const activeRepresentative = logicalSessions.find( (session) => sessionRevisionFamilyId(session) === sessionRevisionFamilyId(activeSession), ) ?? activeSession; const visited = new Set(); - let currentId = activeRepresentative.id; - while (!visited.has(currentId)) { - visited.add(currentId); - const parentId = parentByChildId.get(currentId); - if (!parentId) return currentId; - currentId = parentId; + let currentSession = logicalSessionsById.get(activeRepresentative.id) ?? activeRepresentative; + while (!visited.has(currentSession.id)) { + visited.add(currentSession.id); + const parentId = parentByChildId.get(currentSession.id); + if (!parentId) return sessionRevisionFamilyId(currentSession); + const parentSession = logicalSessionsById.get(parentId); + if (!parentSession) return sessionRevisionFamilyId(currentSession); + currentSession = parentSession; } - return currentId; + return sessionRevisionFamilyId(currentSession); } function reachesSession( From 7765d196d2d4d97b031856fb0a2ea34ae4a0658c Mon Sep 17 00:00:00 2001 From: testikun <320479488+testikun@users.noreply.github.com> Date: Wed, 9 Sep 2026 16:14:41 +0800 Subject: [PATCH 13/13] fix(desktop): sync AppShell architecture ledger after merge --- apps/desktop/renderer-architecture.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/renderer-architecture.json b/apps/desktop/renderer-architecture.json index 098cfae5ac..64d66314af 100644 --- a/apps/desktop/renderer-architecture.json +++ b/apps/desktop/renderer-architecture.json @@ -894,7 +894,7 @@ "react": 1 }, "importSpecifiers": 116, - "nonTriviaTokens": 14318 + "nonTriviaTokens": 14316 }, "src/renderer/use-app-shell-composer-quotes.ts": { "importDeclarations": 2,