dsh-switchman 1.11.3 → 1.11.5

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.de.md CHANGED
@@ -33,7 +33,7 @@ Die Session-Kopfzeile zeigt sofort, was los ist: das ⚡-Abzeichen „autonomes
33
33
 
34
34
  **7. `/vision`: reine Textmodelle kriegen trotzdem Bilder.** Kann das Hauptmodell keine Bilder lesen, lehnt DSH Bildnachrichten an der Tür ab. Bild einfügen, `/vision was ist an diesem Bild falsch` eintippen — das Bild geht an ein Modell aus dem Vision-Pool, das Urteil kommt in die laufende Session zurück. Über dem Eingabefeld steht vorab „das aktuelle Modell kann keine Bilder lesen“; wird der direkte Bildversand abgelehnt, wird die Nachricht automatisch als `/vision` umgeschrieben und erneut gesendet — kein manueller zweiter Versuch. Ohne konfigurierten Vision-Pool verweigert der Befehl und weist auf die Einstellungen.
35
35
 
36
- **8. Intent-Routing: das passende Modell stellt sich von selbst ein.** Auf der Einstellungsseite gibt es eine neue Gruppe „Intent-Routing“: einen Hauptschalter (standardmäßig aus — zum Einschalten sind ein Klassifikator und mindestens ein Kandidat nötig), die Small-Model-Route des Klassifikators (Provider + Modell + optionaler Aufwand — TypeSafe-Jev-artige Entscheidungsmodelle wie allgemeine Chatmodelle funktionieren gleichermaßen, die Ausgabe wird tolerant geparst), eine Dreifachwahl des Klassifikatortyps (auto / decision / chat), eine eigene Kandidatenliste (je Kandidat Provider + Modell + optionaler Aufwand + eine Zeile Fähigkeitsbeschreibung), das Cache-Fenster in Sekunden (Standard 300, abgestimmt auf die Prompt-Caches der Anbieter von rund 5 Minuten), die Umschalt-Vertrauensschwelle (Standard 80), das Klassifikations-Timeout (Standard 60000 ms), die Anzahl der Verlaufsnachrichten (Standard 6) samt Zeichenbudget (Standard 2400) und ein optionales Fallback-Modell. In der Modellauswahl erscheint unter der Gruppe „Auto · Switchman“ der Eintrag „Auto“ (der Client rendert ihn lokalisiert — auf Deutsch „Automatisch (Intent-Routing)“); ist er gewählt, stuft der Klassifikator jede Nutzernachricht ein und der Entscheid gilt für die jeweilige Runde: Bei zu geringem Vertrauen oder noch offenem Cache-Fenster bleibt das aktuelle Modell in Verwendung (sein Cache wird weitergenutzt); gewechselt wird erst, wenn das Vertrauen hoch genug ist oder das aktuelle Modell nicht unter den Kandidaten steht. Der Wechsel geschieht still auf der Aufrufebene — keine „Modell gewechselt“-Nachricht landet in der Session. Über dem Eingabefeld sitzt ein Status-Chip (bei aktivem Routing zeigt er das aktuelle Routing-Modell und das Vertrauen der letzten Entscheidung); Kandidaten und Schwellen stehen jederzeit auf der Einstellungsseite.
36
+ **8. Intent-Routing: das passende Modell stellt sich von selbst ein.** Auf der Einstellungsseite gibt es eine neue Gruppe „Intent-Routing“: einen Hauptschalter (standardmäßig aus — zum Einschalten sind ein Klassifikator und mindestens ein Kandidat nötig), die Small-Model-Route des Klassifikators (Provider + Modell + optionaler Aufwand — TypeSafe-Jev-artige Entscheidungsmodelle wie allgemeine Chatmodelle funktionieren gleichermaßen, die Ausgabe wird tolerant geparst), eine Dreifachwahl des Klassifikatortyps (auto / decision / chat), eine eigene Kandidatenliste (je Kandidat Provider + Modell + optionaler Aufwand + eine Zeile Fähigkeitsbeschreibung), das Cache-Fenster in Sekunden (Standard 300, abgestimmt auf die Prompt-Caches der Anbieter von rund 5 Minuten), die Umschalt-Vertrauensschwelle (Standard 80), das Klassifikations-Timeout (Standard 60000 ms), die Anzahl der Verlaufsnachrichten (Standard 6) samt Zeichenbudget (Standard 2400) und ein optionales Fallback-Modell (mit unabhängigem optionalem Effort-Pin; ohne Pin gilt der Standard des ausgewählten Fallback-Modells, unabhängig vom Klassifikator). In der Modellauswahl erscheint unter der Gruppe „Auto · Switchman“ der Eintrag „Auto“ (der Client rendert ihn lokalisiert — auf Deutsch „Automatisch (Intent-Routing)“); ist er gewählt, stuft der Klassifikator jede Nutzernachricht ein und der Entscheid gilt für die jeweilige Runde: Bei zu geringem Vertrauen oder noch offenem Cache-Fenster bleibt das aktuelle Modell in Verwendung (sein Cache wird weitergenutzt); gewechselt wird erst, wenn das Vertrauen hoch genug ist oder das aktuelle Modell nicht unter den Kandidaten steht. Der Wechsel geschieht still auf der Aufrufebene — keine „Modell gewechselt“-Nachricht landet in der Session. Über dem Eingabefeld sitzt ein Status-Chip (bei aktivem Routing zeigt er das aktuelle Routing-Modell und das Vertrauen der letzten Entscheidung); Kandidaten und Schwellen stehen jederzeit auf der Einstellungsseite.
37
37
 
38
38
  Auch mit nur einem Modell lohnt sich die Installation — Wasserstandskontrolle und gestufte Verifikation hängen nicht von der Modellzahl ab; lange Single-Model-Sessions profitieren genauso.
39
39
 
@@ -129,8 +129,8 @@ Alle Schlüssel liegen unter Einstellungen → dsh-switchman; Defaults aus `host
129
129
  | `trimWindowTokens` | `0` | Effektives Fensterlimit für die Stufenberechnung: gerechnet gegen min(Modellfenster, Limit). `0` = folgt `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | Die letzten N Nachrichten werden nie gefaltet. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Fold-Takt-Obergrenze pro rollierender Stunde für Nebenmodell-Folds (Notfall-Folds ausgenommen). |
132
- | `trimSideModel` | nicht gesetzt | Route des zusammenfassenden Nebenmodells. Leer = das aktuelle Session-Modell erben. |
133
- | `trimFoldFallbackModel` | nicht gesetzt | Route, mit der der Fold den Zusammenfassungs-Versuch wiederholt; scheitert auch sie, degradiert ein Pressure-Fold zu mechanischem Folding. Leer = kein Fallback. Route mit Spielraum bei Cooldowns, Risikokontrolle und Concurrency wählen. |
132
+ | `trimSideModel` | nicht gesetzt | Route des Zusammenfassungs-Nebenmodells. Leer = Provider/Modell der Session folgen, aber den Effort des Aufrufs nicht übernehmen; auch Ladder-Distillationen nutzen diese Route. Der Effort für Zusammenfassungen lässt sich separat festlegen; ohne Pin wird anhand der Modellmetadaten die niedrigste aktivierte Reasoning-Stufe gewählt, bei Modellen mit nur Ein/Aus off. Wird Reasoning nicht unterstützt oder sind keine Metadaten verfügbar, wird kein Effort gesendet und das Modell-/Adapter-Standardverhalten bleibt maßgeblich. |
133
+ | `trimFoldFallbackModel` | nicht gesetzt | Route, mit der der Fold den Zusammenfassungs-Versuch wiederholt; scheitert auch sie, degradiert ein Pressure-Fold zu mechanischem Folding. Leer = kein Fallback. Das Effort des manuell gewählten Fold-Fallback-Modells ist unabhängig; ohne Pin gilt dieselbe Metadaten-Empfehlung wie beim Zusammenfassungsmodell, ohne Metadaten der Modellstandard. Route mit Spielraum bei Cooldowns, Risikokontrolle und Concurrency wählen. |
134
134
  | `trimStateDir` | nicht gesetzt | Überschreibt das Fold-Zustandsverzeichnis. Leer = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Liefert committete Folds auf die Session-Oberfläche aus (Shadow-Price-Messereignis + `surfaceOp`-Replace-Ereignispaar). OFF behält die rein gesplicte View. |
136
136
 
package/README.es.md CHANGED
@@ -33,7 +33,7 @@ La cabecera de la sesión da un feedback visual claro: la insignia ⚡ «equipo
33
33
 
34
34
  **7. `/vision`: hasta un modelo de solo texto puede con las imágenes.** Cuando el modelo principal no sabe leer imágenes, DSH rechaza en la puerta de entrada los mensajes con imágenes. Adjunta la imagen y escribe `/vision ¿qué está mal en esta imagen?` — la imagen se entrega a un modelo del pool multimodal para leerla, y la conclusión vuelve a la sesión actual. Sobre el cuadro de entrada aparece por adelantado el aviso «el modelo actual no sabe leer imágenes»; si un envío directo de imagen es rechazado, se reescribe una vez de forma automática a `/vision` y se reenvía, sin rehacer nada a mano; con el pool multimodal sin configurar, el comando se niega y da indicaciones de configuración.
35
35
 
