GT AI OS Community Edition v2.0.33
Security hardening release addressing CodeQL and Dependabot alerts: - Fix stack trace exposure in error responses - Add SSRF protection with DNS resolution checking - Implement proper URL hostname validation (replaces substring matching) - Add centralized path sanitization to prevent path traversal - Fix ReDoS vulnerability in email validation regex - Improve HTML sanitization in validation utilities - Fix capability wildcard matching in auth utilities - Update glob dependency to address CVE - Add CodeQL suppression comments for verified false positives 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
800
apps/tenant-app/src/lib/mock-api.ts
Normal file
800
apps/tenant-app/src/lib/mock-api.ts
Normal file
@@ -0,0 +1,800 @@
|
||||
/**
|
||||
* Mock API Service for GT 2.0 Tenant Application
|
||||
* Provides realistic mock data for development and testing
|
||||
*/
|
||||
|
||||
export const mockApi = {
|
||||
// Auth endpoints
|
||||
auth: {
|
||||
login: async (email: string, password: string) => ({
|
||||
access_token: 'mock-tenant-jwt-token',
|
||||
refresh_token: 'mock-tenant-refresh-token',
|
||||
user: {
|
||||
id: 'user-1',
|
||||
email,
|
||||
full_name: 'Jane User',
|
||||
tenant: 'Test Company',
|
||||
role: 'user',
|
||||
avatar_url: null,
|
||||
}
|
||||
}),
|
||||
|
||||
logout: async () => ({ success: true }),
|
||||
|
||||
getProfile: async () => ({
|
||||
id: 'user-1',
|
||||
email: 'jane@test-company.com',
|
||||
full_name: 'Jane User',
|
||||
tenant: 'Test Company',
|
||||
role: 'user',
|
||||
avatar_url: null,
|
||||
preferences: {
|
||||
theme: 'light',
|
||||
notifications: true,
|
||||
ai_personality: 'balanced',
|
||||
}
|
||||
}),
|
||||
},
|
||||
|
||||
// Conversations endpoints
|
||||
conversations: {
|
||||
list: async () => ({
|
||||
conversations: [
|
||||
{
|
||||
id: 'conv-1',
|
||||
title: 'Research on AI Ethics',
|
||||
agent_id: 'asst-1',
|
||||
agent_name: 'Research Agent',
|
||||
last_message: 'I can help you explore various ethical frameworks...',
|
||||
created_at: '2024-01-20T10:00:00Z',
|
||||
updated_at: '2024-01-20T11:30:00Z',
|
||||
message_count: 12,
|
||||
},
|
||||
{
|
||||
id: 'conv-2',
|
||||
title: 'Code Review Session',
|
||||
agent_id: 'asst-2',
|
||||
agent_name: 'Coding Agent',
|
||||
last_message: 'The refactored code looks much cleaner now...',
|
||||
created_at: '2024-01-19T14:00:00Z',
|
||||
updated_at: '2024-01-19T15:45:00Z',
|
||||
message_count: 8,
|
||||
},
|
||||
{
|
||||
id: 'conv-3',
|
||||
title: 'Security Analysis',
|
||||
agent_id: 'asst-3',
|
||||
agent_name: 'Cyber Agent',
|
||||
last_message: 'The vulnerability assessment shows...',
|
||||
created_at: '2024-01-18T09:00:00Z',
|
||||
updated_at: '2024-01-18T10:30:00Z',
|
||||
message_count: 6,
|
||||
}
|
||||
],
|
||||
total: 3
|
||||
}),
|
||||
|
||||
create: async (data: any) => ({
|
||||
id: `conv-${Date.now()}`,
|
||||
title: data.title || 'New Conversation',
|
||||
agent_id: data.agent_id,
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
message_count: 0,
|
||||
}),
|
||||
|
||||
get: async (id: string) => ({
|
||||
id,
|
||||
title: 'Research on AI Ethics',
|
||||
agent_id: 'asst-1',
|
||||
agent_name: 'Research Agent',
|
||||
system_prompt: 'You are a helpful research agent...',
|
||||
created_at: '2024-01-20T10:00:00Z',
|
||||
updated_at: '2024-01-20T11:30:00Z',
|
||||
message_count: 12,
|
||||
context_sources: ['doc-1', 'doc-2'],
|
||||
}),
|
||||
|
||||
getMessages: async (id: string) => ({
|
||||
messages: [
|
||||
{
|
||||
id: 'msg-1',
|
||||
role: 'user',
|
||||
content: 'Can you help me understand the ethical implications of AI in healthcare?',
|
||||
created_at: '2024-01-20T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'msg-2',
|
||||
role: 'agent',
|
||||
content: `I'd be happy to help you explore the ethical implications of AI in healthcare. This is a crucial topic with several key dimensions:
|
||||
|
||||
## Key Ethical Considerations
|
||||
|
||||
### 1. **Patient Privacy and Data Protection**
|
||||
- AI systems require vast amounts of patient data for training
|
||||
- Concerns about data breaches and unauthorized access
|
||||
- Need for robust anonymization techniques
|
||||
|
||||
### 2. **Bias and Fairness**
|
||||
- AI models can perpetuate existing healthcare disparities
|
||||
- Training data often underrepresents minority populations
|
||||
- Risk of discriminatory outcomes in diagnosis and treatment recommendations
|
||||
|
||||
### 3. **Transparency and Explainability**
|
||||
- "Black box" nature of many AI algorithms
|
||||
- Physicians and patients need to understand AI-driven decisions
|
||||
- Regulatory requirements for explainable AI in healthcare
|
||||
|
||||
### 4. **Accountability and Liability**
|
||||
- Who is responsible when AI makes an error?
|
||||
- Legal frameworks still evolving
|
||||
- Need for clear governance structures
|
||||
|
||||
Would you like to explore any of these areas in more detail?`,
|
||||
created_at: '2024-01-20T10:01:00Z',
|
||||
model_used: 'gpt-4',
|
||||
tokens_used: 245,
|
||||
},
|
||||
{
|
||||
id: 'msg-3',
|
||||
role: 'user',
|
||||
content: 'Yes, can you elaborate on the bias and fairness issues?',
|
||||
created_at: '2024-01-20T10:05:00Z',
|
||||
},
|
||||
{
|
||||
id: 'msg-4',
|
||||
role: 'agent',
|
||||
content: `Certainly! Bias and fairness in healthcare AI is a critical issue that can have life-altering consequences. Let me break this down:
|
||||
|
||||
## Sources of Bias in Healthcare AI
|
||||
|
||||
### Historical Data Bias
|
||||
- Medical datasets often reflect past inequities in healthcare access
|
||||
- Underdiagnosis in certain populations gets encoded into AI models
|
||||
- Example: Skin cancer detection AI trained primarily on light-skinned patients
|
||||
|
||||
### Representation Bias
|
||||
- Clinical trials historically underrepresented women and minorities
|
||||
- Rural populations often excluded from datasets
|
||||
- Socioeconomic factors affecting data availability
|
||||
|
||||
## Real-World Consequences
|
||||
|
||||
1. **Diagnostic Disparities**: AI may be less accurate for underrepresented groups
|
||||
2. **Treatment Recommendations**: Biased algorithms might suggest different treatments based on demographics rather than medical need
|
||||
3. **Resource Allocation**: AI-driven triage systems might systematically disadvantage certain populations
|
||||
|
||||
## Mitigation Strategies
|
||||
|
||||
- **Diverse Training Data**: Actively collecting representative datasets
|
||||
- **Bias Testing**: Regular audits for discriminatory patterns
|
||||
- **Fairness Constraints**: Building equity metrics into model optimization
|
||||
- **Community Involvement**: Including affected populations in AI development
|
||||
|
||||
The goal is to ensure AI enhances healthcare equity rather than exacerbating existing disparities.`,
|
||||
created_at: '2024-01-20T10:06:00Z',
|
||||
model_used: 'gpt-4',
|
||||
tokens_used: 312,
|
||||
}
|
||||
],
|
||||
total: 4
|
||||
}),
|
||||
|
||||
sendMessage: async (conversationId: string, content: string) => ({
|
||||
id: `msg-${Date.now()}`,
|
||||
role: 'agent',
|
||||
content: `I understand you're asking about "${content}". Let me help you with that...`,
|
||||
created_at: new Date().toISOString(),
|
||||
model_used: 'gpt-4',
|
||||
tokens_used: Math.floor(Math.random() * 500) + 100,
|
||||
}),
|
||||
},
|
||||
|
||||
// Agents endpoints
|
||||
agents: {
|
||||
list: async () => ({
|
||||
data: [
|
||||
{
|
||||
id: 'asst-1',
|
||||
name: 'Research Agent',
|
||||
description: 'Specialized in research, analysis, and information synthesis',
|
||||
template_id: 'research_agent',
|
||||
category: 'research',
|
||||
personality_config: { tone: 'formal', explanation_depth: 'detailed' },
|
||||
resource_preferences: { primary_llm: 'gpt-4', temperature: 0.7 },
|
||||
tags: ['research', 'analysis'],
|
||||
is_favorite: false,
|
||||
conversation_count: 15,
|
||||
total_cost_cents: 1250,
|
||||
created_at: '2024-01-15T10:00:00Z',
|
||||
updated_at: '2024-01-20T11:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'asst-2',
|
||||
name: 'Coding Agent',
|
||||
description: 'Expert in software development and code review',
|
||||
template_id: 'coding_agent',
|
||||
category: 'development',
|
||||
personality_config: { tone: 'technical', explanation_depth: 'code-focused' },
|
||||
resource_preferences: { primary_llm: 'claude-3-sonnet', temperature: 0.3 },
|
||||
tags: ['coding', 'development'],
|
||||
is_favorite: true,
|
||||
conversation_count: 12,
|
||||
total_cost_cents: 890,
|
||||
created_at: '2024-01-14T10:00:00Z',
|
||||
updated_at: '2024-01-19T15:45:00Z',
|
||||
},
|
||||
{
|
||||
id: 'asst-3',
|
||||
name: 'Cybersecurity Agent',
|
||||
description: 'Threat detection and security analysis specialist',
|
||||
template_id: 'cyber_agent',
|
||||
category: 'cybersecurity',
|
||||
personality_config: { tone: 'professional', explanation_depth: 'technical' },
|
||||
resource_preferences: { primary_llm: 'gpt-4', temperature: 0.2 },
|
||||
tags: ['security', 'analysis'],
|
||||
is_favorite: false,
|
||||
conversation_count: 8,
|
||||
total_cost_cents: 670,
|
||||
created_at: '2024-01-13T10:00:00Z',
|
||||
updated_at: '2024-01-18T10:30:00Z',
|
||||
}
|
||||
],
|
||||
total: 3,
|
||||
limit: 50,
|
||||
offset: 0
|
||||
}),
|
||||
|
||||
create: async (data: any) => ({
|
||||
id: `asst-${Date.now()}`,
|
||||
...data,
|
||||
created_at: new Date().toISOString(),
|
||||
conversation_count: 0,
|
||||
}),
|
||||
|
||||
get: async (id: string) => ({
|
||||
id,
|
||||
name: 'Research Agent',
|
||||
description: 'Specialized in research, analysis, and information synthesis',
|
||||
template_id: 'research_agent',
|
||||
category: 'research',
|
||||
personality_config: { tone: 'formal', explanation_depth: 'detailed' },
|
||||
resource_preferences: { primary_llm: 'gpt-4', temperature: 0.7, max_tokens: 4000 },
|
||||
tags: ['research', 'analysis'],
|
||||
is_favorite: false,
|
||||
conversation_count: 15,
|
||||
total_cost_cents: 1250,
|
||||
created_at: '2024-01-15T10:00:00Z',
|
||||
updated_at: '2024-01-20T11:30:00Z',
|
||||
}),
|
||||
|
||||
update: async (id: string, data: any) => ({
|
||||
id,
|
||||
...data,
|
||||
updated_at: new Date().toISOString(),
|
||||
}),
|
||||
|
||||
delete: async (id: string) => ({ success: true }),
|
||||
},
|
||||
|
||||
// Backward compatibility: agents endpoint delegates to agents
|
||||
agents: {
|
||||
list: async () => {
|
||||
const agentResponse = await mockApi.agents.list();
|
||||
return {
|
||||
agents: agentResponse.data,
|
||||
total: agentResponse.total
|
||||
};
|
||||
},
|
||||
get: async (id: string) => mockApi.agents.get(id),
|
||||
create: async (data: any) => mockApi.agents.create(data),
|
||||
update: async (id: string, data: any) => mockApi.agents.update(id, data),
|
||||
delete: async (id: string) => mockApi.agents.delete(id),
|
||||
},
|
||||
|
||||
// Documents endpoints
|
||||
documents: {
|
||||
list: async () => ({
|
||||
documents: [
|
||||
{
|
||||
id: 'doc-1',
|
||||
filename: 'AI_Ethics_Framework.pdf',
|
||||
file_type: 'application/pdf',
|
||||
file_size: 2456789,
|
||||
processing_status: 'completed',
|
||||
chunk_count: 45,
|
||||
uploaded_by: 'jane@test-company.com',
|
||||
created_at: '2024-01-18T10:00:00Z',
|
||||
processed_at: '2024-01-18T10:05:00Z',
|
||||
},
|
||||
{
|
||||
id: 'doc-2',
|
||||
filename: 'Healthcare_Data_Analysis.docx',
|
||||
file_type: 'application/docx',
|
||||
file_size: 1234567,
|
||||
processing_status: 'completed',
|
||||
chunk_count: 32,
|
||||
uploaded_by: 'jane@test-company.com',
|
||||
created_at: '2024-01-17T14:00:00Z',
|
||||
processed_at: '2024-01-17T14:03:00Z',
|
||||
},
|
||||
{
|
||||
id: 'doc-3',
|
||||
filename: 'Security_Best_Practices.md',
|
||||
file_type: 'text/markdown',
|
||||
file_size: 98765,
|
||||
processing_status: 'processing',
|
||||
chunk_count: 0,
|
||||
uploaded_by: 'jane@test-company.com',
|
||||
created_at: '2024-01-20T12:00:00Z',
|
||||
processed_at: null,
|
||||
}
|
||||
],
|
||||
total: 3,
|
||||
storage_used: 3790121,
|
||||
storage_limit: 10737418240, // 10GB
|
||||
}),
|
||||
|
||||
upload: async (file: File) => ({
|
||||
id: `doc-${Date.now()}`,
|
||||
filename: file.name,
|
||||
file_type: file.type,
|
||||
file_size: file.size,
|
||||
processing_status: 'pending',
|
||||
created_at: new Date().toISOString(),
|
||||
}),
|
||||
|
||||
delete: async (id: string) => ({ success: true }),
|
||||
|
||||
getChunks: async (id: string) => ({
|
||||
chunks: [
|
||||
{
|
||||
id: 'chunk-1',
|
||||
document_id: id,
|
||||
content: 'This is a sample chunk from the document...',
|
||||
chunk_index: 0,
|
||||
tokens: 125,
|
||||
},
|
||||
{
|
||||
id: 'chunk-2',
|
||||
document_id: id,
|
||||
content: 'Another chunk with important information...',
|
||||
chunk_index: 1,
|
||||
tokens: 98,
|
||||
}
|
||||
],
|
||||
total: 2,
|
||||
}),
|
||||
},
|
||||
|
||||
// RAG endpoints
|
||||
rag: {
|
||||
search: async (query: string, datasetIds?: string[]) => ({
|
||||
results: [
|
||||
{
|
||||
id: 'result-1',
|
||||
content: 'AI ethics frameworks typically consider principles like fairness, transparency, and accountability...',
|
||||
source: 'AI_Ethics_Framework.pdf',
|
||||
relevance_score: 0.92,
|
||||
chunk_id: 'chunk-15',
|
||||
page_number: 12,
|
||||
},
|
||||
{
|
||||
id: 'result-2',
|
||||
content: 'Healthcare data must be handled with strict privacy controls and patient consent...',
|
||||
source: 'Healthcare_Data_Analysis.docx',
|
||||
relevance_score: 0.87,
|
||||
chunk_id: 'chunk-23',
|
||||
page_number: 8,
|
||||
}
|
||||
],
|
||||
total: 2,
|
||||
query_embedding_time_ms: 45,
|
||||
search_time_ms: 123,
|
||||
}),
|
||||
|
||||
getDatasets: async () => ({
|
||||
datasets: [
|
||||
{
|
||||
id: 'dataset-1',
|
||||
name: 'Research Papers',
|
||||
description: 'Collection of AI and healthcare research papers',
|
||||
document_count: 12,
|
||||
chunk_count: 456,
|
||||
vector_count: 456,
|
||||
embedding_model: 'text-embedding-3-small',
|
||||
status: 'active',
|
||||
created_at: '2024-01-10T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'dataset-2',
|
||||
name: 'Security Documentation',
|
||||
description: 'Cybersecurity best practices and guidelines',
|
||||
document_count: 8,
|
||||
chunk_count: 234,
|
||||
vector_count: 234,
|
||||
embedding_model: 'text-embedding-3-small',
|
||||
status: 'active',
|
||||
created_at: '2024-01-12T10:00:00Z',
|
||||
}
|
||||
],
|
||||
total: 2,
|
||||
}),
|
||||
|
||||
createDataset: async (data: any) => ({
|
||||
id: `dataset-${Date.now()}`,
|
||||
...data,
|
||||
document_count: 0,
|
||||
chunk_count: 0,
|
||||
vector_count: 0,
|
||||
status: 'active',
|
||||
created_at: new Date().toISOString(),
|
||||
}),
|
||||
},
|
||||
|
||||
// Agents endpoints
|
||||
agents: {
|
||||
list: async () => ({
|
||||
agents: [
|
||||
{
|
||||
id: 'agent-1',
|
||||
name: 'Research Specialist',
|
||||
agent_type: 'research',
|
||||
description: 'Autonomous research agent for deep analysis',
|
||||
status: 'idle',
|
||||
capabilities: ['web_search', 'document_synthesis', 'report_generation'],
|
||||
execution_count: 24,
|
||||
last_execution: '2024-01-19T16:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'agent-2',
|
||||
name: 'Code Reviewer',
|
||||
agent_type: 'coding',
|
||||
description: 'Automated code review and improvement suggestions',
|
||||
status: 'idle',
|
||||
capabilities: ['code_analysis', 'security_scanning', 'refactoring'],
|
||||
execution_count: 18,
|
||||
last_execution: '2024-01-18T14:00:00Z',
|
||||
}
|
||||
],
|
||||
total: 2,
|
||||
}),
|
||||
|
||||
create: async (data: any) => ({
|
||||
id: `agent-${Date.now()}`,
|
||||
...data,
|
||||
status: 'idle',
|
||||
execution_count: 0,
|
||||
created_at: new Date().toISOString(),
|
||||
}),
|
||||
|
||||
execute: async (agentId: string, task: string) => ({
|
||||
execution_id: `exec-${Date.now()}`,
|
||||
agent_id: agentId,
|
||||
task,
|
||||
status: 'running',
|
||||
started_at: new Date().toISOString(),
|
||||
estimated_duration: 30,
|
||||
}),
|
||||
},
|
||||
|
||||
// External Services endpoints
|
||||
services: {
|
||||
list: async () => ({
|
||||
services: [
|
||||
{
|
||||
id: 'svc-1',
|
||||
name: 'Canvas LMS',
|
||||
type: 'educational_service',
|
||||
description: 'Learning Management System',
|
||||
icon: '📚',
|
||||
status: 'available',
|
||||
category: 'education',
|
||||
},
|
||||
{
|
||||
id: 'svc-2',
|
||||
name: 'CTFd Platform',
|
||||
type: 'cybersecurity_service',
|
||||
description: 'Capture The Flag competition platform',
|
||||
icon: '🚩',
|
||||
status: 'available',
|
||||
category: 'cybersecurity',
|
||||
},
|
||||
{
|
||||
id: 'svc-3',
|
||||
name: 'Jupyter Hub',
|
||||
type: 'development_service',
|
||||
description: 'Interactive development environment',
|
||||
icon: '📓',
|
||||
status: 'available',
|
||||
category: 'development',
|
||||
},
|
||||
{
|
||||
id: 'svc-4',
|
||||
name: 'Guacamole',
|
||||
type: 'remote_access_service',
|
||||
description: 'Remote desktop gateway',
|
||||
icon: '🖥️',
|
||||
status: 'available',
|
||||
category: 'infrastructure',
|
||||
}
|
||||
],
|
||||
total: 4,
|
||||
}),
|
||||
|
||||
getEmbedConfig: async (serviceId: string) => ({
|
||||
iframe_url: `https://${serviceId}.test-company.gt2.com`,
|
||||
sandbox_attributes: ['allow-same-origin', 'allow-scripts', 'allow-forms'],
|
||||
authentication_token: 'mock-sso-token',
|
||||
session_data: {
|
||||
user_id: 'user-1',
|
||||
tenant_id: 'test-company',
|
||||
permissions: ['read', 'write'],
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
// Projects endpoints
|
||||
projects: {
|
||||
list: async () => ({
|
||||
projects: [
|
||||
{
|
||||
id: 'proj-1',
|
||||
name: 'AI Ethics Research',
|
||||
description: 'Comprehensive research on ethical implications of AI in healthcare applications',
|
||||
project_type: 'research',
|
||||
status: 'active',
|
||||
completion_percentage: 65,
|
||||
linked_resources: ['gpt-4', 'semantic-search', 'document-processor'],
|
||||
collaborators: [
|
||||
{ id: 'user-2', name: 'Alice Johnson' },
|
||||
{ id: 'user-3', name: 'Bob Smith' }
|
||||
],
|
||||
time_invested_minutes: 480,
|
||||
ai_interactions_count: 145,
|
||||
created_at: '2024-01-10T08:00:00Z',
|
||||
last_activity: '2024-01-25T14:30:00Z'
|
||||
},
|
||||
{
|
||||
id: 'proj-2',
|
||||
name: 'Security Vulnerability Analysis',
|
||||
description: 'Analyzing potential security vulnerabilities in cloud infrastructure',
|
||||
project_type: 'analysis',
|
||||
status: 'active',
|
||||
completion_percentage: 30,
|
||||
linked_resources: ['cyber-analyst', 'security-scanner'],
|
||||
collaborators: [
|
||||
{ id: 'user-4', name: 'David Chen' }
|
||||
],
|
||||
time_invested_minutes: 240,
|
||||
ai_interactions_count: 89,
|
||||
created_at: '2024-01-15T10:00:00Z',
|
||||
last_activity: '2024-01-25T16:00:00Z'
|
||||
},
|
||||
{
|
||||
id: 'proj-3',
|
||||
name: 'Customer Sentiment Dashboard',
|
||||
description: 'Building a real-time dashboard for customer sentiment analysis',
|
||||
project_type: 'development',
|
||||
status: 'completed',
|
||||
completion_percentage: 100,
|
||||
linked_resources: ['coding-agent', 'github-connector'],
|
||||
collaborators: [],
|
||||
time_invested_minutes: 960,
|
||||
ai_interactions_count: 234,
|
||||
created_at: '2023-12-01T09:00:00Z',
|
||||
last_activity: '2024-01-20T17:00:00Z'
|
||||
},
|
||||
{
|
||||
id: 'proj-4',
|
||||
name: 'Market Trend Analysis Q1',
|
||||
description: 'Quarterly market trend analysis and competitor benchmarking',
|
||||
project_type: 'analysis',
|
||||
status: 'on_hold',
|
||||
completion_percentage: 45,
|
||||
linked_resources: ['research-agent', 'web-search'],
|
||||
collaborators: [
|
||||
{ id: 'user-5', name: 'Emma Wilson' },
|
||||
{ id: 'user-6', name: 'Frank Lee' },
|
||||
{ id: 'user-7', name: 'Grace Kim' }
|
||||
],
|
||||
time_invested_minutes: 320,
|
||||
ai_interactions_count: 67,
|
||||
created_at: '2024-01-05T11:00:00Z',
|
||||
last_activity: '2024-01-18T13:00:00Z'
|
||||
}
|
||||
],
|
||||
total: 4
|
||||
}),
|
||||
|
||||
create: async (data: any) => ({
|
||||
id: `proj-${Date.now()}`,
|
||||
...data,
|
||||
status: 'active',
|
||||
completion_percentage: 0,
|
||||
created_at: new Date().toISOString(),
|
||||
}),
|
||||
},
|
||||
|
||||
// Games & AI Literacy endpoints
|
||||
games: {
|
||||
list: async () => ({
|
||||
games: [
|
||||
{
|
||||
id: 'game-1',
|
||||
name: 'Strategic Chess',
|
||||
type: 'chess',
|
||||
category: 'strategic_game',
|
||||
description: 'Improve strategic thinking with AI opponents',
|
||||
icon: '♟️',
|
||||
difficulty_levels: ['beginner', 'intermediate', 'expert'],
|
||||
user_rating: 1450,
|
||||
games_played: 23,
|
||||
win_rate: 0.43,
|
||||
},
|
||||
{
|
||||
id: 'game-2',
|
||||
name: 'Logic Puzzles',
|
||||
type: 'logic_puzzle',
|
||||
category: 'puzzle',
|
||||
description: 'Lateral thinking and logical deduction challenges',
|
||||
icon: '🧩',
|
||||
difficulty_levels: ['easy', 'medium', 'hard'],
|
||||
puzzles_solved: 45,
|
||||
average_time: 8.5,
|
||||
hint_usage_rate: 0.2,
|
||||
},
|
||||
{
|
||||
id: 'game-3',
|
||||
name: 'Ethical Dilemmas',
|
||||
type: 'philosophical_dilemma',
|
||||
category: 'philosophy',
|
||||
description: 'Explore ethical frameworks through scenarios',
|
||||
icon: '🤔',
|
||||
scenarios_completed: 12,
|
||||
frameworks_explored: ['utilitarian', 'deontological', 'virtue_ethics'],
|
||||
depth_score: 82,
|
||||
}
|
||||
],
|
||||
total: 3,
|
||||
achievements: [
|
||||
{ id: 'ach-1', name: 'First Victory', icon: '🏆', earned: true },
|
||||
{ id: 'ach-2', name: 'Strategic Thinker', icon: '🧠', earned: false },
|
||||
{ id: 'ach-3', name: 'Problem Solver', icon: '💡', earned: true },
|
||||
],
|
||||
}),
|
||||
|
||||
startGame: async (gameType: string, options?: any) => ({
|
||||
game_id: `game-${Date.now()}`,
|
||||
game_type: gameType,
|
||||
initial_state: {
|
||||
board: gameType === 'chess' ? 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' : null,
|
||||
turn: 'player',
|
||||
time_remaining: 600,
|
||||
},
|
||||
ai_opponent: {
|
||||
name: 'AI Agent',
|
||||
difficulty: options?.difficulty || 'intermediate',
|
||||
personality: 'teaching',
|
||||
},
|
||||
}),
|
||||
|
||||
makeMove: async (gameId: string, move: any) => ({
|
||||
game_id: gameId,
|
||||
player_move: move,
|
||||
ai_response: {
|
||||
move: 'e7e5',
|
||||
explanation: 'I\'m developing my center control...',
|
||||
alternative_moves: ['d7d5', 'g8f6'],
|
||||
},
|
||||
updated_state: {
|
||||
board: 'rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR',
|
||||
turn: 'player',
|
||||
evaluation: 0.3,
|
||||
},
|
||||
game_status: 'ongoing',
|
||||
}),
|
||||
|
||||
getProgress: async () => ({
|
||||
overall_progress: {
|
||||
level: 5,
|
||||
experience: 2345,
|
||||
next_level_xp: 3000,
|
||||
rank: 'Strategic Thinker',
|
||||
},
|
||||
skill_metrics: {
|
||||
strategic_thinking: 72,
|
||||
logical_reasoning: 85,
|
||||
ethical_reasoning: 68,
|
||||
problem_solving: 79,
|
||||
ai_collaboration: 91,
|
||||
},
|
||||
learning_streak: 7,
|
||||
total_time_spent: 1234, // minutes
|
||||
recommendations: [
|
||||
'Try the advanced chess puzzles to improve tactical vision',
|
||||
'Explore more ethical dilemmas to strengthen moral reasoning',
|
||||
],
|
||||
}),
|
||||
},
|
||||
|
||||
// Projects endpoints
|
||||
projects: {
|
||||
list: async () => ({
|
||||
projects: [
|
||||
{
|
||||
id: 'proj-1',
|
||||
name: 'AI Ethics Research',
|
||||
description: 'Comprehensive research on AI ethics in healthcare',
|
||||
project_type: 'research',
|
||||
status: 'active',
|
||||
completion_percentage: 65,
|
||||
document_count: 8,
|
||||
conversation_count: 3,
|
||||
created_at: '2024-01-10T10:00:00Z',
|
||||
last_activity: '2024-01-20T11:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'proj-2',
|
||||
name: 'Security Audit Tool',
|
||||
description: 'Development of automated security audit tool',
|
||||
project_type: 'development',
|
||||
status: 'active',
|
||||
completion_percentage: 40,
|
||||
document_count: 5,
|
||||
conversation_count: 2,
|
||||
created_at: '2024-01-12T10:00:00Z',
|
||||
last_activity: '2024-01-19T15:00:00Z',
|
||||
}
|
||||
],
|
||||
total: 2,
|
||||
}),
|
||||
|
||||
create: async (data: any) => ({
|
||||
id: `proj-${Date.now()}`,
|
||||
...data,
|
||||
status: 'active',
|
||||
completion_percentage: 0,
|
||||
document_count: 0,
|
||||
conversation_count: 0,
|
||||
created_at: new Date().toISOString(),
|
||||
}),
|
||||
|
||||
get: async (id: string) => ({
|
||||
id,
|
||||
name: 'AI Ethics Research',
|
||||
description: 'Comprehensive research on AI ethics in healthcare',
|
||||
project_type: 'research',
|
||||
status: 'active',
|
||||
completion_percentage: 65,
|
||||
associated_resources: ['asst-1', 'dataset-1'],
|
||||
document_references: ['doc-1', 'doc-2'],
|
||||
conversation_references: ['conv-1'],
|
||||
created_at: '2024-01-10T10:00:00Z',
|
||||
last_activity: '2024-01-20T11:30:00Z',
|
||||
time_invested_minutes: 450,
|
||||
ai_interactions_count: 234,
|
||||
}),
|
||||
},
|
||||
|
||||
// Settings endpoints
|
||||
settings: {
|
||||
getPreferences: async () => ({
|
||||
theme: 'light',
|
||||
language: 'en',
|
||||
notifications_enabled: true,
|
||||
ai_personality: 'balanced',
|
||||
learning_style: 'interactive',
|
||||
difficulty_preference: 'adaptive',
|
||||
help_system_enabled: true,
|
||||
usage_analytics_enabled: true,
|
||||
}),
|
||||
|
||||
updatePreferences: async (data: any) => ({
|
||||
...data,
|
||||
updated_at: new Date().toISOString(),
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
export default mockApi;
|
||||
Reference in New Issue
Block a user