@carlesandres/house 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,31 +1,27 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to house land here. Format follows
4
- [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
5
- follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from
6
- v0.1.0 onward.
3
+ All notable changes to house land here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from v0.1.0 onward.
7
4
 
8
- The publish workflow (`.github/workflows/publish.yml`) runs on the
9
- `release: published` event, runs `npm publish` via Trusted Publisher,
10
- and lets GitHub auto-generate release notes from commit subjects; this
11
- file is the curated, narrative version.
5
+ The publish workflow (`.github/workflows/publish.yml`) runs on the `release: published` event, runs `npm publish` via Trusted Publisher, and lets GitHub auto-generate release notes from commit subjects; this file is the curated, narrative version.
12
6
 
13
7
  ## [Unreleased]
14
8
 
9
+ ## [0.4.1] — 2026-05-22
10
+
11
+ ### Added
12
+
13
+ - Header chrome: borderless one-row identity strip above the panes carries the ⌂ brand mark and running version. Renders in both directory mode (Browser) and single-file mode (App). Hidden on terminals shorter than 20 rows so tight panes keep the reader breathable.
14
+
15
15
  ## [0.4.0] — 2026-05-21
16
16
 
17
17
  ### Added
18
18
 
19
- - Command palette v1: `ctrl+p` opens a modal palette with visible browser
20
- commands derived from the keymap, including quit, sidebar toggle, help,
21
- filter, open-in-browser, and theme controls.
22
- - Palette search uses a small tiered scorer so empty queries stay in keymap
23
- order while typed queries rank stronger title and word-boundary matches.
19
+ - Command palette v1: `ctrl+p` opens a modal palette with visible browser commands derived from the keymap, including quit, sidebar toggle, help, filter, open-in-browser, and theme controls.
20
+ - Palette search uses a small tiered scorer so empty queries stay in keymap order while typed queries rank stronger title and word-boundary matches.
24
21
 
25
22
  ### Fixed
26
23
 
27
- - Reader scroll focus is suspended while overlays are open, preventing palette
28
- arrow navigation from scrolling the markdown pane behind the modal.
24
+ - Reader scroll focus is suspended while overlays are open, preventing palette arrow navigation from scrolling the markdown pane behind the modal.
29
25
 
30
26
  ### Tests
31
27
 
@@ -37,77 +33,43 @@ Beta release gates (DESIGN §10.2) closed.
37
33
 
38
34
  ### Fixed
39
35
 
40
- - Language-tagged fenced code blocks no longer disappear while markdown
41
- highlighting settles. `house` now uses opentui `0.2.12`, which includes
42
- markdown/code-block rendering fixes, and the browser pane no longer
43
- remounts markdown for one file while still holding another file's loaded
44
- content.
45
- - Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted
46
- foreground) instead of as plain body text. opentui's syntax-style API
47
- has no true strikethrough attribute; this is the closest visual we can
48
- produce, documented in DESIGN §5.1.
36
+ - Language-tagged fenced code blocks no longer disappear while markdown highlighting settles. `house` now uses opentui `0.2.12`, which includes markdown/code-block rendering fixes, and the browser pane no longer remounts markdown for one file while still holding another file's loaded content.
37
+ - Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted foreground) instead of as plain body text. opentui's syntax-style API has no true strikethrough attribute; this is the closest visual we can produce, documented in DESIGN §5.1.
49
38
 
50
39
  ### Changed
51
40
 
52
41
  - Reduced re-renders and allocations in `Browser` / `Footer` hot paths.
53
- - DESIGN §10.2 test gate rephrased to target the integration surface
54
- house owns (the tree-sitter scope map) rather than re-testing opentui's
55
- renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for
56
- every node type §5.1.3 promises.
42
+ - DESIGN §10.2 test gate rephrased to target the integration surface house owns (the tree-sitter scope map) rather than re-testing opentui's renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for every node type §5.1.3 promises.
57
43
 
58
44
  ### Docs
