
Security News
vlt 1.5.0 Adds Agent Skills Management
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.
Practical patches for missing DeepSeek Harness Web context and history controls.
Practical, independently switchable patches for missing context and history controls in DeepSeek Harness Web.
dsh-more integrates with the existing DSH interface instead of adding a separate management dashboard. Its current patch set can edit a user message and restart from that point, remove one message while preserving the surrounding context, and permanently delete a session while leaving native archive behavior intact.
Compatibility: development dependencies target DeepSeek Harness
0.1.5-rc.2and require Node.js>= 24. The current source has also been verified in a local linked installation of the official macOS desktop0.1.7-rc.2. DSH is still a release candidate, so upgrades may require adapter changes.
| Patch | Where it appears | Behavior | Default |
|---|---|---|---|
| Edit and restart | User-message action row | Creates a clean continuation before the selected turn, submits the edited text, archives the source branch, and opens the child session | On |
| Delete one message | User- and assistant-message action rows | Removes the selected model-surface node, expands only when tool call/result pairing requires it, rebuilds the surviving context, and opens a child session | On |
| Permanently delete session | Separate item beside the native Archive action | Stops and unloads the target session, removes its exact JSONL persistence directory, detaches it from workspaces, and synchronizes the lists incrementally | On |
| Model capabilities | Settings → Models → Model capabilities | Configure image support, selectable thinking types and parameter formats per model | On |
Patch switches live under Settings → Plugins → Plugin configuration → DSH More and take effect without rebuilding the plugin.
>= 24dsh CLI and a Web profile compatible with DSH 0.1.5-rc.2dsh-morepnpm is needed only when installing or developing from source. For a published release, use the DSH plugin command so the package is installed into the selected DSH profile; do not install it globally with npm install -g.
dsh plugin --profile web add dsh-more
This resolves dsh-more from npm and adds it to the Web profile. Restart the running Web service after the command finishes:
dsh web
If dsh web is already running, stop that process first and start it again. Then open Settings → Plugins → Plugin configuration and confirm that DSH More appears.
You can also verify the installed dependency from the command line:
dsh plugin --profile web list dsh-more --depth 0
Pin the install when you need reproducible behavior or are testing a DSH compatibility combination:
dsh plugin --profile web add dsh-more@0.0.1
dsh plugin --profile web add dsh-more@latest
Restart dsh web after updating. Existing patch settings remain in the DSH dsh-more Settings namespace.
minimumReleaseAgeA Web profile may intentionally reject a release that is newer than its pnpm minimumReleaseAge. The safest option is to wait for that cooling period. If you published or independently verified the release and intentionally want to install it immediately, relax the policy for this command only:
dsh plugin --profile web add --config.minimumReleaseAge=0 dsh-more@latest
This does not change the profile's long-term configuration, but it does relax the age check for the command's dependency resolution. Do not use it for an unverified package or rebuild the profile lockfile merely to bypass the policy.
Use this path for development before publishing to npm:
pnpm install
pnpm run check
dsh plugin --profile web add /absolute/path/to/dsh-more
If local linking is blocked only because another dependency already locked in the Web profile has not satisfied minimumReleaseAge, use the existing store and a one-command policy override:
dsh plugin --profile web add --offline --config.minimumReleaseAge=0 /absolute/path/to/dsh-more
--offline prevents new downloads, and both flags apply only to this command. Restart dsh web after installing the local checkout.
dsh plugin --profile web remove dsh-more
Restart dsh web once more. Removing the package removes its UI and runtime patches; it does not rewrite or recover session data that was already changed or permanently deleted while the plugin was installed.
The plugin cuts the durable log immediately before the selected message's owning turn, creates a child session with the same workspace, live preset composition, provider/model selection, and token limit, then sends the edited message as the next user input. The source session is archived, not physically deleted.
The first turn in the child reuses runtime context already retained by the seed so DSH does not append a duplicate system-prompt snapshot. Normal live context assembly resumes after that turn.
Deletion is implemented as context reconstruction, not as a tombstone placed in front of the model. The plugin selects the surviving current model surface, rebuilds ordinary balanced turns and steps in a child session, archives the source branch, and opens the child. The deleted content is absent from the child's raw history, trajectory, and future model input.
Only the selected node is removed unless a tool call/result range must remain atomic. Editing is the operation that intentionally discards the selected turn and everything after it.
Editing performs its state check and preallocates the continuation inside the single submission; message deletion still shows a preview before confirmation. Both operations watch DSH's incremental session-added event while committing. As soon as the child appears, the client hands off directly instead of refreshing the list, passing through a blank view, and then reopening. A full refresh remains only as a compatibility fallback when the incremental event is missing.
Open a session row's overflow menu and choose the separate Permanently delete session action. Native Archive session remains unchanged.
After confirmation, DSH More cancels a running task, waits for idle, flushes the session, unloads its Agent/Session handles, removes the exact persistence directory returned by DSH, and detaches the session from its workspaces. The UI follows DSH incremental events first and refreshes the lists only when those events are missing. Deleting the current session selects an adjacent visible session first so the conversation area does not pass through a blank state.
Irreversible: permanent deletion does not archive the session and does not move it into a DSH More trash directory.
Open Settings → Models, expand a saved provider with Edit, and click Model capabilities below a model:
Save writes the model's input ([text, image] or [text]), reasoningEfforts, and compat.thinkingFormat under llm-pi-ai.providers.<route>.models[] in settings.yaml. DSH applies the changes through its live settings mechanism.
Each setting independently offers Inherit defaults, removing that model declaration and using DSH's catalog, provider configuration or adapter defaults. Missing declarations do not prove support: unknown models normally default to text input with no selectable thinking levels. A custom reasoning list needs at least one non-off level. The off parameter may be blank or use an explicit API value.
This replaces the old model reasoning effort patch and never auto-fills low / medium / high. Existing model declarations remain editable: the old patch recorded no provenance, so upgrades cannot distinguish automatically filled levels from deliberate configuration. Disabling the patch removes its controls. Native vision declarations and pi-ai settings remain effective; native DeepSeek per-model reasoning restrictions require this patch to stay enabled.
Writes carry the revision read when the dialog opens. Concurrent changes cause a conflict instead of an overwrite; reopen the dialog to retry. Save new models in the provider editor first. Native DeepSeek is also supported: image input is stored in llm-deepseek.models[].inputModalities; per-model thinking declarations use the model's reasoningEfforts extension field, applied by this patch to selectors and requests. Native thinking levels are fixed to off / low / high / max; a deployment-wide disabled policy remains authoritative.
If the dialog reports incompatible frontend and backend versions, restart DSH and refresh the page. Rebuilding or refreshing only the frontend cannot replace a Host module already loaded in memory. An incompatible response disables saving and shows an explicit diagnostic.

