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,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Environment Variables"
|
|
3
|
+
description: "Complete reference for every SlackHive configuration variable, grouped by category."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
All SlackHive configuration lives in a single `.env` file in the project root. The `slackhive init` CLI generates this file for you automatically. For manual setup, copy the example file and fill in the values:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cp .env.example .env
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
<Warning>
|
|
13
|
+
Never commit your `.env` file to version control. It contains passwords and cryptographic keys. It's already listed in `.gitignore`, but double-check before pushing.
|
|
14
|
+
</Warning>
|
|
15
|
+
|
|
16
|
+
## Claude Authentication
|
|
17
|
+
|
|
18
|
+
You need one of these two options — not both. If both are set, the API key takes precedence.
|
|
19
|
+
|
|
20
|
+
### Option A: Anthropic API Key
|
|
21
|
+
|
|
22
|
+
Best for teams, production deployments, and predictable billing.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
ANTHROPIC_API_KEY=sk-ant-api03-...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
All agents share this key. You're billed per token via the [Anthropic API](https://console.anthropic.com). Set up your billing and usage limits on the Anthropic console.
|
|
29
|
+
|
|
30
|
+
### Option B: Claude Max Subscription
|
|
31
|
+
|
|
32
|
+
Best for individual developers on a Claude Pro or Max plan ($100–$200/month for unlimited usage).
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Leave ANTHROPIC_API_KEY unset (comment it out)
|
|
36
|
+
CLAUDE_BIN=/usr/local/bin/claude
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
First, run `claude login` on the host machine to authenticate. Then mount the credentials into the runner container by adding this to `docker-compose.yml`:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
runner:
|
|
43
|
+
volumes:
|
|
44
|
+
- ~/.claude:/root/.claude
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
<Note>
|
|
48
|
+
The `CLAUDE_BIN` variable tells the runner where the `claude` binary lives on your host. Find the path with `which claude`.
|
|
49
|
+
</Note>
|
|
50
|
+
|
|
51
|
+
## Database (PostgreSQL)
|
|
52
|
+
|
|
53
|
+
| Variable | Required | Description |
|
|
54
|
+
|----------|----------|-------------|
|
|
55
|
+
| `POSTGRES_DB` | Yes | Database name. Default: `slackhive` |
|
|
56
|
+
| `POSTGRES_USER` | Yes | Database user. Default: `slackhive` |
|
|
57
|
+
| `POSTGRES_PASSWORD` | Yes | Database password. Use a strong random value. |
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
POSTGRES_DB=slackhive
|
|
61
|
+
POSTGRES_USER=slackhive
|
|
62
|
+
POSTGRES_PASSWORD=change-this-to-something-strong
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The `DATABASE_URL` used internally is constructed from these values automatically in `docker-compose.yml`. You don't set it directly.
|
|
66
|
+
|
|
67
|
+
## Cache (Redis)
|
|
68
|
+
|
|
69
|
+
| Variable | Required | Description |
|
|
70
|
+
|----------|----------|-------------|
|
|
71
|
+
| `REDIS_PASSWORD` | Yes | Redis authentication password. Used for the pub/sub event bus between the dashboard and the runner. |
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
REDIS_PASSWORD=change-this-to-something-strong
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Dashboard Authentication
|
|
78
|
+
|
|
79
|
+
| Variable | Required | Description |
|
|
80
|
+
|----------|----------|-------------|
|
|
81
|
+
| `ADMIN_USERNAME` | Yes | Superadmin login name. Stored only in `.env`, never in the database. |
|
|
82
|
+
| `ADMIN_PASSWORD` | Yes | Superadmin login password. Stored only in `.env`. |
|
|
83
|
+
| `AUTH_SECRET` | Yes | Cryptographic key for signing session cookies. Changing this logs out all users. |
|
|
84
|
+
| `ENV_SECRET_KEY` | Yes | Encryption key for the secret store (AES-256 via pgcrypto). Changing this breaks all stored secrets. |
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
ADMIN_USERNAME=admin
|
|
88
|
+
ADMIN_PASSWORD=change-this-to-something-strong
|
|
89
|
+
AUTH_SECRET=generate-with-openssl-rand-hex-32
|
|
90
|
+
ENV_SECRET_KEY=generate-with-openssl-rand-hex-32
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
<Tip>
|
|
94
|
+
Generate strong values for `AUTH_SECRET` and `ENV_SECRET_KEY`:
|
|
95
|
+
```bash
|
|
96
|
+
openssl rand -hex 32
|
|
97
|
+
```
|
|
98
|
+
Run this command twice — once for each variable. Each should be unique.
|
|
99
|
+
</Tip>
|
|
100
|
+
|
|
101
|
+
<Warning>
|
|
102
|
+
**Do not rotate these keys after your initial setup without planning ahead.**
|
|
103
|
+
|
|
104
|
+
- Rotating `AUTH_SECRET` immediately invalidates all active user sessions — everyone gets logged out.
|
|
105
|
+
- Rotating `ENV_SECRET_KEY` makes all stored secrets unreadable. You must re-enter every secret manually in **Settings → Env Vars** before any MCP servers using `envRefs` will work again.
|
|
106
|
+
</Warning>
|
|
107
|
+
|
|
108
|
+
## Platform
|
|
109
|
+
|
|
110
|
+
| Variable | Required | Default | Description |
|
|
111
|
+
|----------|----------|---------|-------------|
|
|
112
|
+
| `NODE_ENV` | No | `development` | Set to `production` for production deployments. Affects log verbosity and error handling. |
|
|
113
|
+
| `AGENTS_TMP_DIR` | No | `/tmp/agents` | Root directory for agent workspaces inside the runner container. Each agent gets a subdirectory containing its `CLAUDE.md`, skills, and session data. |
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
NODE_ENV=production
|
|
117
|
+
# AGENTS_TMP_DIR=/tmp/agents # only change if you need a custom path
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Complete .env.example
|
|
121
|
+
|
|
122
|
+
Here's the full template for reference:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# ============================================================
|
|
126
|
+
# SlackHive — Environment Configuration
|
|
127
|
+
# Copy to .env and fill in your values.
|
|
128
|
+
# ============================================================
|
|
129
|
+
|
|
130
|
+
# --- Claude Authentication (choose ONE) ---
|
|
131
|
+
|
|
132
|
+
# Option A: Anthropic API key (pay-per-token)
|
|
133
|
+
# ANTHROPIC_API_KEY=sk-ant-api03-...
|
|
134
|
+
|
|
135
|
+
# Option B: Claude Pro or Max subscription
|
|
136
|
+
# Leave ANTHROPIC_API_KEY unset. Run `claude login` on the host first.
|
|
137
|
+
# CLAUDE_BIN=/usr/local/bin/claude
|
|
138
|
+
|
|
139
|
+
# --- PostgreSQL ---
|
|
140
|
+
POSTGRES_DB=slackhive
|
|
141
|
+
POSTGRES_USER=slackhive
|
|
142
|
+
POSTGRES_PASSWORD=change-me
|
|
143
|
+
|
|
144
|
+
# --- Redis ---
|
|
145
|
+
REDIS_PASSWORD=change-me
|
|
146
|
+
|
|
147
|
+
# --- Dashboard Auth ---
|
|
148
|
+
ADMIN_USERNAME=admin
|
|
149
|
+
ADMIN_PASSWORD=change-me
|
|
150
|
+
AUTH_SECRET=generate-with-openssl-rand-hex-32
|
|
151
|
+
ENV_SECRET_KEY=generate-with-openssl-rand-hex-32
|
|
152
|
+
|
|
153
|
+
# --- Platform ---
|
|
154
|
+
NODE_ENV=production
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Next steps
|
|
158
|
+
|
|
159
|
+
<CardGroup cols={2}>
|
|
160
|
+
<Card title="Slack App Setup" icon="slack" href="/configuration/slack-app">
|
|
161
|
+
Configure the Slack app for each agent.
|
|
162
|
+
</Card>
|
|
163
|
+
<Card title="MCP Servers" icon="plug" href="/configuration/mcp-servers">
|
|
164
|
+
Use the encrypted env store to safely pass secrets to MCP tools.
|
|
165
|
+
</Card>
|
|
166
|
+
</CardGroup>
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "MCP Servers"
|
|
3
|
+
description: "Connect your agents to databases, APIs, and external services using the Model Context Protocol."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## What is MCP?
|
|
7
|
+
|
|
8
|
+
**MCP (Model Context Protocol)** is a standard that lets AI agents connect to external tools and data sources. Think of MCP servers as plugins for your agents — they give agents the ability to actually *do* things beyond just having a conversation.
|
|
9
|
+
|
|
10
|
+
Without MCP, an agent can only talk. With MCP, an agent can:
|
|
11
|
+
- Query your database and return real results
|
|
12
|
+
- Read files from a repository
|
|
13
|
+
- Create GitHub issues
|
|
14
|
+
- Fetch data from any internal API
|
|
15
|
+
- Run custom scripts
|
|
16
|
+
|
|
17
|
+
An MCP server is a small program that exposes a set of **tools**. When an agent needs to do something — like run a SQL query — it calls the appropriate MCP tool, gets back the result, and incorporates it into its response.
|
|
18
|
+
|
|
19
|
+
<Note>
|
|
20
|
+
You don't need to build MCP servers from scratch. There are [many open-source MCP servers](https://github.com/modelcontextprotocol/servers) for common tools. SlackHive also supports **inline TypeScript MCPs** — you can paste code directly into the UI without deploying anything.
|
|
21
|
+
</Note>
|
|
22
|
+
|
|
23
|
+
## How SlackHive manages MCP
|
|
24
|
+
|
|
25
|
+
SlackHive manages MCP servers at the **platform level**. You add a server once to the global catalog, then assign it to any number of agents.
|
|
26
|
+
|
|
27
|
+
When an agent starts, SlackHive launches all its assigned MCP servers and keeps them running. There's no per-message startup overhead — once the agent is live, its tools are always ready.
|
|
28
|
+
|
|
29
|
+
Tool names follow the pattern `mcp__{serverName}__{toolName}`. For example, a server named `redshift` with a `query` tool is called as `mcp__redshift__query`.
|
|
30
|
+
|
|
31
|
+
## Adding a server to the catalog
|
|
32
|
+
|
|
33
|
+
<Steps>
|
|
34
|
+
<Step title="Open MCP Servers">
|
|
35
|
+
In the sidebar, click **MCP Servers** (under Settings).
|
|
36
|
+
</Step>
|
|
37
|
+
<Step title="Click Add Server">
|
|
38
|
+
Give it a name and description. The name becomes part of every tool name from this server (`mcp__{name}__...`).
|
|
39
|
+
</Step>
|
|
40
|
+
<Step title="Choose a transport type">
|
|
41
|
+
Select how SlackHive connects to this server (see the [Transport Types](#transport-types) section below).
|
|
42
|
+
</Step>
|
|
43
|
+
<Step title="Enter the configuration">
|
|
44
|
+
Fill in the command, URL, or script depending on your transport type.
|
|
45
|
+
</Step>
|
|
46
|
+
<Step title="Test and save">
|
|
47
|
+
Click **Test Connection** to verify the server starts and responds correctly. Then click **Save**.
|
|
48
|
+
</Step>
|
|
49
|
+
</Steps>
|
|
50
|
+
|
|
51
|
+
## Transport types
|
|
52
|
+
|
|
53
|
+
There are four ways to run an MCP server:
|
|
54
|
+
|
|
55
|
+
| Transport | Use case |
|
|
56
|
+
|-----------|----------|
|
|
57
|
+
| `stdio` | A local process (Node.js script, Python script, binary) — most common |
|
|
58
|
+
| `sse` | A remote server accessible via HTTP server-sent events |
|
|
59
|
+
| `http` | A remote server accessible via HTTP |
|
|
60
|
+
| TypeScript inline | Paste TypeScript source directly — no deployment needed |
|
|
61
|
+
|
|
62
|
+
## Configuration examples
|
|
63
|
+
|
|
64
|
+
### Redshift / Data Warehouse
|
|
65
|
+
|
|
66
|
+
Give your data analyst agent the ability to run real SQL queries:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"name": "redshift",
|
|
71
|
+
"type": "stdio",
|
|
72
|
+
"description": "Read-only Redshift query access",
|
|
73
|
+
"config": {
|
|
74
|
+
"command": "node",
|
|
75
|
+
"args": ["/path/to/redshift-mcp/dist/index.js"],
|
|
76
|
+
"envRefs": {
|
|
77
|
+
"DATABASE_URL": "REDSHIFT_DATABASE_URL"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
<Tip>
|
|
84
|
+
Notice the `envRefs` instead of `env`. This references a secret from the encrypted store rather than embedding the connection string directly. See [Keeping secrets safe](#keeping-secrets-safe) below.
|
|
85
|
+
</Tip>
|
|
86
|
+
|
|
87
|
+
### Filesystem Access
|
|
88
|
+
|
|
89
|
+
Give an agent read access to files in a directory — useful for code review or documentation agents:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"name": "filesystem",
|
|
94
|
+
"type": "stdio",
|
|
95
|
+
"description": "Read files from the codebase",
|
|
96
|
+
"config": {
|
|
97
|
+
"command": "npx",
|
|
98
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/your/repo"]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The agent can then use `mcp__filesystem__read_file`, `mcp__filesystem__list_directory`, etc.
|
|
104
|
+
|
|
105
|
+
### Remote API (SSE)
|
|
106
|
+
|
|
107
|
+
Connect to a remote MCP server over the network:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"name": "analytics-api",
|
|
112
|
+
"type": "sse",
|
|
113
|
+
"description": "Internal analytics data API",
|
|
114
|
+
"config": {
|
|
115
|
+
"url": "https://mcp.internal.example.com/sse",
|
|
116
|
+
"headers": {
|
|
117
|
+
"Authorization": "Bearer your-token-here"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Inline TypeScript
|
|
124
|
+
|
|
125
|
+
The most convenient option for internal tools: paste TypeScript source directly into the UI. SlackHive writes it to disk and runs it — no separate deployment needed.
|
|
126
|
+
|
|
127
|
+
Select **TypeScript inline script** as the transport type, then paste your implementation:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
131
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
132
|
+
import { z } from "zod";
|
|
133
|
+
|
|
134
|
+
const server = new McpServer({ name: "my-tool", version: "1.0.0" });
|
|
135
|
+
|
|
136
|
+
server.tool(
|
|
137
|
+
"lookup_customer",
|
|
138
|
+
{ customer_id: z.string() },
|
|
139
|
+
async ({ customer_id }) => ({
|
|
140
|
+
content: [{ type: "text", text: `Customer ${customer_id}: Acme Corp, Plan: Pro` }],
|
|
141
|
+
})
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
const transport = new StdioServerTransport();
|
|
145
|
+
await server.connect(transport);
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
This is ideal for simple tools you want to prototype quickly, or for internal utilities you don't want to expose as file paths.
|
|
149
|
+
|
|
150
|
+
## Assigning servers to agents
|
|
151
|
+
|
|
152
|
+
Once a server is in the catalog, you can assign it to agents:
|
|
153
|
+
- **During agent creation** — Step 4 (Tools) of the wizard
|
|
154
|
+
- **After creation** — from the agent's **Tools** tab
|
|
155
|
+
|
|
156
|
+
An agent can have any number of MCP servers assigned. All tools from all assigned servers become available to the agent.
|
|
157
|
+
|
|
158
|
+
## Keeping secrets safe
|
|
159
|
+
|
|
160
|
+
Never paste database credentials, API keys, or passwords directly into MCP config `env` fields. Use the **encrypted env store** instead.
|
|
161
|
+
|
|
162
|
+
The env store encrypts secrets at rest using AES-256. Values are never returned by the API or shown in the browser — only the key names are visible.
|
|
163
|
+
|
|
164
|
+
<Steps>
|
|
165
|
+
<Step title="Add your secret to the store">
|
|
166
|
+
1. Go to **Settings → Env Vars** in the sidebar
|
|
167
|
+
2. Click **Add Variable**
|
|
168
|
+
3. Enter a name (e.g. `REDSHIFT_DATABASE_URL`) and the secret value
|
|
169
|
+
4. Click **Save** — the value is encrypted immediately
|
|
170
|
+
</Step>
|
|
171
|
+
<Step title="Reference it in your MCP config">
|
|
172
|
+
In your MCP server configuration, use `envRefs` to map the store key to the environment variable name the server expects:
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"envRefs": {
|
|
177
|
+
"DATABASE_URL": "REDSHIFT_DATABASE_URL"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
When the agent starts, the runner decrypts `REDSHIFT_DATABASE_URL` from the store and injects it as `DATABASE_URL` into the MCP process environment.
|
|
183
|
+
</Step>
|
|
184
|
+
</Steps>
|
|
185
|
+
|
|
186
|
+
The raw secret never appears in API responses, browser dev tools, or log files.
|
|
187
|
+
|
|
188
|
+
## Testing a server
|
|
189
|
+
|
|
190
|
+
From **Settings → MCP Servers**, click the **Test** button next to any server. SlackHive starts the server process and verifies it responds to initialization. Results appear inline.
|
|
191
|
+
|
|
192
|
+
If a server fails to start, the agent still runs — an error is logged, but the agent continues without that server's tools. Check the agent's **Logs** tab for details.
|
|
193
|
+
|
|
194
|
+
## Next steps
|
|
195
|
+
|
|
196
|
+
<CardGroup cols={2}>
|
|
197
|
+
<Card title="Agent Tools & Permissions" icon="shield" href="/agents/tools">
|
|
198
|
+
Control exactly which MCP tools each agent can use.
|
|
199
|
+
</Card>
|
|
200
|
+
<Card title="Env Vars" icon="lock" href="/configuration/env-vars">
|
|
201
|
+
Configure your encryption key and other platform settings.
|
|
202
|
+
</Card>
|
|
203
|
+
</CardGroup>
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Slack App Setup"
|
|
3
|
+
description: "Create and configure a Slack app for each agent — the wizard generates everything, you just copy and paste."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Every SlackHive agent needs its own Slack app. The app is how your agent gets a Slack identity (`@handle`), connects to your workspace, and receives messages.
|
|
7
|
+
|
|
8
|
+
The good news: **you don't need to configure scopes or settings manually.** The SlackHive wizard generates a complete app manifest — you just paste it into Slack and click a few buttons.
|
|
9
|
+
|
|
10
|
+
This page walks through that process in detail, and covers troubleshooting if something goes wrong.
|
|
11
|
+
|
|
12
|
+
## What you're creating
|
|
13
|
+
|
|
14
|
+
Each Slack app gives your agent:
|
|
15
|
+
- A **bot user** — the `@handle` your team @mentions in channels
|
|
16
|
+
- **Socket Mode** — a persistent connection that receives messages in real time (no webhooks needed, no public URL required)
|
|
17
|
+
- The right **OAuth scopes** — permissions to read messages, post replies, and add reactions
|
|
18
|
+
|
|
19
|
+
## Step 1: Generate the manifest
|
|
20
|
+
|
|
21
|
+
When you're on **Step 2** of the agent creation wizard, click **Generate Manifest**. SlackHive creates a JSON manifest pre-configured for your agent with the correct name, scopes, and Socket Mode settings.
|
|
22
|
+
|
|
23
|
+
Keep this manifest JSON ready — you'll paste it into Slack in the next step.
|
|
24
|
+
|
|
25
|
+
## Step 2: Create the Slack app
|
|
26
|
+
|
|
27
|
+
<Steps>
|
|
28
|
+
<Step title="Open the Slack API console">
|
|
29
|
+
Go to [api.slack.com/apps](https://api.slack.com/apps) in a new browser tab. Sign in with the Slack account that has permission to install apps in your workspace.
|
|
30
|
+
</Step>
|
|
31
|
+
<Step title="Start creating a new app">
|
|
32
|
+
Click the **Create New App** button in the top right. A dialog will appear asking how you'd like to configure your app.
|
|
33
|
+
</Step>
|
|
34
|
+
<Step title="Choose From an app manifest">
|
|
35
|
+
Select **From an app manifest** (not "From scratch"). This lets you paste the pre-configured manifest rather than setting everything up manually.
|
|
36
|
+
</Step>
|
|
37
|
+
<Step title="Select your workspace">
|
|
38
|
+
Choose the Slack workspace where you want this agent to live. Click **Next**.
|
|
39
|
+
</Step>
|
|
40
|
+
<Step title="Paste the manifest">
|
|
41
|
+
You'll see a text editor. Delete any existing content, then paste the manifest JSON from the SlackHive wizard. Click **Next**.
|
|
42
|
+
</Step>
|
|
43
|
+
<Step title="Review and create">
|
|
44
|
+
Slack will show you a summary of the app settings. Click **Create** to finish. You'll land on the app's settings page.
|
|
45
|
+
</Step>
|
|
46
|
+
</Steps>
|
|
47
|
+
|
|
48
|
+
## Step 3: Install to your workspace
|
|
49
|
+
|
|
50
|
+
Your app exists, but it's not yet installed in your workspace.
|
|
51
|
+
|
|
52
|
+
<Steps>
|
|
53
|
+
<Step title="Go to OAuth & Permissions">
|
|
54
|
+
In the left sidebar of the Slack app settings page, click **OAuth & Permissions**.
|
|
55
|
+
</Step>
|
|
56
|
+
<Step title="Install the app">
|
|
57
|
+
Click the **Install to Workspace** button near the top of the page.
|
|
58
|
+
</Step>
|
|
59
|
+
<Step title="Approve the permissions">
|
|
60
|
+
Slack shows you a list of what the app will be allowed to do. Review it and click **Allow**.
|
|
61
|
+
</Step>
|
|
62
|
+
</Steps>
|
|
63
|
+
|
|
64
|
+
Your bot user (`@your-agent-name`) now exists in your workspace.
|
|
65
|
+
|
|
66
|
+
## Step 4: Collect your credentials
|
|
67
|
+
|
|
68
|
+
You need three values to connect the agent in SlackHive. Here's exactly where to find each one.
|
|
69
|
+
|
|
70
|
+
### Bot Token (`xoxb-...`)
|
|
71
|
+
|
|
72
|
+
1. Go to **OAuth & Permissions** in the left sidebar
|
|
73
|
+
2. Under **OAuth Tokens for Your Workspace**, find **Bot User OAuth Token**
|
|
74
|
+
3. Copy it — it starts with `xoxb-`
|
|
75
|
+
|
|
76
|
+
### App Token (`xapp-...`)
|
|
77
|
+
|
|
78
|
+
1. Go to **Basic Information** in the left sidebar
|
|
79
|
+
2. Scroll down to **App-Level Tokens**
|
|
80
|
+
3. Click **Generate Token and Scopes**
|
|
81
|
+
4. Give it a name (e.g. `socket-mode`)
|
|
82
|
+
5. Click **Add Scope** and select `connections:write`
|
|
83
|
+
6. Click **Generate**
|
|
84
|
+
7. Copy the token — it starts with `xapp-`
|
|
85
|
+
|
|
86
|
+
### Signing Secret
|
|
87
|
+
|
|
88
|
+
1. Still on **Basic Information**
|
|
89
|
+
2. Under **App Credentials**, find **Signing Secret**
|
|
90
|
+
3. Click **Show** to reveal it, then copy the hex string
|
|
91
|
+
|
|
92
|
+
## Step 5: Enter credentials in SlackHive
|
|
93
|
+
|
|
94
|
+
Go back to the SlackHive agent wizard (Step 3 — Credentials) and paste all three values:
|
|
95
|
+
|
|
96
|
+
| Field | Value |
|
|
97
|
+
|-------|-------|
|
|
98
|
+
| **Bot Token** | `xoxb-...` |
|
|
99
|
+
| **App Token** | `xapp-...` |
|
|
100
|
+
| **Signing Secret** | The hex string from App Credentials |
|
|
101
|
+
|
|
102
|
+
Click **Verify Connection**. SlackHive will test the connection before letting you proceed.
|
|
103
|
+
|
|
104
|
+
## Required OAuth scopes
|
|
105
|
+
|
|
106
|
+
The generated manifest includes these bot token scopes. Here's what each one is for:
|
|
107
|
+
|
|
108
|
+
| Scope | Why it's needed |
|
|
109
|
+
|-------|----------------|
|
|
110
|
+
| `app_mentions:read` | Receive events when the bot is @mentioned in a channel |
|
|
111
|
+
| `channels:history` | Read messages in public channels (needed for thread context) |
|
|
112
|
+
| `channels:read` | List channels and get channel info |
|
|
113
|
+
| `chat:write` | Post messages and replies |
|
|
114
|
+
| `groups:history` | Read messages in private channels |
|
|
115
|
+
| `groups:read` | List and access private channels |
|
|
116
|
+
| `im:history` | Read direct messages |
|
|
117
|
+
| `im:read` | Access DM channel info |
|
|
118
|
+
| `im:write` | Send direct messages |
|
|
119
|
+
| `mpim:history` | Read group DMs |
|
|
120
|
+
| `reactions:write` | Add emoji reactions (used for "thinking" indicators while processing) |
|
|
121
|
+
| `users:read` | Look up user display names (for memory and context) |
|
|
122
|
+
|
|
123
|
+
## Troubleshooting
|
|
124
|
+
|
|
125
|
+
<Accordion title="Verification failed — connection refused">
|
|
126
|
+
The most common cause is **Socket Mode not being enabled**.
|
|
127
|
+
|
|
128
|
+
1. Go to your Slack app settings
|
|
129
|
+
2. Click **Socket Mode** in the left sidebar
|
|
130
|
+
3. Make sure the toggle is **On**
|
|
131
|
+
4. Go back to SlackHive and try verifying again
|
|
132
|
+
</Accordion>
|
|
133
|
+
|
|
134
|
+
<Accordion title="Verification failed — invalid token">
|
|
135
|
+
- Check that you pasted the **Bot Token** (starts with `xoxb-`) in the Bot Token field, not the App Token
|
|
136
|
+
- Make sure there are no extra spaces before or after the token
|
|
137
|
+
- If you recently regenerated the token, make sure you copied the new one
|
|
138
|
+
</Accordion>
|
|
139
|
+
|
|
140
|
+
<Accordion title="App Token scope error">
|
|
141
|
+
The App Token must have the `connections:write` scope. If you created the token without adding this scope:
|
|
142
|
+
1. Go to **Basic Information** → **App-Level Tokens**
|
|
143
|
+
2. Click on your token name
|
|
144
|
+
3. Add the `connections:write` scope
|
|
145
|
+
4. Regenerate the token and copy the new value
|
|
146
|
+
</Accordion>
|
|
147
|
+
|
|
148
|
+
<Accordion title="Bot doesn't appear in workspace">
|
|
149
|
+
If you can't find `@your-agent-name` in Slack after completing the wizard:
|
|
150
|
+
1. Check that the app was installed: go to Slack app settings → **OAuth & Permissions** → the **Install to Workspace** button should show as already installed
|
|
151
|
+
2. In Slack, type `@` in a message box and start typing the agent's name
|
|
152
|
+
3. If it still doesn't appear, try reinstalling the app from **OAuth & Permissions**
|
|
153
|
+
</Accordion>
|
|
154
|
+
|
|
155
|
+
<Accordion title="Agent is Active but not responding">
|
|
156
|
+
If the dashboard shows the agent as Active but it doesn't respond to @mentions:
|
|
157
|
+
1. Make sure you've **invited the bot to the channel**: `/invite @your-agent-name`
|
|
158
|
+
2. Check the **Logs** tab on the agent — it will show if messages are being received
|
|
159
|
+
3. Verify the agent doesn't have channel restrictions set (Overview tab → Allowed Channels)
|
|
160
|
+
</Accordion>
|
|
161
|
+
|
|
162
|
+
## After setup
|
|
163
|
+
|
|
164
|
+
Once credentials are verified, the runner connects the agent to Slack automatically. The agent status changes to **Active** in the dashboard.
|
|
165
|
+
|
|
166
|
+
Invite the bot to a channel and start a conversation:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
/invite @your-agent-name
|
|
170
|
+
@your-agent-name hello!
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
<Note>
|
|
174
|
+
Each agent can only be installed in one Slack workspace. If you need agents in multiple workspaces, create separate Slack apps for each workspace and create separate agent entries in SlackHive.
|
|
175
|
+
</Note>
|
package/docs/docs.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://mintlify.com/schema.json",
|
|
3
|
+
"name": "SlackHive",
|
|
4
|
+
"theme": "maple",
|
|
5
|
+
"logo": {
|
|
6
|
+
"light": "/logo/wide-light.svg",
|
|
7
|
+
"dark": "/logo/wide-dark.svg"
|
|
8
|
+
},
|
|
9
|
+
"favicon": "/favicon.svg",
|
|
10
|
+
"colors": {
|
|
11
|
+
"primary": "#D97757"
|
|
12
|
+
},
|
|
13
|
+
"navbar": {
|
|
14
|
+
"links": [
|
|
15
|
+
{
|
|
16
|
+
"label": "GitHub",
|
|
17
|
+
"href": "https://github.com/pelago-labs/slackhive"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"primary": {
|
|
21
|
+
"type": "button",
|
|
22
|
+
"label": "Get Started",
|
|
23
|
+
"href": "https://github.com/pelago-labs/slackhive"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"footer": {
|
|
27
|
+
"socials": {
|
|
28
|
+
"github": "https://github.com/pelago-labs/slackhive"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"navigation": {
|
|
32
|
+
"tabs": [
|
|
33
|
+
{
|
|
34
|
+
"tab": "Documentation",
|
|
35
|
+
"groups": [
|
|
36
|
+
{
|
|
37
|
+
"group": "Getting Started",
|
|
38
|
+
"pages": ["introduction", "quickstart"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"group": "Configuration",
|
|
42
|
+
"pages": [
|
|
43
|
+
"configuration/env-vars",
|
|
44
|
+
"configuration/slack-app",
|
|
45
|
+
"configuration/mcp-servers"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"group": "Agents",
|
|
50
|
+
"pages": [
|
|
51
|
+
"agents/creating-agents",
|
|
52
|
+
"agents/boss-agents",
|
|
53
|
+
"agents/memory",
|
|
54
|
+
"agents/tools"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"group": "Features",
|
|
59
|
+
"pages": [
|
|
60
|
+
"features/scheduled-jobs",
|
|
61
|
+
"features/multi-workspace",
|
|
62
|
+
"features/import-export",
|
|
63
|
+
"features/logs",
|
|
64
|
+
"features/history",
|
|
65
|
+
"features/users"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"group": "Self-Hosting",
|
|
70
|
+
"pages": [
|
|
71
|
+
"self-hosting/docker",
|
|
72
|
+
"self-hosting/production"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
}
|
package/docs/favicon.svg
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.bg { fill: #1A1918; }
|
|
5
|
+
.line { fill: none; stroke: #EBE6E0; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
6
|
+
.prompt-accent { fill: none; stroke: #D97757; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
7
|
+
.cursor { fill: #D97757; }
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect class="bg" width="512" height="512" rx="112" />
|
|
11
|
+
<path class="line" d="M 200 140 L 200 372" />
|
|
12
|
+
<path class="line" d="M 312 140 L 312 372" />
|
|
13
|
+
<path class="line" d="M 140 200 L 372 200" />
|
|
14
|
+
<path class="prompt-accent" d="M 100 280 L 140 312 L 100 344" />
|
|
15
|
+
<path class="line" d="M 180 312 L 280 312" />
|
|
16
|
+
<rect class="cursor" x="312" y="296" width="40" height="32" rx="6" />
|
|
17
|
+
</svg>
|