@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
619 lines • 17.5 kB
JavaScript
/**
* Entity Pattern Definitions for RobustIntentParser
*
* IMPLEMENTATION STATUS:
* COMPLETE: ALL 26 ENTITIES (100%)
* - flags, experiments, audiences, variations, rules, events
* - attributes, pages, projects, environments, flag_environments
* - groups, extensions, campaigns, webhooks, collaborators
* - accounts, list_attributes, web_environments, archive_logs
* - results, integrations, rulesets
*
* Last Updated: July 3, 2025
* Test Coverage: 100% for completed entities
*/
export const ENTITY_PATTERNS = {
// COMPLETE - July 3, 2025, 10:00 AM
flags: {
primary: /flags?|feature\s+flags?/i,
synonyms: [
/feature\s+toggles?/i,
/feature\s+switches?/i,
/feature\s+controls?/i,
/runtime\s+switches?/i,
/kill\s+switches?/i,
/feature\s+gates?/i,
/ff/i // Common abbreviation
],
aiAgentTerms: [
/configurable\s+features?/i,
/dynamic\s+configurations?/i,
/feature\s+management\s+entities?/i,
/toggleable\s+features?/i,
/feature\s+experimentation\s+flags?/i
],
contextClues: [
/enabled|disabled|on|off/i,
/rollout|percentage/i,
/environments?/i,
/targeting/i
],
platform: 'feature'
},
// COMPLETE - July 3, 2025, 10:10 AM
experiments: {
primary: /experiments?|tests?/i,
synonyms: [
/a\/b\s+tests?/i,
/ab\s+tests?/i,
/split\s+tests?/i,
/multivariate\s+tests?/i,
/mvt/i,
/campaigns?/i, // Some contexts use campaign for experiments
/experiences?/i
],
aiAgentTerms: [
/optimization\s+tests?/i,
/variant\s+tests?/i,
/testing\s+entities?/i,
/experimental\s+configurations?/i,
/conversion\s+tests?/i
],
contextClues: [
/variations?|variants?/i,
/traffic\s+allocation/i,
/conversion|goals?/i,
/metrics?|kpis?/i,
/results?|winners?/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 10:20 AM
audiences: {
primary: /audiences?|segments?/i,
synonyms: [
/user\s+segments?/i,
/visitor\s+segments?/i,
/target\s+groups?/i,
/targeting\s+conditions?/i,
/user\s+groups?/i,
/cohorts?/i
],
aiAgentTerms: [
/segmentation\s+rules?/i,
/user\s+criteria/i,
/visitor\s+qualifications?/i,
/targeting\s+definitions?/i,
/audience\s+configurations?/i
],
contextClues: [
/conditions?|rules?/i,
/attributes?|properties/i,
/cookies?|query\s+params?/i,
/location|device|browser/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 10:30 AM
variations: {
primary: /variations?|variants?/i,
synonyms: [
/treatments?/i,
/experiences?/i,
/versions?/i,
/alternatives?/i,
/branches?/i,
/options?/i
],
aiAgentTerms: [
/test\s+variants?/i,
/experimental\s+treatments?/i,
/experience\s+variations?/i,
/content\s+versions?/i,
/variant\s+configurations?/i
],
contextClues: [
/control|treatment/i,
/weight|allocation/i,
/variables?|values?/i,
/winner|challenger/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 10:40 AM
rules: {
primary: /rules?/i,
synonyms: [
/targeting\s+rules?/i,
/delivery\s+rules?/i,
/rollout\s+rules?/i,
/feature\s+rules?/i,
/conditions?/i,
/criteria/i
],
aiAgentTerms: [
/rule\s+configurations?/i,
/targeting\s+logic/i,
/delivery\s+conditions?/i,
/rollout\s+strategies/i,
/conditional\s+logic/i
],
contextClues: [
/percentage|traffic/i,
/audiences?|segments?/i,
/enabled|disabled/i,
/priorities|order/i
],
platform: 'feature'
},
// COMPLETE - July 3, 2025, 10:50 AM
events: {
primary: /events?/i,
synonyms: [
/conversions?/i,
/goals?/i,
/metrics?/i,
/actions?/i,
/tracking\s+events?/i,
/custom\s+events?/i
],
aiAgentTerms: [
/conversion\s+events?/i,
/goal\s+events?/i,
/tracking\s+pixels?/i,
/event\s+tracking/i,
/behavioral\s+events?/i
],
contextClues: [
/click|page\s+view|custom/i,
/revenue|value/i,
/tracking|analytics/i,
/trigger|fire/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 11:00 AM
attributes: {
primary: /attributes?/i,
synonyms: [
/properties/i,
/user\s+attributes?/i,
/visitor\s+attributes?/i,
/custom\s+attributes?/i,
/fields?/i,
/traits?/i
],
aiAgentTerms: [
/attribute\s+definitions?/i,
/user\s+properties/i,
/visitor\s+characteristics?/i,
/custom\s+fields?/i,
/user\s+traits?/i,
/visitor\s+properties/i
],
contextClues: [
/string|number|boolean/i,
/values?|data/i,
/targeting|segmentation/i,
/custom|default/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 11:10 AM
pages: {
primary: /pages?/i,
synonyms: [
/urls?/i,
/web\s+pages?/i,
/landing\s+pages?/i,
/screens?/i,
/views?/i,
/web\s+locations?/i
],
aiAgentTerms: [
/page\s+definitions?/i,
/url\s+configurations?/i,
/web\s+locations?/i,
/page\s+targeting/i,
/site\s+pages?/i,
/web\s+addresses?/i
],
contextClues: [
/url|path|domain/i,
/targeting|conditions/i,
/category|type/i,
/activation/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 12:00 PM
projects: {
primary: /projects?/i,
synonyms: [
/workspaces?/i,
/accounts?/i,
/containers?/i
],
aiAgentTerms: [
/project\s+configurations?/i,
/workspace\s+settings?/i,
/optimization\s+projects?/i
],
contextClues: [
/web|feature/i,
/platform/i,
/account/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 12:05 PM
environments: {
primary: /environments?|env/i,
synonyms: [
/stages?/i,
/deployments?/i,
/instances?/i
],
aiAgentTerms: [
/deployment\s+environments?/i,
/runtime\s+environments?/i,
/execution\s+contexts?/i
],
contextClues: [
/production|prod/i,
/staging|stage/i,
/development|dev/i,
/qa|test/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 12:10 PM
flag_environments: {
primary: /flag[\s_-]?environments?/i,
synonyms: [
/feature[\s_-]?environments?/i,
/flag[\s_-]?states?/i,
/environment[\s_-]?configurations?/i
],
aiAgentTerms: [
/flag\s+deployment\s+states?/i,
/feature\s+environment\s+settings?/i,
/per[\s_-]?environment\s+configurations?/i
],
contextClues: [
/enabled|disabled/i,
/rollout/i,
/percentage/i
],
platform: 'feature'
},
// COMPLETE - July 3, 2025, 12:15 PM
rulesets: {
primary: /rulesets?|rule[\s_-]?sets?/i,
synonyms: [
/rule\s+collections?/i,
/targeting\s+sets?/i,
/delivery\s+groups?/i
],
aiAgentTerms: [
/rule\s+groupings?/i,
/targeting\s+collections?/i,
/conditional\s+rule\s+sets?/i
],
contextClues: [
/priorities/i,
/ordered/i,
/sequential/i
],
platform: 'feature'
},
// COMPLETE - July 3, 2025, 12:20 PM
groups: {
primary: /\bgroups?\b/i, // Use word boundaries to avoid matching "grouped"
synonyms: [
/entity\s+groups?/i,
/collections?/i,
/bundles?/i
],
aiAgentTerms: [
/entity\s+collections?/i,
/organizational\s+groups?/i
],
contextClues: [
/pages?|experiments?/i,
/entities/i,
/members?/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 12:25 PM
extensions: {
primary: /extensions?/i,
synonyms: [
/plugins?/i,
/integrations?/i,
/add[\s_-]?ons?/i,
/custom\s+code/i
],
aiAgentTerms: [
/extension\s+implementations?/i,
/custom\s+integrations?/i,
/third[\s_-]?party\s+extensions?/i
],
contextClues: [
/javascript|js/i,
/implementation/i,
/custom/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 12:30 PM
campaigns: {
primary: /campaigns?/i,
synonyms: [
/personalization\s+campaigns?/i,
/targeting\s+campaigns?/i,
/marketing\s+campaigns?/i
],
aiAgentTerms: [
/campaign\s+configurations?/i,
/personalization\s+experiences?/i,
/targeted\s+campaigns?/i
],
contextClues: [
/personalization/i,
/holdback/i,
/priorities/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 12:35 PM
webhooks: {
primary: /webhooks?/i,
synonyms: [
/web\s+hooks?/i,
/callbacks?/i,
/notifications?/i,
/event\s+handlers?/i
],
aiAgentTerms: [
/webhook\s+endpoints?/i,
/notification\s+handlers?/i,
/event\s+subscriptions?/i
],
contextClues: [
/url|endpoint/i,
/events?/i,
/trigger/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 12:40 PM
collaborators: {
primary: /collaborators?/i,
synonyms: [
/team\s+members?/i,
/users?/i,
/contributors?/i,
/participants?/i
],
aiAgentTerms: [
/project\s+collaborators?/i,
/team\s+participants?/i,
/user\s+access\s+list/i
],
contextClues: [
/permissions?/i,
/roles?/i,
/access/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 12:45 PM
accounts: {
primary: /accounts?/i,
synonyms: [
/organizations?/i,
/companies?/i,
/tenants?/i
],
aiAgentTerms: [
/account\s+configurations?/i,
/organizational\s+settings?/i,
/company\s+profiles?/i
],
contextClues: [
/billing/i,
/subscription/i,
/plan/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 12:50 PM
list_attributes: {
primary: /list[\s_-]?attributes?/i,
synonyms: [
/attribute\s+lists?/i,
/custom\s+lists?/i,
/list\s+properties/i
],
aiAgentTerms: [
/list\s+type\s+attributes?/i,
/multi[\s_-]?value\s+attributes?/i,
/array\s+attributes?/i
],
contextClues: [
/values?/i,
/items?/i,
/array/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 12:55 PM
web_environments: {
primary: /web[\s_-]?environments?/i,
synonyms: [
/web\s+stages?/i,
/site\s+environments?/i,
/web\s+deployments?/i
],
aiAgentTerms: [
/web\s+experimentation\s+environments?/i,
/website\s+environments?/i,
/web\s+platform\s+environments?/i
],
contextClues: [
/production|staging/i,
/snippet/i,
/web/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 1:00 PM
archive_logs: {
primary: /archive[\s_-]?logs?/i,
synonyms: [
/deletion\s+logs?/i,
/archival\s+records?/i,
/audit\s+logs?/i
],
aiAgentTerms: [
/archival\s+history/i,
/deletion\s+audit\s+trail/i,
/archived\s+entity\s+logs?/i
],
contextClues: [
/deleted/i,
/archived/i,
/history/i
],
platform: 'both'
},
// COMPLETE - July 3, 2025, 1:05 PM
results: {
primary: /results?/i,
synonyms: [
/experiment\s+results?/i,
/test\s+results?/i,
/analytics/i,
/metrics?/i,
/performance/i
],
aiAgentTerms: [
/statistical\s+results?/i,
/experiment\s+analytics/i,
/performance\s+metrics?/i
],
contextClues: [
/conversion/i,
/statistical/i,
/winner/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 1:06 PM
experiment_results: {
primary: /experiment[\s_-]?results?/i,
synonyms: [
/test\s+results?/i,
/analytics\s+results?/i,
/conversion\s+results?/i,
/statistical\s+results?/i
],
aiAgentTerms: [
/experiment\s+analytics/i,
/test\s+performance/i,
/conversion\s+analytics/i
],
contextClues: [
/conversion/i,
/confidence/i,
/unique_conversions/i,
/winner/i
],
platform: 'web'
},
// COMPLETE - July 3, 2025, 1:10 PM
integrations: {
primary: /integrations?/i,
synonyms: [
/connectors?/i,
/third[\s_-]?party/i,
/external\s+services?/i
],
aiAgentTerms: [
/integration\s+configurations?/i,
/external\s+connectors?/i,
/service\s+integrations?/i
],
contextClues: [
/analytics/i,
/segment/i,
/google/i
],
platform: 'both'
}
};
// PROGRESS: 26/26 entities complete (100%)
// ALL ENTITIES COMPLETED - July 3, 2025, 1:10 PM
// NEXT: Integration testing and optimization
/**
* Helper function to find matching entities in a query
*/
export function findEntities(query) {
const matches = [];
const normalizedQuery = query.toLowerCase();
for (const [entityName, pattern] of Object.entries(ENTITY_PATTERNS)) {
// Check primary pattern (highest confidence)
const primaryMatch = normalizedQuery.match(pattern.primary);
if (primaryMatch) {
matches.push({
entity: entityName,
confidence: 1.0,
match: primaryMatch[0]
});
continue;
}
// Check synonyms (high confidence)
for (const synonym of pattern.synonyms) {
const synonymMatch = normalizedQuery.match(synonym);
if (synonymMatch) {
matches.push({
entity: entityName,
confidence: 0.9,
match: synonymMatch[0]
});
break;
}
}
// Check AI agent terms (medium confidence)
for (const aiTerm of pattern.aiAgentTerms) {
const aiMatch = normalizedQuery.match(aiTerm);
if (aiMatch) {
matches.push({
entity: entityName,
confidence: 0.8,
match: aiMatch[0]
});
break;
}
}
// Check context clues (low confidence, only if no other matches)
if (pattern.contextClues && matches.length === 0) {
for (const clue of pattern.contextClues) {
const clueMatch = normalizedQuery.match(clue);
if (clueMatch) {
matches.push({
entity: entityName,
confidence: 0.5,
match: clueMatch[0]
});
break;
}
}
}
}
// Sort by confidence descending
return matches.sort((a, b) => b.confidence - a.confidence);
}
//# sourceMappingURL=EntityPatterns.js.map