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
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