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.
Files changed (542) hide show
  1. package/.dockerignore +14 -0
  2. package/.env.example +44 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +27 -0
  7. package/.github/dependabot.yml +20 -0
  8. package/.github/workflows/audit.yml +149 -0
  9. package/.github/workflows/ci.yml +135 -0
  10. package/CHANGELOG.md +52 -0
  11. package/CODE_OF_CONDUCT.md +37 -0
  12. package/CONTRIBUTING.md +204 -0
  13. package/LICENSE +21 -0
  14. package/README.md +19 -0
  15. package/SECURITY.md +47 -0
  16. package/apps/runner/Dockerfile +33 -0
  17. package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +8 -0
  18. package/apps/runner/dist/__tests__/channel-restrictions.test.js +63 -0
  19. package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +1 -0
  20. package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +20 -0
  21. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +178 -0
  22. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +1 -0
  23. package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +13 -0
  24. package/apps/runner/dist/__tests__/compile-claude-md.test.js +144 -0
  25. package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +1 -0
  26. package/apps/runner/dist/__tests__/memory-sync.test.d.ts +11 -0
  27. package/apps/runner/dist/__tests__/memory-sync.test.js +56 -0
  28. package/apps/runner/dist/__tests__/memory-sync.test.js.map +1 -0
  29. package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +9 -0
  30. package/apps/runner/dist/__tests__/slack-file-support.test.js +271 -0
  31. package/apps/runner/dist/__tests__/slack-file-support.test.js.map +1 -0
  32. package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +12 -0
  33. package/apps/runner/dist/__tests__/slack-formatting.test.js +400 -0
  34. package/apps/runner/dist/__tests__/slack-formatting.test.js.map +1 -0
  35. package/apps/runner/dist/__tests__/thread-context.test.d.ts +12 -0
  36. package/apps/runner/dist/__tests__/thread-context.test.js +182 -0
  37. package/apps/runner/dist/__tests__/thread-context.test.js.map +1 -0
  38. package/apps/runner/dist/agent-runner.d.ts +118 -0
  39. package/apps/runner/dist/agent-runner.js +352 -0
  40. package/apps/runner/dist/agent-runner.js.map +1 -0
  41. package/apps/runner/dist/claude-handler.d.ts +122 -0
  42. package/apps/runner/dist/claude-handler.js +402 -0
  43. package/apps/runner/dist/claude-handler.js.map +1 -0
  44. package/apps/runner/dist/compile-claude-md.d.ts +59 -0
  45. package/apps/runner/dist/compile-claude-md.js +291 -0
  46. package/apps/runner/dist/compile-claude-md.js.map +1 -0
  47. package/apps/runner/dist/correction-handler.d.ts +46 -0
  48. package/apps/runner/dist/correction-handler.js +162 -0
  49. package/apps/runner/dist/correction-handler.js.map +1 -0
  50. package/apps/runner/dist/correction-manager.d.ts +53 -0
  51. package/apps/runner/dist/correction-manager.js +241 -0
  52. package/apps/runner/dist/correction-manager.js.map +1 -0
  53. package/apps/runner/dist/db.d.ts +193 -0
  54. package/apps/runner/dist/db.js +492 -0
  55. package/apps/runner/dist/db.js.map +1 -0
  56. package/apps/runner/dist/index.d.ts +9 -0
  57. package/apps/runner/dist/index.js +43 -0
  58. package/apps/runner/dist/index.js.map +1 -0
  59. package/apps/runner/dist/job-scheduler.d.ts +57 -0
  60. package/apps/runner/dist/job-scheduler.js +150 -0
  61. package/apps/runner/dist/job-scheduler.js.map +1 -0
  62. package/apps/runner/dist/logger.d.ts +32 -0
  63. package/apps/runner/dist/logger.js +52 -0
  64. package/apps/runner/dist/logger.js.map +1 -0
  65. package/apps/runner/dist/mcp-process-manager.d.ts +38 -0
  66. package/apps/runner/dist/mcp-process-manager.js +189 -0
  67. package/apps/runner/dist/mcp-process-manager.js.map +1 -0
  68. package/apps/runner/dist/memory-mcp.d.ts +14 -0
  69. package/apps/runner/dist/memory-mcp.js +88 -0
  70. package/apps/runner/dist/memory-mcp.js.map +1 -0
  71. package/apps/runner/dist/memory-watcher.d.ts +78 -0
  72. package/apps/runner/dist/memory-watcher.js +220 -0
  73. package/apps/runner/dist/memory-watcher.js.map +1 -0
  74. package/apps/runner/dist/slack-handler.d.ts +120 -0
  75. package/apps/runner/dist/slack-handler.js +843 -0
  76. package/apps/runner/dist/slack-handler.js.map +1 -0
  77. package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  78. package/apps/runner/package.json +42 -0
  79. package/apps/runner/src/__tests__/channel-restrictions.test.ts +75 -0
  80. package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +160 -0
  81. package/apps/runner/src/__tests__/compile-claude-md.test.ts +139 -0
  82. package/apps/runner/src/__tests__/memory-sync.test.ts +59 -0
  83. package/apps/runner/src/__tests__/slack-file-support.test.ts +376 -0
  84. package/apps/runner/src/__tests__/slack-formatting.test.ts +495 -0
  85. package/apps/runner/src/__tests__/thread-context.test.ts +215 -0
  86. package/apps/runner/src/agent-runner.ts +397 -0
  87. package/apps/runner/src/claude-handler.ts +475 -0
  88. package/apps/runner/src/compile-claude-md.ts +283 -0
  89. package/apps/runner/src/correction-handler.ts +191 -0
  90. package/apps/runner/src/correction-manager.ts +285 -0
  91. package/apps/runner/src/db.ts +604 -0
  92. package/apps/runner/src/index.ts +46 -0
  93. package/apps/runner/src/job-scheduler.ts +165 -0
  94. package/apps/runner/src/logger.ts +49 -0
  95. package/apps/runner/src/mcp-process-manager.ts +195 -0
  96. package/apps/runner/src/memory-mcp.ts +85 -0
  97. package/apps/runner/src/memory-watcher.ts +215 -0
  98. package/apps/runner/src/slack-handler.ts +929 -0
  99. package/apps/runner/tsconfig.json +17 -0
  100. package/apps/runner/vitest.config.mts +17 -0
  101. package/apps/web/.eslintrc.json +3 -0
  102. package/apps/web/.next/app-build-manifest.json +323 -0
  103. package/apps/web/.next/app-path-routes-manifest.json +46 -0
  104. package/apps/web/.next/build-manifest.json +33 -0
  105. package/apps/web/.next/cache/.previewinfo +1 -0
  106. package/apps/web/.next/cache/.rscinfo +1 -0
  107. package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
  108. package/apps/web/.next/cache/webpack/client-production/1.pack +0 -0
  109. package/apps/web/.next/cache/webpack/client-production/2.pack +0 -0
  110. package/apps/web/.next/cache/webpack/client-production/3.pack +0 -0
  111. package/apps/web/.next/cache/webpack/client-production/4.pack +0 -0
  112. package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
  113. package/apps/web/.next/cache/webpack/client-production/index.pack.old +0 -0
  114. package/apps/web/.next/cache/webpack/edge-server-production/0.pack +0 -0
  115. package/apps/web/.next/cache/webpack/edge-server-production/1.pack +0 -0
  116. package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
  117. package/apps/web/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  118. package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
  119. package/apps/web/.next/cache/webpack/server-production/1.pack +0 -0
  120. package/apps/web/.next/cache/webpack/server-production/2.pack +0 -0
  121. package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
  122. package/apps/web/.next/cache/webpack/server-production/index.pack.old +0 -0
  123. package/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
  124. package/apps/web/.next/diagnostics/framework.json +1 -0
  125. package/apps/web/.next/package.json +1 -0
  126. package/apps/web/.next/react-loadable-manifest.json +1 -0
  127. package/apps/web/.next/server/app/_not-found/page.js +2 -0
  128. package/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  129. package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  130. package/apps/web/.next/server/app/agents/[slug]/page.js +4 -0
  131. package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +1 -0
  132. package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +1 -0
  133. package/apps/web/.next/server/app/agents/new/page.js +2 -0
  134. package/apps/web/.next/server/app/agents/new/page.js.nft.json +1 -0
  135. package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +1 -0
  136. package/apps/web/.next/server/app/api/agents/[id]/access/route.js +1 -0
  137. package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +1 -0
  138. package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +1 -0
  139. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +6 -0
  140. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +1 -0
  141. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +1 -0
  142. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +3 -0
  143. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +1 -0
  144. package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +1 -0
  145. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +1 -0
  146. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +1 -0
  147. package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +1 -0
  148. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +1 -0
  149. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +1 -0
  150. package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +1 -0
  151. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +1 -0
  152. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +1 -0
  153. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +1 -0
  154. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +1 -0
  155. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +1 -0
  156. package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +1 -0
  157. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +1 -0
  158. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +1 -0
  159. package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +1 -0
  160. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +1 -0
  161. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +1 -0
  162. package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +1 -0
  163. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +1 -0
  164. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +1 -0
  165. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +1 -0
  166. package/apps/web/.next/server/app/api/agents/[id]/route.js +33 -0
  167. package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +1 -0
  168. package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +1 -0
  169. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +1 -0
  170. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +1 -0
  171. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +1 -0
  172. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +1 -0
  173. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +1 -0
  174. package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -0
  175. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +1 -0
  176. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +1 -0
  177. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +1 -0
  178. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +1 -0
  179. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +1 -0
  180. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +1 -0
  181. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +1 -0
  182. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +1 -0
  183. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +1 -0
  184. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +1 -0
  185. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +1 -0
  186. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +1 -0
  187. package/apps/web/.next/server/app/api/agents/[id]/start/route.js +1 -0
  188. package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +1 -0
  189. package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +1 -0
  190. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +1 -0
  191. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +1 -0
  192. package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +1 -0
  193. package/apps/web/.next/server/app/api/agents/route.js +91 -0
  194. package/apps/web/.next/server/app/api/agents/route.js.nft.json +1 -0
  195. package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -0
  196. package/apps/web/.next/server/app/api/auth/login/route.js +1 -0
  197. package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  198. package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  199. package/apps/web/.next/server/app/api/auth/logout/route.js +1 -0
  200. package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  201. package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  202. package/apps/web/.next/server/app/api/auth/me/route.js +1 -0
  203. package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +1 -0
  204. package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -0
  205. package/apps/web/.next/server/app/api/auth/users/[id]/route.js +1 -0
  206. package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +1 -0
  207. package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +1 -0
  208. package/apps/web/.next/server/app/api/auth/users/route.js +1 -0
  209. package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +1 -0
  210. package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +1 -0
  211. package/apps/web/.next/server/app/api/env-vars/[key]/route.js +1 -0
  212. package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +1 -0
  213. package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +1 -0
  214. package/apps/web/.next/server/app/api/env-vars/route.js +1 -0
  215. package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +1 -0
  216. package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +1 -0
  217. package/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
  218. package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
  219. package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
  220. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +1 -0
  221. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +1 -0
  222. package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +1 -0
  223. package/apps/web/.next/server/app/api/jobs/route.js +1 -0
  224. package/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
  225. package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
  226. package/apps/web/.next/server/app/api/mcps/[id]/route.js +1 -0
  227. package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +1 -0
  228. package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +1 -0
  229. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +1 -0
  230. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +1 -0
  231. package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +1 -0
  232. package/apps/web/.next/server/app/api/mcps/route.js +1 -0
  233. package/apps/web/.next/server/app/api/mcps/route.js.nft.json +1 -0
  234. package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +1 -0
  235. package/apps/web/.next/server/app/api/settings/route.js +1 -0
  236. package/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -0
  237. package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  238. package/apps/web/.next/server/app/icon.svg/route.js +1 -0
  239. package/apps/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
  240. package/apps/web/.next/server/app/jobs/page.js +2 -0
  241. package/apps/web/.next/server/app/jobs/page.js.nft.json +1 -0
  242. package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +1 -0
  243. package/apps/web/.next/server/app/login/page.js +2 -0
  244. package/apps/web/.next/server/app/login/page.js.nft.json +1 -0
  245. package/apps/web/.next/server/app/login/page_client-reference-manifest.js +1 -0
  246. package/apps/web/.next/server/app/page.js +2 -0
  247. package/apps/web/.next/server/app/page.js.nft.json +1 -0
  248. package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
  249. package/apps/web/.next/server/app/settings/env-vars/page.js +2 -0
  250. package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +1 -0
  251. package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +1 -0
  252. package/apps/web/.next/server/app/settings/mcps/page.js +2 -0
  253. package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +1 -0
  254. package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +1 -0
  255. package/apps/web/.next/server/app/settings/page.js +2 -0
  256. package/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
  257. package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  258. package/apps/web/.next/server/app-paths-manifest.json +46 -0
  259. package/apps/web/.next/server/chunks/1157.js +9 -0
  260. package/apps/web/.next/server/chunks/2287.js +1 -0
  261. package/apps/web/.next/server/chunks/3444.js +1 -0
  262. package/apps/web/.next/server/chunks/383.js +6 -0
  263. package/apps/web/.next/server/chunks/4012.js +58 -0
  264. package/apps/web/.next/server/chunks/6791.js +1 -0
  265. package/apps/web/.next/server/chunks/7171.js +1 -0
  266. package/apps/web/.next/server/chunks/8819.js +22 -0
  267. package/apps/web/.next/server/edge-runtime-webpack.js +2 -0
  268. package/apps/web/.next/server/edge-runtime-webpack.js.map +1 -0
  269. package/apps/web/.next/server/interception-route-rewrite-manifest.js +1 -0
  270. package/apps/web/.next/server/middleware-build-manifest.js +1 -0
  271. package/apps/web/.next/server/middleware-manifest.json +32 -0
  272. package/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
  273. package/apps/web/.next/server/next-font-manifest.js +1 -0
  274. package/apps/web/.next/server/next-font-manifest.json +1 -0
  275. package/apps/web/.next/server/pages/_app.js +1 -0
  276. package/apps/web/.next/server/pages/_app.js.nft.json +1 -0
  277. package/apps/web/.next/server/pages/_document.js +1 -0
  278. package/apps/web/.next/server/pages/_document.js.nft.json +1 -0
  279. package/apps/web/.next/server/pages/_error.js +19 -0
  280. package/apps/web/.next/server/pages/_error.js.nft.json +1 -0
  281. package/apps/web/.next/server/pages-manifest.json +5 -0
  282. package/apps/web/.next/server/server-reference-manifest.js +1 -0
  283. package/apps/web/.next/server/server-reference-manifest.json +1 -0
  284. package/apps/web/.next/server/src/middleware.js +14 -0
  285. package/apps/web/.next/server/src/middleware.js.map +1 -0
  286. package/apps/web/.next/server/webpack-runtime.js +1 -0
  287. package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +1 -0
  288. package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +1 -0
  289. package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +1 -0
  290. package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +1 -0
  291. package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +1 -0
  292. package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +1 -0
  293. package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +1 -0
  294. package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +1 -0
  295. package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +1 -0
  296. package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +1 -0
  297. package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +1 -0
  298. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +1 -0
  299. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +1 -0
  300. package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +1 -0
  301. package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +1 -0
  302. package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +1 -0
  303. package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +1 -0
  304. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +1 -0
  305. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +1 -0
  306. package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +1 -0
  307. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +1 -0
  308. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +1 -0
  309. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +1 -0
  310. package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +1 -0
  311. package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +1 -0
  312. package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +1 -0
  313. package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +1 -0
  314. package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +1 -0
  315. package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +1 -0
  316. package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +1 -0
  317. package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +1 -0
  318. package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +1 -0
  319. package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +1 -0
  320. package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +1 -0
  321. package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +1 -0
  322. package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +1 -0
  323. package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +1 -0
  324. package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +1 -0
  325. package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +1 -0
  326. package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +1 -0
  327. package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +1 -0
  328. package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +1 -0
  329. package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +1 -0
  330. package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +1 -0
  331. package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +1 -0
  332. package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +1 -0
  333. package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +1 -0
  334. package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +1 -0
  335. package/apps/web/.next/static/chunks/framework-811407f832a33072.js +1 -0
  336. package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +1 -0
  337. package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +1 -0
  338. package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +1 -0
  339. package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +1 -0
  340. package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  341. package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +1 -0
  342. package/apps/web/.next/static/css/15371687405525e2.css +5 -0
  343. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +1 -0
  344. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +1 -0
  345. package/apps/web/.next/trace +5 -0
  346. package/apps/web/.next/types/app/agents/[slug]/page.ts +84 -0
  347. package/apps/web/.next/types/app/agents/new/page.ts +84 -0
  348. package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +347 -0
  349. package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +347 -0
  350. package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +347 -0
  351. package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +347 -0
  352. package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +347 -0
  353. package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +347 -0
  354. package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +347 -0
  355. package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +347 -0
  356. package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +347 -0
  357. package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +347 -0
  358. package/apps/web/.next/types/app/api/agents/[id]/route.ts +347 -0
  359. package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +347 -0
  360. package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +347 -0
  361. package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +347 -0
  362. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +347 -0
  363. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +347 -0
  364. package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +347 -0
  365. package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +347 -0
  366. package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +347 -0
  367. package/apps/web/.next/types/app/api/agents/route.ts +347 -0
  368. package/apps/web/.next/types/app/api/auth/login/route.ts +347 -0
  369. package/apps/web/.next/types/app/api/auth/logout/route.ts +347 -0
  370. package/apps/web/.next/types/app/api/auth/me/route.ts +347 -0
  371. package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +347 -0
  372. package/apps/web/.next/types/app/api/auth/users/route.ts +347 -0
  373. package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +347 -0
  374. package/apps/web/.next/types/app/api/env-vars/route.ts +347 -0
  375. package/apps/web/.next/types/app/api/jobs/[id]/route.ts +347 -0
  376. package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +347 -0
  377. package/apps/web/.next/types/app/api/jobs/route.ts +347 -0
  378. package/apps/web/.next/types/app/api/mcps/[id]/route.ts +347 -0
  379. package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +347 -0
  380. package/apps/web/.next/types/app/api/mcps/route.ts +347 -0
  381. package/apps/web/.next/types/app/api/settings/route.ts +347 -0
  382. package/apps/web/.next/types/app/jobs/page.ts +84 -0
  383. package/apps/web/.next/types/app/login/layout.ts +84 -0
  384. package/apps/web/.next/types/app/login/page.ts +84 -0
  385. package/apps/web/.next/types/app/page.ts +84 -0
  386. package/apps/web/.next/types/app/settings/env-vars/page.ts +84 -0
  387. package/apps/web/.next/types/app/settings/mcps/page.ts +84 -0
  388. package/apps/web/.next/types/app/settings/page.ts +84 -0
  389. package/apps/web/.next/types/cache-life.d.ts +141 -0
  390. package/apps/web/.next/types/package.json +1 -0
  391. package/apps/web/.next/types/routes.d.ts +114 -0
  392. package/apps/web/.next/types/validator.ts +448 -0
  393. package/apps/web/Dockerfile +37 -0
  394. package/apps/web/next-env.d.ts +6 -0
  395. package/apps/web/next.config.js +6 -0
  396. package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  397. package/apps/web/package.json +48 -0
  398. package/apps/web/postcss.config.js +3 -0
  399. package/apps/web/public/logo.svg +17 -0
  400. package/apps/web/src/app/agents/[slug]/page.tsx +2235 -0
  401. package/apps/web/src/app/agents/new/page.tsx +1161 -0
  402. package/apps/web/src/app/api/agents/[id]/access/route.ts +76 -0
  403. package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +111 -0
  404. package/apps/web/src/app/api/agents/[id]/logs/route.ts +84 -0
  405. package/apps/web/src/app/api/agents/[id]/manifest/route.ts +32 -0
  406. package/apps/web/src/app/api/agents/[id]/mcps/route.ts +73 -0
  407. package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +31 -0
  408. package/apps/web/src/app/api/agents/[id]/memories/route.ts +56 -0
  409. package/apps/web/src/app/api/agents/[id]/permissions/route.ts +74 -0
  410. package/apps/web/src/app/api/agents/[id]/reload/route.ts +33 -0
  411. package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +85 -0
  412. package/apps/web/src/app/api/agents/[id]/route.ts +81 -0
  413. package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +52 -0
  414. package/apps/web/src/app/api/agents/[id]/skills/route.ts +80 -0
  415. package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +38 -0
  416. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +61 -0
  417. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +53 -0
  418. package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +84 -0
  419. package/apps/web/src/app/api/agents/[id]/start/route.ts +35 -0
  420. package/apps/web/src/app/api/agents/[id]/stop/route.ts +35 -0
  421. package/apps/web/src/app/api/agents/route.ts +99 -0
  422. package/apps/web/src/app/api/auth/login/route.ts +39 -0
  423. package/apps/web/src/app/api/auth/logout/route.ts +21 -0
  424. package/apps/web/src/app/api/auth/me/route.ts +24 -0
  425. package/apps/web/src/app/api/auth/users/[id]/route.ts +48 -0
  426. package/apps/web/src/app/api/auth/users/route.ts +63 -0
  427. package/apps/web/src/app/api/env-vars/[key]/route.ts +66 -0
  428. package/apps/web/src/app/api/env-vars/route.ts +59 -0
  429. package/apps/web/src/app/api/jobs/[id]/route.ts +51 -0
  430. package/apps/web/src/app/api/jobs/[id]/runs/route.ts +24 -0
  431. package/apps/web/src/app/api/jobs/route.ts +42 -0
  432. package/apps/web/src/app/api/mcps/[id]/route.ts +60 -0
  433. package/apps/web/src/app/api/mcps/[id]/test/route.ts +195 -0
  434. package/apps/web/src/app/api/mcps/route.ts +72 -0
  435. package/apps/web/src/app/api/settings/route.ts +42 -0
  436. package/apps/web/src/app/globals.css +124 -0
  437. package/apps/web/src/app/icon.svg +17 -0
  438. package/apps/web/src/app/jobs/page.tsx +543 -0
  439. package/apps/web/src/app/layout-shell.tsx +89 -0
  440. package/apps/web/src/app/layout.tsx +18 -0
  441. package/apps/web/src/app/login/layout.tsx +9 -0
  442. package/apps/web/src/app/login/page.tsx +150 -0
  443. package/apps/web/src/app/page.tsx +573 -0
  444. package/apps/web/src/app/settings/env-vars/page.tsx +216 -0
  445. package/apps/web/src/app/settings/mcps/page.tsx +763 -0
  446. package/apps/web/src/app/settings/page.tsx +528 -0
  447. package/apps/web/src/app/sidebar.tsx +345 -0
  448. package/apps/web/src/lib/__tests__/api-guard.test.ts +189 -0
  449. package/apps/web/src/lib/__tests__/auth.test.ts +262 -0
  450. package/apps/web/src/lib/__tests__/boss-registry.test.ts +323 -0
  451. package/apps/web/src/lib/__tests__/compile.test.ts +161 -0
  452. package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +136 -0
  453. package/apps/web/src/lib/__tests__/db-env-vars.test.ts +216 -0
  454. package/apps/web/src/lib/__tests__/db-restrictions.test.ts +117 -0
  455. package/apps/web/src/lib/__tests__/db.integration.test.ts +271 -0
  456. package/apps/web/src/lib/__tests__/diff.test.ts +102 -0
  457. package/apps/web/src/lib/__tests__/mcp-mask.test.ts +274 -0
  458. package/apps/web/src/lib/__tests__/skill-templates.test.ts +237 -0
  459. package/apps/web/src/lib/__tests__/slack-manifest.test.ts +105 -0
  460. package/apps/web/src/lib/api-guard.ts +68 -0
  461. package/apps/web/src/lib/auth-context.tsx +71 -0
  462. package/apps/web/src/lib/auth.ts +128 -0
  463. package/apps/web/src/lib/boss-registry.ts +90 -0
  464. package/apps/web/src/lib/compile.ts +51 -0
  465. package/apps/web/src/lib/db.ts +1196 -0
  466. package/apps/web/src/lib/diff.ts +43 -0
  467. package/apps/web/src/lib/mcp-mask.ts +91 -0
  468. package/apps/web/src/lib/portal.tsx +23 -0
  469. package/apps/web/src/lib/skill-templates.ts +148 -0
  470. package/apps/web/src/lib/slack-manifest.ts +85 -0
  471. package/apps/web/src/middleware.ts +68 -0
  472. package/apps/web/tailwind.config.js +6 -0
  473. package/apps/web/tsconfig.json +23 -0
  474. package/apps/web/vitest.config.mts +21 -0
  475. package/cli/.claude/settings.local.json +6 -0
  476. package/cli/README.md +281 -0
  477. package/cli/node_modules/.package-lock.json +427 -0
  478. package/cli/node_modules/commander/LICENSE +22 -0
  479. package/cli/node_modules/commander/Readme.md +1157 -0
  480. package/cli/node_modules/commander/esm.mjs +16 -0
  481. package/cli/node_modules/commander/index.js +24 -0
  482. package/cli/node_modules/commander/lib/argument.js +149 -0
  483. package/cli/node_modules/commander/lib/command.js +2509 -0
  484. package/cli/node_modules/commander/lib/error.js +39 -0
  485. package/cli/node_modules/commander/lib/help.js +520 -0
  486. package/cli/node_modules/commander/lib/option.js +330 -0
  487. package/cli/node_modules/commander/lib/suggestSimilar.js +101 -0
  488. package/cli/node_modules/commander/package-support.json +16 -0
  489. package/cli/node_modules/commander/package.json +84 -0
  490. package/cli/node_modules/commander/typings/esm.d.mts +3 -0
  491. package/cli/node_modules/commander/typings/index.d.ts +969 -0
  492. package/cli/package-lock.json +449 -0
  493. package/cli/package.json +44 -0
  494. package/cli/src/commands/init.ts +514 -0
  495. package/cli/src/commands/manage.ts +115 -0
  496. package/cli/src/index.ts +63 -0
  497. package/cli/tsconfig.json +14 -0
  498. package/docker-compose.yml +122 -0
  499. package/docs/agents/boss-agents.mdx +108 -0
  500. package/docs/agents/creating-agents.mdx +132 -0
  501. package/docs/agents/memory.mdx +113 -0
  502. package/docs/agents/tools.mdx +103 -0
  503. package/docs/configuration/env-vars.mdx +166 -0
  504. package/docs/configuration/mcp-servers.mdx +203 -0
  505. package/docs/configuration/slack-app.mdx +175 -0
  506. package/docs/docs.json +79 -0
  507. package/docs/favicon.svg +17 -0
  508. package/docs/features/history.mdx +60 -0
  509. package/docs/features/import-export.mdx +77 -0
  510. package/docs/features/logs.mdx +131 -0
  511. package/docs/features/multi-workspace.mdx +90 -0
  512. package/docs/features/scheduled-jobs.mdx +231 -0
  513. package/docs/features/users.mdx +92 -0
  514. package/docs/introduction.mdx +160 -0
  515. package/docs/logo/dark.svg +17 -0
  516. package/docs/logo/light.svg +17 -0
  517. package/docs/logo/wide-dark.svg +12 -0
  518. package/docs/logo/wide-light.svg +12 -0
  519. package/docs/quickstart.mdx +270 -0
  520. package/docs/self-hosting/docker.mdx +151 -0
  521. package/docs/self-hosting/production.mdx +176 -0
  522. package/package.json +20 -36
  523. package/packages/shared/dist/index.d.ts +8 -0
  524. package/packages/shared/dist/index.d.ts.map +1 -0
  525. package/packages/shared/dist/index.js +24 -0
  526. package/packages/shared/dist/index.js.map +1 -0
  527. package/packages/shared/dist/types.d.ts +584 -0
  528. package/packages/shared/dist/types.d.ts.map +1 -0
  529. package/packages/shared/dist/types.js +39 -0
  530. package/packages/shared/dist/types.js.map +1 -0
  531. package/packages/shared/package.json +15 -0
  532. package/packages/shared/src/db/schema.sql +354 -0
  533. package/packages/shared/src/index.ts +8 -0
  534. package/packages/shared/src/types.ts +683 -0
  535. package/packages/shared/tsconfig.json +17 -0
  536. package/scripts/dev.sh +45 -0
  537. /package/{dist → cli/dist}/commands/init.d.ts +0 -0
  538. /package/{dist → cli/dist}/commands/init.js +0 -0
  539. /package/{dist → cli/dist}/commands/manage.d.ts +0 -0
  540. /package/{dist → cli/dist}/commands/manage.js +0 -0
  541. /package/{dist → cli/dist}/index.d.ts +0 -0
  542. /package/{dist → cli/dist}/index.js +0 -0
