Skip to content

windows version update

Latest

Choose a tag to compare

@laiqun laiqun released this 08 Aug 06:54
e121820

termany 针对windows的更新

快速上手

6d0708520d83331b0077366e31b5caaf

git diff 窗格的用法

image
  • 第一个下拉菜单是 git worktree
  • 第二个下拉菜单是分支 git branch

更新点

  • files pane 在文件和文件夹上鼠标右键,可以弹窗菜单 Copy Relative Path,Copy Path
image
  • git diff pane 支持显示和设置工作路径,工作路径默认搜素规则是最近有焦点的agent 窗格,terminal窗格,files窗格。忽略无效worktree路径(会引起crash)
image
  • windows的进程查看器功能可用
    • 修复列表不显示
    • 端口获取 ipv4,ipv6
    • 双击进程名弹出的窗口3个按钮功能修复
  • windows menlo 字体内置

工作目录选取逻辑简化

我觉得现在的工作目录的确定逻辑太复杂了,找不到工作路径会将工作目录设置为Home目录(还需要手动改路径,如果是git diff 跳到home就直接显示当前路径无仓库了)

改成:

  1. 类似 tab 1 ,tab 2 这种标签页有一个工作路径的参数
  2. 之前显示 tab 1,tab 2的地方改成显示为工作目录的最后一个文件夹
  3. 双击可以设置工作目录(之前双击是修改 tab 的名字 )
  4. 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 的文件名前面增加了一个复制按钮

有一个复制按钮可以快速把文件名复制给ai,少手打一串路径。
image

修复切换到其他程序,然后再回来终端可能显示空白的问题

增加翻译气泡,git history,快捷提示词发送

1111

支持外网访问

修复kimi,cloud code 预编辑光标位置不对导致界面上下左右跳动的问题