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
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
ea5adcc6ca
fix(backend): harden Phase A endpoints — Zod validation, feature flag gate, state filtering
...
3 bugs fixed in recent Phase A code:
1. POST /api/context-message: Add Zod schema validation, feature flag gate
(ai_context_messages.enabled), and safe body parsing. Previously had no
validation and unsafe 'as' cast that could null-ptr on missing body.
2. GET /api/timers/availability: Filter out dismissed/completed/fired timers.
Previously included inactive timers in occupied intervals, causing the
endpoint to report less free time than actually available.
3. agent-actions/routes.ts: Import PRODUCT_ID from product-config.ts instead
of hardcoding 'chronomind' string. Ensures consistency if product identity
changes.
Also: Add EXTRACTION_SERVICE_URL + PLATFORM_SERVICE_URL to .env.example.
All 219 backend tests pass. No breaking changes.
2026-03-31 23:56:35 -07:00
saravanakumardb1
c0e576e15c
docs(roadmap): update Phase A checkboxes with commit links
...
Mark Phase A.3 (MCP tools) and A.4 (AI context messages) as complete.
Update exit criteria with test counts and commit references.
2026-03-31 23:47:10 -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
29a48025eb
feat(agent-actions): Phase A.2 — agent action audit trail module + tests
...
Add agent-actions module for AI/MCP operation audit trail:
- types.ts: 3 enums (ACTOR_TYPES, ACTION_STATES, ACTION_TYPES), AgentActionDoc,
CreateAgentActionSchema, AgentActionQuerySchema, BatchApproveSchema
- repository.ts: CRUD + batchApproveByActor using @bytelyst/datastore
- routes.ts: 5 endpoints (list, create, approve, reject, batch-approve)
All gated behind isFeatureEnabled('agent_inbox.enabled')
- Registered cm_agent_actions container in cosmos-init.ts
- Registered agentActionRoutes in server.ts
Tests (37 new, 219 total):
- 22 agent-actions schema tests (constants, create, query, batch-approve)
- 15 timer schema tests (RescheduleTimerSchema, AvailabilityQuerySchema)
All 219 backend tests pass. No breaking changes.
2026-03-31 23:38:03 -07:00