Skip to content

Release v1.33.0#95

Merged
atomantic merged 17 commits intoreleasefrom
main
Mar 14, 2026
Merged

Release v1.33.0#95
atomantic merged 17 commits intoreleasefrom
main

Conversation

@atomantic
Copy link
Owner

Release v1.33.0

Added

  • Google Calendar Integration — full M48 implementation with subcalendar management (enable/disable/dormant), MCP push sync, goal-calendar linking with match patterns, and daily review UI for confirming events with auto-progress logging
  • Two sync methods for Google Calendar: Claude MCP (zero-config fallback) and direct Google API via OAuth2 (faster, no LLM needed), selectable per account
  • Google OAuth2 flow — credentials management, token storage with auto-refresh, OAuth consent redirect handling
  • Auto-configure Google OAuth via CDP browser — guided setup opens Google Cloud Console, user logs in + selects project, then one-click "Continue" automates the entire setup
  • Calendar Review tab (/calendar/review) — daily review of events with confirm/skip, auto-logging progress to linked goals
  • Day view 15-minute blocks with side-by-side overlap layout for concurrent events
  • Goal-calendar linking — link subcalendars to goals with match patterns
  • Subcalendar discovery via MCP or direct Google API

Changed

  • New Google Calendar accounts default to google-api sync when OAuth is configured
  • Calendar label simplified to "Google Calendar"

Fixed

  • Day view event overlap rendering
  • State mutation in ReviewTab sort
  • Centralized OAuth redirect URI
  • Various review fixes for jobs, tasks, and drills

Refactored

  • Shared helpers: loadCache/saveCache, mergeDiscoveredSubcalendars, getSyncDateRange
  • Parallelized daily review reads and API calendar fetches
  • Memoized layoutEvents, removed redundant state

Goals can now have progress entries with date, note, and optional duration.
Enables tracking writing sessions, workout logs, and any recurring goal activity.
…l linking, and daily review

- Google Calendar account type with subcalendar management (enable/disable/dormant)
- Two sync methods: Claude MCP (zero-config) and direct Google API (OAuth2, faster)
- Push sync endpoint for MCP-fetched events with dedup by externalId
- Goal-calendar linking with match patterns for automatic event matching
- Daily review UI for confirming/skipping events with auto-progress logging
- Google OAuth2 flow with credentials storage and token auto-refresh
- Subcalendar discovery via MCP or direct API
- Day view upgraded to 15-minute block granularity
- Review tab added to Calendar nav with date navigation and summary stats
- "Setup with PortOS Browser" button opens Google Cloud Console in CDP browser
- Guided 5-step wizard with navigation shortcuts (Open Calendar API, Open Credentials, Create OAuth Client)
- "Capture Credentials" button scrapes client ID + secret from the OAuth creation dialog via CDP
- Auto-saves credentials and initiates OAuth consent flow
- Manual paste fallback always available
- Sync method config moved above calendar selection for better flow
…-click Continue

Replaces multi-step guided wizard with streamlined 2-step flow:
1. "Setup with PortOS Browser" opens Google Cloud Console
2. User logs in and selects project, clicks "Continue"
3. CDP automation handles: enable Calendar API, configure OAuth consent
   screen, create Web app OAuth credentials with redirect URI, capture
   client ID + secret from creation dialog
…wright walkthrough

Rewrote CDP automation based on live Playwright MCP session against Google
Cloud Console's new Auth Platform UI. Script now handles:
- Enable Calendar API (button: "enable this API")
- Auth Platform 4-step wizard (App Info → Audience → Contact → Finish)
- Add test user via Audience page dialog
- Create Web OAuth client with redirect URI
- Extract client secret from "Information and summary" panel
  (secret hidden in button aria-label: "Copy to clipboard: GOCSPX-...")
Simplify:
- Extract shared loadCache/saveCache from calendarSync.js, reuse in calendarGoogleSync.js
- Extract mergeDiscoveredSubcalendars helper in calendarAccounts.js
- Extract getSyncDateRange helper, reuse across sync services
- Parallelize getDailyReview reads with Promise.all
- Parallelize Google API calendar fetches with Promise.all
- Memoize layoutEvents in DayView with useMemo
- Remove redundant autoConfigBusy state from ConfigTab

Fixes:
- Label changed from "Google Calendar (MCP Push)" to "Google Calendar"
- New accounts default to google-api sync if OAuth is configured
…h URI

- Copy array before .sort() in ReviewTab to avoid mutating state
- Replace dynamic imports of updateSubcalendars with static imports
- Centralize OAuth redirect URI as OAUTH_REDIRECT_URI constant in googleAuth.js
  deriving port from process.env.PORT
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Release v1.33.0 introduces a full Google Calendar integration in PortOS (server + client), including subcalendar discovery/management, two sync strategies (Claude MCP push vs direct Google API OAuth2), daily review workflows, and goal linking/progress logging.

