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.
Files changed (313) hide show
  1. nexus_agent_platform-0.1.0/.gitignore +57 -0
  2. nexus_agent_platform-0.1.0/CLAUDE.md +99 -0
  3. nexus_agent_platform-0.1.0/PKG-INFO +240 -0
  4. nexus_agent_platform-0.1.0/README.md +210 -0
  5. nexus_agent_platform-0.1.0/backend/.env.example +6 -0
  6. nexus_agent_platform-0.1.0/backend/.gitignore +11 -0
  7. nexus_agent_platform-0.1.0/backend/.python-version +1 -0
  8. nexus_agent_platform-0.1.0/backend/README.md +195 -0
  9. nexus_agent_platform-0.1.0/backend/main.py +6 -0
  10. nexus_agent_platform-0.1.0/backend/mcp.json +18 -0
  11. nexus_agent_platform-0.1.0/backend/test_litellm.py +45 -0
  12. nexus_agent_platform-0.1.0/backend/uv.lock +1898 -0
  13. nexus_agent_platform-0.1.0/frontend/.env.example +2 -0
  14. nexus_agent_platform-0.1.0/frontend/.env.local +1 -0
  15. nexus_agent_platform-0.1.0/frontend/.gitignore +42 -0
  16. nexus_agent_platform-0.1.0/frontend/README.md +99 -0
  17. nexus_agent_platform-0.1.0/frontend/components.json +23 -0
  18. nexus_agent_platform-0.1.0/frontend/eslint.config.mjs +18 -0
  19. nexus_agent_platform-0.1.0/frontend/next.config.ts +7 -0
  20. nexus_agent_platform-0.1.0/frontend/out/404.html +1 -0
  21. nexus_agent_platform-0.1.0/frontend/out/__next.__PAGE__.txt +6 -0
  22. nexus_agent_platform-0.1.0/frontend/out/__next._full.txt +21 -0
  23. nexus_agent_platform-0.1.0/frontend/out/__next._head.txt +6 -0
  24. nexus_agent_platform-0.1.0/frontend/out/__next._index.txt +9 -0
  25. nexus_agent_platform-0.1.0/frontend/out/__next._tree.txt +5 -0
  26. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/1e3303314fb7a3a9.js +11 -0
  27. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/1f1272ea173c9b47.js +1 -0
  28. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2377816aad8a51c9.js +2 -0
  29. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2473c16c0c2f6b5f.css +2 -0
  30. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2c5623c683185768.js +1 -0
  31. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/2d06d1929052b95b.js +1 -0
  32. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/33074d3ff5d0cd2d.js +1 -0
  33. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/46b66de0793baf3f.js +5 -0
  34. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/49781d4788479f87.js +4 -0
  35. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/5035ef9fbc3b5b2d.js +1 -0
  36. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/53ff0c6049c3e288.js +1 -0
  37. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/643a1a85debc58f2.css +1 -0
  38. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/84a324ae38af6fef.js +1 -0
  39. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8782022a9c17db71.js +1 -0
  40. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8b72cfc40036c827.js +1 -0
  41. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/8f043076e58b008e.js +1 -0
  42. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/9f70f5737e48a741.js +1 -0
  43. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/a6dad97d9634a72d.js +1 -0
  44. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  45. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/ae1d913c69f58953.js +1 -0
  46. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/b679d16705d962cd.js +5 -0
  47. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/bc01f772952ff9aa.js +1 -0
  48. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c17cfb664194858c.js +5 -0
  49. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c4d90098b4abc498.js +1 -0
  50. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/c8424d018fcc7056.js +5 -0
  51. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/ca429150fb6430c9.js +8 -0
  52. nexus_agent_platform-0.1.0/frontend/out/_next/static/chunks/turbopack-b582c8a2e2ca32e3.js +4 -0
  53. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  54. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  55. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  56. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  57. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  58. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  59. nexus_agent_platform-0.1.0/frontend/out/_next/static/media/favicon.0b3bf435.ico +0 -0
  60. nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_buildManifest.js +11 -0
  61. nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_clientMiddlewareManifest.json +1 -0
  62. nexus_agent_platform-0.1.0/frontend/out/_next/static/rsLoUPrRXb3B0wn8f-rtT/_ssgManifest.js +1 -0
  63. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._full.txt +18 -0
  64. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._head.txt +6 -0
  65. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._index.txt +9 -0
  66. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._not-found.__PAGE__.txt +5 -0
  67. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._not-found.txt +4 -0
  68. nexus_agent_platform-0.1.0/frontend/out/_not-found/__next._tree.txt +3 -0
  69. nexus_agent_platform-0.1.0/frontend/out/_not-found.html +1 -0
  70. nexus_agent_platform-0.1.0/frontend/out/_not-found.txt +18 -0
  71. nexus_agent_platform-0.1.0/frontend/out/drb.png +0 -0
  72. nexus_agent_platform-0.1.0/frontend/out/favicon.ico +0 -0
  73. nexus_agent_platform-0.1.0/frontend/out/file.svg +1 -0
  74. nexus_agent_platform-0.1.0/frontend/out/globe.svg +1 -0
  75. nexus_agent_platform-0.1.0/frontend/out/index.html +1 -0
  76. nexus_agent_platform-0.1.0/frontend/out/index.txt +21 -0
  77. nexus_agent_platform-0.1.0/frontend/out/nano-banana.png +0 -0
  78. nexus_agent_platform-0.1.0/frontend/out/next.svg +1 -0
  79. nexus_agent_platform-0.1.0/frontend/out/pages/__next._full.txt +24 -0
  80. nexus_agent_platform-0.1.0/frontend/out/pages/__next._head.txt +6 -0
  81. nexus_agent_platform-0.1.0/frontend/out/pages/__next._index.txt +9 -0
  82. nexus_agent_platform-0.1.0/frontend/out/pages/__next._tree.txt +5 -0
  83. nexus_agent_platform-0.1.0/frontend/out/pages/__next.pages.__PAGE__.txt +9 -0
  84. nexus_agent_platform-0.1.0/frontend/out/pages/__next.pages.txt +4 -0
  85. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._full.txt +24 -0
  86. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._head.txt +6 -0
  87. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._index.txt +9 -0
  88. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next._tree.txt +5 -0
  89. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.txt +4 -0
  90. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.viewer.__PAGE__.txt +9 -0
  91. nexus_agent_platform-0.1.0/frontend/out/pages/viewer/__next.pages.viewer.txt +4 -0
  92. nexus_agent_platform-0.1.0/frontend/out/pages/viewer.html +1 -0
  93. nexus_agent_platform-0.1.0/frontend/out/pages/viewer.txt +24 -0
  94. nexus_agent_platform-0.1.0/frontend/out/pages.html +1 -0
  95. nexus_agent_platform-0.1.0/frontend/out/pages.txt +24 -0
  96. nexus_agent_platform-0.1.0/frontend/out/rubber-track.png +0 -0
  97. nexus_agent_platform-0.1.0/frontend/out/settings/__next._full.txt +24 -0
  98. nexus_agent_platform-0.1.0/frontend/out/settings/__next._head.txt +6 -0
  99. nexus_agent_platform-0.1.0/frontend/out/settings/__next._index.txt +9 -0
  100. nexus_agent_platform-0.1.0/frontend/out/settings/__next._tree.txt +5 -0
  101. nexus_agent_platform-0.1.0/frontend/out/settings/__next.settings.__PAGE__.txt +9 -0
  102. nexus_agent_platform-0.1.0/frontend/out/settings/__next.settings.txt +4 -0
  103. nexus_agent_platform-0.1.0/frontend/out/settings.html +1 -0
  104. nexus_agent_platform-0.1.0/frontend/out/settings.txt +24 -0
  105. nexus_agent_platform-0.1.0/frontend/out/skills/__next._full.txt +24 -0
  106. nexus_agent_platform-0.1.0/frontend/out/skills/__next._head.txt +6 -0
  107. nexus_agent_platform-0.1.0/frontend/out/skills/__next._index.txt +9 -0
  108. nexus_agent_platform-0.1.0/frontend/out/skills/__next._tree.txt +5 -0
  109. nexus_agent_platform-0.1.0/frontend/out/skills/__next.skills.__PAGE__.txt +9 -0
  110. nexus_agent_platform-0.1.0/frontend/out/skills/__next.skills.txt +4 -0
  111. nexus_agent_platform-0.1.0/frontend/out/skills.html +1 -0
  112. nexus_agent_platform-0.1.0/frontend/out/skills.txt +24 -0
  113. nexus_agent_platform-0.1.0/frontend/out/tools/__next._full.txt +24 -0
  114. nexus_agent_platform-0.1.0/frontend/out/tools/__next._head.txt +6 -0
  115. nexus_agent_platform-0.1.0/frontend/out/tools/__next._index.txt +9 -0
  116. nexus_agent_platform-0.1.0/frontend/out/tools/__next._tree.txt +5 -0
  117. nexus_agent_platform-0.1.0/frontend/out/tools/__next.tools.__PAGE__.txt +9 -0
  118. nexus_agent_platform-0.1.0/frontend/out/tools/__next.tools.txt +4 -0
  119. nexus_agent_platform-0.1.0/frontend/out/tools.html +1 -0
  120. nexus_agent_platform-0.1.0/frontend/out/tools.txt +24 -0
  121. nexus_agent_platform-0.1.0/frontend/out/vercel.svg +1 -0
  122. nexus_agent_platform-0.1.0/frontend/out/window.svg +1 -0
  123. nexus_agent_platform-0.1.0/frontend/package.json +39 -0
  124. nexus_agent_platform-0.1.0/frontend/pnpm-lock.yaml +8599 -0
  125. nexus_agent_platform-0.1.0/frontend/pnpm-workspace.yaml +3 -0
  126. nexus_agent_platform-0.1.0/frontend/postcss.config.mjs +7 -0
  127. nexus_agent_platform-0.1.0/frontend/public/drb.png +0 -0
  128. nexus_agent_platform-0.1.0/frontend/public/file.svg +1 -0
  129. nexus_agent_platform-0.1.0/frontend/public/globe.svg +1 -0
  130. nexus_agent_platform-0.1.0/frontend/public/nano-banana.png +0 -0
  131. nexus_agent_platform-0.1.0/frontend/public/next.svg +1 -0
  132. nexus_agent_platform-0.1.0/frontend/public/rubber-track.png +0 -0
  133. nexus_agent_platform-0.1.0/frontend/public/vercel.svg +1 -0
  134. nexus_agent_platform-0.1.0/frontend/public/window.svg +1 -0
  135. nexus_agent_platform-0.1.0/frontend/src/app/favicon.ico +0 -0
  136. nexus_agent_platform-0.1.0/frontend/src/app/globals.css +197 -0
  137. nexus_agent_platform-0.1.0/frontend/src/app/layout.tsx +45 -0
  138. nexus_agent_platform-0.1.0/frontend/src/app/page.tsx +5 -0
  139. nexus_agent_platform-0.1.0/frontend/src/app/pages/page.tsx +216 -0
  140. nexus_agent_platform-0.1.0/frontend/src/app/pages/viewer/page.tsx +167 -0
  141. nexus_agent_platform-0.1.0/frontend/src/app/settings/page.tsx +839 -0
  142. nexus_agent_platform-0.1.0/frontend/src/app/skills/page.tsx +147 -0
  143. nexus_agent_platform-0.1.0/frontend/src/app/tools/page.tsx +178 -0
  144. nexus_agent_platform-0.1.0/frontend/src/components/chat/ChatInterface.tsx +561 -0
  145. nexus_agent_platform-0.1.0/frontend/src/components/chat/FilePreviewChips.tsx +40 -0
  146. nexus_agent_platform-0.1.0/frontend/src/components/chat/MCPToolsPanel.tsx +324 -0
  147. nexus_agent_platform-0.1.0/frontend/src/components/layout/Sidebar.tsx +91 -0
  148. nexus_agent_platform-0.1.0/frontend/src/components/mcp/AddServerDialog.tsx +316 -0
  149. nexus_agent_platform-0.1.0/frontend/src/components/mcp/EditServerDialog.tsx +212 -0
  150. nexus_agent_platform-0.1.0/frontend/src/components/mcp/MCPServerCard.tsx +243 -0
  151. nexus_agent_platform-0.1.0/frontend/src/components/mcp/MCPServerRow.tsx +174 -0
  152. nexus_agent_platform-0.1.0/frontend/src/components/pages/AddPageDialog.tsx +307 -0
  153. nexus_agent_platform-0.1.0/frontend/src/components/pages/PageCard.tsx +129 -0
  154. nexus_agent_platform-0.1.0/frontend/src/components/pages/PageRow.tsx +206 -0
  155. nexus_agent_platform-0.1.0/frontend/src/components/providers/BackgroundBlobs.tsx +29 -0
  156. nexus_agent_platform-0.1.0/frontend/src/components/providers/ThemeProvider.tsx +23 -0
  157. nexus_agent_platform-0.1.0/frontend/src/components/skills/AddSkillDialog.tsx +408 -0
  158. nexus_agent_platform-0.1.0/frontend/src/components/skills/SkillCard.tsx +205 -0
  159. nexus_agent_platform-0.1.0/frontend/src/components/skills/SkillRow.tsx +183 -0
  160. nexus_agent_platform-0.1.0/frontend/src/components/ui/badge.tsx +48 -0
  161. nexus_agent_platform-0.1.0/frontend/src/components/ui/button.tsx +64 -0
  162. nexus_agent_platform-0.1.0/frontend/src/components/ui/card.tsx +92 -0
  163. nexus_agent_platform-0.1.0/frontend/src/components/ui/dialog.tsx +158 -0
  164. nexus_agent_platform-0.1.0/frontend/src/components/ui/form.tsx +167 -0
  165. nexus_agent_platform-0.1.0/frontend/src/components/ui/hover-card.tsx +44 -0
  166. nexus_agent_platform-0.1.0/frontend/src/components/ui/input.tsx +21 -0
  167. nexus_agent_platform-0.1.0/frontend/src/components/ui/label.tsx +24 -0
  168. nexus_agent_platform-0.1.0/frontend/src/components/ui/scroll-area.tsx +58 -0
  169. nexus_agent_platform-0.1.0/frontend/src/components/ui/select.tsx +190 -0
  170. nexus_agent_platform-0.1.0/frontend/src/components/ui/sheet.tsx +143 -0
  171. nexus_agent_platform-0.1.0/frontend/src/components/ui/switch.tsx +35 -0
  172. nexus_agent_platform-0.1.0/frontend/src/components/ui/tabs.tsx +91 -0
  173. nexus_agent_platform-0.1.0/frontend/src/components/ui/textarea.tsx +18 -0
  174. nexus_agent_platform-0.1.0/frontend/src/lib/api/mcp.ts +125 -0
  175. nexus_agent_platform-0.1.0/frontend/src/lib/api/pages.ts +130 -0
  176. nexus_agent_platform-0.1.0/frontend/src/lib/api/settings.ts +41 -0
  177. nexus_agent_platform-0.1.0/frontend/src/lib/api/skills.ts +107 -0
  178. nexus_agent_platform-0.1.0/frontend/src/lib/config.ts +2 -0
  179. nexus_agent_platform-0.1.0/frontend/src/lib/file-utils.ts +35 -0
  180. nexus_agent_platform-0.1.0/frontend/src/lib/stores/profile.ts +25 -0
  181. nexus_agent_platform-0.1.0/frontend/src/lib/stores/theme.ts +151 -0
  182. nexus_agent_platform-0.1.0/frontend/src/lib/utils.ts +6 -0
  183. nexus_agent_platform-0.1.0/frontend/tsconfig.json +34 -0
  184. nexus_agent_platform-0.1.0/nexus_agent/__init__.py +1 -0
  185. nexus_agent_platform-0.1.0/nexus_agent/__main__.py +3 -0
  186. nexus_agent_platform-0.1.0/nexus_agent/api/__init__.py +0 -0
  187. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/__init__.py +0 -0
  188. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/chat.py +17 -0
  189. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/mcp.py +199 -0
  190. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/pages.py +140 -0
  191. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/settings.py +30 -0
  192. nexus_agent_platform-0.1.0/nexus_agent/api/endpoints/skills.py +96 -0
  193. nexus_agent_platform-0.1.0/nexus_agent/cli.py +79 -0
  194. nexus_agent_platform-0.1.0/nexus_agent/config.py +58 -0
  195. nexus_agent_platform-0.1.0/nexus_agent/core/__init__.py +0 -0
  196. nexus_agent_platform-0.1.0/nexus_agent/core/agent.py +96 -0
  197. nexus_agent_platform-0.1.0/nexus_agent/core/llm.py +62 -0
  198. nexus_agent_platform-0.1.0/nexus_agent/core/mcp_manager.py +308 -0
  199. nexus_agent_platform-0.1.0/nexus_agent/core/page_manager.py +309 -0
  200. nexus_agent_platform-0.1.0/nexus_agent/core/settings_manager.py +63 -0
  201. nexus_agent_platform-0.1.0/nexus_agent/core/skill_manager.py +440 -0
  202. nexus_agent_platform-0.1.0/nexus_agent/models/__init__.py +0 -0
  203. nexus_agent_platform-0.1.0/nexus_agent/models/mcp.py +37 -0
  204. nexus_agent_platform-0.1.0/nexus_agent/models/page.py +38 -0
  205. nexus_agent_platform-0.1.0/nexus_agent/models/settings.py +24 -0
  206. nexus_agent_platform-0.1.0/nexus_agent/models/skill.py +31 -0
  207. nexus_agent_platform-0.1.0/nexus_agent/server.py +98 -0
  208. nexus_agent_platform-0.1.0/nexus_agent/static/404.html +1 -0
  209. nexus_agent_platform-0.1.0/nexus_agent/static/__next.__PAGE__.txt +6 -0
  210. nexus_agent_platform-0.1.0/nexus_agent/static/__next._full.txt +21 -0
  211. nexus_agent_platform-0.1.0/nexus_agent/static/__next._head.txt +6 -0
  212. nexus_agent_platform-0.1.0/nexus_agent/static/__next._index.txt +9 -0
  213. nexus_agent_platform-0.1.0/nexus_agent/static/__next._tree.txt +5 -0
  214. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/1e3303314fb7a3a9.js +11 -0
  215. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/1f1272ea173c9b47.js +1 -0
  216. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2377816aad8a51c9.js +2 -0
  217. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2473c16c0c2f6b5f.css +2 -0
  218. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2c5623c683185768.js +1 -0
  219. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/2d06d1929052b95b.js +1 -0
  220. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/33074d3ff5d0cd2d.js +1 -0
  221. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/46b66de0793baf3f.js +5 -0
  222. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/49781d4788479f87.js +4 -0
  223. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/5035ef9fbc3b5b2d.js +1 -0
  224. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/53ff0c6049c3e288.js +1 -0
  225. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/643a1a85debc58f2.css +1 -0
  226. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/84a324ae38af6fef.js +1 -0
  227. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8782022a9c17db71.js +1 -0
  228. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8b72cfc40036c827.js +1 -0
  229. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/8f043076e58b008e.js +1 -0
  230. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/9f70f5737e48a741.js +1 -0
  231. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/a6dad97d9634a72d.js +1 -0
  232. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  233. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/ae1d913c69f58953.js +1 -0
  234. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/b679d16705d962cd.js +5 -0
  235. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/bc01f772952ff9aa.js +1 -0
  236. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c17cfb664194858c.js +5 -0
  237. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c4d90098b4abc498.js +1 -0
  238. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/c8424d018fcc7056.js +5 -0
  239. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/ca429150fb6430c9.js +8 -0
  240. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/chunks/turbopack-b582c8a2e2ca32e3.js +4 -0
  241. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  242. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  243. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  244. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  245. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  246. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  247. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/media/favicon.0b3bf435.ico +0 -0
  248. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_buildManifest.js +11 -0
  249. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_clientMiddlewareManifest.json +1 -0
  250. nexus_agent_platform-0.1.0/nexus_agent/static/_next/static/rsLoUPrRXb3B0wn8f-rtT/_ssgManifest.js +1 -0
  251. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._full.txt +18 -0
  252. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._head.txt +6 -0
  253. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._index.txt +9 -0
  254. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
  255. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._not-found.txt +4 -0
  256. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found/__next._tree.txt +3 -0
  257. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found.html +1 -0
  258. nexus_agent_platform-0.1.0/nexus_agent/static/_not-found.txt +18 -0
  259. nexus_agent_platform-0.1.0/nexus_agent/static/drb.png +0 -0
  260. nexus_agent_platform-0.1.0/nexus_agent/static/favicon.ico +0 -0
  261. nexus_agent_platform-0.1.0/nexus_agent/static/file.svg +1 -0
  262. nexus_agent_platform-0.1.0/nexus_agent/static/globe.svg +1 -0
  263. nexus_agent_platform-0.1.0/nexus_agent/static/index.html +1 -0
  264. nexus_agent_platform-0.1.0/nexus_agent/static/index.txt +21 -0
  265. nexus_agent_platform-0.1.0/nexus_agent/static/nano-banana.png +0 -0
  266. nexus_agent_platform-0.1.0/nexus_agent/static/next.svg +1 -0
  267. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._full.txt +24 -0
  268. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._head.txt +6 -0
  269. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._index.txt +9 -0
  270. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next._tree.txt +5 -0
  271. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next.pages.__PAGE__.txt +9 -0
  272. nexus_agent_platform-0.1.0/nexus_agent/static/pages/__next.pages.txt +4 -0
  273. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._full.txt +24 -0
  274. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._head.txt +6 -0
  275. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._index.txt +9 -0
  276. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next._tree.txt +5 -0
  277. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.txt +4 -0
  278. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.viewer.__PAGE__.txt +9 -0
  279. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer/__next.pages.viewer.txt +4 -0
  280. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer.html +1 -0
  281. nexus_agent_platform-0.1.0/nexus_agent/static/pages/viewer.txt +24 -0
  282. nexus_agent_platform-0.1.0/nexus_agent/static/pages.html +1 -0
  283. nexus_agent_platform-0.1.0/nexus_agent/static/pages.txt +24 -0
  284. nexus_agent_platform-0.1.0/nexus_agent/static/rubber-track.png +0 -0
  285. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._full.txt +24 -0
  286. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._head.txt +6 -0
  287. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._index.txt +9 -0
  288. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next._tree.txt +5 -0
  289. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next.settings.__PAGE__.txt +9 -0
  290. nexus_agent_platform-0.1.0/nexus_agent/static/settings/__next.settings.txt +4 -0
  291. nexus_agent_platform-0.1.0/nexus_agent/static/settings.html +1 -0
  292. nexus_agent_platform-0.1.0/nexus_agent/static/settings.txt +24 -0
  293. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._full.txt +24 -0
  294. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._head.txt +6 -0
  295. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._index.txt +9 -0
  296. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next._tree.txt +5 -0
  297. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next.skills.__PAGE__.txt +9 -0
  298. nexus_agent_platform-0.1.0/nexus_agent/static/skills/__next.skills.txt +4 -0
  299. nexus_agent_platform-0.1.0/nexus_agent/static/skills.html +1 -0
  300. nexus_agent_platform-0.1.0/nexus_agent/static/skills.txt +24 -0
  301. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._full.txt +24 -0
  302. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._head.txt +6 -0
  303. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._index.txt +9 -0
  304. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next._tree.txt +5 -0
  305. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next.tools.__PAGE__.txt +9 -0
  306. nexus_agent_platform-0.1.0/nexus_agent/static/tools/__next.tools.txt +4 -0
  307. nexus_agent_platform-0.1.0/nexus_agent/static/tools.html +1 -0
  308. nexus_agent_platform-0.1.0/nexus_agent/static/tools.txt +24 -0
  309. nexus_agent_platform-0.1.0/nexus_agent/static/vercel.svg +1 -0
  310. nexus_agent_platform-0.1.0/nexus_agent/static/window.svg +1 -0
  311. nexus_agent_platform-0.1.0/pyproject.toml +49 -0
  312. nexus_agent_platform-0.1.0/scripts/build.sh +21 -0
  313. 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,6 @@
1
+ # ===== Required =====
2
+ GOOGLE_API_KEY=
3
+ LITELLM_MODEL=gemini/gemini-3-flash-preview
4
+
5
+ # ===== Optional =====
6
+ # LITELLM_BASE_URL=
@@ -0,0 +1,11 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+ /temp