Commit Graph

81 Commits

Author SHA1 Message Date
saravanakumardb1
9e63418837 fix(cleanup): TODO-011 — wire error boundary to telemetry trackEvent 2026-04-13 14:58:59 -07:00
saravanakumardb1
5dafcc2118 fix(cleanup): TODO-006 — centralize backend URL via getBackendBaseURL() from product-config 2026-04-13 14:58:44 -07:00
saravanakumardb1
9897d2cd09 docs(todos): standardize all TODOs with running numbers and delegatable instructions
Replace ad-hoc AGENTIC-N comments with standardized TODO-NNN format across
the entire codebase. Each TODO has:
  - Running number (TODO-001 through TODO-011)
  - Priority level (high/medium/low)
  - Phase reference (0, A.1, A.4, B, cleanup)
  - Clear step-by-step instructions an AI agent can follow

TODO index:
  TODO-001: Kill switch maintenance banner (providers.tsx)
  TODO-002: Feedback button in settings page
  TODO-003: Accessibility focus trap for modals
  TODO-004: Clone routine template instead of mutating in-place
  TODO-005: Wire real LLM enrichment for context messages
  TODO-006: Centralize backend URL configuration
  TODO-007: MCP tool integration tests (common-plat)
  TODO-008: Wire trackEvent() calls into routes + components
  TODO-009: Unit tests for AI context generation
  TODO-010: Import PRODUCT_ID from product-config (5 route files)
  TODO-011: Wire error boundary to telemetry

Added consolidated TODO Index table at top of AGENTIC_AI_ROADMAP.md
for agent scanning. 219 backend tests pass, no code changes.
2026-04-01 01:05:25 -07:00
saravanakumardb1
c80c1e4462 feat(ai-context): Phase A.4 — context-aware AI messages with LLM fallback
Add AI-enriched context message generation:

- backend/src/lib/ai-context.ts: LLM-powered context generator with keyword fallback
  - Calls extraction-service timer-context task when EXTRACTION_SERVICE_URL is set
  - Falls back to keyword rules, then generic message
  - Gated behind isFeatureEnabled('ai_context_messages.enabled')
- backend/src/lib/config.ts: Add EXTRACTION_SERVICE_URL env var
- backend/src/server.ts: POST /api/context-message route
- web/src/lib/context-messages.ts: fetchEnrichedMessage() with graceful degradation
- Updated AGENTIC_AI_ROADMAP.md checkboxes for Phase A.1 + A.2

All 219 backend tests + 394 web tests pass. No breaking changes.
2026-03-31 23:46:00 -07:00
saravanakumardb1
f3e14e28dd feat(ecosystem): Phase 0 — kill-switch, feedback, accessibility, feature flags, telemetry events
Phase 0 of the Agentic AI Roadmap: ecosystem gap fixes.

- Add @bytelyst/kill-switch-client integration (web/src/lib/kill-switch.ts)
- Wire kill switch check into providers.tsx on app init
- Add @bytelyst/feedback-client integration (web/src/lib/feedback.ts)
- Add @bytelyst/accessibility to web dependencies
- Add 7 agentic feature flags to backend (all default false)
- Define 16 telemetry event constants (backend + web)
- Add AGENTIC_AI_ROADMAP.md with full Phase 0-E plan + audit findings

