soroush.asadi d50cd2790e Animated agent faces driven by live run state
Each AI agent now has an expressive Companion face (AgentFace) whose animation
maps to its real AgentRun state — idle, thinking (queued), working (running),
review (held), done, failed — so a glance at the board or org chart reads as live
status, the same way the seat-state triad reads human/open/AI. Pure CSS keyframes
(no animation dependency), em-scaled across four sizes, per-agent hue derived
deterministically in the indigo band, reduced-motion respected.

Adds a per-team agent-activity read endpoint (latest run status per agent) and a
self-contained polling hook (useAgentActivity) that merges run activity with
governance holds. Wired into the board assignee chips and the org chart (a custom
React Flow seat node with hidden handles so edges still connect).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:21:10 +03:30
2026-06-09 06:41:28 +03:30
2026-06-09 06:41:28 +03:30
2026-06-09 06:41:28 +03:30

TeamUp.AI

Build human + AI teams. A live org chart that does work: model the org, fill open role-seats with governed AI agents, run delivery on one board. A product of AliaSaaS.

Status: pre-M1 skeleton — the repo builds, tests green, and runs, but carries no feature code yet. See docs/V1_BUILD_PLAN.md for what M1M6 add.

Stack

.NET 10 modular monolith (web + worker on one image) · PostgreSQL 17 + pgvector · EF Core 10 · React 19 + Vite SPA into wwwroot · Docker Compose for local dev. Full bill of materials in docs/V1_BUILD_PLAN.md.

Layout

src/Shared/TeamUp.SharedKernel     IModule seam, base Entity, IModuleDbContext
src/Shared/TeamUp.Infrastructure   PlatformDbContext (pgvector + schemas), MigrationRunner, wiring
src/Bootstrap/TeamUp.Bootstrap     the explicit module catalog (the only thing that knows all modules)
src/Modules/TeamUp.Modules.*       OrgBoard · Identity · Skills · Assembler · Governance · Memory · Integrations
src/Hosts/TeamUp.Web               ASP.NET Core API host (also serves the SPA)
src/Hosts/TeamUp.Worker            Generic Host worker (background jobs; M4+)
client/                            React/Vite SPA → builds into TeamUp.Web/wwwroot
tests/                             ArchitectureTests (boundary rules) · IntegrationTests (Testcontainers)
docker/                            Dockerfile (one image, two roles) · docker-compose.yml

Boundary rule: each module is its own assembly; everything but its IModule and public contracts is internal, so no module can touch another's persistence. TeamUp.ArchitectureTests backstops this — it fails the build if a module references another module / Infrastructure / a host.

Prerequisites

.NET SDK 10 · Node 22 · Docker. Packages and container images are pulled through a Nexus mirror — see Package & image sources below.

Quick start

# Backend: build, run the boundary + integration tests (integration needs Docker)
dotnet build TeamUp.slnx
dotnet test  TeamUp.slnx

# Local dev — two terminals, with the Vite dev server proxying /api to the .NET host
docker compose -f docker/docker-compose.yml up postgres -d   # Postgres 17 + pgvector
dotnet run --project src/Hosts/TeamUp.Web                     # http://localhost:5180  (applies migrations in Dev)
cd client && npm install && npm run dev                       # http://localhost:5173  (proxies /api, /health)

# Or run the whole thing in containers (web + worker + postgres, single image, RUN_MODE picks the role)
docker compose -f docker/docker-compose.yml up --build

GET /health is the DB health check; GET /api/<module>/ping proves each module seam; the OpenAPI document is at /openapi/v1.json (Development only).

EF Core migrations

dotnet ef migrations add <Name> \
  --project src/Shared/TeamUp.Infrastructure --startup-project src/Shared/TeamUp.Infrastructure \
  --context PlatformDbContext --output-dir Persistence/Migrations

The initial InitialPlatform migration enables the vector extension and creates one schema per module. Module-owned contexts (M1+) get their own migrations and apply after Platform via MigrationRunner.

Package & image sources

NuGet packages (nuget.config) and container base images (docker/Dockerfile, docker/docker-compose.yml) are pulled through the self-hosted Nexus mirror mirror.soroushasadi.com, which proxies nuget.org / Docker Hub / MCR and is reachable from Iran. To build against the public registries instead, point nuget.config at api.nuget.org and replace the mirror.soroushasadi.com/... image prefixes with docker.io/library (node) and mcr.microsoft.com (dotnet). Testcontainers picks up the mirror via TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX=mirror.soroushasadi.com/.

More

S
Description
No description provided
Readme 696 KiB
Languages
C# 67%
TypeScript 29.8%
CSS 2.6%
Dockerfile 0.3%
HTML 0.2%