Commit Graph

288 Commits

Author SHA1 Message Date
root
5253aaf174 fix(docker): install all dependencies in builder stage for build tools
The base image only includes production dependencies, so we need to install
all dependencies (including devDependencies) in the builder stage to have
TypeScript and Next.js available for building.

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-09 23:23:37 +00:00
root
cb51cbe671 refactor(docker): use shared base images for @bytelyst/* packages
Update Dockerfiles to use bytelyst-common-base-backend and bytelyst-common-base-web
images instead of installing @bytelyst/* packages via tarballs.

Benefits:
- Smaller final images (~50MB vs ~250MB)
- Faster builds (base image cached)
- Consistent package versions across products
- No need for docker-prep.sh tarball packing

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-09 23:22:59 +00:00
root
28807d4889 fix(docker): update sed syntax for Linux compatibility
- Change sed -i '' to sed -i for Linux compatibility
- Fix BSD sed syntax that was causing docker-prep.sh to fail

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-09 22:25:49 +00:00
root
ce7e04a158 feat(ux): add UX testing setup guide and common platform integration
- Add UX_TESTING_SETUP_GUIDE.md for ChronoMind
- Create .pnpmfile.cjs for local package resolution
- Update .npmrc to remove repo-level Gitea auth
- Create Primitives.tsx product adapter with ChronoMind-specific status types
- Add ui directory for shared component imports

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-09 22:10:55 +00:00
OpenAI Codex
f88d9e5953 docs(roadmap): record accessibility item status 2026-05-05 01:21:51 -07:00
OpenAI Codex
bfc4670fc3 feat(web): use shared accessibility helpers 2026-05-05 01:21:31 -07:00
OpenAI Codex
8d8cf04835 docs(roadmap): record feedback item status 2026-05-05 00:54:34 -07:00
OpenAI Codex
d38b9745a4 feat(web): wire settings feedback submission 2026-05-05 00:54:03 -07:00
saravanakumardb1
5dd0a18221 fix(web): add Agent Inbox + Day Planner links to Dashboard navbar with feature flag gates 2026-04-19 00:56:12 -07:00
saravanakumardb1
a9361b44bb fix(web): add feature flag gate to webhooks page for consistency with inbox/planner 2026-04-19 00:54:59 -07:00
saravanakumardb1
38a15c0595 refactor(web): extract shared apiFetch helper, remove secret from webhook client type 2026-04-19 00:54:53 -07:00
saravanakumardb1
fe2ab6010e fix(backend): remove stale TODO-008 comment, add telemetry to suggestions route 2026-04-19 00:53:05 -07:00
saravanakumardb1
fd4269949f fix(planner): remove unused import, fix urgency/cascade type casts, fix overflow invalid dates 2026-04-19 00:52:26 -07:00
saravanakumardb1
333f0e5316 feat(web): Phase D.3 tempo mode engine + 11 tests 2026-04-18 18:13:45 -07:00
saravanakumardb1
3cda171b68 feat(backend): Phase D.1 smart routine suggestions engine + routes + 6 tests 2026-04-18 18:12:47 -07:00
saravanakumardb1
2e0ddcfe43 feat(web): Phase C.4 webhook management UI + client 2026-04-18 18:10:58 -07:00
saravanakumardb1
573483c20e feat(backend): Phase C.3 Zapier-compatible polling endpoint + event-types discovery 2026-04-18 18:09:56 -07:00
saravanakumardb1
79ac0bb1d6 feat(backend): Phase C.1-C.2 wire domain events from timer + routine repositories to webhook dispatch 2026-04-18 18:09:04 -07:00
saravanakumardb1
9973c548fc feat(web): Phase B.4 Day Planner web UI + planner API client 2026-04-18 18:07:12 -07:00
saravanakumardb1
23c584f4a8 feat(web): Phase B.3 Agent Inbox web UI + backend API client 2026-04-18 18:05:50 -07:00
saravanakumardb1
e021e96c80 feat(backend): Phase B.1 day planner engine + routes + 11 tests 2026-04-18 18:03:55 -07:00
saravanakumardb1
0240d3c807 feat(backend): TODO-008 wire telemetry trackEvent() into agent-actions + context-message routes 2026-04-18 18:01:19 -07:00
saravanakumardb1
698fbc19cc feat(web): TODO-003 accessibility focus trap + ARIA roles in modals 2026-04-18 18:00:00 -07:00
saravanakumardb1
0242ca85ff feat(web): TODO-002 feedback form in settings page via @bytelyst/feedback-client 2026-04-18 17:58:06 -07:00
saravanakumardb1
8bddbec43c feat(web): TODO-001 kill switch maintenance banner + disable timer creation 2026-04-18 17:56:37 -07:00
saravanakumardb1
8ca9e27532 test(ai-context): TODO-009 unit tests for LLM context message generators
Adds 18 new tests covering:

Backend (13 tests in ai-context.test.ts):
- keyword fallback — meeting, doctor, flight, case-insensitive
- generic fallback — no match, minute/hour formatting
- LLM path — flag-gated (off = no fetch), extraction-service success,
  Ollama cascade when extraction returns null, error → keyword fallback,
  short Ollama response rejected, non-200 fallthrough
- prompt construction — includes category, urgency, timeOfDay,
  recentTimerLabels

Web (5 new tests in context-messages.test.ts):
- LLM success path
- keyword fallback when backend returns 500
- keyword fallback when backend throws
- generic fallback when backend fails and no keyword matches
- payload shape — POST /api/context-message with all params

Test counts: backend 240 (was ~227), web 399 (was ~394), all green.
2026-04-17 12:40:10 -07:00
saravanakumardb1
6064d7d227 docs(agents): add .npmrc canonical template rule to AGENTS.md
Never edit .npmrc directly in product repos — managed by
canonical template in learning_ai_common_plat/scripts/npmrc.template.
Use sync-npmrc.sh to propagate. Prevents gitea.bytelyst.com hardcoding.
2026-04-14 11:57:23 -07:00
saravanakumardb1
2bf172935b fix(web): align billing-client SubscriptionDoc type with platform schema 2026-04-13 22:57:32 -07:00
saravanakumardb1
a0c5f14bbf docs: mark TODO-004 and TODO-005 as completed in agentic roadmap 2026-04-13 17:00:55 -07:00
saravanakumardb1
229ce4f00f feat(backend): wire Ollama LLM for context messages (TODO-005)
Dual-path LLM enrichment for AI context prep messages:
1. extraction-service (if EXTRACTION_SERVICE_URL set)
2. Ollama direct (if OLLAMA_URL set) — non-streaming /api/generate
3. Keyword rules fallback
4. Generic fallback

New env vars: OLLAMA_URL, OLLAMA_MODEL (default: gemma3:4b)
Both LLM paths use 5s timeout and null-return-on-error pattern.
Feature-gated behind ai_context_messages.enabled flag.
2026-04-13 17:00:24 -07:00
saravanakumardb1
0e7c1aeb15 feat(backend): state-change event detection + clone template on start
- PUT /timers/🆔 detect state→fired and state→completed transitions,
  emit timer.fired / timer.completed domain events
- PUT /routines/🆔 detect status→completed transition,
  emit routine.completed domain event
- POST /routines/:id/start (TODO-004): when isTemplate=true, clone the
  template into a new RoutineDoc instead of mutating in-place. Original
  template stays reusable. Non-templates still update in place.

All 6 ChronoMind event types are now fully wired end-to-end.
2026-04-13 17:00:05 -07:00
saravanakumardb1
0129f5623c fix(backend): emit routine.started and household.created domain events
Event bus defines 6 event types but only timer.created was wired.
Wire the two straightforward create/start events:
- routine.started: emitted from POST /routines/:id/start
- household.created: emitted from POST /households
2026-04-13 15:52:49 -07:00
saravanakumardb1
9b398bbd68 fix(backend): convert ecosystem-phase2 test to Vitest, fix .ts extension + hardcoded productId
- ecosystem-phase2.test.ts used node:test — Vitest discovered it but ran 0 tests
- Converted to Vitest describe/it/expect — now 2 tests actually execute
- Added coverage for missing plan-created-event graceful fallback
- Fixed .ts import extension to .js (ESM convention, tsc build compat)
- Replaced 6 hardcoded 'chronomind' literals with PRODUCT_ID import
2026-04-13 15:51:58 -07:00
saravanakumardb1
fcd2ee3ad2 fix(docker): standardize pnpm filter glob to match ecosystem convention 2026-04-13 15:50:43 -07:00
saravanakumardb1
24b1dd05fc docs: mark TODO-006, TODO-010, TODO-011 as completed in agentic roadmap 2026-04-13 14:59:47 -07:00
saravanakumardb1
9ece4306a2 feat(docker): add docker-prep.sh for tarball-based Docker builds 2026-04-13 14:59:21 -07:00
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
d74c80a711 fix(cleanup): TODO-010 — replace hardcoded PRODUCT_ID with import from product-config 2026-04-13 14:56:57 -07:00
saravanakumardb1
8152d508d1 fix(docker): .docker-deps COPY + optional secret + .npmrc.docker simplification
- Dockerfiles: COPY .docker-deps/ for tarball resolution, make secret read optional
- .npmrc.docker: remove scoped registry (tarballs handle all @bytelyst/* resolution)
2026-04-13 14:05:54 -07:00
saravanakumardb1
c1972ef0d0 feat(backend): emit timer.created event from POST /timers route
Wire getEventBus().emit() into the timer creation handler so webhook
subscribers and future listeners receive typed domain events.
2026-04-13 11:50:39 -07:00
saravanakumardb1
82428d7bf9 fix(backend): fix sync throw isolation in event bus + add 6 tests
Promise.allSettled only catches rejected promises, not synchronous throws.
Wrap handler calls in Promise.resolve().then() to isolate sync errors.
Add 6 unit tests covering delivery, unsubscribe, error isolation,
singleton, reset, and removeAll.
2026-04-13 11:42:14 -07:00
saravanakumardb1
fbac905e9c feat(backend): add domain event bus + webhook dispatch
Add typed event bus (6 events: timer.created/fired/completed,
routine.started/completed, household.created) with Promise.allSettled
isolation. Wire webhook subscriber bridge using @bytelyst/webhook-dispatch
for HMAC-signed delivery with retry.

All 219 tests pass.
2026-04-13 11:28:38 -07:00
saravanakumardb1
427080a2a3 chore: standardize .npmrc + workspace for corp network resilience
- .npmrc: use ${GITEA_NPM_HOST:-localhost}:3300 instead of hardcoded
  gitea.bytelyst.com (corp TLS proxy breaks external URL).
- pnpm-workspace.yaml: add ../learning_ai_common_plat/packages/* so
  @bytelyst/* resolve locally without registry access.
- .npmrc: enable link-workspace-packages + prefer-workspace-packages.
2026-04-13 10:34:50 -07:00
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
root
c8bab1d617 chore: update registry URL to gitea.bytelyst.com + lockfile refresh
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 06:08:43 +00:00
saravanakumardb1
e61858db15 feat(ios): add TestFlight release script, README, BUILD_STATE + bundle ID migration
- Add release-testflight.sh — one-command archive + upload to TestFlight
- Add README_TESTFLIGHT.md — setup guide for home laptop
- Add BUILD_STATE.md — build tracking
- Migrate bundle IDs: com.chronomind.app → com.saravana.chronomind (original was taken)
- Remove App Groups entitlement temporarily (not registered in dev portal yet)
- Fix duplicate theme enums in generated file
2026-04-04 23:20:54 -07:00
saravanakumardb1
1ea3965492 fix(ios): remove duplicate theme enums + add ExportOptions.plist for TestFlight
- Remove duplicate CMColors, CMSpacing, CMRadius, Color.init(hex:) from generated theme file
- Keep canonical versions in ChronoMindTheme.swift
- Add ExportOptions.plist for app-store-connect export
2026-04-04 23:20:54 -07:00
fdd3743f28 feat(phase2): import chronomind routines from plans 2026-04-03 19:30:11 -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