🔄 卡若AI 同步 2026-03-12 16:42 | 更新:Cursor规则、水桥平台对接、水溪整理归档、卡木、总索引与入口、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
@@ -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 "<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 同步为实时;上传小程序、推送飞书群仅在你明确说时才执行 |
|
||||
|
||||
@@ -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`)。
|
||||
|
||||
### 强制:全自动、禁止要求用户手动操作
|
||||
|
||||
|
||||
131
02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/SKILL.md
Normal file
131
02_卡人(水)/水桥_平台对接/智能纪要/飞书视频文字下载/SKILL.md
Normal 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 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`
|
||||
22
02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md
Normal file
22
02_卡人(水)/水溪_整理归档/记忆系统/CURRENT_STATE.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 卡若AI 当日工作台(CURRENT_STATE)
|
||||
|
||||
> 每次对话启动时优先读取此文件,了解当前进行中的上下文。
|
||||
> 可覆盖更新(非仅追加),保持精简。新对话开始或 compaction 后的第一恢复点。
|
||||
|
||||
---
|
||||
|
||||
## 今日目标
|
||||
|
||||
-(待填写)
|
||||
|
||||
## 进行中
|
||||
|
||||
-(待填写)
|
||||
|
||||
## 阻塞/风险
|
||||
|
||||
- 无
|
||||
|
||||
## 下一步(≤3)
|
||||
|
||||
1.(待填写)
|
||||
@@ -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`
|
||||
|
||||
21
02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md
Normal file
21
02_卡人(水)/水溪_整理归档/记忆系统/archive/README.md
Normal 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` 历史段落移入此处。
|
||||
105
02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py
Normal file
105
02_卡人(水)/水溪_整理归档/记忆系统/memory_conflict_check.py
Normal 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()
|
||||
@@ -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"
|
||||
}
|
||||
18
02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md
Normal file
18
02_卡人(水)/水溪_整理归档/记忆系统/structured/tasks/TEMPLATE.md
Normal 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** | 后续(若有) |
|
||||
Reference in New Issue
Block a user