Project Topic Tabs and Context Inspector#2925
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b7e09d0ea2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # desktop/app.go # desktop/app_test.go # desktop/bound_array_contract_test.go # desktop/frontend/src/App.tsx # desktop/frontend/src/components/Composer.tsx # desktop/frontend/src/components/ContextPanel.tsx # desktop/frontend/src/components/EffortSwitcher.tsx # desktop/frontend/src/components/ModelSwitcher.tsx # desktop/frontend/src/components/ProjectTree.tsx # desktop/frontend/src/components/TabBar.tsx # desktop/frontend/src/lib/bridge.ts # desktop/frontend/src/lib/types.ts # desktop/frontend/src/lib/useController.ts # desktop/frontend/src/styles.css # desktop/skills_app_test.go # desktop/tabs.go # internal/agent/branch.go # internal/agent/save.go # internal/boot/boot.go
|
@codex review |
|
Addressed the Codex bot findings in
Verification:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7d8fc83649
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…dex/ The project-tabs branch carried 30 throwaway screenshots, a mock HTML, and a codex env file into the tree because tmp/ and .codex/ were never ignored. Remove them and add the ignore rules so scratch output stays out of future commits.
The new project/topic/workspace tests only overrode HOME and XDG_CONFIG_HOME, but desktopConfigDir() and config.MemoryUserDir() resolve through os.UserConfigDir(), which reads %AppData% on Windows and ignores those vars. With AppData pointed at one shared TestMain dir, the project/topic/workspace registries leaked across tests: full-package runs failed (project tree len 2 want 1, trash mixing other tests' sessions, Plugins[0] reading a neighbor's MCP entry) while each test passed alone. Route every test through isolateDesktopUserDirs, which already sets HOME, USERPROFILE, XDG_CONFIG_HOME, and AppData to a per-test temp dir. go test ./... (and -race) now pass on Windows.
Summary
What This PR Does
Project/topic workspace model
normal,plan,yolo) per tab and restores it with the tab metadata instead of treating mode as one global composer state.[]rather thannull.Sidebar, tab bar, and dock layout
文件 / 改动controls to the left side of the right dock header and makes them responsive as the dock is dragged narrower.Message actions and rollback UX
分叉会话总结这条之后总结这条之前仅回滚对话仅回滚代码回滚代码和对话从这条消息开始label.Desktop preferences and native shell behavior
Config and CLI support
Root Cause
null, which made React list rendering brittle when project/topic/context arrays were empty or absent.Technical Approach
tabIdevent routing.TabBar,ProjectTree,ContextPanel, right-dock layout preferences, and shared Wails array normalization.rightDockTreeWidthandrightDockPreviewWidthlayout preferences so compact file browsing and wider previewing do not fight each other.SingleInstanceLock, close interception, and explicit quit handling for native desktop lifecycle behavior.Focused Optimization Points
[]instead ofnull, with regression coverage.Verification
npm run buildindesktop/frontendgo test ./...indesktopgo test ./internal/boot ./internal/config ./internal/control ./internal/cli ./internal/fileref ./internal/agentgit diff --checkgit diff --cached --checkreasonix.layoutPreferences.v1:sidebarWidth=300andrightDockTreeWidth=420remain 300/420 after refresh, proving user manual layout overrides the first-open default