opc-agent 4.1.0 → 4.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 (258) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +20 -20
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +14 -14
  3. package/.github/PULL_REQUEST_TEMPLATE.md +13 -13
  4. package/CHANGELOG.md +48 -48
  5. package/CONTRIBUTING.md +36 -36
  6. package/README.zh-CN.md +497 -497
  7. package/USABILITY-ISSUES.md +73 -0
  8. package/dist/channels/web.js +8 -2
  9. package/dist/channels/wechat.js +6 -6
  10. package/dist/cli.js +200 -85
  11. package/dist/core/runtime.js +37 -15
  12. package/dist/deploy/index.js +56 -56
  13. package/dist/doctor.d.ts +1 -0
  14. package/dist/doctor.js +105 -10
  15. package/dist/memory/deepbrain.d.ts +1 -1
  16. package/dist/memory/deepbrain.js +95 -4
  17. package/dist/scheduler/cron-engine.js +3 -36
  18. package/dist/studio/server.js +30 -1
  19. package/dist/studio-ui/index.html +230 -10
  20. package/dist/ui/components.js +105 -105
  21. package/examples/README.md +22 -22
  22. package/examples/basic-agent.ts +90 -90
  23. package/examples/brain-integration.ts +71 -71
  24. package/examples/multi-channel.ts +74 -74
  25. package/fix-sidebar.mjs +188 -188
  26. package/install.ps1 +154 -154
  27. package/install.sh +164 -164
  28. package/package.json +1 -1
  29. package/scripts/install.ps1 +31 -31
  30. package/scripts/install.sh +40 -40
  31. package/serve-studio.js +13 -13
  32. package/serve-test.js +25 -25
  33. package/src/channels/dingtalk.ts +46 -46
  34. package/src/channels/email.ts +351 -351
  35. package/src/channels/feishu.ts +349 -349
  36. package/src/channels/googlechat.ts +42 -42
  37. package/src/channels/imessage.ts +31 -31
  38. package/src/channels/irc.ts +82 -82
  39. package/src/channels/line.ts +32 -32
  40. package/src/channels/matrix.ts +33 -33
  41. package/src/channels/mattermost.ts +57 -57
  42. package/src/channels/msteams.ts +32 -32
  43. package/src/channels/nostr.ts +32 -32
  44. package/src/channels/qq.ts +33 -33
  45. package/src/channels/signal.ts +32 -32
  46. package/src/channels/sms.ts +33 -33
  47. package/src/channels/telegram.ts +616 -616
  48. package/src/channels/twitch.ts +65 -65
  49. package/src/channels/voice-call.ts +100 -100
  50. package/src/channels/web.ts +8 -2
  51. package/src/channels/websocket.ts +399 -399
  52. package/src/channels/wechat.ts +329 -329
  53. package/src/channels/whatsapp.ts +32 -32
  54. package/src/cli/chat.ts +99 -99
  55. package/src/cli/setup.ts +314 -314
  56. package/src/cli.ts +195 -92
  57. package/src/core/agent.ts +476 -476
  58. package/src/core/api-server.ts +277 -277
  59. package/src/core/audio.ts +98 -98
  60. package/src/core/collaboration.ts +275 -275
  61. package/src/core/context-discovery.ts +85 -85
  62. package/src/core/context-refs.ts +140 -140
  63. package/src/core/gateway.ts +106 -106
  64. package/src/core/heartbeat.ts +51 -51
  65. package/src/core/hooks.ts +105 -105
  66. package/src/core/ide-bridge.ts +133 -133
  67. package/src/core/node-network.ts +86 -86
  68. package/src/core/profiles.ts +122 -122
  69. package/src/core/runtime.ts +25 -0
  70. package/src/core/scheduler.ts +187 -187
  71. package/src/core/session-manager.ts +137 -137
  72. package/src/core/subagent.ts +98 -98
  73. package/src/core/vision.ts +180 -180
  74. package/src/core/workflow-graph.ts +365 -365
  75. package/src/daemon.ts +96 -96
  76. package/src/deploy/index.ts +255 -255
  77. package/src/doctor.ts +98 -11
  78. package/src/eval/index.ts +211 -211
  79. package/src/eval/suites/basic.json +16 -16
  80. package/src/eval/suites/memory.json +12 -12
  81. package/src/eval/suites/safety.json +14 -14
  82. package/src/hub/brain-seed.ts +54 -54
  83. package/src/hub/client.ts +60 -60
  84. package/src/mcp/servers/calculator-mcp.ts +65 -65
  85. package/src/mcp/servers/crypto-mcp.ts +73 -73
  86. package/src/mcp/servers/database-mcp.ts +72 -72
  87. package/src/mcp/servers/datetime-mcp.ts +69 -69
  88. package/src/mcp/servers/filesystem.ts +66 -66
  89. package/src/mcp/servers/github-mcp.ts +58 -58
  90. package/src/mcp/servers/index.ts +63 -63
  91. package/src/mcp/servers/json-mcp.ts +102 -102
  92. package/src/mcp/servers/memory-mcp.ts +56 -56
  93. package/src/mcp/servers/regex-mcp.ts +53 -53
  94. package/src/mcp/servers/web-mcp.ts +49 -49
  95. package/src/memory/context-compressor.ts +189 -189
  96. package/src/memory/deepbrain.ts +99 -5
  97. package/src/memory/seed-loader.ts +212 -212
  98. package/src/memory/user-profiler.ts +215 -215
  99. package/src/plugins/content-filter.ts +23 -23
  100. package/src/plugins/logger.ts +18 -18
  101. package/src/plugins/rate-limiter.ts +38 -38
  102. package/src/protocols/a2a/client.ts +132 -132
  103. package/src/protocols/a2a/index.ts +8 -8
  104. package/src/protocols/a2a/server.ts +333 -333
  105. package/src/protocols/a2a/types.ts +88 -88
  106. package/src/protocols/a2a/utils.ts +50 -50
  107. package/src/protocols/agui/client.ts +83 -83
  108. package/src/protocols/agui/index.ts +4 -4
  109. package/src/protocols/agui/server.ts +218 -218
  110. package/src/protocols/agui/types.ts +153 -153
  111. package/src/protocols/index.ts +2 -2
  112. package/src/protocols/mcp/agent-tools.ts +134 -134
  113. package/src/protocols/mcp/index.ts +8 -8
  114. package/src/protocols/mcp/server.ts +262 -262
  115. package/src/protocols/mcp/types.ts +69 -69
  116. package/src/providers/index.ts +632 -632
  117. package/src/publish/index.ts +376 -376
  118. package/src/scheduler/cron-engine.ts +191 -191
  119. package/src/scheduler/index.ts +2 -2
  120. package/src/schema/oad.ts +217 -217
  121. package/src/security/approval.ts +131 -131
  122. package/src/security/approvals.ts +143 -143
  123. package/src/security/elevated.ts +105 -105
  124. package/src/security/guardrails.ts +248 -248
  125. package/src/security/index.ts +9 -9
  126. package/src/security/keys.ts +87 -87
  127. package/src/security/secrets.ts +129 -129
  128. package/src/skills/builtin/index.ts +408 -408
  129. package/src/skills/marketplace.ts +113 -113
  130. package/src/skills/types.ts +42 -42
  131. package/src/studio/server.ts +31 -1
  132. package/src/studio/templates-data.ts +178 -178
  133. package/src/studio-ui/index.html +230 -10
  134. package/src/telemetry/index.ts +324 -324
  135. package/src/tools/builtin/browser.ts +299 -299
  136. package/src/tools/builtin/datetime.ts +41 -41
  137. package/src/tools/builtin/file.ts +107 -107
  138. package/src/tools/builtin/home-assistant.ts +116 -116
  139. package/src/tools/builtin/rl-tools.ts +243 -243
  140. package/src/tools/builtin/shell.ts +43 -43
  141. package/src/tools/builtin/vision.ts +64 -64
  142. package/src/tools/builtin/web-search.ts +126 -126
  143. package/src/tools/builtin/web.ts +35 -35
  144. package/src/tools/document-processor.ts +213 -213
  145. package/src/tools/image-generator.ts +150 -150
  146. package/src/tools/integrations/calendar.ts +73 -73
  147. package/src/tools/integrations/code-exec.ts +39 -39
  148. package/src/tools/integrations/csv-analyzer.ts +92 -92
  149. package/src/tools/integrations/database.ts +44 -44
  150. package/src/tools/integrations/email-send.ts +76 -76
  151. package/src/tools/integrations/git-tool.ts +42 -42
  152. package/src/tools/integrations/github-tool.ts +76 -76
  153. package/src/tools/integrations/image-gen.ts +56 -56
  154. package/src/tools/integrations/index.ts +92 -92
  155. package/src/tools/integrations/jira.ts +83 -83
  156. package/src/tools/integrations/notion.ts +71 -71
  157. package/src/tools/integrations/npm-tool.ts +48 -48
  158. package/src/tools/integrations/pdf-reader.ts +58 -58
  159. package/src/tools/integrations/slack.ts +65 -65
  160. package/src/tools/integrations/summarizer.ts +49 -49
  161. package/src/tools/integrations/translator.ts +48 -48
  162. package/src/tools/integrations/trello.ts +60 -60
  163. package/src/tools/integrations/vector-search.ts +42 -42
  164. package/src/tools/integrations/web-scraper.ts +47 -47
  165. package/src/tools/integrations/web-search.ts +58 -58
  166. package/src/tools/integrations/webhook.ts +38 -38
  167. package/src/tools/mcp-client.ts +131 -131
  168. package/src/tools/web-scraper.ts +179 -179
  169. package/src/tools/web-search.ts +180 -180
  170. package/src/ui/components.ts +127 -127
  171. package/srv-out.txt +1 -1
  172. package/templates/ecommerce-assistant/README.md +45 -45
  173. package/templates/ecommerce-assistant/oad.yaml +47 -47
  174. package/templates/tech-support/README.md +43 -43
  175. package/templates/tech-support/oad.yaml +45 -45
  176. package/test-agent/Dockerfile +9 -9
  177. package/test-agent/README.md +50 -50
  178. package/test-agent/agent.yaml +23 -23
  179. package/test-agent/docker-compose.yml +11 -11
  180. package/test-agent/oad.yaml +31 -31
  181. package/test-agent/package-lock.json +1492 -1492
  182. package/test-agent/package.json +17 -17
  183. package/test-agent/src/index.ts +24 -24
  184. package/test-agent/src/skills/echo.ts +15 -15
  185. package/test-agent/tsconfig.json +24 -24
  186. package/test-full.js +43 -43
  187. package/test-sidebar.js +22 -22
  188. package/test-studio3.js +75 -75
  189. package/test-studio4.js +41 -41
  190. package/tests/a2a-protocol.test.ts +285 -285
  191. package/tests/agui-protocol.test.ts +246 -246
  192. package/tests/api-server.test.ts +148 -148
  193. package/tests/approvals.test.ts +89 -89
  194. package/tests/audio.test.ts +40 -40
  195. package/tests/brain-seed-extended.test.ts +490 -490
  196. package/tests/brain-seed.test.ts +239 -239
  197. package/tests/browser.test.ts +179 -179
  198. package/tests/channels/discord.test.ts +79 -79
  199. package/tests/channels/email.test.ts +148 -148
  200. package/tests/channels/feishu.test.ts +123 -123
  201. package/tests/channels/telegram.test.ts +129 -129
  202. package/tests/channels/websocket.test.ts +53 -53
  203. package/tests/channels/wechat.test.ts +170 -170
  204. package/tests/channels-extra.test.ts +45 -45
  205. package/tests/chat-cli.test.ts +160 -160
  206. package/tests/cli.test.ts +46 -46
  207. package/tests/context-compressor.test.ts +172 -172
  208. package/tests/context-refs.test.ts +121 -121
  209. package/tests/cron-engine.test.ts +101 -101
  210. package/tests/daemon.test.ts +135 -135
  211. package/tests/deepbrain-wire.test.ts +234 -234
  212. package/tests/deploy-and-dag.test.ts +196 -196
  213. package/tests/doctor.test.ts +38 -38
  214. package/tests/document-processor.test.ts +69 -69
  215. package/tests/e2e-nocode.test.ts +442 -442
  216. package/tests/elevated.test.ts +69 -69
  217. package/tests/eval.test.ts +173 -173
  218. package/tests/gateway.test.ts +63 -63
  219. package/tests/guardrails.test.ts +177 -177
  220. package/tests/home-assistant.test.ts +40 -40
  221. package/tests/hooks.test.ts +79 -79
  222. package/tests/ide-bridge.test.ts +38 -38
  223. package/tests/image-generator.test.ts +84 -84
  224. package/tests/init-role.test.ts +124 -124
  225. package/tests/integrations.test.ts +249 -249
  226. package/tests/mcp-client.test.ts +92 -92
  227. package/tests/mcp-server.test.ts +178 -178
  228. package/tests/mcp-servers.test.ts +260 -260
  229. package/tests/node-network.test.ts +74 -74
  230. package/tests/plugin-a2a-enhanced.test.ts +230 -230
  231. package/tests/profiles.test.ts +61 -61
  232. package/tests/publish.test.ts +231 -231
  233. package/tests/rl-tools.test.ts +93 -93
  234. package/tests/sandbox-manager.test.ts +46 -46
  235. package/tests/scheduler.test.ts +200 -200
  236. package/tests/secrets.test.ts +107 -107
  237. package/tests/security-enhanced.test.ts +233 -233
  238. package/tests/settings-api.test.ts +148 -148
  239. package/tests/setup.test.ts +73 -73
  240. package/tests/subagent.test.ts +193 -193
  241. package/tests/telegram-discord.test.ts +60 -60
  242. package/tests/telemetry.test.ts +186 -186
  243. package/tests/user-profiler.test.ts +169 -169
  244. package/tests/v090-features.test.ts +254 -254
  245. package/tests/vision.test.ts +61 -61
  246. package/tests/voice-call.test.ts +47 -47
  247. package/tests/voice-enhanced.test.ts +169 -169
  248. package/tests/voice-interaction.test.ts +38 -38
  249. package/tests/web-search.test.ts +155 -155
  250. package/tests/workflow-graph.test.ts +279 -279
  251. package/tutorial/customer-service-agent/README.md +612 -612
  252. package/tutorial/customer-service-agent/SOUL.md +26 -26
  253. package/tutorial/customer-service-agent/agent.yaml +63 -63
  254. package/tutorial/customer-service-agent/package.json +19 -19
  255. package/tutorial/customer-service-agent/src/index.ts +69 -69
  256. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
  257. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
  258. package/tutorial/customer-service-agent/tsconfig.json +14 -14
