@yoooclaw/cli 0.1.9 → 0.2.0-beta.0

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.
@@ -1,142 +0,0 @@
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 等思维导图软件中,以获得更精美的思维导图。"
@@ -1,145 +0,0 @@
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` 处理。
@@ -1,130 +0,0 @@
1
- ---
2
- name: yoooclaw-recording-translation
3
- description: 将文本文件和录音转录文件翻译为指定目标语言。支持两阶段翻译(提取术语表后翻译),保留时间戳标记,输出 Markdown sidecar 文件。当用户要求"翻译录音""翻译成[语言]""翻译文件""查看我的转录文件""用[语言]整理"时激活。基于录音时用 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>/translation/<date>_<brief_summary>_translation_<lang>.md`
30
-
31
- ## 2. 意图解析与列表定位
32
-
33
- > **若已在 Step 1 获得明确文件路径,跳过本节,直接进入 Step 3。**
34
-
35
- ### 2.1 确定目标语言与范围
36
-
37
- 从用户请求中识别以下信息:
38
-
39
- **目标语言 (lang_code)**:
40
- - 识别 `en` (英文), `ja` (日语), `ko` (韩语), `fr` (法语), `es` (西班牙语), `de` (德语) 等。
41
- - **若未指定**:直接询问用户。
42
-
43
- **目标录音范围**:
44
- - 具体 ID/名称 -> 精确匹配。
45
- - "刚才"、"最新" -> 取最近 1 条(可直接用 `yoooclaw recording +latest --format json`)。
46
- - "最近 N 条" -> 取最近 N 条。
47
- - "全部" -> 全量处理。
48
- - **若未提及**:执行 2.2 展示列表。
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
- **注意**:必须完整保留 `**[关键点 MM:SS]**` 标记,用于后续翻译校对。
84
-
85
- ## 4. 两阶段翻译流程
86
-
87
- ### 4.1 第一阶段:上下文与术语提取
88
-
89
- 若文本 > 50 字,先提取背景。
90
-
91
- **提示词要点**:
92
- - 提取 `domain` (领域), `tone` (语气), `glossary` (术语表)。
93
- - 术语表应包含人名、公司名、专业名词及缩写。
94
- - 返回纯 JSON。
95
-
96
- ### 4.2 第二阶段:全文翻译
97
-
98
- 使用第一阶段的上下文和术语表进行翻译。
99
-
100
- **强制规则**:
101
- 1. **严禁修改** `**[关键点 MM:SS]**` 标记。
102
- 2. **翻译元数据标签**(如 "录音名称"),但保留时间/日期数值。
103
- 3. **保持 Markdown 结构**(标题、引用块、分隔线)。
104
- 4. **术语一致性**:必须严格遵守提取的术语表。
105
-
106
- ## 5. 写入与反馈
107
-
108
- ### 5.1 写入翻译文件
109
-
110
- 用你自己的文件写入工具直接写出:
111
-
112
- **来自录音系统**:写入 `<path>/translation/<date>_<brief_summary>_translation_<lang>.md`
113
-
114
- **来自用户指定文件**:写入源文件同目录,如 `/path/to/<basename>_translation_<lang>.md`
115
-
116
- 若已存在,直接覆盖并在反馈中说明。
117
-
118
- ### 5.2 任务汇报
119
-
120
- 简洁汇报处理结果:
121
- - 翻译语言及处理数量。
122
- - 每条录音的领域、术语识别数及输出文件名。
123
- - 若上下文提取失败,注明"已使用基础模式"。
124
-
125
- ## 边界处理
126
-
127
- - **源语言=目标语言**:提示无需翻译并终止。
128
- - **存储路径无效**:若用户未指定文件路径,告知录音功能不可用;若已指定路径则不受影响。
129
- - **转写内容过短**:跳过术语提取,直接执行翻译。
130
- - **路径缺失**:若 `transcriptFile` 为空,跳过并记录。
@@ -1,63 +0,0 @@
1
- ---
2
- name: yoooclaw-tunnel-debug
3
- description: 用 yoooclaw CLI 排查手机端推送链路是否通。当用户说“手机推送收不到”“通知没同步过来”“检查一下隧道/连接”“daemon 还活着吗”“手机连不上”时激活。组合使用 auth status / daemon status / tunnel status / tunnel +test / gateway test / daemon logs 定位本地配置、daemon、本地 ingest 鉴权与 Relay WebSocket 状态。多数命令需要 daemon 在运行(🟡)。
4
- ---
5
-
6
- # yoooclaw Relay / 接收链路排查
7
-
8
- 独立 daemon 默认用 account api-key 连接托管 Relay WebSocket,手机 App 绑定同一账号后经 Relay 收发。也可以在 Relay 未启用或不可用时,将 `POST /notifications` 通过用户自建 `cloudflared` / `tailscale serve` 暴露为直连 HTTP fallback。
9
-
10
- ## 排查顺序
11
-
12
- ```bash
13
- # 1) 本地凭据是否存在;不调 daemon
14
- yoooclaw auth status --format json
15
-
16
- # 2) daemon 是否在跑、监听哪个地址端口
17
- yoooclaw daemon status --format json
18
- # 未运行 → yoooclaw daemon start --format json
19
-
20
- # 3) Relay 模式、连接状态、URL、多隧道状态
21
- yoooclaw tunnel status --format json
22
-
23
- # 4) daemon 本地回环:验证本地 ingest + 鉴权
24
- yoooclaw tunnel +test --format json
25
-
26
- # 5) 模拟手机端直接调本地 /notifications
27
- yoooclaw gateway test --format json
28
-
29
- # 6) 看 Relay 连接与重连日志
30
- yoooclaw daemon logs --lines 200 --format json
31
- yoooclaw log +errors --format json
32
- ```
33
-
34
- `tunnel +test` 会让 daemon 给本地 `/notifications` 发一条 echo 通知。它可以确认本地 ingest + 鉴权链路,但不会让流量真正绕行远端 Relay。`gateway test --via-relay` 当前也是复用这条本地回环路径,不应单独作为远端 Relay 可达性的证据。
35
-
36
- ## 判读
37
-
38
- - `auth status` 中 api-key 不存在:先用 `yoooclaw auth set-api-key -` 从 stdin 设置,再启动或 reload daemon。
39
- - `daemon status` 报 `YOOOCLAW_DAEMON_NOT_RUNNING`:运行 `yoooclaw daemon start`。
40
- - `tunnel status` 的 `mode=relay` 且 `connected=true`:daemon 当前已连上 Relay WebSocket。
41
- - `tunnel status` 的 `mode=relay` 但 `connected=false`:结合 `lastDisconnectReason`、`reconnectAttempt` 和 daemon 日志排查 api-key、网络与 Relay 服务。
42
- - `tunnel status` 的 `mode=standalone-http`:当前没有 Relay 隧道;按返回的 `note` 检查 `relay.enabled` 和 api-key。只有明确采用直连 fallback 时才检查防火墙、反代和手机端地址。
43
- - `tunnel +test` 或 `gateway test` 失败:先排查本地 gateway token。运行 `yoooclaw auth status`,必要时 `yoooclaw auth token-rotate`;daemon 已运行时随后执行 `yoooclaw daemon restart`。
44
-
45
- ## 多 clientLabel
46
-
47
- 多 api-key 模式下,每个 label 对应一条 Relay 隧道。按 label 缩小排查范围:
48
-
49
- ```bash
50
- yoooclaw auth list-api-keys --format json
51
- yoooclaw tunnel status --client work --format json
52
- yoooclaw tunnel +test --client work --format json
53
- yoooclaw tunnel reconnect --client work --format json
54
- ```
55
-
56
- ## 鉴权检查
57
-
58
- ```bash
59
- yoooclaw auth status --format json
60
- yoooclaw auth check --format json
61
- ```
62
-
63
- `auth status` 只读本地凭据与 daemon lock。`auth check` 会用本地 gateway token 调 daemon `/daemon/status`,用于确认 CLI 和 daemon 的 token 是否一致。