36
- **8. Enrutado por intención: el modelo adecuado se elige solo.** La página de ajustes estrena un grupo «Enrutado por intención»: un interruptor maestro (apagado por defecto; para activarlo hacen falta un clasificador y al menos un candidato), la ruta de modelo pequeño del clasificador (provider + model + effort opcional — valen tanto modelos de decisión tipo TypeSafe Jev como modelos de chat genéricos, y la salida se interpreta con tolerancia), un selector de tipo de clasificador a tres bandas (auto / decision / chat), una lista de candidatos independiente (cada candidato: provider + model + effort opcional + una nota de capacidades de una línea), la ventana de caché en segundos (300 por defecto, alineada con las cachés de prompt de los proveedores, unos 5 minutos), el umbral de confianza para el cambio (80 por defecto), el timeout de clasificación (60000 ms por defecto), el número de mensajes del historial (6 por defecto) y el presupuesto de caracteres (2400 por defecto), y un modelo de respaldo opcional. En el selector de modelos aparece una entrada «Auto» dentro del grupo «Auto · Switchman» (el cliente la muestra localizada — «Automático (enrutado por intención)» en español); elegida, cada mensaje del usuario pasa por el clasificador para decidir el mejor candidato y la decisión queda fijada por ese turno: si la confianza no llega o la ventana de caché sigue abierta, se mantiene el modelo actual (reaprovechando su caché); solo se cambia cuando la confianza sobra o el modelo actual no está entre los candidatos. El cambio ocurre en silencio en la capa de llamada — no se inserta ningún mensaje de «modelo cambiado» en la sesión. Sobre el cuadro de entrada hay un chip de estado (con enrutado automático muestra el modelo en ruta y la confianza de la última decisión); los candidatos y los umbrales se consultan siempre en la página de ajustes.
36
+ **8. Enrutado por intención: el modelo adecuado se elige solo.** La página de ajustes estrena un grupo «Enrutado por intención»: un interruptor maestro (apagado por defecto; para activarlo hacen falta un clasificador y al menos un candidato), la ruta de modelo pequeño del clasificador (provider + model + effort opcional — valen tanto modelos de decisión tipo TypeSafe Jev como modelos de chat genéricos, y la salida se interpreta con tolerancia), un selector de tipo de clasificador a tres bandas (auto / decision / chat), una lista de candidatos independiente (cada candidato: provider + model + effort opcional + una nota de capacidades de una línea), la ventana de caché en segundos (300 por defecto, alineada con las cachés de prompt de los proveedores, unos 5 minutos), el umbral de confianza para el cambio (80 por defecto), el timeout de clasificación (60000 ms por defecto), el número de mensajes del historial (6 por defecto) y el presupuesto de caracteres (2400 por defecto), y un modelo de respaldo opcional (con un pin de effort opcional e independiente; si no se fija, se usa el valor predeterminado del modelo de respaldo seleccionado, separado del effort del clasificador). En el selector de modelos aparece una entrada «Auto» dentro del grupo «Auto · Switchman» (el cliente la muestra localizada — «Automático (enrutado por intención)» en español); elegida, cada mensaje del usuario pasa por el clasificador para decidir el mejor candidato y la decisión queda fijada por ese turno: si la confianza no llega o la ventana de caché sigue abierta, se mantiene el modelo actual (reaprovechando su caché); solo se cambia cuando la confianza sobra o el modelo actual no está entre los candidatos. El cambio ocurre en silencio en la capa de llamada — no se inserta ningún mensaje de «modelo cambiado» en la sesión. Sobre el cuadro de entrada hay un chip de estado (con enrutado automático muestra el modelo en ruta y la confianza de la última decisión); los candidatos y los umbrales se consultan siempre en la página de ajustes.
37
37
 
38
38
  ¿Solo tienes un modelo? Sigue mereciendo la instalación — el control del nivel de agua y la verificación por niveles no dependen de cuántos modelos tengas, y una sesión larga con un solo modelo se beneficia igual.
39
39
 
@@ -129,8 +129,8 @@ Todas las claves viven en Ajustes → dsh-switchman; los valores por defecto sal
129
129
  | `trimWindowTokens` | `0` | Límite de ventana efectivo para el cálculo de niveles: se calcula sobre min(ventana del modelo, límite). `0` = sigue a `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | Los últimos N mensajes nunca se pliegan. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Tope de cadencia de folds por hora móvil para el modelo secundario (los de emergencia quedan exentos). |
132
- | `trimSideModel` | sin definir | Ruta del modelo secundario que escribe los resúmenes. Vacía = heredar el modelo actual de la sesión. |
133
- | `trimFoldFallbackModel` | sin definir | Ruta de reintento cuando falla el modelo secundario de resúmenes; un fold de presión degrada entonces a mecánico. Vacía = sin respaldo. Elige una ruta con margen en cooldowns, control de riesgo y concurrencia. |
132
+ | `trimSideModel` | sin definir | Ruta del modelo secundario que escribe los resúmenes. Vacía = seguir el provider/model de la sesión, sin heredar el effort de esa llamada; la destilación ladder también usa esta ruta. El effort del resumen admite un pin manual independiente; si no se fija, los metadatos del modelo recomiendan el nivel de reasoning habilitado más bajo; si el modelo solo tiene interruptor sí/no, se elige off. Si no admite reasoning o faltan metadatos, no se envía effort y se conserva el comportamiento predeterminado del modelo/adaptador. |
133
+ | `trimFoldFallbackModel` | sin definir | Ruta de reintento cuando falla el modelo secundario de resúmenes; un fold de presión degrada entonces a mecánico. Vacía = sin respaldo. El modelo de respaldo de fold elegido manualmente tiene un pin de effort independiente; si no se fija, usa la misma recomendación por metadatos que el modelo de resumen, y si faltan metadatos, el valor predeterminado del modelo. Elige una ruta con margen en cooldowns, control de riesgo y concurrencia. |
134
134
  | `trimStateDir` | sin definir | Anula el directorio del estado de folds. Vacía = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Envía los folds confirmados a la superficie de la sesión (par de eventos de medición shadow-price + replace con `surfaceOp`). Apagado conserva la vista de solo empalme. |
136
136
 
package/README.fr.md CHANGED
@@ -33,7 +33,7 @@ L'en-tête de session donne un retour immédiat : un badge ⚡ « équipe autono
33
33
 
34
34
  **7. `/vision` : même un modèle purement textuel peut travailler avec des images.** Quand le modèle principal ne sait pas lire les images, DSH refuse les messages avec image dès l'entrée. Collez l'image, tapez `/vision où est l'erreur sur cette image`, et l'image est confiée à un modèle du pool multimodal pour lecture ; les conclusions reviennent dans la session courante. Un avertissement apparaît tôt au-dessus du champ de saisie — « le modèle courant ne sait pas lire les images » ; si un envoi d'image ordinaire est refusé, le brouillon est réécrit une fois en `/vision` et renvoyé tout seul, sans rien retaper ; sans pool multimodal configuré, la commande refuse et donne les indications de configuration.
35
35
 
36
- **8. Routage par intention : le bon modèle se choisit tout seul.** La page de réglages accueille un nouveau groupe « Routage par intention » : un interrupteur général (désactivé par défaut ; l'activer exige un classifieur et au moins un candidat), la route du petit modèle classifieur (provider + model + effort facultatif — les modèles de décision type TypeSafe Jev comme les modèles de conversation génériques conviennent, et la sortie est analysée avec tolérance), un choix du type de classifieur à trois options (auto / decision / chat), une liste de candidats indépendante (chaque candidat : provider + model + effort facultatif + une note de capacité d'une ligne), la fenêtre de cache en secondes (300 par défaut, calée sur les caches de prompt des fournisseurs, environ 5 minutes), le seuil de confiance du basculement (80 par défaut), le timeout de classification (60000 ms par défaut), le nombre de messages d'historique (6 par défaut) et le budget de caractères (2400 par défaut), et un modèle de repli facultatif. Le sélecteur de modèles gagne une entrée « Auto » dans le groupe « Auto · Switchman » (le client la rend localisée — « Automatique (routage par intention) » en français) ; une fois choisie, chaque message utilisateur passe par le classifieur pour désigner le meilleur candidat, et la décision est verrouillée pour ce tour : si la confiance manque ou que la fenêtre de cache est encore ouverte, le modèle courant reste en place (son cache est réutilisé) ; on ne bascule que lorsque la confiance est suffisante ou que le modèle courant ne fait pas partie des candidats. Le basculement se fait en silence à la couche d'appel — aucun message « modèle changé » n'est inséré dans la session. Au-dessus du champ de saisie figure une pastille d'état (en routage automatique, elle montre le modèle routé courant et la confiance de la dernière décision) ; candidats et seuils restent consultables dans la page de réglages.
36
+ **8. Routage par intention : le bon modèle se choisit tout seul.** La page de réglages accueille un nouveau groupe « Routage par intention » : un interrupteur général (désactivé par défaut ; l'activer exige un classifieur et au moins un candidat), la route du petit modèle classifieur (provider + model + effort facultatif — les modèles de décision type TypeSafe Jev comme les modèles de conversation génériques conviennent, et la sortie est analysée avec tolérance), un choix du type de classifieur à trois options (auto / decision / chat), une liste de candidats indépendante (chaque candidat : provider + model + effort facultatif + une note de capacité d'une ligne), la fenêtre de cache en secondes (300 par défaut, calée sur les caches de prompt des fournisseurs, environ 5 minutes), le seuil de confiance du basculement (80 par défaut), le timeout de classification (60000 ms par défaut), le nombre de messages d'historique (6 par défaut) et le budget de caractères (2400 par défaut), et un modèle de repli facultatif (avec un pin d'effort facultatif et indépendant ; sans pin, l'effort par défaut du modèle de repli sélectionné s'applique, indépendamment de celui du classifieur). Le sélecteur de modèles gagne une entrée « Auto » dans le groupe « Auto · Switchman » (le client la rend localisée — « Automatique (routage par intention) » en français) ; une fois choisie, chaque message utilisateur passe par le classifieur pour désigner le meilleur candidat, et la décision est verrouillée pour ce tour : si la confiance manque ou que la fenêtre de cache est encore ouverte, le modèle courant reste en place (son cache est réutilisé) ; on ne bascule que lorsque la confiance est suffisante ou que le modèle courant ne fait pas partie des candidats. Le basculement se fait en silence à la couche d'appel — aucun message « modèle changé » n'est inséré dans la session. Au-dessus du champ de saisie figure une pastille d'état (en routage automatique, elle montre le modèle routé courant et la confiance de la dernière décision) ; candidats et seuils restent consultables dans la page de réglages.
37
37
 
