133 lines
8.1 KiB
Markdown
133 lines
8.1 KiB
Markdown
# LineUp App 层架构与迁移记录
|
||
|
||
**版本:** 2.0(Runtime 基线)
|
||
**状态:** 当前实现边界与历史迁移记录
|
||
**日期:** 2026-08-04
|
||
**最终决策入口:** [LineUp App 最终设计方案](app_final_design.md)
|
||
|
||
## 1. 当前结论
|
||
|
||
LineUp 是运行在用户设备上的协作 Runtime,不是某个平台上的独立聊天客户端。可以把
|
||
Runtime 理解为本地协调中心:它负责连接、消息、存储和恢复;`chat` 是它首先加载的可信
|
||
内置功能。未来的语音、画板、游戏和应用中心也必须使用同一套 Runtime / SDK 边界,不能
|
||
各自再建立一条到 Agent 的通信链路。
|
||
|
||
当前唯一实现与验收基线:
|
||
|
||
```text
|
||
Tauri 2 Desktop Host + Web Reference Host
|
||
```
|
||
|
||
这两个 Host 是同一套 TypeScript Runtime 的两种外壳:Tauri Desktop Host 用于正式桌面
|
||
交付及受控系统能力;Web Reference Host 用于浏览器开发、Tailscale 联调和自动化测试。
|
||
它们不是两套产品,Web 版也不能替代桌面版的系统能力。独立 Android/Kotlin 客户端与
|
||
Wails Host 均不在当前或后续规划范围内;早期实验细节仅保留在 Git 历史,不构成架构或
|
||
验收依据。
|
||
|
||
## 2. App 层边界
|
||
|
||
```text
|
||
Remote Agent / AppServer
|
||
│ lineup.v1 wire protocol
|
||
▼
|
||
┌────────────────────────────────────────────────────────┐
|
||
│ LineUpRuntime │
|
||
│ Transport · sync loop · Store · Outbox · App Inbox │
|
||
│ instance state · scope 路由 · Tool · Capability │
|
||
└─────────────────────┬──────────────────────────────────┘
|
||
│ Runtime SDK
|
||
▼
|
||
┌────────────────────────────────────────────────────────┐
|
||
│ Core / Installed App │
|
||
│ chat · app-registry · voice · whiteboard │
|
||
└────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
| 层 | 必须负责 | 不得负责 |
|
||
|---|---|---|
|
||
| `LineUpRuntime` | 处理 AppServer/Agent 通信、会话、原始协议兼容、scope 筛选、Store、sync、outbox、App Inbox、Tool 路由、App 实例和前台焦点、权限、按 App 子会话隔离的 MiniApp 通用 session data 与恢复。 | 具体业务页面 DOM 或任意 MiniApp 的业务语义。 |
|
||
| Interaction Core App | 用户实际使用的主交互界面:当前是 Chat/IM,未来包含 Audio/Video 模式、标准交互原语和扩展结果投影。 | 直连 AppServer、维护 cursor、解析 Agent 原始包、调度其他 App 或直接写 Runtime Store。 |
|
||
| Runtime SDK | App 与 Runtime 之间唯一的受限接口:提供 snapshot、订阅、Agent 消息、Inbox ACK、Runtime Action、App 导航、生命周期请求及当前 App 子会话的通用、revision 控制 session data。 | 把 Transport、token、Host 特权 API、Conversation Store 或其他 App/子会话数据暴露给 App。 |
|
||
| Tauri/Web Host | 把 Runtime 放进桌面窗口或浏览器,并提供对应的 DOM/系统能力。 | 解释协议、决定 App 调度、绕过 Runtime 路由和策略。 |
|
||
| Surface | 在隔离执行域呈现已验证 Bundle,并经受限 bridge 上报事件。 | 访问 Host DOM、登录态、Tauri API、任意网络。 |
|
||
|
||
## 3. MVP-R1:Runtime 托管 Chat
|
||
|
||
当前 MVP 已完成并以 Tauri/Web 自动化回归验证以下八项条件:
|
||
|
||
| 条件 | 当前事实 |
|
||
|---|---|
|
||
| MVP-01 | `LineUpRuntime` 唯一创建并持有 Transport、`ConversationStore`、sync loop 与 outbox。 |
|
||
| MVP-02 | Runtime 从本地 `CoreAppRegistry` 解析默认 `chat`,`RuntimeAppHost` 负责挂载其 Shell;`main.ts` 不创建聊天页面。 |
|
||
| MVP-03 | Chat 只经 `ChatRuntimeSDK` 订阅 Agent 消息、状态和 Chat-safe Runtime 事件,并以 Action 发送文本、交互、结果与取消。 |
|
||
| MVP-04 | Runtime 向 Chat 投递前验证 `app_scope = chat` 与当前 `conversation_id`;非法/不匹配消息被拒绝。 |
|
||
| MVP-05 | Compatibility Adapter 在 Runtime 内将旧 `lineup.v1` 映射为内部 `RuntimeEnvelope`;远端无须同步重写。 |
|
||
| MVP-06 | 登录、同步、发送、本地回显、Markdown、Agent 状态、Tool/Task 与刷新恢复保持回归。 |
|
||
| MVP-07 | Store 持久化每个 App 的 Inbox;运行时重建后未 ACK 消息可恢复,`message_id` 去重。 |
|
||
| MVP-08 | `npm test -- --run` 通过 21 个文件 / 94 个测试;`npm run build` 通过。 |
|
||
|
||
源代码目录和依赖方向见 [Tauri/Web 源码导航](../../tauri/src/README.md)。
|
||
|
||
## 4. 当前源码归属
|
||
|
||
```text
|
||
lineup-app/tauri/src/
|
||
├── main.ts # 启动装配入口:连接 Tauri/Web Host、Runtime 与默认 App
|
||
├── core-apps/chat/ # 当前 Interaction App 的 IM 实现、Renderer、样式
|
||
└── runtime/
|
||
├── app-management/ # Registry、App Instance、焦点、生命周期、Host
|
||
├── communication/ # Transport Adapter
|
||
├── coordination/ # Runtime、Kernel、Envelope、Tool/Task/交互编排
|
||
├── persistence/ # Conversation Store、Outbox、App Inbox、instance state snapshot
|
||
├── protocol/ # lineup.v1 解码与 golden fixture
|
||
├── surfaces/ # Surface 生命周期、Bundle、隔离 Host
|
||
├── capabilities/ # Registry、执行、审计
|
||
├── artifacts/ # Artifact 元数据与缓存
|
||
└── inventory/ # Agent 可见 Inventory
|
||
```
|
||
|
||
依赖必须保持单向:
|
||
|
||
```text
|
||
core-apps/interaction(当前 chat) → runtime/app-management SDK → runtime/coordination
|
||
└→ communication / persistence / protocol
|
||
Host adapters → runtime/coordination
|
||
Surface → restricted bridge → Runtime Action / Capability Gateway
|
||
```
|
||
|
||
## 5. 历史迁移的保留价值
|
||
|
||
早期 M0~M4 工作建立了当前 Runtime 的可复用安全基础。它们是迁移记录,不是新的功能
|
||
排期或平行客户端路线:
|
||
|
||
| 历史阶段 | 保留成果 | 当前归属 |
|
||
|---|---|---|
|
||
| M0 | HTTP Transport、Conversation Store、协议解码、Markdown、基础回归 | `communication`、`persistence`、`protocol`、Chat Renderer |
|
||
| M1 | Tool Call、Task、可靠交互结果、受限执行摘要 | `coordination`、Chat SDK 投影 |
|
||
| M2 | 本地 Surface Registry、实例生命周期、隔离 iframe 与恢复 | `surfaces` |
|
||
| M3 | Capability Registry、用户确认、审计与受限 Host 执行 | `capabilities` |
|
||
| M4 | 签名 Manifest、Bundle 校验/缓存/回滚、golden fixture | `surfaces`、`protocol/golden` |
|
||
|
||
早期文档中的阶段性“尚未实现”或旧目录路径不得用来判断当前能力;需要审计细节时通过
|
||
Git 历史检索。
|
||
|
||
## 6. 后续阶段
|
||
|
||
```text
|
||
F2 持久化 App Registry、App Instance/Focus Manager、默认 App 切换
|
||
F3 Runtime Tool Router、动态 Inventory、可靠 App SDK Tool 闭环
|
||
F4 Interaction App 的 IM/Audio/Video 模式边界与第一个 Installed App
|
||
```
|
||
|
||
未来 App 必须复用 `app_scope + conversation_id`、Runtime SDK、Tool/Capability、Artifact、
|
||
Store、outbox 与恢复机制;禁止新建独立 Agent 通信通道。
|
||
|
||
## 7. 文档关系
|
||
|
||
| 文档 | 用途 |
|
||
|---|---|
|
||
| [app_final_design.md](app_final_design.md) | 当前产品、Runtime、App、SDK 与实施优先级的唯一汇总入口。 |
|
||
| [lineup-runtime-sdk-architecture.md](lineup-runtime-sdk-architecture.md) | Runtime / SDK 的详细接口与未来 App Manager 契约。 |
|
||
| [lineup-ui-surface-protocol.md](lineup-ui-surface-protocol.md) | Surface sandbox、bridge、Capability 和 Bundle 安全协议。 |
|
||
| 本文件 | 当前实现边界、源码归属与 M0~M4 的迁移价值。 |
|