Changes:

  • Added Google Calendar accounts with MCP push sync + direct Google API OAuth2 sync, including auto-configure OAuth via the PortOS CDP browser.
  • Added Daily Review tab and endpoints for confirming events and auto-logging goal progress.
  • Added goal progress logging + goal↔calendar linking (with match patterns) and improved Day view layout (15-min grid + overlap columns).

Reviewed changes

Copilot reviewed 23 out of 24 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
server/services/identity.js Adds goal progress log CRUD and goal↔calendar linking + event matching helper.
server/services/googleOAuthAutoConfig.js Implements CDP-driven automation of Google Cloud OAuth setup and credential capture.
server/services/googleAuth.js Adds Google OAuth credential/token storage, auth URL generation, callback handling, and token refresh.
server/services/dailyReview.js Adds daily review storage + event confirmation + auto progress logging aggregation.
server/services/calendarSync.js Exposes cache helpers and treats google-calendar sync as push-only no-op.
server/services/calendarGoogleSync.js Adds MCP sync + calendar discovery + push-sync ingestion into local cache.
server/services/calendarGoogleApiSync.js Adds direct Google Calendar API sync + discovery using OAuth tokens.
server/services/calendarAccounts.js Adds google-calendar account defaults, syncMethod, subcalendar update + merge helper.
server/routes/identity.js Adds REST endpoints for goal progress log and goal↔calendar link management.
server/routes/calendar.js Adds routes for Google OAuth, Google sync/discovery, subcalendar CRUD, and daily review endpoints.
server/lib/identityValidation.js Adds zod schemas for progress entries and calendar linking.
package.json Bumps version to 1.33.0 and adds googleapis dependency.
package-lock.json Updates lockfile for v1.33.0 and adds googleapis dependency tree.
client/src/services/api.js Adds client API wrappers for new calendar, OAuth, daily review, and goal progress/link endpoints.
client/src/pages/Calendar.jsx Adds Review tab route rendering.
client/src/components/goals/GoalDetailPanel.jsx Adds UI for progress logging and calendar linking per-goal.
client/src/components/calendar/SyncTab.jsx Adds Google sync button and MCP progress display.
client/src/components/calendar/ReviewTab.jsx Adds daily review UI with confirm/skip and optional goal logging edits.
client/src/components/calendar/DayView.jsx Upgrades day grid to 15-minute increments and adds side-by-side overlap layout.
client/src/components/calendar/ConfigTab.jsx Adds Google calendar account configuration: sync method, subcalendar discovery/toggles, OAuth setup/auto-config.
client/src/components/Layout.jsx Adds Calendar Review nav item.
PLAN.md Marks M48 P1–P5 done and documents remaining consolidation work.
.changelog/v1.33.0.md Adds release notes for v1.33.0.
.changelog/NEXT.md Removes NEXT (rolled into release).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

- Use full ISO strings for timeMin/timeMax (include timezone Z)
- Use safeJSONParse for all JSON.parse calls in MCP sync/discovery
- Remove unused uuidv4 import from dailyReview
- Scope SyncTab progress per accountId
- Fix auto-configure/run error checking (check result.error)
- Remove dead navigateToStep route
- Use JSON.stringify in fillByName to prevent script injection
- Add googleapis to server/package.json
- Show email field for Google Calendar accounts in ConfigTab
- Add tests for addProgressEntry, deleteProgressEntry, linkCalendarToGoal, unlinkCalendarFromGoal
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Release v1.33.0 adds a full Google Calendar integration path (Claude MCP push sync and direct Google API via OAuth2), plus goal linking and a daily review workflow that can auto-log progress against goals.

Changes:

  • Introduces Google Calendar accounts with subcalendar discovery/enablement/dormancy, and two sync methods (Claude MCP + direct Google API OAuth2).
  • Adds daily calendar review endpoints/UI with confirm/skip and optional auto progress logging to linked goals.
  • Updates day/week calendar UIs to 15-minute grids with side-by-side overlap layout; bumps versions and updates changelogs/plans.

Reviewed changes

