Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
2b0f455
added privilege and test
Supplementing Aug 6, 2025
084ba05
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 6, 2025
774c20b
[CI] Auto commit changes from spotless
Aug 6, 2025
5e65044
changed privileges
Supplementing Aug 6, 2025
71503b9
fixed conflicts
Supplementing Aug 6, 2025
b152bc9
removed conflict i missed
Supplementing Aug 6, 2025
2b42f64
[CI] Auto commit changes from spotless
Aug 6, 2025
d2ba854
updated test
Supplementing Aug 7, 2025
130955e
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 7, 2025
67014a9
rolled back test to be correct to investigate failure
Supplementing Aug 7, 2025
e054b35
added additional indexAbstraction function with actual type to avoid …
Supplementing Aug 8, 2025
fca466f
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 8, 2025
1a6871d
changed test to true for now due to BWC logic
Supplementing Aug 8, 2025
189b85c
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 8, 2025
e0ea28f
[CI] Auto commit changes from spotless
Aug 8, 2025
7ac998d
changed to let index management be the responsibility of ES
Supplementing Aug 12, 2025
d0bd00f
merged in main
Supplementing Aug 12, 2025
fa552d1
Removed unneeded function
Supplementing Aug 12, 2025
1f87382
[CI] Auto commit changes from spotless
Aug 12, 2025
d5f0fd8
fixed formatting of variable in json
Supplementing Aug 12, 2025
e009458
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 12, 2025
da9eec1
Update x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/…
Supplementing Aug 12, 2025
b2ba08c
Update x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/…
Supplementing Aug 12, 2025
89e6ac6
added changelog and removed whitespace
Supplementing Aug 12, 2025
1c9a8ee
actually remove whitespace
Supplementing Aug 12, 2025
2683a61
[CI] Auto commit changes from spotless
Aug 12, 2025
a725405
changed area in changelog
Supplementing Aug 12, 2025
ea54a32
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 12, 2025
e388291
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 12, 2025
356c20c
fixed indicies IT to use correct url
Supplementing Aug 12, 2025
ad566f3
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 12, 2025
9453716
fixed mapping issues by updating plugins needed to use types, also fi…
Supplementing Aug 15, 2025
7526470
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 15, 2025
1a3d494
changed index to externally mananged, and removed permissive warnings
Supplementing Aug 15, 2025
140675e
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 15, 2025
72c11d3
[CI] Auto commit changes from spotless
Aug 15, 2025
a18980e
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 18, 2025
8a4f572
made changes to support semantic search with the .md content being ad…
Supplementing Aug 18, 2025
1c1c958
Merge branch 'knowledge-base-index-privileges' of https://github.com/…
Supplementing Aug 18, 2025
9ed402c
Merge branch 'main' into knowledge-base-index-privileges
Supplementing Aug 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/132506.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 132506
summary: Add .integration_knowledge system index for usage by AI assistants
area: Infra/Core
type: feature
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,14 @@ static RoleDescriptor kibanaSystem(String name) {
.privileges("write", "delete", "create_index")
.allowRestrictedIndices(true)
.build(),
// Integrations knowledge base: Fleet creates, manages, and uses this index to store knowledge base documents to be consumed
// by AI assistants to support integrations
// assistants.
RoleDescriptor.IndicesPrivileges.builder()
.indices(".integration_knowledge*")
.privileges("read", "write", "create_index")
.allowRestrictedIndices(true)
.build(),
// Other Fleet indices. Kibana reads and writes to these indices to manage
// Elastic Agents.
RoleDescriptor.IndicesPrivileges.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ public class TestRestrictedIndices {
SystemIndexDescriptorUtils.createUnmanaged(".fleet-policies-[0-9]+*", "fleet policies"),
SystemIndexDescriptorUtils.createUnmanaged(".fleet-policies-leader*", "fleet policies leader"),
SystemIndexDescriptorUtils.createUnmanaged(".fleet-servers*", "fleet servers"),
SystemIndexDescriptorUtils.createUnmanaged(".fleet-artifacts*", "fleet artifacts")
SystemIndexDescriptorUtils.createUnmanaged(".fleet-artifacts*", "fleet artifacts"),
SystemIndexDescriptorUtils.createUnmanaged(".integration_knowledge*", "fleet integration knowledge base")
),
List.of(
new SystemDataStreamDescriptor(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"settings": {
"auto_expand_replicas": "0-1",
"index.hidden": true
},
"mappings": {
"_doc": {
"dynamic": false,
"_meta": {
"version": "${fleet.version}",
"managed_index_mappings_version": ${fleet.managed.index.version},
"description": "Integration package knowledge base content storage"
},
"properties": {
"filename": {
"type": "keyword"
},
"content": {
"type": "semantic_text",
"inference_id": ".elser-2-elasticsearch",
"model_settings": {
"service": "elasticsearch",
"task_type": "sparse_embedding"
}
},
"version": {
"type": "version"
},
"package_name": {
"type": "keyword"
},
"installed_at": {
"type": "date"
}
}
}
}
}
3 changes: 3 additions & 0 deletions x-pack/plugin/fleet/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ dependencies {
javaRestTestImplementation(project(path: xpackModule('core')))
javaRestTestImplementation(testArtifact(project(xpackModule('core'))))
compileOnly project(path: xpackModule('ilm'))
testImplementation project(path: xpackModule('mapper-version'))

clusterModules project(xpackModule('ilm'))
clusterModules project(xpackModule('mapper-version'))
clusterModules project(xpackModule('inference'))
clusterModules project(':modules:data-streams')
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public abstract class AbstractFleetIT extends ESRestTestCase {
public static ElasticsearchCluster cluster = ElasticsearchCluster.local()
.module("x-pack-fleet")
.module("x-pack-ilm")
.module("mapper-version")
.module("x-pack-inference")
.module("data-streams")
.setting("xpack.security.enabled", "true")
.setting("xpack.security.autoconfiguration.enabled", "false")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,4 +293,20 @@ public void verifyFileDeliveryDataILMPolicyExists() throws Exception {
assertThat(policyMap.size(), equalTo(2));
});
}

public void testCreationOfIntegrationKnowledge() throws Exception {
Request request = new Request("PUT", ".integration_knowledge");
Response response = client().performRequest(request);
assertEquals(200, response.getStatusLine().getStatusCode());

request = new Request("GET", ".integration_knowledge/_mapping");
response = client().performRequest(request);
String responseBody = EntityUtils.toString(response.getEntity());
assertThat(responseBody, containsString("content"));

request = new Request("GET", ".integration_knowledge-7/_mapping");
response = client().performRequest(request);
responseBody = EntityUtils.toString(response.getEntity());
assertThat(responseBody, containsString("content"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ public class Fleet extends Plugin implements SystemIndexPlugin {
private static final int FLEET_SERVERS_MAPPINGS_VERSION = 1;
private static final int FLEET_ARTIFACTS_MAPPINGS_VERSION = 1;
private static final int FLEET_ACTIONS_RESULTS_MAPPINGS_VERSION = 1;
private static final int FLEET_INTEGRATION_KNOWLEDGE_MAPPINGS_VERSION = 1;

@Override
public Collection<?> createComponents(PluginServices services) {
Expand All @@ -111,7 +112,8 @@ public Collection<SystemIndexDescriptor> getSystemIndexDescriptors(Settings sett
fleetPoliciesSystemIndexDescriptor(),
fleetPoliciesLeaderSystemIndexDescriptor(),
fleetServersSystemIndexDescriptors(),
fleetArtifactsSystemIndexDescriptors()
fleetArtifactsSystemIndexDescriptors(),
fleetIntegrationKnowledgeSystemIndexDescriptor()
);
}

Expand Down Expand Up @@ -267,6 +269,26 @@ private static SystemIndexDescriptor fleetArtifactsSystemIndexDescriptors() {
.build();
}

private static SystemIndexDescriptor fleetIntegrationKnowledgeSystemIndexDescriptor() {
PutIndexTemplateRequest request = new PutIndexTemplateRequest();
request.source(
loadTemplateSource("/fleet-integration-knowledge.json", FLEET_INTEGRATION_KNOWLEDGE_MAPPINGS_VERSION),
XContentType.JSON
);

return SystemIndexDescriptor.builder()
.setType(Type.EXTERNAL_MANAGED)
.setAllowedElasticProductOrigins(ALLOWED_PRODUCTS)
.setOrigin(FLEET_ORIGIN)
.setMappings(request.mappings())
.setSettings(request.settings())
.setPrimaryIndex(".integration_knowledge-" + CURRENT_INDEX_VERSION)
.setIndexPattern(".integration_knowledge*")
.setAliasName(".integration_knowledge")
.setDescription("Integration package knowledge base content storage")
.build();
}

private static SystemDataStreamDescriptor fleetActionsResultsDescriptor() {
final String source = loadTemplateSource("/fleet-actions-results.json", FLEET_ACTIONS_RESULTS_MAPPINGS_VERSION);
try (XContentParser parser = XContentType.JSON.xContent().createParser(XContentParserConfiguration.EMPTY, source)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public void testFleetIndexNames() {
".fleet-policies-leader*",
".fleet-enrollment-api-keys*",
".fleet-artifacts*",
".fleet-secrets*"
".fleet-secrets*",
".integration_knowledge*"
)
);

Expand All @@ -60,6 +61,8 @@ public void testFleetIndexNames() {
assertFalse(fleetDescriptors.stream().anyMatch(d -> d.matchesIndexPattern(".fleet-actions-results")));

assertTrue(fleetDescriptors.stream().anyMatch(d -> d.matchesIndexPattern(".fleet-secrets")));

assertTrue(fleetDescriptors.stream().anyMatch(d -> d.matchesIndexPattern(".integration_knowledge")));
}

public void testFleetFeature() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public FleetRestIT(final ClientYamlTestCandidate testCandidate) {
public static ElasticsearchCluster cluster = ElasticsearchCluster.local()
.module("x-pack-fleet")
.module("x-pack-ilm")
.module("mapper-version")
.module("x-pack-inference")
.module("data-streams")
.setting("xpack.license.self_generated.type", "basic")
.setting("xpack.security.enabled", "true")
Expand Down