# ЁЯПа dsh-team-rooms - **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024` рдЪрд▓рд╛рдПрдБ, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-team-rooms` (рдпрд╣ [deepseek1024.com](https://deepseek1024.com) рдХреА рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред **DeepSeek Harness рдХреЗ рд▓рд┐рдП рдЯрд┐рдХрд╛рдК, рдХреНрд░реЙрд╕-рд╕реЗрд╢рди рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдЯреАрдо рд░реВрдо тАФ рд╕рджрд╕реНрдп, рдПрдХ рд╕рдВрджреЗрд╢ рдмрд╕, рдПрдХ рд╕рд╛рдЭрд╛ рдХрд╛рд░реНрдп рдмреЛрд░реНрдб рдФрд░ рдПрдХ рд╕рд╛рдЭрд╛ рдЯрд╛рдЗрдорд▓рд╛рдЗрди, рдЬреЛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдмрд╛рдж рднреА рдмрдЪреЗ рд░рд╣рддреЗ рд╣реИрдВред** *рд╣рд░ рд╕рджрд╕реНрдп рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ DSH рд╕реЗрд╢рди рд╣реИ; рд░реВрдо рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рд╕рд╛рдЭрд╛ рдЯрд┐рдХрд╛рдК рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред* [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![DSH plugin](https://img.shields.io/badge/dsh--plugin-тЬЕ-green)](https://github.com/topics/dsh-plugin) [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#) [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-team-rooms.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла) [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/) [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-team-rooms) [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-team-rooms/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-team-rooms/actions) [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-team-rooms?label=version)](https://github.com/PerryLink/dsh-team-rooms/releases) [![npm version](https://img.shields.io/npm/v/dsh-team-rooms)](https://www.npmjs.com/package/dsh-team-rooms) [![npm downloads](https://img.shields.io/npm/dm/dsh-team-rooms)](https://www.npmjs.com/package/dsh-team-rooms) [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-team-rooms?metric=downloads&lang=hi)](https://dshfind.com/hi/plugins/PerryLink/dsh-team-rooms?ref=badge) > ЁЯкж **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ 2026-10-05 рд╕реЗ рд╕рдВрдЧрддрддрд╛ рдЕрджреНрдпрддрди рдмрдВрджред** рдЯреАрдо рд╕рдордиреНрд╡рдп рдЕрдм **рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣рд╛рд░реНрдиреЗрд╕ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ** `dsh-experimental-agent-team` (рд╕рд╛рде рдореЗрдВ `-tool-agent-team`) рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд-рд░реВрдЯ рд░реЛрд╕реНрдЯрд░, **рдЯрд┐рдХрд╛рдК рдкреАрдпрд░ рдореЗрд▓рдмреЙрдХреНрд╕** рдФрд░ compare-and-set рдЕрджреНрдпрддрдиреЛрдВ рд╡рд╛рд▓рд╛ рд╕рд╛рдЭрд╛ **рдЯрд╛рд╕реНрдХ DAG**, рддрдерд╛ Web рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред тЪая╕П рдЬрд╛рд░реА `dsh-base` рдмрдВрдбрд▓ рдЗрд╕реЗ **рдЕрдХреНрд╖рдо** рд░рдЦрддрд╛ рд╣реИ тАФ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд╣реА рдкреИрдЪ рдкреБрд░рд╛рдиреЗ continuable-child рдирд┐рдпрдВрддреНрд░рдг рдирд╛рдореЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рд╕рдореБрджрд╛рдп рдХреЗ рд╡рд┐рдХрд▓реНрдк рднреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдП рдЧрдП рд╣реИрдВ тАФ рдЬреИрд╕реЗ `@nanmicoder/dsh-agent-teams` (~13 рд╣рдЬрд╝рд╛рд░ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб); рдкрд░рдиреНрддреБ 2026-10-05 рддрдХ рдЗрд╕рдХреЗ рдШреЛрд╖рд┐рдд peers **`0.2.1` рд▓рд╛рдЗрди рд╕реЗ рдиреАрдЪреЗ рд╕рдорд╛рдкреНрдд** рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП `0.2.1-alpha.1` рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд╛ рд╕рдВрдЧрддрддрд╛ рдЧрд╛рд░реНрдб рдЗрд╕реЗ **рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ**, рдЬрдм рддрдХ рдЖрдк рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЗрддреБ рдЫреВрдЯ рди рдЬреЛрдбрд╝реЗрдВредmd) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
--- > **[`dsh-background-agents`](https://github.com/PerryLink/dsh-background-agents) 0.9.6 рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ред** рдЙрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб-рдПрдЬреЗрдВрдЯ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ (`background_agent` рдФрд░ рдкрд╛рдБрдЪ `bg_*` рдЯреВрд▓) DSH рдХреЗ рдиреЗрдЯрд┐рд╡ рдХрдВрдЯреАрдиреНрдпреБрдПрдмрд▓ рдЙрдк-рдПрдЬреЗрдВрдЯ рд╕реЗ рдмрджрд▓ рдЪреБрдХрд╛ рд╣реИ; рдЯреАрдо-рд░реВрдо рдЖрдзреЗ рдХрд╛ рдХреЛрдИ рдиреЗрдЯрд┐рд╡ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЕрдкрдиреЗ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдБ рдЬреАрд╡рд┐рдд рд╣реИред 0.9.6 рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди, рд╕реЗрд╢рди рд▓реЙрдЧ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ тАФ рджреЗрдЦреЗрдВ *рдЕрдиреБрдХреВрд▓рддрд╛*ред ## рдЕрдиреБрдХреВрд▓рддрд╛ рд╣реЛрд╕реНрдЯ `0.1.2-alpha.2` рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрд╢рди рдЗрд╡реЗрдВрдЯ рд╢рдмреНрджрд╛рд╡рд▓реА рдкрд░ fail-closed рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд▓рдЧрдЗрди рд╡рд╣рд╛рдБ рдЕрдкрдиреЗ рдХреЗрд╡рд▓-рд▓реЙрдЧ рддрдереНрдп рдЗрд╡реЗрдВрдЯ (`team-room/fact`) рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛: рддрдереНрдп logger/рдкреИрдирд▓ рдЪреИрдирд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ `teamRoom` рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдЦрд╛рд▓реА рдлрд╝реЛрд▓реНрдб рддрдХ рдШрдЯ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреА rc рд▓рд╛рдЗрдиреЗрдВ (рдЬрд╣рд╛рдБ рддрдХ `0.1.1-rc.2`) `ignorable` рдорд╛рд░реНрдХрд░ рдЕрдиреБрд╢рд╛рд╕рди рдмрдирд╛рдП рд░рдЦрддреА рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдзрд╛ рд╡рд░реНрддрдорд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкреИрдХреЗрдЬ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ (`dsh-api-session-controller`, `dsh-client-ui-slots`, `dsh-client-ui-settings`, `dsh-client-locale`, `dsh-client-web`)ред **`dsh-background-agents` 0.9.6 рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЕрдиреБрдХреВрд▓рддрд╛ рдХрдареЛрд░ рдирд┐рдпрдо рд╣реИред** рдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ 0.9.6 рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯ-рджрд░-рдмрд╛рдЗрдЯ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдЗрдирдХрд╛ рдирд╛рдо рдХрднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди `team_rooms`, рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреБрдВрдЬреА `teamRoom`, рд╕реЗрд╢рди рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ `team-room/fact`, рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрд▓реЙрдЯ рдЖрдИрдбреА `team-rooms`ред рдЗрд╕рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдмрджрд▓рдиреЗ рдкрд░ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдо, рд╕рджрд╕реНрдп рд▓реЙрдЧ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдЬреНрдпреЛрдВ рдХреЗ рддреНрдпреЛрдВ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред | рд╕рддрд╣ | рд╕реНрдерд┐рддрд┐ | |---|---| | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (2026-09-25 рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд; dev рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд┐рди `0.1.7-rc.2`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0`) | | Node | `^22.19.0 \|\| >=24.0.0` | | рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо | рд╕рднреА (рд╣реЛрд╕реНрдЯ рдЯреВрд▓; рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП Web рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдзрд╛ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ-рдбреЛрдореЗрди рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рд┐рдП) | | рдореЙрдбрд▓ | рдХреЛрдИ рднреА (рд░реВрдо рдХреЛрдИ рдореЙрдбрд▓ рд░реВрдЯ рдирд╣реАрдВ рд░рдЦрддреЗ тАФ рд╕рджрд╕реНрдп рд╕рд╛рдзрд╛рд░рдг рд╕реЗрд╢рди рд╣реИрдВ) | ## рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ `dsh-team-rooms` рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╢рди рдХреЛ рдПрдХ рд╕рдордиреНрд╡рд┐рдд рдЯреАрдо рдмрдирд╛ рджреЗрддрд╛ рд╣реИ: 1. **`/room` рдХрдорд╛рдВрдб рдкрд░рд┐рд╡рд╛рд░** тАФ `create`, `join`, `leave`, `list`, `send`, `tasks`, `task add|assign|claim|done|delete`ред рд░реВрдо рдХрд╛ рдирд╛рдо рдФрд░ рд╕реНрд╡рд╛рдореА рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд░реВрдо рдЖрдИрдбреА рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреВрд╕рд░реЗ рд╕реЗрд╢рди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред 2. **рдЖрда `room_*` рдЯреВрд▓** тАФ `room_list_rooms`, `room_post`, `room_read`, `room_list_tasks`, `room_create_task`, `room_claim_task`, `room_transfer_task`, `room_complete_task`ред рдореЙрдбрд▓ рдЕрдкрдиреЗ рд╣реА рд╕реЗрд╢рди рд╕реЗ рд╕рд╛рдЭрд╛ рдмреЛрд░реНрдб рдФрд░ рдмрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; `room_transfer_task` рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдореЛрджрди рдорд╛рдБрдЧрддрд╛ рд╣реИред 3. **рдЯрд┐рдХрд╛рдК рд░реВрдо рд╕реНрдЯреЛрд░** тАФ рд╕рджрд╕реНрдп, рд╕рдВрджреЗрд╢ рдмрд╕ (рдирд┐рд░реНрджреЗрд╢рд┐рдд рдпрд╛ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ), рдХрд╛рд░реНрдп рдмреЛрд░реНрдб рдФрд░ рдЯрд╛рдЗрдорд▓рд╛рдЗрди `team_rooms` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ (SQLite рдпрд╛ JSONL рдмреИрдХрдПрдВрдб тАФ рддрдп рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ; рдкреНрд▓рдЧрдЗрди рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛) рдФрд░ DSH рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдмрд╛рдж рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред 4. **Web рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ** тАФ Team Rooms рд╕реЗрдХреНрд╢рди рд╡рд░реНрддрдорд╛рди рд╕реЗрд╢рди рдХреЗ рд╣рд░ рд░реВрдо рдХреЗ рд╕рджрд╕реНрдп рд╕реНрдЯреЗрдЯрд╕, рдХрд╛рд░реНрдп рдмреЛрд░реНрдб рдФрд░ рдЯрд╛рдЗрдорд▓рд╛рдЗрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ: рдкрдврд╝рддрд╛ `teamRoom` рд╕реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╕реЗ рд╣реИ, рдФрд░ рд▓рд┐рдЦрддрд╛ рд╣реЛрд╕реНрдЯ `/room` рдХрдорд╛рдВрдб рд╕реЗ рд╣реИред ## рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд ```sh # 1. рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main" # рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝) dsh plugin --profile web add dsh-team-rooms # 2. рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ dsh --profile web --dump-config | grep -A4 'id: team-rooms' ``` рдмрдВрдбрд▓ рдкреИрдЪ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдкрдВрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ; рдХреЛрдИ Config рдХреБрдВрдЬреА рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдЕрдкрдирд╛ рдмрд┐рд▓реНрдб рдЖрдЙрдЯрдкреБрдЯ (`lib/`) рдХрдорд┐рдЯ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП git рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЛ рдмрд┐рд▓реНрдб рдЪрд░рдг рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВред рд░реВрдо рд╡рд╣рд╛рдБ рдорд╛рдЙрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛ (`@deepseek-ai/dsh-storage-domain`, рд╣рд░ `@deepseek-ai/dsh-base` рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореМрдЬреВрдж); рдЙрд╕рдХреЗ рдмрд┐рдирд╛ `/room` рдХрдорд╛рдВрдб рдФрд░ `room_*` рдЯреВрд▓ рд╕реБрдкреНрдд рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдХреА рд╕рдм рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓реЛрдб рд╣реЛрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдлрд┐рд░ рдХрд┐рд╕реА рднреА рд╕реЗрд╢рди рдореЗрдВ: ``` /room create release-prep /room send kickoff: I own the changelog, who takes the docs? /room task add draft the migration note /room task claim ``` рдЫрдкреА рд╣реБрдИ рд░реВрдо рдЖрдИрдбреА рдХреЛ рджреВрд╕рд░реЗ рд╕реЗрд╢рди рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ `/room join ` рдЪрд▓рд╛рдПрдБ тАФ рд╡рд╣ рд╕реЗрд╢рди рдЕрдм рд╕рджрд╕реНрдп рд╣реИ, рд░реВрдо рдХреА рдбрд┐рд▓реАрд╡рд░реА рд╕рд╛рдзрд╛рд░рдг рд╕рдВрджреЗрд╢реЛрдВ рдХреА рддрд░рд╣ рдкрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣реА рдмреЛрд░реНрдб рджреЗрдЦрддрд╛ рд╣реИред ## рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ - **git рдЪреИрдирд▓** (рдирд╡реАрдирддрдо `main`): `dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"` тАФ `lib/` рдХрдорд┐рдЯреЗрдб, рдХреЛрдИ `prepare` рдпрд╛ `allowBuilds` рдЪрд░рдг рдирд╣реАрдВред - **npm рдЪреИрдирд▓** (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝): `dsh plugin --profile web add dsh-team-rooms`ред - **tarball рдЪреИрдирд▓**: рдЗрд╕ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ `pnpm pack`, рдлрд┐рд░ `dsh plugin --profile web add ./dsh-team-rooms-.tgz`ред - **рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓**: `dsh plugin --profile web remove dsh-team-rooms` (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред рдЖрдкрдХреЗ рд░реВрдо `team_rooms` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рдореЗрдВ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдмрд╛рд░рд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВред - тЪая╕П **рдЗрд╕реЗ рдФрд░ `dsh-background-agents` рдХреЛ рдПрдХ рд╕рд╛рде рдорд╛рдЙрдВрдЯ рди рдХрд░реЗрдВред** рдбреЗрдкреНрд░рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рдХреЗ рджреМрд░рд╛рди рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рд╡рд╣реА рдЖрда `room_*` рдЯреВрд▓, рд╡рд╣реА `settings.section` рд╕реНрд▓реЙрдЯ id (`team-rooms`) рдФрд░ рд╡рд╣реА `team_rooms` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ тАФ рдЗрд╕рд▓рд┐рдП рджреЛрдиреЛрдВ рд░реВрдо рд╣рд┐рд╕реНрд╕реЗ рдЯрдХрд░рд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ `dsh-background-agents` рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдЙрд╕реЗ рд╣рдЯрд╛рдПрдБ (`dsh plugin --profile web remove dsh-background-agents`)ред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЗ рд░реВрдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддреЗ рд╣реИрдВ: рд╡реЗ рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд╣реАрдВред ## рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣рд░ рдЯреНрдпреВрдиреЗрдмрд▓ рдПрдХ рд╕рддреНрдпрд╛рдкрд┐рдд Schemastery `Config` рдлрд╝реАрд▓реНрдб рд╣реИ тАФ рдЗрд╕реЗ cordis.yml рдореЗрдВ рдмрджрд▓реЗрдВ, рдХреЛрдб рдореЗрдВ рдХрднреА рдирд╣реАрдВред рдХреЛрдИ рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред | рдХреБрдВрдЬреА | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рдЕрд░реНрде | |---|---|---| | `maxRooms` | `16` | рдкреВрд░реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреАрдо рд░реВрдо рдХреА рдХрдареЛрд░ рд╕реАрдорд╛ | | `maxMembersPerRoom` | `8` | рдкреНрд░рддрд┐ рд░реВрдо рд╕рджрд╕реНрдпреЛрдВ рдХреА рдХрдареЛрд░ рд╕реАрдорд╛ (`>= 2`) | | `maxRoomsPerMember` | `4` | рдПрдХ рд╕рджрд╕реНрдп рд╕реЗрд╢рди рдХрд┐рддрдиреЗ рд░реВрдо рдЬреЙрдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ | | `busRetention` | `200` | рдкреНрд░рддрд┐ рд░реВрдо рд░рдЦреЗ рдЧрдП рдмрд╕ рд╕рдВрджреЗрд╢ | | `timelineRetention` | `500` | рдкреНрд░рддрд┐ рд░реВрдо рд░рдЦреЗ рдЧрдП рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдЗрд╡реЗрдВрдЯ | | `taskRetention` | `50` | рдкреНрд░рддрд┐ рд░реВрдо рд░рдЦреЗ рдЧрдП рдкреВрд░реНрдг рдХрд╛рд░реНрдп | | `maxMessageChars` | `4000` | рдПрдХ рд░реВрдо рд╕рдВрджреЗрд╢ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреА рдХрдареЛрд░ рд╕реАрдорд╛ (рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░, рдХрднреА рдХрд╛рдЯрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛) | | `injectRoomBrief` | `true` | рд╕рджрд╕реНрдп рд╕реЗрд╢рди рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдо рдмреНрд░реАрдлрд╝ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ (рдЬреЙрдЗрди + рд░рд┐рдЬрд╝реНрдпреВрдо рдкрд░) | | `roomOpenTimeoutMs` | `15000` | `team_rooms` рд╕реНрдЯреЛрд░реЗрдЬ-рдбреЛрдореЗрди рдЦреБрд▓рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рд░ рд░реВрдо рдСрдкрд░реЗрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (`store-unavailable`) рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рд▓рдЯрдХрддрд╛ рдирд╣реАрдВ | | `allowUnmarkedFacts` | `false` | рдЬрд┐рди рд╣реЛрд╕реНрдЯ рдкрд░ `ignorable` рдорд╛рд░реНрдХрд░ рдЫреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓-рд▓реЙрдЧ `team-room/fact` рдЗрд╡реЗрдВрдЯ рдЬрд╝рдмрд░рджрд╕реНрддреА рд▓рд┐рдЦреЗрдВ (рдЦрддрд░рдирд╛рдХ: рдмрд┐рдирд╛ рдорд╛рд░реНрдХрд░ рд╡рд╛рд▓реЗ рддрдереНрдп рд╕реЗрд╢рди рдХреЛ рджреВрд╕рд░реЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдЕрдкреБрдирд░реБрджреНрдз рдХрд░ рджреЗрддреЗ рд╣реИрдВ); рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╣рдЪрд╛рди рдХрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ | | `inbound.enabled` | `false` | рдмрд╛рд╣рд░реА рдПрдЬреЗрдВрдЯ рд░рдирдЯрд╛рдЗрдо (OpenAI Agents SDK / CrewAI) рдХреЗ рд▓рд┐рдП stdio JSON-RPC рдЗрдирдмрд╛рдЙрдВрдб рдмреНрд░рд┐рдЬ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж (fail-closed)ред | | `inbound.command` | *(рдХреЛрдИ рдирд╣реАрдВ)* | рдмрд╛рд╣рд░реА рд░рдирдЯрд╛рдЗрдо рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб; рд╕рдХреНрд╖рдо рдФрд░ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдкреНрд▓рдЧрдЗрди рдЙрд╕реЗ spawn рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирдИ-рдкрдВрдХреНрддрд┐-рд╕реАрдорд┐рдд JSON-RPC рд╕реВрдЪрдирд╛рдПрдБ рд╕реБрдирддрд╛ рд╣реИред рдЕрдиреБрдкрд╕реНрдерд┐рдд/spawn рди рд╣реЛ рдкрд╛рдиреЗ рдкрд░ = рдмреНрд░рд┐рдЬ рд╕реБрдкреНрдд рд░рд╣рддрд╛ рд╣реИ (рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ)ред | ## рдЙрдкрдХрд░рдг рдФрд░ рд╕рддрд╣реЗрдВ | рд╕рддрд╣ | рдкреНрд░рдХрд╛рд░ | рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ | |---|---|---| | `/room` | command | `create\|join\|leave\|list\|send\|tasks\|task add\|assign\|claim\|done\|delete` | | `room_list_rooms` | tool | рдЗрд╕ рд╕реЗрд╢рди рдХреЗ рд╣рд░ рд░реВрдо: рдЖрдИрдбреА, рдирд╛рдо, рд╕рджрд╕реНрдп рд╕реВрдЪреА, рдХрд╛рд░реНрдп рдЧрдгрдирд╛ | | `room_post` | tool | рдмрд╕ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ (рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ, рдпрд╛ `to` рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдд) | | `room_read` | tool | рдХрд┐рд╕реА рд░реВрдо рдХреА рдмрд╕ рд╣рд┐рд╕реНрдЯреНрд░реА, seq рдХрд░реНрд╕рд░ рд╕реЗ рдкрдврд╝реЗрдВ | | `room_list_tasks` | tool | рдХрд┐рд╕реА рд░реВрдо рдХрд╛ рд╕рд╛рдЭрд╛ рдХрд╛рд░реНрдп рдмреЛрд░реНрдб | | `room_create_task` | tool | рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕реМрдВрдкреА рдЧрдИ) | | `room_claim_task` | tool | рдЗрд╕ рд╕реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐ claim рдХрд░реЗрдВ (assignee + рдкреНрд░рдЧрддрд┐ рдореЗрдВ) | | `room_transfer_task` | tool | рдкрдВрдХреНрддрд┐ рджреВрд╕рд░реЗ рд╕рджрд╕реНрдп рдХреЛ рд╕реМрдВрдкреЗрдВ тАФ **рдЕрдиреБрдореЛрджрди-рдЖрдзрд╛рд░рд┐рдд**, рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ fail-closed | | `room_complete_task` | tool | рдкрдВрдХреНрддрд┐ рдХреЛ `done` рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ | | `teamRoom` рдкреНрд░реЛрдЬреЗрдХреНрд╢рди | session projection | рдЗрд╕ рд╕рджрд╕реНрдп рдХреЗ рдЕрдкрдиреЗ рд▓реЙрдЧ рдореЗрдВ `team-room/fact` рдЗрд╡реЗрдВрдЯ рд╕реЗ рдлрд╝реЛрд▓реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░реВрдо рджреГрд╢реНрдп | | Web рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ | client | рд╕рджрд╕реНрдп рд╕реНрдЯреЗрдЯрд╕, рдХрд╛рд░реНрдп рдмреЛрд░реНрдб, рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдФрд░ рд░реВрдо рдХреНрд░рд┐рдпрд╛рдПрдБ; рд╕реНрд▓реЙрдЯ рдЖрдИрдбреА `team-rooms` | рдпреЗ **рдЖрда** `room_*` рдЯреВрд▓ рд╣реИрдВ, рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВред ## рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ тАФ рдФрд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдмрд╛рдж рдХреНрдпреЛрдВ рдмрдЪрд╛ рд░рд╣рддрд╛ рд╣реИ рд░реВрдо рд╕реНрдЯреЛрд░ рдХреНрд░реЙрд╕-рд╕реЗрд╢рди рдкреНрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ; рд╕реЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╣рд░ рд╕рджрд╕реНрдп рдХреА рдЕрдкрдиреА рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдкреНрд░рддрд┐ рд╣реИред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд▓реЗрдЦрди рдПрдХ рд╕рд╛рде рдЪрд▓рддреА рд╣реИрдВ рдФрд░ рд╕реБрд╕рдВрдЧрдд рд░рд╣рддреА рд╣реИрдВ: - **рд╣рд░ рд░реВрдо рдкрд░рд┐рд╡рд░реНрддрди** (create, join, leave, post, рдХрд╛рд░реНрдп рд╕рдВрдХреНрд░рдордг) рдПрдХ рд╣реА hub рд░рд╛рдЗрдЯ рдЪреЗрди рдкрд░ рдХрддрд╛рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ тАФ `team_rooms` рдбреЛрдореЗрди рдХреА рдПрдХрдорд╛рддреНрд░ рд░рд╛рдЗрдЯ рдЪреЗрди рд╣реА рдХреНрд░рдо-рдкреНрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╡рд░реНрддреА рдкреЛрд╕реНрдЯрд░ рдХрднреА read-modify-write рдХреЛ рдЗрдВрдЯрд░рд▓реАрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдФрд░ рдмрд╕ seq рдХрдбрд╝рд╛рдИ рд╕реЗ рдХрдорд┐рдЯ рдХреНрд░рдо рдореЗрдВ рдмрдирддреЗ рд╣реИрдВред - **рдореЙрдбрд▓-рджреГрд╢реНрдп тЯ║ рджрд░реНрдЬ**: рдбрд┐рд▓реАрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░реВрдо рд╕рдВрджреЗрд╢ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЗрдирдмреЙрдХреНрд╕ рдбрд┐рд▓реАрд╡рд░реА рд╣реИ (`agent.followup` рдЬреАрд╡рд┐рдд рд╕рджрд╕реНрдп рдХреЛ рдЬрдЧрд╛рддрд╛ рд╣реИ; `agent.inject` рдСрдлрд╝рд▓рд╛рдЗрди рд╕рджрд╕реНрдп рдХреЛ рдЕрдЧрд▓реА рд╢реБрд░реБрдЖрдд рдкрд░ рдЙрд╕рдХрд╛ рдмреИрдХрд▓реЙрдЧ рджреЗрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЙрд╕ рд╕рджрд╕реНрдп рдХреЗ рдЕрдкрдиреЗ рд╕реЗрд╢рди рд▓реЙрдЧ рдореЗрдВ рдЯрд┐рдХрд╛рдК `user/message` рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рд╣реЛрддрд╛ рд╣реИред - **рд╕рд╛рдЭрд╛ рдЯрд╛рдЗрдорд▓рд╛рдЗрди** рд╣рд░ рд╕рджрд╕реНрдп рдХреЗ рд▓реЙрдЧ рдореЗрдВ рдХреЗрд╡рд▓-рд▓реЙрдЧ `team-room/fact` рдЗрд╡реЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреИрдиреЛрдирд┐рдХрд▓ рд╕реНрдЯреЛрд░ `timelineSeq` рд▓реЗрдХрд░ рдЪрд▓рддреЗ рд╣реИрдВ; `teamRoom` рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╣рд░ рд╕рджрд╕реНрдп рдХреЗ рдЕрдкрдиреЗ рд▓реЙрдЧ рдХреЛ рдлрд╝реЛрд▓реНрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдкреБрдирдГ-рдЦреЛрд▓рдиреЗ рдкрд░ рджреГрд╢реНрдп рд╕реНрдЯреЛрд░ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдлрд┐рд░ рд╕реЗ рдмрди рдЬрд╛рддрд╛ рд╣реИред - **рдбрд┐рд▓реАрд╡рд░реА at-least-once рдФрд░ рдХреНрд░рдордмрджреНрдз рд╣реИ**: рдкреНрд░рддрд┐-рд╕рджрд╕реНрдп рдХрд░реНрд╕рд░ (`lastDeliveredSeq`, `lastFactSeq`) рдХреЗрд╡рд▓ рдбрд┐рд▓реАрд╡рд░реА рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдмрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдорд┐рдЯ рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рдмреАрдЪ рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдкрд░ рдХреИрдЪ-рдЕрдк рдореЗрдВ рджреЛрдмрд╛рд░рд╛ рдбрд┐рд▓реАрд╡рд░реА рд╣реЛрддреА рд╣реИ, рд╕рдВрджреЗрд╢ рдЦреЛрддрд╛ рдирд╣реАрдВред рдЬрд┐рди рд╣реЛрд╕реНрдЯ рдХрд╛ `Session.append` `ignorable` рдорд╛рд░реНрдХрд░ рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ (рд╕рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд rc рд▓рд╛рдЗрдиреЗрдВ `0.1.0-rc.8` рддрдХ, `0.1.1-rc.2` рд▓рд╛рдЗрди, рдФрд░ `0.1.2-rc` рд▓рд╛рдЗрди, рдЬреЛ рдПрдирд╡рд▓рдк рдлрд╝реАрд▓реНрдб рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рд▓реЙрдЧ рдкрдврд╝рдиреЗ рдХреА рд╕рдВрдЧрддрд┐ рдХреЗ рд▓рд┐рдП рд░рдЦрддреА рд╣реИ) рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ append рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (peer-рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реНрд╡-рдЬрд╛рдБрдЪ, рдлрд┐рд░ рд▓реМрдЯрд╛рдП рдЧрдП рдПрдирд╡рд▓рдк рдХреА рдЬрд╛рдБрдЪ) рдФрд░ рддрдереНрдп-рд▓реЗрдЦрди рдПрдХ рдмрд╛рд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЯрд┐рдХрд╛рдК рд╕реНрдЯреЛрд░, API рд╕рддрд╣реЗрдВ рдФрд░ рдореЙрдбрд▓-рджреГрд╢реНрдп рдбрд┐рд▓реАрд╡рд░реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдФрд░ `teamRoom` рдЦрд╛рд▓реА рдлрд╝реЛрд▓реНрдб рддрдХ рдШрдЯ рдЬрд╛рддрд╛ рд╣реИред `allowUnmarkedFacts: true` рд▓реЗрдЦрди рдлрд┐рд░ рдЪрд╛рд▓реВ рдХрд░ рджреЗрддрд╛ рд╣реИ тАФ рдЬрд╛рди-рдмреВрдЭрдХрд░ рдЦрддрд░рдирд╛рдХред ## рдпрд╣ рдкреНрд▓рдЧрдЗрди рдирд╣реАрдВ рд╣реИ | рдкреНрд░реЛрдЬреЗрдХреНрдЯ | рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ | рд╕реАрдорд╛ | |---|---|---| | [titanwings/dsh-automation](https://github.com/titanwings/dsh-automation) | рдирдП рдПрдЬреЗрдВрдЯ рд╕реЗрд╢рди рдореЗрдВ рд╢реЗрдбреНрдпреВрд▓ рдХрд┐рдП рдЧрдП рдХреЛрдбрд┐рдВрдЧ рдХрд╛рд░реНрдп | рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп **рдХрдм** рдЪрд▓реЗрдВ (рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ)ред рдпрд╣ рдкреНрд▓рдЧрдЗрди рдЙрд╕ **рд╕рд╛рдЭрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ** рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрдИ рд╕реЗрд╢рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ тАФ рдХреЛрдИ рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реАрдо рдирд╣реАрдВ, рдХреЛрдИ cron рдирд╣реАрдВред | | [YYTbit/dsh-plugin-agent-dashboard](https://github.com/YYTbit/dsh-plugin-agent-dashboard) | рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдбреИрд╢рдмреЛрд░реНрдб рд╕реНрдХрд┐рд▓ | рдкреНрд░рджрд░реНрд╢рди-рдХреЗрдВрджреНрд░рд┐рдд рдФрд░ рдореБрдЦреНрдпрддрдГ рдкрдардиред рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдо **рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕рдордиреНрд╡рдп-рд╕реНрдерд┐рддрд┐** рд╣реИрдВ: рдПрдХ рдмрд╕, рдПрдХ рдмреЛрд░реНрдб, рдФрд░ рдЕрдиреБрдореЛрджрди-рдЖрдзрд╛рд░рд┐рдд рд╣рд╕реНрддрд╛рдВрддрд░рдг, рдЬреЛ harness рдХреЗ рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдЯрд┐рдХрд╛рдК рд╣реИрдВред | | `dsh-background-agents` | рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдПрдЬреЗрдВрдЯ рдФрд░ (рдкрд╣рд▓реЗ) рдЯреАрдо рд░реВрдо | рдЙрд╕ рдкреИрдХреЗрдЬ рдХрд╛ `bg_*` рдЖрдзрд╛ DSH рдХреЗ рдиреЗрдЯрд┐рд╡ рдХрдВрдЯреАрдиреНрдпреБрдПрдмрд▓ рдЙрдк-рдПрдЬреЗрдВрдЯ рд╕реЗ рдмрджрд▓ рдЪреБрдХрд╛ рд╣реИ; рдЙрд╕рдХрд╛ рд░реВрдо рдЖрдзрд╛ рдпрд╣ рдкреИрдХреЗрдЬ рд╣реИред рджреЛрдиреЛрдВ рд░реВрдо рдЖрдзреЗ рдПрдХ рд╕рд╛рде рдорд╛рдЙрдВрдЯ рди рдХрд░реЗрдВред | ## рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдбреЗрдЯрд╛ - **рдЕрдиреБрдорддрд┐рдпрд╛рдБ**: workshop рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ `session:append` рдФрд░ `tools:register` рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд░реВрдо рдХрднреА рдЙрдк-рдПрдЬреЗрдВрдЯ spawn рдирд╣реАрдВ рдХрд░рддреЗ, рдЗрд╕рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЛрдИ `subagent:*` рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд╛рдБрдЧрддрд╛ рдФрд░ рдХреЛрдИ рдЙрдк-рдПрдЬреЗрдВрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред - **рдбреЗрдЯрд╛**: рд░реВрдо `team_rooms` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ (SQLite рдпрд╛ JSONL тАФ рд╢реВрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрд╡рд╛рдПрдБ)ред рдХреЛрдИ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╣реАрдВ, рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ рдирд╣реАрдВред - **рд╕реЗрд╢рди рд▓реЙрдЧ**: `team-room/fact` рдЗрд╡реЗрдВрдЯ рдЙрди рд╣реЛрд╕реНрдЯ рдкрд░ рдПрдирд╡рд▓рдк рдХреЗ `ignorable: true` рдорд╛рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдорд╛рд░реНрдХрд░-рдкреВрд░реНрд╡ рд╣реЛрд╕реНрдЯ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддрдереНрдп-рд▓реЗрдЦрди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ тАФ рджреЗрдЦреЗрдВ `allowUnmarkedFacts`); рдореЙрдбрд▓-рджреГрд╢реНрдп рд░реВрдо рдбрд┐рд▓реАрд╡рд░реА рдЕрд╕рд▓реА `user/message` рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред ## рд╕реБрд░рдХреНрд╖рд╛ рд╕реАрдорд╛рдПрдБ - **рдЕрдиреБрдореЛрджрди-рдЖрдзрд╛рд░рд┐рдд рд╣рд╕реНрддрд╛рдВрддрд░рдгред** `room_transfer_task` рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрдиреБрдореЛрджрди рд╕реАрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдореЛрджрди рд╕реЗрд╡рд╛ рд╕рдВрдпреЛрдЬрд┐рдд рди рд╣реЛрдиреЗ рдпрд╛ рдХреЛрдИ рдЕрдиреБрдорддрд┐ рди рджреЗрдиреЗ рдкрд░ fail-closed рд╣реЛрддрд╛ рд╣реИ тАФ рдордирд╛ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рдмрджрд▓рддрд╛ред - **рдореЙрдбрд▓-рджреГрд╢реНрдп тЯ║ рджрд░реНрдЬред** рд╣рд░ рдбрд┐рд▓реАрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░реВрдо рд╕рдВрджреЗрд╢ рд╕рджрд╕реНрдп рдХреЗ рдЕрдкрдиреЗ рд▓реЙрдЧ рдореЗрдВ рдЯрд┐рдХрд╛рдК `user/message` рд╣реИ; рд╕рд╛рдЭрд╛ рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдХреЗрд╡рд▓-рд▓реЙрдЧ `team-room/fact` рдЗрд╡реЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрддреА рд╣реИред рд░реВрдо рд╕рдВрджреЗрд╢ рджрд░реНрдЬ рд╣реБрдП рдмрд┐рдирд╛ рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдБрдЪ рд╣реА рдирд╣реАрдВ рд╕рдХрддрд╛ред - **рд╕рджрд╕реНрдпрддрд╛ рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реАрдорд╛ рд╣реИред** рд╣рд░ `room_*` рдЯреВрд▓ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрд╢рди рдХреА рдЕрдкрдиреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИ; рдЧреИрд░-рд╕рджрд╕реНрдп рдХреЛ рд╕реНрдерд┐рд░ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЖрдзрд╛-рдЕрдзреВрд░рд╛ рд▓реЗрдЦрди рдирд╣реАрдВред - **рдкреНрд░рддрд┐рдзрд╛рд░рдг рд╕реАрдорд┐рдд рд╣реИред** рдмрд╕, рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдФрд░ рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡рд┐рдВрдбреЛ рд╣рд░ рд▓реЗрдЦрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рджреАрд░реНрдШрдЬреАрд╡реА рд░реВрдо рдЕрд╕реАрдорд┐рдд рдирд╣реАрдВ рдмрдврд╝ рд╕рдХрддрд╛ред - **рдХреЛрдИ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдирд╣реАрдВ, рдХреЛрдИ рдХреНрд░реЙрд╕-рдорд╢реАрди рд╕рджрд╕реНрдп рдирд╣реАрдВред** рд╕рджрд╕реНрдп рдЗрд╕ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕-рд╕реНрдерд╛рдиреАрдп рд╕реЗрд╢рди рд╣реИрдВред ## рдХреНрд░реЙрд╕-рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдЗрдирдмрд╛рдЙрдВрдб (P2) рдмрд╛рд╣рд░реА рдПрдЬреЗрдВрдЯ рд░рдирдЯрд╛рдЗрдо тАФ OpenAI Agents SDK, CrewAI рдФрд░ рд╕рдорд╛рди тАФ рдПрдХ рдиреНрдпреВрдирддрдо **stdio рдирдИ-рдкрдВрдХреНрддрд┐-рд╕реАрдорд┐рдд JSON-RPC 2.0 рдмреНрд░рд┐рдЬ** рдХреЗ рдЬрд╝рд░рд┐рдП рдЯреАрдо рд░реВрдо рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ JSON-RPC рдбрд╛рдпрд░реЗрдХреНрдЯ-рдХрдиреЗрдХреНрдЯ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рд╣реИ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ ACP рд╡рд╛рдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд╣реАрдВ: рдкреВрд░реНрдг ACP рдЕрдиреБрдХреВрд▓рддрд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕реАрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рд╣реИред рдЗрд╕реЗ рджреЛ Config рдлрд╝реАрд▓реНрдб рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ `inbound.command` рдХреЛ рдРрд╕реЗ рд▓реЙрдиреНрдЪрд░ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬреЛ stdout рдкрд░ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ рдПрдХ JSON рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реЛ: ```yaml # cordis.yml (рдкреНрд▓рдЧрдЗрди рдкрдВрдХреНрддрд┐) inbound: enabled: true command: "python external_runtime.py --room " ``` рд░рдирдЯрд╛рдЗрдо рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪрдирд╛рдПрдБ рджреЗрддрд╛ рд╣реИ; `method` рдЗрд╡реЗрдВрдЯ рдирд╛рдо рд╣реИ рдФрд░ `params.name` рдмрд╛рд╣рд░реА рдПрдЬреЗрдВрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо: ```json {"jsonrpc":"2.0","method":"agent_started","params":{"name":"researcher","room":"","traceId":"t-1"}} {"jsonrpc":"2.0","method":"agent_message","params":{"name":"researcher","room":"","traceId":"t-1","message":"found the failing test"}} {"jsonrpc":"2.0","method":"agent_finished","params":{"name":"researcher","room":"","traceId":"t-1","status":"ok","usage":{"inputTokens":100,"outputTokens":40}}} ``` рд╣рд░ рдПрдХ рд░реВрдо рдХреА рдореМрдЬреВрджрд╛ рд╕рддрд╣реЛрдВ рдкрд░ рдореИрдк рд╣реЛрддреА рд╣реИ: `agent_started` рдХрд╛рд░реНрдп рдмреЛрд░реНрдб рдкрд░ рдХрд╛рд░реНрдб рдЦреЛрд▓рддреА рд╣реИ, `agent_message` рд╕рдВрджреЗрд╢ рдмрд╕ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ `agent_finished` рдХрд╛рд░реНрдб рдмрдВрдж рдХрд░ рдкрд░рд┐рдгрд╛рдо рдкреЛрд╕реНрдЯ рдХрд░рддреА рд╣реИред рдЕрдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ fail-closed рд╣реЛрддреЗ рд╣реИрдВ тАФ рд╡реЗ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ stdin рдкрд░ JSON-RPC рддреНрд░реБрдЯрд┐ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рдмрд╛рд╣рд░реА рд░рдирдЯрд╛рдЗрдо DSH рд╕реЗрд╢рди рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░реВрдо рдХреЗ рд╕реНрд╡рд╛рдореА рд╕рджрд╕реНрдп рдХрд╛ рд╕реЗрд╢рди рдкреНрд░реЗрд╖рдХ рдмрдирддрд╛ рд╣реИ; рдмрд┐рдирд╛ рд╕реНрд╡рд╛рдореА рд╕рджрд╕реНрдп рд╡рд╛рд▓рд╛ рд░реВрдо рдЗрд╡реЗрдВрдЯ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдкреНрд▓рдЧрдЗрди рдлрд╝рд╛рдЗрдмрд░ рдХреЗ disposer рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВ; spawn рди рд╣реЛ рдкрд╛рдиреЗ рд╡рд╛рд▓рд╛ `inbound.command` рдПрдХ рд▓реЙрдЧ рдЪреЗрддрд╛рд╡рдиреА рддрдХ рд╕рд┐рдордЯ рдЬрд╛рддрд╛ рд╣реИ (рдмреНрд░рд┐рдЬ рд╕реБрдкреНрдд рд░рд╣рддрд╛ рд╣реИ, рдмрд╛рдХреА рдХреБрдЫ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛)ред ## рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ - рд░реВрдо рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди рд╕рдВрдпреЛрдЬрд┐рдд рд╣реЛрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ; `@deepseek-ai/dsh-storage-domain` рдХреЗ рдмрд┐рдирд╛ `/room` рдХрдорд╛рдВрдб рдФрд░ `room_*` рдЯреВрд▓ рдЕрдХреНрд╖рдо рд░рд╣рддреЗ рд╣реИрдВред - рд░реВрдо рддрдм рд╕рд╛рд░реНрдердХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рджрд╕реНрдп рд╣реЛрдВ, рдФрд░ рд╕рджрд╕реНрдп рд╕реВрдЪреА `maxMembersPerRoom` рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ; рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рддрд┐ рд╕реЗрд╢рди рд╣реИ, рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВред - рдХреНрд░реЙрд╕-рдорд╢реАрди рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╣рд░ рд╕рджрд╕реНрдп рдЗрд╕ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕-рд╕реНрдерд╛рдиреАрдп рд╕реЗрд╢рди рд╣реИред - `room_transfer_task` рдХреЛ рдЕрдиреБрдореЛрджрди рдЙрддреНрддрд░рджрд╛рддрд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ fail-closed рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣рд╕реНрддрд╛рдВрддрд░рдг рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреБрдореЛрджрди рд╕реЗрд╡рд╛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреА рд╣реЛрдЧреАред - рд▓рд╛рдЧрдд/рдЙрдкрдпреЛрдЧ рд▓реЗрдЦрд╛рдВрдХрди рдпрд╣рд╛рдБ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ (рд╡рд╣ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб-рдПрдЬреЗрдВрдЯ рдЖрдзреЗ рдореЗрдВ рдерд╛); рд░реВрдо рд╕рддрд╣реЗрдВ рд╕рдВрд░рдЪрдирд╛ рдмрддрд╛рддреА рд╣реИрдВ, рдЦрд░реНрдЪ рдирд╣реАрдВред ## рд╡рд┐рдХрд╛рд╕ ```sh pnpm install # рдХреЗрд╡рд▓ рдЯреВрд▓рд┐рдВрдЧ; harness рдкреИрдХреЗрдЬ рд╕рд╣реЛрджрд░ checkout рд╕реЗ рд╣рд▓ рд╣реЛрддреЗ рд╣реИрдВ pnpm run typecheck # рд╕рдЦрд╝реНрдд TS, node + рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо pnpm test # vitest: рдпреВрдирд┐рдЯ, рд░реВрдо hub, рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдФрд░ jsdom рдкреИрдирд▓ рдЯреЗрд╕реНрдЯ pnpm run build # lib/index.js (node рдЖрдзрд╛) + lib/client.js (Web рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓) pnpm run verify:artifacts && pnpm run check:readmes pnpm run gen-aliases # checkout рдЦрд┐рд╕рдХрдиреЗ рдкрд░ harness рдкреИрдХреЗрдЬ рдкрде рджреЛрдмрд╛рд░рд╛ рдореИрдк рдХрд░реЗрдВ ``` `pnpm run pack:smoke` рдмрд┐рд▓реНрдб рдФрд░ рдкреИрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ `DSH_HARNESS_ROOT` рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ tarball рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдВрдпреЛрдЬрд┐рдд рдкрдВрдХреНрддрд┐ рдЬрд╛рдБрдЪрддрд╛ рд╣реИред ## рд╡рд┐рд╖рдп `dsh`, `dsh-plugin`, `deepseek-harness`, `team-rooms`, `multi-agent`, `message-bus`, `task-board`, `collaboration`, `cross-session` ## рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ - [@PerryLink](https://github.com/PerryLink) тАФ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХ: рдЯреАрдо-рд░реВрдо hub рдФрд░ рдЙрд╕рдХреА рд░рд╛рдЗрдЯ рдЪреЗрди, рдбрд┐рд▓реАрд╡рд░реА рдХрд░реНрд╕рд░, `teamRoom` рдкреНрд░реЛрдЬреЗрдХреНрд╢рди, Web рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, CI/CD рдФрд░ рд░рд┐рд▓реАрдЬрд╝ред ## PerryLink DSH Plugin Family рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рдХреЗ DeepSeek Harness рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ тАФ **33 рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдиреБрд░рдХреНрд╖рд┐рдд**, рдХреБрд▓ рд╕реВрдЪреА **42** рд╣реИ рдЬрд┐рд╕рдореЗрдВ **6 рдлрд╝реНрд░реЛрдЬрд╝рди** рдФрд░ **3 рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** рд╣реИрдВ; рд╣рд░ рдПрдХ рдХреА рдкрдВрдХреНрддрд┐ рдиреАрдЪреЗ рдмрдиреА рд░рд╣рддреА рд╣реИ, рдХрд╛рд░рдг тАЬрд╕реНрдерд┐рддрд┐тАЭ рдХреЙрд▓рдо рдореЗрдВ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ, рддреЛ рдЕрдиреНрдп рднреА рдорджрджрдЧрд╛рд░ рд╣реЛрдВрдЧреЗ: | Plugin | рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ | рд╕реНрдерд┐рддрд┐ | |---|---|---| | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | | | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | | | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ | | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | | | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | | | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | | | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness тАФ Windows first. | | | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | | | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | | | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | | | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | | | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | | | **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | | | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | | | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | | | **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | | | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | | | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | | | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | | | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | | | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | | | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | | | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | | | **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | | | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | | | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | | | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | | | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | | | **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` тЖТ `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рдХреЙрд░рд┐рдбреЛрд░ рдЕрдм `dsh-plugin-upgrade` рджреНрд╡рд╛рд░рд╛ | | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ | | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | | | **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | | | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ | | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness тАФ a dedicated git mirror of your session store. | | | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | | | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | | | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | ЁЯЪл **рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд** тАФ рдКрдкрд░ рджреЗрдЦреЗрдВ | | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | | | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | | | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | | ### DSH Desktop рдорд╛рд░реНрдХреЗрдЯ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рд╕рднреА PerryLink рдкреНрд▓рдЧрдЗрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд DSH Desktop рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **Market тЖТ Sources тЖТ add source тЖТ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **тЖТ рдЙрд╕реЗ рдЪреБрдиреЗрдВ**ред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЕрдм рднреА рдорд╛рд░реНрдХреЗрдЯ рдХреЗ npm-рдкрд╣рдЪрд╛рди рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЖрдкрдХреА рдкреБрд╖реНрдЯрд┐ рд╕реЗ рд╣реЛрдХрд░ рдЬрд╛рддрд╛ рд╣реИред ## рд▓рд╛рдЗрд╕реЗрдВрд╕ [Apache License 2.0](LICENSE) ┬й 2026 dsh-team-rooms contributors