aether-server 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -652,13 +652,15 @@ var wsHandler = async (fastify) => {
|
|
|
652
652
|
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
653
653
|
function findStudioPath() {
|
|
654
654
|
const possiblePaths = [
|
|
655
|
-
// Development: workspace structure
|
|
655
|
+
// Development: workspace structure (from packages/server/dist -> packages/react/dist/studio)
|
|
656
656
|
resolve(__dirname, "../../react/dist/studio"),
|
|
657
657
|
resolve(__dirname, "../../../react/dist/studio"),
|
|
658
|
-
// Production: node_modules
|
|
658
|
+
// Production: aether-react as sibling in node_modules (hoisted)
|
|
659
|
+
// From node_modules/aether-server/dist -> node_modules/aether-react/dist/studio
|
|
660
|
+
resolve(__dirname, "../../aether-react/dist/studio"),
|
|
661
|
+
// Production: aether-react nested in aether-server's node_modules (not hoisted)
|
|
659
662
|
resolve(__dirname, "../node_modules/aether-react/dist/studio"),
|
|
660
|
-
|
|
661
|
-
// Fallback: look in parent node_modules
|
|
663
|
+
// Fallback: look in user's project node_modules
|
|
662
664
|
resolve(process.cwd(), "node_modules/aether-react/dist/studio")
|
|
663
665
|
];
|
|
664
666
|
for (const p of possiblePaths) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/app.ts","../src/config.ts","../src/routes/memory.ts","../src/routes/health.ts","../src/routes/trajectory.ts","../src/routes/patterns.ts","../src/routes/ontology.ts","../src/websocket/handler.ts","../src/start.ts"],"sourcesContent":["import { resolve, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { existsSync } from 'fs';\nimport Fastify, { type FastifyInstance } from 'fastify';\nimport cors from '@fastify/cors';\nimport fastifyStatic from '@fastify/static';\nimport websocket from '@fastify/websocket';\nimport { Aether } from 'aether-core';\nimport { type ServerConfig, getDefaultConfig } from './config.js';\nimport { memoryRoutes } from './routes/memory.js';\nimport { healthRoutes } from './routes/health.js';\nimport { trajectoryRoutes } from './routes/trajectory.js';\nimport { patternsRoutes } from './routes/patterns.js';\nimport { ontologyRoutes } from './routes/ontology.js';\nimport { wsHandler } from './websocket/handler.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nfunction findStudioPath(): string | null {\n // Possible locations for studio files\n const possiblePaths = [\n // Development: workspace structure\n resolve(__dirname, '../../react/dist/studio'),\n resolve(__dirname, '../../../react/dist/studio'),\n // Production: node_modules\n resolve(__dirname, '../node_modules/aether-react/dist/studio'),\n resolve(__dirname, '../../node_modules/aether-react/dist/studio'),\n // Fallback: look in parent node_modules\n resolve(process.cwd(), 'node_modules/aether-react/dist/studio'),\n ];\n\n for (const p of possiblePaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n return null;\n}\n\ndeclare module 'fastify' {\n interface FastifyInstance {\n aether: Aether;\n }\n}\n\nexport async function createServer(config: ServerConfig): Promise<FastifyInstance> {\n const mergedConfig = { ...getDefaultConfig(), ...config };\n\n const fastify = Fastify({\n logger: mergedConfig.logging,\n });\n\n // Register plugins\n await fastify.register(cors, {\n origin: mergedConfig.corsOrigin,\n methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],\n });\n\n await fastify.register(websocket);\n\n // Use provided Aether instance or create a new one\n let aether: Aether;\n let ownsAether = false;\n\n if (config.aetherInstance) {\n aether = config.aetherInstance;\n } else if (config.aether) {\n aether = new Aether(config.aether);\n await aether.initialize();\n ownsAether = true;\n } else {\n throw new Error('ServerConfig must include either aetherInstance or aether config');\n }\n\n // Decorate fastify with aether instance\n fastify.decorate('aether', aether);\n\n // Optional API key authentication\n if (mergedConfig.apiKey) {\n fastify.addHook('onRequest', async (request, reply) => {\n // Skip auth for health check\n if (request.url === '/health') return;\n\n const authHeader = request.headers.authorization;\n if (!authHeader || authHeader !== `Bearer ${mergedConfig.apiKey}`) {\n reply.code(401).send({ error: 'Unauthorized' });\n }\n });\n }\n\n // Register routes\n await fastify.register(healthRoutes);\n await fastify.register(memoryRoutes, { prefix: '/api/v1' });\n await fastify.register(trajectoryRoutes, { prefix: '/api/v1' });\n await fastify.register(patternsRoutes, { prefix: '/api/v1' });\n await fastify.register(ontologyRoutes, { prefix: '/api/v1' });\n\n // WebSocket for real-time updates\n await fastify.register(wsHandler);\n\n // Serve Studio UI if enabled\n if (mergedConfig.studio !== false) {\n // Try to find studio files\n const studioPath = mergedConfig.studioPath || findStudioPath();\n\n if (studioPath && existsSync(studioPath)) {\n await fastify.register(fastifyStatic, {\n root: studioPath,\n prefix: '/',\n });\n\n // SPA fallback - serve index.html for all non-API routes\n fastify.setNotFoundHandler((request, reply) => {\n if (request.url.startsWith('/api/') || request.url.startsWith('/ws')) {\n reply.code(404).send({ error: 'Not found' });\n } else {\n reply.sendFile('index.html');\n }\n });\n }\n }\n\n // Cleanup on close - only close aether if we created it\n if (ownsAether) {\n fastify.addHook('onClose', async () => {\n await aether.close();\n });\n }\n\n return fastify;\n}\n","import type { Aether, AetherConfig } from 'aether-core';\n\nexport interface ServerConfig {\n /** Port to listen on */\n port?: number;\n /** Host to bind to */\n host?: string;\n /** CORS origin configuration */\n corsOrigin?: string | string[] | boolean;\n /**\n * Pre-configured Aether instance. When provided, the server uses this\n * instance instead of creating a new one from `aether` config.\n */\n aetherInstance?: Aether;\n /** Aether configuration (used when aetherInstance is not provided) */\n aether?: AetherConfig;\n /** Enable request logging */\n logging?: boolean;\n /** API key for authentication (optional) */\n apiKey?: string;\n /** Enable Studio UI at / (default: true) */\n studio?: boolean;\n /** Custom path to studio static files */\n studioPath?: string;\n}\n\nexport function getDefaultConfig(): Partial<ServerConfig> {\n return {\n port: parseInt(process.env['PORT'] ?? '3000', 10),\n host: process.env['HOST'] ?? '0.0.0.0',\n corsOrigin: process.env['CORS_ORIGIN'] ?? true,\n logging: false,\n studio: true,\n };\n}\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { RetrievalType } from 'aether-core';\n\n// Request schemas\nconst addMemorySchema = z.object({\n content: z.string().min(1),\n actor: z.string().optional(),\n action: z.string().optional(),\n context: z.record(z.unknown()).optional(),\n});\n\nconst querySchema = z.object({\n q: z.string().min(1),\n actor: z.string().optional(),\n type: z.enum(['semantic', 'temporal', 'relational', 'hybrid']).optional(),\n limit: z.coerce.number().min(1).max(100).optional(),\n threshold: z.coerce.number().min(0).max(1).optional(),\n});\n\nconst batchAddSchema = z.object({\n events: z.array(addMemorySchema).min(1).max(100),\n});\n\nexport const memoryRoutes: FastifyPluginAsync = async (fastify) => {\n // List all events (no search required)\n fastify.get<{ Querystring: { limit?: string } }>('/events', async (request) => {\n const limit = request.query.limit ? parseInt(request.query.limit, 10) : 100;\n return fastify.aether.getAll(limit);\n });\n\n // Add a single memory\n fastify.post('/memory', async (request, reply) => {\n const result = addMemorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { content, actor, action, context } = result.data;\n const event = await fastify.aether.add({ content, actor, action, context });\n\n return reply.code(201).send(event);\n });\n\n // Query memories\n fastify.get('/memory', async (request, reply) => {\n const result = querySchema.safeParse(request.query);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid query', details: result.error.issues });\n }\n\n const { q, actor, type, limit, threshold } = result.data;\n const events = await fastify.aether.retrieve(q, {\n actor,\n retrievalType: type as RetrievalType | undefined,\n limit: limit ?? 10,\n threshold,\n });\n\n return events;\n });\n\n // Get memory by ID\n fastify.get<{ Params: { id: string } }>('/memory/:id', async (request, reply) => {\n const event = await fastify.aether.get(request.params.id);\n\n if (!event) {\n return reply.code(404).send({ error: 'Memory not found' });\n }\n\n return event;\n });\n\n // Delete memory by ID\n fastify.delete<{ Params: { id: string } }>('/memory/:id', async (request, reply) => {\n const deleted = await fastify.aether.delete(request.params.id);\n\n if (!deleted) {\n return reply.code(404).send({ error: 'Memory not found' });\n }\n\n return { success: true };\n });\n\n // Batch add memories\n fastify.post('/memory/batch', async (request, reply) => {\n const result = batchAddSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const events = await fastify.aether.addBatch(result.data.events);\n return reply.code(201).send(events);\n });\n\n // Get actor history\n fastify.get<{ Params: { actor: string }; Querystring: { limit?: string } }>(\n '/history/:actor',\n async (request) => {\n const limit = request.query.limit ? parseInt(request.query.limit, 10) : 20;\n const events = await fastify.aether.getHistory(request.params.actor, limit);\n return events;\n }\n );\n\n // Advanced search\n fastify.post('/search', async (request, reply) => {\n const body = request.body as Record<string, unknown>;\n\n // Basic validation\n if (!body || typeof body !== 'object') {\n return reply.code(400).send({ error: 'Invalid request body' });\n }\n\n try {\n const events = await fastify.aether.search({\n semantic: body['semantic'] as { query: string; weight?: number } | undefined,\n temporal: body['temporal'] as { actor: string; recency?: number; weight?: number } | undefined,\n relational: body['relational'] as { contextKeys: string[]; values: unknown[]; weight?: number } | undefined,\n limit: (body['limit'] as number) ?? 10,\n combineStrategy: body['combineStrategy'] as 'union' | 'intersection' | 'weighted' | undefined,\n });\n return events;\n } catch (err) {\n return reply.code(400).send({ error: String(err) });\n }\n });\n\n // Get statistics\n fastify.get('/stats', async () => {\n return fastify.aether.stats();\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\n\nexport const healthRoutes: FastifyPluginAsync = async (fastify) => {\n fastify.get('/health', async (_request, _reply) => {\n const stats = await fastify.aether.stats();\n\n return {\n status: 'ok',\n version: '0.1.0',\n timestamp: new Date().toISOString(),\n storage: stats.storageAdapter,\n embeddings: stats.embeddingProvider,\n events: stats.totalEvents,\n };\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { TrajectoryStatus, TrajectoryOutcome, TrajectoryInferenceMode } from 'aether-core';\n\n// Request schemas\nconst startTrajectorySchema = z.object({\n actor: z.string().min(1),\n context: z.record(z.unknown()).optional(),\n});\n\nconst endTrajectorySchema = z.object({\n outcome: z.enum(['success', 'failure', 'partial']).optional(),\n});\n\nconst addEventSchema = z.object({\n eventId: z.string().min(1),\n});\n\nconst queryTrajectoriesSchema = z.object({\n actor: z.string().optional(),\n status: z.array(z.enum(['active', 'completed', 'abandoned'])).optional(),\n outcome: z.array(z.enum(['success', 'failure', 'partial'])).optional(),\n startTime: z.string().optional(),\n endTime: z.string().optional(),\n inferredFrom: z.enum(['explicit', 'auto']).optional(),\n limit: z.coerce.number().min(1).max(100).optional(),\n offset: z.coerce.number().min(0).optional(),\n order: z.enum(['asc', 'desc']).optional(),\n});\n\nconst inferTrajectoriesSchema = z.object({\n actor: z.string().min(1),\n maxGapMs: z.number().min(1000).optional(),\n minEvents: z.number().min(1).optional(),\n contextOverlapThreshold: z.number().min(0).max(1).optional(),\n useSemanticSimilarity: z.boolean().optional(),\n semanticThreshold: z.number().min(0).max(1).optional(),\n startTime: z.string().optional(),\n endTime: z.string().optional(),\n requiredContextKeys: z.array(z.string()).optional(),\n});\n\nexport const trajectoryRoutes: FastifyPluginAsync = async (fastify) => {\n // Start a new trajectory\n fastify.post('/trajectory', async (request, reply) => {\n const result = startTrajectorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, context } = result.data;\n const trajectoryId = await fastify.aether.startTrajectory(actor, context);\n\n return reply.code(201).send({ id: trajectoryId });\n });\n\n // End a trajectory\n fastify.patch<{ Params: { id: string } }>('/trajectory/:id/end', async (request, reply) => {\n const result = endTrajectorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n try {\n const trajectory = await fastify.aether.endTrajectory(\n request.params.id,\n result.data.outcome as TrajectoryOutcome | undefined\n );\n return trajectory;\n } catch (err) {\n return reply.code(404).send({ error: 'Trajectory not found or already ended' });\n }\n });\n\n // Get a single trajectory\n fastify.get<{ Params: { id: string } }>('/trajectory/:id', async (request, reply) => {\n const trajectory = await fastify.aether.getTrajectory(request.params.id);\n\n if (!trajectory) {\n return reply.code(404).send({ error: 'Trajectory not found' });\n }\n\n return trajectory;\n });\n\n // Get events for a trajectory\n fastify.get<{ Params: { id: string } }>('/trajectory/:id/events', async (request, reply) => {\n try {\n const events = await fastify.aether.getTrajectoryEvents(request.params.id);\n return events;\n } catch (err) {\n return reply.code(404).send({ error: 'Trajectory not found' });\n }\n });\n\n // Add an event to a trajectory\n fastify.post<{ Params: { id: string } }>('/trajectory/:id/events', async (request, reply) => {\n const result = addEventSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n try {\n await fastify.aether.addEventToTrajectory(request.params.id, result.data.eventId);\n return { success: true };\n } catch (err) {\n return reply.code(400).send({ error: String(err) });\n }\n });\n\n // Query trajectories\n fastify.get('/trajectories', async (request, reply) => {\n const result = queryTrajectoriesSchema.safeParse(request.query);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid query', details: result.error.issues });\n }\n\n const { actor, status, outcome, startTime, endTime, inferredFrom, limit, offset, order } = result.data;\n\n const trajectories = await fastify.aether.getTrajectories({\n actor,\n status: status as TrajectoryStatus[] | undefined,\n outcome: outcome as TrajectoryOutcome[] | undefined,\n timeRange: startTime && endTime ? { start: startTime, end: endTime } : undefined,\n inferredFrom: inferredFrom as TrajectoryInferenceMode | undefined,\n limit: limit ?? 20,\n offset,\n order,\n });\n\n return trajectories;\n });\n\n // Get trajectory stats for an actor\n fastify.get<{ Params: { actor: string } }>('/trajectories/:actor/stats', async (request) => {\n const stats = await fastify.aether.getTrajectoryStats(request.params.actor);\n return stats;\n });\n\n // Infer trajectories from events\n fastify.post('/trajectories/infer', async (request, reply) => {\n const result = inferTrajectoriesSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const {\n actor,\n maxGapMs,\n minEvents,\n contextOverlapThreshold,\n useSemanticSimilarity,\n semanticThreshold,\n startTime,\n endTime,\n requiredContextKeys,\n } = result.data;\n\n const trajectories = await fastify.aether.inferTrajectories(actor, {\n maxGapMs,\n minEvents,\n contextOverlapThreshold,\n useSemanticSimilarity,\n semanticThreshold,\n timeRange: startTime && endTime ? { start: startTime, end: endTime } : undefined,\n requiredContextKeys,\n });\n\n return trajectories;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { AnomalySeverity } from 'aether-core';\n\n// Request schemas\nconst patternDetectionSchema = z.object({\n minFrequency: z.number().min(1).optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n minSupport: z.number().min(0).max(1).optional(),\n maxPatternLength: z.number().min(2).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst anomalyDetectionSchema = z.object({\n minDeviationScore: z.number().min(0).max(1).optional(),\n severities: z.array(z.enum(['low', 'medium', 'high'])).optional(),\n limit: z.number().min(1).max(100).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst predictNextSchema = z.object({\n actor: z.string().min(1),\n currentEventId: z.string().min(1),\n topK: z.number().min(1).max(20).optional(),\n includeConfidence: z.boolean().optional(),\n contextWeight: z.number().min(0).max(1).optional(),\n});\n\nconst simulateSchema = z.object({\n actor: z.string().min(1),\n proposedAction: z.string().min(1),\n currentEventId: z.string().optional(),\n context: z.record(z.unknown()).optional(),\n depth: z.number().min(1).max(10).optional(),\n});\n\nexport const patternsRoutes: FastifyPluginAsync = async (fastify) => {\n // Detect patterns for an actor\n fastify.get<{ Params: { actor: string }; Querystring: Record<string, string> }>(\n '/patterns/:actor',\n async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n // Parse numeric values from query string\n const options = patternDetectionSchema.safeParse({\n minFrequency: query.minFrequency ? Number(query.minFrequency) : undefined,\n minConfidence: query.minConfidence ? Number(query.minConfidence) : undefined,\n minSupport: query.minSupport ? Number(query.minSupport) : undefined,\n maxPatternLength: query.maxPatternLength ? Number(query.maxPatternLength) : undefined,\n timeRange:\n query.startTime && query.endTime\n ? { start: query.startTime as string, end: query.endTime as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const patterns = await fastify.aether.detectPatterns(request.params.actor, options.data);\n return patterns;\n }\n );\n\n // Find anomalies for an actor\n fastify.get<{ Params: { actor: string }; Querystring: Record<string, string> }>(\n '/anomalies/:actor',\n async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = anomalyDetectionSchema.safeParse({\n minDeviationScore: query.minDeviationScore ? Number(query.minDeviationScore) : undefined,\n severities: query.severities\n ? (query.severities as string).split(',').map((s) => s.trim())\n : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n timeRange:\n query.startTime && query.endTime\n ? { start: query.startTime as string, end: query.endTime as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const anomalies = await fastify.aether.findAnomalies(request.params.actor, {\n ...options.data,\n severities: options.data.severities as AnomalySeverity[] | undefined,\n });\n return anomalies;\n }\n );\n\n // Get transition probabilities for an actor\n fastify.get<{ Params: { actor: string } }>('/transitions/:actor', async (request) => {\n const matrix = await fastify.aether.getTransitionProbabilities(request.params.actor);\n return matrix;\n });\n\n // Predict next actions\n fastify.post('/predict', async (request, reply) => {\n const result = predictNextSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, currentEventId, topK, includeConfidence, contextWeight } = result.data;\n\n const predictions = await fastify.aether.predictNext(actor, currentEventId, {\n topK,\n includeConfidence,\n contextWeight,\n });\n\n return predictions;\n });\n\n // Simulate an action\n fastify.post('/simulate', async (request, reply) => {\n const result = simulateSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, proposedAction, currentEventId, context, depth } = result.data;\n\n const simulation = await fastify.aether.simulate(actor, proposedAction, {\n currentEventId,\n context,\n depth,\n });\n\n return simulation;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\n\n// Request schemas\nconst discoverOptionsSchema = z.object({\n minFrequency: z.number().min(1).optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n maxTypes: z.number().min(1).max(100).optional(),\n includeExamples: z.boolean().optional(),\n exampleLimit: z.number().min(1).max(20).optional(),\n actors: z.array(z.string()).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst schemaOptionsSchema = z.object({\n includeOptional: z.boolean().optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n format: z.enum(['typescript', 'json-schema', 'both']).optional(),\n});\n\nexport const ontologyRoutes: FastifyPluginAsync = async (fastify) => {\n // Discover entity types from events\n fastify.get('/ontology/entities', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = discoverOptionsSchema.safeParse({\n minFrequency: query['minFrequency'] ? Number(query['minFrequency']) : undefined,\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n maxTypes: query['maxTypes'] ? Number(query['maxTypes']) : undefined,\n includeExamples: query['includeExamples'] === 'true',\n exampleLimit: query['exampleLimit'] ? Number(query['exampleLimit']) : undefined,\n actors: query['actors']\n ? (query['actors'] as string).split(',').map((s) => s.trim())\n : undefined,\n timeRange:\n query['startTime'] && query['endTime']\n ? { start: query['startTime'] as string, end: query['endTime'] as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const entities = await fastify.aether.discoverEntities(options.data);\n return entities;\n });\n\n // Discover relationships between entities\n fastify.get('/ontology/relationships', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = discoverOptionsSchema.safeParse({\n minFrequency: query['minFrequency'] ? Number(query['minFrequency']) : undefined,\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n maxTypes: query['maxTypes'] ? Number(query['maxTypes']) : undefined,\n includeExamples: query['includeExamples'] === 'true',\n exampleLimit: query['exampleLimit'] ? Number(query['exampleLimit']) : undefined,\n actors: query['actors']\n ? (query['actors'] as string).split(',').map((s) => s.trim())\n : undefined,\n timeRange:\n query['startTime'] && query['endTime']\n ? { start: query['startTime'] as string, end: query['endTime'] as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const relationships = await fastify.aether.discoverRelationships(options.data);\n return relationships;\n });\n\n // Generate schema suggestion from discovered ontology\n fastify.get('/ontology/schema', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = schemaOptionsSchema.safeParse({\n includeOptional: query['includeOptional'] === 'true',\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n format: query['format'] as 'typescript' | 'json-schema' | 'both' | undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const schema = await fastify.aether.suggestSchema(options.data);\n return schema;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport type { WebSocket } from 'ws';\nimport type { MemoryEvent, Trajectory, Anomaly } from 'aether-core';\n\ninterface WebSocketMessage {\n type: string;\n data?: unknown;\n}\n\ninterface ClientState {\n socket: WebSocket;\n subscriptions: Set<string>;\n actorFilter?: string;\n}\n\nexport const wsHandler: FastifyPluginAsync = async (fastify) => {\n // Track connected clients with their state\n const clientStates = new Map<WebSocket, ClientState>();\n\n // Helper to broadcast to clients with specific subscription\n const broadcast = (type: string, data: unknown, subscriptionType: string, actorFilter?: string) => {\n const message = JSON.stringify({ type, data });\n\n for (const [socket, state] of clientStates) {\n if (socket.readyState !== 1) continue; // WebSocket.OPEN\n if (!state.subscriptions.has(subscriptionType)) continue;\n if (actorFilter && state.actorFilter && state.actorFilter !== actorFilter) continue;\n\n socket.send(message);\n }\n };\n\n // Subscribe to aether memory events\n const unsubscribeMemory = fastify.aether.subscribe((event: MemoryEvent) => {\n broadcast('memory:added', event, 'memory', event.actor);\n });\n\n // Cleanup on server close\n fastify.addHook('onClose', () => {\n unsubscribeMemory();\n clientStates.clear();\n });\n\n // WebSocket route\n fastify.get('/ws', { websocket: true }, (connection) => {\n const socket = connection.socket;\n const state: ClientState = {\n socket,\n subscriptions: new Set(['memory']), // Default subscription\n actorFilter: undefined,\n };\n clientStates.set(socket, state);\n\n // Send welcome message\n socket.send(\n JSON.stringify({\n type: 'connected',\n data: {\n message: 'Connected to Aether WebSocket',\n availableSubscriptions: ['memory', 'trajectory', 'patterns', 'anomalies'],\n },\n })\n );\n\n // Handle incoming messages\n socket.on('message', async (rawMessage) => {\n try {\n const message = JSON.parse(rawMessage.toString()) as WebSocketMessage;\n const data = message.data as Record<string, unknown> | undefined;\n\n switch (message.type) {\n case 'ping':\n socket.send(JSON.stringify({ type: 'pong' }));\n break;\n\n case 'subscribe':\n // Subscribe to specific event types\n if (data && typeof data === 'object') {\n const types = (data.types as string[]) ?? ['memory'];\n const actor = data.actor as string | undefined;\n\n for (const t of types) {\n state.subscriptions.add(t);\n }\n if (actor) state.actorFilter = actor;\n\n socket.send(\n JSON.stringify({\n type: 'subscribed',\n data: {\n subscriptions: Array.from(state.subscriptions),\n actor: state.actorFilter,\n },\n })\n );\n }\n break;\n\n case 'unsubscribe':\n // Unsubscribe from specific event types\n if (data && typeof data === 'object') {\n const types = (data.types as string[]) ?? [];\n for (const t of types) {\n state.subscriptions.delete(t);\n }\n socket.send(\n JSON.stringify({\n type: 'unsubscribed',\n data: { subscriptions: Array.from(state.subscriptions) },\n })\n );\n }\n break;\n\n case 'add':\n // Add a memory via WebSocket\n if (data && typeof data === 'object' && data.content) {\n const event = await fastify.aether.add({\n content: data.content as string,\n actor: data.actor as string | undefined,\n action: data.action as string | undefined,\n context: data.context as Record<string, unknown> | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'memory:added',\n data: event,\n })\n );\n }\n break;\n\n case 'trajectory:start':\n // Start a trajectory via WebSocket\n if (data && typeof data === 'object' && data.actor) {\n const trajectoryId = await fastify.aether.startTrajectory(\n data.actor as string,\n data.context as Record<string, unknown> | undefined\n );\n socket.send(\n JSON.stringify({\n type: 'trajectory:started',\n data: { id: trajectoryId, actor: data.actor },\n })\n );\n\n // Broadcast to trajectory subscribers\n broadcast('trajectory:started', { id: trajectoryId, actor: data.actor }, 'trajectory', data.actor as string);\n }\n break;\n\n case 'trajectory:end':\n // End a trajectory via WebSocket\n if (data && typeof data === 'object' && data.trajectoryId) {\n try {\n const trajectory = await fastify.aether.endTrajectory(\n data.trajectoryId as string,\n data.outcome as 'success' | 'failure' | 'partial' | undefined\n );\n socket.send(\n JSON.stringify({\n type: 'trajectory:ended',\n data: trajectory,\n })\n );\n\n // Broadcast to trajectory subscribers\n broadcast('trajectory:ended', trajectory, 'trajectory', trajectory.actor);\n } catch (err) {\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: 'Failed to end trajectory' },\n })\n );\n }\n }\n break;\n\n case 'patterns:detect':\n // Detect patterns for an actor\n if (data && typeof data === 'object' && data.actor) {\n const patterns = await fastify.aether.detectPatterns(data.actor as string, {\n minFrequency: data.minFrequency as number | undefined,\n minConfidence: data.minConfidence as number | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'patterns:detected',\n data: { actor: data.actor, patterns },\n })\n );\n }\n break;\n\n case 'anomalies:detect':\n // Find anomalies for an actor\n if (data && typeof data === 'object' && data.actor) {\n const anomalies = await fastify.aether.findAnomalies(data.actor as string, {\n minDeviationScore: data.minDeviationScore as number | undefined,\n limit: data.limit as number | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'anomalies:detected',\n data: { actor: data.actor, anomalies },\n })\n );\n\n // Broadcast high-severity anomalies to subscribers\n const highSeverity = anomalies.filter((a) => a.severity === 'high');\n if (highSeverity.length > 0) {\n broadcast('anomalies:alert', { actor: data.actor, anomalies: highSeverity }, 'anomalies', data.actor as string);\n }\n }\n break;\n\n case 'predict':\n // Get predictions for next actions\n if (data && typeof data === 'object' && data.actor && data.eventId) {\n const predictions = await fastify.aether.predictNext(\n data.actor as string,\n data.eventId as string,\n { topK: data.topK as number | undefined }\n );\n socket.send(\n JSON.stringify({\n type: 'predictions',\n data: { actor: data.actor, eventId: data.eventId, predictions },\n })\n );\n }\n break;\n\n default:\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: `Unknown message type: ${message.type}` },\n })\n );\n }\n } catch (err) {\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: 'Invalid message format or operation failed' },\n })\n );\n }\n });\n\n // Handle disconnect\n socket.on('close', () => {\n clientStates.delete(socket);\n });\n });\n};\n","import { createServer } from './app.js';\nimport type { ServerConfig } from './config.js';\n\nexport async function startServer(config: ServerConfig): Promise<void> {\n const server = await createServer(config);\n\n const port = config.port ?? 3000;\n const host = config.host ?? '0.0.0.0';\n\n try {\n await server.listen({ port, host });\n console.log(`Aether server listening on http://${host}:${port}`);\n } catch (err) {\n server.log.error(err);\n process.exit(1);\n }\n\n // Handle graceful shutdown\n const shutdown = async () => {\n console.log('\\nShutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n"],"mappings":"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","names":["z","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/app.ts","../src/config.ts","../src/routes/memory.ts","../src/routes/health.ts","../src/routes/trajectory.ts","../src/routes/patterns.ts","../src/routes/ontology.ts","../src/websocket/handler.ts","../src/start.ts"],"sourcesContent":["import { resolve, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { existsSync } from 'fs';\nimport Fastify, { type FastifyInstance } from 'fastify';\nimport cors from '@fastify/cors';\nimport fastifyStatic from '@fastify/static';\nimport websocket from '@fastify/websocket';\nimport { Aether } from 'aether-core';\nimport { type ServerConfig, getDefaultConfig } from './config.js';\nimport { memoryRoutes } from './routes/memory.js';\nimport { healthRoutes } from './routes/health.js';\nimport { trajectoryRoutes } from './routes/trajectory.js';\nimport { patternsRoutes } from './routes/patterns.js';\nimport { ontologyRoutes } from './routes/ontology.js';\nimport { wsHandler } from './websocket/handler.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nfunction findStudioPath(): string | null {\n // Possible locations for studio files\n const possiblePaths = [\n // Development: workspace structure (from packages/server/dist -> packages/react/dist/studio)\n resolve(__dirname, '../../react/dist/studio'),\n resolve(__dirname, '../../../react/dist/studio'),\n // Production: aether-react as sibling in node_modules (hoisted)\n // From node_modules/aether-server/dist -> node_modules/aether-react/dist/studio\n resolve(__dirname, '../../aether-react/dist/studio'),\n // Production: aether-react nested in aether-server's node_modules (not hoisted)\n resolve(__dirname, '../node_modules/aether-react/dist/studio'),\n // Fallback: look in user's project node_modules\n resolve(process.cwd(), 'node_modules/aether-react/dist/studio'),\n ];\n\n for (const p of possiblePaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n return null;\n}\n\ndeclare module 'fastify' {\n interface FastifyInstance {\n aether: Aether;\n }\n}\n\nexport async function createServer(config: ServerConfig): Promise<FastifyInstance> {\n const mergedConfig = { ...getDefaultConfig(), ...config };\n\n const fastify = Fastify({\n logger: mergedConfig.logging,\n });\n\n // Register plugins\n await fastify.register(cors, {\n origin: mergedConfig.corsOrigin,\n methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],\n });\n\n await fastify.register(websocket);\n\n // Use provided Aether instance or create a new one\n let aether: Aether;\n let ownsAether = false;\n\n if (config.aetherInstance) {\n aether = config.aetherInstance;\n } else if (config.aether) {\n aether = new Aether(config.aether);\n await aether.initialize();\n ownsAether = true;\n } else {\n throw new Error('ServerConfig must include either aetherInstance or aether config');\n }\n\n // Decorate fastify with aether instance\n fastify.decorate('aether', aether);\n\n // Optional API key authentication\n if (mergedConfig.apiKey) {\n fastify.addHook('onRequest', async (request, reply) => {\n // Skip auth for health check\n if (request.url === '/health') return;\n\n const authHeader = request.headers.authorization;\n if (!authHeader || authHeader !== `Bearer ${mergedConfig.apiKey}`) {\n reply.code(401).send({ error: 'Unauthorized' });\n }\n });\n }\n\n // Register routes\n await fastify.register(healthRoutes);\n await fastify.register(memoryRoutes, { prefix: '/api/v1' });\n await fastify.register(trajectoryRoutes, { prefix: '/api/v1' });\n await fastify.register(patternsRoutes, { prefix: '/api/v1' });\n await fastify.register(ontologyRoutes, { prefix: '/api/v1' });\n\n // WebSocket for real-time updates\n await fastify.register(wsHandler);\n\n // Serve Studio UI if enabled\n if (mergedConfig.studio !== false) {\n // Try to find studio files\n const studioPath = mergedConfig.studioPath || findStudioPath();\n\n if (studioPath && existsSync(studioPath)) {\n await fastify.register(fastifyStatic, {\n root: studioPath,\n prefix: '/',\n });\n\n // SPA fallback - serve index.html for all non-API routes\n fastify.setNotFoundHandler((request, reply) => {\n if (request.url.startsWith('/api/') || request.url.startsWith('/ws')) {\n reply.code(404).send({ error: 'Not found' });\n } else {\n reply.sendFile('index.html');\n }\n });\n }\n }\n\n // Cleanup on close - only close aether if we created it\n if (ownsAether) {\n fastify.addHook('onClose', async () => {\n await aether.close();\n });\n }\n\n return fastify;\n}\n","import type { Aether, AetherConfig } from 'aether-core';\n\nexport interface ServerConfig {\n /** Port to listen on */\n port?: number;\n /** Host to bind to */\n host?: string;\n /** CORS origin configuration */\n corsOrigin?: string | string[] | boolean;\n /**\n * Pre-configured Aether instance. When provided, the server uses this\n * instance instead of creating a new one from `aether` config.\n */\n aetherInstance?: Aether;\n /** Aether configuration (used when aetherInstance is not provided) */\n aether?: AetherConfig;\n /** Enable request logging */\n logging?: boolean;\n /** API key for authentication (optional) */\n apiKey?: string;\n /** Enable Studio UI at / (default: true) */\n studio?: boolean;\n /** Custom path to studio static files */\n studioPath?: string;\n}\n\nexport function getDefaultConfig(): Partial<ServerConfig> {\n return {\n port: parseInt(process.env['PORT'] ?? '3000', 10),\n host: process.env['HOST'] ?? '0.0.0.0',\n corsOrigin: process.env['CORS_ORIGIN'] ?? true,\n logging: false,\n studio: true,\n };\n}\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { RetrievalType } from 'aether-core';\n\n// Request schemas\nconst addMemorySchema = z.object({\n content: z.string().min(1),\n actor: z.string().optional(),\n action: z.string().optional(),\n context: z.record(z.unknown()).optional(),\n});\n\nconst querySchema = z.object({\n q: z.string().min(1),\n actor: z.string().optional(),\n type: z.enum(['semantic', 'temporal', 'relational', 'hybrid']).optional(),\n limit: z.coerce.number().min(1).max(100).optional(),\n threshold: z.coerce.number().min(0).max(1).optional(),\n});\n\nconst batchAddSchema = z.object({\n events: z.array(addMemorySchema).min(1).max(100),\n});\n\nexport const memoryRoutes: FastifyPluginAsync = async (fastify) => {\n // List all events (no search required)\n fastify.get<{ Querystring: { limit?: string } }>('/events', async (request) => {\n const limit = request.query.limit ? parseInt(request.query.limit, 10) : 100;\n return fastify.aether.getAll(limit);\n });\n\n // Add a single memory\n fastify.post('/memory', async (request, reply) => {\n const result = addMemorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { content, actor, action, context } = result.data;\n const event = await fastify.aether.add({ content, actor, action, context });\n\n return reply.code(201).send(event);\n });\n\n // Query memories\n fastify.get('/memory', async (request, reply) => {\n const result = querySchema.safeParse(request.query);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid query', details: result.error.issues });\n }\n\n const { q, actor, type, limit, threshold } = result.data;\n const events = await fastify.aether.retrieve(q, {\n actor,\n retrievalType: type as RetrievalType | undefined,\n limit: limit ?? 10,\n threshold,\n });\n\n return events;\n });\n\n // Get memory by ID\n fastify.get<{ Params: { id: string } }>('/memory/:id', async (request, reply) => {\n const event = await fastify.aether.get(request.params.id);\n\n if (!event) {\n return reply.code(404).send({ error: 'Memory not found' });\n }\n\n return event;\n });\n\n // Delete memory by ID\n fastify.delete<{ Params: { id: string } }>('/memory/:id', async (request, reply) => {\n const deleted = await fastify.aether.delete(request.params.id);\n\n if (!deleted) {\n return reply.code(404).send({ error: 'Memory not found' });\n }\n\n return { success: true };\n });\n\n // Batch add memories\n fastify.post('/memory/batch', async (request, reply) => {\n const result = batchAddSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const events = await fastify.aether.addBatch(result.data.events);\n return reply.code(201).send(events);\n });\n\n // Get actor history\n fastify.get<{ Params: { actor: string }; Querystring: { limit?: string } }>(\n '/history/:actor',\n async (request) => {\n const limit = request.query.limit ? parseInt(request.query.limit, 10) : 20;\n const events = await fastify.aether.getHistory(request.params.actor, limit);\n return events;\n }\n );\n\n // Advanced search\n fastify.post('/search', async (request, reply) => {\n const body = request.body as Record<string, unknown>;\n\n // Basic validation\n if (!body || typeof body !== 'object') {\n return reply.code(400).send({ error: 'Invalid request body' });\n }\n\n try {\n const events = await fastify.aether.search({\n semantic: body['semantic'] as { query: string; weight?: number } | undefined,\n temporal: body['temporal'] as { actor: string; recency?: number; weight?: number } | undefined,\n relational: body['relational'] as { contextKeys: string[]; values: unknown[]; weight?: number } | undefined,\n limit: (body['limit'] as number) ?? 10,\n combineStrategy: body['combineStrategy'] as 'union' | 'intersection' | 'weighted' | undefined,\n });\n return events;\n } catch (err) {\n return reply.code(400).send({ error: String(err) });\n }\n });\n\n // Get statistics\n fastify.get('/stats', async () => {\n return fastify.aether.stats();\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\n\nexport const healthRoutes: FastifyPluginAsync = async (fastify) => {\n fastify.get('/health', async (_request, _reply) => {\n const stats = await fastify.aether.stats();\n\n return {\n status: 'ok',\n version: '0.1.0',\n timestamp: new Date().toISOString(),\n storage: stats.storageAdapter,\n embeddings: stats.embeddingProvider,\n events: stats.totalEvents,\n };\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { TrajectoryStatus, TrajectoryOutcome, TrajectoryInferenceMode } from 'aether-core';\n\n// Request schemas\nconst startTrajectorySchema = z.object({\n actor: z.string().min(1),\n context: z.record(z.unknown()).optional(),\n});\n\nconst endTrajectorySchema = z.object({\n outcome: z.enum(['success', 'failure', 'partial']).optional(),\n});\n\nconst addEventSchema = z.object({\n eventId: z.string().min(1),\n});\n\nconst queryTrajectoriesSchema = z.object({\n actor: z.string().optional(),\n status: z.array(z.enum(['active', 'completed', 'abandoned'])).optional(),\n outcome: z.array(z.enum(['success', 'failure', 'partial'])).optional(),\n startTime: z.string().optional(),\n endTime: z.string().optional(),\n inferredFrom: z.enum(['explicit', 'auto']).optional(),\n limit: z.coerce.number().min(1).max(100).optional(),\n offset: z.coerce.number().min(0).optional(),\n order: z.enum(['asc', 'desc']).optional(),\n});\n\nconst inferTrajectoriesSchema = z.object({\n actor: z.string().min(1),\n maxGapMs: z.number().min(1000).optional(),\n minEvents: z.number().min(1).optional(),\n contextOverlapThreshold: z.number().min(0).max(1).optional(),\n useSemanticSimilarity: z.boolean().optional(),\n semanticThreshold: z.number().min(0).max(1).optional(),\n startTime: z.string().optional(),\n endTime: z.string().optional(),\n requiredContextKeys: z.array(z.string()).optional(),\n});\n\nexport const trajectoryRoutes: FastifyPluginAsync = async (fastify) => {\n // Start a new trajectory\n fastify.post('/trajectory', async (request, reply) => {\n const result = startTrajectorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, context } = result.data;\n const trajectoryId = await fastify.aether.startTrajectory(actor, context);\n\n return reply.code(201).send({ id: trajectoryId });\n });\n\n // End a trajectory\n fastify.patch<{ Params: { id: string } }>('/trajectory/:id/end', async (request, reply) => {\n const result = endTrajectorySchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n try {\n const trajectory = await fastify.aether.endTrajectory(\n request.params.id,\n result.data.outcome as TrajectoryOutcome | undefined\n );\n return trajectory;\n } catch (err) {\n return reply.code(404).send({ error: 'Trajectory not found or already ended' });\n }\n });\n\n // Get a single trajectory\n fastify.get<{ Params: { id: string } }>('/trajectory/:id', async (request, reply) => {\n const trajectory = await fastify.aether.getTrajectory(request.params.id);\n\n if (!trajectory) {\n return reply.code(404).send({ error: 'Trajectory not found' });\n }\n\n return trajectory;\n });\n\n // Get events for a trajectory\n fastify.get<{ Params: { id: string } }>('/trajectory/:id/events', async (request, reply) => {\n try {\n const events = await fastify.aether.getTrajectoryEvents(request.params.id);\n return events;\n } catch (err) {\n return reply.code(404).send({ error: 'Trajectory not found' });\n }\n });\n\n // Add an event to a trajectory\n fastify.post<{ Params: { id: string } }>('/trajectory/:id/events', async (request, reply) => {\n const result = addEventSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n try {\n await fastify.aether.addEventToTrajectory(request.params.id, result.data.eventId);\n return { success: true };\n } catch (err) {\n return reply.code(400).send({ error: String(err) });\n }\n });\n\n // Query trajectories\n fastify.get('/trajectories', async (request, reply) => {\n const result = queryTrajectoriesSchema.safeParse(request.query);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid query', details: result.error.issues });\n }\n\n const { actor, status, outcome, startTime, endTime, inferredFrom, limit, offset, order } = result.data;\n\n const trajectories = await fastify.aether.getTrajectories({\n actor,\n status: status as TrajectoryStatus[] | undefined,\n outcome: outcome as TrajectoryOutcome[] | undefined,\n timeRange: startTime && endTime ? { start: startTime, end: endTime } : undefined,\n inferredFrom: inferredFrom as TrajectoryInferenceMode | undefined,\n limit: limit ?? 20,\n offset,\n order,\n });\n\n return trajectories;\n });\n\n // Get trajectory stats for an actor\n fastify.get<{ Params: { actor: string } }>('/trajectories/:actor/stats', async (request) => {\n const stats = await fastify.aether.getTrajectoryStats(request.params.actor);\n return stats;\n });\n\n // Infer trajectories from events\n fastify.post('/trajectories/infer', async (request, reply) => {\n const result = inferTrajectoriesSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const {\n actor,\n maxGapMs,\n minEvents,\n contextOverlapThreshold,\n useSemanticSimilarity,\n semanticThreshold,\n startTime,\n endTime,\n requiredContextKeys,\n } = result.data;\n\n const trajectories = await fastify.aether.inferTrajectories(actor, {\n maxGapMs,\n minEvents,\n contextOverlapThreshold,\n useSemanticSimilarity,\n semanticThreshold,\n timeRange: startTime && endTime ? { start: startTime, end: endTime } : undefined,\n requiredContextKeys,\n });\n\n return trajectories;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\nimport type { AnomalySeverity } from 'aether-core';\n\n// Request schemas\nconst patternDetectionSchema = z.object({\n minFrequency: z.number().min(1).optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n minSupport: z.number().min(0).max(1).optional(),\n maxPatternLength: z.number().min(2).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst anomalyDetectionSchema = z.object({\n minDeviationScore: z.number().min(0).max(1).optional(),\n severities: z.array(z.enum(['low', 'medium', 'high'])).optional(),\n limit: z.number().min(1).max(100).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst predictNextSchema = z.object({\n actor: z.string().min(1),\n currentEventId: z.string().min(1),\n topK: z.number().min(1).max(20).optional(),\n includeConfidence: z.boolean().optional(),\n contextWeight: z.number().min(0).max(1).optional(),\n});\n\nconst simulateSchema = z.object({\n actor: z.string().min(1),\n proposedAction: z.string().min(1),\n currentEventId: z.string().optional(),\n context: z.record(z.unknown()).optional(),\n depth: z.number().min(1).max(10).optional(),\n});\n\nexport const patternsRoutes: FastifyPluginAsync = async (fastify) => {\n // Detect patterns for an actor\n fastify.get<{ Params: { actor: string }; Querystring: Record<string, string> }>(\n '/patterns/:actor',\n async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n // Parse numeric values from query string\n const options = patternDetectionSchema.safeParse({\n minFrequency: query.minFrequency ? Number(query.minFrequency) : undefined,\n minConfidence: query.minConfidence ? Number(query.minConfidence) : undefined,\n minSupport: query.minSupport ? Number(query.minSupport) : undefined,\n maxPatternLength: query.maxPatternLength ? Number(query.maxPatternLength) : undefined,\n timeRange:\n query.startTime && query.endTime\n ? { start: query.startTime as string, end: query.endTime as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const patterns = await fastify.aether.detectPatterns(request.params.actor, options.data);\n return patterns;\n }\n );\n\n // Find anomalies for an actor\n fastify.get<{ Params: { actor: string }; Querystring: Record<string, string> }>(\n '/anomalies/:actor',\n async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = anomalyDetectionSchema.safeParse({\n minDeviationScore: query.minDeviationScore ? Number(query.minDeviationScore) : undefined,\n severities: query.severities\n ? (query.severities as string).split(',').map((s) => s.trim())\n : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n timeRange:\n query.startTime && query.endTime\n ? { start: query.startTime as string, end: query.endTime as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const anomalies = await fastify.aether.findAnomalies(request.params.actor, {\n ...options.data,\n severities: options.data.severities as AnomalySeverity[] | undefined,\n });\n return anomalies;\n }\n );\n\n // Get transition probabilities for an actor\n fastify.get<{ Params: { actor: string } }>('/transitions/:actor', async (request) => {\n const matrix = await fastify.aether.getTransitionProbabilities(request.params.actor);\n return matrix;\n });\n\n // Predict next actions\n fastify.post('/predict', async (request, reply) => {\n const result = predictNextSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, currentEventId, topK, includeConfidence, contextWeight } = result.data;\n\n const predictions = await fastify.aether.predictNext(actor, currentEventId, {\n topK,\n includeConfidence,\n contextWeight,\n });\n\n return predictions;\n });\n\n // Simulate an action\n fastify.post('/simulate', async (request, reply) => {\n const result = simulateSchema.safeParse(request.body);\n if (!result.success) {\n return reply.code(400).send({ error: 'Invalid request', details: result.error.issues });\n }\n\n const { actor, proposedAction, currentEventId, context, depth } = result.data;\n\n const simulation = await fastify.aether.simulate(actor, proposedAction, {\n currentEventId,\n context,\n depth,\n });\n\n return simulation;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport { z } from 'zod';\n\n// Request schemas\nconst discoverOptionsSchema = z.object({\n minFrequency: z.number().min(1).optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n maxTypes: z.number().min(1).max(100).optional(),\n includeExamples: z.boolean().optional(),\n exampleLimit: z.number().min(1).max(20).optional(),\n actors: z.array(z.string()).optional(),\n timeRange: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .optional(),\n});\n\nconst schemaOptionsSchema = z.object({\n includeOptional: z.boolean().optional(),\n minConfidence: z.number().min(0).max(1).optional(),\n format: z.enum(['typescript', 'json-schema', 'both']).optional(),\n});\n\nexport const ontologyRoutes: FastifyPluginAsync = async (fastify) => {\n // Discover entity types from events\n fastify.get('/ontology/entities', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = discoverOptionsSchema.safeParse({\n minFrequency: query['minFrequency'] ? Number(query['minFrequency']) : undefined,\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n maxTypes: query['maxTypes'] ? Number(query['maxTypes']) : undefined,\n includeExamples: query['includeExamples'] === 'true',\n exampleLimit: query['exampleLimit'] ? Number(query['exampleLimit']) : undefined,\n actors: query['actors']\n ? (query['actors'] as string).split(',').map((s) => s.trim())\n : undefined,\n timeRange:\n query['startTime'] && query['endTime']\n ? { start: query['startTime'] as string, end: query['endTime'] as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const entities = await fastify.aether.discoverEntities(options.data);\n return entities;\n });\n\n // Discover relationships between entities\n fastify.get('/ontology/relationships', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = discoverOptionsSchema.safeParse({\n minFrequency: query['minFrequency'] ? Number(query['minFrequency']) : undefined,\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n maxTypes: query['maxTypes'] ? Number(query['maxTypes']) : undefined,\n includeExamples: query['includeExamples'] === 'true',\n exampleLimit: query['exampleLimit'] ? Number(query['exampleLimit']) : undefined,\n actors: query['actors']\n ? (query['actors'] as string).split(',').map((s) => s.trim())\n : undefined,\n timeRange:\n query['startTime'] && query['endTime']\n ? { start: query['startTime'] as string, end: query['endTime'] as string }\n : undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const relationships = await fastify.aether.discoverRelationships(options.data);\n return relationships;\n });\n\n // Generate schema suggestion from discovered ontology\n fastify.get('/ontology/schema', async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n\n const options = schemaOptionsSchema.safeParse({\n includeOptional: query['includeOptional'] === 'true',\n minConfidence: query['minConfidence'] ? Number(query['minConfidence']) : undefined,\n format: query['format'] as 'typescript' | 'json-schema' | 'both' | undefined,\n });\n\n if (!options.success) {\n return reply.code(400).send({ error: 'Invalid query', details: options.error.issues });\n }\n\n const schema = await fastify.aether.suggestSchema(options.data);\n return schema;\n });\n};\n","import type { FastifyPluginAsync } from 'fastify';\nimport type { WebSocket } from 'ws';\nimport type { MemoryEvent, Trajectory, Anomaly } from 'aether-core';\n\ninterface WebSocketMessage {\n type: string;\n data?: unknown;\n}\n\ninterface ClientState {\n socket: WebSocket;\n subscriptions: Set<string>;\n actorFilter?: string;\n}\n\nexport const wsHandler: FastifyPluginAsync = async (fastify) => {\n // Track connected clients with their state\n const clientStates = new Map<WebSocket, ClientState>();\n\n // Helper to broadcast to clients with specific subscription\n const broadcast = (type: string, data: unknown, subscriptionType: string, actorFilter?: string) => {\n const message = JSON.stringify({ type, data });\n\n for (const [socket, state] of clientStates) {\n if (socket.readyState !== 1) continue; // WebSocket.OPEN\n if (!state.subscriptions.has(subscriptionType)) continue;\n if (actorFilter && state.actorFilter && state.actorFilter !== actorFilter) continue;\n\n socket.send(message);\n }\n };\n\n // Subscribe to aether memory events\n const unsubscribeMemory = fastify.aether.subscribe((event: MemoryEvent) => {\n broadcast('memory:added', event, 'memory', event.actor);\n });\n\n // Cleanup on server close\n fastify.addHook('onClose', () => {\n unsubscribeMemory();\n clientStates.clear();\n });\n\n // WebSocket route\n fastify.get('/ws', { websocket: true }, (connection) => {\n const socket = connection.socket;\n const state: ClientState = {\n socket,\n subscriptions: new Set(['memory']), // Default subscription\n actorFilter: undefined,\n };\n clientStates.set(socket, state);\n\n // Send welcome message\n socket.send(\n JSON.stringify({\n type: 'connected',\n data: {\n message: 'Connected to Aether WebSocket',\n availableSubscriptions: ['memory', 'trajectory', 'patterns', 'anomalies'],\n },\n })\n );\n\n // Handle incoming messages\n socket.on('message', async (rawMessage) => {\n try {\n const message = JSON.parse(rawMessage.toString()) as WebSocketMessage;\n const data = message.data as Record<string, unknown> | undefined;\n\n switch (message.type) {\n case 'ping':\n socket.send(JSON.stringify({ type: 'pong' }));\n break;\n\n case 'subscribe':\n // Subscribe to specific event types\n if (data && typeof data === 'object') {\n const types = (data.types as string[]) ?? ['memory'];\n const actor = data.actor as string | undefined;\n\n for (const t of types) {\n state.subscriptions.add(t);\n }\n if (actor) state.actorFilter = actor;\n\n socket.send(\n JSON.stringify({\n type: 'subscribed',\n data: {\n subscriptions: Array.from(state.subscriptions),\n actor: state.actorFilter,\n },\n })\n );\n }\n break;\n\n case 'unsubscribe':\n // Unsubscribe from specific event types\n if (data && typeof data === 'object') {\n const types = (data.types as string[]) ?? [];\n for (const t of types) {\n state.subscriptions.delete(t);\n }\n socket.send(\n JSON.stringify({\n type: 'unsubscribed',\n data: { subscriptions: Array.from(state.subscriptions) },\n })\n );\n }\n break;\n\n case 'add':\n // Add a memory via WebSocket\n if (data && typeof data === 'object' && data.content) {\n const event = await fastify.aether.add({\n content: data.content as string,\n actor: data.actor as string | undefined,\n action: data.action as string | undefined,\n context: data.context as Record<string, unknown> | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'memory:added',\n data: event,\n })\n );\n }\n break;\n\n case 'trajectory:start':\n // Start a trajectory via WebSocket\n if (data && typeof data === 'object' && data.actor) {\n const trajectoryId = await fastify.aether.startTrajectory(\n data.actor as string,\n data.context as Record<string, unknown> | undefined\n );\n socket.send(\n JSON.stringify({\n type: 'trajectory:started',\n data: { id: trajectoryId, actor: data.actor },\n })\n );\n\n // Broadcast to trajectory subscribers\n broadcast('trajectory:started', { id: trajectoryId, actor: data.actor }, 'trajectory', data.actor as string);\n }\n break;\n\n case 'trajectory:end':\n // End a trajectory via WebSocket\n if (data && typeof data === 'object' && data.trajectoryId) {\n try {\n const trajectory = await fastify.aether.endTrajectory(\n data.trajectoryId as string,\n data.outcome as 'success' | 'failure' | 'partial' | undefined\n );\n socket.send(\n JSON.stringify({\n type: 'trajectory:ended',\n data: trajectory,\n })\n );\n\n // Broadcast to trajectory subscribers\n broadcast('trajectory:ended', trajectory, 'trajectory', trajectory.actor);\n } catch (err) {\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: 'Failed to end trajectory' },\n })\n );\n }\n }\n break;\n\n case 'patterns:detect':\n // Detect patterns for an actor\n if (data && typeof data === 'object' && data.actor) {\n const patterns = await fastify.aether.detectPatterns(data.actor as string, {\n minFrequency: data.minFrequency as number | undefined,\n minConfidence: data.minConfidence as number | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'patterns:detected',\n data: { actor: data.actor, patterns },\n })\n );\n }\n break;\n\n case 'anomalies:detect':\n // Find anomalies for an actor\n if (data && typeof data === 'object' && data.actor) {\n const anomalies = await fastify.aether.findAnomalies(data.actor as string, {\n minDeviationScore: data.minDeviationScore as number | undefined,\n limit: data.limit as number | undefined,\n });\n socket.send(\n JSON.stringify({\n type: 'anomalies:detected',\n data: { actor: data.actor, anomalies },\n })\n );\n\n // Broadcast high-severity anomalies to subscribers\n const highSeverity = anomalies.filter((a) => a.severity === 'high');\n if (highSeverity.length > 0) {\n broadcast('anomalies:alert', { actor: data.actor, anomalies: highSeverity }, 'anomalies', data.actor as string);\n }\n }\n break;\n\n case 'predict':\n // Get predictions for next actions\n if (data && typeof data === 'object' && data.actor && data.eventId) {\n const predictions = await fastify.aether.predictNext(\n data.actor as string,\n data.eventId as string,\n { topK: data.topK as number | undefined }\n );\n socket.send(\n JSON.stringify({\n type: 'predictions',\n data: { actor: data.actor, eventId: data.eventId, predictions },\n })\n );\n }\n break;\n\n default:\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: `Unknown message type: ${message.type}` },\n })\n );\n }\n } catch (err) {\n socket.send(\n JSON.stringify({\n type: 'error',\n data: { message: 'Invalid message format or operation failed' },\n })\n );\n }\n });\n\n // Handle disconnect\n socket.on('close', () => {\n clientStates.delete(socket);\n });\n });\n};\n","import { createServer } from './app.js';\nimport type { ServerConfig } from './config.js';\n\nexport async function startServer(config: ServerConfig): Promise<void> {\n const server = await createServer(config);\n\n const port = config.port ?? 3000;\n const host = config.host ?? '0.0.0.0';\n\n try {\n await server.listen({ port, host });\n console.log(`Aether server listening on http://${host}:${port}`);\n } catch (err) {\n server.log.error(err);\n process.exit(1);\n }\n\n // Handle graceful shutdown\n const shutdown = async () => {\n console.log('\\nShutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n"],"mappings":"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","names":["z","z","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aether-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "REST/WebSocket server for Aether Memory Framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"@fastify/static": "^7.0.0",
|
|
21
21
|
"@fastify/websocket": "^9.0.0",
|
|
22
22
|
"zod": "^3.22.0",
|
|
23
|
-
"aether-
|
|
24
|
-
"aether-
|
|
23
|
+
"aether-react": "0.2.0",
|
|
24
|
+
"aether-core": "0.2.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "^20.10.0",
|