🔄 卡若AI 同步 2026-03-12 16:42 | 更新:Cursor规则、水桥平台对接、水溪整理归档、卡木、总索引与入口、运营中枢工作台 | 排除 >20MB: 11 个

This commit is contained in:
2026-03-12 16:42:08 +08:00
parent 02214728d3
commit 8146b8f747
16 changed files with 481 additions and 33 deletions

View File

@@ -20,7 +20,12 @@ alwaysApply: true
1. **读 `BOOTSTRAP.md`**(根目录)— 身份、团队、执行流程、全局规则
2. **读 `SKILL_REGISTRY.md`**(根目录)— 按用户需求查找技能
3. **读 `个人/1、卡若本人/记忆.md`** — 长期偏好与沉淀(单文件,无子目录)
4. 匹配到技能后读对应 `SKILL.md` 执行
4. **可选**:读当日工作台 `02_卡人/水溪_整理归档/记忆系统/CURRENT_STATE.md`,了解进行中上下文
5. 匹配到技能后读对应 `SKILL.md` 执行
**记忆检索顺序(强制)**:① 当日工作台 → ② 任务结果卡 `structured/tasks/` → ③ 长期记忆 `记忆.md` → ④ 结构化摘要 → ⑤ 对话归档 → ⑥ 历史归档。详见 `记忆系统/README.md`。
**写入记忆前冲突检测**:向 `记忆.md` 写入新规则/偏好前,执行 `python memory_conflict_check.py "内容"`,有冲突则确认再写入。
**MAX Mode**卡若AI 每次调用均为 MAX Mode定义在**卡若AI 本体** `BOOTSTRAP.md` 第四节MAX Mode与第五节执行流程不在此重复本文件仅补充 Cursor 特有行为。

View File

