Initialize repository with harness code and assets
Initial import of all source code, config, and README assets: the packages workspace (cli, core, server, web, docs, landing, skills), build scripts, tooling config, and CI workflows. Includes the data-layout revision made on this branch: the local data root defaults to ~/.penguin/data (PENGUIN_HOME still overrides; the installer keeps its binaries in ~/.penguin), and every Agent lives under <project>/agents/<agent>/ — path helpers, the three agent-enumeration scans, the system prompt, built-in Skills, tests and docs all follow the new layout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018ihk8iQuo3kv2aPjAYEPuR
This commit is contained in:
1 parent
056bed7aeb
commit
45bfae6e94
543 files changed
+92949
No files matched your search
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* Router (react-router v7 declarative style): /login is public; all other routes go through
|
||||
* the RequireAuth guard (redirects to /login when not authenticated) and are wrapped in
|
||||
* ProjectProvider + AppLayout.
|
||||
*/
|
||||
import { BrowserRouter, Navigate, Route, Routes } from "react-router";
|
||||
import { useAuth } from "./state/auth";
|
||||
import { ProjectProvider } from "./state/project";
|
||||
import { SessionsProvider } from "./state/sessions";
|
||||
import { AppLayout } from "./components/layout/app-layout";
|
||||
import { LoginPage } from "./pages/login";
|
||||
import { ChatPage } from "./features/chat/chat-page";
|
||||
import { AgentsPage } from "./features/agents/agents-page";
|
||||
import { AgentSettingsPage } from "./features/agents/agent-settings-page";
|
||||
import { SkillsPage } from "./features/skills/skills-page";
|
||||
import { ModelsPage } from "./features/models/models-page";
|
||||
import { UsagePage } from "./features/usage/usage-page";
|
||||
import { TracesPage } from "./features/traces/traces-page";
|
||||
import { BenchmarkPage } from "./features/benchmark/benchmark-page";
|
||||
import { AdminUsersPage } from "./features/admin/admin-users-page";
|
||||
|
||||
/** Route guard: shows blank while initializing, redirects to /login when not authenticated. */
|
||||
function RequireAuth() {
|
||||
const { user } = useAuth();
|
||||
if (user === undefined) return null; // GET /api/me is still initializing
|
||||
if (user === null) return <Navigate to="/login" replace />;
|
||||
return (
|
||||
<ProjectProvider>
|
||||
<SessionsProvider>
|
||||
<AppLayout />
|
||||
</SessionsProvider>
|
||||
</ProjectProvider>
|
||||
);
|
||||
}
|
||||
|
||||
/** When already logged in, visiting /login redirects straight to the chat page. */
|
||||
function LoginRoute() {
|
||||
const { user } = useAuth();
|
||||
if (user) return <Navigate to="/chat" replace />;
|
||||
return <LoginPage />;
|
||||
}
|
||||
|
||||
export function AppRouter() {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
<Route path="/login" element={<LoginRoute />} />
|
||||
<Route element={<RequireAuth />}>
|
||||
<Route index element={<Navigate to="/chat" replace />} />
|
||||
<Route path="/chat/:sessionId?" element={<ChatPage />} />
|
||||
<Route path="/agents" element={<AgentsPage />} />
|
||||
<Route path="/agents/:agentId" element={<AgentSettingsPage />} />
|
||||
<Route path="/skills" element={<SkillsPage />} />
|
||||
<Route path="/models" element={<ModelsPage />} />
|
||||
<Route path="/usage" element={<UsagePage />} />
|
||||
<Route path="/traces" element={<TracesPage />} />
|
||||
<Route path="/benchmark" element={<BenchmarkPage />} />
|
||||
<Route path="/admin/users" element={<AdminUsersPage />} />
|
||||
<Route path="*" element={<Navigate to="/chat" replace />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user