BMHQ Upgrade: Add Auto-Run, Execution Logs, Change Log, Brainown panels
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const STORAGE_DIR = path.join(process.cwd(), "data", "agent-outputs");
|
||||
|
||||
function ensureDir() {
|
||||
if (!fs.existsSync(STORAGE_DIR)) {
|
||||
fs.mkdirSync(STORAGE_DIR, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function getAgentDir(agent: string) {
|
||||
const dir = path.join(STORAGE_DIR, agent);
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
const { searchParams } = new URL(request.url);
|
||||
const agent = searchParams.get("agent");
|
||||
const date = searchParams.get("date");
|
||||
|
||||
if (!agent) {
|
||||
// Return list of all agent directories
|
||||
ensureDir();
|
||||
const agents = fs.readdirSync(STORAGE_DIR).filter(f =>
|
||||
fs.statSync(path.join(STORAGE_DIR, f)).isDirectory()
|
||||
);
|
||||
return NextResponse.json(agents);
|
||||
}
|
||||
|
||||
const agentDir = getAgentDir(agent);
|
||||
|
||||
if (date) {
|
||||
// Return specific file
|
||||
const file = path.join(agentDir, `${date}.md`);
|
||||
if (fs.existsSync(file)) {
|
||||
const content = fs.readFileSync(file, "utf-8");
|
||||
return NextResponse.json({ agent, date, content });
|
||||
}
|
||||
return NextResponse.json({ error: "Not found" }, { status: 404 });
|
||||
}
|
||||
|
||||
// Return list of files for agent
|
||||
const files = fs.readdirSync(agentDir)
|
||||
.filter(f => f.endsWith('.md'))
|
||||
.map(f => f.replace('.md', ''))
|
||||
.sort()
|
||||
.reverse();
|
||||
|
||||
return NextResponse.json(files);
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const body = await request.json();
|
||||
const { action, agent, date, content } = body;
|
||||
|
||||
if (action === "save") {
|
||||
const agentDir = getAgentDir(agent);
|
||||
const file = path.join(agentDir, `${date}.md`);
|
||||
fs.writeFileSync(file, content);
|
||||
return NextResponse.json({ success: true, file });
|
||||
}
|
||||
|
||||
if (action === "delete") {
|
||||
const agentDir = getAgentDir(agent);
|
||||
const file = path.join(agentDir, `${date}.md`);
|
||||
if (fs.existsSync(file)) {
|
||||
fs.unlinkSync(file);
|
||||
}
|
||||
return NextResponse.json({ success: true });
|
||||
}
|
||||
|
||||
return NextResponse.json({ error: "Invalid action" }, { status: 400 });
|
||||
|
||||
} catch (error) {
|
||||
return NextResponse.json({ error: "Internal server error" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user