mirror of
https://github.com/AeThex-Corporation/AeThex-OS.git
synced 2026-04-18 14:27:20 +00:00
194 lines
7.6 KiB
TypeScript
194 lines
7.6 KiB
TypeScript
import OpenAI from "openai";
|
|
import { storage } from "./storage.js";
|
|
|
|
// This is using Replit's AI Integrations service, which provides OpenAI-compatible API access without requiring your own OpenAI API key.
|
|
// the newest OpenAI model is "gpt-5" which was released August 7, 2025. do not change this unless explicitly requested by the user
|
|
const openai = new OpenAI({
|
|
baseURL: process.env.AI_INTEGRATIONS_OPENAI_BASE_URL,
|
|
apiKey: process.env.AI_INTEGRATIONS_OPENAI_API_KEY
|
|
});
|
|
|
|
const SYSTEM_PROMPT = `You are AEGIS, the Cyberpunk Security Assistant for AeThex Corporation - "The Operating System for the Metaverse."
|
|
|
|
**PERSONALITY & STYLE:**
|
|
- Cyberpunk aesthetic: Speak in a gritty, tech-noir style with hacker slang, neon references, and security terminology
|
|
- Direct and no-nonsense: Cut through the noise, get to the point
|
|
- Paranoid but professional: Always vigilant about security threats, but helpful to authorized users
|
|
- Use terms like: "breach", "firewall", "encryption", "neural link", "data stream", "quantum lock", "shadow protocols"
|
|
- Reference cyberpunk tropes: Megacorps, netrunners, ICE (Intrusion Countermeasures Electronics), black ICE
|
|
|
|
**ABOUT AETHEX:**
|
|
- AeThex operates as a dual-entity: The Foundation (non-profit training) and The Corporation (for-profit security)
|
|
- The "Holy Trinity": Axiom (The Law - foundational protocol), Codex (The Standard - certification system), Aegis (The Shield - security layer)
|
|
- Architects are elite certified professionals trained through rigorous Codex curriculum
|
|
- Platform features: Passport (identity), Terminal (command interface), Curriculum (training), Dashboard (operations)
|
|
|
|
**YOUR ROLE:**
|
|
- Security Operations: Monitor threats, enforce access controls, maintain system integrity
|
|
- User Guidance: Help navigate the metaverse OS, explain security features, assist with certification
|
|
- Threat Assessment: Identify potential vulnerabilities, suggest countermeasures
|
|
- Emergency Response: Handle security incidents, coordinate with Aegis team
|
|
|
|
**CAPABILITIES:**
|
|
- Access live system data and metrics
|
|
- Query user profiles and activity logs
|
|
- Monitor network traffic and anomalies
|
|
- Generate security reports and alerts
|
|
- Assist with emergency protocols
|
|
|
|
**RESPONSE STYLE:**
|
|
- Start with security assessment when appropriate
|
|
- Use code-like formatting for technical details
|
|
- End with security recommendations or next steps
|
|
- Be concise but thorough - no unnecessary chatter
|
|
|
|
SECURITY PROTOCOL: Always verify user authorization before providing sensitive information. If unauthorized access is detected, initiate lockdown procedures.`;
|
|
|
|
interface ChatMessage {
|
|
role: "user" | "assistant";
|
|
content: string;
|
|
}
|
|
|
|
// Live data fetching functions
|
|
async function fetchSystemMetrics(): Promise<string> {
|
|
try {
|
|
const metrics = await storage.getMetrics();
|
|
return `SYSTEM METRICS:
|
|
- Total Users: ${metrics.totalProfiles}
|
|
- Online Users: ${metrics.onlineUsers}
|
|
- Verified Architects: ${metrics.verifiedUsers}
|
|
- Total XP Pool: ${metrics.totalXP}
|
|
- Average Level: ${metrics.avgLevel}
|
|
- Active Projects: ${metrics.totalProjects}`;
|
|
} catch (error) {
|
|
return "Unable to fetch system metrics - potential security breach detected.";
|
|
}
|
|
}
|
|
|
|
async function fetchUserProfile(userId: string): Promise<string> {
|
|
try {
|
|
const profile = await storage.getProfile(userId);
|
|
if (!profile) return "User profile not found in database.";
|
|
|
|
return `USER PROFILE [${profile.username || 'Unknown'}]:
|
|
- Status: ${profile.status || 'offline'}
|
|
- Level: ${profile.level || 1}
|
|
- XP: ${profile.total_xp || 0}
|
|
- Role: ${profile.role || 'member'}
|
|
- Verified: ${profile.is_verified ? 'YES' : 'NO'}
|
|
- Location: ${profile.location || 'Unknown'}
|
|
- Bio: ${profile.bio || 'No bio available'}`;
|
|
} catch (error) {
|
|
return "Profile access denied - security protocol engaged.";
|
|
}
|
|
}
|
|
|
|
async function fetchRecentAlerts(): Promise<string> {
|
|
try {
|
|
const alerts = await storage.getAlerts();
|
|
const recentAlerts = alerts.slice(0, 5);
|
|
|
|
if (recentAlerts.length === 0) return "No recent security alerts.";
|
|
|
|
return `RECENT ALERTS:
|
|
${recentAlerts.map(alert => {
|
|
let dateStr = 'unknown';
|
|
if (alert.created_at) {
|
|
try {
|
|
dateStr = new Date(alert.created_at).toLocaleString();
|
|
} catch {}
|
|
}
|
|
return `- ${alert.type}: ${alert.message} (${dateStr})`;
|
|
}).join('\n')}`;
|
|
} catch (error) {
|
|
return "Alert system offline - potential network intrusion.";
|
|
}
|
|
}
|
|
|
|
async function fetchActiveProjects(): Promise<string> {
|
|
try {
|
|
const projects = await storage.getProjects();
|
|
const activeProjects = projects.filter(p => p.status === 'active' || p.status === 'in_progress').slice(0, 10);
|
|
|
|
if (activeProjects.length === 0) return "No active projects in the system.";
|
|
|
|
return `ACTIVE PROJECTS:
|
|
${activeProjects.map(p => `- ${p.title}: ${p.status} (${p.progress || 0}% complete)`).join('\n')}`;
|
|
} catch (error) {
|
|
return "Project database access restricted.";
|
|
}
|
|
}
|
|
|
|
// Function to determine if AI should fetch live data based on user query
|
|
function shouldFetchLiveData(message: string, history: ChatMessage[]): boolean {
|
|
const lowerMessage = message.toLowerCase();
|
|
const recentHistory = history.slice(-4).map(m => m.content.toLowerCase()).join(' ');
|
|
|
|
const dataKeywords = [
|
|
'status', 'metrics', 'stats', 'online', 'users', 'projects', 'alerts',
|
|
'security', 'threats', 'activity', 'logs', 'profile', 'current', 'live',
|
|
'active', 'recent', 'now', 'check', 'monitor', 'scan'
|
|
];
|
|
|
|
return dataKeywords.some(keyword =>
|
|
lowerMessage.includes(keyword) || recentHistory.includes(keyword)
|
|
);
|
|
}
|
|
|
|
export async function getChatResponse(userMessage: string, history?: ChatMessage[], userId?: string): Promise<string> {
|
|
try {
|
|
const messages: Array<{ role: "system" | "user" | "assistant"; content: string }> = [
|
|
{ role: "system", content: SYSTEM_PROMPT }
|
|
];
|
|
|
|
// Add live data context if the query seems to need it
|
|
if (shouldFetchLiveData(userMessage, history || [])) {
|
|
let liveData = "";
|
|
|
|
if (userMessage.toLowerCase().includes('metric') || userMessage.toLowerCase().includes('status') || userMessage.toLowerCase().includes('system')) {
|
|
liveData += await fetchSystemMetrics() + "\n\n";
|
|
}
|
|
|
|
if (userMessage.toLowerCase().includes('alert') || userMessage.toLowerCase().includes('threat') || userMessage.toLowerCase().includes('security')) {
|
|
liveData += await fetchRecentAlerts() + "\n\n";
|
|
}
|
|
|
|
if (userMessage.toLowerCase().includes('project') || userMessage.toLowerCase().includes('active')) {
|
|
liveData += await fetchActiveProjects() + "\n\n";
|
|
}
|
|
|
|
if (userMessage.toLowerCase().includes('profile') || userMessage.toLowerCase().includes('my') && userId) {
|
|
liveData += await fetchUserProfile(userId) + "\n\n";
|
|
}
|
|
|
|
if (liveData) {
|
|
messages.push({
|
|
role: "system",
|
|
content: `LIVE SYSTEM DATA:\n${liveData}Use this data to provide accurate, real-time information to the user.`
|
|
});
|
|
}
|
|
}
|
|
|
|
if (history && Array.isArray(history)) {
|
|
for (const msg of history.slice(-8)) {
|
|
if (msg.role === "user" || msg.role === "assistant") {
|
|
messages.push({ role: msg.role, content: msg.content });
|
|
}
|
|
}
|
|
}
|
|
|
|
messages.push({ role: "user", content: userMessage });
|
|
|
|
const response = await openai.chat.completions.create({
|
|
model: "gpt-4o-mini",
|
|
messages,
|
|
max_tokens: 500,
|
|
temperature: 0.7,
|
|
});
|
|
|
|
return response.choices[0]?.message?.content || "I'm sorry, I couldn't generate a response.";
|
|
} catch (error: any) {
|
|
console.error("OpenAI chat error:", error);
|
|
throw new Error("Failed to get AI response");
|
|
}
|
|
}
|