Merge branch 'devlop' into yongxu-dev

# Conflicts:
#	miniprogram/app.js   resolved by devlop version
#	miniprogram/pages/chapters/chapters.js   resolved by devlop version
#	miniprogram/pages/match/match.js   resolved by devlop version
#	miniprogram/pages/member-detail/member-detail.js   resolved by devlop version
#	miniprogram/pages/my/my.js   resolved by devlop version
#	miniprogram/pages/read/read.js   resolved by devlop version
#	miniprogram/pages/referral/referral.js   resolved by devlop version
#	soul-api/internal/model/person.go   resolved by devlop version
This commit is contained in:
Alex-larget
2026-03-24 15:44:56 +08:00
127 changed files with 9196 additions and 3504 deletions

View File

@@ -0,0 +1,13 @@
# 2026-03-21 MBTI 头像 C 端全链路兜底
## 问题
系统设置瘦身与 MBTI 映射迁到用户管理后,需在小程序多页面与匹配接口统一「无微信头像 → MBTI 映射」行为,避免仅海报单点生效。
## 做法
- 新增 `miniprogram/utils/mbtiAvatar.js``resolveAvatarWithMbti``app.resolveAvatarWithMbti` 封装全局 map。
- 我的页 `profileAvatarDisplay`;资料编辑 `avatarPreviewUrl`profile-show、member-detail、referral 海报复用同一逻辑。
- 后端 `match.go``avatar` 为空时用 `getMbtiAvatar`;响应增加 `mbti` 字段;找伙伴卡片 wxml 增加无图占位。
- 管理端 `MbtiAvatarsManager` 补充 downloadFile 域名说明。
## 可复用规则
配置驱动展示:公开 `GET /api/miniprogram/config/mbti-avatars` + 本地短时缓存;业务侧只调 `resolveAvatarWithMbti`,避免重复拼接 baseUrl。

View File

