Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
import { Router, Request, Response } from 'express';
import { getStore } from './store.js';
import { calculateAllResults } from './aggregation.js';
// List of connected SSE clients
const clients: Response[] = [];
export const sseRouter = Router();
/**
* SSE endpoint: GET /api/results/stream
*/
sseRouter.get('/api/results/stream', (req: Request, res: Response) => {
// Set SSE headers
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
// Add client to list
clients.push(res);
// Send initial data immediately on connect
const store = getStore();
const criteriaCount = store.session.config.criteria.length;
const results = calculateAllResults(store.scores, store.teams, criteriaCount);
const payload = JSON.stringify({ results, timestamp: new Date().toISOString() });
res.write(`event: scores_updated\ndata: ${payload}\n\n`);
// Remove client on disconnect
req.on('close', () => {
const index = clients.indexOf(res);
if (index !== -1) {
clients.splice(index, 1);
}
});
});
/**
* Broadcast current results to all connected SSE clients.
* Called whenever scores change.
*/
export function broadcastUpdate(): void {
const store = getStore();
const criteriaCount = store.session.config.criteria.length;
const results = calculateAllResults(store.scores, store.teams, criteriaCount);
const payload = JSON.stringify({ results, timestamp: new Date().toISOString() });
const message = `event: scores_updated\ndata: ${payload}\n\n`;
for (const client of clients) {
client.write(message);
}
}