foliko 1.0.80 → 1.0.81

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 (235) hide show
  1. package/.agent/agents/code-assistant.json +14 -0
  2. package/.agent/agents/email-assistant.json +14 -0
  3. package/.agent/agents/file-assistant.json +15 -0
  4. package/.agent/agents/system-assistant.json +15 -0
  5. package/.agent/agents/web-assistant.json +12 -0
  6. package/.agent/data/ambient/goals.json +50 -0
  7. package/.agent/data/ambient/memories.json +7 -0
  8. package/.agent/data/default.json +15 -31894
  9. package/.agent/data/plugins-state.json +146 -181
  10. package/.agent/data/scheduler/tasks.json +1 -0
  11. package/.agent/mcp_config.json +1 -0
  12. package/.agent/package.json +8 -0
  13. package/.agent/plugins/__pycache__/test_plugin.cpython-312.pyc +0 -0
  14. package/.agent/plugins/system-info/index.js +387 -0
  15. package/.agent/plugins/system-info/package.json +4 -0
  16. package/.agent/plugins/system-info/test.js +40 -0
  17. package/.agent/plugins/test_plugin.py +304 -0
  18. package/.agent/plugins.json +14 -5
  19. package/.agent/python-scripts/test_sample.py +24 -0
  20. package/.agent/skills/sysinfo/SKILL.md +38 -0
  21. package/.agent/skills/sysinfo/system-info.sh +130 -0
  22. package/.agent/skills/workflow/SKILL.md +324 -0
  23. package/.agent/workflows/email-digest.json +50 -0
  24. package/.agent/workflows/file-backup.json +21 -0
  25. package/.agent/workflows/get-ip-notify.json +32 -0
  26. package/.agent/workflows/news-aggregator.json +93 -0
  27. package/.agent/workflows/news-dashboard-v2.json +94 -0
  28. package/.agent/workflows/notification-batch.json +32 -0
  29. package/.claude/settings.local.json +171 -171
  30. package/.env.example +56 -56
  31. package/cli/bin/foliko.js +12 -12
  32. package/cli/src/commands/chat.js +143 -143
  33. package/cli/src/commands/list.js +93 -93
  34. package/cli/src/index.js +75 -75
  35. package/cli/src/ui/chat-ui.js +201 -201
  36. package/cli/src/utils/ansi.js +40 -40
  37. package/cli/src/utils/markdown.js +292 -292
  38. package/examples/ambient-example.js +194 -194
  39. package/examples/basic.js +115 -115
  40. package/examples/bootstrap.js +121 -121
  41. package/examples/mcp-example.js +56 -56
  42. package/examples/skill-example.js +49 -49
  43. package/examples/test-chat.js +137 -137
  44. package/examples/test-mcp.js +85 -85
  45. package/examples/test-reload.js +59 -59
  46. package/examples/test-telegram.js +50 -50
  47. package/examples/test-tg-bot.js +45 -45
  48. package/examples/test-tg-simple.js +47 -47
  49. package/examples/test-tg.js +62 -62
  50. package/examples/test-think.js +43 -43
  51. package/examples/test-web-plugin.js +103 -103
  52. package/examples/test-weixin-feishu.js +103 -103
  53. package/examples/workflow.js +158 -158
  54. package/package.json +83 -83
  55. package/plugins/ai-plugin.js +102 -102
  56. package/plugins/ambient-agent/EventWatcher.js +113 -113
  57. package/plugins/ambient-agent/ExplorerLoop.js +640 -640
  58. package/plugins/ambient-agent/GoalManager.js +197 -197
  59. package/plugins/ambient-agent/Reflector.js +95 -95
  60. package/plugins/ambient-agent/StateStore.js +90 -90
  61. package/plugins/ambient-agent/constants.js +101 -101
  62. package/plugins/ambient-agent/index.js +579 -579
  63. package/plugins/audit-plugin.js +187 -187
  64. package/plugins/default-plugins.js +548 -548
  65. package/plugins/email/constants.js +64 -64
  66. package/plugins/email/handlers.js +461 -461
  67. package/plugins/email/index.js +278 -278
  68. package/plugins/email/monitor.js +269 -269
  69. package/plugins/email/parser.js +138 -138
  70. package/plugins/email/reply.js +151 -151
  71. package/plugins/email/utils.js +124 -124
  72. package/plugins/extension-executor-plugin.js +326 -326
  73. package/plugins/feishu-plugin.js +481 -481
  74. package/plugins/file-system-plugin.js +920 -877
  75. package/plugins/gate-trading.js +747 -747
  76. package/plugins/install-plugin.js +199 -199
  77. package/plugins/python-executor-plugin.js +367 -367
  78. package/plugins/python-plugin-loader.js +651 -651
  79. package/plugins/rules-plugin.js +294 -294
  80. package/plugins/scheduler-plugin.js +691 -691
  81. package/plugins/session-plugin.js +494 -494
  82. package/plugins/shell-executor-plugin.js +197 -197
  83. package/plugins/storage-plugin.js +263 -263
  84. package/plugins/subagent-plugin.js +845 -845
  85. package/plugins/telegram-plugin.js +482 -482
  86. package/plugins/think-plugin.js +345 -345
  87. package/plugins/tools-plugin.js +196 -196
  88. package/plugins/web-plugin.js +637 -637
  89. package/plugins/weixin-plugin.js +545 -545
  90. package/skills/find-skills/AGENTS.md +162 -162
  91. package/skills/find-skills/SKILL.md +133 -133
  92. package/skills/foliko-dev/SKILL.md +563 -583
  93. package/skills/python-plugin-dev/SKILL.md +238 -238
  94. package/src/capabilities/index.js +11 -11
  95. package/src/capabilities/skill-manager.js +609 -609
  96. package/src/capabilities/workflow-engine.js +1109 -1109
  97. package/src/core/agent-chat.js +141 -134
  98. package/src/core/agent.js +958 -958
  99. package/src/core/framework.js +465 -465
  100. package/src/core/index.js +19 -19
  101. package/src/core/plugin-base.js +262 -262
  102. package/src/core/plugin-manager.js +863 -863
  103. package/src/core/provider.js +114 -114
  104. package/src/core/sub-agent-config.js +264 -264
  105. package/src/core/system-prompt-builder.js +120 -120
  106. package/src/core/tool-registry.js +517 -517
  107. package/src/core/tool-router.js +297 -297
  108. package/src/executors/executor-base.js +58 -58
  109. package/src/executors/mcp-executor.js +845 -845
  110. package/src/index.js +25 -25
  111. package/src/utils/circuit-breaker.js +301 -301
  112. package/src/utils/error-boundary.js +363 -363
  113. package/src/utils/error.js +374 -374
  114. package/src/utils/event-emitter.js +97 -97
  115. package/src/utils/id.js +133 -133
  116. package/src/utils/index.js +217 -217
  117. package/src/utils/logger.js +181 -181
  118. package/src/utils/plugin-helpers.js +90 -90
  119. package/src/utils/retry.js +122 -122
  120. package/src/utils/sandbox.js +292 -292
  121. package/test/tool-registry-validation.test.js +218 -218
  122. package/website/script.js +136 -136
  123. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  124. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  125. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  126. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  127. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  128. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  129. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  130. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  131. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  132. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  133. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  134. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  135. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  136. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  137. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  138. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  139. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  140. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  141. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  142. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  143. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  144. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  145. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  146. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  147. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  148. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  149. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  150. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  151. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  152. package/.agent/ARCHITECTURE.md +0 -288
  153. package/.agent/agents/ambient-agent.md +0 -57
  154. package/.agent/agents/debugger.md +0 -55
  155. package/.agent/agents/email-assistant.md +0 -49
  156. package/.agent/agents/file-manager.md +0 -42
  157. package/.agent/agents/python-developer.md +0 -60
  158. package/.agent/agents/scheduler.md +0 -59
  159. package/.agent/agents/web-developer.md +0 -45
  160. package/.agent/mcp_config_updated.json +0 -12
  161. package/.agent/rules/GEMINI.md +0 -273
  162. package/.agent/rules/allow-rule.md +0 -77
  163. package/.agent/rules/log-rule.md +0 -83
  164. package/.agent/rules/security-rule.md +0 -93
  165. package/.agent/scripts/auto_preview.py +0 -148
  166. package/.agent/scripts/checklist.py +0 -217
  167. package/.agent/scripts/session_manager.py +0 -120
  168. package/.agent/scripts/verify_all.py +0 -327
  169. package/.agent/skills/api-patterns/SKILL.md +0 -81
  170. package/.agent/skills/api-patterns/api-style.md +0 -42
  171. package/.agent/skills/api-patterns/auth.md +0 -24
  172. package/.agent/skills/api-patterns/documentation.md +0 -26
  173. package/.agent/skills/api-patterns/graphql.md +0 -41
  174. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  175. package/.agent/skills/api-patterns/response.md +0 -37
  176. package/.agent/skills/api-patterns/rest.md +0 -40
  177. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  178. package/.agent/skills/api-patterns/security-testing.md +0 -122
  179. package/.agent/skills/api-patterns/trpc.md +0 -41
  180. package/.agent/skills/api-patterns/versioning.md +0 -22
  181. package/.agent/skills/app-builder/SKILL.md +0 -75
  182. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  183. package/.agent/skills/app-builder/feature-building.md +0 -53
  184. package/.agent/skills/app-builder/project-detection.md +0 -34
  185. package/.agent/skills/app-builder/scaffolding.md +0 -118
  186. package/.agent/skills/app-builder/tech-stack.md +0 -40
  187. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  188. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  189. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  190. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  191. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  192. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  193. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  194. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  195. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  196. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  197. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  198. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  199. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  200. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  201. package/.agent/skills/architecture/SKILL.md +0 -55
  202. package/.agent/skills/architecture/context-discovery.md +0 -43
  203. package/.agent/skills/architecture/examples.md +0 -94
  204. package/.agent/skills/architecture/pattern-selection.md +0 -68
  205. package/.agent/skills/architecture/patterns-reference.md +0 -50
  206. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  207. package/.agent/skills/clean-code/SKILL.md +0 -201
  208. package/.agent/skills/doc.md +0 -177
  209. package/.agent/skills/frontend-design/SKILL.md +0 -418
  210. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  211. package/.agent/skills/frontend-design/color-system.md +0 -311
  212. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  213. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  214. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  215. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  216. package/.agent/skills/frontend-design/typography-system.md +0 -345
  217. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  218. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  219. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  220. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  221. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  222. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  223. package/.agent/workflows/brainstorm.md +0 -113
  224. package/.agent/workflows/create.md +0 -59
  225. package/.agent/workflows/debug.md +0 -103
  226. package/.agent/workflows/deploy.md +0 -176
  227. package/.agent/workflows/enhance.md +0 -63
  228. package/.agent/workflows/orchestrate.md +0 -237
  229. package/.agent/workflows/plan.md +0 -89
  230. package/.agent/workflows/preview.md +0 -81
  231. package/.agent/workflows/simple-test.md +0 -42
  232. package/.agent/workflows/status.md +0 -86
  233. package/.agent/workflows/structured-orchestrate.md +0 -180
  234. package/.agent/workflows/test.md +0 -144
  235. package/.agent/workflows/ui-ux-pro-max.md +0 -296
