fix(multi-cli): complete solution details display in summary tab (#98)

Fixed issue where multi-CLI planning solution cards only showed count,
feasibility, effort, and risk badges but had empty content area.

Changes:
- Enhanced renderMultiCliSummaryContent() to extract and display all solution fields
  - Solution name (name/title)
  - Feasibility score (feasibility)
  - Effort level (effort)
  - Risk level (risk)
  - Summary/description (summary)
  - Pros list (pros)
  - Cons list (cons)

- Added CSS styles for solution cards
  - .solution-details, .details-label, .details-list
  - .solution-header, .solution-title-row, .solution-badges
  - .badge with variants for feasibility/effort/risk

- Fixed related issues:
  - Added multiCliPlan support to backend data structures
  - Exposed liteTaskDataStore to window for global access
  - Fixed header left-alignment in detail pages
  - Added 'active' class to tab content for visibility

Files modified:
- ccw/src/templates/dashboard-js/views/lite-tasks.js
- ccw/src/templates/dashboard-css/04-lite-tasks.css
- ccw/src/core/server.ts
- ccw/src/core/routes/system-routes.ts
- ccw/src/templates/dashboard-js/state.js
- ccw/src/templates/dashboard-css/02-session.css
- ccw/src/config/litellm-api-config-manager.ts (fix homedir import)

Closes #98
This commit is contained in:
catlog22
2026-01-22 15:30:35 +08:00
parent 02531c4d15
commit 2fffe78dc9
7 changed files with 174 additions and 19 deletions

View File

@@ -1732,12 +1732,25 @@
align-items: center;
justify-content: space-between;
gap: 1rem;
margin-bottom: 0.75rem;
padding: 0.75rem 1rem;
background: hsl(var(--muted) / 0.2);
border-bottom: 1px solid hsl(var(--border));
}
.solution-title-row {
display: flex;
align-items: center;
gap: 0.5rem;
flex: 1;
}
.solution-badges {
display: flex;
align-items: center;
gap: 0.5rem;
flex-shrink: 0;
}
.solution-title {
font-weight: 600;
font-size: 0.95rem;
@@ -2782,6 +2795,39 @@
border-bottom: 1px solid hsl(var(--border));
}
.solution-details {
padding: 0.75rem 1rem;
border-bottom: 1px solid hsl(var(--border) / 0.5);
}
.solution-details:last-child {
border-bottom: none;
}
.details-label {
font-size: 0.8125rem;
font-weight: 600;
margin: 0 0 0.5rem 0;
color: hsl(var(--foreground));
}
.details-list {
margin: 0;
padding-left: 1.25rem;
list-style: disc;
}
.details-list li {
font-size: 0.8125rem;
line-height: 1.6;
color: hsl(var(--muted-foreground));
margin-bottom: 0.375rem;
}
.details-list li:last-child {
margin-bottom: 0;
}
.solution-approach,
.solution-dependencies,
.solution-concerns {
@@ -3976,6 +4022,62 @@
border-top: 1px solid hsl(var(--border) / 0.5);
}
/* Badge - generic badge styling */
.badge {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.625rem;
border-radius: 0.25rem;
font-size: 0.75rem;
font-weight: 500;
white-space: nowrap;
}
.badge.feasibility {
background: hsl(var(--primary) / 0.1);
color: hsl(var(--primary));
}
.badge.effort {
background: hsl(var(--muted));
color: hsl(var(--foreground));
}
.badge.effort.low {
background: hsl(142 70% 50% / 0.15);
color: hsl(142 70% 35%);
}
.badge.effort.medium {
background: hsl(30 90% 50% / 0.15);
color: hsl(30 90% 40%);
}
.badge.effort.high {
background: hsl(0 70% 50% / 0.15);
color: hsl(0 70% 45%);
}
.badge.risk {
background: hsl(var(--muted));
color: hsl(var(--foreground));
}
.badge.risk.low {
background: hsl(142 70% 50% / 0.15);
color: hsl(142 70% 35%);
}
.badge.risk.medium {
background: hsl(30 90% 50% / 0.15);
color: hsl(30 90% 40%);
}
.badge.risk.high {
background: hsl(0 70% 50% / 0.15);
color: hsl(0 70% 45%);
}
/* Feasibility badge */
.feasibility-badge {
display: inline-flex;