opc-agent 1.1.1 → 1.1.2

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 (139) hide show
  1. package/CHANGELOG.md +51 -51
  2. package/CONTRIBUTING.md +75 -75
  3. package/README.md +222 -126
  4. package/README.zh-CN.md +129 -80
  5. package/dist/channels/web.js +256 -256
  6. package/dist/deploy/hermes.js +22 -22
  7. package/dist/deploy/openclaw.js +31 -31
  8. package/dist/templates/code-reviewer.js +5 -5
  9. package/dist/templates/customer-service.js +2 -2
  10. package/dist/templates/data-analyst.js +5 -5
  11. package/dist/templates/knowledge-base.js +2 -2
  12. package/dist/templates/sales-assistant.js +4 -4
  13. package/dist/templates/teacher.js +6 -6
  14. package/docs/.vitepress/config.ts +103 -103
  15. package/docs/api/cli.md +48 -48
  16. package/docs/api/oad-schema.md +64 -64
  17. package/docs/api/sdk.md +80 -80
  18. package/docs/guide/concepts.md +51 -51
  19. package/docs/guide/configuration.md +79 -79
  20. package/docs/guide/deployment.md +42 -42
  21. package/docs/guide/getting-started.md +44 -44
  22. package/docs/guide/templates.md +28 -28
  23. package/docs/guide/testing.md +84 -84
  24. package/docs/index.md +27 -27
  25. package/docs/zh/api/cli.md +54 -54
  26. package/docs/zh/api/oad-schema.md +87 -87
  27. package/docs/zh/api/sdk.md +102 -102
  28. package/docs/zh/guide/concepts.md +104 -104
  29. package/docs/zh/guide/configuration.md +135 -135
  30. package/docs/zh/guide/deployment.md +81 -81
  31. package/docs/zh/guide/getting-started.md +82 -82
  32. package/docs/zh/guide/templates.md +84 -84
  33. package/docs/zh/guide/testing.md +88 -88
  34. package/docs/zh/index.md +27 -27
  35. package/examples/customer-service-demo/README.md +90 -90
  36. package/examples/customer-service-demo/oad.yaml +107 -107
  37. package/package.json +1 -1
  38. package/src/analytics/index.ts +66 -66
  39. package/src/channels/discord.ts +192 -192
  40. package/src/channels/email.ts +177 -177
  41. package/src/channels/feishu.ts +236 -236
  42. package/src/channels/index.ts +15 -15
  43. package/src/channels/slack.ts +160 -160
  44. package/src/channels/telegram.ts +90 -90
  45. package/src/channels/voice.ts +106 -106
  46. package/src/channels/web.ts +596 -596
  47. package/src/channels/webhook.ts +199 -199
  48. package/src/channels/websocket.ts +87 -87
  49. package/src/channels/wechat.ts +149 -149
  50. package/src/core/a2a.ts +143 -143
  51. package/src/core/agent.ts +152 -152
  52. package/src/core/analytics-engine.ts +186 -186
  53. package/src/core/auth.ts +57 -57
  54. package/src/core/cache.ts +141 -141
  55. package/src/core/compose.ts +77 -77
  56. package/src/core/config.ts +14 -14
  57. package/src/core/errors.ts +148 -148
  58. package/src/core/hitl.ts +138 -138
  59. package/src/core/knowledge.ts +210 -210
  60. package/src/core/logger.ts +57 -57
  61. package/src/core/orchestrator.ts +215 -215
  62. package/src/core/performance.ts +187 -187
  63. package/src/core/rate-limiter.ts +128 -128
  64. package/src/core/room.ts +109 -109
  65. package/src/core/runtime.ts +152 -152
  66. package/src/core/sandbox.ts +101 -101
  67. package/src/core/security.ts +171 -171
  68. package/src/core/types.ts +68 -68
  69. package/src/core/versioning.ts +106 -106
  70. package/src/core/watch.ts +178 -178
  71. package/src/core/workflow.ts +235 -235
  72. package/src/deploy/hermes.ts +156 -156
  73. package/src/deploy/openclaw.ts +200 -200
  74. package/src/dtv/data.ts +29 -29
  75. package/src/dtv/trust.ts +43 -43
  76. package/src/dtv/value.ts +47 -47
  77. package/src/i18n/index.ts +216 -216
  78. package/src/index.ts +110 -110
  79. package/src/marketplace/index.ts +223 -223
  80. package/src/memory/deepbrain.ts +108 -108
  81. package/src/memory/index.ts +34 -34
  82. package/src/plugins/index.ts +208 -208
  83. package/src/providers/index.ts +183 -183
  84. package/src/schema/oad.ts +155 -155
  85. package/src/skills/base.ts +16 -16
  86. package/src/skills/document.ts +100 -100
  87. package/src/skills/http.ts +35 -35
  88. package/src/skills/index.ts +27 -27
  89. package/src/skills/scheduler.ts +80 -80
  90. package/src/skills/webhook-trigger.ts +59 -59
  91. package/src/templates/code-reviewer.ts +34 -34
  92. package/src/templates/customer-service.ts +80 -80
  93. package/src/templates/data-analyst.ts +70 -70
  94. package/src/templates/executive-assistant.ts +71 -71
  95. package/src/templates/financial-advisor.ts +60 -60
  96. package/src/templates/knowledge-base.ts +31 -31
  97. package/src/templates/legal-assistant.ts +71 -71
  98. package/src/templates/sales-assistant.ts +79 -79
  99. package/src/templates/teacher.ts +79 -79
  100. package/src/testing/index.ts +181 -181
  101. package/src/tools/calculator.ts +73 -73
  102. package/src/tools/datetime.ts +149 -149
  103. package/src/tools/json-transform.ts +187 -187
  104. package/src/tools/mcp.ts +76 -76
  105. package/src/tools/text-analysis.ts +116 -116
  106. package/templates/Dockerfile +15 -15
  107. package/templates/code-reviewer/README.md +27 -27
  108. package/templates/code-reviewer/oad.yaml +41 -41
  109. package/templates/customer-service/README.md +22 -22
  110. package/templates/customer-service/oad.yaml +36 -36
  111. package/templates/docker-compose.yml +21 -21
  112. package/templates/knowledge-base/README.md +28 -28
  113. package/templates/knowledge-base/oad.yaml +38 -38
  114. package/templates/sales-assistant/README.md +26 -26
  115. package/templates/sales-assistant/oad.yaml +43 -43
  116. package/tests/a2a.test.ts +66 -66
  117. package/tests/agent.test.ts +72 -72
  118. package/tests/analytics.test.ts +50 -50
  119. package/tests/channel.test.ts +39 -39
  120. package/tests/e2e.test.ts +134 -134
  121. package/tests/errors.test.ts +83 -83
  122. package/tests/hitl.test.ts +71 -71
  123. package/tests/i18n.test.ts +41 -41
  124. package/tests/mcp.test.ts +54 -54
  125. package/tests/oad.test.ts +68 -68
  126. package/tests/performance.test.ts +115 -115
  127. package/tests/plugin.test.ts +74 -74
  128. package/tests/room.test.ts +106 -106
  129. package/tests/runtime.test.ts +42 -42
  130. package/tests/sandbox.test.ts +46 -46
  131. package/tests/security.test.ts +60 -60
  132. package/tests/templates.test.ts +77 -77
  133. package/tests/v070.test.ts +76 -76
  134. package/tests/versioning.test.ts +75 -75
  135. package/tests/voice.test.ts +61 -61
  136. package/tests/webhook.test.ts +29 -29
  137. package/tests/workflow.test.ts +143 -143
  138. package/tsconfig.json +19 -19
  139. package/vitest.config.ts +9 -9
