Skip to content

feat: live discovery, doctor fixes, harness lifecycle, and working surfaces - #26

Merged
johnnyhuy merged 4 commits into
mainfrom
feat/library-discovery-doctor
Aug 10, 2026
Merged

feat: live discovery, doctor fixes, harness lifecycle, and working surfaces#26
johnnyhuy merged 4 commits into
mainfrom
feat/library-discovery-doctor

Conversation

@johnnyhuy

@johnnyhuy johnnyhuy commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Live Library discovery — harnesses, runtimes, package managers; multi-install + Homebrew channel detection
  • Working surfaces — Harnesses (install/redetect), Provider keys (vault + probe), Gateway (apply wiring via secretId)
  • Watchtower charts — key health donut, harness coverage, install channels, 14-day activity
  • Doctor — PATH winners, one-click Fix / Upgrade / Uninstall / Reconfigure (not just copy-paste)
  • Harness lifecycle — version selector, changelog diff (current→target), install/uninstall via brew or npm
  • Configure — set Claude/OpenCode/Codex model; reset Hoist-managed config
  • PATH priority panel on Library + Harnesses detail rails
  • Tests + CInpm test (doctor, versions, secrets, homebrew, extractor); CI runs full unit suite

Consequences

  • New IPC: harness:configSet, harness:configReset, harness:versions, harness:uninstall; install accepts { id, version?, prefer?, force? }
  • Gateway apply accepts secretId (preferred over plaintext apiKey)
  • Vault secret ids follow provider:<id>:api_key

Testing

  • npm run typecheck
  • npm run lint
  • npm test (unit)
  • npm run catalog:check
  • npm run build
  • Manual Electron smoke: Library lifecycle, Doctor fixes, Keys vault, Gateway list

johnnyhuy and others added 3 commits August 10, 2026 21:34
After running the Library surface in the actual Electron app, four
rough edges showed up that didn't show in any screenshot or build
artefact:

1. macOS native title bar (red/yellow/green traffic lights) was
   rendered above the topbar and ate the first 28px of vertical space.
   Switched to titleBarStyle: 'hiddenInset' with trafficLightPosition
   at (12, 16) so the OS lights render but our titlebar is the only
   chrome the user sees. The renderer's .hoist-topbar now reserves 84px
   on the left for the lights and is drag-region for the OS.

2. The right rail (DetailRail) was sharing the .hoist-rail class with
   the left 56px icon rail, which made the column render at 56px wide
   instead of 320px. Renamed to .hoist-rail-detail with bumped
   specificity (3 classes) so it always wins, and used grid-column:
   3 / 4 + width: auto !important to force the column-3 placement.

3. The 2-letter avatar in the list row was being clipped because the
   title and version shared one row at 36px column-start. Restructured
   the row to a 36px avatar spanning both rows + body in the second
   column with title (with name truncation) and version on a separate
   line. Bumped row width to 380px so all 3 catalog rows fit on
   a single line including version. List is now visible end-to-end.

4. Model names (anthropic, opus-4, opus-4.1, sonnet-4) in the main
   pane were rendered as plain inline text. Now they are styled as
   chip pills in .hoist-library-main-model, with a new
   .hoist-library-main-models wrapper that wraps cleanly.

Plus:
- cleanVersion() strips "(<harness name>)" suffix from discover()
  output (e.g. "2.1.211 (Claude Code)" → "2.1.211").
- LibraryInspectionPanel now reads the IPC entry directly (INSTALL
  heading shows entry name; version / path / id / status / exec
  come from the live entry).
- KV values use word-break: break-all so the long homebrew path no
  longer truncates.

Verified: typecheck/lint/build all green. The running Electron app
shows the real install (Claude Code 2.1.211, /opt/homebrew/bin/claude)
in both the list row and the right rail, and the right rail scrolls
to reveal the REINSTALL and HEALTH sections.
Discover harnesses, runtimes, and package managers from PATH (which -a),
de-dupe by realpath, label Homebrew formula/cask/node vs asdf/bun/npm,
and surface PATH/version conflicts on a Doctor page with copyable fixes.

Also: resizable panes, collapsible nav, provider dropdown, contrast and
radius tokens, and library list + detail rail layout cleanup.

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
…tor fixes

- Live Harnesses/Keys/Gateway surfaces (vault, install, probe, apply wiring)
- Watchtower donut/bar/spark charts from real discovery data
- Library harness configure (model) + lifecycle (versions, changelog, install/uninstall)
- Doctor one-click Fix/Reconfigure/Upgrade/Uninstall actions
- PATH priority panel; softer doctor severities
- OpenAI-compatible probe; unit tests + CI npm test

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
@johnnyhuy johnnyhuy changed the title feat: live library discovery, multi-install doctor, and UI polish feat: live discovery, doctor fixes, harness lifecycle, and working surfaces Aug 10, 2026
homepage: string | null
} | null> {
try {
const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(pkg).replace('%40', '@')}`, {
Keep feature-branch App/layout (full discovery, doctor, lifecycle).
Main already contains titlebar/rail fix via #25.

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
@johnnyhuy
johnnyhuy merged commit d56bccf into main Aug 10, 2026
6 of 7 checks passed
@johnnyhuy
johnnyhuy deleted the feat/library-discovery-doctor branch August 10, 2026 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants