Commit graph

2057 commits

Author SHA1 Message Date
Nexus Dev
0b9af89ef7 docs(25-04): complete syntax-highlighted code preview plan — SUMMARY, STATE, ROADMAP updated
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
8f66fe4bd0 chore(25-06): mark FILE-09 and FILE-10 complete in REQUIREMENTS.md
- FILE-09: git commit on every file operation — implemented via gitFileService
- FILE-10: version history endpoint — implemented via GET /files/:fileId/history
2026-04-04 03:55:48 +00:00
Nexus Dev
324551538b feat(25-04): wire ChatCodeFilePreview into ChatFilePreview and mark FILE-07 FILE-13 Complete
- Add code category branch in ChatFilePreview routing to ChatCodeFilePreview
- Mark FILE-07 (one-click download) as Complete in REQUIREMENTS.md
- Mark FILE-13 (cross-device access) as Complete in REQUIREMENTS.md
- Update Traceability table for FILE-07 and FILE-13
2026-04-04 03:55:48 +00:00
Nexus Dev
03df062bec feat(25-04): create ChatCodeFilePreview with syntax highlighting
- Add ChatCodeFilePreview component with hljs syntax highlighting
- Fetch file content from contentPath with credentials
- Use DOMParser-based safe rendering (no dangerouslySetInnerHTML)
- Include copy button, language label, and ChatFileCard download below
- Add extToLang extension-to-language mapping
- Register 14 common languages with hljs
- Add highlight.js as direct dependency in ui/package.json
2026-04-04 03:55:48 +00:00
Nexus Dev
e21c3088a0 docs(25-05): complete file scope promotion plan — SUMMARY, STATE, ROADMAP, REQUIREMENTS updated 2026-04-04 03:55:48 +00:00
Nexus Dev
bdbefde2f4 docs(25-08): complete voice input plan — VoiceRecordButton, transcription endpoint, INPUT-02/03/04 complete 2026-04-04 03:55:48 +00:00
Nexus Dev
86f9421026 feat(25-05): mark FILE-12 Complete in REQUIREMENTS.md 2026-04-04 03:55:48 +00:00
Nexus Dev
dea5ea2bb7 feat(25-08): wire VoiceRecordButton into ChatInput and mark INPUT-02/03/04 complete
- Add enableVoiceInput prop to ChatInput props interface
- Add handleTranscription callback that appends transcription text to textarea state
- Render VoiceRecordButton conditionally when enableVoiceInput is true
- Pass enableVoiceInput={true} from ChatPanel to ChatInput
- Mark INPUT-02, INPUT-03, INPUT-04 as Complete in REQUIREMENTS.md traceability table
2026-04-04 03:55:48 +00:00
Nexus Dev
64a90c284e feat(25-08): create VoiceRecordButton and server transcription endpoint
- Add VoiceRecordButton with MediaRecorder API, recording/transcribing/idle states
- Add POST /transcribe endpoint to chat-files.ts using execFileAsync (safe, no shell)
- Tries whisper-cpp first, falls back to openai-whisper Python CLI
- Returns 503 with helpful message if whisper is not installed
2026-04-04 03:55:48 +00:00
Nexus Dev
8b0e3f052d docs(25-08): fix voice input wiring — add ChatPanel enableVoiceInput prop
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
4c5a7fa691 docs(25-file-system): create gap closure plans 04-08 2026-04-04 03:55:48 +00:00
Nexus Dev
939ebd6dc3 fix(25): handle missing chat_files table in listMessages and update addMessage test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
eeaf6468a7 docs(25-03): complete file preview and flow wiring plan — SUMMARY, STATE, ROADMAP updated 2026-04-04 03:55:48 +00:00
Nexus Dev
9aee875239 feat(25-03): wire files into ChatMessage, ChatPanel, and server listMessages
- ChatMessage: files prop, renders ChatFilePreview for each attached file
- ChatMessageList: passes files prop through to ChatMessage
- ChatPanel: wires useChatFileUpload, passes pendingFiles/onRemoveFile/onFilesPicked to ChatInput
- ChatPanel handleSend: attaches uploaded files to message after creation, invalidates query
- chatApi: adds attachFilesToMessage (parallel PATCH /files/:fileId for each fileId)
- server/chat.ts: listMessages fetches chatFiles by messageId (inArray), attaches files array
- server/chat.ts: addMessage returns files: [] for consistency
2026-04-04 03:55:48 +00:00
Nexus Dev
5d385c5f92 feat(25-03): create ChatFilePreview and ChatFileCard components
- ChatFileCard: icon, filename, size, download button with theme-aware bg-muted styling
- ChatFilePreview: inline image rendering with constrained max-h-[300px], ChatFileCard for all other types
- formatFileSize helper (B, KB, MB)
- lucide icons: ImageIcon, FileCode, FileText, File per category
2026-04-04 03:55:48 +00:00
Nexus Dev
5ae676cfb9 docs(25-01): complete chatFileService and chatFileRoutes plan — SUMMARY, STATE, ROADMAP updated 2026-04-04 03:55:48 +00:00
Nexus Dev
928cefa189 feat(25-01): create chatFileRoutes and wire into app.ts
- Create chatFileRoutes with upload, list, content, references, attach endpoints
- Wire into app.ts after assetRoutes, export from routes/index.ts
- Real tests replacing todo stubs in chat-file-routes.test.ts
2026-04-04 03:55:48 +00:00
Nexus Dev
688924a1ba docs(25-02): complete file upload UI plan — ChatFileDropZone, useChatFileUpload, ChatInput wired
- SUMMARY.md documents XHR progress pattern and backward-compatible props
- STATE.md advanced to plan 2, decisions logged, metrics recorded
- ROADMAP.md updated with 2/4 summaries complete for phase 25
- REQUIREMENTS.md marks FILE-05 complete
2026-04-04 03:55:48 +00:00
Nexus Dev
c876b9f142 feat(25-02): create ChatFileDropZone and integrate into ChatInput
- Create ChatFileDropZone component with drag-and-drop state and overlay
- Add onFilesPicked/pendingFiles/onRemoveFile props to ChatInput
- Wrap form in ChatFileDropZone for drag-and-drop support
- Add handlePaste for clipboard image paste (clipboardData.files)
- Add Paperclip icon button with hidden file input for file picker
- Show pending file chips above textarea with progress and remove button
- Add tests: renders file attach button, calls onFilesPicked, shows pending chips
2026-04-04 03:55:48 +00:00
Nexus Dev
1cf231a540 feat(25-01): create chatFileService with DB operations and deriveCategory helper
- Implement chatFileService(db) with create, getById, listByConversation, listByMessage, createReference, listReferences, attachToMessage
- Export deriveCategory() helper mapping MIME types to image/code/document/other
- Add unit tests verifying service methods and category derivation with mocked DB
2026-04-04 03:55:48 +00:00
Nexus Dev
0fe948d1d0 feat(25-02): add chatApi.uploadFile and useChatFileUpload hook
- Add uploadFile method to chatApi using XHR for progress tracking
- Add ChatFileUploadResponse to shared type imports
- Create useChatFileUpload hook with PendingFile lifecycle management
- Hook manages uploading/done/error states with progress callbacks
2026-04-04 03:55:48 +00:00
Nexus Dev
5393ba0947 docs(25-00): complete file system foundation plan — schema, types, validators, test stubs
- Create 25-00-SUMMARY.md with full plan documentation
- Update STATE.md: advance to plan 2/4, record metrics and decisions
- Update ROADMAP.md: phase 25 in progress (1/4 summaries)
- Update REQUIREMENTS.md: mark FILE-01, FILE-02, FILE-03 complete
2026-04-04 03:55:48 +00:00
Nexus Dev
f335d3762b feat(25-00): add shared types, validators, and test stubs for file system
- Add ChatFile, ChatFileReference, ChatFileUploadResponse, ChatFileListResponse interfaces to types/chat.ts
- Add optional files?: ChatFile[] field to ChatMessage interface
- Add uploadChatFileSchema and createFileReferenceSchema Zod validators to validators/chat.ts
- Re-export all new types and validators from shared/src/index.ts
- Create test stubs for chat-file-service.test.ts and chat-file-routes.test.ts with it.todo() entries
2026-04-04 03:55:48 +00:00
Nexus Dev
df88eaa56f feat(25-00): create chat_files and chat_file_references DB schema + migrations
- Add chatFiles Drizzle schema with companyId, conversationId, messageId, filename, mimeType, sizeBytes, objectKey, sha256, source, category, projectId columns
- Add chatFileReferences Drizzle schema for cross-conversation file references
- Add 0053_create_chat_files.sql migration with all columns, FKs, and indexes
- Add 0054_create_chat_file_references.sql migration with cascade deletes
- Export both tables from schema/index.ts
- Update _journal.json with entries for idx 53 and 54
2026-04-04 03:55:48 +00:00
Nexus Dev
d72c065fc7 docs(25-file-system): create phase plan — 4 plans in 3 waves
Plans cover FILE-01 through FILE-06: DB schema + shared types (wave 1),
server file service + routes and UI file upload (wave 2, parallel),
file preview components + full wiring (wave 3).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
714868ab3c docs(25): auto-generated context (discuss skipped) 2026-04-04 03:55:48 +00:00
Nexus Dev
f5e1040f30 docs(phase-24): mark phase complete — 4/4 plans, gap closed inline 2026-04-04 03:55:48 +00:00
Nexus Dev
aa1bebf81b feat(24-03): add JSON export button to ChatPanel header (HIST-04 gap closure) 2026-04-04 03:55:48 +00:00
Nexus Dev
0a5af1f09d docs(24-03): complete integration wiring plan — SUMMARY, STATE, ROADMAP updated
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
6551e7e1b7 feat(24-03): add bookmark toggle to ChatMessage and ChatMessageActions
- Add onBookmark/isBookmarked props to ChatMessageActions
- Render ChatMessageBookmark as last action for user and assistant messages
- Add onBookmark/isBookmarked props to ChatMessage, thread to ChatMessageActions
- System messages do not receive bookmark actions
2026-04-04 03:55:48 +00:00
Nexus Dev
77132b4351 feat(24-03): wire search, branch selector, export, scroll-to-message into ChatPanel
- Add scrollToMessageId/setScrollToMessageId to ChatPanelContext
- Add "Search chat messages" item to CommandPalette (dispatches nexus:open-chat-search)
- Integrate ChatSearchDialog, ChatBranchSelector, ChatBookmarkList into ChatPanel
- Add export buttons (Markdown) and bookmarks panel toggle in header
- Wire branch-on-edit: branchConversation called when editing message with subsequent replies
- Add scroll-to-message support in ChatMessageList via virtualizer.scrollToIndex
- Show GitBranch icon for branch conversations in ChatConversationList
2026-04-04 03:55:48 +00:00
Nexus Dev
d20dce57ba docs(24-02): complete UI components plan — hooks, API methods, search/bookmark/branch components 2026-04-04 03:55:48 +00:00
Nexus Dev
85bd30b6ee docs(24-01): complete search-history-branching plan 01 — service methods and routes
- SUMMARY.md: 6 service methods + 6 route handlers documented
- STATE.md: advanced to plan 3/4, recorded metrics and decisions
- ROADMAP.md: updated phase 24 progress (2/4 summaries)
2026-04-04 03:55:48 +00:00
Nexus Dev
ac6d75ab0d feat(24-02): UI components — ChatSearchDialog, ChatMessageBookmark, ChatBookmarkList, ChatBranchSelector
- ChatSearchDialog: CommandDialog with shouldFilter=false for server-side FTS, term highlighting via React components
- ChatMessageBookmark: ghost icon button with fill-current for bookmarked state, aria-label toggle
- ChatBookmarkList: scrollable list with skeleton loading, empty state, navigation callbacks
- ChatBranchSelector: horizontal branch picker bar with GitBranch icon, active branch highlight
2026-04-04 03:55:48 +00:00
Nexus Dev
505f5e2262 feat(24-01): add search, bookmark, branch, and export Express route handlers
- GET /companies/:companyId/messages/search: FTS search with ZodError 400 guard
- POST /conversations/:id/bookmarks: toggle bookmark with UUID validation
- GET /companies/:companyId/bookmarks: list bookmarks with optional conversationId filter
- POST /conversations/:id/branch: branch conversation from message point
- GET /conversations/:id/branches: list child conversations
- GET /conversations/:id/export: download Markdown or JSON with Content-Disposition header
2026-04-04 03:55:48 +00:00
Nexus Dev
61161a3561 feat(24-01): add searchMessages, toggleBookmark, getBookmarks, branchConversation, listBranches, exportConversation service methods
- searchMessages: tsvector FTS with ts_rank ordering, joins conversations for companyId scoping
- toggleBookmark: transactional insert-or-delete bookmark
- getBookmarks: joins bookmarks+messages+conversations, supports conversationId filter
- branchConversation: copies messages up to branch point into new child conversation
- listBranches: queries child conversations by parentConversationId
- exportConversation: LEFT JOINs agents for name resolution, produces Markdown or JSON with file headers
2026-04-04 03:55:48 +00:00
Nexus Dev
d56e19c7b4 feat(24-02): API client methods and React Query hooks for search, bookmarks, branches
- Add searchMessages, toggleBookmark, getBookmarks, branchConversation, listBranches, exportConversation to chatApi
- Create useChatSearch hook with debounced FTS, placeholderData, 30s staleTime
- Create useChatBookmarks and useToggleBookmark with cache invalidation for bookmarks and search queries
2026-04-04 03:55:48 +00:00
Nexus Dev
16833a1ea6 docs(24-00): complete foundation plan — migrations, schema, types, test stubs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 03:55:48 +00:00
Nexus Dev
dc6316cf28 feat(24-00): shared types, validators, and Wave 0 test stubs for phase 24
- Add ChatMessageSearchResult, ChatMessageSearchResponse to shared types
- Add ChatBookmark, ChatBookmarkWithMessage, ChatBookmarkListResponse, ChatBookmarkToggleResponse
- Add parentConversationId + branchFromMessageId to ChatConversation and ChatConversationListItem
- Add searchMessagesSchema + branchConversationSchema to validators
- Re-export all new types and validators from shared/src/index.ts
- Add Wave 0 it.todo stubs: searchMessages, toggleBookmark, branchConversation, exportConversation
- Add Wave 0 it.todo stubs for 4 new route groups in chat-routes.test.ts
2026-04-04 03:55:48 +00:00
Nexus Dev
988514db41 feat(24-00): DB migrations and Drizzle schema updates for search/history/branching
- Add 0050_add_branch_columns.sql: parent_conversation_id + branch_from_message_id on chat_conversations
- Add 0051_add_message_search_vector.sql: content_search tsvector + GIN index on chat_messages
- Add 0052_create_chat_message_bookmarks.sql: new bookmarks table with company/message/conversation FK
- Update chat_conversations.ts: parentConversationId + branchFromMessageId columns + parentIdx
- Update chat_messages.ts: add comment for generated tsvector column
- Create chat_message_bookmarks.ts: Drizzle schema with indexes
- Update schema/index.ts: export chatMessageBookmarks
- Update _journal.json: entries for idx 50, 51, 52
2026-04-04 03:55:48 +00:00
Nexus Dev
1e4d2be3dd docs(24-search-history-branching): create phase plan 2026-04-04 03:55:48 +00:00
Nexus Dev
502ad9c63e docs(24): research phase domain 2026-04-04 03:55:48 +00:00
Nexus Dev
a2ea035aa1 docs(24): auto-generated context (discuss skipped) 2026-04-04 03:55:48 +00:00
Nexus Dev
017e53174f docs(phase-23): mark phase complete — 4/4 plans, 13/15 must-haves verified (2 human-deferred) 2026-04-04 03:55:48 +00:00
Nexus Dev
d2834c6cf4 docs(23-03): complete chat integration wiring plan
- SUMMARY.md for 23-03 (messageType dispatch, ChatPanel wiring, handoffSpec/postStatusUpdate)
- STATE.md: plan advanced, metrics recorded, decisions added
- ROADMAP.md: Phase 23 marked Complete (4/4 summaries)
2026-04-04 03:55:48 +00:00
Nexus Dev
92d0ada080 feat(23-03): wire useBrainstormerDefault and handleHandoff into ChatPanel
- Import useBrainstormerDefault hook and useToast context
- Auto-select general agent for new conversations (when activeConversationId is null)
- Add handleHandoff callback: calls chatApi.handoffSpec, invalidates messages cache, shows error toast on failure
- Pass onHandoff={handleHandoff} to ChatMessageList
2026-04-04 03:55:48 +00:00
Nexus Dev
71839e0032 feat(23-03): add messageType dispatch, ChatMessageList propagation, and chatApi handoff methods
- ChatMessage: add messageType/conversationId/onHandoff props; dispatch to ChatSpecCard, ChatHandoffIndicator, ChatTaskCreatedBadge, ChatStatusUpdateBadge based on messageType
- ChatMessageList: propagate messageType and conversationId to ChatMessage; add onHandoff prop
- chatApi: add handoffSpec() and postStatusUpdate() methods
2026-04-04 03:55:48 +00:00
Nexus Dev
9205ee82e3 feat(23-01): add handoff and status-update routes to chat API
- POST /conversations/:id/handoff: resolves companyId, inserts handoff
  message, creates issue from spec, inserts task_created message
- POST /conversations/:id/status-update: inserts status_update message
- Import issueService and handoffSchema; instantiate issueSvc in chatRoutes
- Both routes use assertBoard for authentication
2026-04-04 03:55:48 +00:00
Nexus Dev
b2038e1884 feat(23-01): extend chat service with messageType support and addSystemMessage
- addMessage now accepts optional messageType parameter
- addSystemMessage helper inserts system-role messages with typed messageType
- Both methods bump conversation updatedAt for correct sort order
2026-04-04 03:55:48 +00:00
Nexus Dev
1fe00d1798 docs(23-01): complete chat service extension plan — handoff + status-update routes
- Add 23-01-SUMMARY.md with accomplishments and commit hashes
- Update STATE.md: advance to plan 4, update progress to 94%, log session
- Update ROADMAP.md: phase 23 at 3/4 summaries, In Progress
2026-04-04 03:55:48 +00:00