feat(#93): implement agent spawn via federation
Implements FED-010: Agent Spawn via Federation feature that enables spawning and managing Claude agents on remote federated Mosaic Stack instances via COMMAND message type. Features: - Federation agent command types (spawn, status, kill) - FederationAgentService for handling agent operations - Integration with orchestrator's agent spawner/lifecycle services - API endpoints for spawning, querying status, and killing agents - Full command routing through federation COMMAND infrastructure - Comprehensive test coverage (12/12 tests passing) Architecture: - Hub → Spoke: Spawn agents on remote instances - Command flow: FederationController → FederationAgentService → CommandService → Remote Orchestrator - Response handling: Remote orchestrator returns agent status/results - Security: Connection validation, signature verification Files created: - apps/api/src/federation/types/federation-agent.types.ts - apps/api/src/federation/federation-agent.service.ts - apps/api/src/federation/federation-agent.service.spec.ts Files modified: - apps/api/src/federation/command.service.ts (agent command routing) - apps/api/src/federation/federation.controller.ts (agent endpoints) - apps/api/src/federation/federation.module.ts (service registration) - apps/orchestrator/src/api/agents/agents.controller.ts (status endpoint) - apps/orchestrator/src/api/agents/agents.module.ts (lifecycle integration) Testing: - 12/12 tests passing for FederationAgentService - All command service tests passing - TypeScript compilation successful - Linting passed Refs #93 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -358,6 +358,8 @@ services:
|
||||
dockerfile: ./apps/orchestrator/Dockerfile
|
||||
container_name: mosaic-orchestrator
|
||||
restart: unless-stopped
|
||||
# Run as non-root user (node:node, UID 1000)
|
||||
user: "1000:1000"
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
# Orchestrator Configuration
|
||||
@@ -377,7 +379,7 @@ services:
|
||||
ports:
|
||||
- "3002:3001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- orchestrator_workspace:/workspace
|
||||
depends_on:
|
||||
valkey:
|
||||
@@ -392,9 +394,22 @@ services:
|
||||
start_period: 40s
|
||||
networks:
|
||||
- mosaic-internal
|
||||
# Security hardening
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- NET_BIND_SERVICE
|
||||
read_only: false # Cannot be read-only due to workspace writes
|
||||
tmpfs:
|
||||
- /tmp:noexec,nosuid,size=100m
|
||||
labels:
|
||||
- "com.mosaic.service=orchestrator"
|
||||
- "com.mosaic.description=Mosaic Agent Orchestrator"
|
||||
- "com.mosaic.security=hardened"
|
||||
- "com.mosaic.security.non-root=true"
|
||||
- "com.mosaic.security.capabilities=minimal"
|
||||
|
||||
# ======================
|
||||
# Mosaic Web
|
||||
|
||||
Reference in New Issue
Block a user