nyk
feat(refactor): ready for manual QA after main sync (#274)
b6ecafa unverified
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 })
}
}