xiaozhi-client 1.9.2 → 1.9.3-beta.1

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.
Files changed (50) hide show
  1. package/README.md +4 -4
  2. package/apps/frontend/dist/assets/form-utils-h64o2Nyg.js +2 -0
  3. package/apps/frontend/dist/assets/form-utils-h64o2Nyg.js.map +1 -0
  4. package/apps/frontend/dist/assets/index-88NfCOo9.js +50 -0
  5. package/apps/frontend/dist/assets/index-88NfCOo9.js.map +1 -0
  6. package/apps/frontend/dist/assets/index-P6Zq3MZF.css +1 -0
  7. package/apps/frontend/dist/assets/radix-ui-BA32w1ww.js.map +1 -1
  8. package/apps/frontend/dist/assets/react-vendor-DrjkXih1.js +319 -0
  9. package/apps/frontend/dist/assets/react-vendor-DrjkXih1.js.map +1 -0
  10. package/apps/frontend/dist/assets/utils-CiPelQLP.js +2 -0
  11. package/apps/frontend/dist/assets/utils-CiPelQLP.js.map +1 -0
  12. package/apps/frontend/dist/assets/{vendor-DvFnRBMT.js → vendor-DK9yaMt3.js} +2 -2
  13. package/apps/frontend/dist/assets/vendor-DK9yaMt3.js.map +1 -0
  14. package/apps/frontend/dist/index.html +6 -6
  15. package/dist/WebServerStandalone.js +16 -21
  16. package/dist/WebServerStandalone.js.map +1 -1
  17. package/dist/cli.js +17 -25
  18. package/dist/cli.js.map +1 -1
  19. package/dist/mcpServerProxy.d.ts +1 -1
  20. package/dist/mcpServerProxy.js +13 -13
  21. package/dist/mcpServerProxy.js.map +1 -1
  22. package/dist/package.json +25 -18
  23. package/docs/arch/{cache.md → cache.mdx} +62 -95
  24. package/docs/changelog.mdx +617 -0
  25. package/docs/development/docker-build.mdx +256 -0
  26. package/docs/development/todo__release-guide.md +5 -5
  27. package/docs/docs.json +6 -1
  28. package/docs/python-dependencies.md +2 -2
  29. package/docs/usage/docker.mdx +4 -4
  30. package/package.json +25 -18
  31. package/apps/frontend/dist/assets/form-utils-wyhL6gg0.js +0 -24
  32. package/apps/frontend/dist/assets/form-utils-wyhL6gg0.js.map +0 -1
  33. package/apps/frontend/dist/assets/index-COfJftUA.css +0 -1
  34. package/apps/frontend/dist/assets/index-ukaaLbQN.js +0 -50
  35. package/apps/frontend/dist/assets/index-ukaaLbQN.js.map +0 -1
  36. package/apps/frontend/dist/assets/react-vendor-B6Uf_8Kw.js +0 -319
  37. package/apps/frontend/dist/assets/react-vendor-B6Uf_8Kw.js.map +0 -1
  38. package/apps/frontend/dist/assets/utils-D0kRQKVW.js +0 -2
  39. package/apps/frontend/dist/assets/utils-D0kRQKVW.js.map +0 -1
  40. package/apps/frontend/dist/assets/vendor-DvFnRBMT.js.map +0 -1
  41. package/dist/templates/docker/mcpServers/calculator.js +0 -106
  42. package/dist/templates/docker/mcpServers/datetime.js +0 -390
  43. package/dist/templates/docker/package.json +0 -13
  44. package/dist/templates/docker/requirements.txt +0 -16
  45. package/dist/templates/docker/xiaozhi.config.json +0 -21
  46. package/templates/docker/mcpServers/calculator.js +0 -106
  47. package/templates/docker/mcpServers/datetime.js +0 -390
  48. package/templates/docker/package.json +0 -13
  49. package/templates/docker/requirements.txt +0 -16
  50. package/templates/docker/xiaozhi.config.json +0 -21
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xiaozhi-client",
3
- "version": "1.9.2",
3
+ "version": "1.9.3-beta.1",
4
4
  "description": "小智 AI 客户端 命令行工具",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,25 +33,28 @@
33
33
  "xiaozhi-client": "dist/cli.js"
34
34
  },
35
35
  "scripts": {
36
- "build": "pnpm run build:web && cross-env NODE_ENV=production tsup",
36
+ "build": "pnpm run build:packages && pnpm run build:web && cross-env NODE_ENV=production tsup --config config/tsup.config.ts",
37
+ "build:packages": "pnpm --filter './packages/*' run build",
37
38
  "build:web": "cd apps/frontend && pnpm install && pnpm run build",
38
- "dev": "cross-env NODE_ENV=development tsup --watch",
39
- "test": "vitest run",
40
- "test:silent": "vitest run --silent=true",
41
- "test:watch": "vitest",
42
- "test:coverage": "vitest run --coverage",
43
- "test:ui": "vitest --ui",
44
- "format": "biome format --write .",
45
- "lint": "biome lint --write .",
46
- "type:check": "tsc --project tsconfig.typecheck.json",
47
- "check": "biome check .",
48
- "check:fix": "biome check --write --unsafe .",
39
+ "dev": "pnpm run build:packages && cross-env NODE_ENV=development tsup --config config/tsup.config.ts --watch",
40
+ "test": "vitest run --config config/vitest.config.ts",
41
+ "test:silent": "vitest run --silent=true --config config/vitest.config.ts",
42
+ "test:watch": "vitest --config config/vitest.config.ts",
43
+ "test:coverage": "vitest run --coverage --config config/vitest.config.ts",
44
+ "test:ui": "vitest --ui --config config/vitest.config.ts",
45
+ "format": "biome format --write --config-path=config/biome.json .",
46
+ "lint": "biome lint --write --config-path=config/biome.json .",
47
+ "type:check": "tsc --project config/tsconfig.typecheck.json",
48
+ "check": "biome check --config-path=config/biome.json .",
49
+ "check:fix": "biome check --write --unsafe --config-path=config/biome.json .",
49
50
  "check:all": "pnpm check && pnpm type:check && pnpm spell:check && pnpm duplicate:check",
50
- "spell:check": "cspell \"src/**/*.ts\" \"*.md\" \"*.json\"",
51
- "duplicate:check": "jscpd src/",
52
- "docker:update-version": "node scripts/update-dockerfile-version.js",
51
+ "spell:check": "cspell --config config/cspell.json .",
52
+ "duplicate:check": "jscpd apps/backend/",
53
+ "docker:update-version": "node docker/scripts/update-version.js",
53
54
  "example": "node --loader ts-node/esm",
54
- "docs:dev": "cd docs && mintlify dev"
55
+ "docs:dev": "cd docs && mintlify dev",
56
+ "release": "npx release-it --config config/release-it.json",
57
+ "release:dry": "npx release-it --config config/release-it.json --dry-run"
55
58
  },
56
59
  "dependencies": {
57
60
  "@hono/node-server": "^1.17.1",
@@ -116,7 +119,11 @@
116
119
  "axios": ">=1.12.0",
117
120
  "@conventional-changelog/git-client": ">=2.0.0",
118
121
  "vite@>=7.1.0 <=7.1.10": ">=7.1.11",
119
- "hono@>=1.1.0 <4.10.3": ">=4.10.3"
122
+ "hono@>=1.1.0 <4.10.3": ">=4.10.3",
123
+ "js-yaml@<4.1.1": ">=4.1.1",
124
+ "esbuild@<=0.24.2": ">=0.25.0",
125
+ "glob@>=10.2.0 <10.5.0": ">=10.5.0",
126
+ "glob@>=11.0.0 <11.1.0": ">=11.1.0"
120
127
  }
