From 8146b8f747cd23d13f95f4568707f1ac1e091559 Mon Sep 17 00:00:00 2001 From: karuo Date: Thu, 12 Mar 2026 16:42:08 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20=E5=8D=A1=E8=8B=A5AI=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=202026-03-12=2016:42=20|=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9ACursor=E8=A7=84=E5=88=99=E3=80=81=E6=B0=B4=E6=A1=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=AF=B9=E6=8E=A5=E3=80=81=E6=B0=B4=E6=BA=AA?= =?UTF-8?q?=E6=95=B4=E7=90=86=E5=BD=92=E6=A1=A3=E3=80=81=E5=8D=A1=E6=9C=A8?= =?UTF-8?q?=E3=80=81=E6=80=BB=E7=B4=A2=E5=BC=95=E4=B8=8E=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=81=E8=BF=90=E8=90=A5=E4=B8=AD=E6=9E=A2=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8F=B0=20|=20=E6=8E=92=E9=99=A4=20>20MB:=2011=20=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cursor/rules/karuo-ai.mdc | 7 +- .../水桥_平台对接/Soul创业实验/SKILL.md | 54 +++++++- 02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md | 2 + .../智能纪要/飞书视频文字下载/SKILL.md | 131 ++++++++++++++++++ .../水溪_整理归档/记忆系统/CURRENT_STATE.md | 22 +++ .../水溪_整理归档/记忆系统/README.md | 89 ++++++++++-- .../水溪_整理归档/记忆系统/archive/README.md | 21 +++ .../记忆系统/memory_conflict_check.py | 105 ++++++++++++++ .../记忆系统/structured/memory-conflict-report.json | 8 ++ .../记忆系统/structured/tasks/TEMPLATE.md | 18 +++ .../视频号发布/脚本/channels_api_publish.py | 41 +++++- .../视频号发布/脚本/channels_storage_state.json | 2 +- .../视频号发布/脚本/channels_token.json | 6 +- BOOTSTRAP.md | 6 + 运营中枢/工作台/gitea_push_log.md | 1 + 运营中枢/工作台/代码管理.md | 1 + 16 files changed, 481 insertions(+), 33 deletions(-) create mode 100644 02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/SKILL.md create mode 100644 02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md create mode 100644 02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md create mode 100644 02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py create mode 100644 02_卡人(水)/水溪_整理归档/记忆系统/structured/memory-conflict-report.json create mode 100644 02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md diff --git a/.cursor/rules/karuo-ai.mdc b/.cursor/rules/karuo-ai.mdc index d9f4fc60..77c9f9ad 100644 --- a/.cursor/rules/karuo-ai.mdc +++ b/.cursor/rules/karuo-ai.mdc @@ -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 特有行为。 diff --git a/02_卡人(水)/水桥_平台对接/Soul创业实验/SKILL.md b/02_卡人(水)/水桥_平台对接/Soul创业实验/SKILL.md index 7f916ac7..9f5cffd3 100644 --- a/02_卡人(水)/水桥_平台对接/Soul创业实验/SKILL.md +++ b/02_卡人(水)/水桥_平台对接/Soul创业实验/SKILL.md @@ -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% 处插入核心干货块**(3~5 条可执行、紧扣主题);**数值与场景必须具体**;**约 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 "" --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 "" --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 同步为实时;上传小程序、推送飞书群仅在你明确说时才执行 | diff --git a/02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md b/02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md index a2597e52..3d2b8b15 100755 --- a/02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md +++ b/02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md @@ -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`)。 ### 强制:全自动、禁止要求用户手动操作 diff --git a/02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/SKILL.md b/02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/SKILL.md new file mode 100644 index 00000000..5552023c --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/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/02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md b/02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md new file mode 100644 index 00000000..921f27a8 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md @@ -0,0 +1,22 @@ +# 卡若AI 当日工作台(CURRENT_STATE) + +> 每次对话启动时优先读取此文件,了解当前进行中的上下文。 +> 可覆盖更新(非仅追加),保持精简。新对话开始或 compaction 后的第一恢复点。 + +--- + +## 今日目标 + +-(待填写) + +## 进行中 + +-(待填写) + +## 阻塞/风险 + +- 无 + +## 下一步(≤3) + +1.(待填写) diff --git a/02_卡人(水)/水溪_整理归档/记忆系统/README.md b/02_卡人(水)/水溪_整理归档/记忆系统/README.md index 94cfe472..81d3e09f 100644 --- a/02_卡人(水)/水溪_整理归档/记忆系统/README.md +++ b/02_卡人(水)/水溪_整理归档/记忆系统/README.md @@ -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` | 每次对话启动时优先读取;可覆盖更新(非仅追加);字段:今日目标/进行中/阻塞/下一步≤3;compaction 或新会话时的第一恢复点 | +| **长期记忆(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` diff --git a/02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md b/02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md new file mode 100644 index 00000000..8c806bd8 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md @@ -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` 历史段落移入此处。 diff --git a/02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py b/02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py new file mode 100644 index 00000000..bf1d6ab9 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py @@ -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() diff --git a/02_卡人(水)/水溪_整理归档/记忆系统/structured/memory-conflict-report.json b/02_卡人(水)/水溪_整理归档/记忆系统/structured/memory-conflict-report.json new file mode 100644 index 00000000..ca399a44 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/记忆系统/structured/memory-conflict-report.json @@ -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" +} \ No newline at end of file diff --git a/02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md b/02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md new file mode 100644 index 00000000..7139d797 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md @@ -0,0 +1,18 @@ +# 任务结果卡模板 + +> 每个子任务/并行线程完成后,按此格式追加到 `structured/tasks/YYYY-MM-DD.md`。 +> 仅记录**结果**,不记录过程细节(过程留在对话归档供审计)。 + +--- + +## [任务名称] + +| 字段 | 内容 | +|:---|:---| +| **goal** | 任务目标(一句话) | +| **boundary** | 边界与归属域(五行/成员/技能) | +| **acceptance** | 验收标准 | +| **key_actions** | 关键动作(≤5 条) | +| **artifact_paths** | 产出文件路径 | +| **status** | done / partial / failed | +| **next_step** | 后续(若有) | diff --git a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_api_publish.py b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_api_publish.py index 1814cd95..add74663 100644 --- a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_api_publish.py +++ b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_api_publish.py @@ -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"] diff --git a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_storage_state.json b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_storage_state.json index 1c6850a7..52b8f8d6 100644 --- a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_storage_state.json +++ b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_storage_state.json @@ -1 +1 @@ -{"cookies": [{"name": "sessionid", "value": "BgAAS6FvR%2B4TaJLl3izwT1G06CgfKh5skaBvkQJ0SQ59mfQT0ToHyODMpnLSAJK2P6L4CYgjALA2gzNgMX7ebaUJjn4t13wujVBySeUuMhI%3D", "domain": "channels.weixin.qq.com", "path": "/", "expires": 1807755990.211326, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "wxuin", "value": "1053878081", "domain": "channels.weixin.qq.com", "path": "/", "expires": 1807755990.211417, "httpOnly": false, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://channels.weixin.qq.com", "localStorage": [{"name": "finder_uin", "value": ""}, {"name": "__ml::hb_ts", "value": "1773201393923"}, {"name": "__ml::page_93c58d09-90c2-4860-95c9-4077b5b2d287", "value": "{\"pageId\":\"PostList\",\"accessId\":\"b11d6cc6-1c21-4992-9330-182337409198\",\"step\":1}"}, {"name": "__ml::page_f5f51f31-1d88-4fcd-99e1-62254b7ed285", "value": "{\"pageId\":\"MicroPost\",\"accessId\":\"1e5233f9-6667-4026-bb9d-e0388f0db908\",\"step\":1}"}, {"name": "__ml::page_8ecfb56a-5918-4670-9818-fd0fb7c60abd", "value": "{\"pageId\":\"LoginForIframe\",\"accessId\":\"1e24c58a-3912-4fd6-8bfb-db31389d6086\",\"step\":1}"}, {"name": "__ml::aid", "value": "\"30cbc62d-d0b3-48ee-9f2c-f140640f8b93\""}, {"name": "__rx::aid", "value": "\"30cbc62d-d0b3-48ee-9f2c-f140640f8b93\""}, {"name": "__ml::page_b324f4ed-38c8-4c0c-b09c-2d6ec995c200", "value": "{\"pageId\":\"MicroPost\",\"accessId\":\"99306fe8-b677-4cf6-8b28-c20385868fbc\",\"step\":1}"}, {"name": "__ml::page", "value": "[\"8ecfb56a-5918-4670-9818-fd0fb7c60abd\",\"42270804-eab1-4761-9df0-2f16beecb28a\",\"71226dfd-b262-43c3-b308-7fffb0b775b5\",\"420d22f6-759f-4a29-982c-69bc83d73345\",\"f5f51f31-1d88-4fcd-99e1-62254b7ed285\",\"93c58d09-90c2-4860-95c9-4077b5b2d287\",\"8ea51909-1f57-455e-8d4e-32fb5dc64bd8\",\"a0d4b3e0-5563-403c-9098-2d955f77b907\",\"b324f4ed-38c8-4c0c-b09c-2d6ec995c200\",\"b97eaae7-1e92-489f-8d9e-db44f9e1c736\"]"}, {"name": "finder_login_token", "value": ""}, {"name": "finder_username", "value": "v2_060000231003b20faec8c5e48919cbd5cb05e53db077dd1924028a806c10cffd891eb5a80ce7@finder"}, {"name": "_finger_print_device_id", "value": "6fd704941768442b12a996d2652fc61e"}, {"name": "__ml::page_8ea51909-1f57-455e-8d4e-32fb5dc64bd8", "value": "{\"pageId\":\"MicroPost\",\"accessId\":\"efbb7fe0-141b-4420-a687-4cee31dd5d93\",\"step\":2,\"refAccessId\":\"bfa0d2bd-0f15-47e7-aea4-487cf72189ea\",\"refPageId\":\"MicroPost\"}"}, {"name": "MICRO_VISITED_NAME", "value": "{\"postCard\":1,\"content\":4}"}, {"name": "AssistantUploadedInfoStorageKey_3899420810", "value": "[{\"fileUploadedInfoKey\":\"AI\u6bcf\u5929\u526a1000\u4e2a\u89c6\u9891 M4\u7535\u811124T\u7d20\u6750\u5e93\u5168\u7f51\u5206\u53d1.mp4:1773161628696:13368696:video/mp4:bb27bef6a6b0bc483253a1a7ef45ae9c\",\"isUsedQuickUpload\":false,\"uploadChunkRecord\":[{\"index\":0,\"reqTime\":1773201399478,\"resTime\":1773201403851,\"cost\":4373,\"success\":true},{\"index\":1,\"reqTime\":1773201399521,\"resTime\":1773201402274,\"cost\":2753,\"success\":true}],\"uuid\":\"4f012cdd-3bc7-4a41-8391-2b2a60986f7f\",\"uploadTaskId\":\"CkQyYWMyOGFmNDg1ZDU5MmFhN2IwYTA3NzNjNDVjMDdmYWFkMDhjZDcxOThjYjQxZTNhODAwYmNkZDFlOGNjNTAwYWQwYxI+NTY5YjBlN2Y3MDAwNmU1OGVlODZjNzA4YTAwMDAwMGZiMDAwMDRmNGU1MzQ4MDZjYWQxNzE1NmQxMDZhOWEw+PqvBg==\",\"uploadTaskIdTimeStamp\":1773201399412,\"transFlag\":\"0_0\",\"partInfo\":[{\"PartNumber\":1,\"ETag\":\"\\\"60ebdb28c6cb0ae3326b893bd6b7929f380f5f70\\\"\"},{\"PartNumber\":2,\"ETag\":\"\\\"3cb4f2daa588cbe0cb2e5c9a74e27f2e73ef4820\\\"\"}],\"uploadSuccessResp\":{\"data\":{\"DownloadURL\":\"http://wxapp.tc.qq.com/251/20302/stodownload?bizid=1023&dotrans=0&encfilekey=Cvvj5Ix3eewK0tHtibORqcsqchXNh0Gf3sJcaYqC2rQAG5cbBO9Dcf1ChScJsbFWibO1jJuy1VJ37tcQcAPC8cdNu4oJTO2nxhsCXxtmNFNicsiakHLSTmLMpicXtibfgpgFkq&findertoken=088ae1b1c30e10fccfc3cd061800223c66696e64657275706c6f616475726c5f333839393432303831305f313737333230313430343038315f313938343932303738383533373031323730362a2037303537306663656335636336636131346533303861613565623334633434663801400348005000580260ce9e01&hy=SH&idx=1&m=&scene=2&token=x5Y29zUxcibDKpcKcWAN8FQSwnP6s7Av7qtG75jebJ9gv6VGeeAM6b3LzNtIBJImiasuHYk2pr0Prm8OCyVFtdjyGWLXRKiccCxCPzGa4gporkQ6ibQWKYmrbQ&uzid=7a1ac\",\"httpsUrl\":\"https://finder.video.qq.com/251/20302/stodownload?bizid=1023&dotrans=0&encfilekey=Cvvj5Ix3eewK0tHtibORqcsqchXNh0Gf3sJcaYqC2rQAG5cbBO9Dcf1ChScJsbFWibO1jJuy1VJ37tcQcAPC8cdNu4oJTO2nxhsCXxtmNFNicsiakHLSTmLMpicXtibfgpgFkq&findertoken=088ae1b1c30e10fccfc3cd061800223c66696e64657275706c6f616475726c5f333839393432303831305f313737333230313430343038315f313938343932303738383533373031323730362a2037303537306663656335636336636131346533303861613565623334633434663801400348005000580260ce9e01&hy=SH&idx=1&m=&scene=2&token=x5Y29zUxcibDKpcKcWAN8FQSwnP6s7Av7qtG75jebJ9gv6VGeeAM6b3LzNtIBJImiasuHYk2pr0Prm8OCyVFtdjyGWLXRKiccCxCPzGa4gporkQ6ibQWKYmrbQ&uzid=7a1ac\"}}}]"}, {"name": "UvFirstReportLocalKey", "value": "1773158400000"}, {"name": "__ml::page_b97eaae7-1e92-489f-8d9e-db44f9e1c736", "value": "{\"pageId\":\"PostCreate\",\"accessId\":\"214ab773-06c6-4644-b6ca-3027f37a7172\",\"step\":1}"}, {"name": "__ml::page_42270804-eab1-4761-9df0-2f16beecb28a", "value": "{\"pageId\":\"LoginForIframe\",\"accessId\":\"d3417a18-ab92-4e50-abfc-436a997db360\",\"step\":1}"}, {"name": "__ml::page_420d22f6-759f-4a29-982c-69bc83d73345", "value": "{\"pageId\":\"PostCard\",\"accessId\":\"4b6e8654-40cf-459c-8169-edc29af30e23\",\"step\":1}"}, {"name": "__ml::page_71226dfd-b262-43c3-b308-7fffb0b775b5", "value": "{\"pageId\":\"Home\",\"accessId\":\"0ac0b09f-f112-4f71-9180-c8f628b0de22\",\"step\":1}"}, {"name": "__ml::page_a0d4b3e0-5563-403c-9098-2d955f77b907", "value": "{\"pageId\":\"PostList\",\"accessId\":\"bbfb71ad-63db-483e-9376-5043fb106f5a\",\"step\":2,\"refAccessId\":\"a07b18ab-e357-455d-8d59-9481284a7f42\",\"refPageId\":\"PostCreate\"}"}, {"name": "finder_ua_report_data", "value": "{\"browser\":\"Chrome\",\"browserVersion\":\"131.0.0.0\",\"engine\":\"Webkit\",\"engineVersion\":\"537.36\",\"os\":\"Mac OS X\",\"osVersion\":\"10.15.7\",\"device\":\"desktop\",\"darkmode\":0}"}, {"name": "finder_route_meta", "value": "micro.content/post/create;index;1;1773201396251"}]}]} \ No newline at end of file +{"cookies": [{"name": "sessionid", "value": "BgAAySFskQflFyEymqZMOalyrdmMk5xmq4gumjVNMmShioI94oWnXQCEfWXKsQ6BLvvIt7FCPL65xB0aePR18FEWr01wtmjbrrie1%2BoCEjs%3D", "domain": "channels.weixin.qq.com", "path": "/", "expires": 1807854753.00845, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "wxuin", "value": "4249681427", "domain": "channels.weixin.qq.com", "path": "/", "expires": 1807854753.008508, "httpOnly": false, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://channels.weixin.qq.com", "localStorage": [{"name": "__ml::page_6b465a4b-9431-4a1c-99c7-76a0423901a3", "value": "{\"pageId\":\"LoginForIframe\",\"accessId\":\"8d12cc30-0707-4554-8576-66d2de5f4632\",\"step\":1}"}, {"name": "__ml::page_b007a852-0fa9-4c81-8999-0996de5d3955", "value": "{\"pageId\":\"Home\",\"accessId\":\"3a16659d-82a2-491e-8454-a3fbb20c62c2\",\"step\":1}"}, {"name": "__ml::hb_ts", "value": "1773294723328"}, {"name": "finder_route_meta", "value": "micro.content/post/list;index;1;1773294830483"}, {"name": "__ml::page_64bc2640-049f-4a88-b247-5b334a248f16", "value": "{\"pageId\":\"LoginForIframe\",\"accessId\":\"e9668dd6-d202-4a4e-86af-c19db52e1c43\",\"step\":1}"}, {"name": "__rx::aid", "value": "\"ce49f3b8-c5ef-4cae-8798-4df77ac721fd\""}, {"name": "__ml::aid", "value": "\"ce49f3b8-c5ef-4cae-8798-4df77ac721fd\""}, {"name": "__ml::page", "value": "[\"64bc2640-049f-4a88-b247-5b334a248f16\",\"6b465a4b-9431-4a1c-99c7-76a0423901a3\",\"b007a852-0fa9-4c81-8999-0996de5d3955\",\"ace605e5-74aa-4fcb-8e5c-9b4b23c7ae7b\",\"ac12b732-37e2-47e3-b97e-6c0178f68048\",\"63574ae3-342a-41a6-8fe4-7492b515dbdd\"]"}, {"name": "finder_login_token", "value": ""}, {"name": "finder_username", "value": "v2_060000231003b20faec8c5e48919cbd5cb05e53db077dd1924028a806c10cffd891eb5a80ce7@finder"}, {"name": "__ml::page_ace605e5-74aa-4fcb-8e5c-9b4b23c7ae7b", "value": "{\"pageId\":\"PostCard\",\"accessId\":\"8c1bbb73-adfe-4d8c-8685-54faf23f87eb\",\"step\":1}"}, {"name": "_finger_print_device_id", "value": "6fd704941768442b12a996d2652fc61e"}, {"name": "MICRO_VISITED_NAME", "value": "{\"postCard\":1,\"content\":1}"}, {"name": "__ml::page_ac12b732-37e2-47e3-b97e-6c0178f68048", "value": "{\"pageId\":\"MicroPost\",\"accessId\":\"e434233d-9523-4067-aa98-23ef969680cb\",\"step\":1}"}, {"name": "UvFirstReportLocalKey", "value": "1773244800000"}, {"name": "__ml::page_63574ae3-342a-41a6-8fe4-7492b515dbdd", "value": "{\"pageId\":\"PostList\",\"accessId\":\"9b7981aa-77b8-4224-a786-a9431138f718\",\"step\":1}"}, {"name": "finder_ua_report_data", "value": "{\"browser\":\"Chrome\",\"browserVersion\":\"131.0.0.0\",\"engine\":\"Webkit\",\"engineVersion\":\"537.36\",\"os\":\"Mac OS X\",\"osVersion\":\"10.15.7\",\"device\":\"desktop\",\"darkmode\":0}"}, {"name": "finder_uin", "value": ""}]}]} \ No newline at end of file diff --git a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_token.json b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_token.json index 3ad0b67a..82fb7fe0 100644 --- a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_token.json +++ b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_token.json @@ -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": "", diff --git a/BOOTSTRAP.md b/BOOTSTRAP.md index 9ad0d769..189fb4f3 100644 --- a/BOOTSTRAP.md +++ b/BOOTSTRAP.md @@ -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` 列出胶囊。 > **注意**:不需要一开始就读总索引、协同规范、交互流程等大文件。这些是参考文档,需要时再查。 diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index 973f9b7e..b63c5318 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -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 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index b10ac4c4..f1fb47e7 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -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) |