opc-agent 4.1.0 → 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 (245) 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/deploy/index.js +56 -56
  9. package/dist/studio/server.js +30 -1
  10. package/dist/studio-ui/index.html +230 -10
  11. package/dist/ui/components.js +105 -105
  12. package/examples/README.md +22 -22
  13. package/examples/basic-agent.ts +90 -90
  14. package/examples/brain-integration.ts +71 -71
  15. package/examples/multi-channel.ts +74 -74
  16. package/fix-sidebar.mjs +188 -188
  17. package/install.ps1 +154 -154
  18. package/install.sh +164 -164
  19. package/package.json +1 -1
  20. package/scripts/install.ps1 +31 -31
  21. package/scripts/install.sh +40 -40
  22. package/serve-studio.js +13 -13
  23. package/serve-test.js +25 -25
  24. package/src/channels/dingtalk.ts +46 -46
  25. package/src/channels/email.ts +351 -351
  26. package/src/channels/feishu.ts +349 -349
  27. package/src/channels/googlechat.ts +42 -42
  28. package/src/channels/imessage.ts +31 -31
  29. package/src/channels/irc.ts +82 -82
  30. package/src/channels/line.ts +32 -32
  31. package/src/channels/matrix.ts +33 -33
  32. package/src/channels/mattermost.ts +57 -57
  33. package/src/channels/msteams.ts +32 -32
  34. package/src/channels/nostr.ts +32 -32
  35. package/src/channels/qq.ts +33 -33
  36. package/src/channels/signal.ts +32 -32
  37. package/src/channels/sms.ts +33 -33
  38. package/src/channels/telegram.ts +616 -616
  39. package/src/channels/twitch.ts +65 -65
  40. package/src/channels/voice-call.ts +100 -100
  41. package/src/channels/websocket.ts +399 -399
  42. package/src/channels/wechat.ts +329 -329
  43. package/src/channels/whatsapp.ts +32 -32
  44. package/src/cli/chat.ts +99 -99
  45. package/src/cli/setup.ts +314 -314
  46. package/src/core/agent.ts +476 -476
  47. package/src/core/api-server.ts +277 -277
  48. package/src/core/audio.ts +98 -98
  49. package/src/core/collaboration.ts +275 -275
  50. package/src/core/context-discovery.ts +85 -85
  51. package/src/core/context-refs.ts +140 -140
  52. package/src/core/gateway.ts +106 -106
  53. package/src/core/heartbeat.ts +51 -51
  54. package/src/core/hooks.ts +105 -105
  55. package/src/core/ide-bridge.ts +133 -133
  56. package/src/core/node-network.ts +86 -86
  57. package/src/core/profiles.ts +122 -122
  58. package/src/core/scheduler.ts +187 -187
  59. package/src/core/session-manager.ts +137 -137
  60. package/src/core/subagent.ts +98 -98
  61. package/src/core/vision.ts +180 -180
  62. package/src/core/workflow-graph.ts +365 -365
  63. package/src/daemon.ts +96 -96
  64. package/src/deploy/index.ts +255 -255
  65. package/src/doctor.ts +156 -156
  66. package/src/eval/index.ts +211 -211
  67. package/src/eval/suites/basic.json +16 -16
  68. package/src/eval/suites/memory.json +12 -12
  69. package/src/eval/suites/safety.json +14 -14
  70. package/src/hub/brain-seed.ts +54 -54
  71. package/src/hub/client.ts +60 -60
  72. package/src/mcp/servers/calculator-mcp.ts +65 -65
  73. package/src/mcp/servers/crypto-mcp.ts +73 -73
  74. package/src/mcp/servers/database-mcp.ts +72 -72
  75. package/src/mcp/servers/datetime-mcp.ts +69 -69
  76. package/src/mcp/servers/filesystem.ts +66 -66
  77. package/src/mcp/servers/github-mcp.ts +58 -58
  78. package/src/mcp/servers/index.ts +63 -63
  79. package/src/mcp/servers/json-mcp.ts +102 -102
  80. package/src/mcp/servers/memory-mcp.ts +56 -56
  81. package/src/mcp/servers/regex-mcp.ts +53 -53
  82. package/src/mcp/servers/web-mcp.ts +49 -49
  83. package/src/memory/context-compressor.ts +189 -189
  84. package/src/memory/seed-loader.ts +212 -212
  85. package/src/memory/user-profiler.ts +215 -215
  86. package/src/plugins/content-filter.ts +23 -23
  87. package/src/plugins/logger.ts +18 -18
  88. package/src/plugins/rate-limiter.ts +38 -38
  89. package/src/protocols/a2a/client.ts +132 -132
  90. package/src/protocols/a2a/index.ts +8 -8
  91. package/src/protocols/a2a/server.ts +333 -333
  92. package/src/protocols/a2a/types.ts +88 -88
  93. package/src/protocols/a2a/utils.ts +50 -50
  94. package/src/protocols/agui/client.ts +83 -83
  95. package/src/protocols/agui/index.ts +4 -4
  96. package/src/protocols/agui/server.ts +218 -218
  97. package/src/protocols/agui/types.ts +153 -153
  98. package/src/protocols/index.ts +2 -2
  99. package/src/protocols/mcp/agent-tools.ts +134 -134
  100. package/src/protocols/mcp/index.ts +8 -8
  101. package/src/protocols/mcp/server.ts +262 -262
  102. package/src/protocols/mcp/types.ts +69 -69
  103. package/src/providers/index.ts +632 -632
  104. package/src/publish/index.ts +376 -376
  105. package/src/scheduler/cron-engine.ts +191 -191
  106. package/src/scheduler/index.ts +2 -2
  107. package/src/schema/oad.ts +217 -217
  108. package/src/security/approval.ts +131 -131
  109. package/src/security/approvals.ts +143 -143
  110. package/src/security/elevated.ts +105 -105
  111. package/src/security/guardrails.ts +248 -248
  112. package/src/security/index.ts +9 -9
  113. package/src/security/keys.ts +87 -87
  114. package/src/security/secrets.ts +129 -129
  115. package/src/skills/builtin/index.ts +408 -408
  116. package/src/skills/marketplace.ts +113 -113
  117. package/src/skills/types.ts +42 -42
  118. package/src/studio/server.ts +31 -1
  119. package/src/studio/templates-data.ts +178 -178
  120. package/src/studio-ui/index.html +230 -10
  121. package/src/telemetry/index.ts +324 -324
  122. package/src/tools/builtin/browser.ts +299 -299
  123. package/src/tools/builtin/datetime.ts +41 -41
  124. package/src/tools/builtin/file.ts +107 -107
  125. package/src/tools/builtin/home-assistant.ts +116 -116
  126. package/src/tools/builtin/rl-tools.ts +243 -243
  127. package/src/tools/builtin/shell.ts +43 -43
  128. package/src/tools/builtin/vision.ts +64 -64
  129. package/src/tools/builtin/web-search.ts +126 -126
  130. package/src/tools/builtin/web.ts +35 -35
  131. package/src/tools/document-processor.ts +213 -213
  132. package/src/tools/image-generator.ts +150 -150
  133. package/src/tools/integrations/calendar.ts +73 -73
  134. package/src/tools/integrations/code-exec.ts +39 -39
  135. package/src/tools/integrations/csv-analyzer.ts +92 -92
  136. package/src/tools/integrations/database.ts +44 -44
  137. package/src/tools/integrations/email-send.ts +76 -76
  138. package/src/tools/integrations/git-tool.ts +42 -42
  139. package/src/tools/integrations/github-tool.ts +76 -76
  140. package/src/tools/integrations/image-gen.ts +56 -56
  141. package/src/tools/integrations/index.ts +92 -92
  142. package/src/tools/integrations/jira.ts +83 -83
  143. package/src/tools/integrations/notion.ts +71 -71
  144. package/src/tools/integrations/npm-tool.ts +48 -48
  145. package/src/tools/integrations/pdf-reader.ts +58 -58
  146. package/src/tools/integrations/slack.ts +65 -65
  147. package/src/tools/integrations/summarizer.ts +49 -49
  148. package/src/tools/integrations/translator.ts +48 -48
  149. package/src/tools/integrations/trello.ts +60 -60
  150. package/src/tools/integrations/vector-search.ts +42 -42
  151. package/src/tools/integrations/web-scraper.ts +47 -47
  152. package/src/tools/integrations/web-search.ts +58 -58
  153. package/src/tools/integrations/webhook.ts +38 -38
  154. package/src/tools/mcp-client.ts +131 -131
  155. package/src/tools/web-scraper.ts +179 -179
  156. package/src/tools/web-search.ts +180 -180
  157. package/src/ui/components.ts +127 -127
  158. package/srv-out.txt +1 -1
  159. package/templates/ecommerce-assistant/README.md +45 -45
  160. package/templates/ecommerce-assistant/oad.yaml +47 -47
  161. package/templates/tech-support/README.md +43 -43
  162. package/templates/tech-support/oad.yaml +45 -45
  163. package/test-agent/Dockerfile +9 -9
  164. package/test-agent/README.md +50 -50
  165. package/test-agent/agent.yaml +23 -23
  166. package/test-agent/docker-compose.yml +11 -11
  167. package/test-agent/oad.yaml +31 -31
  168. package/test-agent/package-lock.json +1492 -1492
  169. package/test-agent/package.json +17 -17
  170. package/test-agent/src/index.ts +24 -24
  171. package/test-agent/src/skills/echo.ts +15 -15
  172. package/test-agent/tsconfig.json +24 -24
  173. package/test-full.js +43 -43
  174. package/test-sidebar.js +22 -22
  175. package/test-studio3.js +75 -75
  176. package/test-studio4.js +41 -41
  177. package/tests/a2a-protocol.test.ts +285 -285
  178. package/tests/agui-protocol.test.ts +246 -246
  179. package/tests/api-server.test.ts +148 -148
  180. package/tests/approvals.test.ts +89 -89
  181. package/tests/audio.test.ts +40 -40
  182. package/tests/brain-seed-extended.test.ts +490 -490
  183. package/tests/brain-seed.test.ts +239 -239
  184. package/tests/browser.test.ts +179 -179
  185. package/tests/channels/discord.test.ts +79 -79
  186. package/tests/channels/email.test.ts +148 -148
  187. package/tests/channels/feishu.test.ts +123 -123
  188. package/tests/channels/telegram.test.ts +129 -129
  189. package/tests/channels/websocket.test.ts +53 -53
  190. package/tests/channels/wechat.test.ts +170 -170
  191. package/tests/channels-extra.test.ts +45 -45
  192. package/tests/chat-cli.test.ts +160 -160
  193. package/tests/cli.test.ts +46 -46
  194. package/tests/context-compressor.test.ts +172 -172
  195. package/tests/context-refs.test.ts +121 -121
  196. package/tests/cron-engine.test.ts +101 -101
  197. package/tests/daemon.test.ts +135 -135
  198. package/tests/deepbrain-wire.test.ts +234 -234
  199. package/tests/deploy-and-dag.test.ts +196 -196
  200. package/tests/doctor.test.ts +38 -38
  201. package/tests/document-processor.test.ts +69 -69
  202. package/tests/e2e-nocode.test.ts +442 -442
  203. package/tests/elevated.test.ts +69 -69
  204. package/tests/eval.test.ts +173 -173
  205. package/tests/gateway.test.ts +63 -63
  206. package/tests/guardrails.test.ts +177 -177
  207. package/tests/home-assistant.test.ts +40 -40
  208. package/tests/hooks.test.ts +79 -79
  209. package/tests/ide-bridge.test.ts +38 -38
  210. package/tests/image-generator.test.ts +84 -84
  211. package/tests/init-role.test.ts +124 -124
  212. package/tests/integrations.test.ts +249 -249
  213. package/tests/mcp-client.test.ts +92 -92
  214. package/tests/mcp-server.test.ts +178 -178
  215. package/tests/mcp-servers.test.ts +260 -260
  216. package/tests/node-network.test.ts +74 -74
  217. package/tests/plugin-a2a-enhanced.test.ts +230 -230
  218. package/tests/profiles.test.ts +61 -61
  219. package/tests/publish.test.ts +231 -231
  220. package/tests/rl-tools.test.ts +93 -93
  221. package/tests/sandbox-manager.test.ts +46 -46
  222. package/tests/scheduler.test.ts +200 -200
  223. package/tests/secrets.test.ts +107 -107
  224. package/tests/security-enhanced.test.ts +233 -233
  225. package/tests/settings-api.test.ts +148 -148
  226. package/tests/setup.test.ts +73 -73
  227. package/tests/subagent.test.ts +193 -193
  228. package/tests/telegram-discord.test.ts +60 -60
  229. package/tests/telemetry.test.ts +186 -186
  230. package/tests/user-profiler.test.ts +169 -169
  231. package/tests/v090-features.test.ts +254 -254
  232. package/tests/vision.test.ts +61 -61
  233. package/tests/voice-call.test.ts +47 -47
  234. package/tests/voice-enhanced.test.ts +169 -169
  235. package/tests/voice-interaction.test.ts +38 -38
  236. package/tests/web-search.test.ts +155 -155
  237. package/tests/workflow-graph.test.ts +279 -279
  238. package/tutorial/customer-service-agent/README.md +612 -612
  239. package/tutorial/customer-service-agent/SOUL.md +26 -26
  240. package/tutorial/customer-service-agent/agent.yaml +63 -63
  241. package/tutorial/customer-service-agent/package.json +19 -19
  242. package/tutorial/customer-service-agent/src/index.ts +69 -69
  243. package/tutorial/customer-service-agent/src/skills/faq.ts +27 -27
  244. package/tutorial/customer-service-agent/src/skills/ticket.ts +22 -22
  245. 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