Skip to content

feat: remote AI dispatch + Settings + secure storage + release pipeline - #4

Open
aymandakirgh wants to merge 14 commits into
feat/mvp-battery-commandbarfrom
feat/remote-ai-settings
Open

feat: remote AI dispatch + Settings + secure storage + release pipeline#4
aymandakirgh wants to merge 14 commits into
feat/mvp-battery-commandbarfrom
feat/remote-ai-settings

Conversation

@aymandakirgh

Copy link
Copy Markdown
Owner

Everything fixable in code toward production. Stacks on the MVP PR (#3) — review/merge that first.

The differentiator: remote AI dispatch

The command bar now actually does what the README promises. Unrecognized queries (anything the local handlers don't resolve) dispatch to a user-configured AI backend.

  • AIDispatching + OpenAICompatibleDispatcher — POSTs to any OpenAI-compatible /chat/completions (OpenAI, Ollama local, proxies). Injectable URLSession; typed errors.
  • Privacy preserved — local-first is unchanged; nothing leaves the device unless you configure an endpoint and the query isn't handled locally. The 🔒/☁️ badge shows which path ran.
  • Async submit() with a loading spinner.

Settings (⌘,)

  • SettingsView — base URL, model, API key, OpenAI/Ollama presets, Save.
  • SettingsStore — endpoint config → UserDefaults; API key → Keychain (KeychainSecretStore). SecretStoring protocol keeps the Keychain out of CI (tests use InMemorySecretStore).
  • App now exposes a real Settings scene (was EmptyView).

UX fix

The panel no longer collapses out from under you while typing — hover-leave only collapses when the command bar is idle (shouldStayOpen).

Production infra

  • .github/workflows/release.yml — on a v* tag: build → (sign + notarize if secrets present) → DMG → GitHub Release. Gated: produces an unsigned DMG today, a signed+notarized one once the Apple cert secrets exist.
  • RELEASING.md — exact secrets + steps, and the standing blocker spelled out.

Tests (+15 assertions)

AIDispatcherTests (stub URLProtocol: success/HTTP-error/empty/unconfigured), AISettingsTests (URL building, config, persistence round-trip), CommandBarViewModelTests (local resolve, remote dispatch, unconfigured hint, stay-open). CI runs them on this PR.

Still NOT production — unchanged blockers

  1. Never been run. All of this is CI-verified (compiles + unit tests), but the UI — Settings window, command-bar focus, spinner, the collapse fix — has not been seen by a human. Needs Xcode on a notched Mac.
  2. Can't be distributed until GH enrolls in the Apple Developer Program ($99/yr) and the signing secrets are added. The pipeline is ready and waiting for exactly that.

Not in scope: media controls, calendar, file shelf, system HUD; streaming AI responses; conversation history.

🤖 Generated with Claude Code

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.

1 participant