opc-agent 4.0.44 → 4.1.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 (250) 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/dist/channels/wechat.js +6 -6
  8. package/dist/cli.js +2 -2
  9. package/dist/core/runtime.js +18 -0
  10. package/dist/deploy/index.js +56 -56
  11. package/dist/providers/index.js +39 -13
  12. package/dist/studio/server.js +211 -20
  13. package/dist/studio-ui/index.html +279 -24
  14. package/dist/ui/components.js +105 -105
  15. package/examples/README.md +22 -22
  16. package/examples/basic-agent.ts +90 -90
  17. package/examples/brain-integration.ts +71 -71
  18. package/examples/multi-channel.ts +74 -74
  19. package/fix-sidebar.mjs +188 -188
  20. package/install.ps1 +154 -154
  21. package/install.sh +164 -164
  22. package/package.json +1 -1
  23. package/scripts/install.ps1 +31 -31
  24. package/scripts/install.sh +40 -40
  25. package/serve-studio.js +13 -13
  26. package/serve-test.js +25 -25
  27. package/src/channels/dingtalk.ts +46 -46
  28. package/src/channels/email.ts +351 -351
  29. package/src/channels/feishu.ts +349 -349
  30. package/src/channels/googlechat.ts +42 -42
  31. package/src/channels/imessage.ts +31 -31
  32. package/src/channels/irc.ts +82 -82
  33. package/src/channels/line.ts +32 -32
  34. package/src/channels/matrix.ts +33 -33
  35. package/src/channels/mattermost.ts +57 -57
  36. package/src/channels/msteams.ts +32 -32
  37. package/src/channels/nostr.ts +32 -32
  38. package/src/channels/qq.ts +33 -33
  39. package/src/channels/signal.ts +32 -32
  40. package/src/channels/sms.ts +33 -33
  41. package/src/channels/telegram.ts +616 -616
  42. package/src/channels/twitch.ts +65 -65
  43. package/src/channels/voice-call.ts +100 -100
  44. package/src/channels/websocket.ts +399 -399
  45. package/src/channels/wechat.ts +329 -329
  46. package/src/channels/whatsapp.ts +32 -32
  47. package/src/cli/chat.ts +99 -99
  48. package/src/cli/setup.ts +314 -314
  49. package/src/cli.ts +2 -2
  50. package/src/core/agent.ts +476 -476
  51. package/src/core/api-server.ts +277 -277
  52. package/src/core/audio.ts +98 -98
  53. package/src/core/collaboration.ts +275 -275
  54. package/src/core/context-discovery.ts +85 -85
  55. package/src/core/context-refs.ts +140 -140
  56. package/src/core/gateway.ts +106 -106
  57. package/src/core/heartbeat.ts +51 -51
  58. package/src/core/hooks.ts +105 -105
  59. package/src/core/ide-bridge.ts +133 -133
  60. package/src/core/node-network.ts +86 -86
  61. package/src/core/profiles.ts +122 -122
  62. package/src/core/runtime.ts +18 -0
  63. package/src/core/scheduler.ts +187 -187
  64. package/src/core/session-manager.ts +137 -137
  65. package/src/core/subagent.ts +98 -98
  66. package/src/core/vision.ts +180 -180
  67. package/src/core/workflow-graph.ts +365 -365
  68. package/src/daemon.ts +96 -96
  69. package/src/deploy/index.ts +255 -255
  70. package/src/doctor.ts +156 -156
  71. package/src/eval/index.ts +211 -211
  72. package/src/eval/suites/basic.json +16 -16
  73. package/src/eval/suites/memory.json +12 -12
  74. package/src/eval/suites/safety.json +14 -14
  75. package/src/hub/brain-seed.ts +54 -54
  76. package/src/hub/client.ts +60 -60
  77. package/src/mcp/servers/calculator-mcp.ts +65 -65
  78. package/src/mcp/servers/crypto-mcp.ts +73 -73
  79. package/src/mcp/servers/database-mcp.ts +72 -72
  80. package/src/mcp/servers/datetime-mcp.ts +69 -69
  81. package/src/mcp/servers/filesystem.ts +66 -66
  82. package/src/mcp/servers/github-mcp.ts +58 -58
  83. package/src/mcp/servers/index.ts +63 -63
  84. package/src/mcp/servers/json-mcp.ts +102 -102
  85. package/src/mcp/servers/memory-mcp.ts +56 -56
  86. package/src/mcp/servers/regex-mcp.ts +53 -53
  87. package/src/mcp/servers/web-mcp.ts +49 -49
  88. package/src/memory/context-compressor.ts +189 -189
  89. package/src/memory/seed-loader.ts +212 -212
  90. package/src/memory/user-profiler.ts +215 -215
  91. package/src/plugins/content-filter.ts +23 -23
  92. package/src/plugins/logger.ts +18 -18
  93. package/src/plugins/rate-limiter.ts +38 -38
  94. package/src/protocols/a2a/client.ts +132 -132
  95. package/src/protocols/a2a/index.ts +8 -8
  96. package/src/protocols/a2a/server.ts +333 -333
  97. package/src/protocols/a2a/types.ts +88 -88
  98. package/src/protocols/a2a/utils.ts +50 -50
  99. package/src/protocols/agui/client.ts +83 -83
  100. package/src/protocols/agui/index.ts +4 -4
  101. package/src/protocols/agui/server.ts +218 -218
  102. package/src/protocols/agui/types.ts +153 -153
  103. package/src/protocols/index.ts +2 -2
  104. package/src/protocols/mcp/agent-tools.ts +134 -134
  105. package/src/protocols/mcp/index.ts +8 -8
  106. package/src/protocols/mcp/server.ts +262 -262
  107. package/src/protocols/mcp/types.ts +69 -69
  108. package/src/providers/index.ts +632 -608
  109. package/src/publish/index.ts +376 -376
  110. package/src/scheduler/cron-engine.ts +191 -191
  111. package/src/scheduler/index.ts +2 -2
  112. package/src/schema/oad.ts +217 -217
  113. package/src/security/approval.ts +131 -131
  114. package/src/security/approvals.ts +143 -143
  115. package/src/security/elevated.ts +105 -105
  116. package/src/security/guardrails.ts +248 -248
  117. package/src/security/index.ts +9 -9
  118. package/src/security/keys.ts +87 -87
  119. package/src/security/secrets.ts +129 -129
  120. package/src/skills/builtin/index.ts +408 -408
  121. package/src/skills/marketplace.ts +113 -113
  122. package/src/skills/types.ts +42 -42
  123. package/src/studio/server.ts +209 -22
  124. package/src/studio/templates-data.ts +178 -178
  125. package/src/studio-ui/index.html +279 -24
  126. package/src/telemetry/index.ts +324 -324
  127. package/src/tools/builtin/browser.ts +299 -299
  128. package/src/tools/builtin/datetime.ts +41 -41
  129. package/src/tools/builtin/file.ts +107 -107
  130. package/src/tools/builtin/home-assistant.ts +116 -116
  131. package/src/tools/builtin/rl-tools.ts +243 -243
  132. package/src/tools/builtin/shell.ts +43 -43
  133. package/src/tools/builtin/vision.ts +64 -64
  134. package/src/tools/builtin/web-search.ts +126 -126
  135. package/src/tools/builtin/web.ts +35 -35
  136. package/src/tools/document-processor.ts +213 -213
  137. package/src/tools/image-generator.ts +150 -150
  138. package/src/tools/integrations/calendar.ts +73 -73
  139. package/src/tools/integrations/code-exec.ts +39 -39
  140. package/src/tools/integrations/csv-analyzer.ts +92 -92
  141. package/src/tools/integrations/database.ts +44 -44
  142. package/src/tools/integrations/email-send.ts +76 -76
  143. package/src/tools/integrations/git-tool.ts +42 -42
  144. package/src/tools/integrations/github-tool.ts +76 -76
  145. package/src/tools/integrations/image-gen.ts +56 -56
  146. package/src/tools/integrations/index.ts +92 -92
  147. package/src/tools/integrations/jira.ts +83 -83
  148. package/src/tools/integrations/notion.ts +71 -71
  149. package/src/tools/integrations/npm-tool.ts +48 -48
  150. package/src/tools/integrations/pdf-reader.ts +58 -58
  151. package/src/tools/integrations/slack.ts +65 -65
  152. package/src/tools/integrations/summarizer.ts +49 -49
  153. package/src/tools/integrations/translator.ts +48 -48
  154. package/src/tools/integrations/trello.ts +60 -60
  155. package/src/tools/integrations/vector-search.ts +42 -42
  156. package/src/tools/integrations/web-scraper.ts +47 -47
  157. package/src/tools/integrations/web-search.ts +58 -58
  158. package/src/tools/integrations/webhook.ts +38 -38
  159. package/src/tools/mcp-client.ts +131 -131
  160. package/src/tools/web-scraper.ts +179 -179
  161. package/src/tools/web-search.ts +180 -180
  162. package/src/ui/components.ts +127 -127
  163. package/srv-out.txt +1 -1
  164. package/templates/ecommerce-assistant/README.md +45 -45
  165. package/templates/ecommerce-assistant/oad.yaml +47 -47
  166. package/templates/tech-support/README.md +43 -43
  167. package/templates/tech-support/oad.yaml +45 -45
  168. package/test-agent/Dockerfile +9 -9
  169. package/test-agent/README.md +50 -50
  170. package/test-agent/agent.yaml +23 -23
  171. package/test-agent/docker-compose.yml +11 -11
  172. package/test-agent/oad.yaml +31 -31
  173. package/test-agent/package-lock.json +1492 -1492
  174. package/test-agent/package.json +17 -17
  175. package/test-agent/src/index.ts +24 -24
  176. package/test-agent/src/skills/echo.ts +15 -15
  177. package/test-agent/tsconfig.json +24 -24
  178. package/test-full.js +43 -43
  179. package/test-sidebar.js +22 -22
  180. package/test-studio3.js +75 -75
  181. package/test-studio4.js +41 -41
  182. package/tests/a2a-protocol.test.ts +285 -285
  183. package/tests/agui-protocol.test.ts +246 -246
  184. package/tests/api-server.test.ts +148 -148
  185. package/tests/approvals.test.ts +89 -89
  186. package/tests/audio.test.ts +40 -40
  187. package/tests/brain-seed-extended.test.ts +490 -490
  188. package/tests/brain-seed.test.ts +239 -239
  189. package/tests/browser.test.ts +179 -179
  190. package/tests/channels/discord.test.ts +79 -79
  191. package/tests/channels/email.test.ts +148 -148
  192. package/tests/channels/feishu.test.ts +123 -123
  193. package/tests/channels/telegram.test.ts +129 -129
  194. package/tests/channels/websocket.test.ts +53 -53
  195. package/tests/channels/wechat.test.ts +170 -170
  196. package/tests/channels-extra.test.ts +45 -45
  197. package/tests/chat-cli.test.ts +160 -160
  198. package/tests/cli.test.ts +46 -46
  199. package/tests/context-compressor.test.ts +172 -172
  200. package/tests/context-refs.test.ts +121 -121
  201. package/tests/cron-engine.test.ts +101 -101
  202. package/tests/daemon.test.ts +135 -135
  203. package/tests/deepbrain-wire.test.ts +234 -234
  204. package/tests/deploy-and-dag.test.ts +196 -196
  205. package/tests/doctor.test.ts +38 -38
  206. package/tests/document-processor.test.ts +69 -69
  207. package/tests/e2e-nocode.test.ts +442 -442
  208. package/tests/elevated.test.ts +69 -69
  209. package/tests/eval.test.ts +173 -173
  210. package/tests/gateway.test.ts +63 -63
  211. package/tests/guardrails.test.ts +177 -177
  212. package/tests/home-assistant.test.ts +40 -40
  213. package/tests/hooks.test.ts +79 -79
  214. package/tests/ide-bridge.test.ts +38 -38
  215. package/tests/image-generator.test.ts +84 -84
  216. package/tests/init-role.test.ts +124 -124
  217. package/tests/integrations.test.ts +249 -249
  218. package/tests/mcp-client.test.ts +92 -92
  219. package/tests/mcp-server.test.ts +178 -178
  220. package/tests/mcp-servers.test.ts +260 -260
  221. package/tests/node-network.test.ts +74 -74
  222. package/tests/plugin-a2a-enhanced.test.ts +230 -230
  223. package/tests/profiles.test.ts +61 -61
  224. package/tests/publish.test.ts +231 -231
  225. package/tests/rl-tools.test.ts +93 -93
  226. package/tests/sandbox-manager.test.ts +46 -46
  227. package/tests/scheduler.test.ts +200 -200
  228. package/tests/secrets.test.ts +107 -107
  229. package/tests/security-enhanced.test.ts +233 -233
  230. package/tests/settings-api.test.ts +148 -148
  231. package/tests/setup.test.ts +73 -73
  232. package/tests/subagent.test.ts +193 -193
  233. package/tests/telegram-discord.test.ts +60 -60
  234. package/tests/telemetry.test.ts +186 -186
  235. package/tests/user-profiler.test.ts +169 -169
  236. package/tests/v090-features.test.ts +254 -254
  237. package/tests/vision.test.ts +61 -61
  238. package/tests/voice-call.test.ts +47 -47
  239. package/tests/voice-enhanced.test.ts +169 -169
  240. package/tests/voice-interaction.test.ts +38 -38
  241. package/tests/web-search.test.ts +155 -155
  242. package/tests/workflow-graph.test.ts +279 -279
  243. package/tutorial/customer-service-agent/README.md +612 -612
  244. package/tutorial/customer-service-agent/SOUL.md +26 -26
  245. package/tutorial/customer-service-agent/agent.yaml +63 -63
  246. package/tutorial/customer-service-agent/package.json +19 -19
  247. package/tutorial/customer-service-agent/src/index.ts +69 -69
  248. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
  249. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
  250. package/tutorial/customer-service-agent/tsconfig.json +14 -14
