@meistrari/chat-nuxt 3.3.2 → 3.5.0

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 (55) hide show
  1. package/dist/module.d.mts +2 -1
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +1 -0
  4. package/dist/runtime/conversations/composables/conversations.d.ts +3 -2
  5. package/dist/runtime/conversations/composables/conversations.js +35 -3
  6. package/dist/runtime/embed/components/chat-embed-inner.vue +61 -8
  7. package/dist/runtime/embed/components/chat-embed.d.vue.ts +3 -0
  8. package/dist/runtime/embed/components/chat-embed.vue +5 -1
  9. package/dist/runtime/embed/components/chat-embed.vue.d.ts +3 -0
  10. package/dist/runtime/embed/components/meistrari-chat-embed.d.vue.ts +7 -1
  11. package/dist/runtime/embed/components/meistrari-chat-embed.vue +3 -1
  12. package/dist/runtime/embed/components/meistrari-chat-embed.vue.d.ts +7 -1
  13. package/dist/runtime/embed/components/mobile/chat-mobile-shell.d.vue.ts +12 -3
  14. package/dist/runtime/embed/components/mobile/chat-mobile-shell.vue +6 -0
  15. package/dist/runtime/embed/components/mobile/chat-mobile-shell.vue.d.ts +12 -3
  16. package/dist/runtime/embed/composables/tela-agent-metadata.d.ts +2 -2
  17. package/dist/runtime/messages/components/chat-message-input.d.vue.ts +13 -4
  18. package/dist/runtime/messages/components/chat-message-input.vue +33 -0
  19. package/dist/runtime/messages/components/chat-message-input.vue.d.ts +13 -4
  20. package/dist/runtime/messages/components/chat-model-selector.d.vue.ts +14 -0
  21. package/dist/runtime/messages/components/chat-model-selector.vue +56 -0
  22. package/dist/runtime/messages/components/chat-model-selector.vue.d.ts +14 -0
  23. package/dist/runtime/messages/composables/chat-message-terminal.d.ts +17 -0
  24. package/dist/runtime/messages/composables/chat-message-terminal.js +42 -0
  25. package/dist/runtime/messages/composables/chat.d.ts +5 -0
  26. package/dist/runtime/messages/composables/chat.js +31 -4
  27. package/dist/runtime/messages/composables/mention-autocomplete.js +8 -2
  28. package/dist/runtime/shared/components/icons/anthropic.vue +1 -1
  29. package/dist/runtime/shared/components/icons/gemini.d.vue.ts +3 -0
  30. package/dist/runtime/shared/components/icons/gemini.vue +3 -0
  31. package/dist/runtime/shared/components/icons/gemini.vue.d.ts +3 -0
  32. package/dist/runtime/shared/components/icons/openai.d.vue.ts +3 -0
  33. package/dist/runtime/shared/components/icons/openai.vue +3 -0
  34. package/dist/runtime/shared/components/icons/openai.vue.d.ts +3 -0
  35. package/dist/runtime/types/embed.d.ts +3 -0
  36. package/dist/runtime/types/embed.js +1 -0
  37. package/dist/runtime/types/schemas/chat/conversations.d.ts +37 -1
  38. package/dist/runtime/types/schemas/chat/conversations.js +10 -1
  39. package/dist/runtime/types/schemas/chat/files.d.ts +3 -3
  40. package/dist/runtime/types/schemas/chat/messages.d.ts +31 -0
  41. package/dist/runtime/types/schemas/chat/messages.js +24 -0
  42. package/dist/runtime/types/schemas/chat/models.d.ts +4 -6
  43. package/dist/runtime/types/schemas/chat/models.js +3 -5
  44. package/dist/runtime/types/schemas/chat/ui.d.ts +50 -17
  45. package/dist/runtime/types/schemas/chat/ui.js +8 -5
  46. package/dist/runtime/types/schemas/chat/usage.d.ts +1 -1
  47. package/dist/runtime/types/schemas/chat/workspace-agent.d.ts +14 -0
  48. package/dist/runtime/types/schemas/chat/workspace-agent.js +7 -0
  49. package/dist/runtime/types/schemas/integrations/agent-api.d.ts +1 -1
  50. package/dist/runtime/types/schemas/integrations/tela-agent-api.d.ts +68 -6
  51. package/dist/runtime/types/schemas/integrations/tela-agent-api.js +18 -0
  52. package/dist/runtime/workspace/composables/workspace-agent-summary.d.ts +6 -0
  53. package/dist/runtime/workspace/composables/workspace-agent-summary.js +54 -0
  54. package/dist/types.d.mts +3 -1
  55. package/package.json +1 -1
package/dist/module.d.mts CHANGED
@@ -1,4 +1,5 @@
1
- export { ChatActionPayload, ChatActor, ChatEmbedSharedProps, ChatFeatureConfig, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, MessageFeedbackConfig, MessageFeedbackPayload, MessageFeedbackRating, TelaAgentChatEmbedProps, TelaAgentExecutionInput } from '../dist/runtime/types/embed.js';
1
+ export { ChatMessageStatus } from '../dist/runtime/messages/composables/chat-message-terminal.js';
2
+ export { ChatActionPayload, ChatActor, ChatEmbedSharedProps, ChatFeatureConfig, ChatMessageTerminalPayload, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, MessageFeedbackConfig, MessageFeedbackPayload, MessageFeedbackRating, MessageOverviewResponse, TelaAgentChatEmbedProps, TelaAgentExecutionInput } from '../dist/runtime/types/embed.js';
2
3
 
