Files
DevFlow/docs/02-架构设计/专项设计/插件机制-设计-2026-06-24.md
绝尘 40a97a7655 文档: 插件机制设计(grammar静态/集成切入点/通用远期)
复杂度=架构成本框架评估可扩展性(持续+复利负债)。
决策: grammar 静态编译+集中 lookup(当前,红利未兑现不承担动态加载成本)/
外部 API 集成(云效禅道)是插件正确切入点(窄契约窄插件,真实高价值)/
通用插件系统(VSCode式)远期(无生态=过早=负债)。
渐进路径: 静态grammar→云效集成直接实现→抽 IntegrationProvider trait→禅道印证抽象→插件化。
单向同步起步(双向冲突是分布式级难题,远期)。
2026-06-24 02:50:01 +08:00

5.5 KiB
Raw Blame History

插件机制设计 — DevFlow 可扩展性

日期:2026-06-24 | 状态:方向定稿(grammar 静态 + 集成渐进,通用插件远期) 关联:AST 符号解析设计 / memory devflow-ast-code-intel-design / devflow-product-positioning / no-patch-groundwork

Context(为什么有这文档)

grammar 动态加载讨论 → 引出"插件机制"概念 → 评估通用插件系统 → 落到"外部 API 集成(云效/禅道)"真场景 → 用"架构成本"统一评估。本文档沉淀可扩展性决策:何时插件化、怎么渐进、什么是正确切入点。

一、动态加载 grammar(技术可行性)

tree-sitter grammar 是 C 解析器,可编译成共享库运行期加载:

  • grammar → .dll/.so/.dylib(tree-sitter CLI 或 cc 编译)
  • Rust libloading 运行期 dlopen + 查 tree_sitter_<lang> 符号 → Language
  • Helix / Neovim / Zed 行业先例

:跨平台分发(每平台 × 每 grammar 共享库)+ ABI 版本管理(grammar 编译时 tree-sitter 版本须匹配运行期,错则崩)+ 加载机制 ~100-200 行。复杂度中-高。

二、插件形态谱系(窄 → 通用)

形态 契约 能力 复杂度 例子
grammar 动态加载 单(一个函数) 单(源码→AST) Helix language
集成插件 单(IntegrationProvider 几操作) 中(API 调用+映射+同步) 云效/禅道
通用插件系统 多(extension points) 任意(命令/UI/规则...) 极高 VSCode 扩展

通用插件要:manifest / 生命周期 / 沙箱 / 权限 / 依赖图 / 市场 / API 稳定性。软件工程最难子系统之一。

三、复杂度 = 架构成本(评估框架)

复杂度不是抽象的"难",是架构投资决策。每个抽象/机制/插件点付架构成本,价值须覆盖:

成本 性质
抽象边界 间接层,理解/调试;抽象错束缚未来
契约维护 接口定义了就要养(兼容枷锁)
运行时状态 故障模式 ×N
耦合传播 改一处影响多少
演化阻力 架构固化后改方向成本(锁死)
认知 上手成本

持续 + 复利:每个未来改动都付。投资回报判断。统一 [no-patch-groundwork]/ [ai-improvement-principles]

四、三方案评估(grammar 视角)

方案 架构成本 价值 当前覆盖?
静态 + 集中 lookup 最低 覆盖
grammar 动态加载 中高(运行时状态+ABI+分发) 中(红利未兑现)
通用插件系统 极高(沙箱/契约/演化枷锁) 高(但无生态)

决策:静态 + 集中 lookup。grammar 获取集中到普通函数 grammar_for(ext),不抽 trait(YAGNI,无第二实现不抽象)。

五、外部 API 集成:插件正确切入点

通用插件当前不做,但集成是插件能力的正确起点——真实高价值场景 + 低复杂度形态。

需求:DevFlow 工作流枢纽,任务/缺陷/需求也在云效/禅道 → 数据孤岛 + 重复录入。打通 = 双向同步 + aichat 跨系统操作。

技术可行:云效(阿里云 OpenAPI)/ 禅道(ZenTao REST)都有 API。Rust reqwest 调用,难度低于 LSP/沙箱插件。

集成 vs 通用插件:集成是"窄插件"(单契约 IntegrationProvider,无沙箱——受控 API 调用非执行任意代码)。有扩展红利,无重框架复杂度。

架构成本(诚实):主要在同步语义(双向 DevFlow↔云效:冲突/时序/幂等/一致性,分布式级难题),非插件框架。其他:认证/凭证(中)、数据映射(中,每集成一套)、API 边界稳定性(中,外部依赖持续)。

价值:自用(省重复,aichat 跨系统)+ 分发(集成生态=差异化/粘性/护城河)。成本高但价值高,值得——同步是核心难点,单向起步。

六、渐进路径

1. 静态 grammar + 集中 lookup(现在,Phase1)
   Rust/TS/JS/Vue(借TS),3 grammar 覆盖 4 类
   不动态/不 trait

2. 首个集成:云效(近期,memory 已有 yunxiao 同向)
   直接代码实现,验证打通价值
   单向同步起步(避双向冲突复杂度)

3. 抽 IntegrationProvider trait(云效跑通后)
   标准接口:sync_tasks/list_bugs/create_requirement
   窄契约,低架构成本

4. 第二集成:禅道按接口实现(中期)
   印证抽象可复用

5. 插件化(远期,集成 3+)
   动态加载/分发;通用插件系统:产品有规模/生态后

每步独立有价值,不依赖后续。先具体后抽象,避免预先建空框架。

七、决策汇总

决策 理由
grammar 加载 静态 + 集中 lookup 架构成本最低,红利未兑现
grammar trait 不抽(YAGNI) 无第二实现不抽象
通用插件系统 远期(有生态后) 当前无生态,过早=负债
集成方向 定(云效/禅道,工作流打通) 真实高价值,窄插件正确起点
集成实现 渐进(云效→trait→禅道) 先具体后抽象
集成同步 单向起步 双向冲突分布式难题,远期

核心:插件愿景对(可扩展=产品长期价值),但时机/复杂度决定——从集成低复杂度高价值场景切入,静态 grammar 当前够,通用插件远期。不为假想需求建重框架。

关键文件(集成实施时)

  • grammar 集成:src-tauri/Cargo.toml 加 tree-sitter + grammar crate;新模块 code_intel.rsgrammar_for(ext) 集中 lookup
  • 集成(云效):新 crate df-integration 或 df-execute 内;IntegrationProvider trait;凭证存储复用 KV