Spaces:
Sleeping
Sleeping
| import { NextRequest, NextResponse } from 'next/server' | |
| import { config } from '@/lib/config' | |
| import { requireRole } from '@/lib/auth' | |
| import { mutationLimiter } from '@/lib/rate-limit' | |
| import { reflectPass, reweavePass, generateMOCs } from '@/lib/memory-utils' | |
| import { logger } from '@/lib/logger' | |
| const MEMORY_PATH = config.memoryDir | |
| /** | |
| * Processing pipeline endpoint — runs knowledge maintenance operations. | |
| * Actions: reflect, reweave, generate-moc | |
| * | |
| * These mirror Ars Contexta's 6 Rs processing pipeline, adapted for MC: | |
| * - reflect: Find connection opportunities between files | |
| * - reweave: Identify stale files needing updates from newer linked files | |
| * - generate-moc: Auto-generate Maps of Content from file clusters | |
| */ | |
| export async function POST(request: NextRequest) { | |
| const auth = requireRole(request, 'operator') | |
| if ('error' in auth) return NextResponse.json({ error: auth.error }, { status: auth.status }) | |
| const rateCheck = mutationLimiter(request) | |
| if (rateCheck) return rateCheck | |
| if (!MEMORY_PATH) { | |
| return NextResponse.json({ error: 'Memory directory not configured' }, { status: 500 }) | |
| } | |
| try { | |
| const body = await request.json() | |
| const { action } = body | |
| if (action === 'reflect') { | |
| const result = await reflectPass(MEMORY_PATH) | |
| return NextResponse.json(result) | |
| } | |
| if (action === 'reweave') { | |
| const result = await reweavePass(MEMORY_PATH) | |
| return NextResponse.json(result) | |
| } | |
| if (action === 'generate-moc') { | |
| const mocs = await generateMOCs(MEMORY_PATH) | |
| return NextResponse.json({ | |
| action: 'generate-moc', | |
| groups: mocs, | |
| totalGroups: mocs.length, | |
| totalEntries: mocs.reduce((s, g) => s + g.entries.length, 0), | |
| }) | |
| } | |
| return NextResponse.json({ error: 'Invalid action. Use: reflect, reweave, generate-moc' }, { status: 400 }) | |
| } catch (err) { | |
| logger.error({ err }, 'Memory process API error') | |
| return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) | |
| } | |
| } | |