description: "面向 web GUI 宿主的工作区目录选择 seam:原生与浏览后端所实现的服务约定、能力词汇与错误码。"
English | 中文
web GUI 让操作者通过 OS 选择器或应用内浏览器选择工作区目录。操作者能接触宿主屏幕时使用原生选项;远程客户端或需要在应用内列举和创建目录时使用浏览选项。消费方会获得交互类型,并能呈现匹配的工作流。目录选择仅限 GUI 宿主,不会影响 agent loop(智能体循环)。浏览工作流一次只公开一棵目录树;不支持多根目录。
挂载且只挂载一个目录选择后端,然后让工作区流程驱动它:seam 本身只是服务约定,因此没有后端的组合就无从选择目录。
当操作者坐在宿主屏幕前时,原生后端是正确选择:directoryPicker/pick 打开一个 OS 选择器,返回所选绝对路径,取消时返回 null。浏览后端处处可用——它在浏览器中列举一个目录层级并创建子目录,因此无法触达 OS 对话框的远程客户端依然能选择工作区。当宿主处境在两次启动之间变化时,组合自适应选择器,它在启动时判定一次处境并挂载匹配的后端。
capability() 返回一个可辨识联合类型,说明操作者如何选择目录:OS 选择器为 { kind: 'native', pick(signal) },应用内浏览器为 { kind: 'browse', list(path?), createDirectory(path, name) }。消费方按 kind 分支;遇到未知能力类型时,界面会隐藏选择入口,而不是失败。浏览失败抛出带类型的 DirectoryPickerError,其错误码集合是封闭的——directory-unreadable、directory-exists 或 directory-create-failed——每个都携带出错对象的路径,目录选择 Remote 控制器将其 1:1 映射为协议错误码。
DirectoryEntry 行暴露绝对 path 与宿主判定的 hidden 标志(POSIX 上为点前缀约定),展示策略留在客户端;客户端绝不自行拼接路径段。DirectoryListing.crumbs 是从文件系统根到被列举目录的祖先链——每个 crumb 都是跳转目标,根 crumb 以完整路径标注。
当 seam 约定不够用时阅读以下内容:先看决策记录,再看组合它的两个后端与自适应选择器。
ctx.fs 切分与策略裁决。无。GUI 宿主的目录选择 seam 不注册任何面向模型的内容。
无;该包既不组装也不发送提供方请求。
这些限制说明 seam 约定何时把决定留给未来的消费方。它们是当前包约束,不是任务积压。
运行时不变式: 不发布伴生入口。这个无状态 Service Definition 只定义 capability vocabulary,观察由 backend 与 Remote controller 负责。