Skip to content

feat(sdk): 三种 SDK 增加原生终端与 reopen API - #14

Merged
xiaoyumuxi merged 2 commits into
mainfrom
codex/plugin-terminal-api
Nov 2, 2026
Merged

xiaoyumuxi merged 2 commits into
mainfrom
codex/plugin-terminal-api

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

问题与结果

工具插件需要调用 Lithe 已有原生终端,减少 Docker 等交互客户端的手动 Shell 操作。本 PR 为 Node、Java、Rust 三个官方 SDK 同时增加 terminal.create/show/close/reopen/dispose/onExit 封装,并将插件契约完整同步到已合并的宿主 1lck/Lithe-IDEA#1653:f64d262c48f1ff5ad1778b301138596493a09ad5。

改动

  • 三个 SDK 均复用函数协议 3 的能力发现、显式 workspace context、取消、宿主错误和订阅通道,不增加协议版本。
  • Node 提供 host.terminal 包装、方法常量和 TypeScript 参数/返回/退出事件类型;Java 提供 Host.Terminal、六方法常量和 CompletableFuture/Subscription 封装;Rust 导出 Terminal 类型和创建/显示/关闭/重开/释放/退出订阅。
  • close 可设置 retainedContextBytes:默认 16 KiB,最高 256 KiB,0 不保留。reopen 以保存的 argv 启动新进程,只恢复显示文本,terminalID 不变、generation 递增,不重放输入或恢复旧 Shell 内存。dispose 释放句柄与历史。
  • 通过 node scripts/contract.mjs sync --revision f64d262c48f1ff5ad1778b301138596493a09ad5 --checkout <Lithe checkout> 生成契约副本和锁文件;77 个文件已逐字节比对上游,未手改 contract/v1。
  • 同步最终宿主的 show:false 不改变当前终端选择/不抢焦点,以及自然退出和用户关标签后先清理、只留有界快照、释放原生 session/render buffer 再通知的语义。
  • Rust 示例正式声明 terminal.create;终端跨进程场景纳入默认 node scripts/sdk-e2e.mjs,移除合并前 LITHE_PLUGIN_SDK_TERMINAL_E2E 临时开关和运行时修改示例清单的做法。
  • 新增接入指南及三个 SDK README,标明 SDK 封装尚未发版、旧宿主能力发现、macOS 本机范围、八句柄配额及上下文生命周期。

验证

本地已对最终合并宿主重新验证:

  • 同步/端到端工具测试 15 项通过;contract.mjs verify、verify --upstream、77 文件逐字节比对通过。
  • Node host 13 项及 TypeScript consumer 检查通过。
  • Java plugin-sdk 58 项通过;本机 Maven/JDK 运行,Java 8 真实 runtime 由 CI 验证。
  • Rust SDK 38 项及 doc test 通过,fmt/clippy --all-targets -D warnings 通过。
  • 默认 node scripts/sdk-e2e.mjs 针对新 pin 全部通过:三个 SDK 示例后端及原有 build/test/run/VCS 场景,加上 Rust 终端 create → onExit → close → reopen → dispose 的真实 Core 协议链路。
  • 修改测试稳定性扫描、diff --check 通过;本轮启动的示例后端无残留。

端到端场景在协议边界扮演宿主应答,不把响应数据冒充真实 PTY 验收;实际 PTY 输入、历史不重放及中文/emoji/0 字节截断在已合并宿主的原生测试验证。

范围

宿主 #1653 已合并,契约同步已完成。当前未修改 SDK 版本、打标签或发布包,也不包含 Docker 插件按钮接入。Windows/remote 的终端 handler 尚未实现,旧宿主没有 terminal.create 权限时会拒绝声明该权限的示例插件;未声明它的其他插件保持原有兼容性。

@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 2, 2026 09:31
@xiaoyumuxi
xiaoyumuxi merged commit 29b245c into main Nov 2, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant