forked from new_org/Project-Caffeine
7.3 KiB
7.3 KiB
Project Caffeine 代码编写指南
1. 目的与概述
本代码编写规范旨在为 Project Caffeine 项目的开发人员提供一致的编码风格和最佳实践,确保代码的可读性、可维护性和团队协作的效率。遵循这些规范将有助于提升代码质量、减少错误并优化开发过程。
2. 技术栈与工程化基础
所有代码必须遵循清晰、简洁、结构化的原则,并基于以下核心技术栈构建:
- 核心语言:所有核心功能必须使用 TypeScript 编写。强烈建议优先使用 TypeScript,以利用其静态类型检查减少运行时错误。
- 运行环境:服务端必须使用 Node.js (LTS v20+)。需确保高效的异步执行和非阻塞 I/O 操作。
- 工程架构:采用原生 npm Workspaces 进行 Monorepo(单体仓库)包管理。必须在根目录统一管控共享的 JSON-RPC Schema 与多个微服务子包。
3. 代码风格与命名规则
3.1 格式与排版
- 缩进:使用 2 个空格作为缩进(严禁使用 Tab)。
- 行长度:每行代码的字符数应不超过 120 个字符,避免横向滚动条,便于阅读和维护。
- 文件结尾:每个文件的结尾必须保留一个空行。
- 函数复杂度:长函数或复杂逻辑必须拆分为多个函数,确保每个函数的职责单一。
3.2 命名规范
- 变量与函数:使用
camelCase(小驼峰命名法),如userProfile,generateReport。 - 类与接口:使用
PascalCase(大驼峰命名法),如UserService,ReportGenerator。 - 常量:使用
UPPER_SNAKE_CASE(全大写蛇形命名法),如MAX_RETRIES,API_TIMEOUT。 - 文件与目录:使用
kebab-case(短横线命名法),如user-service.ts,data-fetcher.ts。
4. 注释与文档
每个模块、类和复杂函数必须包含文件头部文档或块级注释,简要说明其作用。必须使用标准的 JSDoc 格式来解释功能、参数和返回值:
/**
* 计算两个数的和。
* @param {number} a - 第一个加数。
* @param {number} b - 第二个加数。
* @returns {number} - 返回两数之和。
*/
function add(a: number, b: number): number {
return a + b;
}
5. 开源许可证声明
所有源代码文件的顶部必须包含开源相关的版权信息与 SPDX 格式的许可证标识。 本项目源代码统一采用 MIT 许可证。在每个 .ts 或者 。js 文件头部必须添加如下块级注释:
/**
* Project Caffeine
* Copyright (c) 2025-2026 Gitconomy Research
*
* SPDX-License-Identifier: MIT
*/
为了保障代码的可追溯性并尊重每一位开发者的劳动成果,当新的团队成员或开源社区开发者对该文件进行了实质性修改或重构时,应当在头部的 Contributors 列表中追加自己的信息。
在每个 .ts 或 .js 文件头部,必须添加如下块级注释模板:
/**
* Project Caffeine
* Copyright (c) 2025-2026 Gitconomy Research
*
* SPDX-License-Identifier: MIT
*
* Contributors:
* - 郭晧 <guohao@gitconomy.org> (Initial Author)
* - [新贡献者姓名/ID] <[联系邮箱]> ([简述贡献内容,例如:重构了 LRU 缓存模块 / 2026-03])
* - [其他贡献者姓名] <[联系邮箱]> ([例如:修复了 MCP 握手超时的 Bug / 2026-04])
*/
6. 目录结构与模块化解耦
系统应保持高度的模块化,功能模块应独立且彼此解耦。建议采用以下标准目录结构:
/src/controllers:控制器,处理传入的 JSON-RPC 或 HTTP 请求。/src/services:服务层,包含核心的 MCP 业务逻辑。/src/models:数据模型与 Schema 定义。/src/routes:路由定义(适用于 HTTP+SSE 传输模式)。/src/utils:跨模块共享的工具函数。/config:环境与系统配置文件。/tests:单元测试与集成测试文件。
7. MCP 协议与核心原语
系统全面采用 JSON 格式作为基础数据承载体,并依赖 JSON-RPC 2.0 协议规范来管理消息交换。
- 传输层:本地服务必须采用 STDIO 协议进行无网络开销的直接通信。云端部署则采用 HTTP + SSE 模式。
- Tools (工具):暴露给 LLM 的操作必须通过
tools/list注册,并包含严谨的inputSchema。 - Resources (资源):被动的静态上下文数据需通过
resources/list和resources/read暴露。 - Prompts (提示词):作为复用模板,通过
prompts/list暴露,指导模型构造标准化交互结构。
8. 异常处理与日志记录
7.1 错误捕获与响应
- 在业务逻辑中,必须使用
try-catch语句来捕获和处理可能的错误。 - 对于 HTTP/SSE 传输层,遇到预期错误需返回适当的 HTTP 状态码(如 400 错误请求、404 未找到资源)。对于不可预见的严重异常,返回 500 错误。
- 在 MCP 协议层,所有错误必须被标准封装为 JSON-RPC 错误对象,并返回给客户端。
7.2 日志系统
- 必须使用成熟的日志库(如
winston或log4js)来记录事件。 - 明确日志级别:
info(正常操作流程)、warn(潜在问题)、error(系统异常)。 - 记录重要事件(如用户操作、API 调用),以便追踪、审计和发现模型幻觉。
- 安全红线:绝对禁止在生产环境日志中记录敏感信息(如用户密码、API 密钥、未脱敏的凭证)。
8. 性能优化与上下文管理
- 异步编程:必须使用
async/await或Promise处理网络与文件 I/O,确保不阻塞 Node.js 事件循环。 - 语义分块:对于长篇文档的读取,服务端必须在本地完成文本解析与切割,仅将高度相关的片段同步给客户端,防止 LLM Token 耗尽。
- 缓存与数据库:对于频繁查询的数据,采用 LRU(最近最少使用)缓存策略或引入外部缓存(如 Redis)以减少负载。同时需使用合适的索引、查询优化和分页技术,避免数据库性能瓶颈。
9. 安全性与权限管控
协议必须遵循“零信任架构原则”,将 AI 生成的指令视为不可信负载。
- 数据加密:敏感信息必须加密存储,使用
bcrypt或argon2进行密码哈希处理。 - 认证与授权:系统通信应使用 JWT 或 OAuth 2.0/2.1 进行认证,并采用作用域限定防止令牌滥用。
- Roots 隔离:必须实现 Roots(根目录)机制,服务端依据宿主应用传递的 URI 列表划定沙箱,阻断越权访问和路径遍历漏洞。
- 定期进行安全审计,确保代码没有易受攻击的注入漏洞。
许可声明
本文档采用 知识共享署名--相同方式共享 4.0 国际许可协议 (CC BY--SA 4.0) 进行许可,© 2025-2026 Gitconomy Research.