├── .gitattributes ├── .gitignore ├── LICENSE.md ├── README.md ├── components.json ├── docs ├── agent-chat.png ├── dashboard-overview.png └── n8n-screen.png ├── eslint.config.mjs ├── next.config.ts ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs ├── public ├── file.svg ├── globe.svg ├── next.svg ├── vercel.svg └── window.svg ├── src ├── app │ ├── api │ │ ├── anthropic │ │ │ └── route.ts │ │ └── n8n │ │ │ ├── [...path] │ │ │ └── route.ts │ │ │ ├── executions │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── workflows │ │ │ └── [id] │ │ │ ├── activate │ │ │ └── route.ts │ │ │ ├── deactivate │ │ │ └── route.ts │ │ │ └── route.ts │ ├── dashboard │ │ ├── _components │ │ │ ├── agent-chat.tsx │ │ │ └── require-api-config.tsx │ │ ├── chat │ │ │ ├── _components │ │ │ │ └── agent-chat.tsx │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── page.tsx │ │ ├── settings │ │ │ └── page.tsx │ │ └── workflows │ │ │ ├── [id] │ │ │ ├── _components │ │ │ │ ├── execution-averages.tsx │ │ │ │ ├── execution-waterfall.tsx │ │ │ │ ├── workflow-chat.tsx │ │ │ │ └── workflow-timeline.tsx │ │ │ └── page.tsx │ │ │ ├── _components │ │ │ └── workflow-stats.tsx │ │ │ └── page.tsx │ ├── favicon.ico │ ├── globals.css │ ├── layout.tsx │ └── page.tsx ├── components │ ├── app-sidebar.tsx │ ├── nav-main.tsx │ ├── nav-projects.tsx │ ├── nav-user.tsx │ ├── team-switcher.tsx │ └── ui │ │ ├── avatar.tsx │ │ ├── breadcrumb.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── collapsible.tsx │ │ ├── dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── separator.tsx │ │ ├── sheet.tsx │ │ ├── sidebar.tsx │ │ ├── skeleton.tsx │ │ ├── table.tsx │ │ ├── tabs.tsx │ │ └── tooltip.tsx ├── hooks │ └── use-mobile.tsx └── lib │ ├── api │ ├── n8n-provider.tsx │ └── n8n.ts │ └── utils.ts ├── tailwind.config.ts └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.mp4 filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2025 Giga Guild LLC 2 | 3 | Portions of this software are licensed as follows: 4 | 5 | - All third party components incorporated into the software is licensed under the original license provided by the owner of the applicable component. 6 | - Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below. 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Agent Ops Dashboard 2 | 3 | A modern dashboard for managing and monitoring your n8n agents. "Cursor for agents" 4 | 5 |
300 | Please add your Anthropic API key in the settings page to enable workflow chat assistance. 301 |
302 |312 | Get answers about your current agents or build a new one! 313 |
314 |
362 | {codeContent || lang}
363 |
364 | 28 | Redirecting to settings... 29 |
30 |{error}
125 |177 | ID: {workflow.id} 178 |
179 |{error}
155 |ID: {workflow?.id}
170 |{new Date(workflow?.createdAt || "").toLocaleString()}
203 |{new Date(workflow?.updatedAt || "").toLocaleString()}
207 |Execution {execution.id}
259 |260 | Started: {new Date(execution.startedAt).toLocaleString()} 261 |
262 |{error}
76 |157 | ID: {workflow.id} 158 |
159 |163 | {body} 164 |
165 | ) 166 | }) 167 | FormMessage.displayName = "FormMessage" 168 | 169 | export { 170 | useFormField, 171 | Form, 172 | FormItem, 173 | FormLabel, 174 | FormControl, 175 | FormDescription, 176 | FormMessage, 177 | FormField, 178 | } 179 | -------------------------------------------------------------------------------- /src/components/ui/input.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Input = React.forwardRef