You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix(npm): carry per-package install durations in streaming events
Sequential npm installs now time each package and emit the duration as
the StepOK detail, so the wizard log shows npm rows with the same
timing brew rows get (npm batch installs have no per-package timing to
report, so those rows stay clean rather than showing invented numbers).
* feat(tui): wizard deep-polish — online search, preset entry, summary, small terminals
Closes the UX gaps found in the v0.63 comparison:
- select screen regains online search (lost in the Redesign v5 rewrite):
filtering fires a debounced openboot.dev lookup; hits are deduped
against the catalog, badge-marked, and picks are homed in a synthetic
'online' sidebar category so they survive clearing the filter.
PlanFromSelection gains an online parameter so their type info
reaches categorization.
- 'install -p <preset>' (and OPENBOOT_PRESET) on a TTY now enters the
full wizard with the loadout preselected on the select screen,
instead of the linear pre-flight + pipeline-screen stitch. Unknown
presets keep the linear path and its clear error.
- completion appends a summary to the log tail — counts plus the names
of failed packages, which had scrolled away by the DONE screen.
- elapsed times render as 3m24s instead of raw seconds everywhere.
- terminals below 60x15 get a resize hint instead of a broken frame.
- the hover background derives its escape from the active lipgloss
colour profile, so it downsamples on 256/16-colour terminals and
disappears cleanly without colour support.
* feat(tui): run slug/--from/-u installs through the full wizard (config mode)
Remote-config installs on a TTY previously got a stitched experience:
linear 3-way prompt + the old full-screen customizer, then a jump into
the wizard's live install screen. They now enter the wizard proper via
RunForConfig: boot probe → select (the config's own packages as sidebar
categories, all preselected, installed tools marked) → review plan →
live install.
- installer.PlanForRemoteSelection builds the plan from the config
filtered to the wizard selection, plus openboot.dev search picks;
everything declarative (git, shell, dotfiles, prefs, dock, login
items, post-install) flows through planFromRemoteConfig unchanged.
- config mode never interposes the git screen — the git step already
keeps an existing config and no-ops when absent, matching the old
slug pipeline behavior; the review screen says so instead of
rendering an empty identity.
- post-install can't host its confirm inside the alt-screen: the review
screen surfaces it as an informational row, the streamed apply strips
it, and the CLI runs it after teardown from the returned plan
(mirroring the pipeline path's R1 fix).
- sync-source installs are unchanged (diff pre-flight + RunPipeline);
--pick, --silent, --dry-run, --update and non-TTY keep their flows.
- promptCustomizeAndApply + RunConfigCustomizer remain for the
dry-run/update/non-TTY prompt paths and the sync customizer.
* refactor(tui): extract onCtrlC to keep Model.Update under the gocyclo gate
The two online-search message cases pushed Update to complexity 22
(gate is 20). Moving the ctrl+c abort semantics into their own method
reads better than a nolint and drops Update back under the gate.
Copy file name to clipboardExpand all lines: CLAUDE.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
OpenBoot is a **macOS-only** Go 1.25 CLI that automates dev-environment setup: Homebrew packages/casks, npm globals, Oh-My-Zsh, macOS `defaults`, and dotfiles. Built on **Cobra** (CLI) + **Charmbracelet** (bubbletea / lipgloss / huh for TUI).
Core flow: `openboot install` orchestrates plan → apply in `internal/installer/installer.go`. Bare interactive `openboot install` on a TTY runs the full-screen install TUI in `internal/ui/tui/wizard/` (boot probe → select → live install); explicit sources (`-p`, `--from`, `-u`, sync), `--silent`, and `--dry-run` use the linear flow.
8
+
Core flow: `openboot install` orchestrates plan → apply in `internal/installer/installer.go`. Bare interactive `openboot install` on a TTY runs the full-screen install TUI in `internal/ui/tui/wizard/` (boot probe → select → live install); `-p <preset>` enters the same wizard with the loadout preselected, and slug/`-u`/`--from`/alias installs enter it in config mode (`RunForConfig`: the config's own packages on the select screen, preselected). Sync-source installs keep their linear diff pre-flight but stream the apply through the wizard's live install screen (`RunPipeline`). `--silent`, `--dry-run`, `--update`, and non-TTY runs use the linear flow.
9
9
10
10
For full contribution guide (test layering L1–L4, Runner interface, hook setup) see @CONTRIBUTING.md.
11
11
For AI agents: @AGENTS.md indexes invariants enforced by `internal/archtest`; @docs/HARNESS.md is the steering meta-doc for where to encode new rules.
0 commit comments