diff --git a/docker-compose.yml b/docker-compose.yml index 1336f05..5d1fada 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,11 +12,13 @@ services: dashboard: build: - context: . + context: /root/ai4math/Barchon/src/barchon dockerfile: ui/Dockerfile container_name: kip-dashboard ports: - "18080:8081" volumes: - - .:/project + - .:/projects/KIP + - /root/ai4math/KIP-infra:/projects/KIP-infra + command: ["node", "server/dist/index.js", "--project", "/projects/KIP", "--port", "8081"] restart: unless-stopped diff --git a/tools/kip-state/index.py b/tools/kip-state/index.py index 31bad2f..84f50a4 100644 --- a/tools/kip-state/index.py +++ b/tools/kip-state/index.py @@ -300,12 +300,14 @@ def main(argv: list[str] | None = None) -> int: ap.add_argument("--project", type=Path, default=Path.cwd(), help="KIP project root (default: cwd)") ap.add_argument("--db", type=Path, default=None, - help="Output SQLite path (default: /.dashboard/state.db)") + help="Output SQLite path (default: /.barchon/state.db)") + ap.add_argument("--lean-root", type=Path, default=None, + help="Lean source root (default: /KIP)") ap.add_argument("--quiet", action="store_true") args = ap.parse_args(argv) project: Path = args.project.resolve() - db_path: Path = args.db or (project / ".dashboard" / "state.db") + db_path: Path = args.db or (project / ".barchon" / "state.db") db_path.parent.mkdir(parents=True, exist_ok=True) log = (lambda *a, **k: None) if args.quiet else (lambda *a, **k: print(*a, **k, file=sys.stderr)) @@ -315,7 +317,7 @@ def main(argv: list[str] | None = None) -> int: status_path = project / "blueprint" / "status.yaml" chapters_dir = project / "blueprint" / "src" / "chapters" - lean_root = project / "KIP" + lean_root = args.lean_root.resolve() if args.lean_root else project / "KIP" agents_dir = project / "agents" log(f"[kip-state] project={project}") diff --git a/ui/client/src/App.tsx b/ui/client/src/App.tsx index 5c24e17..11ecf7b 100644 --- a/ui/client/src/App.tsx +++ b/ui/client/src/App.tsx @@ -1,5 +1,5 @@ import { Routes, Route, NavLink, Navigate } from 'react-router-dom'; -import { useProject } from './hooks/useApi'; +import { useProject, useProjects, useProjectSwitch } from './hooks/useApi'; import Overview from './views/Overview'; import LogViewer from './views/LogViewer'; import Nodes from './views/Nodes'; @@ -17,15 +17,42 @@ function ConnectionBanner({ isError }: { isError: boolean }) { ); } +function ProjectSwitcher() { + const { data: project } = useProject(); + const { data: projects } = useProjects(); + const switcher = useProjectSwitch(); + + if (!projects || projects.length <= 1) { + return ( + + {project?.name ?? '…'} + + ); + } + + return ( + + ); +} + export default function App() { - const { data: project, isError } = useProject(); + const { isError } = useProject(); return (
-

KIP

- {project && {project.name}} +