fix: make workspace policy waits selection-safe

This commit is contained in:
2026-08-04 05:55:49 +02:00
parent cddd906719
commit b3ff39fc26
4 changed files with 181 additions and 32 deletions
+7 -3
View File
@@ -84,8 +84,7 @@ export function SteerInput({
setLastUserEntry({ kind: "input", text: trimmed });
onSessionCreating?.(trimmed);
try {
await workspacePolicyGate.waitFor(workspacePreferences.load().workspaceId);
const { id } = await createSession({ question: trimmed, ...workspacePreferences.load() });
const { id } = await createSession({ question: trimmed });
onSessionCreated?.(id);
setText("");
} catch (error) {
@@ -190,6 +189,11 @@ export function ComposerFooter() {
? models.filter((candidate) => allowedModels.includes(`${candidate.provider}/${candidate.id}`))
: models;
useEffect(() => {
if (selectedWorkspace?.revision) workspacePolicyGate.select(workspace);
else workspacePolicyGate.clear();
}, [selectedWorkspace, workspace]);
useEffect(() => {
if (!allowedModels?.length) return;
const selected = preferences.provider && preferences.model
@@ -222,7 +226,7 @@ export function ComposerFooter() {
patch.workspaceId
&& patch.workspaceId !== workspace
&& workspaces.some((candidate) => candidate.id === patch.workspaceId && candidate.revision)
) workspacePolicyGate.begin(patch.workspaceId);
) workspacePolicyGate.select(patch.workspaceId);
const next = workspacePreferences.save({ ...preferences, ...patch });
setPreferences(next);
}