Conversation
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
…_REDIRECT_URI → OAUTH_REDIRECT_URI)
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
| // 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'); | ||
|
|
Release v1.33.0
Added
/calendar/review) — daily review of events with confirm/skip, auto-logging progress to linked goalsChanged
google-apisync when OAuth is configuredFixed
Refactored