diff --git a/packages/chat-client/src/api/orchestration.js b/packages/chat-client/src/api/orchestration.js index 6fe6325..59c7b8e 100644 --- a/packages/chat-client/src/api/orchestration.js +++ b/packages/chat-client/src/api/orchestration.js @@ -4,8 +4,13 @@ const BASE_URL = import.meta.env.VITE_ORCHESTRATION_URL ?? ''; // ── Sessions ──────────────────────────────────────────────── -export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET) { - const res = await fetch(`${BASE_URL}/sessions?limit=${limit}&offset=${offset}`); +export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET, projectId = null) { + const url = new URL(`${BASE_URL}/sessions`, window.location.origin); + url.searchParams.set('limit', limit); + url.searchParams.set('offset', offset); + if (projectId) url.searchParams.set('projectId', projectId); + + const res = await fetch(url.toString()); if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); return res.json(); } diff --git a/packages/memory-service/src/episodic/index.js b/packages/memory-service/src/episodic/index.js index 440950f..69b68ba 100644 --- a/packages/memory-service/src/episodic/index.js +++ b/packages/memory-service/src/episodic/index.js @@ -23,14 +23,25 @@ function getSession(id) { return parseRow(stmt.get(id)); } -function getSessions(limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = 0) { + +function getSessions(limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = 0, projectId = null) { const db = getDB(); - const stmt = db.prepare(` - SELECT * FROM sessions - ORDER BY updated_at DESC - LIMIT ? OFFSET ? - `); - return stmt.all(limit, offset).map(parseRow); + const stmt = projectId + ? db.prepare(` + SELECT * FROM sessions + WHERE project_id = ? + ORDER BY updated_at DESC + LIMIT ? OFFSET ? + `) + : db.prepare(` + SELECT * FROM sessions + ORDER BY updated_at DESC + LIMIT ? OFFSET ? + `); + + return projectId + ? stmt.all(projectId, limit, offset).map(parseRow) + : stmt.all(limit, offset).map(parseRow); } // Retrieves a session by its external ID diff --git a/packages/memory-service/src/index.js b/packages/memory-service/src/index.js index 5ebf93a..a61de26 100644 --- a/packages/memory-service/src/index.js +++ b/packages/memory-service/src/index.js @@ -44,8 +44,8 @@ app.post('/sessions', (req, res) => { }); app.get('/sessions', (req, res) => { - const {limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query; - const sessions = episodic.getSessions(Number(limit), Number(offset)); + const {limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET, projectId } = req.query; + const sessions = episodic.getSessions(Number(limit), Number(offset, projectId ?? null)); res.json(sessions); }) diff --git a/packages/orchestration-service/src/routes/sessions.js b/packages/orchestration-service/src/routes/sessions.js index f1524ff..092dd39 100644 --- a/packages/orchestration-service/src/routes/sessions.js +++ b/packages/orchestration-service/src/routes/sessions.js @@ -22,7 +22,7 @@ router.get('/:sessionId/history', async (req, res) => { router.get('/', async (req, res) => { const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query; try { - const sessions = await memory.getSessions(Number(limit), Number(offset)); + const sessions = await memory.getSessions(Number(limit), Number(offset), projectId ?? null); res.json(sessions); } catch (err) { res.status(500).json({error: err.message}); diff --git a/packages/orchestration-service/src/services/memory.js b/packages/orchestration-service/src/services/memory.js index f8e6df1..1174d12 100644 --- a/packages/orchestration-service/src/services/memory.js +++ b/packages/orchestration-service/src/services/memory.js @@ -55,12 +55,15 @@ async function getSessionHistory(sessionId, limit = EPISODIC.DEFAULT_SESSIONS_LI return res.json(); } -async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET) { - const res = await fetch( - `${BASE_URL}/sessions?limit=${limit}&offset=${offset}` - ); - if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); - return res.json(); +async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET, projectId = null) { + const url = new URL(`${BASE_URL}/sessions`); + url.searchParams.set('limit', limit); + url.searchParams.set('offset', offset); + if (projectId) url.searchParams.set('projectId', projectId); + + const res = await fetch(url.toString()); + if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); + return res.json(); } async function updateSession(externalId, { name, projectId }) {