Rebrand from MouseTerm to Dormouse#70
Merged
Merged
Conversation
Hero copy:
- Hook: "So many terminals. Which one needs attention?"
- Reveal: "A dormouse / knows when / to wake up."
- Footnote: "Multitasking terminal for mice (and hotkey wizards too)"
(demoted from headline to footnote)
Body copy MouseTerm → Dormouse throughout Home, SiteHeader brand text,
Dependencies copy, NotifySignupForm button ("Tether ships" → "Pocket ships").
Coming-next section reframed as Dormouse Pocket; image alt updated.
Install steps and artifact filenames flipped to Dormouse-*. Marketplace
URLs point to diffplug.dormouse (publish target).
HTML head + og:/twitter: meta refreshed with new title, description,
site_name, canonical, and dormouse.sh URLs.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
- pages/Tether.tsx → pages/Pocket.tsx
- Route /tether → /pocket
- All internal symbols (Tether* → Pocket*, TETHER_* → POCKET_*) and
CSS body classes (tether-marketing-body → pocket-marketing-body,
tether-terminal-body → pocket-terminal-body)
- Share title, aria-label, and page body updated to "Dormouse Pocket"
- "Tether" kept as the verb in body copy
("Tether a terminal session to your phone…")
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
vscode-ext/package.json:
- name: mouseterm → dormouse
- displayName: "Dormouse — Terminal Multiplexer"
(descriptive suffix for marketplace SEO; brand is "Dormouse" elsewhere)
- description rewritten with persistence + alert framing
- homepage → dormouse.sh
- All command IDs mouseterm.* → dormouse.*
- Command titles "MouseTerm: …" → "Dormouse: …"
- View container + view IDs (mouseterm-panel/view → dormouse-panel/view)
- activationEvents updated
- Keywords: added "dormouse" and "persistent"
- vsix output filename + dogfood script names
vscode-ext/src/*.ts:
- MouseTermViewProvider → DormouseViewProvider
- All command registrations and the executeCommand("…view.focus")
call updated to dormouse.* IDs
- Webview panel serializer + createWebviewPanel viewType: mouseterm
→ dormouse
- Warning messages "MouseTerm:" → "Dormouse:"
- Output channel name → "Dormouse"
- Storage keys: mouseterm.session, mouseterm.selectedShellPath →
dormouse.session, dormouse.selectedShellPath (userbase=0, no migration)
Cross-cutting message-type rename (extension ↔ webview wire protocol):
- All `mouseterm:*` ExtensionMessage / WebviewMessage discriminators
→ `dormouse:*` (init, saveState, flushSessionSave[Done], newTerminal,
selectedShell, openThemeDebugger)
- Lib side: vscode-adapter.ts (+ test), Wall.tsx window event
("mouseterm:new-terminal" → "dormouse:new-terminal"), ThemeDebugger
OPEN_THEME_DEBUGGER_EVENT constant
Lib-side miscellany:
- themes/store.ts localStorage keys
("mouseterm:installed-themes/active-theme" → "dormouse:…")
- ansi.ts playground PROMPT visual: user@mouseterm → user@dormouse
- KillModal story content + Playground.tsx comment matched
- shell-defaults.ts comment
Internal TS type `MouseTermTheme` left as-is — purely internal, 27-site
cascade, no user-facing impact. Separate refactor.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
tauri.conf.json:
- productName: MouseTerm → Dormouse
(this is what produces Dormouse.app / Dormouse-windows-x64-setup.exe /
Dormouse-linux-x86_64.AppImage on next bundle build)
- identifier: com.mouseterm.standalone → sh.dormouse.standalone
(userbase=0, no migration concern)
- Window title: Dormouse
- Updater endpoint URL → dormouse.sh
Rust crate rename (Cargo.toml):
- [package] name: mouseterm → dormouse
- [package] description rewritten
- [lib] name: mouseterm_lib → dormouse_lib
- main.rs entry call: dormouse_lib::run()
- lib.rs: log dir / log file names (~/Library/Logs/Dormouse/dormouse.log,
%LOCALAPPDATA%/Dormouse/dormouse.log, /tmp/dormouse.log fallback)
- lib.rs: window event "mouseterm://files-dropped" →
"dormouse://files-dropped"
- lib.rs: panic message + temp-dir test prefix
- Test fixture paths (\\Users\\…\\Local\\Dormouse\\…)
Frontend / Tauri JS bridge:
- standalone/index.html <title>
- AppBar.tsx: window event "mouseterm:new-terminal" →
"dormouse:new-terminal"
- tauri-adapter.ts: matching files-dropped listener, STATE_KEY
("mouseterm.session" → "dormouse.session")
- updater.ts: STORAGE_KEY ("dormouse:update-result"), changelog URL
(mouseterm.com → dormouse.sh); GitHub repo URL left as-is (repo not
renamed in this pass)
- updater.test.ts: matching STORAGE_KEY + changelog URL expectations
Capability description:
- standalone/src-tauri/capabilities/default.json
scripts/dogfood.sh:
- Install dirs ($LOCALAPPDATA/Dormouse, /Applications/Dormouse.app)
- Bundle filename patterns (Dormouse_*-setup.exe, Dormouse_*.dmg)
- Binary names ($RELEASE_DIR/dormouse, dormouse.exe)
- PowerShell process filter -Name dormouse,node
- The `pnpm --filter mouseterm-standalone` workspace filter stays —
npm package names are internal infrastructure, not renamed in this
pass
Internal npm/pnpm workspace package names left as-is (mouseterm-lib,
mouseterm-standalone, mouseterm-sidecar) — purely internal, no
user-facing impact; separate refactor.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
.github/workflows/release.yml: - Upload path for inner binary: mouseterm.exe → dormouse.exe - VS Code build pnpm filter: --filter mouseterm → --filter dormouse (matches the new vscode-ext/package.json name) - `--filter mouseterm-lib` workspace filter unchanged (internal pkg name) scripts/sign-and-deploy.sh: - FNAME_WIN/MAC/LINUX renamed: MouseTerm-* → Dormouse-* - Windows inner-exe lookup accepts both Dormouse.exe / dormouse.exe - Comment about AppleDouble extraction updated scripts/bump-version.sh: - Comment refs to the Cargo.lock `mouseterm` entry → `dormouse` website/public/standalone-latest.json left unchanged: it points to the already-published v0.9.1 release whose artifacts were uploaded as MouseTerm-*. sign-and-deploy.sh regenerates this file on the next release; the new entries will use Dormouse-*. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Root README:
- Title and tagline reframed: "A dormouse knows when to wake up.
Multitasking terminal for mice (and hotkey wizards too)."
- Opening paragraph re-anchors with the homepage hook ("So many
terminals — which one needs attention?")
- Try-it links updated to dormouse.sh and the new marketplace IDs
- Added a "Pocket (coming soon)" bullet to the features list
- Folder structure description: website builds dormouse.sh
vscode-ext/README.md:
- Title and all body copy MouseTerm → Dormouse
- All URLs mouseterm.com → dormouse.sh
- Command palette entries: "Dormouse: Focus" / "Dormouse: Open in Editor"
GitHub repo URL still points at diffplug/mouseterm (not renamed in this
pass; GitHub redirects renamed repos so this is forward-compatible).
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Docs: - AGENTS.md, DESIGN.md, PRODUCT.md: MouseTerm → Dormouse in prose - docs/specs/*.md: prose + URLs (mouseterm.com → dormouse.sh) + command IDs (mouseterm.* → dormouse.*) + message types (mouseterm:* → dormouse:*) + view container IDs to match code - docs/specs/deploy.md: example artifact filenames, log paths, env vars - docs/specs/glossary.md, shortcuts.md: brand prose - docs/specs/layout.md: `mousetermTheme` symbol → `dormouseTheme` - pnpm filter `--filter mouseterm` (vscode-ext build) updated to `--filter dormouse`. The `--filter mouseterm-lib` and `--filter mouseterm-standalone` filters stay (internal pkg names). Storybook fixtures: - UpdateDebugDialog.stories.tsx: example error path /Applications/Dormouse.app - Smoke.stories.tsx: "Dormouse Tokens" panel header / semantic-token caption - MobileTerminalUi.stories.tsx: TETHER_WALL_* → POCKET_WALL_*, story export name TetherWall → PocketWall, scenario id Code-side identifier renames discovered during doc sweep: - lib/src/components/Wall.tsx: `mousetermTheme` → `dormouseTheme` - standalone/src-tauri/src/lib.rs: `MOUSETERM_LOG_FILE` env var → `DORMOUSE_LOG_FILE` - website/src/lib/tutorial-state.ts: localStorage key "mouseterm-tut-v3" → "dormouse-tut-v3" (userbase=0, no migration) Left as-is: - CHANGELOG.md historical entries (per "leave historical changelog" guidance) - Internal npm workspace package names (mouseterm-lib, mouseterm-standalone, mouseterm-sidecar, mouseterm-website) — purely build-tool plumbing - github.com/diffplug/mouseterm URLs — repo not renamed in this pass - .claude/commands/release-notes.md — agent self-modification guard prevented edit; needs a manual MouseTerm → Dormouse pass Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
build:vscode and dogfood:vscode used --filter mouseterm to match the vscode-ext package name. That was renamed to "dormouse" in vscode-ext/package.json; update the filters to match. Workspace filters for mouseterm-lib, mouseterm-standalone, mouseterm-website, mouseterm-root remain unchanged (internal package names). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Workspace package names renamed (private packages, internal only —
no published npm-registry impact):
- mouseterm-root → dormouse-root (package.json)
- mouseterm-lib → dormouse-lib (lib/package.json)
- mouseterm-standalone → dormouse-standalone (standalone/package.json)
- mouseterm-website → dormouse-website (website/package.json)
- mouseterm-sidecar → dormouse-sidecar (standalone/sidecar/package.json)
Cascading updates:
Imports (TS/TSX): every `from "mouseterm-lib/…"` and dynamic
`import("mouseterm-lib/…")` → `from "dormouse-lib/…"` across lib,
standalone, and website source/test files.
Path / alias mappings:
- standalone/tsconfig.json, website/tsconfig.json, lib/tsconfig.app.json:
path mappings keyed on "mouseterm-lib/*" → "dormouse-lib/*"
- standalone/vite.config.ts, standalone/vitest.config.ts,
website/vite.config.ts: alias keys
- lib/.storybook/main.ts: any moduleNameMapper / alias
`workspace:*` deps:
- standalone/package.json + website/package.json: dependency entry
"mouseterm-lib" → "dormouse-lib"
pnpm `--filter` references:
- root package.json scripts (build/build:vscode/dev:lib/dev:website/
dev:standalone/build:standalone/build:website/storybook)
- .github/workflows/release.yml (--filter dormouse-lib test)
- standalone/scripts/dogfood.sh
- docs/specs/deploy.md, docs/specs/vscode.md, docs/specs/tutorial.md
- .claude/settings.json permission allowlist patterns
pnpm-lock.yaml regenerated via `pnpm install`.
Verified: all 514 tests pass (lib 460, website 38, standalone 16);
dev server serves /, /pocket, /playground with 200 OK and the build
output reports `dormouse-root@ dev:website` / `[email protected]
predev`.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
…iginal word reveal The hook now contains three lines instead of two: 1. "So many busy terminals." (visible on load) 2. "Which needs attention?" (visible on load) 3. "A dormouse knows when to wake." (revealed during icon climb) Line 3 fades in via a new scroll-driven span (dormouseLineRef) tied to the icon-rise progress. New constants control the timing: DORMOUSE_LINE_REVEAL_START = 0.25 // starts fading in at 25% climb DORMOUSE_LINE_REVEAL_END = 0.55 // fully visible at 55% climb Once the climb finishes, the existing HOOK_FADE_REMAINING fade drops the whole 3-line block at once. The word reveal returns to the original copy, timing, and size: - "Multitasking" / "terminal" / "for mice (caramel)" - footnote: "(and hotkey wizards too)" - size: text-[clamp(2.5rem,5vw+0.5rem,4rem)] - WORD_THRESHOLDS [0.25, 0.40, 0.55] unchanged Hook size stays at the smaller clamp(2rem,…,3.5rem) since line 3 is longer than the original two-line hook, but the reveal is now back to the larger original clamp. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
At display sizes (clamp 2-3.5rem) with default line-height (~1.4), wrapped text inside a single <span> opens a gap roughly equal to gap-2 between sibling <span>s. The two distances become indistinguishable, so the eye can't tell which lines belong together. - leading-tight (1.25) on the hook container so wrapped text in a single line hugs together (~8px wrap gap at 32px mobile font) - gap-2 → gap-3 so the inter-span gap (12px) is clearly larger than the wrap gap, restoring the 1.5× hierarchy - Drop the dormouse line's mt-2: the opacity reveal already signals "new line"; uniform rhythm reads cleaner than a manual nudge Picks up the live-edited hook copy (lines 1–2 with opacity-80 to weight attention toward the dormouse reveal, "Which ones need attention?"). Dormouse line stays at "A dormouse knows when to wake." — the product alerts/wakes you; it doesn't put anything to sleep, so the verb pair "sleep + wake" would overclaim. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Previously the third hook line lived inside hookRef, so when the hook container faded out (during the icon's last 10% climb) all three lines went together. With the new structure, lines 1+2 sit inside hookRef and the dormouse line is a sibling at the layout level — its opacity is driven independently. Timeline: - icon climb 25% → 55%: dormouse line fades in - icon's last 10% : hookRef (lines 1+2) fades up and out - dormouse holds at 1.0 through the gap - runway fraction 0.17 → 0.25: dormouse fades out and translates up - runway fraction 0.25: "Multitasking" begins to pop in (unchanged) The fade-out range ends exactly at WORD_THRESHOLDS[0] so the dormouse is gone the instant the word reveal starts — handing the stage off cleanly. Added two new constants (DORMOUSE_LINE_FADE_OUT_START / END) and a will-change-transform on both fading layers so the compositor keeps their layers warm during the animation. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
The scroll smoother (HERO_SCROLL_HALFLIFE_S = 0.06) settles asymptotically near each threshold. Opacity values like 0.004 leave a ghost of the element rendered: visually a "hair off transparent", and worse, any non-zero opacity disables the browser's `opacity: 0` compositor fast-path so the ghost is sometimes painted and sometimes not — the inconsistency that read as a race condition on scroll-up. Add a `snapProgress(p, eps = 0.005)` helper that rounds 0..1 values within eps of an endpoint to exactly 0 or 1, and apply it everywhere syncScrollState writes opacity: - the three word reveals (Multitasking / terminal / for mice) - the footnote - the header brand fade - the hook (lines 1+2) fade-out - the dormouse line's combined fade-in × fade-out Transforms are left raw — sub-pixel translateY drift is imperceptible and not subject to the same compositor edge case. The header backgroundColor/blur both scale off the snapped headerProgress, so they also lock to clean 0 at the bottom of their range. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Deploying mouseterm with
|
| Latest commit: |
c2ff8ed
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://68a43959.mouseterm.pages.dev |
| Branch Preview URL: | https://dormouse-rebrand.mouseterm.pages.dev |
In a stock xterm.js terminal, Shift+Enter and Enter both send `\r`, so TUIs like Claude Code can't bind them differently and both submit. Upgrading @xterm/xterm to a 6.1.0 beta and opting into `vtExtensions.kittyKeyboard` lets the terminal advertise the kitty keyboard protocol; when the inner program negotiates it, modified keys round-trip as distinct CSI u sequences. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Cargo.toml's [package].name became `dormouse` in the earlier rebrand commit. Running `cargo check` regenerates the lockfile's package entry; commit that so CI's `--frozen-lockfile` doesn't trip. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Home.md (new): canonical marketing-copy reference for the homepage.
Native markdown — `##` headings then prose, no metadata labels — so
it reads as the actual marketing voice. Keep in sync with Home.tsx
when copy changes.
README.md: swap the inline hero image to website/public/og-image.jpg
(the 3D dormouse-and-terminal social card), restructure the Try-it
links into Playground / VS Code marketplace / Standalone, and trim
the lead paragraphs.
Home.tsx — feature sections:
- Reorder to match Home.md: tmux first, then alerts, then copy-paste.
- Section 1 "Soft as a mouse, sharp as a tmux" (was last): leads
with the big clamp(1.5rem,2.5vw+0.5rem,2.25rem) heading inside a
`max-w-2xl` text well, sitting over a `max-w-5xl` full-width
tmux video. New body copy: "Upgrade your VS Code or native
terminal with a flexible multipane layout. Minimize the tasks
you're not watching to a compact status indicator."
- Section 2 "Stop watching terminals spin" (was first): two-column
`max-w-5xl grid-cols-[3fr_2fr]` with alert video on the left.
Append BEL / OSC 9/99/777 support to the second paragraph.
- Section 3 "Newlines and copy paste like you meant" (was middle,
retitled): two-column `grid-cols-[2fr_3fr]`. New opening
paragraph about Shift+Enter; drop the trailing
"Dormouse lets you copy paste like a human" line.
Home.tsx — hero animation:
- Pull hookFadeProgress out of the hookRef-only block so the dormouse
line can share it. Dormouse fadeIn = hookFadeProgress: as lines
1+2 fade out the dormouse fades in by the exact same amount.
Perfect crossfade instead of the earlier mid-climb reveal.
- Drop the now-unused DORMOUSE_LINE_REVEAL_START / END constants;
keep DORMOUSE_LINE_FADE_OUT_* for the later handoff to
"Multitasking".
Note: README.md line 11 has an in-flight phrase that may need a
follow-up edit ("with standard terminal .,mn,.mn.,mn").
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
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.
Cons:
Pros: