Skip to content

Add calendar creation, all-day events, and focused alerts - #71

Merged
robin-liquidium merged 10 commits into
mainfrom
codex/dayline-calendar-alerts
Aug 11, 2026
Merged

robin-liquidium merged 10 commits into
mainfrom
codex/dayline-calendar-alerts

Conversation

@robin-liquidium

@robin-liquidium robin-liquidium commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary\n\n- add native Apple Calendar event creation with the shared graphical date picker\n- add optional all-day calendar rows and correct Today/Tomorrow partitioning\n- add link-only full-screen meeting alerts with safe meeting-link provenance\n- speed up the native UI suite while preserving semantic actions and typed Markdown coverage\n- update privacy and permission copy for Apple Calendar event creation\n\n## Validation\n\n- Swift: 125/125 passed\n- Native UI: 16/16 passed in 282.83 seconds\n- Website production build: passed\n- Release build and notarization pipeline checks: passed\n- Secret scan and whitespace checks: clean\n- Final Codex full-branch review: clean at P0-P2\n\n## Review availability\n\n- CodeRabbit completed earlier passes; its final rerun was unavailable due the free OSS rate limit\n- OpenCode Kimi was unavailable due its billing-cycle usage limit\n- OpenCode Grok was unavailable after repeated provider server errors\n\n## Accepted test tradeoff\n\nUI-test mode disables macOS spellcheck, grammar checking, and automatic correction to avoid nondeterministic correction-panel stalls. Exact typed Markdown and formatting semantics remain covered; production OS text-assistance behavior itself is not exercised end to end.

Summary by CodeRabbit

  • New Features

    • View today’s and tomorrow’s all-day calendar events with expandable sections.
    • Create events directly in Apple Calendar, including all-day events; Google Calendar creation remains available.
    • Recognize meeting links and prioritize them when joining events.
    • Added graphical date pickers for reminders and issues.
    • Added settings for showing all-day events and requiring meeting links for alerts.
  • Bug Fixes

    • Improved all-day date display, event filtering, and calendar URL handling.
  • Documentation

    • Updated calendar descriptions, permissions, and privacy documentation.

@opencode-agent

Copy link
Copy Markdown

APIError: You've reached your usage limit for this billing cycle. Your quota will be refreshed in the next cycle. To continue now, purchase extra usage or upgrade your plan: https://www.kimi.com/code/#pricing

opencode session  |  github run

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 10, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
dayline-website e59bc68 Aug 11 2026, 12:21 AM

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d8cc1e67-f7ea-42bc-a2c3-8fef0c147d6e

📥 Commits

Reviewing files that changed from the base of the PR and between da8296b and e59bc68.

📒 Files selected for processing (5)
  • Sources/Dayline/Models/CalendarEventItem.swift
  • Sources/Dayline/Services/CalendarService.swift
  • Tests/DaylineTests/CalendarEventItemTests.swift
  • Tests/DaylineTests/MeetingAlertTests.swift
  • UITests/DaylineUITests/DaylineUITests.swift
🚧 Files skipped from review as they are similar to previous changes (4)
  • Tests/DaylineTests/MeetingAlertTests.swift
  • Tests/DaylineTests/CalendarEventItemTests.swift
  • Sources/Dayline/Models/CalendarEventItem.swift
  • Sources/Dayline/Services/CalendarService.swift

📝 Walkthrough

Walkthrough

The PR adds all-day calendar event support, meeting-link recognition, Apple Calendar event creation, provider-aware calendar controls, reusable date pickers, UI-test synchronization helpers, and updated permission and privacy documentation.

Changes

Calendar data and agenda pipeline

Layer / File(s) Summary
Event data and calendar loading
Sources/Dayline/Models/CalendarEventItem.swift, Sources/Dayline/Services/*, Tests/DaylineTests/CalendarEventItemTests.swift
Calendar events preserve all-day state, sanitize URLs, recognize meeting links, prefer meeting URLs, and use local day boundaries. Agenda sections separate timed and all-day events.
Agenda and meeting-alert state
Sources/Dayline/Stores/StatusStore.swift, Sources/Dayline/Support/MockData.swift, Tests/DaylineTests/MeetingAlertTests.swift
The store publishes visible all-day events, persists display and meeting-link settings, rebuilds agendas with separate limits, and centralizes meeting-alert eligibility checks.

Apple Calendar creation

Layer / File(s) Summary
Apple Calendar event creation
Sources/Dayline/App/DaylineApp.swift, Sources/Dayline/Models/AppleCalendarSource.swift, Sources/Dayline/Services/AppleCalendarService.swift, Sources/Dayline/Stores/StatusStore.swift, Sources/Dayline/Views/AppleCalendarEventEditorView.swift, Tests/DaylineTests/AppleCalendarEventCreationTests.swift, UITests/DaylineUITests/DaylineUITests.swift
The app presents an Apple Calendar event editor, validates drafts, creates timed or all-day events, and refreshes calendar state after creation.

Calendar presentation and support

Layer / File(s) Summary
Calendar menu and settings presentation
Sources/Dayline/Views/StatusMenuView.swift, Sources/Dayline/Views/MeetingAlertView.swift, Sources/Dayline/Views/PreviewPopovers.swift, Sources/Dayline/Views/Settings/*, Tests/DaylineTests/MockDataTests.swift
The menu bar renders all-day events, labels them correctly, supports Apple and Google creation paths, and exposes all-day and meeting-link settings.
Shared editors, tests, and supporting metadata
Sources/Dayline/Views/GraphicalDatePicker.swift, Sources/Dayline/Views/AppleReminderEditorView.swift, Sources/Dayline/Views/LinearIssueEditorView.swift, Sources/Dayline/Views/NoteEditorView.swift, UITests/DaylineUITests/DaylineUITests.swift, script/*.sh, website/src/routes/privacy.tsx, README.md
A reusable calendar date picker replaces duplicated editor controls. UI-test waits return immediately when conditions already hold. Calendar permission and privacy descriptions reflect event creation and all-day access.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant StatusMenuView
  participant StatusStore
  participant AppleCalendarEventEditorView
  participant AppleCalendarService
  participant EventKit
  User->>StatusMenuView: Select calendar event creation
  StatusMenuView->>StatusStore: requestAppleCalendarEventCreation()
  StatusStore->>AppleCalendarEventEditorView: Open editor window
  User->>AppleCalendarEventEditorView: Enter and submit draft
  AppleCalendarEventEditorView->>StatusStore: createAppleCalendarEvent(draft)
  StatusStore->>AppleCalendarService: createEvent(draft)
  AppleCalendarService->>EventKit: Save event
  EventKit-->>AppleCalendarService: Return save result
  AppleCalendarService-->>StatusStore: Return creation result
  StatusStore-->>StatusMenuView: Refresh calendar agenda
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.54% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: Apple Calendar event creation, all-day events, and focused meeting alerts.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/dayline-calendar-alerts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Sources/Dayline/Stores/StatusStore.swift (1)

4083-4091: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Align the Apple fetch window with the Google fetch window.

Line 4088 starts the EventKit predicate at now. Line 4100 now starts the Google fetch at todayStart. agendaSections keeps every event whose endDate > todayStart, so the two providers no longer contribute the same slice of today.

A timed Apple event that started and ended earlier today is never fetched. The equivalent Google event is fetched and appears in sections.today. The same event synced to both providers also loses its Apple source label after deduplication, because only the Google copy is present.

Start the Apple predicate at todayStart so both providers cover the same window.

🐛 Proposed fix
-        let events = appleCalendarService.events(in: enabledCalendarIDs, from: now, to: dayAfterTomorrow)
+        let events = appleCalendarService.events(in: enabledCalendarIDs, from: todayStart, to: dayAfterTomorrow)

todayStart is already a let captured in this scope, so no other change is required.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Stores/StatusStore.swift` around lines 4083 - 4091, Update
the Apple fetch window in the closure initializing appleFetchTask to pass
todayStart, rather than now, as the start argument to
appleCalendarService.events. Keep the existing enabled-calendar filtering,
cancellation checks, and dayAfterTomorrow end boundary unchanged.
🧹 Nitpick comments (6)
Sources/Dayline/Services/CalendarService.swift (1)

232-243: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Restrict the entry-point fallback to join-capable types.

Line 243 returns the first entry point with any http(s) URL. Google supplies entryPointType values video, phone, sip, and more. A more entry point is an https link to a "more phone numbers" page, not a join link. That URL then becomes meetingURL, so hasMeetingLink reports true and the link-only meeting alert offers a page that cannot join the call.

Consider excluding more from the fallback.

♻️ Suggested change
-    return entries.lazy.compactMap { CalendarEventItem.safeWebURL($0.url) }.first
+    return entries.lazy
+      .filter { $0.entryPointType != "more" }
+      .compactMap { CalendarEventItem.safeWebURL($0.url) }
+      .first
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Services/CalendarService.swift` around lines 232 - 243,
Restrict the fallback in conferenceURL to join-capable entry points by excluding
entries whose entryPointType is "more" before selecting a safe URL. Preserve the
existing preference for hangoutLink and video entry points, and keep the
fallback limited to valid HTTP(S) URLs.
Sources/Dayline/Stores/StatusStore.swift (2)

2022-2057: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Share the draft normalization between the mock path and the live path.

This mock branch reimplements the validation and all-day normalization that AppleCalendarService.createEvent performs in Sources/Dayline/Services/AppleCalendarService.swift at lines 46-70. The two copies can drift.

The copies already differ in error precedence. The live path throws missingTitle before it checks the calendar. This mock path checks the calendar first and the title last. A draft with an empty title and an unwritable calendar therefore reports a different error in mock mode than in production, which weakens the mock as a test surrogate for Tests/DaylineTests/AppleCalendarEventCreationTests.swift.

Consider extracting one static helper that validates the title and returns the normalized start and end dates, then calling it from both paths.

♻️ Sketch of the shared helper
// Sources/Dayline/Services/AppleCalendarService.swift
extension AppleCalendarService {
  /// Validates a draft and returns its trimmed title with normalized event bounds.
  static func normalizedDraft(
    _ draft: AppleCalendarEventCreateDraft
  ) throws -> (title: String, startDate: Date, endDate: Date) {
    let title = draft.title.trimmingCharacters(in: .whitespacesAndNewlines)
    guard !title.isEmpty else { throw AppleCalendarServiceError.missingTitle }
    guard draft.isAllDay else {
      guard draft.endDate > draft.startDate else { throw AppleCalendarServiceError.invalidDateRange }
      return (title, draft.startDate, draft.endDate)
    }
    let startDay = Calendar.current.startOfDay(for: draft.startDate)
    let selectedEndDay = Calendar.current.startOfDay(for: draft.endDate)
    guard selectedEndDay >= startDay else { throw AppleCalendarServiceError.invalidDateRange }
    let endDay = Calendar.current.date(byAdding: .day, value: 1, to: selectedEndDay)
      ?? selectedEndDay.addingTimeInterval(24 * 60 * 60)
    return (title, startDay, endDay)
  }
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Stores/StatusStore.swift` around lines 2022 - 2057, Extract a
shared static draft-normalization helper on AppleCalendarService that validates
the trimmed title and date range, returning the normalized title, startDate, and
endDate. Call it from both AppleCalendarService.createEvent and
StatusStore.createAppleCalendarEvent before mock-specific calendar validation,
preserving missingTitle-first error precedence and removing the duplicated mock
normalization logic.

4054-4061: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Extract the shared day-boundary computation.

Lines 4054-4061 and lines 4188-4195 compute todayStart, tomorrowStart, and dayAfterTomorrow with identical code and identical fallbacks. Lines 4158-4166 and lines 4196-4205 also repeat the same four limit arguments.

Consider one private helper that returns the three boundaries, and one that returns the capped sections for a given event pool. This keeps the two agenda paths from drifting when a boundary rule changes.

Also applies to: 4143-4143, 4154-4166, 4176-4177, 4188-4209, 4297-4298

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Stores/StatusStore.swift` around lines 4054 - 4061, Extract
the duplicated day-boundary calculation used by the two agenda paths into a
private helper returning todayStart, tomorrowStart, and dayAfterTomorrow,
preserving the existing calendar fallbacks. Also extract the repeated four limit
arguments around the agenda section-building logic into a helper that accepts
the event pool and returns the capped sections, then update both paths to use
these helpers.
Sources/Dayline/Views/StatusMenuView.swift (1)

1562-1580: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Explain the disabled state of the single-provider control.

Line 1572 disables the button when Apple Calendar is connected but no writable calendar exists. Line 1573 still shows "New Apple Calendar event". The user sees a dead control with no reason.

Consider a help string that names the cause when the control is disabled.

♻️ Suggested change
-      .help(store.appleCalendarConnected ? "New Apple Calendar event" : "Open Google Calendar")
+      .help(helpText)
/// Explains the control, including why Apple event creation is unavailable.
private var helpText: String {
  guard store.appleCalendarConnected else { return "Open Google Calendar" }
  return store.canCreateAppleCalendarEvent
    ? "New Apple Calendar event"
    : "Enable a writable Apple calendar in Settings to create events"
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Views/StatusMenuView.swift` around lines 1562 - 1580, Update
the help text for the calendar creation Button to explain the disabled Apple
Calendar state: retain “Open Google Calendar” when disconnected, use “New Apple
Calendar event” when creation is available, and provide a Settings-oriented
writable-calendar message when store.canCreateAppleCalendarEvent is false. Apply
this computed text to the existing help modifier.
Tests/DaylineTests/MeetingAlertTests.swift (1)

203-208: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Report the failing URL in the recognition assertions.

allSatisfy collapses 22 positive cases and 40 negative cases into two boolean results. When a case regresses, the failure names only the array. Diagnosis then requires manual bisection.

Iterate instead, so the report contains the offending URL.

♻️ Suggested change
-    `#expect`(validURLs.allSatisfy {
-      CalendarEventItem.recognizedMeetingURL(URL(string: $0)) != nil
-    })
-    `#expect`(nonMeetingURLs.allSatisfy {
-      CalendarEventItem.recognizedMeetingURL(URL(string: $0)) == nil
-    })
+    for candidate in validURLs {
+      `#expect`(CalendarEventItem.recognizedMeetingURL(URL(string: candidate)) != nil, "\(candidate)")
+    }
+    for candidate in nonMeetingURLs {
+      `#expect`(CalendarEventItem.recognizedMeetingURL(URL(string: candidate)) == nil, "\(candidate)")
+    }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Tests/DaylineTests/MeetingAlertTests.swift` around lines 203 - 208, Replace
the allSatisfy-based assertions in the meeting URL recognition tests with
per-URL iterations, asserting each positive URL is recognized and each negative
URL is rejected so failures identify the offending URL.
Sources/Dayline/Models/CalendarEventItem.swift (1)

138-148: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Tighten the generic Webex path check.

hasMeetingPath accepts any path that contains a meet or join component anywhere. On any *.webex.com host, marketing paths such as /pricing/join-a-meeting or /products/meet then resolve to a meeting link. The other providers in this function require a positional match, so this branch is the loosest one.

Consider requiring the component position, as the sibling branches do.

♻️ Suggested tightening
-      let hasMeetingPath = path.contains("meet") || path.contains("join")
+      let hasMeetingPath = path.count >= 2
+        && ["meet", "join"].contains(path[0])
+        && !path[1].isEmpty

Note: this changes behavior for https://company.webex.com/company/j.php?MTID=… only through hasLegacyJoin, which still applies. Verify the existing positive fixtures in Tests/DaylineTests/MeetingAlertTests.swift still pass, in particular https://company.webex.com/meet/alex.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Dayline/Models/CalendarEventItem.swift` around lines 138 - 148, In
the Webex host branch of the calendar-event URL logic, tighten hasMeetingPath so
it matches meet or join only in the expected positional path component rather
than anywhere in path. Preserve hasGuestJoinPath and hasLegacyJoin behavior,
including legacy j.php URLs with a valid MTID, and keep /meet/alex recognized.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@Sources/Dayline/Stores/StatusStore.swift`:
- Around line 4083-4091: Update the Apple fetch window in the closure
initializing appleFetchTask to pass todayStart, rather than now, as the start
argument to appleCalendarService.events. Keep the existing enabled-calendar
filtering, cancellation checks, and dayAfterTomorrow end boundary unchanged.

---

Nitpick comments:
In `@Sources/Dayline/Models/CalendarEventItem.swift`:
- Around line 138-148: In the Webex host branch of the calendar-event URL logic,
tighten hasMeetingPath so it matches meet or join only in the expected
positional path component rather than anywhere in path. Preserve
hasGuestJoinPath and hasLegacyJoin behavior, including legacy j.php URLs with a
valid MTID, and keep /meet/alex recognized.

In `@Sources/Dayline/Services/CalendarService.swift`:
- Around line 232-243: Restrict the fallback in conferenceURL to join-capable
entry points by excluding entries whose entryPointType is "more" before
selecting a safe URL. Preserve the existing preference for hangoutLink and video
entry points, and keep the fallback limited to valid HTTP(S) URLs.

In `@Sources/Dayline/Stores/StatusStore.swift`:
- Around line 2022-2057: Extract a shared static draft-normalization helper on
AppleCalendarService that validates the trimmed title and date range, returning
the normalized title, startDate, and endDate. Call it from both
AppleCalendarService.createEvent and StatusStore.createAppleCalendarEvent before
mock-specific calendar validation, preserving missingTitle-first error
precedence and removing the duplicated mock normalization logic.
- Around line 4054-4061: Extract the duplicated day-boundary calculation used by
the two agenda paths into a private helper returning todayStart, tomorrowStart,
and dayAfterTomorrow, preserving the existing calendar fallbacks. Also extract
the repeated four limit arguments around the agenda section-building logic into
a helper that accepts the event pool and returns the capped sections, then
update both paths to use these helpers.

In `@Sources/Dayline/Views/StatusMenuView.swift`:
- Around line 1562-1580: Update the help text for the calendar creation Button
to explain the disabled Apple Calendar state: retain “Open Google Calendar” when
disconnected, use “New Apple Calendar event” when creation is available, and
provide a Settings-oriented writable-calendar message when
store.canCreateAppleCalendarEvent is false. Apply this computed text to the
existing help modifier.

In `@Tests/DaylineTests/MeetingAlertTests.swift`:
- Around line 203-208: Replace the allSatisfy-based assertions in the meeting
URL recognition tests with per-URL iterations, asserting each positive URL is
recognized and each negative URL is rejected so failures identify the offending
URL.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f052de82-cd11-4220-896e-8048d4c14248

📥 Commits

Reviewing files that changed from the base of the PR and between d6c204f and da8296b.

📒 Files selected for processing (29)
  • README.md
  • Sources/Dayline/App/DaylineApp.swift
  • Sources/Dayline/Models/AppleCalendarSource.swift
  • Sources/Dayline/Models/CalendarEventItem.swift
  • Sources/Dayline/Models/MenuControlID.swift
  • Sources/Dayline/Services/AppleCalendarService.swift
  • Sources/Dayline/Services/CalendarService.swift
  • Sources/Dayline/Stores/StatusStore.swift
  • Sources/Dayline/Support/AppleCalendarEventEditorWindowPresenter.swift
  • Sources/Dayline/Support/MockData.swift
  • Sources/Dayline/Views/AppleCalendarEventEditorView.swift
  • Sources/Dayline/Views/AppleReminderEditorView.swift
  • Sources/Dayline/Views/GraphicalDatePicker.swift
  • Sources/Dayline/Views/LinearIssueEditorView.swift
  • Sources/Dayline/Views/MeetingAlertView.swift
  • Sources/Dayline/Views/NoteEditorView.swift
  • Sources/Dayline/Views/PreviewPopovers.swift
  • Sources/Dayline/Views/Settings/CalendarSettingsTab.swift
  • Sources/Dayline/Views/Settings/SettingsTab.swift
  • Sources/Dayline/Views/StatusMenuView.swift
  • Tests/DaylineTests/AppleCalendarEventCreationTests.swift
  • Tests/DaylineTests/CalendarEventItemTests.swift
  • Tests/DaylineTests/MeetingAlertTests.swift
  • Tests/DaylineTests/MockDataTests.swift
  • UITests/DaylineUITests/DaylineUITests.swift
  • script/build_and_run.sh
  • script/build_mock_and_run.sh
  • script/package_release.sh
  • website/src/routes/privacy.tsx

@opencode-agent

Copy link
Copy Markdown

APIError: You've reached your usage limit for this billing cycle. Your quota will be refreshed in the next cycle. To continue now, purchase extra usage or upgrade your plan: https://www.kimi.com/code/#pricing

opencode session  |  github run

@opencode-agent

Copy link
Copy Markdown

APIError: You've reached your usage limit for this billing cycle. Your quota will be refreshed in the next cycle. To continue now, purchase extra usage or upgrade your plan: https://www.kimi.com/code/#pricing

opencode session  |  github run

@opencode-agent

Copy link
Copy Markdown

APIError: You've reached your usage limit for this billing cycle. Your quota will be refreshed in the next cycle. To continue now, purchase extra usage or upgrade your plan: https://www.kimi.com/code/#pricing

opencode session  |  github run

@opencode-agent

Copy link
Copy Markdown

APIError: You've reached your usage limit for this billing cycle. Your quota will be refreshed in the next cycle. To continue now, purchase extra usage or upgrade your plan: https://www.kimi.com/code/#pricing

opencode session  |  github run

@robin-liquidium
robin-liquidium merged commit 0f9d0c7 into main Aug 11, 2026
12 of 15 checks passed
@robin-liquidium
robin-liquidium deleted the codex/dayline-calendar-alerts branch August 11, 2026 00:45
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.

1 participant