<!--
---
title: "Project Caffeine 代码编写规范指南"
description: "为 Project Caffeine 项目开发人员提供一致的编码风格、系统架构指引和最佳实践的规范文档"
type: "Guide"
version: "v1.0.0"
file: project-caffeine-coding-specification-guide.md
author: "Gitconomy Research-郭晧"
date: 2026-03-02
tags:
  - Project Caffeine
  - 代码规范
  - TypeScript
  - MCP
  - Node.js
license: "CC BY-SA 4.0"
status: "Active"
---
-->
# 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** 格式来解释功能、参数和返回值：

```TypeScript
/**
 * 计算两个数的和。
 * @param {number} a - 第一个加数。
 * @param {number} b - 第二个加数。
 * @returns {number} - 返回两数之和。
 */
function add(a: number, b: number): number {
  return a + b;
}
```
---

## 5. 开源许可证声明

**所有源代码文件的顶部必须包含开源相关的版权信息与 SPDX 格式的许可证标识。** 本项目源代码统一采用 **MIT 许可证**。在每个 `.ts` 或者 `。js`  文件头部必须添加如下块级注释：

```plaintext
/**
 * Project Caffeine
 * Copyright (c) 2025-2026 Gitconomy Research
 *
 * SPDX-License-Identifier: MIT
 */
```
为了保障代码的可追溯性并尊重每一位开发者的劳动成果，当新的团队成员或开源社区开发者对该文件进行了**实质性修改或重构**时，应当在头部的 `Contributors` 列表中追加自己的信息。

在每个 `.ts` 或 `.js` 文件头部，必须添加如下块级注释模板：


```plaintext
/**
 * 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.
