Vai al contenuto principale
Q

dsh-session-nexus

qiushi-dev/dsh-session-nexus

Unofficial DeepSeek Harness plugin — sessions as addressable, first-class citizens: lifecycle controls (/resume, /unarchive, opt-in /rm-session) plus session-addressed messaging (/send-to, /notify, /address, session_send_message tool). Working companion t

Installazione

dsh plugin --profile web add github:qiushi-dev/dsh-session-nexus

README

dsh-session-nexus

Unofficial community plugin for DeepSeek Harness. Not reviewed or endorsed by DeepSeek. 非官方社区插件,未经 DeepSeek 审查或背书。

One install, the whole session toolkit — working companion to the community session RFCs.

一次安装获得完整的会话工具套件:生命周期控制 + 跨会话消息。

Install / 安装

dsh plugin --profile web add dsh-session-nexus   # or a github/tarball spec

Commands / 命令

命令功能
/resume <id>按 id 显式挂载冷会话(不发消息;从日志解析 preset)
/unarchive <id>best-effort 取消归档(注册表缓存限制见下)
/rm-session <id> --yes降级两步删除(默认关闭,lifecycle.allowDelete: true 开启)
/send-to <地址> <消息>wakeup 投递:成为目标的下一个 turn;冷会话自动 resume
/notify <地址> <消息>quiet 投递:目标下一步的模型上下文,不唤醒
/address [地址]输出会话的规范地址(URI + mention)供复制;无参数=当前会话

模型工具mailbox.enableTool: true 默认开启):session_send_message(向其他会话投递消息)、session_overview(一次调用获取任意会话的标题/时间线/最近消息摘要——让"这个会话干了什么"这类问题一步得到答案,不再需要模型翻磁盘日志)。

地址格式(按推荐顺序):composer @ 选择器产生的 @[标题](dsh-session:…) mention、dsh-session: URI、session id、"含空格的标题"(直引号或「」)、裸标题(贪心匹配,仅活会话)。

With mailbox.enableTool: true (default) models get a session_send_message tool — an orchestrator session can drive other sessions.

Presentation / 呈现

Wakeup mail shows as a clean chat bubble (just the message, Codex-like); sender attribution and the untrusted-content notice ride a separate collapsed context row the same turn claims (mailbox.presentation: 'context' keeps everything in one collapsed row instead). Quiet mail is always a context row with a visible one-line summary.

Safety / 安全

  • Sender attribution includes the live session title: 会话「标题」(id).
  • Untrusted-content notice on every delivery; self-delivery refused; size cap (maxMessageChars, 16384).
  • Loop breaker: per sender→target sliding window (default 10 messages / 300 s).

Config

- id: session-nexus
  name: dsh-session-nexus
  config:
    lifecycle:
      allowDelete: false
    mailbox:
      enableTool: true
      allowColdWakeup: true
      maxMessageChars: 16384
      presentation: bubble      # bubble | context
      rateLimitCount: 10
      rateLimitWindowSeconds: 300

Known limitations (upstream territory) / 已知限制(需上游支持)

  • /unarchive writes durable state and pushes the UI frame, but the workspace registry's private in-memory cache cannot be invalidated from outside — a later workspace write may roll it back until restart. The clean fix is the upstream unarchiveSession() the archive design note reserved.
  • /rm-session removes the JSONL session directory only; derived indexes/caches/accounting reconcile lazily. Correct deletion needs a delete operation on the upstream persistence seam.
  • Quiet delivery to a cold session is impossible from a plugin — durable queued → delivered mailbox events belong to the upstream seam the RFC proposes.
  • No session-row "copy address" menu item: the sidebar row menu has no plugin slot. /address and the composer mention picker are the plugin-level substitutes.

These gaps are the RFCs' argument: the plugin proves the UX on public seams; the seams belong upstream.

License

MIT

Web UI 增强(客户端插件)

  • 会话头部 ID 芯片:每个会话标题栏右侧显示该会话的 session id,点击即复制(悬停提示说明用途)。
  • /address 专属结果卡片:不再是折叠截断的文本行——地址逐条整行展示,点击任意一条直接复制。

RFC 提案(proposed Agent Note 三件套)

本插件是两份社区 RFC 的伴生实现,提案原文见 rfc/(官方 .agents/notes/proposed/feature 格式,中英双语 + i18n sidecar):会话生命周期控制 · 会话邮箱。讨论串:deepseek-harness#3640

Plugin correlati