- media_store 模块: sha256 去重落盘 + 阿里云 OSS 双写(签名手写), OSS 失败降级本机引用 - 飞书图片入站: image 消息下载装配 vision 片, 3 次退避+120s 超时+残件清理防线 - 出站回传: 报告 [交付] 路径行自动上传飞书原生附件, 凭据/密钥名拦截兜底 - 溯源 V52: ai_messages.source 列, 飞书 msg_id/chat_id/发送者随消息落库 - spawn offload: 桌面粘贴图 base64 统一转落盘引用, SQLite 不进大字符串 - 引用统一 url 字段(https/file://)不自造 scheme, image_ref 发送前按需展开
119 lines
6.1 KiB
TOML
119 lines
6.1 KiB
TOML
[package]
|
|
name = "devflow"
|
|
version = "0.1.2"
|
|
description = "DevFlow Desktop App"
|
|
authors = [""]
|
|
edition = "2021"
|
|
|
|
[lib]
|
|
name = "devflow_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[dependencies]
|
|
# Phase3 桌面内嵌 HTTP MCP server + 托盘常驻:tray-icon feature 非默认,必须显式启用
|
|
tauri = { version = "2", features = ["protocol-asset", "tray-icon"] }
|
|
tauri-plugin-dialog = "2"
|
|
tauri-plugin-opener = "2"
|
|
tauri-plugin-window-state = "2"
|
|
# P1 bg 化补完:系统通知。AI 完成/失败/需介入三类事件,主窗隐藏到托盘时补位提醒,
|
|
# Rust 侧条件发送(notify.rs):主窗可见聚焦不发 + 同类 5 秒节流 + 失败静默
|
|
tauri-plugin-notification = "2"
|
|
# Phase3 单实例:二次启动唤起已有进程主窗口,防多实例抢 18765 端口
|
|
tauri-plugin-single-instance = "2"
|
|
# B2 应用内升级:L1 接入 tauri-plugin-updater(内建 ed25519 签名校验)
|
|
tauri-plugin-updater = "2"
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
tokio.workspace = true
|
|
dashmap.workspace = true
|
|
anyhow.workspace = true
|
|
tracing.workspace = true
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
tracing-appender = "0.2"
|
|
chrono.workspace = true
|
|
# augmentation::MentionResolver async trait(Input Augmentation 层核心设计2)
|
|
async-trait = { workspace = true }
|
|
# 本地工具代理统一网关(local_proxy_gateway):axum 监听 127.0.0.1:8899 路由到
|
|
# mysql/ssh/mongo/redis 4 代理端口。axum 0.7(df-mcp server_http 同款,workspace 已锁 0.7.9,
|
|
# 零新依赖树)。rust-work 改代理端口只改网关映射表,工具代码不感知端口。
|
|
axum = { version = "0.7" }
|
|
|
|
# 托盘菜单 i18n:系统 locale 判定(零传递依赖,判定一次缓存)
|
|
sys-locale = "0.3"
|
|
|
|
# 后端 crate
|
|
df-types = { path = "../crates/df-types" }
|
|
df-storage = { path = "../crates/df-storage" }
|
|
larksuite-oapi-sdk-rs = { version = "0.3.12", features = ["channel"] }
|
|
df-workflow = { path = "../crates/df-workflow" }
|
|
df-nodes = { path = "../crates/df-nodes" }
|
|
df-execute = { path = "../crates/df-execute" }
|
|
df-ai = { path = "../crates/df-ai" }
|
|
df-ideas = { path = "../crates/df-ideas" }
|
|
df-project = { path = "../crates/df-project" }
|
|
df-mcp = { path = "../crates/df-mcp" }
|
|
# Phase3 跨端隧道:桌面端主动出站连 df-relay(/ws/device),透传 ai_event_bus → miniapp
|
|
# + 转发 miniapp 下行指令 → remote_bridge 路由 Tauri command。穿 NAT 无需端口映射。
|
|
df-tunnel = { path = "../crates/df-tunnel" }
|
|
futures = "0.3"
|
|
# Phase3 tunnel device_id:首次启动生成 UUID v4 落 settings KV 持久化(relay 按 device_id 路由配对)
|
|
uuid = { workspace = true }
|
|
# write_file base64 编码:写二进制/非 UTF-8 文件(图片/PDF/Excel 等)
|
|
base64 = "0.22"
|
|
# validate_path URL 解码:防 %2e%2e 等 URL 编码绕过路径遍历检查(BUG-260617-03)
|
|
percent-encoding = "2"
|
|
# grep AI 工具:跨文件内容搜索(grep -rn 模式),pattern 支持正则。
|
|
# workspace regex 已存在(df-ideas 用),此处引用 workspace 版本避免双后端。
|
|
regex = { workspace = true }
|
|
# keyring:密钥解析下沉到 df-storage(workspace 统一声明平台 feature),
|
|
# src-tauri 经 workspace 引用(转发壳 build_provider_for 不直接碰 keyring,但旧路径/兼容保留)。
|
|
# 根因见 docs/09-问题排查/aichat-apikey-401排查-2026-06-15.md
|
|
keyring = { workspace = true }
|
|
# ask_uclaw AI 工具:u-claw 委托(tools/uclaw.rs)经 u-relay commander 协议 WS 直连。
|
|
# 版本对齐 df-tunnel 0.23(同依赖树零新增面);u-claw 协议为裸应用层帧,不走 df-tunnel
|
|
# TunnelMessage 包装,故不复用 WsTunnelClient,仅共享底层库。
|
|
tokio-tungstenite = { version = "0.23", features = ["native-tls"] }
|
|
futures-util = "0.3"
|
|
# http_request AI 工具:结构化 HTTP(GET/POST/...)。
|
|
# 复用 df-ai 同款 reqwest 0.12(同版本锁定,避免双 TLS 后端)。
|
|
# 使用 rustls-tls(非 native-tls),避免 Windows SChannel 同步阻塞 tokio 工作线程
|
|
# 致 BUG-2026-07-17(aichat 流式调用永久 hang,外层 tokio timeout 亦无法推进计时器)。
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "gzip", "brotli", "rustls-tls", "stream"] }
|
|
# media_store(#958 引用化):hash 去重文件名(sha2+hex)+ 阿里云 OSS PUT 上传签名(hmac+sha1)
|
|
sha2 = "0.10"
|
|
hex = "0.4"
|
|
hmac = "0.12"
|
|
sha1 = "0.10"
|
|
httpdate = "1"
|
|
# fetch_url AI 工具:URL → markdown 文档嗅探(GET HTML → htmd 转 markdown → 去噪音 + 截断)。
|
|
# 替代 http_request 拿原始 HTML(噪声大、爆 token)。turndown.js 移植,只读 GET,与 http_request 共享 SSRF 防护。
|
|
htmd = "0.5"
|
|
# AST 代码智能(read_symbol 三态,信息密度驱动,见 docs/02-架构设计/专项设计/AST符号解析-设计-2026-06-24.md):
|
|
# 治 aichat read_file 全文回灌 prompt 爆(e46f5605 360K/8dfe0b94 5M)。tree-sitter 语法层精准提取
|
|
# 符号骨架/下钻/全文,替代物理读全文件。静态编译 + 集中 grammar_for(ext) lookup(不动态加载/不抽 trait,YAGNI)。
|
|
# Phase1 范围:Rust(.rs)/TypeScript(.ts/.tsx)/JavaScript(.js/.jsx)/Vue(.vue 借 TS 切 script 段),3 grammar 覆盖 4 类。
|
|
# 兼容:tree-sitter 0.25 主 crate 与 grammar crate 配对(各 grammar 声明 tree-sitter 依赖,0.25 系广泛兼容)。
|
|
tree-sitter = "0.25"
|
|
tree-sitter-rust = "0.24.2"
|
|
tree-sitter-typescript = "0.23.2"
|
|
tree-sitter-javascript = "0.25.0"
|
|
# Phase1 扩展:Go / Java / Python(静态编译,表驱动加表项,零架构改动)
|
|
tree-sitter-go = "0.23"
|
|
tree-sitter-java = "0.23"
|
|
tree-sitter-python = "0.23"
|
|
|
|
# 阶段3a/3b 统一审批模型开关(path_auth 审批链扎实重构 plan 阶段3)。
|
|
# 3a 后端合并(单 HashMap + kind 字段)为编译期结构性变更,本 flag 用于文档标记 +
|
|
# 后续 3b 前端切换开关;3a 本身是单编译路径(合并是原子操作,回退走 git revert)。
|
|
#
|
|
# 阶段4 容错/恢复开关(path_auth 审批链扎实重构 plan 阶段4):
|
|
# retry_count 同 tc_id 重试断路(防 LLM 死循环重试同卡死工具)+ 跨盘预检提示 +
|
|
# rename_file/delete_file 跨卷统一降级 helper + ai_pending_tool_calls 返 kind。
|
|
# 兜底:flag 关 → retry_count 恒 0(等价单次审批执行),其余 helper 行为不变(纯增强)。
|
|
[features]
|
|
df-ai-unified-approval = []
|
|
df-ai-approval-retry = []
|