Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
1
npm/packages/ruvbot/tests/factories/index.d.ts.map
Normal file
1
npm/packages/ruvbot/tests/factories/index.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
||||
1
npm/packages/ruvbot/tests/factories/index.js.map
Normal file
1
npm/packages/ruvbot/tests/factories/index.js.map
Normal file
File diff suppressed because one or more lines are too long
364
npm/packages/ruvbot/tests/factories/index.ts
Normal file
364
npm/packages/ruvbot/tests/factories/index.ts
Normal file
@@ -0,0 +1,364 @@
|
||||
/**
|
||||
* Test Factories
|
||||
*
|
||||
* Factory functions for creating test data with customizable overrides
|
||||
*/
|
||||
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
// Types
|
||||
export interface Agent {
|
||||
id: string;
|
||||
name: string;
|
||||
type: 'coder' | 'researcher' | 'tester' | 'reviewer' | 'planner';
|
||||
status: 'idle' | 'busy' | 'error' | 'terminated';
|
||||
capabilities: string[];
|
||||
config: AgentConfig;
|
||||
metadata: EntityMetadata;
|
||||
}
|
||||
|
||||
export interface AgentConfig {
|
||||
model: string;
|
||||
temperature: number;
|
||||
maxTokens: number;
|
||||
systemPrompt?: string;
|
||||
}
|
||||
|
||||
export interface Session {
|
||||
id: string;
|
||||
tenantId: string;
|
||||
userId: string;
|
||||
channelId: string;
|
||||
threadTs: string;
|
||||
status: 'active' | 'paused' | 'completed' | 'error';
|
||||
context: SessionContext;
|
||||
metadata: SessionMetadata;
|
||||
}
|
||||
|
||||
export interface SessionContext {
|
||||
conversationHistory: ConversationMessage[];
|
||||
workingDirectory: string;
|
||||
activeAgents: string[];
|
||||
variables?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface ConversationMessage {
|
||||
role: 'user' | 'assistant' | 'system';
|
||||
content: string;
|
||||
timestamp: Date;
|
||||
agentId?: string;
|
||||
}
|
||||
|
||||
export interface SessionMetadata {
|
||||
createdAt: Date;
|
||||
lastActiveAt: Date;
|
||||
messageCount: number;
|
||||
}
|
||||
|
||||
export interface Memory {
|
||||
id: string;
|
||||
sessionId: string | null;
|
||||
tenantId: string;
|
||||
type: 'short-term' | 'long-term' | 'vector' | 'episodic';
|
||||
key: string;
|
||||
value: unknown;
|
||||
embedding: Float32Array | null;
|
||||
metadata: MemoryMetadata;
|
||||
}
|
||||
|
||||
export interface MemoryMetadata {
|
||||
createdAt: Date;
|
||||
expiresAt: Date | null;
|
||||
accessCount: number;
|
||||
importance?: number;
|
||||
}
|
||||
|
||||
export interface Skill {
|
||||
id: string;
|
||||
name: string;
|
||||
version: string;
|
||||
description: string;
|
||||
inputSchema: Record<string, unknown>;
|
||||
outputSchema: Record<string, unknown>;
|
||||
executor: string;
|
||||
timeout: number;
|
||||
metadata?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface Tenant {
|
||||
id: string;
|
||||
name: string;
|
||||
slackTeamId: string;
|
||||
status: 'active' | 'suspended' | 'trial';
|
||||
plan: 'free' | 'pro' | 'enterprise';
|
||||
config: TenantConfig;
|
||||
metadata: EntityMetadata;
|
||||
}
|
||||
|
||||
export interface TenantConfig {
|
||||
maxAgents: number;
|
||||
maxSessions: number;
|
||||
features: string[];
|
||||
customSkills?: string[];
|
||||
}
|
||||
|
||||
export interface EntityMetadata {
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
version?: string;
|
||||
}
|
||||
|
||||
// Factory Functions
|
||||
|
||||
/**
|
||||
* Create an Agent with optional overrides
|
||||
*/
|
||||
export function createAgent(overrides: Partial<Agent> = {}): Agent {
|
||||
const defaults: Agent = {
|
||||
id: `agent-${uuidv4().slice(0, 8)}`,
|
||||
name: 'Test Agent',
|
||||
type: 'coder',
|
||||
status: 'idle',
|
||||
capabilities: ['code-generation'],
|
||||
config: {
|
||||
model: 'claude-sonnet-4',
|
||||
temperature: 0.7,
|
||||
maxTokens: 4096
|
||||
},
|
||||
metadata: {
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
version: '1.0.0'
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...overrides,
|
||||
config: { ...defaults.config, ...overrides.config },
|
||||
metadata: { ...defaults.metadata, ...overrides.metadata }
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create multiple agents
|
||||
*/
|
||||
export function createAgents(count: number, overrides: Partial<Agent> = {}): Agent[] {
|
||||
return Array.from({ length: count }, (_, i) =>
|
||||
createAgent({
|
||||
...overrides,
|
||||
name: `Agent ${i + 1}`,
|
||||
id: `agent-${i + 1}`
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Session with optional overrides
|
||||
*/
|
||||
export function createSession(overrides: Partial<Session> = {}): Session {
|
||||
const defaults: Session = {
|
||||
id: `session-${uuidv4().slice(0, 8)}`,
|
||||
tenantId: 'tenant-001',
|
||||
userId: 'U12345678',
|
||||
channelId: 'C12345678',
|
||||
threadTs: `${Date.now()}.000000`,
|
||||
status: 'active',
|
||||
context: {
|
||||
conversationHistory: [],
|
||||
workingDirectory: '/workspace',
|
||||
activeAgents: []
|
||||
},
|
||||
metadata: {
|
||||
createdAt: new Date(),
|
||||
lastActiveAt: new Date(),
|
||||
messageCount: 0
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...overrides,
|
||||
context: { ...defaults.context, ...overrides.context },
|
||||
metadata: { ...defaults.metadata, ...overrides.metadata }
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Session with conversation history
|
||||
*/
|
||||
export function createSessionWithHistory(
|
||||
messageCount: number,
|
||||
overrides: Partial<Session> = {}
|
||||
): Session {
|
||||
const history: ConversationMessage[] = [];
|
||||
|
||||
for (let i = 0; i < messageCount; i++) {
|
||||
history.push({
|
||||
role: i % 2 === 0 ? 'user' : 'assistant',
|
||||
content: `Message ${i + 1}`,
|
||||
timestamp: new Date(Date.now() - (messageCount - i) * 60000)
|
||||
});
|
||||
}
|
||||
|
||||
return createSession({
|
||||
...overrides,
|
||||
context: {
|
||||
...overrides.context,
|
||||
conversationHistory: history
|
||||
},
|
||||
metadata: {
|
||||
...overrides.metadata,
|
||||
messageCount
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Memory entry with optional overrides
|
||||
*/
|
||||
export function createMemory(overrides: Partial<Memory> = {}): Memory {
|
||||
const defaults: Memory = {
|
||||
id: `mem-${uuidv4().slice(0, 8)}`,
|
||||
sessionId: null,
|
||||
tenantId: 'tenant-001',
|
||||
type: 'short-term',
|
||||
key: `key-${Date.now()}`,
|
||||
value: { data: 'test' },
|
||||
embedding: null,
|
||||
metadata: {
|
||||
createdAt: new Date(),
|
||||
expiresAt: null,
|
||||
accessCount: 0
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...overrides,
|
||||
metadata: { ...defaults.metadata, ...overrides.metadata }
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Memory entry with vector embedding
|
||||
*/
|
||||
export function createVectorMemory(
|
||||
dimension: number = 384,
|
||||
overrides: Partial<Memory> = {}
|
||||
): Memory {
|
||||
return createMemory({
|
||||
type: 'vector',
|
||||
embedding: new Float32Array(dimension).map(() => Math.random() - 0.5),
|
||||
...overrides
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Skill with optional overrides
|
||||
*/
|
||||
export function createSkill(overrides: Partial<Skill> = {}): Skill {
|
||||
const defaults: Skill = {
|
||||
id: `skill-${uuidv4().slice(0, 8)}`,
|
||||
name: 'test-skill',
|
||||
version: '1.0.0',
|
||||
description: 'A test skill',
|
||||
inputSchema: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
input: { type: 'string' }
|
||||
},
|
||||
required: ['input']
|
||||
},
|
||||
outputSchema: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
output: { type: 'string' }
|
||||
}
|
||||
},
|
||||
executor: 'native://test',
|
||||
timeout: 30000
|
||||
};
|
||||
|
||||
return { ...defaults, ...overrides };
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Tenant with optional overrides
|
||||
*/
|
||||
export function createTenant(overrides: Partial<Tenant> = {}): Tenant {
|
||||
const defaults: Tenant = {
|
||||
id: `tenant-${uuidv4().slice(0, 8)}`,
|
||||
name: 'Test Tenant',
|
||||
slackTeamId: `T${uuidv4().slice(0, 8).toUpperCase()}`,
|
||||
status: 'active',
|
||||
plan: 'pro',
|
||||
config: {
|
||||
maxAgents: 10,
|
||||
maxSessions: 100,
|
||||
features: ['code-generation', 'vector-search']
|
||||
},
|
||||
metadata: {
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...overrides,
|
||||
config: { ...defaults.config, ...overrides.config },
|
||||
metadata: { ...defaults.metadata, ...overrides.metadata }
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Slack message event
|
||||
*/
|
||||
export function createSlackMessageEvent(overrides: Record<string, unknown> = {}): Record<string, unknown> {
|
||||
return {
|
||||
type: 'message',
|
||||
channel: 'C12345678',
|
||||
user: 'U12345678',
|
||||
text: 'Test message',
|
||||
ts: `${Date.now()}.000000`,
|
||||
team: 'T12345678',
|
||||
event_ts: `${Date.now()}.000000`,
|
||||
...overrides
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Slack app_mention event
|
||||
*/
|
||||
export function createSlackMentionEvent(overrides: Record<string, unknown> = {}): Record<string, unknown> {
|
||||
return {
|
||||
type: 'app_mention',
|
||||
channel: 'C12345678',
|
||||
user: 'U12345678',
|
||||
text: '<@U_BOT> test mention',
|
||||
ts: `${Date.now()}.000000`,
|
||||
team: 'T12345678',
|
||||
event_ts: `${Date.now()}.000000`,
|
||||
...overrides
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch factory - create multiple related entities
|
||||
*/
|
||||
export function createTestScenario() {
|
||||
const tenant = createTenant();
|
||||
const session = createSession({ tenantId: tenant.id });
|
||||
const agents = createAgents(3, { type: 'coder' });
|
||||
const memory = createVectorMemory(384, { tenantId: tenant.id, sessionId: session.id });
|
||||
const skill = createSkill();
|
||||
|
||||
return {
|
||||
tenant,
|
||||
session,
|
||||
agents,
|
||||
memory,
|
||||
skill
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user