目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
依赖链 · 下游(依赖该插件的节点):
dsh-acpdsh-agentdsh-agent-instructionsdsh-agent-loopdsh-agent-preset-registrydsh-api-job-controllerdsh-api-session-controllerdsh-api-terminal-controllerdsh-api-workspace-controllerdsh-api-workspace-filesdsh-client-connectiondsh-client-file-uploaddsh-client-ui-agent-presetdsh-client-ui-approvaldsh-client-ui-chatdsh-client-ui-commandsdsh-client-ui-conversationdsh-client-ui-cordisdsh-client-ui-deliverablesdsh-client-ui-goaldsh-client-ui-input-triggerdsh-client-ui-jobsdsh-client-ui-message-feedbackdsh-client-ui-model-selectiondsh-client-ui-plandsh-client-ui-scheduledsh-client-ui-sessiondsh-client-ui-sidebar-documentpreviewdsh-client-ui-sidebar-filesdsh-client-ui-sidebar-rightdsh-client-ui-sidebar-terminaldsh-client-ui-skilldsh-client-ui-subagentdsh-client-ui-trajectorydsh-client-ui-user-questionsdsh-client-ui-workflow-rundsh-client-ui-workspacedsh-command-feedbackdsh-commandsdsh-compaction-basicdsh-compaction-image-offloaddsh-compaction-tool-result-prunerdsh-cordis-host-runnerdsh-experimental-auto-reviewdsh-experimental-client-ui-agent-teamdsh-file-reference-localdsh-goaldsh-goal-round-driverdsh-hook-protocoldsh-hooks-claude-codedsh-hooks-codexdsh-jobs-localdsh-llm-retrydsh-message-feedbackdsh-permission-presetsdsh-plan-modedsh-plugin-package-inventory-deepseekdsh-repeat-tool-reminderdsh-sandbox-localdsh-sandbox-policydsh-scheduledsh-sdk-jsonrpc-serverdsh-session-checkpoint-policydsh-session-log-deepseekdsh-session-log-exportdsh-session-persistence-jsonldsh-session-projectiondsh-session-projection-cachedsh-session-query-sqlitedsh-session-referencedsh-session-telemetry-oteldsh-session-titledsh-session-title-all-prompts-llmdsh-session-title-first-prompt-llmdsh-session-turn-outlinedsh-spill-policydsh-subagentdsh-subagent-acpdsh-subagent-claude-codedsh-subagent-codexdsh-subagent-dsh-sdkdsh-subagent-fork-in-processdsh-terminal-bashdsh-time-contextdsh-token-meterdsh-tool-goaldsh-tool-presentdsh-tool-session-querydsh-tool-skilldsh-tool-subagentdsh-tool-subagent-controldsh-tool-tododsh-tool-workflowdsh-toolsdsh-user-approvaldsh-web-search-deepseekdsh-webhook-githubdsh-workflow-ptcdsh-workspacedsh-workspace-changes
同一拓扑层(Layer 2,层次遍历层序):
插件信息
| 包名 | @deepseek-ai/dsh-session |
|---|---|
| 分组 | G09 · 核心运行时 |
| 拓扑层 | Layer 2(层次遍历:被依赖方先于依赖方) |
| 源码路径 | packages/core/session |
① 实现逻辑
事件溯源会话服务:`SessionStore`(服务名 `sessions`)以 `Map<SessionId, SessionEntry>` 维护存活会话,提供 `prepare/enter/announce/create` 与 `session/created`、`session/event`、`session/flush` 派发;`flush()` 是所有持久性 checkpoint 的唯一入口,await 全部监听者并回传其失败 (src/index.ts:919-963,986-997,1194-1211)。`Session` 类维护 append-only 日志、surface 派生消息历史与 fork/seed (src/index.ts:446-560);surface.ts 定义消息投影与 surface 折叠,repair.ts 为中断 turn 生成合成收尾事件,request-header.ts 折叠请求头,tool-history.ts 重建工具历史 (src/index.ts:19-35)。构造时经 `ctx.inject(['typert'])` 注册 session 的 typert lookup (src/index.ts:954-962);invariant.ts 校验日志的 seq/turn/step/tool-call 关系不变量 (src/invariant.ts:16-258)。
内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件
上游依赖
下游依赖
外部 seam
② 注册/提供(provides)
- ctx.sessions (SessionStore 事件溯源会话服务:prepare/enter/announce/create/flush/get)
- Session 类与 SessionId/SessionSeq/SessionLogOffset 品牌类型
- session/created、session/disposed、session/event、session/flush 事件
- surface/fork/repair/request-header/tool-history 派生与修复工具
- SessionPreparation、foldRequestHeader、interruptedTurnClosers、KNOWN_SESSION_EVENT_TYPES 等导出
③ 依赖(depends_on · 上游前驱)
dsh-invariantsE1+E2
注册会话日志关系不变量
session/package.json:52 devDep + src/invariant.ts:10 import + src/invariant.ts:20 inject(['invariants']) + src/invariant.ts:258 register
dsh-llmE1
复用 llm 消息/工具/请求头等类型与派生消息词汇
src/index.ts:15,23,31 + src/types.ts:2-16 + package.json:58 dependency
dsh-scopeE1+E2
为会话构造作用域路由载体并读取上下文作用域
src/index.ts:13-14 import scopeOf/scopeTarget + src/index.ts:426 scopeTarget 构造 carrier + package.json:50 peerDep
④ 被依赖(dependents · 下游消费者)
dsh-agent
复用 SessionId/SessionEvent/SessionLogOffset 会话身份与日志词汇,并依赖 agent.session 语义
src/index.ts:14 import type + src/types.ts:10
dsh-agent-instructions
读写会话表面历史以判定指令是否已注入,并在 step/end 边界触发刷新
src/index.ts:16 import type Session/UserMessage + src/index.ts:184 type import + src/index.ts:307 ctx.on('session/event') + src/state.ts:10 import type Session/UserMessage
dsh-agent-loop
创建/恢复会话并把 agent 会话登记进 SessionStore
src/index.ts:26-27 import + src/index.ts:331 inject(['sessions']) + src/index.ts:618-622 ctx.sessions.enter/announce
dsh-agent-preset-registry
把预设选择写入会话日志
src/types.ts:2 type SessionId + src/index.ts:326 agent.session.append('agent-preset/selected')
dsh-api-session-controller
会话身份、事件与 fork 种子
src/agent.ts:12 import + src/agent.ts:189 ctx.sessions.get
dsh-api-terminal-controller
会话身份类型
src/index.ts:5 import type SessionId + src/client/bindings.ts:2 import
dsh-api-workspace-files
把会话身份解析为工作区根
src/index.ts:28 import + src/index.ts:209 scope.sessions.get(sessionId)
dsh-client-file-upload
以 SessionId 寻址会话并观察 session/event 退役 receipt
src/index.ts:10 + src/client/contract.ts:1 + src/http-route.ts:4
dsh-client-ui-agent-preset
会话标识类型
src/client/index.ts:22 import SessionId from @deepseek-ai/dsh-session/types
dsh-client-ui-approval
会话标识类型
src/client/contract/slots.ts:3 import SessionId from @deepseek-ai/dsh-session/types
dsh-client-ui-deliverables
会话标识与事件类型
src/changes.ts:2 import SessionId + src/client/turn-deliverables.ts:7
dsh-client-ui-jobs
会话标识类型
src/client/JobListAction.tsx:3 import SessionId from @deepseek-ai/dsh-session
dsh-client-ui-schedule
会话身份与 surface 类型
src/client/index.ts:43 import type + src/client/schedule-turn.ts:12 import surface
dsh-command-feedback
向活会话追加 feedback/record 日志事件
src/index.ts:86 static inject ['sessions'] + src/index.ts:14 import
dsh-commands
把命令运行生命周期写入会话日志
package.json:62 peerDep + src/index.ts:14-15、src/invariant.ts:8 import; src/index.ts:373 session.append
dsh-compaction-basic
直接读写会话表面的追加/替换事务与事件流,并在手动压缩后通过 sessions.flush 做持久化检查点
src/index.ts:11 import type Session/SessionSeq + src/index.ts:114 inject 'sessions' + src/index.ts:184 ctx.on('session/event') + src/index.ts:411 ctx.sessions.flush + src/region.ts:22 import SessionSeq/Session/SessionEvent
dsh-compaction-image-offload
在会话表面上追加 image/offload 事件并注册纯函数消息投影,使卸载决策可重放且不改动节点身份
src/index.ts:19 inject 'sessions' + src/index.ts:26 ctx.sessions.registerMessageProjection + src/image-offload.ts:4 import type Session/SessionSeq + src/projection.ts:4-5 subpath 类型 import
dsh-compaction-tool-result-pruner
读取当前表面节点并按 surfaceOp 替换/追加会话事件,实现可重放的裁剪事务
src/index.ts:11 import type Session/SessionEvent/SessionSeq/ToolResultMessage + src/types.ts:2 import type SessionSeq + src/index.ts:160 session.append('compaction/prune')
dsh-experimental-auto-review
读取会话事件日志并对受影响会话降级
src/index.ts:25 import type { SessionEvent } + src/index.ts:126 inject 'sessions' + src/index.ts:730 ctx.sessions.list
dsh-experimental-client-ui-agent-team
使用会话 id 类型与快照字段
src/client/TeamAction.tsx:3 import SessionId + src/client/mount.ts:5 import '@deepseek-ai/dsh-session/types'
dsh-file-reference-local
订阅会话事件流以在工具结果提交后失效文件索引
src/index.ts:98 ctx.on('session/event', ...) + src/index.ts:100 ctx.agents.get(session.id)
dsh-goal
以会话事件日志作为目标状态的唯一持久来源
src/fold.ts:4 import SessionEvent + src/index.ts:14-15 import SessionSeq/Session + src/index.ts:613 agent.session.append('goal/change', change)
dsh-goal-round-driver
会话持久化检查点与基于事件流的轮次状态跟踪
src/index.ts:13 import (Session, SessionEvent) + src/index.ts:145 ctx.sessions.flush(agent.session) + src/index.ts:318 ctx.on('session/event')
dsh-hook-protocol
追加 hook/invoked、hook/result 持久会话事件
src/events.ts:9 import Session + src/events.ts:76 session.append('hook/invoked', ...)
dsh-llm-retry
向会话日志追加持久重试事件并回放校验既有记录
src/history.ts:3 import type SessionEvent + src/invariant.ts:160 ctx.sessions.list
dsh-message-feedback
读取/追加会话事件并定位活会话
src/index.ts:119 inject ['sessionPersistence','sessions'] + src/index.ts:13 import
dsh-permission-presets
记录预设选择与会话权限覆盖
package.json:61 peerDep + src/index.ts:23 import Session; src/index.ts:416 session.append('permission/preset')
dsh-plan-mode
追加 plan/mode 事件供投影折叠与恢复
src/index.ts:32 type Session/UserMessage + src/invariant.ts:4 + src/index.ts:434 session.append('plan/mode')
dsh-sandbox-policy
读取会话 cwd/日志并在事件上声明 sandbox/mode 事件类型
src/index.ts:29 import + src/session-mode.ts:21 import + src/invariant.ts:25 ctx.sessions
dsh-schedule
以会话作为投递目标并强制送达前持久化
src/domain.ts:7-8 import + src/storage.ts:3 import + src/index.ts:96 ctx.sessions + src/runtime.ts:124 ctx.sessions.flush
dsh-session-log-deepseek
从会话日志读取待上传事件并追加接受水位事件
src/index.ts:13 import + src/index.ts:36 static inject (sessions) + src/index.ts:190 ctx.sessions.get
dsh-session-log-export
使用 SessionId/SessionHeader/SessionEvent/SessionStore 类型与 SESSION_FORMAT_VERSION 序列化日志
src/archive.ts:30,32 import; package.json:46 peerDep
dsh-session-persistence-jsonl
复用 SESSION_FORMAT_VERSION、SessionId/SessionLogOffset 与 Session 类型
src/index.ts:36 import + src/lease.ts:36 import + src/catalog-migration.ts:9 import
dsh-session-projection
以会话日志为唯一输入驱动投影并读取 seq/header 元数据
src/index.ts:22 import + src/index.ts:209,220 ctx.on session/created/session/event
dsh-session-projection-cache
以会话身份/日志水位作为缓存行匹配依据并做持久化屏障
src/index.ts:22 import + src/spec.ts:16 import + src/index.ts:266 ctx.sessions.flush
dsh-session-query-sqlite
读取 live 会话(ctx.sessions)并用 SessionHeader/SessionId/SessionSeq 类型构建索引
src/index.ts:8,12 import; src/index.ts:204 static inject ['sessions']; src/index.ts:503 this.ctx.sessions.list(); package.json:30 peerDep
dsh-session-reference
使用会话 id / 序列号等不透明标识类型区分源会话与捕获位置
src/index.ts:14 import type SessionId + src/projection.ts:7-8 import SessionSeq/类型 + src/spill.ts:3 import type SessionId + src/types.ts:10 + src/uri.ts:4
dsh-session-telemetry-otel
监听会话事件以判定 feedback 授权并捕获历史
src/index.ts:20 import + src/index.ts:157 static inject (sessions) + src/index.ts:246 ctx.on session/event
dsh-session-title
以会话日志为标题真相源并声明 session/title 事件类型
src/index.ts:18 import + src/types.ts:14 import + src/index.ts:403 ctx.sessions.get
dsh-session-turn-outline
复用 SessionSeq 与 SessionEvent 类型锚定轮次边界
src/projection.ts:24 import + src/types.ts:10 import
dsh-spill-policy
溢出归属 session id 的类型来源 (src/types.ts:16-25)
package.json:37 peerDep + src/types.ts:13 import type
dsh-subagent
读写会话事件、会话 id 与会话注册表
src/descriptor.ts:25 (import type SessionEvent) + src/types.ts:15 (import type SessionEvent,SessionId) + src/list-children.ts:69 (ctx.get('sessions'))
dsh-terminal-bash
订阅 session/event 校验 sandbox 模式切换
package.json:34 peerDep + src/index.ts:9 import Session/SessionEvent
dsh-time-context
倒序读取会话历史以收集本回合已进入的用户消息并定位回合起点
src/index.ts:21 import SessionSeq + src/invariant.ts:4 import type Session/SessionEvent + src/index.ts:89 agent.session.eventAt(SessionSeq(seq))
dsh-token-meter
读取持久会话事件序列并做 surface 判定与表头规范化
src/types.ts:8 import type SessionEvent + src/index.ts:19 import canonicalHeader/isSurfaceEvent/SessionSeq
dsh-tool-present
把交付声明持久化为 Session 事件
src/index.ts:8 import type { Session } + src/index.ts:105 session.append
dsh-tool-session-query
用 SessionSeq 品牌化事件序号、用 SessionId 标识目标会话
src/operations.ts:9-10 import SessionSeq/SessionId
dsh-tool-skill
用 SessionSeq 回溯 session 事件序列以构造既有目录历史 (src/index.ts:361-378)
package.json:44 devDep + src/index.ts:13 import
dsh-tool-subagent
会话身份与投影读取
src/index.ts:19-20 (import SessionSeq, type Session) + src/model-selection-state.ts:4 (import type Session)
dsh-tool-subagent-control
子代理会话 id 类型
src/index.ts:16 (import type SessionId) + src/list-agents.ts:13 (import type SessionId)
dsh-tool-todo
耐久校验基于 session 事件日志
package.json:46 peerDep + src/invariant.ts:4 import Session/SessionEvent + src/invariant.ts:92 ctx.on('session/event')
dsh-tool-workflow
把运行记录写入会话并订阅会话事件做不变量折叠
package.json:45 peerDep + src/index.ts:22 import type { Session, SessionEventMap } + src/index.ts:102 session.append + src/invariant.ts:4 import type { Session, SessionEvent } + src/invariant.ts:154 ctx.on('session/event')
dsh-tools
复用会话消息类型并在 invariant 中读取会话校验工具调用
src/index.ts:14 import type UserMessage + src/invariant.ts:4 + src/invariant.ts:121 inject(['sessions']) + src/invariant.ts:77 ctx.sessions
dsh-user-approval
把审批审计对写入会话日志
package.json:45 peerDep + src/index.ts:20-21 import Session/SessionSeq; src/index.ts:225/232 session.append
dsh-web-search-deepseek
向会话日志记录搜索请求(模型可见输入须可重建),并声明对应 SessionEventMap 事件
package.json:35 peerDep + src/index.ts:14 import type {} from dsh-session + src/provider.ts:79 declare module SessionEventMap + src/index.ts:118 session.append('web/deepseek-search-llm-request', ...)
dsh-workflow-ptc
以 SessionId 标识子代理会话身份
package.json:33 peerDep + src/host.ts:6 import { SessionId } + src/runtime.ts:11 import type { SessionId }
dsh-workspace
复用 SessionId/SessionHeader 类型与可选 sessions 服务,做会话存在性判定与 attach 时的 cwd 归属校验
src/entity.ts:12 + src/index.ts:11 + src/spec.ts:10 + src/types.ts:9 import;src/index.ts:473 ctx.get('sessions')
dsh-workspace-changes
按 Session 生命周期观察事件与释放记录器
src/index.ts:15 import type { Session, SessionId } + src/recorder.ts:5 import + src/index.ts:143 session/event