All 182 backend tests pass. All 394 web tests pass.
No breaking changes to existing functionality.
2026-03-31 23:26:37 -07:00
saravanakumardb1
ac6edec73f fix(tokens): replace hardcoded personal category hex with CSS token var 2026-03-29 10:29:14 -07:00
saravanakumardb1
f5dc7332cb fix(tokens): import @bytelyst/design-tokens/css/chronomind — remove hand-written token block 2026-03-29 01:23:57 -07:00
saravanakumardb1
e60efddaab fix(web): remove dead responsive sidebar CSS — ChronoMind uses header layout, no sidebar 2026-03-29 00:06:48 -07:00
saravanakumardb1
72651ceff1 feat(web): add responsive sidebar CSS breakpoints for mobile 2026-03-28 23:30:01 -07:00
saravanakumardb1
947c93d10b feat(web): wire @bytelyst/ui ToastProvider into app providers 2026-03-28 23:25:41 -07:00
saravanakumardb1
075e1850e5 fix(web): add interactive hover/active states for buttons and links 2026-03-28 23:20:44 -07:00
saravanakumardb1
1191d9e00d chore(design-system): add responsive sidebar CSS breakpoints (768px collapse) 2026-03-28 00:51:28 -07:00
saravanakumardb1
c2db021568 fix(web): add skip-to-content link for WCAG keyboard accessibility 2026-03-28 00:47:03 -07:00
saravanakumardb1
2d0a47be92 fix(web): add prefers-reduced-motion media query for accessibility 2026-03-28 00:38:48 -07:00
saravanakumardb1
bc7430a436 chore(design-system): deploy canonical generated Swift theme tokens from @bytelyst/design-tokens 2026-03-28 00:26:05 -07:00
saravanakumardb1
487464bcaf fix(web): add sr-only utility + prefers-color-scheme light mode to globals.css 2026-03-28 00:25:20 -07:00
saravanakumardb1
3cf08d6cad feat(design-system): add loading.tsx route transition page 2026-03-27 16:34:27 -07:00
saravanakumardb1
7cca057831 fix(ci): fix ESLint errors + workflow for Gitea CI
- Move theme detection into useState initializer (fixes set-state-in-effect)
- Downgrade React 19 strict ESLint rules to warnings
- Skip pnpm install in common-plat build step, add HUSKY=0
2026-03-22 21:11:44 -07:00
saravanakumardb1
f6c85ede9e fix: align Fastify to 5.7.4 + add web product-config.ts 2026-03-21 20:31:26 -07:00
saravanakumardb1
a606617c1d feat(web): wire feature flag checks into Dashboard UI
Gate Focus Mode and Routines nav links behind focus_mode_enabled
and routines_enabled flags. Fix inverted routines_disabled check
to use the actual seeded flag key routines_enabled.
2026-03-21 20:30:49 -07:00
saravanakumardb1
09310b7eb8 feat(web): upgrade feature-flag-client to SSE streaming + getValue() 2026-03-21 17:40:43 -07:00
saravanakumardb1
f2450b6e2e refactor(web): migrate telemetry + diagnostics to createWebTelemetry/createWebDiagnostics
- telemetry.ts: 54 → 42 lines via createWebTelemetry() (keeps product-specific trackTimerEvent)
- diagnostics.ts: 53 → 22 lines via createWebDiagnostics()
- 394/394 web tests pass, typecheck clean
2026-03-20 18:54:11 -07:00
saravanakumardb1
c362fa61cf chore: update dependencies 2026-03-19 21:25:38 -07:00
saravanakumardb1
83e54c29be fix(web): append /api to baseUrl for shared clients
getBaseUrl() returns 'http://localhost:4003' without /api suffix.
Shared feature-flag-client and subscription-client expect the API
prefix in the URL. Without this fix, requests hit /flags/poll and
/subscriptions/me instead of /api/flags/poll and /api/subscriptions/me.
2026-03-19 17:08:44 -07:00
saravanakumardb1
6dd31490b2 fix(android): complete ChronoMind Android compile fixes — all tests pass
- Fix SyncRepository.timerToDTO: timer.pomodoro → timer.pomodoroConfig/pomodoroState
- Fix SyncRepository.dtoToEntity: add missing TimerEntity fields (dismissedAt, snoozedUntil,
  snoozeCount, elapsedBeforePause, category), fix non-nullable cascadePreset/cascadeIntervalsJson
- Fix PomodoroDTO field mapping: focusMinutes→workMinutes, shortBreakMinutes→breakMinutes, etc.
- ChronoMind Android now compiles and all tests pass
2026-03-19 17:07:57 -07:00
saravanakumardb1
f49ef788a2 feat(web): migrate billing-client + feature-flags to shared packages
- billing-client.ts: hand-rolled fetch → @bytelyst/subscription-client
  wrapper with backwards-compatible Subscription type adapter
- feature-flags.ts: hand-rolled polling → @bytelyst/feature-flag-client
  (71→42 lines, same public API)
