Skip to content

Commit 297d695

Browse files
committed
docs: fix CHANGELOG commit links and reformat v0.1.0 entry
1 parent 1e940ec commit 297d695

1 file changed

Lines changed: 53 additions & 85 deletions

File tree

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 53 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,112 +3,80 @@
33

44
### Bug Fixes
55

6-
* **security:** escape font CDN URL and tighten WS origin check ([5093181](https://github.com/connorads/remobi/commit/5093181ec1f8cece06e4b0e7b0482604493b691d))
6+
* **security:** escape font CDN URL and tighten WS origin check ([1c55d5c](https://github.com/connorads/remobi/commit/1c55d5c28d85d14fc42a90813d4e479b531e4243))
77

88
## [0.2.3](https://github.com/connorads/remobi/compare/v0.2.2...v0.2.3) (2026-03-16)
99

1010

1111
### Bug Fixes
1212

13-
* **serve:** default remobi serve to localhost ([36eb0ff](https://github.com/connorads/remobi/commit/36eb0ff54b780b1a4bf336051af6d80f00f9f1cf))
13+
* **serve:** default remobi serve to localhost ([6b8706e](https://github.com/connorads/remobi/commit/6b8706ec144ff2c92f92538a2c39997534b32e4d))
1414

1515
## [0.2.2](https://github.com/connorads/remobi/compare/v0.2.1...v0.2.2) (2026-03-16)
1616

1717
### Bug Fixes
1818

19-
* guard process.argv[1] for strict index access ([32eabce](https://github.com/connorads/remobi/commit/32eabce2a86651aa101c4756f5b59935c49e8154))
19+
* guard process.argv[1] for strict index access ([fd07a60](https://github.com/connorads/remobi/commit/fd07a6026135caffc189ba40fc0051d5ee9215fa))
2020

2121
## [0.2.1](https://github.com/connorads/remobi/compare/v0.2.0...v0.2.1) (2026-03-15)
2222

2323
### Bug Fixes
2424

25-
* resolve symlink in entry guard so npx execution works ([4eab06d](https://github.com/connorads/remobi/commit/4eab06dcb2144788a65d2cd5e503b5e3e27b350c))
25+
* resolve symlink in entry guard so npx execution works ([f2409e1](https://github.com/connorads/remobi/commit/f2409e1ae63540f5594cc2384b76f6be4a701c2b))
2626

2727
## [0.2.0](https://github.com/connorads/remobi/compare/v0.1.0...v0.2.0) (2026-03-15)
2828

2929
### Bug Fixes
3030

31-
* **ci:** add npm to mise.toml for OIDC trusted publishing ([44bb745](https://github.com/connorads/remobi/commit/44bb7452d0d9e3496bacc4aaf5a63f2236a8f80f))
32-
* exclude package.json from Biome formatter ([044183f](https://github.com/connorads/remobi/commit/044183fd636fe56eb17f1cd650338c85be46ce5e))
33-
* remove leading ./ from bin path for npm 11 compatibility ([33ba38d](https://github.com/connorads/remobi/commit/33ba38daab05224fc6eeb28402bb9860c36873d2))
34-
* remove redundant checks from prepublishOnly ([efdb742](https://github.com/connorads/remobi/commit/efdb742087842ba131ed704e3e29676aa672ab87))
31+
* **ci:** add npm to mise.toml for OIDC trusted publishing ([62bfd3a](https://github.com/connorads/remobi/commit/62bfd3a79864dfe60c0edc0bd6528be0bfbf5e34))
32+
* exclude package.json from Biome formatter ([eb88ac5](https://github.com/connorads/remobi/commit/eb88ac525c4acd04afe8b01ae71b80295ebce508))
33+
* remove leading ./ from bin path for npm 11 compatibility ([b350ecb](https://github.com/connorads/remobi/commit/b350ecbe8197346c91f78bdb64bc2906b483a047))
34+
* remove redundant checks from prepublishOnly ([9f2247c](https://github.com/connorads/remobi/commit/9f2247c6a915578e7c7e1394fd9f562c7faea70c))
3535

3636
### Features
3737

38-
* add pixel R> logo and integrate across project ([44b238a](https://github.com/connorads/remobi/commit/44b238aa7909cec2c408acb5bde32f9f2c645e26))
39-
40-
## 0.1.0 β€” 2026-03-15
41-
42-
- Changed: overlay is now pre-built as an IIFE during `build:dist` β€” faster `remobi serve` startup (no runtime esbuild), smaller install footprint (esbuild moved to devDependencies). Dev mode falls back to esbuild-from-source when `dist/overlay.iife.js` is absent.
43-
44-
- Breaking: migrated from Bun to Node.js 22+ with pnpm. Runtime is now Node, bundler is esbuild, test runner is vitest, transpiler is tsdown. `remobi serve` uses Hono + @hono/node-ws for HTTP/WS. Package now ships transpiled JS (`dist/`) instead of TypeScript source.
45-
46-
- Internal: expanded oxlint β€” `suspicious` + `perf` categories, `import/no-cycle`, `import/no-self-import`, `typescript/no-non-null-asserted-optional-chain`, `unicorn/throw-new-error` (141 rules total).
47-
- Internal: expanded Biome β€” `noExcessiveCognitiveComplexity` (warn, max 25), `useFilenamingConvention` (kebab-case).
48-
- Internal: added knip for unused export/dependency detection. Removed 11 unused exports, removed redundant `happy-dom` devDep.
49-
- Internal: added publint for npm package validation. Fixed `pkg.repository.url` to `git+https://` convention.
50-
- Internal: added typos spell checker via mise.
51-
- Internal: added hk pre-commit hooks (biome, oxlint, typos).
52-
- Internal: added knip, publint, typos to CI pipeline and prepublishOnly gate.
53-
- Changed: removed `ttyd` from `mise.toml` (unsupported on macOS arm64 via current aqua metadata) and updated ttyd install guidance to be macOS/Linux friendly (`brew` on macOS, distro/source options on Linux).
54-
- Changed: shipped drawer defaults now stick to stock tmux bindings for split/session/window/copy actions and no longer include opinionated `Git`, `Files`, or `Links` buttons.
55-
56-
- Removed: plugin system (`RemobiPlugin`, `UISlot`, `UIContributionCollector`, plugin manager, UI contributions, build-time resolution, `config.plugins`). Hooks and actions remain as core infrastructure. The plugin API can be reintroduced when there's a concrete second use case.
57-
58-
- Fixed: visibilitychange listener leak in reconnect dispose path β€” the anonymous listener was never removed, causing a leak on each dispose/re-init cycle.
59-
- Fixed: reconnect overlay now retries on any overlay tap, keeps the button focused for keyboard `Enter`, and guards against duplicate reload attempts.
60-
- Fixed: unhandled promise rejection when `document.fonts.ready` fails β€” font loading failure is non-critical, terminal still works.
61-
- Internal: `bun test --coverage` reporting via `test:coverage` script.
62-
- Internal: shared `mockTerminal` test fixture extracted from 9 test files.
63-
- Internal: new tests for `applyTheme`, `haptic`, and `checkLandscapeKeyboard`.
64-
65-
- Added: reconnect overlay β€” detects connection loss via WebSocket interception and shows a full-screen "Connection lost" overlay with a Reconnect button. Auto-reconnects when the browser comes back online. Enabled by default (`reconnect: { enabled: true }`), disable with `reconnect: { enabled: false }`.
66-
67-
- Added: Remotion-based demo video in `demo/` β€” programmatically rendered, Catppuccin Mocha themed.
68-
- Added: oxlint with `consistent-type-assertions: never` rule to prevent unsafe type assertions.
69-
- Changed: `waitForTerm` now rejects after timeout (default 10s) instead of polling indefinitely.
70-
- Changed: plugin manager validates plugin shape at init β€” invalid plugins are skipped with a warning.
71-
- Changed: help overlay rewritten to DOM API (no innerHTML), eliminating XSS surface.
72-
- Changed: PWA meta-tag values are now HTML-attribute-escaped.
73-
- Added: unit tests for `buildTtydArgs`, `randomInternalPort`, `waitForTerm`, and plugin validation.
74-
- Added: `bun run build` step in CI workflow.
75-
- Added: `remobi serve --no-sleep` flag β€” prevents macOS system sleep while serving by wrapping ttyd with `caffeinate -s -w <pid>`. The assertion is held for exactly the lifetime of the server and dropped automatically on shutdown. Gracefully ignored with a warning on non-macOS platforms.
76-
- Added: keep-awake guide (`docs/guides/keep-awake.md`) covering `--no-sleep`, persistent pmset settings, nix-darwin config, and lid-close behaviour.
77-
- Added: mobile-friendly tmux config guide (`docs/guides/mobile-tmux.md`) and optional tmux optimisation step in setup skill.
78-
- Added: agent setup skill (`skills/remobi-setup/SKILL.md`), guide (`docs/guides/agent-setup.md`), and README collapsible prompt for AI-assisted configuration.
79-
- Added: `remobi serve` β€” single command to run remobi with full PWA support. Builds overlay in memory, manages ttyd lifecycle, serves manifest + icons + WebSocket relay. Replaces the multi-step build + ttyd + proxy workflow.
80-
- Added: PWA support β€” web app manifest, 192/512px icons, apple-touch-icon, theme-color meta tags for "Add to Home Screen" installability on iOS and Android.
81-
- Added: `pwa` config section (`enabled`, `shortName`, `themeColor`) β€” controls manifest generation and meta tag injection. `shortName` defaults to `name` when absent.
82-
- Added: top-level `name` config field (default `'remobi'`) β€” used as document title, PWA manifest name, and apple-mobile-web-app-title. Replaces `pwa.name` and `pwa.shortName` (the latter is now optional and falls back to `name`).
83-
- Added: default toolbar backspace button (`⌫`, sends `\x7f`) to provide reliable deletion on mobile keyboards when IME composition behaviour is inconsistent.
84-
- v0.2 extensibility and DX milestone complete: action registry, hook system, plugin manager, UI contributions, declarative button customisation, .local config overrides, plugin guide, Bun-only ADR, e2e scaffolding. Closes #1.
85-
- Added: e2e smoke test scaffold (`tests/e2e/smoke.test.ts`) β€” checks ttyd availability, skips gracefully when absent, tests HTML serving and `remobi inject` pipe path against a real ttyd process. Closes #9.
86-
- Added: ADR `docs/decisions/001-bun-only.md` β€” documents the decision to remain Bun-only, the Bun-specific APIs in use, and the conditions under which a Node runtime track would be considered. Closes #11.
87-
- Added: plugin author guide (`docs/guides/plugins.md`) covering hooks, UI contributions, custom actions, and cleanup patterns. Closes #10.
88-
- Added: stable public API surface defined in README β€” semver policy documents which import paths are public, what constitutes major/minor/patch. Closes #4.
89-
- Added: UI contribution API for plugins β€” `context.ui.add(slot, button, priority?)` lets plugins contribute buttons to `'toolbar.row1'`, `'toolbar.row2'`, or `'drawer'` slots. Contributions are merged (appended) after config buttons, sorted by priority. Closes #8.
90-
- Added: per-machine config overrides via `.local` config file β€” place `remobi.config.local.ts` next to your shared `remobi.config.ts` to apply machine-specific overrides (gitignore the `.local` file). Merged on top of the shared config using the same `RemobiConfigOverrides` schema. Closes #12.
91-
- Added: declarative button customisation β€” toolbar rows and drawer buttons now accept `ButtonArrayInput`: a plain array (replace) or a function `(defaults) => newArray`. Standard JS array methods cover all customisation needs (filter, map, spread, etc.). Closes #13.
92-
93-
- Breaking: unified toolbar/drawer model to `ControlButton` (`id`, `label`, `description`, `action`) and renamed `drawer.commands` to `drawer.buttons`.
94-
- Changed: touch scrolling defaults to wheel semantics for better behaviour across OpenCode, Claude Code, and plain tmux shells.
95-
- Added: dynamic help overlay rendered from current config (no stale hardcoded sections).
96-
- Fixed: help overlay is now fail-safe and cannot block core overlay init.
97-
- Fixed: viewport/keyboard height handling and document scroll lock to reduce white-gap/rubber-band issues on mobile.
98-
- Added: runtime config validation with path-based errors and unknown-key checks at CLI load boundaries.
99-
- Changed: config validation errors now include received-value previews, and CLI validates merged resolved config before build/inject execution.
100-
- Added: stricter CLI parsing (`-c`/`-o`/`-n`, unknown-flag errors) plus `--dry-run` for `build` and `inject`. Closes #3.
101-
- Changed: toolbar/drawer button handling now runs through a shared action registry abstraction. Closes #5.
102-
- Added: typed hook registry for overlay lifecycle and terminal send pipeline with ordered execution and error isolation. Closes #6.
103-
- Added: plugin manager primitives (`RemobiPlugin`, setup/dispose lifecycle, failure isolation) and plugin-aware `init(..., hooks, plugins)` entry. Closes #7.
104-
- Added: config `plugins` array support in CLI build/inject path with resolved local specifiers.
105-
- Changed: CLI config validation remains strict; legacy config shapes are not auto-normalised.
106-
- Tests: expanded integration/config/height coverage for the new config model and viewport logic.
107-
- Added: `gestures.swipe.left`/`right` (data to send on swipe) and `leftLabel`/`rightLabel` (help overlay text) β€” defaults match previous hardcoded behaviour (`\x02n`/`\x02p`, next/previous tmux window).
108-
- Added: `mobile.initData` (string | null) β€” arbitrary data sent to the terminal on mobile init when viewport is below `mobile.widthThreshold` (default 768px). Useful for auto-zooming a tmux pane (`'\x02z'`) or any other mobile-specific setup.
109-
- Added: `floatingButtons` config β€” always-visible buttons on touch devices using the same `ControlButton` schema as toolbar/drawer. Renders in the help overlay when non-empty.
110-
- Breaking: `floatingButtons` changed from a flat `ControlButton[]` to `FloatingButtonGroup[]`. Each group has a `position` (`'top-left' | 'top-right' | 'top-centre' | 'bottom-left' | 'bottom-right' | 'bottom-centre' | 'centre-left' | 'centre-right'`), optional `direction` (`'row' | 'column'`, default `'row'`), and a `buttons` array. Migrate: `floatingButtons: [btn]` β†’ `floatingButtons: [{ position: 'top-left', buttons: [btn] }]`.
111-
- Changed: Tailscale Serve guide now recommends always rebuilding the overlay before start; removed version-hash cache-key snippet to prevent stale build issues.
112-
- Changed: default toolbar now uses explicit tmux `Prefix` (`C-b`) and `Alt+Enter` buttons for more predictable mobile input.
113-
- Added: new drawer `Combo` action (`combo-picker`) that opens a small combo input modal for explicit Ctrl/Alt key sends.
114-
- Added: default toolbar `q` button (row 2, left) for quitting interactive TUIs.
38+
* add pixel R> logo and integrate across project ([0235c4b](https://github.com/connorads/remobi/commit/0235c4be3f1d0b503f4531a4c8adc90283eece0f))
39+
40+
## 0.1.0 (2026-03-15)
41+
42+
### Breaking Changes
43+
44+
* migrated from Bun to Node.js 22+ with pnpm β€” runtime is now Node, bundler is esbuild, test runner is vitest, transpiler is tsdown; `remobi serve` uses Hono + @hono/node-ws; package ships transpiled JS (`dist/`) instead of TypeScript source
45+
* unified toolbar/drawer model to `ControlButton` (`id`, `label`, `description`, `action`) and renamed `drawer.commands` to `drawer.buttons`
46+
* `floatingButtons` changed from flat `ControlButton[]` to `FloatingButtonGroup[]` with `position`, optional `direction`, and `buttons` array
47+
* removed plugin system (`RemobiPlugin`, `UISlot`, `UIContributionCollector`, plugin manager, UI contributions, build-time resolution, `config.plugins`) β€” hooks and actions remain as core infrastructure
48+
49+
### Features
50+
51+
* `remobi serve` β€” single command with full PWA support, overlay build, ttyd lifecycle, manifest + icons + WebSocket relay
52+
* PWA support β€” web app manifest, 192/512px icons, apple-touch-icon, theme-color meta tags for "Add to Home Screen"
53+
* reconnect overlay β€” detects connection loss via WebSocket interception, auto-reconnects on browser online event
54+
* `remobi serve --no-sleep` β€” prevents macOS system sleep via `caffeinate -s -w <pid>`
55+
* `floatingButtons` config β€” always-visible buttons on touch devices
56+
* `gestures.swipe.left`/`right` and `leftLabel`/`rightLabel` for configurable swipe actions
57+
* `mobile.initData` β€” arbitrary data sent to terminal on mobile init below width threshold
58+
* `pwa` config section (`enabled`, `shortName`, `themeColor`)
59+
* top-level `name` config field β€” used as document title, PWA manifest name, apple-mobile-web-app-title
60+
* default toolbar backspace button (`⌫`) for reliable mobile deletion
61+
* new drawer `Combo` action (`combo-picker`) for explicit Ctrl/Alt key sends
62+
* default toolbar `q` button (row 2) for quitting interactive TUIs
63+
* explicit tmux `Prefix` (`C-b`) and `Alt+Enter` toolbar buttons
64+
* dynamic help overlay rendered from current config
65+
* runtime config validation with path-based errors and unknown-key checks
66+
* stricter CLI parsing (`-c`/`-o`/`-n`, unknown-flag errors) plus `--dry-run` for `build` and `inject`
67+
* action registry abstraction for toolbar/drawer button handling
68+
* typed hook registry for overlay lifecycle and terminal send pipeline
69+
* declarative button customisation via `ButtonArrayInput`
70+
* per-machine config overrides via `.local` config file
71+
* overlay pre-built as IIFE during `build:dist` β€” faster `remobi serve` startup
72+
73+
### Bug Fixes
74+
75+
* visibilitychange listener leak in reconnect dispose path
76+
* reconnect overlay retry on any tap, focused button for keyboard `Enter`, duplicate reload guard
77+
* unhandled promise rejection when `document.fonts.ready` fails
78+
* help overlay rewritten to DOM API (no innerHTML), eliminating XSS surface
79+
* PWA meta-tag values HTML-attribute-escaped
80+
* `waitForTerm` rejects after timeout (default 10s) instead of polling indefinitely
81+
* help overlay is fail-safe and cannot block core overlay init
82+
* viewport/keyboard height handling and document scroll lock for mobile

0 commit comments

Comments
Β (0)