Copilot reviewed 26 out of 27 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
server/services/identity.js Adds goal progress log CRUD and goal↔calendar link management + event filtering by linked calendars.
server/services/googleOAuthAutoConfig.js New CDP/Playwright-style automation to configure Google OAuth in GCP console and capture credentials.
server/services/googleAuth.js New OAuth2 credential/token storage + auth URL/callback handling + auto-refresh persistence.
server/services/dailyReview.js New daily review persistence + event enrichment + confirmation + auto progress logging.
server/services/calendarSync.js Exports cache helpers, filters events by enabled/dormant subcalendars, adds purge utility, and no-ops sync for Google accounts.
server/services/calendarGoogleSync.js New Google push-sync normalization, MCP sync/discovery via Claude CLI, and cache reconciliation.
server/services/calendarGoogleApiSync.js New direct Google Calendar API sync + calendar discovery using stored OAuth tokens.
server/services/calendarAccounts.js Initializes Google subcalendars + default sync method, supports syncMethod updates, and adds subcalendar update/merge helpers.
server/routes/identity.js Adds goal progress endpoints and goal↔calendar linking endpoints.
server/routes/calendar.js Adds Google account type, subcalendar routes, push/MCP/API sync routes, OAuth routes, and daily review routes.
server/package.json Adds googleapis dependency for server-side OAuth/API access.
server/lib/identityValidation.js Adds schemas for progress entries and goal↔calendar linking payloads.
package.json Bumps root version to 1.33.0 and adds a root-level googleapis dependency.
package-lock.json Lockfile updates for version bump and new dependency tree.
client/src/services/api.js Adds client API helpers for progress log, subcalendars, Google auth/config, sync methods, review endpoints, and goal↔calendar linking.
client/src/pages/Calendar.jsx Adds the “Review” tab and route rendering for calendar review UI.
client/src/components/goals/GoalDetailPanel.jsx Adds progress logging UI and goal↔calendar linking UI in goal detail panel.
client/src/components/calendar/WeekView.jsx Implements 15-minute grid lines and side-by-side overlap layout for timed events.
client/src/components/calendar/SyncTab.jsx Adds Google sync button with method selection (API vs Claude) and MCP progress display via sockets.
client/src/components/calendar/ReviewTab.jsx New daily review UI for confirming/skipping events and optionally logging progress to goals.
client/src/components/calendar/DayView.jsx Implements 15-minute grid and overlap column layout for concurrent events.
client/src/components/calendar/ConfigTab.jsx Adds Google Calendar account config: sync method selection, OAuth setup (manual + automated), and subcalendar discovery/management.
client/src/components/Layout.jsx Adds Calendar “Review” navigation entry.
PLAN.md Marks M48 P1–P5 complete and updates remaining roadmap items.
.changelog/v1.33.0.md Adds release notes for v1.33.0.
.changelog/NEXT.md Removes the “Unreleased Changes” placeholder file for the release.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

…ections

- Compute unreviewed count by filtering events without confirmations
- Memoize allDayEvents/timedEvents in DayView for stable useMemo deps
- Remove unused showOAuthSetup state from ConfigTab
- Remove duplicate googleapis from root package.json
- Escape userEmail with JSON.stringify in all CDP evaluateOnPage calls
@atomantic atomantic requested a review from Copilot March 14, 2026 17:06
@atomantic atomantic merged commit 4ef0f1d into release Mar 14, 2026
6 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Release v1.33.0 focusing on end-to-end Google Calendar support (Claude MCP push sync + direct Google API OAuth), plus a daily review workflow that can auto-log goal progress and improved calendar rendering.

Changes:

  • Added Google Calendar account support with subcalendar discovery/enablement, MCP push sync, and direct Google API sync via OAuth2.
  • Added Daily Review (/calendar/review) and goal progress logging + goal↔calendar linking.
  • Improved day/week views to render 15-minute grid lines and side-by-side overlaps.

Reviewed changes

Copilot reviewed 26 out of 27 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
server/services/identity.test.js Adds integration tests for goal progress logging and calendar linking.
server/services/identity.js Adds goal progress log APIs and goal↔calendar linking/event matching helpers.
server/services/googleOAuthAutoConfig.js Adds CDP-driven automated Google Cloud OAuth setup flow.
server/services/googleAuth.js Adds Google OAuth credential/token storage and authenticated client helper.
server/services/dailyReview.js Implements daily review data model, confirmation persistence, and auto-progress logging.
server/services/calendarSync.js Exports cache helpers, filters disabled/dormant subcal events, adds purge helper, makes google-calendar sync no-op.
server/services/calendarGoogleSync.js Adds Google MCP sync + calendar discovery + event normalization and push-cache logic.
server/services/calendarGoogleApiSync.js Adds direct Google API event sync and calendar discovery.
server/services/calendarAccounts.js Extends accounts for google-calendar (subcalendars, syncMethod) + merge helper.
server/routes/identity.js Adds REST endpoints for progress entries and goal↔calendar linking + goal calendar events query.
server/routes/calendar.js Adds google-calendar account type, subcalendar routes, OAuth endpoints, Google sync/discovery endpoints, and daily review endpoints.
server/package.json Adds googleapis dependency for server-side Google API integration.
package.json Bumps version to 1.33.0.
package-lock.json Updates lockfile for 1.33.0 and adds dependency tree changes.
server/lib/identityValidation.js Adds Zod schemas for progress entries and goal↔calendar linking.
client/src/services/api.js Adds client API helpers for progress logging, subcalendars, google auth/config, sync, review, and goal calendar linking.
client/src/pages/Calendar.jsx Adds Review tab routing/entry.
client/src/components/goals/GoalDetailPanel.jsx Adds progress log UI and goal↔calendar linking UI.
client/src/components/calendar/WeekView.jsx Adds 15-minute grid lines and overlap column layout + memoization.
client/src/components/calendar/SyncTab.jsx Adds Google sync button (API vs MCP) and MCP progress messaging.
client/src/components/calendar/ReviewTab.jsx Adds daily review UI (confirm/skip + optional goal logging).
client/src/components/calendar/DayView.jsx Adds 15-minute grid lines and overlap column layout + memoization.
client/src/components/calendar/ConfigTab.jsx Adds Google account config UX, OAuth setup (manual + CDP auto-config), sync method selection, and subcalendar management UI.
client/src/components/Layout.jsx Adds nav entry for Calendar Review.
PLAN.md Updates roadmap status and details for M48 phases.
.changelog/v1.33.0.md Adds release notes for v1.33.0.
.changelog/NEXT.md Removes NEXT.md (release cutover).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Release v1.33.0 delivers a full Google Calendar integration across the server + client, including sync (Claude MCP + direct Google API OAuth), subcalendar management, goal linking, and a daily review flow that auto-logs goal progress.

Changes:

  • Added Google OAuth credential/token storage plus optional CDP-browser-driven OAuth auto-configuration.
  • Implemented Google Calendar sync/discovery (MCP + Google API), subcalendar enable/disable/dormant filtering, and a daily review endpoint/UI with auto progress logging.
  • Extended Identity goals with progress logs and goal↔calendar linking APIs + UI.

Reviewed changes

Copilot reviewed 26 out of 27 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
server/services/identity.test.js Adds integration tests for goal progress log and calendar linking.
server/services/identity.js Adds progress log + goal-calendar linking helpers; normalizes linkedCalendars.
server/services/googleOAuthAutoConfig.js New CDP-browser automation for Google Cloud OAuth setup and credential capture.
server/services/googleAuth.js New OAuth2 credential/token persistence and authenticated client helper.
server/services/dailyReview.js New daily review service that enriches events, stores confirmations, and auto-logs progress.
server/services/calendarSync.js Exposes cache helpers, filters disabled/dormant subcalendars, adds purge, and makes Google sync “push-only”.
server/services/calendarGoogleSync.js New Google push-sync + MCP sync/discovery implementation.
server/services/calendarGoogleApiSync.js New direct Google Calendar API sync + discovery using OAuth client.
server/services/calendarAccounts.js Adds subcalendar persistence, discovery merge helper, and per-account sync method.
server/routes/identity.js Adds REST endpoints for progress log and goal-calendar linking.
server/routes/calendar.js Adds Google account type, subcalendar routes, OAuth routes, MCP/API sync routes, and daily review routes.
server/package.json Adds googleapis dependency.
client/src/services/api.js Adds client API helpers for new calendar, review, OAuth, and goal progress/linking endpoints.
client/src/pages/Calendar.jsx Adds the new Calendar “Review” tab route.
client/src/components/goals/GoalDetailPanel.jsx Adds UI to log progress entries and link/unlink subcalendars to goals.
client/src/components/calendar/WeekView.jsx Adds 15-min grid and side-by-side overlap layout for timed events.
client/src/components/calendar/DayView.jsx Adds 15-min grid and side-by-side overlap layout for timed events.
client/src/components/calendar/SyncTab.jsx Adds Google-specific sync button + progress messages via socket events.
client/src/components/calendar/ReviewTab.jsx New daily review UI with confirm/skip and optional goal logging metadata.
client/src/components/calendar/ConfigTab.jsx Adds Google sync method selector, OAuth setup (manual + auto-config), and subcalendar management UI.
client/src/components/Layout.jsx Adds Calendar “Review” nav item.
PLAN.md Marks M48 phases complete and updates remaining roadmap items.
.changelog/v1.33.0.md Adds release notes for v1.33.0.
.changelog/NEXT.md Removes unreleased placeholder changelog (release cut).
package.json Bumps repo version to 1.33.0.
package-lock.json Updates lockfile for release + new dependency graph.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +164 to +165
// Google Calendar uses push sync — syncAccount is a no-op
return { newEvents: 0, pruned: 0, total: cache.events.length, status: 'push-only' };
totalEvents: enrichedEvents.length,
confirmed: Object.values(existing.confirmations).filter(c => c.happened).length,
skipped: Object.values(existing.confirmations).filter(c => c.happened === false).length,
unreviewed: enrichedEvents.filter(e => !existing.confirmations[e.id]).length
export async function pushSyncEvents(accountId, calendarId, calendarName, rawEvents, io) {
const account = await getAccount(accountId);
if (!account) throw new Error('Account not found');

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.

2 participants