feat(cortex): Epic 5 - Integration & Polish complete (MVP DONE)
Epic 5 completes the Cortex V2 MVP with end-to-end integration: E5.S1 - Feature Flag Guards - ActionChainCard wrapped with CORTEX_MULTI_INTENT flag - ClarificationCard wrapped with CORTEX_V2_ENABLED flag - NudgeToast wrapped with CORTEX_NUDGE flag - V1 UI remains functional when flags disabled E5.S2 - Chain Execution Flow - handleConfirmAction routes actions to artifacts via routeIntentToArtifact() - Nudge evaluation triggered after successful action completion - Sequential chain execution with auto-advance useEffect - Chain auto-completes when all actions done E5.S3 - Integration Tests (21 tests) - Scenario 1: Simple input → Reflex handles (4 tests) - Scenario 2: Multi-intent → Orchestrator handles (4 tests) - Scenario 3: Context-dependent → Pronoun resolution (4 tests) - Scenario 4: Wondzorg → Nudge suggestion (4 tests) - Scenario 5: Graceful fallback (3 tests) - Scenario 6: Chain building (2 tests) E5.S4 - Demo Script - 5-minute demo flow with exact phrases - 5 scenes: Reflex speed, Multi-intent, Pronoun, Nudge, Clarification - Backup scenarios documented - Test phrases reference included Files changed: - components/cortex/chat/chat-panel.tsx (feature flags + execution) - components/cortex/command-center/command-center.tsx (NudgeToast flag) - lib/cortex/__tests__/cortex-v2.test.ts (NEW - 21 integration tests) - docs/intent/demo-script-cortex-v2.md (NEW - demo documentation) - docs/intent/bouwplan-cortex-v2.md (v1.5 - MVP complete) MVP Status: 26/26 stories, 48/48 SP - 100% COMPLETE 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,7 @@ import { ChatPanel } from '../chat/chat-panel';
|
||||
import { ArtifactArea } from '../artifacts/artifact-area';
|
||||
import { getArtifactTitle } from '../artifacts/artifact-container';
|
||||
import { routeIntentToArtifact } from '@/lib/cortex/action-parser';
|
||||
import { isFeatureEnabled } from '@/lib/config/feature-flags';
|
||||
|
||||
export function CommandCenter() {
|
||||
const {
|
||||
@@ -131,42 +132,44 @@ export function CommandCenter() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Nudge Toast - E4 (fixed position, bottom-left above chat) */}
|
||||
<AnimatePresence mode="wait">
|
||||
{suggestions.length > 0 && (
|
||||
<div className="fixed bottom-20 left-4 right-4 lg:left-4 lg:right-auto lg:w-[38%] z-50">
|
||||
<NudgeToast
|
||||
key={suggestions[0].id}
|
||||
suggestion={suggestions[0]}
|
||||
onAccept={(id) => {
|
||||
const suggestion = suggestions.find((s) => s.id === id);
|
||||
if (suggestion) {
|
||||
// Route the suggested intent to an artifact
|
||||
const artifact = routeIntentToArtifact(
|
||||
suggestion.suggestion.intent,
|
||||
suggestion.suggestion.entities,
|
||||
1.0 // High confidence since user explicitly accepted
|
||||
);
|
||||
{/* Nudge Toast - E4 (fixed position, bottom-left above chat, feature flagged) */}
|
||||
{isFeatureEnabled('CORTEX_NUDGE') && (
|
||||
<AnimatePresence mode="wait">
|
||||
{suggestions.length > 0 && (
|
||||
<div className="fixed bottom-20 left-4 right-4 lg:left-4 lg:right-auto lg:w-[38%] z-50">
|
||||
<NudgeToast
|
||||
key={suggestions[0].id}
|
||||
suggestion={suggestions[0]}
|
||||
onAccept={(id) => {
|
||||
const suggestion = suggestions.find((s) => s.id === id);
|
||||
if (suggestion) {
|
||||
// Route the suggested intent to an artifact
|
||||
const artifact = routeIntentToArtifact(
|
||||
suggestion.suggestion.intent,
|
||||
suggestion.suggestion.entities,
|
||||
1.0 // High confidence since user explicitly accepted
|
||||
);
|
||||
|
||||
if (artifact) {
|
||||
console.log('[CommandCenter] Opening artifact from nudge:', artifact.type);
|
||||
openArtifact({
|
||||
type: artifact.type,
|
||||
prefill: artifact.prefill,
|
||||
title: artifact.title,
|
||||
});
|
||||
if (artifact) {
|
||||
console.log('[CommandCenter] Opening artifact from nudge:', artifact.type);
|
||||
openArtifact({
|
||||
type: artifact.type,
|
||||
prefill: artifact.prefill,
|
||||
title: artifact.title,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
acceptSuggestion(id);
|
||||
}}
|
||||
onDismiss={(id) => {
|
||||
dismissSuggestion(id);
|
||||
console.log('[CommandCenter] Nudge dismissed:', id);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
acceptSuggestion(id);
|
||||
}}
|
||||
onDismiss={(id) => {
|
||||
dismissSuggestion(id);
|
||||
console.log('[CommandCenter] Nudge dismissed:', id);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user