foliko 1.0.73 → 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 -636
  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 +469 -120
  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 -248
  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,15 +3,15 @@
3
3
  * Demonstrates how to use the Ambient Agent plugin for autonomous monitoring and actions
4
4
  */
5
5
 
6
- const { Framework } = require('../src/core/framework')
6
+ const { Framework } = require('../src/core/framework');
7
7
 
8
8
  async function main() {
9
- console.log('=== Ambient Agent Example ===\n')
9
+ console.log('=== Ambient Agent Example ===\n');
10
10
 
11
11
  // Create framework
12
12
  const framework = new Framework({
13
- debug: true
14
- })
13
+ debug: true,
14
+ });
15
15
 
16
16
  // Bootstrap with default plugins (including ambient)
17
17
  await framework.bootstrap({
@@ -19,41 +19,39 @@ async function main() {
19
19
  aiConfig: {
20
20
  provider: 'deepseek',
21
21
  model: 'deepseek-chat',
22
- apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key'
23
- }
24
- })
22
+ apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
23
+ },
24
+ });
25
25
 
26
- console.log('\n=== Framework Ready ===\n')
26
+ console.log('\n=== Framework Ready ===\n');
27
27
 
28
28
  // Wait for plugins to start
29
- await new Promise(resolve => setTimeout(resolve, 1000))
29
+ await new Promise((resolve) => setTimeout(resolve, 1000));
30
30
 
31
31
  // Check if ambient plugin is loaded
32
- const ambientPlugin = framework.pluginManager.get('ambient')
32
+ const ambientPlugin = framework.pluginManager.get('ambient');
33
33
  if (!ambientPlugin) {
34
- console.error('Ambient plugin not loaded!')
35
- return
34
+ console.error('Ambient plugin not loaded!');
35
+ return;
36
36
  }
37
37
 
38
- console.log('=== Ambient Plugin Tools Available ===')
39
- const tools = framework.getTools()
40
- const ambientTools = tools.filter(t => t.name.startsWith('ambient_'))
41
- console.log('Ambient tools:', ambientTools.map(t => t.name).join(', '))
38
+ console.log('=== Ambient Plugin Tools Available ===');
39
+ const tools = framework.getTools();
40
+ const ambientTools = tools.filter((t) => t.name.startsWith('ambient_'));
41
+ console.log('Ambient tools:', ambientTools.map((t) => t.name).join(', '));
42
42
 
43
- console.log('\n=== Example 1: Create a Goal ===')
43
+ console.log('\n=== Example 1: Create a Goal ===');
44
44
  // Use ambient_goals to create a simple goal
45
45
  const createResult = await framework.executeTool('ambient_goals', {
46
46
  action: 'create',
47
47
  title: 'Monitor System Health',
48
48
  description: 'Periodically check system information and alert on issues',
49
49
  priority: 8,
50
- actions: [
51
- { id: 'check_1', type: 'tool', name: 'system_info', args: {} }
52
- ]
53
- })
54
- console.log('Create goal result:', JSON.stringify(createResult, null, 2))
50
+ actions: [{ id: 'check_1', type: 'tool', name: 'system_info', args: {} }],
51
+ });
52
+ console.log('Create goal result:', JSON.stringify(createResult, null, 2));
55
53
 
56
- console.log('\n=== Example 2: Create a Thinking Goal ===')
54
+ console.log('\n=== Example 2: Create a Thinking Goal ===');
57
55
  // Create a goal that triggers LLM thinking
58
56
  const thinkGoal = await framework.executeTool('ambient_goals', {
59
57
  action: 'create',
@@ -61,136 +59,136 @@ async function main() {
61
59
  description: 'Regularly reflect on system state and suggest improvements',
62
60
  priority: 5,
63
61
  actions: [
64
- { id: 'reflect_1', type: 'think', topic: 'System state review', mode: 'reflect', depth: 3 }
65
- ]
66
- })
67
- console.log('Create thinking goal result:', JSON.stringify(thinkGoal, null, 2))
62
+ { id: 'reflect_1', type: 'think', topic: 'System state review', mode: 'reflect', depth: 3 },
63
+ ],
64
+ });
65
+ console.log('Create thinking goal result:', JSON.stringify(thinkGoal, null, 2));
68
66
 
