OpenViking
volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:yauntyour/DSH-SessionDelete
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
一键删除 二次确认 宿主推送即时刷新 同名会话多选⋯ 操作菜单里,在「归档会话」正下方新增「删除会话」——红色危险配色(跟随主题 --dsw-alias-state-error-primary)+ 垃圾桶图标 + 危险态悬停底色;host/session-removed / host/workspace-changed / host/archived-sessions-changed)更新会话列表,不需要刷新页面;删除当前会话时自动回到「新会话」视图;workspace.sessionIds)、归档集合(archivedSessionIds)与投影缓存(session_projcache),重启后不会出现幽灵会话;/api 网关同款的浏览器信任围栏(loopback Host 或受信主机 + 同源检查)。# 在插件目录构建并打包(已打包可直接用 dsh-session-delete-0.2.0.tgz)
cd D:/Developments/Workspace/DSH-SessionDelete
npm install && npm run build && npm pack
# 挂载到 web profile(路径用正斜杠)
dsh plugin --profile web add "D:/Developments/Workspace/DSH-SessionDelete/dsh-session-delete-0.2.0.tgz"
若
pnpm报ERR_PNPM_UNEXPECTED_STORE(profile 的 node_modules 与当前 store 不一致, 通常是 pnpm 版本/配置变更导致),先在 profile 目录重装对齐:cd ~/.dsh/profiles/web pnpm install --no-frozen-lockfile --config.confirmModulesPurge=false再重新执行上面的
dsh plugin --profile web add。
dsh --profile web --dump-config | grep session-delete
# → # == dsh-session-delete
# - id: session-delete
# name: dsh-session-delete
重启 dsh web 使插件生效,然后刷新浏览器页面:
在左侧会话列表任意会话行的 ⋯ 菜单中,「归档会话」下方即出现「删除会话」。
⋯;⚠️ 删除不可恢复:会话日志文件会被永久移除。请谨慎操作。
MutationObserver 监听 document.body,发现包含「归档会话」项的行操作菜单时,
克隆该项并改标为「删除会话」插入其正下方(同一哈希类名 → 样式一致);aria-label(「会话“xxx”的操作」/「Session actions for xxx」,
全角/半角引号都兼容),再通过客户端会话列表(ctx.sessions.list)解析出会话 id;标题重复时列出候选;ctx.sessions.refresh() 重拉会话基线,配合宿主推送保证
工作区分组、未分组列表即时同步移除;POST /session-delete/api/delete { sessionId }。删除事务(src/delete-session.ts)按顺序执行:
running,直接拒绝(返回 agent-running,
客户端给出友好提示),避免运行中的回合在目录删除后继续落盘重建文件;sessions.flush(官方指定的持久化入口,无监听时回退 session/flush emit),
再 detach(触发 session/disposed → 持久化协调器排空写后批次),并等待 300ms
写批窗口,避免迟到批次在目录删除后重建文件;sessionPersistence.locate(header) 按会话头的
cwd 计算目录;目录不存在或头里没有 cwd 时,回退扫描持久化根目录下所有工作区
目录(<root>/<工作区>/<encodeSegment(id)>,即「按工作区存储」的布局),
校验目录名 === encodeSegment(sessionId)(防误删)后 rm -rf;两条路径
同时命中且不一致时拒绝删除(防歧义);workspaceRegistry 实体
的 detachSession 官方写路径,缓存与持久域同步),并从全局 archivedSessionIds
中移除该 id(经 storage-domain 全局写入);两者都触发 domain/changed →
宿主推送 host/workspace-changed / host/archived-sessions-changed;session_projcache 域删除该会话行(fail-soft)。每一步都幂等:对已删除的会话重复执行不报错、无副作用。
~/.dsh/attachments)按对象寻址、无会话索引,删除时不清理附件对象;npm install # devDependencies 自包含
npm run typecheck # tsc --noEmit
npm test # vitest(29 个契约测试)
npm run build # tsc(server lib/)+ tsdown(client bundle lib/client.js)
npm pack # 发布 tarball
dsh plugin --profile web remove dsh-session-delete
移除后重启 dsh web,菜单恢复原样。
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: session、session-management、session-manager、sessions、sessionstorage。