@@ -0,0 +1,166 @@
1
+ ---
2
+ title: "Environment Variables"
3
+ description: "Complete reference for every SlackHive configuration variable, grouped by category."
4
+ ---
5
+
6
+ All SlackHive configuration lives in a single `.env` file in the project root. The `slackhive init` CLI generates this file for you automatically. For manual setup, copy the example file and fill in the values:
7
+
8
+ ```bash
9
+ cp .env.example .env
10
+ ```
11
+
12
+ <Warning>
13
+ Never commit your `.env` file to version control. It contains passwords and cryptographic keys. It's already listed in `.gitignore`, but double-check before pushing.
14
+ </Warning>
15
+
16
+ ## Claude Authentication
17
+
18
+ You need one of these two options — not both. If both are set, the API key takes precedence.
19
+
20
+ ### Option A: Anthropic API Key
21
+
22
+ Best for teams, production deployments, and predictable billing.
23
+
24
+ ```bash
25
+ ANTHROPIC_API_KEY=sk-ant-api03-...
26
+ ```
27
+
28
+ All agents share this key. You're billed per token via the [Anthropic API](https://console.anthropic.com). Set up your billing and usage limits on the Anthropic console.
29
+
30
+ ### Option B: Claude Max Subscription
31
+
32
+ Best for individual developers on a Claude Pro or Max plan ($100–$200/month for unlimited usage).
33
+
34
+ ```bash
35
+ # Leave ANTHROPIC_API_KEY unset (comment it out)
36
+ CLAUDE_BIN=/usr/local/bin/claude
37
+ ```
38
+
39
+ First, run `claude login` on the host machine to authenticate. Then mount the credentials into the runner container by adding this to `docker-compose.yml`:
40
+
41
+ ```yaml
42
+ runner:
43
+ volumes:
44
+ - ~/.claude:/root/.claude
45
+ ```
46
+
47
+ <Note>
48
+ The `CLAUDE_BIN` variable tells the runner where the `claude` binary lives on your host. Find the path with `which claude`.
49
+ </Note>
50
+
51
+ ## Database (PostgreSQL)
52
+
53
+ | Variable | Required | Description |
54
+ |----------|----------|-------------|
55
+ | `POSTGRES_DB` | Yes | Database name. Default: `slackhive` |
56
+ | `POSTGRES_USER` | Yes | Database user. Default: `slackhive` |
57
+ | `POSTGRES_PASSWORD` | Yes | Database password. Use a strong random value. |
58
+
59
+ ```bash
60
+ POSTGRES_DB=slackhive
61
+ POSTGRES_USER=slackhive
62
+ POSTGRES_PASSWORD=change-this-to-something-strong
63
+ ```
64
+
65
+ The `DATABASE_URL` used internally is constructed from these values automatically in `docker-compose.yml`. You don't set it directly.
66
+
67
+ ## Cache (Redis)
68
+
69
+ | Variable | Required | Description |
70
+ |----------|----------|-------------|
71
+ | `REDIS_PASSWORD` | Yes | Redis authentication password. Used for the pub/sub event bus between the dashboard and the runner. |
72
+
73
+ ```bash
74
+ REDIS_PASSWORD=change-this-to-something-strong
75
+ ```
76
+
77
+ ## Dashboard Authentication
78
+
79
+ | Variable | Required | Description |
80
+ |----------|----------|-------------|
81
+ | `ADMIN_USERNAME` | Yes | Superadmin login name. Stored only in `.env`, never in the database. |
82
+ | `ADMIN_PASSWORD` | Yes | Superadmin login password. Stored only in `.env`. |
83
+ | `AUTH_SECRET` | Yes | Cryptographic key for signing session cookies. Changing this logs out all users. |
84
+ | `ENV_SECRET_KEY` | Yes | Encryption key for the secret store (AES-256 via pgcrypto). Changing this breaks all stored secrets. |
85
+
86
+ ```bash
87
+ ADMIN_USERNAME=admin
88
+ ADMIN_PASSWORD=change-this-to-something-strong
89
+ AUTH_SECRET=generate-with-openssl-rand-hex-32
90
+ ENV_SECRET_KEY=generate-with-openssl-rand-hex-32
91
+ ```
92
+
93
+ <Tip>
94
+ Generate strong values for `AUTH_SECRET` and `ENV_SECRET_KEY`:
95
+ ```bash
96
+ openssl rand -hex 32
97
+ ```
98
+ Run this command twice — once for each variable. Each should be unique.
99
+ </Tip>
100
+
101
+ <Warning>
102
+ **Do not rotate these keys after your initial setup without planning ahead.**
103
+
104
+ - Rotating `AUTH_SECRET` immediately invalidates all active user sessions — everyone gets logged out.
105
+ - Rotating `ENV_SECRET_KEY` makes all stored secrets unreadable. You must re-enter every secret manually in **Settings → Env Vars** before any MCP servers using `envRefs` will work again.
106
+ </Warning>
107
+
108
+ ## Platform
109
+
110
+ | Variable | Required | Default | Description |
111
+ |----------|----------|---------|-------------|
112
+ | `NODE_ENV` | No | `development` | Set to `production` for production deployments. Affects log verbosity and error handling. |
113
+ | `AGENTS_TMP_DIR` | No | `/tmp/agents` | Root directory for agent workspaces inside the runner container. Each agent gets a subdirectory containing its `CLAUDE.md`, skills, and session data. |
114
+
115
+ ```bash
116
+ NODE_ENV=production
117
+ # AGENTS_TMP_DIR=/tmp/agents # only change if you need a custom path
118
+ ```
119
+
120
+ ## Complete .env.example
121
+
122
+ Here's the full template for reference:
123
+
124
+ ```bash
125
+ # ============================================================
126
+ # SlackHive — Environment Configuration
127
+ # Copy to .env and fill in your values.
128
+ # ============================================================
129
+
130
+ # --- Claude Authentication (choose ONE) ---
131
+
132
+ # Option A: Anthropic API key (pay-per-token)
133
+ # ANTHROPIC_API_KEY=sk-ant-api03-...
134
+
135
+ # Option B: Claude Pro or Max subscription
136
+ # Leave ANTHROPIC_API_KEY unset. Run `claude login` on the host first.
137
+ # CLAUDE_BIN=/usr/local/bin/claude
138
+
139
+ # --- PostgreSQL ---
140
+ POSTGRES_DB=slackhive
141
+ POSTGRES_USER=slackhive
142
+ POSTGRES_PASSWORD=change-me
143
+
144
+ # --- Redis ---
145
+ REDIS_PASSWORD=change-me
146
+
147
+ # --- Dashboard Auth ---
148
+ ADMIN_USERNAME=admin
149
+ ADMIN_PASSWORD=change-me
150
+ AUTH_SECRET=generate-with-openssl-rand-hex-32
151
+ ENV_SECRET_KEY=generate-with-openssl-rand-hex-32
152
+
153
+ # --- Platform ---
154
+ NODE_ENV=production
155
+ ```
156
+
157
+ ## Next steps
158
+
159
+ <CardGroup cols={2}>
160
+ <Card title="Slack App Setup" icon="slack" href="/configuration/slack-app">
161
+ Configure the Slack app for each agent.
162
+ </Card>
163
+ <Card title="MCP Servers" icon="plug" href="/configuration/mcp-servers">
164
+ Use the encrypted env store to safely pass secrets to MCP tools.
165
+ </Card>
166
+ </CardGroup>
@@ -0,0 +1,203 @@
1
+ ---
2
+ title: "MCP Servers"
3
+ description: "Connect your agents to databases, APIs, and external services using the Model Context Protocol."
4
+ ---
5
+
6
+ ## What is MCP?
7
+
8
+ **MCP (Model Context Protocol)** is a standard that lets AI agents connect to external tools and data sources. Think of MCP servers as plugins for your agents — they give agents the ability to actually *do* things beyond just having a conversation.
9
+
10
+ Without MCP, an agent can only talk. With MCP, an agent can:
11
+ - Query your database and return real results
12
+ - Read files from a repository
13
+ - Create GitHub issues
14
+ - Fetch data from any internal API
15
+ - Run custom scripts
16
+
17
+ An MCP server is a small program that exposes a set of **tools**. When an agent needs to do something — like run a SQL query — it calls the appropriate MCP tool, gets back the result, and incorporates it into its response.
18
+
19
+ <Note>
20
+ You don't need to build MCP servers from scratch. There are [many open-source MCP servers](https://github.com/modelcontextprotocol/servers) for common tools. SlackHive also supports **inline TypeScript MCPs** — you can paste code directly into the UI without deploying anything.
21
+ </Note>
22
+
23
+ ## How SlackHive manages MCP
24
+
25
+ SlackHive manages MCP servers at the **platform level**. You add a server once to the global catalog, then assign it to any number of agents.
26
+
27
+ When an agent starts, SlackHive launches all its assigned MCP servers and keeps them running. There's no per-message startup overhead — once the agent is live, its tools are always ready.
28
+
29
+ Tool names follow the pattern `mcp__{serverName}__{toolName}`. For example, a server named `redshift` with a `query` tool is called as `mcp__redshift__query`.
30
+
31
+ ## Adding a server to the catalog
32
+
33
+ <Steps>
34
+ <Step title="Open MCP Servers">
35
+ In the sidebar, click **MCP Servers** (under Settings).
36
+ </Step>
37
+ <Step title="Click Add Server">
38
+ Give it a name and description. The name becomes part of every tool name from this server (`mcp__{name}__...`).
39
+ </Step>
40
+ <Step title="Choose a transport type">
41
+ Select how SlackHive connects to this server (see the [Transport Types](#transport-types) section below).
42
+ </Step>
43
+ <Step title="Enter the configuration">
44
+ Fill in the command, URL, or script depending on your transport type.
45
+ </Step>
46
+ <Step title="Test and save">
47
+ Click **Test Connection** to verify the server starts and responds correctly. Then click **Save**.
48
+ </Step>
49
+ </Steps>
50
+
51
+ ## Transport types
52
+
53
+ There are four ways to run an MCP server:
54
+
55
+ | Transport | Use case |
56
+ |-----------|----------|
57
+ | `stdio` | A local process (Node.js script, Python script, binary) — most common |
58
+ | `sse` | A remote server accessible via HTTP server-sent events |
59
+ | `http` | A remote server accessible via HTTP |
60
+ | TypeScript inline | Paste TypeScript source directly — no deployment needed |
61
+
62
+ ## Configuration examples
63
+
64
+ ### Redshift / Data Warehouse
65
+
66
+ Give your data analyst agent the ability to run real SQL queries:
67
+
68
+ ```json
69
+ {
70
+ "name": "redshift",
71
+ "type": "stdio",
72
+ "description": "Read-only Redshift query access",
73
+ "config": {
74
+ "command": "node",
75
+ "args": ["/path/to/redshift-mcp/dist/index.js"],
76
+ "envRefs": {
77
+ "DATABASE_URL": "REDSHIFT_DATABASE_URL"
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ <Tip>
84
+ Notice the `envRefs` instead of `env`. This references a secret from the encrypted store rather than embedding the connection string directly. See [Keeping secrets safe](#keeping-secrets-safe) below.
85
+ </Tip>
86
+
87
+ ### Filesystem Access
88
+
89
+ Give an agent read access to files in a directory — useful for code review or documentation agents:
90
+
91
+ ```json
92
+ {
93
+ "name": "filesystem",
94
+ "type": "stdio",
95
+ "description": "Read files from the codebase",
96
+ "config": {
97
+ "command": "npx",
98
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/your/repo"]
99
+ }
100
+ }
101
+ ```
102
+
103
+ The agent can then use `mcp__filesystem__read_file`, `mcp__filesystem__list_directory`, etc.
104
+
105
+ ### Remote API (SSE)
106
+
107
+ Connect to a remote MCP server over the network:
108
+
109
+ ```json
110
+ {
111
+ "name": "analytics-api",
112
+ "type": "sse",
113
+ "description": "Internal analytics data API",
114
+ "config": {
115
+ "url": "https://mcp.internal.example.com/sse",
116
+ "headers": {
117
+ "Authorization": "Bearer your-token-here"
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ ### Inline TypeScript
124
+
125
+ The most convenient option for internal tools: paste TypeScript source directly into the UI. SlackHive writes it to disk and runs it — no separate deployment needed.
126
+
127
+ Select **TypeScript inline script** as the transport type, then paste your implementation:
128
+
129
+ ```typescript
130
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
131
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
132
+ import { z } from "zod";
133
+
134
+ const server = new McpServer({ name: "my-tool", version: "1.0.0" });
135
+
136
+ server.tool(
137
+ "lookup_customer",
138
+ { customer_id: z.string() },
139
+ async ({ customer_id }) => ({
140
+ content: [{ type: "text", text: `Customer ${customer_id}: Acme Corp, Plan: Pro` }],
141
+ })
142
+ );
143
+
144
+ const transport = new StdioServerTransport();
145
+ await server.connect(transport);
146
+ ```
147
+
148
+ This is ideal for simple tools you want to prototype quickly, or for internal utilities you don't want to expose as file paths.
149
+
150
+ ## Assigning servers to agents
151
+
152
+ Once a server is in the catalog, you can assign it to agents:
153
+ - **During agent creation** — Step 4 (Tools) of the wizard
154
+ - **After creation** — from the agent's **Tools** tab
155
+
156
+ An agent can have any number of MCP servers assigned. All tools from all assigned servers become available to the agent.
157
+
158
+ ## Keeping secrets safe
159
+
160
+ Never paste database credentials, API keys, or passwords directly into MCP config `env` fields. Use the **encrypted env store** instead.
161
+
162
+ The env store encrypts secrets at rest using AES-256. Values are never returned by the API or shown in the browser — only the key names are visible.
163
+
164
+ <Steps>
165
+ <Step title="Add your secret to the store">
166
+ 1. Go to **Settings → Env Vars** in the sidebar
167
+ 2. Click **Add Variable**
168
+ 3. Enter a name (e.g. `REDSHIFT_DATABASE_URL`) and the secret value
169
+ 4. Click **Save** — the value is encrypted immediately
170
+ </Step>
171
+ <Step title="Reference it in your MCP config">
172
+ In your MCP server configuration, use `envRefs` to map the store key to the environment variable name the server expects:
173
+
174
+ ```json
175
+ {
176
+ "envRefs": {
177
+ "DATABASE_URL": "REDSHIFT_DATABASE_URL"
178
+ }
179
+ }
180
+ ```
181
+
182
+ When the agent starts, the runner decrypts `REDSHIFT_DATABASE_URL` from the store and injects it as `DATABASE_URL` into the MCP process environment.
183
+ </Step>
184
+ </Steps>
185
+
186
+ The raw secret never appears in API responses, browser dev tools, or log files.
187
+
188
+ ## Testing a server
189
+
190
+ From **Settings → MCP Servers**, click the **Test** button next to any server. SlackHive starts the server process and verifies it responds to initialization. Results appear inline.
191
+
192
+ If a server fails to start, the agent still runs — an error is logged, but the agent continues without that server's tools. Check the agent's **Logs** tab for details.
193
+
194
+ ## Next steps
195
+
196
+ <CardGroup cols={2}>
197
+ <Card title="Agent Tools & Permissions" icon="shield" href="/agents/tools">
198
+ Control exactly which MCP tools each agent can use.
199
+ </Card>
200
+ <Card title="Env Vars" icon="lock" href="/configuration/env-vars">
201
+ Configure your encryption key and other platform settings.
202
+ </Card>
203
+ </CardGroup>
@@ -0,0 +1,175 @@
1
+ ---
2
+ title: "Slack App Setup"
3
+ description: "Create and configure a Slack app for each agent — the wizard generates everything, you just copy and paste."
4
+ ---
5
+
6
+ Every SlackHive agent needs its own Slack app. The app is how your agent gets a Slack identity (`@handle`), connects to your workspace, and receives messages.
7
+
8
+ The good news: **you don't need to configure scopes or settings manually.** The SlackHive wizard generates a complete app manifest — you just paste it into Slack and click a few buttons.
9
+
10
+ This page walks through that process in detail, and covers troubleshooting if something goes wrong.
11
+
12
+ ## What you're creating
13
+
14
+ Each Slack app gives your agent:
15
+ - A **bot user** — the `@handle` your team @mentions in channels
16
+ - **Socket Mode** — a persistent connection that receives messages in real time (no webhooks needed, no public URL required)
17
+ - The right **OAuth scopes** — permissions to read messages, post replies, and add reactions
18
+
19
+ ## Step 1: Generate the manifest
20
+
21
+ When you're on **Step 2** of the agent creation wizard, click **Generate Manifest**. SlackHive creates a JSON manifest pre-configured for your agent with the correct name, scopes, and Socket Mode settings.
22
+
23
+ Keep this manifest JSON ready — you'll paste it into Slack in the next step.
24
+
25
+ ## Step 2: Create the Slack app
26
+
27
+ <Steps>
28
+ <Step title="Open the Slack API console">
29
+ Go to [api.slack.com/apps](https://api.slack.com/apps) in a new browser tab. Sign in with the Slack account that has permission to install apps in your workspace.
30
+ </Step>
31
+ <Step title="Start creating a new app">
32
+ Click the **Create New App** button in the top right. A dialog will appear asking how you'd like to configure your app.
33
+ </Step>
34
+ <Step title="Choose From an app manifest">
35
+ Select **From an app manifest** (not "From scratch"). This lets you paste the pre-configured manifest rather than setting everything up manually.
36
+ </Step>
37
+ <Step title="Select your workspace">
38
+ Choose the Slack workspace where you want this agent to live. Click **Next**.
39
+ </Step>
40
+ <Step title="Paste the manifest">
41
+ You'll see a text editor. Delete any existing content, then paste the manifest JSON from the SlackHive wizard. Click **Next**.
42
+ </Step>
43
+ <Step title="Review and create">
44
+ Slack will show you a summary of the app settings. Click **Create** to finish. You'll land on the app's settings page.
45
+ </Step>
46
+ </Steps>
47
+
48
+ ## Step 3: Install to your workspace
49
+
50
+ Your app exists, but it's not yet installed in your workspace.
51
+
52
+ <Steps>
53
+ <Step title="Go to OAuth & Permissions">
54
+ In the left sidebar of the Slack app settings page, click **OAuth & Permissions**.
55
+ </Step>
56
+ <Step title="Install the app">
57
+ Click the **Install to Workspace** button near the top of the page.
58
+ </Step>
59
+ <Step title="Approve the permissions">
60
+ Slack shows you a list of what the app will be allowed to do. Review it and click **Allow**.
61
+ </Step>
62
+ </Steps>
63
+
64
+ Your bot user (`@your-agent-name`) now exists in your workspace.
65
+
66
+ ## Step 4: Collect your credentials
67
+
68
+ You need three values to connect the agent in SlackHive. Here's exactly where to find each one.
69
+
70
+ ### Bot Token (`xoxb-...`)
71
+
72
+ 1. Go to **OAuth & Permissions** in the left sidebar
73
+ 2. Under **OAuth Tokens for Your Workspace**, find **Bot User OAuth Token**
74
+ 3. Copy it — it starts with `xoxb-`
75
+
76
+ ### App Token (`xapp-...`)
77
+
78
+ 1. Go to **Basic Information** in the left sidebar
79
+ 2. Scroll down to **App-Level Tokens**
80
+ 3. Click **Generate Token and Scopes**
81
+ 4. Give it a name (e.g. `socket-mode`)
82
+ 5. Click **Add Scope** and select `connections:write`
83
+ 6. Click **Generate**
84
+ 7. Copy the token — it starts with `xapp-`
85
+
86
+ ### Signing Secret
87
+
88
+ 1. Still on **Basic Information**
89
+ 2. Under **App Credentials**, find **Signing Secret**
90
+ 3. Click **Show** to reveal it, then copy the hex string
91
+
92
+ ## Step 5: Enter credentials in SlackHive
93
+
94
+ Go back to the SlackHive agent wizard (Step 3 — Credentials) and paste all three values:
95
+
96
+ | Field | Value |
97
+ |-------|-------|
98
+ | **Bot Token** | `xoxb-...` |
99
+ | **App Token** | `xapp-...` |
100
+ | **Signing Secret** | The hex string from App Credentials |
101
+
102
+ Click **Verify Connection**. SlackHive will test the connection before letting you proceed.
103
+
104
+ ## Required OAuth scopes
105
+
106
+ The generated manifest includes these bot token scopes. Here's what each one is for:
107
+
108
+ | Scope | Why it's needed |
109
+ |-------|----------------|
110
+ | `app_mentions:read` | Receive events when the bot is @mentioned in a channel |
111
+ | `channels:history` | Read messages in public channels (needed for thread context) |
112
+ | `channels:read` | List channels and get channel info |
113
+ | `chat:write` | Post messages and replies |
114
+ | `groups:history` | Read messages in private channels |
115
+ | `groups:read` | List and access private channels |
116
+ | `im:history` | Read direct messages |
117
+ | `im:read` | Access DM channel info |
118
+ | `im:write` | Send direct messages |
119
+ | `mpim:history` | Read group DMs |
120
+ | `reactions:write` | Add emoji reactions (used for "thinking" indicators while processing) |
121
+ | `users:read` | Look up user display names (for memory and context) |
122
+
123
+ ## Troubleshooting
124
+
125
+ <Accordion title="Verification failed — connection refused">
126
+ The most common cause is **Socket Mode not being enabled**.
127
+
128
+ 1. Go to your Slack app settings
129
+ 2. Click **Socket Mode** in the left sidebar
130
+ 3. Make sure the toggle is **On**
131
+ 4. Go back to SlackHive and try verifying again
132
+ </Accordion>
133
+
134
+ <Accordion title="Verification failed — invalid token">
135
+ - Check that you pasted the **Bot Token** (starts with `xoxb-`) in the Bot Token field, not the App Token
136
+ - Make sure there are no extra spaces before or after the token
137
+ - If you recently regenerated the token, make sure you copied the new one
138
+ </Accordion>
139
+
140
+ <Accordion title="App Token scope error">
141
+ The App Token must have the `connections:write` scope. If you created the token without adding this scope:
142
+ 1. Go to **Basic Information** → **App-Level Tokens**
143
+ 2. Click on your token name
144
+ 3. Add the `connections:write` scope
145
+ 4. Regenerate the token and copy the new value
146
+ </Accordion>
147
+
148
+ <Accordion title="Bot doesn't appear in workspace">
149
+ If you can't find `@your-agent-name` in Slack after completing the wizard:
150
+ 1. Check that the app was installed: go to Slack app settings → **OAuth & Permissions** → the **Install to Workspace** button should show as already installed
151
+ 2. In Slack, type `@` in a message box and start typing the agent's name
152
+ 3. If it still doesn't appear, try reinstalling the app from **OAuth & Permissions**
153
+ </Accordion>
154
+
155
+ <Accordion title="Agent is Active but not responding">
156
+ If the dashboard shows the agent as Active but it doesn't respond to @mentions:
157
+ 1. Make sure you've **invited the bot to the channel**: `/invite @your-agent-name`
158
+ 2. Check the **Logs** tab on the agent — it will show if messages are being received
159
+ 3. Verify the agent doesn't have channel restrictions set (Overview tab → Allowed Channels)
160
+ </Accordion>
161
+
162
+ ## After setup
163
+
164
+ Once credentials are verified, the runner connects the agent to Slack automatically. The agent status changes to **Active** in the dashboard.
165
+
166
+ Invite the bot to a channel and start a conversation:
167
+
168
+ ```
169
+ /invite @your-agent-name
170
+ @your-agent-name hello!
171
+ ```
172
+
173
+ <Note>
174
+ Each agent can only be installed in one Slack workspace. If you need agents in multiple workspaces, create separate Slack apps for each workspace and create separate agent entries in SlackHive.
175
+ </Note>
package/docs/docs.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://mintlify.com/schema.json",
3
+ "name": "SlackHive",
4
+ "theme": "maple",
5
+ "logo": {
6
+ "light": "/logo/wide-light.svg",
7
+ "dark": "/logo/wide-dark.svg"
8
+ },
9
+ "favicon": "/favicon.svg",
10
+ "colors": {
11
+ "primary": "#D97757"
12
+ },
13
+ "navbar": {
14
+ "links": [
15
+ {
16
+ "label": "GitHub",
17
+ "href": "https://github.com/pelago-labs/slackhive"
18
+ }
19
+ ],
20
+ "primary": {
21
+ "type": "button",
22
+ "label": "Get Started",
23
+ "href": "https://github.com/pelago-labs/slackhive"
24
+ }
25
+ },
26
+ "footer": {
27
+ "socials": {
28
+ "github": "https://github.com/pelago-labs/slackhive"
29
+ }
30
+ },
31
+ "navigation": {
32
+ "tabs": [
33
+ {
34
+ "tab": "Documentation",
35
+ "groups": [
36
+ {
37
+ "group": "Getting Started",
38
+ "pages": ["introduction", "quickstart"]
39
+ },
40
+ {
41
+ "group": "Configuration",
42
+ "pages": [
43
+ "configuration/env-vars",
44
+ "configuration/slack-app",
45
+ "configuration/mcp-servers"
46
+ ]
47
+ },
48
+ {
49
+ "group": "Agents",
50
+ "pages": [
51
+ "agents/creating-agents",
52
+ "agents/boss-agents",
53
+ "agents/memory",
54
+ "agents/tools"
55
+ ]
56
+ },
57
+ {
58
+ "group": "Features",
59
+ "pages": [
60
+ "features/scheduled-jobs",
61
+ "features/multi-workspace",
62
+ "features/import-export",
63
+ "features/logs",
64
+ "features/history",
65
+ "features/users"
66
+ ]
67
+ },
68
+ {
69
+ "group": "Self-Hosting",
70
+ "pages": [
71
+ "self-hosting/docker",
72
+ "self-hosting/production"
73
+ ]
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ }
79
+ }
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <defs>
3
+ <style>
4
+ .bg { fill: #1A1918; }
5
+ .line { fill: none; stroke: #EBE6E0; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
6
+ .prompt-accent { fill: none; stroke: #D97757; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
7
+ .cursor { fill: #D97757; }
8
+ </style>
9
+ </defs>
10
+ <rect class="bg" width="512" height="512" rx="112" />
11
+ <path class="line" d="M 200 140 L 200 372" />
12
+ <path class="line" d="M 312 140 L 312 372" />
13
+ <path class="line" d="M 140 200 L 372 200" />
14
+ <path class="prompt-accent" d="M 100 280 L 140 312 L 100 344" />
15
+ <path class="line" d="M 180 312 L 280 312" />
16
+ <rect class="cursor" x="312" y="296" width="40" height="32" rx="6" />
17
+ </svg>