- providers.tsx: remove platform param (now configured at client level)
- ChronoMind-specific usage API stays as local fetch call
2026-03-19 16:52:47 -07:00
saravanakumardb1
909daf8853 fix(diagnostics): getAuthToken throws when no token (type-safe), void .start(), unsyncedCount replaces conflictCount 2026-03-05 11:18:27 -08:00
saravanakumardb1
cb79c9b3ad feat(diagnostics): wire @bytelyst/diagnostics-client init in ChronoMind web 2026-03-05 10:57:58 -08:00
saravanakumardb1
2e2f3c25ca ci: update CI/CD configuration 2026-03-04 20:01:34 -08:00
saravanakumardb1
e0c7f24954 fix(tests): stats.test.ts topCategory test broken on Sundays — wrong Monday calculation 2026-03-01 16:37:07 -08:00
saravanakumardb1
3596a8f350 feat(sync): wire platform sync into timer and routine stores, extend fullSync for routines, add error/not-found pages 2026-02-28 20:24:53 -08:00
saravanakumardb1
fe75bc30de test(web): add 21 tests for exportAll/importRoutines/parseImportData 2026-02-28 19:29:39 -08:00
saravanakumardb1
141fcc2a38 feat(web): wire routine export/import into history page UI 2026-02-28 19:28:37 -08:00
saravanakumardb1
e5d18b1c9c feat(web): gate routines nav behind feature flag 2026-02-28 19:14:01 -08:00
saravanakumardb1
ef27f9dcc6 fix(web): beacon transport, remove dead sync wrappers, add routine export/import 2026-02-28 19:07:14 -08:00
saravanakumardb1
a5aec74e4d feat(web): add billing/subscription client stub for Pro tier
- billing-client.ts: getMySubscription, cancelSubscription, getUsageSummary
- Calls platform-service /subscriptions + /usage endpoints
2026-02-28 14:24:55 -08:00
saravanakumardb1
95f71f4625 feat(web): add feature flag client with platform-service polling 2026-02-28 14:18:06 -08:00
saravanakumardb1
09ded150f4 feat(web): add routine sync operations to platform-sync client
- SyncRoutineDTO + SyncRoutineStepDTO types
- pullRoutineDelta, pushRoutine, updateRemoteRoutine, deleteRemoteRoutine, batchUpsertRoutines
- routineToDTO / dtoToRoutinePatch conversion functions
- OfflineQueueItem now supports entityType (timer|routine)
2026-02-28 13:54:43 -08:00
saravanakumardb1
6e339c6cf0 feat(web): accept snooze suggestion to auto-adjust timer timing
- Accept button on snooze suggestions shifts matching active timers
- Applies suggestedDelayMinutes to targetTime of pattern-matched timers
- Dismiss still available alongside Accept
2026-02-28 13:53:06 -08:00
saravanakumardb1
ad4bc946a8 feat(web): wire TimerChain[] into Zustand store with auto-start
- chains[] persisted alongside timers in localStorage
- addChain/removeChain with linkedTimerId bookkeeping
- removeTimer auto-cleans chain references
- complete() auto-starts next timer in chain via getNextInChain
- 373/373 tests pass
2026-02-28 13:52:20 -08:00
saravanakumardb1
c5c800077c feat(web): add routine preview timeline in editor
- Visual horizontal bar chart showing step durations proportionally
- Color-coded segments with golden-angle hue distribution
- Time markers (start/end) and step legend
- Updates live as steps are added, removed, or reordered
2026-02-28 13:38:48 -08:00
saravanakumardb1
d3b55a2135 feat(web): add custom pre-warning messages per timer
- Add customMessage field to Timer interface + all Create*Params
- Custom message input in CreateTimerModal (optional, non-pomodoro)
- TimerCard shows custom message, falls back to auto-generated prep tips
- 373/373 tests pass, 0 type errors
2026-02-28 13:37:42 -08:00
saravanakumardb1
4e1a22f869 feat(web): add onboarding walkthrough + ambient sounds for focus mode
- OnboardingOverlay: 3-step walkthrough for first-time users (localStorage flag)
- ambient-sounds.ts: Web Audio API noise generators (rain, white noise, brown noise, coffee shop)
- FocusView: ambient sound picker with volume slider, auto-stops on session end
2026-02-28 13:35:06 -08:00
saravanakumardb1
02ac682c52 feat(web): wire Zod form validation into CreateTimerModal + add event schema
- Import and validate against alarmSchema, countdownSchema, pomodoroSchema, eventSchema
- Show inline error messages below form fields (label, time, duration, event date)
- Error border color highlights invalid fields
- Errors clear on tab switch and successful creation
2026-02-28 13:30:56 -08:00
saravanakumardb1
8ef44788e1 refactor(web): deduplicate getBaseUrl() — export from auth-api.ts, import in auth-context.tsx 2026-02-28 12:11:26 -08:00
saravanakumardb1
f80602d2b1 refactor(web): DRY platform-sync.ts — remove 88 lines of hand-rolled auth, delegate to auth-client 2026-02-28 11:49:06 -08:00
saravanakumardb1
8a5a40676a refactor(web): wire @bytelyst/react-auth into auth-context, clean platform-sync auth plumbing 2026-02-28 11:28:14 -08:00
saravanakumardb1
bde5cb792d refactor(web): wire @bytelyst/auth-client + telemetry-client into ChronoMind
- auth-api.ts: lazy-init shared auth client singleton
- platform-sync.ts: delegate auth ops to @bytelyst/auth-client
- telemetry.ts: delegate to @bytelyst/telemetry-client
- All 373 tests pass
2026-02-28 04:50:00 -08:00
saravanakumardb1
e3add90f87 feat(auth): add forgot password, reset password, change password, delete account, email verify, token refresh
Web:
- platform-sync.ts: Added forgotPassword, resetPassword, changePassword, verifyEmail, resendVerification, deleteAccount API functions
- auth-context.tsx: Added forgotPassword, resetPassword, changePassword, deleteAccount actions + successMessage state + 45min auto-refresh timer
- settings/page.tsx: Added forgot password link, change password form, delete account form with confirmation
- reset-password/page.tsx: New page for password reset via email token
- verify-email/page.tsx: New page for email verification via token

iOS:
- AuthService.swift: Added forgotPassword, changePassword, deleteAccount methods
- SettingsView.swift: Added change password, delete account, forgot password UI sections

Android:
- AuthService.kt: Added forgotPassword, changePassword, deleteAccount methods
2026-02-28 04:08:58 -08:00
saravanakumardb1
5e8cbbf556 feat(auth): implement refresh token flow with 401 auto-retry and dedup 2026-02-28 02:44:56 -08:00