Repository navigation
Conversation
|
This PR changes the test suite by +87 test cases (browser +87, unit 0, server 0). New browser test files: Keep tests that would fail for a real reason, and test logic below the UI where it can be. See Testing. |
Reopened from pingdotgg#31242 and squashed onto current main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34b3656 to
2560c25
Compare
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Other scenariosAll 64 scenario measurements match All 64 scenario measurements
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
Problem
People who think in vim have to drop that habit the moment they write a prompt in T3 Code. There is no vim mode in the composer or any other text box, and moving around the app takes the mouse or a set of unrelated shortcuts.
Change
Adds an opt-in Settings → Chat → Vim mode for web and desktop. It is off by default, and the engine is lazy loaded, so nobody pays for it unless they turn it on.
., registers, marks, macros,/search, and:s. Instead of writing our own vim, this drives the@replit/codemirror-vim-coreengine (exact pin, small local patch) through two adapters: one for ProseMirror and one for textareas. Chips and rich formatting survive yanks and pastes, and each insert session is one undo step.j/kscroll,J/Kchange threads,:opens the command palette,gchords toggle panels, andifocuses the composer. Commands run through the user's configured shortcuts, so rebinding keeps working.The full key list is in
docs/user/keybindings.md.There are no before images because nothing changes with the setting off.
Scope and approval
There is no linked issue or discussion, and no maintainer has approved this direction or scope. This is a new feature, so it does not qualify for an exemption. It is opened as a proposal, and I understand it may be closed under the contribution policy until that approval exists.
Verification
vp run check:changedpasses on the final commit, rebased on currentmain: format, lint, knip, typecheck, react compiler, and the tests beside the changes (2,442 passed).%handling of code strings and comments, are listed by name incomposer-vim.conformance.browser.test.ts.After rebasing onto pingdotgg#30421,
**markers shown at the caret are editable text, so0xon a bold word now removes a*. I updated the two affected tests to expect that. The rebase also needed one adapter change for the newsplitOrLiftListItemargument. Both are covered by tests only, not by a new real-app pass.Known differences from real Vim, found while checking review feedback:
/and?use JavaScript regex syntax (the engine'spcredefault), so\+is a literal plus.ditacross lines does nothing.di(keeps no indented closing line, leaving()where Vim leaves(\n ).Not tested: Electron, IME input, RTL text, Windows hardware, and in the real app the
d,K,L,h,l,gb,gd,gf,grkeys andj/kin menus. Block visual mode is not supported.Council review
Rounds: 7
The council reviewed the composer only. It did not review the textarea or navigation work, or the last two composer fixes made after round 7. Gemini only reviewed and wrote no code. The fixes for the bot review findings came after the council rounds too.
Created with Claude Opus 5.5 in Claude Code.
🤖 Generated with Claude Code
🤖 Generated with Claude Code