Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
roots: ['<rootDir>/src'],
testMatch: ['**/__tests__/**/*.+(ts|tsx)', '**/?(*.)+(spec|test).+(ts|tsx)'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node']
};
16 changes: 16 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "multi-agent-chat-platform",
"version": "0.1.0",
"description": "Multi-agent interactive chat platform",
"main": "dist/index.js",
"scripts": {
"test": "jest",
"build": "tsc"
},
"devDependencies": {
"@types/jest": "^29.5.3",
"jest": "^29.6.1",
"ts-jest": "^29.1.1",
"typescript": "^5.1.6"
}
}
63 changes: 63 additions & 0 deletions src/interfaces/component-interfaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Core component interfaces for multi-agent chat platform

export interface AgentProfile {
id: string;
name: string;
description: string;
tone: string;
samplePrompts: string[];
}

export interface ChatMessage {
agentId: string;
timestamp: number;
content: string;
}

export interface ChatSession {
sessionId: string;
participants: string[];
messages: ChatMessage[];
}

export interface PersonalityDataManagerInterface {
loadProfile(id: string): Promise<AgentProfile>;
validateProfile(profile: AgentProfile): boolean;
listProfiles(): Promise<AgentProfile[]>;
}

export interface ChatbotEngineInterface {
generateResponse(
profile: AgentProfile,
conversationHistory: ChatMessage[]
): Promise<string>;
}

export interface ConversationOrchestratorInterface {
handleMessage(
sessionId: string,
userMessage: string
): Promise<ChatMessage[]>;
}

export interface APILayerInterface {
createChatSession(): Promise<string>;
sendMessage(
sessionId: string,
message: string
): Promise<ChatMessage[]>;
}

// Validation helper types
export type ValidationResult = {
isValid: boolean;
errors?: string[];
}

// Common error types
export class ComponentError extends Error {
constructor(message: string) {
super(message);
this.name = 'ComponentError';
}
}
62 changes: 62 additions & 0 deletions src/tests/interface-validation.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import {
AgentProfile,
ChatMessage,
PersonalityDataManagerInterface
} from '../interfaces/component-interfaces';

describe('Component Interface Validation', () => {
describe('AgentProfile Validation', () => {
const validProfile: AgentProfile = {
id: 'jesus_disciple',
name: 'Peter',
description: 'Fisherman and apostle',
tone: 'passionate',
samplePrompts: ['What did Jesus teach?', 'Tell me about your journey']
};

const invalidProfile: Partial<AgentProfile> = {
name: '', // Invalid: empty name
};

it('should validate a complete agent profile', () => {
const isValid = validateAgentProfile(validProfile);
expect(isValid).toBe(true);
});

it('should reject an incomplete profile', () => {
const isValid = validateAgentProfile(invalidProfile as AgentProfile);
expect(isValid).toBe(false);
});
});

describe('Chat Message Validation', () => {
const validMessage: ChatMessage = {
agentId: 'peter',
timestamp: Date.now(),
content: 'Hello, fellow disciples!'
};

it('should validate a complete chat message', () => {
const isValid = validateChatMessage(validMessage);
expect(isValid).toBe(true);
});
});
});

// Validation functions
function validateAgentProfile(profile: AgentProfile): boolean {
return !!(
profile.id &&
profile.name &&
profile.name.length > 0 &&
profile.description
);
}

function validateChatMessage(message: ChatMessage): boolean {
return !!(
message.agentId &&
message.timestamp &&
message.content
);
}
14 changes: 14 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "es2022",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}