diff --git a/apps/cli/tests/agent-setting.test.ts b/apps/cli/tests/agent-setting.test.ts index 76a3c861a..39a0988b4 100644 --- a/apps/cli/tests/agent-setting.test.ts +++ b/apps/cli/tests/agent-setting.test.ts @@ -337,6 +337,29 @@ describe('resolveBuiltinACPSetting', () => { }); }); + it('uses the direct ACP launch from the Factory Droid registry entry', () => { + const agent = getRegistryAgent('factory-droid'); + const npx = agent.distribution.npx; + if (!npx) { + throw new Error('Expected Factory Droid to have an npx distribution'); + } + + expect(npx.package).toBe(`droid@${agent.version}`); + expect(npx.args).toEqual(expect.arrayContaining(['exec', '--output-format', 'acp'])); + expect(npx.args).not.toContain('acp-daemon'); + expect(resolveACPSetting({ cliType: 'registry', agentType: 'factory-droid' })).toEqual({ + status: { agent: `Factory Droid@${agent.version}`, command: 'npx' }, + exec: { + command: 'npx', + args: ['--prefer-offline', '-y', npx.package, ...(npx.args ?? [])], + env: npx.env, + }, + }); + expect(getAcpCapabilitySourceVersion({ cliType: 'registry', agentType: 'factory-droid' })).toBe( + `factory-droid@${agent.version}` + ); + }); + it('uses the hardcoded Interactive Claude registry provider with exact platform npx packages', () => { const agent = getRegistryAgent('claude-p'); const npx = agent.distribution.npx; diff --git a/packages/shared/src/acp/registry-generated.ts b/packages/shared/src/acp/registry-generated.ts index 62d9f81d6..656fe186a 100644 --- a/packages/shared/src/acp/registry-generated.ts +++ b/packages/shared/src/acp/registry-generated.ts @@ -418,16 +418,16 @@ const REMOTE_REGISTRY_ACP_AGENTS: RegistryAcpAgent[] = [ { id: 'factory-droid', name: 'Factory Droid', - version: '0.208.2', + version: '0.212.0', description: 'Factory Droid - AI coding agent powered by Factory AI', icon: 'https://cdn.agentclientprotocol.com/registry/v1/latest/factory-droid.svg', distribution: { npx: { - package: 'droid@0.208.2', + package: 'droid@0.212.0', args: [ 'exec', '--output-format', - 'acp-daemon' + 'acp' ], env: { DROID_DISABLE_AUTO_UPDATE: 'true', diff --git a/scripts/generate-acp-registry.mjs b/scripts/generate-acp-registry.mjs index e76b08bcb..4bdbe04d2 100644 --- a/scripts/generate-acp-registry.mjs +++ b/scripts/generate-acp-registry.mjs @@ -210,6 +210,12 @@ function normalizeRegistryAgent(agent) { return null; } + if (id === 'factory-droid' && distribution.npx?.args) { + distribution.npx.args = distribution.npx.args.map((arg) => + arg === 'acp-daemon' ? 'acp' : arg + ); + } + return { id, name,