npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-session-move

v0.1.1

Published

Move cold DSH sessions between DSH workspaces without changing SessionId

Readme

dsh-session-move

A DeepSeek Harness feature bundle for moving an existing cold DSH session between two DSH workspaces while preserving its SessionId and event history. The interactive target is the existing session-title row in the DSH Web sidebar; this package does not import Claude Code or other external transcripts.

Current iteration

The service exposes a read-only ctx.sessionMove.inspect({ sessionId, targetWorkspaceId }) dry-run that reports:

  • source and target workspace identity;
  • source and target JSONL locations;
  • immutable source/target headers;
  • persistence revision;
  • physical row and logical event counts;
  • contiguous seq bounds;
  • raw-artifact and logical-event SHA-256 values;
  • stable blockers such as live, archived, missing, same-workspace, unsupported backend/core capability, or target collision.

It uses SessionPersistence.readRaw() rather than inspect(), so the dry-run does not populate a prepared-session cache. The inspection itself performs no mutation.

With all revision-fenced core patches applied, the service registers itself as the one WorkspaceRegistry cold-session mover. The official Web sidebar then executes workspace.moveSession({ targetWorkspaceId, sessionId, beforeSessionId? }) through the typed Host RPC gateway, the registry validates the commit and emits the authoritative workspace/session-moved frame, and clients replace the session cwd plus both Workspace snapshots without optimistic membership edits. A private durable journal under configured root recovers or restores persistence cwd, lifecycle-bound message feedback, workspace accounting, and manual target/source order after interruption. It verifies the final header, unique effective workspace owner, event count, and logical-event SHA-256 before deleting the journal. The ./invariant companion rejects publication if any startup move journal remains unresolved.

Move semantics

A final move changes only the session header cwd and its workspace account. It preserves ID, creation time, lineage, preset, every logical event, and external dsh-session: references. Future tools and sandbox policy use the destination workspace. The first release is JSONL-only and cold-session-only.

See docs/phase-2-design.md for the core relocation seam, crash journal, rollback protocol, and UI integration plan, and docs/distribution.md for installation, support matrix, and rollback. Reproducible first-party changes are stored as a revision-fenced patch series under patches/deepseek-harness/; validate the current series with node scripts/apply-core-patches.mjs <checkout> --check.

Installation

Full capability requires a DSH built from the exact public base with the bundled first-party patch series applied. The npm package is the runtime plugin; the patch bundle builds the runtime.

| Runtime | ctx.sessionMove.inspect() | Sidebar drag move | | --- | --- | --- | | Exact public base 47f943859bef60e4160492346772ded9b24f765a + the bundled patches, built from source | Yes | Yes | | Official installed rc.6, unpatched | Yes (read-only) | No — every move is refused with the unsupported blocker |

Quick install after the patched DSH build:

dsh plugin --profile <profile> add dsh-session-move
# or, from a packed tarball (also works with `pnpm dsh` in a source checkout):
DSH_HOME=<dsh-home> pnpm dsh plugin --profile <profile> add ./dsh-session-move-0.1.0.tgz
dsh --profile <profile> --dump-config

For the complete build-from-exact-base, installation, verification, provenance, and rollback steps, see docs/distribution.md. Use an isolated profile for first-time checks; a profile containing only @deepseek-ai/dsh-base fails activation with "did not activate (waiting for workspaceRegistry, messageFeedback)" until a host bundle is present.

Model Experience

Inspection and journal orchestration add no prompt, message, tool schema, tool result, or model selection. A completed explicit move preserves historical events but changes future working-directory-derived instructions, skills, tools, and sandbox context to the destination.

KV Cache effect

Inspection consumes no model tokens and does not affect cache. A completed move retains the event stream but a resumed request may not reuse provider cache entries whose system context includes the old cwd.

Known Limitations and Deferred Work

  • Official installed DSH rc.6 has no relocation or mover capability, so an unpatched runtime only gets the read-only inspect() service. Drag-to-move requires the user-built patched DSH: exact public base 47f943859bef60e4160492346772ded9b24f765a plus the bundled 8-patch series, which adds the cold lifecycle lease, coordinator seam, recoverable POSIX JSONL transaction, mover registration, typed workspace.moveSession RPC, authoritative host/session-moved frame, and official sidebar cross-group drag. This package never patches an installed DSH on its own.
  • The service injects the workspace/feedback host layer: a dsh-base-only profile fails activation with an explicit "did not activate" error until a host bundle (dsh-headless/dsh-web-app) is present.
  • SQLite and Windows relocation are deferred; the first Provider implementation is POSIX JSONL only.
  • Cross-group drag is verified in official UI tests and the assembled Host integration; a real GUI profile drag has not yet been exercised.
  • Filesystem locks stay defense-in-depth under DSH's one-live-writer-per-session/process model; they do not make concurrent live writers cross-process transactional.
  • No active profile or real session is modified during development.
  • Public source commit 47f943859bef60e4160492346772ded9b24f765a labels itself rc.5, while the installed runtime is rc.6; exact build provenance is unavailable.