69
- console.log('\n=== Example 3: List All Goals ===')
67
+ console.log('\n=== Example 3: List All Goals ===');
70
68
  const listResult = await framework.executeTool('ambient_goals', {
71
- action: 'list'
72
- })
73
- console.log('Goals list:', JSON.stringify(listResult, null, 2))
69
+ action: 'list',
70
+ });
71
+ console.log('Goals list:', JSON.stringify(listResult, null, 2));
74
72
 
75
- console.log('\n=== Example 4: Get Ambient Status ===')
76
- const statusResult = await framework.executeTool('ambient_status', {})
77
- console.log('Status:', JSON.stringify(statusResult, null, 2))
73
+ console.log('\n=== Example 4: Get Ambient Status ===');
74
+ const statusResult = await framework.executeTool('ambient_status', {});
75
+ console.log('Status:', JSON.stringify(statusResult, null, 2));
78
76
 
79
- console.log('\n=== Example 5: Store a Memory ===')
77
+ console.log('\n=== Example 5: Store a Memory ===');
80
78
  const storeResult = await framework.executeTool('ambient_remember', {
81
79
  action: 'store',
82
80
  content: 'Important: System check showed high CPU usage at 14:30',
83
- key: 'cpu_alert_1'
84
- })
85
- console.log('Store memory result:', JSON.stringify(storeResult, null, 2))
81
+ key: 'cpu_alert_1',
82
+ });
83
+ console.log('Store memory result:', JSON.stringify(storeResult, null, 2));
86
84
 
87
- console.log('\n=== Example 6: Retrieve Memories ===')
85
+ console.log('\n=== Example 6: Retrieve Memories ===');
88
86
  const retrieveResult = await framework.executeTool('ambient_remember', {
89
87
  action: 'retrieve',
90
- limit: 5
91
- })
92
- console.log('Retrieve memories result:', JSON.stringify(retrieveResult, null, 2))
88
+ limit: 5,
89
+ });
90
+ console.log('Retrieve memories result:', JSON.stringify(retrieveResult, null, 2));
93
91
 
94
- console.log('\n=== Example 7: Search Memories ===')
92
+ console.log('\n=== Example 7: Search Memories ===');
95
93
  const searchResult = await framework.executeTool('ambient_remember', {
96
94
  action: 'search',
97
- query: 'CPU'
98
- })
99
- console.log('Search memories result:', JSON.stringify(searchResult, null, 2))
95
+ query: 'CPU',
96
+ });
97
+ console.log('Search memories result:', JSON.stringify(searchResult, null, 2));
100
98
 
101
- console.log('\n=== Example 8: Trigger Thinking ===')
99
+ console.log('\n=== Example 8: Trigger Thinking ===');
102
100
  const thinkResult = await framework.executeTool('ambient_think', {
103
101
  mode: 'brainstorm',
104
102
  topic: 'What improvements could be made to the current system?',
105
- depth: 3
106
- })
107
- console.log('Think result:', JSON.stringify(thinkResult, null, 2))
103
+ depth: 3,
104
+ });
105
+ console.log('Think result:', JSON.stringify(thinkResult, null, 2));
108
106
 
109
- console.log('\n=== Example 9: Control Loop ===')
110
- console.log('Pausing loop...')
107
+ console.log('\n=== Example 9: Control Loop ===');
108
+ console.log('Pausing loop...');
111
109
  const pauseResult = await framework.executeTool('ambient_control', {
112
- action: 'pause'
113
- })
114
- console.log('Pause result:', JSON.stringify(pauseResult, null, 2))
110
+ action: 'pause',
111
+ });
112
+ console.log('Pause result:', JSON.stringify(pauseResult, null, 2));
115
113
 
116
- await new Promise(resolve => setTimeout(resolve, 1000))
114
+ await new Promise((resolve) => setTimeout(resolve, 1000));
117
115
 
118
- console.log('Resuming loop...')
116
+ console.log('Resuming loop...');
119
117
  const resumeResult = await framework.executeTool('ambient_control', {
120
- action: 'resume'
121
- })
122
- console.log('Resume result:', JSON.stringify(resumeResult, null, 2))
118
+ action: 'resume',
119
+ });
120
+ console.log('Resume result:', JSON.stringify(resumeResult, null, 2));
123
121
 
