Skip to content

Port custom multi-agent/sidebar workflow to v0.3.7#806

Open
isasardar1-coder wants to merge 4 commits into
ValueCell-ai:mainfrom
isasardar1-coder:codex/port-custom-to-0.3.7
Open

Port custom multi-agent/sidebar workflow to v0.3.7#806
isasardar1-coder wants to merge 4 commits into
ValueCell-ai:mainfrom
isasardar1-coder:codex/port-custom-to-0.3.7

Conversation

@isasardar1-coder
Copy link
Copy Markdown

Summary

  • port the saved custom multi-agent chat + sidebar project-folder workflow onto v0.3.7
  • carry forward the routing/test stabilization fixes needed for the newer tree
  • preserve the future-upgrade workflow by keeping the custom port on a dedicated branch

Included behavior

  • per-session attached agents in chat state
  • + Add Agent toolbar flow in chat
  • agent-labelled responses in shared conversations
  • sidebar project folders / project chat organization
  • targeted-send routing fixes and updated chat UI tests

Validation

  • pnpm run typecheck
  • pnpm exec vitest run tests\\unit\\chat-target-routing.test.ts tests\\unit\\chat-input.test.tsx
  • pnpm run build:vite
  • pnpm exec electron-builder --win --publish never

Notes

  • this PR is the upgrade-preservation branch for future ClawX releases
  • local helper scripts/config outside tracked source were not included in this PR

Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread scripts/bundle-preinstalled-skills.mjs Outdated
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...');
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread src/stores/chat.ts Outdated
Comment on lines 1654 to 1656
const finalMessages = getConversationMessages(currentSessionKey, primaryMessages);
set({ messages: finalMessages, thinkingLevel, loading: false });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread src/pages/Chat/ChatMessage.tsx Outdated
const attachedFiles = shouldHideProcessAttachments
? (message._attachedFiles || []).filter((file) => file.source !== 'tool-result')
: (message._attachedFiles || []);
const attachedFiles = shouldHideProcessAttachments ? [] : (message._attachedFiles || []);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Author

@isasardar1-coder isasardar1-coder left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay

Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/stores/chat.ts
Comment on lines +1710 to +1712
set({
messages: finalMessages.map((msg) => (
msg._attachedFiles
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread src/stores/chat.ts
Comment on lines +893 to +894
const filteredMessages = messagesWithToolImages.filter((msg) => !isToolResultRole(msg.role));
const enrichedMessages = enrichWithCachedImages(filteredMessages);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +542 to +545
<NavLink
key={item.to}
{...item}
collapsed={sidebarCollapsed}
/>
to={item.to}
className={({ isActive }) =>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant