├── .codespellignore ├── src ├── app │ ├── favicon.ico │ ├── page.tsx │ ├── layout.tsx │ └── globals.css ├── lib │ ├── utils.ts │ ├── client.ts │ ├── cookies.ts │ └── convert_messages.ts ├── components │ ├── ui │ │ ├── header.tsx │ │ ├── skeleton.tsx │ │ ├── collapsible.tsx │ │ ├── pill-button.tsx │ │ ├── label.tsx │ │ ├── textarea.tsx │ │ ├── input.tsx │ │ ├── separator.tsx │ │ ├── progress.tsx │ │ ├── inline-context-tooltip.tsx │ │ ├── toaster.tsx │ │ ├── assistant-ui │ │ │ ├── syntax-highlighter.tsx │ │ │ ├── tooltip-icon-button.tsx │ │ │ └── markdown-text.tsx │ │ ├── checkbox.tsx │ │ ├── badge.tsx │ │ ├── hover-card.tsx │ │ ├── tooltip.tsx │ │ ├── popover.tsx │ │ ├── avatar.tsx │ │ ├── alert.tsx │ │ ├── password-input.tsx │ │ ├── slider.tsx │ │ ├── button.tsx │ │ ├── table.tsx │ │ ├── markdown-text.tsx │ │ ├── dialog.tsx │ │ ├── sheet.tsx │ │ ├── toast.tsx │ │ ├── select.tsx │ │ └── dropdown-menu.tsx │ ├── agent-inbox │ │ ├── hooks │ │ │ ├── use-local-storage.tsx │ │ │ └── use-query-params.tsx │ │ ├── constants.ts │ │ ├── index.tsx │ │ ├── components │ │ │ ├── tool-call-table.tsx │ │ │ ├── statuses.tsx │ │ │ ├── inbox-item.tsx │ │ │ ├── interrupted-inbox-item.tsx │ │ │ ├── thread-id.tsx │ │ │ ├── inbox-buttons.tsx │ │ │ ├── generic-inbox-item.tsx │ │ │ ├── breadcrumb.tsx │ │ │ ├── pagination.tsx │ │ │ ├── settings-popover.tsx │ │ │ ├── thread-actions-view.tsx │ │ │ ├── add-agent-inbox-dialog.tsx │ │ │ ├── agent-inbox-logo.tsx │ │ │ └── state-view.tsx │ │ ├── types.ts │ │ ├── contexts │ │ │ └── utils.ts │ │ ├── inbox-view.tsx │ │ ├── thread-view.tsx │ │ └── utils.ts │ ├── icons │ │ └── GraphIcon.svg │ └── app-sidebar │ │ └── index.tsx └── hooks │ ├── use-mobile.tsx │ └── use-toast.ts ├── public └── agent_inbox_diagram.png ├── next.config.mjs ├── postcss.config.mjs ├── components.json ├── .prettierrc ├── .gitignore ├── .eslintrc.json ├── tsconfig.json ├── LICENSE ├── .github └── workflows │ └── ci.yml ├── package.json ├── tailwind.config.ts └── README.md /.codespellignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/agent-inbox/main/src/app/favicon.ico -------------------------------------------------------------------------------- /public/agent_inbox_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuilenren/agent-inbox/main/public/agent_inbox_diagram.png -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx"; 2 | import { twMerge } from "tailwind-merge"; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /src/components/ui/header.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils"; 2 | 3 | export function TighterText({ 4 | className, 5 | children, 6 | }: { 7 | className?: string; 8 | children: React.ReactNode; 9 | }) { 10 | return

{children}

; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { AgentInbox } from "@/components/agent-inbox"; 4 | import React from "react"; 5 | 6 | export default function DemoPage(): React.ReactNode { 7 | return ( 8 |
9 | 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils"; 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ); 13 | } 14 | 15 | export { Skeleton }; 16 | -------------------------------------------------------------------------------- /src/lib/client.ts: -------------------------------------------------------------------------------- 1 | import { Client } from "@langchain/langgraph-sdk"; 2 | 3 | export const createClient = ({ 4 | deploymentUrl, 5 | langchainApiKey, 6 | }: { 7 | deploymentUrl: string; 8 | langchainApiKey: string; 9 | }) => { 10 | return new Client({ 11 | apiUrl: deploymentUrl, 12 | defaultHeaders: { 13 | "x-api-key": langchainApiKey, 14 | }, 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"; 4 | 5 | const Collapsible = CollapsiblePrimitive.Root; 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent; 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent }; 12 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | } 20 | } -------------------------------------------------------------------------------- /src/components/ui/pill-button.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Button, ButtonProps } from "./button"; 3 | import { cn } from "@/lib/utils"; 4 | 5 | const PillButton = React.forwardRef( 6 | ({ className, ...props }, ref) => { 7 | return ( 8 |