--- name: server-design description: Server 层设计:传输层架构决策、StelloAgent 映射原则、连接态管理模式。存储层见 server-storage,Engine 细节见 engine-design。 --- # Server 层(Service Layer)设计 > 相关 skill:**server-storage**(PG 持久化)、**engine-design**(Engine 内部)、**orchestrator-usage**(StelloAgent API) --- ## 架构分层 ``` Transport Layer(Hono REST + ws WebSocket) ↓ Space 管理层(SpaceManager · AgentPool) ↓ PG Storage Layer(4 个 Storage Adapter) ↓ Core(@stello-ai/core — StelloAgent → SessionOrchestrator → Engine) ``` --- ## 设计决策 - **WS 用 `ws` 库** — Hono 内置 WS 面向 edge,不适合 Node.js - **WS 认证用 header** — API key 不暴露在 URL - **stream 和 message 是独立消息类型** — 客户端显式选择 - **Space 级 WS 连接** — URL 中确定 spaceId,匹配 AgentPool per-space 缓存 - **REST 降级路径** — `/turn` 端点支持无 WS 的非流式对话 - **断连只 detach 不 leave** — runtime 通过 recyclePolicy 自然回收 --- ## 连接态管理 ConnectionManager(纯内存,不持久化): ``` connectionId → { userId, spaceId, sessionId | null } ``` - WS upgrade 时 bind(connId, userId, spaceId) - session.enter 时 attach - session.leave / socket close 时 detach - socket close 时 unbind --- ## AgentPool 默认 fn 注入 AgentPool 支持内置默认 consolidateFn: - `AgentPoolOptions.llm` 提供最小 LLM 调用接口 - Space 表存 `consolidatePrompt` - 如果 buildConfig 未提供显式 fn,且 Space 有 prompt 且 llm 可用 → 自动注入默认实现 - buildConfig 提供的显式 fn 始终优先 跨 Session 的 reflection / 全局综合不由 Server 框架承担——服务端只暴露 `StelloAgent` 的 orchestrator-facing 数据 SDK(`listSessionDigests` / `putInsight` 等),应用层基于这些原语自行实现。 --- ## createStelloServer 入口 `createStelloServer(options)` 返回 `StelloServer`,内部用 `@hono/node-server` 的 `serve()` 创建 HTTP server,再附着 `ws.WebSocketServer({ noServer: true })`。