Tyan66666/billion-context-dsh
Tyan66666/billion-context-dsh模型驱动的上下文压缩(Active Context Pruning):由模型决定何时压缩、压缩什么。
管理 soul.md 人设卡与长期记忆,支持按工作区和会话选择人设,并提供读取和更新工具。
Supports DSH 0.2.1-rc.3, including explicit prerelease engines.dsh and peer ranges, with development SDKs pinned to rc.3. This host update adds More navigation menus, keeps unsent drafts on New Session, and follows the official /models listing on the DeepSeek API-key route; the tool, system-prompt, settings and pi-ai interfaces used here remain unchanged, and no removed host API (ctx.layout.entryVisibility, agentPresetNavigation) was in use.
Supports DSH 0.2.1-rc.2, including explicit prerelease engines.dsh and peer ranges. This host update adds DeepSeek V4.1 Flash 1017 and Search/Fetch APIs; the plugin APIs used here remain unchanged. Existing reasoning settings and the opt-in augmentation policy are preserved.
Supports DSH 0.2.1-rc.1. Compatibility is declared through engines.dsh and matching peer ranges, including this exact prerelease. The existing 0.2.0-rc.2 support is retained.
The plugin follows the DSH language setting (Chinese and English in DSH 0.2.0-rc.2), including configuration, status messages and plugin-list metadata. Language-pack locales use the host fallback chain. Switching languages preserves unsaved settings; there is no separate plugin language selector.
memory_* tools treat topic: "core" / "core.md" (case-insensitive, surrounding whitespace ignored) as an omitted topic, reading/writing resident core memory. Other topics keep their existing behavior.topics/core.md files are preserved without automatic merging. Back them up, inspect them with a file reader, merge resident entries into core.md, and rename remaining topic content to another key. New memory_read({ topic: "core" }) calls read resident core.With layered memory enabled, memory_search({ query: "Electron packaging", limit: 5 }) searches topic keys, titles, summaries and full bodies, returning keys and summaries only. Persona topics override global topics with the same key; missing keys fall back to global topics, just like memory_read(topic). English matching is case insensitive; Chinese phrases also use overlapping two-character terms. This is lexical search, so synonyms without shared text require another query. Search does not require automatic recall to be enabled.
The configuration page offers these independent, default-off options:
memory.recall: "keyword": from the second human message handled by the liveplugin, add a soul:recall section with possibly relevant keys and summaries. The first message and internal context/compaction summaries do not trigger it.
memory.indexMode: "recall": while keyword recall is enabled, replace the fullinjected topic index with a short search hint. The existing index generation, title/summary bounds, truncation rules and memory_read() index stay unchanged.
memory.compactionRecall: true: after successful compaction or pruning, thenext human message restores descriptors for topics read/appended/rewritten in this session. They remain stable for that turn, and clear on the next human turn. Failed compaction does not trigger recovery. Recovery tracks at most the latest 128 topic keys in memory; unloading/restarting the plugin resets state.
Recall and recovery never inject topic bodies. They share recallMaxChars (default 1600, maximum 8000) and the remaining injectMaxChars budget after the existing memory section; if core/index uses the budget, no extra rows are added. Each group includes at most recallMaxTopics (default 5, maximum 20). Dynamic descriptors always preserve literal braces, even with allowTemplates. memory.inject: false and skipSubagents also suppress soul:recall.
Suggested opt-in configuration in the soul-md row:
memory:
layered: true
recall: keyword
indexMode: recall
compactionRecall: true
recallMaxTopics: 5
recallMaxChars: 1600
injectMaxChars: 24000Open Plugins → Installed → dsh-soul-md from the homepage sidebar to configure and save this plugin. The page uses the official plugins.bundle.config interface, without a duplicate entry in global Settings. Web and Desktop share the page. This version requires DSH 0.2.0-rc.2 or a later 0.2.x host; existing configuration is retained.
GitHub: Scorp1o117/dsh-soul-md · npm: dsh-soul-md
Part of the DeepSeek Harness Enhancement Suite — Vision · Soul/Persona · Long-term Memory · Plugin Marketplace.
Persona + long-term memory for DeepSeek Harness — zero file management:
In Settings → 人设卡, type a card name and its content, hit save. The plugin manages everything else.
the soul:persona section. Multiple cards are supported; pick a default, and switch per chat from the conversation header (a "人设" select).
memory_append / memory_read / memory_rewrite — a persistent memoryfile (Agent.md / memory.md style). The active persona card has its own memory; otherwise the global memory is used. In layered mode, their optional topic argument reads or writes one on-demand topic.
memory_search — search layered topic content and return keys and summaries.soul_read / soul_update — the AI reads and **evolves its own personacard**: when it notices a stable trait, preference, or value of its own, it folds it into the card. It "grows" across sessions instead of resetting every time.
soul:memory prompt section (capped)so the agent always sees its memories.
session choice (chat switcher) > workspace mapping > default card > none. Switching applies from the next turn — no restart.Use the Desktop-installed dsh command (Application → Manage dsh Command), or the app’s Plugins page. Then install into the Desktop profile:
dsh plugin --profile desktop add dsh-soul-mdRestart the Desktop app to load the client bundle. Desktop keeps its profile under $DSH_HOME/profiles/desktop.
If Hub reports Cannot find module '...app.asar/dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/cli.js', the Desktop CLI bootstrap failed before loading this plugin. Reinstall a complete official Desktop distribution, or try the official Plugins page (outside Hub). Switching this command to the Web profile does not repair the Desktop package. See issue #14.
The plugin is a plain Cordis row. Mount it in a profile patch ($DSH_HOME/profiles//cordis.patch.yml):
- insert:
- id: soul-md
name: 'dsh-soul-md' # after: pnpm add dsh-soul-md in the profileThen restart dsh web and open Settings → 人设卡: type a name + content, save.
soul-md entry of the active Profile patch,as cards: { name -> markdown } + active + per-session sessions.
$DSH_HOME/soul-md/memory/(global.md + one file per card), created on demand.
memory//core.md is injectedwithin the configured cap, while memory//topics/*.md contributes its title and first body line to an index. memory_read({ topic: "..." }) retrieves a topic's full text. Existing .md files remain readable and seed core.md on the first layered append, so enabling the option does not hide old memory.
path card (as "默认") and the old memory file on first run.
Field · Default · Meaning cards · {} · Persona cards: name → markdown content (managed from the UI). active · '' · Default card name; empty disables the persona by default. sessions · {} · Per-session choice (sessionId → card name / none / ''); written by the chat switcher. workspaces · {} · Per-workspace choice (workspace path → card name / none / ''); written from the settings page. workspaceList · [] · Read-only workspace list (path + title), maintained by the host from dsh's workspace registry. memory.maxBytes · 1048576 · memory_append / memory_rewrite refuse to exceed this size. memory.inject · true · Render the memory as the soul:memory prompt section. memory.layered · false · Enable progressive disclosure: core plus a topics index. memory.recall · off · off or keyword; automatic topic discovery from the second human message. memory.indexMode · all · all or recall; the latter omits the full injected index only when keyword recall is enabled. memory.compactionRecall · false · Restore consulted topic descriptors for the next human turn after successful compaction/pruning. memory.recallMaxTopics · 5 · Results per recall/recovery group, maximum 20. memory.recallMaxChars · 1600 · Combined recall/recovery cap, maximum 8000; also limited by the remaining memory injection budget. memory.injectMaxChars · 8000 · Cap for injected memory content. Single-file mode retains the beginning and recent tail. Layered mode reserves the topic index first, then retains both ends of core. memory_read also retains both ends when its response exceeds 20,000 characters. memory.order · 0.5 · Prompt section order for the injected memory section. allowTemplates · false · Keep {{…}} literal in persona cards and memory by default; when enabled, the host interpolates prompt variables and unknown variables fail rendering. skipSubagents · false · Delegated child sessions (DSH marks them origin: "subagent") skip the soul:persona / soul:memory sections; tool scopes are unchanged. legacy fields · — · path, fallback, order, complete, watch, debounceMs, soulMaxBytes, personas, roster, memory.path… kept so old composition entries and settings still validate; only used for the one-time import.
skipSubagents is off by default and keeps the v0.7.0 behavior. When enabled, sessions that DSH created as delegated children (origin: "subagent") no longer receive the soul:persona / soul:memory sections — a child usually does one small job and does not need to carry the parent's full persona and long-term memory every turn.
It only affects prompt injection: cardNameOf, memoryTarget, and the scope of the three memory_* tools are unchanged, so a child reads and writes exactly the same card and memory files it would otherwise (nothing silently falls back to global.md).
Compatibility: tested with @deepseek-ai/dsh@0.1.7-rc.1 and 0.1.7-rc.2 (npm next); npm latest is 0.1.5-rc.3. This version uses Profile patch settings and browser configForms. Older hosts require an older plugin release. Alpha builds remain unknown.
0.1.5-rc.3 Profile.skipSubagents: delegated child sessions (origin: "subagent") no longer receive the soul:persona / soul:memory sections.cardNameOf, memoryTarget, and the memory_* tool scopes are unchanged.memory.inject / memory.layered.0.1.5-rc.3 (next) compatibility; unverified alpha releases remain unknown.memory.layered; existing users keep the single-file behavior.core.md as resident memory and only a title/summary index fortopics/*.md.
topic argument to all three memory_* tools for on-demandtopic reads and writes.
.md visible as the core fallback and carries it into thefirst layered append.
smoke checks on DSH 0.1.5-rc.2.
If an existing card relies on host variables such as {{cwd}}, enable Allow prompt variables in persona and memory (allowTemplates: true) in settings. Unknown variables still fail rendering in that mode.
byte-identical (KV-cache friendly) and edits hot-apply.
soul-md settings namespace directly; the plugin