Commit Graph

101 Commits

Author SHA1 Message Date
saravanakumardb1
ed3bc15a4a chore(deps): use wildcard (*) for @bytelyst/* internal packages
All @bytelyst/* packages are internal to the ByteLyst ecosystem and
published to the private Gitea registry. Using "*" eliminates version
bump noise — always resolves to latest available.
2026-04-13 01:05:40 -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
f94c2d8424 fix(web): add NEXT_PUBLIC_CHRONOMIND_BACKEND_URL to .env.example
The fetchEnrichedMessage() function in context-messages.ts references this
env var but it was missing from .env.example, making it invisible to new
developers setting up the project.
2026-04-01 00:00:11 -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
d192061df3 fix(web): exclude e2e/ from tsconfig to prevent false typecheck errors 2026-03-29 02:19:06 -07:00
saravanakumardb1
8b18a8e74b fix(deps): switch @bytelyst/ui and design-tokens to file: refs for local resolution 2026-03-29 02:12:45 -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
c9448d35e4 fix(e2e): fix escaped backticks in visual-regression template literals 2026-03-29 01:01:14 -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
ffe2d28921 test(visual): add Playwright visual regression screenshot tests 2026-03-28 00:55:40 -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
0036e6af10 chore(design-system): add @bytelyst/ui shared component library dependency 2026-03-28 00:36:08 -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
7ac57d0ec7 feat(a11y): add axe-core accessibility E2E spec with focus-visible test 2026-03-27 16:42:03 -07:00
saravanakumardb1
3cf08d6cad feat(design-system): add loading.tsx route transition page 2026-03-27 16:34:27 -07:00
saravanakumardb1
e9e96ba18a fix(e2e): upgrade shallow specs with page.route() API mocking and error state tests 2026-03-27 13:32:05 -07:00
saravanakumardb1
5453cb131a chore(web): add Dockerfile, service worker, and e2e test scaffolds 2026-03-27 11:28:33 -07:00
saravanakumardb1
c6e83f991d fix(docker): correct web Dockerfile EXPOSE/PORT to 3030 matching docker-compose 2026-03-24 11:45:29 -07:00
saravanakumardb1
5c67bed5a6 fix(docker): remove hardcoded corporate proxy and jfrog registry from Dockerfiles 2026-03-24 11:12:38 -07:00
saravanakumardb1
bfbca2b820 feat(docker): migrate to Gitea registry-backed Docker pattern
- Convert all @bytelyst/* file: refs to semver ^0.1.0
- Remove sibling common-plat workspace references
- Add .npmrc and .npmrc.docker for local Gitea registry
- Rewrite Dockerfiles: pnpm + BuildKit secret mount
- Verified: pnpm install + backend typecheck pass
2026-03-23 20:57:37 -07:00
saravanakumardb1
1168da3ce2 fix(ci): fix ESLint flat config plugin resolution
- Override react-hooks rules within the same config object that defines the plugin
- Avoids 'Cannot redefine plugin' error in ESLint 9 flat config
2026-03-22 21:20:23 -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
582936ad65 feat(repo): migrate chronomind workspace to pnpm
- Add pnpm-workspace.yaml (backend + web + common-plat packages)
- Add root package.json with workspace scripts and pnpm config
- Add packageManager: pnpm@10.6.5 to backend/web manifests
- Remove package-lock.json files, generate pnpm-lock.yaml
- Add root .gitignore (was missing)
- Update CI to use pnpm workspace commands
- Add transpilePackages + webpack symlinks to next.config.ts
- Update docker-prep.sh for backend + web consumers
- Rewrite backend/web Dockerfiles to .docker-deps consumer pattern
- Add .dockerignore

Verified: typecheck + 576 tests (182 backend + 394 web) + builds pass
Docker: backend + web smoke builds pass
2026-03-22 19:11:01 -07:00
saravanakumardb1
cb684fa086 chore(docker): add backend + web Dockerfiles, add standalone output to next.config.ts 2026-03-22 00:20:20 -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
403d35e016 chore(web): update lockfile + regenerate service worker 2026-03-12 17:25:20 -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