@happyvertical/smrt-chat 0.55.15 → 0.55.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/chunks/{chat-stream-CXWE2vjb.js → chat-stream-D1xCl9IM.js} +2 -2
  2. package/dist/chunks/{chat-stream-CXWE2vjb.js.map → chat-stream-D1xCl9IM.js.map} +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/manifest.json +1 -1
  5. package/dist/smrt-knowledge.json +3 -3
  6. package/dist/svelte/components/agent/AgentChat.svelte +70 -67
  7. package/dist/svelte/components/agent/AgentSelector.svelte +26 -23
  8. package/dist/svelte/components/agent/AgentSessionPanel.svelte +47 -44
  9. package/dist/svelte/components/agent/ToolCallDisplay.svelte +52 -49
  10. package/dist/svelte/components/assistant/AssistantChoiceCards.svelte +19 -17
  11. package/dist/svelte/components/assistant/AssistantComposer.svelte +31 -28
  12. package/dist/svelte/components/assistant/AssistantDock.svelte +69 -66
  13. package/dist/svelte/components/assistant/AssistantThreadList.svelte +23 -20
  14. package/dist/svelte/components/assistant/FloatingAssistant.svelte +6 -3
  15. package/dist/svelte/components/assistant/captions/CaptionOverlay.svelte +4 -1
  16. package/dist/svelte/components/assistant/captions/HeardCaptions.svelte +5 -2
  17. package/dist/svelte/components/assistant/captions/SpokenCaptions.svelte +5 -2
  18. package/dist/svelte/components/dialogs/RoomCreateDialog.svelte +13 -10
  19. package/dist/svelte/components/dialogs/SearchMessages.svelte +35 -32
  20. package/dist/svelte/components/helper/HelperControlPanel.svelte +4 -1
  21. package/dist/svelte/components/layout/ChatLayout.svelte +14 -10
  22. package/dist/svelte/components/layout/MemberList.svelte +30 -27
  23. package/dist/svelte/components/layout/RoomHeader.svelte +19 -16
  24. package/dist/svelte/components/layout/RoomList.svelte +26 -23
  25. package/dist/svelte/components/messages/MessageInput.svelte +20 -17
  26. package/dist/svelte/components/messages/MessageItem.svelte +45 -42
  27. package/dist/svelte/components/messages/MessageList.svelte +8 -5
  28. package/dist/svelte/components/messages/ThreadPanel.svelte +15 -12
  29. package/dist/svelte/components/shared/FileUpload.svelte +39 -36
  30. package/dist/svelte/components/shared/LinkPreview.svelte +9 -6
  31. package/dist/svelte/components/shared/MentionAutocomplete.svelte +16 -13
  32. package/dist/svelte/components/shared/ReadReceipts.svelte +13 -10
  33. package/dist/svelte/components/shared/UserPresence.svelte +10 -7
  34. package/dist/svelte/components/tabs/ChatTab.svelte +26 -23
  35. package/dist/svelte/components/tabs/ChatTabList.svelte +20 -17
  36. package/dist/svelte/components/tabs/ChatTabs.svelte +7 -4
  37. package/dist/svelte/components/tabs/MiniChat.svelte +26 -23
  38. package/dist/sveltekit.js +1 -1
  39. package/package.json +17 -17
@@ -24,7 +24,7 @@ const { tabs, onselect, onclose }: Props = $props();
24
24
  </script>
25
25
 
