@carlesandres/house 0.4.13 → 0.5.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 (86) hide show
  1. package/CHANGELOG.md +32 -2
  2. package/README.md +10 -8
  3. package/dist/bin.js +92 -0
  4. package/dist/index.js +10005 -0
  5. package/package.json +15 -3
  6. package/src/Browser.tsx +0 -1210
  7. package/src/CommandPalette.tsx +0 -214
  8. package/src/Footer.tsx +0 -258
  9. package/src/Header.tsx +0 -71
  10. package/src/PromptRow.tsx +0 -51
  11. package/src/Spinner.tsx +0 -39
  12. package/src/StatusIndicator.tsx +0 -55
  13. package/src/StatusPopover.tsx +0 -166
  14. package/src/brand.ts +0 -7
  15. package/src/cli/argv.ts +0 -179
  16. package/src/commands/buildCommands.ts +0 -98
  17. package/src/commands/paletteOnlyCommands.ts +0 -27
  18. package/src/commands/score.ts +0 -78
  19. package/src/commands/types.ts +0 -26
  20. package/src/config/load.ts +0 -381
  21. package/src/config/save.ts +0 -95
  22. package/src/discovery/filter.ts +0 -148
  23. package/src/discovery/show.ts +0 -48
  24. package/src/discovery/walk.ts +0 -209
  25. package/src/index.tsx +0 -464
  26. package/src/io/clipboard.ts +0 -53
  27. package/src/io/editor.ts +0 -162
  28. package/src/io/readFile.ts +0 -14
  29. package/src/keymap/browser.ts +0 -335
  30. package/src/keymap/displayKey.ts +0 -17
  31. package/src/keymap/keymap.ts +0 -95
  32. package/src/layout/resolve.ts +0 -52
  33. package/src/layout/sidebarEmptyState.ts +0 -7
  34. package/src/layout/sidebarRow.ts +0 -69
  35. package/src/markdown/frontmatter.ts +0 -62
  36. package/src/serve/css.ts +0 -120
  37. package/src/serve/openBrowser.ts +0 -19
  38. package/src/serve/render.ts +0 -56
  39. package/src/serve/server.ts +0 -166
  40. package/src/theme/atom.ts +0 -23
  41. package/src/theme/colors.ts +0 -86
  42. package/src/theme/loader.ts +0 -110
  43. package/src/theme/registry.ts +0 -12
  44. package/src/theme/resolve.ts +0 -168
  45. package/src/theme/themes/aura.json +0 -58
  46. package/src/theme/themes/ayu.json +0 -69
  47. package/src/theme/themes/carbonfox.json +0 -201
  48. package/src/theme/themes/catppuccin-frappe.json +0 -186
  49. package/src/theme/themes/catppuccin-macchiato.json +0 -186
  50. package/src/theme/themes/catppuccin.json +0 -212
  51. package/src/theme/themes/cobalt2.json +0 -181
  52. package/src/theme/themes/cursor.json +0 -202
  53. package/src/theme/themes/dracula.json +0 -172
  54. package/src/theme/themes/everforest.json +0 -194
  55. package/src/theme/themes/flexoki.json +0 -190
  56. package/src/theme/themes/github.json +0 -186
  57. package/src/theme/themes/gruvbox.json +0 -195
  58. package/src/theme/themes/kanagawa.json +0 -180
  59. package/src/theme/themes/lucent-orng.json +0 -186
  60. package/src/theme/themes/material.json +0 -188
  61. package/src/theme/themes/matrix.json +0 -180
  62. package/src/theme/themes/mercury.json +0 -198
  63. package/src/theme/themes/monokai.json +0 -174
  64. package/src/theme/themes/nightowl.json +0 -174
  65. package/src/theme/themes/nord.json +0 -176
  66. package/src/theme/themes/one-dark.json +0 -184
  67. package/src/theme/themes/opencode.json +0 -198
  68. package/src/theme/themes/orng.json +0 -202
  69. package/src/theme/themes/osaka-jade.json +0 -193
  70. package/src/theme/themes/palenight.json +0 -175
  71. package/src/theme/themes/rosepine.json +0 -187
  72. package/src/theme/themes/solarized.json +0 -180
  73. package/src/theme/themes/synthwave84.json +0 -179
  74. package/src/theme/themes/tokyonight.json +0 -196
  75. package/src/theme/themes/vercel.json +0 -198
  76. package/src/theme/themes/vesper.json +0 -171
  77. package/src/theme/themes/zenburn.json +0 -176
  78. package/src/theme/types.ts +0 -115
  79. package/src/tips.ts +0 -88
  80. package/src/ui/middleTruncate.ts +0 -27
  81. package/src/update/cache.ts +0 -77
  82. package/src/update/check.ts +0 -165
  83. package/src/update/compare.ts +0 -41
  84. package/src/update/notice.ts +0 -29
  85. package/src/update/runtime.ts +0 -48
  86. package/src/update/useUpdateNotice.ts +0 -24
