From 1373b59e08978a80ea4a0aa5419aef14379442b3 Mon Sep 17 00:00:00 2001 From: starmen1265 Date: Mon, 16 Mar 2026 02:10:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5:=202026-03?= =?UTF-8?q?-16=2002:10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agents/haonan/sessions/sessions.json | 223 +++++++++--------- .../workspace/memory/2026-03-15-1018.md | 63 +++++ .../workspace/memory/2026-03-15-1021.md | 39 +++ .../workspace/memory/2026-03-15-1501.md | 88 +++++++ .../workspace/memory/2026-03-15-1626.md | 147 ++++++++++++ .../workspace/memory/2026-03-15-1632.md | 67 ++++++ .../workspace/memory/2026-03-15-1633.md | 10 + agents/ui-designer/sessions/sessions.json | 52 +++- cron/jobs.json | 55 ++--- cron/jobs.json.bak | 50 ++-- feishu/dedup/feishu-art.json | 7 +- feishu/dedup/feishu-worker.json | 21 +- identity/device-auth.json | 2 +- logs/commands.log | 6 + memory/ui-designer.sqlite | Bin 0 -> 69632 bytes .../__pycache__/deep_analyzer.cpython-312.pyc | Bin 75330 -> 26565 bytes skills/kb-deep-analyzer/deep_analyzer.py | 4 +- skills/kb-zhihu-metadata/__init__.py | 0 .../kb-zhihu-metadata/markdown_converter.py | 50 +++- 19 files changed, 699 insertions(+), 185 deletions(-) create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1018.md create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1021.md create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1501.md create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1626.md create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1632.md create mode 100644 agents/knowledge-base/workspace/memory/2026-03-15-1633.md create mode 100644 memory/ui-designer.sqlite create mode 100644 skills/kb-zhihu-metadata/__init__.py diff --git a/agents/haonan/sessions/sessions.json b/agents/haonan/sessions/sessions.json index 39837d5..fdef5fb 100644 --- a/agents/haonan/sessions/sessions.json +++ b/agents/haonan/sessions/sessions.json @@ -727,8 +727,8 @@ "memoryFlushCompactionCount": 0 }, "agent:haonan:cron:41396aeb-6e3a-47b2-9bd3-9156a348c1dc": { - "sessionId": "7c1a6bfd-b5b6-4ac5-98f3-6a73aec18a8f", - "updatedAt": 1773511200009, + "sessionId": "a42c9fa0-04d2-41a8-ae29-fedfa8c1bdda", + "updatedAt": 1773597600006, "systemSent": true, "model": "glm-5", "contextTokens": 200000, @@ -769,11 +769,11 @@ "version": 0 }, "modelProvider": "zhipu", - "inputTokens": 4500, - "outputTokens": 194, - "totalTokens": 16577, + "inputTokens": 11356, + "outputTokens": 531, + "totalTokens": 17361, "totalTokensFresh": true, - "cacheRead": 28544, + "cacheRead": 90112, "cacheWrite": 0 }, "agent:haonan:cron:f03b184f-5f1d-4093-ae1b-fc9fe0b59eef": { @@ -873,8 +873,8 @@ "cacheWrite": 0 }, "agent:haonan:cron:aa4d2de9-79be-4262-83ee-af8824793bfc": { - "sessionId": "b5ab88d0-f6d3-4b73-8d96-e6a58f5e85e4", - "updatedAt": 1773511800007, + "sessionId": "69fcc73b-3185-4ad9-aacd-e44989b770d9", + "updatedAt": 1773598200007, "systemSent": true, "label": "Cron: openclaw-git-sync", "skillsSnapshot": { @@ -922,113 +922,6 @@ "cacheRead": 49408, "cacheWrite": 0 }, - "agent:haonan:cron:f03b184f-5f1d-4093-ae1b-fc9fe0b59eef:run:39ee16c0-380a-41e7-ad85-f88e2312cc38": { - "sessionId": "39ee16c0-380a-41e7-ad85-f88e2312cc38", - "updatedAt": 1773426000007, - "systemSent": true, - "model": "glm-4.7-FlashX", - "contextTokens": 200000, - "label": "Cron: capability-evolver-daily", - "skillsSnapshot": { - "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n\n \n capability-evolver\n A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.\n ~/.openclaw/skills/capability-evolver/SKILL.md\n \n \n clawlist\n MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.\n ~/.openclaw/skills/clawlist/SKILL.md\n \n", - "skills": [ - { - "name": "capability-evolver" - }, - { - "name": "clawlist" - } - ], - "skillFilter": [ - "clawlist", - "capability-evolver", - "self-improving-agent" - ], - "resolvedSkills": [ - { - "name": "capability-evolver", - "description": "A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.", - "filePath": "/home/starmen1265/.openclaw/skills/capability-evolver/SKILL.md", - "baseDir": "/home/starmen1265/.openclaw/skills/capability-evolver", - "source": "openclaw-managed", - "disableModelInvocation": false - }, - { - "name": "clawlist", - "description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.", - "filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md", - "baseDir": "/home/starmen1265/.openclaw/skills/clawlist", - "source": "openclaw-managed", - "disableModelInvocation": false - } - ], - "version": 0 - }, - "modelProvider": "zhipu", - "inputTokens": 153698, - "outputTokens": 6902, - "totalTokens": 33385, - "deliveryContext": { - "channel": "webchat" - }, - "lastChannel": "webchat", - "channel": "webchat", - "sessionFile": "/home/starmen1265/.openclaw/agents/haonan/sessions/ccc40ca7-7876-4d82-ab84-7b790feddc19.jsonl", - "abortedLastRun": false, - "totalTokensFresh": true, - "cacheRead": 384894, - "cacheWrite": 0 - }, - "agent:haonan:cron:41396aeb-6e3a-47b2-9bd3-9156a348c1dc:run:7c1a6bfd-b5b6-4ac5-98f3-6a73aec18a8f": { - "sessionId": "7c1a6bfd-b5b6-4ac5-98f3-6a73aec18a8f", - "updatedAt": 1773511200009, - "systemSent": true, - "model": "glm-5", - "contextTokens": 200000, - "label": "Cron: backup-openclaw-json", - "skillsSnapshot": { - "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n\n \n capability-evolver\n A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.\n ~/.openclaw/skills/capability-evolver/SKILL.md\n \n \n clawlist\n MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.\n ~/.openclaw/skills/clawlist/SKILL.md\n \n", - "skills": [ - { - "name": "capability-evolver" - }, - { - "name": "clawlist" - } - ], - "skillFilter": [ - "clawlist", - "capability-evolver", - "self-improving-agent" - ], - "resolvedSkills": [ - { - "name": "capability-evolver", - "description": "A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.", - "filePath": "/home/starmen1265/.openclaw/skills/capability-evolver/SKILL.md", - "baseDir": "/home/starmen1265/.openclaw/skills/capability-evolver", - "source": "openclaw-managed", - "disableModelInvocation": false - }, - { - "name": "clawlist", - "description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.", - "filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md", - "baseDir": "/home/starmen1265/.openclaw/skills/clawlist", - "source": "openclaw-managed", - "disableModelInvocation": false - } - ], - "version": 0 - }, - "modelProvider": "zhipu", - "inputTokens": 4500, - "outputTokens": 194, - "totalTokens": 16577, - "totalTokensFresh": true, - "cacheRead": 28544, - "cacheWrite": 0 - }, "agent:haonan:cron:aa4d2de9-79be-4262-83ee-af8824793bfc:run:b5ab88d0-f6d3-4b73-8d96-e6a58f5e85e4": { "sessionId": "b5ab88d0-f6d3-4b73-8d96-e6a58f5e85e4", "updatedAt": 1773511800007, @@ -1135,5 +1028,105 @@ "totalTokensFresh": true, "cacheRead": 384894, "cacheWrite": 0 + }, + "agent:haonan:cron:41396aeb-6e3a-47b2-9bd3-9156a348c1dc:run:a42c9fa0-04d2-41a8-ae29-fedfa8c1bdda": { + "sessionId": "a42c9fa0-04d2-41a8-ae29-fedfa8c1bdda", + "updatedAt": 1773597600006, + "systemSent": true, + "model": "glm-5", + "contextTokens": 200000, + "label": "Cron: backup-openclaw-json", + "skillsSnapshot": { + "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n\n \n capability-evolver\n A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.\n ~/.openclaw/skills/capability-evolver/SKILL.md\n \n \n clawlist\n MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.\n ~/.openclaw/skills/clawlist/SKILL.md\n \n", + "skills": [ + { + "name": "capability-evolver" + }, + { + "name": "clawlist" + } + ], + "skillFilter": [ + "clawlist", + "capability-evolver", + "self-improving-agent" + ], + "resolvedSkills": [ + { + "name": "capability-evolver", + "description": "A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.", + "filePath": "/home/starmen1265/.openclaw/skills/capability-evolver/SKILL.md", + "baseDir": "/home/starmen1265/.openclaw/skills/capability-evolver", + "source": "openclaw-managed", + "disableModelInvocation": false + }, + { + "name": "clawlist", + "description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.", + "filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md", + "baseDir": "/home/starmen1265/.openclaw/skills/clawlist", + "source": "openclaw-managed", + "disableModelInvocation": false + } + ], + "version": 0 + }, + "modelProvider": "zhipu", + "inputTokens": 11356, + "outputTokens": 531, + "totalTokens": 17361, + "totalTokensFresh": true, + "cacheRead": 90112, + "cacheWrite": 0 + }, + "agent:haonan:cron:aa4d2de9-79be-4262-83ee-af8824793bfc:run:69fcc73b-3185-4ad9-aacd-e44989b770d9": { + "sessionId": "69fcc73b-3185-4ad9-aacd-e44989b770d9", + "updatedAt": 1773598200007, + "systemSent": true, + "label": "Cron: openclaw-git-sync", + "skillsSnapshot": { + "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n\n \n capability-evolver\n A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.\n ~/.openclaw/skills/capability-evolver/SKILL.md\n \n \n clawlist\n MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.\n ~/.openclaw/skills/clawlist/SKILL.md\n \n", + "skills": [ + { + "name": "capability-evolver" + }, + { + "name": "clawlist" + } + ], + "skillFilter": [ + "clawlist", + "capability-evolver", + "self-improving-agent" + ], + "resolvedSkills": [ + { + "name": "capability-evolver", + "description": "A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.", + "filePath": "/home/starmen1265/.openclaw/skills/capability-evolver/SKILL.md", + "baseDir": "/home/starmen1265/.openclaw/skills/capability-evolver", + "source": "openclaw-managed", + "disableModelInvocation": false + }, + { + "name": "clawlist", + "description": "MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.", + "filePath": "/home/starmen1265/.openclaw/skills/clawlist/SKILL.md", + "baseDir": "/home/starmen1265/.openclaw/skills/clawlist", + "source": "openclaw-managed", + "disableModelInvocation": false + } + ], + "version": 0 + }, + "modelProvider": "zhipu", + "model": "glm-5", + "contextTokens": 200000, + "inputTokens": 642, + "outputTokens": 302, + "totalTokens": 16931, + "totalTokensFresh": true, + "cacheRead": 49408, + "cacheWrite": 0 } } \ No newline at end of file diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1018.md b/agents/knowledge-base/workspace/memory/2026-03-15-1018.md new file mode 100644 index 0000000..69900b2 --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1018.md @@ -0,0 +1,63 @@ +# Session: 2026-03-15 10:18:37 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: ecc69d54-40ef-4c33-a026-e8878c0d4108 +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +assistant: 📚 蒋先生,您好。我是达康书记,您的私人秘书。 + +请问今天有什么需要我协助处理的?无论是工作安排、知识库管理,还是其他事务,请随时吩咐。 +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b546d112090acc3d096e37b38dc9", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 02:13 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b546d112090acc3d096e37b38dc9] +张青: 在吗? +assistant: 在的,蒋先生。请问有什么需要我协助的? +assistant: **每日回顾整理完成** 📋 + +- **执行时间**:2026-03-15 02:30:05 +- **处理日期**:2026-03-14 +- **结果**:没有已完成的任务,跳过处理 + +脚本正常执行完毕,工作区无需整理。 +assistant: **日历同步完成** + +| 步骤 | 状态 | +|------|------| +| 从 NAS 同步工作区 | ✅ 成功 | +| 解析周期性提醒 | 0 个 | +| 解析单次提醒 | 0 个 | +| CalDAV 日历连接 | ✅ 成功 (24 个事件) | +| 同步到 NAS | ✅ 成功 | + +当前无新增提醒需要同步到日历,CalDAV 日历中共有 24 个事件。 +assistant: **AI 对话记录整理完成** + +| 项目 | 详情 | +|------|------| +| 处理日期 | 2026-03-14 | +| 发现代理 | dev-assist, haonan, knowledge-base, main, thinker, ui-designer | +| 主要对话 | knowledge-base (12条消息) | +| 话题标签 | AI/LLM、OpenClaw、iOS/Apple、任务规划、定时任务 | + +所有代理记录已更新汇总,并同步推送到 NAS。 diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1021.md b/agents/knowledge-base/workspace/memory/2026-03-15-1021.md new file mode 100644 index 0000000..4084cf8 --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1021.md @@ -0,0 +1,39 @@ +# Session: 2026-03-15 10:21:21 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: e1a3da80-07d4-470e-b177-16528d42a6e0 +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +assistant: 📚 蒋先生,达康书记为您效劳。 + +新的一天开始了,今天有什么需要我帮您处理的吗? +user: [Queued messages while agent was busy] + +--- +Queued #1 +Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b545c365b94a0c44e709df0f5422", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 18:18 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b545c365b94a0c44e709df0f5422] +张青: 【2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 | 【阿周的Eureka】-哔哩哔哩】 https://b23.tv/NGR0Ul5 添加到知识库 +assistant: 收到,蒋先生。我来处理这个B站视频,添加到知识库。 diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1501.md b/agents/knowledge-base/workspace/memory/2026-03-15-1501.md new file mode 100644 index 0000000..ca4ba32 --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1501.md @@ -0,0 +1,88 @@ +# Session: 2026-03-15 15:01:30 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: 66c8ed24-257c-4c62-ad84-c0912acb2c47 +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +assistant: 收到,蒋先生。我来处理这个B站视频,添加到知识库。 +assistant: 📚 蒋先生,新的一天开始了。作为您的私人秘书,我已准备好协助您处理工作和生活中的各项事务。请问今天有什么需要我帮助的? +user: Note: The previous agent run was aborted by the user. Resume carefully or ask for clarification. + +Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b545cca14e8a4c4dcc592a9c425d", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 18:22 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b545cca14e8a4c4dcc592a9c425d] +张青: 【2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 | 【阿周的Eureka】-哔哩哔哩】 https://b23.tv/NGR0Ul5 添加到知识库 +assistant: 好的,蒋先生。我来将这个B站视频添加到知识库。 +assistant: 已安排代理处理深度分析任务,正在生成分析报告... +assistant: ✅ 深度分析完成!正在归档到知识库... +assistant: ✅ **完成!** + +**标题:** 2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 +**作者:** 阿周的Eureka +**时长:** 7:16 + +**处理结果:** +- 解析: ✅ B站视频 BV16cNMzpExh +- 元数据: ✅ 已提取 +- 内容: ✅ 已获取字幕 +- 深度分析: ✅ 完成 +- 归档: ✅ ~/work/zq/30.资源/AI分析/2026-03-15/ + +**摘要:** +本视频对2026年2-3月宏观经济数据进行复盘,结合政府工作报告解读全年政策基调。主要涵盖:物价系统温和回暖、社融创新高、PMI走势、财政货币政策方向,以及对房地产和基建投资的分析推演。 +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b545c9fd988a4b4bcc03ec7b3368", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 18:42 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b545c9fd988a4b4bcc03ec7b3368] +张青: https://www.zhihu.com/question/1936375725931361485/answer/2003232153480226496?share_code=P3Sg6A8B8rNK&utm_psn=2016585020039517457 添加到知识库 +assistant: 已安排代理处理深度分析任务... +assistant: ✅ **完成!** + +**标题:** 怎么成为一个 AI Agent 工程师? +**平台:** 知乎问答 + +**处理结果:** +- 解析: ✅ 知乎问答 +- 内容获取: ✅ 已提取 +- 深度分析: ✅ 完成 +- 归档: ✅ ~/work/zq/30.资源/AI分析/2026-03-15/ + +**摘要:** +文章分享了从机械专业转行成为 AI Agent 工程师的实战经验。核心路径:1) 掌握大模型 API 调用与提示词控制;2) 学会让模型调用工具(检索、函数执行);3) 解决工程化问题(上下文管理、稳定性);4) 用具体项目成果量化简历能力。 diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1626.md b/agents/knowledge-base/workspace/memory/2026-03-15-1626.md new file mode 100644 index 0000000..2337abd --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1626.md @@ -0,0 +1,147 @@ +# Session: 2026-03-15 16:26:17 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: 843cc739-7402-40f0-81ed-015cd4a8848d +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +assistant: [[reply_to_current]] 蒋先生您好,我是达康书记。今天有什么需要我协助的吗?📚 +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b5458d055dca4c4dd20469577549", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 23:02 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b5458d055dca4c4dd20469577549] +张青: 【2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 | 【阿周的Eureka】-哔哩哔哩】 https://b23.tv/NGR0Ul5 添加到知识库 +assistant: 已安排代理处理知识库添加任务。 +assistant: ✅ 已安排代理处理【2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读】的视频链接。 + +代理正在执行: +- 环境变量检查 +- 链接解析和元数据提取 +- 内容下载 +- AI深度分析 +- 归档到知识库 + +完成后会自动汇报结果。📚 +assistant: ✅ Subagent knowledge-base finished + +--- + +## ✅ 任务完成 + +### 处理结果 + +| 项目 | 内容 | +|------|------| +| **原始链接** | https://b23.tv/NGR0Ul5 | +| **解析后链接** | https://www.bilibili.com/video/BV16cNMzpExh | +| **标题** | 2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 | +| **作者** | 阿周的Eureka | +| **时长** | 07:16 | + +### 执行步骤 + +1. ✅ 环境变量检查通过 +2. ✅ URL 解析(短链展开) +3. ✅ 内容下载(音频、字幕已有) +4. ✅ ASR(字幕已存在,跳过) +5. ✅ **深度分析**(AI 生成分析报告) +6. ✅ 归档到知识库 +7. ✅ 同步到 NAS + +### 最终文件路径 + +``` +~/work/zq/30.资源/AI分析/2026-03-15/bilibili_BV16cNMzpExh.md +``` + +### 分析报告统计 + +- 摘要长度:319 字 +- 主题数量:10 个 +- 关键见解:4 条 +- 标签数量:5 个 +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b54588d4de4a0c14df6ea4b56be0", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Sun 2026-03-15 23:11 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b54588d4de4a0c14df6ea4b56be0] +张青: https://www.zhihu.com/question/1936375725931361485/answer/2003232153480226496?share_code=P3Sg6A8B8rNK&utm_psn=2016585020039517457 添加到知识库 +assistant: 已安排代理处理知识库添加任务。 +assistant: ✅ 已安排代理处理知乎问答链接。 + +代理正在执行下载和深度分析,完成后会自动汇报结果。📚 +assistant: ✅ Subagent knowledge-base finished + +--- + +## ✅ 任务完成! + +**知识库添加任务执行成功** + +### 处理结果 + +| 项目 | 状态 | +|------|------| +| 环境变量检查 | ✅ 通过 | +| URL 解析 | ✅ 知乎回答 | +| 内容下载 | ✅ 成功 | +| ASR 处理 | ⏭️ 跳过(文本内容) | +| 深度分析 | ✅ 完成(耗时 170 秒) | +| 归档 | ✅ 完成 | + +### 最终文件路径 + +``` +~/work/zq/30.资源/AI分析/2026-03-15/zhihu_2003232153480226496_ai_agent_engineer.md +``` + +### 内容摘要 + +**标题**: AI Agent工程师转型指南:从理论焦虑到实战高薪的路径拆解 + +**核心观点**: +- 当前的就业窗口期更看重"应用落地"能力而非"模型训练"能力 +- 转型路径四步:API调用 → 工具使用 → 工程化 → 简历优化 +- 强调"动手做"优于"死磕理论"的实操哲学 + +### 过程中修复的问题 + +1. **环境变量配置**: 添加 `KB_ZHIHU_COOKIE` 环境变量 +2. **模块导入**: 创建 `kb_zhihu_metadata` 和 `kb_deep_analyzer` 符号链接 +3. **Playwright 异步问题**: 修改 ZhihuAdapter 使用 `asyncio.to_thread()` 运行同步代码 +4. **知乎回答 URL 构建**: 修改 pipeline 传递完整 `source_url` 给下载处理器 +5. **ASR 跳过逻辑**: 文本内容类型自动跳过 ASR 步骤 diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1632.md b/agents/knowledge-base/workspace/memory/2026-03-15-1632.md new file mode 100644 index 0000000..cb8a850 --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1632.md @@ -0,0 +1,67 @@ +# Session: 2026-03-15 16:32:14 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: 505c65bb-e683-4823-b725-2dbf21e91a4d +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +assistant: [[reply_to_current]] 📚 达康书记为您服务,蒋先生。深夜时分,有什么我可以协助您处理的吗?无论是工作区的整理、知识库维护,还是其他事务,我都在。 +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b545992d568a0c3511684eae15a5", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Mon 2026-03-16 00:26 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b545992d568a0c3511684eae15a5] +张青: https://www.zhihu.com/question/1936375725931361485/answer/2003232153480226496?share_code=P3Sg6A8B8rNK&utm_psn=2016585020039517457 添加到知识库 +assistant: ✅ 已添加到知识库 + +**标题**:怎么成为一个 AI Agent 工程师? +**作者**:啦啦啦啦 +**来源**:知乎回答 + +**内容摘要**:作者分享了从机械专业转行成为 AI Agent 工程师并获得 30k 高薪的经验,提出了四步学习路线: +1. 掌握模型调用与提示词控制 +2. 让模型学会使用工具(RAG、代码执行) +3. 解决工程化难题,将 Demo 转化为稳定系统 +4. 撰写能体现商业价值的简历 + +**归档位置**:`~/work/zq/30.资源/AI分析/2026-03-16/zhihu_2003232153480226496.md` +user: Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b5459a51f60a4c11dbfc6068d690", + "sender_id": "ou_9351c287f42069fa30366ac641d24df7", + "sender": "张青", + "timestamp": "Mon 2026-03-16 00:30 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "张青 (ou_9351c287f42069fa30366ac641d24df7)", + "id": "ou_9351c287f42069fa30366ac641d24df7", + "name": "张青" +} +``` + +[message_id: om_x100b5459a51f60a4c11dbfc6068d690] +张青: 【2-3月宏观经济运行状态复盘与推演 + 2026年政府工作报告解读 | 【阿周的Eureka】-哔哩哔哩】 https://b23.tv/NGR0Ul5 添加到知识库 +assistant: 正在处理中... diff --git a/agents/knowledge-base/workspace/memory/2026-03-15-1633.md b/agents/knowledge-base/workspace/memory/2026-03-15-1633.md new file mode 100644 index 0000000..3bad6ef --- /dev/null +++ b/agents/knowledge-base/workspace/memory/2026-03-15-1633.md @@ -0,0 +1,10 @@ +# Session: 2026-03-15 16:33:06 UTC + +- **Session Key**: agent:knowledge-base:main +- **Session ID**: 65909187-7f10-4a23-8baa-6b66f752859e +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: zhipu/glm-5 +user: A new session was started via /new or /reset. Execute your Session Startup sequence now - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. diff --git a/agents/ui-designer/sessions/sessions.json b/agents/ui-designer/sessions/sessions.json index ce79b9e..a63ba6f 100644 --- a/agents/ui-designer/sessions/sessions.json +++ b/agents/ui-designer/sessions/sessions.json @@ -1,7 +1,7 @@ { "agent:ui-designer:main": { - "sessionId": "ff92b555-b242-4e52-a7da-9c8f82ca1c8a", - "updatedAt": 1773508884420, + "sessionId": "fe685776-cc8c-489c-b409-e461e3d3cbfa", + "updatedAt": 1773564045652, "systemSent": true, "abortedLastRun": false, "chatType": "direct", @@ -22,7 +22,7 @@ "to": "user:ou_9847ce84b960736c14554730b41e4957", "accountId": "feishu-art" }, - "sessionFile": "/home/starmen1265/.openclaw/agents/ui-designer/sessions/ff92b555-b242-4e52-a7da-9c8f82ca1c8a.jsonl", + "sessionFile": "/home/starmen1265/.openclaw/agents/ui-designer/sessions/fe685776-cc8c-489c-b409-e461e3d3cbfa.jsonl", "compactionCount": 0, "skillsSnapshot": { "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n\n \n capability-evolver\n A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.\n ~/.openclaw/skills/capability-evolver/SKILL.md\n \n", @@ -51,8 +51,8 @@ "model": "glm-5", "systemPromptReport": { "source": "run", - "generatedAt": 1773508877788, - "sessionId": "ff92b555-b242-4e52-a7da-9c8f82ca1c8a", + "generatedAt": 1773564010472, + "sessionId": "fe685776-cc8c-489c-b409-e461e3d3cbfa", "sessionKey": "agent:ui-designer:main", "provider": "zhipu", "model": "glm-5", @@ -64,8 +64,8 @@ "sandboxed": false }, "systemPrompt": { - "chars": 19307, - "projectContextChars": 6822, + "chars": 22552, + "projectContextChars": 10067, "nonProjectContextChars": 12485 }, "injectedWorkspaceFiles": [ @@ -139,6 +139,36 @@ "injectedChars": 616, "truncated": false }, + { + "path": "SELF_IMPROVEMENT_REMINDER.md", + "rawChars": 616, + "injectedChars": 616, + "truncated": false + }, + { + "path": "SELF_IMPROVEMENT_REMINDER.md", + "rawChars": 616, + "injectedChars": 616, + "truncated": false + }, + { + "path": "SELF_IMPROVEMENT_REMINDER.md", + "rawChars": 616, + "injectedChars": 616, + "truncated": false + }, + { + "path": "SELF_IMPROVEMENT_REMINDER.md", + "rawChars": 616, + "injectedChars": 616, + "truncated": false + }, + { + "path": "SELF_IMPROVEMENT_REMINDER.md", + "rawChars": 616, + "injectedChars": 616, + "truncated": false + }, { "path": "SELF_IMPROVEMENT_REMINDER.md", "rawChars": 616, @@ -366,13 +396,13 @@ ] } }, - "cacheRead": 14400, + "cacheRead": 15232, "cacheWrite": 0, "totalTokensFresh": true, "contextTokens": 200000, - "inputTokens": 1169, - "outputTokens": 135, - "totalTokens": 15569 + "inputTokens": 13122, + "outputTokens": 1320, + "totalTokens": 28354 }, "agent:ui-designer:cron:78b64c2f-7f91-47ff-9250-d13f546eb21f": { "sessionId": "03e44b46-c707-4a9f-bf3d-1818aafdcde2", diff --git a/cron/jobs.json b/cron/jobs.json index b8e502f..f9b31f5 100644 --- a/cron/jobs.json +++ b/cron/jobs.json @@ -7,7 +7,7 @@ "name": "backup-openclaw-json", "enabled": true, "createdAtMs": 1772261581796, - "updatedAtMs": 1773511209521, + "updatedAtMs": 1773597621815, "schedule": { "kind": "cron", "expr": "0 2 * * *", @@ -23,10 +23,10 @@ "mode": "announce" }, "state": { - "nextRunAtMs": 1773597600000, - "lastRunAtMs": 1773511200006, + "nextRunAtMs": 1773684000000, + "lastRunAtMs": 1773597600004, "lastStatus": "ok", - "lastDurationMs": 9515, + "lastDurationMs": 21811, "consecutiveErrors": 0, "lastRunStatus": "ok", "lastDelivered": true, @@ -59,7 +59,8 @@ "consecutiveErrors": 0, "lastRunStatus": "ok", "lastDeliveryStatus": "delivered", - "lastDelivered": true + "lastDelivered": true, + "runningAtMs": 1773598200004 }, "delivery": { "mode": "announce" @@ -71,7 +72,7 @@ "name": "capability-evolver-daily", "enabled": true, "createdAtMs": 1772550743528, - "updatedAtMs": 1773426600014, + "updatedAtMs": 1773513000030, "schedule": { "kind": "cron", "expr": "20 2 * * *", @@ -92,14 +93,14 @@ "to": "feishu-pm" }, "state": { - "nextRunAtMs": 1773512400000, - "lastRunAtMs": 1773426000004, + "nextRunAtMs": 1773598800000, + "lastRunAtMs": 1773512400004, "lastStatus": "error", - "lastDurationMs": 600010, - "consecutiveErrors": 1, + "lastDurationMs": 600026, + "consecutiveErrors": 2, "lastRunStatus": "error", "lastDeliveryStatus": "unknown", - "runningAtMs": 1773512400002 + "lastError": "cron: job execution timed out" } }, { @@ -109,7 +110,7 @@ "description": "每天凌晨2:30整理昨天的已完成任务到每日回顾", "enabled": true, "createdAtMs": 1741484880000, - "updatedAtMs": 1773426622389, + "updatedAtMs": 1773513010858, "schedule": { "kind": "cron", "expr": "30 2 * * *", @@ -127,11 +128,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773513000000, - "lastRunAtMs": 1773426602034, + "nextRunAtMs": 1773599400000, + "lastRunAtMs": 1773513002054, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 20355, + "lastDurationMs": 8804, "lastDelivered": true, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0 @@ -143,7 +144,7 @@ "name": "zq_workspace_sync", "enabled": true, "createdAtMs": 1772551807455, - "updatedAtMs": 1773427200007, + "updatedAtMs": 1773513600005, "schedule": { "expr": "40 2 * * *", "kind": "cron", @@ -156,10 +157,10 @@ "text": "执行 zq 工作区同步:bash ~/.openclaw/cron/scripts/zq_workspace_sync.sh" }, "state": { - "nextRunAtMs": 1773513600000, - "lastRunAtMs": 1773427200006, + "nextRunAtMs": 1773600000000, + "lastRunAtMs": 1773513600005, "lastStatus": "skipped", - "lastDurationMs": 1, + "lastDurationMs": 0, "consecutiveErrors": 0, "lastRunStatus": "skipped", "lastDeliveryStatus": "not-requested", @@ -173,7 +174,7 @@ "description": "每天早上8点整理与各个 AI 代理的对话记录", "enabled": true, "createdAtMs": 1772776369645, - "updatedAtMs": 1773446431755, + "updatedAtMs": 1773532816520, "schedule": { "kind": "cron", "expr": "0 8 * * *", @@ -191,11 +192,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773532800000, - "lastRunAtMs": 1773446400004, + "nextRunAtMs": 1773619200000, + "lastRunAtMs": 1773532800006, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 31751, + "lastDurationMs": 16514, "lastDelivered": true, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0 @@ -208,7 +209,7 @@ "description": "每天7点同步提醒到CalDAV日历", "enabled": true, "createdAtMs": 1772791528528, - "updatedAtMs": 1773442830136, + "updatedAtMs": 1773529221353, "schedule": { "kind": "cron", "expr": "0 7 * * *", @@ -226,11 +227,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773529200000, - "lastRunAtMs": 1773442800005, + "nextRunAtMs": 1773615600000, + "lastRunAtMs": 1773529200004, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 30131, + "lastDurationMs": 21349, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0, "lastDelivered": true diff --git a/cron/jobs.json.bak b/cron/jobs.json.bak index 184495c..4d86071 100644 --- a/cron/jobs.json.bak +++ b/cron/jobs.json.bak @@ -7,7 +7,7 @@ "name": "backup-openclaw-json", "enabled": true, "createdAtMs": 1772261581796, - "updatedAtMs": 1773511209521, + "updatedAtMs": 1773597621815, "schedule": { "kind": "cron", "expr": "0 2 * * *", @@ -23,10 +23,10 @@ "mode": "announce" }, "state": { - "nextRunAtMs": 1773597600000, - "lastRunAtMs": 1773511200006, + "nextRunAtMs": 1773684000000, + "lastRunAtMs": 1773597600004, "lastStatus": "ok", - "lastDurationMs": 9515, + "lastDurationMs": 21811, "consecutiveErrors": 0, "lastRunStatus": "ok", "lastDelivered": true, @@ -71,7 +71,7 @@ "name": "capability-evolver-daily", "enabled": true, "createdAtMs": 1772550743528, - "updatedAtMs": 1773426600014, + "updatedAtMs": 1773513000030, "schedule": { "kind": "cron", "expr": "20 2 * * *", @@ -92,11 +92,11 @@ "to": "feishu-pm" }, "state": { - "nextRunAtMs": 1773512400000, - "lastRunAtMs": 1773426000004, + "nextRunAtMs": 1773598800000, + "lastRunAtMs": 1773512400004, "lastStatus": "error", - "lastDurationMs": 600010, - "consecutiveErrors": 1, + "lastDurationMs": 600026, + "consecutiveErrors": 2, "lastRunStatus": "error", "lastDeliveryStatus": "unknown", "lastError": "cron: job execution timed out" @@ -109,7 +109,7 @@ "description": "每天凌晨2:30整理昨天的已完成任务到每日回顾", "enabled": true, "createdAtMs": 1741484880000, - "updatedAtMs": 1773426622389, + "updatedAtMs": 1773513010858, "schedule": { "kind": "cron", "expr": "30 2 * * *", @@ -127,11 +127,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773513000000, - "lastRunAtMs": 1773426602034, + "nextRunAtMs": 1773599400000, + "lastRunAtMs": 1773513002054, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 20355, + "lastDurationMs": 8804, "lastDelivered": true, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0 @@ -143,7 +143,7 @@ "name": "zq_workspace_sync", "enabled": true, "createdAtMs": 1772551807455, - "updatedAtMs": 1773427200007, + "updatedAtMs": 1773513600005, "schedule": { "expr": "40 2 * * *", "kind": "cron", @@ -156,10 +156,10 @@ "text": "执行 zq 工作区同步:bash ~/.openclaw/cron/scripts/zq_workspace_sync.sh" }, "state": { - "nextRunAtMs": 1773513600000, - "lastRunAtMs": 1773427200006, + "nextRunAtMs": 1773600000000, + "lastRunAtMs": 1773513600005, "lastStatus": "skipped", - "lastDurationMs": 1, + "lastDurationMs": 0, "consecutiveErrors": 0, "lastRunStatus": "skipped", "lastDeliveryStatus": "not-requested", @@ -173,7 +173,7 @@ "description": "每天早上8点整理与各个 AI 代理的对话记录", "enabled": true, "createdAtMs": 1772776369645, - "updatedAtMs": 1773446431755, + "updatedAtMs": 1773532816520, "schedule": { "kind": "cron", "expr": "0 8 * * *", @@ -191,11 +191,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773532800000, - "lastRunAtMs": 1773446400004, + "nextRunAtMs": 1773619200000, + "lastRunAtMs": 1773532800006, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 31751, + "lastDurationMs": 16514, "lastDelivered": true, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0 @@ -208,7 +208,7 @@ "description": "每天7点同步提醒到CalDAV日历", "enabled": true, "createdAtMs": 1772791528528, - "updatedAtMs": 1773442830136, + "updatedAtMs": 1773529221353, "schedule": { "kind": "cron", "expr": "0 7 * * *", @@ -226,11 +226,11 @@ "channel": "last" }, "state": { - "nextRunAtMs": 1773529200000, - "lastRunAtMs": 1773442800005, + "nextRunAtMs": 1773615600000, + "lastRunAtMs": 1773529200004, "lastRunStatus": "ok", "lastStatus": "ok", - "lastDurationMs": 30131, + "lastDurationMs": 21349, "lastDeliveryStatus": "delivered", "consecutiveErrors": 0, "lastDelivered": true diff --git a/feishu/dedup/feishu-art.json b/feishu/dedup/feishu-art.json index 69419d7..a520fc5 100644 --- a/feishu/dedup/feishu-art.json +++ b/feishu/dedup/feishu-art.json @@ -1,4 +1,9 @@ { "om_x100b546dc09400acb4a5d0af66ca3c9": 1773508838286, - "om_x100b546dde1c34a4b49a888912755ac": 1773508877713 + "om_x100b546dde1c34a4b49a888912755ac": 1773508877713, + "om_x100b545236d06ca0b100846cfa37e9d": 1773561730503, + "om_x100b5452d99e18a4b32ab9bdc02463e": 1773562229918, + "om_x100b5452972138a8b213d14996ffdbd": 1773563295479, + "om_x100b5452a60eaca0b10319a26ed640f": 1773563532727, + "om_x100b5453485b4ca0b37c3413c41bba3": 1773564010102 } diff --git a/feishu/dedup/feishu-worker.json b/feishu/dedup/feishu-worker.json index 7f2e9e1..b4ac2e5 100644 --- a/feishu/dedup/feishu-worker.json +++ b/feishu/dedup/feishu-worker.json @@ -9,5 +9,24 @@ "om_x100b546df49c10a0b106d597fd348a3": 1773509541678, "om_x100b546d16e6e4a0c42bef93bca2224": 1773511894148, "om_x100b546d144668a0c3583fa56a2597d": 1773511924836, - "om_x100b546d112090acc3d096e37b38dc9": 1773512010988 + "om_x100b546d112090acc3d096e37b38dc9": 1773512010988, + "om_x100b545c390898a4c379f319d607993": 1773569917108, + "om_x100b545c365b94a0c44e709df0f5422": 1773569929804, + "om_x100b545cce0a04a0c4a26c0203c2b13": 1773570060994, + "om_x100b545ccf6e6ca0c4571d12c405d8f": 1773570074717, + "om_x100b545cccde84acc4d8fa9b0f0c852": 1773570081700, + "om_x100b545ccab08ca0c12b5e6c715a1aa": 1773570120321, + "om_x100b545cca14e8a4c4dcc592a9c425d": 1773570126138, + "om_x100b545c9fd988a4b4bcc03ec7b3368": 1773571345806, + "om_x100b5458d25a5ca0c2cf04550bf07cc": 1773586890090, + "om_x100b5458d055dca4c4dd20469577549": 1773586922136, + "om_x100b54588d4de4a0c14df6ea4b56be0": 1773587512581, + "om_x100b54599445b4a0c4def897c8a2700": 1773591976996, + "om_x100b545992d568a0c3511684eae15a5": 1773592002087, + "om_x100b5459a51f60a4c11dbfc6068d690": 1773592253777, + "om_x100b5459be53f0a0c42f8fe338d2510": 1773592330439, + "om_x100b5459be2d7ca4c32ee845e40c605": 1773592334472, + "om_x100b5459bd4168a0c36ca5cf1588b13": 1773592377222, + "om_x100b5459bae828acc347e53e7e5de8d": 1773592386779, + "om_x100b5459bb6404a0c4ade83756a546a": 1773592411047 } diff --git a/identity/device-auth.json b/identity/device-auth.json index cbf6aa0..91d1e91 100644 --- a/identity/device-auth.json +++ b/identity/device-auth.json @@ -10,7 +10,7 @@ "operator.approvals", "operator.pairing" ], - "updatedAtMs": 1773511814965 + "updatedAtMs": 1773597621245 } } } diff --git a/logs/commands.log b/logs/commands.log index ea606b8..7395a47 100644 --- a/logs/commands.log +++ b/logs/commands.log @@ -39,3 +39,9 @@ {"timestamp":"2026-03-14T17:06:39.062Z","action":"new","sessionKey":"agent:haonan:main","senderId":"ou_be83febac9ee2afaa343c642bc697c48","source":"feishu"} {"timestamp":"2026-03-14T18:11:34.528Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} {"timestamp":"2026-03-14T18:12:04.888Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T10:18:37.473Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T10:21:21.748Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T15:01:30.452Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T16:26:17.361Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T16:32:14.537Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} +{"timestamp":"2026-03-15T16:33:06.821Z","action":"new","sessionKey":"agent:knowledge-base:main","senderId":"ou_9351c287f42069fa30366ac641d24df7","source":"feishu"} diff --git a/memory/ui-designer.sqlite b/memory/ui-designer.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..1154c98a49a1bc0dd13f8a8b7f931dcf263d8107 GIT binary patch literal 69632 zcmeI)T~FIq7{GD6&;-IuinPjNyE)AbL}Y^`q%ED=j*hHFrDUaHZBC}s$O_O%J53`RkXb009L4D}iTo5o38?uUidM zzP8NQrRu?PvC|T zM`h>0Z+R_jlWvoq4Z4d-J03Nbm-Y6HQ?As4K9%;IR;g+?_N@J&$L9s{VB^L02U~fu zaG`!-@lbrev-xCw=cRa@f0+^|N%4HM_^7a36g!3In;Wg!sF6x+qGc+;V*X)%r+??IH{!uo;X$$;neq2}YjCeBOh-1H{y5x{nb5rktAy{h zx{?yrw3;(&&Z>D;%{evSOt$susF6(S?Yn~=QK|3ggj$*o?SQIWSZv9C%S;JJHtQ*I zwBN8(y`lG3CkHZ6pNbkwOT#iycFH|{FxBEzXeZp-aDqzBt{w*Vk7H5e#*K-y>Ojcn zy9##l#pX_NcYRCvW9z(H>^|Gvekjx+%q_-*3i-8@Qm-oMyW8GzlizTcz2V(g;vX{o zt?ITZYyCwnr`&W(HLD@}%VonHD2*lCM7<<_`^rNdXgRPr(U-)5O5u{a(^1ntu}s+% z#r%t+*e4`M2x3Py5?oJ^>t01pOnhSj_oa%x?K&@oE|8c zJp1Zu)R>>wzgzAZ=>8~<^ku*=>%yyX?78;zx)ZB6q=%vhL%Xj|Y~(*%-`y&Tg}SWU z&C`X>W_kvA=VNj(zumDO)*w8GmkbT}P#vDxF5d9!OOov8YAF&i?$3wiD){V3`>)Y< zVJvDGhJNkho9EwPV?zGQUF$S0cv8*TXvG zZoiavpU2cMR}=0pSnf%^9?xm&!Gr(;2q1s}0tg_000IagfB*u$0_{iocyz|13GX^g;!Z+cC;iZF)J_wrMCVeMDs9*e*;DdZo~pu1W^Z+6EtAQbX1Zdg z*Q(N#GMmk2OqpA~wR*dp+skIMw{GUl)v8&oR4SRZ%vvtJwpQIUWjd2n8}zS)v=Vn- zCH!tBzDy;&>n=t6P&QP>>dHz`QaF*#TKOn(=l06mn2Jk}|E8%269NbzfB*srAbEodUy1*r#s5}MOb8%=00IagfB*sr zAbW`~81C{->rM zOb8%=00IagfB*srAbfuR@y1Q0*~0R#|0009ILKmdUe68HyB=P;cB literal 0 HcmV?d00001 diff --git a/skills/kb-deep-analyzer/__pycache__/deep_analyzer.cpython-312.pyc b/skills/kb-deep-analyzer/__pycache__/deep_analyzer.cpython-312.pyc index 4837a2ea5a323adef706afe69b8375233d9b209b..08d1b7a133f4631e12e5a8c5db525f7f7000ec5b 100644 GIT binary patch literal 26565 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 EzetYvh5!Hn diff --git a/skills/kb-deep-analyzer/deep_analyzer.py b/skills/kb-deep-analyzer/deep_analyzer.py index 1c1342b..93d4298 100644 --- a/skills/kb-deep-analyzer/deep_analyzer.py +++ b/skills/kb-deep-analyzer/deep_analyzer.py @@ -180,8 +180,8 @@ class DeepAnalyzer: # 解析结果 result = self._parse_analysis(full_analysis, text, duration, content_type) - # 文章类型:追加原文 - if content_type == "article": + # 文章/回答类型:追加原文 + if content_type in ("article", "answer", "zhuanlan"): result.original_text = text return result diff --git a/skills/kb-zhihu-metadata/__init__.py b/skills/kb-zhihu-metadata/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/skills/kb-zhihu-metadata/markdown_converter.py b/skills/kb-zhihu-metadata/markdown_converter.py index c0f912d..81faa54 100644 --- a/skills/kb-zhihu-metadata/markdown_converter.py +++ b/skills/kb-zhihu-metadata/markdown_converter.py @@ -1,7 +1,14 @@ +import re +from bs4 import BeautifulSoup from markdownify import MarkdownConverter as _MarkdownConverter class MarkdownConverter: - """HTML 转 Markdown 转换器,保留完整格式""" + """HTML 转 Markdown 转换器,保留完整格式 + + 处理知乎等平台的图片懒加载机制: + - 知乎图片的 src 属性可能是 SVG 占位符 (data:image/svg+xml;...) + - 真实图片 URL 存储在 data-actualsrc 或 data-original 属性中 + """ def __init__(self): self.converter = _MarkdownConverter( @@ -13,5 +20,44 @@ class MarkdownConverter: ) def convert(self, html: str) -> str: - """转换 HTML 为 Markdown""" + """转换 HTML 为 Markdown + + Args: + html: 输入的 HTML 字符串 + + Returns: + 转换后的 Markdown 字符串 + """ + # 预处理:处理懒加载图片 + html = self._fix_lazy_load_images(html) return self.converter.convert(html) + + def _fix_lazy_load_images(self, html: str) -> str: + """修复懒加载图片的 src 属性 + + 将 data-actualsrc 或 data-original 属性的值替换到 src 属性中, + 以便 markdownify 能够正确提取真实图片 URL。 + + Args: + html: 输入的 HTML 字符串 + + Returns: + 处理后的 HTML 字符串 + """ + soup = BeautifulSoup(html, 'html.parser') + + for img in soup.find_all('img'): + src = img.get('src', '') + + # 如果 src 不是占位符,保持原样 + if not src or not src.startswith('data:'): + continue + + # 尝试获取真实图片 URL + # 优先 data-actualsrc,其次 data-original + real_src = img.get('data-actualsrc') or img.get('data-original') + + if real_src: + img['src'] = real_src + + return str(soup)