124
- console.log('\n=== Example 10: Adjust Loop Settings ===')
122
+ console.log('\n=== Example 10: Adjust Loop Settings ===');
125
123
  const adjustResult = await framework.executeTool('ambient_control', {
126
124
  action: 'adjust',
127
125
  tickInterval: 10000, // 10 seconds
128
- cooldownPeriod: 5000 // 5 seconds
129
- })
130
- console.log('Adjust result:', JSON.stringify(adjustResult, null, 2))
126
+ cooldownPeriod: 5000, // 5 seconds
127
+ });
128
+ console.log('Adjust result:', JSON.stringify(adjustResult, null, 2));
131
129
 
132
- console.log('\n=== Example 11: Get Final Status ===')
133
- const finalStatus = await framework.executeTool('ambient_status', {})
134
- console.log('Final status:', JSON.stringify(finalStatus, null, 2))
130
+ console.log('\n=== Example 11: Get Final Status ===');
131
+ const finalStatus = await framework.executeTool('ambient_status', {});
132
+ console.log('Final status:', JSON.stringify(finalStatus, null, 2));
135
133
 
136
- console.log('\n=== Example 12: Activate a Pending Goal ===')
134
+ console.log('\n=== Example 12: Activate a Pending Goal ===');
137
135
  // First create a pending goal (without auto-activation conditions)
138
136
  const newGoal = await framework.executeTool('ambient_goals', {
139
137
  action: 'create',
140
138
  title: 'Inactive Test Goal',
141
139
  description: 'A goal that starts inactive',
142
140
  priority: 3,
143
- actions: []
144
- })
145
- console.log('Created inactive goal:', newGoal.goal ? newGoal.goal.id : 'N/A')
141
+ actions: [],
142
+ });
143
+ console.log('Created inactive goal:', newGoal.goal ? newGoal.goal.id : 'N/A');
146
144
 
147
145
  if (newGoal.goal) {
148
- console.log('Activating goal...')
146
+ console.log('Activating goal...');
149
147
  const activateResult = await framework.executeTool('ambient_goals', {
150
148
  action: 'activate',
151
- goalId: newGoal.goal.id
152
- })
153
- console.log('Activate result:', JSON.stringify(activateResult, null, 2))
149
+ goalId: newGoal.goal.id,
150
+ });
151
+ console.log('Activate result:', JSON.stringify(activateResult, null, 2));
154
152
  }
155
153
 
156
- console.log('\n=== Example 13: Update a Goal ===')
157
- const goals = await framework.executeTool('ambient_goals', { action: 'list' })
154
+ console.log('\n=== Example 13: Update a Goal ===');
155
+ const goals = await framework.executeTool('ambient_goals', { action: 'list' });
158
156
  if (goals.goals && goals.goals.length > 0) {
159
- const goalToUpdate = goals.goals[0]
160
- console.log(`Updating goal ${goalToUpdate.id}...`)
157
+ const goalToUpdate = goals.goals[0];
158
+ console.log(`Updating goal ${goalToUpdate.id}...`);
161
159
  const updateResult = await framework.executeTool('ambient_goals', {
162
160
  action: 'update',
163
161
  goalId: goalToUpdate.id,
164
- priority: 10
165
- })
166
- console.log('Update result:', JSON.stringify(updateResult, null, 2))
162
+ priority: 10,
163
+ });
164
+ console.log('Update result:', JSON.stringify(updateResult, null, 2));
167
165
  }
168
166
 
169
- console.log('\n=== Example 14: Delete a Goal ===')
167
+ console.log('\n=== Example 14: Delete a Goal ===');
170
168
  const deleteGoal = await framework.executeTool('ambient_goals', {
171
169
  action: 'create',
172
170
  title: 'Goal to Delete',
173
171
  description: 'This will be deleted',
174
- priority: 1
175
- })
172
+ priority: 1,
173
+ });
176
174
  if (deleteGoal.goal) {
177
- console.log(`Created goal to delete: ${deleteGoal.goal.id}`)
175
+ console.log(`Created goal to delete: ${deleteGoal.goal.id}`);
178
176
  const deleteResult = await framework.executeTool('ambient_goals', {
179
177
  action: 'delete',
180
- goalId: deleteGoal.goal.id
181
- })
182
- console.log('Delete result:', JSON.stringify(deleteResult, null, 2))
178
+ goalId: deleteGoal.goal.id,
179
+ });
180
+ console.log('Delete result:', JSON.stringify(deleteResult, null, 2));
183
181
  }
