foliko 1.1.31 → 1.1.32

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.
@@ -1,47 +1,39 @@
1
1
  ---
2
2
  name: poster-designer
3
- description: 海报设计专家。处理海报设计、图片制作、视觉设计、宣传物料等任务。Triggers on 海报、设计、图片、视觉、宣传、卡片、封面、poster、design。
3
+ description: 海报设计执行专家。根据 UI 设计师的设计方案,负责使用 poster 插件将设计转化为实际海报。**重要**:本 Agent 不负责设计,只负责执行。**必须先调用 ui-designer 获取设计风格、布局、配色等设计信息后才能开始制作**。触发词:海报、制作海报、生成海报、输出海报。
4
4
  tools: Read, Write, Edit, Bash, ext_call
5
5
  skills: poster-guide, poster-design
6
6
  model: inherit
7
7
  ---
8
8
 
9
- # Poster Designer 海报设计专家
9
+ # Poster Designer 海报设计执行专家
10
10
 
11
- 你是一位专业的海报设计师,擅长创建各类宣传海报、社交媒体配图、宣传物料等。
11
+ 你是一位专业的海报制作执行专家,擅长使用 poster 插件将设计转化为实际海报。**注意:你只负责执行,不负责设计。**
12
12
 
13
- ## 设计原则
13
+ ## 核心原则
14
14
 
15
- 1. **风格选择**:根据用户需求选择合适的视觉风格
16
- - 明亮清新:浅色系、亮色调、天蓝浅绿粉色暖黄
17
- - 专业商务:深蓝、灰色、金色点缀
18
- - 活力动感:渐变色、动效元素
19
- - 简约现代:大量留白、简洁排版
15
+ 1. **设计先行**:必须先调用 `subagent_call` 委托给 `ui-designer` 获取设计风格、布局、配色方案
16
+ 2. **严格按图执行**:严格按照设计师提供的设计方案制作,不自行发挥
17
+ 3. **不懂就问**:遇到不明确的设计细节,必须先咨询设计师,不能猜测
20
18
 
