Parallel multi-model chat: child lanes + Lanes focus#123
Closed
Parallel multi-model chat: child lanes + Lanes focus#123
Conversation
- Add IPC suggestLaneName for AI-derived lane name prefixes from the prompt - Work new-chat draft: optional parallel mode with per-model configure (model, reasoning, permissions, Codex execution mode) - On send: create child lanes per model, open chats, send prompt, navigate to Lanes with multi-select - Lanes: laneIds + workFocus query for split columns and work-emphasis tiling (layout v6) Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- Allow images in parallel mode (same refs sent to every child session); cap via PARALLEL_CHAT_MAX_IMAGES - Filter @ picker to images; file input accept=image/*; validate paste/drop - Refined parallel launch card, entry button, send enables with images-only prompt - Steer fallback includes attachment paths; image-only send uses short default line Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
- Replace image-only parallel rules with same file/image support as single chat - Cap parallel attachments via PARALLEL_CHAT_MAX_ATTACHMENTS (12) - Naming seed and empty-message default text cover mixed attachments Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
arul28
added a commit
that referenced
this pull request
Apr 23, 2026
- orchestratorService: drop redundant ADE_CLI_AGENT_GUIDANCE prepend in augmentedPrompt; buildFullPrompt already injects it into the system prompt for mission-tooling workers, so the double-injection wasted context. - adeActions registry.graph_state: ignore caller-supplied projectId and always key by runtime.projectId — closes the cross-project read/write escalation. - adeActions registry.layout/tiling_tree/graph_state set: reject non-plain- object payloads in addition to missing keys (allow explicit null to clear). - adeActions registry CTO-only: gate usage.poll alongside start/stop/forceRefresh. - prService.upsertRow: no longer adopts rows matching by repo/PR number across lanes unless caller passes allowRepoPrAdoption. Only duplicate-PR recovery in createFromLane opts in; linkToLane + refresh stay lane-scoped. - prService.getRowByNumber: accepts optional repo owner/name; throws on cross-repo ambiguity so bare "#123" locators surface conflicts instead of silently picking the most-recently-updated row. - main.ts: autoUpdateService is initialized before rpcRuntime construction so the embedded socket RPC captures a live instance instead of null. - cli.ts VALUE_CARRIER_FLAGS: prune boolean-only flags (--delete-source, --delete-source-lane, --include-ignored, --unresolved). - agentChatService: decouple ADE_CLI_AGENT_GUIDANCE from shouldInjectLaneDirective. Providers without persistent system-prompt guidance (Codex/OpenCode/Cursor) now get the block on every launch, even resumed sessions. - providerOrchestratorAdapter.test: accept the now-always-augmented worker prompt via expect.stringContaining("diagnose the failing check") instead of an exact-equality assertion. Addresses 3134403033, 3134403054, 3134403060, 3134403076, 3134443870, 3134443879, 3134503369, 3134503423, 3134504179, 3134504183, 3134504190, 3134504196. Fixes the providerOrchestratorAdapter test that failed on CI. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
arul28
added a commit
that referenced
this pull request
Apr 23, 2026
* fix: ADE CLI/PR workflow and integration lane ownership
- Expand ADE CLI RPC, bootstrap, and command surface; add shared adeCliGuidance for agent prompts.
- Wire desktop orchestrator, chat, CTO, and main for PR/CLI behavior.
- Derive integration scratch lanes from missing merge-into id; avoid misclassifying adopted lanes in cleanup.
Made-with: Cursor
* ship: iteration 1 — align CLI workspaceRoot with explicit project root
When --project-root or ADE_PROJECT_ROOT fixes the project root, default workspaceRoot to that path unless ADE_WORKSPACE_ROOT/--workspace-root is set (fixes capy-ai review thread).
Made-with: Cursor
* fix: rebase onto main, review follow-ups, CI terminal test
- Resolve adeRpcServer/bootstrap/cli conflicts with adeActions registry + headless services.
- prService: clear pr_group_members when PR row moves lanes; tighter duplicate-PR message match.
- CLI: route computer/artifact/setting aliases; safer hasHelpFlag after value-taking flags.
- Orchestrator: log augmented startup preview when ADE CLI guidance is prepended.
- main.ts: drop duplicate AdeRuntime passthrough keys.
- TerminalView test: real timers + waitFor for webgl fallback flake.
Made-with: Cursor
* ship: iteration 2 — review follow-ups + CLI audit fixes
- adeRpcServer / adeActions registry: role-gate CTO-only methods (linear_credentials
set/clear, github set/clear token, update.quitAndInstall, flow_policy.save/rollback,
linear_sync.runSyncNow/resolveQueueItem, linear_ingress.ensureRelayWebhook,
budget.updateConfig, feedback.submitPreparedDraft, usage.start/stop/forceRefresh)
so agent-role callers cannot invoke them via run_ade_action.
- layout.set / tiling_tree.set / graph_state.set reject calls with missing payload
key instead of persisting default {}/null, preventing accidental UI state wipe.
- create_pr_from_lane threads baseBranch through prService.draftDescription so
auto-drafted title/body describe the actual target branch.
- Integration lane provenance: only flag as "adopted" when
preferred_integration_lane_id === integration_lane_id; mismatched scratch lanes
stay "ade-created" so cleanup/delete works.
- promptInspector: dedup ADE_CLI_AGENT_GUIDANCE block.
- agentChatService: skip first-user-message guidance injection for Claude
sessions (system prompt already carries it).
- cli hasHelpFlag: expand valueCarrierFlags to cover all ~120 value-taking
long-flags so --help after a pending value flag is treated as the value.
Addresses review comments 3134159150, 3134159153, 3134159164, 3134196314,
3134196316, 3134196319, 3134196322, 3134196340. Fixes 3 failing adeRpcServer
tests around dynamic ADE actions listing.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ship: iteration 3 — sync ade action schema to registry, plug PR-row handoff gap
- adeActions registry: export ADE_ACTION_DOMAIN_NAMES as source of truth;
AdeActionDomain derived from it.
- adeRpcServer: list_ade_actions/run_ade_action schema enums now pull from
ADE_ACTION_DOMAIN_NAMES, removing ~25 domains that were advertised but not
backed by the registry (agent_tools, ade_cli, dev_tools, sync, etc.) and
adding the missing automations/issue entries.
- prService.upsertRow: when reusing a PR row across lanes, null out
integration_proposals.linked_pr_id alongside the pr_group_members cleanup so
old integration workflows don't silently track the new lane's PR status.
- cli.ts hasHelpFlag: add "-q" to valueCarrierFlags (used by files search /
memory search).
Addresses review comments 3134268111, 3134268114, 3134268121, 3134268125.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ship: iteration 4 — review follow-ups
- prService.findExistingPrForBranch: drop `|| Boolean(candidate?.draft)`.
GitHub keeps draft=true on closed drafts, so the OR could prefer a closed
draft over a later open PR. state==="open" is sufficient.
- cli.ts VALUE_CARRIER_FLAGS: add -m, --max-rounds / --rounds, --max-log-bytes,
--max-prompt-chars, --recent-limit; drop --text (global output flag, broke
`lanes list --text --help`).
- cli.test.ts: regression for `--text --help` ordering.
- cli.ts findAdeManagedWorktreeRoot / findProjectRoots: canonicalize with
fs.realpathSync.native so symlinked worktree paths still match.
- coordinatorAgent.ts: drop ADE_CLI_AGENT_GUIDANCE injection — coordinator
delegates to workers and has no terminal tool, so the guidance misled it.
- main.ts buildAdeActionRuntimeForAutomations: forward keybindingsService,
onboardingService, feedbackReporterService, usageTrackingService,
budgetCapService, autoUpdateService so desktop automations can dispatch
the new action domains.
Addresses review comments 3134349765, 3134365534, 3134365536, 3134365659,
3134365660, 3134365668. 3134365535 already addressed in iter 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ship: iteration 4 (post-rebate) — post-merge review follow-ups + CI fix
- orchestratorService: drop redundant ADE_CLI_AGENT_GUIDANCE prepend in
augmentedPrompt; buildFullPrompt already injects it into the system prompt
for mission-tooling workers, so the double-injection wasted context.
- adeActions registry.graph_state: ignore caller-supplied projectId and always
key by runtime.projectId — closes the cross-project read/write escalation.
- adeActions registry.layout/tiling_tree/graph_state set: reject non-plain-
object payloads in addition to missing keys (allow explicit null to clear).
- adeActions registry CTO-only: gate usage.poll alongside start/stop/forceRefresh.
- prService.upsertRow: no longer adopts rows matching by repo/PR number across
lanes unless caller passes allowRepoPrAdoption. Only duplicate-PR recovery
in createFromLane opts in; linkToLane + refresh stay lane-scoped.
- prService.getRowByNumber: accepts optional repo owner/name; throws on
cross-repo ambiguity so bare "#123" locators surface conflicts instead of
silently picking the most-recently-updated row.
- main.ts: autoUpdateService is initialized before rpcRuntime construction so
the embedded socket RPC captures a live instance instead of null.
- cli.ts VALUE_CARRIER_FLAGS: prune boolean-only flags
(--delete-source, --delete-source-lane, --include-ignored, --unresolved).
- agentChatService: decouple ADE_CLI_AGENT_GUIDANCE from shouldInjectLaneDirective.
Providers without persistent system-prompt guidance (Codex/OpenCode/Cursor)
now get the block on every launch, even resumed sessions.
- providerOrchestratorAdapter.test: accept the now-always-augmented worker
prompt via expect.stringContaining("diagnose the failing check") instead of
an exact-equality assertion.
Addresses 3134403033, 3134403054, 3134403060, 3134403076, 3134443870,
3134443879, 3134503369, 3134503423, 3134504179, 3134504183, 3134504190,
3134504196. Fixes the providerOrchestratorAdapter test that failed on CI.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds optional parallel model mode on the Work tab new chat draft. When enabled, the user configures two or more distinct models (each with its own model, reasoning tier, permission mode, Codex execution mode where applicable). Submitting one prompt:
agentChat.suggestLaneName(same model stack as auto-title) to derive a short shared task prefix from the prompt (or from an attachment-only description when there is no text).{prefix}-{codex|claude|cursor|…}.sendto every child session (max 12 total per launch,PARALLEL_CHAT_MAX_ATTACHMENTS).@search, upload, paste, and drag-drop behave like single-chat. If the draft is empty but attachments exist, a short default user line is sent so the backend always gets non-emptytext./lanes?laneIds=…&workFocus=1so all new lanes are selected and the Work pane is emphasized via a dedicated tiling preset (layout version v6).UX notes
forceDraftMode).Technical
ade.agentChat.suggestLaneName→agentChatService.suggestLaneNameFromPrompt.laneIds(comma-separated) for multi-column selection;workFocus=1triggers work-emphasis tiling when the listed lanes match the visible split.