mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
Wire the foundation layer for the AI Coach: - `types.ts` defines the SSE event shapes (token / provenance / done / error), the chat-request zod schema, and the conversation/message DTOs the route + UI share. - `persistence.ts` encrypts every message body with the active ENCRYPTION_KEYS entry before insert and decrypts on read. `summariseTitle()` keeps the rail snippet ≤80 chars with a smart word-boundary cut. - `budget.ts` introduces a per-(user, UTC-day) ledger with a 25 000- token daily cap. `enforceBudget()` throws HttpError(429, "coach.budget.exceeded") so the route can short-circuit before spending. UTC alignment matches the LLM-provider billing cycle. - `refusal.ts` runs prompt-injection and off-topic detection on inbound messages. Pattern bank covers EN+DE injection wording, jailbreak variants, and obvious off-topic asks (weather, code-help, recipes). Health-allow tokens override the off-topic deny list so mixed questions land on-topic. - i18n keys `insights.coach.refusal*` + `insights.coach.error*` added to both locale bundles. - 28 unit tests cover the helpers with mocked Prisma. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>