@kg-ai/kugou-skill 0.1.7 → 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.
@@ -1,22 +1,22 @@
1
- # 错误处理
2
-
3
- 错误信息输出到 stderr,程序 exit code 为 1:
4
-
5
- ```bash
6
- kugou-cli music search "xxx" 2>&1
7
- echo $? # 非 0 表示出错
8
- ```
9
-
10
- ---
11
-
12
- ## 常见错误及处理
13
-
14
- | 错误信息 | 原因 | 处理方式 |
15
- |---------|------|---------|
16
- | `账号登录过期,请重新登录` | 登录态已过期。CLI 已**自动**清理本地登录态 | 引导用户重新登录:`kugou-cli auth login`(扫码)或 `kugou-cli auth set-secret "<新 secret>"` |
17
- | `not logged in` / `auth file not found` | 未登录 | 引导用户执行 `kugou-cli auth login` |
18
- | `HTTP error: 400` | 请求参数有误 | 检查命令参数是否正确 |
19
- | `HTTP error: 500` | 服务端错误 | 稍后重试,或告知用户 |
20
- | `API error: ...` | 业务错误 | 根据 errmsg 提示用户 |
21
- | `network error: ...` | 网络连接问题 | 检查网络,可尝试 `--proxy` |
22
- | `failed to get device info` | 设备信息获取失败 | 运行时环境异常,检查权限 |
1
+ # 错误处理
2
+
3
+ 错误信息输出到 stderr,程序 exit code 为 1:
4
+
5
+ ```bash
6
+ kugou-cli music search "xxx" 2>&1
7
+ echo $? # 非 0 表示出错
8
+ ```
9
+
10
+ ---
11
+
12
+ ## 常见错误及处理
13
+
14
+ | 错误信息 | 原因 | 处理方式 |
15
+ |---------|------|---------|
16
+ | `账号登录过期,请重新登录` | 登录态已过期(errcode 语义由上游约定)。CLI 已**自动**清理本地登录态 | 引导用户重新登录:`kugou-cli auth login`(扫码)或 `kugou-cli auth set-secret "<新 secret>"` |
17
+ | `not logged in` / `auth file not found` | 未登录 | 引导用户执行 `kugou-cli auth login` |
18
+ | `HTTP error: 400` | 请求参数有误 | 检查命令参数是否正确 |
19
+ | `HTTP error: 500` | 服务端错误 | 稍后重试,或告知用户 |
20
+ | `API error: <errmsg> (code=<N>)` | 业务错误(上游 errcode ≠ 0) | 根据 errmsg 提示用户 |
21
+ | `network error: ...` | 网络连接问题 | 检查网络,可尝试 `--proxy` |
22
+ | `failed to get device info` | 设备信息获取失败(仅 control) | 运行时环境异常,检查权限 |
@@ -13,6 +13,7 @@
13
13
  | `kugou-cli install --hermes` | 安装到 Hermes skills 目录 |
14
14
  | `kugou-cli install --openclaw` | 安装到 Openclaw skills 目录 |
15
15
  | `kugou-cli install --codex` | 安装到 Codex skills 目录 |
16
+ | `kugou-cli install --workbuddy` | 安装到 Workbuddy skills 目录 |
16
17
 
17
18
  ---
18
19
 
@@ -40,7 +41,7 @@ kugou-cli install --hermes --claude # 安装到 Hermes 和 Claude
40
41
 
41
42
  - 无参数时输出"平台选择提示",列出可用平台选项,不会进行任何安装操作
42
43
  - 只会在目标平台的 skills 父目录存在时才安装(不自动创建父目录)
43
- - npm 安装时会自动调用 install.js 安装 SKILL.md
44
+ - npm 安装时会自动安装 SKILL.md
44
45
  - `kugou-cli install` 命令用于手动重新安装或更新 SKILL.md
45
46
 
46
47
  ---
@@ -49,6 +50,6 @@ kugou-cli install --hermes --claude # 安装到 Hermes 和 Claude
49
50
 
50
51
  | 命令 | 说明 |
51
52
  |------|------|
52
- | `kugou-cli --version` / `kugou-cli version` | 输出版本号 |
53
+ | `kugou-cli --version` / `kugou-cli version` | 输出版本号(`--version` 是 root flag,`version` 是子命令,两者输出相同) |
53
54
  | `kugou-cli --help` | 显示帮助信息 |
