Skip to content
Open
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d6c1048
Add hey event list command
guilhermeyo Apr 15, 2026
910752c
Add hey event create command
guilhermeyo Apr 15, 2026
c4f646a
Add hey event edit command
guilhermeyo Apr 15, 2026
019882d
Add hey event delete command
guilhermeyo Apr 15, 2026
4c81bb7
Document hey event commands
guilhermeyo Apr 15, 2026
1b6e392
Pass date range when listing events for a specific calendar
guilhermeyo Apr 15, 2026
fc7c795
Accept calendar name or ID on hey event list/create
guilhermeyo Apr 15, 2026
575f752
Show available calendars on 404 when using default
guilhermeyo Apr 15, 2026
ab1700d
Restore --ids-only pipe hint in event agent_notes
guilhermeyo Apr 15, 2026
88d383c
Simplify event command and tests
guilhermeyo Apr 15, 2026
4163037
Reject --timezone combined with --all-day on event create and edit
guilhermeyo Apr 15, 2026
7496b62
Require at least one editable flag on event edit
guilhermeyo Apr 15, 2026
174ab85
Error when local timezone can't be determined
guilhermeyo Apr 15, 2026
3b8c8d6
Address review feedback on docs and test coverage
guilhermeyo Apr 15, 2026
cc90f11
Reject --start/--end combined with --all-day on event create and edit
guilhermeyo Apr 15, 2026
40f7e53
Resolve IANA timezone via $TZ and /etc/localtime fallbacks
guilhermeyo Apr 15, 2026
92338f8
Assert no HTTP request was made in TestEventEditRequiresAtLeastOneFlag
guilhermeyo Apr 15, 2026
e1b4d8b
Harden reminder parsing and timezone detection
guilhermeyo Apr 15, 2026
0f9bfeb
Trim string inputs and validate --timezone before API calls
guilhermeyo Apr 15, 2026
8e48864
Update internal/cmd/event.go
guilhermeyo Apr 15, 2026
46aa1c7
Update internal/cmd/event.go
guilhermeyo Apr 15, 2026
4edbf44
Fix compile error from accepted suggestion
guilhermeyo Apr 15, 2026
af05038
Pin hey-sdk to the CalendarEvents merge until v0.4.0 is cut
guilhermeyo Apr 15, 2026
9c0d70e
gofmt TestParseReminderDurationBoundaries map literal
guilhermeyo Apr 15, 2026
af8a26d
Fix data race in TestEventCreateRequiresTimezoneWhenLocalUnavailable
guilhermeyo Apr 15, 2026
460a598
Reject non-positive calendar IDs and fix recordings path in docs
guilhermeyo Apr 15, 2026
6f75b0b
Validate whitespace calendar, empty edit title, and non-positive even…
guilhermeyo Apr 15, 2026
82cfd59
Reject --timezone "Local" in validateTimezone
guilhermeyo Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .surface
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,29 @@ hey doctor
hey drafts
hey drafts --all
hey drafts --limit
hey event
hey event create
hey event create --all-day
hey event create --calendar
hey event create --date
hey event create --end
hey event create --reminder
hey event create --start
hey event create --timezone
hey event create --title
hey event delete
hey event edit
hey event edit --all-day
hey event edit --date
hey event edit --end
hey event edit --reminder
hey event edit --start
hey event edit --timezone
hey event edit --title
hey event list
hey event list --all
hey event list --calendar
hey event list --limit
hey habit
hey habit complete
hey habit complete --date
Expand Down
5 changes: 4 additions & 1 deletion API-COVERAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The legacy `internal/client/` is used only for HTML-scraping gap operations mark
| `/laterbox.json` | GET | SDK `Boxes().GetLaterbox` | `hey box laterbox` | covered |
| `/bubblebox.json` | GET | SDK `Boxes().GetBubblebox` | `hey box bubblebox` | covered |
| `/calendars.json` | GET | SDK `Calendars().List` | `hey calendars` | covered |
| `/calendars/{id}/recordings.json` | GET | SDK `Calendars().GetRecordings` | `hey recordings <calendar-id>`, `hey todo list`, `hey timetrack list`, `hey journal list` | covered |
| `/calendars/{id}/recordings.json` | GET | SDK `Calendars().GetRecordings` | `hey recordings <calendar-id>`, `hey event list`, `hey todo list`, `hey timetrack list`, `hey journal list` | covered |
Comment thread
guilhermeyo marked this conversation as resolved.
Outdated
| `/topics/{id}/entries` | GET (HTML) | Legacy `GetTopicEntries` | `hey threads <id>` | gap: SDK Entry lacks body |
| `/entries/drafts.json` | GET | SDK `Entries().ListDrafts` | `hey drafts` | covered |
| `/topics/messages` | POST | SDK `Messages().Create` | `hey compose` | covered |
Expand All @@ -32,3 +32,6 @@ The legacy `internal/client/` is used only for HTML-scraping gap operations mark
| `/calendar/todos/{id}/completions.json` | POST | SDK `CalendarTodos().Complete` | `hey todo complete <id>` | covered |
| `/calendar/todos/{id}/completions.json` | DELETE | SDK `CalendarTodos().Uncomplete` | `hey todo uncomplete <id>` | covered |
| `/calendar/todos/{id}.json` | DELETE | SDK `CalendarTodos().Delete` | `hey todo delete <id>` | covered |
| `/calendar/events` | POST | SDK `CalendarEvents().Create` | `hey event create` | covered |
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
| `/calendar/events/{id}` | PATCH | SDK `CalendarEvents().Update` | `hey event edit <id>` | covered |
| `/calendar/events/{id}` | DELETE | SDK `CalendarEvents().Delete` | `hey event delete <id>` | covered |
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,20 @@ hey calendars # list calendars
hey recordings 1 --starts-on 2026-01-01 --ends-on 2026-01-31 # list events in a calendar
```

### Events

```bash
hey event list # list events (personal calendar by default)
hey event list --calendar <id-or-name> --limit 10 # name matches owned calendars case-insensitively
hey event create --title "Team sync" --date 2026-06-15 --start 09:00 --end 10:00
hey event create --title "Holiday" --date 2026-06-15 --all-day
hey event create --title "Review" --date 2026-06-15 --start 14:00 --end 15:00 --reminder 30m --reminder 1h
hey event edit 123 --title "Updated standup"
hey event delete 123
```

Reminder durations accept a non-negative number followed by `m`, `h`, `d`, or `w` (for example `30m`, `1h`, `2d`, `1w`).

### Todos

```bash
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
charm.land/bubbles/v2 v2.1.0
charm.land/bubbletea/v2 v2.0.2
charm.land/lipgloss/v2 v2.0.2
github.com/basecamp/hey-sdk/go v0.3.0
github.com/basecamp/hey-sdk/go v0.3.1-0.20260407122900-212ceb7d1fe6
github.com/mattn/go-runewidth v0.0.22
github.com/spf13/cobra v1.10.2
github.com/spf13/pflag v1.0.10
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7D
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
github.com/basecamp/hey-sdk/go v0.3.0 h1:NnXFYTYS5t5RBNJG/q0r5M8P3Gz4FQOBY+y59krbfyU=
github.com/basecamp/hey-sdk/go v0.3.0/go.mod h1:Mo8DxZT7gmWHePXVDA1Cgy1xRMFDTpeyuKlprEE+srE=
github.com/basecamp/hey-sdk/go v0.3.1-0.20260407122900-212ceb7d1fe6 h1:DjnsoC+k2bsKqzSZ7svfDBc3oqIARArGnuvW/oXfmXQ=
github.com/basecamp/hey-sdk/go v0.3.1-0.20260407122900-212ceb7d1fe6/go.mod h1:Mo8DxZT7gmWHePXVDA1Cgy1xRMFDTpeyuKlprEE+srE=
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
github.com/charmbracelet/colorprofile v0.4.2 h1:BdSNuMjRbotnxHSfxy+PCSa4xAmz7szw70ktAtWRYrY=
github.com/charmbracelet/colorprofile v0.4.2/go.mod h1:0rTi81QpwDElInthtrQ6Ni7cG0sDtwAd4C4le060fT8=
Expand Down
Loading
Loading