184
182
 
185
- console.log('\n=== All Examples Completed ===')
186
- console.log('Check .agent/data/ambient/ for persisted data')
183
+ console.log('\n=== All Examples Completed ===');
184
+ console.log('Check .agent/data/ambient/ for persisted data');
187
185
 
188
186
  // Cleanup
189
- console.log('\nShutting down...')
190
- await framework.destroy()
187
+ console.log('\nShutting down...');
188
+ await framework.destroy();
191
189
  }
192
190
 
193
- main().catch(err => {
194
- console.error('Example error:', err)
195
- process.exit(1)
196
- })
191
+ main().catch((err) => {
192
+ console.error('Example error:', err);
193
+ process.exit(1);
194
+ });
package/examples/basic.js CHANGED
@@ -1,110 +1,115 @@
1
- /**
2
- * 基础示例
3
- * 展示如何使用 Framework 和 Agent
4
- */
5
-
6
- const { Framework } = require('../src')
7
- const { AIPlugin } = require('../plugins/ai-plugin')
8
- const { z } = require('zod')
9
-
10
- async function main() {
11
- // 创建框架实例
12
- const framework = new Framework({ debug: true })
13
-
14
- // 加载 AI 插件
15
- await framework.loadPlugin(new AIPlugin({
16
- provider: 'deepseek',
17
- model: 'deepseek-chat',
18
- apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key'
19
- }))
20
-
21
- // 注册自定义工具(使用 inputSchema 格式)
22
- framework.registerTool({
23
- name: 'hello',
24
- description: '打招呼工具',
25
- inputSchema: z.object({
26
- name: z.string().optional().describe('姓名')
27
- }),
28
- execute: async (args) => {
29
- return `Hello, ${args.name || 'World'}!`
30
- }
31
- })
32
-
33
- // 注册计算器工具
34
- framework.registerTool({
35
- name: 'calculate',
36
- description: '简单的计算器',
37
- inputSchema: z.object({
38
- expression: z.string().describe('数学表达式,如 2+3*4')
39
- }),
40
- execute: async (args) => {
41
- try {
42
- // 安全计算(仅支持基本运算)
43
- const result = Function(`"use strict"; return (${args.expression})`)()
44
- return { result }
45
- } catch (e) {
46
- return { error: e.message }
47
- }
48
- }
49
- })
50
-
51
- console.log('[Framework] Ready!')
52
- console.log('[Tools]', framework.getTools().map(t => t.name))
53
-
54
- // 创建 Agent
55
- const agent = framework.createAgent({
56
- name: 'MyAgent',
57
- systemPrompt: '你是一个有帮助的助手。当需要计算时,使用 calculate 工具。'
58
- })
59
-
60
- // 监听事件
61
- agent.on('tool-call', (tool) => {
62
- console.log('[Agent] Tool call:', tool.name, tool.args)
63
- })
64
-
65
- agent.on('tool-result', (result) => {
66
- console.log('[Agent] Tool result:', result.name, result.result)
67
- })
68
-
69
- // AI 对话示例
70
- console.log('\n=== AI Chat Example ===')
71
- try {
72
- const response = await agent.chat('你好!')
73
- console.log('[Agent] Response:', response.message)
74
- } catch (err) {
75
- console.error('[Agent] Error:', err.message)
76
- }
77
-
78
- // 使用工具的对话示例
79
- console.log('\n=== AI Chat with Tool Call ===')
80
- try {
81
- const response = await agent.chat('请帮我计算 (15 + 25) * 2 等于多少?')
82
- console.log('[Agent] Response:', response.message)
83
- } catch (err) {
84
- console.error('[Agent] Error:', err.message)
85
- }
86
-
87
- // 流式对话示例
88
- console.log('\n=== Streaming Chat ===')
89
- try {
90
- for await (const chunk of agent.chatStream('请用中文介绍一下你自己')) {
91
- if (chunk.type === 'text') {
92
- process.stdout.write(chunk.text)
93
- }
94
- }
95
- console.log('\n')
96
- } catch (err) {
97
- console.error('[Agent] Stream Error:', err.message)
98
- }
99
-
100
- // 热重载示例
101
- console.log('\n=== Hot Reload ===')
102
- await framework.reloadPlugin('ai')
103
- console.log('AI plugin reloaded!')
104
-
105
- // 清理
106
- await framework.destroy()
107
- console.log('\n[Done]')
108
- }
109
-
110
- main().catch(console.error)
1
+ /**
2
+ * 基础示例
3
+ * 展示如何使用 Framework 和 Agent
4
+ */
5
+
6
+ const { Framework } = require('../src');
7
+ const { AIPlugin } = require('../plugins/ai-plugin');
8
+ const { z } = require('zod');
9
+
10
+ async function main() {
11
+ // 创建框架实例
12
+ const framework = new Framework({ debug: true });
13
+
14
+ // 加载 AI 插件
15
+ await framework.loadPlugin(
16
+ new AIPlugin({
17
+ provider: 'deepseek',
18
+ model: 'deepseek-chat',
19
+ apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
20
+ })
21
+ );
22
+
23
+ // 注册自定义工具(使用 inputSchema 格式)
24
+ framework.registerTool({
25
+ name: 'hello',
26
+ description: '打招呼工具',
27
+ inputSchema: z.object({
28
+ name: z.string().optional().describe('姓名'),
29
+ }),
30
+ execute: async (args) => {
31
+ return `Hello, ${args.name || 'World'}!`;
32
+ },
33
+ });
34
+
35
+ // 注册计算器工具
36
+ framework.registerTool({
37
+ name: 'calculate',
38
+ description: '简单的计算器',
39
+ inputSchema: z.object({
40
+ expression: z.string().describe('数学表达式,如 2+3*4'),
41
+ }),
42
+ execute: async (args) => {
43
+ try {
44
+ // 安全计算(仅支持基本运算)
45
+ const result = Function(`"use strict"; return (${args.expression})`)();
46
+ return { result };
47
+ } catch (e) {
48
+ return { error: e.message };
49
+ }
50
+ },
51
+ });
52
+
53
+ console.log('[Framework] Ready!');
54
+ console.log(
55
+ '[Tools]',
56
+ framework.getTools().map((t) => t.name)
57
+ );
58
+
59
+ // 创建 Agent
60
+ const agent = framework.createAgent({
61
+ name: 'MyAgent',
62
+ systemPrompt: '你是一个有帮助的助手。当需要计算时,使用 calculate 工具。',
63
+ });
64
+
65
+ // 监听事件
66
+ agent.on('tool-call', (tool) => {
67
+ console.log('[Agent] Tool call:', tool.name, tool.args);
68
+ });
69
+
70
+ agent.on('tool-result', (result) => {
71
+ console.log('[Agent] Tool result:', result.name, result.result);
72
+ });
73
+
74
+ // AI 对话示例
75
+ console.log('\n=== AI Chat Example ===');
76
+ try {
77
+ const response = await agent.chat('你好!');
78
+ console.log('[Agent] Response:', response.message);
79
+ } catch (err) {
80
+ console.error('[Agent] Error:', err.message);
81
+ }
82
+
83
+ // 使用工具的对话示例
84
+ console.log('\n=== AI Chat with Tool Call ===');
85
+ try {
86
+ const response = await agent.chat('请帮我计算 (15 + 25) * 2 等于多少?');
87
+ console.log('[Agent] Response:', response.message);
88
+ } catch (err) {
89
+ console.error('[Agent] Error:', err.message);
90
+ }
91
+
92
+ // 流式对话示例
93
+ console.log('\n=== Streaming Chat ===');
94
+ try {
95
+ for await (const chunk of agent.chatStream('请用中文介绍一下你自己')) {
96
+ if (chunk.type === 'text') {
97
+ process.stdout.write(chunk.text);
98
+ }
99
+ }
100
+ console.log('\n');
101
+ } catch (err) {
102
+ console.error('[Agent] Stream Error:', err.message);
103
+ }
104
+
105
+ // 热重载示例
106
+ console.log('\n=== Hot Reload ===');
107
+ await framework.reloadPlugin('ai');
108
+ console.log('AI plugin reloaded!');
109
+
110
+ // 清理
111
+ await framework.destroy();
112
+ console.log('\n[Done]');
113
+ }
114
+
115
+ main().catch(console.error);