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
@@ -365,12 +365,14 @@ export const settingsDict = {
'settings.agents.sidebar.toast.agentExists': '같은 이름의 에이전트가 이미 존재합니다',
'settings.agents.sidebar.toast.removeOldAfterRenameFailed': '이름 변경 후 이전 에이전트를 제거하지 못했습니다',
'settings.agents.sidebar.toast.renameFailed': '에이전트 이름을 변경하지 못했습니다',
'settings.agents.sidebar.toast.agentRenamed': '에이전트 이름이 "{name}"(으)로 변경되었습니다',
'settings.agents.page.toast.permissionNameRequired': '권한 이름은 필수입니다',
'settings.agents.page.toast.created': '에이전트를 생성했습니다',
'settings.agents.page.toast.updated': '에이전트를 업데이트했습니다',
'settings.agents.page.toast.createFailed': '에이전트를 생성하지 못했습니다',
'settings.agents.page.toast.updateFailed': '에이전트를 업데이트하지 못했습니다',
'settings.agents.page.toast.saveUnexpectedError': '저장 중 오류가 발생했습니다',
'settings.agents.page.toast.savedManualRestart': '디스크에 저장되었습니다. 변경 사항을 적용하려면 연결된 OpenCode 서버를 다시 시작하세요.',
'settings.agents.page.empty.title': '사이드바에서 에이전트를 선택하세요',
'settings.agents.page.empty.description': '또는 새로 생성하세요',
'settings.agents.page.title.new': '새 에이전트',
@@ -926,6 +928,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': '에이전트 순환',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': '즐겨찾기 모델 앞으로 순환',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': '즐겨찾기 모델 뒤로 순환',
'settings.openchamber.keyboardShortcuts.action.open_model_selector.label': '모델 선택기 열기',
'settings.openchamber.keyboardShortcuts.action.expand_input.label': '입력 확장',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '대화 타임라인 열기',
'settings.projects.sidebar.total': '총 {count}개',