feat: tool registration — brain tools for agent sessions (P2-004) (#76)

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #76.
This commit is contained in:
2026-03-13 03:18:45 +00:00
committed by jason.woltje
parent 7485f32e69
commit 7f6815feaf
5 changed files with 204 additions and 2 deletions

View File

@@ -1,11 +1,15 @@
import { Injectable, Logger, type OnModuleDestroy } from '@nestjs/common';
import { Inject, Injectable, Logger, type OnModuleDestroy } from '@nestjs/common';
import {
createAgentSession,
SessionManager,
type AgentSession as PiAgentSession,
type AgentSessionEvent,
type ToolDefinition,
} from '@mariozechner/pi-coding-agent';
import type { Brain } from '@mosaic/brain';
import { BRAIN } from '../brain/brain.tokens.js';
import { ProviderService } from './provider.service.js';
import { createBrainTools } from './tools/brain-tools.js';
export interface AgentSessionOptions {
provider?: string;
@@ -27,7 +31,15 @@ export class AgentService implements OnModuleDestroy {
private readonly sessions = new Map<string, AgentSession>();
private readonly creating = new Map<string, Promise<AgentSession>>();
constructor(private readonly providerService: ProviderService) {}
private readonly customTools: ToolDefinition[];
constructor(
private readonly providerService: ProviderService,
@Inject(BRAIN) private readonly brain: Brain,
) {
this.customTools = createBrainTools(brain);
this.logger.log(`Registered ${this.customTools.length} custom tools`);
}
async createSession(sessionId: string, options?: AgentSessionOptions): Promise<AgentSession> {
const existing = this.sessions.get(sessionId);
@@ -62,6 +74,7 @@ export class AgentService implements OnModuleDestroy {
modelRegistry: this.providerService.getRegistry(),
model: model ?? undefined,
tools: [],
customTools: this.customTools,
});
piSession = result.session;
} catch (err) {