dsh-team-rooms 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +127 -0
- package/LICENSE +201 -0
- package/README-es.md +248 -0
- package/README-hi.md +248 -0
- package/README-pt.md +248 -0
- package/README-zh.md +248 -0
- package/README.md +248 -0
- package/THIRD_PARTY_NOTICES.md +41 -0
- package/cordis.patch.yml +34 -0
- package/lib/client.js +4713 -0
- package/lib/index.js +6580 -0
- package/lib/types/audit.d.ts +80 -0
- package/lib/types/client/TeamRoomsSection.d.ts +33 -0
- package/lib/types/client/index.d.ts +41 -0
- package/lib/types/client/room-locales.d.ts +61 -0
- package/lib/types/client/room-presenter.d.ts +67 -0
- package/lib/types/facts.d.ts +66 -0
- package/lib/types/inbound.d.ts +282 -0
- package/lib/types/index.d.ts +125 -0
- package/lib/types/room/commands.d.ts +23 -0
- package/lib/types/room/domain.d.ts +72 -0
- package/lib/types/room/events.d.ts +105 -0
- package/lib/types/room/hub.d.ts +243 -0
- package/lib/types/room/projection.d.ts +388 -0
- package/lib/types/room/schema.d.ts +550 -0
- package/lib/types/room/tools.d.ts +34 -0
- package/lib/types/vocabulary.d.ts +20 -0
- package/package.json +170 -0
- package/src/audit.ts +113 -0
- package/src/client/TeamRoomsSection.module.css +272 -0
- package/src/client/TeamRoomsSection.tsx +369 -0
- package/src/client/css-modules.d.ts +5 -0
- package/src/client/index.ts +215 -0
- package/src/client/room-locales.ts +115 -0
- package/src/client/room-presenter.ts +126 -0
- package/src/facts.ts +127 -0
- package/src/inbound.ts +440 -0
- package/src/index.ts +309 -0
- package/src/room/commands.ts +278 -0
- package/src/room/domain.ts +38 -0
- package/src/room/events.ts +116 -0
- package/src/room/hub.ts +1022 -0
- package/src/room/projection.ts +267 -0
- package/src/room/schema.ts +153 -0
- package/src/room/tools.ts +603 -0
- package/src/vocabulary.ts +20 -0
package/README-hi.md
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🏠 dsh-team-rooms
|
|
4
|
+
- **1024 स्टोर चैनल**: एक बार `npm i -g dsh1024` चलाएँ, फिर `dsh1024 plugin --profile web add dsh-team-rooms` (यह [deepseek1024.com](https://deepseek1024.com) की इंस्टॉल रैंकिंग में गिना जाता है)।
|
|
5
|
+
|
|
6
|
+
**DeepSeek Harness के लिए टिकाऊ, क्रॉस-सेशन मल्टी-एजेंट टीम रूम — सदस्य, एक संदेश बस, एक साझा कार्य बोर्ड और एक साझा टाइमलाइन, जो रीस्टार्ट के बाद भी बचे रहते हैं।**
|
|
7
|
+
|
|
8
|
+
*हर सदस्य एक स्वतंत्र DSH सेशन है; रूम उनके बीच का साझा टिकाऊ ऑब्जेक्ट है।*
|
|
9
|
+
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](#)
|
|
13
|
+
|
|
14
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
> **[`dsh-background-agents`](https://github.com/PerryLink/dsh-background-agents) 0.9.6 से निकाला गया।** उस प्लगइन का बैकग्राउंड-एजेंट आधा हिस्सा (`background_agent` और पाँच `bg_*` टूल) DSH के नेटिव कंटीन्युएबल उप-एजेंट से बदल चुका है; टीम-रूम आधे का कोई नेटिव समकक्ष नहीं था, इसलिए वह अपने अलग पैकेज के रूप में यहाँ जीवित है। 0.9.6 द्वारा लिखे गए स्टोरेज डोमेन, सेशन लॉग और सेटिंग्स बिना बदलाव काम करते रहते हैं — देखें *अनुकूलता*।
|
|
21
|
+
|
|
22
|
+
## अनुकूलता
|
|
23
|
+
|
|
24
|
+
होस्ट `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`)।
|
|
25
|
+
|
|
26
|
+
**`dsh-background-agents` 0.9.6 के साथ डेटा अनुकूलता कठोर नियम है।** ये स्ट्रिंग्स 0.9.6 के साथ बाइट-दर-बाइट समान हैं और इनका नाम कभी नहीं बदलना चाहिए: स्टोरेज डोमेन `team_rooms`, प्रोजेक्शन कुंजी `teamRoom`, सेशन इवेंट प्रकार `team-room/fact`, और सेटिंग्स स्लॉट आईडी `team-rooms`। इसलिए प्लगइन बदलने पर मौजूदा प्रोफ़ाइल के रूम, सदस्य लॉग और सेटिंग्स पेज ज्यों के त्यों बने रहते हैं।
|
|
27
|
+
|
|
28
|
+
| सतह | स्थिति |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (GitHub टैग, 2026-09-11 को सत्यापित; dev और रनटाइम पिन `0.1.5-rc.2`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`) |
|
|
31
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
32
|
+
| प्लेटफ़ॉर्म | सभी (होस्ट टूल; सेटिंग्स पेज के लिए Web क्लाइंट आधा और स्टोरेज-डोमेन क्षमता चाहिए) |
|
|
33
|
+
| मॉडल | कोई भी (रूम कोई मॉडल रूट नहीं रखते — सदस्य साधारण सेशन हैं) |
|
|
34
|
+
|
|
35
|
+
## आपको क्या मिलता है
|
|
36
|
+
|
|
37
|
+
`dsh-team-rooms` कई स्वतंत्र सेशन को एक समन्वित टीम बना देता है:
|
|
38
|
+
|
|
39
|
+
1. **`/room` कमांड परिवार** — `create`, `join`, `leave`, `list`, `send`, `tasks`, `task add|assign|claim|done|delete`। रूम का नाम और स्वामी होता है, और उन्हें एक स्थिर रूम आईडी से संबोधित किया जाता है जिसे आप दूसरे सेशन में पेस्ट कर सकते हैं।
|
|
40
|
+
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` सदस्यों के बीच हस्तांतरण से पहले अनुमोदन माँगता है।
|
|
41
|
+
3. **टिकाऊ रूम स्टोर** — सदस्य, संदेश बस (निर्देशित या ब्रॉडकास्ट), कार्य बोर्ड और टाइमलाइन `team_rooms` स्टोरेज डोमेन में रहते हैं (SQLite या JSONL बैकएंड — तय डिप्लॉयमेंट करता है; प्लगइन कोई अतिरिक्त सेवा नहीं जोड़ता) और DSH रीस्टार्ट के बाद बहाल हो जाते हैं।
|
|
42
|
+
4. **Web सेटिंग्स पेज** — Team Rooms सेक्शन वर्तमान सेशन के हर रूम के सदस्य स्टेटस, कार्य बोर्ड और टाइमलाइन दिखाता है: पढ़ता `teamRoom` सेशन प्रोजेक्शन से है, और लिखता होस्ट `/room` कमांड से है।
|
|
43
|
+
|
|
44
|
+
## त्वरित शुरुआत
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
# 1. अपने प्रोफ़ाइल में बंडल इंस्टॉल करें
|
|
48
|
+
dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"
|
|
49
|
+
|
|
50
|
+
# या npm से (प्रकाशित रिलीज़)
|
|
51
|
+
dsh plugin --profile web add dsh-team-rooms
|
|
52
|
+
|
|
53
|
+
# 2. पुनः प्रारंभ करें और पंक्ति सत्यापित करें
|
|
54
|
+
dsh --profile web --dump-config | grep -A4 'id: team-rooms'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
बंडल पैच में प्लगइन पंक्ति होती है; कोई Config कुंजी अनिवार्य नहीं है। रिपॉज़िटरी अपना बिल्ड आउटपुट (`lib/`) कमिट करती है, इसलिए git इंस्टॉल को बिल्ड चरण की ज़रूरत नहीं। रूम वहाँ माउंट होते हैं जहाँ स्टोरेज डोमेन संयोजित हो (`@deepseek-ai/dsh-storage-domain`, हर `@deepseek-ai/dsh-base` प्रोफ़ाइल में मौजूद); उसके बिना `/room` कमांड और `room_*` टूल सुप्त रहते हैं और बाकी सब सामान्य रूप से लोड होता रहता है।
|
|
58
|
+
|
|
59
|
+
फिर किसी भी सेशन में:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/room create release-prep
|
|
63
|
+
/room send <roomId> kickoff: I own the changelog, who takes the docs?
|
|
64
|
+
/room task add <roomId> draft the migration note
|
|
65
|
+
/room task claim <roomId> <taskId>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
छपी हुई रूम आईडी को दूसरे सेशन में पेस्ट करें और `/room join <roomId>` चलाएँ — वह सेशन अब सदस्य है, रूम की डिलीवरी साधारण संदेशों की तरह पाता है, और वही बोर्ड देखता है।
|
|
69
|
+
|
|
70
|
+
## इंस्टॉल और अनइंस्टॉल
|
|
71
|
+
|
|
72
|
+
- **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"` — `lib/` कमिटेड, कोई `prepare` या `allowBuilds` चरण नहीं।
|
|
73
|
+
- **npm चैनल** (प्रकाशित रिलीज़): `dsh plugin --profile web add dsh-team-rooms`।
|
|
74
|
+
- **tarball चैनल**: इस रिपॉज़िटरी में `pnpm pack`, फिर `dsh plugin --profile web add ./dsh-team-rooms-<version>.tgz`।
|
|
75
|
+
- **अनइंस्टॉल**: `dsh plugin --profile web remove dsh-team-rooms` (या प्रोफ़ाइल पैच से पंक्ति हटाएँ)। आपके रूम `team_rooms` स्टोरेज डोमेन में बने रहते हैं और दोबारा इंस्टॉल करने पर लौट आते हैं।
|
|
76
|
+
- ⚠️ **इसे और `dsh-background-agents` को एक साथ माउंट न करें।** डेप्रिकेशन विंडो के दौरान दोनों प्रकाशित हैं, और दोनों वही आठ `room_*` टूल, वही `settings.section` स्लॉट id (`team-rooms`) और वही `team_rooms` स्टोरेज डोमेन रजिस्टर करते हैं — इसलिए दोनों रूम हिस्से टकराते हैं। यदि आप पहले से `dsh-background-agents` चला रहे हैं, तो पहले उसे हटाएँ (`dsh plugin --profile web remove dsh-background-agents`)। किसी भी स्थिति में आपके रूम सुरक्षित रहते हैं: वे स्टोरेज डोमेन में रहते हैं, प्लगइन में नहीं।
|
|
77
|
+
|
|
78
|
+
## कॉन्फ़िगरेशन
|
|
79
|
+
|
|
80
|
+
हर ट्यूनेबल एक सत्यापित Schemastery `Config` फ़ील्ड है — इसे cordis.yml में बदलें, कोड में कभी नहीं। कोई भी अनिवार्य नहीं है।
|
|
81
|
+
|
|
82
|
+
| कुंजी | डिफ़ॉल्ट | अर्थ |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| `maxRooms` | `16` | पूरे प्रोफ़ाइल में टीम रूम की कठोर सीमा |
|
|
85
|
+
| `maxMembersPerRoom` | `8` | प्रति रूम सदस्यों की कठोर सीमा (`>= 2`) |
|
|
86
|
+
| `maxRoomsPerMember` | `4` | एक सदस्य सेशन कितने रूम जॉइन कर सकता है |
|
|
87
|
+
| `busRetention` | `200` | प्रति रूम रखे गए बस संदेश |
|
|
88
|
+
| `timelineRetention` | `500` | प्रति रूम रखे गए टाइमलाइन इवेंट |
|
|
89
|
+
| `taskRetention` | `50` | प्रति रूम रखे गए पूर्ण कार्य |
|
|
90
|
+
| `maxMessageChars` | `4000` | एक रूम संदेश के टेक्स्ट की कठोर सीमा (अधिक होने पर अस्वीकार, कभी काटा नहीं जाता) |
|
|
91
|
+
| `injectRoomBrief` | `true` | सदस्य सेशन में संक्षिप्त रूम ब्रीफ़ इंजेक्ट करें (जॉइन + रिज़्यूम पर) |
|
|
92
|
+
| `roomOpenTimeoutMs` | `15000` | `team_rooms` स्टोरेज-डोमेन खुलने में कितना समय लग सकता है, इसके बाद हर रूम ऑपरेशन स्पष्ट रूप से (`store-unavailable`) विफल होता है, लटकता नहीं |
|
|
93
|
+
| `allowUnmarkedFacts` | `false` | जिन होस्ट पर `ignorable` मार्कर छूट जाता है वहाँ केवल-लॉग `team-room/fact` इवेंट ज़बरदस्ती लिखें (खतरनाक: बिना मार्कर वाले तथ्य सेशन को दूसरे होस्ट पर अपुनरुद्ध कर देते हैं); डिफ़ॉल्ट पहचान कर छोड़ देता है |
|
|
94
|
+
| `inbound.enabled` | `false` | बाहरी एजेंट रनटाइम (OpenAI Agents SDK / CrewAI) के लिए stdio JSON-RPC इनबाउंड ब्रिज सक्षम करें। डिफ़ॉल्ट रूप से बंद (fail-closed)। |
|
|
95
|
+
| `inbound.command` | *(कोई नहीं)* | बाहरी रनटाइम लॉन्च कमांड; सक्षम और मौजूद होने पर प्लगइन उसे spawn करता है और नई-पंक्ति-सीमित JSON-RPC सूचनाएँ सुनता है। अनुपस्थित/spawn न हो पाने पर = ब्रिज सुप्त रहता है (लॉग होता है)। |
|
|
96
|
+
|
|
97
|
+
## उपकरण और सतहें
|
|
98
|
+
|
|
99
|
+
| सतह | प्रकार | टिप्पणियाँ |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `/room` | command | `create\|join\|leave\|list\|send\|tasks\|task add\|assign\|claim\|done\|delete` |
|
|
102
|
+
| `room_list_rooms` | tool | इस सेशन के हर रूम: आईडी, नाम, सदस्य सूची, कार्य गणना |
|
|
103
|
+
| `room_post` | tool | बस पर पोस्ट करें (ब्रॉडकास्ट, या `to` के साथ निर्देशित) |
|
|
104
|
+
| `room_read` | tool | किसी रूम की बस हिस्ट्री, seq कर्सर से पढ़ें |
|
|
105
|
+
| `room_list_tasks` | tool | किसी रूम का साझा कार्य बोर्ड |
|
|
106
|
+
| `room_create_task` | tool | बोर्ड पर एक पंक्ति जोड़ें (वैकल्पिक रूप से सौंपी गई) |
|
|
107
|
+
| `room_claim_task` | tool | इस सेशन के लिए पंक्ति claim करें (assignee + प्रगति में) |
|
|
108
|
+
| `room_transfer_task` | tool | पंक्ति दूसरे सदस्य को सौंपें — **अनुमोदन-आधारित**, विफल होने पर fail-closed |
|
|
109
|
+
| `room_complete_task` | tool | पंक्ति को `done` चिह्नित करें |
|
|
110
|
+
| `teamRoom` प्रोजेक्शन | session projection | इस सदस्य के अपने लॉग में `team-room/fact` इवेंट से फ़ोल्ड किया गया रूम दृश्य |
|
|
111
|
+
| Web सेटिंग्स पेज | client | सदस्य स्टेटस, कार्य बोर्ड, टाइमलाइन और रूम क्रियाएँ; स्लॉट आईडी `team-rooms` |
|
|
112
|
+
|
|
113
|
+
ये **आठ** `room_*` टूल हैं, और स्टोरेज डोमेन संयोजित होने पर सभी पंजीकृत होते हैं।
|
|
114
|
+
|
|
115
|
+
## यह कैसे काम करता है — और रीस्टार्ट के बाद क्यों बचा रहता है
|
|
116
|
+
|
|
117
|
+
रूम स्टोर क्रॉस-सेशन प्राधिकारी है; सेशन प्रोजेक्शन हर सदस्य की अपनी पुनर्निर्मित प्रति है। दो प्रकार की लेखन एक साथ चलती हैं और सुसंगत रहती हैं:
|
|
118
|
+
|
|
119
|
+
- **हर रूम परिवर्तन** (create, join, leave, post, कार्य संक्रमण) एक ही hub राइट चेन पर कतार में लगता है — `team_rooms` डोमेन की एकमात्र राइट चेन ही क्रम-प्राधिकारी है, इसलिए समवर्ती पोस्टर कभी read-modify-write को इंटरलीव नहीं कर सकते और बस seq कड़ाई से कमिट क्रम में बनते हैं।
|
|
120
|
+
- **मॉडल-दृश्य ⟺ दर्ज**: डिलीवर किया गया रूम संदेश आधिकारिक इनबॉक्स डिलीवरी है (`agent.followup` जीवित सदस्य को जगाता है; `agent.inject` ऑफ़लाइन सदस्य को अगली शुरुआत पर उसका बैकलॉग देता है), इसलिए वह उस सदस्य के अपने सेशन लॉग में टिकाऊ `user/message` के रूप में दर्ज होता है।
|
|
121
|
+
- **साझा टाइमलाइन** हर सदस्य के लॉग में केवल-लॉग `team-room/fact` इवेंट के रूप में प्रतिबिंबित होती है, जो कैनोनिकल स्टोर `timelineSeq` लेकर चलते हैं; `teamRoom` प्रोजेक्शन हर सदस्य के अपने लॉग को फ़ोल्ड करता है, इसलिए हर पुनः-खोलने पर दृश्य स्टोर पढ़े बिना फिर से बन जाता है।
|
|
122
|
+
- **डिलीवरी at-least-once और क्रमबद्ध है**: प्रति-सदस्य कर्सर (`lastDeliveredSeq`, `lastFactSeq`) केवल डिलीवरी पहुँचने के बाद बढ़ते हैं, इसलिए कमिट और डिलीवरी के बीच क्रैश होने पर कैच-अप में दोबारा डिलीवरी होती है, संदेश खोता नहीं।
|
|
123
|
+
|
|
124
|
+
जिन होस्ट का `Session.append` `ignorable` मार्कर से पुराना है (सभी प्रकाशित rc लाइनें `0.1.0-rc.8` तक, `0.1.1-rc.2` लाइन, और `0.1.2-rc` लाइन, जो एनवलप फ़ील्ड केवल पहले से सहेजे लॉग पढ़ने की संगति के लिए रखती है) उन्हें पहले append से पहले पहचान लिया जाता है (peer-संस्करण पूर्व-जाँच, फिर लौटाए गए एनवलप की जाँच) और तथ्य-लेखन एक बार की चेतावनी के साथ छोड़ दिया जाता है: टिकाऊ स्टोर, API सतहें और मॉडल-दृश्य डिलीवरी सामान्य रूप से काम करती रहती हैं, और `teamRoom` खाली फ़ोल्ड तक घट जाता है। `allowUnmarkedFacts: true` लेखन फिर चालू कर देता है — जान-बूझकर खतरनाक।
|
|
125
|
+
|
|
126
|
+
## यह प्लगइन नहीं है
|
|
127
|
+
|
|
128
|
+
| प्रोजेक्ट | यह क्या करता है | सीमा |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| [titanwings/dsh-automation](https://github.com/titanwings/dsh-automation) | नए एजेंट सेशन में शेड्यूल किए गए कोडिंग कार्य | यह तय करता है कि कार्य **कब** चलें (शेड्यूलिंग)। यह प्लगइन उस **साझा ऑब्जेक्ट** का स्वामी है जिस पर कई सेशन काम करते हैं — कोई शेड्यूलर सीम नहीं, कोई cron नहीं। |
|
|
131
|
+
| [YYTbit/dsh-plugin-agent-dashboard](https://github.com/YYTbit/dsh-plugin-agent-dashboard) | मल्टी-एजेंट डैशबोर्ड स्किल | प्रदर्शन-केंद्रित और मुख्यतः पठन। इस प्लगइन के रूम **लिखने योग्य समन्वय-स्थिति** हैं: एक बस, एक बोर्ड, और अनुमोदन-आधारित हस्तांतरण, जो harness के अपने स्टोरेज में टिकाऊ हैं। |
|
|
132
|
+
| `dsh-background-agents` | बैकग्राउंड एजेंट और (पहले) टीम रूम | उस पैकेज का `bg_*` आधा DSH के नेटिव कंटीन्युएबल उप-एजेंट से बदल चुका है; उसका रूम आधा यह पैकेज है। दोनों रूम आधे एक साथ माउंट न करें। |
|
|
133
|
+
|
|
134
|
+
## अनुमतियाँ और डेटा
|
|
135
|
+
|
|
136
|
+
- **अनुमतियाँ**: workshop मैनिफ़ेस्ट `session:append` और `tools:register` घोषित करता है। रूम कभी उप-एजेंट spawn नहीं करते, इसलिए प्लगइन कोई `subagent:*` अनुमति नहीं माँगता और कोई उप-एजेंट निर्भरता घोषित नहीं करता।
|
|
137
|
+
- **डेटा**: रूम `team_rooms` स्टोरेज डोमेन में रहते हैं (SQLite या JSONL — शून्य अतिरिक्त सेवाएँ)। कोई अलग डेटाबेस नहीं, कोई नेटवर्क नहीं।
|
|
138
|
+
- **सेशन लॉग**: `team-room/fact` इवेंट उन होस्ट पर एनवलप के `ignorable: true` मार्कर के साथ जोड़े जाते हैं जो उसका सम्मान करते हैं (मार्कर-पूर्व होस्ट पहचाने जाते हैं और तथ्य-लेखन छोड़ दिया जाता है — देखें `allowUnmarkedFacts`); मॉडल-दृश्य रूम डिलीवरी असली `user/message` रिकॉर्ड हैं।
|
|
139
|
+
|
|
140
|
+
## सुरक्षा सीमाएँ
|
|
141
|
+
|
|
142
|
+
- **अनुमोदन-आधारित हस्तांतरण।** `room_transfer_task` आधिकारिक अनुमोदन सीम से जाता है और अनुमोदन सेवा संयोजित न होने या कोई अनुमति न देने पर fail-closed होता है — मना करने पर कुछ नहीं बदलता।
|
|
143
|
+
- **मॉडल-दृश्य ⟺ दर्ज।** हर डिलीवर किया गया रूम संदेश सदस्य के अपने लॉग में टिकाऊ `user/message` है; साझा टाइमलाइन केवल-लॉग `team-room/fact` इवेंट के रूप में प्रतिबिंबित होती है। रूम संदेश दर्ज हुए बिना मॉडल तक पहुँच ही नहीं सकता।
|
|
144
|
+
- **सदस्यता ही प्राधिकरण सीमा है।** हर `room_*` टूल कॉल करने वाले सेशन की अपनी सदस्यता के आधार पर प्राधिकृत करता है; गैर-सदस्य को स्थिर अस्वीकृति मिलती है, आधा-अधूरा लेखन नहीं।
|
|
145
|
+
- **प्रतिधारण सीमित है।** बस, टाइमलाइन और पूर्ण कार्यों की विंडो हर लेखन पर लागू होती हैं, इसलिए दीर्घजीवी रूम असीमित नहीं बढ़ सकता।
|
|
146
|
+
- **कोई शेड्यूलिंग नहीं, कोई क्रॉस-मशीन सदस्य नहीं।** सदस्य इस डिप्लॉयमेंट के प्रोसेस-स्थानीय सेशन हैं।
|
|
147
|
+
|
|
148
|
+
## क्रॉस-इकोसिस्टम इनबाउंड (P2)
|
|
149
|
+
|
|
150
|
+
बाहरी एजेंट रनटाइम — OpenAI Agents SDK, CrewAI और समान — एक न्यूनतम **stdio नई-पंक्ति-सीमित JSON-RPC 2.0 ब्रिज** के ज़रिए टीम रूम में प्रकाशित कर सकते हैं। यह JSON-RPC डायरेक्ट-कनेक्ट न्यूनतम सेट है, आधिकारिक ACP वायर प्रोटोकॉल नहीं: पूर्ण ACP अनुकूलता अपस्ट्रीम सीम की प्रतीक्षा में है।
|
|
151
|
+
|
|
152
|
+
इसे दो Config फ़ील्ड से सक्षम करें और `inbound.command` को ऐसे लॉन्चर पर इंगित करें जो stdout पर प्रति पंक्ति एक JSON सूचना देता हो:
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
# cordis.yml (प्लगइन पंक्ति)
|
|
156
|
+
inbound:
|
|
157
|
+
enabled: true
|
|
158
|
+
command: "python external_runtime.py --room <room-id>"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
रनटाइम तीन प्रकार की सूचनाएँ देता है; `method` इवेंट नाम है और `params.name` बाहरी एजेंट का प्रदर्शन नाम:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{"jsonrpc":"2.0","method":"agent_started","params":{"name":"researcher","room":"<room-id>","traceId":"t-1"}}
|
|
165
|
+
{"jsonrpc":"2.0","method":"agent_message","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","message":"found the failing test"}}
|
|
166
|
+
{"jsonrpc":"2.0","method":"agent_finished","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","status":"ok","usage":{"inputTokens":100,"outputTokens":40}}}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
हर एक रूम की मौजूदा सतहों पर मैप होती है: `agent_started` कार्य बोर्ड पर कार्ड खोलती है, `agent_message` संदेश बस पर पोस्ट करती है, और `agent_finished` कार्ड बंद कर परिणाम पोस्ट करती है। अमान्य संदेश fail-closed होते हैं — वे छोड़ दिए जाते हैं और stdin पर JSON-RPC त्रुटि लिखी जाती है। बाहरी रनटाइम DSH सेशन नहीं हैं, इसलिए रूम के स्वामी सदस्य का सेशन प्रेषक बनता है; बिना स्वामी सदस्य वाला रूम इवेंट छोड़ देता है। शुरू और बंद प्लगइन फ़ाइबर के disposer के स्वामित्व में हैं; spawn न हो पाने वाला `inbound.command` एक लॉग चेतावनी तक सिमट जाता है (ब्रिज सुप्त रहता है, बाकी कुछ प्रभावित नहीं होता)।
|
|
170
|
+
|
|
171
|
+
## ज्ञात सीमाएँ
|
|
172
|
+
|
|
173
|
+
- रूम के लिए स्टोरेज डोमेन संयोजित होना ज़रूरी है; `@deepseek-ai/dsh-storage-domain` के बिना `/room` कमांड और `room_*` टूल अक्षम रहते हैं।
|
|
174
|
+
- रूम तब सार्थक होता है जब उसमें कम से कम दो सदस्य हों, और सदस्य सूची `maxMembersPerRoom` से सीमित है; सदस्यता प्रति सेशन है, प्रति उपयोगकर्ता नहीं।
|
|
175
|
+
- क्रॉस-मशीन सदस्यता नहीं है: हर सदस्य इस डिप्लॉयमेंट का प्रोसेस-स्थानीय सेशन है।
|
|
176
|
+
- `room_transfer_task` को अनुमोदन उत्तरदाता चाहिए। उसके बिना यह डिज़ाइन से fail-closed है, इसलिए स्वचालित हस्तांतरण चाहने वाली प्रोफ़ाइल को अनुमोदन सेवा संयोजित करनी होगी।
|
|
177
|
+
- लागत/उपयोग लेखांकन यहाँ क्षेत्र से बाहर है (वह बैकग्राउंड-एजेंट आधे में था); रूम सतहें संरचना बताती हैं, खर्च नहीं।
|
|
178
|
+
|
|
179
|
+
## विकास
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
pnpm install # केवल टूलिंग; harness पैकेज सहोदर checkout से हल होते हैं
|
|
183
|
+
pnpm run typecheck # सख़्त TS, node + क्लाइंट दोनों प्रोग्राम
|
|
184
|
+
pnpm test # vitest: यूनिट, रूम hub, प्रोजेक्शन और jsdom पैनल टेस्ट
|
|
185
|
+
pnpm run build # lib/index.js (node आधा) + lib/client.js (Web क्लाइंट बंडल)
|
|
186
|
+
pnpm run verify:artifacts && pnpm run check:readmes
|
|
187
|
+
pnpm run gen-aliases # checkout खिसकने पर harness पैकेज पथ दोबारा मैप करें
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
`pnpm run pack:smoke` बिल्ड और पैक करता है, और `DSH_HARNESS_ROOT` सेट होने पर tarball को एक अस्थायी प्रोफ़ाइल में इंस्टॉल कर संयोजित पंक्ति जाँचता है।
|
|
191
|
+
|
|
192
|
+
## विषय
|
|
193
|
+
|
|
194
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `team-rooms`, `multi-agent`, `message-bus`, `task-board`, `collaboration`, `cross-session`
|
|
195
|
+
|
|
196
|
+
## योगदानकर्ता
|
|
197
|
+
|
|
198
|
+
- [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: टीम-रूम hub और उसकी राइट चेन, डिलीवरी कर्सर, `teamRoom` प्रोजेक्शन, Web सेटिंग्स पेज, दस्तावेज़, CI/CD और रिलीज़।
|
|
199
|
+
|
|
200
|
+
## PerryLink DSH प्लगइन परिवार
|
|
201
|
+
|
|
202
|
+
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [36 DeepSeek Harness प्लगइन](https://github.com/PerryLink) में से एक है। अगर यह उपयोगी लगा, तो बाकी भी लगेंगे:
|
|
203
|
+
|
|
204
|
+
| प्लगइन | एक पंक्ति |
|
|
205
|
+
|---|---|
|
|
206
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | अनुमोदन श्रृंखला पर दूसरे मॉडल का ऑटो-रिव्यू, डिफ़ॉल्ट से fail-closed | |
|
|
207
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | DeepSeek Harness के लिए लागत शासन: बजट, कार्बन और विलंबता एक पैनल में | |
|
|
208
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind के समकक्ष: स्नैपशॉट, सेशन फ़ोर्क, एक-चरण बहाली | |
|
|
209
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Claude Code के सेशन, मेमोरी, स्किल और CLAUDE.md को DSH में माइग्रेट करें | |
|
|
210
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | DeepSeek Harness के लिए क्रॉस-प्लेटफ़ॉर्म नेटिव डेस्कटॉप नियंत्रण — पहले Windows | |
|
|
211
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Web कंपोज़र के लिए टर्मिनल-शैली इनपुट इतिहास: तीर, Ctrl+R खोज | |
|
|
212
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | डेटासेट गुणवत्ता जाँच और उद्धरण क्रॉस-चेक | |
|
|
213
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | DeepSeek Harness के लिए प्रॉम्प्ट-इंजेक्शन, जेलब्रेक और सीक्रेट-लीक रक्षा | |
|
|
214
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | इंजीनियरिंग-अनुशासन गार्ड: आवश्यकता पड़ताल, टेस्ट गेट, प्रतिपक्षी समीक्षा | |
|
|
215
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | DeepSeek Harness के लिए एकीकृत स्थिर-छवि जनरेशन रूटिंग | |
|
|
216
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | DeepSeek Harness के लिए केवल-पठन प्रदर्शन निदान | |
|
|
217
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | चीनी सार्वजनिक म्यूचुअल फंड के लिए नियतात्मक शोध रिपोर्ट | |
|
|
218
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | DSH के लिए GitHub PR/issue एकीकरण, हर लेखन अनुमोदन-आधारित | |
|
|
219
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | उद्योग शोध ऑर्केस्ट्रेशन जो अपने डिलिवरेबल इस प्लगइन के `ctx.researchReport.assemble` से सील करता है | |
|
|
220
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | DeepSeek Harness के लिए स्थानीय दस्तावेज़ ज्ञान आधार | |
|
|
221
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | DeepSeek Harness के लिए स्थानीय मॉडल (Ollama) एकीकरण | |
|
|
222
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | भाषा सर्वर पर LSP निदान, फ़ॉर्मैटिंग, पूर्णता, कोड क्रियाएँ और नाम बदलना | |
|
|
223
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII मास्किंग मिडलवेयर: मॉडल सीमा पर अनाम, प्रदर्शन परत पर बहाल | |
|
|
224
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | केवल-पठन MCP रनटाइम पैनल: /mcp कमांड + स्टेटस, टूल और त्रुटियों वाला सेटिंग्स टैब | |
|
|
225
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | अनुमोदन-आधारित क्रॉस-सेशन मेमोरी: ctx.memory सीम + SQLite + memory टूल | |
|
|
226
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | DeepSeek Harness के लिए OpenTelemetry और Langfuse ऑब्ज़र्वेबिलिटी एक्सपोर्टर | |
|
|
227
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles के समकक्ष रनटाइम शैली स्विचिंग | |
|
|
228
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-शैली घोषणात्मक allow/deny/ask अनुमति नियम, ऑडिट के साथ | |
|
|
229
|
+
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | टॉप-बार टॉगल के साथ व्यक्तिगत निर्देश इंजेक्टर (framework संस्करण) | |
|
|
230
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | माँग पर लोड होने वाला प्लगइन-विकास ज्ञान आधार स्किल | |
|
|
231
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | मल्टी-चैनल अनुमोदन/प्रश्न ब्रिज: WeChat/Telegram/Feishu, सेशन कंसोल | |
|
|
232
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | सत्यापनीय शोध-रिपोर्ट इंजन: सामग्री-पता-युक्त प्रमाण बही और सील्ड संस्करण | |
|
|
233
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | DeepSeek Harness प्लगइन के लिए बहुआयामी गुणवत्ता स्कोरिंग | |
|
|
234
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Web साइडबार में सेशन पिन करें, टिकाऊ क्रम के साथ | |
|
|
235
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | DeepSeek Harness के लिए क्रॉस-डिवाइस सेशन सिंक — आपके सेशन स्टोर का समर्पित git मिरर | |
|
|
236
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | सुरक्षा-ऑडिट स्किल पैक: सीक्रेट स्कैन, निर्भरता और सप्लाई-चेन समीक्षा | |
|
|
237
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | DeepSeek Harness के लिए वॉइस-फ़र्स्ट सेशन लूप: बोलिए और जवाब सुनिए | |
|
|
238
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | DeepSeek Harness प्लगइन के लिए पृथक इंस्टॉल-�और-स्मोक टेस्ट ड्राइव | |
|
|
239
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 कार्य ब्रिज: सेशन-हेडर पैनल + 11 टूल | |
|
|
240
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | DeepSeek Harness के लिए विक्रेता पैरामीटर अनुवाद और नियतात्मक JSON मरम्मत | |
|
|
241
|
+
|
|
242
|
+
### DSH Desktop मार्केट से इंस्टॉल करें
|
|
243
|
+
|
|
244
|
+
सभी PerryLink प्लगइन अंतर्निहित DSH Desktop मार्केट में ब्राउज़ किए जा सकते हैं: **Market → Sources → add source → पेस्ट करें** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ उसे चुनें**। इंस्टॉलेशन अब भी मार्केट के npm-पहचान सत्यापन और आपकी पुष्टि से होकर जाता है।
|
|
245
|
+
|
|
246
|
+
## लाइसेंस
|
|
247
|
+
|
|
248
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-team-rooms contributors
|
package/README-pt.md
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🏠 dsh-team-rooms
|
|
4
|
+
- **Canal da loja 1024**: rode `npm i -g dsh1024` uma vez e então `dsh1024 plugin --profile web add dsh-team-rooms` (conta para o ranking de instalações do [deepseek1024.com](https://deepseek1024.com)).
|
|
5
|
+
|
|
6
|
+
**Salas de equipe multiagente persistentes e entre sessões para o DeepSeek Harness — membros, um barramento de mensagens, um quadro de tarefas compartilhado e uma linha do tempo compartilhada que sobrevivem a reinícios.**
|
|
7
|
+
|
|
8
|
+
*Cada membro é uma sessão DSH independente; a sala é o objeto durável compartilhado entre elas.*
|
|
9
|
+
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](#)
|
|
13
|
+
|
|
14
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
> **Extraído do [`dsh-background-agents`](https://github.com/PerryLink/dsh-background-agents) 0.9.6.** A metade de agentes em segundo plano daquele plugin (`background_agent` e as cinco ferramentas `bg_*`) foi substituída pelos subagentes continuáveis nativos do DSH; a metade de salas de equipe não tinha equivalente nativo e segue viva aqui como pacote próprio. Domínios de armazenamento, logs de sessão e configurações escritos pela 0.9.6 continuam funcionando sem mudanças — veja *Compatibilidade*.
|
|
21
|
+
|
|
22
|
+
## Compatibilidade
|
|
23
|
+
|
|
24
|
+
O host `0.1.2-alpha.2` e posteriores falham fechado no vocabulário de eventos de sessão, então este plugin não escreve mais ali seus eventos de fato apenas-log (`team-room/fact`): os fatos vão para o canal de logger/painel e a projeção `teamRoom` degrada para um fold vazio. Linhas rc anteriores (até `0.1.1-rc.2`) mantêm a disciplina do marcador `ignorable`. A metade cliente usa os pacotes cliente atuais (`dsh-api-session-controller`, `dsh-client-ui-slots`, `dsh-client-ui-settings`, `dsh-client-locale`, `dsh-client-web`).
|
|
25
|
+
|
|
26
|
+
**A compatibilidade de dados com o `dsh-background-agents` 0.9.6 é regra dura.** Estas strings são idênticas byte a byte às da 0.9.6 e nunca devem ser renomeadas: o domínio de armazenamento `team_rooms`, a chave de projeção `teamRoom`, o tipo de evento de sessão `team-room/fact` e o id de slot de configurações `team-rooms`. Por isso um perfil existente mantém suas salas, os logs de seus membros e sua página de configurações ao trocar o plugin.
|
|
27
|
+
|
|
28
|
+
| Superfície | Estado |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (tag do GitHub, verificado em 2026-09-11; dev e runtime fixam `0.1.5-rc.2`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`) |
|
|
31
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
32
|
+
| Plataformas | Todas (ferramentas de host; a página de configurações precisa da metade cliente Web e da capacidade de domínio de armazenamento) |
|
|
33
|
+
| Modelo | Qualquer (salas não carregam rota de modelo — membros são sessões comuns) |
|
|
34
|
+
|
|
35
|
+
## O que você recebe
|
|
36
|
+
|
|
37
|
+
O `dsh-team-rooms` transforma várias sessões independentes em uma equipe coordenada:
|
|
38
|
+
|
|
39
|
+
1. **A família de comandos `/room`** — `create`, `join`, `leave`, `list`, `send`, `tasks`, `task add|assign|claim|done|delete`. Salas têm nome, dono e são endereçadas por um id estável que você pode colar em outra sessão.
|
|
40
|
+
2. **Oito ferramentas `room_*`** — `room_list_rooms`, `room_post`, `room_read`, `room_list_tasks`, `room_create_task`, `room_claim_task`, `room_transfer_task`, `room_complete_task`. O modelo trabalha o quadro compartilhado e o barramento de dentro da própria sessão; `room_transfer_task` pede aprovação antes de uma transferência entre membros.
|
|
41
|
+
3. **Um armazenamento de salas durável** — membros, o barramento de mensagens (direcionado ou broadcast), o quadro de tarefas e a linha do tempo vivem no domínio de armazenamento `team_rooms` (backend SQLite ou JSONL — a implantação escolhe; o plugin não adiciona serviço próprio) e se recuperam após reiniciar o DSH.
|
|
42
|
+
4. **Uma página de configurações Web** — a seção Team Rooms mostra o estado dos membros, o quadro de tarefas e a linha do tempo de cada sala da sessão atual, lidos da projeção de sessão `teamRoom` e escritos de volta pelo comando `/room` do host.
|
|
43
|
+
|
|
44
|
+
## Início rápido
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
# 1. instale o bundle no seu perfil
|
|
48
|
+
dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"
|
|
49
|
+
|
|
50
|
+
# ou pelo npm (versões publicadas)
|
|
51
|
+
dsh plugin --profile web add dsh-team-rooms
|
|
52
|
+
|
|
53
|
+
# 2. reinicie e verifique a linha
|
|
54
|
+
dsh --profile web --dump-config | grep -A4 'id: team-rooms'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
O patch do bundle traz a linha do plugin; nenhuma chave de Config é obrigatória. O repositório versiona sua saída de build (`lib/`), então instalações por git não precisam compilar. As salas montam onde o domínio de armazenamento é composto (`@deepseek-ai/dsh-storage-domain`, presente em todo perfil `@deepseek-ai/dsh-base`); sem ele, o comando `/room` e as ferramentas `room_*` ficam dormentes e o resto continua carregando.
|
|
58
|
+
|
|
59
|
+
Depois, dentro de qualquer sessão:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/room create release-prep
|
|
63
|
+
/room send <roomId> kickoff: I own the changelog, who takes the docs?
|
|
64
|
+
/room task add <roomId> draft the migration note
|
|
65
|
+
/room task claim <roomId> <taskId>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Cole o id de sala impresso em outra sessão e rode `/room join <roomId>`: essa sessão passa a ser membro, recebe as entregas da sala como mensagens comuns e vê o mesmo quadro.
|
|
69
|
+
|
|
70
|
+
## Instalar e desinstalar
|
|
71
|
+
|
|
72
|
+
- **canal git** (último `main`): `dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"` — `lib/` versionado, sem passos `prepare` ou `allowBuilds`.
|
|
73
|
+
- **canal npm** (versões publicadas): `dsh plugin --profile web add dsh-team-rooms`.
|
|
74
|
+
- **canal tarball**: `pnpm pack` neste repositório e depois `dsh plugin --profile web add ./dsh-team-rooms-<version>.tgz`.
|
|
75
|
+
- **desinstalar**: `dsh plugin --profile web remove dsh-team-rooms` (ou remova a linha do patch do perfil). Suas salas permanecem no domínio de armazenamento `team_rooms` e voltam se você reinstalar.
|
|
76
|
+
- ⚠️ **Não monte este pacote e o `dsh-background-agents` ao mesmo tempo.** Durante a janela de depreciação ambos estão publicados, e os dois registram as mesmas oito ferramentas `room_*`, o mesmo id de slot `settings.section` (`team-rooms`) e o mesmo domínio de armazenamento `team_rooms`, então as duas metades de salas colidem. Se você já usa `dsh-background-agents`, remova-o primeiro (`dsh plugin --profile web remove dsh-background-agents`). Suas salas sobrevivem de qualquer forma: elas vivem no domínio de armazenamento, não no plugin.
|
|
77
|
+
|
|
78
|
+
## Configuração
|
|
79
|
+
|
|
80
|
+
Cada ajuste é um campo `Config` validado por Schemastery — mude no cordis.yml, nunca no código. Nenhum é obrigatório.
|
|
81
|
+
|
|
82
|
+
| Chave | Padrão | Significado |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| `maxRooms` | `16` | Teto de salas de equipe em todo o perfil |
|
|
85
|
+
| `maxMembersPerRoom` | `8` | Teto de membros por sala (`>= 2`) |
|
|
86
|
+
| `maxRoomsPerMember` | `4` | Teto de salas que uma sessão membro pode entrar |
|
|
87
|
+
| `busRetention` | `200` | Mensagens do barramento mantidas por sala |
|
|
88
|
+
| `timelineRetention` | `500` | Eventos de linha do tempo mantidos por sala |
|
|
89
|
+
| `taskRetention` | `50` | Tarefas concluídas mantidas por sala |
|
|
90
|
+
| `maxMessageChars` | `4000` | Teto do texto de uma mensagem de sala (acima disso é rejeitada, nunca truncada) |
|
|
91
|
+
| `injectRoomBrief` | `true` | Injetar o breve resumo da sala nas sessões membro (entrada + retomada) |
|
|
92
|
+
| `roomOpenTimeoutMs` | `15000` | Quanto a abertura do domínio `team_rooms` pode demorar antes de toda operação de sala falhar alto (`store-unavailable`) em vez de travar |
|
|
93
|
+
| `allowUnmarkedFacts` | `false` | Forçar os eventos `team-room/fact` apenas-log em hosts que descartam o marcador `ignorable` (perigoso: fatos sem marca tornam sessões irrecuperáveis em outros hosts); o padrão detecta e pula |
|
|
94
|
+
| `inbound.enabled` | `false` | Habilita a ponte de entrada stdio JSON-RPC para runtimes de agentes externos (OpenAI Agents SDK / CrewAI). Desabilitada por padrão (fail-closed). |
|
|
95
|
+
| `inbound.command` | *(nenhum)* | Comando de lançamento do runtime externo; quando habilitado e presente, o plugin o inicia e escuta notificações JSON-RPC delimitadas por quebra de linha. Ausente/não iniciável = a ponte fica dormente (registrado em log). |
|
|
96
|
+
|
|
97
|
+
## Ferramentas e superfícies
|
|
98
|
+
|
|
99
|
+
| Superfície | Tipo | Notas |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| `/room` | command | `create\|join\|leave\|list\|send\|tasks\|task add\|assign\|claim\|done\|delete` |
|
|
102
|
+
| `room_list_rooms` | tool | Cada sala desta sessão: ids, nomes, elencos, contagens de tarefas |
|
|
103
|
+
| `room_post` | tool | Publicar no barramento (broadcast, ou direcionado com `to`) |
|
|
104
|
+
| `room_read` | tool | Ler o histórico do barramento de uma sala, a partir de um cursor de seq |
|
|
105
|
+
| `room_list_tasks` | tool | O quadro de tarefas compartilhado de uma sala |
|
|
106
|
+
| `room_create_task` | tool | Adicionar uma linha ao quadro (opcionalmente atribuída) |
|
|
107
|
+
| `room_claim_task` | tool | Reivindicar uma linha para esta sessão (responsável + em andamento) |
|
|
108
|
+
| `room_transfer_task` | tool | Passar uma linha a outro membro — **com aprovação**, falha fechado |
|
|
109
|
+
| `room_complete_task` | tool | Marcar uma linha como `done` |
|
|
110
|
+
| projeção `teamRoom` | session projection | A visão da sala dobrada a partir dos eventos `team-room/fact` no log do próprio membro |
|
|
111
|
+
| página de configurações Web | client | Estado dos membros, quadro de tarefas, linha do tempo e ações da sala; id de slot `team-rooms` |
|
|
112
|
+
|
|
113
|
+
São **oito** ferramentas `room_*`, todas registradas quando o domínio de armazenamento está composto.
|
|
114
|
+
|
|
115
|
+
## Como funciona — e por que sobrevive a reinícios
|
|
116
|
+
|
|
117
|
+
O armazenamento de salas é a autoridade entre sessões; a projeção de sessão é a cópia reconstruída de cada membro. Duas escritas acontecem ao mesmo tempo e permanecem consistentes:
|
|
118
|
+
|
|
119
|
+
- **Toda mutação de sala** (create, join, leave, post, transições de tarefa) entra em UMA cadeia de escrita do hub — a cadeia única do domínio `team_rooms` é a autoridade de ordenação, então publicadores concorrentes nunca intercalam um ler-modificar-escrever e os seq do barramento são cunhados estritamente na ordem de commit.
|
|
120
|
+
- **Visível ao modelo ⟺ registrado**: uma mensagem de sala entregue é uma entrega oficial na caixa de entrada (`agent.followup` acorda um membro vivo; `agent.inject` entrega o acumulado a um membro offline no próximo início), então ela cai como um `user/message` durável no log do próprio membro.
|
|
121
|
+
- **A linha do tempo compartilhada** se espelha no log de cada membro como eventos `team-room/fact` apenas-log que carregam o `timelineSeq` canônico do armazenamento; a projeção `teamRoom` dobra o log de cada membro, então a visão se reconstrói a cada reabertura sem ler o armazenamento.
|
|
122
|
+
- **A entrega é ao-menos-uma-vez e ordenada**: os cursores por membro (`lastDeliveredSeq`, `lastFactSeq`) avançam só depois que uma entrega chega, então uma queda entre commit e entrega reentrega na recuperação em vez de perder a mensagem.
|
|
123
|
+
|
|
124
|
+
Hosts cujo `Session.append` precede o marcador `ignorable` (todas as linhas rc publicadas até `0.1.0-rc.8`, a linha `0.1.1-rc.2` e a linha `0.1.2-rc`, que mantém o campo do envelope apenas para compatibilidade de leitura de logs já gravados) são detectados antes da primeira escrita (pré-checagem de versão do peer e então uma sondagem do envelope devolvido) e as escritas de fato são puladas com um aviso único: o armazenamento durável, as superfícies de API e as entregas visíveis ao modelo continuam funcionando, e o `teamRoom` degrada para um fold vazio. `allowUnmarkedFacts: true` reativa a escrita — deliberadamente perigoso.
|
|
125
|
+
|
|
126
|
+
## Não é este plugin
|
|
127
|
+
|
|
128
|
+
| Projeto | O que faz | A fronteira |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| [titanwings/dsh-automation](https://github.com/titanwings/dsh-automation) | Tarefas de codificação agendadas em sessões de agente novas | Ele é dono de **quando** as tarefas rodam (agendamento). Este plugin é dono do **objeto compartilhado** sobre o qual várias sessões trabalham — sem costura de agendador, sem cron. |
|
|
131
|
+
| [YYTbit/dsh-plugin-agent-dashboard](https://github.com/YYTbit/dsh-plugin-agent-dashboard) | Skill de painel multiagente | Voltado a exibição e majoritariamente leitura. As salas deste plugin são **estado de coordenação gravável**: um barramento, um quadro e transferências com aprovação, persistidos no armazenamento do próprio harness. |
|
|
132
|
+
| `dsh-background-agents` | Agentes em segundo plano e (antes) salas de equipe | A metade `bg_*` daquele pacote foi substituída pelos subagentes continuáveis nativos do DSH; sua metade de salas é este pacote. Não monte as duas metades de salas ao mesmo tempo. |
|
|
133
|
+
|
|
134
|
+
## Permissões e dados
|
|
135
|
+
|
|
136
|
+
- **Permissões**: o manifesto do workshop declara `session:append` e `tools:register`. Salas nunca iniciam um subagente, então o plugin não pede nenhuma permissão `subagent:*` nem declara dependência de subagente.
|
|
137
|
+
- **Dados**: as salas vivem no domínio de armazenamento `team_rooms` (SQLite ou JSONL — zero serviços extras). Sem banco separado, sem rede.
|
|
138
|
+
- **Log de sessão**: eventos `team-room/fact` são gravados com o marcador `ignorable: true` do envelope nos hosts que o respeitam (hosts anteriores ao marcador são detectados e as escritas são puladas — veja `allowUnmarkedFacts`); as entregas de sala visíveis ao modelo são registros `user/message` reais.
|
|
139
|
+
|
|
140
|
+
## Limites de segurança
|
|
141
|
+
|
|
142
|
+
- **Transferências com aprovação.** `room_transfer_task` passa pela costura oficial de aprovação e falha fechado quando não há serviço de aprovação composto ou ninguém concede — nada muda em uma recusa.
|
|
143
|
+
- **Visível ao modelo ⟺ registrado.** Cada mensagem de sala entregue é um `user/message` durável no log do próprio membro; a linha do tempo compartilhada se espelha como eventos `team-room/fact` apenas-log. Uma mensagem de sala nunca pode chegar a um modelo sem ser registrada.
|
|
144
|
+
- **A participação é a fronteira de autorização.** Cada ferramenta `room_*` autoriza contra a participação da própria sessão chamadora; quem não é membro recebe uma rejeição estável, não uma escrita parcial.
|
|
145
|
+
- **A retenção é limitada.** As janelas do barramento, da linha do tempo e das tarefas concluídas são aplicadas a cada escrita, então uma sala longeva não cresce sem limite.
|
|
146
|
+
- **Sem agendamento e sem membros entre máquinas.** Um membro é uma sessão local ao processo desta implantação.
|
|
147
|
+
|
|
148
|
+
## Entrada entre ecossistemas (P2)
|
|
149
|
+
|
|
150
|
+
Runtimes de agentes externos — OpenAI Agents SDK, CrewAI e similares — podem publicar em uma sala de equipe por meio de uma **ponte stdio JSON-RPC 2.0 delimitada por quebra de linha**. É um conjunto mínimo de conexão direta JSON-RPC, não o protocolo oficial de fio ACP: a compatibilidade ACP completa espera a costura upstream.
|
|
151
|
+
|
|
152
|
+
Habilite com dois campos de Config e aponte `inbound.command` para um lançador que emita uma notificação JSON por linha no stdout:
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
# cordis.yml (linha do plugin)
|
|
156
|
+
inbound:
|
|
157
|
+
enabled: true
|
|
158
|
+
command: "python external_runtime.py --room <room-id>"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
O runtime emite três tipos de notificação; `method` é o nome do evento e `params.name` é o nome de exibição do agente externo:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{"jsonrpc":"2.0","method":"agent_started","params":{"name":"researcher","room":"<room-id>","traceId":"t-1"}}
|
|
165
|
+
{"jsonrpc":"2.0","method":"agent_message","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","message":"found the failing test"}}
|
|
166
|
+
{"jsonrpc":"2.0","method":"agent_finished","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","status":"ok","usage":{"inputTokens":100,"outputTokens":40}}}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Cada uma mapeia para as superfícies já existentes da sala: `agent_started` abre um cartão no quadro, `agent_message` publica no barramento e `agent_finished` fecha o cartão e publica o resultado. Mensagens inválidas falham fechado — são descartadas e um erro JSON-RPC é escrito de volta. Runtimes externos não são sessões DSH, então a sessão membro dona da sala atua como remetente; uma sala sem membro dono descarta o evento. Início e parada pertencem à fibra do plugin por meio de um disposer; um `inbound.command` não iniciável degrada para um aviso em log (a ponte fica dormente, nada mais é afetado).
|
|
170
|
+
|
|
171
|
+
## Limitações conhecidas
|
|
172
|
+
|
|
173
|
+
- Salas exigem o domínio de armazenamento composto; sem `@deepseek-ai/dsh-storage-domain`, o comando `/room` e as ferramentas `room_*` ficam desabilitados.
|
|
174
|
+
- Uma sala precisa de ao menos dois membros para ser interessante, e o elenco é limitado por `maxMembersPerRoom`; a participação é por sessão, não por usuário.
|
|
175
|
+
- Não há participação entre máquinas: cada membro é uma sessão local ao processo desta implantação.
|
|
176
|
+
- `room_transfer_task` precisa de um respondedor de aprovação. Sem ele falha fechado por design, então perfis automatizados que queiram transferências precisam compor um serviço de aprovação.
|
|
177
|
+
- Contabilidade de custo/uso está fora de escopo aqui (isso vivia na metade de agentes em segundo plano); as superfícies de sala informam estrutura, não gasto.
|
|
178
|
+
|
|
179
|
+
## Desenvolvimento
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
pnpm install # só ferramentas; pacotes do harness resolvem contra um checkout irmão
|
|
183
|
+
pnpm run typecheck # TS estrito, programas node + cliente
|
|
184
|
+
pnpm test # vitest: testes unitários, de hub de salas, de projeção e de painel jsdom
|
|
185
|
+
pnpm run build # lib/index.js (metade node) + lib/client.js (bundle cliente web)
|
|
186
|
+
pnpm run verify:artifacts && pnpm run check:readmes
|
|
187
|
+
pnpm run gen-aliases # remapeia os caminhos do harness depois que o checkout se move
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
`pnpm run pack:smoke` compila, empacota e (com `DSH_HARNESS_ROOT` definido) instala o tarball em um perfil descartável para verificar a linha composta.
|
|
191
|
+
|
|
192
|
+
## Tópicos
|
|
193
|
+
|
|
194
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `team-rooms`, `multi-agent`, `message-bus`, `task-board`, `collaboration`, `cross-session`
|
|
195
|
+
|
|
196
|
+
## Contribuidores
|
|
197
|
+
|
|
198
|
+
- [@PerryLink](https://github.com/PerryLink) — criador e mantenedor: o hub de salas de equipe e sua cadeia de escrita, os cursores de entrega, a projeção `teamRoom`, a página de configurações Web, documentação, CI/CD e releases.
|
|
199
|
+
|
|
200
|
+
## Família de Plugins DSH PerryLink
|
|
201
|
+
|
|
202
|
+
Este projeto é um dos [36 plugins do DeepSeek Harness](https://github.com/PerryLink) mantidos por [PerryLink](https://github.com/PerryLink). Se este ajuda você, os outros provavelmente também:
|
|
203
|
+
|
|
204
|
+
| Plugin | Uma linha |
|
|
205
|
+
|---|---|
|
|
206
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Auto-revisão por segundo modelo na cadeia de aprovação, fail-closed por padrão | |
|
|
207
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Governança de custos para o DeepSeek Harness: orçamentos, carbono e latência em um painel | |
|
|
208
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Equivalente ao /rewind do Claude Code: snapshots, bifurcações de sessão, restauração em um passo | |
|
|
209
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migra sessões, memória, skills e CLAUDE.md do Claude Code para o DSH | |
|
|
210
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Controle nativo de desktop multiplataforma para o DeepSeek Harness — Windows primeiro | |
|
|
211
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Histórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R | |
|
|
212
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Verificações de qualidade de datasets e cruzamento de citações | |
|
|
213
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Defesa contra injeção de prompt, jailbreak e vazamento de segredos para o DeepSeek Harness | |
|
|
214
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Guarda de disciplina de engenharia: interrogatório de requisitos, portões de teste, revisão adversária | |
|
|
215
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Roteamento unificado de geração de imagens estáticas para o DeepSeek Harness | |
|
|
216
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Diagnóstico de desempenho somente leitura para o DeepSeek Harness | |
|
|
217
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Relatórios de pesquisa determinísticos para fundos mútuos públicos chineses | |
|
|
218
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | Integração de PR/issues do GitHub para o DSH, toda escrita com aprovação | |
|
|
219
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Orquestração de pesquisa setorial que sela seus entregáveis via `ctx.researchReport.assemble` | |
|
|
220
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Base de conhecimento de documentos locais para o DeepSeek Harness | |
|
|
221
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Integração de modelos locais (Ollama) para o DeepSeek Harness | |
|
|
222
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | Diagnósticos, formatação, completude, ações de código e renomeação LSP sobre servidores de linguagem | |
|
|
223
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | Middleware de mascaramento de PII: anonimiza na fronteira do modelo, restaura na camada de exibição | |
|
|
224
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Painel de runtime MCP somente leitura: comando /mcp + aba de configurações com estado, ferramentas e erros | |
|
|
225
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Memória entre sessões com aprovação: costura ctx.memory + SQLite + ferramenta memory | |
|
|
226
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | Exportador de observabilidade OpenTelemetry e Langfuse para o DeepSeek Harness | |
|
|
227
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Troca de estilo em runtime equivalente ao outputStyles do Claude Code | |
|
|
228
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Regras declarativas de permissão allow/deny/ask no estilo Claude Code com auditoria | |
|
|
229
|
+
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Injetor de diretivas pessoais com interruptor na barra superior (edição framework) | |
|
|
230
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Base de conhecimento de desenvolvimento de plugins como skill sob demanda | |
|
|
231
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Ponte multicanal de aprovações/perguntas: WeChat/Telegram/Feishu, console de sessão | |
|
|
232
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Motor de relatórios de pesquisa verificáveis: livro de evidências endereçado por conteúdo e versões seladas | |
|
|
233
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Pontuação de qualidade multidimensional para plugins do DeepSeek Harness | |
|
|
234
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Fixa sessões na barra lateral Web com ordenação durável | |
|
|
235
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Sincronização de sessões entre dispositivos para o DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões | |
|
|
236
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Pacote de skills de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos | |
|
|
237
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Loop de sessão por voz para o DeepSeek Harness: fale com ele e ouça a resposta | |
|
|
238
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Testes isolados de instalação e smoke para plugins do DeepSeek Harness | |
|
|
239
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | Ponte de tarefas TickTick/Dida365: painel no cabeçalho da sessão + 11 ferramentas | |
|
|
240
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Tradução de parâmetros de fornecedor e reparo determinístico de JSON para o DeepSeek Harness | |
|
|
241
|
+
|
|
242
|
+
### Instalar a partir do mercado do DSH Desktop
|
|
243
|
+
|
|
244
|
+
Todos os plugins PerryLink são navegáveis no mercado embutido do DSH Desktop: **Market → Sources → add source → cole** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ selecione**. A instalação ainda passa pela verificação de identidade npm do mercado e pela sua confirmação.
|
|
245
|
+
|
|
246
|
+
## Licença
|
|
247
|
+
|
|
248
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-team-rooms contributors
|