Repository navigation
Releases: paidaxingyo666/MeTerm
Releases · paidaxingyo666/MeTerm
Release list
v0.2.12
更新日志 / Changelog
新功能
- 「允许局域网连接」总开关 — 原「局域网发现」升级为局域网访问总开关,工具栏菜单、托盘菜单与设置 → 共享三处同步;关闭时二次确认并断开局域网直连会话,已配对设备记录与中继连接不受影响
- 「导出连接」升级为完整迁移包 — 导出改在原生层完成:密码 / 密钥 / 口令直接从系统凭据库读取写入文件,全程不经过界面层;完成后给出导出条数统计与缺失凭据提示;「导入连接」同步加严格式与字段校验
- 远程接入基础设施 — 内置自签 TLS、设备身份与中继隧道等基础能力,为后续移动端配套做准备;正式桌面构建默认不开放移动控制
问题修复 / 优化
- 修复连接 JumpServer 堡垒机报「No common algorithm」 — SSH 算法表不再随上游默认漂移:补齐
ssh-rsa主机密钥、ecdh-sha2-nistp256/384/521密钥交换、aes128-gcm与 SHA-1 HMAC(严格排在全部 SHA-2 之后)等兼容项;现代服务器协商结果不变,JumpServer 等老堡垒机 / 网络设备恢复可连,排序由单元测试锚定防回退 - macOS 终端从后台恢复后偶发字形错乱 — 窗口重新聚焦时重建渲染纹理并全量重绘;WebGL 上下文无法恢复时自动回退默认渲染器
- macOS 钥匙串授权弹窗收敛 — SSH 凭据改用免二次授权的钥匙串存储,连接与文件传输不再反复弹出系统授权窗
- 文件传输通道主机密钥校验收紧 — known_hosts 指纹不匹配一律拒绝(与终端会话行为一致,防中间人);仅在终端会话已验证信任的前提下允许算法差异回退
- AI 密钥入原生安全存储 — AI provider 与搜索服务的 API Key 交由原生凭据代理保管,密钥内容不再回传界面层
- 安全与供应链加固 — 依赖锁定与 SBOM 清单、构建 / 签名流水线隔离、组件统一审计,发布安全基线全面收紧
Changelog (English)
What's New
- "Allow LAN connections" master switch — the old "LAN Discovery" toggle is now a full LAN-access switch, kept in sync across the toolbar menu, tray menu, and Settings → Sharing; turning it off asks for confirmation and disconnects LAN-direct sessions, while paired-device records and relay connections are unaffected
- "Export Connections" now produces a complete, portable bundle — export runs natively: passwords / keys / passphrases are read from the system credential vault and written straight to the file without passing through the UI layer; you get a count summary plus warnings for entries with missing credentials, and import-side validation is stricter
- Remote-access foundations — built-in self-signed TLS, device identity, and relay tunneling lay the groundwork for the upcoming mobile companion; official desktop builds ship with mobile control disabled
Bug Fixes
- Fixed "No common algorithm" when connecting to JumpServer bastions — SSH algorithm preferences no longer drift with upstream defaults:
ssh-rsahost keys,ecdh-sha2-nistp256/384/521key exchange,aes128-gcm, and SHA-1 HMACs (strictly after all SHA-2 MACs) are appended for compatibility; negotiation with modern servers is unchanged, older bastions and network devices connect again, and unit tests pin the ordering - Fixed occasional glyph corruption after the macOS terminal returns from background — the renderer texture atlas is rebuilt and fully redrawn on window refocus; if the WebGL context cannot be restored, the terminal falls back to the default renderer
- Fewer macOS Keychain prompts — SSH credentials use no-reauthorization keychain storage, so connections and file transfers no longer trigger repeated system authorization dialogs
- Stricter host key verification on the transfer channel — a known_hosts fingerprint mismatch is now always rejected (matching terminal-session behavior, guarding against MITM); algorithm-gap fallback is allowed only when backed by the already-verified terminal session
- AI keys moved into native secure storage — API keys for AI providers and search services are held by a native credential broker and never returned to the UI layer
- Security & supply-chain hardening — dependency locking with SBOMs, isolated build / signing pipelines, and unified component auditing tighten the release security baseline
v0.2.11
更新日志 / Changelog
新功能
- macOS 代码签名 + 公证 — 使用 Apple Developer ID 对 App 与 DMG 签名并公证,下载后双击即可打开,不再需要手动解除隔离(
xattr -cr) - 访达右键「Open in MeTerm」 — macOS Finder 右键可直接用 MeTerm 打开所选目录(Finder Sync 扩展)
- 主页改为连接侧边栏 — 连接管理改为停靠式左侧侧边栏(悬浮可浮出菜单、不遮挡终端);应用启动默认打开本地终端
- 标签拖出独立窗口 — 标签可拖到窗口外新建独立窗口,带跟随预览
- AI 对话侧栏化 — AI 对话仅在侧边栏,agent 按钮移入工具栏,底部命令输入默认折叠
- 文件侧栏递归搜索 — 支持本地与 SFTP / JumpServer 递归搜索
- 面板增强 — 右键抽取为独立标签;拖动重排(中间替换 / 靠边插入);移动手柄激活时滑出面板标题
- 文件树「在访达 / 资源管理器中打开」 — 本地会话右键菜单
问题修复 / 优化
- 工具栏图标体系统一 — 按钮纯图标化,AI 文字图标,文件管理器侧栏式图标,左右图标大小与间距统一,标签栏与终端间距优化
- 面板区分更清晰 — 去掉激活面板外框,改为未激活面板内容暗化 + 可见分隔线
- 状态栏自动隐藏 — 空闲收起并回收占位
- 连接侧边栏跟随毛玻璃设置 — 关闭毛玻璃后显示实色
- Windows 本地搜索结果定位 — 修复路径分隔符不一致导致点击搜索结果无法定位、目录列错位
- Linux 拖拽预览透明 — 修复 GTK 下透明边距渲染为不透明方块
Changelog (English)
What's New
- macOS code signing + notarization — the app and DMG are signed with an Apple Developer ID and notarized, so downloads open on double-click with no manual quarantine removal
- Finder "Open in MeTerm" — right-click any folder in macOS Finder to open it in MeTerm (Finder Sync extension)
- Home is now a connection sidebar — a docked left sidebar (with a hover flyout) replaces the standalone home; a local terminal opens on startup
- Tear tabs into their own window — drag a tab out to create a separate window, with a live follow preview
- AI chat moved to the sidebar — the agent button lives in the toolbar; the bottom command input is collapsed by default
- Recursive file-sidebar search — across local and SFTP / JumpServer
- Pane enhancements — extract a pane into its own tab; drag to rearrange (center = swap, edge = insert); pane-title flyout on the move handle
- "Open in Finder / Explorer" in the file tree (local sessions)
Bug Fixes
- Unified toolbar icons — pure-icon buttons, AI text glyph, sidebar-style file-manager icon, consistent icon size & spacing, refined tab-bar/terminal gap
- Clearer pane separation — inactive panes dim + visible dividers (no focus border)
- Status bar auto-hides when idle and reclaims its space
- Connection sidebar follows the vibrancy setting (solid when disabled)
- Windows local search results now locate correctly (path-separator fix)
- Linux drag-preview transparency fixed
v0.2.10
更新日志 / Changelog
新功能
- 标题栏 JumpServer 图标增加显式操作入口 — 点击 toolbar 上的 JumpServer 图标会弹出已登录服务列表,每项末尾的 ⋯ 按钮提供「重新登录 / 退出登录」操作,右键整行也可呼出同一菜单。单连接与多连接交互完全统一,不再需要"对着图标右键找隐藏功能"
- AI Agent 网络瞬断自动短退避重试 — DNS 失败、TCP reset、TLS 握手错、连接中断、读超时等"请求根本没到服务端"的传输层错误,新分类为
network,自动以 1→2→4→8→10 秒退避重试最多 5 次(约 25 秒内自动恢复 WiFi 抖动 / 运营商瞬断 / VPN 切换)。重试时面板顶部出现网络异常,正在重试 (n/5)提示 - AI Agent 自动检测密码提示并预先显示等待卡片 — 当
run_command检测到 shell 输出的高置信度密码提示(如sudo Password:),前端立即挂出等待卡片让用户在终端中输入,不必等 LLM 回环再决策。卡片在用户敲下任意键时变绿、shell idle 后自动消失,agent 自动恢复
问题修复
- JumpServer 长时间无操作后无法重新连接 / 不弹 MFA — Rust 端
create_connection_token在所有候选 body 都收到 401/403 时会返回SESSION_EXPIRED:前缀,前端识别后自动调ensureJSAuthenticated(force=true)拉起 MFA,认证成功后自动重试一次 token。覆盖两条路径:终端 reconnect overlay、资产卡片"连接"按钮。其他错误(5xx / 网络 / token 空)保留原语义不会被误标为会话过期 - 退出登录后再连接报
HTTP 422: missing field 'password'—logoutJumpServer不再清 Keychain 凭据。语义重新定位:「退出登录」清会话(activeJumpServers / localStorage / 过期标记),「删除凭据」走配置编辑里的"移除连接"。这样退出后再点连接卡片可以直接用 Keychain 里的密码自动走 MFA - dropdown 重新登录无响应 / 凭据缺失时无补救路径 —
ensureJSAuthenticated的 fast-path 必须显式force=true才会重新认证;Keychain 也空时弹补输对话框,认证成功后才写回 Keychain(输错密码不再污染 Keychain),错误时带提示重新弹出对话框允许重试 - 快速双击资产卡片导致多个 MFA 对话框 —
connectToAsset全局inFlightConnectsSet 防重入(同一 config+asset+account 并发请求只跑一次),listener 用await串行化,popup 按钮 click 后 disable 1.5s,dblclick 卡片用 dataset 锁 - dropdown 点 ⋯ 时父级服务列表消失 — 子菜单浮层叠在 dropdown 上方,dropdown 不关闭;登出后 dropdown 通过
jumpserver-auth-changed事件自动关闭,避免点击已登出项报错 - 重新登录后状态栏一直显示「呼吸中」 —
ensureJSAuthenticated成功路径补设setConnection('connected', ...),调用方有 SSH 阶段会再次覆盖
What's New
- Explicit JumpServer Actions in the Toolbar Dropdown — Clicking the toolbar JumpServer icon now always shows the dropdown of signed-in connections (single or multiple). Each item has a trailing ⋯ button (and a right-click target on the whole row) exposing "Sign in again" / "Sign out". No more hidden right-click-on-the-icon trick — the entry point is consistent and discoverable
- AI Agent Short-Backoff Retry for Transient Network Errors — DNS / TCP reset / TLS handshake / connection closed / read timeout — i.e. transport-level errors that never round-tripped — are now classified as
networkand auto-retried with 1→2→4→8→10s backoff up to 5 times (≈25s, enough to ride out WiFi flaps, carrier hiccups, VPN reconnects). The chat panel surfaces "Network blip, retrying (n/5)" while it backs off - Pre-emptive Wait Card on Auto-Detected Password Prompts — When
run_commandsees a high-confidence password prompt in the shell output (e.g.sudo Password:), the wait card pops up immediately so the user can type in the terminal — no LLM round-trip required. The card turns teal the moment the user types, then auto-dismisses on shell-idle and the agent resumes
Bug Fixes
- Stuck JumpServer Reconnect After Long Idle — No MFA Prompt — When the JumpServer session cookie has quietly expired and the user clicks "Reconnect" on a terminal overlay (or "Connect" on an asset card), the Rust
create_connection_tokennow flags an all-401/403 outcome with aSESSION_EXPIRED:prefix. The frontend catches the typed error, force-triggersensureJSAuthenticated(which fires the MFA dialog) and retries the token once on success. 5xx / network / empty-token failures keep their original meaning and won't be mis-bucketed as session-expired HTTP 422: missing field 'password'After Sign-out then Reconnect —logoutJumpServerno longer wipes Keychain credentials. Semantics split: "Sign out" clears the session (active map, localStorage mirror, expired flag); "Remove connection" in settings is what actually purges secrets. After signing out the user can click the connection card and re-authenticate using the Keychain password + MFA without re-entering anything- Dropdown "Sign in again" Did Nothing / No Recovery When Keychain Is Empty —
ensureJSAuthenticated's fast-path now requires explicitforce=trueto skip; when Keychain has nothing on file, a credential-prompt dialog asks the user, and the secret is only written back to Keychain after authentication succeeds — wrong passwords no longer poison Keychain. Auth failures re-open the dialog with the error message inline so the user can retry - Double-clicking an Asset Card Spawned Multiple MFA Dialogs —
connectToAssetnow has a process-wideinFlightConnectsset (one connection perconfig + asset + accountkey), the IPC listener awaits each call, the popup connect button disables for 1.5s after click, and dblclick cards use a dataset lock — triple-layer guard - Dropdown Vanished When You Pressed ⋯ — The submenu now floats on top of the dropdown instead of replacing it; on sign-out the dropdown closes itself via the
jumpserver-auth-changedevent so the user can't click a stale entry - Status Bar Stayed in the "Breathing" Connecting State After Re-auth —
ensureJSAuthenticatednow closes its ownconnectingstate withsetConnection('connected', ...)on success; callers that follow up with SSH will override this as usual
v0.2.9
更新日志 / Changelog
新功能
- Plan 任务计划面板浮在对话输入框上方 — 任务计划从聊天消息流里拿出来,作为独立的 liquid-glass 卡片悬浮在 AI 对话面板底部、紧靠输入框。Apple 风丝滑动画:入场从底部滑起 + 淡入;进度条 cubic-bezier 平滑填充;项目状态 icon 跳变(pending→in_progress→completed);当前运行项有横向 shimmer;全部完成后高亮 3 秒(绿色庆祝)再滑回。视觉与对话面板 liquid-glass 风格一致——两侧 inset、四角圆角、毛玻璃背景,像是从对话框里抽出来的小卡片
问题修复
- 错误分类器误将「模型不存在」当作「工具不支持」永久降级 — 之前只要 LLM 错误消息含「not supported」就把 agent 永久标记为
toolsSupported=false。结果 Claude 那条Not supported model X的 400 错误会让所有后续模型(包括同会话切到 MiMo / Qwen3 等)都被切到 chat-only 模式,导致 Qwen 家族的模型把<tool_call>当作纯文本输出。改为必须同时出现「tool/function」+「not supported/unsupported/unrecognized」才归类为工具不支持 - 切换模型后仍卡在「无工具」模式 —
ToolAgent新增lastResolvedModel字段;runLoop 检测到模型变了就重置toolsSupported,让换到正常模型能恢复工具使用 - Plan UI 任务执行中看不到、做完才突然出现 — 老逻辑里 plan board 和 tool card 都
appendChild到 chat-messages 末尾,每张 tool card 都把 board 顶上去;只有模型最后一次todo_write才把 board 重新拉回底部并滚动到底,所以「任务完成才看到」。新设计把 board 移出 messages 滚动流,作为 chat panel 的直接子元素位于消息区与输入框之间,任务进行中始终可见
What's New
- Plan Board Floats Above the Chat Input — The task plan is no longer inline inside the message stream. It's now a separate liquid-glass card pinned to the bottom of the chat panel, right above the input bar. Apple-smooth animations: slide-up + fade entry, cubic-bezier progress fill, item-status icon spring (pending→in_progress→completed), horizontal shimmer on the currently-running item, 3s green celebration on full completion then slide-back. The visual style mirrors the chat panel — inset sides, rounded corners, frosted glass — so it reads as a drawer pulling out of the dialog itself
Bug Fixes
- Error Classifier Misread "Model Not Found" as "Tool Unsupported" — Any LLM error containing "not supported" was bucketed as
tool_unsupported, permanently flippingtoolsSupported=falsefor the rest of the conversation. So a singleNot supported model X400 from one model would silently disable tools on every subsequent model in the same session, forcing Qwen-family models (MiMo / Qwen / GLM) to emit inline<tool_call>text. Now requires "tool / function" AND "not supported / unsupported / unrecognized" to co-occur - Stuck in Tools-Off Mode After Model Switch —
ToolAgentnow trackslastResolvedModel; when runLoop sees a different model than last time it resetstoolsSupported, giving the new model a fair chance to use tools - Plan UI Only Visible After Task Completed — Old behavior: both the plan board and every tool card got
appendChild'd to.ai-chat-messages, so tool cards kept pushing the board out of view. The plan was only re-anchored to the bottom when the model calledtodo_writeagain — typically at task end. The new design moves the board out of the scrolling message stream and into a fixed slot at the chat panel's bottom, keeping it visible throughout execution
v0.2.8
更新日志 / Changelog
新功能
- AI 思考模式开关 — 设置面板新增「思考模式」总开关,AI Bar / 侧面板新增脑图标快速切换;启用时向请求体注入
thinking.type/enable_thinking/chat_template_kwargs.enable_thinking三种字段,覆盖 DeepSeek V4 / Qwen3 / GLM / MiMo / vLLM 等思考模型;本轮对话中途切换无须重连,未知字段被 OpenAI / Anthropic / Gemini 忽略 - SSH 无凭据连接 — 选「密钥」认证、密钥路径留空时走 OpenSSH 风格梯子:先
$SSH_AUTH_SOCK(ssh-agent) 轮询所有 identities,再按id_ed25519 → id_ecdsa → id_rsa → id_dsa顺序试默认密钥。成功后底部 toast 提示实际走的路径 - SSH 私钥文件选择器 — 密钥输入框旁新增浏览按钮,原生文件对话框,默认起始
~/.ssh/ - SSH 动态提示 — 切到密钥模式时检测默认密钥与 ssh-agent 状态:placeholder 显示「留空将自动使用 ~/.ssh/id_ed25519」或「留空将通过 ssh-agent 认证」;agent 有身份时显示
agent: N徽章 - JumpServer 连接反馈即时化 — 点击资产后 tab + 占位符立即出现(之前要等 token API 返回才出,资产慢时会等 1-3 秒);占位符按阶段更新文案:正在认证 → 正在获取连接令牌 → 正在连接 user@host
问题修复
- AI 调用 400「reasoning_content must be passed back」 — Qwen3 / DeepSeek V4 等思考模型要求带 tool_calls 的 assistant 必须回传 reasoning_content。前端在流式累积 reasoning、序列化时强制带回(空也带空串),符合官方文档要求
- SSH 私钥路径无法连接 — 前端发的是路径但 Rust 后端直接当 PEM 解析必败;补回 Go 后端迁移漏掉的
~展开 + HOME 沙箱 + 文件读取逻辑,russh 终端 / ssh2 SFTP 两条路径都修 - JumpServer SFTP 无法初始化 — Koko 的连接 token 按 protocol 隔离且常为单次使用,第二条独立 SSH 连接被拒。改为在已认证的终端 session 上起 sftp 子通道(multiplex),普通 SSH 仍走独立连接保留传输性能;SFTP 初始化失败时把具体原因带回前端
- JumpServer 侧边栏文件树加载慢 — 三因叠加:
loadDirectoryRaw没传soft_limit:5000大目录一次性拉数万条、没用上现有 dirCache、fm.currentPath==='/'被误判为「未加载」导致根目录就是 home 的资产永远等不到首次事件 - JumpServer 侧边栏不跟随 auto-cd —
FileManager.onPathChanged从单回调改成订阅者集合,sidebar 长期 follower 跟随 FM 的路径变化;面包栏手动输入或锁定时停止跟随 - 重命名报「Invalid filename」 —
renameFileAPI 改了支持绝对路径但校验没跟着改必拒;改为只校验 basename - 侧边栏树重命名 1-2 秒空白 — sidebar 模式下 drawer 的「重命名中...」overlay 被隐藏,用户无反馈;新增乐观更新:按 Enter 立刻在树里改名,服务端响应回来 refreshAll 自然吻合;失败时也派发事件自动回滚
- 树移动文件后展开节点闭合 —
refreshAll把 expansion 快照捕获放在第一个 await 之后,并发 refresh 时读到的是被另一个调用清掉的空 nodeMap;快照挪到 await 之前 + 删除onMove里冗余的 setTimeout refreshAll
What's New
- AI Thinking Mode Toggle — New global toggle in settings + quick brain-icon toggle in AI Bar / side panel. When on, the request body carries
thinking.type/enable_thinking/chat_template_kwargs.enable_thinkingso thinking-mode models (DeepSeek V4, Qwen3, GLM, MiMo, vLLM) reason before answering. Mid-conversation switching needs no reconnect; plain OpenAI / Anthropic / Gemini silently ignore the extras - SSH Connect Without Credentials — Pick "Key" auth and leave the path empty: the client walks the OpenSSH ladder —
$SSH_AUTH_SOCK(ssh-agent) first, thenid_ed25519 → id_ecdsa → id_rsa → id_dsadefaults. A toast confirms which path actually succeeded - SSH Private-Key File Picker — Browse button next to the key input opens a native dialog rooted at
~/.ssh/ - SSH Dynamic Hints — Switching to key mode probes both the default key and ssh-agent: the placeholder shows "Leave empty: auto (~/.ssh/id_ed25519)" or "Leave empty to use ssh-agent"; an
agent: Nbadge appears when the agent has identities loaded - JumpServer Connect Feedback Made Instant — Clicking an asset now creates the tab + placeholder immediately (previously waited 1-3s for the token API). The placeholder narrates each stage: authenticating → requesting token → connecting user@host
Bug Fixes
- AI 400 "reasoning_content must be passed back to the API" — Qwen3 / DeepSeek V4 require
reasoning_content(even empty) on any assistant turn carryingtool_calls. Frontend now accumulates streamed reasoning and always echoes it back on serialization, matching the official spec - SSH Private-Key Path Couldn't Connect — Frontend sends a path but Rust was decoding the path string as PEM. Restored the Go-era
~expansion + HOME sandbox + file read for both the russh terminal path and the ssh2 SFTP path - JumpServer SFTP Failed to Initialize — Koko's connection tokens are protocol-scoped and often single-use, so a second SSH connection authenticated with the same
JMS-{token}got rejected. Now multiplexes SFTP as a sub-channel on the already-authenticated terminal session; plain OpenSSH keeps the dedicated-connection optimization. SFTP init failures now report the actual reason instead of a generic "retry" - JumpServer Sidebar Tree Slow — Three compounding causes:
loadDirectoryRawlackedsoft_limit:5000, the existing dirCache wasn't consulted, andfm.currentPath==='/'was misread as "not loaded yet" — so assets whose home IS the root waited forever for a first event - Sidebar Didn't Follow JumpServer Auto-CD —
FileManager.onPathChangedswitched from a single-callback to a subscriber set; the sidebar registers a long-lived follower that mirrors FM's current path until the user manually navigates or locks - Rename Said "Invalid filename" —
renameFile's API was extended to accept absolute paths but the validation wasn't, so every absolute path failed. Validation now checks the basename only - Sidebar Tree Rename Had a 1-2s Blank — In sidebar mode the drawer's "重命名中..." overlay is hidden, so the user had no feedback while the post-rename refresh was in flight. Added optimistic update: Enter applies the rename to the visible tree immediately; on server failure a file-op-done event reverts
- Move Collapsed Expanded Nodes —
refreshAllcaptured its expansion snapshot after the first await, so two concurrent refreshes (the file-op-done event + the move handler's setTimeout) raced and one of them read an empty nodeMap. Snapshot moved before any await, and the redundant setTimeout was removed
v0.2.7
更新日志 / Changelog
新功能
- JumpServer 会话过期处理 — 全链路会话过期识别与恢复:资产面板 banner、pop-out 窗口引导回主窗口、面板 header 右键菜单(重新登录 / 退出登录)、toolbar 下拉项右键菜单、掉线重连前置过期/登出检查
- JumpServer SFTP 认证自愈 — 凭据失效时自动刷新并恢复传输;新增 SFTP 凭据刷新 HTTP 端点;错误分类细化(`SFTP_AUTH_FAILED` / `SESSION_EXPIRED`),分类器覆盖上传/下载嵌套 error 字段
- AI Agent 中文化 — 工具卡名称中文显示(`run_command` → 运行命令、`read_terminal` → 读取终端、`todo_write` → 更新计划等 19 项),任务计划状态中文化(待办 / 进行中 / 已完成),`wait_for_user_input` 状态文案中文化
- 任务计划 UI 优化 — 宽度对齐工具卡片,padding/字号/边距收紧,去掉状态徽章 uppercase 防中文挤压
- 文件管理器右键菜单优化 — "刷新"提到一级菜单;自定义右键菜单(Tab/Shell/文件链接)补齐高斯模糊样式
- 文件名校验放宽 — 支持 Linux/SFTP 合法字符(含括号、空格等 POSIX 文件系统允许的字符)
问题修复
- 更新重启被退出确认对话框拦截 — 修复点击"立即重启"后被退出确认弹窗拦截导致更新不生效
- 终端粘贴图片被 AI Bar 全局捕获 — 修复在终端 Cmd/Ctrl+V 粘贴时,AI Bar 错误地从系统剪贴板拉取图片附加到聊天
- 任务计划 UI 被挤压消失 — 修复长聊天中 plan board 被后续消息挤压到 0 高
- 思考块泄漏 XML 标签碎片 — 过滤 `` / `</arg_value>` 等流式残片,历史压缩切到换行边界减少 dangling 片段
- 树视图右键新建文件夹路径错乱 — 修复对话框停留过久后 contextPath 5 秒超时漂移导致目录创建到错误位置;新建后自动展开父目录立即显示
What's New
- JumpServer Session Expiry Handling — End-to-end session-expired detection: asset panel banner, pop-out window redirect, header & toolbar context menus (relogin/logout), pre-check before reconnect
- JumpServer SFTP Auth Self-Healing — Auto refresh stale credentials; new SFTP credential refresh HTTP endpoint; finer error classification (`SFTP_AUTH_FAILED` / `SESSION_EXPIRED`), classifier covers nested error fields in upload/download
- AI Agent Localization — Tool cards display localized names (`run_command` → 运行命令, etc., 19 entries); task plan statuses (pending / in progress / completed → 待办 / 进行中 / 已完成); wait_for_user_input status text localized
- Task Plan UI Polish — Width matched to tool cards, tighter padding/font/margins; status pill no longer uppercased (preserves CJK glyphs)
- File Manager Context Menu Polish — "Refresh" hoisted to top level; custom context menus (Tab/Shell/file links) gain backdrop blur
- Relaxed Filename Validation — Allow brackets, spaces and other characters legal on Linux/SFTP
Bug Fixes
- Updater Restart Blocked by Quit Confirmation — Restart on update no longer intercepted by the close-confirm dialog
- Terminal Paste Captured by AI Bar Globally — Cmd/Ctrl+V in the terminal no longer pulls a screenshot from the system clipboard into the AI bar
- Plan UI Squeezed Off-Screen — Plan board no longer collapses to 0 height as the chat grows
- Reasoning Block Leaked XML Fragments — Stripped stray `` / `</arg_value>` tokens; history compression snaps to newline boundaries
- Tree-View New-Folder Path Drift — Captured parent path before async modal so it can't drift from contextPath 5s timeout; auto-reveal parent after create
v0.2.6
更新日志 / Changelog
新功能
- Neo-Brutalism 可选主题 — 含圆角变体 + 11 套预设配色(赛博朋克/深渊/薰衣草/午夜/糖果/复古/极光/德古拉/曝光/纯黑系列)+ 自定义调色板,支持跨窗口实时同步
问题修复
- SSH 锁屏恢复后 OSC 颜色查询回显 — 修复锁屏恢复后 OSC 10/11/12 查询响应泄漏为可见字符
What's New
- Neo-Brutalism Theme (Optional) — Rounded variant + 11 preset palettes (Cyberpunk, Abyss, Lavender, Midnight, Candy, Retro, Aurora, Dracula, Exposure, Pure Black series) + custom color picker with real-time cross-window sync
Bug Fixes
- OSC color query echo after screen lock — Fixed OSC 10/11/12 query responses leaking as visible characters after macOS screen lock
v0.2.5
更新日志 / Changelog
新功能
- Agent 系统重构 — 全新 AsyncGenerator 驱动的 agentic 循环,三级上下文压缩(MicroCompact / AutoCompact / TrimHistory),智能工具编排(只读工具最多 5 并发),错误分类独立退避重试,完整 JSONL 审计日志
- Agent 任务规划 — 新增
todo_write工具,复杂任务自动拆解为步骤列表;聊天面板实时渲染 TodoBoard 卡片(进度条 + 状态标记 + 折叠展开),会话恢复时自动重建 - Agent 文件传输 — 新增
upload_file/download_file工具,复用应用原生 SFTP 链路(独立 64MB SSH 窗口),无大小限制,支持断点续传与进度报告 - Agent 结构化搜索 — 新增
list_directory/glob_search/grep_search工具,本地走 Rust(walkdir + globset + regex),SSH 走 shell 回退,自动跳过 .git/node_modules 等目录 - 通用文件附件 — 聊天框支持拖拽或选择任意类型文件(不限图片),自动落盘并将路径注入 Agent 系统提示,Agent 可直接
upload_file到服务器 - Agent 多面板感知 — 单 tab 最多 4 个 pane,所有终端工具支持
pane: N参数跨面板操作;对话状态改为 tab 级共享 - Agent 权限系统 — 三级信任模式(ask / acceptSafe / acceptAll)+ 规则引擎 + Plan 模式(仅允许只读工具)
- Agent 截屏工具 — 新增
read_screen捕获终端 PNG 截图,TUI 程序(vim/htop/less)检查更准确 - Per-session PTY 锁 — 同一 SSH 会话的并行工具调用自动串行化,防止 PTY 命令流交叉污染
- 文件管理器大目录优化 — 虚拟滚动 + 详情弹窗 + 符号链接修复,大目录(万级文件)不再卡顿
- 内置编辑器增强 — Markdown 实时渲染、图片预览、自动换行
- 终端字体快捷键 — Cmd/Ctrl+= 放大、Cmd/Ctrl+- 缩小、Cmd/Ctrl+0 重置
- AI 对话侧栏模式 — 液态玻璃 UI + Markdown 渲染增强
- 终端字体增强 — 新增字体选项、字重控制、文字锐化
- 审计日志 — 改用系统文本编辑器打开
- SFTP 高速传输 — 双通道 WebSocket + 并行传输 + 内存优化
问题修复
- macOS 全屏红绿灯 — 全屏模式下移除红绿灯预留空间并禁用毛玻璃
- PiP 侧边栏冲突 — 进入画中画时仅对活跃 tab 侧边栏执行动画,避免多 tab 侧边栏 DOM 同时出现
- Agent 工具卡片 — 改用 overlay 滚动条并对齐消息宽度
- 分割面板闪烁 — 修复多面板命令高亮闪烁 + 分割面板虚假滚动条
- 侧边栏拖拽 — 修复拖拽上传坐标偏移与高亮残留;拖入面包屑自动锁定
- 附件校验 — 空文件 / 超大文件 / 目录 / 重复文件均有 toast 反馈
- AI 弹窗毛玻璃 — 修复弹窗透出终端内容
- Shell Hook — hookless 模式下选中高亮仅覆盖命令区域
- 锁屏恢复 — 修复 TUI 鼠标模式丢失及内容不完整
- JumpServer — 修复 v2 资产浏览器平台字段不显示
- SFTP 符号链接 — 修复创建参数顺序 + 编辑保存不再破坏符号链接
What's New
- Agent System Overhaul — New AsyncGenerator-driven agentic loop with 3-tier context compression, smart tool orchestration (up to 5 read-only tools in parallel), classified error retry, and full JSONL audit logging
- Agent Task Planning — New
todo_writetool auto-decomposes complex tasks into a step-by-step plan; live TodoBoard card in chat (progress bar + status markers + collapse/expand), auto-restored on session reload - Agent File Transfer — New
upload_file/download_filetools reusing the app's native SFTP pipeline (dedicated 64MB SSH window), no size limit, with resume and progress reporting - Agent Structured Search — New
list_directory/glob_search/grep_searchtools; local paths use Rust (walkdir + globset + regex), SSH paths fall back to shell commands; auto-skips .git/node_modules/target/dist - Generic File Attachments — Chat input accepts drag-drop or file-picker for any file type (not just images); files are persisted to disk and their paths injected into the agent's system prompt for direct use with
upload_file - Agent Multi-pane Awareness — Up to 4 panes per tab; all terminal tools accept
pane: Nfor cross-pane targeting; conversation state is now shared per-tab - Agent Permission System — 3-tier trust modes (ask / acceptSafe / acceptAll) + regex rule engine + Plan mode (read-only tools only)
- Agent Screen Capture — New
read_screentool captures terminal as PNG screenshot for accurate TUI inspection (vim, htop, less, etc.) - Per-session PTY Lock — Parallel tool calls on the same SSH session are automatically serialized to prevent PTY command stream corruption
- File Manager Large Directory Support — Virtual scrolling + detail popup + symlink fixes; directories with 10,000+ files no longer lag
- Built-in Editor Enhancements — Live Markdown rendering, image preview, word wrap
- Terminal Font Shortcuts — Cmd/Ctrl+= zoom in, Cmd/Ctrl+- zoom out, Cmd/Ctrl+0 reset
- AI Chat Side Panel Mode — Liquid Glass UI + enhanced Markdown rendering
- Terminal Font Enhancements — New font options, weight control, text sharpening
- Audit Log — Now opens in system default text editor
- High-speed SFTP — Dual-channel WebSocket + parallel transfers + memory optimization
Bug Fixes
- macOS Fullscreen Traffic Lights — Remove traffic light reserved space and disable vibrancy in fullscreen mode
- PiP Sidebar Conflict — Only animate the active tab's sidebar when entering PiP; prevents multiple tab sidebars from appearing simultaneously
- Agent Tool Cards — Use overlay scrollbar and match message bubble width
- Split Pane Flickering — Fix cross-pane command highlight flicker + phantom scrollbar in split panes
- Sidebar Drag & Drop — Fix upload cursor offset and stale highlight; auto-lock on breadcrumb drop
- Attachment Validation — Empty files, oversized files, directories, and duplicates now show toast feedback
- AI Popup Frosted Glass — Fix transparency leaking terminal content
- Shell Hook — Hookless mode highlight covers command area only, excludes prompt
- Screen Lock Recovery — Restore TUI mouse tracking and content after screen lock/unlock
- JumpServer — Fix v2 asset browser platform field not displayed
- SFTP Symlinks — Fix symlink creation arg order + preserve symlinks on file save
v0.2.4
更新日志 / Changelog
新功能
- 文件管理器大幅增强 — 面包屑导航、键盘导航、文件搜索、多选操作、chmod 权限修改(17 种常用预设一键应用)、书签收藏、传输限速控制、传输完成通知、远程文件复制/移动、文件预览、符号链接支持、文件格式化(JSON/XML/HTML/CSS)、右键菜单增强(空白区域支持+显示隐藏文件)、批量上传冲突支持全部覆盖/跳过、删除确认显示 rm 命令
- AI 侧栏面板 — 全新 AI 对话框侧栏模式,液态玻璃 UI,Markdown 渲染增强
- 终端字体增强 — 新增多款编程字体、字重控制、文字锐化选项
- 服务器信息卡片 — 紧凑卡片模式、工具栏图标化、AI 输入框占位提示动态化
- 缩略图开关 — 可关闭缩略图预览以节省内存
问题修复
- SSH 连接超时优化 — 新增 TCP 连接超时和不可达弹窗提示
- 锁屏恢复 — 修复锁屏恢复后 TUI 鼠标模式丢失及内容不完整
- SFTP 符号链接 — 修复符号链接创建参数顺序,编辑保存不再破坏符号链接
- 终端 URL 链接 — 修复点击终端内链接无法打开系统浏览器的问题
- SSH click-to-move — 修复 SSH 会话下点击移动光标乱码及命令区定位偏移
- 空文件下载 — 修复 0 字节文件下载卡在 0% 的问题
- PowerShell Agent — 修复 PowerShell 下 Agent 命令执行 ^U 回显问题
- JumpServer 连接池 — 仅在代理模式真正改变时才清空连接池
- Linux 自动更新 — 补充生成 Linux updater 产物(AppImage.tar.gz + sig)
What's New
- File Manager Overhaul — Breadcrumb navigation, keyboard navigation, file search, multi-select, chmod with 17 presets, bookmarks, speed limit, transfer notifications, remote copy/move, file preview, symlink support, file formatting (JSON/XML/HTML/CSS), enhanced context menu (blank area + hidden files), batch upload conflict resolution, delete confirmation with rm command
- AI Side Panel — New AI chat sidebar mode with Liquid Glass UI and enhanced Markdown rendering
- Terminal Font Enhancements — Added new programming fonts, font weight control, and text sharpening
- Server Info Cards — Compact card layout, icon toolbar tabs, dynamic AI bar placeholder
- Thumbnail Toggle — Option to disable thumbnail preview to save memory
Bug Fixes
- SSH Connection Timeout — Added TCP connect timeout and unreachable error dialog
- Screen Lock Recovery — Restored mouse tracking and TUI content after screen lock
- SFTP Symlinks — Fixed symlink creation argument order, file save no longer breaks symlinks
- Terminal URL Links — Fixed clicking terminal links to open in system browser
- SSH Click-to-Move — Fixed garbage output in SSH sessions and command area positioning
- Empty File Download — Fixed 0-byte file download stuck at 0%
- PowerShell Agent — Fixed ^U echo issue when executing agent commands in PowerShell
- JumpServer Pool — Only clear client pool when proxy mode actually changes
- Linux Auto-Update — Added Linux updater artifact generation (AppImage.tar.gz + sig)
v0.2.3
更新日志 / Changelog
新功能
- 命令区拖拽选中编辑 — 在命令区拖拽选中文本后可直接删除、替换、剪切、复制
- 点击移动光标 — 基于 OSC 7768 语义提示符,点击命令行任意位置精确移动光标
- OSC 序列全面增强 — 支持 OSC 52 剪切板穿透、OSC 8 超链接、OSC 133 语义提示符拦截、图片协议(Sixel/iTerm2)及 Unicode 11
- Linux 正式支持 — 新增 Linux 构建(deb/AppImage/rpm),支持 amd64 和 arm64,已在 Ubuntu 24.04 上测试
问题修复
- 修复 macOS 中文输入法首次按键丢失 — WKWebView 非 composing 字符首次按键无效
- 修复 Tab 拖拽创建新窗口时 viewer 胶囊误显示及弹窗位置被遮挡
- 修复终端会话销毁时资源泄漏 — 补全 destroy/detach 清理逻辑
- 修复 Web Viewer 会话列表不显示 — 补全 executor_type 字段并修正 created_at 格式
- 修复 CI 缓存导致 Web Viewer 嵌入旧版前端 — build.rs 追踪 frontend/dist 变化
- 修复 SSH 文件管理多文件上传卡 99% 及大文件夹删除问题
What's New
- Drag-to-select editing in command area — Delete, replace, cut, and copy selected text by dragging in the command input area
- Click-to-move cursor — Click anywhere on the command line to precisely move the cursor, powered by OSC 7768 semantic prompts
- Comprehensive OSC enhancements — OSC 52 clipboard passthrough, OSC 8 hyperlinks, OSC 133 semantic prompt interception, image protocol (Sixel/iTerm2),
and Unicode 11 - Linux official support — New Linux builds (deb/AppImage/rpm) for amd64 and arm64, tested on Ubuntu 24.04
Bug Fixes
- macOS Chinese IME first keypress lost — Fixed WKWebView dropping non-composing characters on first input
- Tab drag-out: viewer capsule false positive and popup clipping
- Terminal session resource leak on destroy/detach
- Web Viewer sessions not appearing — Fixed missing executor_type and invalid created_at format
- CI cache serving stale Web Viewer frontend — build.rs now tracks frontend/dist changes
- SSH file manager multi-upload stuck at 99% and large folder deletion