slackhive 0.1.37 → 0.1.39
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.
- package/.dockerignore +14 -0
- package/.env.example +44 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +27 -0
- package/.github/dependabot.yml +20 -0
- package/.github/workflows/audit.yml +149 -0
- package/.github/workflows/ci.yml +135 -0
- package/CHANGELOG.md +52 -0
- package/CODE_OF_CONDUCT.md +37 -0
- package/CONTRIBUTING.md +204 -0
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/SECURITY.md +47 -0
- package/apps/runner/Dockerfile +33 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +8 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.js +63 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +1 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +20 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +178 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +1 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +13 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.js +144 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +1 -0
- package/apps/runner/dist/__tests__/memory-sync.test.d.ts +11 -0
- package/apps/runner/dist/__tests__/memory-sync.test.js +56 -0
- package/apps/runner/dist/__tests__/memory-sync.test.js.map +1 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +9 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.js +271 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.js.map +1 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +12 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.js +400 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.js.map +1 -0
- package/apps/runner/dist/__tests__/thread-context.test.d.ts +12 -0
- package/apps/runner/dist/__tests__/thread-context.test.js +182 -0
- package/apps/runner/dist/__tests__/thread-context.test.js.map +1 -0
- package/apps/runner/dist/agent-runner.d.ts +118 -0
- package/apps/runner/dist/agent-runner.js +352 -0
- package/apps/runner/dist/agent-runner.js.map +1 -0
- package/apps/runner/dist/claude-handler.d.ts +122 -0
- package/apps/runner/dist/claude-handler.js +402 -0
- package/apps/runner/dist/claude-handler.js.map +1 -0
- package/apps/runner/dist/compile-claude-md.d.ts +59 -0
- package/apps/runner/dist/compile-claude-md.js +291 -0
- package/apps/runner/dist/compile-claude-md.js.map +1 -0
- package/apps/runner/dist/correction-handler.d.ts +46 -0
- package/apps/runner/dist/correction-handler.js +162 -0
- package/apps/runner/dist/correction-handler.js.map +1 -0
- package/apps/runner/dist/correction-manager.d.ts +53 -0
- package/apps/runner/dist/correction-manager.js +241 -0
- package/apps/runner/dist/correction-manager.js.map +1 -0
- package/apps/runner/dist/db.d.ts +193 -0
- package/apps/runner/dist/db.js +492 -0
- package/apps/runner/dist/db.js.map +1 -0
- package/apps/runner/dist/index.d.ts +9 -0
- package/apps/runner/dist/index.js +43 -0
- package/apps/runner/dist/index.js.map +1 -0
- package/apps/runner/dist/job-scheduler.d.ts +57 -0
- package/apps/runner/dist/job-scheduler.js +150 -0
- package/apps/runner/dist/job-scheduler.js.map +1 -0
- package/apps/runner/dist/logger.d.ts +32 -0
- package/apps/runner/dist/logger.js +52 -0
- package/apps/runner/dist/logger.js.map +1 -0
- package/apps/runner/dist/mcp-process-manager.d.ts +38 -0
- package/apps/runner/dist/mcp-process-manager.js +189 -0
- package/apps/runner/dist/mcp-process-manager.js.map +1 -0
- package/apps/runner/dist/memory-mcp.d.ts +14 -0
- package/apps/runner/dist/memory-mcp.js +88 -0
- package/apps/runner/dist/memory-mcp.js.map +1 -0
- package/apps/runner/dist/memory-watcher.d.ts +78 -0
- package/apps/runner/dist/memory-watcher.js +220 -0
- package/apps/runner/dist/memory-watcher.js.map +1 -0
- package/apps/runner/dist/slack-handler.d.ts +120 -0
- package/apps/runner/dist/slack-handler.js +843 -0
- package/apps/runner/dist/slack-handler.js.map +1 -0
- package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/apps/runner/package.json +42 -0
- package/apps/runner/src/__tests__/channel-restrictions.test.ts +75 -0
- package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +160 -0
- package/apps/runner/src/__tests__/compile-claude-md.test.ts +139 -0
- package/apps/runner/src/__tests__/memory-sync.test.ts +59 -0
- package/apps/runner/src/__tests__/slack-file-support.test.ts +376 -0
- package/apps/runner/src/__tests__/slack-formatting.test.ts +495 -0
- package/apps/runner/src/__tests__/thread-context.test.ts +215 -0
- package/apps/runner/src/agent-runner.ts +397 -0
- package/apps/runner/src/claude-handler.ts +475 -0
- package/apps/runner/src/compile-claude-md.ts +283 -0
- package/apps/runner/src/correction-handler.ts +191 -0
- package/apps/runner/src/correction-manager.ts +285 -0
- package/apps/runner/src/db.ts +604 -0
- package/apps/runner/src/index.ts +46 -0
- package/apps/runner/src/job-scheduler.ts +165 -0
- package/apps/runner/src/logger.ts +49 -0
- package/apps/runner/src/mcp-process-manager.ts +195 -0
- package/apps/runner/src/memory-mcp.ts +85 -0
- package/apps/runner/src/memory-watcher.ts +215 -0
- package/apps/runner/src/slack-handler.ts +929 -0
- package/apps/runner/tsconfig.json +17 -0
- package/apps/runner/vitest.config.mts +17 -0
- package/apps/web/.eslintrc.json +3 -0
- package/apps/web/.next/app-build-manifest.json +323 -0
- package/apps/web/.next/app-path-routes-manifest.json +46 -0
- package/apps/web/.next/build-manifest.json +33 -0
- package/apps/web/.next/cache/.previewinfo +1 -0
- package/apps/web/.next/cache/.rscinfo +1 -0
- package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/2.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/3.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/4.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
- package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/2.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
- package/apps/web/.next/diagnostics/framework.json +1 -0
- package/apps/web/.next/package.json +1 -0
- package/apps/web/.next/react-loadable-manifest.json +1 -0
- package/apps/web/.next/server/app/_not-found/page.js +2 -0
- package/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/agents/[slug]/page.js +4 -0
- package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/agents/new/page.js +2 -0
- package/apps/web/.next/server/app/agents/new/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +6 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +3 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/route.js +33 -0
- package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/route.js +91 -0
- package/apps/web/.next/server/app/api/agents/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/login/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/me/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/route.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/settings/route.js +1 -0
- package/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/icon.svg/route.js +1 -0
- package/apps/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/jobs/page.js +2 -0
- package/apps/web/.next/server/app/jobs/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/login/page.js +2 -0
- package/apps/web/.next/server/app/login/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/login/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/page.js +2 -0
- package/apps/web/.next/server/app/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/env-vars/page.js +2 -0
- package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/mcps/page.js +2 -0
- package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/page.js +2 -0
- package/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app-paths-manifest.json +46 -0
- package/apps/web/.next/server/chunks/1157.js +9 -0
- package/apps/web/.next/server/chunks/2287.js +1 -0
- package/apps/web/.next/server/chunks/3444.js +1 -0
- package/apps/web/.next/server/chunks/383.js +6 -0
- package/apps/web/.next/server/chunks/4012.js +58 -0
- package/apps/web/.next/server/chunks/6791.js +1 -0
- package/apps/web/.next/server/chunks/7171.js +1 -0
- package/apps/web/.next/server/chunks/8819.js +22 -0
- package/apps/web/.next/server/edge-runtime-webpack.js +2 -0
- package/apps/web/.next/server/edge-runtime-webpack.js.map +1 -0
- package/apps/web/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/apps/web/.next/server/middleware-build-manifest.js +1 -0
- package/apps/web/.next/server/middleware-manifest.json +32 -0
- package/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/apps/web/.next/server/next-font-manifest.js +1 -0
- package/apps/web/.next/server/next-font-manifest.json +1 -0
- package/apps/web/.next/server/pages/_app.js +1 -0
- package/apps/web/.next/server/pages/_app.js.nft.json +1 -0
- package/apps/web/.next/server/pages/_document.js +1 -0
- package/apps/web/.next/server/pages/_document.js.nft.json +1 -0
- package/apps/web/.next/server/pages/_error.js +19 -0
- package/apps/web/.next/server/pages/_error.js.nft.json +1 -0
- package/apps/web/.next/server/pages-manifest.json +5 -0
- package/apps/web/.next/server/server-reference-manifest.js +1 -0
- package/apps/web/.next/server/server-reference-manifest.json +1 -0
- package/apps/web/.next/server/src/middleware.js +14 -0
- package/apps/web/.next/server/src/middleware.js.map +1 -0
- package/apps/web/.next/server/webpack-runtime.js +1 -0
- package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +1 -0
- package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +1 -0
- package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +1 -0
- package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +1 -0
- package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +1 -0
- package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +1 -0
- package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +1 -0
- package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +1 -0
- package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +1 -0
- package/apps/web/.next/static/chunks/framework-811407f832a33072.js +1 -0
- package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +1 -0
- package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +1 -0
- package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +1 -0
- package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +1 -0
- package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +1 -0
- package/apps/web/.next/static/css/15371687405525e2.css +5 -0
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +1 -0
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +1 -0
- package/apps/web/.next/trace +5 -0
- package/apps/web/.next/types/app/agents/[slug]/page.ts +84 -0
- package/apps/web/.next/types/app/agents/new/page.ts +84 -0
- package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/login/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/logout/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/me/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/users/route.ts +347 -0
- package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +347 -0
- package/apps/web/.next/types/app/api/env-vars/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/route.ts +347 -0
- package/apps/web/.next/types/app/api/settings/route.ts +347 -0
- package/apps/web/.next/types/app/jobs/page.ts +84 -0
- package/apps/web/.next/types/app/login/layout.ts +84 -0
- package/apps/web/.next/types/app/login/page.ts +84 -0
- package/apps/web/.next/types/app/page.ts +84 -0
- package/apps/web/.next/types/app/settings/env-vars/page.ts +84 -0
- package/apps/web/.next/types/app/settings/mcps/page.ts +84 -0
- package/apps/web/.next/types/app/settings/page.ts +84 -0
- package/apps/web/.next/types/cache-life.d.ts +141 -0
- package/apps/web/.next/types/package.json +1 -0
- package/apps/web/.next/types/routes.d.ts +114 -0
- package/apps/web/.next/types/validator.ts +448 -0
- package/apps/web/Dockerfile +37 -0
- package/apps/web/next-env.d.ts +6 -0
- package/apps/web/next.config.js +6 -0
- package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/apps/web/package.json +48 -0
- package/apps/web/postcss.config.js +3 -0
- package/apps/web/public/logo.svg +17 -0
- package/apps/web/src/app/agents/[slug]/page.tsx +2235 -0
- package/apps/web/src/app/agents/new/page.tsx +1161 -0
- package/apps/web/src/app/api/agents/[id]/access/route.ts +76 -0
- package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +111 -0
- package/apps/web/src/app/api/agents/[id]/logs/route.ts +84 -0
- package/apps/web/src/app/api/agents/[id]/manifest/route.ts +32 -0
- package/apps/web/src/app/api/agents/[id]/mcps/route.ts +73 -0
- package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +31 -0
- package/apps/web/src/app/api/agents/[id]/memories/route.ts +56 -0
- package/apps/web/src/app/api/agents/[id]/permissions/route.ts +74 -0
- package/apps/web/src/app/api/agents/[id]/reload/route.ts +33 -0
- package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +85 -0
- package/apps/web/src/app/api/agents/[id]/route.ts +81 -0
- package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +52 -0
- package/apps/web/src/app/api/agents/[id]/skills/route.ts +80 -0
- package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +38 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +61 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +53 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +84 -0
- package/apps/web/src/app/api/agents/[id]/start/route.ts +35 -0
- package/apps/web/src/app/api/agents/[id]/stop/route.ts +35 -0
- package/apps/web/src/app/api/agents/route.ts +99 -0
- package/apps/web/src/app/api/auth/login/route.ts +39 -0
- package/apps/web/src/app/api/auth/logout/route.ts +21 -0
- package/apps/web/src/app/api/auth/me/route.ts +24 -0
- package/apps/web/src/app/api/auth/users/[id]/route.ts +48 -0
- package/apps/web/src/app/api/auth/users/route.ts +63 -0
- package/apps/web/src/app/api/env-vars/[key]/route.ts +66 -0
- package/apps/web/src/app/api/env-vars/route.ts +59 -0
- package/apps/web/src/app/api/jobs/[id]/route.ts +51 -0
- package/apps/web/src/app/api/jobs/[id]/runs/route.ts +24 -0
- package/apps/web/src/app/api/jobs/route.ts +42 -0
- package/apps/web/src/app/api/mcps/[id]/route.ts +60 -0
- package/apps/web/src/app/api/mcps/[id]/test/route.ts +195 -0
- package/apps/web/src/app/api/mcps/route.ts +72 -0
- package/apps/web/src/app/api/settings/route.ts +42 -0
- package/apps/web/src/app/globals.css +124 -0
- package/apps/web/src/app/icon.svg +17 -0
- package/apps/web/src/app/jobs/page.tsx +543 -0
- package/apps/web/src/app/layout-shell.tsx +89 -0
- package/apps/web/src/app/layout.tsx +18 -0
- package/apps/web/src/app/login/layout.tsx +9 -0
- package/apps/web/src/app/login/page.tsx +150 -0
- package/apps/web/src/app/page.tsx +573 -0
- package/apps/web/src/app/settings/env-vars/page.tsx +216 -0
- package/apps/web/src/app/settings/mcps/page.tsx +763 -0
- package/apps/web/src/app/settings/page.tsx +528 -0
- package/apps/web/src/app/sidebar.tsx +345 -0
- package/apps/web/src/lib/__tests__/api-guard.test.ts +189 -0
- package/apps/web/src/lib/__tests__/auth.test.ts +262 -0
- package/apps/web/src/lib/__tests__/boss-registry.test.ts +323 -0
- package/apps/web/src/lib/__tests__/compile.test.ts +161 -0
- package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +136 -0
- package/apps/web/src/lib/__tests__/db-env-vars.test.ts +216 -0
- package/apps/web/src/lib/__tests__/db-restrictions.test.ts +117 -0
- package/apps/web/src/lib/__tests__/db.integration.test.ts +271 -0
- package/apps/web/src/lib/__tests__/diff.test.ts +102 -0
- package/apps/web/src/lib/__tests__/mcp-mask.test.ts +274 -0
- package/apps/web/src/lib/__tests__/skill-templates.test.ts +237 -0
- package/apps/web/src/lib/__tests__/slack-manifest.test.ts +105 -0
- package/apps/web/src/lib/api-guard.ts +68 -0
- package/apps/web/src/lib/auth-context.tsx +71 -0
- package/apps/web/src/lib/auth.ts +128 -0
- package/apps/web/src/lib/boss-registry.ts +90 -0
- package/apps/web/src/lib/compile.ts +51 -0
- package/apps/web/src/lib/db.ts +1196 -0
- package/apps/web/src/lib/diff.ts +43 -0
- package/apps/web/src/lib/mcp-mask.ts +91 -0
- package/apps/web/src/lib/portal.tsx +23 -0
- package/apps/web/src/lib/skill-templates.ts +148 -0
- package/apps/web/src/lib/slack-manifest.ts +85 -0
- package/apps/web/src/middleware.ts +68 -0
- package/apps/web/tailwind.config.js +6 -0
- package/apps/web/tsconfig.json +23 -0
- package/apps/web/vitest.config.mts +21 -0
- package/cli/.claude/settings.local.json +6 -0
- package/cli/README.md +281 -0
- package/cli/node_modules/.package-lock.json +427 -0
- package/cli/node_modules/commander/LICENSE +22 -0
- package/cli/node_modules/commander/Readme.md +1157 -0
- package/cli/node_modules/commander/esm.mjs +16 -0
- package/cli/node_modules/commander/index.js +24 -0
- package/cli/node_modules/commander/lib/argument.js +149 -0
- package/cli/node_modules/commander/lib/command.js +2509 -0
- package/cli/node_modules/commander/lib/error.js +39 -0
- package/cli/node_modules/commander/lib/help.js +520 -0
- package/cli/node_modules/commander/lib/option.js +330 -0
- package/cli/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/cli/node_modules/commander/package-support.json +16 -0
- package/cli/node_modules/commander/package.json +84 -0
- package/cli/node_modules/commander/typings/esm.d.mts +3 -0
- package/cli/node_modules/commander/typings/index.d.ts +969 -0
- package/cli/package-lock.json +449 -0
- package/cli/package.json +44 -0
- package/cli/src/commands/init.ts +514 -0
- package/cli/src/commands/manage.ts +115 -0
- package/cli/src/index.ts +63 -0
- package/cli/tsconfig.json +14 -0
- package/docker-compose.yml +122 -0
- package/docs/agents/boss-agents.mdx +108 -0
- package/docs/agents/creating-agents.mdx +132 -0
- package/docs/agents/memory.mdx +113 -0
- package/docs/agents/tools.mdx +103 -0
- package/docs/configuration/env-vars.mdx +166 -0
- package/docs/configuration/mcp-servers.mdx +203 -0
- package/docs/configuration/slack-app.mdx +175 -0
- package/docs/docs.json +79 -0
- package/docs/favicon.svg +17 -0
- package/docs/features/history.mdx +60 -0
- package/docs/features/import-export.mdx +77 -0
- package/docs/features/logs.mdx +131 -0
- package/docs/features/multi-workspace.mdx +90 -0
- package/docs/features/scheduled-jobs.mdx +231 -0
- package/docs/features/users.mdx +92 -0
- package/docs/introduction.mdx +160 -0
- package/docs/logo/dark.svg +17 -0
- package/docs/logo/light.svg +17 -0
- package/docs/logo/wide-dark.svg +12 -0
- package/docs/logo/wide-light.svg +12 -0
- package/docs/quickstart.mdx +270 -0
- package/docs/self-hosting/docker.mdx +151 -0
- package/docs/self-hosting/production.mdx +176 -0
- package/package.json +20 -36
- package/packages/shared/dist/index.d.ts +8 -0
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +24 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/types.d.ts +584 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/types.js +39 -0
- package/packages/shared/dist/types.js.map +1 -0
- package/packages/shared/package.json +15 -0
- package/packages/shared/src/db/schema.sql +354 -0
- package/packages/shared/src/index.ts +8 -0
- package/packages/shared/src/types.ts +683 -0
- package/packages/shared/tsconfig.json +17 -0
- package/scripts/dev.sh +45 -0
- /package/{dist → cli/dist}/commands/init.d.ts +0 -0
- /package/{dist → cli/dist}/commands/init.js +0 -0
- /package/{dist → cli/dist}/commands/manage.d.ts +0 -0
- /package/{dist → cli/dist}/commands/manage.js +0 -0
- /package/{dist → cli/dist}/index.d.ts +0 -0
- /package/{dist → cli/dist}/index.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{3602:(e,t,r)=>{"use strict";r.d(t,{LayoutShell:()=>x});var n=r(4568),o=r(7620),i=r(7541),s=r(9664),a=r.n(s),l=r(4492);let d={running:"#059669",stopped:"#d4d4d4",error:"#dc2626"},c=(0,o.createContext)({collapsed:!1,width:240});function h(e){let{children:t,mobileOpen:r,onMobileClose:s}=e,h=(0,i.usePathname)(),[x,g]=(0,o.useState)([]),[p,f]=(0,o.useState)(!1),[v,b]=(0,o.useState)(!1),[j,k]=(0,o.useState)(!1),[y,m]=(0,o.useState)({appName:"SlackHive",tagline:"AI agent teams on Slack",logoUrl:""}),{username:w,role:S,canEdit:C,logout:M}=(0,l.A)(),W=j?0:p?56:240;return(0,o.useEffect)(()=>{let e=()=>k(window.innerWidth<=768);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,o.useEffect)(()=>{fetch("/api/agents").then(e=>e.json()).then(g).catch(()=>{}),fetch("/api/settings").then(e=>e.json()).then(e=>{m(t=>{var r;return{appName:e.appName||t.appName,tagline:e.tagline||t.tagline,logoUrl:null!=(r=e.logoUrl)?r:t.logoUrl}})}).catch(()=>{})},[]),(0,n.jsxs)(c.Provider,{value:{collapsed:p,width:W},children:[j&&r&&(0,n.jsx)("div",{onClick:s,style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.3)",zIndex:49,backdropFilter:"blur(2px)"}}),(0,n.jsxs)("aside",{style:{width:240,flexShrink:0,background:"#fff",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",position:"fixed",top:0,bottom:0,zIndex:50,left:j?r?0:-240:0,...j?{}:{width:p?56:240},transition:j?"left 0.25s cubic-bezier(0.16,1,0.3,1)":"width 0.2s cubic-bezier(0.16,1,0.3,1)",overflow:"hidden",...j&&r?{boxShadow:"var(--shadow-lg)"}:{}},children:[(0,n.jsxs)("div",{style:{padding:p?"14px 0":"18px 20px 14px",borderBottom:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:p?"center":"flex-start",gap:10,minHeight:56},children:[(0,n.jsx)("img",{src:y.logoUrl||"/logo.svg",alt:"Logo",style:{width:28,height:28,borderRadius:8,flexShrink:0,objectFit:"cover"}}),!p&&(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontWeight:600,fontSize:14,color:"var(--text)",letterSpacing:"-0.02em",whiteSpace:"nowrap"},children:y.appName}),(0,n.jsx)("div",{style:{fontSize:11,color:"var(--muted)",marginTop:-1,whiteSpace:"nowrap"},children:y.tagline})]})]}),(0,n.jsxs)("div",{style:{flex:1,overflow:"hidden",display:"flex",flexDirection:"column"},children:[(0,n.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"12px 12px 4px"},children:[(0,n.jsx)(u,{href:"/",active:"/"===h,collapsed:p,icon:(0,n.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[(0,n.jsx)("rect",{x:"1.5",y:"1.5",width:"5",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("rect",{x:"9.5",y:"1.5",width:"5",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("rect",{x:"1.5",y:"9.5",width:"5",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("rect",{x:"9.5",y:"9.5",width:"5",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"})]}),children:"Dashboard"}),!p&&(0,n.jsx)("div",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",color:"var(--subtle)",textTransform:"uppercase",padding:"16px 10px 6px"},children:"Agents"}),p&&(0,n.jsx)("div",{style:{height:1,background:"var(--border)",margin:"10px 4px"}}),0===x.length&&!p&&(0,n.jsx)("div",{style:{padding:"6px 10px",fontSize:12.5,color:"var(--subtle)",fontStyle:"italic"},children:"No agents yet"}),x.map(e=>{var t;let r=h==="/agents/".concat(e.slug),o=null!=(t=d[e.status])?t:"#d4d4d4";return(0,n.jsxs)(a(),{href:"/agents/".concat(e.slug),title:e.name,style:{display:"flex",alignItems:"center",gap:10,padding:p?"7px 0":"8px 12px",justifyContent:p?"center":"flex-start",borderRadius:"var(--radius)",textDecoration:"none",marginBottom:2,background:r?"var(--surface-2)":"transparent",transition:"background 0.12s"},onMouseEnter:e=>{r||(e.currentTarget.style.background="var(--surface-2)")},onMouseLeave:e=>{r||(e.currentTarget.style.background="transparent")},children:[(0,n.jsxs)("div",{style:{position:"relative",flexShrink:0},children:[(0,n.jsx)("div",{style:{width:28,height:28,borderRadius:8,background:e.isBoss?"#171717":"var(--surface-2)",border:e.isBoss?"none":"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:600,color:e.isBoss?"#fff":"var(--text)"},children:e.name.charAt(0).toUpperCase()}),(0,n.jsx)("div",{className:"running"===e.status?"status-running":"",style:{position:"absolute",bottom:-1,right:-1,width:8,height:8,borderRadius:"50%",background:o,border:"2px solid #fff"}})]}),!p&&(0,n.jsx)("div",{style:{flex:1,minWidth:0},children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,fontSize:13,fontWeight:r?600:400,color:"var(--text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.name,e.isBoss&&(0,n.jsx)("span",{style:{fontSize:9,fontWeight:600,color:"#d97706",background:"rgba(217,119,6,0.1)",padding:"1px 4px",borderRadius:3,letterSpacing:"0.04em",flexShrink:0},children:"BOSS"})]})})]},e.id)}),C&&(0,n.jsxs)(a(),{href:"/agents/new",title:"Add agent",style:{display:"flex",alignItems:"center",gap:8,padding:p?"7px 0":"8px 12px",justifyContent:p?"center":"flex-start",borderRadius:8,textDecoration:"none",color:"var(--muted)",fontSize:13,marginTop:4,transition:"color 0.12s, background 0.12s"},onMouseEnter:e=>{e.currentTarget.style.color="var(--text)",e.currentTarget.style.background="var(--surface-2)"},onMouseLeave:e=>{e.currentTarget.style.color="var(--muted)",e.currentTarget.style.background="transparent"},children:[(0,n.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",style:{flexShrink:0},children:(0,n.jsx)("path",{d:"M8 3.5v9M3.5 8h9",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})}),!p&&"Add agent"]})]}),(0,n.jsxs)("div",{style:{padding:"4px 12px 8px",borderTop:"1px solid var(--border)",flexShrink:0},children:[(0,n.jsx)(u,{href:"/settings/mcps",active:"/settings/mcps"===h,collapsed:p,icon:(0,n.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[(0,n.jsx)("rect",{x:"2",y:"2",width:"12",height:"12",rx:"3",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("path",{d:"M5.5 8h5M8 5.5v5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]}),children:"MCP Catalog"}),(0,n.jsx)(u,{href:"/settings/env-vars",active:"/settings/env-vars"===h,collapsed:p,icon:(0,n.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[(0,n.jsx)("rect",{x:"2",y:"5",width:"12",height:"8",rx:"2",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("path",{d:"M5 5V4a3 3 0 016 0v1",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"}),(0,n.jsx)("circle",{cx:"8",cy:"9",r:"1.2",fill:"currentColor"})]}),children:"Env Vars"}),(0,n.jsx)(u,{href:"/jobs",active:"/jobs"===h,collapsed:p,icon:(0,n.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[(0,n.jsx)("circle",{cx:"8",cy:"8",r:"6",stroke:"currentColor",strokeWidth:"1.3"}),(0,n.jsx)("path",{d:"M8 4.5V8l2.5 1.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]}),children:"Jobs"}),(0,n.jsx)(u,{href:"/settings",active:"/settings"===h,collapsed:p,icon:(0,n.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[(0,n.jsx)("path",{d:"M6.86 2h2.28l.32 1.6a5 5 0 011.32.77l1.54-.52.94 1.62-1.22 1.08a5 5 0 010 1.54l1.22 1.08-.94 1.62-1.54-.52a5 5 0 01-1.32.77L9.14 14H6.86l-.32-1.6a5 5 0 01-1.32-.77l-1.54.52-.94-1.62 1.22-1.08a5 5 0 010-1.54L2.74 6.83l.94-1.62 1.54.52a5 5 0 011.32-.77L6.86 2z",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),(0,n.jsx)("circle",{cx:"8",cy:"8",r:"2",stroke:"currentColor",strokeWidth:"1.2"})]}),children:"Settings"})]})]}),(0,n.jsxs)("div",{style:{padding:p?"12px 8px":"12px",borderTop:"1px solid var(--border)",position:"relative"},children:[(0,n.jsxs)("div",{onClick:()=>b(e=>!e),style:{display:"flex",alignItems:"center",gap:10,padding:p?"4px 0":"8px 10px",justifyContent:p?"center":"flex-start",borderRadius:8,cursor:"pointer",transition:"background 0.12s",background:v?"var(--surface-2)":"transparent"},onMouseEnter:e=>{v||(e.currentTarget.style.background="var(--surface-2)")},onMouseLeave:e=>{v||(e.currentTarget.style.background="transparent")},children:[(0,n.jsx)("div",{style:{width:30,height:30,borderRadius:"50%",flexShrink:0,background:"#171717",display:"flex",alignItems:"center",justifyContent:"center",fontSize:12,fontWeight:600,color:"#fff"},children:(w||"?").charAt(0).toUpperCase()}),!p&&(0,n.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,n.jsx)("div",{style:{fontSize:13,fontWeight:500,color:"var(--text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:w}),(0,n.jsx)("div",{style:{fontSize:11,color:"var(--subtle)",textTransform:"capitalize"},children:S})]}),!p&&(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",style:{flexShrink:0,color:"var(--subtle)",transform:v?"rotate(180deg)":"none",transition:"transform 0.15s"},children:(0,n.jsx)("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]}),v&&(0,n.jsxs)("div",{style:{position:"absolute",bottom:p?60:64,left:p?8:12,right:p?8:12,background:"#fff",border:"1px solid var(--border)",borderRadius:10,boxShadow:"var(--shadow-lg)",overflow:"hidden",zIndex:60,minWidth:p?160:void 0},children:[p&&(0,n.jsxs)("div",{style:{padding:"10px 14px",borderBottom:"1px solid var(--border)"},children:[(0,n.jsx)("div",{style:{fontSize:13,fontWeight:500,color:"var(--text)"},children:w}),(0,n.jsx)("div",{style:{fontSize:11,color:"var(--subtle)",textTransform:"capitalize"},children:S})]}),(0,n.jsxs)("button",{onClick:()=>{b(!1),M()},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"10px 14px",background:"transparent",border:"none",color:"#dc2626",fontSize:13,cursor:"pointer",fontFamily:"var(--font-sans)",transition:"background 0.12s"},onMouseEnter:e=>e.currentTarget.style.background="rgba(220,38,38,0.05)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[(0,n.jsx)("svg",{width:"15",height:"15",viewBox:"0 0 16 16",fill:"none",children:(0,n.jsx)("path",{d:"M6 2H4a2 2 0 00-2 2v8a2 2 0 002 2h2M11 11l3-3-3-3M14 8H6",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})}),"Sign out"]})]})]})]}),t]})}function u(e){let{href:t,icon:r,children:o,active:i,collapsed:s,onClick:l}=e,d={display:"flex",alignItems:"center",gap:9,padding:s?"8px 0":"9px 12px",justifyContent:s?"center":"flex-start",borderRadius:"var(--radius)",textDecoration:"none",border:"none",color:i?"var(--text)":"var(--muted)",background:i?"var(--surface-3)":"transparent",fontSize:13,fontWeight:i?600:400,transition:"background 0.12s, color 0.12s",cursor:"pointer",width:"100%",fontFamily:"var(--font-sans)"},c=e=>{i||(e.currentTarget.style.background="var(--surface-2)",e.currentTarget.style.color="var(--text)")},h=e=>{i||(e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--muted)")},u=(0,n.jsxs)(n.Fragment,{children:[r&&(0,n.jsx)("span",{style:{flexShrink:0},children:r}),!s&&o]});return l?(0,n.jsx)("button",{onClick:l,title:s?String(o):void 0,style:d,onMouseEnter:c,onMouseLeave:h,children:u}):(0,n.jsx)(a(),{href:t||"/",title:s?String(o):void 0,style:d,onMouseEnter:c,onMouseLeave:h,children:u})}function x(e){let{children:t}=e;return"/login"===(0,i.usePathname)()?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(l.O,{children:(0,n.jsx)(g,{children:t})})}function g(e){let{children:t}=e,[r,s]=(0,o.useState)(!1),[a,l]=(0,o.useState)(!1),d=(0,i.usePathname)();return(0,o.useEffect)(()=>{let e=()=>l(window.innerWidth<=768);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,o.useEffect)(()=>{s(!1)},[d]),(0,n.jsx)(h,{mobileOpen:r,onMobileClose:()=>s(!1),children:(0,n.jsx)(p,{isMobile:a,onHamburger:()=>s(!0),children:t})})}function p(e){let{children:t,isMobile:r,onHamburger:i}=e,{width:s}=(0,o.useContext)(c);return(0,n.jsxs)("main",{style:{marginLeft:r?0:s,transition:"margin-left 0.25s cubic-bezier(0.16,1,0.3,1)"},children:[r&&(0,n.jsx)("button",{onClick:i,style:{position:"fixed",top:12,left:12,zIndex:48,width:36,height:36,borderRadius:8,background:"#fff",border:"1px solid var(--border)",boxShadow:"var(--shadow-md)",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:"var(--text)"},children:(0,n.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 16 16",fill:"none",children:(0,n.jsx)("path",{d:"M2 4h12M2 8h12M2 12h12",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"})})}),t]})}},3703:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,8761,23)),Promise.resolve().then(r.bind(r,3602))},4492:(e,t,r)=>{"use strict";r.d(t,{A:()=>a,O:()=>s});var n=r(4568),o=r(7620);let i=(0,o.createContext)({username:"",role:null,loading:!0,canEdit:!1,canManageUsers:!1,logout:async()=>{}});function s(e){let{children:t}=e,[r,s]=(0,o.useState)(""),[a,l]=(0,o.useState)(null),[d,c]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/auth/me").then(e=>{if(!e.ok)throw Error();return e.json()}).then(e=>{s(e.username),l(e.role)}).catch(()=>{}).finally(()=>c(!1))},[]);let h=async()=>{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"};return(0,n.jsx)(i.Provider,{value:{username:r,role:a,loading:d,canEdit:"superadmin"===a||"admin"===a||"editor"===a,canManageUsers:"superadmin"===a||"admin"===a,logout:h},children:t})}function a(){return(0,o.useContext)(i)}},7541:(e,t,r)=>{"use strict";var n=r(3041);r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},8761:()=>{}},e=>{e.O(0,[9950,9664,587,18,7358],()=>e(e.s=3703)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[148,169,723,1732,1807,2e3,2148,2231,2450,2849,2920,3004,3083,3180,4145,4350,4400,4571,4622,4860,5177,5915,6381,6554,6742,6858,7157,7574,7758,8489,8673,9223,9515,9561,9796],{1680:()=>{}},_=>{_.O(0,[587,18,7358],()=>_(_.s=1680)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4520],{5535:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>i});var o=t(4568),n=t(7620),a=t(7541);function i(){let[e,r]=(0,n.useState)(""),[t,i]=(0,n.useState)(""),[s,d]=(0,n.useState)(""),[l,u]=(0,n.useState)(!1),c=(0,a.useRouter)(),b=async r=>{r.preventDefault(),d(""),u(!0);try{let r=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})}),o=await r.json();if(!r.ok)return void d(o.error||"Login failed");c.push("/"),c.refresh()}catch(e){d("Network error")}finally{u(!1)}};return(0,o.jsx)("div",{style:{width:"100vw",minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--bg)"},children:(0,o.jsxs)("div",{style:{width:360,background:"#fff",borderRadius:14,border:"1px solid var(--border)",boxShadow:"var(--shadow-lg)",padding:"36px 32px"},children:[(0,o.jsxs)("div",{style:{textAlign:"center",marginBottom:28},children:[(0,o.jsx)("img",{src:"/logo.svg",alt:"SlackHive",style:{width:44,height:44,borderRadius:12,margin:"0 auto 14px",display:"block"}}),(0,o.jsx)("h1",{style:{margin:0,fontSize:20,fontWeight:700,color:"var(--text)",letterSpacing:"-0.02em"},children:"SlackHive"}),(0,o.jsx)("p",{style:{margin:"4px 0 0",fontSize:13,color:"var(--muted)"},children:"Sign in to continue"})]}),(0,o.jsxs)("form",{onSubmit:b,style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Username"}),(0,o.jsx)("input",{type:"text",value:e,onChange:e=>r(e.target.value),autoFocus:!0,autoComplete:"username",style:{width:"100%",padding:"9px 12px",borderRadius:8,border:"1px solid var(--border)",background:"var(--surface)",fontSize:14,color:"var(--text)",outline:"none",fontFamily:"var(--font-sans)",transition:"border-color 0.15s",boxSizing:"border-box"},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"})]}),(0,o.jsxs)("div",{children:[(0,o.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Password"}),(0,o.jsx)("input",{type:"password",value:t,onChange:e=>i(e.target.value),autoComplete:"current-password",style:{width:"100%",padding:"9px 12px",borderRadius:8,border:"1px solid var(--border)",background:"var(--surface)",fontSize:14,color:"var(--text)",outline:"none",fontFamily:"var(--font-sans)",transition:"border-color 0.15s",boxSizing:"border-box"},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"})]}),s&&(0,o.jsx)("div",{style:{fontSize:13,color:"#dc2626",background:"rgba(220,38,38,0.06)",padding:"8px 12px",borderRadius:8,border:"1px solid rgba(220,38,38,0.15)"},children:s}),(0,o.jsx)("button",{type:"submit",disabled:l||!e||!t,style:{width:"100%",padding:"10px",borderRadius:8,border:"none",background:l?"var(--border-2)":"var(--accent)",color:"#fff",fontSize:14,fontWeight:600,cursor:l?"not-allowed":"pointer",fontFamily:"var(--font-sans)",transition:"opacity 0.15s",marginTop:4},children:l?"Signing in...":"Sign in"})]})]})})}},5898:(e,r,t)=>{Promise.resolve().then(t.bind(t,5535))},7541:(e,r,t)=>{"use strict";var o=t(3041);t.o(o,"usePathname")&&t.d(r,{usePathname:function(){return o.usePathname}}),t.o(o,"useRouter")&&t.d(r,{useRouter:function(){return o.useRouter}})}},e=>{e.O(0,[587,18,7358],()=>e(e.s=5898)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{2068:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(7620);let s=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.forwardRef)((e,t)=>{let{color:r="currentColor",size:i=24,strokeWidth:l=2,absoluteStrokeWidth:o,className:d="",children:c,iconNode:h,...x}=e;return(0,n.createElement)("svg",{ref:t,...a,width:i,height:i,stroke:r,strokeWidth:o?24*Number(l)/Number(i):l,className:s("lucide",d),...x},[...h.map(e=>{let[t,r]=e;return(0,n.createElement)(t,r)}),...Array.isArray(c)?c:[c]])}),l=(e,t)=>{let r=(0,n.forwardRef)((r,a)=>{let{className:l,...o}=r;return(0,n.createElement)(i,{ref:a,iconNode:t,className:s("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),l),...o})});return r.displayName="".concat(e),r}},2339:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(4568),s=r(7620),a=r(9664),i=r.n(a),l=r(4492),o=r(2068);let d=(0,o.A)("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),c=(0,o.A)("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),h=(0,o.A)("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),x={running:"#059669",stopped:"#a3a3a3",error:"#dc2626"},g={running:"Running",stopped:"Stopped",error:"Error"};function p(){let[e,t]=(0,s.useState)([]),[r,a]=(0,s.useState)(!0),[o,h]=(0,s.useState)("Welcome to SlackHive"),[x,g]=(0,s.useState)("hierarchy"),{canEdit:p}=(0,l.A)();(0,s.useEffect)(()=>{fetch("/api/agents").then(e=>e.json()).then(t).finally(()=>a(!1)),fetch("/api/settings").then(e=>e.json()).then(e=>{e.dashboardTitle&&h(e.dashboardTitle)}).catch(()=>{})},[]);let y=e.filter(e=>"running"===e.status).length,m=e.filter(e=>"stopped"===e.status).length,b=e.length,k=e.filter(e=>e.isBoss).length,C=e.some(e=>e.isBoss)||e.some(e=>{var t;return(null==(t=e.reportsTo)?void 0:t.length)>0});return(0,n.jsxs)("div",{style:{padding:"36px 40px",maxWidth:1200},className:"fade-up responsive-pad",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:28},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{style:{margin:0,fontSize:26,fontWeight:700,letterSpacing:"-0.03em",color:"var(--text)"},children:o}),(0,n.jsx)("p",{style:{margin:"6px 0 0",color:"var(--muted)",fontSize:14},children:r?"Loading agents…":"".concat(y," of ").concat(b," agent").concat(1!==b?"s":""," online")})]}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[!r&&b>0&&(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",background:"var(--surface-2)",borderRadius:8,padding:3,gap:2,border:"1px solid var(--border)"},children:[(0,n.jsx)(u,{active:"hierarchy"===x,onClick:()=>g("hierarchy"),title:"Hierarchy",children:(0,n.jsx)(d,{size:14})}),(0,n.jsx)(u,{active:"grid"===x,onClick:()=>g("grid"),title:"Grid",children:(0,n.jsx)(c,{size:14})})]}),p&&(0,n.jsxs)(i(),{href:"/agents/new",style:{display:"inline-flex",alignItems:"center",gap:7,background:"var(--accent)",color:"#fff",padding:"10px 20px",borderRadius:8,fontSize:13.5,fontWeight:500,textDecoration:"none",boxShadow:"var(--shadow-sm)",transition:"opacity 0.15s, transform 0.15s"},onMouseEnter:e=>{e.currentTarget.style.opacity="0.85",e.currentTarget.style.transform="translateY(-1px)"},onMouseLeave:e=>{e.currentTarget.style.opacity="1",e.currentTarget.style.transform="translateY(0)"},children:[(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:(0,n.jsx)("path",{d:"M8 3v10M3 8h10",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})}),"New Agent"]})]})]}),!r&&b>0&&(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:14,marginBottom:32},className:"stagger stats-grid",children:[(0,n.jsx)(j,{label:"Total",value:b,sub:"".concat(b," agent").concat(1!==b?"s":""," registered")}),(0,n.jsx)(j,{label:"Running",value:y,color:"#059669",sub:y>0?"All systems healthy":"None active"}),(0,n.jsx)(j,{label:"Stopped",value:m,color:"#a3a3a3",sub:m>0?"".concat(m," offline"):"All online"}),(0,n.jsx)(j,{label:"Boss",value:k||"—",color:"#d97706",sub:k>0?"".concat(k," orchestrator").concat(k>1?"s":""," active"):"No boss assigned"})]}),r?(0,n.jsx)(w,{}):0===b?(0,n.jsx)(S,{}):"hierarchy"===x&&C?(0,n.jsx)(f,{agents:e}):(0,n.jsx)(v,{agents:e})]})}function u(e){let{active:t,onClick:r,title:s,children:a}=e;return(0,n.jsx)("button",{onClick:r,title:s,style:{display:"flex",alignItems:"center",justifyContent:"center",width:30,height:30,borderRadius:6,border:"none",background:t?"#fff":"transparent",color:t?"var(--text)":"var(--muted)",cursor:"pointer",boxShadow:t?"0 1px 3px rgba(0,0,0,0.1)":"none",transition:"all 0.15s"},children:a})}function f(e){let{agents:t}=e,r=t.filter(e=>e.isBoss),s=t.filter(e=>!e.isBoss),a=s.filter(e=>!e.reportsTo||0===e.reportsTo.length),i=new Map;for(let e of r)i.set(e.id,s.filter(t=>{var r;return null==(r=t.reportsTo)?void 0:r.includes(e.id)}));return 0===r.length?(0,n.jsx)(v,{agents:t,label:"All Agents"}):(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:56},children:[r.map(e=>{var t;return(0,n.jsx)(m,{boss:e,reports:null!=(t=i.get(e.id))?t:[]},e.id)}),a.length>0&&(0,n.jsxs)("div",{children:[(0,n.jsx)(y,{label:"Independent"}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(260px, 1fr))",gap:14},children:a.map(e=>(0,n.jsx)(b,{agent:e},e.id))})]})]})}function y(e){let{label:t}=e;return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:20},children:[(0,n.jsx)("div",{style:{fontSize:10,fontWeight:700,letterSpacing:"0.09em",color:"var(--subtle)",textTransform:"uppercase"},children:t}),(0,n.jsx)("div",{style:{flex:1,height:1,background:"var(--border)"}})]})}function m(e){let{boss:t,reports:r}=e,s=r.length,a=260*s+16*Math.max(0,s-1),i=Math.min(360,Math.max(260,a));return(0,n.jsx)("div",{children:(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:s>0?"center":"flex-start"},children:[(0,n.jsx)("div",{style:{width:i,maxWidth:"100%"},children:(0,n.jsx)(b,{agent:t,highlight:!0})}),s>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("svg",{width:Math.max(a,i),height:52,style:{display:"block",overflow:"visible"},children:(()=>{let e=Math.max(a,i),t=e/2,r=Array.from({length:s},(t,r)=>276*r+130+(e-a)/2),l=r[0],o=r[s-1];return(0,n.jsxs)("g",{stroke:"var(--border-2)",strokeWidth:"1.5",fill:"none",children:[(0,n.jsx)("line",{x1:t,y1:0,x2:t,y2:32}),s>1&&(0,n.jsx)("line",{x1:l,y1:32,x2:o,y2:32}),r.map((e,t)=>(0,n.jsx)("line",{x1:e,y1:32,x2:e,y2:52},t))]})})()}),(0,n.jsx)("div",{style:{display:"flex",gap:16,alignItems:"flex-start",width:Math.max(a,i)},children:(0,n.jsx)("div",{style:{display:"flex",gap:16,marginLeft:(Math.max(a,i)-a)/2},children:r.map(e=>{var t,r;return(0,n.jsx)("div",{style:{width:260,flexShrink:0},children:(0,n.jsx)(b,{agent:e,compact:!0,multiReport:(null!=(r=null==(t=e.reportsTo)?void 0:t.length)?r:0)>1})},e.id)})})})]})]})})}function v(e){let{agents:t,label:r="All Agents"}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.06em",color:"var(--subtle)",textTransform:"uppercase",marginBottom:12,paddingLeft:2},children:r}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gap:14},className:"stagger agent-grid",children:t.map(e=>(0,n.jsx)(b,{agent:e},e.id))})]})}function b(e){var t;let{agent:r,highlight:s,compact:a,multiReport:l}=e,o=null!=(t=x[r.status])?t:"#a3a3a3";return(0,n.jsxs)(i(),{href:"/agents/".concat(r.slug),className:"fade-up",style:{display:"block",textDecoration:"none",background:"#fff",border:s?"1.5px solid rgba(217,119,6,0.25)":"none",borderRadius:"var(--radius-lg)",padding:a?"14px 16px":"22px 24px",boxShadow:s?"0 0 0 1px rgba(217,119,6,0.12), var(--shadow-card)":"var(--shadow-card)",transition:"box-shadow 0.2s cubic-bezier(0.16,1,0.3,1), transform 0.2s cubic-bezier(0.16,1,0.3,1)",cursor:"pointer",position:"relative",overflow:"hidden"},onMouseEnter:e=>{let t=e.currentTarget;t.style.boxShadow=s?"0 0 0 1px rgba(217,119,6,0.2), var(--shadow-hover)":"var(--shadow-hover)",t.style.transform="translateY(-3px)"},onMouseLeave:e=>{let t=e.currentTarget;t.style.boxShadow=s?"0 0 0 1px rgba(217,119,6,0.12), var(--shadow-card)":"var(--shadow-card)",t.style.transform="translateY(0)"},children:[r.isBoss&&(0,n.jsx)("div",{style:{position:"absolute",top:0,left:0,right:0,height:2,background:"linear-gradient(90deg, #d97706, #f59e0b)"}}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:a?8:12},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,minWidth:0},children:[(0,n.jsx)("div",{style:{width:a?30:36,height:a?30:36,borderRadius:a?8:10,flexShrink:0,background:r.isBoss?"#171717":"var(--surface-2)",border:r.isBoss?"none":"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:a?12:14,fontWeight:600,color:r.isBoss?"#fff":"var(--text)"},children:r.name.charAt(0).toUpperCase()}),(0,n.jsxs)("div",{style:{minWidth:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[(0,n.jsx)("span",{style:{fontSize:a?13:14.5,fontWeight:600,color:"var(--text)",letterSpacing:"-0.01em"},children:r.name}),r.isBoss&&(0,n.jsx)("span",{style:{fontSize:9.5,fontWeight:600,letterSpacing:"0.04em",background:"rgba(217,119,6,0.1)",color:"#d97706",padding:"2px 6px",borderRadius:4,textTransform:"uppercase"},children:"Boss"}),l&&(0,n.jsx)("span",{style:{fontSize:9,fontWeight:600,letterSpacing:"0.03em",background:"rgba(99,102,241,0.08)",color:"#6366f1",padding:"2px 5px",borderRadius:4},children:"\xd72 bosses"})]}),(0,n.jsxs)("div",{style:{fontSize:11.5,color:"var(--muted)",fontFamily:"var(--font-mono)"},children:["@",r.slug]})]})]}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,flexShrink:0,marginTop:2},children:[(0,n.jsx)("div",{className:"running"===r.status?"status-running":"",style:{width:7,height:7,borderRadius:"50%",background:o}}),(0,n.jsx)("span",{style:{fontSize:11.5,color:o,fontWeight:500},children:g[r.status]})]})]}),(!a||r.description)&&(0,n.jsx)("p",{style:{margin:"0 0 ".concat(a?10:16,"px"),fontSize:12.5,color:"var(--muted)",lineHeight:1.55,display:"-webkit-box",WebkitLineClamp:a?1:2,WebkitBoxOrient:"vertical",overflow:"hidden",minHeight:a?"auto":38},children:r.description||(0,n.jsx)("span",{style:{color:"var(--subtle)",fontStyle:"italic"},children:"No description"})}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingTop:a?10:14,borderTop:"1px solid var(--border)"},children:[(0,n.jsx)("span",{style:{fontSize:11,color:"var(--muted)",fontFamily:"var(--font-mono)",background:"var(--surface-2)",padding:"2px 7px",borderRadius:4},children:r.model.replace("claude-","").split("-20")[0]}),(0,n.jsx)("span",{style:{fontSize:11,color:r.slackBotUserId?"#059669":"var(--subtle)",display:"flex",alignItems:"center",gap:4},children:r.slackBotUserId?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{style:{width:5,height:5,borderRadius:"50%",background:"#059669"}}),"Connected"]}):"Not connected"})]})]})}function j(e){let{label:t,value:r,color:s,sub:a}=e;return(0,n.jsxs)("div",{className:"fade-up",style:{background:"#fff",border:"none",borderRadius:"var(--radius-lg)",padding:"20px 24px",boxShadow:"var(--shadow-card)"},children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:600,letterSpacing:"0.05em",color:"var(--muted)",textTransform:"uppercase",marginBottom:8},children:t}),(0,n.jsx)("div",{style:{fontSize:28,fontWeight:700,color:null!=s?s:"var(--text)",letterSpacing:"-0.03em",lineHeight:1,fontVariantNumeric:"tabular-nums"},children:r}),a&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--subtle)",marginTop:6},children:a})]})}function w(){return(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gap:14},children:[1,2,3].map(e=>(0,n.jsxs)("div",{style:{background:"#fff",borderRadius:"var(--radius-lg)",padding:"22px 24px",boxShadow:"var(--shadow-card)",opacity:1-(e-1)*.2},children:[(0,n.jsxs)("div",{style:{display:"flex",gap:10,marginBottom:16},children:[(0,n.jsx)(k,{w:36,h:36,r:10}),(0,n.jsxs)("div",{style:{flex:1},children:[(0,n.jsx)(k,{w:"55%",h:15,r:5,mb:6}),(0,n.jsx)(k,{w:"35%",h:12,r:4})]})]}),(0,n.jsx)(k,{w:"100%",h:12,r:4,mb:6}),(0,n.jsx)(k,{w:"70%",h:12,r:4})]},e))})}function k(e){let{w:t,h:r,r:s=4,mb:a=0}=e;return(0,n.jsx)("div",{style:{width:t,height:r,borderRadius:s,background:"var(--surface-2)",marginBottom:a}})}function S(){let{canEdit:e}=(0,l.A)();return(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:400,gap:20,textAlign:"center"},children:[(0,n.jsx)("div",{style:{width:72,height:72,borderRadius:20,background:"var(--surface-2)",border:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--muted)"},children:(0,n.jsx)(h,{size:32})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{style:{margin:"0 0 6px",fontSize:18,fontWeight:600,color:"var(--text)",letterSpacing:"-0.02em"},children:"No agents yet"}),(0,n.jsx)("p",{style:{margin:0,fontSize:14,color:"var(--muted)",maxWidth:300},children:e?"Create your first Claude Code agent and connect it to Slack to get started.":"No agents have been configured yet. Ask an admin to set one up."})]}),e&&(0,n.jsxs)(i(),{href:"/agents/new",style:{display:"inline-flex",alignItems:"center",gap:7,background:"var(--accent)",color:"#fff",padding:"10px 22px",borderRadius:8,fontSize:14,fontWeight:500,textDecoration:"none",boxShadow:"var(--shadow-sm)",transition:"opacity 0.15s"},onMouseEnter:e=>e.currentTarget.style.opacity="0.85",onMouseLeave:e=>e.currentTarget.style.opacity="1",children:[(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",children:(0,n.jsx)("path",{d:"M8 3v10M3 8h10",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})}),"Create First Agent"]})]})}},4492:(e,t,r)=>{"use strict";r.d(t,{A:()=>l,O:()=>i});var n=r(4568),s=r(7620);let a=(0,s.createContext)({username:"",role:null,loading:!0,canEdit:!1,canManageUsers:!1,logout:async()=>{}});function i(e){let{children:t}=e,[r,i]=(0,s.useState)(""),[l,o]=(0,s.useState)(null),[d,c]=(0,s.useState)(!0);(0,s.useEffect)(()=>{fetch("/api/auth/me").then(e=>{if(!e.ok)throw Error();return e.json()}).then(e=>{i(e.username),o(e.role)}).catch(()=>{}).finally(()=>c(!1))},[]);let h=async()=>{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"};return(0,n.jsx)(a.Provider,{value:{username:r,role:l,loading:d,canEdit:"superadmin"===l||"admin"===l||"editor"===l,canManageUsers:"superadmin"===l||"admin"===l,logout:h},children:t})}function l(){return(0,s.useContext)(a)}},4902:(e,t,r)=>{Promise.resolve().then(r.bind(r,2339))}},e=>{e.O(0,[9664,587,18,7358],()=>e(e.s=4902)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8247],{1225:(e,r,t)=>{Promise.resolve().then(t.bind(t,2734))},2068:(e,r,t)=>{"use strict";t.d(r,{A:()=>l});var n=t(7620);let o=function(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return r.filter((e,r,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===r).join(" ").trim()};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.forwardRef)((e,r)=>{let{color:t="currentColor",size:i=24,strokeWidth:l=2,absoluteStrokeWidth:s,className:d="",children:c,iconNode:u,...p}=e;return(0,n.createElement)("svg",{ref:r,...a,width:i,height:i,stroke:t,strokeWidth:s?24*Number(l)/Number(i):l,className:o("lucide",d),...p},[...u.map(e=>{let[r,t]=e;return(0,n.createElement)(r,t)}),...Array.isArray(c)?c:[c]])}),l=(e,r)=>{let t=(0,n.forwardRef)((t,a)=>{let{className:l,...s}=t;return(0,n.createElement)(i,{ref:a,iconNode:r,className:o("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),l),...s})});return t.displayName="".concat(e),t}},2734:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>l});var n=t(4568),o=t(7620),a=t(4492);let i=(0,t(2068).A)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);function l(){let{canEdit:e}=(0,a.A)(),[r,t]=(0,o.useState)([]),[l,s]=(0,o.useState)(!0),[d,c]=(0,o.useState)(!1),[u,p]=(0,o.useState)({key:"",value:"",description:""}),[f,v]=(0,o.useState)(null),[h,g]=(0,o.useState)(!1),[y,x]=(0,o.useState)(""),m=()=>{s(!0),fetch("/api/env-vars").then(e=>e.json()).then(t).catch(()=>{}).finally(()=>s(!1))};(0,o.useEffect)(()=>{m()},[]);let b=()=>{p({key:"",value:"",description:""}),v(null),c(!1),x("")},k=async()=>{if(!u.key)return void x("Key is required");if(!f&&!u.value)return void x("Value is required");g(!0),x("");try{let r;if(f){let e={};u.value&&(e.value=u.value),void 0!==u.description&&(e.description=u.description),r=await fetch("/api/env-vars/".concat(f),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}else r=await fetch("/api/env-vars",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});if(!r.ok){var e;let t=await r.json();throw Error(null!=(e=t.error)?e:"Failed")}b(),m()}catch(e){x(e.message)}finally{g(!1)}},j=async e=>{confirm('Delete "'.concat(e,'"? MCPs referencing it will stop receiving this value.'))&&(await fetch("/api/env-vars/".concat(e),{method:"DELETE"}),m())},S={width:"100%",background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:7,padding:"8px 11px",color:"var(--text)",fontSize:13,fontFamily:"var(--font-sans)",outline:"none",boxSizing:"border-box",transition:"border-color 0.15s"};return(0,n.jsxs)("div",{style:{padding:"32px 36px",maxWidth:860},className:"fade-up",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",marginBottom:28},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontSize:11.5,color:"var(--muted)",marginBottom:4},children:"Settings"}),(0,n.jsx)("h1",{style:{margin:0,fontSize:22,fontWeight:600,letterSpacing:"-0.02em",color:"var(--text)"},children:"Env Vars"}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:13,color:"var(--muted)"},children:"Named secrets for MCP servers — values are write-only, never shown after saving"})]}),e&&!d&&(0,n.jsxs)("button",{onClick:()=>c(!0),style:{display:"inline-flex",alignItems:"center",gap:6,background:"var(--accent)",color:"#fff",padding:"8px 16px",borderRadius:8,border:"none",fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"var(--font-sans)"},onMouseEnter:e=>e.currentTarget.style.opacity="0.85",onMouseLeave:e=>e.currentTarget.style.opacity="1",children:[(0,n.jsx)("span",{style:{fontSize:16,lineHeight:1,marginTop:-1},children:"+"}),"Add Env Var"]})]}),d&&(0,n.jsxs)("div",{style:{background:"var(--surface)",border:"1px solid var(--border)",borderRadius:14,padding:28,marginBottom:20},children:[(0,n.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:18},children:[(0,n.jsx)("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text)"},children:f?"Edit ".concat(f):"New Env Var"}),(0,n.jsx)("button",{onClick:b,style:{background:"none",border:"none",color:"var(--muted)",fontSize:18,cursor:"pointer"},children:"\xd7"})]}),y&&(0,n.jsx)("div",{style:{fontSize:12,color:"#dc2626",background:"rgba(220,38,38,0.06)",padding:"8px 12px",borderRadius:6,marginBottom:14},children:y}),(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Key *"}),(0,n.jsx)("input",{value:u.key,onChange:e=>p(r=>({...r,key:e.target.value.toUpperCase().replace(/[^A-Z0-9_]/g,"_")})),placeholder:"REDSHIFT_DATABASE_URL",readOnly:!!f,style:{...S,fontFamily:"var(--font-mono)",opacity:f?.6:1},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"}),(0,n.jsx)("p",{style:{margin:"3px 0 0",fontSize:11,color:"var(--subtle)"},children:"Uppercase letters, digits, underscores"})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:["Value ",f?(0,n.jsx)("span",{style:{fontWeight:400},children:"(leave blank to keep existing)"}):"*"]}),(0,n.jsx)("input",{type:"password",value:u.value,onChange:e=>p(r=>({...r,value:e.target.value})),placeholder:f?"••••••••":"Enter secret value",style:{...S,fontFamily:"var(--font-mono)"},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Description"}),(0,n.jsx)("input",{value:u.description,onChange:e=>p(r=>({...r,description:e.target.value})),placeholder:"What is this secret used for?",style:S,onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"})]})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:10,marginTop:20},children:[(0,n.jsx)("button",{onClick:k,disabled:h,style:{background:h?"var(--border)":"var(--accent)",color:"#fff",border:"none",borderRadius:7,padding:"9px 22px",fontSize:13,fontWeight:500,cursor:h?"not-allowed":"pointer",fontFamily:"var(--font-sans)"},children:h?"Saving…":f?"Update":"Save"}),(0,n.jsx)("button",{onClick:b,style:{background:"transparent",color:"var(--muted)",border:"1px solid var(--border)",borderRadius:7,padding:"9px 22px",fontSize:13,cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Cancel"})]})]}),l?(0,n.jsx)("div",{style:{color:"var(--muted)",fontSize:13},children:"Loading…"}):0!==r.length||d?(0,n.jsx)("div",{style:{border:"1px solid var(--border)",borderRadius:12,overflow:"hidden"},children:r.map((t,o)=>{var a;return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,padding:"13px 16px",borderBottom:o<r.length-1?"1px solid var(--border)":"none",transition:"background 0.12s"},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.02)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[(0,n.jsx)("code",{style:{fontSize:12.5,fontFamily:"var(--font-mono)",fontWeight:600,color:"var(--text)",flexShrink:0},children:t.key}),(0,n.jsx)("span",{style:{flex:1,fontSize:12,color:"var(--muted)",fontStyle:t.description?"normal":"italic"},children:null!=(a=t.description)?a:"No description"}),(0,n.jsx)("span",{style:{fontSize:11,color:"var(--subtle)",flexShrink:0},children:new Date(t.updatedAt).toLocaleDateString()}),e&&(0,n.jsx)("button",{onClick:()=>{var e;v(t.key),p({key:t.key,value:"",description:null!=(e=t.description)?e:""}),c(!0)},style:{background:"none",border:"none",color:"var(--accent)",fontSize:12,cursor:"pointer",fontFamily:"var(--font-sans)",padding:"3px 8px",borderRadius:5},children:"Edit"}),e&&(0,n.jsx)("button",{onClick:()=>j(t.key),style:{background:"none",border:"none",color:"#ef4444",fontSize:12,cursor:"pointer",fontFamily:"var(--font-sans)",padding:"3px 8px",borderRadius:5},children:"Delete"})]},t.key)})}):(0,n.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:12,padding:"48px",textAlign:"center",color:"var(--subtle)"},children:[(0,n.jsx)("div",{style:{marginBottom:10,color:"var(--subtle)"},children:(0,n.jsx)(i,{size:28})}),(0,n.jsx)("p",{style:{margin:"0 0 4px",fontSize:15,fontWeight:500,color:"var(--muted)"},children:"No env vars yet"}),(0,n.jsx)("p",{style:{margin:"0 0 16px",fontSize:13},children:"Add secrets here and reference them in MCP configs instead of pasting raw values."}),e&&(0,n.jsx)("button",{onClick:()=>c(!0),style:{background:"var(--accent)",color:"#fff",border:"none",borderRadius:8,padding:"8px 20px",fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Add First Env Var"})]})]})}},4492:(e,r,t)=>{"use strict";t.d(r,{A:()=>l,O:()=>i});var n=t(4568),o=t(7620);let a=(0,o.createContext)({username:"",role:null,loading:!0,canEdit:!1,canManageUsers:!1,logout:async()=>{}});function i(e){let{children:r}=e,[t,i]=(0,o.useState)(""),[l,s]=(0,o.useState)(null),[d,c]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/auth/me").then(e=>{if(!e.ok)throw Error();return e.json()}).then(e=>{i(e.username),s(e.role)}).catch(()=>{}).finally(()=>c(!1))},[]);let u=async()=>{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"};return(0,n.jsx)(a.Provider,{value:{username:t,role:l,loading:d,canEdit:"superadmin"===l||"admin"===l||"editor"===l,canManageUsers:"superadmin"===l||"admin"===l,logout:u},children:r})}function l(){return(0,o.useContext)(a)}}},e=>{e.O(0,[587,18,7358],()=>e(e.s=1225)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5894],{2068:(e,r,t)=>{"use strict";t.d(r,{A:()=>l});var n=t(7620);let o=function(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return r.filter((e,r,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===r).join(" ").trim()};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.forwardRef)((e,r)=>{let{color:t="currentColor",size:i=24,strokeWidth:l=2,absoluteStrokeWidth:s,className:d="",children:c,iconNode:u,...p}=e;return(0,n.createElement)("svg",{ref:r,...a,width:i,height:i,stroke:t,strokeWidth:s?24*Number(l)/Number(i):l,className:o("lucide",d),...p},[...u.map(e=>{let[r,t]=e;return(0,n.createElement)(r,t)}),...Array.isArray(c)?c:[c]])}),l=(e,r)=>{let t=(0,n.forwardRef)((t,a)=>{let{className:l,...s}=t;return(0,n.createElement)(i,{ref:a,iconNode:r,className:o("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),l),...s})});return t.displayName="".concat(e),t}},4492:(e,r,t)=>{"use strict";t.d(r,{A:()=>l,O:()=>i});var n=t(4568),o=t(7620);let a=(0,o.createContext)({username:"",role:null,loading:!0,canEdit:!1,canManageUsers:!1,logout:async()=>{}});function i(e){let{children:r}=e,[t,i]=(0,o.useState)(""),[l,s]=(0,o.useState)(null),[d,c]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/auth/me").then(e=>{if(!e.ok)throw Error();return e.json()}).then(e=>{i(e.username),s(e.role)}).catch(()=>{}).finally(()=>c(!1))},[]);let u=async()=>{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"};return(0,n.jsx)(a.Provider,{value:{username:t,role:l,loading:d,canEdit:"superadmin"===l||"admin"===l||"editor"===l,canManageUsers:"superadmin"===l||"admin"===l,logout:u},children:r})}function l(){return(0,o.useContext)(a)}},4990:(e,r,t)=>{Promise.resolve().then(t.bind(t,9187))},9187:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(4568),o=t(7620),a=t(4492);let i=(0,t(2068).A)("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),l={name:"",uiType:"stdio",description:"",enabled:!0,command:"",args:"",envEntries:[],tsSource:"// MCP server TypeScript source\n// See: https://modelcontextprotocol.io/docs\n",url:"",headerEntries:[]};function s(){let{canEdit:e}=(0,a.A)(),[r,t]=(0,o.useState)([]),[s,m]=(0,o.useState)(!0),[g,h]=(0,o.useState)(l),[f,x]=(0,o.useState)(!1),[y,b]=(0,o.useState)(""),[j,S]=(0,o.useState)(null),[k,C]=(0,o.useState)(!1),[E,z]=(0,o.useState)([]),[T,w]=(0,o.useState)({});(0,o.useEffect)(()=>{R()},[]),(0,o.useEffect)(()=>{fetch("/api/env-vars").then(e=>e.json()).then(e=>z(e.map(e=>e.key))).catch(()=>{})},[]);let R=async()=>{m(!0);try{let e=await fetch("/api/mcps");t(await e.json())}finally{m(!1)}},A=e=>Object.fromEntries(e.filter(e=>"value"===e.mode&&e.key).map(e=>[e.key,e.val])),F=e=>Object.fromEntries(e.filter(e=>"ref"===e.mode&&e.key&&e.val).map(e=>[e.key,e.val])),B=async e=>{e.preventDefault(),x(!0),b("");try{let e,t=await fetch(j?"/api/mcps/".concat(j):"/api/mcps",{method:j?"PATCH":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:g.name,type:(e=g.uiType,"typescript"===e?"stdio":e),description:g.description||void 0,enabled:g.enabled,config:(e=>{if("typescript"===e.uiType){let r=A(e.envEntries),t=F(e.envEntries),n={command:"tsx",tsSource:e.tsSource};return Object.keys(r).length>0&&(n.env=r),Object.keys(t).length>0&&(n.envRefs=t),n}if("stdio"===e.uiType){let r={command:e.command};e.args.trim()&&(r.args=e.args.split(",").map(e=>e.trim()).filter(Boolean));let t=A(e.envEntries),n=F(e.envEntries);return Object.keys(t).length>0&&(r.env=t),Object.keys(n).length>0&&(r.envRefs=n),r}let r={url:e.url},t={},n={};for(let r of e.headerEntries)r.name&&("value"===r.mode?t[r.name]=r.val:(t[r.name]=r.prefix,n[r.name]=r.val));return Object.keys(t).length>0&&(r.headers=t),Object.keys(n).length>0&&(r.envRefs=n),r})(g)})});if(!t.ok){var r;let e=await t.json();throw Error(null!=(r=e.error)?r:"Failed")}P(),await R()}catch(e){b(e.message)}finally{x(!1)}},O=async e=>{confirm("Remove this MCP server from the catalog?")&&(await fetch("/api/mcps/".concat(e),{method:"DELETE"}),R())},M=async e=>{await fetch("/api/mcps/".concat(e.id),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:!e.enabled})}),R()},N=async e=>{w(r=>({...r,[e.id]:"testing"}));try{let r=await fetch("/api/mcps/".concat(e.id,"/test"),{method:"POST"}),t=await r.json();w(r=>({...r,[e.id]:t}))}catch(r){w(r=>({...r,[e.id]:{ok:!1,error:"Request failed"}}))}},P=()=>{h(l),S(null),C(!1),b("")},W=(e,r)=>h(t=>({...t,[e]:r})),L=()=>h(e=>({...e,envEntries:[...e.envEntries,{key:"",mode:"value",val:""}]})),I=e=>h(r=>({...r,envEntries:r.envEntries.filter((r,t)=>t!==e)})),_=(e,r)=>h(t=>({...t,envEntries:t.envEntries.map((t,n)=>n===e?{...t,...r}:t)}));return(0,n.jsxs)("div",{style:{padding:"32px 36px",maxWidth:860},className:"fade-up",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",marginBottom:28},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontSize:11.5,color:"var(--muted)",marginBottom:4},children:"Settings"}),(0,n.jsx)("h1",{style:{margin:0,fontSize:22,fontWeight:600,letterSpacing:"-0.02em",color:"var(--text)"},children:"MCP Catalog"}),(0,n.jsxs)("p",{style:{margin:"4px 0 0",fontSize:13,color:"var(--muted)"},children:[r.length," server",1!==r.length?"s":""," \xb7 available to all agents"]})]}),e&&!k&&(0,n.jsxs)("button",{onClick:()=>C(!0),style:{display:"inline-flex",alignItems:"center",gap:6,background:"var(--accent)",color:"#fff",padding:"8px 16px",borderRadius:8,border:"none",fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"var(--font-sans)",transition:"opacity 0.15s"},onMouseEnter:e=>e.currentTarget.style.opacity="0.85",onMouseLeave:e=>e.currentTarget.style.opacity="1",children:[(0,n.jsx)("span",{style:{fontSize:16,lineHeight:1,marginTop:-1},children:"+"}),"Add Server"]})]}),s?(0,n.jsx)("div",{style:{color:"var(--muted)",fontSize:13},children:"Loading…"}):0!==r.length||k?(0,n.jsx)("div",{style:{border:"1px solid var(--border)",borderRadius:12,overflow:"hidden",marginBottom:20},children:r.map((t,o)=>(0,n.jsx)(u,{server:t,isLast:o===r.length-1,onEdit:()=>(e=>{var r,t,n,o,a,i,s;let d=e.config,c="string"==typeof d.tsSource,u=null!=(r=d.env)?r:{},p=null!=(t=d.envRefs)?t:{},v=[...Object.entries(u).map(e=>{let[r,t]=e;return{key:r,mode:"value",val:t}}),...Object.entries(p).map(e=>{let[r,t]=e;return{key:r,mode:"ref",val:t}})],m=null!=(n=d.headers)?n:{},g=null!=(o=d.envRefs)?o:{},f=Object.entries(m).map(e=>{let[r,t]=e;return void 0!==g[r]?{name:r,mode:"ref",val:g[r],prefix:t}:{name:r,mode:"value",val:t,prefix:""}});h({name:e.name,uiType:c?"typescript":e.type,description:null!=(a=e.description)?a:"",enabled:e.enabled,command:null!=(i=d.command)?i:"",args:Array.isArray(d.args)?d.args.join(", "):"",envEntries:v,tsSource:c?d.tsSource:l.tsSource,url:null!=(s=d.url)?s:"",headerEntries:f}),S(e.id),C(!0)})(t),onDelete:()=>O(t.id),onToggle:()=>M(t),onTest:()=>N(t),testResult:T[t.id],canEdit:e},t.id))}):(0,n.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:12,padding:"48px",textAlign:"center",color:"var(--subtle)"},children:[(0,n.jsx)("div",{style:{marginBottom:10,color:"var(--subtle)"},children:(0,n.jsx)(i,{size:28})}),(0,n.jsx)("p",{style:{margin:"0 0 4px",fontSize:15,fontWeight:500,color:"var(--muted)"},children:"No MCP servers yet"}),(0,n.jsx)("p",{style:{margin:"0 0 16px",fontSize:13},children:"Add servers to the catalog to enable agent tools."}),e&&(0,n.jsx)("button",{onClick:()=>C(!0),style:{background:"var(--accent)",color:"#fff",border:"none",borderRadius:8,padding:"8px 20px",fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Add First Server"})]}),k&&(0,n.jsxs)("div",{style:{background:"var(--surface)",border:"1px solid var(--border)",borderRadius:14,padding:"28px",marginTop:4},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:20},children:[(0,n.jsx)("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text)"},children:j?"Edit Server":"Add MCP Server"}),(0,n.jsx)("button",{onClick:P,style:{background:"none",border:"none",cursor:"pointer",color:"var(--muted)",fontSize:18,fontFamily:"var(--font-sans)"},children:"\xd7"})]}),y&&(0,n.jsx)("div",{style:{background:"rgba(239,68,68,0.1)",border:"1px solid rgba(239,68,68,0.25)",borderRadius:7,padding:"9px 13px",marginBottom:16,fontSize:13,color:"#f87171"},children:y}),(0,n.jsxs)("form",{onSubmit:B,children:[(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14,marginBottom:14},children:[(0,n.jsxs)(p,{label:"Name *",required:!0,children:[(0,n.jsx)("input",{value:g.name,onChange:e=>W("name",e.target.value),placeholder:"redshift-mcp",required:!0,...v()}),(0,n.jsxs)("small",{style:{color:"var(--subtle)",fontSize:11,marginTop:3,display:"block"},children:["Tool pattern: ",(0,n.jsx)("code",{style:{fontFamily:"var(--font-mono)"},children:"mcp__name__tool"})]})]}),(0,n.jsx)(p,{label:"Transport Type",children:(0,n.jsxs)("select",{value:g.uiType,onChange:e=>W("uiType",e.target.value),...v(),children:[(0,n.jsx)("option",{value:"stdio",children:"stdio — local subprocess"}),(0,n.jsx)("option",{value:"typescript",children:"TypeScript — inline script"}),(0,n.jsx)("option",{value:"sse",children:"SSE — remote Server-Sent Events"}),(0,n.jsx)("option",{value:"http",children:"HTTP — remote HTTP transport"})]})})]}),(0,n.jsx)(p,{label:"Description",style:{marginBottom:14},children:(0,n.jsx)("input",{value:g.description,onChange:e=>W("description",e.target.value),placeholder:"What does this MCP server provide?",...v()})}),"stdio"===g.uiType&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p,{label:"Command *",style:{marginBottom:14},children:(0,n.jsx)("input",{value:g.command,onChange:e=>W("command",e.target.value),placeholder:"node",required:!0,...v("var(--font-mono)")})}),(0,n.jsx)(p,{label:"Arguments",hint:"Comma-separated",style:{marginBottom:14},children:(0,n.jsx)("input",{value:g.args,onChange:e=>W("args",e.target.value),placeholder:"/path/to/server.js, --port, 3000",...v("var(--font-mono)")})}),(0,n.jsx)(d,{entries:g.envEntries,envVarKeys:E,onAdd:L,onRemove:I,onUpdate:_})]}),"typescript"===g.uiType&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p,{label:"TypeScript Source *",style:{marginBottom:14},hint:"The runner saves this to disk and executes it with tsx. Must implement the MCP stdio protocol.",children:(0,n.jsx)("textarea",{value:g.tsSource,onChange:e=>W("tsSource",e.target.value),rows:14,required:!0,...v("var(--font-mono)")})}),(0,n.jsx)(d,{entries:g.envEntries,envVarKeys:E,onAdd:L,onRemove:I,onUpdate:_})]}),("sse"===g.uiType||"http"===g.uiType)&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p,{label:"URL *",style:{marginBottom:14},children:(0,n.jsx)("input",{value:g.url,onChange:e=>W("url",e.target.value),placeholder:"https://mcp.example.com/sse",required:!0,type:"url",...v("var(--font-mono)")})}),(0,n.jsx)(c,{entries:g.headerEntries,envVarKeys:E,onAdd:()=>h(e=>({...e,headerEntries:[...e.headerEntries,{name:"",mode:"value",val:"",prefix:""}]})),onRemove:e=>h(r=>({...r,headerEntries:r.headerEntries.filter((r,t)=>t!==e)})),onUpdate:(e,r)=>h(t=>({...t,headerEntries:t.headerEntries.map((t,n)=>n===e?{...t,...r}:t)}))})]}),(0,n.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:9,cursor:"pointer",marginBottom:20},children:[(0,n.jsx)("input",{type:"checkbox",checked:g.enabled,onChange:e=>W("enabled",e.target.checked),style:{accentColor:"var(--accent)",width:14,height:14}}),(0,n.jsx)("span",{style:{fontSize:13,color:"var(--muted)"},children:"Enabled — available for agents to use"})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:10},children:[(0,n.jsx)("button",{type:"submit",disabled:f,style:{background:f?"var(--border)":"var(--accent)",color:"#fff",border:"none",borderRadius:7,padding:"9px 22px",fontSize:13,fontWeight:500,cursor:f?"not-allowed":"pointer",fontFamily:"var(--font-sans)",transition:"opacity 0.15s"},children:f?"Saving…":j?"Update Server":"Add Server"}),(0,n.jsx)("button",{type:"button",onClick:P,style:{background:"transparent",color:"var(--muted)",border:"1px solid var(--border)",borderRadius:7,padding:"9px 22px",fontSize:13,cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Cancel"})]})]})]})]})}function d(e){let{entries:r,envVarKeys:t,onAdd:o,onRemove:a,onUpdate:i}=e;return(0,n.jsxs)("div",{style:{marginBottom:14},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:6},children:[(0,n.jsx)("label",{style:{fontSize:12,fontWeight:500,color:"var(--muted)"},children:"Environment Variables"}),(0,n.jsx)("button",{type:"button",onClick:o,style:{background:"none",border:"1px solid var(--border)",borderRadius:5,color:"var(--muted)",fontSize:11,padding:"2px 10px",cursor:"pointer",fontFamily:"var(--font-sans)"},children:"+ Add"})]}),0===r.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--subtle)",margin:0,fontStyle:"italic"},children:"No env vars — click + Add to inject variables into the subprocess."}):(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6},children:r.map((e,r)=>(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr auto 1fr auto",gap:6,alignItems:"center"},children:[(0,n.jsx)("input",{value:e.key,onChange:e=>i(r,{key:e.target.value}),placeholder:"KEY_NAME",style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:"var(--text)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none"}}),(0,n.jsxs)("select",{value:e.mode,onChange:e=>i(r,{mode:e.target.value,val:""}),style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 8px",color:"var(--muted)",fontSize:11.5,fontFamily:"var(--font-sans)",cursor:"pointer",outline:"none"},children:[(0,n.jsx)("option",{value:"value",children:"Custom value"}),(0,n.jsx)("option",{value:"ref",children:"From env vars"})]}),"value"===e.mode?(0,n.jsx)("input",{type:"password",value:e.val,onChange:e=>i(r,{val:e.target.value}),placeholder:"********"===e.val?"Current value hidden":"Enter value",style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:"var(--text)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none"}}):(0,n.jsxs)("select",{value:e.val,onChange:e=>i(r,{val:e.target.value}),style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:e.val?"var(--text)":"var(--subtle)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none",cursor:"pointer"},children:[(0,n.jsx)("option",{value:"",children:"— pick env var —"}),t.map(e=>(0,n.jsx)("option",{value:e,children:e},e)),0===t.length&&(0,n.jsx)("option",{disabled:!0,children:"No env vars — add in Settings → Env Vars"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>a(r),style:{background:"none",border:"none",color:"#ef4444",fontSize:14,cursor:"pointer",padding:"4px 6px",lineHeight:1},children:"\xd7"})]},r))})]})}function c(e){let{entries:r,envVarKeys:t,onAdd:o,onRemove:a,onUpdate:i}=e;return(0,n.jsxs)("div",{style:{marginBottom:14},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:6},children:[(0,n.jsx)("label",{style:{fontSize:12,fontWeight:500,color:"var(--muted)"},children:"Headers"}),(0,n.jsx)("button",{type:"button",onClick:o,style:{background:"none",border:"1px solid var(--border)",borderRadius:5,color:"var(--muted)",fontSize:11,padding:"2px 10px",cursor:"pointer",fontFamily:"var(--font-sans)"},children:"+ Add"})]}),0===r.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--subtle)",margin:0,fontStyle:"italic"},children:"No headers — click + Add to include HTTP headers (e.g. Authorization)."}):(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6},children:r.map((e,r)=>(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr auto 1fr auto",gap:6,alignItems:"center"},children:[(0,n.jsx)("input",{value:e.name,onChange:e=>i(r,{name:e.target.value}),placeholder:"Authorization",style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:"var(--text)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none"}}),(0,n.jsxs)("select",{value:e.mode,onChange:e=>i(r,{mode:e.target.value,val:"",prefix:""}),style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 8px",color:"var(--muted)",fontSize:11.5,fontFamily:"var(--font-sans)",cursor:"pointer",outline:"none"},children:[(0,n.jsx)("option",{value:"value",children:"Static value"}),(0,n.jsx)("option",{value:"ref",children:"From env var"})]}),"value"===e.mode?(0,n.jsx)("input",{value:e.val,onChange:e=>i(r,{val:e.target.value}),placeholder:"authorization"===e.name.toLowerCase()?"Bearer sk-...":"value",style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:"var(--text)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none"}}):(0,n.jsxs)("select",{value:e.val,onChange:e=>i(r,{val:e.target.value}),style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"6px 9px",color:e.val?"var(--text)":"var(--subtle)",fontSize:12.5,fontFamily:"var(--font-mono)",outline:"none",cursor:"pointer"},children:[(0,n.jsx)("option",{value:"",children:"— pick env var —"}),t.map(e=>(0,n.jsx)("option",{value:e,children:e},e)),0===t.length&&(0,n.jsx)("option",{disabled:!0,children:"No env vars — add in Settings → Env Vars"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>a(r),style:{background:"none",border:"none",color:"#ef4444",fontSize:14,cursor:"pointer",padding:"4px 6px",lineHeight:1},children:"\xd7"})]}),"ref"===e.mode&&(0,n.jsxs)("div",{style:{paddingLeft:2,display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)("span",{style:{fontSize:11,color:"var(--subtle)",whiteSpace:"nowrap"},children:"Prefix (optional):"}),(0,n.jsx)("input",{value:e.prefix,onChange:e=>i(r,{prefix:e.target.value}),placeholder:'e.g. "Bearer "',style:{background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,padding:"4px 9px",color:"var(--text)",fontSize:12,fontFamily:"var(--font-mono)",outline:"none",width:180}}),(0,n.jsx)("span",{style:{fontSize:11,color:"var(--subtle)"},children:"+ value of env var"})]})]},r))})]})}function u(e){var r,t,o;let{server:a,isLast:i,onEdit:l,onDelete:s,onToggle:d,onTest:c,testResult:u,canEdit:p}=e,v=a.config,g="string"==typeof v.tsSource,h="stdio"===a.type?g?"[TypeScript inline script]":"".concat(v.command," ").concat(Array.isArray(v.args)?v.args.join(" "):"").trim():String(null!=(r=v.url)?r:""),f=Object.keys(null!=(t=v.env)?t:{}).length+Object.keys(null!=(o=v.envRefs)?o:{}).length;return(0,n.jsxs)("div",{style:{borderBottom:i?"none":"1px solid var(--border)",opacity:a.enabled?1:.55},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,padding:"13px 16px",transition:"background 0.12s"},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.02)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[(0,n.jsx)("span",{style:{fontSize:10.5,fontFamily:"var(--font-mono)",fontWeight:500,background:"var(--border)",color:"var(--muted)",padding:"2px 8px",borderRadius:5,flexShrink:0,letterSpacing:"0.02em"},children:g?"ts":a.type}),(0,n.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{style:{fontSize:13.5,fontWeight:600,color:"var(--text)"},children:a.name}),!a.enabled&&(0,n.jsx)("span",{style:{fontSize:10.5,color:"var(--subtle)",background:"var(--border)",padding:"1px 6px",borderRadius:4},children:"disabled"}),f>0&&(0,n.jsxs)("span",{style:{fontSize:10.5,color:"var(--muted)",background:"var(--surface-2)",padding:"1px 6px",borderRadius:4,border:"1px solid var(--border)"},children:[f," env var",1!==f?"s":""]})]}),a.description&&(0,n.jsx)("p",{style:{margin:"1px 0 0",fontSize:12,color:"var(--muted)"},children:a.description}),(0,n.jsx)("p",{style:{margin:"2px 0 0",fontSize:11.5,color:"var(--subtle)",fontFamily:"var(--font-mono)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:6,flexShrink:0,alignItems:"center"},children:[(0,n.jsx)(m,{onClick:c,color:"var(--muted)",disabled:!1,children:"testing"===u?"Testing…":"Test"}),(0,n.jsx)(m,{onClick:d,color:"var(--muted)",disabled:!p,children:a.enabled?"Disable":"Enable"}),p&&(0,n.jsx)(m,{onClick:l,color:"var(--accent)",children:"Edit"}),p&&(0,n.jsx)(m,{onClick:s,color:"#ef4444",children:"Delete"})]})]}),u&&"testing"!==u&&(0,n.jsxs)("div",{style:{margin:"0 16px 10px",padding:"8px 12px",borderRadius:7,fontSize:12,background:u.ok?"rgba(5,150,105,0.08)":"rgba(239,68,68,0.08)",border:"1px solid ".concat(u.ok?"rgba(5,150,105,0.25)":"rgba(239,68,68,0.25)"),color:u.ok?"#059669":"#ef4444"},children:[u.ok?"✓ ":"✗ ",u.ok?u.message:u.error]})]})}function p(e){let{label:r,hint:t,children:o,style:a,required:i}=e;return(0,n.jsxs)("div",{style:a,children:[(0,n.jsxs)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:[r,i&&(0,n.jsx)("span",{style:{color:"#ef4444",marginLeft:2},children:"*"})]}),o,t&&(0,n.jsx)("p",{style:{margin:"3px 0 0",fontSize:11,color:"var(--subtle)"},children:t})]})}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"var(--font-sans)";return{style:{width:"100%",background:"var(--surface-2)",border:"1px solid var(--border)",borderRadius:7,padding:"8px 11px",color:"var(--text)",fontSize:13,fontFamily:e,outline:"none",resize:"vertical",transition:"border-color 0.15s"},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--border)"}}function m(e){let{children:r,onClick:t,color:o,disabled:a}=e;return(0,n.jsx)("button",{onClick:t,disabled:a,style:{background:"none",border:"none",cursor:a?"not-allowed":"pointer",opacity:a?.4:1,fontSize:12,color:null!=o?o:"var(--muted)",fontFamily:"var(--font-sans)",padding:"3px 8px",borderRadius:5,transition:"background 0.12s, color 0.12s"},onMouseEnter:e=>{e.currentTarget.style.background="rgba(255,255,255,0.06)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent"},children:r})}}},e=>{e.O(0,[587,18,7358],()=>e(e.s=4990)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4662],{2804:(e,t,r)=>{Promise.resolve().then(r.bind(r,5183))},4492:(e,t,r)=>{"use strict";r.d(t,{A:()=>s,O:()=>i});var n=r(4568),o=r(7620);let a=(0,o.createContext)({username:"",role:null,loading:!0,canEdit:!1,canManageUsers:!1,logout:async()=>{}});function i(e){let{children:t}=e,[r,i]=(0,o.useState)(""),[s,l]=(0,o.useState)(null),[d,c]=(0,o.useState)(!0);(0,o.useEffect)(()=>{fetch("/api/auth/me").then(e=>{if(!e.ok)throw Error();return e.json()}).then(e=>{i(e.username),l(e.role)}).catch(()=>{}).finally(()=>c(!1))},[]);let u=async()=>{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"};return(0,n.jsx)(a.Provider,{value:{username:r,role:s,loading:d,canEdit:"superadmin"===s||"admin"===s||"editor"===s,canManageUsers:"superadmin"===s||"admin"===s,logout:u},children:t})}function s(){return(0,o.useContext)(a)}},5183:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>l});var n=r(4568),o=r(7620),a=r(8546),i=r(4492);let s={appName:"SlackHive",tagline:"AI agent teams on Slack",logoUrl:"",dashboardTitle:"Welcome to SlackHive"};function l(){let{canEdit:e,canManageUsers:t}=(0,i.A)(),[r,a]=(0,o.useState)("general");return(0,n.jsxs)("div",{className:"fade-up",style:{padding:"36px 40px"},children:[(0,n.jsxs)("div",{style:{marginBottom:24},children:[(0,n.jsx)("h1",{style:{fontSize:22,fontWeight:700,color:"var(--text)",letterSpacing:"-0.02em",margin:0},children:"Settings"}),(0,n.jsx)("p",{style:{fontSize:13,color:"var(--muted)",marginTop:4},children:"Configure platform branding, appearance, and access."})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:0,borderBottom:"1px solid var(--border)",marginBottom:24},children:[(0,n.jsx)(u,{active:"general"===r,onClick:()=>a("general"),children:"General"}),t&&(0,n.jsx)(u,{active:"users"===r,onClick:()=>a("users"),children:"Users"})]}),"general"===r&&(0,n.jsx)(d,{}),"users"===r&&t&&(0,n.jsx)(c,{})]})}function d(){let[e,t]=(0,o.useState)(s.appName),[r,a]=(0,o.useState)(s.tagline),[i,l]=(0,o.useState)(s.logoUrl),[d,c]=(0,o.useState)(s.dashboardTitle),[u,f]=(0,o.useState)(!1),[x,v]=(0,o.useState)("");async function y(e,t){f(!0);try{await fetch("/api/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,value:t})}),v("Saved"),setTimeout(()=>v(""),2e3)}finally{f(!1)}}async function b(){f(!0);try{await Promise.all([fetch("/api/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"appName",value:e})}),fetch("/api/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"tagline",value:r})}),fetch("/api/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"logoUrl",value:i})}),fetch("/api/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"dashboardTitle",value:d})})]),v("All settings saved"),setTimeout(()=>v(""),2e3)}finally{f(!1)}}return(0,o.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{e.appName&&t(e.appName),e.tagline&&a(e.tagline),void 0!==e.logoUrl&&""!==e.logoUrl&&l(e.logoUrl),e.dashboardTitle&&c(e.dashboardTitle)}).catch(()=>{})},[]),(0,n.jsxs)(n.Fragment,{children:[x&&(0,n.jsx)("div",{style:{position:"fixed",top:20,right:20,zIndex:999,background:"var(--accent)",color:"#fff",padding:"8px 16px",borderRadius:8,fontSize:13,fontWeight:500,boxShadow:"var(--shadow-md)"},children:x}),(0,n.jsxs)(p,{title:"Branding",children:[(0,n.jsx)(g,{label:"App Name",hint:"Displayed in the sidebar header and browser tab.",value:e,onChange:t,onBlur:()=>y("appName",e)}),(0,n.jsx)(g,{label:"Tagline",hint:"Short description shown below the app name.",value:r,onChange:a,onBlur:()=>y("tagline",r)}),(0,n.jsx)(g,{label:"Logo URL",hint:"URL to a square image (28\xd728). Leave empty for the default icon.",value:i,onChange:l,onBlur:()=>y("logoUrl",i)}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:4},children:[(0,n.jsx)("div",{style:{fontSize:12,fontWeight:500,color:"var(--muted)"},children:"Preview:"}),(0,n.jsx)("img",{src:i||"/logo.svg",alt:"Logo",style:{width:28,height:28,borderRadius:8,objectFit:"cover"}}),!i&&(0,n.jsx)("span",{style:{fontSize:11,color:"var(--subtle)",fontStyle:"italic"},children:"Using default logo"})]})]}),(0,n.jsx)(p,{title:"Dashboard",children:(0,n.jsx)(g,{label:"Dashboard Title",hint:"Main heading on the dashboard page.",value:d,onChange:c,onBlur:()=>y("dashboardTitle",d)})}),(0,n.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:8},children:(0,n.jsx)(h,{onClick:b,loading:u,children:"Save All"})})]})}function c(){let[e,t]=(0,o.useState)([]),[r,i]=(0,o.useState)([]),[s,l]=(0,o.useState)(!0),[d,c]=(0,o.useState)(!1),[u,p]=(0,o.useState)({username:"",password:"",role:"viewer"}),[g,h]=(0,o.useState)(""),[f,x]=(0,o.useState)(!1),[v,y]=(0,o.useState)(null),[b,m]=(0,o.useState)(null),[j,S]=(0,o.useState)({}),[w,k]=(0,o.useState)(null),C=()=>{l(!0),Promise.all([fetch("/api/auth/users").then(e=>e.json()),fetch("/api/agents").then(e=>e.json())]).then(e=>{let[r,n]=e;t(r),i(n)}).catch(()=>{}).finally(()=>l(!1))};(0,o.useEffect)(()=>{C()},[]);let z=async()=>{if(!u.username||!u.password)return void h("Username and password required");x(!0),h("");try{let e=await fetch("/api/auth/users",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)}),t=await e.json();if(!e.ok)return void h(t.error||"Failed");c(!1),p({username:"",password:"",role:"viewer"}),C()}finally{x(!1)}},T=async(e,t)=>{confirm('Delete user "'.concat(t,'"?'))&&(await fetch("/api/auth/users/".concat(e),{method:"DELETE"}),C())},W=async(e,t)=>{y(e),await fetch("/api/auth/users/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({role:t})}),y(null),C()},U=async e=>{if(b===e)return void m(null);if(m(e),j[e])return;k(e);let t=new Set;await Promise.all(r.map(async r=>{var n;let o=await fetch("/api/agents/".concat(r.id,"/access"));(null==(n=(await o.json()).writeUsers)?void 0:n.some(t=>t.userId===e))&&t.add(r.id)})),S(r=>({...r,[e]:t})),k(null)},R=async(e,t,r)=>{await fetch("/api/agents/".concat(t,"/access"),{method:r?"DELETE":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:e})}),S(n=>{let o=new Set(n[e]);return r?o.delete(t):o.add(t),{...n,[e]:o}})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:16},children:[(0,n.jsx)("p",{style:{margin:0,fontSize:13,color:"var(--muted)"},children:"Manage platform access. Superadmin is configured via environment variables."}),(0,n.jsxs)("button",{onClick:()=>c(!0),style:{display:"inline-flex",alignItems:"center",gap:6,background:"var(--accent)",color:"#fff",padding:"8px 16px",borderRadius:8,fontSize:13,fontWeight:500,border:"none",cursor:"pointer",fontFamily:"var(--font-sans)",flexShrink:0},children:[(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:(0,n.jsx)("path",{d:"M8 3v10M3 8h10",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})}),"Add User"]})]}),s?(0,n.jsx)("p",{style:{color:"var(--muted)",fontSize:13},children:"Loading..."}):(0,n.jsxs)("div",{style:{border:"1px solid var(--border)",borderRadius:10,overflow:"hidden"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,padding:"12px 16px",borderBottom:e.length>0?"1px solid var(--border)":"none",background:"var(--surface-2)"},children:[(0,n.jsx)("div",{style:{width:28,height:28,borderRadius:8,background:"#171717",flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:10,fontWeight:600,color:"#fff"},children:"S"}),(0,n.jsxs)("div",{style:{flex:1},children:[(0,n.jsx)("div",{style:{fontSize:13,fontWeight:500,color:"var(--text)"},children:"admin"}),(0,n.jsx)("div",{style:{fontSize:11,color:"var(--muted)"},children:"Environment variable"})]}),(0,n.jsx)("span",{style:{fontSize:10,fontWeight:600,letterSpacing:"0.04em",textTransform:"uppercase",color:"#d97706",background:"rgba(217,119,6,0.1)",padding:"2px 8px",borderRadius:4},children:"superadmin"})]}),e.map((t,o)=>(0,n.jsxs)("div",{style:{borderBottom:o<e.length-1?"1px solid var(--border)":"none"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,padding:"12px 16px"},children:[(0,n.jsx)("div",{style:{width:28,height:28,borderRadius:8,flexShrink:0,background:"admin"===t.role?"#171717":"editor"===t.role?"#059669":"var(--surface-2)",border:"admin"===t.role?"none":"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:10,fontWeight:600,color:"admin"===t.role?"#fff":"var(--text)"},children:t.username.charAt(0).toUpperCase()}),(0,n.jsxs)("div",{style:{flex:1},children:[(0,n.jsx)("div",{style:{fontSize:13,fontWeight:500,color:"var(--text)"},children:t.username}),(0,n.jsxs)("div",{style:{fontSize:11,color:"var(--muted)"},children:["Created ",new Date(t.createdAt).toLocaleDateString()]})]}),(0,n.jsxs)("select",{value:t.role,disabled:v===t.id,onChange:e=>W(t.id,e.target.value),style:{fontSize:11,fontWeight:600,padding:"3px 8px",borderRadius:5,border:"1px solid var(--border)",cursor:"pointer",background:"admin"===t.role?"rgba(37,99,235,0.1)":"editor"===t.role?"rgba(5,150,105,0.1)":"var(--surface-2)",color:"admin"===t.role?"#2563eb":"editor"===t.role?"#059669":"var(--muted)",fontFamily:"var(--font-sans)",outline:"none",opacity:v===t.id?.5:1},children:[(0,n.jsx)("option",{value:"admin",children:"admin"}),(0,n.jsx)("option",{value:"editor",children:"editor"}),(0,n.jsx)("option",{value:"viewer",children:"viewer"})]}),"editor"===t.role&&(0,n.jsx)("button",{onClick:()=>U(t.id),style:{background:b===t.id?"rgba(59,130,246,0.1)":"var(--surface-2)",border:"1px solid var(--border)",borderRadius:6,color:b===t.id?"var(--accent)":"var(--muted)",fontSize:11,fontWeight:500,cursor:"pointer",padding:"3px 10px",fontFamily:"var(--font-sans)"},children:"Agent Access"}),"viewer"===t.role&&(0,n.jsx)("span",{title:"Viewers are read-only — write access grants only apply to editors",style:{fontSize:11,fontWeight:500,padding:"3px 10px",borderRadius:6,border:"1px solid var(--border)",color:"var(--subtle)",background:"var(--surface-2)",opacity:.5},children:"Agent Access"}),(0,n.jsx)("button",{onClick:()=>T(t.id,t.username),style:{background:"none",border:"none",color:"#dc2626",fontSize:12,cursor:"pointer",opacity:.6,fontFamily:"var(--font-sans)",transition:"opacity 0.12s"},onMouseEnter:e=>e.currentTarget.style.opacity="1",onMouseLeave:e=>e.currentTarget.style.opacity="0.6",children:"Delete"})]}),b===t.id&&(0,n.jsxs)("div",{style:{margin:"0 16px 12px",padding:"14px 16px",borderRadius:8,background:"var(--surface-2)",border:"1px solid var(--border)"},children:[(0,n.jsxs)("p",{style:{margin:"0 0 10px",fontSize:12,color:"var(--muted)",fontWeight:600},children:["Write access — check agents this user can edit",(0,n.jsx)("span",{style:{fontWeight:400,color:"var(--subtle)",marginLeft:6},children:"(own created agents always have write)"})]}),w===t.id?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--subtle)",margin:0},children:"Loading…"}):(0,n.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[r.map(e=>{var r,o;let a=null!=(o=null==(r=j[t.id])?void 0:r.has(e.id))&&o;return(0,n.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:6,cursor:"pointer",fontSize:12,color:a?"var(--accent)":"var(--muted)",background:a?"rgba(59,130,246,0.08)":"var(--surface)",border:"1px solid ".concat(a?"rgba(59,130,246,0.3)":"var(--border)"),borderRadius:6,padding:"4px 10px",transition:"all 0.12s"},children:[(0,n.jsx)("input",{type:"checkbox",checked:a,onChange:()=>R(t.id,e.id,a),style:{accentColor:"var(--accent)",cursor:"pointer"}}),e.name]},e.id)}),0===r.length&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--subtle)"},children:"No agents yet"})]})]})]},t.id)),0===e.length&&(0,n.jsx)("div",{style:{padding:"20px 16px",textAlign:"center",color:"var(--muted)",fontSize:13},children:"No additional users. Only the superadmin account exists."})]}),d&&(0,n.jsx)(a.Z,{children:(0,n.jsx)("div",{style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.4)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,backdropFilter:"blur(2px)"},children:(0,n.jsxs)("div",{style:{background:"#fff",borderRadius:14,border:"1px solid var(--border)",padding:28,width:380,boxShadow:"var(--shadow-lg)",display:"flex",flexDirection:"column",gap:16,maxHeight:"90vh",overflow:"auto"},children:[(0,n.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,n.jsx)("h3",{style:{margin:0,fontSize:16,fontWeight:600,color:"var(--text)"},children:"New User"}),(0,n.jsx)("button",{onClick:()=>{c(!1),h("")},style:{background:"none",border:"none",color:"var(--muted)",fontSize:18,cursor:"pointer"},children:"\xd7"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Username"}),(0,n.jsx)("input",{type:"text",value:u.username,onChange:e=>p(t=>({...t,username:e.target.value})),style:{width:"100%",padding:"8px 12px",borderRadius:7,border:"1px solid var(--border)",fontSize:13,outline:"none",boxSizing:"border-box",fontFamily:"var(--font-sans)"}})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Password"}),(0,n.jsx)("input",{type:"password",value:u.password,onChange:e=>p(t=>({...t,password:e.target.value})),style:{width:"100%",padding:"8px 12px",borderRadius:7,border:"1px solid var(--border)",fontSize:13,outline:"none",boxSizing:"border-box",fontFamily:"var(--font-sans)"}})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:"Role"}),(0,n.jsxs)("select",{value:u.role,onChange:e=>p(t=>({...t,role:e.target.value})),style:{width:"100%",padding:"8px 12px",borderRadius:7,border:"1px solid var(--border)",fontSize:13,outline:"none",fontFamily:"var(--font-sans)",background:"#fff"},children:[(0,n.jsx)("option",{value:"viewer",children:"Viewer — read-only access"}),(0,n.jsx)("option",{value:"editor",children:"Editor — create/edit agents, jobs, settings"}),(0,n.jsx)("option",{value:"admin",children:"Admin — full access including user management"})]})]}),g&&(0,n.jsx)("div",{style:{fontSize:12,color:"#dc2626",background:"rgba(220,38,38,0.06)",padding:"6px 10px",borderRadius:6},children:g}),(0,n.jsxs)("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[(0,n.jsx)("button",{onClick:()=>{c(!1),h("")},style:{padding:"8px 16px",borderRadius:7,border:"1px solid var(--border)",background:"#fff",fontSize:13,cursor:"pointer",fontFamily:"var(--font-sans)"},children:"Cancel"}),(0,n.jsx)("button",{onClick:z,disabled:f,style:{padding:"8px 18px",borderRadius:7,border:"none",background:"var(--accent)",color:"#fff",fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"var(--font-sans)"},children:f?"Creating...":"Create User"})]})]})})})]})}function u(e){let{active:t,onClick:r,children:o}=e;return(0,n.jsx)("button",{onClick:r,style:{background:"none",border:"none",cursor:"pointer",padding:"10px 16px",fontSize:13,color:t?"var(--text)":"var(--muted)",fontWeight:t?600:400,fontFamily:"var(--font-sans)",position:"relative",transition:"color 0.15s",borderBottom:t?"2px solid var(--accent)":"2px solid transparent",marginBottom:-1},children:o})}function p(e){let{title:t,children:r}=e;return(0,n.jsxs)("div",{style:{marginBottom:22,paddingBottom:22,borderBottom:"1px solid var(--border)"},children:[(0,n.jsx)("div",{style:{fontSize:12,fontWeight:600,color:"var(--muted)",letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:14},children:t}),(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:12},children:r})]})}function g(e){let{label:t,value:r,onChange:o,onBlur:a,hint:i}=e;return(0,n.jsxs)("div",{children:[(0,n.jsx)("label",{style:{display:"block",fontSize:12,fontWeight:500,color:"var(--muted)",marginBottom:5},children:t}),(0,n.jsx)("input",{type:"text",value:r,onChange:e=>o(e.target.value),onBlur:e=>{e.currentTarget.style.borderColor="var(--border)",null==a||a()},style:{width:"100%",background:"var(--surface)",border:"1px solid var(--border)",borderRadius:7,padding:"8px 11px",color:"var(--text)",fontSize:13,fontFamily:"var(--font-sans)",outline:"none",transition:"border-color 0.15s",boxSizing:"border-box"},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)"}),i&&(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:11,color:"var(--subtle)"},children:i})]})}function h(e){let{children:t,onClick:r,loading:o}=e;return(0,n.jsx)("button",{onClick:r,disabled:o,style:{background:o?"var(--border)":"var(--accent)",color:"#fff",border:"none",borderRadius:7,padding:"8px 18px",fontSize:13,fontWeight:500,cursor:o?"not-allowed":"pointer",fontFamily:"var(--font-sans)",transition:"opacity 0.15s"},onMouseEnter:e=>{o||(e.currentTarget.style.opacity="0.85")},onMouseLeave:e=>{e.currentTarget.style.opacity="1"},children:o?"Saving...":t})}},8546:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(7620),o=r(7509);function a(e){let{children:t}=e,[r,a]=(0,n.useState)(!1);return((0,n.useEffect)(()=>{a(!0)},[]),r)?(0,o.createPortal)(t,document.body):null}}},e=>{e.O(0,[587,18,7358],()=>e(e.s=2804)),_N_E=e.O()}]);
|