Files
DevFlow/docs/02-架构设计/devflow云化架构-2026-10-21.html
T
lxy 070223baa5 文档: 设计文档入库与构建配套收尾
- 云化两设计文档入库(devflow-core 抽取三步收口/云化架构 html)
- 看板销账: T1-T4 逐件附验收
- D4 工具 schema 空 description 清理(渐进披露配套,~10KB/轮)
- 换装脚本验证修复: 安装后装机 exe 版本核对,防 NSIS 静默失败误报成功
- capabilities/锁文件随批
2026-10-26 01:36:55 +08:00

144 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DevFlow 云化架构 — 2026-10-21</title>
<style>
:root{
--bg:#0d1117; --bg2:#161b22; --border:#30363d; --text:#e6edf3; --muted:#8b949e;
--blue:#58a6ff; --green:#3fb950; --orange:#d29922; --red:#f85149; --purple:#bc8cff; --pink:#ff7b72;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:"JetBrains Mono","Cascadia Code",Consolas,"Microsoft YaHei",monospace;font-size:14px;line-height:1.7;padding:32px 16px}
.wrap{max-width:1080px;margin:0 auto}
h1{font-size:26px;margin-bottom:4px}
.meta{color:var(--muted);font-size:12px;margin-bottom:28px}
h2{font-size:18px;margin:34px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--border);color:var(--blue)}
h3{font-size:15px;margin:20px 0 10px;color:var(--purple)}
.card{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:18px 20px;margin:12px 0}
.tag{display:inline-block;padding:1px 9px;border-radius:20px;font-size:12px;margin-right:6px;border:1px solid}
.t-blue{color:var(--blue);border-color:var(--blue);background:rgba(88,166,255,.1)}
.t-green{color:var(--green);border-color:var(--green);background:rgba(63,185,80,.1)}
.t-orange{color:var(--orange);border-color:var(--orange);background:rgba(210,153,34,.1)}
.t-red{color:var(--red);border-color:var(--red);background:rgba(248,81,73,.1)}
.t-purple{color:var(--purple);border-color:var(--purple);background:rgba(188,140,255,.1)}
table{width:100%;border-collapse:collapse;margin:10px 0;font-size:13px}
th,td{border:1px solid var(--border);padding:8px 12px;text-align:left;vertical-align:top}
th{background:var(--bg2);color:var(--muted);font-weight:600}
pre{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:20px;overflow-x:auto;font-size:12.5px;line-height:1.55}
.ascii{color:var(--green)}
.ascii .cloud{color:var(--blue)}
ul{margin:8px 0 8px 22px}
li{margin:4px 0}
.warn{border-left:3px solid var(--orange);padding-left:14px;color:var(--orange);font-size:13px;margin:10px 0}
.ok{color:var(--green)} .no{color:var(--red)} .hl{color:var(--blue)}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px}
.phase{border-top:3px solid var(--border)}
.p1{border-top-color:var(--green)} .p2{border-top-color:var(--orange)} .p3{border-top-color:var(--purple)}
code{background:#21262d;padding:1px 6px;border-radius:4px;font-size:12.5px;color:var(--pink)}
</style>
</head>
<body>
<div class="wrap">
<h1>DevFlow 云化架构方案</h1>
<div class="meta">拍板日期 2026-10-21 · 阶段1 已在飞书实机闭环验证 · 状态源:任务 711e1390 / 6e13f49b</div>
<h2>一、核心决策(已拍板)</h2>
<div class="card">
<ul>
<li><span class="tag t-blue">决策1</span><b>中继不新建</b>:复用生产 <code>u-relay</code>(:9180,纯中继零改动),df-im-gateway 以 <span class="hl">WS Commander</span> 身份接入</li>
<li><span class="tag t-blue">决策2</span><b>df-im-gateway 走方案 A</b>:先落在 devflow workspace 当第 9 个 crate,四端全通后再拆独立仓(避免模块 vs 实际代码脱节坑)</li>
<li><span class="tag t-blue">决策3</span><b>云端零业务逻辑零落盘</b>:任务/AI对话/审批状态全留桌面端 SQLite;AI Provider key 不上云,本机直连</li>
<li><span class="tag t-blue">决策4</span><b>语言对齐 Rust</b>:复用 df-tunnel 类型与 systemd 原子切换发布模式(publish-u-relay 同款)</li>
</ul>
</div>
<h2>二、部署拓扑总览</h2>
<pre><span class="ascii"> 用户四端 ┌─────────────────── 云端(已有云主机复用,不新购)──────────────────┐
┌────────┐ │ │
│ 飞书 │──WS 长连接──┼──▶ ┌─────────────────────────────┐ │
│ 钉钉 │─Stream Mode─┼──▶ │ <span class="cloud">df-im-gateway</span> (Rust, 新增) │ │
│ 企微 │──WS 长连接──┼──▶ │ · 四端协议适配(验签/AES/卡片) │ │
│ Web │─HTTPS/WSS───┼──▶ │ · WS Commander 身份 │ │
└────────┘ │ │ · 审批转发 │ │
│ └────────────┬────────────────┘ │
│ │ df-tunnel 协议 │
<span class="cloud">u-relay :9180</span> ◀──────┼─────────────────┘ (纯中继:WS 长连接管理/路由/Commander 注册表) │
│ │
│ Nginx :443 (TLS 终结 + 反代, 后续挂 df-cloud-server 用) │
│ │
└────────┬──────────────────────────────┬──────────────────────────┘
│ 出站 WS(穿透 NAT) │ 出站 WS
▼ ▼
┌── 用户本机 ─────────────────────────────────────────────────┐
│ DevFlow 桌面端 (Tauri 2, 唯一执行引擎 + 状态源) │
│ · AI Provider 直连 (GLM/DeepSeek, key 本机) │
│ · SQLite (任务/对话/审批 全量状态) │
│ · 8-crate workspace (+未来第9 crate df-im-gateway) │
└─────────────────────────────────────────────────────────────┘</span></pre>
<h2>三、数据流</h2>
<table>
<tr><th>方向</th><th>路径</th><th>用途</th></tr>
<tr><td>下行指令</td><td>IM/Web → df-im-gateway → u-relay → 桌面端</td><td>发消息 / 审批 / 停止</td></tr>
<tr><td>上行事件</td><td>桌面端 → u-relay → df-im-gateway → 各端</td><td>流式回复 / 状态广播</td></tr>
</table>
<div class="warn">⚠ 桌面端全程<b>主动出站</b>,不开任何入站端口——NAT 友好,家里/公司网络都能用;云端被攻破也拿不到业务数据(无状态管道)。</div>
<h2>四、阶段路线</h2>
<div class="grid">
<div class="card phase p1">
<h3 style="margin-top:0">阶段1 · IM 远程接入 <span class="tag t-green">进行中·飞书实机</span></h3>
<ul>
<li>飞书单端 E2E 闭环(握手→事件→卡片流式→审批回调→流式回复)——<span class="ok">代码已全落地,实机验证中</span></li>
<li>df-im-gateway 作为 workspace 第 9 crate 承载</li>
<li>钉钉/企微/Web = <span class="no">后续扩展,不阻塞</span></li>
<li>唯一动 u-relay 的点:Commander 身份注册(配置级)</li>
</ul>
</div>
<div class="card phase p2">
<h3 style="margin-top:0">阶段2 · devflow-core 抽取 <span class="tag t-orange">设计启动</span></h3>
<ul>
<li>UI 无关 crate 界定为 devflow-core(工作流引擎/任务管理/存储层)</li>
<li>存储 trait 双实现:SQLite(本地)/ PostgreSQL(云端)</li>
<li>AI Provider 双模式:key 本机直连(个人版)/ 云端集中托管(团队版)</li>
<li>同主机 Nginx 后追加 df-cloud-server,管道层不动</li>
</ul>
</div>
<div class="card phase p3">
<h3 style="margin-top:0">阶段3 · 完整云端化 <span class="tag t-purple">预留</span></h3>
<ul>
<li>云端接管全部业务逻辑,桌面端降级薄客户端</li>
<li>多用户 / 多设备 / 团队协作(任务池/审批/知识库共享)</li>
<li>可选本地引擎保离线能力</li>
</ul>
</div>
</div>
<h2>五、组件清单与状态</h2>
<table>
<tr><th>组件</th><th>形态</th><th>部署位置</th><th>状态</th></tr>
<tr><td>u-relay :9180</td><td>Rust 二进制(已有)</td><td>云端主机,systemd 原子切换</td><td class="ok">✅ 复用零改动</td></tr>
<tr><td>df-im-gateway</td><td>Rust crate(新增,方案A先驻 workspace)</td><td>联调期本机 → 常驻期云端主机</td><td class="ok">✅ 飞书端已通,实机验证</td></tr>
<tr><td>Nginx :443</td><td>TLS 终结 + 反代(已有)</td><td>云端主机</td><td class="ok">✅ 复用</td></tr>
<tr><td>DevFlow 桌面端</td><td>Tauri 2 应用</td><td>用户本机</td><td class="ok">✅ 唯一状态源</td></tr>
<tr><td>df-cloud-server</td><td>Rust 服务(规划)</td><td>云端主机,Nginx 后</td><td>阶段2 拍板后立项</td></tr>
</table>
<h2>六、风险与关键点</h2>
<div class="card">
<ul>
<li><span class="tag t-red">风险1</span><b>飞书卡片版本</b>:审批按钮回调仅新版卡片 <code>card.action.trigger</code> 生效,旧版 card 帧被 SDK 直接丢弃——联调最大坑(已知已沉淀)</li>
<li><span class="tag t-red">风险2</span><b>假活自愈</b>:断流约 13 分钟由看门狗 notify_waiters 唤醒(45f0560f),云端常驻部署后需关注长连接巡检参数</li>
<li><span class="tag t-orange">注意1</span><b>双库分歧</b>:devflow.db vs devflow-dev.db 是刻意设计(cfg! 分支),云化时存储层抽象需保留该模式</li>
<li><span class="tag t-orange">注意2</span><b>钉钉/企微降级</b>:P3/P4 保持 todo,不阻塞阶段1 验收与阶段2 并行</li>
</ul>
</div>
<div class="meta" style="margin-top:36px;border-top:1px solid var(--border);padding-top:12px">DevFlow 云化架构 · 生成于 2026-10-21 · 依据知识库拍板记录 978a3cf0 · 相关任务 6e13f49b / 711e1390</div>
</div>
</body>
</html>