feat: add image generation tool and WebUI mode

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Xubin Ren
2026-05-08 20:06:23 +08:00
committed by Xubin Ren
co-authored by Cursor
parent 3a2f47d720
commit e936ed48bd
45 changed files with 2979 additions and 89 deletions
+9 -7
View File
@@ -126,13 +126,15 @@ export async function listSlashCommands(
arg_hint?: string;
};
const body = await request<{ commands: Row[] }>(`${base}/api/commands`, token);
return body.commands.map((command) => ({
command: command.command,
title: command.title,
description: command.description,
icon: command.icon,
argHint: command.arg_hint ?? "",
}));
return body.commands
.filter((command) => !["/stop", "/restart"].includes(command.command))
.map((command) => ({
command: command.command,
title: command.title,
description: command.description,
icon: command.icon,
argHint: command.arg_hint ?? "",
}));
}
export async function updateSettings(
+15 -5
View File
@@ -2,6 +2,7 @@ import type {
ConnectionStatus,
InboundEvent,
Outbound,
OutboundImageGeneration,
OutboundMedia,
} from "./types";
@@ -181,12 +182,21 @@ export class NanobotClient {
}
}
sendMessage(chatId: string, content: string, media?: OutboundMedia[]): void {
sendMessage(
chatId: string,
content: string,
media?: OutboundMedia[],
options?: { imageGeneration?: OutboundImageGeneration },
): void {
this.knownChats.add(chatId);
const frame: Outbound =
media && media.length > 0
? { type: "message", chat_id: chatId, content, media, webui: true }
: { type: "message", chat_id: chatId, content, webui: true };
const frame: Outbound = {
type: "message",
chat_id: chatId,
content,
...(media && media.length > 0 ? { media } : {}),
...(options?.imageGeneration ? { image_generation: options.imageGeneration } : {}),
webui: true,
};
this.queueSend(frame);
}
+6
View File
@@ -150,6 +150,11 @@ export interface OutboundMedia {
name?: string;
}
export interface OutboundImageGeneration {
enabled: true;
aspect_ratio?: string | null;
}
export type Outbound =
| { type: "new_chat" }
| { type: "attach"; chat_id: string }
@@ -158,6 +163,7 @@ export type Outbound =
chat_id: string;
content: string;
media?: OutboundMedia[];
image_generation?: OutboundImageGeneration;
/** Marks messages sent by the embedded WebUI, without changing the
* generic websocket protocol for other clients. */
webui?: true;