@@ -1,26 +1,26 @@
1
- # SOUL.md — Customer Service Agent Personality
2
-
3
- ## 我是谁 / Who I Am
4
-
5
- 我是一个专业的智能客服助手,服务于电商平台的客户。
6
-
7
- ## 性格 / Personality
8
-
9
- - **耐心 Patient** — 无论客户问多少次,我都不会不耐烦
10
- - **专业 Professional** — 回答准确、有条理
11
- - **温暖 Warm** — 让客户感受到被重视
12
- - **诚实 Honest** — 不确定时坦诚告知,绝不编造信息
13
-
14
- ## 沟通风格 / Communication Style
15
-
16
- - 使用中文,术语保留英文
17
- - 简洁明了,避免冗长
18
- - 主动提供相关信息
19
- - 遇到无法解决的问题,立即创建工单转人工
20
-
21
- ## 边界 / Boundaries
22
-
23
- - 不讨论政治、宗教等敏感话题
24
- - 不提供法律、医疗建议
25
- - 不泄露内部系统信息
26
- - 不代表公司做出超出权限的承诺
1
+ # SOUL.md — Customer Service Agent Personality
2
+
3
+ ## 我是谁 / Who I Am
4
+
5
+ 我是一个专业的智能客服助手,服务于电商平台的客户。
6
+
7
+ ## 性格 / Personality
8
+
9
+ - **耐心 Patient** — 无论客户问多少次,我都不会不耐烦
10
+ - **专业 Professional** — 回答准确、有条理
11
+ - **温暖 Warm** — 让客户感受到被重视
12
+ - **诚实 Honest** — 不确定时坦诚告知,绝不编造信息
13
+
14
+ ## 沟通风格 / Communication Style
15
+
16
+ - 使用中文,术语保留英文
17
+ - 简洁明了,避免冗长
18
+ - 主动提供相关信息
19
+ - 遇到无法解决的问题,立即创建工单转人工
20
+
21
+ ## 边界 / Boundaries
22
+
23
+ - 不讨论政治、宗教等敏感话题
24
+ - 不提供法律、医疗建议
25
+ - 不泄露内部系统信息
26
+ - 不代表公司做出超出权限的承诺
@@ -1,63 +1,63 @@
1
- apiVersion: opc/v1
2
- kind: Agent
3
- metadata:
4
- name: customer-service
5
- version: 1.0.0
6
- description: 智能客服 Agent — Smart Customer Service Agent
7
- author: deepleaper
8
- license: MIT
9
-
10
- spec:
11
- # LLM 配置 / LLM Configuration
12
- model: qwen2.5
13
- provider:
14
- default: ollama
15
-
16
- # 系统提示词 / System Prompt
17
- systemPrompt: |
18
- 你是一个专业的客服助手,代表我们的电商平台为客户提供帮助。
19
- You are a professional customer service assistant.
20
-
21
- 规则 / Rules:
22
- - 用中文回答,必要时使用英文术语
23
- - 始终保持礼貌和耐心
24
- - 如果不确定,创建工单转人工
25
- - 不要编造信息
26
-
27
- # 频道配置 / Channel Configuration
28
- channels:
29
- - type: web
30
- port: 3000
31
- # Uncomment to enable Telegram:
32
- # - type: telegram
33
- # token: ${TELEGRAM_BOT_TOKEN}
34
- # mode: polling
35
- # Uncomment to enable Discord:
36
- # - type: discord
37
- # token: ${DISCORD_BOT_TOKEN}
38
- # guildId: "your-server-id"
39
-
40
- # 记忆系统 / Memory System
41
- memory:
42
- shortTerm: true
43
-
44
- # 技能列表 / Skills
45
- skills:
46
- - name: faq
47
- - name: ticket
48
-
49
- # 调度任务 / Scheduled Jobs
50
- scheduler:
51
- jobs:
52
- - name: daily-report
53
- schedule: "0 9 * * *"
54
- task: "Generate daily customer service report"
55
- - name: cleanup-old-tickets
56
- schedule: "0 2 * * 0"
57
- task: "Archive tickets older than 30 days"
58
-
59
- # 安全配置 / Security
60
- security:
61
- approval: dangerous
62
- sandbox:
63
- maxFileSize: 10485760
1
+ apiVersion: opc/v1
2
+ kind: Agent
3
+ metadata:
4
+ name: customer-service
5
+ version: 1.0.0
6
+ description: 智能客服 Agent — Smart Customer Service Agent
7
+ author: deepleaper
8
+ license: MIT
9
+
10
+ spec:
11
+ # LLM 配置 / LLM Configuration
12
+ model: qwen2.5
13
+ provider:
14
+ default: ollama
15
+
16
+ # 系统提示词 / System Prompt
17
+ systemPrompt: |
18
+ 你是一个专业的客服助手,代表我们的电商平台为客户提供帮助。
19
+ You are a professional customer service assistant.
20
+
21
+ 规则 / Rules:
22
+ - 用中文回答,必要时使用英文术语
23
+ - 始终保持礼貌和耐心
24
+ - 如果不确定,创建工单转人工
25
+ - 不要编造信息
26
+
27
+ # 频道配置 / Channel Configuration
28
+ channels:
29
+ - type: web
30
+ port: 3000
31
+ # Uncomment to enable Telegram:
32
+ # - type: telegram
33
+ # token: ${TELEGRAM_BOT_TOKEN}
34
+ # mode: polling
35
+ # Uncomment to enable Discord:
36
+ # - type: discord
37
+ # token: ${DISCORD_BOT_TOKEN}
38
+ # guildId: "your-server-id"
39
+
40
+ # 记忆系统 / Memory System
41
+ memory:
42
+ shortTerm: true
43
+
44
+ # 技能列表 / Skills
45
+ skills:
46
+ - name: faq
47
+ - name: ticket
48
+
49
+ # 调度任务 / Scheduled Jobs
50
+ scheduler:
51
+ jobs:
52
+ - name: daily-report
53
+ schedule: "0 9 * * *"
54
+ task: "Generate daily customer service report"
55
+ - name: cleanup-old-tickets
56
+ schedule: "0 2 * * 0"
57
+ task: "Archive tickets older than 30 days"
58
+
59
+ # 安全配置 / Security
60
+ security:
61
+ approval: dangerous
62
+ sandbox:
63
+ maxFileSize: 10485760
@@ -1,19 +1,19 @@
1
- {
2
- "name": "customer-service-agent",
3
- "version": "1.0.0",
4
- "description": "智能客服 Agent tutorial — OPC Agent comprehensive example",
5
- "main": "dist/index.js",
6
- "scripts": {
7
- "build": "tsc",
8
- "start": "opc start",
9
- "dev": "opc chat",
10
- "test": "echo \"tutorial example — no tests configured\" && exit 0"
11
- },
12
- "dependencies": {
13
- "opc-agent": "latest",
14
- "deepbrain": "latest"
15
- },
16
- "devDependencies": {
17
- "typescript": "^5.0.0"
18
- }
19
- }
1
+ {
2
+ "name": "customer-service-agent",
3
+ "version": "1.0.0",
4
+ "description": "智能客服 Agent tutorial — OPC Agent comprehensive example",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "opc start",
9
+ "dev": "opc chat",
10
+ "test": "echo \"tutorial example — no tests configured\" && exit 0"
11
+ },
12
+ "dependencies": {
13
+ "opc-agent": "latest",
14
+ "deepbrain": "latest"
15
+ },
16
+ "devDependencies": {
17
+ "typescript": "^5.0.0"
18
+ }
19
+ }
@@ -1,69 +1,69 @@
1
- /**
2
- * Customer Service Agent — Entry Point
3
- * 客服 Agent 入口文件
4
- *
5
- * Demonstrates: Agent init, DeepBrain memory, skills, tools, workflows, plugins
6
- */
7
- import { Agent, getBuiltinTools, WorkflowBuilder } from 'opc-agent';
8
- import { loggerPlugin, rateLimiterPlugin } from 'opc-agent';
9
- import { Brain } from 'deepbrain';
10
-
11
- // === 1. DeepBrain 记忆初始化 / Initialize Memory ===
12
- const brain = new Brain({
13
- database: './data/customer-brain.db',
14
- embedding_provider: 'ollama',
15
- });
16
- await brain.connect();
17
-
18
- // === 2. 内置工具 / Built-in Tools ===
19
- const tools = getBuiltinTools('./workspace');
20
-
21
- // === 3. 创建 Agent / Create Agent ===
22
- const agent = new Agent('./agent.yaml', {
23
- tools,
24
- plugins: [
25
- loggerPlugin({ level: 'info', output: './logs/agent.log' }),
26
- rateLimiterPlugin({ maxRequests: 60, windowMs: 60000 }),
27
- ],
28
- });
29
-
30
- // === 4. 记忆钩子 / Memory Hooks ===
31
- agent.on('message', async (msg, response) => {
32
- // 存储对话用于语义搜索 / Store conversations for semantic search
33
- await brain.put(
34
- `conv-${msg.id}`,
35
- `Q: ${msg.content}\nA: ${response.content}`
36
- );
37
- });
38
-
39
- agent.on('beforeReply', async (ctx) => {
40
- // 搜索相关历史对话 / Search relevant past conversations
41
- const relevant = await brain.query(ctx.message, { limit: 3 });
42
- if (relevant.length > 0) {
43
- ctx.additionalContext = relevant.map((r: { content: string }) => r.content).join('\n');
44
- }
45
- });
46
-
47
- // === 5. 工作流 / Workflow: Customer Onboarding ===
48
- const onboarding = new WorkflowBuilder()
49
- .start('greet')
50
- .addAction('greet', async (_ctx) => {
51
- return '欢迎!请问您是新客户还是老客户?';
52
- }, { next: 'check-type' })
53
- .addCondition('check-type',
54
- (ctx) => ctx.variables.get('isNewCustomer'),
55
- 'new-flow', 'existing-flow')
56
- .addAction('new-flow', async (_ctx) => {
57
- return '让我帮您注册账号。请提供您的邮箱地址。';
58
- }, { next: 'done' })
59
- .addAction('existing-flow', async (_ctx) => {
60
- return '欢迎回来!有什么可以帮您?';
61
- }, { next: 'done' })
62
- .addAction('done', async () => 'Onboarding complete')
63
- .build();
64
-
65
- agent.registerWorkflow('onboarding', onboarding);
66
-
67
- // === 6. 启动 / Start ===
68
- await agent.start();
69
- console.log('🚀 Customer Service Agent is running!');
1
+ /**
2
+ * Customer Service Agent — Entry Point
3
+ * 客服 Agent 入口文件
4
+ *
5
+ * Demonstrates: Agent init, DeepBrain memory, skills, tools, workflows, plugins
6
+ */
7
+ import { Agent, getBuiltinTools, WorkflowBuilder } from 'opc-agent';
8
+ import { loggerPlugin, rateLimiterPlugin } from 'opc-agent';
9
+ import { Brain } from 'deepbrain';
10
+
11
+ // === 1. DeepBrain 记忆初始化 / Initialize Memory ===
12
+ const brain = new Brain({
13
+ database: './data/customer-brain.db',
14
+ embedding_provider: 'ollama',
15
+ });
16
+ await brain.connect();
17
+
18
+ // === 2. 内置工具 / Built-in Tools ===
19
+ const tools = getBuiltinTools('./workspace');
20
+
21
+ // === 3. 创建 Agent / Create Agent ===
22
+ const agent = new Agent('./agent.yaml', {
23
+ tools,
24
+ plugins: [
25
+ loggerPlugin({ level: 'info', output: './logs/agent.log' }),
26
+ rateLimiterPlugin({ maxRequests: 60, windowMs: 60000 }),
27
+ ],
28
+ });
29
+
30
+ // === 4. 记忆钩子 / Memory Hooks ===
31
+ agent.on('message', async (msg, response) => {
32
+ // 存储对话用于语义搜索 / Store conversations for semantic search
33
+ await brain.put(
34
+ `conv-${msg.id}`,
35
+ `Q: ${msg.content}\nA: ${response.content}`
36
+ );
37
+ });
38
+
39
+ agent.on('beforeReply', async (ctx) => {
40
+ // 搜索相关历史对话 / Search relevant past conversations
41
+ const relevant = await brain.query(ctx.message, { limit: 3 });
42
+ if (relevant.length > 0) {
43
+ ctx.additionalContext = relevant.map((r: { content: string }) => r.content).join('\n');
44
+ }
45
+ });
46
+
47
+ // === 5. 工作流 / Workflow: Customer Onboarding ===
48
+ const onboarding = new WorkflowBuilder()
49
+ .start('greet')
50
+ .addAction('greet', async (_ctx) => {
51
+ return '欢迎!请问您是新客户还是老客户?';
52
+ }, { next: 'check-type' })
53
+ .addCondition('check-type',
54
+ (ctx) => ctx.variables.get('isNewCustomer'),
55
+ 'new-flow', 'existing-flow')
56
+ .addAction('new-flow', async (_ctx) => {
57
+ return '让我帮您注册账号。请提供您的邮箱地址。';
58
+ }, { next: 'done' })
59
+ .addAction('existing-flow', async (_ctx) => {
60
+ return '欢迎回来!有什么可以帮您?';
61
+ }, { next: 'done' })
62
+ .addAction('done', async () => 'Onboarding complete')
63
+ .build();
64
+
65
+ agent.registerWorkflow('onboarding', onboarding);
66
+
67
+ // === 6. 启动 / Start ===
68
+ await agent.start();
69
+ console.log('🚀 Customer Service Agent is running!');
@@ -1,27 +1,27 @@
1
- /**
2
- * FAQ Skill — FAQ 查询技能
3
- * Looks up frequently asked questions by keyword matching.
4
- */
5
- import { BaseSkill } from 'opc-agent';
6
-
7
- export class FAQSkill extends BaseSkill {
8
- name = 'faq';
9
- description = 'Look up frequently asked questions';
10
- triggers = [/常见问题|FAQ|怎么退款|退货|配送|支付/i];
11
-
12
- async execute(input: string): Promise<string> {
13
- // 常见问题知识库 / FAQ Knowledge Base
14
- const faqs: Record<string, string> = {
15
- '退款': '退款将在3-5个工作日内到账。如超时未到账,请联系银行确认。',
16
- '退货': '请在收到商品7天内申请退货。商品需保持原包装,未使用。',
17
- '配送': '标准配送3-5天,加急配送1-2天。偏远地区可能延迟1-2天。',
18
- '支付': '支持支付宝、微信支付、银行卡(Visa/Mastercard/银联)。',
19
- };
20
-
21
- for (const [key, answer] of Object.entries(faqs)) {
22
- if (input.includes(key)) return answer;
23
- }
24
-
25
- return '请问您想了解什么?我们有以下常见问题:退款、退货、配送、支付';
26
- }
27
- }
1
+ /**
2
+ * FAQ Skill — FAQ 查询技能
3
+ * Looks up frequently asked questions by keyword matching.
4
+ */
5
+ import { BaseSkill } from 'opc-agent';
6
+
7
+ export class FAQSkill extends BaseSkill {
8
+ name = 'faq';
9
+ description = 'Look up frequently asked questions';
10
+ triggers = [/常见问题|FAQ|怎么退款|退货|配送|支付/i];
11
+
12
+ async execute(input: string): Promise<string> {
13
+ // 常见问题知识库 / FAQ Knowledge Base
14
+ const faqs: Record<string, string> = {
15
+ '退款': '退款将在3-5个工作日内到账。如超时未到账,请联系银行确认。',
16
+ '退货': '请在收到商品7天内申请退货。商品需保持原包装,未使用。',
17
+ '配送': '标准配送3-5天,加急配送1-2天。偏远地区可能延迟1-2天。',
18
+ '支付': '支持支付宝、微信支付、银行卡(Visa/Mastercard/银联)。',
19
+ };
20
+
21
+ for (const [key, answer] of Object.entries(faqs)) {
22
+ if (input.includes(key)) return answer;
23
+ }
24
+
25
+ return '请问您想了解什么?我们有以下常见问题:退款、退货、配送、支付';
26
+ }
27
+ }
@@ -1,22 +1,22 @@
1
- /**
2
- * Ticket Skill — 工单创建技能
3
- * Creates a support ticket for human follow-up.
4
- */
5
- import { BaseSkill } from 'opc-agent';
6
-
7
- export class TicketSkill extends BaseSkill {
8
- name = 'ticket';
9
- description = 'Create a support ticket for human follow-up';
10
- triggers = [/创建工单|提交问题|人工客服|投诉/i];
11
-
12
- async execute(input: string): Promise<string> {
13
- // 生成唯一工单号 / Generate unique ticket ID
14
- const ticketId = `TK-${Date.now().toString(36).toUpperCase()}`;
15
-
16
- // 实际项目中这里会写入数据库
17
- // In production, this would persist to a database
18
- console.log(`[Ticket Created] ${ticketId}: ${input}`);
19
-
20
- return `已创建工单 ${ticketId},客服团队将在2小时内联系您。\nTicket ${ticketId} created. Our team will contact you within 2 hours.`;
21
- }
22
- }
1
+ /**
2
+ * Ticket Skill — 工单创建技能
3
+ * Creates a support ticket for human follow-up.
4
+ */
5
+ import { BaseSkill } from 'opc-agent';
6
+
7
+ export class TicketSkill extends BaseSkill {
8
+ name = 'ticket';
9
+ description = 'Create a support ticket for human follow-up';
10
+ triggers = [/创建工单|提交问题|人工客服|投诉/i];
11
+
12
+ async execute(input: string): Promise<string> {
13
+ // 生成唯一工单号 / Generate unique ticket ID
14
+ const ticketId = `TK-${Date.now().toString(36).toUpperCase()}`;
15
+
16
+ // 实际项目中这里会写入数据库
17
+ // In production, this would persist to a database
18
+ console.log(`[Ticket Created] ${ticketId}: ${input}`);
19
+
20
+ return `已创建工单 ${ticketId},客服团队将在2小时内联系您。\nTicket ${ticketId} created. Our team will contact you within 2 hours.`;
21
+ }
22
+ }
@@ -1,14 +1,14 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "node",
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "declaration": true
12
- },
13
- "include": ["src/**/*"]
14
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "node",
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "declaration": true
12
+ },
13
+ "include": ["src/**/*"]
14
+ }