dsh-context-window

DSH PLUGIN记忆与知识

仓库 CooperZhuang/dsh-context-window

记忆与知识 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

DSH 插件复刻 Codex 上下文窗口管理:token 预算提示、模型可调用的 new_context 工具,用换窗替代摘要压缩,避免隐式有损。

一句话选型结论

按资料字段整理

dsh-context-window 是记忆与知识类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,列出 5 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类记忆与知识 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-09-25 创建于 2026-09-09
README 9.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:CooperZhuang/dsh-context-window
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-context-window:DeepSeek Harness 的换窗式上下文管理插件

  • token 预算阈值提示
  • 模型可调用 new_context 换窗
  • 换窗替代摘要压缩
  • 预算记账对齐 Codex 口径
  • 交接式换窗(规划中)

适用场景

记忆

上游标签

codexcompactioncontext-managementdeepseek-harnessdshdsh-plugin

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✕ 未通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 插件目录树加载失败
  • L5.3_HTTP_SERVED HTTP 服务响应
— · 其它检查项
  • L4_0_SANDBOX 沙盒安装判定 方式:沙盒安装执行

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在记忆与知识场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-context-window当前 L4 · 沙盒安装通过 低风险 0 未标注 有
ruflo L3 · 安装规范通过 低风险 7.4 万 未标注 无
OpenViking L3 · 安装规范通过 低风险 3.9 万 未标注 无
WeKnora L4 · 沙盒安装通过 低风险 3.3 万 未标注 有
distilly L4 · 沙盒安装通过 低风险 2.5 万 未标注 有
EverOS L4 · 沙盒安装通过 低风险 1.3 万 未标注 有

仓库档案

记忆与知识
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方CooperZhuang仓库 dsh-context-window · 默认分支 main
分类记忆与知识memory
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-09-09 · 2026-09-25最后推送 2026-09-25
本站收录2026-09-09首次进入本站目录的时间

README 全文

9.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-context-window

English | 中文

DSH 插件:复刻 Codex 最新的上下文窗口管理模型 —— token 预算提示、模型可调用的 new_context、以及用换窗替代摘要压缩。

> 状态:v0(0.0.1)
> 预算记账、窗口世代状态、提示文本与阈值节流已实现并有 82 个单测;
> resetMode: 'seam-region' 委托 ctx.compaction.compactRegion 执行整面替换(会摘要);
> resetMode: 'handoff' 已实现——不跑摘要,直接换窗并写入交接检查点(目标 / 未完成待办 / 模型笔记 / 最后一条人类请求)。
> 插件默认 enabled: false,装上不会改变任何行为。


为什么要有这个插件