The diagram intentionally contains no patch names or patch count. Adding a patch should update the generated catalog and the Markdown feature table, not require a new architecture image.
The repository is divided into four responsibilities:
src/patches/<patch-id>/patch.json is the single discovery entry for one self-contained Host/Client patch.pnpm run generate validates manifests and derives the typed catalog, default Settings schema, Host registry, and Client registry under ignored src/generated/.src/kernel/ owns activation, disposal, shared message-action composition, Settings projection, and patch contracts without containing DSH-specific feature logic.src/platform/dsh/ concentrates Web slots/DOM targeting, the patch API, trust checks, session access, confirmation tokens, runtime-context replay, and wire-format validation.At runtime, the Client bundle contributes controls to native DSH slots and calls /<plugin>/api/<patch>/<action>. The Host bundle gates the request, dispatches it to the owning enabled patch, and lets the patch use only the DSH services injected by the plugin manifest.
A normal feature patch can be added without editing either root entry point:
src/patches/<patch-id>/;patch.json;hostPatch plus either useMessageActions or clientPatch;The generator rejects missing entries, invalid or mismatched IDs, duplicate ordering, and unsupported Client kinds. This keeps discovery, runtime activation, Settings, and build output aligned.

The generic protocol is stable even as patches are added:
POST with application/json only, cap bodies at 64 KiB, and require x-dsh-more: 1;Origin must match;unknown and are validated before use;jsonl location with DSH's fixed transcript filename, unloads the live session, then deletes that exact session-owned directory; local paths are not returned to the Client.src/
├── patches/ # Feature manifests, Host/Client code, shared wire types, tests
├── kernel/ # Patch contracts, activation, Settings card, shared UI composition
├── platform/dsh/ # Centralized DSH Host/Client adapters and security boundary
└── generated/ # Generated locally; ignored and never edited by hand
scripts/ # Registry generation
test/ # Cross-patch kernel/platform contract tests
build.mjs # Host ESM, Client bundle, declarations, injection validation
Read CONTRIBUTING.md before adding a patch. It documents the patch-directory boundary, Host/Client contracts, destructive-operation requirements, test placement, and review checklist. The current contribution guide is written in Simplified Chinese.
pnpm run generate # Validate manifests and rebuild src/generated/
pnpm run peers:check # Verify the locked peer-dependency graph
pnpm run typecheck # Generate, then run strict TypeScript checks
pnpm test # Generate, then run the Vitest suite
pnpm run build # Generate declarations plus Host and Client bundles
pnpm run check # Typecheck, test, and build
pnpm run package:check # Inspect the npm package without writing a tarball
pnpm run package # Build and create the npm tarball
Generated source, dist/, and tarballs are not committed. prepack runs the complete check before npm pack or npm publish.
package.json uses compatible version ranges so installs and updates can resolve newer versions within those ranges. pnpm-lock.yaml preserves reproducible builds; a normal install keeps already locked versions. To refresh dependencies and validate them:
pnpm update
pnpm run check
The DSH range ^0.1.5-rc.2 accepts later stable 0.1.x releases and newer 0.1.5 RCs. It does not cross into 0.2 or include alpha/RC releases with a different version tuple.
Automated tests cover patch registry alignment, independent activation/disposal, Settings projection, mutation trust checks, confirmation expiry/tampering/staleness, message selection and clean rebuilds, runtime-context continuity, and cold/live session deletion.
The repository does not currently contain a full browser end-to-end suite against a real DSH Web instance. After changing DSH versions or UI adapters, manually verify message control placement, patch toggles, Chinese/English native menu detection, busy-session rejection, child-session navigation, and cold/live permanent deletion.
See the desktop verification record for the actual macOS 0.1.7-rc.2 window checks. The desktop adapter navigates through uiWorkspace.openSession(), reads current selection from retainedBy.mainView, and temporarily retains newly created Sessions until their drafts can be transferred. Independent tasks, edit/delete handoffs, and current-session deletion share this adapter.
Development and host dependency ranges use ^0.1.5-rc.2; the lockfile records the versions currently verified. The adapters and tests cover the current session format, message provenance, main.conversation slot, and JSONL persistence snapshots and location capability. For an existing local linked install, rebuild, restart DSH, and reload the page to load both the new Host and Client.
0.1.5-rc.2; pre-release API or DOM changes can require adapter updates.jsonl backend with a valid location capability. Its current locate hook is internal; the adapter checks its presence and result. Tests cover plain and Zstandard-compressed session files.FAQs
Practical patches for missing DeepSeek Harness Web context and history controls.
We found that dsh-more 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
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.

Security News
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.