Skip to content

fix: setup & onboarding fixes#83

Merged
priyanshujain merged 51 commits intomasterfrom
onboarding-testing
Mar 16, 2026
Merged

fix: setup & onboarding fixes#83
priyanshujain merged 51 commits intomasterfrom
onboarding-testing

Conversation

@priyanshujain
Copy link
Copy Markdown
Collaborator

Summary

  • Gmail sync window: Add SyncDays config field, persist selection from setup wizard, use as default in obk gmail sync when --days not passed
  • Gmail scope selector: Change from multi-select to single-select (Read only / Read + Write)
  • Missing sources: Add iMessage to macOS source picker with sync-during-setup, add WhatsApp case with QR login instructions
  • Timezone prompt: Prompt for timezone when not configured, pre-filled with system timezone
  • Doctor gaps: Add 5 missing database checks (Contacts, WebSearch, iMessage, Scheduler, Audit)
  • Status gaps: Add contacts database handling in status command
  • Remote password security: Store remote password in keychain via PasswordRef, resolve at all 5 call sites with fallback to plain text
  • Skip option: Add "Wait / Skip" prompt when ngrok or gws CLI is not installed, instead of blocking indefinitely
  • README: Lead Quick Start with obk setup, update skill count to 100+, add OpenRouter and Groq to providers

Test plan

  • go build ./... passes
  • go test ./config/... ./internal/cli/... passes
  • Unit tests for cleanPath, isGWSService
  • ResolvedPassword method: 4 test cases (ref, fallback, no-ref, nil-resolver)
  • PasswordRef YAML round-trip
  • SyncDays YAML round-trip
  • errSetupSkipped sentinel error test
  • Doctor: all 11 expected DB names present in check output
  • Doctor: check functions (missing config, valid config, missing DBs, some DBs exist, missing OAuth, missing WhatsApp session, no skills, nil models)
  • Manual: obk setup — verify timezone prompt, Gmail single-select, iMessage picker on macOS, skip options for ngrok/gws
  • Manual: obk doctor — verify new database checks appear
  • Manual: obk gmail sync — verify config SyncDays is respected

Auth commands now live under `obk gmail auth` instead of `obk auth google`,
following the resource-first CLI pattern.
Auth commands now live under `obk whatsapp auth` instead of `obk auth whatsapp`.
Reuses existing newRemoteClient helper instead of duplicating remote.NewClient.
Auth commands now live under `obk slack auth` instead of `obk auth slack`.
Also fixes loadClient() error string to reference new command path.
The auth commands have been moved into their respective provider packages
(gmail, whatsapp, slack). The top-level `obk auth` command is now removed.
… paths

Replaces `obk auth google` with `obk gmail auth`, `obk auth whatsapp`
with `obk whatsapp auth`, and `obk auth slack` with `obk slack auth`
across config, setup, source, oauth, tests, and docs.
Consistent with gcloud (`gcloud config configurations describe`).
Matches gcloud pattern (`gcloud config list` prints all properties).
Matches gcloud pattern (`gcloud auth list`). Renames the verb from
status to list for gmail, whatsapp, and slack auth commands.
… pattern

Slack and websearch now match gmail/whatsapp naming convention.
Adds --json to: status, doctor, config profiles list, memory list,
memory add, whatsapp auth list, slack auth list, and slack channels.
Slack channels now defaults to tabular output instead of JSON dumps.
Adds "Are you sure?" prompts (skippable with --force) to: memory delete,
config profiles delete, service uninstall, server uninstall,
whatsapp auth logout, slack auth logout, and gmail auth revoke.
Every command with a RunE now has a cobra Example field showing
realistic usage patterns. Also fixes profile delete tests to pass
--force flag added in the previous commit.
Covers resource-first hierarchy, standard verbs, required flags
(--json, --limit, --force), destructive command safety, help
examples, and Short description patterns.
Text elements in the safety sub-boxes now use containerId binding
so Excalidraw wraps them within box boundaries. Widened boxes from
160→180px and bottom boxes from 340→375px.
Redistributed 7 source boxes evenly within wider sources_bg and
widened the Local SQLite box to prevent text clipping.
… fonts

Reverted all box positions to original values. Fixed text overflow
by binding text to containers with fontSize 11 (titles) and 10
(bottom boxes) instead of widening the layout.
Agent Loop, Tool Executor, and Local SQLite text elements now use
containerId binding so text wraps within box boundaries.
…lback

When PasswordRef is set and the keychain resolver fails, the error is now
propagated to the caller instead of silently falling back to plain text.
Contacts is a cross-cutting store populated by other sources, not a
standalone source. Move it out of the dead switch case and report its
count separately after the source loop.
Invalid timezone strings now fall back to the system timezone with a
warning instead of being persisted to config.
Read-only actions (search, read notes, etc.) execute instantly. Only
writes like sending messages or modifying calendars require approval.
…mand

Consolidate the parallel `obk service` (daemon) and `obk server` hierarchies
into one `obk service <action> [daemon|server]` command group. No args defaults
to both services. Eliminates naming confusion and code duplication.
… names

Creates ~/.obk/bin/obk-daemon and obk-server wrapper scripts during install
so macOS Login Items displays "obk-daemon" / "obk-server" instead of two
identical "obk" entries. Wrapper is cleaned up on uninstall.
@priyanshujain priyanshujain merged commit f290a4e into master Mar 16, 2026
10 checks passed
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.

make it like an application so it looks legit on background apps on macos

1 participant