54
55
  | `kugou-cli <子命令> --help` | 显示子命令帮助(如 `kugou-cli music search --help`)|
@@ -7,13 +7,16 @@
7
7
  | 命令 | 说明 |
8
8
  |------|------|
9
9
  | `kugou-cli music search <keyword>` | 搜索歌曲 |
10
- | `kugou-cli music recommend daily` | 每日推荐 |
10
+ | `kugou-cli music recommend guess` | 猜你喜欢(个性化推荐) |
11
11
  | `kugou-cli music recommend similar -s <song>` | 相似歌曲推荐 |
12
12
  | `kugou-cli music favorites` | 我的收藏 |
13
13
  | `kugou-cli music recent` | 最近播放 |
14
14
  | `kugou-cli music stats` | 听歌统计 |
15
15
  | `kugou-cli music charts <rank_id>` | 榜单 |
16
16
  | `kugou-cli music create-playlist <name>` | 创建歌单(可附加歌曲) |
17
+ | `kugou-cli music search-playlist <keyword>` | 搜索歌单 |
18
+ | `kugou-cli music recommend-playlist` | 歌单推荐 |
19
+ | `kugou-cli music playlist-songs <global_collection_id>` | 歌单内歌曲列表 |
17
20
 
18
21
  ---
19
22
 
@@ -116,16 +119,13 @@ kugou-cli music recommend text --text "安静的钢琴曲" --num 5
116
119
 
117
120
  ---
118
121
 
119
- ## 4. 我的收藏
122
+ ## 3. 我的收藏
120
123
 
121
124
  ```bash
122
125
  kugou-cli music favorites
123
- kugou-cli music favorites --page 1 --size 20
124
126
  ```
125
127
 
126
- **参数**:
127
- - `--page`: 页码,默认 1
128
- - `--size`: 每页数量,默认 20
128
+ **参数**: 无(上游接口固定返回最近 10 首收藏,不支持分页)
129
129
 
130
130
  > 注意:固定返回最近 10 首收藏,查看更多请前往酷狗App
131
131
 
@@ -151,16 +151,13 @@ kugou-cli music favorites --page 1 --size 20
151
151
 
152
152
  ---
153
153
 
154
- ## 5. 最近播放
154
+ ## 4. 最近播放
155
155
 
156
156
  ```bash
157
157
  kugou-cli music recent
158
- kugou-cli music recent --page 1 --size 20
159
158
  ```
160
159
 
161
- **参数**:
162
- - `--page`: 页码,默认 1
163
- - `--size`: 每页数量,默认 20
160
+ **参数**: 无(上游接口固定返回最近 10 条播放记录,不支持分页)
164
161
 
165
162
  > 注意:固定返回最近 10 首播放记录,查看更多请前往酷狗App
166
163
 
@@ -186,7 +183,7 @@ kugou-cli music recent --page 1 --size 20
186
183
 
187
184
  ---
188
185
 
189
- ## 6. 听歌统计
186
+ ## 5. 听歌统计
190
187
 
191
188
  ```bash
192
189
  kugou-cli music stats # 默认查当月
@@ -194,8 +191,8 @@ kugou-cli music stats --date-type 1 --date 20260501 # 指定周查询
194
191
  ```
195
192
 
196
193
  **参数**:
197
- - `--date-type`: 日期类型,0=日、1=周、2=月,默认 2(月)
198
- - `--date`: 查询日期,YYYYMMDD 格式,如 "20260501"(不填默认当月第一天)
194
+ - `--date-type`: 日期类型,0=日、1=周、2=月(默认查当月)
195
+ - `--date`: 查询日期,YYYYMMDD 格式,如 "20260501"。不传则查当月
199
196
  - 日类型:每天日期,如 "20260501"
200
197
  - 周类型:必须是周一日期,如 "20260505"(周一)
201
198
  - 月类型:必须是月份第一天,如 "20260501"(5月1日)
@@ -250,7 +247,7 @@ kugou-cli music stats --date-type 1 --date 20260501 # 指定周查询
250
247
 
251
248
  ---
252
249
 
253
- ## 7. 榜单
250
+ ## 6. 榜单
254
251
 
