npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

seektty

v1.2.6

Published

SeekTTY, a pluggable DeepSeek-colored terminal surface for DeepSeek Harness

Downloads

619

Readme

当前版本: [email protected] 适配官方 dsh 0.1.5-rc.1。接口差异、迁移决策和已完成/待完成验证见适配文档。


项目概览

进入项目目录运行 deepseek,即可在一个终端工作台中使用 DeepSeek Harness 原生的 Agent、Session、模型、权限、Settings、Profile、插件与持久化服务。SeekTTY 只负责终端界面;运行状态始终由 Harness 持有。

模型、Provider、Agent Preset、权限、命令、工具、Settings、Skill、MCP 服务和插件来源均从正在运行的 Harness 动态读取,因此上游或第三方 Bundle 新增的能力不需要硬编码进 SeekTTY。

需求还需要澄清时,可选的 Clarify Host 插件 会加入引导式 /clarify 工作流:逐一提出聚焦问题,每次回答后更新可审阅的 Draft,并把采用后的 Draft 写回输入框。随后可用 Harness 原生 /plan 把正式提交的需求整理成实施方案。

快速开始

在已测的官方 DeepSeek Harness 0.1.5-rc.1 上安装 SeekTTY:

pnpm add --global --config.enable-global-virtual-store=false @deepseek-ai/[email protected]

dsh plugin --profile tui add --config.enable-global-virtual-store=false [email protected]

dsh --profile tui

这些命令通过原生 dsh plugin 协调机制安装预构建 Bundle。逐命令 pnpm 参数会避开 pnpm 11 Global Virtual Store 布局;当前已测 dsh 版本的 Cordis Loader 还不能可靠加载该布局。SeekTTY 绝不会修改全局 pnpm 配置。Clarify 与 Auxiliary Runtime 均为可选插件,不是默认依赖;历史联合验收组合见兼容性。

[email protected] npm 包使用已审核包输入构建,详见发布说明、验证记录和 dsh 0.1.5-rc.1 适配记录。

裸 deepseek 启动器

安装 dsh 后,可全局安装同一个 SeekTTY Release,并把 Profile 协调固定到精确 npm 版本:

pnpm add --global --config.enable-global-virtual-store=false [email protected]
export [email protected]
deepseek

PowerShell 使用相同的精确 npm spec:

pnpm add --global --config.enable-global-virtual-store=false '[email protected]'
$env:SEEKTTY_SPEC='[email protected]'
deepseek

deepseek 要求 dsh 位于 PATH,也可以用 DSH_BIN 指向其可执行文件。常用启动形式包括:

deepseek "检查这个项目"
deepseek --cwd ../project
deepseek --resume
deepseek --resume <sessionId>
deepseek --profile team-tui
deepseek --version
deepseek --update

deepseek --update 采用 SeekTTY 自更新优先策略:先检查 SeekTTY,再检查 dsh;每轮最多安装一个兼容组件,绝不自动安装未测试的 gap 或未来 Host。DSH_BIN、本地安装和 SEEKTTY_SPEC 覆盖不会被改写,更新失败也不会阻止启动。设置 SEEKTTY_UPDATE=check 可改为会话后提示,设置 SEEKTTY_UPDATE=0 可关闭检查。

SeekTTY 1.2.6 适配 dsh 0.1.5-rc.1 原生 API,同时保留 Fastfetch 风格欢迎页、终端背景融合、TextMate 高亮、对话与选择控件改进,以及 pnpm 11 安装兼容,无需迁移 Settings 或 Session。

1.2.5 新增内容

  • 空会话显示响应式 DeepSeek 像素鲸鱼欢迎页与 Profile 运行信息;/welcome 可配置自定义信息行、可选的安全/受信任 Fastfetch 信息、内置/文件/本机 Fastfetch Logo、混合顺序、实时预览、刷新与重置,欢迎内容不会写入 Session 历史。
  • 主画布可通过 theme、terminal 和向后兼容的 explicit 三种背景模式继承终端透明、模糊和背景图片;overlay、panel 与普通代码表面使用同一继承策略,并补充对比度适配和退出时终端颜色恢复。
  • 导入的 VS Code tokenColors 成为权威规则,内置主题补齐精细 TextMate 配色,旧主题获得兼容的细粒度兜底;高亮按语言 grammar 区分,但明确不冒充 LSP 语义高亮。
  • 实时与已完成的思考块均可折叠,流式更新不会重新展开用户手动收起的内容;修正对话控件点击行偏移,工具卡收起后不再残留参数与结果。
  • 权限切换会检查 Harness 原生命令结果并刷新权威状态;模型、推理强度和 Agent 模式拆成独立点击与选择入口,并新增 /effort 键盘入口。
  • 宽弹窗会使用可用空间显示完整选项描述,resize 时保留搜索、选中、滚动与鼠标命中;多层控件的 hover 和透明表面语义保持一致。
  • 启动器协调、兼容更新和 TUI 插件变更逐命令关闭 pnpm 11 Global Virtual Store。已知 store/v11/links Loader 故障会得到精确且脱敏的恢复提示,不修改全局 pnpm 配置,也不绕过原生 Profile 协调。

完整变更见双语发布说明,验证边界与发布流程见 Owner 审核清单。

界面预览

| DeepSeek 亮色 | DeepSeek 暗色 | | --- | --- | | SeekTTY DeepSeek 亮色首屏 | SeekTTY DeepSeek 暗色首屏 |

| 亮色界面中的 TypeScript | 暗色界面中的工具、文件读取与 Diff | | --- | --- | | SeekTTY 亮色 TypeScript 语法高亮 | SeekTTY 暗色工具调用与 Diff 语法高亮 |

完整模式使用固定高度的 alternate screen,把输入框和状态栏固定在底部,并提供应用内滚动、选区和点击。空闲时按 F3 或执行 /mouse native 可切到终端原生模式:SeekTTY 离开备用屏幕,把已载入的完整对话写入普通终端滚动记录,关闭鼠标报告,由终端或 tmux 接管滚动、搜索和选区。补载按顺序执行并显示进度;Esc 可停止补载但不停止会话,Ctrl+L 只刷新活动尾部。/transcript 打开对话查看,/transcript replay 明确重新回放当前可用历史。原生模式用文本行表示图片附件;已经写入的历史不会由 SeekTTY 重新着色或重排。

空会话现在显示响应式 Fastfetch 风格欢迎页,不再提供可发送的任务候选。默认使用随包发布的原色 DeepSeek 像素鲸鱼,并显示当前 Profile 的运行信息;默认不会执行 Fastfetch。首次 API Key 引导仍具有更高优先级,完成后才会开始可选的 Fastfetch 采集。

Clarify 与 Plan

Clarify 与 Plan 位于同一条工作流的前后两段:Clarify 帮助确认要做什么,Harness 原生 Plan 提议如何实现。

| 组件 | 职责 | | --- | --- | | SeekTTY | 探测 Clarify Remote,加入 /clarify,渲染终端交互,提供当前 Session 与草稿,并把采用后的 Draft 写回输入框。 | | dsh-plugin-clarify | 持有临时澄清进程,通过 clarify.wire/1 发布 start、answer、accept、refine、cancel 和 fetchDraft。 | | dsh-plugin-auxiliary-runtime | 通过当前模型路由运行 Clarify 模型调用,并提供限额、取消与独立用量账本。 |

可通过以下方式启动 Clarify:

  • 从命令面板选择 /clarify,以整个输入区作为 seed;
  • 输入 /clarify some text,以参数文本作为 seed;
  • 在现有草稿末尾单独加入 /clarify token 或一行,以前面的文字作为 seed。

Clarify 一次提出一个聚焦问题,把已确认的决定带入后续问题,并在每次回答后刷新 Draft 预览。你可以回答、refine、采用或取消。采用只会把 Draft 写入普通输入框;按 Enter 仍是明确的发送动作。正式提交后,如需实施方案再运行 /plan。

问题、选项、预览和 refine 反馈保留在 Host 内存中,默认 15 分钟无交互后失效。主 Session 只会收到你明确发送的 Draft。辅助用量写入官方 storageDomain 下的 auxiliary_runtime;prompt、回答、模型输出、凭据和文件路径不会进入账本。/status 会显示经过校验的 Official、Auxiliary 和派生 Combined 总量,同时保持官方 Agent tokenUsage 不变。

已验收 Release 组合与当前候选边界见兼容与验证。

功能

| 范围 | 可用操作 | | --- | --- | | 对话 | 流式 Markdown/GFM、语法高亮代码、链接、表格、推理显示、工具卡片模式、重试、上下文压缩、取消与错误状态 | | Session 与工作区 | 新建、恢复、搜索、重命名、Fork、归档、排序、复制、导出和切换工作区,不删除项目文件或日志 | | Agent、模型与权限 | 动态 Agent Preset、Provider、模型、推理强度和权限预设,支持按 Session 切换与诊断 | | 队列与交互 | Agent 运行时继续排队或 steer;编辑队列项;处理单选、多选、自定义、跳过、取消和计划审查 | | 图片 | 粘贴或附加 PNG、JPEG、GIF、WebP;执行 Host 动态限制;恢复待发送附件;终端支持时内联显示 | | Plan、Goal、Todo 与压缩 | 原生 /plan、/goal、/compact,包含计划审查、目标状态、Todo 数量和 transcript 记录 | | 工具与文件 | 工具耗时、参数与结果高亮、带原文件行号的读取、Shell/JSON/Diff、产出文件浏览、路径复制与确认后外部打开 | | 子 Agent 与后台工作 | 浏览所属根 Session 的嵌套 Agent Tree,打开独立 child transcript,返回时恢复父视口、草稿、附件与树状态;Host 证据不足时保守显示生命周期与可继续状态 | | Profile 与 Settings | 创建、复制、切换和诊断 Profile;通过 Schema 回退、revision 检查和只写 Secret 编辑全部设置命名空间 | | 插件、Skill 与 MCP | 插件中心、原生 Bundle 协调、动态 Skill 命令、MCP 实例、加载状态、设置与风险信息 | | 主题与语言 | 界面/代码主题独立切换、继承终端背景效果、配色生成、VS Code 主题导入、对比度检查、NO_COLOR 和中英文实时切换 | | 欢迎页 | 响应式 DeepSeek 像素鲸鱼终端 Logo、自定义信息行、可选 Fastfetch 数据、草稿实时预览和带 revision 保护的 Profile 设置 | | 诊断与反馈 | 运行状态、可执行的 /doctor 检查、Session 反馈、助手消息评分与反馈删除 |

SeekTTY 从当前 Harness Profile 动态读取这些目录。暂不支持的可选能力会安全降级,专用终端界面则可以持续演进。

权限切换使用原生 Host 命令及其执行结果。成功后菜单关闭,失败时在菜单内保留错误供重试;完全访问与未知风险预设仍需确认,切换会话后必须重新选择权限。命令适配器支持已挂载的旧版双参数契约,以及官方 dsh 0.1.1-rc.2 的三参数 images 契约;遇到未知契约直接拒绝,不换参数重试命令。

首次配置 API Key

| 暗色 | 亮色 | | --- | --- | | SeekTTY 暗色首次 API Key 引导 | SeekTTY 亮色首次 API Key 引导 |

当前 Profile 没有可用模型 Provider 时,SeekTTY 会提供 DeepSeek 官方快捷配置、共用 Provider 管理器和稍后配置。环境凭据、Harness 已存凭据,以及活跃的环境认证或无 Key Provider 都会跳过该引导。通用 Provider 保存后,必须明确选定当前 Session 模型,待发送请求才会继续。

输入内容始终显示为掩码,并直接交给 Harness credentials.set。SeekTTY 不会读回密钥,也不会把它放入 Settings、日志、截图或 Session 数据。保存时不会发起可能计费的验证请求;认证错误由第一次真实请求通过正常 Provider 路径报告。

按 Escape 可稍后配置,同时继续使用 /settings、/plugin 等本地界面。待发送文字和附件都会保留,配置完成后自动继续原请求。如果 Provider 状态无法检查,SeekTTY 会提示使用 /settings 与 /doctor,而不是显示无法使用的表单。

Provider 管理

可从 /model 的管理 Provider…进入,也可从 /settings 的模型与 Agent进入。两个入口与首次引导共用同一套 Harness 流程:合并 llm.providers、settings.describe 和不含凭据值的 credentials.describe;先执行带 revision 保护的 Settings mutation,再可选调用 credentials.set;最后重新读取 Settings、Credential 元数据、llm.providers 与 llm.models,全部匹配后才报告完整成功。传输结果若无法通过回读确认,只会标记为状态未知,不会盲目重试。仅保存配置不会暗中修改当前 Session 或新 Session 默认模型。

自定义 Provider 仅使用已安装 llm-pi-ai adapter 在 schema 中明确描述的 providers 字典;路由 ID 遵循该字典 schema。本界面会去除首尾空白,并额外排除空 ID、终端控制字符和 SeekTTY 内部菜单 ID。在官方 dsh 0.1.1-rc.2 中,它公开的协议选项是 OpenAI Chat Completions、OpenAI Responses 和 Anthropic Messages。所有协议都可手工录入模型;adapter 支持时可通过 llm.discoverModels 发现。获取到模型列表只证明配置发现成功,第一次真实请求才是认证和推理检查。

API Key 始终通过掩码控件收集,且只交给 Harness Credentials。Credential Ref 使用官方 [A-Za-z_][A-Za-z0-9_]* 语法。来自环境或文件的只读凭据只显示为外部管理;凭据元数据不可读时,Key 更新按 fail-closed 禁用。任何新接入且需要写入新 Key 的 Ref,都必须在 Settings 变更前再次确认为“尚未配置且可写”。已配置 Ref 只能在界面明确展示 endpoint 与 Ref 后由用户确认复用,且不会读取或覆盖其中的值;更新当前已绑定 Ref 内的 Key 必须单独保存,不能与其他 Settings 变化合并。同时修改 endpoint 与 Key 时始终使用不同、未配置且可写的新 Ref,因此 Settings 先切换到不可能含有旧 Key 的 Ref,再写入新 Key。Settings 与 Credentials 是两次独立的官方调用,不是原子事务。模型编辑保留 schema 描述的完整模型项,包括输入模态、推理强度和协议兼容字段。

删除仅适用于既非权威当前 Session 路由、也非默认路由的用户层自定义 Provider;即使当前路由未出现在模型目录中也会受到保护。确认后会重新读取引用与所有权,mutation 后还会再次读取已删除 profile 及当前/默认引用。删除前检查与 Settings mutation 并非原子操作:并发选择仍可能在两者之间建立新引用,此时 SeekTTY 会报告竞态,而不会声称删除已完整核实。Credential 会有意保留,历史 Session 也不会改写。已保存的 Provider ID 不支持原地重命名。Catalog Provider 和专有认证仍受已安装 Harness adapter 实际公开能力限制;该界面不是协议转换器,也不代表所有厂商专有 API 均已认证。

斜杠命令

在输入框键入 / 会打开可搜索菜单,合并 SeekTTY 命令、当前 Agent 的 Host 命令和用户可调用的 Skill。

| 分类 | 命令 | | --- | --- | | Session | /new、/resume、/sessions、/rename、/fork、/archive、/export、/export md、/copy | | 工作环境 | /workspace、/profile | | Agent | /mode、/model、/permission、/plan、/goal、/compact | | 运行交互 | /queue、/steer、/attach、/attachments、/pending | | 运行内容 | /tools、/files、/jobs、/subagents、/trajectory | | 扩展 | /plugin、/plugins、/skills、/mcp | | 插件工作流 | 兼容的 Clarify Remote 与 Auxiliary Runtime 激活后出现 /clarify | | 配置与诊断 | /settings、/language、/theme、/welcome、/status、/doctor、/feedback、/restart | | 帮助与退出 | /help、/quit、/exit |

/plugin、/workspace 和 /profile 同时提供交互中心与直接子命令。未知命令不会作为普通消息发送,而会留在命令界面并显示相近建议。

自动补全与弹窗列表保持滚动位置:滚轮只浏览、不改变选中项,点击可见行不会让它居中,方向键仅在选中项越过可见边缘时滚动。悬停只做预览。首次单击选中;之后再次点击同一个仍待激活的选项,不受双击时间限制。按 Enter 或安全地再次点击会补全并且只执行一次斜杠命令;Tab 只补全。文件和路径补全永不自动提交,滚动位置提示行不可点击。

弹窗底部提供单击生效的选择/确认/保存和返回/关闭按钮,悬停样式跟随主题。按钮与键盘共用校验、导航逻辑;危险确认仍只能通过键盘完成。普通鼠标操作启动后即可使用,无需先最小化终端。终端支持焦点上报时,恢复焦点后的 250ms 内会防止误触执行。

完整鼠标模式复制会把文本统一编码一次为 UTF-8。Windows 使用固定的 PowerShell Set-Clipboard writer,macOS 在 UTF-8 locale 下运行 pbcopy,Wayland 明确声明 text/plain;charset=utf-8,X11 明确请求 UTF8_STRING;OSC 52 继续服务于终端、SSH 与 tmux 路径。

设置中心

/settings 不再平铺技术命名空间和字段,而是按产品用途组织为:外观、欢迎页、鼠标与滚动、输入与快捷键、模型与 Agent、权限与安全、插件与扩展、语言与系统。现有 Harness 命名空间和持久化值保持不变;兼容场景仍可使用 /settings <namespace> 直接打开技术命名空间。

模型与 Agent分类包含共用 Provider 管理器和现有的默认模型选择器。未知的非 Secret Settings 字段仍可从通用 schema 编辑器访问;Provider 管理不会替换或隐藏无关的 llm-pi-ai 字段。

专用编辑器遵循同一返回规则:列表操作后留在列表,叶子字段完成后返回一层,Esc 每次只退一层,只有保存/取消才退出草稿事务;新增、删除和移动后保持最合理的焦点。欢迎页的 Logo、Fastfetch、自定义信息行与安全模块排序均采用该规则。

欢迎页

/welcome 打开空会话欢迎页的事务式编辑器;/settings seektty-welcome 复用同一个界面。所有修改先留在草稿中,只有选择保存并立即应用后才会按 Settings revision 一次写入并实时生效。按 Escape 或选择取消全部修改不会改变当前欢迎页。

信息模式:

| 模式 | 行为 | | --- | --- | | custom(默认) | 结构化标题、文字、固定字段、运行信息、分隔线、空行和主题色板;绝不运行 Fastfetch | | fastfetch | 显示从 PATH 中已有 fastfetch 解析出的信息 | | mixed | 按“自定义优先”或“Fastfetch 优先”顺序同时显示两类内容 |

默认运行信息包括 SeekTTY 版本、工作区、模型、推理强度、Agent 模式、权限和主题。欢迎内容只属于临时界面状态,不写入 Session 或聊天记录;Session 出现第一条持久会话内容后立即隐藏。内容高于窗口时使用 transcript 滚动,不会静默截断;resize 和主题切换只重新排版、重新着色,不重复执行 Fastfetch。

内置大图与紧凑图是对 MIT 授权的 seek-on-dsh DeepSeek 像素鲸鱼进行的预生成终端转换;固定的源代码版本与许可说明记录在 THIRD_PARTY_NOTICES.md。原色模式保留蓝白配色,主题模式则把蓝色映射为 brand、白色映射为 text。SeekTTY 不负责生成像素画,也不使用 Kitty、iTerm、Sixel 等图像协议。用户可提供 UTF-8 终端文本文件:原色模式仅保留安全解析后的 ANSI 颜色,主题模式兼容 Fastfetch $[1-9] 前景色槽,$$ 表示字面量 $。第四种 Logo 来源可直接复用本机 Fastfetch 配置渲染的 Logo:SeekTTY 强制使用空模块结构,只采集一次 Logo,保留原始 ANSI 颜色,清理后再参与欢迎页排版;该过程不会执行 Fastfetch 信息模块或 command 模块。光标移动、清屏、OSC/DCS、超链接、剪贴板和图像协议都会被移除。文件及采集结果限制为 256 KiB、256 列、120 行;来源无效或不可用时回退内置 Logo,并只提示一次。

Fastfetch 始终是可选项,SeekTTY 不安装也不下载它。安全信息来源直接以 argv 启动已有程序,不经过 Shell,强制使用 --config none,关闭 Fastfetch Logo 与颜色,并提供可排序的隐私安全模块。受信任的用户配置信息来源可能包含 command 模块或其他外部行为,启用前必须明确确认风险。Logo 复用独立于信息模式,使用同一个可选 Fastfetch 配置路径,留空则使用 Fastfetch 默认配置。所有采集均采用 2 秒超时、有限输出和控制序列清理。同一配置每个进程只采集一次;/welcome refresh 同时清除信息与 Logo 缓存并重新采集,/welcome reset 恢复默认的不运行 Fastfetch 配置。

自动化覆盖与真实终端边界见实施与兼容验收记录。

常用操作

F1 → 键位速查 按用途展示当前绑定,并反映 /keymap 自定义。以下为默认键位:

输入与编辑

| 输入 | 操作 | | --- | --- | | Enter / Shift+Enter | 发送或确认;选中的斜杠候选会补全并只执行一次 / 输入换行 | | Ctrl+Z(兼容 Ctrl+-) | 撤销当前输入框内的编辑,包括输入、粘贴和选区替换 | | Ctrl+R | 搜索输入历史 | | 多行弹窗中的 Enter / Ctrl+Enter | 换行 / 提交 |

各输入框独立保留撤销记录,包括搜索框和遮蔽的密钥输入框。撤销不会撤回已发送消息或回退已保存设置。

命令与弹窗

| 输入 | 操作 | | --- | --- | | 输入框中的 / | 打开命令与 Skill 候选 | | Up / Down | 移动候选或列表中的选择 | | 候选显示时按 Tab | 只补全选中的候选而不提交 | | Escape | 取消候选,或返回/关闭当前弹窗 | | 多选弹窗中的 Space | 勾选或取消当前项 | | F1 / Ctrl+P | 打开帮助 / 打开命令面板 | | F2 / Ctrl+, / Cmd+, | 打开 Settings |

对话浏览

| 输入 | 操作 | | --- | --- | | Tab | 空输入框进入对话浏览;浏览时返回输入框 | | Up / Down | 浏览时逐行滚动或移动卡片选择 | | PgUp / PgDn / Home / End | 在 transcript 中翻页、跳到最早内容或回到最新 | | Shift+Left / Shift+Right | 跳到上一个或下一个用户轮次 | | /,再按 Enter,然后 n / N | 查找对话、确认查询,再跳到下一个 / 上一个匹配 | | Escape | 依次退出查找、卡片聚焦,再返回输入区 | | Ctrl+O / Ctrl+T | 切换工具卡片显示 / 显示或隐藏推理 |

会话与运行

| 输入 | 操作 | | --- | --- | | Ctrl+S | 打开 Session 恢复 | | Ctrl+M | 打开模型选择(需扩展键盘协议,否则使用 /model) | | Shift+Tab | 循环权限预设,进入完全访问前确认 | | Ctrl+C | 停止当前轮次、清空草稿,或二次确认退出 |

鼠标与选区

| 输入 | 操作 | | --- | --- | | F3 或 /mouse toggle | 空闲时切换完整模式与终端原生模式 | | 鼠标滚轮 / 触控板 | 在 SeekTTY 内部浏览 Transcript,不改变输入框焦点、草稿、选区或光标 | | Ctrl+Shift+C | 复制当前应用内选区 | | 非密钥弹窗输入框中的 Ctrl+X | 剪切选区 | | 可编辑输入框中的 Backspace / Delete | 删除选区 | | 使用终端/tmux 的滚动与选区 | 终端原生模式使用外层终端原有的滚动、搜索、copy mode 与复制方式 |

完整鼠标模式还提供常驻滚动条、应用内选区、选后复制、悬停反馈,以及卡片、示例、候选、弹窗和模型/模式/权限控件的精确点击。危险确认仍需 Enter。

Transcript 复制的是语义文本,而不是终端单元格快照:视觉折行会按源空白重新连接,源文本换行与代码真实缩进会保留;渲染器行尾填充、代码 gutter 与行号、引用/界面边框、滚动条、背景填充和 ANSI/OSC 控制序列不会进入剪贴板。选后复制、Ctrl+Shift+C 与右键“复制所选文本”共用同一份 \n 换行 payload;终端原生选择行为不变。

弹窗中的可见文字支持拖选和复制。搜索框与非密钥输入框还支持通过输入文字、Backspace 或 Delete 替换/删除选区,Ctrl+X 剪切;右键菜单提供复制、剪切、删除选区、粘贴和全选。Ctrl+Shift+C 复制当前弹窗的选区,Ctrl+C 保留中断行为。剪贴板操作不会暴露被遮蔽的密钥。

右键菜单独立浮在当前页面上,不进入页面返回栈。它根据鼠标下方的语义对象提供操作,不移动列表箭头或键盘焦点:会话、工作区、Profile、主题、欢迎页信息行、Fastfetch 模块、排队消息、插件、文件、后台任务、子 Agent、卡片、Agent 树、MCP、Skill、状态控件和可编辑文本都会在适用时复用现有动作。每个根菜单固定保留“复制所选文本”和“关闭”;没有选区时复制置灰。终端原生模式继续通过 F3 或 /mouse 切换,不放进右键菜单。

对象菜单支持一级子菜单。悬停父项 250ms 后展开,单击、Enter 或右方向键立即展开,左方向键或 Esc 返回根菜单。执行前会重新校验目标和能力状态,刷新后消失的旧行不能继续执行;会话重命名、Fork、导出和归档直接作用于右键命中的会话,不会临时切换当前会话。破坏性动作继续使用原有确认流程,不能绕过只能按 Enter 执行的确认页。

左键点击菜单外或按 Esc 只关闭菜单;右键点击菜单外则针对新目标重新打开。菜单项单击左键即可执行,底层页面保留草稿和选区。

滚动滚轮或按住左键拖动会关闭菜单,并立即在下层页面继续滚动或选中文字;按住右键拖动则在松手位置打开菜单。左键单击菜单外仍只关闭菜单,不会误触底层控件;父弹窗继续拦截输入,不会穿透到会话。

主题与语言

SeekTTY 默认使用 DeepSeek 暗色主题。/theme 会打开主题中心,也可直接输入:

/theme dark
/theme light
/theme background [theme|terminal|explicit|foreground]
/theme colors [auto|rgb]
/theme fill [terminal|theme]
/theme sync [off|theme]
/theme code [auto|dark|light|<主题名>]
/theme use <主题名>
/theme edit [主题名]
/theme palette [主题名]
/theme import [主题名] [本地文件]
/theme delete <主题名>

界面主题与代码主题仍可独立选择。输入 3–16 个 HEX/RGB 颜色即可生成亮色与暗色候选。内置代码主题为常见编程语言、标记语言与结构化数据提供精细 TextMate 规则。/theme import 会读取本地 VS Code JSON/JSONC,解析相对 include,将可移植的 TextMate 颜色、选择器优先级与样式原样作为权威语法规则,并在确认保存后同时应用到界面与代码;只有不含 tokenColors 的主题才使用 SeekTTY 的紧凑角色色生成兜底规则。所有自定义路径都会先预览,并在保存前标出低对比度。定义保存在带 revision 保护的 seektty-appearance Harness Settings 命名空间中。

悬停是由当前界面主题统一派生的纯前景交互状态:使用主题 brand 色,不填充背景,不使用下划线、粗体、反色或额外标记,也不新增必填设置或修改保存的配色。选中态继续使用更强的背景填充;仍遵守 NO_COLOR。

界面/代码主题负责选择调色板;显色方式、背景呈现、**终端背景同步(高级)**已拆成独立设置。在 /theme 或 /settings seektty-appearance 中编辑,经过 Harness revision 保护保存后立即生效。默认值和已有外观均保持不变,读取旧设置时不会自动迁移或写回。

| 独立设置 | 直接命令 | 含义 | | --- | --- | --- | | 显色方式 | /theme colors auto 或 /theme colors rgb | 自动检测 RGB/256/16 色,或直接输出主题 RGB,不主动量化及调整对比度 | | 背景呈现 | /theme fill terminal 或 /theme fill theme | 沿用终端效果,或铺满主题画布、弹窗和代码底色,包括空白单元 | | 终端背景同步(高级) | /theme sync off 或 /theme sync theme | 禁止 OSC 11,或在支持的终端尝试临时同步主题底色 |