38
38
  Un seul modèle ? Ça vaut quand même l'installation — le contrôle du niveau d'eau et la vérification par paliers se moquent du nombre de modèles, et une longue session mono-modèle en profite tout autant.
39
39
 
@@ -129,8 +129,8 @@ Toutes les clés vivent dans Réglages → dsh-switchman ; les valeurs par défa
129
129
  | `trimWindowTokens` | `0` | Plafond de fenêtre effectif pour le calcul des paliers : calculé sur min(fenêtre du modèle, plafond). `0` = suit `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | Les N derniers messages ne sont jamais repliés. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Plafond de cadence des folds par heure glissante pour le modèle annexe (les folds d'urgence en sont exemptés). |
132
- | `trimSideModel` | non définie | Route du modèle annexe qui écrit les résumés. Vide = hériter du modèle courant de la session. |
133
- | `trimFoldFallbackModel` | non définie | Route de relance quand le modèle annexe de résumé échoue ; un fold de pression dégrade alors en mécanique. Vide = pas de repli. Choisir une route avec de la marge sur cooldowns, contrôle de risque et concurrence. |
132
+ | `trimSideModel` | non définie | Route du modèle annexe qui écrit les résumés. Vide = suivre le provider/model de la session, sans hériter de l'effort de cet appel ; les distillations ladder utilisent aussi cette route. L'effort du résumé peut être fixé séparément ; sans pin, les métadonnées du modèle déterminent le niveau de reasoning activé le plus bas ; pour un modèle limité à un interrupteur on/off, choisir off. Si le reasoning n'est pas pris en charge ou si les métadonnées sont indisponibles, aucun effort n'est envoyé et le comportement par défaut du modèle/de l'adaptateur s'applique. |
133
+ | `trimFoldFallbackModel` | non définie | Route de relance quand le modèle annexe de résumé échoue ; un fold de pression dégrade alors en mécanique. Vide = pas de repli. Le modèle de repli du fold choisi manuellement a un pin d'effort indépendant ; sans pin, appliquer la même recommandation par métadonnées que pour le modèle de résumé, et en l'absence de métadonnées, le défaut du modèle. Choisir une route avec de la marge sur cooldowns, contrôle de risque et concurrence. |
134
134
  | `trimStateDir` | non défini | Redéfinit le répertoire d'état des folds. Vide = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Expédie les folds validés sur la surface de session (paire d'événements : mesure shadow-price + remplacement `surfaceOp`). Désactivé, la vue reste en splice seul. |
136
136
 
package/README.it.md CHANGED
@@ -33,7 +33,7 @@ L'intestazione della sessione dà un riscontro immediato: badge ⚡ «Squadra au
33
33
 
34
34
  **7. `/vision`: anche i modelli solo testo trattano le immagini.** Quando il modello principale non sa leggere le immagini, DSH rifiuta al varco i messaggi che le contengono. Alleghi l'immagine e digiti `/vision dov'è l'errore in questa immagine`: l'immagine viene affidata alla lettura di un modello del pool multimodale, e la conclusione torna nella sessione corrente. Sopra la casella di input compare in anticipo l'avviso «il modello corrente non supporta la lettura delle immagini»; se un invio diretto dell'immagine viene rifiutato, il messaggio viene riscritto una volta in `/vision` e reinviato da solo, senza dover rifare tutto a mano; senza pool multimodale configurato, il comando rifiuta e indica come configurarlo.
35
35
 
36
- **8. Instradamento per intent: il modello giusto si sceglie da sé.** La pagina delle impostazioni si arricchisce di un gruppo «Instradamento per intent»: un interruttore principale (spento per predefinito; per attivarlo servono un classificatore e almeno un candidato), la route del piccolo modello classificatore (provider + model + effort facoltativo — vanno bene sia i modelli decisionali tipo TypeSafe Jev sia i modelli di chat generici, e l'output viene letto con tolleranza), una scelta a tre vie del tipo di classificatore (auto / decision / chat), una lista di candidati indipendente (per ogni candidato: provider + model + effort facoltativo + una nota di capacità di una riga), la finestra di cache in secondi (300 per predefinito, allineata alle cache di prompt dei provider, circa 5 minuti), la soglia di confidenza per il cambio (80 per predefinito), il timeout di classificazione (60000 ms per predefinito), il numero di messaggi di cronologia (6 per predefinito) e il budget di caratteri (2400 per predefinito), più un modello di fallback facoltativo. Nel selettore dei modelli compare una voce «Auto» nel gruppo «Auto · Switchman» (il client la renderizza localizzata — «Automatico (instradamento per intent)» in italiano); una volta scelta, ogni messaggio dell'utente passa dal classificatore per eleggere il candidato migliore e la decisione resta fissata per quel turno: se la confidenza non basta o la finestra di cache è ancora aperta, resta il modello corrente (riusandone la cache); si cambia solo quando la confidenza è sufficiente o il modello corrente non è tra i candidati. Il cambio avviene in silenzio al livello di chiamata — nessun messaggio «modello cambiato» finisce nella sessione. Sopra la casella di input c'è una chip di stato (con instradamento automatico mostra il modello di instradamento corrente e la confidenza dell'ultima decisione); candidati e soglie si consultano sempre nella pagina delle impostazioni.
36
+ **8. Instradamento per intent: il modello giusto si sceglie da sé.** La pagina delle impostazioni si arricchisce di un gruppo «Instradamento per intent»: un interruttore principale (spento per predefinito; per attivarlo servono un classificatore e almeno un candidato), la route del piccolo modello classificatore (provider + model + effort facoltativo — vanno bene sia i modelli decisionali tipo TypeSafe Jev sia i modelli di chat generici, e l'output viene letto con tolleranza), una scelta a tre vie del tipo di classificatore (auto / decision / chat), una lista di candidati indipendente (per ogni candidato: provider + model + effort facoltativo + una nota di capacità di una riga), la finestra di cache in secondi (300 per predefinito, allineata alle cache di prompt dei provider, circa 5 minuti), la soglia di confidenza per il cambio (80 per predefinito), il timeout di classificazione (60000 ms per predefinito), il numero di messaggi di cronologia (6 per predefinito) e il budget di caratteri (2400 per predefinito), più un modello di fallback facoltativo (con un pin di effort facoltativo e indipendente; se non fissato, si usa l'effort predefinito del modello di fallback selezionato, separato da quello del classificatore). Nel selettore dei modelli compare una voce «Auto» nel gruppo «Auto · Switchman» (il client la renderizza localizzata — «Automatico (instradamento per intent)» in italiano); una volta scelta, ogni messaggio dell'utente passa dal classificatore per eleggere il candidato migliore e la decisione resta fissata per quel turno: se la confidenza non basta o la finestra di cache è ancora aperta, resta il modello corrente (riusandone la cache); si cambia solo quando la confidenza è sufficiente o il modello corrente non è tra i candidati. Il cambio avviene in silenzio al livello di chiamata — nessun messaggio «modello cambiato» finisce nella sessione. Sopra la casella di input c'è una chip di stato (con instradamento automatico mostra il modello di instradamento corrente e la confidenza dell'ultima decisione); candidati e soglie si consultano sempre nella pagina delle impostazioni.
37
37
 
38
38
  Un solo modello? Vale comunque la pena installarlo — il controllo del livello dell'acqua e la verifica a livelli non guardano a quanti modelli hai, e ne giovancono allo stesso modo le sessioni lunghe con un modello unico.
39
39
 
@@ -129,8 +129,8 @@ Tutte le chiavi stanno in Impostazioni → dsh-switchman; i valori predefiniti v
129
129
  | `trimWindowTokens` | `0` | Limite di finestra effettivo per il calcolo delle soglie: calcolato su min(finestra del modello, limite). `0` = segue `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | Gli ultimi N messaggi non vengono mai ripiegati. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Tetto di cadenza dei fold per ora mobile per il modello secondario (quelli di emergenza ne sono esenti). |
132
- | `trimSideModel` | non impostata | Route del modello secondario che scrive i riassunti. Vuota = eredita il modello attuale della sessione. |
133
- | `trimFoldFallbackModel` | non impostata | Route di ripiego quando il modello secondario dei riassunti fallisce; un fold di pressione degrada quindi a meccanico. Vuota = nessun fallback. Scegli una route con margine su cooldown, risk control e concorrenza. |
132
+ | `trimSideModel` | non impostata | Route del modello secondario che scrive i riassunti. Vuota = seguire il provider/model della sessione, senza ereditare l'effort della chiamata; anche le ladder distillation usano questa route. L'effort del riepilogo si può fissare separatamente; senza pin, i metadati del modello scelgono il livello reasoning abilitato più basso; per i modelli con solo interruttore on/off, scegliere off. Se reasoning non è supportato o i metadati non sono disponibili, non si invia effort e si mantiene il comportamento predefinito del modello/adattatore. |
133
+ | `trimFoldFallbackModel` | non impostata | Route di ripiego quando il modello secondario dei riassunti fallisce; un fold di pressione degrada quindi a meccanico. Vuota = nessun fallback. Il modello di fallback del fold scelto manualmente ha un pin di effort indipendente; senza pin, usa la stessa raccomandazione basata sui metadati del modello di riepilogo e, se mancano metadati, il valore predefinito del modello. Scegli una route con margine su cooldown, risk control e concorrenza. |
134
134
  | `trimStateDir` | non impostata | Sostituisce la directory dello stato dei fold. Vuota = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Spedisce i fold confermati sulla superficie della sessione (coppia di eventi: misurazione shadow-price + replace `surfaceOp`). OFF mantiene la vista a solo splice. |
