DAG总览 / 组目录 / G02 API 网关与控制器

dsh-api-workspace-files · @deepseek-ai/dsh-api-workspace-files

Layer 5G02L2 web-app
目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
依赖链 · 下游(依赖该插件的节点):
同一拓扑层(Layer 5,层次遍历层序):
↑ Layer 4(13 插件)Layer 5↓ Layer 6(18 插件)

插件信息

包名@deepseek-ai/dsh-api-workspace-files
分组G02 · API 网关与控制器
拓扑层Layer 5(层次遍历:被依赖方先于依赖方)
源码路径packages/api/workspace-files
来源层L2 web-app bundle(base 之上装配)

① 实现逻辑

WorkspaceFiles 继承 TypertRemoteService 并注册 workspaceFiles 服务,注入 fs/sandboxPolicy/sessions/typert,并在构造时注册 workspaceFileScope lookup:把 SessionId 解析为 workspaceRoot(活会话头或持久化头,缺 cwd 回退 sandboxPolicy.workspaceRoot)(src/index.ts:199-222)。read 以 fs.streamText 流式切页(不整文件读入、超 maxBytes 拒绝、页内含 NUL 判为二进制)(src/index.ts:113-160, 232-246);readBytes/stat 走 fs.readByteRange/readBytes/stat 并施加 maxFileBytes 上限 (src/index.ts:256-293);list 在 lstat 后经 confine 校验目录位于工作区内再 listDir (src/index.ts:302-328)。changes 流由 WorkspaceChangeFeed 订阅 fs/observed、按目标 watch,初始化后先产 ready 再产 change 帧 (src/changes.ts:39-109);客户端另提供 file 协议的 ResourceProvider (src/client/provider.ts:46-112)。

内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件 上游依赖 下游依赖 外部 seam

② 注册/提供(provides)

③ 依赖(depends_on · 上游前驱)

dsh-api-gatewayE1
客户端 Remote 载体
src/client/index.ts:9 import + src/client/remote.ts:6 import
dsh-client-resourcesE1
客户端 file 资源 provider 注册
src/client/index.ts:10 import + src/client/provider.ts:24 import
dsh-sandbox-policyE2
会话无 cwd 时的工作区根回退
src/index.ts:27 import type {} + src/index.ts:188 static inject 'sandboxPolicy'
dsh-sessionE1+E2
把会话身份解析为工作区根
src/index.ts:28 import + src/index.ts:209 scope.sessions.get(sessionId)

④ 被依赖(dependents · 下游消费者)

dsh-api-remotes
装配 workspaceFiles 命名空间
src/client/index.ts:26 import remote
dsh-client-ui-deliverables
读取工作区文件内容
src/present-open.ts:119 ctx.workspaceFiles
dsh-client-ui-sidebar-documentpreview
工作区文件读取的类型与 remote 调用签名
src/client/index.ts:21-22 import (/remote, /client) + src/client/document/resource-group.ts:3 import (/types)
dsh-client-ui-sidebar-files
工作区文件条目类型
src/client/FilesBody.tsx:21 import (/types)
dsh-office-to-pdf
按 Session 授权读取/校验源文件元数据
src/types.ts:2 import WorkspaceFileBytes + src/index.ts:9 import + src/index.ts:187 ctx.get('workspaceFiles')