121
128
  },
122
129
  "packageManager": "pnpm@10.13.1"
@@ -1,3 +1,11 @@
1
+ ---
2
+ title: MCP 缓存机制开发者指南
3
+ description: 详细介绍了 xiaozhi-client 项目中 MCP 服务工具列表的缓存机制
4
+ sidebar_position: 5
5
+ ---
6
+
7
+ import { Mermaid } from '@theme/Mermaid';
8
+
1
9
  # MCP 缓存机制开发者指南
2
10
 
3
11
  ## 概述
@@ -36,24 +44,7 @@
36
44
 
37
45
  ### 缓存数据的生命周期管理
38
46
 
39
- ```mermaid
40
- graph TD
41
- A[服务启动] --> B{缓存文件存在?}
42
- B -->|否| C[创建初始缓存]
43
- B -->|是| D[加载现有缓存]
44
- C --> E[连接 MCP 服务]
45
- D --> F{缓存有效?}
46
- F -->|是| G[使用缓存数据]
47
- F -->|否| E
48
- E --> H{连接成功?}
49
- H -->|是| I[获取工具列表]
50
- H -->|否| J[记录错误日志]
51
- I --> K[写入缓存]
52
- K --> L[更新元数据]
53
- G --> M[服务就绪]
54
- L --> M
55
- J --> N[降级处理]
56
- ```
47
+ <Mermaid chart={`graph TD A[服务启动] --> B{缓存文件存在?} B -->|否| C[创建初始缓存] B -->|是| D[加载现有缓存] C --> E[连接 MCP 服务] D --> F{缓存有效?} F -->|是| G[使用缓存数据] F -->|否| E E --> H{连接成功?} H -->|是| I[获取工具列表] H -->|否| J[记录错误日志] I --> K[写入缓存] K --> L[更新元数据] G --> M[服务就绪] L --> M J --> N[降级处理]`} />
57
48
 
58
49
  ## 工作流程说明
59
50
 
@@ -61,30 +52,7 @@ graph TD
61
52
 
62
53
  从 MCP 服务启动到缓存写入的完整流程:
63
54
 
64
- ```mermaid
65
- sequenceDiagram
66
- participant U as 用户
67
- participant SM as MCPServiceManager
68
- participant CM as MCPCacheManager
69
- participant MS as MCPService
70
- participant CF as 缓存文件
71
-
72
- U->>SM: xiaozhi start
73
- SM->>CM: 初始化缓存管理器
74
- CM->>CF: 检查缓存文件存在性
75
-
76
- loop 每个 MCP 服务
77
- SM->>MS: 启动服务
78
- MS->>MS: 连接 MCP 服务
79
- MS->>MS: 获取工具列表
80
- MS->>SM: 返回工具列表
81
- SM->>CM: writeCacheEntry()
82
- CM->>CF: 原子写入缓存数据
83
- CM->>SM: 写入完成确认
84
- end
85
-
86
- SM->>U: 所有服务启动完成
87
- ```
55
+ <Mermaid chart={`sequenceDiagram participant U as 用户 participant SM as MCPServiceManager participant CM as MCPCacheManager participant MS as MCPService participant CF as 缓存文件 U->>SM: xiaozhi start SM->>CM: 初始化缓存管理器 CM->>CF: 检查缓存文件存在性 loop 每个 MCP 服务 SM->>MS: 启动服务 MS->>MS: 连接 MCP 服务 MS->>MS: 获取工具列表 MS->>SM: 返回工具列表 SM->>CM: writeCacheEntry() CM->>CF: 原子写入缓存数据 CM->>SM: 写入完成确认 end SM->>U: 所有服务启动完成`} />
88
56
 
89
57
  ### 缓存文件的创建、更新、验证过程
90
58
 
@@ -105,7 +73,7 @@ sequenceDiagram
105
73
 
106
74
  #### 验证过程
107
75
 
