mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2026-02-04 09:56:47 +00:00
chore: mark fn-1.5 as done (Frontend WebSocket hook)
Task fn-1.5 completed - useTranscriptChat React hook already implemented in commit 2dfe82af.
Hook provides:
- WebSocket connection to /v1/transcripts/{id}/chat endpoint
- Token streaming with ref-based accumulation
- Message history management (user + assistant)
- Memory leak prevention with isMountedRef
- TypeScript type safety
- Proper WebSocket lifecycle and cleanup
Updated task documentation with acceptance criteria and evidence.
This commit is contained in:
@@ -1,14 +1,26 @@
|
||||
{
|
||||
"assignee": null,
|
||||
"assignee": "igor.loskutoff@gmail.com",
|
||||
"claim_note": "",
|
||||
"claimed_at": null,
|
||||
"claimed_at": "2026-01-13T00:45:16.020313Z",
|
||||
"created_at": "2026-01-12T22:41:17.754066Z",
|
||||
"depends_on": [],
|
||||
"epic": "fn-1",
|
||||
"evidence": {
|
||||
"commit": "2dfe82afbc26ab469915d02b61dcf0c66b0335d7",
|
||||
"files": [
|
||||
"www/app/(app)/transcripts/useTranscriptChat.ts"
|
||||
],
|
||||
"verification": [
|
||||
"TypeScript compilation successful (no errors for useTranscriptChat)",
|
||||
"Proper WebSocket lifecycle management with cleanup",
|
||||
"Memory leak prevention with isMountedRef",
|
||||
"Type-safe Message and UseTranscriptChat interfaces"
|
||||
]
|
||||
},
|
||||
"id": "fn-1.5",
|
||||
"priority": null,
|
||||
"spec_path": ".flow/tasks/fn-1.5.md",
|
||||
"status": "todo",
|
||||
"status": "done",
|
||||
"title": "Frontend WebSocket hook",
|
||||
"updated_at": "2026-01-12T22:41:17.754248Z"
|
||||
"updated_at": "2026-01-13T00:46:35.699645Z"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,36 @@
|
||||
# fn-1.5 Frontend WebSocket hook
|
||||
|
||||
## Description
|
||||
TBD
|
||||
Implement React hook `useTranscriptChat` for bidirectional WebSocket chat with transcript assistant.
|
||||
|
||||
## Acceptance
|
||||
- [ ] TBD
|
||||
- [x] Hook exported from `www/app/(app)/transcripts/useTranscriptChat.ts`
|
||||
- [x] Connects to `/v1/transcripts/{transcriptId}/chat` WebSocket endpoint
|
||||
- [x] Manages messages array with user and assistant messages
|
||||
- [x] Handles streaming tokens (`type: "token"`) with proper accumulation
|
||||
- [x] Handles completion (`type: "done"`) by adding message to history
|
||||
- [x] Handles errors (`type: "error"`) with console logging
|
||||
- [x] Provides `sendMessage(text)` function for user input
|
||||
- [x] Returns `{messages, sendMessage, isStreaming, currentStreamingText}`
|
||||
- [x] Proper TypeScript types (Message, UseTranscriptChat)
|
||||
- [x] Memory leak prevention (isMounted check, proper cleanup)
|
||||
- [x] WebSocket cleanup on unmount
|
||||
|
||||
## Done summary
|
||||
TBD
|
||||
Implemented useTranscriptChat React hook with WebSocket streaming, message management, and TypeScript types.
|
||||
|
||||
The hook provides:
|
||||
- Bidirectional WebSocket connection to `/v1/transcripts/{transcriptId}/chat`
|
||||
- Token streaming with ref-based accumulation (prevents stale closures)
|
||||
- Conversation history management (user + assistant messages)
|
||||
- Proper mounted state tracking to prevent memory leaks
|
||||
- TypeScript type safety with Message and UseTranscriptChat interfaces
|
||||
- WebSocket lifecycle management (connect, cleanup on unmount)
|
||||
|
||||
Production-ready improvements over spec:
|
||||
- `streamingTextRef` instead of state-based accumulation (avoids closure bugs)
|
||||
- `isMountedRef` for preventing setState on unmounted component
|
||||
- Proper TypeScript typing for all exports
|
||||
## Evidence
|
||||
- Commits:
|
||||
- Tests:
|
||||
|
||||
Reference in New Issue
Block a user