project summaries addition

This commit is contained in:
Storme-bit
2026-04-26 18:57:25 -07:00
parent 2429fedb2c
commit 4c6bd1df2d
5 changed files with 178 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ const {getEnv, PORTS, EPISODIC} = require('@nexusai/shared');
const { getDB } = require('./db');
const { createProject, getProjects, getProject, updateProject, deleteProject } = require('./db/projects');
const { createSummary, getSummary, getSummariesBySession, getSummariesByProject, updateSummary, deleteSummary } = require('./db/summaries');
const { generateAndStoreProjectSummary } = require('./summarization/project');
const episodic = require('./episodic');
const semantic = require('./semantic');
@@ -242,6 +243,36 @@ app.get('/projects', (req, res) => {
res.json(getProjects());
});
// Generate (or regenerate) a project overview summary on demand
app.post('/projects/:id/summarize', async (req, res) => {
const project = getProject(Number(req.params.id));
if (!project) return res.status(404).json({ error: 'Project not found' });
try {
const summary = await generateAndStoreProjectSummary(Number(req.params.id));
res.status(201).json(summary);
} catch (err) {
// Distinguish "no data" from actual errors — both are non-500 from the client's perspective
if (err.message.includes('No session summaries')) {
return res.status(422).json({ error: err.message });
}
res.status(500).json({ error: err.message });
}
});
// Get the current project overview summary
app.get('/projects/:id/overview', async (req, res) => {
const { getProjectOverviewSummary } = require('./db/summaries');
const summary = getProjectOverviewSummary(Number(req.params.id));
// 200 with null is fine — frontend can handle "no overview yet" gracefully
res.json(summary ?? null);
});
// Get summaries for a project
app.get('/projects/:id/summaries', (req, res) => {
res.json(getSummariesByProject(req.params.id));
});
app.get('/projects/:id', (req, res) => {
const project = getProject(req.params.id);
if (!project) return res.status(404).json({ error: 'Not found' });
@@ -262,6 +293,10 @@ app.delete('/projects/:id', (req, res) => {
});
/*********************************** */
/********** Summary Routes ********** */
/*********************************** */
@@ -285,11 +320,6 @@ app.get('/sessions/:id/summaries', (req, res) => {
res.json(getSummariesBySession(req.params.id));
});
// Get summaries for a project
app.get('/projects/:id/summaries', (req, res) => {
res.json(getSummariesByProject(req.params.id));
});
// Update a summary (for cumulative updates)
app.patch('/summaries/:id', (req, res) => {
const summary = getSummary(req.params.id);