refactor: Remove dedicated /tools endpoints, use /programs?behavior=tool instead

Eliminates inconsistency where tools had their own filtered view but daemons and frontends didn't.

Changes:
- API: Removed tools router and ToolSummary/ToolDetail models. Added optional behavior query parameter to GET /programs for filtering by program type (tool, daemon, frontend).
- Frontend: Updated hooks to pass behavior param to usePrograms instead of separate useTools. Updated components to use ProgramSummary type. Removed useToolDetail hook.
- Docs: Updated API documentation to reflect program behavior filtering.
This commit is contained in:
2026-04-27 21:06:57 -07:00
parent 36d2d6073c
commit 2069e30353
10 changed files with 46 additions and 168 deletions

View File

@@ -16,8 +16,6 @@ import type {
MeshStatus,
NodeSummary,
NodeDetail,
ToolSummary,
ToolDetail,
} from "@/types"
// Legacy compat hook — used by ConfigEditorPage and ComponentRedirect
@@ -59,10 +57,11 @@ export function useJob(name: string) {
})
}
export function usePrograms() {
export function usePrograms(behavior?: string) {
const params = behavior ? `?behavior=${behavior}` : ""
return useQuery({
queryKey: ["programs"],
queryFn: () => apiClient.get<ProgramSummary[]>("/programs"),
queryKey: ["programs", behavior ?? "all"],
queryFn: () => apiClient.get<ProgramSummary[]>(`/programs${params}`),
})
}
@@ -187,21 +186,6 @@ export function useMeshStatus() {
})
}
export function useTools() {
return useQuery({
queryKey: ["tools"],
queryFn: () => apiClient.get<ToolSummary[]>("/tools"),
})
}
export function useToolDetail(name: string) {
return useQuery({
queryKey: ["tools", name],
queryFn: () => apiClient.get<ToolDetail>(`/tools/${name}`),
enabled: !!name,
})
}
export function useEventStream() {
const qc = useQueryClient()