Skip to content

Commit 7e05baf

Browse files
committed
更新 AGENTS.md 文档,重构项目概览、构建与开发命令、代码风格与规范及行为准则部分
1 parent 9c9f098 commit 7e05baf

File tree

1 file changed

+121
-57
lines changed

1 file changed

+121
-57
lines changed

AGENTS.md

Lines changed: 121 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,123 @@
11
# AI Agent 开发指南 (AGENTS.md)
22

3-
## 项目概览
4-
本项目是一个使用 Cloudflare Containers (支持 Docker 的 Workers) 的 Cloudflare Workers 项目。
5-
项目完全使用 TypeScript 编写,并依赖 `wrangler` CLI 进行开发和部署。
6-
7-
**⚠️ 重要原则:本项目的官方语言为中文。所有的文档、注释、提交信息(Commit Messages)请务必使用中文。**
8-
9-
## 构建与开发命令
10-
11-
| 命令 | 说明 |
12-
|------|------|
13-
| `npm run dev` | 启动本地开发服务器 (`wrangler dev`) |
14-
| `npm run start` | `npm run dev` 的别名 |
15-
| `npm run deploy` | 部署到 Cloudflare (`wrangler deploy`) |
16-
| `npm run cf-typegen` | 生成 Cloudflare Bindings 的类型定义 (`wrangler types`) |
17-
18-
> **关于测试**: 目前仓库中**没有任何测试框架或测试套件**
19-
> 请勿尝试运行测试。如果任务要求添加测试,请建议使用 **Vitest**
20-
21-
## 代码风格与规范
22-
23-
### 格式化 (Formatting)
24-
- **缩进**: 2 个空格。
25-
- **分号**: 语句末尾**不使用**分号 (ASI)。
26-
- **引号**: 字符串使用单引号 `'`
27-
- **尾随逗号**: 在有效的地方使用尾随逗号 (ES2017+)。
28-
29-
### 命名规范
30-
- **文件名**: `camelCase` (小驼峰),例如 `container.ts`, `sse.ts`, `index.ts`
31-
- **变量与函数**: `camelCase` (小驼峰),例如 `verifyBasicAuth`, `processSSEStream`
32-
- **类与组件**: `PascalCase` (大驼峰),例如 `AgentContainer`
33-
- **接口与类型**: `PascalCase` (大驼峰),例如 `SSEEvent`
34-
- **常量**: `UPPER_CASE` (全大写下划线),例如 `PORT`, `SINGLETON_CONTAINER_ID`
35-
36-
### TypeScript 与类型
37-
- **严格模式**: 已启用 (`strict: true`)。尽可能避免使用 `any`
38-
- **导出模式**: `index.ts` 的默认导出应使用 `satisfies ExportedHandler<Cloudflare.Env>`
39-
- **环境变量**: 通过 `import { env } from 'cloudflare:workers'` 访问。
40-
41-
### 架构模式
42-
- **Cloudflare 特性**:
43-
- 使用 `cloudflare:workers``@cloudflare/containers`
44-
- `AgentContainer` 继承自 `Container`,用于处理 Durable Object/Container 逻辑。
45-
- **错误处理**:
46-
- 对于预期的流程(如认证失败),优先返回 `null` 或特定的错误对象/Response,而不是抛出异常。
47-
- 对于外部 IO/解析(如 SSE 流处理),必须使用 `try-catch` 块。
48-
- **注释**:
49-
- **必须使用中文**编写所有新的注释和文档。
50-
- 现有的英文注释在修改时建议翻译为中文。
51-
52-
### 导入顺序
53-
1. 外部库 (`cloudflare:workers`, `@cloudflare/containers`)。
54-
2. 本地内部模块 (`./container`, `./sse`)。
55-
56-
## Agent 行为准则
57-
1. **无测试环境**: 由于没有测试,必须通过仔细的代码审查和类型检查 (`npm run cf-typegen`) 来验证更改。
58-
2. **Wrangler 为准**: 认定 `wrangler` 配置文件和命令是 Bindings 和配置的唯一真理来源。
59-
3. **异步/Await**: 确保 Promise 被正确处理。注意:某些后台任务(如 `watchContainer`)在特定生命周期钩子(如 `onStart`)中可能**故意不被 await**,以避免阻塞,但需确保有错误捕获。
3+
## 1. 项目概览
4+
本项目是一个基于 **Cloudflare Workers****Cloudflare Containers** (Durable Objects) 的 TypeScript 项目。
5+
项目核心目标是利用 Cloudflare 的边缘基础设施来运行和管理容器化工作负载 (`AgentContainer`)。
6+
7+
**⚠️ 核心原则:本项目的官方语言为中文。所有的文档、注释、提交信息(Commit Messages)必须使用中文。**
8+
9+
## 2. 构建与开发命令
10+
11+
由于本项目没有集成测试框架,开发流程严重依赖类型检查和本地模拟。
12+
13+
| 命令 | 说明 | 备注 |
14+
|------|------|------|
15+
| `npm run dev` | 启动本地开发服务器 | 等同于 `wrangler dev` |
16+
| `npm run start` | `npm run dev` 的别名 | - |
17+
| `npm run deploy` | 部署到 Cloudflare | 等同于 `wrangler deploy` |
18+
| `npm run cf-typegen` | 生成 Cloudflare Bindings 类型 | 修改 `wrangler.jsonc` 后必须运行 |
19+
20+
> **关于测试**:
21+
> 目前仓库中**没有任何测试框架** (Jest/Vitest)。
22+
> 请勿尝试运行 `npm test`
23+
> 如果需要验证逻辑,请依靠 TypeScript 编译器 (`npm run cf-typegen`) 和人工代码审查。
24+
25+
## 3. 代码风格与规范 (Code Style)
26+
27+
### 3.1 格式化 (Formatting)
28+
- **缩进**: 2 个空格 (2 Spaces)。
29+
- **分号**: 语句末尾**不使用**分号 (ASI 风格)。
30+
- **引号**: 字符串优先使用单引号 `'`
31+
- **尾随逗号**: 在多行对象/数组定义中保留尾随逗号 (ES2017+)。
32+
- **代码块**: 始终使用花括号 `{ ... }`,即使是单行 `if` 语句。
33+
34+
### 3.2 命名规范 (Naming Conventions)
35+
- **文件名**: 使用 `camelCase` (小驼峰),例如 `container.ts`, `sse.ts`
36+
- **类 (Classes)**: 使用 `PascalCase` (大驼峰),例如 `AgentContainer`
37+
- **接口/类型 (Interfaces/Types)**: 使用 `PascalCase`,例如 `SSEEvent`
38+
- **变量/函数**: 使用 `camelCase`,例如 `verifyBasicAuth`, `processSSEStream`
39+
- **常量**: 使用 `UPPER_CASE` (全大写下划线),例如 `PORT`, `SINGLETON_CONTAINER_ID`
40+
- **私有属性**: 类中的私有属性建议以 `_` 开头(可选),如 `_watchPromise`
41+
- **布尔变量**: 建议使用 `is`, `has`, `should` 前缀,如 `isAuthorized`
42+
43+
### 3.3 TypeScript 最佳实践
44+
- **Strict Mode**: 严格模式已启用。**禁止**使用 `any`,除非万不得已。
45+
- **类型定义**:
46+
- 优先使用 `interface` 定义对象结构,使用 `type` 定义联合类型。
47+
- 使用 `satisfies` 关键字来验证导出对象 (如 `export default { ... } satisfies ExportedHandler`)。
48+
- **环境绑定**: 只能通过 `import { env } from 'cloudflare:workers'` 访问环境变量。不要使用 `process.env`
49+
- **空值处理**: 优先使用可选链 `?.` 和空值合并 `??`
50+
51+
### 3.4 导入顺序 (Import Order)
52+
保持清晰的导入分层:
53+
1. **外部依赖**: `cloudflare:workers`, `@cloudflare/containers` 等第三方库。
54+
2. **内部模块**: `./container`, `./sse` 等本地文件。
55+
3. **类型导入**: `import type { ... }` 显式区分类型导入。
56+
57+
## 4. 架构与设计模式
58+
59+
### 4.1 Worker 入口与路由
60+
- `src/index.ts` 是 Worker 的入口点。
61+
- 它负责处理 HTTP 请求路由、基本的身份验证 (`verifyBasicAuth`) 和请求转发。
62+
- **模式**: 函数优先返回 `null` 表示“无错误/继续处理”,返回 `Response` 对象表示“拦截/错误”。
63+
```typescript
64+
// 示例模式
65+
function checkAuth(req): Response | null {
66+
if (fail) return new Response('401', ...);
67+
return null; // Pass
68+
}
69+
```
70+
71+
### 4.2 AgentContainer (Durable Object)
72+
- 位于 `src/container.ts`
73+
- 继承自 `Container` (来自 `@cloudflare/containers`)。
74+
- **Singleton 模式**: 通过 `idFromName(SINGLETON_CONTAINER_ID)` 确保全局唯一实例,便于状态管理。
75+
- **生命周期**:
76+
- `onStart`: 容器启动钩子。用于初始化后台任务。
77+
- **重要**: 后台任务 (如 `watchContainer`) 在 `onStart`**不应被 await**,以避免阻塞 DO 的启动过程,但必须捕获错误 (fire-and-forget 模式)。
78+
79+
### 4.3 错误处理 (Error Handling)
80+
- **HTTP 错误**: 优先返回标准的 HTTP 状态码 Response (401, 403, 500)。
81+
- **外部 I/O**: 对所有网络请求 (fetch, stream reading) 必须使用 `try-catch` 包裹。
82+
- **SSE 流**: 处理 Server-Sent Events 时,需确保 Reader 的生命周期管理,并在连接断开时优雅退出,避免资源泄漏。
83+
84+
## 5. Agent 行为准则 (Behavior Guidelines)
85+
86+
当作为 AI Agent 修改此代码库时,请严格遵循以下规则:
87+
88+
1. **语言一致性**:
89+
- 所有的代码注释必须使用**中文**
90+
- Git Commit Message 必须使用**中文**
91+
- **禁止**在代码中混用英文注释。
92+
93+
2. **无损修改**:
94+
- 在没有测试的情况下,修改代码时必须极其谨慎。
95+
- 每次修改后,建议运行 `npm run cf-typegen` 确保类型定义与 `wrangler.jsonc` 保持同步。
96+
- 修改现有功能前,务必理解其副作用 (Side Effects)。
97+
98+
3. **配置为王**:
99+
- `wrangler.jsonc` 是基础设施配置的唯一真理来源 (Source of Truth)。
100+
- 不要硬编码配置值 (如端口、密钥),应使用 Bindings 或环境变量。
101+
- 如果代码中需要新变量,必须先更新 `wrangler.jsonc` 并运行 `cf-typegen`
102+
103+
4. **文件操作**:
104+
- 优先修改现有文件,避免创建过多的碎片化小文件。
105+
- `worker-configuration.d.ts` 是自动生成的,**不要手动修改**它。
106+
- 保持目录结构扁平化,不要过度嵌套。
107+
108+
5. **依赖管理**:
109+
- 仅使用 `package.json` 中定义的依赖。
110+
- 如需引入新库,需先评估其在 Cloudflare Workers Runtime 中的兼容性 (注意:Node.js API 支持有限)。
111+
- 尽量使用 Web Standard APIs (Request, Response, fetch, Streams) 而非 Node.js 特有 API。
112+
113+
## 6. 工具链说明
114+
115+
- **Wrangler**: 核心 CLI 工具。所有部署、开发、配置都通过它完成。
116+
- **ESLint/Prettier**: 目前项目中未显式配置,请遵循现有代码的风格(参考 3.1 节)。
117+
- **Git**: 提交前请检查 diff,确保没有引入无用的空白字符变更。
118+
119+
## 7. Cursor/Copilot 规则集成
120+
*(本项目暂未发现 `.cursorrules``.github/copilot-instructions.md` 文件。若后续添加,请在此处补充相关规则)*
121+
122+
---
123+
*此文档由 AI Agent 维护,旨在统一开发标准与行为规范。*

0 commit comments

Comments
 (0)