@pellux/goodvibes-tui 1.13.1 → 1.15.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.
- package/CHANGELOG.md +104 -0
- package/README.md +6 -6
- package/bin/goodvibes +6 -0
- package/bin/goodvibes-daemon +6 -0
- package/bin/launcher-support.js +34 -1
- package/docs/foundation-artifacts/operator-contract.json +8076 -2047
- package/package.json +15 -11
- package/scripts/postinstall.js +73 -48
- package/src/cli/bundle-command.ts +5 -5
- package/src/cli/completion.ts +1 -1
- package/src/cli/completions/generate.ts +15 -3
- package/src/cli/doctor.ts +385 -0
- package/src/cli/entrypoint.ts +72 -1
- package/src/cli/help.ts +29 -9
- package/src/cli/hooks-command.ts +74 -0
- package/src/cli/hooks-report.ts +167 -0
- package/src/cli/index.ts +3 -0
- package/src/cli/management.ts +13 -1
- package/src/cli/parser.ts +10 -2
- package/src/cli/plugin-bundles-command.ts +228 -0
- package/src/cli/plugin-command.ts +179 -0
- package/src/cli/service-posture.ts +10 -0
- package/src/cli/status.ts +275 -2
- package/src/cli/tui-startup.ts +119 -1
- package/src/cli/types.ts +3 -1
- package/src/config/index.ts +16 -0
- package/src/config/tui-extension-settings.ts +169 -0
- package/src/core/approval-alert.ts +15 -2
- package/src/core/compaction-receipt.ts +127 -0
- package/src/core/model-routing-chip.ts +82 -0
- package/src/core/permission-mode.ts +89 -0
- package/src/core/rewind-receipt.ts +83 -0
- package/src/core/rewind-turn-anchors.ts +160 -0
- package/src/core/scriptable-statusline.ts +141 -0
- package/src/core/session-auto-titler.ts +110 -0
- package/src/core/stream-event-wiring.ts +20 -0
- package/src/core/system-message-router.ts +1 -1
- package/src/core/terminal-notifier.ts +102 -0
- package/src/core/turn-event-wiring.ts +80 -1
- package/src/input/command-reference.ts +96 -0
- package/src/input/command-registry.ts +25 -0
- package/src/input/commands/channel-pairing.ts +245 -0
- package/src/input/commands/channel-runtime.ts +152 -6
- package/src/input/commands/checkin-runtime.ts +89 -0
- package/src/input/commands/checkpoint-runtime.ts +7 -179
- package/src/input/commands/ci-runtime.ts +207 -0
- package/src/input/commands/cost-attribution-format.ts +52 -0
- package/src/input/commands/cost-runtime.ts +44 -4
- package/src/input/commands/editor-runtime.ts +22 -0
- package/src/input/commands/flags-runtime.ts +328 -0
- package/src/input/commands/health-metrics-format.ts +67 -0
- package/src/input/commands/health-runtime.ts +55 -1
- package/src/input/commands/memory.ts +23 -0
- package/src/input/commands/operator-rpc.ts +95 -0
- package/src/input/commands/palette-runtime.ts +22 -0
- package/src/input/commands/permissions-provenance.ts +264 -0
- package/src/input/commands/permissions-runtime.ts +21 -0
- package/src/input/commands/planning-runtime.ts +28 -1
- package/src/input/commands/platform-access-runtime.ts +2 -97
- package/src/input/commands/principals-runtime.ts +212 -0
- package/src/input/commands/product-runtime.ts +43 -3
- package/src/input/commands/recall-files-config.ts +54 -0
- package/src/input/commands/recall-files-git.ts +57 -0
- package/src/input/commands/recall-files.ts +185 -0
- package/src/input/commands/recall-query.ts +8 -3
- package/src/input/commands/recall-review.ts +2 -2
- package/src/input/commands/recall-shared.ts +13 -0
- package/src/input/commands/relay-runtime.ts +86 -0
- package/src/input/commands/review-runtime.ts +160 -0
- package/src/input/commands/rewind-runtime.ts +362 -0
- package/src/input/commands/schedule-nl.ts +147 -0
- package/src/input/commands/schedule-runtime.ts +29 -10
- package/src/input/commands/secret-runtime.ts +55 -0
- package/src/input/commands/session-content.ts +19 -8
- package/src/input/commands/session-workflow.ts +10 -0
- package/src/input/commands/update-runtime.ts +412 -0
- package/src/input/commands/workstream-attempt-dependents.ts +103 -0
- package/src/input/commands/workstream-attempts.ts +244 -0
- package/src/input/commands/workstream-runtime.ts +164 -26
- package/src/input/commands/worktree-runtime.ts +56 -2
- package/src/input/commands.ts +135 -80
- package/src/input/composer-capture.ts +67 -0
- package/src/input/composer-editor.ts +134 -0
- package/src/input/concealed-input.ts +94 -0
- package/src/input/exec-env-scrub-config.ts +84 -0
- package/src/input/feature-unit-layout.ts +142 -0
- package/src/input/feed-context-factory.ts +2 -0
- package/src/input/handler-feed-routes.ts +17 -0
- package/src/input/handler-feed.ts +3 -0
- package/src/input/handler-modal-routes.ts +5 -2
- package/src/input/handler-shortcuts.ts +37 -0
- package/src/input/handler.ts +24 -2
- package/src/input/keybindings.ts +11 -2
- package/src/input/onboarding/onboarding-feature-units.ts +536 -0
- package/src/input/onboarding/onboarding-wizard-apply.ts +40 -6
- package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +324 -629
- package/src/input/onboarding/onboarding-wizard-steps.ts +5 -5
- package/src/input/onboarding/onboarding-wizard-types.ts +6 -0
- package/src/input/relay-settings-descriptions.ts +35 -0
- package/src/input/sandbox-exec-config.ts +107 -0
- package/src/input/settings-modal-adjustment.ts +4 -7
- package/src/input/settings-modal-data.ts +178 -8
- package/src/input/settings-modal-mutations.ts +41 -13
- package/src/input/settings-modal-types.ts +42 -5
- package/src/input/settings-modal.ts +67 -15
- package/src/input/submission-router.ts +4 -1
- package/src/input/worktree-setup-config.ts +93 -0
- package/src/main.ts +43 -43
- package/src/panels/builtin/development.ts +14 -0
- package/src/panels/diff-review-model.ts +189 -0
- package/src/panels/diff-review-panel.ts +395 -0
- package/src/panels/fleet-panel-format.ts +114 -2
- package/src/panels/fleet-panel.ts +65 -78
- package/src/panels/fleet-read-model.ts +91 -11
- package/src/panels/fleet-stop.ts +19 -4
- package/src/panels/modals/memory-modal.ts +11 -2
- package/src/permissions/hunk-selection.ts +86 -5
- package/src/permissions/prompt.ts +108 -7
- package/src/permissions/sandbox-exec-gate.ts +162 -0
- package/src/renderer/settings-modal-helpers.ts +21 -1
- package/src/renderer/settings-modal.ts +70 -44
- package/src/renderer/shell-surface.ts +23 -1
- package/src/renderer/system-message.ts +4 -0
- package/src/renderer/tool-result-summary.ts +95 -5
- package/src/renderer/ui-factory.ts +22 -0
- package/src/runtime/bootstrap-command-context.ts +15 -1
- package/src/runtime/bootstrap-command-parts.ts +14 -2
- package/src/runtime/bootstrap-core.ts +38 -38
- package/src/runtime/bootstrap-notifier-sync.ts +41 -0
- package/src/runtime/bootstrap-shell.ts +8 -0
- package/src/runtime/bootstrap.ts +21 -23
- package/src/runtime/context-accounting-source.ts +103 -0
- package/src/runtime/conversation-rewind-port.ts +130 -0
- package/src/runtime/fleet-needs-input-push.ts +70 -0
- package/src/runtime/install-self-check-startup.ts +36 -0
- package/src/runtime/install-self-check.ts +149 -0
- package/src/runtime/onboarding/fast-path.ts +93 -0
- package/src/runtime/process-lifecycle.ts +32 -24
- package/src/runtime/relay-reachability-bridge.ts +53 -0
- package/src/runtime/release-artifacts.ts +109 -0
- package/src/runtime/services.ts +33 -33
- package/src/runtime/trust/workspace-registration.ts +184 -0
- package/src/runtime/trust/workspace-trust.ts +202 -0
- package/src/runtime/ui-services.ts +2 -1
- package/src/runtime/update-check.ts +113 -0
- package/src/runtime/workspace-checkpointing.ts +32 -0
- package/src/runtime/workstream-attempts-validation.ts +77 -0
- package/src/runtime/workstream-draft-edits.ts +95 -0
- package/src/runtime/workstream-draft-store.ts +101 -0
- package/src/runtime/workstream-draft-types.ts +42 -0
- package/src/runtime/workstream-services.ts +70 -39
- package/src/shell/blocking-input.ts +29 -0
- package/src/shell/ui-openers.ts +65 -0
- package/src/verification/verification-ledger.ts +56 -2
- package/src/version.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-external-surface-extra-specs.ts +0 -130
- package/src/runtime/gateway-verbs.ts +0 -47
- package/src/runtime/render-scheduler.ts +0 -90
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,110 @@ All notable changes to GoodVibes TUI.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.15.0] — 2026-07-11
|
|
8
|
+
|
|
9
|
+
### Changes
|
|
10
|
+
- e95c369d fix(install): treat a release without a sqlite-vec manifest entry as pre-addon
|
|
11
|
+
- 86c1cd9c feat(install): ship the sqlite-vec native addon to pure-binary installs
|
|
12
|
+
- b5590ef3 install.sh: install goodvibes-agent as a checksum-verified compiled binary; restart a running agent post-install
|
|
13
|
+
- f0860827 install.sh: restart a running daemon after the binary swap so the curl one-liner works as an upgrade
|
|
14
|
+
|
|
15
|
+
## [1.14.0] — 2026-07-11
|
|
16
|
+
|
|
17
|
+
### Changes
|
|
18
|
+
- f45a47a6 chore: pin @pellux/goodvibes-sdk 1.7.0 — published feature-flags and emitters runtime subpaths; add @pellux/goodvibes-terminal-shell 1.7.0; drop dev-link overrides
|
|
19
|
+
- e9f844d6 feat(flags): align TUI toggle path with the SDK live config->flag bridge
|
|
20
|
+
- 3d1cb772 test(verification): behavior-verify the 28 flag-gated feature-knob settings; clear ledger floor
|
|
21
|
+
- a714db76 chore: adopt repacked SDK dev tarballs 1.6.1 (HEAD 0665cadc)
|
|
22
|
+
- b2dba275 chore: keep onboarding-wizard-steps and settings-modal-data within the 800-line budget
|
|
23
|
+
- 7729ec19 Onboarding: guided coverage for every remaining feature as a unit
|
|
24
|
+
- 4625c662 /flags: fold the flat dump into feature-unit-aware grouped output
|
|
25
|
+
- 64dcf4cd Settings modal: present each feature flag as a unit (toggle + its config keys)
|
|
26
|
+
- c7ad86c3 Fix inert hitl-ux-modes onboarding: enable gating flag with non-default hitlMode
|
|
27
|
+
- dea4fa31 chore: keep runtime/services.ts within the 800-line architecture budget
|
|
28
|
+
- 1ac1036e chore(sdk): reconcile generated artifacts and provider test for SDK 1.6.1
|
|
29
|
+
- 43c84ff7 chore(sdk): wire StepUpService into RuntimeServices for SDK 1.6.1
|
|
30
|
+
- 326772bd refactor(onboarding): source channel setup fields from the SDK schema, keep presentation local
|
|
31
|
+
- 50a41dab refactor(cli): rename the support-snapshot command to 'support-bundle' to end the 'bundle' collision
|
|
32
|
+
- 5cb1b444 feat(workstream): support non-leaf best-of-N attempts and show held dependents
|
|
33
|
+
- 6f8ebde2 feat(health): surface daemon runtime metrics and remaining quota in /health metrics
|
|
34
|
+
- b1299979 feat(rewind): persist message-anchored rewind anchors across session resume
|
|
35
|
+
- 572d52f2 feat(release): mirror platform binary packages to GitHub Packages + workflow structure gate
|
|
36
|
+
- f3a34e00 feat(compaction): surface sectionsIncluded in the post-compaction receipt
|
|
37
|
+
- be1f0fe2 chore: refresh @pellux tarball integrity for repacked SDK 1.6.1 dev state
|
|
38
|
+
- 6f9e03cd feat: surface the new SDK asks/receipts/results (compaction, attribution, judgment, child failure)
|
|
39
|
+
- 14185544 feat(context): bind context_accounting to the live Orchestrator
|
|
40
|
+
- b8b76ea9 chore: reconcile goldens for the refreshed SDK dev-link tarballs
|
|
41
|
+
- b44f70d0 feat(plugin): add the capability-bundle marketplace surface to goodvibes plugin
|
|
42
|
+
- 6613153b feat(relay): expose outbound relay reachability in the TUI
|
|
43
|
+
- 6c7e3fbe chore: refresh dev-linked SDK tarball integrity (relay + capability-bundle content)
|
|
44
|
+
- 44d4dcd8 feat(permissions): wire the exec sandbox into the approval flow
|
|
45
|
+
- 1df64126 feat(runtime): fold workspace registration into the first-open trust prompt
|
|
46
|
+
- 7a447c78 chore: refresh dev-linked SDK tarballs for repacked 1.6.1 (workspace registration store, sandbox policy exports)
|
|
47
|
+
- 6a9ca59e feat(workstream): surface best-of-N attempts (plan validation + attempts subcommand + fleet badge)
|
|
48
|
+
- 3eb500d1 feat(review): add per-hunk reject (revert) to /review via checkpoints.revertHunk
|
|
49
|
+
- 9e81187d feat(rewind): swap the TUI-local rewind coordinator for the SDK UnifiedRewindService
|
|
50
|
+
- e228188a chore: refresh dev-linked SDK tarballs for repacked 1.6.1 (rewind service, hunk revert, best-of-N attempts)
|
|
51
|
+
- 00ba2ff5 feat: add the exec env-scrub allowlist setting, wired through registerAllTools
|
|
52
|
+
- 0cb80635 feat: expose the per-command exec sandbox surface in settings and exec results
|
|
53
|
+
- a6ef4a71 feat: apply temporal-window-only /recall files proposals for real
|
|
54
|
+
- c4bc39b9 chore: refresh dev-linked SDK tarballs for repacked 1.6.1 (sandbox, scrub, temporal patch, learning config)
|
|
55
|
+
- b8c31445 feat(flags): /flags graduation — feature-flag graduation readiness report
|
|
56
|
+
- 3742073e feat(rewind): unified message-anchored /rewind (files + conversation) with /undo and /redo
|
|
57
|
+
- 13572e44 chore: refresh dev-linked SDK tarballs for repacked 1.6.1 (rewind + flag graduation + worktree config)
|
|
58
|
+
- 72cf6f78 memory: add the git-backed file projection surface (/recall files sync|review|apply) + temporal-status visibility
|
|
59
|
+
- 697a9458 exec: render withheld_env in tool results, surface shipped credential-read rules in /permissions
|
|
60
|
+
- e7293290 settings: add learning.consolidation category for the hoisted memory consolidation config
|
|
61
|
+
- 0b7ae90b chore: refresh dev-linked SDK tarball integrity for repacked 1.6.1 content
|
|
62
|
+
- 00986ade Add /cost attribution over cost.attribution.get, pre-launch quota consultation
|
|
63
|
+
- ab27babc Expose worktree.setup.commands/carryOverGlobs, show setup state, add rerun command
|
|
64
|
+
- 235b60f0 Drive /channel pair from the SDK's getBuiltinSetupSchema, add a real verify round-trip
|
|
65
|
+
- 2c1831bf Refresh dev-linked SDK tarballs to the repacked 1.6.1 content
|
|
66
|
+
- c96580bf docs: regenerate command reference for the new /workstream item-edit subcommands
|
|
67
|
+
- 6495cc23 workstream: journal drafts to disk so the plan-review gate survives a restart
|
|
68
|
+
- 06e71816 workstream: editable plan-review gate — edit-item / remove-item / move-item
|
|
69
|
+
- 9155cc6a feat(runtime): wire the fleet needs-input push fan-out live in the composed daemon
|
|
70
|
+
- 0d327ef4 feat(runtime): register the check-in gateway verb group live in the composed daemon
|
|
71
|
+
- 05f88c1b feat: add /principals command and /channel profiles subcommand
|
|
72
|
+
- b9436292 feat: expose check-in config in settings + add /checkin command
|
|
73
|
+
- d6f7f8d3 feat: add /ci command for CI-watch (status, watch, watches, unwatch)
|
|
74
|
+
- 9ab191d5 chore: refresh local SDK 1.6.1 tarballs (initiative cluster surface)
|
|
75
|
+
- c44fff9f Add run-goodvibes composite action + CI self-test
|
|
76
|
+
- 5e07b9e7 Stage Windows support: WSL2 documented, windows-x64 as non-gating beta
|
|
77
|
+
- e6f2b32b Add platform binary packages (esbuild/biome pattern) for npm/pnpm installs
|
|
78
|
+
- b76019d5 Collapse the global-install trust list to one package
|
|
79
|
+
- ef35276c feat(install): one-command curl installer for TUI, daemon, and agent
|
|
80
|
+
- 7000df12 feat(onboarding): fast-path first run + guided channel pairing
|
|
81
|
+
- ec214814 feat(runtime): per-workspace trust gate composed into the permission machinery
|
|
82
|
+
- 46677c0d feat(input): fuzzy command palette over the command registry
|
|
83
|
+
- 17bc7769 feat(docs): generate command reference from the registry with a drift gate
|
|
84
|
+
- 1ad897d5 chore: refresh dev-link integrity + operator contract for repacked SDK 1.6.1 tarballs
|
|
85
|
+
- 673bd32e Add comment-on-hunk review loop that steers comments to the session
|
|
86
|
+
- d082f7bc Add /permissions provenance panel
|
|
87
|
+
- d9847b14 Add doctor explain/routing/hooks diagnostician subcommands
|
|
88
|
+
- e91e9b02 feat: adopt SDK session permission-mode, compaction-receipt, and concealed-input surfaces
|
|
89
|
+
- 3b0c470a feat(settings): surface C3a config keys — permissions.backgroundAgents and diagnostics.postEdit
|
|
90
|
+
- 1d484a37 test: reconcile suite with SDK 1.6.1 surfaces (repo_map tool, fleet event domain, operator contract)
|
|
91
|
+
- bb8424f6 chore: refresh dev-link integrity for repacked SDK 1.6.1 tarballs
|
|
92
|
+
- d277d84c Add doctor exposure report and startup install self-check
|
|
93
|
+
- 2de2cfcd Regenerate operator contract artifact for SDK 1.6.1 gateway catalog
|
|
94
|
+
- efe3e075 Add hooks validate and plugin init/validate CLI subcommands
|
|
95
|
+
- 93312c5b Adopt goodvibes-terminal-shell package and SDK 1.6.1 surfaces
|
|
96
|
+
- 21d67309 Dev-link goodvibes SDK 1.6.1 tarballs for local adoption work
|
|
97
|
+
- 6f125cf0 Composer set: $EDITOR composition, # note capture, auto-titles, NL schedules
|
|
98
|
+
- ab695150 Add /flags command surfacing every feature flag by state
|
|
99
|
+
- 5ce19325 Add scriptable statusline driven by statusline.command config
|
|
100
|
+
- a4465501 Add checkpoints.* config keys for the workspace checkpoint root guard
|
|
101
|
+
- 512e7e24 test(goldens): regenerate settings-modal snapshot for OSC 9 notification settings
|
|
102
|
+
- e0e2ea5c test(goldens): regenerate fleet-panel snapshots for blocked-on-me badge + sort
|
|
103
|
+
- 93617d1a Routing chip: surface mid-session model changes as a visible conversation notice
|
|
104
|
+
- 949efcdb Approval prompt: 350ms input debounce, requester attribution, remember-scope preview
|
|
105
|
+
- cc89882e Notifications: OSC 9 in-terminal alerts + optional bell on approval/turn-end/agent-blocked
|
|
106
|
+
- 26a18444 Fleet: derive blocked-on-me state with badge, blocked-first sort, and jump key
|
|
107
|
+
- db8ca380 /update: implement a real self-update path instead of a decorative posture review
|
|
108
|
+
- 994a4444 Extract checksum verification into a shared release-artifacts module
|
|
109
|
+
- c0fa04e4 postinstall: hard-fail on a checksum entry missing from SHA256SUMS.txt
|
|
110
|
+
|
|
7
111
|
## [1.13.1] — 2026-07-09
|
|
8
112
|
|
|
9
113
|
### Changes
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](https://github.com/mgd34msu/goodvibes-tui)
|
|
6
6
|
|
|
7
7
|
A terminal-native AI coding, operations, automation, knowledge, and integration console with a typed runtime, omnichannel surfaces, structured memory/knowledge, and a raw ANSI renderer.
|
|
8
8
|
|
|
@@ -18,11 +18,11 @@ GoodVibes is a Bun program. Install Bun first and make sure `bun` is on `PATH`,
|
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
20
|
bun add -g @pellux/goodvibes-tui
|
|
21
|
-
bun pm trust -g @pellux/goodvibes-tui
|
|
21
|
+
bun pm trust -g @pellux/goodvibes-tui
|
|
22
22
|
goodvibes
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Bun blocks lifecycle scripts for untrusted global packages.
|
|
25
|
+
Bun blocks lifecycle scripts for untrusted global packages. Only one package needs trusting — `@pellux/goodvibes-tui` itself — so its postinstall can place the matching TUI and daemon binaries. No dependency needs trusting: the prebuilt binaries arrive through the platform-specific `@pellux/goodvibes-tui-<os>-<arch>` package (installed by the package manager with registry integrity, no lifecycle script), and the tree-sitter grammar packages ship their `.wasm` files as plain files — the app loads those, never the native bindings their `install` scripts would build. If you skip the trust step entirely the `goodvibes` launcher still self-heals on first run by fetching and checksum-verifying the binaries. Verify the global install with:
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
28
|
bun pm -g untrusted
|
|
@@ -30,7 +30,7 @@ goodvibes --version
|
|
|
30
30
|
goodvibes-daemon --version
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
`bun pm -g untrusted` must report `Found 0 untrusted dependencies with scripts
|
|
33
|
+
`bun pm -g untrusted` must report `Found 0 untrusted dependencies with scripts` after trusting `@pellux/goodvibes-tui`. `npm install -g @pellux/goodvibes-tui` is also supported, but it does not install Bun for you. The package preinstall check fails with a clear message if `bun` is missing from `PATH`.
|
|
34
34
|
|
|
35
35
|
Or run from source:
|
|
36
36
|
|
|
@@ -53,9 +53,9 @@ Release distribution:
|
|
|
53
53
|
|
|
54
54
|
- GitHub Releases are the primary distribution path for compiled binaries
|
|
55
55
|
- `bun add -g @pellux/goodvibes-tui` is the recommended global install path; the package is hosted on the npm registry and Bun installs from that registry directly
|
|
56
|
-
- Bun global installs require trusting `@pellux/goodvibes-tui` so the package postinstall can
|
|
56
|
+
- Bun global installs require trusting only `@pellux/goodvibes-tui` so the package postinstall can place the matching TUI and daemon binaries; no dependency needs trusting (grammar `.wasm` files ship as plain files, the platform binary package carries the binaries with registry integrity, and no runtime dependency's install script is loaded)
|
|
57
57
|
- `npm install -g @pellux/goodvibes-tui` is supported on Linux, macOS, and WSL when Bun is already installed; the preinstall check verifies Bun, and the install script downloads the matching TUI and daemon binaries for the current platform
|
|
58
|
-
-
|
|
58
|
+
- Windows is supported via WSL2 today: inside a WSL2 distribution GoodVibes is an ordinary Linux install, so the `linux-x64`/`linux-arm64` binaries run natively. Native Windows is beta (the `windows-x64` binary compiles but is not yet a stable release asset). See [docs/windows.md](docs/windows.md).
|
|
59
59
|
|
|
60
60
|
Common paths:
|
|
61
61
|
|
package/bin/goodvibes
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
isExecutable,
|
|
8
8
|
isSourceCheckout,
|
|
9
9
|
resolveArtifactName,
|
|
10
|
+
resolvePlatformPackageBinary,
|
|
10
11
|
run,
|
|
11
12
|
supportedTargetsText,
|
|
12
13
|
} from './launcher-support.js';
|
|
@@ -37,6 +38,11 @@ if (vendoredBinary && isExecutable(vendoredBinary)) {
|
|
|
37
38
|
run(vendoredBinary, process.argv.slice(2));
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
const platformPackageBinary = resolvePlatformPackageBinary('app', process.platform, process.arch, packageRoot);
|
|
42
|
+
if (platformPackageBinary) {
|
|
43
|
+
run(platformPackageBinary, process.argv.slice(2));
|
|
44
|
+
}
|
|
45
|
+
|
|
40
46
|
if (artifactName) {
|
|
41
47
|
try {
|
|
42
48
|
const installedBinary = await ensureVendoredBinary({ packageRoot, artifactName });
|
package/bin/goodvibes-daemon
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
isExecutable,
|
|
8
8
|
isSourceCheckout,
|
|
9
9
|
resolveArtifactName,
|
|
10
|
+
resolvePlatformPackageBinary,
|
|
10
11
|
run,
|
|
11
12
|
supportedTargetsText,
|
|
12
13
|
} from './launcher-support.js';
|
|
@@ -37,6 +38,11 @@ if (vendoredBinary && isExecutable(vendoredBinary)) {
|
|
|
37
38
|
run(vendoredBinary, process.argv.slice(2));
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
const platformPackageBinary = resolvePlatformPackageBinary('daemon', process.platform, process.arch, packageRoot);
|
|
42
|
+
if (platformPackageBinary) {
|
|
43
|
+
run(platformPackageBinary, process.argv.slice(2));
|
|
44
|
+
}
|
|
45
|
+
|
|
40
46
|
if (artifactName) {
|
|
41
47
|
try {
|
|
42
48
|
const installedBinary = await ensureVendoredBinary({ packageRoot, artifactName });
|
package/bin/launcher-support.js
CHANGED
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
import { accessSync, chmodSync, constants, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
3
4
|
import { spawnSync } from 'node:child_process';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
5
6
|
|
|
6
7
|
const SUPPORTED_TARGETS = ['linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64'];
|
|
7
8
|
|
|
9
|
+
// Platform package names, mirrored from scripts/platform-packages.ts. This file
|
|
10
|
+
// is plain JS shipped in the tarball and cannot import that TS module; keep the
|
|
11
|
+
// two in sync. Keyed by `${process.platform}-${node-arch}`.
|
|
12
|
+
const PLATFORM_PACKAGE_NAMES = {
|
|
13
|
+
'linux-x64': '@pellux/goodvibes-tui-linux-x64',
|
|
14
|
+
'linux-arm64': '@pellux/goodvibes-tui-linux-arm64',
|
|
15
|
+
'darwin-x64': '@pellux/goodvibes-tui-darwin-x64',
|
|
16
|
+
'darwin-arm64': '@pellux/goodvibes-tui-darwin-arm64',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the prebuilt binary from the installed platform package
|
|
21
|
+
* (@pellux/goodvibes-tui-<os>-<arch>), if present. The package manager installs
|
|
22
|
+
* it with registry integrity and no lifecycle script, so this path needs no
|
|
23
|
+
* trust step and no post-install download. Returns null when the package is not
|
|
24
|
+
* installed (e.g. an unsupported platform, or optional-dep resolution skipped).
|
|
25
|
+
*/
|
|
26
|
+
export function resolvePlatformPackageBinary(kind, platform, arch, fromDir) {
|
|
27
|
+
const artifactName = resolveArtifactName(kind, platform, arch);
|
|
28
|
+
if (!artifactName) return null;
|
|
29
|
+
const pkgName = PLATFORM_PACKAGE_NAMES[`${platform}-${arch}`];
|
|
30
|
+
if (!pkgName) return null;
|
|
31
|
+
try {
|
|
32
|
+
const require = createRequire(join(fromDir, 'package.json'));
|
|
33
|
+
const pkgJsonPath = require.resolve(`${pkgName}/package.json`);
|
|
34
|
+
const binPath = join(dirname(pkgJsonPath), 'bin', artifactName);
|
|
35
|
+
return isExecutable(binPath) ? binPath : null;
|
|
36
|
+
} catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
8
41
|
export function isExecutable(path) {
|
|
9
42
|
try {
|
|
10
43
|
accessSync(path, constants.X_OK);
|