dsh-switchman 1.11.3 → 1.11.4
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.md +1 -1
- package/README.zh.md +1 -1
- package/client.js +41 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ Worth installing even with a single model — watermark control and tiered verif
|
|
|
72
72
|
|
|
73
73
|
- **Interface** — the plugin's own UI language. The dropdown in the shot sits at English — a live preview of switching; the shipped default is Auto (follows the DSH app language). Picking a language flips the whole page on the spot and is remembered after save; switch back to Auto anytime.
|
|
74
74
|
- **Languages** — the languages of agent output. The scope in the shot is "Global (this profile)" (per-project works too, each reading `.switchman/lang.json`); the reply / code comments / documents dropdowns in the shot all sit at English, each displayed as "endonym (tag)" — e.g. "English (en)" — with a "current: …" status line beneath each. Leaving all three unset is fine too: asked once on first use, remembered from then on.
|
|
75
|
-
- **Dispatch pools** — six cards in two rows of three: economy, mechanical, main on top; hard, vision, review below. Tick candidate models grouped by provider; tick "manual order" and a card becomes a numbered priority list reorderable with
|
|
75
|
+
- **Dispatch pools** — six cards in two rows of three: economy, mechanical, main on top; hard, vision, review below. Tick candidate models grouped by provider; tick "manual order" and a card becomes a numbered priority list reorderable with ⤒ (Move to top), ↑, ↓, ×; every route can pin a thinking effort (default "follow lane"). The summary line at the top updates live — in the shot: "4/6 pools configured · 2 ranked · mode advice".
|
|
76
76
|
- **Capability ranking + enforcement mode** — the union of selected models across the six pools, ranked by capability, strongest first (the shot anchors glm-5.3 at S and glm-5.3-flash at A), reorderable and removable; enforcement mode advice / force (force = out-of-pool models rejected outright).
|
|
77
77
|
- **Agent teams** — the two toggles for team mode and whitelist sync, both off by default; in the shot they're on, with a sync status line beneath the toggle.
|
|
78
78
|
- **Context watermark** — the three thresholds (80000 / 120000 / 150000 in the shot), the single-read budget (3000), hard-tier behavior (throttle-pass / block), the auto-handover toggle, and subagent independent caps all live here. Bottom command row: `/ctx-pause` pause intervention · `/ctx-resume` resume · `/ctx-handover` write the handover doc and compact now (it steers the session to an idle boundary before compacting — the result can take a few minutes).
|
package/README.zh.md
CHANGED
|
@@ -72,7 +72,7 @@ dsh-switchman 是一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepse
|
|
|
72
72
|
|
|
73
73
|
- **界面**——插件自己的界面语言。图中「自动」即跟随 DSH 应用语言;选具体语言则当场整页切换,保存后记住,随时切回「自动」。
|
|
74
74
|
- **语言**——智能体产出物的语言。作用域图中为「全局(本 profile)」(也可按项目,各自读 `.switchman/lang.json`);回复 / 代码注释 / 文档三个下拉图中都定在简体中文,每项下方有「当前:…」状态行。全不设也行,首次用到问一次、记住即用。
|
|
75
|
-
- **派发池**——六张卡片两行三列:上排轻量、机械、主力,下排高难、多模态、复审。卡片按供应商分组勾候选模型;勾上「手动序」变成编号优先列表,用
|
|
75
|
+
- **派发池**——六张卡片两行三列:上排轻量、机械、主力,下排高难、多模态、复审。卡片按供应商分组勾候选模型;勾上「手动序」变成编号优先列表,用 ⤒(一键登顶)、↑、↓、× 调顺序;每条路线可钉思考强度(默认「跟随泳道」)。顶部汇总行实时更新,图中即「已配置 4/6 池 · 排名 2 项 · 模式 建议」。
|
|
76
76
|
- **能力排序 + 执行模式**——六池选中模型的并集按能力排序、最强在前(图中 glm-5.3 锚 S 档、glm-5.3-flash 锚 A 档),可调序、可删减;执行模式建议 / 强制(强制 = 池外模型直接拒绝)。
|
|
77
77
|
- **智能体团队**——团队模式与白名单同步两个开关,默认全关;图中为开启状态,开关下方有同步状态行。
|
|
78
78
|
- **上下文水位**——三档阈值(图中 80000 / 120000 / 150000)、单次读取预算(3000)、硬档行为(限流放行 / 拦截)、自动交接开关、子智能体独立上限,都在这区。底部一行命令:`/ctx-pause` 暂停干预 · `/ctx-resume` 恢复 · `/ctx-handover` 立即交接(它会把会话引导到空闲边界再压缩,结果可能要等几分钟)。
|
package/client.js
CHANGED
|
@@ -845,6 +845,7 @@ window.__ModuleLoader__.load({
|
|
|
845
845
|
'开启后按列表顺序派发(首个即首选);未开启按能力排序自动排。',
|
|
846
846
|
poolManualSelected: '已选 · 派发优先序',
|
|
847
847
|
poolManualAddable: '可添加',
|
|
848
|
+
poolMoveTop: '登顶',
|
|
848
849
|
poolMoveUp: '上移',
|
|
849
850
|
poolMoveDown: '下移',
|
|
850
851
|
poolRemoveOne: '移除',
|
|
@@ -1113,6 +1114,7 @@ window.__ModuleLoader__.load({
|
|
|
1113
1114
|
'When on, dispatch follows the listed order (head = first choice); when off, lanes are ordered by capability automatically.',
|
|
1114
1115
|
poolManualSelected: 'Selected · dispatch priority',
|
|
1115
1116
|
poolManualAddable: 'Add models',
|
|
1117
|
+
poolMoveTop: 'Move to top',
|
|
1116
1118
|
poolMoveUp: 'Move up',
|
|
1117
1119
|
poolMoveDown: 'Move down',
|
|
1118
1120
|
poolRemoveOne: 'Remove',
|
|
@@ -1397,6 +1399,7 @@ window.__ModuleLoader__.load({
|
|
|
1397
1399
|
poolManualHelp: '開啟後按清單順序派發(首個即首選);未開啟按能力排序自動排。',
|
|
1398
1400
|
poolManualSelected: '已選 · 派發優先序',
|
|
1399
1401
|
poolManualAddable: '可新增',
|
|
1402
|
+
poolMoveTop: '登頂',
|
|
1400
1403
|
poolMoveUp: '上移',
|
|
1401
1404
|
poolMoveDown: '下移',
|
|
1402
1405
|
poolRemoveOne: '移除',
|
|
@@ -1644,6 +1647,7 @@ window.__ModuleLoader__.load({
|
|
|
1644
1647
|
poolManualHelp: 'オンにするとリストの順序でディスパッチします(先頭=第一候補)。オフなら能力順で自動的に並びます。',
|
|
1645
1648
|
poolManualSelected: '選択済み · ディスパッチ優先順',
|
|
1646
1649
|
poolManualAddable: 'モデルを追加',
|
|
1650
|
+
poolMoveTop: '先頭へ',
|
|
1647
1651
|
poolMoveUp: '上へ',
|
|
1648
1652
|
poolMoveDown: '下へ',
|
|
1649
1653
|
poolRemoveOne: '削除',
|
|
@@ -1875,6 +1879,7 @@ window.__ModuleLoader__.load({
|
|
|
1875
1879
|
poolManualHelp: '켜면 목록 순서대로 디스패치합니다(맨 앞이 제1순위). 끄면 능력 순으로 자동 정렬됩니다.',
|
|
1876
1880
|
poolManualSelected: '선택됨 · 디스패치 우선순위',
|
|
1877
1881
|
poolManualAddable: '모델 추가',
|
|
1882
|
+
poolMoveTop: '맨 위로',
|
|
1878
1883
|
poolMoveUp: '위로',
|
|
1879
1884
|
poolMoveDown: '아래로',
|
|
1880
1885
|
poolRemoveOne: '제거',
|
|
@@ -2105,6 +2110,7 @@ window.__ModuleLoader__.load({
|
|
|
2105
2110
|
poolManualHelp: 'Ein: Der Versand folgt der gelisteten Reihenfolge (oben = erste Wahl); aus: Lanes werden automatisch nach Fähigkeit sortiert.',
|
|
2106
2111
|
poolManualSelected: 'Ausgewählt · Dispatch-Priorität',
|
|
2107
2112
|
poolManualAddable: 'Modelle hinzufügen',
|
|
2113
|
+
poolMoveTop: 'Ganz nach oben',
|
|
2108
2114
|
poolMoveUp: 'Nach oben',
|
|
2109
2115
|
poolMoveDown: 'Nach unten',
|
|
2110
2116
|
poolRemoveOne: 'Entfernen',
|
|
@@ -2338,6 +2344,7 @@ window.__ModuleLoader__.load({
|
|
|
2338
2344
|
poolManualHelp: 'Activado, el despacho sigue el orden de la lista (el primero es la primera opción); desactivado, los carriles se ordenan automáticamente por capacidad.',
|
|
2339
2345
|
poolManualSelected: 'Seleccionados · prioridad de despacho',
|
|
2340
2346
|
poolManualAddable: 'Añadir modelos',
|
|
2347
|
+
poolMoveTop: 'Mover al principio',
|
|
2341
2348
|
poolMoveUp: 'Subir',
|
|
2342
2349
|
poolMoveDown: 'Bajar',
|
|
2343
2350
|
poolRemoveOne: 'Quitar',
|
|
@@ -2572,6 +2579,7 @@ window.__ModuleLoader__.load({
|
|
|
2572
2579
|
poolManualHelp: 'Activé, le dispatch suit l’ordre affiché (la tête = premier choix) ; désactivé, les couloirs sont ordonnés par capacité automatiquement.',
|
|
2573
2580
|
poolManualSelected: 'Sélectionnés · priorité de dispatch',
|
|
2574
2581
|
poolManualAddable: 'Ajouter des modèles',
|
|
2582
|
+
poolMoveTop: 'Placer en tête',
|
|
2575
2583
|
poolMoveUp: 'Monter',
|
|
2576
2584
|
poolMoveDown: 'Descendre',
|
|
2577
2585
|
poolRemoveOne: 'Retirer',
|
|
@@ -2806,6 +2814,7 @@ window.__ModuleLoader__.load({
|
|
|
2806
2814
|
poolManualHelp: 'Attivo, il dispatch segue l’ordine elencato (il primo della lista = prima scelta); spento, le corsie vengono ordinate per capacità automaticamente.',
|
|
2807
2815
|
poolManualSelected: 'Selezionati · priorità di dispatch',
|
|
2808
2816
|
poolManualAddable: 'Aggiungi modelli',
|
|
2817
|
+
poolMoveTop: 'Porta in cima',
|
|
2809
2818
|
poolMoveUp: 'Sposta su',
|
|
2810
2819
|
poolMoveDown: 'Sposta giù',
|
|
2811
2820
|
poolRemoveOne: 'Rimuovi',
|
|
@@ -3040,6 +3049,7 @@ window.__ModuleLoader__.load({
|
|
|
3040
3049
|
poolManualHelp: 'Ligado, o despacho segue a ordem listada (o primeiro = primeira escolha); desligado, as faixas são ordenadas por capacidade automaticamente.',
|
|
3041
3050
|
poolManualSelected: 'Selecionados · prioridade de despacho',
|
|
3042
3051
|
poolManualAddable: 'Adicionar modelos',
|
|
3052
|
+
poolMoveTop: 'Mover para o topo',
|
|
3043
3053
|
poolMoveUp: 'Mover para cima',
|
|
3044
3054
|
poolMoveDown: 'Mover para baixo',
|
|
3045
3055
|
poolRemoveOne: 'Remover',
|
|
@@ -3274,6 +3284,7 @@ window.__ModuleLoader__.load({
|
|
|
3274
3284
|
poolManualHelp: 'Включено — диспетчеризация идёт по списку (голова списка = первый выбор); выключено — полосы упорядочиваются по силе автоматически.',
|
|
3275
3285
|
poolManualSelected: 'Выбрано · приоритет диспетчеризации',
|
|
3276
3286
|
poolManualAddable: 'Добавить модели',
|
|
3287
|
+
poolMoveTop: 'В начало',
|
|
3277
3288
|
poolMoveUp: 'Выше',
|
|
3278
3289
|
poolMoveDown: 'Ниже',
|
|
3279
3290
|
poolRemoveOne: 'Убрать',
|
|
@@ -4613,6 +4624,7 @@ window.__ModuleLoader__.load({
|
|
|
4613
4624
|
onToggleManual,
|
|
4614
4625
|
onSetEffort,
|
|
4615
4626
|
onMove,
|
|
4627
|
+
onMoveTop,
|
|
4616
4628
|
onRemove,
|
|
4617
4629
|
onSelectAll,
|
|
4618
4630
|
onClear,
|
|
@@ -4774,6 +4786,20 @@ window.__ModuleLoader__.load({
|
|
|
4774
4786
|
h(
|
|
4775
4787
|
'div',
|
|
4776
4788
|
{ style: STYLE.rankActions },
|
|
4789
|
+
h(
|
|
4790
|
+
'button',
|
|
4791
|
+
{
|
|
4792
|
+
type: 'button',
|
|
4793
|
+
onClick: () => {
|
|
4794
|
+
onMoveTop(index);
|
|
4795
|
+
},
|
|
4796
|
+
disabled: !editable || index === 0,
|
|
4797
|
+
title: t('poolMoveTop'),
|
|
4798
|
+
'aria-label': t('poolMoveTop'),
|
|
4799
|
+
style: STYLE.iconButton,
|
|
4800
|
+
},
|
|
4801
|
+
'⤒',
|
|
4802
|
+
),
|
|
4777
4803
|
h(
|
|
4778
4804
|
'button',
|
|
4779
4805
|
{
|
|
@@ -5268,6 +5294,18 @@ window.__ModuleLoader__.load({
|
|
|
5268
5294
|
})));
|
|
5269
5295
|
}
|
|
5270
5296
|
|
|
5297
|
+
/** Manual order: move the route at index to the head of the
|
|
5298
|
+
* pool in one step (boundary-guarded: a no-op when already first). */
|
|
5299
|
+
function movePoolRouteToTop(field, index) {
|
|
5300
|
+
const pool = values[field];
|
|
5301
|
+
if (index <= 0 || index >= pool.length) return;
|
|
5302
|
+
const next = [pool[index], ...pool.slice(0, index), ...pool.slice(index + 1)];
|
|
5303
|
+
edit(field, next.map((route) => ({
|
|
5304
|
+
provider: route.provider,
|
|
5305
|
+
model: route.model,
|
|
5306
|
+
})));
|
|
5307
|
+
}
|
|
5308
|
+
|
|
5271
5309
|
/** Manual order: remove the route at index. */
|
|
5272
5310
|
function removePoolRoute(field, index) {
|
|
5273
5311
|
const next = [...values[field]];
|
|
@@ -6383,6 +6421,9 @@ window.__ModuleLoader__.load({
|
|
|
6383
6421
|
onMove: (index, delta) => {
|
|
6384
6422
|
movePoolRoute(field, index, delta);
|
|
6385
6423
|
},
|
|
6424
|
+
onMoveTop: (index) => {
|
|
6425
|
+
movePoolRouteToTop(field, index);
|
|
6426
|
+
},
|
|
6386
6427
|
onRemove: (index) => {
|
|
6387
6428
|
removePoolRoute(field, index);
|
|
6388
6429
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-switchman",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.4",
|
|
4
4
|
"description": "Autonomous Agent Teams doctrine for the four shipped DeepSeek Harness presets, plus language preferences, dispatch pools with model ranking, and context watermark control.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|