本文档为 agentic coding agents 提供项目上下文和代码规范。
- 在执行前一定要将所有细节向我问清楚
- 必要的注释绝对不能少
- 在进行开发前必须先把开发的内容系统的整理并加入设计文档
- 保证当前项目设计与设计文档一致
- 对应对于所有开发的功能尽可能的提供测试
- 对于测试产生的文件日志可执行程序测试结束后需要清理
# 在项目根目录执行
./build.sh # 构建所有模块(后端、CLI、前端),输出到 target/ 目录要求:后端的测试或运行需要在target目录下,以避免运行时生成的文件污染开发环境!
# 在 tlcpchan/ 目录下执行
cd tlcpchan
go build -o tlcpchan # 构建核心服务
go test ./... -v # 运行所有测试
go test ./path/to/package -run TestName -v # 运行单个测试
go fmt ./... # 格式化代码
go vet ./... # 静态检查# 在 tlcpchan-ui/ 目录下执行
cd tlcpchan-ui
npm install # 安装依赖
npm run dev # 开发模式启动
npm run build # 生产构建,输出到 ui/ 目录
npm run test # 运行所有测试
npm run test:watch # 监听模式运行测试# 在 tlcpchan-cli/ 目录下执行
cd tlcpchan-cli
go build -o tlcpchan-cli # 构建命令行工具- 若opencode运行用户为root时,需要使用chrome-dev-tools 时,总是以 --no-sandbox 启动google-chrome
- Windows环境中如果有git-bash.exe 优先使用这个最为shell的执行器(默认路径
C:\Program Files\Git\git-bash.exe)
TLCP Channel 是一款 TLCP/TLS 协议代理工具,支持双协议并行工作。
tlcpchan/- Go 核心代理服务tlcpchan-cli/- 命令行工具tlcpchan-ui/- Web 前端界面
- 始终使用中文(简体)思考和回复
- 代码注释、提交信息使用中文
import (
// 标准库
"context"
"fmt"
// 第三方库
"github.com/Trisia/gotlcp"
// 本项目内部包
"github.com/Trisia/tlcpchan/proxy"
)- 包名:小写单词,如
proxy,cert - 导出函数/类型:大驼峰,如
NewProxyServer - 私有函数/变量:小驼峰,如
parseConfig - 接口:动词或名词+er,如
Handler,ConnectionReader - 常量:大驼峰或全大写,如
AuthNone或MAX_SIZE
if err != nil {
return fmt.Errorf("连接失败: %w", err)
}logger.Info("代理服务启动", zap.String("address", addr))
logger.Error("连接失败", zap.Error(err), zap.String("remote", remoteAddr))- 组件:大驼峰,如
ProxyConfig.tsx - 工具函数:小驼峰,如
formatBytes.ts - 类型定义:大驼峰,如
Instance.ts
- 使用
github.com/Trisia/gotlcp库处理 TLCP 协议 - 证书使用国密 SM2 算法
- 双协议模式同时支持 TLCP 和 TLS
- 配置文件使用 YAML 格式,默认路径
/etc/tlcpchan/config.yaml - 支持环境变量覆盖配置项
- 工作目录:Linux 为
/etc/tlcpchan,Windows 为程序所在目录
- RESTful API 路由前缀:
/api - 响应格式: HTTP RESTful,状态使用 HTTP status code 返回,内容直接在 body 中返回,例如
code 500 body:系统内部错误 - API 服务默认地址:
:20080
func TestProxyConnection(t *testing.T) {
tests := []struct {
name string
input string
wantErr bool
}{
{"正常连接", "localhost:8080", false},
{"连接超时", "invalid:9999", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 测试逻辑
})
}
}- 使用 Vitest,组件测试使用 Testing Library
类型: 简短描述
详细说明(可选)
类型:feat fix docs refactor test chore
- 不提交敏感信息(密钥、证书、密码等)
- 使用 context.Context 进行超时和取消控制
- 工作目录结构:certs/(证书)、trusted/(信任证书)、logs/(日志)、config/(配置)
无论是修改,还是创建都应该遵守函数注释规范!
除非函数功能特别简单直观(如简单的 getter/setter),否则必须为函数编写详细注释。
后端(Go)函数必须严格遵循注释规范,前端(TypeScript/React)函数可根据场景灵活处理。
注释应包括:
- 函数功能:简要描述函数的作用
- 参数说明:每个参数的含义和约束
- 返回值说明:返回值的含义,特别是错误情况
- 注意事项:使用时需要注意的事项(如果有)
所有 DTO(数据传输对象)、配置对象和关键结构体必须添加详细的注释说明:
- 枚举类型:说明所有可选值及其含义
- 数值类型:明确说明数值单位
- 字符串类型:如有特殊意义需说明,如有明确构成成分应举例说明
- 在创建、修改、编辑 HTTP接口时,总是更新接口上的apidoc文档
- 接口参数和响应值都应该遵循驼峰命名,特殊名称或缩写除外
- 当对公开接口进行修改后必须检查关联的文档、CLI、UI涉及并进行修改
- 实现可能简洁,不要过度封装
- 枚举类型的元素若元素数量少于10,下拉或其他需要循环显示的情况,直接以多行代码的方式实现,不要动态生成