From f4c6612849955f25be2ef8adc3105726ba9b36de Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Tue, 10 Feb 2026 14:56:18 +0800 Subject: [PATCH] docs: Add workspace configuration and memory files - AGENTS.md: Update agent workspace guidelines (read TODO.md in workflow) - TODO.md: Add security inspection and TTS configuration tasks - memory/: Add knowledge base refactoring progress notes - .gitignore: Add debug/ directory --- .gitignore | 2 + AGENTS.md | 5 +- TODO.md | 36 ++++ memory/2026-02-10.md | 23 ++ memory/plans/knowledge-base-refactoring.md | 233 +++++++++++++++++++++ 5 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 TODO.md create mode 100644 memory/2026-02-10.md create mode 100644 memory/plans/knowledge-base-refactoring.md diff --git a/.gitignore b/.gitignore index a3418c5..3754fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ skills/obsidian-kb/test_*.py skills/obsidian-kb/*_REPORT.md skills/obsidian-kb/*_SUMMARY.md skills/obsidian-kb/DrissionPage_*.md +# 调试文件 +debug/ diff --git a/AGENTS.md b/AGENTS.md index 06a5226..db98911 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,8 +12,9 @@ Before doing anything else: 1. Read `SOUL.md` — this is who you are 2. Read `USER.md` — this is who you're helping -3. Read `memory/YYYY-MM-DD.md` (today + yesterday) for recent context -4. **If in MAIN SESSION** (direct chat with your human): Also read `MEMORY.md` +3. Read `TODO.md` — check pending tasks +4. Read `memory/YYYY-MM-DD.md` (today + yesterday) for recent context +5. **If in MAIN SESSION** (direct chat with your human): Also read `MEMORY.md` Don't ask permission. Just do it. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6da6e43 --- /dev/null +++ b/TODO.md @@ -0,0 +1,36 @@ +# Todo + +## 待处理 + +### 重要 +- [ ] 配置 OpenRouter 接入(使用免费模型如Pony Alpha) + - 获取 OPENROUTER_API_KEY + - 运行: `openclaw onboard --auth-choice apiKey --token-provider openrouter --token "$OPENROUTER_API_KEY"` + - 或在 config.yaml 中配置 env: { OPENROUTER_API_KEY: "sk-or-..." } +- [ ] 🔒 处理安全巡检报告问题(2026-02-10) + - [ ] 修复凭证目录权限: chmod 700 /home/admin/.openclaw/credentials + - [ ] 禁用控制UI不安全认证: gateway.controlUi.allowInsecureAuth=false + - [ ] 审查/移除Feishu插件 (src/media.ts:477) + - [ ] 配置插件白名单 plugins.allow + - [ ] 审查WeCom插件可疑代码 (src/monitor.ts:376, src/outbound.ts:141) + - [ ] 启用ufw防火墙 +- [ ] 配置阿里云 TTS 语音 + - 需要提供:AccessKeyId, AccessKeySecret + - 配置命令: `openclaw config set channels.wecom.voice.type "aliyun"` + - [ ] 修复凭证目录权限: chmod 700 /home/admin/.openclaw/credentials + - [ ] 禁用控制UI不安全认证: gateway.controlUi.allowInsecureAuth=false + - [ ] 审查/移除Feishu插件 (src/media.ts:477) + - [ ] 配置插件白名单 plugins.allow + - [ ] 审查WeCom插件可疑代码 (src/monitor.ts:376, src/outbound.ts:141) + - [ ] 启用ufw防火墙 + +### 常规 +- [ ] ... + +--- + +## 已完成 ✅ +- bilibili-analyzer技能:支持字幕区域裁剪 +- 分析新加坡旅行省钱视频 +- 添加 cron job:子代理状态汇报(已禁用,等待 WeCom 配置) +- 推送 commit: feat(bilibili-analyzer) 字幕裁剪功能 diff --git a/memory/2026-02-10.md b/memory/2026-02-10.md new file mode 100644 index 0000000..8598568 --- /dev/null +++ b/memory/2026-02-10.md @@ -0,0 +1,23 @@ +# 2026-02-10 + +## 知识库技能重构 - B站专栏内容获取 + +### kb-bilibili-content 专栏内容获取 + +**测试结果:** +``` +标题: [UEPCG][新手向]复刻ChrisMurphy的城市道路建筑生成... +内容长度: 12659 字符 +✅ 获取成功 +``` + +**实现方式:** +- 使用 Playwright 异步API爬取专栏页面 +- 选择器: `.read-article-holder` +- 获取完整文章正文 + +### 已提交 + +- `47355b3` - feat(kb-bilibili-content): Add article content extraction using Playwright +- `56907e3` - refactor(kb-zhihu-metadata): Simplify to only support zvideo and zhuanlan +- 使用playurl API,无需Cookie即可下载视频 diff --git a/memory/plans/knowledge-base-refactoring.md b/memory/plans/knowledge-base-refactoring.md new file mode 100644 index 0000000..2cfdb0e --- /dev/null +++ b/memory/plans/knowledge-base-refactoring.md @@ -0,0 +1,233 @@ +# 知识库维护系统 - 实现计划 + +**目标:** 将 obsidian-kb 拆分为 7 个独立技能,实现模块化、可维护的知识库维护系统 +**方案:** 复用现有代码,按详细设计文档实现 +**预计总时间:** 约 180 分钟(3 小时) + +--- + +## 检查点 1: 项目初始化 +- [ ] **任务 1.1**: 创建技能目录结构 (~2 min) + - **动作**: 创建 `skills/link-parser/`, `skills/bilibili-metadata/`, `skills/zhihu-metadata/`, `skills/bilibili-content/`, `skills/ocr-processor/`, `skills/deep-analyzer/`, `skills/kb-workflow/` 目录 + - **验证**: `ls skills/` 显示 7 个新目录 + +- [ ] **任务 1.2**: 复制现有代码库到临时位置 (~3 min) + - **动作**: 复制 `obsidian-kb/src/` 到临时目录备份 + - **验证**: 确认 `tmp_backup/src/` 存在所有 .py 文件 + +- [ ] **任务 1.3**: 创建通用配置文件模板 (~3 min) + - **动作**: 按详细设计创建 `skills/_common/config_template.yaml` + - **验证**: `cat config_template.yaml` 显示所有配置项 + +--- + +## 检查点 2: 技能 1 - link-parser +- [ ] **任务 2.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 link-parser 描述 + - **验证**: `cat skills/link-parser/SKILL.md` 包含功能描述和命令 + +- [ ] **任务 2.2**: 实现链接解析器主文件 (~8 min) + - **动作**: 创建 `skills/link-parser/link-parser.py`,实现: + - `resolve_shortlink()` 短链跳转 + - `extract_bilibili_id()` B站ID提取 + - `extract_youtube_id()` YouTube ID提取 + - `extract_zhihu_id()` 知乎ID提取 + - **验证**: `python link-parser.py --url "https://b23.tv/xxx"` 返回 JSON + +- [ ] **任务 2.3**: 测试链接解析器 (~3 min) + - **动作**: 测试以下链接: + - `https://www.bilibili.com/video/BV1xx` + - `https://space.bilibili.com/7770724` + - `https://b23.tv/xxxxx` + - `https://www.zhihu.com/question/266309957` + - **验证**: 每个链接返回正确的 platform, type, id + +- [ ] **任务 2.4**: 验证复用代码 (~2 min) + - **动作**: 确认复用 `shortlink_resolver.py` + - **验证**: import 语句存在,代码无红色报错 + +--- + +## 检查点 3: 技能 2 - bilibili-metadata +- [ ] **任务 3.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 bilibili-metadata 描述 + - **验证**: 文件包含功能描述和命令行示例 + +- [ ] **任务 3.2**: 实现 B站元数据获取器 (~10 min) + - **动作**: 创建 `skills/bilibili-metadata/bilibili_metadata.py`: + - 复用 `BilibiliExtractor` 类 + - 实现 `extract_video_metadata()` + - 实现 `extract_article_metadata()` + - 实现 `extract_up_metadata()` + - **验证**: `python bilibili_metadata.py --id "BV1xx"` 返回完整 JSON + +- [ ] **任务 3.3**: 测试 B站元数据获取 (~5 min) + - **动作**: 测试视频、专栏、UP主三种类型 + - **验证**: 每种类型返回对应格式的元数据 + +--- + +## 检查点 4: 技能 2 - zhihu-metadata +- [ ] **任务 4.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 zhihu-metadata 描述 + - **验证**: 文件包含功能描述 + +- [ ] **任务 4.2**: 实现知乎元数据获取器 (~8 min) + - **动作**: 创建 `skills/zhihu-metadata/zhihu_metadata.py`: + - 复用 `ZhihuDrissionExtractor` 类 + - 实现 `extract_question()` + - 实现 `extract_answer()` + - 实现 `extract_user()` + - **验证**: `python zhihu_metadata.py --id "266309957"` 返回 JSON + +- [ ] **任务 4.3**: 测试知乎元数据获取 (~3 min) + - **动作**: 测试问题、回答两种类型 + - **验证**: 返回正确格式的元数据 + +--- + +## 检查点 5: 技能 3 - bilibili-content +- [ ] **任务 5.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 bilibili-content 描述 + - **验证**: 文件包含功能描述 + +- [ ] **任务 5.2**: 实现 B站内容获取器 (~12 min) + - **动作**: 创建 `skills/bilibili-content/bilibili_content.py`: + - 复用 `VideoStreamExtractor` + - 实现 `download_video(quality=480)` + - 实现 `extract_subtitle()` + - 实现 `extract_article_content()` + - **验证**: `python bilibili_content.py --id "BV1xx"` 下载视频到 output 目录 + +- [ ] **任务 5.3**: 测试内容获取 (~5 min) + - **动作**: 测试视频下载、字幕提取 + - **验证**: output 目录包含 .mp4 和 .srt 文件 + +--- + +## 检查点 6: 技能 3 - ocr-processor +- [ ] **任务 6.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 ocr-processor 描述 + - **验证**: 文件包含功能描述 + +- [ ] **任务 6.2**: 实现 OCR 处理器 (~8 min) + - **动作**: 创建 `skills/ocr-processor/ocr_processor.py`: + - 复用 `OCRProcessor` + - 实现 `process_frames(input_dir, fps=0.1)` + - 实现 `merge_texts()` + - **验证**: `python ocr_processor.py --input ./frames/` 生成 ocr.json + +- [ ] **任务 6.3**: 测试 OCR 功能 (~3 min) + - **动作**: 用测试帧目录运行 OCR + - **验证**: 返回包含 texts 和 confidence 的 JSON + +--- + +## 检查点 7: 技能 4 - deep-analyzer +- [ ] **任务 7.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 deep-analyzer 描述 + - **验证**: 文件包含模板变量说明 + +- [ ] **任务 7.2**: 实现深度分析器 (~15 min) + - **动作**: 创建 `skills/deep-analyzer/deep_analyzer.py`: + - 复用 `DeepAnalyzer` + - 实现 `analyze(metadata, content, type)` + - 实现 `load_template(type)` + - 实现 `render_template(variables)` + - **验证**: `python deep_analyzer.py --metadata m.json --content c.json` 生成 .md + +- [ ] **任务 7.3**: 测试深度分析 (~5 min) + - **动作**: 用示例元数据和内容运行分析 + - **验证**: 生成包含 frontmatter 和模板内容的 Markdown + +--- + +## 检查点 8: 技能 5 - kb-workflow +- [ ] **任务 8.1**: 创建 SKILL.md (~2 min) + - **动作**: 复制 SKILL.md 模板,填写 kb-workflow 描述 + - **验证**: 文件包含工作流步骤说明 + +- [ ] **任务 8.2**: 实现工作流编排器 (~20 min) + - **动作**: 创建 `skills/kb-workflow/kb_workflow.py`: + - 实现 `scan_inbox()` 扫描四个子目录 + - 实现 `process_item(item)` 调用技能2-4 + - 实现 `archive_item(item, analysis)` 归档 + - 实现 `check_subscriptions()` 订阅更新检测 + - 实现 `generate_report()` 生成汇报 + - **验证**: `python kb_workflow.py --trigger manual` 运行无报错 + +- [ ] **任务 8.3**: 测试工作流 (~5 min) + - **动作**: 用一个测试 item 运行完整流程 + - **验证**: item 从 pending → metadata → content → archive + +--- + +## 检查点 9: 目录结构与配置 +- [ ] **任务 9.1**: 创建收件箱目录模板 (~2 min) + - **动作**: 创建 `inbox/{pending,metadata,content,analyzed}/` 目录 + - **验证**: `ls inbox/` 显示四个子目录 + +- [ ] **任务 9.2**: 创建归档目录模板 (~2 min) + - **动作**: 创建 `archive/YYYY/MM/{video,article}/` 目录 + - **验证**: `ls archive/2024/01/` 显示子目录 + +- [ ] **任务 9.3**: 创建 config.yaml 示例 (~3 min) + - **动作**: 创建 `skills/_common/config.yaml` 示例 + - **验证**: 文件包含 AI、存储、Git、OCR 等配置 + +--- + +## 检查点 10: 集成测试 +- [ ] **任务 10.1**: 端到端测试 - 单个视频 (~10 min) + - **动作**: + 1. `link-parser` 解析视频链接 + 2. `bilibili-metadata` 获取元数据 + 3. `bilibili-content` 获取内容 + 4. `deep-analyzer` 生成分析 + 5. `kb-workflow` 归档 + - **验证**: archive 目录生成 .md 文件 + +- [ ] **任务 10.2**: 端到端测试 - 列表类型 (~5 min) + - **动作**: 模拟 UP主链接,测试列表处理流程 + - **验证**: 返回 requires_user_input 标记 + +- [ ] **任务 10.3**: 汇报功能测试 (~3 min) + - **动作**: 运行工作流后检查 report.json + - **验证**: report.json 包含 processed, success, failed 统计 + +--- + +## 验证标准 + +- [ ] 所有 7 个技能的 SKILL.md 存在且内容正确 +- [ ] 每个技能可通过命令行独立运行 +- [ ] link-parser 支持所有设计的链接格式 +- [ ] bilibili-metadata 和 zhihu-metadata 返回正确元数据 +- [ ] bilibili-content 可下载视频和提取字幕 +- [ ] ocr-processor 可处理帧图片并输出文字 +- [ ] deep-analyzer 可生成模板化的 Markdown +- [ ] kb-workflow 可完成端到端流程并归档 +- [ ] 汇报文件格式正确 +- [ ] 代码复用已验证的现有模块 + +--- + +## 执行选项 + +**计划已保存到** `memory/plans/knowledge-base-refactoring.md` + +**两种执行方式:** + +**1. 单代理顺序执行(当前会话)** +- 我按顺序执行每个任务 +- 每个检查点完成后向您汇报 +- 适合需要频繁确认的场景 +- **预计时间**: 约 3 小时 + +**2. 并行分发执行** +- 使用 dispatch-multiple-agents 技能 +- 并行创建多个子代理同时工作 +- 适合时间紧迫的场景 +- **预计时间**: 约 1 小时(需要更多协调) + +**蒋先生,您选择哪种方式?**