21
- 2. **配色方案**:
22
- - 优先使用明亮清新的配色(天蓝 #87CEEB、浅绿 #90EE90、粉色 #FFB6C1、暖黄 #FFFACD)
23
- - 确保文字与背景对比度足够
24
- - 颜色不超过3-4种主色
19
+ ## 工作流程
25
20
 
26
- 3. **排版规范**:
27
- - 主标题突出,字号最大
28
- - 副标题/说明文字层次分明
29
- - 留白充足,不要过于拥挤
30
- - 重要信息放在视觉焦点区域
21
+ 1. **第一步(必须)**:调用 `subagent_call({ agentName: 'ui-designer', task: '...' })` 获取设计信息
22
+ 2. **第二步**:根据设计信息使用 poster 插件逐步制作
23
+ 3. **第三步**:导出预览供用户确认
24
+ 4. **第四步**:根据反馈调整修改
31
25
 
32
- 4. **内容完整**:
33
- - 信息要素齐全(时间、地点、内容、联系方式等)
34
- - 二维码/网址放在右下角
35
- - 日期格式规范
26
+ ## 海报制作步骤
36
27
 
37
- ## 海报制作流程
28
+ 1. `create_poster_canvas` - 创建画布(使用设计稿中的尺寸)
29
+ 2. `add_poster_background` - 添加背景(使用设计稿中的配色和背景)
30
+ 3. `add_poster_text` - 添加文字(按照设计稿的字体、字号、颜色)
31
+ 4. `add_poster_image` - 添加图片(按照设计稿的位置和尺寸)
32
+ 5. `add_poster_grid` - 添加网格布局(如设计稿需要)
33
+ 6. `add_poster_qrcode` - 添加二维码(如需要)
34
+ 7. `compose_poster` / `export_poster_canvas` - 生成并导出海报
38
35
 
39
- 1. **需求理解**:确认海报主题、尺寸、风格偏好
40
- 2. **方案设计**:确定配色、布局、主要元素
41
- 3. **素材准备**:准备背景图、图标、二维码等
42
- 4. **制作生成**:使用 poster 插件生成海报
43
- 5. **预览确认**:导出预览图供用户确认
44
- 6. **修改优化**:根据反馈调整设计
36
+ **重要**:每添加一个元素后,建议导出预览确认效果,再继续下一步。
45
37
 
46
38
  ## 常用尺寸
47
39
 
@@ -50,25 +42,11 @@ model: inherit
50
42
  - 方形海报:1:1
51
43
  - 手机壁纸:9:16
52
44
 
53
- ## 用户偏好(重要)
54
-
55
- 用户偏好**明亮清新**的风格:
56
- - 色彩:浅色系、亮色调、清新配色
57
- - 构图:简洁大方、留白充足
58
- - 氛围:阳光、活力、正能量
59
- - 避免:过于暗沉、狂野、复杂的设计
60
-
61
45
  ## 工具使用
62
46
 
63
- 使用 `ext_call` 调用 poster 插件:
64
- - `create_poster_canvas` - 创建画布
65
- - `add_poster_background` - 添加背景
66
- - `add_poster_text` - 添加文字
67
- - `add_poster_image` - 添加图片
68
- - `add_poster_qrcode` - 添加二维码
69
- - `compose_poster` / `generate_poster` - 生成海报
70
- - `export_poster_canvas` - 导出预览
71
-
72
- 使用 `ext_skill` 获取插件的接口列表和参数详情
47
+ 使用 `ext_skill({ plugin: 'poster' })` 获取 poster 插件的完整接口列表和参数详情。
73
48
 
74
- 图片比例默认使用 9:16(竖版),如需其他比例请询问用户。
49
+ 使用 `ext_call` 调用 poster 插件工具,格式:
50
+ ```javascript
51
+ ext_call({ plugin: 'poster', tool: '工具名', args: { 参数 } })
52
+ ```
@@ -3,22 +3,21 @@
3
3
  "messages": [
4
4
  {
5
5
  "role": "user",
6
- "content": "网络管理员访问https://foliko.com,然后根据内容帮我制作一张海报"
6
+ "content": "帮我制作一张测试海报"
7
7
  },
8
8
  {
9
9
  "role": "assistant",
10
10
  "content": [
11
11
  {
12
12
  "type": "text",
13
- "text": "<think>\n用户想要:\n1. 访问 https://foliko.com 获取内容\n2. 根据内容制作一张海报\n\n这是一个需要两个步骤的任务:\n1. 先使用 network-requester Agent 获取网页内容\n2. 然后使用 poster-designer 子 Agent 制作海报\n\n让我先调用 network-requester 来获取网页内容。\n</think>\n\n我来帮你完成这个任务。首先访问网页获取内容,然后制作海报。\n"
13
+ "text": "<think>\n用户想要制作一张测试海报。这是一个海报设计的任务,我应该先调用 poster-designer 子Agent 来处理这个任务,因为:\n\n1. 任务匹配\"海报设计\"相关领域\n2. poster-designer 是专门负责海报制作的子Agent\n3. 根据规则,我应该优先使用 subagent_call 工具委托给对应的子Agent\n\n但是,用户只是说\"帮我制作一张测试海报\",这个请求比较简单直接。不过根据规则,我应该先调用 ui-designer 获取设计风格、布局、配色等设计信息后才能开始制作海报。\n\n等等,让我重新看一下 poster-designer 的描述:\n\"poster-designer:海报设计执行专家。根据 UI 设计师的设计方案,负责使用 poster 插件将设计转化为实际海报。**重要**:本 Agent 不负责设计,只负责执行。**必须先调用 ui-designer 获取设计风格、布局、配色等设计信息后才能开始制作**。\"\n\n所以流程应该是:\n1. 先调用 ui-designer 获取设计方案\n2. 然后调用 poster-designer 执行制作\n\n让我先调用 ui-designer 来获取设计信息。\n</think>\n\n我来帮你制作测试海报。首先需要获取设计方案,然后执行制作。\n"
14
14
  },
15
15
  {
16
16
  "type": "tool-call",
17
- "toolCallId": "call_function_40kqvxqg4mj8_1",
18
- "toolName": "subagent_call",
17
+ "toolCallId": "call_function_i4gzy9wdm5p1_1",
18
+ "toolName": "ui-designer",
19
19
  "input": {
20
- "agentName": "network-requester",
21
- "task": "访问 https://foliko.com,获取页面的主要内容,包括标题、简介、功能介绍等关键信息。返回完整的内容摘要。"
20
+ "task": "请为一张\"测试海报\"提供设计方案,包括:\n1. 主题风格(科技感/简约/活泼等)\n2. 配色方案(主色、辅助色、强调色)\n3. 布局结构(标题位置、内容排版)\n4. 需要的视觉元素\n5. 整体尺寸建议"
22
21
  }
23
22
  }
24
23
  ]
@@ -28,11 +27,11 @@
28
27
  "content": [
29
28
  {
30
29
  "type": "tool-result",
31
- "toolCallId": "call_function_40kqvxqg4mj8_1",
32
- "toolName": "subagent_call",
30
+ "toolCallId": "call_function_i4gzy9wdm5p1_1",
31
+ "toolName": "ui-designer",
33
32
  "output": {
34
33
  "type": "text",
35
- "value": "{\"success\":true,\"agent\":\"network-requester\",\"result\":\"## Foliko 网站内容摘要\\n\\n### 基本信息\\n| 项目 | 内容 |\\n|------|------|\\n| **网站名称** | Foliko |\\n| **版本** | v2.0(全新 Ambient Agent) |\\n| **类型** | AI Agent 开发框架 |\\n| **编程语言** | 100% JavaScript |\\n| **开源协议** | MIT |\\n| **官网** | https://foliko.com |\\n\\n---\\n\\n### 项目简介\\nFoliko 是一个**纯 JavaScript 开发的简约插件化 Agent 框架**,支持多 AI、流式输出、子 Agent 系统,提供 40+ 内置插件,开箱即用。\\n\\n---\\n\\n### 核心统计数据\\n- 🔌 **40+** 内置插件\\n- 🤖 **5+** AI 提供商支持\\n- 💻 **100%** JavaScript\\n- 📜 MIT 开源协议\\n\\n---\\n\\n### 核心功能特性\\n\\n| 功能 | 描述 |\\n|------|------|\\n| **插件系统** | 可扩展的插件架构,40+ 内置插件覆盖工具、消息、数据处理等场景 |\\n| **多 AI 支持** | 无缝切换 Anthropic、DeepSeek、MiniMax 等多种 AI 提供商 |\\n| **流式输出** | 实时流式响应,完美适配交互式应用和聊天界面 |\\n| **子 Agent 系统** | 创建层级式 Agent 结构,主 Agent 可将任务委托给专业子 Agent |\\n| **Ambient Agent** | 持续后台运行的 Agent,支持目标管理、主动监控和定时任务 |\\n| **记忆系统** | 持久化对话历史,支持语义搜索,Agent 可跨会话记忆和召回信息 |\\n\\n---\\n\\n### 架构设计\\n\\n**三层上下文隔离:**\\n- **Request Context** - 请求级链路追踪、超时控制\\n- **Session Context** - 会话级消息、变量、元数据\\n- **Agent Context** - Agent 级工具、技能、系统提示\\n\\n**项目结构:**\\n```\\nsrc/\\n├── core/ # Framework、Agent、PluginManager、ToolRegistry\\n├── capabilities/ # SkillManager、WorkflowEngine\\n├── executors/ # MCPExecutor MCP 服务器集成\\n└── utils/ # EventEmitter、logger\\nplugins/ # 内置插件(40+ 插件)\\ncli/bin/ # CLI 入口\\nexamples/ # 示例代码\\n```\\n\\n---\\n\\n### 插件生态(40+ 插件)\\n\\n| 类别 | 插件示例 | 用途 |\\n|------|----------|------|\\n| **核心系统** | ai, session, storage, scheduler | AI对话、多会话管理、存储、定时任务 |\\n| **执行工具** | shell, python, mcp, file-system | Shell命令、Python执行、MCP集成、文件系统 |\\n| **即时通讯** | telegram, feishu, weixin, email | Telegram Bot、飞书、微信、邮件收发 |\\n| **智能代理** | subagent, ambient-agent, think, memory | 子Agent、后台运行、持续思考、记忆系统 |\\n| **服务扩展** | web, gate-trading, audit, rules | Web服务、加密货币交易、日志审计、规则引擎 |\\n| **高级功能** | coordinator, python-plugin-loader | 多Worker协作、Python插件加载 |\\n\\n---\\n\\n### 快速开始\\n\\n**安装:**\\n```bash\\nnpm install -g foliko\\n```\\n\\n**配置 AI(创建 .env 文件):**\\n```bash\\nFOLIKO_PROVIDER=minimax\\nMINIMAX_API_KEY=sk-your-api-key\\n```\\n\\n**启动对话:**\\n```bash\\nfoliko chat\\n```\\n\\n**编程使用:**\\n```javascript\\nconst { Framework } = require('foliko')\\nconst framework = new Framework()\\nframework.loadPlugin('ai')\\n\\nconst agent = framework.createAgent({\\n systemPrompt: '你是一个有帮助的助手'\\n})\\n\\nconst result = await agent.chat('你好')\\nconsole.log(result.message)\\n```\\n\\n---\\n\\n### 代码示例(19+ 示例)\\n- **基础** - basic.js(核心用法)\\n- **高级** - ambient-example.js(目标管理与持续运行)\\n- **集成** - test-telegram.js(Bot集成)、test-weixin-feishu.js(微信/飞书)\\n- **工作流** - workflow.js(多步骤编排)\\n- **技能** - skill-example.js(自定义技能)\\n- **MCP** - mcp-example.js(Model Context Protocol)\\n- **Web** - test-web-plugin.js(Web服务与Webhook)\\n\\n---\\n\\n### 总结\\n**Foliko** 是一个功能完整的开源 AI Agent 开发框架,适合从简单的聊天机器人到复杂的多 Agent 系统的各种应用场景,具有丰富的插件生态、灵活的多 AI 支持和强大的扩展能力。\"}"
34
+ "value": "{\"agent\":\"ui-designer\",\"result\":\"---\\n\\n## 🎨 测试海报设计方案\\n\\n### 1. 主题风格定位\\n\\n**推荐风格:深空科技风 (Tech-Cyberpunk Hybrid)**\\n\\n结合科技感与专业度,适合技术发布会、测试报告展示、产品宣传等场景。\\n\\n---\\n\\n### 2. 配色方案\\n\\n| 颜色角色 | 色值 | 用途 |\\n|---------|------|------|\\n| **主色** | `#2F81F7` Mona Blue | 交互元素、强调线 |\\n| **辅助色** | `#00F0FF` 电光青 | 科技线条、发光效果 |\\n| **强调色** | `#FF006E` 热粉红 | 重要数据、CTA按钮 |\\n| **成功色** | `#39FF14` 荧光绿 | 成功状态、进度指示 |\\n| **背景色** | `#0A0A14` 深空黑 | 主背景 |\\n| **表面色** | `#12121F` | 卡片/区块背景 |\\n| **边框色** | `#30363D` | 分隔线、轮廓 |\\n| **主文字** | `#FFFFFF` | 标题 |\\n| **次文字** | `#8B949E` | 说明文字 |\\n\\n---\\n\\n### 3. 布局结构\\n\\n```\\n┌─────────────────────────────────────────┐\\n│ ▸ 科技线条网格装饰背景 (渐变叠加) │\\n│ │\\n│ ╔═══════════════════════════════╗ │\\n│ ║ 🔬 TEST POSTER ║ │\\n│ ║ 主标题 (发光效果) ║ │\\n│ ╚═══════════════════════════════╝ │\\n│ │\\n│ 副标题 / Tagline │\\n│ │\\n│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │\\n│ │ 特性卡片 特性卡片 │ │ 特性卡片 │ │\\n│ │ 数据 │ │ 数据 │ │ 数据 │ │\\n│ └─────────┘ └─────────┘ └─────────┘ │\\n│ │\\n│ ┌─────────────────────────┐ │\\n│ │ [行动按钮 CTA] │ │\\n│ └─────────────────────────┘ │\\n│ │\\n│ ▸ 底部装饰线条 / 粒子效果 │\\n└─────────────────────────────────────────┘\\n```\\n\\n---\\n\\n### 4. 视觉元素清单\\n\\n| 元素类型 | 建议样式 | 位置 |\\n|---------|---------|------|\\n| 背景 | 深空黑 + 网格线 + 渐变叠加 | 全屏 |\\n| 几何装饰 | 斜切线条、脉冲圆环、发光粒子 | 四周角落 |\\n| 主标题 | 大号无衬线字体 + 外发光效果 | 视觉焦点区 |\\n| 副标题 | 渐变色或渐变描边 | 主标题下方 |\\n| 特性卡片 | 深色卡片 + 发光边框 + 图标 | 中部三列 |\\n| 数据展示 | 等宽字体 + 高亮色数值 | 卡片内 |\\n| CTA按钮 | 渐变填充 + 发光阴影 | 底部居中 |\\n| 底部装饰 | 科技线条/网格/代码片段 | 底部 |\\n\\n---\\n\\n### 5. 尺寸规格建议\\n\\n| 用途 | 尺寸规格 | 说明 |\\n|------|---------|------|\\n| **标准海报** | 1920 × 1080 px | 16:9 横版,最常用 |\\n| **社交媒体** | 1080 × 1080 px | 1:1 方形,Instagram |\\n| **故事版** | 1080 × 1920 px | 9:16 竖版,Story |\\n| **高清大屏** | 2560 × 1440 px | 2K分辨率 |\\n| **A4打印** | 2480 × 3508 px | 300dpi |\\n| **PPT封面** | 1920 × 1080 px | 16:9 横版 |\\n\\n---\\n\\n### 6. 设计规范速查\\n\\n```\\n字体:\\n - 标题:Inter Bold / Roboto / Source Han Sans\\n - 正文:Inter Regular\\n - 数据/代码:JetBrains Mono / Source Code Pro\\n\\n间距系统:\\n - 基准单位:8px\\n - 内边距:16px / 24px / 32px\\n - 组件间距:16px / 24px\\n\\n圆角:\\n - 按钮:6px\\n - 卡片:8px / 12px\\n - 小元素:3px / 4px\\n\\n发光效果:\\n - 弱:6px blur @ 30%\\n - 中:12px blur @ 40%\\n - 强:24px blur @ 50%\\n```\\n\\n---\\n\\n### 📦 交付物清单\\n\\n| 交付物 | 格式 | 说明 |\\n|--------|------|------|\\n| 海报设计稿 | Figma / Sketch / Adobe XD | 源文件含组件 |\\n| 导出切图 | PNG / SVG @ 1x, 2x, 3x | 适配各尺寸 |\\n| 设计标注 | PDF / Markdown | 间距/色值/字体规范 |\\n| 组件代码 | HTML + CSS / React组件 | 可直接复用 |\\n\\n---\\n\\n> 💡 **下一步**:需要我将这份设计方案转化为实际的海报图片吗?我可以将布局、配色、文字等元素渲染输出为 PNG 格式的海报文件。\",\"success\":true}"
36
35
  }
37
36
  }
38
37
  ]
@@ -42,15 +41,14 @@
42
41
  "content": [
43
42
  {
44
43
  "type": "text",
45
- "text": "<think>\n成功获取了 Foliko 网站的内容。现在我需要调用 poster-designer 子 Agent 来制作海报。根据获取到的内容,我可以制作一张展示 Foliko 项目特点的宣传海报。\n</think>\n\n已获取网站内容,现在为你制作海报。\n"
44
+ "text": "<think>\n好的,ui-designer 已经提供了详细的设计方案。现在我需要调用 poster-designer 来执行实际的海报制作。\n</think>\n\n设计方案已获取,现在执行海报制作:\n"
46
45
  },
47
46
  {
48
47
  "type": "tool-call",
49
- "toolCallId": "call_function_9lo3zwzf4hkt_1",
50
- "toolName": "subagent_call",
48
+ "toolCallId": "call_function_ewbai4jy1qep_1",
49
+ "toolName": "poster-designer",
51
50
  "input": {
52
- "agentName": "poster-designer",
53
- "task": "根据以下 Foliko 项目信息,制作一张项目宣传海报:\n\n**项目名称**: Foliko\n**副标题**: 纯 JavaScript 开发的简约插件化 Agent 框架\n**版本**: v2.0(全新 Ambient Agent)\n\n**核心亮点**:\n- 🔌 40+ 内置插件\n- 🤖 5+ AI 提供商支持\n- 💻 100% 纯 JavaScript\n- 📜 MIT 开源协议\n\n**主要功能**:\n- 插件系统 - 可扩展的插件架构\n- 多 AI 支持 - Anthropic、DeepSeek、MiniMax 等\n- 流式输出 - 实时流式响应\n- 子 Agent 系统 - 层级式 Agent 结构\n- Ambient Agent - 持续后台运行\n- 记忆系统 - 持久化对话历史\n\n**官网**: https://foliko.com\n\n**设计要求**:\n1. 科技感、现代感的设计风格\n2. 主色调使用蓝色/紫色渐变,体现 AI/科技感\n3. 突出展示\"40+ 插件\"、\"100% JS\"、\"Ambient Agent\"等核心卖点\n4. 包含官网地址\n5. 海报尺寸:800x1200(竖版)\n\n请创建并导出海报,然后返回海报的图片路径。"
51
+ "task": "请根据以下设计方案制作一张测试海报:\n\n## 设计规格\n- 尺寸:1920 × 1080 px (16:9 横版)\n- 风格:深空科技风 (Tech-Cyberpunk Hybrid)\n\n## 配色方案\n- 主色:#2F81F7 (Mona Blue)\n- 辅助色:#00F0FF (电光青)\n- 强调色:#FF006E (热粉红)\n- 背景色:#0A0A14 (深空黑)\n- 表面色:#12121F\n- 边框色:#30363D\n- 主文字:#FFFFFF\n- 次文字:#8B949E\n\n## 内容\n- 主标题:TEST POSTER\n- 副标题:探索无限可能 / Explore the Infinite\n- 三个特性卡片:\n 1. 快速响应 Fast Response (速度数据)\n 2. 高可靠性 High Reliability (百分比数据)\n 3. 智能分析 Smart Analysis (AI相关)\n\n## 布局要求\n- 深空黑背景 + 科技线条/网格装饰\n- 主标题居中,带发光效果\n- 副标题在主标题下方\n- 三个特性卡片横排\n- 底部 CTA 按钮或装饰线条\n- 四角有科技感几何装饰"
54
52
  }
55
53
  }
56
54
  ]
@@ -60,11 +58,11 @@
60
58
  "content": [
61
59
  {
62
60
  "type": "tool-result",
63
- "toolCallId": "call_function_9lo3zwzf4hkt_1",
64
- "toolName": "subagent_call",
61
+ "toolCallId": "call_function_ewbai4jy1qep_1",
62
+ "toolName": "poster-designer",
65
63
  "output": {
66
64
  "type": "text",
67
- "value": "{\"success\":true,\"agent\":\"poster-designer\",\"result\":\"✅ Foliko 项目宣传海报已成功创建!\\n\\n**海报文件路径:** `/tmp/foliko_poster.png`\\n\\n---\\n\\n### 📋 海报设计概览\\n\\n| 项目 | 内容 |\\n|------|------|\\n| **尺寸** | 800 x 1200 像素(竖版) |\\n| **风格** | 科技感、现代感 |\\n| **主色调** | 蓝紫渐变 (#667eea #764ba2) |\\n\\n### 🎨 设计亮点\\n\\n1. **渐变背景** - 深蓝色调配蓝紫渐变,营造 AI/科技氛围\\n2. **装饰光斑** - 半透明圆形光斑增强层次感和科技感\\n3. **主标题** - \\\"Foliko\\\" 使用渐变色艺术字,带发光阴影效果\\n4. **v2.0 徽章** - 醒目的版本标签,突出\\\"全新 Ambient Agent\\\"\\n5. **核心数据卡片** - 4 个统计卡片展示核心卖点:\\n - 🔌 40+ 内置插件\\n - 🤖 5+ AI 提供商\\n - 💻 100% JavaScript\\n - 📜 MIT 开源协议\\n6. **功能列表** - 5 个核心功能详细展示\\n7. **突出特性** - Ambient Agent 和记忆系统两个特性卡片\\n8. **底部 CTA** - 醒目的官网地址按钮\\n\\n您可以直接使用该海报进行项目宣传!\"}"
65
+ "value": "{\"agent\":\"poster-designer\",\"result\":\"---\\n\\n## ✅ 海报制作完成\\n\\n### 执行摘要\\n\\n| 项目 | 状态 |\\n|------|------|\\n| 画布创建 | 1920×1080 (16:9 横版) |\\n| 背景 | 深空黑渐变 (#0A0A14 → #12121F) |\\n| 科技线条 | 水平线 + 垂直线装饰 |\\n| 四角装饰 | 菱形几何 + 边框线条 |\\n| 主标题 | \\\"TEST POSTER\\\" 带渐变发光效果 |\\n| 副标题 | 中英双语 |\\n| 特性卡片 | 3个卡片横排 |\\n| CTA按钮 | ✅ 居中带阴影 |\\n| 底部装饰 | ✅ 分割线 + 版权信息 |\\n\\n### 配色应用\\n- **主色 #2F81F7** 主标题渐变、四角装饰、卡片边框\\n- **辅助色 #00F0FF** 副标题、三角装饰、卡片副标题\\n- **强调色 #FF006E** 底部分割线、第三张卡片边框\\n- **背景 #0A0A14** 主背景\\n- **表面色 #12121F** 卡片背景\\n- **主文字 #FFFFFF** → 标题\\n- **次文字 #8B949E** → 副标题、版权信息\\n\\n### 输出文件\\n```\\n📁 output/\\n├── test_poster_tech.png (135 KB)\\n└── test_poster_tech.svg (6.8 KB)\\n```\\n\\n### 布局说明\\n布局检测到部分元素重叠警告,但这主要是**背景层覆盖整个画布**导致的正常现象,以及**卡片组件内文字间距紧密**的设计效果。海报整体布局符合科技赛博朋克风格设计规范。\\n\\n---\\n\\n**请查看预览效果,如需调整请告诉我!** 🎨\",\"success\":true}"
68
66
  }
69
67
  }
70
68
  ]
@@ -74,15 +72,332 @@
74
72
  "content": [
75
73
  {
76
74
  "type": "text",
77
- "text": "<think>\n海报已经成功创建,保存在 `/tmp/foliko_poster.png`。让我展示给用户看。\n</think>\n\n海报制作完成!\n\n## 📢 Foliko 项目宣传海报\n\n| 项目 | 内容 |\n|------|------|\n| **文件路径** | `/tmp/foliko_poster.png` |\n| **尺寸** | 800 x 1200 像素(竖版) |\n| **风格** | 科技感、现代感 |\n\n### 🎨 设计亮点\n\n1. **渐变背景** - 深蓝色调配蓝紫渐变,营造 AI/科技氛围\n2. **主标题** - \"Foliko\" 使用渐变色艺术字,带发光阴影效果\n3. **v2.0 徽章** - 醒目的版本标签,突出\"全新 Ambient Agent\"\n4. **核心数据卡片** - 4 个统计卡片展示核心卖点:\n - 🔌 40+ 内置插件\n - 🤖 5+ AI 提供商\n - 💻 100% JavaScript\n - 📜 MIT 开源协议\n5. **功能列表** - 5 个核心功能详细展示\n6. **底部 CTA** - 醒目的官网地址按钮 https://foliko.com\n\n**海报文件已保存至:** `/tmp/foliko_poster.png`\n\n你可以直接使用该海报进行项目宣传!是否需要我展示海报预览或者对设计进行修改?"
75
+ "text": "<think>\n海报已经制作完成了!poster-designer 已经成功创建了海报文件。让我查看一下生成的文件。\n</think>\n\n测试海报制作完成!🎉\n\n**输出文件:**\n- `output/test_poster_tech.png` (135 KB)\n- `output/test_poster_tech.svg` (6.8 KB)\n\n**海报特点:**\n| 元素 | 描述 |\n|------|------|\n| 风格 | 深空科技风 (Tech-Cyberpunk) |\n| 尺寸 | 1920 × 1080 px (16:9) |\n| 背景 | 深空黑渐变 + 科技网格线 |\n| 主标题 | \"TEST POSTER\" 带渐变发光效果 |\n| 副标题 | 中英双语 \"探索无限可能 / Explore the Infinite\" |\n| 特性卡片 | 3张横排:快速响应、高可靠性、智能分析 |\n| 四角装饰 | 菱形几何线条 |\n| CTA按钮 | 居中带发光阴影 |\n\n如需调整内容、配色或其他元素,请告诉我!"
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "role": "user",
81
+ "content": "测试一下二维码"
82
+ },
83
+ {
84
+ "role": "assistant",
85
+ "content": [
86
+ {
87
+ "type": "text",
88
+ "text": "<think>\n用户想要测试一下二维码功能。我需要使用 poster 插件来创建二维码。让我先查看一下 poster 插件中二维码相关的工具。\n\n根据扩展插件列表,poster 插件有 `add_poster_qrcode` 工具可以用来添加二维码。让我先获取这个工具的详细参数。\n</think>\n\n\n"
89
+ },
90
+ {
91
+ "type": "tool-call",
92
+ "toolCallId": "call_function_4zvja7fxk8pw_1",
93
+ "toolName": "ext_skill",
94
+ "input": {
95
+ "plugin": "poster"
96
+ }
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "role": "tool",
102
+ "content": [
103
+ {
104
+ "type": "tool-result",
105
+ "toolCallId": "call_function_4zvja7fxk8pw_1",
106
+ "toolName": "ext_skill",
107
+ "output": {
108
+ "type": "text",
109
+ "value": "你可以通过 `ext_call` 工具调用以下扩展插件的功能。\n\n### 调用规则\n\n> **重要**:\n> 1. 调用前必须指定 `plugin`(插件名)和 `tool`(工具名)\n> 2. 参数通过 `args` 对象传入,参数名和类型见各工具说明,注意引号的问题,遵守JSON的格式\n> 3. 必填参数(Required)必须提供,可选参数(Optional)可省略\n\n---\n\n#### `create_poster_canvas`\n\n创建新画布,支持预设尺寸或自定义尺寸。每次调用创建独立的画布,支持多海报并行制作\n\n**参数:**\n \n- preset: 预设尺寸key\n - Optional\n - String\n- width: 自定义宽度\n - Optional\n - Number\n- height: 自定义高度\n - Optional\n - Number\n- background: 背景颜色或图片路径\n - Optional\n - Union\n - String\n |\n - image\n - String\n- asNew: 是否强制创建新画布(默认true)\n - Optional\n - Boolean\n\n \n#### `get_poster_canvas_info`\n\n获取当前画布信息\n\n**参数:**\n \n- id: 画布ID,不填则获取当前活跃画布\n - String\n\n \n#### `use_poster_canvas`\n\n切换到指定画布,使其成为当前活跃画布\n\n**参数:**\n \n- id: 画布ID\n - String\n\n \n#### `list_poster_canvases`\n\n列出所有已创建的画布\n\n**参数:**\n \n无\n \n#### `destroy_poster_canvas`\n\n销毁指定画布,释放内存\n\n**参数:**\n \n- id: 画布ID,不填则销毁当前活跃画布\n - Optional\n - String\n\n \n#### `clear_poster_canvas`\n\n清除画布上的所有元素\n\n**参数:**\n \n- id: 画布ID,不填则清除当前活跃画布\n - String\n\n \n#### `list_poster_presets`\n\n列出所有可用的海报/Banner预设尺寸\n\n**参数:**\n \n无\n \n#### `get_poster_layout`\n\n获取当前画布的布局信息,包括所有元素边界、位置、重叠检测等。\n使用工作流:\n1. 创建画布后,定期调用检查布局问题\n2. 返回的 issues 数组包含所有检测到的问题\n3. recommendations 包含修复建议\n\n返回数据结构:\n- bounds: 所有元素的边界信息 [{id, type, bounds: {x, y, width, height}}]\n- issues: 问题列表 [{type, elementId, message, suggestion}]\n- recommendations: 修复建议列表\n\n**参数:**\n \n- id: 画布ID,不填则获取当前活跃画布\n - String\n\n \n#### `check_poster_overlap`\n\n在添加新元素前,检测是否会与现有元素重叠。\n使用工作流:\n1. 计算新元素的位置和尺寸\n2. 调用此工具检测重叠\n3. 如果 hasOverlap=true,使用 get_poster_position 获取推荐位置\n4. 或调整位置/尺寸后重新检测\n\n参数说明:\n- x, y: 新元素左上角坐标\n- width, height: 新元素尺寸\n- margin: 元素间的最小间距(默认10px)\n\n**参数:**\n \n- x: 新元素X坐标\n - Number\n- y: 新元素Y坐标\n - Number\n- width: 新元素宽度\n - Number\n- height: 新元素高度\n - Number\n- margin: 检测边距,默认10\n - Optional\n - Number\n- id: 画布ID\n - String\n\n \n#### `get_poster_position`\n\n根据布局提示获取新元素的推荐位置,避免重叠。\n使用工作流:\n1. 确定新元素的尺寸\n2. 选择合适的布局提示 hint\n3. 使用返回的 position 作为元素的 x, y 坐标\n\n布局提示说明:\n- below: 在所有元素下方依次排列(默认)\n- center: 画布居中\n- top: 在顶部元素上方\n- right: 在最右边元素右侧\n- left: 在最左边元素左侧\n- grid: 自动网格布局\n- random: 安全区域内随机位置\n\n**参数:**\n \n- width: 元素宽度\n - Number\n- height: 元素高度\n - Number\n- hint: 布局提示\n - Optional\n - Enum: below, center, top, right, left, grid, random\n- margin: 边距,默认20\n - Optional\n - Number\n- id: 画布ID\n - String\n\n \n#### `sync_poster_layout`\n\n同步当前画布元素到布局管理器。\n使用工作流:\n1. 添加/删除/移动元素后调用\n2. 后续的 check_overlap 和 get_position 会使用最新布局\n3. 建议在批量添加元素后调用一次,而不是每添加一个元素就调用\n\n注意:目前布局管理器直接从画布读取元素,此工具主要用于保持兼容性。\n\n**参数:**\n \n- id: 画布ID\n - String\n\n \n#### `list_poster_fonts`\n\n列出所有已注册字体的列表(包括字体名称、路径、是否默认等)\n\n**参数:**\n \n- filter: 字体过滤类型\n - Optional\n - Enum: all, emoji, regular\n\n \n#### `add_poster_background`\n\n为画布添加纯色、渐变或图片背景\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- color: 纯色背景\n - Optional\n - String\n- gradient\n - Optional\n - type: 渐变类型\n - Enum: linear, radial\n - colors: 颜色数组\n - Array\n - String\n - direction: 方向角度,默认45\n - Optional\n - Number\n- image: 背景图片路径(本地路径或URL)\n - Optional\n - String\n\n \n#### `add_poster_rectangle`\n\n在画布上添加矩形\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Number\n- height: 高度\n - Number\n- fill: 填充颜色\n - Optional\n - String\n- stroke: 边框颜色\n - Optional\n - String\n- strokeWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n\n \n#### `add_poster_circle`\n\n在画布上添加圆形或椭圆\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- cx: 圆心X坐标\n - Number\n- cy: 圆心Y坐标\n - Number\n- rx: X轴半径\n - Number\n- ry: Y轴半径\n - Optional\n - Number\n- fill: 填充颜色\n - Optional\n - String\n- stroke: 边框颜色\n - Optional\n - String\n- strokeWidth: 边框宽度\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n\n \n#### `add_poster_line`\n\n在画布上添加线条\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x1: 起点X\n - Number\n- y1: 起点Y\n - Number\n- x2: 终点X\n - Number\n- y2: 终点Y\n - Number\n- stroke: 线条颜色\n - Optional\n - String\n- strokeWidth: 线条宽度\n - Optional\n - Number\n\n \n#### `add_poster_polygon`\n\n在画布上添加多边形\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- cx: 中心X坐标\n - Number\n- cy: 中心Y坐标\n - Number\n- radius: 外接圆半径\n - Number\n- sides: 边数\n - Number\n- fill: 填充颜色\n - Optional\n - String\n- stroke: 边框颜色\n - Optional\n - String\n- strokeWidth: 边框宽度\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n\n \n#### `add_poster_text`\n\n在画布上添加文字\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- text: 文字内容\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- fontSize: 字体大小,默认48\n - Optional\n - Number\n- fontFamily: 字体名称\n - Optional\n - String\n- color: 文字颜色\n - Optional\n - String\n- align: 对齐方式\n - Optional\n - Enum: left, center, right\n- shadow\n - Optional\n - color: 阴影颜色\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n\n \n#### `add_poster_art_text`\n\n添加艺术文字,支持渐变填充和描边\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- text: 文字内容\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- fontSize: 字体大小,默认120\n - Optional\n - Number\n- fontFamily: 字体名称\n - Optional\n - String\n- gradient\n - Optional\n - colors: 渐变颜色数组\n - Array\n - String\n - direction: 方向角度\n - Optional\n - Number\n- strokeColor: 描边颜色\n - Optional\n - String\n- strokeWidth: 描边宽度\n - Optional\n - Number\n- shadow\n - Optional\n - color: 阴影颜色\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n\n \n#### `add_poster_rich_text`\n\n添加富文本,支持旋转、描边、渐变、阴影等多种样式\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 文本区域宽度(用于自动换行)\n - Optional\n - Number\n- text: 文字内容\n - String\n- fontSize: 字体大小,默认48\n - Optional\n - Number\n- fontFamily: 字体名称\n - Optional\n - String\n- fontWeight: 字重 normal/bold 或 100-900\n - Optional\n - Union\n - String\n |\n - Number\n- fontStyle: 字体风格\n - Optional\n - Enum: normal, italic, oblique\n- bold: 粗体\n - Optional\n - Boolean\n- italic: 斜体\n - Optional\n - Boolean\n- underline: 下划线\n - Optional\n - Boolean\n- strikethrough: 删除线\n - Optional\n - Boolean\n- color: 文字颜色,默认#ffffff\n - Optional\n - String\n- backgroundColor: 文字背景色\n - Optional\n - String\n- gradient: 渐变填充\n - Optional\n - colors: 渐变颜色数组\n - Array\n - String\n - direction: 方向角度\n - Optional\n - Number\n- strokeColor: 描边颜色\n - Optional\n - String\n- strokeWidth: 描边宽度\n - Optional\n - Number\n- shadow\n - Optional\n - color: 阴影颜色\n - Optional\n - String\n - blur: 模糊度\n - Optional\n - Number\n - offsetX: X偏移\n - Optional\n - Number\n - offsetY: Y偏移\n - Optional\n - Number\n- letterSpacing: 字间距\n - Optional\n - Number\n- lineSpacing: 行间距增量\n - Optional\n - Number\n- lineHeight: 行高\n - Optional\n - Number\n- align: 对齐方式\n - Optional\n - Enum: left, center, right, justify\n- rotation: 旋转角度(度)\n - Optional\n - Number\n- scale: 缩放\n - Optional\n - Union\n - Number\n |\n - x\n - Optional\n - Number\n - y\n - Optional\n - Number\n- opacity: 透明度 0-1,默认1\n - Optional\n - Number\n\n \n#### `add_poster_image`\n\n在画布上添加图片\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- src: 图片路径或URL\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 图片宽度\n - Optional\n - Number\n- height: 图片高度\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n\n \n#### `add_poster_svg`\n\n在画布上添加 SVG(支持文件路径或 SVG 字符串)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- src: SVG 文件路径或 SVG 字符串\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Optional\n - Number\n- height: 高度\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n\n \n#### `export_poster_svg`\n\n导出画布为 SVG 格式\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- filename: 文件名(不含扩展名)\n - String\n- outputDir: 输出目录\n - Optional\n - String\n\n \n#### `export_poster_svg_base64`\n\n导出画布为 SVG Base64 编码\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n\n \n#### `add_poster_card`\n\n添加卡片组件(带背景、标题、副标题)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 卡片宽度\n - Number\n- height: 卡片高度\n - Number\n- background: 背景色\n - Optional\n - String\n- border: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- title: 标题文字\n - Optional\n - String\n- titleSize: 标题字体大小\n - Optional\n - Number\n- titleColor: 标题颜色\n - Optional\n - String\n- subtitle: 副标题\n - Optional\n - String\n- subtitleSize: 副标题字体大小\n - Optional\n - Number\n- subtitleColor: 副标题颜色\n - Optional\n - String\n- padding: 内边距\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_badge`\n\n添加徽章/标签组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标(居中)\n - Number\n- y: Y坐标\n - Number\n- text: 徽章文字\n - String\n- background: 背景色\n - Optional\n - String\n- color: 文字颜色\n - Optional\n - String\n- border: 边框颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- padding: 内边距\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_cta`\n\n添加行动号召按钮\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标(居中)\n - Number\n- y: Y坐标\n - Number\n- text: 按钮文字\n - String\n- background: 背景色\n - Optional\n - String\n- color: 文字颜色\n - Optional\n - String\n- border: 边框颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- padding: 内边距\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_feature`\n\n添加特性展示块\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Number\n- icon: 图标 emoji\n - Optional\n - String\n- title: 标题\n - Optional\n - String\n- description: 描述\n - Optional\n - String\n- iconColor: 图标颜色\n - Optional\n - String\n- titleColor: 标题颜色\n - Optional\n - String\n- descColor: 描述颜色\n - Optional\n - String\n- iconSize: 图标大小\n - Optional\n - Number\n- titleSize: 标题大小\n - Optional\n - Number\n- descSize: 描述大小\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_feature_grid`\n\n添加特性网格布局\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- columns: 列数,默认3\n - Optional\n - Number\n- itemWidth: 每个特性宽度,默认200\n - Optional\n - Number\n- itemHeight: 每个特性高度,默认120\n - Optional\n - Number\n- gap: 间距,默认20\n - Optional\n - Number\n- items: 特性数组\n - Array\n - icon\n - Optional\n - String\n - title\n - Optional\n - String\n - description\n - Optional\n - String\n - iconColor\n - Optional\n - String\n - titleColor\n - Optional\n - String\n - descColor\n - Optional\n - String\n- background: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- radius: 圆角半径\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_divider`\n\n添加分隔线\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Number\n- color: 颜色\n - Optional\n - String\n- thickness: 厚度\n - Optional\n - Number\n- style: 样式\n - Optional\n - Enum: solid, dashed\n- align: 对齐\n - Optional\n - Enum: left, center, right\n\n \n#### `add_poster_avatar`\n\n添加头像组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: 圆心X坐标\n - Number\n- y: 圆心Y坐标\n - Number\n- size: 头像大小\n - Optional\n - Number\n- initials: 首字母\n - Optional\n - String\n- background: 背景色\n - Optional\n - String\n- border: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- color: 文字颜色\n - Optional\n - String\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_progress`\n\n添加进度条组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 进度条宽度\n - Optional\n - Number\n- height: 进度条高度\n - Optional\n - Number\n- value: 进度值 0-100\n - Optional\n - Number\n- trackColor: 轨道颜色\n - Optional\n - String\n- fillColor: 填充颜色\n - Optional\n - String\n- radius: 圆角半径\n - Optional\n - Number\n- showLabel: 是否显示标签\n - Optional\n - Boolean\n- label: 标签文字\n - Optional\n - String\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_rating`\n\n添加星级评分组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- value: 评分值 0-5\n - Optional\n - Number\n- max: 最大值\n - Optional\n - Number\n- size: 星星大小\n - Optional\n - Number\n- filledColor: 填充颜色\n - Optional\n - String\n- emptyColor: 空心颜色\n - Optional\n - String\n- gap: 星星间距\n - Optional\n - Number\n\n \n#### `add_poster_quote`\n\n添加引用块组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Optional\n - Number\n- text: 引用文字\n - String\n- author: 作者\n - Optional\n - String\n- background: 背景色\n - Optional\n - String\n- borderColor: 左边框颜色\n - Optional\n - String\n- padding: 内边距\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- textColor: 文字颜色\n - Optional\n - String\n- authorColor: 作者颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_stat_card`\n\n添加统计卡片组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Optional\n - Number\n- height: 高度\n - Optional\n - Number\n- label: 标签\n - Optional\n - String\n- value: 数值\n - Optional\n - String\n- change: 变化值\n - Optional\n - String\n- positive: 变化是否为正\n - Optional\n - Boolean\n- icon: 图标\n - Optional\n - String\n- iconColor: 图标颜色\n - Optional\n - String\n- background: 背景色\n - Optional\n - String\n- border: 边框颜色\n - Optional\n - String\n- radius: 圆角半径\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_tag_cloud`\n\n添加标签云组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- tags: 标签数组\n - Array\n - text\n - String\n - color\n - Optional\n - String\n - bgColor\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- padding: 标签内边距\n - Optional\n - Number\n- gap: 标签间距\n - Optional\n - Number\n- maxWidth: 最大宽度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_stepper`\n\n添加步骤指示器组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 总宽度\n - Optional\n - Number\n- steps: 步骤数组\n - Array\n - title\n - String\n - description\n - Optional\n - String\n- currentStep: 当前步骤\n - Optional\n - Number\n- activeColor: 激活颜色\n - Optional\n - String\n- inactiveColor: 未激活颜色\n - Optional\n - String\n- completedColor: 已完成颜色\n - Optional\n - String\n- circleSize: 圆圈大小\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_timeline`\n\n添加时间线组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 总宽度\n - Optional\n - Number\n- items: 时间线项目数组\n - Array\n - date\n - Optional\n - String\n - title\n - String\n - description\n - Optional\n - String\n - active\n - Optional\n - Boolean\n- lineColor: 线条颜色\n - Optional\n - String\n- dotColor: 点颜色\n - Optional\n - String\n- dotSize: 点大小\n - Optional\n - Number\n- gap: 项目间距\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_list_item`\n\n添加列表项组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Optional\n - Number\n- icon: 图标\n - Optional\n - String\n- title: 标题\n - Optional\n - String\n- description: 描述\n - Optional\n - String\n- badge: 徽章文字\n - Optional\n - String\n- badgeColor: 徽章颜色\n - Optional\n - String\n- iconColor: 图标颜色\n - Optional\n - String\n- background: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- height: 高度\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_notification`\n\n添加通知提示组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Optional\n - Number\n- notifType: 类型\n - Optional\n - Enum: success, warning, error, info\n- title: 标题\n - Optional\n - String\n- message: 消息内容\n - Optional\n - String\n- showIcon: 是否显示图标\n - Optional\n - Boolean\n- radius: 圆角半径\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_image_frame`\n\n添加带装饰边框的图片框组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- src: 图片路径或URL\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 图片宽度\n - Number\n- height: 图片高度\n - Number\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- outerColor: 外边框颜色\n - Optional\n - String\n- outerWidth: 外边框宽度\n - Optional\n - Number\n- shadowBlur: 阴影模糊\n - Optional\n - Number\n- shadowOffsetX: 阴影X偏移\n - Optional\n - Number\n- shadowOffsetY: 阴影Y偏移\n - Optional\n - Number\n- shadowColor: 阴影颜色\n - Optional\n - String\n- radius: 圆角半径\n - Optional\n - Number\n- overlayColor: 叠加颜色\n - Optional\n - String\n- overlayOpacity: 叠加透明度\n - Optional\n - Number\n- fit: 图片填充方式\n - Optional\n - Enum: cover, contain, fill\n\n \n#### `add_poster_columns`\n\n添加分栏布局组件(左右分栏、三栏等)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: 起始X坐标\n - Number\n- y: 起始Y坐标\n - Number\n- width: 总宽度\n - Number\n- height: 总高度\n - Number\n- columns: 列数,默认2\n - Optional\n - Number\n- gap: 列间距,默认20\n - Optional\n - Number\n- background: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- direction: 排列方向\n - Optional\n - Enum: horizontal, vertical\n- align: 垂直对齐\n - Optional\n - Enum: top, center, bottom\n\n \n#### `add_poster_grid`\n\n添加网格布局组件(任意行列)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: 起始X坐标\n - Number\n- y: 起始Y坐标\n - Number\n- width: 总宽度\n - Number\n- height: 总高度\n - Number\n- columns: 列数,默认3\n - Optional\n - Number\n- rows: 行数,默认2\n - Optional\n - Number\n- gapX: 水平间距,默认20\n - Optional\n - Number\n- gapY: 垂直间距,默认20\n - Optional\n - Number\n- background: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角半径\n - Optional\n - Number\n- direction: 排列方向\n - Optional\n - Enum: row, column\n\n \n#### `add_poster_star`\n\n添加星形/多角形装饰\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- cx: 中心X坐标\n - Number\n- cy: 中心Y坐标\n - Number\n- points: 星形点数,默认5\n - Optional\n - Number\n- innerRadius: 内半径\n - Optional\n - Number\n- outerRadius: 外半径\n - Number\n- fill: 填充颜色\n - Optional\n - String\n- stroke: 边框颜色\n - Optional\n - String\n- strokeWidth: 边框宽度\n - Optional\n - Number\n- opacity: 透明度 0-1\n - Optional\n - Number\n- rotation: 旋转角度\n - Optional\n - Number\n\n \n#### `add_poster_arrow`\n\n添加箭头指示\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x1: 起点X\n - Number\n- y1: 起点Y\n - Number\n- x2: 终点X\n - Number\n- y2: 终点Y\n - Number\n- color: 箭头颜色\n - Optional\n - String\n- strokeWidth: 线宽\n - Optional\n - Number\n- headSize: 箭头头部大小\n - Optional\n - Number\n- style: 样式\n - Optional\n - Enum: solid, dashed\n- direction: 箭头方向\n - Optional\n - Enum: end, start, both\n\n \n#### `add_poster_progress_circle`\n\n添加环形进度条组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- cx: 圆心X坐标\n - Number\n- cy: 圆心Y坐标\n - Number\n- radius: 圆环半径\n - Number\n- value: 进度值 0-100\n - Number\n- strokeWidth: 环宽度\n - Optional\n - Number\n- trackColor: 轨道颜色\n - Optional\n - String\n- fillColor: 进度颜色\n - Optional\n - String\n- backgroundColor: 背景填充色\n - Optional\n - String\n- showLabel: 是否显示百分比标签\n - Optional\n - Boolean\n- labelColor: 标签颜色\n - Optional\n - String\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_chip`\n\n添加小型信息标签组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标(居中)\n - Number\n- y: Y坐标\n - Number\n- text: 标签文字\n - String\n- background: 背景色\n - Optional\n - String\n- color: 文字颜色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- padding: 内边距\n - Optional\n - Number\n- radius: 圆角\n - Optional\n - Number\n- icon: 前置图标 emoji\n - Optional\n - String\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_chart`\n\n添加图表组件(柱状图/饼图)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- chartType: 图表类型\n - Optional\n - Enum: bar, pie\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Number\n- height: 高度\n - Number\n- data: 数据\n - Array\n - label: 标签\n - String\n - value: 数值\n - Number\n - color: 颜色\n - Optional\n - String\n- barColor: 默认柱状颜色\n - Optional\n - String\n- showLabels: 显示标签\n - Optional\n - Boolean\n- showValues: 显示数值\n - Optional\n - Boolean\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_watermark`\n\n添加水印文字\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- text: 水印文字\n - String\n- cx: 中心X坐标\n - Number\n- cy: 中心Y坐标\n - Number\n- color: 水印颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n- opacity: 透明度\n - Optional\n - Number\n- rotation: 旋转角度\n - Optional\n - Number\n- align: 对齐方式\n - Optional\n - Enum: left, center, right\n\n \n#### `add_poster_table`\n\n添加表格组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 表格宽度\n - Number\n- columns: 列配置\n - Array\n - title: 列标题\n - String\n - width: 列宽\n - Optional\n - Number\n - align: 对齐\n - Optional\n - Enum: left, center, right\n- rows: 行数据\n - Array\n - Array\n - String\n- rowHeight: 行高\n - Optional\n - Number\n- headerBg: 表头背景色\n - Optional\n - String\n- headerColor: 表头文字色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- striped: 斑马纹\n - Optional\n - Boolean\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_button`\n\n添加按钮组件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度,默认200\n - Optional\n - Number\n- height: 高度,默认60\n - Optional\n - Number\n- text: 按钮文字\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- color: 文字颜色\n - Optional\n - String\n- backgroundColor: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角\n - Optional\n - Number\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- gradient\n - Optional\n - colors: 渐变颜色数组\n - Array\n - String\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_icon`\n\n添加图标(emoji或图片)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- size: 图标大小,默认64\n - Optional\n - Number\n- icon: 图标内容(emoji或图片URL)\n - String\n- color: 颜色\n - Optional\n - String\n- backgroundColor: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角\n - Optional\n - Number\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_qrcode`\n\n添加二维码\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- size: 二维码大小,默认200\n - Optional\n - Number\n- content: 二维码内容\n - String\n- color: 前景色\n - Optional\n - String\n- backgroundColor: 背景色\n - Optional\n - String\n- logo: 中间logo图片路径\n - Optional\n - String\n- logoSize: logo大小\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n\n \n#### `add_poster_frame`\n\n添加装饰边框\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度\n - Number\n- height: 高度\n - Number\n- style: 边框样式\n - Optional\n - Enum: simple, double, dashed, dotted, corner, vintage, modern, floral\n- color: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角\n - Optional\n - Number\n- padding: 内边距\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n\n \n#### `add_poster_bubble`\n\n添加对话气泡\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度,默认300\n - Optional\n - Number\n- height: 高度,默认100\n - Optional\n - Number\n- text: 气泡文字\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- color: 文字颜色\n - Optional\n - String\n- backgroundColor: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- radius: 圆角\n - Optional\n - Number\n- tailDirection: 尾巴方向\n - Optional\n - Enum: bottom, top, left, right\n- tailPosition: 尾巴位置\n - Optional\n - Enum: left, center, right\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_ribbon`\n\n添加丝带飘带\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度,默认300\n - Optional\n - Number\n- text: 丝带文字\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- color: 文字颜色\n - Optional\n - String\n- backgroundColor: 背景色\n - Optional\n - String\n- borderColor: 边框颜色\n - Optional\n - String\n- borderWidth: 边框宽度\n - Optional\n - Number\n- style: 丝带样式\n - Optional\n - Enum: fold, diagonal, corner\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_seal`\n\n添加印章效果\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- size: 印章大小,默认100\n - Optional\n - Number\n- text: 印章文字\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- color: 印章颜色\n - Optional\n - String\n- style: 印章形状\n - Optional\n - Enum: circle, square, star, hexagon\n- borderWidth: 边框宽度\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_highlight_text`\n\n添加高亮文字(荧光笔效果)\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- text: 文字内容\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- color: 文字颜色\n - Optional\n - String\n- highlightColor: 高亮颜色\n - Optional\n - String\n- highlightStyle: 高亮样式\n - Optional\n - Enum: marker, underline, background, stroke, neon\n- strokeWidth: 描边宽度\n - Optional\n - Number\n- shadow\n - Optional\n - color\n - Optional\n - String\n - blur\n - Optional\n - Number\n - offsetX\n - Optional\n - Number\n - offsetY\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `add_poster_barcode`\n\n添加条形码\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- x: X坐标\n - Number\n- y: Y坐标\n - Number\n- width: 宽度,默认300\n - Optional\n - Number\n- height: 高度,默认100\n - Optional\n - Number\n- content: 条形码内容\n - String\n- color: 条形码颜色\n - Optional\n - String\n- showText: 是否显示文字\n - Optional\n - Boolean\n- textColor: 文字颜色\n - Optional\n - String\n- fontSize: 字体大小\n - Optional\n - Number\n- opacity: 透明度\n - Optional\n - Number\n- fontFamily: 字体\n - Optional\n - String\n\n \n#### `compose_poster`\n\n使用组件配置一次性生成海报\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- components: 组件配置数组\n - Array\n - type: 组件类型\n - Enum: background, rectangle, circle, line, polygon, text, artText, richText, image, svg, imageFrame, columns, grid, star, arrow, progressCircle, chip, chart, watermark, table, card, badge, cta, feature, featureGrid, divider, avatar, progress, rating, quote, statCard, tagCloud, stepper, timeline, listItem, notification, button, icon, frame, bubble, ribbon, seal, highlightText\n\n \n#### `list_poster_components`\n\n列出所有可用的组件类型\n\n**参数:**\n \n无\n \n#### `export_poster_canvas`\n\n导出画布为图片文件\n\n**参数:**\n \n- id: 画布ID,不填则使用当前活跃画布\n - String\n- filename: 文件名(不含扩展名)\n - String\n- format: 格式,默认png\n - Optional\n - Enum: png, jpg\n- quality: JPEG质量\n - Optional\n - Number\n- outputDir: 输出目录\n - Optional\n - String\n\n \n"
110
+ }
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "role": "assistant",
116
+ "content": [
117
+ {
118
+ "type": "text",
119
+ "text": "<think>\n好的,我看到了 poster 插件的详细工具列表。其中 `add_poster_qrcode` 就是用来添加二维码的工具。我需要使用它来创建一个二维码测试海报。\n\n参数说明:\n- id: 画布ID\n- x: X坐标\n- y: Y坐标\n- size: 二维码大小,默认200\n- content: 二维码内容\n- color: 前景色\n- backgroundColor: 背景色\n- logo: 中间logo图片路径(可选)\n- logoSize: logo大小(可选)\n- opacity: 透明度(可选)\n\n让我创建一个简单的二维码测试海报。\n</think>\n\n\n"
120
+ },
121
+ {
122
+ "type": "tool-call",
123
+ "toolCallId": "call_function_copw2rbs54mb_1",
124
+ "toolName": "ext_call",
125
+ "input": {
126
+ "plugin": "poster",
127
+ "tool": "create_poster_canvas",
128
+ "args": {
129
+ "preset": "square",
130
+ "background": "#0A0A14"
131
+ }
132
+ }
133
+ }
134
+ ]
135
+ },
136
+ {
137
+ "role": "tool",
138
+ "content": [
139
+ {
140
+ "type": "tool-result",
141
+ "toolCallId": "call_function_copw2rbs54mb_1",
142
+ "toolName": "ext_call",
143
+ "output": {
144
+ "type": "text",
145
+ "value": "{\"success\":false,\"error\":\"Unknown preset: square. Available: poster_a4, poster_square, poster_16_9, poster_4_3, poster_9_16, banner_1920x500, banner_1200x400, banner_750x300, banner_468x60, banner_twitter, social_instagram, social_story, social_facebook, social_linkedin, social_youtube, promo_900x500, promo_500x500, promo_300x250, card_standard\"}"
146
+ }
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ "role": "assistant",
152
+ "content": [
153
+ {
154
+ "type": "text",
155
+ "text": "<think>\n好的,需要使用正确的预设名称。让我使用 \"poster_square\" 来创建一个正方形海报。\n</think>\n\n\n"
156
+ },
157
+ {
158
+ "type": "tool-call",
159
+ "toolCallId": "call_function_0fn1dr67lupo_1",
160
+ "toolName": "ext_call",
161
+ "input": {
162
+ "plugin": "poster",
163
+ "tool": "create_poster_canvas",
164
+ "args": {
165
+ "preset": "poster_square",
166
+ "background": "#0A0A14"
167
+ }
168
+ }
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "role": "tool",
174
+ "content": [
175
+ {
176
+ "type": "tool-result",
177
+ "toolCallId": "call_function_0fn1dr67lupo_1",
178
+ "toolName": "ext_call",
179
+ "output": {
180
+ "type": "text",
181
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"id\":\"canvas_1776522691086_ydigbwvqb\",\"width\":2000,\"height\":2000,\"preset\":\"poster_square\",\"background\":\"#0A0A14\"}}"
182
+ }
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "role": "assistant",
188
+ "content": [
189
+ {
190
+ "type": "text",
191
+ "text": "<think>\n好的,画布创建成功了,ID 是 \"canvas_1776522691086_ydigbwvqb\",尺寸是 2000x2000。现在我需要添加一个二维码和标题。让我添加一个二维码,内容可以是我的网站地址或者一个简单的文本。\n</think>\n\n\n"
192
+ },
193
+ {
194
+ "type": "tool-call",
195
+ "toolCallId": "call_function_rdrlfwwf5g9c_1",
196
+ "toolName": "ext_call",
197
+ "input": {
198
+ "plugin": "poster",
199
+ "tool": "add_poster_qrcode",
200
+ "args": {
201
+ "size": 400,
202
+ "backgroundColor": "#FFFFFF",
203
+ "content": "https://example.com",
204
+ "id": "canvas_1776522691086_ydigbwvqb",
205
+ "x": 800,
206
+ "y": 600,
207
+ "color": "#2F81F7"
208
+ }
209
+ }
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ "role": "tool",
215
+ "content": [
216
+ {
217
+ "type": "tool-result",
218
+ "toolCallId": "call_function_rdrlfwwf5g9c_1",
219
+ "toolName": "ext_call",
220
+ "output": {
221
+ "type": "text",
222
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"type\":\"qrcode\",\"items\":[43]}}"
223
+ }
224
+ }
225
+ ]
226
+ },
227
+ {
228
+ "role": "assistant",
229
+ "content": [
230
+ {
231
+ "type": "text",
232
+ "text": "<think>\n二维码添加成功了。现在让我添加一个标题和说明文字。\n</think>\n\n\n"
233
+ },
234
+ {
235
+ "type": "tool-call",
236
+ "toolCallId": "call_function_d45vxm4agw25_1",
237
+ "toolName": "ext_call",
238
+ "input": {
239
+ "plugin": "poster",
240
+ "tool": "add_poster_text",
241
+ "args": {
242
+ "align": "center",
243
+ "color": "#FFFFFF",
244
+ "fontSize": 72,
245
+ "id": "canvas_1776522691086_ydigbwvqb",
246
+ "text": "QR Code Test",
247
+ "x": 1000,
248
+ "y": 300
249
+ }
250
+ }
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "role": "tool",
256
+ "content": [
257
+ {
258
+ "type": "tool-result",
259
+ "toolCallId": "call_function_d45vxm4agw25_1",
260
+ "toolName": "ext_call",
261
+ "output": {
262
+ "type": "text",
263
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"id\":44,\"type\":\"text\",\"font\":\"Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif\"}}"
264
+ }
265
+ }
266
+ ]
267
+ },
268
+ {
269
+ "role": "assistant",
270
+ "content": [
271
+ {
272
+ "type": "text",
273
+ "text": "<think>\n好的,标题添加成功了。现在让我添加一个副标题和底部说明文字。\n</think>\n\n\n"
274
+ },
275
+ {
276
+ "type": "tool-call",
277
+ "toolCallId": "call_function_x2nreabqji6q_1",
278
+ "toolName": "ext_call",
279
+ "input": {
280
+ "plugin": "poster",
281
+ "tool": "add_poster_text",
282
+ "args": {
283
+ "align": "center",
284
+ "color": "#8B949E",
285
+ "fontSize": 36,
286
+ "id": "canvas_1776522691086_ydigbwvqb",
287
+ "text": "扫描二维码访问",
288
+ "x": 1000,
289
+ "y": 1100
290
+ }
291
+ }
292
+ }
293
+ ]
294
+ },
295
+ {
296
+ "role": "tool",
297
+ "content": [
298
+ {
299
+ "type": "tool-result",
300
+ "toolCallId": "call_function_x2nreabqji6q_1",
301
+ "toolName": "ext_call",
302
+ "output": {
303
+ "type": "text",
304
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"id\":45,\"type\":\"text\",\"font\":\"Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif\"}}"
305
+ }
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ "role": "assistant",
311
+ "content": [
312
+ {
313
+ "type": "text",
314
+ "text": "<think>\n好的,副标题也添加成功了。现在让我添加底部说明文字,然后导出海报。\n</think>\n\n\n"
315
+ },
316
+ {
317
+ "type": "tool-call",
318
+ "toolCallId": "call_function_mcureyotbzxh_1",
319
+ "toolName": "ext_call",
320
+ "input": {
321
+ "plugin": "poster",
322
+ "tool": "add_poster_text",
323
+ "args": {
324
+ "align": "center",
325
+ "color": "#8B949E",
326
+ "fontSize": 24,
327
+ "id": "canvas_1776522691086_ydigbwvqb",
328
+ "text": "https://example.com",
329
+ "x": 1000,
330
+ "y": 1800
331
+ }
332
+ }
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ "role": "tool",
338
+ "content": [
339
+ {
340
+ "type": "tool-result",
341
+ "toolCallId": "call_function_mcureyotbzxh_1",
342
+ "toolName": "ext_call",
343
+ "output": {
344
+ "type": "text",
345
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"id\":46,\"type\":\"text\",\"font\":\"Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif\"}}"
346
+ }
347
+ }
348
+ ]
349
+ },
350
+ {
351
+ "role": "assistant",
352
+ "content": [
353
+ {
354
+ "type": "text",
355
+ "text": "<think>\n好的,所有文字都添加成功了。现在让我导出海报为 PNG 图片。\n</think>\n\n\n"
356
+ },
357
+ {
358
+ "type": "tool-call",
359
+ "toolCallId": "call_function_l9wjlp6arxfv_1",
360
+ "toolName": "ext_call",
361
+ "input": {
362
+ "plugin": "poster",
363
+ "tool": "export_poster_canvas",
364
+ "args": {
365
+ "filename": "qrcode_test",
366
+ "format": "png",
367
+ "id": "canvas_1776522691086_ydigbwvqb"
368
+ }
369
+ }
370
+ }
371
+ ]
372
+ },
373
+ {
374
+ "role": "tool",
375
+ "content": [
376
+ {
377
+ "type": "tool-result",
378
+ "toolCallId": "call_function_l9wjlp6arxfv_1",
379
+ "toolName": "ext_call",
380
+ "output": {
381
+ "type": "text",
382
+ "value": "{\"success\":true,\"result\":{\"success\":true,\"filepath\":\"qrcode_test.png\",\"filename\":\"qrcode_test.png\",\"format\":\"png\",\"size\":45441}}"
383
+ }
384
+ }
385
+ ]
386
+ },
387
+ {
388
+ "role": "assistant",
389
+ "content": [
390
+ {
391
+ "type": "text",
392
+ "text": "<think>\n二维码测试海报已经生成成功了!让我总结一下结果。\n</think>\n\n二维码测试海报制作完成!✅\n\n**输出文件:**\n- `qrcode_test.png` (约 45 KB)\n\n**海报内容:**\n\n| 元素 | 内容 |\n|------|------|\n| 尺寸 | 2000 × 2000 px (1:1 正方形) |\n| 背景 | 深空黑 #0A0A14 |\n| 主标题 | \"QR Code Test\" (白色, 72px) |\n| 二维码 | 400×400px, 内容: https://example.com |\n| 副标题 | \"扫描二维码访问\" (灰色, 36px) |\n| 底部链接 | \"https://example.com\" (灰色, 24px) |\n| 二维码颜色 | Mona Blue #2F81F7 |\n| 二维码背景 | 白色 |\n\n你可以用微信或其他二维码扫描工具测试这个海报,看看是否能正确识别!📱"
78
393
  }
79
394
  ]
80
395
  }
81
396
  ],
82
397
  "variables": {},
83
398
  "metadata": {
84
- "createdAt": 1776521369357,
85
- "lastActive": 1776521369357,
399
+ "createdAt": 1776522329535,
400
+ "lastActive": 1776522329535,
86
401
  "messageCount": 0,
87
402
  "compressionCount": 0
88
403
  }
Binary file
@@ -0,0 +1 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0" viewBox="0,0,0,0"><defs><linearGradient x1="1738.8453" y1="-238.8453" x2="181.1547" y2="1318.8453" gradientUnits="userSpaceOnUse" id="color-1"><stop offset="0" stop-color="#0a0a14"></stop><stop offset="0.5" stop-color="#12121f"></stop><stop offset="1" stop-color="#0a0a14"></stop></linearGradient><linearGradient x1="579.05499" y1="242" x2="1340.94501" y2="242" gradientUnits="userSpaceOnUse" id="color-2"><stop offset="0" stop-color="#2f81f7"></stop><stop offset="1" stop-color="#00f0ff"></stop></linearGradient></defs><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="none" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,1080v-1080h1920v1080z" fill="url(#color-1)" stroke="none" stroke-width="1"></path><path d="M0,1080v-1080h1920v1080z" fill="#0a0a14" stroke="none" stroke-width="1"></path><path d="M0,200h1920" fill="none" stroke="#2f81f7" stroke-width="1"></path><path d="M0,880h1920" fill="none" stroke="#2f81f7" stroke-width="1"></path><path d="M400,0v1080" fill="none" stroke="#00f0ff" stroke-width="1"></path><path d="M1520,0v1080" fill="none" stroke="#00f0ff" stroke-width="1"></path><path d="M31.71573,88.28427l0,-56.56854l56.56854,0v56.56854z" fill="#2f81f7" stroke="none" stroke-width="1" opacity="0.8"></path><path d="M1831.71573,88.28427v-56.56854l56.56854,0v56.56854z" fill="#2f81f7" stroke="none" stroke-width="1" opacity="0.8"></path><path d="M31.71573,1048.28427l0,-56.56854h56.56854v56.56854z" fill="#00f0ff" stroke="none" stroke-width="1" opacity="0.8"></path><path d="M0,0h100" fill="none" stroke="#2f81f7" stroke-width="2"></path><path d="M0,0v100" fill="none" stroke="#2f81f7" stroke-width="2"></path><path d="M1820,0h100" fill="none" stroke="#2f81f7" stroke-width="2"></path><path d="M1920,0v100" fill="none" stroke="#2f81f7" stroke-width="2"></path><path d="M0,1080h100" fill="none" stroke="#00f0ff" stroke-width="2"></path><path d="M0,980v100" fill="none" stroke="#00f0ff" stroke-width="2"></path><path d="M1820,1080h100" fill="none" stroke="#00f0ff" stroke-width="2"></path><path d="M1920,980v100" fill="none" stroke="#00f0ff" stroke-width="2"></path><path d="M1831.71573,1048.28427v-56.56854h56.56854v56.56854z" fill="#00f0ff" stroke="none" stroke-width="1" opacity="0.8"></path><text x="960" y="350" fill="url(#color-2)" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif" font-weight="normal" font-size="120" text-anchor="middle">TEST POSTER</text><text x="960" y="480" fill="#8b949e" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif" font-weight="normal" font-size="32" text-anchor="middle">探索无限可能 / Explore the Infinite</text><path d="MNaN,NaNcNaN,NaN NaN,NaN NaN,NaNc0,NaN 0,NaN 0,NaNc0,NaN NaN,NaN NaN,NaNcNaN,0 NaN,0 NaN,0cNaN,0 NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNz" fill="#12121f" stroke="#2f81f7" stroke-width="2"></path><text x="300" y="628" fill="#ffffff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="28" text-anchor="start">⚡ 快速响应</text><text x="300" y="656" fill="#00f0ff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="18" text-anchor="start">响应速度 &lt; 50ms</text><path d="MNaN,NaNcNaN,NaN NaN,NaN NaN,NaNc0,NaN 0,NaN 0,NaNc0,NaN NaN,NaN NaN,NaNcNaN,0 NaN,0 NaN,0cNaN,0 NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNz" fill="#12121f" stroke="#00f0ff" stroke-width="2"></path><text x="780" y="628" fill="#ffffff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="28" text-anchor="start">🛡️ 高可靠性</text><text x="780" y="656" fill="#00f0ff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="18" text-anchor="start">系统稳定性 99.99%</text><path d="MNaN,NaNcNaN,NaN NaN,NaN NaN,NaNc0,NaN 0,NaN 0,NaNc0,NaN NaN,NaN NaN,NaNcNaN,0 NaN,0 NaN,0cNaN,0 NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNcNaN,NaN NaN,NaN NaN,NaNz" fill="#12121f" stroke="#ff006e" stroke-width="2"></path><text x="1260" y="628" fill="#ffffff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="28" text-anchor="start">🤖 智能分析</text><text x="1260" y="656" fill="#00f0ff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="18" text-anchor="start">AI 驱动的智能分析</text><path d="M200,850h1520" fill="none" stroke="#ff006e" stroke-width="3"></path><path d="M899,974c-16.56854,0 -30,-13.43146 -30,-30v-14c0,-16.56854 13.43146,-30 30,-30h122c16.56854,0 30,13.43146 30,30v14c0,16.56854 -13.43146,30 -30,30z" fill="#2f81f7" stroke="#00f0ff" stroke-width="1"></path><text x="960" y="945" fill="#ffffff" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, msyh, PatuaOne-Regular, seguiemj, seguisym, SegUIVar, wryh, Segoe UI Emoji, sans-serif" font-weight="normal" font-size="24" text-anchor="middle">🚀 开始探索</text><text x="960" y="1020" fill="#8b949e" stroke="none" stroke-width="1" font-family="Microsoft YaHei, SimHei, KaiTi, seguiemj, sans-serif" font-weight="normal" font-size="16" text-anchor="middle">© 2024 Tech Innovation</text><path d="M70,540c0,-44.18278 35.81722,-80 80,-80c44.18278,0 80,35.81722 80,80c0,44.18278 -35.81722,80 -80,80c-44.18278,0 -80,-35.81722 -80,-80z" fill="#2f81f7" stroke="none" stroke-width="1" opacity="0.3"></path><path d="M1690,540c0,-44.18278 35.81722,-80 80,-80c44.18278,0 80,35.81722 80,80c0,44.18278 -35.81722,80 -80,80c-44.18278,0 -80,-35.81722 -80,-80z" fill="#00f0ff" stroke="none" stroke-width="1" opacity="0.3"></path><path d="M200,230h1520" fill="none" stroke="#30363d" stroke-width="1"></path><path d="M200,530h1520" fill="none" stroke="#30363d" stroke-width="1"></path></g></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foliko",
3
- "version": "1.1.31",
3
+ "version": "1.1.32",
4
4
  "description": "简约的插件化 Agent 框架",
5
5
  "main": "src/index.js",
6
6
  "type": "commonjs",
Binary file
@@ -39,7 +39,7 @@ class Subagent extends EventEmitter {
39
39
  this.providerOptions = config.providerOptions || {};
40
40
  this.framework = config.framework || null;
41
41
 
42
- this.defaulTools = ['ext_call','ext_skill','subagent_call'];
42
+ this.defaulTools = ['ext_skill','ext_call','subagent_call','mcp_call','mcp_tool_schema'];
43
43
 
44
44
  this.bindTools = {
45
45
  read: 'read_file',
@@ -436,7 +436,7 @@ class Subagent extends EventEmitter {
436
436
  ...this.providerOptions,
437
437
  abortSignal: options.signal,
438
438
  });
439
- console.log('[子Agent] ' ,result.text)
439
+ // console.log('[子Agent] ' ,result.text)
440
440
  // ToolLoopAgent 会自动执行工具并收集结果,messages 已经被修改
441
441
  messages.push(...result.response.messages);
442
442
  const full_text = cleanResponse(result.text);