Spaces:
Sleeping
Sleeping
File size: 1,814 Bytes
bbbc03f b6ecafa 959f8d7 bbbc03f b6ecafa bbbc03f b6ecafa bbbc03f b6ecafa bbbc03f 959f8d7 bbbc03f 959f8d7 bbbc03f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import { NextRequest, NextResponse } from 'next/server'
import { requireRole } from '@/lib/auth'
import { syncAgentsFromConfig, previewSyncDiff } from '@/lib/agent-sync'
import { syncLocalAgents } from '@/lib/local-agent-sync'
import { logger } from '@/lib/logger'
/**
* POST /api/agents/sync - Trigger agent config sync
* ?source=local triggers local disk scan instead of openclaw.json sync.
* Requires admin role.
*/
export async function POST(request: NextRequest) {
const auth = requireRole(request, 'admin')
if ('error' in auth) return NextResponse.json({ error: auth.error }, { status: auth.status })
const { searchParams } = new URL(request.url)
const source = searchParams.get('source')
try {
if (source === 'local') {
const result = await syncLocalAgents()
return NextResponse.json(result)
}
const result = await syncAgentsFromConfig(auth.user.username)
if (result.error) {
return NextResponse.json({ error: result.error }, { status: 500 })
}
return NextResponse.json(result)
} catch (error: any) {
logger.error({ err: error }, 'POST /api/agents/sync error')
return NextResponse.json({ error: error.message || 'Sync failed' }, { status: 500 })
}
}
/**
* GET /api/agents/sync - Preview diff between openclaw.json and MC
* Shows what would change without writing.
*/
export async function GET(request: NextRequest) {
const auth = requireRole(request, 'admin')
if ('error' in auth) return NextResponse.json({ error: auth.error }, { status: auth.status })
try {
const diff = await previewSyncDiff()
return NextResponse.json(diff)
} catch (error: any) {
logger.error({ err: error }, 'GET /api/agents/sync error')
return NextResponse.json({ error: error.message || 'Preview failed' }, { status: 500 })
}
}
|