@muzi3/prompt-nav
v0.1.5
Published
Pi extension: 左上角常驻的 prompt 导航方框——显示当前停留的 user prompt,点击展开当前对话的 prompt 列表,选中即把 transcript 滚到那一条。
Maintainers
Readme
@muzi3/prompt-nav
Pi 扩展:终端左上角常驻一块 prompt 导航色块。色块里是当前滚动位置停留的那条 user prompt, 点一下展开当前对话的 prompt 列表,选中某条就把 transcript 滚到它的顶部——不 fork、不改会话、 不回填编辑器。
❯ 你先根据dsh现状,列出哪些地方是卡点只有一行,底色与正文 user 消息一致(userMessageBg),宽度等于整个页面宽度(与正文行同宽)。
安装
pi install npm:@muzi3/prompt-nav
# 本地开发:pi install /path/to/packages/prompt-nav交互
| 操作 | 效果 | |------|------| | 左键点色块 | 展开当前对话的 prompt 列表,并按当前滚动位置预选 | | 左键点列表项 / Enter | 滚到那条 prompt 的顶部并收起 | | ↑ / ↓ | 移动选中项(展开态) | | Escape / 点列表外 | 收起 |
折叠态完全不拦键盘,编辑器和宿主快捷键照常工作;只有展开态才接管方向键、Enter 和 Escape。
实现要点
- 定位靠宿主的 OSC133 标记:宿主渲染 user message 时会在首行加
\x1b]133;A,本扩展渲染一遍 transcript 拿到每个 prompt 的行号,再用ScrollView.scrollTo(row)定位。 - 宽度自校验:换行差一列会让行号整体错位,所以渲染行数和
ScrollView.contentHeight对不上时 会退回少一列再试一次。 - 只在全屏模式有效:regular 模式下 transcript 在终端 scrollback 里,没有可编程滚动入口, 点击只会提示不支持。
- 常驻 overlay 的代价:它一直挂在 overlay 栈上,因此存在期间切换 TUI 模式会被宿主拒绝
(
Close active overlays before changing TUI mode)。这是用 host overlay API 换取「常驻浮层」的取舍。 - 布局前宿主会用 0 宽测量一次,此时必须仍返回一行,否则 overlay 高度会被记成 0 之后再也长不出来。
测试
npm test --workspace=@muzi3/prompt-nav覆盖 prompt 提取、摘要、方框/列表渲染、窗口化、键盘与鼠标交互、真实 ScrollView 跳转、
非全屏提示以及安装/摘除。
License
MIT
