@carlesandres/house 0.4.14 → 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 (87) hide show
  1. package/CHANGELOG.md +25 -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 -160
  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/rootLabel.ts +0 -18
  24. package/src/discovery/show.ts +0 -48
  25. package/src/discovery/walk.ts +0 -209
  26. package/src/index.tsx +0 -469
  27. package/src/io/clipboard.ts +0 -53
  28. package/src/io/editor.ts +0 -162
  29. package/src/io/readFile.ts +0 -14
  30. package/src/keymap/browser.ts +0 -335
  31. package/src/keymap/displayKey.ts +0 -17
  32. package/src/keymap/keymap.ts +0 -95
  33. package/src/layout/resolve.ts +0 -52
  34. package/src/layout/sidebarEmptyState.ts +0 -7
  35. package/src/layout/sidebarRow.ts +0 -69
  36. package/src/markdown/frontmatter.ts +0 -62
  37. package/src/serve/css.ts +0 -120
  38. package/src/serve/openBrowser.ts +0 -19
  39. package/src/serve/render.ts +0 -56
  40. package/src/serve/server.ts +0 -166
  41. package/src/theme/atom.ts +0 -23
  42. package/src/theme/colors.ts +0 -86
  43. package/src/theme/loader.ts +0 -110
  44. package/src/theme/registry.ts +0 -12
  45. package/src/theme/resolve.ts +0 -168
  46. package/src/theme/themes/aura.json +0 -58
  47. package/src/theme/themes/ayu.json +0 -69
  48. package/src/theme/themes/carbonfox.json +0 -201
  49. package/src/theme/themes/catppuccin-frappe.json +0 -186
  50. package/src/theme/themes/catppuccin-macchiato.json +0 -186
  51. package/src/theme/themes/catppuccin.json +0 -212
  52. package/src/theme/themes/cobalt2.json +0 -181
  53. package/src/theme/themes/cursor.json +0 -202
  54. package/src/theme/themes/dracula.json +0 -172
  55. package/src/theme/themes/everforest.json +0 -194
  56. package/src/theme/themes/flexoki.json +0 -190
  57. package/src/theme/themes/github.json +0 -186
  58. package/src/theme/themes/gruvbox.json +0 -195
  59. package/src/theme/themes/kanagawa.json +0 -180
  60. package/src/theme/themes/lucent-orng.json +0 -186
  61. package/src/theme/themes/material.json +0 -188
  62. package/src/theme/themes/matrix.json +0 -180
  63. package/src/theme/themes/mercury.json +0 -198
  64. package/src/theme/themes/monokai.json +0 -174
  65. package/src/theme/themes/nightowl.json +0 -174
  66. package/src/theme/themes/nord.json +0 -176
  67. package/src/theme/themes/one-dark.json +0 -184
  68. package/src/theme/themes/opencode.json +0 -198
  69. package/src/theme/themes/orng.json +0 -202
  70. package/src/theme/themes/osaka-jade.json +0 -193
  71. package/src/theme/themes/palenight.json +0 -175
  72. package/src/theme/themes/rosepine.json +0 -187
  73. package/src/theme/themes/solarized.json +0 -180
  74. package/src/theme/themes/synthwave84.json +0 -179
  75. package/src/theme/themes/tokyonight.json +0 -196
  76. package/src/theme/themes/vercel.json +0 -198
  77. package/src/theme/themes/vesper.json +0 -171
  78. package/src/theme/themes/zenburn.json +0 -176
  79. package/src/theme/types.ts +0 -115
  80. package/src/tips.ts +0 -88
  81. package/src/ui/middleTruncate.ts +0 -27
  82. package/src/update/cache.ts +0 -77
  83. package/src/update/check.ts +0 -165
  84. package/src/update/compare.ts +0 -41
  85. package/src/update/notice.ts +0 -29
  86. package/src/update/runtime.ts +0 -48
  87. package/src/update/useUpdateNotice.ts +0 -24
package/CHANGELOG.md CHANGED
@@ -2,15 +2,37 @@
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
+
9
28
  ## [0.4.14] — 2026-06-15
10
29
 
11
30
  ### Added
12
31
 
13
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.
14
36
 
15
37
  ## [0.4.13] — 2026-06-15
16
38
 
@@ -339,7 +361,8 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
339
361
 
340
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.
341
363
 
342
- [Unreleased]: https://github.com/carlesandres/house/compare/v0.4.14...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
343
366
  [0.4.14]: https://github.com/carlesandres/house/compare/v0.4.13...v0.4.14
344
367
  [0.4.13]: https://github.com/carlesandres/house/compare/v0.4.12...v0.4.13
345
368
  [0.4.12]: https://github.com/carlesandres/house/compare/v0.4.11...v0.4.12
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()