# 🏠 dsh-team-rooms - **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)). **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.** *Cada membro é uma sessão DSH independente; a sala é o objeto durável compartilhado entre elas.* [![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=pt)](https://dshfind.com/pt/plugins/PerryLink/dsh-team-rooms?ref=badge) > 🪦 **APOSENTADO — atualizações de compatibilidade interrompidas desde 2026-10-05.** A coordenação de equipes agora é **implementada pelo próprio harness oficial** `dsh-experimental-agent-team` (com `-tool-agent-team`) oferece uma lista de membros com raiz implícita, uma **caixa de correio de pares durável** e um **DAG de tarefas** compartilhado com atualizações compare-and-set, além de uma projeção Web. ⚠️ O bundle `dsh-base` distribuído mantém-no **desativado**: é preciso um patch de perfil para habilitá-lo, e esse patch desativa também os antigos nomes de controle de filhos continuáveis. Também há **alternativas da comunidade** bem adotadas — por exemplo `@nanmicoder/dsh-agent-teams` (~13 mil downloads semanais), mas em 2026-10-05 os peers declarados **param abaixo da linha `0.2.1`**, então a barreira de compatibilidade do host **ignora** o pacote em `0.2.1-alpha.1` a menos que você adicione uma isenção por versão exata. A única capacidade própria restante era coordenar **sessões independentes em processos separados**; com 589 downloads semanais diante de um subsistema nativo e várias alternativas mais fortes, esse nicho não justifica mais a manutenção de compatibilidade. 👉 **Use o Agent Teams nativo, ou uma alternativa mais adotada.** Este repositório permanece público como referência. [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
--- > **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*. ## Compatibilidade 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`). **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. | Superfície | Estado | |---|---| | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (verificado em 2026-09-25; dev e runtime fixam `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` | | Plataformas | Todas (ferramentas de host; a página de configurações precisa da metade cliente Web e da capacidade de domínio de armazenamento) | | Modelo | Qualquer (salas não carregam rota de modelo — membros são sessões comuns) | ## O que você recebe O `dsh-team-rooms` transforma várias sessões independentes em uma equipe coordenada: 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. 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. 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. 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. ## Início rápido ```sh # 1. instale o bundle no seu perfil dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main" # ou pelo npm (versões publicadas) dsh plugin --profile web add dsh-team-rooms # 2. reinicie e verifique a linha dsh --profile web --dump-config | grep -A4 'id: team-rooms' ``` 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. Depois, dentro de qualquer sessão: ``` /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 ``` Cole o id de sala impresso em outra sessão e rode `/room join `: essa sessão passa a ser membro, recebe as entregas da sala como mensagens comuns e vê o mesmo quadro. ## Instalar e desinstalar - **canal git** (último `main`): `dsh plugin --profile web add "github:PerryLink/dsh-team-rooms#main"` — `lib/` versionado, sem passos `prepare` ou `allowBuilds`. - **canal npm** (versões publicadas): `dsh plugin --profile web add dsh-team-rooms`. - **canal tarball**: `pnpm pack` neste repositório e depois `dsh plugin --profile web add ./dsh-team-rooms-.tgz`. - **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. - ⚠️ **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. ## Configuração Cada ajuste é um campo `Config` validado por Schemastery — mude no cordis.yml, nunca no código. Nenhum é obrigatório. | Chave | Padrão | Significado | |---|---|---| | `maxRooms` | `16` | Teto de salas de equipe em todo o perfil | | `maxMembersPerRoom` | `8` | Teto de membros por sala (`>= 2`) | | `maxRoomsPerMember` | `4` | Teto de salas que uma sessão membro pode entrar | | `busRetention` | `200` | Mensagens do barramento mantidas por sala | | `timelineRetention` | `500` | Eventos de linha do tempo mantidos por sala | | `taskRetention` | `50` | Tarefas concluídas mantidas por sala | | `maxMessageChars` | `4000` | Teto do texto de uma mensagem de sala (acima disso é rejeitada, nunca truncada) | | `injectRoomBrief` | `true` | Injetar o breve resumo da sala nas sessões membro (entrada + retomada) | | `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 | | `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 | | `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). | | `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). | ## Ferramentas e superfícies | Superfície | Tipo | Notas | |---|---|---| | `/room` | command | `create\|join\|leave\|list\|send\|tasks\|task add\|assign\|claim\|done\|delete` | | `room_list_rooms` | tool | Cada sala desta sessão: ids, nomes, elencos, contagens de tarefas | | `room_post` | tool | Publicar no barramento (broadcast, ou direcionado com `to`) | | `room_read` | tool | Ler o histórico do barramento de uma sala, a partir de um cursor de seq | | `room_list_tasks` | tool | O quadro de tarefas compartilhado de uma sala | | `room_create_task` | tool | Adicionar uma linha ao quadro (opcionalmente atribuída) | | `room_claim_task` | tool | Reivindicar uma linha para esta sessão (responsável + em andamento) | | `room_transfer_task` | tool | Passar uma linha a outro membro — **com aprovação**, falha fechado | | `room_complete_task` | tool | Marcar uma linha como `done` | | projeção `teamRoom` | session projection | A visão da sala dobrada a partir dos eventos `team-room/fact` no log do próprio membro | | 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` | São **oito** ferramentas `room_*`, todas registradas quando o domínio de armazenamento está composto. ## Como funciona — e por que sobrevive a reinícios 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: - **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. - **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. - **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. - **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. 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. ## Não é este plugin | Projeto | O que faz | A fronteira | |---|---|---| | [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. | | [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. | | `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. | ## Permissões e dados - **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. - **Dados**: as salas vivem no domínio de armazenamento `team_rooms` (SQLite ou JSONL — zero serviços extras). Sem banco separado, sem rede. - **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. ## Limites de segurança - **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. - **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. - **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. - **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. - **Sem agendamento e sem membros entre máquinas.** Um membro é uma sessão local ao processo desta implantação. ## Entrada entre ecossistemas (P2) 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. Habilite com dois campos de Config e aponte `inbound.command` para um lançador que emita uma notificação JSON por linha no stdout: ```yaml # cordis.yml (linha do plugin) inbound: enabled: true command: "python external_runtime.py --room " ``` 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: ```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}}} ``` 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). ## Limitações conhecidas - Salas exigem o domínio de armazenamento composto; sem `@deepseek-ai/dsh-storage-domain`, o comando `/room` e as ferramentas `room_*` ficam desabilitados. - 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. - Não há participação entre máquinas: cada membro é uma sessão local ao processo desta implantação. - `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. - 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. ## Desenvolvimento ```sh pnpm install # só ferramentas; pacotes do harness resolvem contra um checkout irmão pnpm run typecheck # TS estrito, programas node + cliente pnpm test # vitest: testes unitários, de hub de salas, de projeção e de painel jsdom pnpm run build # lib/index.js (metade node) + lib/client.js (bundle cliente web) pnpm run verify:artifacts && pnpm run check:readmes pnpm run gen-aliases # remapeia os caminhos do harness depois que o checkout se move ``` `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. ## Tópicos `dsh`, `dsh-plugin`, `deepseek-harness`, `team-rooms`, `multi-agent`, `message-bus`, `task-board`, `collaboration`, `cross-session` ## Contribuidores - [@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. ### Instalar a partir do mercado do DSH Desktop 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. ## Licença [Apache License 2.0](LICENSE) © 2026 dsh-team-rooms contributors ## PerryLink DSH Plugin Family Este projeto é um dos **33 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **6** estão congelados e **3** aposentados; cada um mantém sua linha abaixo, com o motivo na coluna Status. Se este ajudou você, provavelmente os outros também ajudarão: | Plugin | Em uma linha | Status | |---|---|---| | **[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 | 🚫 **APOSENTADO** — ver a nota acima | | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 CONGELADO — ver o README do repositório | | **[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 | 🧊 CONGELADO — ver o README do repositório | | **[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. | 🧊 CONGELADO — ver o README do repositório | | **[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. | 🧊 CONGELADO — ver o README do repositório | | **[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 | 🧊 CONGELADO — ver o README do repositório | | **[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 | 🚫 APOSENTADO — corredores assumidos por `dsh-plugin-upgrade` | | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 CONGELADO — ver o README do repositório | | **[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 | 🚫 **APOSENTADO** — ver a nota acima | | **[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 | 🚫 **APOSENTADO** — ver a nota acima | | **[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. | |