Persist new agent form config

This commit is contained in:
Mohamed Boudra
2025-12-28 23:36:05 +07:00
parent 69b6f755fa
commit 1269edcb6e
3 changed files with 83 additions and 505 deletions
+21 -12
View File
@@ -20,7 +20,7 @@ import {
import { useDaemonRequest } from "@/hooks/use-daemon-request";
import type { SessionOutboundMessage } from "@server/server/messages";
import { useAggregatedAgents } from "@/hooks/use-aggregated-agents";
import { useAgentFormState } from "@/hooks/use-agent-form-state";
import { useAgentFormState, type CreateAgentInitialValues } from "@/hooks/use-agent-form-state";
import { useDaemonConnections } from "@/contexts/daemon-connections-context";
import { formatConnectionStatus } from "@/utils/daemons";
import { useSessionStore } from "@/stores/session-store";
@@ -74,17 +74,22 @@ export default function DraftAgentScreen() {
const resolvedModel = getParamValue(params.model);
const resolvedWorkingDir = getParamValue(params.workingDir);
const initialValues = useMemo(
() => ({
workingDir: resolvedWorkingDir,
provider: resolvedProvider
? (resolvedProvider as AgentProvider)
: undefined,
modeId: resolvedMode ?? null,
model: resolvedModel ?? null,
}),
[resolvedMode, resolvedModel, resolvedProvider, resolvedWorkingDir]
);
const initialValues = useMemo(() => {
const values: CreateAgentInitialValues = {};
if (resolvedWorkingDir) {
values.workingDir = resolvedWorkingDir;
}
if (resolvedProvider) {
values.provider = resolvedProvider as AgentProvider;
}
if (resolvedMode) {
values.modeId = resolvedMode;
}
if (resolvedModel) {
values.model = resolvedModel;
}
return values;
}, [resolvedMode, resolvedModel, resolvedProvider, resolvedWorkingDir]);
const {
selectedServerId,
setSelectedServerIdFromUser,
@@ -102,6 +107,7 @@ export default function DraftAgentScreen() {
isModelLoading,
modelError,
refreshProviderModels,
persistFormPreferences,
} = useAgentFormState({
initialServerId: resolvedServerId ?? null,
initialValues,
@@ -553,6 +559,8 @@ export default function DraftAgentScreen() {
}
: undefined;
void persistFormPreferences();
const requestId = generateMessageId();
pendingRequestIdRef.current = requestId;
setIsLoading(true);
@@ -573,6 +581,7 @@ export default function DraftAgentScreen() {
isLoading,
isNonGitDirectory,
modeOptions,
persistFormPreferences,
selectedMode,
selectedModel,
selectedProvider,
@@ -63,6 +63,7 @@ type UseAgentFormStateResult = {
) => void;
clearQueuedProviderModelRequest: (serverId: string | null) => void;
workingDirIsEmpty: boolean;
persistFormPreferences: () => Promise<void>;
};
const FORM_PREFERENCES_STORAGE_KEY = "@paseo:create-agent-preferences";
@@ -305,6 +306,55 @@ export function useAgentFormState(
void persist();
}, [selectedMode, selectedProvider, workingDir, selectedModel, selectedServerId]);
const persistFormPreferences = useCallback(async () => {
const payload: {
workingDir?: string;
provider?: AgentProvider;
mode?: string;
model?: string;
serverId?: string;
} = {};
if (typeof workingDir === "string") {
payload.workingDir = workingDir;
}
if (selectedProvider) {
payload.provider = selectedProvider;
}
if (typeof selectedMode === "string") {
payload.mode = selectedMode;
}
if (typeof selectedModel === "string") {
payload.model = selectedModel;
}
if (selectedServerId) {
payload.serverId = selectedServerId;
}
if (Object.keys(payload).length === 0) {
return;
}
try {
const stored = await AsyncStorage.getItem(FORM_PREFERENCES_STORAGE_KEY);
const parsed = stored
? (JSON.parse(stored) as Record<string, unknown>)
: {};
await AsyncStorage.setItem(
FORM_PREFERENCES_STORAGE_KEY,
JSON.stringify({
...parsed,
...payload,
})
);
} catch (error) {
console.error(
"[useAgentFormState] Failed to persist form preferences:",
error
);
}
}, [selectedMode, selectedModel, selectedProvider, selectedServerId, workingDir]);
const clearQueuedProviderModelRequest = useCallback((serverId: string | null) => {
if (!serverId) {
return;
@@ -449,6 +499,7 @@ export function useAgentFormState(
queueProviderModelFetch,
clearQueuedProviderModelRequest,
workingDirIsEmpty,
persistFormPreferences,
}),
[
agentDefinition,
@@ -469,6 +520,7 @@ export function useAgentFormState(
setModelFromUser,
workingDir,
workingDirIsEmpty,
persistFormPreferences,
]
);
}