DSH Plugins Marketplace

DSH Plugins

Plugins

/

Sessions & Messages

/

dsh-session-toolkit

d

dsh-session-toolkit

Manifest valid

Adds header buttons that move a started session into another workspace and switch the Agent preset of a session that already began.

UI (client)hasBundlePatch

DSH Session Toolkit

Adds two buttons to the DSH conversation header:

ButtonWhat it does
⇄ WorkspaceMoves the current session into another registered workspace (optionally archiving the original)
◈ PresetSwitches the Agent preset of the current session — including sessions that already started

Both are things a browser half cannot do alone, which is why this plugin ships a host half as well.

Install

From the plugin market (search for "Session Toolkit"), or by hand:

dsh plugin --profile web add https://github.com/QqiqiQ/dsh-session-toolkit/releases/latest/download/dsh-session-toolkit.tgz

Then restart dsh web.

Why a host half is required

Workspace membership is derived, not stored. A session belongs to a workspace because the cwd in its session header equals the workspace path — dsh-workspace's sessionIds getter filters on that condition every time, and attachSession refuses a session whose cwd does not match. The header is immutable and no API rewrites cwd, so "moving" a session means opening a continuation session in the target directory that carries the whole history:

sessionQuery.readSession
  → agents.create({ seed, inheritedEventCount,
                    meta: { cwd: targetPath, parentSession: sourceId, isSeeded: true } })
  → workspace.attachSession(newId)      // its header cwd is the target path, so it survives a restart
  → optional archiveSession(sourceId)

The new session keeps fork provenance (parentSession, isSeeded, the session/end-seed marker), because the harness has no "delete session" and no "change session id". It also starts on the model the source last used — read from the last model/selection event, or, when the picker was never touched, from the config of the last request/header event — because the persona prefix's {{model}} variable only resolves from the options the Agent was created with.

agentPresets.select only accepts a blank session. It throws agent-preset/locked once the session has run a turn. The plugin tries that official path first, and only when it is refused does it rebind the same Agent scope through agentPresets.recompose(agent.ctx, id) and write the agent-preset/selected event that call would have written. History is not rewritten; projections and browser tabs follow.

Channels

The browser half calls two host routes of this package with relative-URL fetch (deliberately not session commands, so nothing lands in the session log as command/run):

  • POST /session-toolkit/migrate — { sessionId, workspaceId, archiveSource?, agentPreset? }
  • POST /session-toolkit/preset — { sessionId, agentPreset }

Both pass connection.requestRejection (login cookie / loopback / same-site checks) first, accept application/json only, and cap the body at 64 KiB.

Known limits

  • A migration produces a new session id; the original history is untouched. To get it back, unarchive the source session in its original workspace.
  • Switching the preset changes the system prompt and tool catalog of the next request, so the provider's prefix cache is invalidated from the first token. While a turn is running the route answers session-busy.
  • Switching the preset does not switch the model: model choice belongs to the session, not to the preset.

License

MIT

Comments

Loading…

Similar plugins

dsh-session-manager

Session manager panel under Settings → Plugins: list all sessions with title, cwd, agent preset, updated time, turns and steps, expand a row to view message history, delete non-running sessions, and e

Sessions & MessagesManifest valid

★ 1

↓ 2.4k/wk

MIT

TypeScript

dsh plugin --profile web add dsh-session-manager

by aefuimn

Hot-switch agent presets (working modes) inside a running DSH session: mode changes are armed immediately and applied at the next step boundary through agentPresets.recompose, via the /mode slash command.

Tools & CapabilitiesManifest valid

★ 0

MIT

JavaScript

Aug 21, 2026

dsh plugin --profile web add dsh-agent-preset-switcher

Adds a Session without workspace entry to the DSH Workspace picker, creates isolated date-organized directories, and keeps started sessions resumable under Ungrouped.

Sessions & MessagesManifest valid

★ 2

↓ 150/wk

MIT

TypeScript

dsh plugin --profile web add dsh-projectless-session

by AHIOSUZ

Applies per-workspace default Agent and permission presets to new root sessions automatically (Settings - Workspace defaults), using only official extension points.

Security & AuditDevelopment & InfrastructureTerminal & ClientsManifest valid

★ 0

MIT

JavaScript

Sep 10, 2026

dsh plugin --profile web add @ahiosuz/dsh-workspace-tools

by baisama-cloud

Move a session to another workspace by dragging it onto the target workspace header in the sidebar: the session is cloned with full history into the target workspace and the original is archived.

Tools & CapabilitiesTerminal & ClientsSessions & MessagesManifest valid

★ 2

MIT

JavaScript

Aug 22, 2026

dsh plugin --profile web add dsh-session-mover

by yoggu

Adds a /new command to start and open a new Session in the current Workspace.

Sessions & MessagesManifest valid

★ 0

MIT

JavaScript

Sep 28, 2026

dsh plugin --profile web add dsh-new-session