3
4
  type ChatNuxtConfigValidationMode = false | 'warn' | 'error';
4
5
 
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meistrari/chat-nuxt",
3
3
  "configKey": "chatNuxt",
4
- "version": "3.3.2",
4
+ "version": "3.5.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, mkdirSync, symlinkSync } from 'node:fs';
2
2
  import { createRequire } from 'node:module';
3
3
  import { join, dirname } from 'node:path';
4
4
  import { defineNuxtModule, createResolver, addTemplate, addTypeTemplate, addPlugin, addImportsDir, addComponent, addComponentsDir } from 'nuxt/kit';
5
+ export { ChatMessageStatus } from '../dist/runtime/messages/composables/chat-message-terminal.js';
5
6
 
6
7
  const localRequire = createRequire(import.meta.url);
7
8
  const runtimeAliasPackages = [
@@ -1,5 +1,5 @@
1
1
  import type { DeepReadonly } from 'vue';
2
- import type { Conversation, ConversationWithMessages } from '../../types/schemas/chat/conversations.js';
2
+ import type { Conversation, ConversationWithMessages, CreateConversationRequest } from '../../types/schemas/chat/conversations.js';
3
3
  export declare function mergeFetchedConversations(fetchedConversations: Conversation[], localConversations: readonly Conversation[], deletedConversationIds?: readonly string[], locallyMutatedConversationIds?: readonly string[]): Conversation[];
4
4
  export declare function useConversations(): {
5
5
  conversations: any;
@@ -8,9 +8,10 @@ export declare function useConversations(): {
8
8
  fetchConversations: (options?: {
9
9
  force?: boolean;
10
10
  }) => Promise<void>;
11
- createConversation: () => Promise<Conversation | null>;
11
+ createConversation: (input?: CreateConversationRequest) => Promise<Conversation | null>;
12
12
  deleteConversation: (id: string) => Promise<boolean>;
13
13
  renameConversation: (id: string, title: string) => Promise<boolean>;
14
+ updateConversationModel: (id: string, model: string | null) => Promise<boolean>;
14
15
  moveConversationToGroup: (id: string, groupId: string | null) => Promise<boolean>;
15
16
  duplicateConversation: (id: string) => Promise<ConversationWithMessages | null>;
16
17
  conversationCreatorFilter: any;
@@ -291,7 +291,7 @@ export function useConversations() {
291
291
  setBucketValue(loadingBuckets, requestScope, false);
292
292
  }
293
293
  };
294
- const createConversation = async () => {
294
+ const createConversation = async (input) => {
295
295
  error.value = null;
296
296
  const requestRuntimeScope = runtimeScope.value;
297
297
  const metadataSnapshot = snapshotConversationMetadata(requestRuntimeScope);
@@ -303,7 +303,7 @@ export function useConversations() {
303
303
  userId: authUser.value?.id ?? "",
304
304
  title: "Nova conversa",
305
305
  threadSessionId: null,
306
- model: null,
306
+ model: input?.model ?? null,
307
307
  appliedSettingsAt: null,
308
308
  appliedSettingsSnapshot: null,
309
309
  telaAgentId: embedConfig?.telaAgentId.value ?? null,
@@ -315,10 +315,15 @@ export function useConversations() {
315
315
  upsertConversationInLoadedBuckets(optimisticConversation, requestRuntimeScope);
316
316
  updateConversationCounts(requestRuntimeScope, optimisticConversation, 1);
317
317
  try {
318
+ const body = {
319
+ ...input?.model !== void 0 ? { model: input.model } : {},
320
+ ...input?.agentInputs !== void 0 ? { agentInputs: input.agentInputs } : {}
321
+ };
318
322
  const conversation = await $fetch(
319
323
  chatApi.path("/conversations"),
320
324
  chatApi.withChatHeaders({
321
- method: "POST"
325
+ method: "POST",
326
+ body: Object.keys(body).length > 0 ? body : void 0
322
327
  })
323
328
  );
324
329
  upsertConversationInLoadedBuckets(conversation, requestRuntimeScope, optimisticConversation.id);
@@ -440,6 +445,32 @@ export function useConversations() {
440
445
  return false;
441
446
  }
442
447
  };
448
+ const updateConversationModel = async (id, model) => {
449
+ error.value = null;
450
+ const requestRuntimeScope = runtimeScope.value;
451
+ const affectedScopes = activeAndLoadedRuntimeConversationScopes(requestRuntimeScope);
452
+ const conversationSnapshot = snapshotConversationBuckets(affectedScopes);
453
+ const conversation = findConversationInLoadedBuckets(id, requestRuntimeScope);
454
+ if (conversation)
455
+ updateConversationInLoadedBuckets({ ...conversation, model, updatedAt: /* @__PURE__ */ new Date() }, requestRuntimeScope);
456
+ try {
457
+ const updated = await $fetch(
458
+ chatApi.path(`/conversations/${id}`),
459
+ chatApi.withChatHeaders({
460
+ method: "PATCH",
461
+ body: { model }
462
+ })
463
+ );
464
+ updateConversationInLoadedBuckets(updated, requestRuntimeScope);
465
+ return true;
466
+ } catch (err) {
467
+ restoreConversationBuckets(conversationSnapshot, id);
468
+ const message = err instanceof Error ? err.message : "Erro ao atualizar modelo da conversa";
469
+ error.value = message;
470
+ Sentry.captureException(err);
471
+ return false;
472
+ }
473
+ };
443
474
  const duplicateConversation = async (id) => {
444
475
  error.value = null;
445
476
  const statusToast = useStatusToast();
@@ -476,6 +507,7 @@ export function useConversations() {
476
507
  createConversation,
477
508
  deleteConversation,
478
509
  renameConversation,
510
+ updateConversationModel,
479
511
  moveConversationToGroup,
480
512
  duplicateConversation,
481
513
  conversationCreatorFilter,
@@ -8,7 +8,7 @@ import ChatMobileShell from "./mobile/chat-mobile-shell.vue";
8
8
  import { normalizeConversationId } from "../../conversations/scope";
9
9
  import { resolveChatFeatures } from "../feature-config";
10
10
  import { resolveConversationCreator } from "../../conversations/creator";
11
- import { useChat } from "../../messages/composables/chat";
11
+ import { resolveTelaAgentInputs, useChat } from "../../messages/composables/chat";
12
12
  import { useChatAction } from "../../messages/composables/chat-action";
13
13
  import { useChatApi } from "../../shared/composables/chat-api";
14
14
  import { useConversationFiles } from "../../files/composables/conversation-files";
@@ -20,6 +20,7 @@ import { useFilePreviewPanel } from "../../files/composables/file-preview-panel"
20
20
  import { usePendingConversationGroup } from "../../conversations/composables/pending-conversation-group";
21
21
  import { useStatusToast } from "../../shared/composables/status-toast";
22
22
  import { useTelaAgentMetadata } from "../composables/tela-agent-metadata";
23
+ import { useWorkspaceAgentSummary } from "../../workspace/composables/workspace-agent-summary";
23
24
  import { useWorkspaceMembers } from "../../workspace/composables/workspace-members";
24
25
  import { useWorkspaceSettings } from "../../workspace/composables/workspace-settings";
25
26
  import { useWorkspaceSwitchModal } from "../../workspace/composables/workspace-switch-modal";
@@ -52,15 +53,26 @@ const chatAction = useChatAction();
52
53
  const { user: authUser, activeOrganization, logout } = useChatAuth();
53
54
  const { getMember, getMemberImage } = useWorkspaceMembers();
54
55
  const statusToast = useStatusToast();
55
- const { conversations, loading: conversationsLoading, fetchConversations, createConversation, deleteConversation, renameConversation, duplicateConversation, moveConversationToGroup, updateConversationInList } = useConversations();
56
+ const { conversations, loading: conversationsLoading, fetchConversations, createConversation, deleteConversation, renameConversation, updateConversationModel, duplicateConversation, moveConversationToGroup, updateConversationInList } = useConversations();
56
57
  const { settings: workspaceSettingsState, fetchSettings } = useWorkspaceSettings();
57
58
  const { metadata: telaAgentMetadata, loading: telaAgentMetadataLoading, fetchAgentMetadata } = useTelaAgentMetadata();
59
+ const { summary: workspaceAgentSummary, fetchSummary: fetchWorkspaceAgentSummary } = useWorkspaceAgentSummary();
58
60
  const isTelaAgentMode = computed(() => !!embedConfig?.telaAgentId.value);
59
61
  const hasConfiguredTelaAgentInputs = computed(() => embedConfig?.telaAgentInputs?.value !== void 0 && embedConfig?.telaAgentInputs?.value !== null);
60
- const shouldLoadTelaAgentMetadata = computed(() => isTelaAgentMode.value && !hasConfiguredTelaAgentInputs.value);
62
+ const shouldLoadTelaAgentMetadata = computed(() => isTelaAgentMode.value);
61
63
  const telaAgentInputSchema = computed(
62
64
  () => hasConfiguredTelaAgentInputs.value ? null : isTelaAgentMode.value ? telaAgentMetadata.value?.inputSchema ?? [] : null
63
65
  );
66
+ const agentSkills = computed(() => {
67
+ if (isTelaAgentMode.value)
68
+ return telaAgentMetadata.value?.skills ?? [];
69
+ return workspaceAgentSummary.value?.skills ?? [];
70
+ });
71
+ const agentContextFiles = computed(() => {
72
+ if (isTelaAgentMode.value)
73
+ return telaAgentMetadata.value?.contextFiles ?? [];
74
+ return workspaceAgentSummary.value?.contextFiles ?? [];
75
+ });
64
76
  const effectiveWorkspaceSettings = computed(() => {
65
77
  if (isTelaAgentMode.value)
66
78
  return void 0;
@@ -100,6 +112,8 @@ const {
100
112
  hasPendingMessage,
101
113
  loadConversation,
102
114
  setConversation,
115
+ setConversationModel,
116
+ pendingModelSelection,
103
117
  sendMessage,
104
118
  retryMessage,
105
119
  cancelConversation,
@@ -108,6 +122,21 @@ const {
108
122
  } = useChat();
109
123
  const conversationIdRef = computed(() => currentConversation.value?.id ?? null);
110
124
  const { total, files: conversationFiles } = useConversationFiles(conversationIdRef);
125
+ const selectedModel = computed({
126
+ get: () => currentConversation.value ? currentConversation.value.model : pendingModelSelection.value,
127
+ set: (value) => {
128
+ pendingModelSelection.value = value;
129
+ const conversation = currentConversation.value;
130
+ if (conversation && conversation.model !== value) {
131
+ const previousModel = conversation.model;
132
+ setConversationModel(value);
133
+ void updateConversationModel(conversation.id, value).then((updated) => {
134
+ if (!updated && currentConversation.value?.id === conversation.id && currentConversation.value.model === value)
135
+ setConversationModel(previousModel);
136
+ });
137
+ }
138
+ }
139
+ });
111
140
  const filesCount = computed(() => total.value);
112
141
  const hasMessages = computed(() => messages.value.length > 0);
113
142
  const mobilePreviewFile = computed(() => {
@@ -124,7 +153,7 @@ const mobilePreviewFile = computed(() => {
124
153
  };
125
154
  });
126
155
  const visibleTelaAgentInputSchema = computed(() => !hasMessages.value ? telaAgentInputSchema.value : null);
127
- const visibleTelaAgentInputSchemaLoading = computed(() => !hasMessages.value && shouldLoadTelaAgentMetadata.value && telaAgentMetadataLoading.value);
156
+ const visibleTelaAgentInputSchemaLoading = computed(() => !hasMessages.value && isTelaAgentMode.value && !hasConfiguredTelaAgentInputs.value && telaAgentMetadataLoading.value);
128
157
  const visibleConversations = computed(
129
158
  () => conversations.value.filter((conversation) => conversation.title || conversation.id === activeConversationId.value)
130
159
  );
@@ -211,8 +240,11 @@ onMounted(async () => {
211
240
  void fetchConversations();
212
241
  if (shouldLoadTelaAgentMetadata.value) {
213
242
  void fetchAgentMetadata();
214
- } else if (!effectiveWorkspaceSettings.value) {
215
- void fetchSettings();
243
+ } else {
244
+ void fetchWorkspaceAgentSummary();
245
+ if (!effectiveWorkspaceSettings.value) {
246
+ void fetchSettings();
247
+ }
216
248
  }
217
249
  isReady.value = true;
218
250
  if (activeConversationId.value) {
@@ -295,8 +327,12 @@ const conversationCreator = computed(
295
327
  );
296
328
  async function handleSend(content, files, agentInputs) {
297
329
  let createdConversationId = null;
330
+ const resolvedAgentInputs = resolveTelaAgentInputs(agentInputs, embedConfig?.telaAgentInputs?.value);
298
331
  if (!activeConversationId.value || !currentConversation.value) {
299
- const conversation = await createConversation();
332
+ const conversation = await createConversation({
333
+ model: selectedModel.value,
334
+ ...resolvedAgentInputs !== void 0 ? { agentInputs: resolvedAgentInputs } : {}
335
+ });
300
336
  if (!conversation)
301
337
  return;
302
338
  const groupId = pendingConversationGroupId.value;
@@ -311,7 +347,7 @@ async function handleSend(content, files, agentInputs) {
311
347
  }
312
348
  if (!currentConversation.value)
313
349
  return;
314
- const sendPromise = sendMessage(content, files.length > 0 ? files : void 0, agentInputs);
350
+ const sendPromise = sendMessage(content, files.length > 0 ? files : void 0, resolvedAgentInputs);
315
351
  if (createdConversationId) {
316
352
  updateConversationId(createdConversationId);
317
353
  }
@@ -520,6 +556,7 @@ async function handleDelete() {
520
556
  v-if="isMobile"
521
557
  v-model:drawer-open="drawerOpen"
522
558
  v-model:edit-title="editTitle"
559
+ v-model:selected-model="selectedModel"
523
560
  v-model:workspace-sheet-open="workspaceSheetOpen"
524
561
  :current-conversation="currentConversation"
525
562
  :display-title="displayTitle"
@@ -541,6 +578,8 @@ async function handleDelete() {
541
578
  :messages="messages"
542
579
  :agent-input-schema="visibleTelaAgentInputSchema"
543
580
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
581
+ :agent-skills="agentSkills"
582
+ :agent-context-files="agentContextFiles"
544
583
  :show-cancel-button="resolvedFeatures.showCancelButton"
545
584
  :show-debug-option="resolvedFeatures.showDebugOption"
546
585
  :show-outdated-badge="showOutdatedBadge"
@@ -573,6 +612,7 @@ async function handleDelete() {
573
612
  loading
574
613
  />
575
614
  <ChatMessageInput
615
+ v-model:selected-model="selectedModel"
576
616
  :disabled="true"
577
617
  :agent-input-schema="visibleTelaAgentInputSchema"
578
618
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
@@ -595,6 +635,7 @@ async function handleDelete() {
595
635
  </div>
596
636
  <ChatMessageInput
597
637
  ref="messageInputRef"
638
+ v-model:selected-model="selectedModel"
598
639
  :disabled="hasPendingMessage"
599
640
  :loading="hasPendingMessage"
600
641
  :creator-name="currentUser?.name ?? void 0"
@@ -605,6 +646,8 @@ async function handleDelete() {
605
646
  :workspace-settings="effectiveWorkspaceSettings"
606
647
  :agent-input-schema="visibleTelaAgentInputSchema"
607
648
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
649
+ :agent-skills="agentSkills"
650
+ :agent-context-files="agentContextFiles"
608
651
  :show-cancel-button="resolvedFeatures.showCancelButton"
609
652
  centered
610
653
  @send="handleSend"
@@ -619,6 +662,7 @@ async function handleDelete() {
619
662
  />
620
663
  <ChatMessageInput
621
664
  ref="messageInputRef"
665
+ v-model:selected-model="selectedModel"
622
666
  :disabled="hasPendingMessage"
623
667
  :loading="hasPendingMessage"
624
668
  :creator-name="currentUser?.name ?? void 0"
@@ -629,6 +673,8 @@ async function handleDelete() {
629
673
  :workspace-settings="effectiveWorkspaceSettings"
630
674
  :agent-input-schema="visibleTelaAgentInputSchema"
631
675
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
676
+ :agent-skills="agentSkills"
677
+ :agent-context-files="agentContextFiles"
632
678
  :show-cancel-button="resolvedFeatures.showCancelButton"
633
679
  has-disclaimer
634
680
  @send="handleSend"
@@ -718,6 +764,7 @@ async function handleDelete() {
718
764
  loading
719
765
  />
720
766
  <ChatMessageInput
767
+ v-model:selected-model="selectedModel"
721
768
  :disabled="true"
722
769
  :agent-input-schema="visibleTelaAgentInputSchema"
723
770
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
@@ -740,6 +787,7 @@ async function handleDelete() {
740
787
  </div>
741
788
  <ChatMessageInput
742
789
  ref="messageInputRef"
790
+ v-model:selected-model="selectedModel"
743
791
  :disabled="hasPendingMessage"
744
792
  :loading="hasPendingMessage"
745
793
  :creator-name="currentUser?.name ?? void 0"
@@ -750,6 +798,8 @@ async function handleDelete() {
750
798
  :workspace-settings="effectiveWorkspaceSettings"
751
799
  :agent-input-schema="visibleTelaAgentInputSchema"
752
800
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
801
+ :agent-skills="agentSkills"
802
+ :agent-context-files="agentContextFiles"
753
803
  :show-cancel-button="resolvedFeatures.showCancelButton"
754
804
  centered
755
805
  @send="handleSend"
@@ -765,6 +815,7 @@ async function handleDelete() {
765
815
  />
766
816
  <ChatMessageInput
767
817
  ref="messageInputRef"
818
+ v-model:selected-model="selectedModel"
768
819
  :disabled="hasPendingMessage"
769
820
  :loading="hasPendingMessage"
770
821
  :creator-name="currentUser?.name ?? void 0"
@@ -775,6 +826,8 @@ async function handleDelete() {
775
826
  :workspace-settings="effectiveWorkspaceSettings"
776
827
  :agent-input-schema="visibleTelaAgentInputSchema"
777
828
  :agent-input-schema-loading="visibleTelaAgentInputSchemaLoading"
829
+ :agent-skills="agentSkills"
830
+ :agent-context-files="agentContextFiles"
778
831
  :show-cancel-button="resolvedFeatures.showCancelButton"
779
832
  has-disclaimer
780
833
  @send="handleSend"
@@ -1,5 +1,6 @@
1
1
  import { type ChatActionPayload } from '../../messages/composables/chat-action.js';
2
2
  import { type MessageFeedbackPayload } from '../../messages/composables/chat-feedback.js';
3
+ import { type ChatMessageTerminalPayload } from '../../messages/composables/chat-message-terminal.js';
3
4
  declare var __VLS_11: {};
4
5
  type __VLS_Slots = {} & {
5
6
  'sidebar-bottom'?: (props: typeof __VLS_11) => any;
@@ -8,10 +9,12 @@ declare const __VLS_base: import("vue").DefineComponent<import("../types.js").De
8
9
  "update:conversationId": (value: string | null) => any;
9
10
  messageFeedback: (payload: MessageFeedbackPayload) => any;
10
11
  action: (payload: ChatActionPayload) => any;
12
+ messageTerminal: (payload: ChatMessageTerminalPayload) => any;
11
13
  }, string, import("vue").PublicProps, Readonly<import("../types.js").DefaultChatEmbedProps | import("../types.js").TelaAgentChatEmbedProps> & Readonly<{
12
14
  "onUpdate:conversationId"?: ((value: string | null) => any) | undefined;
13
15
  onMessageFeedback?: ((payload: MessageFeedbackPayload) => any) | undefined;
14
16
  onAction?: ((payload: ChatActionPayload) => any) | undefined;
17
+ onMessageTerminal?: ((payload: ChatMessageTerminalPayload) => any) | undefined;
15
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
19
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
20
  declare const _default: typeof __VLS_export;
@@ -2,6 +2,7 @@
2
2
  import { useChatAuth } from "#chat-auth";
3
3
  import { provideChatAction } from "../../messages/composables/chat-action";
4
4
  import { provideMessageFeedback } from "../../messages/composables/chat-feedback";
5
+ import { provideChatMessageTerminal } from "../../messages/composables/chat-message-terminal";
5
6
  import { provideChatRequestContext } from "../../shared/composables/chat-request-context";
6
7
  import { provideEmbedConfig, useEmbedConfig } from "../composables/embed-config";
7
8
  import { normalizeConversationScope, normalizeTelaAgentId, resolveConversationScopeKeySegment } from "../../conversations/scope";
@@ -26,7 +27,7 @@ const props = defineProps({
26
27
  user: { type: null, required: false },
27
28
  features: { type: Object, required: false }
28
29
  });
29
- const emit = defineEmits(["update:conversationId", "action", "messageFeedback"]);
30
+ const emit = defineEmits(["update:conversationId", "action", "messageFeedback", "messageTerminal"]);
30
31
  const parentEmbedConfig = useEmbedConfig();
31
32
  const { activeOrganization } = useChatAuth();
32
33
  const workspaceId = computed(() => activeOrganization.value?.id?.trim() ?? "");
@@ -80,6 +81,9 @@ provideChatAction((payload) => {
80
81
  provideMessageFeedback((payload) => {
81
82
  emit("messageFeedback", payload);
82
83
  });
84
+ provideChatMessageTerminal((payload) => {
85
+ emit("messageTerminal", payload);
86
+ });
83
87
  </script>
84
88
 
85
89
  <template>
@@ -1,5 +1,6 @@
1
1
  import { type ChatActionPayload } from '../../messages/composables/chat-action.js';
2
2
  import { type MessageFeedbackPayload } from '../../messages/composables/chat-feedback.js';
3
+ import { type ChatMessageTerminalPayload } from '../../messages/composables/chat-message-terminal.js';
3
4
  declare var __VLS_11: {};
4
5
  type __VLS_Slots = {} & {
5
6
  'sidebar-bottom'?: (props: typeof __VLS_11) => any;
@@ -8,10 +9,12 @@ declare const __VLS_base: import("vue").DefineComponent<import("../types.js").De
8
9
  "update:conversationId": (value: string | null) => any;
9
10
  messageFeedback: (payload: MessageFeedbackPayload) => any;
10
11
  action: (payload: ChatActionPayload) => any;
12
+ messageTerminal: (payload: ChatMessageTerminalPayload) => any;
11
13
  }, string, import("vue").PublicProps, Readonly<import("../types.js").DefaultChatEmbedProps | import("../types.js").TelaAgentChatEmbedProps> & Readonly<{
12
14
  "onUpdate:conversationId"?: ((value: string | null) => any) | undefined;
13
15
  onMessageFeedback?: ((payload: MessageFeedbackPayload) => any) | undefined;
14
16
  onAction?: ((payload: ChatActionPayload) => any) | undefined;
17
+ onMessageTerminal?: ((payload: ChatMessageTerminalPayload) => any) | undefined;
15
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
19
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
20
  declare const _default: typeof __VLS_export;
@@ -1,5 +1,7 @@
1
1
  import type { DefineSetupFnComponent, SlotsType } from 'vue';
2
2
  import type { ChatActionPayload } from '../../messages/composables/chat-action.js';
3
+ import type { MessageFeedbackPayload } from '../../messages/composables/chat-feedback.js';
4
+ import type { ChatMessageTerminalPayload } from '../../messages/composables/chat-message-terminal.js';
3
5
  import type { ChatFeatureConfig } from '../feature-config.js';
4
6
  import type { ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, TelaAgentChatEmbedProps } from '../types.js';
5
7
 
@@ -8,6 +10,10 @@ type MeistrariChatEmbedEmits = {
8
10
  'update:conversationId': (value: string | null) => any;
9
11
  /** Fired when an assistant message triggers a host-handled action. */
10
12
  'action': (payload: ChatActionPayload) => any;
13
+ /** Fired when a user submits feedback for an assistant message. */
14
+ 'messageFeedback': (payload: MessageFeedbackPayload) => any;
15
+ /** Fired after polling observes an assistant message reach a terminal status. */
16
+ 'messageTerminal': (payload: ChatMessageTerminalPayload) => any;
11
17
  };
12
18
 
13
19
  type MeistrariChatEmbedSlots = SlotsType<{
@@ -44,4 +50,4 @@ type MeistrariChatEmbedSlots = SlotsType<{
44
50
  declare const MeistrariChatEmbed: DefineSetupFnComponent<MeistrariChatEmbedProps, MeistrariChatEmbedEmits, MeistrariChatEmbedSlots>;
45
51
 
46
52
  export default MeistrariChatEmbed;
47
- export type { ChatActionPayload, ChatFeatureConfig, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, TelaAgentChatEmbedProps };
53
+ export type { ChatActionPayload, ChatFeatureConfig, ChatMessageTerminalPayload, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, MessageFeedbackPayload, TelaAgentChatEmbedProps };
@@ -20,7 +20,7 @@ const props = defineProps({
20
20
  user: { type: null, required: false },
21
21
  features: { type: Object, required: false }
22
22
  });
23
- defineEmits(["update:conversationId", "action", "messageFeedback"]);
23
+ defineEmits(["update:conversationId", "action", "messageFeedback", "messageTerminal"]);
24
24
  defineSlots();
25
25
  const hideSettings = computed(() => props.hideSettings ?? false);
26
26
  </script>
@@ -47,6 +47,7 @@ const hideSettings = computed(() => props.hideSettings ?? false);
47
47
  @update:conversation-id="$emit('update:conversationId', $event)"
48
48
  @action="$emit('action', $event)"
49
49
  @message-feedback="$emit('messageFeedback', $event)"
50
+ @message-terminal="$emit('messageTerminal', $event)"
50
51
  >
51
52
  <template v-if="$slots['sidebar-bottom']" #sidebar-bottom>
52
53
  <slot name="sidebar-bottom" />
@@ -73,6 +74,7 @@ const hideSettings = computed(() => props.hideSettings ?? false);
73
74
  @update:conversation-id="$emit('update:conversationId', $event)"
74
75
  @action="$emit('action', $event)"
75
76
  @message-feedback="$emit('messageFeedback', $event)"
77
+ @message-terminal="$emit('messageTerminal', $event)"
76
78
  >
77
79
  <template v-if="$slots['sidebar-bottom']" #sidebar-bottom>
78
80
  <slot name="sidebar-bottom" />
@@ -1,5 +1,7 @@
1
1
  import type { DefineSetupFnComponent, SlotsType } from 'vue';
2
2
  import type { ChatActionPayload } from '../../messages/composables/chat-action.js';
3
+ import type { MessageFeedbackPayload } from '../../messages/composables/chat-feedback.js';
4
+ import type { ChatMessageTerminalPayload } from '../../messages/composables/chat-message-terminal.js';
3
5
  import type { ChatFeatureConfig } from '../feature-config.js';
4
6
  import type { ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, TelaAgentChatEmbedProps } from '../types.js';
5
7
 
@@ -8,6 +10,10 @@ type MeistrariChatEmbedEmits = {
8
10
  'update:conversationId': (value: string | null) => any;
9
11
  /** Fired when an assistant message triggers a host-handled action. */
10
12
  'action': (payload: ChatActionPayload) => any;
13
+ /** Fired when a user submits feedback for an assistant message. */
14
+ 'messageFeedback': (payload: MessageFeedbackPayload) => any;
15
+ /** Fired after polling observes an assistant message reach a terminal status. */
16
+ 'messageTerminal': (payload: ChatMessageTerminalPayload) => any;
11
17
  };
12
18
 
13
19
  type MeistrariChatEmbedSlots = SlotsType<{
@@ -44,4 +50,4 @@ type MeistrariChatEmbedSlots = SlotsType<{
44
50
  declare const MeistrariChatEmbed: DefineSetupFnComponent<MeistrariChatEmbedProps, MeistrariChatEmbedEmits, MeistrariChatEmbedSlots>;
45
51
 
46
52
  export default MeistrariChatEmbed;
47
- export type { ChatActionPayload, ChatFeatureConfig, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, TelaAgentChatEmbedProps };
53
+ export type { ChatActionPayload, ChatFeatureConfig, ChatMessageTerminalPayload, ChatSidebarConfig, DefaultChatEmbedProps, MeistrariChatEmbedProps, MessageFeedbackPayload, TelaAgentChatEmbedProps };
@@ -3,7 +3,7 @@ import type { Conversation, ConversationWithMessages, Message } from '../../../t
3
3
  import type { ConversationFile } from '../../../types/schemas/chat/files.js';
4
4
  import type { TopbarTab } from '../../../types/schemas/chat/ui.js';
5
5
  import type { WorkspaceSettingsResponse as WorkspaceSettings } from '../../../types/schemas/chat/workspace-settings.js';
6
- import type { TelaAgentInputVariable } from '../../../types/schemas/integrations/tela-agent-api.js';
6
+ import type { TelaAgentContextFile, TelaAgentInputVariable, TelaAgentSkill } from '../../../types/schemas/integrations/tela-agent-api.js';
7
7
  import type { ChatActor } from '../../types.js';
8
8
  type __VLS_Props = {
9
9
  currentConversation: DeepReadonly<ConversationWithMessages> | null;
@@ -14,6 +14,8 @@ type __VLS_Props = {
14
14
  activeConversationId: string | null;
15
15
  agentInputSchema?: readonly TelaAgentInputVariable[] | null;
16
16
  agentInputSchemaLoading?: boolean;
17
+ agentSkills?: readonly TelaAgentSkill[] | null;
18
+ agentContextFiles?: readonly TelaAgentContextFile[] | null;
17
19
  conversations: DeepReadonly<Conversation[]>;
18
20
  conversationsLoading?: boolean;
19
21
  conversationFiles: ConversationFile[];
@@ -38,6 +40,10 @@ type __VLS_Props = {
38
40
  workspaceSettings?: DeepReadonly<WorkspaceSettings> | null;
39
41
  workspaceSheetOpen: boolean;
40
42
  };
43
+ type __VLS_ModelProps = {
44
+ 'selectedModel'?: string | null;
45
+ };
46
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
41
47
  declare var __VLS_54: {}, __VLS_99: {}, __VLS_101: {};
42
48
  type __VLS_Slots = {} & {
43
49
  loading?: (props: typeof __VLS_54) => any;
@@ -46,7 +52,9 @@ type __VLS_Slots = {} & {
46
52
  } & {
47
53
  default?: (props: typeof __VLS_101) => any;
48
54
  };
49
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
55
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
+ "update:selectedModel": (value: string | null) => any;
57
+ } & {
50
58
  delete: () => any;
51
59
  rename: () => any;
52
60
  duplicate: () => any;
@@ -67,7 +75,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
67
75
  "update:drawerOpen": (value: boolean) => any;
68
76
  "update:editTitle": (value: string) => any;
69
77
  "update:workspaceSheetOpen": (value: boolean) => any;
70
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
78
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
71
79
  onDelete?: (() => any) | undefined;
72
80
  onRename?: (() => any) | undefined;
73
81
  onDuplicate?: (() => any) | undefined;
@@ -77,6 +85,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
77
85
  onCancel?: (() => any) | undefined;
78
86
  onSettings?: (() => any) | undefined;
79
87
  onSend?: ((content: string, files: FileUploadInput[], agentInputs?: TelaAgentExecutionInput[] | undefined) => any) | undefined;
88
+ "onUpdate:selectedModel"?: ((value: string | null) => any) | undefined;
80
89
  onDebug?: (() => any) | undefined;
81
90
  onTabChange?: ((tab: TopbarTab) => any) | undefined;
82
91
  onNewConversation?: ((groupId?: string | null | undefined) => any) | undefined;
@@ -19,6 +19,8 @@ const props = defineProps({
19
19
  activeConversationId: { type: [String, null], required: true },
20
20
  agentInputSchema: { type: [Array, null], required: false },
21
21
  agentInputSchemaLoading: { type: Boolean, required: false },
22
+ agentSkills: { type: [Array, null], required: false },
23
+ agentContextFiles: { type: [Array, null], required: false },
22
24
  conversations: { type: null, required: true },
23
25
  conversationsLoading: { type: Boolean, required: false },
24
26
  conversationFiles: { type: Array, required: true },
@@ -44,6 +46,7 @@ const props = defineProps({
44
46
  workspaceSheetOpen: { type: Boolean, required: true }
45
47
  });
46
48
  const emit = defineEmits(["cancel", "cancelEditing", "copyLink", "debug", "delete", "dismissOutdatedBanner", "duplicate", "export", "newConversation", "rename", "saveTitle", "selectConversation", "send", "settings", "signout", "switchWorkspace", "tabChange", "update:drawerOpen", "update:editTitle", "update:workspaceSheetOpen"]);
49
+ const selectedModel = defineModel("selectedModel", { type: [String, null], ...{ default: null } });
47
50
  const renameInputRef = ref(null);
48
51
  const homeInputRef = ref(null);
49
52
  const outdatedSettingsSheetOpen = ref(false);
@@ -220,6 +223,7 @@ function startNewConversationFromOutdatedSettings() {
220
223
  <div px-14px pb-12px>
221
224
  <ChatMessageInput
222
225
  ref="homeInputRef"
226
+ v-model:selected-model="selectedModel"
223
227
  :disabled="hasPendingMessage"
224
228
  :loading="hasPendingMessage"
225
229
  :creator-name="currentUser?.name ?? void 0"
@@ -230,6 +234,8 @@ function startNewConversationFromOutdatedSettings() {
230
234
  :workspace-settings="workspaceSettings"
231
235
  :agent-input-schema="agentInputSchema"
232
236
  :agent-input-schema-loading="agentInputSchemaLoading"
237
+ :agent-skills="agentSkills"
238
+ :agent-context-files="agentContextFiles"
233
239
  :show-cancel-button="showCancelButton"
234
240
  centered
235
241
  @send="(content, files, agentInputs) => emit('send', content, files, agentInputs)"
@@ -3,7 +3,7 @@ import type { Conversation, ConversationWithMessages, Message } from '../../../t
3
3
  import type { ConversationFile } from '../../../types/schemas/chat/files.js';
4
4
  import type { TopbarTab } from '../../../types/schemas/chat/ui.js';
5
5
  import type { WorkspaceSettingsResponse as WorkspaceSettings } from '../../../types/schemas/chat/workspace-settings.js';
6
- import type { TelaAgentInputVariable } from '../../../types/schemas/integrations/tela-agent-api.js';
6
+ import type { TelaAgentContextFile, TelaAgentInputVariable, TelaAgentSkill } from '../../../types/schemas/integrations/tela-agent-api.js';
7
7
  import type { ChatActor } from '../../types.js';
8
8
  type __VLS_Props = {
9
9
  currentConversation: DeepReadonly<ConversationWithMessages> | null;
@@ -14,6 +14,8 @@ type __VLS_Props = {
14
14
  activeConversationId: string | null;
15
15
  agentInputSchema?: readonly TelaAgentInputVariable[] | null;
16
16
  agentInputSchemaLoading?: boolean;
17
+ agentSkills?: readonly TelaAgentSkill[] | null;
18
+ agentContextFiles?: readonly TelaAgentContextFile[] | null;
17
19
  conversations: DeepReadonly<Conversation[]>;
18
20
  conversationsLoading?: boolean;
19
21
  conversationFiles: ConversationFile[];
@@ -38,6 +40,10 @@ type __VLS_Props = {
38
40
  workspaceSettings?: DeepReadonly<WorkspaceSettings> | null;
39
41
  workspaceSheetOpen: boolean;
40
42
  };
43
+ type __VLS_ModelProps = {
44
+ 'selectedModel'?: string | null;
45
+ };
46
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
41
47
  declare var __VLS_54: {}, __VLS_99: {}, __VLS_101: {};
42
48
  type __VLS_Slots = {} & {
43
49
  loading?: (props: typeof __VLS_54) => any;
@@ -46,7 +52,9 @@ type __VLS_Slots = {} & {
46
52
  } & {
47
53
  default?: (props: typeof __VLS_101) => any;
48
54
  };
49
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
55
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
+ "update:selectedModel": (value: string | null) => any;
57
+ } & {
50
58
  delete: () => any;
51
59
  rename: () => any;
52
60
  duplicate: () => any;
@@ -67,7 +75,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
67
75
  "update:drawerOpen": (value: boolean) => any;
68
76
  "update:editTitle": (value: string) => any;
69
77
  "update:workspaceSheetOpen": (value: boolean) => any;
70
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
78
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
71
79
  onDelete?: (() => any) | undefined;
72
80
  onRename?: (() => any) | undefined;
73
81
  onDuplicate?: (() => any) | undefined;
@@ -77,6 +85,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
77
85
  onCancel?: (() => any) | undefined;
78
86
  onSettings?: (() => any) | undefined;
79
87
  onSend?: ((content: string, files: FileUploadInput[], agentInputs?: TelaAgentExecutionInput[] | undefined) => any) | undefined;
88
+ "onUpdate:selectedModel"?: ((value: string | null) => any) | undefined;
80
89
  onDebug?: (() => any) | undefined;
81
90
  onTabChange?: ((tab: TopbarTab) => any) | undefined;
82
91
  onNewConversation?: ((groupId?: string | null | undefined) => any) | undefined;
@@ -1,8 +1,8 @@
1
- import type { TelaAgent } from '../../types/schemas/integrations/tela-agent-api.js';
1
+ import type { TelaAgentSummary } from '../../types/schemas/integrations/tela-agent-api.js';
2
2
  export declare function useTelaAgentMetadata(): {
3
3
  agentId: any;
4
4
  metadata: any;
5
5
  loading: any;
6
6
  error: any;
7
- fetchAgentMetadata: () => Promise<TelaAgent | null>;
7
+ fetchAgentMetadata: () => Promise<TelaAgentSummary | null>;
8
8
  };