按对话轮次压缩上下文,按需回读原始历史
30.4/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add vilicvane/dsh-plugin-turn-memory该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 52 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(runtime_boot_failed · 2026/11/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-plugin-turn-memory(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/6 14:17:46
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 18 处,展示前 18 条)
- 写入本地文件index.ts:407
await mkdir(surfaceDumpDir, { recursive: true }); - 写入本地文件index.ts:408
await writeFile(surfacePath, JSON.stringify(snapshot, null, 2) + '\n', 'utf8'); - 写入本地文件e2e/runner.ts:373
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/runner.ts:374
await writeFile(continuationSurfacePath, JSON.stringify(continuationSnapshot, null, 2) + '\n', 'utf8'); - 写入本地文件e2e/runner.ts:377
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/runner.ts:378
await writeFile(surfacePath, JSON.stringify(snapshot, null, 2) + '\n', 'utf8'); - 写入本地文件e2e/prompt-eval-runner.ts:218
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/prompt-eval-runner.ts:219
await writeFile(surfacePath, JSON.stringify(snapshot, null, 2) + '\n', 'utf8'); - 读取本地文件e2e/prompt-matrix-runner.ts:412
hash.update(await readFile(resolve(path))); - 写入本地文件e2e/prompt-matrix-runner.ts:487
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/prompt-matrix-runner.ts:488
await writeFile(surfacePath, JSON.stringify(snapshot, null, 2) + '\n', 'utf8'); - 写入本地文件e2e/prompt-matrix-runner.ts:584
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/prompt-matrix-runner.ts:585
await writeFile(artifactPath, JSON.stringify({ - 写入本地文件e2e/session-compaction-runner.ts:132
await mkdir(artifactDir, { recursive: true }); - 写入本地文件e2e/session-compaction-runner.ts:133
await writeFile(surfacePath, JSON.stringify(snapshot, null, 2) + '\n', 'utf8'); - 读取本地文件lib/prompt.ts:63
const template = readFileSync(promptTemplateUrl, 'utf8'); - 读取本地文件lib/thought-hints.ts:217
const system = readFileSync(promptUrl, 'utf8').trim(); - 读取本地文件lib/session-prompt.ts:19
const template = readFileSync(promptTemplateUrl, 'utf8');
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-compaction@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-token-meter@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按轮次压缩上下文
- 按需回读原始历史
为 DeepSeek Harness 提供按轮次粒度的上下文记忆。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-turn-memory
目标为 DSH 0.1.5-rc.2,使用 Session.snapshotEvents() 读取历史记录,并使用经过验证的 SessionSeq 值作为压缩范围。
当前活跃的实现正在根据 design.md 中研究得出的约定进行重建。
先前的实现保留在 obsolete/ 下,仅供调查之用。
该插件现在有两个协同工作的层:
- 已完成轮次的压缩使用父级 fork,并落地一次 N→M 的转录重写;
- 可选的长思考预处理会在每个完整的长推理块到达时立即启动异步小模型回忆提示,然后将成功的提示交给正常的主模型轮次工作器,而不替换其原始父级上下文;
- 长根轮次会收到一条模型可见的交接提醒,并可在其已完成轮次压缩落地后于新轮次中继续;
- 可选的根会话压缩提供 ctx.compaction,通过顺序的主模型工作器处理选定的已完成历史范围,并且仅在宿主拥有的工作草稿完成后才提交一个标准的持久检查点。
- 压缩后的图像块可以变为持久的 文本引用;read_memory_image 会按需重新加载原始像素,而不是将它们放入之后的每一次模型请求中。
- 当压缩记忆遗漏了某个代价高昂的细节时,read_session_history 可以恢复某个已完成轮次原始的仅追加用户、助手、推理和工具结果节点。
主插件默认保持禁用状态。
展开完整文档(README 剩余 1 节)
dsh-plugin-turn-memory 目标为 DSH 0.1.5-rc.2,使用 Session.snapshotEvents() 读取历史记录,并使用经过验证的 SessionSeq 值作为压缩范围。 当前活跃的实现正在根据 design.md 中研究得出的约定进行重建。 先前的实现保留在 obsolete/ 下,仅供调查之用。 该插件现在有两个协同工作的层: - 已完成轮次的压缩使用父级 fork,并落地一次 N→M 的转录重写; - 可选的长思考预处理会在每个完整的长推理块到达时立即启动异步小模型回忆提示,然后将成功的提示交给正常的主模型轮次工作器,而不替换其原始父级上下文; - 长根轮次会收到一条模型可见的交接提醒,并可在其已完成轮次压缩落地后于新轮次中继续; - 可选的根会话压缩提供 ctx.compaction,通过顺序的主模型工作器处理选定的已完成历史范围,并且仅在宿主拥有的工作草稿完成后才提交一个标准的持久检查点。 - 压缩后的图像块可以变为持久的 文本引用;read_memory_image 会按需重新加载原始像素,而不是将它们放入之后的每一次模型请求中。 - 当压缩记忆遗漏了某个代价高昂的细节时,read_session_history 可以恢复某个已完成轮次原始的仅追加用户、助手、推理和工具结果节点。 主插件默认保持禁用状态。当插件启用时,已完成轮次压缩默认开启,除非设置 turnCompression: false。会话压缩则通过 sessionCompaction.enabled: true 单独选择启用。 观察到的已完成用户对话轮次会收到一个持久的待处理标记,并在代理冷恢复后一直保留,直到其最终落地存在为止。该插件不会仅仅因为安装后打开了旧会话就回填无标记的历史记录。UI 创建的谱系分叉属于用户对话,会正常参与;内部子代理则不会。一个遗留的 turn-memory 空操作,若其当前表面仍包含原始推理,也会被迁移一次。 安装 从 GitHub 将包添加到 DSH 配置文件: dsh plugin --profile web add github:vilicvane/dsh-plugin-turn-memory 对于本地开发,改为链接工作树: dsh plugin --profile web add link:/path/to/dsh-plugin-turn-memory 然后在配置文件的 cordis.patch.yml 中注册该插件。对于 web 配置文件,这通常是 $DSH_HOME/profiles/web/cordis.patch.yml。在安装包或更改配置文件配置后,重启 dsh web。 配置 仅已完成轮次压缩 此模式不触碰配置文件现有的整会话压缩后端: - insert: - id: turn-memory name: dsh-plugin-turn-memory config: enabled: true turnCompression: true turnContinuation: enabled: true reminderIntervalNodes: 30 thoughtHints: enabled: true provider: ollama model: your-small-model-id minimumChars: 16000 maxTokens: 1024 timeoutMs: 120000 sessionHistory: enabled: true maxReadChars: 160000 catalogTurns: 40 已完成轮次和整个会话的压缩 只有一个插件可以提供 ctx.compaction。在启用此层之前,请禁用 compaction-basic,并移除或禁用任何其他会话压缩提供程序。当 Web 配置文件已禁用 command-compact 时,请重新启用它;其 /compact 命令将调用 turn-memory 的引擎。 yaml - id: compaction-basic disabled: true - id: command-compact disabled: false - insert: - id: turn-memory name: dsh-plugin-turn-memory config: enabled: true turnCompression: true sessionCompaction: enabled: true auto: true thresholdRatio: 0.8 retainRatio: 0.16 segmentTokens: 32000 workerAttempts: 2 在同一配置中设置 turnCompression: false 以仅使用整个会话层。设置 sessionCompaction.auto: false 以禁用压力触发,同时保持手动 /compact 可用。 主要调优选项如下: | 键 | 默认值 | 含义 | | enabled | false | 启用该插件。 | | turnCompression | true | 使用主模型 fork 压缩每个已完成的根会话轮次,然后在需要时使用全新的同模型恢复工作程序。 | | turnWorkerAttempts | 3 | 在没有被接受的替代项的情况下,允许连续失败的工作程序数量。每次成功替换都会重置此预算。 | | turnContinuation.enabled | true | 允许一个较长的根轮次显式交接、结束、压缩,并作为新轮次恢复。 | | turnContinuation.reminderIntervalNodes | 30 | 用于一次性继续提醒的开放轮次表面节点间隔:30、60、90,依此类推。 | | thoughtHints.enabled | false | 在正常轮次压缩之前,使用配置的辅助模型预处理完整的长推理块。 | | thoughtHints.provider | 启用时必需 | 辅助一次性请求的提供程序路由。 | | thoughtHints.model | 启用时必需 | 辅助一次性请求的模型 ID。 | | thoughtHints.minimumChars | 16000 | 启动提示请求所需的最小原始推理块字符数。 | | thoughtHints.maxTokens | 1024 | 一个紧凑召回索引响应的最大输出 token 数。 | | thoughtHints.timeoutMs | 120000 | 每个块的辅助请求超时;超时会降级为无提示。 | | sessionHistory.enabled | true | 在调用会话的仅追加已完成轮次上公开只读的 read_session_history 回退。 | | sessionHistory.maxReadChars | 160000 | 每次读取返回的原始轮次字符数上限;更大的轮次通过 offset 分页。 | | sessionHistory.catalogTurns | 40 | 当省略 turn 时,默认列出的最近已完成轮次数量。 | | previewChars | 120 | 轮次目录中每个节点显示的字符数。 | | maxReadChars | 30000 | 一次轮次节点读取返回的最大文本量。 | | surfaceDumpDir | 插件 .tmp/ | 接收每个会话最新折叠表面快照的目录。 | | sessionCompaction.enabled | false | 将轮次记忆注册为配置文件的 ctx.compaction 提供程序。 | | sessionCompaction.auto | true | 在令牌压力下启用自动压缩。 | | sessionCompaction.thresholdRatio | 0.8 | 自动压缩启动时的上下文窗口比率。 | | sessionCompaction.retainRatio | 0.16 | 保留在所选压缩范围之外的最新历史的大致份额。 | | sessionCompaction.retainTokens | 未设置 | retainRatio 的绝对替代项;不要同时设置两者。 | | sessionCompaction.segmentTokens | 32000 | 分配给每个顺序工作线程的大致源令牌预算。 | | sessionCompaction.workerAttempts | 2 | 每个分段允许的连续失败工作线程数,且未产生被接受的修订。每次成功替换都会重置此预算。 | | sessionCompaction.workerMaxTokens | 8192 | 每个会话工作线程的输出令牌限制。 | | sessionCompaction.workerTimeoutMs | 300000 | 每次工作线程尝试的超时时间。 | | sessionCompaction.compactionRetries | 1 | 当成功的检查点仍使表面高于 thresholdRatio 时,允许的额外压力压缩遍数。 | 每个会话分段首先通过 fork 使用父级的提供程序/模型。如果它在没有权威完成的情况下停止,继续工作线程会通过全新的 spawn 使用相同的主模型,并将分配的规范源和被接受的宿主拥有的修订嵌入提示中。提供程序错误、超时、达到最大令牌停止或缺少完成,仅当该工作线程未产生被接受的修订时才消耗预算。轮次、会话和思维提示提示文件会为每个新请求读取,因此编辑提示不需要重启 Web。 当启用思维提示时,每个根会话 assistant/chunk 推理 block-end 在达到或超过 minimumChars 时,会立即启动独立的 ctx.llm.stream() 调用。模型只看到固定的 prompts/thought-hints.md 系统提示,后跟一条包含原始推理块的用户消息。多个块可能并发运行。在持久 turn/end 时,压缩会等待属于该轮次当前表面上实际存在的助手消息的调用;冷恢复会从那些持久推理块重新生成缺失的调用。失败或空的提示会被省略,并且永远不会阻塞压缩,因为父级 fork 仍然继承完整的原始推理。提示仅作为建议性回忆索引,永远不会作为转录节点持久化,并且每个携带推理的原始助手节点在落地前仍必须被重写。 在根轮次每达到 turnContinuation.reminderIntervalNodes 的整数倍时,其动态运行时上下文会向模型给出一条简短直接的动作通知,要求其停止、准备交接,并调用 continue_after_turn_compression。该通知和自动后续使用普通文本,不带 XML 包装标签;结构化标签仅保留在压缩协议需要显式数据边界或持久引用之处。该通知保持为插件上下文,而不是伪造的持久助手消息。只有当整个任务将在接下来几个动作内完成时,模型才可以继续当前轮次;进行中的原子变更会在交接前完成。计数器包括开放轮次中追加来源的模型可见消息,并排除可替换的运行时快照。该通知包括当前节点数、整个规范上下文的估计 token 大小,以及下一个提醒里程碑。持久运行时快照会记住已经显示过哪些里程碑,包括跨重启,并且恢复解析器仍能识别较旧的带标签快照。成功的持久原生工具对或 Code Mode 子分派会记录已完成的工作、当前状态、未解决的依赖项以及确切的下一步工作,然后结束该轮次。插件首先落地并刷新正常完成轮次的压缩,然后作为单独的普通轮次提交一个直接自动的插件来源后续。如果压缩尚未成功,则不会开始继续;冷恢复恢复可以完成缺失的压缩,并分派仍然待处理的请求,而不会重复已插入的后续。 当配置文件具有附件存储时,插件会向主对话和两种压缩工作器类型公开 read_memory_image。压缩保留内容寻址的附件 id,而不是本地路径,并且该工具只接受确实出现在当前会话或其活动根父级中的 id。原始像素仅在工具请求时加载,并且仅在活动模型声明支持图像输入时加载。 主工具目录还默认公开 read_session_history。不带 turn 时,它会列出最近完成的轮次及其可见/推理大小;带 turn= 时,它会读取该轮次原始的仅追加消息节点,包括后来被表面替换所遮蔽的推理。读取仅限于调用代理自己的会话,并按字符偏移分页。这是一条按需恢复路径:它不会将原始历史恢复到常驻表面,也不会使其成为每个请求的一部分。 提供商确认的上下文溢出具有固定的一次性恢复策略:仅压缩一次,并且只有在持久化表面替换提交后,才重放失败的主模型请求。如果该重放也溢出,则保留提供商错误,而不是启动另一个压缩循环。这与 sessionCompaction.compactionRetries 无关,后者控制当一个检查点仍使会话高于配置阈值时,额外的成功压力压缩。 验证工作流 每次编辑后运行快速确定性检查: bash pnpm check 当更改涉及插件接线、提示词、工具、表面落地或持久化时,运行真实的端到端冒烟测试: bash pnpm e2e 在更改压力选择、分段、会话工具、工作器编排、检查点渲染或压缩事务后,运行专用的会话压缩 E2E: bash pnpm e2e:session 它在测试覆盖层中禁用原装后端,创建三个已完成的轮次,注入由 turn-memory 生成的相同轮次后助手替换,并首先证明上游 token-meter 拒绝该生命周期形态。然后它强制前两个轮次进入独立分段,并通过其规范表面定价回退手动调用自定义引擎。在单次失败预算下,第一个分段的分叉在已接受的变更后被故意停止;测试要求新生成的延续来完成它,然后要求下一个分段以分叉开始。最后,它验证标准事件邻接、检查点来源、未触碰的保留尾部、持久化,以及确切会话的冷恢复。 当生产提示词行为发生变化时,还要运行定性引导回归: bash pnpm e2e:prompt 重复相同的独立真实模型场景以测量观察到的稳定性: bash TURN_MEMORY_PROMPT_EVAL_RUNS=3 pnpm e2e:prompt:repeat 重复包装器保留每个会话和表面路径,然后在 .tmp/ 下报告通过率和 Wilson 95% 置信区间。 运行更广泛的生产提示词矩阵,以覆盖拼写错误合并、真正的证据驱动目标变更以及实现细节保留: bash TURN_MEMORY_PROMPT_EVAL_RUNS=2 pnpm e2e:prompt:matrix 每个场景都执行真实的父级工作、自动轮次压缩、冷恢复、完整表面重放和 sessionQuery 比较。该矩阵接受可变的有效节点计数,但要求因果用户/助手边界和场景特定的延续细节。它在每个会话前后对生产提示词、渲染器、编辑器和插件入口进行指纹识别,因此并发编辑会使运行失败,而不是混合提示词版本。使用 TURN_MEMORY_PROMPT_EVAL_SCENARIOS=goal_change 来隔离单个场景。 这会创建一个真实的多步骤轮次,其第一次 /repo 尝试失败,并且其后续用户引导说 playground。与确定性冒烟协议不同,它使用生产压缩提示,并要求两条用户消息合并为一个修正后的意图,其来源包含这两个来源。助手的工作可以保留在多个语义节点中,但它们合在一起必须同时保留失败的绕行和最终的 6 类型/9 设备结论。它检查实时折叠、持久化、冷加载和会话查询投影,然后写入 .tmp/prompt-eval-surface-.json 以供检查。 e2e 工作流使用专用的 ~/.dsh/profiles/test-turn-memory 配置文件以及配置的真实模型。它创建一个全新的父会话,强制进行多节点工具轮次,有意让其实时 turn/end 保持未压缩,刷新持久化,销毁代理,并冷恢复同一会话。然后恢复扫描必须启动错过的压缩。运行器在接受 n* -> r 变更后中断其第一个工作进程,并验证新生成的恢复工作进程会继续处理那些 r 节点直至最终重写。它检查实时 foldSurface() 和 deriveMessages(),刷新,第二次冷恢复,并验证持久恢复检测既不重复也不改变替换标识。成功以 E2E_RESULT=PASS 结束,打印保留的测试会话 ID,并将精确的 sessionQuery.readSurface() 快照写入 .tmp/e2e-surface-.json。E2E_SURFACE_PATH 输出包含其绝对路径,以便直接检查。 运行器通过 DSH 的有界 appExit 服务请求关闭,而不是调用 process.exit(),因此持久化和插件拆卸会被排空。 每个启用的 turn-memory 实例在成功替换后也会刷新并写入其完整的折叠表面。默认情况下,每个会话的最新快照会写入此插件旁边的 .tmp/e2e-surface-.json;surfaceDumpDir 会更改目标位置,但不设置它并不会禁用该转储。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
vilicvane/dsh-plugin-turn-memory
按对话轮次压缩上下文,按需回读原始历史
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目