π¬
- Welkom bij Swift Assistent
+ Welkom bij Cortex Assistent
Typ of spreek wat je wilt doen...
diff --git a/components/swift/command-center/canvas-area.tsx b/components/cortex/command-center/canvas-area.tsx
similarity index 95%
rename from components/swift/command-center/canvas-area.tsx
rename to components/cortex/command-center/canvas-area.tsx
index 3c84bba..46e1ad0 100644
--- a/components/swift/command-center/canvas-area.tsx
+++ b/components/cortex/command-center/canvas-area.tsx
@@ -7,8 +7,8 @@
*/
import { AnimatePresence, motion } from 'framer-motion';
-import { useSwiftStore } from '@/stores/swift-store';
-import type { BlockType, BlockPrefillData } from '@/stores/swift-store';
+import { useCortexStore } from '@/stores/cortex-store';
+import type { BlockType, BlockPrefillData } from '@/stores/cortex-store';
import { DagnotatieBlock } from '../blocks/dagnotitie-block';
import { ZoekenBlock } from '../blocks/zoeken-block';
import { OverdrachtBlock } from '../blocks/overdracht-block';
@@ -16,7 +16,7 @@ import { PatientContextCard } from '../blocks/patient-context-card';
import { FallbackPicker } from '../blocks/fallback-picker';
export function CanvasArea() {
- const { activeBlock, prefillData, activePatient } = useSwiftStore();
+ const { activeBlock, prefillData, activePatient } = useCortexStore();
function renderBlock(blockType: BlockType, prefill: BlockPrefillData) {
switch (blockType) {
diff --git a/components/swift/command-center/command-center.tsx b/components/cortex/command-center/command-center.tsx
similarity index 94%
rename from components/swift/command-center/command-center.tsx
rename to components/cortex/command-center/command-center.tsx
index d3abb6d..179e16a 100644
--- a/components/swift/command-center/command-center.tsx
+++ b/components/cortex/command-center/command-center.tsx
@@ -3,7 +3,7 @@
/**
* Command Center (v3.0)
*
- * Main container for the Swift interface.
+ * Main container for the Cortex interface.
* Split-screen layout: Chat Panel (40%) | Artifact Area (60%)
*
* Layout specs:
@@ -17,16 +17,16 @@
*/
import { useEffect, useCallback, useRef } from 'react';
-import { useSwiftStore } from '@/stores/swift-store';
+import { useCortexStore } from '@/stores/cortex-store';
import { ContextBar } from './context-bar';
import { OfflineBanner } from './offline-banner';
import { ChatPanel } from '../chat/chat-panel';
import { ArtifactArea } from '../artifacts/artifact-area';
import { getArtifactTitle } from '../artifacts/artifact-container';
-import { routeIntentToArtifact } from '@/lib/swift/action-parser';
+import { routeIntentToArtifact } from '@/lib/cortex/action-parser';
export function CommandCenter() {
- const { closeAllArtifacts, openArtifacts, openArtifact, pendingAction, setPendingAction } = useSwiftStore();
+ const { closeAllArtifacts, openArtifacts, openArtifact, pendingAction, setPendingAction } = useCortexStore();
const inputRef = useRef(null);
// Global keyboard shortcuts
diff --git a/components/swift/command-center/command-input.tsx b/components/cortex/command-center/command-input.tsx
similarity index 96%
rename from components/swift/command-center/command-input.tsx
rename to components/cortex/command-center/command-input.tsx
index e118126..eca2962 100644
--- a/components/swift/command-center/command-input.tsx
+++ b/components/cortex/command-center/command-input.tsx
@@ -15,13 +15,13 @@
*/
import { forwardRef, useState, useEffect, useRef } from 'react';
-import { useSwiftStore } from '@/stores/swift-store';
-import { useSwiftVoice } from '@/lib/swift/use-swift-voice';
-import type { BlockType } from '@/lib/swift/types';
+import { useCortexStore } from '@/stores/cortex-store';
+import { useCortexVoice } from '@/lib/cortex/use-cortex-voice';
+import type { BlockType } from '@/lib/cortex/types';
import { Mic, MicOff, Send, Loader2 } from 'lucide-react';
import { useToast } from '@/hooks/use-toast';
-import { safeFetch, getErrorInfo } from '@/lib/swift/error-handler';
-import { routeIntentToArtifact } from '@/lib/swift/action-parser';
+import { safeFetch, getErrorInfo } from '@/lib/cortex/error-handler';
+import { routeIntentToArtifact } from '@/lib/cortex/action-parser';
export const CommandInput = forwardRef(function CommandInput(_, ref) {
const {
@@ -34,7 +34,7 @@ export const CommandInput = forwardRef(function CommandInput(_
openBlock,
openArtifact,
addRecentAction,
- } = useSwiftStore();
+ } = useCortexStore();
const { toast } = useToast();
const {
@@ -46,7 +46,7 @@ export const CommandInput = forwardRef(function CommandInput(_
stopRecording,
analyserNode,
isBrowserSupported,
- } = useSwiftVoice();
+ } = useCortexVoice();
const [isProcessing, setIsProcessing] = useState(false);
const waveformRef = useRef(null);
diff --git a/components/swift/command-center/context-bar.tsx b/components/cortex/command-center/context-bar.tsx
similarity index 95%
rename from components/swift/command-center/context-bar.tsx
rename to components/cortex/command-center/context-bar.tsx
index d226569..23390a7 100644
--- a/components/swift/command-center/context-bar.tsx
+++ b/components/cortex/command-center/context-bar.tsx
@@ -7,7 +7,7 @@
* Height: 48px (h-12)
*/
-import { useSwiftStore, type ShiftType } from '@/stores/swift-store';
+import { useCortexStore, type ShiftType } from '@/stores/cortex-store';
import { Sun, Moon, Sunrise, Sunset, X, User, ArrowLeft } from 'lucide-react';
import Link from 'next/link';
import { useOffline } from './offline-banner';
@@ -20,7 +20,7 @@ const SHIFT_CONFIG: Record = {
+const INTENT_CONFIG: Record = {
dagnotitie: { icon: FileText, color: 'text-blue-600 bg-blue-50 border border-blue-200', label: 'Notitie' },
zoeken: { icon: Search, color: 'text-emerald-600 bg-emerald-50 border border-emerald-200', label: 'Zoeken' },
overdracht: { icon: ArrowRightLeft, color: 'text-purple-600 bg-purple-50 border border-purple-200', label: 'Overdracht' },
@@ -34,7 +34,7 @@ function formatRelativeTime(date: Date): string {
}
export function RecentStrip() {
- const { recentActions, setInputValue, openBlock } = useSwiftStore();
+ const { recentActions, setInputValue, openBlock } = useCortexStore();
const handleActionClick = (action: typeof recentActions[0]) => {
// Set the input to repeat the action
diff --git a/components/swift/index.ts b/components/cortex/index.ts
similarity index 66%
rename from components/swift/index.ts
rename to components/cortex/index.ts
index 6b06b46..df92fb6 100644
--- a/components/swift/index.ts
+++ b/components/cortex/index.ts
@@ -1,5 +1,5 @@
/**
- * Swift Components Barrel Export
+ * Cortex Components Barrel Export
*/
export * from './command-center';
diff --git a/components/swift/shared/linked-evidence.tsx b/components/cortex/shared/linked-evidence.tsx
similarity index 100%
rename from components/swift/shared/linked-evidence.tsx
rename to components/cortex/shared/linked-evidence.tsx
diff --git a/docs/intent/architecture-intent-scalability.md b/docs/intent/architecture-intent-scalability.md
index 3a49a3c..c192008 100644
--- a/docs/intent/architecture-intent-scalability.md
+++ b/docs/intent/architecture-intent-scalability.md
@@ -74,7 +74,7 @@ enum IntentCategory {
SEARCH = 'search', // Zoeken, info opvragen
}
-type SwiftIntent =
+type CortexIntent =
// SAFETY (Hoogste prioriteit - altijd eerst checken)
| 'risicotaxatie' // "Risico inschatten bij Jan" / "SuΓ―cidaliteit checken"
| 'signaleringsplan' // "Signaleringsplan maken" / "Waarschuwingssignalen vastleggen"
@@ -159,7 +159,7 @@ function hasSafetySignal(input: string): boolean {
### Implementation
```typescript
-// lib/swift/intent-classifier-hierarchical.ts
+// lib/cortex/intent-classifier-hierarchical.ts
interface CategoryPattern {
pattern: RegExp;
@@ -435,14 +435,14 @@ export function classifyIntentHierarchical(input: string): ClassificationResult
// PHASE 2: Detect intent within category (smaller search space)
const categoryIntents = INTENT_PATTERNS_BY_CATEGORY[bestCategory];
- let bestIntent: SwiftIntent = 'unknown';
+ let bestIntent: CortexIntent = 'unknown';
let intentConfidence = 0;
for (const [intent, patterns] of Object.entries(categoryIntents)) {
for (const { pattern, weight } of patterns) {
if (pattern.test(input)) {
if (weight > intentConfidence) {
- bestIntent = intent as SwiftIntent;
+ bestIntent = intent as CortexIntent;
intentConfidence = weight;
}
if (weight === 1.0) break; // Perfect match
@@ -542,16 +542,16 @@ Order intents op basis van gebruiksfrequentie.
```typescript
interface IntentMetrics {
- intent: SwiftIntent;
+ intent: CortexIntent;
frequency: number; // Times used
avgConfidence: number; // Average confidence
avgProcessingTime: number;
}
// Track usage
-const INTENT_STATS = new Map();
+const INTENT_STATS = new Map();
-function trackIntentUsage(intent: SwiftIntent, confidence: number, time: number) {
+function trackIntentUsage(intent: CortexIntent, confidence: number, time: number) {
const stats = INTENT_STATS.get(intent) || {
intent,
frequency: 0,
@@ -704,9 +704,9 @@ function classifyCompositional(input: string): ComposedIntent {
}
// Map to legacy intent
-function toLegacyIntent(composed: ComposedIntent): SwiftIntent {
+function toLegacyIntent(composed: ComposedIntent): CortexIntent {
const key = `${composed.subject}_${composed.action}`;
- const mapping: Record = {
+ const mapping: Record = {
// Risico
'risico_inschatten': 'risicotaxatie',
'suicidaliteit_inschatten': 'risicotaxatie',
@@ -951,7 +951,7 @@ const patterns = [
### Code Structuur (GGZ)
```
-lib/swift/
+lib/cortex/
βββ intent-classifier.ts # Current (keep for now)
βββ intent-classifier-hierarchical.ts # New (implement in fase 2)
βββ intent-classifier-ai.ts # Current AI fallback
@@ -1023,8 +1023,8 @@ describe('Intent Classification Performance', () => {
**Step 1: Define Categories (GGZ)**
```typescript
-// lib/swift/intent-categories.ts
-export const INTENT_CATEGORY_MAP: Record = {
+// lib/cortex/intent-categories.ts
+export const INTENT_CATEGORY_MAP: Record = {
// π¨ Safety (Hoogste prioriteit)
'risicotaxatie': IntentCategory.SAFETY,
'signaleringsplan': IntentCategory.SAFETY,
@@ -1085,19 +1085,19 @@ export const INTENT_CATEGORY_MAP: Record = {
```bash
# Create pattern files per category
-mkdir lib/swift/intent-patterns
-touch lib/swift/intent-patterns/safety.ts # π¨ Prioriteit
-touch lib/swift/intent-patterns/treatment.ts
-touch lib/swift/intent-patterns/observation.ts
-touch lib/swift/intent-patterns/medication.ts
-touch lib/swift/intent-patterns/assessment.ts
-touch lib/swift/intent-patterns/scheduling.ts
-touch lib/swift/intent-patterns/communication.ts
-touch lib/swift/intent-patterns/search.ts
+mkdir lib/cortex/intent-patterns
+touch lib/cortex/intent-patterns/safety.ts # π¨ Prioriteit
+touch lib/cortex/intent-patterns/treatment.ts
+touch lib/cortex/intent-patterns/observation.ts
+touch lib/cortex/intent-patterns/medication.ts
+touch lib/cortex/intent-patterns/assessment.ts
+touch lib/cortex/intent-patterns/scheduling.ts
+touch lib/cortex/intent-patterns/communication.ts
+touch lib/cortex/intent-patterns/search.ts
```
```typescript
-// lib/swift/intent-patterns/safety.ts
+// lib/cortex/intent-patterns/safety.ts
export const SAFETY_PATTERNS = {
risicotaxatie: [
{ pattern: /^risico\s*(taxatie|inschatting)/i, weight: 1.0 },
@@ -1111,7 +1111,7 @@ export const SAFETY_PATTERNS = {
// ...
};
-// lib/swift/intent-patterns/treatment.ts
+// lib/cortex/intent-patterns/treatment.ts
export const TREATMENT_PATTERNS = {
behandelplan_maken: [
{ pattern: /^(maak|start)\s*behandelplan/i, weight: 1.0 },
@@ -1126,7 +1126,7 @@ export const TREATMENT_PATTERNS = {
**Step 3: Build Hierarchical Classifier**
```typescript
-// lib/swift/intent-classifier-hierarchical.ts
+// lib/cortex/intent-classifier-hierarchical.ts
import { DOCUMENTATION_PATTERNS } from './intent-patterns/documentation';
import { PATIENT_CARE_PATTERNS } from './intent-patterns/patient-care';
// ... import all
diff --git a/docs/intent/architecture-swift-cortex-v2.md b/docs/intent/architecture-swift-cortex-v2.md
index cc41c02..8130571 100644
--- a/docs/intent/architecture-swift-cortex-v2.md
+++ b/docs/intent/architecture-swift-cortex-v2.md
@@ -14,7 +14,7 @@
3. [Data Models & Types](#3-data-models--types)
4. [Layer 1: Reflex Arc](#4-layer-1-reflex-arc)
5. [Layer 2: Intent Orchestrator](#5-layer-2-intent-orchestrator)
-6. [Layer 3: Safety Net](#6-layer-3-safety-net)
+6. [Layer 3: Nudge](#6-layer-3-nudge)
7. [API Design](#7-api-design)
8. [Frontend Components](#8-frontend-components)
9. [State Management](#9-state-management)
@@ -92,7 +92,7 @@ Transformatie naar een **agentic systeem** dat:
[Action Completed]
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β LAYER 3: SAFETY NET (POST-ACTION INTELLIGENCE) [async] β
+β LAYER 3: NUDGE (POST-ACTION INTELLIGENCE) [async] β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β’ Protocol Rules Engine: medical domain knowledge β β
β β β’ Trigger evaluation: "Does this action warrant a follow-up?" β β
@@ -108,7 +108,7 @@ Transformatie naar een **agentic systeem** dat:
```
ββββββββββββ βββββββββββ βββββββββββββββ ββββββββββββ βββββββββββββ
β Speech βββββΊβ Input βββββΊβ Classify βββββΊβ Execute βββββΊβ Safety β
-β /Text β β Buffer β β (L1/L2) β β Chain β β Net β
+β /Text β β Buffer β β (L1/L2) β β Chain β β Nudge β
ββββββββββββ βββββββββββ βββββββββββββββ ββββββββββββ βββββββββββββ
β β β
βΌ βΌ βΌ
@@ -122,14 +122,14 @@ Transformatie naar een **agentic systeem** dat:
## 3. Data Models & Types
-### 3.1 Core Types (lib/swift/types.ts)
+### 3.1 Core Types (lib/cortex/types.ts)
```typescript
// ============================================================================
// INTENT TYPES
// ============================================================================
-export type SwiftIntent =
+export type CortexIntent =
| 'dagnotitie'
| 'zoeken'
| 'overdracht'
@@ -146,7 +146,7 @@ export type SwiftIntent =
/**
* Full context passed to AI for intelligent classification
*/
-export interface SwiftContext {
+export interface CortexContext {
// Active patient (if any)
activePatient: {
id: string;
@@ -175,7 +175,7 @@ export interface SwiftContext {
// Recent intents (for continuity)
recentIntents: {
- intent: SwiftIntent;
+ intent: CortexIntent;
patientName?: string;
timestamp: Date;
}[];
@@ -183,7 +183,7 @@ export interface SwiftContext {
// User preferences (adaptive confidence)
userPreferences?: {
confirmationLevel: 'always' | 'destructive' | 'never';
- frequentIntents: SwiftIntent[];
+ frequentIntents: CortexIntent[];
};
}
@@ -221,7 +221,7 @@ export interface IntentAction {
sequence: number; // Order in chain (1, 2, 3...)
// Classification
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
// Extracted data
@@ -311,25 +311,25 @@ export type AppointmentType =
| 'overig';
// ============================================================================
-// SAFETY NET TYPES (NEW in V2)
+// NUDGE TYPES (NEW in V2)
// ============================================================================
/**
- * A suggestion generated by the Safety Net
+ * A suggestion generated by the Nudge layer
*/
-export interface SafetySuggestion {
+export interface NudgeSuggestion {
id: string;
// What triggered this suggestion
trigger: {
actionId: string;
- intent: SwiftIntent;
+ intent: CortexIntent;
entities: ExtractedEntities;
};
// The suggestion itself
suggestion: {
- intent: SwiftIntent;
+ intent: CortexIntent;
entities: Partial;
message: string; // "Wondcontrole inplannen over 3 dagen?"
rationale: string; // "Bij wondzorg hoort standaard een controle"
@@ -355,13 +355,13 @@ export interface ProtocolRule {
// When to trigger
trigger: {
- intent: SwiftIntent;
+ intent: CortexIntent;
conditions?: ProtocolCondition[];
};
// What to suggest
suggestion: {
- intent: SwiftIntent;
+ intent: CortexIntent;
message: string;
prefillFrom: (source: ExtractedEntities) => Partial;
};
@@ -386,7 +386,7 @@ export interface ProtocolCondition {
* Result from Layer 1 (Local Reflex)
*/
export interface LocalClassificationResult {
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
matchedPattern?: string;
processingTimeMs: number;
@@ -434,33 +434,33 @@ export interface ClassificationResult {
}
```
-### 3.2 Store Types (stores/swift-store.ts additions)
+### 3.2 Store Types (stores/cortex-store.ts additions)
```typescript
-// Add to existing SwiftStore interface
+// Add to existing CortexStore interface
-interface SwiftStoreV2 extends SwiftStore {
+interface CortexStoreV2 extends CortexStore {
// Context (enhanced)
- context: SwiftContext;
-
+ context: CortexContext;
+
// Intent Chain state
activeChain: IntentChain | null;
chainHistory: IntentChain[];
- // Safety Net state
- pendingSuggestions: SafetySuggestion[];
- suggestionHistory: SafetySuggestion[];
+ // Nudge state
+ pendingSuggestions: NudgeSuggestion[];
+ suggestionHistory: NudgeSuggestion[];
// Actions
- setContext: (context: Partial) => void;
+ setContext: (context: Partial) => void;
// Chain actions
startChain: (chain: IntentChain) => void;
updateActionStatus: (chainId: string, actionId: string, status: IntentAction['status']) => void;
completeChain: (chainId: string) => void;
- // Safety Net actions
- addSuggestion: (suggestion: SafetySuggestion) => void;
+ // Nudge actions
+ addSuggestion: (suggestion: NudgeSuggestion) => void;
acceptSuggestion: (suggestionId: string) => void;
dismissSuggestion: (suggestionId: string) => void;
}
@@ -479,7 +479,7 @@ Razendsnelle (<20ms) afhandeling van **simpele, eenduidige commando's** met hoge
- Geen context-afhankelijke woorden ("hij", "haar", "die afspraak")
- Geen tijdsrelaties die interpretatie nodig hebben
-### 4.3 Implementatie (lib/swift/reflex-classifier.ts)
+### 4.3 Implementatie (lib/cortex/reflex-classifier.ts)
```typescript
/**
@@ -489,7 +489,7 @@ Razendsnelle (<20ms) afhandeling van **simpele, eenduidige commando's** met hoge
* Escalates to Layer 2 when complexity is detected.
*/
-import type { LocalClassificationResult, SwiftIntent } from './types';
+import type { LocalClassificationResult, CortexIntent } from './types';
// Multi-intent signal words
const MULTI_INTENT_SIGNALS = [
@@ -513,7 +513,7 @@ const CONTEXT_SIGNALS = [
];
// Intent patterns with weights
-const REFLEX_PATTERNS: Record> = {
+const REFLEX_PATTERNS: Record> = {
dagnotitie: [
{ pattern: /^dagnotitie\b/i, weight: 1.0 },
{ pattern: /^notitie\s+\w+\s+(medicatie|adl|gedrag|incident|observatie)\b/i, weight: 0.95 },
@@ -617,14 +617,14 @@ export function classifyWithReflex(input: string): LocalClassificationResult {
}
// Step 2: Pattern matching
- let bestMatch: { intent: SwiftIntent; confidence: number; pattern: string } | null = null;
+ let bestMatch: { intent: CortexIntent; confidence: number; pattern: string } | null = null;
for (const [intent, patterns] of Object.entries(REFLEX_PATTERNS)) {
for (const { pattern, weight } of patterns) {
if (pattern.test(trimmedInput)) {
if (!bestMatch || weight > bestMatch.confidence) {
bestMatch = {
- intent: intent as SwiftIntent,
+ intent: intent as CortexIntent,
confidence: weight,
pattern: pattern.source,
};
@@ -677,7 +677,7 @@ De AI krijgt altijd volledige context mee:
/**
* Build context for AI classification
*/
-export function buildSwiftContext(store: SwiftStore): SwiftContext {
+export function buildCortexContext(store: CortexStore): CortexContext {
return {
activePatient: store.activePatient ? {
id: store.activePatient.id,
@@ -699,7 +699,7 @@ export function buildSwiftContext(store: SwiftStore): SwiftContext {
}
```
-### 5.3 Implementatie (lib/swift/orchestrator.ts)
+### 5.3 Implementatie (lib/cortex/orchestrator.ts)
```typescript
/**
@@ -710,7 +710,7 @@ export function buildSwiftContext(store: SwiftStore): SwiftContext {
import Anthropic from '@anthropic-ai/sdk';
import type {
- SwiftContext,
+ CortexContext,
IntentChain,
IntentAction,
AIClassificationResult
@@ -789,7 +789,7 @@ Als je twijfelt, stel een verduidelijkingsvraag:
/**
* Format context for AI prompt
*/
-function formatContextForPrompt(context: SwiftContext): string {
+function formatContextForPrompt(context: CortexContext): string {
const lines: string[] = [];
// Active patient
@@ -829,7 +829,7 @@ function formatContextForPrompt(context: SwiftContext): string {
*/
export async function classifyWithOrchestrator(
input: string,
- context: SwiftContext
+ context: CortexContext
): Promise {
const startTime = performance.now();
@@ -903,7 +903,7 @@ Analyseer en extraheer alle intenties.`,
*/
function parseAIResponse(rawText: string): {
actions: Array<{
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
entities: ExtractedEntities;
requiresConfirmation?: boolean;
@@ -944,7 +944,7 @@ function parseAIResponse(rawText: string): {
---
-## 6. Layer 3: Safety Net
+## 6. Layer 3: Nudge
### 6.1 Doel
Proactieve suggesties na succesvolle acties op basis van medische protocollen en domeinkennis.
@@ -953,17 +953,17 @@ Proactieve suggesties na succesvolle acties op basis van medische protocollen en
```typescript
/**
- * Layer 3: Safety Net
- *
+ * Layer 3: Nudge
+ *
* Post-action intelligence that suggests follow-up actions
* based on medical protocols and domain knowledge.
*/
-import type {
- IntentAction,
- SafetySuggestion,
+import type {
+ IntentAction,
+ NudgeSuggestion,
ProtocolRule,
- ExtractedEntities
+ ExtractedEntities
} from './types';
// ============================================================================
@@ -1102,7 +1102,7 @@ export const PROTOCOL_RULES: ProtocolRule[] = [
];
// ============================================================================
-// SAFETY NET ENGINE
+// NUDGE ENGINE
// ============================================================================
/**
@@ -1139,10 +1139,10 @@ function checkCondition(
/**
* Evaluate all protocol rules against a completed action
*/
-export function evaluateSafetyNet(
+export function evaluateNudge(
completedAction: IntentAction
-): SafetySuggestion[] {
- const suggestions: SafetySuggestion[] = [];
+): NudgeSuggestion[] {
+ const suggestions: NudgeSuggestion[] = [];
for (const rule of PROTOCOL_RULES) {
if (!rule.enabled) continue;
@@ -1159,7 +1159,7 @@ export function evaluateSafetyNet(
if (!conditionsMet) continue;
// Generate suggestion
- const suggestion: SafetySuggestion = {
+ const suggestion: NudgeSuggestion = {
id: crypto.randomUUID(),
trigger: {
actionId: completedAction.id,
@@ -1201,16 +1201,16 @@ export function evaluateSafetyNet(
// app/api/intent/classify/route.ts (V2)
import { NextRequest, NextResponse } from 'next/server';
-import { classifyWithReflex } from '@/lib/swift/reflex-classifier';
-import { classifyWithOrchestrator } from '@/lib/swift/orchestrator';
-import { evaluateSafetyNet } from '@/lib/swift/safety-net';
-import { extractEntities } from '@/lib/swift/entity-extractor';
-import type { ClassificationResult, SwiftContext } from '@/lib/swift/types';
+import { classifyWithReflex } from '@/lib/cortex/reflex-classifier';
+import { classifyWithOrchestrator } from '@/lib/cortex/orchestrator';
+import { evaluateNudge } from '@/lib/cortex/nudge';
+import { extractEntities } from '@/lib/cortex/entity-extractor';
+import type { ClassificationResult, CortexContext } from '@/lib/cortex/types';
// Request schema
interface ClassifyRequest {
input: string;
- context: SwiftContext;
+ context: CortexContext;
options?: {
forceAI?: boolean;
skipSafetyNet?: boolean;
@@ -1227,8 +1227,8 @@ interface ClassifyResponse {
clarificationQuestion?: string;
clarificationOptions?: string[];
- // Safety Net suggestions (if any)
- suggestions?: SafetySuggestion[];
+ // Nudge suggestions (if any)
+ suggestions?: NudgeSuggestion[];
// Debug info (dev only)
debug?: object;
@@ -1326,14 +1326,14 @@ interface ExecuteRequest {
interface ExecuteResponse {
success: boolean;
action: IntentAction;
- suggestions?: SafetySuggestion[]; // From Safety Net
+ suggestions?: NudgeSuggestion[]; // From Nudge
error?: string;
}
```
### 7.3 Context API
-**Endpoint:** `GET /api/swift/context`
+**Endpoint:** `GET /api/cortex/context`
Returns current context for AI classification:
- Active patient
@@ -1363,19 +1363,19 @@ CommandCenter (v3.0)
βββ ArtifactArea
β βββ ArtifactTabs
β βββ ArtifactContainer
-βββ SuggestionToast (NEW - Layer 3)
+βββ NudgeToast (NEW - Layer 3)
```
### 8.2 ActionChainCard Component
```tsx
-// components/swift/chat/action-chain-card.tsx
+// components/cortex/chat/action-chain-card.tsx
'use client';
import { useState } from 'react';
import { Check, X, Loader2, AlertCircle } from 'lucide-react';
-import type { IntentChain, IntentAction } from '@/lib/swift/types';
+import type { IntentChain, IntentAction } from '@/lib/cortex/types';
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
@@ -1536,21 +1536,21 @@ function ActionItem({
}
```
-### 8.3 SuggestionToast Component (Layer 3 UI)
+### 8.3 NudgeToast Component (Layer 3 UI)
```tsx
-// components/swift/suggestion-toast.tsx
+// components/cortex/command-center/nudge-toast.tsx
'use client';
import { useEffect, useState } from 'react';
import { X, Lightbulb, ArrowRight } from 'lucide-react';
-import type { SafetySuggestion } from '@/lib/swift/types';
+import type { NudgeSuggestion } from '@/lib/cortex/types';
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
-interface SuggestionToastProps {
- suggestion: SafetySuggestion;
+interface NudgeToastProps {
+ suggestion: NudgeSuggestion;
onAccept: (suggestionId: string) => void;
onDismiss: (suggestionId: string) => void;
}
@@ -1561,11 +1561,11 @@ const PRIORITY_STYLES = {
low: 'border-blue-200 bg-blue-50',
};
-export function SuggestionToast({
- suggestion,
- onAccept,
- onDismiss
-}: SuggestionToastProps) {
+export function NudgeToast({
+ suggestion,
+ onAccept,
+ onDismiss
+}: NudgeToastProps) {
const [isVisible, setIsVisible] = useState(false);
const [timeLeft, setTimeLeft] = useState(100);
@@ -1660,7 +1660,7 @@ export function SuggestionToast({
### 8.4 ClarificationCard Component
```tsx
-// components/swift/chat/clarification-card.tsx
+// components/cortex/chat/clarification-card.tsx
'use client';
@@ -1710,24 +1710,24 @@ export function ClarificationCard({
## 9. State Management
-### 9.1 Enhanced Swift Store
+### 9.1 Enhanced Cortex Store
```typescript
-// stores/swift-store.ts (V2 additions)
+// stores/cortex-store.ts (V2 additions)
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import type {
- SwiftContext,
+ CortexContext,
IntentChain,
IntentAction,
- SafetySuggestion,
-} from '@/lib/swift/types';
+ NudgeSuggestion,
+} from '@/lib/cortex/types';
-interface SwiftStoreV2 {
+interface CortexStoreV2 {
// ============ CONTEXT ============
- context: SwiftContext;
- setContext: (context: Partial) => void;
+ context: CortexContext;
+ setContext: (context: Partial) => void;
// ============ INTENT CHAINS ============
activeChain: IntentChain | null;
@@ -1745,10 +1745,10 @@ interface SwiftStoreV2 {
skipAction: (chainId: string, actionId: string) => void;
completeChain: (chainId: string) => void;
- // ============ SAFETY NET ============
- suggestions: SafetySuggestion[];
+ // ============ NUDGE ============
+ suggestions: NudgeSuggestion[];
- addSuggestion: (suggestion: SafetySuggestion) => void;
+ addSuggestion: (suggestion: NudgeSuggestion) => void;
acceptSuggestion: (suggestionId: string) => void;
dismissSuggestion: (suggestionId: string) => void;
clearExpiredSuggestions: () => void;
@@ -1760,11 +1760,11 @@ interface SwiftStoreV2 {
originalInput: string;
} | null;
- setClarification: (clarification: SwiftStoreV2['pendingClarification']) => void;
+ setClarification: (clarification: CortexStoreV2['pendingClarification']) => void;
answerClarification: (answer: string) => void;
}
-export const useSwiftStoreV2 = create()(
+export const useCortexStoreV2 = create()(
devtools(
persist(
(set, get) => ({
@@ -1899,13 +1899,13 @@ export const useSwiftStoreV2 = create()(
},
}),
{
- name: 'swift-store-v2',
+ name: 'cortex-store-v2',
partialize: (state) => ({
chainHistory: state.chainHistory.slice(0, 10),
}),
}
),
- { name: 'swift-v2' }
+ { name: 'cortex-v2' }
)
);
```
@@ -1918,8 +1918,8 @@ export const useSwiftStoreV2 = create()(
| # | Task | Beschrijving | Effort |
|---|------|--------------|--------|
-| 1.1 | Context Types | Nieuwe types voor SwiftContext | S |
-| 1.2 | Context API | GET /api/swift/context endpoint | M |
+| 1.1 | Context Types | Nieuwe types voor CortexContext | S |
+| 1.2 | Context API | GET /api/cortex/context endpoint | M |
| 1.3 | Context Injection | Update AI classifier om context te ontvangen | M |
| 1.4 | Reflex Complexity Detection | Multi-intent en context signals detectie | S |
| 1.5 | Clarification UI | ClarificationCard component | S |
@@ -1938,13 +1938,13 @@ export const useSwiftStoreV2 = create()(
**Deliverable:** "Zeg Jan af en maak notitie" werkt
-### Fase 3: Safety Net (Week 5-6)
+### Fase 3: Nudge (Week 5-6)
| # | Task | Beschrijving | Effort |
|---|------|--------------|--------|
| 3.1 | Protocol Rules | Rule definitions voor wondzorg, medicatie | M |
-| 3.2 | Safety Net Engine | evaluateSafetyNet functie | M |
-| 3.3 | SuggestionToast | UI component met timer | M |
+| 3.2 | Nudge Engine | evaluateNudge functie | M |
+| 3.3 | NudgeToast | UI component met timer | M |
| 3.4 | Suggestion Flow | Accept/dismiss handling | S |
| 3.5 | Protocol Admin | Admin UI voor regels (optional) | L |
@@ -1967,7 +1967,7 @@ export const useSwiftStoreV2 = create()(
### 11.1 Unit Tests
```typescript
-// lib/swift/__tests__/reflex-classifier.test.ts
+// lib/cortex/__tests__/reflex-classifier.test.ts
import { classifyWithReflex } from '../reflex-classifier';
@@ -2058,7 +2058,7 @@ describe('POST /api/intent/classify', () => {
### 11.3 Test Zinnen Dataset
```json
-// lib/swift/__tests__/test-sentences.json
+// lib/cortex/__tests__/test-sentences.json
{
"single_intent": [
{ "input": "notitie jan medicatie", "expected": ["dagnotitie"] },
@@ -2110,17 +2110,17 @@ describe('POST /api/intent/classify', () => {
Het V2 systeem moet naast V1 kunnen draaien tijdens de migratie:
```typescript
-// lib/swift/intent-classifier-adapter.ts
+// lib/cortex/intent-classifier-adapter.ts
import { classifyIntent as classifyV1 } from './intent-classifier';
import { classifyWithReflex } from './reflex-classifier';
import { classifyWithOrchestrator } from './orchestrator';
-const USE_V2 = process.env.NEXT_PUBLIC_SWIFT_V2 === 'true';
+const USE_V2 = process.env.NEXT_PUBLIC_CORTEX_V2 === 'true';
export async function classifyIntent(
input: string,
- context?: SwiftContext
+ context?: CortexContext
): Promise {
if (!USE_V2) {
// V1 path - single intent
@@ -2167,22 +2167,22 @@ export async function classifyIntent(
export const FEATURE_FLAGS = {
// V2 Features
- SWIFT_V2_ENABLED: process.env.NEXT_PUBLIC_SWIFT_V2 === 'true',
- SWIFT_MULTI_INTENT: process.env.NEXT_PUBLIC_SWIFT_MULTI_INTENT === 'true',
- SWIFT_SAFETY_NET: process.env.NEXT_PUBLIC_SWIFT_SAFETY_NET === 'true',
- SWIFT_CONTEXT_INJECTION: process.env.NEXT_PUBLIC_SWIFT_CONTEXT === 'true',
-
+ CORTEX_V2_ENABLED: process.env.NEXT_PUBLIC_CORTEX_V2 === 'true',
+ CORTEX_MULTI_INTENT: process.env.NEXT_PUBLIC_CORTEX_MULTI_INTENT === 'true',
+ CORTEX_NUDGE: process.env.NEXT_PUBLIC_CORTEX_NUDGE === 'true',
+ CORTEX_CONTEXT_INJECTION: process.env.NEXT_PUBLIC_CORTEX_CONTEXT === 'true',
+
// Rollout percentage (A/B testing)
- SWIFT_V2_ROLLOUT: parseInt(process.env.NEXT_PUBLIC_SWIFT_V2_ROLLOUT || '0', 10),
+ CORTEX_V2_ROLLOUT: parseInt(process.env.NEXT_PUBLIC_CORTEX_V2_ROLLOUT || '0', 10),
};
-export function isSwiftV2Enabled(userId?: string): boolean {
- if (!FEATURE_FLAGS.SWIFT_V2_ENABLED) return false;
-
+export function isCortexV2Enabled(userId?: string): boolean {
+ if (!FEATURE_FLAGS.CORTEX_V2_ENABLED) return false;
+
// A/B test based on user ID hash
- if (userId && FEATURE_FLAGS.SWIFT_V2_ROLLOUT < 100) {
+ if (userId && FEATURE_FLAGS.CORTEX_V2_ROLLOUT < 100) {
const hash = simpleHash(userId);
- return hash % 100 < FEATURE_FLAGS.SWIFT_V2_ROLLOUT;
+ return hash % 100 < FEATURE_FLAGS.CORTEX_V2_ROLLOUT;
}
return true;
@@ -2212,13 +2212,13 @@ export function isSwiftV2Enabled(userId?: string): boolean {
| **IntentChain** | Lijst van intents geëxtraheerd uit één uiting |
| **Reflex Arc** | Layer 1 - snelle lokale pattern matching |
| **Orchestrator** | Layer 2 - AI-gedreven classificatie |
-| **Safety Net** | Layer 3 - proactieve suggesties |
+| **Nudge** | Layer 3 - proactieve suggesties |
| **Entity** | GeΓ«xtraheerde data (patiΓ«ntnaam, datum, etc.) |
| **Artifact** | UI component voor een specifieke taak |
### B. Referenties
-- [FO Swift Intent System V2](./fo-swift-intent-system-v2.md)
+- [FO Cortex Intent System V2](./fo-swift-intent-system-v2.md)
- [UX Simulatie Next Level](./ux-simulation-intent-next-level.md)
- [UX Evaluatie Schaalbaarheid](./ux-evaluation-intent-scalability.md)
- [Architecture Proposal V2](./intent-architecture-v2-proposal.md)
diff --git a/docs/intent/fo-swift-intent-system-v2.md b/docs/intent/fo-swift-intent-system-v2.md
index 3f12b69..569b1a3 100644
--- a/docs/intent/fo-swift-intent-system-v2.md
+++ b/docs/intent/fo-swift-intent-system-v2.md
@@ -28,7 +28,7 @@ Het systeem bestaat uit drie samenwerkende lagen die elk een andere rol spelen i
* *Rol:* AI-gedreven analyse voor complexe zinnen, context-disambiguatie en **Multi-Intents**.
* *Voorbeeld:* "Zeg Jan af **en** maak een notitie."
-3. **Layer 3: The Safety Net & Suggestion Engine (De Partner)**
+3. **Layer 3: The Nudge & Suggestion Engine (De Partner)**
* *Rol:* Proactieve business logic die *na* een actie meedenkt.
* *Voorbeeld:* Na "Wondzorg registratie" β Suggestie: "Wondcontrole inplannen?"
@@ -66,7 +66,7 @@ Het systeem bestaat uit drie samenwerkende lagen die elk een andere rol spelen i
3. Extraheert entities (Wie, Wanneer, Wat).
* **Output:** Een lijst van uit te voeren acties: `[ActionA, ActionB]`.
-### 4.3 Layer 3: The Safety Net (Post-Action Logic)
+### 4.3 Layer 3: The Nudge (Post-Action Logic)
* **Trigger:** Succesvolle afronding van een intent (bijv. `CreateAppointment` klaar).
* **Werking:** Draait `Domain Rules` op de uitgevoerde actie.
* **UI:** Toont een **Suggestion Toast** of **Card** ("Wil je ook...?").
@@ -104,7 +104,7 @@ De UI past zich aan op basis van de complexiteit van de intentie.
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β 4. Safety Net (Proactive Toast) β
+β 4. Nudge (Proactive Toast) β
β π‘ "Wil je de griep-poli waarschuwen?" [Ja, doe maar] [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
@@ -124,7 +124,7 @@ Het systeem moet worden omgebouwd van `Single Intent` naar `Intent Chain`:
**Oud:**
```typescript
-interface Result { intent: SwiftIntent }
+interface Result { intent: CortexIntent }
```
**Nieuw:**
@@ -135,7 +135,7 @@ interface IntentChain {
}
interface IntentAction {
- intent: SwiftIntent;
+ intent: CortexIntent;
entities: ExtractedEntities;
status: 'pending' | 'success' | 'failed';
requiresConfirmation: boolean;
@@ -156,12 +156,12 @@ interface IntentAction {
* Prompt engineering voor multi-intent herkenning ("En", "Daarna").
### Fase 3: Proactivity (Maand 2)
-* Bouwen van de `Safety Net` listeners.
+* Bouwen van de `Nudge` listeners.
* Protocollen toevoegen voor Medicatie en Wondzorg.
---
## 8. Bijlagen & Referenties
* **PRD/Vision:** `docs/swift/ux-simulation-intent-next-level.md`
-* **Technical Base:** `lib/swift/intent-classifier-ai.ts`
+* **Technical Base:** `lib/cortex/intent-classifier-ai.ts`
* **Legacy Docs:** `docs/swift/intent-architecture-v2-proposal.md`
diff --git a/docs/intent/haalbaarheidsanalyse-swift-cortex-v2.md b/docs/intent/haalbaarheidsanalyse-swift-cortex-v2.md
index 139ce69..e442810 100644
--- a/docs/intent/haalbaarheidsanalyse-swift-cortex-v2.md
+++ b/docs/intent/haalbaarheidsanalyse-swift-cortex-v2.md
@@ -15,7 +15,7 @@ De Swift Cortex V2 architectuur is **goed haalbaar** binnen de bestaande codebas
| Aspect | Score | Toelichting |
|--------|-------|-------------|
| **Technische haalbaarheid** | π’ Hoog | Bestaande architectuur is compatibel |
-| **Complexiteit** | π‘ Middel | Multi-intent en Safety Net zijn nieuwe concepten |
+| **Complexiteit** | π‘ Middel | Multi-intent en Nudge zijn nieuwe concepten |
| **Risico** | π’ Laag | Incrementeel te bouwen, backward compatible |
| **MVP Scope** | π’ Realistisch | 6 user stories, goed afgebakend |
@@ -29,7 +29,7 @@ De Swift Cortex V2 architectuur is **goed haalbaar** binnen de bestaande codebas
|------------|----------------------|-----|
| **Layer 1: Reflex Arc** | β
`intent-classifier.ts` (60 patterns) | Minimaal - voeg complexity detection toe |
| **Layer 2: Orchestrator** | β
`intent-classifier-ai.ts` (Haiku) | Middel - upgrade prompt voor multi-intent |
-| **Layer 3: Safety Net** | β Niet aanwezig | Nieuw te bouwen |
+| **Layer 3: Nudge** | β Niet aanwezig | Nieuw te bouwen |
| **Context Injection** | π‘ Basis aanwezig (`activePatient`, `shift`) | Uitbreiden met `agendaToday`, `recentIntents` |
| **Multi-Intent Chains** | β Single intent model | Data model refactor nodig |
| **Entity Extraction** | β
`entity-extractor.ts` | Minimaal - voeg `patientResolution` toe |
@@ -38,7 +38,7 @@ De Swift Cortex V2 architectuur is **goed haalbaar** binnen de bestaande codebas
### 1.2 Bestaande Bestanden (Assets)
```
-lib/swift/
+lib/cortex/
βββ types.ts β
Basis types, uitbreiden met IntentChain
βββ intent-classifier.ts β
Layer 1 basis, voeg signals detection toe
βββ intent-classifier-ai.ts β
Layer 2 basis, upgrade prompt
@@ -49,16 +49,16 @@ lib/swift/
βββ error-handler.ts β
Recent toegevoegd
βββ [NIEUW] reflex-classifier.ts β Upgrade van intent-classifier
βββ [NIEUW] orchestrator.ts β Upgrade van intent-classifier-ai
-βββ [NIEUW] safety-net.ts β Nieuw te bouwen
+βββ [NIEUW] nudge.ts β Nieuw te bouwen
stores/
-βββ swift-store.ts β
Uitbreiden met chain state + suggestions
+βββ cortex-store.ts β
Uitbreiden met chain state + suggestions
-components/swift/
+components/cortex/
βββ chat/ β
Bestaand, voeg ActionChainCard toe
βββ artifacts/ β
Bestaand, geen wijzigingen
-βββ command-center/ β
Bestaand, voeg SuggestionToast toe
-βββ [NIEUW] suggestion-toast.tsx
+βββ command-center/ β
Bestaand, voeg NudgeToast toe
+βββ [NIEUW] nudge-toast.tsx
βββ [NIEUW] chat/action-chain-card.tsx
βββ [NIEUW] chat/clarification-card.tsx
```
@@ -73,7 +73,7 @@ components/swift/
```typescript
// Huidige single-intent response
interface ClassificationResult {
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
}
```
@@ -90,7 +90,7 @@ interface IntentChain {
**Impact:**
- `types.ts`: Nieuwe interfaces toevoegen (~50 regels)
- `orchestrator.ts`: Nieuwe AI prompt met multi-intent instructies (~150 regels)
-- `swift-store.ts`: Chain state toevoegen (~30 regels)
+- `cortex-store.ts`: Chain state toevoegen (~30 regels)
- `action-chain-card.tsx`: Nieuwe UI component (~150 regels)
**Effort: M (Medium)**
@@ -110,7 +110,7 @@ context: {
**V2 vereist:**
```typescript
-interface SwiftContext {
+interface CortexContext {
activePatient: { id, name, recentNotes?, upcomingAppointments? };
currentView: string;
shift: ShiftType;
@@ -121,7 +121,7 @@ interface SwiftContext {
```
**Impact:**
-- Nieuwe `GET /api/swift/context` endpoint (~80 regels)
+- Nieuwe `GET /api/cortex/context` endpoint (~80 regels)
- Context builder utility (~50 regels)
- Store uitbreiding voor context sync (~20 regels)
@@ -147,20 +147,20 @@ interface SwiftContext {
---
-### 2.4 Safety Net / Proactive Suggestions (US-MVP-06)
+### 2.4 Nudge / Proactive Suggestions (US-MVP-06)
**Huidige situatie:**
- Niet aanwezig
**V2 vereist:**
- Protocol Rules database
-- `evaluateSafetyNet()` functie
-- `SuggestionToast` component
+- `evaluateNudge()` functie
+- `NudgeToast` component
- Store state voor suggestions
**Impact:**
-- `safety-net.ts`: Nieuwe module (~200 regels)
-- `suggestion-toast.tsx`: Nieuw component (~100 regels)
+- `nudge.ts`: Nieuwe module (~200 regels)
+- `nudge-toast.tsx`: Nieuw component (~100 regels)
- Store uitbreiding (~40 regels)
- Integratie in action execution flow
@@ -184,7 +184,7 @@ interface SwiftContext {
| Risico | Impact | Mitigatie |
|--------|--------|-----------|
| Feature creep | MVP te groot | Strikte scope (6 stories) |
-| Protocol complexity | Safety Net te ambitieus | Begin met 1 hardcoded regel |
+| Protocol complexity | Nudge te ambitieus | Begin met 1 hardcoded regel |
| Over-engineering | Te veel abstractie | "Working software" first |
---
@@ -195,10 +195,10 @@ interface SwiftContext {
```
Fase 1: Foundation (Week 1)
-βββ SwiftContext type definitie
-βββ GET /api/swift/context endpoint
+βββ CortexContext type definitie
+βββ GET /api/cortex/context endpoint
βββ Reflex complexity detection upgrade
-βββ Feature flag: SWIFT_V2_ENABLED
+βββ Feature flag: CORTEX_V2_ENABLED
βββ Deliverable: Context beschikbaar, backward compatible
Fase 2: Multi-Intent (Week 2)
@@ -208,9 +208,9 @@ Fase 2: Multi-Intent (Week 2)
βββ Store chain state
βββ Deliverable: "Zeg af en maak notitie" werkt
-Fase 3: Safety Net MVP (Week 3)
+Fase 3: Nudge MVP (Week 3)
βββ 1 hardcoded protocol regel (wondzorg)
-βββ SuggestionToast component
+βββ NudgeToast component
βββ Trigger na dagnotitie
βββ Deliverable: Proactieve suggestie demo
@@ -226,9 +226,9 @@ Fase 4: Polish (Week 4)
De V2 architectuur kan naast V1 draaien:
```typescript
-// lib/swift/classifier-adapter.ts
-export async function classifyIntent(input: string, context?: SwiftContext) {
- if (!FEATURE_FLAGS.SWIFT_V2_ENABLED) {
+// lib/cortex/classifier-adapter.ts
+export async function classifyIntent(input: string, context?: CortexContext) {
+ if (!FEATURE_FLAGS.CORTEX_V2_ENABLED) {
return classifyV1(input); // Bestaande flow
}
@@ -251,12 +251,12 @@ export async function classifyIntent(input: string, context?: SwiftContext) {
| `types.ts` | 150 regels | - | S |
| `reflex-classifier.ts` | 200 regels | upgrade | M |
| `orchestrator.ts` | 250 regels | upgrade | M |
-| `safety-net.ts` | 200 regels | nieuw | M |
-| `swift-store.ts` | - | +100 regels | S |
+| `nudge.ts` | 200 regels | nieuw | M |
+| `cortex-store.ts` | - | +100 regels | S |
| `action-chain-card.tsx` | 180 regels | nieuw | M |
-| `suggestion-toast.tsx` | 100 regels | nieuw | S |
+| `nudge-toast.tsx` | 100 regels | nieuw | S |
| `clarification-card.tsx` | 60 regels | nieuw | S |
-| `/api/swift/context` | 80 regels | nieuw | S |
+| `/api/cortex/context` | 80 regels | nieuw | S |
| `/api/intent/classify` | 150 regels | nieuw | M |
| Tests | 300 regels | nieuw | M |
@@ -268,7 +268,7 @@ export async function classifyIntent(input: string, context?: SwiftContext) {
|------|--------|--------------|
| Fase 1: Foundation | 2-3 dagen | Laag |
| Fase 2: Multi-Intent | 3-4 dagen | Middel |
-| Fase 3: Safety Net | 2-3 dagen | Middel |
+| Fase 3: Nudge | 2-3 dagen | Middel |
| Fase 4: Polish | 2-3 dagen | Laag |
**Totaal: 9-13 werkdagen voor MVP**
@@ -286,7 +286,7 @@ export async function classifyIntent(input: string, context?: SwiftContext) {
### 6.2 DON'T's
-1. **Niet alle protocollen tegelijk** - Begin met 1 Safety Net regel
+1. **Niet alle protocollen tegelijk** - Begin met 1 Nudge regel
2. **Geen over-engineering** - De `ProtocolRule` interface is voor later
3. **Niet de store herschrijven** - Extend, niet replace
4. **Geen rollout strategie nodig** - Dit is een prototype
@@ -320,7 +320,7 @@ De Swift Cortex V2 architectuur is **volledig haalbaar** binnen de bestaande cod
### Volgende Stap
-Start met **Fase 1: Foundation** - de SwiftContext API endpoint. Dit is:
+Start met **Fase 1: Foundation** - de CortexContext API endpoint. Dit is:
- Low risk
- Onafhankelijk van andere features
- Direct waarde toevoegend aan bestaande AI classificatie
@@ -334,13 +334,13 @@ Start met **Fase 1: Foundation** - de SwiftContext API endpoint. Dit is:
| Bestand | Regels | Functie |
|---------|--------|---------|
-| `lib/swift/types.ts` | ~180 | Type definities |
-| `lib/swift/intent-classifier.ts` | ~200 | Layer 1 classifier |
-| `lib/swift/intent-classifier-ai.ts` | ~100 | Layer 2 AI fallback |
-| `lib/swift/entity-extractor.ts` | ~250 | Entity extraction |
-| `lib/swift/date-time-parser.ts` | ~200 | Datum/tijd parsing |
-| `lib/swift/action-parser.ts` | ~150 | Action routing |
-| `stores/swift-store.ts` | ~200 | Zustand state |
+| `lib/cortex/types.ts` | ~180 | Type definities |
+| `lib/cortex/intent-classifier.ts` | ~200 | Layer 1 classifier |
+| `lib/cortex/intent-classifier-ai.ts` | ~100 | Layer 2 AI fallback |
+| `lib/cortex/entity-extractor.ts` | ~250 | Entity extraction |
+| `lib/cortex/date-time-parser.ts` | ~200 | Datum/tijd parsing |
+| `lib/cortex/action-parser.ts` | ~150 | Action routing |
+| `stores/cortex-store.ts` | ~200 | Zustand state |
### B. V2 Documentatie Verwijzingen
diff --git a/docs/intent/intent-architecture-v2-proposal.md b/docs/intent/intent-architecture-v2-proposal.md
index 92d7232..90e1d19 100644
--- a/docs/intent/intent-architecture-v2-proposal.md
+++ b/docs/intent/intent-architecture-v2-proposal.md
@@ -36,7 +36,7 @@ We vervangen de simpele `Classifier` door een slimmere `Cortex`.
* **Nieuwe capability: Entity Disambiguation.**
* Snap dat "Jan" verwijst naar de patiΓ«nt die ik *vandaaag* in mijn agenda heb.
-### Layer 3: The Safety Net (Contextual Logic)
+### Layer 3: The Nudge (Contextual Logic)
* **Wat:** Een business logic laag die *na* de intent draait.
* **Functie:** Proactive Suggestions.
* *Trigger:* Intent `CreateWoundCareNote` 'completed'.
@@ -81,6 +81,6 @@ graph TD
Plan --> Action1["Action A"]
Plan --> Action2["Action B"]
- Action1 --> Safety["Layer 3: Safety Net"]
+ Action1 --> Safety["Layer 3: Nudge"]
Safety -->|Trigger Found| Suggestion["Suggest Follow-up"]
```
diff --git a/docs/intent/mvp-userstories-intent-system.md b/docs/intent/mvp-userstories-intent-system.md
index e29d4f8..a2bafb8 100644
--- a/docs/intent/mvp-userstories-intent-system.md
+++ b/docs/intent/mvp-userstories-intent-system.md
@@ -16,7 +16,7 @@ We splitsen de ontwikkeling in **MVP** (Wat we nu bouwen voor de publieke demo)
2. **Multi-Intent:** Het kunnen verwerken van samengestelde zinnen ("Zeg af en maak notitie").
3. **Context Awareness:** Het correct interpreteren van "hij", "deze", "morgen" o.b.v. de huidige schermstatus.
4. **UI Feedback:** Visualisatie van het "denkproces" en gestapelde resultaten (Stacked Cards).
-5. **Basic Safety Net:** EΓ©n hardcoded voorbeeld van proactiviteit (bijv. "Wondcontrole suggestie") om het concept te tonen.
+5. **Basic Nudge:** EΓ©n hardcoded voorbeeld van proactiviteit (bijv. "Wondcontrole suggestie") om het concept te tonen.
### β Out of Scope (Post-MVP - "The Product")
*Focus: Veiligheid, robuustheid, edge-cases.*
diff --git a/docs/intent/review-swift-cortex-v2.md b/docs/intent/review-swift-cortex-v2.md
index 3bd4bda..5ed6458 100644
--- a/docs/intent/review-swift-cortex-v2.md
+++ b/docs/intent/review-swift-cortex-v2.md
@@ -7,7 +7,7 @@
---
## 1. Algemene Conclusie
-Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen architectuur die de grootste pijnpunten van V1 (traagheid bij simpele taken, domheid bij complexe taken) effectief oplost. De opsplitsing in drie lagen (Reflex, Orchestrator, Safety Net) is logisch en schaalbaar.
+Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen architectuur die de grootste pijnpunten van V1 (traagheid bij simpele taken, domheid bij complexe taken) effectief oplost. De opsplitsing in drie lagen (Reflex, Orchestrator, Nudge) is logisch en schaalbaar.
**Oordeel:** β
**Go for launch**, mits onderstaande punten in acht worden genomen.
@@ -21,7 +21,7 @@ Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen
* **Pros:**
* **Separation of Concerns:** De scheiding tussen deterministische regex (L1) en probabilistische AI (L2) beschermt de performance van basisfuncties.
* **Schaalbaarheid:** L2 is losgekoppeld; we kunnen het model (Claude Haiku) later vervangen door GPT-4o of een local model zonder L1 te breken.
- * **Type Safety:** De definities voor `IntentChain` en `SwiftContext` zijn robuust.
+ * **Type Safety:** De definities voor `IntentChain` en `CortexContext` zijn robuust.
* **Cons / Risico's:**
* **State Complexity:** Het beheren van een `IntentChain` (met statussen als `pending`, `executing`, `failed`) introduceert complexe state management logica. Wat als stap 1 slaagt maar stap 2 faalt? Rollback support (genoemd in L2 architecture overview) is complex om generiek te bouwen.
* **Drift:** Risico dat L1 (Regex) en L2 (AI) uit elkaar groeien. Als de AI "agenda" anders interpreteert dan de Regex.
@@ -42,7 +42,7 @@ Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen
**Perspectief:** UI implementatie, feedback loops, React state.
* **Pros:**
- * **Store Integration:** Uitbreiding van `SwiftStore` is logisch.
+ * **Store Integration:** Uitbreiding van `CortexStore` is logisch.
* **Reflex Snelheid:** Client-side regex betekent instant feedback (<20ms), wat de UX enorm verbetert.
* **Cons:**
* **UI Complexiteit:** Het visualiseren van "Stacked Cards" voor multi-intents is nieuw. Hoe tonen we de voortgang van "Actie 1 klaar, Actie 2 bezig"?
@@ -54,12 +54,12 @@ Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen
* **Pros:**
* **Killer Feature:** Multi-intent ("Zeg af en email") is een enorme meerwaarde die de gebruiker tijd bespaart.
- * **Proactivity:** De Safety Net suggesties ("Wondcontrole inplannen?") transformeren het systeem van typemachine naar partner.
+ * **Proactivity:** De Nudge suggesties ("Wondcontrole inplannen?") transformeren het systeem van typemachine naar partner.
* **No Dead Ends:** Het doel "Nooit 'ik snap het niet' zeggen" is perfect.
* **Cons / Risico's:**
* **Uncanny Valley:** Als L1 "dom" voelt en L2 "slim", snapt de gebruiker dan wanneer hij tegen wie praat?
- * **Over-proactive:** Te veel Safety Net suggesties worden irritant (Clippy effect). "Wil je dit opslaan?" "Wil je dat doen?".
-* **Advies:** Start Safety Net met zeer conservatieve regels. Alleen medisch kritieke suggesties, geen administratieve "nagging".
+ * **Over-proactive:** Te veel Nudge suggesties worden irritant (Clippy effect). "Wil je dit opslaan?" "Wil je dat doen?".
+* **Advies:** Start Nudge met zeer conservatieve regels. Alleen medisch kritieke suggesties, geen administratieve "nagging".
### π§ͺ QA Engineer / Tester
**Perspectief:** Testbaarheid, betrouwbaarheid.
@@ -96,10 +96,10 @@ Het voorgestelde **Hyper-Hybrid model (Swift Cortex)** is een sterke, volwassen
|-----------|--------------|--------------|
| Layer 1 (Reflex) | βββββ (Hoog) | Laag |
| Layer 2 (Orchestrator) | ββββ (Goed) | Middel |
-| Layer 3 (Safety Net) | ββββ (Goed) | Laag (als we simpel beginnen) |
+| Layer 3 (Nudge) | ββββ (Goed) | Laag (als we simpel beginnen) |
| Multi-Intent Frontend | βββ (Uitdagend) | Hoog (UI flows) |
-**Advies:** Start direct met **Fase 1 (Reflex + Basic Orchestrator)**. Schuif Layer 3 (Safety Net) naar de volgende sprint om focus te houden op de core flow.
+**Advies:** Start direct met **Fase 1 (Reflex + Basic Orchestrator)**. Schuif Layer 3 (Nudge) naar de volgende sprint om focus te houden op de core flow.
## 6. Concretie Actiepunten
diff --git a/lib/swift/__tests__/date-time-parser.test.ts b/lib/cortex/__tests__/date-time-parser.test.ts
similarity index 100%
rename from lib/swift/__tests__/date-time-parser.test.ts
rename to lib/cortex/__tests__/date-time-parser.test.ts
diff --git a/lib/swift/action-parser.ts b/lib/cortex/action-parser.ts
similarity index 90%
rename from lib/swift/action-parser.ts
rename to lib/cortex/action-parser.ts
index a6e90ca..32b5887 100644
--- a/lib/swift/action-parser.ts
+++ b/lib/cortex/action-parser.ts
@@ -1,14 +1,14 @@
/**
- * Action Parser for Swift Assistent
+ * Action Parser for Cortex Assistent
*
* Parses JSON action objects from AI responses and validates them.
*
- * Epic: E3 (Chat API & Swift Assistent)
+ * Epic: E3 (Chat API & Cortex Assistent)
* Story: E3.S4 (Intent detection in response)
*/
import { z } from 'zod';
-import type { ChatAction, SwiftIntent, BlockType } from '@/stores/swift-store';
+import type { ChatAction, CortexIntent, BlockType } from '@/stores/cortex-store';
// Validation schema for action objects
const ActionSchema = z.object({
@@ -156,10 +156,19 @@ export function parseActionFromResponse(responseText: string): ParsedActionResul
};
}
+ // Normalize entities - convert complex identifier to string
+ const normalizedEntities = {
+ ...validation.data.entities,
+ // Convert object identifier to string if needed
+ identifier: typeof validation.data.entities.identifier === 'object'
+ ? validation.data.entities.identifier.encounterId || JSON.stringify(validation.data.entities.identifier)
+ : validation.data.entities.identifier,
+ };
+
// Valid action found
const action: ChatAction = {
intent: validation.data.intent,
- entities: validation.data.entities,
+ entities: normalizedEntities,
confidence: validation.data.confidence,
artifact: validation.data.artifact,
};
@@ -191,7 +200,7 @@ export function getConfidenceLabel(confidence: number): string {
/**
* Validate that artifact type matches intent
*/
-export function validateArtifactType(intent: SwiftIntent, artifactType?: BlockType): boolean {
+export function validateArtifactType(intent: CortexIntent, artifactType?: BlockType): boolean {
if (!artifactType) return true; // No artifact is valid
if (artifactType === 'patient-dashboard') return true;
@@ -199,14 +208,14 @@ export function validateArtifactType(intent: SwiftIntent, artifactType?: BlockTy
if (intent === 'unknown') return artifactType === 'fallback';
// For agenda intents, all map to agenda block types
- const agendaIntents: SwiftIntent[] = [
+ const agendaIntents: CortexIntent[] = [
'agenda_query',
'create_appointment',
'cancel_appointment',
'reschedule_appointment',
];
if (agendaIntents.includes(intent)) {
- return agendaIntents.includes(artifactType as SwiftIntent);
+ return agendaIntents.includes(artifactType as CortexIntent);
}
return intent === artifactType;
@@ -224,7 +233,7 @@ export function validateArtifactType(intent: SwiftIntent, artifactType?: BlockTy
* @returns Artifact configuration or null if confidence too low or required data missing
*/
export function routeIntentToArtifact(
- intent: SwiftIntent,
+ intent: CortexIntent,
entities: Record,
confidence: number
): { type: BlockType; prefill: Record; title: string } | null {
diff --git a/lib/swift/chat-api.ts b/lib/cortex/chat-api.ts
similarity index 90%
rename from lib/swift/chat-api.ts
rename to lib/cortex/chat-api.ts
index 60fc6b4..443bab5 100644
--- a/lib/swift/chat-api.ts
+++ b/lib/cortex/chat-api.ts
@@ -1,13 +1,13 @@
/**
- * Swift Chat API Client
+ * Cortex Chat API Client
*
- * Client-side helper voor het aanroepen van de Swift chat API met streaming support.
+ * Client-side helper voor het aanroepen van de Cortex chat API met streaming support.
*
- * Epic: E3 (Chat API & Swift Assistent)
+ * Epic: E3 (Chat API & Cortex Assistent)
* Story: E3.S1 (Chat API endpoint skeleton)
*/
-import type { ChatMessage } from '@/stores/swift-store';
+import type { ChatMessage } from '@/stores/cortex-store';
export interface ChatContext {
activePatient?: {
@@ -36,7 +36,7 @@ export async function sendChatMessage(
onError?: (error: string) => void
): Promise {
try {
- const response = await fetch('/api/swift/chat', {
+ const response = await fetch('/api/cortex/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
diff --git a/lib/swift/date-time-parser.ts b/lib/cortex/date-time-parser.ts
similarity index 99%
rename from lib/swift/date-time-parser.ts
rename to lib/cortex/date-time-parser.ts
index 4571337..cfaae6d 100644
--- a/lib/swift/date-time-parser.ts
+++ b/lib/cortex/date-time-parser.ts
@@ -2,7 +2,7 @@
* Date/Time Parser Utilities
*
* Parses natural language date and time expressions (Dutch)
- * for Swift agenda functionality.
+ * for Cortex agenda functionality.
*/
import {
diff --git a/lib/swift/entity-extractor.ts b/lib/cortex/entity-extractor.ts
similarity index 99%
rename from lib/swift/entity-extractor.ts
rename to lib/cortex/entity-extractor.ts
index 487cacc..ea3cb22 100644
--- a/lib/swift/entity-extractor.ts
+++ b/lib/cortex/entity-extractor.ts
@@ -5,7 +5,7 @@
*/
import type { VerpleegkundigCategory } from '@/lib/types/report';
-import type { ExtractedEntities, SwiftIntent } from './types';
+import type { ExtractedEntities, CortexIntent } from './types';
import {
parseRelativeDate,
parseTime,
@@ -90,7 +90,7 @@ const COMMON_NAMES = new Set([
/**
* Extract entities from user input based on the detected intent.
*/
-export function extractEntities(input: string, intent: SwiftIntent): ExtractedEntities {
+export function extractEntities(input: string, intent: CortexIntent): ExtractedEntities {
const trimmedInput = input.trim().toLowerCase();
const entities: ExtractedEntities = {};
diff --git a/lib/swift/error-handler.ts b/lib/cortex/error-handler.ts
similarity index 99%
rename from lib/swift/error-handler.ts
rename to lib/cortex/error-handler.ts
index 2e0b04b..64f45e9 100644
--- a/lib/swift/error-handler.ts
+++ b/lib/cortex/error-handler.ts
@@ -1,6 +1,6 @@
/**
- * Error Handler Utility voor Swift
- *
+ * Error Handler Utility voor Cortex
+ *
* E5.S2: Gecentraliseerde error handling met network detection,
* gebruiksvriendelijke berichten en retry logic.
*/
diff --git a/lib/swift/index.ts b/lib/cortex/index.ts
similarity index 72%
rename from lib/swift/index.ts
rename to lib/cortex/index.ts
index 1a102eb..e3ce3fc 100644
--- a/lib/swift/index.ts
+++ b/lib/cortex/index.ts
@@ -1,9 +1,9 @@
/**
- * Swift Library Barrel Export
+ * Cortex Library Barrel Export
*/
export * from './types';
-export * from './use-swift-voice';
+export * from './use-cortex-voice';
export * from './intent-classifier';
export * from './intent-classifier-ai';
export * from './entity-extractor';
diff --git a/lib/swift/intent-classifier-ai.ts b/lib/cortex/intent-classifier-ai.ts
similarity index 97%
rename from lib/swift/intent-classifier-ai.ts
rename to lib/cortex/intent-classifier-ai.ts
index d3e413b..713917d 100644
--- a/lib/swift/intent-classifier-ai.ts
+++ b/lib/cortex/intent-classifier-ai.ts
@@ -6,7 +6,7 @@
*/
import { z } from 'zod';
-import type { SwiftIntent, ExtractedEntities } from './types';
+import type { CortexIntent, ExtractedEntities } from './types';
import type { VerpleegkundigCategory } from '@/lib/types/report';
// Zod schema for AI response validation
@@ -37,7 +37,7 @@ const AIIntentResponseSchema = z.object({
type AIIntentResponse = z.infer;
export interface AIClassificationResult {
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
entities: ExtractedEntities;
source: 'ai';
@@ -45,7 +45,7 @@ export interface AIClassificationResult {
reasoning?: string;
}
-const INTENT_CLASSIFIER_SYSTEM_PROMPT = `Je bent een intent classifier voor een Nederlands EPD (Elektronisch PatiΓ«nten Dossier) systeem genaamd Swift.
+const INTENT_CLASSIFIER_SYSTEM_PROMPT = `Je bent een intent classifier voor een Nederlands EPD (Elektronisch PatiΓ«nten Dossier) systeem genaamd Cortex.
Je taak is om de intentie van een zorgmedewerker te classificeren in één van deze categorieën:
@@ -199,7 +199,7 @@ export async function classifyIntentWithAI(input: string): Promise, PatternConfig[]> = {
+const INTENT_PATTERNS: Record, PatternConfig[]> = {
dagnotitie: [
// Exact commands
{ pattern: /^dagnotitie\b/i, weight: 1.0 },
@@ -159,7 +159,7 @@ const HELP_PATTERNS: PatternConfig[] = [
{ pattern: /^help\b/i, weight: 1.0 },
{ pattern: /^hulp\b/i, weight: 1.0 },
{ pattern: /^\?\s*$/i, weight: 1.0 },
- { pattern: /^wat\s+kan\s+(ik|je|swift)\b/i, weight: 1.0 },
+ { pattern: /^wat\s+kan\s+(ik|je|cortex)\b/i, weight: 1.0 },
{ pattern: /^hoe\s+werkt\b/i, weight: 0.9 },
{ pattern: /^voorbeelden?\b/i, weight: 0.9 },
];
@@ -194,14 +194,14 @@ export function classifyIntent(input: string): ClassificationResult {
}
// Find best matching intent
- let bestMatch: { intent: SwiftIntent; confidence: number; pattern: string } | null = null;
+ let bestMatch: { intent: CortexIntent; confidence: number; pattern: string } | null = null;
for (const [intent, patterns] of Object.entries(INTENT_PATTERNS)) {
for (const { pattern, weight } of patterns) {
if (pattern.test(trimmedInput)) {
if (!bestMatch || weight > bestMatch.confidence) {
bestMatch = {
- intent: intent as SwiftIntent,
+ intent: intent as CortexIntent,
confidence: weight,
pattern: pattern.toString(),
};
diff --git a/lib/swift/types.ts b/lib/cortex/types.ts
similarity index 92%
rename from lib/swift/types.ts
rename to lib/cortex/types.ts
index 2e64a51..f62611a 100644
--- a/lib/swift/types.ts
+++ b/lib/cortex/types.ts
@@ -1,13 +1,13 @@
/**
- * Swift Type Definitions
+ * Cortex Type Definitions
*
- * Core types for the Swift Contextual UI system.
+ * Core types for the Cortex Contextual UI system.
*/
import type { VerpleegkundigCategory } from '@/lib/types/report';
// Intent types
-export type SwiftIntent =
+export type CortexIntent =
| 'dagnotitie'
| 'zoeken'
| 'overdracht'
@@ -17,14 +17,14 @@ export type SwiftIntent =
| 'reschedule_appointment'
| 'unknown';
-export type BlockType = Exclude | 'patient-dashboard';
+export type BlockType = Exclude | 'patient-dashboard';
// Shift types
export type ShiftType = 'nacht' | 'ochtend' | 'middag' | 'avond';
// Intent classification result
export interface IntentClassificationResult {
- intent: SwiftIntent;
+ intent: CortexIntent;
confidence: number;
entities: ExtractedEntities;
source: 'local' | 'ai';
@@ -140,7 +140,7 @@ export const BLOCK_CONFIGS: Record = {
// Recent action type
export interface RecentAction {
id: string;
- intent: SwiftIntent;
+ intent: CortexIntent;
label: string;
timestamp: Date;
patientName?: string;
diff --git a/lib/swift/use-swift-voice.ts b/lib/cortex/use-cortex-voice.ts
similarity index 87%
rename from lib/swift/use-swift-voice.ts
rename to lib/cortex/use-cortex-voice.ts
index 484f70d..2005f28 100644
--- a/lib/swift/use-swift-voice.ts
+++ b/lib/cortex/use-cortex-voice.ts
@@ -1,20 +1,20 @@
'use client';
/**
- * Swift Voice Hook
+ * Cortex Voice Hook
*
- * Wraps useDeepgramStreaming for Swift-specific voice input behavior.
+ * Wraps useDeepgramStreaming for Cortex-specific voice input behavior.
* Streams transcript directly to the command input.
*/
import { useCallback, useEffect, useRef } from 'react';
-import { useSwiftStore } from '@/stores/swift-store';
+import { useCortexStore } from '@/stores/cortex-store';
import {
useDeepgramStreaming,
type TranscriptResult,
} from '@/hooks/use-deepgram-streaming';
-export interface UseSwiftVoiceReturn {
+export interface UseCortexVoiceReturn {
isRecording: boolean;
isConnecting: boolean;
isConnected: boolean;
@@ -25,8 +25,8 @@ export interface UseSwiftVoiceReturn {
isBrowserSupported: boolean;
}
-export function useSwiftVoice(): UseSwiftVoiceReturn {
- const { setInputValue, setVoiceActive, inputValue } = useSwiftStore();
+export function useCortexVoice(): UseCortexVoiceReturn {
+ const { setInputValue, setVoiceActive, inputValue } = useCortexStore();
// Track the base text (what was in input before recording started)
const baseTextRef = useRef('');
@@ -59,7 +59,7 @@ export function useSwiftVoice(): UseSwiftVoiceReturn {
const handleError = useCallback(
(error: Error) => {
- console.error('[SwiftVoice] Error:', error.message);
+ console.error('[CortexVoice] Error:', error.message);
},
[]
);
diff --git a/lib/swift/verify-entity-extraction.ts b/lib/cortex/verify-entity-extraction.ts
similarity index 97%
rename from lib/swift/verify-entity-extraction.ts
rename to lib/cortex/verify-entity-extraction.ts
index 7902957..f50a99f 100644
--- a/lib/swift/verify-entity-extraction.ts
+++ b/lib/cortex/verify-entity-extraction.ts
@@ -1,6 +1,6 @@
/**
* Manual verification script for entity extraction with date/time parser
- * Run with: pnpm tsx lib/swift/verify-entity-extraction.ts
+ * Run with: pnpm tsx lib/cortex/verify-entity-extraction.ts
*/
import { extractEntities } from './entity-extractor';
diff --git a/lib/swift/verify-parser.ts b/lib/cortex/verify-parser.ts
similarity index 97%
rename from lib/swift/verify-parser.ts
rename to lib/cortex/verify-parser.ts
index edab05e..fd6f73f 100644
--- a/lib/swift/verify-parser.ts
+++ b/lib/cortex/verify-parser.ts
@@ -1,6 +1,6 @@
/**
* Manual verification script for date-time parser
- * Run with: pnpm tsx lib/swift/verify-parser.ts
+ * Run with: pnpm tsx lib/cortex/verify-parser.ts
*/
import {
diff --git a/middleware.ts b/middleware.ts
index 8160396..2ddbf9b 100644
--- a/middleware.ts
+++ b/middleware.ts
@@ -88,7 +88,7 @@ export async function middleware(request: NextRequest) {
// Helper: get preferred interface redirect path
const getPreferredPath = () => {
const preference = user?.user_metadata?.preferred_interface
- return preference === 'swift' ? '/epd/swift' : '/epd/clients'
+ return preference === 'cortex' ? '/epd/cortex' : '/epd/clients'
}
// Redirect to preferred interface if authenticated and trying to access login
diff --git a/stores/swift-store.ts b/stores/cortex-store.ts
similarity index 96%
rename from stores/swift-store.ts
rename to stores/cortex-store.ts
index bf72631..ca2adae 100644
--- a/stores/swift-store.ts
+++ b/stores/cortex-store.ts
@@ -6,10 +6,10 @@ import type { VerpleegkundigCategory } from '@/lib/types/report';
// Database types
export type Patient = Database['public']['Tables']['patients']['Row'];
-// Swift-specific types
+// Cortex-specific types
export type ShiftType = 'nacht' | 'ochtend' | 'middag' | 'avond';
-export type SwiftIntent =
+export type CortexIntent =
| 'dagnotitie'
| 'zoeken'
| 'overdracht'
@@ -19,7 +19,7 @@ export type SwiftIntent =
| 'reschedule_appointment'
| 'unknown';
-export type BlockType = Exclude | 'fallback' | 'patient-dashboard';
+export type BlockType = Exclude | 'fallback' | 'patient-dashboard';
// Chat types (v3.0)
export type ChatMessageType = 'user' | 'assistant' | 'system' | 'error';
@@ -33,7 +33,7 @@ export interface ChatMessage {
}
export interface ChatAction {
- intent: SwiftIntent;
+ intent: CortexIntent;
entities: ExtractedEntities;
confidence: number;
artifact?: {
@@ -71,14 +71,14 @@ export interface Artifact {
// Recent action for the Recent Strip
export interface RecentAction {
id: string;
- intent: SwiftIntent;
+ intent: CortexIntent;
label: string;
timestamp: Date;
patientName?: string;
}
// Store interface
-interface SwiftStore {
+interface CortexStore {
// Context
activePatient: Patient | null;
shift: ShiftType;
@@ -167,7 +167,7 @@ const initialState = {
};
// Create the store
-export const useSwiftStore = create()(
+export const useCortexStore = create()(
devtools(
(set, get) => ({
...initialState,
@@ -372,7 +372,7 @@ export const useSwiftStore = create()(
reset: () => set(initialState, false, 'reset'),
}),
{
- name: 'swift-store',
+ name: 'cortex-store',
}
)
);