用途:按 Termy v1 真实契约构建小型、原生体验的 Termy 扩展,保持插件范围收敛、使用最少能力,并在用户授权安装或开发模式时于 Termy 内验证行为。
主要能力:先检查仓库说明、工作区状态与现有插件文件,保留无关改动;优先阅读插件托管的 termy.d.ts,与当前 Termy 检出冲突时以二者为准。新增 API 或排查类型/清单错误前读 references/api-reference.md;处理用户可控 shell 文本、文件、凭据、网络、子进程、生命周期事件、存储或原生 UI 前读 references/performance-security.md;脚手架前读 references/examples.md,可复用 assets/command-plugin/ 或 assets/native-ui-plugin/。不得虚构 v1 声明中不存在的 React、HTML、CSS、GPUI 访问、包导入、SDK 导入、构建钩子或 API。
使用方式:优先用 termy plugin init my-plugin 脚手架,否则只创建 plugin.json 与 plugin.ts 或 plugin.tsx,不添加 package.json、依赖或打包器。清单使用公开 schema、apiVersion 1、稳定小写 ID、可读名称、可选版本与相对 main,仅声明必需 capabilities,main 须在插件目录内,禁止绝对路径、.. 或符号链接。导出单个定义,不导入 definePlugin、TermyPlugin、TermyPluginContext、TermyUI 或 SDK。命令用稳定 ID 与清晰标题;context 视为只读快照;配置用类型化设置,凭据用 secret 设置;固定选项映射到固定 terminal.run 命令,禁止拼接不可信自由输入;返回类型化动作或 toast。仅事件插件用 commands: []。小 JSON 用异步存储,大文件用托管路径。原生视图用 .tsx、三个 Termy JSX pragma、白名单 TermyUI 组件、唯一控件 ID、命名动作与 onAction,动态列表分页并从持久状态重渲染。
验证:仅源码工作时先做非安装式语法/导入检查:termy_plugin_check_dir="$(mktemp -d)" 与 bun build ./my-plugin/plugin.ts --target=bun --outdir "$termy_plugin_check_dir"。需构建/运行时用 termy plugin dev ./my-plugin,保存后打开命令面板刷新,Ctrl-C 停止监视但不卸载托管副本。逐项验证清单、Worker 加载、命令与分支、可选上下文缺失、设置与密钥、生命周期幂等、原生控件动作与重渲染、热刷新,并运行仓库最近检查与 git diff --check。若无法做 Termy 运行时验证,须明确说明该缺口,不得以静态 TypeScript 成功当作运行时证明。
限制:capabilities 仅约束 Termy 自有 API,不限制 Bun 的操作系统访问;本地导入须在插件根内,拒绝依赖与符号链接;需限制选择、输入、存储、输出、列表、网络与子进程规模;取消时显式清理子进程;避免渲染与生命周期热路径重复文件系统/网络操作;安装、更新、禁用或卸载托管副本时保留用户源文件夹。