forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathregister.ts
More file actions
77 lines (70 loc) · 2.63 KB
/
register.ts
File metadata and controls
77 lines (70 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import type { AgentBuilderPluginSetup } from '@kbn/agent-builder-plugin/server';
import type { Logger } from '@kbn/core/server';
import type { StreamsServer } from '../types';
import type { GetScopedClients } from '../routes/types';
import type { EbtTelemetryClient } from '../lib/telemetry/ebt';
import { MemoryServiceImpl } from '../lib/memory';
import { registerAgentBuilderTools } from './tools/register_tools';
import { createSigEventsMemorySkill } from './skills/sig_events_memory_skill';
import { registerAgentBuilderSkills } from './skills/register_skills';
export const registerStreamsAgentBuilder = async ({
agentBuilder,
getScopedClients,
server,
logger,
telemetry,
isMemoryEnabled,
}: {
agentBuilder: AgentBuilderPluginSetup;
getScopedClients: GetScopedClients;
server: StreamsServer;
logger: Logger;
telemetry: EbtTelemetryClient;
isMemoryEnabled: () => Promise<boolean>;
}) => {
registerAgentBuilderTools({ agentBuilder, getScopedClients, server, logger, telemetry });
registerAgentBuilderSkills({ agentBuilder, getScopedClients, server, logger, telemetry });
const getMemoryService = () =>
new MemoryServiceImpl({
logger: logger.get('memory'),
esClient: server.core.elasticsearch.client.asInternalUser,
});
// The memory skill is registered lazily — only once the Streams memory advanced setting is on.
// This avoids exposing the skill to the agent when memory is not configured.
// Call onMemorySettingChanged when observability:streamsEnableMemory may have changed (e.g. from a uiSettings subscription).
let memorySkillRegistered = false;
const ensureMemorySkillRegistered = () => {
if (memorySkillRegistered) {
return;
}
memorySkillRegistered = true;
agentBuilder.skills.register(
createSigEventsMemorySkill({
getMemoryService,
getSecurity: () => server.core.security,
})
);
logger.info('Memory skill registered (observability:streamsEnableMemory is enabled)');
};
if (await isMemoryEnabled()) {
ensureMemorySkillRegistered();
}
return {
ensureMemorySkillRegistered,
/**
* Call this from a uiSettings change subscription (e.g. in plugin start)
* to auto-register the memory skill when the setting is toggled on.
*/
onMemorySettingChanged: async () => {
if (await isMemoryEnabled()) {
ensureMemorySkillRegistered();
}
},
};
};