会话
当你恢复或分叉一段对话、浏览历史,或者想了解压缩如何工作时,读这篇。模型/提供商 相关问题 → 提供商。
会话保存在哪里
会话是以追加方式写入的 JSONL 消息树,保存在 ~/.ink/sessions/ 下,按工作目录
组织。每一轮——用户消息、助手消息、工具调用与结果、模型切换、压缩检查点——都会
保留在磁盘上;内容从不重写。
ink -c # continue the most recent session in this directory
ink -r # ink sessions lists them; -r <id> resumes (prefix ok)
ink --no-session # ephemeral run; nothing persisted
在 REPL 中:/sessions 列出会话;/resume <id> 切换(历史会在屏幕上重放);
/new 开启全新会话(旧会话保留在磁盘上);/name <name> 为会话命名(供选择器
显示);/status 一眼展示会话、模型、上下文和信任状态。退出时总会显示如何恢复:
ink -r <id>。
消息树
每个会话的消息构成一棵树,而不是一条线。分叉或跳转会创建分支;活动分支为下一次 模型请求提供历史。
/fork——在较早的某条消息之前分叉对话。从可过滤的用户消息列表中挑选一条,或 使用/fork <n>。跳到某条用户消息会把它重新放回输入框,以便再次编辑。/tree——覆盖所有轮次与分支的可视化选择器。方向键移动;Tab 循环切换过滤器 (default / no-tools / user-only / labeled-only / all);f折叠子树;L给 选中条目加标签(标签是可搜索的书签,在任何过滤器下都会保留);输入文字即 搜索;Enter 跳转。←/→/PgUp/PgDn 翻页;alt+←/→ 在分支点折叠;ctrl+x 复制选中 条目的文本;层级较深时自动横向平移。选择器从你当前所在的位置打开。- 从某个分支跳走时,可以选择把你离开的分支摘要进新位置的上下文(三选一询问:
No summary / Summarize / 自定义提示词)。
INK_BRANCH_SUMMARY=0完全禁用摘要;/settings branchSummary.skipPrompt true跳过询问(直接不摘要)。/settings treeFilterMode <mode>记住你的默认过滤器。 - readline(非 TUI)shell 把树渲染成带编号的列表;
/tree <n>跳到第 n 行。
压缩
接近上下文窗口时,较早的轮次会被 LLM 摘要成一个检查点:之后的模型请求使用摘要
加最近的轮次,而完整历史仍保留在磁盘上。/compact 手动触发压缩(可选自定义
指令)。--no-session 也会禁用自动压缩;INK_AUTOCOMPACT=0 或设置中的
"autoCompact": false 可将其关闭。INK_CONTEXT_WINDOW 覆盖窗口的估算值
(默认 131072)。
分支摘要(来自 /tree 跳转)是另一套机制:它把被放弃的分支记录成单个条目。两者
都会保留原始条目——树从不修剪。
转向与后续追问(交互模式)
Ink 工作期间输入的行会排队,绝不丢弃:
- Enter → 一条
steer:行,在下一次模型调用前注入正在运行的轮次。默认排空 模式all:所有排队的转向指令在下一个边界一次性并入。 - Alt+Enter → 一条
follow-up:行,在模型本要停下时由同一次运行消费。默认one-at-a-time:每个回答消费一条后续追问,因此排队的序列会持续前进,无需回到 空闲状态。 - Alt+Up / Esc+P 把所有排队中的行拉回编辑器(保留草稿);Ctrl+C 中止也会以 同样的方式交还它们。
- 模式通过设置键配置:
/settings steeringMode和/settings followUpMode(all|one-at-a-time)。
终端说明:WezTerm 默认把 Option+Enter 绑成全屏,Alacritty 可能发送普通回车——
把两者都映射为 \x1b[13;3u,或改用 Esc+P(出队有回退方案;Alt+Enter 没有)。
已知限制
/resume选择器的输入过滤只消费已提交的文本——输入法组合窗口在组合过程中不 发出按键(kitty 协议),因此 CJK 输入在提交之后才会参与过滤。粘贴的一块内容 只取第一行。