Releases: letr007/letcode
Releases · letr007/letcode
Release list
letcode v0.18.0
Added
- 首次启动时若配置文件不存在,进入 TUI 或恢复会话会先运行配置向导,收集 base URL、API Key 与模型并写入
letcode.toml。 [fake.claude]新增,声明 Claude Code 剖面的客户端版本、依赖包版本、超时与能力标记。[fake.identity]新增account_uuid,声明 Claude Code 剖面上报的账号;省略时由安装 ID 派生。
Breaking
- 移除
/children与/parent,子代理视图导航统一到/child;/child不带参数时在子代理视图与原视图之间切换,此前等同first。 [fake]配置段按剖面拆分,[fake.client]与[fake.environment]合并为[fake.codex],[fake.extra]移入[fake.codex.extra]。包含旧键的配置会被拒绝。
Changed
/fake anthropic改为伪装 Claude Code,发送claude-cli/<version> (external, cli)User-Agent、x-app、anthropic-beta等 Claude Code 标头,并在请求体写入 2.x 形态的metadata.user_id。- Codex 与 Claude Code 剖面不再共用客户端特征,各自读取自己的参数与标头。
Fixed
- 修复后台项目记忆在证据不足时把仍然有效的记忆判为过时而覆盖的问题,并让巩固计时在真正执行一轮之后才开始。
- 修复中文记录在项目记忆相关度打分中被低估的问题,打分改为纳入中文双字词。
letcode v0.17.0
Added
- 新增
wireframe主题,采用透明卡片与矩形边框风格。 - Jev 审批后端支持在
[providers.<name>.endpoints.jev](或别名[endpoints.reviewer])下配置自定义端点路径(缺省为/v1/systemone),自动处理基础 URL 规范化。
Fixed
- 修复后台项目记忆提取在未推进的记录节点上连续失败时无休止重试的问题,增加递增延迟退避并在连续失败 8 次后暂停,待会话产生新记录后再恢复。
- 识别
server_is_overloaded为可重试错误;GPT 模型遇到该错误时改为按配置的固定初始间隔重试,避免指数退避导致等待过久。
letcode v0.16.1
Fixed
- 修复等待子代理时收到另一个后台子代理的完成通知后,本回合可能中断、会话随后无法恢复的问题。
letcode v0.16.0
Added
- 新增
plain与glass主题。 - 主题文件的颜色字段新增
"default",将该槽位交给终端,作背景时等同 SGR 49,作前景时等同 SGR 39。
Changed
- 模型 API 默认请求改为携带 letcode 自己的 User-Agent(
letcode (<os> <arch>; <version>))。 - 主题选择器、伪装模式、思考显示、工具显示与推理强度的说明文字接入翻译。
Fixed
- 修复后台子代理完成后主代理没有继续工作的问题。
- 修复中断一个正在跑的回合后,会话可能因工具调用批次未闭合而无法继续的问题。
letcode v0.15.0
Added
- 新增实验性 Jev 审批后端,
[agents.reviewer]指向带reviewer = "jev"标记的 provider 时,auto模式改由 Typesafe Jev 判定,端点、凭据和模型都取自该 provider。 - Jev 的每次判定记录在 reviewer 子会话里,可像 chat 审查专家一样在 TUI 中查看请求与决策。
- 后台 Historian 新增项目记忆巩固,同一事实的重复项合并为一条。
Breaking
- 旧版本 letcode 打开已升级的项目记忆库会启动失败,回退前需恢复记忆库备份。
Changed
auto模式下审查专家的判定从放行/拒绝两档扩展为直接执行、交回请求方补充说明、或拒绝执行三档。- 交回请求方的调用会在补充说明后重新判定,仍不明确才弹出与
default模式相同的人工审批;同一调用在一个会话内只有一轮补充机会。 - 升级到用户的人工审批需要交互式前端,one-shot 等无交互入口无法回答。
- 所有命令都会进入审批,只读/低风险前缀不再直接放行。
- 人工审批提示支持左右方向键在选项间切换高亮、Enter 确认;待审批时终端标题以
!提醒,与提问的?一致。 memory__recall返回项新增recall_count、last_recalled_at与curated_at_ms。
Fixed
- 修复项目记忆检索几乎召不回无空格中文长句的问题。
Removed
- 移除只读/低风险命令白名单及其命令风险分类。
letcode v0.14.0
Added
- 新增 DeepSeek 工作指引策略,按模型名自动识别。
- 新增会话归档:超过
[global.session_archive] older_than_days(默认 7 天)未活动的会话族会在后台压缩移出磁盘,会话列表照常显示,恢复时自动还原。 - 新建会话继承当前会话的模型路由、专家路由、推理强度与请求兼容模式。
/agents专家列表逐项列出已选中的模型路由,选中项在被清除前替代配置默认。- 专家委派未指定模型时默认使用该专家已选中允许路由中的第一条。
Changed
- 终端窄于 84 列时不再渲染会话面板,加宽后恢复。
- 移除一处历史遗留的关键词启发式实现。
Fixed
- 修复窄终端下会话面板透出底层文字、区域内点击和拖拽仍命中底层 transcript 的问题。
- 修复 Markdown 表格单元格超宽被截断、CJK 列被挤压后渲染为空的问题。
letcode v0.13.0
Breaking
- 移除
capabilities.prompt_cache;[cache] enabled = true成为 prompt cache 的唯一开关,配置中的该能力行需删除。
Fixed
- 修复未启用并行工具调用的路由仍发送
parallel_tool_calls,导致 Completions 路由的带工具回合在预检阶段全部失败的问题。 - 修复 Anthropic 路由配置
reasoning_effort/reasoning_efforts却未声明anthropic_thinking时每个回合都在预检阶段失败的问题;加载配置时现在会拒绝该组合。 - 修复无法表达 reasoning effort 的路由仍列出可选档位,选中后该路由后续回合全部在预检阶段失败的问题。
letcode v0.12.0
Added
- 新增
[fake]配置段,为请求兼容模式声明可变信息。 - 新增增量三层历史与内置 Historian 后台整理。
- 新增
context__search和context__expand。 - 新增按模型配置的异步工具,仅适用于 Astra 策略搭配 Responses 协议。
- 新增按路由声明的结构化输出。
Breaking
- 移除 Anchored Bootstrap 实验及其
[experiments.anchored_bootstrap]配置段与/anchored命令。
Changed
- 请求兼容模式在 Codex profile 下把运行时上下文改为
<environment_context>user 块。 - 请求兼容模式在 Responses WebSocket 路径上附带
OpenAI-Beta: responses_websockets=2026-02-06。 - 项目记忆改为按工作区路径隔离的独立记忆库。
- 历史回放校验复用已发布前缀的投影状态,仅在分支路径变化时重建。
- 子代理运行状态改为只反映宿主事实。
- 请求兼容模式的选择改为记录在会话中,恢复会话时还原。
- TUI 常规偏好改为加锁的原子写入。
Fixed
- 修复不支持图片输入的模型通过
fs__read读取图片,或接收用户粘贴图片后,在后续请求/会话恢复时因unsupported_request_field失败的问题;图片会被拒绝或转换为文本占位信息。 - 修复回合或子代理运行中按 Ctrl+C 会直接退出会话并取消正在运行子代理的问题:运行中 Ctrl+C 现在与 Esc 一致,先提示确认中断,仅在空闲时直接退出。
- 修复上下文压缩后模型看不到当前 todo 列表与 auto-continue 状态的问题。
- 修复历史树投影遇到已应用的历史记录时崩溃的问题。
- 修复流式工具调用被截断时仅剩推理内容的部分回复会写入历史的问题。
- 修复声明
json_schema结构化输出的路由上项目记忆抽取套用 Historian 发布 schema 的问题。 - 修复 Historian 整理结果不符合发布契约时在同一历史前缀上反复自动重发、在上下文压力压缩中长时间等待后整轮失败、以及上游以
context_too_large拒绝时无法收敛的问题。 - 修复 Historian 整理失败时不留记录的问题。
- 修复 Historian 后台整理在子会话视图中不显示输出的问题。
- 修复手动
/compact期间无法切换到子代理视图的问题。
letcode v0.11.0
Added
- TUI 的 Mermaid 渲染新增饼图、Git 图、用户旅程图和象限图。
Breaking
- WebSocket 开关从
[providers.<name>.transport]移至[providers.<name>.models.<model>.transport],可按模型独立启用;旧位置的websocket字段不再接受,已配置的用户需迁移。默认仍为 HTTP/SSE,WebSocket 仅用于 Responses 普通 Agent 回合。
Changed
- 增强 Mermaid 复杂图表展示,支持流程图双向边与回环、时序图并行块与激活标记,并改进嵌套状态图、ER 图和甘特图的布局。
/tools紧凑模式保留子代理委派及控制操作的独立卡片,不再将它们合并进普通工具调用组。
Fixed
- 修复父会话与子代理视图中思考状态换行变化时,行数缓存与实际内容不一致导致的程序异常退出。
- 修复 Responses、Anthropic 与 Chat Completions 之间切换时,历史 reasoning 转换后留下空 assistant 消息的问题;保留无明文的原生 replay 数据,并同步维护请求来源映射和缓存断点,不改写原始历史。
- 修复 Responses WebSocket 重连后的上下文续接,并让可重试的握手连接错误遵循已配置的重试策略,保留脱敏后的底层错误详情。
- 上下文压缩的摘要流失败后可按重试配置重新生成;重试前清除上次预览,避免混入失败尝试的内容,最终失败时保留原历史。
- Codex 请求兼容模式保留已配置的 reasoning effort 与 summary,避免思考摘要设置丢失。
- 手动压缩和专家委派在成功派发后正确显示运行状态,派发失败时不会残留忙碌状态。
- Windows TUI 解析终端发送的 bracketed-paste 边界,将大段文本作为一次粘贴处理,保留中文、emoji 和空行;CRLF/CR 统一为 LF,避免粘贴中的换行触发发送。
- 补齐应用收到的 Ctrl-Shift-V 和 Shift-Insert 剪贴板快捷键,支持在主输入框读取文字与图片;图片转换失败时保留草稿并显示错误,不再退出 TUI。
- Transcript 写锁在释放时显式解锁,避免 Unix 子进程继承的文件描述符导致会话关闭后短暂无法重新打开。
letcode v0.10.0
Added
- Responses 路由支持通过
[providers.<name>.transport]启用普通 Agent 回合的 WebSocket transport;标题、摘要、上下文压缩等 one-shot 调用仍使用 HTTP/SSE。 - 会话恢复支持 transcript schema v1,并从 journal 记录重建当前会话状态。
- 新增 Agent、请求构建、会话、子代理、工具和 transcript 等核心组件的技术文档。
Breaking
- Provider 与 model 配置改用结构化的
auth、endpoints、transport、capabilities、generation、cache和protocol_settings;default_model必须显式引用已配置模型,省略的能力标志默认关闭,旧版api_key、base_url、supports_*等扁平字段不再接受。
Changed
- Thoughts Level 1 将连续 thinking 的耗时累计到下一次 tool call 或 assistant 输出,并在最新标题替换时使用短暂的从左到右逐字过渡。
/tool-output更名为/tools(旧命令保留为隐藏兼容别名),提供 Level 1 固定英文标题与最新调用分行展示、累计工具调用数,以及 Level 2 逐项详细显示,并持久化用户选择。- Provider 适配层重构为统一、类型化的
ModelRuntime与ProtocolBinding;Responses、Completions 和 Anthropic 的 wire request、缓存、流式解码、终止校验、重试及 one-shot 执行由各协议 adapter 与公共 runtime 协作处理。 - 精简模型、主题、语言、侧栏等常规设置成功后的 TUI 状态提示,保留错误、排队和需要用户处理的状态。
- Windows shell 命令优先使用 PowerShell 7(
pwsh.exe),不可用时依次回退到 Windows PowerShell(powershell.exe)和cmd.exe;选定结果在进程内缓存,缓存目标消失时重新探测。
Fixed
- TODO 在会话后续回合、回合中断和错误后保持可见,仅重置对应的自动续跑状态。
- 新建或恢复其他会话前会取消并等待当前子代理结束,避免旧会话结果进入新会话;仍在运行的当前会话不会被重复恢复。
- 上下文压缩会按摘要请求的实际 token 预算选择可安全压缩的历史前缀,避免摘要请求超限或退休未进入摘要的历史。
- Provider 请求失败时在 TUI、CLI 和 transcript 中保留经过凭据脱敏的响应详情,便于定位状态码之外的具体错误。
- Responses 请求使用与消息角色匹配的文本块,并正确序列化纯文本与图片工具结果。
- Responses reasoning summary 按
summary_index分隔并逐项更新 Thoughts Level 1,避免多个阶段标题直接拼接。 - Responses WebSocket 请求被关闭码
1009拒绝时保留诊断信息,并在已启用重试时将当前回合后续尝试切换到 HTTP/SSE。 - 主代理和子代理在模型重试等待期间持续显示实时倒计时,并在重试开始时立即清除通知。
- 首次打开子代理视图时加载完整 snapshot history,不再被此前收到的局部实时事件覆盖。
- 父会话与子代理视图切换时先提交待渲染输出,避免导航过程中遗漏子代理结果。
- Transcript writer 持有跨进程排他锁并在锁内重新校验序列,避免并发恢复或子会话修复造成重复写入和序号冲突。
- 配置热重载保持主会话 route catalog 与专家路由扩展隔离,避免专家模型影响当前主模型的解析。