From 9b85448a43c3afe6b7734c69d32460ea392ebeee Mon Sep 17 00:00:00 2001 From: colinislit Date: Sat, 27 Dec 2025 16:11:43 +0100 Subject: [PATCH] feat(swift): implementeer intent detection & action parsing (E3.S4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Epic 3 Story 4 compleet: AI action objects worden geparsed en gevalideerd. E3.S4 - Intent Detection in Response (5 SP) - Action parser met JSON extraction uit markdown code blocks - Zod validatie voor action schema (intent, entities, confidence, artifact) - Confidence-based artifact opening (≥0.7 threshold) - Visual feedback met action badges in chat messages - Console logging voor debugging Nieuwe Components: - lib/swift/action-parser.ts (149 regels) - parseActionFromResponse(): Extract & validate JSON actions - extractJsonBlock(): Regex matching voor ```json blocks - removeJsonBlocks(): Clean text zonder JSON - shouldOpenArtifact(): Confidence check (≥0.7) - getConfidenceLabel(): "Zeer zeker", "Redelijk zeker", etc. - validateArtifactType(): Intent/artifact type matching Components Updated: - components/swift/chat/chat-panel.tsx - Action parsing in onDone callback - setPendingAction voor artifact opening (E3.S6) - Console logging: "[ChatPanel] Action detected" - components/swift/chat/chat-message.tsx - Action badge met Sparkles icon - Intent label (Dagnotitie, Patiënt zoeken, Overdracht) - CheckCircle icon voor high confidence (≥0.7) - Confidence label display - stores/swift-store.ts - updateLastMessage(): Optional action parameter - Type-safe action assignment (null/undefined handling) Features: - JSON extraction via regex: /```json\s*\n([\s\S]*?)\n```/ - Zod schema: type, intent, entities, confidence, artifact - Confidence thresholds: >0.9, 0.7-0.9, 0.5-0.7, <0.5 - Visual feedback: Sparkles + CheckCircle icons - Cleaned text content (JSON removed from display) - Action stored in message.action en pendingAction state Action Schema: ```typescript { type: "action", intent: "dagnotitie" | "zoeken" | "overdracht" | "unknown", entities: { patientName?: string, patientId?: string, category?: "medicatie" | "adl" | "gedrag" | "incident" | "observatie", content?: string, query?: string }, confidence: number, // 0-1 artifact?: { type: BlockType, prefill: Record } } ``` Build Status: - ✅ pnpm build succesvol (geen type errors) - Alleen bekende warnings (Supabase realtime, useCallback) Voortgang: 46 SP / 85 SP (54%) - E3.S4 compleet 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .gitmessage | 17 ++ components/swift/artifacts/artifact-area.tsx | 63 +++++++ components/swift/chat/chat-message.tsx | 23 +++ components/swift/chat/chat-panel.tsx | 24 ++- .../swift/command-center/command-center.tsx | 46 ++--- docs/swift/{ => archive}/bouwplan-swift-v1.md | 0 docs/swift/{ => archive}/bouwplan-swift-v2.md | 0 docs/swift/bouwplan-swift-v3.md | 28 ++- docs/templates/commit_template.md | 163 ++++++++++++++++++ lib/swift/action-parser.ts | 148 ++++++++++++++++ stores/swift-store.ts | 13 +- 11 files changed, 496 insertions(+), 29 deletions(-) create mode 100644 .gitmessage create mode 100644 components/swift/artifacts/artifact-area.tsx rename docs/swift/{ => archive}/bouwplan-swift-v1.md (100%) rename docs/swift/{ => archive}/bouwplan-swift-v2.md (100%) create mode 100644 docs/templates/commit_template.md create mode 100644 lib/swift/action-parser.ts diff --git a/.gitmessage b/.gitmessage new file mode 100644 index 0000000..dc1e832 --- /dev/null +++ b/.gitmessage @@ -0,0 +1,17 @@ +# (): +# +# +# +#