@happyvertical/smrt-chat 0.55.6 → 0.55.8

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.
@@ -18,6 +18,8 @@ import type {
18
18
  import type {
19
19
  DictationSourceProvider,
20
20
  DictationTranscribe,
21
+ HandsFreeCaptureFactory,
22
+ HandsFreeVadOptions,
21
23
  } from '@happyvertical/smrt-ui/forms';
22
24
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
23
25
  import { Button } from '@happyvertical/smrt-ui/ui';
@@ -103,6 +105,16 @@ export interface Props {
103
105
  surfaces?: DataSurfaceIdentity[];
104
106
  /** Whether the dock is currently visible; polling pauses while false. */
105
107
  visible?: boolean;
108
+ /** How the dock presents conversations. `multiple` (default) shows the
109
+ * conversation list and lets the person start new ones. `single` is for
110
+ * hosts where the person never needs to know about separate conversations:
111
+ * no list, no toggle, no choose/empty screens. On mount the dock reuses the
112
+ * transport's most recent thread, or creates one silently when there is
113
+ * none, and opens straight into the composer (focused while `visible`). A
114
+ * failure shows inline with a retry; a small icon-only "Clear
115
+ * conversation" action starts fresh when the transport can create
116
+ * threads. */
117
+ conversations?: 'multiple' | 'single';
106
118
  /** Whether the dock shows its "Conversations" toggle and thread list
107
119
  * (#3405). Default `true`. With `false` the dock is a single running
108
120
  * conversation: the message thread and the composer fill the full width, in
@@ -181,6 +193,21 @@ export interface Props {
181
193
  * speech (Firefox, Brave), e.g. smrt-ui's `createHttpTranscriber()`;
182
194
  * see `AssistantComposer`. */
183
195
  transcribe?: DictationTranscribe | null;
196
+ /** `'hands-free'` keeps the microphone on and writes each sentence down
197
+ * when the speaker pauses; see `AssistantComposer`. */
198
+ dictationMode?: 'push' | 'hands-free';
199
+ /** The hands-free microphone (`createHandsFreeCapture` from
200
+ * `@happyvertical/smrt-ui/forms/hands-free`); see `AssistantComposer`. */
201
+ handsFreeCapture?: HandsFreeCaptureFactory | null;
202
+ /** Pause length and sensitivity for hands-free; see `AssistantComposer`. */
203
+ handsFreeVad?: HandsFreeVadOptions;
204
+ /** Hands-free: send once the speaker stops talking; see `AssistantComposer`. */
205
+ sendOnPause?: boolean;
206
+ /** Quiet time before `sendOnPause` sends, in ms (default 1200). */
207
+ sendOnPauseMs?: number;
208
+ /** The reply is being read aloud: hands-free listening pauses meanwhile;
209
+ * see `AssistantComposer`. */
210
+ speaking?: boolean;
184
211
  }
185
212
 
186
213
  const {
@@ -190,6 +217,7 @@ const {
190
217
  actionClient,
191
218
  surfaces,
192
219
  visible = true,
220
+ conversations = 'multiple',
193
221
  threadList = true,
194
222
  toolCall,
195
223
  oncontroller,
@@ -207,6 +235,12 @@ const {
207
235
  choiceSources,
208
236
  dictation,
209
237
  transcribe,
238
+ dictationMode,
239
+ handsFreeCapture,
240
+ handsFreeVad,
241
+ sendOnPause = false,
242
+ sendOnPauseMs,
243
+ speaking = false,
210
244
  }: Props = $props();
211
245
  const { t } = useI18n();
212
246
 
@@ -372,6 +406,95 @@ async function openThreads() {
372
406
  threadsEl?.querySelector<HTMLElement>('.assistant-thread-list-item')?.focus();
373
407
  }
374
408
 
409
+ // Single-conversation mode: open straight into one conversation. Runs once
410
+ // per context (transport) after its thread list settles: reuse the most
411
+ // recent thread, else create one silently. Any failure is recorded on
412
+ // `controller.error`, shown inline in the conversation area with a retry.
413
+ let composerRef: { focus(): void } | undefined = $state();
414
+ let bootstrapTransport: AssistantTransport | null = null;
415
+ const SINGLE_THREAD_TITLE = 'Conversation';
416
+
417
+ function threadRecency(thread: {
418
+ lastMessageAt?: string | Date | null;
419
+ messageCount: number;
420
+ }) {
421
+ // A thread nobody has written to yet (just created, e.g. by "Clear
422
+ // conversation") is the newest; an undated thread with messages is oldest.
423
+ if (!thread.lastMessageAt) {
424
+ return thread.messageCount === 0
425
+ ? Number.POSITIVE_INFINITY
426
+ : Number.NEGATIVE_INFINITY;
427
+ }
428
+ const time = new Date(thread.lastMessageAt).getTime();
429
+ return Number.isNaN(time) ? Number.NEGATIVE_INFINITY : time;
430
+ }
431
+
432
+ function mostRecentThreadId(): string | undefined {
433
+ let best: { id: string; at: number } | undefined;
434
+ for (const thread of controller.threads) {
435
+ const at = threadRecency(thread);
436
+ // `>=` so that, among equals, the later-listed thread wins (transports
437
+ // list oldest first).
438
+ if (!best || at >= best.at) best = { id: thread.id, at };
439
+ }
440
+ return best?.id;
441
+ }
442
+
443
+ async function startConversation(fresh = false) {
444
+ const current = transport;
445
+ bootstrapTransport = current;
446
+ try {
447
+ let threadId = fresh ? undefined : mostRecentThreadId();
448
+ if (!threadId) {
449
+ if (!current.createThread) {
450
+ controller.setError(t(M['chat.assistant_dock.no_conversations']));
451
+ return;
452
+ }
453
+ threadId = (await controller.createThread(SINGLE_THREAD_TITLE)).id;
454
+ }
455
+ if (transport !== current) return;
456
+ await controller.openThread(threadId);
457
+ } catch {
458
+ // createThread already recorded the failure on controller.error.
459
+ } finally {
460
+ if (bootstrapTransport === current) bootstrapTransport = null;
461
+ }
462
+ }
463
+
464
+ async function retryConversation() {
465
+ controller.setError(null);
466
+ // Reload first: a failed list must not be mistaken for "no thread yet".
467
+ await controller.loadThreads();
468
+ // A successful load re-arms the effect below.
469
+ }
470
+
471
+ $effect(() => {
472
+ if (conversations !== 'single') return;
473
+ if (
474
+ controller.threadsLoading ||
475
+ controller.activeThreadId ||
476
+ controller.error
477
+ ) {
478
+ return;
479
+ }
480
+ if (bootstrapTransport === transport) return;
481
+ void untrack(() => startConversation());
482
+ });
483
+
484
+ // Focus the composer once the conversation is open and the dock is shown.
485
+ $effect(() => {
486
+ if (conversations !== 'single' || !visible || !controller.activeThreadId) {
487
+ return;
488
+ }
489
+ void tick().then(() => composerRef?.focus());
490
+ });
491
+
492
+ async function handleClearConversation() {
493
+ closeThreads();
494
+ controller.setError(null);
495
+ await startConversation(true);
496
+ }
497
+
375
498
  async function handleSelectThread(threadId: string) {
376
499
  closeThreads();
377
500
  // openThread() catches internally and records any failure on
@@ -462,7 +585,7 @@ async function handleConfirmAction(requestId: string) {
462
585
  class="assistant-dock-layout"
463
586
  data-threads-open={threadsOpen || undefined}
464
587
  >
465
- {#if threadList}
588
+ {#if conversations !== 'single' && threadList}
466
589
  <Button
467
590
  type="button"
468
591
  variant="ghost"
@@ -493,17 +616,41 @@ async function handleConfirmAction(requestId: string) {
493
616
  {#if controller.error}
494
617
  <p class="assistant-dock-error" role="alert">
495
618
  {t(M['chat.assistant_dock.error'], { message: controller.error })}
619
+ {#if conversations === 'single' && !controller.activeThreadId}
620
+ <Button
621
+ type="button"
622
+ size="sm"
623
+ variant="ghost"
624
+ onclick={retryConversation}
625
+ >
626
+ {t(M['chat.assistant_dock.retry_conversation'])}
627
+ </Button>
628
+ {/if}
496
629
  </p>
497
630
  {/if}
498
631
 
499
- {#if controller.status.state === 'working'}
500
- <div class="assistant-dock-status" role="status" aria-live="polite">
501
- <span class="assistant-dock-status-label">{controller.status.label}</span>
502
- {#if controller.status.cancellable}
503
- <Button type="button" size="sm" variant="ghost" onclick={() => controller.cancel()}>
504
- {t(M['chat.assistant_dock.stop'])}
505
- </Button>
506
- {/if}
632
+ {#if conversations === 'single' && controller.activeThreadId && transport.createThread && controller.messages.length > 0}
633
+ <div class="assistant-dock-single-actions">
634
+ <Button
635
+ type="button"
636
+ size="sm"
637
+ variant="ghost"
638
+ class="assistant-dock-clear"
639
+ onclick={handleClearConversation}
640
+ aria-label={t(M['chat.assistant_dock.clear_conversation'])}
641
+ title={t(M['chat.assistant_dock.clear_conversation'])}
642
+ >
643
+ <svg viewBox="0 0 20 20" width="18" height="18" aria-hidden="true">
644
+ <path
645
+ d="M4 6h12M8 6V4.5h4V6m-6.5 0l.7 9.5h7.6L15 6M8.5 9v4m3-4v4"
646
+ fill="none"
647
+ stroke="currentColor"
648
+ stroke-width="1.4"
649
+ stroke-linecap="round"
650
+ stroke-linejoin="round"
651
+ />
652
+ </svg>
653
+ </Button>
507
654
  </div>
508
655
  {/if}
509
656
 
@@ -514,7 +661,17 @@ async function handleConfirmAction(requestId: string) {
514
661
  {/if}
515
662
 
516
663
  <div class="assistant-dock-scroll">
517
- {#if !controller.activeThreadId && controller.threadsLoading}
664
+ {#if conversations === 'single'}
665
+ {#if !controller.activeThreadId && !controller.error}
666
+ <div
667
+ class="assistant-dock-thread-state assistant-dock-thread-loading"
668
+ role="status"
669
+ aria-label={t(M['chat.assistant_dock.opening_conversation'])}
670
+ >
671
+ <p>{t(M['chat.assistant_dock.opening_conversation'])}</p>
672
+ </div>
673
+ {/if}
674
+ {:else if !controller.activeThreadId && controller.threadsLoading}
518
675
  <div
519
676
  class="assistant-dock-thread-state assistant-dock-thread-loading"
520
677
  role="status"
@@ -565,7 +722,7 @@ async function handleConfirmAction(requestId: string) {
565
722
 
566
723
  <ul class="assistant-dock-messages">
567
724
  {#each controller.messages as message (message.id)}
568
- <li>
725
+ <li data-role={message.role}>
569
726
  <MessageBubble
570
727
  variant={bubbleVariant(message.role)}
571
728
  own={message.role === 'user'}
@@ -745,6 +902,17 @@ async function handleConfirmAction(requestId: string) {
745
902
  {/if}
746
903
  </div>
747
904
 
905
+ {#if controller.status.state === 'working'}
906
+ <div class="assistant-dock-status" role="status" aria-live="polite">
907
+ <span class="assistant-dock-status-label">{controller.status.label}</span>
908
+ {#if controller.status.cancellable}
909
+ <Button type="button" size="sm" variant="ghost" onclick={() => controller.cancel()}>
910
+ {t(M['chat.assistant_dock.stop'])}
911
+ </Button>
912
+ {/if}
913
+ </div>
914
+ {/if}
915
+
748
916
  <div class="assistant-dock-composer">
749
917
  {#if controller.models.length > 0}
750
918
  <div class="assistant-dock-composer-header">
@@ -757,6 +925,7 @@ async function handleConfirmAction(requestId: string) {
757
925
  {/if}
758
926
  {#key uploadContextEpoch}
759
927
  <AssistantComposer
928
+ bind:this={composerRef}
760
929
  bind:value={
761
930
  () => controller.draft, (text) => controller.setDraft(text)
762
931
  }
@@ -766,6 +935,12 @@ async function handleConfirmAction(requestId: string) {
766
935
  placeholder={composerPlaceholder}
767
936
  {dictation}
768
937
  {transcribe}
938
+ {dictationMode}
939
+ {handsFreeCapture}
940
+ {handsFreeVad}
941
+ {sendOnPause}
942
+ {sendOnPauseMs}
943
+ {speaking}
769
944
  />
770
945
  {/key}
771
946
  </div>
@@ -798,7 +973,7 @@ async function handleConfirmAction(requestId: string) {
798
973
  justify-content: space-between;
799
974
  gap: 0.5rem;
800
975
  padding: 0.35rem 0.75rem;
801
- border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c7c5);
976
+ border-top: 1px solid var(--smrt-color-outline-variant, #c4c7c5);
802
977
  font-size: var(--smrt-typography-body-medium-size, 0.85rem);
803
978
  color: var(--smrt-color-on-surface-variant, #44474e);
804
979
  }
@@ -945,6 +1120,44 @@ async function handleConfirmAction(requestId: string) {
945
1120
  gap: var(--smrt-spacing-2, 8px);
946
1121
  }
947
1122
 
1123
+ /* Narrow-dock friendly bubbles: the user's message sits right, the
1124
+ * assistant's left, each at most ~85% of the thread width in calm tokens. */
1125
+ .assistant-dock-messages > li {
1126
+ display: flex;
1127
+ flex-direction: column;
1128
+ min-width: 0;
1129
+ }
1130
+
1131
+ .assistant-dock-messages > li :global(.bubble),
1132
+ .assistant-dock-streaming :global(.bubble) {
1133
+ max-width: 85%;
1134
+ padding: var(--smrt-spacing-2, 8px) var(--smrt-spacing-3, 12px);
1135
+ border-radius: var(--smrt-radius-large, 12px);
1136
+ overflow-wrap: anywhere;
1137
+ }
1138
+
1139
+ .assistant-dock-messages > li[data-role='user'] :global(.bubble),
1140
+ .assistant-dock-messages > li[data-role='user'] :global(.bubble--own) {
1141
+ align-self: flex-end;
1142
+ background: var(--smrt-color-primary-container, #d8e2ff);
1143
+ color: var(--smrt-color-on-primary-container, #001a41);
1144
+ border-radius: var(--smrt-radius-large, 12px);
1145
+ }
1146
+
1147
+ .assistant-dock-messages > li:not([data-role='user']) :global(.bubble--agent),
1148
+ .assistant-dock-streaming :global(.bubble--agent) {
1149
+ align-self: flex-start;
1150
+ background: var(--smrt-color-surface-container, #f0f0f4);
1151
+ color: var(--smrt-color-on-surface, #1a1c1e);
1152
+ border-left: none;
1153
+ border-radius: var(--smrt-radius-large, 12px);
1154
+ }
1155
+
1156
+ .assistant-dock-streaming {
1157
+ display: flex;
1158
+ flex-direction: column;
1159
+ }
1160
+
948
1161
  .assistant-dock-thread-state {
949
1162
  flex: 1;
950
1163
  min-height: 10rem;
@@ -1081,6 +1294,12 @@ async function handleConfirmAction(requestId: string) {
1081
1294
  border-bottom: 1px solid var(--smrt-color-outline-variant, #c4c6cf);
1082
1295
  }
1083
1296
 
1297
+ .assistant-dock-single-actions {
1298
+ display: flex;
1299
+ justify-content: flex-end;
1300
+ padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-2, 8px) 0;
1301
+ }
1302
+
1084
1303
  .assistant-dock-composer-header {
1085
1304
  padding: 0 var(--smrt-spacing-2, 8px);
1086
1305
  padding-top: var(--smrt-spacing-2, 8px);
@@ -1,5 +1,5 @@
1
1
  import type { DataSurfaceActionRequest, DataSurfaceActionResult, DataSurfaceIdentity, DataSurfaceRegistry } from '@happyvertical/smrt-ui/data-surface';
2
- import type { DictationSourceProvider, DictationTranscribe } from '@happyvertical/smrt-ui/forms';
2
+ import type { DictationSourceProvider, DictationTranscribe, HandsFreeCaptureFactory, HandsFreeVadOptions } from '@happyvertical/smrt-ui/forms';
3
3
  import { type Snippet } from 'svelte';
4
4
  import type { AssistantStatus } from '../../../assistant-turn-events.js';
5
5
  import type { AssistantChoiceSourceRegistry } from './assistant-choices.svelte.js';
@@ -32,6 +32,16 @@ export interface Props {
32
32
  surfaces?: DataSurfaceIdentity[];
33
33
  /** Whether the dock is currently visible; polling pauses while false. */
34
34
  visible?: boolean;
35
+ /** How the dock presents conversations. `multiple` (default) shows the
36
+ * conversation list and lets the person start new ones. `single` is for
37
+ * hosts where the person never needs to know about separate conversations:
38
+ * no list, no toggle, no choose/empty screens. On mount the dock reuses the
39
+ * transport's most recent thread, or creates one silently when there is
40
+ * none, and opens straight into the composer (focused while `visible`). A
41
+ * failure shows inline with a retry; a small icon-only "Clear
42
+ * conversation" action starts fresh when the transport can create
43
+ * threads. */
44
+ conversations?: 'multiple' | 'single';
35
45
  /** Whether the dock shows its "Conversations" toggle and thread list
36
46
  * (#3405). Default `true`. With `false` the dock is a single running
37
47
  * conversation: the message thread and the composer fill the full width, in
@@ -104,6 +114,21 @@ export interface Props {
104
114
  * speech (Firefox, Brave), e.g. smrt-ui's `createHttpTranscriber()`;
105
115
  * see `AssistantComposer`. */
106
116
  transcribe?: DictationTranscribe | null;
117
+ /** `'hands-free'` keeps the microphone on and writes each sentence down
118
+ * when the speaker pauses; see `AssistantComposer`. */
119
+ dictationMode?: 'push' | 'hands-free';
120
+ /** The hands-free microphone (`createHandsFreeCapture` from
121
+ * `@happyvertical/smrt-ui/forms/hands-free`); see `AssistantComposer`. */
122
+ handsFreeCapture?: HandsFreeCaptureFactory | null;
123
+ /** Pause length and sensitivity for hands-free; see `AssistantComposer`. */
124
+ handsFreeVad?: HandsFreeVadOptions;
125
+ /** Hands-free: send once the speaker stops talking; see `AssistantComposer`. */
126
+ sendOnPause?: boolean;
127
+ /** Quiet time before `sendOnPause` sends, in ms (default 1200). */
128
+ sendOnPauseMs?: number;
129
+ /** The reply is being read aloud: hands-free listening pauses meanwhile;
130
+ * see `AssistantComposer`. */
131
+ speaking?: boolean;
107
132
  }
108
133
  declare const AssistantDock: import("svelte").Component<Props, {}, "">;
109
134
  type AssistantDock = ReturnType<typeof AssistantDock>;
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantDock.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/assistant/AssistantDock.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantDock.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/components/assistant/AssistantDock.svelte.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,9 @@ export declare const M: {
64
64
  readonly 'chat.assistant_dock.send_failed': "chat.assistant_dock.send_failed";
65
65
  readonly 'chat.assistant_dock.attachments': "chat.assistant_dock.attachments";
66
66
  readonly 'chat.assistant_dock.conversations_toggle': "chat.assistant_dock.conversations_toggle";
67
+ readonly 'chat.assistant_dock.opening_conversation': "chat.assistant_dock.opening_conversation";
68
+ readonly 'chat.assistant_dock.retry_conversation': "chat.assistant_dock.retry_conversation";
69
+ readonly 'chat.assistant_dock.clear_conversation': "chat.assistant_dock.clear_conversation";
67
70
  readonly 'chat.assistant_dock.action_outcome_unknown': "chat.assistant_dock.action_outcome_unknown";
68
71
  readonly 'chat.assistant_dock.action_check_again': "chat.assistant_dock.action_check_again";
69
72
  readonly 'chat.room_create_dialog.close': "chat.room_create_dialog.close";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuIZ,CAAC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IZ,CAAC"}
@@ -85,6 +85,10 @@ export const M = defineMessages({
85
85
  'chat.assistant_dock.send_failed': 'A message failed to send. You can retry it below.',
86
86
  'chat.assistant_dock.attachments': 'Attachments',
87
87
  'chat.assistant_dock.conversations_toggle': 'Conversations',
88
+ // Single-conversation mode
89
+ 'chat.assistant_dock.opening_conversation': 'Opening the assistant…',
90
+ 'chat.assistant_dock.retry_conversation': 'Try again',
91
+ 'chat.assistant_dock.clear_conversation': 'Clear conversation',
88
92
  'chat.assistant_dock.action_outcome_unknown': "We couldn't confirm whether this change was applied. Checking again is safe: it resends the same request, so the change can't be applied twice.",
89
93
  'chat.assistant_dock.action_check_again': 'Check again',
90
94
  // RoomCreateDialog
package/dist/sveltekit.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i as clientRequestMessageId, n as ChatService, t as ChatClientRequestConflictError } from "./chunks/ChatService-C9UxuJaw.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-Dq-tb26i.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-8MpyKbQ9.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
@@ -1 +1 @@
1
- {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../src/tool-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../src/tool-loop.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-chat",
3
- "version": "0.55.6",
3
+ "version": "0.55.8",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Chat rooms, DMs, threads, and agent conversations for the SMRT framework",
6
6
  "type": "module",
@@ -78,17 +78,18 @@
78
78
  "access": "public"
79
79
  },
80
80
  "dependencies": {
81
- "@happyvertical/ai": "^0.102.4",
82
- "@happyvertical/smrt-agents": "0.55.6",
83
- "@happyvertical/smrt-config": "0.55.6",
84
- "@happyvertical/smrt-core": "0.55.6",
85
- "@happyvertical/smrt-personas": "0.55.6",
86
- "@happyvertical/smrt-profiles": "0.55.6",
87
- "@happyvertical/smrt-tenancy": "0.55.6",
88
- "@happyvertical/smrt-types": "0.55.6",
89
- "@happyvertical/smrt-ui": "0.55.6",
90
- "@happyvertical/smrt-users": "0.55.6",
91
- "@happyvertical/sql": "^0.102.4"
81
+ "@happyvertical/ai": "^0.103.1",
82
+ "@happyvertical/smrt-agents": "0.55.8",
83
+ "@happyvertical/smrt-config": "0.55.8",
84
+ "@happyvertical/smrt-core": "0.55.8",
85
+ "@happyvertical/smrt-personas": "0.55.8",
86
+ "@happyvertical/smrt-profiles": "0.55.8",
87
+ "@happyvertical/smrt-reports": "0.55.8",
88
+ "@happyvertical/smrt-tenancy": "0.55.8",
89
+ "@happyvertical/smrt-types": "0.55.8",
90
+ "@happyvertical/smrt-ui": "0.55.8",
91
+ "@happyvertical/smrt-users": "0.55.8",
92
+ "@happyvertical/sql": "^0.103.1"
92
93
  },
93
94
  "peerDependencies": {
94
95
  "svelte": "^5.57.0"
@@ -99,9 +100,10 @@
99
100
  }
100
101
  },
101
102
  "devDependencies": {
102
- "@happyvertical/smrt-playground": "0.55.6",
103
- "@happyvertical/smrt-vitest": "0.55.6",
104
- "@happyvertical/smrt-web": "0.55.6",
103
+ "@happyvertical/smrt-playground": "0.55.8",
104
+ "@happyvertical/smrt-scanner": "0.55.8",
105
+ "@happyvertical/smrt-vitest": "0.55.8",
106
+ "@happyvertical/smrt-web": "0.55.8",
105
107
  "@mlc-ai/web-llm": "^0.2.85",
106
108
  "bitgpu": "0.19.1",
107
109
  "@sveltejs/kit": "2.69.1",