@celljs/ta-workspace
Ta 自带的 pi 包:ta serve 的 web 客户端中会话的工作区,以 IDE 工具的形式显示在对话旁的工作台中。
| 视图 | 功能 |
|---|---|
| 资源管理器 | 会话目录的文件,带有 VS Code 的文件图标、git 的颜色和字母(文件夹显示其内部的更改,被忽略的文件变暗)并缩进指南;它遵循显示的标签页。单击打开文件作为预览标签页(下一个预览替换它),双击保留它:Markdown、HTML、图像、视频、声音和 PDF 作为预览,其余的在 Monaco(pi.ui.CodeEditor)中,用 Ctrl+S 或 Cmd+S 保存。新建文件和文件夹(a/b.ts 创建文件夹)、就地重命名和删除,带有 VS Code 的名称检查;右键菜单有复制路径和相对路径、在文件夹中查找、上传文件或文件夹、下载(文件夹在页面里打包成 zip);在 Ta 桌面版里,本机目录还可以在 Finder 中显示(Windows 上是文件资源管理器,Linux 上是文件管理器,pi.ui.desktop)。把一项拖到文件夹上即移到那里(悬停在关着的文件夹上会展开),把系统里的文件或文件夹拖进树里即上传,拖到输入框成为 @ 引用、拖到终端输入它的路径(pi.ui.fileDrag);树的按键(箭头、Home/End、F2 或 Mac 上的 Enter、Delete) |
| 打开的文件 | 此包打开的文件和更改的标签页,显示的被标记;关闭、关闭其他、关闭下方、在资源管理器中显示 |
| 搜索 | 文件中的文本(ripgrep、git grep 或 grep,机器有哪个就用哪个):匹配大小写、全词、正则表达式(其错误显示)、要包含和排除的文件(逗号分隔的 glob,一个文件夹包含其内部所有文件);一行的每个匹配都是一个结果,在它上面打开选中的文件。替换一个、在一个文件中或全部(用 $1 表示组),变更显示在每个结果上;关闭结果(一个文件或文件夹);全部折叠和展开;结果作为列表或文件夹树 |
| 源代码管理 | 分支及其领先和落后的情况,提交消息的框(Ctrl+Enter 或 Cmd+Enter;没有暂存任何东西时提供暂存全部),合并变更、暂存的变更和变更,作为列表或树;暂存、取消暂存和放弃一个文件或组(放弃询问;对于未跟踪的文件它删除)、拉取、推送和获取。不暂存的变更在 Monaco 的 diff 编辑器中打开,并排或内联,未更改的行折叠;不暂存的变更可以在那里编辑并保存 |
| 终端 | 会话机器上的 shell,在一个标签页中;第一个与它一起打开;它们在丢失连接后存活 30 秒。从资源管理器拖进来的文件输入为它们的路径,按 shell 的规则加引号 |
| 浏览器 | 其标签页中的页面,例如 agent 启动的开发服务器:后退、前进、重新加载和一行中的地址,页面加载时的一条线;如果还没有的话,带有最近打开的地址(用其 × 删除一个)的起始页,或开发服务器采用的端口。Ta 本身的来源的页面在没有 allow-same-origin 的情况下运行,因此无法到达页面或其令牌。在其他机器的目录里(ssh://),页面里的 localhost 是那台机器的:它的端口在 ta serve 所在的机器上打开(pi.remote.forwardPort),地址栏保留输入的地址。在 Ta 桌面版里(pi.ui.supportsWebview),页面是 <webview> 而不是 iframe:网站不能拒绝被打开,登录可用且会保留(独立分区),后退前进跟随页面,地址栏显示标题和图标、加载中可停止,加载失败或页面崩溃时提示并可重试,右键菜单、浏览器快捷键和开发者工具由应用提供。Agent 在那里用 browser 工具(pi.ui.debugWebview)操作同一个网页:打开、后退、前进、刷新;读取无障碍树快照,可操作的元素带编号(ref);点击、输入、按键、滚动;截图(数据 URL,交给 codemode 的 image());执行脚本、等待,以及任意只作用于该网页的 DevTools 协议命令。编号只对最近一次快照所在的页面有效。Agent 操作时浏览器会显示出来,地址栏旁标明“Ta 正在操作”;输入文字不占用键盘焦点,点击或按键之后焦点回到用户原来输入的地方。起始页可以导入登录状态(pi.ui.desktop.browserData,macOS 和 Windows):选择 Chrome、Edge、Brave、Arc、Vivaldi 或 Chromium 的一个个人资料,在应用的原生对话框里确认后复制它的 Cookie;不导入密码和浏览记录。同一个对话框里可以清除内置浏览器的数据 |
每个视图是其 web 扩展的 panel 视图,从工作台的 + 或其空状态打开(pi.web 的 package.json);工作通过 pi.workspace(listDirectory、readFile、writeFile、uploadFile、fileUrl、runCommand 等)和 pi.terminals 在目录的执行环境上运行,所以远程 ta exec-server 一样工作。搜索、源代码管理和对文件的更改是此包的:它用 runCommand 运行 rg(或 git grep,或 grep)、git、mkdir、mv -n 和 rm 并读取其输出;路径作为 :(literal) pathspec 传递给 git。路径不能离开目录。agent 用其工具所做的更改立即显示。
文件在 Monaco 中打开,页面带来(pi.ui.CodeEditor,与 Ta 打包,无网络);Markdown、HTML、SVG 首先作为预览打开,旁边有编辑。预览从 TaWorkspaceServer.fileUrl 加载文件:页面在其自己的原始地点沙箱化,Markdown(用 marked 呈现,打包在)不运行脚本,两个都用相对 URL 加载其旁边的文件。Diff 在 Monaco 的 diff 编辑器中打开(pi.ui.DiffEditor),终端是 xterm.js,与 VS Code 相同(pi.ui.createTerminal:WebGL 绘制,跟随页面主题;输出里的 URL 和文件路径按 Cmd 或 Ctrl + 点击打开,定位到编译器或 grep 给出的行)。文件图标是 VS Code 默认显示的 Seti 图标(字体和地图来自 microsoft/vscode 的 extensions/theme-seti,MIT;bun scripts/seti.ts 将它们再次写入 web-src/util/seti*.ts)。在服务器上用 script 时,shell 获得伪终端;没有它,它在管道上运行,服务器回显并编辑线。
回复的链接在这里打开(pi.registerOpener):文件作为其标签页,链接名称选中的行(src/a.ts#L10-L20、src/a.ts:10:5),甚至文件打开有更改,这保留它们;资源管理器中的目录,切换到它;浏览器中的页面。Cmd 或 Ctrl + 单击在系统的浏览器中打开页面,Ta 自己做。
在设置 → 包中关闭。
开发
bun run build # tsc -b,然后 bun build web-src/index.tsx → web/index.js(一个模块,无导入)
bun run testweb 扩展从页面获得 React(web-src/react.ts)和来自 pi.ui.icons 的图标:它在运行时不导入任何东西。要用已安装的 Ta 试用它,将包链接到 ~/.ta/agent/extensions/。