dsh-switchman 1.3.0 → 1.5.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/README.ru.md ADDED
@@ -0,0 +1,111 @@
1
+ # dsh-switchman
2
+
3
+ [English](./README.md) | [简体中文](./README.zh.md) | [繁體中文](./README.zh-TW.md) | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [Español](./README.es.md) | [Français](./README.fr.md) | [Deutsch](./README.de.md) | [Italiano](./README.it.md) | [Português](./README.pt.md) | **Русский**
4
+
5
+ > **Семейство switchman**, один автор, одна и та же философия диспетчеризации: [opencode-switchman](https://github.com/mrzturn/opencode-switchman) (оригинал для OpenCode) · [zcode-switchman](https://github.com/mrzturn/zcode-switchman) (порт для ZCode) · **dsh-switchman** (этот репозиторий, версия для DeepSeek Harness).
6
+
7
+ ![dsh-switchman — уровень воды в контексте дёргает стрелку, и задачи уходят на нужный путь](docs/assets/hero.svg)
8
+
9
+ > Контекст под счётчиком. Задачи сами находят свою полосу.
10
+
11
+ ## Зачем это нужно
12
+
13
+ Если работать в DSH подольше, рано или поздно упираешься в две вещи:
14
+
15
+ 1. **Сессия тяжелеет с каждым сообщением.** История раздувает контекст до сотен тысяч токенов — модель начинает забывать, тормозить и дорожать; в конце концов остаётся ручной /compact, а каждое сжатие ещё и теряет детали.
16
+ 2. **Главная модель всё делает сама.** Прочитать файл, прогнать тест, сверить данные — всё она грызёт сама: медленно и дорого, хотя большая часть этой работы по праву досталась бы дешёвой модели.
17
+
18
+ dsh-switchman — плагин для [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH). После установки главная модель перестаёт «делать всё сама» и становится диспетчером: замеряет уровень воды, выбирает полосу, раздаёт задачи, принимает работу. Это не новая модель, а свод правил диспетчеризации, пристёгнутый к DSH, плюс страница настроек. Конкретно он делает шесть вещей:
19
+
20
+ **1. Уровень воды в контексте: длинная сессия не переполняется.** Каждый ход подсчитывает токены сессии в реальном времени, и три линии уровня ужесточаются по нарастающей: 50k (soft, настраивается) подсказывает «пора делегировать»; 90k (hard) урезает бюджет разового чтения файла и подталкивает к завершению; 130k (force) запускает автоматическую передачу — форкает копию сессии в архив, сжимает контекст и будит продолжение, работа не обрывается. Фоновые субагенты, которые ещё бегут в момент передачи, тоже не теряются: id, описания задач и пути к отчётам записываются в документ передачи, и продолжившаяся сессия знает, куда идти за отчётами, а не раздаёт работу заново. У каждого отправленного субагента свой жёсткий потолок: доработав до него, он завершается резюме HANDOFF.
21
+
22
+ **2. Шесть пулов диспетчеризации: под каждую работу — своя модель.** Лёгкий пул (economy — мелкие массовые задачи), механический (mechanical — шаблонные переработки), основной (main — повседневный кодинг), пул высокой сложности (hard — тяжёлые рассуждения и крупные рефакторинги), мультимодальный (vision — чтение картинок), пул ревью (review — независимая проверка). На странице настроек отмечаете кандидатов, расставляете приоритеты (можно с привязкой к ступеням S/A/B/C) и для каждого маршрута отдельно фиксируете reasoning effort — выпадающий список ступеней берётся из уровней, которые модель реально поддерживает, а не из трёх универсальных. Каждый ход промпт главной модели несёт с собой таблицу рекомендаций `[SWITCHMAN:POOLS]`, и работа раздаётся по ней. У режима исполнения три состояния: off / advice / enforce (enforce = модель вне пула просто отклоняется).
23
+
24
+ **3. Режим Agent Teams: от работы в одиночку — к своей команде.** По умолчанию выключен: сразу после установки это просто лёгкая диспетчеризация через subagent. На странице настроек два независимых переключателя:
25
+
26
+ - **Режим команды агентов** — при включении внедряет командный регламент (делегирование по умолчанию + многоуровневая проверка + дисциплина общей доски задач) и автоматически включает Agent Teams в DSH: главная модель может нанимать постоянных товарищей по команде (`spawn_teammate`), ставить им задачи на общей доске (`team_task_*`) и обмениваться с ними сообщениями (`send_message`). Когда заводить команду, решает чёткая дисциплина: параллельные независимые подзадачи, объёмная самодостаточная работа, уже высокий уровень воды в главном контексте, потребность разделить роли; разовая точечная разведка по-прежнему идёт через subagent. Заводская политика DSH — «пока пользователь прямо не попросил, команду не создавать»; здесь она перевёрнута в «когда нужно — создавай». Если выключить переключатель обратно, от командных пунктов не останется и следа, а инструменты команды из уже работающих сессий не изымаются.
27
+ - **Синхронизация белого списка моделей субагентов** — в DSH есть белый список авторизации «разрешить агентам выбирать модели для субагентов»: если маршрут выбран в пуле, но не авторизован, явное назначение его главной моделью будет отклонено (в командном режиме и таблица рекомендаций, и страница настроек помечают такие маршруты ⚠). Включите этот переключатель — и объединение шести пулов целиком запишется в белый список: настраивать дважды не нужно, switchman остаётся единственным источником истины, и путь dispatch через fork тоже охвачен. Белый список применяется по снимку «новая сессия»: синхронизация действует только на сессии, открытые после неё.
28
+
29
+ В шапке сессии — наглядная обратная связь: значок ⚡ «автономная команда», ◇ с фактической моделью текущей сессии; когда идёт автоматическая передача, появляется живая подсказка «идёт передача · резервная сессия / сжатие контекста / пробуждение продолжения».
30
+
31
+ **4. Языковые предпочтения: спросит один раз — запомнит навсегда.** Три выпадающих списка: язык ответов, комментариев в коде и документов; область действия — глобальная или по проекту (`.switchman/lang.json`). Настраивать не обязательно: при первом использовании спросят один раз — на языке интерфейса вашего DSH — и запомнят; дальше каждая сессия соблюдает выбор автоматически.
32
+
33
+ **5. Многоуровневая проверка: изменено — проверено.** Изменения больше 20 строк уходят тестировщику на проверку; изменения больше 300 строк или затрагивающие ядро / безопасность / согласованность данных — дополнительно независимому ревьюеру. Модель ревьюера подбирают, привязываясь к модели агента, написавшего этот diff, и стараются её обойти; если пул другого выхода не оставляет, в заключении прямо заявляется DOWNGRADED. Скажете «не использовать команду» — всё мгновенно вернётся к одиночной работе.
34
+
35
+ **6. `/vision`: картинки по зубам даже чисто текстовой модели.** Когда главная модель не читает изображения, DSH прямо на входе отклоняет сообщения с картинками. Прикрепите картинку и введите `/vision что не так на этой картинке` — изображение будет сведено к пути файла и отдано на чтение модели из мультимодального пула, а вывод вернётся в текущую сессию. Над полем ввода заранее подсказывают: «текущая модель не умеет читать изображения»; если прямая отправка картинки отклонена, она один раз автоматически переоформляется в `/vision` и уходит повторно — вручную ничего переписывать не нужно; если мультимодальный пул не настроен, команда откажется и подскажет, что настроить.
36
+
37
+ Всего одна модель? Всё равно стоит поставить — контроль уровня воды и многоуровневая проверка от числа моделей не зависят, и длинная сессия на одной модели выигрывает от них ничуть не меньше.
38
+
39
+ ## Встроенные навыки
40
+
41
+ - **db-query** — верификация MySQL / Redis только на чтение: выполнить SQL для сверки данных, проверить ключи кэша / TTL и согласованность между хранилищами; любую запись отклоняет. При первом использовании нужна инициализация (см. ниже).
42
+ - **git-commit-message** — генерирует выдержанный в конвенциях текст коммита: только текст, git за вас не трогает.
43
+ - **requirement-docs** — единая спецификация для анализа требований / PRD / проектных документов; результаты архивируются в `docs/requirements-and-design/`.
44
+
45
+ ## Быстрый старт
46
+
47
+ 1. **Установите** — попросите agent выполнить установку в любой сессии, или откройте веб-страницу управления плагинами:
48
+
49
+ ```
50
+ plugin_manager: install_bundle target=dsh-switchman
51
+ ```
52
+
53
+ или установите из локального checkout'а (режим link; после обновления нужно переустановить: `remove_bundle` + `install_bundle`):
54
+
55
+ ```
56
+ plugin_manager: install_bundle target=/path/to/dsh-switchman
57
+ ```
58
+
59
+ или установите из терминала командой `dsh` — профиль выбирайте по способу запуска:
60
+
61
+ ```bash
62
+ dsh plugin --profile web add dsh-switchman # Web GUI
63
+ dsh plugin --profile desktop add dsh-switchman # десктоп-приложение
64
+ ```
65
+
66
+ 2. **Перезапустите DSH** — полностью закройте приложение и откройте снова (перезагрузка страницы не считается) — только тогда таблица клиентских модулей распознает этот bundle.
67
+
68
+ 3. **Языковые предпочтения** — Настройки → dsh-switchman, или пункт «Диспетчерская Switchman» в боковой панели главной страницы. На первом экране сначала выбирается область действия: глобально (этот profile) или по проектам (`.switchman/lang.json` каждого проекта); затем тремя выпадающими списками задаются языки ответов / комментариев / документов, под каждым — строка состояния «сейчас: …». Пропустить не страшно: при первом использовании спросят один раз и запомнят (вопрос зададут на языке интерфейса DSH).
69
+
70
+ ![Языковые предпочтения: область действия и три языка](docs/assets/conf-language-en.png)
71
+
72
+ 4. **Настройте пулы диспетчеризации** — на каждой карточке пула отмечайте модели-кандидаты, сгруппированные по поставщикам; отметьте «ручной порядок» — и карточка превратится в нумерованный список приоритетов, порядок меняется кнопками ↑ ↓ ×, а рядом с каждым маршрутом можно зафиксировать reasoning effort (по умолчанию «следовать полосе», после фиксации в списке — ступени, которые эта модель реально поддерживает). Сводная строка сверху отражает прогресс в реальном времени, например: «пулов настроено: 6/6 · позиций в рейтинге: 2 · режим advice».
73
+
74
+ ![Пулы диспетчеризации: четыре пула — лёгкий / механический / основной / высокой сложности](docs/assets/conf-pool-1-en.png)
75
+
76
+ Мультимодальный пул и пул ревью — ниже; ещё ниже — **рейтинг по способностям** (объединение моделей, выбранных в шести пулах; номер в списке и есть место по способности, сильнейшие впереди, с возможной привязкой к ступеням S/A/B/C) и **режим исполнения** (advice / enforce).
77
+
78
+ ![Мультимодальный пул, пул ревью, рейтинг по способностям и режим исполнения](docs/assets/conf-pool-2-en.png)
79
+
80
+ 5. **Команда агентов** — оба переключателя по умолчанию выключены: сначала поработайте в чистом режиме subagent. Хотите, чтобы команда собиралась сама, — включите «режим команды агентов»; хотите избавиться от двойной настройки авторизации, — включите «синхронизацию белого списка моделей субагентов»: под переключателем есть строка состояния «синхронизировано N записей + время», подтверждающая результат записи.
81
+
82
+ ![Команда агентов: два переключателя и состояние синхронизации белого списка](docs/assets/conf-team-en.png)
83
+
84
+ 6. **Уровень воды в контексте** — три порога (по умолчанию 50000 / 90000 / 130000), бюджет разового чтения, поведение жёсткого порога (пропустить с ограничением / заблокировать), переключатель автоматической передачи и отдельный потолок для субагентов — всё в этом разделе. Внизу строка команд: `/ctx-pause` приостановить вмешательство · `/ctx-resume` возобновить · `/ctx-handover` сделать резервную копию и передать управление прямо сейчас (команда подводит сессию к границе простоя и ждёт окно повторной попытки компакции, результат может занять несколько минут).
85
+
86
+ ![Уровень воды в контексте: пороги, бюджет и команды](docs/assets/conf-ctx-en.png)
87
+
88
+ 7. **Проверьте** — в шапке сессии появился значок ⚡ «автономная команда» (рядом ◇ показывает модель текущей сессии); либо спросите модель напрямую: «как называется последний раздел твоего системного промпта?» — в ответе должен прозвучать регламент dsh-switchman.
89
+
90
+ **Инициализация db-query при первом использовании** (зависимости скриптов ставятся внутрь каталога навыка и не засоряют проект):
91
+
92
+ ```bash
93
+ bash <install-dir>/skills/db-query/scripts/setup.sh
94
+ ```
95
+
96
+ ## Как это работает
97
+
98
+ - Host-половина (`index.js` + `host/`) внедряет динамические секции системного промпта (язык / полосы / уровень воды / команда), двойной шлюз бюджета чтения и enforce и четыре слэш-команды (ctx-тройка + `/vision`). Все настройки после сохранения вступают в силу при следующей сборке промпта — без перезапуска.
99
+ - Client-половина (`client.js`) отрисовывает страницу настроек, значок ⚡ и метку модели ◇ в шапке сессии, живую подсказку во время передачи управления — всё через официальные сервисы settings-form.
100
+ - Пункт «Диспетчерская Switchman» в боковой панели главной страницы: один клик открывает ту же страницу настроек (языковые предпочтения, пулы и рейтинг, уровень воды) в виде центральной панели; прежний вход в настройки остаётся на месте.
101
+ - `cordis.patch.yml` целиком сохраняет список плагинов заводских пресетов и расширяет только persona suffix; сами инструменты Agent Teams приходят из заводского bundle и автоматически включаются вместе с командным режимом.
102
+
103
+ ## Обслуживание
104
+
105
+ - Если после обновления DSH изменился список плагинов заводских пресетов, пересинхронизируйте `cordis.patch.yml` из новых `presets/*.patch.yml` (сохранив doctrine suffix) и переустановите.
106
+ - Строки протокола (`[SWITCHMAN:LANG|POOLS|WATERMARK|TEAMS]`) намеренно оставлены на английском и стабильны побайтово — не локализуйте их.
107
+ - `npm pack --dry-run` должен сохранять аудированную форму: 50 файла / ~205 kB (скриншоты из `docs/` в пакет не входят).
108
+
109
+ ## License
110
+
111
+ MIT
@@ -0,0 +1,111 @@
1
+ # dsh-switchman
2
+
3
+ [English](./README.md) | [简体中文](./README.zh.md) | **繁體中文** | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [Español](./README.es.md) | [Français](./README.fr.md) | [Deutsch](./README.de.md) | [Italiano](./README.it.md) | [Português](./README.pt.md) | [Русский](./README.ru.md)
4
+
5
+ > **switchman 家族**,同一作者、同一套調度理念:[opencode-switchman](https://github.com/mrzturn/opencode-switchman)(OpenCode 原版)· [zcode-switchman](https://github.com/mrzturn/zcode-switchman)(ZCode 移植)· **dsh-switchman**(本倉庫,DeepSeek Harness 版)。
6
+
7
+ ![dsh-switchman — 上下文水位驅動轉轍,把任務丟進對的車道](docs/assets/hero.svg)
8
+
9
+ > 上下文裝上水錶,任務自己找車道。
10
+
11
+ ## 為什麼需要它
12
+
13
+ 用 DSH 做事,時間一長會撞上兩件事:
14
+
15
+ 1. **會話越聊越重。** 上下文被歷史撐到幾十萬 token,模型開始忘事、變慢、變貴,最後只能手動 /compact,一壓又丟細節。
16
+ 2. **主力模型什麼都自己幹。** 查個檔案、跑個測試、對個資料都是它在啃——又慢又燒錢,其中大半其實該交給便宜模型。
17
+
18
+ dsh-switchman 是一個 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)外掛。裝上之後,主模型從「什麼都自己幹」變成調度員:量水位、選車道、派任務、盯驗收。它不是一個新模型,是一套掛在 DSH 上的調度規程加一個設定介面。具體做六件事:
19
+
20
+ **1. 上下文水位:長會話不撐爆。** 每輪即時統計會話 token,三條水位線逐級加碼:50k(soft,可調)提醒「該委派了」;90k(hard)收緊單次讀取檔案的預算、引導收尾;130k(force)自動交接——fork 一份會話留底、壓縮上下文、喚醒續跑,任務不斷線。交接那一刻還在跑的背景子智能體也不會丟:id、任務描述、報告路徑都寫進交接文件,續跑的會話知道去哪收報告,而不是重複派活。派出去的每個子智能體自帶獨立硬頂,到頂寫完 HANDOFF 摘要退場。
21
+
22
+ **2. 六個派發池:什麼活配什麼模型。** 輕量池(economy,批次小活)、機械池(mechanical,模板化改寫)、主力池(main,日常編碼)、高難池(hard,高難推理與大規模重構)、多模態池(vision,看圖)、複審池(review,獨立驗證)。設定頁裡勾候選、排優先順序(可標 S/A/B/C 檔)、給每條路線單獨釘思考強度——檔位下拉來自該模型真實支援的級別,不是通用三檔。主模型每輪提示詞裡都帶著一張 `[SWITCHMAN:POOLS]` 推薦表,照表派活。執行模式三態:關閉 / 建議 / 強制(強制 = 池外模型直接拒絕)。
23
+
24
+ **3. Agent Teams 模式:從單打獨鬥到帶團隊。** 預設關閉,裝完就是輕量的 subagent 派發。設定頁兩個獨立開關:
25
+
26
+ - **智能體團隊模式**——打開後注入團隊規程(預設委派 + 分級驗證 + 共享任務板紀律),並自動啟用 DSH 的 Agent Teams:主模型可以拉常駐隊友(`spawn_teammate`)、往共享任務板派活(`team_task_*`)、和隊友互傳訊息(`send_message`)。什麼時候建團隊有明確紀律:可並行的獨立子任務、量大且自包含的活、主上下文水位已高、需要角色分離;一次性的單點調查仍走 subagent。DSH 出廠策略是「使用者不點名就不建團隊」,這裡反轉成「該用就用」。再關掉開關,團隊條款零殘留,也不會撤走正在執行的會話裡的團隊工具。
27
+ - **同步子智能體模型白名單**——DSH 有張「允許 Agent 為子智能體選擇模型」的授權白名單:池裡選了但沒授權的路線,主模型點名派發會被拒(團隊模式下,推薦表和設定頁會給這些路線標 ⚠)。打開這個開關,六個池的聯集整體寫入那張白名單——不用兩邊重複設定,switchman 是唯一事實來源,fork 派發路徑也一併納入。白名單按「新增會話」快照生效,同步只對之後新開的會話起作用。
28
+
29
+ 會話標頭有直觀回饋:⚡「自主團隊」徽章、◇ 目前會話實際模型;自動交接進行時會出現「交接進行中 · 備份會話 / 壓縮上下文 / 喚醒續接」的即時提示。
30
+
31
+ **4. 語言偏好:問一次,記一輩子。** 回覆、程式碼註解、文件三種語言各一個下拉選單,作用域可選全域或按專案(`.switchman/lang.json`)。不設也行——首次用到時用你 DSH 介面的語言問一次,記住後每個會話自動遵守。
32
+
33
+ **5. 分級驗證:改完必查。** 超過 20 行的改動交 tester 驗證;超過 300 行、或動了核心 / 安全 / 資料一致性邏輯,再交一個 reviewer 獨立複審。複審模型錨定「寫出這份 diff 的智能體」所用的模型來選,儘量避開;池裡實在避不開時,會在結論裡宣告 DOWNGRADED。你說一句「不要用團隊」,它立刻退回單打獨鬥。
34
+
35
+ **6. `/vision`:純文字模型也能處理圖。** 主力模型讀不了圖時,DSH 會在入口直接拒絕帶圖訊息。貼上圖、輸入 `/vision 這張圖哪裡錯了`,圖片會被解析成檔案路徑交給多模態池的模型去讀,結論回到目前會話。輸入框上方會提前提示「目前模型不支援讀圖」;直接傳圖被拒時,自動改寫成 `/vision` 重送一次,不用手動重來;多模態池沒設定時命令會拒絕並給出設定指引。
36
+
37
+ 只有一個模型?也值得裝——水位控制和分級驗證與模型數量無關,單模型長會話同樣受益。
38
+
39
+ ## 隨附技能
40
+
41
+ - **db-query**——MySQL / Redis 唯讀核驗:跑 SQL 核對資料、查快取鍵 / TTL、跨庫一致性檢查,拒絕一切寫入。首次使用需初始化(見下)。
42
+ - **git-commit-message**——產生符合規範的 commit 文案,只出文字,從不替你 git。
43
+ - **requirement-docs**——需求分析 / PRD / 設計文件的統一規範,產出歸檔到 `docs/requirements-and-design/`。
44
+
45
+ ## 快速上手
46
+
47
+ 1. **安裝**——任意會話裡讓 agent 執行,或在 Web 外掛管理頁:
48
+
49
+ ```
50
+ plugin_manager: install_bundle target=dsh-switchman
51
+ ```
52
+
53
+ 或從本地檢出安裝(link 方式;更新後需 `remove_bundle` + `install_bundle` 重裝):
54
+
55
+ ```
56
+ plugin_manager: install_bundle target=/path/to/dsh-switchman
57
+ ```
58
+
59
+ 或在終端機用 `dsh` 命令安裝——依執行方式選擇對應的 profile:
60
+
61
+ ```bash
62
+ dsh plugin --profile web add dsh-switchman # Web GUI
63
+ dsh plugin --profile desktop add dsh-switchman # 桌面應用
64
+ ```
65
+
66
+ 2. **重啟 DSH**——完全結束應用程式再重新開啟(重新整理頁面不算),用戶端模組表才能識別本 bundle。
67
+
68
+ 3. **語言偏好**——設定 → dsh-switchman,或首頁側邊欄的「Switchman 調度中心」。第一屏先選作用域:全域(本 profile)或按專案(各專案 `.switchman/lang.json`);再用三個下拉選單分別設定回覆 / 註解 / 文件的語言,每項下方有「目前:…」狀態行。跳過也沒關係,首次使用會問一次並記住(提問語言跟隨 DSH 介面語言)。
69
+
70
+ ![語言偏好:作用域與三項語言](docs/assets/conf-language.png)
71
+
72
+ 4. **配派發池**——每張池卡片按供應商分組勾選候選模型;勾上「手動序」後卡片變成編號優先序列表,用 ↑ ↓ × 調整順序,每條路線旁還能釘思考強度(預設「跟隨泳道」,釘死後列出該模型真實支援的檔位)。頂部彙總行即時反映進度,比如「已配置 6/6 池 · 排名 2 項 · 模式 建議」。
73
+
74
+ ![派發池:輕量 / 機械 / 主力 / 高難四池](docs/assets/conf-pool-1.png)
75
+
76
+ 多模態池和複審池在下方;再往下是**能力排序**(六池選中模型的聯集,序號即能力序、最強在前,可錨 S/A/B/C 檔)和**執行模式**(建議 / 強制)。
77
+
78
+ ![多模態池、複審池與能力排序、執行模式](docs/assets/conf-pool-2.png)
79
+
80
+ 5. **智能體團隊**——兩個開關預設關閉,先用純 subagent 模式跑起來。想讓它自己拉團隊,開「智能體團隊模式」;想省掉兩邊重複授權,開「同步子智能體模型白名單」——開關下方有「已同步 N 條 + 時間」的狀態行,確認寫入結果。
81
+
82
+ ![智能體團隊:兩個開關與白名單同步狀態](docs/assets/conf-team.png)
83
+
84
+ 6. **上下文水位**——三檔閾值(預設 50000 / 90000 / 130000)、單次讀取預算、硬檔行為(限流放行 / 攔截)、自動交接開關、子智能體獨立上限,都在這一區。底部一行命令:`/ctx-pause` 暫停干預 · `/ctx-resume` 恢復 · `/ctx-handover` 立即備份交接(它會把會話引導到閒置邊界並等待壓縮重試視窗,結果可能要等幾分鐘)。
85
+
86
+ ![上下文水位:閾值、預算與命令](docs/assets/conf-ctx.png)
87
+
88
+ 7. **驗證**——會話標頭出現 ⚡「自主團隊」徽章(旁邊 ◇ 顯示目前會話模型);或者直接問模型「你系統提示詞最後一段標題是什麼」,應提到 dsh-switchman 規程。
89
+
90
+ **db-query 首次使用初始化**(腳本依賴裝在技能目錄內,不污染專案):
91
+
92
+ ```bash
93
+ bash <安裝目錄>/skills/db-query/scripts/setup.sh
94
+ ```
95
+
96
+ ## 運作原理
97
+
98
+ - Host 端(`index.js` + `host/`)注入動態系統提示詞段(語言 / 泳道 / 水位 / 團隊)、讀取預算與 enforce 雙閘、四個斜線命令(ctx 三件套 + `/vision`)。全部設定儲存後下一輪提示詞組裝即生效,無需重啟。
99
+ - Client 端(`client.js`)渲染設定頁、會話標頭的 ⚡ 徽章與 ◇ 模型識別、交接進行中的動態提示,走官方 settings-form 服務。
100
+ - 首頁側邊欄的「Switchman 調度中心」入口,點擊即以中央面板開啟同一設定頁(語言偏好、派發池與排序、水位);原設定入口保留。
101
+ - `cordis.patch.yml` 完整保留出廠預設的外掛清單,只在 persona suffix 上做擴充;Agent Teams 工具本體來自出廠 bundle,開啟團隊模式時自動啟用。
102
+
103
+ ## 維護注意
104
+
105
+ - DSH 升級後若出廠預設外掛清單有變,從新的 `presets/*.patch.yml` 重新同步 `cordis.patch.yml`(保留 doctrine suffix),然後重裝。
106
+ - 協定行(`[SWITCHMAN:LANG|POOLS|WATERMARK|TEAMS]`)刻意保持英文且位元組穩定——不要在地化。
107
+ - `npm pack --dry-run` 應保持審計過的 50 個檔案 / ~205 kB 形態(`docs/` 截圖不會進包)。
108
+
109
+ ## License
110
+
111
+ MIT
package/README.zh.md CHANGED
@@ -1,30 +1,46 @@
1
1
  # dsh-switchman
2
2
 
3
- [English](./README.md) | 简体中文
3
+ [English](./README.md) | **简体中文** | [繁體中文](./README.zh-TW.md) | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [Español](./README.es.md) | [Français](./README.fr.md) | [Deutsch](./README.de.md) | [Italiano](./README.it.md) | [Português](./README.pt.md) | [Русский](./README.ru.md)
4
4
 
5
5
  > **switchman 家族**,同一作者、同一套调度理念:[opencode-switchman](https://github.com/mrzturn/opencode-switchman)(OpenCode 原版)· [zcode-switchman](https://github.com/mrzturn/zcode-switchman)(ZCode 移植)· **dsh-switchman**(本仓库,DeepSeek Harness 版)。
6
6
 
7
- ![dsh-switchman — 上下文水位驱动扳道岔,把任务丢进对的泳道](docs/assets/hero.svg)
7
+ ![dsh-switchman — 上下文水位驱动扳道岔,把任务丢进对的车道](docs/assets/hero.svg)
8
8
 
9
9
  > 上下文装上水表,任务自己找车道。
10
10
 
11
- 一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)插件。装上之后,主模型从「什么都自己干」变成调度员:量水位、选泳道、派任务、盯验收。它做四件事:
11
+ ## 为什么需要它
12
12
 
13
- **1. 上下文水位控制。** 每轮实时计量会话 token。soft 档(默认 50k)建议委派,hard 档(90k)收紧每轮读取预算并引导收尾,force 档(130k)自动备份会话并移交压缩。长会话跑一整天,上下文也不会被自己的历史撑爆。派出去的每个子智能体带独立硬顶,超了就写完 HANDOFF 摘要退场。
13
+ 用 DSH 干活,时间一长会撞上两件事:
14
14
 
15
- **2. 六泳道派发。** economy / mechanical / main / hard / vision / review 六条认知泳道:设置页里勾选候选模型、按最强优先排序(可锚 S/A/B/C 档),每条路线还能单独钉死思考强度——下拉档位直接来自该模型真实支持的列表,不是通用的三档。`[SWITCHMAN:POOLS]` 推荐表随提示词下发给主模型照着派活;`enforce` 模式下池外模型直接拒绝。
15
+ 1. **会话越聊越重。** 上下文被历史撑到几十万 token,模型开始忘事、变慢、变贵,最后只能手动 /compact,一压又丢细节。
16
+ 2. **主力模型什么都自己干。** 查个文件、跑个测试、对个数据都是它在啃——又慢又烧钱,其中大半其实该交给便宜模型。
16
17
 
17
- **3. 语言偏好。** 回复、代码注释、文档三种语言各一个下拉。未设置时首次使用问一次、永久记住,之后每个会话自动遵守。
18
+ dsh-switchman 是一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)插件。装上之后,主模型从「什么都自己干」变成调度员:量水位、选车道、派任务、盯验收。它不是一个新模型,是一套挂在 DSH 上的调度规程加一个配置界面。具体做六件事:
18
19
 
