Persist new agent form config
This commit is contained in:
@@ -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,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user