要同时得到原色文字和主题背景,使用 /theme colors rgb + /theme fill theme。主题铺底使用 SGR 背景色,不依赖 OSC 11,与 /theme sync off 可以一起使用。它不会修改终端配置;实际颜色和透明效果仍由终端或 tmux 决定。沿用终端背景时需要手动匹配明暗主题;NO_COLOR、TERM=dumb 和非交互边界仍优先。选区、特殊 token 背景和 Logo 像素保留显式颜色。切换显色或铺底会刷新已有消息、代码和欢迎页,不重建 Session,不清空输入、选区、复制内容或滚动位置。

旧 /theme background <组合> 命令继续兼容,会把三个设置一起恢复到旧组合;/theme background explicit 仍可直接恢复兼容组合。无参数的 /theme background 现在打开背景呈现编辑器;三个新命令无参数时分别打开各自编辑器。旧设置在没有独立覆盖时按以下表格解释:

| backgroundMode | 主画布、弹窗面板与代码基础背景 | 终端颜色 | | --- | --- | --- | | theme(默认,兼容缺少该字段的旧设置) | 终端默认背景(SGR 49) | 通过 OSC 11 临时同步界面主题颜色 | | terminal | 终端默认背景(SGR 49) | 不改色;如果本次运行改过色,恢复捕获的原色 | | explicit(兼容) | 保留原有画布、面板与代码主题显式底色 | 保留原有 OSC 11 同步行为 | | foreground(主题原色,试验,手动启用) | 终端默认背景(SGR 49),保留主题 RGB 前景色 | 不查询、不改色;只恢复本次运行曾修改并捕获的原背景 |

旧 foreground 组合等于“原色 RGB+沿用终端背景+关闭同步”。在它的基础上输入 /theme fill theme,只增加主题铺底,保留已经奏效的 RGB 显色。不自动降级,也不保证所有终端的最终颜色一致。

在 theme 和 terminal 中,补齐整行的弹窗面板,以及行内、围栏、工具、文件和 Diff 代码的基础背景都与主画布一样使用终端默认背景。代码排版与语法前景色不变;选区和 TextMate 明确配置的特殊 token 背景仍是彩色区域,hover 只改变前景色。explicit 保留原有画布、面板和代码填充,但显式颜色是否不透明仍由终端决定。背景模式属于 Harness 的 seektty-appearance 设置,不属于主题文件,切换、预览、导入或导出主题均不会覆盖它。

只有“自动检测+沿用终端背景”会适配已知且与主题不同的背景;背景未知时使用终端默认前景色,不猜黑白。“原色 RGB”绕过此处理。主题菜单在保存或从子菜单返回后,会刷新当前调色板与独立设置摘要。显色、铺底及同步属于 Harness 设置,不进入可移植主题文件。

改色需要支持的真彩色终端,并在一次 500 ms 异步查询内收到有效回复。不支持、查询超时、NO_COLOR、低色彩及 tmux/screen 均不改色。theme 模式同步不可用时保留终端默认背景,给一次非阻塞提示,不自动回退成 RGB 铺底。SEEKTTY_TERMINAL_BACKGROUND=off 只禁止改色,不改变所选模式。退出时恢复捕获的原色。SeekTTY 不读取/设置透明度,不修改终端配置或窗口装饰。详见兼容性说明与当前验收记录。

使用 /language 或直接命令实时切换终端文案:

/language auto
/language zh
/language en

显式偏好由官方 locale 插件存入 locale.preference,并与 Harness Web 共享。auto 会删除覆盖并跟随终端语言环境。切换只改变 SeekTTY 界面和 transcript 呈现,不会改写模型、工具、用户、Provider 或插件生成的内容。

插件中心

/plugin 打开当前 Profile 的插件中心,/plugins 是别名。直接子命令包括 list、search、info、install、remove、update、reorder、source 和 doctor。

  • 默认搜索 npm,也可添加 JSON/HTTP Catalog,或使用其他 Bundle 注册的来源;
  • 支持 npm 包名、Git URL、tarball、file URL 和本地目录;
  • 安装前检查 dsh.bundle.patch、包内文件、安装 spec、构建脚本和目标 Profile;
  • 变更后可重启,并恢复工作区、Session、草稿和附件;
  • 可查看版本、来源、发布者、Bundle 顺序、加载状态和可执行诊断。

TUI /plugin 与原生 dsh plugin 会协调同一份 Profile 依赖、Bundle 顺序和 pnpm lockfile。

迁移与移除

旧版 deepseek-tui 全局包只需替换一次:

pnpm remove --global --config.enable-global-virtual-store=false deepseek-tui
pnpm add --global --config.enable-global-virtual-store=false [email protected]
export [email protected]
deepseek

自定义 Profile 会在首次启动时分别迁移。只使用 dsh 原生入口时,可显式替换 Bundle:

