Uh oh!
There was an error while loading. Please reload this page.
chore: rename weldable to hoist + phase 0 skeleton - #6
Merged
Conversation
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>
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Jul 19, 2026
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
appId: app.hoist,productName: Hoist), main window title, preload/renderer bridge (HoistAPIexposed aswindow.hoist), and UI logo.BRIEF.mdfor hoist with the additive BYOK / key-vault scope alongside the existing harness-install / SSO / gateway work.0001secret-storage backend abstraction (safeStorage default + pluggable chain)0002provider registry catalog (~150 providers, generated)0003key validity & expiry probing0004bundled external binaries (bw/op/sops/age)SecretBackendinterface + availability types,ProviderEntrycatalog shape,ProbeResult/ProbeKind/BudgetProbeKind.Stacked on #5 (scaffold). Plan file lives locally only (gitignored
.opencode/).Consequences
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)