Repository navigation
docs: 补齐全部模块文档并按主题重组目录 - #4
Merged
Merged
Conversation
覆盖服务商与模型管理、协议适配(OpenAI/Anthropic)、客户端构造、高可用择优与 降级链、亲和性、调用结果上报、Token 溢出三策略、领域事件。 内容贴着实际代码写:枚举取自源码、方法签名与行号可对照、超时配置与线上事故关联。 按 lobster0 的文档风格,开头加「一句话人话」导读。 补上 INDEX.md 中 7 个死链之一。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
原来 docs/ 下全平铺,随着文档增多难以定位。改为按主题分目录: docs/architecture/ 系统架构 docs/modules/ 各业务模块 docs/reference/ API 与数据库参考 docs/operations/ 部署、性能、安全、排查记录 docs/development/ 本地开发 文件名同时去掉 MODULE 后缀等冗余(RAG_MODULE.md → modules/rag.md), 目录层级本身已经表达了这层含义。INDEX.md 改名 README.md,符合目录入口惯例。 移动一律用 git mv 保留历史。 新增 docs/modules/llm.md(362 行):服务商与模型管理、OpenAI/Anthropic 协议适配、 高可用选路与降级链、Token 溢出的三种策略、领域事件、以及本次排查沉淀的超时坑。 同步更新 README.md、README_EN.md 及文档间的全部交叉引用;新增链接校验脚本, 当前 35 条有效链接全部可达,剩余 12 条失效均指向尚未撰写的文档。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
均基于源码实际结构撰写,不含推测: - modules/mcp-tool.md:工具上架状态机(六个处理器的流转与人工审核关卡的实现方式)、 审核容器与用户容器的隔离动机、MCP Gateway 的双重载设计、工具定义到 LangChain4j ToolSpecification 的转换、工具市场的三实体版本模型。 - modules/conversation.md:AbstractMessageHandler 模板方法体系与三个子类、 MessageTransport 让流式与同步共用一套逻辑、一次对话的完整调用链、 上下文裁剪与 Token 溢出策略的衔接、Agent 工作流状态机(含两个人在回路状态)。 - modules/user-auth.md:JWT 与 API Key 两条独立鉴权链路、登录方式开关、 验证码机制、用户默认模型与降级链、账户额度。 各文档均记录了实际存在的坑,例如: - ToolStatus.fromCode() 返回 null 而同项目其他枚举抛异常 - conversation 模块存在三个同名 Agent、两个同名 ChatContext,易 import 错 - UserContext 基于 ThreadLocal,异步线程内取值必为 null(含正误写法对照) - 验证码仅有内存实现,构成水平扩容的硬阻塞点 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- modules/trace.md:两级数据模型(摘要+明细)的动机、八个执行阶段如何用于失败定位、 TraceCollector 采集接口、Spring 事件解耦的收益与代价。 - modules/task.md:厘清 domain/task(工作流任务)与 domain/scheduledtask(定时任务) 两个易混概念、六种重复规则、DelayQueue 延迟队列实现与重启恢复机制。 - architecture/infrastructure.md:19 个子包全景、MQ/对象存储/传输层抽象/类型转换器/ 加密工具/拦截器/异常体系/外部集成。 排查过程中发现并记录了一个高危安全问题(infrastructure.md 第 9.1 节): ProviderConfigConverter 用 ValidationUtils.EncryptUtils 加密服务商配置落库, 而该实现的 AES 密钥 "1234567890123456" 硬编码在源码中,且本仓库是公开的, 加之使用 ECB 模式,实际等同于未加密——拿到数据库内容即可解出全部用户的 模型服务商 API Key。文档中已给出修复方向。 同时记录:ConfigEncryptor 是硬编码密钥的死代码;ProviderConfigConverter 按列索引 取值的重载未实现直接返回 null;定时任务的内存队列与验证码的内存存储共同构成 水平扩容的两个阻塞点。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
新增: - operations/deployment.md:拓扑图、资源配额及其对线程池的影响、环境变量全清单、 CI/CD 流程、三个必须遵守的约束、版本追溯与回滚、国内网络实测数据、运维检查清单 - development/local-setup.md:环境要求、依赖服务、运行方式、Spotless 与中文注释约定、 提交与 CI、项目结构导航、五个常见问题 - operations/performance.md:1.2 CPU 如何改变代码行为、线程池现状盘点、超时分级、 首字延迟的四次串行外部调用、数据增长、水平扩容的两个阻塞点、排查手册 - operations/security.md:如实列出 P0/P1/P2 待修复问题、两条鉴权链路、多租户隔离、 不可信代码执行、密钥管理、CI/CD 安全边界、检查清单 重写 docs/README.md 索引:按角色给出阅读顺序,列全 19 篇文档, 并把「需要立刻知道的几件事」提到前面(含高危安全问题与三条编码约束)。 重写根 README 的部署说明:补运行拓扑图、首次部署、持续部署流程图、回滚步骤, 并说明为何服务器不需要开放任何入站端口。 修正两处事实错误: - 初始化 SQL 应使用 docs/sql/01_init.sql(1129 行,35 张表),而非 deploy/init-db.sql/init.sql(73 行,仅建扩展,建表语句已注释)。按后者操作 会得到一个没有任何表的库,且启动后才报错。README 与本地开发指南均已更正并加警示。 - README 中数据库初始化链接同步修正。 链接校验:167 条全部有效,0 失效(原 INDEX.md 有 7 条死链)。 文档总量 10215 行 / 19 篇。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
参照 lobster0 的文档组织方式,把 docs 从「6 篇平铺 + 7 条死链」补成 19 篇分层文档,10215 行,链接零失效。
目录重组
原来全平铺在
docs/下,改为按主题分层:文件名去掉冗余后缀(
RAG_MODULE.md→modules/rag.md),目录层级本身已表达分类。移动一律用git mv保留历史。新增文档(11 篇)
modules/llm.mdmodules/mcp-tool.mdmodules/conversation.mdmodules/user-auth.mdmodules/trace.mdmodules/task.mdarchitecture/infrastructure.mdoperations/deployment.mdoperations/performance.mdoperations/security.mddevelopment/local-setup.md全部基于源码实际结构撰写,每篇含「💬 一句话人话」导读与「已知坑」章节。
🔴 撰写过程中发现的高危安全问题
服务商 API Key 的加密密钥硬编码在公开源码中,实际等同未加密。
ProviderConfigConverter加密含 API Key 的配置落库,调用的ValidationUtils.EncryptUtils使用SECRET_KEY = "1234567890123456",且Cipher.getInstance("AES")默认 ECB 模式。仓库公开 ⇒ 密钥公开 ⇒ 任何拿到数据库内容的人都能解出全部用户的服务商密钥。详见
docs/architecture/infrastructure.md9.1 与docs/operations/security.mdP0,已给出修复方向。本 PR 只做记录,修复需单独处理。其他发现
ConfigEncryptor是硬编码密钥的死代码(零调用),建议删除ProviderConfigConverter.getNullableResult(ResultSet, int)未实现直接返回 nullToolStatus.fromCode()返回 null 而同项目其他枚举抛异常Agent、两个同名ChatContext修正的事实错误
初始化 SQL 应用
docs/sql/01_init.sql(1129 行,35 张表),而非deploy/init-db.sql/init.sql(73 行,仅建扩展,建表语句已注释)。按后者操作会得到一个没有表的库。README 与本地开发指南均已更正。验证
🤖 Generated with Claude Code