dsh plugin --profile tui remove --config.enable-global-virtual-store=false deepseek-tui
dsh plugin --profile tui add --config.enable-global-virtual-store=false [email protected]

如需同时移除 Profile Bundle 和可选的全局启动器,可执行以下命令;dsh 本体不受影响:

dsh plugin --profile tui remove --config.enable-global-virtual-store=false seektty
pnpm remove --global --config.enable-global-virtual-store=false seektty

兼容与验证

本版本仅声明并验证官方 dsh 0.1.5-rc.1,验证进展记录在适配文档中。下表记录当前版本边界。

| 边界 | 版本 | | --- | --- | | Node.js | ^22.19.0 || >=24 | | 声明的最低 Harness Host | 0.1.0-rc.6 | | 当前已测 Harness Host | 0.1.5-rc.1 | | pnpm 11 布局适配器 | pnpm 11.7.0;dsh >=0.1.0-rc.6 <=0.1.0-rc.8 || 0.1.1-rc.2;每次变更单独关闭 GVS | | 最近一次联合验收的 Clarify Release 组合 | dsh 0.1.0-rc.8 + SeekTTY 1.2.0 + Auxiliary Runtime 0.1.0 + Clarify 0.2.1 | | 当前 Release | SeekTTY 1.2.6 + 官方 dsh 0.1.5-rc.1;包含原生 API 适配及此前的外观、高亮、交互与 pnpm 布局改动 |

低于声明最低版本的 Host 会被拒绝;高于已测版本的 Host 可以在提示后启动,但自动更新只会安装明确兼容的范围。发布 Bundle 不会把 Cordis 或身份型 @deepseek-ai/dsh-* 包安装进 Profile:optional peer 用来描述 Host 合同,运行时 import 统一从官方 Harness 安装解析。附件兼容适配器只处理精确测试过的旧版图片限制形状,遇到未知形状会直接拒绝适配。

pnpm 11 Global Virtual Store 兼容

pnpm 11 可能把全局包放到 store/v11/links。当前已测的 dsh/Cordis Loader 会在 SeekTTY 启动前因该布局报出 plugin tree failed to load、cordis:include 等错误。在上游 dsh 新版本通过 GVS 正向生命周期门禁前,SeekTTY 仅对自身发起的包树变更附加 --config.enable-global-virtual-store=false:启动器首次协调、兼容范围内的自动更新,以及 TUI /plugin 的安装、更新、移除和协调。只读 pnpm 命令不受影响。

该适配器不会运行 pnpm config set、设置 NODE_PATH、复制 Host 包,也不会绕过原生 dsh 协调去编辑 Profile manifest。启动失败且安装路径明确位于 store/v11/links 时,启动器会输出谨慎的双语诊断和精确的逐命令恢复方式,不会误报为 SeekTTY 缺少普通依赖。

门禁合同、当前本机证据和适配器退出条件见双语的 pnpm 11 布局验收记录。

1.2.6 Release 检查覆盖:

  • typecheck、单元/集成测试、生产构建、打包内容检查和重复 Host 包拒绝;
  • 使用同一候选 tarball,在未修改的官方 dsh 0.1.1-rc.2 上隔离执行 add、boot、remove、re-add;
  • Windows、macOS、Linux 上使用共享候选包和 Node 22/24 的 CI 矩阵:GVS=false 必须通过完整生命周期;GVS=true 必须成功启动,或准确复现并分类已知 dsh/Cordis Loader 错误。CI runner 验证与真实终端人工签收分开记录;
  • Windows ConPTY 的启动、斜杠导航、右键菜单手势交接、resize 与正常退出。注入的 PTY 输入和模拟渲染测试不等价于真实 GUI 终端鼠标或剪贴板测试;
  • 十万行结构性 TUI 性能门禁。各平台人工签收状态在 Owner 审核清单中单独列明。

此前的 Clarify、附件、Vision-Exp、鼠标输入与 Provider 观察属于历史证据,不代表 1.2.5 对这些可选工作流重新验收。声明的 Host 范围不变;本候选版本的 stock 生命周期复测针对 0.1.1-rc.2,并非所有旧版 Host。

可复用检查:

pnpm run check

DSH_BIN=/path/to/dsh \
SEEKTTY_SPEC=/path/to/seektty.tgz \
pnpm test:stock

pnpm test:pnpm11-layout false /path/to/candidate-directory
pnpm test:pnpm11-layout true /path/to/candidate-directory

DSH_BIN=/path/to/dsh \
SEEKTTY_SPEC=/path/to/seektty.tgz \
SEEKTTY_MOUSE_PTY=1 \
pnpm test:mouse-pty

CLARIFY_SPEC=/path/to/dsh-plugin-clarify.tgz \
pnpm test:clarify-doctor

完成 npm 登录并发布 [email protected] 到 npm Registry 后,可使用上文带逐命令 GVS 兼容参数的 pnpm 命令安装。