Repository navigation
Conversation
added 9 commits
October 18, 2026 15:42
Replaces the Tampermonkey userscript, which could not work on the phone (Chrome has no extensions there) and whose stop action matched a button label codeg never renders. The gesture vocabulary is MindFS's blue-ring menu, kept in a pure module so the tracking rules are unit-tested: tap/double tap/long press plus eight cardinal and diagonal strokes, with two-stage folds anchored at each turn. Actions dispatch through the workspace contexts this controller already owns (tabs, panels, zoom, the active ACP connection), so nothing has to synthesize keyboard events. Off by default; enabled from Appearance settings, which also resets the stored position.
Adds a component suite for the ball (hidden until enabled, tap/double tap/long press, swipe and two-stage trails, drag persistence, Escape) and stubs the providers it now reaches in the chrome-controller test, which was failing to import the ACP context through the new imports. jsdom has no PointerEvent coordinates, so the helpers dispatch MouseEvents carrying the pointer event's type instead.
The bottom-right default landed on the status bar's MCP light and alerts badge (measured at 390x844 and 1280x800), and the composer's send button sits just above it. Default to the right edge at 55% height, the one band empty on both phone and desktop, and cap the panel height to the space left on its side so the action list scrolls instead of running off-screen.
- 12 new path gestures: down family single strokes (down/downLeft/downRight now first-class) and the compound pairs from the owner's list (downUp, upThenDownRight, downThenUpRight, rightThenUp/Down, downThenRight/Left, downRightThenUp, downLeftThenUp) - foldTrail gains all 9 missing folds: without them the jitter-replacement rule silently turned 8 of the 12 requested compounds into other gestures - end() no longer requires origin displacement: a round trip drawn cleanly back to its start used to be dropped - 10 new actions in the vocabulary (todos/canvas/agents/rename/cycle...) with default bindings; stopGenerating stays on an inconspicuous compound - tests: 13 passing, downward-stroke semantics reversed per new table
…ture hint pill, three ball sizes - bindings overrides: per-gesture action map in appearance settings (null = user-cleared, missing key = default), persisted per window, cross-window synced; fire() and the cheat sheet read the override - gesture feedback: the ball follows the finger during a swipe and a hint pill names the action the trail would fire (previewGesture in the engine, so pill and commit can never disagree); snap-back via transform - three size presets (small 36 / medium 40 / large 46, default large) with icon scaling, plus a 6px transparent hit-slop halo so the small preset still meets the 44px touch minimum - settings UI: size select, per-gesture binding rows, favorite-agent chips (cap 3) — all under the existing floating-ball section - i18n: 12 new gesture names + 10 new action names + settings copy across all ten locales
…nd feedback - openTodos/openTodosNew/openAutomations/openCanvas route the workbench; openTodosNew parks a task draft so the composer opens on an already-active tasks route too - openAgents/openSystemAdmin open the settings window at the section - renameConversation dispatches a global event carrying the DB id; the conversation header whose id matches opens its rename dialog (multi-tab safe); drafts get a toast instead - openSessionFolder opens the aux file tree, guarded on an active folder - cycleAgent cycles enabled+available agents on the active draft tab via confirmDraftAgent; on a saved conversation it opens a fresh draft pinned (forceAgent) to the next agent; cycleFavoriteAgent restricts the cycle to the user's favorite list from floating-ball settings - FloatingBall.toasts i18n keys across all 12 locale files
- Settings screen gesture/action labels now read the translated FloatingBall namespace (arrows: ↑↓←→, compound '↑ then ←'), instead of the untranslated AppearanceSettings English mirror - New actions: openBallBindings, cycleRunningSessions (0/1/2+ running semantics via ACP connection status), cycleRecentSessions (LRU queue + depth setting 2-4), deleteCurrentConversation (reuses header confirm dialog), openImportSessions, togglePinConversation, focusModeSelector (signal prop chain to MessageInput), togglePlanFullAccess (plan substring + matchFullAccessMode), openCollaboration; new actions ship unbound by default - New modules: recent-sessions-prefs (localStorage LRU, capacity 8, corrupted-storage tolerant), floating-ball-session-events (conversationId-filtered CustomEvents, null-matches-null) - tab-store: remember recent conversation on focusTab/bindConversationTab - 10 locales updated (parity test enforced); 2 new unit test files
…ctions merged, upstream's new keys kept
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
Rebased on latest main (supersedes the earlier #979, which was based on the previous release and has been closed).
Floating ball enhancements:
Tested on Linux (server build + web) — real-device usage verified across two machines.
Thanks for reviewing!