26
26
  {#if tabs.length > 0}
27
- <nav class="tab-list" aria-label={t(M['chat.chat_tab_list.minimized_chats'])}>
27
+ <nav class="tab-list" aria-label={t(M['chat.chat_tab_list.minimized_chats'])} data-smrt-component="ChatTabList">
28
28
  {#each tabs as tab (tab.roomId)}
29
29
  <div class="tab-list__item">
30
30
  <!-- raw-primitive-allow: pressable circular avatar tab wrapping rich content (room avatar component and overlaid unread badge) that opens the chat on click; no Button primitive owns this structural avatar-tab pattern -->
@@ -65,10 +65,12 @@ const { tabs, onselect, onclose }: Props = $props();
65
65
  {/if}
66
66
 
67
67
  <style>
68
+ @layer smrt.reset, smrt.structure, smrt.theme;
69
+ @layer smrt.theme {
68
70
  .tab-list {
69
71
  display: flex;
70
72
  align-items: flex-end;
71
- gap: var(--smrt-spacing-1, 4px);
73
+ gap: var(--smrt-spacing-1);
72
74
  pointer-events: auto;
73
75
  }
74
76
 
@@ -84,10 +86,10 @@ const { tabs, onselect, onclose }: Props = $props();
84
86
  display: inline-flex;
85
87
  align-items: center;
86
88
  justify-content: center;
87
- padding: var(--smrt-spacing-2, 8px);
89
+ padding: var(--smrt-spacing-2);
88
90
  border: none;
89
- background: var(--smrt-color-surface-container, #f0f0f4);
90
- border-radius: var(--smrt-radius-full, 9999px);
91
+ background: var(--smrt-color-surface-container);
92
+ border-radius: var(--smrt-radius-full);
91
93
  cursor: pointer;
92
94
  transition: background var(--smrt-duration-short2, 150ms),
93
95
  box-shadow var(--smrt-duration-short2, 150ms);
@@ -95,12 +97,12 @@ const { tabs, onselect, onclose }: Props = $props();
95
97
  }
96
98
 
97
99
  .tab-list__btn:hover {
98
- background: var(--smrt-color-surface-container-high, #e6e6ea);
100
+ background: var(--smrt-color-surface-container-high);
99
101
  box-shadow: var(--smrt-elevation-2, 0 2px 6px rgba(0, 0, 0, 0.15));
100
102
  }
101
103
 
102
104
  .tab-list__btn:focus-visible {
103
- outline: 2px solid var(--smrt-color-primary, #005ac1);
105
+ outline: 2px solid var(--smrt-color-primary);
104
106
  outline-offset: 2px;
105
107
  }
106
108
 
@@ -113,14 +115,14 @@ const { tabs, onselect, onclose }: Props = $props();
113
115
  justify-content: center;
114
116
  min-width: 16px;
115
117
  height: 16px;
116
- padding: 0 var(--smrt-spacing-1, 4px);
117
- border-radius: var(--smrt-radius-full, 9999px);
118
- background: var(--smrt-color-error, #ba1a1a);
119
- color: var(--smrt-color-on-error, #ffffff);
118
+ padding: 0 var(--smrt-spacing-1);
119
+ border-radius: var(--smrt-radius-full);
120
+ background: var(--smrt-color-error);
121
+ color: var(--smrt-color-on-error);
120
122
  font-size: var(--smrt-typography-label-small-size, 0.625rem);
121
123
  font-weight: var(--smrt-typography-weight-semibold, 600);
122
124
  line-height: 1;
123
- border: 2px solid var(--smrt-color-surface, #fefbff);
125
+ border: 2px solid var(--smrt-color-surface);
124
126
  }
125
127
 
126
128
  /* :global() pierces into the Button child's rendered <button> (see #1589). */
@@ -131,9 +133,9 @@ const { tabs, onselect, onclose }: Props = $props();
131
133
  right: -4px;
132
134
  width: 18px;
133
135
  height: 18px;
134
- background: var(--smrt-color-surface-variant, #e1e2ec);
135
- color: var(--smrt-color-on-surface-variant, #43474e);
136
- border-radius: var(--smrt-radius-full, 9999px);
136
+ background: var(--smrt-color-surface-variant);
137
+ color: var(--smrt-color-on-surface-variant);
138
+ border-radius: var(--smrt-radius-full);
137
139
  padding: 0;
138
140
  font-size: 0;
139
141
  }
@@ -149,8 +151,8 @@ const { tabs, onselect, onclose }: Props = $props();
149
151
  }
150
152
 
151
153
  .tab-list__item :global(.tab-list__close:hover) {
152
- background: var(--smrt-color-error-container, #ffdad6);
153
- color: var(--smrt-color-on-error-container, #410002);
154
+ background: var(--smrt-color-error-container);
155
+ color: var(--smrt-color-on-error-container);
154
156
  }
155
157
 
156
158
  @media (prefers-reduced-motion: reduce) {
@@ -158,4 +160,5 @@ const { tabs, onselect, onclose }: Props = $props();
158
160
  transition: none;
159
161
  }
160
162
  }
163
+ }
161
164
  </style>
@@ -42,7 +42,7 @@ const expandedTabs = $derived(tabs.filter((t) => t.isExpanded));
42
42
  const collapsedTabs = $derived(tabs.filter((t) => !t.isExpanded));
43
43
  </script>
44
44
 
45
- <div class="chat-tabs" aria-label={t(M['chat.chat_tabs.tabs_label'])}>
45
+ <div class="chat-tabs" aria-label={t(M['chat.chat_tabs.tabs_label'])} data-smrt-component="ChatTabs">
46
46
  <div class="chat-tabs__expanded">
47
47
  {#each expandedTabs as tab (tab.roomId)}
48
48
  <ChatTab
@@ -67,14 +67,16 @@ const collapsedTabs = $derived(tabs.filter((t) => !t.isExpanded));
67
67
  </div>
68
68
 
69
69
  <style>
70
+ @layer smrt.reset, smrt.structure, smrt.theme;
71
+ @layer smrt.theme {
70
72
  .chat-tabs {
71
73
  position: fixed;
72
74
  bottom: 0;
73
75
  right: 0;
74
76
  display: flex;
75
77
  align-items: flex-end;
76
- gap: var(--smrt-spacing-2, 8px);
77
- padding: 0 var(--smrt-spacing-4, 16px);
78
+ gap: var(--smrt-spacing-2);
79
+ padding: 0 var(--smrt-spacing-4);
78
80
  z-index: var(--smrt-z-index-sticky, 1100);
79
81
  pointer-events: none;
80
82
  }
@@ -82,7 +84,8 @@ const collapsedTabs = $derived(tabs.filter((t) => !t.isExpanded));
82
84
  .chat-tabs__expanded {
83
85
  display: flex;
84
86
  align-items: flex-end;
85
- gap: var(--smrt-spacing-2, 8px);
87
+ gap: var(--smrt-spacing-2);
86
88
  pointer-events: auto;
87
89
  }
90
+ }
88
91
  </style>
@@ -56,7 +56,7 @@ $effect(() => {
56
56
  });
57
57
  </script>
58
58
 
59
- <div class="mini-chat">
59
+ <div class="mini-chat" data-smrt-component="MiniChat">
60
60
  <div
61
61
  class="mini-chat__messages"
62
62
  style:max-height="{maxHeight}px"
@@ -111,6 +111,8 @@ $effect(() => {
111
111
  </div>
112
112
 
113
113
  <style>
114
+ @layer smrt.reset, smrt.structure, smrt.theme;
115
+ @layer smrt.theme {
114
116
  .mini-chat {
115
117
  display: flex;
116
118
  flex-direction: column;
@@ -120,17 +122,17 @@ $effect(() => {
120
122
  .mini-chat__messages {
121
123
  flex: 1;
122
124
  overflow-y: auto;
123
- padding: var(--smrt-spacing-2, 8px);
125
+ padding: var(--smrt-spacing-2);
124
126
  display: flex;
125
127
  flex-direction: column;
126
- gap: var(--smrt-spacing-2, 8px);
128
+ gap: var(--smrt-spacing-2);
127
129
  scroll-behavior: smooth;
128
130
  }
129
131
 
130
132
  .mini-chat__msg {
131
133
  display: flex;
132
134
  align-items: flex-end;
133
- gap: var(--smrt-spacing-2, 8px);
135
+ gap: var(--smrt-spacing-2);
134
136
  max-width: 85%;
135
137
  }
136
138
 
@@ -142,23 +144,23 @@ $effect(() => {
142
144
  .mini-chat__bubble {
143
145
  display: flex;
144
146
  flex-direction: column;
145
- gap: var(--smrt-spacing-1, 4px);
146
- padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
147
- border-radius: var(--smrt-radius-medium, 8px);
148
- background: var(--smrt-color-surface-container, #f0f0f4);
149
- color: var(--smrt-color-on-surface, #1a1c1e);
147
+ gap: var(--smrt-spacing-1);
148
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
149
+ border-radius: var(--smrt-radius-medium);
150
+ background: var(--smrt-color-surface-container);
151
+ color: var(--smrt-color-on-surface);
150
152
  word-break: break-word;
151
153
  }
152
154
 
153
155
  .mini-chat__bubble--own {
154
- background: var(--smrt-color-primary-container, #d6e3ff);
155
- color: var(--smrt-color-on-primary-container, #001a41);
156
+ background: var(--smrt-color-primary-container);
157
+ color: var(--smrt-color-on-primary-container);
156
158
  }
157
159
 
158
160
  .mini-chat__sender {
159
161
  font-size: var(--smrt-typography-label-small-size, 0.6875rem);
160
162
  font-weight: var(--smrt-typography-weight-semibold, 600);
161
- color: var(--smrt-color-primary, #005ac1);
163
+ color: var(--smrt-color-primary);
162
164
  line-height: 1;
163
165
  }
164
166
 
@@ -168,7 +170,7 @@ $effect(() => {
168
170
 
169
171
  .mini-chat__time {
170
172
  font-size: var(--smrt-typography-label-small-size, 0.625rem);
171
- color: var(--smrt-color-outline, #74777f);
173
+ color: var(--smrt-color-outline);
172
174
  align-self: flex-end;
173
175
  line-height: 1;
174
176
  }
@@ -183,24 +185,24 @@ $effect(() => {
183
185
 
184
186
  .mini-chat__empty-text {
185
187
  font: var(--smrt-typography-body-small-font, 0.8125rem/1.4 sans-serif);
186
- color: var(--smrt-color-outline, #74777f);
188
+ color: var(--smrt-color-outline);
187
189
  }
188
190
 
189
191
  /* :global() targets the Form primitive's rendered <form> (see #1589 scoping trap). */
190
192
  :global(.mini-chat__input-bar) {
191
193
  display: flex;
192
194
  align-items: center;
193
- gap: var(--smrt-spacing-1, 4px);
194
- padding: var(--smrt-spacing-2, 8px);
195
- border-top: 1px solid var(--smrt-color-outline-variant, #c4c6d0);
196
- background: var(--smrt-color-surface, #fefbff);
195
+ gap: var(--smrt-spacing-1);
196
+ padding: var(--smrt-spacing-2);
197
+ border-top: 1px solid var(--smrt-color-outline-variant);
198
+ background: var(--smrt-color-surface);
197
199
  }
198
200
 
199
201
  /* Layout for the Input primitive's rendered <input> (tokenised styling comes
200
202
  from the primitive; this only sizes/shapes it within the input bar). */
201
203
  :global(.mini-chat__input) {
202
204
  flex: 1;
203
- border-radius: var(--smrt-radius-full, 9999px);
205
+ border-radius: var(--smrt-radius-full);
204
206
  }
205
207
 
206
208
  /* :global() pierces into the Button child's rendered <button> (see #1589).
@@ -209,9 +211,9 @@ $effect(() => {
209
211
  width: 32px;
210
212
  height: 32px;
211
213
  padding: 0;
212
- background: var(--smrt-color-primary, #005ac1);
213
- color: var(--smrt-color-on-primary, #ffffff);
214
- border-radius: var(--smrt-radius-full, 9999px);
214
+ background: var(--smrt-color-primary);
215
+ color: var(--smrt-color-on-primary);
216
+ border-radius: var(--smrt-radius-full);
215
217
  flex-shrink: 0;
216
218
  transition: opacity var(--smrt-duration-short2, 150ms);
217
219
  }
@@ -221,7 +223,7 @@ $effect(() => {
221
223
  }
222
224
 
223
225
  :global(.mini-chat__input-bar .mini-chat__send-btn:not(:disabled):hover) {
224
- background: var(--smrt-color-primary, #005ac1);
226
+ background: var(--smrt-color-primary);
225
227
  opacity: 0.85;
226
228
  }
227
229
 
@@ -234,4 +236,5 @@ $effect(() => {
234
236
  transition: none;
235
237
  }
236
238
  }
239
+ }
237
240
  </style>
package/dist/sveltekit.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i as clientRequestMessageId, n as ChatService, t as ChatClientRequestConflictError } from "./chunks/ChatService-DjGf2AoJ.js";
2
- import { D as runAssistantTurn, E as createSessionContinuationStore, P as buildManifestToolCatalog, j as MAX_CLIENT_TOOL_RESULT_CHARS, v as ASSISTANT_TURN_GENERIC_ERROR, w as createAssistantTurnResponse, z as sanitizeClientToolDeclarations } from "./chunks/chat-stream-CXWE2vjb.js";
2
+ import { D as runAssistantTurn, E as createSessionContinuationStore, P as buildManifestToolCatalog, j as MAX_CLIENT_TOOL_RESULT_CHARS, v as ASSISTANT_TURN_GENERIC_ERROR, w as createAssistantTurnResponse, z as sanitizeClientToolDeclarations } from "./chunks/chat-stream-D1xCl9IM.js";
3
3
  import { getCurrentSessionPermissionContext, getRequestScopedDatabase } from "@happyvertical/smrt-users";
4
4
  import { getConfig, loadConfig, resolveConfiguredAIProvider, toAIClientOptions } from "@happyvertical/smrt-config";
5
5
  //#region src/sveltekit.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-chat",
3
- "version": "0.55.15",
3
+ "version": "0.55.17",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Chat rooms, DMs, threads, and agent conversations for the SMRT framework",
6
6
  "type": "module",
@@ -85,18 +85,18 @@
85
85
  "@happyvertical/animation": "0.5.0",
86
86
  "@happyvertical/ai": "^0.103.4",
87
87
  "@happyvertical/speech": "^0.103.4",
88
- "@happyvertical/smrt-images": "0.55.15",
89
- "@happyvertical/smrt-agents": "0.55.15",
90
- "@happyvertical/smrt-assets": "0.55.15",
91
- "@happyvertical/smrt-config": "0.55.15",
92
- "@happyvertical/smrt-core": "0.55.15",
93
- "@happyvertical/smrt-personas": "0.55.15",
94
- "@happyvertical/smrt-profiles": "0.55.15",
95
- "@happyvertical/smrt-reports": "0.55.15",
96
- "@happyvertical/smrt-tenancy": "0.55.15",
97
- "@happyvertical/smrt-types": "0.55.15",
98
- "@happyvertical/smrt-ui": "0.55.15",
99
- "@happyvertical/smrt-users": "0.55.15",
88
+ "@happyvertical/smrt-images": "0.55.17",
89
+ "@happyvertical/smrt-agents": "0.55.17",
90
+ "@happyvertical/smrt-assets": "0.55.17",
91
+ "@happyvertical/smrt-config": "0.55.17",
92
+ "@happyvertical/smrt-core": "0.55.17",
93
+ "@happyvertical/smrt-personas": "0.55.17",
94
+ "@happyvertical/smrt-profiles": "0.55.17",
95
+ "@happyvertical/smrt-reports": "0.55.17",
96
+ "@happyvertical/smrt-tenancy": "0.55.17",
97
+ "@happyvertical/smrt-types": "0.55.17",
98
+ "@happyvertical/smrt-ui": "0.55.17",
99
+ "@happyvertical/smrt-users": "0.55.17",
100
100
  "@happyvertical/sql": "^0.103.4",
101
101
  "@happyvertical/images": "^0.103.4",
102
102
  "gsap": "^3.13.0"
@@ -110,10 +110,10 @@
110
110
  }
111
111
  },
112
112
  "devDependencies": {
113
- "@happyvertical/smrt-playground": "0.55.15",
114
- "@happyvertical/smrt-scanner": "0.55.15",
115
- "@happyvertical/smrt-vitest": "0.55.15",
116
- "@happyvertical/smrt-web": "0.55.15",
113
+ "@happyvertical/smrt-playground": "0.55.17",
114
+ "@happyvertical/smrt-scanner": "0.55.17",
115
+ "@happyvertical/smrt-vitest": "0.55.17",
116
+ "@happyvertical/smrt-web": "0.55.17",
117
117
  "@mlc-ai/web-llm": "^0.2.85",
118
118
  "bitgpu": "0.19.1",
119
119
  "@sveltejs/kit": "2.69.1",