apps/server/docs/ai-context/workers-and-runtime.md
入口:src/bin/run.ts。
api
不再有独立的 worker / billing-consumer 进程。原先的 Redis Stream billing event 链路、advisory-lock poller、admin flux grant batch 异步处理全部移除。
启动路径:
src/bin/run.tsrunApiServer()createApp()启动时会做的事情:
详见 admin-flux-grants.md。简要:admin 调 POST /api/admin/flux-grants,路由 handler 在请求线程内顺序对每个 recipient 调 BillingService.creditFlux,HTTP 响应里直接返回每条的 outcome(granted / skipped / failed)。失败由 admin 看响应自行重发,可选 idempotencyKey 让重发安全。
服务端没有需要恢复的"中间状态"。每次 creditFlux 自己是一个 DB 事务;要么写进 flux_transaction ledger 要么没写,没有第三态。(user_id, request_id) partial unique index 保证带 idempotencyKey 的重发不会双发。
HOSTPORTAPI_SERVER_URLDATABASE_URLREDIS_URLAUTH_GOOGLE_CLIENT_IDAUTH_GOOGLE_CLIENT_SECRETAUTH_GITHUB_CLIENT_IDAUTH_GITHUB_CLIENT_SECRETSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETOTEL_SERVICE_NAMESPACEOTEL_SERVICE_NAMEOTEL_TRACES_SAMPLING_RATIOOTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_HEADERSOTEL_DEBUGNOTICE:
BILLING_EVENTS_*已全部移除。
src/routes/chat-ws/index.ts 是另一种独立运行时:
Map这意味着:
pullMessagessync 端点如果要改 Redis key / channel 构造、Pub/Sub payload,先看 redis-boundaries-and-pubsub.md。
初始化在 instrumentation.ts(NodeSDK lifecycle)+ src/otel/index.ts(metric handles)+ src/otel/gauges/*.ts(DB-backed ObservableGauge callbacks,例如 gauges/active-sessions.ts)。
启用条件:
OTEL_EXPORTER_OTLP_ENDPOINT 存在覆盖面:
重要实现细节:
sdk.start() 必须发生在 metrics.getMeter() 之前/livez 和 /readyz 会被 HTTP instrumentation 忽略pg_cron 或外部 cron service 调专门的 internal API endpoint,比"进程内常驻 loop"更可观察、更易停。billing-architecture.md,所有 ledger 写入都在事务内同步完成rate-limit.ts 仍是单实例内存模型