/** * Shared response shapes for OpenCode config mutations. * * Settings writes persist to disk immediately but defer the OpenCode restart * so the UI can accumulate pending changes and apply them once via * POST /api/config/reload ("Apply & Restart OpenCode"). */ export function buildDeferredRestartResponse(message) { return { success: true, requiresReload: false, requiresRestart: true, restartDeferred: true, message, }; } export function buildExternalManualRestartResponse(message) { return { success: true, requiresReload: false, requiresManualRestart: true, message, }; } export function buildConfigMutationResponse(refreshResult, { liveMessage, manualRestartMessage, deferredMessage }) { if (refreshResult && refreshResult.external) { return buildExternalManualRestartResponse(manualRestartMessage); } // When callers skip the live refresh (deferred apply flow), report a pending restart. if (!refreshResult || refreshResult.deferred === true) { return buildDeferredRestartResponse(deferredMessage || liveMessage); } return { success: true, requiresReload: true, message: liveMessage, reloadDelayMs: refreshResult.reloadDelayMs, }; }