Skip to content

Commit c6f6bee

Browse files
committed
Merge branch 'animate-kills' into feat/soft-todo-leaky-bucket
2 parents 475e94e + 077b535 commit c6f6bee

100 files changed

Lines changed: 10024 additions & 1024 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/publish-vscode.yml

Lines changed: 0 additions & 57 deletions
This file was deleted.

.github/workflows/release.yml

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
build-standalone:
10+
name: Build Standalone (${{ matrix.target }})
11+
strategy:
12+
matrix:
13+
include:
14+
- platform: ubuntu-22.04
15+
target: x86_64-unknown-linux-gnu
16+
artifact-name: standalone-linux-x64
17+
- platform: macos-latest
18+
target: aarch64-apple-darwin
19+
artifact-name: standalone-mac-aarch64
20+
- platform: windows-latest
21+
target: x86_64-pc-windows-msvc
22+
artifact-name: standalone-win-x64
23+
runs-on: ${{ matrix.platform }}
24+
steps:
25+
- uses: actions/checkout@v4
26+
27+
- uses: actions/setup-node@v4
28+
with:
29+
node-version: 22
30+
31+
- uses: pnpm/action-setup@v4
32+
with:
33+
version: 10
34+
35+
- name: Install workspace dependencies
36+
run: pnpm install --frozen-lockfile
37+
38+
- uses: dtolnay/rust-toolchain@stable
39+
with:
40+
targets: ${{ matrix.target }}
41+
42+
- name: Rust cache
43+
uses: swatinem/rust-cache@v2
44+
with:
45+
workspaces: standalone/src-tauri
46+
47+
- name: Install system dependencies (Linux)
48+
if: matrix.platform == 'ubuntu-22.04'
49+
run: |
50+
sudo apt-get update -qq
51+
sudo apt-get install -y -qq libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
52+
53+
- name: Build Tauri app
54+
uses: tauri-apps/tauri-action@v0
55+
env:
56+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57+
# Dummy key so Tauri generates updater artifacts; real signing happens locally
58+
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
59+
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
60+
with:
61+
projectPath: standalone
62+
tauriScript: pnpm tauri
63+
args: --target ${{ matrix.target }}
64+
65+
- name: List bundle contents (debug)
66+
if: matrix.target == 'x86_64-pc-windows-msvc'
67+
run: find standalone/src-tauri/target/${{ matrix.target }}/release/bundle -type f | sort
68+
shell: bash
69+
70+
- name: Copy NSIS plugin for artifact upload (Windows)
71+
if: matrix.target == 'x86_64-pc-windows-msvc'
72+
run: |
73+
mkdir -p standalone/src-tauri/target/${{ matrix.target }}/release/nsis/x64/plugins
74+
cp "$LOCALAPPDATA/tauri/NSIS/Plugins/x86-unicode/additional/nsis_tauri_utils.dll" \
75+
standalone/src-tauri/target/${{ matrix.target }}/release/nsis/x64/plugins/
76+
shell: bash
77+
78+
- name: Upload artifacts
79+
uses: actions/upload-artifact@v4
80+
with:
81+
name: ${{ matrix.artifact-name }}
82+
path: |
83+
standalone/src-tauri/target/${{ matrix.target }}/release/mouseterm.exe
84+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/**/*.exe
85+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/**/*.msi
86+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/**/*.dmg
87+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/**/*.app
88+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/**/*.AppImage
89+
standalone/src-tauri/target/${{ matrix.target }}/release/bundle/nsis/**
90+
standalone/src-tauri/target/${{ matrix.target }}/release/nsis/**
91+
standalone/sidecar/**
92+
standalone/src-tauri/binaries/**
93+
94+
build-vscode:
95+
name: Build VSCode Extension
96+
runs-on: ubuntu-latest
97+
steps:
98+
- uses: actions/checkout@v4
99+
100+
- uses: actions/setup-node@v4
101+
with:
102+
node-version: 22
103+
104+
- uses: pnpm/action-setup@v4
105+
with:
106+
version: 10
107+
108+
- name: Install workspace dependencies
109+
run: pnpm install --frozen-lockfile
110+
111+
- name: Test lib
112+
run: pnpm --filter mouseterm-lib test
113+
114+
- name: Build frontend for VSCode
115+
run: pnpm --filter mouseterm build:frontend
116+
117+
- name: Build extension
118+
run: pnpm --filter mouseterm build
119+
120+
- name: Package extension
121+
run: cd vscode-ext && npx vsce package --no-dependencies
122+
123+
- name: Upload .vsix
124+
uses: actions/upload-artifact@v4
125+
with:
126+
name: vscode-extension
127+
path: vscode-ext/*.vsix
128+
129+
publish-vscode:
130+
name: Publish VSCode Extension
131+
needs:
132+
- build-standalone
133+
- build-vscode
134+
runs-on: ubuntu-latest
135+
steps:
136+
- uses: actions/checkout@v4
137+
138+
- uses: actions/setup-node@v4
139+
with:
140+
node-version: 22
141+
142+
- uses: pnpm/action-setup@v4
143+
with:
144+
version: 10
145+
146+
- name: Install workspace dependencies
147+
run: pnpm install --frozen-lockfile
148+
149+
- name: Download .vsix
150+
uses: actions/download-artifact@v4
151+
with:
152+
name: vscode-extension
153+
path: vscode-ext
154+
155+
- name: Publish to VS Code Marketplace
156+
working-directory: vscode-ext
157+
run: |
158+
for i in 1 2 3; do
159+
npx vsce publish --packagePath *.vsix --no-dependencies && exit 0
160+
echo "Attempt $i failed, retrying in 10s..."
161+
sleep 10
162+
done
163+
exit 1
164+
env:
165+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
166+
167+
- name: Publish to OpenVSX
168+
working-directory: vscode-ext
169+
run: |
170+
for i in 1 2 3; do
171+
npx ovsx publish --packagePath *.vsix --no-dependencies && exit 0
172+
echo "Attempt $i failed, retrying in 10s..."
173+
sleep 10
174+
done
175+
exit 1
176+
env:
177+
OVSX_PAT: ${{ secrets.OVSX_PAT }}

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ vscode-ext/media/
1515
vscode-ext/node_modules/
1616
vscode-ext/*.vsix
1717

18+
# Release signing work directory (created by scripts/sign-and-deploy.sh)
19+
release-signed/
20+
1821
# Tauri / Standalone
1922
standalone/src-tauri/target/
2023
standalone/src-tauri/binaries/
@@ -47,3 +50,4 @@ chromatic-diagnostics.json
4750
# symlinked skill files
4851
.agents/skills/
4952
.codex
53+
.claude

AGENTS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ The primary job of a spec is to be an accurate reference for the current state o
3333
- **`docs/specs/layout.md`** — Tiling layout, pane/door containers, dockview configuration, modes (passthrough/command), keyboard shortcuts, selection overlay, spatial navigation, detach/reattach, inline rename, session lifecycle, session persistence, and theming. Read this when touching: `Pond.tsx`, `Baseboard.tsx`, `Door.tsx`, `TerminalPane.tsx`, `spatial-nav.ts`, `layout-snapshot.ts`, `terminal-registry.ts`, `session-save.ts`, `session-restore.ts`, `reconnect.ts`, `index.css`, `theme.css`, or any keyboard/navigation/mode behavior.
3434
- **`docs/specs/alarm.md`** — Activity monitoring state machine, alarm trigger/clearing rules, attention model, TODO lifecycle (soft/hard), bell button visual states and interaction, door alarm indicators, and hardening (a11y, motion, i18n, overflow). Read this when touching: `activity-monitor.ts`, `alarm-manager.ts`, the alarm bell or TODO pill in `Pond.tsx` (TerminalPaneHeader), alarm indicators in `Door.tsx`, or the `a`/`t` keyboard shortcuts. Layout.md defers to this spec for all alarm/TODO behavior.
3535
- **`docs/specs/vscode.md`** — VS Code extension architecture: hosting modes (WebviewView + WebviewPanel), PTY lifecycle and buffering, message protocol between webview and extension host, session persistence flow, reconnection protocol, theme integration, CSP, build pipeline, and invariants (save-before-kill ordering, PTY ownership, alarm state merging). Read this when touching: `extension.ts`, `webview-view-provider.ts`, `message-router.ts`, `message-types.ts`, `pty-manager.ts`, `pty-host.js`, `session-state.ts`, `webview-html.ts`, `vscode-adapter.ts`, or `pty-core.js`.
36-
- **`docs/specs/tutorial.md`** — Playground tutorial on the website: 3-pane initial layout, `tut` command and TutorialShell, 6-step progressive tutorial with detection logic, theme picker, FakePtyAdapter extensions, and Pond event hooks. Read this when touching: `website/src/pages/Playground.tsx`, `website/src/lib/tutorial-shell.ts`, `website/src/lib/tutorial-detection.ts`, `website/src/components/ThemePicker.tsx`, `website/src/lib/playground-themes.ts`, `lib/src/lib/platform/fake-scenarios.ts` (tutorial scenarios), or the `onApiReady`/`onEvent`/`initialPaneIds` props on Pond.
36+
- **`docs/specs/tutorial.md`** — Playground tutorial on the website: 3-pane initial layout, `tut` command and TutorialShell, 6-step progressive tutorial with detection logic, theme picker, FakePtyAdapter extensions, and Pond event hooks. Read this when touching: `website/src/pages/Playground.tsx`, `website/src/lib/tutorial-shell.ts`, `website/src/lib/tutorial-detection.ts`, `lib/src/components/ThemePicker.tsx`, `lib/src/lib/themes/`, `lib/src/lib/platform/fake-scenarios.ts` (tutorial scenarios), or the `onApiReady`/`onEvent`/`initialPaneIds` props on Pond.
37+
- **`docs/specs/theme.md`** — Theme system: two-layer CSS variable strategy, theme data model, conversion pipeline, bundled themes, localStorage store, shared ThemePicker component, standalone AppBar picker, runtime OpenVSX installer. Read this when touching: `lib/src/lib/themes/`, `lib/src/components/ThemePicker.tsx`, `lib/src/theme.css`, `lib/scripts/bundle-themes.mjs`, `standalone/src/AppBar.tsx` (theme picker), `standalone/src/main.tsx` (theme restore), or `website/src/components/SiteHeader.tsx` (themeAware mode).
3738

3839
When updating code covered by a spec, update the spec to match. When the two specs overlap (e.g. pane header elements appear in both), layout.md documents placement and sizing while alarm.md documents behavior and visual states.
3940

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/). Release checklist in [deploy.md](docs/specs/deploy.md).
6+
7+
## [0.6.2] - 2026-04-13
8+
- Fix issues with deployed Tauri on Win and Mac (Linux is working great!)
9+
10+
## [0.6.1] - 2026-04-13
11+
- Fix missing Tauri update permissions.
12+
13+
## [0.6.0] - 2026-04-13
14+
- Standalone: fix some issues with node sidecar.
15+
- Standalone: app-rendered title bar.
16+
17+
## [0.5.2] - 2026-04-10
18+
- Codex fixes.
19+
20+
## [0.5.1] - 2026-04-10
21+
- Fix uploading glob.
22+
23+
## [0.5.0] - 2026-04-10
24+
- Get ready to test auto-update for the standalone apps.
25+
- Add icons to the standalone apps.
26+
27+
## [0.4.0] - 2026-04-10
28+
- Yet yet another initial release to test publishing.
29+
30+
## [0.3.0] - 2026-04-10
31+
- Yet another initial release to test publishing.
32+
33+
## [0.2.0] - 2026-04-09
34+
- Another initial release to test publishing.
35+
36+
## [0.1.0] - 2026-04-09
37+
- Initial release to test publishing.

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,15 @@ Here are the key development loops:
2727

2828
```sh
2929
pnpm install
30-
pnpm dev:website # http://localhost:5173/playground
31-
pnpm storybook # http://localhost:6006
32-
pnpm test # runs all tests
30+
pnpm dev:website # vite hotreload at http://localhost:5173/playground
31+
pnpm dev:standalone # tauri hotreload
32+
3333
pnpm dogfood:vscode # builds the VSCode extension and installs it into your local VSCode
34+
pnpm dogfood:standalone # builds and runs the standalone app
35+
pnpm dogfood:standalone --install # installs your local build overtop of your existing system installation
36+
37+
pnpm storybook # http://localhost:6006
38+
pnpm test # runs all tests
3439
```
3540

3641
### Folder structure

docs/specs/TODO.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)