fix(agents): stop falsely reporting saved agent edits on external OpenCode; make model-selector shortcut customizable (#1839)

* feat(shortcuts): make 'Open model selector' shortcut customizable

Lets users remap the model selector shortcut (e.g. to Ctrl+M) via
Settings > OpenChamber > Shortcuts, matching OpenCode's quick
model-switch keybinding workflow.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>

* fix(agents): surface manual-restart needed when on external OpenCode

Agent prompt/permission/settings edits are written to disk, but an
external OpenCode server (skip-start or auto-detected on the default
port) is not owned by OpenChamber and is only health-probed on config
change, so it keeps serving its startup-cached config until restarted.
The API previously claimed a successful reload, so the UI silently
reverted the edit to the stale/default value on refresh.

Now refreshOpenCodeAfterConfigChange reports whether a real reload
happened; agent routes return requiresManualRestart for external mode;
and the agents UI keeps the saved values and warns the user to restart
their OpenCode server instead of showing a false success. Managed mode
behavior is unchanged (process is restarted and reload is live).

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>

---------

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
Serhii Dziupin
2026-06-26 19:37:45 +03:00
committed by GitHub
co-authored by Serhii Dziupin
parent 3e3cd82a47
commit f4e90ca232
15 changed files with 155 additions and 53 deletions
@@ -62,6 +62,7 @@ export const settingsDict = {
'settings.agents.page.toast.created': 'Agent został utworzony pomyślnie',
'settings.agents.page.toast.permissionNameRequired': 'Nazwa uprawnienia jest wymagana',
'settings.agents.page.toast.saveUnexpectedError': 'Wystąpił błąd podczas zapisywania',
'settings.agents.page.toast.savedManualRestart': 'Zapisano na dysku. Uruchom ponownie połączony serwer OpenCode, aby zastosować zmiany.',
'settings.agents.page.toast.updateFailed': 'Nie udało się zaktualizować agenta',
'settings.agents.page.toast.updated': 'Agent został zaktualizowany pomyślnie',
'settings.agents.sidebar.badge.system': 'system',
@@ -86,6 +87,7 @@ export const settingsDict = {
'settings.agents.sidebar.toast.definitionNotFound': 'Nie znaleziono definicji agenta. Nic nie zmieniono.',
'settings.agents.sidebar.toast.removeOldAfterRenameFailed': 'Nie udało się usunąć starego agenta po zmianie nazwy',
'settings.agents.sidebar.toast.renameFailed': 'Nie udało się zmienić nazwy agenta',
'settings.agents.sidebar.toast.agentRenamed': 'Zmieniono nazwę agenta na "{name}"',
'settings.agents.sidebar.toast.resetFailed': 'Nie udało się zresetować agenta',
'settings.agents.sidebar.total': 'Suma: {count}',
'settings.behavior.page.field.systemPromptPlaceholder': 'Jesteś pomocnym asystentem AI...\n\nUżyj tej przestrzeni, aby zdefiniować absolutne reguły zachowania AI we wszystkich sesjach i u dostawców.',
@@ -713,6 +715,7 @@ export const settingsDict = {
'settings.openchamber.git.showGitignoredAria': 'Wyświetlaj pliki zignorowane przez Git',
'settings.openchamber.git.title': 'Preferencje Git',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': 'Przełącz ulubiony model wstecz',
'settings.openchamber.keyboardShortcuts.action.open_model_selector.label': 'Otwórz wybór modelu',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Przełącz ulubiony model w przód',
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': 'Przełącz zakładkę prawego paska bocznego',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Przełącz zakładkę usług',