Commit Graph

431 Commits

Author SHA1 Message Date
Peter Steinberger
7d50b06f92 release: v0.7.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-01-17 21:04:58 +00:00
Peter Steinberger
dd36b889c4 docs: refresh changelog and intro 2026-01-17 20:58:06 +00:00
Peter Steinberger
39ea102ba9 test(live): cover tasks list create 2026-01-17 20:34:55 +00:00
Peter Steinberger
ba3f507ffa test(live): cover more gmail settings 2026-01-17 20:15:52 +00:00
Peter Steinberger
432e4887a6 test(live): expand coverage 2026-01-17 20:07:42 +00:00
Peter Steinberger
cafcf09fca test(live): skip unsupported workspace tests 2026-01-17 19:47:46 +00:00
Peter Steinberger
dd37fc9cff chore(deps): bump undici via pnpm override 2026-01-17 19:34:03 +00:00
Peter Steinberger
9ef5c8d2f8 test(live): tolerate classroom cleanup failures 2026-01-17 19:30:35 +00:00
Peter Steinberger
bd91323552 test(live): expand live test coverage 2026-01-17 19:15:47 +00:00
Peter Steinberger
bf6bf372ab docs(changelog): note recent fixes 2026-01-17 18:37:20 +00:00
Peter Steinberger
8b04ca37f9 test: harden live test coverage 2026-01-17 18:35:27 +00:00
Peter Steinberger
03a3e969cc test: add live test script and wrapper 2026-01-17 18:31:52 +00:00
Peter Steinberger
40089bcbc7 fix(groups): improve cloud identity errors 2026-01-17 18:15:27 +00:00
Peter Steinberger
f30aad0e9d fix(tasks): normalize due dates 2026-01-17 09:24:09 +00:00
Peter Steinberger
554cb0c0cb test(integration): add classroom smoke 2026-01-17 08:22:11 +00:00
Peter Steinberger
75da3a2185 docs(readme): document classroom commands 2026-01-17 08:22:06 +00:00
Peter Steinberger
2aea950719 docs(readme): expand feature coverage 2026-01-17 08:00:43 +00:00
Peter Steinberger
0930c169bb
Merge pull request #75 from salmonumbrella/feat/calendar-propose-time
Add calendar propose-time, tasks repeat, auth alias, and more
2026-01-17 07:50:52 +00:00
Peter Steinberger
d683a48b5f fix: adjust propose-time updates and repeat-until (#75) (thanks @salmonumbrella) 2026-01-17 07:49:52 +00:00
salmonumbrella
d253da53e2 fix(calendar): improve code quality from review
- Patch only attendees array when declining, not full event object
- Add defensive guard in expandRepeatSchedule against infinite loop
- Add JSON output test for propose-time command

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 07:46:21 +00:00
salmonumbrella
2cdeb8bf73 feat(cli): expand calendar event types and tasks 2026-01-17 07:46:21 +00:00
salmonumbrella
511608ecd4 fix(calendar): improve propose-time messaging for CLI agents
- Replace vague "error" framing with "API Limitation" label
- Add explicit "Action:" instruction to open issue tracker and click +1
- Rename JSON fields: limitation→api_limitation, error_message→upvote_action
- Update tests to verify new messaging format

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 07:44:27 +00:00
salmonumbrella
cf61c8db2d fix(calendar): correct propose-time error message 2026-01-17 07:44:27 +00:00
salmonumbrella
940dd0a312 fix(calendar): adjust propose-time error guidance 2026-01-17 07:44:27 +00:00
salmonumbrella
4f2597d644 fix(calendar): add issue tracker messaging for propose-time 2026-01-17 07:44:27 +00:00
salmonumbrella
9796284141 test(calendar): add integration tests for propose-time command 2026-01-17 07:44:27 +00:00
salmonumbrella
4dd579fe22 test(calendar): add URL generation test for propose-time 2026-01-17 07:44:27 +00:00
salmonumbrella
5d560cca74 feat(calendar): register propose-time command
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 07:44:27 +00:00
salmonumbrella
38aca60225 feat(calendar): implement propose-time Run method
Add the core Run method that:
- Fetches event from Google Calendar API
- Generates propose-time browser URL (base64 encoded)
- Optionally declines the event with comment
- Outputs JSON or text format
- Opens browser if --open flag is set

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 07:44:26 +00:00
salmonumbrella
9b1a877978 feat(calendar): add CalendarProposeTimeCmd struct 2026-01-17 07:44:26 +00:00
Peter Steinberger
c28a3600c1 refactor(gmail): share attachment download helpers 2026-01-17 07:07:29 +00:00
Peter Steinberger
0904cdb2c3 refactor(gmail): unify attachment output helpers 2026-01-17 06:34:27 +00:00
Peter Steinberger
59c5f93964 refactor(gmail): centralize attachment output 2026-01-17 06:25:54 +00:00
Peter Steinberger
6c374ea7f1
Merge pull request #83 from jeanregisser/feature/show-attachments-in-get
feat(gmail): show attachment info in get command output
2026-01-17 05:54:18 +00:00
Peter Steinberger
67eb0d9433 fix: expand gmail get attachment output (#83) (thanks @jeanregisser) 2026-01-17 05:53:30 +00:00
Jean Regisser
1cf147b9d3 refactor(gmail): format attachment output consistently with gog codebase
Use tab-separated format like other gog commands:
  attachment\t<filename>\t<size>\t<mimeType>\t<attachmentId>

This matches the pattern used in calendar_print.go (attendee, attachment)
and drive.go for array data.
2026-01-17 05:47:18 +00:00
Jean Regisser
1b9eabd365 fix(gmail): use camelCase for attachment fields in JSON output
Use camelCase field names (filename, size, mimeType, attachmentId)
to be consistent with the rest of the JSON output (messageId, labelIds, etc.)
2026-01-17 05:47:18 +00:00
Jean Regisser
a443d67cc7 test(gmail): add tests for attachment info in get command
Add two test cases:
- TestGmailGetCmd_JSON_Full_WithAttachments: verifies attachments array
  is present in JSON output with correct filename, size, mime type, and ID
- TestGmailGetCmd_Text_Full_WithAttachments: verifies plain text output
  includes attachment info section with all expected fields
2026-01-17 05:47:18 +00:00
Jean Regisser
a541037c9b feat(gmail): show attachment info in get command output
Display attachment filename, size, MIME type, and attachment_id in both
plain text and JSON output for the 'gmail get' command with --format=full.

This makes it easier to identify and download attachments without needing
to manually parse the message payload structure.

Example plain text output:
  attachments:
    CV-Document.pdf (192123 bytes, application/pdf)
      attachment_id	ANGjdJ...

Example JSON output (new field):
  "attachments": [
    {"Filename": "CV-Document.pdf", "Size": 192123, ...}
  ]
2026-01-17 05:47:18 +00:00
Peter Steinberger
44a7d13788 fix(calendar): default events to primary
Co-authored-by: salmonumbrella <182032677+salmonumbrella@users.noreply.github.com>
2026-01-17 05:31:42 +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
c09de66230 refactor(completion): cache model + split helpers 2026-01-17 03:50:40 +00:00
Peter Steinberger
c550930b90
Merge pull request #77 from salmonumbrella/fix/shell-completions-65
fix(completion): enable shell completions in release builds
2026-01-17 03:28:14 +00:00
Peter Steinberger
410ea2f1c5 fix(completion): stop suggestions after -- (#77) (thanks @salmonumbrella) 2026-01-17 03:27:49 +00:00
salmonumbrella
dae8aa4643 fix(completion): enable shell completions in release builds
Implements working shell completions for bash, zsh, fish, and PowerShell.

Changes:
- Add CompletionInternalCmd for kong's __complete helper
- Refactor completion generation to use kong's built-in support
- Extract newParser() for reuse in completion generation
- Add baseDescription() to avoid duplication

The completion command now generates valid scripts that work when
eval'd in the user's shell configuration.

Fixes #65

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 03:24:07 +00:00
Peter Steinberger
22147e144f chore: update worker deps 2026-01-17 03:07:16 +00:00
Peter Steinberger
3d6e0c20be refactor: share classroom topic scan helpers 2026-01-17 02:05:23 +00:00
Peter Steinberger
8c95b56723
Merge pull request #73 from salmonumbrella/salmonumbrella/issue-71-classroom
feat(classroom): add tests, nil guards, and topic filter
2026-01-17 01:57:29 +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
ce44ca2620 fix(classroom): add leave confirmation and upgrade tests
- Add confirmDestructive() to leave command for consistency with other
  destructive operations
- Add SYNC comments to shared CSS in HTML templates
- Add tests for /auth/upgrade endpoint (success, missing email, creds error)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:46:16 +00:00