admin.xpcool.com/agents.md
夏犀麟 0ab6cf5f17
Some checks failed
Build and Deploy (admin.xpcool.com) / build-and-deploy (push) Failing after 5m25s
CHG: 登录页去除账号下拉与内置密码;house 模块前端;Gitea act_runner 自动部署 workflow
- login.vue:移除 selectAccount 下拉与 MOCK_USER_OPTIONS(代码不存账号密码),手输+记住账号
- .env.production:VITE_GLOB_API_URL=/api/service(同源反代)
- house:api/house.ts + views/house/{community,listing,dashboard,data}
- .gitea/workflows/deploy.yml:node22 + pnpm11.16 + vite 直跑构建 → /data/www/admin.xpcool.com
2026-08-26 23:55:07 +08:00

151 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# agents.md — 项目上下文档案(跨账号迁移单一事实源)
> **用途**:让任何 AI 助手WorkBuddy 其他账号 / 其他 AI 工具)接手本项目时,无需重新摸索即可无缝衔接。
> **维护约定**:每次操作(改代码 / 跑命令 / 决策 / 踩坑)后,更新下方「操作日志」章节;环境与架构变化同步更新对应章节。
> **首次建立**2026-08-24
---
## 1. 项目概况
| 项 | 值 |
|---|---|
| 业务名 | admin.xpcool.com |
| 工作目录 | `E:\xxcool\project\admin.xpcool.com` |
| 基础框架 | Vue Vben Admin **5.7.0**(官方 monorepo 模板) |
| 技术栈 | Vue 3 + TypeScript + Vite + pnpm 11 + turbomonorepo+ TDesign |
| 代码来源 | 官方仓库 `vbenjs/vue-vben-admin` 克隆remote 为 ghproxy 镜像:`https://ghproxy.net/https://github.com/vbenjs/vue-vben-admin.git` |
| 当前基线 | 已精简为单一应用 **web-tdesign**,并开始业务定制(`apps/web-tdesign/src/views/_core/authentication/login.vue` 已修改) |
| git 分支 | `main`(仅 origin/main |
## 2. 应用清单apps/
| 应用 | 包名 | UI 库 | dev 端口 | 启动命令 |
|---|---|---|---|---|
| web-tdesign | `@vben/web-tdesign` | TDesign | **5999**(被占用自动切 6000 | `pnpm dev:tdesign` |
> 本业务**唯一主应用为 web-tdesign**`.env.development` 设 `VITE_PORT=5999`)。项目已从官方多应用模板精简,仅保留此应用。
## 3. 环境要求与本机踩坑记录(重要)
### 版本要求package.json engines
- Node `^22.18.0 || ^24.12.0`
- pnpm `>=11.0.0``packageManager: pnpm@11.16.0`
### 本机Windows已验证的运行方式 —— 直接复制可用
```bash
# 关键pnpm 11.16.0 用到 node:sqlite必须给 NODE_OPTIONS 加 --experimental-sqliteNode 22 需 flag
export NODE_OPTIONS="--experimental-sqlite"
# 建议:把 managed node 22.22.2 放到 PATH 最前(避免系统 node 23 引擎不匹配告警)
export PATH="/c/Users/ybtdevxxl/.workbuddy/binaries/node/versions/22.22.2:$PATH"
# 用 managed node 的 corepack 驱动 pnpm
CORE="/c/Users/ybtdevxxl/.workbuddy/binaries/node/versions/22.22.2/corepack.cmd"
"$CORE" pnpm install # 安装依赖
"$CORE" pnpm dev:tdesign # 启动开发服务器
```
### 坑 1node:sqlite 模块缺失2026-08-26 实际遇到,本次修复根因)
- 现象:`pnpm --version` / `pnpm install``ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite``at ../store/index/lib/index.js`
- 原因:**pnpm 11.16.0 在解析包元数据时强依赖 `node:sqlite`**,而系统 Node 23.0 / managed Node 22 默认未启用该内置模块22.5+ 起在 `--experimental-sqlite` 标志后可用23.4 才默认开)
- 解法:`NODE_OPTIONS=--experimental-sqlite` 后再跑 pnpm本次直接沿用该法装依赖、起服务均成功
### 坑 2NODE_OPTIONS 污染 / shim
- 现象:`pnpm install` 报 `[ERROR] [safe-delete] 操作失败 ... Some operations were aborted`WorkBuddy 注入 `--require=...genie-safe-delete.cjs --use-system-ca`
- 原因:该 shim 会拦截 pnpm 的删除/符号链接操作
- 解法:在写死 `NODE_OPTIONS=--experimental-sqlite` 时已同时覆盖掉 shim如要保留 shim则先 `unset NODE_OPTIONS` 再补 flag
### 坑 3Windows 符号链接权限
- 现象:`pnpm install` 报 `UNKNOWN: unknown error, symlink ...`hoist 阶段失败
- 原因:本机未开「开发者模式/无管理员权限」pnpm 默认 symlink 创建失败
- 解法:项目 `.npmrc` 已改用 `node-linker=hoisted`(扁平化)方案规避,见下
### 镜像与链接配置(.npmrc
```ini
registry=https://registry.npmmirror.com
node-linker=hoisted # 避免 symlink 权限问题,走扁平化安装
store-dir=E:\.pnpm-store # store 与项目同盘E 盘),走同卷硬链接,快且无需管理员权限
```
## 4. 常用命令
```bash
# 依赖
pnpm install # 装依赖preinstall 会校验必须用 pnpmpostinstall 跑 stub
pnpm reinstall # 清 lock 重装(= clean --del-lock && install
# 开发
pnpm dev:tdesign # 启动 web-tdesign默认 http://localhost:5999被占用自动切 6000
pnpm dev # turbo 并行起所有 app
# 构建 / 检查
pnpm build:tdesign # 构建 web-tdesign
pnpm check:type # 类型检查turbo run typecheck
pnpm lint # 代码检查
pnpm test:unit # 单元测试vitest
```
## 5. 架构速览Vben Admin 5 monorepo
```
apps/ 应用层web-tdesign唯一主应用
internal/ 内部工具vite-config、tsconfig、eslint/stylelint/oxlint 配置、tailwind-config、turbo-run
packages/ 共享包:@core核心 UI/布局、effects请求/权限/hooks/插件、stores、locales、
preferences偏好设置、icons、constants、utils、styles、types
```
- 主应用源码入口:`apps/web-tdesign/src/`
- 路由:`src/router/routes/modules/`dashboard.ts / demos.ts / vben.ts
- 页面:`src/views/`
- API`src/api/request.ts`(封装 `requestClient`)、`src/api/core/`
- 偏好:`src/preferences.ts``defineOverridesPreferences`,官方默认 + 少量扩展字段)
- 环境变量:`apps/web-tdesign/.env.development``VITE_PORT=5999`
- 路径别名:`#/*` → `./src/*`package.json imports
### 关键开发约定Vben 5 特有)
- 权限:`preferences.ts` 的 `app.accessMode`frontend/backend/mixed按钮级用 `<AccessControl :codes>` / `hasAccessByRoles` / `v-access:code`
- API 请求:`requestClient.get/post<Type>(url)`,代理在 `vite.config.ts`
- 国际化:`$t()`,语言包在 `packages/locales`
- 主题CSS 变量覆盖(`:root { --primary: ... }`),偏好里 `theme.builtinType/colorPrimary`
- 详细参考:本机已装 vben skill`C:\Users\ybtdevxxl\.workbuddy\skills\vben`,含 20+ references
## 6. 操作日志
> 倒序(最新在上)。每条:日期 / 操作 / 结果 / 备注
### 2026-08-26修复依赖安装
1. **问题**`pnpm install` 装不上,报 `ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite`
2. **根因**pnpm 11.16.0 强依赖 `node:sqlite`,但系统 Node 23.0 / managed Node 22 默认未启用该内置模块(需 `--experimental-sqlite` 标志)
3. **修复**:设 `NODE_OPTIONS=--experimental-sqlite` 后用 managed node 22.22.2 + corepack 跑 `pnpm install` → 成功39 workspace 项目Already up to date
4. **启动**`pnpm dev:tdesign` → Vite readyhttp://localhost:60005999 被占用自动切换)✅ HTTP 200标题「Vben Admin Tdesign」
5. **澄清项目结构**:确认项目已精简为**唯一应用 web-tdesign**(非 agents.md 旧记录的 web-antd同步更新本档案
6. **残留进程清理**:终止了此前多次失败重试遗留的 pnpm/tsdown/stub 后台进程
### 2026-08-24首次搭建
1. **梳理项目**:确认为 Vben Admin 5.7.0 官方模板克隆,无业务定制;主应用 web-antd端口 5666
2. **安装依赖**
- 第 1 次失败NODE_OPTIONS safe-delete shim 拦截 → 解法 `unset NODE_OPTIONS`
- 第 2 次失败Windows symlink 权限 → 解法 `.npmrc``package-import-method=copy`
- 最终:`pnpm install` 成功46 workspace 项目1723 包)✅
3. **启动开发服务器**`pnpm dev:antd` → 验证 http://localhost:5666 (状态见下)
4. **建立本文件 agents.md**:项目上下文档案 + 操作日志机制
5. **建立工作日志**`.workbuddy/memory/YYYY-MM-DD.md`(每日记录,跨账号迁移时连同 agents.md 一起拷贝)
## 7. 迁移清单(换 WorkBuddy 账号 / 换机器时)
1. 拷贝整个项目目录(含 `node_modules` 可不拷,重新 install 即可)
2. 必拷文件:`agents.md`(本文件)+ `.workbuddy/memory/`(历史工作日志)
3. 本机环境要点(新机器):
- Node ≥ 22.18pnpm ≥ 11corepack
- 跑 pnpm 前设 `NODE_OPTIONS=--experimental-sqlite`(否则报 node:sqlite 缺失)
- Windows 无开发者模式时保持 `.npmrc``node-linker=hoisted``store-dir=E:\.pnpm-store`
4. 装依赖后先 `pnpm dev:tdesign` 验证 5999/6000 端口
## 统一工作约定xpcool.com 中央规则)
> 与中央 `../workbuddy.xpcool.com/.workbuddy/memory/MEMORY.md` 保持一致;本项目变更流水在 `.workbuddy/memory/CHANGELOG.md`。
1. **中文注释**:写/改代码时,在应有处(函数、复杂逻辑、配置项、非显然分支)加中文注释。
2. **做记录**:每次请求/变更/修复/文档动作,都在本项目 `.workbuddy/memory/CHANGELOG.md` 顶部追加一条,格式 `YYYY-MM-DD | 类型 | 一句话摘要`类型REQ/CHG/FIX/DOC/CFG/DEP
3. **中文优先**:与用户的思考、输出、交流,能中文尽量中文。