diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/capabilities/index.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/capabilities/index.ts index 854e7f0d84f74..6d44f3dacd729 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/capabilities/index.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/capabilities/index.ts @@ -21,4 +21,5 @@ export type AssistantFeatureKey = keyof AssistantFeatures; export const defaultAssistantFeatures = Object.freeze({ assistantModelEvaluation: false, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: false, }); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts index 8777e8d728279..e0c0f1f679a33 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.gen.ts @@ -20,4 +20,5 @@ export type GetCapabilitiesResponse = z.infer; export const GetCapabilitiesResponse = z.object({ assistantModelEvaluation: z.boolean(), defendInsights: z.boolean(), + assistantAttackDiscoverySchedulingEnabled: z.boolean(), }); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml index e9b6ca9697256..e76cec165525c 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/capabilities/get_capabilities_route.schema.yaml @@ -24,9 +24,12 @@ paths: type: boolean defendInsights: type: boolean + assistantAttackDiscoverySchedulingEnabled: + type: boolean required: - assistantModelEvaluation - defendInsights + - assistantAttackDiscoverySchedulingEnabled '400': description: Generic Error content: diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/services/app_context.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/services/app_context.test.ts index 061e4e6f47af5..1c74241c6f675 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/services/app_context.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/services/app_context.test.ts @@ -55,6 +55,7 @@ describe('AppContextService', () => { appContextService.registerFeatures('super', { assistantModelEvaluation: true, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: true, }); appContextService.stop(); @@ -106,6 +107,7 @@ describe('AppContextService', () => { ...defaultAssistantFeatures, assistantModelEvaluation: true, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: true, }; appContextService.start(mockAppContext); @@ -122,12 +124,14 @@ describe('AppContextService', () => { ...defaultAssistantFeatures, assistantModelEvaluation: true, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: true, }; const pluginTwo = 'plugin2'; const featuresTwo: AssistantFeatures = { ...defaultAssistantFeatures, assistantModelEvaluation: false, defendInsights: false, + assistantAttackDiscoverySchedulingEnabled: false, }; appContextService.start(mockAppContext); @@ -144,11 +148,13 @@ describe('AppContextService', () => { ...defaultAssistantFeatures, assistantModelEvaluation: true, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: true, }; const featuresTwo: AssistantFeatures = { ...defaultAssistantFeatures, assistantModelEvaluation: false, defendInsights: false, + assistantAttackDiscoverySchedulingEnabled: false, }; appContextService.start(mockAppContext); @@ -171,6 +177,7 @@ describe('AppContextService', () => { const featuresSubset: Partial = { assistantModelEvaluation: true, defendInsights: true, + assistantAttackDiscoverySchedulingEnabled: true, }; appContextService.start(mockAppContext); diff --git a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts index 922292bb2ca9b..5de8a0291b518 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts @@ -114,6 +114,11 @@ export const allowedExperimentalValues = Object.freeze({ */ assistantModelEvaluation: false, + /** + * Enables the Attack Discovery Scheduling functionality and API endpoint`. + */ + assistantAttackDiscoverySchedulingEnabled: false, + /** * Enables the Managed User section inside the new user details flyout. */ diff --git a/x-pack/solutions/security/plugins/security_solution/server/plugin.ts b/x-pack/solutions/security/plugins/security_solution/server/plugin.ts index c99b30401c45b..6133bdfa7881b 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/plugin.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/plugin.ts @@ -602,6 +602,8 @@ export class Plugin implements ISecuritySolutionPlugin { plugins.elasticAssistant.registerTools(APP_UI_ID, assistantTools); const features = { assistantModelEvaluation: config.experimentalFeatures.assistantModelEvaluation, + assistantAttackDiscoverySchedulingEnabled: + config.experimentalFeatures.assistantAttackDiscoverySchedulingEnabled, }; plugins.elasticAssistant.registerFeatures(APP_UI_ID, features); plugins.elasticAssistant.registerFeatures('management', features);