Connect to live data from mounted volumes

This commit is contained in:
Neo
2026-02-19 08:41:00 +00:00
parent 1299db0840
commit 7e8d072880
2 changed files with 177 additions and 132 deletions

79
app/api/data/route.ts Normal file
View File

@@ -0,0 +1,79 @@
import { NextResponse } from 'next/server';
import * as fs from 'fs';
import * as path from 'path';
const DATA_DIR = '/app/data';
// Tasks API
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const type = searchParams.get('type') || 'tasks';
try {
if (type === 'tasks') {
const tasksDir = path.join(DATA_DIR, 'shared-context/jelena-neo-tasks/archive');
const tasks: any[] = [];
if (fs.existsSync(tasksDir)) {
const files = fs.readdirSync(tasksDir).filter(f => f.endsWith('.md'));
for (const file of files) {
const content = fs.readFileSync(path.join(tasksDir, file), 'utf-8');
const title = content.match(/^# Task: (.+)$/m)?.[1] || file;
const created = content.match(/Created: (.+)$/m)?.[1] || '';
const priority = content.match(/Priority: (.+)$/m)?.[1] || 'normal';
tasks.push({
id: file.replace('.md', ''),
title,
created,
priority,
status: 'done',
assignee: 'neo'
});
}
}
return NextResponse.json(tasks);
}
if (type === 'crons') {
const cronFile = path.join(DATA_DIR, 'cron/jobs.json');
if (fs.existsSync(cronFile)) {
const data = JSON.parse(fs.readFileSync(cronFile, 'utf-8'));
const jobs = (data.jobs || []).map((job: any) => ({
name: job.name,
enabled: job.enabled,
status: job.state?.lastStatus || 'unknown',
lastRun: job.state?.lastRunAtMs ? new Date(job.state.lastRunAtMs).toISOString() : null
}));
return NextResponse.json(jobs);
}
return NextResponse.json([]);
}
if (type === 'memory') {
const memoryDir = path.join(DATA_DIR, 'memory');
const memories: any[] = [];
if (fs.existsSync(memoryDir)) {
const files = fs.readdirSync(memoryDir).filter(f => f.endsWith('.md'));
for (const file of files.slice(0, 20)) {
const content = fs.readFileSync(path.join(memoryDir, file), 'utf-8');
const title = content.match(/^# (.+)$/m)?.[1] || file;
const preview = content.substring(0, 150).replace(/[#*]/g, '');
memories.push({
id: file.replace('.md', ''),
title,
date: file.substring(0, 10),
preview
});
}
}
return NextResponse.json(memories);
}
return NextResponse.json({ error: 'Unknown type' }, { status: 400 });
} catch (e: any) {
return NextResponse.json({ error: e.message }, { status: 500 });
}
}