DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Effort Memory — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
E

dsh-effort-memory

Effort Memory

仅主机端 DSH 插件:记住每个(提供商、模型)最后生效的推理力度,并在会话切换回来时恢复

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:cup113/dsh-effort-memory#4a5ae490f97245946f4cbad6e14c5f813f5e8734
README兼容性版本

兼容性与来源证明

Effort Memory 以 dsh-effort-memory 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/9/22

版本

0.1.0stable
2026/9/22

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/24
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Client Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilities为自定义 pi-ai 提供商声明每个模型的能力(图像输入和推理力度),可直接在 Models 设置卡片中编辑;写入官方 llm-pi-ai 设置命名空间,不更改 DSH 源代码。Codex Subscriptiondsh-codex-subscription通过 OAuth 在 DeepSeek Harness 中使用 ChatGPT 和 Codex 订阅,支持配额管理、安全重置、网页搜索、图像和快速模式Plugin Subscriptionsdsh-plugin-subscriptions将 ChatGPT (Codex)、Claude、Grok (X Premium)、GitHub Copilot 和 Google Antigravity 订阅用作 DeepSeek Harness LLM 提供商,并通过网页设置页面使用 OAuth 登录

README

dsh-effort-memory

An out-of-tree DeepSeek Harness (DSH) plugin that remembers the reasoning effort last actually in effect for each (provider, model) route and restores it when a session switches back to that model.

Why

The composer's model seat renders the effort from the durable modelSelection projection. Picking a different model sends that model's own defaultEffort (dsh-client-ui-model-selection/lib/client.js:427,883), and the host resolver materializes the adapter default when a caller omits an effort (dsh-llm/lib/index.js:2116-2130). So a model switch always lands on the new model's default, and the level chosen on the model being left is not restored on return.

This plugin closes that gap by re-issuing exactly one selection through the same public command interface the GUI calls — it appends no session events itself, registers no service, and writes no settings.

Behavior

  1. The memory key is (provider, model); the value is the effort id that was last in effect on that route.
  2. On a route change A -> B, the plugin remembers A's effort, then:
    • if B has a remembered effort and B currently advertises it, it re-issues one selection through ctx.sessionController.selectModel(...), so the session's durable selection becomes { B, that effort };
    • otherwise it does nothing and B keeps its own default. This is deliberate: a first visit to a never-used model lands on that model's default.
  3. A target model that declares no reasoning capability (resolved reasoning missing, or reasoningEfforts: false in settings) gets no reasoningEffort and no error.
  4. A remembered effort the target no longer advertises (for example rewritten by dsh-custom-reasoning-effort) falls back to the model's default silently, with no retry.
  5. Effort-only changes on the model already selected are never touched.

Design constraints

  • Host half only. No client.js, no slot, no React, no UI.
  • One lever. ctx.sessionController.selectModel — the same public command interface the GUI calls. The plugin never appends session events itself and never rewrites in-memory selection state.
  • Capability first. ctx.llm.resolveModelInfo(provider, model) is consulted before any re-issue, because selectModel throws UNSUPPORTED_REASONING_EFFORT for a level the target does not advertise.
  • Loop-safe. Only a route change can trigger a re-issue, only when the event's effort differs from the remembered one, and the re-issue keeps the same route — so the event it produces cannot re-enter the rule as a change.
  • Replay-safe. Constructor seeds (replay, fork, resume) never publish on the session/event firehose; a seq < session.firstLiveSeq guard is kept as belt-and-braces.
  • No services, no settings, no retries. Any failure is logged and skipped; nothing is ever surfaced to the user.
  • Zero runtime dependencies. defineDomain/domainTable are identity wrappers and the runtime calls only valueSchema.parse(raw), so the domain spec is declared inline; a link: install does not install a linked package's own dependencies, so a bare import of zod or @deepseek-ai/dsh-storage-domain would not resolve.

Persistence

  • Domain effort_memory, table efforts, key JSON.stringify([provider, model]), record { reasoningEffort }.
  • The domain name must match UNIT_NAME_RE = /^[a-z][a-z0-9_]*$/, which forbids the hyphen — hence the domain is effort_memory while the package, the bundle patch row id, and the exported plugin name all stay effort-memory.
  • With the base storage stack mounted, the single-layout document lands at $DSH_HOME/storages/effort_memory.json and survives restarts.
  • Without ctx.storageDomain, memory degrades to a process-local Map (a warning is logged at apply time) and is lost on restart.

Install

From a checkout, by path:

dsh plugin --profile <name> add link:<absolute path to this repository>

Directly from GitHub:

dsh plugin --profile <name> add github:cup113/dsh-effort-memory

dsh plugin forwards to pnpm in the profile directory and then reconciles dsh.profile.bundles: a dependency resolving to a package that declares dsh.bundle joins the layer stack automatically. A new bundle row and its Node ESM module are both loaded at boot, so restart dsh after installing or after editing index.js.

Layout

PathRole
index.jsHost half: event listener, service calls, storage memory (apply, inject, name)
decide.jsPure rules: route keys, effort normalization, the decision table
cordis.patch.ymlThe one bundle row (id: effort-memory, name: dsh-effort-memory)
test/Test suites: pure layer, packaging parity, and an integration test
_verify/Harness used against a live DSH: a dynamic host probe, a multi-frame session-log extractor, a mutation check

Only the root files listed in files are the bundle; test/ and _verify/ are inert to the Loader.

Tests

node test/all.mjs

Twenty assertions: the pure decision table, packaging parity (bundle row id, package name, storage-domain name), and an integration suite that drives the real apply() against a fake Cordis context — listener shape, event ordering, the re-issue loop breaker, replay-seed rejection, and the storage-less fallback. CI runs the same entry on Node 20 and 22.

node --test is deliberately not used: it runs each file in a child process with piped stdio, which a confined sandbox refuses.

_verify/mutation-check.mjs proves the decision assertions are not vacuous: with the restore branch removed from decide.js, the canonical assertion flips.

Known limitations

  1. One settings write per switch is performed by the public selectModel path itself (agentDefaultModel.saveSelection → settings.replace('agent-default-model', …)). This plugin adds no settings namespace and no settings write of its own.
  2. Memory is global per (provider, model) — shared by every session and workspace, as specified.
  3. The plugin acts on every live session whose route changes, subagent sessions included. Restricting to root sessions would require an extra agents dependency.
  4. Without sessionProjections, the first event observed for an existing session can only establish the baseline, so that session's first switch after a restart may not be restored.
  5. A stale remembered level is kept in the domain (harmless): if a model's effort table later regains that level, it will be restored again.
  6. Single-process visibility only; domain/changed does not cross processes.

License

MIT © 2026 Jason Li