Fix queued bubbles, queue persistence, duplicate confirm UX, semantic check

- Queued message bubbles now match user bubble style (primary colour,
  right-aligned, opacity 0.45) in both ChatView and WorkspaceView
- Queue persisted to localStorage (fa_conv_queue_<id>); survives page
  refresh, restored on fetchConversation, cleared on delete
- ToolCallCard confirm/deny: buttons now inline in header row; "Create
  anyway" calls POST /api/notes or /api/tasks directly (no LLM round-trip);
  shows "✓ Created" / "Skipped" state; removed chatStore dependency
- POST /api/notes and POST /api/tasks now accept project (name string) and
  resolve to project_id server-side, matching tools.py behaviour
- Remove semantic similarity duplicate check from create_note and
  create_task — 0.87 threshold was too aggressive for topically-related
  notes; title-based exact/fuzzy checks are sufficient

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 08:11:39 -04:00
parent d7e1fe6aab
commit 4dd3c1fe81
7 changed files with 116 additions and 53 deletions
+10 -6
View File
@@ -1623,17 +1623,21 @@ details[open] .thinking-summary::before {
}
.queued-bubble {
background: var(--color-bg-secondary) !important;
border: 1px dashed var(--color-border) !important;
opacity: 0.7;
background: var(--color-primary) !important;
color: #fff !important;
border-bottom-right-radius: 4px !important;
opacity: 0.45;
}
.queued-bubble .message-content {
color: #fff;
}
.queued-badge {
font-size: 0.7rem;
font-size: 0.65rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-text-muted);
margin-bottom: 0.25rem;
color: rgba(255, 255, 255, 0.75);
margin-bottom: 0.2rem;
}
.queued-clear-row {
display: flex;
+10 -6
View File
@@ -644,17 +644,21 @@ details[open] .thinking-summary::before {
overflow-y: auto;
}
.queued-bubble {
background: var(--color-bg-secondary) !important;
border: 1px dashed var(--color-border) !important;
opacity: 0.7;
background: var(--color-primary) !important;
color: #fff !important;
border-bottom-right-radius: 4px !important;
opacity: 0.45;
}
.queued-bubble .message-content {
color: #fff;
}
.queued-badge {
font-size: 0.7rem;
font-size: 0.65rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-text-muted);
margin-bottom: 0.25rem;
color: rgba(255, 255, 255, 0.75);
margin-bottom: 0.2rem;
}
.queued-clear-row {
display: flex;