19
- **4. 默认委派规程。** 替换 DSH 出厂的保守团队策略(「仅当用户明确要求才建团队」):小事亲做(读 <200 行、改 <50 行),大活默认委派;改完必验——超过 20 行交 tester,超过 300 行或动了核心逻辑交 reviewer。你说「不要用团队」,它立刻让位。
20
+ **1. 上下文水位:长会话不撑爆。** 每轮实时统计会话 token,三条水位线逐级加码:50k(soft,可调)提醒「该委派了」;90k(hard)收紧单次读文件的预算、引导收尾;130k(force)自动交接——fork 一份会话留底、压缩上下文、唤醒续跑,任务不断线。交接那一刻还在跑的后台子智能体也不会丢:id、任务描述、报告路径都写进交接文档,续跑的会话知道去哪收报告,而不是重复派活。派出去的每个子智能体自带独立硬顶,到顶写完 HANDOFF 摘要退场。
20
21
 
21
- 只有一个模型?也值得装——水位控制和默认委派与多模型无关,单模型长会话同样受益。
22
+ **2. 六个派发池:什么活配什么模型。** 轻量池(economy,批量小活)、机械池(mechanical,模板化改写)、主力池(main,日常编码)、高难池(hard,高难推理与大规模重构)、多模态池(vision,看图)、复审池(review,独立验证)。设置页里勾候选、排优先级(可标 S/A/B/C 档)、给每条路线单独钉思考强度——档位下拉来自该模型真实支持的级别,不是通用三档。主模型每轮提示词里都带着一张 `[SWITCHMAN:POOLS]` 推荐表,照表派活。执行模式三态:关闭 / 建议 / 强制(强制 = 池外模型直接拒绝)。
23
+
24
+ **3. Agent Teams 模式:从单干到带团队。** 默认关闭,装完就是轻量的 subagent 派发。设置页两个独立开关:
25
+
26
+ - **智能体团队模式**——打开后注入团队规程(默认委派 + 分级验证 + 共享任务板纪律),并自动启用 DSH 的 Agent Teams:主模型可以拉常驻队友(`spawn_teammate`)、往共享任务板派活(`team_task_*`)、和队友互发消息(`send_message`)。什么时候建团队有明确纪律:可并行的独立子任务、量大且自包含的活、主上下文水位已高、需要角色分离;一次性的单点调查仍走 subagent。DSH 出厂策略是「用户不点名就不建团队」,这里反转成「该用就用」。再关掉开关,团队条款零残留,也不会撤走正在运行的会话里的团队工具。
27
+ - **同步子智能体模型白名单**——DSH 有张「允许 Agent 为子智能体选择模型」的授权白名单:池里选了但没授权的路线,主模型点名派发会被拒(团队模式下,推荐表和设置页会给这些路线标 ⚠)。打开这个开关,六个池的并集整体写入那张白名单——不用两边重复配置,switchman 是唯一事实源,fork 派发路径也一并纳入。白名单按「新建会话」快照生效,同步只对之后新开的会话起作用。
28
+
29
+ 会话头部有直观反馈:⚡「自主团队」徽标、◇ 当前会话实际模型;自动交接进行时会出现「交接进行中 · 备份会话 / 压缩上下文 / 唤醒续接」的实时提示。
30
+
31
+ **4. 语言偏好:问一次,记一辈子。** 回复、代码注释、文档三种语言各一个下拉,作用域可选全局或按项目(`.switchman/lang.json`)。不设也行——首次用到时用你 DSH 界面的语言问一次,记住后每个会话自动遵守。
32
+
33
+ **5. 分级验证:改完必查。** 超过 20 行的改动交 tester 验证;超过 300 行、或动了核心 / 安全 / 数据一致性逻辑,再交一个 reviewer 独立复审。复审模型锚定「写出这份 diff 的智能体」所用的模型来选,尽量避开;池里实在避不开时,会在结论里声明 DOWNGRADED。你说一句「不要用团队」,它立刻退回单干。
34
+
35
+ **6. `/vision`:纯文本模型也能处理图。** 主力模型读不了图时,DSH 会在入口直接拒掉带图消息。贴上图、输入 `/vision 这张图错在哪`,图片会被解析成文件路径交给多模态池的模型去读,结论回到当前会话。输入框上方会提前提示「当前模型不支持读图」;直接发图被拒时,自动改写成 `/vision` 重发一次,不用手动重来;多模态池没配时命令会拒绝并给出配置指引。
36
+
37
+ 只有一个模型?也值得装——水位控制和分级验证与模型数量无关,单模型长会话同样受益。
22
38
 
