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,683 @@
1
+ /**
2
+ * @fileoverview Shared TypeScript types for the Slack Claude Code Agent Team platform.
3
+ *
4
+ * These types are used across all packages (web, runner) to ensure type safety
5
+ * and consistency. They mirror the Postgres database schema and define the
6
+ * contracts for Redis pub/sub events and REST API requests/responses.
7
+ *
8
+ * @module @slackhive/shared/types
9
+ */
10
+
11
+ // =============================================================================
12
+ // MCP Server Configuration Types
13
+ // =============================================================================
14
+
15
+ /**
16
+ * Configuration for a stdio-based MCP server (subprocess).
17
+ * The most common type — spawns a local process.
18
+ */
19
+ export interface McpStdioConfig {
20
+ /** The command to execute (e.g., "node", "uvx", "python"). */
21
+ command: string;
22
+ /** Arguments to pass to the command. */
23
+ args?: string[];
24
+ /** Inline environment variables to inject into the subprocess. Values are masked in API responses. */
25
+ env?: Record<string, string>;
26
+ /**
27
+ * Maps subprocess env var name → key in the platform env_vars store.
28
+ * Resolved by the runner at agent start time. Not masked — these are key names, not secrets.
29
+ * Example: { "DATABASE_URL": "REDSHIFT_DATABASE_URL" }
30
+ */
31
+ envRefs?: Record<string, string>;
32
+ /**
33
+ * Inline TypeScript source code for this MCP server.
34
+ * When present, the runner writes this to disk and executes it with `tsx`.
35
+ * command/args are ignored when tsSource is set.
36
+ */
37
+ tsSource?: string;
38
+ }
39
+
40
+ /**
41
+ * Configuration for a Server-Sent Events (SSE) MCP server.
42
+ * Used for remote MCP servers that stream over HTTP.
43
+ */
44
+ export interface McpSseConfig {
45
+ type?: 'sse';
46
+ /** The SSE endpoint URL. */
47
+ url: string;
48
+ /** HTTP headers to include in requests (e.g., Authorization). */
49
+ headers?: Record<string, string>;
50
+ /** Maps header name → key in platform env_vars store (resolved by runner). */
51
+ envRefs?: Record<string, string>;
52
+ }
53
+
54
+ /**
55
+ * Configuration for an HTTP-based MCP server.
56
+ * Used for remote MCP servers with HTTP transport.
57
+ */
58
+ export interface McpHttpConfig {
59
+ type?: 'http';
60
+ /** The HTTP endpoint URL. */
61
+ url: string;
62
+ /** HTTP headers to include in requests (e.g., Authorization). */
63
+ headers?: Record<string, string>;
64
+ /** Maps header name → key in platform env_vars store (resolved by runner). */
65
+ envRefs?: Record<string, string>;
66
+ }
67
+
68
+ /** Union of all supported MCP server configuration shapes. */
69
+ export type McpServerConfig = McpStdioConfig | McpSseConfig | McpHttpConfig;
70
+
71
+ /** Transport type of an MCP server. */
72
+ export type McpServerType = 'stdio' | 'sse' | 'http';
73
+
74
+ // =============================================================================
75
+ // Database Model Types
76
+ // =============================================================================
77
+
78
+ /** Agent status values reflecting the runtime state of the Slack bot. */
79
+ export type AgentStatus = 'running' | 'stopped' | 'error';
80
+
81
+ /**
82
+ * A registered agent in the platform.
83
+ * Each agent maps to one Slack bot (one set of Slack credentials) and runs
84
+ * as an independent Bolt application inside the runner service.
85
+ */
86
+ export interface Agent {
87
+ /** UUID primary key. */
88
+ id: string;
89
+ /**
90
+ * URL-safe identifier used in filesystem paths and UI routes.
91
+ * @example "gilfoyle", "boss", "data-analyst"
92
+ */
93
+ slug: string;
94
+ /** Human-readable display name shown in the UI and Slack. */
95
+ name: string;
96
+ /**
97
+ * The agent's persona/identity description injected into its CLAUDE.md.
98
+ * Defines how the agent presents itself and what it specializes in.
99
+ */
100
+ persona?: string;
101
+ /**
102
+ * Short description of what this agent does.
103
+ * Used by the boss agent to decide when to delegate to this agent.
104
+ * @example "Data warehouse NLQ, Redshift queries, business metrics"
105
+ */
106
+ description?: string;
107
+ /** Slack bot token (xoxb-...) for sending messages. */
108
+ slackBotToken: string;
109
+ /** Slack app-level token (xapp-...) for Socket Mode connection. */
110
+ slackAppToken: string;
111
+ /** Slack signing secret for request verification. */
112
+ slackSigningSecret: string;
113
+ /**
114
+ * The bot's Slack user ID (e.g., U12345678).
115
+ * Populated automatically on first connection via auth.test API.
116
+ * Used by the boss agent to construct proper @mentions.
117
+ */
118
+ slackBotUserId?: string;
119
+ /**
120
+ * The Claude model to use for this agent.
121
+ * @default "claude-opus-4-6"
122
+ */
123
+ model: string;
124
+ /** Current runtime status of the agent's Slack bot process. */
125
+ status: AgentStatus;
126
+ /**
127
+ * Whether this agent should auto-start when the runner starts.
128
+ * Set to false only when the user explicitly stops the agent.
129
+ * Runner restarts never change this value.
130
+ */
131
+ enabled: boolean;
132
+ /**
133
+ * Whether this is a boss agent.
134
+ * Multiple boss agents are supported; each manages its own team of specialists.
135
+ * A boss agent's CLAUDE.md registry is auto-generated from agents that report to it.
136
+ */
137
+ isBoss: boolean;
138
+ /** UUIDs of boss agents this agent reports to. Empty array if this agent is a boss. */
139
+ reportsTo: string[];
140
+ /**
141
+ * The agent's main CLAUDE.md instruction file content.
142
+ * Written to the session working directory on each session start.
143
+ * Skills are written separately to .claude/commands/ as slash commands.
144
+ */
145
+ claudeMd: string;
146
+ /** Username of the user who created this agent. 'system' for seeded agents. */
147
+ createdBy: string;
148
+ createdAt: Date;
149
+ updatedAt: Date;
150
+ }
151
+
152
+ /**
153
+ * A globally available MCP server in the platform catalog.
154
+ * MCP servers are defined once at the platform level and can be
155
+ * assigned to any agent via the agent_mcps join table.
156
+ */
157
+ export interface McpServer {
158
+ /** UUID primary key. */
159
+ id: string;
160
+ /**
161
+ * Unique name used to identify the server and construct tool names.
162
+ * Tool names follow the pattern: mcp__{name}__{toolName}
163
+ * @example "redshift-mcp", "openmetadata"
164
+ */
165
+ name: string;
166
+ /** Transport type of the MCP server. */
167
+ type: McpServerType;
168
+ /** Transport-specific configuration (command/args/env or url/headers). */
169
+ config: McpServerConfig;
170
+ /** Human-readable description of what this MCP server provides. */
171
+ description?: string;
172
+ /** Whether this server is available for agents to use. */
173
+ enabled: boolean;
174
+ createdAt: Date;
175
+ }
176
+
177
+ /**
178
+ * A named secret stored in the platform env_vars table.
179
+ * Values are write-only — never returned via the API after creation.
180
+ */
181
+ export interface EnvVar {
182
+ key: string;
183
+ description?: string;
184
+ updatedAt: Date;
185
+ }
186
+
187
+ /**
188
+ * Join record linking an agent to an MCP server from the catalog.
189
+ * When an agent is started, all its associated MCP servers are loaded
190
+ * and passed to the Claude Code SDK.
191
+ */
192
+ export interface AgentMcp {
193
+ agentId: string;
194
+ mcpId: string;
195
+ }
196
+
197
+ /**
198
+ * Memory type classification, following the auto-memory system conventions.
199
+ *
200
+ * - `user`: Information about the user's role, goals, and preferences.
201
+ * - `feedback`: Guidance from users about how the agent should behave.
202
+ * - `project`: Information about ongoing work, goals, and context.
203
+ * - `reference`: Pointers to external resources and systems.
204
+ */
205
+ export type MemoryType = 'user' | 'feedback' | 'project' | 'reference';
206
+
207
+ /**
208
+ * A skill file for an agent.
209
+ * Skills are markdown documents that define an agent's knowledge, behavior,
210
+ * and capabilities. They are compiled in order into a single CLAUDE.md file
211
+ * that the Claude Code SDK reads as the agent's system prompt.
212
+ *
213
+ * Skills are organized by category (e.g., "00-core", "01-knowledge") and
214
+ * sorted by sort_order within each category.
215
+ */
216
+ export interface Skill {
217
+ /** UUID primary key. */
218
+ id: string;
219
+ agentId: string;
220
+ /**
221
+ * Category folder name, used for organization and compile order.
222
+ * @example "00-core", "01-schema-knowledge", "02-sql-patterns"
223
+ */
224
+ category: string;
225
+ /**
226
+ * Filename within the category.
227
+ * @example "identity.md", "workflow.md"
228
+ */
229
+ filename: string;
230
+ /** Full markdown content of the skill file. */
231
+ content: string;
232
+ /** Sort order within the category (lower = compiled first). */
233
+ sortOrder: number;
234
+ createdAt: Date;
235
+ updatedAt: Date;
236
+ }
237
+
238
+ /**
239
+ * Tool permissions for an agent.
240
+ * Controls which Claude Code SDK built-in tools and MCP tools the agent
241
+ * can use. For security, agents should only have access to what they need.
242
+ */
243
+ export interface Permission {
244
+ /** UUID primary key. */
245
+ id: string;
246
+ agentId: string;
247
+ /**
248
+ * Explicitly allowed tools. MCP tools follow the pattern:
249
+ * mcp__{serverName}__{toolName}
250
+ * Built-in tools: "Read", "Write", "Edit", "Bash", etc.
251
+ */
252
+ allowedTools: string[];
253
+ /**
254
+ * Explicitly denied tools. Overrides allowedTools.
255
+ * Useful for blocking dangerous built-in tools (e.g., "Bash", "Write").
256
+ */
257
+ deniedTools: string[];
258
+ updatedAt: Date;
259
+ }
260
+
261
+ /**
262
+ * Per-agent channel restrictions.
263
+ * If allowedChannels is non-empty, the bot only responds in those channels.
264
+ * Empty allowedChannels means unrestricted (responds everywhere).
265
+ * Bot-initiated outbound DMs (scheduled jobs) bypass this restriction entirely.
266
+ */
267
+ export interface Restriction {
268
+ id: string;
269
+ agentId: string;
270
+ /** Slack channel IDs the bot is allowed to respond in. Empty = unrestricted. */
271
+ allowedChannels: string[];
272
+ updatedAt: Date;
273
+ }
274
+
275
+ /**
276
+ * A memory entry for an agent.
277
+ *
278
+ * Memory is the primary mechanism by which agents learn from interactions.
279
+ * During a conversation, the Claude Code SDK writes memory files to the agent's
280
+ * working directory. The runner watches for these writes and persists them to
281
+ * the database. On restart, memories are re-materialized to disk so the agent
282
+ * retains everything it has learned.
283
+ *
284
+ * Memory entries are compiled into the agent's CLAUDE.md so they are always
285
+ * in context, enabling continuous improvement across all conversations.
286
+ */
287
+ export interface Memory {
288
+ /** UUID primary key. */
289
+ id: string;
290
+ agentId: string;
291
+ /** Category of memory, used to structure the CLAUDE.md memory section. */
292
+ type: MemoryType;
293
+ /**
294
+ * Short name/title for this memory entry.
295
+ * @example "user_is_data_scientist", "avoid_mocking_database"
296
+ */
297
+ name: string;
298
+ /**
299
+ * Full markdown content of the memory.
300
+ * Should include frontmatter (name, description, type) following
301
+ * the auto-memory system format.
302
+ */
303
+ content: string;
304
+ createdAt: Date;
305
+ updatedAt: Date;
306
+ }
307
+
308
+ /**
309
+ * A persisted conversation session mapping Slack thread to Claude session.
310
+ * Enables conversation continuity — when a user returns to a thread, the
311
+ * agent resumes from where it left off using the Claude Code SDK's resume feature.
312
+ */
313
+ export interface Session {
314
+ /** UUID primary key. */
315
+ id: string;
316
+ agentId: string;
317
+ /**
318
+ * Composite key identifying the Slack conversation context.
319
+ * Format: `{userId}-{channelId}-{threadTs|'direct'}`
320
+ */
321
+ sessionKey: string;
322
+ /**
323
+ * The Claude Code SDK session ID returned from the first `system:init` message.
324
+ * Passed as `options.resume` in subsequent queries to continue the conversation.
325
+ */
326
+ claudeSessionId?: string;
327
+ /** Last time this session had activity. Used for cleanup of stale sessions. */
328
+ lastActivity: Date;
329
+ /** Hash of MCP config at session creation — used to detect config changes requiring session invalidation. */
330
+ mcpHash?: string;
331
+ }
332
+
333
+ // =============================================================================
334
+ // Runtime Types (not stored in DB)
335
+ // =============================================================================
336
+
337
+ /**
338
+ * In-memory representation of an active conversation session in the runner.
339
+ * Augments the persisted Session with runtime state.
340
+ */
341
+ export interface ConversationSession {
342
+ userId: string;
343
+ channelId: string;
344
+ threadTs?: string;
345
+ /** Claude Code SDK session ID for resuming conversations. */
346
+ sessionId?: string;
347
+ isActive: boolean;
348
+ lastActivity: Date;
349
+ }
350
+
351
+ // =============================================================================
352
+ // Redis Pub/Sub Event Types
353
+ // =============================================================================
354
+
355
+ /**
356
+ * Event to reload (stop + recompile + restart) an agent.
357
+ * Published by the web API when an agent's config, skills, or MCPs change.
358
+ */
359
+ export interface AgentReloadEvent {
360
+ type: 'reload';
361
+ agentId: string;
362
+ }
363
+
364
+ /** Event to start a stopped agent. */
365
+ export interface AgentStartEvent {
366
+ type: 'start';
367
+ agentId: string;
368
+ }
369
+
370
+ /** Event to stop a running agent. */
371
+ export interface AgentStopEvent {
372
+ type: 'stop';
373
+ agentId: string;
374
+ }
375
+
376
+ /** Event to reload the job scheduler (jobs created/updated/deleted). */
377
+ export interface JobsReloadEvent {
378
+ type: 'reload-jobs';
379
+ }
380
+
381
+ /** Union of all lifecycle events published on Redis. */
382
+ export type AgentEvent = AgentReloadEvent | AgentStartEvent | AgentStopEvent | JobsReloadEvent;
383
+
384
+ /** Redis channel name for agent lifecycle events. */
385
+ export const AGENT_EVENTS_CHANNEL = 'agent:events';
386
+
387
+ // =============================================================================
388
+ // Slack App Manifest Type
389
+ // =============================================================================
390
+
391
+ /**
392
+ * Slack app manifest structure for programmatic app creation.
393
+ * Generated by the platform during the agent onboarding wizard.
394
+ * @see https://api.slack.com/reference/manifests
395
+ */
396
+ export interface SlackAppManifest {
397
+ display_information: {
398
+ name: string;
399
+ description?: string;
400
+ background_color?: string;
401
+ long_description?: string;
402
+ };
403
+ features: {
404
+ bot_user: {
405
+ display_name: string;
406
+ always_online: boolean;
407
+ };
408
+ app_home?: {
409
+ home_tab_enabled: boolean;
410
+ messages_tab_enabled: boolean;
411
+ messages_tab_read_only_enabled: boolean;
412
+ };
413
+ };
414
+ oauth_config: {
415
+ scopes: {
416
+ bot: string[];
417
+ };
418
+ };
419
+ settings: {
420
+ event_subscriptions: {
421
+ bot_events: string[];
422
+ };
423
+ interactivity: {
424
+ is_enabled: boolean;
425
+ };
426
+ socket_mode_enabled: boolean;
427
+ token_rotation_enabled: boolean;
428
+ org_deploy_enabled: boolean;
429
+ };
430
+ }
431
+
432
+ /** Default Slack OAuth scopes required for all agents. */
433
+ export const DEFAULT_SLACK_BOT_SCOPES: string[] = [
434
+ 'app_mentions:read',
435
+ 'channels:history',
436
+ 'channels:read',
437
+ 'chat:write',
438
+ 'chat:write.public',
439
+ 'files:read',
440
+ 'files:write',
441
+ 'groups:history',
442
+ 'groups:read',
443
+ 'im:history',
444
+ 'im:read',
445
+ 'im:write',
446
+ 'mpim:read',
447
+ 'reactions:read',
448
+ 'reactions:write',
449
+ 'users:read',
450
+ ];
451
+
452
+ /** Additional scopes required specifically by the boss agent. */
453
+ export const BOSS_ADDITIONAL_SCOPES: string[] = [
454
+ 'channels:read',
455
+ 'groups:read',
456
+ ];
457
+
458
+ // =============================================================================
459
+ // API Request / Response Types
460
+ // =============================================================================
461
+
462
+ /**
463
+ * Request body for creating a new agent.
464
+ * Used in POST /api/agents.
465
+ */
466
+ export interface CreateAgentRequest {
467
+ slug: string;
468
+ name: string;
469
+ persona?: string;
470
+ description?: string;
471
+ slackBotToken: string;
472
+ slackAppToken: string;
473
+ slackSigningSecret: string;
474
+ model?: string;
475
+ isBoss?: boolean;
476
+ /** UUIDs of boss agents this agent reports to. */
477
+ reportsTo?: string[];
478
+ /** IDs of MCP servers from the catalog to assign to this agent. */
479
+ mcpServerIds?: string[];
480
+ /** Skill template to bootstrap: blank | data-analyst | writer | developer */
481
+ skillTemplate?: SkillTemplate;
482
+ }
483
+
484
+ /**
485
+ * Request body for updating an existing agent's configuration.
486
+ * Used in PATCH /api/agents/[id].
487
+ */
488
+ export interface UpdateAgentRequest {
489
+ name?: string;
490
+ persona?: string;
491
+ description?: string;
492
+ slackBotToken?: string;
493
+ slackAppToken?: string;
494
+ slackSigningSecret?: string;
495
+ model?: string;
496
+ isBoss?: boolean;
497
+ reportsTo?: string[];
498
+ }
499
+
500
+ /**
501
+ * Request body for creating or updating a global MCP server.
502
+ * Used in POST/PATCH /api/mcps.
503
+ */
504
+ export interface UpsertMcpServerRequest {
505
+ name: string;
506
+ type: McpServerType;
507
+ config: McpServerConfig;
508
+ description?: string;
509
+ enabled?: boolean;
510
+ }
511
+
512
+ /**
513
+ * Request body for updating an agent's tool permissions.
514
+ * Used in PUT /api/agents/[id]/permissions.
515
+ */
516
+ export interface UpdatePermissionsRequest {
517
+ allowedTools: string[];
518
+ deniedTools: string[];
519
+ }
520
+
521
+ /**
522
+ * Request body for updating an agent's channel restrictions.
523
+ * Used in PUT /api/agents/[id]/restrictions.
524
+ */
525
+ export interface UpdateRestrictionsRequest {
526
+ allowedChannels: string[];
527
+ }
528
+
529
+ /**
530
+ * Request body for creating or updating a skill file.
531
+ * Used in PUT /api/agents/[id]/skills/[category]/[filename].
532
+ */
533
+ export interface UpsertSkillRequest {
534
+ content: string;
535
+ sortOrder?: number;
536
+ }
537
+
538
+ /**
539
+ * Request body for creating or updating a memory entry.
540
+ * Used in POST/PATCH /api/agents/[id]/memories.
541
+ */
542
+ export interface UpsertMemoryRequest {
543
+ type: MemoryType;
544
+ name: string;
545
+ content: string;
546
+ }
547
+
548
+ // =============================================================================
549
+ // Skill Templates
550
+ // =============================================================================
551
+
552
+ /**
553
+ * Built-in skill templates for bootstrapping new agents.
554
+ * - `blank`: Minimal identity skill only.
555
+ * - `data-analyst`: SQL/data analysis skills (based on NLQ bot).
556
+ * - `writer`: Content generation and summarization skills.
557
+ * - `developer`: Code review and development assistance skills.
558
+ */
559
+ export type SkillTemplate = 'blank' | 'data-analyst' | 'writer' | 'developer';
560
+
561
+ // =============================================================================
562
+ // Scheduled Jobs
563
+ // =============================================================================
564
+
565
+ /** Delivery target type for scheduled job results. */
566
+ export type JobTargetType = 'channel' | 'dm';
567
+
568
+ /** Execution status of a job run. */
569
+ export type JobRunStatus = 'running' | 'success' | 'error';
570
+
571
+ /**
572
+ * A recurring task executed by the boss agent on a cron schedule.
573
+ * The boss receives the prompt, may delegate to specialists,
574
+ * and the result is posted to the target channel or DM.
575
+ */
576
+ export interface ScheduledJob {
577
+ id: string;
578
+ /** The agent that executes this job. */
579
+ agentId: string;
580
+ name: string;
581
+ /** The prompt sent to the agent on each run. */
582
+ prompt: string;
583
+ /** Cron expression (e.g. "0 8 * * *" for daily at 8am). */
584
+ cronSchedule: string;
585
+ /** Whether to post to a channel or send a DM. */
586
+ targetType: JobTargetType;
587
+ /** Slack channel ID or user ID to deliver results to. */
588
+ targetId: string;
589
+ enabled: boolean;
590
+ createdAt: Date;
591
+ updatedAt: Date;
592
+ }
593
+
594
+ /**
595
+ * A single execution record for a scheduled job.
596
+ */
597
+ export interface JobRun {
598
+ id: string;
599
+ jobId: string;
600
+ startedAt: Date;
601
+ finishedAt?: Date;
602
+ status: JobRunStatus;
603
+ /** Truncated output from the job (max ~2000 chars). */
604
+ output?: string;
605
+ /** Error message if the job failed. */
606
+ error?: string;
607
+ }
608
+
609
+ /**
610
+ * Request body for creating a new scheduled job.
611
+ */
612
+ export interface CreateJobRequest {
613
+ agentId: string;
614
+ name: string;
615
+ prompt: string;
616
+ cronSchedule: string;
617
+ targetType?: JobTargetType;
618
+ targetId: string;
619
+ enabled?: boolean;
620
+ }
621
+
622
+ /**
623
+ * Request body for updating an existing scheduled job.
624
+ */
625
+ export interface UpdateJobRequest {
626
+ agentId?: string;
627
+ name?: string;
628
+ prompt?: string;
629
+ cronSchedule?: string;
630
+ targetType?: JobTargetType;
631
+ targetId?: string;
632
+ enabled?: boolean;
633
+ }
634
+
635
+ // =============================================================================
636
+ // Version Control — Agent Snapshots
637
+ // =============================================================================
638
+
639
+ /**
640
+ * A single skill entry stored inside an agent snapshot.
641
+ * UUID is omitted — re-generated via upsertSkill on restore.
642
+ */
643
+ export interface SnapshotSkill {
644
+ category: string;
645
+ filename: string;
646
+ content: string;
647
+ sort_order: number;
648
+ }
649
+
650
+ /** What triggered the snapshot creation. */
651
+ export type SnapshotTrigger = 'skills' | 'permissions' | 'mcps' | 'claude-md' | 'restrictions' | 'manual';
652
+
653
+ /**
654
+ * A point-in-time snapshot of an agent's full configuration.
655
+ * Immutable — never updated after creation.
656
+ *
657
+ * - `skillsJson` — full skills array at snapshot time
658
+ * - `compiledMd` — skills-only CLAUDE.md (no memories section)
659
+ * - `createdBy` — username of the person whose save triggered this snapshot
660
+ */
661
+ export interface AgentSnapshot {
662
+ id: string;
663
+ agentId: string;
664
+ label?: string;
665
+ trigger: SnapshotTrigger;
666
+ /** Username of the person who triggered the snapshot (from session). */
667
+ createdBy: string;
668
+ skillsJson: SnapshotSkill[];
669
+ allowedTools: string[];
670
+ deniedTools: string[];
671
+ mcpIds: string[];
672
+ compiledMd: string;
673
+ allowedChannels: string[];
674
+ createdAt: Date;
675
+ }
676
+
677
+ /**
678
+ * Request body for creating a manual snapshot.
679
+ * Used in POST /api/agents/[id]/snapshots.
680
+ */
681
+ export interface CreateSnapshotRequest {
682
+ label?: string;
683
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022"],
6
+ "outDir": "dist",
7
+ "rootDir": "src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "sourceMap": true
14
+ },
15
+ "include": ["src/**/*"],
16
+ "exclude": ["node_modules", "dist"]
17
+ }