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,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "lib": ["ES2020"],
6
+ "outDir": "dist",
7
+ "rootDir": "src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "declaration": true
12
+ },
13
+ "include": ["src"]
14
+ }
@@ -0,0 +1,122 @@
1
+ # =============================================================================
2
+ # SlackHive — Docker Compose
3
+ #
4
+ # Services:
5
+ # postgres — Primary database (port 5432)
6
+ # redis — Pub/sub for agent hot-reload events (port 6379)
7
+ # web — Next.js management UI (port 3000)
8
+ # runner — Agent runner service (manages all Slack bots)
9
+ # =============================================================================
10
+
11
+ services:
12
+ # ---------------------------------------------------------------------------
13
+ # postgres — Primary datastore
14
+ # Schema is auto-applied on first start from schema.sql.
15
+ # ---------------------------------------------------------------------------
16
+ postgres:
17
+ image: postgres:16-alpine
18
+ restart: unless-stopped
19
+ environment:
20
+ POSTGRES_DB: ${POSTGRES_DB:-agentteam}
21
+ POSTGRES_USER: ${POSTGRES_USER:-agentteam}
22
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-agentteam}
23
+ volumes:
24
+ - pgdata:/var/lib/postgresql/data
25
+ - ./packages/shared/src/db/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro
26
+ healthcheck:
27
+ test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-agentteam} -d ${POSTGRES_DB:-agentteam}"]
28
+ interval: 5s
29
+ timeout: 5s
30
+ retries: 10
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # redis — Lightweight pub/sub broker
34
+ # Used for agent reload signals from web → runner.
35
+ # ---------------------------------------------------------------------------
36
+ redis:
37
+ image: redis:7-alpine
38
+ restart: unless-stopped
39
+ command: sh -c "redis-server --requirepass $$REDIS_PASSWORD"
40
+ environment:
41
+ REDIS_PASSWORD: ${REDIS_PASSWORD}
42
+ healthcheck:
43
+ test: ["CMD-SHELL", "redis-cli -a $$REDIS_PASSWORD ping"]
44
+ interval: 5s
45
+ timeout: 3s
46
+ retries: 5
47
+
48
+ # ---------------------------------------------------------------------------
49
+ # web — Next.js 15 management UI
50
+ # Provides agent onboarding wizard, skill editor, MCP catalog,
51
+ # memory viewer, live logs, and start/stop controls.
52
+ # ---------------------------------------------------------------------------
53
+ web:
54
+ build:
55
+ context: .
56
+ dockerfile: apps/web/Dockerfile
57
+ args:
58
+ AUTH_SECRET: ${AUTH_SECRET:-change-this-secret-in-production}
59
+ ADMIN_PASSWORD: ${ADMIN_PASSWORD:-changeme}
60
+ restart: unless-stopped
61
+ ports:
62
+ - "3001:3000"
63
+ environment:
64
+ DATABASE_URL: postgresql://${POSTGRES_USER:-agentteam}:${POSTGRES_PASSWORD:-agentteam}@postgres:5432/${POSTGRES_DB:-agentteam}
65
+ REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
66
+ NODE_ENV: ${NODE_ENV:-production}
67
+ ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
68
+ ADMIN_PASSWORD: ${ADMIN_PASSWORD:-changeme}
69
+ AUTH_SECRET: ${AUTH_SECRET:-change-this-secret-in-production}
70
+ env_file:
71
+ - .env
72
+ depends_on:
73
+ postgres:
74
+ condition: service_healthy
75
+ redis:
76
+ condition: service_healthy
77
+ volumes:
78
+ # Docker socket so the logs API can tail runner container logs
79
+ - /var/run/docker.sock:/var/run/docker.sock:ro
80
+
81
+ # ---------------------------------------------------------------------------
82
+ # runner — Agent runner service
83
+ # Loads all active agents from Postgres at startup, then manages one
84
+ # @slack/bolt App instance per agent. Listens on Redis for reload events.
85
+ #
86
+ # /tmp/agents is mounted to allow the runner to write ephemeral CLAUDE.md
87
+ # files for the Claude Code SDK, and to watch for memory file writes.
88
+ # ---------------------------------------------------------------------------
89
+ runner:
90
+ build:
91
+ context: .
92
+ dockerfile: apps/runner/Dockerfile
93
+ restart: unless-stopped
94
+ environment:
95
+ DATABASE_URL: postgresql://${POSTGRES_USER:-agentteam}:${POSTGRES_PASSWORD:-agentteam}@postgres:5432/${POSTGRES_DB:-agentteam}
96
+ REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
97
+ NODE_ENV: ${NODE_ENV:-production}
98
+ env_file:
99
+ - .env
100
+ depends_on:
101
+ postgres:
102
+ condition: service_healthy
103
+ redis:
104
+ condition: service_healthy
105
+ volumes:
106
+ # Ephemeral per-agent working directories (CLAUDE.md + memory watch)
107
+ - /tmp/agents:/tmp/agents
108
+ # Mount host Claude config (read-only for credentials safety)
109
+ - ${HOME}/.claude:/root/.claude:ro
110
+ # Writable overlays for SDK runtime state (session-env, shell-snapshots)
111
+ - claude-session-env:/root/.claude/session-env
112
+ - claude-shell-snapshots:/root/.claude/shell-snapshots
113
+ # Mount host home so MCP server paths resolve inside container
114
+ - ${HOME}:${HOME}:ro
115
+
116
+ volumes:
117
+ pgdata:
118
+ driver: local
119
+ claude-session-env:
120
+ driver: local
121
+ claude-shell-snapshots:
122
+ driver: local
@@ -0,0 +1,108 @@
1
+ ---
2
+ title: "Boss Agents"
3
+ description: "Set up orchestrating Boss agents that delegate tasks to specialist teams."
4
+ ---
5
+
6
+ ## What is a Boss agent?
7
+
8
+ A Boss agent is a special type of SlackHive agent whose sole job is to receive high-level requests and delegate them to the right specialist agents. The Boss never does the specialist work itself — it orchestrates.
9
+
10
+ ```
11
+ User: @boss help me analyze last week's bookings
12
+ Boss: I'll get @data-bot on this 👇
13
+ @data-bot — user wants booking analysis for last week.
14
+ When you're done, please tag @boss so I can confirm.
15
+ DataBot: [reads full thread, runs Redshift query via MCP]
16
+ Bookings were up 12% to 4,320...
17
+ Boss: Thanks @data-bot! Here's the summary: bookings increased 12%...
18
+ ```
19
+
20
+ The Boss reads the message, looks up its team registry, and delegates to the right specialist by @mentioning them in the same Slack thread. The specialist receives the full thread as context — nothing is lost in the handoff.
21
+
22
+ ## Creating a Boss agent
23
+
24
+ During agent creation (Step 1 — Name & Role), toggle **This agent is a Boss**.
25
+
26
+ When the Boss toggle is enabled:
27
+ - The Tools step (Step 4) is skipped — Boss agents don't need MCP servers or skills
28
+ - `CLAUDE.md` is auto-generated from the team registry instead of using a custom identity file
29
+ - The Boss agent connects to Slack like any other agent and receives @mentions normally
30
+
31
+ ## The team registry
32
+
33
+ Each Boss gets a `CLAUDE.md` compiled from its team registry. The registry is a Markdown document injected into the Boss's identity that lists every specialist reporting to it.
34
+
35
+ Example registry section:
36
+
37
+ ```markdown
38
+ ## Your Team
39
+
40
+ - **DataBot** (<@U12345678>) — Data warehouse NLQ, Redshift queries, business metrics
41
+ - **Writer** (<@U87654321>) — Content generation, Slack summaries, announcements
42
+ - **Engineer** (<@U11112222>) — Code review, debugging, GitHub PR summaries
43
+ ```
44
+
45
+ The registry also includes explicit delegation rules:
46
+
47
+ ```markdown
48
+ ## Delegation Rules
49
+ - ALWAYS delegate — do not attempt to perform specialist work yourself
50
+ - Use the thread so specialists have full context
51
+ - If unsure who to delegate to, ask the user for clarification
52
+ - Always instruct the specialist to @mention you when they are done
53
+ ```
54
+
55
+ **The registry auto-regenerates** whenever any agent is created, updated, or deleted. You never need to maintain it manually.
56
+
57
+ ## Setting reportsTo
58
+
59
+ To add a specialist to a Boss's team, set the **Reports To** field on the specialist agent:
60
+
61
+ 1. Open the specialist agent's **Overview** tab
62
+ 2. Select one or more Boss agents in the **Reports To** dropdown
63
+ 3. Save — the Boss's registry regenerates automatically within seconds
64
+
65
+ A specialist can report to multiple bosses. It will appear in each selected boss's team registry. This supports multi-domain setups where the same specialist (e.g. an "Engineer" agent) is available to multiple boss agents (e.g. "Product Boss" and "Infra Boss").
66
+
67
+ ## Multiple Boss agents
68
+
69
+ You can create as many Boss agents as needed. Common patterns:
70
+
71
+ | Pattern | Example |
72
+ |---------|---------|
73
+ | **Single Boss** | One orchestrator for the entire team |
74
+ | **Domain Bosses** | Separate Boss per team (eng-boss, data-boss, content-boss) |
75
+ | **Hierarchical** | A meta-boss delegates to domain bosses, which delegate to specialists |
76
+
77
+ Each Boss only sees the specialists that explicitly report to it.
78
+
79
+ ## Delegation flow in detail
80
+
81
+ When the Boss receives a message:
82
+
83
+ 1. Boss reads the user's request
84
+ 2. Checks the team registry to identify the right specialist
85
+ 3. @mentions the specialist in the **same thread** with a clear task description
86
+ 4. Instructs the specialist to tag the Boss when done
87
+ 5. Specialist picks up the full thread context and completes the task
88
+ 6. Specialist tags the Boss to signal completion
89
+ 7. Boss reviews the result, confirms for the user, and decides if another specialist is needed or the task is done
90
+
91
+ The key design: everything happens **in the Slack thread**. Every participant can see the full conversation history — no context loss when multiple agents collaborate.
92
+
93
+ ## CLAUDE.md for Boss agents
94
+
95
+ The Boss's `CLAUDE.md` is fully auto-generated and managed by SlackHive. You cannot manually edit it through the CLAUDE.md editor (the editor is read-only for Boss agents).
96
+
97
+ The generated content includes:
98
+ - The Boss's name and orchestrator role description
99
+ - Your Role section with delegation rules
100
+ - The full team roster with Slack user IDs and descriptions
101
+ - Delegation format instructions (exact phrasing to use)
102
+ - Instructions for what to do after a specialist responds
103
+
104
+ ## Scheduled jobs
105
+
106
+ Boss agents work great with scheduled jobs — set up a daily cross-team digest, a weekly summary, or an alert that fires when something needs escalation across multiple specialists.
107
+
108
+ → See [Scheduled Jobs](/features/scheduled-jobs) for the full setup guide.
@@ -0,0 +1,132 @@
1
+ ---
2
+ title: "Creating Agents"
3
+ description: "Create a Claude agent and deploy it to Slack using the 5-step wizard."
4
+ ---
5
+
6
+ Click **New Agent** in the sidebar to open the creation wizard. Creating an agent takes about 5 minutes if you have your Slack credentials ready.
7
+
8
+ ## Step 1: Name & Role
9
+
10
+ | Field | Description |
11
+ |-------|-------------|
12
+ | **Name** | Display name shown in the UI and Slack (e.g. "Ava Engineer") |
13
+ | **Slug** | URL-safe identifier auto-generated from the name (e.g. `ava-engineer`). Used internally and as the agent's workspace directory name. |
14
+ | **Description** | What this agent does. Shown in Boss agent team registries so the Boss knows who to delegate to. |
15
+ | **Persona** | Free-form personality and behavioral instructions. Compiled into `CLAUDE.md` as the agent's identity section. |
16
+ | **Model** | The Claude model this agent uses. |
17
+
18
+ ### Model selection
19
+
20
+ | Model | Best for |
21
+ |-------|---------|
22
+ | `claude-opus-4-6` | Complex reasoning, Boss agents, multi-step planning |
23
+ | `claude-sonnet-4-6` | Balanced capability and speed — good default for most agents |
24
+ | `claude-haiku-4-5-20251001` | Fast, lightweight tasks and high-volume operations |
25
+
26
+ ### Boss vs specialist
27
+
28
+ Toggle **This agent is a Boss** if this agent should orchestrate a team:
29
+
30
+ - Boss agents skip the Tools step (they delegate rather than use tools directly)
31
+ - Boss `CLAUDE.md` is auto-generated from the team registry — it lists all specialists that report to this boss and includes explicit delegation rules
32
+ - The registry regenerates automatically whenever any agent is added, updated, or deleted
33
+
34
+ For specialist agents, use **Reports To** to select which Boss agent(s) they report to. A specialist can report to multiple bosses and will appear in each selected boss's registry.
35
+
36
+ ## Step 2: Slack App
37
+
38
+ SlackHive generates a Slack app manifest tailored for your agent. The manifest pre-configures:
39
+ - All required OAuth scopes
40
+ - Socket Mode enabled
41
+ - Bot display name matching your agent's name
42
+
43
+ **To create the Slack app:**
44
+ 1. Click **Generate Manifest** in the wizard
45
+ 2. Open [api.slack.com/apps](https://api.slack.com/apps) in a new tab
46
+ 3. Click **Create New App** → **From a manifest**
47
+ 4. Select your workspace, paste the manifest, click **Create**
48
+ 5. Go to **OAuth & Permissions** → **Install to Workspace** → **Allow**
49
+
50
+ See [Slack App Setup](/configuration/slack-app) for a detailed walkthrough.
51
+
52
+ ## Step 3: Credentials
53
+
54
+ Paste the three values from your Slack app settings:
55
+
56
+ | Field | Where to find it |
57
+ |-------|-----------------|
58
+ | **Bot Token** (`xoxb-...`) | OAuth & Permissions → Bot User OAuth Token |
59
+ | **App Token** (`xapp-...`) | Basic Information → App-Level Tokens (create with `connections:write` scope) |
60
+ | **Signing Secret** | Basic Information → App Credentials |
61
+
62
+ After saving, SlackHive verifies the Slack connection. If it fails, confirm that Socket Mode is enabled on your app.
63
+
64
+ ## Step 4: Tools
65
+
66
+ <Note>This step is skipped for Boss agents.</Note>
67
+
68
+ ### Skill template
69
+
70
+ Select a starting template for the agent's skill set:
71
+
72
+ | Template | Description |
73
+ |----------|-------------|
74
+ | **Blank** | No starter skills — clean slate |
75
+ | **Data Analyst** | SQL query patterns, data summarization, charting guidance |
76
+ | **Writer** | Content drafting, editing, tone adjustment |
77
+ | **Developer** | Code review, debugging, PR summaries, architecture commands |
78
+
79
+ Skills are Markdown files compiled as Claude Code slash commands. They can be edited or replaced at any time from the agent's **Skills** tab.
80
+
81
+ ### MCP servers
82
+
83
+ Assign MCP servers from the platform catalog to give this agent access to external tools. Each assigned server's tools become available as `mcp__{serverName}__{toolName}`.
84
+
85
+ Servers can be added or removed later from the agent's **Tools** tab.
86
+
87
+ ## Step 5: Review
88
+
89
+ Review the summary:
90
+ - Agent name, slug, model, persona
91
+ - Boss/specialist configuration
92
+ - Slack app connection status
93
+ - Assigned skills and MCP servers
94
+
95
+ Click **Create Agent** to finalize. The runner picks up the new agent within seconds via Redis pub/sub.
96
+
97
+ ## After creation
98
+
99
+ 1. The agent appears in the dashboard with **Active** status
100
+ 2. Invite the bot to a Slack channel: `/invite @your-agent-name`
101
+ 3. @mention it to start a conversation
102
+
103
+ <Tip>
104
+ Test your agent by opening a Slack DM with it. DMs don't require a channel invite.
105
+ </Tip>
106
+
107
+ ## Editing an agent
108
+
109
+ All fields are editable after creation from the agent's detail page tabs:
110
+
111
+ | Tab | What you can edit |
112
+ |-----|------------------|
113
+ | **Overview** | Name, description, persona, model, Slack credentials, channel restrictions |
114
+ | **CLAUDE.md** | The agent's main instruction/identity file directly |
115
+ | **Skills** | Skill files (slash commands), add/edit/delete |
116
+ | **Tools** | MCP server assignments, tool permissions (allowlist/denylist) |
117
+ | **Memory** | Browse, inspect, and delete agent memories |
118
+ | **History** | Version control — browse snapshots, view diffs, restore |
119
+
120
+ Every save to skills, CLAUDE.md, tools, or permissions is auto-snapshotted. Changes are live-reloaded by the runner within seconds.
121
+
122
+ ## Channel restrictions
123
+
124
+ By default, an agent responds in any channel it's invited to. To restrict to specific channels:
125
+
126
+ 1. Go to the agent's **Overview** tab
127
+ 2. Scroll to **Allowed Channels**
128
+ 3. Enter one or more Slack channel IDs (e.g. `C12345678`)
129
+
130
+ When a channel list is set, the agent silently ignores messages from other channels. If the bot is invited to a non-allowed channel, it posts a notice and immediately leaves.
131
+
132
+ Find a channel ID in Slack by right-clicking the channel name → **Copy link** — the ID is the `C...` segment at the end of the URL.
@@ -0,0 +1,113 @@
1
+ ---
2
+ title: "Agent Memory"
3
+ description: "How agents learn from conversations and recall knowledge on demand."
4
+ ---
5
+
6
+ ## How memory works
7
+
8
+ Agents learn over time by writing structured memory files during conversations. SlackHive persists these to Postgres and materializes them back to disk on the next startup — so every agent picks up exactly where it left off.
9
+
10
+ ```
11
+ Agent writes memory/{type}_{name}.md
12
+ └─► MemoryWatcher detects change (fs.watch, 200ms debounce)
13
+ └─► Parses YAML frontmatter (name, type)
14
+ └─► Upserts into memories table (Postgres)
15
+
16
+ On next agent start:
17
+ DB memories ──► materializeMemoryFiles ──► /tmp/agents/{slug}/memory/
18
+ └─► Agent uses /recall to read them
19
+ ```
20
+
21
+ ## Recalling memories
22
+
23
+ Agents use the built-in `/recall` skill to load relevant memories on demand. This keeps the context window clean — memories are only loaded when they're relevant, not stuffed into every conversation.
24
+
25
+ **The agent runs `/recall` automatically** at the start of each conversation and when the topic shifts. It reads `memory/MEMORY.md` for the index, then loads specific files that match.
26
+
27
+ ```
28
+ /recall database preferences
29
+ └─► Reads memory/MEMORY.md (index)
30
+ └─► Reads memory/feedback_avoid_mocking.md
31
+ └─► Applies the knowledge to the current response
32
+ ```
33
+
34
+ You can also trigger it manually in Slack:
35
+
36
+ ```
37
+ /recall Kai's preferences
38
+ ```
39
+
40
+ ## When agents save memories
41
+
42
+ Agents are instructed to save memories when they learn something worth keeping:
43
+
44
+ - **User explicitly corrects or guides** — "don't do X", "always do Y"
45
+ - **Recurring pattern detected** — same question asked repeatedly, same mistake made, same preference shown multiple times
46
+ - **User role or working style** — who someone is, what tools they use, how they like to communicate
47
+ - **Project decisions or constraints** — goals, deadlines, architectural choices that affect future work
48
+
49
+ Memories are saved using the Write tool to create a file in `memory/`. The agent must actually write the file — not just say it saved.
50
+
51
+ ## Memory file format
52
+
53
+ ```markdown
54
+ ---
55
+ name: kai_team_lead
56
+ description: Kai is the data team lead, prefers concise answers
57
+ type: user
58
+ ---
59
+
60
+ Kai is the lead of the data team. They prefer concise, direct answers
61
+ without lengthy preamble. They use BigQuery, not Redshift.
62
+ They prefer SQL examples over written explanations.
63
+ ```
64
+
65
+ | Field | Required | Description |
66
+ |-------|----------|-------------|
67
+ | `name` | Yes | Snake_case identifier — used as the unique key per agent |
68
+ | `type` | Yes | One of `user`, `feedback`, `project`, `reference` |
69
+ | `description` | No | One-line summary shown in the Memory tab |
70
+
71
+ ## Memory types
72
+
73
+ | Type | Purpose | Example |
74
+ |------|---------|---------|
75
+ | `feedback` | Behavioral corrections and validated approaches | "Don't mock the database in integration tests" |
76
+ | `user` | Information about people the agent works with | "Kai is the data team lead, prefers concise answers" |
77
+ | `project` | Ongoing work context, goals, decisions, deadlines | "Merge freeze starts March 5 for mobile release" |
78
+ | `reference` | Pointers to external systems and resources | "Pipeline bugs tracked in Linear project INGEST" |
79
+
80
+ ## Memory storage layout
81
+
82
+ Each agent has two memory locations:
83
+
84
+ ```
85
+ /tmp/agents/{slug}/
86
+ memory/ ← read-only, materialized from DB on startup
87
+ MEMORY.md ← index file listing all memories
88
+ user_kai_team_lead.md
89
+ feedback_avoid_mocking.md
90
+ project_mobile_release.md
91
+
92
+ sessions/{userId}-{channelId}-{threadTs}/
93
+ memory/ ← where agent writes new memories during conversations
94
+ feedback_new_learning.md
95
+ ```
96
+
97
+ The root `memory/` directory is read-only — written once at startup from the database. New memories are written to the session's `memory/` directory, picked up by `MemoryWatcher`, and persisted to Postgres. On the next restart, they appear in the root directory.
98
+
99
+ ## Viewing and managing memories
100
+
101
+ Open any agent's detail page and click the **Memory** tab. You can:
102
+
103
+ - View the full content of each memory
104
+ - See the memory type and description
105
+ - Delete a memory (removes it from the database and it won't appear on next reload)
106
+
107
+ ## Updating a memory
108
+
109
+ When an agent learns something that supersedes an existing memory, it overwrites the file with the same `name`. The database uses `(agent_id, name)` as the unique key — so updating never creates a duplicate.
110
+
111
+ ## Memory does not expire
112
+
113
+ Memories persist until you explicitly delete them. There is no TTL. Agents accumulate knowledge over time and build a richer understanding of their users and projects with every conversation.
@@ -0,0 +1,103 @@
1
+ ---
2
+ title: "Tools & Permissions"
3
+ description: "Control which tools agents can use: built-in Claude tools, MCP server tools, and the permissions system."
4
+ ---
5
+
6
+ ## Available tools
7
+
8
+ SlackHive agents can use three categories of tools:
9
+
10
+ ### Always-allowed tools
11
+
12
+ Two tools are always available to every agent regardless of permissions settings:
13
+
14
+ | Tool | Purpose |
15
+ |------|---------|
16
+ | `Read` | Read files from the agent's working directory. Used to read project context, CLAUDE.md, and reference files. |
17
+ | `Write` | Write files to the agent's working directory. **Required for the memory system** — agents must be able to write `memory/*.md` files. |
18
+
19
+ These tools cannot be removed via the permissions UI. They are hardcoded in the runner as `alwaysAllowed = ['Read', 'Write']`.
20
+
21
+ ### MCP server tools
22
+
23
+ Tools provided by assigned MCP servers. Each tool is prefixed with `mcp__{serverName}__`:
24
+
25
+ - `mcp__redshift__query` — a `query` tool from a server named `redshift`
26
+ - `mcp__github__create_issue` — a `create_issue` tool from a server named `github`
27
+ - `mcp__filesystem__read_file` — a `read_file` tool from a server named `filesystem`
28
+
29
+ All tools from all assigned MCP servers are automatically allowed when a server is assigned to an agent. To restrict specific tools, use the denylist.
30
+
31
+ ### Additional Claude tools
32
+
33
+ The Claude Code provides built-in tools beyond `Read` and `Write`. These can be added to the agent's allowlist:
34
+
35
+ | Tool | Description |
36
+ |------|-------------|
37
+ | `Bash` | Execute shell commands |
38
+ | `Edit` | Make targeted edits to files |
39
+ | `MultiEdit` | Make multiple edits to a file at once |
40
+ | `Glob` | Find files by pattern |
41
+ | `Grep` | Search file contents |
42
+ | `LS` | List directory contents |
43
+ | `WebFetch` | Fetch content from a URL |
44
+ | `WebSearch` | Search the web |
45
+ | `TodoRead` | Read the agent's task list |
46
+ | `TodoWrite` | Update the agent's task list |
47
+
48
+ ## Configuring permissions
49
+
50
+ Agent tool permissions are managed from the **Tools** tab on the agent's detail page.
51
+
52
+ ### Allowlist
53
+
54
+ Tools in the allowlist are available to the agent. The effective tool set is:
55
+
56
+ ```
57
+ effective = (alwaysAllowed + allowlist + mcpToolPrefixes) - denylist
58
+ ```
59
+
60
+ To add a tool, type its name (e.g. `Bash`, `WebFetch`) or paste an MCP tool prefix (e.g. `mcp__redshift`) to allow all tools from that server.
61
+
62
+ ### Denylist
63
+
64
+ Tools in the denylist are blocked even if they appear in the allowlist. Use this to selectively exclude tools from an MCP server you've otherwise allowed.
65
+
66
+ For example, to allow a GitHub MCP server but block the `delete_branch` tool:
67
+ - Allowlist: `mcp__github` (allows all GitHub tools)
68
+ - Denylist: `mcp__github__delete_branch` (blocks this specific tool)
69
+
70
+ ### Default behavior
71
+
72
+ When no permissions are configured for an agent:
73
+ - `Read` and `Write` are always available
74
+ - All tools from assigned MCP servers are available
75
+ - No additional Claude Code tools are available
76
+
77
+ ## Permission mode
78
+
79
+ All SlackHive agents run with `permissionMode: 'acceptEdits'`. This means:
80
+ - File edits and tool use are automatically approved without prompting
81
+ - Claude does not need to ask for confirmation before running tools
82
+ - The only control is through the allowlist/denylist
83
+
84
+ This is appropriate for the Slack context where agents are expected to act autonomously.
85
+
86
+ ## MCP server tool prefixes
87
+
88
+ When you assign an MCP server to an agent, its tool prefix (`mcp__{serverName}`) is automatically added to the allowlist. Removing the server from the agent removes the prefix from the allowlist.
89
+
90
+ If you want to assign an MCP server but only allow specific tools from it:
91
+ 1. Assign the server (adds `mcp__{serverName}` prefix)
92
+ 2. Add the specific tools you want to the allowlist directly (e.g. `mcp__redshift__query`)
93
+ 3. Add `mcp__{serverName}` to the denylist to remove the broad prefix
94
+
95
+ Or equivalently, don't assign the server via the UI but manually add the specific tool names to the allowlist.
96
+
97
+ ## Best practices
98
+
99
+ - **Keep allowlists minimal**: Only add tools the agent actually needs for its role
100
+ - **Boss agents need no tools**: Boss agents should not have MCP servers or extra tools — they delegate rather than act
101
+ - **Use `Bash` carefully**: Shell access is powerful; only add it to agents where it's necessary
102
+ - **Use denylist for destructive tools**: If an MCP server has delete/destroy tools you don't want the agent to use, add them to the denylist
103
+ - **`Write` is required for memory**: Never add `Write` to the denylist — it breaks the memory system