Fix deferred restart review findings.
Drop phantom pending records when provider disconnect removes nothing and when Behavior AGENTS.md payloads are not deferred. Clear the Apply badge after external OpenCode manual-restart guidance. Align skills and commands save toasts with deferred restart feedback, and fix French OpenCode elision. Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
co-authored by
Serhii Dziupin
parent
7c27a39cf4
commit
0cde9e9413
@@ -243,9 +243,7 @@ export const BehaviorPage: React.FC = () => {
|
||||
}
|
||||
|
||||
const payload = await response.json().catch(() => null);
|
||||
if (!noteDeferredRestartFromPayload(payload, 'behavior', { id: 'agents-md' })) {
|
||||
recordDeferredOpenCodeRestart('behavior', { id: 'agents-md' });
|
||||
}
|
||||
const deferred = noteDeferredRestartFromPayload(payload, 'behavior', { id: 'agents-md' });
|
||||
|
||||
await saveBehaviorSetting({
|
||||
globalBehaviorPrompt: content,
|
||||
@@ -253,7 +251,11 @@ export const BehaviorPage: React.FC = () => {
|
||||
|
||||
setPrompt(content);
|
||||
setInitialPrompt(content);
|
||||
toast.success(t('settings.view.pendingRestart.saved'));
|
||||
toast.success(
|
||||
deferred
|
||||
? t('settings.view.pendingRestart.saved')
|
||||
: t('settings.behavior.page.toast.saved'),
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Failed to save behavior:', error);
|
||||
const message = error instanceof Error ? error.message : t('settings.behavior.page.toast.saveFailed');
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Input } from '@/components/ui/input';
|
||||
import { Textarea } from '@/components/ui/textarea';
|
||||
import { toast } from '@/components/ui';
|
||||
import { useCommandsStore, type CommandConfig, type CommandScope } from '@/stores/useCommandsStore';
|
||||
import { usePendingOpenCodeRestartStore } from '@/stores/usePendingOpenCodeRestartStore';
|
||||
import { useShallow } from 'zustand/react/shallow';
|
||||
import { ModelSelector } from '../agents/ModelSelector';
|
||||
import { AgentSelector } from './AgentSelector';
|
||||
@@ -170,7 +171,16 @@ export const CommandsPage: React.FC = () => {
|
||||
}
|
||||
|
||||
if (success) {
|
||||
toast.success(isNewCommand ? t('settings.commands.page.toast.created') : t('settings.commands.page.toast.updated'));
|
||||
const deferred = usePendingOpenCodeRestartStore.getState().changes.some(
|
||||
(change) => change.scope === 'commands' && change.id.startsWith(`commands:${commandName}:`),
|
||||
);
|
||||
toast.success(
|
||||
deferred
|
||||
? t('settings.view.pendingRestart.saved')
|
||||
: isNewCommand
|
||||
? t('settings.commands.page.toast.created')
|
||||
: t('settings.commands.page.toast.updated'),
|
||||
);
|
||||
} else {
|
||||
toast.error(isNewCommand ? t('settings.commands.page.toast.createFailed') : t('settings.commands.page.toast.updateFailed'));
|
||||
}
|
||||
|
||||
@@ -490,9 +490,9 @@ export const ProvidersPage: React.FC = () => {
|
||||
}
|
||||
|
||||
toast.success(t('settings.providers.page.toast.providerDisconnected'));
|
||||
if (!noteDeferredRestartFromPayload(payload, 'providers', { id: providerId })) {
|
||||
recordDeferredOpenCodeRestart('providers', { id: providerId });
|
||||
}
|
||||
// Only accumulate when the server actually deferred a restart (e.g. auth removed).
|
||||
// removed:false payloads must not create a phantom pending Apply & Restart.
|
||||
noteDeferredRestartFromPayload(payload, 'providers', { id: providerId });
|
||||
} catch (error) {
|
||||
console.error('Failed to disconnect provider:', error);
|
||||
toast.error(t('settings.providers.page.toast.providerDisconnectFailed'));
|
||||
|
||||
@@ -6,6 +6,7 @@ import { Textarea } from '@/components/ui/textarea';
|
||||
import { CodeMirrorEditor } from '@/components/ui/CodeMirrorEditor';
|
||||
import { toast } from '@/components/ui';
|
||||
import { useSkillsStore, type SkillConfig, type SkillScope, type SupportingFile, type PendingFile } from '@/stores/useSkillsStore';
|
||||
import { usePendingOpenCodeRestartStore } from '@/stores/usePendingOpenCodeRestartStore';
|
||||
import { useShallow } from 'zustand/react/shallow';
|
||||
import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay';
|
||||
import { SettingsPageLayout } from '@/components/sections/shared/SettingsPageLayout';
|
||||
@@ -352,7 +353,16 @@ const SkillsInstalledPage: React.FC = () => {
|
||||
}
|
||||
|
||||
if (success) {
|
||||
toast.success(isNewSkill ? t('settings.skills.page.toast.skillCreated') : t('settings.skills.page.toast.skillUpdated'));
|
||||
const deferred = usePendingOpenCodeRestartStore.getState().changes.some(
|
||||
(change) => change.scope === 'skills' && change.id.startsWith(`skills:${skillName}:`),
|
||||
);
|
||||
toast.success(
|
||||
deferred
|
||||
? t('settings.view.pendingRestart.saved')
|
||||
: isNewSkill
|
||||
? t('settings.skills.page.toast.skillCreated')
|
||||
: t('settings.skills.page.toast.skillUpdated'),
|
||||
);
|
||||
} else {
|
||||
toast.error(isNewSkill ? t('settings.skills.page.toast.createSkillFailed') : t('settings.skills.page.toast.updateSkillFailed'));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user