## Major Features ### Streaming Response System - Implement LlmDriver trait with `stream()` method returning async Stream - Add SSE parsing for Anthropic and OpenAI API streaming - Integrate Tauri event system for frontend streaming (`stream:chunk` events) - Add StreamChunk types: Delta, ToolStart, ToolEnd, Complete, Error ### MCP Protocol Implementation - Add MCP JSON-RPC 2.0 types (mcp_types.rs) - Implement stdio-based MCP transport (mcp_transport.rs) - Support tool discovery, execution, and resource operations ### Browser Hand Implementation - Complete browser automation with Playwright-style actions - Support Navigate, Click, Type, Scrape, Screenshot, Wait actions - Add educational Hands: Whiteboard, Slideshow, Speech, Quiz ### Security Enhancements - Implement command whitelist/blacklist for shell_exec tool - Add SSRF protection with private IP blocking - Create security.toml configuration file ## Test Improvements - Fix test import paths (security-utils, setup) - Fix vi.mock hoisting issues with vi.hoisted() - Update test expectations for validateUrl and sanitizeFilename - Add getUnsupportedLocalGatewayStatus mock ## Documentation Updates - Update architecture documentation - Improve configuration reference - Add quick-start guide updates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
120 lines
2.5 KiB
TOML
120 lines
2.5 KiB
TOML
# Slideshow Hand - 幻灯片控制能力包
|
||
#
|
||
# ZCLAW Hand 配置
|
||
# 提供幻灯片演示控制能力,支持翻页、聚焦、激光笔等
|
||
|
||
[hand]
|
||
name = "slideshow"
|
||
version = "1.0.0"
|
||
description = "幻灯片控制能力包 - 控制演示文稿的播放、导航和标注"
|
||
author = "ZCLAW Team"
|
||
|
||
type = "presentation"
|
||
requires_approval = false
|
||
timeout = 30
|
||
max_concurrent = 1
|
||
|
||
tags = ["slideshow", "presentation", "slides", "education", "teaching"]
|
||
|
||
[hand.config]
|
||
# 支持的幻灯片格式
|
||
supported_formats = ["pptx", "pdf", "html", "markdown"]
|
||
|
||
# 自动翻页间隔(秒),0 表示禁用
|
||
auto_advance_interval = 0
|
||
|
||
# 是否显示进度条
|
||
show_progress = true
|
||
|
||
# 是否显示页码
|
||
show_page_number = true
|
||
|
||
# 激光笔颜色
|
||
laser_color = "#ff0000"
|
||
|
||
# 聚焦框颜色
|
||
spotlight_color = "#ffcc00"
|
||
|
||
[hand.triggers]
|
||
manual = true
|
||
schedule = false
|
||
webhook = false
|
||
|
||
[[hand.triggers.events]]
|
||
type = "chat.intent"
|
||
pattern = "幻灯片|演示|翻页|下一页|上一页|slide|presentation|next|prev"
|
||
priority = 5
|
||
|
||
[hand.permissions]
|
||
requires = [
|
||
"slideshow.navigate",
|
||
"slideshow.annotate",
|
||
"slideshow.control"
|
||
]
|
||
|
||
roles = ["operator.read"]
|
||
|
||
[hand.rate_limit]
|
||
max_requests = 200
|
||
window_seconds = 3600
|
||
|
||
[hand.audit]
|
||
log_inputs = true
|
||
log_outputs = false
|
||
retention_days = 7
|
||
|
||
# 幻灯片动作定义
|
||
[[hand.actions]]
|
||
id = "next_slide"
|
||
name = "下一页"
|
||
description = "切换到下一张幻灯片"
|
||
params = {}
|
||
|
||
[[hand.actions]]
|
||
id = "prev_slide"
|
||
name = "上一页"
|
||
description = "切换到上一张幻灯片"
|
||
params = {}
|
||
|
||
[[hand.actions]]
|
||
id = "goto_slide"
|
||
name = "跳转到指定页"
|
||
description = "跳转到指定编号的幻灯片"
|
||
params = { slide_number = "number" }
|
||
|
||
[[hand.actions]]
|
||
id = "spotlight"
|
||
name = "聚焦元素"
|
||
description = "用高亮框聚焦指定元素"
|
||
params = { element_id = "string", duration = "number?" }
|
||
|
||
[[hand.actions]]
|
||
id = "laser"
|
||
name = "激光笔"
|
||
description = "在幻灯片上显示激光笔指示"
|
||
params = { x = "number", y = "number", duration = "number?" }
|
||
|
||
[[hand.actions]]
|
||
id = "highlight"
|
||
name = "高亮区域"
|
||
description = "高亮显示幻灯片上的区域"
|
||
params = { x = "number", y = "number", width = "number", height = "number", color = "string?" }
|
||
|
||
[[hand.actions]]
|
||
id = "play_animation"
|
||
name = "播放动画"
|
||
description = "触发幻灯片上的动画效果"
|
||
params = { animation_id = "string" }
|
||
|
||
[[hand.actions]]
|
||
id = "pause"
|
||
name = "暂停"
|
||
description = "暂停自动播放"
|
||
params = {}
|
||
|
||
[[hand.actions]]
|
||
id = "resume"
|
||
name = "继续"
|
||
description = "继续自动播放"
|
||
params = {}
|