- bus.test.ts: 4 cases for the new onPublish hook contract - nats.test.ts: stream creation idempotency + JSON publish bridge - scheduler.test.ts: startup delay, fan-out, per-user failure isolation - ADR-0010 documents the bridge-don't-replace decision and the Todoist scheduler isolation, plus open follow-ups (#98 ml/serving consumer, #54 protobuf migration, graceful shutdown, metrics) - README/overview/services README reflect the bridged event substrate - CLAUDE.md gains a "don't nats.publish() directly" rule - .env.example documents NATS_URL + TODOIST_SYNC_INTERVAL_MS Verified in deployment 2026-04-18: api -> nats bridge connects on boot, signals + feedback streams created, scheduler tick logs "todoist sync: 1 ok, 0 failed (1 users)" within 10s. Closes #21, #22. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
38 lines
1.3 KiB
Plaintext
38 lines
1.3 KiB
Plaintext
# Copy to .env.local and fill in values — never commit .env.local
|
|
|
|
# API
|
|
SESSION_SECRET=change-me-to-a-random-32-char-string
|
|
PORT=3078
|
|
NODE_ENV=development
|
|
DATABASE_PATH=./data/oo.db
|
|
# API_BASE_URL = public origin only, no path suffix (used to build OAuth redirect URIs)
|
|
API_BASE_URL=http://localhost:3078
|
|
WEB_BASE_URL=http://localhost:3000
|
|
ML_SERVING_URL=http://localhost:8000
|
|
|
|
# AI stack — Ollama + LiteLLM (docker compose --profile ai)
|
|
LITELLM_URL=http://localhost:4000
|
|
LITELLM_MASTER_KEY=sk-oo-dev
|
|
OLLAMA_URL=http://localhost:11434
|
|
|
|
# Google OAuth — https://console.cloud.google.com/
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
# VAPID (Web Push) — generate: node -e "const wp=require('web-push');console.log(JSON.stringify(wp.generateVAPIDKeys()))"
|
|
VAPID_PUBLIC_KEY=
|
|
VAPID_PRIVATE_KEY=
|
|
VAPID_SUBJECT=mailto:you@example.com
|
|
|
|
# Todoist OAuth — https://developer.todoist.com/appconsole.html
|
|
TODOIST_CLIENT_ID=
|
|
TODOIST_CLIENT_SECRET=
|
|
|
|
# Event bus — leave NATS_URL empty for in-process bus only (no JetStream bridge).
|
|
# Set to nats://nats:4222 (compose service name) or nats://localhost:4222 (host)
|
|
# to mirror every publish to durable JetStream streams (signals.>, feedback.>).
|
|
# Start the broker with: docker compose --profile events up nats
|
|
NATS_URL=
|
|
# How often the background scheduler refreshes Todoist tasks per active user (ms).
|
|
TODOIST_SYNC_INTERVAL_MS=900000
|