Import verified AzerothAI snapshot from GitHub
Core tests / core (push) Successful in 9m57s
Full verification / application (push) Failing after 5m16s
Full verification / local-brain (push) Failing after 6m15s
Realm simulation / simulated-live-world (push) Failing after 5m32s
WoW integration lab / real-worldserver (push) Canceled after 17m23s
Core tests / core (push) Successful in 9m57s
Full verification / application (push) Failing after 5m16s
Full verification / local-brain (push) Failing after 6m15s
Realm simulation / simulated-live-world (push) Failing after 5m32s
WoW integration lab / real-worldserver (push) Canceled after 17m23s
Source branch: feature/ai-brain-router Source commit: c2a09e0460465201a58aaab56c71424e9a96405e
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import { env } from 'cloudflare:workers';
|
||||
import { z } from 'zod';
|
||||
import { requireAleOperator,rawAleEnabled } from '@/core/ale-auth';
|
||||
import { compileAleOperatorRequest } from '@/core/ale';
|
||||
import { queueAleCommand } from '@/core/ale-store';
|
||||
import type { RuntimeConfig } from '@/core/types';
|
||||
|
||||
const scalar=z.union([z.string(),z.number(),z.boolean(),z.null()]);
|
||||
const schema=z.discriminatedUnion('kind',[
|
||||
z.object({kind:z.literal('command'),command:z.string().min(1).max(500)}),
|
||||
z.object({kind:z.literal('global'),method:z.string().min(1).max(100),args:z.array(scalar).max(32).optional()}),
|
||||
z.object({kind:z.literal('player'),player:z.string().min(1).max(24),method:z.string().min(1).max(100),args:z.array(scalar).max(32).optional()}),
|
||||
z.object({kind:z.literal('playerbotAI'),player:z.string().min(1).max(24),method:z.string().min(1).max(100),args:z.array(scalar).max(32).optional()}),
|
||||
z.object({kind:z.literal('raw'),source:z.string().min(1).max(12000)})
|
||||
]);
|
||||
|
||||
export async function POST(request:Request){
|
||||
const config=env as unknown as RuntimeConfig;
|
||||
try{
|
||||
requireAleOperator(request,config);
|
||||
const text=await request.text();if(text.length>16000)return Response.json({error:'Request too large'},{status:413});
|
||||
const body=schema.parse(JSON.parse(text));
|
||||
const source=compileAleOperatorRequest(body,rawAleEnabled(config));
|
||||
const queued=await queueAleCommand(env.DB!,source);
|
||||
return Response.json({ok:true,command:queued},{status:202});
|
||||
}catch(e){
|
||||
const message=e instanceof Error?e.message:'ALE operator failure';
|
||||
return Response.json({error:message},{status:message.startsWith('Unauthorized')?401:400});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { env } from 'cloudflare:workers';
|
||||
import { requireAleOperator,rawAleEnabled } from '@/core/ale-auth';
|
||||
import { recentAleCommands,recentAleEvents } from '@/core/ale-store';
|
||||
import { ALE_SURFACE } from '@/core/ale';
|
||||
import type { RuntimeConfig } from '@/core/types';
|
||||
|
||||
export async function GET(request:Request){
|
||||
const config=env as unknown as RuntimeConfig;
|
||||
try{
|
||||
requireAleOperator(request,config);
|
||||
const [commands,events]=await Promise.all([recentAleCommands(env.DB!,50),recentAleEvents(env.DB!,100)]);
|
||||
return Response.json({ok:true,rawEnabled:rawAleEnabled(config),surface:ALE_SURFACE,commands,events},{headers:{'Cache-Control':'no-store'}});
|
||||
}catch(e){
|
||||
const message=e instanceof Error?e.message:'ALE status failure';
|
||||
return Response.json({error:message},{status:message.startsWith('Unauthorized')?401:500});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user