Kenneth badc00c43b feat(backend): add LLM-powered feed enhancement (#58)
* feat(backend): add LLM-powered feed enhancement

Add enhancement harness that fills feed item slots and
generates synthetic items via OpenRouter.

- LLM client with 30s timeout, reusable SDK instance
- Prompt builder with mini calendar and week overview
- arktype schema validation + JSON Schema for structured output
- Pure merge function with clock injection
- Defensive fallback in feed endpoint on enhancement failure
- Skips LLM call when no unfilled slots or no API key

Co-authored-by: Ona <no-reply@ona.com>

* refactor: move feed enhancement into UserSession

Move enhancement logic from HTTP handler into UserSession so the
transport layer has no knowledge of enhancement. UserSession.feed()
handles refresh, enhancement, and caching in one place.

- UserSession subscribes to engine updates and re-enhances eagerly
- Enhancement cache tracks source identity to prevent stale results
- UserSessionManager accepts config object with optional enhancer
- HTTP handler simplified to just call session.feed()

Co-authored-by: Ona <no-reply@ona.com>

* test: add schema sync tests for arktype/JSON Schema drift

Validates reference payloads against both the arktype schema
(parseEnhancementResult) and the OpenRouter JSON Schema structure.
Catches field additions/removals or type changes in either schema.

Co-authored-by: Ona <no-reply@ona.com>

* refactor: rename arktype schemas to match types

Co-authored-by: Ona <no-reply@ona.com>

---------

Co-authored-by: Ona <no-reply@ona.com>
2026-03-05 02:01:30 +00:00
2026-01-16 00:56:55 +00:00
2026-01-16 00:56:55 +00:00
2026-01-16 23:51:05 +00:00
2026-01-16 00:56:55 +00:00

aris

To install dependencies:

bun install

Packages

@aris/source-tfl

TfL (Transport for London) feed source for tube, overground, and Elizabeth line alerts.

Testing

cd packages/aris-source-tfl
bun run test

Fixtures

Tests use fixture data from real TfL API responses stored in fixtures/tfl-responses.json.

To refresh fixtures:

bun run fetch-fixtures
Description
No description provided
Readme 14 MiB
Languages
TypeScript 97.4%
Shell 1.3%
JavaScript 0.8%
Dockerfile 0.3%
CSS 0.2%