foliko 1.0.74 → 1.0.75

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 (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  28. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  29. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  30. package/.agent/ARCHITECTURE.md +288 -0
  31. package/.agent/agents/ambient-agent.md +57 -0
  32. package/.agent/agents/debugger.md +55 -0
  33. package/.agent/agents/email-assistant.md +49 -0
  34. package/.agent/agents/file-manager.md +42 -0
  35. package/.agent/agents/python-developer.md +60 -0
  36. package/.agent/agents/scheduler.md +59 -0
  37. package/.agent/agents/web-developer.md +45 -0
  38. package/.agent/data/default.json +29 -0
  39. package/.agent/data/plugins-state.json +255 -0
  40. package/.agent/mcp_config.json +4 -0
  41. package/.agent/mcp_config_updated.json +12 -0
  42. package/.agent/plugins.json +5 -0
  43. package/.agent/rules/GEMINI.md +273 -0
  44. package/.agent/rules/allow-rule.md +77 -0
  45. package/.agent/rules/log-rule.md +83 -0
  46. package/.agent/rules/security-rule.md +93 -0
  47. package/.agent/scripts/auto_preview.py +148 -0
  48. package/.agent/scripts/checklist.py +217 -0
  49. package/.agent/scripts/session_manager.py +120 -0
  50. package/.agent/scripts/verify_all.py +327 -0
  51. package/.agent/skills/api-patterns/SKILL.md +81 -0
  52. package/.agent/skills/api-patterns/api-style.md +42 -0
  53. package/.agent/skills/api-patterns/auth.md +24 -0
  54. package/.agent/skills/api-patterns/documentation.md +26 -0
  55. package/.agent/skills/api-patterns/graphql.md +41 -0
  56. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  57. package/.agent/skills/api-patterns/response.md +37 -0
  58. package/.agent/skills/api-patterns/rest.md +40 -0
  59. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  60. package/.agent/skills/api-patterns/security-testing.md +122 -0
  61. package/.agent/skills/api-patterns/trpc.md +41 -0
  62. package/.agent/skills/api-patterns/versioning.md +22 -0
  63. package/.agent/skills/app-builder/SKILL.md +75 -0
  64. package/.agent/skills/app-builder/agent-coordination.md +71 -0
  65. package/.agent/skills/app-builder/feature-building.md +53 -0
  66. package/.agent/skills/app-builder/project-detection.md +34 -0
  67. package/.agent/skills/app-builder/scaffolding.md +118 -0
  68. package/.agent/skills/app-builder/tech-stack.md +40 -0
  69. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  70. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  71. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  72. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  73. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  74. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  75. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  76. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  77. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  78. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  79. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  80. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  81. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  82. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  83. package/.agent/skills/architecture/SKILL.md +55 -0
  84. package/.agent/skills/architecture/context-discovery.md +43 -0
  85. package/.agent/skills/architecture/examples.md +94 -0
  86. package/.agent/skills/architecture/pattern-selection.md +68 -0
  87. package/.agent/skills/architecture/patterns-reference.md +50 -0
  88. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  89. package/.agent/skills/clean-code/SKILL.md +201 -0
  90. package/.agent/skills/doc.md +177 -0
  91. package/.agent/skills/frontend-design/SKILL.md +418 -0
  92. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  93. package/.agent/skills/frontend-design/color-system.md +311 -0
  94. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  95. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  96. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  97. package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
  98. package/.agent/skills/frontend-design/typography-system.md +345 -0
  99. package/.agent/skills/frontend-design/ux-psychology.md +1116 -0
  100. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  101. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  102. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  103. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  104. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  105. package/.agent/workflows/brainstorm.md +113 -0
  106. package/.agent/workflows/create.md +59 -0
  107. package/.agent/workflows/debug.md +103 -0
  108. package/.agent/workflows/deploy.md +176 -0
  109. package/.agent/workflows/enhance.md +63 -0
  110. package/.agent/workflows/orchestrate.md +237 -0
  111. package/.agent/workflows/plan.md +89 -0
  112. package/.agent/workflows/preview.md +81 -0
  113. package/.agent/workflows/simple-test.md +42 -0
  114. package/.agent/workflows/status.md +86 -0
  115. package/.agent/workflows/structured-orchestrate.md +180 -0
  116. package/.agent/workflows/test.md +144 -0
  117. package/.agent/workflows/ui-ux-pro-max.md +296 -0
  118. package/.claude/settings.local.json +157 -149
  119. package/.editorconfig +56 -0
  120. package/.husky/pre-commit +4 -0
  121. package/.lintstagedrc +7 -0
  122. package/.prettierignore +29 -0
  123. package/.prettierrc +11 -0
  124. package/CLAUDE.md +2 -0
  125. package/README.md +64 -55
  126. package/SPEC.md +102 -61
  127. package/cli/bin/foliko.js +4 -4
  128. package/cli/src/commands/chat.js +53 -51
  129. package/cli/src/commands/list.js +40 -37
  130. package/cli/src/index.js +18 -18
  131. package/cli/src/ui/chat-ui.js +78 -76
  132. package/cli/src/utils/ansi.js +15 -15
  133. package/cli/src/utils/markdown.js +112 -116
  134. package/docker-compose.yml +1 -1
  135. package/docs/ai-sdk-optimization.md +655 -643
  136. package/docs/features.md +80 -80
  137. package/docs/quick-reference.md +49 -46
  138. package/docs/user-manual.md +411 -380
  139. package/examples/ambient-example.js +95 -97
  140. package/examples/basic.js +115 -110
  141. package/examples/bootstrap.js +52 -43
  142. package/examples/mcp-example.js +56 -53
  143. package/examples/skill-example.js +49 -49
  144. package/examples/test-chat.js +60 -58
  145. package/examples/test-mcp.js +49 -43
  146. package/examples/test-reload.js +38 -40
  147. package/examples/test-telegram.js +3 -3
  148. package/examples/test-tg-bot.js +7 -4
  149. package/examples/test-tg-simple.js +4 -3
  150. package/examples/test-tg.js +3 -3
  151. package/examples/test-think.js +13 -7
  152. package/examples/test-web-plugin.js +61 -56
  153. package/examples/test-weixin-feishu.js +40 -37
  154. package/examples/workflow.js +49 -49
  155. package/foliko-1.0.75.tgz +0 -0
  156. package/package.json +37 -3
  157. package/plugins/ai-plugin.js +7 -5
  158. package/plugins/ambient-agent/EventWatcher.js +113 -0
  159. package/plugins/ambient-agent/ExplorerLoop.js +640 -0
  160. package/plugins/ambient-agent/GoalManager.js +197 -0
  161. package/plugins/ambient-agent/Reflector.js +95 -0
  162. package/plugins/ambient-agent/StateStore.js +90 -0
  163. package/plugins/ambient-agent/constants.js +101 -0
  164. package/plugins/ambient-agent/index.js +579 -0
  165. package/plugins/default-plugins.js +62 -49
  166. package/plugins/email/constants.js +64 -0
  167. package/plugins/email/handlers.js +461 -0
  168. package/plugins/email/index.js +278 -0
  169. package/plugins/email/monitor.js +269 -0
  170. package/plugins/email/parser.js +138 -0
  171. package/plugins/email/reply.js +151 -0
  172. package/plugins/email/utils.js +124 -0
  173. package/plugins/feishu-plugin.js +23 -19
  174. package/plugins/file-system-plugin.js +456 -106
  175. package/plugins/install-plugin.js +6 -4
  176. package/plugins/python-executor-plugin.js +3 -1
  177. package/plugins/python-plugin-loader.js +10 -8
  178. package/plugins/rules-plugin.js +5 -3
  179. package/plugins/scheduler-plugin.js +18 -16
  180. package/plugins/session-plugin.js +3 -1
  181. package/plugins/storage-plugin.js +5 -3
  182. package/plugins/subagent-plugin.js +152 -92
  183. package/plugins/telegram-plugin.js +26 -19
  184. package/plugins/think-plugin.js +4 -2
  185. package/plugins/tools-plugin.js +3 -1
  186. package/plugins/web-plugin.js +15 -13
  187. package/plugins/weixin-plugin.js +43 -36
  188. package/reports/system-health-report-20260401.md +79 -0
  189. package/skills/ambient-agent/SKILL.md +49 -39
  190. package/skills/foliko-dev/AGENTS.md +64 -61
  191. package/skills/foliko-dev/SKILL.md +125 -119
  192. package/skills/mcp-usage/SKILL.md +19 -17
  193. package/skills/python-plugin-dev/SKILL.md +16 -15
  194. package/skills/skill-guide/SKILL.md +12 -12
  195. package/skills/subagent-guide/SKILL.md +237 -0
  196. package/skills/workflow-guide/SKILL.md +90 -45
  197. package/skills/workflow-troubleshooting/DEBUGGING.md +36 -21
  198. package/skills/workflow-troubleshooting/SKILL.md +156 -79
  199. package/src/capabilities/index.js +4 -4
  200. package/src/capabilities/skill-manager.js +211 -197
  201. package/src/capabilities/workflow-engine.js +461 -547
  202. package/src/core/agent-chat.js +426 -279
  203. package/src/core/agent.js +453 -249
  204. package/src/core/framework.js +183 -149
  205. package/src/core/index.js +8 -8
  206. package/src/core/plugin-base.js +52 -52
  207. package/src/core/plugin-manager.js +377 -281
  208. package/src/core/provider.js +35 -32
  209. package/src/core/sub-agent-config.js +264 -0
  210. package/src/core/system-prompt-builder.js +120 -0
  211. package/src/core/tool-registry.js +416 -33
  212. package/src/core/tool-router.js +149 -68
  213. package/src/executors/executor-base.js +58 -58
  214. package/src/executors/mcp-executor.js +269 -257
  215. package/src/index.js +5 -17
  216. package/src/utils/circuit-breaker.js +301 -0
  217. package/src/utils/error-boundary.js +363 -0
  218. package/src/utils/error.js +374 -0
  219. package/src/utils/event-emitter.js +20 -20
  220. package/src/utils/id.js +133 -0
  221. package/src/utils/index.js +217 -3
  222. package/src/utils/logger.js +181 -0
  223. package/src/utils/plugin-helpers.js +90 -0
  224. package/src/utils/retry.js +122 -0
  225. package/src/utils/sandbox.js +292 -0
  226. package/test/tool-registry-validation.test.js +218 -0
  227. package/test_report.md +70 -0
  228. package/website/docs/api.html +169 -107
  229. package/website/docs/configuration.html +296 -144
  230. package/website/docs/plugin-development.html +154 -85
  231. package/website/docs/project-structure.html +110 -109
  232. package/website/docs/skill-development.html +117 -61
  233. package/website/index.html +209 -205
  234. package/website/script.js +20 -17
  235. package/website/styles.css +1 -1
  236. package/plugins/ambient-agent-plugin.js +0 -1565
  237. package/plugins/email.js +0 -1142
@@ -3,59 +3,142 @@
3
3
  * 根据用户输入智能选择要传递给 LLM 的工具
4
4
  */
5
5
 
6
- const { EventEmitter } = require('../utils/event-emitter')
6
+ const { EventEmitter } = require('../utils/event-emitter');
7
7
 
8
8
  /**
9
9
  * 内置意图分类
10
10
  */
11
11
  const INTENT_PATTERNS = {
12
- 'file_operation': {
13
- keywords: ['读取文件', '写文件', '创建文件', '删除文件', '修改文件', '查看文件', 'read', 'write', 'create', 'delete', 'modify', 'file', '文件'],
14
- tools: ['read_file', 'write_file', 'delete_file', 'modify_file', 'read_directory', 'create_directory', 'search_file']
12
+ file_operation: {
13
+ keywords: [
14
+ '读取文件',
15
+ '写文件',
16
+ '创建文件',
17
+ '删除文件',
18
+ '修改文件',
19
+ '查看文件',
20
+ 'read',
21
+ 'write',
22
+ 'create',
23
+ 'delete',
24
+ 'modify',
25
+ 'file',
26
+ '文件',
27
+ ],
28
+ tools: [
29
+ 'read_file',
30
+ 'write_file',
31
+ 'delete_file',
32
+ 'modify_file',
33
+ 'read_directory',
34
+ 'create_directory',
35
+ 'search_file',
36
+ ],
15
37
  },
16
- 'code_development': {
17
- keywords: ['写代码', '开发', '编程', '创建插件', '编写函数', 'code', 'develop', 'plugin', '编程'],
18
- tools: ['loadSkill', 'read_file', 'write_file', 'execute_command', 'shell']
38
+ code_development: {
39
+ keywords: [
40
+ '写代码',
41
+ '开发',
42
+ '编程',
43
+ '创建插件',
44
+ '编写函数',
45
+ 'code',
46
+ 'develop',
47
+ 'plugin',
48
+ '编程',
49
+ ],
50
+ tools: ['loadSkill', 'read_file', 'write_file', 'execute_command', 'shell'],
19
51
  },
20
- 'system_info': {
21
- keywords: ['系统信息', '内存', 'CPU', '磁盘', '进程', 'system', 'memory', 'cpu', 'disk', 'process', 'info'],
22
- tools: ['get_system_info', 'get_memory_usage', 'get_cpu_info', 'get_disk_space', 'get_process_info']
52
+ system_info: {
53
+ keywords: [
54
+ '系统信息',
55
+ '内存',
56
+ 'CPU',
57
+ '磁盘',
58
+ '进程',
59
+ 'system',
60
+ 'memory',
61
+ 'cpu',
62
+ 'disk',
63
+ 'process',
64
+ 'info',
65
+ ],
66
+ tools: [
67
+ 'get_system_info',
68
+ 'get_memory_usage',
69
+ 'get_cpu_info',
70
+ 'get_disk_space',
71
+ 'get_process_info',
72
+ ],
23
73
  },
24
- 'data_analysis': {
74
+ data_analysis: {
25
75
  keywords: ['分析', '数据', '统计', '查询', 'analyze', 'data', 'statistics', 'query'],
26
- tools: ['execute_command', 'python', 'search_file']
76
+ tools: ['execute_command', 'python', 'search_file'],
27
77
  },
28
- 'plugin_management': {
78
+ plugin_management: {
29
79
  keywords: ['插件', '重载', '加载插件', 'plugin', 'reload', 'load plugin'],
30
- tools: ['reload_plugins', 'list_plugins', 'loadSkill']
80
+ tools: ['reload_plugins', 'list_plugins', 'loadSkill'],
31
81
  },
32
- 'shell_command': {
82
+ shell_command: {
33
83
  keywords: ['命令', '终端', 'shell', '执行', 'command', 'terminal', 'bash', 'cmd'],
34
- tools: ['shell', 'powershell', 'execute_command']
84
+ tools: ['shell', 'powershell', 'execute_command'],
35
85
  },
36
- 'skill_usage': {
86
+ skill_usage: {
37
87
  keywords: ['技能', 'skill', '使用技能', '加载技能'],
38
- tools: ['loadSkill']
88
+ tools: ['loadSkill'],
39
89
  },
40
- 'scheduling': {
41
- keywords: ['定时', '提醒', '通知', 'schedule', 'remind', 'notify', 'cron', '任务', '稍后', '天后', '秒后', '分钟后', '小时后', '明天', '今天'],
42
- tools: ['schedule_cron', 'schedule_once', 'schedule_list', 'schedule_cancel', 'schedule_get_results', 'schedule_notify']
90
+ scheduling: {
91
+ keywords: [
92
+ '定时',
93
+ '提醒',
94
+ '通知',
95
+ 'schedule',
96
+ 'remind',
97
+ 'notify',
98
+ 'cron',
99
+ '任务',
100
+ '稍后',
101
+ '天后',
102
+ '秒后',
103
+ '分钟后',
104
+ '小时后',
105
+ '明天',
106
+ '今天',
107
+ ],
108
+ tools: [
109
+ 'schedule_cron',
110
+ 'schedule_once',
111
+ 'schedule_list',
112
+ 'schedule_cancel',
113
+ 'schedule_get_results',
114
+ 'schedule_notify',
115
+ ],
43
116
  },
44
- 'thinking': {
45
- keywords: ['思考', '反思', '想想', 'think', 'reflect', '分析一下', '头脑风暴', '持续思考', '自动思考'],
46
- tools: ['think_now', 'think_continue', 'think_stop', 'think_get_thoughts']
47
- }
48
- }
117
+ thinking: {
118
+ keywords: [
119
+ '思考',
120
+ '反思',
121
+ '想想',
122
+ 'think',
123
+ 'reflect',
124
+ '分析一下',
125
+ '头脑风暴',
126
+ '持续思考',
127
+ '自动思考',
128
+ ],
129
+ tools: ['think_now', 'think_continue', 'think_stop', 'think_get_thoughts'],
130
+ },
131
+ };
49
132
 
50
133
  class ToolRouter extends EventEmitter {
51
134
  constructor(tools = []) {
52
- super()
53
- this._tools = new Map()
54
- this._defaultTools = new Set()
135
+ super();
136
+ this._tools = new Map();
137
+ this._defaultTools = new Set();
55
138
 
56
139
  // 注册工具
57
140
  for (const tool of tools) {
58
- this.register(tool)
141
+ this.register(tool);
59
142
  }
60
143
  }
61
144
 
@@ -63,37 +146,37 @@ class ToolRouter extends EventEmitter {
63
146
  * 注册工具
64
147
  */
65
148
  register(tool) {
66
- this._tools.set(tool.name, tool)
149
+ this._tools.set(tool.name, tool);
67
150
  }
68
151
 
69
152
  /**
70
153
  * 设置默认工具(每个请求都会包含)
71
154
  */
72
155
  setDefaultTools(toolNames) {
73
- this._defaultTools = new Set(toolNames)
156
+ this._defaultTools = new Set(toolNames);
74
157
  }
75
158
 
76
159
  /**
77
160
  * 判断是否为默认工具
78
161
  */
79
162
  isDefaultTool(name) {
80
- return this._defaultTools.has(name)
163
+ return this._defaultTools.has(name);
81
164
  }
82
165
 
83
166
  /**
84
167
  * 分析用户输入,识别意图
85
168
  */
86
169
  analyzeIntent(userMessage) {
87
- const message = userMessage.toLowerCase()
170
+ const message = userMessage.toLowerCase();
88
171
 
89
- const matchedIntents = []
172
+ const matchedIntents = [];
90
173
 
91
174
  for (const [intentName, intentConfig] of Object.entries(INTENT_PATTERNS)) {
92
- let score = 0
175
+ let score = 0;
93
176
 
94
177
  for (const keyword of intentConfig.keywords) {
95
178
  if (message.includes(keyword.toLowerCase())) {
96
- score++
179
+ score++;
97
180
  }
98
181
  }
99
182
 
@@ -101,31 +184,31 @@ class ToolRouter extends EventEmitter {
101
184
  matchedIntents.push({
102
185
  name: intentName,
103
186
  score,
104
- tools: intentConfig.tools
105
- })
187
+ tools: intentConfig.tools,
188
+ });
106
189
  }
107
190
  }
108
191
 
109
192
  // 按分数排序
110
- matchedIntents.sort((a, b) => b.score - a.score)
193
+ matchedIntents.sort((a, b) => b.score - a.score);
111
194
 
112
- return matchedIntents
195
+ return matchedIntents;
113
196
  }
114
197
 
115
198
  /**
116
199
  * 获取指定意图对应的工具
117
200
  */
118
201
  getToolsForIntent(intent) {
119
- const result = []
202
+ const result = [];
120
203
 
121
204
  for (const toolName of intent.tools) {
122
- const tool = this._tools.get(toolName)
205
+ const tool = this._tools.get(toolName);
123
206
  if (tool) {
124
- result.push(tool)
207
+ result.push(tool);
125
208
  }
126
209
  }
127
210
 
128
- return result
211
+ return result;
129
212
  }
130
213
 
131
214
  /**
@@ -136,81 +219,79 @@ class ToolRouter extends EventEmitter {
136
219
  * @param {boolean} options.forceIntent - 强制使用指定意图
137
220
  */
138
221
  selectTools(userMessage, options = {}) {
139
- const { maxTools = 10 } = options
222
+ const { maxTools = 10 } = options;
140
223
 
141
224
  // 如果没有工具,直接返回空的
142
225
  if (this._tools.size === 0) {
143
- return []
226
+ return [];
144
227
  }
145
228
 
146
229
  // 如果消息为空,返回默认工具
147
230
  if (!userMessage || userMessage.trim() === '') {
148
- return this.getDefaultTools()
231
+ return this.getDefaultTools();
149
232
  }
150
233
 
151
234
  // 分析意图
152
- const intents = this.analyzeIntent(userMessage)
235
+ const intents = this.analyzeIntent(userMessage);
153
236
 
154
237
  // 如果没有匹配到意图,返回默认工具
155
238
  if (intents.length === 0) {
156
- return this.getDefaultTools()
239
+ return this.getDefaultTools();
157
240
  }
158
241
 
159
- const selectedTools = new Map()
242
+ const selectedTools = new Map();
160
243
 
161
244
  // 添加默认工具
162
245
  for (const tool of this.getDefaultTools()) {
163
- selectedTools.set(tool.name, tool)
246
+ selectedTools.set(tool.name, tool);
164
247
  }
165
248
 
166
249
  // 按意图选择工具
167
250
  for (const intent of intents) {
168
- if (selectedTools.size >= maxTools) break
251
+ if (selectedTools.size >= maxTools) break;
169
252
 
170
- const intentTools = this.getToolsForIntent(intent)
253
+ const intentTools = this.getToolsForIntent(intent);
171
254
  for (const tool of intentTools) {
172
- if (selectedTools.size >= maxTools) break
255
+ if (selectedTools.size >= maxTools) break;
173
256
  if (!selectedTools.has(tool.name)) {
174
- selectedTools.set(tool.name, tool)
257
+ selectedTools.set(tool.name, tool);
175
258
  }
176
259
  }
177
260
  }
178
261
 
179
- return Array.from(selectedTools.values())
262
+ return Array.from(selectedTools.values());
180
263
  }
181
264
 
182
265
  /**
183
266
  * 获取默认工具
184
267
  */
185
268
  getDefaultTools() {
186
- const result = []
269
+ const result = [];
187
270
  for (const name of this._defaultTools) {
188
- const tool = this._tools.get(name)
271
+ const tool = this._tools.get(name);
189
272
  if (tool) {
190
- result.push(tool)
273
+ result.push(tool);
191
274
  }
192
275
  }
193
- return result
276
+ return result;
194
277
  }
195
278
 
196
279
  /**
197
280
  * 获取所有工具
198
281
  */
199
282
  getAllTools() {
200
- return Array.from(this._tools.values())
283
+ return Array.from(this._tools.values());
201
284
  }
202
285
 
203
286
  /**
204
287
  * 按类别获取工具
205
288
  */
206
289
  getToolsByCategory(category) {
207
- const intent = INTENT_PATTERNS[category]
208
- if (!intent) return []
290
+ const intent = INTENT_PATTERNS[category];
291
+ if (!intent) return [];
209
292
 
210
- return intent.tools
211
- .map(name => this._tools.get(name))
212
- .filter(t => t !== undefined)
293
+ return intent.tools.map((name) => this._tools.get(name)).filter((t) => t !== undefined);
213
294
  }
214
295
  }
215
296
 
216
- module.exports = { ToolRouter, INTENT_PATTERNS }
297
+ module.exports = { ToolRouter, INTENT_PATTERNS };
@@ -1,58 +1,58 @@
1
- /**
2
- * Executor 基类
3
- * 执行器的基类,定义执行器接口
4
- */
5
-
6
- const { EventEmitter } = require('../utils/event-emitter')
7
-
8
- class ExecutorBase extends EventEmitter {
9
- /**
10
- * @param {string} name - 执行器名称
11
- */
12
- constructor(name) {
13
- super()
14
- this.name = name
15
- this._enabled = true
16
- }
17
-
18
- /**
19
- * 执行
20
- * @param {Object} params - 执行参数
21
- * @returns {Promise<any>}
22
- */
23
- async execute(params) {
24
- throw new Error('execute() must be implemented')
25
- }
26
-
27
- /**
28
- * 启用执行器
29
- */
30
- enable() {
31
- this._enabled = true
32
- return this
33
- }
34
-
35
- /**
36
- * 禁用执行器
37
- */
38
- disable() {
39
- this._enabled = false
40
- return this
41
- }
42
-
43
- /**
44
- * 是否启用
45
- */
46
- isEnabled() {
47
- return this._enabled
48
- }
49
-
50
- /**
51
- * 销毁
52
- */
53
- destroy() {
54
- this.removeAllListeners()
55
- }
56
- }
57
-
58
- module.exports = { ExecutorBase }
1
+ /**
2
+ * Executor 基类
3
+ * 执行器的基类,定义执行器接口
4
+ */
5
+
6
+ const { EventEmitter } = require('../utils/event-emitter');
7
+
8
+ class ExecutorBase extends EventEmitter {
9
+ /**
10
+ * @param {string} name - 执行器名称
11
+ */
12
+ constructor(name) {
13
+ super();
14
+ this.name = name;
15
+ this._enabled = true;
16
+ }
17
+
18
+ /**
19
+ * 执行
20
+ * @param {Object} params - 执行参数
21
+ * @returns {Promise<any>}
22
+ */
23
+ async execute(params) {
24
+ throw new Error('execute() must be implemented');
25
+ }
26
+
27
+ /**
28
+ * 启用执行器
29
+ */
30
+ enable() {
31
+ this._enabled = true;
32
+ return this;
33
+ }
34
+
35
+ /**
36
+ * 禁用执行器
37
+ */
38
+ disable() {
39
+ this._enabled = false;
40
+ return this;
41
+ }
42
+
43
+ /**
44
+ * 是否启用
45
+ */
46
+ isEnabled() {
47
+ return this._enabled;
48
+ }
49
+
50
+ /**
51
+ * 销毁
52
+ */
53
+ destroy() {
54
+ this.removeAllListeners();
55
+ }
56
+ }
57
+
58
+ module.exports = { ExecutorBase };