Commit graph

191 commits

Author SHA1 Message Date
Lawrence Chen
4bca80affe CI: discover vm via subnet scan when host alias missing 2026-02-10 16:38:06 -08:00
Lawrence Chen
7e1653a3ca CI: fix vm host detection quoting 2026-02-10 16:36:26 -08:00
Lawrence Chen
a5a29962e5 CI: find cmux-vm host via ssh config; fail if unreachable 2026-02-10 16:33:51 -08:00
Lawrence Chen
e72916a77d CI: require UI tests via vm; robust ssh opts 2026-02-10 16:32:10 -08:00
Lawrence Chen
0d950cb891 CI: run mac UI tests only in cmux-vm 2026-02-10 16:27:29 -08:00
Lawrence Chen
aa4c7ceede CI: gate mac UI tests on real GUI session 2026-02-10 16:25:44 -08:00
Lawrence Chen
635f8fe223 Fix CI: handle app activation failure in UI test runner
Add "Failed to activate application" to the retry/skip patterns so
the self-hosted runner gracefully skips UI tests when the app can't
come to foreground (Running Background state).
2026-02-10 16:15:24 -08:00
Lawrence Chen
565b02c486 Widen page max-width and remove theme transition on change
Bump navbar, docs, legal, and community layouts from max-w-5xl to
max-w-6xl. Widen docs content from max-w-2xl to max-w-3xl. Home and
blog pages unchanged. Disable next-themes transition on change.
2026-02-10 16:00:18 -08:00
Lawrence Chen
e28ed9309f Improve docs page meta descriptions for SEO
Add keyword-rich descriptions mentioning Ghostty, macOS, AI agents,
and specific features to each docs page for better search ranking.
2026-02-10 14:51:54 -08:00
Lawrence Chen
3ee1974021 CSS-only theme icon toggle, iOS status bar theme-color
- Theme icon now uses dark:hidden/dark:block CSS classes instead of
  JS state, eliminating the flash on hydration entirely
- Remove useSyncExternalStore mounted pattern (no longer needed)
- Add theme-color meta tag updated by blocking script and toggle
  for iOS Safari status bar
- Revert body fade-in animation (not needed with CSS-only icons)
2026-02-10 01:27:15 -08:00
Lawrence Chen
b99b53d03e Fade in body to mask theme flash on load 2026-02-10 01:19:50 -08:00
Lawrence Chen
a15baba93b Add blocking script to prevent theme flash on load
Inline script in <head> reads localStorage theme before first paint
and applies .dark class synchronously. Defaults to dark to match
next-themes defaultTheme config.
2026-02-10 01:11:41 -08:00
Lawrence Chen
c640355154 Rename public/icon.png to logo.png to fix blurry icon
Next.js App Router serves app/icon.png (32x32 favicon) at /icon.png,
shadowing the 256x256 public/icon.png. Rename to /logo.png so the
high-res image is served for the site logo.
2026-02-10 01:07:52 -08:00
Lawrence Chen
a7549f59c1 Update blog post date to February 12, 2026 2026-02-10 01:06:01 -08:00
Lawrence Chen
aac955bec9 Use plain img tags for icon to fix blurriness
Replace next/image with native <img> for the app icon. The 256x256
source renders crisply at 24px/48px without Next.js image processing.
2026-02-10 00:56:31 -08:00
Lawrence Chen
d1dd2e6535 Full-screen overlay with drawer-local close button and theme toggle
- Overlay covers entire viewport (inset-0 z-40) including header
- Drawer at z-50 spans full height with its own header row
- Duplicate theme toggle + close (X) button inside drawer
- Docs sidebar/FAB bumped to z-50 to stay above overlay
2026-02-10 00:54:51 -08:00
Lawrence Chen
bf98dbd40a Fix mobile drawer: move outside header for iOS, fix overlay positioning
- Move overlay and drawer nav outside <header> to avoid iOS Safari
  backdrop-filter breaking fixed positioning
- Overlay starts below header (top-12) instead of covering full screen
  so header stays clean when drawer is open
