feat(ask): start chat from selected code range - #1553
nikhil008-git wants to merge 5 commits into
Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
💤 Files with no reviewable changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review. WalkthroughThe editor context menu can create a SourceBot chat from a selected file range. Chat messages and prompts preserve range metadata and original line numbering. The roadmap-release update workflow was removed. ChangesSelected SourceBot Chat
Roadmap Release Workflow
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant EditorContextMenu
participant useCreateNewChatThread
participant createUIMessage
participant setChatState
EditorContextMenu->>useCreateNewChatThread: createChatFromSource(selected file range)
useCreateNewChatThread->>createUIMessage: build message with explicit source
createUIMessage-->>useCreateNewChatThread: data-source message part
useCreateNewChatThread->>setChatState: persist chat state
Merge Risk: ⚪ Minimal · up to No actionable issue is established for this change; it is mergeable after normal checks. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
closes #1534 |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/web/src/ee/features/chat/agent.ts`:
- Around line 1033-1034: Update the files parameter type in createPrompt to
include the range and lineOffset properties accessed by the prompt template,
using types consistent with their existing usage in the files.map rendering and
addLineNumbers call.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ed24b0e1-853e-4d18-ac94-7a2ce45a6963
📒 Files selected for processing (7)
packages/web/src/app/(app)/components/editorContextMenu.tsxpackages/web/src/ee/features/chat/agent.test.tspackages/web/src/ee/features/chat/agent.tspackages/web/src/features/chat/useCreateNewChatThread.tspackages/web/src/features/chat/utils.test.tspackages/web/src/features/chat/utils.tspackages/web/src/features/tools/types.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/web/src/features/chat/useCreateNewChatThread.ts`:
- Around line 34-39: Update createNewChatThread and its createChat handling so
every terminal path clears createInFlightRef.current and isLoading, including
unexpected rejections, service-error returns, and successful navigation after
router.push. Ensure later calls are not blocked when createChat fails or the
hook remains mounted after success, and add regression tests covering failure
and post-success cleanup.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 6d3cc5ee-0c6b-4479-9aa6-fca2f42048d5
📒 Files selected for processing (2)
packages/web/src/features/chat/useCreateNewChatThread.test.tsxpackages/web/src/features/chat/useCreateNewChatThread.ts
| const createNewChatThread = useCallback(async (children: Descendant[], overrideSearchScopes?: SearchScope[], overrideDisabledMcpServerIds?: string[], attachments: AttachmentData[] = []) => { | ||
| if (createInFlightRef.current) { | ||
| return; | ||
| } | ||
| createInFlightRef.current = true; | ||
|
|
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verify the createChat rejection contract.
rg -n -C 8 '\bcreateChat\b' packages/web/src
# Verify whether the hook remains mounted after navigation.
rg -n -C 8 '\buseCreateNewChatThread\s*\(' packages/web/srcRepository: sourcebot-dev/sourcebot
Length of output: 24052
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '--- useCreateNewChatThread outline ---\n'
ast-grep outline packages/web/src/features/chat/useCreateNewChatThread.ts --view expanded || true
printf '\n--- useCreateNewChatThread full file ---\n'
cat -n packages/web/src/features/chat/useCreateNewChatThread.ts
printf '\n--- createChat implementation ---\n'
cat -n packages/web/src/features/chat/actions.ts
printf '\n--- imports/usages with context ---\n'
rg -n -C 15 'useCreateNewChatThread|createNewChatThread|createChatFromSource|isLoading' packages/web/src/app packages/web/src/features/chatRepository: sourcebot-dev/sourcebot
Length of output: 252
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '%s\n' '--- useCreateNewChatThread implementation ---'
cat -n packages/web/src/features/chat/useCreateNewChatThread.ts
printf '%s\n' '--- createChat implementation ---'
cat -n packages/web/src/features/chat/actions.ts
printf '%s\n' '--- hook callers with context ---'
rg -n -C 15 'useCreateNewChatThread|createNewChatThread|createChatFromSource|isLoading' packages/web/src/app packages/web/src/features/chatRepository: sourcebot-dev/sourcebot
Length of output: 50380
Clear the in-flight state on every terminal path.
If createChat rejects outside the isServiceError return path, both callbacks leave createInFlightRef.current === true and isLoading === true. Later calls then return immediately. Successful calls also may leave these values set after router.push.
Handle rejected calls and reset both values before returning. Reset them after successful navigation if the hook may remain mounted. Add failure and post-success regression tests.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/web/src/features/chat/useCreateNewChatThread.ts` around lines 34 -
39, Update createNewChatThread and its createChat handling so every terminal
path clears createInFlightRef.current and isLoading, including unexpected
rejections, service-error returns, and successful navigation after router.push.
Ensure later calls are not blocked when createChat fails or the hook remains
mounted after success, and add regression tests covering failure and
post-success cleanup.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 2b7bc80. Configure here.
| }); | ||
|
|
||
| router.push(`/chat/${response.id}`); | ||
| }, [router, setChatState, toast]); |
There was a problem hiding this comment.
In-flight lock never released
Medium Severity
createInFlightRef is set to true at the start of createNewChatThread and createChatFromSource, but it is only cleared on a ServiceError. Any thrown error before that check, or a success path that does not unmount the hook instance, leaves the guard stuck so later Ask or new-chat attempts no-op with no recovery.
Reviewed by Cursor Bugbot for commit 2b7bc80. Configure here.


Summary
Adds an “Ask Sourcebot” action to the existing code-selection popover in Browse and search previews.
When code is selected, Ask Sourcebot:
Explain this selected code.This implements issue #1534 Option A only. Side panels and inline conversations are out of scope.
Screenshots
Testing
reports that limitation.
Use the first screenshot for Screenshots. Put the entitlement-error screenshot under Testing or omit it if you want
the PR to look cleaner.
Note
Medium Risk
Changes Ask chat bootstrap and agent prompt file context (range slicing); behavior is covered by new tests and still gated by Ask entitlements.
Overview
Adds Ask SourceBot to the code editor selection popover so users can open a new chat from a highlighted range, alongside the existing share-link action.
Ask from selection wires the popover through
createChatFromSource, which seeds the thread with “Explain this selected code.” and adata-sourcefile attachment (repo, revision, path, and inclusive line range). Chat creation reuses disabled MCP server preferences from local storage and ignores duplicate clicks while a create is in flight.Ranged file context in Ask extends file sources with an optional line range. The agent resolves the full file server-side, slices prompt text via
sliceFileSourceForPrompt(invalid ranges are dropped), and emitsselected_linesplus line numbers offset to the real file lines.createUIMessageaccepts explicit sources for this path.The scheduled Update Roadmap Released GitHub Actions workflow is removed.
Reviewed by Cursor Bugbot for commit 17a4e59. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by CodeRabbit
New Features
Bug Fixes
Tests