跳转到正文
ThinkWatch
开始输入以搜索文档。
更新日志

最新 发布

每个发布版本的发布说明。可通过 RSS 订阅。

  1. v0.4.0 feature

    看见每一个字节

    • 每一次 Gateway 和 MCP 调用都持久化 request / response body
    • 落盘前 PII 脱敏;按列 TTL 让「热 body」和「冷元数据」分别衰减
    • S3 兼容的 Body 卸载 —— AWS S3、MinIO、Ceph 或内置 RustFS
    • 基于布隆过滤器索引的跨行子串搜索
    • audit:read_bodies 独立权限控制 Body 查看器
    • MCP 下游 SSE —— 客户端可订阅 tools/call 事件时间线
    • 按模型路由:Auto / Manual 两种模式 + 拖拽式流量分配条
    • 模型级开关 —— 暂停单个模型而不影响整个 Provider
    • Pre-call 预算检查直接拒绝已超额请求
    • allowed_models 在 Anthropic Messages 与 OpenAI Responses 同样强制

    全量请求 / 响应体审计#

    ThinkWatch 把自己定位成 AI 流量的「堡垒机」—— 但每行审计只有元数据。Token 数、延迟、成本。用户实际问了什么、模型实际答了什么,没有记录。合规团队没法复盘事故、没法证明「PII X 被发送过」,甚至分不清两个几乎一模一样的请求。

    v0.4.0 补齐这段。gateway_logs 新增 request_body + response_body(外加字节数与 body_capture_status 维度);mcp_logs 对应新增 tool_arguments + tool_result。ZSTD(6) 压缩把冷存储成本压在可控区间;六个动态配置开关(逐字段开关 + 全局 body_max_bytes)让运维不重启就能调整范围。缓存命中的响应现在也会写出完整审计行,不再有「黑洞」。

    按列 TTL + S3 卸载#

    「热证据」和「冷元数据」的保留形状完全不同。按列 TTL 让你可以在同一张表里同时保留近 30 天的 body 和数年的 token / 成本行,不必为这种交叉支付 ClickHouse 的代价。

    对于超过 body_max_bytes 的载荷 —— 200k 上下文 prompt、读取整个文件的 MCP 工具、Base64 图片 —— body 会卸载到 S3 而不是被截断。后端通过六个环境变量配置(S3_ENDPOINT_URLS3_BUCKET 等),可对接 AWS S3、MinIO、Ceph,或 Docker Compose 中内置的 RustFS 容器。对象 key 带日期前缀(bodies/<table>/yyyy/mm/dd/...),便于配置 Bucket 生命周期规则独立老化。Body Viewer 端点透明解引用 s3:// 单元格,控制台完全感知不到卸载存在。

    布隆过滤器子串搜索#

    捕获的 body 列附带 tokenbf_v1(512, 3, 0) 索引。审计员查询「哪些会话提到了 API key XYZ」或「哪些工具调用碰过 /etc/passwd」时,不再需要扫描每个 granule —— 布隆过滤器在前置阶段就排除了绝大多数行。索引大小约 50 KB / granule,第一次回答真实合规问题时就回本了。

    新增独立权限 audit:read_bodies 控制 Body Viewer 与底层 /api/admin/{gateway,mcp}/logs/{id}/body 端点 —— 原始载荷作为「行为意图」的法律证据保留,但读取需要单独授权。

    MCP 下游流式响应#

    tools/call 在客户端侧此前只支持缓冲:哪怕上游已经发出 progress 通知,网关也会吞掉时间线,只返回一个 JSON。v0.4.0 基于 Accept 头协商 —— 包含 text/event-stream 的客户端会逐事件接收上游响应(notifications/progress、中间块、最终结果)作为独立 SSE 事件下发。仅 JSON 的客户端保留原缓冲形态,向后兼容。审计管线无论哪种姿态都拿到完整事件时间线。

    按模型路由#

    模型路由配置围绕管理员真实的心智模型重新组织:Auto(latency-cost / balanced / latency-only)或 Manual(peer 间拖拽式流量分配条)。优先级 / 分层故障转移概念被移除;替换为 nginx 风格的扁平 peer 集 + 熔断器旁路。每个模型可以覆盖全局策略;仪表盘暴露 routing-projection,让 UI 在你提交前先告诉你「你的手动配置将花费 $X;自动则是 $Y」。

    三个新端点支撑 UI:

    • PATCH /api/admin/model-routes/batch-weights —— 拖拽条的提交端点
    • GET /api/admin/models/{id}/routing-projection —— 当前 vs Auto 流量分配 + 预计 $/1M tokens
    • GET /api/admin/models/{id}/route-history —— 60 桶 1 分钟 p50/p95,喂给延迟迷你折线图

    决策日志为每个请求记录所选 Provider + 原因 + 任何回退;每行 gateway_logs 标记真实的 upstream_model,事故复盘不留歧义。

    Pre-call 预算强制#

    预算上限此前只在 Post-flight 触发:月度配额已经为零的失控客户端仍能发出请求,只有事后扣账才会注意到 —— 而那时上游 token 已经被烧掉了。v0.4.0 增加 check_budget 生命周期阶段,在上游调用之前运行。「你的配额已耗尽,停止发送」这类稳态场景现在直接被关在门外;既有的跨阈值告警继续覆盖并发突发的竞态。

    allowed_models 全表面强制#

    每个 API 密钥的 allowed_models 白名单现在在 OpenAI Chat Completions、Anthropic Messages、OpenAI Responses 上一致强制。同一套强制被接入共享生命周期管线,未来新增表面自动继承 —— 没有任何 API 表面可以绕过模型白名单。

    引擎内#

    新的共享生命周期管线用统一的 Surface trait 把 AI 网关与 MCP 网关的请求路径合流。check_limitscheck_accesscheck_budgetrecord_usage 现在作为对称应用的阶段同时存在于两侧,消除了「缓冲、流式、短路」三条分支之间长期存在的漂移。MCP 的 proxy.rs 与 Gateway 的 proxy.rs 都被切分为子模块;前端 1667 行的 dashboard 组件也被拆解为更聚焦的子组件。

  2. v0.3.0 feature

    MCP,按用户的方式

    • 按用户的上游凭证——每位开发者以自己的身份连接 GitHub、Linear、Slack
    • Dynamic Client Registration 一键 OAuth 接入
    • MCP Store 双语模板市场(Linear OAuth 模板开箱预置)
    • 分步注册向导 + 鉴权模式感知的编辑表单
    • 三层上游身份解析(JWT + userinfo + discovery)
    • /connections 页面提供逐凭证 Test Connection
    • 按用户的工具目录——不同用户根据上游权限看到不同工具集
    • MCP 响应缓存按 (user, account_label) 隔离——无跨用户串扰
    • 安全评审加固 —— SSRF、缓存隔离、限流、审计

    按用户的上游凭证#

    MCP 网关不再假装所有用户都是同一个上游服务账号。每位开发者以自己的身份——通过 OAuth 或 PAT——连接 GitHub、Linear、Slack 以及任何启用了 MCP 的服务。上游审计轨迹终于端到端贯通:工单分配给真实的人、GitHub Issue 由实际提交者创建。逐密钥账号覆盖(per-key account override)让同一用户可同时维护多个身份(个人 + 工作 GitHub),并指定某个 API 密钥使用哪一个。

    一键 OAuth 接入#

    在注册向导中粘贴 MCP 服务器 URL,ThinkWatch 自动与上游 OAuth 服务器完成 Dynamic Client Registration,运行鉴权探测,在安装时收集 OAuth 客户端凭证,并引导你完成授权页面。匿名探测的 401/403 被正确识别为 auth_required(在目录卡片上显示琥珀色状态指示),而不是硬性失败——部分受保护的服务器也能干净地注册。

    MCP Store#

    网关内置双语模板注册表。模板自带合理默认值、所需 OAuth scope,以及面向终端用户的说明。Linear OAuth 模板开箱预置,更多主流服务陆续加入。Display Label 让多次安装的模板区分清晰:个人 GitHub 安装与工作 GitHub 安装显示为独立卡片,而不是两个无法分辨的条目。

    分步注册向导#

    MCP 服务器注册重构为分步引导式向导,鉴权模式不同呈现不同界面。编辑表单拒绝保存与当前鉴权模式不匹配的字段;工具调用与安装错误以易懂的语言展示并给出可执行的下一步建议,而不是原始 JSON-RPC 错误码。

    三层上游身份解析#

    当上游 MCP 服务器使用 OAuth 时,ThinkWatch 通过三层策略解析上游用户身份:先解析 JWT,回落到 OAuth userinfo 端点,再回落到 issuer discovery。解析得到的 subject 作为缓存和审计的关键键值,让共用同一个 MCP 服务器的两位用户在下游严格分离。

    逐凭证 Test Connection#

    /connections 页面为每个凭证提供 Test Connection 按钮。在正式提交前先验证你的 OAuth/PAT 是否真的能连上上游服务器;结果是结构化的(auth_ok / auth_required / unreachable / tool_call_ok),不再是单一红绿点——你能精确知道哪一步出了问题。

    安全加固#

    经过一次内部安全评审,MCP 路径新增:探测 URL 的 SSRF 防护;响应缓存按 (user, account_label) 隔离,OAuth/PAT 数据绝不跨用户泄露;每一跳网关都启用限流;工具调用边界发出结构化审计;管理员防误操作护栏(粘贴时验证静态 Token、阻止明显错误的凭证组合)。

  3. v0.2.0 feature

    团队、消费管控与可编程 API

    • 团队——按业务单元隔离密钥、预算与分析数据
    • 限流与预算上限,fail-closed 强制执行,含消费告警
    • RBAC v2——自定义角色、权限历史、一键导入/导出
    • Token 迁移至 HttpOnly Cookie,XSS 无法再窃取会话
    • 完整管理 API,含 OpenAPI 文档与 API 密钥认证
    • WebSocket 驱动的实时看板

    团队#

    用户和 API 密钥现在可以组织到团队中。每个团队拥有独立的分析看板视图、独立的用户列表,以及分配 API 密钥时独立的作用域。结构化的作用域选择器让成员管理一目了然。

    消费管控#

    全新的限额引擎在每个层级强制执行限流与预算上限——按用户、按 API 密钥、按 Provider、按 MCP 服务器。限额直接内嵌在各编辑对话框的专属面板中,无需跳转到单独的配置页面。当预算耗尽时,网关采用 fail-closed 机制——无静默超支。可设置预算告警阈值,在达到硬性上限前提前预警。流式请求计费准确;支持输入输出 token 价格不对称的模型加权计费。

    RBAC v2#

    角色系统经过全面重构。内置角色与自定义角色统一到同一张表中。自定义角色可在 CodeMirror 编辑器中完整编辑,支持从现有角色克隆作为起点,并追踪完整的权限变更历史,清楚记录谁在什么时候做了什么修改。角色支持以 JSON 格式导出和导入,便于跨环境保持一致性。角色授权现在感知作用域——在团队层级授予的角色仅在该团队内生效。

    安全加固#

    访问令牌和刷新令牌已从 localStorage 迁移到 HttpOnly Cookie,JavaScript 可见的会话面完全归零。XSS 攻击无法窃取 Token。刷新端点将每个令牌绑定到来源客户端 IP,被盗 Cookie 无法跨网络重放。WebSocket 看板连接现在使用一次性票据,而非长期有效凭证。

    管理 API#

    网关现在开放了以 API 密钥认证的可编程管理接口。完整的 OpenAPI 规范与网关一同部署,可将密钥和用户的生命周期管理集成到自有工具链或 CI 流水线,无需打开控制台操作。

  4. v0.1.0 release

    公开预览

    • 多格式 AI API 网关(OpenAI、Anthropic、Gemini、Bedrock)
    • MCP 网关,含命名空间隔离与工具级 RBAC
    • ClickHouse 驱动的审计日志,支持多通道转发
    • 首次运行初始化向导与内置配置指南

    ThinkWatch 现已进入公开预览阶段。此次首个标记版本包含双端口架构(网关 :3000,控制台 :3001)、虚拟 API 密钥生命周期管理、滑动窗口限流、熔断器,以及统一日志检索。

    Helm Chart 与 Distroless 容器镜像均已发布,同时支持 Docker Compose 自托管部署。