#!/usr/bin/env node
/**
* Task 5.11: Conversation Lifecycle Visibility Test
*
* Verifies conversation meta actions:
* - conversation:status
* - conversation:list
* - conversation:switch
*/
import { ConversationManager } from './dist/core/conversation-manager.js';
import { ConversationStore } from './dist/core/conversation-store.js';
const store = new ConversationStore({ dbPath: ':memory:' });
const manager = new ConversationManager(store);
await manager.waitForToolsLoaded();
console.log('=== Task 5.11: Conversation Lifecycle Visibility ===\n');
// Test 1: conversation:status on fresh conversation
console.log('Test 1: conversation:status (fresh conversation)');
const statusResult1 = await manager.negotiate('test-conv-1', 'conversation:status');
console.log('Result:', JSON.stringify(statusResult1, null, 2));
console.assert(statusResult1.success, 'Status query should succeed');
console.assert(statusResult1.output.conversationId === 'test-conv-1', 'Should show correct conversation ID');
console.assert(statusResult1.output.stats.intentCount === 0, 'Fresh conversation should have 0 intents');
console.log('✅ PASSED: Fresh conversation status\n');
// Test 2: Create some resources in conversation 1
console.log('Test 2: Create resources in conversation 1');
await manager.negotiate('test-conv-1', 'upgrade:data-tool:level-2');
const createResult1 = await manager.negotiate('test-conv-1', 'create-resource', {
name: 'config',
data: { setting: 'value1' }
});
console.assert(createResult1.success, 'Resource creation should succeed');
console.log('✅ PASSED: Resource created\n');
// Test 3: conversation:status after activity
console.log('Test 3: conversation:status (after activity)');
const statusResult2 = await manager.negotiate('test-conv-1', 'conversation:status');
console.log('Result:', JSON.stringify(statusResult2, null, 2));
console.assert(statusResult2.success, 'Status query should succeed');
console.assert(statusResult2.output.stats.resourceCount === 1, 'Should show 1 resource');
console.assert(statusResult2.output.stats.toolCount === 1, 'Should show 1 tool used (data-tool)');
console.assert(statusResult2.output.toolsUsed.includes('data-tool'), 'Should list data-tool');
console.log('✅ PASSED: Status shows activity\n');
// Test 4: Create a second conversation
console.log('Test 4: Create second conversation');
await manager.negotiate('test-conv-2', 'upgrade:data-tool:level-2');
const createResult2 = await manager.negotiate('test-conv-2', 'create-resource', {
name: 'data',
data: { value: 42 }
});
console.assert(createResult2.success, 'Resource creation should succeed');
console.log('✅ PASSED: Second conversation created\n');
// Test 5: conversation:list
console.log('Test 5: conversation:list');
const listResult = await manager.negotiate('test-conv-1', 'conversation:list');
console.log('Result:', JSON.stringify(listResult, null, 2));
console.assert(listResult.success, 'List query should succeed');
console.assert(listResult.output.count >= 2, 'Should show at least 2 conversations');
console.assert(
listResult.output.conversations.some(c => c.id === 'test-conv-1'),
'Should include test-conv-1'
);
console.assert(
listResult.output.conversations.some(c => c.id === 'test-conv-2'),
'Should include test-conv-2'
);
console.log('✅ PASSED: List shows all conversations\n');
// Test 6: conversation:switch (documentation)
console.log('Test 6: conversation:switch (help)');
const switchResult1 = await manager.negotiate('test-conv-1', 'conversation:switch');
console.log('Result:', JSON.stringify(switchResult1, null, 2));
console.assert(switchResult1.success, 'Switch query should succeed');
console.assert(
switchResult1.output.message.includes('conversationId'),
'Should explain how to switch'
);
console.log('✅ PASSED: Switch help message\n');
// Test 7: conversation:switch with target
console.log('Test 7: conversation:switch (with target)');
const switchResult2 = await manager.negotiate('test-conv-1', 'conversation:switch', {
conversationId: 'test-conv-2'
});
console.log('Result:', JSON.stringify(switchResult2, null, 2));
console.assert(switchResult2.success, 'Switch query should succeed');
console.assert(
switchResult2.output.message.includes('test-conv-2'),
'Should mention target conversation'
);
console.log('✅ PASSED: Switch with target\n');
// Test 8: Verify conversation isolation
console.log('Test 8: Verify conversation isolation');
const status1 = await manager.negotiate('test-conv-1', 'conversation:status');
const status2 = await manager.negotiate('test-conv-2', 'conversation:status');
console.assert(
status1.output.stats.resourceCount === 1,
'Conv 1 should have 1 resource'
);
console.assert(
status2.output.stats.resourceCount === 1,
'Conv 2 should have 1 resource'
);
console.log('✅ PASSED: Conversations are isolated\n');
console.log('=== All Task 5.11 Tests PASSED ===');
console.log('\nConversation meta actions working:');
console.log('- conversation:status ✅');
console.log('- conversation:list ✅');
console.log('- conversation:switch ✅');