# AI 助手项目说明
本文件是 AI 助手改动本仓库前必读的约定。与代码/真实结果冲突时以代码为准;不确定先问,不要臆造。
AGENTS.md(约定与铁律)docs/长期规范/AI助手必读规范/系统架构.md(运行边界、数据流、模块依赖、设计决策)docs/长期规范/AI助手必读规范/IP操盘三大核心路线.md(IP 操盘主线、验收标准和防跑偏规则)docs/长期规范/AI助手必读规范/项目术语表.md(遇到不懂的专有名词在此查证,不要臆测含义)docs/长期规范/AI助手必读规范/项目状态.md(当前进度;注意区分“代码已完成”与“线上已验收”)项目术语表.md 或询问用户,禁止臆造。App 的 currentTab 单壳切换驱动,不是常规 Angular Router 多页面应用;app.routes.ts 只保留少量旧入口/调试入口。app.ts 是历史主壳且体积很大。新业务逻辑优先放服务或独立 standalone 页面组件,不继续把流程堆进主壳。sessionToken 解析的用户决定;不得信任前端传入的 userId。VideoWorkflowEntity、VideoWorkflowAudit、VideoWorkflowMigration 或后续确认的 VideoWorkflow* 专用 Class;图片/视频/音频写七牛并登记 VideoWorkflowFileAsset。localStorage 仅允许轻量偏好和可重建缓存,短期试用/草稿使用 sessionStorage 或 IndexedDB。VideoWorkflowEntity、VideoWorkflowAudit、VideoWorkflowMigration、VideoWorkflowFileAsset 四个项目 Class;_User、APIG、APIGAuth、APIGOrder 以及其他共享/平台 Class 绝对不能动。src/app/pages/<feature>/;页面专属样式和模板与组件同目录。src/app/components/;跨页面业务逻辑、API、存储适配:src/app/services/;共享业务类型:src/app/models/。src/app/pages/pipelines/<mode>/,并同步登记 pipeline-registry.ts、AppTab/Tab 校验和主壳模板入口。server/routes/,运行时配置集中在 server/config/runtime-config.js;避免继续膨胀 server.js。cloud-functions/;共用登录态逻辑放 _session.js。cloud-functions/deployable/ 是构建产物,不手改、不提交。scripts/validation/;Playwright 场景:e2e/;单元测试与被测文件同目录,使用 *.spec.ts。docs/ 默认仅在本机保留并整体忽略,不作为提交或 CI 输入;AI 助手长期协作文档统一放在 docs/长期规范/AI助手必读规范/,仅作为本地开工读取与协作记录使用。data/、测试结果、本地部署脚本和个人资料不得作为 CI 或运行时输入。*.spec.ts 与 npm run build;改 IP 操盘主流程再运行 npm run e2e:ip-operator。npm run build:cloud-functions、npm run validate:cloud-functions、npm run smoke:cloud;真实登录态、扣费或隔离测试需用户明确提供本地临时环境变量。npm run validate:jimeng-billing;改存储边界额外运行 npm run validate:storage-policy。npm run review:guard 和 git status。提交应原子化,说明改动范围与已运行的验证;仓库没有强制 Conventional Commits 格式。AGENTS.md;阶段进度更新 docs/长期规范/AI助手必读规范/项目状态.md;技术决策在 docs/长期规范/AI助手必读规范/架构决策记录/ 新增 ADR;架构变化更新 docs/长期规范/AI助手必读规范/系统架构.md。没有需要更新时,必须显式说明“无需更新”。docs/长期规范/AI助手必读规范/系统架构.md;不能只更新项目状态或普通说明文档代替架构回写。.env、session token、用户数据、媒体产物、测试结果、deployable/ 或本地方案资料。禁止用真实生成/充值接口做无授权冒烟测试。git reset --hard、git checkout -- 等破坏性命令。# 首次克隆仓库后启用版本化 pre-commit 提醒钩子;每个工作副本执行一次。
git config core.hooksPath .githooks
# 同时启动 Angular 前端和本地 Express 后端,进行日常联调。
npm run dev
# 一次性运行 Angular/Vitest 单元测试,适合提交前或修改服务后执行。
npm test -- --watch=false
# 执行生产构建,验证严格类型、模板和构建预算。
npm run build
# 修改 IP 操盘主流程或页面交互后运行对应 Playwright 回归。
npm run e2e:ip-operator
# 修改依赖 _session.js 的云函数后,重新生成 fmode 单文件部署包。
npm run build:cloud-functions
# 修改云函数源码、函数清单或部署约定后检查部署就绪状态。
npm run validate:cloud-functions
# 修改余额、预扣、确认、退款或即梦计费逻辑后执行。
npm run validate:jimeng-billing
# 修改浏览器存储、Parse 云端实体、评论/脚本等数据边界后执行。
npm run validate:storage-policy
# 只读预览 IP 操盘测试垃圾清理候选;需要先设置 SMOKE_SESSION_TOKEN,不会删除或 purge。
npm run inspect:ip-operator-cleanup
# 按 dry-run 报告软删除 IP 操盘测试垃圾候选;必须显式传入 --confirm SOFT_DELETE_IP_OPERATOR_CANDIDATES。
npm run cleanup:ip-operator:soft -- --input tmp/<dry-run-report>.json --confirm SOFT_DELETE_IP_OPERATOR_CANDIDATES
# 按清理报告解析/物理删除 IP 操盘测试垃圾;默认只解析 objectId,真正删除必须显式传入 --confirm PHYSICAL_DELETE_IP_OPERATOR_CANDIDATES。
npm run cleanup:ip-operator:physical -- --input tmp/<cleanup-report>.json
# 只读预览当前登录用户在四个 VideoWorkflow 白名单 Class 下的测试数据;必须先设置 SMOKE_SESSION_TOKEN,不会删除。
npm run inspect:videoworkflow-cleanup
# 物理删除当前登录用户在四个 VideoWorkflow 白名单 Class 下的测试数据;必须显式传入 --confirm DELETE_VIDEO_WORKFLOW_TEST_DATA。
npm run cleanup:videoworkflow:parse -- --confirm DELETE_VIDEO_WORKFLOW_TEST_DATA
# 云函数部署或函数 ID 变更后检查线上连通性与权限拦截。
npm run smoke:cloud
# 提交前检查疑似凭证和已知大文件治理阈值。
npm run review:guard
App 使用 ViewEncapsulation.None 让全局 dh-*、pl-*、pipeline-* 样式作用于子组件;改回默认封装会导致多个生成页面失样。require('./_session')。部署依赖它的函数前必须生成并复制 cloud-functions/deployable/*.js。cloud-functions.ts 是云函数 ID 的唯一前端登记点;部署说明中的状态可能滞后,以配置和真实 smoke 结果为准。fetch failed 或“必须提供 id”;只对只读/幂等请求做有限重试,充值、扣费、生成提交不得盲目重放。4300 且串行运行;真实 LLM/E2E 会调用外部服务并可能产生费用。2.7MB、error 3.0MB;app.ts、IP 操盘组件和部分服务已很大,新增功能优先拆分,避免继续扩大单文件。/api 指向 TikHub,/backend 才指向本地 Express;生产环境没有本地 Express 抖音代理,抖音账号采集必须走 CLOUD_FN.douyin 云函数,否则 https://app.fmode.cn/backend/api/douyin/call 会返回 405。