diff --git a/ccw/src/config/litellm-api-config-manager.ts b/ccw/src/config/litellm-api-config-manager.ts index 8f3b614c..6110920c 100644 --- a/ccw/src/config/litellm-api-config-manager.ts +++ b/ccw/src/config/litellm-api-config-manager.ts @@ -4,9 +4,10 @@ */ import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'fs'; -import { homedir } from 'os'; import { join } from 'path'; +import { homedir } from 'os'; import { StoragePaths, GlobalPaths, ensureStorageDir } from './storage-paths.js'; +import { getCodexLensDataDir } from '../utils/codexlens-path.js'; import type { LiteLLMApiConfig, ProviderCredential, @@ -798,7 +799,7 @@ export function syncCodexLensConfig(baseDir: string): { success: boolean; messag const rotationConfig = config.codexlensEmbeddingRotation; // Get CodexLens settings path - const codexlensDir = join(homedir(), '.codexlens'); + const codexlensDir = getCodexLensDataDir(); const settingsPath = join(codexlensDir, 'settings.json'); // Ensure directory exists diff --git a/ccw/src/core/routes/system-routes.ts b/ccw/src/core/routes/system-routes.ts index ab509276..f4260fa3 100644 --- a/ccw/src/core/routes/system-routes.ts +++ b/ccw/src/core/routes/system-routes.ts @@ -145,7 +145,7 @@ async function getWorkflowData(projectPath: string): Promise { generatedAt: new Date().toISOString(), activeSessions: [], archivedSessions: [], - liteTasks: { litePlan: [], liteFix: [] }, + liteTasks: { litePlan: [], liteFix: [], multiCliPlan: [] }, reviewData: { dimensions: {} }, projectOverview: null, statistics: { @@ -155,7 +155,8 @@ async function getWorkflowData(projectPath: string): Promise { completedTasks: 0, reviewFindings: 0, litePlanCount: 0, - liteFixCount: 0 + liteFixCount: 0, + multiCliPlanCount: 0 }, projectPath: normalizePathForDisplay(resolvedPath), recentPaths: getRecentPaths() diff --git a/ccw/src/core/server.ts b/ccw/src/core/server.ts index de8de2c3..5b5be4d9 100644 --- a/ccw/src/core/server.ts +++ b/ccw/src/core/server.ts @@ -29,7 +29,7 @@ import { handleLiteLLMApiRoutes } from './routes/litellm-api-routes.js'; import { handleNavStatusRoutes } from './routes/nav-status-routes.js'; import { handleAuthRoutes } from './routes/auth-routes.js'; import { handleLoopRoutes } from './routes/loop-routes.js'; -import { handleLoopV2Routes } from './routes/loop-v2-routes.js'; +import { handleLoopV2Routes, initializeCliToolsCache } from './routes/loop-v2-routes.js'; import { handleTestLoopRoutes } from './routes/test-loop-routes.js'; import { handleTaskRoutes } from './routes/task-routes.js'; @@ -383,10 +383,10 @@ function generateServerDashboard(initialPath: string): string { generatedAt: new Date().toISOString(), activeSessions: [], archivedSessions: [], - liteTasks: { litePlan: [], liteFix: [] }, + liteTasks: { litePlan: [], liteFix: [], multiCliPlan: [] }, reviewData: { dimensions: {} }, projectOverview: null, - statistics: { totalSessions: 0, activeSessions: 0, totalTasks: 0, completedTasks: 0, reviewFindings: 0, litePlanCount: 0, liteFixCount: 0 } + statistics: { totalSessions: 0, activeSessions: 0, totalTasks: 0, completedTasks: 0, reviewFindings: 0, litePlanCount: 0, liteFixCount: 0, multiCliPlanCount: 0 } }; // Replace JS placeholders @@ -723,6 +723,9 @@ export async function startServer(options: ServerOptions = {}): Promise -
+
${renderMultiCliTasksTab(session)}
@@ -653,12 +653,17 @@ function switchMultiCliDetailTab(tabName) { break; case 'context': loadAndRenderMultiCliContextTab(session, contentArea); + contentArea.classList.add('active'); return; // Early return as this is async case 'summary': loadAndRenderMultiCliSummaryTab(session, contentArea); + contentArea.classList.add('active'); return; // Early return as this is async } + // Add active class to show content + contentArea.classList.add('active'); + // Re-initialize after tab switch setTimeout(() => { if (typeof lucide !== 'undefined') lucide.createIcons(); @@ -1097,13 +1102,52 @@ function renderMultiCliSummaryContent(summary, session) { `); @@ -2722,12 +2766,12 @@ function showLiteTaskDetailPage(sessionKey) {
-

${session.type === 'lite-plan' ? '' : ''} ${escapeHtml(session.id)}

+

${session.type === 'lite-plan' ? '' : session.type === 'lite-fix' ? '' : ''} ${escapeHtml(session.id)}

- ${session.type} + ${session.type === 'multi-cli-plan' ? 'MULTI-CLI' : session.type}