136
136
 
package/README.ja.md CHANGED
@@ -33,7 +33,7 @@ dsh-switchman は [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-har
33
33
 
34
34
  **7. `/vision`:テキスト専用モデルでも画像を扱える。** 主力モデルが画像を読めないとき、DSH は画像付きメッセージを入口で拒否する。画像を貼って `/vision この画像のどこが悪い` と打てば、画像は vision プールのモデルへ渡され、結論は現在のセッションに戻る。入力欄の上には「現在のモデルは画像を読めません」の事前表示が出る。画像を直接送って拒否されたら、自動で `/vision` に書き換えて再送するので手直しは不要。vision プールが未設定ならコマンドは拒否し、設定への案内を出す。
35
35
 
36
- **8. 意図ルーティング:最適なモデルを自動で選ぶ。** 設定ページに「意図認識」グループが増える:マスタートグル(既定オフ、有効化には分類器と候補が最低1つ必要)、分類器用の小型モデルルート(provider + model + 任意の effort。TypeSafe Jev 系の決定モデルも汎用対話モデルも使え、出力は寛容にパースされる)、分類器タイプの3択(auto / decision / chat)、独立した候補モデルリスト(各候補に provider + model + 任意の effort + 一行の能力説明)、キャッシュウィンドウ秒数(既定 300、ベンダーの prompt cache 約5分に合わせる)、切替信頼度しきい値(既定 80)、分類タイムアウト(既定 60000ms)、履歴メッセージ件数(既定 6)と文字数予算(既定 2400)、任意のフォールバックモデル。モデルセレクターの「Auto · Switchman」グループの下に「Auto」エントリが現れる(クライアントは「自動(意図認識)」とローカライズして表示);選んでおくとユーザーメッセージごとに分類器が最適な候補を判定し、判断はそのターンの間固定される:信頼度が足りない、またはまだキャッシュウィンドウ内なら現在のモデルをそのまま使い(キャッシュを再利用)、信頼度が十分高い、または現在のモデルが候補にないときだけ切り替わる。切替は呼び出し層で静かに行われ、「モデルを切り替えました」のメッセージをセッションに差し込まない。入力欄の上には状態 chip(自動ルーティング中は現在のルーティング先モデルと最後の判断の信頼度を表示)。候補としきい値はいつでも設定ページで確認できる。
36
+ **8. 意図ルーティング:最適なモデルを自動で選ぶ。** 設定ページに「意図認識」グループが増える:マスタートグル(既定オフ、有効化には分類器と候補が最低1つ必要)、分類器用の小型モデルルート(provider + model + 任意の effort。TypeSafe Jev 系の決定モデルも汎用対話モデルも使え、出力は寛容にパースされる)、分類器タイプの3択(auto / decision / chat)、独立した候補モデルリスト(各候補に provider + model + 任意の effort + 一行の能力説明)、キャッシュウィンドウ秒数(既定 300、ベンダーの prompt cache 約5分に合わせる)、切替信頼度しきい値(既定 80)、分類タイムアウト(既定 60000ms)、履歴メッセージ件数(既定 6)と文字数予算(既定 2400)、任意のフォールバックモデル(任意の effort を独立して固定でき、未設定なら選択したフォールバックモデルのデフォルトを使用。分類器の effort とは別)。モデルセレクターの「Auto · Switchman」グループの下に「Auto」エントリが現れる(クライアントは「自動(意図認識)」とローカライズして表示);選んでおくとユーザーメッセージごとに分類器が最適な候補を判定し、判断はそのターンの間固定される:信頼度が足りない、またはまだキャッシュウィンドウ内なら現在のモデルをそのまま使い(キャッシュを再利用)、信頼度が十分高い、または現在のモデルが候補にないときだけ切り替わる。切替は呼び出し層で静かに行われ、「モデルを切り替えました」のメッセージをセッションに差し込まない。入力欄の上には状態 chip(自動ルーティング中は現在のルーティング先モデルと最後の判断の信頼度を表示)。候補としきい値はいつでも設定ページで確認できる。
37
37
 
38
38
  モデルが1つでも入れる価値はある——水位制御と段階的検証はモデルの数と無関係で、単一モデルの長いセッションも同じく恩恵を受ける。
39
39
 
@@ -129,8 +129,8 @@ bash <インストールディレクトリ>/skills/db-query/scripts/setup.sh
129
129
  | `trimWindowTokens` | `0` | ティア計算の実効ウィンドウ上限:min(モデルウィンドウ, 上限) で計算。`0` = `wmForceTokens` に追従。 |
130
130
  | `trimProtectedTail` | `10` | 最後の N メッセージは決して fold されない。 |
131
131
  | `trimMaxFoldsPerHour` | `30` | ローリング1時間あたりのサイドモデル fold ペース上限(緊急段は対象外)。 |
132
- | `trimSideModel` | 未設定 | サマリを書くサイドモデルのルート。空欄 = セッションの現在モデルを継承。 |
133
- | `trimFoldFallbackModel` | 未設定 | サマリのサイドモデルが失敗したときに折り畳みが再試行するルート。プレッシャー段でも失敗すると機械折り畳みに縮退。空欄 = フォールバックなし。クールダウン・リスク制御・同時実行に余裕のあるルートを推奨。 |
132
+ | `trimSideModel` | 未設定 | サマリ用サイドモデルのルート。空欄 = セッションの provider/model に追従(呼び出しの effort は継承しない);ladder distillation もこのルートを使用。サマリの effort は別途手動固定でき、未設定ならモデルメタデータから有効な reasoning レベルの最小値を選ぶ。オン/オフのみのモデルは off。reasoning 非対応またはメタデータが利用できない場合は effort を送らず、モデル/アダプターのデフォルトに委ねる。 |
133
+ | `trimFoldFallbackModel` | 未設定 | サマリのサイドモデルが失敗したときに折り畳みが再試行するルート。プレッシャー段でも失敗すると機械折り畳みに縮退。空欄 = フォールバックなし。手動選択した fold フォールバックモデルの effort 固定は独立。未設定ならサマリモデルと同じメタデータ基準で推奨し、メタデータがなければそのモデルのデフォルトを使用。クールダウン・リスク制御・同時実行に余裕のあるルートを推奨。 |
134
134
  | `trimStateDir` | 未設定 | fold 状態ディレクトリの上書き。空欄 = `<dshHome>/.dsh-switchman/state/trim/`。 |
135
135
  | `surfaceFold` | `true` | コミット済みの fold をセッション表面へ出荷します(shadow-price 計量イベント + `surfaceOp` replace イベントのペア)。OFF はスプライスのみの view を維持。 |
136
136
 
package/README.ko.md CHANGED
@@ -33,7 +33,7 @@ dsh-switchman은 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harn
33
33
 
34
34
  **7. `/vision`: 텍스트 전용 모델도 이미지를 다룬다.** 주력 모델이 이미지를 못 읽으면 DSH는 이미지 포함 메시지를 입구에서 거절한다. 이미지를 붙이고 `/vision 이 이미지 어디가 잘못됐어`라고 입력하면 이미지는 vision 풀 모델에게 넘어가고 결론이 현재 세션으로 돌아온다. 입력창 위에는 '현재 모델은 이미지를 읽을 수 없음' 안내가 미리 뜬다. 이미지를 직접 보내다 거절되면 자동으로 `/vision`으로 고쳐 다시 보낸다 — 손으로 다시 할 필요 없다. vision 풀이 비어 있으면 명령은 거절하고 설정 안내를 준다.
35
35
 
36
- **8. 의도 라우팅: 알맞은 모델을 자동으로 고른다.** 설정 페이지에 '의도 인식' 그룹이 추가된다: 마스터 토글(기본 꺼짐, 켜려면 분류기와 후보 최소 1개 필요), 분류기용 소형 모델 라우트(provider + model + 선택적 effort. TypeSafe Jev 계열 결정 모델도 범용 대화 모델도 지원하며 출력은 관대하게 파싱된다), 분류기 유형 3택(auto / decision / chat), 독립 후보 모델 목록(후보마다 provider + model + 선택적 effort + 한 줄 능력 설명), 캐시 창 초(기본 300, 벤더 prompt cache 약 5분에 맞춤), 전환 신뢰도 임계값(기본 80), 분류 타임아웃(기본 60000ms), 히스토리 메시지 수(기본 6)와 문자 예산(기본 2400), 선택적 폴백 모델. 모델 선택기의 'Auto · Switchman' 그룹 아래에 'Auto' 항목이 나타난다(클라이언트는 '자동(의도 인식)'으로 현지화해 그린다). 선택해 두면 사용자 메시지마다 분류기가 가장 알맞은 후보를 판정하고 같은 턴 안에서는 결정이 고정된다: 신뢰도가 부족하거나 아직 캐시 창 안이면 현재 모델을 그대로 쓰고(캐시 재사용), 신뢰도가 충분히 높거나 현재 모델이 후보에 없을 때만 전환한다. 전환은 호출 계층에서 조용히 끝나며 세션에 '모델이 전환되었습니다' 메시지를 끼워 넣지 않는다. 입력창 위에는 상태 chip이 뜬다(자동 라우팅 중에는 현재 라우팅 모델과 마지막 판정 신뢰도 표시). 후보와 임계값은 언제든 설정 페이지에서 볼 수 있다.
36
+ **8. 의도 라우팅: 알맞은 모델을 자동으로 고른다.** 설정 페이지에 '의도 인식' 그룹이 추가된다: 마스터 토글(기본 꺼짐, 켜려면 분류기와 후보 최소 1개 필요), 분류기용 소형 모델 라우트(provider + model + 선택적 effort. TypeSafe Jev 계열 결정 모델도 범용 대화 모델도 지원하며 출력은 관대하게 파싱된다), 분류기 유형 3택(auto / decision / chat), 독립 후보 모델 목록(후보마다 provider + model + 선택적 effort + 한 줄 능력 설명), 캐시 창 초(기본 300, 벤더 prompt cache 약 5분에 맞춤), 전환 신뢰도 임계값(기본 80), 분류 타임아웃(기본 60000ms), 히스토리 메시지 수(기본 6)와 문자 예산(기본 2400), 선택적 폴백 모델(선택적 effort를 별도로 고정할 수 있으며, 미설정 시 선택한 폴백 모델의 기본 effort를 사용하고 분류기 effort와는 독립적). 모델 선택기의 'Auto · Switchman' 그룹 아래에 'Auto' 항목이 나타난다(클라이언트는 '자동(의도 인식)'으로 현지화해 그린다). 선택해 두면 사용자 메시지마다 분류기가 가장 알맞은 후보를 판정하고 같은 턴 안에서는 결정이 고정된다: 신뢰도가 부족하거나 아직 캐시 창 안이면 현재 모델을 그대로 쓰고(캐시 재사용), 신뢰도가 충분히 높거나 현재 모델이 후보에 없을 때만 전환한다. 전환은 호출 계층에서 조용히 끝나며 세션에 '모델이 전환되었습니다' 메시지를 끼워 넣지 않는다. 입력창 위에는 상태 chip이 뜬다(자동 라우팅 중에는 현재 라우팅 모델과 마지막 판정 신뢰도 표시). 후보와 임계값은 언제든 설정 페이지에서 볼 수 있다.
37
37
 
38
38
  모델이 하나뿐이어도 설치할 가치가 있다 — 수위 제어와 단계별 검증은 모델 수와 무관하고, 단일 모델의 긴 세션도 같은 혜택을 본다.
39
39
 
@@ -129,8 +129,8 @@ bash <설치-디렉터리>/skills/db-query/scripts/setup.sh
129
129
  | `trimWindowTokens` | `0` | 티어 계산의 유효 윈도우 상한: min(모델 윈도우, 상한)으로 계산. `0` = `wmForceTokens`를 따름. |
130
130
  | `trimProtectedTail` | `10` | 마지막 N개 메시지는 절대 fold되지 않는다. |
131
131
  | `trimMaxFoldsPerHour` | `30` | 롤링 1시간당 사이드 모델 fold 케이던스 상한(비상 단계는 제외). |
132
- | `trimSideModel` | 미설정 | 요약을 쓰는 사이드 모델 라우트. 비어 있으면 세션의 현재 모델을 상속. |
133
- | `trimFoldFallbackModel` | 미설정 | 요약 사이드 모델 실패 시 폴드가 재시도하는 라우트. 프레셔 단계에서도 실패하면 기계 폴드로 강등. 비어 있으면 폴백 없음. 쿨다운·리스크 컨트롤·동시 실행에 여유가 있는 라우트 권장. |
132
+ | `trimSideModel` | 미설정 | 요약 side model 라우트. 비어 있으면 세션 provider/model을 따르며 호출의 effort는 상속하지 않음. ladder distillation도 이 라우트를 사용. 요약 effort는 별도로 수동 고정할 수 있으며, 고정하지 않으면 모델 메타데이터에서 사용 가능한 reasoning 단계 중 가장 낮은 단계를 선택. 켜기/끄기만 지원하는 모델은 off. reasoning 미지원 또는 메타데이터 없음이면 effort를 보내지 않아 모델/어댑터 기본 동작을 따름. |
133
+ | `trimFoldFallbackModel` | 미설정 | 요약 side model 실패 시 폴드가 재시도하는 라우트. 프레셔 단계에서도 실패하면 기계 폴드로 강등. 비어 있으면 폴백 없음. 수동으로 선택한 폴드 폴백 모델의 effort는 독립적으로 고정할 수 있으며, 미설정 시 요약 모델과 동일한 메타데이터 추천을 따르고 메타데이터가 없으면 해당 모델 기본값을 사용. 쿨다운·리스크 컨트롤·동시 실행에 여유가 있는 라우트 권장. |
134
134
  | `trimStateDir` | 미설정 | fold 상태 디렉터리 재정의. 비어 있으면 `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | 커밋된 fold를 세션 표면으로 발송(shadow-price 계량 이벤트 + `surfaceOp` replace 이벤트 쌍). OFF는 스플라이스 전용 view를 유지. |
136
136
 
package/README.md CHANGED
@@ -33,7 +33,7 @@ The session header gives at-a-glance feedback: the ⚡ "autonomous team" badge a
33
33
 
34
34
  **7. `/vision`: text-only models can still handle images.** When the main model can't read images, DSH rejects image-bearing messages at the gate. Paste the image, type `/vision what's wrong with this image`, and the image goes to a vision-pool model; the verdict comes back into the current session. A heads-up "current model can't read images" appears above the input box; when a direct image send is rejected, the message is rewritten as `/vision` and resent automatically — no manual redo; with no vision pool configured the command refuses and points to the settings.
35
35
 
36
- **8. Intent routing: the right model picks itself.** A new "Intent Routing" group on the settings page: a master switch (off by default — enabling requires a classifier and at least one candidate), the classifier's small-model route (provider + model + optional effort — TypeSafe Jev-style decision models and general chat models both work, with tolerant output parsing), a classifier type three-way choice (auto / decision / chat), an independent candidate list (each candidate: provider + model + optional effort + a one-line capability note), cache window seconds (default 300, aligned to the ~5-minute prompt caches vendors provide), a switch confidence threshold (default 80), a classification timeout (default 60000 ms), history message count (default 6) and character budget (default 2400), plus an optional fallback model. The model picker gains an "Auto" entry under the "Auto · Switchman" group (the client renders it localized — "Auto (intent routing)" in English); once selected, every user message is classified to pick the best-fitting candidate and the decision is locked for that turn: when confidence is lacking or the cache window is still open, the current model stays (its cache keeps being reused); switching happens only when confidence is high enough or the current model isn't among the candidates. The switch completes silently at the call layer — no "model switched" message is inserted into the session. A status chip sits above the input box (during auto routing it shows the current routed model and the last decision's confidence); candidates and thresholds can always be checked on the settings page.
36
+ **8. Intent routing: the right model picks itself.** A new "Intent Routing" group on the settings page: a master switch (off by default — enabling requires a classifier and at least one candidate), the classifier's small-model route (provider + model + optional effort — TypeSafe Jev-style decision models and general chat models both work, with tolerant output parsing), a classifier type three-way choice (auto / decision / chat), an independent candidate list (each candidate: provider + model + optional effort + a one-line capability note), cache window seconds (default 300, aligned to the ~5-minute prompt caches vendors provide), a switch confidence threshold (default 80), a classification timeout (default 60000 ms), history message count (default 6) and character budget (default 2400), plus an optional fallback model route with its own independent reasoning-effort pin; leaving that pin unset uses the selected fallback model's default. The model picker gains an "Auto" entry under the "Auto · Switchman" group (the client renders it localized — "Auto (intent routing)" in English); once selected, every user message is classified to pick the best-fitting candidate and the decision is locked for that turn: when confidence is lacking or the cache window is still open, the current model stays (its cache keeps being reused); switching happens only when confidence is high enough or the current model isn't among the candidates. The switch completes silently at the call layer — no "model switched" message is inserted into the session. A status chip sits above the input box (during auto routing it shows the current routed model and the last decision's confidence); candidates and thresholds can always be checked on the settings page.
37
37
 
38
38
  Worth installing even with a single model — watermark control and tiered verification don't care how many models you have, and long single-model sessions benefit just the same.
39
39
 
@@ -72,11 +72,11 @@ 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 ↑ ↓ ×; 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".
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).
79
- - **Intent Routing** — the master switch, the classifier's small-model route, the classifier type (auto / decision / chat), the independent candidate list (each with a one-line capability note), cache window / confidence threshold / classification timeout / history budget, and an optional fallback model. Once enabled, the model picker gains the localized "Auto (intent routing)" entry, and a status chip above the input box shows the routed model and confidence.
79
+ - **Intent Routing** — the master switch, the classifier's small-model route, the classifier type (auto / decision / chat), the independent candidate list (each with a one-line capability note), cache window / confidence threshold / classification timeout / history budget, and an optional fallback model with its own optional effort pin (empty = use that model's default). Once enabled, the model picker gains the localized "Auto (intent routing)" entry, and a status chip above the input box shows the routed model and confidence.
80
80
 