@@ -4,4 +4,5 @@
| 日期 | 摘要 | 文件 |
|------|------|------|
| 2026-03-21 | MBTI 头像小程序全链路兜底 + 匹配接口回填 | 2026-03-21-MBTI头像C端全链路兜底.md |
| 2026-03-16 | 用户交互习惯分析(基于 agent-transcripts | 2026-03-16-交互习惯分析.md |

View File

@@ -0,0 +1,38 @@
# 飞书「开发群」与 Soul 项目复盘约定
## 绑定关系
- **Soul 创业派对(永平)**、**派对 AI 相关自动化**、**卡若 AI 侧发往本项目的复盘**,默认使用**同一开发群机器人 Webhook**。
- Webhook 与项目在配置上是**一一绑定**:换群 = 改环境变量或下方脚本中的默认 URL并确保飞书里该群已添加对应自定义机器人。
## 默认 Webhook开发群
环境变量(推荐在本机 shell 或 `scripts/.env.feishu` 同目录的 `.env` 中导出):
| 变量名 | 用途 |
|--------|------|
| `FEISHU_DEV_GROUP_WEBHOOK` | **主约定**:开发群统一入口;未设置时各脚本使用内置默认值。 |
当前默认 URL与飞书群内机器人一致
`https://open.feishu.cn/open-apis/bot/v2/hook/c558df98-e13a-419f-a3c0-7e428d15f494`
## 已接此 Webhook 的脚本(代码内默认或可读此变量)
| 脚本 | 说明 |
|------|------|
| `scripts/send_chapter_poster_to_feishu.py` | 章节摘要 + 海报图(小程序码) |
| 卡若AI `飞书管理/脚本/send_review_to_feishu_webhook.py` | 卡若 AI 复盘(文本/卡片) |
| 卡若AI `飞书管理/脚本/soul_party_to_feishu_sheet.py` | 派对运营表同步后的群推送 |
**复盘发哪里**:与 Soul 开发相关的**日终/迭代复盘** → 发 **`FEISHU_DEV_GROUP_WEBHOOK` 对应群**。
彩民/运营另群如需保留,可通过各脚本 `--webhook` 或单独环境变量覆盖。
## 界面截图发群说明
- 飞书自定义机器人发图需先走**应用上传**得到 `image_key`(见 `send_chapter_poster_to_feishu.py` 内逻辑)。
- 无现成截图时:在复盘文本中附 **管理端 / 小程序 / API 文档** 等**可点击链接**,与海报一并发出。
## 与「SKR / 开发群」口头约定
- 群内链接、机器人由**项目侧**维护;**派对 AI** 与 **卡若 AI** 推送配置统一指向本开发群,避免复盘散落多个群。

View File

@@ -7,8 +7,8 @@ description: >
triggers: 运营报表、视频切片、多平台分发、飞书视频下载、派对运营、卡若创业派对、派对填表、视频剪辑、一键分发、妙记下载
owner: 水岸
group: 运营
version: "1.1"
updated: "2026-03-21"
version: "1.3"
updated: "2026-03-24"
---
# 卡若创业派对运营 Skill 包
@@ -29,7 +29,7 @@ updated: "2026-03-21"
## 一、技能包组成
本技能包包含以下 4 个核心子技能:
本技能包包含以下 8 个核心子技能:
| # | 技能名 | 文件路径 | 触发词 | 用途 |
|:--|:---|:---|:---|:---|
@@ -37,6 +37,10 @@ updated: "2026-03-21"
| ② | 飞书视频文字下载 | `skills/飞书视频文字下载_SKILL.md` | 妙记下载、飞书视频、飞书妙记 | 文字+视频→本地 |
| ③ | 视频切片 | `skills/视频切片_SKILL.md` | 视频剪辑、切片发布 | 原视频→转录→高光→成片 |
| ④ | 多平台分发 | `skills/多平台分发_SKILL.md` | 一键分发、全平台发布 | 成片→抖音/B站/视频号/小红书/快手 |
| ⑤ | 视频号发布 | `skills/平台_视频号_SKILL.md` | 视频号发布、视频号重传 | 账号校验→清理→定时发布 |
| ⑥ | B站发布 | `skills/平台_B站_SKILL.md` | B站发布、B站补发 | API优先→兜底→定时 |
| ⑦ | 小红书发布 | `skills/平台_小红书_SKILL.md` | 小红书发布、小红书补发 | UI自动化定时发布 |
| ⑧ | 抖音发布 | `skills/平台_抖音_SKILL.md` | 抖音发布、抖音补发 | API定时发布+失败重登 |
---
@@ -112,15 +116,32 @@ python3 "$VIDEO_SCRIPT/soul_slice_pipeline.py" --video "<原视频.mp4>" --clips
```bash
DIST_SCRIPT="/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本"
# 定时排期第1条立即后续 30-120min 随机间隔
# 默认智能错峰 + 静默(不自动弹窗扫视频号)
python3 "$DIST_SCRIPT/distribute_all.py" --video-dir "<成片目录>"
# 旧版随机间隔:加 --legacy-schedule需要自动扫视频号加 --auto-channels-login
# 立即全部发布
python3 "$DIST_SCRIPT/distribute_all.py" --now
```
**详细流程**:见 `skills/多平台分发_SKILL.md`
#### 视频号发布前置(强制)
在执行视频号发布前,固定做以下 3 步:
1. **账号信息校验**:调用 `auth_data` 校验 `nickname``headImgUrl`,不一致先改到目标值再发。
2. **线上失败/重复清理**:先查 `post_list`,删除失败条目;同标题仅保留最新一条(去重后再补发)。
3. **仅定时发布**:禁止立即发布;若页面定时控件失效,使用 `post_create` 注入定时参数并拦截立即发布。
#### 分发统一总规则(强制)
1. **间隔规则**:按“每一条相邻发布时间”计算,必须在 **10 分钟到 120 分钟** 之间。
2. **账号状态规则**:发布前做账号可用性检查;若出现封禁/登录失效/鉴权失败,先执行重登,再重试失败条。
3. **平台分治规则**:先按平台触发对应子 Skill再执行发布命令不混用平台规则。
4. **收敛规则**:每轮结束输出成功/失败清单 + 重登命令;失败条必须可继续重试直到收敛。
---
## 四、完整流程(派对结束后)
@@ -140,7 +161,7 @@ python3 "$DIST_SCRIPT/distribute_all.py" --now
### Phase 3视频生产
1. **视频切片**:转录 → 高光识别 → 批量切片 → 增强
2. **多平台分发**:成片 → 5平台发布定时排期
2. **多平台分发**:成片 → 5 平台发布(默认智能错峰定时)
### Phase 4文章内容
@@ -167,7 +188,7 @@ python3 auto_log.py
各平台 Cookie 文件位于 `credentials/cookies/` 目录。更新方式:
1. **视频号**浏览器登录后,使用 `cookie_manager.py` 提取
1. **视频号**`channels_login.py`Cursor Simple Browser + 可选 CDP详见 `skills/多平台分发_SKILL.md`
2. **B站**:使用 `bilibili-api-python` 自动获取
3. **小红书/快手**Playwright 自动化登录后提取
@@ -277,5 +298,7 @@ curl -sS -X POST -H "Content-Type: application/json" -d "$TEXT" "$FEISHU_PARTY_C
| 版本 | 日期 | 说明 |
|:---|:---|:---|
| 1.3 | 2026-03-24 | 升级为“总规则+平台子Skill”统一相邻间隔 10~120 分钟;新增账号封禁/重登/重试收敛规则 |
| 1.2 | 2026-03-23 | 新增视频号发布前置三步:头像昵称校验、失败/重复清理、强制定时发布(含请求注入兜底) |
| 1.1 | 2026-03-21 | 新增 §九 闭环复盘发群:卡若五块复盘 + 飞书 Webhook v2msg_type 必填) |
| 1.0 | 2026-03-20 | 初版:整合运营报表、视频切片、多平台分发、飞书视频文字下载 4 大技能,统一凭证管理 |