255
252
  ```bash
256
253
  kugou-cli music charts 6666
@@ -269,25 +266,40 @@ kugou-cli music charts 52144 --page 1 --size 20
269
266
  | 52144 | 抖音热歌酷狗榜 |
270
267
 
271
268
  **参数**:
272
- - `<rank_id>`: 榜单 ID(必填)
273
- - `--page`: 页码,默认 1
274
- - `--size`: 每页数量,默认 20
269
+ - `<keyword>`: 搜索关键词(必填)
270
+ - `--page`: 页码,默认 1(**无简写**)
271
+ - `--size`: 每页数量,默认 20(**无简写**)
275
272
 
276
273
  ---
277
274
 
278
- ## 8. 创建歌单
275
+ ## 7. 创建歌单
279
276
 
280
- > 🔐 = 需要先登录
277
+ > 🔐 = 需要先登录(CLI 登录 `auth login` / `auth set-secret`)
281
278
 
282
- ### 调用原则(AI 必读)
279
+ ### 7.0 调用原则(AI 必读)
283
280
 
284
- 1. **被动调用**:必须用户**明确**要求创建歌单时才调用本命令,禁止在用户仅说"推荐/搜歌/听歌"时主动创建
285
- 2. **主动询问**:当通过搜索、推荐(猜你喜欢/相似/文本)等方式给出一批歌曲后,**必须**询问用户"是否需要将当前这批歌曲创建为歌单",等用户确认后再执行 `create-playlist --songs "<mix_song_id 列表>"`
281
+ 1. **被动调用**:必须用户**明确**要求创建歌单时才调用,禁止在用户仅说"推荐/搜歌/听歌"时主动创建
282
+ 2. **主动询问**:当通过搜索、推荐(猜你喜欢/相似/文本)等方式给出一批歌曲后,**必须**询问用户"是否需要将当前这批歌曲创建为歌单",等用户确认后再调用
286
283
  3. **示例化推荐**:询问时建议给出歌单名建议(如"跑步歌单"、"周杰伦精选"),让用户更容易确认
284
+ 4. **硬性默认:优先客户端创建**:用户一旦同意创建歌单,**必须先尝试** [`control playlist create`](./control.md#10-playlist-create--创建歌单)(在本地酷狗客户端内创建)。当以下**任一**条件成立时,回退到本节的 `music create-playlist`(云端创建):
285
+ - **(a)** 当前系统不是 Windows / macOS(control 不支持 Linux)
286
+ - **(b)** 本地酷狗客户端未运行,或未通过 `kugou-cli control start` 完成握手(前置条件详见 [control.md §10](./control.md#10-playlist-create--创建歌单))
287
+ - **(c)** `control playlist create` 调用失败(如 409/4091"login required"、网络错误等)—— 此时把 stderr 原样回给用户,并询问是否改走云端
288
+
289
+ 简单说:**默认 `control`;客户端不可用或失败时,才退到 `music`**。不要在用户没问的情况下主动解释为什么走云端,先尝试 client 路径即可。
290
+
291
+ 5. **创建成功后主动询问是否播放**:无论走 `control playlist create` 还是 `music create-playlist`,**只要创建成功(返回 0/成功状态)就必须主动询问用户"是否要播放这个歌单"**,等用户明确回复后再决定走哪条播放命令:
292
+ - 用户同意 → 按场景选播放路径:
293
+ - **客户端路径优先**:`kugou-cli control play-playlist --global-id "<id>"`(详见 [control.md §12](./control.md#12-play-playlist--播放整个歌单)),可叠加 `--playlist-mode` 控制是否打断当前播放
294
+ - **云端歌单(`music create-playlist` 创建的)**:走浏览器 H5 路径(详见下方 7.2)——**不要**再用 `control play-playlist`,因为本地客户端没有这首歌单
295
+ - 用户拒绝 / 不回复 → 不做任何动作,不要替用户决定
296
+ - 仅在"创建歌单成功"时才询问;建失败时不询问(直接展示错误,等用户决定下一步)
297
+
298
+ ### 7.1 接口说明(云端备选,仅在 7.0 第 4 条任一条件成立时使用)
287
299
 
288
- ### 接口说明
300
+ > ⚠️ 本节是**云端备选路径**。优先走 [`control playlist create`](./control.md#10-playlist-create--创建歌单)(详见 [7.0 第 4 条](#70-调用原则ai-必读))。仅当客户端不可用时使用本节。
289
301
 
290
- 创建一个新的自建歌单,并可选择在创建后往歌单里添加歌曲。
302
+ 创建一个新的自创建歌单,并可选择在创建后往歌单里添加歌曲。
291
303
 
292
304
  ```bash
