@elementor/editor-mcp 4.1.0-773 → 4.1.0-775

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
@@ -1,5 +1,6 @@
1
1
  import * as _elementor_external_angie_sdk from '@elementor-external/angie-sdk';
2
2
  import { AngieMcpSdk } from '@elementor-external/angie-sdk';
3
+ export { MessageEventType as AngieMessageEvenetType, getAngieIframe } from '@elementor-external/angie-sdk';
3
4
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
5
  export { McpServer, RegisteredResource, ResourceTemplate, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
5
6
  import { ServerRequest, ServerNotification } from '@modelcontextprotocol/sdk/types.js';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as _elementor_external_angie_sdk from '@elementor-external/angie-sdk';
2
2
  import { AngieMcpSdk } from '@elementor-external/angie-sdk';
3
+ export { MessageEventType as AngieMessageEvenetType, getAngieIframe } from '@elementor-external/angie-sdk';
3
4
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
5
  export { McpServer, RegisteredResource, ResourceTemplate, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
5
6
  import { ServerRequest, ServerNotification } from '@modelcontextprotocol/sdk/types.js';
package/dist/index.js CHANGED
@@ -31,11 +31,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
33
  ANGIE_MODEL_PREFERENCES: () => ANGIE_MODEL_PREFERENCES,
34
+ AngieMessageEvenetType: () => import_angie_sdk2.MessageEventType,
34
35
  McpServer: () => import_mcp2.McpServer,
35
36
  ResourceTemplate: () => import_mcp2.ResourceTemplate,
36
37
  SamplingMessageSchema: () => import_types2.SamplingMessageSchema,
37
38
  activateMcpRegistration: () => activateMcpRegistration,
38
39
  createSampler: () => createSampler,
40
+ getAngieIframe: () => import_angie_sdk2.getAngieIframe,
39
41
  getAngieSdk: () => getAngieSdk,
40
42
  getMCPByDomain: () => getMCPByDomain,
41
43
  init: () => init,
@@ -53,6 +55,7 @@ module.exports = __toCommonJS(index_exports);
53
55
 
54
56
  // src/utils/get-sdk.ts
55
57
  var import_angie_sdk = require("@elementor-external/angie-sdk");
58
+ var import_angie_sdk2 = require("@elementor-external/angie-sdk");
56
59
  var sdk;
57
60
  var getSDK = () => {
58
61
  const isMCPDisabled = !!globalThis.__ELEMENTOR_MCP_DISABLED__;
@@ -290,9 +293,9 @@ function createToolRegistry(server) {
290
293
  }
291
294
 
292
295
  // src/utils/is-angie-available.ts
293
- var import_angie_sdk2 = require("@elementor-external/angie-sdk");
296
+ var import_angie_sdk3 = require("@elementor-external/angie-sdk");
294
297
  var isAngieAvailable = () => {
295
- return !!(0, import_angie_sdk2.getAngieIframe)();
298
+ return !!(0, import_angie_sdk3.getAngieIframe)();
296
299
  };
297
300
 
298
301
  // src/init.ts
@@ -320,9 +323,9 @@ document.addEventListener(
320
323
  );
321
324
 
322
325
  // src/utils/is-angie-sidebar-open.ts
323
- var import_angie_sdk3 = require("@elementor-external/angie-sdk");
326
+ var import_angie_sdk4 = require("@elementor-external/angie-sdk");
324
327
  var isAngieSidebarOpen = () => {
325
- return (0, import_angie_sdk3.getAngieSidebarSavedState)() === import_angie_sdk3.ANGIE_SIDEBAR_STATE_OPEN;
328
+ return (0, import_angie_sdk4.getAngieSidebarSavedState)() === import_angie_sdk4.ANGIE_SIDEBAR_STATE_OPEN;
326
329
  };
327
330
 
328
331
  // src/sampler.ts
@@ -429,13 +432,13 @@ var toolPrompts = (name) => {
429
432
  };
430
433
 
431
434
  // src/utils/send-prompt-to-angie.ts
432
- var import_angie_sdk4 = require("@elementor-external/angie-sdk");
435
+ var import_angie_sdk5 = require("@elementor-external/angie-sdk");
433
436
  var sendPromptToAngie = (prompt) => {
434
- const angieSidebar = (0, import_angie_sdk4.getAngieIframe)();
437
+ const angieSidebar = (0, import_angie_sdk5.getAngieIframe)();
435
438
  if (!angieSidebar) {
436
439
  return;
437
440
  }
438
- (0, import_angie_sdk4.toggleAngieSidebar)(angieSidebar, true);
441
+ (0, import_angie_sdk5.toggleAngieSidebar)(angieSidebar, true);
439
442
  if (!prompt) {
440
443
  return;
441
444
  }
@@ -443,10 +446,10 @@ var sendPromptToAngie = (prompt) => {
443
446
  };
444
447
 
445
448
  // src/utils/redirect-to-installation.ts
446
- var import_angie_sdk5 = require("@elementor-external/angie-sdk");
449
+ var import_angie_sdk6 = require("@elementor-external/angie-sdk");
447
450
  var ANGIE_INSTALL_URL = "/wp-admin/plugin-install.php?s=angie&tab=search&type=term";
448
451
  var redirectToInstallation = (prompt) => {
449
- const success = (0, import_angie_sdk5.setReferrerRedirect)(window.location.href, prompt);
452
+ const success = (0, import_angie_sdk6.setReferrerRedirect)(window.location.href, prompt);
450
453
  if (!success) {
451
454
  return;
452
455
  }
@@ -454,10 +457,10 @@ var redirectToInstallation = (prompt) => {
454
457
  };
455
458
 
456
459
  // src/utils/redirect-to-app-admin.ts
457
- var import_angie_sdk6 = require("@elementor-external/angie-sdk");
460
+ var import_angie_sdk7 = require("@elementor-external/angie-sdk");
458
461
  var ANGIE_APP_URL = "/wp-admin/admin.php?page=angie-app";
459
462
  var redirectToAppAdmin = (prompt) => {
460
- const success = (0, import_angie_sdk6.setReferrerRedirect)(window.location.href, prompt);
463
+ const success = (0, import_angie_sdk7.setReferrerRedirect)(window.location.href, prompt);
461
464
  if (!success) {
462
465
  return;
463
466
  }
@@ -511,11 +514,13 @@ var getAngieSdk = () => getSDK();
511
514
  // Annotate the CommonJS export names for ESM import in node:
512
515
  0 && (module.exports = {
513
516
  ANGIE_MODEL_PREFERENCES,
517
+ AngieMessageEvenetType,
514
518
  McpServer,
515
519
  ResourceTemplate,
516
520
  SamplingMessageSchema,
517
521
  activateMcpRegistration,
518
522
  createSampler,
523
+ getAngieIframe,
519
524
  getAngieSdk,
520
525
  getMCPByDomain,
521
526
  init,
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"],"sourcesContent":["import { getSDK } from './utils/get-sdk';\nexport { getAngieIframe, MessageEventType as AngieMessageEvenetType } 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';\nexport { getAngieIframe, MessageEventType } 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_angie_sdk","import_mcp","import_types","sdk","import_angie_sdk","sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","import_angie_sdk","apiFetch"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/utils/get-sdk.ts
2
2
  import { AngieMcpSdk } from "@elementor-external/angie-sdk";
3
+ import { getAngieIframe, MessageEventType } from "@elementor-external/angie-sdk";
3
4
  var sdk;
4
5
  var getSDK = () => {
5
6
  const isMCPDisabled = !!globalThis.__ELEMENTOR_MCP_DISABLED__;
@@ -240,9 +241,9 @@ function createToolRegistry(server) {
240
241
  }
241
242
 
242
243
  // src/utils/is-angie-available.ts
243
- import { getAngieIframe } from "@elementor-external/angie-sdk";
244
+ import { getAngieIframe as getAngieIframe2 } from "@elementor-external/angie-sdk";
244
245
  var isAngieAvailable = () => {
245
- return !!getAngieIframe();
246
+ return !!getAngieIframe2();
246
247
  };
247
248
 
248
249
  // src/init.ts
@@ -379,9 +380,9 @@ var toolPrompts = (name) => {
379
380
  };
380
381
 
381
382
  // src/utils/send-prompt-to-angie.ts
382
- import { getAngieIframe as getAngieIframe2, toggleAngieSidebar } from "@elementor-external/angie-sdk";
383
+ import { getAngieIframe as getAngieIframe3, toggleAngieSidebar } from "@elementor-external/angie-sdk";
383
384
  var sendPromptToAngie = (prompt) => {
384
- const angieSidebar = getAngieIframe2();
385
+ const angieSidebar = getAngieIframe3();
385
386
  if (!angieSidebar) {
386
387
  return;
387
388
  }
@@ -460,11 +461,13 @@ var installAngiePlugin = async () => {
460
461
  var getAngieSdk = () => getSDK();
461
462
  export {
462
463
  ANGIE_MODEL_PREFERENCES,
464
+ MessageEventType as AngieMessageEvenetType,
463
465
  McpServer2 as McpServer,
464
466
  ResourceTemplate,
465
467
  SamplingMessageSchema2 as SamplingMessageSchema,
466
468
  activateMcpRegistration,
467
469
  createSampler,
470
+ getAngieIframe,
468
471
  getAngieSdk,
469
472
  getMCPByDomain,
470
473
  init,
@@ -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"],"sourcesContent":["import { AngieMcpSdk } from '@elementor-external/angie-sdk';\nexport { getAngieIframe, MessageEventType } 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';\nexport { getAngieIframe, MessageEventType as AngieMessageEvenetType } 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","getAngieIframe","sdk","getAngieIframe","setReferrerRedirect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-mcp",
3
- "version": "4.1.0-773",
3
+ "version": "4.1.0-775",
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.1.0-773",
47
- "@elementor/schema": "4.1.0-773",
48
- "@elementor/store": "4.1.0-773",
46
+ "@elementor/editor-v1-adapters": "4.1.0-775",
47
+ "@elementor/schema": "4.1.0-775",
48
+ "@elementor/store": "4.1.0-775",
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
@@ -1,4 +1,5 @@
1
1
  import { getSDK } from './utils/get-sdk';
2
+ export { getAngieIframe, MessageEventType as AngieMessageEvenetType } from './utils/get-sdk';
2
3
 
3
4
  export {
4
5
  McpServer,
@@ -1,4 +1,5 @@
1
1
  import { AngieMcpSdk } from '@elementor-external/angie-sdk';
2
+ export { getAngieIframe, MessageEventType } from '@elementor-external/angie-sdk';
2
3
 
3
4
  let sdk: AngieMcpSdk;
4
5