81
81
  4. **Verify** — the ⚡ "autonomous team" badge appears in the session header (with ◇ beside it showing the session's current model); or simply ask the model "what's the heading of the last section of your system prompt" — the answer should mention the dsh-switchman doctrine.
82
82
 
@@ -100,9 +100,9 @@ Everything below is the full set of defaults after a fresh install (authoritativ
100
100
 
101
101
  **Agent Teams**: `teamsMode` = off; `syncWhitelist` = off (the two toggles are independent of each other).
102
102
 
103
- **Intent routing** (unavailable by default; needs a classifier + at least one candidate + the master switch on): `intentEnabled` = off (while off, the Auto entry stays hidden and sessions already on Auto fall through the fallback chain); the classifier route is unset; the classifier type is `chat`; the candidate list is empty (the preset categories join routing only once given a model); cache window `300` s / switch confidence threshold `80` / classification timeout `60000` ms; history `6` messages / `2400` characters; `intentContextWindow` = `200000`.
103
+ **Intent routing** (unavailable by default; needs a classifier + at least one candidate + the master switch on): `intentEnabled` = off (while off, the Auto entry stays hidden and sessions already on Auto fall through the fallback chain); the classifier route is unset; the classifier type is `chat`; the candidate list is empty (the preset categories join routing only once given a model); cache window `300` s / switch confidence threshold `80` / classification timeout `60000` ms; history `6` messages / `2400` characters; optional `intentFallbackRoute` is unset, and its own effort is model-default when later configured; `intentContextWindow` = `200000`.
104
104
 
105
- **Context trim**: `trimEnabled` = on; `trimMode` = `auto` (fully automatic); growth gate `22500` tokens + increment `25000` tokens; pressure `65%` / emergency `95%`; protected tail `10` messages; fold cadence cap `30` per hour; side model unset (inherits the session model); **ladder folding on** — T2 distills accumulated T1 summaries (8000-token mass, ≥3 blocks), T3 distills T2 (6000-token mass, ≥2 blocks); the engine never shows the model a water level, percentage, or progress number — details in the "Automatic context trim" section below and [docs/ladder-fold.md](./docs/ladder-fold.md).
105
+ **Context trim**: `trimEnabled` = on; `trimMode` = `auto` (fully automatic); growth gate `22500` tokens + increment `25000` tokens; pressure `65%` / emergency `95%`; protected tail `10` messages; fold cadence cap `30` per hour; side model unset (follows the session provider/model, not the session call's effort); without an explicit effort pin, use the lowest enabled reasoning level from model metadata, choose `off` for toggle-only models, and omit effort when reasoning is unsupported or metadata is unavailable (model default). Ladder distillation shares that route and policy; a configured fold-fallback route has an independent effort pin with the same model-aware default. **Ladder folding on** — T2 distills accumulated T1 summaries (8000-token mass, ≥3 blocks), T3 distills T2 (6000-token mass, ≥2 blocks); the engine never shows the model a water level, percentage, or progress number — details in the "Automatic context trim" section below and [docs/ladder-fold.md](./docs/ladder-fold.md).
106
106
 
107
107
  **Out-of-the-box notes**: ① intent routing being unavailable out of the box is by design — three steps to switch it on (classifier, candidates, the master switch); ② Auto's effective window is 200000 out of the box — the guardrail guarantees 0.8×window ≥ force (150000), so the core compaction line (160000) always sits after the smooth-handover line (150000); ③ the most tangible out-of-the-box effect is the watermark trio: 80k nudges delegation / 95k tightens reading / 150k backs up and hands over automatically — no configuration needed.
108
108
 
@@ -129,8 +129,8 @@ All keys live in Settings → dsh-switchman; defaults from `host/config.js`:
129
129
  | `trimWindowTokens` | `0` | Effective-window cap for tier math: tiers are computed against min(model window, cap). `0` = follow `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | The last N messages are never folded. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Side-model fold cadence cap per rolling hour (emergency folds are exempt). |
132
- | `trimSideModel` | unset | Route for the summary side model. Empty = inherit the session's current model. |
133
- | `trimFoldFallbackModel` | unset | Route the fold retries on when the summary side model fails; a pressure fold then degrades to a mechanical one. Empty = no fallback leg. Pick a route with headroom on cooldowns, risk control, and concurrency limits. |
132
+ | `trimSideModel` | unset | Route for the summary side model. Empty follows the session provider/model only, not its effort. The independent effort pin defaults to the lowest enabled reasoning level from model metadata; toggle-only models use `off`, while unsupported reasoning or missing metadata omits the effort and leaves the model default. Ladder distillations share the route and policy. |
133
+ | `trimFoldFallbackModel` | unset | Route used when a summary call fails; a pressure fold then degrades to mechanical if the retry also fails. Its effort pin is independent; when unset, use the same model-aware recommendation as the summary route. Empty = no fallback leg. |
134
134
  | `trimStateDir` | unset | Fold-state directory override. Empty = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Ship committed folds onto the session surface (shadow-price + `surfaceOp` replace event pair). OFF keeps the splice-only view. |
136
136
 
package/README.pt.md CHANGED
@@ -33,7 +33,7 @@ O cabeçalho da sessão dá um retorno imediato: badge ⚡ “Equipe autônoma
33
33
 
34
34
  **7. `/vision`: até modelo somente texto lida com imagens.** Quando o modelo principal não sabe ler imagens, o DSH recusa na entrada as mensagens que as trazem. Você anexa a imagem e digita `/vision onde está o erro nesta imagem`: a imagem é entregue à leitura de um modelo do pool multimodal, e a conclusão volta para a sessão atual. Acima da caixa de entrada aparece antes o aviso “o modelo atual não suporta leitura de imagens”; se um envio direto da imagem for recusado, a mensagem é reescrita uma vez para `/vision` e reenviada sozinha, sem precisar refazer à mão; sem pool multimodal configurado, o comando recusa e indica como configurar.
35
35
 
36
- **8. Roteamento por intenção: o modelo certo se escolhe sozinho.** A página de configurações ganha um grupo “Roteamento por intenção”: uma chave mestra (desligada por padrão; para ligar são precisos um classificador e pelo menos um candidato), a rota do modelo pequeno do classificador (provider + model + effort opcional — servem tanto modelos de decisão tipo TypeSafe Jev quanto modelos de conversa genéricos, e a saída é interpretada com tolerância), uma escolha do tipo de classificador em três opções (auto / decision / chat), uma lista de candidatos independente (cada candidato: provider + model + effort opcional + uma nota de capacidade de uma linha), a janela de cache em segundos (300 por padrão, alinhada com os caches de prompt dos provedores, cerca de 5 minutos), o limiar de confiança para a troca (80 por padrão), o timeout de classificação (60000 ms por padrão), a contagem de mensagens do histórico (6 por padrão) e o orçamento de caracteres (2400 por padrão), além de um modelo de fallback opcional. No seletor de modelos aparece uma entrada “Auto” no grupo “Auto · Switchman” (o cliente a renderiza localizada — “Automático (roteamento por intenção)” em português); escolhida, cada mensagem do usuário passa pelo classificador para eleger o melhor candidato, e a decisão fica travada por aquele turno: se a confiança não alcança ou a janela de cache ainda está aberta, o modelo atual permanece (reaproveitando o cache); só troca quando a confiança é suficiente ou o modelo atual não está entre os candidatos. A troca acontece em silêncio na camada de chamada — nenhuma mensagem de “modelo trocado” entra na sessão. Acima da caixa de entrada há um chip de status (no roteamento automático, ele mostra o modelo roteado atual e a confiança da última decisão); candidatos e limiares ficam sempre visíveis na página de configurações.
36
+ **8. Roteamento por intenção: o modelo certo se escolhe sozinho.** A página de configurações ganha um grupo “Roteamento por intenção”: uma chave mestra (desligada por padrão; para ligar são precisos um classificador e pelo menos um candidato), a rota do modelo pequeno do classificador (provider + model + effort opcional — servem tanto modelos de decisão tipo TypeSafe Jev quanto modelos de conversa genéricos, e a saída é interpretada com tolerância), uma escolha do tipo de classificador em três opções (auto / decision / chat), uma lista de candidatos independente (cada candidato: provider + model + effort opcional + uma nota de capacidade de uma linha), a janela de cache em segundos (300 por padrão, alinhada com os caches de prompt dos provedores, cerca de 5 minutos), o limiar de confiança para a troca (80 por padrão), o timeout de classificação (60000 ms por padrão), a contagem de mensagens do histórico (6 por padrão) e o orçamento de caracteres (2400 por padrão), além de um modelo de fallback opcional (com um pin de effort opcional e independente; se não for fixado, usa-se o effort padrão do modelo de fallback selecionado, separado do effort do classificador). No seletor de modelos aparece uma entrada “Auto” no grupo “Auto · Switchman” (o cliente a renderiza localizada — “Automático (roteamento por intenção)” em português); escolhida, cada mensagem do usuário passa pelo classificador para eleger o melhor candidato, e a decisão fica travada por aquele turno: se a confiança não alcança ou a janela de cache ainda está aberta, o modelo atual permanece (reaproveitando o cache); só troca quando a confiança é suficiente ou o modelo atual não está entre os candidatos. A troca acontece em silêncio na camada de chamada — nenhuma mensagem de “modelo trocado” entra na sessão. Acima da caixa de entrada há um chip de status (no roteamento automático, ele mostra o modelo roteado atual e a confiança da última decisão); candidatos e limiares ficam sempre visíveis na página de configurações.
37
37
 
38
38
  Só um modelo? Ainda vale a pena instalar — o controle do nível de água e a verificação em níveis não ligam para quantos modelos você tem, e sessões longas de modelo único se beneficiam do mesmo jeito.
39
39
 
@@ -129,8 +129,8 @@ Todas as chaves ficam em Configurações → dsh-switchman; os padrões vêm de
129
129
  | `trimWindowTokens` | `0` | Limite de janela efetivo para o cálculo dos níveis: calculado sobre min(janela do modelo, limite). `0` = segue `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | As últimas N mensagens nunca são dobradas. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Teto de cadência de folds por hora rolante para o modelo secundário (os de emergência ficam fora). |
132
- | `trimSideModel` | não definida | Rota do modelo secundário que escreve os resumos. Vazia = herdar o modelo atual da sessão. |
133
- | `trimFoldFallbackModel` | não definida | Rota de nova tentativa quando o modelo secundário de resumos falha; um fold de pressão degrada então para mecânico. Vazia = sem fallback. Escolha uma rota com folga em cooldowns, controle de risco e concorrência. |
132
+ | `trimSideModel` | não definida | Rota do modelo secundário que escreve os resumos. Vazia = seguir o provider/model da sessão, sem herdar o effort da chamada; a ladder distillation também usa esta rota. O effort do resumo aceita um pin manual independente; se não fixado, os metadados do modelo recomendam o nível de reasoning habilitado mais baixo; se o modelo só tiver interruptor sim/não, escolhe-se off. Se não houver suporte a reasoning ou os metadados não estiverem disponíveis, nenhum effort é enviado e prevalece o comportamento padrão do modelo/adaptador. |
133
+ | `trimFoldFallbackModel` | não definida | Rota de nova tentativa quando o modelo secundário de resumos falha; um fold de pressão degrada então para mecânico. Vazia = sem fallback. O modelo de fallback do fold escolhido manualmente tem um pin de effort independente; sem pin, usa a mesma recomendação por metadados do modelo de resumo e, sem metadados, o padrão do modelo. Escolha uma rota com folga em cooldowns, controle de risco e concorrência. |
134
134
  | `trimStateDir` | não definido | Sobrepõe o diretório do estado de folds. Vazio = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Envia os folds confirmados para a superfície da sessão (par de eventos: medição shadow-price + replace com `surfaceOp`). OFF mantém a view apenas com splices. |
136
136
 
package/README.ru.md CHANGED
@@ -33,7 +33,7 @@ dsh-switchman — плагин для [DeepSeek Harness](https://github.com/deep
33
33
 
34
34
  **7. `/vision`: картинки по зубам даже чисто текстовой модели.** Когда главная модель не читает изображения, DSH прямо на входе отклоняет сообщения с картинками. Прикрепите картинку и введите `/vision что не так на этой картинке` — изображение будет отдано на чтение модели из мультимодального пула, а вывод вернётся в текущую сессию. Над полем ввода заранее подсказывают: «текущая модель не умеет читать изображения»; если прямая отправка картинки отклонена, она один раз автоматически переоформляется в `/vision` и уходит повторно — вручную ничего переписывать не нужно; если мультимодальный пул не настроен, команда откажется и подскажет, что настроить.
35
35
 
36
- **8. Маршрутизация по намерению: нужная модель выбирается сама.** На странице настроек появляется раздел «Маршрутизация по намерению»: главный переключатель (по умолчанию выключен; для включения нужны классификатор и хотя бы один кандидат), маршрут маленькой модели-классификатора (provider + model + необязательный effort — подходят и решающие модели типа TypeSafe Jev, и обычные разговорные, вывод парсится нестрого), выбор типа классификатора из трёх (auto / decision / chat), независимый список моделей-кандидатов (для каждого: provider + model + необязательный effort + одна строка описания способностей), окно кэша в секундах (по умолчанию 300, подогнано под промпт-кэши поставщиков ~5 минут), порог уверенности для переключения (по умолчанию 80), тайм-аут классификации (по умолчанию 60000 мс), количество сообщений истории (по умолчанию 6) и символьный бюджет (по умолчанию 2400), а также необязательная запасная модель. В селекторе моделей под группой «Auto · Switchman» появляется вход «Auto» (клиент отрисовывает его локализованно — «Авто (маршрутизация по намерению)» на русском); после выбора классификатор оценивает каждое сообщение пользователя, и решение фиксируется на этот ход: если уверенности не хватает или окно кэша ещё открыто, текущая модель остаётся (её кэш переиспользуется); переключение происходит, только когда уверенность высока или текущей модели нет среди кандидатов. Смена проходит бесшумно на уровне вызова — в сессию не вставляется сообщение «модель переключена». Над полем ввода — чип состояния (при автороутинге он показывает текущую модель маршрута и уверенность последнего решения); кандидаты и пороги всегда можно посмотреть на странице настроек.
36
+ **8. Маршрутизация по намерению: нужная модель выбирается сама.** На странице настроек появляется раздел «Маршрутизация по намерению»: главный переключатель (по умолчанию выключен; для включения нужны классификатор и хотя бы один кандидат), маршрут маленькой модели-классификатора (provider + model + необязательный effort — подходят и решающие модели типа TypeSafe Jev, и обычные разговорные, вывод парсится нестрого), выбор типа классификатора из трёх (auto / decision / chat), независимый список моделей-кандидатов (для каждого: provider + model + необязательный effort + одна строка описания способностей), окно кэша в секундах (по умолчанию 300, подогнано под промпт-кэши поставщиков ~5 минут), порог уверенности для переключения (по умолчанию 80), тайм-аут классификации (по умолчанию 60000 мс), количество сообщений истории (по умолчанию 6) и символьный бюджет (по умолчанию 2400), а также необязательная запасная модель (с отдельной необязательной фиксацией effort; если он не задан, используется effort по умолчанию выбранной запасной модели, независимо от effort классификатора). В селекторе моделей под группой «Auto · Switchman» появляется вход «Auto» (клиент отрисовывает его локализованно — «Авто (маршрутизация по намерению)» на русском); после выбора классификатор оценивает каждое сообщение пользователя, и решение фиксируется на этот ход: если уверенности не хватает или окно кэша ещё открыто, текущая модель остаётся (её кэш переиспользуется); переключение происходит, только когда уверенность высока или текущей модели нет среди кандидатов. Смена проходит бесшумно на уровне вызова — в сессию не вставляется сообщение «модель переключена». Над полем ввода — чип состояния (при автороутинге он показывает текущую модель маршрута и уверенность последнего решения); кандидаты и пороги всегда можно посмотреть на странице настроек.
37
37
 
38
38
  Всего одна модель? Всё равно стоит поставить — контроль уровня воды и многоуровневая проверка от числа моделей не зависят, и длинная сессия на одной модели выигрывает от них ничуть не меньше.
39
39
 
@@ -129,8 +129,8 @@ bash <install-dir>/skills/db-query/scripts/setup.sh
129
129
  | `trimWindowTokens` | `0` | Эффективный лимит окна для расчёта уровней: считается от min(окно модели, лимит). `0` = следует за `wmForceTokens`. |
130
130
  | `trimProtectedTail` | `10` | Последние N сообщений никогда не сворачиваются. |
131
131
  | `trimMaxFoldsPerHour` | `30` | Потолок частоты fold-ов боковой модели за скользящий час (аварийные не в счёт). |
132
- | `trimSideModel` | не задан | Маршрут боковой модели, пишущей резюме. Пусто = унаследовать текущую модель сессии. |
133
- | `trimFoldFallbackModel` | не задан | Маршрут повторной попытки, если боковая модель резюме не сработала; pressure-fold затем деградирует до механического. Пусто = без резерва. Выбирайте маршрут с запасом по кулдаунам, риск-контролю и параллелизму. |
132
+ | `trimSideModel` | не задан | Маршрут боковой модели, пишущей резюме. Пусто = следовать provider/model сессии, не наследуя effort вызова; этот маршрут также используют ladder distillation. Effort резюме можно закрепить отдельно; без фиксации метаданные модели определяют минимальный доступный уровень reasoning, а для моделей только с переключателем вкл./выкл. выбирается off. Если reasoning не поддерживается или метаданные недоступны, effort не отправляется и сохраняется поведение модели/адаптера по умолчанию. |
133
+ | `trimFoldFallbackModel` | не задан | Маршрут повторной попытки, если боковая модель резюме не сработала; pressure-fold затем деградирует до механического. Пусто = без резерва. У вручную выбранной запасной модели fold-а независимый effort; если он не задан, применяется та же рекомендация по метаданным, что для модели резюме, а при отсутствии метаданных — умолчание самой модели. Выбирайте маршрут с запасом по кулдаунам, риск-контролю и параллелизму. |
134
134
  | `trimStateDir` | не задан | Переопределяет каталог состояния fold-ов. Пусто = `<dshHome>/.dsh-switchman/state/trim/`. |
135
135
  | `surfaceFold` | `true` | Доставляет зафиксированные fold-ы на поверхность сессии (пара событий: учёт shadow-price + replace с `surfaceOp`). OFF оставляет view только со сплайсами. |
136
136
 
package/README.zh-TW.md CHANGED
@@ -33,7 +33,7 @@ dsh-switchman 是一個 [DeepSeek Harness](https://github.com/deepseek-ai/deepse
33
33
 
34
34
  **7. `/vision`:純文字模型也能處理圖。** 主力模型讀不了圖時,DSH 會在入口直接拒掉帶圖訊息。貼上圖、輸入 `/vision 這張圖錯在哪`,圖片會被交給多模態池的模型去讀,結論回到目前對話。輸入框上方會提前提示「目前模型不支援讀圖」;直接傳圖被拒時,自動改寫成 `/vision` 重送一次,不用手動重來;多模態池沒設時指令會拒絕並給出設定指引。
35
35
 
36
- **8. 意圖識別自動選模型:訊息進來,模型自動落位。** 設定頁新增【意圖識別】分組:主開關(預設關閉,開啟需設定分類器並至少一個候選)、分類器小模型路由(provider + model + 可選 effort,TypeSafe Jev 類決策模型與通用對話模型都支援,輸出寬容解析)、分類器類型三選(auto / decision / chat)、獨立候選模型清單(每個候選 provider + model + 可選 effort + 一句能力描述)、快取視窗秒數(預設 300,對齊廠商 prompt cache 約 5 分鐘)、切換信心閾值(預設 80)、分類逾時(預設 60000ms)、歷史訊息則數(預設 6)與字元預算(預設 2400)、可選備援模型。模型選擇器出現「Auto · Switchman」分組下的「Auto」入口(用戶端渲染為在地化的「自動(意圖識別)」);選中後每條使用者訊息先由分類器判定最合適的候選,同一輪鎖定決策:信心不足或仍在快取視窗內時優先沿用目前模型(快取續用),信心足夠高或目前模型不在候選裡才切換;切換在呼叫層靜默完成,不往對話裡插「模型已切換」。輸入框上方有狀態 chip(自動路由時顯示目前路由模型與上次決策信心),候選與閾值隨時回設定頁查看。
36
+ **8. 意圖識別自動選模型:訊息進來,模型自動落位。** 設定頁新增【意圖識別】分組:主開關(預設關閉,開啟需設定分類器並至少一個候選)、分類器小模型路由(provider + model + 可選 effort,TypeSafe Jev 類決策模型與通用對話模型都支援,輸出寬容解析)、分類器類型三選(auto / decision / chat)、獨立候選模型清單(每個候選 provider + model + 可選 effort + 一句能力描述)、快取視窗秒數(預設 300,對齊廠商 prompt cache 約 5 分鐘)、切換信心閾值(預設 80)、分類逾時(預設 60000ms)、歷史訊息則數(預設 6)與字元預算(預設 2400)、可選備援模型(可獨立固定可選 effort;未固定時使用所選備援模型的預設 effort,與分類器 effort 分開)。模型選擇器出現「Auto · Switchman」分組下的「Auto」入口(用戶端渲染為在地化的「自動(意圖識別)」);選中後每條使用者訊息先由分類器判定最合適的候選,同一輪鎖定決策:信心不足或仍在快取視窗內時優先沿用目前模型(快取續用),信心足夠高或目前模型不在候選裡才切換;切換在呼叫層靜默完成,不往對話裡插「模型已切換」。輸入框上方有狀態 chip(自動路由時顯示目前路由模型與上次決策信心),候選與閾值隨時回設定頁查看。
37
37
 
38
38
  只有一個模型也值得裝——水位控制和分級驗證與模型數量無關,單模型長對話同樣受益。
39
39
 
@@ -129,8 +129,8 @@ bash <安裝目錄>/skills/db-query/scripts/setup.sh
129
129
  | `trimWindowTokens` | `0` | 視窗上限:壓力與緊急檔按 min(模型視窗, 上限) 計算。`0` = 跟隨 `wmForceTokens`。 |
130
130
  | `trimProtectedTail` | `10` | 最後 N 則訊息永不折疊。 |
131
131
  | `trimMaxFoldsPerHour` | `30` | 每滾動小時 side model 折疊的節奏上限(緊急級豁免)。 |
132
- | `trimSideModel` | 未設定 | 寫摘要的 side model 路由。留空 = 繼承對話目前模型。 |
133
- | `trimFoldFallbackModel` | 未設定 | 摘要 side model 失敗時摺疊改用的重試路由;壓力檔仍失敗則退回機械摺疊。留空 = 無備援。盡量選擇冷卻、風控與並行餘量充足的路由。 |
132
+ | `trimSideModel` | 未設定 | 寫摘要的 side model 路由。留空 = 跟隨對話目前 provider/model,不繼承呼叫的 effort;ladder distillation 也使用此路由。摘要 effort 可獨立手動固定;未固定時依模型 metadata 建議最低啟用的 reasoning 層級,僅有開/關選項時選 off。不支援 reasoning 或 metadata 不可用時不傳 effort,沿用模型/配接器預設行為。 |
133
+ | `trimFoldFallbackModel` | 未設定 | 摘要 side model 失敗時摺疊改用的重試路由;壓力檔仍失敗則退回機械摺疊。留空 = 無備援。手動選擇的折疊備援模型可獨立固定 effort;未設定時依與摘要模型相同的模型 metadata 規則建議,metadata 缺失則使用該模型預設值。盡量選擇冷卻、風控與並行餘量充足的路由。 |
134
134
  | `trimStateDir` | 未設定 | 折疊狀態目錄覆蓋。留空 = `<dshHome>/.dsh-switchman/state/trim/`。 |
135
135
  | `surfaceFold` | `true` | 把已提交的 fold 送上對話表面(shadow-price 計量事件 + `surfaceOp` replace 事件對)。關閉則維持僅拼接的 view。 |
136
136
 
package/README.zh.md CHANGED
@@ -33,7 +33,7 @@ dsh-switchman 是一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepse
33
33
 
34
34
  **7. `/vision`:纯文本模型也能处理图。** 主力模型读不了图时,DSH 会在入口直接拒掉带图消息。贴上图、输入 `/vision 这张图错在哪`,图片会被交给多模态池的模型去读,结论回到当前会话。输入框上方会提前提示「当前模型不支持读图」;直接发图被拒时,自动改写成 `/vision` 重发一次,不用手动重来;多模态池没配时命令会拒绝并给出配置指引。
35
35
 
36
- **8. 意图识别自动选模型:消息进来,模型自动落位。** 设置页新增【意图识别】分组:主开关(默认关闭,开启需配置分类器并至少一个候选)、分类器小模型路由(provider + model + 可选 effort,TypeSafe Jev 类决策模型与通用对话模型都支持,输出宽容解析)、分类器类型三选(auto / decision / chat)、独立候选模型列表(每个候选 provider + model + 可选 effort + 一句能力描述)、缓存窗口秒数(默认 300,对齐厂商 prompt cache 约 5 分钟)、切换置信度阈值(默认 80)、分类超时(默认 60000ms)、历史消息条数(默认 6)与字符预算(默认 2400)、可选兜底模型。模型选择器出现「Auto · Switchman」分组下的「Auto」入口(客户端渲染为本地化的「自动(意图识别)」);选中后每条用户消息先由分类器判定最合适的候选,同一轮锁定决策:置信度不足或仍在缓存窗口内时优先沿用当前模型(缓存续用),置信度足够高或当前模型不在候选里才切换;切换在调用层静默完成,不往会话里插「模型已切换」。输入框上方有状态 chip(自动路由时显示当前路由模型与上次决策置信度),候选与阈值随时回设置页查看。
36
+ **8. 意图识别自动选模型:消息进来,模型自动落位。** 设置页新增【意图识别】分组:主开关(默认关闭,开启需配置分类器并至少一个候选)、分类器小模型路由(provider + model + 可选 effort,TypeSafe Jev 类决策模型与通用对话模型都支持,输出宽容解析)、分类器类型三选(auto / decision / chat)、独立候选模型列表(每个候选 provider + model + 可选 effort + 一句能力描述)、缓存窗口秒数(默认 300,对齐厂商 prompt cache 约 5 分钟)、切换置信度阈值(默认 80)、分类超时(默认 60000ms)、历史消息条数(默认 6)与字符预算(默认 2400)、可选兜底模型(可单独固定可选 effort;未固定时使用所选兜底模型的默认 effort,与分类器 effort 独立)。模型选择器出现「Auto · Switchman」分组下的「Auto」入口(客户端渲染为本地化的「自动(意图识别)」);选中后每条用户消息先由分类器判定最合适的候选,同一轮锁定决策:置信度不足或仍在缓存窗口内时优先沿用当前模型(缓存续用),置信度足够高或当前模型不在候选里才切换;切换在调用层静默完成,不往会话里插「模型已切换」。输入框上方有状态 chip(自动路由时显示当前路由模型与上次决策置信度),候选与阈值随时回设置页查看。
37
37
 
38
38
  只有一个模型也值得装——水位控制和分级验证与模型数量无关,单模型长会话同样受益。
39
39
 
@@ -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
- - **派发池**——六张卡片两行三列:上排轻量、机械、主力,下排高难、多模态、复审。卡片按供应商分组勾候选模型;勾上「手动序」变成编号优先列表,用 ↑ ↓ × 调顺序;每条路线可钉思考强度(默认「跟随泳道」)。顶部汇总行实时更新,图中即「已配置 4/6 池 · 排名 2 项 · 模式 建议」。
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` 立即交接(它会把会话引导到空闲边界再压缩,结果可能要等几分钟)。
@@ -129,8 +129,8 @@ bash <安装目录>/skills/db-query/scripts/setup.sh
129
129
  | `trimWindowTokens` | `0` | 窗口上限:压力与紧急档按 min(模型窗口, 上限) 计算。`0` = 跟随 `wmForceTokens`。 |
130
130
  | `trimProtectedTail` | `10` | 最后 N 条消息永不折叠。 |
131
131
  | `trimMaxFoldsPerHour` | `30` | 每滚动小时 side model 折叠的节奏上限(紧急档豁免)。 |
132
- | `trimSideModel` | 未设置 | 写摘要的 side model 路由。留空 = 继承会话当前模型。 |
133
- | `trimFoldFallbackModel` | 未设置 | 摘要 side model 失败时折叠改用的重试路由;压力档仍失败则退回机械折叠。留空 = 无兜底。尽量选择冷却、风控与并发余量充足的路由。 |
132
+ | `trimSideModel` | 未设置 | 写摘要的 side model 路由。留空 = 跟随会话当前 provider/model,不继承调用的 effort;ladder distillation 也使用此路由。摘要 effort 可单独手动固定;未固定时按模型元数据推荐最低启用的 reasoning 档,只有开/关选项时选 off。不支持 reasoning 或元数据不可用时不发送 effort,保留模型/适配器默认行为。 |
133
+ | `trimFoldFallbackModel` | 未设置 | 摘要 side model 失败时折叠改用的重试路由;压力档仍失败则退回机械折叠。留空 = 无兜底。手动选择的折叠兜底模型有独立 effort 固定值;未设置时按摘要模型相同的模型元数据规则推荐,元数据缺失则使用该模型默认值。尽量选择冷却、风控与并发余量充足的路由。 |
134
134
  | `trimStateDir` | 未设置 | 折叠状态目录覆盖。留空 = `<dshHome>/.dsh-switchman/state/trim/`。 |
135
135
  | `surfaceFold` | `true` | 把已提交的 fold 送上会话表面(shadow-price 计量事件 + `surfaceOp` replace 事件对)。关闭则保持仅拼接的 view。 |
136
136