文档导航
文档 / TUI product contract

TUI product contract

opensquilla chat 是 OpenSquilla 的交互式终端客户端。Web UI 是用于配置、监控和 多 session 管理的控制平面;TUI 是用于在一个当前 session 中工作的一等客户端。两个 客户端都投影同一个由 Gateway 拥有的 session,而不是复制或拥有它。

Ownership

  • Gateway 拥有 sessions、turns、历史、队列、工具执行、用量和 approval 决策,以及 持久的 direct | router | ensemble model 策略。
  • TUI 和 Web UI 共享规范的消息和任务状态。草稿文本、cursor、滚动位置、主题以及 本地附件暂存则保持客户端本地。
  • 一个 turn 记录其来源 surface 和回复目标。一个 session 之前的 channel 绝不能决定 一个新的 TUI turn 被投递到哪里。
  • --standalone 是一个显式的隔离运行时。一次 Gateway 故障绝不会静默地将一个正常 聊天变成 standalone 模式。

UI selection

opensquilla chat --ui auto|tui|plain 仅选择呈现方式:

  • 省略 --ui 等同于 auto
  • auto 在存在一个已安装、兼容的 OpenTUI host 时使用它,并且只能在 alternate screen 启动之前回退到 plain。当前 release 不发布该 host。
  • tui 需要 OpenTUI,在其不可用时以一条诊断信息失败。
  • plain 是一个在相同运行时契约之上的极简终端救援 surface,而不是一个独立演进 的聊天产品。

一旦一个全屏 session 启动,renderer 崩溃会恢复终端并退出。它不会在一个 turn 中途 热切换 renderers。

Transcript and detail fidelity

TUI 呈现一条线性的 session transcript。Web UI 仍然是控制平面;响应式的 identity header 和宽 context rail 是由 Gateway 拥有的 context 的投影,而不是第二个本地 identity 或 session model。在 132 列或更宽时,rail 跨越整个终端高度;在该宽度以下, 同样的状态折叠为一条紧凑的 footer strip。

一个空的 session 可以在 transcript 中渲染一个响应式的产品 wordmark 和开始指引。 它绝不能出现在恢复的规范历史内部。提交时,transcript 必须在 provider 的首个 event 之前显示一条实时活动行;provider reasoning 会流入同一行。如果一个 provider 不暴露 任何 reasoning,客户端可以描述可观察的等待,但绝不能合成或暗示私有的思考内容。

传递给 TUI 的每一个 thinking、reasoning、tool-argument、tool-process、tool-result 和 tool-error delta 都会被保留。已完成的 process detail 默认可以被折叠以保持 transcript 的可读性,但折叠必须暴露一个隐藏行计数,并且必须能通过 Ctrl+O 撤销; 它绝不能被用作破坏性的截断。这一承诺适用于 TUI 协议边界,并不覆盖显式的上游 provider 或 Gateway 压缩契约。

一条真实的 Router decision 必须在宽布局和紧凑布局中都保持可见,并且必须在下一个 turn 边界被重置。一次已执行的 ensemble 必须有一个 turn 范围的实时进度块和一个持久 的完成收据。该收据可以包含公共的成员执行 metadata,但绝不能包含候选答案正文或私有 reasoning。客户端不得从一个已启用的配置标志推断 ensemble 已执行。

/router/ensemble 是 Gateway 控制命令,而不是聊天消息。它们的裸形式打开一个 共享的三态选择器;onoffstatus 提供直接的键盘控制。它们绝不会作为 prompt 回显、steer、排队或取消一个活动的 Turn。一次成功的写入会在 TUI 和 WebUI 之间广播,并且只影响下一个被接受的 Turn;当前 Turn 保留其准入时刻的策略 snapshot。 Standalone 模式对本契约而言是显式只读的。

streaming 一个 turn 不会锁定 composer。本地 UI 命令保持立即执行;被接受的后续会 根据共享的运行时契约被排队或 steer。显式的加载、附件、approval 以及终端安全状态仍 可能限制输入。

Development status and legacy policy

alternate-screen 的 OpenTUI 是预期的终端产品,但仍然是一个源码检出的开发 surface。 正式 release 尚不发布或安装其 companion host,因此已安装的用户继续使用 plain。 仅限 legacy 的入口点和实现被冻结,等待其专门的清理;它们不会获得新的产品功能或 对齐工作。plain 是在共享 Gateway 运行时之上的救援呈现,而不是第二份产品契约。

Deferred platform distribution

仓库包含一个自包含的 companion 包以及 macOS/Linux builders,以便在 rollout 之前 验证分发。它们没有接线到正式的 release 工作流或安装程序。一次未来的 rollout 必须 保持 core 和 host 处于同一版本,并在添加任何 release 资产之前通过原生平台 gates。 在 auto 下缺失或不兼容的 host 会触发仅启动时的 plain 回退;在严格的 --ui tui 下则是一个错误。

原生 Windows 仍然是其 host 制品、ConPTY 终端生命周期、进程树清理、签名、安装程序 以及原生终端证据的单独工作。它复用这些附加式的产品和 Gateway 契约,并且不得要求 macOS/Linux 特有的行为变更。

在 GitHub 上编辑此页(英文原稿) OpenSquilla 文档 · 中文社区翻译