Repository navigation
feat(web): start work from the palette's typed text - #806
Open
danyaberezun wants to merge 2 commits into
Open
danyaberezun wants to merge 2 commits into
danyaberezun wants to merge 2 commits into
Conversation
danyaberezun
requested review from
Olga Lavrichenko (OLavrik),
Rustam Sadykov (SBOne-Kenobi) and
Rinat S (rsolmano)
as code owners
October 22, 2026 05:39
danyaberezun
force-pushed
the
global-search-start
branch
from
October 22, 2026 05:42
094416e to
853ea2c
Compare
Olga Lavrichenko (OLavrik)
requested changes
Oct 22, 2026
Olga Lavrichenko (OLavrik)
left a comment
Collaborator
There was a problem hiding this comment.
A few more issues on top of the existing ones. The first four are blocking, the last three are non-blocking nits.
danyaberezun
force-pushed
the
global-search-start
branch
from
October 26, 2026 00:15
853ea2c to
961bb7b
Compare
danyaberezun
force-pushed
the
global-search-start
branch
from
October 26, 2026 02:13
961bb7b to
fa75e5d
Compare
This was referenced Oct 26, 2026
Olga Lavrichenko (OLavrik)
approved these changes
Oct 26, 2026
danyaberezun
force-pushed
the
global-search-start
branch
from
October 26, 2026 19:50
fa75e5d to
1da7413
Compare
This was referenced Oct 26, 2026
danyaberezun
force-pushed
the
global-search-start
branch
from
October 28, 2026 03:25
1da7413 to
5df397c
Compare
A typed query in the All or Work scope ends in one row «Start work with “…”…»; Enter on it, or Mod+Enter from any row, closes the palette and opens the shell's Create-workspace dialog with the text as the prompt, so the target, base branch and model are chosen where they always are and nothing starts without the dialog. The row is disabled offline like every host mutation and is never remembered by the learning store.
… and late replies A held Enter or Mod+Enter acts once in the palette, and the Create-workspace dialog ignores the key's repeats, so the press that opens it never submits it. A start never replaces a Create dialog that is already open (an attention notification can open the palette over it), so its draft and any creation in flight survive. Rows a host reply brings while a selection is held land after the Start row too and never as the top hit, so a selected Start row does not move; a lone Start row is not held, so host-only matches still rank above it. The prompt drops a scope prefix the search dropped, quotes alone are no start, the row is offered offline like New workspace, its badge no longer advertises a chord the palette does not bind, the live region does not count it as a result, and the live test checks only the handoff.
danyaberezun
force-pushed
the
global-search-start
branch
from
October 28, 2026 14:17
5df397c to
bd5d56e
Compare
Collaborator
Author
|
@jetbrains-air please review — rebased with the stack onto main |
This branch has not been deployed
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.
Problem
With #804 and #805 the palette finds things and runs commands, but a typed task description still dead-ends in "No matches": starting work means leaving the box for
⌘Nand retyping the prompt. Every 2026 agent app keeps creation out of its finder (Warp walked its "search and run" box back, Claude bound creation to an explicit mode) — but all of them let the typed text travel to the creation surface.Third PR of the global-search stack; stacked on #805.
Redesign (Oct 26). The first cut started work immediately with Tab-cycled targets (new workspace / project folder / current chat),
⌘↵and⇧⌘↵. Reviews found target/dialog mismatches, a steer-vs-follow-up hazard and agit.listBranchesregression — all symptoms of a second start path. The redesign keeps one: the dialog.Rebased on
main(Oct 28, twice) with the rest of the stack (search is protocol v96 now; this PR adds no protocol).Review (Oct 28). A design review and three rounds of code review (GPT-6 Astra, Claude Fable 5.1) changed:
↵/⌘↵acts once in the palette, and the Create dialog ignores the key's repeats, so the press that opens it never submits it (before, a long press created the workspace and sent the prompt unseen).↵on a file search into a start;⌘↵is the start that never depends on rows./…), quotes alone offer no start, the row is offered offline like New workspace, the⌘N dialogbadge is gone (the row shows its⌘↵keycaps), the live region no longer counts the row as a result, and the live spec checks only the handoff.Approach
⌘↵keycaps.↵on it, or⌘↵from any row, closes the palette and opens the shell's Create-workspace dialog with the text as the prompt — target, base branch and model are chosen where they always are. Nothing starts without the dialog.startEligible(parsed)(a term in the All or Work scope) gates the row, the shortcut and its footer hint alike;startPrompt(raw, parsed)hands over the text as typed (only the scope prefix stripped — whitespace, quotes and tokens untouched), never the matcher's normalized terms.searchnever importspanels.PaletteStartis{ openDialog(text) }; shell binds it to the same keyboard-ownedNewWorkspaceDialoginstance⌘Nopens, through its existinginitialPrompt.NewWorkspaceDialogitself is untouched (the earlierpanels/startWork.tsextraction is gone — it had one consumer left).Deferred: the "chat without a project" target (PR4), images and templates from the palette (the dialog keeps them).
Changes
apps/web/src/search:PaletteStartprop, thestartrow kind and section (START_ROW_ID,startEligible,startPrompt),Mod+↵, footer hint; SPEC section "Start from the typed text".apps/web/src/shell:useSearchPalettebuildsPaletteStartfrom the context project;Shell's keyboard-opened dialog accepts aninitialPrompt;shell/SPEC.mdandcommands/SPEC.mdcoverage row updated.packages/locales/en.json:search.group.start,search.start.title/.subtitle,search.hint.start.apps/web/src/panels/NewWorkspaceDialog.tsx: the prompt's Enter submits only on a fresh press (!e.repeat).search-palette.spec.tsgains "the Start work row and Mod+Enter open the Create-workspace dialog prefilled" (and that>hides the row), "a held Enter or Mod+Enter opens the Create-workspace dialog once and never submits it", and "a Start row the user selected keeps its place and its Enter when host rows land after it" (the host reply held on the socket);search-start.live.spec.ts(@agent) goes palette → dialog → Create and checks the exact prompt the new workspace's chat is sent;e2e/fixtures/app.tsexportsloadPersistedWorkspaces.⌘↵opens Create workspace with the typed text.Screenshots
Same scenario (the Default workspace of
sample-project, a task typed into the palette, ↑ to the last row), 1280×800.⌘N dialog, with⌘↵ startin the footer↵on the row: the Create-workspace dialog with the text as the promptTesting
All on the final head (
bd5d56e96) unless noted:bunx turbo run typecheck --filter='!@thinkrail/desktop'→ 24/24 green;bun run lint,check:i18n,check:compiler,check:spec-surface,check:boundaries,check:deps,check:seams→ greenapps/webbun test→ 2049 pass (new: the start row's placement against late rows, the quote-only rule, the stripped prompt)bun run e2e e2e/search-palette.spec.ts --repeat-each=3→ 54 passed (and ×4 → 72 passed on the previous head);e2e/changes-review.spec.ts --repeat-each=4→ 68 passed (a one-off failure of its large-diff test in a loaded full run did not reproduce)bun run e2e(full no-agent suite, 8 shards) → all passedbun run e2e:full e2e/search-start.live.spec.ts→ 1 passed: the dialog opens prefilled, Create sends exactly the typed text as the new chat's first prompt, and the agent answersRelated issues
Part of the global-search stack (#804 → #805 → this).
Checklist
bun run lint,bun run typecheck,bun run testbun run e2e, orbun run e2e:fullwhen touching agent behavior)SPEC.md/ top-level specs updated to reflect any boundary, contract, or behavior change