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.
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/.agent/ARCHITECTURE.md +288 -0
- package/.agent/agents/ambient-agent.md +57 -0
- package/.agent/agents/debugger.md +55 -0
- package/.agent/agents/email-assistant.md +49 -0
- package/.agent/agents/file-manager.md +42 -0
- package/.agent/agents/python-developer.md +60 -0
- package/.agent/agents/scheduler.md +59 -0
- package/.agent/agents/web-developer.md +45 -0
- package/.agent/data/default.json +29 -0
- package/.agent/data/plugins-state.json +255 -0
- package/.agent/mcp_config.json +4 -0
- package/.agent/mcp_config_updated.json +12 -0
- package/.agent/plugins.json +5 -0
- package/.agent/rules/GEMINI.md +273 -0
- package/.agent/rules/allow-rule.md +77 -0
- package/.agent/rules/log-rule.md +83 -0
- package/.agent/rules/security-rule.md +93 -0
- package/.agent/scripts/auto_preview.py +148 -0
- package/.agent/scripts/checklist.py +217 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/verify_all.py +327 -0
- package/.agent/skills/api-patterns/SKILL.md +81 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/architecture/SKILL.md +55 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/clean-code/SKILL.md +201 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/frontend-design/SKILL.md +418 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +311 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +1116 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/.agent/workflows/brainstorm.md +113 -0
- package/.agent/workflows/create.md +59 -0
- package/.agent/workflows/debug.md +103 -0
- package/.agent/workflows/deploy.md +176 -0
- package/.agent/workflows/enhance.md +63 -0
- package/.agent/workflows/orchestrate.md +237 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +81 -0
- package/.agent/workflows/simple-test.md +42 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/structured-orchestrate.md +180 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +296 -0
- package/.claude/settings.local.json +157 -149
- package/.editorconfig +56 -0
- package/.husky/pre-commit +4 -0
- package/.lintstagedrc +7 -0
- package/.prettierignore +29 -0
- package/.prettierrc +11 -0
- package/CLAUDE.md +2 -0
- package/README.md +64 -55
- package/SPEC.md +102 -61
- package/cli/bin/foliko.js +4 -4
- package/cli/src/commands/chat.js +53 -51
- package/cli/src/commands/list.js +40 -37
- package/cli/src/index.js +18 -18
- package/cli/src/ui/chat-ui.js +78 -76
- package/cli/src/utils/ansi.js +15 -15
- package/cli/src/utils/markdown.js +112 -116
- package/docker-compose.yml +1 -1
- package/docs/ai-sdk-optimization.md +655 -636
- package/docs/features.md +80 -80
- package/docs/quick-reference.md +49 -46
- package/docs/user-manual.md +411 -380
- package/examples/ambient-example.js +95 -97
- package/examples/basic.js +115 -110
- package/examples/bootstrap.js +52 -43
- package/examples/mcp-example.js +56 -53
- package/examples/skill-example.js +49 -49
- package/examples/test-chat.js +60 -58
- package/examples/test-mcp.js +49 -43
- package/examples/test-reload.js +38 -40
- package/examples/test-telegram.js +3 -3
- package/examples/test-tg-bot.js +7 -4
- package/examples/test-tg-simple.js +4 -3
- package/examples/test-tg.js +3 -3
- package/examples/test-think.js +13 -7
- package/examples/test-web-plugin.js +61 -56
- package/examples/test-weixin-feishu.js +40 -37
- package/examples/workflow.js +49 -49
- package/foliko-1.0.75.tgz +0 -0
- package/package.json +37 -3
- package/plugins/ai-plugin.js +7 -5
- package/plugins/ambient-agent/EventWatcher.js +113 -0
- package/plugins/ambient-agent/ExplorerLoop.js +640 -0
- package/plugins/ambient-agent/GoalManager.js +197 -0
- package/plugins/ambient-agent/Reflector.js +95 -0
- package/plugins/ambient-agent/StateStore.js +90 -0
- package/plugins/ambient-agent/constants.js +101 -0
- package/plugins/ambient-agent/index.js +579 -0
- package/plugins/default-plugins.js +62 -49
- package/plugins/email/constants.js +64 -0
- package/plugins/email/handlers.js +461 -0
- package/plugins/email/index.js +278 -0
- package/plugins/email/monitor.js +269 -0
- package/plugins/email/parser.js +138 -0
- package/plugins/email/reply.js +151 -0
- package/plugins/email/utils.js +124 -0
- package/plugins/feishu-plugin.js +23 -19
- package/plugins/file-system-plugin.js +469 -120
- package/plugins/install-plugin.js +6 -4
- package/plugins/python-executor-plugin.js +3 -1
- package/plugins/python-plugin-loader.js +10 -8
- package/plugins/rules-plugin.js +5 -3
- package/plugins/scheduler-plugin.js +18 -16
- package/plugins/session-plugin.js +3 -1
- package/plugins/storage-plugin.js +5 -3
- package/plugins/subagent-plugin.js +152 -92
- package/plugins/telegram-plugin.js +26 -19
- package/plugins/think-plugin.js +4 -2
- package/plugins/tools-plugin.js +3 -1
- package/plugins/web-plugin.js +15 -13
- package/plugins/weixin-plugin.js +43 -36
- package/reports/system-health-report-20260401.md +79 -0
- package/skills/ambient-agent/SKILL.md +49 -39
- package/skills/foliko-dev/AGENTS.md +64 -61
- package/skills/foliko-dev/SKILL.md +125 -119
- package/skills/mcp-usage/SKILL.md +19 -17
- package/skills/python-plugin-dev/SKILL.md +16 -15
- package/skills/skill-guide/SKILL.md +12 -12
- package/skills/subagent-guide/SKILL.md +237 -0
- package/skills/workflow-guide/SKILL.md +90 -45
- package/skills/workflow-troubleshooting/DEBUGGING.md +36 -21
- package/skills/workflow-troubleshooting/SKILL.md +156 -79
- package/src/capabilities/index.js +4 -4
- package/src/capabilities/skill-manager.js +211 -197
- package/src/capabilities/workflow-engine.js +461 -547
- package/src/core/agent-chat.js +426 -279
- package/src/core/agent.js +453 -248
- package/src/core/framework.js +183 -149
- package/src/core/index.js +8 -8
- package/src/core/plugin-base.js +52 -52
- package/src/core/plugin-manager.js +377 -281
- package/src/core/provider.js +35 -32
- package/src/core/sub-agent-config.js +264 -0
- package/src/core/system-prompt-builder.js +120 -0
- package/src/core/tool-registry.js +416 -33
- package/src/core/tool-router.js +149 -68
- package/src/executors/executor-base.js +58 -58
- package/src/executors/mcp-executor.js +269 -257
- package/src/index.js +5 -17
- package/src/utils/circuit-breaker.js +301 -0
- package/src/utils/error-boundary.js +363 -0
- package/src/utils/error.js +374 -0
- package/src/utils/event-emitter.js +20 -20
- package/src/utils/id.js +133 -0
- package/src/utils/index.js +217 -3
- package/src/utils/logger.js +181 -0
- package/src/utils/plugin-helpers.js +90 -0
- package/src/utils/retry.js +122 -0
- package/src/utils/sandbox.js +292 -0
- package/test/tool-registry-validation.test.js +218 -0
- package/test_report.md +70 -0
- package/website/docs/api.html +169 -107
- package/website/docs/configuration.html +296 -144
- package/website/docs/plugin-development.html +154 -85
- package/website/docs/project-structure.html +110 -109
- package/website/docs/skill-development.html +117 -61
- package/website/index.html +209 -205
- package/website/script.js +20 -17
- package/website/styles.css +1 -1
- package/plugins/ambient-agent-plugin.js +0 -1565
- 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
|
-
|
|
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(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
name
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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);
|