@yoooclaw/cli 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoooclaw/cli",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "type": "module",
5
5
  "description": "yoooclaw 独立 CLI:本地守护进程接收手机通知、Relay 隧道、灯效规则评估,Agent-Native",
6
6
  "bin": {
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: yoooclaw-recording-entity-extraction
3
+ description: 从文本文件或录音转写中提取特定实体(人名、联系方式、机构、术语等)。支持自定义提取需求或通用提取,输出 sidecar JSON 文件。当用户要求"提取信息""找联系方式""有哪些人名""关键信息""从文件提取"时激活。基于录音时用 yoooclaw CLI 定位文件;yoooclaw 是 openclaw 手机录音插件的独立 CLI 形态,数据在 ~/.yoooclaw 下。
4
+ ---
5
+
6
+ # yoooclaw 实体提取(Agent-Native)
7
+
8
+ > 命令名 `yoooclaw`,短别名 `yc` 完全等价。所有命令支持 `--format json|pretty|table|ndjson`,本 Skill 取结构化对象用 `--format json`。
9
+ > 录音数据在 `~/.yoooclaw` 下,查询纯读磁盘、不需要 daemon 在跑;定位/读写文件用你自己的文件工具,不要假设目录。
10
+
11
+ ## 1. 初始化与定位
12
+
13
+ **若用户请求中包含明确文件路径**:
14
+
15
+ - 直接记录该路径,跳至 Step 3。
16
+
17
+ **若未提供文件路径**:
18
+
19
+ 不要假设录音目录。调用以下命令获取存储路径:
20
+
21
+ ```bash
22
+ yoooclaw recording storage-path --format json
23
+ # → {"ok":true,"path":"/abs/path/to/profiles/<profile>/recordings"}
24
+ ```
25
+
26
+ 后续所有文件操作以返回的 `path` 为根目录:
27
+
28
+ - 转写文件:来自 `recording status` 的 `transcriptFile`,即 `<path>/<transcriptFile>`。
29
+ - 实体输出:`<path>/entity/<date>_<brief_summary>_entities.json`
30
+
31
+ ## 2. 意图解析与列表定位
32
+
33
+ > **若已在 Step 1 获得明确文件路径,跳过本节,直接进入 Step 3。**
34
+
35
+ ### 2.1 确定范围与实体类型
36
+
37
+ 从用户请求中识别以下信息:
38
+
39
+ **目标录音范围**:
40
+ - 具体 ID/名称 -> 精确匹配。
41
+ - "刚才"、"最新" -> 取最近 1 条(可直接用 `yoooclaw recording +latest --format json`)。
42
+ - "最近 N 条" -> 取最近 N 条。
43
+ - "全部" -> 全量处理。
44
+ - **若未提及**:执行 2.2 展示列表。
45
+
46
+ **实体类型**:
47
+ - 用户指定(如"手机号"、"品牌")-> 仅提取指定类型。
48
+ - **若未指定**:执行通用提取(人名、联系方式、机构/公司、产品/品牌、日期时间、专业术语)。
49
+
50
+ ### 2.2 获取列表与交互选择
51
+
52
+ ```bash
53
+ yoooclaw recording list --status transcribed --format json
54
+ ```
55
+
56
+ **过滤与排序**:
57
+ - 只保留 `status = "transcribed"` 且 `has_transcript = true` 的录音。
58
+ - 按 `created_at` 倒序。
59
+
60
+ **交互选择**:
61
+ 若范围不明确,按序号展示过滤后的列表:
62
+ `1. [名称] ([时间], [时长])`
63
+ 等待用户输入序号(支持 `1,3` 或 `1-3` 或 `all`)。
64
+
65
+ 若用户表示找不到某条录音,说明该录音可能仍在转录中,告知用户稍后再试。
66
+
67
+ ## 3. 读取文件内容
68
+
69
+ **来自录音系统(recording list 流程)**:根据选定的 `recording_id` 获取具体路径:
70
+
71
+ ```bash
72
+ yoooclaw recording status <recording_id> --format json
73
+ ```
74
+
75
+ 读取返回 `recording.transcriptFile` 对应的 `<path>/<transcriptFile>`。
76
+
77
+ 若文件不存在或读取失败,告知用户:「转写文件尚未生成,对应的音频可能正在转写中,请稍后再试。」
78
+ - 单条录音:终止处理。
79
+ - 批量处理:跳过该条,继续处理其余录音。
80
+
81
+ **来自用户指定路径**:直接读取该文件。若文件不存在,告知用户该文件未找到,对应的音频可能仍在转写中,请稍后再试。
82
+
83
+ 保留所有文本内容及时间戳标记。
84
+
85
+ ## 4. 实体提取流程 (LLM)
86
+
87
+ 使用 LLM 从转写文本中提取实体。
88
+
89
+ **提取规则**:
90
+ 1. **语义推断**:根据用户需求调整提取侧重点。
91
+ 2. **去重**:同一实体多次出现仅保留一条,`context` 记录最典型的语境。
92
+ 3. **语言一致性**:输出值应与转写文本语言一致。
93
+ 4. **语境要求**:每个实体需配有 ≤30 字的出现背景。
94
+
95
+ ## 5. 写入与反馈
96
+
97
+ ### 5.1 写入 Sidecar 文件
98
+
99
+ 用你自己的文件写入工具直接写出:
100
+
101
+ **来自录音系统**:写入 `<path>/entity/<date>_<brief_summary>_entities.json`
102
+
103
+ **来自用户指定文件**:同时写入以下两个位置:
104
+
105
+ 1. **源文件同目录**:`/path/to/<basename>_entities.json`
106
+ 2. **转录系统 entity 目录**:用 `yoooclaw recording storage-path --format json` 获取存储根路径,写入 `<storage_path>/entity/<basename>_entities.json`
107
+ - 若该命令失败或返回路径无效,则跳过此步骤,仅保留源文件同目录的副本,无需报错。
108
+ - 两份文件内容完全相同。
109
+
110
+ 包含字段:`source_file`, `extracted_at`, `user_request`, `entity_types_extracted`, `entities`。
111
+
112
+ ### 5.2 任务汇报
113
+
114
+ 告知用户处理完成,并列出所有实际写入的文件完整路径(来自用户指定文件时可能为 1 或 2 个),供用户直接查阅。若处理了多条录音,逐条列出。
115
+
116
+ ## 边界处理
117
+
118
+ - **无已转写录音**:提示用户并终止(仅适用于走 recording list 流程时)。
119
+ - **存储路径无效**:若用户未指定文件路径,告知录音功能不可用;若已指定路径则不受影响。
120
+ - **需求不明确**:默认进行全品类通用提取。
121
+ - **文件冲突**:若 sidecar 已存在,直接覆盖并在汇报中注明。
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: yoooclaw-recording-interview
3
+ description: 用 yoooclaw CLI 定位采访录音转写并整理结构化采访稿。当用户说"整理采访内容""提取核心观点""整理成问答""帮我梳理采访录音""输出采访 Q&A"等表达时激活,一律优先使用本 Skill;必须通过 yoooclaw recording 命令获得转写文件的真实存储位置,严禁假设录音目录。yoooclaw 是 openclaw 手机录音插件的独立 CLI 形态,数据在 ~/.yoooclaw 下。
4
+ ---
5
+
6
+ # yoooclaw 采访稿整理(Agent-Native)
7
+
8
+ > 命令名 `yoooclaw`,短别名 `yc` 完全等价。所有命令支持 `--format json|pretty|table|ndjson`,本 Skill 取结构化对象用 `--format json`。
9
+ > 录音数据在 `~/.yoooclaw` 下,查询纯读磁盘、不需要 daemon 在跑;定位到转写文件后用文件读取工具直接读,不要假设目录。
10
+
11
+ ## 🛠 核心执行链路 (Smart Workflow)
12
+
13
+ ### Phase 0: 目录检索
14
+
15
+ 不要假设固定目录。先执行:
16
+
17
+ ```bash
18
+ yoooclaw recording storage-path --format json
19
+ # → {"ok":true,"path":"/abs/path/to/profiles/<profile>/recordings"}
20
+ ```
21
+
22
+ 后续所有文件操作以返回的 `path` 为根目录,优先读取 `<path>/<transcriptFile>`。
23
+
24
+ ### Phase 1: 列表定位与交互选择
25
+
26
+ ```bash
27
+ yoooclaw recording list --status transcribed --format json
28
+ ```
29
+
30
+ **过滤与排序**:
31
+
32
+ - 只保留 `status = "transcribed"` 且 `has_transcript = true` 的录音。
33
+ - 按 `created_at` 倒序。
34
+
35
+ **交互选择**:
36
+
37
+ - 若没有符合条件的录音,立即回复:"当前未检测到已完成转写的采访录音。对应录音可能仍在转录中,请稍后再试。" ➡️ **[终止执行]**
38
+ - 若用户明确指定具体 ID/名称/时间,按过滤后的列表匹配;只有唯一匹配时才锁定。
39
+ - 若用户说"刚才""最新""最近一次",取排序后的第 1 条(可直接用 `yoooclaw recording +latest --format json`)。
40
+ - 若用户说"最近 N 条",取排序后的前 N 条。
41
+ - 若用户说"全部",处理过滤后的全部录音。
42
+ - 若范围不明确,按序号展示过滤后的列表:
43
+ `1. [名称] ([时间], [时长])`
44
+ 等待用户输入序号(支持 `1,3` 或 `1-3` 或 `all`)。
45
+ - 若用户表示找不到某条录音,说明该录音可能仍在转录中,告知用户稍后再试。
46
+
47
+ 锁定录音后,对每条选中的录音执行:
48
+
49
+ ```bash
50
+ yoooclaw recording status <recording_id> --format json
51
+ ```
52
+
53
+ 读取返回 `recording.transcriptFile` 对应的 `<path>/<transcriptFile>`。若 `transcriptFile` 为空、文件不存在或读取失败,告知用户:「转写文件尚未生成,对应的音频可能正在转写中,请稍后再试。」
54
+
55
+ ### Phase 2: 内容解析与信息提取
56
+
57
+ 1. **精准读取**:仅读取锁定录音的转写文件。
58
+ 2. **语义清洗**:将零散口语整理为通顺书面表达,剔除冗余口头禅、重复确认、跑题插话等噪音。
59
+ 3. **角色识别**:优先区分采访者与受访者;若存在多个发言人,结合上下文识别提问方与回答方。
60
+ 4. **问答配对**:自动识别连续提问与回答内容,按语义归并为清晰的 Q&A 对,不要机械按每一句切分。
61
+ 5. **信息提炼**:重点提取核心观点、代表性金句、话题脉络,以及受访者表达中的立场、判断、经历和案例。
62
+
63
+ ### Phase 3: 结构化输出 (Standard Format),以下列格式直接回复用户,避免写入文件
64
+
65
+ # 采访整理:[主题]
66
+
67
+ > **📌 采访概览**
68
+ > - **关联文件**:`文件名.md`
69
+ > - **识别时间**:[从文本或文件名中提取]
70
+ > - **采访对象**:[如可识别则填写]
71
+ > - **采访者**:[如可识别则填写]
72
+ > - **核心主题**:[一句话概括]
73
+
74
+ ### 核心观点
75
+ - 提炼采访中最重要的 3-5 条观点,使用完整、清晰的陈述句表达。
76
+
77
+ ### 金句摘录
78
+ - 摘取最有代表性的表达,优先保留原意与语言风格。
79
+ - 若原文过长,可适度压缩,但不得改变意思。
80
+
81
+ ### 话题脉络
82
+ 1. 按采访推进顺序梳理主要话题。
83
+ 2. 说明每个话题如何过渡到下一个话题。
84
+ 3. 若出现明显追问、补充说明或观点转折,需要标注出来。
85
+
86
+ ### Q&A
87
+ **Q1:** [整理后的问题]
88
+ **A1:** [整理后的回答]
89
+
90
+ **Q2:** [整理后的问题]
91
+ **A2:** [整理后的回答]
92
+
93
+ > 持续补充,直到覆盖采访中的主要有效问答。
94
+
95
+ ### 补充观察
96
+ - 标注采访中未展开但值得关注的线索、潜在后续追问方向,或表达中存在的模糊点。
97
+
98
+ ---
99
+
100
+ ## 🚫 行为约束
101
+
102
+ - **严禁臆造**:若转写中未明确提及采访对象、采访者、时间、背景信息,则填写"未明确提及",不得自行补全。
103
+ - **问答优先语义配对**:必须按语义整理 Q&A,不得简单按说话轮次机械拼接。
104
+ - **保留原意**:允许润色口语,但不得改变受访者的真实观点、语气倾向或事实表述。
105
+ - **主次分明**:优先保留真正有信息量的问答,寒暄、客套、重复确认可省略。
106
+ - **多文件冲突**:若用户要求"整理最近两次采访",则分别整理或按其要求合并。
107
+ - **确认优先**:除非用户明确说"最近一个",否则严禁随意挑选文件开始整理。
108
+
109
+ ## 💬 响应示例
110
+
111
+ - **场景A(模糊请求)**:"我找到了以下 3 份最近的采访转写,请问整理哪一份?"
112
+ - **场景B(指定最近)**:"好的,正在为您整理最近一份采访录音(`2026-03-31_创始人采访.md`)的内容,稍后将输出核心观点、金句、话题脉络和 Q&A。"
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: yoooclaw-recording-meeting-minutes
3
+ description: 用 yoooclaw CLI 定位会议录音转写并整理结构化会议纪要。当用户说"整理一下会议纪要""总结这次会议""会议有哪些待办""帮我整理会议纪要"等表达时激活,一律优先使用本 Skill;必须通过 yoooclaw recording 命令获得转写文件的真实存储位置,严禁使用记忆搜索或文档搜索工具,否则会造成严重遗漏。yoooclaw 是 openclaw 手机录音插件的独立 CLI 形态,数据在 ~/.yoooclaw 下。
4
+ ---
5
+
6
+ # yoooclaw 会议纪要整理(Agent-Native)
7
+
8
+ > 命令名 `yoooclaw`,短别名 `yc` 完全等价。所有命令支持 `--format json|pretty|table|ndjson`,本 Skill 取结构化对象用 `--format json`。
9
+ > 录音数据在 `~/.yoooclaw` 下,查询纯读磁盘、不需要 daemon 在跑;定位到转写文件后用文件读取工具直接读,不要假设目录。
10
+
11
+ ## 🛠 核心执行链路 (Smart Workflow)
12
+
13
+ ### Phase 0: 目录检索
14
+
15
+ 不要假设固定目录。先执行:
16
+
17
+ ```bash
18
+ yoooclaw recording storage-path --format json
19
+ # → {"ok":true,"path":"/abs/path/to/profiles/<profile>/recordings"}
20
+ ```
21
+
22
+ 后续所有文件操作以返回的 `path` 为根目录,优先读取 `<path>/<transcriptFile>`。
23
+
24
+ ### Phase 1: 列表定位与交互选择
25
+
26
+ ```bash
27
+ yoooclaw recording list --status transcribed --format json
28
+ ```
29
+
30
+ **过滤与排序**:
31
+
32
+ - 只保留 `status = "transcribed"` 且 `has_transcript = true` 的录音。
33
+ - 按 `created_at` 倒序。
34
+
35
+ **交互选择**:
36
+
37
+ - 若没有符合条件的录音,立即回复:"当前未检测到已完成转写的会议录音。对应录音可能仍在转录中,请稍后再试。" ➡️ **[终止执行]**
38
+ - 若用户明确指定具体 ID/名称/时间,按过滤后的列表匹配;只有唯一匹配时才锁定。
39
+ - 若用户说"刚才""最新""最近一次",取排序后的第 1 条(可直接用 `yoooclaw recording +latest --format json`)。
40
+ - 若用户说"最近 N 条",取排序后的前 N 条。
41
+ - 若用户说"全部",处理过滤后的全部录音。
42
+ - 若范围不明确,按序号展示过滤后的列表:
43
+ `1. [名称] ([时间], [时长])`
44
+ 等待用户输入序号(支持 `1,3` 或 `1-3` 或 `all`)。
45
+ - 若用户表示找不到某条录音,说明该录音可能仍在转录中,告知用户稍后再试。
46
+
47
+ 锁定录音后,对每条选中的录音执行:
48
+
49
+ ```bash
50
+ yoooclaw recording status <recording_id> --format json
51
+ ```
52
+
53
+ 读取返回 `recording.transcriptFile` 对应的 `<path>/<transcriptFile>`。若 `transcriptFile` 为空、文件不存在或读取失败,告知用户:「转写文件尚未生成,对应的音频可能正在转写中,请稍后再试。」
54
+
55
+ ### Phase 2: 内容解析与信息提取
56
+
57
+ 1. **精准读取**:仅读取锁定录音的转写文件。
58
+ 2. **智能重组**:将零散口语转化为专业书面语,剔除冗余(如"嗯"、"那个"、重复确认等)。
59
+ 3. **要素识别**:重点提取议题、结论、行动项(Action Items)。
60
+
61
+ ### Phase 3: 结构化输出 (Standard Format)
62
+
63
+ # 📝 会议纪要:[主题/文件名]
64
+
65
+ > **📅 会议概览**
66
+ > - **关联文件**:`文件名.md`
67
+ > - **识别时间**:[从文本或文件名中提取]
68
+ > - **参会人员**:[识别发言人角色]
69
+
70
+ ### 🎯 议题与决策
71
+ <格式化输出,突出议题、讨论内容和最终结论>
72
+
73
+ ### ✅ 待办事项 (Action Items)
74
+ | 事项 | 责任人 | 截止时间 | 状态 |
75
+ | :--- | :--- | :--- | :--- |
76
+ | 任务描述 | [姓名] | [日期/待定] | 待办 |
77
+
78
+ ### ⚠️ 风险与未决事项
79
+ - 标注会议中提及的潜在问题或未达成一致的悬而未决事项。
80
+
81
+ ---
82
+
83
+ ## 🚫 行为约束
84
+
85
+ - **严禁臆造**:若转写中未提及责任人或日期,表格对应项填入"未明确提及",不得自行推测。
86
+ - **多文件冲突**:若用户要求"处理最近两次会议",则分别整理或按其要求合并。
87
+ - **确认优先**:除非用户明确说"最近一个",否则严禁随意挑选文件开始总结。
88
+
89
+ ## 💬 响应示例
90
+
91
+ - **场景A(模糊请求)**:"我找到了以下 3 份最近的转写,请问整理哪一份?"
92
+ - **场景B(指定最近)**:"好的,正在为您整理最近一份会议录音(`2023-10-27_项目周会.md`)的纪要..."
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: yoooclaw-recording-mindmap
3
+ description: 生成 Markdown 格式的思维导图。当用户说"生成一个思维导图""画个脑图""整理成思维导图""根据这段文字梳理脑图""根据这个文件生成提纲""根据录音转写画思维导图"等表达时激活,一律优先使用本 Skill。若基于录音转写,用 yoooclaw CLI 定位文件;yoooclaw 是 openclaw 手机录音插件的独立 CLI 形态,数据在 ~/.yoooclaw 下。
4
+ ---
5
+
6
+ # yoooclaw 思维导图生成(Agent-Native)
7
+
8
+ > 命令名 `yoooclaw`,短别名 `yc` 完全等价。所有命令支持 `--format json|pretty|table|ndjson`,本 Skill 取结构化对象用 `--format json`。
9
+ > 录音数据在 `~/.yoooclaw` 下,查询纯读磁盘、不需要 daemon 在跑;定位到转写文件后用文件读取工具直接读,不要假设目录。
10
+
11
+ ## 🛠 核心执行链路 (Smart Workflow)
12
+
13
+ ### Phase 0: 输入来源判定
14
+
15
+ 在开始生成之前,**必须先判定用户要基于什么内容生成思维导图**。来源分为两类:
16
+
17
+ - **来源 A:用户已直接提供内容**
18
+ - 包括:用户在对话中粘贴的文本、用户明确指定的本地文件、用户刚上传/引用的文档内容。
19
+ - **来源 B:用户希望基于录音转写生成**
20
+ - 包括:用户明确提到"根据录音""根据会议转写""根据最近一次录音""根据通话内容"等表达。
21
+
22
+ 若用户只说"生成一个思维导图""帮我画个脑图""整理成脑图",但没有提供文本、文件,也没有明确说基于录音转写:
23
+
24
+ - **THEN** 必须立即进入引导模式。
25
+ - **STOP**:询问用户:
26
+ - "请问您想基于哪种内容生成思维导图?
27
+ - 1. 根据本地录音转写文件生成
28
+ - 2. 提供文本、文件或链接给我"
29
+ ➡️ **[强制暂停,等待用户回复,严禁自行假设内容来源]**
30
+
31
+ ### Phase 1: 决策树 (Strict Decision Tree)
32
+
33
+ **必须严格按以下顺序执行判断,不可跳过**:
34
+
35
+ **[Step 1: 用户已提供明确内容]**
36
+ - **IF** 用户已经直接提供文本内容,或明确指定了唯一文件作为输入:
37
+ - **THEN** 直接锁定该内容来源,进入 Phase 2。
38
+ - **回复示例**:"正在根据您提供的内容生成 Markdown 格式的思维导图..."
39
+
40
+ **[Step 2: 用户明确要求基于录音转写]**
41
+ - **IF** 用户明确表示要根据录音或会议转写生成思维导图:
42
+ - **THEN** 进入录音转写检索流程(Phase 1A)。
43
+
44
+ ### Phase 1A: 录音转写检索流程
45
+
46
+ 不要假设固定目录。先执行:
47
+
48
+ ```bash
49
+ yoooclaw recording storage-path --format json
50
+ # → {"ok":true,"path":"/abs/path/to/profiles/<profile>/recordings"}
51
+ ```
52
+
53
+ 后续所有文件操作以返回的 `path` 为根目录,优先读取 `<path>/<transcriptFile>`。
54
+
55
+ ```bash
56
+ yoooclaw recording list --status transcribed --format json
57
+ ```
58
+
59
+ **过滤与排序**:
60
+
61
+ - 只保留 `status = "transcribed"` 且 `has_transcript = true` 的录音。
62
+ - 按 `created_at` 倒序。
63
+
64
+ **交互选择**:
65
+
66
+ - 若没有符合条件的录音,立即回复:"当前未检测到任何已完成转写的录音。您也可以直接提供文本或文件,我可以据此生成思维导图。" ➡️ **[终止执行]**
67
+ - 若用户明确指定具体 ID/名称/时间,按过滤后的列表匹配;只有唯一匹配时才锁定。
68
+ - 若用户说"刚才""最新""最近一次",取排序后的第 1 条(可直接用 `yoooclaw recording +latest --format json`)。
69
+ - 若用户说"最近 N 条",取排序后的前 N 条。
70
+ - 若用户说"全部",处理过滤后的全部录音。
71
+ - 若范围不明确,按序号展示过滤后的列表:
72
+ `1. [名称] ([时间], [时长])`
73
+ 等待用户输入序号(支持 `1,3` 或 `1-3` 或 `all`)。
74
+ - 若用户表示找不到某条录音,说明该录音可能仍在转录中,告知用户稍后再试。
75
+
76
+ 锁定录音后,对每条选中的录音执行:
77
+
78
+ ```bash
79
+ yoooclaw recording status <recording_id> --format json
80
+ ```
81
+
82
+ 读取返回 `recording.transcriptFile` 对应的 `<path>/<transcriptFile>`。若 `transcriptFile` 为空、文件不存在或读取失败,告知用户:「转写文件尚未生成,对应的音频可能正在转写中,请稍后再试。」
83
+
84
+ ### Phase 2: 内容解析与结构抽取
85
+
86
+ 1. **精准读取**:只处理用户明确提供或已锁定的文本/文件/转写内容。
87
+ 2. **主题归并**:将分散表述归并为稳定主题,合并重复观点,清理口语噪音或冗余表达。
88
+ 3. **层级提炼**:优先提取"主题 -> 子主题 -> 要点 -> 细节/行动项"的层级关系。
89
+ 4. **结构优先**:输出的核心目标不是摘要长文,而是可继续加工的结构化骨架。
90
+ 5. **忠于原文**:仅重组与压缩,不补写未出现的结论、负责人或因果关系。
91
+ 6. **先定总标题**:输出前先提炼一个能够概括全文的总标题,作为思维导图的中心主题。
92
+
93
+ ### Phase 3: 结构化输出 (Standard Format)
94
+
95
+ # 🧠 思维导图:[内容主题]
96
+
97
+ > **📌 内容概览**
98
+ > - **内容主题**:[从文本、文件名或转写内容中提炼]
99
+ > - **输出形式**:Markdown 格式的思维导图
100
+
101
+ ## Markdown 思维导图
102
+ ```md
103
+ # 总标题 / 中心主题
104
+ - 一级主题 A
105
+ - 二级主题 A1
106
+ - 关键要点 1
107
+ - 关键要点 2
108
+ - 二级主题 A2
109
+ - 一级主题 B
110
+ - 二级主题 B1
111
+ ```
112
+
113
+ > Tip:可将以上 Markdown 内容导入 XMind 等思维导图软件中,以获得更精美的思维导图。
114
+
115
+ ### 补充说明
116
+
117
+ - 总标题必须存在,且应尽量使用"文档主题 / 讨论主题 / 录音核心议题 / 文本核心内容"的简洁表述。
118
+ - 若文本中包含明确行动项,可在相应节点后标记:`[待办]`
119
+ - 若文本中包含分歧、风险或未决事项,可在相应节点后标记:`[未决]`、`[风险]`
120
+ - 思维导图正文必须使用 Markdown 代码块包裹,方便用户整体复制
121
+ - 输出必须为可直接复制的 Markdown 层级列表,不再额外提供第二种格式
122
+
123
+ ---
124
+
125
+ ## 🚫 行为约束
126
+
127
+ - **严禁臆造**:原文未明确提及的主题、结论、责任人、优先级,不得自行补充。
128
+ - **来源先确认**:若用户未提供内容且未明确说基于录音转写,必须先引导确认,严禁自行假设。
129
+ - **结构优先于修辞**:避免输出散文化总结,必须产出可复制、可折叠、可导图化的层级结构。
130
+ - **命名要克制**:节点标题应简洁、中性、信息密度高,避免写成完整段落。
131
+ - **总标题不可缺失**:必须先输出一个总标题,再展开下级节点。
132
+ - **多文件处理**:若用户要求"把最近两次录音都生成脑图"或"把这两份文件合并成一个脑图",则分别输出,或按用户要求合并为统一总图。
133
+ - **输出唯一性**:只输出 Markdown 格式的思维导图,不输出正文摘要、表格版纪要或 ASCII 树状图。
134
+ - **代码块包裹**:思维导图主体必须放在代码块中输出,避免复制时层级缩进损坏。
135
+ - **Tip 固定输出**:在代码块后追加一个简短 Tip,提示用户可导入 XMind 等思维导图软件进行美化展示。
136
+
137
+ ## 💬 响应示例
138
+
139
+ - **场景A(用户未提供内容)**:"请问您想基于哪种内容生成思维导图?1. 我直接提供文本 2. 我提供文件 3. 根据录音转写生成。请直接回复序号即可。"
140
+ - **场景B(用户已提供文本)**:"好的,正在根据您提供的文本生成 Markdown 格式的思维导图..."
141
+ - **场景C(用户指定录音)**:"好的,正在根据最近一份录音转写(`2026-03-30_产品讨论.md`)生成 Markdown 思维导图..."
142
+ - **场景D(直接输出)**:"以下是根据内容整理的 Markdown 格式思维导图。\n\n> Tip:可将以上 Markdown 内容导入 XMind 等思维导图软件中,以获得更精美的思维导图。"
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: yoooclaw-recording-query
3
+ description: 用 yoooclaw CLI 查询本地长录音记录和转写内容。当用户说"有哪些录音""查一下录音""找最近的录音""这段录音说了什么""根据录音回答问题""查看录音摘要/转写""搜索录音内容"等需求时激活。必须通过 yoooclaw recording storage-path 与 recording list 定位录音,严禁假设录音目录。yoooclaw 是 openclaw 手机录音插件的独立 CLI 形态,数据在 ~/.yoooclaw 下,纯读磁盘、不需要 daemon 在跑。
4
+ ---
5
+
6
+ # yoooclaw 长录音查询(Agent-Native)
7
+
8
+ `yoooclaw` CLI 自身就是工具表:所有命令都支持 `--format json|pretty|table|ndjson`。本 Skill 取结构化对象一律用 `--format json`。
9
+
10
+ > 命令名 `yoooclaw`,短别名 `yc` 完全等价。下文用 `yoooclaw`。
11
+ > 录音数据在 `~/.yoooclaw` 下,查询纯读磁盘、不需要 daemon 在跑。
12
+ > 定位到转写文件后,用你的文件读取工具直接读 `<path>/<transcriptFile>`,不要假设目录。
13
+ > 多 profile 时所有命令可加 `--profile <name>` 查指定 profile。
14
+
15
+ ## 1. 初始化(不要假设录音目录)
16
+
17
+ ```bash
18
+ yoooclaw recording storage-path --format json
19
+ # → {"ok":true,"path":"/abs/path/to/profiles/<profile>/recordings"}
20
+ ```
21
+
22
+ 后续所有文件操作以返回的 `path` 为根目录:
23
+
24
+ - 转写文件优先查找:`<path>/<transcriptFile>`(`transcriptFile` 来自 `recording status`)。
25
+ - AI 总结文件按需查找:`<path>/<summaryFile>`。
26
+ - 若命令失败或 `ok != true`,告知用户当前无法定位录音存储目录,终止查询。
27
+
28
+ ## 2. 获取录音列表
29
+
30
+ ```bash
31
+ yoooclaw recording list --format json
32
+ # 只看已转写的:yoooclaw recording list --status transcribed --format json
33
+ ```
34
+
35
+ 返回示例:
36
+
37
+ ```json
38
+ {
39
+ "ok": true,
40
+ "total": 2,
41
+ "recordings": [
42
+ {
43
+ "id": "7E901C59-8B98-4AA3-9DE1-AE86E34A1A37",
44
+ "name": "2026-05-11 10_31_43",
45
+ "duration_sec": 66,
46
+ "status": "transcribed",
47
+ "file_size_bytes": 191283,
48
+ "has_audio": true,
49
+ "has_transcript": true,
50
+ "created_at": "2026-05-11T10:31:43+08:00",
51
+ "updated_at": "2026-05-11T02:33:19.805Z",
52
+ "error": null
53
+ }
54
+ ]
55
+ }
56
+ ```
57
+
58
+ 处理规则:
59
+
60
+ - 若 `ok != true`,说明录音列表不可用,简短说明错误后终止。
61
+ - 若 `recordings` 为空,回复当前没有录音记录。
62
+ - 默认按 `created_at` 倒序展示或筛选。
63
+ - 查询转写内容时,只保留 `status = "transcribed"` 且 `has_transcript = true` 的录音。
64
+ - 若用户只是查询录音列表,可以展示所有录音,并标出未转写/失败状态。
65
+
66
+ ## 3. 意图判断
67
+
68
+ 识别用户目标:
69
+
70
+ - **列表查询**:如"有哪些录音"、"列一下录音"。展示录音列表,不读取全文。
71
+ - **范围查询**:如"最新一条"、"今天的"、"最近 N 条"、"全部"。按范围锁定录音。"最新一条"可直接用快捷命令 `yoooclaw recording +latest --format json`。
72
+ - **精确查询**:用户给出 ID、名称、时间。按 `id`、`name`、`created_at`、文件名片段精确或模糊匹配。
73
+ - **内容问答/搜索**:如"这段录音说了什么"、"有没有提到 X"、"总结一下最新录音"。锁定录音后读取转写文件回答。
74
+
75
+ 若目标录音不明确且存在多条候选,展示候选列表并暂停等待用户选择:
76
+
77
+ ```text
78
+ 1. [name] ([created_at], [duration])
79
+ 2. [name] ([created_at], [duration])
80
+ ```
81
+
82
+ 询问:"请问要查询哪一条录音?可以回复序号、ID、名称,或 `all`。"
83
+
84
+ 支持用户回复 `1,3`、`1-3`、`all`。
85
+
86
+ ## 4. 定位文件
87
+
88
+ 对每条选中的录音,调用:
89
+
90
+ ```bash
91
+ yoooclaw recording status <recording_id> --format json
92
+ # 最新一条等价于:yoooclaw recording +latest --format json
93
+ ```
94
+
95
+ 返回的 `recording` 对象含 `transcriptFile` / `summaryFile` / `srtFile` / `audioFile` 等字段(均为相对 `storage-path` 的路径)。优先使用 `transcriptFile`,读取:
96
+
97
+ ```text
98
+ <path>/<transcriptFile>
99
+ ```
100
+
101
+ 若 `transcriptFile` 为空或文件不存在,告知用户该录音的转写文件尚未生成或已被删除。
102
+
103
+ AI 总结文件按需读取:
104
+
105
+ - 当用户明确问"总结文件"、"AI 总结"、"摘要文件"时,读取 `<path>/<summaryFile>`。
106
+ - 普通内容问答优先读取 `transcriptFile` 转写文件。
107
+
108
+ ## 5. 回答方式
109
+
110
+ ### 列表查询
111
+
112
+ 输出精简列表:
113
+
114
+ ```text
115
+ 1. 名称:...
116
+ ID:...
117
+ 时间:...
118
+ 时长:...
119
+ 状态:...
120
+ 转写:有/无
121
+ ```
122
+
123
+ 不要输出大段 JSON,除非用户明确要求原始数据。
124
+
125
+ ### 内容查询
126
+
127
+ 读取锁定的 Markdown 转写文件后,根据用户问题回答:
128
+
129
+ - 优先基于转写原文,不要凭记忆或外部搜索补全。
130
+ - 可引用少量原文片段,但不要整段复制长转写。
131
+ - 若录音中未提到相关信息,明确说明"转写中未找到"。
132
+ - 多条录音查询时,按录音分组回答,并标明录音名称或 ID。
133
+
134
+ ### 摘要查询
135
+
136
+ 若读取的是 `summaryFile` 总结文件,说明来源是总结文件;若没有总结文件但读取了转写文件,则基于转写生成简短摘要,并说明"未找到已有总结文件,以下根据转写整理"。
137
+
138
+ ## 6. 边界处理
139
+
140
+ - **未转写**:`status != "transcribed"` 或 `has_transcript != true` 时,告知状态并建议稍后再试。
141
+ - **转写失败**:展示 `error` 字段中的失败原因。
142
+ - **文件不存在**:说明索引存在但本地文件缺失,可能被删除或尚未同步完成。
143
+ - **大量录音**:若用户请求"全部"且数量很多,先展示数量并询问是否继续读取全文;列表查询不需要确认。
144
+ - **只读约束**:本 skill 只查询和读取文件,不写入、不删除、不重命名录音。
145
+ - **错误 schema**:命令失败统一输出 `{"ok":false,"error":{"code":"YOOOCLAW_...","message":"...","hint":"..."}}` 并以非零退出码结束,按 `message` / `hint` 处理。