feat(fleet): scaffold user-owned agent homes

This commit is contained in:
Jason Woltje
2026-08-13 11:25:25 -05:00
parent 216cd72226
commit 4522adaa5e
5 changed files with 571 additions and 0 deletions
+10
View File
@@ -38,6 +38,10 @@ import {
registerFleetAgentCrudCommands,
type FleetAgentCrudCommandDeps,
} from './fleet-agent-crud-command.js';
import {
registerFleetAgentScaffoldCommand,
type FleetAgentScaffoldCommandDeps,
} from './fleet-agent-scaffold-command.js';
import {
registerFleetMigrationCommand,
type FleetMigrationCommandDeps,
@@ -104,6 +108,8 @@ export interface FleetCommandDeps {
*/
isStdinTTY?: boolean;
projectionApplier?: FleetAgentCrudCommandDeps['projectionApplier'];
/** Test-only user-data root for `fleet agent new` (production: ~/.mosaic). */
fleetDataHome?: FleetAgentScaffoldCommandDeps['fleetDataHome'];
reconcileDeps?: FleetReconcilerCommandDeps['reconcileDeps'];
migrationDeps?: Omit<FleetMigrationCommandDeps, 'mosaicHome'>;
}
@@ -2054,6 +2060,10 @@ export function registerFleetCommand(program: Command, deps: FleetCommandDeps =
// profile. DRY-RUN by default; --write persists under the same --mosaic-home.
registerFleetProvisionCommand(cmd, () => cmd.opts<{ mosaicHome: string }>().mosaicHome);
// `fleet agent new` owns user-data harness homes under ~/.mosaic. The
// existing roster-v2 CRUD remains direct fleet control-plane CRUD, so there
// is one `agent` namespace but deliberately separate state authorities.
registerFleetAgentScaffoldCommand(cmd, { fleetDataHome: deps.fleetDataHome });
// Roster-v2 desired-state mutations belong directly to the fleet control
// plane; they do not share the root `mosaic agent` gateway-backed surface.
registerFleetAgentCrudCommands(cmd, deps);