Clean up old stuff & fix ui errors
Build and Push Spoon Images / quality (push) Successful in 2m22s
Build and Push Spoon Images / build-images (push) Successful in 23m10s

This commit is contained in:
Gabriel Brown
2026-06-23 14:57:05 -04:00
parent d207b8b0b8
commit a6f7ea7f78
34 changed files with 1565 additions and 551 deletions
+61 -1
View File
@@ -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 };
},
});