package/CHANGELOG.md CHANGED
@@ -2,10 +2,38 @@
2
2
 
3
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.
4
4
 
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.
5
+ The publish workflow (`.github/workflows/publish.yml`) runs on the `release: published` event, builds per-platform binaries, publishes platform packages then the main package via Trusted Publisher, and lets GitHub auto-generate release notes from commit subjects; this file is the curated, narrative version.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.5.0] — 2026-07-23
10
+
11
+ ### Added
12
+
13
+ - Added a lightweight `src/standalone.ts` CLI entrypoint for fast `--help` / `--version` exits and future compiled-binary builds.
14
+ - Added `bun run build:standalone` to compile and package per-platform standalone binaries.
15
+ - Added `bun run build:npm-packages` to prepare per-platform binary npm packages.
16
+ - Switched the published `house` bin to a small Node shim that loads the matching optional binary package.
17
+ - Added `bun run build:cli` + `prepack` to publish a bundled `dist/` package.
18
+ - Release publish now builds binaries on native runners (macOS arm64/x64, Linux arm64/x64), publishes the four platform npm packages, then the main package, and attaches `house-*.tar.gz` archives to the GitHub Release.
19
+ - Added `bun run version:set X.Y.Z` and release-time validation to keep the main and platform package versions in sync.
20
+
21
+ ### Fixed
22
+
23
+ - Publish credentials now use least privilege: build jobs are read-only, while only the final publish job can write release assets or request an npm OIDC token.
24
+ - Manual publish dispatch now rejects refs other than `main` before building or publishing artifacts.
25
+ - Published package `files` now lists only `dist/bin.js` and `dist/index.js`, so standalone/npm binary build outputs under `dist/` are not packed into the main tarball.
26
+ - `build:cli` no longer wipes all of `dist/` (preserves `dist/release` and `dist/npm` during `prepack`).
27
+
28
+ ## [0.4.14] — 2026-06-15
29
+
30
+ ### Added
31
+
32
+ - Browser header now shows the active discovery root, and empty states reuse the same canonical root label for consistent launch context.
33
+ ### Changed
34
+
35
+ - Footer hints are now limited to essential app controls, leaving other actions discoverable through the command palette.
36
+
9
37
  ## [0.4.13] — 2026-06-15
10
38
 
11
39
  ### Added
@@ -333,7 +361,9 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
333
361
 
334
362
  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.
335
363
 
336
- [Unreleased]: https://github.com/carlesandres/house/compare/v0.4.13...HEAD
364
+ [Unreleased]: https://github.com/carlesandres/house/compare/v0.5.0...HEAD
365
+ [0.5.0]: https://github.com/carlesandres/house/compare/v0.4.14...v0.5.0
366
+ [0.4.14]: https://github.com/carlesandres/house/compare/v0.4.13...v0.4.14
337
367
  [0.4.13]: https://github.com/carlesandres/house/compare/v0.4.12...v0.4.13
338
368
  [0.4.12]: https://github.com/carlesandres/house/compare/v0.4.11...v0.4.12
339
369
  [0.4.11]: https://github.com/carlesandres/house/compare/v0.4.10...v0.4.11
package/README.md CHANGED
@@ -14,29 +14,29 @@ A terminal markdown reader and navigator — themable and configurable, with a k
14
14
  - **Open in browser**
15
15
  - **Open in `$EDITOR`**
16
16
 