@@ -1,238 +1,238 @@
1
- ---
2
- name: python-plugin-dev
3
- description: Python 插件开发指南。当用户说"创建 Python 插件"、"用 Python 写插件"时立即调用此 skill。
4
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
- ---
6
-
7
- # Python 插件开发
8
-
9
- ## 概述
10
-
11
- Python 插件允许用 Python 语言开发工具,插件代码运行在 Python 环境中,可以调用所有 Python 库。
12
-
13
- ## 插件存放位置
14
-
15
- `.agent/plugins/*.py`
16
-
17
- ## 插件结构
18
-
19
- ```python
20
- # .agent/plugins/my-plugin.py
21
-
22
- PLUGIN = {
23
- "name": "my-plugin",
24
- "version": "1.0.0",
25
- "description": "我的 Python 插件"
26
- }
27
-
28
- TOOLS = [
29
- {
30
- "name": "hello",
31
- "description": "问候工具",
32
- "params": {"name": "string"}
33
- },
34
- {
35
- "name": "calc",
36
- "description": "计算器工具",
37
- "params": {"a": "number", "b": "number", "op": "string"}
38
- }
39
- ]
40
-
41
- # === 工具实现 ===
42
-
43
- def hello(params):
44
- """问候工具"""
45
- name = params.get("name", "World")
46
- return {"success": True, "result": f"Hello, {name}!"}
47
-
48
- def calc(params):
49
- """计算器工具"""
50
- a = params.get("a", 0)
51
- b = params.get("b", 0)
52
- op = params.get("op", "add")
53
-
54
- if op == "add":
55
- result = a + b
56
- elif op == "sub":
57
- result = a - b
58
- elif op == "mul":
59
- result = a * b
60
- elif op == "div":
61
- if b == 0:
62
- return {"success": False, "error": "Division by zero"}
63
- result = a / b
64
- else:
65
- return {"success": False, "error": f"Unknown operation: {op}"}
66
-
67
- return {"success": True, "result": result}
68
- ```
69
-
70
- **重要**:`tools` 字段定义了插件提供的所有工具。框架会自动:
71
-
72
- 1. 将这些工具注册到 ExtensionExecutor
73
- 2. 附加到系统提示词【Extensions 扩展工具】部分
74
- 3. 可通过 `ext_call` 调用
75
-
76
- ## 工具函数规范
77
-
78
- | 规范 | 说明 |
79
- | ------------ | -------------------- |
80
- | 返回 dict | 必须是 Python 字典 |
81
- | success 字段 | `true` 或 `false` |
82
- | result 字段 | 成功时返回的结果 |
83
- | error 字段 | 失败时返回的错误信息 |
84
-
85
- ## 返回值格式
86
-
87
- ```python
88
- # 成功
89
- {"success": True, "result": "返回值"}
90
-
91
- # 失败
92
- {"success": False, "error": "错误信息"}
93
-
94
- # 返回复杂数据
95
- {"success": True, "result": {"key": "value", "list": [1, 2, 3]}}
96
- ```
97
-
98
- ## 使用方式
99
-
100
- 通过 `ext_call` 调用:
101
-
102
- ```javascript
103
- ext_call({
104
- plugin: 'my-plugin', // 插件名称
105
- tool: 'hello', // 工具名称
106
- args: { name: 'Foliko' }, // 工具参数
107
- });
108
- ```
109
-
110
- 工具会自动出现在系统提示词的【Extensions 扩展工具】部分。
111
-
112
- ## 示例:天气查询插件
113
-
114
- ```python
115
- # .agent/plugins/weather.py
116
-
117
- PLUGIN = {
118
- "name": "weather",
119
- "version": "1.0.0",
120
- "description": "天气查询插件"
121
- }
122
-
123
- TOOLS = [
124
- {
125
- "name": "get_weather",
126
- "description": "查询天气",
127
- "params": {"city": "string"}
128
- }
129
- ]
130
-
131
- def get_weather(params):
132
- import requests
133
-
134
- city = params.get("city", "北京")
135
-
136
- try:
137
- response = requests.get(
138
- f"https://wttr.in/{city}?format=j1",
139
- timeout=5
140
- )
141
- data = response.json()
142
-
143
- return {
144
- "success": True,
145
- "result": {
146
- "city": city,
147
- "temperature": data["current_condition"][0]["temp_C"],
148
- "weather": data["current_condition"][0]["weatherDesc"][0]["value"]
149
- }
150
- }
151
- except Exception as e:
152
- return {"success": False, "error": str(e)}
153
- ```
154
-
155
- ## 示例:文件处理插件
156
-
157
- ```python
158
- # .agent/plugins/file_processor.py
159
-
160
- PLUGIN = {
161
- "name": "file_processor",
162
- "version": "1.0.0",
163
- "description": "文件处理插件"
164
- }
165
-
166
- TOOLS = [
167
- {
168
- "name": "read_file",
169
- "description": "读取文件",
170
- "params": {"path": "string"}
171
- },
172
- {
173
- "name": "write_file",
174
- "description": "写入文件",
175
- "params": {"path": "string", "content": "string"}
176
- }
177
- ]
178
-
179
- def read_file(params):
180
- import os
181
-
182
- filepath = params.get("path")
183
- if not filepath:
184
- return {"success": False, "error": "path is required"}
185
-
186
- try:
187
- with open(filepath, "r", encoding="utf-8") as f:
188
- content = f.read()
189
- return {"success": True, "result": content}
190
- except Exception as e:
191
- return {"success": False, "error": str(e)}
192
-
193
- def write_file(params):
194
- import os
195
-
196
- filepath = params.get("path")
197
- content = params.get("content", "")
198
-
199
- if not filepath:
200
- return {"success": False, "error": "path is required"}
201
-
202
- try:
203
- os.makedirs(os.path.dirname(filepath), exist_ok=True)
204
- with open(filepath, "w", encoding="utf-8") as f:
205
- f.write(content)
206
- return {"success": True, "result": f"Written to {filepath}"}
207
- except Exception as e:
208
- return {"success": False, "error": str(e)}
209
- ```
210
-
211
- ## 注意事项
212
-
213
- 1. **文件格式** - 必须是单个 `.py` 文件
214
- 2. **必须定义 `PLUGIN`** - 插件元信息
215
- 3. **必须定义 `TOOLS`** - 工具列表
216
- 4. **工具函数名** - 必须与 TOOLS 中定义的 name 一致
217
- 5. **异常处理** - 所有可能出错的地方都要 try-except
218
- 6. **编码** - 文件使用 UTF-8 编码
219
-
220
- ## 开发流程
221
-
222
- 1. **编写插件代码** - 在 `.agent/plugins/` 下创建 `.py` 文件
223
- 2. **自动加载** - 框架启动时自动注册工具
224
- 3. **调试** - 查看返回的 `success` 和 `error` 信息
225
-
226
- ## 常用 Python 库
227
-
228
- 插件中可以使用的常用库:
229
-
230
- | 库 | 用途 | 导入方式 |
231
- | -------- | ---------- | ------------------------------- |
232
- | requests | HTTP 请求 | `import requests` |
233
- | json | JSON 处理 | `import json` |
234
- | os | 系统操作 | `import os` |
235
- | pathlib | 路径处理 | `from pathlib import Path` |
236
- | datetime | 日期时间 | `from datetime import datetime` |
237
- | re | 正则表达式 | `import re` |
238
- | csv | CSV 处理 | `import csv` |
1
+ ---
2
+ name: python-plugin-dev
3
+ description: Python 插件开发指南。当用户说"创建 Python 插件"、"用 Python 写插件"时立即调用此 skill。
4
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
+ ---
6
+
7
+ # Python 插件开发
8
+
9
+ ## 概述
10
+
11
+ Python 插件允许用 Python 语言开发工具,插件代码运行在 Python 环境中,可以调用所有 Python 库。
12
+
13
+ ## 插件存放位置
14
+
15
+ `.agent/plugins/*.py`
16
+
17
+ ## 插件结构
18
+
19
+ ```python
20
+ # .agent/plugins/my-plugin.py
21
+
22
+ PLUGIN = {
23
+ "name": "my-plugin",
24
+ "version": "1.0.0",
25
+ "description": "我的 Python 插件"
26
+ }
27
+
28
+ TOOLS = [
29
+ {
30
+ "name": "hello",
31
+ "description": "问候工具",
32
+ "params": {"name": "string"}
33
+ },
34
+ {
35
+ "name": "calc",
36
+ "description": "计算器工具",
37
+ "params": {"a": "number", "b": "number", "op": "string"}
38
+ }
39
+ ]
40
+
41
+ # === 工具实现 ===
42
+
43
+ def hello(params):
44
+ """问候工具"""
45
+ name = params.get("name", "World")
46
+ return {"success": True, "result": f"Hello, {name}!"}
47
+
48
+ def calc(params):
49
+ """计算器工具"""
50
+ a = params.get("a", 0)
51
+ b = params.get("b", 0)
52
+ op = params.get("op", "add")
53
+
54
+ if op == "add":
55
+ result = a + b
56
+ elif op == "sub":
57
+ result = a - b
58
+ elif op == "mul":
59
+ result = a * b
60
+ elif op == "div":
61
+ if b == 0:
62
+ return {"success": False, "error": "Division by zero"}
63
+ result = a / b
64
+ else:
65
+ return {"success": False, "error": f"Unknown operation: {op}"}
66
+
67
+ return {"success": True, "result": result}
68
+ ```
69
+
70
+ **重要**:`tools` 字段定义了插件提供的所有工具。框架会自动:
71
+
72
+ 1. 将这些工具注册到 ExtensionExecutor
73
+ 2. 附加到系统提示词【Extensions 扩展工具】部分
74
+ 3. 可通过 `ext_call` 调用
75
+
76
+ ## 工具函数规范
77
+
78
+ | 规范 | 说明 |
79
+ | ------------ | -------------------- |
80
+ | 返回 dict | 必须是 Python 字典 |
81
+ | success 字段 | `true` 或 `false` |
82
+ | result 字段 | 成功时返回的结果 |
83
+ | error 字段 | 失败时返回的错误信息 |
84
+
85
+ ## 返回值格式
86
+
87
+ ```python
88
+ # 成功
89
+ {"success": True, "result": "返回值"}
90
+
91
+ # 失败
92
+ {"success": False, "error": "错误信息"}
93
+
94
+ # 返回复杂数据
95
+ {"success": True, "result": {"key": "value", "list": [1, 2, 3]}}
96
+ ```
97
+
98
+ ## 使用方式
99
+
100
+ 通过 `ext_call` 调用:
101
+
102
+ ```javascript
103
+ ext_call({
104
+ plugin: 'my-plugin', // 插件名称
105
+ tool: 'hello', // 工具名称
106
+ args: { name: 'Foliko' }, // 工具参数
107
+ });
108
+ ```
109
+
110
+ 工具会自动出现在系统提示词的【Extensions 扩展工具】部分。
111
+
112
+ ## 示例:天气查询插件
113
+
114
+ ```python
115
+ # .agent/plugins/weather.py
116
+
117
+ PLUGIN = {
118
+ "name": "weather",
119
+ "version": "1.0.0",
120
+ "description": "天气查询插件"
121
+ }
122
+
123
+ TOOLS = [
124
+ {
125
+ "name": "get_weather",
126
+ "description": "查询天气",
127
+ "params": {"city": "string"}
128
+ }
129
+ ]
130
+
131
+ def get_weather(params):
132
+ import requests
133
+
134
+ city = params.get("city", "北京")
135
+
136
+ try:
137
+ response = requests.get(
138
+ f"https://wttr.in/{city}?format=j1",
139
+ timeout=5
140
+ )
141
+ data = response.json()
142
+
143
+ return {
144
+ "success": True,
145
+ "result": {
146
+ "city": city,
147
+ "temperature": data["current_condition"][0]["temp_C"],
148
+ "weather": data["current_condition"][0]["weatherDesc"][0]["value"]
149
+ }
150
+ }
151
+ except Exception as e:
152
+ return {"success": False, "error": str(e)}
153
+ ```
154
+
155
+ ## 示例:文件处理插件
156
+
157
+ ```python
158
+ # .agent/plugins/file_processor.py
159
+
160
+ PLUGIN = {
161
+ "name": "file_processor",
162
+ "version": "1.0.0",
163
+ "description": "文件处理插件"
164
+ }
165
+
166
+ TOOLS = [
167
+ {
168
+ "name": "read_file",
169
+ "description": "读取文件",
170
+ "params": {"path": "string"}
171
+ },
172
+ {
173
+ "name": "write_file",
174
+ "description": "写入文件",
175
+ "params": {"path": "string", "content": "string"}
176
+ }
177
+ ]
178
+
179
+ def read_file(params):
180
+ import os
181
+
182
+ filepath = params.get("path")
183
+ if not filepath:
184
+ return {"success": False, "error": "path is required"}
185
+
186
+ try:
187
+ with open(filepath, "r", encoding="utf-8") as f:
188
+ content = f.read()
189
+ return {"success": True, "result": content}
190
+ except Exception as e:
191
+ return {"success": False, "error": str(e)}
192
+
193
+ def write_file(params):
194
+ import os
195
+
196
+ filepath = params.get("path")
197
+ content = params.get("content", "")
198
+
199
+ if not filepath:
200
+ return {"success": False, "error": "path is required"}
201
+
202
+ try:
203
+ os.makedirs(os.path.dirname(filepath), exist_ok=True)
204
+ with open(filepath, "w", encoding="utf-8") as f:
205
+ f.write(content)
206
+ return {"success": True, "result": f"Written to {filepath}"}
207
+ except Exception as e:
208
+ return {"success": False, "error": str(e)}
209
+ ```
210
+
211
+ ## 注意事项
212
+
213
+ 1. **文件格式** - 必须是单个 `.py` 文件
214
+ 2. **必须定义 `PLUGIN`** - 插件元信息
215
+ 3. **必须定义 `TOOLS`** - 工具列表
216
+ 4. **工具函数名** - 必须与 TOOLS 中定义的 name 一致
217
+ 5. **异常处理** - 所有可能出错的地方都要 try-except
218
+ 6. **编码** - 文件使用 UTF-8 编码
219
+
220
+ ## 开发流程
221
+
222
+ 1. **编写插件代码** - 在 `.agent/plugins/` 下创建 `.py` 文件
223
+ 2. **自动加载** - 框架启动时自动注册工具
224
+ 3. **调试** - 查看返回的 `success` 和 `error` 信息
225
+
226
+ ## 常用 Python 库
227
+
228
+ 插件中可以使用的常用库:
229
+
230
+ | 库 | 用途 | 导入方式 |
231
+ | -------- | ---------- | ------------------------------- |
232
+ | requests | HTTP 请求 | `import requests` |
233
+ | json | JSON 处理 | `import json` |
234
+ | os | 系统操作 | `import os` |
235
+ | pathlib | 路径处理 | `from pathlib import Path` |
236
+ | datetime | 日期时间 | `from datetime import datetime` |
237
+ | re | 正则表达式 | `import re` |
238
+ | csv | CSV 处理 | `import csv` |
@@ -1,11 +1,11 @@
1
- /**
2
- * Capabilities 能力模块导出
3
- */
4
-
5
- const { SkillManagerPlugin } = require('./skill-manager');
6
- const { WorkflowPlugin } = require('./workflow-engine');
7
-
8
- module.exports = {
9
- SkillManagerPlugin,
10
- WorkflowPlugin,
11
- };
1
+ /**
2
+ * Capabilities 能力模块导出
3
+ */
4
+
5
+ const { SkillManagerPlugin } = require('./skill-manager');
6
+ const { WorkflowPlugin } = require('./workflow-engine');
7
+
8
+ module.exports = {
9
+ SkillManagerPlugin,
10
+ WorkflowPlugin,
11
+ };