Clean up old stuff & fix ui errors
This commit is contained in:
@@ -160,6 +160,27 @@ const requireWorkerToken = (workerToken: string) => {
|
||||
if (workerToken !== expected) throw new ConvexError('Invalid worker token.');
|
||||
};
|
||||
|
||||
const mergeMessageMetadata = (
|
||||
metadata: string | undefined,
|
||||
patch: Record<string, unknown>,
|
||||
) => {
|
||||
if (!metadata) return JSON.stringify(patch);
|
||||
try {
|
||||
return JSON.stringify({ ...(JSON.parse(metadata) as object), ...patch });
|
||||
} catch {
|
||||
return JSON.stringify({ note: metadata, ...patch });
|
||||
}
|
||||
};
|
||||
|
||||
const parseMessageMetadata = (metadata: string | undefined) => {
|
||||
if (!metadata) return null;
|
||||
try {
|
||||
return JSON.parse(metadata) as Record<string, unknown>;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const slugify = (value: string) =>
|
||||
value
|
||||
.toLowerCase()
|
||||
@@ -736,6 +757,7 @@ export const getWorkspaceUiState = query({
|
||||
activeFilePath: undefined,
|
||||
vimEnabled: false,
|
||||
expandedDirectoryPaths: [],
|
||||
agentThreadWidth: 420,
|
||||
createdAt: Date.now(),
|
||||
updatedAt: Date.now(),
|
||||
}
|
||||
@@ -750,6 +772,7 @@ export const patchWorkspaceUiState = mutation({
|
||||
activeFilePath: v.optional(v.string()),
|
||||
vimEnabled: v.optional(v.boolean()),
|
||||
expandedDirectoryPaths: v.optional(v.array(v.string())),
|
||||
agentThreadWidth: v.optional(v.number()),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
const ownerId = await getRequiredUserId(ctx);
|
||||
@@ -780,6 +803,14 @@ export const patchWorkspaceUiState = mutation({
|
||||
),
|
||||
}
|
||||
: {}),
|
||||
...(args.agentThreadWidth !== undefined
|
||||
? {
|
||||
agentThreadWidth: Math.min(
|
||||
Math.max(Math.round(args.agentThreadWidth), 320),
|
||||
720,
|
||||
),
|
||||
}
|
||||
: {}),
|
||||
updatedAt: now,
|
||||
};
|
||||
if (existing) {
|
||||
@@ -794,6 +825,7 @@ export const patchWorkspaceUiState = mutation({
|
||||
activeFilePath: patch.activeFilePath,
|
||||
vimEnabled: patch.vimEnabled ?? false,
|
||||
expandedDirectoryPaths: patch.expandedDirectoryPaths ?? [],
|
||||
agentThreadWidth: patch.agentThreadWidth ?? 420,
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
});
|
||||
@@ -1537,7 +1569,9 @@ export const appendMessage = mutation({
|
||||
role: args.role,
|
||||
content: args.content,
|
||||
status: args.status,
|
||||
metadata: args.metadata,
|
||||
metadata: mergeMessageMetadata(args.metadata, {
|
||||
agentJobMessageId: messageId,
|
||||
}),
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
});
|
||||
@@ -1570,6 +1604,32 @@ export const updateMessage = mutation({
|
||||
if (args.status !== undefined) patch.status = args.status;
|
||||
if (args.metadata !== undefined) patch.metadata = args.metadata;
|
||||
await ctx.db.patch(args.messageId, patch);
|
||||
const threadId = job.threadId;
|
||||
if (threadId) {
|
||||
const threadMessages = await ctx.db
|
||||
.query('threadMessages')
|
||||
.withIndex('by_thread', (q) => q.eq('threadId', threadId))
|
||||
.order('desc')
|
||||
.take(300);
|
||||
const mirrored = threadMessages.find(
|
||||
(threadMessage) =>
|
||||
parseMessageMetadata(threadMessage.metadata)?.agentJobMessageId ===
|
||||
args.messageId,
|
||||
);
|
||||
if (mirrored) {
|
||||
const threadPatch: Partial<Doc<'threadMessages'>> = {
|
||||
updatedAt: patch.updatedAt,
|
||||
};
|
||||
if (args.content !== undefined) threadPatch.content = args.content;
|
||||
if (args.status !== undefined) threadPatch.status = args.status;
|
||||
if (args.metadata !== undefined) {
|
||||
threadPatch.metadata = mergeMessageMetadata(args.metadata, {
|
||||
agentJobMessageId: args.messageId,
|
||||
});
|
||||
}
|
||||
await ctx.db.patch(mirrored._id, threadPatch);
|
||||
}
|
||||
}
|
||||
return { success: true };
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user