Port custom multi-agent/sidebar workflow to v0.3.7#806
Port custom multi-agent/sidebar workflow to v0.3.7#806isasardar1-coder wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e6f90300ba
ℹ️ 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".
| writeFileSync(join(OUTPUT_ROOT, '.preinstalled-lock.json'), `${JSON.stringify(lock, null, 2)}\n`, 'utf8'); | ||
| rmSync(TMP_ROOT, { recursive: true, force: true }); | ||
| echo`Preinstalled skills ready: ${OUTPUT_ROOT}`; | ||
| console.log('Skipping preinstalled skills bundle on Windows...'); |
There was a problem hiding this comment.
Reinstate preinstalled-skills bundle generation
This script now unconditionally no-ops, so pnpm run package/build no longer generates build/preinstalled-skills from resources/skills/preinstalled-manifest.json; on clean CI or fresh local builds, installers will ship without preinstalled skills and runtime install will be skipped because the bundled source/lock file are missing. Restoring the previous bundling behavior (or gating this skip strictly to the intended environment) is needed to avoid silently dropping packaged skills.
Useful? React with 👍 / 👎.
| const finalMessages = getConversationMessages(currentSessionKey, primaryMessages); | ||
| set({ messages: finalMessages, thinkingLevel, loading: false }); | ||
|
|
There was a problem hiding this comment.
Guard history updates by active session key
loadHistory captures currentSessionKey and later applies results with set({ messages: ... }) without checking whether the user has switched sessions while the RPC was in flight; when that happens, the stale response from the previous session can overwrite the currently selected session's message list. Add an if (get().currentSessionKey !== currentSessionKey) return guard (and similar guard for async preview updates) before mutating store state.
Useful? React with 👍 / 👎.
| const attachedFiles = shouldHideProcessAttachments | ||
| ? (message._attachedFiles || []).filter((file) => file.source !== 'tool-result') | ||
| : (message._attachedFiles || []); | ||
| const attachedFiles = shouldHideProcessAttachments ? [] : (message._attachedFiles || []); |
There was a problem hiding this comment.
Preserve user attachments when hiding process artifacts
This change drops all _attachedFiles whenever shouldHideProcessAttachments is true, and that condition is true for most normal messages because it includes hasText; as a result, user-uploaded attachments disappear from chat bubbles (including file-only sends, which still use placeholder text). The previous behavior only filtered process/tool-result attachments, so this should keep non-process files visible instead of returning an empty array.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f8d9ec5cbd
ℹ️ 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".
| set({ | ||
| messages: finalMessages.map((msg) => ( | ||
| msg._attachedFiles |
There was a problem hiding this comment.
Preserve newer messages when hydrating attachment previews
loadMissingPreviews is asynchronous, but this callback writes messages from the stale finalMessages snapshot. If streaming events, polling, or mirror sync append messages before preview hydration resolves, this set call can drop those newer entries and revert the chat timeline. The previous implementation merged hydrated files into the current state; this replacement now overwrites state and causes intermittent message loss under normal active-chat conditions.
Useful? React with 👍 / 👎.
| const filteredMessages = messagesWithToolImages.filter((msg) => !isToolResultRole(msg.role)); | ||
| const enrichedMessages = enrichWithCachedImages(filteredMessages); |
There was a problem hiding this comment.
Filter internal/system history messages before rendering
History preparation now filters only toolresult messages, so internal/system entries are passed through to the UI and mirror pipeline. This regresses prior behavior that hid non-user-facing control messages (for example system/heartbeat-style turns), so users can see plumbing messages in normal chat history instead of only conversational content.
Useful? React with 👍 / 👎.
| <NavLink | ||
| key={item.to} | ||
| {...item} | ||
| collapsed={sidebarCollapsed} | ||
| /> | ||
| to={item.to} | ||
| className={({ isActive }) => |
There was a problem hiding this comment.
Restore sidebar test IDs used by E2E navigation tests
The new sidebar nav rendering removed data-testid attributes from the primary navigation links, but multiple E2E specs still target them (for example tests/e2e/main-navigation.spec.ts and tests/e2e/gateway-lifecycle.spec.ts query sidebar-nav-models, sidebar-nav-agents, etc.). Without these attributes, those tests cannot locate navigation controls and fail consistently.
Useful? React with 👍 / 👎.
Summary
v0.3.7Included behavior
+ Add Agenttoolbar flow in chatValidation
pnpm run typecheckpnpm exec vitest run tests\\unit\\chat-target-routing.test.ts tests\\unit\\chat-input.test.tsxpnpm run build:vitepnpm exec electron-builder --win --publish neverNotes