@carlesandres/house 0.5.1 → 0.6.0

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.
Files changed (4) hide show
  1. package/CHANGELOG.md +57 -2
  2. package/README.md +12 -6
  3. package/dist/index.js +6754 -1895
  4. package/package.json +30 -22
package/CHANGELOG.md CHANGED
@@ -6,13 +6,65 @@ The publish workflow (`.github/workflows/publish.yml`) runs on the `release: pub
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.6.0] — 2026-08-24
10
+
11
+ ### Added
12
+
13
+ - Internal `@house/options` package: a typed catalog for options whose initial values come from CLI, env, and config, and that can be changed during a session. House's scalar config (`theme`, `tone`, `focus`, `defaultRoot`, `width`, `wrap`) now resolves through it.
14
+ - File Navigator browse order is now configurable (`tree` or `recently-modified`) via `--order`, `HOUSE_ORDER`, and the `order` config key. The default is `recently-modified`, so the most recently updated files appear first.
15
+
16
+ ### Changed
17
+
18
+ - `N` now prompts for a file name, creates an empty `.md` at the discovery root, selects it in the File Navigator, and opens it in `$EDITOR` / `$VISUAL`. It no longer launches a nameless editor session in the discovery root.
19
+ - Invalid `defaultRoot` values fail at load instead of warning and falling back to `"cwd"`.
20
+ - Theme and tone cycling now go through the options session and persist via the same catalog policy as other file-backed options.
21
+ - Large-tree File Navigator startup no longer waits for a topology-only warmup: the watcher
22
+ subscribes before the first authoritative scan, missing ignore files are not probed, and the first
23
+ visible batch can paint while the rest of the tree is still scanning.
24
+
25
+
26
+ ## [0.5.2] — 2026-08-01
27
+
28
+ ### Changed
29
+
30
+ - Converted the repository to a Turborepo monorepo with house under `apps/house`.
31
+ - CI, npm packaging, standalone builds, and release publishing now run through workspace tasks.
32
+ - Added local GitHub release/API verification with `vercel-labs/emulate`.
33
+ - Extracted the House-specific sidebar pane from Browser without changing behavior.
34
+ - House now uses the filesystem-aware File Navigator from `@house/ui/file-navigator` and the generic
35
+ `@house/ui/sidebar` presentation boundary.
36
+ - File discovery now stays synchronized with live filesystem changes, with strict extension, hidden,
37
+ ignore, and hard-skip policy applied to scanner membership.
38
+ - File navigation uses the package's fuzzy default behavior, including debounced query projection and
39
+ stable selection through streaming and reordering.
40
+ - Selected-file updates, explicit refreshes, and stale reads are coordinated through reader invalidation
41
+ epochs.
42
+ - Release builds now run filesystem mutation coverage inside the exact House artifact, with static
43
+ Parcel hosts for the four supported targets and installed npm execution without Bun on `PATH`.
44
+ - Large-tree File Navigator startup now avoids redundant entry lookups and metadata work, uses a
45
+ topology-only readiness pass, and preserves scanner order while streaming built-in tree projections.
46
+
47
+ ### Fixed
48
+
49
+ - Streamed matches that rank ahead of the current row no longer change the selected file.
50
+ - Pressing Return before the filter debounce elapses now opens the post-flush matching file.
51
+ - A stable File Navigator ref now switches to the committed root instead of retaining its first root.
52
+ - Reader loads now reject stale path/epoch completions across selection, root, watcher, editor, and
53
+ teardown changes; coalesced selected-file events trigger one fresh read.
54
+ - Standalone/npm binaries again render markdown with syntax highlighting. The compile step
55
+ now embeds OpenTUI's tree-sitter parser worker and sets `OTUI_TREE_SITTER_WORKER_PATH`
56
+ (same approach as OpenCode; see opentui#807).
57
+ - Release version bumps no longer retarget unpublished platform optionalDependencies in the
58
+ monorepo lockfile, so CI can install before those packages are on npm. The published main
59
+ package still pins platform packages to the release version.
60
+
61
+
9
62
  ## [0.5.1] — 2026-07-25
10
63
 
11
64
  ### Fixed
12
65
 
13
66
  - Platform npm packages now preserve an executable `bin/house` after passing through GitHub Actions artifacts.
14
67
 
15
-
16
68
  ## [0.5.0] — 2026-07-23
17
69
 
18
70
  ### Added
@@ -37,6 +89,7 @@ The publish workflow (`.github/workflows/publish.yml`) runs on the `release: pub
37
89
  ### Added
38
90
 
39
91
  - Browser header now shows the active discovery root, and empty states reuse the same canonical root label for consistent launch context.
92
+
40
93
  ### Changed
41
94
 
42
95
  - Footer hints are now limited to essential app controls, leaving other actions discoverable through the command palette.
@@ -368,7 +421,9 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
368
421
 
369
422
  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.
370
423
 
371
- [Unreleased]: https://github.com/carlesandres/house/compare/v0.5.1...HEAD
424
+ [Unreleased]: https://github.com/carlesandres/house/compare/v0.6.0...HEAD
425
+ [0.6.0]: https://github.com/carlesandres/house/compare/v0.5.2...v0.6.0
426
+ [0.5.2]: https://github.com/carlesandres/house/compare/v0.5.1...v0.5.2
372
427
  [0.5.1]: https://github.com/carlesandres/house/compare/v0.5.0...v0.5.1
373
428
  [0.5.0]: https://github.com/carlesandres/house/compare/v0.4.14...v0.5.0
374
429
  [0.4.14]: https://github.com/carlesandres/house/compare/v0.4.13...v0.4.14
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A terminal markdown reader and navigator — themable and configurable, with a keyboard-driven modern UI. Browse a directory of `.md` files without leaving the terminal.
4
4
 
