feat: implement tool instances backend and session navigation

Backend:
- Create ToolInstance model with status tracking
- Add Alembic migration for tool_instances table
- Create Docker service for compose template rendering and container execution
- Add CRUD API endpoints for tool instances
- Add lifecycle endpoints (start/stop/restart)
- Add user sessions endpoint for navigation
- Register routers in main.py

Frontend:
- Create SessionsProvider with React context
- Create sessions API client
- Update AppShell with sessions section in navigation
- Add session status indicators and polling
- Add CSS for session navigation

Quality gates: typecheck ✓, lint ✓, build ✓
This commit is contained in:
Fusion
2026-05-19 20:42:59 +02:00
parent c52367401b
commit c795f8f873
21 changed files with 1455 additions and 2 deletions
+41
View File
@@ -0,0 +1,41 @@
import { createContext, useContext, useState, type ReactNode } from "react";
export interface Session {
id: string;
display_name: string;
tool_type_name: string;
tool_icon: string;
repository_name: string;
project_name: string;
status: string;
url: string | null;
}
interface SessionsContextType {
sessions: Session[];
setAllSessions: (sessions: Session[]) => void;
}
const SessionsContext = createContext<SessionsContextType | undefined>(undefined);
export const SessionsProvider = ({ children }: { children: ReactNode }) => {
const [sessions, setSessions] = useState<Session[]>([]);
const setAllSessions = (newSessions: Session[]) => {
setSessions(newSessions);
};
return (
<SessionsContext.Provider value={{ sessions, setAllSessions }}>
{children}
</SessionsContext.Provider>
);
};
export const useSessions = () => {
const context = useContext(SessionsContext);
if (context === undefined) {
throw new Error("useSessions must be used within a SessionsProvider");
}
return context;
};