Commit Graph

60 Commits

Author SHA1 Message Date
Peter Steinberger
91c4c15884 chore(release): v0.11.0
Some checks failed
ci / test (push) Has been cancelled
ci / worker (push) Has been cancelled
ci / darwin-cgo-build (push) Has been cancelled
2026-02-15 04:28:24 +01:00
Peter Steinberger
f1c2b9dbab refactor(cmd): unify result output 2026-02-15 04:16:13 +01:00
Peter Steinberger
7dbf57e191 fix(drive): add trash output + delete tests 2026-02-15 01:35:11 +01:00
Peter Steinberger
3d9c618ce0 feat(drive): add --no-all-drives to ls/search 2026-02-14 20:43:10 +01:00
Peter Steinberger
e61769cb1b
feat(contacts): update contacts from JSON
Supersedes #200.

- Add `contacts update --from-file <path|->` + `--ignore-etag`
- Update mask from JSON keys; clears via `[]`/`null`
- ETag safety + resourceName validation
- Docs/tests/README/CHANGELOG updates

Co-authored-by: Jeremy Rossi <jeremy@jeremyrossi.com>
2026-02-14 15:31:14 +01:00
salmonumbrella
3371e3f3ad
feat(cli): agent ergonomics + gmail watch exclude labels (#201)
* feat(cli): improve agent ergonomics

* fix(cli): address code review findings

- Fix nil pointer dereference in confirmDestructive when flags is nil
- Deduplicate dry-run logic by delegating to dryRunExit
- Remove deprecated net.Error.Temporary() call (dead since Go 1.18)
- Add unit tests for resolveTasklistID and resolveCalendarID

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve PR #201 conflicts and follow-ups (#201) (thanks @salmonumbrella)

* fix: resolve rebase fallout for PR #201 landing (#201) (thanks @salmonumbrella)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-02-14 03:09:49 +01:00
Ross Sivertsen - Systems Sherpa
077f9a3620
contacts: support --birthday and --notes in contacts update (#233)
* contacts: allow updating birthday and notes

* fix(cli): unify date parsing + cover contacts birthday/notes (#233) (thanks @rosssivertsen)

---------

Co-authored-by: Ross Sivertsen <ross@canyoncreek.co>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-02-13 18:16:49 +01:00
Peter Steinberger
2ecdf2f147 feat(drive): add upload conversion flags
Add Drive upload conversion with auto detection (--convert) and explicit targets (--convert-to), preserve explicit --name values, and improve conversion behavior tests/docs for PR #240.

Co-authored-by: Daniel Weber <daniel@suno.com>
2026-02-13 16:38:19 +01:00
salmonumbrella
2df8ece2f6
fix(auth): enforce remote manual auth state (#187)
* fix(gmail): fallback to send-as list for display name

* refactor(gmail): remove dead code in primarySendAsDisplayNameFromList

The condition `primary == nil && sa.IsPrimary` inside the email-matching
block can never be true because `primary` is already unconditionally set
to `sa` when `sa.IsPrimary` is true earlier in the same loop iteration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(gmail): add --from display name fallback to list test

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(auth): persist manual oauth state

* feat(cli): add remote manual auth flow

* fix(auth): enforce remote manual auth state

* fix(auth): satisfy lint for manual auth flow

* fix(auth): harden remote manual auth state cache

* chore: update changelog for remote manual auth (#187) (thanks @salmonumbrella)

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-02-09 10:38:26 -08:00
Daniel Weber
e3cb940780
feat(drive): add --domain flag to share command (#192)
* feat(drive): add --domain flag to share command

Allow sharing files/folders with an entire Google Workspace domain
(e.g. `gog drive share <id> --domain=example.com --role=writer`).
This creates a "domain" type permission in the Drive API, enabling
the "Anyone in <org> with the link" sharing mode.

Also updates `permissions` output to display domain names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(drive): add --to target for share (#192) (thanks @Danielkweber)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-02-06 16:42:39 -08:00
Peter Steinberger
99d957581f feat(auth): add multi-org login
Some checks failed
ci / test (push) Has been cancelled
ci / worker (push) Has been cancelled
ci / darwin-cgo-build (push) Has been cancelled
2026-01-22 04:04:14 +00:00
Mariano Belinky
c340914688 feat(gmail): add message search + decode bodies 2026-01-22 01:12:09 +00:00
salmonumbrella
4f29d8e250 feat(calendar): add timezone/local times to outputs 2026-01-21 10:57:37 +00:00
salmonumbrella
33685adafe feat: add chat support and expand people commands 2026-01-18 05:42:12 +00:00
salmonumbrella
2cdeb8bf73 feat(cli): expand calendar event types and tasks 2026-01-17 07:46:21 +00:00
salmonumbrella
05986fb6ce
fix(timezone): honor --timezone local (#79)
* feat(gmail): add timezone support for date output

Add --timezone and --local flags to gmail search and watch serve commands
to control how dates are displayed. By default uses local timezone.
Users can specify any IANA timezone (e.g., America/New_York, UTC).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(gmail): fix execute test for timezone changes

Update TestExecute_GmailSearch_JSON to use explicit --timezone UTC flag
and expect the correctly converted time (22:04 UTC from 15:04 -0700).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(gmail): add -z short flag for --timezone

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(gmail): add unit tests for resolveOutputLocation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs(gmail): clarify timezone flag help text

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(gmail): add timezone conversion tests for formatGmailDateInLocation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(config): add default_timezone setting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(gmail): support GOG_TIMEZONE env var and config for timezone

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(config): add gog config command for timezone and settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(calendar): respect GOG_TIMEZONE and config for timezone

Update calendar time command to follow the same timezone priority as gmail:
1. --timezone flag (explicit)
2. GOG_TIMEZONE env var
3. Config file default_timezone
4. Fall back to Google Calendar's timezone (calendar-specific fallback)

Add getConfiguredTimezone helper that returns nil when no explicit timezone
is configured, allowing calendar commands to use their own fallback behavior.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(gmail): add tests for GOG_TIMEZONE env var and getConfiguredTimezone

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(config): warn on invalid timezone instead of error

When default_timezone in config is invalid, print a warning to stderr
and fall back to local timezone instead of returning a hard error.

Invalid flag/env var still returns errors (user mistake in current
session), but invalid config should not break the CLI (stale config).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor(gmail): remove unused formatGmailDate, add nolint directive

- Remove unused formatGmailDate wrapper function (all callers use
  formatGmailDateInLocation directly with explicit location)
- Add nolint:nilnil directive to getConfiguredTimezone with explanation
  that nil return signals caller to use its own fallback

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(timezone): honor --timezone local

* refactor(cli): unify config/timezone helpers

* test(cmd): isolate config env in timezone tests

* refactor(config): centralize config key metadata

* fix(config): drop unused key spec lookup

* fix(config): standardize config key errors

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-17 04:53:31 +00:00
Peter Steinberger
f5f33ca7a6 fix: adjust classroom topic scan + manage upgrade scopes (#73) (thanks @salmonumbrella) 2026-01-17 01:56:32 +00:00
salmonumbrella
5e55964a85 fix(classroom): add tests, nil guards, and topic filter
- Add comprehensive unit tests for classroom helper functions
  (date/time parsing, error wrapping, profile helpers)
- Add profileEmail() helper for nil-safe email extraction
- Fix nil pointer guards for Profile access (12 locations in
  courses, rosters, and guardians)
- Add --topic filter for coursework and materials list commands
- Update docs/spec.md with new filter options

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 10:41:58 +00:00
salmonumbrella
58941b433a docs: note classroom roster and materials 2026-01-16 10:41:58 +00:00
salmonumbrella
fe2b85fb66 docs: document classroom commands 2026-01-16 10:41:58 +00:00
Peter Steinberger
c94b6d4417 feat(drive): add drives subcommand (#67) (thanks @pasogott) 2026-01-15 17:14:01 +00:00
Peter Steinberger
2bb6a8b37c feat(auth): add --readonly and --drive-scope (#58) (thanks @jeremys)
Some checks failed
ci / test (push) Has been cancelled
ci / worker (push) Has been cancelled
ci / darwin-cgo-build (push) Has been cancelled
2026-01-10 23:57:15 +01:00
Anton Sotkov
4e92b5972b feat(gmail): allow drafts without a recipient 2026-01-10 13:34:26 +02:00
Peter Steinberger
ecef6a0f10 fix(cli): infer default account 2026-01-10 03:12:21 +01:00
Anton Sotkov
21fbf16390 feat(gmail): add drafts update command 2026-01-09 22:46:04 +01:00
Peter Steinberger
b44d1d5d97 feat(auth): add groups service 2026-01-09 21:05:05 +01:00
Peter Steinberger
18a6e3c97f feat(tracking): per-account setup + track-split 2026-01-08 23:52:57 +01:00
Peter Steinberger
80a784e074 feat(cli): add --output/--output-dir aliases 2026-01-08 12:08:42 +01:00
Peter Steinberger
1f2153ea62 feat(gmail): add labels create command 2026-01-08 08:03:01 +01:00
Peter Steinberger
037c38afa4 docs(tracking): add email tracking docs 2026-01-08 05:26:03 +01:00
Peter Steinberger
024deee55d feat(auth): add services metadata and listing 2026-01-08 01:24:22 +01:00
Peter Steinberger
4580729793 feat(auth): add docs service 2026-01-07 21:55:58 +01:00
Peter Steinberger
b1b9067a23 fix(auth): default --services to user 2026-01-07 21:36:35 +01:00
Peter Steinberger
39921a3831 Calendar: add --add-attendee flag
Co-authored-by: salmonumbrella <182032677+salmonumbrella@users.noreply.github.com>
2026-01-07 17:10:58 +01:00
Peter Steinberger
d1c53e9d5c feat(config): add JSON5 config and auth status 2026-01-03 13:20:36 +01:00
Peter Steinberger
19d833fd3e feat: add token validation + keyring backend override 2026-01-02 14:03:06 +01:00
Peter Steinberger
6a17462eab chore: add release verification scripts 2025-12-31 20:15:56 +01:00
Peter Steinberger
4252ad53f4 refactor(cli): migrate to kong 2025-12-31 17:24:31 +01:00
Peter Steinberger
e70b576dc9 fix: refine gmail thread modify command 2025-12-31 13:10:16 +01:00
Peter Steinberger
191feb70b8 docs: make release checklist always full 2025-12-28 18:50:36 +01:00
Peter Steinberger
2d3896eab8 docs(site): link footer author 2025-12-26 22:25:11 +01:00
Peter Steinberger
fa246dac39 docs(site): add gogcli.sh landing page 2025-12-26 21:18:04 +01:00
Peter Steinberger
9c255b4a9a
Create CNAME 2025-12-26 21:10:45 +01:00
Peter Steinberger
f44758d2fc docs(refactor): clean up notes 2025-12-26 20:39:54 +01:00
Peter Steinberger
55107160f1 docs: add refactor notes 2025-12-26 18:32:25 +01:00
Peter Steinberger
61d7fa60e8 docs: update drive parent flags 2025-12-26 10:32:53 +00:00
Peter Steinberger
eca9fa9f90 docs: update output and safety flags 2025-12-26 10:15:20 +00:00
Peter Steinberger
84a4b5ca43 docs: document drive permissions paging 2025-12-26 09:35:05 +00:00
Peter Steinberger
150f4aa411 feat(cli)!: normalize flags and args 2025-12-26 09:21:28 +00:00
Peter Steinberger
20f217f923 fix: add people auth service 2025-12-24 19:22:48 +01:00