@carlesandres/house 0.4.0 → 0.4.2
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 +75 -137
- package/README.md +37 -20
- package/package.json +14 -12
- package/src/Browser.tsx +331 -226
- package/src/CommandPalette.tsx +67 -46
- package/src/Footer.tsx +71 -27
- package/src/Header.tsx +68 -0
- package/src/HelpOverlay.tsx +59 -41
- package/src/PromptRow.tsx +49 -0
- package/src/brand.ts +7 -0
- package/src/cli/argv.ts +34 -3
- package/src/commands/buildCommands.ts +1 -0
- package/src/config/load.ts +84 -19
- package/src/discovery/walk.ts +8 -3
- package/src/index.tsx +64 -11
- package/src/io/editor.ts +162 -0
- package/src/keymap/browser.ts +79 -22
- package/src/keymap/keymap.ts +6 -0
- package/src/layout/resolve.ts +9 -9
- package/src/layout/sidebarRow.ts +85 -0
- package/src/serve/server.ts +4 -1
- package/src/theme/colors.ts +51 -15
- package/src/theme/types.ts +7 -0
- package/src/update/cache.ts +77 -0
- package/src/update/check.ts +165 -0
- package/src/update/compare.ts +41 -0
- package/src/update/notice.ts +29 -0
- package/src/update/runtime.ts +48 -0
- package/src/update/useUpdateNotice.ts +24 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,31 +1,55 @@
|
|
|
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.2] — 2026-05-23
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Editor hand-off: press `e` to open the selected file in `$EDITOR`/`$VISUAL` (`#19`).
|
|
14
|
+
- Sidebar rows now render basename-first with segment-aware parent-path elision, improving scanability in deep trees.
|
|
15
|
+
- `ctrl+\\` clears an active sidebar filter query without leaving filter mode.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Sidebar filter input and command palette input now share a single `PromptRow` UI path for consistent rendering and behavior.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Dev server SSE stream (`/__reload`) now stays open past Bun's 10s idle timeout.
|
|
24
|
+
- Filter Escape behavior no longer reverts to the pre-filter selection; Escape now closes/clears filter predictably.
|
|
25
|
+
|
|
26
|
+
### Docs
|
|
27
|
+
|
|
28
|
+
- README synced with current features, options, keys, and config behavior.
|
|
29
|
+
- Windows support is now documented as POSIX-only for this release line, with tracking issues linked.
|
|
30
|
+
- ROADMAP docs updated for release tooling and standalone-binary epic breakdown.
|
|
31
|
+
|
|
32
|
+
### Tests
|
|
33
|
+
|
|
34
|
+
- Added PTY regression coverage for selection background behavior.
|
|
35
|
+
- Added sidebar coverage for basename+parent rendering and `fitTail` behavior at very narrow widths.
|
|
36
|
+
|
|
37
|
+
## [0.4.1] — 2026-05-22
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- 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.
|
|
42
|
+
|
|
15
43
|
## [0.4.0] — 2026-05-21
|
|
16
44
|
|
|
17
45
|
### Added
|
|
18
46
|
|
|
19
|
-
- Command palette v1: `ctrl+p` opens a modal palette with visible browser
|
|
20
|
-
|
|
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.
|
|
47
|
+
- 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.
|
|
48
|
+
- 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
49
|
|
|
25
50
|
### Fixed
|
|
26
51
|
|
|
27
|
-
- Reader scroll focus is suspended while overlays are open, preventing palette
|
|
28
|
-
arrow navigation from scrolling the markdown pane behind the modal.
|
|
52
|
+
- Reader scroll focus is suspended while overlays are open, preventing palette arrow navigation from scrolling the markdown pane behind the modal.
|
|
29
53
|
|
|
30
54
|
### Tests
|
|
31
55
|
|
|
@@ -37,77 +61,43 @@ Beta release gates (DESIGN §10.2) closed.
|
|
|
37
61
|
|
|
38
62
|
### Fixed
|
|
39
63
|
|
|
40
|
-
- Language-tagged fenced code blocks no longer disappear while markdown
|
|
41
|
-
|
|
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.
|
|
64
|
+
- 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.
|
|
65
|
+
- 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
66
|
|
|
50
67
|
### Changed
|
|
51
68
|
|
|
52
69
|
- 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.
|
|
70
|
+
- 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
71
|
|
|
58
72
|
### Docs
|
|
59
73
|
|
|
60
|
-
- README embeds a VHS-generated demo gif; `tape/` holds the source
|
|
61
|
-
|
|
62
|
-
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient`
|
|
63
|
-
/ `TestRecorder` testing patterns and the "before blaming `<markdown>`"
|
|
64
|
-
stale-watcher debugging checklist.
|
|
74
|
+
- README embeds a VHS-generated demo gif; `tape/` holds the source scripts.
|
|
75
|
+
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient` / `TestRecorder` testing patterns and the "before blaming `<markdown>`" stale-watcher debugging checklist.
|
|
65
76
|
|
|
66
77
|
## [0.3.0] — 2026-05-16
|
|
67
78
|
|
|
68
79
|
### Changed
|
|
69
80
|
|
|
70
|
-
- **Project renamed from `openmdr` to `house`.** The npm package is now
|
|
71
|
-
|
|
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.
|
|
81
|
+
- **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.
|
|
82
|
+
- `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter input.
|
|
80
83
|
|
|
81
84
|
### Added
|
|
82
85
|
|
|
83
|
-
- `--sort <mode>` flag selecting the per-directory group order in the
|
|
84
|
-
|
|
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.
|
|
86
|
+
- `--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.
|
|
87
|
+
- `/` 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
88
|
|
|
94
89
|
## [0.2.1] — 2026-05-13
|
|
95
90
|
|
|
96
91
|
### Added
|
|
97
92
|
|
|
98
|
-
- Footer hint row in the browser pane, generated from the keymap so the
|
|
99
|
-
|
|
100
|
-
- `ROADMAP.md` as the single index of planned work; footer/header chrome
|
|
101
|
-
issues registered there.
|
|
93
|
+
- Footer hint row in the browser pane, generated from the keymap so the visible hints stay in sync with the bindings.
|
|
94
|
+
- `ROADMAP.md` as the single index of planned work; footer/header chrome issues registered there.
|
|
102
95
|
|
|
103
96
|
### Changed
|
|
104
97
|
|
|
105
98
|
- Sidebar toggle rebound from `\` to `s`.
|
|
106
|
-
- Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay
|
|
107
|
-
|
|
108
|
-
showing.
|
|
109
|
-
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved
|
|
110
|
-
for history and bookmarks.
|
|
99
|
+
- 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.
|
|
100
|
+
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved for history and bookmarks.
|
|
111
101
|
|
|
112
102
|
### Fixed
|
|
113
103
|
|
|
@@ -118,42 +108,17 @@ Beta release gates (DESIGN §10.2) closed.
|
|
|
118
108
|
|
|
119
109
|
### Added — themes
|
|
120
110
|
|
|
121
|
-
- **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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.
|
|
111
|
+
- **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`.
|
|
112
|
+
- **`--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.
|
|
113
|
+
- **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.
|
|
114
|
+
- **`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.
|
|
115
|
+
- **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
116
|
|
|
146
117
|
### Changed
|
|
147
118
|
|
|
148
|
-
- Theme system replaced: derivation engine (`derive.ts`) and the 12
|
|
149
|
-
|
|
150
|
-
|
|
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`.
|
|
119
|
+
- 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.
|
|
120
|
+
- `--theme` default changed from `dark` to `opencode` (the opencode project's own palette).
|
|
121
|
+
- Effect Atoms (`@effect/atom-react`) wired for re-render signalling: `themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render paths in `index.tsx`.
|
|
157
122
|
|
|
158
123
|
## [0.1.0] — 2026-05-10
|
|
159
124
|
|
|
@@ -161,17 +126,13 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
161
126
|
|
|
162
127
|
### Added — TUI
|
|
163
128
|
|
|
164
|
-
- Two-pane browser: sidebar + reader, with a focus model, sidebar
|
|
165
|
-
visibility toggle (`\`), and a `?` help overlay generated from the
|
|
166
|
-
bindings array.
|
|
129
|
+
- Two-pane browser: sidebar + reader, with a focus model, sidebar visibility toggle (`\`), and a `?` help overlay generated from the bindings array.
|
|
167
130
|
- Single-file mode when invoked on a file path.
|
|
168
|
-
- Themes: dark + light as typed `ColorPalette` values, mutable singleton
|
|
169
|
-
consumer, selected via `--theme`.
|
|
131
|
+
- Themes: dark + light as typed `ColorPalette` values, mutable singleton consumer, selected via `--theme`.
|
|
170
132
|
|
|
171
133
|
### Added — discovery
|
|
172
134
|
|
|
173
|
-
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` /
|
|
174
|
-
`.mdx` only.
|
|
135
|
+
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` / `.mdx` only.
|
|
175
136
|
- Honors `.gitignore` (root + nested).
|
|
176
137
|
- Hard-skips `node_modules`, `.git`, `.venv` (always, even with `--all`).
|
|
177
138
|
- Does not follow symlinks.
|
|
@@ -182,51 +143,28 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
182
143
|
|
|
183
144
|
### Added — keymap
|
|
184
145
|
|
|
185
|
-
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional
|
|
186
|
-
|
|
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`.
|
|
146
|
+
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional `when` / `run`. Single source for both `useKeyboard` dispatch and the help overlay.
|
|
147
|
+
- 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
148
|
|
|
192
149
|
### Added — release infra
|
|
193
150
|
|
|
194
|
-
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required
|
|
195
|
-
|
|
196
|
-
- `.github/workflows/
|
|
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.
|
|
151
|
+
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required on user's `PATH`, no compiled binary). Modeled on ghui.
|
|
152
|
+
- `.github/workflows/ci.yml`: typecheck, lint, format:check, test, and `npm pack --dry-run` on every push and PR.
|
|
153
|
+
- `.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
154
|
- `.oxfmtrc.json`: pinned formatting so `format:check` is meaningful.
|
|
202
155
|
|
|
203
156
|
### Added — docs
|
|
204
157
|
|
|
205
|
-
- `DESIGN.md`: foundational design doc (13 sections; §3 non-goals,
|
|
206
|
-
|
|
207
|
-
|
|
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.
|
|
158
|
+
- `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).
|
|
159
|
+
- `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI assistants), `LICENSE` (MIT).
|
|
160
|
+
- Issue templates (bug + feature + blank), PR template. All communication routes through GitHub issues.
|
|
212
161
|
|
|
213
162
|
### Added — tests
|
|
214
163
|
|
|
215
|
-
- 75 headless tests via `testRender` + `captureCharFrame` +
|
|
216
|
-
`mockInput`.
|
|
164
|
+
- 75 headless tests via `testRender` + `captureCharFrame` + `mockInput`.
|
|
217
165
|
|
|
218
166
|
### Out of scope (deliberate, see DESIGN.md §3 / §5.3)
|
|
219
167
|
|
|
220
|
-
Search, stdin, URL fetching, cross-file link following, `$EDITOR`
|
|
221
|
-
|
|
222
|
-
|
|
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
|
|
168
|
+
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.
|
|
169
|
+
|
|
170
|
+
[Unreleased]: https://github.com/carlesandres/house/compare/v0.4.2...HEAD [0.4.2]: https://github.com/carlesandres/house/compare/v0.4.1...v0.4.2 [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,11 +1,20 @@
|
|
|
1
|
-
# house
|
|
1
|
+
# ⌂ house
|
|
2
2
|
|
|
3
|
-
A terminal markdown reader
|
|
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
|

|
|
7
6
|
|
|
8
|
-
|
|
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
|
+
- **Open in `$EDITOR`**
|
|
16
|
+
|
|
17
|
+
Requires [Bun](https://bun.sh) on `PATH`. Supported on macOS and Linux; Windows is unsupported and unvalidated (see [#129](https://github.com/carlesandres/house/issues/129)).
|
|
9
18
|
|
|
10
19
|
## Install
|
|
11
20
|
|
|
@@ -18,7 +27,7 @@ bun add -g @carlesandres/house
|
|
|
18
27
|
## Upgrade
|
|
19
28
|
|
|
20
29
|
```bash
|
|
21
|
-
npm
|
|
30
|
+
npm i -g @carlesandres/house
|
|
22
31
|
# or
|
|
23
32
|
bun add -g @carlesandres/house
|
|
24
33
|
```
|
|
@@ -29,7 +38,7 @@ bun add -g @carlesandres/house
|
|
|
29
38
|
house [options] <path>
|
|
30
39
|
```
|
|
31
40
|
|
|
32
|
-
`<path>` can be a directory (walks for `.md` files) or a single
|
|
41
|
+
`<path>` can be a directory (walks for `.md`, `.markdown`, and `.mdx` files) or a single markdown file. Defaults to the current directory if omitted.
|
|
33
42
|
|
|
34
43
|
### Options
|
|
35
44
|
|
|
@@ -37,7 +46,17 @@ house [options] <path>
|
|
|
37
46
|
|------|---------|-------------|
|
|
38
47
|
| `--theme <name>` | `opencode` | Starting theme (see list below) |
|
|
39
48
|
| `--tone dark\|light` | `dark` | Starting tone |
|
|
49
|
+
| `--width <N>` | — | Cap rendered markdown width at N columns |
|
|
50
|
+
| `--all` | off | Include hidden and gitignored files in discovery |
|
|
51
|
+
| `--sort <mode>` | `dirs-first` | Sidebar order: `dirs-first` or `files-first` |
|
|
52
|
+
| `--sidebar <mode>` | `auto` | Initial sidebar visibility: `auto`, `on`, or `off` |
|
|
53
|
+
| `--serve` | off | Serve the given file as HTML in the browser (skips TUI) |
|
|
54
|
+
| `--port <N>` | OS-assigned | Port for `--serve` |
|
|
55
|
+
| `--no-mdx` | off | Exclude `.mdx` files from discovery |
|
|
56
|
+
| `--no-update-check` | off | Suppress the "newer version available" check (also via `NO_UPDATE_NOTIFIER=1`) |
|
|
40
57
|
| `--config-path` | — | Print the resolved config-file path and exit |
|
|
58
|
+
| `-h`, `--help` | — | Show help and exit |
|
|
59
|
+
| `-v`, `--version` | — | Print version and exit |
|
|
41
60
|
|
|
42
61
|
## Configuration
|
|
43
62
|
|
|
@@ -53,18 +72,19 @@ Run `house --config-path` to print the exact location.
|
|
|
53
72
|
# ~/.config/house/config.toml
|
|
54
73
|
theme = "tokyonight"
|
|
55
74
|
tone = "dark"
|
|
75
|
+
mdx = true
|
|
56
76
|
```
|
|
57
77
|
|
|
78
|
+
Supported keys: `theme`, `tone`, `mdx`.
|
|
79
|
+
|
|
58
80
|
Precedence, highest to lowest:
|
|
59
81
|
|
|
60
|
-
1. CLI flags (`--theme`, `--tone`)
|
|
61
|
-
2. Env vars (`HOUSE_THEME`, `HOUSE_TONE`)
|
|
82
|
+
1. CLI flags (`--theme`, `--tone`, `--no-mdx`)
|
|
83
|
+
2. Env vars (`HOUSE_THEME`, `HOUSE_TONE`, `HOUSE_MDX`)
|
|
62
84
|
3. Config file
|
|
63
|
-
4. Built-in defaults (`opencode` / `dark`)
|
|
85
|
+
4. Built-in defaults (`opencode` / `dark` / `mdx = true`)
|
|
64
86
|
|
|
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.
|
|
87
|
+
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
88
|
|
|
69
89
|
## Keys
|
|
70
90
|
|
|
@@ -76,7 +96,9 @@ or malformed TOML fail loudly with a one-line error. Per-project config
|
|
|
76
96
|
| `tab` | Toggle focus (sidebar ↔ reader) |
|
|
77
97
|
| `s` | Toggle sidebar visibility |
|
|
78
98
|
| `?` | Show / dismiss help overlay |
|
|
99
|
+
| `ctrl+p` | Command palette |
|
|
79
100
|
| `o` | Open current file in browser as HTML |
|
|
101
|
+
| `e` | Open current file in `$EDITOR` (`$VISUAL` takes precedence) |
|
|
80
102
|
| `t` | Next theme |
|
|
81
103
|
| `T` | Previous theme |
|
|
82
104
|
| `L` | Toggle dark / light tone |
|
|
@@ -106,15 +128,9 @@ or malformed TOML fail loudly with a one-line error. Per-project config
|
|
|
106
128
|
|
|
107
129
|
## Themes
|
|
108
130
|
|
|
109
|
-
33 built-in themes, all sourced from the
|
|
110
|
-
[opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
131
|
+
33 built-in themes, all sourced from the [opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
111
132
|
|
|
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`
|
|
133
|
+
`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
134
|
|
|
119
135
|
Each theme supports dark and light tones. Cycle with `t` / `T`; toggle tone with `L`.
|
|
120
136
|
|
|
@@ -123,6 +139,7 @@ Each theme supports dark and light tones. Cycle with `t` / `T`; toggle tone with
|
|
|
123
139
|
- [glow](https://github.com/charmbracelet/glow) — render markdown on the CLI, with pizzazz
|
|
124
140
|
- [ghui](https://github.com/kitlangton/ghui) — keyboard-driven terminal UI for GitHub pull requests
|
|
125
141
|
- [hunk](https://github.com/modem-dev/hunk) — review-first terminal diff viewer for agent-authored changesets
|
|
142
|
+
- [opencode](https://github.com/anomalyco/opencode) — terminal UI whose palette inspired house's themes
|
|
126
143
|
|
|
127
144
|
## License
|
|
128
145
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carlesandres/house",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "TUI-first markdown reader on opentui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,26 +44,28 @@
|
|
|
44
44
|
"format": "oxfmt src/",
|
|
45
45
|
"format:check": "oxfmt --check src/",
|
|
46
46
|
"test": "bun test",
|
|
47
|
+
"test:pty": "HOUSE_PTY=1 bun test test/pty/",
|
|
47
48
|
"build:themes": "bun run dev/build-themes.ts",
|
|
48
49
|
"repro:pty-codeblocks": "bun run dev/repro-pty-codeblocks.ts",
|
|
49
50
|
"prepare": "git config core.hooksPath .githooks 2>/dev/null || true"
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
|
-
"@effect/atom-react": "4.0.0-beta.
|
|
53
|
-
"@opentui/core": "0.2.
|
|
54
|
-
"@opentui/react": "0.2.
|
|
53
|
+
"@effect/atom-react": "4.0.0-beta.70",
|
|
54
|
+
"@opentui/core": "0.2.15",
|
|
55
|
+
"@opentui/react": "0.2.15",
|
|
55
56
|
"effect": "4.0.0-beta.59",
|
|
56
57
|
"ignore": "^7.0.5",
|
|
57
|
-
"marked": "^18.0.
|
|
58
|
-
"react": "19.2.
|
|
58
|
+
"marked": "^18.0.4",
|
|
59
|
+
"react": "19.2.6",
|
|
59
60
|
"scheduler": "0.27.0"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
62
|
-
"@effect/language-service": "0.
|
|
63
|
-
"@types/bun": "1.3.
|
|
64
|
-
"@types/react": "19.2.
|
|
65
|
-
"oxfmt": "0.
|
|
66
|
-
"oxlint": "1.
|
|
67
|
-
"
|
|
63
|
+
"@effect/language-service": "0.86.2",
|
|
64
|
+
"@types/bun": "1.3.14",
|
|
65
|
+
"@types/react": "19.2.15",
|
|
66
|
+
"oxfmt": "0.51.0",
|
|
67
|
+
"oxlint": "1.66.0",
|
|
68
|
+
"tuistory": "^0.8.0",
|
|
69
|
+
"typescript": "6.0.3"
|
|
68
70
|
}
|
|
69
71
|
}
|