@@ -4,8 +4,8 @@ description: 《一场soul的创业实验》内容与运营统一入口——写
triggers: Soul创业实验、写Soul文章、写授文章、Soul派对写文章、第9章写文章、写soul场次、soul文章规则、Soul文章上传、Soul派对文章、第9章上传、soul上传、写soul文章、运营报表、派对填表、派对纪要
owner: 水桥
group: 水
version: "1.2"
updated: "2026-03-18"
version: "1.4"
updated: "2026-03-12"
---
# Soul创业实验 Skill
@@ -21,7 +21,7 @@ updated: "2026-03-18"
| 子类 | 触发词示例 | 说明 |
|:---|:---|:---|
| **写作** | 写Soul文章、写授文章、Soul派对写文章、第9章写文章、写soul场次、soul文章规则 | 按派对 TXT 写第9章单场文章**先读** `写作/写作规范.md`:人称用「我」不用「房主」、每句空一行、大白话;**6:3:1 内容比例**60% 核心 / 30% 次要 / 10% 其它);**约 50% 处插入核心干货块**35 条可执行、紧扣主题);**数值与场景必须具体****约 20% 处 + 结尾各一句分享句**;联系管理/切片/副业隐晦植入 |
| **上传** | Soul文章上传、Soul派对文章、第9章上传、soul上传、写soul文章、文章写好上传 | 文章写好后上传到小程序;**上传后同步固定飞书群**:发前 6% 正文(**一句一行、行间空一行**+ 章节海报图(含小程序码),**不发小程序链接**,见 `上传/README.md``上传/推送逻辑.md` |
| **上传** | Soul文章上传、Soul派对文章、第9章上传、soul上传、写soul文章、文章写好上传 | **仅在你明确说上传/推送时才执行**上传到小程序;上传后若你要求推送,再同步固定飞书群:发前 6% 正文(**一句一行、行间空一行**+ 章节海报图(含小程序码),**不发小程序链接**,见 `上传/README.md``上传/推送逻辑.md` |
| **运营报表** | 运营报表、派对填表、派对截图填表发群、派对纪要、106场、107场、本月运营数据 | 派对效果数据→飞书表格→智能纪要→飞书群,见飞书管理下运营报表 Skill |
执行时:根据用户说的关键词判断是**写作 / 上传 / 运营报表**,再进入对应子类(读本目录下 `写作/``上传/` 或引用运营报表)。
@@ -66,9 +66,16 @@ Soul 相关仅保留本 Skill 一个目录,原 Soul文章上传、Soul文章
## 发布与推送链路(完整)
1. **写文章**:按 `写作/写作规范.md` 写第 X 场输出到书稿第9章目录 `第X场主题.md`
2. **上传到小程序**:在永平项目执行 `content_upload.py --id 9.xx --title "…" --content-file "<md路径>" --part part-4 --chapter chapter-9 --price 1.0`
3. **同步飞书群**(上传后必做):在永平项目执行 `scripts/send_chapter_poster_to_feishu.py <章节id> "<章节标题>" --md "<同文章md路径>"`。效果:向 Soul 彩民团队飞书群**先发一条文本**(标题 + 文章前 6% 正文),**再发一张海报图**(含该章节小程序码);**不发送小程序链接**,仅通过海报中的二维码引导阅读
**分工说明**
- **实时同步**:书稿目录 ↔ Gitea。写文章或改书稿后执行 `bash scripts/gitea_sync.sh` 即把本机变更推送到 Gitea并拉回远端新增**无需等你开口**
- **按需执行****上传小程序**、**推送到飞书群** 这两步**仅在你明确说「上传」「推送」或类似指令时才做**,不自动执行。
---
1. **写文章**:按 `写作/写作规范.md` 写第 X 场输出到书稿第9章目录 `第X场主题.md`。写完后书稿目录有变更时,执行 Gitea 同步(见下方「书稿目录 ↔ Gitea」一节
2. **上传到小程序**(你说才做):在永平项目执行 `content_upload.py --id 9.xx --title "…" --content-file "<md路径>" --part part-4 --chapter chapter-9 --price 1.0`
3. **同步飞书群**(你说才做):在永平项目执行 `scripts/send_chapter_poster_to_feishu.py <章节id> "<章节标题>" --md "<同文章md路径>"`。效果:向 Soul 彩民团队飞书群**先发一条文本**(标题 + 文章前 6% 正文),**再发一张海报图**(含该章节小程序码);**不发送小程序链接**,仅通过海报中的二维码引导阅读。
海报规则:摘要区用文章前 6% 字数、每句空一行、不超出边框;无手指图标;字体使用 PingFang 优化可读性。详见 `上传/推送逻辑.md`
@@ -76,6 +83,39 @@ Soul 相关仅保留本 Skill 一个目录,原 Soul文章上传、Soul文章
---
## 书稿目录 ↔ Gitea/GitHub 实时同步(双向)
> 目标:你本机书稿目录有新增/修改就**自动推送到 Gitea**Gitea/GitHub 有新增就**自动拉回本机**,尽量保持一致。
### 书稿仓库位置(本机)
`/Users/karuo/Documents/个人/2、我写的书/《一场soul的创业实验》`
该目录本身就是 `fnvtk/Mycontent` 仓库(远端包含 `gitea``origin`)。
### 一键同步命令(推荐)
在书稿目录执行:
```bash
bash scripts/gitea_sync.sh
```
同步策略(脚本已固化):
- 先把本地新增/删除 **add → commit**(如有变更)
- 默认从 `gitea/main` **拉取远端新增**(仅允许 `ff-only`,避免自动制造分叉历史)
- 最后推送到 **Gitea必推**
- 如需同时与 GitHub 同步:执行前设置 `export SYNC_WITH_GITHUB=1`(若 `origin/main` 与本地已分叉,会阻塞并提示你先手动对齐)
### 冲突与分叉(处理原则)
若脚本提示无法 `ff-only` 合并,说明远端与本地出现分叉或冲突。
此时不要继续自动化先手动处理一次rebase/merge 任选一种,按你习惯),处理完再执行 `bash scripts/gitea_sync.sh` 恢复自动同步。
---
## 版本记录
| 版本 | 日期 | 说明 |
@@ -83,3 +123,5 @@ Soul 相关仅保留本 Skill 一个目录,原 Soul文章上传、Soul文章
| 1.0 | 2026-02-26 | 初版;写作、上传、运营报表统一为子类,原 Soul文章写作 / Soul文章上传 合并至此 |
| 1.1 | 2026-03-01 | 上传后推送飞书群:前 6% + 海报图,不发链接;新增推送逻辑文档与链路说明 |
| 1.2 | 2026-03-18 | 写作规范6:3:1 内容比例60% 核心 / 30% 次要 / 10% 其它);约 50% 处插入核心干货块;人称用「我」不用「房主」 |
| 1.3 | 2026-03-12 | 新增书稿目录 ↔ Gitea/GitHub 双向同步入口(`scripts/gitea_sync.sh` |
| 1.4 | 2026-03-12 | 明确Gitea 同步为实时;上传小程序、推送飞书群仅在你明确说时才执行 |

View File

@@ -255,6 +255,8 @@ python3 scripts/send_to_feishu.py --json "xxx_meeting.json"
## 📥 飞书妙记下载:成功链路与避坑(必读)
> **识别规则**:用户发 **飞书链接、飞书妙记、cunkebao.feishu.cn/minutes、meetings.feishu.cn/minutes、下载第几场、批量下载妙记** 等,一律按本 Skill 处理;**执行完毕后必须用复盘格式回复**(见 `运营中枢/参考资料/卡若复盘格式_固定规则.md`)。
>
> **基因胶囊**:飞书**视频+文字下载**已打包为独立基因「飞书视频和文字下载」,可单独继承复用。子技能:`智能纪要/飞书视频文字下载/SKILL.md`;胶囊目录:`卡若Ai的文件夹/导出/基因胶囊/飞书视频和文字下载_007437e5/`(解包见其内 `说明文档.md`)。
### 强制:全自动、禁止要求用户手动操作

View File

@@ -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 CookieOpen API 的 tenant_token 无法访问妙记正文/视频)。
1. **cookie_minutes.txt** 第一行(脚本同目录或 `智能纪要/脚本/`
2. **环境变量** `FEISHU_MINUTES_COOKIE`
3. **本机浏览器**browser_cookie3Safari/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=trueHeader: 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 浏览器提取 Cookiefeishu/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. 配置 Cookiecookie_minutes.txt 或 FEISHU_MINUTES_COOKIE 或 Cursor Cookie 提取。
---
## 七、相关文档
- 父技能:`02_卡人/水桥_平台对接/智能纪要/SKILL.md`
- 权限与排查:`智能纪要/参考资料/飞书妙记下载-权限与排查说明.md`
- 账号与 API 索引:`运营中枢/工作台/00_账号与API索引.md`

View File

@@ -0,0 +1,22 @@
# 卡若AI 当日工作台CURRENT_STATE
> 每次对话启动时优先读取此文件,了解当前进行中的上下文。
> 可覆盖更新(非仅追加),保持精简。新对话开始或 compaction 后的第一恢复点。
---
## 今日目标
-(待填写)
## 进行中
-(待填写)
## 阻塞/风险
-
## 下一步≤3
1.(待填写)

View File

@@ -1,6 +1,7 @@
# 卡若AI 记忆系统 v2.0
# 卡若AI 记忆系统 v3.0
> 层记忆架构短期STM+ 长期LTM+ 结构化Structured
> 层记忆架构短期STM+ 当日工作台CURRENT_STATE+ 长期LTM+ 结构化Structured
> 吸收 OpenClaw memory-final 设计:任务结果卡、检索顺序、冲突检测、归档规范。
---
@@ -8,9 +9,23 @@
| 层级 | 存储位置 | 说明 |
|:---|:---|:---|
| **短期记忆STM** | Cursor 对话上下文 | 由 Cursor 自动管理,单次对话有效 |
| **长期记忆LTM** | `/Users/karuo/Documents/个人/1、卡若本人/记忆.md` | 卡若的长期偏好、规则、日期记录、人脉、原则、方法论;**单文件、无子目录**,仅认此文档,不随意更改 |
| **结构化记忆** | `02_卡人/水溪_整理归档/记忆系统/structured/` | 技能注册表、Agent 成果追踪、每日摘要 |
| **短期记忆STM** | Cursor/平台 对话上下文 | 单次对话有效,由平台自动管理 |
| **当日工作台** | `记忆系统/CURRENT_STATE.md` | 每次对话启动时优先读取;可覆盖更新(非仅追加);字段:今日目标/进行中/阻塞/下一步≤3compaction 或新会话时的第一恢复点 |
| **长期记忆LTM** | `/Users/karuo/Documents/个人/1、卡若本人/记忆.md` | 卡若的长期偏好、规则、日期记录、人脉、原则、方法论;**单文件、无子目录** |
| **结构化记忆** | `记忆系统/structured/` | 技能索引、Agent 成果、每日摘要、幂等游标、健康、watchdog、任务结果卡 |
---
## 记忆检索顺序(强制)
当需要从记忆中查找信息时,按以下顺序检索:
1. **当日工作台** `CURRENT_STATE.md` — 当前进行中的目标与上下文
2. **任务结果卡** `structured/tasks/YYYY-MM-DD.md` — 近期子任务/并行线程的结果
3. **长期记忆** `个人/1、卡若本人/记忆.md` — 持久偏好与规则
4. **结构化摘要** `structured/daily_digest.md` + `structured/agent_results.json` — 每日成果
5. **对话归档** `水溪_整理归档/对话归档/YYYY-MM-DD/` — 原始对话记录(仅在前 4 层未找到时)
6. **归档** `archive/YYYY/MM/` — 历史日日志(仅审计/回溯)
---
@@ -18,13 +33,16 @@
| 文件 | 用途 |
|:---|:---|
| `structured/skills_registry.json` | 全部 38 个 SKILL 结构化索引,供程序化路由 |
| `structured/skills_registry.json` | SKILL 结构化索引,供程序化路由 |
| `structured/agent_results.json` | Agent 对话成果追踪表 |
| `structured/daily_digest.md` | 每日自动生成的成果摘要 |
| `structured/processed_sessions.json` | 对话采集幂等游标(避免重复归档) |
| `structured/memory_health.json` | 记忆采集健康指标(扫描/新增/跳过/脱敏) |
| `structured/watchdog_report.json` | 记忆系统巡检结果(告警前置状态) |
| `structured/weekly_report_*.md` | 每周优化审计报告 |
| `structured/tasks/YYYY-MM-DD.md` | **任务结果卡**(仅结果,多线程/子任务完成后写入) |
| `structured/tasks/TEMPLATE.md` | 任务结果卡字段模板 |
| `structured/memory-conflict-report.json` | 写入长期记忆前的冲突检测报告 |
---
@@ -34,32 +52,73 @@
|:---|:---|:---|
| `collect_chat_daily.py` | 每日对话归档(幂等去重 + 脱敏) | 每日 |
| `collect_daily.py` | 扫描当日活跃 Agent生成摘要 | 每日 |
| `weekly_optimize.py` | SKILL 质量审计 + 经验库整理 | 每周 |
| `memory_watchdog.py` | 记忆系统健康巡检(连续2次异常才告警) | 每2小时 |
| `weekly_optimize.py` | SKILL 质量审计 + 经验库整理 + 日日志归档到 `archive/YYYY/MM/` | 每周 |
| `memory_watchdog.py` | 记忆系统健康巡检(连续 2 次异常才告警) | 每 2 小时 |
| `memory_conflict_check.py` | **写入长期记忆前冲突检测**:扫描已有规则/偏好是否与新内容冲突 | 写入前 |
### 使用方式
```bash
# 每日收集
cd /Users/karuo/Documents/个人/卡若AI/02_卡人/水溪_整理归档/记忆系统
# 每日收集
python collect_chat_daily.py
python collect_daily.py
# 每周优化
python weekly_optimize.py
# 仅审计 SKILL 质量
python weekly_optimize.py --audit
# 健康巡检
python memory_watchdog.py
# 冲突检测(写入长期记忆前)
python memory_conflict_check.py "要写入的新内容"
python memory_conflict_check.py --file /path/to/content.txt
```
---
## 当日工作台CURRENT_STATE
- **文件**`记忆系统/CURRENT_STATE.md`
- **用途**每次对话启动时优先读取了解当前进行中上下文compaction 后首选恢复点。
- **字段**:今日目标 / 进行中 / 阻塞 / 下一步≤3
- **更新**:可覆盖更新,保持精简;每次对话结束时若有进展可更新此文件。
---
## 任务结果卡
- **目录**`structured/tasks/`
- **格式**:每个子任务/并行线程完成后,追加到 `structured/tasks/YYYY-MM-DD.md`
- **字段**goal / boundary / acceptance / key_actions / artifact_paths / status / next_step。
- **模板**`structured/tasks/TEMPLATE.md`
- **用途**:仅记录**结果**,不记录过程(过程留对话归档供审计);检索时优先于对话归档。
---
## 冲突检测
- **脚本**`memory_conflict_check.py`
- **时机**:在写入长期记忆(`记忆.md`)前执行,扫描已有规则/路由/偏好是否与新内容冲突。
- **输出**`structured/memory-conflict-report.json`(含冲突数量、具体冲突条目、状态 clean/conflict
- **原则**:有冲突时提示用户确认再写入;无冲突则安全写入。
---
## 归档
- **目录**`archive/YYYY/MM/`
- **时机**:每周精炼时,将已合并入周报的日日志移至归档。
- **检索**:归档内容不参与日常检索,仅供审计与回溯(检索顺序第 6 层)。
---
## 与其他模块的关系
- **SKILL.md**(根目录):技能主索引,人类可读版本
- **skills_registry.json**:与 SKILL.md 内容一致,机器可读版本
- **SKILL_REGISTRY.md**(根目录):技能主索引,人类可读版本
- **skills_registry.json**:与 SKILL_REGISTRY 一致,机器可读版本
- **_经验库/**:经验沉淀的持久存储
- **记忆**:卡若个人长期记忆(偏好、规则、人脉等),路径固定为 `个人/1、卡若本人/记忆.md`(单文件无子目录)
- **记忆**:卡若个人长期记忆,路径固定为 `个人/1、卡若本人/记忆.md`(单文件无子目录)
- **CURRENT_STATE.md**:当日工作台,对话启动首选读取
- **参考资料**`运营中枢/参考资料/OpenClaw记忆功能学习与卡若AI对照.md`

View File

@@ -0,0 +1,21 @@
# 记忆归档archive
> 每周精炼后,已合并进长期记忆的日日志归档至此目录,按年分子目录。
> 归档后的日日志不再参与日常检索,仅供审计与回溯。
## 目录结构
```
archive/
├── 2026/
│ ├── 02/ # YYYY/MM
│ │ ├── 2026-02-16.md
│ │ └── ...
│ └── 03/
└── README.md
```
## 归档时机
- **weekly_optimize.py** 每周运行时,将已合并入周报的日日志移至 `archive/YYYY/MM/`
- 手动归档:将超过 30 天的 `structured/daily_digest.md` 历史段落移入此处。

View File

@@ -0,0 +1,105 @@
#!/usr/bin/env python3
"""
卡若AI 记忆冲突检测
在写入长期记忆(记忆.md扫描已有规则/路由/偏好是否与新内容冲突。
生成 structured/memory-conflict-report.json。
用法:
python memory_conflict_check.py "新写入的内容"
python memory_conflict_check.py --file /path/to/new_content.txt
"""
import json
import re
import sys
from datetime import datetime
from pathlib import Path
MEMORY_FILE = Path("/Users/karuo/Documents/个人/1、卡若本人/记忆.md")
REPORT_FILE = Path(__file__).parent / "structured" / "memory-conflict-report.json"
CONFLICT_PATTERNS = [
(r"默认.*(?:使用|用|改为|切换)", "默认行为变更"),
(r"禁止|不得|不要|不允许", "禁止规则"),
(r"一律|统一|强制|必须", "强制规则"),
(r"路径.*(?:改为|迁移|移动)", "路径变更"),
(r"密码|token|key|密钥", "敏感信息"),
]
def load_memory():
if not MEMORY_FILE.exists():
return ""
return MEMORY_FILE.read_text(encoding="utf-8")
def extract_rules(text):
rules = []
for line in text.splitlines():
stripped = line.strip()
if not stripped or stripped.startswith("#"):
continue
for pattern, category in CONFLICT_PATTERNS:
if re.search(pattern, stripped, re.IGNORECASE):
rules.append({"line": stripped[:120], "category": category})
break
return rules
def check_conflicts(new_content, existing_rules):
conflicts = []
new_lines = [l.strip() for l in new_content.splitlines() if l.strip()]
for new_line in new_lines:
for rule in existing_rules:
if rule["category"] in ("禁止规则", "强制规则", "默认行为变更"):
new_keywords = set(re.findall(r"[\u4e00-\u9fff]+", new_line))
old_keywords = set(re.findall(r"[\u4e00-\u9fff]+", rule["line"]))
overlap = new_keywords & old_keywords
if len(overlap) >= 3:
conflicts.append({
"new": new_line[:120],
"existing": rule["line"][:120],
"category": rule["category"],
"overlap_keywords": list(overlap)[:8],
})
return conflicts
def main():
if len(sys.argv) < 2:
print("用法: python memory_conflict_check.py \"新内容\" 或 --file path")
sys.exit(1)
if sys.argv[1] == "--file":
new_content = Path(sys.argv[2]).read_text(encoding="utf-8")
else:
new_content = sys.argv[1]
existing_text = load_memory()
existing_rules = extract_rules(existing_text)
conflicts = check_conflicts(new_content, existing_rules)
report = {
"updated": datetime.now().isoformat(),
"existing_rules_count": len(existing_rules),
"new_content_lines": len([l for l in new_content.splitlines() if l.strip()]),
"conflicts_found": len(conflicts),
"conflicts": conflicts[:20],
"status": "conflict" if conflicts else "clean",
}
REPORT_FILE.parent.mkdir(parents=True, exist_ok=True)
REPORT_FILE.write_text(json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8")
if conflicts:
print(f"⚠️ 发现 {len(conflicts)} 个潜在冲突:")
for c in conflicts[:5]:
print(f" - [{c['category']}] 新: {c['new'][:60]}… vs 已有: {c['existing'][:60]}")
print(f"详见 {REPORT_FILE}")
else:
print(f"✅ 无冲突,可安全写入。报告: {REPORT_FILE}")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,8 @@
{
"updated": "2026-03-12T16:40:41.944679",
"existing_rules_count": 12,
"new_content_lines": 1,
"conflicts_found": 0,
"conflicts": [],
"status": "clean"
}

View File

@@ -0,0 +1,18 @@
# 任务结果卡模板
> 每个子任务/并行线程完成后,按此格式追加到 `structured/tasks/YYYY-MM-DD.md`。
> 仅记录**结果**,不记录过程细节(过程留在对话归档供审计)。
---
## [任务名称]
| 字段 | 内容 |
|:---|:---|
| **goal** | 任务目标(一句话) |
| **boundary** | 边界与归属域(五行/成员/技能) |
| **acceptance** | 验收标准 |
| **key_actions** | 关键动作≤5 条) |
| **artifact_paths** | 产出文件路径 |
| **status** | done / partial / failed |
| **next_step** | 后续(若有) |

View File

@@ -530,13 +530,26 @@ async def publish_one_compat(
# Main
# ---------------------------------------------------------------------------
def _run_login_then_retry():
"""Cookie 无效时自动调起登录,写回 storage 后由调用方重试。"""
login_script = SCRIPT_DIR / "channels_login.py"
if not login_script.exists():
return False
print("[*] Cookie 无效,正在自动调起登录(浏览器将打开,请扫码)...", flush=True)
r = subprocess.run([sys.executable, str(login_script)], cwd=str(SCRIPT_DIR), timeout=300)
return r.returncode == 0
async def main():
print("=== 视频号纯 API 发布 (v5 — DFS + post_create) ===\n", flush=True)
state = load_state()
if not state:
print("[!] Cookie 文件不存在,请先运行 channels_login.py", flush=True)
return 1
if _run_login_then_retry():
state = load_state()
if not state:
print("[!] Cookie 文件不存在且登录未完成", flush=True)
return 1
cookie_str = get_cookie_str(state)
ls = get_local_storage(state)
@@ -544,14 +557,28 @@ async def main():
finger_print = ls.get("_finger_print_device_id", "")
aid = ls.get("__ml::aid", "").strip('"')
if not finger_print or not aid:
print("[!] localStorage 缺少 finger_print_device_id 或 __ml::aid", flush=True)
print(" 请先运行 channels_login.py 或用浏览器访问视频号助手", flush=True)
return 1
if _run_login_then_retry():
state = load_state()
cookie_str = get_cookie_str(state)
ls = get_local_storage(state)
finger_print = ls.get("_finger_print_device_id", "")
aid = ls.get("__ml::aid", "").strip('"')
if not finger_print or not aid:
print("[!] localStorage 缺少 finger_print_device_id 或 __ml::aid", flush=True)
return 1
auth = await auth_check(cookie_str)
if not auth:
print("[!] Cookie 无效,请重新运行 channels_login.py", flush=True)
return 1
if _run_login_then_retry():
state = load_state()
cookie_str = get_cookie_str(state)
ls = get_local_storage(state)
finger_print = ls.get("_finger_print_device_id", "")
aid = ls.get("__ml::aid", "").strip('"')
auth = await auth_check(cookie_str)
if not auth:
print("[!] Cookie 仍无效,请稍后重试发布", flush=True)
return 1
fu = auth.get("finderUser", {})
finder_id = fu["finderUsername"]

View File

@@ -1,7 +1,7 @@
{
"sessionid": "BgAAS6FvR%2B4TaJLl3izwT1G06CgfKh5skaBvkQJ0SQ59mfQT0ToHyODMpnLSAJK2P6L4CYgjALA2gzNgMX7ebaUJjn4t13wujVBySeUuMhI%3D",
"wxuin": "1053878081",
"cookie_str": "sessionid=BgAAS6FvR%2B4TaJLl3izwT1G06CgfKh5skaBvkQJ0SQ59mfQT0ToHyODMpnLSAJK2P6L4CYgjALA2gzNgMX7ebaUJjn4t13wujVBySeUuMhI%3D; wxuin=1053878081",
"sessionid": "BgAAySFskQflFyEymqZMOalyrdmMk5xmq4gumjVNMmShioI94oWnXQCEfWXKsQ6BLvvIt7FCPL65xB0aePR18FEWr01wtmjbrrie1%2BoCEjs%3D",
"wxuin": "4249681427",
"cookie_str": "sessionid=BgAAySFskQflFyEymqZMOalyrdmMk5xmq4gumjVNMmShioI94oWnXQCEfWXKsQ6BLvvIt7FCPL65xB0aePR18FEWr01wtmjbrrie1%2BoCEjs%3D; wxuin=4249681427",
"finder_raw": "",
"finder_username": "v2_060000231003b20faec8c5e48919cbd5cb05e53db077dd1924028a806c10cffd891eb5a80ce7@finder",
"finder_uin": "",

View File

@@ -43,8 +43,14 @@
**启动瘦身(按需加载)**:步骤 2 不需要全表扫描。优先只加载 `SKILL_REGISTRY.md` 中 🔴 热技能≤8 个)的触发词+路径;未命中时再懒加载其余部分。详见 SKILL_REGISTRY 中「技能热度分级」。
**当日工作台CURRENT_STATE**:每次对话启动时,可读 `02_卡人/水溪_整理归档/记忆系统/CURRENT_STATE.md` 了解当前进行中的目标与上下文compaction/新会话时的第一恢复点)。对话结束时若有进展可更新此文件。
**任务看板**:跨组协作或接续任务时,先读 `运营中枢/工作台/当前任务看板.md` 确认在进行的任务上下文。
**记忆检索顺序(强制)**:当需要从记忆中查找信息时,按此顺序:① 当日工作台 `CURRENT_STATE.md` → ② 任务结果卡 `structured/tasks/YYYY-MM-DD.md` → ③ 长期记忆 `记忆.md` → ④ 结构化摘要 `daily_digest.md` + `agent_results.json` → ⑤ 对话归档 → ⑥ 历史归档 `archive/`。详见 `记忆系统/README.md`
**写入长期记忆前冲突检测**:向 `记忆.md` 写入新规则/偏好前,执行 `python 02_卡人/水溪_整理归档/记忆系统/memory_conflict_check.py "内容"`,有冲突则确认再写入。
**基因胶囊(内部查阅)**:需要快速查阅本地胶囊清单或继承能力时,读 `卡若Ai的文件夹/导出/基因胶囊/README_基因胶囊导出说明.md`(含全量技能胶囊清单、流程图、用法)。亦可用 `gene_capsule.py list` 列出胶囊。
> **注意**:不需要一开始就读总索引、协同规范、交互流程等大文件。这些是参考文档,需要时再查。

View File

@@ -305,3 +305,4 @@
| 2026-03-11 20:48:52 | 🔄 卡若AI 同步 2026-03-11 20:48 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-11 21:09:46 | 🔄 卡若AI 同步 2026-03-11 21:09 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-12 12:20:59 | 🔄 卡若AI 同步 2026-03-12 12:20 | 更新:水桥平台对接、卡木、火炬、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-12 12:26:12 | 🔄 卡若AI 同步 2026-03-12 12:26 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |

View File

@@ -308,3 +308,4 @@
| 2026-03-11 20:48:52 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-11 20:48 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-11 21:09:46 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-11 21:09 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-12 12:20:59 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-12 12:20 | 更新:水桥平台对接、卡木、火炬、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-12 12:26:12 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-12 12:26 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |