Skip to content

Commit e7bc0b9

Browse files
Copilothotlong
andauthored
fix: register metadata_assistant agent and metadata tools in AIServicePlugin.start()
Agent-Logs-Url: https://github.com/objectstack-ai/framework/sessions/fead28d3-f5fd-4b74-92a2-115c25f8d39e Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 319474f commit e7bc0b9

1 file changed

Lines changed: 35 additions & 5 deletions

File tree

packages/services/service-ai/src/plugin.ts

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import { buildAgentRoutes } from './routes/agent-routes.js';
99
import { ObjectQLConversationService } from './conversation/objectql-conversation-service.js';
1010
import { AiConversationObject, AiMessageObject } from './objects/index.js';
1111
import { registerDataTools } from './tools/data-tools.js';
12+
import { registerMetadataTools } from './tools/metadata-tools.js';
1213
import { AgentRuntime } from './agent-runtime.js';
13-
import { DATA_CHAT_AGENT } from './agents/index.js';
14+
import { DATA_CHAT_AGENT, METADATA_ASSISTANT_AGENT } from './agents/index.js';
1415

1516
/**
1617
* Configuration options for the AIServicePlugin.
@@ -141,10 +142,17 @@ export class AIServicePlugin implements Plugin {
141142
async start(ctx: PluginContext): Promise<void> {
142143
if (!this.service) return;
143144

144-
// ── Auto-register built-in data tools if data engine + metadata are available ──
145+
// ── Auto-register built-in tools & agents when services are available ──
146+
let metadataService: IMetadataService | undefined;
147+
try {
148+
metadataService = ctx.getService<IMetadataService>('metadata');
149+
} catch {
150+
// Metadata service not available — skip
151+
}
152+
153+
// Data tools require both data engine and metadata service
145154
try {
146155
const dataEngine = ctx.getService<IDataEngine>('data');
147-
const metadataService = ctx.getService<IMetadataService>('metadata');
148156
if (dataEngine && metadataService) {
149157
registerDataTools(this.service.toolRegistry, { dataEngine, metadataService });
150158
ctx.logger.info('[AI] Built-in data tools registered');
@@ -163,8 +171,30 @@ export class AIServicePlugin implements Plugin {
163171
}
164172
}
165173
} catch {
166-
// Data engine or metadata service not available — skip data tools
167-
ctx.logger.debug('[AI] Data engine or metadata service not available, skipping data tools');
174+
ctx.logger.debug('[AI] Data engine not available, skipping data tools');
175+
}
176+
177+
// Metadata tools require only the metadata service
178+
if (metadataService) {
179+
try {
180+
registerMetadataTools(this.service.toolRegistry, { metadataService });
181+
ctx.logger.info('[AI] Built-in metadata tools registered');
182+
183+
// Register the built-in metadata_assistant agent
184+
const agentExists =
185+
typeof metadataService.exists === 'function'
186+
? await metadataService.exists('agent', METADATA_ASSISTANT_AGENT.name)
187+
: false;
188+
189+
if (!agentExists) {
190+
await metadataService.register('agent', METADATA_ASSISTANT_AGENT.name, METADATA_ASSISTANT_AGENT);
191+
ctx.logger.info('[AI] metadata_assistant agent registered');
192+
} else {
193+
ctx.logger.debug('[AI] metadata_assistant agent already exists, skipping auto-registration');
194+
}
195+
} catch (err) {
196+
ctx.logger.debug('[AI] Failed to register metadata tools', err instanceof Error ? err : undefined);
197+
}
168198
}
169199

170200
// Trigger hook to notify AI service is ready — other plugins can register tools

0 commit comments

Comments
 (0)