- Add invisible class when drawer closed as fallback
- Remove auto-focus on first link to prevent focus ring flash
2026-02-10 00:50:43 -08:00
Lawrence Chen
68225d9e9d Move theme toggle into header and fix mobile button wrapping
ThemeToggle was fixed-positioned over the hamburger menu on mobile.
Move it into SiteHeader so both controls sit together. Add
whitespace-nowrap to hero Download/GitHub buttons and flex-wrap
to their container so they don't break across lines on narrow screens.
2026-02-10 00:28:01 -08:00
Lawrence Chen
63fb175055 Add mobile hamburger menu with reusable drawer component
Extract drawer logic (overlay, focus trap, scroll lock, escape key)
from DocsNav into shared mobile-drawer.tsx hook and components.
SiteHeader now shows a hamburger menu on mobile that opens a
right-side drawer with nav links and download button. Footer
wraps gracefully on small screens.
2026-02-10 00:23:40 -08:00
Lawrence Chen
208c9daaaa Open GitHub link in new tab from site header 2026-02-10 00:03:57 -08:00
Lawrence Chen
76870e9c2e Add download badge with Apple icon to README 2026-02-09 23:55:52 -08:00
Lawrence Chen
4ef0070148 Update README install section to match docs 2026-02-09 23:53:22 -08:00
Lawrence Chen
399f4f9fc7 Fix README features list to use markdown bullet syntax 2026-02-09 23:53:07 -08:00
Lawrence Chen
7d1dd4a047 Fix blurry logo by skipping Next.js image optimization 2026-02-09 23:52:07 -08:00
Lawrence Chen
0ae041fb91 Fix docs sidebar z-index to be below header on desktop 2026-02-09 23:49:46 -08:00
Lawrence Chen
f970cdcf33 Add docs, blog, community pages and polish landing page layout
- Add docs pages (getting-started, changelog, keyboard-shortcuts)
- Add blog, community, and legal pages (privacy, terms, EULA)
- Add site header, footer, download button, and nav components
- Add sitemap and robots.txt generation
- Narrow main page container (max-w-2xl), fix footer positioning
- Switch README feature list to colon style
2026-02-09 23:38:05 -08:00
Lawrence Chen
5febb66873 Update landing page: switch to Bun, add view transitions and UI polish
- CI: replace Node/npm with Bun
- Add view-transition animations for theme toggle
- Set html background for flash-free theme switches
- UI refinements to download button, brew command, and layout
- Replace package-lock.json with bun.lock
2026-02-09 22:01:53 -08:00
Lawrence Chen
71ab1f8864 Update keyboard shortcuts for README and landing page
Reorganize into Workspaces, Surfaces, Split Panes, Browser,
Notifications, Find, Terminal, and Window sections.
2026-02-09 21:59:03 -08:00
Lawrence Chen
d25f14a79f Add landing page (web/) with Next.js + Tailwind
- Minimal centered layout with Geist sans font
- Typing animation cycling through agent names
- Light/dark mode toggle via next-themes
- Download for Mac button linking to latest DMG
- Feature list, GitHub + Docs footer links
- Meta tags and Open Graph for SEO
- CI: add web typecheck job (tsc --noEmit)
2026-02-09 20:51:27 -08:00
Lawrence Chen
897a79e052
Release v1.24.0 (#32) 2026-02-09 16:13:26 -08:00
Lawrence Chen
f9c8f9f55a Keep legacy bundle ID for Sparkle updates 2026-02-09 15:50:42 -08:00
Lawrence Chen
9817d131f8
Release v1.23.0 (#31)
* Rename cmuxterm to cmux across entire codebase

- Rename GitHub repos: manaflow-ai/cmuxterm -> manaflow-ai/cmux,
  manaflow-ai/homebrew-cmuxterm -> manaflow-ai/homebrew-cmux
- Rename bundle IDs: com.cmuxterm.app -> com.cmux.app
- Rename CLI: CLI/cmuxterm.swift -> CLI/cmux.swift
- Rename homebrew submodule: homebrew-cmuxterm -> homebrew-cmux
- Update all socket paths: /tmp/cmuxterm*.sock -> /tmp/cmux*.sock
- Update all GitHub URLs, DMG names, Sparkle URLs
- Update all source files, scripts, tests, docs, CI workflows

* Bump version to 1.23.0
2026-02-09 15:30:43 -08:00
Lawrence Chen
9ba1d02b2b scripts: don't inherit GIT_PAGER/GH_PAGER into app 2026-02-09 15:11:01 -08:00
Lawrence Chen
33b0c701e1 CLI: quote set-status value and preserve --tab routing 2026-02-09 15:10:58 -08:00
Lawrence Chen
3de18485e4 Update README: Ghostty-based subtitle, separate notification panel and rings 2026-02-09 14:57:42 -08:00
Lawrence Chen
7d6f33c143
Sidebar status as text + detect git HEAD changes instantly (#30)
* Sidebar status as text + detect git HEAD changes instantly

- Replace sidebar status pills with plain text + show more/less toggle
  for a cleaner, more readable sidebar layout
- Watch .git/HEAD mtime in zsh precmd to detect branch changes from
  aliases (gco), tools (gh pr checkout), etc. without waiting for the
  3s polling interval
- Fix NSImage shared instance mutation in DraggableFolderNSView by
  copying before resizing to prevent layout side-effects
- Fix set_status --tab flag being swallowed by -- stop token via
  new parseOptionsNoStop parser
- Update sidebar test to cover alias-based branch switching

* Append status text to notification body automatically

When creating notifications, include the tab's current status entries
in the notification body so users see context (e.g. git branch, ports)
alongside the notification message.

* Add screenshot to README
2026-02-09 14:18:33 -08:00
Lawrence Chen
119511f774
Bump version to 1.22.0 (#29) 2026-02-09 12:34:41 -08:00
Lawrence Chen
fd756dccce
Stop seeding shell env with full app environment (#28)
`surfaceConfig.env_vars` are overrides layered on top of Ghostty's
default subprocess environment. Starting the env map from
`ProcessInfo.processInfo.environment` re-introduced variables that
Ghostty intentionally strips (e.g. LANGUAGE, Xcode DYLD vars),
bypassing its env filtering.

Start with an empty map and add `getenv()` fallbacks for PATH, SHELL,
ZDOTDIR, and GHOSTTY_RESOURCES_DIR so critical values are still
resolved without leaking the full app environment.
2026-02-09 12:28:23 -08:00
Lawrence Chen
84f54e3181
Bump version to 1.21.0 (#27) 2026-02-09 02:50:28 -08:00
Lawrence Chen
e9c5917c66
Fix zsh autosuggestions shared history in cmuxterm (#26)
- Restore real ZDOTDIR early in zsh startup so HISTFILE uses user history\n- Preserve user ZDOTDIR without treating Ghostty injected ZDOTDIR as user\n- Add regression tests and terminfo overlay for bright colors
2026-02-09 02:35:20 -08:00
Lawrence Chen
9b938ef536
Bump version to 1.20.1 (#25) 2026-02-08 21:21:23 -08:00
Lawrence Chen
6866743519 Map Sparkle error 4005 to "Move to Applications" message
Error 4005 (updater permission) with underlying code 10 (cache
directory creation failure) has the same root cause as 1003/1005:
the app isn't in Applications.
2026-02-08 21:11:28 -08:00
Lawrence Chen
87e5ac02ad
Bump version to 1.20.0 (#24) 2026-02-08 20:44:47 -08:00
Lawrence Chen
679cafdc51 Fix update pill constraint feedback loop
The pill never appeared because:
1. SwiftUI .frame(width:0, height:0) when idle poisoned fittingSize
2. AppKit constraints locked at 0x0 prevented expansion on state change
3. fittingSize always returned 0 due to active 0x0 constraints

Fix: Remove zero-frame from SwiftUI (always render at natural size,
use opacity only). Deactivate constraints before measuring fittingSize
so they don't clamp the measurement. Pass visibility to sizeToolbarItem
to set constraints to zero when idle or natural size when active.
2026-02-08 20:21:27 -08:00
Lawrence Chen
e03fc1909b Bump version to 1.19.3 2026-02-08 19:24:54 -08:00
Lawrence Chen
59370115ce Fix pill visibility: always render, use opacity to hide
NSHostingView with frame (0,0) won't layout SwiftUI content, so
fittingSize always returns 0 when transitioning from EmptyView.
Instead, always render the pill button and use opacity/frame(0)
to hide when idle. This ensures the hosting view always has content
to measure.
2026-02-08 19:16:07 -08:00
Lawrence Chen
498cc6e4bc Fix update pill never appearing in toolbar
@Published fires on willSet, so the Combine sink measured fittingSize
while SwiftUI still saw the old state (idle/EmptyView), getting 0x0.
Defer measurement to next run loop cycle so SwiftUI processes the
new state before we read fittingSize.
2026-02-08 19:03:25 -08:00
Lawrence Chen
fc5d7eeb05 Bump version to 1.19.2 2026-02-08 18:50:46 -08:00
Lawrence Chen
dd11852ca3 Enable update pill in Release builds
The UpdatePill toolbar item was wrapped in #if DEBUG, making it
invisible in production builds. Users never saw checking/error
states in the titlebar.
2026-02-08 18:31:34 -08:00
Lawrence Chen
dc69451b29 Show checking spinner before update errors
Errors from Sparkle were bypassing the minimum check display duration,
causing the error to appear instantly (1ms) without the user ever
seeing the "Checking for updates" state. Use setStateAfterMinimumCheckDelay
for errors too so the checking spinner shows for at least 2 seconds.
2026-02-08 18:07:54 -08:00