updated orchestion to handle updating and deleting sessions

This commit is contained in:
Storme-bit
2026-04-13 03:04:29 -07:00
parent f6d538f68a
commit 3c6cfa9bf4
5 changed files with 80 additions and 1 deletions

View File

@@ -142,4 +142,21 @@ export async function fetchModels() {
const res = await fetch(`${BASE_URL}/models`); const res = await fetch(`${BASE_URL}/models`);
if(!res.ok) throw new Error(`Failted to fetch models: ${res.status}`); if(!res.ok) throw new Error(`Failted to fetch models: ${res.status}`);
return res.json(); return res.json();
}
export async function renameSession(sessionId, name) {
const res = await fetch(`${BASE_URL}/sessions/${sessionId}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name }),
});
if (!res.ok) throw new Error(`Failed to rename session: ${res.status}`);
return res.json();
}
export async function deleteSession(sessionId) {
const res = await fetch(`${BASE_URL}/sessions/${sessionId}`, {
method: 'DELETE',
});
if (!res.ok) throw new Error(`Failed to delete session: ${res.status}`);
} }

View File

@@ -0,0 +1,22 @@
import { useState, useEffect, useCallback } from 'react';
export function useContextMenu() {
const [menu, setMenu] = useState(null); // { x, y, session }
const open = useCallback((e, session) => {
e.preventDefault();
setMenu({ x: e.clientX, y: e.clientY, session });
}, []);
const close = useCallback(() => setMenu(null), []);
// Close on any click outside
useEffect(() => {
if (!menu) return;
const handler = () => close();
window.addEventListener('click', handler);
return () => window.removeEventListener('click', handler);
}, [menu, close]);
return { menu, open, close };
}

View File

@@ -29,4 +29,25 @@ router.get('/', async (req, res) => {
} }
}) })
router.patch('/:sessionId', async (req, res) => {
const { name } = req.body;
if (!name?.trim()) return res.status(400).json({ error: 'name is required' });
try {
const session = await memory.updateSession(req.params.sessionId, { name: name.trim() });
res.json(session);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.delete('/:sessionId', async (req, res) => {
try {
await memory.deleteSession(req.params.sessionId);
res.status(204).send();
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router; module.exports = router;

View File

@@ -63,6 +63,23 @@ async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPI
return res.json(); return res.json();
} }
async function updateSession(externalId, { name }) {
const res = await fetch(`${BASE_URL}/sessions/by-external/${externalId}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name }),
});
if (!res.ok) throw new Error(`Failed to update session: ${res.status}`);
return res.json();
}
async function deleteSession(externalId) {
const res = await fetch(`${BASE_URL}/sessions/by-external/${externalId}`, {
method: 'DELETE',
});
if (!res.ok) throw new Error(`Failed to delete session: ${res.status}`);
}
module.exports = { module.exports = {
getSessionByExternalId, getSessionByExternalId,
createSession, createSession,
@@ -70,5 +87,7 @@ module.exports = {
createEpisode, createEpisode,
getEpisodeById, getEpisodeById,
getSessionHistory, getSessionHistory,
getSessions getSessions,
updateSession,
deleteSession,
} }