Merged
Conversation
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.
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 free
to 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
SyncDaysconfig field, persist selection from setup wizard, use as default inobk gmail syncwhen--daysnot passedPasswordRef, resolve at all 5 call sites with fallback to plain textobk setup, update skill count to 100+, add OpenRouter and Groq to providersTest plan
go build ./...passesgo test ./config/... ./internal/cli/...passescleanPath,isGWSServiceResolvedPasswordmethod: 4 test cases (ref, fallback, no-ref, nil-resolver)PasswordRefYAML round-tripSyncDaysYAML round-triperrSetupSkippedsentinel error testobk setup— verify timezone prompt, Gmail single-select, iMessage picker on macOS, skip options for ngrok/gwsobk doctor— verify new database checks appearobk gmail sync— verify config SyncDays is respected