Codex 从 0.153.0 起(PR #42385)加入了一条与"摘要压缩"并列的路径。官方配置文档的原话是:

> Rather than repeatedly compressing context into a single summary, it uses notes and searchable history to preserve accumulated details.

关键实现(PR #29743)的注释:

> Token-budget compaction skips model/server summarization and installs a fresh context window instead.

也就是说:上下文将满时不再写摘要,而是丢掉整个窗口,只装回一份全新的初始上下文。这套设计由三件套组成:

组件 Codex 本插件
预算提示 / developer 消息,开窗一次 + 消耗 25/50/75% 各一次 ✅ src/notice.ts + src/emission.ts
模型主动换窗 new_context 工具(置标志,下一轮翻转) ✅ src/index.ts(同名工具,同样"置标志"语义)
记账口径 usable = cw × 95%,limit = min(配置, cw × 90%),body_after_prefix ✅ src/budget.ts
换窗后接续 notes / history 工具 + memories 注入 ✅ notes 工具 + resetMode: 'handoff'(history 未实现)

为什么要仿:摘要压缩是"隐式有损"——模型不知道丢了什么,也没法找回来(Codex issue #14347 记录了多轮压缩后的质量衰减)。换窗是"显式重启"——模型知道旧内容还在某处,需要时自己去取。同时省掉每次压缩的模型调用。

为什么不能照抄:Codex 自己这条路径现在有坑——issue #43335 记录换窗后第一个请求完全没有任务状态(notes 没被注入),比经典压缩还差。所以本插件的目标形态是 handoff 换窗:换窗时主动把交接内容写进新窗口,而不是指望模型自己想起来写笔记。


安装

dsh plugin --profile web add dsh-context-window

package.json 声明了 dsh.bundle.patch,所以这一条命令就会把插件挂进 profile 的 bundle 栈,无需手改 cordis.patch.yml。装完默认 enabled: false。

挂载约束(重要)

ctx.compaction 是按 realm 隔离的。shipped Web profile 把 host 平面的压缩行显式禁用,改由 standard agent preset 在隔离 realm 里挂载:

# dsh-agent-presets/presets/standard/agent.cordis.yml
- id: compaction
name: cordis:group
isolate: { compaction: true, toolResultPruner: true }

而 tokenMeter / tools / systemPrompt 留在 host 平面。因此:

需求 挂载位置 结果
提示 + new_context + notes 工具 profile(host 平面) ✅ 可用,compaction-basic 继续负责压力压缩
resetMode: 'handoff' 无摘要换窗 profile(host 平面) ✅ 不需要 ctx.compaction:插件自己写整面替换
resetMode: 'seam-region' 委托换窗 agent preset 的 compaction realm ✅ 可替换 compaction-basic
两个后端并存 —— ❌ 一个 realm 只允许一个 ctx.compaction

seam-region 在 host 平面挂载时,new_context 请求会因为没有压缩后端而告警并丢弃,不会静默改历史。handoff 模式没有这个限制。


配置

在挂载行或 profile 的 cordis.patch.yml 里写:

- id: context-window
name: 'dsh-context-window'
config:
enabled: true
resetMode: handoff
noticeThresholds: [25, 50, 75]
effectiveContextWindowPercent: 95
autoCompactTokenLimitRatio: 0.9
fallbackBufferTokens: 8000
reminderThresholdTokens: 16000
bodyAfterPrefix: true
toolEnabled: true
toolName: new_context
notesToolEnabled: true
notesToolName: notes
字段 默认 说明
enabled false 总开关;关闭时插件不注册任何东西
resetMode 'seam-region' seam-region = 委托 compactRegion 替换整面(会摘要);handoff = 无摘要换窗 + 写入交接检查点
noticeEnabled true 是否注入窗口提示
noticeThresholds [25, 50, 75] 消耗百分比阈值,每个窗口每档只发一次
effectiveContextWindowPercent 95 可用窗口占比(对齐 Codex)
autoCompactTokenLimitRatio 0.9 对 configuredLimit 的硬钳制(对齐 Codex)
configuredLimit 未设 显式 token 上限,受上一行钳制
fallbackBufferTokens 8000 阈值下为下一轮输出预留的空间
reminderThresholdTokens 16000 剩余降到此值时发一次换窗预告
resetReminderTemplate Codex 同款文案 + notes 一句 必须含 {n_remaining};{notes_tool} 会被替换成工具名
bodyAfterPrefix true 只对窗口基线之上的增长计费
toolEnabled / toolName true / new_context 模型可见的换窗工具
notesToolEnabled / notesToolName true / notes 模型可见的笔记工具(跨窗口接续)
maxNotes / maxNoteChars 8 / 500 跨窗笔记的条数与单条长度上限
maxHandoffTodos 12 检查点里携带的未完成待办上限
maxHandoffRequestChars 2000 检查点里携带的最后一条人类请求上限
maxRecoveredNoteChars 2000 从日志回读笔记时的总长度上限

配置在加载时失败即报错:比例越界、resetMode 未知、模板缺占位符都会拒绝插件加载。


模型看到的文本

窗口提示(开窗时带窗口 id 链):

Current context window 1.
First context window id 0199...
Previous context window id 0199...
Current context window id 0199...
You have 121600 tokens left in this context window.

接近耗尽时追加一次预告(默认文案 = Codex 原文 + 一句 notes 提醒):

Your context window is nearly exhausted (only 14200 tokens remaining) and will be automatically reset for you soon.
Once reset, message items in the current context window will be cleared in the new window, but notes and history items will be persistent across windows.
Before the reset, call the notes tool once to record anything the next window must not lose.

new_context 工具返回:

A new context window will start without summarizing conversation history.

notes 工具返回:

Noted (1/8 notes retained for the next window).

resetMode: 'handoff' 换窗后,新窗口的第一条消息就是检查点(缺失的段落直接省略):

Context window 1 (id 0199…) ended; this is context window 2 (id 0199…).
The messages of the previous window are gone. The state below was carried over verbatim.

修复换窗后没有任务状态的问题

- [~] 补 history 工具
- [ ] 真机挂载冒烟

- seam 禁止不平衡切点,换窗只能落在 step 边界

继续之前的工作

已知限制

  • host 平面无法接管压缩后端(见上表)。seam-region 要真换窗,必须把行挂进 agent preset 的 compaction realm;handoff 不需要后端,host 平面即可换窗。
  • 换窗只能落在 step 边界:DSH 的压缩 seam 强制 tool-pairing 平衡,不允许切穿一个还在飞的工具调用;Codex 允许中途换窗并丢掉活跃的 tool output,本插件不仿这一点。
  • token meter 是启发式的(4 字符/token),CJK 与 JSON schema 会被低估;阈值会偏晚触发。它只复用 envelope 完全一致的服务端用量。
  • 模型声明的窗口缺失时不工作:当前 settings.yaml 里选用的模型没写 contextWindow 时,会回落 adapter 默认值;如果 adapter 也不声明,插件会告警并保持关闭提示。
  • handoff 不产生 compaction/* 事件:换窗在 /compact 的 UI 与统计里不可见,只在日志里留一行 handoff: window N -> M。这是"零模型调用"的代价。
  • 基线不持久:baselinePrefillTokens 只在内存,进程重启后 body_after_prefix 会退化为 total(笔记不受影响,它们能从日志回读)。

路线图

  1. history 工具(按窗口检索历史;notes 已实现)。
  2. 基线持久化(U3)。
  3. 浏览器半:在已有 ContextMeter 上显示窗口序号与剩余量。
  4. 真实 DSH 挂载冒烟(dsh plugin add + headless 渲染)。

开发

pnpm install
pnpm check      # typecheck → lint → build → test
pnpm test       # 82 个单测

lib/ 是构建产物(tsdown + tsc -p tsconfig.build.json),不入库。

接手开发请先读 docs/handoff.md(自包含的交接文档:现状、环境事实、挂载约束、API 地图、陷阱清单、下一步)。设计决策见 docs/design.md。

许可

MIT

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-context-window 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:CooperZhuang/dsh-context-window` 即可。

dsh-context-window 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-context-window 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-context-window 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-context-window 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-context-window 有哪些功能?

token 预算阈值提示、模型可调用 new_context 换窗、换窗替代摘要压缩、预算记账对齐 Codex 口径、交接式换窗(规划中)。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

2 条
不同作者的仓库分开列,请确认你要装的是哪一个
记忆与知识
按星标排序,可作替代方案

ruflo

ruflo

L3 · 安装规范通过 7.4 万 星

OpenViking

OpenViking

面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`vik

L3 · 安装规范通过 3.9 万 星

WeKnora

WeKnora

把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己

L4 · 沙盒安装通过 3.3 万 星

distilly

distilly

Distilly — Distill how they think into reusable Skills for any Agent o

L4 · 沙盒安装通过 2.5 万 星

EverOS

EverOS

L4 · 沙盒安装通过 1.3 万 星

MemOS

MemOS

L4 · 沙盒安装通过 1.2 万 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。