From 979fd1aac559805e05b36369e0fb756a8ec517dd Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sun, 7 Jun 2026 00:21:04 +0900 Subject: Slice 2 wave 2: IndexedDB cache adapter + chat feature - adapters/idb: createIdbChunkStore implements the ConversationChunkStore port over IndexedDB (compound [conversationId,seq] key, idempotent append, meta store for lastAccess); 8 tests with fake-indexeddb - features/chat: createChatStore (runes-thin over the core/chunks reducer, all effects injected via ChatTransport/HistorySync/ConversationCache ports) + ChatView/Composer svelte-thin UI; folds chat.delta, syncs on turn-sealed, hydrates from cache then catches up; 25 tests Verified green: svelte-check 0/0, vitest 202, biome clean, build ok. --- src/features/chat/ui/ChatView.svelte | 45 ++++++++++++++++++++++++++++++++++++ src/features/chat/ui/Composer.svelte | 33 ++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/features/chat/ui/ChatView.svelte create mode 100644 src/features/chat/ui/Composer.svelte (limited to 'src/features/chat/ui') diff --git a/src/features/chat/ui/ChatView.svelte b/src/features/chat/ui/ChatView.svelte new file mode 100644 index 0000000..a7c39cc --- /dev/null +++ b/src/features/chat/ui/ChatView.svelte @@ -0,0 +1,45 @@ + + +
+ {#each chunks as rendered (rendered)} +
+
{rendered.role}
+
+ {#if rendered.chunk.type === "text"} +

{rendered.chunk.text}

+ {:else if rendered.chunk.type === "thinking"} +
+ Thinking +

{rendered.chunk.text}

+
+ {:else if rendered.chunk.type === "tool-call"} +
+ {rendered.chunk.toolName} +
{JSON.stringify(rendered.chunk.input, null, 2)}
+
+ {:else if rendered.chunk.type === "tool-result"} +
+ {rendered.chunk.toolName} +
{rendered.chunk.content}
+
+ {:else if rendered.chunk.type === "error"} + + {:else if rendered.chunk.type === "system"} +
{rendered.chunk.text}
+ {/if} +
+
+ {/each} +
diff --git a/src/features/chat/ui/Composer.svelte b/src/features/chat/ui/Composer.svelte new file mode 100644 index 0000000..dc71e11 --- /dev/null +++ b/src/features/chat/ui/Composer.svelte @@ -0,0 +1,33 @@ + + +
{ prevent.preventDefault(); handleSubmit(); }}> + + +
-- cgit v1.2.3