From 510d5d5b934b87eaa418144410a0e677beaf6b08 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Sun, 5 Apr 2026 01:48:45 -0500 Subject: [PATCH] fix(macp): point exports.default at dist/index.js + add CLI smoke test (CU-05-09, CU-05-10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit macp package.json had a pre-existing exports map with default: './src/index.ts' which broke any consumer that loaded the compiled mosaic CLI via node (mosaic --help, mosaic --help). Every other workspace package points at ./dist/index.js — align macp with the rest. Adds packages/mosaic/src/cli-smoke.spec.ts — the CU-05-10 integration smoke test that asserts every registerCommand from the eight sub-packages (auth, brain, forge, log, macp, memory, queue, storage) plus config attaches a top-level command and that its help output renders without throwing. Running this locally after the macp fix confirms mosaic --help and mosaic --help exit 0 for all nine commands. Part of mission cli-unification-20260404. --- packages/macp/package.json | 2 +- packages/mosaic/src/cli-smoke.spec.ts | 65 +++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 packages/mosaic/src/cli-smoke.spec.ts diff --git a/packages/macp/package.json b/packages/macp/package.json index 8131d3a..6486e47 100644 --- a/packages/macp/package.json +++ b/packages/macp/package.json @@ -12,7 +12,7 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "default": "./src/index.ts" + "default": "./dist/index.js" } }, "scripts": { diff --git a/packages/mosaic/src/cli-smoke.spec.ts b/packages/mosaic/src/cli-smoke.spec.ts new file mode 100644 index 0000000..fc40154 --- /dev/null +++ b/packages/mosaic/src/cli-smoke.spec.ts @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest'; +import { Command } from 'commander'; +import { registerBrainCommand } from '@mosaicstack/brain'; +import { registerForgeCommand } from '@mosaicstack/forge'; +import { registerLogCommand } from '@mosaicstack/log'; +import { registerMacpCommand } from '@mosaicstack/macp'; +import { registerMemoryCommand } from '@mosaicstack/memory'; +import { registerQueueCommand } from '@mosaicstack/queue'; +import { registerStorageCommand } from '@mosaicstack/storage'; +import { registerAuthCommand } from './commands/auth.js'; +import { registerConfigCommand } from './commands/config.js'; + +// CU-05-10 — integration smoke test +// Asserts every sub-package CLI registered via registerCommand() attaches +// a top-level command to the root program and that its help output renders +// without throwing. This is the "mosaic --help exits 0" gate that +// guards the sub-package CLI surface (CU-05-01..08) from silent breakage. + +const REGISTRARS: Array<[string, (program: Command) => void]> = [ + ['auth', registerAuthCommand], + ['brain', registerBrainCommand], + ['config', registerConfigCommand], + ['forge', registerForgeCommand], + ['log', registerLogCommand], + ['macp', registerMacpCommand], + ['memory', registerMemoryCommand], + ['queue', registerQueueCommand], + ['storage', registerStorageCommand], +]; + +describe('sub-package CLI smoke (CU-05-10)', () => { + for (const [name, register] of REGISTRARS) { + it(`registers the "${name}" command on the root program`, () => { + const program = new Command(); + register(program); + const cmd = program.commands.find((c) => c.name() === name); + expect(cmd, `expected top-level "${name}" command`).toBeDefined(); + }); + + it(`"${name}" help output renders without throwing`, () => { + const program = new Command().exitOverride(); + register(program); + const cmd = program.commands.find((c) => c.name() === name); + expect(cmd).toBeDefined(); + expect(() => cmd!.helpInformation()).not.toThrow(); + }); + } + + it('all nine sub-package commands coexist on a single program', () => { + const program = new Command(); + for (const [, register] of REGISTRARS) register(program); + const names = program.commands.map((c) => c.name()).sort(); + expect(names).toEqual([ + 'auth', + 'brain', + 'config', + 'forge', + 'log', + 'macp', + 'memory', + 'queue', + 'storage', + ]); + }); +}); -- 2.49.1