From 411520a32875382ecc337d6c69c2c8318ff0efe3 Mon Sep 17 00:00:00 2001 From: Christian Gunderman Date: Tue, 3 Feb 2026 00:01:33 -0800 Subject: [PATCH] Inline. --- .../src/agents/acknowledgedAgents.test.ts | 12 ++++++---- .../core/src/agents/acknowledgedAgents.ts | 3 ++- packages/core/src/agents/registry.ts | 24 ++++++++++++++----- packages/test-utils/src/test-rig.ts | 3 +-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/core/src/agents/acknowledgedAgents.test.ts b/packages/core/src/agents/acknowledgedAgents.test.ts index 6fc8a6437a..d8310505ca 100644 --- a/packages/core/src/agents/acknowledgedAgents.test.ts +++ b/packages/core/src/agents/acknowledgedAgents.test.ts @@ -40,25 +40,27 @@ describe('AcknowledgedAgentsService', () => { const service = new AcknowledgedAgentsService(); const ackPath = Storage.getAcknowledgedAgentsPath(); - await service.acknowledge('/project', 'AgentA', 'hash1'); + await service.acknowledge('/project', 'AgentA', 'content1'); // Verify file exists and content const content = await fs.readFile(ackPath, 'utf-8'); - expect(content).toContain('"AgentA": "hash1"'); + const hash1 = AcknowledgedAgentsService.computeHash('content1'); + expect(content).toContain(`"AgentA": "${hash1}"`); }); it('should return true for acknowledged agent', async () => { const service = new AcknowledgedAgentsService(); - await service.acknowledge('/project', 'AgentA', 'hash1'); + await service.acknowledge('/project', 'AgentA', 'content1'); - expect(await service.isAcknowledged('/project', 'AgentA', 'hash1')).toBe( + const hash1 = AcknowledgedAgentsService.computeHash('content1'); + expect(await service.isAcknowledged('/project', 'AgentA', hash1)).toBe( true, ); expect(await service.isAcknowledged('/project', 'AgentA', 'hash2')).toBe( false, ); - expect(await service.isAcknowledged('/project', 'AgentB', 'hash1')).toBe( + expect(await service.isAcknowledged('/project', 'AgentB', hash1)).toBe( false, ); }); diff --git a/packages/core/src/agents/acknowledgedAgents.ts b/packages/core/src/agents/acknowledgedAgents.ts index ace8968b2b..6ec4258916 100644 --- a/packages/core/src/agents/acknowledgedAgents.ts +++ b/packages/core/src/agents/acknowledgedAgents.ts @@ -78,8 +78,9 @@ export class AcknowledgedAgentsService { async acknowledge( projectPath: string, agentName: string, - hash: string, + content: string, ): Promise { + const hash = AcknowledgedAgentsService.computeHash(content); await this.load(); if (!this.acknowledgedAgents[projectPath]) { this.acknowledgedAgents[projectPath] = {}; diff --git a/packages/core/src/agents/registry.ts b/packages/core/src/agents/registry.ts index 66a990f1db..e0514cc53e 100644 --- a/packages/core/src/agents/registry.ts +++ b/packages/core/src/agents/registry.ts @@ -4,11 +4,13 @@ * SPDX-License-Identifier: Apache-2.0 */ +import * as fs from 'node:fs/promises'; import { Storage } from '../config/storage.js'; import { CoreEvent, coreEvents } from '../utils/events.js'; import type { AgentOverride, Config } from '../config/config.js'; import type { AgentDefinition, LocalAgentDefinition } from './types.js'; import { loadAgentsFromDirectory } from './agentLoader.js'; +import { AcknowledgedAgentsService } from './acknowledgedAgents.js'; import { CodebaseInvestigatorAgent } from './codebase-investigator.js'; import { CliHelpAgent } from './cli-help-agent.js'; import { GeneralistAgent } from './generalist-agent.js'; @@ -81,11 +83,19 @@ export class AgentRegistry { const ackService = this.config.getAcknowledgedAgentsService(); const projectRoot = this.config.getProjectRoot(); if (agent.metadata?.hash) { - await ackService.acknowledge( - projectRoot, - agent.name, - agent.metadata.hash, - ); + let content: string; + if (agent.kind === 'remote') { + content = agent.agentCardUrl; + } else { + if (!agent.metadata.filePath) { + throw new Error( + `Cannot acknowledge local agent ${agent.name}: missing file path`, + ); + } + content = await fs.readFile(agent.metadata.filePath, 'utf-8'); + } + + await ackService.acknowledge(projectRoot, agent.name, content); await this.registerAgent(agent); coreEvents.emitAgentsRefreshed(); } @@ -146,7 +156,9 @@ export class AgentRegistry { if (!agent.metadata) { agent.metadata = {}; } - agent.metadata.hash = agent.agentCardUrl; + agent.metadata.hash = AcknowledgedAgentsService.computeHash( + agent.agentCardUrl, + ); } if (!agent.metadata?.hash) { diff --git a/packages/test-utils/src/test-rig.ts b/packages/test-utils/src/test-rig.ts index 8d796536c8..5569b73080 100644 --- a/packages/test-utils/src/test-rig.ts +++ b/packages/test-utils/src/test-rig.ts @@ -369,8 +369,7 @@ export class TestRig { try { const service = new AcknowledgedAgentsService(); for (const [name, content] of Object.entries(agents)) { - const hash = AcknowledgedAgentsService.computeHash(content); - await service.acknowledge(projectRoot, name, hash); + await service.acknowledge(projectRoot, name, content); } } finally { if (originalHome) {