Skip to content

chore: rename weldable to hoist + phase 0 skeleton - #6

Merged
johnnyhuy merged 3 commits into
feat/scaffold-electronfrom
chore/rename-to-hoist
Jun 26, 2026
Merged

chore: rename weldable to hoist + phase 0 skeleton#6
johnnyhuy merged 3 commits into
feat/scaffold-electronfrom
chore/rename-to-hoist

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Summary

  • Rename the app from weldablehoist across package.json, electron-builder (appId: app.hoist, productName: Hoist), main window title, preload/renderer bridge (HoistAPI exposed as window.hoist), and UI logo.
  • Rewrite BRIEF.md for hoist with the additive BYOK / key-vault scope alongside the existing harness-install / SSO / gateway work.
  • Add four ADRs capturing the architecture decisions for the upcoming BYOK work:
    • 0001 secret-storage backend abstraction (safeStorage default + pluggable chain)
    • 0002 provider registry catalog (~150 providers, generated)
    • 0003 key validity & expiry probing
    • 0004 bundled external binaries (bw/op/sops/age)
  • Lay down a compiling type skeleton for Phase 1+: SecretBackend interface + availability types, ProviderEntry catalog shape, ProbeResult / ProbeKind / BudgetProbeKind.

Stacked on #5 (scaffold). Plan file lives locally only (gitignored .opencode/).

Consequences

  • Pure rename + additive docs/types; no behaviour change. App builds and typechecks clean.
  • Establishes the directory layout (src/main/{secrets,providers,probes}/) and contracts the Phase 1+ implementation will fill in.

Testing

  • npm run typecheck
  • npm run build ✓ (29 modules transformed, 200 kB renderer bundle)
  • npm run lint — eslint not installed in repo (pre-existing gap, not introduced here)

johnnyhuyand others added 3 commits June 26, 2026 17:30
Rename the app across package.json, electron-builder (appId app.hoist,
productName Hoist), main window title, preload/renderer bridge
(HoistAPI exposed as window.hoist), and UI logo text.
Co-authored-by: opencode <opencode@anthropic.com>
Rewrite BRIEF.md for hoist with additive BYOK/key-vault scope alongside
the existing harness install / SSO / gateway work. Add four ADRs:
0001 secret-storage backend abstraction, 0002 provider registry
catalog, 0003 key validity and expiry probing, 0004 bundled external
binaries.
Co-authored-by: opencode <opencode@anthropic.com>
Lay down compiling type stubs for the Phase 1+ work: SecretBackend
interface and availability types (ADR-0001), ProviderEntry catalog
shape (ADR-0002), and ProbeResult/ProbeKind/BudgetProbeKind
(ADR-0003). gitignore .opencode/.
Co-authored-by: opencode <opencode@anthropic.com>
@johnnyhuy
johnnyhuy merged commit 7ef9d8f into feat/scaffold-electronJun 26, 2026
2 checks passed
@johnnyhuy
johnnyhuy deleted the chore/rename-to-hoist branch June 26, 2026 07:35
@johnnyhuy
johnnyhuy restored the chore/rename-to-hoist branch July 19, 2026 02:57
@johnnyhuy
johnnyhuy deleted the chore/rename-to-hoist branch July 19, 2026 02:58
johnnyhuy added a commit that referenced this pull request Jul 19, 2026
)
* chore(tooling): add eslint config and deps for vault + installer slice
- Install eslint + @typescript-eslint plugin and parser
- Add direct dependency with @types/which
- Ignore cli/dist and cli/node_modules
- Closes the lint gap noted in PR #6
* feat(vault): implement safeStorage backend and IPC bridge
- safeStorage backend in src/main/secrets/safestorage.ts: encrypts via Electron safeStorage, persists JSON atomically to userData/vault.bin with chmod 0600
- Extended SecretBackend interface with SecretWriteOptions to carry label metadata
- Shared CHANNELS module in src/shared/channels.ts (kept preload-free of main bundle)
- IPC handlers in src/main/ipc.ts: vault:list/set/delete/copy with 30s clipboard auto-clear, harness:*, provider:list, probe:run
- Typed HoistAPI on window.hoist via preload/api.ts
- Registered IPC handlers in main entry
Implements ADR-0001 default backend.
* feat(probe): add Anthropic /v1/models probe (ADR-0003 first probe)
- src/main/probes/anthropic.ts: 5s timeout, x-api-key + anthropic-version headers; returns ok/invalid/quota_exceeded/error
- src/main/probes/index.ts: dispatches by providerId; the second provider probe slots in here
- Seeded anthropic into PROVIDER_CATALOG with envKeys ANTHROPIC_API_KEY and baseUrlEnv ANTHROPIC_BASE_URL
* feat(installer): wire UI to real install + key save + validate actions
- src/main/providers/harnesses.ts: HARNESS_CATALOG with claude-code/opencode/codex install specs
- src/main/providers/catalog.ts: seeded with anthropic (envKeys, baseUrlEnv, defaultBaseUrl)
- src/main/installer/index.ts: discover via PATH + npm global root, npm install -g executor, version probe
- src/renderer/App.tsx: Harnesses step shows install status, Code button: hidden until installed; Keys step with masked previews, Edit/Validate/Copy/Delete, on-demand probe and inline result; sidebar nav now uses Keys not SSO
The 4-step wizard (Harnesses / Keys / Gateway / Done) is now end-to-end real.
* feat(cli): Bun-based `hoist` terminal companion (single-file binaries)
- cli/src/index.ts: commander entry with install/keys/gateway/list subcommands
- cli/src/lib/vault.ts: macOS Keychain via `security`, fallback to chmod-0600 JSON; config at $HOIST_CONFIG_DIR or platform defaults
- cli/src/lib/harnesses.ts: same discover + npm install logic as the main process
- cli/src/lib/providers.ts: anthropic first
- cli/src/lib/probes.ts: shared Anthropic probe
- cli/scripts/build-all.ts: bun build --compile for darwin-arm64/x64, linux-arm64/x64, windows-x64
- cli/bin/run.js: dev entry that imports compiled index.js
- Tools target bun build --compile for true single-file executables (~50 MB macOS arm64)
Use case: `hoist install claude-code && hoist keys set anthropic && hoist keys probe anthropic` from any terminal.
* ci(release): release-please with CalVer + multi-platform release workflow
- release-please-config.json: two packages (root app, cli), both CalVer (YYYY.MM.PATCH); root tag is plain `v2026.7.0`, cli tag is `cli-v2026.7.0`
- .release-please-manifest.json: pins current versions
- .github/workflows/release-please.yml: opens release PRs on push to main
- .github/workflows/release-build.yml: on release published, detects component from tag shape (cli-v* vs v*) and builds:
- app: mac-arm64 dmg, mac-x64 dmg, windows nsis x64, linux AppImage x64 via electron-builder
- cli: bun build --compile for darwin-arm64/x64, linux-arm64/x64, windows-x64; uploads per-target binaries
- .github/workflows/ci.yml: PR CI runs app typecheck + lint + build and cli typecheck + compile sanity
macOS signing uses APPLE_ID/APPLE_APP_SPECIFIC_PASSWORD/APPLE_TEAM_ID + CSC_LINK/CSC_KEY_PASSWORD repo secrets when present; unsigned builds otherwise.
Sign up for freeto 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.

1 participant

@johnnyhuy