@elementor/editor-mcp 4.0.7 → 4.0.8

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/dist/index.d.mts CHANGED
@@ -334,9 +334,9 @@ declare const toolPrompts: (name: string) => ToolPrompts;
334
334
 
335
335
  declare const sendPromptToAngie: (prompt?: string) => void;
336
336
 
337
- declare const redirectToInstallation: (prompt: string) => void;
337
+ declare const redirectToInstallation: (prompt?: string) => void;
338
338
 
339
- declare const redirectToAppAdmin: (prompt: string) => void;
339
+ declare const redirectToAppAdmin: (prompt?: string) => void;
340
340
 
341
341
  type InstallAngieResult = {
342
342
  success: true;
@@ -347,6 +347,8 @@ type InstallAngieResult = {
347
347
  };
348
348
  declare const installAngiePlugin: () => Promise<InstallAngieResult>;
349
349
 
350
+ declare const saveAngieConsent: () => Promise<void>;
351
+
350
352
  declare const getAngieSdk: () => _elementor_external_angie_sdk.AngieMcpSdk;
351
353
 
352
- export { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences, type InstallAngieResult, type MCPRegistryEntry, activateMcpRegistration, createSampler, getAngieSdk, getMCPByDomain, init, installAngiePlugin, isAngieAvailable, isAngieSidebarOpen, redirectToAppAdmin, redirectToInstallation, registerMcp, sendPromptToAngie, toMCPTitle, toolPrompts };
354
+ export { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences, type InstallAngieResult, type MCPRegistryEntry, activateMcpRegistration, createSampler, getAngieSdk, getMCPByDomain, init, installAngiePlugin, isAngieAvailable, isAngieSidebarOpen, redirectToAppAdmin, redirectToInstallation, registerMcp, saveAngieConsent, sendPromptToAngie, toMCPTitle, toolPrompts };
package/dist/index.d.ts CHANGED
@@ -334,9 +334,9 @@ declare const toolPrompts: (name: string) => ToolPrompts;
334
334
 
335
335
  declare const sendPromptToAngie: (prompt?: string) => void;
336
336
 
337
- declare const redirectToInstallation: (prompt: string) => void;
337
+ declare const redirectToInstallation: (prompt?: string) => void;
338
338
 
339
- declare const redirectToAppAdmin: (prompt: string) => void;
339
+ declare const redirectToAppAdmin: (prompt?: string) => void;
340
340
 
341
341
  type InstallAngieResult = {
342
342
  success: true;
@@ -347,6 +347,8 @@ type InstallAngieResult = {
347
347
  };
348
348
  declare const installAngiePlugin: () => Promise<InstallAngieResult>;
349
349
 
350
+ declare const saveAngieConsent: () => Promise<void>;
351
+
350
352
  declare const getAngieSdk: () => _elementor_external_angie_sdk.AngieMcpSdk;
351
353
 
352
- export { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences, type InstallAngieResult, type MCPRegistryEntry, activateMcpRegistration, createSampler, getAngieSdk, getMCPByDomain, init, installAngiePlugin, isAngieAvailable, isAngieSidebarOpen, redirectToAppAdmin, redirectToInstallation, registerMcp, sendPromptToAngie, toMCPTitle, toolPrompts };
354
+ export { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences, type InstallAngieResult, type MCPRegistryEntry, activateMcpRegistration, createSampler, getAngieSdk, getMCPByDomain, init, installAngiePlugin, isAngieAvailable, isAngieSidebarOpen, redirectToAppAdmin, redirectToInstallation, registerMcp, saveAngieConsent, sendPromptToAngie, toMCPTitle, toolPrompts };
package/dist/index.js CHANGED
@@ -45,6 +45,7 @@ __export(index_exports, {
45
45
  redirectToAppAdmin: () => redirectToAppAdmin,
46
46
  redirectToInstallation: () => redirectToInstallation,
47
47
  registerMcp: () => registerMcp,
48
+ saveAngieConsent: () => saveAngieConsent,
48
49
  sendPromptToAngie: () => sendPromptToAngie,
49
50
  toMCPTitle: () => toMCPTitle,
50
51
  toolPrompts: () => toolPrompts
@@ -446,10 +447,7 @@ var sendPromptToAngie = (prompt) => {
446
447
  var import_angie_sdk5 = require("@elementor-external/angie-sdk");
447
448
  var ANGIE_INSTALL_URL = "/wp-admin/plugin-install.php?s=angie&tab=search&type=term";
448
449
  var redirectToInstallation = (prompt) => {
449
- const success = (0, import_angie_sdk5.setReferrerRedirect)(window.location.href, prompt);
450
- if (!success) {
451
- return;
452
- }
450
+ (0, import_angie_sdk5.setReferrerRedirect)(window.location.href, prompt);
453
451
  window.location.href = ANGIE_INSTALL_URL;
454
452
  };
455
453
 
@@ -457,10 +455,8 @@ var redirectToInstallation = (prompt) => {
457
455
  var import_angie_sdk6 = require("@elementor-external/angie-sdk");
458
456
  var ANGIE_APP_URL = "/wp-admin/admin.php?page=angie-app";
459
457
  var redirectToAppAdmin = (prompt) => {
460
- const success = (0, import_angie_sdk6.setReferrerRedirect)(window.location.href, prompt);
461
- if (!success) {
462
- return;
463
- }
458
+ (0, import_angie_sdk6.setReferrerRedirect)(window.location.href, prompt);
459
+ (0, import_angie_sdk6.saveState)(import_angie_sdk6.ANGIE_SIDEBAR_STATE_OPEN);
464
460
  window.location.href = ANGIE_APP_URL;
465
461
  };
466
462
 
@@ -506,6 +502,15 @@ var installAngiePlugin = async () => {
506
502
  }
507
503
  };
508
504
 
505
+ // src/utils/save-angie-consent.ts
506
+ var import_api_fetch2 = __toESM(require("@wordpress/api-fetch"));
507
+ var saveAngieConsent = async () => {
508
+ await (0, import_api_fetch2.default)({
509
+ path: "/elementor/v1/angie/consent",
510
+ method: "POST"
511
+ });
512
+ };
513
+
509
514
  // src/index.ts
510
515
  var getAngieSdk = () => getSDK();
511
516
  // Annotate the CommonJS export names for ESM import in node:
@@ -525,6 +530,7 @@ var getAngieSdk = () => getSDK();
525
530
  redirectToAppAdmin,
526
531
  redirectToInstallation,
527
532
  registerMcp,
533
+ saveAngieConsent,
528
534
  sendPromptToAngie,
529
535
  toMCPTitle,
530
536
  toolPrompts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/get-sdk.ts","../src/init.ts","../src/mcp-registry.ts","../src/angie-annotations.ts","../src/test-utils/mock-mcp-registry.ts","../src/utils/is-angie-available.ts","../src/utils/is-angie-sidebar-open.ts","../src/sampler.ts","../src/utils/prompt-builder.ts","../src/utils/send-prompt-to-angie.ts","../src/utils/redirect-to-installation.ts","../src/utils/redirect-to-app-admin.ts","../src/utils/install-angie-plugin.ts"],"sourcesContent":["import { getSDK } from './utils/get-sdk';\n\nexport {\n\tMcpServer,\n\tResourceTemplate,\n\ttype RegisteredResource,\n\ttype ToolCallback,\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { SamplingMessageSchema } from '@modelcontextprotocol/sdk/types.js';\nexport { init } from './init';\nexport { isAngieAvailable } from './utils/is-angie-available';\nexport { isAngieSidebarOpen } from './utils/is-angie-sidebar-open';\nexport * from './mcp-registry';\nexport { createSampler } from './sampler';\nexport { toolPrompts } from './utils/prompt-builder';\nexport { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences } from './angie-annotations';\nexport { sendPromptToAngie } from './utils/send-prompt-to-angie';\nexport { redirectToInstallation } from './utils/redirect-to-installation';\nexport { redirectToAppAdmin } from './utils/redirect-to-app-admin';\nexport { installAngiePlugin, type InstallAngieResult } from './utils/install-angie-plugin';\nexport const getAngieSdk = () => getSDK();\n","import { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tconst isMCPDisabled = !! ( globalThis as Record< string, unknown > ).__ELEMENTOR_MCP_DISABLED__;\n\tif ( isMCPDisabled ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { activateMcpRegistration } from './mcp-registry';\nimport { getSDK } from './utils/get-sdk';\nimport { isAngieAvailable } from './utils/is-angie-available';\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\tconst sdk = getSDK();\n\t\tsdk.waitForReady().then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { z, type z3 } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport {\n\tANGIE_MODEL_PREFERENCES,\n\tANGIE_REQUIRED_RESOURCES,\n\ttype AngieModelPreferences,\n\tcreateDefaultModelPreferences,\n} from './angie-annotations';\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\nimport { getSDK } from './utils/get-sdk';\n\ntype ZodRawShape = z3.ZodRawShape;\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nconst isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk, entries = Object.entries( mcpRegistry ), retry = 3 ) {\n\tif ( retry === 0 ) {\n\t\t/* eslint-disable-next-line no-console */\n\t\tconsole.error( 'Failed to register MCP after 3 retries. failed entries: ', entries );\n\t\treturn;\n\t}\n\tif ( entries.length === 0 ) {\n\t\treturn;\n\t}\n\tconst failed = [];\n\tfor await ( const entry of entries ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\ttry {\n\t\t\tawait sdk.registerLocalServer( {\n\t\t\t\ttitle: toMCPTitle( key ),\n\t\t\t\tname: `editor-${ key }`,\n\t\t\t\tserver: mcpServer,\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t\t} );\n\t\t} catch {\n\t\t\tfailed.push( entry );\n\t\t}\n\t}\n\tif ( failed.length > 0 ) {\n\t\treturn activateMcpRegistration( sdk, failed, retry - 1 );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\nexport const toMCPTitle = ( namespace: string ): string => {\n\tconst capitalized = namespace.charAt( 0 ).toUpperCase() + namespace.slice( 1 );\n\treturn `Editor ${ capitalized }`;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n * @param options\n * @param options.instructions\n */\nexport const getMCPByDomain = ( namespace: string, options?: { instructions?: string } ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\tconst title = toMCPTitle( namespace );\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer(\n\t\t\t{\n\t\t\t\tname: mcpName,\n\t\t\t\ttitle,\n\t\t\t\tversion: '1.0.0',\n\t\t\t},\n\t\t\t{\n\t\t\t\tinstructions: options?.instructions,\n\t\t\t}\n\t\t);\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistry( mcpServer );\n\treturn {\n\t\twaitForReady: () => getSDK().waitForReady(),\n\t\t// @ts-expect-error: TS is unable to infer the type here\n\t\tresource: async ( ...args: Parameters< McpServer[ 'registerResource' ] > ) => {\n\t\t\tawait getSDK().waitForReady();\n\t\t\treturn mcpServer.registerResource( ...args );\n\t\t},\n\t\tsendResourceUpdated: ( ...args: Parameters< McpServer[ 'server' ][ 'sendResourceUpdated' ] > ) => {\n\t\t\treturn getSDK()\n\t\t\t\t.waitForReady()\n\t\t\t\t.then( () => mcpServer.server.sendResourceUpdated( ...args ) )\n\t\t\t\t.catch( ( error: Error ) => {\n\t\t\t\t\tif ( error?.message?.includes( 'Not connected' ) ) {\n\t\t\t\t\t\treturn; // Expected when no MCP client is connected yet\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} );\n\t\t},\n\t\tmcpServer,\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t\tgetActiveChatInfo: () => {\n\t\t\tconst info = localStorage.getItem( 'angie_active_chat_id' );\n\t\t\tif ( ! info ) {\n\t\t\t\treturn {\n\t\t\t\t\texpiresAt: 0,\n\t\t\t\t\tsessionId: '',\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rawData = JSON.parse( info );\n\t\t\treturn {\n\t\t\t\texpiresAt: rawData.expiresAt as number,\n\t\t\t\tsessionId: rawData.sessionId as string,\n\t\t\t};\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | z.ZodRawShape = undefined, O extends undefined | z.ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n\tgetActiveChatInfo: () => { sessionId: string; expiresAt: number };\n\tsendResourceUpdated: McpServer[ 'server' ][ 'sendResourceUpdated' ];\n\tresource: McpServer[ 'registerResource' ];\n\tmcpServer: McpServer;\n\twaitForReady: () => Promise< void >;\n}\n\ntype ResourceList = {\n\turi: string;\n\tdescription: string;\n}[];\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | z.ZodRawShape = undefined,\n\tOutputSchema extends undefined | z.ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends z.ZodRawShape ? z.objectOutputType< OutputSchema, z.ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\t/**\n\t * Auto added fields:\n\t * @param errors z.string().optional().describe('Error message if the tool failed')\n\t */\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends z.ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, z.ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestructive?: boolean;\n\trequiredResources?: ResourceList;\n\tmodelPreferences?: AngieModelPreferences;\n};\n\nfunction createToolRegistry( server: McpServer ) {\n\tfunction addTool<\n\t\tT extends undefined | z.ZodRawShape = undefined,\n\t\tO extends undefined | z.ZodRawShape = undefined,\n\t>( opts: ToolRegistrationOptions< T, O > ) {\n\t\tconst outputSchema = opts.outputSchema as ZodRawShape | undefined;\n\t\tif ( outputSchema ) {\n\t\t\tObject.assign(\n\t\t\t\toutputSchema,\n\t\t\t\toutputSchema.errors ?? {\n\t\t\t\t\terrors: z.string().optional().describe( 'Error message if the tool failed' ),\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t// @ts-ignore: TS is unable to infer the type here\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tconst toolCallback: ToolCallback< ZodRawShape > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\t// structuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\terrors: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t},\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tconst annotations: Record< string, unknown > = {\n\t\t\tdestructiveHint: opts.isDestructive,\n\t\t\treadOnlyHint: opts.isDestructive ? false : undefined,\n\t\t\ttitle: opts.name,\n\t\t};\n\t\tconst angieAnnotations = {\n\t\t\t[ ANGIE_MODEL_PREFERENCES ]: opts.modelPreferences ?? createDefaultModelPreferences(),\n\t\t\t[ ANGIE_REQUIRED_RESOURCES ]: opts.requiredResources ?? undefined,\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\t// TODO: Uncomment this when the outputSchema is stable\n\t\t\t\t// outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations,\n\t\t\t\t_meta: angieAnnotations,\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tserver.sendToolListChanged();\n\t\t}\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","export const ANGIE_MODEL_PREFERENCES = 'angie/modelPreferences' as const;\nexport const ANGIE_REQUIRED_RESOURCES = 'angie/requiredResources' as const;\n\nexport interface AngieModelPreferences {\n\thints?: Array< { name: string } >;\n\tcostPriority?: number; // 0-1 (future use)\n\tspeedPriority?: number; // 0-1 (future use)\n\tintelligencePriority?: number; // 0-1 (future use)\n}\n\nexport function createDefaultModelPreferences(): AngieModelPreferences {\n\treturn {\n\t\thints: [ { name: 'claude-sonnet-4-5' } ],\n\t\tintelligencePriority: 0.8,\n\t\tspeedPriority: 0.7,\n\t};\n}\n","import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { type MCPRegistryEntry } from '../mcp-registry';\n\nconst mock = new Proxy(\n\t{},\n\t{\n\t\tget: () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tfunction mockedFn( ..._: unknown[] ) {}\n\t\t\treturn mockedFn;\n\t\t},\n\t}\n);\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\t// @ts-ignore\n\t\tresource: async () => {},\n\t\t// @ts-ignore\n\t\tsendResourceUpdated: () => {},\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t\tgetActiveChatInfo() {\n\t\t\treturn { sessionId: 'mock-session-id', expiresAt: Date.now() + 3600000 };\n\t\t},\n\t\tmcpServer: mock as McpServer,\n\t};\n};\n","import { getAngieIframe } from '@elementor-external/angie-sdk';\n\nexport const isAngieAvailable = (): boolean => {\n\treturn !! getAngieIframe();\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, getAngieSidebarSavedState } from '@elementor-external/angie-sdk';\n\nexport const isAngieSidebarOpen = (): boolean => {\n\treturn getAngieSidebarSavedState() === ANGIE_SIDEBAR_STATE_OPEN;\n};\n","import { type z } from '@elementor/schema';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { SamplingMessageSchema, type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\ntype Server = RequestHandlerExtra< ServerRequest, ServerNotification >;\ntype Opts = {\n\tmaxTokens?: number;\n\tmodelPreferences?: string;\n\tmodel?: string;\n};\n\nconst DEFAULT_OPTS: Opts = {\n\tmaxTokens: 10000,\n\tmodelPreferences: 'openai',\n\tmodel: 'gpt-4o',\n};\n\ntype SamplingOpts = {\n\tsystemPrompt?: string;\n\tstructuredOutput?: z.ZodTypeAny;\n\tmessages: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n\trequestParams?: { [ key: string ]: string };\n};\n\nconst DEFAULT_STRUCTURED_OUTPUT = {\n\ttype: 'object',\n\tproperties: {\n\t\tcontent: {\n\t\t\ttype: 'string',\n\t\t\tdescription: 'Result',\n\t\t},\n\t},\n\trequired: [ 'content' ],\n\tadditionalProperties: false,\n};\n\nexport const createSampler = ( server: Server, opts: Opts = DEFAULT_OPTS ) => {\n\tconst { maxTokens = 1000, modelPreferences = 'openai', model = 'gpt-4o' } = opts;\n\tconst exec = async ( payload: SamplingOpts ) => {\n\t\tconst systemPromptObject = { ...( payload.systemPrompt ? { systemPrompt: payload.systemPrompt } : {} ) };\n\t\tconst requestParams = payload.requestParams || {};\n\t\tconst result = await server.sendRequest(\n\t\t\t{\n\t\t\t\tmethod: 'sampling/createMessage',\n\t\t\t\tparams: {\n\t\t\t\t\t...requestParams,\n\t\t\t\t\tmaxTokens,\n\t\t\t\t\tmodelPreferences: {\n\t\t\t\t\t\thints: [ { name: modelPreferences } ],\n\t\t\t\t\t},\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t...systemPromptObject,\n\t\t\t\t\t\t...{ structured_output: payload.structuredOutput || DEFAULT_STRUCTURED_OUTPUT },\n\t\t\t\t\t},\n\t\t\t\t\tmessages: payload.messages,\n\t\t\t\t},\n\t\t\t\t// ...systemPromptObject,\n\t\t\t},\n\t\t\tSamplingMessageSchema\n\t\t);\n\t\treturn result.content;\n\t};\n\treturn exec;\n};\n","class ToolPrompts {\n\tpublic _description = '';\n\tpublic _parameters: Record< string, string > = {};\n\tpublic _examples: string[] = [];\n\tpublic _furtherInstructions: string[] = [];\n\n\tconstructor( public name: string ) {}\n\n\tdescription(): string;\n\tdescription( desc: string ): this;\n\tdescription( desc?: string | undefined ) {\n\t\tif ( typeof desc === 'undefined' ) {\n\t\t\treturn this._description;\n\t\t}\n\t\tthis._description = desc;\n\t\treturn this;\n\t}\n\n\tparameter( key: string ): string;\n\tparameter( key: string, description: string ): this;\n\tparameter( key: string, description?: string ) {\n\t\tif ( typeof description === 'undefined' ) {\n\t\t\treturn this._parameters[ key ];\n\t\t}\n\t\tthis._parameters[ key ] = `**${ key }**:\\n${ description }`;\n\t\treturn this;\n\t}\n\n\tinstruction( instruction: string ): this {\n\t\tthis._furtherInstructions.push( instruction );\n\t\treturn this;\n\t}\n\n\texample( example: string ): this {\n\t\tthis._examples.push( example );\n\t\treturn this;\n\t}\n\n\tpublic get examples() {\n\t\treturn this._examples.join( '\\n\\n' );\n\t}\n\n\tprompt(): string {\n\t\treturn `# ${ this.name }\n# Description\n${ this._description }\n\n${ this._parameters.length ? '# Parameters' : '' }\n${ Object.values( this._parameters ).join( '\\n\\n' ) }\n\n${ this._examples.length ? '# Examples' : '' }\n${ this.examples }\n\n${ this._furtherInstructions.length ? '# Further Instructions' : '' }\n${ this._furtherInstructions.join( '\\n\\n' ) }\n`.trim();\n\t}\n}\n\nexport const toolPrompts = ( name: string ) => {\n\treturn new ToolPrompts( name );\n};\n","import { getAngieIframe, toggleAngieSidebar } from '@elementor-external/angie-sdk';\n\nexport const sendPromptToAngie = ( prompt?: string ) => {\n\tconst angieSidebar = getAngieIframe();\n\n\tif ( ! angieSidebar ) {\n\t\treturn;\n\t}\n\n\ttoggleAngieSidebar( angieSidebar, true );\n\n\tif ( ! prompt ) {\n\t\treturn;\n\t}\n\n\twindow.location.hash = `angie-prompt=${ encodeURIComponent( prompt ) }`;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_INSTALL_URL = '/wp-admin/plugin-install.php?s=angie&tab=search&type=term';\n\nexport const redirectToInstallation = ( prompt: string ) => {\n\tconst success = setReferrerRedirect( window.location.href, prompt );\n\n\tif ( ! success ) {\n\t\treturn;\n\t}\n\n\twindow.location.href = ANGIE_INSTALL_URL;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_APP_URL = '/wp-admin/admin.php?page=angie-app';\n\nexport const redirectToAppAdmin = ( prompt: string ) => {\n\tconst success = setReferrerRedirect( window.location.href, prompt );\n\n\tif ( ! success ) {\n\t\treturn;\n\t}\n\n\twindow.location.href = ANGIE_APP_URL;\n};\n","import apiFetch from '@wordpress/api-fetch';\n\ntype PluginResponse = {\n\tplugin: string;\n\tstatus: 'active' | 'inactive';\n\tname: string;\n};\n\ntype PluginErrorResponse = {\n\tcode: string;\n\tmessage: string;\n};\n\nexport type InstallAngieResult = { success: true } | { success: false; error: string; code?: string };\n\nconst ANGIE_SLUG = 'angie';\n\nconst isPluginErrorResponse = ( response: unknown ): response is PluginErrorResponse => {\n\treturn typeof response === 'object' && response !== null && 'code' in response && 'message' in response;\n};\n\nconst activatePlugin = async ( pluginPath: string ): Promise< PluginResponse > => {\n\treturn apiFetch< PluginResponse >( {\n\t\tpath: `/wp/v2/plugins/${ pluginPath }`,\n\t\tmethod: 'POST',\n\t\tdata: { status: 'active' },\n\t} );\n};\n\nconst installPlugin = async (): Promise< PluginResponse > => {\n\ttry {\n\t\treturn await apiFetch< PluginResponse >( {\n\t\t\tpath: '/wp/v2/plugins',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tslug: ANGIE_SLUG,\n\t\t\t\tstatus: 'active',\n\t\t\t},\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) && error.code === 'folder_exists' ) {\n\t\t\treturn activatePlugin( `${ ANGIE_SLUG }/${ ANGIE_SLUG }` );\n\t\t}\n\n\t\tthrow error;\n\t}\n};\n\nexport const installAngiePlugin = async (): Promise< InstallAngieResult > => {\n\ttry {\n\t\tawait installPlugin();\n\n\t\treturn { success: true };\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) ) {\n\t\t\treturn { success: false, error: error.message, code: error.code };\n\t\t}\n\n\t\treturn { success: false, error: 'Unknown error occurred' };\n\t}\n};\n"],"mappings":"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","names":["import_mcp","import_types","sdk","import_angie_sdk","sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","apiFetch"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/get-sdk.ts","../src/init.ts","../src/mcp-registry.ts","../src/angie-annotations.ts","../src/test-utils/mock-mcp-registry.ts","../src/utils/is-angie-available.ts","../src/utils/is-angie-sidebar-open.ts","../src/sampler.ts","../src/utils/prompt-builder.ts","../src/utils/send-prompt-to-angie.ts","../src/utils/redirect-to-installation.ts","../src/utils/redirect-to-app-admin.ts","../src/utils/install-angie-plugin.ts","../src/utils/save-angie-consent.ts"],"sourcesContent":["import { getSDK } from './utils/get-sdk';\n\nexport {\n\tMcpServer,\n\tResourceTemplate,\n\ttype RegisteredResource,\n\ttype ToolCallback,\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { SamplingMessageSchema } from '@modelcontextprotocol/sdk/types.js';\nexport { init } from './init';\nexport { isAngieAvailable } from './utils/is-angie-available';\nexport { isAngieSidebarOpen } from './utils/is-angie-sidebar-open';\nexport * from './mcp-registry';\nexport { createSampler } from './sampler';\nexport { toolPrompts } from './utils/prompt-builder';\nexport { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences } from './angie-annotations';\nexport { sendPromptToAngie } from './utils/send-prompt-to-angie';\nexport { redirectToInstallation } from './utils/redirect-to-installation';\nexport { redirectToAppAdmin } from './utils/redirect-to-app-admin';\nexport { installAngiePlugin, type InstallAngieResult } from './utils/install-angie-plugin';\nexport { saveAngieConsent } from './utils/save-angie-consent';\nexport const getAngieSdk = () => getSDK();\n","import { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tconst isMCPDisabled = !! ( globalThis as Record< string, unknown > ).__ELEMENTOR_MCP_DISABLED__;\n\tif ( isMCPDisabled ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { activateMcpRegistration } from './mcp-registry';\nimport { getSDK } from './utils/get-sdk';\nimport { isAngieAvailable } from './utils/is-angie-available';\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\tconst sdk = getSDK();\n\t\tsdk.waitForReady().then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { z, type z3 } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport {\n\tANGIE_MODEL_PREFERENCES,\n\tANGIE_REQUIRED_RESOURCES,\n\ttype AngieModelPreferences,\n\tcreateDefaultModelPreferences,\n} from './angie-annotations';\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\nimport { getSDK } from './utils/get-sdk';\n\ntype ZodRawShape = z3.ZodRawShape;\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nconst isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk, entries = Object.entries( mcpRegistry ), retry = 3 ) {\n\tif ( retry === 0 ) {\n\t\t/* eslint-disable-next-line no-console */\n\t\tconsole.error( 'Failed to register MCP after 3 retries. failed entries: ', entries );\n\t\treturn;\n\t}\n\tif ( entries.length === 0 ) {\n\t\treturn;\n\t}\n\tconst failed = [];\n\tfor await ( const entry of entries ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\ttry {\n\t\t\tawait sdk.registerLocalServer( {\n\t\t\t\ttitle: toMCPTitle( key ),\n\t\t\t\tname: `editor-${ key }`,\n\t\t\t\tserver: mcpServer,\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t\t} );\n\t\t} catch {\n\t\t\tfailed.push( entry );\n\t\t}\n\t}\n\tif ( failed.length > 0 ) {\n\t\treturn activateMcpRegistration( sdk, failed, retry - 1 );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\nexport const toMCPTitle = ( namespace: string ): string => {\n\tconst capitalized = namespace.charAt( 0 ).toUpperCase() + namespace.slice( 1 );\n\treturn `Editor ${ capitalized }`;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n * @param options\n * @param options.instructions\n */\nexport const getMCPByDomain = ( namespace: string, options?: { instructions?: string } ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\tconst title = toMCPTitle( namespace );\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer(\n\t\t\t{\n\t\t\t\tname: mcpName,\n\t\t\t\ttitle,\n\t\t\t\tversion: '1.0.0',\n\t\t\t},\n\t\t\t{\n\t\t\t\tinstructions: options?.instructions,\n\t\t\t}\n\t\t);\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistry( mcpServer );\n\treturn {\n\t\twaitForReady: () => getSDK().waitForReady(),\n\t\t// @ts-expect-error: TS is unable to infer the type here\n\t\tresource: async ( ...args: Parameters< McpServer[ 'registerResource' ] > ) => {\n\t\t\tawait getSDK().waitForReady();\n\t\t\treturn mcpServer.registerResource( ...args );\n\t\t},\n\t\tsendResourceUpdated: ( ...args: Parameters< McpServer[ 'server' ][ 'sendResourceUpdated' ] > ) => {\n\t\t\treturn getSDK()\n\t\t\t\t.waitForReady()\n\t\t\t\t.then( () => mcpServer.server.sendResourceUpdated( ...args ) )\n\t\t\t\t.catch( ( error: Error ) => {\n\t\t\t\t\tif ( error?.message?.includes( 'Not connected' ) ) {\n\t\t\t\t\t\treturn; // Expected when no MCP client is connected yet\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} );\n\t\t},\n\t\tmcpServer,\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t\tgetActiveChatInfo: () => {\n\t\t\tconst info = localStorage.getItem( 'angie_active_chat_id' );\n\t\t\tif ( ! info ) {\n\t\t\t\treturn {\n\t\t\t\t\texpiresAt: 0,\n\t\t\t\t\tsessionId: '',\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rawData = JSON.parse( info );\n\t\t\treturn {\n\t\t\t\texpiresAt: rawData.expiresAt as number,\n\t\t\t\tsessionId: rawData.sessionId as string,\n\t\t\t};\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | z.ZodRawShape = undefined, O extends undefined | z.ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n\tgetActiveChatInfo: () => { sessionId: string; expiresAt: number };\n\tsendResourceUpdated: McpServer[ 'server' ][ 'sendResourceUpdated' ];\n\tresource: McpServer[ 'registerResource' ];\n\tmcpServer: McpServer;\n\twaitForReady: () => Promise< void >;\n}\n\ntype ResourceList = {\n\turi: string;\n\tdescription: string;\n}[];\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | z.ZodRawShape = undefined,\n\tOutputSchema extends undefined | z.ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends z.ZodRawShape ? z.objectOutputType< OutputSchema, z.ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\t/**\n\t * Auto added fields:\n\t * @param errors z.string().optional().describe('Error message if the tool failed')\n\t */\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends z.ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, z.ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestructive?: boolean;\n\trequiredResources?: ResourceList;\n\tmodelPreferences?: AngieModelPreferences;\n};\n\nfunction createToolRegistry( server: McpServer ) {\n\tfunction addTool<\n\t\tT extends undefined | z.ZodRawShape = undefined,\n\t\tO extends undefined | z.ZodRawShape = undefined,\n\t>( opts: ToolRegistrationOptions< T, O > ) {\n\t\tconst outputSchema = opts.outputSchema as ZodRawShape | undefined;\n\t\tif ( outputSchema ) {\n\t\t\tObject.assign(\n\t\t\t\toutputSchema,\n\t\t\t\toutputSchema.errors ?? {\n\t\t\t\t\terrors: z.string().optional().describe( 'Error message if the tool failed' ),\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t// @ts-ignore: TS is unable to infer the type here\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tconst toolCallback: ToolCallback< ZodRawShape > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\t// structuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\terrors: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t},\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tconst annotations: Record< string, unknown > = {\n\t\t\tdestructiveHint: opts.isDestructive,\n\t\t\treadOnlyHint: opts.isDestructive ? false : undefined,\n\t\t\ttitle: opts.name,\n\t\t};\n\t\tconst angieAnnotations = {\n\t\t\t[ ANGIE_MODEL_PREFERENCES ]: opts.modelPreferences ?? createDefaultModelPreferences(),\n\t\t\t[ ANGIE_REQUIRED_RESOURCES ]: opts.requiredResources ?? undefined,\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\t// TODO: Uncomment this when the outputSchema is stable\n\t\t\t\t// outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations,\n\t\t\t\t_meta: angieAnnotations,\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tserver.sendToolListChanged();\n\t\t}\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","export const ANGIE_MODEL_PREFERENCES = 'angie/modelPreferences' as const;\nexport const ANGIE_REQUIRED_RESOURCES = 'angie/requiredResources' as const;\n\nexport interface AngieModelPreferences {\n\thints?: Array< { name: string } >;\n\tcostPriority?: number; // 0-1 (future use)\n\tspeedPriority?: number; // 0-1 (future use)\n\tintelligencePriority?: number; // 0-1 (future use)\n}\n\nexport function createDefaultModelPreferences(): AngieModelPreferences {\n\treturn {\n\t\thints: [ { name: 'claude-sonnet-4-5' } ],\n\t\tintelligencePriority: 0.8,\n\t\tspeedPriority: 0.7,\n\t};\n}\n","import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { type MCPRegistryEntry } from '../mcp-registry';\n\nconst mock = new Proxy(\n\t{},\n\t{\n\t\tget: () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tfunction mockedFn( ..._: unknown[] ) {}\n\t\t\treturn mockedFn;\n\t\t},\n\t}\n);\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\t// @ts-ignore\n\t\tresource: async () => {},\n\t\t// @ts-ignore\n\t\tsendResourceUpdated: () => {},\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t\tgetActiveChatInfo() {\n\t\t\treturn { sessionId: 'mock-session-id', expiresAt: Date.now() + 3600000 };\n\t\t},\n\t\tmcpServer: mock as McpServer,\n\t};\n};\n","import { getAngieIframe } from '@elementor-external/angie-sdk';\n\nexport const isAngieAvailable = (): boolean => {\n\treturn !! getAngieIframe();\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, getAngieSidebarSavedState } from '@elementor-external/angie-sdk';\n\nexport const isAngieSidebarOpen = (): boolean => {\n\treturn getAngieSidebarSavedState() === ANGIE_SIDEBAR_STATE_OPEN;\n};\n","import { type z } from '@elementor/schema';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { SamplingMessageSchema, type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\ntype Server = RequestHandlerExtra< ServerRequest, ServerNotification >;\ntype Opts = {\n\tmaxTokens?: number;\n\tmodelPreferences?: string;\n\tmodel?: string;\n};\n\nconst DEFAULT_OPTS: Opts = {\n\tmaxTokens: 10000,\n\tmodelPreferences: 'openai',\n\tmodel: 'gpt-4o',\n};\n\ntype SamplingOpts = {\n\tsystemPrompt?: string;\n\tstructuredOutput?: z.ZodTypeAny;\n\tmessages: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n\trequestParams?: { [ key: string ]: string };\n};\n\nconst DEFAULT_STRUCTURED_OUTPUT = {\n\ttype: 'object',\n\tproperties: {\n\t\tcontent: {\n\t\t\ttype: 'string',\n\t\t\tdescription: 'Result',\n\t\t},\n\t},\n\trequired: [ 'content' ],\n\tadditionalProperties: false,\n};\n\nexport const createSampler = ( server: Server, opts: Opts = DEFAULT_OPTS ) => {\n\tconst { maxTokens = 1000, modelPreferences = 'openai', model = 'gpt-4o' } = opts;\n\tconst exec = async ( payload: SamplingOpts ) => {\n\t\tconst systemPromptObject = { ...( payload.systemPrompt ? { systemPrompt: payload.systemPrompt } : {} ) };\n\t\tconst requestParams = payload.requestParams || {};\n\t\tconst result = await server.sendRequest(\n\t\t\t{\n\t\t\t\tmethod: 'sampling/createMessage',\n\t\t\t\tparams: {\n\t\t\t\t\t...requestParams,\n\t\t\t\t\tmaxTokens,\n\t\t\t\t\tmodelPreferences: {\n\t\t\t\t\t\thints: [ { name: modelPreferences } ],\n\t\t\t\t\t},\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t...systemPromptObject,\n\t\t\t\t\t\t...{ structured_output: payload.structuredOutput || DEFAULT_STRUCTURED_OUTPUT },\n\t\t\t\t\t},\n\t\t\t\t\tmessages: payload.messages,\n\t\t\t\t},\n\t\t\t\t// ...systemPromptObject,\n\t\t\t},\n\t\t\tSamplingMessageSchema\n\t\t);\n\t\treturn result.content;\n\t};\n\treturn exec;\n};\n","class ToolPrompts {\n\tpublic _description = '';\n\tpublic _parameters: Record< string, string > = {};\n\tpublic _examples: string[] = [];\n\tpublic _furtherInstructions: string[] = [];\n\n\tconstructor( public name: string ) {}\n\n\tdescription(): string;\n\tdescription( desc: string ): this;\n\tdescription( desc?: string | undefined ) {\n\t\tif ( typeof desc === 'undefined' ) {\n\t\t\treturn this._description;\n\t\t}\n\t\tthis._description = desc;\n\t\treturn this;\n\t}\n\n\tparameter( key: string ): string;\n\tparameter( key: string, description: string ): this;\n\tparameter( key: string, description?: string ) {\n\t\tif ( typeof description === 'undefined' ) {\n\t\t\treturn this._parameters[ key ];\n\t\t}\n\t\tthis._parameters[ key ] = `**${ key }**:\\n${ description }`;\n\t\treturn this;\n\t}\n\n\tinstruction( instruction: string ): this {\n\t\tthis._furtherInstructions.push( instruction );\n\t\treturn this;\n\t}\n\n\texample( example: string ): this {\n\t\tthis._examples.push( example );\n\t\treturn this;\n\t}\n\n\tpublic get examples() {\n\t\treturn this._examples.join( '\\n\\n' );\n\t}\n\n\tprompt(): string {\n\t\treturn `# ${ this.name }\n# Description\n${ this._description }\n\n${ this._parameters.length ? '# Parameters' : '' }\n${ Object.values( this._parameters ).join( '\\n\\n' ) }\n\n${ this._examples.length ? '# Examples' : '' }\n${ this.examples }\n\n${ this._furtherInstructions.length ? '# Further Instructions' : '' }\n${ this._furtherInstructions.join( '\\n\\n' ) }\n`.trim();\n\t}\n}\n\nexport const toolPrompts = ( name: string ) => {\n\treturn new ToolPrompts( name );\n};\n","import { getAngieIframe, toggleAngieSidebar } from '@elementor-external/angie-sdk';\n\nexport const sendPromptToAngie = ( prompt?: string ) => {\n\tconst angieSidebar = getAngieIframe();\n\n\tif ( ! angieSidebar ) {\n\t\treturn;\n\t}\n\n\ttoggleAngieSidebar( angieSidebar, true );\n\n\tif ( ! prompt ) {\n\t\treturn;\n\t}\n\n\twindow.location.hash = `angie-prompt=${ encodeURIComponent( prompt ) }`;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_INSTALL_URL = '/wp-admin/plugin-install.php?s=angie&tab=search&type=term';\n\nexport const redirectToInstallation = ( prompt?: string ) => {\n\tsetReferrerRedirect( window.location.href, prompt );\n\twindow.location.href = ANGIE_INSTALL_URL;\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, saveState, setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_APP_URL = '/wp-admin/admin.php?page=angie-app';\n\nexport const redirectToAppAdmin = ( prompt?: string ) => {\n\tsetReferrerRedirect( window.location.href, prompt );\n\tsaveState( ANGIE_SIDEBAR_STATE_OPEN );\n\twindow.location.href = ANGIE_APP_URL;\n};\n","import apiFetch from '@wordpress/api-fetch';\n\ntype PluginResponse = {\n\tplugin: string;\n\tstatus: 'active' | 'inactive';\n\tname: string;\n};\n\ntype PluginErrorResponse = {\n\tcode: string;\n\tmessage: string;\n};\n\nexport type InstallAngieResult = { success: true } | { success: false; error: string; code?: string };\n\nconst ANGIE_SLUG = 'angie';\n\nconst isPluginErrorResponse = ( response: unknown ): response is PluginErrorResponse => {\n\treturn typeof response === 'object' && response !== null && 'code' in response && 'message' in response;\n};\n\nconst activatePlugin = async ( pluginPath: string ): Promise< PluginResponse > => {\n\treturn apiFetch< PluginResponse >( {\n\t\tpath: `/wp/v2/plugins/${ pluginPath }`,\n\t\tmethod: 'POST',\n\t\tdata: { status: 'active' },\n\t} );\n};\n\nconst installPlugin = async (): Promise< PluginResponse > => {\n\ttry {\n\t\treturn await apiFetch< PluginResponse >( {\n\t\t\tpath: '/wp/v2/plugins',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tslug: ANGIE_SLUG,\n\t\t\t\tstatus: 'active',\n\t\t\t},\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) && error.code === 'folder_exists' ) {\n\t\t\treturn activatePlugin( `${ ANGIE_SLUG }/${ ANGIE_SLUG }` );\n\t\t}\n\n\t\tthrow error;\n\t}\n};\n\nexport const installAngiePlugin = async (): Promise< InstallAngieResult > => {\n\ttry {\n\t\tawait installPlugin();\n\n\t\treturn { success: true };\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) ) {\n\t\t\treturn { success: false, error: error.message, code: error.code };\n\t\t}\n\n\t\treturn { success: false, error: 'Unknown error occurred' };\n\t}\n};\n","import apiFetch from '@wordpress/api-fetch';\n\nexport const saveAngieConsent = async (): Promise< void > => {\n\tawait apiFetch( {\n\t\tpath: '/elementor/v1/angie/consent',\n\t\tmethod: 'POST',\n\t} );\n};\n"],"mappings":"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","names":["import_mcp","import_types","sdk","import_angie_sdk","sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","apiFetch","import_api_fetch","apiFetch"]}
package/dist/index.mjs CHANGED
@@ -396,21 +396,16 @@ var sendPromptToAngie = (prompt) => {
396
396
  import { setReferrerRedirect } from "@elementor-external/angie-sdk";
397
397
  var ANGIE_INSTALL_URL = "/wp-admin/plugin-install.php?s=angie&tab=search&type=term";
398
398
  var redirectToInstallation = (prompt) => {
399
- const success = setReferrerRedirect(window.location.href, prompt);
400
- if (!success) {
401
- return;
402
- }
399
+ setReferrerRedirect(window.location.href, prompt);
403
400
  window.location.href = ANGIE_INSTALL_URL;
404
401
  };
405
402
 
406
403
  // src/utils/redirect-to-app-admin.ts
407
- import { setReferrerRedirect as setReferrerRedirect2 } from "@elementor-external/angie-sdk";
404
+ import { ANGIE_SIDEBAR_STATE_OPEN as ANGIE_SIDEBAR_STATE_OPEN2, saveState, setReferrerRedirect as setReferrerRedirect2 } from "@elementor-external/angie-sdk";
408
405
  var ANGIE_APP_URL = "/wp-admin/admin.php?page=angie-app";
409
406
  var redirectToAppAdmin = (prompt) => {
410
- const success = setReferrerRedirect2(window.location.href, prompt);
411
- if (!success) {
412
- return;
413
- }
407
+ setReferrerRedirect2(window.location.href, prompt);
408
+ saveState(ANGIE_SIDEBAR_STATE_OPEN2);
414
409
  window.location.href = ANGIE_APP_URL;
415
410
  };
416
411
 
@@ -456,6 +451,15 @@ var installAngiePlugin = async () => {
456
451
  }
457
452
  };
458
453
 
454
+ // src/utils/save-angie-consent.ts
455
+ import apiFetch2 from "@wordpress/api-fetch";
456
+ var saveAngieConsent = async () => {
457
+ await apiFetch2({
458
+ path: "/elementor/v1/angie/consent",
459
+ method: "POST"
460
+ });
461
+ };
462
+
459
463
  // src/index.ts
460
464
  var getAngieSdk = () => getSDK();
461
465
  export {
@@ -474,6 +478,7 @@ export {
474
478
  redirectToAppAdmin,
475
479
  redirectToInstallation,
476
480
  registerMcp,
481
+ saveAngieConsent,
477
482
  sendPromptToAngie,
478
483
  toMCPTitle,
479
484
  toolPrompts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/get-sdk.ts","../src/index.ts","../src/init.ts","../src/mcp-registry.ts","../src/angie-annotations.ts","../src/test-utils/mock-mcp-registry.ts","../src/utils/is-angie-available.ts","../src/utils/is-angie-sidebar-open.ts","../src/sampler.ts","../src/utils/prompt-builder.ts","../src/utils/send-prompt-to-angie.ts","../src/utils/redirect-to-installation.ts","../src/utils/redirect-to-app-admin.ts","../src/utils/install-angie-plugin.ts"],"sourcesContent":["import { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tconst isMCPDisabled = !! ( globalThis as Record< string, unknown > ).__ELEMENTOR_MCP_DISABLED__;\n\tif ( isMCPDisabled ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n","import { getSDK } from './utils/get-sdk';\n\nexport {\n\tMcpServer,\n\tResourceTemplate,\n\ttype RegisteredResource,\n\ttype ToolCallback,\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { SamplingMessageSchema } from '@modelcontextprotocol/sdk/types.js';\nexport { init } from './init';\nexport { isAngieAvailable } from './utils/is-angie-available';\nexport { isAngieSidebarOpen } from './utils/is-angie-sidebar-open';\nexport * from './mcp-registry';\nexport { createSampler } from './sampler';\nexport { toolPrompts } from './utils/prompt-builder';\nexport { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences } from './angie-annotations';\nexport { sendPromptToAngie } from './utils/send-prompt-to-angie';\nexport { redirectToInstallation } from './utils/redirect-to-installation';\nexport { redirectToAppAdmin } from './utils/redirect-to-app-admin';\nexport { installAngiePlugin, type InstallAngieResult } from './utils/install-angie-plugin';\nexport const getAngieSdk = () => getSDK();\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { activateMcpRegistration } from './mcp-registry';\nimport { getSDK } from './utils/get-sdk';\nimport { isAngieAvailable } from './utils/is-angie-available';\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\tconst sdk = getSDK();\n\t\tsdk.waitForReady().then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { z, type z3 } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport {\n\tANGIE_MODEL_PREFERENCES,\n\tANGIE_REQUIRED_RESOURCES,\n\ttype AngieModelPreferences,\n\tcreateDefaultModelPreferences,\n} from './angie-annotations';\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\nimport { getSDK } from './utils/get-sdk';\n\ntype ZodRawShape = z3.ZodRawShape;\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nconst isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk, entries = Object.entries( mcpRegistry ), retry = 3 ) {\n\tif ( retry === 0 ) {\n\t\t/* eslint-disable-next-line no-console */\n\t\tconsole.error( 'Failed to register MCP after 3 retries. failed entries: ', entries );\n\t\treturn;\n\t}\n\tif ( entries.length === 0 ) {\n\t\treturn;\n\t}\n\tconst failed = [];\n\tfor await ( const entry of entries ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\ttry {\n\t\t\tawait sdk.registerLocalServer( {\n\t\t\t\ttitle: toMCPTitle( key ),\n\t\t\t\tname: `editor-${ key }`,\n\t\t\t\tserver: mcpServer,\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t\t} );\n\t\t} catch {\n\t\t\tfailed.push( entry );\n\t\t}\n\t}\n\tif ( failed.length > 0 ) {\n\t\treturn activateMcpRegistration( sdk, failed, retry - 1 );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\nexport const toMCPTitle = ( namespace: string ): string => {\n\tconst capitalized = namespace.charAt( 0 ).toUpperCase() + namespace.slice( 1 );\n\treturn `Editor ${ capitalized }`;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n * @param options\n * @param options.instructions\n */\nexport const getMCPByDomain = ( namespace: string, options?: { instructions?: string } ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\tconst title = toMCPTitle( namespace );\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer(\n\t\t\t{\n\t\t\t\tname: mcpName,\n\t\t\t\ttitle,\n\t\t\t\tversion: '1.0.0',\n\t\t\t},\n\t\t\t{\n\t\t\t\tinstructions: options?.instructions,\n\t\t\t}\n\t\t);\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistry( mcpServer );\n\treturn {\n\t\twaitForReady: () => getSDK().waitForReady(),\n\t\t// @ts-expect-error: TS is unable to infer the type here\n\t\tresource: async ( ...args: Parameters< McpServer[ 'registerResource' ] > ) => {\n\t\t\tawait getSDK().waitForReady();\n\t\t\treturn mcpServer.registerResource( ...args );\n\t\t},\n\t\tsendResourceUpdated: ( ...args: Parameters< McpServer[ 'server' ][ 'sendResourceUpdated' ] > ) => {\n\t\t\treturn getSDK()\n\t\t\t\t.waitForReady()\n\t\t\t\t.then( () => mcpServer.server.sendResourceUpdated( ...args ) )\n\t\t\t\t.catch( ( error: Error ) => {\n\t\t\t\t\tif ( error?.message?.includes( 'Not connected' ) ) {\n\t\t\t\t\t\treturn; // Expected when no MCP client is connected yet\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} );\n\t\t},\n\t\tmcpServer,\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t\tgetActiveChatInfo: () => {\n\t\t\tconst info = localStorage.getItem( 'angie_active_chat_id' );\n\t\t\tif ( ! info ) {\n\t\t\t\treturn {\n\t\t\t\t\texpiresAt: 0,\n\t\t\t\t\tsessionId: '',\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rawData = JSON.parse( info );\n\t\t\treturn {\n\t\t\t\texpiresAt: rawData.expiresAt as number,\n\t\t\t\tsessionId: rawData.sessionId as string,\n\t\t\t};\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | z.ZodRawShape = undefined, O extends undefined | z.ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n\tgetActiveChatInfo: () => { sessionId: string; expiresAt: number };\n\tsendResourceUpdated: McpServer[ 'server' ][ 'sendResourceUpdated' ];\n\tresource: McpServer[ 'registerResource' ];\n\tmcpServer: McpServer;\n\twaitForReady: () => Promise< void >;\n}\n\ntype ResourceList = {\n\turi: string;\n\tdescription: string;\n}[];\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | z.ZodRawShape = undefined,\n\tOutputSchema extends undefined | z.ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends z.ZodRawShape ? z.objectOutputType< OutputSchema, z.ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\t/**\n\t * Auto added fields:\n\t * @param errors z.string().optional().describe('Error message if the tool failed')\n\t */\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends z.ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, z.ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestructive?: boolean;\n\trequiredResources?: ResourceList;\n\tmodelPreferences?: AngieModelPreferences;\n};\n\nfunction createToolRegistry( server: McpServer ) {\n\tfunction addTool<\n\t\tT extends undefined | z.ZodRawShape = undefined,\n\t\tO extends undefined | z.ZodRawShape = undefined,\n\t>( opts: ToolRegistrationOptions< T, O > ) {\n\t\tconst outputSchema = opts.outputSchema as ZodRawShape | undefined;\n\t\tif ( outputSchema ) {\n\t\t\tObject.assign(\n\t\t\t\toutputSchema,\n\t\t\t\toutputSchema.errors ?? {\n\t\t\t\t\terrors: z.string().optional().describe( 'Error message if the tool failed' ),\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t// @ts-ignore: TS is unable to infer the type here\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tconst toolCallback: ToolCallback< ZodRawShape > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\t// structuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\terrors: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t},\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tconst annotations: Record< string, unknown > = {\n\t\t\tdestructiveHint: opts.isDestructive,\n\t\t\treadOnlyHint: opts.isDestructive ? false : undefined,\n\t\t\ttitle: opts.name,\n\t\t};\n\t\tconst angieAnnotations = {\n\t\t\t[ ANGIE_MODEL_PREFERENCES ]: opts.modelPreferences ?? createDefaultModelPreferences(),\n\t\t\t[ ANGIE_REQUIRED_RESOURCES ]: opts.requiredResources ?? undefined,\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\t// TODO: Uncomment this when the outputSchema is stable\n\t\t\t\t// outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations,\n\t\t\t\t_meta: angieAnnotations,\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tserver.sendToolListChanged();\n\t\t}\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","export const ANGIE_MODEL_PREFERENCES = 'angie/modelPreferences' as const;\nexport const ANGIE_REQUIRED_RESOURCES = 'angie/requiredResources' as const;\n\nexport interface AngieModelPreferences {\n\thints?: Array< { name: string } >;\n\tcostPriority?: number; // 0-1 (future use)\n\tspeedPriority?: number; // 0-1 (future use)\n\tintelligencePriority?: number; // 0-1 (future use)\n}\n\nexport function createDefaultModelPreferences(): AngieModelPreferences {\n\treturn {\n\t\thints: [ { name: 'claude-sonnet-4-5' } ],\n\t\tintelligencePriority: 0.8,\n\t\tspeedPriority: 0.7,\n\t};\n}\n","import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { type MCPRegistryEntry } from '../mcp-registry';\n\nconst mock = new Proxy(\n\t{},\n\t{\n\t\tget: () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tfunction mockedFn( ..._: unknown[] ) {}\n\t\t\treturn mockedFn;\n\t\t},\n\t}\n);\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\t// @ts-ignore\n\t\tresource: async () => {},\n\t\t// @ts-ignore\n\t\tsendResourceUpdated: () => {},\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t\tgetActiveChatInfo() {\n\t\t\treturn { sessionId: 'mock-session-id', expiresAt: Date.now() + 3600000 };\n\t\t},\n\t\tmcpServer: mock as McpServer,\n\t};\n};\n","import { getAngieIframe } from '@elementor-external/angie-sdk';\n\nexport const isAngieAvailable = (): boolean => {\n\treturn !! getAngieIframe();\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, getAngieSidebarSavedState } from '@elementor-external/angie-sdk';\n\nexport const isAngieSidebarOpen = (): boolean => {\n\treturn getAngieSidebarSavedState() === ANGIE_SIDEBAR_STATE_OPEN;\n};\n","import { type z } from '@elementor/schema';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { SamplingMessageSchema, type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\ntype Server = RequestHandlerExtra< ServerRequest, ServerNotification >;\ntype Opts = {\n\tmaxTokens?: number;\n\tmodelPreferences?: string;\n\tmodel?: string;\n};\n\nconst DEFAULT_OPTS: Opts = {\n\tmaxTokens: 10000,\n\tmodelPreferences: 'openai',\n\tmodel: 'gpt-4o',\n};\n\ntype SamplingOpts = {\n\tsystemPrompt?: string;\n\tstructuredOutput?: z.ZodTypeAny;\n\tmessages: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n\trequestParams?: { [ key: string ]: string };\n};\n\nconst DEFAULT_STRUCTURED_OUTPUT = {\n\ttype: 'object',\n\tproperties: {\n\t\tcontent: {\n\t\t\ttype: 'string',\n\t\t\tdescription: 'Result',\n\t\t},\n\t},\n\trequired: [ 'content' ],\n\tadditionalProperties: false,\n};\n\nexport const createSampler = ( server: Server, opts: Opts = DEFAULT_OPTS ) => {\n\tconst { maxTokens = 1000, modelPreferences = 'openai', model = 'gpt-4o' } = opts;\n\tconst exec = async ( payload: SamplingOpts ) => {\n\t\tconst systemPromptObject = { ...( payload.systemPrompt ? { systemPrompt: payload.systemPrompt } : {} ) };\n\t\tconst requestParams = payload.requestParams || {};\n\t\tconst result = await server.sendRequest(\n\t\t\t{\n\t\t\t\tmethod: 'sampling/createMessage',\n\t\t\t\tparams: {\n\t\t\t\t\t...requestParams,\n\t\t\t\t\tmaxTokens,\n\t\t\t\t\tmodelPreferences: {\n\t\t\t\t\t\thints: [ { name: modelPreferences } ],\n\t\t\t\t\t},\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t...systemPromptObject,\n\t\t\t\t\t\t...{ structured_output: payload.structuredOutput || DEFAULT_STRUCTURED_OUTPUT },\n\t\t\t\t\t},\n\t\t\t\t\tmessages: payload.messages,\n\t\t\t\t},\n\t\t\t\t// ...systemPromptObject,\n\t\t\t},\n\t\t\tSamplingMessageSchema\n\t\t);\n\t\treturn result.content;\n\t};\n\treturn exec;\n};\n","class ToolPrompts {\n\tpublic _description = '';\n\tpublic _parameters: Record< string, string > = {};\n\tpublic _examples: string[] = [];\n\tpublic _furtherInstructions: string[] = [];\n\n\tconstructor( public name: string ) {}\n\n\tdescription(): string;\n\tdescription( desc: string ): this;\n\tdescription( desc?: string | undefined ) {\n\t\tif ( typeof desc === 'undefined' ) {\n\t\t\treturn this._description;\n\t\t}\n\t\tthis._description = desc;\n\t\treturn this;\n\t}\n\n\tparameter( key: string ): string;\n\tparameter( key: string, description: string ): this;\n\tparameter( key: string, description?: string ) {\n\t\tif ( typeof description === 'undefined' ) {\n\t\t\treturn this._parameters[ key ];\n\t\t}\n\t\tthis._parameters[ key ] = `**${ key }**:\\n${ description }`;\n\t\treturn this;\n\t}\n\n\tinstruction( instruction: string ): this {\n\t\tthis._furtherInstructions.push( instruction );\n\t\treturn this;\n\t}\n\n\texample( example: string ): this {\n\t\tthis._examples.push( example );\n\t\treturn this;\n\t}\n\n\tpublic get examples() {\n\t\treturn this._examples.join( '\\n\\n' );\n\t}\n\n\tprompt(): string {\n\t\treturn `# ${ this.name }\n# Description\n${ this._description }\n\n${ this._parameters.length ? '# Parameters' : '' }\n${ Object.values( this._parameters ).join( '\\n\\n' ) }\n\n${ this._examples.length ? '# Examples' : '' }\n${ this.examples }\n\n${ this._furtherInstructions.length ? '# Further Instructions' : '' }\n${ this._furtherInstructions.join( '\\n\\n' ) }\n`.trim();\n\t}\n}\n\nexport const toolPrompts = ( name: string ) => {\n\treturn new ToolPrompts( name );\n};\n","import { getAngieIframe, toggleAngieSidebar } from '@elementor-external/angie-sdk';\n\nexport const sendPromptToAngie = ( prompt?: string ) => {\n\tconst angieSidebar = getAngieIframe();\n\n\tif ( ! angieSidebar ) {\n\t\treturn;\n\t}\n\n\ttoggleAngieSidebar( angieSidebar, true );\n\n\tif ( ! prompt ) {\n\t\treturn;\n\t}\n\n\twindow.location.hash = `angie-prompt=${ encodeURIComponent( prompt ) }`;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_INSTALL_URL = '/wp-admin/plugin-install.php?s=angie&tab=search&type=term';\n\nexport const redirectToInstallation = ( prompt: string ) => {\n\tconst success = setReferrerRedirect( window.location.href, prompt );\n\n\tif ( ! success ) {\n\t\treturn;\n\t}\n\n\twindow.location.href = ANGIE_INSTALL_URL;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_APP_URL = '/wp-admin/admin.php?page=angie-app';\n\nexport const redirectToAppAdmin = ( prompt: string ) => {\n\tconst success = setReferrerRedirect( window.location.href, prompt );\n\n\tif ( ! success ) {\n\t\treturn;\n\t}\n\n\twindow.location.href = ANGIE_APP_URL;\n};\n","import apiFetch from '@wordpress/api-fetch';\n\ntype PluginResponse = {\n\tplugin: string;\n\tstatus: 'active' | 'inactive';\n\tname: string;\n};\n\ntype PluginErrorResponse = {\n\tcode: string;\n\tmessage: string;\n};\n\nexport type InstallAngieResult = { success: true } | { success: false; error: string; code?: string };\n\nconst ANGIE_SLUG = 'angie';\n\nconst isPluginErrorResponse = ( response: unknown ): response is PluginErrorResponse => {\n\treturn typeof response === 'object' && response !== null && 'code' in response && 'message' in response;\n};\n\nconst activatePlugin = async ( pluginPath: string ): Promise< PluginResponse > => {\n\treturn apiFetch< PluginResponse >( {\n\t\tpath: `/wp/v2/plugins/${ pluginPath }`,\n\t\tmethod: 'POST',\n\t\tdata: { status: 'active' },\n\t} );\n};\n\nconst installPlugin = async (): Promise< PluginResponse > => {\n\ttry {\n\t\treturn await apiFetch< PluginResponse >( {\n\t\t\tpath: '/wp/v2/plugins',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tslug: ANGIE_SLUG,\n\t\t\t\tstatus: 'active',\n\t\t\t},\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) && error.code === 'folder_exists' ) {\n\t\t\treturn activatePlugin( `${ ANGIE_SLUG }/${ ANGIE_SLUG }` );\n\t\t}\n\n\t\tthrow error;\n\t}\n};\n\nexport const installAngiePlugin = async (): Promise< InstallAngieResult > => {\n\ttry {\n\t\tawait installPlugin();\n\n\t\treturn { success: true };\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) ) {\n\t\t\treturn { success: false, error: error.message, code: error.code };\n\t\t}\n\n\t\treturn { success: false, error: 'Unknown error occurred' };\n\t}\n};\n"],"mappings":"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","names":["McpServer","SamplingMessageSchema","sdk","sdk","getAngieIframe","setReferrerRedirect"]}
1
+ {"version":3,"sources":["../src/utils/get-sdk.ts","../src/index.ts","../src/init.ts","../src/mcp-registry.ts","../src/angie-annotations.ts","../src/test-utils/mock-mcp-registry.ts","../src/utils/is-angie-available.ts","../src/utils/is-angie-sidebar-open.ts","../src/sampler.ts","../src/utils/prompt-builder.ts","../src/utils/send-prompt-to-angie.ts","../src/utils/redirect-to-installation.ts","../src/utils/redirect-to-app-admin.ts","../src/utils/install-angie-plugin.ts","../src/utils/save-angie-consent.ts"],"sourcesContent":["import { AngieMcpSdk } from '@elementor-external/angie-sdk';\n\nlet sdk: AngieMcpSdk;\n\nexport const getSDK = () => {\n\t// @ts-ignore - QUnit fails this\n\tconst isMCPDisabled = !! ( globalThis as Record< string, unknown > ).__ELEMENTOR_MCP_DISABLED__;\n\tif ( isMCPDisabled ) {\n\t\treturn {} as unknown as AngieMcpSdk;\n\t}\n\tif ( ! sdk ) {\n\t\tsdk = new AngieMcpSdk();\n\t}\n\treturn sdk;\n};\n","import { getSDK } from './utils/get-sdk';\n\nexport {\n\tMcpServer,\n\tResourceTemplate,\n\ttype RegisteredResource,\n\ttype ToolCallback,\n} from '@modelcontextprotocol/sdk/server/mcp.js';\nexport { SamplingMessageSchema } from '@modelcontextprotocol/sdk/types.js';\nexport { init } from './init';\nexport { isAngieAvailable } from './utils/is-angie-available';\nexport { isAngieSidebarOpen } from './utils/is-angie-sidebar-open';\nexport * from './mcp-registry';\nexport { createSampler } from './sampler';\nexport { toolPrompts } from './utils/prompt-builder';\nexport { ANGIE_MODEL_PREFERENCES, type AngieModelPreferences } from './angie-annotations';\nexport { sendPromptToAngie } from './utils/send-prompt-to-angie';\nexport { redirectToInstallation } from './utils/redirect-to-installation';\nexport { redirectToAppAdmin } from './utils/redirect-to-app-admin';\nexport { installAngiePlugin, type InstallAngieResult } from './utils/install-angie-plugin';\nexport { saveAngieConsent } from './utils/save-angie-consent';\nexport const getAngieSdk = () => getSDK();\n","import { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { activateMcpRegistration } from './mcp-registry';\nimport { getSDK } from './utils/get-sdk';\nimport { isAngieAvailable } from './utils/is-angie-available';\n\nexport function init() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\treturn getSDK().waitForReady();\n\t}\n\treturn Promise.resolve();\n}\n\nexport function startMCPServer() {\n\tif ( isExperimentActive( 'editor_mcp' ) && isAngieAvailable() ) {\n\t\tconst sdk = getSDK();\n\t\tsdk.waitForReady().then( () => activateMcpRegistration( sdk ) );\n\t}\n\treturn Promise.resolve();\n}\n\ndocument.addEventListener(\n\t'DOMContentLoaded',\n\t() => {\n\t\tstartMCPServer();\n\t},\n\t{\n\t\tonce: true,\n\t}\n);\n","import { z, type z3 } from '@elementor/schema';\nimport { type AngieMcpSdk } from '@elementor-external/angie-sdk';\nimport { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nimport {\n\tANGIE_MODEL_PREFERENCES,\n\tANGIE_REQUIRED_RESOURCES,\n\ttype AngieModelPreferences,\n\tcreateDefaultModelPreferences,\n} from './angie-annotations';\nimport { mockMcpRegistry } from './test-utils/mock-mcp-registry';\nimport { getSDK } from './utils/get-sdk';\n\ntype ZodRawShape = z3.ZodRawShape;\n\nconst mcpRegistry: { [ namespace: string ]: McpServer } = {};\nconst mcpDescriptions: { [ namespace: string ]: string } = {};\n// @ts-ignore - QUnit fails this\nconst isMcpRegistrationActivated = false || typeof globalThis.jest !== 'undefined';\n\nexport const registerMcp = ( mcp: McpServer, name: string ) => {\n\tconst mcpName = isAlphabet( name );\n\tmcpRegistry[ mcpName ] = mcp;\n};\n\nexport async function activateMcpRegistration( sdk: AngieMcpSdk, entries = Object.entries( mcpRegistry ), retry = 3 ) {\n\tif ( retry === 0 ) {\n\t\t/* eslint-disable-next-line no-console */\n\t\tconsole.error( 'Failed to register MCP after 3 retries. failed entries: ', entries );\n\t\treturn;\n\t}\n\tif ( entries.length === 0 ) {\n\t\treturn;\n\t}\n\tconst failed = [];\n\tfor await ( const entry of entries ) {\n\t\tconst [ key, mcpServer ] = entry;\n\t\ttry {\n\t\t\tawait sdk.registerLocalServer( {\n\t\t\t\ttitle: toMCPTitle( key ),\n\t\t\t\tname: `editor-${ key }`,\n\t\t\t\tserver: mcpServer,\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdescription: mcpDescriptions[ key ] || key,\n\t\t\t} );\n\t\t} catch {\n\t\t\tfailed.push( entry );\n\t\t}\n\t}\n\tif ( failed.length > 0 ) {\n\t\treturn activateMcpRegistration( sdk, failed, retry - 1 );\n\t}\n}\n\nconst isAlphabet = ( str: string ): string | never => {\n\tconst passes = !! str && /^[a-z_]+$/.test( str );\n\tif ( ! passes ) {\n\t\tthrow new Error( 'Not alphabet' );\n\t}\n\treturn str;\n};\n\nexport const toMCPTitle = ( namespace: string ): string => {\n\tconst capitalized = namespace.charAt( 0 ).toUpperCase() + namespace.slice( 1 );\n\treturn `Editor ${ capitalized }`;\n};\n\n/**\n *\n * @param namespace The namespace of the MCP server. It should contain only lowercase alphabetic characters.\n * @param options\n * @param options.instructions\n */\nexport const getMCPByDomain = ( namespace: string, options?: { instructions?: string } ): MCPRegistryEntry => {\n\tconst mcpName = `editor-${ isAlphabet( namespace ) }`;\n\tconst title = toMCPTitle( namespace );\n\t// @ts-ignore - QUnit fails this\n\tif ( typeof globalThis.jest !== 'undefined' ) {\n\t\treturn mockMcpRegistry();\n\t}\n\tif ( ! mcpRegistry[ namespace ] ) {\n\t\tmcpRegistry[ namespace ] = new McpServer(\n\t\t\t{\n\t\t\t\tname: mcpName,\n\t\t\t\ttitle,\n\t\t\t\tversion: '1.0.0',\n\t\t\t},\n\t\t\t{\n\t\t\t\tinstructions: options?.instructions,\n\t\t\t}\n\t\t);\n\t}\n\tconst mcpServer = mcpRegistry[ namespace ];\n\tconst { addTool } = createToolRegistry( mcpServer );\n\treturn {\n\t\twaitForReady: () => getSDK().waitForReady(),\n\t\t// @ts-expect-error: TS is unable to infer the type here\n\t\tresource: async ( ...args: Parameters< McpServer[ 'registerResource' ] > ) => {\n\t\t\tawait getSDK().waitForReady();\n\t\t\treturn mcpServer.registerResource( ...args );\n\t\t},\n\t\tsendResourceUpdated: ( ...args: Parameters< McpServer[ 'server' ][ 'sendResourceUpdated' ] > ) => {\n\t\t\treturn getSDK()\n\t\t\t\t.waitForReady()\n\t\t\t\t.then( () => mcpServer.server.sendResourceUpdated( ...args ) )\n\t\t\t\t.catch( ( error: Error ) => {\n\t\t\t\t\tif ( error?.message?.includes( 'Not connected' ) ) {\n\t\t\t\t\t\treturn; // Expected when no MCP client is connected yet\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} );\n\t\t},\n\t\tmcpServer,\n\t\taddTool,\n\t\tsetMCPDescription: ( description: string ) => {\n\t\t\tmcpDescriptions[ namespace ] = description;\n\t\t},\n\t\tgetActiveChatInfo: () => {\n\t\t\tconst info = localStorage.getItem( 'angie_active_chat_id' );\n\t\t\tif ( ! info ) {\n\t\t\t\treturn {\n\t\t\t\t\texpiresAt: 0,\n\t\t\t\t\tsessionId: '',\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rawData = JSON.parse( info );\n\t\t\treturn {\n\t\t\t\texpiresAt: rawData.expiresAt as number,\n\t\t\t\tsessionId: rawData.sessionId as string,\n\t\t\t};\n\t\t},\n\t};\n};\n\nexport interface MCPRegistryEntry {\n\taddTool: < T extends undefined | z.ZodRawShape = undefined, O extends undefined | z.ZodRawShape = undefined >(\n\t\topts: ToolRegistrationOptions< T, O >\n\t) => void;\n\tsetMCPDescription: ( description: string ) => void;\n\tgetActiveChatInfo: () => { sessionId: string; expiresAt: number };\n\tsendResourceUpdated: McpServer[ 'server' ][ 'sendResourceUpdated' ];\n\tresource: McpServer[ 'registerResource' ];\n\tmcpServer: McpServer;\n\twaitForReady: () => Promise< void >;\n}\n\ntype ResourceList = {\n\turi: string;\n\tdescription: string;\n}[];\n\ntype ToolRegistrationOptions<\n\tInputArgs extends undefined | z.ZodRawShape = undefined,\n\tOutputSchema extends undefined | z.ZodRawShape = undefined,\n\tExpectedOutput = OutputSchema extends z.ZodRawShape ? z.objectOutputType< OutputSchema, z.ZodTypeAny > : string,\n> = {\n\tname: string;\n\tdescription: string;\n\tschema?: InputArgs;\n\t/**\n\t * Auto added fields:\n\t * @param errors z.string().optional().describe('Error message if the tool failed')\n\t */\n\toutputSchema?: OutputSchema;\n\thandler: InputArgs extends z.ZodRawShape\n\t\t? (\n\t\t\t\targs: z.objectOutputType< InputArgs, z.ZodTypeAny >,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >\n\t\t: (\n\t\t\t\targs: unknown,\n\t\t\t\textra: RequestHandlerExtra< ServerRequest, ServerNotification >\n\t\t ) => ExpectedOutput | Promise< ExpectedOutput >;\n\tisDestructive?: boolean;\n\trequiredResources?: ResourceList;\n\tmodelPreferences?: AngieModelPreferences;\n};\n\nfunction createToolRegistry( server: McpServer ) {\n\tfunction addTool<\n\t\tT extends undefined | z.ZodRawShape = undefined,\n\t\tO extends undefined | z.ZodRawShape = undefined,\n\t>( opts: ToolRegistrationOptions< T, O > ) {\n\t\tconst outputSchema = opts.outputSchema as ZodRawShape | undefined;\n\t\tif ( outputSchema ) {\n\t\t\tObject.assign(\n\t\t\t\toutputSchema,\n\t\t\t\toutputSchema.errors ?? {\n\t\t\t\t\terrors: z.string().optional().describe( 'Error message if the tool failed' ),\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t// @ts-ignore: TS is unable to infer the type here\n\t\tconst inputSchema: ZodRawShape = opts.schema ? opts.schema : {};\n\t\tconst toolCallback: ToolCallback< ZodRawShape > = async function ( args, extra ) {\n\t\t\ttry {\n\t\t\t\tconst invocationResult = await opts.handler( opts.schema ? args : {}, extra );\n\t\t\t\treturn {\n\t\t\t\t\t// structuredContent: typeof invocationResult === 'string' ? undefined : invocationResult,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\t\ttypeof invocationResult === 'string'\n\t\t\t\t\t\t\t\t\t? invocationResult\n\t\t\t\t\t\t\t\t\t: JSON.stringify( invocationResult ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t} catch ( error ) {\n\t\t\t\treturn {\n\t\t\t\t\tisError: true,\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\terrors: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t},\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: ( error as Error ).message || 'Unknown error',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tconst annotations: Record< string, unknown > = {\n\t\t\tdestructiveHint: opts.isDestructive,\n\t\t\treadOnlyHint: opts.isDestructive ? false : undefined,\n\t\t\ttitle: opts.name,\n\t\t};\n\t\tconst angieAnnotations = {\n\t\t\t[ ANGIE_MODEL_PREFERENCES ]: opts.modelPreferences ?? createDefaultModelPreferences(),\n\t\t\t[ ANGIE_REQUIRED_RESOURCES ]: opts.requiredResources ?? undefined,\n\t\t};\n\t\tserver.registerTool(\n\t\t\topts.name,\n\t\t\t{\n\t\t\t\tdescription: opts.description,\n\t\t\t\tinputSchema,\n\t\t\t\t// TODO: Uncomment this when the outputSchema is stable\n\t\t\t\t// outputSchema,\n\t\t\t\ttitle: opts.name,\n\t\t\t\tannotations,\n\t\t\t\t_meta: angieAnnotations,\n\t\t\t},\n\t\t\ttoolCallback\n\t\t);\n\t\tif ( isMcpRegistrationActivated ) {\n\t\t\tserver.sendToolListChanged();\n\t\t}\n\t}\n\treturn {\n\t\taddTool,\n\t};\n}\n","export const ANGIE_MODEL_PREFERENCES = 'angie/modelPreferences' as const;\nexport const ANGIE_REQUIRED_RESOURCES = 'angie/requiredResources' as const;\n\nexport interface AngieModelPreferences {\n\thints?: Array< { name: string } >;\n\tcostPriority?: number; // 0-1 (future use)\n\tspeedPriority?: number; // 0-1 (future use)\n\tintelligencePriority?: number; // 0-1 (future use)\n}\n\nexport function createDefaultModelPreferences(): AngieModelPreferences {\n\treturn {\n\t\thints: [ { name: 'claude-sonnet-4-5' } ],\n\t\tintelligencePriority: 0.8,\n\t\tspeedPriority: 0.7,\n\t};\n}\n","import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { type MCPRegistryEntry } from '../mcp-registry';\n\nconst mock = new Proxy(\n\t{},\n\t{\n\t\tget: () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tfunction mockedFn( ..._: unknown[] ) {}\n\t\t\treturn mockedFn;\n\t\t},\n\t}\n);\n\nexport const mockMcpRegistry = (): MCPRegistryEntry => {\n\treturn {\n\t\t// @ts-ignore\n\t\tresource: async () => {},\n\t\t// @ts-ignore\n\t\tsendResourceUpdated: () => {},\n\t\taddTool: () => {},\n\t\tsetMCPDescription: () => {},\n\t\tgetActiveChatInfo() {\n\t\t\treturn { sessionId: 'mock-session-id', expiresAt: Date.now() + 3600000 };\n\t\t},\n\t\tmcpServer: mock as McpServer,\n\t};\n};\n","import { getAngieIframe } from '@elementor-external/angie-sdk';\n\nexport const isAngieAvailable = (): boolean => {\n\treturn !! getAngieIframe();\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, getAngieSidebarSavedState } from '@elementor-external/angie-sdk';\n\nexport const isAngieSidebarOpen = (): boolean => {\n\treturn getAngieSidebarSavedState() === ANGIE_SIDEBAR_STATE_OPEN;\n};\n","import { type z } from '@elementor/schema';\nimport { type RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport { SamplingMessageSchema, type ServerNotification, type ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\ntype Server = RequestHandlerExtra< ServerRequest, ServerNotification >;\ntype Opts = {\n\tmaxTokens?: number;\n\tmodelPreferences?: string;\n\tmodel?: string;\n};\n\nconst DEFAULT_OPTS: Opts = {\n\tmaxTokens: 10000,\n\tmodelPreferences: 'openai',\n\tmodel: 'gpt-4o',\n};\n\ntype SamplingOpts = {\n\tsystemPrompt?: string;\n\tstructuredOutput?: z.ZodTypeAny;\n\tmessages: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n\trequestParams?: { [ key: string ]: string };\n};\n\nconst DEFAULT_STRUCTURED_OUTPUT = {\n\ttype: 'object',\n\tproperties: {\n\t\tcontent: {\n\t\t\ttype: 'string',\n\t\t\tdescription: 'Result',\n\t\t},\n\t},\n\trequired: [ 'content' ],\n\tadditionalProperties: false,\n};\n\nexport const createSampler = ( server: Server, opts: Opts = DEFAULT_OPTS ) => {\n\tconst { maxTokens = 1000, modelPreferences = 'openai', model = 'gpt-4o' } = opts;\n\tconst exec = async ( payload: SamplingOpts ) => {\n\t\tconst systemPromptObject = { ...( payload.systemPrompt ? { systemPrompt: payload.systemPrompt } : {} ) };\n\t\tconst requestParams = payload.requestParams || {};\n\t\tconst result = await server.sendRequest(\n\t\t\t{\n\t\t\t\tmethod: 'sampling/createMessage',\n\t\t\t\tparams: {\n\t\t\t\t\t...requestParams,\n\t\t\t\t\tmaxTokens,\n\t\t\t\t\tmodelPreferences: {\n\t\t\t\t\t\thints: [ { name: modelPreferences } ],\n\t\t\t\t\t},\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t...systemPromptObject,\n\t\t\t\t\t\t...{ structured_output: payload.structuredOutput || DEFAULT_STRUCTURED_OUTPUT },\n\t\t\t\t\t},\n\t\t\t\t\tmessages: payload.messages,\n\t\t\t\t},\n\t\t\t\t// ...systemPromptObject,\n\t\t\t},\n\t\t\tSamplingMessageSchema\n\t\t);\n\t\treturn result.content;\n\t};\n\treturn exec;\n};\n","class ToolPrompts {\n\tpublic _description = '';\n\tpublic _parameters: Record< string, string > = {};\n\tpublic _examples: string[] = [];\n\tpublic _furtherInstructions: string[] = [];\n\n\tconstructor( public name: string ) {}\n\n\tdescription(): string;\n\tdescription( desc: string ): this;\n\tdescription( desc?: string | undefined ) {\n\t\tif ( typeof desc === 'undefined' ) {\n\t\t\treturn this._description;\n\t\t}\n\t\tthis._description = desc;\n\t\treturn this;\n\t}\n\n\tparameter( key: string ): string;\n\tparameter( key: string, description: string ): this;\n\tparameter( key: string, description?: string ) {\n\t\tif ( typeof description === 'undefined' ) {\n\t\t\treturn this._parameters[ key ];\n\t\t}\n\t\tthis._parameters[ key ] = `**${ key }**:\\n${ description }`;\n\t\treturn this;\n\t}\n\n\tinstruction( instruction: string ): this {\n\t\tthis._furtherInstructions.push( instruction );\n\t\treturn this;\n\t}\n\n\texample( example: string ): this {\n\t\tthis._examples.push( example );\n\t\treturn this;\n\t}\n\n\tpublic get examples() {\n\t\treturn this._examples.join( '\\n\\n' );\n\t}\n\n\tprompt(): string {\n\t\treturn `# ${ this.name }\n# Description\n${ this._description }\n\n${ this._parameters.length ? '# Parameters' : '' }\n${ Object.values( this._parameters ).join( '\\n\\n' ) }\n\n${ this._examples.length ? '# Examples' : '' }\n${ this.examples }\n\n${ this._furtherInstructions.length ? '# Further Instructions' : '' }\n${ this._furtherInstructions.join( '\\n\\n' ) }\n`.trim();\n\t}\n}\n\nexport const toolPrompts = ( name: string ) => {\n\treturn new ToolPrompts( name );\n};\n","import { getAngieIframe, toggleAngieSidebar } from '@elementor-external/angie-sdk';\n\nexport const sendPromptToAngie = ( prompt?: string ) => {\n\tconst angieSidebar = getAngieIframe();\n\n\tif ( ! angieSidebar ) {\n\t\treturn;\n\t}\n\n\ttoggleAngieSidebar( angieSidebar, true );\n\n\tif ( ! prompt ) {\n\t\treturn;\n\t}\n\n\twindow.location.hash = `angie-prompt=${ encodeURIComponent( prompt ) }`;\n};\n","import { setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_INSTALL_URL = '/wp-admin/plugin-install.php?s=angie&tab=search&type=term';\n\nexport const redirectToInstallation = ( prompt?: string ) => {\n\tsetReferrerRedirect( window.location.href, prompt );\n\twindow.location.href = ANGIE_INSTALL_URL;\n};\n","import { ANGIE_SIDEBAR_STATE_OPEN, saveState, setReferrerRedirect } from '@elementor-external/angie-sdk';\n\nconst ANGIE_APP_URL = '/wp-admin/admin.php?page=angie-app';\n\nexport const redirectToAppAdmin = ( prompt?: string ) => {\n\tsetReferrerRedirect( window.location.href, prompt );\n\tsaveState( ANGIE_SIDEBAR_STATE_OPEN );\n\twindow.location.href = ANGIE_APP_URL;\n};\n","import apiFetch from '@wordpress/api-fetch';\n\ntype PluginResponse = {\n\tplugin: string;\n\tstatus: 'active' | 'inactive';\n\tname: string;\n};\n\ntype PluginErrorResponse = {\n\tcode: string;\n\tmessage: string;\n};\n\nexport type InstallAngieResult = { success: true } | { success: false; error: string; code?: string };\n\nconst ANGIE_SLUG = 'angie';\n\nconst isPluginErrorResponse = ( response: unknown ): response is PluginErrorResponse => {\n\treturn typeof response === 'object' && response !== null && 'code' in response && 'message' in response;\n};\n\nconst activatePlugin = async ( pluginPath: string ): Promise< PluginResponse > => {\n\treturn apiFetch< PluginResponse >( {\n\t\tpath: `/wp/v2/plugins/${ pluginPath }`,\n\t\tmethod: 'POST',\n\t\tdata: { status: 'active' },\n\t} );\n};\n\nconst installPlugin = async (): Promise< PluginResponse > => {\n\ttry {\n\t\treturn await apiFetch< PluginResponse >( {\n\t\t\tpath: '/wp/v2/plugins',\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tslug: ANGIE_SLUG,\n\t\t\t\tstatus: 'active',\n\t\t\t},\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) && error.code === 'folder_exists' ) {\n\t\t\treturn activatePlugin( `${ ANGIE_SLUG }/${ ANGIE_SLUG }` );\n\t\t}\n\n\t\tthrow error;\n\t}\n};\n\nexport const installAngiePlugin = async (): Promise< InstallAngieResult > => {\n\ttry {\n\t\tawait installPlugin();\n\n\t\treturn { success: true };\n\t} catch ( error: unknown ) {\n\t\tif ( isPluginErrorResponse( error ) ) {\n\t\t\treturn { success: false, error: error.message, code: error.code };\n\t\t}\n\n\t\treturn { success: false, error: 'Unknown error occurred' };\n\t}\n};\n","import apiFetch from '@wordpress/api-fetch';\n\nexport const saveAngieConsent = async (): Promise< void > => {\n\tawait apiFetch( {\n\t\tpath: '/elementor/v1/angie/consent',\n\t\tmethod: 'POST',\n\t} );\n};\n"],"mappings":"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","names":["McpServer","SamplingMessageSchema","sdk","sdk","getAngieIframe","ANGIE_SIDEBAR_STATE_OPEN","setReferrerRedirect","apiFetch"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-mcp",
3
- "version": "4.0.7",
3
+ "version": "4.0.8",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -43,9 +43,9 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@elementor-external/angie-sdk": "npm:@elementor/angie-sdk@^1.4.5",
46
- "@elementor/editor-v1-adapters": "4.0.7",
47
- "@elementor/schema": "4.0.7",
48
- "@elementor/store": "4.0.7",
46
+ "@elementor/editor-v1-adapters": "4.0.8",
47
+ "@elementor/schema": "4.0.8",
48
+ "@elementor/store": "4.0.8",
49
49
  "@modelcontextprotocol/sdk": "1.27.1",
50
50
  "@wordpress/api-fetch": "^6.42.0",
51
51
  "zod-to-json-schema": "3.24.6"
package/src/index.ts CHANGED
@@ -18,4 +18,5 @@ export { sendPromptToAngie } from './utils/send-prompt-to-angie';
18
18
  export { redirectToInstallation } from './utils/redirect-to-installation';
19
19
  export { redirectToAppAdmin } from './utils/redirect-to-app-admin';
20
20
  export { installAngiePlugin, type InstallAngieResult } from './utils/install-angie-plugin';
21
+ export { saveAngieConsent } from './utils/save-angie-consent';
21
22
  export const getAngieSdk = () => getSDK();
@@ -1,13 +1,9 @@
1
- import { setReferrerRedirect } from '@elementor-external/angie-sdk';
1
+ import { ANGIE_SIDEBAR_STATE_OPEN, saveState, setReferrerRedirect } from '@elementor-external/angie-sdk';
2
2
 
3
3
  const ANGIE_APP_URL = '/wp-admin/admin.php?page=angie-app';
4
4
 
5
- export const redirectToAppAdmin = ( prompt: string ) => {
6
- const success = setReferrerRedirect( window.location.href, prompt );
7
-
8
- if ( ! success ) {
9
- return;
10
- }
11
-
5
+ export const redirectToAppAdmin = ( prompt?: string ) => {
6
+ setReferrerRedirect( window.location.href, prompt );
7
+ saveState( ANGIE_SIDEBAR_STATE_OPEN );
12
8
  window.location.href = ANGIE_APP_URL;
13
9
  };
@@ -2,12 +2,7 @@ import { setReferrerRedirect } from '@elementor-external/angie-sdk';
2
2
 
3
3
  const ANGIE_INSTALL_URL = '/wp-admin/plugin-install.php?s=angie&tab=search&type=term';
4
4
 
5
- export const redirectToInstallation = ( prompt: string ) => {
6
- const success = setReferrerRedirect( window.location.href, prompt );
7
-
8
- if ( ! success ) {
9
- return;
10
- }
11
-
5
+ export const redirectToInstallation = ( prompt?: string ) => {
6
+ setReferrerRedirect( window.location.href, prompt );
12
7
  window.location.href = ANGIE_INSTALL_URL;
13
8
  };
@@ -0,0 +1,8 @@
1
+ import apiFetch from '@wordpress/api-fetch';
2
+
3
+ export const saveAngieConsent = async (): Promise< void > => {
4
+ await apiFetch( {
5
+ path: '/elementor/v1/angie/consent',
6
+ method: 'POST',
7
+ } );
8
+ };