package/README.zh-CN.md CHANGED
@@ -4,7 +4,7 @@
4
4
  <p align="center">
5
5
  <a href="https://www.npmjs.com/package/opc-agent"><img src="https://img.shields.io/npm/v/opc-agent?color=blue" alt="npm 版本"></a>
6
6
  <a href="https://github.com/Deepleaper/opc-agent/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-green" alt="开源协议"></a>
7
- <a href="https://github.com/Deepleaper/opc-agent/actions"><img src="https://img.shields.io/badge/tests-passing-brightgreen" alt="测试状态"></a>
7
+ <img src="https://img.shields.io/badge/tests-146%20passed-brightgreen" alt="146 个测试通过">
8
8
  <a href="https://www.npmjs.com/package/opc-agent"><img src="https://img.shields.io/npm/dm/opc-agent?color=orange" alt="下载量"></a>
9
9
  </p>
10
10
  <p align="center">
@@ -18,9 +18,9 @@
18
18
 
19
19
  OPC Agent 是一个 **TypeScript 优先的开放智能体框架**,由 [跃盟科技 (Deepleaper)](https://www.deepleaper.com) 开发维护。
20
20
 
21
- 一句话概括:**用一个 YAML 文件定义智能体,接入任意大语言模型,一键部署到多个渠道。**
21
+ 一句话概括:**用一个 YAML 文件(OAD)定义智能体,接入任意大语言模型,一键部署到多个渠道。**
22
22
 
23
- 不需要写一堆胶水代码,不需要自己搞 Prompt 管理,也不需要操心渠道对接。定义好 OAD 文件,`opc run` 就完事了。
23
+ 不需要写胶水代码,不需要自己管理 Prompt,不需要操心渠道对接。定义好 OAD 文件,`opc run` 就完事了。
24
24
 
25
25
  ## ⚡ 快速开始(30 秒上手)
26
26
 
@@ -38,21 +38,14 @@ cd my-agent
38
38
  opc run
39
39
  ```
40
40
 
41
- 打开浏览器访问 `http://localhost:3000`,你的智能体已经在线了,自带一个好看的对话界面。
41
+ 打开浏览器访问 `http://localhost:3000`,内置 Web 对话界面即刻可用。
42
42
 
43
- ### 用模板快速创建
43
+ ### 使用模板快速创建
44
44
 
45
45
  ```bash
46
- # 客服智能体
47
- opc init my-service --template customer-service
48
-
49
- # 销售助手
50
- opc init my-sales --template sales-assistant
51
-
52
- # 知识库问答
53
- opc init my-kb --template knowledge-base
54
-
55
- # 代码审查
46
+ opc init my-service --template customer-service
47
+ opc init my-sales --template sales-assistant
48
+ opc init my-kb --template knowledge-base
56
49
  opc init my-reviewer --template code-reviewer
57
50
  ```
58
51
 
@@ -63,7 +56,7 @@ opc init my-reviewer --template code-reviewer
63
56
  ```yaml
64
57
  spec:
65
58
  provider:
66
- default: deepseek # 默认用 DeepSeek
59
+ default: deepseek
67
60
  allowed: [openai, deepseek, qwen, anthropic, ollama]
68
61
  model: deepseek-chat
69
62
  ```
@@ -76,21 +69,22 @@ spec:
76
69
  - **Ollama** — 本地部署,数据不出门
77
70
  - 任何兼容 OpenAI 接口的服务
78
71
 
79
- ### 📡 多渠道部署 — 一套代码,到处运行
72
+ ### 📡 10 个渠道,一套代码,到处运行
80
73
 
81
74
  ```yaml
82
75
  spec:
83
76
  channels:
84
- - type: web # 🌐 Web 对话界面
77
+ - type: web # 🌐 Web 对话界面(内置 UI)
85
78
  port: 3000
86
79
  - type: telegram # ✈️ Telegram 机器人
87
80
  - type: websocket # 🔗 实时 WebSocket
88
- - type: slack # 💬 Slack 集成
89
- - type: email # 📧 邮件渠道
81
+ - type: slack # 💬 Slack Bot(Socket Mode / Events API)
82
+ - type: email # 📧 IMAP 收信 + SMTP 回信
90
83
  - type: wechat # 💚 微信公众号
91
- - type: feishu # 🔵 飞书
92
- - type: voice # 🎙️ 语音(STT/TTS
93
- - type: webhook # 🔔 Webhook 回调
84
+ - type: feishu # 🔵 飞书 / Lark 消息卡片
85
+ - type: voice # 🎙️ 语音(STT/TTS,可配置供应商)
86
+ - type: webhook # 🔔 Webhook 接收 + HTTP 回调
87
+ - type: discord # 🎮 Discord Bot(斜杠命令 + 线程 + Embed)
94
88
  ```
95
89
 
96
90
  ### 🧠 知识库(RAG)— 让智能体拥有你的专业知识
@@ -101,7 +95,18 @@ import { KnowledgeBase } from 'opc-agent';
101
95
  const kb = new KnowledgeBase('./docs');
102
96
  await kb.addFile('产品手册.pdf');
103
97
  await kb.addFile('常见问题.md');
104
- // 智能体回答时自动检索知识库,生成更准确的回答
98
+ // 智能体回答时自动检索知识库
99
+ ```
100
+
101
+ 内置 TF-IDF 向量化 + 余弦相似度检索,500 字符分块 + 50 字符重叠,数据持久化到 `.opc-knowledge.json`,无需外部向量数据库。
102
+
103
+ CLI 操作:
104
+
105
+ ```bash
106
+ opc kb add 产品手册.pdf # 添加文件
107
+ opc kb search "退款政策" # 搜索
108
+ opc kb stats # 查看统计
109
+ opc kb clear # 清空
105
110
  ```
106
111
 
107
112
  ### 🎭 多智能体编排 — 分工协作,按需路由
@@ -111,10 +116,12 @@ import { Orchestrator } from 'opc-agent';
111
116
 
112
117
  const orchestrator = new Orchestrator({
113
118
  agents: [分诊智能体, 销售智能体, 客服智能体],
114
- strategy: 'route-by-intent', // 按用户意图自动路由
119
+ strategy: 'route-by-intent',
115
120
  });
116
121
  ```
117
122
 
123
+ 支持:顺序执行、并行执行、条件路由、智能体移交(handoff)。
124
+
118
125
  ### 🧪 内置测试 — 发布前验证智能体行为
119
126
 
120
127
  ```yaml
@@ -151,23 +158,29 @@ spec:
151
158
  config: { maxPerMinute: 60 }
152
159
  ```
153
160
 
154
- 支持自定义插件,提供完整的生命周期钩子:`onInit`、`onMessage`、`onResponse`、`onError`、`onShutdown`。
161
+ 完整生命周期钩子:`onInit`、`onMessage`、`onResponse`、`onError`、`onShutdown`。
155
162
 
156
163
  ### 🔒 安全特性
157
164
 
158
165
  - 输入消毒(防 XSS、注入攻击)
159
166
  - API Key 轮换管理
160
167
  - CORS 跨域配置
161
- - 安全响应头(Helmet 风格)
162
- - Content Security Policy
163
- - 会话隔离的认证中间件
168
+ - 安全响应头
169
+ - 会话隔离认证中间件
164
170
 
165
171
  ### 📊 监控与分析
166
172
 
167
- - `/api/health` — 健康检查接口
168
- - `/api/metrics` — Prometheus 兼容指标
169
- - `/api/dashboard` 实时仪表盘 UI
170
- - 对话记录导出(JSON / Markdown / CSV)
173
+ Web 渠道内置以下端点:
174
+
175
+ | 端点 | 说明 |
176
+ |------|------|
177
+ | `GET /api/health` | 健康检查 |
178
+ | `GET /api/metrics` | Prometheus 文本格式指标 |
179
+ | `GET /api/dashboard` | 实时仪表盘 UI |
180
+
181
+ Prometheus 暴露的指标:`opc_uptime_seconds`、`opc_requests_total`、`opc_messages_total`、`opc_errors_total`、`opc_llm_latency_avg_ms`、`opc_sessions_total`、`opc_token_usage_total`、`process_resident_memory_bytes`。
182
+
183
+ `opc analytics` 和 `opc stats` 命令可查看离线分析快照(历史事件存储在 `data/analytics.json`)。
171
184
 
172
185
  ## 🏗️ 架构设计
173
186
 
@@ -179,8 +192,7 @@ spec:
179
192
  │ │
180
193
  │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
181
194
  │ │ 渠道层 │ │ 插件层 │ │ 安全层 │ │
182
- │ │ Web, TG, │ │ 日志, │ 消毒, CORS,
183
- │ │ WS, 微信 │ │ 分析 │ │ 认证 │ │
195
+ │ │10 个渠道 │ │ 日志/分析│消毒/CORS/认证│
184
196
  │ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
185
197
  │ │ │ │ │
186
198
  │ ┌────▼──────────────▼───────────────▼────────┐ │
@@ -188,8 +200,8 @@ spec:
188
200
  │ │ │ │
189
201
  │ │ ┌─────────┐ ┌────────┐ ┌─────────────┐ │ │
190
202
  │ │ │ 记忆 │ │ 技能 │ │ 知识库 │ │ │
191
- │ │ │ 短期+ │ │ FAQ, │ │ RAG 检索 │ │ │
192
- │ │ │ 长期 │ │ 转接 │ │ │ │ │
203
+ │ │ │ 短期+ │ │ HTTP, │ │ TF-IDF RAG │ │ │
204
+ │ │ │ 长期 │ │ 调度 │ │ │ │ │
193
205
  │ │ └─────────┘ └────────┘ └─────────────┘ │ │
194
206
  │ └────────────────────┬───────────────────────┘ │
195
207
  │ │ │
@@ -200,7 +212,11 @@ spec:
200
212
  └─────────────────────────────────────────────────┘
201
213
  ```
202
214
 
203
- ## 📋 全部模板(12 个)
215
+ ## 📋 12 个开箱即用模板
216
+
217
+ ```bash
218
+ opc init my-agent --template <模板名>
219
+ ```
204
220
 
205
221
  | 模板 | 说明 | 典型场景 |
206
222
  |------|------|---------|
@@ -222,35 +238,42 @@ spec:
222
238
  ### 本地开发
223
239
 
224
240
  ```bash
225
- opc dev # 热重载开发模式
241
+ opc dev # 文件监听热重载
226
242
  ```
227
243
 
228
244
  ### Docker 部署
229
245
 
246
+ `opc init` 创建的每个项目都自带 `Dockerfile` 和 `docker-compose.yml`:
247
+
230
248
  ```bash
231
- # 每个 opc init 项目都自带 Dockerfile 和 docker-compose.yml
232
249
  docker compose up -d
233
250
  ```
234
251
 
252
+ `Dockerfile` 使用 `node:22-alpine`,仅安装生产依赖,暴露端口 3000,以 `npx opc run` 启动。
253
+
235
254
  ### 部署到 OpenClaw
236
255
 
237
256
  ```bash
238
257
  opc deploy --target openclaw
239
- opc deploy --target openclaw --install # 同时注册到配置
258
+ opc deploy --target openclaw --install # 同时写入本地配置
240
259
  ```
241
260
 
242
- ### 部署到 Hermes
261
+ `~/.openclaw/agents/{id}/workspace/` 下生成:`IDENTITY.md`(元数据)、`SOUL.md`(系统提示词 + 模型配置)、`AGENTS.md`(技能 + 记忆 + DTV 配置)。
262
+
263
+ ### 部署到 Hermes
243
264
 
244
265
  ```bash
245
266
  opc deploy --target hermes
246
267
  ```
247
268
 
269
+ 将 OAD 转换为 Hermes Character 格式,包含 personality、bio、lore、message examples、style guides(chat / post / all)。
270
+
248
271
  ### 环境变量
249
272
 
250
273
  ```bash
251
274
  # .env
252
275
  OPC_LLM_API_KEY=your-api-key
253
- OPC_LLM_BASE_URL=https://api.deepseek.com/v1 # DeepSeek
276
+ OPC_LLM_BASE_URL=https://api.deepseek.com/v1
254
277
  OPC_LLM_MODEL=deepseek-chat
255
278
  ```
256
279
 
@@ -258,20 +281,32 @@ OPC_LLM_MODEL=deepseek-chat
258
281
 
259
282
  | 命令 | 说明 |
260
283
  |------|------|
261
- | `opc init [name]` | 创建新智能体项目(交互式) |
284
+ | `opc init [name]` | 创建新智能体项目(交互式,可选模板) |
262
285
  | `opc create <name>` | 从模板快速创建 |
263
286
  | `opc run` | 启动智能体服务 |
264
- | `opc dev` | 开发模式(热重载) |
265
- | `opc chat` | 命令行交互对话 |
266
- | `opc test` | 运行测试用例 |
267
- | `opc build` | 校验 OAD 配置 |
287
+ | `opc dev` | 开发模式(文件监听热重载) |
288
+ | `opc chat` | 命令行交互对话(readline 界面) |
289
+ | `opc test` | 运行 OAD 中定义的测试用例 |
290
+ | `opc build` | 校验 OAD 配置合法性 |
268
291
  | `opc info` | 查看智能体信息 |
269
292
  | `opc analytics` | 查看使用分析 |
270
- | `opc deploy` | 部署智能体 |
271
- | `opc publish` | 发布到市场 |
272
- | `opc kb add <file>` | 添加知识库文件 |
293
+ | `opc stats` | 查看运行时统计快照 |
294
+ | `opc deploy` | 部署智能体(`--target openclaw\|hermes`) |
295
+ | `opc kb add <file>` | 向知识库添加文件 |
273
296
  | `opc kb search <query>` | 搜索知识库 |
274
- | `opc stats` | 查看运行时统计 |
297
+ | `opc kb stats` | 知识库统计 |
298
+ | `opc kb clear` | 清空知识库 |
299
+ | `opc search` | 搜索 OPC Registry |
300
+ | `opc tool` | MCP 工具管理 |
301
+ | `opc workflow run` | 运行工作流 |
302
+ | `opc workflow list` | 列出工作流 |
303
+ | `opc version-mgmt list` | 列出历史版本 |
304
+ | `opc version-mgmt rollback` | 回滚版本 |
305
+ | `opc publish` | 打包发布智能体 |
306
+ | `opc install <pkg>` | 安装智能体包 |
307
+ | `opc plugin list` | 列出已安装插件 |
308
+ | `opc plugin add <name>` | 添加插件 |
309
+ | `opc migrate` | OAD Schema 迁移 |
275
310
 
276
311
  ## 🔗 SDK 参考
277
312
 
@@ -281,12 +316,13 @@ import { AgentRuntime, KnowledgeBase, Orchestrator } from 'opc-agent';
281
316
  // 创建并启动智能体
282
317
  const runtime = new AgentRuntime();
283
318
  await runtime.loadConfig('oad.yaml');
284
- const agent = await runtime.initialize();
319
+ await runtime.initialize();
285
320
  await runtime.start();
286
321
 
287
322
  // 使用知识库
288
323
  const kb = new KnowledgeBase('./docs');
289
324
  await kb.addFile('handbook.pdf');
325
+ const results = await kb.search('退款政策');
290
326
 
291
327
  // 多智能体编排
292
328
  const orch = new Orchestrator({
@@ -295,66 +331,79 @@ const orch = new Orchestrator({
295
331
  });
296
332
  ```
297
333
 
298
- ## 🔑 OAD 配置文件说明
334
+ ## 🔑 OAD 配置文件完整说明
299
335
 
300
336
  OAD(Open Agent Definition)是智能体的声明式定义格式:
301
337
 
302
338
  ```yaml
303
- apiVersion: opc/v1 # API 版本
304
- kind: Agent # 资源类型
339
+ apiVersion: opc/v1
340
+ kind: Agent
305
341
 
306
342
  metadata:
307
- name: my-agent # 智能体名称
308
- version: 1.0.0 # 版本号
309
- description: 我的智能体 # 描述
343
+ name: my-agent
344
+ version: 1.0.0
345
+ description: 我的智能体
310
346
 
311
347
  spec:
312
348
  provider:
313
- default: deepseek # 默认供应商
314
- allowed: [deepseek, openai, qwen]
315
- model: deepseek-chat # 模型
316
- systemPrompt: | # 系统提示词
349
+ default: deepseek
350
+ allowed: [deepseek, openai, qwen, anthropic, ollama]
351
+ model: deepseek-chat
352
+ systemPrompt: |
317
353
  你是一个专业的客服助手...
318
354
 
319
- skills: [] # 技能列表
320
- channels: # 渠道配置
355
+ skills: []
356
+
357
+ channels:
321
358
  - type: web
322
359
  port: 3000
323
360
 
324
361
  memory:
325
- shortTerm: true # 短期记忆(对话上下文)
326
- longTerm: false # 长期记忆(跨会话)
362
+ shortTerm: true # 对话上下文记忆
363
+ longTerm: false # 跨会话持久记忆
327
364
 
328
- rateLimits: # 限流
365
+ rateLimits:
329
366
  perUser:
330
367
  maxRequests: 60
331
368
  windowMs: 60000
332
369
 
333
- cache: # 缓存(降低 API 开销)
370
+ cache:
334
371
  enabled: true
335
372
  ttlMs: 3600000
336
- ```
337
373
 
338
- ## 🤝 贡献指南
374
+ plugins:
375
+ - name: logging
376
+ - name: analytics
377
+ - name: rate-limit
378
+ config: { maxPerMinute: 60 }
339
379
 
340
- 我们欢迎所有形式的贡献!
380
+ testing:
381
+ cases:
382
+ - name: 基本问候
383
+ input: "你好"
384
+ expect:
385
+ contains: ["你好"]
386
+ maxLatencyMs: 5000
387
+ ```
341
388
 
342
- 1. Fork 本仓库
343
- 2. 创建功能分支:`git checkout -b feat/awesome-feature`
344
- 3. 编写代码和测试
345
- 4. 确保测试通过:`npm test`
346
- 5. 提交 Pull Request
389
+ ## 🤝 贡献指南
347
390
 
348
- ### 本地开发环境
391
+ 欢迎所有形式的贡献!
349
392
 
350
393
  ```bash
351
394
  git clone https://github.com/Deepleaper/opc-agent.git
352
395
  cd opc-agent
353
396
  npm install
354
- npm run build
355
- npm test
397
+ npm run build # TypeScript 编译
398
+ npm test # 运行 146 个测试(22 个测试文件)
356
399
  ```
357
400
 
401
+ 1. Fork 本仓库
402
+ 2. 创建功能分支:`git checkout -b feat/awesome-feature`
403
+ 3. 编写代码和测试
404
+ 4. 确保测试通过:`npm test`
405
+ 5. 提交 Pull Request
406
+
358
407
  ## 📄 开源协议
359
408
 
360
409
  [Apache License 2.0](LICENSE) — 商用和开源项目均可自由使用。