package/install.ps1 CHANGED
@@ -1,154 +1,154 @@
1
- # ============================================================================
2
- # OPC Agent 一键安装脚本 for Windows
3
- # 用法: irm https://raw.githubusercontent.com/Deepleaper/opc-agent/main/install.ps1 | iex
4
- # 高级: $env:OPC_YES='1'; $env:OPC_NO_OLLAMA='1'; irm ... | iex
5
- # ============================================================================
6
-
7
- $ErrorActionPreference = "Stop"
8
-
9
- # ── 颜色输出 ──────────────────────────────────────────────────
10
- function Write-Step($msg) { Write-Host "`n━━━ $msg ━━━" -ForegroundColor Blue }
11
- function Write-Ok($msg) { Write-Host "✅ $msg" -ForegroundColor Green }
12
- function Write-Warn($msg) { Write-Host "⚠️ $msg" -ForegroundColor Yellow }
13
- function Write-Err($msg) { Write-Host "❌ $msg" -ForegroundColor Red }
14
- function Write-Info($msg) { Write-Host "ℹ️ $msg" -ForegroundColor Cyan }
15
-
16
- $AutoYes = $env:OPC_YES -eq '1'
17
- $SkipOllama = $env:OPC_NO_OLLAMA -eq '1'
18
-
19
- function Confirm-Action($prompt) {
20
- if ($AutoYes) { return $true }
21
- $choice = Read-Host "❓ $prompt [Y/n]"
22
- return ($choice -ne 'n' -and $choice -ne 'N' -and $choice -ne 'no')
23
- }
24
-
25
- # ── 检测操作系统 ──────────────────────────────────────────────
26
- Write-Step "🔍 检测操作系统 / Detecting OS"
27
- Write-Ok "Windows $([System.Environment]::OSVersion.Version) detected"
28
-
29
- # ── 检测 & 安装 Node.js ──────────────────────────────────────
30
- Write-Step "📦 检测 Node.js / Checking Node.js"
31
- $NeedNode = $false
32
-
33
- try {
34
- $nodeVer = (node -v) -replace 'v','' -split '\.' | Select-Object -First 1
35
- if ([int]$nodeVer -ge 18) {
36
- Write-Ok "Node.js $(node -v) 已安装 / installed"
37
- } else {
38
- Write-Warn "Node.js $(node -v) 版本过低,需要 18+ / version too old"
39
- $NeedNode = $true
40
- }
41
- } catch {
42
- Write-Warn "未检测到 Node.js / Node.js not found"
43
- $NeedNode = $true
44
- }
45
-
46
- if ($NeedNode) {
47
- Write-Info "将安装 Node.js 22 LTS / Installing Node.js 22 LTS"
48
- if (Confirm-Action "安装 Node.js 22? / Install Node.js 22?") {
49
- $installed = $false
50
- # 尝试 winget
51
- try {
52
- winget install OpenJS.NodeJS.LTS --accept-package-agreements --accept-source-agreements
53
- $installed = $true
54
- Write-Ok "Node.js 通过 winget 安装成功 / installed via winget"
55
- } catch {}
56
-
57
- # 尝试 choco
58
- if (-not $installed) {
59
- try {
60
- choco install nodejs-lts -y
61
- $installed = $true
62
- Write-Ok "Node.js 通过 Chocolatey 安装成功 / installed via Chocolatey"
63
- } catch {}
64
- }
65
-
66
- if (-not $installed) {
67
- Write-Err "自动安装失败 / Auto-install failed"
68
- Write-Info "请手动下载安装 / Please download manually: https://nodejs.org/"
69
- Start-Process "https://nodejs.org/en/download/"
70
- exit 1
71
- }
72
-
73
- # 刷新 PATH
74
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
75
- } else {
76
- Write-Err "Node.js 是必需的 / Node.js is required"
77
- Write-Info "下载地址 / Download: https://nodejs.org/"
78
- exit 1
79
- }
80
- }
81
-
82
- # ── 安装 OPC Agent ────────────────────────────────────────────
83
- Write-Step "🚀 安装 OPC Agent / Installing OPC Agent"
84
- Write-Info "npm install -g opc-agent ..."
85
- npm install -g opc-agent
86
- Write-Ok "OPC Agent 安装成功 / installed"
87
-
88
- # ── Ollama(可选)─────────────────────────────────────────────
89
- if (-not $SkipOllama) {
90
- Write-Step "🦙 检测 Ollama / Checking Ollama"
91
-
92
- $hasOllama = $false
93
- try { ollama --version 2>$null; $hasOllama = $true } catch {}
94
-
95
- if ($hasOllama) {
96
- Write-Ok "Ollama 已安装 / installed"
97
- } else {
98
- Write-Warn "未检测到 Ollama / Ollama not found"
99
- Write-Info "Ollama 可让你在本地运行 AI 模型(免费、数据不出门)"
100
- Write-Info "Ollama lets you run AI models locally (free, private)"
101
-
102
- if (Confirm-Action "安装 Ollama? / Install Ollama?") {
103
- try {
104
- winget install Ollama.Ollama --accept-package-agreements --accept-source-agreements
105
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
106
- Write-Ok "Ollama 安装成功 / installed"
107
- $hasOllama = $true
108
- } catch {
109
- Write-Warn "winget 安装失败,请手动下载 / Please download manually: https://ollama.com/download"
110
- Start-Process "https://ollama.com/download"
111
- }
112
- }
113
- }
114
-
115
- # 拉取推荐模型
116
- if ($hasOllama) {
117
- Write-Step "🧠 推荐模型 / Recommended Models"
118
- Write-Info "推荐拉取以下模型用于本地 Agent:"
119
- Write-Info " • qwen2.5:7b — 中英文对话(4.7GB)"
120
- Write-Info " • nomic-embed-text — 文本向量化(274MB)"
121
-
122
- if (Confirm-Action "拉取推荐模型? / Pull recommended models?") {
123
- Write-Info "拉取 qwen2.5:7b ... (可能需要几分钟)"
124
- try { ollama pull qwen2.5:7b; Write-Ok "qwen2.5:7b ✓" } catch { Write-Warn "拉取失败,可稍后手动: ollama pull qwen2.5:7b" }
125
-
126
- Write-Info "拉取 nomic-embed-text ..."
127
- try { ollama pull nomic-embed-text; Write-Ok "nomic-embed-text ✓" } catch { Write-Warn "拉取失败,可稍后手动: ollama pull nomic-embed-text" }
128
- }
129
- }
130
- }
131
-
132
- # ── 完成 ──────────────────────────────────────────────────────
133
- Write-Step "🎉 安装完成!/ Installation Complete!"
134
- Write-Host ""
135
- Write-Host "┌─────────────────────────────────────────────────┐" -ForegroundColor Green
136
- Write-Host "│ OPC Agent 已安装成功! │" -ForegroundColor Green
137
- Write-Host "│ OPC Agent installed successfully! │" -ForegroundColor Green
138
- Write-Host "│ │" -ForegroundColor Green
139
- Write-Host "│ 快速开始 / Quick Start: │" -ForegroundColor Green
140
- Write-Host "│ opc init my-agent # 创建 Agent │" -ForegroundColor Green
141
- Write-Host "│ cd my-agent; npm i │" -ForegroundColor Green
142
- Write-Host "│ opc chat # 开始对话 │" -ForegroundColor Green
143
- Write-Host "│ │" -ForegroundColor Green
144
- Write-Host "│ 可视化面板 / Dashboard: │" -ForegroundColor Green
145
- Write-Host "│ opc studio │" -ForegroundColor Green
146
- Write-Host "│ │" -ForegroundColor Green
147
- Write-Host "│ 交互式设置 / Setup wizard: │" -ForegroundColor Green
148
- Write-Host "│ opc setup │" -ForegroundColor Green
149
- Write-Host "└─────────────────────────────────────────────────┘" -ForegroundColor Green
150
- Write-Host ""
151
-
152
- if (Confirm-Action "现在打开 OPC Studio? / Open OPC Studio now?") {
153
- opc studio
154
- }
1
+ # ============================================================================
2
+ # OPC Agent 一键安装脚本 for Windows
3
+ # 用法: irm https://raw.githubusercontent.com/Deepleaper/opc-agent/main/install.ps1 | iex
4
+ # 高级: $env:OPC_YES='1'; $env:OPC_NO_OLLAMA='1'; irm ... | iex
5
+ # ============================================================================
6
+
7
+ $ErrorActionPreference = "Stop"
8
+
9
+ # ── 颜色输出 ──────────────────────────────────────────────────
10
+ function Write-Step($msg) { Write-Host "`n━━━ $msg ━━━" -ForegroundColor Blue }
11
+ function Write-Ok($msg) { Write-Host "✅ $msg" -ForegroundColor Green }
12
+ function Write-Warn($msg) { Write-Host "⚠️ $msg" -ForegroundColor Yellow }
13
+ function Write-Err($msg) { Write-Host "❌ $msg" -ForegroundColor Red }
14
+ function Write-Info($msg) { Write-Host "ℹ️ $msg" -ForegroundColor Cyan }
15
+
16
+ $AutoYes = $env:OPC_YES -eq '1'
17
+ $SkipOllama = $env:OPC_NO_OLLAMA -eq '1'
18
+
19
+ function Confirm-Action($prompt) {
20
+ if ($AutoYes) { return $true }
21
+ $choice = Read-Host "❓ $prompt [Y/n]"
22
+ return ($choice -ne 'n' -and $choice -ne 'N' -and $choice -ne 'no')
23
+ }
24
+
25
+ # ── 检测操作系统 ──────────────────────────────────────────────
26
+ Write-Step "🔍 检测操作系统 / Detecting OS"
27
+ Write-Ok "Windows $([System.Environment]::OSVersion.Version) detected"
28
+
29
+ # ── 检测 & 安装 Node.js ──────────────────────────────────────
30
+ Write-Step "📦 检测 Node.js / Checking Node.js"
31
+ $NeedNode = $false
32
+
33
+ try {
34
+ $nodeVer = (node -v) -replace 'v','' -split '\.' | Select-Object -First 1
35
+ if ([int]$nodeVer -ge 18) {
36
+ Write-Ok "Node.js $(node -v) 已安装 / installed"
37
+ } else {
38
+ Write-Warn "Node.js $(node -v) 版本过低,需要 18+ / version too old"
39
+ $NeedNode = $true
40
+ }
41
+ } catch {
42
+ Write-Warn "未检测到 Node.js / Node.js not found"
43
+ $NeedNode = $true
44
+ }
45
+
46
+ if ($NeedNode) {
47
+ Write-Info "将安装 Node.js 22 LTS / Installing Node.js 22 LTS"
48
+ if (Confirm-Action "安装 Node.js 22? / Install Node.js 22?") {
49
+ $installed = $false
50
+ # 尝试 winget
51
+ try {
52
+ winget install OpenJS.NodeJS.LTS --accept-package-agreements --accept-source-agreements
53
+ $installed = $true
54
+ Write-Ok "Node.js 通过 winget 安装成功 / installed via winget"
55
+ } catch {}
56
+
57
+ # 尝试 choco
58
+ if (-not $installed) {
59
+ try {
60
+ choco install nodejs-lts -y
61
+ $installed = $true
62
+ Write-Ok "Node.js 通过 Chocolatey 安装成功 / installed via Chocolatey"
63
+ } catch {}
64
+ }
65
+
66
+ if (-not $installed) {
67
+ Write-Err "自动安装失败 / Auto-install failed"
68
+ Write-Info "请手动下载安装 / Please download manually: https://nodejs.org/"
69
+ Start-Process "https://nodejs.org/en/download/"
70
+ exit 1
71
+ }
72
+
73
+ # 刷新 PATH
74
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
75
+ } else {
76
+ Write-Err "Node.js 是必需的 / Node.js is required"
77
+ Write-Info "下载地址 / Download: https://nodejs.org/"
78
+ exit 1
79
+ }
80
+ }
81
+
82
+ # ── 安装 OPC Agent ────────────────────────────────────────────
83
+ Write-Step "🚀 安装 OPC Agent / Installing OPC Agent"
84
+ Write-Info "npm install -g opc-agent ..."
85
+ npm install -g opc-agent
86
+ Write-Ok "OPC Agent 安装成功 / installed"
87
+
88
+ # ── Ollama(可选)─────────────────────────────────────────────
89
+ if (-not $SkipOllama) {
90
+ Write-Step "🦙 检测 Ollama / Checking Ollama"
91
+
92
+ $hasOllama = $false
93
+ try { ollama --version 2>$null; $hasOllama = $true } catch {}
94
+
95
+ if ($hasOllama) {
96
+ Write-Ok "Ollama 已安装 / installed"
97
+ } else {
98
+ Write-Warn "未检测到 Ollama / Ollama not found"
99
+ Write-Info "Ollama 可让你在本地运行 AI 模型(免费、数据不出门)"
100
+ Write-Info "Ollama lets you run AI models locally (free, private)"
101
+
102
+ if (Confirm-Action "安装 Ollama? / Install Ollama?") {
103
+ try {
104
+ winget install Ollama.Ollama --accept-package-agreements --accept-source-agreements
105
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
106
+ Write-Ok "Ollama 安装成功 / installed"
107
+ $hasOllama = $true
108
+ } catch {
109
+ Write-Warn "winget 安装失败,请手动下载 / Please download manually: https://ollama.com/download"
110
+ Start-Process "https://ollama.com/download"
111
+ }
112
+ }
113
+ }
114
+
115
+ # 拉取推荐模型
116
+ if ($hasOllama) {
117
+ Write-Step "🧠 推荐模型 / Recommended Models"
118
+ Write-Info "推荐拉取以下模型用于本地 Agent:"
119
+ Write-Info " • qwen2.5:7b — 中英文对话(4.7GB)"
120
+ Write-Info " • nomic-embed-text — 文本向量化(274MB)"
121
+
122
+ if (Confirm-Action "拉取推荐模型? / Pull recommended models?") {
123
+ Write-Info "拉取 qwen2.5:7b ... (可能需要几分钟)"
124
+ try { ollama pull qwen2.5:7b; Write-Ok "qwen2.5:7b ✓" } catch { Write-Warn "拉取失败,可稍后手动: ollama pull qwen2.5:7b" }
125
+
126
+ Write-Info "拉取 nomic-embed-text ..."
127
+ try { ollama pull nomic-embed-text; Write-Ok "nomic-embed-text ✓" } catch { Write-Warn "拉取失败,可稍后手动: ollama pull nomic-embed-text" }
128
+ }
129
+ }
130
+ }
131
+
132
+ # ── 完成 ──────────────────────────────────────────────────────
133
+ Write-Step "🎉 安装完成!/ Installation Complete!"
134
+ Write-Host ""
135
+ Write-Host "┌─────────────────────────────────────────────────┐" -ForegroundColor Green
136
+ Write-Host "│ OPC Agent 已安装成功! │" -ForegroundColor Green
137
+ Write-Host "│ OPC Agent installed successfully! │" -ForegroundColor Green
138
+ Write-Host "│ │" -ForegroundColor Green
139
+ Write-Host "│ 快速开始 / Quick Start: │" -ForegroundColor Green
140
+ Write-Host "│ opc init my-agent # 创建 Agent │" -ForegroundColor Green
141
+ Write-Host "│ cd my-agent; npm i │" -ForegroundColor Green
142
+ Write-Host "│ opc chat # 开始对话 │" -ForegroundColor Green
143
+ Write-Host "│ │" -ForegroundColor Green
144
+ Write-Host "│ 可视化面板 / Dashboard: │" -ForegroundColor Green
145
+ Write-Host "│ opc studio │" -ForegroundColor Green
146
+ Write-Host "│ │" -ForegroundColor Green
147
+ Write-Host "│ 帮助 / Help: │" -ForegroundColor Green
148
+ Write-Host "│ opc --help │" -ForegroundColor Green
149
+ Write-Host "└─────────────────────────────────────────────────┘" -ForegroundColor Green
150
+ Write-Host ""
151
+
152
+ if (Confirm-Action "现在打开 OPC Studio? / Open OPC Studio now?") {
153
+ opc studio
154
+ }
package/install.sh CHANGED
@@ -1,164 +1,164 @@
1
- #!/bin/bash
2
- # ============================================================================
3
- # OPC Agent 一键安装脚本 (macOS / Linux / WSL)
4
- # 用法: curl -fsSL https://raw.githubusercontent.com/Deepleaper/opc-agent/main/install.sh | bash
5
- # 高级: curl -fsSL ... | bash -s -- --yes --no-ollama
6
- # ============================================================================
7
-
8
- set -e
9
-
10
- # ── 颜色 & Emoji ──────────────────────────────────────────────
11
- RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; CYAN='\033[0;36m'; NC='\033[0m'
12
- info() { echo -e "${CYAN}ℹ️ $1${NC}"; }
13
- ok() { echo -e "${GREEN}✅ $1${NC}"; }
14
- warn() { echo -e "${YELLOW}⚠️ $1${NC}"; }
15
- err() { echo -e "${RED}❌ $1${NC}"; }
16
- step() { echo -e "\n${BLUE}━━━ $1 ━━━${NC}"; }
17
-
18
- # ── 参数解析 ──────────────────────────────────────────────────
19
- AUTO_YES=false
20
- SKIP_OLLAMA=false
21
- for arg in "$@"; do
22
- case "$arg" in
23
- --yes|-y) AUTO_YES=true ;;
24
- --no-ollama) SKIP_OLLAMA=true ;;
25
- esac
26
- done
27
-
28
- confirm() {
29
- if $AUTO_YES; then return 0; fi
30
- read -r -p "$(echo -e "${YELLOW}❓ $1 [Y/n]: ${NC}")" choice
31
- case "$choice" in n|N|no|NO) return 1 ;; *) return 0 ;; esac
32
- }
33
-
34
- # ── 检测操作系统 ──────────────────────────────────────────────
35
- step "🔍 检测操作系统 / Detecting OS"
36
- OS="unknown"
37
- if [[ "$OSTYPE" == "darwin"* ]]; then
38
- OS="macos"
39
- ok "macOS detected"
40
- elif grep -qi microsoft /proc/version 2>/dev/null; then
41
- OS="wsl"
42
- ok "WSL (Windows Subsystem for Linux) detected"
43
- elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
44
- OS="linux"
45
- ok "Linux detected"
46
- else
47
- err "不支持的操作系统 / Unsupported OS: $OSTYPE"
48
- exit 1
49
- fi
50
-
51
- # ── 检测 & 安装 Node.js ──────────────────────────────────────
52
- step "📦 检测 Node.js / Checking Node.js"
53
- NEED_NODE=false
54
-
55
- if command -v node &>/dev/null; then
56
- NODE_VER=$(node -v | sed 's/v//' | cut -d. -f1)
57
- if [ "$NODE_VER" -ge 18 ]; then
58
- ok "Node.js $(node -v) 已安装 / installed"
59
- else
60
- warn "Node.js $(node -v) 版本过低,需要 18+ / version too old, need 18+"
61
- NEED_NODE=true
62
- fi
63
- else
64
- warn "未检测到 Node.js / Node.js not found"
65
- NEED_NODE=true
66
- fi
67
-
68
- if $NEED_NODE; then
69
- info "将通过 nvm 安装 Node.js 22 LTS / Installing Node.js 22 via nvm"
70
- if confirm "安装 Node.js 22? / Install Node.js 22?"; then
71
- if command -v nvm &>/dev/null || [ -s "$HOME/.nvm/nvm.sh" ]; then
72
- [ -s "$HOME/.nvm/nvm.sh" ] && . "$HOME/.nvm/nvm.sh"
73
- info "nvm 已存在,安装 Node 22... / nvm found, installing Node 22..."
74
- else
75
- info "安装 nvm... / Installing nvm..."
76
- curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
77
- export NVM_DIR="$HOME/.nvm"
78
- [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
79
- fi
80
- nvm install 22
81
- nvm use 22
82
- ok "Node.js $(node -v) 安装成功 / installed successfully"
83
- else
84
- err "Node.js 是必需的 / Node.js is required"
85
- echo "手动安装 / Manual install: https://nodejs.org/"
86
- exit 1
87
- fi
88
- fi
89
-
90
- # ── 安装 OPC Agent ────────────────────────────────────────────
91
- step "🚀 安装 OPC Agent / Installing OPC Agent"
92
- info "npm install -g opc-agent ..."
93
- npm install -g opc-agent
94
- ok "OPC Agent $(opc --version 2>/dev/null || echo '') 安装成功 / installed"
95
-
96
- # ── Ollama(可选)─────────────────────────────────────────────
97
- if ! $SKIP_OLLAMA; then
98
- step "🦙 检测 Ollama / Checking Ollama"
99
-
100
- if command -v ollama &>/dev/null; then
101
- ok "Ollama 已安装 / installed ($(ollama --version 2>/dev/null || echo 'ok'))"
102
- else
103
- warn "未检测到 Ollama / Ollama not found"
104
- info "Ollama 可让你在本地运行 AI 模型(免费、数据不出门)"
105
- info "Ollama lets you run AI models locally (free, private)"
106
-
107
- if confirm "安装 Ollama? / Install Ollama?"; then
108
- if [ "$OS" = "macos" ]; then
109
- if command -v brew &>/dev/null; then
110
- brew install ollama
111
- else
112
- info "请从 https://ollama.com/download 下载安装"
113
- info "Download from https://ollama.com/download"
114
- open "https://ollama.com/download" 2>/dev/null || true
115
- fi
116
- else
117
- curl -fsSL https://ollama.com/install.sh | sh
118
- fi
119
- ok "Ollama 安装成功 / installed"
120
- else
121
- info "跳过 Ollama / Skipping Ollama"
122
- fi
123
- fi
124
-
125
- # 拉取推荐模型
126
- if command -v ollama &>/dev/null; then
127
- step "🧠 推荐模型 / Recommended Models"
128
- info "推荐拉取以下模型用于本地 Agent:"
129
- info " • qwen2.5:7b — 中英文对话(4.7GB)"
130
- info " • nomic-embed-text — 文本向量化(274MB)"
131
-
132
- if confirm "拉取推荐模型? / Pull recommended models?"; then
133
- info "拉取 qwen2.5:7b ... (可能需要几分钟)"
134
- ollama pull qwen2.5:7b && ok "qwen2.5:7b ✓" || warn "qwen2.5:7b 拉取失败,可稍后手动: ollama pull qwen2.5:7b"
135
-
136
- info "拉取 nomic-embed-text ..."
137
- ollama pull nomic-embed-text && ok "nomic-embed-text ✓" || warn "拉取失败,可稍后手动: ollama pull nomic-embed-text"
138
- fi
139
- fi
140
- fi
141
-
142
- # ── 启动 Studio ───────────────────────────────────────────────
143
- step "🎉 安装完成!/ Installation Complete!"
144
- echo ""
145
- echo -e "${GREEN}┌─────────────────────────────────────────────────┐${NC}"
146
- echo -e "${GREEN}│ OPC Agent 已安装成功! │${NC}"
147
- echo -e "${GREEN}│ OPC Agent installed successfully! │${NC}"
148
- echo -e "${GREEN}│ │${NC}"
149
- echo -e "${GREEN}│ 快速开始 / Quick Start: │${NC}"
150
- echo -e "${GREEN}│ opc init my-agent # 创建 Agent │${NC}"
151
- echo -e "${GREEN}│ cd my-agent && npm i │${NC}"
152
- echo -e "${GREEN}│ opc chat # 开始对话 │${NC}"
153
- echo -e "${GREEN}│ │${NC}"
154
- echo -e "${GREEN}│ 可视化面板 / Dashboard: │${NC}"
155
- echo -e "${GREEN}│ opc studio │${NC}"
156
- echo -e "${GREEN}│ │${NC}"
157
- echo -e "${GREEN}│ 交互式设置 / Setup wizard: │${NC}"
158
- echo -e "${GREEN}│ opc setup │${NC}"
159
- echo -e "${GREEN}└─────────────────────────────────────────────────┘${NC}"
160
- echo ""
161
-
162
- if confirm "现在打开 OPC Studio? / Open OPC Studio now?"; then
163
- opc studio
164
- fi
1
+ #!/bin/bash
2
+ # ============================================================================
3
+ # OPC Agent 一键安装脚本 (macOS / Linux / WSL)
4
+ # 用法: curl -fsSL https://raw.githubusercontent.com/Deepleaper/opc-agent/main/install.sh | bash
5
+ # 高级: curl -fsSL ... | bash -s -- --yes --no-ollama
6
+ # ============================================================================
7
+
8
+ set -e
9
+
10
+ # ── 颜色 & Emoji ──────────────────────────────────────────────
11
+ RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; CYAN='\033[0;36m'; NC='\033[0m'
12
+ info() { echo -e "${CYAN}ℹ️ $1${NC}"; }
13
+ ok() { echo -e "${GREEN}✅ $1${NC}"; }
14
+ warn() { echo -e "${YELLOW}⚠️ $1${NC}"; }
15
+ err() { echo -e "${RED}❌ $1${NC}"; }
16
+ step() { echo -e "\n${BLUE}━━━ $1 ━━━${NC}"; }
17
+
18
+ # ── 参数解析 ──────────────────────────────────────────────────
19
+ AUTO_YES=false
20
+ SKIP_OLLAMA=false
21
+ for arg in "$@"; do
22
+ case "$arg" in
23
+ --yes|-y) AUTO_YES=true ;;
24
+ --no-ollama) SKIP_OLLAMA=true ;;
25
+ esac
26
+ done
27
+
28
+ confirm() {
29
+ if $AUTO_YES; then return 0; fi
30
+ read -r -p "$(echo -e "${YELLOW}❓ $1 [Y/n]: ${NC}")" choice
31
+ case "$choice" in n|N|no|NO) return 1 ;; *) return 0 ;; esac
32
+ }
33
+
34
+ # ── 检测操作系统 ──────────────────────────────────────────────
35
+ step "🔍 检测操作系统 / Detecting OS"
36
+ OS="unknown"
37
+ if [[ "$OSTYPE" == "darwin"* ]]; then
38
+ OS="macos"
39
+ ok "macOS detected"
40
+ elif grep -qi microsoft /proc/version 2>/dev/null; then
41
+ OS="wsl"
42
+ ok "WSL (Windows Subsystem for Linux) detected"
43
+ elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
44
+ OS="linux"
45
+ ok "Linux detected"
46
+ else
47
+ err "不支持的操作系统 / Unsupported OS: $OSTYPE"
48
+ exit 1
49
+ fi
50
+
51
+ # ── 检测 & 安装 Node.js ──────────────────────────────────────
52
+ step "📦 检测 Node.js / Checking Node.js"
53
+ NEED_NODE=false
54
+
55
+ if command -v node &>/dev/null; then
56
+ NODE_VER=$(node -v | sed 's/v//' | cut -d. -f1)
57
+ if [ "$NODE_VER" -ge 18 ]; then
58
+ ok "Node.js $(node -v) 已安装 / installed"
59
+ else
60
+ warn "Node.js $(node -v) 版本过低,需要 18+ / version too old, need 18+"
61
+ NEED_NODE=true
62
+ fi
63
+ else
64
+ warn "未检测到 Node.js / Node.js not found"
65
+ NEED_NODE=true
66
+ fi
67
+
68
+ if $NEED_NODE; then
69
+ info "将通过 nvm 安装 Node.js 22 LTS / Installing Node.js 22 via nvm"
70
+ if confirm "安装 Node.js 22? / Install Node.js 22?"; then
71
+ if command -v nvm &>/dev/null || [ -s "$HOME/.nvm/nvm.sh" ]; then
72
+ [ -s "$HOME/.nvm/nvm.sh" ] && . "$HOME/.nvm/nvm.sh"
73
+ info "nvm 已存在,安装 Node 22... / nvm found, installing Node 22..."
74
+ else
75
+ info "安装 nvm... / Installing nvm..."
76
+ curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
77
+ export NVM_DIR="$HOME/.nvm"
78
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
79
+ fi
80
+ nvm install 22
81
+ nvm use 22
82
+ ok "Node.js $(node -v) 安装成功 / installed successfully"
83
+ else
84
+ err "Node.js 是必需的 / Node.js is required"
85
+ echo "手动安装 / Manual install: https://nodejs.org/"
86
+ exit 1
87
+ fi
88
+ fi
89
+
90
+ # ── 安装 OPC Agent ────────────────────────────────────────────
91
+ step "🚀 安装 OPC Agent / Installing OPC Agent"
92
+ info "npm install -g opc-agent ..."
93
+ npm install -g opc-agent
94
+ ok "OPC Agent $(opc --version 2>/dev/null || echo '') 安装成功 / installed"
95
+
96
+ # ── Ollama(可选)─────────────────────────────────────────────
97
+ if ! $SKIP_OLLAMA; then
98
+ step "🦙 检测 Ollama / Checking Ollama"
99
+
100
+ if command -v ollama &>/dev/null; then
101
+ ok "Ollama 已安装 / installed ($(ollama --version 2>/dev/null || echo 'ok'))"
102
+ else
103
+ warn "未检测到 Ollama / Ollama not found"
104
+ info "Ollama 可让你在本地运行 AI 模型(免费、数据不出门)"
105
+ info "Ollama lets you run AI models locally (free, private)"
106
+
107
+ if confirm "安装 Ollama? / Install Ollama?"; then
108
+ if [ "$OS" = "macos" ]; then
109
+ if command -v brew &>/dev/null; then
110
+ brew install ollama
111
+ else
112
+ info "请从 https://ollama.com/download 下载安装"
113
+ info "Download from https://ollama.com/download"
114
+ open "https://ollama.com/download" 2>/dev/null || true
115
+ fi
116
+ else
117
+ curl -fsSL https://ollama.com/install.sh | sh
118
+ fi
119
+ ok "Ollama 安装成功 / installed"
120
+ else
121
+ info "跳过 Ollama / Skipping Ollama"
122
+ fi
123
+ fi
124
+
125
+ # 拉取推荐模型
126
+ if command -v ollama &>/dev/null; then
127
+ step "🧠 推荐模型 / Recommended Models"
128
+ info "推荐拉取以下模型用于本地 Agent:"
129
+ info " • qwen2.5:7b — 中英文对话(4.7GB)"
130
+ info " • nomic-embed-text — 文本向量化(274MB)"
131
+
132
+ if confirm "拉取推荐模型? / Pull recommended models?"; then
133
+ info "拉取 qwen2.5:7b ... (可能需要几分钟)"
134
+ ollama pull qwen2.5:7b && ok "qwen2.5:7b ✓" || warn "qwen2.5:7b 拉取失败,可稍后手动: ollama pull qwen2.5:7b"
135
+
136
+ info "拉取 nomic-embed-text ..."
137
+ ollama pull nomic-embed-text && ok "nomic-embed-text ✓" || warn "拉取失败,可稍后手动: ollama pull nomic-embed-text"
138
+ fi
139
+ fi
140
+ fi
141
+
142
+ # ── 启动 Studio ───────────────────────────────────────────────
143
+ step "🎉 安装完成!/ Installation Complete!"
144
+ echo ""
145
+ echo -e "${GREEN}┌─────────────────────────────────────────────────┐${NC}"
146
+ echo -e "${GREEN}│ OPC Agent 已安装成功! │${NC}"
147
+ echo -e "${GREEN}│ OPC Agent installed successfully! │${NC}"
148
+ echo -e "${GREEN}│ │${NC}"
149
+ echo -e "${GREEN}│ 快速开始 / Quick Start: │${NC}"
150
+ echo -e "${GREEN}│ opc init my-agent # 创建 Agent │${NC}"
151
+ echo -e "${GREEN}│ cd my-agent && npm i │${NC}"
152
+ echo -e "${GREEN}│ opc chat # 开始对话 │${NC}"
153
+ echo -e "${GREEN}│ │${NC}"
154
+ echo -e "${GREEN}│ 可视化面板 / Dashboard: │${NC}"
155
+ echo -e "${GREEN}│ opc studio │${NC}"
156
+ echo -e "${GREEN}│ │${NC}"
157
+ echo -e "${GREEN}│ 帮助 / Help: │${NC}"
158
+ echo -e "${GREEN}│ opc --help │${NC}"
159
+ echo -e "${GREEN}└─────────────────────────────────────────────────┘${NC}"
160
+ echo ""
161
+
162
+ if confirm "现在打开 OPC Studio? / Open OPC Studio now?"; then
163
+ opc studio
164
+ fi