5
- <video src="recordings/house-demo.mp4" controls muted loop playsinline></video>
5
+ <video src="apps/house/recordings/house-demo.mp4" controls muted loop playsinline></video>
6
6
 
7
7
  ## Features
8
8
 
@@ -55,6 +55,7 @@ Examples:
55
55
  house # browse the configured discovery root
56
56
  house README.md # browse with README.md preloaded as the sidebar filter
57
57
  house --root docs # browse docs/ as the discovery root
58
+ house --order tree # files-before-directories instead of recency
58
59
  house --serve README.md
59
60
  ```
60
61
 
@@ -70,6 +71,7 @@ house --serve README.md
70
71
  | `--show <list>` | `""` | Reveal normally-skipped entries; comma-separated subset of `hidden`, `gitignored`. Use `--show ""` to clear. |
71
72
  | `--root <dir>` | current directory | Discovery root to walk; overrides `defaultRoot` config/env |
72
73
  | `--focus <mode>` | `sidebar` | Startup focus: `sidebar`, `reader`, or `filter`. `filter` opens the sidebar filter prompt immediately. |
74
+ | `--order <mode>` | `recently-modified` | File Navigator browse order when the filter is empty: `tree` or `recently-modified`. |
73
75
  | `--serve` | off | Serve the positional path as HTML in the browser (skips TUI) |
74
76
  | `--port <N>` | OS-assigned | Port for `--serve` |
75
77
  | `--ext <list>` | none | Include extra file extensions (comma-separated) |
@@ -98,24 +100,27 @@ wrap = false
98
100
  show = ["hidden", "gitignored"]
99
101
  focus = "sidebar"
100
102
  defaultRoot = "cwd" # or "git"
103
+ order = "recently-modified" # or "tree"
101
104
  ```
102
105
 
103
- Supported keys: `theme`, `tone`, `extensions`, `width`, `wrap`, `show`, `focus`, `defaultRoot`.
106
+ Supported keys: `theme`, `tone`, `extensions`, `width`, `wrap`, `show`, `focus`, `defaultRoot`, `order`.
104
107
 
105
108
  `show` is a list of normally-skipped categories to opt into. Known categories: `hidden` (dot-prefixed entries), `gitignored` (entries matched by a `.gitignore`). Default is the empty list. Hard skips (`node_modules`, `.git`, `.venv`) always apply.
106
109
 
107
110
  Precedence, highest to lowest:
108
111
 
109
- 1. CLI flags (`--theme`, `--tone`, `--ext`, `--width`, `--wrap`, `--no-wrap`, `--show`, `--focus`, `--root`)
110
- 2. Env vars (`HOUSE_THEME`, `HOUSE_TONE`, `HOUSE_EXTENSIONS`, `HOUSE_WIDTH`, `HOUSE_WRAP`, `HOUSE_SHOW`, `HOUSE_FOCUS`, `HOUSE_DEFAULT_ROOT`)
112
+ 1. CLI flags (`--theme`, `--tone`, `--ext`, `--width`, `--wrap`, `--no-wrap`, `--show`, `--focus`, `--order`, `--root`)
113
+ 2. Env vars (`HOUSE_THEME`, `HOUSE_TONE`, `HOUSE_EXTENSIONS`, `HOUSE_WIDTH`, `HOUSE_WRAP`, `HOUSE_SHOW`, `HOUSE_FOCUS`, `HOUSE_DEFAULT_ROOT`, `HOUSE_ORDER`)
111
114
  3. Config file
112
- 4. Built-in defaults (`opencode` / `dark` / `extensions = []` / `width = 80` / `wrap = false` / `show = []` / `focus = "sidebar"` / `defaultRoot = "cwd"`)
115
+ 4. Built-in defaults (`opencode` / `dark` / `extensions = []` / `width = 80` / `wrap = false` / `show = []` / `focus = "sidebar"` / `defaultRoot = "cwd"` / `order = "recently-modified"`)
113
116
 
114
117
  `HOUSE_SHOW` takes a comma-separated list (`HOUSE_SHOW=hidden,gitignored`). For `show` specifically, each source completely replaces the next — categories don't merge across layers. Press `shift+a` in the TUI to round-trip between the configured set and the full vocabulary without editing config.
115
118
 
116
119
  `width` is the fixed reader width used when wrapping is enabled. `wrap` controls startup mode; press `w` in the TUI to toggle reader wrapping for the current session without editing config.
117
120
 
118
- 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.
121
+ `order` is the File Navigator browse order when no filter query is active. `recently-modified` (default) lists the most recently updated files first, using filesystem modification time, then tree order for ties. `tree` lists files before directories, alphabetically within each group, so current-directory files appear before nested subtrees. An active filter still ranks by relevance first.
122
+
123
+ The file is optional — a missing file is fine. Invalid keys, unknown themes, invalid `defaultRoot`, or malformed TOML fail loudly with a one-line error. Per-project config (`.house/config.toml`) and additional keys are deferred.
119
124
 
120
125
  ## Keys
121
126
 
@@ -132,6 +137,7 @@ The footer only shows essential app controls (`W`, `q`, `tab`, `s`, `ctrl+p`) to
132
137
  | `w` | Toggle reader wrap |
133
138
  | `O` | Open current file in browser as HTML |
134
139
  | `E` | Open current file in `$EDITOR` (`$VISUAL` takes precedence) |
140
+ | `N` | Prompt for a name, create an empty markdown file at the discovery root, then open it in `$EDITOR` |
135
141
  | `t` | Next theme |
136
142
  | `T` | Previous theme |
137
143
  | `L` | Toggle dark / light tone |