synabun 2026.3.307 → 2026.3.310
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/CLAUDE.md +150 -0
- package/hooks/claude-code/post-plan.mjs +1 -1
- package/hooks/claude-code/session-start.mjs +2 -0
- package/mcp-server/dist/config.d.ts +13 -0
- package/mcp-server/dist/config.d.ts.map +1 -0
- package/mcp-server/dist/config.js +59 -0
- package/mcp-server/dist/config.js.map +1 -0
- package/mcp-server/dist/http.d.ts +13 -0
- package/mcp-server/dist/http.d.ts.map +1 -0
- package/mcp-server/dist/http.js +86 -0
- package/mcp-server/dist/http.js.map +1 -0
- package/mcp-server/dist/index.d.ts +10 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +189 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/dist/preload-http.d.ts +3 -0
- package/mcp-server/dist/preload-http.d.ts.map +1 -0
- package/mcp-server/dist/preload-http.js +26 -0
- package/mcp-server/dist/preload-http.js.map +1 -0
- package/mcp-server/dist/preload.d.ts +3 -0
- package/mcp-server/dist/preload.d.ts.map +1 -0
- package/mcp-server/dist/preload.js +30 -0
- package/mcp-server/dist/preload.js.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts +19 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js +403 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js.map +1 -0
- package/mcp-server/dist/services/categories.d.ts +61 -0
- package/mcp-server/dist/services/categories.d.ts.map +1 -0
- package/mcp-server/dist/services/categories.js +356 -0
- package/mcp-server/dist/services/categories.js.map +1 -0
- package/mcp-server/dist/services/discord.d.ts +112 -0
- package/mcp-server/dist/services/discord.d.ts.map +1 -0
- package/mcp-server/dist/services/discord.js +477 -0
- package/mcp-server/dist/services/discord.js.map +1 -0
- package/mcp-server/dist/services/file-checksums.d.ts +14 -0
- package/mcp-server/dist/services/file-checksums.d.ts.map +1 -0
- package/mcp-server/dist/services/file-checksums.js +34 -0
- package/mcp-server/dist/services/file-checksums.js.map +1 -0
- package/mcp-server/dist/services/local-embeddings.d.ts +23 -0
- package/mcp-server/dist/services/local-embeddings.d.ts.map +1 -0
- package/mcp-server/dist/services/local-embeddings.js +71 -0
- package/mcp-server/dist/services/local-embeddings.js.map +1 -0
- package/mcp-server/dist/services/neural-interface.d.ts +92 -0
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -0
- package/mcp-server/dist/services/neural-interface.js +238 -0
- package/mcp-server/dist/services/neural-interface.js.map +1 -0
- package/mcp-server/dist/services/sqlite.d.ts +85 -0
- package/mcp-server/dist/services/sqlite.d.ts.map +1 -0
- package/mcp-server/dist/services/sqlite.js +660 -0
- package/mcp-server/dist/services/sqlite.js.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts +54 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.js +97 -0
- package/mcp-server/dist/tools/browser-advanced.js.map +1 -0
- package/mcp-server/dist/tools/browser-interact.d.ts +138 -0
- package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-interact.js +216 -0
- package/mcp-server/dist/tools/browser-interact.js.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts +52 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.js +61 -0
- package/mcp-server/dist/tools/browser-navigate.js.map +1 -0
- package/mcp-server/dist/tools/browser-observe.d.ts +298 -0
- package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-observe.js +1154 -0
- package/mcp-server/dist/tools/browser-observe.js.map +1 -0
- package/mcp-server/dist/tools/browser.d.ts +7 -0
- package/mcp-server/dist/tools/browser.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser.js +55 -0
- package/mcp-server/dist/tools/browser.js.map +1 -0
- package/mcp-server/dist/tools/card-tools.d.ts +82 -0
- package/mcp-server/dist/tools/card-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/card-tools.js +137 -0
- package/mcp-server/dist/tools/card-tools.js.map +1 -0
- package/mcp-server/dist/tools/card.d.ts +8 -0
- package/mcp-server/dist/tools/card.d.ts.map +1 -0
- package/mcp-server/dist/tools/card.js +14 -0
- package/mcp-server/dist/tools/card.js.map +1 -0
- package/mcp-server/dist/tools/category.d.ts +32 -0
- package/mcp-server/dist/tools/category.d.ts.map +1 -0
- package/mcp-server/dist/tools/category.js +290 -0
- package/mcp-server/dist/tools/category.js.map +1 -0
- package/mcp-server/dist/tools/discord-channel.d.ts +44 -0
- package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-channel.js +236 -0
- package/mcp-server/dist/tools/discord-channel.js.map +1 -0
- package/mcp-server/dist/tools/discord-guild.d.ts +20 -0
- package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-guild.js +138 -0
- package/mcp-server/dist/tools/discord-guild.js.map +1 -0
- package/mcp-server/dist/tools/discord-member.d.ts +26 -0
- package/mcp-server/dist/tools/discord-member.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-member.js +122 -0
- package/mcp-server/dist/tools/discord-member.js.map +1 -0
- package/mcp-server/dist/tools/discord-message.d.ts +36 -0
- package/mcp-server/dist/tools/discord-message.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-message.js +184 -0
- package/mcp-server/dist/tools/discord-message.js.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts +32 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.js +179 -0
- package/mcp-server/dist/tools/discord-onboarding.js.map +1 -0
- package/mcp-server/dist/tools/discord-role.d.ts +34 -0
- package/mcp-server/dist/tools/discord-role.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-role.js +178 -0
- package/mcp-server/dist/tools/discord-role.js.map +1 -0
- package/mcp-server/dist/tools/discord-thread.d.ts +28 -0
- package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-thread.js +88 -0
- package/mcp-server/dist/tools/discord-thread.js.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts +32 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.js +154 -0
- package/mcp-server/dist/tools/discord-webhook.js.map +1 -0
- package/mcp-server/dist/tools/discord.d.ts +7 -0
- package/mcp-server/dist/tools/discord.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord.js +31 -0
- package/mcp-server/dist/tools/discord.js.map +1 -0
- package/mcp-server/dist/tools/forget.d.ts +14 -0
- package/mcp-server/dist/tools/forget.d.ts.map +1 -0
- package/mcp-server/dist/tools/forget.js +26 -0
- package/mcp-server/dist/tools/forget.js.map +1 -0
- package/mcp-server/dist/tools/git-tools.d.ts +24 -0
- package/mcp-server/dist/tools/git-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/git-tools.js +107 -0
- package/mcp-server/dist/tools/git-tools.js.map +1 -0
- package/mcp-server/dist/tools/git.d.ts +7 -0
- package/mcp-server/dist/tools/git.d.ts.map +1 -0
- package/mcp-server/dist/tools/git.js +9 -0
- package/mcp-server/dist/tools/git.js.map +1 -0
- package/mcp-server/dist/tools/image-tools.d.ts +24 -0
- package/mcp-server/dist/tools/image-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/image-tools.js +80 -0
- package/mcp-server/dist/tools/image-tools.js.map +1 -0
- package/mcp-server/dist/tools/image.d.ts +10 -0
- package/mcp-server/dist/tools/image.d.ts.map +1 -0
- package/mcp-server/dist/tools/image.js +12 -0
- package/mcp-server/dist/tools/image.js.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +77 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js +223 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -0
- package/mcp-server/dist/tools/leonardo.d.ts +13 -0
- package/mcp-server/dist/tools/leonardo.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo.js +19 -0
- package/mcp-server/dist/tools/leonardo.js.map +1 -0
- package/mcp-server/dist/tools/loop.d.ts +30 -0
- package/mcp-server/dist/tools/loop.d.ts.map +1 -0
- package/mcp-server/dist/tools/loop.js +302 -0
- package/mcp-server/dist/tools/loop.js.map +1 -0
- package/mcp-server/dist/tools/memories.d.ts +26 -0
- package/mcp-server/dist/tools/memories.d.ts.map +1 -0
- package/mcp-server/dist/tools/memories.js +96 -0
- package/mcp-server/dist/tools/memories.js.map +1 -0
- package/mcp-server/dist/tools/recall.d.ts +41 -0
- package/mcp-server/dist/tools/recall.d.ts.map +1 -0
- package/mcp-server/dist/tools/recall.js +275 -0
- package/mcp-server/dist/tools/recall.js.map +1 -0
- package/mcp-server/dist/tools/reflect.d.ts +44 -0
- package/mcp-server/dist/tools/reflect.d.ts.map +1 -0
- package/mcp-server/dist/tools/reflect.js +118 -0
- package/mcp-server/dist/tools/reflect.js.map +1 -0
- package/mcp-server/dist/tools/remember.d.ts +38 -0
- package/mcp-server/dist/tools/remember.d.ts.map +1 -0
- package/mcp-server/dist/tools/remember.js +88 -0
- package/mcp-server/dist/tools/remember.js.map +1 -0
- package/mcp-server/dist/tools/response.d.ts +23 -0
- package/mcp-server/dist/tools/response.d.ts.map +1 -0
- package/mcp-server/dist/tools/response.js +24 -0
- package/mcp-server/dist/tools/response.js.map +1 -0
- package/mcp-server/dist/tools/restore.d.ts +14 -0
- package/mcp-server/dist/tools/restore.d.ts.map +1 -0
- package/mcp-server/dist/tools/restore.js +23 -0
- package/mcp-server/dist/tools/restore.js.map +1 -0
- package/mcp-server/dist/tools/sync.d.ts +18 -0
- package/mcp-server/dist/tools/sync.d.ts.map +1 -0
- package/mcp-server/dist/tools/sync.js +93 -0
- package/mcp-server/dist/tools/sync.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts +18 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.js +78 -0
- package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe.d.ts +7 -0
- package/mcp-server/dist/tools/tictactoe.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe.js +9 -0
- package/mcp-server/dist/tools/tictactoe.js.map +1 -0
- package/mcp-server/dist/tools/utils.d.ts +10 -0
- package/mcp-server/dist/tools/utils.d.ts.map +1 -0
- package/mcp-server/dist/tools/utils.js +30 -0
- package/mcp-server/dist/tools/utils.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +194 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.js +198 -0
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard.d.ts +8 -0
- package/mcp-server/dist/tools/whiteboard.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard.js +14 -0
- package/mcp-server/dist/tools/whiteboard.js.map +1 -0
- package/mcp-server/dist/tui.d.ts +3 -0
- package/mcp-server/dist/tui.d.ts.map +1 -0
- package/mcp-server/dist/tui.js +807 -0
- package/mcp-server/dist/tui.js.map +1 -0
- package/mcp-server/dist/types.d.ts +77 -0
- package/mcp-server/dist/types.d.ts.map +1 -0
- package/mcp-server/dist/types.js +2 -0
- package/mcp-server/dist/types.js.map +1 -0
- package/neural-interface/public/shared/styles.css +2 -2
- package/neural-interface/public/shared/ui-settings.js +2 -2
- package/neural-interface/server.js +82 -8
- package/neural-interface/templates/CLAUDE-template.md +9 -1
- package/package.json +4 -2
- package/preuninstall.js +28 -0
- package/setup.js +86 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leonardo.ai Browser MCP tools.
|
|
3
|
+
* 100% browser-based — all interaction happens via SynaBun's browser automation.
|
|
4
|
+
* No API key required.
|
|
5
|
+
*
|
|
6
|
+
* Tools: leonardo_browser_navigate, leonardo_browser_generate, leonardo_browser_library, leonardo_browser_download, leonardo_browser_reference
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
export declare const browserNavigateSchema: {
|
|
10
|
+
page: z.ZodEnum<["home", "library", "image", "video", "upscaler", "blueprints", "flow-state", "models"]>;
|
|
11
|
+
};
|
|
12
|
+
export declare const browserNavigateDescription = "Navigate the browser to a specific Leonardo.ai page. Always use this as the first step before any browser-based generation.";
|
|
13
|
+
export declare function handleBrowserNavigate(args: {
|
|
14
|
+
page: string;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare const browserGenerateSchema: {
|
|
22
|
+
prompt: z.ZodString;
|
|
23
|
+
type: z.ZodOptional<z.ZodEnum<["image", "video"]>>;
|
|
24
|
+
};
|
|
25
|
+
export declare const browserGenerateDescription = "Fill the prompt field and click Generate on the current Leonardo.ai page. Set all other settings (model, style, dimensions, motion controls) BEFORE calling this \u2014 use browser_click, browser_fill, and browser_snapshot to configure the UI first. This tool only handles: navigate to correct page if needed \u2192 clear & fill prompt \u2192 click Generate.";
|
|
26
|
+
export declare function handleBrowserGenerate(args: {
|
|
27
|
+
prompt: string;
|
|
28
|
+
type?: string;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
content: {
|
|
31
|
+
type: "text";
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
export declare const browserLibrarySchema: {
|
|
36
|
+
action: z.ZodEnum<["view", "search"]>;
|
|
37
|
+
query: z.ZodOptional<z.ZodString>;
|
|
38
|
+
};
|
|
39
|
+
export declare const browserLibraryDescription = "Open or search Leonardo.ai's library to view past generations. Use browser_snapshot after to see results.";
|
|
40
|
+
export declare function handleBrowserLibrary(args: {
|
|
41
|
+
action: string;
|
|
42
|
+
query?: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
content: {
|
|
45
|
+
type: "text";
|
|
46
|
+
text: string;
|
|
47
|
+
}[];
|
|
48
|
+
}>;
|
|
49
|
+
export declare const browserDownloadSchema: {
|
|
50
|
+
action: z.ZodEnum<["screenshot"]>;
|
|
51
|
+
};
|
|
52
|
+
export declare const browserDownloadDescription = "Capture a screenshot of the current Leonardo.ai page. Use to verify generation results or UI state.";
|
|
53
|
+
export declare function handleBrowserDownload(args: {
|
|
54
|
+
action: string;
|
|
55
|
+
}): Promise<{
|
|
56
|
+
content: {
|
|
57
|
+
type: "text";
|
|
58
|
+
text: string;
|
|
59
|
+
}[];
|
|
60
|
+
}>;
|
|
61
|
+
export declare const browserReferenceSchema: {
|
|
62
|
+
type: z.ZodEnum<["image_ref", "style_ref", "content_ref", "character_ref", "image_to_image", "start_frame", "end_frame"]>;
|
|
63
|
+
filePaths: z.ZodArray<z.ZodString, "many">;
|
|
64
|
+
autoClear: z.ZodOptional<z.ZodBoolean>;
|
|
65
|
+
};
|
|
66
|
+
export declare const browserReferenceDescription: string;
|
|
67
|
+
export declare function handleBrowserReference(args: {
|
|
68
|
+
type: string;
|
|
69
|
+
filePaths: string[];
|
|
70
|
+
autoClear?: boolean;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
content: {
|
|
73
|
+
type: "text";
|
|
74
|
+
text: string;
|
|
75
|
+
}[];
|
|
76
|
+
}>;
|
|
77
|
+
//# sourceMappingURL=leonardo-browser-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-browser-tools.d.ts","sourceRoot":"","sources":["../../src/tools/leonardo-browser-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,qBAAqB;;CAKjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gIACwF,CAAC;AAEhI,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;GAuBjE;AAID,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,0WACmT,CAAC;AAE3V,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;;;GA4BA;AAID,eAAO,MAAM,oBAAoB;;;CAGhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,8GACwE,CAAC;AAE/G,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAiBlF;AAID,eAAO,MAAM,qBAAqB;;CAEjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,wGACgE,CAAC;AAExG,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;;;;;GAWnE;AAID,eAAO,MAAM,sBAAsB;;;;CAclC,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAI+C,CAAC;AAExF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;GA+FA"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leonardo.ai Browser MCP tools.
|
|
3
|
+
* 100% browser-based — all interaction happens via SynaBun's browser automation.
|
|
4
|
+
* No API key required.
|
|
5
|
+
*
|
|
6
|
+
* Tools: leonardo_browser_navigate, leonardo_browser_generate, leonardo_browser_library, leonardo_browser_download, leonardo_browser_reference
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import * as ni from '../services/neural-interface.js';
|
|
10
|
+
import { text } from './response.js';
|
|
11
|
+
const LEO_BASE = 'https://app.leonardo.ai';
|
|
12
|
+
// ── Helper: resolve or create session ─────────────────────────
|
|
13
|
+
async function getSession() {
|
|
14
|
+
const resolved = await ni.resolveSession(undefined, { url: LEO_BASE });
|
|
15
|
+
if ('error' in resolved)
|
|
16
|
+
return null;
|
|
17
|
+
return resolved.sessionId;
|
|
18
|
+
}
|
|
19
|
+
async function wait(ms) {
|
|
20
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
21
|
+
}
|
|
22
|
+
// ── Browser Navigate ──────────────────────────────────────────
|
|
23
|
+
export const browserNavigateSchema = {
|
|
24
|
+
page: z.enum([
|
|
25
|
+
'home', 'library', 'image', 'video', 'upscaler',
|
|
26
|
+
'blueprints', 'flow-state', 'models',
|
|
27
|
+
]).describe('Leonardo.ai page to navigate to.'),
|
|
28
|
+
};
|
|
29
|
+
export const browserNavigateDescription = 'Navigate the browser to a specific Leonardo.ai page. Always use this as the first step before any browser-based generation.';
|
|
30
|
+
export async function handleBrowserNavigate(args) {
|
|
31
|
+
const sessionId = await getSession();
|
|
32
|
+
if (!sessionId)
|
|
33
|
+
return text('No browser session available. Open Leonardo.ai in the browser first using browser_navigate or the Apps menu.');
|
|
34
|
+
const paths = {
|
|
35
|
+
'home': '/',
|
|
36
|
+
'library': '/library',
|
|
37
|
+
'image': '/image-generation',
|
|
38
|
+
'video': '/image-generation/video',
|
|
39
|
+
'upscaler': '/universal-upscaler',
|
|
40
|
+
'blueprints': '/blueprints',
|
|
41
|
+
'flow-state': '/flow-state',
|
|
42
|
+
'models': '/models-training',
|
|
43
|
+
};
|
|
44
|
+
const path = paths[args.page] || '/';
|
|
45
|
+
const res = await ni.navigate(sessionId, `${LEO_BASE}${path}`);
|
|
46
|
+
if (res.error)
|
|
47
|
+
return text(`Navigation failed: ${res.error}`);
|
|
48
|
+
// Wait for page to settle
|
|
49
|
+
await wait(3000);
|
|
50
|
+
return text(`Navigated to Leonardo.ai ${args.page} page (${LEO_BASE}${path}). Use browser_snapshot to see the current UI state.`);
|
|
51
|
+
}
|
|
52
|
+
// ── Browser Generate (full UI automation) ─────────────────────
|
|
53
|
+
export const browserGenerateSchema = {
|
|
54
|
+
prompt: z.string().describe('The generation prompt to type into Leonardo.ai.'),
|
|
55
|
+
type: z.enum(['image', 'video']).optional().describe('Generation type. Default: image.'),
|
|
56
|
+
};
|
|
57
|
+
export const browserGenerateDescription = 'Fill the prompt field and click Generate on the current Leonardo.ai page. Set all other settings (model, style, dimensions, motion controls) BEFORE calling this — use browser_click, browser_fill, and browser_snapshot to configure the UI first. This tool only handles: navigate to correct page if needed → clear & fill prompt → click Generate.';
|
|
58
|
+
export async function handleBrowserGenerate(args) {
|
|
59
|
+
const sessionId = await getSession();
|
|
60
|
+
if (!sessionId)
|
|
61
|
+
return text('No browser session available. Open Leonardo.ai first.');
|
|
62
|
+
const genType = args.type || 'image';
|
|
63
|
+
// Check current URL — navigate only if not already on the right page
|
|
64
|
+
const snapshot = await ni.snapshot(sessionId);
|
|
65
|
+
const currentUrl = snapshot?.url || '';
|
|
66
|
+
const targetPath = genType === 'video' ? '/image-generation/video' : '/image-generation';
|
|
67
|
+
if (!currentUrl.includes(targetPath)) {
|
|
68
|
+
const navRes = await ni.navigate(sessionId, `${LEO_BASE}${targetPath}`);
|
|
69
|
+
if (navRes.error)
|
|
70
|
+
return text(`Navigation failed: ${navRes.error}`);
|
|
71
|
+
await wait(3000);
|
|
72
|
+
}
|
|
73
|
+
// Clear and fill the prompt textbox
|
|
74
|
+
const fillRes = await ni.fill(sessionId, '[aria-label="Prompt"], textbox[name="Prompt"], textarea', args.prompt);
|
|
75
|
+
if (fillRes.error)
|
|
76
|
+
return text(`Failed to fill prompt: ${fillRes.error}`);
|
|
77
|
+
await wait(500);
|
|
78
|
+
// Click the Generate button
|
|
79
|
+
const clickRes = await ni.click(sessionId, 'button[aria-label="Generate"], button:has-text("Generate")');
|
|
80
|
+
if (clickRes.error)
|
|
81
|
+
return text(`Failed to click Generate: ${clickRes.error}`);
|
|
82
|
+
return text(`Generation started (${genType}).\n\nPrompt: "${args.prompt.substring(0, 120)}${args.prompt.length > 120 ? '...' : ''}"\n\nThe generation is processing in Leonardo.ai. Use browser_snapshot or browser_screenshot to check progress and see results. Results also appear in the library.`);
|
|
83
|
+
}
|
|
84
|
+
// ── Browser Library ───────────────────────────────────────────
|
|
85
|
+
export const browserLibrarySchema = {
|
|
86
|
+
action: z.enum(['view', 'search']).describe('Action: view (open library) or search (search for a term).'),
|
|
87
|
+
query: z.string().optional().describe('Search query (for search action).'),
|
|
88
|
+
};
|
|
89
|
+
export const browserLibraryDescription = 'Open or search Leonardo.ai\'s library to view past generations. Use browser_snapshot after to see results.';
|
|
90
|
+
export async function handleBrowserLibrary(args) {
|
|
91
|
+
const sessionId = await getSession();
|
|
92
|
+
if (!sessionId)
|
|
93
|
+
return text('No browser session available.');
|
|
94
|
+
const navRes = await ni.navigate(sessionId, `${LEO_BASE}/library`);
|
|
95
|
+
if (navRes.error)
|
|
96
|
+
return text(`Navigation failed: ${navRes.error}`);
|
|
97
|
+
await wait(2000);
|
|
98
|
+
if (args.action === 'search' && args.query) {
|
|
99
|
+
const fillRes = await ni.fill(sessionId, 'input[placeholder*="Search" i]', args.query);
|
|
100
|
+
if (fillRes.error)
|
|
101
|
+
return text(`Failed to search: ${fillRes.error}`);
|
|
102
|
+
await ni.pressKey(sessionId, 'Enter');
|
|
103
|
+
return text(`Searched Leonardo.ai library for: "${args.query}". Use browser_snapshot to see results.`);
|
|
104
|
+
}
|
|
105
|
+
return text('Leonardo.ai library opened. Use browser_snapshot to see recent generations.');
|
|
106
|
+
}
|
|
107
|
+
// ── Browser Download / Screenshot ─────────────────────────────
|
|
108
|
+
export const browserDownloadSchema = {
|
|
109
|
+
action: z.enum(['screenshot']).describe('Action: screenshot (capture current Leonardo.ai page state).'),
|
|
110
|
+
};
|
|
111
|
+
export const browserDownloadDescription = 'Capture a screenshot of the current Leonardo.ai page. Use to verify generation results or UI state.';
|
|
112
|
+
export async function handleBrowserDownload(args) {
|
|
113
|
+
const sessionId = await getSession();
|
|
114
|
+
if (!sessionId)
|
|
115
|
+
return text('No browser session available.');
|
|
116
|
+
if (args.action === 'screenshot') {
|
|
117
|
+
const res = await ni.screenshot(sessionId);
|
|
118
|
+
if (res.error)
|
|
119
|
+
return text(`Screenshot failed: ${res.error}`);
|
|
120
|
+
return text('Screenshot captured of the current Leonardo.ai page.');
|
|
121
|
+
}
|
|
122
|
+
return text(`Unknown action: ${args.action}`);
|
|
123
|
+
}
|
|
124
|
+
// ── Browser Reference (upload reference images) ──────────────
|
|
125
|
+
export const browserReferenceSchema = {
|
|
126
|
+
type: z.enum([
|
|
127
|
+
'image_ref', 'style_ref', 'content_ref', 'character_ref',
|
|
128
|
+
'image_to_image', 'start_frame', 'end_frame',
|
|
129
|
+
]).describe('Reference type. Image generation: image_ref, style_ref, content_ref, character_ref, image_to_image. ' +
|
|
130
|
+
'Video generation: start_frame, end_frame. Availability depends on the selected model — check the model advisor.'),
|
|
131
|
+
filePaths: z.array(z.string()).describe('Absolute file paths of images to upload as reference. Get paths from image_staged tool or from user-attached images.'),
|
|
132
|
+
autoClear: z.boolean().optional().describe('Auto-delete the source images from data/images/ after successful upload. Default: true.'),
|
|
133
|
+
};
|
|
134
|
+
export const browserReferenceDescription = 'Upload reference image(s) to Leonardo.ai for guided generation. Supports image references, style/content/character references, ' +
|
|
135
|
+
'image-to-image, and video start/end frames. Must be called AFTER selecting a model (reference type availability is model-dependent) ' +
|
|
136
|
+
'and BEFORE calling leonardo_browser_generate. Uses browser automation to click the reference panel, upload the file(s), and confirm. ' +
|
|
137
|
+
'By default, auto-clears uploaded images from the SynaBun image store after success.';
|
|
138
|
+
export async function handleBrowserReference(args) {
|
|
139
|
+
const sessionId = await getSession();
|
|
140
|
+
if (!sessionId)
|
|
141
|
+
return text('No browser session available. Open Leonardo.ai first.');
|
|
142
|
+
const { type, filePaths, autoClear = true } = args;
|
|
143
|
+
const isVideo = type === 'start_frame' || type === 'end_frame';
|
|
144
|
+
// Step 1: Open the reference panel
|
|
145
|
+
let openResult;
|
|
146
|
+
if (isVideo) {
|
|
147
|
+
// Video: click "Add Image Guidance to generation" button
|
|
148
|
+
openResult = await ni.evaluate(sessionId, `(() => {
|
|
149
|
+
const btns = document.querySelectorAll('button');
|
|
150
|
+
for (const b of btns) {
|
|
151
|
+
if (b.textContent.includes('Image Guidance') || b.textContent.includes('Add Image')) {
|
|
152
|
+
b.click(); return 'opened';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return 'not found';
|
|
156
|
+
})()`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Image: click "Add elements" button
|
|
160
|
+
openResult = await ni.evaluate(sessionId, `(() => {
|
|
161
|
+
const btns = document.querySelectorAll('button');
|
|
162
|
+
for (const b of btns) {
|
|
163
|
+
if (b.textContent.includes('Add elements') || b.textContent.includes('Add Elements')) {
|
|
164
|
+
b.click(); return 'opened';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return 'not found';
|
|
168
|
+
})()`);
|
|
169
|
+
}
|
|
170
|
+
if (openResult.error)
|
|
171
|
+
return text(`Failed to open reference panel: ${openResult.error}`);
|
|
172
|
+
await wait(1500);
|
|
173
|
+
// Step 2: For image references, click the specific reference type tab/button
|
|
174
|
+
if (!isVideo) {
|
|
175
|
+
const typeLabels = {
|
|
176
|
+
'image_ref': ['Image Reference', 'Image Ref', 'Image Input'],
|
|
177
|
+
'style_ref': ['Style Reference', 'Style Ref'],
|
|
178
|
+
'content_ref': ['Content Reference', 'Content Ref'],
|
|
179
|
+
'character_ref': ['Character Reference', 'Character Ref'],
|
|
180
|
+
'image_to_image': ['Image to Image', 'Img2Img'],
|
|
181
|
+
};
|
|
182
|
+
const labels = typeLabels[type] || [type];
|
|
183
|
+
const labelSearch = labels.map(l => `b.textContent.includes('${l}')`).join(' || ');
|
|
184
|
+
const selectResult = await ni.evaluate(sessionId, `(() => {
|
|
185
|
+
const btns = document.querySelectorAll('button, [role="tab"], [role="menuitem"]');
|
|
186
|
+
for (const b of btns) {
|
|
187
|
+
if (${labelSearch}) { b.click(); return 'selected'; }
|
|
188
|
+
}
|
|
189
|
+
return 'not found — use browser_snapshot to see available options';
|
|
190
|
+
})()`);
|
|
191
|
+
if (selectResult.error)
|
|
192
|
+
return text(`Failed to select reference type: ${selectResult.error}. Use browser_snapshot to see the panel.`);
|
|
193
|
+
await wait(1000);
|
|
194
|
+
}
|
|
195
|
+
// Step 3: Find file input and upload
|
|
196
|
+
const uploadResult = await ni.upload(sessionId, 'input[type="file"]', filePaths);
|
|
197
|
+
if (uploadResult.error) {
|
|
198
|
+
// Fallback: try broader selector
|
|
199
|
+
const fallback = await ni.upload(sessionId, 'input[accept*="image"]', filePaths);
|
|
200
|
+
if (fallback.error) {
|
|
201
|
+
return text(`Failed to upload reference image(s): ${uploadResult.error}. ` +
|
|
202
|
+
`The file input may not be visible yet — try browser_snapshot to inspect the panel, ` +
|
|
203
|
+
`then use browser_upload manually with the correct selector.`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
await wait(1000);
|
|
207
|
+
// Step 4: Auto-clear source images if requested
|
|
208
|
+
if (autoClear) {
|
|
209
|
+
const { basename } = await import('path');
|
|
210
|
+
for (const fp of filePaths) {
|
|
211
|
+
const filename = basename(fp);
|
|
212
|
+
try {
|
|
213
|
+
await ni.deleteImage(filename);
|
|
214
|
+
}
|
|
215
|
+
catch { /* ignore cleanup errors */ }
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const typeLabel = type.replace(/_/g, ' ');
|
|
219
|
+
return text(`Reference uploaded (${typeLabel}): ${filePaths.length} image(s).\n` +
|
|
220
|
+
`${autoClear ? 'Source images auto-cleared from store.\n' : ''}` +
|
|
221
|
+
`Use browser_snapshot to verify the reference is applied, then proceed with leonardo_browser_generate.`);
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=leonardo-browser-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-browser-tools.js","sourceRoot":"","sources":["../../src/tools/leonardo-browser-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,iEAAiE;AAEjE,KAAK,UAAU,UAAU;IACvB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,iEAAiE;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU;QAC/C,YAAY,EAAE,YAAY,EAAE,QAAQ;KAC5B,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GACrC,6HAA6H,CAAC;AAEhI,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAsB;IAChE,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,8GAA8G,CAAC,CAAC;IAE5I,MAAM,KAAK,GAA2B;QACpC,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,yBAAyB;QAClC,UAAU,EAAE,qBAAqB;QACjC,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,aAAa;QAC3B,QAAQ,EAAE,kBAAkB;KAC7B,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAE9D,0BAA0B;IAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI,UAAU,QAAQ,GAAG,IAAI,sDAAsD,CAAC,CAAC;AACpI,CAAC;AAED,iEAAiE;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAClG,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GACrC,wVAAwV,CAAC;AAE3V,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAG3C;IACC,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAErF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC;IAErC,qEAAqE;IACrE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAI,QAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAEzF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,yDAAyD,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjH,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,0BAA0B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1E,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,4DAA4D,CAAC,CAAC;IACzG,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,6BAA6B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/E,OAAO,IAAI,CAAC,uBAAuB,OAAO,kBAAkB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qKAAqK,CAAC,CAAC;AAC1S,CAAC;AAED,iEAAiE;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAClH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GACpC,4GAA4G,CAAC;AAE/G,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAwC;IACjF,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAEpE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,qBAAqB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,yCAAyC,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,IAAI,CAAC,6EAA6E,CAAC,CAAC;AAC7F,CAAC;AAED,iEAAiE;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAU,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;CACjH,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GACrC,qGAAqG,CAAC;AAExG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAwB;IAClE,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,gEAAgE;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe;QACxD,gBAAgB,EAAE,aAAa,EAAE,WAAW;KACpC,CAAC,CAAC,QAAQ,CAClB,sGAAsG;QACtG,iHAAiH,CAClH;IACD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CACrC,sHAAsH,CACvH;IACD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACxC,yFAAyF,CAC1F;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GACtC,iIAAiI;IACjI,sIAAsI;IACtI,uIAAuI;IACvI,qFAAqF,CAAC;AAExF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAI5C;IACC,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAErF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,WAAW,CAAC;IAE/D,mCAAmC;IACnC,IAAI,UAA8B,CAAC;IAEnC,IAAI,OAAO,EAAE,CAAC;QACZ,yDAAyD;QACzD,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;;;;;;;;SAQrC,CAAC,CAAC;IACT,CAAC;SAAM,CAAC;QACN,qCAAqC;QACrC,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;;;;;;;;SAQrC,CAAC,CAAC;IACT,CAAC;IAED,IAAI,UAAU,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,mCAAmC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,6EAA6E;IAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAA6B;YAC3C,WAAW,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,aAAa,CAAC;YAC5D,WAAW,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC;YAC7C,aAAa,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC;YACnD,eAAe,EAAE,CAAC,qBAAqB,EAAE,eAAe,CAAC;YACzD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAChD,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnF,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;;;cAGxC,WAAW;;;SAGhB,CAAC,CAAC;QAEP,IAAI,YAAY,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,oCAAoC,YAAY,CAAC,KAAK,0CAA0C,CAAC,CAAC;QACtI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;IACjF,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,IAAI,CACT,wCAAwC,YAAY,CAAC,KAAK,IAAI;gBAC9D,qFAAqF;gBACrF,6DAA6D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,gDAAgD;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,IAAI,CACT,uBAAuB,SAAS,MAAM,SAAS,CAAC,MAAM,cAAc;QACpE,GAAG,SAAS,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,EAAE,EAAE;QAChE,uGAAuG,CACxG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leonardo.ai MCP tool registration barrel.
|
|
3
|
+
* 100% browser-based — no API key required.
|
|
4
|
+
* Registers 4 Leonardo browser tools on the given server instance.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register all Leonardo.ai MCP tools on the given server instance.
|
|
9
|
+
* These are browser-based tools that automate the Leonardo.ai web UI.
|
|
10
|
+
* Use the /leonardo skill for the full guided creation experience.
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerLeonardoTools(server: McpServer): void;
|
|
13
|
+
//# sourceMappingURL=leonardo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo.d.ts","sourceRoot":"","sources":["../../src/tools/leonardo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAMtD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leonardo.ai MCP tool registration barrel.
|
|
3
|
+
* 100% browser-based — no API key required.
|
|
4
|
+
* Registers 4 Leonardo browser tools on the given server instance.
|
|
5
|
+
*/
|
|
6
|
+
import { browserNavigateSchema, browserNavigateDescription, handleBrowserNavigate, browserGenerateSchema, browserGenerateDescription, handleBrowserGenerate, browserLibrarySchema, browserLibraryDescription, handleBrowserLibrary, browserDownloadSchema, browserDownloadDescription, handleBrowserDownload, browserReferenceSchema, browserReferenceDescription, handleBrowserReference, } from './leonardo-browser-tools.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register all Leonardo.ai MCP tools on the given server instance.
|
|
9
|
+
* These are browser-based tools that automate the Leonardo.ai web UI.
|
|
10
|
+
* Use the /leonardo skill for the full guided creation experience.
|
|
11
|
+
*/
|
|
12
|
+
export function registerLeonardoTools(server) {
|
|
13
|
+
server.tool('leonardo_browser_navigate', browserNavigateDescription, browserNavigateSchema, handleBrowserNavigate);
|
|
14
|
+
server.tool('leonardo_browser_generate', browserGenerateDescription, browserGenerateSchema, handleBrowserGenerate);
|
|
15
|
+
server.tool('leonardo_browser_library', browserLibraryDescription, browserLibrarySchema, handleBrowserLibrary);
|
|
16
|
+
server.tool('leonardo_browser_download', browserDownloadDescription, browserDownloadSchema, handleBrowserDownload);
|
|
17
|
+
server.tool('leonardo_browser_reference', browserReferenceDescription, browserReferenceSchema, handleBrowserReference);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=leonardo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo.js","sourceRoot":"","sources":["../../src/tools/leonardo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB,EACxE,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB,EACxE,oBAAoB,EAAE,yBAAyB,EAAE,oBAAoB,EACrE,qBAAqB,EAAE,0BAA0B,EAAE,qBAAqB,EACxE,sBAAsB,EAAE,2BAA2B,EAAE,sBAAsB,GAC5E,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACnH,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACnH,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IAC/G,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACnH,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;AACzH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const loopSchema: {
|
|
3
|
+
action: z.ZodEnum<["start", "stop", "status", "update"]>;
|
|
4
|
+
task: z.ZodOptional<z.ZodString>;
|
|
5
|
+
iterations: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
max_minutes: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
context: z.ZodOptional<z.ZodString>;
|
|
8
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
9
|
+
template: z.ZodOptional<z.ZodString>;
|
|
10
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
11
|
+
progress: z.ZodOptional<z.ZodString>;
|
|
12
|
+
};
|
|
13
|
+
export declare const loopDescription = "Autonomous loop control. Start a repeating task loop, check status, update progress journal, or stop it. The Stop hook drives iteration. Call \"update\" after each iteration with a brief summary to maintain context across compactions.";
|
|
14
|
+
export declare function handleLoop(args: {
|
|
15
|
+
action: string;
|
|
16
|
+
task?: string;
|
|
17
|
+
iterations?: number;
|
|
18
|
+
max_minutes?: number;
|
|
19
|
+
context?: string;
|
|
20
|
+
session_id?: string;
|
|
21
|
+
template?: string;
|
|
22
|
+
summary?: string;
|
|
23
|
+
progress?: string;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/tools/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyExB,eAAO,MAAM,UAAU;;;;;;;;;;CAoCtB,CAAC;AAEF,eAAO,MAAM,eAAe,+OACgN,CAAC;AAoN7O,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;;;;;GAaA"}
|