View File

@@ -3,18 +3,25 @@ name: 多平台分发
description: >
一键将视频分发到 5 个平台抖音、B站、视频号、小红书、快手
API 优先策略:视频号纯 API、B站 bilibili-api-python、抖音纯 API。
支持定时排期(第1条立即发后续 30-120 分钟随机间隔)、并行分发、去重、失败自动重试。
支持定时排期(默认智能错峰;可选 legacy、默认静默不弹窗登录、并行分发、去重、失败自动重试。
triggers: 多平台分发、一键分发、全平台发布、批量分发、视频分发
owner: 木叶
group: 木
version: "4.0"
updated: "2026-03-11"
version: "4.5"
updated: "2026-03-24"
---
# 多平台分发 Skillv4.0
# 多平台分发 Skillv4.5
> **核心原则**API 发布为主Playwright 为辅。确保确定性地分发到各平台。
> **v4.0 变更**:视频号已切换为纯 API、统一元数据生成器、定时排期优化、简介/标签/分区自动填充
> **v4.5**:统一改为“按相邻条目”间隔控制,默认区间 **10~120 分钟**;并要求按平台子 Skill 执行对应规则后再发布
## 〇、执行原则(第一性原理)
- **视频号两步**:先扫码落盘 Cookie 再上传;`video_channels_resume.py` **默认弹 Chromium 窗**扫码,扫完再继续传;`--silent-login` 无头。
- **目标优先**:全平台分发 → 直接 `distribute_all.py`;视频号助手态需**事先**手动 `channels_login.py` 或显式 `--auto-channels-login`
- **Cookie 优先**:登录成功必须落盘;视频号双路径同步见 `cookie_manager.sync_channels_cookie_files`
- **默认静默**:无人值守跑命令时不弹浏览器。
---
@@ -32,6 +39,8 @@ updated: "2026-03-11"
> 按《视频号与腾讯相关 API 整理》结论,微信官方目前**没有开放「短视频上传/发布」接口**;本 Skill 中的视频号发布能力,属于对 `https://channels.weixin.qq.com` 视频号助手网页协议的逆向封装DFS 上传 + `post_create`),仅在你本机使用,需自行承担协议变更与合规风险。
> 官方可控能力(直播记录、橱窗、留资、罗盘数据、本地生活等)的服务端 API 入口为:`https://developers.weixin.qq.com/doc/channels/api/`,如需做直播/橱窗/留资集成,可基于该文档在单独 Skill 中扩展。
> **「视频号 API token」与成片上传**:公众号 **`access_token`** **不能**替代视频号助手网页态;`channels_api_publish` 依赖 **`channels_storage_state.json`**。127 场静默全平台:`python3 distribute_all.py --video-dir "/Users/karuo/Movies/soul视频/第127场_20260318_output/成片"`(须各平台 Cookie 已就绪)。
---
## 二、一键命令
@@ -39,10 +48,13 @@ updated: "2026-03-11"
```bash
cd /Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本
# 定时排期第1条立即后续 30-120min 随机间隔
# 默认智能错峰排期
python3 distribute_all.py
# 立即全部发布
# 规则间隔(推荐,按相邻条目 10~120 分钟)
python3 distribute_all.py --legacy-schedule --min-gap 10 --max-gap 120
# 立即全部发布(仅在明确要求时)
python3 distribute_all.py --now
# 只发指定平台
@@ -54,24 +66,34 @@ python3 distribute_all.py --video-dir "/path/to/videos/"
# 检查 Cookie / 重试失败
python3 distribute_all.py --check
python3 distribute_all.py --retry
# 需要脚本自动弹窗扫视频号(默认不弹)
python3 distribute_all.py --platforms 视频号 --auto-channels-login --video-dir "/path/to/成片"
# 独立 channels_api_publish 允许自动登录CHANNELS_AUTO_LOGIN=1
# 强制永不自动登录NO_AUTO_CHANNELS_LOGIN=1
# 平台站点上传 CLI平台级含账号检测+自动重登+重试)
python3 site_upload_cli.py check --platforms 抖音 B站 小红书 快手
python3 site_upload_cli.py publish --platforms 抖音 B站 小红书 --video-dir "/path/to/成片" --min-gap 10 --max-gap 120 --until-success
```
---
## 三、定时排期v4.0 优化
## 三、定时排期v4.2+
### 3.1 排期规则
- **第 1 条**:立即发布(`first_delay=0`
- **第 2 条起**:前一条 + random(30, 120) 分钟
- 若总跨度 > 24h自动按比例压缩
- 12 条视频典型跨度 ~10-14h
### 3.1 默认(`generate_smart_schedule`
- 第 1 条立即;间隔与总跨度随条数自适应;本地 07 点尽量挪到午间(`SCHEDULE_NO_NIGHT_REFINE=1` 关闭
- `--legacy-schedule` + `--min-gap` / `--max-gap` / `--max-hours` 为固定区间逻辑(建议 `10~120`
- 去重时排期与目录列表下标对齐
### 3.2 各平台定时实现
### 3.2 独立 `channels_api_publish.py`:同上智能排期转 Unix
### 3.3 各平台定时实现
| 平台 | 定时方式 | 参数 |
|------|----------|------|
| B站 | API `meta.dtime` | Unix 时间戳(秒) |
| 视频号 | API 暂不支持原生定时 | 描述中标注时间/手动设置 |
| 视频号 | API `postTimingInfo.postTime`(秒级 Unix过近时间自动顺延不允许立即发 | `channels_api_publish._scheduled_ts_for_channels` |
| 抖音 | API `timing_ts` | Unix 时间戳 |
| 快手 | Playwright UI | `schedule_helper.py` |
| 小红书 | Playwright UI | `schedule_helper.py` |
@@ -91,12 +113,12 @@ meta.description("B站") # 标题 + 标签 + 品牌标记
meta.tags_str("B站") # AI工具,效率提升,Soul派对,...
meta.bilibili_meta() # B站投稿完整 meta含 tid/tag/desc
meta.title_short() # 小红书短标题≤20字
meta.hashtags("视频号") # #AI工具 #效率提升 ... #小程序 卡若创业派对
meta.hashtags("视频号") # … + #小程序卡若创业派对 #公众号卡若-4点起床的男人
```
### 4.1 内容结构
- **标题**:手工优化标题库优先,否则从文件名智能提取
- **简介**:标题 + 换行 + 话题标签 + `#小程序 卡若创业派对`
- **简介**:标题 + 换行 + 话题标签**视频号**固定追加 `#小程序卡若创业派对` `#公众号卡若-4点起床的男人`(其它平台仍为 `#小程序 卡若创业派对`
- **标签**基于关键词匹配AI/创业/副业/Soul 等 12 类)+ 通用标签
- **分区**B站 tid=160生活>日常)
- **风控过滤**`content_filter.py` 自动替换敏感词70+ 映射,严格/宽松分级)
@@ -122,8 +144,42 @@ meta.hashtags("视频号") # #AI工具 #效率提升 ... #小程序 卡若创
`cookie_manager.py` 统一管理:
- 中央存储:`多平台分发/cookies/{平台}_cookies.json`
- 自动迁移:旧路径 → 中央存储(首次使用时)
- API 预检5 平台各自 auth API 校验有效性
- 防重复登录:有效 Cookie 不触发重新获取
- **视频号双路径**:预检读中央、发布读 legacy`sync_channels_cookie_files()`**mtime 新者覆盖旧者**,避免两份不一致
- **登录后必存**`channels_login.py` 保存 `channels_storage_state.json`**立即 copy**`cookies/视频号_cookies.json`
- **登录页只在 Cursor 内**`channels_login.py` v7 用 `cursor://vscode.simple-browser/show?url=…` 打开 **Simple Browser**,不用系统默认浏览器;**无额外 Chromium** 时需 Cursor 带 `--remote-debugging-port=9223`(或 `CHANNELS_CDP_URL`),脚本 CDP 附着后导出会话;否则 **自动回退** 本机 Chromium 仅用于写 Cookie`--playwright-only` 强制只走 Chromium
- **视频号登录**:默认不自动执行 `channels_login.py`;需要时加 `--auto-channels-login`(或事先手动登录)
- API 预检:各平台 auth API 校验有效性
---
## 六点五、视频号发布前置检查(强制)
每次发布视频号前,必须先跑:
1. `auth/auth_data`:校验 `nickname``headImgUrl`(不一致先改号资料,再执行发布)。
2. `post/post_list`:筛查失败条目并删除。
3. 同标题去重:若存在多条,仅保留最新 `objectId`,其余调用 `post/post_delete` 删除。
4. 发布阶段若页面定时控件失败,改为 `post_create` 请求注入 `postTimingInfo`,继续定时发布;注入也失败则中止该条(防止误发立即)。
---
## 六点六、账号异常自动处理(强制)
1. 发布前先执行 `--check`;若平台 Cookie 无效,先走对应登录脚本。
2. 发布中若出现封禁/风控/鉴权失败,立即输出处理建议与重登命令。
3. 重登完成后优先执行 `--retry`,只重试失败条,不重复成功条。
4. 失败超过 2 轮仍未收敛时,输出平台级阻塞原因并停止盲目重试。
---
## 六点七、平台子Skill分流强制
- 视频号:按 `平台_视频号_SKILL.md` 执行。
- B站`平台_B站_SKILL.md` 执行。
- 小红书:按 `平台_小红书_SKILL.md` 执行。
- 抖音:按 `平台_抖音_SKILL.md` 执行。
多平台联发时先加载各平台子Skill再统一调度 `distribute_all.py`
---

View File

@@ -0,0 +1,34 @@
---
name: 平台_B站发布
description: B站发布专用规则。API优先失败降级 Playwright按相邻间隔 10~120 分钟定时发布。
triggers: B站发布、B站补发、B站重试
owner: 木叶
group: 木
version: "1.0"
updated: "2026-03-24"
---
# 平台子SkillB站发布
## 一、强制规则
1. 默认 API 投稿,失败才降级 Playwright。
2. 发布间隔按相邻条目控制在 `10~120` 分钟。
3. 出现 406/超时等异常时先重试失败条,不重复成功条。
## 二、标准命令
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" \
--platforms B站 \
--video-dir "<成片目录>" \
--legacy-schedule --min-gap 10 --max-gap 120
```
## 三、登录异常处理
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/B站发布/脚本/bilibili_login.py"
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" --retry
```

View File

@@ -0,0 +1,34 @@
---
name: 平台_小红书发布
description: 小红书发布专用规则。UI自动化定时发布按相邻间隔 10~120 分钟执行。
triggers: 小红书发布、小红书补发
owner: 木叶
group: 木
version: "1.0"
updated: "2026-03-24"
---
# 平台子Skill小红书发布
## 一、强制规则
1. 逐条定时发布,禁止批量立即发布。
2. 相邻发布时间间隔必须在 `10~120` 分钟。
3. 若仅返回 likely_published需在下一轮巡检确认状态。
## 二、标准命令
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" \
--platforms 小红书 \
--video-dir "<成片目录>" \
--legacy-schedule --min-gap 10 --max-gap 120
```
## 三、登录异常处理
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/小红书发布/脚本/xiaohongshu_login.py"
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" --retry
```

View File

@@ -0,0 +1,34 @@
---
name: 平台_抖音发布
description: 抖音发布专用规则。API定时发布按相邻间隔 10~120 分钟;遇风控/封禁优先账号处理。
triggers: 抖音发布、抖音补发、抖音重试
owner: 木叶
group: 木
version: "1.0"
updated: "2026-03-24"
---
# 平台子Skill抖音发布
## 一、强制规则
1. 仅按定时发布,不做整批立即。
2. 相邻发布时间间隔 `10~120` 分钟。
3. 若出现封禁/风控提示,立刻停止盲目重试并提示账号处理。
## 二、标准命令
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" \
--platforms 抖音 \
--video-dir "<成片目录>" \
--legacy-schedule --min-gap 10 --max-gap 120
```
## 三、登录异常处理
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/抖音发布/脚本/douyin_login.py"
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/多平台分发/脚本/distribute_all.py" --retry
```

View File

@@ -0,0 +1,38 @@
---
name: 平台_视频号发布
description: 视频号发布专用规则。发布前校验账号,清理密集/失败条目,按相邻间隔 10~120 分钟定时发布。
triggers: 视频号发布、视频号重传、视频号补发
owner: 木叶
group: 木
version: "1.0"
updated: "2026-03-24"
---
# 平台子Skill视频号发布
## 一、强制规则
1. 发布前必须校验 `auth_data`(昵称、头像、登录态)。
2. 发布前必须检查 `post_list`:失败条目删除、同标题去重。
3. 仅允许定时发布,按相邻条目间隔 `10~120` 分钟。
4. 定时控件失败时允许请求注入;注入失败则中止该条,禁止误发立即。
## 二、标准命令
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/视频号发布/脚本/channels_web_cli.py" \
publish-dir \
--video-dir "<成片目录>" \
--legacy-schedule --min-gap 10 --max-gap 120 \
--start-after-min 10
```
## 三、登录异常处理
- 若出现 `300334` / `300002` / `finder_raw` 缺失:立即执行重登。
- 重登命令:
```bash
python3 "/Users/karuo/Documents/个人/卡若AI/03_卡木/木叶_视频内容/视频号发布/脚本/channels_login.py" --playwright-only
```