+
{title}
-
+
{description}
diff --git a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/components/ScheduleListItem.tsx b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/components/ScheduleListItem.tsx
similarity index 100%
rename from autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/components/ScheduleListItem.tsx
rename to autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/components/ScheduleListItem.tsx
diff --git a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/helpers.ts b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/helpers.ts
similarity index 100%
rename from autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/helpers.ts
rename to autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/helpers.ts
diff --git a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/useAgentRunsLists.ts b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/useSidebarRunsList.ts
similarity index 71%
rename from autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/useAgentRunsLists.ts
rename to autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/useSidebarRunsList.ts
index e6bd124006..80900e8cc6 100644
--- a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/AgentRunsLists/useAgentRunsLists.ts
+++ b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/components/sidebar/SidebarRunsList/useSidebarRunsList.ts
@@ -1,12 +1,12 @@
"use client";
-import { useEffect, useMemo, useState } from "react";
+import { useEffect, useMemo } from "react";
import { useGetV1ListGraphExecutionsInfinite } from "@/app/api/__generated__/endpoints/graphs/graphs";
import { useGetV1ListExecutionSchedulesForAGraph } from "@/app/api/__generated__/endpoints/schedules/schedules";
import type { GraphExecutionJobInfo } from "@/app/api/__generated__/models/graphExecutionJobInfo";
import { okData } from "@/app/api/helpers";
-import { useSearchParams } from "next/navigation";
+import { parseAsString, useQueryStates } from "nuqs";
import {
computeRunsCount,
extractRunsFromPages,
@@ -14,9 +14,16 @@ import {
getRunsPollingInterval,
} from "./helpers";
+function parseTab(value: string | null): "runs" | "scheduled" | "templates" {
+ if (value === "runs" || value === "scheduled" || value === "templates") {
+ return value;
+ }
+ return "runs";
+}
+
type Args = {
graphId?: string;
- onSelectRun: (runId: string) => void;
+ onSelectRun: (runId: string, tab?: "runs" | "scheduled") => void;
onCountsChange?: (info: {
runsCount: number;
schedulesCount: number;
@@ -24,14 +31,17 @@ type Args = {
}) => void;
};
-export function useAgentRunsLists({
+export function useSidebarRunsList({
graphId,
onSelectRun,
onCountsChange,
}: Args) {
- const params = useSearchParams();
- const existingRunId = params.get("executionId") as string | undefined;
- const [tabValue, setTabValue] = useState<"runs" | "scheduled">("runs");
+ const [{ activeItem, activeTab: activeTabRaw }] = useQueryStates({
+ activeItem: parseAsString,
+ activeTab: parseAsString,
+ });
+
+ const tabValue = useMemo(() => parseTab(activeTabRaw), [activeTabRaw]);
const runsQuery = useGetV1ListGraphExecutionsInfinite(
graphId || "",
@@ -77,26 +87,17 @@ export function useAgentRunsLists({
}, [runsCount, schedulesCount, loading, onCountsChange]);
useEffect(() => {
- if (runs.length > 0) {
- if (existingRunId) {
- onSelectRun(existingRunId);
- return;
- }
- onSelectRun(runs[0].id);
+ if (runs.length > 0 && tabValue === "runs" && !activeItem) {
+ onSelectRun(runs[0].id, "runs");
}
- }, [runs, existingRunId]);
-
- useEffect(() => {
- if (existingRunId && existingRunId.startsWith("schedule:"))
- setTabValue("scheduled");
- else setTabValue("runs");
- }, [existingRunId]);
+ }, [runs, activeItem, tabValue, onSelectRun]);
// If there are no runs but there are schedules, and nothing is selected, auto-select the first schedule
useEffect(() => {
- if (!existingRunId && runs.length === 0 && schedules.length > 0)
- onSelectRun(`schedule:${schedules[0].id}`);
- }, [existingRunId, runs.length, schedules, onSelectRun]);
+ if (!activeItem && runs.length === 0 && schedules.length > 0) {
+ onSelectRun(schedules[0].id, "scheduled");
+ }
+ }, [activeItem, runs.length, schedules, onSelectRun]);
return {
runs,
@@ -105,7 +106,6 @@ export function useAgentRunsLists({
loading,
runsQuery,
tabValue,
- setTabValue,
runsCount,
schedulesCount,
fetchMoreRuns: runsQuery.fetchNextPage,
diff --git a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/helpers.ts b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/helpers.ts
new file mode 100644
index 0000000000..302468d5e8
--- /dev/null
+++ b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/helpers.ts
@@ -0,0 +1 @@
+export const AGENT_LIBRARY_SECTION_PADDING_X = "px-4";
diff --git a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/useNewAgentLibraryView.ts b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/useNewAgentLibraryView.ts
index 427ca81706..a97e64650c 100644
--- a/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/useNewAgentLibraryView.ts
+++ b/autogpt_platform/frontend/src/app/(platform)/library/agents/[id]/components/NewAgentLibraryView/useNewAgentLibraryView.ts
@@ -2,8 +2,15 @@ import { useGetV2GetLibraryAgent } from "@/app/api/__generated__/endpoints/libra
import { LibraryAgent } from "@/app/api/__generated__/models/libraryAgent";
import { okData } from "@/app/api/helpers";
import { useParams } from "next/navigation";
-import { parseAsString, useQueryState } from "nuqs";
-import { useCallback, useMemo, useState } from "react";
+import { parseAsString, useQueryStates } from "nuqs";
+import { useCallback, useEffect, useMemo, useState } from "react";
+
+function parseTab(value: string | null): "runs" | "scheduled" | "templates" {
+ if (value === "runs" || value === "scheduled" || value === "templates") {
+ return value;
+ }
+ return "runs";
+}
export function useNewAgentLibraryView() {
const { id } = useParams();
@@ -18,8 +25,21 @@ export function useNewAgentLibraryView() {
},
});
- const [runParam, setRunParam] = useQueryState("executionId", parseAsString);
- const selectedRun = runParam ?? undefined;
+ const [{ activeItem, activeTab: activeTabRaw }, setQueryStates] =
+ useQueryStates({
+ activeItem: parseAsString,
+ activeTab: parseAsString,
+ });
+
+ const activeTab = useMemo(() => parseTab(activeTabRaw), [activeTabRaw]);
+
+ useEffect(() => {
+ if (!activeTabRaw) {
+ setQueryStates({
+ activeTab: "runs",
+ });
+ }
+ }, [activeTabRaw, setQueryStates]);
const [sidebarCounts, setSidebarCounts] = useState({
runsCount: 0,
@@ -38,12 +58,29 @@ export function useNewAgentLibraryView() {
// Show sidebar layout while loading or when there are items
const showSidebarLayout = sidebarLoading || hasAnyItems;
- function handleSelectRun(id: string) {
- setRunParam(id, { shallow: true });
+ useEffect(() => {
+ if (response) {
+ document.title = `${response.name} - Library - AutoGPT Platform`;
+ }
+ }, [response]);
+
+ function handleSelectRun(id: string, tab?: "runs" | "scheduled") {
+ setQueryStates({
+ activeItem: id,
+ activeTab: tab ?? "runs",
+ });
}
function handleClearSelectedRun() {
- setRunParam(null, { shallow: true });
+ setQueryStates({
+ activeItem: null,
+ });
+ }
+
+ function handleSetActiveTab(tab: "runs" | "scheduled") {
+ setQueryStates({
+ activeTab: tab,
+ });
}
const handleCountsChange = useCallback(
@@ -70,8 +107,10 @@ export function useNewAgentLibraryView() {
agent: response,
hasAnyItems,
showSidebarLayout,
- selectedRun,
+ activeItem,
sidebarLoading,
+ activeTab,
+ setActiveTab: handleSetActiveTab,
handleClearSelectedRun,
handleCountsChange,
handleSelectRun,
diff --git a/autogpt_platform/frontend/src/components/atoms/Text/helpers.ts b/autogpt_platform/frontend/src/components/atoms/Text/helpers.ts
index 0b2eabe38d..cf5d9c1da0 100644
--- a/autogpt_platform/frontend/src/components/atoms/Text/helpers.ts
+++ b/autogpt_platform/frontend/src/components/atoms/Text/helpers.ts
@@ -14,33 +14,33 @@ export type As =
export const variants = {
// Headings
- h1: "font-poppins text-[2.75rem] font-[600] leading-[3.5rem] tracking-[-0.033rem] text-zinc-800",
- h2: "font-poppins text-[2rem] font-[500] leading-[2.5rem] text-zinc-800 tracking-[-0.02rem]",
- h3: "font-poppins text-[1.75rem] font-[500] leading-[2.5rem] text-zinc-800 tracking-[-0.01313rem]",
- h4: "font-poppins text-[1.375rem] font-[500] leading-[1.5rem] text-zinc-800",
- h5: "font-poppins text-[1rem] font-[500] leading-[1.5rem] text-zinc-800",
+ h1: "font-poppins text-[2.75rem] font-[600] leading-[3.5rem] tracking-[-0.033rem] text-black",
+ h2: "font-poppins text-[2rem] font-[500] leading-[2.5rem] text-black tracking-[-0.02rem]",
+ h3: "font-poppins text-[1.75rem] font-[500] leading-[2.5rem] text-black tracking-[-0.01313rem]",
+ h4: "font-poppins text-[1.375rem] font-[500] leading-[1.5rem] text-black",
+ h5: "font-poppins text-[1rem] font-[500] leading-[1.5rem] text-black",
// Body Text
- lead: "font-sans text-[1.25rem] font-[400] leading-[1.75rem] text-zinc-800",
+ lead: "font-sans text-[1.25rem] font-[400] leading-[1.75rem] text-black",
"lead-medium":
- "font-sans text-[1.25rem] font-[500] leading-[1.75rem] text-zinc-800",
+ "font-sans text-[1.25rem] font-[500] leading-[1.75rem] text-black",
"lead-semibold":
- "font-sans text-[1.25rem] font-[600] leading-[1.75rem] text-zinc-800",
- large: "font-sans text-[1rem] font-[400] leading-[1.625rem] text-zinc-800",
+ "font-sans text-[1.25rem] font-[600] leading-[1.75rem] text-black",
+ large: "font-sans text-[1rem] font-[400] leading-[1.625rem] text-black",
"large-medium":
- "font-sans text-[1rem] font-[500] leading-[1.625rem] text-zinc-800",
+ "font-sans text-[1rem] font-[500] leading-[1.625rem] text-black",
"large-semibold":
- "font-sans text-[1rem] font-[600] leading-[1.625rem] text-zinc-800",
- body: "font-sans text-[0.875rem] font-[400] leading-[1.375rem] text-zinc-800",
+ "font-sans text-[1rem] font-[600] leading-[1.625rem] text-black",
+ body: "font-sans text-[0.875rem] font-[400] leading-[1.375rem] text-black",
"body-medium":
- "font-sans text-[0.875rem] font-[500] leading-[1.375rem] text-zinc-800",
- small: "font-sans text-[0.75rem] font-[400] leading-[1.125rem] text-zinc-800",
+ "font-sans text-[0.875rem] font-[500] leading-[1.375rem] text-black",
+ small: "font-sans text-[0.75rem] font-[400] leading-[1.125rem] text-black",
"small-medium":
- "font-sans text-[0.75rem] font-[500] leading-[1.125rem] text-zinc-800",
+ "font-sans text-[0.75rem] font-[500] leading-[1.125rem] text-black",
// Label Text
label:
- "font-sans text-[0.6785rem] font-medium uppercase leading-[1.25rem] tracking-[0.06785rem] text-zinc-800",
+ "font-sans text-[0.6785rem] font-medium uppercase leading-[1.25rem] tracking-[0.06785rem] text-black",
} as const;
export type Variant = keyof typeof variants;
diff --git a/autogpt_platform/frontend/src/components/molecules/Breadcrumbs/Breadcrumbs.tsx b/autogpt_platform/frontend/src/components/molecules/Breadcrumbs/Breadcrumbs.tsx
index 89ac45282c..1fb69763fe 100644
--- a/autogpt_platform/frontend/src/components/molecules/Breadcrumbs/Breadcrumbs.tsx
+++ b/autogpt_platform/frontend/src/components/molecules/Breadcrumbs/Breadcrumbs.tsx
@@ -13,17 +13,17 @@ interface Props {
export function Breadcrumbs({ items }: Props) {
return (
-
+
{items.map((item, index) => (
{item.name}
{index < items.length - 1 && (
-
+
/
)}
diff --git a/autogpt_platform/frontend/src/components/molecules/TabsLine/TabsLine.tsx b/autogpt_platform/frontend/src/components/molecules/TabsLine/TabsLine.tsx
index 2c0f6ac4a5..0eeda6c110 100644
--- a/autogpt_platform/frontend/src/components/molecules/TabsLine/TabsLine.tsx
+++ b/autogpt_platform/frontend/src/components/molecules/TabsLine/TabsLine.tsx
@@ -52,7 +52,7 @@ const TabsLineList = React.forwardRef<
listRef.current = node;
}}
className={cn(
- "inline-flex w-full items-center justify-start border-b border-zinc-200",
+ "inline-flex w-full items-center justify-start border-b border-zinc-100",
className,
)}
{...props}
@@ -109,7 +109,7 @@ const TabsLineTrigger = React.forwardRef<
elementRef.current = node;
}}
className={cn(
- "relative inline-flex items-center justify-center whitespace-nowrap px-3 py-3 font-sans text-[1rem] font-medium leading-[1.5rem] text-zinc-700 transition-all data-[state=active]:text-purple-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
+ "relative inline-flex items-center justify-center whitespace-nowrap px-3 py-3 font-sans text-[0.875rem] font-medium leading-[1.5rem] text-zinc-700 transition-all data-[state=active]:text-purple-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
className,
)}
{...props}
diff --git a/autogpt_platform/frontend/src/components/styles/colors.ts b/autogpt_platform/frontend/src/components/styles/colors.ts
index 50129e2093..4e37b9bdd5 100644
--- a/autogpt_platform/frontend/src/components/styles/colors.ts
+++ b/autogpt_platform/frontend/src/components/styles/colors.ts
@@ -19,7 +19,7 @@ export const colors = {
400: "#ADADB3",
500: "#83838C",
600: "#68686F",
- 700: "#8E98A8",
+ 700: "#505057",
800: "#3E3E43",
900: "#2C2C30",
},