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
package/examples/test-mcp.js
CHANGED
|
@@ -2,78 +2,84 @@
|
|
|
2
2
|
* MCP 插件测试脚本
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
const { Framework } = require('../src')
|
|
6
|
-
const { MCPExecutorPlugin } = require('../src/executors/mcp-executor')
|
|
5
|
+
const { Framework } = require('../src');
|
|
6
|
+
const { MCPExecutorPlugin } = require('../src/executors/mcp-executor');
|
|
7
7
|
|
|
8
8
|
async function test() {
|
|
9
|
-
console.log('=== MCP Plugin Test ===\n')
|
|
9
|
+
console.log('=== MCP Plugin Test ===\n');
|
|
10
10
|
|
|
11
|
-
console.log('1. Creating framework...')
|
|
12
|
-
const framework = new Framework({ debug: true })
|
|
11
|
+
console.log('1. Creating framework...');
|
|
12
|
+
const framework = new Framework({ debug: true });
|
|
13
13
|
|
|
14
|
-
console.log('2. Creating MCP plugin with fetch server...')
|
|
14
|
+
console.log('2. Creating MCP plugin with fetch server...');
|
|
15
15
|
const mcpPlugin = new MCPExecutorPlugin({
|
|
16
16
|
servers: [
|
|
17
17
|
{
|
|
18
18
|
name: 'fetch',
|
|
19
19
|
command: 'uvx',
|
|
20
|
-
args: ['mcp-server-fetch']
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
})
|
|
20
|
+
args: ['mcp-server-fetch'],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
24
|
|
|
25
|
-
console.log('3. Loading MCP plugin...')
|
|
26
|
-
await framework.loadPlugin(mcpPlugin)
|
|
25
|
+
console.log('3. Loading MCP plugin...');
|
|
26
|
+
await framework.loadPlugin(mcpPlugin);
|
|
27
27
|
|
|
28
|
-
console.log('4. Starting framework...')
|
|
29
|
-
await framework.pluginManager.startAll()
|
|
28
|
+
console.log('4. Starting framework...');
|
|
29
|
+
await framework.pluginManager.startAll();
|
|
30
30
|
|
|
31
31
|
// 等待 MCP 服务器连接
|
|
32
|
-
console.log('\n5. Waiting for MCP connection...')
|
|
33
|
-
await new Promise(resolve => setTimeout(resolve, 2000))
|
|
32
|
+
console.log('\n5. Waiting for MCP connection...');
|
|
33
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
34
34
|
|
|
35
|
-
console.log('\n6. Listing MCP servers...')
|
|
36
|
-
const servers = mcpPlugin.getServers()
|
|
37
|
-
console.log('Servers:', JSON.stringify(servers, null, 2))
|
|
35
|
+
console.log('\n6. Listing MCP servers...');
|
|
36
|
+
const servers = mcpPlugin.getServers();
|
|
37
|
+
console.log('Servers:', JSON.stringify(servers, null, 2));
|
|
38
38
|
|
|
39
|
-
console.log('\n7. Listing MCP tools...')
|
|
40
|
-
const mcpTools = framework.getTools().filter(t => t.name.startsWith('mcp_'))
|
|
41
|
-
console.log(
|
|
39
|
+
console.log('\n7. Listing MCP tools...');
|
|
40
|
+
const mcpTools = framework.getTools().filter((t) => t.name.startsWith('mcp_'));
|
|
41
|
+
console.log(
|
|
42
|
+
'MCP Tools:',
|
|
43
|
+
mcpTools.map((t) => t.name)
|
|
44
|
+
);
|
|
42
45
|
|
|
43
46
|
if (mcpTools.length > 0) {
|
|
44
|
-
console.log('\n8. Testing mcp_list_servers...')
|
|
45
|
-
const listResult = await framework.executeTool('mcp_list_servers', {})
|
|
46
|
-
console.log('List Servers Result:', JSON.stringify(listResult, null, 2))
|
|
47
|
+
console.log('\n8. Testing mcp_list_servers...');
|
|
48
|
+
const listResult = await framework.executeTool('mcp_list_servers', {});
|
|
49
|
+
console.log('List Servers Result:', JSON.stringify(listResult, null, 2));
|
|
47
50
|
|
|
48
|
-
console.log('\n9. Testing mcp_tool_schema...')
|
|
51
|
+
console.log('\n9. Testing mcp_tool_schema...');
|
|
49
52
|
const schemaResult = await framework.executeTool('mcp_tool_schema', {
|
|
50
53
|
server: 'fetch',
|
|
51
|
-
tool: 'fetch'
|
|
52
|
-
})
|
|
53
|
-
console.log('Tool Schema:', JSON.stringify(schemaResult, null, 2))
|
|
54
|
+
tool: 'fetch',
|
|
55
|
+
});
|
|
56
|
+
console.log('Tool Schema:', JSON.stringify(schemaResult, null, 2));
|
|
54
57
|
|
|
55
|
-
console.log('\n10. Testing mcp_call (fetch a webpage)...')
|
|
58
|
+
console.log('\n10. Testing mcp_call (fetch a webpage)...');
|
|
56
59
|
const callResult = await framework.executeTool('mcp_call', {
|
|
57
60
|
server: 'fetch',
|
|
58
61
|
tool: 'fetch',
|
|
59
|
-
args_json: JSON.stringify({ url: 'https://httpbin.org/get' })
|
|
60
|
-
})
|
|
61
|
-
console.log(
|
|
62
|
+
args_json: JSON.stringify({ url: 'https://httpbin.org/get' }),
|
|
63
|
+
});
|
|
64
|
+
console.log(
|
|
65
|
+
'Fetch Result (truncated):',
|
|
66
|
+
JSON.stringify(callResult, null, 2).substring(0, 500) + '...'
|
|
67
|
+
);
|
|
62
68
|
}
|
|
63
69
|
|
|
64
|
-
console.log('\n11. Destroying framework...')
|
|
65
|
-
await framework.destroy()
|
|
70
|
+
console.log('\n11. Destroying framework...');
|
|
71
|
+
await framework.destroy();
|
|
66
72
|
|
|
67
|
-
console.log('\n=== Test Complete ===')
|
|
73
|
+
console.log('\n=== Test Complete ===');
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
test()
|
|
71
77
|
.then(() => {
|
|
72
|
-
console.log('\n✓ Test completed successfully')
|
|
73
|
-
process.exit(0)
|
|
74
|
-
})
|
|
75
|
-
.catch(err => {
|
|
76
|
-
console.error('\n✗ Test failed:', err.message)
|
|
77
|
-
console.error(err.stack)
|
|
78
|
-
process.exit(1)
|
|
78
|
+
console.log('\n✓ Test completed successfully');
|
|
79
|
+
process.exit(0);
|
|
79
80
|
})
|
|
81
|
+
.catch((err) => {
|
|
82
|
+
console.error('\n✗ Test failed:', err.message);
|
|
83
|
+
console.error(err.stack);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
});
|
package/examples/test-reload.js
CHANGED
|
@@ -2,60 +2,58 @@
|
|
|
2
2
|
* MCP mcp_reload 功能测试
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
const { Framework } = require('../src')
|
|
6
|
-
const { MCPExecutorPlugin } = require('../src/executors/mcp-executor')
|
|
7
|
-
const fs = require('fs')
|
|
8
|
-
const path = require('path')
|
|
5
|
+
const { Framework } = require('../src');
|
|
6
|
+
const { MCPExecutorPlugin } = require('../src/executors/mcp-executor');
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
9
|
|
|
10
10
|
async function test() {
|
|
11
|
-
console.log('=== Testing mcp_reload ===\n')
|
|
12
|
-
|
|
11
|
+
console.log('=== Testing mcp_reload ===\n');
|
|
12
|
+
|
|
13
13
|
// 创建框架
|
|
14
|
-
const framework = new Framework({ debug: true })
|
|
15
|
-
|
|
14
|
+
const framework = new Framework({ debug: true });
|
|
15
|
+
|
|
16
16
|
// 创建 MCP 插件
|
|
17
17
|
const mcpPlugin = new MCPExecutorPlugin({
|
|
18
|
-
servers: [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
})
|
|
22
|
-
|
|
18
|
+
servers: [{ name: 'fetch', command: 'uvx', args: ['mcp-server-fetch'] }],
|
|
19
|
+
});
|
|
20
|
+
|
|
23
21
|
// 加载并启动
|
|
24
|
-
await framework.loadPlugin(mcpPlugin)
|
|
25
|
-
await framework.pluginManager.startAll()
|
|
26
|
-
|
|
22
|
+
await framework.loadPlugin(mcpPlugin);
|
|
23
|
+
await framework.pluginManager.startAll();
|
|
24
|
+
|
|
27
25
|
// 等待连接
|
|
28
|
-
await new Promise(r => setTimeout(r, 2000))
|
|
29
|
-
|
|
30
|
-
console.log('\n1. 初始服务器列表:')
|
|
31
|
-
const initialServers = mcpPlugin.getServers()
|
|
32
|
-
console.log(JSON.stringify(initialServers, null, 2))
|
|
33
|
-
|
|
26
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
27
|
+
|
|
28
|
+
console.log('\n1. 初始服务器列表:');
|
|
29
|
+
const initialServers = mcpPlugin.getServers();
|
|
30
|
+
console.log(JSON.stringify(initialServers, null, 2));
|
|
31
|
+
|
|
34
32
|
// 测试 mcp_reload
|
|
35
|
-
console.log('\n2. 调用 mcp_reload...')
|
|
36
|
-
const result = await framework.executeTool('mcp_reload', {})
|
|
37
|
-
console.log('mcp_reload 结果:')
|
|
38
|
-
console.log(JSON.stringify(result, null, 2))
|
|
39
|
-
|
|
33
|
+
console.log('\n2. 调用 mcp_reload...');
|
|
34
|
+
const result = await framework.executeTool('mcp_reload', {});
|
|
35
|
+
console.log('mcp_reload 结果:');
|
|
36
|
+
console.log(JSON.stringify(result, null, 2));
|
|
37
|
+
|
|
40
38
|
// 检查配置
|
|
41
|
-
console.log('\n3. 当前配置文件:')
|
|
42
|
-
const configPath = path.resolve('.agent/mcp_config.json')
|
|
39
|
+
console.log('\n3. 当前配置文件:');
|
|
40
|
+
const configPath = path.resolve('.agent/mcp_config.json');
|
|
43
41
|
if (fs.existsSync(configPath)) {
|
|
44
|
-
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'))
|
|
45
|
-
console.log(JSON.stringify(config, null, 2))
|
|
42
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
43
|
+
console.log(JSON.stringify(config, null, 2));
|
|
46
44
|
} else {
|
|
47
|
-
console.log('配置文件不存在: ' + configPath)
|
|
45
|
+
console.log('配置文件不存在: ' + configPath);
|
|
48
46
|
}
|
|
49
|
-
|
|
47
|
+
|
|
50
48
|
// 清理
|
|
51
|
-
await framework.destroy()
|
|
52
|
-
|
|
53
|
-
console.log('\n=== 测试完成 ===')
|
|
49
|
+
await framework.destroy();
|
|
50
|
+
|
|
51
|
+
console.log('\n=== 测试完成 ===');
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
test()
|
|
57
55
|
.then(() => process.exit(0))
|
|
58
|
-
.catch(err => {
|
|
59
|
-
console.error('测试失败:', err)
|
|
60
|
-
process.exit(1)
|
|
61
|
-
})
|
|
56
|
+
.catch((err) => {
|
|
57
|
+
console.error('测试失败:', err);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
});
|
|
@@ -10,8 +10,8 @@ async function main() {
|
|
|
10
10
|
provider: process.env.FOLIKO_PROVIDER || 'minimax',
|
|
11
11
|
model: process.env.FOLIKO_MODEL || 'MiniMax-M2.7',
|
|
12
12
|
baseURL: process.env.FOLIKO_BASE_URL || 'https://api.minimaxi.com/v1',
|
|
13
|
-
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY
|
|
14
|
-
}
|
|
13
|
+
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY,
|
|
14
|
+
},
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
// 检查 telegram 插件
|
|
@@ -47,4 +47,4 @@ async function main() {
|
|
|
47
47
|
await new Promise(() => {});
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
main().catch(console.error);
|
|
50
|
+
main().catch(console.error);
|
package/examples/test-tg-bot.js
CHANGED
|
@@ -12,8 +12,8 @@ async function main() {
|
|
|
12
12
|
provider: process.env.FOLIKO_PROVIDER || 'minimax',
|
|
13
13
|
model: process.env.FOLIKO_MODEL || 'MiniMax-M2.7',
|
|
14
14
|
baseURL: process.env.FOLIKO_BASE_URL || 'https://api.minimaxi.com/v1',
|
|
15
|
-
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY
|
|
16
|
-
}
|
|
15
|
+
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY,
|
|
16
|
+
},
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
// 检查主 Agent
|
|
@@ -21,7 +21,10 @@ async function main() {
|
|
|
21
21
|
console.log('Main Agent:', mainAgent ? mainAgent.name : 'NOT FOUND');
|
|
22
22
|
console.log('Agent apiKey:', mainAgent?.apiKey ? 'set' : 'NOT SET');
|
|
23
23
|
console.log('Agent _chatHandler:', mainAgent?._chatHandler ? 'exists' : 'NOT EXISTS');
|
|
24
|
-
console.log(
|
|
24
|
+
console.log(
|
|
25
|
+
'Agent _chatHandler._aiClient:',
|
|
26
|
+
mainAgent?._chatHandler?._aiClient ? 'exists' : 'NOT EXISTS'
|
|
27
|
+
);
|
|
25
28
|
|
|
26
29
|
// 检查 Telegram 插件
|
|
27
30
|
const tgPlugin = framework.pluginManager.get('telegram');
|
|
@@ -39,4 +42,4 @@ async function main() {
|
|
|
39
42
|
await new Promise(() => {});
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
main().catch(console.error);
|
|
45
|
+
main().catch(console.error);
|
|
@@ -38,9 +38,10 @@ bot.on('message', (msg) => {
|
|
|
38
38
|
console.log('========================\n');
|
|
39
39
|
|
|
40
40
|
// 回复测试
|
|
41
|
-
bot
|
|
41
|
+
bot
|
|
42
|
+
.sendMessage(msg.chat.id, 'Bot is working! Received: ' + msg.text)
|
|
42
43
|
.then(() => console.log('Reply sent'))
|
|
43
|
-
.catch(err => console.log('Reply error:', err.message));
|
|
44
|
+
.catch((err) => console.log('Reply error:', err.message));
|
|
44
45
|
});
|
|
45
46
|
|
|
46
|
-
console.log('Waiting for messages...');
|
|
47
|
+
console.log('Waiting for messages...');
|
package/examples/test-tg.js
CHANGED
|
@@ -10,8 +10,8 @@ async function main() {
|
|
|
10
10
|
provider: process.env.FOLIKO_PROVIDER || 'minimax',
|
|
11
11
|
model: process.env.FOLIKO_MODEL || 'MiniMax-M2.7',
|
|
12
12
|
baseURL: process.env.FOLIKO_BASE_URL || 'https://api.minimaxi.com/v1',
|
|
13
|
-
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY
|
|
14
|
-
}
|
|
13
|
+
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY,
|
|
14
|
+
},
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
// 检查 telegram 插件
|
|
@@ -59,4 +59,4 @@ async function main() {
|
|
|
59
59
|
await new Promise(() => {});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
main().catch(console.error);
|
|
62
|
+
main().catch(console.error);
|
package/examples/test-think.js
CHANGED
|
@@ -10,20 +10,26 @@ async function main() {
|
|
|
10
10
|
provider: process.env.FOLIKO_PROVIDER || 'minimax',
|
|
11
11
|
model: process.env.FOLIKO_MODEL || 'MiniMax-M2.7',
|
|
12
12
|
baseURL: process.env.FOLIKO_BASE_URL || 'https://api.minimaxi.com/v1',
|
|
13
|
-
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY
|
|
14
|
-
}
|
|
13
|
+
apiKey: process.env.MINIMAX_API_KEY || process.env.DEEPSEEK_API_KEY,
|
|
14
|
+
},
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
const agent = framework.createAgent({
|
|
18
18
|
name: 'FolikoAgent',
|
|
19
|
-
systemPrompt: '你是一个有帮助的助手。'
|
|
19
|
+
systemPrompt: '你是一个有帮助的助手。',
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
console.log(
|
|
23
|
-
|
|
22
|
+
console.log(
|
|
23
|
+
'_mainAgent provider:',
|
|
24
|
+
framework._mainAgent ? framework._mainAgent.provider : 'none'
|
|
25
|
+
);
|
|
26
|
+
console.log(
|
|
27
|
+
'_mainAgent has apiKey:',
|
|
28
|
+
framework._mainAgent && framework._mainAgent.apiKey ? 'yes' : 'no'
|
|
29
|
+
);
|
|
24
30
|
|
|
25
31
|
const tools = framework.getTools();
|
|
26
|
-
const thinkTool = tools.find(t => t.name === 'think_now');
|
|
32
|
+
const thinkTool = tools.find((t) => t.name === 'think_now');
|
|
27
33
|
|
|
28
34
|
if (thinkTool) {
|
|
29
35
|
const result = await thinkTool.execute({ mode: 'reflect', topic: '测试' });
|
|
@@ -34,4 +40,4 @@ async function main() {
|
|
|
34
40
|
await framework.destroy();
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
main().catch(console.error);
|
|
43
|
+
main().catch(console.error);
|
|
@@ -3,96 +3,101 @@
|
|
|
3
3
|
* 测试路由注册和请求响应
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const { WebPlugin } = require('../plugins/web-plugin')
|
|
6
|
+
const { WebPlugin } = require('../plugins/web-plugin');
|
|
7
7
|
|
|
8
8
|
async function test() {
|
|
9
|
-
console.log('=== Web 插件测试 ===\n')
|
|
9
|
+
console.log('=== Web 插件测试 ===\n');
|
|
10
10
|
|
|
11
11
|
// 1. 创建插件
|
|
12
|
-
const plugin = new WebPlugin()
|
|
12
|
+
const plugin = new WebPlugin();
|
|
13
13
|
const mockFramework = {
|
|
14
14
|
registerTool: (tool) => console.log(`[工具注册] ${tool.name}`),
|
|
15
15
|
_agents: [],
|
|
16
|
-
pluginManager: { get: () => null }
|
|
17
|
-
}
|
|
18
|
-
plugin.install(mockFramework)
|
|
16
|
+
pluginManager: { get: () => null },
|
|
17
|
+
};
|
|
18
|
+
plugin.install(mockFramework);
|
|
19
19
|
|
|
20
20
|
// 2. 启动服务
|
|
21
|
-
console.log('\n[1] 启动 Web 服务...')
|
|
22
|
-
const startResult = await plugin._startServer(3099)
|
|
23
|
-
console.log('启动结果:', startResult.success ? '成功' : '失败')
|
|
24
|
-
console.log('服务地址: http://localhost:3099\n')
|
|
21
|
+
console.log('\n[1] 启动 Web 服务...');
|
|
22
|
+
const startResult = await plugin._startServer(3099);
|
|
23
|
+
console.log('启动结果:', startResult.success ? '成功' : '失败');
|
|
24
|
+
console.log('服务地址: http://localhost:3099\n');
|
|
25
25
|
|
|
26
26
|
// 3. 注册测试路由
|
|
27
|
-
console.log('[2] 注册测试路由...')
|
|
27
|
+
console.log('[2] 注册测试路由...');
|
|
28
28
|
|
|
29
29
|
// 返回固定字符串
|
|
30
|
-
await plugin._registerRoute('GET', '/test', 'return "1232432"', '返回固定字符串')
|
|
31
|
-
console.log('注册: GET /test -> return "1232432"')
|
|
30
|
+
await plugin._registerRoute('GET', '/test', 'return "1232432"', '返回固定字符串');
|
|
31
|
+
console.log('注册: GET /test -> return "1232432"');
|
|
32
32
|
|
|
33
33
|
// 返回 JSON
|
|
34
|
-
await plugin._registerRoute('GET', '/json', 'return { hello: "world", code: 200 }', '返回 JSON')
|
|
35
|
-
console.log('注册: GET /json -> return { hello: "world", code: 200 }')
|
|
34
|
+
await plugin._registerRoute('GET', '/json', 'return { hello: "world", code: 200 }', '返回 JSON');
|
|
35
|
+
console.log('注册: GET /json -> return { hello: "world", code: 200 }');
|
|
36
36
|
|
|
37
37
|
// 带参数
|
|
38
|
-
await plugin._registerRoute(
|
|
39
|
-
|
|
38
|
+
await plugin._registerRoute(
|
|
39
|
+
'GET',
|
|
40
|
+
'/user/:id',
|
|
41
|
+
'return { userId: context.params.id }',
|
|
42
|
+
'路径参数'
|
|
43
|
+
);
|
|
44
|
+
console.log('注册: GET /user/:id -> return { userId: context.params.id }');
|
|
40
45
|
|
|
41
46
|
// POST 路由
|
|
42
|
-
await plugin._registerRoute('POST', '/echo', 'return { received: context.body }', '回显 body')
|
|
43
|
-
console.log('注册: POST /echo -> return { received: context.body }')
|
|
47
|
+
await plugin._registerRoute('POST', '/echo', 'return { received: context.body }', '回显 body');
|
|
48
|
+
console.log('注册: POST /echo -> return { received: context.body }');
|
|
44
49
|
|
|
45
50
|
// 4. 等待服务就绪
|
|
46
|
-
await new Promise(r => setTimeout(r, 500))
|
|
51
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
47
52
|
|
|
48
53
|
// 5. 测试各路由
|
|
49
|
-
console.log('\n[3] 测试路由响应...\n')
|
|
54
|
+
console.log('\n[3] 测试路由响应...\n');
|
|
50
55
|
|
|
51
56
|
// GET /test
|
|
52
|
-
console.log('GET /test:')
|
|
53
|
-
const r1 = await plugin._sendRequest('GET', '/test')
|
|
54
|
-
console.log(' 状态:', r1.status)
|
|
55
|
-
console.log(' 响应:', JSON.stringify(r1.body))
|
|
56
|
-
console.log()
|
|
57
|
+
console.log('GET /test:');
|
|
58
|
+
const r1 = await plugin._sendRequest('GET', '/test');
|
|
59
|
+
console.log(' 状态:', r1.status);
|
|
60
|
+
console.log(' 响应:', JSON.stringify(r1.body));
|
|
61
|
+
console.log();
|
|
57
62
|
|
|
58
63
|
// GET /json
|
|
59
|
-
console.log('GET /json:')
|
|
60
|
-
const r2 = await plugin._sendRequest('GET', '/json')
|
|
61
|
-
console.log(' 状态:', r2.status)
|
|
62
|
-
console.log(' 响应:', JSON.stringify(r2.body))
|
|
63
|
-
console.log()
|
|
64
|
+
console.log('GET /json:');
|
|
65
|
+
const r2 = await plugin._sendRequest('GET', '/json');
|
|
66
|
+
console.log(' 状态:', r2.status);
|
|
67
|
+
console.log(' 响应:', JSON.stringify(r2.body));
|
|
68
|
+
console.log();
|
|
64
69
|
|
|
65
70
|
// GET /user/123
|
|
66
|
-
console.log('GET /user/123:')
|
|
67
|
-
const r3 = await plugin._sendRequest('GET', '/user/123')
|
|
68
|
-
console.log(' 状态:', r3.status)
|
|
69
|
-
console.log(' 响应:', JSON.stringify(r3.body))
|
|
70
|
-
console.log()
|
|
71
|
+
console.log('GET /user/123:');
|
|
72
|
+
const r3 = await plugin._sendRequest('GET', '/user/123');
|
|
73
|
+
console.log(' 状态:', r3.status);
|
|
74
|
+
console.log(' 响应:', JSON.stringify(r3.body));
|
|
75
|
+
console.log();
|
|
71
76
|
|
|
72
77
|
// POST /echo
|
|
73
|
-
console.log('POST /echo (body: { name: "test" }):')
|
|
74
|
-
const r4 = await plugin._sendRequest('POST', '/echo', { name: 'test' })
|
|
75
|
-
console.log(' 状态:', r4.status)
|
|
76
|
-
console.log(' 响应:', JSON.stringify(r4.body))
|
|
77
|
-
console.log()
|
|
78
|
+
console.log('POST /echo (body: { name: "test" }):');
|
|
79
|
+
const r4 = await plugin._sendRequest('POST', '/echo', { name: 'test' });
|
|
80
|
+
console.log(' 状态:', r4.status);
|
|
81
|
+
console.log(' 响应:', JSON.stringify(r4.body));
|
|
82
|
+
console.log();
|
|
78
83
|
|
|
79
84
|
// 6. 列出所有路由
|
|
80
|
-
console.log('[4] 已注册的路由:')
|
|
81
|
-
const routes = plugin._listRoutes()
|
|
82
|
-
routes.routes.forEach(r => {
|
|
83
|
-
console.log(` ${r.method} ${r.path} - ${r.description}`)
|
|
84
|
-
})
|
|
85
|
-
routes.webhooks.forEach(w => {
|
|
86
|
-
console.log(` WEBHOOK ${w.path}`)
|
|
87
|
-
})
|
|
88
|
-
routes.statics.forEach(s => {
|
|
89
|
-
console.log(` STATIC ${s.path} -> ${s.folder}`)
|
|
90
|
-
})
|
|
85
|
+
console.log('[4] 已注册的路由:');
|
|
86
|
+
const routes = plugin._listRoutes();
|
|
87
|
+
routes.routes.forEach((r) => {
|
|
88
|
+
console.log(` ${r.method} ${r.path} - ${r.description}`);
|
|
89
|
+
});
|
|
90
|
+
routes.webhooks.forEach((w) => {
|
|
91
|
+
console.log(` WEBHOOK ${w.path}`);
|
|
92
|
+
});
|
|
93
|
+
routes.statics.forEach((s) => {
|
|
94
|
+
console.log(` STATIC ${s.path} -> ${s.folder}`);
|
|
95
|
+
});
|
|
91
96
|
|
|
92
97
|
// 7. 停止服务
|
|
93
|
-
console.log('\n[5] 停止服务...')
|
|
94
|
-
await plugin._stopServer()
|
|
95
|
-
console.log('测试完成!')
|
|
98
|
+
console.log('\n[5] 停止服务...');
|
|
99
|
+
await plugin._stopServer();
|
|
100
|
+
console.log('测试完成!');
|
|
96
101
|
}
|
|
97
102
|
|
|
98
|
-
test().catch(console.error)
|
|
103
|
+
test().catch(console.error);
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* 测试 chat() 方法(非流式)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
const { Framework } = require('../src')
|
|
6
|
+
const { Framework } = require('../src');
|
|
7
7
|
|
|
8
8
|
async function main() {
|
|
9
|
-
console.log('=== Weixin/Feishu Plugin Test ===\n')
|
|
9
|
+
console.log('=== Weixin/Feishu Plugin Test ===\n');
|
|
10
10
|
|
|
11
|
-
const framework = new Framework({ debug: true })
|
|
11
|
+
const framework = new Framework({ debug: true });
|
|
12
12
|
|
|
13
13
|
// Bootstrap 加载默认插件
|
|
14
14
|
await framework.bootstrap({
|
|
@@ -16,85 +16,88 @@ async function main() {
|
|
|
16
16
|
aiConfig: {
|
|
17
17
|
provider: 'deepseek',
|
|
18
18
|
model: 'deepseek-chat',
|
|
19
|
-
apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key'
|
|
20
|
-
}
|
|
21
|
-
})
|
|
19
|
+
apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
22
|
|
|
23
23
|
// 加载微信插件
|
|
24
|
-
const { WeixinPlugin } = require('../plugins/weixin-plugin')
|
|
24
|
+
const { WeixinPlugin } = require('../plugins/weixin-plugin');
|
|
25
25
|
const weixinPlugin = new WeixinPlugin({
|
|
26
26
|
forceLogin: false,
|
|
27
|
-
allowedUsers: []
|
|
28
|
-
})
|
|
27
|
+
allowedUsers: [], // 空数组表示允许所有人
|
|
28
|
+
});
|
|
29
29
|
|
|
30
30
|
// 加载飞书插件
|
|
31
|
-
const { FeishuPlugin } = require('../plugins/feishu-plugin')
|
|
31
|
+
const { FeishuPlugin } = require('../plugins/feishu-plugin');
|
|
32
32
|
const feishuPlugin = new FeishuPlugin({
|
|
33
33
|
// appId: 'your-app-id',
|
|
34
34
|
// appSecret: 'your-app-secret',
|
|
35
|
-
allowedUsers: []
|
|
36
|
-
})
|
|
35
|
+
allowedUsers: [],
|
|
36
|
+
});
|
|
37
37
|
|
|
38
38
|
// 注册插件(不自动加载)
|
|
39
39
|
// framework.registerPlugin(weixinPlugin)
|
|
40
40
|
// framework.registerPlugin(feishuPlugin)
|
|
41
41
|
|
|
42
|
-
console.log('\n--- Plugins Registered ---')
|
|
43
|
-
console.log(
|
|
42
|
+
console.log('\n--- Plugins Registered ---');
|
|
43
|
+
console.log(
|
|
44
|
+
'Plugins:',
|
|
45
|
+
framework.pluginManager.getAll().map((p) => p.name)
|
|
46
|
+
);
|
|
44
47
|
|
|
45
48
|
// 创建测试 Agent
|
|
46
49
|
const agent = framework.createAgent({
|
|
47
50
|
name: 'TestAgent',
|
|
48
|
-
systemPrompt: '你是一个测试助手,回复要简洁。'
|
|
49
|
-
})
|
|
51
|
+
systemPrompt: '你是一个测试助手,回复要简洁。',
|
|
52
|
+
});
|
|
50
53
|
|
|
51
54
|
// 测试 chat() 方法(模拟消息处理)
|
|
52
|
-
console.log('\n--- Test chat() method ---')
|
|
55
|
+
console.log('\n--- Test chat() method ---');
|
|
53
56
|
|
|
54
57
|
// 模拟飞书的消息处理流程
|
|
55
|
-
const mockOpenId = 'test_user_001'
|
|
56
|
-
const mockText = '你好,请介绍一下你自己'
|
|
58
|
+
const mockOpenId = 'test_user_001';
|
|
59
|
+
const mockText = '你好,请介绍一下你自己';
|
|
57
60
|
|
|
58
61
|
// 获取 session agent(内部逻辑)
|
|
59
62
|
const sessionInfo = {
|
|
60
63
|
agent: framework.createSessionAgent(`test_${mockOpenId}`, {
|
|
61
|
-
systemPrompt: feishuPlugin.systemPrompt
|
|
64
|
+
systemPrompt: feishuPlugin.systemPrompt,
|
|
62
65
|
}),
|
|
63
|
-
sessionId: `test_${mockOpenId}
|
|
64
|
-
}
|
|
66
|
+
sessionId: `test_${mockOpenId}`,
|
|
67
|
+
};
|
|
65
68
|
|
|
66
69
|
try {
|
|
67
70
|
// 使用 chat() 而非 chatStream()
|
|
68
71
|
const result = await sessionInfo.agent.chat(mockText, {
|
|
69
|
-
sessionId: sessionInfo.sessionId
|
|
70
|
-
})
|
|
72
|
+
sessionId: sessionInfo.sessionId,
|
|
73
|
+
});
|
|
71
74
|
|
|
72
|
-
console.log('Result:', result)
|
|
73
|
-
console.log('Message:', result.message)
|
|
74
|
-
console.log('StepCount:', result.stepCount)
|
|
75
|
+
console.log('Result:', result);
|
|
76
|
+
console.log('Message:', result.message);
|
|
77
|
+
console.log('StepCount:', result.stepCount);
|
|
75
78
|
} catch (err) {
|
|
76
|
-
console.error('Chat error:', err.message)
|
|
79
|
+
console.error('Chat error:', err.message);
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
// 测试 chatStream() 对比
|
|
80
|
-
console.log('\n--- Test chatStream() for comparison ---')
|
|
83
|
+
console.log('\n--- Test chatStream() for comparison ---');
|
|
81
84
|
try {
|
|
82
|
-
let fullResponse = ''
|
|
85
|
+
let fullResponse = '';
|
|
83
86
|
for await (const chunk of sessionInfo.agent.chatStream('今天天气怎么样?', {
|
|
84
|
-
sessionId: sessionInfo.sessionId
|
|
87
|
+
sessionId: sessionInfo.sessionId,
|
|
85
88
|
})) {
|
|
86
89
|
if (chunk.type === 'text' && chunk.text) {
|
|
87
|
-
fullResponse += chunk.text
|
|
90
|
+
fullResponse += chunk.text;
|
|
88
91
|
}
|
|
89
92
|
}
|
|
90
|
-
console.log('Stream result:', fullResponse)
|
|
93
|
+
console.log('Stream result:', fullResponse);
|
|
91
94
|
} catch (err) {
|
|
92
|
-
console.error('Stream error:', err.message)
|
|
95
|
+
console.error('Stream error:', err.message);
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
// 清理
|
|
96
|
-
await framework.destroy()
|
|
97
|
-
console.log('\n[Done]')
|
|
99
|
+
await framework.destroy();
|
|
100
|
+
console.log('\n[Done]');
|
|
98
101
|
}
|
|
99
102
|
|
|
100
|
-
main().catch(console.error)
|
|
103
|
+
main().catch(console.error);
|