vscode API:编辑会话标识符提供程序

vnzz0bqm  于 4个月前  发布在  Vscode
关注(0)|答案(2)|浏览(55)

问题

目前支持从web到Codespaces,从桌面到vscode.dev,从桌面到Codespaces的继续工作。这通过在查询参数中传播编辑会话标识符(一个guid)并将其传递到工作台创建选项中来实现。
我们现在也希望在web到桌面,桌面到桌面等场景中支持继续工作。这将使我们能够与现有的继续工作体验实现完全的功能对等,以及能够随身携带未提交的更改。以下是需要支持的现有场景:

  • github.dev -> 本地克隆
  • RemoteHub桌面 -> 本地克隆
  • RemoteHub桌面 -> 在容器卷(远程容器)中克隆

为了实现这一点,我们有几个选择:

  • 将编辑会话标识符传播到所有桌面入口点,即
  • 扩展的协议处理程序(web -> 桌面)
  • vscode.openFolder命令参数(桌面 -> 桌面)
  • 这具有非常明确地确定哪个编辑会话应该与当前工作区关联的优势
  • 使VS Code能够确定相关的编辑会话标识符
  • 最终,编辑会话是一个不透明的JSON对象,包含一些要应用于特定VS Code状态的数据
  • 我们希望与此数据关联足够的元数据,以便我们不会应用错误的状态
  • 此处的相关状态是仓库标识
  • 作为初始客户,此API应由Remote Repositories和内置的git扩展实现
  • 此API最终也将需要启用您永远不会丢失RemoteHub更改的场景,即编辑会话在没有显式调用存储命令或继续工作命令的情况下保存,并且它们在没有显式调用恢复的情况下自动恢复。这是一个复杂的场景,我们不想立即实现它
  • 这个提案让我们更有信心认为最新的编辑会话与当前工作区相关联,而无需在我们的应用中引入更多的编辑会话标识符(最终可能允许我们摆脱我们在web嵌入器情况下对查询参数方法的依赖)。它还可能提高编辑会话恢复机制的可靠性,因为我们不受像嵌入器丢弃查询参数导致编辑会话关联丢失这样的 transient 故障的影响。例如
exdqitrt

exdqitrt1#

@TylerLeonhardt还提议我们可以使用这个API来消除不同机器上克隆的仓库之间的歧义,这样用户只需要在他们所有相同仓库的克隆中信任一次给定的仓库。

s4n0splo

s4n0splo2#

今天,我和@jrieken@bpasero讨论了这个API提案,因为我们在正常的API调用中时间用完了。主要的反馈是:

  • 如果将来这个API用于工作区信任或漫游工作区,它可能应该从EditSessionIdentity更名为WorkspaceSessionIdentifier或类似名称
  • 当前的实现假设具有file方案的工作区只能有一个有效的提供者,但最终可能会出现给定的工作区可能有多个提供者的情况,例如,如果它备份到多个远程托管服务。在这种情况下:
  • API实现需要容忍多个提供者注册相同的方案,或者引入更表达性的注册,以便我可以从内置的git扩展和OneDrive扩展等获得身份提供者
  • 编辑会话的实现和UI应支持显示与多个来源关联的编辑会话
  • 如果用户希望继续在当前缺少标识符的工作区上工作,应该为他们提供一个入门路径,让他们使用编辑会话,这可能会创建额外的API需求
  • 将来当我们支持自动备份编辑会话时,我们应该看看编辑会话是否可以从本地历史所做的周期性备份工作中受益
  • autoStore设置可能会对用户体验产生影响,因为在窗口卸载之前与云服务通信可能是长时间运行的
  • 我们可以在不修改此API的情况下支持给定标识符的多个可用编辑会话(例如,来自多台机器),例如通过存储与给定标识符关联的所有编辑会话GUID清单

相关问题