slackhive 0.1.41 → 0.1.43
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/cli/dist/index.js +15786 -52
- package/package.json +9 -3
- package/.dockerignore +0 -14
- package/.env.example +0 -44
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -65
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -38
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -27
- package/.github/dependabot.yml +0 -20
- package/.github/workflows/audit.yml +0 -149
- package/.github/workflows/ci.yml +0 -135
- package/CHANGELOG.md +0 -52
- package/CODE_OF_CONDUCT.md +0 -37
- package/CONTRIBUTING.md +0 -204
- package/SECURITY.md +0 -47
- package/apps/runner/Dockerfile +0 -33
- package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +0 -8
- package/apps/runner/dist/__tests__/channel-restrictions.test.js +0 -63
- package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +0 -1
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +0 -20
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +0 -178
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +0 -1
- package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +0 -13
- package/apps/runner/dist/__tests__/compile-claude-md.test.js +0 -144
- package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +0 -1
- package/apps/runner/dist/__tests__/memory-sync.test.d.ts +0 -11
- package/apps/runner/dist/__tests__/memory-sync.test.js +0 -56
- package/apps/runner/dist/__tests__/memory-sync.test.js.map +0 -1
- package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +0 -9
- package/apps/runner/dist/__tests__/slack-file-support.test.js +0 -271
- package/apps/runner/dist/__tests__/slack-file-support.test.js.map +0 -1
- package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +0 -12
- package/apps/runner/dist/__tests__/slack-formatting.test.js +0 -400
- package/apps/runner/dist/__tests__/slack-formatting.test.js.map +0 -1
- package/apps/runner/dist/__tests__/thread-context.test.d.ts +0 -12
- package/apps/runner/dist/__tests__/thread-context.test.js +0 -182
- package/apps/runner/dist/__tests__/thread-context.test.js.map +0 -1
- package/apps/runner/dist/agent-runner.d.ts +0 -118
- package/apps/runner/dist/agent-runner.js +0 -352
- package/apps/runner/dist/agent-runner.js.map +0 -1
- package/apps/runner/dist/claude-handler.d.ts +0 -122
- package/apps/runner/dist/claude-handler.js +0 -402
- package/apps/runner/dist/claude-handler.js.map +0 -1
- package/apps/runner/dist/compile-claude-md.d.ts +0 -59
- package/apps/runner/dist/compile-claude-md.js +0 -291
- package/apps/runner/dist/compile-claude-md.js.map +0 -1
- package/apps/runner/dist/correction-handler.d.ts +0 -46
- package/apps/runner/dist/correction-handler.js +0 -162
- package/apps/runner/dist/correction-handler.js.map +0 -1
- package/apps/runner/dist/correction-manager.d.ts +0 -53
- package/apps/runner/dist/correction-manager.js +0 -241
- package/apps/runner/dist/correction-manager.js.map +0 -1
- package/apps/runner/dist/db.d.ts +0 -193
- package/apps/runner/dist/db.js +0 -492
- package/apps/runner/dist/db.js.map +0 -1
- package/apps/runner/dist/index.d.ts +0 -9
- package/apps/runner/dist/index.js +0 -43
- package/apps/runner/dist/index.js.map +0 -1
- package/apps/runner/dist/job-scheduler.d.ts +0 -57
- package/apps/runner/dist/job-scheduler.js +0 -150
- package/apps/runner/dist/job-scheduler.js.map +0 -1
- package/apps/runner/dist/logger.d.ts +0 -32
- package/apps/runner/dist/logger.js +0 -52
- package/apps/runner/dist/logger.js.map +0 -1
- package/apps/runner/dist/mcp-process-manager.d.ts +0 -38
- package/apps/runner/dist/mcp-process-manager.js +0 -189
- package/apps/runner/dist/mcp-process-manager.js.map +0 -1
- package/apps/runner/dist/memory-mcp.d.ts +0 -14
- package/apps/runner/dist/memory-mcp.js +0 -88
- package/apps/runner/dist/memory-mcp.js.map +0 -1
- package/apps/runner/dist/memory-watcher.d.ts +0 -78
- package/apps/runner/dist/memory-watcher.js +0 -220
- package/apps/runner/dist/memory-watcher.js.map +0 -1
- package/apps/runner/dist/slack-handler.d.ts +0 -120
- package/apps/runner/dist/slack-handler.js +0 -843
- package/apps/runner/dist/slack-handler.js.map +0 -1
- package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/apps/runner/package.json +0 -42
- package/apps/runner/src/__tests__/channel-restrictions.test.ts +0 -75
- package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +0 -160
- package/apps/runner/src/__tests__/compile-claude-md.test.ts +0 -139
- package/apps/runner/src/__tests__/memory-sync.test.ts +0 -59
- package/apps/runner/src/__tests__/slack-file-support.test.ts +0 -376
- package/apps/runner/src/__tests__/slack-formatting.test.ts +0 -495
- package/apps/runner/src/__tests__/thread-context.test.ts +0 -215
- package/apps/runner/src/agent-runner.ts +0 -397
- package/apps/runner/src/claude-handler.ts +0 -475
- package/apps/runner/src/compile-claude-md.ts +0 -283
- package/apps/runner/src/correction-handler.ts +0 -191
- package/apps/runner/src/correction-manager.ts +0 -285
- package/apps/runner/src/db.ts +0 -604
- package/apps/runner/src/index.ts +0 -46
- package/apps/runner/src/job-scheduler.ts +0 -165
- package/apps/runner/src/logger.ts +0 -49
- package/apps/runner/src/mcp-process-manager.ts +0 -195
- package/apps/runner/src/memory-mcp.ts +0 -85
- package/apps/runner/src/memory-watcher.ts +0 -215
- package/apps/runner/src/slack-handler.ts +0 -929
- package/apps/runner/tsconfig.json +0 -17
- package/apps/runner/vitest.config.mts +0 -17
- package/apps/web/.eslintrc.json +0 -3
- package/apps/web/.next/app-build-manifest.json +0 -323
- package/apps/web/.next/app-path-routes-manifest.json +0 -46
- package/apps/web/.next/build-manifest.json +0 -33
- package/apps/web/.next/cache/.previewinfo +0 -1
- package/apps/web/.next/cache/.rscinfo +0 -1
- 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 +0 -6
- package/apps/web/.next/diagnostics/framework.json +0 -1
- package/apps/web/.next/package.json +0 -1
- package/apps/web/.next/react-loadable-manifest.json +0 -1
- package/apps/web/.next/server/app/_not-found/page.js +0 -2
- package/apps/web/.next/server/app/_not-found/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/agents/[slug]/page.js +0 -4
- package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/agents/new/page.js +0 -2
- package/apps/web/.next/server/app/agents/new/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +0 -6
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +0 -3
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/route.js +0 -33
- package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/agents/route.js +0 -91
- package/apps/web/.next/server/app/api/agents/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/auth/login/route.js +0 -1
- package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/auth/logout/route.js +0 -1
- package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/auth/me/route.js +0 -1
- package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js +0 -1
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/auth/users/route.js +0 -1
- package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js +0 -1
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/env-vars/route.js +0 -1
- package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/route.js +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/jobs/route.js +0 -1
- package/apps/web/.next/server/app/api/jobs/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/route.js +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/mcps/route.js +0 -1
- package/apps/web/.next/server/app/api/mcps/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/api/settings/route.js +0 -1
- package/apps/web/.next/server/app/api/settings/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/icon.svg/route.js +0 -1
- package/apps/web/.next/server/app/icon.svg/route.js.nft.json +0 -1
- package/apps/web/.next/server/app/jobs/page.js +0 -2
- package/apps/web/.next/server/app/jobs/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/login/page.js +0 -2
- package/apps/web/.next/server/app/login/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/login/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/page.js +0 -2
- package/apps/web/.next/server/app/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/settings/env-vars/page.js +0 -2
- package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/settings/mcps/page.js +0 -2
- package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app/settings/page.js +0 -2
- package/apps/web/.next/server/app/settings/page.js.nft.json +0 -1
- package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +0 -1
- package/apps/web/.next/server/app-paths-manifest.json +0 -46
- package/apps/web/.next/server/chunks/1157.js +0 -9
- package/apps/web/.next/server/chunks/2287.js +0 -1
- package/apps/web/.next/server/chunks/3444.js +0 -1
- package/apps/web/.next/server/chunks/383.js +0 -6
- package/apps/web/.next/server/chunks/4012.js +0 -58
- package/apps/web/.next/server/chunks/6791.js +0 -1
- package/apps/web/.next/server/chunks/7171.js +0 -1
- package/apps/web/.next/server/chunks/8819.js +0 -22
- package/apps/web/.next/server/edge-runtime-webpack.js +0 -2
- package/apps/web/.next/server/edge-runtime-webpack.js.map +0 -1
- package/apps/web/.next/server/interception-route-rewrite-manifest.js +0 -1
- package/apps/web/.next/server/middleware-build-manifest.js +0 -1
- package/apps/web/.next/server/middleware-manifest.json +0 -32
- package/apps/web/.next/server/middleware-react-loadable-manifest.js +0 -1
- package/apps/web/.next/server/next-font-manifest.js +0 -1
- package/apps/web/.next/server/next-font-manifest.json +0 -1
- package/apps/web/.next/server/pages/_app.js +0 -1
- package/apps/web/.next/server/pages/_app.js.nft.json +0 -1
- package/apps/web/.next/server/pages/_document.js +0 -1
- package/apps/web/.next/server/pages/_document.js.nft.json +0 -1
- package/apps/web/.next/server/pages/_error.js +0 -19
- package/apps/web/.next/server/pages/_error.js.nft.json +0 -1
- package/apps/web/.next/server/pages-manifest.json +0 -5
- package/apps/web/.next/server/server-reference-manifest.js +0 -1
- package/apps/web/.next/server/server-reference-manifest.json +0 -1
- package/apps/web/.next/server/src/middleware.js +0 -14
- package/apps/web/.next/server/src/middleware.js.map +0 -1
- package/apps/web/.next/server/webpack-runtime.js +0 -1
- package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +0 -1
- package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
- package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +0 -1
- package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +0 -1
- package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +0 -1
- package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +0 -1
- package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +0 -1
- package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +0 -1
- package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +0 -1
- package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +0 -1
- package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +0 -1
- package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +0 -1
- package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +0 -1
- package/apps/web/.next/static/chunks/framework-811407f832a33072.js +0 -1
- package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +0 -1
- package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +0 -1
- package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +0 -1
- package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +0 -1
- package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
- package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +0 -1
- package/apps/web/.next/static/css/15371687405525e2.css +0 -5
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +0 -1
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +0 -1
- package/apps/web/.next/trace +0 -5
- package/apps/web/.next/types/app/agents/[slug]/page.ts +0 -84
- package/apps/web/.next/types/app/agents/new/page.ts +0 -84
- package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +0 -347
- package/apps/web/.next/types/app/api/agents/route.ts +0 -347
- package/apps/web/.next/types/app/api/auth/login/route.ts +0 -347
- package/apps/web/.next/types/app/api/auth/logout/route.ts +0 -347
- package/apps/web/.next/types/app/api/auth/me/route.ts +0 -347
- package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +0 -347
- package/apps/web/.next/types/app/api/auth/users/route.ts +0 -347
- package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +0 -347
- package/apps/web/.next/types/app/api/env-vars/route.ts +0 -347
- package/apps/web/.next/types/app/api/jobs/[id]/route.ts +0 -347
- package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +0 -347
- package/apps/web/.next/types/app/api/jobs/route.ts +0 -347
- package/apps/web/.next/types/app/api/mcps/[id]/route.ts +0 -347
- package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +0 -347
- package/apps/web/.next/types/app/api/mcps/route.ts +0 -347
- package/apps/web/.next/types/app/api/settings/route.ts +0 -347
- package/apps/web/.next/types/app/jobs/page.ts +0 -84
- package/apps/web/.next/types/app/login/layout.ts +0 -84
- package/apps/web/.next/types/app/login/page.ts +0 -84
- package/apps/web/.next/types/app/page.ts +0 -84
- package/apps/web/.next/types/app/settings/env-vars/page.ts +0 -84
- package/apps/web/.next/types/app/settings/mcps/page.ts +0 -84
- package/apps/web/.next/types/app/settings/page.ts +0 -84
- package/apps/web/.next/types/cache-life.d.ts +0 -141
- package/apps/web/.next/types/package.json +0 -1
- package/apps/web/.next/types/routes.d.ts +0 -114
- package/apps/web/.next/types/validator.ts +0 -448
- package/apps/web/Dockerfile +0 -37
- package/apps/web/next-env.d.ts +0 -6
- package/apps/web/next.config.js +0 -6
- package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/apps/web/package.json +0 -48
- package/apps/web/postcss.config.js +0 -3
- package/apps/web/public/logo.svg +0 -17
- package/apps/web/src/app/agents/[slug]/page.tsx +0 -2235
- package/apps/web/src/app/agents/new/page.tsx +0 -1161
- package/apps/web/src/app/api/agents/[id]/access/route.ts +0 -76
- package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +0 -111
- package/apps/web/src/app/api/agents/[id]/logs/route.ts +0 -84
- package/apps/web/src/app/api/agents/[id]/manifest/route.ts +0 -32
- package/apps/web/src/app/api/agents/[id]/mcps/route.ts +0 -73
- package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +0 -31
- package/apps/web/src/app/api/agents/[id]/memories/route.ts +0 -56
- package/apps/web/src/app/api/agents/[id]/permissions/route.ts +0 -74
- package/apps/web/src/app/api/agents/[id]/reload/route.ts +0 -33
- package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +0 -85
- package/apps/web/src/app/api/agents/[id]/route.ts +0 -81
- package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +0 -52
- package/apps/web/src/app/api/agents/[id]/skills/route.ts +0 -80
- package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +0 -38
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +0 -61
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +0 -53
- package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +0 -84
- package/apps/web/src/app/api/agents/[id]/start/route.ts +0 -35
- package/apps/web/src/app/api/agents/[id]/stop/route.ts +0 -35
- package/apps/web/src/app/api/agents/route.ts +0 -99
- package/apps/web/src/app/api/auth/login/route.ts +0 -39
- package/apps/web/src/app/api/auth/logout/route.ts +0 -21
- package/apps/web/src/app/api/auth/me/route.ts +0 -24
- package/apps/web/src/app/api/auth/users/[id]/route.ts +0 -48
- package/apps/web/src/app/api/auth/users/route.ts +0 -63
- package/apps/web/src/app/api/env-vars/[key]/route.ts +0 -66
- package/apps/web/src/app/api/env-vars/route.ts +0 -59
- package/apps/web/src/app/api/jobs/[id]/route.ts +0 -51
- package/apps/web/src/app/api/jobs/[id]/runs/route.ts +0 -24
- package/apps/web/src/app/api/jobs/route.ts +0 -42
- package/apps/web/src/app/api/mcps/[id]/route.ts +0 -60
- package/apps/web/src/app/api/mcps/[id]/test/route.ts +0 -195
- package/apps/web/src/app/api/mcps/route.ts +0 -72
- package/apps/web/src/app/api/settings/route.ts +0 -42
- package/apps/web/src/app/globals.css +0 -124
- package/apps/web/src/app/icon.svg +0 -17
- package/apps/web/src/app/jobs/page.tsx +0 -543
- package/apps/web/src/app/layout-shell.tsx +0 -89
- package/apps/web/src/app/layout.tsx +0 -18
- package/apps/web/src/app/login/layout.tsx +0 -9
- package/apps/web/src/app/login/page.tsx +0 -150
- package/apps/web/src/app/page.tsx +0 -573
- package/apps/web/src/app/settings/env-vars/page.tsx +0 -216
- package/apps/web/src/app/settings/mcps/page.tsx +0 -763
- package/apps/web/src/app/settings/page.tsx +0 -528
- package/apps/web/src/app/sidebar.tsx +0 -345
- package/apps/web/src/lib/__tests__/api-guard.test.ts +0 -189
- package/apps/web/src/lib/__tests__/auth.test.ts +0 -262
- package/apps/web/src/lib/__tests__/boss-registry.test.ts +0 -323
- package/apps/web/src/lib/__tests__/compile.test.ts +0 -161
- package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +0 -136
- package/apps/web/src/lib/__tests__/db-env-vars.test.ts +0 -216
- package/apps/web/src/lib/__tests__/db-restrictions.test.ts +0 -117
- package/apps/web/src/lib/__tests__/db.integration.test.ts +0 -271
- package/apps/web/src/lib/__tests__/diff.test.ts +0 -102
- package/apps/web/src/lib/__tests__/mcp-mask.test.ts +0 -274
- package/apps/web/src/lib/__tests__/skill-templates.test.ts +0 -237
- package/apps/web/src/lib/__tests__/slack-manifest.test.ts +0 -105
- package/apps/web/src/lib/api-guard.ts +0 -68
- package/apps/web/src/lib/auth-context.tsx +0 -71
- package/apps/web/src/lib/auth.ts +0 -128
- package/apps/web/src/lib/boss-registry.ts +0 -90
- package/apps/web/src/lib/compile.ts +0 -51
- package/apps/web/src/lib/db.ts +0 -1196
- package/apps/web/src/lib/diff.ts +0 -43
- package/apps/web/src/lib/mcp-mask.ts +0 -91
- package/apps/web/src/lib/portal.tsx +0 -23
- package/apps/web/src/lib/skill-templates.ts +0 -148
- package/apps/web/src/lib/slack-manifest.ts +0 -85
- package/apps/web/src/middleware.ts +0 -68
- package/apps/web/tailwind.config.js +0 -6
- package/apps/web/tsconfig.json +0 -23
- package/apps/web/vitest.config.mts +0 -21
- package/cli/.claude/settings.local.json +0 -6
- package/cli/node_modules/.package-lock.json +0 -427
- package/cli/node_modules/commander/LICENSE +0 -22
- package/cli/node_modules/commander/Readme.md +0 -1157
- package/cli/node_modules/commander/esm.mjs +0 -16
- package/cli/node_modules/commander/index.js +0 -24
- package/cli/node_modules/commander/lib/argument.js +0 -149
- package/cli/node_modules/commander/lib/command.js +0 -2509
- package/cli/node_modules/commander/lib/error.js +0 -39
- package/cli/node_modules/commander/lib/help.js +0 -520
- package/cli/node_modules/commander/lib/option.js +0 -330
- package/cli/node_modules/commander/lib/suggestSimilar.js +0 -101
- package/cli/node_modules/commander/package-support.json +0 -16
- package/cli/node_modules/commander/package.json +0 -84
- package/cli/node_modules/commander/typings/esm.d.mts +0 -3
- package/cli/node_modules/commander/typings/index.d.ts +0 -969
- package/cli/package-lock.json +0 -449
- package/cli/package.json +0 -44
- package/cli/src/commands/init.ts +0 -514
- package/cli/src/commands/manage.ts +0 -115
- package/cli/src/index.ts +0 -63
- package/cli/tsconfig.json +0 -14
- package/docker-compose.yml +0 -122
- package/docs/agents/boss-agents.mdx +0 -108
- package/docs/agents/creating-agents.mdx +0 -132
- package/docs/agents/memory.mdx +0 -113
- package/docs/agents/tools.mdx +0 -103
- package/docs/configuration/env-vars.mdx +0 -166
- package/docs/configuration/mcp-servers.mdx +0 -203
- package/docs/configuration/slack-app.mdx +0 -175
- package/docs/docs.json +0 -79
- package/docs/favicon.svg +0 -17
- package/docs/features/history.mdx +0 -60
- package/docs/features/import-export.mdx +0 -77
- package/docs/features/logs.mdx +0 -131
- package/docs/features/multi-workspace.mdx +0 -90
- package/docs/features/scheduled-jobs.mdx +0 -231
- package/docs/features/users.mdx +0 -92
- package/docs/introduction.mdx +0 -160
- package/docs/logo/dark.svg +0 -17
- package/docs/logo/light.svg +0 -17
- package/docs/logo/wide-dark.svg +0 -12
- package/docs/logo/wide-light.svg +0 -12
- package/docs/quickstart.mdx +0 -270
- package/docs/self-hosting/docker.mdx +0 -151
- package/docs/self-hosting/production.mdx +0 -176
- package/packages/shared/dist/index.d.ts +0 -8
- package/packages/shared/dist/index.d.ts.map +0 -1
- package/packages/shared/dist/index.js +0 -24
- package/packages/shared/dist/index.js.map +0 -1
- package/packages/shared/dist/types.d.ts +0 -584
- package/packages/shared/dist/types.d.ts.map +0 -1
- package/packages/shared/dist/types.js +0 -39
- package/packages/shared/dist/types.js.map +0 -1
- package/packages/shared/package.json +0 -15
- package/packages/shared/src/db/schema.sql +0 -354
- package/packages/shared/src/index.ts +0 -8
- package/packages/shared/src/types.ts +0 -683
- package/packages/shared/tsconfig.json +0 -17
- package/scripts/dev.sh +0 -45
package/CONTRIBUTING.md
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
# Contributing to SlackHive
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing to SlackHive! This document covers everything you need to get started. For a general introduction to contributing on GitHub, see the [GitHub contributing guide](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project).
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
- [Prerequisites](#prerequisites)
|
|
10
|
-
- [Local Development Setup](#local-development-setup)
|
|
11
|
-
- [Repository Structure](#repository-structure)
|
|
12
|
-
- [Branch Naming](#branch-naming)
|
|
13
|
-
- [Commit Style](#commit-style)
|
|
14
|
-
- [Pull Request Process](#pull-request-process)
|
|
15
|
-
- [Code Standards](#code-standards)
|
|
16
|
-
- [Reporting Bugs and Requesting Features](#reporting-bugs-and-requesting-features)
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Prerequisites
|
|
21
|
-
|
|
22
|
-
Before you begin, ensure the following tools are installed:
|
|
23
|
-
|
|
24
|
-
| Tool | Minimum Version | Notes |
|
|
25
|
-
|------|----------------|-------|
|
|
26
|
-
| [Docker](https://docs.docker.com/get-docker/) | 24+ | Required for running Postgres, Redis, and the full stack |
|
|
27
|
-
| [Docker Compose](https://docs.docker.com/compose/install/) | v2.20+ | Bundled with Docker Desktop |
|
|
28
|
-
| [Node.js](https://nodejs.org/) | 20+ | Used for running apps locally outside Docker |
|
|
29
|
-
| [git](https://git-scm.com/) | 2.38+ | |
|
|
30
|
-
|
|
31
|
-
> **Note:** Never run `npm`/`node` directly on your host machine for production-style testing — always use Docker or `docker compose` for infrastructure services (Postgres, Redis).
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Local Development Setup
|
|
36
|
-
|
|
37
|
-
### 1. Fork and clone the repository
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Fork via GitHub UI, then clone your fork
|
|
41
|
-
git clone https://github.com/<your-username>/slackhive.git
|
|
42
|
-
cd slackhive
|
|
43
|
-
|
|
44
|
-
# Add the upstream remote
|
|
45
|
-
git remote add upstream https://github.com/pelago-labs/slackhive.git
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 2. Set up environment variables
|
|
49
|
-
|
|
50
|
-
Each app has its own `.env` file. Start from the provided examples:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
cp apps/web/.env.example apps/web/.env
|
|
54
|
-
cp apps/runner/.env.example apps/runner/.env
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Edit each `.env` with your Slack app credentials, Anthropic API key, and other required values. Refer to the `README.md` for a description of each variable.
|
|
58
|
-
|
|
59
|
-
### 3. Start infrastructure services
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
docker compose up postgres redis -d
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
This starts Postgres and Redis in the background. They will be available on their default ports.
|
|
66
|
-
|
|
67
|
-
### 4. Install dependencies
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npm install
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
This installs dependencies for all workspaces (`apps/web`, `apps/runner`, `packages/shared`, `cli`) via npm workspaces.
|
|
74
|
-
|
|
75
|
-
### 5. Build the shared package
|
|
76
|
-
|
|
77
|
-
The shared package must be built before dependent apps can start:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
npm run build --workspace=packages/shared
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### 6. Run database migrations
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
# Inside the web app
|
|
87
|
-
cd apps/web && npx prisma migrate dev
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### 7. Start the development servers
|
|
91
|
-
|
|
92
|
-
Open separate terminals for each app:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
# Terminal 1 — Next.js web app
|
|
96
|
-
cd apps/web && npm run dev
|
|
97
|
-
|
|
98
|
-
# Terminal 2 — Node runner
|
|
99
|
-
cd apps/runner && npm run dev
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
The web app is available at [http://localhost:3000](http://localhost:3000) by default.
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## Repository Structure
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
slackhive/
|
|
110
|
-
├── apps/
|
|
111
|
-
│ ├── web/ # Next.js web application (dashboard, API routes)
|
|
112
|
-
│ └── runner/ # Node.js agent runner
|
|
113
|
-
├── packages/
|
|
114
|
-
│ └── shared/ # Shared TypeScript types and utilities
|
|
115
|
-
├── cli/ # SlackHive CLI tool
|
|
116
|
-
├── scripts/ # Development helper scripts
|
|
117
|
-
└── docker-compose.yml
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Branch Naming
|
|
123
|
-
|
|
124
|
-
Use the following prefixes for all branches, branched from `main`:
|
|
125
|
-
|
|
126
|
-
| Prefix | Use for |
|
|
127
|
-
|--------|---------|
|
|
128
|
-
| `feat/` | New features (e.g., `feat/agent-memory-viewer`) |
|
|
129
|
-
| `fix/` | Bug fixes (e.g., `fix/slack-oauth-redirect`) |
|
|
130
|
-
| `chore/` | Maintenance, deps, tooling (e.g., `chore/update-prisma`) |
|
|
131
|
-
| `docs/` | Documentation only (e.g., `docs/setup-guide`) |
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Commit Style
|
|
136
|
-
|
|
137
|
-
SlackHive uses [Conventional Commits](https://www.conventionalcommits.org/). Each commit message must follow this format:
|
|
138
|
-
|
|
139
|
-
```
|
|
140
|
-
<type>(<optional scope>): <short description>
|
|
141
|
-
|
|
142
|
-
[optional body]
|
|
143
|
-
|
|
144
|
-
[optional footer]
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Types:**
|
|
148
|
-
|
|
149
|
-
| Type | Description |
|
|
150
|
-
|------|-------------|
|
|
151
|
-
| `feat` | A new feature |
|
|
152
|
-
| `fix` | A bug fix |
|
|
153
|
-
| `chore` | Build process, tooling, or dependency updates |
|
|
154
|
-
| `docs` | Documentation changes only |
|
|
155
|
-
| `refactor` | Code change that is neither a fix nor a feature |
|
|
156
|
-
| `test` | Adding or updating tests |
|
|
157
|
-
| `perf` | Performance improvements |
|
|
158
|
-
| `ci` | CI configuration changes |
|
|
159
|
-
|
|
160
|
-
**Examples:**
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
feat(web): add per-agent write access control toggle
|
|
164
|
-
fix(runner): resolve race condition in job scheduler
|
|
165
|
-
chore: upgrade Prisma to 5.14
|
|
166
|
-
docs: add CONTRIBUTING guide
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Keep the subject line under 72 characters and use the imperative mood ("add", not "added" or "adds").
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## Pull Request Process
|
|
174
|
-
|
|
175
|
-
1. **Fork** the repository and create your branch from `main`.
|
|
176
|
-
2. **Implement** your changes following the code standards below.
|
|
177
|
-
3. **Test** your changes locally with `docker compose up postgres redis -d` and the dev servers running.
|
|
178
|
-
4. **Push** your branch to your fork.
|
|
179
|
-
5. **Open a PR** against the `main` branch of `pelago-labs/slackhive`.
|
|
180
|
-
6. Fill in the **PR template** completely, including screenshots for any UI changes.
|
|
181
|
-
7. Address any review feedback.
|
|
182
|
-
|
|
183
|
-
PRs should be focused — one logical change per PR. Large refactors should be discussed in a GitHub Discussion or Issue first.
|
|
184
|
-
|
|
185
|
-
**Merging:** Maintainers merge PRs using squash-and-merge to keep the commit history clean.
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Code Standards
|
|
190
|
-
|
|
191
|
-
- **TypeScript** — all code must be fully typed; avoid `any` unless strictly necessary.
|
|
192
|
-
- **Docstrings** — use [TSDoc](https://tsdoc.org/) / JSDoc-style comments for all exported functions, classes, and types (Google-style param/return descriptions).
|
|
193
|
-
- **Formatting** — the project uses ESLint and Prettier. Run `npm run lint` in the relevant workspace before submitting.
|
|
194
|
-
- **No secrets** — never commit API keys, tokens, or credentials. Use `.env` files (already `.gitignore`d).
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Reporting Bugs and Requesting Features
|
|
199
|
-
|
|
200
|
-
- **Bugs:** Open a [bug report issue](https://github.com/pelago-labs/slackhive/issues/new?template=bug_report.yml).
|
|
201
|
-
- **Features:** Open a [feature request issue](https://github.com/pelago-labs/slackhive/issues/new?template=feature_request.yml).
|
|
202
|
-
- **Questions / discussions:** Use [GitHub Discussions](https://github.com/pelago-labs/slackhive/discussions).
|
|
203
|
-
|
|
204
|
-
Please do **not** use public issues to report security vulnerabilities. See [SECURITY.md](SECURITY.md) for the responsible disclosure process.
|
package/SECURITY.md
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Security Policy
|
|
2
|
-
|
|
3
|
-
## Supported Versions
|
|
4
|
-
|
|
5
|
-
Only the latest release of SlackHive receives security fixes.
|
|
6
|
-
|
|
7
|
-
| Version | Supported |
|
|
8
|
-
|---------|-----------|
|
|
9
|
-
| 0.1.x (latest) | ✅ |
|
|
10
|
-
| < 0.1.x | ❌ |
|
|
11
|
-
|
|
12
|
-
## Reporting a Vulnerability
|
|
13
|
-
|
|
14
|
-
**Please do not report security vulnerabilities through public GitHub issues.**
|
|
15
|
-
|
|
16
|
-
Instead, use [GitHub's private security advisory feature](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability) to report vulnerabilities confidentially:
|
|
17
|
-
|
|
18
|
-
1. Go to the [Security tab](https://github.com/pelago-labs/slackhive/security/advisories/new) of this repository
|
|
19
|
-
2. Click **"Report a vulnerability"**
|
|
20
|
-
3. Fill in the details
|
|
21
|
-
|
|
22
|
-
Alternatively, email **conduct@slackhive.dev** with the subject line `[SECURITY] <brief description>`.
|
|
23
|
-
|
|
24
|
-
## Response Timeline
|
|
25
|
-
|
|
26
|
-
| Stage | Target |
|
|
27
|
-
|-------|--------|
|
|
28
|
-
| Acknowledgement | Within 48 hours |
|
|
29
|
-
| Initial assessment | Within 5 business days |
|
|
30
|
-
| Patch for critical issues | Within 14 days |
|
|
31
|
-
| Patch for moderate issues | Within 30 days |
|
|
32
|
-
|
|
33
|
-
## Scope
|
|
34
|
-
|
|
35
|
-
Issues we consider in-scope:
|
|
36
|
-
|
|
37
|
-
- Authentication bypass or session hijacking
|
|
38
|
-
- SQL injection or data exposure
|
|
39
|
-
- SSRF via MCP server configuration
|
|
40
|
-
- Privilege escalation between user roles
|
|
41
|
-
- Secrets leaked in logs or API responses
|
|
42
|
-
|
|
43
|
-
Out of scope:
|
|
44
|
-
|
|
45
|
-
- Vulnerabilities in third-party dependencies (report to upstream)
|
|
46
|
-
- Rate limiting / DoS on self-hosted instances
|
|
47
|
-
- Issues requiring physical access to the host
|
package/apps/runner/Dockerfile
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
FROM node:20-alpine AS base
|
|
2
|
-
WORKDIR /app
|
|
3
|
-
RUN apk add --no-cache curl
|
|
4
|
-
|
|
5
|
-
# Install deps
|
|
6
|
-
FROM base AS deps
|
|
7
|
-
COPY package.json package-lock.json ./
|
|
8
|
-
COPY packages/shared/package.json ./packages/shared/
|
|
9
|
-
COPY apps/runner/package.json ./apps/runner/
|
|
10
|
-
RUN npm ci
|
|
11
|
-
|
|
12
|
-
# Build
|
|
13
|
-
FROM deps AS builder
|
|
14
|
-
COPY packages/shared ./packages/shared
|
|
15
|
-
COPY apps/runner ./apps/runner
|
|
16
|
-
RUN cd packages/shared && npx tsc --skipLibCheck || true
|
|
17
|
-
RUN cd apps/runner && npx tsc --skipLibCheck || true
|
|
18
|
-
|
|
19
|
-
# Runtime — lean image, no build tools
|
|
20
|
-
FROM node:20-alpine AS runner
|
|
21
|
-
ENV NODE_ENV=production
|
|
22
|
-
WORKDIR /app
|
|
23
|
-
# Install git, Python, pip and graphify for Bash-enabled agents
|
|
24
|
-
RUN apk add --no-cache bash git python3 py3-pip
|
|
25
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
26
|
-
# Create claude wrapper that uses the SDK's bundled CLI
|
|
27
|
-
RUN printf '#!/bin/sh\ncd /app/node_modules/@anthropic-ai/claude-agent-sdk && exec node cli.js "$@"\n' > /usr/local/bin/claude && \
|
|
28
|
-
chmod +x /usr/local/bin/claude
|
|
29
|
-
COPY --from=builder /app/packages/shared ./packages/shared
|
|
30
|
-
COPY --from=builder /app/apps/runner ./apps/runner
|
|
31
|
-
COPY --from=builder /app/package.json ./
|
|
32
|
-
|
|
33
|
-
CMD ["node", "apps/runner/dist/index.js"]
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Unit tests for isChannelRestricted in slack-handler.ts.
|
|
4
|
-
*
|
|
5
|
-
* Pure function — no mocks needed.
|
|
6
|
-
*
|
|
7
|
-
* @module runner/__tests__/channel-restrictions.test
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const vitest_1 = require("vitest");
|
|
11
|
-
const slack_handler_1 = require("../slack-handler");
|
|
12
|
-
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
13
|
-
function makeRestriction(allowedChannels) {
|
|
14
|
-
return {
|
|
15
|
-
id: 'r-001',
|
|
16
|
-
agentId: 'a-001',
|
|
17
|
-
allowedChannels,
|
|
18
|
-
updatedAt: new Date(),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
// ─── isChannelRestricted ──────────────────────────────────────────────────────
|
|
22
|
-
(0, vitest_1.describe)('isChannelRestricted', () => {
|
|
23
|
-
(0, vitest_1.it)('returns false when restrictions is null', () => {
|
|
24
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_ANY', null)).toBe(false);
|
|
25
|
-
});
|
|
26
|
-
(0, vitest_1.it)('returns false when allowedChannels is empty (unrestricted)', () => {
|
|
27
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_ANY', makeRestriction([]))).toBe(false);
|
|
28
|
-
});
|
|
29
|
-
(0, vitest_1.it)('returns false when channel is in the allowedChannels list', () => {
|
|
30
|
-
const r = makeRestriction(['C_ALLOWED', 'C_OTHER']);
|
|
31
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_ALLOWED', r)).toBe(false);
|
|
32
|
-
});
|
|
33
|
-
(0, vitest_1.it)('returns true when channel is NOT in the allowedChannels list', () => {
|
|
34
|
-
const r = makeRestriction(['C_ALLOWED']);
|
|
35
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_BLOCKED', r)).toBe(true);
|
|
36
|
-
});
|
|
37
|
-
(0, vitest_1.it)('returns true for a DM channel not in the allowedChannels list', () => {
|
|
38
|
-
const r = makeRestriction(['C_ALLOWED']);
|
|
39
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('D_DM_CHANNEL', r)).toBe(true);
|
|
40
|
-
});
|
|
41
|
-
(0, vitest_1.it)('returns false for a DM channel that is explicitly in the allowedChannels list', () => {
|
|
42
|
-
const r = makeRestriction(['D_DM_CHANNEL', 'C_ALLOWED']);
|
|
43
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('D_DM_CHANNEL', r)).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
(0, vitest_1.it)('is case-sensitive — does not match wrong case', () => {
|
|
46
|
-
const r = makeRestriction(['C_abc123']);
|
|
47
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_ABC123', r)).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
(0, vitest_1.it)('handles a single-channel allowlist correctly — allowed', () => {
|
|
50
|
-
const r = makeRestriction(['C_ONLY']);
|
|
51
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_ONLY', r)).toBe(false);
|
|
52
|
-
});
|
|
53
|
-
(0, vitest_1.it)('handles a single-channel allowlist correctly — blocked', () => {
|
|
54
|
-
const r = makeRestriction(['C_ONLY']);
|
|
55
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_OTHER', r)).toBe(true);
|
|
56
|
-
});
|
|
57
|
-
(0, vitest_1.it)('returns false when allowedChannels has many entries and channel matches one', () => {
|
|
58
|
-
const channels = ['C_1', 'C_2', 'C_3', 'C_4', 'C_5'];
|
|
59
|
-
const r = makeRestriction(channels);
|
|
60
|
-
(0, vitest_1.expect)((0, slack_handler_1.isChannelRestricted)('C_3', r)).toBe(false);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=channel-restrictions.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel-restrictions.test.js","sourceRoot":"","sources":["../../src/__tests__/channel-restrictions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit tests for ClaudeHandler.resolveServerConfig and resolveEnvRefs.
|
|
3
|
-
*
|
|
4
|
-
* Tests cover:
|
|
5
|
-
* - envRefs resolution: subprocess env var is set from the env vars store value
|
|
6
|
-
* - envRefs missing key: warning logged, key omitted
|
|
7
|
-
* - Inline env + envRefs merged: both contribute to the resolved env object
|
|
8
|
-
* - envRefs stripped from the returned config (SDK doesn't understand it)
|
|
9
|
-
* - tsSource: source written to disk, config rewritten to use tsx
|
|
10
|
-
* - Plain stdio config without envRefs returned unchanged
|
|
11
|
-
*
|
|
12
|
-
* ClaudeHandler is instantiated with a minimal Agent and no MCP servers so the
|
|
13
|
-
* constructor side-effects (port hashing, McpProcessManager) are contained.
|
|
14
|
-
* The private methods are accessed via `(handler as any)` to avoid exposing them.
|
|
15
|
-
*
|
|
16
|
-
* No database, no Slack, no filesystem writes for the non-tsSource tests.
|
|
17
|
-
*
|
|
18
|
-
* @module runner/__tests__/claude-handler-resolve.test
|
|
19
|
-
*/
|
|
20
|
-
export {};
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Unit tests for ClaudeHandler.resolveServerConfig and resolveEnvRefs.
|
|
4
|
-
*
|
|
5
|
-
* Tests cover:
|
|
6
|
-
* - envRefs resolution: subprocess env var is set from the env vars store value
|
|
7
|
-
* - envRefs missing key: warning logged, key omitted
|
|
8
|
-
* - Inline env + envRefs merged: both contribute to the resolved env object
|
|
9
|
-
* - envRefs stripped from the returned config (SDK doesn't understand it)
|
|
10
|
-
* - tsSource: source written to disk, config rewritten to use tsx
|
|
11
|
-
* - Plain stdio config without envRefs returned unchanged
|
|
12
|
-
*
|
|
13
|
-
* ClaudeHandler is instantiated with a minimal Agent and no MCP servers so the
|
|
14
|
-
* constructor side-effects (port hashing, McpProcessManager) are contained.
|
|
15
|
-
* The private methods are accessed via `(handler as any)` to avoid exposing them.
|
|
16
|
-
*
|
|
17
|
-
* No database, no Slack, no filesystem writes for the non-tsSource tests.
|
|
18
|
-
*
|
|
19
|
-
* @module runner/__tests__/claude-handler-resolve.test
|
|
20
|
-
*/
|
|
21
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
-
}
|
|
27
|
-
Object.defineProperty(o, k2, desc);
|
|
28
|
-
}) : (function(o, m, k, k2) {
|
|
29
|
-
if (k2 === undefined) k2 = k;
|
|
30
|
-
o[k2] = m[k];
|
|
31
|
-
}));
|
|
32
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
-
}) : function(o, v) {
|
|
35
|
-
o["default"] = v;
|
|
36
|
-
});
|
|
37
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
-
var ownKeys = function(o) {
|
|
39
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
-
var ar = [];
|
|
41
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
-
return ar;
|
|
43
|
-
};
|
|
44
|
-
return ownKeys(o);
|
|
45
|
-
};
|
|
46
|
-
return function (mod) {
|
|
47
|
-
if (mod && mod.__esModule) return mod;
|
|
48
|
-
var result = {};
|
|
49
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
-
__setModuleDefault(result, mod);
|
|
51
|
-
return result;
|
|
52
|
-
};
|
|
53
|
-
})();
|
|
54
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
-
const fs = __importStar(require("fs"));
|
|
56
|
-
const path = __importStar(require("path"));
|
|
57
|
-
const os = __importStar(require("os"));
|
|
58
|
-
const vitest_1 = require("vitest");
|
|
59
|
-
const claude_handler_js_1 = require("../claude-handler.js");
|
|
60
|
-
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
61
|
-
function makeAgent(overrides = {}) {
|
|
62
|
-
return {
|
|
63
|
-
id: 'agent-1',
|
|
64
|
-
name: 'Test Agent',
|
|
65
|
-
slug: 'test-agent',
|
|
66
|
-
description: '',
|
|
67
|
-
slackBotToken: 'xoxb-test',
|
|
68
|
-
slackAppToken: 'xapp-test',
|
|
69
|
-
slackSigningSecret: 'secret',
|
|
70
|
-
model: 'claude-opus-4-6',
|
|
71
|
-
status: 'stopped',
|
|
72
|
-
enabled: true,
|
|
73
|
-
isBoss: false,
|
|
74
|
-
reportsTo: [],
|
|
75
|
-
claudeMd: '',
|
|
76
|
-
createdBy: 'system',
|
|
77
|
-
createdAt: new Date(),
|
|
78
|
-
updatedAt: new Date(),
|
|
79
|
-
...overrides,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function makeHandler(envVarValues = {}, workDir = '/tmp/test-handler') {
|
|
83
|
-
return new claude_handler_js_1.ClaudeHandler(makeAgent(), [], null, workDir, envVarValues);
|
|
84
|
-
}
|
|
85
|
-
// ─── resolveServerConfig — envRefs ───────────────────────────────────────────
|
|
86
|
-
(0, vitest_1.describe)('resolveServerConfig — envRefs resolution', () => {
|
|
87
|
-
(0, vitest_1.it)('resolves an envRef to the store value', () => {
|
|
88
|
-
const handler = makeHandler({ REDSHIFT_DATABASE_URL: 'postgres://host/db' });
|
|
89
|
-
const config = {
|
|
90
|
-
command: 'node',
|
|
91
|
-
args: ['server.js'],
|
|
92
|
-
envRefs: { DATABASE_URL: 'REDSHIFT_DATABASE_URL' },
|
|
93
|
-
};
|
|
94
|
-
const result = handler.resolveServerConfig('my-mcp', config);
|
|
95
|
-
const env = result.env;
|
|
96
|
-
(0, vitest_1.expect)(env.DATABASE_URL).toBe('postgres://host/db');
|
|
97
|
-
});
|
|
98
|
-
(0, vitest_1.it)('strips envRefs from the resolved config', () => {
|
|
99
|
-
const handler = makeHandler({ MY_KEY: 'my-value' });
|
|
100
|
-
const config = { command: 'node', args: [], envRefs: { ENV_KEY: 'MY_KEY' } };
|
|
101
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
102
|
-
(0, vitest_1.expect)(result.envRefs).toBeUndefined();
|
|
103
|
-
});
|
|
104
|
-
(0, vitest_1.it)('merges inline env with resolved envRefs', () => {
|
|
105
|
-
const handler = makeHandler({ STORE_KEY: 'store-value' });
|
|
106
|
-
const config = {
|
|
107
|
-
command: 'node',
|
|
108
|
-
args: [],
|
|
109
|
-
env: { INLINE_VAR: 'inline-value' },
|
|
110
|
-
envRefs: { REF_VAR: 'STORE_KEY' },
|
|
111
|
-
};
|
|
112
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
113
|
-
const env = result.env;
|
|
114
|
-
(0, vitest_1.expect)(env.INLINE_VAR).toBe('inline-value');
|
|
115
|
-
(0, vitest_1.expect)(env.REF_VAR).toBe('store-value');
|
|
116
|
-
});
|
|
117
|
-
(0, vitest_1.it)('omits the key when the store entry does not exist', () => {
|
|
118
|
-
const handler = makeHandler({}); // empty store
|
|
119
|
-
const config = { command: 'node', args: [], envRefs: { MISSING: 'NOT_IN_STORE' } };
|
|
120
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
121
|
-
const env = (result.env ?? {});
|
|
122
|
-
(0, vitest_1.expect)('MISSING' in env).toBe(false);
|
|
123
|
-
});
|
|
124
|
-
(0, vitest_1.it)('returns config unchanged when envRefs is absent', () => {
|
|
125
|
-
const handler = makeHandler({ KEY: 'val' });
|
|
126
|
-
const config = { command: 'node', args: ['s.js'], env: { LOCAL: 'x' } };
|
|
127
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
128
|
-
(0, vitest_1.expect)(result).toEqual(config);
|
|
129
|
-
});
|
|
130
|
-
(0, vitest_1.it)('returns config unchanged when envRefs is an empty object', () => {
|
|
131
|
-
const handler = makeHandler({ KEY: 'val' });
|
|
132
|
-
const config = { command: 'node', args: [], envRefs: {} };
|
|
133
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
134
|
-
(0, vitest_1.expect)(result).toEqual(config);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
// ─── resolveServerConfig — tsSource ──────────────────────────────────────────
|
|
138
|
-
(0, vitest_1.describe)('resolveServerConfig — tsSource rewrites to tsx', () => {
|
|
139
|
-
let tmpDir;
|
|
140
|
-
(0, vitest_1.afterEach)(() => {
|
|
141
|
-
if (tmpDir && fs.existsSync(tmpDir)) {
|
|
142
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
(0, vitest_1.it)('writes tsSource to disk and sets command to tsx', () => {
|
|
146
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'claude-handler-test-'));
|
|
147
|
-
const handler = makeHandler({}, tmpDir);
|
|
148
|
-
const src = 'console.log("hello from ts mcp");';
|
|
149
|
-
const config = { command: 'ignored', args: [], tsSource: src };
|
|
150
|
-
const result = handler.resolveServerConfig('my-ts-mcp', config);
|
|
151
|
-
(0, vitest_1.expect)(result.command).toBe('/app/node_modules/.bin/tsx');
|
|
152
|
-
(0, vitest_1.expect)(Array.isArray(result.args)).toBe(true);
|
|
153
|
-
const scriptPath = result.args[0];
|
|
154
|
-
(0, vitest_1.expect)(scriptPath).toContain('my-ts-mcp.ts');
|
|
155
|
-
(0, vitest_1.expect)(fs.readFileSync(scriptPath, 'utf8')).toBe(src);
|
|
156
|
-
});
|
|
157
|
-
(0, vitest_1.it)('strips tsSource from the resolved config', () => {
|
|
158
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'claude-handler-test-'));
|
|
159
|
-
const handler = makeHandler({}, tmpDir);
|
|
160
|
-
const config = { command: 'ignored', args: [], tsSource: '// source' };
|
|
161
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
162
|
-
(0, vitest_1.expect)(result.tsSource).toBeUndefined();
|
|
163
|
-
});
|
|
164
|
-
(0, vitest_1.it)('merges envRefs when tsSource is present', () => {
|
|
165
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'claude-handler-test-'));
|
|
166
|
-
const handler = makeHandler({ DB_URL: 'postgres://host/db' }, tmpDir);
|
|
167
|
-
const config = {
|
|
168
|
-
command: 'ignored',
|
|
169
|
-
args: [],
|
|
170
|
-
tsSource: '// source',
|
|
171
|
-
envRefs: { DATABASE_URL: 'DB_URL' },
|
|
172
|
-
};
|
|
173
|
-
const result = handler.resolveServerConfig('srv', config);
|
|
174
|
-
const env = result.env;
|
|
175
|
-
(0, vitest_1.expect)(env.DATABASE_URL).toBe('postgres://host/db');
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
//# sourceMappingURL=claude-handler-resolve.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-handler-resolve.test.js","sourceRoot":"","sources":["../../src/__tests__/claude-handler-resolve.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit tests for compile-claude-md helpers.
|
|
3
|
-
*
|
|
4
|
-
* Tests cover:
|
|
5
|
-
* - CLAUDE.md contains proactive /recall instruction
|
|
6
|
-
* - CLAUDE.md contains pattern-based memory-save guidance
|
|
7
|
-
* - CLAUDE.md does NOT contain the old "Only save when user explicitly guides" wording
|
|
8
|
-
* - materializeMemoryFiles writes MEMORY.md index + individual files
|
|
9
|
-
* - sanitizeFilename is not exported but indirectly tested via materializeMemoryFiles
|
|
10
|
-
*
|
|
11
|
-
* @module runner/__tests__/compile-claude-md.test
|
|
12
|
-
*/
|
|
13
|
-
export {};
|