Conversation
Move workspace, shell, volumes, and settings code into screen-scoped\nmodules and point routes at lazy screen entrypoints. Split shell,\nworkspace, and volume state into dedicated stores to keep boundaries\nclear without changing the frontend contract.
Update the frontend agent guide to reflect the new screen-first\nlayout, state ownership, and lint boundary rules. This keeps future\nfrontend work aligned with the refactored module contracts.
Record the current shadcn skill source hash in the repository lockfile\nso local skill setup stays explicit and reproducible.
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly refactors the frontend application by transitioning from a feature-centric to a screen-centric architecture. The primary goal is to improve code organization, clarify module ownership, and reduce coupling between different parts of the UI. This change enhances the reasoning about application surfaces, routes, and shared state, making the codebase more robust and easier to extend or modify without introducing regressions. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
This is a substantial and well-executed refactoring of the frontend architecture, moving from a feature-based structure to a more modular screen-based approach. Co-locating state, components, and types within screen-specific modules and defining clear contracts for shell interaction are excellent improvements for maintainability and scalability. The simplification of routing using TanStack Router's built-in lazy loading is also a great enhancement. My review found one minor, recurring pattern of using inline styles to override typography classes, for which I've provided a suggestion. Overall, this is a high-quality pull request that significantly improves the frontend codebase.
I am having trouble creating individual review comments. Click here to see my feedback.
src/frontend/src/screens/settings/settings-screen.tsx (67-69)
Using an inline style attribute to override the font size from the typo-h3 class is not ideal for maintainability and consistency. It's better to use a more appropriate typography utility class from your design system. If typo-h3 is too large, consider using a smaller heading class or a standard Tailwind class like text-sm font-medium if it matches the desired size. This would keep styling consistent and defined in CSS.
I've noticed this pattern is repeated in other refactored standalone screens as well (login-screen, not-found-screen, etc.).
<h1 className="text-foreground text-sm font-medium">
Settings
</h1>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
This PR restructures the frontend around explicit screens/* slices (workspace, volumes, settings, shell), moving previously scattered route entrypoints, state, and UI modules into clearer ownership boundaries and updating routing/lazy-loading accordingly.
Changes:
- Introduces screen-scoped model/UI modules (e.g., workspace stores/types, volumes selection store) and updates consumers across the app.
- Replaces page-layer lazy routing with
lazyRouteComponent(...)imports that point directly atscreens/*. - Adds/updates lint boundary rules and frontend documentation to enforce the new screen ownership contracts.
Reviewed changes
Copilot reviewed 155 out of 172 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/frontend/vite.config.ts | Adds lint override rules to enforce screen/module boundaries; updates warmup client files. |
| src/frontend/tests/e2e/settings-runtime-smoke.spec.ts | Adjusts runtime readiness assertion to match new copy. |
| src/frontend/tests/e2e/frontend-smoke.spec.ts | Updates settings navigation assertion for redirected URL. |
| src/frontend/tests/e2e/execution-canvas-smoke.spec.ts | Updates store imports/state wiring for execution canvas e2e. |
| src/frontend/src/stores/navigationStore.ts | Trims navigation store down to shell navigation + canvas concerns. |
| src/frontend/src/stores/navigation-types.ts | Introduces shared NavItem type (moved out of lib/data/types). |
| src/frontend/src/screens/workspace/workspace-shell-contract.ts | Defines shell-facing workspace contracts (history + actions). |
| src/frontend/src/screens/workspace/workspace-screen.tsx | New workspace screen entrypoint (formerly RlmWorkspace). |
| src/frontend/src/screens/workspace/workspace-canvas-panel.tsx | Workspace canvas panel wrapper + title logic. |
| src/frontend/src/screens/workspace/model/workspace-ui-store.ts | New workspace-owned UI/session/inspector state store. |
| src/frontend/src/screens/workspace/model/workspace-types.ts | Moves workspace/chat domain UI types into workspace slice. |
| src/frontend/src/screens/workspace/model/runtime-types.ts | Repoints runtime types to new workspace slice types. |
| src/frontend/src/screens/workspace/model/run-workbench-types.ts | Repoints workbench types to workspace slice types. |
| src/frontend/src/screens/workspace/model/run-workbench-store.ts | Repoints store dependencies to new adapter/types modules. |
| src/frontend/src/screens/workspace/model/run-workbench-store.test.ts | Updates workbench store tests to new import paths. |
| src/frontend/src/screens/workspace/model/run-workbench-adapter.ts | Moves/rewires adapter imports to workspace model modules. |
| src/frontend/src/screens/workspace/model/prompt-preferences-store.ts | Repoints prompt preference types to workspace slice types. |
| src/frontend/src/screens/workspace/model/daytona-mode.ts | Adds Daytona mode normalization/label formatting helpers. |
| src/frontend/src/screens/workspace/model/chat-store.ts | Moves chat store into workspace model slice (session id remains backend-driven). |
| src/frontend/src/screens/workspace/model/chat-store.test.ts | Updates chat store tests for new module location/mocks. |
| src/frontend/src/screens/workspace/model/chat-history-store.ts | Moves chat history store into workspace model slice. |
| src/frontend/src/screens/workspace/model/chat-history-store.test.ts | Updates chat history persistence tests to new module. |
| src/frontend/src/screens/workspace/model/chat-display-items.ts | Rehomes display-item builder types to workspace slice. |
| src/frontend/src/screens/workspace/model/backend-chat-event-trajectory.ts | Repoints backend event parsing utilities to new module paths. |
| src/frontend/src/screens/workspace/model/backend-chat-event-tool-parts.ts | Repoints tool-part normalization to new payload/types modules. |
| src/frontend/src/screens/workspace/model/backend-chat-event-references.ts | Repoints reference attachment logic to workspace types. |
| src/frontend/src/screens/workspace/model/backend-chat-event-payload.ts | Repoints payload parsing helpers to workspace types. |
| src/frontend/src/screens/workspace/model/backend-chat-event-adapter.ts | Rehomes WS frame → message adapter to workspace model slice. |
| src/frontend/src/screens/workspace/model/backend-artifact-event-adapter.ts | Rehomes WS frame → artifacts adapter + store import. |
| src/frontend/src/screens/workspace/model/artifact-types.ts | Introduces workspace-local artifact step type definitions. |
| src/frontend/src/screens/workspace/model/artifact-store.ts | Rehomes artifact store to workspace model slice. |
| src/frontend/src/screens/workspace/model/artifact-store.test.ts | Updates artifact store tests to new module path. |
| src/frontend/src/screens/workspace/hooks/use-workspace-runtime.ts | Rehomes runtime hook and rewires to new stores/adapters. |
| src/frontend/src/screens/workspace/components/workspace-sidebar.tsx | Renames/rehomes conversation history UI as workspace sidebar. |
| src/frontend/src/screens/workspace/components/workspace-message-list.tsx | Rehomes chat message list and rewires to workspace UI store. |
| src/frontend/src/screens/workspace/components/workspace-composer.tsx | Replaces old ChatInput with workspace-specific composer implementation. |
| src/frontend/src/screens/workspace/components/workspace-composer.test.tsx | Updates composer tests to new component and behavior. |
| src/frontend/src/screens/workspace/components/workbench/RunWorkbench.tsx | Rehomes workbench UI to workspace slice + new store/types. |
| src/frontend/src/screens/workspace/components/workbench/tests/runWorkbenchAdapter.test.ts | Updates adapter tests to new module location. |
| src/frontend/src/screens/workspace/components/workbench/tests/RunWorkbench.test.tsx | Updates workbench UI tests and mocks to new module paths. |
| src/frontend/src/screens/workspace/components/shared/ClarificationCard.tsx | Rehomes clarification UI and inlines removed shared wrappers. |
| src/frontend/src/screens/workspace/components/shared/tests/ClarificationCard.test.tsx | Updates clarification card tests to new import paths/types. |
| src/frontend/src/screens/workspace/components/inspector/utils/inspector-utils.ts | Adds small shared inspector status→tone mapping helper. |
| src/frontend/src/screens/workspace/components/inspector/ui/inspector-ui.tsx | Repoints inspector UI to workspace slice models/styles. |
| src/frontend/src/screens/workspace/components/inspector/tabs/TrajectoryInspectorTab.tsx | Updates inspector tab imports to workspace slice modules. |
| src/frontend/src/screens/workspace/components/inspector/tabs/GraphInspectorTab.tsx | Rehomes artifact graph + parsers under workspace inspector. |
| src/frontend/src/screens/workspace/components/inspector/tabs/ExecutionInspectorTab.tsx | Updates execution inspector tab imports to new modules. |
| src/frontend/src/screens/workspace/components/inspector/tabs/EvidenceInspectorTab.tsx | Updates evidence inspector tab imports to new modules. |
| src/frontend/src/screens/workspace/components/inspector/parsers/artifactPayloadSummaries.ts | Rehomes artifact payload summarization to workspace inspector parsers. |
| src/frontend/src/screens/workspace/components/inspector/parsers/artifactPayloadSchemas.ts | Adds zod schemas/parsers for artifact payload normalization. |
| src/frontend/src/screens/workspace/components/inspector/MessageInspectorPanel.tsx | Rehomes message inspector and rewires state to workspace UI store. |
| src/frontend/src/screens/workspace/components/inspector/inspector-styles.ts | Updates style helper docs/import path for new location. |
| src/frontend/src/screens/workspace/components/inspector/graph-tool-badge.ts | Updates graph tool badge helper to new artifact types. |
| src/frontend/src/screens/workspace/components/inspector/graph-step-node.tsx | Rehomes graph node component and dependency imports. |
| src/frontend/src/screens/workspace/components/inspector/graph-step-node.constants.ts | Rehomes graph node constants with new artifact types. |
| src/frontend/src/screens/workspace/components/inspector/graph-node-detail-parsers.ts | Adds detail extractors for graph nodes (errors/trajectory/code). |
| src/frontend/src/screens/workspace/components/inspector/artifact-graph.visibility.test.tsx | Updates artifact graph visibility tests to new module paths. |
| src/frontend/src/screens/workspace/components/inspector/artifact-graph.tsx | Rehomes artifact graph implementation under workspace inspector. |
| src/frontend/src/screens/workspace/components/inspector/tests/MessageInspectorPanel.test.tsx | Updates message inspector tests to workspace stores and graph mock. |
| src/frontend/src/screens/workspace/components/composer/RuntimeModeDropdown.tsx | Rehomes runtime mode dropdown under workspace composer. |
| src/frontend/src/screens/workspace/components/composer/ExecutionModeDropdown.tsx | Rehomes execution mode dropdown under workspace composer. |
| src/frontend/src/screens/workspace/components/composer/composerActionStyles.ts | Adds shared composer action style constants for chips/buttons. |
| src/frontend/src/screens/workspace/components/composer/AttachmentDropdown.tsx | Rehomes attachment dropdown under workspace composer. |
| src/frontend/src/screens/workspace/components/composer/tests/RuntimeModeDropdown.test.tsx | Updates runtime mode dropdown tests to new module. |
| src/frontend/src/screens/workspace/components/composer/tests/ExecutionModeDropdown.test.tsx | Updates execution mode dropdown tests to new module. |
| src/frontend/src/screens/workspace/components/composer/tests/AttachmentDropdown.test.tsx | Updates attachment dropdown tests to new module. |
| src/frontend/src/screens/workspace/components/chat-shell/WorkspaceChatMessageItem.tsx | Repoints message item to workspace slice components/types. |
| src/frontend/src/screens/workspace/components/chat-shell/WorkspaceChatEmptyState.tsx | Simplifies welcome-state icons and updates imports. |
| src/frontend/src/screens/workspace/components/chat-shell/tracePartRenderers.tsx | Repoints trace part renderer types/models to workspace slice. |
| src/frontend/src/screens/workspace/components/chat-shell/chatMessageStyles.ts | Adds shared style objects for prompt-kit rendering. |
| src/frontend/src/screens/workspace/components/chat-shell/tests/WorkspaceChatMessageItem.test.tsx | Updates message item tests to new module paths/types. |
| src/frontend/src/screens/workspace/components/chat-shell/tests/WorkspaceChatEmptyState.test.tsx | Updates empty state tests to new module paths. |
| src/frontend/src/screens/workspace/components/assistant-content/TrajectoryTimeline.tsx | Repoints assistant content timeline to new model/styles. |
| src/frontend/src/screens/workspace/components/assistant-content/model/types.ts | Repoints assistant content model types to workspace slice types/items. |
| src/frontend/src/screens/workspace/components/assistant-content/model/RuntimeContextBadge.tsx | Rehomes runtime context badge styling/types. |
| src/frontend/src/screens/workspace/components/assistant-content/model/runtimeBadges.ts | Rehomes runtime badge helpers to workspace slice types. |
| src/frontend/src/screens/workspace/components/assistant-content/model/modelUtils.ts | Adds shared label humanization + unique string helpers. |
| src/frontend/src/screens/workspace/components/assistant-content/model/index.ts | Adds barrel exports for assistant content model package. |
| src/frontend/src/screens/workspace/components/assistant-content/model/buildAssistantTrajectoryModel.ts | Repoints trajectory model builder to workspace display items. |
| src/frontend/src/screens/workspace/components/assistant-content/model/buildAssistantContentModel.ts | Repoints content model builder to workspace types/items. |
| src/frontend/src/screens/workspace/components/assistant-content/ExecutionHighlightsGroup.tsx | Repoints execution highlight UI to new inspector utils/styles. |
| src/frontend/src/screens/workspace/components/assistant-content/AssistantTurnContent.tsx | Rehomes assistant turn renderer to workspace slice components/types. |
| src/frontend/src/screens/workspace/components/assistant-content/AssistantSummaryBar.tsx | Repoints summary bar types to workspace slice. |
| src/frontend/src/screens/workspace/components/assistant-content/AssistantPreviewSections.tsx | Repoints preview sections to workspace slice styles/types. |
| src/frontend/src/screens/workspace/components/assistant-content/AssistantAnswerBlock.tsx | Adds extracted assistant answer block (with loading shimmer). |
| src/frontend/src/screens/workspace/components/assistant-content/tests/buildAssistantContentModel.test.ts | Updates assistant content model tests to new imports/types. |
| src/frontend/src/screens/workspace/components/animation-presets.ts | Repoints motion config import to new motion util module. |
| src/frontend/src/screens/workspace/tests/useChatRuntime.daytona-error.test.tsx | Updates runtime failure tests to useWorkspaceRuntime and new stores. |
| src/frontend/src/screens/workspace/tests/RlmWorkspace.session-request.test.tsx | Updates session request tests to WorkspaceScreen + workspace UI store. |
| src/frontend/src/screens/workspace/tests/RlmWorkspace.runtime-warning.test.tsx | Updates runtime warning tests to WorkspaceScreen + new runtime status hook. |
| src/frontend/src/screens/workspace/tests/RlmWorkspace.daytona-workbench.test.tsx | Updates Daytona workbench tests to WorkspaceScreen + new composer mocks. |
| src/frontend/src/screens/workspace/tests/ChatMessageList.prompt-kit.test.tsx | Updates message list tests to WorkspaceMessageList + new stores. |
| src/frontend/src/screens/workspace/tests/ChatMessageList.ai-elements.test.tsx | Updates message list tests to WorkspaceMessageList + new stores. |
| src/frontend/src/screens/workspace/tests/chatDisplayItems.test.ts | Repoints display item tests to new workspace model module. |
| src/frontend/src/screens/workspace/tests/backendChatEventAdapter.test.ts | Repoints adapter tests to workspace model adapter/types. |
| src/frontend/src/screens/workspace/tests/backendArtifactEventAdapter.test.ts | Repoints artifact adapter tests to workspace model adapter/store. |
| src/frontend/src/screens/volumes/volumes-shell-contract.ts | Adds shell-facing volumes selection contract (clear selection, etc.). |
| src/frontend/src/screens/volumes/volumes-screen.tsx | Adds volumes screen route entrypoint alias. |
| src/frontend/src/screens/volumes/volumes-canvas-panel.tsx | Adds volumes canvas panel for file preview + empty state. |
| src/frontend/src/screens/volumes/volumes-browser.tsx | Rehomes volumes browser and rewires to new filesystem hook + selection store. |
| src/frontend/src/screens/volumes/volumes-browser-sections.tsx | Rehomes volumes browser sections; rewires utils/types imports. |
| src/frontend/src/screens/volumes/model/volumes-types.ts | Introduces volumes FsNode types in volumes slice. |
| src/frontend/src/screens/volumes/model/volumes-selection-store.ts | Adds volumes file-selection Zustand store. |
| src/frontend/src/screens/volumes/model/volumes-browser-utils.ts | Rehomes volumes browser utilities and rewires FsNode type. |
| src/frontend/src/screens/volumes/model/mock-filesystem.ts | Rehomes mock filesystem data to volumes slice. |
| src/frontend/src/screens/volumes/hooks/use-volumes-filesystem.ts | Rehomes filesystem/query hooks and rewires mock/types imports. |
| src/frontend/src/screens/volumes/components/volume-file-detail.tsx | Rehomes and renames file detail view for volumes preview. |
| src/frontend/src/screens/volumes/components/volume-file-detail.test.tsx | Updates file detail tests to new component/hook imports. |
| src/frontend/src/screens/shell/standalone/signup-screen.tsx | Renames/rehomes signup page to signup screen. |
| src/frontend/src/screens/shell/standalone/route-error-screen.tsx | Renames RouteError page component to screen component. |
| src/frontend/src/screens/shell/standalone/not-found-screen.tsx | Renames/rehomes not-found page to not-found screen. |
| src/frontend/src/screens/shell/standalone/logout-screen.tsx | Renames/rehomes logout page to logout screen. |
| src/frontend/src/screens/shell/standalone/login-screen.tsx | Renames/rehomes login page to login screen. |
| src/frontend/src/screens/shell/shell-sidepanel.tsx | Replaces BuilderPanel with shell sidepanel that routes to screen canvas panels. |
| src/frontend/src/screens/shell/shell-route-outlet.tsx | Replaces ChatPanel with shell route outlet wrapper. |
| src/frontend/src/screens/shell/shell-header.tsx | Renames TopHeader to ShellHeader in shell slice. |
| src/frontend/src/screens/shell/route-sync.tsx | Updates route→nav sync; clears volumes selection via volumes contract. |
| src/frontend/src/screens/shell/mobile-tab-bar.tsx | Rehomes tab bar and switches preloading to router-native preload. |
| src/frontend/src/screens/shell/mobile-shell.tsx | Rehomes mobile shell and rewires to new shell components. |
| src/frontend/src/screens/shell/login-dialog.tsx | Adds new Entra login dialog (desktop dialog + mobile drawer). |
| src/frontend/src/screens/shell/desktop-shell.tsx | Rehomes desktop shell and rewires to new shell components. |
| src/frontend/src/screens/shell/command-palette.tsx | Switches session actions to workspace shell contract and new NavItem type. |
| src/frontend/src/screens/shell/app-sidebar.tsx | Switches sidebar history/actions to workspace shell contract. |
| src/frontend/src/screens/shell/app-shell-screen.tsx | Rehomes root shell screen and rewires to new shell modules. |
| src/frontend/src/screens/shell/tests/TopHeader.typography.test.tsx | Updates header typography test to ShellHeader. |
| src/frontend/src/screens/shell/tests/MobileShell.canvas-handlers.test.tsx | Updates mobile shell tests to new module paths. |
| src/frontend/src/screens/shell/tests/BuilderPanel.file-detail.test.tsx | Updates sidepanel test to use ShellSidepanel and volumes canvas panel mock. |
| src/frontend/src/screens/shell/tests/BuilderPanel.creation-tabs.test.tsx | Updates sidepanel test to ShellSidepanel and workspace canvas panel mock. |
| src/frontend/src/screens/shell/tests/AppSidebar.sessions.test.tsx | Updates sidebar session tests to workspace shell contract mocks. |
| src/frontend/src/screens/settings/settings-types.ts | Adds centralized settings section metadata/types. |
| src/frontend/src/screens/settings/settings-screen.tsx | Rehomes settings screen and rewires imports to new settings slice modules. |
| src/frontend/src/screens/settings/settings-errors.ts | Adds shared error formatting helper for settings. |
| src/frontend/src/screens/settings/runtime-pane-hydration.ts | Adds runtime form hydration predicate helper. |
| src/frontend/src/screens/settings/hooks/use-runtime-settings.ts | Rehomes runtime settings hook and composes shared runtime status query key. |
| src/frontend/src/screens/settings/tests/useRuntimeSettings.test.ts | Updates runtime settings tests to new hook module. |
| src/frontend/src/screens/settings/tests/RuntimePane.test.tsx | Updates runtime pane tests to new module imports and copy. |
| src/frontend/src/screens/settings/tests/GroupedSettingsPane.test.tsx | Updates grouped settings pane tests to new module imports/mocks. |
| src/frontend/src/routes/signup.tsx | Switches signup route to lazyRouteComponent + new error screen. |
| src/frontend/src/routes/logout.tsx | Switches logout route to lazyRouteComponent + new error screen. |
| src/frontend/src/routes/login.tsx | Switches login route to lazyRouteComponent + new error screen. |
| src/frontend/src/routes/app/workspace.tsx | Switches workspace route to lazyRouteComponent pointing at WorkspaceScreen. |
| src/frontend/src/routes/app/volumes.tsx | Switches volumes route to lazyRouteComponent pointing at VolumesScreen. |
| src/frontend/src/routes/app/settings.tsx | Switches settings route to lazyRouteComponent pointing at SettingsScreen. |
| src/frontend/src/routes/app.tsx | Repoints root app route to new shell app screen + new error screen. |
| src/frontend/src/routes/404.tsx | Switches not-found route to lazyRouteComponent pointing at NotFoundScreen. |
| src/frontend/src/lib/utils/prompt-kit-state.ts | Repoints tool-state type import to workspace slice types. |
| src/frontend/src/lib/utils/motion.ts | Updates docs/import references for new motion util path. |
| src/frontend/src/lib/rlm-api/capabilities.ts | Repoints NavItem type import to navigation-types. |
| src/frontend/src/lib/perf/routePreload.tsx | Removes custom lazy preload system (deleted). |
| src/frontend/src/lib/perf/lazyWithRetry.ts | Removes custom chunk retry/preload helpers (deleted). |
| src/frontend/src/lib/data/types.ts | Removes UI/screen-specific types (NavItem/chat/render parts/fsnode) from shared data types. |
| src/frontend/src/hooks/useRuntimeStatus.ts | Adds shared runtime status query hook and shared query key. |
| src/frontend/src/hooks/useAppNavigate.ts | Adds router-native preload helper (preloadNav) and updates NavItem import. |
| src/frontend/src/features/settings/components/SettingsToggleRow.tsx | Removes old settings toggle row wrapper (deleted). |
| src/frontend/src/features/settings/components/SettingsRow.tsx | Removes old settings row wrapper (deleted). |
| src/frontend/src/features/rlm-workspace/components/SuggestionIcons.tsx | Removes custom suggestion icon wrappers (deleted). |
| src/frontend/src/features/rlm-workspace/components/SectionHeader.tsx | Removes SectionHeader wrapper (deleted; inlined). |
| src/frontend/src/features/rlm-workspace/components/ResolvedChip.tsx | Removes ResolvedChip wrapper (deleted; inlined). |
| src/frontend/src/components/ui/radio-option-card.tsx | Repoints motion config import to new motion util module. |
| src/frontend/src/components/ui/icon-button.tsx | Adjusts icon button active styling behavior (now token-driven). |
| src/frontend/src/components/chat/input/SettingsDropdown.tsx | Removes old settings dropdown control (deleted). |
| src/frontend/src/components/chat/input/SendButton.tsx | Removes old send button wrapper (deleted; inlined into composer). |
| src/frontend/src/components/chat/input/AttachmentChip.tsx | Removes old attachment chip wrapper (deleted; inlined into composer). |
| src/frontend/src/components/chat/input/tests/SettingsDropdown.test.tsx | Removes tests for deleted SettingsDropdown (deleted). |
| src/frontend/src/app/pages/VolumesPage.tsx | Removes old page wrapper for volumes (deleted). |
| src/frontend/src/app/pages/RlmWorkspacePage.tsx | Removes old page wrapper for workspace (deleted). |
| src/frontend/src/app/layout/BuilderPanel.tsx | Removes old BuilderPanel implementation (deleted; replaced by ShellSidepanel). |
| src/frontend/AGENTS.md | Updates frontend architecture/docs to describe new screens boundaries and lint enforcement. |
| skills-lock.json | Adds shadcn skill/tooling lockfile for updated frontend tooling state. |
Comments suppressed due to low confidence (1)
src/frontend/src/screens/workspace/hooks/use-workspace-runtime.ts:160
subscribeToExecutionStreamis being keyed offsessionRevisionand passedsessionRevisionas thesession_idquery param. The execution stream expects the backend session id used for WS chat frames (thesessionIdfromuseChatStore), so this will either subscribe to a non-existent session or never subscribe at all (sincesessionRevisionstarts at 0 and the effect returns early). Subscribe usingsessionId(and depend on it), and avoid gating the initial subscription onsessionRevision.
| files: ["src/components/ui/**/*.{ts,tsx}", "src/components/prompt-kit/**/*.{ts,tsx}"], | ||
| rules: { | ||
| "no-restricted-imports": [ | ||
| "error", | ||
| { | ||
| patterns: [ | ||
| { | ||
| group: ["@/screens/*"], | ||
| message: "Shared components must not depend on screen-owned modules.", | ||
| }, | ||
| ], |
| files: ["src/screens/**/model/**/*.{ts,tsx}"], | ||
| rules: { | ||
| "no-restricted-imports": [ | ||
| "error", | ||
| { | ||
| patterns: [ | ||
| { | ||
| group: ["@/screens/*/components/*"], | ||
| message: "Screen model modules must not depend on screen component modules.", | ||
| }, |
| files: ["src/screens/shell/**/*.{ts,tsx}"], | ||
| rules: { | ||
| "no-restricted-imports": [ | ||
| "error", | ||
| { | ||
| patterns: [ | ||
| { | ||
| group: [ | ||
| "@/screens/workspace/components/*", | ||
| "@/screens/workspace/model/*", | ||
| "@/screens/workspace/hooks/*", | ||
| "@/screens/volumes/components/*", | ||
| "@/screens/volumes/model/*", | ||
| "@/screens/volumes/hooks/*", | ||
| ], | ||
| message: | ||
| "Shell modules must import screen-owned panels through top-level screen contracts only.", |
| className={cn( | ||
| "rounded-lg focus-visible:ring-2", | ||
| resolvedVariant === "ghost" && "border border-transparent bg-transparent", | ||
| isActive ? "text-accent" : "text-foreground", | ||
| // When active, match the semantic foreground text token. | ||
| // This ensures the computed `color` is driven by `--color-text`. | ||
| "text-foreground", | ||
| className, | ||
| )} |
Summary
This PR reorganizes the frontend around explicit screen slices. The immediate issue was that app surfaces, routes, and shared state had drifted across
app/,features/, and generic stores, which made it harder to reason about ownership and riskier to change the workspace shell.Cause and effect on users
For maintainers and anyone extending the UI, that sprawl made it easy to couple unrelated screens and difficult to tell which code paths backed the supported product surfaces (
RLM Workspace,Volumes, andSettings). Left alone, that increases regression risk whenever we touch navigation, lazy loading, or websocket-backed state, even when there is no intended user-facing behavior change.Root cause
The screen boundary was implicit rather than enforced. Route entrypoints, screen-level components, and long-lived state lived in different folders, while some legacy paths still reflected older product surfaces.
Fix
This change groups the supported app surfaces into dedicated
screens/*modules, moves the workspace and volumes flows behind clearer entrypoints, aligns screen-specific store ownership, and refreshes the frontend docs to describe the new module boundaries. It also adds the shadcn skill lockfile needed for the updated frontend tooling state.Validation
I validated the refactor with the frontend check suite:
cd src/frontend && pnpm run type-checkcd src/frontend && pnpm run lintcd src/frontend && pnpm run buildcd src/frontend && pnpm run test:unit