@migma/mcp 1.3.1 → 1.3.2
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/build/prompts/index.js +5 -5
- package/build/prompts/index.js.map +1 -1
- package/build/tools/__tests__/email-images.test.d.ts +2 -0
- package/build/tools/__tests__/email-images.test.d.ts.map +1 -0
- package/build/tools/__tests__/email-images.test.js +93 -0
- package/build/tools/__tests__/email-images.test.js.map +1 -0
- package/build/tools/capabilities.js +6 -6
- package/build/tools/capabilities.js.map +1 -1
- package/build/tools/email-images.d.ts +30 -0
- package/build/tools/email-images.d.ts.map +1 -0
- package/build/tools/email-images.js +160 -0
- package/build/tools/email-images.js.map +1 -0
- package/build/tools/generate.d.ts.map +1 -1
- package/build/tools/generate.js +23 -9
- package/build/tools/generate.js.map +1 -1
- package/package.json +1 -1
package/build/prompts/index.js
CHANGED
|
@@ -10,8 +10,8 @@ export const WORKFLOWS = [
|
|
|
10
10
|
steps: [
|
|
11
11
|
"migma_get_capabilities — see available tools and the idempotency contract.",
|
|
12
12
|
"migma_generate_email — start generation; keep conversationId.",
|
|
13
|
-
"migma_get_generation_status — poll until completed. Or migma_list_emails to see designs already in the project.",
|
|
14
|
-
"migma_send_test_email — send a test to yourself
|
|
13
|
+
"migma_get_generation_status — poll until completed, then show the preview images. Or migma_list_emails to see designs already in the project.",
|
|
14
|
+
"migma_send_test_email — send a test to yourself after reviewing the images.",
|
|
15
15
|
"migma_list_domains + migma_list_segments / migma_list_tags — pick the sender and audience.",
|
|
16
16
|
"migma_create_campaign — create a draft campaign from the generated email.",
|
|
17
17
|
"migma_send_campaign — send it (pass idempotency_key, e.g. campaign-send-<campaignId>, for safe retries).",
|
|
@@ -24,7 +24,7 @@ export const WORKFLOWS = [
|
|
|
24
24
|
steps: [
|
|
25
25
|
"migma_get_field_catalog — discover which subscriber fields exist and how often they're populated.",
|
|
26
26
|
"migma_create_segment — create a segment using those fields as filters.",
|
|
27
|
-
"migma_generate_email — start generation; poll migma_get_generation_status.",
|
|
27
|
+
"migma_generate_email — start generation; poll migma_get_generation_status and show the preview images.",
|
|
28
28
|
"migma_create_campaign — create a campaign targeting the new segment.",
|
|
29
29
|
"migma_send_campaign — send the campaign (use an idempotency_key for safe retries).",
|
|
30
30
|
"migma_get_campaign_stats — read the campaign results.",
|
|
@@ -36,8 +36,8 @@ export const WORKFLOWS = [
|
|
|
36
36
|
steps: [
|
|
37
37
|
"migma_import_brand — import the brand from one or more website URLs.",
|
|
38
38
|
"migma_get_project — confirm the extracted colors, fonts, logos, and tone.",
|
|
39
|
-
"migma_generate_email — start generation; poll migma_get_generation_status.",
|
|
40
|
-
"migma_send_test_email — send a test
|
|
39
|
+
"migma_generate_email — start generation; poll migma_get_generation_status and show the preview images.",
|
|
40
|
+
"migma_send_test_email — send a test after reviewing the images.",
|
|
41
41
|
],
|
|
42
42
|
},
|
|
43
43
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EACL,mGAAmG;QACrG,KAAK,EAAE;YACL,4EAA4E;YAC5E,+DAA+D;YAC/D
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EACL,mGAAmG;QACrG,KAAK,EAAE;YACL,4EAA4E;YAC5E,+DAA+D;YAC/D,+IAA+I;YAC/I,6EAA6E;YAC7E,4FAA4F;YAC5F,2EAA2E;YAC3E,0GAA0G;YAC1G,kEAAkE;SACnE;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EACL,+FAA+F;QACjG,KAAK,EAAE;YACL,mGAAmG;YACnG,wEAAwE;YACxE,wGAAwG;YACxG,sEAAsE;YACtE,oFAAoF;YACpF,uDAAuD;SACxD;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,4EAA4E;QAC9E,KAAK,EAAE;YACL,sEAAsE;YACtE,2EAA2E;YAC3E,wGAAwG;YACxG,iEAAiE;SAClE;KACF;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,+BAA+B,QAAQ,CAAC,IAAI,eAAe,QAAQ,CAAC,OAAO,mCAAmC,SAAS,uIAAuI;iBACrQ;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,QAAQ,CAAC,IAAI,EACb;YACE,KAAK,EAAE,QAAQ,CAAC,IAAI;iBACjB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,GAAG,CAAC;YACZ,WAAW,EAAE,QAAQ,CAAC,OAAO;SAC9B,EACD,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-images.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/email-images.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { collectScreenshotRefs, fetchEmailImage, isAllowedScreenshotUrl, screenshotGuidance, toolResultWithImages, } from "../email-images.js";
|
|
4
|
+
test("allows only https Migma CDN and S3 screenshot hosts", () => {
|
|
5
|
+
assert.equal(isAllowedScreenshotUrl("https://cdn.migma.ai/shot.png"), true);
|
|
6
|
+
assert.equal(isAllowedScreenshotUrl("https://migmaa-sandbox.s3.amazonaws.com/shot.png"), true);
|
|
7
|
+
assert.equal(isAllowedScreenshotUrl("https://d111111abcdef8.cloudfront.net/shot.png"), true);
|
|
8
|
+
assert.equal(isAllowedScreenshotUrl("http://cdn.migma.ai/shot.png"), false);
|
|
9
|
+
assert.equal(isAllowedScreenshotUrl("https://evil.example/shot.png"), false);
|
|
10
|
+
assert.equal(isAllowedScreenshotUrl("https://127.0.0.1/shot.png"), false);
|
|
11
|
+
assert.equal(isAllowedScreenshotUrl("not-a-url"), false);
|
|
12
|
+
});
|
|
13
|
+
test("collects list thumbs and detail slot shots", () => {
|
|
14
|
+
const list = collectScreenshotRefs({
|
|
15
|
+
emails: [
|
|
16
|
+
{
|
|
17
|
+
title: "Welcome",
|
|
18
|
+
subject: "Hi",
|
|
19
|
+
screenshotUrl: "https://cdn.migma.ai/a.png",
|
|
20
|
+
},
|
|
21
|
+
{ title: "No shot", screenshotUrl: null },
|
|
22
|
+
{
|
|
23
|
+
title: "Blocked",
|
|
24
|
+
screenshotUrl: "https://evil.example/x.png",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
}, "list");
|
|
28
|
+
assert.deepEqual(list, [
|
|
29
|
+
{ url: "https://cdn.migma.ai/a.png", label: "Hi" },
|
|
30
|
+
]);
|
|
31
|
+
const status = collectScreenshotRefs({
|
|
32
|
+
status: "completed",
|
|
33
|
+
result: {
|
|
34
|
+
emails: [
|
|
35
|
+
{
|
|
36
|
+
subject: "One",
|
|
37
|
+
slot: 1,
|
|
38
|
+
screenshotUrl: "https://cdn.migma.ai/one.png",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
subject: "Two",
|
|
42
|
+
slot: 2,
|
|
43
|
+
thumbnailUrl: "https://cdn.migma.ai/two.png",
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
}, "detail");
|
|
48
|
+
assert.equal(status.length, 2);
|
|
49
|
+
assert.equal(status[0]?.label, "One");
|
|
50
|
+
const one = collectScreenshotRefs({
|
|
51
|
+
subject: "Solo",
|
|
52
|
+
screenshotUrl: "https://cdn.migma.ai/solo.png",
|
|
53
|
+
}, "detail");
|
|
54
|
+
assert.deepEqual(one, [
|
|
55
|
+
{ url: "https://cdn.migma.ai/solo.png", label: "Solo" },
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
58
|
+
test("guidance tells the agent to show images or poll", () => {
|
|
59
|
+
assert.match(screenshotGuidance([{ url: "https://cdn.migma.ai/a.png", label: "A" }], 1, {}), /Show these email preview images/);
|
|
60
|
+
assert.match(screenshotGuidance([], 0, { status: "completed" }), /still rendering/);
|
|
61
|
+
assert.equal(screenshotGuidance([], 0, { status: "pending" }), "");
|
|
62
|
+
});
|
|
63
|
+
test("fetchEmailImage skips disallowed hosts and oversized bodies", async () => {
|
|
64
|
+
const blocked = await fetchEmailImage("https://evil.example/x.png");
|
|
65
|
+
assert.equal(blocked, null);
|
|
66
|
+
const png = Buffer.from([0x89, 0x50, 0x4e, 0x47]);
|
|
67
|
+
const image = await fetchEmailImage("https://cdn.migma.ai/a.png", async () => ({
|
|
68
|
+
ok: true,
|
|
69
|
+
headers: { get: () => "image/png" },
|
|
70
|
+
arrayBuffer: async () => png.buffer.slice(png.byteOffset, png.byteOffset + png.byteLength),
|
|
71
|
+
}));
|
|
72
|
+
assert.equal(image?.type, "image");
|
|
73
|
+
assert.equal(image?.mimeType, "image/png");
|
|
74
|
+
assert.equal(image?.data, png.toString("base64"));
|
|
75
|
+
});
|
|
76
|
+
test("toolResultWithImages puts image content before JSON", async () => {
|
|
77
|
+
const png = Buffer.from("img");
|
|
78
|
+
const result = await toolResultWithImages({
|
|
79
|
+
subject: "Hi",
|
|
80
|
+
screenshotUrl: "https://cdn.migma.ai/a.png",
|
|
81
|
+
}, "detail", async () => ({
|
|
82
|
+
ok: true,
|
|
83
|
+
headers: { get: () => "image/png" },
|
|
84
|
+
arrayBuffer: async () => png.buffer.slice(png.byteOffset, png.byteOffset + png.byteLength),
|
|
85
|
+
}));
|
|
86
|
+
assert.equal(result.content[0]?.type, "text");
|
|
87
|
+
assert.match(result.content[0].text, /Show these email preview images/);
|
|
88
|
+
assert.equal(result.content[1]?.type, "image");
|
|
89
|
+
const last = result.content[result.content.length - 1];
|
|
90
|
+
assert.equal(last?.type, "text");
|
|
91
|
+
assert.match(last.text, /"subject": "Hi"/);
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=email-images.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-images.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/email-images.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,12 +13,12 @@ export const TOOL_CATALOG = [
|
|
|
13
13
|
{ name: "migma_import_brand", domain: "projects", summary: "Import a brand from website URLs and poll until the import completes.", write: true, idempotent: false },
|
|
14
14
|
{ name: "migma_get_field_catalog", domain: "projects", summary: "List subscriber fields, fill rates, and example values for template variables.", write: false, idempotent: false },
|
|
15
15
|
// Email generation
|
|
16
|
-
{ name: "migma_generate_email", domain: "emails", summary: "Start email generation;
|
|
17
|
-
{ name: "migma_get_generation_status", domain: "emails", summary: "Poll a generation by conversationId
|
|
18
|
-
{ name: "migma_list_emails", domain: "emails", summary: "List generated email designs
|
|
16
|
+
{ name: "migma_generate_email", domain: "emails", summary: "Start email generation; optional reference images or referenceId. Returns conversationId. Poll migma_get_generation_status.", write: true, idempotent: false },
|
|
17
|
+
{ name: "migma_get_generation_status", domain: "emails", summary: "Poll a generation by conversationId. Completed results include preview images to show the user.", write: false, idempotent: false },
|
|
18
|
+
{ name: "migma_list_emails", domain: "emails", summary: "List generated email designs with preview images. Not campaigns.", write: false, idempotent: false },
|
|
19
19
|
{ name: "migma_send_test_email", domain: "emails", summary: "Send a test email for a generated email id or single-email conversation.", write: true, idempotent: false },
|
|
20
|
-
{ name: "migma_get_email", domain: "emails", summary: "Fetch one generated email by emailId with HTML, subject,
|
|
21
|
-
{ name: "migma_edit_email", domain: "emails", summary: "Edit a generated email with a natural-language prompt; returns the new version.", write: true, idempotent: false },
|
|
20
|
+
{ name: "migma_get_email", domain: "emails", summary: "Fetch one generated email by emailId with a preview image, HTML, subject, and variable requirements.", write: false, idempotent: false },
|
|
21
|
+
{ name: "migma_edit_email", domain: "emails", summary: "Edit a generated email with a natural-language prompt; returns a preview image of the new version.", write: true, idempotent: false },
|
|
22
22
|
{ name: "migma_get_email_metrics", domain: "emails", summary: "Aggregate performance for one generated email across its API sends: delivery, opens, clicks, bounces, unsubscribes + time series.", write: false, idempotent: false },
|
|
23
23
|
{ name: "migma_get_email_logs", domain: "emails", summary: "Per-recipient send log for one generated email, cursor-paginated.", write: false, idempotent: false },
|
|
24
24
|
// Sending
|
|
@@ -88,7 +88,7 @@ export function registerCapabilitiesTool(server) {
|
|
|
88
88
|
server: "migma",
|
|
89
89
|
version,
|
|
90
90
|
brandScoping: "API key is account-scoped; pass projectId per tool (or set MIGMA_PROJECT_ID). Resources in another project return 404.",
|
|
91
|
-
emailsVsCampaigns: "Designed emails = migma_list_emails / migma_get_generation_status. Audience sends = migma_list_campaigns. migma_get_project is brand only — ignore templateCount.",
|
|
91
|
+
emailsVsCampaigns: "Designed emails = migma_list_emails / migma_get_generation_status. Audience sends = migma_list_campaigns. migma_get_project is brand only — ignore templateCount. List, get, status, and edit return preview images — show them to the user.",
|
|
92
92
|
idempotency: {
|
|
93
93
|
header: "Idempotency-Key",
|
|
94
94
|
maxLength: 100,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAUhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAuB;IAC9C,oBAAoB;IACpB,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,sEAAsE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;IACrK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,8FAA8F,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;IAC3L,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,uEAAuE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;IACpK,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,gFAAgF,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;IAEnL,mBAAmB;IACnB,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type ScreenshotRef = {
|
|
2
|
+
url: string;
|
|
3
|
+
label: string;
|
|
4
|
+
};
|
|
5
|
+
export type ImageContent = {
|
|
6
|
+
type: "image";
|
|
7
|
+
data: string;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
};
|
|
10
|
+
export type TextContent = {
|
|
11
|
+
type: "text";
|
|
12
|
+
text: string;
|
|
13
|
+
};
|
|
14
|
+
export type FetchLike = (input: string, init?: {
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
}) => Promise<{
|
|
17
|
+
ok: boolean;
|
|
18
|
+
headers: {
|
|
19
|
+
get(name: string): string | null;
|
|
20
|
+
};
|
|
21
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function isAllowedScreenshotUrl(url: string): boolean;
|
|
24
|
+
export declare function collectScreenshotRefs(data: unknown, mode: "list" | "detail"): ScreenshotRef[];
|
|
25
|
+
export declare function screenshotGuidance(refs: ScreenshotRef[], attached: number, data: unknown): string;
|
|
26
|
+
export declare function fetchEmailImage(url: string, fetchImpl?: FetchLike): Promise<ImageContent | null>;
|
|
27
|
+
export declare function toolResultWithImages(data: unknown, mode: "list" | "detail", fetchImpl?: FetchLike): Promise<{
|
|
28
|
+
content: Array<TextContent | ImageContent>;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=email-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-images.d.ts","sourceRoot":"","sources":["../../src/tools/email-images.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC5B,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC,CAAC;AAYH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAkB3D;AA2BD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GACtB,aAAa,EAAE,CAiCjB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,EAAE,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,MAAM,CAUR;AAiBD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmB9B;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GAAG,QAAQ,EACvB,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAA;CAAE,CAAC,CA0BzD"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
const MAX_IMAGE_BYTES = 1_500_000;
|
|
2
|
+
const LIST_IMAGE_CAP = 5;
|
|
3
|
+
const DETAIL_IMAGE_CAP = 8;
|
|
4
|
+
const FETCH_MS = 8_000;
|
|
5
|
+
function asRecord(value) {
|
|
6
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
7
|
+
? value
|
|
8
|
+
: null;
|
|
9
|
+
}
|
|
10
|
+
function asString(value) {
|
|
11
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
12
|
+
}
|
|
13
|
+
export function isAllowedScreenshotUrl(url) {
|
|
14
|
+
let parsed;
|
|
15
|
+
try {
|
|
16
|
+
parsed = new URL(url);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (parsed.protocol !== "https:")
|
|
22
|
+
return false;
|
|
23
|
+
const host = parsed.hostname.toLowerCase();
|
|
24
|
+
if (host === "cdn.migma.ai")
|
|
25
|
+
return true;
|
|
26
|
+
if (host.endsWith(".cloudfront.net"))
|
|
27
|
+
return true;
|
|
28
|
+
if (host.endsWith(".amazonaws.com") &&
|
|
29
|
+
(host.includes(".s3.") || host.startsWith("s3.") || host.includes(".s3-"))) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
function pickUrl(...candidates) {
|
|
35
|
+
for (const candidate of candidates) {
|
|
36
|
+
const url = asString(candidate);
|
|
37
|
+
if (url && isAllowedScreenshotUrl(url))
|
|
38
|
+
return url;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function refsFromEmailRows(rows, cap, labelOf) {
|
|
43
|
+
const refs = [];
|
|
44
|
+
for (const row of rows) {
|
|
45
|
+
if (refs.length >= cap)
|
|
46
|
+
break;
|
|
47
|
+
const record = asRecord(row);
|
|
48
|
+
if (!record)
|
|
49
|
+
continue;
|
|
50
|
+
const url = pickUrl(record.screenshotUrl, record.thumbnailUrl);
|
|
51
|
+
if (!url)
|
|
52
|
+
continue;
|
|
53
|
+
refs.push({ url, label: labelOf(record) });
|
|
54
|
+
}
|
|
55
|
+
return refs;
|
|
56
|
+
}
|
|
57
|
+
export function collectScreenshotRefs(data, mode) {
|
|
58
|
+
const root = asRecord(data);
|
|
59
|
+
if (!root)
|
|
60
|
+
return [];
|
|
61
|
+
if (mode === "list" && Array.isArray(root.emails)) {
|
|
62
|
+
return refsFromEmailRows(root.emails, LIST_IMAGE_CAP, (row) => {
|
|
63
|
+
return asString(row.subject) || asString(row.title) || "Email";
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const result = asRecord(root.result);
|
|
67
|
+
if (result) {
|
|
68
|
+
if (Array.isArray(result.emails) && result.emails.length > 0) {
|
|
69
|
+
return refsFromEmailRows(result.emails, DETAIL_IMAGE_CAP, (row) => {
|
|
70
|
+
return (asString(row.subject) ||
|
|
71
|
+
(row.slot != null ? `Email ${row.slot}` : null) ||
|
|
72
|
+
"Email");
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const url = pickUrl(result.screenshotFullUrl, result.screenshotUrl);
|
|
76
|
+
if (url) {
|
|
77
|
+
return [{ url, label: asString(result.subject) || "Email" }];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const url = pickUrl(root.screenshotUrl, root.thumbnailUrl);
|
|
81
|
+
if (url) {
|
|
82
|
+
return [{ url, label: asString(root.subject) || "Email" }];
|
|
83
|
+
}
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
export function screenshotGuidance(refs, attached, data) {
|
|
87
|
+
if (attached > 0) {
|
|
88
|
+
return "Show these email preview images to the user. Do not only describe the JSON.";
|
|
89
|
+
}
|
|
90
|
+
const root = asRecord(data);
|
|
91
|
+
const status = asString(root?.status);
|
|
92
|
+
if (refs.length === 0 && (status === "completed" || asRecord(root)?.html)) {
|
|
93
|
+
return "Preview image is still rendering. Poll migma_get_email or migma_get_generation_status again in a few seconds, then show the image.";
|
|
94
|
+
}
|
|
95
|
+
return "";
|
|
96
|
+
}
|
|
97
|
+
function mimeFromContentType(contentType) {
|
|
98
|
+
const mime = contentType?.split(";")[0]?.trim().toLowerCase();
|
|
99
|
+
if (mime === "image/png" ||
|
|
100
|
+
mime === "image/jpeg" ||
|
|
101
|
+
mime === "image/jpg" ||
|
|
102
|
+
mime === "image/webp" ||
|
|
103
|
+
mime === "image/gif") {
|
|
104
|
+
return mime === "image/jpg" ? "image/jpeg" : mime;
|
|
105
|
+
}
|
|
106
|
+
if (mime === "application/octet-stream")
|
|
107
|
+
return "image/png";
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
export async function fetchEmailImage(url, fetchImpl = fetch) {
|
|
111
|
+
if (!isAllowedScreenshotUrl(url))
|
|
112
|
+
return null;
|
|
113
|
+
try {
|
|
114
|
+
const response = await fetchImpl(url, {
|
|
115
|
+
signal: AbortSignal.timeout(FETCH_MS),
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok)
|
|
118
|
+
return null;
|
|
119
|
+
const mimeType = mimeFromContentType(response.headers.get("content-type"));
|
|
120
|
+
if (!mimeType)
|
|
121
|
+
return null;
|
|
122
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
123
|
+
if (bytes.length === 0 || bytes.length > MAX_IMAGE_BYTES)
|
|
124
|
+
return null;
|
|
125
|
+
return {
|
|
126
|
+
type: "image",
|
|
127
|
+
data: bytes.toString("base64"),
|
|
128
|
+
mimeType,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export async function toolResultWithImages(data, mode, fetchImpl = fetch) {
|
|
136
|
+
const refs = collectScreenshotRefs(data, mode);
|
|
137
|
+
const fetched = await Promise.all(refs.map(async (ref) => ({
|
|
138
|
+
ref,
|
|
139
|
+
image: await fetchEmailImage(ref.url, fetchImpl),
|
|
140
|
+
})));
|
|
141
|
+
const attached = fetched.filter((item) => item.image);
|
|
142
|
+
const guidance = screenshotGuidance(refs, attached.length, data);
|
|
143
|
+
const markdown = attached
|
|
144
|
+
.map((item) => ``)
|
|
145
|
+
.join("\n");
|
|
146
|
+
const content = [];
|
|
147
|
+
if (guidance) {
|
|
148
|
+
content.push({ type: "text", text: guidance });
|
|
149
|
+
}
|
|
150
|
+
for (const item of attached) {
|
|
151
|
+
if (item.image)
|
|
152
|
+
content.push(item.image);
|
|
153
|
+
}
|
|
154
|
+
if (markdown) {
|
|
155
|
+
content.push({ type: "text", text: markdown });
|
|
156
|
+
}
|
|
157
|
+
content.push({ type: "text", text: JSON.stringify(data, null, 2) });
|
|
158
|
+
return { content };
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=email-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-images.js","sourceRoot":"","sources":["../../src/tools/email-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QA8R9B"}
|
package/build/tools/generate.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { canUse } from "../permissions.js";
|
|
3
|
+
import { toolResultWithImages } from "./email-images.js";
|
|
3
4
|
export function registerGenerateTools(server, client, config, grantedPermissions) {
|
|
4
5
|
if (canUse(grantedPermissions, ["email:write", "email:read"])) {
|
|
5
6
|
server.registerTool("migma_generate_email", {
|
|
6
7
|
title: "Generate Email",
|
|
7
|
-
description: "Start generating one email or a series from a prompt. Returns conversationId immediately — generation keeps running in the background. Poll migma_get_generation_status with that id until status is completed or failed. Do not use migma_get_project or migma_list_campaigns to check progress. Charges 1 email credit per finished email.",
|
|
8
|
+
description: "Start generating one email or a series from a prompt. Returns conversationId immediately — generation keeps running in the background. Poll migma_get_generation_status with that id until status is completed or failed, then show the preview images. Do not use migma_get_project or migma_list_campaigns to check progress. Charges 1 email credit per finished email.",
|
|
8
9
|
inputSchema: z.object({
|
|
9
10
|
projectId: z
|
|
10
11
|
.string()
|
|
@@ -23,6 +24,15 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
23
24
|
.max(12)
|
|
24
25
|
.optional()
|
|
25
26
|
.describe("Target email count for a series. Omit to infer from prompt."),
|
|
27
|
+
images: z
|
|
28
|
+
.array(z.string().url())
|
|
29
|
+
.max(8)
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Reference image URLs (product shots, screenshots) for the generator to use."),
|
|
32
|
+
referenceId: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Existing email or reference ID to remix from."),
|
|
26
36
|
}),
|
|
27
37
|
}, async (args) => {
|
|
28
38
|
const projectId = args.projectId || config.projectId;
|
|
@@ -34,6 +44,10 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
34
44
|
prompt: args.prompt,
|
|
35
45
|
languages: args.languages,
|
|
36
46
|
count: args.count,
|
|
47
|
+
referenceId: args.referenceId,
|
|
48
|
+
images: args.images?.map((url) => ({
|
|
49
|
+
source: { type: "url", url },
|
|
50
|
+
})),
|
|
37
51
|
});
|
|
38
52
|
if (error)
|
|
39
53
|
return toolError(error.message);
|
|
@@ -43,7 +57,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
43
57
|
if (canUse(grantedPermissions, ["email:read"])) {
|
|
44
58
|
server.registerTool("migma_get_generation_status", {
|
|
45
59
|
title: "Get Generation Status",
|
|
46
|
-
description: "Poll a generation started by migma_generate_email. Pass conversationId. Status is pending, processing, completed, or failed. When completed, result.emails[]
|
|
60
|
+
description: "Poll a generation started by migma_generate_email. Pass conversationId. Status is pending, processing, completed, or failed. When completed, this tool returns preview images plus result.emails[] (emailId, HTML, subject). Show those images to the user. This is how you check email design progress — not campaigns.",
|
|
47
61
|
annotations: { readOnlyHint: true },
|
|
48
62
|
inputSchema: z.object({
|
|
49
63
|
conversationId: z.string().describe("The conversation/generation ID"),
|
|
@@ -52,7 +66,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
52
66
|
const { data, error } = await client.emails.getGenerationStatus(args.conversationId);
|
|
53
67
|
if (error)
|
|
54
68
|
return toolError(error.message);
|
|
55
|
-
return
|
|
69
|
+
return toolResultWithImages(data, "detail");
|
|
56
70
|
});
|
|
57
71
|
}
|
|
58
72
|
if (canUse(grantedPermissions, ["email:send"])) {
|
|
@@ -88,7 +102,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
88
102
|
if (canUse(grantedPermissions, ["email:read"])) {
|
|
89
103
|
server.registerTool("migma_list_emails", {
|
|
90
104
|
title: "List Emails",
|
|
91
|
-
description: "List generated email designs for a project (drafts in the canvas). Returns conversationId, title, subject, status
|
|
105
|
+
description: "List generated email designs for a project (drafts in the canvas). Returns preview images plus conversationId, title, subject, and status. Show the images to the user. Use this to answer 'what emails do we have?'. Not campaigns — those are audience sends via migma_list_campaigns. Ignore project.templateCount.",
|
|
92
106
|
annotations: { readOnlyHint: true },
|
|
93
107
|
inputSchema: z.object({
|
|
94
108
|
projectId: z
|
|
@@ -128,13 +142,13 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
128
142
|
});
|
|
129
143
|
if (error)
|
|
130
144
|
return toolError(error.message);
|
|
131
|
-
return
|
|
145
|
+
return toolResultWithImages(data, "list");
|
|
132
146
|
});
|
|
133
147
|
}
|
|
134
148
|
if (canUse(grantedPermissions, ["email:read"])) {
|
|
135
149
|
server.registerTool("migma_get_email", {
|
|
136
150
|
title: "Get Email",
|
|
137
|
-
description: "Fetch one generated email by emailId. Returns email-safe HTML, subject,
|
|
151
|
+
description: "Fetch one generated email by emailId. Returns a preview image plus email-safe HTML, subject, variable requirements, and metadata. Show the image to the user.",
|
|
138
152
|
annotations: { readOnlyHint: true },
|
|
139
153
|
inputSchema: z.object({
|
|
140
154
|
emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
|
|
@@ -143,13 +157,13 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
143
157
|
const { data, error } = await client.emails.get(args.emailId);
|
|
144
158
|
if (error)
|
|
145
159
|
return toolError(error.message);
|
|
146
|
-
return
|
|
160
|
+
return toolResultWithImages(data, "detail");
|
|
147
161
|
});
|
|
148
162
|
}
|
|
149
163
|
if (canUse(grantedPermissions, ["email:write"])) {
|
|
150
164
|
server.registerTool("migma_edit_email", {
|
|
151
165
|
title: "Edit Email",
|
|
152
|
-
description: "Edit one generated email with a natural-language prompt. Returns the updated HTML, subject,
|
|
166
|
+
description: "Edit one generated email with a natural-language prompt. Returns a preview image plus the updated HTML, subject, and metadata. Show the image. Charges 0.5 email credit, the same as an edit in the dashboard, taken only after the edit persists.",
|
|
153
167
|
inputSchema: z.object({
|
|
154
168
|
emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
|
|
155
169
|
prompt: z
|
|
@@ -166,7 +180,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
166
180
|
});
|
|
167
181
|
if (error)
|
|
168
182
|
return toolError(error.message);
|
|
169
|
-
return
|
|
183
|
+
return toolResultWithImages(data, "detail");
|
|
170
184
|
});
|
|
171
185
|
}
|
|
172
186
|
if (canUse(grantedPermissions, ["email:read"])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tools/generate.ts"],"names":[],"mappings":"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"}
|