From 05f1fbb04e219d9f20587b6eb02550b1faf8eade Mon Sep 17 00:00:00 2001 From: Storme-bit Date: Fri, 17 Apr 2026 19:43:18 -0700 Subject: [PATCH] bulk episodic deletion --- packages/chat-client/vite.config.js | 1 + packages/orchestration-service/src/index.js | 5 ++++ .../src/routes/episodes.js | 25 +++++++++++++++++++ .../src/services/memory.js | 19 ++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 packages/orchestration-service/src/routes/episodes.js diff --git a/packages/chat-client/vite.config.js b/packages/chat-client/vite.config.js index 68f098a..ad30f68 100644 --- a/packages/chat-client/vite.config.js +++ b/packages/chat-client/vite.config.js @@ -13,6 +13,7 @@ export default defineConfig({ '/sessions': 'http://192.168.0.205:4000', '/models': 'http://192.168.0.205:4000', '/projects': 'http://192.168.0.205:4000', + '/episodes': 'http://192.168.0.205:4000', }, }, }); \ No newline at end of file diff --git a/packages/orchestration-service/src/index.js b/packages/orchestration-service/src/index.js index 6eae722..c0be01e 100644 --- a/packages/orchestration-service/src/index.js +++ b/packages/orchestration-service/src/index.js @@ -1,10 +1,14 @@ require ('dotenv').config(); const express = require('express'); const {getEnv, PORTS, SERVICES, ORCHESTRATION} = require('@nexusai/shared'); + +/**** ROUTERS *** */ const chatRouter = require('./routes/chat'); const sessionsRouter = require('./routes/sessions'); const modelsRouter = require('./routes/models'); const projectsRouter = require('./routes/projects'); +const episodesRouter = require('./routes/episodes') + const cors = require('cors'); const app = express(); @@ -39,6 +43,7 @@ app.use('/chat', chatRouter); app.use('/sessions', sessionsRouter); app.use('/models', modelsRouter); app.use('/projects', projectsRouter); +app.use('/episodes', episodesRouter) /******* Start the server ************/ app.listen(PORT, () => { diff --git a/packages/orchestration-service/src/routes/episodes.js b/packages/orchestration-service/src/routes/episodes.js new file mode 100644 index 0000000..90bf0b0 --- /dev/null +++ b/packages/orchestration-service/src/routes/episodes.js @@ -0,0 +1,25 @@ +const { Router } = require('express'); +const memory = require('../services/memory'); + +const router = Router(); + +router.get('/', async (req, res) => { + const { limit, offset, sessionId, q } = req.query; + try { + const result = await memory.getEpisodes({ limit, offset, sessionId, q }); + res.json(result); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +router.delete('/:id', async (req, res) => { + try { + await memory.deleteEpisode(req.params.id); + res.status(204).send(); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/packages/orchestration-service/src/services/memory.js b/packages/orchestration-service/src/services/memory.js index 3f2b1a4..a9c68e9 100644 --- a/packages/orchestration-service/src/services/memory.js +++ b/packages/orchestration-service/src/services/memory.js @@ -133,6 +133,23 @@ async function getProject(id) { return res.json(); } +async function getEpisodes({ limit = 50, offset = 0, sessionId, q } = {}) { + const url = new URL(`${BASE_URL}/episodes`); + url.searchParams.set('limit', limit); + url.searchParams.set('offset', offset); + if (sessionId) url.searchParams.set('sessionId', sessionId); + if (q) url.searchParams.set('q', q); + + const res = await fetch(url.toString()); + if (!res.ok) throw new Error(`Failed to fetch episodes: ${res.status}`); + return res.json(); +} + +async function deleteEpisode(id) { + const res = await fetch(`${BASE_URL}/episodes/${id}`, { method: 'DELETE' }); + if (!res.ok) throw new Error(`Failed to delete episode: ${res.status}`); +} + module.exports = { getSessionByExternalId, createSession, @@ -149,4 +166,6 @@ module.exports = { deleteProject, getProjectSessions, getProject, + getEpisodes, + deleteEpisode, } \ No newline at end of file