UX: queue bubbles, dashboard queuing, duplicate confirm buttons, short-note fix

- Dashboard chat: allow typing/sending during streaming (queued in store)
  placeholder updates to "Type to queue…" during generation
- ChatView/WorkspaceView: replace queued chip with actual pending message
  bubbles — light grey, dashed border, "Queued" badge above content; clear
  button below the stack
- ToolCallCard: when tool returns requires_confirmation=True, show
  "Similar content found" label (not "Error"), link to the similar note,
  and "Create Anyway" / "Don't Create" buttons that auto-send the reply
- tools.py: fuzzy title match now returns requires_confirmation=True with
  similar_note data instead of a hard error, so numbered-series notes
  (Lore: X 0, Lore: X 1) can be created with one button click; semantic
  match responses also include similar_note for the link

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 23:32:21 -04:00
parent 12644999c1
commit d7e1fe6aab
7 changed files with 165 additions and 54 deletions
@@ -126,7 +126,7 @@ defineExpose({ focus });
<button
class="btn-attach"
@click="toggleNotePicker"
:disabled="!store.chatReady || store.streaming"
:disabled="!store.chatReady"
title="Attach a note"
>
<svg
@@ -181,17 +181,17 @@ defineExpose({ focus });
@input="autoResize"
:placeholder="
!store.chatReady ? 'Chat unavailable'
: store.streaming ? 'Generating response…'
: store.streaming ? 'Type to queue… (Enter to queue)'
: 'Start a new chat… (Enter to send)'
"
:disabled="!store.chatReady || store.streaming"
:disabled="!store.chatReady"
rows="1"
></textarea>
<button
class="btn-send"
@click="onSubmit"
:disabled="!messageInput.trim() || !store.chatReady || store.streaming"
:disabled="!messageInput.trim() || !store.chatReady"
>
&uarr;
</button>