nexus-agent-platform 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nexus_agent_platform-0.1.0/.gitignore +57 -0
- nexus_agent_platform-0.1.0/CLAUDE.md +99 -0
- nexus_agent_platform-0.1.0/PKG-INFO +240 -0
- nexus_agent_platform-0.1.0/README.md +210 -0
- nexus_agent_platform-0.1.0/backend/.env.example +6 -0
- nexus_agent_platform-0.1.0/backend/.gitignore +11 -0
- nexus_agent_platform-0.1.0/backend/.python-version +1 -0
- nexus_agent_platform-0.1.0/backend/README.md +195 -0
- nexus_agent_platform-0.1.0/backend/main.py +6 -0
- nexus_agent_platform-0.1.0/backend/mcp.json +18 -0
- nexus_agent_platform-0.1.0/backend/test_litellm.py +45 -0
- nexus_agent_platform-0.1.0/backend/uv.lock +1898 -0
- nexus_agent_platform-0.1.0/frontend/.env.example +2 -0
- nexus_agent_platform-0.1.0/frontend/.env.local +1 -0
- nexus_agent_platform-0.1.0/frontend/.gitignore +42 -0
- nexus_agent_platform-0.1.0/frontend/README.md +99 -0
- nexus_agent_platform-0.1.0/frontend/components.json +23 -0
- nexus_agent_platform-0.1.0/frontend/eslint.config.mjs +18 -0
- nexus_agent_platform-0.1.0/frontend/next.config.ts +7 -0
- nexus_agent_platform-0.1.0/frontend/out/404.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/__next.__PAGE__.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/__next._full.txt +21 -0
- nexus_agent_platform-0.1.0/frontend/out/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/1e3303314fb7a3a9.js +11 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/1f1272ea173c9b47.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2377816aad8a51c9.js +2 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2473c16c0c2f6b5f.css +2 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2c5623c683185768.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2d06d1929052b95b.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/33074d3ff5d0cd2d.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/46b66de0793baf3f.js +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/49781d4788479f87.js +4 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/5035ef9fbc3b5b2d.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/53ff0c6049c3e288.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/643a1a85debc58f2.css +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/84a324ae38af6fef.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8782022a9c17db71.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8b72cfc40036c827.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8f043076e58b008e.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/9f70f5737e48a741.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/ae1d913c69f58953.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/b679d16705d962cd.js +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/bc01f772952ff9aa.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c17cfb664194858c.js +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c4d90098b4abc498.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c8424d018fcc7056.js +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/ca429150fb6430c9.js +8 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/turbopack-b582c8a2e2ca32e3.js +4 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/media/favicon.0b3bf435.ico +0 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_buildManifest.js +11 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_clientMiddlewareManifest.json +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_ssgManifest.js +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._full.txt +18 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._not-found.__PAGE__.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._not-found.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._tree.txt +3 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/_not-found.txt +18 -0
- nexus_agent_platform-0.1.0/frontend/out/drb.png +0 -0
- nexus_agent_platform-0.1.0/frontend/out/favicon.ico +0 -0
- nexus_agent_platform-0.1.0/frontend/out/file.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/out/globe.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/out/index.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/index.txt +21 -0
- nexus_agent_platform-0.1.0/frontend/out/nano-banana.png +0 -0
- nexus_agent_platform-0.1.0/frontend/out/next.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next.pages.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/__next.pages.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.viewer.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.viewer.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/pages/viewer.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/pages.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/pages.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/rubber-track.png +0 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next.settings.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/settings/__next.settings.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/settings.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/settings.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next.skills.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/skills/__next.skills.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/skills.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/skills.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next.tools.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/frontend/out/tools/__next.tools.txt +4 -0
- nexus_agent_platform-0.1.0/frontend/out/tools.html +1 -0
- nexus_agent_platform-0.1.0/frontend/out/tools.txt +24 -0
- nexus_agent_platform-0.1.0/frontend/out/vercel.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/out/window.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/package.json +39 -0
- nexus_agent_platform-0.1.0/frontend/pnpm-lock.yaml +8599 -0
- nexus_agent_platform-0.1.0/frontend/pnpm-workspace.yaml +3 -0
- nexus_agent_platform-0.1.0/frontend/postcss.config.mjs +7 -0
- nexus_agent_platform-0.1.0/frontend/public/drb.png +0 -0
- nexus_agent_platform-0.1.0/frontend/public/file.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/public/globe.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/public/nano-banana.png +0 -0
- nexus_agent_platform-0.1.0/frontend/public/next.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/public/rubber-track.png +0 -0
- nexus_agent_platform-0.1.0/frontend/public/vercel.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/public/window.svg +1 -0
- nexus_agent_platform-0.1.0/frontend/src/app/favicon.ico +0 -0
- nexus_agent_platform-0.1.0/frontend/src/app/globals.css +197 -0
- nexus_agent_platform-0.1.0/frontend/src/app/layout.tsx +45 -0
- nexus_agent_platform-0.1.0/frontend/src/app/page.tsx +5 -0
- nexus_agent_platform-0.1.0/frontend/src/app/pages/page.tsx +216 -0
- nexus_agent_platform-0.1.0/frontend/src/app/pages/viewer/page.tsx +167 -0
- nexus_agent_platform-0.1.0/frontend/src/app/settings/page.tsx +839 -0
- nexus_agent_platform-0.1.0/frontend/src/app/skills/page.tsx +147 -0
- nexus_agent_platform-0.1.0/frontend/src/app/tools/page.tsx +178 -0
- nexus_agent_platform-0.1.0/frontend/src/components/chat/ChatInterface.tsx +561 -0
- nexus_agent_platform-0.1.0/frontend/src/components/chat/FilePreviewChips.tsx +40 -0
- nexus_agent_platform-0.1.0/frontend/src/components/chat/MCPToolsPanel.tsx +324 -0
- nexus_agent_platform-0.1.0/frontend/src/components/layout/Sidebar.tsx +91 -0
- nexus_agent_platform-0.1.0/frontend/src/components/mcp/AddServerDialog.tsx +316 -0
- nexus_agent_platform-0.1.0/frontend/src/components/mcp/EditServerDialog.tsx +212 -0
- nexus_agent_platform-0.1.0/frontend/src/components/mcp/MCPServerCard.tsx +243 -0
- nexus_agent_platform-0.1.0/frontend/src/components/mcp/MCPServerRow.tsx +174 -0
- nexus_agent_platform-0.1.0/frontend/src/components/pages/AddPageDialog.tsx +307 -0
- nexus_agent_platform-0.1.0/frontend/src/components/pages/PageCard.tsx +129 -0
- nexus_agent_platform-0.1.0/frontend/src/components/pages/PageRow.tsx +206 -0
- nexus_agent_platform-0.1.0/frontend/src/components/providers/BackgroundBlobs.tsx +29 -0
- nexus_agent_platform-0.1.0/frontend/src/components/providers/ThemeProvider.tsx +23 -0
- nexus_agent_platform-0.1.0/frontend/src/components/skills/AddSkillDialog.tsx +408 -0
- nexus_agent_platform-0.1.0/frontend/src/components/skills/SkillCard.tsx +205 -0
- nexus_agent_platform-0.1.0/frontend/src/components/skills/SkillRow.tsx +183 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/badge.tsx +48 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/button.tsx +64 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/card.tsx +92 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/dialog.tsx +158 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/form.tsx +167 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/hover-card.tsx +44 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/input.tsx +21 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/label.tsx +24 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/scroll-area.tsx +58 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/select.tsx +190 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/sheet.tsx +143 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/switch.tsx +35 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/tabs.tsx +91 -0
- nexus_agent_platform-0.1.0/frontend/src/components/ui/textarea.tsx +18 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/api/mcp.ts +125 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/api/pages.ts +130 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/api/settings.ts +41 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/api/skills.ts +107 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/config.ts +2 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/file-utils.ts +35 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/stores/profile.ts +25 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/stores/theme.ts +151 -0
- nexus_agent_platform-0.1.0/frontend/src/lib/utils.ts +6 -0
- nexus_agent_platform-0.1.0/frontend/tsconfig.json +34 -0
- nexus_agent_platform-0.1.0/nexus_agent/__init__.py +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/__main__.py +3 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/__init__.py +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/__init__.py +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/chat.py +17 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/mcp.py +199 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/pages.py +140 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/settings.py +30 -0
- nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/skills.py +96 -0
- nexus_agent_platform-0.1.0/nexus_agent/cli.py +79 -0
- nexus_agent_platform-0.1.0/nexus_agent/config.py +58 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/__init__.py +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/agent.py +96 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/llm.py +62 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/mcp_manager.py +308 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/page_manager.py +309 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/settings_manager.py +63 -0
- nexus_agent_platform-0.1.0/nexus_agent/core/skill_manager.py +440 -0
- nexus_agent_platform-0.1.0/nexus_agent/models/__init__.py +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/models/mcp.py +37 -0
- nexus_agent_platform-0.1.0/nexus_agent/models/page.py +38 -0
- nexus_agent_platform-0.1.0/nexus_agent/models/settings.py +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/models/skill.py +31 -0
- nexus_agent_platform-0.1.0/nexus_agent/server.py +98 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/404.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/__next.__PAGE__.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/__next._full.txt +21 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/1e3303314fb7a3a9.js +11 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/1f1272ea173c9b47.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2377816aad8a51c9.js +2 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2473c16c0c2f6b5f.css +2 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2c5623c683185768.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2d06d1929052b95b.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/33074d3ff5d0cd2d.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/46b66de0793baf3f.js +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/49781d4788479f87.js +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/5035ef9fbc3b5b2d.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/53ff0c6049c3e288.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/643a1a85debc58f2.css +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/84a324ae38af6fef.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8782022a9c17db71.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8b72cfc40036c827.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8f043076e58b008e.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/9f70f5737e48a741.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/ae1d913c69f58953.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/b679d16705d962cd.js +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/bc01f772952ff9aa.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c17cfb664194858c.js +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c4d90098b4abc498.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c8424d018fcc7056.js +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/ca429150fb6430c9.js +8 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/turbopack-b582c8a2e2ca32e3.js +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/favicon.0b3bf435.ico +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_buildManifest.js +11 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_clientMiddlewareManifest.json +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_ssgManifest.js +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._full.txt +18 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._not-found.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._tree.txt +3 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/_not-found.txt +18 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/drb.png +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/favicon.ico +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/file.svg +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/globe.svg +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/index.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/index.txt +21 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/nano-banana.png +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/next.svg +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next.pages.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next.pages.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.viewer.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.viewer.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/pages.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/rubber-track.png +0 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next.settings.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next.settings.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/settings.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next.skills.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next.skills.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/skills.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._full.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._head.txt +6 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._index.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._tree.txt +5 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next.tools.__PAGE__.txt +9 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next.tools.txt +4 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools.html +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/tools.txt +24 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/vercel.svg +1 -0
- nexus_agent_platform-0.1.0/nexus_agent/static/window.svg +1 -0
- nexus_agent_platform-0.1.0/pyproject.toml +49 -0
- nexus_agent_platform-0.1.0/scripts/build.sh +21 -0
- nexus_agent_platform-0.1.0/uv.lock +1902 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules/
|
|
3
|
+
.pnp
|
|
4
|
+
.pnp.*
|
|
5
|
+
.yarn/*
|
|
6
|
+
!.yarn/patches
|
|
7
|
+
!.yarn/plugins
|
|
8
|
+
!.yarn/releases
|
|
9
|
+
!.yarn/versions
|
|
10
|
+
|
|
11
|
+
# Python
|
|
12
|
+
__pycache__/
|
|
13
|
+
*.py[oc]
|
|
14
|
+
*.egg-info
|
|
15
|
+
.venv/
|
|
16
|
+
|
|
17
|
+
# Build
|
|
18
|
+
.next/
|
|
19
|
+
/out/
|
|
20
|
+
build/
|
|
21
|
+
dist/
|
|
22
|
+
wheels/
|
|
23
|
+
|
|
24
|
+
# Environment
|
|
25
|
+
.env
|
|
26
|
+
|
|
27
|
+
# IDE / OS
|
|
28
|
+
.DS_Store
|
|
29
|
+
*.pem
|
|
30
|
+
.vercel
|
|
31
|
+
|
|
32
|
+
# Debug
|
|
33
|
+
npm-debug.log*
|
|
34
|
+
yarn-debug.log*
|
|
35
|
+
yarn-error.log*
|
|
36
|
+
.pnpm-debug.log*
|
|
37
|
+
|
|
38
|
+
# TypeScript
|
|
39
|
+
*.tsbuildinfo
|
|
40
|
+
next-env.d.ts
|
|
41
|
+
|
|
42
|
+
# Testing
|
|
43
|
+
/coverage
|
|
44
|
+
|
|
45
|
+
# Built frontend static files (generated by scripts/build.sh)
|
|
46
|
+
nexus_agent/static/
|
|
47
|
+
|
|
48
|
+
# Runtime data (auto-generated)
|
|
49
|
+
backend/pages.json
|
|
50
|
+
backend/pages/
|
|
51
|
+
backend/settings.json
|
|
52
|
+
backend/skills.json
|
|
53
|
+
backend/skills/
|
|
54
|
+
temp/
|
|
55
|
+
|
|
56
|
+
# Claude Code
|
|
57
|
+
.claude/
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
**Nexus Agent** — a full-stack AI agent platform with a chat interface and dynamic tool registration system. Packaged as a single CLI tool (`nexus-agent`).
|
|
8
|
+
|
|
9
|
+
- **Frontend**: Next.js 16 (App Router) + React 19 + TypeScript, using pnpm
|
|
10
|
+
- **Backend**: Python 3.13 + FastAPI, using uv
|
|
11
|
+
- **LLM**: Google Gemini 2.0 Flash via LiteLLM abstraction layer
|
|
12
|
+
- **Package**: `nexus-agent` (CLI via click, installable via `pipx` or `uv tool`)
|
|
13
|
+
|
|
14
|
+
## Development Commands
|
|
15
|
+
|
|
16
|
+
### Quick Start
|
|
17
|
+
```bash
|
|
18
|
+
uv run nexus-agent init # ~/.nexus-agent/ 초기 설정 생성
|
|
19
|
+
uv run nexus-agent start --dev # 개발 모드 (CORS 허용, 리로드)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Frontend (`frontend/`)
|
|
23
|
+
```bash
|
|
24
|
+
cd frontend && pnpm dev # Dev server on :3000
|
|
25
|
+
cd frontend && pnpm build # Production build (static export → out/)
|
|
26
|
+
cd frontend && pnpm lint # ESLint
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Backend (직접 실행)
|
|
30
|
+
```bash
|
|
31
|
+
uv run uvicorn nexus_agent.server:app --reload --host 0.0.0.0 --port 8000
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Full Build (프론트엔드 포함 wheel 빌드)
|
|
35
|
+
```bash
|
|
36
|
+
./scripts/build.sh # frontend build → nexus_agent/static/ → uv build
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Environment
|
|
40
|
+
설정 파일은 `~/.nexus-agent/`에 저장됨:
|
|
41
|
+
- `.env` — `GOOGLE_API_KEY` 등
|
|
42
|
+
- `settings.json` — LLM 설정
|
|
43
|
+
- `mcp.json` — MCP 서버 설정
|
|
44
|
+
- `skills.json`, `pages.json` — 런타임 데이터
|
|
45
|
+
|
|
46
|
+
## Architecture
|
|
47
|
+
|
|
48
|
+
### Request Flow
|
|
49
|
+
```
|
|
50
|
+
User → ChatInterface (React) → POST /api/chat/ → AgentOrchestrator.run()
|
|
51
|
+
→ LLMClient (LiteLLM acompletion) → Gemini API
|
|
52
|
+
→ If tool_calls in response:
|
|
53
|
+
→ MCP tool call or Skill tool call
|
|
54
|
+
→ Tool result appended to messages
|
|
55
|
+
→ Second LLM call with tool results
|
|
56
|
+
→ Final response → ChatInterface
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Package Structure
|
|
60
|
+
- `nexus_agent/` — Python 패키지 (최상위)
|
|
61
|
+
- `cli.py` — click CLI 엔트리포인트 (`nexus-agent` 명령)
|
|
62
|
+
- `server.py` — FastAPI 앱, 정적 파일 서빙, CORS 설정
|
|
63
|
+
- `config.py` — `~/.nexus-agent/` 데이터 디렉토리 관리
|
|
64
|
+
- `core/` — agent, llm, mcp_manager, skill_manager, page_manager, settings_manager
|
|
65
|
+
- `api/endpoints/` — chat, mcp, skills, pages, settings
|
|
66
|
+
- `models/` — mcp, skill, page, settings
|
|
67
|
+
- `static/` — 빌드된 프론트엔드 (wheel에 포함, git에서 제외)
|
|
68
|
+
|
|
69
|
+
### Frontend Structure
|
|
70
|
+
- `frontend/src/app/page.tsx` — Home page rendering ChatInterface
|
|
71
|
+
- `frontend/src/app/pages/page.tsx` — Pages Dashboard
|
|
72
|
+
- `frontend/src/app/pages/viewer/page.tsx` — Page viewer (`?id=xxx` query param)
|
|
73
|
+
- `frontend/src/app/tools/page.tsx` — MCP Server management
|
|
74
|
+
- `frontend/src/app/skills/page.tsx` — Skills management
|
|
75
|
+
- `frontend/src/app/settings/page.tsx` — LLM Settings
|
|
76
|
+
- `frontend/src/lib/config.ts` — API_BASE_URL (빈 문자열 = same origin)
|
|
77
|
+
|
|
78
|
+
### Key Patterns
|
|
79
|
+
- **Path alias**: `@/*` maps to `./src/*` in tsconfig
|
|
80
|
+
- **shadcn/ui config**: `frontend/components.json` — new-york style, Lucide icons, CSS variables
|
|
81
|
+
- **Static export**: `next.config.ts`에 `output: "export"` — 빌드 시 정적 HTML 생성
|
|
82
|
+
- **Data directory**: 모든 런타임 데이터는 `~/.nexus-agent/`에 저장
|
|
83
|
+
- **Styling**: oklch color space, dark theme with glassmorphism (backdrop-blur, low-opacity borders), amber/orange primary color
|
|
84
|
+
|
|
85
|
+
## Git Commit Convention
|
|
86
|
+
|
|
87
|
+
- **커밋 시 반드시 `/commit` (git-commit-formatter 스킬)을 사용할 것**
|
|
88
|
+
- Follow **Conventional Commits**: `<type>(scope): <description>`
|
|
89
|
+
- Types: feat, fix, docs, style, refactor, perf, test, chore
|
|
90
|
+
- Commit messages must be written in **Korean (한글)**
|
|
91
|
+
- Do NOT include `Co-Authored-By` in commit messages
|
|
92
|
+
|
|
93
|
+
## Ports
|
|
94
|
+
|
|
95
|
+
| Service | URL |
|
|
96
|
+
|---------|-----|
|
|
97
|
+
| Frontend (dev) | http://localhost:3000 |
|
|
98
|
+
| Backend API / UI (production) | http://localhost:8000 |
|
|
99
|
+
| Swagger Docs | http://localhost:8000/docs |
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nexus-agent-platform
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI agent platform with MCP tool integration
|
|
5
|
+
Project-URL: Homepage, https://github.com/EJCHO-salary/track_platform
|
|
6
|
+
Project-URL: Repository, https://github.com/EJCHO-salary/track_platform
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Keywords: agent,ai,chatbot,gemini,llm,mcp
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Environment :: Web Environment
|
|
12
|
+
Classifier: Framework :: FastAPI
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
17
|
+
Requires-Python: >=3.13
|
|
18
|
+
Requires-Dist: click>=8.0
|
|
19
|
+
Requires-Dist: fastapi>=0.128.8
|
|
20
|
+
Requires-Dist: google-generativeai>=0.8.6
|
|
21
|
+
Requires-Dist: httpx>=0.28.1
|
|
22
|
+
Requires-Dist: litellm>=1.81.10
|
|
23
|
+
Requires-Dist: mcp>=1.0.0
|
|
24
|
+
Requires-Dist: pydantic>=2.12.5
|
|
25
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
26
|
+
Requires-Dist: pyyaml>=6.0
|
|
27
|
+
Requires-Dist: rich>=13.0
|
|
28
|
+
Requires-Dist: uvicorn>=0.40.0
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
|
|
31
|
+
# Nexus Agent Platform
|
|
32
|
+
|
|
33
|
+
MCP(Model Context Protocol) + Agent Skills 기반 범용 AI Agent 플랫폼.
|
|
34
|
+
MCP 서버와 Agent Skills를 등록·관리하고, Custom Pages로 HTML 도구와 URL 북마크를 폴더 트리로 정리하며,
|
|
35
|
+
LLM이 모든 도구와 스킬을 활용하여 사용자 요청에 응답합니다.
|
|
36
|
+
|
|
37
|
+
## 아키텍처
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
User → ChatInterface (React) → POST /api/chat/ → AgentOrchestrator
|
|
41
|
+
→ system prompt에 <available_skills> XML 주입
|
|
42
|
+
→ MCP tools + skill tools 병합
|
|
43
|
+
→ LLMClient (LiteLLM) → Gemini API
|
|
44
|
+
→ tool_calls 라우팅:
|
|
45
|
+
→ skill tool (read_skill, run_skill_script, read_skill_reference)
|
|
46
|
+
→ SkillManager → backend/skills/*/SKILL.md
|
|
47
|
+
→ namespaced tool (server__tool)
|
|
48
|
+
→ MCPClientManager → MCP Server (stdio/sse/streamable-http)
|
|
49
|
+
→ Tool 결과를 메시지에 추가 → 2차 LLM 호출
|
|
50
|
+
→ 최종 응답 → ChatInterface
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 주요 기능
|
|
54
|
+
|
|
55
|
+
### Chat
|
|
56
|
+
- Gemini 기반 AI 채팅 (LiteLLM 추상화)
|
|
57
|
+
- 이미지 첨부 지원 (base64 인코딩)
|
|
58
|
+
- MCP 도구 + Agent Skills 자동 라우팅
|
|
59
|
+
- 커스텀 배경 이미지 (배율/위치/투명도 조정, 드래그 위치 변경)
|
|
60
|
+
|
|
61
|
+
### MCP Servers (`/tools`)
|
|
62
|
+
- MCP 서버 등록/연결/재시작/삭제
|
|
63
|
+
- stdio, SSE, streamable-http 전송 지원
|
|
64
|
+
- 서버별 도구 목록 자동 탐색
|
|
65
|
+
- 연결 상태 실시간 모니터링 및 토글
|
|
66
|
+
|
|
67
|
+
### Agent Skills (`/skills`)
|
|
68
|
+
- SKILL.md 기반 스킬 정의 (YAML frontmatter + Markdown 지시사항)
|
|
69
|
+
- 스킬 내 스크립트 실행 (Python, Shell, JS)
|
|
70
|
+
- 스킬 내 참조 문서 로드
|
|
71
|
+
- ZIP 업로드 및 로컬 경로 임포트 지원
|
|
72
|
+
|
|
73
|
+
### Custom Pages (`/pages`)
|
|
74
|
+
- HTML 파일 업로드 및 뷰어
|
|
75
|
+
- URL 북마크 등록 (iframe 지원 여부 자동 체크)
|
|
76
|
+
- 폴더 트리 구조로 정리 (생성/이름변경/삭제)
|
|
77
|
+
- 브레드크럼 네비게이션
|
|
78
|
+
|
|
79
|
+
### Settings (`/settings`)
|
|
80
|
+
- 테마 커스터마이징: 액센트 컬러(6종), 다크/라이트 모드, 배경 톤
|
|
81
|
+
- 채팅 배경 이미지: 프리셋 선택, 커스텀 업로드, 배율/위치/투명도 조정
|
|
82
|
+
- LLM 설정: 모델 선택, API 키, 온도, 최대 토큰, 시스템 프롬프트
|
|
83
|
+
- 사용자 프로필: 이름, 아바타
|
|
84
|
+
- 백엔드 연결 상태 확인
|
|
85
|
+
|
|
86
|
+
## 기술 스택
|
|
87
|
+
|
|
88
|
+
| 계층 | 기술 |
|
|
89
|
+
|------|------|
|
|
90
|
+
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS, shadcn/ui |
|
|
91
|
+
| Backend | Python 3.13, FastAPI, Pydantic |
|
|
92
|
+
| LLM | Google Gemini 3 Flash Preview (LiteLLM 추상화) |
|
|
93
|
+
| Tool System | MCP (Model Context Protocol) + Agent Skills |
|
|
94
|
+
| 패키지 매니저 | pnpm (Frontend), uv (Backend) |
|
|
95
|
+
|
|
96
|
+
## 프로젝트 구조
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
track_platform/
|
|
100
|
+
├── backend/
|
|
101
|
+
│ ├── app/
|
|
102
|
+
│ │ ├── api/endpoints/ # API 라우터 (chat, mcp, skills, pages, settings)
|
|
103
|
+
│ │ ├── core/ # 핵심 로직
|
|
104
|
+
│ │ │ ├── agent.py # AgentOrchestrator (도구 라우팅)
|
|
105
|
+
│ │ │ ├── llm.py # LLMClient (LiteLLM 래퍼)
|
|
106
|
+
│ │ │ ├── mcp_manager.py # MCP 서버 연결 관리
|
|
107
|
+
│ │ │ ├── skill_manager.py # Agent Skills 관리
|
|
108
|
+
│ │ │ ├── page_manager.py # Pages 폴더 트리 관리
|
|
109
|
+
│ │ │ └── settings_manager.py # LLM 설정 관리
|
|
110
|
+
│ │ └── models/ # Pydantic 데이터 모델
|
|
111
|
+
│ ├── skills/ # Agent Skills 저장 디렉토리
|
|
112
|
+
│ ├── pages/ # 업로드된 HTML 저장 디렉토리
|
|
113
|
+
│ ├── mcp.json # MCP 서버 설정 (자동 생성)
|
|
114
|
+
│ ├── skills.json # 스킬 활성화 상태 (자동 생성)
|
|
115
|
+
│ ├── pages.json # 페이지 메타데이터 (자동 생성)
|
|
116
|
+
│ ├── settings.json # LLM 설정 (자동 생성)
|
|
117
|
+
│ ├── .env # 환경 변수 (GOOGLE_API_KEY 등)
|
|
118
|
+
│ └── .env.example # 환경 변수 템플릿
|
|
119
|
+
├── frontend/
|
|
120
|
+
│ ├── src/
|
|
121
|
+
│ │ ├── app/ # 페이지 (chat, tools, skills, pages, settings)
|
|
122
|
+
│ │ ├── components/ # UI 컴포넌트
|
|
123
|
+
│ │ └── lib/
|
|
124
|
+
│ │ ├── config.ts # API_BASE_URL 중앙 설정
|
|
125
|
+
│ │ ├── api/ # API 클라이언트 (mcp, skills, pages, settings)
|
|
126
|
+
│ │ └── stores/ # 클라이언트 상태 (theme, profile)
|
|
127
|
+
│ └── package.json
|
|
128
|
+
└── CLAUDE.md
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## 빠른 시작
|
|
132
|
+
|
|
133
|
+
### 1. Backend
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
cd backend
|
|
137
|
+
cp .env.example .env # GOOGLE_API_KEY 설정
|
|
138
|
+
uv sync
|
|
139
|
+
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 2. Frontend
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
cd frontend
|
|
146
|
+
pnpm install
|
|
147
|
+
pnpm dev
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
기본적으로 `http://localhost:8000`의 백엔드에 연결됩니다. 백엔드 주소가 다르면 `frontend/.env.local`을 생성하세요:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# frontend/.env.local (필요할 때만 생성)
|
|
154
|
+
NEXT_PUBLIC_API_URL=http://192.168.0.100:8000
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> 로컬 개발(`localhost:8000`)이면 이 파일 없이 동작합니다.
|
|
158
|
+
|
|
159
|
+
### 3. MCP 서버 등록
|
|
160
|
+
|
|
161
|
+
프론트엔드 **MCP Servers** 대시보드(`/tools`)에서 등록하거나, `backend/mcp.json`에 직접 추가합니다.
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"mcpServers": {
|
|
166
|
+
"example": {
|
|
167
|
+
"transport": "stdio",
|
|
168
|
+
"command": "npx",
|
|
169
|
+
"args": ["-y", "@modelcontextprotocol/server-everything"],
|
|
170
|
+
"enabled": true
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 4. Agent Skill 등록
|
|
177
|
+
|
|
178
|
+
프론트엔드 **Agent Skills** 대시보드(`/skills`)에서 등록하거나, `backend/skills/` 디렉토리에 스킬 폴더를 생성합니다.
|
|
179
|
+
ZIP 업로드 및 로컬 경로 임포트도 지원됩니다.
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
backend/skills/
|
|
183
|
+
└── my-skill/
|
|
184
|
+
├── SKILL.md # 필수: YAML frontmatter + 지시사항
|
|
185
|
+
├── scripts/ # 선택: 실행 스크립트 (.py, .sh, .js)
|
|
186
|
+
└── references/ # 선택: 참조 문서
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**SKILL.md 예시:**
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
---
|
|
193
|
+
name: my-skill
|
|
194
|
+
description: >
|
|
195
|
+
이 스킬이 하는 일과 언제 사용해야 하는지 설명합니다.
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
# My Skill
|
|
199
|
+
|
|
200
|
+
## 사용 방법
|
|
201
|
+
|
|
202
|
+
1. 사용자가 관련 질문을 하면 이 스킬이 활성화됩니다
|
|
203
|
+
2. scripts/ 에 있는 스크립트를 실행할 수 있습니다
|
|
204
|
+
3. references/ 에 있는 문서를 참조할 수 있습니다
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### 5. Custom Pages 등록
|
|
208
|
+
|
|
209
|
+
프론트엔드 **Custom Pages** 대시보드(`/pages`)에서 관리합니다.
|
|
210
|
+
|
|
211
|
+
- **HTML 파일 업로드**: 정적 HTML 페이지 등록 및 뷰어
|
|
212
|
+
- **URL 북마크**: 외부 URL 등록 (iframe 지원 여부 자동 체크)
|
|
213
|
+
- **폴더**: 페이지들을 트리 구조로 분류
|
|
214
|
+
- **로컬 경로 임포트**: 서버 파일 시스템에서 직접 임포트
|
|
215
|
+
|
|
216
|
+
## 환경 변수
|
|
217
|
+
|
|
218
|
+
### Backend (`backend/.env`)
|
|
219
|
+
|
|
220
|
+
| 변수 | 필수 | 기본값 | 설명 |
|
|
221
|
+
|------|------|--------|------|
|
|
222
|
+
| `GOOGLE_API_KEY` | O | — | Gemini API 키 |
|
|
223
|
+
| `LITELLM_MODEL` | O | `gemini/gemini-3-flash-preview` | LLM 모델 이름 |
|
|
224
|
+
| `LITELLM_BASE_URL` | X | — | 커스텀 LLM 엔드포인트 |
|
|
225
|
+
|
|
226
|
+
### Frontend (`frontend/.env.local`)
|
|
227
|
+
|
|
228
|
+
| 변수 | 필수 | 기본값 | 설명 |
|
|
229
|
+
|------|------|--------|------|
|
|
230
|
+
| `NEXT_PUBLIC_API_URL` | X | `http://localhost:8000` | 백엔드 API 주소 |
|
|
231
|
+
|
|
232
|
+
> 프론트엔드는 `.env.local` 파일이 없으면 기본값(`http://localhost:8000`)을 사용합니다.
|
|
233
|
+
|
|
234
|
+
## 포트
|
|
235
|
+
|
|
236
|
+
| 서비스 | URL |
|
|
237
|
+
|--------|-----|
|
|
238
|
+
| Frontend | http://localhost:3000 |
|
|
239
|
+
| Backend API | http://localhost:8000 |
|
|
240
|
+
| Swagger Docs | http://localhost:8000/docs |
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Nexus Agent Platform
|
|
2
|
+
|
|
3
|
+
MCP(Model Context Protocol) + Agent Skills 기반 범용 AI Agent 플랫폼.
|
|
4
|
+
MCP 서버와 Agent Skills를 등록·관리하고, Custom Pages로 HTML 도구와 URL 북마크를 폴더 트리로 정리하며,
|
|
5
|
+
LLM이 모든 도구와 스킬을 활용하여 사용자 요청에 응답합니다.
|
|
6
|
+
|
|
7
|
+
## 아키텍처
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
User → ChatInterface (React) → POST /api/chat/ → AgentOrchestrator
|
|
11
|
+
→ system prompt에 <available_skills> XML 주입
|
|
12
|
+
→ MCP tools + skill tools 병합
|
|
13
|
+
→ LLMClient (LiteLLM) → Gemini API
|
|
14
|
+
→ tool_calls 라우팅:
|
|
15
|
+
→ skill tool (read_skill, run_skill_script, read_skill_reference)
|
|
16
|
+
→ SkillManager → backend/skills/*/SKILL.md
|
|
17
|
+
→ namespaced tool (server__tool)
|
|
18
|
+
→ MCPClientManager → MCP Server (stdio/sse/streamable-http)
|
|
19
|
+
→ Tool 결과를 메시지에 추가 → 2차 LLM 호출
|
|
20
|
+
→ 최종 응답 → ChatInterface
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 주요 기능
|
|
24
|
+
|
|
25
|
+
### Chat
|
|
26
|
+
- Gemini 기반 AI 채팅 (LiteLLM 추상화)
|
|
27
|
+
- 이미지 첨부 지원 (base64 인코딩)
|
|
28
|
+
- MCP 도구 + Agent Skills 자동 라우팅
|
|
29
|
+
- 커스텀 배경 이미지 (배율/위치/투명도 조정, 드래그 위치 변경)
|
|
30
|
+
|
|
31
|
+
### MCP Servers (`/tools`)
|
|
32
|
+
- MCP 서버 등록/연결/재시작/삭제
|
|
33
|
+
- stdio, SSE, streamable-http 전송 지원
|
|
34
|
+
- 서버별 도구 목록 자동 탐색
|
|
35
|
+
- 연결 상태 실시간 모니터링 및 토글
|
|
36
|
+
|
|
37
|
+
### Agent Skills (`/skills`)
|
|
38
|
+
- SKILL.md 기반 스킬 정의 (YAML frontmatter + Markdown 지시사항)
|
|
39
|
+
- 스킬 내 스크립트 실행 (Python, Shell, JS)
|
|
40
|
+
- 스킬 내 참조 문서 로드
|
|
41
|
+
- ZIP 업로드 및 로컬 경로 임포트 지원
|
|
42
|
+
|
|
43
|
+
### Custom Pages (`/pages`)
|
|
44
|
+
- HTML 파일 업로드 및 뷰어
|
|
45
|
+
- URL 북마크 등록 (iframe 지원 여부 자동 체크)
|
|
46
|
+
- 폴더 트리 구조로 정리 (생성/이름변경/삭제)
|
|
47
|
+
- 브레드크럼 네비게이션
|
|
48
|
+
|
|
49
|
+
### Settings (`/settings`)
|
|
50
|
+
- 테마 커스터마이징: 액센트 컬러(6종), 다크/라이트 모드, 배경 톤
|
|
51
|
+
- 채팅 배경 이미지: 프리셋 선택, 커스텀 업로드, 배율/위치/투명도 조정
|
|
52
|
+
- LLM 설정: 모델 선택, API 키, 온도, 최대 토큰, 시스템 프롬프트
|
|
53
|
+
- 사용자 프로필: 이름, 아바타
|
|
54
|
+
- 백엔드 연결 상태 확인
|
|
55
|
+
|
|
56
|
+
## 기술 스택
|
|
57
|
+
|
|
58
|
+
| 계층 | 기술 |
|
|
59
|
+
|------|------|
|
|
60
|
+
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS, shadcn/ui |
|
|
61
|
+
| Backend | Python 3.13, FastAPI, Pydantic |
|
|
62
|
+
| LLM | Google Gemini 3 Flash Preview (LiteLLM 추상화) |
|
|
63
|
+
| Tool System | MCP (Model Context Protocol) + Agent Skills |
|
|
64
|
+
| 패키지 매니저 | pnpm (Frontend), uv (Backend) |
|
|
65
|
+
|
|
66
|
+
## 프로젝트 구조
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
track_platform/
|
|
70
|
+
├── backend/
|
|
71
|
+
│ ├── app/
|
|
72
|
+
│ │ ├── api/endpoints/ # API 라우터 (chat, mcp, skills, pages, settings)
|
|
73
|
+
│ │ ├── core/ # 핵심 로직
|
|
74
|
+
│ │ │ ├── agent.py # AgentOrchestrator (도구 라우팅)
|
|
75
|
+
│ │ │ ├── llm.py # LLMClient (LiteLLM 래퍼)
|
|
76
|
+
│ │ │ ├── mcp_manager.py # MCP 서버 연결 관리
|
|
77
|
+
│ │ │ ├── skill_manager.py # Agent Skills 관리
|
|
78
|
+
│ │ │ ├── page_manager.py # Pages 폴더 트리 관리
|
|
79
|
+
│ │ │ └── settings_manager.py # LLM 설정 관리
|
|
80
|
+
│ │ └── models/ # Pydantic 데이터 모델
|
|
81
|
+
│ ├── skills/ # Agent Skills 저장 디렉토리
|
|
82
|
+
│ ├── pages/ # 업로드된 HTML 저장 디렉토리
|
|
83
|
+
│ ├── mcp.json # MCP 서버 설정 (자동 생성)
|
|
84
|
+
│ ├── skills.json # 스킬 활성화 상태 (자동 생성)
|
|
85
|
+
│ ├── pages.json # 페이지 메타데이터 (자동 생성)
|
|
86
|
+
│ ├── settings.json # LLM 설정 (자동 생성)
|
|
87
|
+
│ ├── .env # 환경 변수 (GOOGLE_API_KEY 등)
|
|
88
|
+
│ └── .env.example # 환경 변수 템플릿
|
|
89
|
+
├── frontend/
|
|
90
|
+
│ ├── src/
|
|
91
|
+
│ │ ├── app/ # 페이지 (chat, tools, skills, pages, settings)
|
|
92
|
+
│ │ ├── components/ # UI 컴포넌트
|
|
93
|
+
│ │ └── lib/
|
|
94
|
+
│ │ ├── config.ts # API_BASE_URL 중앙 설정
|
|
95
|
+
│ │ ├── api/ # API 클라이언트 (mcp, skills, pages, settings)
|
|
96
|
+
│ │ └── stores/ # 클라이언트 상태 (theme, profile)
|
|
97
|
+
│ └── package.json
|
|
98
|
+
└── CLAUDE.md
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 빠른 시작
|
|
102
|
+
|
|
103
|
+
### 1. Backend
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
cd backend
|
|
107
|
+
cp .env.example .env # GOOGLE_API_KEY 설정
|
|
108
|
+
uv sync
|
|
109
|
+
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 2. Frontend
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
cd frontend
|
|
116
|
+
pnpm install
|
|
117
|
+
pnpm dev
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
기본적으로 `http://localhost:8000`의 백엔드에 연결됩니다. 백엔드 주소가 다르면 `frontend/.env.local`을 생성하세요:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# frontend/.env.local (필요할 때만 생성)
|
|
124
|
+
NEXT_PUBLIC_API_URL=http://192.168.0.100:8000
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> 로컬 개발(`localhost:8000`)이면 이 파일 없이 동작합니다.
|
|
128
|
+
|
|
129
|
+
### 3. MCP 서버 등록
|
|
130
|
+
|
|
131
|
+
프론트엔드 **MCP Servers** 대시보드(`/tools`)에서 등록하거나, `backend/mcp.json`에 직접 추가합니다.
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"mcpServers": {
|
|
136
|
+
"example": {
|
|
137
|
+
"transport": "stdio",
|
|
138
|
+
"command": "npx",
|
|
139
|
+
"args": ["-y", "@modelcontextprotocol/server-everything"],
|
|
140
|
+
"enabled": true
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 4. Agent Skill 등록
|
|
147
|
+
|
|
148
|
+
프론트엔드 **Agent Skills** 대시보드(`/skills`)에서 등록하거나, `backend/skills/` 디렉토리에 스킬 폴더를 생성합니다.
|
|
149
|
+
ZIP 업로드 및 로컬 경로 임포트도 지원됩니다.
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
backend/skills/
|
|
153
|
+
└── my-skill/
|
|
154
|
+
├── SKILL.md # 필수: YAML frontmatter + 지시사항
|
|
155
|
+
├── scripts/ # 선택: 실행 스크립트 (.py, .sh, .js)
|
|
156
|
+
└── references/ # 선택: 참조 문서
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**SKILL.md 예시:**
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
---
|
|
163
|
+
name: my-skill
|
|
164
|
+
description: >
|
|
165
|
+
이 스킬이 하는 일과 언제 사용해야 하는지 설명합니다.
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
# My Skill
|
|
169
|
+
|
|
170
|
+
## 사용 방법
|
|
171
|
+
|
|
172
|
+
1. 사용자가 관련 질문을 하면 이 스킬이 활성화됩니다
|
|
173
|
+
2. scripts/ 에 있는 스크립트를 실행할 수 있습니다
|
|
174
|
+
3. references/ 에 있는 문서를 참조할 수 있습니다
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 5. Custom Pages 등록
|
|
178
|
+
|
|
179
|
+
프론트엔드 **Custom Pages** 대시보드(`/pages`)에서 관리합니다.
|
|
180
|
+
|
|
181
|
+
- **HTML 파일 업로드**: 정적 HTML 페이지 등록 및 뷰어
|
|
182
|
+
- **URL 북마크**: 외부 URL 등록 (iframe 지원 여부 자동 체크)
|
|
183
|
+
- **폴더**: 페이지들을 트리 구조로 분류
|
|
184
|
+
- **로컬 경로 임포트**: 서버 파일 시스템에서 직접 임포트
|
|
185
|
+
|
|
186
|
+
## 환경 변수
|
|
187
|
+
|
|
188
|
+
### Backend (`backend/.env`)
|
|
189
|
+
|
|
190
|
+
| 변수 | 필수 | 기본값 | 설명 |
|
|
191
|
+
|------|------|--------|------|
|
|
192
|
+
| `GOOGLE_API_KEY` | O | — | Gemini API 키 |
|
|
193
|
+
| `LITELLM_MODEL` | O | `gemini/gemini-3-flash-preview` | LLM 모델 이름 |
|
|
194
|
+
| `LITELLM_BASE_URL` | X | — | 커스텀 LLM 엔드포인트 |
|
|
195
|
+
|
|
196
|
+
### Frontend (`frontend/.env.local`)
|
|
197
|
+
|
|
198
|
+
| 변수 | 필수 | 기본값 | 설명 |
|
|
199
|
+
|------|------|--------|------|
|
|
200
|
+
| `NEXT_PUBLIC_API_URL` | X | `http://localhost:8000` | 백엔드 API 주소 |
|
|
201
|
+
|
|
202
|
+
> 프론트엔드는 `.env.local` 파일이 없으면 기본값(`http://localhost:8000`)을 사용합니다.
|
|
203
|
+
|
|
204
|
+
## 포트
|
|
205
|
+
|
|
206
|
+
| 서비스 | URL |
|
|
207
|
+
|--------|-----|
|
|
208
|
+
| Frontend | http://localhost:3000 |
|
|
209
|
+
| Backend API | http://localhost:8000 |
|
|
210
|
+
| Swagger Docs | http://localhost:8000/docs |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|