diff --git a/.cursor/README.md b/.cursor/README.md index 9226bac7..5e26ce95 100644 --- a/.cursor/README.md +++ b/.cursor/README.md @@ -1,127 +1,21 @@ -# Soul 创业派对 - .cursor 配置说明 +# Soul 创业派对 · `.cursor` 速览 -本目录按 **cursor标准模板** 重构,rules、skills、agent 为**开发团队**服务,用于约束开发、防止互窜、经验升级。 +## 路径约定 ---- +- 所有 Skill、会议纪要、agent 经验路径均以 **本 Git 仓库根** 为基准(与 `miniprogram/`、`soul-api/` 同级)。 +- Rules 中「必须 Read」的路径形如 `.cursor/skills/{name}/SKILL.md`。 +- Python 脚本统一可用 `config/paths.py` 的 `ROOT`、`SKILLS`、`AGENT`、`MEETING`。 -## 目录结构 +## 入口优先级 -``` -.cursor/ -├── README.md # 本说明(入口) -├── config/ # 配置(paths.py、workspace.txt、model_switch.json) -├── rules/ # 规则(boundary、checklist、助理、会议、老板分身-索引) -├── skills/ # Skills(按角色分配) -├── agent/ # 智能体(标准开发团队结构) -│ ├── 老板分身/ # 最高权限,协调所有角色 -│ ├── 开发助理/ # 规则进化、通用经验、项目索引、bat 入口 -│ │ ├── evolution/ # 通用经验池 -│ │ ├── script/ # 一键-列出经验池.bat、一键-添加经验.bat 等 -│ │ └── 项目索引/ # 各角色开发进度(小程序.md、管理端.md 等) -│ ├── 小程序开发工程师/ -│ ├── 管理端开发工程师/ -│ ├── 后端工程师/ -│ ├── 产品经理/ -│ ├── 软件测试/ -│ └── 团队/ # 跨角色共享经验 -├── scripts/ # 共享脚本(evolution.py、经验模板.md、db-exec) -├── docs/ # 文档(职责定义、边界、分析) -├── process/ # 工作流 -├── meeting/ # 会议纪要(橙子生成) -└── archive/ # 历史归档 -``` +1. **三端开发**:`rules/soul-project-boundary.mdc` + `skills/*-dev` / `change-checklist`。 +2. **派对 AI**:若存在仓库根目录 `派对AI/`,可补充读其 `BOOTSTRAP.md`;与 `.cursor` 冲突时 **以 `.cursor` 三端约定为准**(见 `rules/party-ai-dev.mdc`)。 ---- +## 噪声与体积 -## 开发团队 +- `meeting/`、`agent/`:历史纪要/evolution 会增多,属正常;需要时可按月归档到子目录或压缩备份。 +- `scripts/db-exec/node_modules/`:已在 `.cursorignore` 与 `.gitignore` 中排除,首次使用在 `db-exec` 下执行 `npm install`。 -| 角色 | 负责 | 主 Skill | Agent 目录 | -|------|------|----------|------------| -| 小程序开发工程师 | miniprogram/ | SKILL-小程序开发.md | agent/小程序开发工程师/ | -| 管理端开发工程师 | soul-admin/ | SKILL-管理端开发.md | agent/管理端开发工程师/ | -| 后端开发 | soul-api/ | SKILL-API开发.md | agent/后端工程师/ | -| 产品经理 | 开发文档/1、需求/、临时需求池/ | SKILL-产品经理.md | agent/产品经理/ | -| 测试人员 | miniprogram、soul-admin、soul-api | SKILL-测试.md | agent/软件测试/ | -| 助理橙子 | 讨论后记录、经验升级 | SKILL-助理橙子-文档同步.md | agent/开发助理/ | +## 文档 -**经验**:每角色 `agent/{角色}/evolution/`,团队共享 `agent/团队/evolution/`。用户说「吸收经验」「升级 skills」→ 入库 + 升级 Skill;说「保存开发进度」「任务完成」→ 更新 `agent/开发助理/项目索引/{角色}.md`。 - ---- - -## 快速决策(必须 Read = 使用 Read 工具读取完整内容) - -| 编辑/场景 | 必须 Read 的 Skill | 自动加载的 Rule | -|-----------|-------------------|----------------| -| miniprogram/ | `SKILL-小程序开发.md` | soul-miniprogram-boundary | -| soul-admin/ | `SKILL-管理端开发.md` | soul-admin-boundary | -| soul-api/ | `SKILL-API开发.md` | soul-api | -| 开发文档/1、需求/、临时需求池/ | `SKILL-产品经理.md` | product-manager | -| 测试、测试用例、回归测试、功能测试、QA | `SKILL-测试.md` | - | -| 小橙、橙子、讨论完毕、记录、同步文档 | `SKILL-助理橙子-文档同步.md` | assistant-xiaofeng | -| 吸收经验、升级 skills、保存开发进度、任务完成、搞定了 | `SKILL-助理橙子-文档同步.md` | assistant-xiaofeng | -| 跨端功能开发 | `SKILL-角色流程控制.md` | - | -| 变更完成 | `SKILL-变更关联检查.md` | soul-change-checklist | -| 开个会、团队会议、需求评审、方案讨论 | `SKILL-团队会议.md` | soul-meeting | -| 会议结束、散会 | `SKILL-助理橙子-文档同步.md`(会议收尾) | soul-meeting | - ---- - -## Rules 一览 - -| 规则 | 生效范围 | 用途 | -|------|----------|------| -| soul-project-boundary | `**`(alwaysApply) | 项目组成、核心原则、会话自检 | -| 老板分身-索引 | `**`(alwaysApply) | 经验自动收集、Soul 角色推断、编码习惯 | -| soul-change-checklist | miniprogram、soul-admin、soul-api | 变更后必过 | -| assistant-xiaofeng | 触发词 | 小橙触发器 → SKILL-助理橙子-文档同步 | -| soul-miniprogram-boundary | miniprogram/** | 只调 /api/miniprogram/* | -| soul-admin-boundary | soul-admin/** | 只调 /api/admin/*、/api/db/* | -| soul-api | soul-api/** | 路由边界 + 编码规范(合并版) | -| product-manager | 开发文档/1、需求/、临时需求池/ | 产品经理 glob 触发 | -| soul-meeting | 触发词 | 开个会、团队会议、需求评审 → SKILL-团队会议 | - ---- - -## Skills 一览 - -### 角色主 Skill - -| 角色 | 主 Skill | 辅助 Skill | -|------|----------|------------| -| 小程序开发工程师 | SKILL-小程序开发 | 三端架构 → API开发 → 变更关联检查 | -| 管理端开发工程师 | SKILL-管理端开发 | 三端架构 → API开发 → 变更关联检查 | -| 后端开发 | SKILL-API开发 | soul-api 规范 → 三端架构 → 变更关联检查 → MySQL直接操作 | -| 产品经理 | SKILL-产品经理 | 需求汇总、运营与变更 | -| 测试人员 | SKILL-测试 | 变更关联检查、小程序/管理端/API 规范 | -| 助理橙子 | SKILL-助理橙子-文档同步 | - | - -### 场景 Skill - -| 场景 | Skill | -|------|-------| -| 跨端协同 | SKILL-角色流程控制 | -| 变更检查 | SKILL-变更关联检查、soul-change-checklist | -| 文档同步、经验升级 | SKILL-助理橙子-文档同步 | -| **多角色会议** | **SKILL-团队会议** | -| next-project | SKILL-next-project仅预览 | -| 项目拆解 | SKILL-Next全栈拆解为前后端分离与小程序 | - ---- - -## 文档与脚本 - -| 文档 | 说明 | -|------|------| -| [开发团队职责定义](./docs/开发团队职责定义.md) | 六角色职责、Skills 分配 | -| [三角色边界定义](./docs/三角色边界定义.md) | 开发三角色源码与业务边界 | -| [config/目录地图](./config/目录地图.md) | paths.py 路径别名 | -| [meeting/](./meeting/) | 会议纪要(橙子生成) | -| [经验清单](./agent/开发助理/经验清单.md) | 跨角色经验索引 | -| evolution 脚本 | `python .cursor/scripts/evolution.py list` 列出经验池;`add --stdin` 添加经验 | -| 一键 bat | `agent/开发助理/script/一键-列出经验池.bat` 等 | - ---- - -## 会话启动自检 - -新 Cursor 打开本项目时,优先执行 soul-project-boundary 中的「会话启动自检」:仅沿用本项目的 rules、skills、开发风格与配置,排除无关规则。 +- 架构与迭代说明:`docs/cursor规则与架构分析及优化建议.md` diff --git a/.cursor/agent/小程序开发工程师/evolution/索引.md b/.cursor/agent/小程序开发工程师/evolution/索引.md index e22f422c..7d9bc89c 100644 --- a/.cursor/agent/小程序开发工程师/evolution/索引.md +++ b/.cursor/agent/小程序开发工程师/evolution/索引.md @@ -13,5 +13,3 @@ | 2026-03-14 | 我的页设置入口隐藏;资料修改引导场景梳理(登录后、@某人、找伙伴、链接卡若) | [2026-03-14.md](./2026-03-14.md) | | 2026-03-16 | 编辑资料页分享名片:转发/朋友圈特殊处理,Canvas 绘制封面,标题「昵称+为您分享名片」 | [2026-03-16.md](./2026-03-16.md) | | 2026-03-17 | 代付美团式:读页→代付页→分享;详情页双态(发起人/好友);目录 loading、最新新增 5 条折叠 | [2026-03-17.md](./2026-03-17.md) | -| 2026-03-19 | 原生按钮覆盖定位:chooseAvatar 等用绝对定位 overlay 覆盖,禁止 button 包裹,避免原生样式影响 | [2026-03-19-原生按钮覆盖定位.md](./2026-03-19-原生按钮覆盖定位.md) | -| 2026-03-20 | 手机号一键登录与公用组件:getPhoneNumber 耦合 agreePrivacyAuthorization;login-modal 组件;登录后手机号同步 | [2026-03-20-手机号登录与公用组件.md](./2026-03-20-手机号登录与公用组件.md) | diff --git a/.cursor/agent/开发助理/经验清单.md b/.cursor/agent/开发助理/经验清单.md index 924d8e50..c822c1cf 100644 --- a/.cursor/agent/开发助理/经验清单.md +++ b/.cursor/agent/开发助理/经验清单.md @@ -53,10 +53,6 @@ | 2026-03-17 | 后端、团队 | 架构/最佳实践 | api-dev SKILL | Redis 缓存:parts/hot/recommended/stats/config/章节 content;容灾回退 DB;OSS 上传;/health 返回 database/redis 状态 | | 2026-03-18 | 小程序、团队 | 业务规则/最佳实践 | - | 分享链路兼容好友/朋友圈 singlePage:单页模式能力降级(不支付/不自动领取),引导点击底部“前往小程序”进入完整版 | | 2026-03-18 | 产品、后端、管理端、测试 | 文档归档/需求口径 | - | 文档归档整理:以《以界面定需求》为基准,各角色重整“功能需求+验收口径+风险点”并写入各自经验库;补齐《项目落地推进表》 | -| 2026-03-19 | 小程序 | 最佳实践 | miniprogram-dev SKILL §11 | 原生按钮覆盖定位:chooseAvatar 等用绝对定位 overlay 覆盖,禁止 button 包裹,避免原生样式影响(灰色矩形等) | -| 2026-03-20 | 安全工程师 | 触发词约定 | security-server-ops、soul-project-boundary | 「帮我部署api到线上」→ 直接执行 soul-api/master.py | -| 2026-03-20 | 安全工程师 | 触发词约定 | security-server-ops、soul-project-boundary | 「管理端帮我部署到xx环境」→ 语义化解析:正式→master.py,测试→deploy.py | -| 2026-03-20 | 小程序 | 最佳实践 | miniprogram-dev SKILL §8 | 手机号登录:getPhoneNumber 需耦合 agreePrivacyAuthorization;onNeedPrivacyAuthorization 支持页面;登录弹窗公用组件 login-modal | --- @@ -67,4 +63,4 @@ --- -**最后更新**:2026-03-20 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/产品.md b/.cursor/agent/开发助理/项目索引/产品.md index d668699a..aef54c31 100644 --- a/.cursor/agent/开发助理/项目索引/产品.md +++ b/.cursor/agent/开发助理/项目索引/产品.md @@ -6,7 +6,7 @@ ## 项目总结 -Soul 创业派对产品定位:面向创业者的社区/工具型小程序。核心需求文档在 `开发文档/1、需求/`(按日期命名,以最新为主;见 `1、需求/索引.md`),项目推进表在 `开发文档/10、项目管理/项目落地推进表.md`,临时需求/分析在 `临时需求池/`。 +Soul 创业派对产品定位:面向创业者的社区/工具型小程序。核心需求文档在 `开发文档/1、需求/需求汇总.md`,项目推进表在 `开发文档/10、项目管理/项目落地推进表.md`,临时需求/分析在 `临时需求池/`。 --- diff --git a/.cursor/agent/开发助理/项目索引/团队.md b/.cursor/agent/开发助理/项目索引/团队.md index 0950e10b..03f77197 100644 --- a/.cursor/agent/开发助理/项目索引/团队.md +++ b/.cursor/agent/开发助理/项目索引/团队.md @@ -31,11 +31,9 @@ Soul 创业派对全项目架构与约定:路由隔离(miniprogram/admin/db | 2026-03-17 | 性能优化与 Redis 缓存方案落地:Redis 容灾回退 DB、OSS 上传容灾;/health 返回 database/redis 状态 | 已完成 | | 2026-03-18 | 吸收经验:分享进入链路需兼容朋友圈 singlePage;单页模式不执行支付/自动领取等强动作并引导“前往小程序” | 已完成 | | 2026-03-18 | 会议:超级个体开通后自动创建@人统一走 Person;幂等键绑定 userId;默认资料 flags 后端输出 | 已完成 | -| 2026-03-20 | 「帮我部署api到线上」→ 安全工程师执行 soul-api/master.py;security-server-ops、soul-project-boundary 触发词升级 | 已完成 | -| 2026-03-20 | 「管理端帮我部署到xx环境」→ 语义化解析:正式/线上/生产→master.py,测试/dev→deploy.py;soul-admin 部署脚本索引 | 已完成 | > **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD --- -**最后更新**:2026-03-20 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/小程序.md b/.cursor/agent/开发助理/项目索引/小程序.md index 1f195450..3639070e 100644 --- a/.cursor/agent/开发助理/项目索引/小程序.md +++ b/.cursor/agent/开发助理/项目索引/小程序.md @@ -41,11 +41,9 @@ | 2026-03-17 | 会议收尾:源码优化 5 项全部完成;开发环境测试通过 | 已完成 | | 2026-03-18 | 吸收经验:分享链路需兼容好友/朋友圈 singlePage;单页模式能力降级并引导“前往小程序”进入完整版 | 已完成 | | 2026-03-18 | 会议:支付超级个体前/开通后资料默认校验,跳转 avatar-nickname 引导页(仅头像+昵称) | 已完成 | -| 2026-03-19 | 吸收经验:原生按钮覆盖定位,chooseAvatar 用绝对定位 overlay 覆盖头像,禁止 button 包裹,已升级 SKILL §11 | 已完成 | -| 2026-03-20 | 手机号一键登录:getPhoneNumber 耦合 agreePrivacyAuthorization;onNeedPrivacyAuthorization 支持 read/my/gift-pay/index/settings;登录弹窗公用组件 components/login-modal;登录后手机号同步 _syncPhoneFromProfileAfterLogin | 已完成 | > **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置 --- -**最后更新**:2026-03-20 +**最后更新**:2026-03-18 diff --git a/.cursor/config/paths.py b/.cursor/config/paths.py index 544639c4..c3504738 100644 --- a/.cursor/config/paths.py +++ b/.cursor/config/paths.py @@ -53,7 +53,6 @@ AGENT_BACKEND = AGENT / "后端工程师" AGENT_PRODUCT = AGENT / "产品经理" AGENT_TEST = AGENT / "软件测试" AGENT_TEAM = AGENT / "团队" -AGENT_SECURITY = AGENT / "安全工程师" # ========== 常用文件 ========== RULE_MAIN = RULES / "老板分身-索引.mdc" @@ -81,9 +80,6 @@ ROLE_TO_AGENT = { "软件测试": "软件测试", "测试": "软件测试", "测试人员": "软件测试", - # 安全 - "安全工程师": "安全工程师", - "安全": "安全工程师", # 通用 "团队": "团队", } diff --git a/.cursor/docs/cursor规则与架构分析及优化建议.md b/.cursor/docs/cursor规则与架构分析及优化建议.md new file mode 100644 index 00000000..7a4d9d52 --- /dev/null +++ b/.cursor/docs/cursor规则与架构分析及优化建议.md @@ -0,0 +1,156 @@ +# Soul 创业派对 · .cursor 规则与架构分析及优化建议 + +> 分析日期:2026-03-19 +> 范围:`.cursor/` 下 rules、skills、agent、config、meeting、scripts +> **2026-03-20**:已批量将 `e:\Gongsi\...` 改为仓库相对路径 `.cursor/...`;`party-ai-dev.mdc` 已补充与 `.cursor` 的优先级;根目录 `.gitignore` 已忽略 `karuo-party/credentials/`;新增 `.cursor/README.md`、`.cursorignore`(db-exec node_modules)。 + +--- + +## 整体架构图 + +![Soul 项目与 .cursor 架构](./soul-project-cursor-architecture.png) + +--- + +## 一、整体架构总览 + +### 1.1 项目与 .cursor 的关系 + +``` +项目根(一场soul的创业实验-永平) +├── miniprogram/ # 微信原生小程序 C 端 → /api/miniprogram/* +├── soul-admin/ # React 管理后台(主用)→ /api/admin/*、/api/db/* +├── soul-api/ # Go + Gin + GORM 接口服务 +├── next-project/ # 仅预览,非线上 +├── new-soul/soul-admin/ # 新版参考,迁移时对照 +└── .cursor/ # Cursor AI 规则与智能体配置 + ├── rules/ # 全局/场景规则(alwaysApply 或 globs) + ├── skills/ # 按角色/场景的 Skill(写作、上传、开发、会议等) + ├── agent/ # 角色经验与项目索引(evolution、项目索引) + ├── config/ # paths.py、workspace 等 + ├── meeting/ # 会议纪要 + ├── scripts/ # 进化脚本、Gitea 同步、db-exec 等 + └── docs/ # 本分析等文档 +``` + +### 1.2 规则层(Rules)与技能层(Skills)关系 + +| 类型 | 作用 | 典型文件 | +|------|------|----------| +| **Rules** | 会话自检、项目边界、谁调哪组 API、何时加载哪个 Skill | soul-project-boundary.mdc、老板分身-索引.mdc、soul-meeting.mdc、soul-change-checklist.mdc、party-ai-dev.mdc | +| **Skills** | 具体执行规范:怎么写代码、怎么开会、怎么检查变更 | miniprogram-dev、admin-dev、api-dev、team-meeting、change-checklist、assistant-doc-sync | + +- **角色推断**:按「当前编辑目录」或「用户触发词」→ 确定角色 → **必须 Read 对应 Skill 文件**后执行。 +- **老板分身**:权限最高,可调度所有角色;开会时由乘风按 team-meeting 主持;经验自动收集写各角色 evolution。 + +### 1.3 三端与 API 路由(核心原则) + +| 端 | 目录 | 允许调用的 API | 禁止 | +|----|------|----------------|------| +| 小程序 | miniprogram/ | `/api/miniprogram/*` | admin、db | +| 管理端 | soul-admin/ | `/api/admin/*`、`/api/db/*` | miniprogram 混用 | +| 后端 | soul-api/ | 按使用方挂 miniprogram / admin / db 分组 | 通用路径混用 | + +--- + +## 二、优化与迭代建议 + +### 2.1 路径可移植性(高优先级)✅ 已落地 + +**原问题**:rules 与部分 skills 中曾写死 **Windows 绝对路径** `e:\Gongsi\Mycontent\.cursor\skills\...`,在 macOS/Linux 或不同机器上会失效。**当前**:已统一为仓库根相对路径 `.cursor/skills/...` 等,详见 `rules/soul-project-boundary.mdc` 的「路径约定」。 + +**涉及文件**: + +- `rules/老板分身-索引.mdc`:team-meeting SKILL 路径 +- `rules/soul-project-boundary.mdc`:所有「必须 Read 的主 Skill 文件」表格(按编辑目录、按语义触发词、按场景触发词) +- `rules/soul-meeting.mdc`:team-meeting、assistant-doc-sync 路径 +- `rules/soul-change-checklist.mdc`:change-checklist SKILL 路径 +- `skills/assistant-doc-sync/SKILL.md`:项目索引路径 +- `skills/mysql-direct/SKILL.md`:`cd e:\Gongsi\Mycontent` + +**建议**: + +1. **统一改为相对项目根的路径** + 例如:`项目根/.cursor/skills/team-meeting/SKILL.md`,或在规则中明确写: + 「以当前项目根为基准,Read `.cursor/skills/{skill-name}/SKILL.md`」。 +2. 若 Cursor 支持「工作区根」变量,可写成占位符(如 `{workspace}/.cursor/skills/...`),在文档中说明各系统下的解析方式。 +3. **config/paths.py** 已定义 `SKILLS = CURSOR / "skills"`,可在 `.cursor/README.md` 或 rules 中说明:**所有 Skill 路径以 `paths.py` 的 SKILLS 为准,规则中仅写相对 SKILLS 的路径**(如 `skills/team-meeting/SKILL.md`),由 AI 结合当前项目根解析。 + +### 2.2 跨平台脚本与入口 + +**问题**:老板分身规则里「若无法写文件则输出 JSON,并提示用户双击 `agent/开发助理/script/一键-添加经验.bat`」。`.bat` 仅适用于 Windows,Mac/Linux 用户无法使用。 + +**建议**: + +1. 增加 **Shell 版**:`一键-添加经验.sh`,实现相同逻辑(或调用同一份 Python/Node 脚本)。 +2. 在规则中改为:「提示用户执行 `agent/开发助理/script/一键-添加经验.bat`(Windows)或 `一键-添加经验.sh`(Mac/Linux),或根据环境说明」。 + +### 2.3 party-ai-dev.mdc 与 老板分身 的优先级 + +**问题**:`party-ai-dev.mdc` 要求「优先使用派对 AI(派对AI/BOOTSTRAP.md、SKILL_REGISTRY.md)」,而老板分身等规则在 `.cursor/rules` 下,若同时生效可能产生「先读卡若还是先读派对」的冲突。 + +**建议**: + +1. 在 **party-ai-dev.mdc** 或 **老板分身-索引.mdc** 中明确写清: + 「当本仓库为 Soul 派对项目且存在 派对AI/ 目录时,优先按 party-ai-dev 启动顺序;否则按 .cursor/rules 与 skills 执行。」 +2. 或约定:**派对AI 仅用于「在派对AI 目录下开发」的会话**;**在 miniprogram/soul-admin/soul-api 等目录下开发时,仅用 .cursor 的 rules+skills**,避免双重入口。 + +### 2.4 soul-change-checklist 与 change-checklist Skill 的引用方式 + +**问题**:soul-change-checklist.mdc 第三十条要求 Read 的路径仍是 Windows 绝对路径。 + +**建议**:与 2.1 一致,改为「项目根/.cursor/skills/change-checklist/SKILL.md」或相对路径说明,并在 checklist 规则末尾加一句:「Skill 详细流程见 `.cursor/skills/change-checklist/SKILL.md`」。 + +### 2.5 会议纪要与收尾路径 + +**问题**:soul-meeting.mdc 中会议纪要、项目索引、会议记录索引等路径未写死 Windows,但 assistant-doc-sync SKILL 里项目索引写的是 `e:\Gongsi\Mycontent\.cursor\agent\...`。 + +**建议**:assistant-doc-sync 内所有路径改为「项目根/.cursor/agent/...」或相对路径,与 config/paths.py 中的 AGENT、PROJECT_INDEX 等保持一致表述。 + +### 2.6 角色与 Skill 的集中索引 + +**现状**:角色→Skill 的映射分散在 soul-project-boundary(按目录、按触发词、按场景)和 paths.py(ROLE_TO_AGENT)。 + +**建议**:在 `.cursor/README.md` 或 `docs/` 下维护一份「角色 ↔ Skill 一览表」,便于新人/新 Agent 快速查阅;rules 中可写「详见 .cursor/README.md#角色与Skill映射」。 + +### 2.7 经验自动收集的脚本与 Mac 兼容 + +**现状**:evolution 写入由 scripts/evolution.py 等完成,paths 来自 config/paths.py,已跨平台;仅「一键-添加经验」的入口是 .bat。 + +**建议**:同 2.2,补充 .sh 或统一用 Python 脚本入口,在规则中同时给出 Windows 与 Mac/Linux 的说明。 + +--- + +## 三、规则与 Skill 清单速查 + +| 名称 | 类型 | 作用 | +|------|------|------| +| soul-project-boundary.mdc | Rule | 项目边界、三端 API 约定、角色推断与 Skill 加载 | +| 老板分身-索引.mdc | Rule | 老板分身权限、经验自动收集、编码习惯、三端分工 | +| soul-meeting.mdc | Rule | 开会/散会触发、会议纪要路径、收尾流程 | +| soul-change-checklist.mdc | Rule | 变更后关联检查清单(防漏改) | +| party-ai-dev.mdc | Rule | 优先派对 AI、飞书复盘、小程序上传约定 | +| miniprogram-dev | Skill | 小程序开发规范 | +| admin-dev | Skill | 管理端开发规范 | +| api-dev | Skill | 后端 API 规范 | +| product-manager | Skill | 产品需求与验收 | +| testing | Skill | 测试与回归 | +| team-meeting | Skill | 多角色会议流程 | +| assistant-doc-sync | Skill | 小橙/文档同步/经验入库/会议收尾 | +| change-checklist | Skill | 变更关联检查详细流程 | +| role-flow-control | Skill | 跨端协同与角色流程 | +| three-tier-arch | Skill | 三端架构与框架分析 | +| new-version-analyze | Skill | 新版分析、迁移对比 | +| next-preview / next-split | Skill | next-project 仅预览、拆解指引 | +| mysql-direct | Skill | MySQL 直接操作、db-exec | + +--- + +## 四、总结 + +- **架构**:项目为三端(小程序 + 管理端 + soul-api),.cursor 通过 rules 定边界与触发、skills 定执行细节、agent 存经验与项目索引,**config/paths.py** 为路径与角色映射中心。 +- **优先迭代**: + 1)所有 **Skill/agent 路径** 改为可移植(相对项目根或相对 .cursor); + 2)**一键-添加经验** 增加 Mac/Linux 入口; + 3)**party-ai 与 .cursor** 的适用场景或优先级写清楚。 +- 按上述调整后,在不同系统和不同克隆路径下都能一致生效,且便于后续扩展角色或 Skill。 diff --git a/.cursor/docs/soul-project-cursor-architecture.png b/.cursor/docs/soul-project-cursor-architecture.png new file mode 100644 index 00000000..d92a99fa Binary files /dev/null and b/.cursor/docs/soul-project-cursor-architecture.png differ diff --git a/.cursor/meeting/2026-02-28_P0测试清单.md b/.cursor/meeting/2026-02-28_P0测试清单.md index 9e3cdc31..1076ba8c 100644 --- a/.cursor/meeting/2026-02-28_P0测试清单.md +++ b/.cursor/meeting/2026-02-28_P0测试清单.md @@ -23,7 +23,8 @@ ```powershell # 在 soul-api 目录下执行 -cd e:\Gongsi\Mycontent\soul-api +# 在仓库根目录下执行(与 miniprogram、soul-api 同级) +cd soul-api .\scripts\test-p0-endpoints.ps1 ``` diff --git a/.cursor/rules/assistant-xiaofeng.mdc b/.cursor/rules/assistant-xiaofeng.mdc index ca99d8b4..ea3a39e8 100644 --- a/.cursor/rules/assistant-xiaofeng.mdc +++ b/.cursor/rules/assistant-xiaofeng.mdc @@ -8,9 +8,9 @@ alwaysApply: false 当用户提及**小橙、橙子、橙橙、🍊**,或说**「讨论完毕」「记录一下」「同步到开发文档」「更新文档」「吸收经验」「升级 skills」「记录经验」「保存开发进度」「更新项目索引」「记录开发进度」「任务完成」「搞定了」「完成了」「会议结束」「散会」「会开完了」**时: -**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` 的完整内容**,然后严格按其流程执行。 +**必须使用 Read 工具读取 `.cursor/skills/assistant-doc-sync/SKILL.md` 的完整内容**,然后严格按其流程执行。 ### 行为摘要(供模型快速理解,完整流程以 SKILL 文件为准) -1. **文档同步**:从对话中提炼结论/待办/变更 → 写入 `开发文档/1、需求/YYYY-MM-DD-需求.md`(当日文件,以日期最新为主)、`开发文档/10、项目管理/运营与变更.md`、`临时需求池/` 等对应文档 +1. **文档同步**:从对话中提炼结论/待办/变更 → 写入 `开发文档/1、需求/需求汇总.md`、`开发文档/10、项目管理/运营与变更.md`、`临时需求池/` 等对应文档 2. **经验入库**:提炼经验 → 写入 `agent/{角色}/evolution/YYYY-MM-DD.md` → 更新 `agent/开发助理/项目索引/{索引名}.md`(写日期)→ 更新 `agent/开发助理/经验清单.md` → 升级对应 SKILL diff --git a/.cursor/rules/party-ai-dev.mdc b/.cursor/rules/party-ai-dev.mdc index 9602c6f0..eba06a1a 100644 --- a/.cursor/rules/party-ai-dev.mdc +++ b/.cursor/rules/party-ai-dev.mdc @@ -1,8 +1,14 @@ # 派对 AI 开发规则 -## 强制:使用派对 AI 进行开发 +## 与本仓库 `.cursor` 的优先级(避免入口打架) -所有开发操作**优先使用派对 AI**(路径:`/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/派对AI/`),派对 AI 优先于卡若 AI 读取使用。 +- **三端编码与接口**:以本仓库 `.cursor/rules`(如 `soul-project-boundary.mdc`)与 `.cursor/skills` 为准——小程序/管理端/soul-api 路由隔离、变更检查、角色 Skill 加载等**不因派对 AI 而绕过**。 +- **派对 AI 目录**:若仓库根下存在 `派对AI/`,开发前可补充读取其 `BOOTSTRAP.md`、`SKILL_REGISTRY.md`,用于派对域身份、运营与流程;与 `.cursor` 冲突时,**代码与 API 约定以 `.cursor` 为准**。 +- **卡若 AI 全局规则**:仅在本会话需要时参考;本仓库会话自检仍以 **本仓库 `.cursor/`** 为主。 + +## 强制:使用派对 AI 进行开发(当 `派对AI/` 存在时) + +所有开发操作**优先结合派对 AI**(路径:**仓库根下的** `派对AI/`,与 `miniprogram/` 同级)。若本仓库无 `派对AI/` 目录,则跳过本节启动顺序,仅按 `.cursor` 执行。 ### 启动顺序 diff --git a/.cursor/rules/product-manager.mdc b/.cursor/rules/product-manager.mdc index ab8cce91..a867bd51 100644 --- a/.cursor/rules/product-manager.mdc +++ b/.cursor/rules/product-manager.mdc @@ -8,4 +8,4 @@ alwaysApply: false 当编辑 **开发文档/1、需求/**、**临时需求池/**、**开发文档/10、项目管理/** 时,推断当前角色为**产品经理**。 -**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` 的完整内容**,然后按其规范执行需求分析、文档编写、验收标准制定。 +**必须使用 Read 工具读取 `.cursor/skills/product-manager/SKILL.md` 的完整内容**,然后按其规范执行需求分析、文档编写、验收标准制定。 diff --git a/.cursor/rules/soul-admin-boundary.mdc b/.cursor/rules/soul-admin-boundary.mdc index c1e63520..7c517857 100644 --- a/.cursor/rules/soul-admin-boundary.mdc +++ b/.cursor/rules/soul-admin-boundary.mdc @@ -26,8 +26,8 @@ alwaysApply: false ## Skill 加载(必须执行) -**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。 +**必须使用 Read 工具读取 `.cursor/skills/admin-dev/SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。 -接口实现与路由分组的规范在 `e:\Gongsi\Mycontent\.cursor\rules\soul-api.mdc`(编辑 soul-api 时自动加载)。 +接口实现与路由分组的规范在 `.cursor/rules/soul-api.mdc`(编辑 soul-api 时自动加载)。 违反上述路径或职责边界即视为「互窜」,需纠正后再提交。 diff --git a/.cursor/rules/soul-api.mdc b/.cursor/rules/soul-api.mdc index 16ce660c..868d4a84 100644 --- a/.cursor/rules/soul-api.mdc +++ b/.cursor/rules/soul-api.mdc @@ -6,7 +6,7 @@ alwaysApply: false # soul-api 开发规范 -> **Skill 加载**:编辑 soul-api 代码时,**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` 的完整内容**,该 Skill 包含业务对接、与前端边界协同等补充约定。本规则侧重编码规范与路由边界。 +> **Skill 加载**:编辑 soul-api 代码时,**必须使用 Read 工具读取 `.cursor/skills/api-dev/SKILL.md` 的完整内容**,该 Skill 包含业务对接、与前端边界协同等补充约定。本规则侧重编码规范与路由边界。 ## 1. 路由按使用方归类(强制) diff --git a/.cursor/rules/soul-change-checklist.mdc b/.cursor/rules/soul-change-checklist.mdc index acd95f93..0d774e0d 100644 --- a/.cursor/rules/soul-change-checklist.mdc +++ b/.cursor/rules/soul-change-checklist.mdc @@ -30,7 +30,7 @@ alwaysApply: false - **每次**在 miniprogram、soul-admin、soul-api 内完成一轮修改后,**先过一遍上表 + 二**,再视为本次变更完成。 - 若本次变更涉及多端(例如小程序新功能 + 管理端配置页),应在同一次任务内一并完成或明确记录未做项,避免漏改。 -- 更详细的检查流程:**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\change-checklist\SKILL.md` 的完整内容**,按其「以领域为单位思考」的方法逐项确认。 +- 更详细的检查流程:**必须使用 Read 工具读取 `.cursor/skills/change-checklist/SKILL.md` 的完整内容**(相对本仓库根),按其「以领域为单位思考」的方法逐项确认。 ## 四、聊天中触发变更检查 diff --git a/.cursor/rules/soul-meeting.mdc b/.cursor/rules/soul-meeting.mdc index a8069c13..775388c0 100644 --- a/.cursor/rules/soul-meeting.mdc +++ b/.cursor/rules/soul-meeting.mdc @@ -6,7 +6,7 @@ alwaysApply: true # Soul 创业派对 - 会议触发器 -当用户表达**开会意图**时(包括但不限于以下触发词),**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` 的完整内容**,然后严格按其流程主持会议。 +当用户表达**开会意图**时(包括但不限于以下触发词),**必须使用 Read 工具读取 `.cursor/skills/team-meeting/SKILL.md` 的完整内容**(相对本仓库根),然后严格按其流程主持会议。 ## 语义化触发词(理解意图,不必完全匹配) @@ -24,9 +24,9 @@ alwaysApply: true 当用户说**「会议结束」「散会」「会开完了」「结束会议」**时: 1. 助理橙子立即执行收尾流程 -2. **生成会议纪要**:`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md` -3. **各角色经验入库**:`e:\Gongsi\Mycontent\.cursor\agent\{角色}\evolution\YYYY-MM-DD.md` -4. **更新项目索引**:`agent/开发助理/项目索引/{索引名}.md` 开发进度表追加一行 -5. **更新会议记录索引**:`e:\Gongsi\Mycontent\.cursor\meeting\README.md` +2. **生成会议纪要**:`.cursor/meeting/YYYY-MM-DD_主题.md` +3. **各角色经验入库**:`.cursor/agent/{角色}/evolution/YYYY-MM-DD.md` +4. **更新项目索引**:`.cursor/agent/开发助理/项目索引/{索引名}.md` 开发进度表追加一行 +5. **更新会议记录索引**:`.cursor/meeting/README.md` -**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` 执行收尾。** +**必须使用 Read 工具读取 `.cursor/skills/assistant-doc-sync/SKILL.md` 执行收尾。** diff --git a/.cursor/rules/soul-miniprogram-boundary.mdc b/.cursor/rules/soul-miniprogram-boundary.mdc index 3821919e..88151247 100644 --- a/.cursor/rules/soul-miniprogram-boundary.mdc +++ b/.cursor/rules/soul-miniprogram-boundary.mdc @@ -23,8 +23,8 @@ alwaysApply: false ## Skill 加载(必须执行) -**必须使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。 +**必须使用 Read 工具读取 `.cursor/skills/miniprogram-dev/SKILL.md` 的完整内容**,按其规范进行开发。该 Skill 包含代码风格、业务逻辑、API 对接细节等完整约定。 -接口实现与路由分组的规范在 `e:\Gongsi\Mycontent\.cursor\rules\soul-api.mdc`(编辑 soul-api 时自动加载)。 +接口实现与路由分组的规范在 `.cursor/rules/soul-api.mdc`(编辑 soul-api 时自动加载)。 违反上述路径或职责边界即视为「互窜」,需纠正后再提交。 diff --git a/.cursor/rules/soul-project-boundary.mdc b/.cursor/rules/soul-project-boundary.mdc index 10f479d2..d311ed76 100644 --- a/.cursor/rules/soul-project-boundary.mdc +++ b/.cursor/rules/soul-project-boundary.mdc @@ -20,31 +20,30 @@ alwaysApply: true | 预览/参考 | next-project/ | 仅预览,非线上 | 不依赖 | | **新版管理端** | **new-soul/soul-admin/** | 新版参考实现,迁移时对照 | soul-api | -## 需求目录与命名约定 - -- **需求目录**:`开发文档/1、需求/` -- **命名**:`YYYY-MM-DD-需求.md` 或 `YYYY-MM-DD-简短描述.md` -- **主需求**:以日期最新的需求文件为主;同步需求时新建/更新当日文件,并更新 `1、需求/索引.md` -- **基准**:`以界面定需求.md` 为界面级需求基准,新增/改版界面或业务规则时先更新该文档 - ## 核心原则 - 小程序只调 `/api/miniprogram/*`;管理端只调 `/api/admin/*`、`/api/db/*`;禁止混用。 - 变更完成必过 soul-change-checklist.mdc;聊天中说「变更完成」「检查一下」「准备提交」时主动触发检查。 +## 路径约定(Skill / agent / meeting) + +- 下表及本仓库 Skill 中的路径均以 **本 Git 仓库根目录** 为基准(与 `miniprogram/`、`soul-api/` 同级),**不使用盘符或另一台机器上的绝对路径**。 +- 使用 Read / Write 工具时:填写 **`仓库根/.cursor/...`**,例如 `.cursor/skills/api-dev/SKILL.md`(与规则中的写法一致即可)。 +- 脚本中的物理路径以 `config/paths.py` 的 `ROOT`、`SKILLS`、`AGENT`、`MEETING` 为准。 + ## 角色推断与 Skill 加载(必须执行) 根据**当前编辑目录**或**语义触发词**,**必须使用 Read 工具读取对应的主 Skill 文件完整内容**,然后按其规范执行开发: ### 按编辑目录 -| 编辑目录 | 推断角色 | 必须 Read 的主 Skill 文件(绝对路径) | -|----------|----------|---------------------------------------| -| miniprogram/ | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` | -| soul-admin/ | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` | -| soul-api/ | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` | -| 开发文档/1、需求/、临时需求池/ | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` | -| .cursor/ | 助理橙子 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` | +| 编辑目录 | 推断角色 | 必须 Read 的主 Skill 文件(相对仓库根) | +|----------|----------|----------------------------------------| +| miniprogram/ | 小程序开发工程师 | `.cursor/skills/miniprogram-dev/SKILL.md` | +| soul-admin/ | 管理端开发工程师 | `.cursor/skills/admin-dev/SKILL.md` | +| soul-api/ | 后端开发 | `.cursor/skills/api-dev/SKILL.md` | +| 开发文档/1、需求/、临时需求池/ | 产品经理 | `.cursor/skills/product-manager/SKILL.md` | +| .cursor/ | 助理橙子 | `.cursor/skills/assistant-doc-sync/SKILL.md` | ### 按语义触发词(说啥切角色,无需编辑文件) @@ -52,26 +51,23 @@ alwaysApply: true | 触发词 | 推断角色 | 必须 Read 的 Skill 文件 | |--------|----------|-------------------------| -| 后端、API、soul-api、接口、Go、GORM | 后端开发 | `e:\Gongsi\Mycontent\.cursor\skills\api-dev\SKILL.md` | -| 管理端、soul-admin、React、后台管理 | 管理端开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\admin-dev\SKILL.md` | -| 小程序、miniprogram、C 端、微信小程序 | 小程序开发工程师 | `e:\Gongsi\Mycontent\.cursor\skills\miniprogram-dev\SKILL.md` | -| 产品、需求、验收、排期、需求文档 | 产品经理 | `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md` | -| 测试、测试用例、回归测试、功能测试、QA | 测试人员 | `e:\Gongsi\Mycontent\.cursor\skills\testing\SKILL.md` | -| 挖矿、安全、服务器操作、部署、miner_guard、xmrig、入侵排查 | 安全工程师 | `e:\Gongsi\Mycontent\.cursor\skills\security-miner-guard\SKILL.md`、`e:\Gongsi\Mycontent\.cursor\skills\security-server-ops\SKILL.md` | +| 后端、API、soul-api、接口、Go、GORM | 后端开发 | `.cursor/skills/api-dev/SKILL.md` | +| 管理端、soul-admin、React、后台管理 | 管理端开发工程师 | `.cursor/skills/admin-dev/SKILL.md` | +| 小程序、miniprogram、C 端、微信小程序 | 小程序开发工程师 | `.cursor/skills/miniprogram-dev/SKILL.md` | +| 产品、需求、验收、排期、需求文档 | 产品经理 | `.cursor/skills/product-manager/SKILL.md` | +| 测试、测试用例、回归测试、功能测试、QA | 测试人员 | `.cursor/skills/testing/SKILL.md` | ### 按场景触发词 -| 场景触发词 | 必须 Read 的 Skill 文件(绝对路径) | -|------------|-------------------------------------| -| 小橙、橙子、橙橙、🍊、讨论完毕、记录一下、记录、同步文档 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` | -| 吸收经验、升级 skills、记录经验、保存开发进度、更新项目索引、记录开发进度、任务完成、搞定了、完成了 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md` | -| 跨端功能开发 | `e:\Gongsi\Mycontent\.cursor\skills\role-flow-control\SKILL.md` | -| 变更完成、检查一下、准备提交 | `e:\Gongsi\Mycontent\.cursor\skills\change-checklist\SKILL.md` | -| 开个会、开会、团队会议、乘风开会、需求评审、方案讨论、大家一起讨论 | `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md`(老板分身/乘风主持) | -| 会议结束、散会、会开完了 | `e:\Gongsi\Mycontent\.cursor\skills\assistant-doc-sync\SKILL.md`(会议收尾) | -| **加个需求**、加个需求:xxx | `e:\Gongsi\Mycontent\.cursor\skills\product-manager\SKILL.md`(产品经理三端分析 → 功能规划 → 指派) | -| **新版分析**、版本对比、迁移分析、甲方代码分析、快速分析新版、抽取需求 | `e:\Gongsi\Mycontent\.cursor\skills\new-version-analyze\SKILL.md`(新版快速分析 → 差异清单 → 接口冲突 → 迁移迭代) | -| **帮我部署api到线上** | `e:\Gongsi\Mycontent\.cursor\skills\security-server-ops\SKILL.md`(安全工程师 → 执行 soul-api/master.py) | -| **管理端帮我部署到xx环境** | `e:\Gongsi\Mycontent\.cursor\skills\security-server-ops\SKILL.md`(安全工程师 → 语义化解析 xx:正式/线上/生产→master.py,测试/dev→deploy.py) | +| 场景触发词 | 必须 Read 的 Skill 文件(相对仓库根) | +|------------|----------------------------------------| +| 小橙、橙子、橙橙、🍊、讨论完毕、记录一下、记录、同步文档 | `.cursor/skills/assistant-doc-sync/SKILL.md` | +| 吸收经验、升级 skills、记录经验、保存开发进度、更新项目索引、记录开发进度、任务完成、搞定了、完成了 | `.cursor/skills/assistant-doc-sync/SKILL.md` | +| 跨端功能开发 | `.cursor/skills/role-flow-control/SKILL.md` | +| 变更完成、检查一下、准备提交 | `.cursor/skills/change-checklist/SKILL.md` | +| 开个会、开会、团队会议、乘风开会、需求评审、方案讨论、大家一起讨论 | `.cursor/skills/team-meeting/SKILL.md`(老板分身/乘风主持) | +| 会议结束、散会、会开完了 | `.cursor/skills/assistant-doc-sync/SKILL.md`(会议收尾) | +| **加个需求**、加个需求:xxx | `.cursor/skills/product-manager/SKILL.md`(产品经理三端分析 → 功能规划 → 指派) | +| **新版分析**、版本对比、迁移分析、甲方代码分析、快速分析新版、抽取需求 | `.cursor/skills/new-version-analyze/SKILL.md`(新版快速分析 → 差异清单 → 接口冲突 → 迁移迭代) | -**注意**:「必须 Read」= 使用 Read 工具读取**绝对路径**的完整文件内容后执行,不可跳过或仅凭记忆。 +**注意**:「必须 Read」= 使用 Read 工具读取上述路径相对于**当前工作区仓库根**的完整文件内容后执行,不可跳过或仅凭记忆。 diff --git a/.cursor/rules/老板分身-索引.mdc b/.cursor/rules/老板分身-索引.mdc index b7a351ff..45989db5 100644 --- a/.cursor/rules/老板分身-索引.mdc +++ b/.cursor/rules/老板分身-索引.mdc @@ -6,7 +6,7 @@ alwaysApply: true # 老板分身 - 能力与约束(Soul 创业派对) > **老板分身权限最高**:协调所有智能体(小程序开发工程师、管理端开发工程师、后端工程师、产品经理、开发助理等)。其他 agent 执行任务时遵循本规则;老板分身可调度、协调、指派任一角色。 -> **激活方式**:用户说「老板」「分身」「乘风」「架构」「帮我协调」时,从旁观者转为主动参与。**开会时**:用户说「开会」「开个会」「团队会议」「乘风开会」「需求评审」「方案讨论」等表达开会意图时,**必须先**用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` 完整内容,然后由老板分身(乘风)按该协议主持多角色会议,不可仅回复而不执行流程。 +> **激活方式**:用户说「老板」「分身」「乘风」「架构」「帮我协调」时,从旁观者转为主动参与。**开会时**:用户说「开会」「开个会」「团队会议」「乘风开会」「需求评审」「方案讨论」等表达开会意图时,**必须先**用 Read 工具读取 `.cursor/skills/team-meeting/SKILL.md` 完整内容(相对本仓库根),然后由老板分身(乘风)按该协议主持多角色会议,不可仅回复而不执行流程。 > **会话自检**:仅沿用本项目 `.cursor/` 下的 rules、skills、agent;忽略与本项目无关的全局 rules/skills。 > **角色驱动**:Soul 角色与 agent 映射见 `config/paths.py` 的 ROLE_TO_AGENT。 @@ -39,12 +39,11 @@ alwaysApply: true - 产品/需求/config→**产品经理** - 测试/自检/QA→**软件测试** - 架构/选型/路由约定/三端协同→**团队** - - 挖矿/安全/服务器操作/部署/入侵排查→**安全工程师** - 无法判断→**通用**(写入开发助理) 3. **若可写文件**: - **有明确目标角色**:写入 `.cursor/agent/{角色}/evolution/YYYY-MM-DD-简短描述.md`,并更新该目录下的 `索引.md` - **无法判断角色**:写入 `.cursor/agent/开发助理/evolution/` -4. **若无法写文件**:输出 JSON,并提示用户双击 `agent/开发助理/script/一键-添加经验.bat` +4. **若无法写文件**:输出 JSON,并提示用户在仓库根执行:`.cursor/agent/开发助理/script/一键-添加经验.bat`(Windows)或同目录下的 `.sh` / Python 入口(macOS/Linux,若已提供) ### Soul 目标角色与 target_roles 取值 diff --git a/.cursor/scripts/README-gitea-sync.md b/.cursor/scripts/README-gitea-sync.md new file mode 100644 index 00000000..5e05cdb9 --- /dev/null +++ b/.cursor/scripts/README-gitea-sync.md @@ -0,0 +1,55 @@ +# 与 Gitea(192.168.1.201)同步 + +## 远程 + +- **gitea-local**:`http://192.168.1.201:3000/fnvtk/soul-yongping.git`(拉取 + 推送) + +## 手动同步 + +```bash +./.cursor/scripts/gitea-sync.sh +``` + +## 每 10 分钟自动同步(macOS launchd) + +- 已安装:`~/Library/LaunchAgents/com.soul.yongping.gitea-sync.plist` +- 每 10 分钟执行一次,登录后自动加载 + +**启用:** + +```bash +launchctl load ~/Library/LaunchAgents/com.soul.yongping.gitea-sync.plist +``` + +**停用:** + +```bash +launchctl unload ~/Library/LaunchAgents/com.soul.yongping.gitea-sync.plist +``` + +**查看是否在跑:** + +```bash +launchctl list | grep com.soul.yongping.gitea-sync +``` + +## 认证(192.168.1.201 需登录时) + +若 push/pull 需要账号密码,定时任务无法弹窗,请把凭证写进 remote URL(勿提交到仓库): + +```bash +git remote set-url gitea-local 'http://用户名:token或密码@192.168.1.201:3000/fnvtk/soul-yongping.git' +``` + +或用系统钥匙串: + +```bash +git config --global credential.helper osxkeychain +# 然后手动执行一次 gitea-sync.sh,输入一次账号密码,之后由钥匙串记住 +``` + +## 日志 + +- 脚本内部:`.cursor/scripts/gitea-sync.log` +- launchd 标准输出:`.cursor/scripts/gitea-sync-launchd.log` +- launchd 错误:`.cursor/scripts/gitea-sync-launchd.err.log` diff --git a/.cursor/scripts/gitea-sync-launchd.err.log b/.cursor/scripts/gitea-sync-launchd.err.log new file mode 100644 index 00000000..765657eb --- /dev/null +++ b/.cursor/scripts/gitea-sync-launchd.err.log @@ -0,0 +1,163 @@ +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted +/bin/bash: /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平/.cursor/scripts/gitea-sync.sh: Operation not permitted diff --git a/.cursor/scripts/gitea-sync-launchd.log b/.cursor/scripts/gitea-sync-launchd.log new file mode 100644 index 00000000..e69de29b diff --git a/.cursor/scripts/gitea-sync.log b/.cursor/scripts/gitea-sync.log new file mode 100644 index 00000000..1edae9c5 --- /dev/null +++ b/.cursor/scripts/gitea-sync.log @@ -0,0 +1,48 @@ +[2026-03-19 14:54:01] --- sync start (branch=devlop, remote=gitea-local) --- +From http://192.168.1.201:3000/fnvtk/soul-yongping + * [new branch] devlop -> gitea-local/devlop + * [new branch] main -> gitea-local/main +error: cannot pull with rebase: You have unstaged changes. +error: Please commit or stash them. +[devlop 28a69cbc] sync: 2026-03-19 14:54 + Committer: 卡若 +Your name and email address were configured automatically based +on your username and hostname. Please check that they are accurate. +You can suppress this message by setting them explicitly: + + git config --global user.name "Your Name" + git config --global user.email you@example.com + +After doing this, you may fix the identity used for this commit with: + + git commit --amend --reset-author + + 26 files changed, 164 insertions(+), 2133 deletions(-) + create mode 100644 .cursor/scripts/README-gitea-sync.md + create mode 100644 .cursor/scripts/gitea-sync-launchd.err.log + create mode 100644 .cursor/scripts/gitea-sync-launchd.log + create mode 100644 .cursor/scripts/gitea-sync.log + create mode 100755 .cursor/scripts/gitea-sync.sh + create mode 100644 project.config.json + delete mode 100644 开发文档/1、需求/文章详情-阅读页线框图.md + delete mode 100644 开发文档/1、需求/链接人与事-所有同步需求.md + delete mode 100644 开发文档/代付功能-美团式方案与场景清单.md + delete mode 100644 开发文档/全站测试报告_20260315.md + delete mode 100644 开发文档/存客宝对接逻辑图.md + delete mode 100644 开发文档/小程序管理/scripts/reports/体验版二维码_soul-party_20260315_2344.png + delete mode 100644 开发文档/小程序管理/scripts/reports/体验版二维码_soul-party_20260316_0221.png + delete mode 100644 开发文档/小程序管理/scripts/reports/体验版二维码_soul-party_20260316_1804.png + delete mode 100644 开发文档/找朋友代付-流程与配置.md + delete mode 100644 开发文档/新版管理端迁移到稳定版-需求评估.md + delete mode 100644 开发文档/新版迁移-开发方案与清单.md + delete mode 100644 开发文档/稳定版-小程序与API对比.md + delete mode 100644 开发文档/稳定版-源码质量分析报告.md + delete mode 100644 开发文档/稳定版-管理端与小程序对接分析.md + delete mode 100644 开发文档/稳定版适配新界面-调整清单.md + delete mode 100644 开发文档/管理端两版界面差异-新需求参考.md + delete mode 100644 开发文档/管理端迁移分析-基于小程序功能.md + delete mode 100644 开发文档/规则引擎迁移-影响分析.md + delete mode 100644 开发文档/迁移完成度与待办清单.md +remote: Failed to authenticate user +fatal: Authentication failed for 'http://192.168.1.201:3000/fnvtk/soul-yongping.git/' +[2026-03-19 14:54:02] --- sync end --- diff --git a/.cursor/scripts/gitea-sync.sh b/.cursor/scripts/gitea-sync.sh new file mode 100755 index 00000000..b58bb42e --- /dev/null +++ b/.cursor/scripts/gitea-sync.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# 与 Gitea(192.168.1.201)双向同步:先拉取,有本地变更则提交并推送 +# 可手动执行,也可由 launchd 每 10 分钟执行 + +set -e +REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" +REMOTE="gitea" +LOG_FILE="$REPO_ROOT/.cursor/scripts/gitea-sync.log" + +cd "$REPO_ROOT" +BRANCH=$(git rev-parse --abbrev-ref HEAD) + +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"; } + +log "--- sync start (branch=$BRANCH, remote=$REMOTE) ---" + +# 1. 拉取远程更新(若有未提交变更则先 stash,pull 后再 pop) +STASHED="" +if [ -n "$(git status -s)" ]; then + git stash push -u -m "gitea-sync $(date +%s)" 2>/dev/null && STASHED=1 || true +fi +git fetch "$REMOTE" 2>&1 | tee -a "$LOG_FILE" || true +if git ls-remote --exit-code --heads "$REMOTE" "$BRANCH" &>/dev/null; then + git pull "$REMOTE" "$BRANCH" --no-edit 2>&1 | tee -a "$LOG_FILE" || log "pull 失败或冲突,继续尝试推送本地变更" +fi +[ -n "$STASHED" ] && git stash pop 2>/dev/null || true + +# 2. 若有本地未提交变更,则提交并推送 +STATUS=$(git status -s) +if [ -n "$STATUS" ]; then + git add -A + git commit -m "sync: $(date '+%Y-%m-%d %H:%M')" 2>&1 | tee -a "$LOG_FILE" || log "commit failed (nothing to commit or conflict)" + git push "$REMOTE" "$BRANCH" 2>&1 | tee -a "$LOG_FILE" || log "push failed" +else + # 若有已提交但未推送的提交,也推送(仅当远程有此分支且本地比远程多提交时) + if git ls-remote --exit-code --heads "$REMOTE" "$BRANCH" &>/dev/null; then + AHEAD=$(git rev-list "refs/remotes/${REMOTE}/${BRANCH}"..HEAD --count 2>/dev/null || echo 0) + if [ "${AHEAD:-0}" -gt 0 ]; then + git push "$REMOTE" "$BRANCH" 2>&1 | tee -a "$LOG_FILE" || log "push failed" + fi + else + git push -u "$REMOTE" "$BRANCH" 2>&1 | tee -a "$LOG_FILE" || log "push (new branch) failed" + fi +fi + +log "--- sync end ---" diff --git a/.cursor/skills/assistant-doc-sync/SKILL.md b/.cursor/skills/assistant-doc-sync/SKILL.md index 7ed358c6..3fe89f4e 100644 --- a/.cursor/skills/assistant-doc-sync/SKILL.md +++ b/.cursor/skills/assistant-doc-sync/SKILL.md @@ -30,7 +30,7 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 | 要点类型 | 写入位置 | 示例 | |----------|----------|------| -| 需求清单项 | `开发文档/1、需求/YYYY-MM-DD-需求.md`(当日文件,以日期最新为主) | 会员分润差异化、VIP 手动设置;同步后更新 `1、需求/索引.md` | +| 需求清单项 | `开发文档/1、需求/需求汇总.md` 需求清单表 | 会员分润差异化、VIP 手动设置 | | 近期讨论 | `开发文档/10、项目管理/运营与变更.md` | 第五部分或新增节 | | 技术分析 | `临时需求池/` 或 `开发文档/8、部署/` | 分润需求-技术分析.md | | 项目推进 | `开发文档/10、项目管理/项目落地推进表.md` | 第十二节永平落地表 | @@ -53,7 +53,7 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 1. **确定角色**:根据本次对话涉及目录(miniprogram/soul-admin/soul-api/需求文档)推断对应角色 2. **提炼进度**:从对话中提取本次开发完成的内容、当前阶段、待续项 -3. **更新项目索引**:打开 `e:\Gongsi\Mycontent\.cursor\agent\开发助理\项目索引\{索引文件名}.md`(索引文件名见步骤 5.1 映射表) +3. **更新项目索引**:打开 `.cursor\agent\开发助理\项目索引\{索引文件名}.md`(索引文件名见步骤 5.1 映射表) - 在「开发进度」表追加一行,**必须写日期**(YYYY-MM-DD) - 视需要更新「项目总结」段落 - 文末「最后更新」改为当前日期 @@ -61,12 +61,12 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 ### 4.6 会议收尾(会议结束、散会、会开完了时) -当用户说**「会议结束」「散会」「会开完了」**时,执行会议收尾流程(完整流程见 `e:\Gongsi\Mycontent\.cursor\skills\team-meeting\SKILL.md` 第 4 节): +当用户说**「会议结束」「散会」「会开完了」**时,执行会议收尾流程(完整流程见 `.cursor\skills\team-meeting\SKILL.md` 第 4 节): -1. **生成会议纪要**:`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md`,按 `_模板.md` 填写;**必须包含「问题与作答区」**,将待确认/待澄清项列出为问题表,作答列留空 -2. **各角色经验入库**:追加到 `e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md`(角色→目录见步骤 5.1 映射表) +1. **生成会议纪要**:`.cursor\meeting\YYYY-MM-DD_主题.md`,按 `_模板.md` 填写;**必须包含「问题与作答区」**,将待确认/待澄清项列出为问题表,作答列留空 +2. **各角色经验入库**:追加到 `.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md`(角色→目录见步骤 5.1 映射表) 3. **更新项目索引**:各参会角色对应的 `agent/开发助理/项目索引/{索引名}.md` 开发进度表追加一行,写日期 -4. **更新会议记录索引**:`e:\Gongsi\Mycontent\.cursor\meeting\README.md` 索引表追加 +4. **更新会议记录索引**:`.cursor\meeting\README.md` 索引表追加 5. **Skill 升级**(若有影响开发规范的决议):更新对应 SKILL-xxx.md 6. **回复**:会议收尾已完成,纪要见 `meeting/YYYY-MM-DD_主题.md` @@ -83,7 +83,6 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 | 后端开发 | `agent/后端工程师/evolution/` | `agent/开发助理/项目索引/后端.md` | | 产品经理 | `agent/产品经理/evolution/` | `agent/开发助理/项目索引/产品.md` | | 测试人员 | `agent/软件测试/evolution/` | `agent/开发助理/项目索引/测试.md` | -| 安全工程师 | `agent/安全工程师/evolution/` | `agent/开发助理/项目索引/团队.md` | | 助理橙子 | `agent/开发助理/evolution/` | `agent/开发助理/项目索引/助理橙子.md` | | 跨角色/团队 | `agent/团队/evolution/` | `agent/开发助理/项目索引/团队.md` | @@ -107,16 +106,16 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 - 应升级的 Skill 2. **写入经验文件**(绝对路径): - - 路径:`e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md` + - 路径:`.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md` - 当天文件不存在则新建;文件名用日期,经验按天存储 3. **更新项目索引**(绝对路径): - - 路径:`e:\Gongsi\Mycontent\.cursor\agent\开发助理\项目索引\{索引名}.md`(见 5.1 映射) + - 路径:`.cursor\agent\开发助理\项目索引\{索引名}.md`(见 5.1 映射) - 在「开发进度」表追加一行,**必须写日期**(YYYY-MM-DD) - 更新文末「最后更新」为当前日期 4. **更新经验清单**: - - 路径:`e:\Gongsi\Mycontent\.cursor\agent\开发助理\经验清单.md` + - 路径:`.cursor\agent\开发助理\经验清单.md` - 在索引表追加一行 5. **升级 Skill**:根据经验类型,更新对应 `.cursor/skills/{skill}/SKILL.md` @@ -130,10 +129,7 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 ``` 开发文档/ -├── 1、需求/ -│ ├── 索引.md # 主需求 = 日期最新的需求文件 -│ ├── YYYY-MM-DD-需求.md # 需求文件按日期命名,以最新为主 -│ └── 以界面定需求.md # 界面级需求基准 +├── 1、需求/需求汇总.md # 需求清单、业务需求 ├── 8、部署/ # 技术方案、部署说明 ├── 10、项目管理/ │ ├── 项目落地推进表.md # 里程碑、永平落地 @@ -156,7 +152,7 @@ description: 开发团队文档同步与经验升级。小橙、橙子、讨论 **小橙**执行: 1. 提炼:VIP 手动设置已完成;会员分润差异化待实现;好友优惠仅针对文章 -2. 更新 `1、需求/YYYY-MM-DD-需求.md`(当日文件):新增「需求清单」行;同步后更新 `1、需求/索引.md` +2. 更新 `需求汇总.md`:新增「需求清单」行 3. 更新 `运营与变更.md`:第五部分追加近期讨论 4. 回复:已记录并更新开发文档,详见 xxx diff --git a/.cursor/skills/karuo-party/README.md b/.cursor/skills/karuo-party/README.md new file mode 100644 index 00000000..9b4968fd --- /dev/null +++ b/.cursor/skills/karuo-party/README.md @@ -0,0 +1,159 @@ +# 卡若创业派对运营技能包 + +> **打包日期**:2026-03-20 +> **项目**:一场soul的创业实验-永平 +> **技能包路径**:`.cursor/skills/karuo-party/` + +--- + +## 📦 打包内容 + +本技能包整合了卡若创业派对的 4 大核心运营技能: + +1. **运营报表**:Soul派对运营数据全自动写入飞书表格 +2. **飞书视频文字下载**:从飞书妙记下载视频和文字 +3. **视频切片**:视频转录、高光识别、批量切片、成片输出 +4. **多平台分发**:一键分发到抖音/B站/视频号/小红书/快手 + +--- + +## 🔐 凭证管理 + +所有凭证统一存储在 `credentials/` 目录: + +### 飞书凭证 + +- **`.feishu_tokens.json`**:飞书访问令牌(自动刷新) + +### 视频平台 Cookies + +- **视频号**:`cookies/视频号_cookies.json`(有效期 ~24-48h) +- **B站**:`cookies/B站_cookies.json`(有效期 ~6个月) +- **小红书**:`cookies/小红书_cookies.json`(有效期 ~1-3天) +- **快手**:`cookies/快手_cookies.json`(有效期 ~7-30天) +- **抖音**:`cookies/抖音_cookies.json`(账号封禁中) + +--- + +## 📁 目录结构 + +``` +.cursor/skills/karuo-party/ +├── SKILL.md # 主技能入口 +├── README.md # 本文件 +├── credentials/ # 凭证目录 +│ ├── .feishu_tokens.json # 飞书Token +│ └── cookies/ # 平台Cookies +│ ├── 视频号_cookies.json +│ ├── B站_cookies.json +│ ├── 小红书_cookies.json +│ ├── 快手_cookies.json +│ └── 抖音_cookies.json +└── skills/ # 子技能文档 + ├── 运营报表_SKILL.md + ├── 飞书视频文字下载_SKILL.md + ├── 视频切片_SKILL.md + └── 多平台分发_SKILL.md +``` + +--- + +## 🚀 快速开始 + +### 1. 运营报表 + +```bash +FEISHU_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本" +cd "$FEISHU_SCRIPT" +python3 soul_party_to_feishu_sheet.py 115 +``` + +### 2. 飞书视频文字下载 + +```bash +JIYAO_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/智能纪要/脚本" +python3 "$JIYAO_SCRIPT/feishu_minutes_export_github.py" "<妙记链接>" +python3 "$JIYAO_SCRIPT/feishu_minutes_download_video.py" "<妙记链接>" +``` + +### 3. 视频切片 + +```bash +VIDEO_SCRIPT="/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/视频切片/脚本" +conda activate mlx-whisper +python3 "$VIDEO_SCRIPT/soul_slice_pipeline.py" --video "<原视频.mp4>" --clips 8 +``` + +### 4. 多平台分发 + +```bash +DIST_SCRIPT="/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/多平台分发/脚本" +python3 "$DIST_SCRIPT/distribute_all.py" --video-dir "<成片目录>" +``` + +--- + +## 📝 使用说明 + +### 激活方式 + +当用户提到以下触发词时,自动激活本技能包: + +- **运营报表**、**派对填表**、**派对截图** +- **飞书视频下载**、**妙记下载**、**飞书妙记** +- **视频剪辑**、**切片发布**、**视频切片** +- **多平台分发**、**一键分发**、**全平台发布** +- **卡若创业派对**、**派对运营** + +### 执行流程 + +1. **读取对应子技能**:根据用户需求,读取 `skills/` 目录下对应的 SKILL.md +2. **检查凭证**:确认 `credentials/` 目录下相关凭证文件存在且有效 +3. **执行命令**:按子技能文档中的命令执行(路径指向卡若AI原始脚本目录) +4. **结果反馈**:执行完成后反馈结果 + +--- + +## ⚠️ 注意事项 + +1. **脚本路径**:所有脚本仍在卡若AI原始目录,本技能包仅提供技能文档和凭证管理 +2. **凭证同步**:凭证更新后需手动复制到本技能包的 `credentials/` 目录 +3. **跨平台兼容**:macOS 用 `python3`,Windows 用 `python` + +--- + +## 🔄 凭证更新 + +### 飞书 Token + +```bash +cd "/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本" +python3 auto_log.py +# 更新后,将 .feishu_tokens.json 复制到本技能包的 credentials/ 目录 +``` + +### 平台 Cookies + +各平台 Cookie 文件位于 `credentials/cookies/` 目录。更新方式: + +- **视频号**:浏览器登录后,使用 `cookie_manager.py` 提取 +- **B站**:使用 `bilibili-api-python` 自动获取 +- **小红书/快手**:Playwright 自动化登录后提取 + +--- + +## 📚 相关文档 + +- **主技能入口**:`SKILL.md` +- **卡若创业派对项目**:`/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水岸_项目管理/卡若创业派对/README.md` +- **运营报表脚本**:`/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/` +- **视频切片脚本**:`/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/视频切片/脚本/` +- **多平台分发脚本**:`/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/多平台分发/脚本/` + +--- + +## 📋 版本记录 + +| 版本 | 日期 | 说明 | +|:---|:---|:---| +| 1.0 | 2026-03-20 | 初版:整合运营报表、视频切片、多平台分发、飞书视频文字下载 4 大技能,统一凭证管理 | diff --git a/.cursor/skills/karuo-party/SKILL.md b/.cursor/skills/karuo-party/SKILL.md new file mode 100644 index 00000000..986528bf --- /dev/null +++ b/.cursor/skills/karuo-party/SKILL.md @@ -0,0 +1,233 @@ +--- +name: 卡若创业派对运营 +description: > + 卡若创业派对全链路运营技能包。包含运营报表、视频切片、多平台分发、飞书视频文字下载等核心能力。 + 所有凭证(飞书TOKEN、各平台Cookies)统一管理在 credentials/ 目录。 + 当用户提到 运营报表、视频切片、多平台分发、飞书视频下载、派对运营、卡若创业派对 时自动激活。 +triggers: 运营报表、视频切片、多平台分发、飞书视频下载、派对运营、卡若创业派对、派对填表、视频剪辑、一键分发、妙记下载 +owner: 水岸 +group: 运营 +version: "1.0" +updated: "2026-03-20" +--- + +# 卡若创业派对运营 Skill 包 + +> **项目定位**:Soul 创业派对全链路——从派对结束到内容变现 +> **技能包路径**:`.cursor/skills/karuo-party/` +> **凭证目录**:`credentials/`(飞书TOKEN、各平台Cookies) + +--- + +## 一、技能包组成 + +本技能包包含以下 4 个核心子技能: + +| # | 技能名 | 文件路径 | 触发词 | 用途 | +|:--|:---|:---|:---|:---| +| ① | Soul派对运营报表 | `skills/运营报表_SKILL.md` | 运营报表、派对填表、派对截图 | 截图→飞书表格→发群 | +| ② | 飞书视频文字下载 | `skills/飞书视频文字下载_SKILL.md` | 妙记下载、飞书视频、飞书妙记 | 文字+视频→本地 | +| ③ | 视频切片 | `skills/视频切片_SKILL.md` | 视频剪辑、切片发布 | 原视频→转录→高光→成片 | +| ④ | 多平台分发 | `skills/多平台分发_SKILL.md` | 一键分发、全平台发布 | 成片→抖音/B站/视频号/小红书/快手 | + +--- + +## 二、凭证管理 + +所有凭证统一存储在 `credentials/` 目录: + +### 2.1 飞书凭证 + +| 文件 | 说明 | 用途 | +|:---|:---|:---| +| `.feishu_tokens.json` | 飞书访问令牌 | 运营报表、智能纪要、素材库 | + +**Token 自动刷新**:所有脚本遇 401 自动用 refresh_token 刷新,无需手动。 + +### 2.2 视频平台 Cookies + +| 平台 | Cookie 文件 | 有效期 | 状态 | +|:---|:---|:---|:---| +| 视频号 | `cookies/视频号_cookies.json` | ~24-48h | ✅ 可用 | +| B站 | `cookies/B站_cookies.json` | ~6个月 | ✅ 可用 | +| 小红书 | `cookies/小红书_cookies.json` | ~1-3天 | ✅ 可用 | +| 快手 | `cookies/快手_cookies.json` | ~7-30天 | ⚠️ 需检查 | +| 抖音 | `cookies/抖音_cookies.json` | ~2-4h | ❌ 账号封禁 | + +**Cookie 管理**:`cookie_manager.py` 统一管理,自动迁移、API 预检、防重复登录。 + +--- + +## 三、快速使用 + +### 3.1 运营报表(派对结束后) + +```bash +# 路径指向卡若AI原始脚本目录 +FEISHU_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本" + +cd "$FEISHU_SCRIPT" +python3 auto_log.py # 刷新Token(首次或过期时) +python3 soul_party_to_feishu_sheet.py 115 # 填表+发群 +``` + +**详细流程**:见 `skills/运营报表_SKILL.md` + +### 3.2 飞书视频文字下载 + +```bash +JIYAO_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/智能纪要/脚本" + +# 导出文字 +python3 "$JIYAO_SCRIPT/feishu_minutes_export_github.py" "<妙记链接>" -o "/Users/karuo/Documents/聊天记录/soul" + +# 下载视频 +python3 "$JIYAO_SCRIPT/feishu_minutes_download_video.py" "<妙记链接>" -o "/Users/karuo/Movies/soul视频/原视频" +``` + +**详细流程**:见 `skills/飞书视频文字下载_SKILL.md` + +### 3.3 视频切片 + +```bash +VIDEO_SCRIPT="/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/视频切片/脚本" + +eval "$(~/miniforge3/bin/conda shell.zsh hook)" +conda activate mlx-whisper +python3 "$VIDEO_SCRIPT/soul_slice_pipeline.py" --video "<原视频.mp4>" --clips 8 --two-folders +``` + +**详细流程**:见 `skills/视频切片_SKILL.md` + +### 3.4 多平台分发 + +```bash +DIST_SCRIPT="/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/多平台分发/脚本" + +# 定时排期:第1条立即,后续 30-120min 随机间隔 +python3 "$DIST_SCRIPT/distribute_all.py" --video-dir "<成片目录>" + +# 立即全部发布 +python3 "$DIST_SCRIPT/distribute_all.py" --now +``` + +**详细流程**:见 `skills/多平台分发_SKILL.md` + +--- + +## 四、完整流程(派对结束后) + +### Phase 1:数据入库 + +1. **运营报表**:提取效果数据 → 填表 → 发群 +2. **飞书妙记**:导出文字 → 下载视频 + +### Phase 2:智能纪要 + +1. 提炼纪要 JSON +2. 生成纪要 HTML→PNG +3. 纪要图入报表 +4. 纪要图发群 + +### Phase 3:视频生产 + +1. **视频切片**:转录 → 高光识别 → 批量切片 → 增强 +2. **多平台分发**:成片 → 5平台发布(定时排期) + +### Phase 4:文章内容 + +1. 写第9章文章 +2. 上传小程序 +3. 推送飞书群 + +**详细流程**:见卡若AI项目 `02_卡人(水)/水岸_项目管理/卡若创业派对/README.md` + +--- + +## 五、凭证更新 + +### 5.1 飞书 Token 更新 + +```bash +cd "/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本" +python3 auto_log.py +``` + +更新后,将 `.feishu_tokens.json` 复制到本技能包的 `credentials/` 目录。 + +### 5.2 平台 Cookie 更新 + +各平台 Cookie 文件位于 `credentials/cookies/` 目录。更新方式: + +1. **视频号**:浏览器登录后,使用 `cookie_manager.py` 提取 +2. **B站**:使用 `bilibili-api-python` 自动获取 +3. **小红书/快手**:Playwright 自动化登录后提取 + +更新后,Cookie 文件会自动同步到本技能包。 + +--- + +## 六、目录结构 + +``` +.cursor/skills/karuo-party/ +├── SKILL.md # 本文件(主入口) +├── README.md # 说明文档 +├── credentials/ # 凭证目录 +│ ├── .feishu_tokens.json # 飞书Token +│ └── cookies/ # 平台Cookies +│ ├── 视频号_cookies.json +│ ├── B站_cookies.json +│ ├── 小红书_cookies.json +│ ├── 快手_cookies.json +│ └── 抖音_cookies.json +└── skills/ # 子技能文件 + ├── 运营报表_SKILL.md + ├── 飞书视频文字下载_SKILL.md + ├── 视频切片_SKILL.md + └── 多平台分发_SKILL.md +``` + +--- + +## 七、使用说明 + +### 7.1 激活方式 + +当用户提到以下触发词时,自动激活本技能包: + +- **运营报表**、**派对填表**、**派对截图** +- **飞书视频下载**、**妙记下载**、**飞书妙记** +- **视频剪辑**、**切片发布**、**视频切片** +- **多平台分发**、**一键分发**、**全平台发布** +- **卡若创业派对**、**派对运营** + +### 7.2 执行流程 + +1. **读取对应子技能**:根据用户需求,读取 `skills/` 目录下对应的 SKILL.md +2. **检查凭证**:确认 `credentials/` 目录下相关凭证文件存在且有效 +3. **执行命令**:按子技能文档中的命令执行(路径指向卡若AI原始脚本目录) +4. **结果反馈**:执行完成后反馈结果 + +### 7.3 注意事项 + +- **脚本路径**:所有脚本仍在卡若AI原始目录,本技能包仅提供技能文档和凭证管理 +- **凭证同步**:凭证更新后需手动复制到本技能包的 `credentials/` 目录 +- **跨平台兼容**:macOS 用 `python3`,Windows 用 `python` + +--- + +## 八、相关文档 + +- **卡若创业派对项目**:`/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水岸_项目管理/卡若创业派对/README.md` +- **运营报表脚本**:`/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/` +- **视频切片脚本**:`/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/视频切片/脚本/` +- **多平台分发脚本**:`/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/多平台分发/脚本/` + +--- + +## 版本记录 + +| 版本 | 日期 | 说明 | +|:---|:---|:---| +| 1.0 | 2026-03-20 | 初版:整合运营报表、视频切片、多平台分发、飞书视频文字下载 4 大技能,统一凭证管理 | diff --git a/.cursor/skills/karuo-party/credentials/README.md b/.cursor/skills/karuo-party/credentials/README.md new file mode 100644 index 00000000..7dbda7bb --- /dev/null +++ b/.cursor/skills/karuo-party/credentials/README.md @@ -0,0 +1,6 @@ +# 本机凭证目录 + +将飞书 token、各平台 cookies 等**仅放在本机**,文件名与结构见上级 `karuo-party` 的 SKILL / README。 + +- 本目录已在仓库根 `.gitignore` 中忽略,**不要**把真实密钥提交到 Git。 +- 若目录为空,按 `skills/karuo-party` 文档从模板复制并重命名即可。 diff --git a/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md b/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md new file mode 100644 index 00000000..e0c023df --- /dev/null +++ b/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md @@ -0,0 +1,170 @@ +--- +name: 多平台分发 +description: > + 一键将视频分发到 5 个平台(抖音、B站、视频号、小红书、快手)。 + API 优先策略:视频号纯 API、B站 bilibili-api-python、抖音纯 API。 + 支持定时排期(第1条立即发,后续 30-120 分钟随机间隔)、并行分发、去重、失败自动重试。 +triggers: 多平台分发、一键分发、全平台发布、批量分发、视频分发 +owner: 木叶 +group: 木 +version: "4.0" +updated: "2026-03-11" +--- + +# 多平台分发 Skill(v4.0) + +> **核心原则**:API 发布为主,Playwright 为辅。确保确定性地分发到各平台。 +> **v4.0 变更**:视频号已切换为纯 API、统一元数据生成器、定时排期优化、简介/标签/分区自动填充。 + +--- + +## 一、平台与实现方式 + +| 平台 | 实现方式 | 定时发布 | Cookie 有效期 | 120 场实测 | +|------|----------|----------|---------------|------------| +| **视频号** | **纯 API**(DFS 上传 + post_create) | API 原生支持 | ~24-48h | 12/12 成功 | +| **B站** | **bilibili-api-python** API 优先 → Playwright 兜底 | API `dtime` | ~6 个月 | 12/12 成功 | +| **小红书** | Playwright headless 自动化 | UI 定时(降级立即) | ~1-3 天 | 12/12 成功 | +| **快手** | Playwright headless 自动化 | UI 定时 | ~7-30 天 | Cookie 过期 | +| **抖音** | 纯 API(VOD + bd-ticket-guard) | API `timing_ts` | ~2-4h | 账号封禁中 | + +> **关于视频号官方 API 边界**: +> 按《视频号与腾讯相关 API 整理》结论,微信官方目前**没有开放「短视频上传/发布」接口**;本 Skill 中的视频号发布能力,属于对 `https://channels.weixin.qq.com` 视频号助手网页协议的逆向封装(DFS 上传 + `post_create`),仅在你本机使用,需自行承担协议变更与合规风险。 +> 官方可控能力(直播记录、橱窗、留资、罗盘数据、本地生活等)的服务端 API 入口为:`https://developers.weixin.qq.com/doc/channels/api/`,如需做直播/橱窗/留资集成,可基于该文档在单独 Skill 中扩展。 + +--- + +## 二、一键命令 + +```bash +cd /Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/多平台分发/脚本 + +# 定时排期:第1条立即,后续 30-120min 随机间隔 +python3 distribute_all.py + +# 立即全部发布 +python3 distribute_all.py --now + +# 只发指定平台 +python3 distribute_all.py --platforms 视频号 B站 + +# 自定义视频目录 +python3 distribute_all.py --video-dir "/path/to/videos/" + +# 检查 Cookie / 重试失败 +python3 distribute_all.py --check +python3 distribute_all.py --retry +``` + +--- + +## 三、定时排期(v4.0 优化) + +### 3.1 排期规则 +- **第 1 条**:立即发布(`first_delay=0`) +- **第 2 条起**:前一条 + random(30, 120) 分钟 +- 若总跨度 > 24h,自动按比例压缩 +- 12 条视频典型跨度 ~10-14h + +### 3.2 各平台定时实现 + +| 平台 | 定时方式 | 参数 | +|------|----------|------| +| B站 | API `meta.dtime` | Unix 时间戳(秒) | +| 视频号 | API 暂不支持原生定时 | 描述中标注时间/手动设置 | +| 抖音 | API `timing_ts` | Unix 时间戳 | +| 快手 | Playwright UI | `schedule_helper.py` | +| 小红书 | Playwright UI | `schedule_helper.py` | + +--- + +## 四、元数据自动生成(v4.0 新增) + +`video_metadata.py` 根据文件名自动生成各平台差异化内容: + +```python +from video_metadata import VideoMeta +meta = VideoMeta.from_filename("AI最大的缺点是上下文太短.mp4") + +meta.title("B站") # 优化后的标题 +meta.description("B站") # 标题 + 标签 + 品牌标记 +meta.tags_str("B站") # AI工具,效率提升,Soul派对,... +meta.bilibili_meta() # B站投稿完整 meta(含 tid/tag/desc) +meta.title_short() # 小红书短标题(≤20字) +meta.hashtags("视频号") # #AI工具 #效率提升 ... #小程序 卡若创业派对 +``` + +### 4.1 内容结构 +- **标题**:手工优化标题库优先,否则从文件名智能提取 +- **简介**:标题 + 换行 + 话题标签 + `#小程序 卡若创业派对` +- **标签**:基于关键词匹配(AI/创业/副业/Soul 等 12 类)+ 通用标签 +- **分区**:B站 tid=160(生活>日常) +- **风控过滤**:`content_filter.py` 自动替换敏感词(70+ 映射,严格/宽松分级) + +--- + +## 五、商品链接/小黄车(调研结果) + +| 平台 | 功能 | 实现方式 | 状态 | +|------|------|----------|------| +| B站 | 花火计划商品链接 | 需企业认证 + 品牌合作授权 | 需手动配置 | +| 视频号 | 挂小程序 | 视频号主页 > 设置 > 服务菜单 > 小程序 | 需手动配置 | +| 抖音 | 小黄车 | 需开通橱窗(粉丝 ≥1000) | 账号封禁 | +| 快手 | 商品卡片 | 需开通快手小店 | 需手动配置 | +| 小红书 | 商品笔记 | 需开通小红书店铺 | 需手动配置 | + +**当前做法**:在描述中统一添加 `#小程序 卡若创业派对` 引导用户搜索。 + +--- + +## 六、Cookie 管理 + +`cookie_manager.py` 统一管理: +- 中央存储:`多平台分发/cookies/{平台}_cookies.json` +- 自动迁移:旧路径 → 中央存储(首次使用时) +- API 预检:5 平台各自 auth API 校验有效性 +- 防重复登录:有效 Cookie 不触发重新获取 + +--- + +## 七、去重机制 + +- 日志:`publish_log.json`(JSON Lines) +- 去重键:`(平台名, 视频文件名)` +- 双保险:调度器层 + 平台层 +- `--no-dedup` 跳过,`--retry` 重跑失败 + +--- + +## 八、目录结构 + +``` +木叶_视频内容/ +├── 多平台分发/ ← 本 Skill(调度器 + 共享工具) +│ ├── SKILL.md +│ └── 脚本/ +│ ├── distribute_all.py # 主调度器 v4 +│ ├── video_metadata.py # 统一元数据生成器(v4 新增) +│ ├── schedule_generator.py # 定时排期(v4: 第1条立即发) +│ ├── schedule_helper.py # Playwright 定时 UI 辅助 +│ ├── publish_result.py # 统一 PublishResult + 去重 +│ ├── title_generator.py # 标题生成(被 video_metadata 取代) +│ ├── content_filter.py # 敏感词过滤(70+ 映射) +│ ├── cookie_manager.py # Cookie 统一管理(5 平台 API 预检) +│ ├── video_utils.py # 视频处理(封面、元数据) +│ └── publish_log.json # 发布日志 +├── 抖音发布/ ← 纯 API(账号封禁中) +├── B站发布/ ← bilibili-api-python API +├── 视频号发布/ ← 纯 API(DFS 协议,v5) +├── 小红书发布/ ← Playwright headless +└── 快手发布/ ← Playwright headless +``` + +--- + +## 九、依赖 + +- Python 3.10+ +- httpx, bilibili-api-python, playwright, Pillow +- ffmpeg/ffprobe(系统已安装) +- `playwright install chromium` diff --git a/.cursor/skills/karuo-party/skills/视频切片_SKILL.md b/.cursor/skills/karuo-party/skills/视频切片_SKILL.md new file mode 100644 index 00000000..6d84b5b6 --- /dev/null +++ b/.cursor/skills/karuo-party/skills/视频切片_SKILL.md @@ -0,0 +1,583 @@ +--- +name: 视频切片 +description: Soul派对视频切片 + 快速混剪 + 切片动效包装(片头/片尾/程序化)+ 剪映思路借鉴(智能剪口播/镜头分割)。触发词含视频剪辑、切片发布、快速混剪、切片动效包装、程序化包装、片头片尾。 +group: 木 +triggers: 视频剪辑、切片发布、字幕烧录、**快速混剪、混剪预告、快剪串联、切片动效包装、程序化包装、片头片尾、批量封面、视频包装**、镜头切分、场景检测 +owner: 木叶 +version: "1.3" +updated: "2026-03-03" +--- + +# 视频切片 + +> **语言**:所有文档、字幕、封面文案统一使用**简体中文**。soul_enhance 自动繁转简。 + +> **Soul 视频输出**:Soul 剪辑的成片统一导出到 `/Users/karuo/Movies/soul视频/最终版/`,原视频在 `原视频/`,中间产物在 `其他/`。 + +> **联动规则**:每次执行视频切片时,自动检查是否需要「切片动效包装」或「快速混剪」。若用户提到片头/片尾/程序化包装/批量封面,则联动调用 `切片动效包装/10秒视频` 模板渲染,再与切片合成。若用户提到快速混剪/混剪预告/快剪串联,则在切片或成片生成后再调用 `脚本/quick_montage.py` 输出一条节奏版预告。 + +## ⭐ Soul派对切片流程(默认) + +``` +原始视频 → MLX转录 → 字幕转简体 → 高光识别(API 优先/最佳模型,失败则 Ollama→规则) → 批量切片 → soul_enhance → 输出成片 + ↑ ↓ + 提取后立即繁转简+修正错误 封面+字幕(已简体)+加速10%+去语气词 +``` + +**切片时长**:每段为**完整的一个片段**,时长 **30 秒~300 秒**,由该完整片段起止时间决定。**标题**用一句**刺激性观点**(见 `Soul竖屏切片_SKILL.md`)。 + +**提问→回答 结构**:若片段内有人提问,前3秒优先展示**提问问题**,再播回答;高光识别填 `question` 且 `hook_3sec` 与之一致,成片整条去语助词。详见 `参考资料/视频结构_提问回答与高光.md`、`参考资料/高光识别提示词.md`。 + +**Soul 竖屏专用**:抖音/首页用竖屏成片、完整参数与流程见 → **`Soul竖屏切片_SKILL.md`**(竖屏 498×1080、crop 参数、批量命令)。 + +### 最新切片风格(当前默认) + +以后默认按这套风格出切片与成片: + +| 项 | 当前默认风格 | +|------|------| +| **封面** | **Soul 绿 + 半透明质感 + 深色渐变** | +| **前3秒** | **优先提问→回答**,有提问时 Hook = `question` | +| **标题** | **一句刺激性观点**,文件名 = 封面标题 = `highlights.title` | +| **字幕** | 居中、白字黑描边、关键词亮金黄高亮 | +| **节奏** | 去语助词 + 整体加速 10% | +| **成片尺寸** | 竖屏 **498×1080** | + +这套风格与 `参考资料/高光识别提示词.md`、`参考资料/热点切片_标准流程.md`、`Soul竖屏切片_SKILL.md` 保持一致。 + +### 一键命令(Soul派对专用) + +#### 一体化流水线(推荐) + +```bash +cd 03_卡木(木)/木叶_视频内容/视频切片/脚本 +conda activate mlx-whisper +python3 soul_slice_pipeline.py --video "/path/to/soul派对会议第57场.mp4" --clips 6 + +# 仅重新烧录(字幕转简体后重跑增强) +python3 soul_slice_pipeline.py -v "视频.mp4" -n 6 --skip-transcribe --skip-highlights --skip-clips + +# 切片+成片后,额外生成一条快速混剪 +python3 soul_slice_pipeline.py -v "视频.mp4" -n 8 --two-folders --quick-montage +``` + +流程:**转录 → 字幕转简体 → 高光识别 → 批量切片 → 增强** + +#### 分步命令 + +```bash +# 1. 转录(MLX Whisper,约3分钟/2.5小时视频) +eval "$(~/miniforge3/bin/conda shell.zsh hook)" +conda activate mlx-whisper +mlx_whisper audio.wav --model mlx-community/whisper-small-mlx --language zh --output-format all + +# 2. 高光识别(API 优先,未配置则 Ollama → 规则;流水线会在读取 transcript 前自动转简体) +python3 identify_highlights.py -t transcript.srt -o highlights.json -n 6 +# 需配置 OPENAI_API_KEY 或 OPENAI_API_BASES/KEYS/MODELS,默认模型 gpt-4o + +# 3. 切片 +python3 batch_clip.py -i 视频.mp4 -l highlights.json -o clips/ -p soul + +# 4. 增强处理(封面+字幕+加速,soul_enhance) +python3 soul_enhance.py -c clips/ -l highlights.json -t transcript.srt -o clips_enhanced/ +``` + +### 快速混剪(新增) + +适用场景:已经有 `切片/` 或 `成片/`,需要快速出一条 20~40 秒节奏版预告、招商预热视频、短视频串联版。 + +**默认策略**: + +| 项 | 规则 | +|------|------| +| **顺序** | 优先按 `virality_score` / `rank` 排序;无分数时按序号 | +| **取样** | 每条默认截取 **4 秒**高密度片段 | +| **成片目录输入** | 自动跳过前 **2.6 秒**封面,避免混剪里全是封面 | +| **输出** | 统一分辨率、统一节奏后拼成一条 `快速混剪.mp4` | + +```bash +# 从成片目录生成快速混剪(推荐) +python3 脚本/quick_montage.py \ + -i "/path/to/成片" \ + -o "/path/to/快速混剪.mp4" \ + -l "/path/to/highlights.json" \ + --source-kind final \ + -n 8 \ + -s 4 + +# 一体化流水线里直接附带生成 +python3 脚本/soul_slice_pipeline.py \ + -v "/path/to/原视频.mp4" \ + --two-folders \ + --quick-montage \ + --montage-source finals \ + --montage-max-clips 8 \ + --montage-seconds 4 +``` + +#### 按章节主题提取(推荐:第9章单场成片) + +以**章节 .md 正文**为来源提取核心主题,再在转录稿中匹配时间,不限于 5 分钟、片段数与章节结构一致。详见 `参考资料/主题片段提取规则.md`。 + +```bash +# 从章节生成 highlights,再走 batch_clip + soul_enhance +python3 chapter_themes_to_highlights.py -c "第112场.md" -t transcript.srt -o highlights_from_chapter.json +python3 batch_clip.py -i 视频.mp4 -l highlights_from_chapter.json -o clips/ -p soul112 +python3 soul_enhance.py -c clips/ -l highlights_from_chapter.json -t transcript.srt -o clips_enhanced/ +``` + +- **主题来源**:章节 .md 按 `---` 分块,每块一个主题;文件名由 batch_clip 按 `前缀_序号_标题` 生成(标题仅保留中文与安全字符)。 + +### Soul 竖屏成片(横版源 → 竖屏中段去白边) + +**约定**:以后剪辑 Soul 视频,成片统一做「竖屏中段」裁剪:横版 1920×1080 只保留中间竖条并去掉左右白边,输出 498×1080 竖屏。 + +| 步骤 | 说明 | +|------|------| +| 源 | 横版 1920×1080(soul_enhance 输出) | +| 1 | 取竖条 608×1080,起点 **x=483**(相对画面左) | +| 2 | 裁掉左侧白边 60px、右侧白边 50px → 内容区宽 498 | +| 输出 | **498×1080** 竖屏,仅内容窗口 | + +**FFmpeg 一条命令(固定参数):** + +```bash +# 单文件。输入为 1920×1080 的 enhanced 成片 +ffmpeg -y -i "输入_enhanced.mp4" -vf "crop=608:1080:483:0,crop=498:1080:60:0" -c:a copy "输出_竖屏中段.mp4" +``` + +**批量对某目录下所有 \*_enhanced.mp4 做竖屏中段:** + +```bash +# 脚本目录下执行,或直接调用 +python3 脚本/soul_vertical_crop.py --dir "/path/to/clips_enhanced" --suffix "_竖屏中段" +``` + +参数说明见:`参考资料/竖屏中段裁剪参数说明.md`。 + +### 增强功能说明 + +| 功能 | 说明 | +|------|------| +| **封面贴片** | 前2.5秒 Hook,苹方/思源黑体 | +| **字幕烧录** | 关键词加粗加大亮金黄突出,去语助词+去空格 | +| **加速10%** | 节奏更紧凑,适合短视频 | + +### 时间预估 + +| 步骤 | 2.5小时视频 | +|------|------------| +| MLX转录 | 3分钟 | +| 切片10个 | 2分钟 | +| 增强处理 | 8分钟 | +| **总计** | **约13分钟** | + +--- + +## AI 生成与 LTX 可选集成 + +在「已有录播 → 转录→高光→切片→成片」主流程外,可选用 **LTX**(GitHub: Lightricks/LTX-Video、LTX-2、LTX-Desktop-MPS)实现: + +| 能力 | 用途 | +|------|------| +| **Retake**(LTX-2 / LTX Desktop) | 对已有视频**某段时间**重生成,替换口误/补拍,再走成片流程 | +| **Text/Image/Audio to video** | AI 生成口播替代、片头片尾、插播片段,生成 mp4 后进 `切片/` 或成片流程 | +| **Video extension** | 片段前后自然延长,衔接切片 | +| **自动 Prompt 增强** | 高光/标题文案 → 更易被生成模型理解,便于 I2V/Retake | + +**详细能力表与 API/本地/Desktop 接入**:见 `参考资料/LTX_能力与集成说明.md`。 +**Soul 竖屏场景**:见 `Soul竖屏切片_SKILL.md` 第九节「AI 生成与 LTX 可选集成」。 +**约定**:LTX 生成的片段统一经 soul_enhance(封面+字幕+竖屏)输出,与录播成片一致。 + +--- + +## 📹 通用视频处理 + +一键处理视频:转录 → 字幕清洗 → 视频增强 → 烧录字幕 → **输出单个成片** + +--- + +## ⚡ 一键命令 + +```bash +# 最简用法 - 输出: 视频名_带字幕.mp4 +python3 /Users/karuo/Documents/个人/卡若AI/04_效率工具/视频切片/scripts/one_video.py -i "视频.mp4" + +# 指定输出路径 +python3 scripts/one_video.py -i "视频.mp4" -o "成片.mp4" +``` + +### 处理流程 + +``` +┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ +│ 提取音频 │──▶│MLX转录 │──▶│字幕清洗 │──▶│视频增强 │──▶│烧录字幕 │ +│ (5秒) │ │(1-3分钟)│ │繁转简 │ │降噪美颜 │ │ │ +└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ + │ + ▼ + ┌────────────────┐ + │ 单个带字幕成片 │ + │ 可直接发布 │ + └────────────────┘ +``` + +### 时间预估 + +| 视频时长 | 处理时间 | +|---------|---------| +| 5分钟 | 1-2分钟 | +| 30分钟 | 5-8分钟 | +| 1小时 | 10-15分钟 | + +--- + +## 🎯 自动优化项 + +脚本自动完成以下优化,无需手动操作: + +| 优化项 | 说明 | +|--------|------| +| 繁转简 | 自动将繁体字幕转为简体 | +| 去语气词 | 删除"嗯"、"啊"、"那个"等 | +| 修正错误 | 自动修正常见转录错误 | +| 音频降噪 | FFT降噪+高低频过滤 | +| 画面美颜 | 亮度+饱和度微调 | +| 音量标准化 | 统一音量级别 | + +--- + +## 📝 手动分步操作 + +如需更精细控制,可分步执行: + +### 1. 转录 + +```bash +# 激活环境 +eval "$(~/miniforge3/bin/conda shell.zsh hook)" +conda activate mlx-whisper + +# 提取音频 +ffmpeg -y -i "视频.mp4" -vn -ar 16000 -ac 1 audio.wav + +# MLX Whisper转录 +mlx_whisper audio.wav --model mlx-community/whisper-small-mlx --language zh --output-format srt +``` + +### 2. 字幕清洗 + +```bash +# 繁转简+修正错误 +python3 scripts/fix_subtitles.py --input transcript.srt --output clean.srt +``` + +### 3. 视频增强 + +```bash +# 降噪+美颜 +ffmpeg -y -i "视频.mp4" \ + -vf "eq=brightness=0.05:saturation=1.1" \ + -af "afftdn=nf=-25:nr=10:nt=w,highpass=f=80,lowpass=f=8000,volume=1.2" \ + -c:v h264_videotoolbox -b:v 5M \ + -c:a aac -b:a 128k \ + enhanced.mp4 +``` + +### 4. 烧录字幕 + +```bash +# Clean版(推荐) +python3 scripts/burn_subtitles_clean.py -i enhanced.mp4 -s clean.srt -o 成片.mp4 +``` + +--- + +## 🎨 字幕样式 + +### 默认样式(Clean版) + +| 元素 | 字号 | 颜色 | 效果 | +|------|------|------|------| +| 内容字幕 | 42px(竖屏)/ 36px(横屏) | 白色 | 黑色描边,无阴影 | +| 关键词 | 同上 | 金黄色 | 自动高亮 | + +### 关键词高亮列表 + +自动高亮的关键词(金黄色): +- 数字:100万、30万、10万、5万、1万 +- 概念:私域、AI、自动化、矩阵、IP、获客、变现、转化 +- 平台:抖音、公众号、微信、存客宝 + +--- + +## 🔊 音频处理参数 + +| 滤镜 | 作用 | 参数 | +|------|------|------| +| highpass | 去低频杂音 | f=80Hz | +| lowpass | 去高频噪音 | f=8000Hz | +| afftdn | FFT降噪 | nf=-25, nr=10 | +| volume | 音量调整 | 1.2倍 | + +--- + +## 📁 脚本列表 + +| 脚本 | 功能 | 使用频率 | +|------|------|---------| +| **soul_slice_pipeline.py** | Soul 切片一体化流水线 | ⭐⭐⭐ 最常用 | +| **soul_enhance.py** | 封面+字幕(简体)+加速+去语气词 | ⭐⭐⭐ | +| **soul_vertical_crop.py** | Soul 竖屏中段批量裁剪(横版→498×1080 去白边) | ⭐⭐⭐ | +| **kill_ffmpeg_when_clip_done.py** | 剪辑结束后自动关掉 ffmpeg(监视剪映/PID 或立即杀) | ⭐ 按需 | +| **scene_detect_to_highlights.py** | 镜头/场景检测 → highlights.json(PySceneDetect,可接 batch_clip) | ⭐⭐ | +| chapter_themes_to_highlights.py | 按章节 .md 主题提取片段(本地模型→highlights.json) | ⭐⭐⭐ | +| identify_highlights.py | 高光识别(API 优先→Ollama→规则,默认 gpt-4o) | ⭐⭐ | +| batch_clip.py | 批量切片 | ⭐⭐ | +| one_video.py | 单视频一键成片 | ⭐⭐ | +| burn_subtitles_clean.py | 字幕烧录(无阴影) | ⭐ | +| fix_subtitles.py | 字幕清洗(繁转简) | ⭐ | + +--- + +## 🛠 环境配置 + +### 已安装(默认使用MLX Whisper) + +- **MLX Whisper**: `~/miniforge3/envs/mlx-whisper` ⭐ **默认转录引擎** + - Apple Silicon优化,比CPU Whisper快10倍+ + - 2.5小时视频转录仅需3分钟 +- **字体**: `03_卡木(木)/木叶_视频内容/视频切片/fonts/`(优先) +- **字幕**: 统一简体中文(soul_enhance 自动繁转简) + +### 转录命令(默认) + +```bash +# 激活MLX环境 +eval "$(~/miniforge3/bin/conda shell.zsh hook)" +conda activate mlx-whisper + +# MLX Whisper转录(推荐) +mlx_whisper audio.wav --model mlx-community/whisper-small-mlx --language zh --output-format all +``` + +### 高光识别模型(API 优先) + +高光识别默认使用**当前可用最佳模型**:优先走 **OpenAI 兼容 API**(见下),未配置或失败时再用本地 Ollama,最后规则兜底。 + +- **单接口**:`OPENAI_API_BASE`、`OPENAI_API_KEY`、`OPENAI_MODEL`(默认 `gpt-4o`)。 +- **多接口故障切换**:`OPENAI_API_BASES`、`OPENAI_API_KEYS`、`OPENAI_MODELS`(逗号分隔,按顺序尝试)。 +- 不写死密钥,从环境变量读取;详见 `运营中枢/参考资料/卡若AI异常处理与红线.md` 与 API 稳定性规则。 + +### 依赖检查 + +```bash +# FFmpeg +ffmpeg -version + +# MLX环境 +eval "$(~/miniforge3/bin/conda shell.zsh hook)" +conda activate mlx-whisper +python -c "import mlx_whisper; print('OK')" + +# Python库 +pip3 list | grep -E "moviepy|Pillow|opencc|openai" +``` + +### 安装依赖 + +```bash +pip3 install --break-system-packages moviepy Pillow opencc-python-reimplemented + +# 镜头切分(可选):PySceneDetect +pip3 install 'scenedetect[opencv]' +``` + +--- + +## 🔧 剪辑结束后自动关 ffmpeg + +脚本 **soul_enhance**、**batch_clip**、**soul_slice_pipeline** 在退出时(含 Ctrl+C)会自动结束本进程启动的 ffmpeg 子进程,避免剪辑结束后仍占用 CPU。 + +若使用 **剪映/VideoFusion** 等 GUI 剪辑,可先运行监视脚本,剪辑应用退出后自动杀 ffmpeg: + +```bash +# 先启动监视,再打开剪映;关掉剪映后会自动结束 ffmpeg +python3 脚本/kill_ffmpeg_when_clip_done.py --app VideoFusion + +# 或监视指定 PID +python3 脚本/kill_ffmpeg_when_clip_done.py --pid 12345 + +# 仅立即杀掉当前所有 ffmpeg +python3 脚本/kill_ffmpeg_when_clip_done.py --kill-now +``` + +--- + +## ❓ 常见问题 + +### Q: 转录不准确? +A: 使用medium模型:将脚本中的`whisper-small-mlx`改为`whisper-medium-mlx` + +### Q: 字幕太小/太大? +A: 修改`one_video.py`第142行的`font_size`值 + +### Q: 处理太慢? +A: +1. 视频已自动使用VideoToolbox GPU加速 +2. 字幕默认限制80条以内 + +### Q: 输出文件太大? +A: 降低码率:将`-b:v 5M`改为`-b:v 3M` + +--- + +## 🎬 切片动效包装(联动能力) + +用 React 程序化生成片头/片尾/封面,与切片产出一键合成。**每次执行视频切片时,若用户提到片头/片尾/包装/批量封面,则联动本能力**。 + +### 联动规则(必守) + +| 场景 | 是否联动 | 操作 | +|:---|:---|:---| +| 用户说片头/片尾/程序化包装/批量封面 | ✓ | 先执行切片 → 渲染动效模板 → 合成 | +| 默认 Soul 切片、单视频成片 | 可选 | 执行后提示可选用切片动效包装 | + +### 10秒视频模板(卡若AI 品牌) + +路径:`视频切片/切片动效包装/10秒视频/` + +| Composition | 说明 | +|:---|:---| +| Video10s | 简洁版:渐变 + 标题 + 副标题 | +| Video10sRich | 内容丰富版:粒子 + 极限环 + 流动线条 | + +规格:竖屏 1080×1920,10 秒,30fps。 + +### 一键命令(动效包装) + +```bash +cd 03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频 + +# 预览 +npm run dev + +# 渲染片头(简洁版) +npx remotion render src/index.ts Video10s /Users/karuo/Documents/卡若Ai的文件夹/导出/程序化视频/片头.mp4 + +# 渲染片头(丰富版) +npx remotion render src/index.ts Video10sRich /Users/karuo/Documents/卡若Ai的文件夹/导出/程序化视频/片头_丰富.mp4 +``` + +### 与切片合成流程 + +``` +切片产出(clips_enhanced/) + ↓ +【联动】渲染片头/片尾 + ↓ +ffmpeg 合成:片头 + 切片 + 片尾 +``` + +### 参考资料 + +- 速查:`视频切片/切片动效包装/参考资料/切片动效包装速查.md` +- 官方:https://www.remotion.dev/docs + +--- + +## 🎞 剪映思路借鉴与自实现(可选能力) + +> 参考 **剪映专业版**(`/Applications/VideoFusion-macOS.app`)内可读配置与流程,用开源方案自实现「智能剪口播」与「智能镜头分割」,不依赖剪映二进制。详见:`参考资料/剪映_智能剪口播与智能片段分割_逆向分析.md`。 + +### 智能剪口播(口播稿 → 按文案/时间轴切片段) + +| 剪映逻辑 | 本技能对应实现 | +|----------|----------------| +| 语音→文字 + 时间戳 | **MLX Whisper** 转录 → `transcript.srt` | +| 按文案智能剪、口播稿↔时间轴对齐 | **高光识别**(`identify_highlights` / `chapter_themes_to_highlights`)→ `highlights.json` → `batch_clip` | +| 前端配置键 | `script_ai_cut_config`、`transcript_options`(仅作对照,不读写剪映) | + +**结论**:现有流程「转录 → 字幕转简 → 高光识别 → 批量切片 → soul_enhance」已覆盖「智能剪口播」能力;按句/按段细切可与 `transcript.srt` 时间戳结合,在 `highlights.json` 中按句生成条目即可。 + +### 智能镜头分割(按镜头/场景切分) + +剪映 **SceneEditDetection** 思路(仅借鉴思路与参数,算法用开源实现): + +- **输入**:帧序列;剪映内部为 96×96 小图 + 数组缓冲。 +- **算法思路**:图像特征 + 滑动窗口 + 后处理阈值 → 输出镜头边界。 +- **剪映可读参数**(`SceneEditDetection/config.json`): + `sliding_window_size: 7`、`img_feat_dims: 128`、`post_process_threshold: 0.35`、backbone/predhead 模型名(内部用,不引用)。 + +**自实现方案**:使用 **PySceneDetect**(ContentDetector/AdaptiveDetector),按阈值与最小场景长度得到切点,再转为与 `batch_clip` 兼容的 `highlights.json`。 + +**一键:镜头检测 → highlights → 批量切片 → 增强** + +```bash +cd 03_卡木(木)/木叶_视频内容/视频切片/脚本 +pip install 'scenedetect[opencv]' # 仅首次 + +# 镜头检测 → 生成 highlights.json +python3 scene_detect_to_highlights.py -i "原视频.mp4" -o "输出目录/highlights_from_scenes.json" -t 27 --min-scene-len 15 + +# 用生成的 highlights 做切片 + 增强(与现有流水线一致) +python3 batch_clip.py -i "原视频.mp4" -l "输出目录/highlights_from_scenes.json" -o "输出目录/clips/" -p scene +python3 soul_enhance.py -c "输出目录/clips/" -l "输出目录/highlights_from_scenes.json" -t "输出目录/transcript.srt" -o "输出目录/clips_enhanced/" +``` + +**参数速查**: + +| 参数 | 说明 | 建议 | +|------|------|------| +| `--threshold` / `-t` | 内容变化阈值,越大切点越少 | 27(可试 20~35) | +| `--min-scene-len` | 最小场景长度(帧) | 15 | +| `--min-duration` | 过滤短于 N 秒的片段 | 按需 | +| `--max-clips` / `-n` | 最多保留片段数 | 0=不限制 | + +**与「高光切片」二选一**: +- **高光切片**:按话题/金句/提问(需转录 + 高光识别),适合口播、访谈。 +- **镜头切片**:按画面切换切分,适合多机位、快剪、无稿素材;可先跑 `scene_detect_to_highlights` 再走同一套 `batch_clip` + `soul_enhance`。 + +### 参考资料(剪映与流程) + +- **剪映逆向分析**:`03_卡木(木)/木叶_视频内容/视频切片/参考资料/剪映_智能剪口播与智能片段分割_逆向分析.md` + - 智能剪口播 H5 路径、智能片段分割 config 与参数、自实现建议与合规说明。 +- **热点切片标准流程**:`参考资料/热点切片_标准流程.md`(五步、两目录、命令速查)。 +- **高光识别提示词**:`参考资料/高光识别提示词.md`(提问→回答、节奏感、快速混剪优先片段规则)。 + +--- + +## 📊 输出示例 + +``` +输入: 会议录像.mp4 (500MB, 30分钟) + ↓ +输出: 会议录像_带字幕.mp4 (200MB) + - 中文字幕已烧录 + - 音频已降噪 + - 画面已优化 + - 可直接发布抖音/视频号 +``` + +--- + +## 🔗 工作目录 + +``` +03_卡木(木)/木叶_视频内容/视频切片/ +├── 脚本/ +│ ├── soul_slice_pipeline.py # ⭐ Soul 一体化 +│ ├── soul_enhance.py # ⭐ 封面+字幕+加速 +│ ├── scene_detect_to_highlights.py # 镜头检测→highlights(剪映思路自实现) +│ ├── one_video.py # 单视频成片 +│ └── ... +├── 参考资料/ +│ ├── 剪映_智能剪口播与智能片段分割_逆向分析.md # 剪映思路与参数参考 +│ ├── 热点切片_标准流程.md +│ └── 竖屏中段裁剪参数说明.md +├── 切片动效包装/ # 联动能力:片头/片尾/程序化 +│ ├── 10秒视频/ # React 程序化模板 +│ └── 参考资料/切片动效包装速查.md +├── fonts/ +└── SKILL.md +``` diff --git a/.cursor/skills/karuo-party/skills/运营报表_SKILL.md b/.cursor/skills/karuo-party/skills/运营报表_SKILL.md new file mode 100644 index 00000000..81c99e67 --- /dev/null +++ b/.cursor/skills/karuo-party/skills/运营报表_SKILL.md @@ -0,0 +1,522 @@ +--- +name: Soul派对运营报表 +description: Soul 派对运营数据全自动写入飞书表格(按月份选 2月/3月 标签)→ 会议纪要图片入表 → 发飞书群(数据+纪要图);与智能纪要联动,一站式可执行。含 Token 自动刷新、写入校验、小程序数据、派对录屏链接。完整流程可复制执行,支持基因胶囊打包。 +triggers: 运营报表、派对填表、派对截图填表发群、会议纪要上传、本月运营数据、全部月份统计、派对纪要、智能纪要、106场、107场、113场、114场、115场 +parent: 飞书管理 +owner: 水桥 +group: 水 +version: "3.0" +updated: "2026-03-04" +--- + +# Soul 派对运营报表 · 基因胶囊 + +> **一句话**:派对截图 + TXT → 飞书运营报表(按月份选表)→ 填数据 + 填纪要图 + 派对录屏链接 + 发群(文字 + 图片),与**会议纪要**联动,完整流程可复制执行,可打包为基因胶囊。 + +--- + +## 零、完整流程提取(可复制执行) + +以下为从「派对结束」到「报表+群消息+纪要图」全链路的**逐步清单**与**一键命令**,便于 AI 或人工按序执行。 + +### 0.1 流程图 + +```mermaid +flowchart LR + subgraph 输入 + A1[关闭页截图] --> A2[小助手弹窗] + A2 --> A3[派对 TXT] + A3 --> A4[飞书妙记链接] + end + subgraph 步骤 + B1[1. 注册场次+填数据] --> B2[2. 发群文字] + B2 --> B3[3. 生成纪要图] + B3 --> B4[4. 纪要图入表] + B4 --> B5[5. 纪要图发群] + end + subgraph 输出 + C1[飞书运营报表] + C2[飞书群消息] + end + A1 --> B1 + B1 --> C1 + B2 --> C2 + B4 --> C1 + B5 --> C2 +``` + +### 0.2 前置条件 + +| 项 | 说明 | +|:---|:---| +| Python 3 + requests | `pip3 install requests` | +| 飞书 Token | 脚本目录下 `.feishu_tokens.json`,过期时运行 `python3 auto_log.py` | +| 场次已注册 | 在 `soul_party_to_feishu_sheet.py` 中已添加 ROWS、SESSION_DATE_COLUMN、SESSION_MONTH、PARTY_VIDEO_LINKS(可选)、MINIPROGRAM_EXTRA / MINIPROGRAM_EXTRA_3(可选) | +| 派对 TXT | 如 `soul 派对 115场 20260304.txt`,用于纪要文本/纪要图 | + +### 0.3 逐步命令(以 115 场为例) + +| 步 | 动作 | 输入 | 命令 | 输出/校验 | +|:---|:---|:---|:---|:---| +| 1 | 填效果数据+小程序+派对录屏+发群 | 场次号 115 | `cd 飞书管理/脚本 && python3 soul_party_to_feishu_sheet.py 115` | 控制台见「已写入」「已同步推送到飞书群」「已写入派对录屏链接」 | +| 2 | 纪要文本入表(可选) | TXT 路径、日期列 4 | `python3 write_party_minutes_from_txt.py "/path/to/soul 派对 115场 20260304.txt" 4` | 控制台见「已写入派对智能纪要到今日总结」 | +| 3 | 生成纪要图 | 见智能纪要 Skill | JSON→HTML→截图,输出到 `卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.png` | 得到 PNG 文件 | +| 4 | 纪要图入表 | PNG 路径、sheet-id、date-col | `python3 feishu_write_minutes_to_sheet.py --party-image "卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.png" --sheet-id bJR5sA --date-col 4` | 控制台见「已上传派对智能纪要图片」 | +| 5 | 纪要图发群 | PNG 路径 | `cd 智能纪要/脚本 && python3 send_to_feishu.py --image "卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.png"` | 飞书群收到长图 | + +**路径约定**:飞书管理脚本目录 = `02_卡人(水)/水桥_平台对接/飞书管理/脚本/`;智能纪要脚本 = `02_卡人(水)/水桥_平台对接/智能纪要/脚本/`;报告输出 = `卡若Ai的文件夹/报告/`。 + +### 0.4 一键顺序命令块(复制即用) + +```bash +# 假设已配置 115 场且 TXT 与报告路径如下,按顺序执行 +FEISHU_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本" +JIYAO_SCRIPT="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/智能纪要/脚本" +REPORT="/Users/karuo/Documents/卡若Ai的文件夹/报告" +TXT="/Users/karuo/Documents/聊天记录/soul/soul 派对 115场 20260304.txt" + +cd "$FEISHU_SCRIPT" +python3 auto_log.py +python3 soul_party_to_feishu_sheet.py 115 +python3 write_party_minutes_from_txt.py "$TXT" 4 + +# 纪要图需先按智能纪要 Skill 生成 HTML 再截图得到 PNG,再执行: +# python3 feishu_write_minutes_to_sheet.py --party-image "$REPORT/soul_115场_智能纪要_20260304.png" --sheet-id bJR5sA --date-col 4 +# cd "$JIYAO_SCRIPT" && python3 send_to_feishu.py --image "$REPORT/soul_115场_智能纪要_20260304.png" +``` + +### 0.5 新场次从零到完成清单 + +1. **在 `soul_party_to_feishu_sheet.py` 中**:添加 `ROWS['116']`、`SESSION_DATE_COLUMN['116']`、`SESSION_MONTH['116']`,以及在 `_maybe_send_group` 的 `date_label`、`src_date` 中加 `'116'`;若需派对录屏则填 `PARTY_VIDEO_LINKS['116']`;若需小程序则填 `MINIPROGRAM_EXTRA_3['5']`(3 月 5 日)。 +2. **执行填表**:`python3 soul_party_to_feishu_sheet.py 116`。 +3. **可选**:纪要文本 `write_party_minutes_from_txt.py "" 5`;纪要图按智能纪要生成后 `feishu_write_minutes_to_sheet.py --party-image --sheet-id bJR5sA --date-col 5`,再 `send_to_feishu.py --image `。 + +### 0.6 故障排查速查 + +| 现象 | 处理 | +|:---|:---| +| 未找到日期列 | 先 `python3 auto_log.py` 再重试;确认 SESSION_DATE_COLUMN、SESSION_MONTH 与表头一致 | +| 90202 wrong range | 单格写入时 range 写成 `E29:E29` 形式 | +| 派对录屏未写入 | 检查 PARTY_VIDEO_LINKS 是否非空且格式为完整 URL | +| 小程序数据未写入 | 3 月用 MINIPROGRAM_EXTRA_3,键为当月「日期号」如 '4' | +| 飞书群未收到 | 检查 Webhook、机器人是否启用 | + +--- + +## 一站式完整流程(填数据 → 填图片 → 发群) + +**目标**:同一场派对做完「填运营报表数据 → 把会议纪要图片填进报表 → 把纪要图发到飞书群」,顺序执行、流程清晰。 + +| 步骤 | 动作 | 命令 / 说明 | +|:---|:---|:---| +| **1** | **填数据 + 发群(文字)** | `cd 飞书管理/脚本`
`python3 soul_party_to_feishu_sheet.py 115`
→ 效果数据写入当月表对应日期列,并**自动推送竖状文字到飞书群**(含报表链接) | +| **2** | **生成会议纪要图** | 按 **智能纪要 Skill**(`02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md`):txt → JSON → HTML → 截图 PNG,输出到 `卡若Ai的文件夹/报告/` | +| **3** | **填图片到报表** | `cd 飞书管理/脚本`
`python3 feishu_write_minutes_to_sheet.py --party-image "<报告路径>/soul_115场_智能纪要_20260304.png" --sheet-id bJR5sA --date-col 4`
→ 纪要图写入运营报表「今日总结」对应列(3 月 115 场 = 第 4 列) | +| **4** | **把纪要图发到飞书群** | `cd 智能纪要/脚本`
`python3 send_to_feishu.py --image "<报告路径>/soul_115场_智能纪要_20260304.png"`
→ 默认 Webhook 为**运营报表同一飞书群**,群内会收到纪要长图 | + +**执行顺序**:1 → 2 → 3 → 4,即可完成「数据入表 + 纪要图入表 + 群内先收文字再收纪要图」。 + +- **2 月场次**:步骤 3 不传 `--sheet-id`/`--date-col` 时,默认写 2 月表 19/20 列;步骤 4 不变。 +- **同群**:运营报表发群与纪要图发群使用同一 Webhook(见 1.3),群内先看到场次数据,再看到纪要图。 + +--- + +## 快速开始(30 秒上手) + +```bash +# ❶ 安装依赖(一次性) +pip3 install requests + +# ❷ 刷新飞书 Token(每天首次或 Token 过期时) +cd 飞书管理/脚本 && python3 auto_log.py + +# ❸ 写入派对效果数据(自动选 2月/3月 工作表 + 发群) +python3 soul_party_to_feishu_sheet.py 115 + +# ❹ 生成派对智能纪要文本并写入「今日总结」(可选,与纪要图二选一或都做) +python3 write_party_minutes_from_txt.py "/path/to/soul 派对 115场 20260304.txt" 4 + +# ❺ 批量写入小程序数据(可选) +python3 write_miniprogram_batch.py +``` + +所有脚本路径:飞书管理相关在 `飞书管理/脚本/`,纪要生成与发图在 `智能纪要/脚本/`。**3 月场次**会自动写入 3 月工作表标签,不会误写到 2 月。 + +--- + +## 一、完整配置清单 + +### 1.1 飞书应用 + +| 项目 | 值 | +|:---|:---| +| App ID | `cli_a48818290ef8100d` | +| App Secret | `dhjU0qWd5AzicGWTf4cTqhCWJOrnuCk4` | +| 授权回调 | `http://localhost:5050/api/auth/callback` | +| 权限 | `wiki:wiki` `docx:document` `drive:drive` | + +### 1.2 运营报表(飞书电子表格) + +| 项目 | 值 | +|:---|:---| +| 表格链接(2月) | https://cunkebao.feishu.cn/wiki/wikcnIgAGSNHo0t36idHJ668Gfd?sheet=7A3Cy9 | +| 表格链接(3月) | https://cunkebao.feishu.cn/wiki/wikcnIgAGSNHo0t36idHJ668Gfd?sheet=bJR5sA | +| spreadsheet_token | `wikcnIgAGSNHo0t36idHJ668Gfd` | +| 2 月 sheet_id | `7A3Cy9` | +| 3 月 sheet_id | `bJR5sA` | +| 表格结构 | A 列=指标名,第 1 行=日期(1、2…),第 2 行可含「113场」「114场」等,第 3~12 行=效果数据,第 15 行=小程序访问,第 28 行=今日总结,第 29 行=派对录屏(飞书妙记链接) | +| 月份选择 | 脚本按 `SESSION_MONTH` 自动选 2 月或 3 月工作表,避免串月 | + +### 1.3 飞书群 Webhook(报表数据 + 纪要图同群) + +| 项目 | 值 | +|:---|:---| +| Webhook URL | `https://open.feishu.cn/open-apis/bot/v2/hook/34b762fc-5b9b-4abb-a05a-96c8fb9599f1` | +| 用途 | ① 填表后自动推送竖状格式消息(场次数据+报表链接);② 会议纪要图片发群(智能纪要 `send_to_feishu.py --image` 默认即此 Webhook) | + +### 1.4 Token 管理 + +| 项目 | 说明 | +|:---|:---| +| Token 文件 | 脚本同目录 `.feishu_tokens.json` | +| 含字段 | `access_token`、`refresh_token`、`auth_time` | +| 自动刷新 | 所有脚本遇 401 自动用 refresh_token 刷新,无需手动 | +| 手动刷新 | `python3 auto_log.py` (静默刷新,不需浏览器) | + +--- + +## 二、脚本清单与用途 + +### 2.1 核心脚本(日常使用) + +| 脚本 | 功能 | 命令 | +|:---|:---|:---| +| `soul_party_to_feishu_sheet.py` | 按场次写入效果数据到**当月工作表**对应日期列 + 飞书群推送(2 月/3 月自动选标签) | `python3 soul_party_to_feishu_sheet.py 115` | +| `write_party_minutes_from_txt.py` | 从 TXT 生成智能纪要**文本**写入「今日总结」行(需指定日期列号) | `python3 write_party_minutes_from_txt.py "" 4` | +| `auto_log.py` | Token 刷新 + 飞书日志写入 | `python3 auto_log.py` | + +### 2.2 辅助脚本 + +| 脚本 | 功能 | 命令 | +|:---|:---|:---| +| `feishu_write_minutes_to_sheet.py` | 会议纪要/派对总结**图片**上传到「今日总结」对应日期列(默认 2 月 19/20 日列);3 月某场需指定 sheet 与日期列;**发群**需另执行智能纪要 `send_to_feishu.py --image` | `python3 feishu_write_minutes_to_sheet.py [内部图] [派对图]`
3 月 115 场:`--party-image --sheet-id bJR5sA --date-col 4` | +| `feishu_sheet_monthly_stats.py` | 月度运营数据统计 | `python3 feishu_sheet_monthly_stats.py 2` 或 `all` | +| `write_miniprogram_to_sheet.py` | **单日**写入小程序三核心数据(访问次数、访客、交易金额) | `python3 write_miniprogram_to_sheet.py 23 55 55 0` | +| `write_miniprogram_batch.py` | **批量**将 `MINIPROGRAM_EXTRA` 中所有日期的小程序数据写入报表 | `python3 write_miniprogram_batch.py` | + +### 2.3 派对录屏链接(自动写入) + +填表时若在 `soul_party_to_feishu_sheet.py` 中配置了 `PARTY_VIDEO_LINKS[场次]`(飞书妙记完整 URL),会**自动**写入「派对录屏」行对应列(如 115 场 → E29)。新场次需在脚本中补全链接后重新执行该场次填表。 + +### 2.4 小程序运营数据(自动写入) + +每日填表时,若在 `soul_party_to_feishu_sheet.py` 中配置了 **2 月** `MINIPROGRAM_EXTRA` 或 **3 月** `MINIPROGRAM_EXTRA_3`,会**自动**把当日小程序三核心数据写入对应日期列。数据需从 **Soul 小程序 / 微信公众平台 → 小程序 → 统计 → 实时访问、概况** 获取后填入配置: + +| 指标 | 数据来源 | 行(A 列关键词) | +|:---|:---|:---| +| 访问次数 | 微信公众平台 → 小程序 → 统计 → 实时访问 | 小程序访问 | +| 访客 | 同上 | 访客 | +| 交易金额 | 同上 | 交易金额 | + +**配置方式**(在 `soul_party_to_feishu_sheet.py` 中): + +```python +# 派对录屏(飞书妙记链接),写入「派对录屏」行 +PARTY_VIDEO_LINKS = { + '115': 'https://cunkebao.feishu.cn/minutes/obcnxxxx...', # 从飞书妙记复制 +} + +# 2 月小程序数据 +MINIPROGRAM_EXTRA = { + '23': {'访问次数': 55, '访客': 55, '交易金额': 0}, # 2月23日 +} +# 3 月小程序数据(113/114/115 场填表时自动写 3 月表) +MINIPROGRAM_EXTRA_3 = { + '4': {'访问次数': 60, '访客': 60, '交易金额': 0}, # 3月4日 115场,从 Soul 小程序后台获取后填入 +} +``` + +- 数据来源:Soul 小程序 / 微信公众平台 → 小程序 → 统计,每日手动查看后填入 +- 填派对表时自动带出:运行 `soul_party_to_feishu_sheet.py` 某场时,2 月用 `MINIPROGRAM_EXTRA`、3 月用 `MINIPROGRAM_EXTRA_3` 同列写入小程序三项,并若有 `PARTY_VIDEO_LINKS` 则写入派对录屏行 +- 单日写入(仅 2 月表):`python3 write_miniprogram_to_sheet.py 23 55 55 0`(日期列号 访问次数 访客 交易金额) +- 历史补全:在 `MINIPROGRAM_EXTRA` 中配齐多日数据后执行 `python3 write_miniprogram_batch.py` + +--- + +## 三、完整操作流程 + +**整体顺序**:先执行 **[ 一站式完整流程 ]**(本文件开头)中的 ① 填数据发群 → ② 生成纪要图 → ③ 填图片到报表 → ④ 纪要图发群,再按需做小程序或纪要文本。 + +### 3.1 每日派对结束后操作(当前流程) + +``` +输入:派对关闭页截图 + 小助手弹窗截图 + TXT 聊天记录(+ 可选:小程序当日数据) +输出:飞书运营报表(当月标签)写入 + 飞书群推送(文字) + 纪要图入表 + 纪要图发群(与会议纪要联动) +``` + +**月份与工作表**:脚本根据 `SESSION_MONTH` 自动选择 2 月或 3 月工作表,3 月场次(如 113、114、115)写入 3 月标签,不会写入 2 月。 + +#### Step 1:提取数据(从截图) + +从派对关闭页和小助手弹窗提取 10 项数据: + +| 序号 | 指标 | 来源 | +|:---|:---|:---| +| 1 | 主题 | TXT 提炼 ≤12 字 | +| 2 | 时长(分钟) | 关闭页「派对时长」 | +| 3 | Soul推流人数 | 关闭页「本场获得额外曝光」 | +| 4 | 进房人数 | 关闭页「派对成员」或小助手「进房人数」 | +| 5 | 人均时长 | 小助手「人均时长」 | +| 6 | 互动数量 | 小助手「互动数量」 | +| 7 | 礼物 | 关闭页「本场收到礼物」 | +| 8 | 灵魂力 | 关闭页「收获灵魂力」 | +| 9 | 增加关注 | 关闭页「新增粉丝」或小助手「增加关注」 | +| 10 | 最高在线 | 关闭页「最高在线」 | + +#### Step 2:在脚本中注册新场次 + +打开 `soul_party_to_feishu_sheet.py`,在 `ROWS` 字典中添加: + +```python +# 格式:'场次号': [主题, 时长, 推流, 进房, 人均, 互动, 礼物, 灵魂力, 关注, 最高在线] +'107': ['主题关键词 ≤12字', 140, 35000, 400, 8, 90, 3, 25, 10, 45], +``` + +在 `SESSION_DATE_COLUMN` 和 `SESSION_MONTH` 中添加映射(**按月份选工作表标签**,3 月填 3 月表): + +```python +SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2', '114': '3', '115': '4'} +SESSION_MONTH = {'105': 2, '106': 2, '107': 2, '113': 3, '114': 3, '115': 3} +``` + +并在 `_maybe_send_group` 的 `date_label`、`src_date` 中为该场次加上对应「X月X日」和 TXT 日期(如 `'115': '3月4日'`、`'115': '20260304'`)。 + +#### Step 3:执行写入 + 校验 + +```bash +# 写入效果数据(自动选 2月/3月 表 + 校验 + 发群) +python3 soul_party_to_feishu_sheet.py 115 + +# 生成智能纪要文本并写入「今日总结」(日期列号 = 当月几号,如 3月4日 填 4) +python3 write_party_minutes_from_txt.py "/path/to/soul 派对 115场 20260304.txt" 4 +``` + +成功输出示例(3 月场次): +``` +✅ 已选 3月 工作表(sheet_id=bJR5sA) +✅ 已写入飞书表格:115场 效果数据(竖列 E3:E12,共10格),校验通过 +✅ 已同步推送到飞书群(竖状格式) +✅ 已写入派对智能纪要到「今日总结」→ 2月4日列,校验通过 +``` + +若需将**智能纪要图片**放入「今日总结」并**发到飞书群**:见下节「智能纪要图片上传到报表 + 发群」。 + +--- + +## 3.2 智能纪要图片上传到报表 + 发群(十步清单) + +与 **智能纪要 Skill**(`02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md`)联动:纪要图写入运营报表「今日总结」对应列,并**发到运营报表同一飞书群**。 + +| 序号 | 步骤 | 说明 | +|:---|:---|:---| +| 1 | 准备派对 txt | 如 `soul 派对 115场 20260304.txt`(聊天记录/soul) | +| 2 | 智能提炼 JSON | 按智能纪要规范从 txt 提炼分享人、重点片段、干货、行动项,生成 `xxx_meeting.json` | +| 3 | 生成 HTML | `智能纪要/脚本/generate_meeting.py --input xxx_meeting.json --output "卡若Ai的文件夹/报告/soul_115场_智能纪要_20260304.html"` | +| 4 | 导出目录 | HTML/PNG 一律导出到 `卡若Ai的文件夹/报告/`,不落在 Skill 内 | +| 5 | 截图 PNG | `智能纪要/脚本/screenshot.py "<报告路径>.html" --output "<报告路径>.png"` | +| 6 | 确认场次与月份 | 115 场 → 3 月表、日期列 4;2 月场次用默认 19/20 列 | +| 7 | 上传到报表 | `飞书管理/脚本/feishu_write_minutes_to_sheet.py --party-image "<报告路径>.png" --sheet-id bJR5sA --date-col 4`(3 月) | +| 8 | **纪要图发群** | `智能纪要/脚本/send_to_feishu.py --image "<报告路径>.png"`(默认 Webhook = 运营报表群,群内收到纪要长图) | +| 9 | 2 月表 | 不指定时默认 `SHEET_ID=7A3Cy9`,派对图→19 列、内部会议→20 列;发群命令同上 | +| 10 | 协作 | 纪要内容与样式以智能纪要 Skill 为准;本 Skill 负责写入报表、Token 及与发群流程衔接 | + +**3 月场次参数速查**:`--sheet-id bJR5sA`,`--date-col` = 当月日期(如 4 日填 `4`)。纪要生成与截图命令详见智能纪要 Skill「智能纪要图片上传到运营报表」小节。 + +--- + +## 四、写入校验机制 + +所有写入操作均含**写后读回校验**: + +| 场景 | 校验方式 | +|:---|:---| +| 效果数据写入 | 写入后读回首格(主题),比对一致才算成功 | +| 智能纪要写入 | 写入后读回单元格内容,检查字数 > 0 | +| Token 过期 | 自动刷新后重试,不降级为追加行(避免写入错误位置) | +| 日期列未找到 | 直接报错退出,不降级为追加行 | + +校验未通过时脚本会打印具体差异信息,方便排查。 + +--- + +## 五、飞书群推送格式 + +**两类推送(同一飞书群)**:① 填表后自动推送竖状文字(场次数据+报表链接);② 纪要图发群需执行智能纪要 `send_to_feishu.py --image `,默认即本群 Webhook。一站式顺序见文首「一站式完整流程」。 + +写入成功后自动发送到飞书群(竖状格式,每行一项)。链接按当月工作表变化(3 月场次会带 `sheet=bJR5sA`): + +``` +【Soul 派对运营报表】 +链接:https://cunkebao.feishu.cn/wiki/wikcnIgAGSNHo0t36idHJ668Gfd?sheet=bJR5sA + +115场(3月4日)已登记: +主题:破产两次 家庭先于事业 +时长(分钟):156 +Soul推流人数:36974 +进房人数:484 +人均时长(分钟):8 +互动数量:82 +礼物:1 +灵魂力:3 +增加关注:15 +最高在线:56 +数据来源:soul 派对 115场 20260304.txt +``` + +--- + +## 六、智能纪要生成规则 + +**文本纪要**:`write_party_minutes_from_txt.py` 从派对 TXT 自动提炼结构化纪要: + +| 板块 | 内容 | +|:---|:---| +| 关键词 | 从 TXT 头部 `关键词:` 行提取 | +| 一、核心内容 | 按关键词匹配提取:退伍军人、AI切入、私域、编导对赌、项目切割等 | +| 二、金句 | 从对话中提炼可操作的建议 | +| 三、下一步 | 行动建议(联系管理、搜索培训等) | + +纪要**文本**写入运营报表「今日总结」行、对应日期列(需传入日期列号,如 3 月 4 日传 `4`)。**纪要图片**上传到同一格并**发群**:见 **§3.2 智能纪要图片上传到报表 + 发群**;3 月用 `--party-image --sheet-id bJR5sA --date-col <日>`,发群用 `智能纪要/脚本/send_to_feishu.py --image `。 + +--- + +## 七、跨平台兼容 + +### macOS(推荐) + +```bash +# 安装依赖 +pip3 install requests + +# 所有命令直接用 python3 +python3 soul_party_to_feishu_sheet.py 106 +``` + +### Windows + +```cmd +# 安装依赖 +pip install requests + +# Windows 用 python(不是 python3) +python soul_party_to_feishu_sheet.py 106 +python write_party_minutes_from_txt.py "C:\Downloads\soul 派对 106场 20260221.txt" 21 +python auto_log.py +``` + +### 路径差异 + +| 项目 | macOS | Windows | +|:---|:---|:---| +| 脚本目录 | `/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/` | `C:\Users\用户名\卡若AI\02_卡人(水)\水桥_平台对接\飞书管理\脚本\` | +| Python | `python3` | `python` | +| TXT 路径 | `/Users/karuo/Downloads/xxx.txt` | `C:\Users\用户名\Downloads\xxx.txt` | +| Token 文件 | 脚本同目录 `.feishu_tokens.json`(两个平台一致) | 同左 | + +### 环境变量覆盖(可选) + +所有配置项均可通过环境变量覆盖,无需改脚本: + +```bash +export FEISHU_SPREADSHEET_TOKEN=wikcnIgAGSNHo0t36idHJ668Gfd +export FEISHU_SHEET_ID=7A3Cy9 +export FEISHU_GROUP_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/34b762fc-... +export FEISHU_APP_ID=cli_a48818290ef8100d +export FEISHU_APP_SECRET=dhjU0qWd5AzicGWTf4cTqhCWJOrnuCk4 +``` + +--- + +## 八、常见问题 + +| 问题 | 解决 | +|:---|:---| +| `❌ 无法获取飞书 Token` | 运行 `python3 auto_log.py` 刷新 Token | +| `❌ 未找到日期列` | Token 过期导致读表失败,先 `python3 auto_log.py` 再重试 | +| `⚠️ 飞书群推送失败` | 检查 Webhook URL 是否有效、群机器人是否被禁用 | +| `❌ 写入失败 401` | Token 过期,脚本会自动刷新并重试;若仍失败则 `python3 auto_log.py` | +| Windows 中文路径乱码 | 确保终端编码为 UTF-8:`chcp 65001` | +| `pip3 not found` | Windows 用 `pip`;macOS 可能需 `pip3` 或 `python3 -m pip` | + +--- + +## 九、表格结构参考 + +2 月表(sheet=7A3Cy9)、3 月表(sheet=bJR5sA)结构一致: + +``` +表头第1行: [空] | 3月 | 1 | 2 | 3 | 4 | 5 | 6 | ... +第2行: 一、效果数据 | | 113场 | 114场 | 115场 | 116场 | ... +第3行: 主题 | | xx | xx | xx | | +第4行: 时长 | | xx | xx | xx | | +... +第12行: 最高在线 | | xx | xx | xx | | +... +第15行: 小程序访问| | xx | xx | xx | | ← 访问次数、访客、交易金额 +... +第28行: 今日总结 | | xx | xx | xx | | ← 智能纪要(文本或图片) +``` + +按 `SESSION_DATE_COLUMN` 与 `SESSION_MONTH` 决定写入哪一列、哪张表。 + +--- + +## 十、新增场次模板 + +每次新增场次,在 `soul_party_to_feishu_sheet.py` 中改以下几处: + +```python +# 1. ROWS 字典加一行(主题可带冲击性,≤12 字) +'116': ['主题≤12字', 时长, 推流, 进房, 人均, 互动, 礼物, 灵魂力, 关注, 最高在线], + +# 2. SESSION_DATE_COLUMN 加日期映射(当月几号) +SESSION_DATE_COLUMN = {..., '116': '5'} + +# 3. SESSION_MONTH 加月份(3 月场次必填 3,否则会写入 2 月表) +SESSION_MONTH = {..., '116': 3} + +# 4. _maybe_send_group 内 date_label、src_date 加映射(否则不发群) +# date_label = {..., '116': '3月5日'} +# src_date = {..., '116': '20260305'} + +# 5. 若当日有小程序数据,在 MINIPROGRAM_EXTRA 中加: +# MINIPROGRAM_EXTRA = {..., '5': {'访问次数': 60, '访客': 60, '交易金额': 0}} +``` + +--- + +## 十一、基因胶囊打包入口 + +本 Skill 支持打包为基因胶囊,便于继承与分发。打包后产出位于 `卡若Ai的文件夹/导出/基因胶囊/`。 + +```bash +cd /Users/karuo/Documents/个人/卡若AI +python3 "05_卡土(土)/土砖_技能复制/基因胶囊/脚本/gene_capsule.py" pack "02_卡人(水)/水桥_平台对接/飞书管理/运营报表_SKILL.md" +# 或按技能名(在 SKILL_REGISTRY 中匹配) +python3 "05_卡土(土)/土砖_技能复制/基因胶囊/脚本/gene_capsule.py" pack "Soul派对运营报表" +``` + +打包后将生成:胶囊 JSON、基因胶囊功能流程图.md、说明文档.md(含解包命令与引用)。 + +--- + +## 版本记录 + +| 版本 | 日期 | 说明 | +|:---|:---|:---| +| 1.0 | 2026-02-20 | 初版:截图填表发群 | +| 2.0 | 2026-02-22 | 基因胶囊:Token 自动刷新、写入校验、智能纪要、跨平台、完整配置清单 | +| 2.1 | 2026-03-04 | 月份路由:2月/3月 工作表分离(7A3Cy9 / bJR5sA),SESSION_MONTH 防串月;支持 113~115 场;小程序批量 write_miniprogram_batch;运营报表 SKILL 与当前流程同步 | +| 2.2 | 2026-03-04 | **智能纪要上传到报表**:§3.2 十步清单(txt→JSON→HTML→PNG→feishu_write_minutes_to_sheet);与智能纪要 Skill 联动;3 月用 --party-image --sheet-id bJR5sA --date-col | +| 2.3 | 2026-03-04 | **会议纪要 + 运营报表 + 发群一站式**:文首新增「一站式完整流程」四步(①填数据发群 ②生成纪要图 ③填图片到报表 ④纪要图发群);飞书群统一:数据推送与纪要图发群同 Webhook,纪要图发群用智能纪要 `send_to_feishu.py --image`;§3.2 增加「发群」步骤与说明 | +| 3.0 | 2026-03-04 | **完整流程提取 + 基因胶囊**:新增「零、完整流程提取」:流程图、前置条件、逐步命令表、一键命令块、新场次清单、故障排查;派对录屏链接写入(E29:E29 范围);§十一 基因胶囊打包入口与 pack 命令 | diff --git a/.cursor/skills/karuo-party/skills/飞书视频文字下载_SKILL.md b/.cursor/skills/karuo-party/skills/飞书视频文字下载_SKILL.md new file mode 100644 index 00000000..5552023c --- /dev/null +++ b/.cursor/skills/karuo-party/skills/飞书视频文字下载_SKILL.md @@ -0,0 +1,131 @@ +--- +name: 飞书视频和文字下载 +description: 飞书妙记单条/批量下载视频(mp4)与文字(txt),纯 API+Cookie,不打开浏览器。含 Cookie 获取链、默认输出目录、查找最早长视频。 +triggers: 飞书视频下载、飞书文字下载、妙记下载视频、妙记导出文字、飞书妙记下载、下载飞书视频、下载飞书文字、飞书视频和文字下载 +owner: 水桥 +group: 水 +version: "1.0" +updated: "2026-03-12" +parent_skill: 智能纪要 +--- + +# 飞书视频和文字下载 + +> **基因能力**:从飞书妙记链接或 object_token,命令行下载**视频(mp4)**与**文字(txt)**,无需打开浏览器。 +> 归属:水桥 · 智能纪要子能力,可独立打包为基因胶囊复用。 + +--- + +## 一、默认输出目录 + +| 类型 | 默认目录 | +|:---|:---| +| **文字(txt)** | `/Users/karuo/Documents/聊天记录/soul` | +| **视频(mp4)** | `/Users/karuo/Movies/soul视频/原视频` | + +脚本未指定 `-o`/`--output` 时使用上表;解包到其他环境时可修改为本地路径。 + +--- + +## 二、权限:Cookie 获取链(5 级) + +妙记**文字导出**与**视频下载**均依赖 Web Cookie(Open API 的 tenant_token 无法访问妙记正文/视频)。 + +1. **cookie_minutes.txt** 第一行(脚本同目录或 `智能纪要/脚本/`) +2. **环境变量** `FEISHU_MINUTES_COOKIE` +3. **本机浏览器**(browser_cookie3:Safari/Chrome/Firefox/Edge) +4. **Cursor 内置浏览器**:SQLite 明文 + `~/Library/Application Support/Cursor/Partitions/cursor-browser/Cookies` + 查询 `host_key LIKE '%feishu%' OR host_key LIKE '%cunkebao%'` +5. **手动兜底**:浏览器 F12 → 飞书妙记 list 请求 → 复制 Cookie 到 cookie_minutes.txt + +--- + +## 三、命令行用法 + +### 3.1 脚本根路径(本基因默认) + +```text +SCRIPT_DIR="/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/智能纪要/脚本" +``` + +解包到其他项目时,将上述路径改为本地「智能纪要/脚本」所在路径。 + +### 3.2 下载视频(单条) + +```bash +# 链接或 object_token 均可 +python3 "$SCRIPT_DIR/feishu_minutes_download_video.py" "https://cunkebao.feishu.cn/minutes/obcnc53697q9mj6h1go6v25e" +python3 "$SCRIPT_DIR/feishu_minutes_download_video.py" obcnc53697q9mj6h1go6v25e -o ~/Downloads/ +``` + +- 输出:默认 `原视频/` 下,文件名含标题与日期。 +- 依赖:`requests`;Cookie 见第二节。 + +### 3.3 导出文字(单条) + +```bash +# 导出为 txt(同上,需 Cookie) +python3 "$SCRIPT_DIR/feishu_minutes_export_github.py" "https://cunkebao.feishu.cn/minutes/obcnc53697q9mj6h1go6v25e" -o "/Users/karuo/Documents/聊天记录/soul" +``` + +- 输出:默认 `聊天记录/soul` 下 txt 文件。 + +### 3.4 批量文字(按场次范围) + +```bash +python3 "$SCRIPT_DIR/download_soul_minutes_101_to_103.py" --from 90 --to 102 +``` + +### 3.5 查找「最早且时长≥1小时且有画面」的妙记 + +```bash +python3 "$SCRIPT_DIR/find_oldest_long_video_minute.py" +python3 "$SCRIPT_DIR/find_oldest_long_video_minute.py" --max-status 200 +python3 "$SCRIPT_DIR/find_oldest_long_video_minute.py" --list-only +``` + +- 使用 list API 的 `duration`(毫秒)筛 ≥1 小时,再按 create_time 从早到晚用 status API 筛有 `video_download_url`,输出最早一条的 object_token、标题、日期、时长。 + +--- + +## 四、核心 API(供二次开发) + +| 能力 | 方法 | 说明 | +|:---|:---|:---| +| **列表** | `GET /minutes/api/space/list?size=50&space_name=1&last_time={ts}` | 分页用 `last_time` 为上一页最后一条的 create_time | +| **文字** | `POST /minutes/api/export` | params: object_token, format=2, add_speaker=true;Header: Cookie + Referer + bv-csrf-token | +| **视频** | `GET /minutes/api/status?object_token=xxx` | 返回 `data.video_info.video_download_url`,再 GET 该 URL 流式下载 | + +- 域名:`cunkebao.feishu.cn` 或 `meetings.feishu.cn`(同一套 Cookie)。 +- list 条目含 `duration`(毫秒)、`create_time`、`topic`、`object_token`。 + +--- + +## 五、脚本清单(依赖父目录 智能纪要/脚本) + +| 脚本 | 功能 | +|:---|:---| +| `feishu_minutes_download_video.py` | 单条妙记视频下载(status → mp4) | +| `feishu_minutes_export_github.py` | 单条妙记文字导出(export → txt) | +| `feishu_auth_helper.py` | tenant_token / Cookie 测试、refresh-cookie | +| `cursor_cookie_util.py` | 从 Cursor 浏览器提取 Cookie(feishu/github) | +| `download_soul_minutes_101_to_103.py` | 批量场次文字(--from/--to) | +| `find_oldest_long_video_minute.py` | 查找最早、时长≥1h、有视频的妙记 | + +--- + +## 六、解包后使用(继承本基因) + +1. 将本基因 **unpack** 到目标项目的 `智能纪要/飞书视频文字下载/` 或任意目录。 +2. 确保目标环境存在「智能纪要/脚本」或等价脚本目录,并安装 `requests`。 +3. 把本 SKILL 中 `SCRIPT_DIR` 改为目标环境中的脚本路径。 +4. 配置 Cookie:cookie_minutes.txt 或 FEISHU_MINUTES_COOKIE 或 Cursor Cookie 提取。 + +--- + +## 七、相关文档 + +- 父技能:`02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md` +- 权限与排查:`智能纪要/参考资料/飞书妙记下载-权限与排查说明.md` +- 账号与 API 索引:`运营中枢/工作台/00_账号与API索引.md` diff --git a/.cursor/skills/miniprogram-dev/SKILL.md b/.cursor/skills/miniprogram-dev/SKILL.md index ba5f9291..ed73dec1 100644 --- a/.cursor/skills/miniprogram-dev/SKILL.md +++ b/.cursor/skills/miniprogram-dev/SKILL.md @@ -79,8 +79,6 @@ description: Soul 创业派对小程序开发规范。在 miniprogram/ 下编辑 ## 8. 平台合规与能力检测(2025 起) - **隐私按需授权**:涉及用户信息的接口(登录、手机号、位置等)必须在用户**实际触发功能时**再请求授权,禁止在 `app.onLaunch` 中集中请求。需配置《小程序用户隐私保护指引》,使用 ` - - ``` -- **样式**:`.avatar-wrap { position: relative; }`;`.avatar-overlay-btn { position: absolute; top: 0; left: 0; width/height 与目标一致; background: transparent; border: none; }`;`::after { border: none; }`。 -- **口诀**:同级覆盖,绝对定位,透明按钮。 - ---- - -## 12. 何时使用本 Skill +## 11. 何时使用本 Skill - 在 **miniprogram/** 下新增或修改页面、组件、utils 时。 - 在小程序内新增或修改任何网络请求路径时(必须保持 `/api/miniprogram/...`)。 @@ -133,6 +114,5 @@ description: Soul 创业派对小程序开发规范。在 miniprogram/ 下编辑 - 做个人中心、设置页布局时(遵循 §7,卡片区边距 16rpx)。 - 做阅读、文章等需长按复制的文本时(遵循 §9,text 加 user-select)。 - 做编辑资料页分享名片时(遵循 §10)。 -- 做头像上传、chooseAvatar 等需 button 触发的原生能力时(遵循 §11,用绝对定位覆盖,禁止 button 包裹)。 遵循本 Skill 可保证小程序只与 soul-api 的 miniprogram 路由组对接,避免与管理端或 next-project 接口混用。 diff --git a/.cursor/skills/mysql-direct/SKILL.md b/.cursor/skills/mysql-direct/SKILL.md index be909786..9bce3d35 100644 --- a/.cursor/skills/mysql-direct/SKILL.md +++ b/.cursor/skills/mysql-direct/SKILL.md @@ -39,8 +39,9 @@ cd .cursor/scripts/db-exec && npm install ### 3.2 执行单条 SQL +在**本仓库根目录**下执行(与 `miniprogram/`、`soul-api/` 同级): + ```bash -cd e:\Gongsi\Mycontent node .cursor/scripts/db-exec/run.js "SELECT 1" node .cursor/scripts/db-exec/run.js "DESCRIBE orders" node .cursor/scripts/db-exec/run.js "ALTER TABLE users ADD COLUMN new_field VARCHAR(64) DEFAULT ''" diff --git a/.cursor/skills/new-version-analyze/SKILL.md b/.cursor/skills/new-version-analyze/SKILL.md index d706bdff..85863261 100644 --- a/.cursor/skills/new-version-analyze/SKILL.md +++ b/.cursor/skills/new-version-analyze/SKILL.md @@ -192,10 +192,10 @@ description: 新版快速分析 Skill。甲方/第三方 AI 写的新版本, 2. 排除:技术债、规则不清、与稳定版冲突的部分 3. 按**最小功能**拆分,保证每个任务迁移后能完整运行 4. 排期顺序:**界面修改优先** → 大逻辑排后;P0(逻辑不通)→ P1(功能缺失)→ P2(优化) -5. 写入需求清单(当日需求文件),形成迁移任务清单 +5. 写入需求汇总,形成迁移任务清单 **产出**: -- `开发文档/1、需求/YYYY-MM-DD-需求.md` 追加需求(当日文件,以日期最新为主;同步后更新 `1、需求/索引.md`) +- `开发文档/1、需求/需求汇总.md` 追加需求 - `开发文档/新版迁移-开发方案与清单.md` 或等价迁移清单 --- @@ -259,7 +259,7 @@ description: 新版快速分析 Skill。甲方/第三方 AI 写的新版本, 4. **逻辑分层**:每个功能过三层(界面/接口/数据) 5. **体验评估**:补充空态、错误态、边界处理 6. **接口规范与冲突**:产出接口规范与冲突清单 -7. **抽取需求**:写入需求清单(当日需求文件),形成迁移任务清单 +7. **抽取需求**:写入需求汇总,形成迁移任务清单 8. **需求评审(迁移前必做)**:列出功能点 + 样式变更,逐一确认,产出评审清单 9. **回复用户**:给出分析摘要 + 文档路径 + 建议执行顺序;**迁移须在需求评审通过后开始** @@ -273,7 +273,7 @@ description: 新版快速分析 Skill。甲方/第三方 AI 写的新版本, | 接口规范与冲突 | `开发文档/新版迁移-接口规范与冲突清单.md` | | 迁移方案/清单 | `开发文档/新版迁移-开发方案与清单.md` 或 `新版功能迁移到稳定版方案.md` | | **需求评审清单** | `开发文档/新版迁移-需求评审清单.md`(功能点 + 样式变更,含确认状态) | -| 需求清单 | `开发文档/1、需求/YYYY-MM-DD-需求.md`(以日期最新为主) | +| 需求汇总 | `开发文档/1、需求/需求汇总.md` | 若已有同名文档,在其基础上**追加或更新**,不重复创建。 diff --git a/.cursor/skills/product-manager/SKILL.md b/.cursor/skills/product-manager/SKILL.md index f62a1d55..f4fb3137 100644 --- a/.cursor/skills/product-manager/SKILL.md +++ b/.cursor/skills/product-manager/SKILL.md @@ -42,7 +42,7 @@ description: Soul 创业派对产品经理需求与验收。需求分析、需 ### 0.3 功能规划与协调变更 -1. **输出需求分析**:写入 `临时需求池/YYYY-MM-DD-需求简述.md` 或追加到 `开发文档/1、需求/YYYY-MM-DD-需求.md` 需求清单(以日期最新为主,同步后更新 `1、需求/索引.md`) +1. **输出需求分析**:写入 `临时需求池/YYYY-MM-DD-需求简述.md` 或追加到 `需求汇总.md` 需求清单 2. **三端任务拆分**:按上表列出「小程序任务」「管理端任务」「后端任务」 3. **协调变更**:若需更新《以界面定需求》,同步更新界面清单与业务逻辑 4. **指派**:明确各任务对应角色(小程序开发工程师、管理端开发工程师、后端工程师),并给出执行顺序建议(通常:后端 → 小程序;管理端视依赖可并行或后置) @@ -73,7 +73,7 @@ description: Soul 创业派对产品经理需求与验收。需求分析、需 | 职责 | 说明 | 产出 | |------|------|------| | 需求分析 | 业务需求拆解、优先级、技术可行性 | 需求分析文档、临时需求池 | -| 需求文档 | 需求清单、业务规则、验收标准 | 1、需求/YYYY-MM-DD-需求.md(以最新为主)、运营与变更.md | +| 需求文档 | 需求清单、业务规则、验收标准 | 需求汇总.md、运营与变更.md | | 验收 | 功能验收、回归检查 | 验收清单、项目推进表 | | 协调 | 与开发沟通、排期、变更 | 运营与变更、项目落地推进表 | @@ -83,7 +83,7 @@ description: Soul 创业派对产品经理需求与验收。需求分析、需 | 文档 | 说明 | |------|------| -| `开发文档/1、需求/` | 需求清单(按日期命名,以最新为主)、业务需求;见 `1、需求/索引.md` | +| `开发文档/1、需求/需求汇总.md` | 需求清单、业务需求 | | `临时需求池/` | 需求分析、技术分析 | | `开发文档/10、项目管理/项目落地推进表.md` | 里程碑、永平落地 | | `开发文档/10、项目管理/运营与变更.md` | 近期讨论、变更记录 | diff --git a/.cursor/skills/team-meeting/SKILL.md b/.cursor/skills/team-meeting/SKILL.md index b1003d93..bb34c5fb 100644 --- a/.cursor/skills/team-meeting/SKILL.md +++ b/.cursor/skills/team-meeting/SKILL.md @@ -25,7 +25,7 @@ description: Soul 创业派对开发团队多角色会议。语义化触发: ``` 第零步(可选):回顾历史 - → 使用 Read 工具读取 `e:\Gongsi\Mycontent\.cursor\meeting\README.md` 的索引表 + → 使用 Read 工具读取 `.cursor\meeting\README.md` 的索引表 → 若议题与近期会议相关,Read 最近 1~2 份纪要(如 YYYY-MM-DD_主题.md) → 便于延续上次讨论、避免重复决议 @@ -93,10 +93,10 @@ description: Soul 创业派对开发团队多角色会议。语义化触发: ### 4.1 生成会议纪要文件 1. **确定文件名**:`YYYY-MM-DD_议题关键词.md`(日期为今天) -2. **创建文件**:`e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_议题关键词.md` -3. **内容**:按 `e:\Gongsi\Mycontent\.cursor\meeting\_模板.md` 填写完整纪要 +2. **创建文件**:`.cursor\meeting\YYYY-MM-DD_议题关键词.md` +3. **内容**:按 `.cursor\meeting\_模板.md` 填写完整纪要 4. **问题与作答区**(必须):将「待确认项」「待澄清项」列出为问题表,责任角色标明谁负责回答,作答列留空供后续填写 -5. **更新索引**:在 `e:\Gongsi\Mycontent\.cursor\meeting\README.md` 的索引表中追加一行 +5. **更新索引**:在 `.cursor\meeting\README.md` 的索引表中追加一行 ### 4.2 各角色经验入库(按日期文件) @@ -115,7 +115,7 @@ description: Soul 创业派对开发团队多角色会议。语义化触发: ``` 确定今天日期 YYYY-MM-DD ↓ -检查 e:\Gongsi\Mycontent\.cursor\agent\{角色目录}\evolution\YYYY-MM-DD.md 是否存在 +检查 `.cursor/agent/{角色目录}/evolution/YYYY-MM-DD.md` 是否存在 不存在 → 创建,写入文件头(# {角色名} 经验记录 - YYYY-MM-DD) ↓ 从本次会议讨论中,提炼该角色的经验条目追加进去 @@ -123,12 +123,12 @@ description: Soul 创业派对开发团队多角色会议。语义化触发: 更新 agent/开发助理/项目索引/{索引名}.md(开发进度表追加一行,写日期) ``` -若有跨角色共享的经验(架构决策、业务规则、路由约定),**必须**同时写入 `e:\Gongsi\Mycontent\.cursor\agent\团队\evolution\YYYY-MM-DD.md`,并在对应角色文件中注明「详见 agent/团队/evolution/」。 +若有跨角色共享的经验(架构决策、业务规则、路由约定),**必须**同时写入 `.cursor/agent/团队/evolution/YYYY-MM-DD.md`,并在对应角色文件中注明「详见 agent/团队/evolution/」。 ### 4.3 Skill 升级(重要决议时) 若本次会议产生了影响开发规范的决议: -- 更新对应 `e:\Gongsi\Mycontent\.cursor\skills\SKILL-xxx.md` +- 更新对应 `.cursor\skills\SKILL-xxx.md` - 在会议纪要「各角色经验」节标注「已升级 SKILL-xxx.md」 --- @@ -137,11 +137,11 @@ description: Soul 创业派对开发团队多角色会议。语义化触发: | 输出物 | 位置 | 负责人 | |--------|------|--------| -| 会议纪要 | `e:\Gongsi\Mycontent\.cursor\meeting\YYYY-MM-DD_主题.md` | 助理橙子 | -| 各角色经验 | `e:\Gongsi\Mycontent\.cursor\agent\{角色}\evolution\YYYY-MM-DD.md` | 助理橙子 | +| 会议纪要 | `.cursor\meeting\YYYY-MM-DD_主题.md` | 助理橙子 | +| 各角色经验 | `.cursor/agent/{角色}/evolution/YYYY-MM-DD.md` | 助理橙子 | | 项目索引更新 | agent/开发助理/项目索引/{角色}.md 的开发进度表 | 助理橙子 | | Skill 升级(按需) | `.cursor/skills/{skill}/SKILL.md` | 助理橙子 | -| 会议记录索引更新 | `e:\Gongsi\Mycontent\.cursor\meeting\README.md` | 助理橙子 | +| 会议记录索引更新 | `.cursor\meeting\README.md` | 助理橙子 | --- diff --git a/.gitignore b/.gitignore index d9278845..63783f2e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,12 @@ soul-api/soul-api-new # 备份文件 *.backup + +# 本机运营凭证(karuo-party;保留 credentials/README.md) +.cursor/skills/karuo-party/credentials/cookies/ +.cursor/skills/karuo-party/credentials/.feishu_tokens.json +.cursor/skills/karuo-party/credentials/*.json +!.cursor/skills/karuo-party/credentials/README.md + +# Cursor 索引减负:db-exec 依赖(仓库根已有 node_modules/ 规则,此处显式强调子路径) +.cursor/scripts/db-exec/node_modules/