+
+
+
{account.toolkitName}
+
{account.status.charAt(0) + account.status.slice(1).toLowerCase()}
+
+ {active && agents.length > 0 && (
+
+ {agents.map((agent) => {
+ const granted = grantedAgentIds.has(agent.id);
+ return (
+
+ );
+ })}
+
+ )}
+
+ );
+}
diff --git a/AgentCompany-New/src/renderer/src/pages/connectors/ToolkitCatalog.tsx b/AgentCompany-New/src/renderer/src/pages/connectors/ToolkitCatalog.tsx
new file mode 100644
index 00000000..7e9dcc46
--- /dev/null
+++ b/AgentCompany-New/src/renderer/src/pages/connectors/ToolkitCatalog.tsx
@@ -0,0 +1,132 @@
+import { useMemo, useState } from "react";
+import { Button, Icon, Pill } from "../../shared/ui";
+import type { ComposioToolkitSummaryDto } from "../../../../shared/commands";
+
+/** Deterministic tile color for a toolkit's letter glyph. */
+const TILE_COLORS = ["#5e6ad2", "#3b82a0", "#7c5cb0", "#3f8f5f", "#b0684f", "#a05c86", "#6f7d3d", "#4f6fb0"];
+
+function tileColor(slug: string): string {
+ let hash = 0;
+ for (let i = 0; i < slug.length; i++) hash = (hash * 31 + slug.charCodeAt(i)) | 0;
+ return TILE_COLORS[Math.abs(hash) % TILE_COLORS.length];
+}
+
+export function ToolkitTile({ name, slug, size = 34 }: { name: string; slug: string; size?: number }) {
+ return (
+