架构
数据流总览
[浏览器] 选择器 overlay → SelectionContext(provider/surface/doc/target/snapshot)
→ [Gateway] /selection /edit → CLI 代理(白名单, shell:false) / 可选 qodercli
→ dws | lark-cli | ntn → 官方 OpenAPI → 改文档 / 多维表 → 结果回流高亮浏览器只产出「改哪里」,Gateway 负责「怎么改」,官方 CLI 负责「真的改」。
组件职责
Chrome 扩展(packages/chrome-extension)
- Content Script:注入选择器 overlay,处理 hover / 点击 / ESC,抽取
SelectionContext;不含业务逻辑。 - Background(Service Worker):连接本地 Gateway,转发选区与编辑请求,回传 SSE 流。
- Side Panel(侧边栏 UI):Setup 向导、选区卡片、指令输入、Direct/Agent 切换、结果与 CLI 输出流式回显。
Gateway(packages/gateway)
- Selection Store:暂存当前选区上下文。
- CLI Proxy / Runner:以白名单二进制、
shell:false调用官方 CLI;输出经 SSE 回流。 - Provider Registry:登记每个 provider(钉钉 / 飞书 / Notion)的命令模板与能力。
- Setup Bootstrap:检测 / 安装 CLI、安装 skill、驱动 OAuth 登录。
- Process Manager(可选):管理本地
qodercli(Agent 模式)。
官方 CLI
| 产品 | CLI | 文字 | 多维表 | 登录 |
|---|---|---|---|---|
| 钉钉 | dws | doc block | aitable record | dws auth login |
| 飞书 | lark-cli | docs | base | lark-cli auth login |
| Notion | ntn | blocks / api | database | ntn login |
SelectionContext 数据模型
拾取选区时,Content Script 产出一份结构化上下文,Gateway 据此拼装 CLI 命令:
| 字段 | 说明 |
|---|---|
provider | dingtalk / feishu / notion |
surface | text(文字)或 table(多维表) |
doc | 文档标识(kind + id) |
target | 定位信息:locator(id 精确 / content 内容回退)、blockId / recordId / fieldId |
snapshot | 选中内容摘要,用于确认与内容回退定位 |
locator: 'content'表示按内容匹配定位,可能不精确,UI 会给出提示。
Provider 适配器
每个 provider 实现统一的 ProviderAdapter 接口:如何识别页面、如何从 DOM 抽取 SelectionContext、以及对应的 CLI 命令模板。新增一个平台 = 新增一个适配器 + provider-registry 条目,主链路不变。
更细的接口契约见 Gateway API 与 CLI 参考。