293
305
  # 创建空歌单
@@ -321,3 +333,194 @@ kugou-cli music create-playlist "我的批量歌单" --songs "123,456,789"
321
333
  **异常说明**:
322
334
  - 歌单创建成功但添加歌曲失败:返回 200 状态 + 错误信息,body 仍包含已创建歌单的 `name` 与 `song_list_url`
323
335
  - 歌单创建失败:返回对应错误码(参数错误 20010 / 网络错误 90000 等)
336
+
337
+ ### 7.2 云端歌单的播放:控制浏览器打开 H5 链接
338
+
339
+ > 适用场景:用户同意播放的歌单是 `music create-playlist` 创建的(响应里有 `song_list_url`),且本地没有可用的酷狗客户端(7.0 第 4 条 (a)(b)(c) 任一成立)。
340
+
341
+ **Agent 必须遵循"先探后告知"原则**:
342
+
343
+ 1. **先探测浏览器控制能力**:当前 Agent 工具栈是否能控制本地浏览器(playwright / dev-browser / chrome-devtools MCP 等任一可用)。可用 = 可用;都不可用 = 当前环境不支持浏览器控制
344
+ 2. **可用时**:
345
+ - 用浏览器工具打开响应里的 `song_list_url`(H5 链接,格式如 `https://m.kugou.com/songlist/gcid_...`)
346
+ - 等待 H5 页面加载完成(`networkidle` / 出现"播放全部"按钮)
347
+ - **轻量职责**:点击页面上的"播放" / "播放全部"按钮(若有),控制到"页面已渲染出播放控制"为止
348
+ - 页面登录、付费、版权屏蔽等后续问题**不归 Agent 管**,告诉用户"已打开 H5 歌单并尝试点击播放,如未自动播放请手动点一下"
349
+ 3. **不可用时**(无浏览器控制工具 / 浏览器控制调用失败):
350
+ - 明确告知用户:"当前环境无法控制浏览器,请手动复制链接在浏览器打开:[song_list_url]"
351
+ - **不要**伪装已经打开或点击了播放
352
+
353
+ > **为什么不写死"先 playwright 再 chrome-devtools"?** 不同 Agent 工具栈内置的浏览器工具名不同,文档只规定行为契约("打开 + 点击播放"),具体工具由 Agent 现场选择。
354
+
355
+ ---
356
+
357
+ ## 8. 搜索歌单
358
+
359
+ 根据关键词搜索歌单。
360
+
361
+ ```bash
362
+ kugou-cli music search-playlist "周杰伦"
363
+ kugou-cli music search-playlist "周杰伦" --page 1 --size 20
364
+ kugou-cli music search-playlist "跑步" --filter 1 # 只搜 UGC
365
+ kugou-cli music search-playlist "钢琴" --filter 2 # 只搜非 UGC
366
+ ```
367
+
368
+ **参数**:
369
+ - `<keyword>`: 搜索关键词(必填)
370
+ - `--page`: 页码,默认 1
371
+ - `--size`: 每页数量,默认 20
372
+ - `--filter`: 过滤方式,`0=全部(默认) / 1=只搜 UGC / 2=只搜非 UGC`
373
+
374
+ **输出示例**:
375
+ ```json
376
+ {
377
+ "errcode": 0,
378
+ "data": {
379
+ "list": [
380
+ {
381
+ "list_id": 2651286,
382
+ "global_id": "collection_3_938985631_304_0",
383
+ "name": "<em>周杰伦</em>:无与伦比,为杰沉沦。",
384
+ "creator_id": "938985631",
385
+ "creator_name": "慕情超爱撒花",
386
+ "intro": "",
387
+ "song_list_url": "https://m.kugou.com/songlist/gcid_3z938985631z304z2"
388
+ }
389
+ ],
390
+ "total": 1000,
391
+ "page": 1,
392
+ "size": 20
393
+ },
394
+ "status": 1
395
+ }
396
+ ```
397
+
398
+ **关键字段**:
399
+ - `list_id`: 歌单 ID(数字 string)
400
+ - `global_id`: 全局歌单 ID(字符串,跨客户端兼容的稳定标识)
401
+ - `name`: 歌单名
402
+ - `creator_id`: 创建者用户 ID(字符串)
403
+ - `creator_name`: 创建者昵称
404
+ - `intro`: 歌单简介
405
+ - `song_list_url`: 歌单链接(H5),格式 `https://m.kugou.com/songlist/gcid_{encoded(global_id)}`;`global_id` 为空时返回空字符串
406
+
407
+ > **提示**: 歌单搜索/推荐只返回基础信息用于卡片展示。需要歌曲数、播放量、收藏数、封面图、歌单内歌曲等详细信息时,调用方拿到 `global_id` 后调用 [第 10 章](#10-歌单内歌曲列表) 或直接打开 `song_list_url`。
408
+
409
+ **特殊说明**:
410
+ - 上游高亮:服务端固定传 `tag=em`,返回的 `name` 字段带 `<em>...</em>` 高亮标签,前端可直接渲染
411
+ - 上游错误码:146/147=被屏蔽地区,148=非法关键字,149=页码超出范围。出现时返回 90000 网络错误,建议引导用户重试或更换关键词
412
+
413
+ ---
414
+
415
+ ## 9. 歌单推荐
416
+
417
+ 根据用户喜好个性化推荐歌单。
418
+
419
+ ```bash
420
+ kugou-cli music recommend-playlist
421
+ kugou-cli music recommend-playlist --page 1 --size 20
422
+ kugou-cli music recommend-playlist --module-id 6 # 我-最近播放-歌单下方
423
+ ```
424
+
425
+ **参数**:
426
+ - `--page`: 页码,默认 1
427
+ - `--size`: 每页数量,默认 20
428
+ - `--module-id`: 上游模块 ID,由客户端透传。常见值:
429
+ - `1` = 歌单广场(默认)
430
+ - `5` = 酷狗 X 首页为你推荐
431
+ - `6` = 我 - 最近播放 - 歌单下方
432
+ - `15` = 酷狗 12 听首页为你推荐
433
+
434
+ 不传时服务端默认填 `1`。
435
+
436
+ **输出示例**:
437
+ ```json
438
+ {
439
+ "errcode": 0,
440
+ "data": {
441
+ "list": [
442
+ {
443
+ "list_id": 2651286,
444
+ "global_id": "collection_3_938985631_304_0",
445
+ "name": "周杰伦:无与伦比,为杰沉沦。",
446
+ "creator_id": "938985631",
447
+ "creator_name": "慕情超爱撒花",
448
+ "intro": "",
449
+ "song_list_url": "https://m.kugou.com/songlist/gcid_3z938985631z304z2"
450
+ }
451
+ ],
452
+ "total": 100,
453
+ "has_next": 1,
454
+ "session": "1706428800",
455
+ "refresh_time": 0,
456
+ "page": 1,
457
+ "size": 20
458
+ },
459
+ "status": 1
460
+ }
461
+ ```
462
+
463
+ **关键字段(顶层)**:
464
+ - `total`: 总数;`has_next`: 是否有下一页(1=是 / 0=否)
465
+ - `session`: 会话标识(暂时返回时间戳)
466
+ - `refresh_time`: 客户端刷新时间(秒),`0` 或缺失表示不刷新
467
+
468
+ **关键字段(list[])**:
469
+ - 与歌单搜索([第 8 章](#8-搜索歌单))共用同一套 `PlaylistInfo` 基础字段(`list_id` / `global_id` / `name` / `creator_id` / `creator_name` / `intro` / `song_list_url`),调用方可使用同一套反序列化逻辑
470
+ - 已登录时上游根据 userid 做个性化推荐;未登录时可能返回空数据或通用推荐
471
+ - 上游可能附带 `cache` 等字段,CLI 不解析、不保证
472
+
473
+ ---
474
+
475
+ ## 10. 歌单内歌曲列表
476
+
477
+ 通过歌单全局 ID(`global_collection_id`)获取歌单内歌曲列表。一般先调用 [第 8 章](#8-搜索歌单) 或 [第 9 章](#9-歌单推荐) 拿到 `global_id`,再透传给本接口。
478
+
479
+ ```bash
480
+ kugou-cli music playlist-songs "collection_3_938985631_304_0"
481
+ kugou-cli music playlist-songs "collection_3_938985631_304_0" --page 1 --size 100
482
+ ```
483
+
484
+ **参数**:
485
+ - `<global_collection_id>`: 歌单全局 ID(必填,从 `search-playlist` / `recommend-playlist` 响应的 `global_id` 字段透传)
486
+ - `--page`: 页码,从 1 开始,默认 1
487
+ - `--size`: 每页数量,默认 100(上游建议值)
488
+
489
+ **输出示例**:
490
+ ```json
491
+ {
492
+ "errcode": 0,
493
+ "data": {
494
+ "list": [
495
+ {
496
+ "song_name": "晴天",
497
+ "mix_song_id": "8888",
498
+ "artist_name": "周杰伦",
499
+ "play_link": "https://www.kugou.com/mixsong/agent_gateway/j410q78a01f.html"
500
+ },
501
+ {
502
+ "song_name": "七里香",
503
+ "mix_song_id": "8890",
504
+ "artist_name": "周杰伦",
505
+ "play_link": "https://www.kugou.com/mixsong/agent_gateway/j410q78a01f.html"
506
+ }
507
+ ],
508
+ "total": 164,
509
+ "page": 1,
510
+ "size": 100
511
+ },
512
+ "status": 1
513
+ }
514
+ ```
515
+
516
+ **关键字段**:
517
+ - `list[]`: 通用 `SongInfo` 结构(`song_name` / `mix_song_id` / `artist_name` / `play_link`)
518
+ - `total`: 上游返回的歌曲总数(不含被过滤的屏蔽歌曲)
519
+
520
+ > **关于上游附带字段**:CLI 透传上游原始 JSON 字符串,响应里**可能**含其他字段(如 `hash`、`singer_id` 等),但 CLI 不解析、不保证存在。Agent 不要依赖未在 `SongInfo` 中列出的字段。
521
+
522
+ **特殊说明**:
523
+ - **屏蔽歌曲过滤**: 上游可能跳过被屏蔽的歌曲(不返回),`total` 不含被过滤项,`list` 长度可能小于 `size`
524
+ - **artist_name 拼接**: 多歌手时上游用 `/` 拼接(例如 `周杰伦/方文山`)
525
+ - **分页去重**: 上游按服务端数组下标分页,但歌曲可能在分页期间被增删,调用方需自行按 `mix_song_id` 去重
526
+ - **播放链接**: `play_link` 由服务端拿到 `mix_song_id` 后批量生成,单条失败不影响其他歌曲
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 通用响应结构
4
4
 
5
- 所有 API 命令输出标准 JSON 结构:
5
+ `music` / `auth` / `install` 等"上游 API 类"命令输出标准 JSON 结构:
6
6
 
7
7
  ```json
8
8
  {
@@ -13,10 +13,11 @@
13
13
  }
14
14
  ```
15
15
 
16
- **响应状态**:
17
- - `errcode: 0` 表示成功
16
+ **响应状态判定**:
17
+ - **成功判定只看 `errcode == 0`**——这是 Agent 唯一可信的成功依据
18
18
  - `data` 包含实际业务数据
19
- - `status: 1` 表示接口调用成功
19
+ - `status: 1` 是上游接口调用状态提示,**仅作辅助参考**(部分上游错误响应里 `status` 可能不是 1,但仍由 `errcode` 决定 CLI 成功与否)
20
+ - **`control` 命令不走这个结构**——它透传酷狗客户端本地 HTTP 协议的原始 JSON,成功字段通常是 `code` 而不是 `errcode`。见 [references/control.md](./control.md)
20
21
 
21
22
  ---
22
23
 
@@ -30,6 +31,7 @@
30
31
  - **必须**以 Markdown 链接格式展示播放链接
31
32
  - 正确格式:`[歌曲名 - 歌手名](https://www.kugou.com/...)`
32
33
  - 禁止格式:`晴天 - 周杰伦`(无链接)、`歌曲名: 晴天, 歌手: 周杰伦`(无链接)
34
+ - **仅适用于 `music` 命令返回的歌曲列表**;`control` 操作响应(如 play / favorite)没有 play_link,按 control 协议原样展示即可
33
35
 
34
36
  ### 2. 统计数据
35
37
 
@@ -39,4 +41,48 @@
39
41
 
40
42
  使用 `qrcode_img_url` 渲染给用户:Markdown `![酷狗登录二维码](<qrcode_img_url>)`,让客户端拉取并渲染
41
43
 
44
+ ### 4. 错误展示
45
+
46
+ - CLI 错误输出到 **stderr**,stdout 只放原始 JSON(或原始 body)
47
+ - Agent 解析失败时同时检查:退出码(0 = 成功,非 0 = 失败)、stdout body 的 `errcode` 字段、stderr 输出
48
+ - 不要把 stderr 输出原样展示给用户;转化为自然语言说明(如"账号登录过期,请重新登录")
49
+
50
+ ---
51
+
52
+ ### 5. 推荐理由(主动推荐场景必写)
53
+
54
+ **触发条件**:仅当 agent **主动**给用户推荐歌曲时才写推荐理由,包括以下命令的返回结果:
55
+
56
+ - `kugou-cli music recommend guess`(猜你喜欢)
57
+ - `kugou-cli music recommend similar -s <song>`(相似推荐)
58
+ - `kugou-cli music recommend text --text <描述>`(文本推歌)
59
+ - `kugou-cli music charts <rank_id>`(榜单,详见 [music.md#7](music.md#7))
60
+ - `kugou-cli music recommend-playlist`(歌单推荐)—— 歌单本身就是主动推荐行为
61
+
62
+ **不触发**:用户**主动搜索**(`search` / `search-playlist`)、查自己数据(`favorites` / `recent` / `stats`)、查指定歌单内容(`playlist-songs`)的结果**不写**推荐理由——用户来找东西,不需要再被解释一遍。
63
+
64
+ #### 写法要求
65
+
66
+ 在歌曲列表**之后**追加一段 Markdown 引用块(`>`)作为推荐理由,必须包含以下三层信息:
67
+
68
+ 1. **整体歌曲风格**:用一句话概括本批推荐的整体风格/情绪基调(例如「以华语流行慢歌为主,情绪偏舒缓治愈」)。
69
+ 2. **匹配逻辑**:依据当前推荐场景说明匹配来源——
70
+ - 猜你喜欢 / 歌单推荐 → 「基于你的听歌偏好/历史播放」
71
+ - 相似推荐 → 「延续《XXX》的 XXX 风格/主题」
72
+ - 文本推歌 → 「贴合你描述的『XXX』场景」
73
+ - 榜单 → 「来自 XXX 榜第 N 名,XXX 类热度风向」
74
+ 3. **挑 2-3 首解读**:从本批返回中挑选 2-3 首,**结合行业认知**(歌手常见风格、歌曲广为人知的标签、所属专辑/年代等)做一句解读,帮助用户判断是否合口味。
75
+
76
+ > ⚠️ 解读内容**仅基于歌名 + 歌手名调用 agent 自身行业认知**,不要捏造歌词、不要引用未经验证的曲风标签。如对歌曲不熟悉,宁可写得笼统一些也不要硬编细节。
77
+
78
+ #### 字数硬约束
79
+
80
+ **总字数控制在 220-260 字(含标点)**。超出或不足都需要重写到区间内。撰写时不必分段,整体作为一段引用块即可。
81
+
82
+ #### 输出示例
83
+
84
+ ```markdown
85
+ > 为你挑选了 5 首华语流行慢歌,整体偏舒缓、情绪内敛,节奏不快不躁,编曲以钢琴和原声吉他为主,更适合午后或深夜一个人安静循环。匹配逻辑来自你最近的播放记录和猜你喜欢数据,我们从中挑出与历史偏好契合度最高的几首组成了这张清单。其中《晴天》是周杰伦 2003 年的代表作,校园民谣的底色配钢琴铺陈,几乎成了一代人的青春共同记忆;《七里香》延续了同期的中国风与诗意意象,副歌弦乐层层推进,听感最为饱满宏大;《稻香》则把视角拉回乡村童年,节奏轻快但内核温暖,是整张清单里最治愈的一首作品。
86
+ ```
87
+
42
88
  ---
@@ -27,7 +27,6 @@
27
27
 
28
28
  ### 2. 检查频率限制
29
29
 
30
- - 缓存文件:`~/.config/kugou-cli/update_check.json`
31
30
  - 缓存有效期:**24 小时**
32
31
  - 24 小时内不会重复访问 npm registry
33
32
 
@@ -46,6 +45,8 @@
46
45
  kugou-cli update --check
47
46
  ```
48
47
 
48
+ > **绕过 24h 缓存**:显式调用 `kugou-cli update [--check]` **总是**绕过本地 24h 缓存,强制访问 npm registry。这与"启动时被动检查"的语义不同——启动检查走缓存(24h 内不重复访问 npm),显式 `update` 命令不走缓存。
49
+
49
50
  **输出示例**:
50
51
 
51
52
  有更新时: