diff --git a/static/commands.js b/static/commands.js index e7d7cfdf..aeb25d71 100644 --- a/static/commands.js +++ b/static/commands.js @@ -595,8 +595,8 @@ async function cmdSteer(args){ * Shared implementation for /steer and the busy_input_mode='steer' path. * * Tries the real steer endpoint first. On any non-accept response (no cached - * agent, agent lacks steer, stream dead, etc.) falls back to interrupt mode: - * queue the message + cancel the stream so the existing drain re-sends. + * agent, agent lacks steer, stream dead, etc.) falls back to interrupt+queue: + * queues the message and cancels the stream so the drain re-sends it. * * @param {string} msg - The steer text. * @param {boolean} explicitSteer - True if the user explicitly invoked /steer diff --git a/static/i18n.js b/static/i18n.js index f2c8c3b8..cf7de885 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -101,23 +101,23 @@ const LOCALES = { no_active_session: 'No active session', cmd_queue: 'Queue a message for the next turn', cmd_interrupt: 'Cancel current turn and send a new message', - cmd_steer: 'Steer the agent with a correction (falls back to interrupt)', + cmd_steer: 'Inject a mid-turn correction without interrupting the agent', cmd_queue_no_msg: 'Usage: /queue ', cmd_queue_not_busy: 'No active task — just send normally', cmd_queue_confirm: 'Message queued', cmd_interrupt_no_msg: 'Usage: /interrupt ', cmd_interrupt_confirm: 'Interrupted — sending new message', cmd_steer_no_msg: 'Usage: /steer ', - cmd_steer_fallback: 'Steer unavailable — interrupted and queued instead', + cmd_steer_fallback: 'Steer unavailable — queued for next turn instead', cmd_steer_delivered: 'Steer delivered — agent will see it on its next tool result', steer_leftover_queued: 'Steer queued for next turn', - busy_steer_fallback: 'Steer not available — interrupted instead', + busy_steer_fallback: 'Steer unavailable — queued for next turn', busy_interrupt_confirm: 'Interrupted — sending new message', settings_label_busy_input_mode: 'Busy input mode', - settings_desc_busy_input_mode: 'Controls what happens when you send a message while the agent is running. Queue waits; Interrupt cancels and starts fresh; Steer sends a correction (currently falls back to interrupt).', + settings_desc_busy_input_mode: 'Controls what happens when you send a message while the agent is running. Queue waits; Interrupt cancels and starts fresh; Steer injects a correction mid-turn without interrupting (falls back to queue when agent or stream unavailable).', settings_busy_input_mode_queue: 'Queue follow-up', settings_busy_input_mode_interrupt: 'Interrupt current turn', - settings_busy_input_mode_steer: 'Steer (interrupt + send)', + settings_busy_input_mode_steer: 'Steer (mid-turn correction)', slash_skill_badge:'Skill', slash_skill_desc:'Invoke this skill', @@ -742,7 +742,7 @@ const LOCALES = { busy_steer_fallback: 'Steer недоступен — прервано', busy_interrupt_confirm: 'Прервано — отправка нового сообщения', settings_label_busy_input_mode: 'Режим ввода при занятости', - settings_desc_busy_input_mode: 'Определяет поведение при отправке сообщения во время работы агента. Очередь ждёт; Прерывание отменяет и начинает заново; Steer отправляет исправление (сейчас как прерывание).', + settings_desc_busy_input_mode: '041e043f0440043504340435043b044f04350442 043f043e0432043504340435043d04380435 043f04400438 043e0442043f044004300432043a0435 0441043e043e043104490435043d0438044f 0432043e 043204400435043c044f 044004300431043e0442044b 043004330435043d04420430. 041e04470435044004350434044c 0436043404510442; 041f044004350440044b04320430043d04380435 043e0442043c0435043d044f04350442 0438 043d043004470438043d043004350442 04370430043d043e0432043e; Steer 0432043d043504340440044f04350442 043a043e044004400435043a04460438044e 043104350437 043f044004350440044b04320430043d0438044f.', settings_busy_input_mode_queue: 'Поставить в очередь', settings_busy_input_mode_interrupt: 'Прервать текущий оборот', settings_busy_input_mode_steer: 'Steer (прерывание + отправка)', @@ -1340,23 +1340,23 @@ const LOCALES = { no_active_session: 'No hay ninguna sesión activa', cmd_queue: 'Poner mensaje en cola para el siguiente turno', cmd_interrupt: 'Cancelar turno actual y enviar nuevo mensaje', - cmd_steer: 'Redirigir al agente con una correcci\u00f3n (usa interrupci\u00f3n)', + cmd_steer: 'Inyectar una correcci00f3n a mitad del turno sin interrumpir al agente', cmd_queue_no_msg: 'Uso: /queue ', cmd_queue_not_busy: 'Sin tarea activa \u2014 env\u00eda normalmente', cmd_queue_confirm: 'Mensaje en cola', cmd_interrupt_no_msg: 'Uso: /interrupt ', cmd_interrupt_confirm: 'Interrumpido \u2014 enviando nuevo mensaje', cmd_steer_no_msg: 'Uso: /steer ', - cmd_steer_fallback: 'Steer no disponible \u2014 interrumpido y encolado', + cmd_steer_fallback: 'Steer no disponible 2014 en cola para el siguiente turno', cmd_steer_delivered: 'Steer entregado \u2014 el agente lo ver\u00e1 en su pr\u00f3ximo resultado de herramienta', steer_leftover_queued: 'Steer en cola para el pr\u00f3ximo turno', - busy_steer_fallback: 'Steer no disponible \u2014 interrumpido', + busy_steer_fallback: 'Steer no disponible 2014 en cola para el siguiente turno', busy_interrupt_confirm: 'Interrumpido \u2014 enviando nuevo mensaje', settings_label_busy_input_mode: 'Modo de entrada ocupada', - settings_desc_busy_input_mode: 'Controla qu\u00e9 sucede al enviar un mensaje mientras el agente est\u00e1 activo. Cola espera; Interrumpir cancela y empieza de nuevo; Steer env\u00eda una correcci\u00f3n (actualmente usa interrupci\u00f3n).', + settings_desc_busy_input_mode: 'Controla qu00e9 sucede al enviar mensajes mientras el agente est00e1 activo. Cola espera; Interrumpir cancela y empieza de nuevo; Steer inyecta una correcci00f3n sin interrumpir (usa cola si el agente no est00e1 disponible).', settings_busy_input_mode_queue: 'Poner en cola', settings_busy_input_mode_interrupt: 'Interrumpir turno actual', - settings_busy_input_mode_steer: 'Steer (interrupci\u00f3n + env\u00edo)', + settings_busy_input_mode_steer: 'Steer (correcci00f3n a mitad de turno)', no_personalities: 'No se encontraron personalidades (añádelas a ~/.hermes/personalities/)', available_personalities: 'Personalidades disponibles:', personality_switch_hint: '\n\nUsa `/personality ` para cambiar, o `/personality none` para limpiar.', @@ -1920,23 +1920,23 @@ const LOCALES = { no_active_session: 'Keine aktive Sitzung', cmd_queue: 'Nachricht f\u00fcr den n\u00e4chsten Durchgang einreihen', cmd_interrupt: 'Aktuellen Durchgang abbrechen und neue Nachricht senden', - cmd_steer: 'Agent mit Korrektur lenken (f\u00e4llt zur\u00fcck auf Unterbrechung)', + cmd_steer: 'Korrektursignal einf\u00fcgen ohne Unterbrechung', cmd_queue_no_msg: 'Verwendung: /queue ', cmd_queue_not_busy: 'Keine aktive Aufgabe \u2014 normal senden', cmd_queue_confirm: 'Nachricht eingereiht', cmd_interrupt_no_msg: 'Verwendung: /interrupt ', cmd_interrupt_confirm: 'Unterbrochen \u2014 neue Nachricht wird gesendet', cmd_steer_no_msg: 'Verwendung: /steer ', - cmd_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 unterbrochen und eingereiht', + cmd_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 f\u00fcr n\u00e4chsten Durchgang eingereiht', cmd_steer_delivered: 'Steer geliefert \u2014 der Agent sieht es bei seinem n\u00e4chsten Tool-Ergebnis', steer_leftover_queued: 'Steer f\u00fcr n\u00e4chsten Durchgang eingereiht', - busy_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 unterbrochen', + busy_steer_fallback: 'Steer nicht verf\u00fcgbar \u2014 f\u00fcr n\u00e4chsten Durchgang eingereiht', busy_interrupt_confirm: 'Unterbrochen \u2014 neue Nachricht wird gesendet', settings_label_busy_input_mode: 'Eingabemodus bei Besch\u00e4ftigung', - settings_desc_busy_input_mode: 'Steuert, was passiert, wenn Sie w\u00e4hrend der Agentenaktivit\u00e4t eine Nachricht senden. Warteschlange wartet; Unterbrechen bricht ab und startet neu; Steer sendet eine Korrektur (aktuell wie Unterbrechen).', + settings_desc_busy_input_mode: 'Steuert, was passiert, wenn Sie w\u00e4hrend der Agentenaktivit\u00e4t eine Nachricht senden. Warteschlange wartet; Unterbrechen bricht ab und startet neu; Steer f\u00fcgt eine Korrektur ein ohne zu unterbrechen.', settings_busy_input_mode_queue: 'In Warteschlange einreihen', settings_busy_input_mode_interrupt: 'Aktuellen Durchgang unterbrechen', - settings_busy_input_mode_steer: 'Steer (Unterbrechen + Senden)', + settings_busy_input_mode_steer: 'Steer (Korrektur ohne Unterbrechung)', no_personalities: 'Keine Persönlichkeiten gefunden (füge sie in ~/.hermes/personalities/ hinzu)', available_personalities: 'Verfügbare Persönlichkeiten:', personality_switch_hint: '\n\nNutze `/personality ` zum Wechseln, oder `/personality none` zum Löschen.', @@ -2303,7 +2303,7 @@ const LOCALES = { busy_steer_fallback: 'Steer \u4e0d\u53ef\u7528 \u2014 \u5df2\u4e2d\u65ad', busy_interrupt_confirm: '\u5df2\u4e2d\u65ad \u2014 \u6b63\u5728\u53d1\u9001\u65b0\u6d88\u606f', settings_label_busy_input_mode: '\u5fd9\u788c\u8f93\u5165\u6a21\u5f0f', - settings_desc_busy_input_mode: '\u63a7\u5236\u5728\u4ee3\u7406\u8fd0\u884c\u65f6\u53d1\u9001\u6d88\u606f\u7684\u884c\u4e3a\u3002\u961f\u5217\u7b49\u5f85\uff1b\u4e2d\u65ad\u53d6\u6d88\u5e76\u91cd\u65b0\u5f00\u59cb\uff1bSteer \u53d1\u9001\u7ea0\u6b63\uff08\u76ee\u524d\u56de\u9000\u4e3a\u4e2d\u65ad\uff09\u3002', + settings_desc_busy_input_mode: '\u63a7\u5236\u5728\u4ee3\u7406\u8fd0\u884c\u65f6\u53d1\u9001\u6d88\u606f\u7684\u884c\u4e3a\u3002\u961f\u5217\u7b49\u5f85\uff1b\u4e2d\u65ad\u53d6\u6d88\u5e76\u91cd\u65b0\u5f00\u59cb\uff1bSteer\u4e2d\u9014\u6ce8\u5165\u7ea0\u6b63\uff0c\u4e0d\u4e2d\u65ad\u3002', settings_busy_input_mode_queue: '\u52a0\u5165\u961f\u5217', settings_busy_input_mode_interrupt: '\u4e2d\u65ad\u5f53\u524d\u56de\u5408', settings_busy_input_mode_steer: 'Steer\uff08\u4e2d\u65ad + \u53d1\u9001\uff09', @@ -3215,23 +3215,23 @@ const LOCALES = { no_active_session: '\u7121\u6d3b\u8e8d\u6703\u8a71', cmd_queue: '\u5c07\u8a0a\u606f\u52a0\u5165\u4e0b\u4e00\u8f2a\u7684\u4f47\u5217', cmd_interrupt: '\u53d6\u6d88\u7576\u524d\u56de\u5408\u4e26\u767c\u9001\u65b0\u8a0a\u606f', - cmd_steer: '\u7528\u7d0a\u6b63\u8a0a\u606f\u5f15\u5c0e\u4ee3\u7406\uff08\u56de\u9000\u70ba\u4e2d\u65ad\uff09', + cmd_steer: '\u5728\u56de\u5408\u9032\u884c\u4e2d\u6ce8\u5165\u7d3a\u6b63\uff0c\u4e0d\u4e2d\u65b7\u4ee3\u7406', cmd_queue_no_msg: '\u7528\u6cd5\uff1a/queue <\u8a0a\u606f>', cmd_queue_not_busy: '\u6c92\u6709\u6d3b\u52d5\u4efb\u52d9 \u2014 \u76f4\u63a5\u767c\u9001\u5373\u53ef', cmd_queue_confirm: '\u8a0a\u606f\u5df2\u52a0\u5165\u4f47\u5217', cmd_interrupt_no_msg: '\u7528\u6cd5\uff1a/interrupt <\u8a0a\u606f>', cmd_interrupt_confirm: '\u5df2\u4e2d\u65ad \u2014 \u6b63\u5728\u767c\u9001\u65b0\u8a0a\u606f', cmd_steer_no_msg: '\u7528\u6cd5\uff1a/steer <\u8a0a\u606f>', - cmd_steer_fallback: 'Steer \u4e0d\u53ef\u7528 \u2014 \u5df2\u4e2d\u65ad\u4e26\u52a0\u5165\u4f47\u5217', + cmd_steer_fallback: 'Steer \u4e0d\u53ef\u7528 \u2014 \u5df2\u52a0\u5165\u4e0b\u4e00\u8f2a\u4f47\u5217', cmd_steer_delivered: 'Steer \u5df2\u9001\u9054 \u2014 \u4ee3\u7406\u5c07\u5728\u4e0b\u4e00\u500b\u5de5\u5177\u7d50\u679c\u4e2d\u770b\u5230', steer_leftover_queued: 'Steer \u5df2\u52a0\u5165\u4e0b\u4e00\u8f2a\u4f47\u5217', - busy_steer_fallback: 'Steer \u4e0d\u53ef\u7528 \u2014 \u5df2\u4e2d\u65ad', + busy_steer_fallback: 'Steer \u4e0d\u53ef\u7528 \u2014 \u5df2\u52a0\u5165\u4e0b\u4e00\u8f2a\u4f47\u5217', busy_interrupt_confirm: '\u5df2\u4e2d\u65ad \u2014 \u6b63\u5728\u767c\u9001\u65b0\u8a0a\u606f', settings_label_busy_input_mode: '\u5fd9\u788c\u8f38\u5165\u6a21\u5f0f', - settings_desc_busy_input_mode: '\u63a7\u5236\u5728\u4ee3\u7406\u904b\u884c\u6642\u767c\u9001\u8a0a\u606f\u7684\u884c\u70ba\u3002\u4f47\u5217\u7b49\u5f85\uff1b\u4e2d\u65ad\u53d6\u6d88\u4e26\u91cd\u65b0\u958b\u59cb\uff1bSteer \u767c\u9001\u7d0a\u6b63\uff08\u76ee\u524d\u56de\u9000\u70ba\u4e2d\u65ad\uff09\u3002', + settings_desc_busy_input_mode: '\u63a7\u5236\u5728\u4ee3\u7406\u904b\u884c\u6642\u767c\u9001\u8a0a\u606f\u7684\u884c\u70ba\u3002\u4f47\u5217\u7b49\u5f85\uff1b\u4e2d\u65b7\u53d6\u6d88\u4e26\u91cd\u65b0\u958b\u59cb\uff1bSteer\u4e2d\u9014\u6ce8\u5165\u7d3a\u6b63\uff0c\u4e0d\u4e2d\u65b7\u3002', settings_busy_input_mode_queue: '\u52a0\u5165\u4f47\u5217', settings_busy_input_mode_interrupt: '\u4e2d\u65ad\u7576\u524d\u56de\u5408', - settings_busy_input_mode_steer: 'Steer\uff08\u4e2d\u65ad + \u767c\u9001\uff09', + settings_busy_input_mode_steer: 'Steer\uff08\u4e2d\u9014\u7d3a\u6b63\uff09', no_active_task: '\u7121\u57f7\u884c\u4e2d\u7684\u4efb\u52d9\u53ef\u505c\u6b62\u3002', no_notes_yet: '\u5c1a\u7121\u5099\u8a3b\u3002', no_profile_yet: '\u5c1a\u7121\u8a2d\u5b9a\u6a94\u3002', diff --git a/static/index.html b/static/index.html index 1d63ca13..5bd43af5 100644 --- a/static/index.html +++ b/static/index.html @@ -667,7 +667,7 @@
Controls what happens when you send a message while the agent is running. Queue waits for the current task; Interrupt cancels and starts fresh; Steer injects a mid-turn correction without interrupting (falls back to interrupt when the agent is not yet cached or the stream has ended).