Files

312 lines
13 KiB
Markdown
Raw Permalink 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.
# LineUp App 后续迭代计划
**更新时间:** 2026-08-06
**计划状态:** 已确认,作为后续迭代拆分和排期依据
## 1. 计划结论
前三个阶段已经建立了 LineUp App 的基础:Runtime 托管 IM、Runtime 具备应用编排能力、MiniApp SDK v1
和两个内置 MiniApp 参考实现已经完成验证。
下一步不建设应用市场,也不马上扩展多 Agent、语音或视频。下一阶段先把已有的 Runtime、SDK 和 MiniApp
契约做成用户真正可以使用的“应用工作区”。
当前推荐路线:
```text
Runtime 工作区与应用闭环
→ 第一个真正可用的 MiniApp(番茄时钟)
→ 本地 App 管理与签名 Bundle
→ 再评估应用分发和市场
```
## 2. 已完成的基础
### 2.1 Runtime 托管 IM
`00.base` 已建立客户端基础闭环:
- Runtime 独占网络连接、同步循环、消息存储、outbox 和 App Inbox
- 登录、同步、本地回显、Markdown 和 Agent 状态保持稳定;
- 入站消息经过作用域校验、去重和恢复;
- Chat 只能通过 SDK 和 Runtime Action 工作。
### 2.2 Runtime 应用编排基础
Runtime 已具备应用实例、焦点和生命周期的核心模型:
- App Registry
- App Instance Manager
- App Focus Manager
- App Lifecycle Manager
- Tool Router 和 App Orchestrator
- App 子会话、前后台切换、关闭和恢复的契约。
### 2.3 MiniApp SDK v1 与参考实现
`03.sdk_and_coreapp` 已完成并通过自动化测试和浏览器验收:
- Interact 是唯一的 `system` MiniApp
- Task Dashboard 和 Whiteboard 都是普通 `bundled` MiniApp 的参考实现;
- MiniApp 通过 SDK 接收 Inbox、Tool、进度、结果、生命周期、Surface 和 Capability 请求;
- 标准 `notice / choice / confirm / input` 属于 Interact 的人与 Agent 交互,不是 MiniApp 内部表单;
- App 子会话、交互归属、关闭收口、继续处理和重启恢复已有明确规则;
- 当前单 Agent MVP 边界保持不变。
需要注意:当前完成主要证明了 Runtime 契约和参考实现正确,用户可见的完整应用工作区仍需下一阶段收敛。
## 3. 第四次迭代:Runtime 工作区与应用闭环
**设计状态:** 已冻结,待实施;冻结基线为
[04.runtime_workspace.md](04.runtime_workspace/04.runtime_workspace.md) 及其
[03.design_review.md](04.runtime_workspace/03.design_review.md)。
建议迭代目录:
```text
迭代/04.runtime_workspace/
```
### 3.1 目标
把 Runtime 的生命周期和会话模型接到真实 Web/Tauri 界面,跑通一条完整的用户流程:
```text
进入 Interact IM
→ Agent 请求启动 Pomodoro 番茄时钟
→ Runtime 创建 App instance、App 子会话和 deadline operation
→ 番茄时钟进入前台,Interact 进入后台
→ 用户进行写作业、看书或冥想等固定时长专注;自动暗屏/锁屏不终止本轮
→ 到时间完成,或用户主动离开 Pomodoro 工作区而中断
→ Runtime 回传唯一结果并关闭 App
→ 子会话结束并在 IM 中折叠保存
→ Interact 恢复
→ 用户查看历史或继续开始下一轮
```
### 3.2 主要工作
1. **接通 App 工作区界面**
- 显示当前前台 App
- 支持由 `pomodoro.start` 从 Interact 进入 Pomodoro,以及用户明确返回 Interact
返回/切换会中断当前专注,不把 Pomodoro 作为通用后台计时器继续运行;
- 显示后台、挂起、关闭和恢复状态;
- App 启动失败时恢复 Interact
- 刷新或重启后恢复工作区。
Whiteboard 在第 04 次只保持第 03 次已有的 SDK/隔离回归,不接入本轮工作区切换或新的完整流程。
2. **接通 App 生命周期**
-`AppLifecycleManager``AppFocusManager``AppOrchestrator` 接入真实 Host
- 区分自动暗屏/锁屏、Surface 重载、工作区切换和真正关闭;前两者不终止专注,后两者中断专注;
- Runtime 使用持久化 `ends_at` 的 deadline operation,而不是 MiniApp UI 定时器;
- 关闭后停止新 Tool 投递;
- 用户退出专注时先将 `pomodoro.start` 终结为 `interrupted`;其他未终态普通 Tool 才收敛为
`cancelled(app_closed)`
- 已提交结果继续通过 outbox 发送;
- 关闭后恢复前一个有效前台 App。
3. **完成 App 子会话展示**
- 主 IM 显示 App 子会话折叠卡片;
- 支持展开已结束子会话;
- 已结束子会话只读;
- “继续处理”创建新 instance 和新子会话;
- 不把 App 内部按钮、表单和编辑动作写入 IM。
4. **完成 Interact 交互覆盖层**
- Interact 前台时,在 IM 中以内联卡片显示标准交互;
- bundled MiniApp 前台时,可以在其上方显示 Interact 的交互层;
- 展示位置变化不改变交互归属;
- App 关闭不自动取消未回答的标准交互;
- Agent 可以通过 `interaction.dismiss` 远程取消交互。
5. **让 Pomodoro 成为第一条完整用户流程**
- 用户在 IM 中以自然语言要求 Agent 开始或结束写作业、看书或冥想等专注;MiniApp 是 Agent 的业务工具,
而不是由用户自行操作业务状态的独立应用。未来 Voice 复用相同意图和 Tool 语义,但不属于本轮实现或验收;
- Agent 以 `pomodoro.start({ duration_seconds, activity? })` 创建长期 Tool operation,并以
`pomodoro.interrupt({})` 请求结束当前专注;
- 同一会话已有 `focusing` 专注时,不同调用的第二次 `pomodoro.start` 稳定拒绝为
`active_focusing_operation`,不创建新的 App、子会话或 deadline operation
- Runtime 创建 Pomodoro instance、App 子会话和 deadline operationPomodoro 直接进入专注界面;
- 到时间得到 `completed`Agent 调用 `pomodoro.interrupt`,或用户切回 Interact、切到其他 MiniApp、关闭
Pomodoro 时得到 `interrupted`;后者由 Runtime 的生命周期处理,不伪造 Agent Tool;不支持暂停、继续或恢复;
- 自动暗屏、锁屏与 Surface 重载不终止专注;刷新或重启后根据 `ends_at` 恢复或结算一次;
- 到时间后 Runtime 回传一次结果并立即关闭 Pomodoro,完成结果由 Interact / Agent 呈现;
- 完成记录和子会话可以在 Interact 中查看。
第一版只保留这些状态和数据:
```text
state = focusing | completed | interrupted
operation_id
source_tool_call_id
activity?
duration_seconds
started_at
ends_at
ended_at?
interruption_reason?
```
最小 Agent Tool
```text
pomodoro.start({ duration_seconds, activity? })
pomodoro.interrupt({})
```
Pomodoro 使用 `app.instance-state.v1` 保存严格 schema v1、最大 4 KiB 的展示快照;关闭后采用
`retain_readonly`,旧快照只用于历史展示,不能再次写入或恢复为运行中的专注。
番茄钟到点后不保留 App 内完成提醒:Runtime 关闭 Pomodoro 并恢复 Interact,由 Interact / Agent 呈现
完成结果。如果以后需要系统通知,再通过 Runtime 的 Capability 请求,不能让 MiniApp 直接调用 Tauri
或操作系统接口。Agent 询问用户是否开始下一轮时,仍然必须使用 Interact 的标准交互。
6. **补充端到端验收**
- Web Reference Host 完整验收;
- Tauri Desktop Host 至少完成一条代表性流程;
- 验证刷新、断线、重启、关闭、恢复和重复提交;
- 检查 Runtime 生命周期、交互、Tool 和恢复日志。
### 3.3 不在本迭代范围
- 应用市场和服务端 App Catalog
- 远程下载、第三方发布和在线更新;
- 多 Agent 连接、切换和多 Agent 会话列表;
- Audio Mode 的真实媒体能力;
- Video Mode 的真实媒体能力;
- Whiteboard 的工作区接入、切换、多人协作和复杂绘图能力;第 04 次只保持其已有回归;
- Task Dashboard 的完整项目管理功能;
- Pomodoro 的统计报表、多个计时器、日历和复杂提醒计划。
### 3.4 完成标准
```text
用户可以在 IM 中请求 Agent 立即开始或停止 Pomodoro 专注;未来 Voice 只复用相同 Tool 语义;
Runtime 可以正确创建、运行、中断、关闭和恢复 Pomodoro App
App 子会话能在 IM 中折叠、展开和继续处理;
标准交互在不同前台 App 下仍归 Interact
到点/中断竞争唯一终态,Tool 和 outbox 收口正确;
到点后立即关闭 Pomodoro 并由 Interact / Agent 呈现完成结果;
Pomodoro 关闭后的业务快照保留为只读历史,不能复活旧 instance;
刷新/重启后 App、焦点、子会话、`ends_at` 专注状态和待处理交互按规则恢复;
Web/Tauri 代表性流程通过端到端验收;
Whiteboard 保持第 03 次回归,但不属于第 04 次工作区闭环或完成范围;
所有 P0P3 评审问题清零。
```
## 4. 第五次迭代:第二个真正可用的隔离 MiniApp
建议迭代目录:
```text
迭代/05.first_isolated_miniapp/
```
第四次迭代完成工作区和 Pomodoro 后,再把另一个 MiniApp 从“参考实现”推进为“真实隔离运行的应用”。
### 4.1 推荐顺序
优先选择 Whiteboard 作为第二条安全和 Surface 验证流程;Task Dashboard 留到后续,避免任务管理业务影响 Runtime 核心设计。
### 4.2 Whiteboard 方向
- 受限 Surface 中的画布状态;
- 状态 patch
- Artifact 导出;
- Artifact 元数据校验;
- 重启恢复;
- 验证不能访问 Host DOM、Tauri、认证状态、任意网络和其他 MiniApp 数据。
暂时不做多人协作、云端同步和复杂绘图工具。
### 4.3 Task Dashboard 的后续定位
Task Dashboard 仍然保留为后续普通 `bundled` MiniApp,但不作为 Runtime 的第一条验证流程。
等工作区、SDK、生命周期和 Surface 边界稳定后,再单独定义任务、项目、状态和历史等业务模型。
## 5. 第六次迭代:本地 App 管理和签名 Bundle
建议迭代目录:
```text
迭代/06.local_app_management/
```
这一阶段仍然不建设在线应用市场,只解决本机的应用管理和安全运行边界:
- App Registry 管理界面;
- 本地安装记录;
- App enable / disable / remove
- 版本记录和回滚;
- 本地签名 Bundle
- Bundle 完整性和签名校验;
- 验证失败不污染当前可运行缓存;
- Inventory 更新和 Agent 可见性变化;
- App 删除时实例、焦点、Inbox、Surface 和私有数据的收口。
## 6. 第七次迭代之后:再评估应用分发和市场
只有在 Runtime 工作区、本地 App 管理、SDK、Surface 和签名 Bundle 都稳定之后,才评估:
- 服务端 App Catalog
- 应用搜索和详情;
- 下载和更新;
- 发布者身份;
- 第三方 MiniApp
- 审核、撤回和安全策略。
应用市场不是当前阶段的基础设施,而是建立在前面几层都稳定之后的分发能力。
## 7. 更后面的方向
### Runtime Core 的 Rust 演进
在 Runtime 工作区已跑通并积累 Web / Tauri 两个 Host 的性能数据后,单独评估是否将部分**无 UI 的 Runtime
Core** 下沉到 Rust,以改善状态处理和原子收口的效率与一致性。这不是第 04 次迭代的工作,也不等于把整个
MiniApp SDK 改写成 RustWeb Reference Host、sandbox iframe、postMessage Bridge、DOM 和 UI 仍须保持在
TypeScript / 浏览器侧。
潜在的 Rust 候选范围:
- instance state 的持久化、schema 校验和 revision 比较;
- deadline operation 调度;
- Tool / outbox 的原子终态裁决;
- lifecycle 收口和审计。
只有在 profiling 显示上述路径存在明确热点时,才建立独立设计与迁移迭代。评估必须同时测量状态快照读写、
deadline / Tool 吞吐、主线程阻塞、Tauri IPC 往返、JSON 序列化成本,以及 Web / Tauri Host 的实际差异;
并证明收益覆盖跨语言实现、测试、调试和错误边界所增加的复杂度。
### 多 Agent
在单 Agent 工作区稳定后再设计:
- Agent 列表和切换;
- 多 Agent 会话;
- 多 Agent outbox
- App 子会话归属;
- Inventory 和权限隔离。
### Audio Mode 与 Video Mode
语音和视频应复用当前 Runtime SDK、Tool、Capability、Artifact 和会话模型,不建立独立的 Agent
通信链路。它们需要单独处理媒体权限、设备选择、实时连接、中断和恢复,因此不进入当前两次迭代。
## 8. 当前排期原则
```text
先完成“真实可用的应用工作区”
再完成“一个真正隔离的 MiniApp”
再完成“本地安装和签名管理”
最后才评估“远程分发和应用市场”
```
任何新增功能都应先回答三个问题:
1. 它是否依赖 Runtime 已经稳定的生命周期和会话模型?
2. 它是否能通过现有 MiniApp SDK、Surface、Capability 和 Artifact 边界实现?
3. 它是否会把应用业务逻辑、网络通信或系统权限重新塞回 Interact 或 `main.ts`
如果前两个问题没有准备好,或者第三个问题答案为“会”,就不应提前进入应用市场或新的 App 类型建设。