@migma/mcp 1.7.1 → 1.7.3
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/README.md +26 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +7 -5
- package/build/index.js.map +1 -1
- package/build/prompts/index.d.ts.map +1 -1
- package/build/prompts/index.js +21 -8
- package/build/prompts/index.js.map +1 -1
- package/build/tools/__tests__/agent-payload.test.js +56 -1
- package/build/tools/__tests__/agent-payload.test.js.map +1 -1
- package/build/tools/__tests__/brand.test.d.ts +2 -0
- package/build/tools/__tests__/brand.test.d.ts.map +1 -0
- package/build/tools/__tests__/brand.test.js +36 -0
- package/build/tools/__tests__/brand.test.js.map +1 -0
- package/build/tools/__tests__/campaign-recipients.test.d.ts +2 -0
- package/build/tools/__tests__/campaign-recipients.test.d.ts.map +1 -0
- package/build/tools/__tests__/campaign-recipients.test.js +61 -0
- package/build/tools/__tests__/campaign-recipients.test.js.map +1 -0
- package/build/tools/__tests__/catalog.test.js +16 -2
- package/build/tools/__tests__/catalog.test.js.map +1 -1
- package/build/tools/__tests__/context.test.d.ts +2 -0
- package/build/tools/__tests__/context.test.d.ts.map +1 -0
- package/build/tools/__tests__/context.test.js +89 -0
- package/build/tools/__tests__/context.test.js.map +1 -0
- package/build/tools/__tests__/email-edit.test.d.ts +2 -0
- package/build/tools/__tests__/email-edit.test.d.ts.map +1 -0
- package/build/tools/__tests__/email-edit.test.js +82 -0
- package/build/tools/__tests__/email-edit.test.js.map +1 -0
- package/build/tools/__tests__/email-images.test.js +31 -6
- package/build/tools/__tests__/email-images.test.js.map +1 -1
- package/build/tools/__tests__/segments.test.d.ts +2 -0
- package/build/tools/__tests__/segments.test.d.ts.map +1 -0
- package/build/tools/__tests__/segments.test.js +149 -0
- package/build/tools/__tests__/segments.test.js.map +1 -0
- package/build/tools/agent-payload.d.ts +5 -0
- package/build/tools/agent-payload.d.ts.map +1 -1
- package/build/tools/agent-payload.js +50 -0
- package/build/tools/agent-payload.js.map +1 -1
- package/build/tools/billing.js +1 -1
- package/build/tools/billing.js.map +1 -1
- package/build/tools/brand.d.ts.map +1 -1
- package/build/tools/brand.js +12 -7
- package/build/tools/brand.js.map +1 -1
- package/build/tools/campaigns.d.ts.map +1 -1
- package/build/tools/campaigns.js +13 -1
- package/build/tools/campaigns.js.map +1 -1
- package/build/tools/capabilities.d.ts +1 -0
- package/build/tools/capabilities.d.ts.map +1 -1
- package/build/tools/capabilities.js +13 -6
- package/build/tools/capabilities.js.map +1 -1
- package/build/tools/contacts.js +6 -6
- package/build/tools/contacts.js.map +1 -1
- package/build/tools/context.d.ts.map +1 -1
- package/build/tools/context.js +55 -32
- package/build/tools/context.js.map +1 -1
- package/build/tools/domains.js +1 -1
- package/build/tools/domains.js.map +1 -1
- package/build/tools/email-edit-client.d.ts +15 -0
- package/build/tools/email-edit-client.d.ts.map +1 -0
- package/build/tools/email-edit-client.js +38 -0
- package/build/tools/email-edit-client.js.map +1 -0
- package/build/tools/email-images.d.ts +3 -0
- package/build/tools/email-images.d.ts.map +1 -1
- package/build/tools/email-images.js +26 -12
- package/build/tools/email-images.js.map +1 -1
- package/build/tools/generate.d.ts.map +1 -1
- package/build/tools/generate.js +36 -12
- package/build/tools/generate.js.map +1 -1
- package/build/tools/import-html.js +2 -2
- package/build/tools/import-html.js.map +1 -1
- package/build/tools/knowledge-base.js +1 -1
- package/build/tools/knowledge-base.js.map +1 -1
- package/build/tools/projects.d.ts.map +1 -1
- package/build/tools/projects.js +8 -3
- package/build/tools/projects.js.map +1 -1
- package/build/tools/segments.d.ts.map +1 -1
- package/build/tools/segments.js +42 -5
- package/build/tools/segments.js.map +1 -1
- package/build/tools/validate.d.ts.map +1 -1
- package/build/tools/validate.js +5 -2
- package/build/tools/validate.js.map +1 -1
- package/package.json +1 -1
package/build/tools/context.js
CHANGED
|
@@ -7,9 +7,11 @@ export function registerContextTools(server, client, grantedPermissions, preferr
|
|
|
7
7
|
server.registerTool("migma_get_context", {
|
|
8
8
|
title: "Get Account Context",
|
|
9
9
|
annotations: READ_ONLY_TOOL,
|
|
10
|
-
description: "One-call account snapshot: workspaces (each with its brands as id + name), brand count, plan and remaining credits, sending domains with their status, and a setup block for the working brand: brandKit (missing, partial, ready), saved design references, audience size, sending domain state.
|
|
11
|
-
inputSchema: z.object({
|
|
12
|
-
|
|
10
|
+
description: "One-call account snapshot: workspaces (each with its brands as id + name), brand count, plan and remaining credits, sending domains with their status, and a setup block for the working brand: brandKit (missing, partial, ready), standing guidelines, saved design references, audience size, and account sending domain state. Null means unknown or unavailable, never missing. Pass projectId for the working brand; multiple brands require a choice. Suggestions are optional context, not a checklist to show the user. Use only what helps their current task. Call this after connecting, before the first task, and whenever the user asks what they can do.",
|
|
11
|
+
inputSchema: z.object({
|
|
12
|
+
projectId: z.string().min(1).optional().describe("Working brand ID. Omit only before a brand is selected."),
|
|
13
|
+
}),
|
|
14
|
+
}, async (args) => {
|
|
13
15
|
const ws = client.workspaces;
|
|
14
16
|
const canBilling = canUse(grantedPermissions, ["billing:read"]);
|
|
15
17
|
const canDomains = canUse(grantedPermissions, ["domain:read"]);
|
|
@@ -22,15 +24,15 @@ export function registerContextTools(server, client, grantedPermissions, preferr
|
|
|
22
24
|
const workspaceRows = workspaces?.data?.workspaces ?? [];
|
|
23
25
|
const projectRows = (projects?.data
|
|
24
26
|
?.projects) ?? [];
|
|
27
|
+
const brandCount = projects?.data ? projects.data.pagination?.total ?? projectRows.length : null;
|
|
25
28
|
const creditData = credits?.data ?? null;
|
|
26
29
|
const domainRows = (domains?.data ?? []);
|
|
27
30
|
const verifiedDomains = domainRows.filter((d) => d.isVerified);
|
|
28
31
|
// Second wave, bounded to the working brand: is its kit complete, does
|
|
29
32
|
// it have references, does it have an audience. One brand, one page.
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const brandId = brandRow ? String(brandRow._id ?? brandRow.id ?? "") : "";
|
|
33
|
+
const brandId = args.projectId || preferredProjectId ||
|
|
34
|
+
(brandCount === 1 ? String(projectRows[0]?._id ?? projectRows[0]?.id ?? "") : "");
|
|
35
|
+
const brandRow = projectRows.find((p) => String(p._id ?? p.id) === brandId);
|
|
34
36
|
const setupClient = client;
|
|
35
37
|
const canAudience = canUse(grantedPermissions, ["audience:read"]);
|
|
36
38
|
const [brand, references, contacts] = brandId
|
|
@@ -44,44 +46,64 @@ export function registerContextTools(server, client, grantedPermissions, preferr
|
|
|
44
46
|
: Promise.resolve(null),
|
|
45
47
|
])
|
|
46
48
|
: [null, null, null];
|
|
47
|
-
const brandData =
|
|
48
|
-
const
|
|
49
|
-
const
|
|
49
|
+
const brandData = brand?.data;
|
|
50
|
+
const colors = brandData?.colors;
|
|
51
|
+
const hasKit = !!(colors?.accent && Array.isArray(brandData?.fonts) &&
|
|
52
|
+
brandData.fonts.length && (brandData.logoUrls?.primary || brandData.logoUrls?.secondary));
|
|
50
53
|
const setup = {
|
|
51
54
|
brandId: brandId || null,
|
|
52
55
|
brandName: brandData?.name ?? brandRow?.name ?? null,
|
|
53
|
-
brandKit:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
brandKit: brandData ? (hasKit ? "ready" : "partial") : brandCount === 0 && !brandId ? "missing" : null,
|
|
57
|
+
guidelines: brandData ? !!String(brandData.modelInstructions ?? "").trim() : null,
|
|
58
|
+
references: references?.data?.total ?? references?.data?.references?.length ?? null,
|
|
59
|
+
audience: contacts?.data?.count ?? null,
|
|
60
|
+
sendingDomain: !domains?.data ? null : verifiedDomains.length ? "verified" : domainRows.length ? "pending" : "none",
|
|
57
61
|
};
|
|
62
|
+
const unavailable = [
|
|
63
|
+
...(!projects?.data ? ["brands"] : []),
|
|
64
|
+
...(brandId && !brandData ? ["brand kit"] : []),
|
|
65
|
+
...(brandId && setup.references === null ? ["references"] : []),
|
|
66
|
+
...(brandId && canAudience && setup.audience === null ? ["audience"] : []),
|
|
67
|
+
...(canDomains && !domains?.data ? ["sending domains"] : []),
|
|
68
|
+
];
|
|
69
|
+
const canWriteBrand = canUse(grantedPermissions, ["project:write"]);
|
|
70
|
+
const canWriteAudience = canUse(grantedPermissions, ["audience:write"]);
|
|
71
|
+
const canWriteDomain = canUse(grantedPermissions, ["domain:write"]);
|
|
58
72
|
const suggestions = [];
|
|
59
|
-
if (
|
|
60
|
-
suggestions.push("
|
|
73
|
+
if (!brandId && brandCount !== null && brandCount > 1) {
|
|
74
|
+
suggestions.push("Ask which brand to work on, then call migma_get_context with its projectId.");
|
|
61
75
|
}
|
|
62
|
-
if (
|
|
63
|
-
suggestions.push("No
|
|
76
|
+
if (setup.brandKit === "missing" && canWriteBrand) {
|
|
77
|
+
suggestions.push("No brand kit yet. Ask for the website and use migma_import_brand to collect colors, fonts, and logo.");
|
|
64
78
|
}
|
|
65
|
-
if (
|
|
66
|
-
suggestions.push("
|
|
79
|
+
if (setup.brandKit === "partial" && canWriteBrand) {
|
|
80
|
+
suggestions.push("Some brand kit details are missing. Read migma_get_project and ask only for the missing colors, fonts, or logo; keep the user's task moving.");
|
|
67
81
|
}
|
|
68
|
-
if (
|
|
69
|
-
suggestions.push("
|
|
82
|
+
if (setup.guidelines === false && canWriteBrand) {
|
|
83
|
+
suggestions.push("Ask for brand guidelines or lasting email and image preferences. Save them with migma_update_brand_guidelines, preserving existing rules.");
|
|
70
84
|
}
|
|
71
|
-
if (
|
|
72
|
-
suggestions.push("
|
|
85
|
+
if (setup.references === 0 && canWriteBrand) {
|
|
86
|
+
suggestions.push("Ask for an email the user loves. Use migma_save_reference for a generated emailId or title + html; pass screenshots as structured images when generating.");
|
|
73
87
|
}
|
|
74
|
-
if (
|
|
75
|
-
suggestions.push("
|
|
88
|
+
if (setup.audience === 0 && canWriteAudience) {
|
|
89
|
+
suggestions.push("Ask for their audience CSV. Import it into a named List with migma_create_contact_import, preserving useful custom columns; inspect migma_get_field_catalog before suggesting segments.");
|
|
90
|
+
}
|
|
91
|
+
if (setup.sendingDomain === "none" && canWriteDomain) {
|
|
92
|
+
suggestions.push("Offer migma_create_managed_domain for a ready-to-use address, or migma_setup_domain for a domain the user owns.");
|
|
76
93
|
}
|
|
77
|
-
if (
|
|
78
|
-
suggestions.push("
|
|
94
|
+
if (setup.sendingDomain === "pending" && canWriteDomain) {
|
|
95
|
+
suggestions.push("A sending domain is pending. Offer migma_verify_domain to check it.");
|
|
96
|
+
}
|
|
97
|
+
if (creditData && !creditData.hasCredits) {
|
|
98
|
+
suggestions.push(canUse(grantedPermissions, ["billing:write"])
|
|
99
|
+
? "Out of credits. Offer migma_get_upgrade_link; the user pays in their browser."
|
|
100
|
+
: "Out of credits. Explain that generation needs more credits.");
|
|
79
101
|
}
|
|
80
|
-
if (
|
|
81
|
-
suggestions.push("
|
|
102
|
+
if (unavailable.length) {
|
|
103
|
+
suggestions.push("Some setup reads are unavailable. Retry the relevant read before describing anything as missing; continue with known context.");
|
|
82
104
|
}
|
|
83
105
|
if (suggestions.length === 0) {
|
|
84
|
-
suggestions.push("
|
|
106
|
+
suggestions.push("Continue the user's task. Reply with the result and relevant returned links; stop when done. Suggest an email only if they have no task in mind.");
|
|
85
107
|
}
|
|
86
108
|
return {
|
|
87
109
|
content: [
|
|
@@ -89,7 +111,7 @@ export function registerContextTools(server, client, grantedPermissions, preferr
|
|
|
89
111
|
type: "text",
|
|
90
112
|
text: JSON.stringify({
|
|
91
113
|
workspaces: workspaceRows,
|
|
92
|
-
brandCount
|
|
114
|
+
brandCount,
|
|
93
115
|
plan: creditData
|
|
94
116
|
? {
|
|
95
117
|
currentPlan: creditData.currentPlan,
|
|
@@ -104,6 +126,7 @@ export function registerContextTools(server, client, grantedPermissions, preferr
|
|
|
104
126
|
isVerified: d.isVerified ?? false,
|
|
105
127
|
})),
|
|
106
128
|
setup,
|
|
129
|
+
unavailable,
|
|
107
130
|
suggestions,
|
|
108
131
|
}, null, 2),
|
|
109
132
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA+BlD,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAa,EACb,kBAA6B,EAC7B,kBAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC;QAAE,OAAO;IAExD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,cAAc;QAC3B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|
package/build/tools/domains.js
CHANGED
|
@@ -113,7 +113,7 @@ export function registerDomainTools(server, client, grantedPermissions) {
|
|
|
113
113
|
server.registerTool("migma_buy_domain", {
|
|
114
114
|
title: "Buy Domain",
|
|
115
115
|
annotations: OPEN_WORLD_MUTATING_TOOL,
|
|
116
|
-
description: "Start buying a domain: returns a Stripe checkout URL the user opens in their browser to pay (annual, auto-renew). Nothing is charged by this call, and the domain registers only after payment clears.
|
|
116
|
+
description: "Start buying a domain: returns a Stripe checkout URL the user opens in their browser to pay (annual, auto-renew). Nothing is charged by this call, and the domain registers only after payment clears. Requires an active paid Migma subscription (migma_get_upgrade_link returns the upgrade link). migma_get_domain_purchases reports when the purchase is active; migma_setup_domain then sets up sending.",
|
|
117
117
|
inputSchema: z.object({
|
|
118
118
|
domain: z.string().describe("Domain to buy, e.g. 'acme.com'"),
|
|
119
119
|
redirectUrl: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Migma } from "migma";
|
|
2
|
+
import type { Config } from "../config.js";
|
|
3
|
+
type Result = {
|
|
4
|
+
data?: unknown;
|
|
5
|
+
error?: {
|
|
6
|
+
message: string;
|
|
7
|
+
} | null;
|
|
8
|
+
};
|
|
9
|
+
export declare function startEmailEdit(client: Migma, config: Config, emailId: string, params: {
|
|
10
|
+
prompt: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
}, idempotencyKey: string): Promise<Result>;
|
|
13
|
+
export declare function getEmailEditStatus(client: Migma, config: Config, emailId: string, editId: string): Promise<Result>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=email-edit-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-edit-client.d.ts","sourceRoot":"","sources":["../../src/tools/email-edit-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AA6BrE,wBAAsB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxK;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Compatibility bridge while hosted installations still use the previous SDK.
|
|
2
|
+
* Both paths use the same authenticated async REST contract, never sync edit. */
|
|
3
|
+
async function request(config, path, body, idempotencyKey) {
|
|
4
|
+
if (!config.apiKey)
|
|
5
|
+
return { error: { message: "This SDK lacks async edits. Upgrade migma or provide MCP API configuration." } };
|
|
6
|
+
try {
|
|
7
|
+
const base = (config.baseUrl || "https://api.migma.ai/v1").replace(/\/+$/, "");
|
|
8
|
+
const response = await fetch(`${base}${path}`, {
|
|
9
|
+
method: body ? "POST" : "GET",
|
|
10
|
+
headers: {
|
|
11
|
+
Authorization: `Bearer ${config.apiKey}`, "Content-Type": "application/json", "User-Agent": "migma-mcp",
|
|
12
|
+
...(idempotencyKey ? { "Idempotency-Key": idempotencyKey } : {}),
|
|
13
|
+
},
|
|
14
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
15
|
+
signal: AbortSignal.timeout(15_000),
|
|
16
|
+
});
|
|
17
|
+
const payload = await response.json();
|
|
18
|
+
if (!response.ok || !payload.success)
|
|
19
|
+
return { error: { message: payload.error || `Request failed with status ${response.status}` } };
|
|
20
|
+
return { data: payload.data, error: null };
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
return { error: { message: error instanceof Error ? error.message : "Edit request could not be confirmed" } };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function startEmailEdit(client, config, emailId, params, idempotencyKey) {
|
|
27
|
+
const emails = client.emails;
|
|
28
|
+
if (emails.startEdit)
|
|
29
|
+
return emails.startEdit(emailId, params, { idempotencyKey });
|
|
30
|
+
return request(config, `/emails/${encodeURIComponent(emailId)}/edit`, { ...params, async: true }, idempotencyKey);
|
|
31
|
+
}
|
|
32
|
+
export async function getEmailEditStatus(client, config, emailId, editId) {
|
|
33
|
+
const emails = client.emails;
|
|
34
|
+
if (emails.getEditStatus)
|
|
35
|
+
return emails.getEditStatus(emailId, editId);
|
|
36
|
+
return request(config, `/emails/${encodeURIComponent(emailId)}/edits/${encodeURIComponent(editId)}`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=email-edit-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-edit-client.js","sourceRoot":"","sources":["../../src/tools/email-edit-client.ts"],"names":[],"mappings":"AASA;iFACiF;AACjF,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,IAAa,EAAE,cAAuB;IACzF,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,6EAA6E,EAAE,EAAE,CAAC;IACjI,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE;YAC7C,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YAC7B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW;gBACvG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2D,CAAC;QAC/F,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,8BAA8B,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;QACtI,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qCAAqC,EAAE,EAAE,CAAC;IAChH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAA0C,EAAE,cAAsB;IACrJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAoB,CAAC;IAC3C,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACnF,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAc;IACrG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAoB,CAAC;IAC3C,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACvG,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type ScreenshotRef = {
|
|
2
2
|
url: string;
|
|
3
3
|
label: string;
|
|
4
|
+
appUrl?: string;
|
|
4
5
|
};
|
|
5
6
|
export type ImageContent = {
|
|
6
7
|
type: "image";
|
|
@@ -24,6 +25,8 @@ export declare function isAllowedScreenshotUrl(url: string): boolean;
|
|
|
24
25
|
export declare function collectScreenshotRefs(data: unknown, mode: "list" | "detail"): ScreenshotRef[];
|
|
25
26
|
export declare function screenshotGuidance(refs: ScreenshotRef[], attached: number, data: unknown): string;
|
|
26
27
|
export declare function fetchEmailImage(url: string, fetchImpl?: FetchLike): Promise<ImageContent | null>;
|
|
28
|
+
/** One line per email: the preview image and its editor link, ready to paste into a reply. */
|
|
29
|
+
export declare function previewsMarkdown(refs: ScreenshotRef[]): string;
|
|
27
30
|
export declare function toolResultWithImages(data: unknown, mode: "list" | "detail", fetchImpl?: FetchLike): Promise<{
|
|
28
31
|
content: Array<TextContent | ImageContent>;
|
|
29
32
|
}>;
|
|
@@ -1 +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;
|
|
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;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,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;AAgCD,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,CAuBR;AAiBD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmB9B;AAMD,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAO9D;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,CAwBzD"}
|
|
@@ -39,6 +39,10 @@ function pickUrl(...candidates) {
|
|
|
39
39
|
}
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
42
|
+
function withAppUrl(ref, record) {
|
|
43
|
+
const appUrl = asString(record?.appUrl);
|
|
44
|
+
return appUrl ? { ...ref, appUrl } : ref;
|
|
45
|
+
}
|
|
42
46
|
function refsFromEmailRows(rows, cap, labelOf) {
|
|
43
47
|
const refs = [];
|
|
44
48
|
for (const row of rows) {
|
|
@@ -50,7 +54,7 @@ function refsFromEmailRows(rows, cap, labelOf) {
|
|
|
50
54
|
const url = pickUrl(record.screenshotUrl, record.thumbnailUrl);
|
|
51
55
|
if (!url)
|
|
52
56
|
continue;
|
|
53
|
-
refs.push({ url, label: labelOf(record) });
|
|
57
|
+
refs.push(withAppUrl({ url, label: labelOf(record) }, record));
|
|
54
58
|
}
|
|
55
59
|
return refs;
|
|
56
60
|
}
|
|
@@ -74,12 +78,12 @@ export function collectScreenshotRefs(data, mode) {
|
|
|
74
78
|
}
|
|
75
79
|
const url = pickUrl(result.screenshotFullUrl, result.screenshotUrl);
|
|
76
80
|
if (url) {
|
|
77
|
-
return [{ url, label: asString(result.subject) || "Email" }];
|
|
81
|
+
return [withAppUrl({ url, label: asString(result.subject) || "Email" }, result)];
|
|
78
82
|
}
|
|
79
83
|
}
|
|
80
84
|
const url = pickUrl(root.screenshotUrl, root.thumbnailUrl);
|
|
81
85
|
if (url) {
|
|
82
|
-
return [{ url, label: asString(root.subject) || "Email" }];
|
|
86
|
+
return [withAppUrl({ url, label: asString(root.subject) || "Email" }, root)];
|
|
83
87
|
}
|
|
84
88
|
return [];
|
|
85
89
|
}
|
|
@@ -87,11 +91,11 @@ export function screenshotGuidance(refs, attached, data) {
|
|
|
87
91
|
if (attached > 0) {
|
|
88
92
|
const missing = refs.length - attached;
|
|
89
93
|
return missing > 0
|
|
90
|
-
?
|
|
91
|
-
:
|
|
94
|
+
? `${attached} of ${refs.length} preview image(s) are attached; ${missing} could not be fetched, so visual verification is incomplete for those. The Previews list at the end has every image and editor link as Markdown.`
|
|
95
|
+
: `Preview images for ${attached} email(s) are attached. Some clients show tool images only inside the collapsed tool call; the Previews list at the end has each image and editor link as Markdown for the reply.`;
|
|
92
96
|
}
|
|
93
97
|
if (refs.length > 0) {
|
|
94
|
-
return "
|
|
98
|
+
return "No preview image could be attached, so visual verification is incomplete. The Previews list at the end has each image URL and editor link; migma_get_email or migma_get_generation_status can be retried once.";
|
|
95
99
|
}
|
|
96
100
|
const root = asRecord(data);
|
|
97
101
|
const status = asString(root?.status);
|
|
@@ -143,6 +147,18 @@ export async function fetchEmailImage(url, fetchImpl = fetch) {
|
|
|
143
147
|
return null;
|
|
144
148
|
}
|
|
145
149
|
}
|
|
150
|
+
function markdownLabel(label) {
|
|
151
|
+
return label.replace(/[[\]\n]/g, " ").trim() || "Email";
|
|
152
|
+
}
|
|
153
|
+
/** One line per email: the preview image and its editor link, ready to paste into a reply. */
|
|
154
|
+
export function previewsMarkdown(refs) {
|
|
155
|
+
const lines = refs.map((ref, index) => {
|
|
156
|
+
const label = markdownLabel(ref.label);
|
|
157
|
+
const edit = ref.appUrl ? ` · [Open in Migma](${ref.appUrl})` : "";
|
|
158
|
+
return `${index + 1}. **${label}**${edit}\n `;
|
|
159
|
+
});
|
|
160
|
+
return `Previews:\n${lines.join("\n")}`;
|
|
161
|
+
}
|
|
146
162
|
export async function toolResultWithImages(data, mode, fetchImpl = fetch) {
|
|
147
163
|
const refs = collectScreenshotRefs(data, mode);
|
|
148
164
|
const fetched = await Promise.all(refs.map(async (ref) => ({
|
|
@@ -151,9 +167,6 @@ export async function toolResultWithImages(data, mode, fetchImpl = fetch) {
|
|
|
151
167
|
})));
|
|
152
168
|
const attached = fetched.filter((item) => item.image);
|
|
153
169
|
const guidance = screenshotGuidance(refs, attached.length, data);
|
|
154
|
-
const markdown = attached
|
|
155
|
-
.map((item) => ``)
|
|
156
|
-
.join("\n");
|
|
157
170
|
const content = [];
|
|
158
171
|
if (guidance) {
|
|
159
172
|
content.push({ type: "text", text: guidance });
|
|
@@ -162,10 +175,11 @@ export async function toolResultWithImages(data, mode, fetchImpl = fetch) {
|
|
|
162
175
|
if (item.image)
|
|
163
176
|
content.push(item.image);
|
|
164
177
|
}
|
|
165
|
-
if (markdown) {
|
|
166
|
-
content.push({ type: "text", text: markdown });
|
|
167
|
-
}
|
|
168
178
|
content.push({ type: "text", text: JSON.stringify(data, null, 2) });
|
|
179
|
+
// Last, so the reply-ready list is what the model reads after the JSON.
|
|
180
|
+
if (refs.length > 0) {
|
|
181
|
+
content.push({ type: "text", text: previewsMarkdown(refs) });
|
|
182
|
+
}
|
|
169
183
|
return { content };
|
|
170
184
|
}
|
|
171
185
|
//# sourceMappingURL=email-images.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-images.js","sourceRoot":"","sources":["../../src/tools/email-images.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC;
|
|
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;
|
|
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;AAGnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAY3C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,QA2W9B"}
|
package/build/tools/generate.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
2
3
|
import { canUse } from "../permissions.js";
|
|
3
4
|
import { decorateEmailPayload } from "./agent-payload.js";
|
|
4
5
|
import { toolResultWithImages } from "./email-images.js";
|
|
6
|
+
import { startEmailEdit, getEmailEditStatus } from "./email-edit-client.js";
|
|
5
7
|
import { DESTRUCTIVE_TOOL, IDEMPOTENT_MUTATING_TOOL, OPEN_WORLD_DESTRUCTIVE_TOOL, READ_ONLY_TOOL, } from "./annotations.js";
|
|
6
8
|
export function registerGenerateTools(server, client, config, grantedPermissions) {
|
|
7
9
|
if (canUse(grantedPermissions, ["email:write", "email:read"])) {
|
|
8
10
|
server.registerTool("migma_generate_email", {
|
|
9
11
|
title: "Create / Generate Email or Series",
|
|
10
12
|
annotations: IDEMPOTENT_MUTATING_TOOL,
|
|
11
|
-
description: "Create, design, write, compose, or draft a new email or email series from a prompt. One call can generate multiple emails: pass count (1–12), e.g. count=3 for a three-email series, and name each email's job in the prompt. Never call this tool once per email. This is the tool for making new emails from a prompt (not converting existing HTML — use migma_import_html for that; not campaigns, contacts, DNS, or domains). Images: pass every image the user attached or pointed at through the images argument — product shots and logos to show in the email, and screenshots of emails or pages to use as design reference (
|
|
13
|
+
description: "Create, design, write, compose, or draft a new email or email series from a prompt. One call can generate multiple emails: pass count (1–12), e.g. count=3 for a three-email series, and name each email's job in the prompt. Never call this tool once per email. This is the tool for making new emails from a prompt (not converting existing HTML — use migma_import_html for that; not campaigns, contacts, DNS, or domains). Images: pass every image the user attached or pointed at through the images argument — product shots and logos to show in the email, and screenshots of emails or pages to use as design reference (a screenshot URL of an email or site the user names works as reference; say in the prompt which images are content and which are reference). URLs mentioned only in prompt text are not image inputs. Put exact required facts (offers, prices, dates) in the prompt; Migma writes only what it is given or finds on the brand's site. Returns conversationId immediately; migma_get_generation_status reports progress and returns preview images and editor links when done. Charges 1 email credit per finished email.",
|
|
12
14
|
inputSchema: z.object({
|
|
13
15
|
projectId: z
|
|
14
16
|
.string()
|
|
@@ -66,7 +68,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
66
68
|
content: [
|
|
67
69
|
{
|
|
68
70
|
type: "text",
|
|
69
|
-
text: "Generation started.
|
|
71
|
+
text: "Generation started. migma_get_generation_status reports progress, then returns each email's preview image and editor link.",
|
|
70
72
|
},
|
|
71
73
|
{
|
|
72
74
|
type: "text",
|
|
@@ -80,7 +82,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
80
82
|
server.registerTool("migma_get_generation_status", {
|
|
81
83
|
title: "Get Generation Status",
|
|
82
84
|
annotations: READ_ONLY_TOOL,
|
|
83
|
-
description: "Check generation progress with conversationId. When status is completed,
|
|
85
|
+
description: "Check generation progress with conversationId. When status is completed, returns each email's preview image and appUrl editor link, ending with a Markdown Previews list. Set includeHtml when text/content verification needs markup.",
|
|
84
86
|
inputSchema: z.object({
|
|
85
87
|
conversationId: z.string().describe("The conversation/generation ID"),
|
|
86
88
|
includeHtml: z
|
|
@@ -130,7 +132,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
130
132
|
server.registerTool("migma_list_emails", {
|
|
131
133
|
title: "List Emails",
|
|
132
134
|
annotations: READ_ONLY_TOOL,
|
|
133
|
-
description: "List generated email designs for a project. Returns preview images, conversationId, title, subject, appUrl, and screenshotStatus.
|
|
135
|
+
description: "List generated email designs for a project. Returns preview images, conversationId, title, subject, appUrl, and screenshotStatus. Use migma_list_campaigns for audience sends.",
|
|
134
136
|
inputSchema: z.object({
|
|
135
137
|
projectId: z
|
|
136
138
|
.string()
|
|
@@ -176,7 +178,7 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
176
178
|
server.registerTool("migma_get_email", {
|
|
177
179
|
title: "Get Email",
|
|
178
180
|
annotations: READ_ONLY_TOOL,
|
|
179
|
-
description: "Get one generated email by emailId. Returns preview image, subject, appUrl, screenshotStatus, and variable requirements. Set includeHtml when markup is needed.
|
|
181
|
+
description: "Get one generated email by emailId. Returns preview image, subject, appUrl, screenshotStatus, and variable requirements. Set includeHtml when markup is needed.",
|
|
180
182
|
inputSchema: z.object({
|
|
181
183
|
emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
|
|
182
184
|
includeHtml: z
|
|
@@ -191,11 +193,11 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
191
193
|
return toolResultWithImages(decorateEmailPayload(data, { includeHtml: args.includeHtml }), "detail");
|
|
192
194
|
});
|
|
193
195
|
}
|
|
194
|
-
if (canUse(grantedPermissions, ["email:write"])) {
|
|
196
|
+
if (canUse(grantedPermissions, ["email:write", "email:read"])) {
|
|
195
197
|
server.registerTool("migma_edit_email", {
|
|
196
198
|
title: "Edit / Change Email",
|
|
197
|
-
annotations: DESTRUCTIVE_TOOL,
|
|
198
|
-
description: "Edit, change, revise, or rewrite one already-generated email with a natural-language prompt.
|
|
199
|
+
annotations: { ...DESTRUCTIVE_TOOL, idempotentHint: true },
|
|
200
|
+
description: "Edit, change, revise, or rewrite one already-generated email with a natural-language prompt. Returns editId, emailId, conversationId and status immediately; poll migma_get_email_edit_status with emailId and editId until completed or failed. Never resubmit a pending or processing edit, and reuse the same idempotency_key after an uncertain submission. Conversation generation status can describe an older turn and does not prove this edit finished. For a brand-new email or series, or to add external images, use migma_generate_email instead. The completed status returns the saved preview, subject, appUrl, and screenshotStatus; set includeHtml when markup is needed. Charges 0.5 email credit after save.",
|
|
199
201
|
inputSchema: z.object({
|
|
200
202
|
emailId: z.string().describe("Generated email ID from result.emails[].emailId"),
|
|
201
203
|
prompt: z
|
|
@@ -206,14 +208,36 @@ export function registerGenerateTools(server, client, config, grantedPermissions
|
|
|
206
208
|
includeHtml: z
|
|
207
209
|
.boolean()
|
|
208
210
|
.optional()
|
|
209
|
-
.describe("
|
|
211
|
+
.describe("Request HTML on the subsequent migma_get_email_edit_status call. Start returns a job handle."),
|
|
212
|
+
idempotency_key: z.string().min(1).max(100).optional()
|
|
213
|
+
.describe("Reuse this key with identical edit inputs after an uncertain submission. Same key resumes the same job for at least 24h after completion."),
|
|
210
214
|
}),
|
|
211
215
|
}, async (args) => {
|
|
212
|
-
const
|
|
213
|
-
const { data, error } = await
|
|
216
|
+
const key = args.idempotency_key || randomUUID();
|
|
217
|
+
const { data, error } = await startEmailEdit(client, config, args.emailId, {
|
|
214
218
|
prompt: args.prompt,
|
|
215
219
|
label: args.label,
|
|
216
|
-
});
|
|
220
|
+
}, key);
|
|
221
|
+
if (error)
|
|
222
|
+
return toolError(JSON.stringify({ error: error.message, emailId: args.emailId,
|
|
223
|
+
idempotency_key: key, nextStep: "If retrying this submission, reuse this idempotency_key and identical prompt/label. Do not start a second edit with a new key." }));
|
|
224
|
+
return toolResult({ ...decorateEmailPayload(data), idempotency_key: key,
|
|
225
|
+
nextStep: "Poll migma_get_email_edit_status with emailId and editId. Do not resubmit while pending or processing. Show the saved preview only after completed.",
|
|
226
|
+
...(args.includeHtml ? { includeHtml: true } : {}), });
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (canUse(grantedPermissions, ["email:read"])) {
|
|
230
|
+
server.registerTool("migma_get_email_edit_status", {
|
|
231
|
+
title: "Get Email Edit Status",
|
|
232
|
+
annotations: READ_ONLY_TOOL,
|
|
233
|
+
description: "Poll one queued email edit using its emailId and editId. Pending/processing means keep polling, not retrying the edit. Completed includes the saved email preview; show it immediately. Failed includes error and changesMayHaveBeenSaved; inspect the saved email before starting another edit. Missing/expired status does not prove the edit failed. Set includeHtml to inspect markup.",
|
|
234
|
+
inputSchema: z.object({
|
|
235
|
+
emailId: z.string().describe("Email ID returned by migma_edit_email"),
|
|
236
|
+
editId: z.string().describe("Exact edit job ID returned by migma_edit_email"),
|
|
237
|
+
includeHtml: z.boolean().optional().describe("Include saved email HTML on completion. Default false."),
|
|
238
|
+
}),
|
|
239
|
+
}, async (args) => {
|
|
240
|
+
const { data, error } = await getEmailEditStatus(client, config, args.emailId, args.editId);
|
|
217
241
|
if (error)
|
|
218
242
|
return toolError(error.message);
|
|
219
243
|
return toolResultWithImages(decorateEmailPayload(data, { includeHtml: args.includeHtml }), "detail");
|