59
45
 
60
- - README embeds a VHS-generated demo gif; `tape/` holds the source
61
- scripts.
62
- - `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient`
63
- / `TestRecorder` testing patterns and the "before blaming `<markdown>`"
64
- stale-watcher debugging checklist.
46
+ - README embeds a VHS-generated demo gif; `tape/` holds the source scripts.
47
+ - `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient` / `TestRecorder` testing patterns and the "before blaming `<markdown>`" stale-watcher debugging checklist.
65
48
 
66
49
  ## [0.3.0] — 2026-05-16
67
50
 
68
51
  ### Changed
69
52
 
70
- - **Project renamed from `openmdr` to `house`.** The npm package is now
71
- `@carlesandres/house`; `@carlesandres/openmdr` is deprecated and will
72
- not receive further releases. The CLI binary is now `house` (was
73
- `openmdr`). The GitHub repository moved to
74
- `https://github.com/carlesandres/house`; GitHub auto-redirects old
75
- URLs and issue/PR numbers are preserved. The theme schema file moved
76
- to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL
77
- on the new repo.
78
- - `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter
79
- input.
53
+ - **Project renamed from `openmdr` to `house`.** The npm package is now `@carlesandres/house`; `@carlesandres/openmdr` is deprecated and will not receive further releases. The CLI binary is now `house` (was `openmdr`). The GitHub repository moved to `https://github.com/carlesandres/house`; GitHub auto-redirects old URLs and issue/PR numbers are preserved. The theme schema file moved to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL on the new repo.
54
+ - `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter input.
80
55
 
81
56
  ### Added
82
57
 
83
- - `--sort <mode>` flag selecting the per-directory group order in the
84
- sidebar. `dirs-first` (the existing default) keeps directories above
85
- files; `files-first` flips it, surfacing top-level files like
86
- `README.md` before nested subtrees.
87
- - `/` opens a filter input at the bottom of the sidebar. Typed
88
- characters narrow the list with a fuzzy subsequence match on the
89
- file's relative path; matches are re-ranked by score (word-boundary
90
- and consecutive-character bonuses). Esc clears the query and closes
91
- the filter; Return closes it and focuses the reader on the highlighted
92
- match.
58
+ - `--sort <mode>` flag selecting the per-directory group order in the sidebar. `dirs-first` (the existing default) keeps directories above files; `files-first` flips it, surfacing top-level files like `README.md` before nested subtrees.
59
+ - `/` opens a filter input at the bottom of the sidebar. Typed characters narrow the list with a fuzzy subsequence match on the file's relative path; matches are re-ranked by score (word-boundary and consecutive-character bonuses). Esc clears the query and closes the filter; Return closes it and focuses the reader on the highlighted match.
93
60
 
94
61
  ## [0.2.1] — 2026-05-13
95
62
 
96
63
  ### Added
97
64
 
98
- - Footer hint row in the browser pane, generated from the keymap so the
99
- visible hints stay in sync with the bindings.
100
- - `ROADMAP.md` as the single index of planned work; footer/header chrome
101
- issues registered there.
65
+ - Footer hint row in the browser pane, generated from the keymap so the visible hints stay in sync with the bindings.
66
+ - `ROADMAP.md` as the single index of planned work; footer/header chrome issues registered there.
102
67
 
103
68
  ### Changed
104
69
 
105
70
  - Sidebar toggle rebound from `\` to `s`.
106
- - Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay
107
- is open; the help hint label switches to `close` while the overlay is
108
- showing.
109
- - `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved
110
- for history and bookmarks.
71
+ - Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay is open; the help hint label switches to `close` while the overlay is showing.
72
+ - `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved for history and bookmarks.
111
73
 
112
74
  ### Fixed
113
75
 
@@ -118,42 +80,17 @@ Beta release gates (DESIGN §10.2) closed.
118
80
 
119
81
  ### Added — themes
120
82
 
121
- - **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`,
122
- `carbonfox`, `catppuccin`, `catppuccin-frappe`, `catppuccin-macchiato`,
123
- `cobalt2`, `cursor`, `dracula`, `everforest`, `flexoki`, `github`,
124
- `gruvbox`, `kanagawa`, `lucent-orng`, `material`, `matrix`, `mercury`,
125
- `monokai`, `nightowl`, `nord`, `one-dark`, `opencode`, `orng`,
126
- `osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`,
127
- `tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced
128
- directly from each upstream's canonical palette via
129
- `dev/build-themes.ts`.
130
- - **`--tone dark|light`** flag to select the variant of a theme. Defaults
131
- to `dark`. Not all themes have a well-tuned light variant; quality is
132
- best-effort for those.
133
- - **JSON theme format**: each theme is a `{defs, theme: {dark, light}}`
134
- file validated against `schema/openmdr-theme.schema.json`. The format
135
- mirrors opencode's TUI theme shape; `defs` supports variable
136
- substitution.
137
- - **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API,
138
- strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`.
139
- Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
140
- - **Runtime theme cycling**: press `t` / `T` to step forward / backward
141
- through all themes without restarting. Press `L` (shift+l) to toggle
142
- between dark and light tone. Works in both browser mode and single-file
143
- mode. Theme changes take effect immediately; syntax highlighting
144
- rebuilds with the new palette.
83
+ - **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`, `carbonfox`, `catppuccin`, `catppuccin-frappe`, `catppuccin-macchiato`, `cobalt2`, `cursor`, `dracula`, `everforest`, `flexoki`, `github`, `gruvbox`, `kanagawa`, `lucent-orng`, `material`, `matrix`, `mercury`, `monokai`, `nightowl`, `nord`, `one-dark`, `opencode`, `orng`, `osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`, `tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced directly from each upstream's canonical palette via `dev/build-themes.ts`.
84
+ - **`--tone dark|light`** flag to select the variant of a theme. Defaults to `dark`. Not all themes have a well-tuned light variant; quality is best-effort for those.
85
+ - **JSON theme format**: each theme is a `{defs, theme: {dark, light}}` file validated against `schema/openmdr-theme.schema.json`. The format mirrors opencode's TUI theme shape; `defs` supports variable substitution.
86
+ - **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API, strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`. Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
87
+ - **Runtime theme cycling**: press `t` / `T` to step forward / backward through all themes without restarting. Press `L` (shift+l) to toggle between dark and light tone. Works in both browser mode and single-file mode. Theme changes take effect immediately; syntax highlighting rebuilds with the new palette.
145
88
 
146
89
  ### Changed
147
90
 
148
- - Theme system replaced: derivation engine (`derive.ts`) and the 12
149
- TS-value themes removed in favour of the JSON format above. The
150
- `ColorPalette` interface is unchanged; existing consumers (`Browser`,
151
- `App`, `HelpOverlay`) required no changes beyond the re-render wiring.
152
- - `--theme` default changed from `dark` to `opencode` (the opencode
153
- project's own palette).
154
- - Effect Atoms (`@effect/atom-react`) wired for re-render signalling:
155
- `themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render
156
- paths in `index.tsx`.
91
+ - Theme system replaced: derivation engine (`derive.ts`) and the 12 TS-value themes removed in favour of the JSON format above. The `ColorPalette` interface is unchanged; existing consumers (`Browser`, `App`, `HelpOverlay`) required no changes beyond the re-render wiring.
92
+ - `--theme` default changed from `dark` to `opencode` (the opencode project's own palette).
93
+ - Effect Atoms (`@effect/atom-react`) wired for re-render signalling: `themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render paths in `index.tsx`.
157
94
 
158
95
  ## [0.1.0] — 2026-05-10
159
96
 
@@ -161,17 +98,13 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
161
98
 
162
99
  ### Added — TUI
163
100
 
164
- - Two-pane browser: sidebar + reader, with a focus model, sidebar
165
- visibility toggle (`\`), and a `?` help overlay generated from the
166
- bindings array.
101
+ - Two-pane browser: sidebar + reader, with a focus model, sidebar visibility toggle (`\`), and a `?` help overlay generated from the bindings array.
167
102
  - Single-file mode when invoked on a file path.
168
- - Themes: dark + light as typed `ColorPalette` values, mutable singleton
169
- consumer, selected via `--theme`.
103
+ - Themes: dark + light as typed `ColorPalette` values, mutable singleton consumer, selected via `--theme`.
170
104
 
171
105
  ### Added — discovery
172
106
 
173
- - Recursive walk from the path argument (or cwd), `.md` / `.markdown` /
174
- `.mdx` only.
107
+ - Recursive walk from the path argument (or cwd), `.md` / `.markdown` / `.mdx` only.
175
108
  - Honors `.gitignore` (root + nested).
176
109
  - Hard-skips `node_modules`, `.git`, `.venv` (always, even with `--all`).
177
110
  - Does not follow symlinks.
@@ -182,51 +115,28 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
182
115
 
183
116
  ### Added — keymap
184
117
 
185
- - `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional
186
- `when` / `run`. Single source for both `useKeyboard` dispatch and the
187
- help overlay.
188
- - Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`,
189
- `return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`,
190
- `q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
118
+ - `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional `when` / `run`. Single source for both `useKeyboard` dispatch and the help overlay.
119
+ - Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`, `return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`, `q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
191
120
 
192
121
  ### Added — release infra
193
122
 
194
- - Distribution as `@carlesandres/openmdr` on npm (Bun runtime required
195
- on user's `PATH`, no compiled binary). Modeled on ghui.
196
- - `.github/workflows/ci.yml`: typecheck, lint, format:check, test,
197
- and `npm pack --dry-run` on every push and PR.
198
- - `.github/workflows/publish.yml`: `release: published` triggers
199
- `npm publish` via Trusted Publisher (OIDC, no token), with a
200
- tag-vs-`package.json`-version assertion before publish.
123
+ - Distribution as `@carlesandres/openmdr` on npm (Bun runtime required on user's `PATH`, no compiled binary). Modeled on ghui.
124
+ - `.github/workflows/ci.yml`: typecheck, lint, format:check, test, and `npm pack --dry-run` on every push and PR.
125
+ - `.github/workflows/publish.yml`: `release: published` triggers `npm publish` via Trusted Publisher (OIDC, no token), with a tag-vs-`package.json`-version assertion before publish.
201
126
  - `.oxfmtrc.json`: pinned formatting so `format:check` is meaningful.
202
127
 
203
128
  ### Added — docs
204
129
 
205
- - `DESIGN.md`: foundational design doc (13 sections; §3 non-goals,
206
- §5.3 deferred, §7.3 reserved keys, §10 v2 gates, §12 deferred
207
- patterns with triggers).
208
- - `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI
209
- assistants), `LICENSE` (MIT).
210
- - Issue templates (bug + feature + blank), PR template. All
211
- communication routes through GitHub issues.
130
+ - `DESIGN.md`: foundational design doc (13 sections; §3 non-goals, §5.3 deferred, §7.3 reserved keys, §10 v2 gates, §12 deferred patterns with triggers).
131
+ - `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI assistants), `LICENSE` (MIT).
132
+ - Issue templates (bug + feature + blank), PR template. All communication routes through GitHub issues.
212
133
 
213
134
  ### Added — tests
214
135
 
215
- - 75 headless tests via `testRender` + `captureCharFrame` +
216
- `mockInput`.
136
+ - 75 headless tests via `testRender` + `captureCharFrame` + `mockInput`.
217
137
 
218
138
  ### Out of scope (deliberate, see DESIGN.md §3 / §5.3)
219
139
 
220
- Search, stdin, URL fetching, cross-file link following, `$EDITOR`
221
- hand-off, syntax highlighting, persistent config, OS-appearance
222
- auto-detect, single-binary distribution (issue
223
- [#2](https://github.com/carlesandres/openmdr/issues/2)),
224
- Homebrew tap. All tracked.
225
-
226
- [Unreleased]: https://github.com/carlesandres/house/compare/v0.4.0...HEAD
227
- [0.4.0]: https://github.com/carlesandres/house/compare/v0.3.1...v0.4.0
228
- [0.3.1]: https://github.com/carlesandres/house/compare/v0.3.0...v0.3.1
229
- [0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0
230
- [0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1
231
- [0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0
232
- [0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
140
+ Search, stdin, URL fetching, cross-file link following, `$EDITOR` hand-off, syntax highlighting, persistent config, OS-appearance auto-detect, single-binary distribution (issue [#2](https://github.com/carlesandres/openmdr/issues/2)), Homebrew tap. All tracked.
141
+
142
+ [Unreleased]: https://github.com/carlesandres/house/compare/v0.4.1...HEAD [0.4.1]: https://github.com/carlesandres/house/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/carlesandres/house/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/carlesandres/house/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0 [0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
package/README.md CHANGED
@@ -1,10 +1,18 @@
1
- # house
1
+ # house
2
2
 
3
- A terminal markdown reader built on [opentui](https://github.com/anomalyco/opentui).
4
- Point it at a directory and navigate its `.md` files without leaving the terminal.
3
+ A terminal markdown reader and navigator — themable and configurable, with a keyboard-driven modern UI. Point it at a directory and browse its `.md` files without leaving the terminal.
5
4
 
6
5
  ![house demo](tape/house.gif)
7
6
 
7
+ ## Features
8
+
9
+ - **30+ themes** with dark and light tones
10
+ - **Responsive layout**
11
+ - **Fuzzy search** across nested folders (`.gitignore`-aware)
12
+ - **Command palette**
13
+ - **Keyboard-driven**
14
+ - **Open in browser**
15
+
8
16
  Requires [Bun](https://bun.sh) on `PATH`.
9
17
 
10
18
  ## Install
@@ -18,7 +26,7 @@ bun add -g @carlesandres/house
18
26
  ## Upgrade
19
27
 
20
28
  ```bash
