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,354 @@
|
|
|
1
|
+
-- =============================================================================
|
|
2
|
+
-- SlackHive — Database Schema
|
|
3
|
+
-- PostgreSQL 16+
|
|
4
|
+
--
|
|
5
|
+
-- Tables:
|
|
6
|
+
-- agents — Registered Slack bots (one per Claude Code agent)
|
|
7
|
+
-- mcp_servers — Global MCP server catalog (platform-level, shared)
|
|
8
|
+
-- agent_mcps — Which MCP servers each agent uses (many-to-many)
|
|
9
|
+
-- skills — Markdown skill files per agent (compiled into CLAUDE.md)
|
|
10
|
+
-- permissions — Tool allowlist/denylist per agent
|
|
11
|
+
-- memories — Learned memories per agent (persisted from runtime)
|
|
12
|
+
-- sessions — Slack thread → Claude session ID mapping
|
|
13
|
+
-- =============================================================================
|
|
14
|
+
|
|
15
|
+
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
16
|
+
|
|
17
|
+
-- -----------------------------------------------------------------------------
|
|
18
|
+
-- agents
|
|
19
|
+
-- Each row represents one Slack bot backed by a Claude Code SDK session manager.
|
|
20
|
+
-- The runner spins up one @slack/bolt App instance per active agent.
|
|
21
|
+
-- -----------------------------------------------------------------------------
|
|
22
|
+
CREATE TABLE agents (
|
|
23
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
24
|
+
slug TEXT UNIQUE NOT NULL,
|
|
25
|
+
name TEXT NOT NULL,
|
|
26
|
+
persona TEXT,
|
|
27
|
+
description TEXT,
|
|
28
|
+
slack_bot_token TEXT NOT NULL,
|
|
29
|
+
slack_app_token TEXT NOT NULL,
|
|
30
|
+
slack_signing_secret TEXT NOT NULL,
|
|
31
|
+
-- Populated automatically on first successful Slack connection via auth.test.
|
|
32
|
+
-- Used by the boss agent to construct <@UXXXXXXX> Slack mentions.
|
|
33
|
+
slack_bot_user_id TEXT,
|
|
34
|
+
model TEXT NOT NULL DEFAULT 'claude-opus-4-6',
|
|
35
|
+
status TEXT NOT NULL DEFAULT 'stopped'
|
|
36
|
+
CHECK (status IN ('running', 'stopped', 'error')),
|
|
37
|
+
-- Whether this agent should auto-start when the runner starts.
|
|
38
|
+
-- Set to false only when explicitly stopped via the UI.
|
|
39
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
40
|
+
is_boss BOOLEAN NOT NULL DEFAULT false,
|
|
41
|
+
-- Array of boss agent UUIDs this agent reports to. Empty = top-level boss.
|
|
42
|
+
reports_to UUID[] NOT NULL DEFAULT '{}',
|
|
43
|
+
-- Compiled CLAUDE.md content (skills + memories). Written to disk at startup.
|
|
44
|
+
claude_md TEXT NOT NULL DEFAULT '',
|
|
45
|
+
-- Username of the platform user who created this agent.
|
|
46
|
+
created_by TEXT NOT NULL DEFAULT 'system',
|
|
47
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
48
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
-- -----------------------------------------------------------------------------
|
|
52
|
+
-- mcp_servers
|
|
53
|
+
-- Platform-level catalog of available MCP servers.
|
|
54
|
+
-- Defined once, reused by any agent.
|
|
55
|
+
-- Settings page at /settings/mcps manages this table.
|
|
56
|
+
-- -----------------------------------------------------------------------------
|
|
57
|
+
CREATE TABLE mcp_servers (
|
|
58
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
59
|
+
name TEXT UNIQUE NOT NULL,
|
|
60
|
+
type TEXT NOT NULL DEFAULT 'stdio'
|
|
61
|
+
CHECK (type IN ('stdio', 'sse', 'http')),
|
|
62
|
+
-- JSON config shape depends on type:
|
|
63
|
+
-- stdio: { command, args?, env? }
|
|
64
|
+
-- sse: { url, headers? }
|
|
65
|
+
-- http: { url, headers? }
|
|
66
|
+
config JSONB NOT NULL,
|
|
67
|
+
description TEXT,
|
|
68
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
69
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
-- -----------------------------------------------------------------------------
|
|
73
|
+
-- agent_mcps
|
|
74
|
+
-- Maps which MCP servers an agent uses.
|
|
75
|
+
-- When the runner starts an agent, it loads all rows for that agent_id
|
|
76
|
+
-- and passes them to the Claude Code SDK as mcpServers config.
|
|
77
|
+
-- -----------------------------------------------------------------------------
|
|
78
|
+
CREATE TABLE agent_mcps (
|
|
79
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
80
|
+
mcp_id UUID NOT NULL REFERENCES mcp_servers(id) ON DELETE CASCADE,
|
|
81
|
+
PRIMARY KEY (agent_id, mcp_id)
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
-- -----------------------------------------------------------------------------
|
|
85
|
+
-- skills
|
|
86
|
+
-- Markdown skill files that define an agent's knowledge and behavior.
|
|
87
|
+
-- Compiled in order (category ASC, sort_order ASC) into CLAUDE.md.
|
|
88
|
+
-- The runner writes CLAUDE.md to /tmp/agents/{slug}/CLAUDE.md at startup.
|
|
89
|
+
-- -----------------------------------------------------------------------------
|
|
90
|
+
CREATE TABLE skills (
|
|
91
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
92
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
93
|
+
category TEXT NOT NULL, -- e.g. "00-core", "01-knowledge"
|
|
94
|
+
filename TEXT NOT NULL, -- e.g. "identity.md"
|
|
95
|
+
content TEXT NOT NULL,
|
|
96
|
+
sort_order INT NOT NULL DEFAULT 0,
|
|
97
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
98
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
99
|
+
UNIQUE (agent_id, category, filename)
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
-- -----------------------------------------------------------------------------
|
|
103
|
+
-- permissions
|
|
104
|
+
-- Tool allowlist/denylist for each agent.
|
|
105
|
+
-- Passed to the Claude Code SDK as allowedTools/deniedTools options.
|
|
106
|
+
-- One row per agent (UNIQUE on agent_id).
|
|
107
|
+
-- -----------------------------------------------------------------------------
|
|
108
|
+
CREATE TABLE permissions (
|
|
109
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
110
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE UNIQUE,
|
|
111
|
+
allowed_tools TEXT[] NOT NULL DEFAULT '{}',
|
|
112
|
+
denied_tools TEXT[] NOT NULL DEFAULT '{}',
|
|
113
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
-- -----------------------------------------------------------------------------
|
|
117
|
+
-- memories
|
|
118
|
+
-- Persistent memory entries for each agent.
|
|
119
|
+
--
|
|
120
|
+
-- PRIMARY LEARNING MECHANISM:
|
|
121
|
+
-- When an agent processes a conversation, the Claude Code SDK may write
|
|
122
|
+
-- memory files to /tmp/agents/{slug}/.claude/memory/.
|
|
123
|
+
-- The runner watches this directory with fs.watch() and upserts any changes
|
|
124
|
+
-- into this table. On the next startup, memories are re-materialized to disk
|
|
125
|
+
-- so the agent retains everything it has learned from past interactions.
|
|
126
|
+
--
|
|
127
|
+
-- Memory is also compiled into the bottom of CLAUDE.md so it is always
|
|
128
|
+
-- in context, enabling agents to continuously improve.
|
|
129
|
+
-- -----------------------------------------------------------------------------
|
|
130
|
+
CREATE TABLE memories (
|
|
131
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
132
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
133
|
+
type TEXT NOT NULL CHECK (type IN ('user', 'feedback', 'project', 'reference')),
|
|
134
|
+
name TEXT NOT NULL,
|
|
135
|
+
content TEXT NOT NULL,
|
|
136
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
137
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
-- -----------------------------------------------------------------------------
|
|
141
|
+
-- sessions
|
|
142
|
+
-- Maps Slack thread context to Claude Code SDK session IDs.
|
|
143
|
+
-- Enables conversation continuity: users return to a thread and the agent
|
|
144
|
+
-- resumes exactly where it left off.
|
|
145
|
+
-- Replaces the JSON file used in the original nlq-claude-slack-bot.
|
|
146
|
+
-- -----------------------------------------------------------------------------
|
|
147
|
+
CREATE TABLE sessions (
|
|
148
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
149
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
150
|
+
-- Composite key: {userId}-{channelId}-{threadTs|'direct'}
|
|
151
|
+
session_key TEXT NOT NULL,
|
|
152
|
+
-- Returned by Claude Code SDK system:init message. Passed as options.resume.
|
|
153
|
+
claude_session_id TEXT,
|
|
154
|
+
-- Hash of MCP server config to detect changes and invalidate session.
|
|
155
|
+
mcp_hash TEXT,
|
|
156
|
+
last_activity TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
157
|
+
UNIQUE (agent_id, session_key)
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
-- -----------------------------------------------------------------------------
|
|
161
|
+
-- settings
|
|
162
|
+
-- Key-value store for platform-level configuration (branding, etc.).
|
|
163
|
+
-- Managed via the /settings page in the web UI.
|
|
164
|
+
-- -----------------------------------------------------------------------------
|
|
165
|
+
CREATE TABLE IF NOT EXISTS settings (
|
|
166
|
+
key TEXT PRIMARY KEY,
|
|
167
|
+
value TEXT NOT NULL,
|
|
168
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
-- -----------------------------------------------------------------------------
|
|
172
|
+
-- users
|
|
173
|
+
-- Platform users with role-based access.
|
|
174
|
+
-- Superadmin is configured via env vars and never stored here.
|
|
175
|
+
-- -----------------------------------------------------------------------------
|
|
176
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
177
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
178
|
+
username TEXT UNIQUE NOT NULL,
|
|
179
|
+
password_hash TEXT NOT NULL,
|
|
180
|
+
role TEXT NOT NULL DEFAULT 'viewer'
|
|
181
|
+
CHECK (role IN ('admin', 'editor', 'viewer')),
|
|
182
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
-- -----------------------------------------------------------------------------
|
|
186
|
+
-- scheduled_jobs
|
|
187
|
+
-- Recurring tasks executed by the boss agent on a cron schedule.
|
|
188
|
+
-- Results are posted to a Slack channel or DM.
|
|
189
|
+
-- -----------------------------------------------------------------------------
|
|
190
|
+
CREATE TABLE IF NOT EXISTS scheduled_jobs (
|
|
191
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
192
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
193
|
+
name TEXT NOT NULL,
|
|
194
|
+
prompt TEXT NOT NULL,
|
|
195
|
+
cron_schedule TEXT NOT NULL,
|
|
196
|
+
target_type TEXT NOT NULL DEFAULT 'channel'
|
|
197
|
+
CHECK (target_type IN ('channel', 'dm')),
|
|
198
|
+
target_id TEXT NOT NULL, -- Slack channel ID or user ID
|
|
199
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
200
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
201
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
-- -----------------------------------------------------------------------------
|
|
205
|
+
-- job_runs
|
|
206
|
+
-- Execution history for scheduled jobs.
|
|
207
|
+
-- -----------------------------------------------------------------------------
|
|
208
|
+
CREATE TABLE IF NOT EXISTS job_runs (
|
|
209
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
210
|
+
job_id UUID NOT NULL REFERENCES scheduled_jobs(id) ON DELETE CASCADE,
|
|
211
|
+
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
212
|
+
finished_at TIMESTAMPTZ,
|
|
213
|
+
status TEXT NOT NULL DEFAULT 'running'
|
|
214
|
+
CHECK (status IN ('running', 'success', 'error')),
|
|
215
|
+
output TEXT,
|
|
216
|
+
error TEXT
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
CREATE INDEX IF NOT EXISTS idx_job_runs_job ON job_runs(job_id, started_at DESC);
|
|
220
|
+
|
|
221
|
+
-- -----------------------------------------------------------------------------
|
|
222
|
+
-- agent_access
|
|
223
|
+
-- Explicit per-user write access grants for agents.
|
|
224
|
+
-- Admins and superadmins bypass this table entirely.
|
|
225
|
+
-- Editors can only modify agents they created or have been explicitly granted.
|
|
226
|
+
-- -----------------------------------------------------------------------------
|
|
227
|
+
CREATE TABLE IF NOT EXISTS agent_access (
|
|
228
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
229
|
+
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
230
|
+
PRIMARY KEY (agent_id, user_id)
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
-- -----------------------------------------------------------------------------
|
|
234
|
+
-- agent_snapshots
|
|
235
|
+
-- Point-in-time snapshots of an agent's full configuration (skills, tools, MCPs).
|
|
236
|
+
-- Created automatically on each config change and manually by users.
|
|
237
|
+
-- Auto-snapshots (trigger != 'manual') are capped at 10 per agent.
|
|
238
|
+
-- -----------------------------------------------------------------------------
|
|
239
|
+
CREATE TABLE IF NOT EXISTS agent_snapshots (
|
|
240
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
241
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
242
|
+
label TEXT, -- human label for manual snapshots
|
|
243
|
+
trigger TEXT NOT NULL -- 'manual' | 'skill_change' | 'tools_change' | 'mcp_change' | 'restrictions'
|
|
244
|
+
CHECK (trigger IN ('manual', 'skill_change', 'tools_change', 'mcp_change', 'restrictions', 'skills', 'permissions', 'mcps', 'claude-md')),
|
|
245
|
+
created_by TEXT NOT NULL, -- username who triggered the change
|
|
246
|
+
skills_json JSONB NOT NULL DEFAULT '[]',
|
|
247
|
+
allowed_tools TEXT[] NOT NULL DEFAULT '{}',
|
|
248
|
+
denied_tools TEXT[] NOT NULL DEFAULT '{}',
|
|
249
|
+
mcp_ids UUID[] NOT NULL DEFAULT '{}',
|
|
250
|
+
compiled_md TEXT NOT NULL DEFAULT '',
|
|
251
|
+
allowed_channels TEXT[] NOT NULL DEFAULT '{}',
|
|
252
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
-- -----------------------------------------------------------------------------
|
|
256
|
+
-- Indexes
|
|
257
|
+
-- -----------------------------------------------------------------------------
|
|
258
|
+
|
|
259
|
+
-- sessions: lookup by agent+key (hot path — every Slack message), and cleanup by activity
|
|
260
|
+
CREATE INDEX idx_sessions_agent_key ON sessions(agent_id, session_key);
|
|
261
|
+
CREATE INDEX idx_sessions_activity ON sessions(last_activity);
|
|
262
|
+
-- sessions: list all sessions for an agent ordered by recency (web UI)
|
|
263
|
+
CREATE INDEX idx_sessions_agent_activity ON sessions(agent_id, last_activity DESC);
|
|
264
|
+
|
|
265
|
+
-- skills: compile CLAUDE.md in order
|
|
266
|
+
CREATE INDEX idx_skills_agent_order ON skills(agent_id, category, sort_order);
|
|
267
|
+
|
|
268
|
+
-- memories: fetch by agent+type, and lookup by agent+name for upsert
|
|
269
|
+
CREATE INDEX idx_memories_agent_type ON memories(agent_id, type);
|
|
270
|
+
CREATE INDEX idx_memories_agent_name ON memories(agent_id, name);
|
|
271
|
+
|
|
272
|
+
-- agent_mcps: load MCP servers for an agent at startup
|
|
273
|
+
CREATE INDEX idx_agent_mcps_agent ON agent_mcps(agent_id);
|
|
274
|
+
|
|
275
|
+
-- agents: list page sorts by is_boss + name/created_at
|
|
276
|
+
CREATE INDEX idx_agents_boss_name ON agents(is_boss DESC, name ASC);
|
|
277
|
+
CREATE INDEX idx_agents_boss_created ON agents(is_boss DESC, created_at ASC);
|
|
278
|
+
|
|
279
|
+
-- mcp_servers: filter enabled servers (runner startup + agent assignment)
|
|
280
|
+
CREATE INDEX idx_mcp_servers_enabled ON mcp_servers(enabled) WHERE enabled = true;
|
|
281
|
+
|
|
282
|
+
-- scheduled_jobs: runner polls only enabled jobs
|
|
283
|
+
CREATE INDEX idx_scheduled_jobs_enabled ON scheduled_jobs(enabled) WHERE enabled = true;
|
|
284
|
+
|
|
285
|
+
-- agent_snapshots: list snapshots per agent ordered by recency
|
|
286
|
+
CREATE INDEX idx_snapshots_agent_created ON agent_snapshots(agent_id, created_at DESC);
|
|
287
|
+
|
|
288
|
+
-- agent_access: permission checks and access list per agent
|
|
289
|
+
CREATE INDEX idx_agent_access_agent ON agent_access(agent_id);
|
|
290
|
+
|
|
291
|
+
-- users: list page sorts by created_at
|
|
292
|
+
CREATE INDEX idx_users_created ON users(created_at);
|
|
293
|
+
|
|
294
|
+
-- -----------------------------------------------------------------------------
|
|
295
|
+
-- Triggers: auto-update updated_at
|
|
296
|
+
-- -----------------------------------------------------------------------------
|
|
297
|
+
CREATE OR REPLACE FUNCTION update_updated_at()
|
|
298
|
+
RETURNS TRIGGER AS $$
|
|
299
|
+
BEGIN
|
|
300
|
+
NEW.updated_at = now();
|
|
301
|
+
RETURN NEW;
|
|
302
|
+
END;
|
|
303
|
+
$$ LANGUAGE plpgsql;
|
|
304
|
+
|
|
305
|
+
CREATE TRIGGER agents_updated_at
|
|
306
|
+
BEFORE UPDATE ON agents
|
|
307
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
308
|
+
|
|
309
|
+
CREATE TRIGGER skills_updated_at
|
|
310
|
+
BEFORE UPDATE ON skills
|
|
311
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
312
|
+
|
|
313
|
+
CREATE TRIGGER memories_updated_at
|
|
314
|
+
BEFORE UPDATE ON memories
|
|
315
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
316
|
+
|
|
317
|
+
-- -----------------------------------------------------------------------------
|
|
318
|
+
-- env_vars
|
|
319
|
+
-- Platform-level key-value store for secrets (DB URLs, API keys, etc.).
|
|
320
|
+
-- Values are stored plaintext but are NEVER returned via the API — write-only.
|
|
321
|
+
-- MCP stdio configs can reference keys here via config.envRefs instead of
|
|
322
|
+
-- embedding raw values inline.
|
|
323
|
+
-- -----------------------------------------------------------------------------
|
|
324
|
+
CREATE TABLE env_vars (
|
|
325
|
+
key TEXT PRIMARY KEY,
|
|
326
|
+
value TEXT NOT NULL,
|
|
327
|
+
description TEXT,
|
|
328
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
329
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
CREATE TRIGGER env_vars_updated_at
|
|
333
|
+
BEFORE UPDATE ON env_vars
|
|
334
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
335
|
+
|
|
336
|
+
-- -----------------------------------------------------------------------------
|
|
337
|
+
-- agent_restrictions
|
|
338
|
+
-- Per-agent channel allowlist.
|
|
339
|
+
-- If allowed_channels is non-empty, the bot only responds in those channels.
|
|
340
|
+
-- Empty array = unrestricted (responds in all channels).
|
|
341
|
+
-- Bot-initiated outbound DMs (scheduled jobs) bypass this entirely.
|
|
342
|
+
-- -----------------------------------------------------------------------------
|
|
343
|
+
CREATE TABLE IF NOT EXISTS agent_restrictions (
|
|
344
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
345
|
+
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE UNIQUE,
|
|
346
|
+
allowed_channels TEXT[] NOT NULL DEFAULT '{}',
|
|
347
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
CREATE INDEX IF NOT EXISTS idx_agent_restrictions_agent ON agent_restrictions(agent_id);
|
|
351
|
+
|
|
352
|
+
CREATE TRIGGER agent_restrictions_updated_at
|
|
353
|
+
BEFORE UPDATE ON agent_restrictions
|
|
354
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|