Bridge 新增"边生成边显示"能力,利用 Telegram Bot API 9.5 的 sendMessageDraft 在私聊中以草稿形式流式展示 Claude 生成进度。 架构上抽象为通道级可选能力,便于后续扩展到其他 IM。 types.ts - 新增 PreviewCapabilities、StreamingPreviewState 接口 channel-adapter.ts - BaseChannelAdapter 新增三个可选方法: getPreviewCapabilities / sendPreview / endPreview - sendPreview 返回 'sent'|'skip'|'degrade' 三态, 区分瞬时失败(跳过)和永久失败(降级) telegram-utils.ts - 新增 sendMessageDraft() API 封装(plain text,截断到 4096) telegram-adapter.ts - 实现 getPreviewCapabilities: 开关检查 + 私聊/群聊检测 + 降级状态 - 实现 sendPreview: 调 sendMessageDraft,400/404 永久降级,429 仅跳过 - 实现 endPreview: 空操作 - stop() 清空 previewDegraded Set conversation-engine.ts - 新增 OnPartialText 回调类型 - processMessage / consumeStream 透传 onPartialText 参数 - 使用独立 previewText 变量(只累积、不因 tool_use 清零), 避免预览文本在工具调用后回退/抖动 bridge-manager.ts - 流式预览状态机:generateDraftId / getStreamConfig / flushPreview 节流闭包(间隔+最小增量+trailing-edge timer),finally 清理 - flushPreview 仅在 'degrade' 时降级,'skip'/网络错误不降级 - 新增 deliverResponse() 按 channelType 分发渲染: Telegram → markdownToTelegramChunks + deliverRendered 其他 IM → deliver() 纯文本(内部自动分块) 解除 handleMessage 对 Telegram 渲染的硬编码依赖 delivery-layer.ts - deliverRendered: chunk 失败后继续投递剩余 chunk(不中断), 追发截断提示通知用户,返回 ok:false 标识不完整投递 - deliver: 保持原有 fail-fast 行为(短消息无需跳过) route.ts (bridge/settings) - BRIDGE_SETTING_KEYS 白名单追加 5 个流式配置项 docs/handover/bridge-system.md - 更新目录结构、数据流、设计决策(#12 流式预览)、设置项表 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
86 lines
2.8 KiB
JSON
86 lines
2.8 KiB
JSON
{
|
|
"name": "codepilot",
|
|
"version": "0.24.0",
|
|
"private": true,
|
|
"author": {
|
|
"name": "op7418",
|
|
"email": "7418@openclaw.ai"
|
|
},
|
|
"description": "A native desktop GUI client for Claude Code",
|
|
"main": "dist-electron/main.js",
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"electron:dev": "concurrently -k \"next dev\" \"wait-on http://localhost:3000 && electron .\"",
|
|
"electron:build": "next build && node scripts/build-electron.mjs",
|
|
"electron:pack": "npm run electron:build && electron-builder --config electron-builder.yml",
|
|
"electron:pack:mac": "npm run electron:build && electron-builder --mac --config electron-builder.yml",
|
|
"electron:pack:win": "npm run electron:build && electron-builder --win --config electron-builder.yml",
|
|
"electron:pack:linux": "npm run electron:build && electron-builder --linux --config electron-builder.yml"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/anthropic": "^3.0.47",
|
|
"@ai-sdk/google": "^3.0.31",
|
|
"@ai-sdk/openai": "^3.0.34",
|
|
"@anthropic-ai/claude-agent-sdk": "^0.2.62",
|
|
"@google/genai": "^1.43.0",
|
|
"@hugeicons/core-free-icons": "^3.1.1",
|
|
"@hugeicons/react": "^1.1.4",
|
|
"@lobehub/icons": "^4.6.0",
|
|
"@radix-ui/react-use-controllable-state": "^1.2.2",
|
|
"@streamdown/cjk": "^1.0.1",
|
|
"@streamdown/code": "^1.0.1",
|
|
"@streamdown/math": "^1.0.1",
|
|
"@streamdown/mermaid": "^1.0.1",
|
|
"ai": "^6.0.73",
|
|
"ansi-to-react": "^6.2.6",
|
|
"better-sqlite3": "^12.6.2",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"electron-updater": "^6.8.3",
|
|
"lucide-react": "^0.563.0",
|
|
"markdown-it": "^14.1.1",
|
|
"motion": "^12.33.0",
|
|
"nanoid": "^5.1.6",
|
|
"next": "16.1.6",
|
|
"next-themes": "^0.4.6",
|
|
"radix-ui": "^1.4.3",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"react-markdown": "^10.1.0",
|
|
"react-syntax-highlighter": "^16.1.0",
|
|
"recharts": "^3.7.0",
|
|
"rehype-raw": "^7.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"shiki": "^3.22.0",
|
|
"streamdown": "^2.1.0",
|
|
"tailwind-merge": "^3.4.0",
|
|
"use-stick-to-bottom": "^1.1.2",
|
|
"uuid": "^13.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.58.1",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/markdown-it": "^14.1.2",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/uuid": "^10.0.0",
|
|
"concurrently": "^9.2.1",
|
|
"electron": "^40.2.1",
|
|
"electron-builder": "^26.7.0",
|
|
"esbuild": "^0.27.3",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.1.6",
|
|
"tailwindcss": "^4",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5",
|
|
"wait-on": "^9.0.3"
|
|
}
|
|
}
|