108
- 1. **格式验证**: 使用 JSON Schema 验证缓存文件结构
76
+ 1. **格式验证**: 使用 TypeScript 类型检查验证缓存文件结构
109
77
  2. **数据完整性检查**: 验证必要字段的存在和类型
110
78
  3. **版本兼容性**: 检查缓存文件版本与当前代码的兼容性
111
79
  4. **哈希验证**: 比较配置哈希以检测配置变更
@@ -235,9 +203,9 @@ export class MCPServiceManager {
235
203
 
236
204
  ## 数据结构详解
237
205
 
238
- ### JSON Schema 完整结构
206
+ ### 缓存文件结构
239
207
 
240
- 缓存文件遵循以下 JSON Schema 结构:
208
+ 缓存文件遵循以下 JSON 结构:
241
209
 
242
210
  ```json
243
211
  {
@@ -259,6 +227,32 @@ export class MCPServiceManager {
259
227
  }
260
228
  ```
261
229
 
230
+ 对应的 TypeScript 接口定义如下:
231
+
232
+ ```typescript
233
+ interface MCPToolsCache {
234
+ version: string;
235
+ mcpServers: {
236
+ [serverName: string]: MCPToolsCacheEntry;
237
+ };
238
+ metadata: CacheMetadata;
239
+ }
240
+
241
+ interface MCPToolsCacheEntry {
242
+ tools: Tool[];
243
+ lastUpdated: string;
244
+ serverConfig: MCPServiceConfig;
245
+ configHash: string;
246
+ version: string;
247
+ }
248
+
249
+ interface CacheMetadata {
250
+ lastGlobalUpdate: string;
251
+ totalWrites: number;
252
+ createdAt: string;
253
+ }
254
+ ```
255
+
262
256
  ### 各字段的作用和约束条件
263
257
 
264
258
  #### 版本字段 (`version`)
@@ -351,16 +345,21 @@ private generateConfigHash(config: MCPServiceConfig): string {
351
345
  }
352
346
  ```
353
347
 
354
- 2. **更新 JSON Schema**
348
+ 2. **更新验证函数**
355
349
 
356
- ```json
357
- {
358
- "properties": {
359
- "newField": {
360
- "type": "string",
361
- "description": "新字段的描述"
362
- }
363
- }
350
+ ```typescript
351
+ private validateCacheStructure(cache: any): cache is MCPToolsCache {
352
+ return (
353
+ cache &&
354
+ typeof cache === "object" &&
355
+ typeof cache.version === "string" &&
356
+ typeof cache.mcpServers === "object" &&
357
+ cache.metadata &&
358
+ typeof cache.metadata === "object" &&
359
+ typeof cache.metadata.lastGlobalUpdate === "string" &&
360
+ typeof cache.metadata.totalWrites === "number" &&
361
+ typeof cache.metadata.createdAt === "string"
362
+ );
364
363
  }
365
364
  ```
366
365
 
@@ -390,17 +389,6 @@ private generateConfigHash(config: MCPServiceConfig): string {
390
389
  }
391
390
  ```
392
391
 
393
- 2. **更新 Schema 验证规则**
394
- ```json
395
- {
396
- "newField": {
397
- "type": "string",
398
- "minLength": 1,
399
- "pattern": "^[a-zA-Z0-9_-]+$"
400
- }
401
- }
402
- ```
403
-
404
392
  ### 修改缓存结构的步骤和注意事项
405
393
 
406
394
  #### 步骤清单
@@ -424,22 +412,7 @@ private generateConfigHash(config: MCPServiceConfig): string {
424
412
  private readonly CACHE_VERSION = "2.0.0";
425
413
  ```
426
414
 
427
- 3. **更新 JSON Schema**
428
-
429
- ```json
430
- {
431
- "version": "2.0.0",
432
- "properties": {
433
- "newField": {
434
- "type": "string",
435
- "description": "新字段描述"
436
- }
437
- },
438
- "required": ["existingFields", "newField"]
439
- }
440
- ```
441
-
442
- 4. **实现向后兼容**
415
+ 3. **实现向后兼容**
443
416
 
444
417
  ```typescript
445
418
  private migrateCache(cache: any): MCPToolsCache {
@@ -454,7 +427,7 @@ private generateConfigHash(config: MCPServiceConfig): string {
454
427
  }
455
428
  ```
456
429
 
457
- 5. **更新测试用例**
430
+ 4. **更新测试用例**
458
431
 
459
432
  ```typescript
460
433
  it("应该支持新字段", async () => {
@@ -477,7 +450,7 @@ private generateConfigHash(config: MCPServiceConfig): string {
477
450
  - **版本兼容性**: 主版本号变更表示不兼容的结构变更
478
451
  - **数据迁移**: 提供从旧版本到新版本的迁移逻辑
479
452
  - **测试覆盖**: 确保新功能有完整的测试覆盖
480
- - **文档更新**: 同步更新 Schema 文档和使用说明
453
+ - **文档更新**: 同步更新接口文档和使用说明
481
454
 
482
455
  ### 代码贡献的最佳实践
483
456
 
@@ -705,16 +678,11 @@ describe("MCPCacheManager", () => {
705
678
  cat xiaozhi.cache.json | jq . || echo "JSON 格式错误"
706
679
  ```
707
680
 
708
- 3. 检查 Schema 文件是否存在
709
- ```bash
710
- ls -la xiaozhi.cache.schema.json
711
- ```
712
-
713
681
  **解决方案**:
714
682
 
715
683
  - 删除损坏的缓存文件,重新生成
716
- - 更新 Schema 文件到最新版本
717
684
  - 检查缓存文件中的时间戳格式
685
+ - 确保所有必需字段都存在
718
686
 
719
687
  #### 问题 3: 配置变更未检测到
720
688
 
@@ -880,7 +848,7 @@ xiaozhi 的 MCP 缓存机制通过智能的数据缓存和配置变更检测,
880
848
 
881
849
  ## 版本兼容性
882
850
 
883
- 当前 Schema 版本: `1.0.0`
851
+ 当前缓存文件格式版本: `1.0.0`
884
852
 
885
853
  ### 版本升级策略
886
854
 
@@ -890,9 +858,8 @@ xiaozhi 的 MCP 缓存机制通过智能的数据缓存和配置变更检测,
890
858
 
891
859
  ## 相关文件
892
860
 
893
- - `xiaozhi.cache.schema.json`: JSON Schema 定义文件
894
861
  - `src/services/MCPCacheManager.ts`: 缓存管理器实现
895
- - `xiaozhi.cache.json`: 实际的缓存文件
862
+ - `xiaozhi.cache.json`: 实际的缓存文件(运行时生成)
896
863
 
897
864
  ## 注意事项
898
865
 
@@ -907,12 +874,12 @@ xiaozhi 的 MCP 缓存机制通过智能的数据缓存和配置变更检测,
907
874
 
908
875
  1. **时间格式错误**: 确保时间戳符合 YYYY-MM-DD HH:mm:ss 格式
909
876
  2. **缺少必需字段**: 检查所有必需字段是否存在
910
- 3. **类型不匹配**: 确保字段类型与 Schema 定义一致
877
+ 3. **类型不匹配**: 确保字段类型与接口定义一致
911
878
  4. **格式不符**: 检查版本号、哈希值等格式是否正确
912
879
 
913
880
  ### 修复建议
914
881
 
915
882
  1. 使用 `jq` 工具检查 JSON 格式和内容
916
- 2. 参考示例文件修正格式问题
883
+ 2. 参考接口定义修正格式问题
917
884
  3. 重新生成缓存文件(删除现有文件,重启服务)
918
- 4. 检查 MCPCacheManager 的实现逻辑
885
+ 4. 检查 MCPCacheManager 的实现逻辑