This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
项目: dt-doraemon (哆啦A梦) — 开发者工具箱平台,包含代理服务、主机管理、配置中心、MCP 服务器注册中心、Skill 市场、Agent 市场等模块。
技术栈: Egg.js 2.x + React 16 SSR + MySQL (Sequelize) + Webpack 4 + Redux + Socket.IO。
项目使用 Node.js 18(.nvmrc 锁定为 18.20.3),依赖管理使用 Yarn。
# 切换到正确的 Node 版本
fnm use 18
# 或
nvm use
# 安装依赖
yarn install# 开发启动(Egg.js dev + Webpack HMR,访问 http://127.0.0.1:7001)
npm run dev
# 生产启动
npm start
# 构建前端资源
npm run build
# 代码检查
npm run lint # prettier + eslint + stylelint
npm run lint:fix # 自动修复
npm run check-types # TypeScript 类型检查(仅前端 app/web/)
# 单独运行测试(主项目使用 Node.js 内置 test runner)
node --test test/*.test.js
# dt-skill CLI 子项目(独立 npm 包)
cd dt-skill
npm run build
npm run test:src # vitest 测试
node bin/dt-skill.js --helpapp/
controller/ # Egg.js 控制器(路由处理)
service/ # Egg.js 服务层(业务逻辑)
model/ # Sequelize 模型定义
middleware/ # Egg.js 中间件(access, proxy)
schedule/ # Egg.js 定时任务
web/ # React 前端源码(SSR)
pages/ # 页面组件
router/ # React Router 配置
store/ # Redux store(thunk + devtools)
api/ # API 请求封装(基于 url + method 映射)
layouts/ # 布局组件(basicLayout, sider, header)
mcp/ # MCP 服务器生命周期管理逻辑
agent/ # Agent 进程 MCP 相关处理器
utils/ # 后端工具函数
config/
config.default.js # Egg.js 默认配置
config.local.js # 本地开发配置(含 MySQL、Webpack)
config.test.js # 测试环境配置
config.prod.js # 生产配置
plugin.js # Egg.js 插件注册(sequelize, reactssr, io, ssh)
dt-skill/ # ClawHub CLI 子项目(TypeScript + Vitest,独立包)
specs/ # 功能规格说明文档
sql/ # 数据库初始化 SQL(doraemon.sql)
test/ # 主项目测试文件(Node.js 内置 test runner)
- 入口:
app.js(AppBootHook) 和agent.js(Agent 进程生命周期)。 - 路由:
app/router.js集中定义所有 RESTful 路由和代理路由/proxy/:id/*。 - MCP 生命周期: Agent 进程 (
agent.js) 负责 MCP 服务器的启动、停止、重启代理。Worker 进程通过app.messenger与 Agent 通信。 - 定时任务:
app/schedule/包含文章订阅和 MCP 健康检查任务。 - 文件上传: 使用 Egg.js multipart,临时文件存放于
cache/uploads/,大小限制 200MB,白名单允许所有类型。
- ORM: Sequelize(
egg-sequelize插件)。 - 配置位置:
config/config.local.js(本地默认数据库doraemon_test,host127.0.0.1,用户名root,密码123456)。 - 生产配置: 从
env.json的mysql.prod读取。 - 初始化: 导入
sql/doraemon.sql到 MySQL。
env.json: 存放 webhook URL、MySQL 配置、MCP 端口(mcpEndpointPort: 7005,mcpInspectorWebPort: 7003,mcpInspectorServerPort: 7004)。- CSRF 已全局禁用(
config.default.js)。 app.utils在app.js启动时挂载为全局工具对象。
- React 16.9 + Redux + Redux-Thunk + React Router 4
- Ant Design 4.15.6 + 自定义主题 (
theme.js) - TypeScript(仅用于前端
app/web/,编译目标 ES5) - SCSS / Less(
app/web/scss/,app/web/pages/*/style.scss)
- Webpack 4 通过
easywebpack-react配置(webpack.config.js)。 - 开发时自动注入 CSS(
injectCss: true)。 - DLL 预打包:react, redux, react-router, xterm 等。
- 路径别名:
@->app/web/,@env->env.json。 - 全局变量:
EASY_ENV_IS_DEV用于区分开发/生产环境。
- Redux store 在
app/web/store/index.ts创建,使用redux-devtools-extension(开发环境)。 - Thunk 注入
{ API }作为 extraArgument,API 通过app/web/api/index.ts根据url.ts中的 URL + method 配置自动生成。
- 前端路由定义在
app/web/router/index.ts,使用react-router-config风格配置。 - 所有页面路由前缀为
/page/*,SSR 布局为BasicLayout。 - 部分页面使用
react-loadable做代码分割(如 ConfigDetail, SwitchHostsEdit)。
- 位置:
dt-skill/,独立的 npm 包,ES Module("type": "module")。 - 用途: 命令行工具,用于安装、搜索、发布 agent skills 和 OpenClaw 包。
- 入口:
bin/dt-skill.js。 - 构建:
node ./scripts/build.mjs,输出到dist/。 - 测试: Vitest,配置在
vitest.config.ts(测试src/**/*.test.ts)。 - Node 版本要求:
>=18.17(与主项目 Node 18 对齐;npx dt-skill/test:src均可在 18 上运行)。 - 默认 Registry: 内网部署
http://172.16.100.225:7001(无 flag/env 时开箱即用)。 - 本地开发覆盖:
优先级:
export DT_SKILL_REGISTRY=http://127.0.0.1:7001 # 或 node bin/dt-skill.js --registry http://127.0.0.1:7001 search foo
--registry>DT_SKILL_REGISTRY> 本机缓存 > site 发现 > 内置默认。
- 主项目: 使用 Node.js 内置
node:test+node:assert/strict。测试文件在test/*.test.js。 - dt-skill: 使用 Vitest。运行
cd dt-skill && npm run test:src。 - 原则: 测试时不应该绕过待测组件用 curl 模拟。如果要测 CLI,运行真正的 CLI 命令;如果要测 API,通过客户端发请求。
- ESLint 继承
ko-lint-config(.eslintrc.js)。 - Prettier 继承
ko-lint-config/.prettierrc(.prettierrc.js)。 - Stylelint 继承
ko-lint-config/.stylelintrc(.stylelintrc.js)。 - Git 提交使用 Commitizen(
cz-conventional-changelog),commit message 需符合 conventional commits 规范,由 husky + commitlint 校验。
- GitHub Actions:
.github/workflows/CI.yml。 - 在
push到master或任意pull_request时触发。 - 流程: 安装依赖 -> Prettier -> ESLint -> Stylelint -> check-types -> build。
- Node 版本: 18.x,需设置
NODE_OPTIONS=--openssl-legacy-provider。
master: 主干分支,用于生产发布。dev: 主开发分支。feat_版本号_xxx: 新特性分支,从master切出,开发完 PR 到dev。hotfix_版本号_xxx: Bug 修复分支,从master切出,修复完 PR 到dev,验证后合并到master。
Issues / specs / tickets live as local markdown under .scratch/<feature-slug>/. See docs/agents/issue-tracker.md.
Default vocabulary: needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix (written as Status: on local ticket files). See docs/agents/triage-labels.md.
Single-context layout: optional root CONTEXT.md + docs/adr/. See docs/agents/domain.md.