dsh-office
A persistent office of colleague agents for DeepSeek Harness: a roster of ordinary sessions with channels, direct messages, and delivery that wakes a colleague when something is addressed to it. 适合需要管理和调度多个协同智能体、构建多角色工作流的复杂任务。
같은 패키지 이름의 다른 저장소
설치
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:windwhiterain/dsh-officeConfiguration
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
| Field | Default | Meaning |
|---|---|---|
readLimit | 20 | How many messages office_read returns by default, and how many a panel feed shows before it folds everything older behind one row. |
readLimitMax | 100 | Ceiling for the limit argument and for one unfold. |
bossPreset | "office-boss" | Agent preset new offices inherit when the panel creates them. |
profilePatch | launcher's | Overrides 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
| Field | Default | Meaning |
|---|---|---|
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. |
officeId | the row id | The 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. |
maxMessageChars | 16384 | Maximum length of one message body. |
wakesEnabled | true | When 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. |