Repository navigation
termany 针对windows的更新
快速上手
git diff 窗格的用法
- 第一个下拉菜单是 git worktree
- 第二个下拉菜单是分支 git branch
更新点
- files pane 在文件和文件夹上鼠标右键,可以弹窗菜单 Copy Relative Path,Copy Path
- git diff pane 支持显示和设置工作路径,工作路径默认搜素规则是最近有焦点的agent 窗格,terminal窗格,files窗格。忽略无效worktree路径(会引起crash)
- windows的进程查看器功能可用
- 修复列表不显示
- 端口获取 ipv4,ipv6
- 双击进程名弹出的窗口3个按钮功能修复
- windows menlo 字体内置
工作目录选取逻辑简化
我觉得现在的工作目录的确定逻辑太复杂了,找不到工作路径会将工作目录设置为Home目录(还需要手动改路径,如果是git diff 跳到home就直接显示当前路径无仓库了)
改成:
- 类似 tab 1 ,tab 2 这种标签页有一个工作路径的参数
- 之前显示 tab 1,tab 2的地方改成显示为工作目录的最后一个文件夹
- 双击可以设置工作目录(之前双击是修改 tab 的名字 )
- tab 对应的工作目录要能持久保持,关闭下次打开不丢失工作目录
具体改动:
- 每标签页(比如:tab 1)固定工作目录,取代窗格 cwd 锚点链
- 现在每个标签页都拥有一个固定的工作目录,新创建的窗格(终端、文件、Git Diff、Agent)将以此目录为起点;
- 标签页标题显示该目录的基名,双击标签可内联编辑路径(经服务端校验,"~" 会展开,留空则重置为家目录)。
- 该工作目录会随布局持久化保存,并在跨页面切换时跟随标签页。
- 原有的“每窗格 cwdFrom 锚点链”、cwdCandidates、标签页重命名以及 ACP 的 agentCwd 选择器均已移除;
- 服务端 spawn 接口现接受显式传入的 cwd 参数。
修复全局快捷键在特定场景下失效的问题
当存在浏览器 pane时,全局显示/隐藏 应用快捷键会失效。
原因:
is_webview_window 的定义(tauri-2.11.3/src/window/mod.rs:1160):
pub(crate) fn is_webview_window(&self) -> bool {
self.webviews().iter().all(|w| w.label() == self.label())
}webview_windows() 只返回“所有 webview 的 label 都等于窗口 label”的窗口。一旦主窗口挂了一个子 webview(浏览器 pane,label 是 web_...),主窗口就被 webview_windows() 剔除,于是 toggle_app_windows 看到 0 个窗
口,快捷键什么都不做。这同时还会破坏 target_window(托盘打开、quit 确认、open-paths)和 claim_page 的窗口提升。
修复方向:窗口管理逻辑改用 windows()/get_window()。查一下 lib.rs 里所有受影响调用点。
worktree 增强,修复agent启动判断逻辑
worktree 增强,创建worktree可以指定一个TODO.txt和一个执行脚本。 TODO.txt用来描述任务, 执行脚本用于初始化调试环境,比如复制.env.production。
worktree 删除操作兜底地址,文件夹为空则认为操作成功。
修复在终端输入kimi不生效的问题
Files pane 在空白处就可以弹出 New file...和 New folder...
优化worktree的删除速度 & agent 检测
git worktree remove是同步操作,pnpm install后很容易引起界面卡死,文件删一半等情况。改成直接冲命名文件夹,然后 git worktree prune,再异步慢慢删除文件夹 。
修复特殊情况下的agent检测:
- 打开终端,输入kimi,不显示状态灯。连续按2次Ctrl+C后,再次输入kimi,就可以出现状态灯。
- 用方向键输入kimi也不能显示状态灯。
创建 worktree时,可以自动执行仓库下的 .termany/setup.ps1或者setup.sh
因为每次创建 worktree,其实还需要拷贝一些测试用的 配置文件,数据文件,pnpm install等。
# .termany/setup.ps1文件举例
# 获取脚本所在目录的上级目录下的 frontend
param(
[string]$Prompt
)
$SourceRoot = Join-Path $PSScriptRoot "..\..\frontend"
function Copy-FileIfExists {
param (
[string]$Source,
[string]$Destination
)
if (Test-Path $Source) {
Copy-Item -Path $Source -Destination $Destination -Force
Write-Host "已拷贝文件: $Source -> $Destination"
} else {
Write-Warning "文件不存在: $Source"
}
}
function Copy-FolderIfExists {
param (
[string]$Source,
[string]$Destination
)
if (Test-Path $Source) {
# 如果目标已存在,先删除(可选,按需要保留)
if (Test-Path $Destination) {
Remove-Item -Path $Destination -Recurse -Force
}
Copy-Item -Path $Source -Destination $Destination -Recurse -Force
Write-Host "已拷贝文件夹: $Source -> $Destination"
} else {
Write-Warning "文件夹不存在: $Source"
}
}
# 当前工作目录(拷贝到此目录)
$DestRoot = Get-Location
Copy-FileIfExists `
-Source (Join-Path $SourceRoot ".env.production") `
-Destination (Join-Path $DestRoot ".env.production")
Copy-FolderIfExists `
-Source (Join-Path $SourceRoot "data") `
-Destination (Join-Path $DestRoot "data")
Copy-FolderIfExists `
-Source (Join-Path $SourceRoot "drizzle") `
-Destination (Join-Path $DestRoot "drizzle")
Write-Host "开始执行 pnpm install ..."
pnpm install
if ($LASTEXITCODE -eq 0) {
Write-Host "pnpm install 执行成功"
} else {
Write-Error "pnpm install 执行失败,退出码: $LASTEXITCODE"
}
# ---------------------------------------------------------------
# 以 --prompt 非交互方式启动 kimi,实时输出并捕获全部输出,
# 结束后从输出中解析 session id,然后用 kimi -r 进入交互模式。
# 用法: Invoke-Kimi -Prompt "你的提示词"
# ---------------------------------------------------------------
function Invoke-Kimi {
param (
[Parameter(Mandatory = $true)]
[string]$Prompt
)
# 启动 kimi --prompt,实时输出同时捕获(含 stderr)
$output = @()
try {
$output = kimi --prompt $Prompt 2>&1 | ForEach-Object { "$_" }
} catch {
Write-Error "Failed to start kimi: $_"
exit 1
}
$exitCode = $LASTEXITCODE
Write-Host "kimi exited: $exitCode"
# TODO: 从 output 中解析 session id
$allText = $output -join "`n"
$sessionId = $null
if ($allText -match 'To resume this session:\s*kimi\s+-r\s+(\S+)') {
$sessionId = $Matches[1]
}
if (-not $sessionId) {
Write-Error "没有找到 session id"
exit 1
}
Write-Host "Session ID: $sessionId"
Write-Host "进入交互模式..."
# 交互模式:直接调用,stdio 继承
kimi -r $sessionId
exit $LASTEXITCODE
}
if ([string]::IsNullOrWhiteSpace($Prompt)) { exit 0 }
Invoke-Kimi -Prompt $Prompt在git diff pane 的文件名前面增加了一个复制按钮
修复切换到其他程序,然后再回来终端可能显示空白的问题
增加翻译气泡,git history,快捷提示词发送
