From 5c82703ebe14330dbcc1bbc077fbd279fbcf2ba1 Mon Sep 17 00:00:00 2001 From: buenosairesam Date: Sun, 12 Apr 2026 08:39:12 -0300 Subject: [PATCH] brand renaming, scenario reloads flight --- .mcp.json | 6 +- agents/{efhas.py => fce.py} | 4 +- agents/shared/mcp_client.py | 2 +- api/main.py | 18 +- ctrl/Dockerfile.ui | 1 + ctrl/nginx.conf | 4 + docs/graphs/data_flow.svg | 6 +- docs/graphs/deployment.svg | 6 +- docs/graphs/efhas_agent.svg | 6 +- docs/graphs/handover_agent.svg | 6 +- docs/graphs/mcp_servers.dot | 128 ++---- docs/graphs/mcp_servers.svg | 443 +++++++-------------- docs/graphs/repo_structure.dot | 4 +- docs/graphs/repo_structure.svg | 10 +- docs/graphs/system_architecture.svg | 6 +- docs/index.html | 81 +++- docs/viewer.html | 101 +++++ mcp_servers/ops/server.py | 2 +- mcp_servers/passenger/server.py | 2 +- mcp_servers/shared/server.py | 4 +- pyproject.toml | 2 +- ui/app/package.json | 2 +- ui/app/src/App.vue | 17 +- ui/app/src/components/ScenarioSelector.vue | 3 + ui/app/src/pages/OpsNotifications.vue | 51 +-- 25 files changed, 433 insertions(+), 482 deletions(-) rename agents/{efhas.py => fce.py} (98%) create mode 100644 docs/viewer.html diff --git a/.mcp.json b/.mcp.json index 8986f8d..f4c99ba 100644 --- a/.mcp.json +++ b/.mcp.json @@ -1,14 +1,14 @@ { "mcpServers": { - "united-ops-shared": { + "stellar-ops-shared": { "command": "uv", "args": ["run", "python", "-m", "mcp_servers.shared"] }, - "united-ops-internal": { + "stellar-ops-internal": { "command": "uv", "args": ["run", "python", "-m", "mcp_servers.ops"] }, - "united-ops-passenger": { + "stellar-ops-passenger": { "command": "uv", "args": ["run", "python", "-m", "mcp_servers.passenger"] } diff --git a/agents/efhas.py b/agents/fce.py similarity index 98% rename from agents/efhas.py rename to agents/fce.py index 63b62d6..8eb4227 100644 --- a/agents/efhas.py +++ b/agents/fce.py @@ -14,12 +14,12 @@ from typing import Any from agents.shared.mcp_client import MCPMultiClient -async def run_efhas( +async def run_fce( flight_id: str, mcp: MCPMultiClient, on_event: Any = None, ) -> dict: - """Run the EFHaS agent for a single flight. + """Run the FCE agent for a single flight. Args: flight_id: The flight to generate a notification for. diff --git a/agents/shared/mcp_client.py b/agents/shared/mcp_client.py index 190b02d..a32af52 100644 --- a/agents/shared/mcp_client.py +++ b/agents/shared/mcp_client.py @@ -29,7 +29,7 @@ SERVERS = { # Agent profiles — which servers each agent connects to AGENT_PROFILES = { - "efhas": ["shared", "ops", "passenger"], + "fce": ["shared", "ops", "passenger"], "handover": ["shared", "ops"], } diff --git a/api/main.py b/api/main.py index d6b14bf..9b2c388 100644 --- a/api/main.py +++ b/api/main.py @@ -10,7 +10,7 @@ from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel -from agents.efhas import run_efhas +from agents.fce import run_fce from agents.handover import run_handover from agents.shared.mcp_client import connect_servers from mcp_servers.data.scenarios.manager import scenario_manager @@ -66,7 +66,7 @@ app.add_middleware( # ── Request/Response models ── -class EFHaSRequest(BaseModel): +class FCERequest(BaseModel): flight_id: str class HandoverRequest(BaseModel): @@ -78,15 +78,15 @@ class ScenarioUpdate(BaseModel): # ── Agent routes ── -@app.post("/agents/efhas") -async def trigger_efhas(req: EFHaSRequest): +@app.post("/agents/fce") +async def trigger_fce(req: FCERequest): run_id = str(uuid.uuid4())[:8] - runs[run_id] = {"status": "running", "agent": "efhas", "flight_id": req.flight_id} + runs[run_id] = {"status": "running", "agent": "fce", "flight_id": req.flight_id} async def _run(): await event_hub.broadcast({ "type": "agent_start", "run_id": run_id, - "agent": "efhas", "flight_id": req.flight_id, + "agent": "fce", "flight_id": req.flight_id, "timestamp": datetime.now(timezone.utc).isoformat(), }) @@ -95,10 +95,10 @@ async def trigger_efhas(req: EFHaSRequest): try: async with connect_servers(["shared", "ops", "passenger"]) as mcp: - result = await run_efhas(req.flight_id, mcp, on_event=on_event) - runs[run_id] = {"status": "completed", "agent": "efhas", "result": result} + result = await run_fce(req.flight_id, mcp, on_event=on_event) + runs[run_id] = {"status": "completed", "agent": "fce", "result": result} except Exception as e: - runs[run_id] = {"status": "error", "agent": "efhas", "error": str(e)} + runs[run_id] = {"status": "error", "agent": "fce", "error": str(e)} asyncio.create_task(_run()) return {"run_id": run_id, "status": "running"} diff --git a/ctrl/Dockerfile.ui b/ctrl/Dockerfile.ui index f204c4b..4bd26ba 100644 --- a/ctrl/Dockerfile.ui +++ b/ctrl/Dockerfile.ui @@ -16,4 +16,5 @@ RUN pnpm install && pnpm run build FROM nginx:alpine COPY --from=build /ui/app/dist /usr/share/nginx/html +COPY docs/ /usr/share/nginx/docs/ COPY ctrl/nginx.conf /etc/nginx/conf.d/default.conf diff --git a/ctrl/nginx.conf b/ctrl/nginx.conf index ee0cd2f..b9e8778 100644 --- a/ctrl/nginx.conf +++ b/ctrl/nginx.conf @@ -6,6 +6,10 @@ server { try_files $uri $uri/ /index.html; } + location /docs/ { + alias /usr/share/nginx/docs/; + } + location /agents { proxy_pass http://api:8000; } diff --git a/docs/graphs/data_flow.svg b/docs/graphs/data_flow.svg index 0bcd5a0..39b7736 100644 --- a/docs/graphs/data_flow.svg +++ b/docs/graphs/data_flow.svg @@ -4,9 +4,9 @@ - - + + data_flow Data Flow — Real vs Mock diff --git a/docs/graphs/deployment.svg b/docs/graphs/deployment.svg index 56ce231..79f8c87 100644 --- a/docs/graphs/deployment.svg +++ b/docs/graphs/deployment.svg @@ -4,9 +4,9 @@ - - + + deployment Deployment — Kind Cluster (dev) / EC2 (prod) diff --git a/docs/graphs/efhas_agent.svg b/docs/graphs/efhas_agent.svg index f54c271..db53433 100644 --- a/docs/graphs/efhas_agent.svg +++ b/docs/graphs/efhas_agent.svg @@ -4,9 +4,9 @@ - - + + efhas_agent FCE Agent — Behind Every Departure diff --git a/docs/graphs/handover_agent.svg b/docs/graphs/handover_agent.svg index ef7f9aa..53334d8 100644 --- a/docs/graphs/handover_agent.svg +++ b/docs/graphs/handover_agent.svg @@ -4,9 +4,9 @@ - - + + handover_agent Shift Handover Agent diff --git a/docs/graphs/mcp_servers.dot b/docs/graphs/mcp_servers.dot index 44be866..eeb556a 100644 --- a/docs/graphs/mcp_servers.dot +++ b/docs/graphs/mcp_servers.dot @@ -5,7 +5,7 @@ digraph mcp_servers { node [fontname="Helvetica" fontsize=10 style=filled color="#1e2a4a" fontcolor="#e8eaf0"] edge [fontname="Helvetica" fontsize=9 fontcolor="#8892a8" color="#4a5568"] - label="MCP Server Topology — Tools · Resources · Prompts" + label="MCP Server Topology" labelloc=t fontsize=14 fontcolor="#0066ff" @@ -16,129 +16,59 @@ digraph mcp_servers { style=dashed color="#1e2a4a" fontcolor="#8892a8" - efhas [label="FCE\nAgent" fillcolor="#1a1a3a" shape=box] - handover [label="Handover\nAgent" fillcolor="#1a1a3a" shape=box] + fce [label="FCE Agent\n(passenger)" fillcolor="#1a1a3a" shape=box] + handover [label="Handover Agent\n(ops)" fillcolor="#1a1a3a" shape=box] } // Shared server subgraph cluster_shared { - label="united-ops-shared" + label="stellar-ops-shared" color="#0066ff" fontcolor="#0066ff" style=rounded - subgraph cluster_shared_tools { - label="Tools" - color="#1e2a4a" - fontcolor="#4a5568" - st1 [label="get_flight_status" fillcolor="#0d1a33" shape=box] - st2 [label="get_flight_details" fillcolor="#0d1a33" shape=box] - st3 [label="get_irregular_ops" fillcolor="#0d1a33" shape=box] - st4 [label="get_route_weather\n★ LIVE" fillcolor="#0d2a0d" shape=box fontcolor="#00c853"] - st5 [label="get_hub_forecasts\n★ LIVE" fillcolor="#0d2a0d" shape=box fontcolor="#00c853"] - st6 [label="get_airport_status\n★ LIVE" fillcolor="#0d2a0d" shape=box fontcolor="#00c853"] - st7 [label="get_airport_congestion\n★ HYBRID" fillcolor="#0d2a0d" shape=box fontcolor="#ffc107"] - st8 [label="get_maintenance_flags" fillcolor="#0d1a33" shape=box] - } - - subgraph cluster_shared_res { - label="Resources" - color="#1e2a4a" - fontcolor="#4a5568" - sr1 [label="ops://hubs/{code}" fillcolor="#1a1a2a" shape=note] - sr2 [label="ops://scenarios/active" fillcolor="#1a1a2a" shape=note] - } - - subgraph cluster_shared_prompts { - label="Prompts" - color="#1e2a4a" - fontcolor="#4a5568" - sp1 [label="delay_explainer\n(cause_code, audience)" fillcolor="#2a1a2a" shape=cds] - } + st [label="Tools\nget_flight_status\nget_flight_details\nget_irregular_ops\nget_route_weather ★\nget_hub_forecasts ★\nget_airport_status ★\nget_airport_congestion\nget_maintenance_flags" fillcolor="#0d1a33" shape=box fontsize=9] + sr [label="Resources\nops://hubs/\u007Bcode\u007D\nops://scenarios/active" fillcolor="#1a1a2a" shape=note fontsize=9] + sp [label="Prompts\ndelay_explainer" fillcolor="#2a1a2a" shape=cds fontsize=9] } // Ops server subgraph cluster_ops { - label="united-ops-internal" + label="stellar-ops-internal" color="#ff3d00" fontcolor="#ff3d00" style=rounded - subgraph cluster_ops_tools { - label="Tools" - color="#1e2a4a" - fontcolor="#4a5568" - ot1 [label="get_crew_notes" fillcolor="#0d1a33" shape=box] - ot2 [label="get_crew_duty_status" fillcolor="#0d1a33" shape=box] - ot3 [label="get_pending_rebookings" fillcolor="#0d1a33" shape=box] - ot4 [label="generate_narrative" fillcolor="#0d1a33" shape=box] - } - - subgraph cluster_ops_res { - label="Resources" - color="#1e2a4a" - fontcolor="#4a5568" - or1 [label="ops://crew/roster" fillcolor="#1a1a2a" shape=note] - or2 [label="ops://handover/latest" fillcolor="#1a1a2a" shape=note] - } - - subgraph cluster_ops_prompts { - label="Prompts" - color="#1e2a4a" - fontcolor="#4a5568" - op1 [label="handover_brief\n(hub, shift_time)" fillcolor="#2a1a2a" shape=cds] - } + ot [label="Tools\nget_crew_notes\nget_crew_duty_status\nget_pending_rebookings\ngenerate_narrative" fillcolor="#0d1a33" shape=box fontsize=9] + or [label="Resources\nops://crew/roster\nops://handover/latest" fillcolor="#1a1a2a" shape=note fontsize=9] + op [label="Prompts\nhandover_brief" fillcolor="#2a1a2a" shape=cds fontsize=9] } // Passenger server subgraph cluster_pax { - label="united-ops-passenger" + label="stellar-ops-passenger" color="#00c853" fontcolor="#00c853" style=rounded - subgraph cluster_pax_tools { - label="Tools" - color="#1e2a4a" - fontcolor="#4a5568" - pt1 [label="generate_notification" fillcolor="#0d1a33" shape=box] - } - - subgraph cluster_pax_res { - label="Resources" - color="#1e2a4a" - fontcolor="#4a5568" - pr1 [label="ops://flights/{id}/manifest" fillcolor="#1a1a2a" shape=note] - } - - subgraph cluster_pax_prompts { - label="Prompts" - color="#1e2a4a" - fontcolor="#4a5568" - pp1 [label="passenger_notification\n(tone)" fillcolor="#2a1a2a" shape=cds] - } + pt [label="Tools\ngenerate_notification" fillcolor="#0d1a33" shape=box fontsize=9] + pr [label="Resources\nops://flights/\u007Bid\u007D/manifest" fillcolor="#1a1a2a" shape=note fontsize=9] + pp [label="Prompts\npassenger_notification" fillcolor="#2a1a2a" shape=cds fontsize=9] } - // Connections - efhas -> st1 [color="#0066ff"] - efhas -> st2 [color="#0066ff"] - efhas -> st4 [color="#0066ff"] - efhas -> st6 [color="#0066ff"] - efhas -> st7 [color="#0066ff"] - efhas -> st8 [color="#0066ff"] - efhas -> pt1 [color="#00c853"] - efhas -> sr1 [color="#0066ff" style=dashed] - efhas -> pp1 [color="#00c853" style=dotted] + // Tool calls (solid) + fce -> st [color="#0066ff"] + fce -> pt [color="#00c853"] + handover -> st [color="#0066ff"] + handover -> ot [color="#ff3d00"] - handover -> st3 [color="#0066ff"] - handover -> st5 [color="#0066ff"] - handover -> st6 [color="#0066ff"] - handover -> st8 [color="#0066ff"] - handover -> ot1 [color="#ff3d00"] - handover -> ot2 [color="#ff3d00"] - handover -> ot3 [color="#ff3d00"] - handover -> ot4 [color="#ff3d00"] - handover -> or1 [color="#ff3d00" style=dashed] - handover -> or2 [color="#ff3d00" style=dashed] - handover -> op1 [color="#ff3d00" style=dotted] + // Resource reads (dashed) + fce -> sr [color="#0066ff" style=dashed] + fce -> pr [color="#00c853" style=dashed] + handover -> or [color="#ff3d00" style=dashed] + + // Prompt gets (dotted) + fce -> pp [color="#00c853" style=dotted] + handover -> op [color="#ff3d00" style=dotted] + handover -> sp [color="#0066ff" style=dotted] } diff --git a/docs/graphs/mcp_servers.svg b/docs/graphs/mcp_servers.svg index 52d6037..f0f0f1a 100644 --- a/docs/graphs/mcp_servers.svg +++ b/docs/graphs/mcp_servers.svg @@ -4,353 +4,186 @@ - - + + mcp_servers - -MCP Server Topology — Tools · Resources · Prompts + +MCP Server Topology cluster_clients - -Agent Clients + +Agent Clients cluster_shared - -united-ops-shared + +stellar-ops-shared -cluster_shared_tools - -Tools +cluster_ops + +stellar-ops-internal -cluster_shared_res - -Resources - - -cluster_shared_prompts - -Prompts - - -cluster_ops - -united-ops-internal - - -cluster_ops_tools - -Tools - - -cluster_ops_res - -Resources - - -cluster_ops_prompts - -Prompts - - cluster_pax - -united-ops-passenger + +stellar-ops-passenger - -cluster_pax_tools - -Tools - - -cluster_pax_res - -Resources - - -cluster_pax_prompts - -Prompts - - + -efhas - -FCE -Agent +fce + +FCE Agent +(passenger) - + -st1 - -get_flight_status +st + +Tools +get_flight_status +get_flight_details +get_irregular_ops +get_route_weather ★ +get_hub_forecasts ★ +get_airport_status ★ +get_airport_congestion +get_maintenance_flags - + -efhas->st1 - - +fce->st + + - + -st2 - -get_flight_details +sr + + + +Resources +ops://hubs/u007Bcodeu007D +ops://scenarios/active - - -efhas->st2 - - - - - -st4 - -get_route_weather -★ LIVE - - - -efhas->st4 - - - - - -st6 - -get_airport_status -★ LIVE - - - -efhas->st6 - - - - - -st7 - -get_airport_congestion -★ HYBRID - - + -efhas->st7 - - +fce->sr + + - + + +pt + +Tools +generate_notification + + + +fce->pt + + + + -st8 - -get_maintenance_flags +pr + + + +Resources +ops://flights/u007Bidu007D/manifest - + -efhas->st8 - - +fce->pr + + - + -sr1 - - - -ops://hubs/{code} +pp + +Prompts +passenger_notification - + -efhas->sr1 - - - - - -pt1 - -generate_notification - - - -efhas->pt1 - - - - - -pp1 - -passenger_notification -(tone) - - - -efhas->pp1 - - +fce->pp + + handover - -Handover -Agent + +Handover Agent +(ops) - + + +handover->st + + + + -st3 - -get_irregular_ops +sp + +Prompts +delay_explainer - + -handover->st3 - - +handover->sp + + - + + +ot + +Tools +get_crew_notes +get_crew_duty_status +get_pending_rebookings +generate_narrative + + + +handover->ot + + + + -st5 - -get_hub_forecasts -★ LIVE +or + + + +Resources +ops://crew/roster +ops://handover/latest - - -handover->st5 - - + + +handover->or + + - - -handover->st6 - - + + +op + +Prompts +handover_brief - - -handover->st8 - - - - - -ot1 - -get_crew_notes - - - -handover->ot1 - - - - - -ot2 - -get_crew_duty_status - - - -handover->ot2 - - - - - -ot3 - -get_pending_rebookings - - - -handover->ot3 - - - - - -ot4 - -generate_narrative - - - -handover->ot4 - - - - - -or1 - - - -ops://crew/roster - - - -handover->or1 - - - - - -or2 - - - -ops://handover/latest - - - -handover->or2 - - - - - -op1 - -handover_brief -(hub, shift_time) - - - -handover->op1 - - - - - -sr2 - - - -ops://scenarios/active - - - -sp1 - -delay_explainer -(cause_code, audience) - - - -pr1 - - - -ops://flights/{id}/manifest + + +handover->op + + diff --git a/docs/graphs/repo_structure.dot b/docs/graphs/repo_structure.dot index 4da4d11..486b67a 100644 --- a/docs/graphs/repo_structure.dot +++ b/docs/graphs/repo_structure.dot @@ -10,7 +10,7 @@ digraph repo_structure { fontsize=14 fontcolor="#0066ff" - root [label="united-ops/" fillcolor="#0066ff" fontcolor="white"] + root [label="stellar-ops/" fillcolor="#0066ff" fontcolor="white"] mcp [label="mcp_servers/" fillcolor="#121829"] agents [label="agents/" fillcolor="#121829"] @@ -27,7 +27,7 @@ digraph repo_structure { mcp_data [label="data/\nmodels.py\nreal/ (openmeteo, faa)\nmock/\nscenarios/ (4 scenarios)" fillcolor="#0d1a33" shape=box] // Agents subtree - ag_efhas [label="efhas.py\nFCE agent" fillcolor="#1a1a3a" shape=box] + ag_efhas [label="fce.py\nFCE agent" fillcolor="#1a1a3a" shape=box] ag_handover [label="handover.py\nHandover agent" fillcolor="#1a1a3a" shape=box] ag_shared [label="shared/\nmcp_client.py\nllm.py" fillcolor="#1a1a3a" shape=box] diff --git a/docs/graphs/repo_structure.svg b/docs/graphs/repo_structure.svg index 105c54d..fad761a 100644 --- a/docs/graphs/repo_structure.svg +++ b/docs/graphs/repo_structure.svg @@ -4,9 +4,9 @@ - - + + repo_structure Repository Structure @@ -14,7 +14,7 @@ root -united-ops/ +stellar-ops/ @@ -162,7 +162,7 @@ ag_efhas -efhas.py +fce.py FCE agent diff --git a/docs/graphs/system_architecture.svg b/docs/graphs/system_architecture.svg index 59b3c46..5c59ff8 100644 --- a/docs/graphs/system_architecture.svg +++ b/docs/graphs/system_architecture.svg @@ -4,9 +4,9 @@ - - + + system_architecture System Architecture diff --git a/docs/index.html b/docs/index.html index 61442f1..c2b27b6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -144,6 +144,30 @@ .legend .mock::before { background: #ffc107; } .legend .mcp::before { background: #0066ff; } .legend .ops::before { background: #ff3d00; } + + .graph-container a { display: block; } + .graph-container img { max-width: 100%; height: auto; } + + /* Repo tree */ + .tree-container { + background: #0a0e17; + border: 1px solid #1e2a4a; + padding: 24px; + overflow: auto; + } + .repo-tree { + font-family: 'JetBrains Mono', monospace; + font-size: 13px; + line-height: 1.7; + color: #8892a8; + } + .t-root { color: #0066ff; font-weight: 600; font-size: 15px; } + .t-dir { color: #e8eaf0; font-weight: 500; } + .t-mcp { color: #0066ff; font-weight: 500; } + .t-ops { color: #ff3d00; font-weight: 500; } + .t-pax { color: #00c853; font-weight: 500; } + .t-live { color: #00c853; } + .t-comment { color: #4a5568; } @@ -171,7 +195,7 @@

SYSTEM ARCHITECTURE

End-to-end view: Vue UI → Kong gateway → FastAPI → MCP servers → live and scenario data sources. Langfuse traces every agent run.

- System Architecture + System Architecture
Live API @@ -184,20 +208,25 @@

MCP SERVER TOPOLOGY

Three servers scoped by access domain. Each exposes tools, resources, and prompts. FCE connects to shared + passenger. Handover connects to shared + ops.

- MCP Servers + MCP Servers
Shared server Ops server Passenger server
+
+ ── solid = tool calls + ╌╌ dashed = resource reads + ··· dotted = prompt gets +

FCE AGENT — BEHIND EVERY DEPARTURE

Passenger notification agent. Triages flight status, gathers context from 5 parallel tool calls (including live weather and FAA data), synthesizes an empathetic notification.

- FCE Agent + FCE Agent
@@ -205,7 +234,7 @@

SHIFT HANDOVER AGENT

Ops briefing agent. Scans all hubs in parallel, scores issues by severity × time sensitivity, categorizes into IMMEDIATE / MONITOR / FYI, generates a structured brief.

- Handover Agent + Handover Agent
@@ -213,7 +242,7 @@

DATA FLOW — REAL vs MOCK

Weather and FAA airport status are live (no API key). Flight, crew, passenger, and maintenance data are scenario-based fixtures switchable from the UI.

- Data Flow + Data Flow
Live data (no API key) @@ -225,15 +254,50 @@

DEPLOYMENT

Kind cluster for dev (Tilt), docker-compose for quick start, EC2 for production demo. Entry point: localhost:8040.

- Deployment + Deployment

REPOSITORY STRUCTURE

Monorepo: MCP servers, agents, IRROP engine, API, Vue UI (with shared component framework), and deployment configs.

-
- Repository Structure +
+
stellar-ops/
+├── mcp_servers/
+│   ├── shared/           server.py — tools/ resources/ prompts/
+│   │   └── tools: get_route_weather · get_hub_forecasts · get_airport_status
+│   │             get_flight_status · get_flight_details · get_irregular_ops
+│   │             get_airport_congestion · get_maintenance_flags
+│   ├── ops/              server.py — tools/ resources/ prompts/
+│   │   └── tools: get_crew_notes · get_crew_duty_status · get_pending_rebookings
+│   │             generate_narrative
+│   ├── passenger/        server.py — tools/ resources/ prompts/
+│   │   └── tools: generate_notification
+│   └── data/
+│       ├── models.py        FlightData, CrewMember, Passenger, MELItem, HubInfo
+│       ├── real/             openmeteo.py · faa.py
+│       └── scenarios/        normal_ops · weather_disruption_ord
+│                             maintenance_delay_sfo · crew_swap_ewr
+├── agents/
+│   ├── fce.py              FCE — "Behind Every Departure"
+│   ├── handover.py           Shift Handover agent
+│   └── shared/               mcp_client.py · llm.py (Bedrock/Anthropic)
+├── irrop/                  Disruption Recovery Engine (Project 3)
+│   ├── models/               flight · passenger · crew · recovery
+│   ├── rules/                faa_part117 · rebooking · compensation
+│   └── pipeline/             ingest → triage → rebook → compensate
+├── api/
+│   └── main.py               FastAPI + WebSocket + scenario data API
+├── ui/
+│   ├── framework/            soleprint-ui (shared component library)
+│   └── app/                  Vue 3 SPA — Operations · Internals · Data
+├── ctrl/
+│   ├── Dockerfile.api/ui     Container builds
+│   ├── k8s/                  base/ + overlays/dev/ (Kustomize)
+│   ├── Tiltfile              Dev environment (Kind cluster: unt)
+│   └── docker-compose.yml    Simple alternative
+├── docs/                   Architecture graphs (this page)
+└── .mcp.json                 Claude Code integration — 3 servers
@@ -248,6 +312,7 @@ function show(id) { document.getElementById(id).classList.add('active'); event.currentTarget.classList.add('active'); } + diff --git a/docs/viewer.html b/docs/viewer.html new file mode 100644 index 0000000..214c382 --- /dev/null +++ b/docs/viewer.html @@ -0,0 +1,101 @@ + + + + +Graph Viewer + + + +
+ +
+ + + diff --git a/mcp_servers/ops/server.py b/mcp_servers/ops/server.py index 9cebe4a..1c9bac0 100644 --- a/mcp_servers/ops/server.py +++ b/mcp_servers/ops/server.py @@ -12,7 +12,7 @@ from fastmcp import FastMCP from mcp_servers.data.scenarios.manager import scenario_manager mcp = FastMCP( - "united-ops-internal", + "stellar-ops-internal", instructions=( "Internal operations tools — crew duty status, pending rebookings, " "and ops-audience narrative generation. Restricted to ops-facing clients." diff --git a/mcp_servers/passenger/server.py b/mcp_servers/passenger/server.py index 88938cc..62b98ca 100644 --- a/mcp_servers/passenger/server.py +++ b/mcp_servers/passenger/server.py @@ -13,7 +13,7 @@ from mcp_servers.data.models import MPStatus from mcp_servers.data.scenarios.manager import scenario_manager mcp = FastMCP( - "united-ops-passenger", + "stellar-ops-passenger", instructions=( "Passenger-facing tools — notification narrative generation " "and flight manifest access. Restricted to customer-facing clients." diff --git a/mcp_servers/shared/server.py b/mcp_servers/shared/server.py index df35ca3..614b714 100644 --- a/mcp_servers/shared/server.py +++ b/mcp_servers/shared/server.py @@ -11,9 +11,9 @@ from mcp_servers.data.real import faa, openmeteo from mcp_servers.data.scenarios.manager import scenario_manager mcp = FastMCP( - "united-ops-shared", + "stellar-ops-shared", instructions=( - "Shared operational data tools for Stellar Air operations. " + "Shared operational data tools for Stellar Air NOVA operations. " "Covers: flight status, weather (live OpenMeteo), airport status " "(live FAA), and maintenance flags. Used by all agent clients." ), diff --git a/pyproject.toml b/pyproject.toml index 6db8da8..592d66c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "united-ops" +name = "stellar-ops" version = "0.1.0" requires-python = ">=3.12" dependencies = [ diff --git a/ui/app/package.json b/ui/app/package.json index 3f3a7f7..bfb4456 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,5 +1,5 @@ { - "name": "united-ops-ui", + "name": "stellar-ops-ui", "version": "0.1.0", "private": true, "type": "module", diff --git a/ui/app/src/App.vue b/ui/app/src/App.vue index cc7c561..9c6a823 100644 --- a/ui/app/src/App.vue +++ b/ui/app/src/App.vue @@ -1,10 +1,17 @@