dsh-session-activity
Activity-first session organization for the DeepSeek Harness Web sidebar.
Features
- Always groups visible Sessions by Hot, Warm, Cool, then Cold, using the existing
Last updatedtimestamp. - Keeps the existing Group by → Workspace / In one list choice as the secondary layout inside every activity group.
- Keeps the existing Order by → Manual / Last updated choice inside each attention tier.
- Sorts explicit user interactions first, completed AI replies next, ordinary idle Sessions after them, and AI-running Sessions last.
- Adds a persistent Focus button that hides every group except Hot.
- Recalculates activity groups every minute by default while the page remains open.
- Hides empty activity groups and temporarily expands the group containing the current Session.
- Searches all Sessions even while Focus is enabled.
- Preserves Session open, rename, fork, archive, Workspace create, rename, remove, and new-Session actions.
Install
dsh plugin --profile web add dsh-session-activity
Restart the running dsh web process after installation, then refresh the existing page. The plugin shadows the built-in Workspace browser through DSH's supported slot-priority mechanism; uninstalling it reveals the built-in browser again.
Configuration
Open Settings → Session Organizer to edit and save these values. Browser edits are stored in $DSH_HOME/session-organizer.json, override the profile defaults, and update the open sidebar immediately.
The defaults are:
config:
hot:
label: Hot
within: 3h
expanded: true
warm:
label: Warm
within: 1d
expanded: false
cool:
label: Cool
within: 2d
expanded: false
cold:
label: Cold
expanded: false
focus:
defaultEnabled: false
refreshEvery: 1m
You can also configure the existing dsh-session-activity plugin row in your profile; do not insert the same plugin id a second time. Values saved from Settings take precedence over that composition config.
Durations accept positive integers followed by m, h, d, or w. The thresholds must satisfy hot.within < warm.within < cool.within. Cold is always the unbounded final group. refreshEvery must be at least 1m.
Boundary membership uses the older side at equality:
- Hot: age
< hot.within - Warm:
hot.within ≤ age < warm.within - Cool:
warm.within ≤ age < cool.within - Cold: age
≥ cool.within
Group names, initial expansion, and initial Focus state come from configuration. After a user changes Focus or a group's expansion, the browser persists that choice across reloads. The current Session is shown from a collapsed group without overwriting the saved collapse preference.
Ordering
The primary ordering inside each activity and Workspace section is:
- A question, approval, or other explicit interaction is waiting for the user.
- The AI has finished and the Session is waiting for the user to continue.
- The Session is otherwise idle.
- The AI or one of its uninterrupted subagents is working.
Last updated sorts newest-first inside one tier. Manual preserves the account order inside one tier; the Session action menu provides keyboard-accessible Move earlier and Move later actions.
Focus and search
Focus hides Warm, Cool, and Cold, including a selected non-Hot Session's sidebar row. The conversation remains open. Entering a search query temporarily searches all visible, unarchived Sessions; clearing it restores Focus.
Adding a Workspace
Add workspace opens an in-app directory browser backed by DSH's public browse capability. Navigate with folder rows, breadcrumbs, or an absolute path; optionally show hidden folders, then choose Use this folder. This works in Web deployments that do not provide a native operating-system directory chooser.
Development
npm install
npm test
npm run verify:plugin
npm run smoke:install
npm pack --dry-run
npm test rebuilds client/client.js from src/client/ before running unit and integration tests.
Known limitations
- Activity age deliberately follows DSH's existing
Last updatedfield instead of creating a second activity timestamp. - Subagent child Sessions remain outside the top-level list, matching the built-in Workspace browser.
License
MIT
No comments yet. Be the first to write one.