repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
The Living OS cockpit
stars
latest
clone command
git clone gitlawb://did:key:z6Mku78K...XywC/living-os-cockp...git clone gitlawb://did:key:z6Mku78K.../living-os-cockp...59751530feat: surface worker supervisor health in live work8h ago| #1 | import { execFile } from 'child_process'; |
| #2 | import { promisify } from 'util'; |
| #3 | import { NextResponse } from 'next/server'; |
| #4 | import { authErrorResponse, getUserContext } from '@/lib/user-context'; |
| #5 | |
| #6 | export const runtime = 'nodejs'; |
| #7 | |
| #8 | const execFileAsync = promisify(execFile); |
| #9 | const PYTHON = process.env.AETHON_PYTHON || '/home/kingbau/Documents/Aethon-Core/.venv/bin/python'; |
| #10 | const TRACKER = process.env.AETHON_DIEM_TRACKER || '/home/kingbau/Documents/Aethon-Core/scripts/diem_epoch_tracker.py'; |
| #11 | const B1_DIEM_TRACKER_MARKER = 'B1_DIEM_TRACKER_5PM_PT_EPOCH'; |
| #12 | |
| #13 | function legacyShape(payload: any) { |
| #14 | const spent = Number(payload?.spent_diem ?? 0); |
| #15 | const budget = Number(payload?.budget_diem ?? 6.03); |
| #16 | return { |
| #17 | ...payload, |
| #18 | marker: B1_DIEM_TRACKER_MARKER, |
| #19 | today: { |
| #20 | usd: spent, |
| #21 | messages: Number(payload?.calls ?? 0), |
| #22 | byModel: payload?.by_model ?? {}, |
| #23 | }, |
| #24 | last7Days: payload?.last7Days ?? {}, |
| #25 | diemStaked: budget, |
| #26 | dailyCapacityUsd: budget, |
| #27 | todayBurnPercent: Number(payload?.percent_used ?? 0), |
| #28 | }; |
| #29 | } |
| #30 | |
| #31 | async function readTracker() { |
| #32 | const { stdout } = await execFileAsync(PYTHON, [TRACKER, 'status', '--json'], { |
| #33 | timeout: 12_000, |
| #34 | maxBuffer: 2_000_000, |
| #35 | env: { |
| #36 | ...process.env, |
| #37 | PYTHONUNBUFFERED: '1', |
| #38 | }, |
| #39 | }); |
| #40 | return JSON.parse(stdout); |
| #41 | } |
| #42 | |
| #43 | export async function GET() { |
| #44 | try { |
| #45 | await getUserContext(); |
| #46 | return NextResponse.json(legacyShape(await readTracker())); |
| #47 | } catch (error: unknown) { |
| #48 | try { |
| #49 | return authErrorResponse(error) as NextResponse; |
| #50 | } catch { |
| #51 | const message = error instanceof Error ? error.message : 'unknown'; |
| #52 | return NextResponse.json( |
| #53 | legacyShape({ |
| #54 | ok: false, |
| #55 | spent_diem: 0, |
| #56 | budget_diem: 6.03, |
| #57 | percent_used: 0, |
| #58 | calls: 0, |
| #59 | by_model: {}, |
| #60 | items: [], |
| #61 | notifications: [], |
| #62 | error: message, |
| #63 | }), |
| #64 | { status: 500 }, |
| #65 | ); |
| #66 | } |
| #67 | } |
| #68 | } |
| #69 |