Changeset 0.37.14 (#226)

Co-authored-by: gobha <jasafpro@gmail.com>
Co-committed-by: gobha <jasafpro@gmail.com>
This commit is contained in:
2026-03-23 16:47:48 +00:00
committed by xcaliber
parent fcb998bff9
commit b7746c3004
164 changed files with 6972 additions and 3527 deletions

View File

@@ -33,9 +33,22 @@ export function AppearanceSection() {
p.msgFont = msgFont;
localStorage.setItem('cs-appearance', JSON.stringify(p));
// Apply zoom + font size
document.documentElement.style.zoom = scale !== 100 ? (scale / 100) : '';
document.documentElement.style.setProperty('--msg-font-size', msgFont + 'px');
// Apply scale to content area only (not shell/nav)
const inner = document.getElementById('surfaceInner');
if (inner) {
if (scale !== 100) {
const s = scale / 100;
inner.style.transform = `scale(${s})`;
inner.style.transformOrigin = 'top left';
inner.style.width = (100 / s) + '%';
inner.style.height = (100 / s) + '%';
} else {
inner.style.transform = '';
inner.style.width = '';
inner.style.height = '';
}
}
document.documentElement.style.setProperty('--msg-font', msgFont + 'px');
sw.emit('toast', { message: 'Appearance saved', variant: 'success' });
}, [scale, msgFont]);

View File

@@ -27,7 +27,7 @@ export function GeneralSection() {
temperature: sObj.temperature ?? 0.7,
show_thinking: sObj.show_thinking || false,
});
const modelList = (m?.data || m || []).filter(x => !x.hidden);
const modelList = (m.data || []).filter(x => !x.hidden);
setModels(modelList);
// Set initial max hint

View File

@@ -17,7 +17,7 @@ export default function GitKeysSection() {
const load = useCallback(async () => {
try {
const data = await sw.api.git.credentials.list();
setKeys(Array.isArray(data) ? data : data.data || []);
setKeys(data || []);
} catch (e) { sw.toast(e.message, 'error'); }
finally { setLoading(false); }
}, []);

View File

@@ -25,8 +25,8 @@ export default function KnowledgeSection() {
const load = useCallback(async () => {
try {
const data = await sw.api.knowledge.list();
setKbs(Array.isArray(data) ? data : data.data || []);
const resp = await sw.api.knowledge.list();
setKbs(resp.data || []);
} catch (e) { sw.toast(e.message, 'error'); }
finally { setLoading(false); }
}, []);
@@ -37,7 +37,7 @@ export default function KnowledgeSection() {
setDetail(kb);
try {
const d = await sw.api.knowledge.documents(kb.id);
setDocs(Array.isArray(d) ? d : d.data || []);
setDocs(d.data || []);
} catch (e) { sw.toast(e.message, 'error'); }
}
@@ -80,7 +80,7 @@ export default function KnowledgeSection() {
await sw.api.knowledge.upload(detail.id, file);
sw.toast('Document uploaded', 'success');
const d = await sw.api.knowledge.documents(detail.id);
setDocs(Array.isArray(d) ? d : d.data || []);
setDocs(d.data || []);
} catch (e) { sw.toast(e.message, 'error'); }
};
input.click();

View File

@@ -27,7 +27,7 @@ export default function MemorySection() {
sw.api.memory.list(),
sw.api.memory.count().catch(() => null),
]);
setMemories(Array.isArray(data) ? data : data.data || []);
setMemories(data || []);
if (c != null) setCount(typeof c === 'number' ? c : c.count || 0);
} catch (e) { sw.toast(e.message, 'error'); }
finally { setLoading(false); }

View File

@@ -20,10 +20,10 @@ export function ModelsSection() {
sw.api.models.enabled(),
sw.api.models.preferences(),
]);
setModels(m?.data || m || []);
setModels(m.data || []);
// Build prefs map: model_id → { hidden }
const map = {};
(p?.data || p || []).forEach(x => { map[x.model_id] = x; });
(p || []).forEach(x => { map[x.model_id] = x; });
setPrefs(map);
} catch (e) {
console.warn('[settings/models]', e.message);

View File

@@ -16,7 +16,7 @@ export function PersonasSection() {
const load = useCallback(async () => {
try {
const resp = await sw.api.personas.list();
setPersonas(resp?.data || resp || []);
setPersonas(resp || []);
} catch (e) {
setPersonas([]);
}

View File

@@ -16,7 +16,7 @@ export function ProvidersSection() {
const load = useCallback(async () => {
try {
const resp = await sw.api.providers.list();
setProviders(resp?.configs || resp?.data || resp || []);
setProviders(resp || []);
} catch (e) {
setProviders([]);
}

View File

@@ -26,10 +26,10 @@ export function RolesSection() {
sw.api.models.enabled(),
sw.api.profile.settings(),
]);
const provs = (provResp?.configs || provResp?.data || [])
const provs = (provResp || [])
.filter(c => c.scope === 'personal');
setProviders(provs);
setModels(modResp?.data || modResp || []);
setModels(modResp.data || []);
// Extract role overrides from settings
const overrides = settings?.model_roles || {};

View File

@@ -16,7 +16,7 @@ export default function TasksSection() {
const load = useCallback(async () => {
try {
const data = await sw.api.tasks.list();
setTasks(Array.isArray(data) ? data : data.data || []);
setTasks(data || []);
} catch (e) { sw.toast(e.message, 'error'); }
finally { setLoading(false); }
}, []);

View File

@@ -11,7 +11,7 @@ export function TeamsSection() {
useEffect(() => {
sw.api.teams.mine().then(resp => {
setTeams(resp?.data || resp || []);
setTeams(resp || []);
}).catch(() => setTeams([]));
}, []);

View File

@@ -13,7 +13,7 @@ export default function WorkflowsSection() {
const load = useCallback(async () => {
try {
const data = await sw.api.workflows.list();
setWorkflows(Array.isArray(data) ? data : data.data || []);
setWorkflows(data || []);
} catch (e) { sw.toast(e.message, 'error'); }
finally { setLoading(false); }
}, []);