windwhiterain/dsh-office ↗★ 1

dsh-office

提供具备频道、私聊与唤醒机制的协同智能体办公室 适合需要管理和调度多个协同智能体、构建多角色工作流的复杂任务。

套件
dsh-office
相容性
待驗證
版本
0.1.0
授權
MIT
最近更新
2026年9月29日

同名套件的其他儲存庫

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:windwhiterain/dsh-office

Configuration

Each row's config, validated at activation. A field belonging to the other kind of row is refused, not ignored.

The host row — row id office-host

FieldDefaultMeaning
readLimit20How many messages office_read returns by default, and how many a panel feed shows before it folds everything older behind one row.
readLimitMax100Ceiling for the limit argument and for one unfold.
bossPreset"office-boss"Agent preset new offices inherit when the panel creates them.
profilePatchlauncher'sOverrides the profile patch the panel edits to create and delete offices. Without either source those routes answer 503.

An office row — any other row id

FieldDefaultMeaning
officeName—The office's name, and required: what the panel, the model, and every request address it by. Any script; letters, digits, and underscores. Never defaulted, so an override must restate it.
officeIdthe row idThe office's storage key, matching /^[a-z][a-z0-9_]*$/. Renaming an office never changes it.
bossPreset"office-boss"Agent preset id whose sessions are this office's boss.
userName"user"The name that reaches you: office_dm({ wake: ["@user"] }), @… in a post, and the sender name the panel posts under. Any script.
rolePermissions{} (empty)Role → session permission preset. It ships empty, because a role is defined by the office capabilities it holds rather than by how confined its session is, and it is the extension point for confining a role's own session without taking an office tool away. A role absent from the map keeps its session's own permission, and a name your deployment does not define is refused.
askUserRoles["leader"]Roles whose sessions keep the harness's ask_user_question. Every other role asks the user with office_dm, which reaches the mailbox instead of holding its turn open. The list withdraws rather than grants: an office whose preset mounts no such tool still gives none. Across offices the lists vote as a union, and a boss is not one of the roles — its preset decides its globals. An entry that names no predefined colleague role is refused.
maxMessageChars16384Maximum length of one message body.
wakesEnabledtrueWhen false, messages are stored and no session is ever woken.
idleNotice{ enabled: false, channel: "general", wake: ["$leader"] }The office's own question, asked when the whole roster has stopped and something was written since the office last asked; see The idle notice. enabled opts in per office, channel is where the question is posted, wake is who is asked — the same spellings office_post takes, and the leaders by default — and text is its body. The mailbox and the dm- idspace are refused, an unknown key inside the object is refused, and a wake that could reach nobody is refused rather than stored: an enabled notice that asks nothing of anyone is a mistake, not a setting.
operatorName—Renamed to userName. A row that still sets operatorName fails activation; the validation message names the fields the row accepts.