17
- Requires [Bun](https://bun.sh) on `PATH`.
17
+ Install with npm or Bun. Prebuilt binaries cover macOS and Linux (arm64/x64); no Bun required to *run* on those platforms.
18
18
 
19
19
  ## Runtime requirements
20
20
 
21
- - Bun: required to install and run `house` today.
22
- - npm can install the package, but npm evaluates Node engine metadata from transitive dependencies during install. Use `bun add -g` for the supported no-Node install path.
21
+ - **Run:** a prebuilt binary for your platform (pulled in automatically on install). No Bun needed at runtime on supported platforms.
22
+ - **Install:** Node/npm or Bun both work. Prefer `npm install -g` for the normal end-user path.
23
23
 
24
- Supported on macOS and Linux; Windows is unsupported and unvalidated (see [#129](https://github.com/carlesandres/house/issues/129)).
24
+ Supported on macOS and Linux (arm64/x64, glibc Linux). Windows is unsupported and unvalidated (see [#129](https://github.com/carlesandres/house/issues/129)).
25
25
 
26
26
  ## Install
27
27
 
28
28
  ```bash
29
- bun add -g @carlesandres/house
30
- # npm also works when your local Node/npm combination accepts the dependency graph:
31
29
  npm install -g @carlesandres/house
30
+ # or:
31
+ bun add -g @carlesandres/house
32
32
  ```
33
33
 
34
34
  ## Upgrade
35
35
 
36
36
  ```bash
37
- bun add -g @carlesandres/house
38
- # npm also works when your local Node/npm combination accepts the dependency graph:
39
37
  npm i -g @carlesandres/house
38
+ # or:
39
+ bun add -g @carlesandres/house
40
40
  ```
41
41
 
42
42
  ## Usage
@@ -119,6 +119,8 @@ The file is optional — a missing file is fine. Invalid keys, unknown themes, o
119
119
 
120
120
  ## Keys
121
121
 
122
+ The footer only shows essential app controls (`W`, `q`, `tab`, `s`, `ctrl+p`) to stay quiet. Use the command palette for the rest.
123
+
122
124
  ### Global
123
125
 
124
126
  | Key | Action |
package/dist/bin.js ADDED
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "node:child_process"
3
+ import { realpathSync } from "node:fs"
4
+ import { createRequire } from "node:module"
5
+ import { fileURLToPath } from "node:url"
6
+
7
+ const require = createRequire(import.meta.url)
8
+ const pkg = require("../package.json")
9
+
10
+ const supportedTargets = {
11
+ darwin: new Set(["arm64", "x64"]),
12
+ linux: new Set(["arm64", "x64"]),
13
+ }
14
+
15
+ const mainBinaryName = "house"
16
+ const fastExitFlags = new Set(["--help", "-h", "--version", "-v", "--config-path"])
17
+
18
+ export const detectLinuxLibc = () => {
19
+ if (process.platform !== "linux") return undefined
20
+ const report = process.report?.getReport?.()
21
+ const header = report?.header
22
+ return typeof header?.glibcVersionRuntime === "string" ? "glibc" : "musl"
23
+ }
24
+
25
+ export const binaryPackageNameFor = (
26
+ platform,
27
+ arch,
28
+ libc = platform === "linux" ? detectLinuxLibc() : undefined,
29
+ ) => {
30
+ if (platform in supportedTargets && supportedTargets[platform].has(arch)) {
31
+ if (platform === "linux" && libc !== "glibc") return undefined
32
+ return `${pkg.name}-${platform}-${arch}`
33
+ }
34
+ return undefined
35
+ }
36
+
37
+ export const resolveBinaryPath = (packageName, resolve = require.resolve) =>
38
+ resolve(`${packageName}/bin/${mainBinaryName}`)
39
+
40
+ export const shouldCaptureOutput = (argv) => argv.some((arg) => fastExitFlags.has(arg))
41
+
42
+ export const main = (
43
+ argv = process.argv.slice(2),
44
+ platform = process.platform,
45
+ arch = process.arch,
46
+ libc = detectLinuxLibc(),
47
+ ) => {
48
+ if (argv.includes("--version") || argv.includes("-v")) {
49
+ console.log(pkg.version)
50
+ process.exit(0)
51
+ }
52
+
53
+ const packageName = binaryPackageNameFor(platform, arch, libc)
54
+ if (packageName === undefined) {
55
+ console.error(
56
+ `house: no prebuilt binary package for ${platform}-${arch}${platform === "linux" ? `-${libc ?? "unknown-libc"}` : ""}`,
57
+ )
58
+ process.exit(1)
59
+ }
60
+
61
+ let binaryPath
62
+ try {
63
+ binaryPath = resolveBinaryPath(packageName)
64
+ } catch {
65
+ console.error(
66
+ `house: missing optional dependency ${packageName}; reinstall house to fetch the matching binary package`,
67
+ )
68
+ process.exit(1)
69
+ }
70
+
71
+ const captureOutput = shouldCaptureOutput(argv)
72
+ const result = spawnSync(binaryPath, argv, {
73
+ stdio: captureOutput ? ["inherit", "pipe", "pipe"] : "inherit",
74
+ })
75
+
76
+ if (captureOutput) {
77
+ if (result.stdout !== null) process.stdout.write(result.stdout)
78
+ if (result.stderr !== null) process.stderr.write(result.stderr)
79
+ }
80
+
81
+ if (result.error !== undefined) {
82
+ console.error(`house: failed to launch ${packageName}: ${result.error.message}`)
83
+ process.exit(1)
84
+ }
85
+
86
+ process.exit(result.status ?? 1)
87
+ }
88
+
89
+ const isMain =
90
+ process.argv[1] !== undefined && realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)
91
+
92
+ if (isMain) main()