@meistrari/chat-nuxt 1.4.0 → 1.5.1
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.
- package/README.md +51 -16
- package/dist/module.json +1 -1
- package/dist/module.mjs +24 -9
- package/dist/runtime/components/MeistrariChatEmbed.d.vue.ts +2 -18
- package/dist/runtime/components/MeistrariChatEmbed.vue +22 -4
- package/dist/runtime/components/MeistrariChatEmbed.vue.d.ts +2 -18
- package/dist/runtime/components/chat/message-input.d.vue.ts +30 -4
- package/dist/runtime/components/chat/message-input.vue +268 -24
- package/dist/runtime/components/chat/message-input.vue.d.ts +30 -4
- package/dist/runtime/composables/useChat.d.ts +3 -5
- package/dist/runtime/composables/useChat.js +18 -4
- package/dist/runtime/composables/useChatApi.js +4 -0
- package/dist/runtime/composables/useConversations.js +8 -2
- package/dist/runtime/composables/useEmbedConfig.d.ts +7 -1
- package/dist/runtime/composables/useEmbedConfig.js +8 -0
- package/dist/runtime/composables/useFeatureFlags.d.ts +1 -2
- package/dist/runtime/composables/useTelaAgentMetadata.d.ts +8 -0
- package/dist/runtime/composables/useTelaAgentMetadata.js +65 -0
- package/dist/runtime/composables/useWorkspaceSettings.d.ts +1 -19
- package/dist/runtime/composables/useWorkspaceSettings.js +24 -5
- package/dist/runtime/embed/components/ChatConfigurationModal.d.vue.ts +1 -1
- package/dist/runtime/embed/components/ChatConfigurationModal.vue.d.ts +1 -1
- package/dist/runtime/embed/components/ChatEmbed.d.vue.ts +3 -23
- package/dist/runtime/embed/components/ChatEmbed.vue +34 -9
- package/dist/runtime/embed/components/ChatEmbed.vue.d.ts +3 -23
- package/dist/runtime/embed/components/ChatEmbedInner.vue +50 -12
- package/dist/runtime/plugins/markstream.d.ts +1 -1
- package/dist/runtime/plugins/markstream.js +1 -1
- package/dist/runtime/server/api/chat/workspace/settings.patch.d.ts +2 -0
- package/dist/runtime/server/api/chat/workspace/settings.patch.js +8 -0
- package/dist/runtime/server/api/conversations/[id]/cancel.post.d.ts +1 -1
- package/dist/runtime/server/api/conversations/[id]/cancel.post.js +37 -17
- package/dist/runtime/server/api/conversations/[id]/clear.post.js +28 -13
- package/dist/runtime/server/api/conversations/[id]/duplicate.post.js +11 -13
- package/dist/runtime/server/api/conversations/[id]/files.get.js +5 -7
- package/dist/runtime/server/api/conversations/[id]/index.delete.js +13 -12
- package/dist/runtime/server/api/conversations/[id]/index.get.js +6 -13
- package/dist/runtime/server/api/conversations/[id]/index.patch.js +11 -10
- package/dist/runtime/server/api/conversations/[id]/messages/[messageId]/retry.post.js +46 -80
- package/dist/runtime/server/api/conversations/[id]/messages/index.get.d.ts +1 -14
- package/dist/runtime/server/api/conversations/[id]/messages/index.get.js +81 -187
- package/dist/runtime/server/api/conversations/[id]/messages/index.post.js +68 -86
- package/dist/runtime/server/api/conversations/[id]/usage.get.js +4 -8
- package/dist/runtime/server/api/conversations/generate-title.post.js +4 -3
- package/dist/runtime/server/api/conversations/index.get.js +5 -4
- package/dist/runtime/server/api/conversations/index.post.js +5 -4
- package/dist/runtime/server/api/tela/agents/[id].get.d.ts +6 -0
- package/dist/runtime/server/api/tela/agents/[id].get.js +25 -0
- package/dist/runtime/server/api/workspace/settings.patch.js +3 -82
- package/dist/runtime/server/db/schema/conversations.d.ts +17 -0
- package/dist/runtime/server/db/schema/conversations.js +3 -1
- package/dist/runtime/server/db/schema/workspace-settings.d.ts +1 -1
- package/dist/runtime/server/utils/chat-context.d.ts +5 -0
- package/dist/runtime/server/utils/chat-context.js +20 -0
- package/dist/runtime/server/utils/conversation-agent-turn.d.ts +39 -0
- package/dist/runtime/server/utils/conversation-agent-turn.js +170 -0
- package/dist/runtime/server/utils/conversation-message-files.d.ts +10 -0
- package/dist/runtime/server/utils/conversation-message-files.js +77 -0
- package/dist/runtime/server/utils/conversation-message-sync.d.ts +31 -0
- package/dist/runtime/server/utils/conversation-message-sync.js +132 -0
- package/dist/runtime/server/utils/conversation-scope.d.ts +2 -0
- package/dist/runtime/server/utils/conversation-scope.js +12 -0
- package/dist/runtime/server/utils/tela-agent-api.d.ts +29 -0
- package/dist/runtime/server/utils/tela-agent-api.js +107 -0
- package/dist/runtime/server/utils/tela-agent-session.d.ts +48 -0
- package/dist/runtime/server/utils/tela-agent-session.js +350 -0
- package/dist/runtime/server/utils/workspace-settings-update.d.ts +16 -0
- package/dist/runtime/server/utils/workspace-settings-update.js +84 -0
- package/dist/runtime/types/embed.d.ts +29 -0
- package/dist/runtime/types/embed.js +0 -0
- package/dist/runtime/types/tela-agent.d.ts +243 -0
- package/dist/runtime/types/tela-agent.js +98 -0
- package/dist/runtime/types/workspace-settings-data.d.ts +19 -0
- package/dist/runtime/types/workspace-settings-data.js +0 -0
- package/dist/runtime/types/workspace-settings.d.ts +1 -1
- package/dist/runtime/utils/agent-input-readiness.d.ts +14 -0
- package/dist/runtime/utils/agent-input-readiness.js +15 -0
- package/dist/runtime/utils/features.d.ts +9 -0
- package/dist/runtime/utils/features.js +5 -4
- package/dist/runtime/utils/file.js +46 -7
- package/dist/runtime/utils/markdown-nodes.d.ts +1 -0
- package/dist/runtime/utils/markdown-nodes.js +6 -0
- package/dist/runtime/utils/tela-chat.d.ts +6 -0
- package/dist/runtime/utils/tela-chat.js +12 -1
- package/drizzle/0014_faulty_lake.sql +2 -0
- package/drizzle/meta/0014_snapshot.json +732 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/dist/runtime/types/feature-flags.d.ts +0 -7
- package/dist/runtime/types/feature-flags.js +0 -6
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
2
|
-
import { eq,
|
|
2
|
+
import { eq, asc } from "drizzle-orm";
|
|
3
3
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
5
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
5
6
|
import { getWorkspaceSettingsUpdatedAt, resolveWorkspaceSettings, serializeResolvedWorkspaceSettings } from "#chat-runtime/server/utils/chat-workspace-settings";
|
|
6
7
|
import { logger } from "#chat-runtime/server/utils/logger";
|
|
7
8
|
export default defineEventHandler(async (event) => {
|
|
8
|
-
const context =
|
|
9
|
+
const context = resolveChatRuntimeContext(event);
|
|
9
10
|
const db = useDb();
|
|
10
11
|
const id = getRouterParam(event, "id");
|
|
11
12
|
if (!id) {
|
|
@@ -14,28 +15,25 @@ export default defineEventHandler(async (event) => {
|
|
|
14
15
|
statusMessage: "Conversation ID is required"
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
|
-
const [original] = await db.select().from(schema.conversations).where(
|
|
18
|
-
and(
|
|
19
|
-
eq(schema.conversations.id, id),
|
|
20
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
21
|
-
)
|
|
22
|
-
).limit(1);
|
|
18
|
+
const [original] = await db.select().from(schema.conversations).where(conversationScopeConditions(context, id)).limit(1);
|
|
23
19
|
if (!original) {
|
|
24
20
|
throw createError({
|
|
25
21
|
statusCode: 404,
|
|
26
22
|
statusMessage: "Conversation not found"
|
|
27
23
|
});
|
|
28
24
|
}
|
|
29
|
-
const trustedSettings = original.
|
|
25
|
+
const trustedSettings = original.telaAgentId ? null : original.appliedSettingsSnapshot ?? await resolveWorkspaceSettings(event, context, db);
|
|
30
26
|
const duplicated = await db.transaction(async (tx) => {
|
|
31
27
|
const [newConversation] = await tx.insert(schema.conversations).values({
|
|
32
28
|
workspaceId: context.workspaceId,
|
|
33
29
|
userId: context.user.id,
|
|
34
30
|
title: `${original.title} (copy)`,
|
|
35
31
|
createdBy: context.user.email,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
telaAgentId: original.telaAgentId,
|
|
33
|
+
threadSessionId: null,
|
|
34
|
+
model: original.telaAgentId ? null : original.model,
|
|
35
|
+
appliedSettingsAt: trustedSettings ? getWorkspaceSettingsUpdatedAt(trustedSettings) : null,
|
|
36
|
+
appliedSettingsSnapshot: trustedSettings ? serializeResolvedWorkspaceSettings(trustedSettings) : null
|
|
39
37
|
}).returning();
|
|
40
38
|
if (!newConversation) {
|
|
41
39
|
throw createError({
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
2
2
|
import { useRuntimeConfig } from "nitropack/runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { asc, eq } from "drizzle-orm";
|
|
4
4
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
6
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
6
7
|
import { APIKeyAuthStrategy, extractVaultReferences, VaultFile } from "@meistrari/vault-sdk";
|
|
7
8
|
import { getAgentDataToken } from "#chat-runtime/server/utils/agent-api";
|
|
8
9
|
import { generateFileId } from "#chat-runtime/utils/file";
|
|
9
10
|
import { logger } from "#chat-runtime/server/utils/logger";
|
|
10
11
|
export default defineEventHandler(async (event) => {
|
|
11
|
-
const context =
|
|
12
|
+
const context = resolveChatRuntimeContext(event);
|
|
12
13
|
const db = useDb();
|
|
13
14
|
const conversationId = getRouterParam(event, "id");
|
|
14
15
|
const authToken = getAgentDataToken(event);
|
|
@@ -19,10 +20,7 @@ export default defineEventHandler(async (event) => {
|
|
|
19
20
|
statusMessage: "Invalid conversation ID format"
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
const [conversation] = await db.select().from(schema.conversations).where(
|
|
23
|
-
eq(schema.conversations.id, conversationId),
|
|
24
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
25
|
-
));
|
|
23
|
+
const [conversation] = await db.select().from(schema.conversations).where(conversationScopeConditions(context, conversationId));
|
|
26
24
|
if (!conversation) {
|
|
27
25
|
throw createError({
|
|
28
26
|
statusCode: 404,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
2
|
-
import { eq, and } from "drizzle-orm";
|
|
3
2
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
4
|
-
import {
|
|
3
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
4
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
5
5
|
import { getAgentDataToken, deleteSession } from "#chat-runtime/server/utils/agent-api";
|
|
6
|
+
import { endTelaAgentSession } from "#chat-runtime/server/utils/tela-agent-api";
|
|
6
7
|
import { logger } from "#chat-runtime/server/utils/logger";
|
|
7
8
|
export default defineEventHandler(async (event) => {
|
|
8
|
-
const context =
|
|
9
|
-
const token = getAgentDataToken(event);
|
|
9
|
+
const context = resolveChatRuntimeContext(event);
|
|
10
10
|
const db = useDb();
|
|
11
11
|
const id = getRouterParam(event, "id");
|
|
12
12
|
if (!id) {
|
|
@@ -15,12 +15,7 @@ export default defineEventHandler(async (event) => {
|
|
|
15
15
|
statusMessage: "Conversation ID is required"
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
const [deleted] = await db.delete(schema.conversations).where(
|
|
19
|
-
and(
|
|
20
|
-
eq(schema.conversations.id, id),
|
|
21
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
22
|
-
)
|
|
23
|
-
).returning();
|
|
18
|
+
const [deleted] = await db.delete(schema.conversations).where(conversationScopeConditions(context, id)).returning();
|
|
24
19
|
if (!deleted) {
|
|
25
20
|
throw createError({
|
|
26
21
|
statusCode: 404,
|
|
@@ -29,8 +24,14 @@ export default defineEventHandler(async (event) => {
|
|
|
29
24
|
}
|
|
30
25
|
logger.info({ conversationId: id, workspaceId: context.workspaceId }, "Conversation deleted");
|
|
31
26
|
if (deleted.threadSessionId) {
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
if (deleted.telaAgentId) {
|
|
28
|
+
endTelaAgentSession(event, deleted.threadSessionId).catch(() => {
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
const token = getAgentDataToken(event);
|
|
32
|
+
deleteSession(token, deleted.threadSessionId).catch(() => {
|
|
33
|
+
});
|
|
34
|
+
}
|
|
34
35
|
}
|
|
35
36
|
return { success: true };
|
|
36
37
|
});
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
2
|
-
import { eq,
|
|
2
|
+
import { eq, asc } from "drizzle-orm";
|
|
3
3
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
5
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
5
6
|
export default defineEventHandler(async (event) => {
|
|
6
|
-
const context =
|
|
7
|
+
const context = resolveChatRuntimeContext(event);
|
|
7
8
|
const db = useDb();
|
|
8
9
|
const id = getRouterParam(event, "id");
|
|
9
10
|
if (!id) {
|
|
@@ -12,22 +13,14 @@ export default defineEventHandler(async (event) => {
|
|
|
12
13
|
statusMessage: "Conversation ID is required"
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
|
-
const [
|
|
16
|
-
db.select().from(schema.conversations).where(
|
|
17
|
-
and(
|
|
18
|
-
eq(schema.conversations.id, id),
|
|
19
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
20
|
-
)
|
|
21
|
-
),
|
|
22
|
-
db.select().from(schema.messages).where(eq(schema.messages.conversationId, id)).orderBy(asc(schema.messages.createdAt))
|
|
23
|
-
]);
|
|
24
|
-
const [conversation] = conversationResult;
|
|
16
|
+
const [conversation] = await db.select().from(schema.conversations).where(conversationScopeConditions(context, id));
|
|
25
17
|
if (!conversation) {
|
|
26
18
|
throw createError({
|
|
27
19
|
statusCode: 404,
|
|
28
20
|
statusMessage: "Conversation not found"
|
|
29
21
|
});
|
|
30
22
|
}
|
|
23
|
+
const messages = await db.select().from(schema.messages).where(eq(schema.messages.conversationId, id)).orderBy(asc(schema.messages.createdAt));
|
|
31
24
|
return {
|
|
32
25
|
...conversation,
|
|
33
26
|
messages
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam, readBody } from "h3";
|
|
2
|
-
import { eq, and } from "drizzle-orm";
|
|
3
2
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
4
|
-
import {
|
|
3
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
4
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
5
5
|
import { logger } from "#chat-runtime/server/utils/logger";
|
|
6
6
|
import { isValidModel } from "#chat-runtime/types/chat";
|
|
7
7
|
export default defineEventHandler(async (event) => {
|
|
8
|
-
const context =
|
|
8
|
+
const context = resolveChatRuntimeContext(event);
|
|
9
9
|
const db = useDb();
|
|
10
10
|
const id = getRouterParam(event, "id");
|
|
11
11
|
if (!id) {
|
|
@@ -27,7 +27,13 @@ export default defineEventHandler(async (event) => {
|
|
|
27
27
|
statusMessage: "Title cannot be empty"
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
-
if (
|
|
30
|
+
if (context.telaAgentId && body.model !== void 0) {
|
|
31
|
+
throw createError({
|
|
32
|
+
statusCode: 400,
|
|
33
|
+
statusMessage: "Model cannot be updated for Tela-agent conversations"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (!context.telaAgentId && body.model !== void 0 && body.model !== null && !isValidModel(body.model)) {
|
|
31
37
|
throw createError({
|
|
32
38
|
statusCode: 400,
|
|
33
39
|
statusMessage: "Invalid model"
|
|
@@ -38,12 +44,7 @@ export default defineEventHandler(async (event) => {
|
|
|
38
44
|
updateData.title = body.title.trim();
|
|
39
45
|
if (body.model !== void 0)
|
|
40
46
|
updateData.model = body.model;
|
|
41
|
-
const [updated] = await db.update(schema.conversations).set(updateData).where(
|
|
42
|
-
and(
|
|
43
|
-
eq(schema.conversations.id, id),
|
|
44
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
45
|
-
)
|
|
46
|
-
).returning();
|
|
47
|
+
const [updated] = await db.update(schema.conversations).set(updateData).where(conversationScopeConditions(context, id)).returning();
|
|
47
48
|
if (!updated) {
|
|
48
49
|
throw createError({
|
|
49
50
|
statusCode: 404,
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
2
|
-
import {
|
|
3
|
-
import { eq, and, lt, desc, isNull } from "drizzle-orm";
|
|
2
|
+
import { eq, and, lt, desc } from "drizzle-orm";
|
|
4
3
|
import { logger } from "#chat-runtime/server/utils/logger";
|
|
5
4
|
import { useDb, schema } from "#chat-runtime/server/db";
|
|
6
|
-
import {
|
|
7
|
-
import { buildMessageWithContext, renderSystemPrompt, truncateTitle } from "#chat-runtime/server/utils/chat-message-builder";
|
|
8
|
-
import { getAgentDataToken, createChatAgentSession, continueSession } from "#chat-runtime/server/utils/agent-api";
|
|
5
|
+
import { resolveChatRuntimeContext } from "#chat-runtime/server/utils/chat-context";
|
|
9
6
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { isValidModel } from "#chat-runtime/types/chat";
|
|
7
|
+
buildTelaAgentTurnPayload,
|
|
8
|
+
prepareDefaultAgentTurn,
|
|
9
|
+
queueTelaAgentTurn,
|
|
10
|
+
resolveDefaultAgentEnvironmentVariables,
|
|
11
|
+
withEnvironmentVariables
|
|
12
|
+
} from "#chat-runtime/server/utils/conversation-agent-turn";
|
|
13
|
+
import { conversationScopeConditions } from "#chat-runtime/server/utils/conversation-scope";
|
|
14
|
+
import { getAgentDataToken, createChatAgentSession, continueSession } from "#chat-runtime/server/utils/agent-api";
|
|
19
15
|
export default defineEventHandler(async (event) => {
|
|
20
|
-
const context =
|
|
21
|
-
const token = getAgentDataToken(event);
|
|
16
|
+
const context = resolveChatRuntimeContext(event);
|
|
22
17
|
const db = useDb();
|
|
23
18
|
const conversationId = getRouterParam(event, "id");
|
|
24
19
|
const messageId = getRouterParam(event, "messageId");
|
|
@@ -28,12 +23,7 @@ export default defineEventHandler(async (event) => {
|
|
|
28
23
|
statusMessage: "Conversation ID and Message ID are required"
|
|
29
24
|
});
|
|
30
25
|
}
|
|
31
|
-
const [conversation] = await db.select().from(schema.conversations).where(
|
|
32
|
-
and(
|
|
33
|
-
eq(schema.conversations.id, conversationId),
|
|
34
|
-
eq(schema.conversations.workspaceId, context.workspaceId)
|
|
35
|
-
)
|
|
36
|
-
);
|
|
26
|
+
const [conversation] = await db.select().from(schema.conversations).where(conversationScopeConditions(context, conversationId));
|
|
37
27
|
if (!conversation) {
|
|
38
28
|
throw createError({
|
|
39
29
|
statusCode: 404,
|
|
@@ -67,6 +57,7 @@ export default defineEventHandler(async (event) => {
|
|
|
67
57
|
statusMessage: "User message not found"
|
|
68
58
|
});
|
|
69
59
|
}
|
|
60
|
+
const telaAgentPayload = conversation.telaAgentId ? await buildTelaAgentTurnPayload(event, conversation, userMessage.content, userMessage.files ?? void 0) : null;
|
|
70
61
|
await db.update(schema.messages).set({
|
|
71
62
|
content: "",
|
|
72
63
|
status: "pending",
|
|
@@ -74,64 +65,42 @@ export default defineEventHandler(async (event) => {
|
|
|
74
65
|
files: null
|
|
75
66
|
}).where(eq(schema.messages.id, messageId));
|
|
76
67
|
logger.info({ conversationId, messageId }, "Message retry initiated");
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
needsNewThread,
|
|
89
|
-
needsNewThread ? renderSystemPrompt(vaultUrl) : ""
|
|
90
|
-
);
|
|
91
|
-
const canvasTools = appliedSettings.canvasTools;
|
|
92
|
-
const externalSkillRefs = appliedSettings.externalSkills?.map((skill) => skill.ref) ?? [];
|
|
93
|
-
const skills = externalSkillRefs.length > 0 ? externalSkillRefs : void 0;
|
|
94
|
-
const effectiveModel = isValidModel(conversation.model) ? conversation.model : void 0;
|
|
95
|
-
const messageTitle = truncateTitle(userMessage.content);
|
|
96
|
-
const settingsTimestamp = getWorkspaceSettingsUpdatedAt(appliedSettings);
|
|
97
|
-
if (!conversation.appliedSettingsSnapshot && trustedSettings) {
|
|
98
|
-
await db.update(schema.conversations).set({
|
|
99
|
-
appliedSettingsAt: settingsTimestamp,
|
|
100
|
-
appliedSettingsSnapshot: serializeResolvedWorkspaceSettings(trustedSettings),
|
|
101
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
102
|
-
}).where(and(
|
|
103
|
-
eq(schema.conversations.id, conversationId),
|
|
104
|
-
isNull(schema.conversations.appliedSettingsSnapshot)
|
|
105
|
-
));
|
|
68
|
+
if (conversation.telaAgentId) {
|
|
69
|
+
queueTelaAgentTurn(event, db, {
|
|
70
|
+
conversation,
|
|
71
|
+
conversationId,
|
|
72
|
+
assistantMessageId: messageId,
|
|
73
|
+
payload: telaAgentPayload,
|
|
74
|
+
titleContent: userMessage.content,
|
|
75
|
+
operation: "retry"
|
|
76
|
+
});
|
|
77
|
+
const [updatedMessage2] = await db.select().from(schema.messages).where(eq(schema.messages.id, messageId));
|
|
78
|
+
return updatedMessage2;
|
|
106
79
|
}
|
|
80
|
+
const token = getAgentDataToken(event);
|
|
81
|
+
const defaultAgentTurn = await prepareDefaultAgentTurn(event, db, context, {
|
|
82
|
+
conversation,
|
|
83
|
+
conversationId,
|
|
84
|
+
content: userMessage.content,
|
|
85
|
+
files: userMessage.files
|
|
86
|
+
});
|
|
107
87
|
const processAgent = async () => {
|
|
108
88
|
try {
|
|
109
|
-
if (needsNewThread) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
const hasEnvironmentVariables = Object.keys(environmentVariables).length > 0;
|
|
119
|
-
const result = await createChatAgentSession(token, {
|
|
120
|
-
message: messageWithContext,
|
|
121
|
-
fileUrls,
|
|
122
|
-
model: effectiveModel,
|
|
123
|
-
customTools: canvasTools?.length ? { canvas: canvasTools } : void 0,
|
|
124
|
-
tools: hasKnowledgeSources ? { workstationQueryTool: true } : void 0,
|
|
125
|
-
environmentVariables: hasEnvironmentVariables ? environmentVariables : void 0,
|
|
126
|
-
skills
|
|
127
|
-
});
|
|
89
|
+
if (defaultAgentTurn.needsNewThread) {
|
|
90
|
+
const environmentVariables = await resolveDefaultAgentEnvironmentVariables(
|
|
91
|
+
event,
|
|
92
|
+
context,
|
|
93
|
+
{ conversationId, messageId },
|
|
94
|
+
"Failed to resolve workspace credentials on retry, proceeding without env vars"
|
|
95
|
+
);
|
|
96
|
+
const result = await createChatAgentSession(token, withEnvironmentVariables(defaultAgentTurn.createPayload, environmentVariables));
|
|
128
97
|
if (result.success) {
|
|
129
98
|
logger.info({ conversationId, messageId, sessionId: result.sessionId }, "New agent thread created on retry");
|
|
130
99
|
await db.update(schema.conversations).set({
|
|
131
100
|
threadSessionId: result.sessionId,
|
|
132
|
-
title: messageTitle,
|
|
133
|
-
appliedSettingsAt: settingsTimestamp,
|
|
134
|
-
model: effectiveModel ?? null,
|
|
101
|
+
title: defaultAgentTurn.messageTitle,
|
|
102
|
+
appliedSettingsAt: defaultAgentTurn.settingsTimestamp,
|
|
103
|
+
model: defaultAgentTurn.effectiveModel ?? null,
|
|
135
104
|
updatedAt: /* @__PURE__ */ new Date()
|
|
136
105
|
}).where(eq(schema.conversations.id, conversationId));
|
|
137
106
|
} else {
|
|
@@ -142,27 +111,24 @@ export default defineEventHandler(async (event) => {
|
|
|
142
111
|
}).where(eq(schema.messages.id, messageId));
|
|
143
112
|
}
|
|
144
113
|
} else {
|
|
145
|
-
const result = await continueSession(token, conversation.threadSessionId,
|
|
146
|
-
content: userMessage.content.trim(),
|
|
147
|
-
fileUrls,
|
|
148
|
-
model: effectiveModel
|
|
149
|
-
});
|
|
114
|
+
const result = await continueSession(token, conversation.threadSessionId, defaultAgentTurn.continuePayload);
|
|
150
115
|
if (!result.success) {
|
|
151
116
|
logger.warn({ conversationId, messageId, error: result.error }, "Agent session continue failed on retry");
|
|
152
117
|
await db.update(schema.messages).set({
|
|
153
118
|
content: `Erro: ${result.error}`,
|
|
154
119
|
status: "failed"
|
|
155
120
|
}).where(eq(schema.messages.id, messageId));
|
|
121
|
+
return;
|
|
156
122
|
}
|
|
157
123
|
await db.update(schema.conversations).set({
|
|
158
|
-
...effectiveModel ? { model: effectiveModel } : {},
|
|
124
|
+
...defaultAgentTurn.effectiveModel ? { model: defaultAgentTurn.effectiveModel } : {},
|
|
159
125
|
updatedAt: /* @__PURE__ */ new Date()
|
|
160
126
|
}).where(eq(schema.conversations.id, conversationId));
|
|
161
127
|
}
|
|
162
128
|
} catch (error) {
|
|
163
129
|
logger.error({ error }, "Failed to process agent retry");
|
|
164
130
|
await db.update(schema.messages).set({
|
|
165
|
-
content: `Erro: ${needsNewThread ? "Falha ao conectar ao agente" : "Falha ao continuar a sess\xE3o"}`,
|
|
131
|
+
content: `Erro: ${defaultAgentTurn.needsNewThread ? "Falha ao conectar ao agente" : "Falha ao continuar a sess\xE3o"}`,
|
|
166
132
|
status: "failed"
|
|
167
133
|
}).where(eq(schema.messages.id, messageId));
|
|
168
134
|
}
|
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
url: string;
|
|
3
|
-
name: string;
|
|
4
|
-
mimeType?: string;
|
|
5
|
-
source: 'user' | 'assistant';
|
|
6
|
-
size?: number;
|
|
7
|
-
};
|
|
8
|
-
declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
|
|
9
|
-
messages: any;
|
|
10
|
-
newFiles: MessageFile[];
|
|
11
|
-
} | {
|
|
12
|
-
messages: any;
|
|
13
|
-
newFiles?: undefined;
|
|
14
|
-
}>>;
|
|
1
|
+
declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
|
|
15
2
|
export default _default;
|