
Security News
GitHub to Block pull_request_target Workflows by Default Starting December 2
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.
Conversation history recall for DeepSeek Harness: search the original text of every session (like searching chat records) — literal/fuzzy/semantic retrieval, fully local & offline. AI never forgets what you told it.
🌏 中文 · English
AI never forgets what you told it.
A native DeepSeek Harness (DSH) plugin that gives the agent a memory maze — corridors and rooms built from every conversation you have had together. Every decision, setting, discussion, or casually mentioned requirement is remembered. Ask "where were we?" and it walks the maze, brings back the conversation verbatim, and answers as naturally as if it had never forgotten — you won't even notice it thought for a moment.
Conversation history recall · Three-layer retrieval (literal / fuzzy / semantic) · Fully local & offline · Compaction-proof
While searching, a quiet sweeping light appears in the corner:

When done, no trace:

Conversely, if your sessions are short and easy to scroll, you probably don't need it — it is built for "history too long, memory compacted" scenarios.
dsh plugin --profile web add dsh-recall@0.2.0
One command: the package ships its own composition patch (bundle layer), so the plugin and the search index it needs are wired up automatically. Restart dsh web. Nothing else to do — the model ships with the package (~37MB full install), the index builds on first search, and semantic warm-up finishes quietly in the background (a few minutes, imperceptible to you).
You can also install / disable / uninstall dsh-recall from the Add-ons block of the Plugin Management tab in dsh-extension-hub.
- id: recall
name: dsh-recall
config:
semantic: false # disable the semantic layer (literal + fuzzy only, smaller package)
warmup: gentle # slower warm-up, lower background CPU (only during warm-up; zero afterwards)
| Layer | Technique | Covers |
|---|---|---|
| Literal | Official FTS5 full-text index | Exact keyword matches |
| Fuzzy | Self-built trigram + char-bigram index (zero dependencies) | Rough wording, remembered fragments, typos / missing chars |
| Semantic | Local bge-small-zh model (int8, 24MB, bundled) | Paraphrase, word substitution, "roughly what it was about" |
Every recall merges the three layers automatically, ranks by relevance, and groups by session. Everything runs locally and offline — no external model APIs.
| Capability | Description |
|---|---|
| Three-layer hybrid retrieval | Literal / fuzzy / semantic merged automatically; silent degradation chain (any failure falls back to the layer below) |
| Progressive disclosure | Light coarse recall by default (titles + snippets, low tokens); detail drills into the original text — hit list / exact window / paged browsing |
| Proactive recall | The agent recalls on its own when needed (after compaction, when details are missing) — no need for the user to ask; explicit user requests also work |
| Compaction anchor | After a compaction, one lightweight anchor is injected automatically (summary + key original fragments, expires after 3 turns); exact text stays one drill-down away |
| Scope control | Current session only by default; workspace / all only on explicit user request |
| Compaction-proof | Index covers the full history, including shadowed (compacted) events |
| Incremental indexing | Live sessions via ctx.sessions, persisted via sessionPersistence, append-only deltas |
| Background warm-up | Worker-thread embedding (~10 texts/sec), host event loop never blocked |
| Invisible UI | "Recalling…" sweep → one quiet "Recall complete" line; results never enter the UI, the agent presents them naturally |
The npm package first published as 0.1.0; the 0.0.x entries below are development milestones.
recall returns a light coarse recall by default (titles + snippets, far fewer tokens), with a new detail parameter for the second stage (a session's hit list / the exact original-text window via readEvent / paged browsing); description rewritten so the agent recalls proactively (after compaction, when details are missing — no need for the user to ask), keeping the scope red line and invisible-presentation rules; compaction anchor — after a compaction, one lightweight anchor (LLM summary + key original fragments, expires after 3 turns) is injected automatically, with exact text always one drill-down away.dsh.bundle.patch wires the plugin row and enables full-text session search automatically), optional dsh-recall-models package for the 23.9MB embedding model (--omit=optional for a lightweight build), bilingual README + locale-aware UI.recall tool — official FTS5 full-text search over every past session (including compacted history), grouped by session with a bounded context window; scope control (current session by default); invisible UI (Recalling… / Recall complete).recall tool (defineTool)
├─ Semantic: bge-small-zh int8 ONNX (23MB bundled) → worker-thread WASM inference
│ → 512-dim cosine search, joins the mix only after ≥90% coverage
├─ Fuzzy: self-built SQLite trigram FTS + bigram LIKE + containment rerank (primary)
├─ Literal: official ctx.sessionQuery (fallback)
├─ Stage 1 (default): mixed search → group by session → title + snippet (light coarse recall)
└─ Stage 2 (detail): session hit list / exact original-text window (readEvent) / paged browsing
ctx.sessions / ctx.sessionPersistence) — no .zstd parsing, no private formats~/.dsh/storages/recall-index.db, bundled models/compaction/summary → injects one lightweight anchor (summary + key fragments, expires after 3 turns) into the compacted session; exact text stays one detail drill-down awayv1 · Done — Three-layer hybrid retrieval: official FTS5 literal / self-built trigram+bigram fuzzy / local bge embedding semantic; coverage gate, background warm-up, silent degradation chain.
v2 · Retrieval control
compaction/summary, inject one lightweight anchor (summary + key fragments) automatically; the original text stays one drill-down awayv3 · Memory organization
node .smoke-recall.mjs # unit + integration (mocked, no model needed) — 60+ assertions
node .smoke-semantic.mjs # real-model integration (requires models/ present)
Covers: tokenizer alignment (token-for-token against transformers.js), index increments, scoping, hybrid ranking, degradation, warm-up.
| File | Responsibility |
|---|---|
lib/index.js | Tool registration, scope resolution, hybrid ranking, session aggregation, warm-up scheduling |
lib/fuzzy-index.js | Self-built SQLite index (trigram FTS + bigram + vector table), zero npm dependencies |
lib/tokenizer.js | BERT WordPiece tokenizer (pure JS, token-for-token aligned with the reference) |
lib/semantic.js | Embedder: worker thread, batched embedding, lazy loading |
lib/embed-worker.js | WASM inference + mask-aware mean pooling + L2 normalization inside the worker |
lib/vendor/ | Vendored onnxruntime-web (0.8MB entry + 12MB wasm) + tokenizer.json |
models/ | Merged single-file int8 model (23MB; split into an optional package at publish) |
lib/client.js | Minimal ToolView ("Recalling…" / "Recall complete"), locale-aware zh/en |
dsh-recall — main package (code + vendored runtime + tokenizer)dsh-recall-models — optional dependency (23MB model); npm installs it by default; --omit=optional yields the lightweight build, which degrades silently when the model is absent@deepseek-ai/dsh-session-query(-sqlite), dsh-tools, dsh-session-persistenceMIT
FAQs
Conversation history recall for DeepSeek Harness: search the original text of every session (like searching chat records) — literal/fuzzy/semantic retrieval, fully local & offline, plus a silent host auto-recall layer that injects relevant history when yo
The npm package dsh-recall receives a total of 226 weekly downloads. As such, dsh-recall popularity was classified as not popular.
We found that dsh-recall demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.

Security News
/Application Security
A practical guide to securing GitHub Actions against supply chain attacks, covering malicious pull requests, credential theft, dependency risks, and release pipelines.

Security News
Composer 2.11 adds dependency cooldowns, joining package managers that delay new releases to reduce supply chain risks while allowing urgent security updates.