From 9fd2221e05221b0ff7ef98739ae1abc7e9646676 Mon Sep 17 00:00:00 2001 From: payneio Date: Mon, 27 Apr 2026 21:10:31 -0700 Subject: [PATCH] refactor: Rename component pages to program pages and remove tools concept MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'tools' concept was just a filtered view of programs and added unnecessary complexity to the frontend. This commit: - Removes ToolCard.tsx and Tools.tsx (pages/components never used in router) - Renames ComponentDetail.tsx → ProgramDetail.tsx (exports ProgramDetailPage) - Renames ComponentRedirect.tsx → ProgramRedirect.tsx (exports ProgramRedirect) - Updates imports in routes.tsx to match new file names - Fixes stale comment in hooks.ts Frontend naming now aligns with the unified programs model. --- app/src/components/ToolCard.tsx | 57 ------------------- ...{ComponentDetail.tsx => ProgramDetail.tsx} | 2 +- ...ponentRedirect.tsx => ProgramRedirect.tsx} | 2 +- app/src/pages/Tools.tsx | 33 ----------- app/src/router/routes.tsx | 8 +-- app/src/services/api/hooks.ts | 2 +- 6 files changed, 7 insertions(+), 97 deletions(-) delete mode 100644 app/src/components/ToolCard.tsx rename app/src/pages/{ComponentDetail.tsx => ProgramDetail.tsx} (98%) rename app/src/pages/{ComponentRedirect.tsx => ProgramRedirect.tsx} (95%) delete mode 100644 app/src/pages/Tools.tsx diff --git a/app/src/components/ToolCard.tsx b/app/src/components/ToolCard.tsx deleted file mode 100644 index 0d9f1b2..0000000 --- a/app/src/components/ToolCard.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Link } from "react-router-dom" -import { Terminal } from "lucide-react" -import type { ProgramSummary } from "@/types" -import { runnerLabel } from "@/lib/labels" - -interface ToolCardProps { - tool: ProgramSummary -} - -export function ToolCard({ tool }: ToolCardProps) { - return ( -
-
- - {tool.id} - - {tool.installed && ( - - installed - - )} -
- - {tool.description && ( -

{tool.description}

- )} - -
- {tool.runner && ( - - - {runnerLabel(tool.runner)} - - )} - {tool.version && ( - v{tool.version} - )} -
- - {tool.system_dependencies.length > 0 && ( -
- {tool.system_dependencies.map((dep) => ( - - {dep} - - ))} -
- )} -
- ) -} diff --git a/app/src/pages/ComponentDetail.tsx b/app/src/pages/ProgramDetail.tsx similarity index 98% rename from app/src/pages/ComponentDetail.tsx rename to app/src/pages/ProgramDetail.tsx index 4a502b0..e086f09 100644 --- a/app/src/pages/ComponentDetail.tsx +++ b/app/src/pages/ProgramDetail.tsx @@ -6,7 +6,7 @@ import { DetailHeader } from "@/components/detail/DetailHeader" import { ConfigPanel } from "@/components/detail/ConfigPanel" import { ProgramActions, ActionOutputPanel, type ActionOutput } from "@/components/ProgramActions" -export function ComponentDetailPage() { +export function ProgramDetailPage() { useEventStream() const { name } = useParams<{ name: string }>() const { data: component, isLoading, error, refetch } = useProgram(name ?? "") diff --git a/app/src/pages/ComponentRedirect.tsx b/app/src/pages/ProgramRedirect.tsx similarity index 95% rename from app/src/pages/ComponentRedirect.tsx rename to app/src/pages/ProgramRedirect.tsx index c6aa716..f3f176a 100644 --- a/app/src/pages/ComponentRedirect.tsx +++ b/app/src/pages/ProgramRedirect.tsx @@ -1,7 +1,7 @@ import { useParams, Navigate } from "react-router-dom" import { useComponent } from "@/services/api/hooks" -export function ComponentRedirect() { +export function ProgramRedirect() { const { name } = useParams<{ name: string }>() const { data: component, isLoading, error } = useComponent(name ?? "") diff --git a/app/src/pages/Tools.tsx b/app/src/pages/Tools.tsx deleted file mode 100644 index 9edea79..0000000 --- a/app/src/pages/Tools.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Link } from "react-router-dom" -import { ArrowLeft } from "lucide-react" -import { usePrograms } from "@/services/api/hooks" -import { ToolCard } from "@/components/ToolCard" - -export function ToolsPage() { - const { data: tools, isLoading } = usePrograms("tool") - - return ( -
- - Back - - -

Tools

-

- CLI utilities installed to PATH via castle and run with uv. -

- - {isLoading ? ( -

Loading tools...

- ) : tools?.length ? ( -
- {tools.map((tool) => ( - - ))} -
- ) : ( -

No tools registered.

- )} -
- ) -} diff --git a/app/src/router/routes.tsx b/app/src/router/routes.tsx index d28b5a6..b72e471 100644 --- a/app/src/router/routes.tsx +++ b/app/src/router/routes.tsx @@ -2,8 +2,8 @@ import { createBrowserRouter } from "react-router-dom" import { Dashboard } from "@/pages/Dashboard" import { ServiceDetailPage } from "@/pages/ServiceDetail" import { ScheduledDetailPage } from "@/pages/ScheduledDetail" -import { ComponentDetailPage } from "@/pages/ComponentDetail" -import { ComponentRedirect } from "@/pages/ComponentRedirect" +import { ProgramDetailPage } from "@/pages/ProgramDetail" +import { ProgramRedirect } from "@/pages/ProgramRedirect" import { NodeDetailPage } from "@/pages/NodeDetail" export const router = createBrowserRouter([ @@ -21,11 +21,11 @@ export const router = createBrowserRouter([ }, { path: "/programs/:name", - element: , + element: , }, { path: "/component/:name", - element: , + element: , }, { path: "/node/:hostname", diff --git a/app/src/services/api/hooks.ts b/app/src/services/api/hooks.ts index 9b553d7..83f78c8 100644 --- a/app/src/services/api/hooks.ts +++ b/app/src/services/api/hooks.ts @@ -18,7 +18,7 @@ import type { NodeDetail, } from "@/types" -// Legacy compat hook — used by ConfigEditorPage and ComponentRedirect +// Legacy compat hook — used by ConfigEditorPage and ProgramRedirect export function useComponent(name: string) { return useQuery({ queryKey: ["components", name],