23
39
  ## 捆绑技能
24
40
 
25
- - **db-query** — MySQL / Redis 只读核验:跑 SQL 对数、查缓存键 / TTL、跨库一致性检查,拒绝一切写入。首次使用需初始化(见下)。
26
- - **git-commit-message** — 生成规范的 commit 文案,只出文本,从不替你 git。
27
- - **requirement-docs** — 需求分析 / PRD / 设计文档的统一规范,产出归档到 `docs/requirements-and-design/`。
41
+ - **db-query**——MySQL / Redis 只读核验:跑 SQL 对数、查缓存键 / TTL、跨库一致性检查,拒绝一切写入。首次使用需初始化(见下)。
42
+ - **git-commit-message**——生成规范的 commit 文案,只出文本,从不替你 git。
43
+ - **requirement-docs**——需求分析 / PRD / 设计文档的统一规范,产出归档到 `docs/requirements-and-design/`。
28
44
 
29
45
  ## 快速上手
30
46
 
@@ -40,21 +56,36 @@
40
56
  plugin_manager: install_bundle target=/path/to/dsh-switchman
41
57
  ```
42
58
 
59
+ 或在终端用 `dsh` 命令安装——按运行方式选对应的 profile:
60
+
61
+ ```bash
62
+ dsh plugin --profile web add dsh-switchman # Web GUI
63
+ dsh plugin --profile desktop add dsh-switchman # 桌面应用
64
+ ```
65
+
43
66
  2. **重启 DSH**——完全退出应用再打开(刷新页面不算),客户端模块表才能识别本 bundle。
44
67
 
45
- 3. **打开设置页**——设置 → dsh-switchman。第一屏是语言偏好:三个下拉对应回复 / 注释 / 文档,每项下方有「当前:…」状态行;不设置也没关系,首次使用会问一次并记住。
68
+ 3. **语言偏好**——设置 → dsh-switchman,或首页侧边栏的「Switchman 调度中心」。第一屏先选作用域:全局(本 profile)或按项目(各项目 `.switchman/lang.json`);再用三个下拉分别定回复 / 注释 / 文档的语言,每项下方有「当前:…」状态行。跳过也没关系,首次使用会问一次并记住(提问语言跟随 DSH 界面语言)。
69
+
70
+ ![语言偏好:作用域与三项语言](docs/assets/conf-language.png)
71
+
72
+ 4. **配派发池**——每张池卡片按供应商分组勾选候选模型;勾上「手动序」后卡片变成编号优先序列表,用 ↑ ↓ × 调顺序,每条路线旁还能钉思考强度(默认「跟随泳道」,钉死后列出该模型真实支持的档位)。顶部汇总行实时反映进度,比如「已配置 6/6 池 · 排名 2 项 · 模式 建议」。
73
+
74
+ ![派发池:轻量 / 机械 / 主力 / 高难四池](docs/assets/conf-pool-1.png)
75
+
76
+ 多模态池和复审池在下方;再往下是**能力排序**(六池选中模型的并集,序号即能力序、最强在前,可锚 S/A/B/C 档)和**执行模式**(建议 / 强制)。
46
77
 
47
- ![设置页与语言偏好](docs/assets/conf-demo1.png)
78
+ ![多模态池、复审池与能力排序、执行模式](docs/assets/conf-pool-2.png)
48
79
 
49
- 4. **配六个池**——每张池卡片按供应商分组勾选候选模型;勾上「手动序」后卡片变成编号优先序列表,用 ↑ ↓ × 调顺序。每条选中路线旁的思考强度下拉默认「跟随泳道」,也可以钉死成该模型真实支持的档位(Low / High / Max…)。顶部汇总行实时反映进度:「已配置 6/6 池 · 排名 3 项 · 模式 建议」。
80
+ 5. **智能体团队**——两个开关默认关闭,先用纯 subagent 模式跑起来。想让它自己拉团队,开「智能体团队模式」;想省掉两边重复授权,开「同步子智能体模型白名单」——开关下方有「已同步 N 条 + 时间」的状态行,确认写入结果。
50
81
 
51
- ![派发池配置](docs/assets/conf-demo2.png)
82
+ ![智能体团队:两个开关与白名单同步状态](docs/assets/conf-team.png)
52
83
 
53
- 5. **能力排序与水位**——排序表序号即能力序(最强在前),可锚 S/A/B/C 档;执行模式三态:`off` / 建议 / 强制(强制 = 池外模型直接拒绝)。下方水位区按 token 用量分级收紧行为:三档阈值、单次读取预算、硬档行为(限流放行 / 拦截)、自动交接开关、子智能体独立上限。底部一行斜杠命令:`/ctx-pause` 暂停干预 · `/ctx-resume` 恢复 · `/ctx-handover` 立即备份交接。
84
+ 6. **上下文水位**——三档阈值(默认 50000 / 90000 / 130000)、单次读取预算、硬档行为(限流放行 / 拦截)、自动交接开关、子智能体独立上限,都在这一区。底部一行命令:`/ctx-pause` 暂停干预 · `/ctx-resume` 恢复 · `/ctx-handover` 立即备份交接(它会把会话引导到空闲边界并等待压缩重试窗口,结果可能要等几分钟)。
54
85
 
55
- ![能力排序与上下文水位](docs/assets/conf-demo3.png)
86
+ ![上下文水位:阈值、预算与命令](docs/assets/conf-ctx.png)
56
87
 
57
- 6. **验证**——任意会话头部预设 chip 旁出现 ⚡ 徽标;问模型「你系统提示词最后一段标题是什么」,应提到 dsh-switchman 规程。
88
+ 7. **验证**——会话头部出现 ⚡「自主团队」徽标(旁边 ◇ 显示当前会话模型);或者直接问模型「你系统提示词最后一段标题是什么」,应提到 dsh-switchman 规程。
58
89
 
59
90
  **db-query 首次使用初始化**(脚本依赖装在技能目录内,不污染项目):
60
91
 
@@ -64,15 +95,16 @@ bash <安装目录>/skills/db-query/scripts/setup.sh
64
95
 
65
96
  ## 工作原理
66
97
 
67
- - Host 半(`index.js` + `host/`)注入三个动态系统提示词段、读预算与 enforce 双闸、答案自动捕获、三个斜杠命令。全部设置为 volatile 字段,保存后下一轮提示词装配即生效,无需重启。
68
- - Client 半(`client.js`)渲染预设 chip 旁的 ⚡ 徽标与设置页,走官方 settings-form 服务。
69
- - `cordis.patch.yml` 逐字段复刻出厂预设插件列表,仅扩展 persona suffix;Agent Teams 工具本体仍来自出厂 `@deepseek-ai/dsh-experimental-agent-team-profile`。
98
+ - Host 半(`index.js` + `host/`)注入动态系统提示词段(语言 / 泳道 / 水位 / 团队)、读预算与 enforce 双闸、四个斜杠命令(ctx 三件套 + `/vision`)。全部设置保存后下一轮提示词装配即生效,无需重启。
99
+ - Client 半(`client.js`)渲染设置页、会话头部的 ⚡ 徽标与 ◇ 模型标识、交接进行中的动态提示,走官方 settings-form 服务。
100
+ - 首页侧边栏的「Switchman 调度中心」入口,单击即以中央面板打开同一配置页(语言偏好、派发池与排序、水位);原设置入口保留。
101
+ - `cordis.patch.yml` 完整保留出厂预设的插件列表,只在 persona suffix 上做扩展;Agent Teams 工具本体来自出厂 bundle,开启团队模式时自动启用。
70
102
 
71
103
  ## 维护注意
72
104
 
73
105
  - DSH 升级后若出厂预设插件列表有变,从新的 `presets/*.patch.yml` 重新同步 `cordis.patch.yml`(保留 doctrine suffix),然后重装。
74
- - 协议行(`[SWITCHMAN:LANG|POOLS|WATERMARK]`)刻意保持英文且字节稳定——不要本地化。
75
- - `npm pack --dry-run` 应保持审计过的 34 文件 / ~111 kB 形态(`docs/` 截图不进包)。
106
+ - 协议行(`[SWITCHMAN:LANG|POOLS|WATERMARK|TEAMS]`)刻意保持英文且字节稳定——不要本地化。
107
+ - `npm pack --dry-run` 应保持审计过的 50 文件 / ~205 kB 形态(`docs/` 截图不进包)。
76
108
 
77
109
  ## License
78
110