21
- npm update -g @carlesandres/house
29
+ npm i -g @carlesandres/house
22
30
  # or
23
31
  bun add -g @carlesandres/house
24
32
  ```
@@ -62,9 +70,7 @@ Precedence, highest to lowest:
62
70
  3. Config file
63
71
  4. Built-in defaults (`opencode` / `dark`)
64
72
 
65
- The file is optional — a missing file is fine. Invalid keys, unknown themes,
66
- or malformed TOML fail loudly with a one-line error. Per-project config
67
- (`.house/config.toml`) and additional keys are deferred.
73
+ The file is optional — a missing file is fine. Invalid keys, unknown themes, or malformed TOML fail loudly with a one-line error. Per-project config (`.house/config.toml`) and additional keys are deferred.
68
74
 
69
75
  ## Keys
70
76
 
@@ -106,15 +112,9 @@ or malformed TOML fail loudly with a one-line error. Per-project config
106
112
 
107
113
  ## Themes
108
114
 
109
- 33 built-in themes, all sourced from the
110
- [opencode](https://github.com/anomalyco/opencode) TUI palette:
115
+ 33 built-in themes, all sourced from the [opencode](https://github.com/anomalyco/opencode) TUI palette:
111
116
 
112
- `aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` ·
113
- `catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` ·
114
- `flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` ·
115
- `matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` ·
116
- `opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` ·
117
- `synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
117
+ `aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` · `catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` · `flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` · `matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` · `opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` · `synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
118
118
 
119
119
  Each theme supports dark and light tones. Cycle with `t` / `T`; toggle tone with `L`.
120
120
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlesandres/house",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "TUI-first markdown reader on opentui",
5
5
  "type": "module",
6
6
  "license": "MIT",